From 9cd3855bd925ff9d6d1c9e4f67afcee316b98bb3 Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Tue, 27 Feb 2024 21:08:56 +0100 Subject: [PATCH 001/301] Configure jj From 65039f4f17566324d98f2f2c6305f731d787c5ee Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Wed, 28 Feb 2024 17:05:28 +0100 Subject: [PATCH 002/301] set up and configure mprocs --- modules/default.nix | 1 + modules/mprocs.nix | 16 ++++++++++++++++ 2 files changed, 17 insertions(+) create mode 100644 modules/mprocs.nix diff --git a/modules/default.nix b/modules/default.nix index c3be46f..eb9042c 100644 --- a/modules/default.nix +++ b/modules/default.nix @@ -7,5 +7,6 @@ ./firewall.nix ./git.nix ./kmscon.nix + ./mprocs.nix ]; } diff --git a/modules/mprocs.nix b/modules/mprocs.nix new file mode 100644 index 0000000..cbf7153 --- /dev/null +++ b/modules/mprocs.nix @@ -0,0 +1,16 @@ +{...}: { + home-manager.users.jade = { + pkgs, + lib, + ... + }: { + home = { + packages = [pkgs.mprocs]; + }; + xdg.configFile."mprocs/mprocs.yaml" = { + text = builtins.toJSON { + proc_list_width = 15; + }; + }; + }; +} From 4f01412843cfc2d541d4a13b3d91febe39eca7d8 Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Wed, 28 Feb 2024 17:06:04 +0100 Subject: [PATCH 003/301] make typst live editing and preview a thing --- modules/desktop/default.nix | 3 + modules/shell/helix.nix | 116 +++++++++++++++++++++++++++++------- other/config.nu | 15 ++--- 3 files changed, 104 insertions(+), 30 deletions(-) diff --git a/modules/desktop/default.nix b/modules/desktop/default.nix index 2841c31..9f12200 100644 --- a/modules/desktop/default.nix +++ b/modules/desktop/default.nix @@ -183,6 +183,9 @@ in oneko plover.dev + + mupdf + inotify-tools ]; xsession = { enable = true; diff --git a/modules/shell/helix.nix b/modules/shell/helix.nix index 2238418..14029d7 100644 --- a/modules/shell/helix.nix +++ b/modules/shell/helix.nix @@ -1,5 +1,12 @@ {config, ...}: { - home-manager.users.jade = {pkgs, ...}: { + home-manager.users.jade = {pkgs, ...}: let + typstGrammar = pkgs.fetchFromGitHub { + owner = "uben0"; + repo = "tree-sitter-typst"; + rev = "baddc325e858afff90501dbefa00ecfa28528931"; + sha256 = "sha256-XZAgnpb1B8EZ2WXPj/JYSZGsmpKsnDiBFCDF0XjunOM"; + }; + in { home = { sessionVariables.EDITOR = "hx"; packages = [ @@ -7,15 +14,28 @@ pkgs.vscode-langservers-extracted pkgs.nodePackages.typescript-language-server pkgs.emmet-language-server + pkgs.typst-lsp ]; }; + home.file = { + ".config/helix/runtime/queries" = { + source = "${typstGrammar}/queries"; + }; + }; programs.helix = { enable = true; settings = { theme = "gruvbox"; editor = { line-number = "relative"; - lsp.display-messages = true; + bufferline = "multiple"; + color-modes = true; + lsp = { + display-messages = true; + display-inlay-hints = true; + }; + shell = ["nu" "-c"]; + idle-timeout = 0; indent-guides = { render = true; character = "│"; @@ -38,32 +58,86 @@ }; }; languages = { - language-server."nu-builtin-lsp" = { - command = "${config.users.defaultUserShell}/bin/nu"; - args = ["--lsp"]; - }; - language-server."rust-analyzer" = { - config = { - check.command = "clippy"; + language-server = { + "nu-builtin-lsp" = { + command = "${config.users.defaultUserShell}/bin/nu"; + args = ["--lsp"]; + }; + "rust-analyzer" = { + config = { + check.command = "clippy"; + completion.snippets.custom = { + "pub fn" = { + prefix = ["pfn" "pubfn"]; + postfix = ["pfn"]; + body = [ + "pub fn $\{receiver\}() {" + "\\t$1" + "}" + ]; + scope = "type"; + }; + }; + }; + }; + "emmet-language-server" = { + command = "emmet-language-server"; + args = ["--stdio"]; + }; + # "php" = { + # name = "php"; + # file-types = [ "php" ]; + # language-server = { + # command = "psalm"; + # args = ["--language-server"]; + # }; + # }; + "typst-lsp" = { + command = "typst-lsp"; + config = { + exportPdf = "onType"; + }; }; }; - language-server."emmet-language-server" = { - command = "emmet-language-server"; - args = ["--stdio"]; - }; - # "php" = { - # name = "php"; - # file-types = [ "php" ]; - # language-server = { - # command = "psalm"; - # args = ["--language-server"]; - # }; - # }; + grammar = [ + { + name = "typst"; + source = { + git = "https://github.com/uben0/tree-sitter-typst"; + rev = "baddc325e858afff90501dbefa00ecfa28528931"; + # path = "${typstGrammar}"; + }; + } + ]; language = [ { name = "nu"; language-servers = ["nu-builtin-lsp"]; } + { + name = "typst"; + scope = "source.typst"; + file-types = ["typ" "typst"]; + injection-regex = "typ(st)?"; + comment-token = "//"; + indent = { + tab-width = 2; + unit = " "; + }; + roots = ["typst.toml"]; + formatter = { + command = "${pkgs.typstfmt}/bin/typstfmt"; + }; + auto-format = true; + language-servers = ["typst-lsp"]; + auto-pairs = { + "(" = ")"; + "{" = "}"; + "[" = "]"; + "$" = "$"; + "\"" = "\""; + }; + } { name = "nix"; formatter = { diff --git a/other/config.nu b/other/config.nu index 2903d1d..2f1a437 100644 --- a/other/config.nu +++ b/other/config.nu @@ -803,18 +803,15 @@ def glog [ ] { git log --pretty=%h»¦«%s»¦«%aN»¦«%aE»¦«%aD -n $amount | lines - | split column "»¦«" commit subject name email date + | split column "»¦«u commit subject name email date" } -def ed [ - file: path - ...cmdargs: string +def typed [ + name: string ] { - let ext = $file | path parse | get extension; - match $ext { - "typ" => {|| zellij run --direction down -- typst watch $file ($cmdargs | prepend '--open' | str join ' ') } - }; - hx $file + touch $"($name).typ" + typst compile $"($name).typ" + mprocs --names Editor,Viewer,Notify $"hx '($name).typ'" $"mupdf-x11 '($name).pdf'" $"while inotifywait -e modify '($name).pdf' ; do pkill -HUP mupdf; done" } alias gnix = cd ~/nix-configs; From b927205c9daa36759b082fbef0f6679b5b9e4e0e Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Wed, 28 Feb 2024 17:06:21 +0100 Subject: [PATCH 004/301] fix gitui keymap --- modules/git.nix | 36 ++++++++---------------------------- 1 file changed, 8 insertions(+), 28 deletions(-) diff --git a/modules/git.nix b/modules/git.nix index 693f2fc..87c068f 100644 --- a/modules/git.nix +++ b/modules/git.nix @@ -43,36 +43,16 @@ programs.gitui = { enable = true; keyConfig = '' - ( - open_help: Some(( code: F(1), modifiers: ( bits: 0,),)), + ( + move_left: Some(( code: Char('h'), modifiers: "")), + move_right: Some(( code: Char('l'), modifiers: "")), + move_up: Some(( code: Char('k'), modifiers: "")), + move_down: Some(( code: Char('j'), modifiers: "")), - move_left: Some(( code: Char('h'), modifiers: ( bits: 0,),)), - move_right: Some(( code: Char('l'), modifiers: ( bits: 0,),)), - move_up: Some(( code: Char('k'), modifiers: ( bits: 0,),)), - move_down: Some(( code: Char('j'), modifiers: ( bits: 0,),)), + stash_open: Some(( code: Char('l'), modifiers: "")), + open_help: Some(( code: F(1), modifiers: "")), - popup_up: Some(( code: Char('p'), modifiers: ( bits: 2,),)), - popup_down: Some(( code: Char('n'), modifiers: ( bits: 2,),)), - page_up: Some(( code: Char('b'), modifiers: ( bits: 2,),)), - page_down: Some(( code: Char('f'), modifiers: ( bits: 2,),)), - home: Some(( code: Char('g'), modifiers: ( bits: 0,),)), - end: Some(( code: Char('G'), modifiers: ( bits: 1,),)), - shift_up: Some(( code: Char('K'), modifiers: ( bits: 1,),)), - shift_down: Some(( code: Char('J'), modifiers: ( bits: 1,),)), - - edit_file: Some(( code: Char('I'), modifiers: ( bits: 1,),)), - - status_reset_item: Some(( code: Char('U'), modifiers: ( bits: 1,),)), - - diff_reset_lines: Some(( code: Char('u'), modifiers: ( bits: 0,),)), - diff_stage_lines: Some(( code: Char('s'), modifiers: ( bits: 0,),)), - - stashing_save: Some(( code: Char('w'), modifiers: ( bits: 0,),)), - stashing_toggle_index: Some(( code: Char('m'), modifiers: ( bits: 0,),)), - - stash_open: Some(( code: Char('l'), modifiers: ( bits: 0,),)), - - abort_merge: Some(( code: Char('M'), modifiers: ( bits: 1,),)), + status_reset_item: Some(( code: Char('U'), modifiers: "SHIFT")), ) ''; }; From 95329f4a0b30c9716d6d23f51fa705affe159e70 Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Thu, 29 Feb 2024 19:42:50 +0100 Subject: [PATCH 005/301] flake.lock: Update MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Flake lock file updates: • Updated input 'home-manager': 'github:nix-community/home-manager/1d085ea4444d26aa52297758b333b449b2aa6fca' (2024-02-26) → 'github:nix-community/home-manager/2f3367769a93b226c467551315e9e270c3f78b15' (2024-02-29) • Updated input 'mac-brcm-fw': 'path:/home/jade/nix-configs/mac-brcm-fw?lastModified=1701034142&narHash=sha256-%2BkW8ogc6DykjMVlrr%2B3vWKs9ZUdJ9EW72LbY7k/Qvh4%3D' (2023-11-26) → 'path:/home/jade/nix-configs/mac-brcm-fw?lastModified=1709065070&narHash=sha256-%2BkW8ogc6DykjMVlrr%2B3vWKs9ZUdJ9EW72LbY7k/Qvh4%3D' (2024-02-27) • Updated input 'nixpkgs': 'github:NixOS/nixpkgs/73de017ef2d18a04ac4bfd0c02650007ccb31c2a' (2024-02-24) → 'github:NixOS/nixpkgs/9099616b93301d5cf84274b184a3a5ec69e94e08' (2024-02-28) • Updated input 'nixpkgs-stable': 'github:NixOS/nixpkgs/5bf1cadb72ab4e77cb0b700dab76bcdaf88f706b' (2024-02-25) → 'github:NixOS/nixpkgs/c8e74c2f83fe12b4e5a8bd1abbc090575b0f7611' (2024-02-28) --- flake.lock | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/flake.lock b/flake.lock index f8a3df4..b1f4803 100644 --- a/flake.lock +++ b/flake.lock @@ -190,11 +190,11 @@ ] }, "locked": { - "lastModified": 1708988456, - "narHash": "sha256-RCz7Xe64tN2zgWk+MVHkzg224znwqknJ1RnB7rVqUWw=", + "lastModified": 1709204054, + "narHash": "sha256-U1idK0JHs1XOfSI1APYuXi4AEADf+B+ZU4Wifc0pBHk=", "owner": "nix-community", "repo": "home-manager", - "rev": "1d085ea4444d26aa52297758b333b449b2aa6fca", + "rev": "2f3367769a93b226c467551315e9e270c3f78b15", "type": "github" }, "original": { @@ -226,7 +226,7 @@ "mac-brcm-fw": { "flake": false, "locked": { - "lastModified": 1701034142, + "lastModified": 1709065070, "narHash": "sha256-+kW8ogc6DykjMVlrr+3vWKs9ZUdJ9EW72LbY7k/Qvh4=", "path": "/home/jade/nix-configs/mac-brcm-fw", "type": "path" @@ -345,11 +345,11 @@ }, "nixpkgs-stable": { "locked": { - "lastModified": 1708831307, - "narHash": "sha256-0iL/DuGjiUeck1zEaL+aIe2WvA3/cVhp/SlmTcOZXH4=", + "lastModified": 1709128929, + "narHash": "sha256-GWrv9a+AgGhG4/eI/CyVVIIygia7cEy68Huv3P8oyaw=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "5bf1cadb72ab4e77cb0b700dab76bcdaf88f706b", + "rev": "c8e74c2f83fe12b4e5a8bd1abbc090575b0f7611", "type": "github" }, "original": { @@ -466,11 +466,11 @@ }, "nixpkgs_8": { "locked": { - "lastModified": 1708807242, - "narHash": "sha256-sRTRkhMD4delO/hPxxi+XwLqPn8BuUq6nnj4JqLwOu0=", + "lastModified": 1709150264, + "narHash": "sha256-HofykKuisObPUfj0E9CJVfaMhawXkYx3G8UIFR/XQ38=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "73de017ef2d18a04ac4bfd0c02650007ccb31c2a", + "rev": "9099616b93301d5cf84274b184a3a5ec69e94e08", "type": "github" }, "original": { From a1e2fceac92d038ff3997102fcdff5a111da2f9a Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Thu, 29 Feb 2024 19:47:43 +0100 Subject: [PATCH 006/301] add libertine font --- modules/desktop/creative.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/modules/desktop/creative.nix b/modules/desktop/creative.nix index 93cbfe5..efbeedb 100644 --- a/modules/desktop/creative.nix +++ b/modules/desktop/creative.nix @@ -11,6 +11,7 @@ garamond-libre ocr-a amiri + libertine ]; fonts.fontDir.enable = true; home-manager.users.jade = {pkgs, ...}: { From 03abcccb51412181f6e59aa4da7272140ec7fa6f Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Thu, 29 Feb 2024 19:48:14 +0100 Subject: [PATCH 007/301] make idle timeout less aggro --- modules/shell/helix.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/shell/helix.nix b/modules/shell/helix.nix index 14029d7..b182b86 100644 --- a/modules/shell/helix.nix +++ b/modules/shell/helix.nix @@ -35,7 +35,7 @@ display-inlay-hints = true; }; shell = ["nu" "-c"]; - idle-timeout = 0; + idle-timeout = 30; indent-guides = { render = true; character = "│"; From efe761453956af1b6f799231163cfb7e599b47af Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Thu, 29 Feb 2024 19:48:45 +0100 Subject: [PATCH 008/301] mprocs kb shortcuts --- modules/mprocs.nix | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/modules/mprocs.nix b/modules/mprocs.nix index cbf7153..7d6b96b 100644 --- a/modules/mprocs.nix +++ b/modules/mprocs.nix @@ -10,6 +10,14 @@ xdg.configFile."mprocs/mprocs.yaml" = { text = builtins.toJSON { proc_list_width = 15; + keymap_procs = { + "" = {c = "toggle-focus";}; + }; + keymap_term = { + "" = null; + # Ctrl-m so it doesnt overlap with zellij or helix + "" = {c = "toggle-focus";}; + }; }; }; }; From 9057c3600fcdb830478b349cb2b64b4ed1ea6bc6 Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Thu, 29 Feb 2024 19:48:57 +0100 Subject: [PATCH 009/301] fix glog command --- other/config.nu | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/other/config.nu b/other/config.nu index 2f1a437..7b1d322 100644 --- a/other/config.nu +++ b/other/config.nu @@ -803,7 +803,7 @@ def glog [ ] { git log --pretty=%h»¦«%s»¦«%aN»¦«%aE»¦«%aD -n $amount | lines - | split column "»¦«u commit subject name email date" + | split column "»¦«" commit subject name email date } def typed [ From d7b141428aed01d75eec9e0a498d94fef0b7b5fa Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Fri, 1 Mar 2024 18:22:45 +0100 Subject: [PATCH 010/301] add inter font --- modules/desktop/creative.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/modules/desktop/creative.nix b/modules/desktop/creative.nix index efbeedb..3c5c79e 100644 --- a/modules/desktop/creative.nix +++ b/modules/desktop/creative.nix @@ -12,6 +12,7 @@ ocr-a amiri libertine + inter ]; fonts.fontDir.enable = true; home-manager.users.jade = {pkgs, ...}: { From beba034c172829151a57c6cf6f89ecb7af6271a7 Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Fri, 1 Mar 2024 18:22:58 +0100 Subject: [PATCH 011/301] try dispatcher script fix try one --- other/scripts/dispatcher.nu | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/other/scripts/dispatcher.nu b/other/scripts/dispatcher.nu index 466732d..6416f50 100755 --- a/other/scripts/dispatcher.nu +++ b/other/scripts/dispatcher.nu @@ -14,6 +14,8 @@ def main [ systemd-cat echo $"($currentnet) \(($interface)): ($type)"; if $interface starts-with 'wlp' { - ^$"/etc/networkhooks/($currentnet).nu" $interface $type + let p = $"/etc/networkhooks/($currentnet).nu"; + systemd-cat echo $p; + ^$p $interface $type } } From 1c0b4d13dcbce27f7c5cdc3b07fce84840af458c Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Sun, 3 Mar 2024 14:22:10 +0100 Subject: [PATCH 012/301] put fonts into their own module --- modules/desktop/creative.nix | 16 ---------------- modules/desktop/default.nix | 1 + modules/desktop/fonts.nix | 18 ++++++++++++++++++ 3 files changed, 19 insertions(+), 16 deletions(-) create mode 100644 modules/desktop/fonts.nix diff --git a/modules/desktop/creative.nix b/modules/desktop/creative.nix index 3c5c79e..98236bc 100644 --- a/modules/desktop/creative.nix +++ b/modules/desktop/creative.nix @@ -1,20 +1,4 @@ {pkgs, ...}: { - fonts.packages = with pkgs; [ - (nerdfonts.override {fonts = ["FiraCode"];}) - montserrat - noto-fonts - atkinson-hyperlegible - arkpandora_ttf - liberation_ttf - caladea - carlito - garamond-libre - ocr-a - amiri - libertine - inter - ]; - fonts.fontDir.enable = true; home-manager.users.jade = {pkgs, ...}: { home.packages = with pkgs; [ audacity diff --git a/modules/desktop/default.nix b/modules/desktop/default.nix index 9f12200..cfc104f 100644 --- a/modules/desktop/default.nix +++ b/modules/desktop/default.nix @@ -32,6 +32,7 @@ in ./specific-hardware ./evremap.nix ./xmonad.nix + ./fonts.nix ./firefox.nix ]; diff --git a/modules/desktop/fonts.nix b/modules/desktop/fonts.nix new file mode 100644 index 0000000..e743bfe --- /dev/null +++ b/modules/desktop/fonts.nix @@ -0,0 +1,18 @@ +{pkgs, ...}: { + fonts.packages = with pkgs; [ + (nerdfonts.override {fonts = ["FiraCode"];}) + montserrat + noto-fonts + atkinson-hyperlegible + arkpandora_ttf + liberation_ttf + caladea + carlito + garamond-libre + ocr-a + amiri + libertine + inter + ]; + fonts.fontDir.enable = true; +} From e2d8337e9940a6d0c7af30d576e34a07c7d4d9ca Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Sun, 3 Mar 2024 14:23:02 +0100 Subject: [PATCH 013/301] disable "easy" insert mode keybinds --- modules/shell/helix.nix | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/modules/shell/helix.nix b/modules/shell/helix.nix index b182b86..910ce19 100644 --- a/modules/shell/helix.nix +++ b/modules/shell/helix.nix @@ -53,9 +53,21 @@ }; }; }; - keys.normal = { + keys = { + + normal = { space."=" = ":fmt"; }; + insert = { + up = "no_op"; + down = "no_op"; + left = "no_op"; + right = "no_op"; + pageup = "no_op"; + pagedown = "no_op"; + home = "no_op"; + end = "no_op"; + }; }; languages = { language-server = { From b5020cdbc7fb69182300099d92d0d0a1d5d2c33d Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Sun, 3 Mar 2024 14:27:38 +0100 Subject: [PATCH 014/301] disable "easy" insert mode keybinds --- modules/shell/helix.nix | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/modules/shell/helix.nix b/modules/shell/helix.nix index 910ce19..2f409f0 100644 --- a/modules/shell/helix.nix +++ b/modules/shell/helix.nix @@ -54,19 +54,19 @@ }; }; keys = { - - normal = { - space."=" = ":fmt"; - }; - insert = { - up = "no_op"; - down = "no_op"; - left = "no_op"; - right = "no_op"; - pageup = "no_op"; - pagedown = "no_op"; - home = "no_op"; - end = "no_op"; + normal = { + space."=" = ":fmt"; + }; + insert = { + up = "no_op"; + down = "no_op"; + left = "no_op"; + right = "no_op"; + pageup = "no_op"; + pagedown = "no_op"; + home = "no_op"; + end = "no_op"; + }; }; }; languages = { From 01d070eb400498971bbb5d70adb8f24b59c26e0a Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Sun, 3 Mar 2024 14:33:18 +0100 Subject: [PATCH 015/301] flake.lock: Update MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Flake lock file updates: • Updated input 'home-manager': 'github:nix-community/home-manager/2f3367769a93b226c467551315e9e270c3f78b15' (2024-02-29) → 'github:nix-community/home-manager/4de84265d7ec7634a69ba75028696d74de9a44a7' (2024-03-03) • Updated input 'nixpkgs': 'github:NixOS/nixpkgs/9099616b93301d5cf84274b184a3a5ec69e94e08' (2024-02-28) → 'github:NixOS/nixpkgs/1536926ef5621b09bba54035ae2bb6d806d72ac8' (2024-02-29) • Updated input 'nixpkgs-stable': 'github:NixOS/nixpkgs/c8e74c2f83fe12b4e5a8bd1abbc090575b0f7611' (2024-02-28) → 'github:NixOS/nixpkgs/79baff8812a0d68e24a836df0a364c678089e2c7' (2024-03-01) --- flake.lock | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/flake.lock b/flake.lock index b1f4803..99d7a1c 100644 --- a/flake.lock +++ b/flake.lock @@ -190,11 +190,11 @@ ] }, "locked": { - "lastModified": 1709204054, - "narHash": "sha256-U1idK0JHs1XOfSI1APYuXi4AEADf+B+ZU4Wifc0pBHk=", + "lastModified": 1709445365, + "narHash": "sha256-DVv6nd9FQBbMWbOmhq0KVqmlc3y3FMSYl49UXmMcO+0=", "owner": "nix-community", "repo": "home-manager", - "rev": "2f3367769a93b226c467551315e9e270c3f78b15", + "rev": "4de84265d7ec7634a69ba75028696d74de9a44a7", "type": "github" }, "original": { @@ -345,11 +345,11 @@ }, "nixpkgs-stable": { "locked": { - "lastModified": 1709128929, - "narHash": "sha256-GWrv9a+AgGhG4/eI/CyVVIIygia7cEy68Huv3P8oyaw=", + "lastModified": 1709309926, + "narHash": "sha256-VZFBtXGVD9LWTecGi6eXrE0hJ/mVB3zGUlHImUs2Qak=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "c8e74c2f83fe12b4e5a8bd1abbc090575b0f7611", + "rev": "79baff8812a0d68e24a836df0a364c678089e2c7", "type": "github" }, "original": { @@ -466,11 +466,11 @@ }, "nixpkgs_8": { "locked": { - "lastModified": 1709150264, - "narHash": "sha256-HofykKuisObPUfj0E9CJVfaMhawXkYx3G8UIFR/XQ38=", + "lastModified": 1709237383, + "narHash": "sha256-cy6ArO4k5qTx+l5o+0mL9f5fa86tYUX3ozE1S+Txlds=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "9099616b93301d5cf84274b184a3a5ec69e94e08", + "rev": "1536926ef5621b09bba54035ae2bb6d806d72ac8", "type": "github" }, "original": { From 991cc8fc88279c640b34fd4f1f64590b37603019 Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Tue, 5 Mar 2024 13:10:08 +0100 Subject: [PATCH 016/301] add input remapping module with easier configuration --- hosts/catbook-j/configuration.nix | 17 ++++- modules/desktop/default.nix | 29 +------- modules/desktop/evremap.nix | 39 ----------- modules/desktop/input/default.nix | 15 ++++ modules/desktop/input/evremap.nix | 110 ++++++++++++++++++++++++++++++ modules/desktop/x.nix | 18 +++++ other/remaps-catbook-j.toml | 22 ------ 7 files changed, 161 insertions(+), 89 deletions(-) delete mode 100644 modules/desktop/evremap.nix create mode 100644 modules/desktop/input/default.nix create mode 100644 modules/desktop/input/evremap.nix create mode 100644 modules/desktop/x.nix delete mode 100644 other/remaps-catbook-j.toml diff --git a/hosts/catbook-j/configuration.nix b/hosts/catbook-j/configuration.nix index 9379ded..406f484 100644 --- a/hosts/catbook-j/configuration.nix +++ b/hosts/catbook-j/configuration.nix @@ -26,7 +26,22 @@ social.enable = true; mail.enable = true; gaming.enable = true; - evremap.enable = true; + }; + input.remapping = { + enable = true; + devices."AT Translated Set 2 keyboard" = { + swapKeys = [ + ["KEY_Y" "KEY_Z"] + ["KEY_LEFTALT" "KEY_LEFTMETA"] + ]; + dual_role = [ + { + input = "KEY_CAPSLOCK"; + hold = ["KEY_LEFTCTRL"]; + tap = ["KEY_ESC"]; + } + ]; + }; }; terminal.enable = true; }; diff --git a/modules/desktop/default.nix b/modules/desktop/default.nix index cfc104f..2e519bd 100644 --- a/modules/desktop/default.nix +++ b/modules/desktop/default.nix @@ -30,10 +30,11 @@ in ./social.nix ./mail.nix ./specific-hardware - ./evremap.nix ./xmonad.nix ./fonts.nix ./firefox.nix + ./x.nix + ./input ]; i18n.inputMethod = { @@ -52,32 +53,6 @@ in services = { printing.enable = true; gnome.gnome-keyring.enable = true; - - xserver = { - enable = true; - - xkb = { - layout = "us"; - variant = "altgr-intl"; - }; - - libinput = { - enable = true; - }; - - desktopManager = { - xterm.enable = false; - }; - - displayManager = { - defaultSession = "none+xmonad"; - gdm.enable = true; - }; - - windowManager.xmonad = { - enable = true; - }; - }; }; programs.xss-lock = { diff --git a/modules/desktop/evremap.nix b/modules/desktop/evremap.nix deleted file mode 100644 index cbb72a2..0000000 --- a/modules/desktop/evremap.nix +++ /dev/null @@ -1,39 +0,0 @@ -{ - pkgs, - config, - lib, - ... -}: let - cfg = config.jade.desktop.evremap; - evremap = pkgs.rustPlatform.buildRustPackage { - pname = "evremap"; - version = "0.1.0"; - src = pkgs.fetchFromGitHub { - owner = "wez"; - repo = "evremap"; - rev = "4480c4eda223b98899b0fbd926bc34f7bd0e1a18"; - sha256 = "sha256-BxSrphgW1n465FX6bKVkq6O0XE2JqanfSYlsGwWUWkQ="; - }; - cargoHash = ""; - cargoLock.lockFile = ../../other/evremap.Cargo.lock; - postPatch = '' - cp ${../../other/evremap.Cargo.lock} Cargo.lock - ''; - nativeBuildInputs = [pkgs.pkg-config]; - buildInputs = [pkgs.libevdev]; - }; -in - with lib; { - options.jade.desktop.evremap = { - enable = mkEnableOption "Enable evremap"; - }; - config = mkIf cfg.enable { - systemd.services.evremap = { - script = "${evremap}/bin/evremap remap ${../../other/remaps-${config.networking.hostName}.toml}"; - wantedBy = ["multi-user.target"]; - unitConfig = { - Restart = "on-failure"; - }; - }; - }; - } diff --git a/modules/desktop/input/default.nix b/modules/desktop/input/default.nix new file mode 100644 index 0000000..88302da --- /dev/null +++ b/modules/desktop/input/default.nix @@ -0,0 +1,15 @@ +{...}: { + imports = [ + ./evremap.nix + ]; + services.xserver = { + xkb = { + layout = "us"; + variant = "altgr-intl"; + }; + + libinput = { + enable = true; + }; + }; +} diff --git a/modules/desktop/input/evremap.nix b/modules/desktop/input/evremap.nix new file mode 100644 index 0000000..bc9a1da --- /dev/null +++ b/modules/desktop/input/evremap.nix @@ -0,0 +1,110 @@ +{ + pkgs, + config, + lib, + utils, + ... +}: let + cfg = config.jade.input.remapping; + evremap = pkgs.rustPlatform.buildRustPackage { + pname = "evremap"; + version = "0.1.0"; + src = pkgs.fetchFromGitHub { + owner = "wez"; + repo = "evremap"; + rev = "4480c4eda223b98899b0fbd926bc34f7bd0e1a18"; + sha256 = "sha256-BxSrphgW1n465FX6bKVkq6O0XE2JqanfSYlsGwWUWkQ="; + }; + cargoHash = ""; + cargoLock.lockFile = ../../../other/evremap.Cargo.lock; + postPatch = '' + cp ${../../../other/evremap.Cargo.lock} Cargo.lock + ''; + nativeBuildInputs = [pkgs.pkg-config]; + buildInputs = [pkgs.libevdev]; + }; + toml = pkgs.formats.toml {}; +in + with lib; { + options.jade.input.remapping = { + enable = mkEnableOption "Enable evremap"; + devices = mkOption { + type = types.attrsOf (types.submodule ({name, ...}: { + options = { + device_name = mkOption { + type = types.str; + description = "The device name"; + default = name; + }; + remap = mkOption { + type = types.listOf (types.submodule ({...}: { + options.input = mkOption {type = types.listOf types.str;}; + options.output = mkOption {type = types.listOf types.str;}; + })); + default = []; + }; + swapKeys = mkOption { + description = "Lists with two keys to be swapped on the keyboard layout."; + type = types.listOf ( + # verify that each key swapping list contains two elements + types.addCheck (types.listOf types.str) (v: builtins.length v == 2) + ); + default = []; + }; + dual_role = mkOption { + type = types.listOf (types.submodule ({...}: { + options.input = mkOption {type = types.str;}; + options.hold = mkOption {type = types.listOf types.str;}; + options.tap = mkOption {type = types.listOf types.str;}; + })); + default = []; + }; + }; + })); + }; + }; + config = mkIf cfg.enable ( + with builtins; let + devs = map ({ + device_name, + remap, + swapKeys, + dual_role, + }: { + inherit device_name dual_role; + + # expand swapKeys to normal remaps + remap = concatLists [ + remap + (lib.lists.flatten (map (keys: [ + { + input = [(head keys)]; + output = [(lib.lists.last keys)]; + } + { + input = [(lib.lists.last keys)]; + output = [(head keys)]; + } + ]) + swapKeys)) + ]; + }) (attrValues cfg.devices); + in { + # generate numbered systemd services for each device to be remapped + # https://github.com/wez/evremap/issues/17 + systemd.services = listToAttrs (genList (i: { + name = "evremap${toString i}"; + value = let + cfgFile = toml.generate "remaps-${toString i}.toml" (elemAt devs i); + in { + script = "${evremap}/bin/evremap remap ${cfgFile}"; + wantedBy = ["multi-user.target"]; + unitConfig = { + Restart = "on-failure"; + }; + }; + }) (length devs)); + environment.systemPackages = [evremap]; + } + ); + } diff --git a/modules/desktop/x.nix b/modules/desktop/x.nix new file mode 100644 index 0000000..dab34ec --- /dev/null +++ b/modules/desktop/x.nix @@ -0,0 +1,18 @@ +{...}: { + services.xserver = { + enable = true; + + desktopManager = { + xterm.enable = false; + }; + + displayManager = { + defaultSession = "none+xmonad"; + gdm.enable = true; + }; + + windowManager.xmonad = { + enable = true; + }; + }; +} diff --git a/other/remaps-catbook-j.toml b/other/remaps-catbook-j.toml deleted file mode 100644 index 6a6067f..0000000 --- a/other/remaps-catbook-j.toml +++ /dev/null @@ -1,22 +0,0 @@ -device_name = "AT Translated Set 2 keyboard" - -[[remap]] -input = [ "KEY_Y" ] -output = [ "KEY_Z" ] - -[[remap]] -input = [ "KEY_Z" ] -output = [ "KEY_Y" ] - -[[remap]] -input = [ "KEY_LEFTALT" ] -output = [ "KEY_LEFTMETA" ] - -[[remap]] -input = [ "KEY_LEFTMETA" ] -output = [ "KEY_LEFTALT" ] - -[[dual_role]] -input = "KEY_CAPSLOCK" -hold = ["KEY_LEFTCTRL"] -tap = ["KEY_ESC"] From 193b0065574bb44d61391efd2809dc2a98548b86 Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Tue, 5 Mar 2024 13:10:25 +0100 Subject: [PATCH 017/301] add aliases for toggling caps lock --- other/config.nu | 3 +++ 1 file changed, 3 insertions(+) diff --git a/other/config.nu b/other/config.nu index 7b1d322..2a1a022 100644 --- a/other/config.nu +++ b/other/config.nu @@ -831,3 +831,6 @@ alias cr = cargo run; alias cl = cargo clippy; alias cb = cargo build; alias cch = cargo check; + +alias togglecaps = xdotool key Caps_Lock; +alias TOGGLECAPS = togglecaps; From 7829fcd0ce98759b8f50ee91182e3151cb9d8289 Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Tue, 5 Mar 2024 13:38:05 +0100 Subject: [PATCH 018/301] merge kmscon and tty configs --- common.nix | 19 ------------------- modules/default.nix | 1 - modules/shell/default.nix | 1 + modules/{kmscon.nix => shell/tty.nix} | 20 ++++++++++++++++++++ 4 files changed, 21 insertions(+), 20 deletions(-) rename modules/{kmscon.nix => shell/tty.nix} (88%) diff --git a/common.nix b/common.nix index 29b73ee..774f65f 100644 --- a/common.nix +++ b/common.nix @@ -90,25 +90,6 @@ with builtins; { }; }; - console.colors = [ - "282828" - "cc241d" - "98971a" - "d79921" - "458588" - "b16286" - "689d6a" - "a89984" - "928374" - "fb4934" - "b8bb26" - "fabd2f" - "83a598" - "d3869b" - "8ec07c" - "ebdbb2" - ]; - # nitrokey services.udev.packages = [pkgs.nitrokey-udev-rules]; services.pcscd.enable = true; diff --git a/modules/default.nix b/modules/default.nix index eb9042c..50424f2 100644 --- a/modules/default.nix +++ b/modules/default.nix @@ -6,7 +6,6 @@ ./flatpak.nix ./firewall.nix ./git.nix - ./kmscon.nix ./mprocs.nix ]; } diff --git a/modules/shell/default.nix b/modules/shell/default.nix index 4134bbc..a78c9fa 100644 --- a/modules/shell/default.nix +++ b/modules/shell/default.nix @@ -6,6 +6,7 @@ ./zellij.nix ./carapace.nix ./direnv.nix + ./tty.nix ]; programs.mosh.enable = true; } diff --git a/modules/kmscon.nix b/modules/shell/tty.nix similarity index 88% rename from modules/kmscon.nix rename to modules/shell/tty.nix index 4c859bd..3070907 100644 --- a/modules/kmscon.nix +++ b/modules/shell/tty.nix @@ -34,6 +34,26 @@ (getAttr (substring 5 2 (toUpper color)) hexLookupTable) ]); in { + # TODO: global colorscheme vars for everything + console.colors = [ + "282828" + "cc241d" + "98971a" + "d79921" + "458588" + "b16286" + "689d6a" + "a89984" + "928374" + "fb4934" + "b8bb26" + "fabd2f" + "83a598" + "d3869b" + "8ec07c" + "ebdbb2" + ]; + services.kmscon = { enable = true; fonts = [ From ede1765ee84319a454c4ab6a729dec7be5de82e9 Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Tue, 5 Mar 2024 13:49:22 +0100 Subject: [PATCH 019/301] move hardware key configs into one file --- common.nix | 10 ----- hosts/catbook-j/configuration.nix | 44 +------------------ .../monosodium-glutamate-g/configuration.nix | 38 +--------------- hosts/potatobook-g/configuration.nix | 9 ---- modules/desktop/specific-hardware/default.nix | 1 + .../specific-hardware/hardware_key.nix | 20 +++++++++ 6 files changed, 24 insertions(+), 98 deletions(-) create mode 100644 modules/desktop/specific-hardware/hardware_key.nix diff --git a/common.nix b/common.nix index 774f65f..d93b56b 100644 --- a/common.nix +++ b/common.nix @@ -29,9 +29,6 @@ with builtins; { environment = { systemPackages = with pkgs; [ - # pynitrokey - # nitrokey-app2 - veracrypt htmlq @@ -90,10 +87,6 @@ with builtins; { }; }; - # nitrokey - services.udev.packages = [pkgs.nitrokey-udev-rules]; - services.pcscd.enable = true; - programs = { ssh.startAgent = false; gnupg.agent = { @@ -138,9 +131,6 @@ with builtins; { users.users.jade = { isNormalUser = true; extraGroups = ["wheel" "input" "uinput" "libvirtd" "adbusers" "dialout" "plugdev" "wireshark"]; - openssh.authorizedKeys.keys = [ - "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOaE8TFsIazpn4OnHvHcRpOFr9FfvMaWOiEjmHsmnAoE cardno:000F_70CD7D05" - ]; }; zramSwap = { diff --git a/hosts/catbook-j/configuration.nix b/hosts/catbook-j/configuration.nix index 406f484..71d44e0 100644 --- a/hosts/catbook-j/configuration.nix +++ b/hosts/catbook-j/configuration.nix @@ -103,55 +103,15 @@ "/crypto_keyfile.bin" = null; }; - # nixpkgs = { - # overlays = [ - # (self: super: { - # linux_zen_xeniafied = pkgs.linuxPackagesFor (pkgs.linuxKernel.kernels.linux_zen.override { - # structuredExtraConfig = with lib.kernel; { - # "FB" = yes; - # "FRAMEBUFFER_CONSOLE" = yes; - # "VGA_CONSOLE" = yes; - # "VIDEO_SELECT" = yes; - # LOGO = lib.mkForce yes; - # LOGO_LINUX_CLUT224 = yes; - # }; - # ignoreConfigErrors = true; - # }); - # }) - # ]; - # }; - boot.kernelPackages = pkgs.linuxPackages_zen; - # boot.kernelPatches = [ - # { - # name = "fomx"; - # patch = ../../other/0001-fomx.patch; - # } - # ]; - services.xserver.displayManager.autoLogin = { enable = true; user = "jade"; }; - networking.hostName = "catbook-j"; # Define your hostname. - # networking.wireless.enable = true; # Enables wireless support via wpa_supplicant. - - # Configure network proxy if necessary - # networking.proxy.default = "http://user:password@proxy:port/"; - # networking.proxy.noProxy = "127.0.0.1,localhost,internal.domain"; - - # Enable networking + # networking networking.networkmanager.enable = true; - - security.pam.services.jade.u2fAuth = true; - programs.i3lock.u2fSupport = true; - security.pam.u2f = { - enable = true; - cue = true; - control = "sufficient"; - authFile = "/home/jade/.ssh/u2f_keys"; - }; + networking.hostName = "catbook-j"; i18n.extraLocaleSettings = { LC_ADDRESS = "de_DE.UTF-8"; diff --git a/hosts/monosodium-glutamate-g/configuration.nix b/hosts/monosodium-glutamate-g/configuration.nix index 7010b36..b6cb3d9 100644 --- a/hosts/monosodium-glutamate-g/configuration.nix +++ b/hosts/monosodium-glutamate-g/configuration.nix @@ -8,24 +8,6 @@ ../../modules ]; - # nixpkgs = { - # overlays = [ - # (self: super: { - # linux_zen_xeniafied = pkgs.linuxPackagesFor (pkgs.linuxKernel.kernels.linux_zen.override { - # structuredExtraConfig = with lib.kernel; { - # "FB" = yes; - # "FRAMEBUFFER_CONSOLE" = yes; - # "VGA_CONSOLE" = yes; - # "VIDEO_SELECT" = yes; - # LOGO = lib.mkForce yes; - # LOGO_LINUX_CLUT224 = yes; - # }; - # ignoreConfigErrors = true; - # }); - # }) - # ]; - # }; - jade = { flatpak.enable = true; desktop = { @@ -46,16 +28,8 @@ systemd-boot.enable = true; efi.canTouchEfiVariables = true; }; - # latest linux kernel - #boot.kernelPackages = pkgs.linuxPackages_latest; - #boot.kernelPackages = pkgs.linux_zen_xeniafied; + kernelPackages = pkgs.linuxPackages_zen; - # boot.kernelPatches = [ - # { - # name = "fomx"; - # patch = ../other/0001-fomx.patch; - # } - # ]; binfmt.emulatedSystems = ["aarch64-linux"]; }; @@ -82,16 +56,6 @@ enableRedistributableFirmware = true; }; - security.pam.services.jade.u2fAuth = true; - programs.i3lock.u2fSupport = true; - - security.pam.u2f = { - enable = true; - cue = true; - control = "sufficient"; - authFile = "/home/jade/.ssh/u2f_keys"; - }; - # missing: menu-qalc picom-jonaburg environment.systemPackages = with pkgs; [ # TODO: clean up. diff --git a/hosts/potatobook-g/configuration.nix b/hosts/potatobook-g/configuration.nix index 28a2e87..c45c889 100644 --- a/hosts/potatobook-g/configuration.nix +++ b/hosts/potatobook-g/configuration.nix @@ -116,17 +116,8 @@ services.gnome.gnome-keyring.enable = true; programs.seahorse.enable = true; security.pam.services.jade.enableGnomeKeyring = true; - security.pam.services.jade.u2fAuth = true; systemd.services."NetworkManager-wait-online".enable = false; - programs.i3lock.u2fSupport = true; - - security.pam.u2f = { - enable = true; - cue = true; - control = "sufficient"; - authFile = "/home/jade/.ssh/u2f_keys"; - }; # services.pixiecore = # let diff --git a/modules/desktop/specific-hardware/default.nix b/modules/desktop/specific-hardware/default.nix index 8faabd2..a28d10f 100644 --- a/modules/desktop/specific-hardware/default.nix +++ b/modules/desktop/specific-hardware/default.nix @@ -7,5 +7,6 @@ imports = [ ./spacenav.nix ./wacom.nix + ./hardware_key.nix ]; } diff --git a/modules/desktop/specific-hardware/hardware_key.nix b/modules/desktop/specific-hardware/hardware_key.nix new file mode 100644 index 0000000..8510d86 --- /dev/null +++ b/modules/desktop/specific-hardware/hardware_key.nix @@ -0,0 +1,20 @@ +{pkgs, ...}: { + # nitrokey + services.udev.packages = [pkgs.nitrokey-udev-rules]; + + # smartcard daemon + services.pcscd.enable = true; + + # authenticate using hw key + security.pam = { + services.jade.u2fAuth = true; + u2f = { + enable = true; + cue = true; + control = "sufficient"; + authFile = "/home/jade/.ssh/u2f_keys"; + }; + }; + + programs.i3lock.u2fSupport = true; +} From 9a7768ff5bf7d7d7df74df3f56fbd69e2ecbd2e0 Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Tue, 5 Mar 2024 13:53:39 +0100 Subject: [PATCH 020/301] move git and mprocs configs to shell module --- modules/default.nix | 2 -- modules/shell/default.nix | 2 ++ modules/{ => shell}/git.nix | 0 modules/{ => shell}/mprocs.nix | 0 4 files changed, 2 insertions(+), 2 deletions(-) rename modules/{ => shell}/git.nix (100%) rename modules/{ => shell}/mprocs.nix (100%) diff --git a/modules/default.nix b/modules/default.nix index 50424f2..2a976f1 100644 --- a/modules/default.nix +++ b/modules/default.nix @@ -5,7 +5,5 @@ ./terminal.nix ./flatpak.nix ./firewall.nix - ./git.nix - ./mprocs.nix ]; } diff --git a/modules/shell/default.nix b/modules/shell/default.nix index a78c9fa..6f7f4db 100644 --- a/modules/shell/default.nix +++ b/modules/shell/default.nix @@ -7,6 +7,8 @@ ./carapace.nix ./direnv.nix ./tty.nix + ./git.nix + ./mprocs.nix ]; programs.mosh.enable = true; } diff --git a/modules/git.nix b/modules/shell/git.nix similarity index 100% rename from modules/git.nix rename to modules/shell/git.nix diff --git a/modules/mprocs.nix b/modules/shell/mprocs.nix similarity index 100% rename from modules/mprocs.nix rename to modules/shell/mprocs.nix From 7bacabf0d324085555d5485bdf634f89480ee28c Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Tue, 5 Mar 2024 17:10:35 +0100 Subject: [PATCH 021/301] biiiiig refactor (part 1) --- hosts/catbook-j/configuration.nix | 3 -- modules/default.nix | 5 ++- .../audio.nix | 0 .../compositing.nix | 0 modules/desktop-environment/default.nix | 11 +++++ .../dunst.nix | 0 modules/desktop-environment/flatpak.nix | 16 +++++++ .../desktop-environment/panels/default.nix | 6 +++ .../panels}/polybar.nix | 0 .../panels/xmobar/default.nix | 33 ++++++++++++++ .../panels}/xmobar/xmobar.hs | 0 .../{ => desktop-environment}/terminal.nix | 0 .../desktop-environment/xmonad/default.nix | 25 +++++++++++ .../desktop-environment}/xmonad/xmonad.hs | 0 modules/desktop/default.nix | 7 --- modules/desktop/xmonad.nix | 43 ------------------- modules/flatpak.nix | 24 ----------- .../default.nix | 0 .../hardware_key.nix | 0 .../spacenav.nix | 0 .../specific-hardware => hardware}/wacom.nix | 0 modules/{desktop => }/input/default.nix | 0 modules/{desktop => }/input/evremap.nix | 4 +- 23 files changed, 96 insertions(+), 81 deletions(-) rename modules/{desktop => desktop-environment}/audio.nix (100%) rename modules/{desktop => desktop-environment}/compositing.nix (100%) create mode 100644 modules/desktop-environment/default.nix rename modules/{desktop => desktop-environment}/dunst.nix (100%) create mode 100644 modules/desktop-environment/flatpak.nix create mode 100644 modules/desktop-environment/panels/default.nix rename modules/{desktop => desktop-environment/panels}/polybar.nix (100%) create mode 100644 modules/desktop-environment/panels/xmobar/default.nix rename {haskell => modules/desktop-environment/panels}/xmobar/xmobar.hs (100%) rename modules/{ => desktop-environment}/terminal.nix (100%) create mode 100644 modules/desktop-environment/xmonad/default.nix rename {haskell => modules/desktop-environment}/xmonad/xmonad.hs (100%) delete mode 100644 modules/desktop/xmonad.nix delete mode 100644 modules/flatpak.nix rename modules/{desktop/specific-hardware => hardware}/default.nix (100%) rename modules/{desktop/specific-hardware => hardware}/hardware_key.nix (100%) rename modules/{desktop/specific-hardware => hardware}/spacenav.nix (100%) rename modules/{desktop/specific-hardware => hardware}/wacom.nix (100%) rename modules/{desktop => }/input/default.nix (100%) rename modules/{desktop => }/input/evremap.nix (96%) diff --git a/hosts/catbook-j/configuration.nix b/hosts/catbook-j/configuration.nix index 71d44e0..6361745 100644 --- a/hosts/catbook-j/configuration.nix +++ b/hosts/catbook-j/configuration.nix @@ -17,9 +17,7 @@ ../../modules ]; jade = { - flatpak.enable = true; desktop = { - compositing.enable = true; syncthing.enable = true; kdeconnect.enable = true; cloud.enable = true; @@ -43,7 +41,6 @@ ]; }; }; - terminal.enable = true; }; hardware.trackpoint = { diff --git a/modules/default.nix b/modules/default.nix index 2a976f1..adf3726 100644 --- a/modules/default.nix +++ b/modules/default.nix @@ -2,8 +2,9 @@ imports = [ ./shell ./desktop - ./terminal.nix - ./flatpak.nix + ./hardware ./firewall.nix + ./desktop-environment + ./input ]; } diff --git a/modules/desktop/audio.nix b/modules/desktop-environment/audio.nix similarity index 100% rename from modules/desktop/audio.nix rename to modules/desktop-environment/audio.nix diff --git a/modules/desktop/compositing.nix b/modules/desktop-environment/compositing.nix similarity index 100% rename from modules/desktop/compositing.nix rename to modules/desktop-environment/compositing.nix diff --git a/modules/desktop-environment/default.nix b/modules/desktop-environment/default.nix new file mode 100644 index 0000000..896469c --- /dev/null +++ b/modules/desktop-environment/default.nix @@ -0,0 +1,11 @@ +{...}: { + imports = [ + ./audio.nix + ./compositing.nix + ./dunst.nix + ./panels + ./xmonad + ./terminal.nix + ./flatpak.nix + ]; +} diff --git a/modules/desktop/dunst.nix b/modules/desktop-environment/dunst.nix similarity index 100% rename from modules/desktop/dunst.nix rename to modules/desktop-environment/dunst.nix diff --git a/modules/desktop-environment/flatpak.nix b/modules/desktop-environment/flatpak.nix new file mode 100644 index 0000000..cf8b7b2 --- /dev/null +++ b/modules/desktop-environment/flatpak.nix @@ -0,0 +1,16 @@ +{ + config, + lib, + pkgs, + ... +}: { + services.flatpak.enable = true; + xdg.portal = { + enable = true; + # TODO + config.common.default = "*"; + extraPortals = [ + pkgs.xdg-desktop-portal-gtk + ]; + }; +} diff --git a/modules/desktop-environment/panels/default.nix b/modules/desktop-environment/panels/default.nix new file mode 100644 index 0000000..920a7dc --- /dev/null +++ b/modules/desktop-environment/panels/default.nix @@ -0,0 +1,6 @@ +{...}: { + imports = [ + ./xmobar + ./polybar.nix + ]; +} diff --git a/modules/desktop/polybar.nix b/modules/desktop-environment/panels/polybar.nix similarity index 100% rename from modules/desktop/polybar.nix rename to modules/desktop-environment/panels/polybar.nix diff --git a/modules/desktop-environment/panels/xmobar/default.nix b/modules/desktop-environment/panels/xmobar/default.nix new file mode 100644 index 0000000..32a11aa --- /dev/null +++ b/modules/desktop-environment/panels/xmobar/default.nix @@ -0,0 +1,33 @@ +{ + lib, + pkgs, + ... +}: { + home-manager.users.jade = { + config, + pkgs, + ... + }: let + xmobarGhc = pkgs.haskellPackages.ghcWithPackages (pkgs: + with pkgs; [ + xmobar + statgrab + ]); + in { + home = { + packages = [xmobarGhc]; + file."xmobar.hs" = rec { + source = ./xmobar.hs; + target = ".config/xmobar/xmobar.hs"; + onChange = '' + ${xmobarGhc}/bin/ghc -threaded ${target} + ${pkgs.busybox}/bin/pkill xmobar + ${pkgs.haskellPackages.xmonad}/bin/xmonad --restart + ''; + }; + }; + programs.xmobar = { + enable = true; + }; + }; +} diff --git a/haskell/xmobar/xmobar.hs b/modules/desktop-environment/panels/xmobar/xmobar.hs similarity index 100% rename from haskell/xmobar/xmobar.hs rename to modules/desktop-environment/panels/xmobar/xmobar.hs diff --git a/modules/terminal.nix b/modules/desktop-environment/terminal.nix similarity index 100% rename from modules/terminal.nix rename to modules/desktop-environment/terminal.nix diff --git a/modules/desktop-environment/xmonad/default.nix b/modules/desktop-environment/xmonad/default.nix new file mode 100644 index 0000000..ec930e4 --- /dev/null +++ b/modules/desktop-environment/xmonad/default.nix @@ -0,0 +1,25 @@ +{ + lib, + pkgs, + ... +}: { + home-manager.users.jade = { + config, + pkgs, + ... + }: { + home.packages = [pkgs.xmonadctl]; + xsession.windowManager.xmonad = { + enable = true; + enableContribAndExtras = true; + config = ./xmonad.hs; + }; + home.file.wallpaper = { + target = "Pictures/wallpaper.jpg"; + source = ../../../other/wallpaper.jpg; + onChange = '' + feh --bg-fill ~/Pictures/wallpaper.jpg; + ''; + }; + }; +} diff --git a/haskell/xmonad/xmonad.hs b/modules/desktop-environment/xmonad/xmonad.hs similarity index 100% rename from haskell/xmonad/xmonad.hs rename to modules/desktop-environment/xmonad/xmonad.hs diff --git a/modules/desktop/default.nix b/modules/desktop/default.nix index 2e519bd..00e872b 100644 --- a/modules/desktop/default.nix +++ b/modules/desktop/default.nix @@ -15,26 +15,19 @@ in with lib; { imports = [ - ./audio.nix ./gaming.nix ./creative.nix # TODO: more fine grained choices, not every setup needs fspy or rawtherapee - ./dunst.nix - ./compositing.nix ./ios-compat.nix ./syncthing.nix ./kdeconnect.nix ./themeing.nix ./cloud.nix ./networking.nix - ./polybar.nix ./social.nix ./mail.nix - ./specific-hardware - ./xmonad.nix ./fonts.nix ./firefox.nix ./x.nix - ./input ]; i18n.inputMethod = { diff --git a/modules/desktop/xmonad.nix b/modules/desktop/xmonad.nix deleted file mode 100644 index 9f806a3..0000000 --- a/modules/desktop/xmonad.nix +++ /dev/null @@ -1,43 +0,0 @@ -{ - lib, - pkgs, - ... -}: { - home-manager.users.jade = { - config, - pkgs, - ... - }: let - xmobarGhc = pkgs.haskellPackages.ghcWithPackages (pkgs: - with pkgs; [ - xmobar - statgrab - ]); - in { - home.packages = [xmobarGhc pkgs.xmonadctl]; - programs.xmobar = { - enable = true; - }; - home.file."xmobar.hs" = rec { - source = ../../haskell/xmobar/xmobar.hs; - target = ".config/xmobar/xmobar.hs"; - onChange = '' - ${xmobarGhc}/bin/ghc -threaded ${target} - ${pkgs.busybox}/bin/pkill xmobar - ${pkgs.haskellPackages.xmonad}/bin/xmonad --restart - ''; - }; - xsession.windowManager.xmonad = { - enable = true; - enableContribAndExtras = true; - config = ../../haskell/xmonad/xmonad.hs; - }; - home.file.wallpaper = { - target = "Pictures/wallpaper.jpg"; - source = ../../other/wallpaper.jpg; - onChange = '' - feh --bg-fill ~/Pictures/wallpaper.jpg; - ''; - }; - }; -} diff --git a/modules/flatpak.nix b/modules/flatpak.nix deleted file mode 100644 index e3683fe..0000000 --- a/modules/flatpak.nix +++ /dev/null @@ -1,24 +0,0 @@ -{ - config, - lib, - pkgs, - ... -}: let - cfg = config.jade.flatpak; -in - with lib; { - options.jade.flatpak = { - enable = mkEnableOption "Enable flatpak"; - }; - config = mkIf cfg.enable { - services.flatpak.enable = true; - xdg.portal = { - enable = true; - # TODO - config.common.default = "*"; - extraPortals = [ - pkgs.xdg-desktop-portal-gtk - ]; - }; - }; - } diff --git a/modules/desktop/specific-hardware/default.nix b/modules/hardware/default.nix similarity index 100% rename from modules/desktop/specific-hardware/default.nix rename to modules/hardware/default.nix diff --git a/modules/desktop/specific-hardware/hardware_key.nix b/modules/hardware/hardware_key.nix similarity index 100% rename from modules/desktop/specific-hardware/hardware_key.nix rename to modules/hardware/hardware_key.nix diff --git a/modules/desktop/specific-hardware/spacenav.nix b/modules/hardware/spacenav.nix similarity index 100% rename from modules/desktop/specific-hardware/spacenav.nix rename to modules/hardware/spacenav.nix diff --git a/modules/desktop/specific-hardware/wacom.nix b/modules/hardware/wacom.nix similarity index 100% rename from modules/desktop/specific-hardware/wacom.nix rename to modules/hardware/wacom.nix diff --git a/modules/desktop/input/default.nix b/modules/input/default.nix similarity index 100% rename from modules/desktop/input/default.nix rename to modules/input/default.nix diff --git a/modules/desktop/input/evremap.nix b/modules/input/evremap.nix similarity index 96% rename from modules/desktop/input/evremap.nix rename to modules/input/evremap.nix index bc9a1da..1880eb9 100644 --- a/modules/desktop/input/evremap.nix +++ b/modules/input/evremap.nix @@ -16,9 +16,9 @@ sha256 = "sha256-BxSrphgW1n465FX6bKVkq6O0XE2JqanfSYlsGwWUWkQ="; }; cargoHash = ""; - cargoLock.lockFile = ../../../other/evremap.Cargo.lock; + cargoLock.lockFile = ../../other/evremap.Cargo.lock; postPatch = '' - cp ${../../../other/evremap.Cargo.lock} Cargo.lock + cp ${../../other/evremap.Cargo.lock} Cargo.lock ''; nativeBuildInputs = [pkgs.pkg-config]; buildInputs = [pkgs.libevdev]; From 2a5e635c0dd9ac5ab0ee2e48fb7f1c113ca2a289 Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Tue, 5 Mar 2024 18:51:30 +0100 Subject: [PATCH 022/301] make terminal module default module thingy --- modules/desktop-environment/terminal.nix | 79 ++++++++++-------------- 1 file changed, 33 insertions(+), 46 deletions(-) diff --git a/modules/desktop-environment/terminal.nix b/modules/desktop-environment/terminal.nix index 1366350..23ce2cb 100644 --- a/modules/desktop-environment/terminal.nix +++ b/modules/desktop-environment/terminal.nix @@ -1,49 +1,36 @@ -{ - config, - lib, - pkgs, - ... -}: let - cfg = config.jade.terminal; -in - with lib; { - options.jade.terminal = { - enable = mkEnableOption "Enable Kitty"; - }; - config = mkIf cfg.enable { - environment.sessionVariables = rec { - TERMINAL = "kitty"; +{...}: { + environment.sessionVariables = { + TERMINAL = "kitty"; + }; + home-manager.users.jade = {pkgs, ...}: { + programs.kitty = { + enable = true; + font = { + name = "FiraCode Nerd Font"; + size = 11; }; - home-manager.users.jade = {pkgs, ...}: { - programs.kitty = { - enable = true; - font = { - name = "FiraCode Nerd Font"; - size = 11; - }; - settings = { - #adjust_column_width = "70%"; - color0 = "#282828"; - color8 = "#928374"; - color1 = "#cc241d"; - color9 = "#fb4934"; - color2 = "#98971a"; - color10 = "#b8bb26"; - color3 = "#d79921"; - color11 = "#fabd2f"; - color4 = "#458588"; - color12 = "#83a598"; - color5 = "#b16286"; - color13 = "#d3869b"; - color6 = "#689d6a"; - color14 = "#8ec07c"; - color7 = "#a89984"; - color15 = "#ebdbb2"; - foreground = "#ebdbb2"; - background = "#282828"; - confirm_os_window_close = 0; - }; - }; + settings = { + #adjust_column_width = "70%"; + color0 = "#282828"; + color8 = "#928374"; + color1 = "#cc241d"; + color9 = "#fb4934"; + color2 = "#98971a"; + color10 = "#b8bb26"; + color3 = "#d79921"; + color11 = "#fabd2f"; + color4 = "#458588"; + color12 = "#83a598"; + color5 = "#b16286"; + color13 = "#d3869b"; + color6 = "#689d6a"; + color14 = "#8ec07c"; + color7 = "#a89984"; + color15 = "#ebdbb2"; + foreground = "#ebdbb2"; + background = "#282828"; + confirm_os_window_close = 0; }; }; - } + }; +} From d002a100dd68862dd028f0006782020282713c71 Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Wed, 6 Mar 2024 11:09:02 +0100 Subject: [PATCH 023/301] glorious refactor (part 2 --- modules/desktop-environment/audio.nix | 58 +++---- modules/desktop-environment/compositing.nix | 42 ----- modules/desktop-environment/default.nix | 6 +- modules/desktop-environment/dunst.nix | 19 --- .../desktop-environment/home/compositing.nix | 28 ++++ modules/desktop-environment/home/default.nix | 11 ++ .../home/notifications.nix | 17 ++ .../{ => home}/panels/default.nix | 0 .../home/panels/polybar.nix | 146 +++++++++++++++++ .../home/panels/xmobar/default.nix | 27 ++++ .../{ => home}/panels/xmobar/xmobar.hs | 0 modules/desktop-environment/home/terminal.nix | 34 ++++ .../home/xmonad/default.nix | 9 ++ .../home/xmonad/wallpaper/default.nix | 9 ++ .../home/xmonad/wallpaper}/wallpaper.jpg | Bin .../{ => home}/xmonad/xmonad.hs | 5 +- .../desktop-environment/panels/polybar.nix | 150 ------------------ .../panels/xmobar/default.nix | 33 ---- modules/desktop-environment/terminal.nix | 36 ----- .../desktop-environment/xmonad/default.nix | 25 --- 20 files changed, 308 insertions(+), 347 deletions(-) delete mode 100644 modules/desktop-environment/compositing.nix delete mode 100644 modules/desktop-environment/dunst.nix create mode 100644 modules/desktop-environment/home/compositing.nix create mode 100644 modules/desktop-environment/home/default.nix create mode 100644 modules/desktop-environment/home/notifications.nix rename modules/desktop-environment/{ => home}/panels/default.nix (100%) create mode 100644 modules/desktop-environment/home/panels/polybar.nix create mode 100644 modules/desktop-environment/home/panels/xmobar/default.nix rename modules/desktop-environment/{ => home}/panels/xmobar/xmobar.hs (100%) create mode 100644 modules/desktop-environment/home/terminal.nix create mode 100644 modules/desktop-environment/home/xmonad/default.nix create mode 100644 modules/desktop-environment/home/xmonad/wallpaper/default.nix rename {other => modules/desktop-environment/home/xmonad/wallpaper}/wallpaper.jpg (100%) rename modules/desktop-environment/{ => home}/xmonad/xmonad.hs (97%) delete mode 100644 modules/desktop-environment/panels/polybar.nix delete mode 100644 modules/desktop-environment/panels/xmobar/default.nix delete mode 100644 modules/desktop-environment/terminal.nix delete mode 100644 modules/desktop-environment/xmonad/default.nix diff --git a/modules/desktop-environment/audio.nix b/modules/desktop-environment/audio.nix index 7cc85e3..ca23387 100644 --- a/modules/desktop-environment/audio.nix +++ b/modules/desktop-environment/audio.nix @@ -1,39 +1,25 @@ -{ - config, - lib, - pkgs, - ... -}: { - config = { - programs = { - noisetorch.enable = true; - }; - services = { - pipewire = { - enable = true; - alsa.enable = true; - pulse.enable = true; - jack.enable = true; - }; - }; - hardware.pulseaudio.enable = pkgs.lib.mkForce false; - sound.mediaKeys.enable = true; - home-manager.users.jade = {pkgs, ...}: { - home.packages = with pkgs; [ - pavucontrol - pulseaudioFull - easyeffects - cava - volumeicon - playerctl - helvum - ]; - xsession.windowManager.i3.config.startup = [ - { - command = "pkill volumeicon; volumeicon"; - always = true; - } - ]; +{pkgs, ...}: { + programs = { + noisetorch.enable = true; + }; + services = { + pipewire = { + enable = true; + alsa.enable = true; + pulse.enable = true; + jack.enable = true; }; }; + environment.systemPackages = with pkgs; [ + pavucontrol + volumeicon + playerctl + + pulseaudioFull + easyeffects + cava + helvum + ]; + hardware.pulseaudio.enable = pkgs.lib.mkForce false; + sound.mediaKeys.enable = true; } diff --git a/modules/desktop-environment/compositing.nix b/modules/desktop-environment/compositing.nix deleted file mode 100644 index 7936f80..0000000 --- a/modules/desktop-environment/compositing.nix +++ /dev/null @@ -1,42 +0,0 @@ -{ - config, - lib, - pkgs, - ... -}: let - cfg = config.jade.desktop.compositing; -in - with lib; { - options.jade.desktop.compositing = { - enable = mkEnableOption "Enable compositing with picom"; - }; - config = mkIf cfg.enable { - services.picom = { - enable = true; - backend = "glx"; - - shadow = true; - shadowOffsets = [(-40) (-30)]; - shadowOpacity = 0.2; - shadowExclude = [ - "class_g ?= 'Notify-osd'" - "_GTK_FRAME_EXTENTS@:c" - "!(class_g = 'Rofi' || class_g = 'Dunst')" - ]; - - vSync = true; - settings = { - "shadow-radius" = 40; - # fading rofi - "fading" = true; - "fade-in-step" = 0.25; - "fade-out-step" = 0.2; - "fade-delta" = 20; - "fade-exclude" = ["class_g != 'Rofi'"]; - # use damage information - "use-damage" = true; - }; - }; - # }}} - }; - } diff --git a/modules/desktop-environment/default.nix b/modules/desktop-environment/default.nix index 896469c..3e149b8 100644 --- a/modules/desktop-environment/default.nix +++ b/modules/desktop-environment/default.nix @@ -1,11 +1,7 @@ {...}: { imports = [ ./audio.nix - ./compositing.nix - ./dunst.nix - ./panels - ./xmonad - ./terminal.nix ./flatpak.nix + ./home ]; } diff --git a/modules/desktop-environment/dunst.nix b/modules/desktop-environment/dunst.nix deleted file mode 100644 index f971e22..0000000 --- a/modules/desktop-environment/dunst.nix +++ /dev/null @@ -1,19 +0,0 @@ -{...}: { - home-manager.users.jade = {pkgs, ...}: { - services.dunst = { - enable = true; - settings = { - global = { - dmenu = "${pkgs.rofi}/bin/rofi -theme gruvbox-dark -dmenu -p dunst"; - browser = "${pkgs.librewolf}/bin/librewolf"; - mouse_left_click = "context"; - mouse_middle_click = "close_current"; - background = "#282828"; - foreground = "#ebdbb2"; - frame_color = "#504945"; - frame_width = 2; - }; - }; - }; - }; -} diff --git a/modules/desktop-environment/home/compositing.nix b/modules/desktop-environment/home/compositing.nix new file mode 100644 index 0000000..a9823d6 --- /dev/null +++ b/modules/desktop-environment/home/compositing.nix @@ -0,0 +1,28 @@ +{...}: { + services.picom = { + enable = true; + backend = "glx"; + + shadow = true; + shadowOffsets = [(-40) (-30)]; + shadowOpacity = 0.2; + shadowExclude = [ + "class_g ?= 'Notify-osd'" + "_GTK_FRAME_EXTENTS@:c" + "!(class_g = 'Rofi' || class_g = 'Dunst')" + ]; + + vSync = true; + settings = { + "shadow-radius" = 40; + # fading rofi + "fading" = true; + "fade-in-step" = 0.25; + "fade-out-step" = 0.2; + "fade-delta" = 20; + "fade-exclude" = ["class_g != 'Rofi'"]; + # use damage information + "use-damage" = true; + }; + }; +} diff --git a/modules/desktop-environment/home/default.nix b/modules/desktop-environment/home/default.nix new file mode 100644 index 0000000..6891b94 --- /dev/null +++ b/modules/desktop-environment/home/default.nix @@ -0,0 +1,11 @@ +{...}: { + home-manager.users.jade = {...}: { + imports = [ + ./notifications.nix + ./terminal.nix + ./compositing.nix + ./panels + ./xmonad + ]; + }; +} diff --git a/modules/desktop-environment/home/notifications.nix b/modules/desktop-environment/home/notifications.nix new file mode 100644 index 0000000..3d4eff1 --- /dev/null +++ b/modules/desktop-environment/home/notifications.nix @@ -0,0 +1,17 @@ +{pkgs, ...}: { + services.dunst = { + enable = true; + settings = { + global = { + dmenu = "${pkgs.rofi}/bin/rofi -theme gruvbox-dark -dmenu -p dunst"; + browser = "${pkgs.librewolf}/bin/librewolf"; + mouse_left_click = "context"; + mouse_middle_click = "close_current"; + background = "#282828"; + foreground = "#ebdbb2"; + frame_color = "#504945"; + frame_width = 2; + }; + }; + }; +} diff --git a/modules/desktop-environment/panels/default.nix b/modules/desktop-environment/home/panels/default.nix similarity index 100% rename from modules/desktop-environment/panels/default.nix rename to modules/desktop-environment/home/panels/default.nix diff --git a/modules/desktop-environment/home/panels/polybar.nix b/modules/desktop-environment/home/panels/polybar.nix new file mode 100644 index 0000000..dd49ce9 --- /dev/null +++ b/modules/desktop-environment/home/panels/polybar.nix @@ -0,0 +1,146 @@ +{ + config, + lib, + pkgs, + ... +}: { + services.polybar = { + enable = true; + package = pkgs.polybarFull; + + script = ""; + settings = { + colors = { + background = "#282828"; + background-alt = "#3c3836"; + foreground = "#ebdbb2"; + primary = "#d65d0e"; + secondary = "#fe8019"; + alert = "#cc241d"; + disabled = "#504945"; + }; + "bar/status" = { + # Style + bottom = true; + width = "100%"; + height = "24px"; + radius = 0; + tray-position = "center"; + background = "\${colors.background}"; + foreground = "\${colors.foreground}"; + line-size = "4px"; + border-color = "#00000000"; + padding-left = 0; + padding-right = 1; + module-margin = 1; + separator = "|"; + separator-foreground = "\${colors.disabled}"; + font-0 = "FiraCode Nerd Font"; + modules-left = "xworkspaces xwindow"; + modules-right = "memory cpu wlan bat0 bat1"; + cursor-click = "pointer"; + cursor-scroll = "ns-resize"; + enable-ipc = true; + wm-restack = "generic"; + override-redirect = false; + }; + + "module/xworkspaces" = { + type = "internal/xworkspaces"; + label-active = ""; + label-active-padding = 1; + label-occupied = ""; + label-occupied-padding = 1; + label-urgent = ""; + label-urgent-foreground = "\${colors.alert}"; + label-urgent-padding = 1; + label-empty = ""; + label-empty-foreground = "\${colors.disabled}"; + label-empty-padding = 1; + }; + + "module/xwindow" = { + type = "internal/xwindow"; + label = "%title:0:60:...%"; + }; + + "module/memory" = { + type = "internal/memory"; + interval = 2; + format-prefix = "󰍛 "; + format-prefix-foreground = "\${colors.primary}"; + label = "%percentage_used:2%%"; + }; + + "module/cpu" = { + type = "internal/cpu"; + interval = "2"; + format-prefix = "󰻠 "; + format-prefix-foreground = "\${colors.primary}"; + label = "%percentage:2%%"; + }; + + "network-base" = { + type = "internal/network"; + interval = 5; + format-connected = " "; + format-disconnected = ""; + label-disconnected = "󰣼"; + label-disconnected-foreground = "#d65d0e"; + ramp.signal = [ + "%{F#cc241d}󰣾" + "%{F#d79921}󰣴" + "%{F#98971a}󰣶" + "%{F#98971a}󰣸" + "%{F#98971a}󰣺" + ]; + }; + + "module/wlan" = { + "inherit" = "network-base"; + interface-type = "wireless"; + label-connected = "%{F#F0C674}%{F-} %local_ip%"; + }; + "battery-base" = { + type = "internal/battery"; + poll-interval = 1; + time-format = "%H%{F#7c6f64}:%{F#d5c4a1}%M"; + label-charging = "%{F#98971a}󰚥 %{F#ebdbb2}%percentage%%%{F#d5c4a1} %time%"; + format-charging = " "; + label-discharging = "%{F#ebdbb2}%percentage%%%{F#bdae93} %time%"; + format-discharging = " "; + label-full = "%{F#98971a}󰁹%{F#ebdbb2} %percentage%%"; + format-full = ""; + label-low = "%{F#cc241d}󰂎%{F#ebdbb2} %percentage%%"; + format-low = ""; + ramp.capacity = [ + "%{F#cc241d}󰁺" + "%{F#d79921}󰁻" + "%{F#98971a}󰁼" + "%{F#98971a}󰁽" + "%{F#98971a}󰁾" + "%{F#98971a}󰁿" + "%{F#98971a}󰂀" + "%{F#98971a}󰂁" + "%{F#98971a}󰂂" + "%{F#98971a}󰁹" + ]; + }; + "module/bat0" = { + "inherit" = "battery-base"; + battery = "BAT0"; + adapter = "ADP1"; + }; + "module/bat1" = { + "inherit" = "battery-base"; + battery = "BAT1"; + adapter = "ADP1"; + }; + + "settings" = { + screenchange-reload = true; + pseudo-transparency = true; + }; + }; + }; +} diff --git a/modules/desktop-environment/home/panels/xmobar/default.nix b/modules/desktop-environment/home/panels/xmobar/default.nix new file mode 100644 index 0000000..c5ac0f8 --- /dev/null +++ b/modules/desktop-environment/home/panels/xmobar/default.nix @@ -0,0 +1,27 @@ +{ + lib, + pkgs, + ... +}: let + xmobarGhc = pkgs.haskellPackages.ghcWithPackages (pkgs: + with pkgs; [ + xmobar + statgrab + ]); +in { + home = { + packages = [xmobarGhc]; + file."xmobar.hs" = rec { + source = ./xmobar.hs; + target = ".config/xmobar/xmobar.hs"; + onChange = '' + ${xmobarGhc}/bin/ghc -threaded ${target} + ${pkgs.busybox}/bin/pkill xmobar + ${pkgs.haskellPackages.xmonad}/bin/xmonad --restart + ''; + }; + }; + programs.xmobar = { + enable = true; + }; +} diff --git a/modules/desktop-environment/panels/xmobar/xmobar.hs b/modules/desktop-environment/home/panels/xmobar/xmobar.hs similarity index 100% rename from modules/desktop-environment/panels/xmobar/xmobar.hs rename to modules/desktop-environment/home/panels/xmobar/xmobar.hs diff --git a/modules/desktop-environment/home/terminal.nix b/modules/desktop-environment/home/terminal.nix new file mode 100644 index 0000000..ad9f3c8 --- /dev/null +++ b/modules/desktop-environment/home/terminal.nix @@ -0,0 +1,34 @@ +{...}: { + programs.kitty = { + enable = true; + font = { + name = "FiraCode Nerd Font"; + size = 11; + }; + settings = { + #adjust_column_width = "70%"; + color0 = "#282828"; + color8 = "#928374"; + color1 = "#cc241d"; + color9 = "#fb4934"; + color2 = "#98971a"; + color10 = "#b8bb26"; + color3 = "#d79921"; + color11 = "#fabd2f"; + color4 = "#458588"; + color12 = "#83a598"; + color5 = "#b16286"; + color13 = "#d3869b"; + color6 = "#689d6a"; + color14 = "#8ec07c"; + color7 = "#a89984"; + color15 = "#ebdbb2"; + foreground = "#ebdbb2"; + background = "#282828"; + confirm_os_window_close = 0; + }; + }; + home.sessionVariables = { + TERMINAL = "kitty"; + }; +} diff --git a/modules/desktop-environment/home/xmonad/default.nix b/modules/desktop-environment/home/xmonad/default.nix new file mode 100644 index 0000000..5242f57 --- /dev/null +++ b/modules/desktop-environment/home/xmonad/default.nix @@ -0,0 +1,9 @@ +{pkgs, ...}: { + imports = [./wallpaper]; + home.packages = [pkgs.xmonadctl]; + xsession.windowManager.xmonad = { + enable = true; + enableContribAndExtras = true; + config = ./xmonad.hs; + }; +} diff --git a/modules/desktop-environment/home/xmonad/wallpaper/default.nix b/modules/desktop-environment/home/xmonad/wallpaper/default.nix new file mode 100644 index 0000000..12d938e --- /dev/null +++ b/modules/desktop-environment/home/xmonad/wallpaper/default.nix @@ -0,0 +1,9 @@ +{...}: { + home.file.wallpaper = { + target = "Pictures/wallpaper.jpg"; + source = ./wallpaper.jpg; + onChange = '' + feh --bg-fill ~/Pictures/wallpaper.jpg; + ''; + }; +} diff --git a/other/wallpaper.jpg b/modules/desktop-environment/home/xmonad/wallpaper/wallpaper.jpg similarity index 100% rename from other/wallpaper.jpg rename to modules/desktop-environment/home/xmonad/wallpaper/wallpaper.jpg diff --git a/modules/desktop-environment/xmonad/xmonad.hs b/modules/desktop-environment/home/xmonad/xmonad.hs similarity index 97% rename from modules/desktop-environment/xmonad/xmonad.hs rename to modules/desktop-environment/home/xmonad/xmonad.hs index 4fed0fe..4f2f9ce 100644 --- a/modules/desktop-environment/xmonad/xmonad.hs +++ b/modules/desktop-environment/home/xmonad/xmonad.hs @@ -68,7 +68,10 @@ myKeys conf@(XConfig {XMonad.modMask = modm}) = -- TODO: other media keys ((0, xF86XK_AudioRaiseVolume), spawn "amixer -D pulse sset Master 10%+"), ((0, xF86XK_AudioLowerVolume), spawn "amixer -D pulse sset Master 10%-"), - ((0, xF86XK_AudioMute), spawn "amixer -D pulse sset Master toggle") + ((0, xF86XK_AudioMute), spawn "amixer -D pulse sset Master toggle"), + ((0, xF86XK_AudioNext), spawn "playerctl next"), + ((0, xF86XK_AudioPrev), spawn "playerctl previous"), + ((0, xF86XK_AudioPause), spawn "playerctl play-pause") ] ++ [ ((m .|. modm, k), windows $ f i) | (i, k) <- zip (XMonad.workspaces conf) [xK_1 .. xK_9], diff --git a/modules/desktop-environment/panels/polybar.nix b/modules/desktop-environment/panels/polybar.nix deleted file mode 100644 index b822dd8..0000000 --- a/modules/desktop-environment/panels/polybar.nix +++ /dev/null @@ -1,150 +0,0 @@ -{ - config, - lib, - pkgs, - ... -}: { - config = { - home-manager.users.jade = {pkgs, ...}: { - services.polybar = { - enable = true; - package = pkgs.polybarFull; - - script = ""; - settings = { - colors = { - background = "#282828"; - background-alt = "#3c3836"; - foreground = "#ebdbb2"; - primary = "#d65d0e"; - secondary = "#fe8019"; - alert = "#cc241d"; - disabled = "#504945"; - }; - "bar/status" = { - # Style - bottom = true; - width = "100%"; - height = "24px"; - radius = 0; - tray-position = "center"; - background = "\${colors.background}"; - foreground = "\${colors.foreground}"; - line-size = "4px"; - border-color = "#00000000"; - padding-left = 0; - padding-right = 1; - module-margin = 1; - separator = "|"; - separator-foreground = "\${colors.disabled}"; - font-0 = "FiraCode Nerd Font"; - modules-left = "xworkspaces xwindow"; - modules-right = "memory cpu wlan bat0 bat1"; - cursor-click = "pointer"; - cursor-scroll = "ns-resize"; - enable-ipc = true; - wm-restack = "generic"; - override-redirect = false; - }; - - "module/xworkspaces" = { - type = "internal/xworkspaces"; - label-active = ""; - label-active-padding = 1; - label-occupied = ""; - label-occupied-padding = 1; - label-urgent = ""; - label-urgent-foreground = "\${colors.alert}"; - label-urgent-padding = 1; - label-empty = ""; - label-empty-foreground = "\${colors.disabled}"; - label-empty-padding = 1; - }; - - "module/xwindow" = { - type = "internal/xwindow"; - label = "%title:0:60:...%"; - }; - - "module/memory" = { - type = "internal/memory"; - interval = 2; - format-prefix = "󰍛 "; - format-prefix-foreground = "\${colors.primary}"; - label = "%percentage_used:2%%"; - }; - - "module/cpu" = { - type = "internal/cpu"; - interval = "2"; - format-prefix = "󰻠 "; - format-prefix-foreground = "\${colors.primary}"; - label = "%percentage:2%%"; - }; - - "network-base" = { - type = "internal/network"; - interval = 5; - format-connected = " "; - format-disconnected = ""; - label-disconnected = "󰣼"; - label-disconnected-foreground = "#d65d0e"; - ramp.signal = [ - "%{F#cc241d}󰣾" - "%{F#d79921}󰣴" - "%{F#98971a}󰣶" - "%{F#98971a}󰣸" - "%{F#98971a}󰣺" - ]; - }; - - "module/wlan" = { - "inherit" = "network-base"; - interface-type = "wireless"; - label-connected = "%{F#F0C674}%{F-} %local_ip%"; - }; - "battery-base" = { - type = "internal/battery"; - poll-interval = 1; - time-format = "%H%{F#7c6f64}:%{F#d5c4a1}%M"; - label-charging = "%{F#98971a}󰚥 %{F#ebdbb2}%percentage%%%{F#d5c4a1} %time%"; - format-charging = " "; - label-discharging = "%{F#ebdbb2}%percentage%%%{F#bdae93} %time%"; - format-discharging = " "; - label-full = "%{F#98971a}󰁹%{F#ebdbb2} %percentage%%"; - format-full = ""; - label-low = "%{F#cc241d}󰂎%{F#ebdbb2} %percentage%%"; - format-low = ""; - ramp.capacity = [ - "%{F#cc241d}󰁺" - "%{F#d79921}󰁻" - "%{F#98971a}󰁼" - "%{F#98971a}󰁽" - "%{F#98971a}󰁾" - "%{F#98971a}󰁿" - "%{F#98971a}󰂀" - "%{F#98971a}󰂁" - "%{F#98971a}󰂂" - "%{F#98971a}󰁹" - ]; - }; - "module/bat0" = { - "inherit" = "battery-base"; - battery = "BAT0"; - adapter = "ADP1"; - }; - "module/bat1" = { - "inherit" = "battery-base"; - battery = "BAT1"; - adapter = "ADP1"; - }; - - "settings" = { - screenchange-reload = true; - pseudo-transparency = true; - }; - }; - }; - }; - }; -} diff --git a/modules/desktop-environment/panels/xmobar/default.nix b/modules/desktop-environment/panels/xmobar/default.nix deleted file mode 100644 index 32a11aa..0000000 --- a/modules/desktop-environment/panels/xmobar/default.nix +++ /dev/null @@ -1,33 +0,0 @@ -{ - lib, - pkgs, - ... -}: { - home-manager.users.jade = { - config, - pkgs, - ... - }: let - xmobarGhc = pkgs.haskellPackages.ghcWithPackages (pkgs: - with pkgs; [ - xmobar - statgrab - ]); - in { - home = { - packages = [xmobarGhc]; - file."xmobar.hs" = rec { - source = ./xmobar.hs; - target = ".config/xmobar/xmobar.hs"; - onChange = '' - ${xmobarGhc}/bin/ghc -threaded ${target} - ${pkgs.busybox}/bin/pkill xmobar - ${pkgs.haskellPackages.xmonad}/bin/xmonad --restart - ''; - }; - }; - programs.xmobar = { - enable = true; - }; - }; -} diff --git a/modules/desktop-environment/terminal.nix b/modules/desktop-environment/terminal.nix deleted file mode 100644 index 23ce2cb..0000000 --- a/modules/desktop-environment/terminal.nix +++ /dev/null @@ -1,36 +0,0 @@ -{...}: { - environment.sessionVariables = { - TERMINAL = "kitty"; - }; - home-manager.users.jade = {pkgs, ...}: { - programs.kitty = { - enable = true; - font = { - name = "FiraCode Nerd Font"; - size = 11; - }; - settings = { - #adjust_column_width = "70%"; - color0 = "#282828"; - color8 = "#928374"; - color1 = "#cc241d"; - color9 = "#fb4934"; - color2 = "#98971a"; - color10 = "#b8bb26"; - color3 = "#d79921"; - color11 = "#fabd2f"; - color4 = "#458588"; - color12 = "#83a598"; - color5 = "#b16286"; - color13 = "#d3869b"; - color6 = "#689d6a"; - color14 = "#8ec07c"; - color7 = "#a89984"; - color15 = "#ebdbb2"; - foreground = "#ebdbb2"; - background = "#282828"; - confirm_os_window_close = 0; - }; - }; - }; -} diff --git a/modules/desktop-environment/xmonad/default.nix b/modules/desktop-environment/xmonad/default.nix deleted file mode 100644 index ec930e4..0000000 --- a/modules/desktop-environment/xmonad/default.nix +++ /dev/null @@ -1,25 +0,0 @@ -{ - lib, - pkgs, - ... -}: { - home-manager.users.jade = { - config, - pkgs, - ... - }: { - home.packages = [pkgs.xmonadctl]; - xsession.windowManager.xmonad = { - enable = true; - enableContribAndExtras = true; - config = ./xmonad.hs; - }; - home.file.wallpaper = { - target = "Pictures/wallpaper.jpg"; - source = ../../../other/wallpaper.jpg; - onChange = '' - feh --bg-fill ~/Pictures/wallpaper.jpg; - ''; - }; - }; -} From 14adf2731ff919f0995461e259ce469e7126dbfd Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Wed, 6 Mar 2024 11:31:47 +0100 Subject: [PATCH 024/301] create input module for catbook-j --- hosts/catbook-j/configuration.nix | 26 +------------------------- hosts/catbook-j/modules/default.nix | 5 +++++ hosts/catbook-j/modules/input.nix | 27 +++++++++++++++++++++++++++ 3 files changed, 33 insertions(+), 25 deletions(-) create mode 100644 hosts/catbook-j/modules/default.nix create mode 100644 hosts/catbook-j/modules/input.nix diff --git a/hosts/catbook-j/configuration.nix b/hosts/catbook-j/configuration.nix index 6361745..d87e1cb 100644 --- a/hosts/catbook-j/configuration.nix +++ b/hosts/catbook-j/configuration.nix @@ -15,6 +15,7 @@ ./hardware-configuration.nix ../../common.nix ../../modules + ./modules ]; jade = { desktop = { @@ -25,29 +26,6 @@ mail.enable = true; gaming.enable = true; }; - input.remapping = { - enable = true; - devices."AT Translated Set 2 keyboard" = { - swapKeys = [ - ["KEY_Y" "KEY_Z"] - ["KEY_LEFTALT" "KEY_LEFTMETA"] - ]; - dual_role = [ - { - input = "KEY_CAPSLOCK"; - hold = ["KEY_LEFTCTRL"]; - tap = ["KEY_ESC"]; - } - ]; - }; - }; - }; - - hardware.trackpoint = { - enable = true; - # device = "MELF0410:00 1FD2:7007"; - device = "DELL081C:00 044E:121F Mouse"; - sensitivity = 255; }; hardware.usb-modeswitch.enable = true; @@ -81,8 +59,6 @@ hardware.bluetooth.enable = true; services.blueman.enable = true; - services.xserver.libinput.touchpad.tapping = false; - environment.systemPackages = [ pkgs.plantuml pkgs.mqttui diff --git a/hosts/catbook-j/modules/default.nix b/hosts/catbook-j/modules/default.nix new file mode 100644 index 0000000..935baf9 --- /dev/null +++ b/hosts/catbook-j/modules/default.nix @@ -0,0 +1,5 @@ +{...}: { + imports = [ + ./input.nix + ]; +} diff --git a/hosts/catbook-j/modules/input.nix b/hosts/catbook-j/modules/input.nix new file mode 100644 index 0000000..cd5833b --- /dev/null +++ b/hosts/catbook-j/modules/input.nix @@ -0,0 +1,27 @@ +{...}: { + # key remapping + jade.input.remapping = { + enable = true; + devices."AT Translated Set 2 keyboard" = { + swapKeys = [ + ["KEY_Y" "KEY_Z"] + ["KEY_LEFTALT" "KEY_LEFTMETA"] + ]; + dual_role = [ + { + input = "KEY_CAPSLOCK"; + hold = ["KEY_LEFTCTRL"]; + tap = ["KEY_ESC"]; + } + ]; + }; + }; + + hardware.trackpoint = { + enable = true; + device = "TPPS/2 IBM TrackPoint"; + sensitivity = 220; + }; + + services.xserver.libinput.touchpad.tapping = false; +} From b455f5019cefdac9494c3126134196a851b96079 Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Fri, 8 Mar 2024 07:57:32 +0100 Subject: [PATCH 025/301] increase trackpoint sensitivity --- hosts/catbook-j/modules/input.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hosts/catbook-j/modules/input.nix b/hosts/catbook-j/modules/input.nix index cd5833b..7043eec 100644 --- a/hosts/catbook-j/modules/input.nix +++ b/hosts/catbook-j/modules/input.nix @@ -20,7 +20,7 @@ hardware.trackpoint = { enable = true; device = "TPPS/2 IBM TrackPoint"; - sensitivity = 220; + sensitivity = 256; }; services.xserver.libinput.touchpad.tapping = false; From 1d8f6f9c71470383a52480ab8f9a3c695851fd2c Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Fri, 8 Mar 2024 07:58:27 +0100 Subject: [PATCH 026/301] replace libreoffice with onlyoffice --- modules/desktop/creative.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/desktop/creative.nix b/modules/desktop/creative.nix index 98236bc..354a860 100644 --- a/modules/desktop/creative.nix +++ b/modules/desktop/creative.nix @@ -12,7 +12,7 @@ fontforge-gtk - libreoffice + onlyoffice-bin_latest typst rawtherapee From 9bf0eadaa04cd48e1af0118e314df59c750b208f Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Fri, 8 Mar 2024 07:58:44 +0100 Subject: [PATCH 027/301] make `typed` more stable --- other/config.nu | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/other/config.nu b/other/config.nu index 2a1a022..5589fc9 100644 --- a/other/config.nu +++ b/other/config.nu @@ -811,7 +811,7 @@ def typed [ ] { touch $"($name).typ" typst compile $"($name).typ" - mprocs --names Editor,Viewer,Notify $"hx '($name).typ'" $"mupdf-x11 '($name).pdf'" $"while inotifywait -e modify '($name).pdf' ; do pkill -HUP mupdf; done" + mprocs --names Editor,Viewer,Notify $"hx '($name).typ'" $"while true; do mupdf-x11 '($name).pdf' && break; done" $"while inotifywait -e modify '($name).pdf' ; do pkill -HUP mupdf; done" } alias gnix = cd ~/nix-configs; From c5bb22722b5f8e4d85f42b74cb37acbd310b5ca8 Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Thu, 14 Mar 2024 16:03:43 +0100 Subject: [PATCH 028/301] add legendary launcher and wine stuff --- modules/desktop/gaming.nix | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/modules/desktop/gaming.nix b/modules/desktop/gaming.nix index 8f7c5e9..228c2c0 100644 --- a/modules/desktop/gaming.nix +++ b/modules/desktop/gaming.nix @@ -16,6 +16,10 @@ in home.packages = with pkgs; [ lutris prismlauncher + legendary-gl + wineWowPackages.stable + dxvk_2 + vkd3d-proton ]; }; }; From 275c852d4d89cf3bf8c71a4f731b8a99f7ec672a Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Thu, 14 Mar 2024 16:04:08 +0100 Subject: [PATCH 029/301] more helix setup stuff --- modules/shell/helix.nix | 56 +++++++++++++++++++++++++++++++++++------ 1 file changed, 48 insertions(+), 8 deletions(-) diff --git a/modules/shell/helix.nix b/modules/shell/helix.nix index 2f409f0..e0c2a9c 100644 --- a/modules/shell/helix.nix +++ b/modules/shell/helix.nix @@ -30,11 +30,31 @@ line-number = "relative"; bufferline = "multiple"; color-modes = true; + cursorline = true; lsp = { display-messages = true; display-inlay-hints = true; }; shell = ["nu" "-c"]; + statusline.left = [ + "mode" + "spinner" + "spacer" + "version-control" + "file-name" + "diagnostics" + "read-only-indicator" + "file-modification-indicator" + "spacer" + ]; + + statusline.right = [ + "workspace-diagnostics" + "register" + "position" + "file-encoding" + "file-type" + ]; idle-timeout = 30; indent-guides = { render = true; @@ -90,20 +110,36 @@ scope = "type"; }; }; + completion.termSearch.enable = true; + diagnostics.enable = true; + inlayHints = { + bindingModeHints.enable = true; + closureCaptureHints.enable = true; + closureReturnTypeHints.enable = true; + discriminantHints.enable = true; + expressionAdjustmentHints = { + hideOutsideUnsafe = true; + }; + lifetimeElisionHints.enable = "skip_trivial"; + }; + interpret.tests = true; + lens = { + references = { + adt.enable = true; + trait.enable = true; + }; + }; + typing.autoClosingAngleBrackets.enable = true; }; }; "emmet-language-server" = { command = "emmet-language-server"; args = ["--stdio"]; }; - # "php" = { - # name = "php"; - # file-types = [ "php" ]; - # language-server = { - # command = "psalm"; - # args = ["--language-server"]; - # }; - # }; + "psalm" = { + command = "psalm"; + args = ["--language-server"]; + }; "typst-lsp" = { command = "typst-lsp"; config = { @@ -126,6 +162,10 @@ name = "nu"; language-servers = ["nu-builtin-lsp"]; } + { + name = "php"; + language-servers = ["psalm"]; + } { name = "typst"; scope = "source.typst"; From 98125d7d71153376c007bfb949f8bf9d93edf957 Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Thu, 14 Mar 2024 16:04:48 +0100 Subject: [PATCH 030/301] add devd --- common.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/common.nix b/common.nix index d93b56b..ed81c16 100644 --- a/common.nix +++ b/common.nix @@ -70,6 +70,7 @@ with builtins; { aria2 usbutils numbat + devd ]; }; From b4ad21962e142aff6057f8aa286855f934e1baa6 Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Thu, 14 Mar 2024 16:05:42 +0100 Subject: [PATCH 031/301] flake.lock: Update MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Flake lock file updates: • Updated input 'arion': 'github:hercules-ci/arion/2b1fa9a8e9e40bb8e65a677c6fdd66dae4f4676e' (2024-02-14) → 'github:hercules-ci/arion/d2d48c9ec304ac80c84ede138b8c6f298d07d995' (2024-03-05) • Updated input 'arion/flake-parts': 'github:hercules-ci/flake-parts/b253292d9c0a5ead9bc98c4e9a26c6312e27d69f' (2024-02-01) → 'github:hercules-ci/flake-parts/f7b3c975cf067e56e7cda6cb098ebe3fb4d74ca2' (2024-03-01) • Updated input 'arion/hercules-ci-effects': 'github:hercules-ci/hercules-ci-effects/d5cbf433a6ae9cae05400189a8dbc6412a03ba16' (2023-12-31) → 'github:hercules-ci/hercules-ci-effects/0ca27bd58e4d5be3135a4bef66b582e57abe8f4a' (2024-02-21) • Updated input 'arion/nixpkgs': 'github:NixOS/nixpkgs/f9d39fb9aff0efee4a3d5f4a6d7c17701d38a1d8' (2024-02-11) → 'github:NixOS/nixpkgs/b8697e57f10292a6165a20f03d2f42920dfaf973' (2024-03-03) • Updated input 'home-manager': 'github:nix-community/home-manager/4de84265d7ec7634a69ba75028696d74de9a44a7' (2024-03-03) → 'github:nix-community/home-manager/587719494ed18a184c98c4d55dde9469af4446bf' (2024-03-14) • Updated input 'nixpkgs': 'github:NixOS/nixpkgs/1536926ef5621b09bba54035ae2bb6d806d72ac8' (2024-02-29) → 'github:NixOS/nixpkgs/0ad13a6833440b8e238947e47bea7f11071dc2b2' (2024-03-12) • Updated input 'nixpkgs-stable': 'github:NixOS/nixpkgs/79baff8812a0d68e24a836df0a364c678089e2c7' (2024-03-01) → 'github:NixOS/nixpkgs/51063ed4f2343a59fdeebb279bb81d87d453942b' (2024-03-12) --- flake.lock | 42 +++++++++++++++++++++--------------------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/flake.lock b/flake.lock index 99d7a1c..3724d95 100644 --- a/flake.lock +++ b/flake.lock @@ -8,11 +8,11 @@ "nixpkgs": "nixpkgs" }, "locked": { - "lastModified": 1707923576, - "narHash": "sha256-vch1hvgoB2TEl1+0J9h5uPkTrL4zNFUxE/razagkqQQ=", + "lastModified": 1709606645, + "narHash": "sha256-yObjAl8deNvx1uIfQn7/vkB9Rnr0kqTo1HVrsk46l30=", "owner": "hercules-ci", "repo": "arion", - "rev": "2b1fa9a8e9e40bb8e65a677c6fdd66dae4f4676e", + "rev": "d2d48c9ec304ac80c84ede138b8c6f298d07d995", "type": "github" }, "original": { @@ -49,11 +49,11 @@ ] }, "locked": { - "lastModified": 1706830856, - "narHash": "sha256-a0NYyp+h9hlb7ddVz4LUn1vT/PLwqfrWYcHMvFB1xYg=", + "lastModified": 1709336216, + "narHash": "sha256-Dt/wOWeW6Sqm11Yh+2+t0dfEWxoMxGBvv3JpIocFl9E=", "owner": "hercules-ci", "repo": "flake-parts", - "rev": "b253292d9c0a5ead9bc98c4e9a26c6312e27d69f", + "rev": "f7b3c975cf067e56e7cda6cb098ebe3fb4d74ca2", "type": "github" }, "original": { @@ -170,11 +170,11 @@ ] }, "locked": { - "lastModified": 1704029560, - "narHash": "sha256-a4Iu7x1OP+uSYpqadOu8VCPY+MPF3+f6KIi+MAxlgyw=", + "lastModified": 1708547820, + "narHash": "sha256-xU/KC1PWqq5zL9dQ9wYhcdgxAwdeF/dJCLPH3PNZEBg=", "owner": "hercules-ci", "repo": "hercules-ci-effects", - "rev": "d5cbf433a6ae9cae05400189a8dbc6412a03ba16", + "rev": "0ca27bd58e4d5be3135a4bef66b582e57abe8f4a", "type": "github" }, "original": { @@ -190,11 +190,11 @@ ] }, "locked": { - "lastModified": 1709445365, - "narHash": "sha256-DVv6nd9FQBbMWbOmhq0KVqmlc3y3FMSYl49UXmMcO+0=", + "lastModified": 1710423955, + "narHash": "sha256-6N/65EqYVqCaz5SVoPMx2HgA+DJZAlw5lW+U9VHSSbE=", "owner": "nix-community", "repo": "home-manager", - "rev": "4de84265d7ec7634a69ba75028696d74de9a44a7", + "rev": "587719494ed18a184c98c4d55dde9469af4446bf", "type": "github" }, "original": { @@ -329,11 +329,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1707689078, - "narHash": "sha256-UUGmRa84ZJHpGZ1WZEBEUOzaPOWG8LZ0yPg1pdDF/yM=", + "lastModified": 1709479366, + "narHash": "sha256-n6F0n8UV6lnTZbYPl1A9q1BS0p4hduAv1mGAP17CVd0=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "f9d39fb9aff0efee4a3d5f4a6d7c17701d38a1d8", + "rev": "b8697e57f10292a6165a20f03d2f42920dfaf973", "type": "github" }, "original": { @@ -345,11 +345,11 @@ }, "nixpkgs-stable": { "locked": { - "lastModified": 1709309926, - "narHash": "sha256-VZFBtXGVD9LWTecGi6eXrE0hJ/mVB3zGUlHImUs2Qak=", + "lastModified": 1710283656, + "narHash": "sha256-nI+AOy4uK6jLGBi9nsbHjL1EdSIzoo8oa+9oeVhbyFc=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "79baff8812a0d68e24a836df0a364c678089e2c7", + "rev": "51063ed4f2343a59fdeebb279bb81d87d453942b", "type": "github" }, "original": { @@ -466,11 +466,11 @@ }, "nixpkgs_8": { "locked": { - "lastModified": 1709237383, - "narHash": "sha256-cy6ArO4k5qTx+l5o+0mL9f5fa86tYUX3ozE1S+Txlds=", + "lastModified": 1710272261, + "narHash": "sha256-g0bDwXFmTE7uGDOs9HcJsfLFhH7fOsASbAuOzDC+fhQ=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "1536926ef5621b09bba54035ae2bb6d806d72ac8", + "rev": "0ad13a6833440b8e238947e47bea7f11071dc2b2", "type": "github" }, "original": { From 410c891ec1230559afb0abb6ad3cbab4ef5b4362 Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Wed, 3 Apr 2024 17:54:04 +0200 Subject: [PATCH 032/301] printing things --- modules/desktop/default.nix | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/modules/desktop/default.nix b/modules/desktop/default.nix index 00e872b..52dedd3 100644 --- a/modules/desktop/default.nix +++ b/modules/desktop/default.nix @@ -44,7 +44,18 @@ in virtualisation.libvirtd.enable = true; services = { - printing.enable = true; + printing = { + enable = true; + drivers = [ + pkgs.gutenprint + pkgs.gutenprintBin + pkgs.hplip + pkgs.brlaser + pkgs.brgenml1lpr + pkgs.brgenml1cupswrapper + pkgs.ptouch-driver + ]; + }; gnome.gnome-keyring.enable = true; }; @@ -54,8 +65,11 @@ in }; services.illum.enable = true; - services.avahi.enable = true; - + services.avahi = { + enable = true; + nssmdns = true; + openFirewall = true; + }; services.smartd = { enable = true; notifications.x11.enable = true; From d3cf76ca8d15abf374a5c88e4d6db4981e79747b Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Wed, 3 Apr 2024 17:55:18 +0200 Subject: [PATCH 033/301] remove gimp plugins --- modules/desktop/creative.nix | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/modules/desktop/creative.nix b/modules/desktop/creative.nix index 354a860..a270f47 100644 --- a/modules/desktop/creative.nix +++ b/modules/desktop/creative.nix @@ -3,7 +3,8 @@ home.packages = with pkgs; [ audacity krita - gimp-with-plugins + # gimp-with-plugins + gimp inkscape-with-extensions obs-studio kdenlive From 3a62b76f49793b714d43a7d4a74ff2b98baf1e31 Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Wed, 3 Apr 2024 17:55:30 +0200 Subject: [PATCH 034/301] add scribus fancy tool stuff stuffs --- modules/desktop/creative.nix | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/modules/desktop/creative.nix b/modules/desktop/creative.nix index a270f47..d20b982 100644 --- a/modules/desktop/creative.nix +++ b/modules/desktop/creative.nix @@ -9,7 +9,12 @@ obs-studio kdenlive fspy + scribus + lilypond + gnuplot + graphviz + povray fontforge-gtk From 76dc4942d2eac7c07dd75bfe56d36b2c968bd1e2 Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Wed, 3 Apr 2024 17:55:39 +0200 Subject: [PATCH 035/301] add anonymous pro font --- modules/desktop/fonts.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/desktop/fonts.nix b/modules/desktop/fonts.nix index e743bfe..8b90d9e 100644 --- a/modules/desktop/fonts.nix +++ b/modules/desktop/fonts.nix @@ -1,6 +1,6 @@ {pkgs, ...}: { fonts.packages = with pkgs; [ - (nerdfonts.override {fonts = ["FiraCode"];}) + (nerdfonts.override {fonts = ["FiraCode" "AnonymousPro"];}) montserrat noto-fonts atkinson-hyperlegible From 643d47e4a144c9009f792f6f2879b0e9f4dd93b3 Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Wed, 3 Apr 2024 17:55:47 +0200 Subject: [PATCH 036/301] add macchanger --- modules/desktop/networking.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/modules/desktop/networking.nix b/modules/desktop/networking.nix index cfa2f5b..e02e9fe 100644 --- a/modules/desktop/networking.nix +++ b/modules/desktop/networking.nix @@ -63,6 +63,7 @@ in { networkmanagerapplet mullvad-vpn speedtest-cli + macchanger ]; }; }; From a2e61d05c28fd65837fe607ee703f0b66238381c Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Wed, 3 Apr 2024 17:55:59 +0200 Subject: [PATCH 037/301] add selection counter to helix status bar --- modules/shell/helix.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/modules/shell/helix.nix b/modules/shell/helix.nix index e0c2a9c..75e573b 100644 --- a/modules/shell/helix.nix +++ b/modules/shell/helix.nix @@ -52,6 +52,7 @@ "workspace-diagnostics" "register" "position" + "selections" "file-encoding" "file-type" ]; From 937562a81523da17a3930376e7b82c987bbfca0b Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Wed, 3 Apr 2024 17:56:13 +0200 Subject: [PATCH 038/301] fix recursive line count (lcr) --- other/config.nu | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/other/config.nu b/other/config.nu index 5589fc9..4d36d1d 100644 --- a/other/config.nu +++ b/other/config.nu @@ -790,7 +790,8 @@ def nsp [ def lcr [ file_extension: string ] { - ls $"**/*.($file_extension)" + ls **/* + | where name ends-with $".($file_extension)" | each {|file| open $file.name | lines --skip-empty From c5f02511eb9dd363e251093d054996c6b5cf38c3 Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Wed, 3 Apr 2024 17:57:24 +0200 Subject: [PATCH 039/301] flake.lock: Update MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Flake lock file updates: • Updated input 'home-manager': 'github:nix-community/home-manager/587719494ed18a184c98c4d55dde9469af4446bf' (2024-03-14) → 'github:nix-community/home-manager/80546b220e95a575c66c213af1b09fe255299438' (2024-04-02) • Updated input 'nixpkgs': 'github:NixOS/nixpkgs/0ad13a6833440b8e238947e47bea7f11071dc2b2' (2024-03-12) → 'github:NixOS/nixpkgs/d8fe5e6c92d0d190646fb9f1056741a229980089' (2024-03-29) • Updated input 'nixpkgs-stable': 'github:NixOS/nixpkgs/51063ed4f2343a59fdeebb279bb81d87d453942b' (2024-03-12) → 'github:NixOS/nixpkgs/219951b495fc2eac67b1456824cc1ec1fd2ee659' (2024-03-28) --- flake.lock | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/flake.lock b/flake.lock index 3724d95..af45058 100644 --- a/flake.lock +++ b/flake.lock @@ -190,11 +190,11 @@ ] }, "locked": { - "lastModified": 1710423955, - "narHash": "sha256-6N/65EqYVqCaz5SVoPMx2HgA+DJZAlw5lW+U9VHSSbE=", + "lastModified": 1712093955, + "narHash": "sha256-94I0sXz6fiVBvUAk2tg6t3UpM5rOImj4JTSTNFbg64s=", "owner": "nix-community", "repo": "home-manager", - "rev": "587719494ed18a184c98c4d55dde9469af4446bf", + "rev": "80546b220e95a575c66c213af1b09fe255299438", "type": "github" }, "original": { @@ -345,11 +345,11 @@ }, "nixpkgs-stable": { "locked": { - "lastModified": 1710283656, - "narHash": "sha256-nI+AOy4uK6jLGBi9nsbHjL1EdSIzoo8oa+9oeVhbyFc=", + "lastModified": 1711668574, + "narHash": "sha256-u1dfs0ASQIEr1icTVrsKwg2xToIpn7ZXxW3RHfHxshg=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "51063ed4f2343a59fdeebb279bb81d87d453942b", + "rev": "219951b495fc2eac67b1456824cc1ec1fd2ee659", "type": "github" }, "original": { @@ -466,11 +466,11 @@ }, "nixpkgs_8": { "locked": { - "lastModified": 1710272261, - "narHash": "sha256-g0bDwXFmTE7uGDOs9HcJsfLFhH7fOsASbAuOzDC+fhQ=", + "lastModified": 1711703276, + "narHash": "sha256-iMUFArF0WCatKK6RzfUJknjem0H9m4KgorO/p3Dopkk=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "0ad13a6833440b8e238947e47bea7f11071dc2b2", + "rev": "d8fe5e6c92d0d190646fb9f1056741a229980089", "type": "github" }, "original": { From c1d4aba9c3f5bd904a005d4db8202dcbe679eeae Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Wed, 3 Apr 2024 18:37:15 +0200 Subject: [PATCH 040/301] update helix to 24.3 --- flake.lock | 16 ++++++++++++++++ flake.nix | 9 ++++++--- modules/shell/helix.nix | 7 ++++++- 3 files changed, 28 insertions(+), 4 deletions(-) diff --git a/flake.lock b/flake.lock index af45058..645b9bc 100644 --- a/flake.lock +++ b/flake.lock @@ -358,6 +358,21 @@ "type": "indirect" } }, + "nixpkgs-unstable-small": { + "locked": { + "lastModified": 1712132741, + "narHash": "sha256-44ZLixE1FGUmz01/G/1ZMfJG8P+i8y2SkOVRia0xRkk=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "7781caa09d74b971a059a0240a03c5dd68acf3e5", + "type": "github" + }, + "original": { + "id": "nixpkgs", + "ref": "nixos-unstable-small", + "type": "indirect" + } + }, "nixpkgs_10": { "locked": { "lastModified": 1675614288, @@ -505,6 +520,7 @@ "nixos-hardware": "nixos-hardware", "nixpkgs": "nixpkgs_8", "nixpkgs-stable": "nixpkgs-stable", + "nixpkgs-unstable-small": "nixpkgs-unstable-small", "wordsofgod": "wordsofgod" } }, diff --git a/flake.nix b/flake.nix index 67768d8..ef869a2 100644 --- a/flake.nix +++ b/flake.nix @@ -4,6 +4,7 @@ inputs = { nixpkgs.url = "nixpkgs/nixos-unstable"; nixpkgs-stable.url = "nixpkgs/nixos-23.11"; + nixpkgs-unstable-small.url = "nixpkgs/nixos-unstable-small"; home-manager = { url = "github:nix-community/home-manager"; inputs.nixpkgs.follows = "nixpkgs"; @@ -26,12 +27,14 @@ self, nixpkgs, nixpkgs-stable, + nixpkgs-unstable-small, home-manager, nixos-hardware, mac-brcm-fw, ... } @ inputs: let pkgs = nixpkgs.legacyPackages."x86_64-linux"; + pkgs-unstable-small = nixpkgs-unstable-small.legacyPackages."x86_64-linux"; in { devShells."x86_64-linux".default = pkgs.mkShell { buildInputs = [ @@ -49,7 +52,7 @@ nixosConfigurations = { monosodium-glutamate-g = nixpkgs.lib.nixosSystem { specialArgs = { - inherit inputs; + inherit inputs pkgs-unstable-small; }; system = "x86_64-linux"; modules = [ @@ -71,7 +74,7 @@ }; catbook-j = nixpkgs.lib.nixosSystem { specialArgs = { - inherit inputs; + inherit inputs pkgs-unstable-small; }; system = "x86_64-linux"; modules = [ @@ -93,7 +96,7 @@ }; potatobook-g = nixpkgs.lib.nixosSystem { specialArgs = { - inherit inputs; + inherit inputs pkgs-unstable-small; }; system = "x86_64-linux"; modules = [ diff --git a/modules/shell/helix.nix b/modules/shell/helix.nix index 75e573b..c18bad5 100644 --- a/modules/shell/helix.nix +++ b/modules/shell/helix.nix @@ -1,4 +1,8 @@ -{config, ...}: { +{ + config, + pkgs-unstable-small, + ... +}: { home-manager.users.jade = {pkgs, ...}: let typstGrammar = pkgs.fetchFromGitHub { owner = "uben0"; @@ -24,6 +28,7 @@ }; programs.helix = { enable = true; + package = pkgs-unstable-small.helix; settings = { theme = "gruvbox"; editor = { From 9ed3cde274c5ab6cd2fbbd1ca795353fd98bbcaa Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Wed, 3 Apr 2024 19:04:00 +0200 Subject: [PATCH 041/301] configure helix --- modules/shell/helix.nix | 51 +++-------------------------------------- 1 file changed, 3 insertions(+), 48 deletions(-) diff --git a/modules/shell/helix.nix b/modules/shell/helix.nix index c18bad5..e018746 100644 --- a/modules/shell/helix.nix +++ b/modules/shell/helix.nix @@ -3,14 +3,7 @@ pkgs-unstable-small, ... }: { - home-manager.users.jade = {pkgs, ...}: let - typstGrammar = pkgs.fetchFromGitHub { - owner = "uben0"; - repo = "tree-sitter-typst"; - rev = "baddc325e858afff90501dbefa00ecfa28528931"; - sha256 = "sha256-XZAgnpb1B8EZ2WXPj/JYSZGsmpKsnDiBFCDF0XjunOM"; - }; - in { + home-manager.users.jade = {pkgs, ...}: { home = { sessionVariables.EDITOR = "hx"; packages = [ @@ -21,11 +14,6 @@ pkgs.typst-lsp ]; }; - home.file = { - ".config/helix/runtime/queries" = { - source = "${typstGrammar}/queries"; - }; - }; programs.helix = { enable = true; package = pkgs-unstable-small.helix; @@ -40,6 +28,8 @@ display-messages = true; display-inlay-hints = true; }; + completion-replace = true; + popup-border = "popup"; shell = ["nu" "-c"]; statusline.left = [ "mode" @@ -147,22 +137,11 @@ args = ["--language-server"]; }; "typst-lsp" = { - command = "typst-lsp"; config = { exportPdf = "onType"; }; }; }; - grammar = [ - { - name = "typst"; - source = { - git = "https://github.com/uben0/tree-sitter-typst"; - rev = "baddc325e858afff90501dbefa00ecfa28528931"; - # path = "${typstGrammar}"; - }; - } - ]; language = [ { name = "nu"; @@ -172,30 +151,6 @@ name = "php"; language-servers = ["psalm"]; } - { - name = "typst"; - scope = "source.typst"; - file-types = ["typ" "typst"]; - injection-regex = "typ(st)?"; - comment-token = "//"; - indent = { - tab-width = 2; - unit = " "; - }; - roots = ["typst.toml"]; - formatter = { - command = "${pkgs.typstfmt}/bin/typstfmt"; - }; - auto-format = true; - language-servers = ["typst-lsp"]; - auto-pairs = { - "(" = ")"; - "{" = "}"; - "[" = "]"; - "$" = "$"; - "\"" = "\""; - }; - } { name = "nix"; formatter = { From e53b2e1c905344ecdfa2888eb50a77cef6da9650 Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Thu, 4 Apr 2024 02:57:03 +0200 Subject: [PATCH 042/301] fix some opensearch stuff --- modules/desktop/firefox.nix | 34 +++++++++++++++++++++++++++++++--- 1 file changed, 31 insertions(+), 3 deletions(-) diff --git a/modules/desktop/firefox.nix b/modules/desktop/firefox.nix index 826dc00..4e68444 100644 --- a/modules/desktop/firefox.nix +++ b/modules/desktop/firefox.nix @@ -97,7 +97,13 @@ "NixOS Wiki" = { urls = [ { - template = "https://nixos.wiki/index.php?title=Special:Search&search={searchTerms}&namespace=0"; + template = "https://nixos.wiki/index.php"; + params = [ + { + name = "search"; + value = "{searchTerms}"; + } + ]; } ]; icon = "${pkgs.nixos-icons}/share/icons/hicolor/scalable/apps/nix-snowflake.svg"; @@ -106,15 +112,16 @@ "Noogle" = { urls = [ { - template = "https://noogle.dev/q?term={searchTerms}"; + template = "https://noogle.dev/q"; params = [ { - name = "q"; + name = "term"; value = "{searchTerms}"; } ]; } ]; + definedAliases = ["ngl"]; }; "lib.rs" = { urls = [ @@ -146,6 +153,14 @@ icon = "https://docs.rs/-/static/favicon.ico"; definedAliases = ["docs"]; }; + "rust docs direct open" = { + urls = [ + { + template = "https://docs.rs/{searchTerms}"; + } + ]; + definedAliases = ["docd"]; + }; "rust std docs" = { urls = [ { @@ -161,6 +176,19 @@ icon = "https://doc.rust-lang.org/favicon.ico"; definedAliases = ["std"]; }; + "MDN" = { + urls = [ + { + template = "https://developer.mozilla.org/search"; + params = [ + { + name = "q"; + value = "{searchTerms}"; + } + ]; + } + ]; + }; "Bing".metaData.hidden = true; "Google".metaData.hidden = true; "Amazon.de".metaData.hidden = true; From 5ddab9b274fd9c787f4fe6aa96e28423571f26de Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Wed, 10 Apr 2024 17:37:24 +0200 Subject: [PATCH 043/301] add libjxl --- common.nix | 2 ++ 1 file changed, 2 insertions(+) diff --git a/common.nix b/common.nix index ed81c16..d554103 100644 --- a/common.nix +++ b/common.nix @@ -71,6 +71,8 @@ with builtins; { usbutils numbat devd + + libjxl ]; }; From 0ec8e0adeee53f5cd839f07a26fec39745665974 Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Wed, 10 Apr 2024 17:37:36 +0200 Subject: [PATCH 044/301] add b612 font --- modules/desktop/fonts.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/modules/desktop/fonts.nix b/modules/desktop/fonts.nix index 8b90d9e..d7b3b12 100644 --- a/modules/desktop/fonts.nix +++ b/modules/desktop/fonts.nix @@ -13,6 +13,7 @@ amiri libertine inter + b612 ]; fonts.fontDir.enable = true; } From 4e34aeb2084fad7b5199895be724e5e295a8f475 Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Wed, 10 Apr 2024 17:38:26 +0200 Subject: [PATCH 045/301] flake.lock: Update MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Flake lock file updates: • Updated input 'arion': 'github:hercules-ci/arion/d2d48c9ec304ac80c84ede138b8c6f298d07d995' (2024-03-05) → 'github:hercules-ci/arion/1886d25075aaf24c8bc687b3d2a87ae1f5d154ec' (2024-04-05) • Updated input 'arion/flake-parts': 'github:hercules-ci/flake-parts/f7b3c975cf067e56e7cda6cb098ebe3fb4d74ca2' (2024-03-01) → 'github:hercules-ci/flake-parts/9126214d0a59633752a136528f5f3b9aa8565b7d' (2024-04-01) • Updated input 'arion/hercules-ci-effects': 'github:hercules-ci/hercules-ci-effects/0ca27bd58e4d5be3135a4bef66b582e57abe8f4a' (2024-02-21) → 'github:hercules-ci/hercules-ci-effects/64e7763d72c1e4c1e5e6472640615b6ae2d40fbf' (2024-03-15) • Updated input 'arion/hercules-ci-effects/flake-parts': 'github:hercules-ci/flake-parts/34fed993f1674c8d06d58b37ce1e0fe5eebcb9f5' (2023-12-01) → 'github:hercules-ci/flake-parts/f7b3c975cf067e56e7cda6cb098ebe3fb4d74ca2' (2024-03-01) • Updated input 'arion/nixpkgs': 'github:NixOS/nixpkgs/b8697e57f10292a6165a20f03d2f42920dfaf973' (2024-03-03) → 'github:NixOS/nixpkgs/fd281bd6b7d3e32ddfa399853946f782553163b5' (2024-04-03) • Updated input 'home-manager': 'github:nix-community/home-manager/80546b220e95a575c66c213af1b09fe255299438' (2024-04-02) → 'github:nix-community/home-manager/31357486b0ef6f4e161e002b6893eeb4fafc3ca9' (2024-04-10) • Updated input 'nixpkgs': 'github:NixOS/nixpkgs/d8fe5e6c92d0d190646fb9f1056741a229980089' (2024-03-29) → 'github:NixOS/nixpkgs/4cba8b53da471aea2ab2b0c1f30a81e7c451f4b6' (2024-04-08) • Updated input 'nixpkgs-stable': 'github:NixOS/nixpkgs/219951b495fc2eac67b1456824cc1ec1fd2ee659' (2024-03-28) → 'github:NixOS/nixpkgs/d272ca50d1f7424fbfcd1e6f1c9e01d92f6da167' (2024-04-08) • Updated input 'nixpkgs-unstable-small': 'github:NixOS/nixpkgs/7781caa09d74b971a059a0240a03c5dd68acf3e5' (2024-04-03) → 'github:NixOS/nixpkgs/ca74eb22840662bbd4aca7c38a35a02d16f0dd0a' (2024-04-10) --- flake.lock | 54 +++++++++++++++++++++++++++--------------------------- 1 file changed, 27 insertions(+), 27 deletions(-) diff --git a/flake.lock b/flake.lock index 645b9bc..7ae1d7c 100644 --- a/flake.lock +++ b/flake.lock @@ -8,11 +8,11 @@ "nixpkgs": "nixpkgs" }, "locked": { - "lastModified": 1709606645, - "narHash": "sha256-yObjAl8deNvx1uIfQn7/vkB9Rnr0kqTo1HVrsk46l30=", + "lastModified": 1712285456, + "narHash": "sha256-A4EBTlFfeosNaO8zpN7rlWTgF9AHy755NxKBvhJ1b0w=", "owner": "hercules-ci", "repo": "arion", - "rev": "d2d48c9ec304ac80c84ede138b8c6f298d07d995", + "rev": "1886d25075aaf24c8bc687b3d2a87ae1f5d154ec", "type": "github" }, "original": { @@ -49,11 +49,11 @@ ] }, "locked": { - "lastModified": 1709336216, - "narHash": "sha256-Dt/wOWeW6Sqm11Yh+2+t0dfEWxoMxGBvv3JpIocFl9E=", + "lastModified": 1712014858, + "narHash": "sha256-sB4SWl2lX95bExY2gMFG5HIzvva5AVMJd4Igm+GpZNw=", "owner": "hercules-ci", "repo": "flake-parts", - "rev": "f7b3c975cf067e56e7cda6cb098ebe3fb4d74ca2", + "rev": "9126214d0a59633752a136528f5f3b9aa8565b7d", "type": "github" }, "original": { @@ -71,11 +71,11 @@ ] }, "locked": { - "lastModified": 1701473968, - "narHash": "sha256-YcVE5emp1qQ8ieHUnxt1wCZCC3ZfAS+SRRWZ2TMda7E=", + "lastModified": 1709336216, + "narHash": "sha256-Dt/wOWeW6Sqm11Yh+2+t0dfEWxoMxGBvv3JpIocFl9E=", "owner": "hercules-ci", "repo": "flake-parts", - "rev": "34fed993f1674c8d06d58b37ce1e0fe5eebcb9f5", + "rev": "f7b3c975cf067e56e7cda6cb098ebe3fb4d74ca2", "type": "github" }, "original": { @@ -170,11 +170,11 @@ ] }, "locked": { - "lastModified": 1708547820, - "narHash": "sha256-xU/KC1PWqq5zL9dQ9wYhcdgxAwdeF/dJCLPH3PNZEBg=", + "lastModified": 1710478346, + "narHash": "sha256-Xjf8BdnQG0tLhPMlqQdwCIjOp7Teox0DP3N/jjyiGM4=", "owner": "hercules-ci", "repo": "hercules-ci-effects", - "rev": "0ca27bd58e4d5be3135a4bef66b582e57abe8f4a", + "rev": "64e7763d72c1e4c1e5e6472640615b6ae2d40fbf", "type": "github" }, "original": { @@ -190,11 +190,11 @@ ] }, "locked": { - "lastModified": 1712093955, - "narHash": "sha256-94I0sXz6fiVBvUAk2tg6t3UpM5rOImj4JTSTNFbg64s=", + "lastModified": 1712759992, + "narHash": "sha256-2APpO3ZW4idlgtlb8hB04u/rmIcKA8O7pYqxF66xbNY=", "owner": "nix-community", "repo": "home-manager", - "rev": "80546b220e95a575c66c213af1b09fe255299438", + "rev": "31357486b0ef6f4e161e002b6893eeb4fafc3ca9", "type": "github" }, "original": { @@ -329,11 +329,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1709479366, - "narHash": "sha256-n6F0n8UV6lnTZbYPl1A9q1BS0p4hduAv1mGAP17CVd0=", + "lastModified": 1712163089, + "narHash": "sha256-Um+8kTIrC19vD4/lUCN9/cU9kcOsD1O1m+axJqQPyMM=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "b8697e57f10292a6165a20f03d2f42920dfaf973", + "rev": "fd281bd6b7d3e32ddfa399853946f782553163b5", "type": "github" }, "original": { @@ -345,11 +345,11 @@ }, "nixpkgs-stable": { "locked": { - "lastModified": 1711668574, - "narHash": "sha256-u1dfs0ASQIEr1icTVrsKwg2xToIpn7ZXxW3RHfHxshg=", + "lastModified": 1712588820, + "narHash": "sha256-y31s5idk3jMJMAVE4Ud9AdI7HT3CgTAeMTJ0StqKN7Y=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "219951b495fc2eac67b1456824cc1ec1fd2ee659", + "rev": "d272ca50d1f7424fbfcd1e6f1c9e01d92f6da167", "type": "github" }, "original": { @@ -360,11 +360,11 @@ }, "nixpkgs-unstable-small": { "locked": { - "lastModified": 1712132741, - "narHash": "sha256-44ZLixE1FGUmz01/G/1ZMfJG8P+i8y2SkOVRia0xRkk=", + "lastModified": 1712733109, + "narHash": "sha256-DmBcIbIDgJiDxegzaZJlcZKAXrsUL00G0cKLN+JaK1s=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "7781caa09d74b971a059a0240a03c5dd68acf3e5", + "rev": "ca74eb22840662bbd4aca7c38a35a02d16f0dd0a", "type": "github" }, "original": { @@ -481,11 +481,11 @@ }, "nixpkgs_8": { "locked": { - "lastModified": 1711703276, - "narHash": "sha256-iMUFArF0WCatKK6RzfUJknjem0H9m4KgorO/p3Dopkk=", + "lastModified": 1712608508, + "narHash": "sha256-vMZ5603yU0wxgyQeHJryOI+O61yrX2AHwY6LOFyV1gM=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "d8fe5e6c92d0d190646fb9f1056741a229980089", + "rev": "4cba8b53da471aea2ab2b0c1f30a81e7c451f4b6", "type": "github" }, "original": { From 3ba9b95d09d255dd24439faaad1518d7ca4e641c Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Tue, 16 Apr 2024 21:35:32 +0200 Subject: [PATCH 046/301] move helix to normal unstable again --- modules/shell/helix.nix | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/modules/shell/helix.nix b/modules/shell/helix.nix index e018746..5055a35 100644 --- a/modules/shell/helix.nix +++ b/modules/shell/helix.nix @@ -1,8 +1,4 @@ -{ - config, - pkgs-unstable-small, - ... -}: { +{config, ...}: { home-manager.users.jade = {pkgs, ...}: { home = { sessionVariables.EDITOR = "hx"; @@ -16,7 +12,7 @@ }; programs.helix = { enable = true; - package = pkgs-unstable-small.helix; + package = pkgs.helix; settings = { theme = "gruvbox"; editor = { @@ -24,11 +20,12 @@ bufferline = "multiple"; color-modes = true; cursorline = true; + auto-save = true; + auto-format = true; lsp = { display-messages = true; display-inlay-hints = true; }; - completion-replace = true; popup-border = "popup"; shell = ["nu" "-c"]; statusline.left = [ @@ -93,7 +90,7 @@ }; "rust-analyzer" = { config = { - check.command = "clippy"; + check.command = "check"; completion.snippets.custom = { "pub fn" = { prefix = ["pfn" "pubfn"]; From 69c04bb3e2b4aa800b8ddf64761722ffb40d79ad Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Tue, 16 Apr 2024 21:35:47 +0200 Subject: [PATCH 047/301] switch bitwarden to nixpkgs-stbale --- modules/desktop/cloud.nix | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/modules/desktop/cloud.nix b/modules/desktop/cloud.nix index 47f66ec..15e3c3a 100644 --- a/modules/desktop/cloud.nix +++ b/modules/desktop/cloud.nix @@ -2,6 +2,7 @@ config, lib, pkgs, + pkgs-stable, ... }: let cfg = config.jade.desktop.cloud; @@ -14,7 +15,7 @@ in home-manager.users.jade = {pkgs, ...}: { home.packages = with pkgs; [ fluent-reader - bitwarden + pkgs-stable.bitwarden rofi-rbw ]; }; From 117c771fc474ac87da0f27598b3574f4f2caac3d Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Tue, 16 Apr 2024 21:36:00 +0200 Subject: [PATCH 048/301] remove fspy, add openscad --- modules/desktop/creative.nix | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/modules/desktop/creative.nix b/modules/desktop/creative.nix index d20b982..2eebca9 100644 --- a/modules/desktop/creative.nix +++ b/modules/desktop/creative.nix @@ -8,7 +8,6 @@ inkscape-with-extensions obs-studio kdenlive - fspy scribus lilypond @@ -16,6 +15,9 @@ graphviz povray + openscad-unstable + openscad-lsp + fontforge-gtk onlyoffice-bin_latest From 3aa834cf57bd1046a6e8a3e2744ea90784374b01 Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Tue, 16 Apr 2024 21:36:14 +0200 Subject: [PATCH 049/301] fix nerdfonts getting shittier --- modules/desktop-environment/home/panels/polybar.nix | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/modules/desktop-environment/home/panels/polybar.nix b/modules/desktop-environment/home/panels/polybar.nix index dd49ce9..4e8e02e 100644 --- a/modules/desktop-environment/home/panels/polybar.nix +++ b/modules/desktop-environment/home/panels/polybar.nix @@ -47,14 +47,14 @@ "module/xworkspaces" = { type = "internal/xworkspaces"; - label-active = ""; + label-active = ""; label-active-padding = 1; - label-occupied = ""; + label-occupied = ""; label-occupied-padding = 1; label-urgent = ""; label-urgent-foreground = "\${colors.alert}"; label-urgent-padding = 1; - label-empty = ""; + label-empty = ""; label-empty-foreground = "\${colors.disabled}"; label-empty-padding = 1; }; From 33732a192b9e14b8ac3f805e5e4a72961b395290 Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Tue, 16 Apr 2024 21:36:26 +0200 Subject: [PATCH 050/301] add jellyfin-media-player --- modules/desktop/default.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/modules/desktop/default.nix b/modules/desktop/default.nix index 52dedd3..bb04410 100644 --- a/modules/desktop/default.nix +++ b/modules/desktop/default.nix @@ -121,6 +121,7 @@ in mpv evince nomacs + jellyfin-media-player # from environment.systemPackages cleanup font-manager From 5c2deec279465ab066e025426fc5738a94f0f4d8 Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Tue, 16 Apr 2024 21:36:43 +0200 Subject: [PATCH 051/301] add nr alias and prevent bash usage on basic level --- other/config.nu | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/other/config.nu b/other/config.nu index 4d36d1d..f6fe0c7 100644 --- a/other/config.nu +++ b/other/config.nu @@ -787,6 +787,12 @@ def nsp [ nix shell ...($programs | each {|it| $"nixpkgs#($it)" }) } +def nr [ + program: string +] { + nix run $"nixpkgs#($program)" +} + def lcr [ file_extension: string ] { @@ -835,3 +841,5 @@ alias cch = cargo check; alias togglecaps = xdotool key Caps_Lock; alias TOGGLECAPS = togglecaps; + +alias bash = echo $"(ansi red)no, fuck that shit!"; From 52a6173f0bfbda2daa5492d0a529b0155dee4ada Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Tue, 16 Apr 2024 21:37:01 +0200 Subject: [PATCH 052/301] add rust support to config --- .gitignore | 1 + common.nix | 4 ++ flake.lock | 103 +++++++++++++++++++++++++++++--------- flake.nix | 32 ++++++++++-- programs/jrnl/Cargo.lock | 7 +++ programs/jrnl/Cargo.toml | 6 +++ programs/jrnl/src/main.rs | 3 ++ 7 files changed, 126 insertions(+), 30 deletions(-) create mode 100644 programs/jrnl/Cargo.lock create mode 100644 programs/jrnl/Cargo.toml create mode 100644 programs/jrnl/src/main.rs diff --git a/.gitignore b/.gitignore index 4812d58..8905c28 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ result .direnv/ +programs/*/target diff --git a/common.nix b/common.nix index d554103..21aa36d 100644 --- a/common.nix +++ b/common.nix @@ -5,6 +5,7 @@ config, pkgs, lib, + rs-programs, ... }: with lib; @@ -25,6 +26,7 @@ with builtins; { "nodejs-16.20.0" ]; }; + overlays = [rs-programs]; }; environment = { @@ -73,6 +75,8 @@ with builtins; { devd libjxl + + s10e-jrnl ]; }; diff --git a/flake.lock b/flake.lock index 7ae1d7c..7663640 100644 --- a/flake.lock +++ b/flake.lock @@ -41,6 +41,25 @@ "url": "https://gitlab.com/obsidianical/easymacros.git" } }, + "fenix": { + "inputs": { + "nixpkgs": "nixpkgs_4", + "rust-analyzer-src": "rust-analyzer-src" + }, + "locked": { + "lastModified": 1713248681, + "narHash": "sha256-wB/Hz8tP8xzNnfJotyeAWhxxe6R2BOI0DWOtDBFgEgc=", + "owner": "nix-community", + "repo": "fenix", + "rev": "402051dcf16bcaa14dcbd96d2d5b4a97664eb35c", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "fenix", + "type": "github" + } + }, "flake-parts": { "inputs": { "nixpkgs-lib": [ @@ -129,7 +148,7 @@ "gumseite": { "inputs": { "flake-utils": "flake-utils_2", - "nixpkgs": "nixpkgs_4" + "nixpkgs": "nixpkgs_5" }, "locked": { "lastModified": 1680175611, @@ -206,7 +225,7 @@ "karton": { "inputs": { "naersk": "naersk_2", - "nixpkgs": "nixpkgs_6", + "nixpkgs": "nixpkgs_7", "utils": "utils" }, "locked": { @@ -239,7 +258,7 @@ "meowsite": { "inputs": { "flake-utils": "flake-utils_3", - "nixpkgs": "nixpkgs_7" + "nixpkgs": "nixpkgs_8" }, "locked": { "lastModified": 1678920998, @@ -275,7 +294,7 @@ }, "naersk_2": { "inputs": { - "nixpkgs": "nixpkgs_5" + "nixpkgs": "nixpkgs_6" }, "locked": { "lastModified": 1671096816, @@ -294,7 +313,7 @@ }, "naersk_3": { "inputs": { - "nixpkgs": "nixpkgs_9" + "nixpkgs": "nixpkgs_10" }, "locked": { "lastModified": 1671096816, @@ -374,6 +393,20 @@ } }, "nixpkgs_10": { + "locked": { + "lastModified": 1675614288, + "narHash": "sha256-i3Rc/ENnz62BcrSloeVmAyPicEh4WsrEEYR+INs9TYw=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "d25de6654a34d99dceb02e71e6db516b3b545be6", + "type": "github" + }, + "original": { + "id": "nixpkgs", + "type": "indirect" + } + }, + "nixpkgs_11": { "locked": { "lastModified": 1675614288, "narHash": "sha256-i3Rc/ENnz62BcrSloeVmAyPicEh4WsrEEYR+INs9TYw=", @@ -418,6 +451,22 @@ } }, "nixpkgs_4": { + "locked": { + "lastModified": 1712963716, + "narHash": "sha256-WKm9CvgCldeIVvRz87iOMi8CFVB1apJlkUT4GGvA0iM=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "cfd6b5fc90b15709b780a5a1619695a88505a176", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_5": { "locked": { "lastModified": 1679966490, "narHash": "sha256-k0jV+y1jawE6w4ZvKgXDNg4+O9NNtcaWwzw8gufv0b4=", @@ -433,7 +482,7 @@ "type": "github" } }, - "nixpkgs_5": { + "nixpkgs_6": { "locked": { "lastModified": 1677852945, "narHash": "sha256-liiVJjkBTuBTAkRW3hrI8MbPD2ImYzwUpa7kvteiKhM=", @@ -447,7 +496,7 @@ "type": "indirect" } }, - "nixpkgs_6": { + "nixpkgs_7": { "locked": { "lastModified": 1677852945, "narHash": "sha256-liiVJjkBTuBTAkRW3hrI8MbPD2ImYzwUpa7kvteiKhM=", @@ -463,7 +512,7 @@ "type": "github" } }, - "nixpkgs_7": { + "nixpkgs_8": { "locked": { "lastModified": 1674407282, "narHash": "sha256-2qwc8mrPINSFdWffPK+ji6nQ9aGnnZyHSItVcYDZDlk=", @@ -479,7 +528,7 @@ "type": "github" } }, - "nixpkgs_8": { + "nixpkgs_9": { "locked": { "lastModified": 1712608508, "narHash": "sha256-vMZ5603yU0wxgyQeHJryOI+O61yrX2AHwY6LOFyV1gM=", @@ -494,36 +543,40 @@ "type": "indirect" } }, - "nixpkgs_9": { - "locked": { - "lastModified": 1675614288, - "narHash": "sha256-i3Rc/ENnz62BcrSloeVmAyPicEh4WsrEEYR+INs9TYw=", - "owner": "NixOS", - "repo": "nixpkgs", - "rev": "d25de6654a34d99dceb02e71e6db516b3b545be6", - "type": "github" - }, - "original": { - "id": "nixpkgs", - "type": "indirect" - } - }, "root": { "inputs": { "arion": "arion", "easymacros": "easymacros", + "fenix": "fenix", "gumseite": "gumseite", "home-manager": "home-manager", "karton": "karton", "mac-brcm-fw": "mac-brcm-fw", "meowsite": "meowsite", "nixos-hardware": "nixos-hardware", - "nixpkgs": "nixpkgs_8", + "nixpkgs": "nixpkgs_9", "nixpkgs-stable": "nixpkgs-stable", "nixpkgs-unstable-small": "nixpkgs-unstable-small", "wordsofgod": "wordsofgod" } }, + "rust-analyzer-src": { + "flake": false, + "locked": { + "lastModified": 1713212246, + "narHash": "sha256-lkNQ/oqb1vyvAVcZ6s8Bf6X00SqbEhdU+kPLX+C+PW8=", + "owner": "rust-lang", + "repo": "rust-analyzer", + "rev": "90cfa8035f98d3ab0f7f4f1e77f4f5e3b0a7370b", + "type": "github" + }, + "original": { + "owner": "rust-lang", + "ref": "nightly", + "repo": "rust-analyzer", + "type": "github" + } + }, "utils": { "locked": { "lastModified": 1676283394, @@ -557,7 +610,7 @@ "wordsofgod": { "inputs": { "naersk": "naersk_3", - "nixpkgs": "nixpkgs_10", + "nixpkgs": "nixpkgs_11", "utils": "utils_2" }, "locked": { diff --git a/flake.nix b/flake.nix index ef869a2..c24ac67 100644 --- a/flake.nix +++ b/flake.nix @@ -21,6 +21,7 @@ karton.url = "git+https://gitlab.com/obsidianical/microbin.git"; arion.url = "github:hercules-ci/arion"; gumseite.url = "git+https://gitlab.com/schrottkatze/gum-schulsachen.git"; + fenix.url = "github:nix-community/fenix"; }; outputs = { @@ -31,10 +32,30 @@ home-manager, nixos-hardware, mac-brcm-fw, + fenix, ... } @ inputs: let - pkgs = nixpkgs.legacyPackages."x86_64-linux"; - pkgs-unstable-small = nixpkgs-unstable-small.legacyPackages."x86_64-linux"; + system = "x86_64-linux"; + pkgs = nixpkgs.legacyPackages.${system}; + pkgs-stable = nixpkgs-stable.legacyPackages.${system}; + pkgs-unstable-small = nixpkgs-unstable-small.legacyPackages.${system}; + rs-toolchain = with fenix.packages.${system}; + combine [ + default.toolchain + rust-analyzer + ]; + rs-platform = pkgs.makeRustPlatform { + cargo = rs-toolchain; + rustc = rs-toolchain; + }; + rs-programs = final: prev: { + s10e-jrnl = rs-platform.buildRustPackage { + pname = "jrnl"; + version = "0.0.1"; + src = ./programs/jrnl; + cargoLock.lockFile = ./programs/jrnl/Cargo.lock; + }; + }; in { devShells."x86_64-linux".default = pkgs.mkShell { buildInputs = [ @@ -46,13 +67,14 @@ xmobar statgrab ])) + rs-toolchain pkgs.haskell-language-server ]; }; nixosConfigurations = { monosodium-glutamate-g = nixpkgs.lib.nixosSystem { specialArgs = { - inherit inputs pkgs-unstable-small; + inherit inputs pkgs-unstable-small pkgs-stable rs-programs; }; system = "x86_64-linux"; modules = [ @@ -74,7 +96,7 @@ }; catbook-j = nixpkgs.lib.nixosSystem { specialArgs = { - inherit inputs pkgs-unstable-small; + inherit inputs pkgs-unstable-small pkgs-stable rs-programs; }; system = "x86_64-linux"; modules = [ @@ -96,7 +118,7 @@ }; potatobook-g = nixpkgs.lib.nixosSystem { specialArgs = { - inherit inputs pkgs-unstable-small; + inherit inputs pkgs-unstable-small rs-programs; }; system = "x86_64-linux"; modules = [ diff --git a/programs/jrnl/Cargo.lock b/programs/jrnl/Cargo.lock new file mode 100644 index 0000000..949dfbc --- /dev/null +++ b/programs/jrnl/Cargo.lock @@ -0,0 +1,7 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "jrnl" +version = "0.1.0" diff --git a/programs/jrnl/Cargo.toml b/programs/jrnl/Cargo.toml new file mode 100644 index 0000000..e8e395d --- /dev/null +++ b/programs/jrnl/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "jrnl" +version = "0.1.0" +edition = "2021" + +[dependencies] diff --git a/programs/jrnl/src/main.rs b/programs/jrnl/src/main.rs new file mode 100644 index 0000000..e7a11a9 --- /dev/null +++ b/programs/jrnl/src/main.rs @@ -0,0 +1,3 @@ +fn main() { + println!("Hello, world!"); +} From dd12eb12ae455bdff2fd4f49c46e3f2bb0b42f1f Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Tue, 16 Apr 2024 22:06:12 +0200 Subject: [PATCH 053/301] jrnl: add basic cli --- hosts/catbook-j/configuration.nix | 1 + programs/jrnl/Cargo.lock | 874 ++++++++++++++++++++++++++++++ programs/jrnl/Cargo.toml | 5 + programs/jrnl/src/main.rs | 23 +- 4 files changed, 901 insertions(+), 2 deletions(-) diff --git a/hosts/catbook-j/configuration.nix b/hosts/catbook-j/configuration.nix index d87e1cb..81a0966 100644 --- a/hosts/catbook-j/configuration.nix +++ b/hosts/catbook-j/configuration.nix @@ -35,6 +35,7 @@ environment.variables = { VDPAU_DRIVER = lib.mkIf config.hardware.opengl.enable (lib.mkDefault "va_gl"); + S10E_JRNL_FILE_LOC = "/home/jade/Docs/jrnl.md"; }; hardware.opengl = { diff --git a/programs/jrnl/Cargo.lock b/programs/jrnl/Cargo.lock index 949dfbc..8cc4064 100644 --- a/programs/jrnl/Cargo.lock +++ b/programs/jrnl/Cargo.lock @@ -2,6 +2,880 @@ # It is not intended for manual editing. version = 3 +[[package]] +name = "ahash" +version = "0.8.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011" +dependencies = [ + "cfg-if", + "once_cell", + "version_check", + "zerocopy", +] + +[[package]] +name = "aho-corasick" +version = "1.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" +dependencies = [ + "memchr", +] + +[[package]] +name = "allocator-api2" +version = "0.2.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c6cb57a04249c6480766f7f7cef5467412af1490f8d1e243141daddada3264f" + +[[package]] +name = "anstream" +version = "0.6.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d96bd03f33fe50a863e394ee9718a706f988b9079b20c3784fb726e7678b62fb" +dependencies = [ + "anstyle", + "anstyle-parse", + "anstyle-query", + "anstyle-wincon", + "colorchoice", + "utf8parse", +] + +[[package]] +name = "anstyle" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8901269c6307e8d93993578286ac0edf7f195079ffff5ebdeea6a59ffb7e36bc" + +[[package]] +name = "anstyle-parse" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c75ac65da39e5fe5ab759307499ddad880d724eed2f6ce5b5e8a26f4f387928c" +dependencies = [ + "utf8parse", +] + +[[package]] +name = "anstyle-query" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e28923312444cdd728e4738b3f9c9cac739500909bb3d3c94b43551b16517648" +dependencies = [ + "windows-sys 0.52.0", +] + +[[package]] +name = "anstyle-wincon" +version = "3.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1cd54b81ec8d6180e24654d0b371ad22fc3dd083b6ff8ba325b72e00c87660a7" +dependencies = [ + "anstyle", + "windows-sys 0.52.0", +] + +[[package]] +name = "autocfg" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1fdabc7756949593fe60f30ec81974b613357de856987752631dea1e3394c80" + +[[package]] +name = "bitflags" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" + +[[package]] +name = "bitflags" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf4b9d6a944f767f8e5e0db018570623c85f3d925ac718db4e06d0187adb21c1" + +[[package]] +name = "cassowary" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df8670b8c7b9dae1793364eafadf7239c40d669904660c5960d74cfd80b46a53" + +[[package]] +name = "castaway" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a17ed5635fc8536268e5d4de1e22e81ac34419e5f052d4d51f4e01dcc263fcc" +dependencies = [ + "rustversion", +] + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "clap" +version = "4.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90bc066a67923782aa8515dbaea16946c5bcc5addbd668bb80af688e53e548a0" +dependencies = [ + "clap_builder", + "clap_derive", +] + +[[package]] +name = "clap_builder" +version = "4.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae129e2e766ae0ec03484e609954119f123cc1fe650337e155d03b022f24f7b4" +dependencies = [ + "anstream", + "anstyle", + "clap_lex", + "strsim", +] + +[[package]] +name = "clap_derive" +version = "4.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "528131438037fd55894f62d6e9f068b8f45ac57ffa77517819645d10aed04f64" +dependencies = [ + "heck 0.5.0", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "clap_lex" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "98cc8fbded0c607b7ba9dd60cd98df59af97e84d24e49c8557331cfc26d301ce" + +[[package]] +name = "colorchoice" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7" + +[[package]] +name = "compact_str" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f86b9c4c00838774a6d902ef931eff7470720c51d90c2e32cfe15dc304737b3f" +dependencies = [ + "castaway", + "cfg-if", + "itoa", + "ryu", + "static_assertions", +] + +[[package]] +name = "crossterm" +version = "0.27.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f476fe445d41c9e991fd07515a6f463074b782242ccf4a5b7b1d1012e70824df" +dependencies = [ + "bitflags 2.5.0", + "crossterm_winapi", + "libc", + "mio", + "parking_lot", + "signal-hook", + "signal-hook-mio", + "winapi", +] + +[[package]] +name = "crossterm_winapi" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "acdd7c62a3665c7f6830a51635d9ac9b23ed385797f70a83bb8bafe9c572ab2b" +dependencies = [ + "winapi", +] + +[[package]] +name = "dirs" +version = "5.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44c45a9d03d6676652bcb5e724c7e988de1acad23a711b5217ab9cbecbec2225" +dependencies = [ + "dirs-sys", +] + +[[package]] +name = "dirs-sys" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "520f05a5cbd335fae5a99ff7a6ab8627577660ee5cfd6a94a6a929b52ff0321c" +dependencies = [ + "libc", + "option-ext", + "redox_users", + "windows-sys 0.48.0", +] + +[[package]] +name = "either" +version = "1.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a47c1c47d2f5964e29c61246e81db715514cd532db6b5116a25ea3c03d6780a2" + +[[package]] +name = "equivalent" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" + +[[package]] +name = "fixedbitset" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" + +[[package]] +name = "getrandom" +version = "0.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94b22e06ecb0110981051723910cbf0b5f5e09a2062dd7663334ee79a9d1286c" +dependencies = [ + "cfg-if", + "libc", + "wasi", +] + +[[package]] +name = "hashbrown" +version = "0.14.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604" +dependencies = [ + "ahash", + "allocator-api2", +] + +[[package]] +name = "heck" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" + +[[package]] +name = "heck" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" + +[[package]] +name = "indexmap" +version = "2.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "168fb715dda47215e360912c096649d23d58bf392ac62f73919e831745e40f26" +dependencies = [ + "equivalent", + "hashbrown", +] + +[[package]] +name = "indoc" +version = "2.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b248f5224d1d606005e02c97f5aa4e88eeb230488bcc03bc9ca4d7991399f2b5" + +[[package]] +name = "itertools" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba291022dbbd398a455acf126c1e341954079855bc60dfdda641363bd6922569" +dependencies = [ + "either", +] + +[[package]] +name = "itoa" +version = "1.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" + [[package]] name = "jrnl" version = "0.1.0" +dependencies = [ + "clap", + "dirs", + "markdown", + "petgraph", + "ratatui", +] + +[[package]] +name = "lazy_static" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" + +[[package]] +name = "libc" +version = "0.2.153" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c198f91728a82281a64e1f4f9eeb25d82cb32a5de251c6bd1b5154d63a8e7bd" + +[[package]] +name = "libredox" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d" +dependencies = [ + "bitflags 2.5.0", + "libc", +] + +[[package]] +name = "lock_api" +version = "0.4.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c168f8615b12bc01f9c17e2eb0cc07dcae1940121185446edc3744920e8ef45" +dependencies = [ + "autocfg", + "scopeguard", +] + +[[package]] +name = "log" +version = "0.4.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90ed8c1e510134f979dbc4f070f87d4313098b704861a105fe34231c70a3901c" + +[[package]] +name = "lru" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3262e75e648fce39813cb56ac41f3c3e3f65217ebf3844d818d1f9398cfb0dc" +dependencies = [ + "hashbrown", +] + +[[package]] +name = "markdown" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef3aab6a1d529b112695f72beec5ee80e729cb45af58663ec902c8fac764ecdd" +dependencies = [ + "lazy_static", + "pipeline", + "regex", +] + +[[package]] +name = "memchr" +version = "2.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c8640c5d730cb13ebd907d8d04b52f55ac9a2eec55b440c8892f40d56c76c1d" + +[[package]] +name = "mio" +version = "0.8.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4a650543ca06a924e8b371db273b2756685faae30f8487da1b56505a8f78b0c" +dependencies = [ + "libc", + "log", + "wasi", + "windows-sys 0.48.0", +] + +[[package]] +name = "once_cell" +version = "1.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" + +[[package]] +name = "option-ext" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" + +[[package]] +name = "parking_lot" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" +dependencies = [ + "lock_api", + "parking_lot_core", +] + +[[package]] +name = "parking_lot_core" +version = "0.9.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c42a9226546d68acdd9c0a280d17ce19bfe27a46bf68784e4066115788d008e" +dependencies = [ + "cfg-if", + "libc", + "redox_syscall", + "smallvec", + "windows-targets 0.48.5", +] + +[[package]] +name = "paste" +version = "1.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "de3145af08024dea9fa9914f381a17b8fc6034dfb00f3a84013f7ff43f29ed4c" + +[[package]] +name = "petgraph" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1d3afd2628e69da2be385eb6f2fd57c8ac7977ceeff6dc166ff1657b0e386a9" +dependencies = [ + "fixedbitset", + "indexmap", +] + +[[package]] +name = "pipeline" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d15b6607fa632996eb8a17c9041cb6071cb75ac057abd45dece578723ea8c7c0" + +[[package]] +name = "proc-macro2" +version = "1.0.80" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a56dea16b0a29e94408b9aa5e2940a4eedbd128a1ba20e8f7ae60fd3d465af0e" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "quote" +version = "1.0.36" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "ratatui" +version = "0.26.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a564a852040e82671dc50a37d88f3aa83bbc690dfc6844cfe7a2591620206a80" +dependencies = [ + "bitflags 2.5.0", + "cassowary", + "compact_str", + "crossterm", + "indoc", + "itertools", + "lru", + "paste", + "stability", + "strum", + "unicode-segmentation", + "unicode-width", +] + +[[package]] +name = "redox_syscall" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa" +dependencies = [ + "bitflags 1.3.2", +] + +[[package]] +name = "redox_users" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd283d9651eeda4b2a83a43c1c91b266c40fd76ecd39a50a8c630ae69dc72891" +dependencies = [ + "getrandom", + "libredox", + "thiserror", +] + +[[package]] +name = "regex" +version = "1.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c117dbdfde9c8308975b6a18d71f3f385c89461f7b3fb054288ecf2a2058ba4c" +dependencies = [ + "aho-corasick", + "memchr", + "regex-automata", + "regex-syntax", +] + +[[package]] +name = "regex-automata" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "86b83b8b9847f9bf95ef68afb0b8e6cdb80f498442f5179a29fad448fcc1eaea" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax", +] + +[[package]] +name = "regex-syntax" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "adad44e29e4c806119491a7f06f03de4d1af22c3a680dd47f1e6e179439d1f56" + +[[package]] +name = "rustversion" +version = "1.0.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "80af6f9131f277a45a3fba6ce8e2258037bb0477a67e610d3c1fe046ab31de47" + +[[package]] +name = "ryu" +version = "1.0.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e86697c916019a8588c99b5fac3cead74ec0b4b819707a682fd4d23fa0ce1ba1" + +[[package]] +name = "scopeguard" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" + +[[package]] +name = "signal-hook" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8621587d4798caf8eb44879d42e56b9a93ea5dcd315a6487c357130095b62801" +dependencies = [ + "libc", + "signal-hook-registry", +] + +[[package]] +name = "signal-hook-mio" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29ad2e15f37ec9a6cc544097b78a1ec90001e9f71b81338ca39f430adaca99af" +dependencies = [ + "libc", + "mio", + "signal-hook", +] + +[[package]] +name = "signal-hook-registry" +version = "1.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8229b473baa5980ac72ef434c4415e70c4b5e71b423043adb4ba059f89c99a1" +dependencies = [ + "libc", +] + +[[package]] +name = "smallvec" +version = "1.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" + +[[package]] +name = "stability" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2ff9eaf853dec4c8802325d8b6d3dffa86cc707fd7a1a4cdbf416e13b061787a" +dependencies = [ + "quote", + "syn", +] + +[[package]] +name = "static_assertions" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" + +[[package]] +name = "strsim" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" + +[[package]] +name = "strum" +version = "0.26.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d8cec3501a5194c432b2b7976db6b7d10ec95c253208b45f83f7136aa985e29" +dependencies = [ + "strum_macros", +] + +[[package]] +name = "strum_macros" +version = "0.26.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c6cf59daf282c0a494ba14fd21610a0325f9f90ec9d1231dea26bcb1d696c946" +dependencies = [ + "heck 0.4.1", + "proc-macro2", + "quote", + "rustversion", + "syn", +] + +[[package]] +name = "syn" +version = "2.0.59" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4a6531ffc7b071655e4ce2e04bd464c4830bb585a61cabb96cf808f05172615a" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "thiserror" +version = "1.0.58" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03468839009160513471e86a034bb2c5c0e4baae3b43f79ffc55c4a5427b3297" +dependencies = [ + "thiserror-impl", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.58" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c61f3ba182994efc43764a46c018c347bc492c79f024e705f46567b418f6d4f7" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "unicode-ident" +version = "1.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" + +[[package]] +name = "unicode-segmentation" +version = "1.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4c87d22b6e3f4a18d4d40ef354e97c90fcb14dd91d7dc0aa9d8a1172ebf7202" + +[[package]] +name = "unicode-width" +version = "0.1.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e51733f11c9c4f72aa0c160008246859e340b00807569a0da0e7a1079b27ba85" + +[[package]] +name = "utf8parse" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a" + +[[package]] +name = "version_check" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" + +[[package]] +name = "wasi" +version = "0.11.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" + +[[package]] +name = "winapi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +dependencies = [ + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", +] + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" + +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" + +[[package]] +name = "windows-sys" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" +dependencies = [ + "windows-targets 0.48.5", +] + +[[package]] +name = "windows-sys" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" +dependencies = [ + "windows-targets 0.52.5", +] + +[[package]] +name = "windows-targets" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" +dependencies = [ + "windows_aarch64_gnullvm 0.48.5", + "windows_aarch64_msvc 0.48.5", + "windows_i686_gnu 0.48.5", + "windows_i686_msvc 0.48.5", + "windows_x86_64_gnu 0.48.5", + "windows_x86_64_gnullvm 0.48.5", + "windows_x86_64_msvc 0.48.5", +] + +[[package]] +name = "windows-targets" +version = "0.52.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f0713a46559409d202e70e28227288446bf7841d3211583a4b53e3f6d96e7eb" +dependencies = [ + "windows_aarch64_gnullvm 0.52.5", + "windows_aarch64_msvc 0.52.5", + "windows_i686_gnu 0.52.5", + "windows_i686_gnullvm", + "windows_i686_msvc 0.52.5", + "windows_x86_64_gnu 0.52.5", + "windows_x86_64_gnullvm 0.52.5", + "windows_x86_64_msvc 0.52.5", +] + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.52.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7088eed71e8b8dda258ecc8bac5fb1153c5cffaf2578fc8ff5d61e23578d3263" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.52.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9985fd1504e250c615ca5f281c3f7a6da76213ebd5ccc9561496568a2752afb6" + +[[package]] +name = "windows_i686_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" + +[[package]] +name = "windows_i686_gnu" +version = "0.52.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88ba073cf16d5372720ec942a8ccbf61626074c6d4dd2e745299726ce8b89670" + +[[package]] +name = "windows_i686_gnullvm" +version = "0.52.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87f4261229030a858f36b459e748ae97545d6f1ec60e5e0d6a3d32e0dc232ee9" + +[[package]] +name = "windows_i686_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" + +[[package]] +name = "windows_i686_msvc" +version = "0.52.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db3c2bf3d13d5b658be73463284eaf12830ac9a26a90c717b7f771dfe97487bf" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.52.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4e4246f76bdeff09eb48875a0fd3e2af6aada79d409d33011886d3e1581517d9" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.52.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "852298e482cd67c356ddd9570386e2862b5673c85bd5f88df9ab6802b334c596" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.52.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bec47e5bfd1bff0eeaf6d8b485cc1074891a197ab4225d504cb7a1ab88b02bf0" + +[[package]] +name = "zerocopy" +version = "0.7.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "74d4d3961e53fa4c9a25a8637fc2bfaf2595b3d3ae34875568a5cf64787716be" +dependencies = [ + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.7.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ce1b18ccd8e73a9321186f97e46f9f04b778851177567b1975109d26a08d2a6" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] diff --git a/programs/jrnl/Cargo.toml b/programs/jrnl/Cargo.toml index e8e395d..0c855d7 100644 --- a/programs/jrnl/Cargo.toml +++ b/programs/jrnl/Cargo.toml @@ -4,3 +4,8 @@ version = "0.1.0" edition = "2021" [dependencies] +clap = { version = "4.5.4", features = ["derive", "env"] } +dirs = "5.0.1" +markdown = "0.3.0" +petgraph = "0.6.4" +ratatui = "0.26.2" diff --git a/programs/jrnl/src/main.rs b/programs/jrnl/src/main.rs index e7a11a9..6422227 100644 --- a/programs/jrnl/src/main.rs +++ b/programs/jrnl/src/main.rs @@ -1,3 +1,22 @@ -fn main() { - println!("Hello, world!"); +use clap::{Parser, Subcommand}; +use std::path::PathBuf; + +#[derive(Debug, Parser)] +struct Cli { + #[arg(env)] + s10e_jrnl_file_loc: PathBuf, + #[command(subcommand)] + command: Option, +} + +#[derive(Debug, Subcommand)] +enum Command { + List, + Add, +} + +fn main() { + let cli = Cli::parse(); + println!("Hello, world!"); + println!("cli: {cli:#?}") } From 3b9aaf5f59e51eed161258b61f9e98bb7aa46993 Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Thu, 18 Apr 2024 16:11:47 +0200 Subject: [PATCH 054/301] flake.lock: Update MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Flake lock file updates: • Updated input 'fenix': 'github:nix-community/fenix/402051dcf16bcaa14dcbd96d2d5b4a97664eb35c' (2024-04-16) → 'github:nix-community/fenix/fd47b1f9404fae02a4f38bd9f4b12bad7833c96b' (2024-04-18) • Updated input 'fenix/nixpkgs': 'github:nixos/nixpkgs/cfd6b5fc90b15709b780a5a1619695a88505a176' (2024-04-12) → 'github:nixos/nixpkgs/5672bc9dbf9d88246ddab5ac454e82318d094bb8' (2024-04-16) • Updated input 'fenix/rust-analyzer-src': 'github:rust-lang/rust-analyzer/90cfa8035f98d3ab0f7f4f1e77f4f5e3b0a7370b' (2024-04-15) → 'github:rust-lang/rust-analyzer/46702ffc1a02a2ac153f1d1ce619ec917af8f3a6' (2024-04-17) • Updated input 'home-manager': 'github:nix-community/home-manager/31357486b0ef6f4e161e002b6893eeb4fafc3ca9' (2024-04-10) → 'github:nix-community/home-manager/f46814ec7cbef9c2aef18ca1cbe89f2bb1e8c394' (2024-04-17) • Updated input 'nixpkgs': 'github:NixOS/nixpkgs/4cba8b53da471aea2ab2b0c1f30a81e7c451f4b6' (2024-04-08) → 'github:NixOS/nixpkgs/5672bc9dbf9d88246ddab5ac454e82318d094bb8' (2024-04-16) • Updated input 'nixpkgs-stable': 'github:NixOS/nixpkgs/d272ca50d1f7424fbfcd1e6f1c9e01d92f6da167' (2024-04-08) → 'github:NixOS/nixpkgs/53a2c32bc66f5ae41a28d7a9a49d321172af621e' (2024-04-15) • Updated input 'nixpkgs-unstable-small': 'github:NixOS/nixpkgs/ca74eb22840662bbd4aca7c38a35a02d16f0dd0a' (2024-04-10) → 'github:NixOS/nixpkgs/2948912cdede361087742c672ff921cd80ac9ec2' (2024-04-18) --- flake.lock | 42 +++++++++++++++++++++--------------------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/flake.lock b/flake.lock index 7663640..02f5c33 100644 --- a/flake.lock +++ b/flake.lock @@ -47,11 +47,11 @@ "rust-analyzer-src": "rust-analyzer-src" }, "locked": { - "lastModified": 1713248681, - "narHash": "sha256-wB/Hz8tP8xzNnfJotyeAWhxxe6R2BOI0DWOtDBFgEgc=", + "lastModified": 1713421495, + "narHash": "sha256-5vVF9W1tJT+WdfpWAEG76KywktKDAW/71mVmNHEHjac=", "owner": "nix-community", "repo": "fenix", - "rev": "402051dcf16bcaa14dcbd96d2d5b4a97664eb35c", + "rev": "fd47b1f9404fae02a4f38bd9f4b12bad7833c96b", "type": "github" }, "original": { @@ -209,11 +209,11 @@ ] }, "locked": { - "lastModified": 1712759992, - "narHash": "sha256-2APpO3ZW4idlgtlb8hB04u/rmIcKA8O7pYqxF66xbNY=", + "lastModified": 1713391096, + "narHash": "sha256-5xkzsy+ILgQlmvDDipL5xqAehnjWBenAQXV4/NLg2dE=", "owner": "nix-community", "repo": "home-manager", - "rev": "31357486b0ef6f4e161e002b6893eeb4fafc3ca9", + "rev": "f46814ec7cbef9c2aef18ca1cbe89f2bb1e8c394", "type": "github" }, "original": { @@ -364,11 +364,11 @@ }, "nixpkgs-stable": { "locked": { - "lastModified": 1712588820, - "narHash": "sha256-y31s5idk3jMJMAVE4Ud9AdI7HT3CgTAeMTJ0StqKN7Y=", + "lastModified": 1713145326, + "narHash": "sha256-m7+IWM6mkWOg22EC5kRUFCycXsXLSU7hWmHdmBfmC3s=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "d272ca50d1f7424fbfcd1e6f1c9e01d92f6da167", + "rev": "53a2c32bc66f5ae41a28d7a9a49d321172af621e", "type": "github" }, "original": { @@ -379,11 +379,11 @@ }, "nixpkgs-unstable-small": { "locked": { - "lastModified": 1712733109, - "narHash": "sha256-DmBcIbIDgJiDxegzaZJlcZKAXrsUL00G0cKLN+JaK1s=", + "lastModified": 1713411820, + "narHash": "sha256-/hIPZzrEQGTx/urT91JoVPM6gJM1IjDYVBroC7MlRS4=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "ca74eb22840662bbd4aca7c38a35a02d16f0dd0a", + "rev": "2948912cdede361087742c672ff921cd80ac9ec2", "type": "github" }, "original": { @@ -452,11 +452,11 @@ }, "nixpkgs_4": { "locked": { - "lastModified": 1712963716, - "narHash": "sha256-WKm9CvgCldeIVvRz87iOMi8CFVB1apJlkUT4GGvA0iM=", + "lastModified": 1713248628, + "narHash": "sha256-NLznXB5AOnniUtZsyy/aPWOk8ussTuePp2acb9U+ISA=", "owner": "nixos", "repo": "nixpkgs", - "rev": "cfd6b5fc90b15709b780a5a1619695a88505a176", + "rev": "5672bc9dbf9d88246ddab5ac454e82318d094bb8", "type": "github" }, "original": { @@ -530,11 +530,11 @@ }, "nixpkgs_9": { "locked": { - "lastModified": 1712608508, - "narHash": "sha256-vMZ5603yU0wxgyQeHJryOI+O61yrX2AHwY6LOFyV1gM=", + "lastModified": 1713248628, + "narHash": "sha256-NLznXB5AOnniUtZsyy/aPWOk8ussTuePp2acb9U+ISA=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "4cba8b53da471aea2ab2b0c1f30a81e7c451f4b6", + "rev": "5672bc9dbf9d88246ddab5ac454e82318d094bb8", "type": "github" }, "original": { @@ -563,11 +563,11 @@ "rust-analyzer-src": { "flake": false, "locked": { - "lastModified": 1713212246, - "narHash": "sha256-lkNQ/oqb1vyvAVcZ6s8Bf6X00SqbEhdU+kPLX+C+PW8=", + "lastModified": 1713373173, + "narHash": "sha256-octd9BFY9G/Gbr4KfwK4itZp4Lx+qvJeRRcYnN+dEH8=", "owner": "rust-lang", "repo": "rust-analyzer", - "rev": "90cfa8035f98d3ab0f7f4f1e77f4f5e3b0a7370b", + "rev": "46702ffc1a02a2ac153f1d1ce619ec917af8f3a6", "type": "github" }, "original": { From 54b25b154add328bf62e619b550904c4edb2fca3 Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Thu, 18 Apr 2024 18:47:06 +0200 Subject: [PATCH 055/301] jrnl: proper parsing and improve rust-analyzer stuff working --- .gitignore | 1 + Cargo.lock | 962 ++++++++++++++++++++++++++++++++++++++ Cargo.toml | 4 + programs/jrnl/Cargo.lock | 69 +++ programs/jrnl/Cargo.toml | 4 + programs/jrnl/src/main.rs | 80 +++- 6 files changed, 1118 insertions(+), 2 deletions(-) create mode 100644 Cargo.lock create mode 100644 Cargo.toml diff --git a/.gitignore b/.gitignore index 8905c28..0c61835 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ result .direnv/ programs/*/target +target diff --git a/Cargo.lock b/Cargo.lock new file mode 100644 index 0000000..733bb36 --- /dev/null +++ b/Cargo.lock @@ -0,0 +1,962 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "ahash" +version = "0.8.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011" +dependencies = [ + "cfg-if", + "once_cell", + "version_check", + "zerocopy", +] + +[[package]] +name = "aho-corasick" +version = "1.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" +dependencies = [ + "memchr", +] + +[[package]] +name = "allocator-api2" +version = "0.2.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c6cb57a04249c6480766f7f7cef5467412af1490f8d1e243141daddada3264f" + +[[package]] +name = "anstream" +version = "0.6.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d96bd03f33fe50a863e394ee9718a706f988b9079b20c3784fb726e7678b62fb" +dependencies = [ + "anstyle", + "anstyle-parse", + "anstyle-query", + "anstyle-wincon", + "colorchoice", + "utf8parse", +] + +[[package]] +name = "anstyle" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8901269c6307e8d93993578286ac0edf7f195079ffff5ebdeea6a59ffb7e36bc" + +[[package]] +name = "anstyle-parse" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c75ac65da39e5fe5ab759307499ddad880d724eed2f6ce5b5e8a26f4f387928c" +dependencies = [ + "utf8parse", +] + +[[package]] +name = "anstyle-query" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e28923312444cdd728e4738b3f9c9cac739500909bb3d3c94b43551b16517648" +dependencies = [ + "windows-sys 0.52.0", +] + +[[package]] +name = "anstyle-wincon" +version = "3.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1cd54b81ec8d6180e24654d0b371ad22fc3dd083b6ff8ba325b72e00c87660a7" +dependencies = [ + "anstyle", + "windows-sys 0.52.0", +] + +[[package]] +name = "autocfg" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1fdabc7756949593fe60f30ec81974b613357de856987752631dea1e3394c80" + +[[package]] +name = "bitflags" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" + +[[package]] +name = "bitflags" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf4b9d6a944f767f8e5e0db018570623c85f3d925ac718db4e06d0187adb21c1" + +[[package]] +name = "cassowary" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df8670b8c7b9dae1793364eafadf7239c40d669904660c5960d74cfd80b46a53" + +[[package]] +name = "castaway" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a17ed5635fc8536268e5d4de1e22e81ac34419e5f052d4d51f4e01dcc263fcc" +dependencies = [ + "rustversion", +] + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "clap" +version = "4.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90bc066a67923782aa8515dbaea16946c5bcc5addbd668bb80af688e53e548a0" +dependencies = [ + "clap_builder", + "clap_derive", +] + +[[package]] +name = "clap_builder" +version = "4.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae129e2e766ae0ec03484e609954119f123cc1fe650337e155d03b022f24f7b4" +dependencies = [ + "anstream", + "anstyle", + "clap_lex", + "strsim", +] + +[[package]] +name = "clap_derive" +version = "4.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "528131438037fd55894f62d6e9f068b8f45ac57ffa77517819645d10aed04f64" +dependencies = [ + "heck 0.5.0", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "clap_lex" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "98cc8fbded0c607b7ba9dd60cd98df59af97e84d24e49c8557331cfc26d301ce" + +[[package]] +name = "colorchoice" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7" + +[[package]] +name = "compact_str" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f86b9c4c00838774a6d902ef931eff7470720c51d90c2e32cfe15dc304737b3f" +dependencies = [ + "castaway", + "cfg-if", + "itoa", + "ryu", + "static_assertions", +] + +[[package]] +name = "crossterm" +version = "0.27.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f476fe445d41c9e991fd07515a6f463074b782242ccf4a5b7b1d1012e70824df" +dependencies = [ + "bitflags 2.5.0", + "crossterm_winapi", + "libc", + "mio", + "parking_lot", + "signal-hook", + "signal-hook-mio", + "winapi", +] + +[[package]] +name = "crossterm_winapi" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "acdd7c62a3665c7f6830a51635d9ac9b23ed385797f70a83bb8bafe9c572ab2b" +dependencies = [ + "winapi", +] + +[[package]] +name = "deranged" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4" +dependencies = [ + "powerfmt", +] + +[[package]] +name = "dirs" +version = "5.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44c45a9d03d6676652bcb5e724c7e988de1acad23a711b5217ab9cbecbec2225" +dependencies = [ + "dirs-sys", +] + +[[package]] +name = "dirs-sys" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "520f05a5cbd335fae5a99ff7a6ab8627577660ee5cfd6a94a6a929b52ff0321c" +dependencies = [ + "libc", + "option-ext", + "redox_users", + "windows-sys 0.48.0", +] + +[[package]] +name = "ego-tree" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a68a4904193147e0a8dec3314640e6db742afd5f6e634f428a6af230d9b3591" + +[[package]] +name = "either" +version = "1.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a47c1c47d2f5964e29c61246e81db715514cd532db6b5116a25ea3c03d6780a2" + +[[package]] +name = "equivalent" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" + +[[package]] +name = "fixedbitset" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" + +[[package]] +name = "getrandom" +version = "0.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94b22e06ecb0110981051723910cbf0b5f5e09a2062dd7663334ee79a9d1286c" +dependencies = [ + "cfg-if", + "libc", + "wasi", +] + +[[package]] +name = "hashbrown" +version = "0.14.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604" +dependencies = [ + "ahash", + "allocator-api2", +] + +[[package]] +name = "heck" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" + +[[package]] +name = "heck" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" + +[[package]] +name = "indexmap" +version = "2.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "168fb715dda47215e360912c096649d23d58bf392ac62f73919e831745e40f26" +dependencies = [ + "equivalent", + "hashbrown", +] + +[[package]] +name = "indoc" +version = "2.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b248f5224d1d606005e02c97f5aa4e88eeb230488bcc03bc9ca4d7991399f2b5" + +[[package]] +name = "itertools" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba291022dbbd398a455acf126c1e341954079855bc60dfdda641363bd6922569" +dependencies = [ + "either", +] + +[[package]] +name = "itoa" +version = "1.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" + +[[package]] +name = "jrnl" +version = "0.1.0" +dependencies = [ + "clap", + "dirs", + "ego-tree", + "indexmap", + "markdown", + "petgraph", + "ratatui", + "time", + "time-macros", +] + +[[package]] +name = "lazy_static" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" + +[[package]] +name = "libc" +version = "0.2.153" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c198f91728a82281a64e1f4f9eeb25d82cb32a5de251c6bd1b5154d63a8e7bd" + +[[package]] +name = "libredox" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d" +dependencies = [ + "bitflags 2.5.0", + "libc", +] + +[[package]] +name = "lock_api" +version = "0.4.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c168f8615b12bc01f9c17e2eb0cc07dcae1940121185446edc3744920e8ef45" +dependencies = [ + "autocfg", + "scopeguard", +] + +[[package]] +name = "log" +version = "0.4.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90ed8c1e510134f979dbc4f070f87d4313098b704861a105fe34231c70a3901c" + +[[package]] +name = "lru" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3262e75e648fce39813cb56ac41f3c3e3f65217ebf3844d818d1f9398cfb0dc" +dependencies = [ + "hashbrown", +] + +[[package]] +name = "markdown" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef3aab6a1d529b112695f72beec5ee80e729cb45af58663ec902c8fac764ecdd" +dependencies = [ + "lazy_static", + "pipeline", + "regex", +] + +[[package]] +name = "memchr" +version = "2.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c8640c5d730cb13ebd907d8d04b52f55ac9a2eec55b440c8892f40d56c76c1d" + +[[package]] +name = "mio" +version = "0.8.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4a650543ca06a924e8b371db273b2756685faae30f8487da1b56505a8f78b0c" +dependencies = [ + "libc", + "log", + "wasi", + "windows-sys 0.48.0", +] + +[[package]] +name = "num-conv" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" + +[[package]] +name = "once_cell" +version = "1.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" + +[[package]] +name = "option-ext" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" + +[[package]] +name = "parking_lot" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" +dependencies = [ + "lock_api", + "parking_lot_core", +] + +[[package]] +name = "parking_lot_core" +version = "0.9.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c42a9226546d68acdd9c0a280d17ce19bfe27a46bf68784e4066115788d008e" +dependencies = [ + "cfg-if", + "libc", + "redox_syscall", + "smallvec", + "windows-targets 0.48.5", +] + +[[package]] +name = "paste" +version = "1.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "de3145af08024dea9fa9914f381a17b8fc6034dfb00f3a84013f7ff43f29ed4c" + +[[package]] +name = "petgraph" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1d3afd2628e69da2be385eb6f2fd57c8ac7977ceeff6dc166ff1657b0e386a9" +dependencies = [ + "fixedbitset", + "indexmap", +] + +[[package]] +name = "pipeline" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d15b6607fa632996eb8a17c9041cb6071cb75ac057abd45dece578723ea8c7c0" + +[[package]] +name = "powerfmt" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" + +[[package]] +name = "proc-macro2" +version = "1.0.81" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d1597b0c024618f09a9c3b8655b7e430397a36d23fdafec26d6965e9eec3eba" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "quote" +version = "1.0.36" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "ratatui" +version = "0.26.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a564a852040e82671dc50a37d88f3aa83bbc690dfc6844cfe7a2591620206a80" +dependencies = [ + "bitflags 2.5.0", + "cassowary", + "compact_str", + "crossterm", + "indoc", + "itertools", + "lru", + "paste", + "stability", + "strum", + "unicode-segmentation", + "unicode-width", +] + +[[package]] +name = "redox_syscall" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa" +dependencies = [ + "bitflags 1.3.2", +] + +[[package]] +name = "redox_users" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd283d9651eeda4b2a83a43c1c91b266c40fd76ecd39a50a8c630ae69dc72891" +dependencies = [ + "getrandom", + "libredox", + "thiserror", +] + +[[package]] +name = "regex" +version = "1.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c117dbdfde9c8308975b6a18d71f3f385c89461f7b3fb054288ecf2a2058ba4c" +dependencies = [ + "aho-corasick", + "memchr", + "regex-automata", + "regex-syntax", +] + +[[package]] +name = "regex-automata" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "86b83b8b9847f9bf95ef68afb0b8e6cdb80f498442f5179a29fad448fcc1eaea" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax", +] + +[[package]] +name = "regex-syntax" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "adad44e29e4c806119491a7f06f03de4d1af22c3a680dd47f1e6e179439d1f56" + +[[package]] +name = "rustversion" +version = "1.0.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "80af6f9131f277a45a3fba6ce8e2258037bb0477a67e610d3c1fe046ab31de47" + +[[package]] +name = "ryu" +version = "1.0.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e86697c916019a8588c99b5fac3cead74ec0b4b819707a682fd4d23fa0ce1ba1" + +[[package]] +name = "scopeguard" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" + +[[package]] +name = "serde" +version = "1.0.198" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9846a40c979031340571da2545a4e5b7c4163bdae79b301d5f86d03979451fcc" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.198" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e88edab869b01783ba905e7d0153f9fc1a6505a96e4ad3018011eedb838566d9" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "signal-hook" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8621587d4798caf8eb44879d42e56b9a93ea5dcd315a6487c357130095b62801" +dependencies = [ + "libc", + "signal-hook-registry", +] + +[[package]] +name = "signal-hook-mio" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29ad2e15f37ec9a6cc544097b78a1ec90001e9f71b81338ca39f430adaca99af" +dependencies = [ + "libc", + "mio", + "signal-hook", +] + +[[package]] +name = "signal-hook-registry" +version = "1.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8229b473baa5980ac72ef434c4415e70c4b5e71b423043adb4ba059f89c99a1" +dependencies = [ + "libc", +] + +[[package]] +name = "smallvec" +version = "1.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" + +[[package]] +name = "stability" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2ff9eaf853dec4c8802325d8b6d3dffa86cc707fd7a1a4cdbf416e13b061787a" +dependencies = [ + "quote", + "syn", +] + +[[package]] +name = "static_assertions" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" + +[[package]] +name = "strsim" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" + +[[package]] +name = "strum" +version = "0.26.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d8cec3501a5194c432b2b7976db6b7d10ec95c253208b45f83f7136aa985e29" +dependencies = [ + "strum_macros", +] + +[[package]] +name = "strum_macros" +version = "0.26.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c6cf59daf282c0a494ba14fd21610a0325f9f90ec9d1231dea26bcb1d696c946" +dependencies = [ + "heck 0.4.1", + "proc-macro2", + "quote", + "rustversion", + "syn", +] + +[[package]] +name = "syn" +version = "2.0.60" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "909518bc7b1c9b779f1bbf07f2929d35af9f0f37e47c6e9ef7f9dddc1e1821f3" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "thiserror" +version = "1.0.58" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03468839009160513471e86a034bb2c5c0e4baae3b43f79ffc55c4a5427b3297" +dependencies = [ + "thiserror-impl", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.58" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c61f3ba182994efc43764a46c018c347bc492c79f024e705f46567b418f6d4f7" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "time" +version = "0.3.36" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5dfd88e563464686c916c7e46e623e520ddc6d79fa6641390f2e3fa86e83e885" +dependencies = [ + "deranged", + "num-conv", + "powerfmt", + "serde", + "time-core", + "time-macros", +] + +[[package]] +name = "time-core" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" + +[[package]] +name = "time-macros" +version = "0.2.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f252a68540fde3a3877aeea552b832b40ab9a69e318efd078774a01ddee1ccf" +dependencies = [ + "num-conv", + "time-core", +] + +[[package]] +name = "unicode-ident" +version = "1.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" + +[[package]] +name = "unicode-segmentation" +version = "1.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4c87d22b6e3f4a18d4d40ef354e97c90fcb14dd91d7dc0aa9d8a1172ebf7202" + +[[package]] +name = "unicode-width" +version = "0.1.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e51733f11c9c4f72aa0c160008246859e340b00807569a0da0e7a1079b27ba85" + +[[package]] +name = "utf8parse" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a" + +[[package]] +name = "version_check" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" + +[[package]] +name = "wasi" +version = "0.11.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" + +[[package]] +name = "winapi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +dependencies = [ + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", +] + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" + +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" + +[[package]] +name = "windows-sys" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" +dependencies = [ + "windows-targets 0.48.5", +] + +[[package]] +name = "windows-sys" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" +dependencies = [ + "windows-targets 0.52.5", +] + +[[package]] +name = "windows-targets" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" +dependencies = [ + "windows_aarch64_gnullvm 0.48.5", + "windows_aarch64_msvc 0.48.5", + "windows_i686_gnu 0.48.5", + "windows_i686_msvc 0.48.5", + "windows_x86_64_gnu 0.48.5", + "windows_x86_64_gnullvm 0.48.5", + "windows_x86_64_msvc 0.48.5", +] + +[[package]] +name = "windows-targets" +version = "0.52.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f0713a46559409d202e70e28227288446bf7841d3211583a4b53e3f6d96e7eb" +dependencies = [ + "windows_aarch64_gnullvm 0.52.5", + "windows_aarch64_msvc 0.52.5", + "windows_i686_gnu 0.52.5", + "windows_i686_gnullvm", + "windows_i686_msvc 0.52.5", + "windows_x86_64_gnu 0.52.5", + "windows_x86_64_gnullvm 0.52.5", + "windows_x86_64_msvc 0.52.5", +] + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.52.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7088eed71e8b8dda258ecc8bac5fb1153c5cffaf2578fc8ff5d61e23578d3263" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.52.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9985fd1504e250c615ca5f281c3f7a6da76213ebd5ccc9561496568a2752afb6" + +[[package]] +name = "windows_i686_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" + +[[package]] +name = "windows_i686_gnu" +version = "0.52.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88ba073cf16d5372720ec942a8ccbf61626074c6d4dd2e745299726ce8b89670" + +[[package]] +name = "windows_i686_gnullvm" +version = "0.52.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87f4261229030a858f36b459e748ae97545d6f1ec60e5e0d6a3d32e0dc232ee9" + +[[package]] +name = "windows_i686_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" + +[[package]] +name = "windows_i686_msvc" +version = "0.52.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db3c2bf3d13d5b658be73463284eaf12830ac9a26a90c717b7f771dfe97487bf" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.52.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4e4246f76bdeff09eb48875a0fd3e2af6aada79d409d33011886d3e1581517d9" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.52.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "852298e482cd67c356ddd9570386e2862b5673c85bd5f88df9ab6802b334c596" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.52.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bec47e5bfd1bff0eeaf6d8b485cc1074891a197ab4225d504cb7a1ab88b02bf0" + +[[package]] +name = "zerocopy" +version = "0.7.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "74d4d3961e53fa4c9a25a8637fc2bfaf2595b3d3ae34875568a5cf64787716be" +dependencies = [ + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.7.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ce1b18ccd8e73a9321186f97e46f9f04b778851177567b1975109d26a08d2a6" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] diff --git a/Cargo.toml b/Cargo.toml new file mode 100644 index 0000000..814805f --- /dev/null +++ b/Cargo.toml @@ -0,0 +1,4 @@ +[workspace] +members = [ + "programs/jrnl" +] diff --git a/programs/jrnl/Cargo.lock b/programs/jrnl/Cargo.lock index 8cc4064..e6623b0 100644 --- a/programs/jrnl/Cargo.lock +++ b/programs/jrnl/Cargo.lock @@ -200,6 +200,15 @@ dependencies = [ "winapi", ] +[[package]] +name = "deranged" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4" +dependencies = [ + "powerfmt", +] + [[package]] name = "dirs" version = "5.0.1" @@ -221,6 +230,12 @@ dependencies = [ "windows-sys 0.48.0", ] +[[package]] +name = "ego-tree" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a68a4904193147e0a8dec3314640e6db742afd5f6e634f428a6af230d9b3591" + [[package]] name = "either" version = "1.11.0" @@ -309,9 +324,12 @@ version = "0.1.0" dependencies = [ "clap", "dirs", + "ego-tree", + "indexmap", "markdown", "petgraph", "ratatui", + "time", ] [[package]] @@ -390,6 +408,12 @@ dependencies = [ "windows-sys 0.48.0", ] +[[package]] +name = "num-conv" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" + [[package]] name = "once_cell" version = "1.19.0" @@ -447,6 +471,12 @@ version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d15b6607fa632996eb8a17c9041cb6071cb75ac057abd45dece578723ea8c7c0" +[[package]] +name = "powerfmt" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" + [[package]] name = "proc-macro2" version = "1.0.80" @@ -552,6 +582,26 @@ version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" +[[package]] +name = "serde" +version = "1.0.198" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9846a40c979031340571da2545a4e5b7c4163bdae79b301d5f86d03979451fcc" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.198" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e88edab869b01783ba905e7d0153f9fc1a6505a96e4ad3018011eedb838566d9" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "signal-hook" version = "0.3.17" @@ -663,6 +713,25 @@ dependencies = [ "syn", ] +[[package]] +name = "time" +version = "0.3.36" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5dfd88e563464686c916c7e46e623e520ddc6d79fa6641390f2e3fa86e83e885" +dependencies = [ + "deranged", + "num-conv", + "powerfmt", + "serde", + "time-core", +] + +[[package]] +name = "time-core" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" + [[package]] name = "unicode-ident" version = "1.0.12" diff --git a/programs/jrnl/Cargo.toml b/programs/jrnl/Cargo.toml index 0c855d7..119d4d9 100644 --- a/programs/jrnl/Cargo.toml +++ b/programs/jrnl/Cargo.toml @@ -6,6 +6,10 @@ edition = "2021" [dependencies] clap = { version = "4.5.4", features = ["derive", "env"] } dirs = "5.0.1" +ego-tree = "0.6.2" +indexmap = "2.2.6" markdown = "0.3.0" petgraph = "0.6.4" ratatui = "0.26.2" +time = { version = "0.3.36", features = ["parsing"]} +time-macros = { version = "0.2.0-alpha.1" } diff --git a/programs/jrnl/src/main.rs b/programs/jrnl/src/main.rs index 6422227..f6d30cf 100644 --- a/programs/jrnl/src/main.rs +++ b/programs/jrnl/src/main.rs @@ -1,5 +1,15 @@ use clap::{Parser, Subcommand}; -use std::path::PathBuf; +use std::{fs, path::PathBuf}; +use time::format_description::well_known::{iso8601, Iso8601}; + +use crate::md::Doc; + +const DATETIME_CONFIG: iso8601::EncodedConfig = iso8601::Config::DEFAULT + .set_time_precision(iso8601::TimePrecision::Minute { + decimal_digits: None, + }) + .encode(); +const DT_FORMAT: Iso8601 = Iso8601::; #[derive(Debug, Parser)] struct Cli { @@ -18,5 +28,71 @@ enum Command { fn main() { let cli = Cli::parse(); println!("Hello, world!"); - println!("cli: {cli:#?}") + println!("cli: {cli:#?}"); + + // TODO: handle btter + let file = fs::read_to_string(cli.s10e_jrnl_file_loc).unwrap(); + + let doc = Doc::new(&file); + dbg!(doc); +} + +mod md { + use markdown::{Block, Span}; + use time::PrimitiveDateTime; + + use crate::DT_FORMAT; + + #[derive(Debug)] + pub struct Doc { + title: Vec, + entries: Vec, + } + + impl Doc { + pub fn new(f: &str) -> Self { + let mut entries = Vec::new(); + let mut doc_title = vec![Span::Text("Journal".to_owned())]; + let toks = markdown::tokenize(f); + let mut current = None; + + for tok in toks { + match tok { + Block::Header(title, 1) => doc_title = title, + Block::Header(entry_title, 2) => { + if let Some(cur) = current.take() { + entries.push(cur); + } + + let Some(Span::Text(title)) = entry_title.first() else { + eprintln!("Error: Titles should be text."); + std::process::exit(1); + }; + + let (ts, entry_title) = title.split_once(": ").unwrap(); + let ts = PrimitiveDateTime::parse(ts, &DT_FORMAT).unwrap(); + + current = Some(Entry { + timestamp: ts, + title: entry_title.to_owned(), + content: Vec::new(), + }); + } + other => current.as_mut().unwrap().content.push(other), + } + } + + Self { + title: doc_title, + entries, + } + } + } + + #[derive(Debug)] + pub struct Entry { + timestamp: PrimitiveDateTime, + title: String, + content: Vec, + } } From 20daa946979c6d9699ec37d1b81213ca465ceffb Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Thu, 18 Apr 2024 18:47:22 +0200 Subject: [PATCH 056/301] add more shell preventions --- other/config.nu | 3 +++ 1 file changed, 3 insertions(+) diff --git a/other/config.nu b/other/config.nu index f6fe0c7..b73d09f 100644 --- a/other/config.nu +++ b/other/config.nu @@ -843,3 +843,6 @@ alias togglecaps = xdotool key Caps_Lock; alias TOGGLECAPS = togglecaps; alias bash = echo $"(ansi red)no, fuck that shit!"; +alias sh = echo $"(ansi red)no, fuck that shit!"; +alias zsh = echo $"(ansi red)no, fuck that shit!"; +alias fish = echo $"(ansi red)no, fuck that shit!"; From 4a97a34afc9cc0279496384f0f3988b8ea87288f Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Sat, 20 Apr 2024 16:09:09 +0200 Subject: [PATCH 057/301] make lcr faster --- other/config.nu | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/other/config.nu b/other/config.nu index b73d09f..0f359b5 100644 --- a/other/config.nu +++ b/other/config.nu @@ -798,7 +798,7 @@ def lcr [ ] { ls **/* | where name ends-with $".($file_extension)" - | each {|file| + | par-each {|file| open $file.name | lines --skip-empty | length } From d1dee45d9c127558151482d975bf27cfe117cda1 Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Sat, 20 Apr 2024 16:09:26 +0200 Subject: [PATCH 058/301] make rustdoc alias more practical --- modules/desktop/firefox.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/desktop/firefox.nix b/modules/desktop/firefox.nix index 4e68444..873627f 100644 --- a/modules/desktop/firefox.nix +++ b/modules/desktop/firefox.nix @@ -159,7 +159,7 @@ template = "https://docs.rs/{searchTerms}"; } ]; - definedAliases = ["docd"]; + definedAliases = ["doc"]; }; "rust std docs" = { urls = [ From 83c0fac4276eeb1ea65bad8c46aaeaa7213a28f9 Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Sat, 20 Apr 2024 16:28:36 +0200 Subject: [PATCH 059/301] flake.lock: Update MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Flake lock file updates: • Updated input 'fenix': 'github:nix-community/fenix/fd47b1f9404fae02a4f38bd9f4b12bad7833c96b' (2024-04-18) → 'github:nix-community/fenix/3247290e1bba55878a2c62d43894d0309d29c918' (2024-04-20) • Updated input 'fenix/nixpkgs': 'github:nixos/nixpkgs/5672bc9dbf9d88246ddab5ac454e82318d094bb8' (2024-04-16) → 'github:nixos/nixpkgs/5c24cf2f0a12ad855f444c30b2421d044120c66f' (2024-04-19) • Updated input 'fenix/rust-analyzer-src': 'github:rust-lang/rust-analyzer/46702ffc1a02a2ac153f1d1ce619ec917af8f3a6' (2024-04-17) → 'github:rust-lang/rust-analyzer/c83d8cf5844fff3d6e243ab408669222059af1c6' (2024-04-19) • Updated input 'home-manager': 'github:nix-community/home-manager/f46814ec7cbef9c2aef18ca1cbe89f2bb1e8c394' (2024-04-17) → 'github:nix-community/home-manager/057117a401a34259c9615ce62218aea7afdee4d3' (2024-04-19) • Updated input 'nixpkgs': 'github:NixOS/nixpkgs/5672bc9dbf9d88246ddab5ac454e82318d094bb8' (2024-04-16) → 'github:NixOS/nixpkgs/5c24cf2f0a12ad855f444c30b2421d044120c66f' (2024-04-19) • Updated input 'nixpkgs-stable': 'github:NixOS/nixpkgs/53a2c32bc66f5ae41a28d7a9a49d321172af621e' (2024-04-15) → 'github:NixOS/nixpkgs/e402c3eb6d88384ca6c52ef1c53e61bdc9b84ddd' (2024-04-17) • Updated input 'nixpkgs-unstable-small': 'github:NixOS/nixpkgs/2948912cdede361087742c672ff921cd80ac9ec2' (2024-04-18) → 'github:NixOS/nixpkgs/c0f9060ec3937d5a7cf3ce6c698e14d989b453e5' (2024-04-20) --- flake.lock | 42 +++++++++++++++++++++--------------------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/flake.lock b/flake.lock index 02f5c33..e07d5b8 100644 --- a/flake.lock +++ b/flake.lock @@ -47,11 +47,11 @@ "rust-analyzer-src": "rust-analyzer-src" }, "locked": { - "lastModified": 1713421495, - "narHash": "sha256-5vVF9W1tJT+WdfpWAEG76KywktKDAW/71mVmNHEHjac=", + "lastModified": 1713594079, + "narHash": "sha256-lYWehi0cqBdsL1W4xeUnUcXw4U4aBKKCmmQrR01yqE0=", "owner": "nix-community", "repo": "fenix", - "rev": "fd47b1f9404fae02a4f38bd9f4b12bad7833c96b", + "rev": "3247290e1bba55878a2c62d43894d0309d29c918", "type": "github" }, "original": { @@ -209,11 +209,11 @@ ] }, "locked": { - "lastModified": 1713391096, - "narHash": "sha256-5xkzsy+ILgQlmvDDipL5xqAehnjWBenAQXV4/NLg2dE=", + "lastModified": 1713566308, + "narHash": "sha256-7Y91t8pheIzjJveUMAPyeh5NOq5F49Nq4Hl2532QpJs=", "owner": "nix-community", "repo": "home-manager", - "rev": "f46814ec7cbef9c2aef18ca1cbe89f2bb1e8c394", + "rev": "057117a401a34259c9615ce62218aea7afdee4d3", "type": "github" }, "original": { @@ -364,11 +364,11 @@ }, "nixpkgs-stable": { "locked": { - "lastModified": 1713145326, - "narHash": "sha256-m7+IWM6mkWOg22EC5kRUFCycXsXLSU7hWmHdmBfmC3s=", + "lastModified": 1713344939, + "narHash": "sha256-jpHkAt0sG2/J7ueKnG7VvLLkBYUMQbXQ2L8OBpVG53s=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "53a2c32bc66f5ae41a28d7a9a49d321172af621e", + "rev": "e402c3eb6d88384ca6c52ef1c53e61bdc9b84ddd", "type": "github" }, "original": { @@ -379,11 +379,11 @@ }, "nixpkgs-unstable-small": { "locked": { - "lastModified": 1713411820, - "narHash": "sha256-/hIPZzrEQGTx/urT91JoVPM6gJM1IjDYVBroC7MlRS4=", + "lastModified": 1713597487, + "narHash": "sha256-bD+FqUZidTjHblGjK+2LpIaHBmo1THF1HW3o4ZBqmrw=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "2948912cdede361087742c672ff921cd80ac9ec2", + "rev": "c0f9060ec3937d5a7cf3ce6c698e14d989b453e5", "type": "github" }, "original": { @@ -452,11 +452,11 @@ }, "nixpkgs_4": { "locked": { - "lastModified": 1713248628, - "narHash": "sha256-NLznXB5AOnniUtZsyy/aPWOk8ussTuePp2acb9U+ISA=", + "lastModified": 1713537308, + "narHash": "sha256-XtTSSIB2DA6tOv+l0FhvfDMiyCmhoRbNB+0SeInZkbk=", "owner": "nixos", "repo": "nixpkgs", - "rev": "5672bc9dbf9d88246ddab5ac454e82318d094bb8", + "rev": "5c24cf2f0a12ad855f444c30b2421d044120c66f", "type": "github" }, "original": { @@ -530,11 +530,11 @@ }, "nixpkgs_9": { "locked": { - "lastModified": 1713248628, - "narHash": "sha256-NLznXB5AOnniUtZsyy/aPWOk8ussTuePp2acb9U+ISA=", + "lastModified": 1713537308, + "narHash": "sha256-XtTSSIB2DA6tOv+l0FhvfDMiyCmhoRbNB+0SeInZkbk=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "5672bc9dbf9d88246ddab5ac454e82318d094bb8", + "rev": "5c24cf2f0a12ad855f444c30b2421d044120c66f", "type": "github" }, "original": { @@ -563,11 +563,11 @@ "rust-analyzer-src": { "flake": false, "locked": { - "lastModified": 1713373173, - "narHash": "sha256-octd9BFY9G/Gbr4KfwK4itZp4Lx+qvJeRRcYnN+dEH8=", + "lastModified": 1713559870, + "narHash": "sha256-HsVa+QM2vMra80OjnjH7JhdvLeJuMdR4sxBNHJveMe4=", "owner": "rust-lang", "repo": "rust-analyzer", - "rev": "46702ffc1a02a2ac153f1d1ce619ec917af8f3a6", + "rev": "c83d8cf5844fff3d6e243ab408669222059af1c6", "type": "github" }, "original": { From 78bb79e258649f3d6079c34073e79b6a06c8452d Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Sat, 20 Apr 2024 20:07:07 +0200 Subject: [PATCH 060/301] jrnl: add entry listing --- Cargo.lock | 319 ++++++++++++++++++------ Cargo.toml | 1 + flake.lock | 507 ++------------------------------------ flake.nix | 51 ++-- justfile | 2 +- programs/jrnl/Cargo.lock | 207 +++++++++++----- programs/jrnl/Cargo.toml | 5 +- programs/jrnl/src/main.rs | 90 +++++-- 8 files changed, 524 insertions(+), 658 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 733bb36..9415901 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -29,6 +29,21 @@ version = "0.2.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5c6cb57a04249c6480766f7f7cef5467412af1490f8d1e243141daddada3264f" +[[package]] +name = "android-tzdata" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" + +[[package]] +name = "android_system_properties" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" +dependencies = [ + "libc", +] + [[package]] name = "anstream" version = "0.6.13" @@ -77,6 +92,17 @@ dependencies = [ "windows-sys 0.52.0", ] +[[package]] +name = "atty" +version = "0.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8" +dependencies = [ + "hermit-abi", + "libc", + "winapi 0.3.9", +] + [[package]] name = "autocfg" version = "1.2.0" @@ -95,6 +121,12 @@ version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cf4b9d6a944f767f8e5e0db018570623c85f3d925ac718db4e06d0187adb21c1" +[[package]] +name = "bumpalo" +version = "3.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" + [[package]] name = "cassowary" version = "0.3.0" @@ -110,12 +142,32 @@ dependencies = [ "rustversion", ] +[[package]] +name = "cc" +version = "1.0.95" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d32a725bc159af97c3e629873bb9f88fb8cf8a4867175f76dc987815ea07c83b" + [[package]] name = "cfg-if" version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" +[[package]] +name = "chrono" +version = "0.4.38" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a21f936df1771bf62b77f047b726c4625ff2e8aa607c01ec06e5a05bd8463401" +dependencies = [ + "android-tzdata", + "iana-time-zone", + "js-sys", + "num-traits", + "wasm-bindgen", + "windows-targets 0.52.5", +] + [[package]] name = "clap" version = "4.5.4" @@ -175,6 +227,12 @@ dependencies = [ "static_assertions", ] +[[package]] +name = "core-foundation-sys" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f" + [[package]] name = "crossterm" version = "0.27.0" @@ -188,7 +246,7 @@ dependencies = [ "parking_lot", "signal-hook", "signal-hook-mio", - "winapi", + "winapi 0.3.9", ] [[package]] @@ -197,16 +255,7 @@ version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "acdd7c62a3665c7f6830a51635d9ac9b23ed385797f70a83bb8bafe9c572ab2b" dependencies = [ - "winapi", -] - -[[package]] -name = "deranged" -version = "0.3.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4" -dependencies = [ - "powerfmt", + "winapi 0.3.9", ] [[package]] @@ -287,6 +336,38 @@ version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" +[[package]] +name = "hermit-abi" +version = "0.1.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33" +dependencies = [ + "libc", +] + +[[package]] +name = "iana-time-zone" +version = "0.1.60" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7ffbb5a1b541ea2561f8c41c087286cc091e21e556a4f09a8f6cbf17b69b141" +dependencies = [ + "android_system_properties", + "core-foundation-sys", + "iana-time-zone-haiku", + "js-sys", + "wasm-bindgen", + "windows-core", +] + +[[package]] +name = "iana-time-zone-haiku" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" +dependencies = [ + "cc", +] + [[package]] name = "indexmap" version = "2.2.6" @@ -322,15 +403,35 @@ checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" name = "jrnl" version = "0.1.0" dependencies = [ + "chrono", "clap", "dirs", "ego-tree", "indexmap", "markdown", + "owo-colors", "petgraph", "ratatui", - "time", - "time-macros", + "termsize", +] + +[[package]] +name = "js-sys" +version = "0.3.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29c15563dc2726973df627357ce0c9ddddbea194836909d655df6a75d2cf296d" +dependencies = [ + "wasm-bindgen", +] + +[[package]] +name = "kernel32-sys" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d" +dependencies = [ + "winapi 0.2.8", + "winapi-build", ] [[package]] @@ -410,10 +511,19 @@ dependencies = [ ] [[package]] -name = "num-conv" +name = "num-traits" +version = "0.2.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da0df0e5185db44f69b44f26786fe401b6c293d1907744beaa7fa62b2e5a517a" +dependencies = [ + "autocfg", +] + +[[package]] +name = "numtoa" version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" +checksum = "b8f8bdf33df195859076e54ab11ee78a1b208382d3a26ec40d142ffc1ecc49ef" [[package]] name = "once_cell" @@ -427,6 +537,12 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" +[[package]] +name = "owo-colors" +version = "4.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "caff54706df99d2a78a5a4e3455ff45448d81ef1bb63c22cd14052ca0e993a3f" + [[package]] name = "parking_lot" version = "0.12.1" @@ -445,7 +561,7 @@ checksum = "4c42a9226546d68acdd9c0a280d17ce19bfe27a46bf68784e4066115788d008e" dependencies = [ "cfg-if", "libc", - "redox_syscall", + "redox_syscall 0.4.1", "smallvec", "windows-targets 0.48.5", ] @@ -472,12 +588,6 @@ version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d15b6607fa632996eb8a17c9041cb6071cb75ac057abd45dece578723ea8c7c0" -[[package]] -name = "powerfmt" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" - [[package]] name = "proc-macro2" version = "1.0.81" @@ -516,6 +626,15 @@ dependencies = [ "unicode-width", ] +[[package]] +name = "redox_syscall" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a" +dependencies = [ + "bitflags 1.3.2", +] + [[package]] name = "redox_syscall" version = "0.4.1" @@ -525,6 +644,12 @@ dependencies = [ "bitflags 1.3.2", ] +[[package]] +name = "redox_termios" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "20145670ba436b55d91fc92d25e71160fbfbdd57831631c8d7d36377a476f1cb" + [[package]] name = "redox_users" version = "0.4.5" @@ -583,26 +708,6 @@ version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" -[[package]] -name = "serde" -version = "1.0.198" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9846a40c979031340571da2545a4e5b7c4163bdae79b301d5f86d03979451fcc" -dependencies = [ - "serde_derive", -] - -[[package]] -name = "serde_derive" -version = "1.0.198" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e88edab869b01783ba905e7d0153f9fc1a6505a96e4ad3018011eedb838566d9" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - [[package]] name = "signal-hook" version = "0.3.17" @@ -694,6 +799,31 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "termion" +version = "1.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "077185e2eac69c3f8379a4298e1e07cd36beb962290d4a51199acf0fdc10607e" +dependencies = [ + "libc", + "numtoa", + "redox_syscall 0.2.16", + "redox_termios", +] + +[[package]] +name = "termsize" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e86d824a8e90f342ad3ef4bd51ef7119a9b681b0cc9f8ee7b2852f02ccd2517" +dependencies = [ + "atty", + "kernel32-sys", + "libc", + "termion", + "winapi 0.2.8", +] + [[package]] name = "thiserror" version = "1.0.58" @@ -714,36 +844,6 @@ dependencies = [ "syn", ] -[[package]] -name = "time" -version = "0.3.36" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5dfd88e563464686c916c7e46e623e520ddc6d79fa6641390f2e3fa86e83e885" -dependencies = [ - "deranged", - "num-conv", - "powerfmt", - "serde", - "time-core", - "time-macros", -] - -[[package]] -name = "time-core" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" - -[[package]] -name = "time-macros" -version = "0.2.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f252a68540fde3a3877aeea552b832b40ab9a69e318efd078774a01ddee1ccf" -dependencies = [ - "num-conv", - "time-core", -] - [[package]] name = "unicode-ident" version = "1.0.12" @@ -780,6 +880,66 @@ version = "0.11.0+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" +[[package]] +name = "wasm-bindgen" +version = "0.2.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4be2531df63900aeb2bca0daaaddec08491ee64ceecbee5076636a3b026795a8" +dependencies = [ + "cfg-if", + "wasm-bindgen-macro", +] + +[[package]] +name = "wasm-bindgen-backend" +version = "0.2.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "614d787b966d3989fa7bb98a654e369c762374fd3213d212cfc0251257e747da" +dependencies = [ + "bumpalo", + "log", + "once_cell", + "proc-macro2", + "quote", + "syn", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1f8823de937b71b9460c0c34e25f3da88250760bec0ebac694b49997550d726" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "wasm-bindgen-backend", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af190c94f2773fdb3729c55b007a722abb5384da03bc0986df4c289bf5567e96" + +[[package]] +name = "winapi" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a" + [[package]] name = "winapi" version = "0.3.9" @@ -790,6 +950,12 @@ dependencies = [ "winapi-x86_64-pc-windows-gnu", ] +[[package]] +name = "winapi-build" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc" + [[package]] name = "winapi-i686-pc-windows-gnu" version = "0.4.0" @@ -802,6 +968,15 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" +[[package]] +name = "windows-core" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" +dependencies = [ + "windows-targets 0.52.5", +] + [[package]] name = "windows-sys" version = "0.48.0" diff --git a/Cargo.toml b/Cargo.toml index 814805f..e35ff11 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,4 +1,5 @@ [workspace] +resolver = "2" members = [ "programs/jrnl" ] diff --git a/flake.lock b/flake.lock index e07d5b8..9e32b5c 100644 --- a/flake.lock +++ b/flake.lock @@ -1,49 +1,30 @@ { "nodes": { - "arion": { + "crane": { "inputs": { - "flake-parts": "flake-parts", - "haskell-flake": "haskell-flake", - "hercules-ci-effects": "hercules-ci-effects", - "nixpkgs": "nixpkgs" + "nixpkgs": [ + "nixpkgs" + ] }, "locked": { - "lastModified": 1712285456, - "narHash": "sha256-A4EBTlFfeosNaO8zpN7rlWTgF9AHy755NxKBvhJ1b0w=", - "owner": "hercules-ci", - "repo": "arion", - "rev": "1886d25075aaf24c8bc687b3d2a87ae1f5d154ec", + "lastModified": 1713459701, + "narHash": "sha256-LjQ11ASxnv/FXfb8QnrIyMkyqSqcBPX+lFK8gu0jSQE=", + "owner": "ipetkov", + "repo": "crane", + "rev": "45ea0059fb325132fdc3c39faffb0941d25d08d3", "type": "github" }, "original": { - "owner": "hercules-ci", - "repo": "arion", + "owner": "ipetkov", + "repo": "crane", "type": "github" } }, - "easymacros": { - "inputs": { - "flake-utils": "flake-utils", - "naersk": "naersk", - "nixpkgs": "nixpkgs_3" - }, - "locked": { - "lastModified": 1662552013, - "narHash": "sha256-ENoDCKs6gKcGYa06LhCVhro0FVntcy5GBvShS+TPvMY=", - "ref": "refs/heads/main", - "rev": "43405b3bcf786513adc6534ed0e6618c458ba2cb", - "revCount": 38, - "type": "git", - "url": "https://gitlab.com/obsidianical/easymacros.git" - }, - "original": { - "type": "git", - "url": "https://gitlab.com/obsidianical/easymacros.git" - } - }, "fenix": { "inputs": { - "nixpkgs": "nixpkgs_4", + "nixpkgs": [ + "nixpkgs" + ], "rust-analyzer-src": "rust-analyzer-src" }, "locked": { @@ -60,148 +41,6 @@ "type": "github" } }, - "flake-parts": { - "inputs": { - "nixpkgs-lib": [ - "arion", - "nixpkgs" - ] - }, - "locked": { - "lastModified": 1712014858, - "narHash": "sha256-sB4SWl2lX95bExY2gMFG5HIzvva5AVMJd4Igm+GpZNw=", - "owner": "hercules-ci", - "repo": "flake-parts", - "rev": "9126214d0a59633752a136528f5f3b9aa8565b7d", - "type": "github" - }, - "original": { - "owner": "hercules-ci", - "repo": "flake-parts", - "type": "github" - } - }, - "flake-parts_2": { - "inputs": { - "nixpkgs-lib": [ - "arion", - "hercules-ci-effects", - "nixpkgs" - ] - }, - "locked": { - "lastModified": 1709336216, - "narHash": "sha256-Dt/wOWeW6Sqm11Yh+2+t0dfEWxoMxGBvv3JpIocFl9E=", - "owner": "hercules-ci", - "repo": "flake-parts", - "rev": "f7b3c975cf067e56e7cda6cb098ebe3fb4d74ca2", - "type": "github" - }, - "original": { - "id": "flake-parts", - "type": "indirect" - } - }, - "flake-utils": { - "locked": { - "lastModified": 1656065134, - "narHash": "sha256-oc6E6ByIw3oJaIyc67maaFcnjYOz1mMcOtHxbEf9NwQ=", - "owner": "numtide", - "repo": "flake-utils", - "rev": "bee6a7250dd1b01844a2de7e02e4df7d8a0a206c", - "type": "github" - }, - "original": { - "owner": "numtide", - "repo": "flake-utils", - "type": "github" - } - }, - "flake-utils_2": { - "locked": { - "lastModified": 1678901627, - "narHash": "sha256-U02riOqrKKzwjsxc/400XnElV+UtPUQWpANPlyazjH0=", - "owner": "numtide", - "repo": "flake-utils", - "rev": "93a2b84fc4b70d9e089d029deacc3583435c2ed6", - "type": "github" - }, - "original": { - "id": "flake-utils", - "type": "indirect" - } - }, - "flake-utils_3": { - "locked": { - "lastModified": 1667395993, - "narHash": "sha256-nuEHfE/LcWyuSWnS8t12N1wc105Qtau+/OdUAjtQ0rA=", - "owner": "numtide", - "repo": "flake-utils", - "rev": "5aed5285a952e0b949eb3ba02c12fa4fcfef535f", - "type": "github" - }, - "original": { - "id": "flake-utils", - "type": "indirect" - } - }, - "gumseite": { - "inputs": { - "flake-utils": "flake-utils_2", - "nixpkgs": "nixpkgs_5" - }, - "locked": { - "lastModified": 1680175611, - "narHash": "sha256-0VevgW7qjE3rDSudFr/XIQrMmPowDgLO9jkM4AFkR/o=", - "ref": "refs/heads/master", - "rev": "57f43b774151e34bbf3de5f159924aca93750561", - "revCount": 2, - "type": "git", - "url": "https://gitlab.com/schrottkatze/gum-schulsachen.git" - }, - "original": { - "type": "git", - "url": "https://gitlab.com/schrottkatze/gum-schulsachen.git" - } - }, - "haskell-flake": { - "locked": { - "lastModified": 1675296942, - "narHash": "sha256-u1X1sblozi5qYEcLp1hxcyo8FfDHnRUVX3dJ/tW19jY=", - "owner": "srid", - "repo": "haskell-flake", - "rev": "c2cafce9d57bfca41794dc3b99c593155006c71e", - "type": "github" - }, - "original": { - "owner": "srid", - "ref": "0.1.0", - "repo": "haskell-flake", - "type": "github" - } - }, - "hercules-ci-effects": { - "inputs": { - "flake-parts": "flake-parts_2", - "nixpkgs": [ - "arion", - "nixpkgs" - ] - }, - "locked": { - "lastModified": 1710478346, - "narHash": "sha256-Xjf8BdnQG0tLhPMlqQdwCIjOp7Teox0DP3N/jjyiGM4=", - "owner": "hercules-ci", - "repo": "hercules-ci-effects", - "rev": "64e7763d72c1e4c1e5e6472640615b6ae2d40fbf", - "type": "github" - }, - "original": { - "owner": "hercules-ci", - "repo": "hercules-ci-effects", - "type": "github" - } - }, "home-manager": { "inputs": { "nixpkgs": [ @@ -222,26 +61,6 @@ "type": "github" } }, - "karton": { - "inputs": { - "naersk": "naersk_2", - "nixpkgs": "nixpkgs_7", - "utils": "utils" - }, - "locked": { - "lastModified": 1683146576, - "narHash": "sha256-ZaXE/mmVWgZkfnlY56PFuuCMDyUhNtkKuLzkle6Lg8s=", - "ref": "refs/heads/master", - "rev": "5002f11bf360e4508fc73c28fa0aa0f80bf0713d", - "revCount": 188, - "type": "git", - "url": "https://gitlab.com/obsidianical/microbin.git" - }, - "original": { - "type": "git", - "url": "https://gitlab.com/obsidianical/microbin.git" - } - }, "mac-brcm-fw": { "flake": false, "locked": { @@ -255,81 +74,6 @@ "type": "path" } }, - "meowsite": { - "inputs": { - "flake-utils": "flake-utils_3", - "nixpkgs": "nixpkgs_8" - }, - "locked": { - "lastModified": 1678920998, - "narHash": "sha256-YM7MdYYoL/Wgmg8nmMVnAm33WwzdA2JFwMHKfOxNBXs=", - "ref": "refs/heads/master", - "rev": "f40a32b22bc96b07cb78fb5751cf92d5f30b1c24", - "revCount": 11, - "type": "git", - "url": "https://gitlab.com/obsidianical/meowsite.git" - }, - "original": { - "type": "git", - "url": "https://gitlab.com/obsidianical/meowsite.git" - } - }, - "naersk": { - "inputs": { - "nixpkgs": "nixpkgs_2" - }, - "locked": { - "lastModified": 1655042882, - "narHash": "sha256-9BX8Fuez5YJlN7cdPO63InoyBy7dm3VlJkkmTt6fS1A=", - "owner": "nix-community", - "repo": "naersk", - "rev": "cddffb5aa211f50c4b8750adbec0bbbdfb26bb9f", - "type": "github" - }, - "original": { - "owner": "nix-community", - "repo": "naersk", - "type": "github" - } - }, - "naersk_2": { - "inputs": { - "nixpkgs": "nixpkgs_6" - }, - "locked": { - "lastModified": 1671096816, - "narHash": "sha256-ezQCsNgmpUHdZANDCILm3RvtO1xH8uujk/+EqNvzIOg=", - "owner": "nix-community", - "repo": "naersk", - "rev": "d998160d6a076cfe8f9741e56aeec7e267e3e114", - "type": "github" - }, - "original": { - "owner": "nix-community", - "ref": "master", - "repo": "naersk", - "type": "github" - } - }, - "naersk_3": { - "inputs": { - "nixpkgs": "nixpkgs_10" - }, - "locked": { - "lastModified": 1671096816, - "narHash": "sha256-ezQCsNgmpUHdZANDCILm3RvtO1xH8uujk/+EqNvzIOg=", - "owner": "nix-community", - "repo": "naersk", - "rev": "d998160d6a076cfe8f9741e56aeec7e267e3e114", - "type": "github" - }, - "original": { - "owner": "nix-community", - "ref": "master", - "repo": "naersk", - "type": "github" - } - }, "nixos-hardware": { "locked": { "lastModified": 1687903496, @@ -348,18 +92,17 @@ }, "nixpkgs": { "locked": { - "lastModified": 1712163089, - "narHash": "sha256-Um+8kTIrC19vD4/lUCN9/cU9kcOsD1O1m+axJqQPyMM=", + "lastModified": 1713537308, + "narHash": "sha256-XtTSSIB2DA6tOv+l0FhvfDMiyCmhoRbNB+0SeInZkbk=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "fd281bd6b7d3e32ddfa399853946f782553163b5", + "rev": "5c24cf2f0a12ad855f444c30b2421d044120c66f", "type": "github" }, "original": { - "owner": "NixOS", + "id": "nixpkgs", "ref": "nixos-unstable", - "repo": "nixpkgs", - "type": "github" + "type": "indirect" } }, "nixpkgs-stable": { @@ -392,172 +135,16 @@ "type": "indirect" } }, - "nixpkgs_10": { - "locked": { - "lastModified": 1675614288, - "narHash": "sha256-i3Rc/ENnz62BcrSloeVmAyPicEh4WsrEEYR+INs9TYw=", - "owner": "NixOS", - "repo": "nixpkgs", - "rev": "d25de6654a34d99dceb02e71e6db516b3b545be6", - "type": "github" - }, - "original": { - "id": "nixpkgs", - "type": "indirect" - } - }, - "nixpkgs_11": { - "locked": { - "lastModified": 1675614288, - "narHash": "sha256-i3Rc/ENnz62BcrSloeVmAyPicEh4WsrEEYR+INs9TYw=", - "owner": "NixOS", - "repo": "nixpkgs", - "rev": "d25de6654a34d99dceb02e71e6db516b3b545be6", - "type": "github" - }, - "original": { - "owner": "NixOS", - "ref": "nixpkgs-unstable", - "repo": "nixpkgs", - "type": "github" - } - }, - "nixpkgs_2": { - "locked": { - "lastModified": 1656755932, - "narHash": "sha256-TGThfOxr+HjFK464+UoUE6rClp2cwxjiKvHcBVdIGSQ=", - "owner": "NixOS", - "repo": "nixpkgs", - "rev": "660ac43ff9ab1f12e28bfb31d4719795777fe152", - "type": "github" - }, - "original": { - "id": "nixpkgs", - "type": "indirect" - } - }, - "nixpkgs_3": { - "locked": { - "lastModified": 1656755932, - "narHash": "sha256-TGThfOxr+HjFK464+UoUE6rClp2cwxjiKvHcBVdIGSQ=", - "owner": "NixOS", - "repo": "nixpkgs", - "rev": "660ac43ff9ab1f12e28bfb31d4719795777fe152", - "type": "github" - }, - "original": { - "id": "nixpkgs", - "type": "indirect" - } - }, - "nixpkgs_4": { - "locked": { - "lastModified": 1713537308, - "narHash": "sha256-XtTSSIB2DA6tOv+l0FhvfDMiyCmhoRbNB+0SeInZkbk=", - "owner": "nixos", - "repo": "nixpkgs", - "rev": "5c24cf2f0a12ad855f444c30b2421d044120c66f", - "type": "github" - }, - "original": { - "owner": "nixos", - "ref": "nixos-unstable", - "repo": "nixpkgs", - "type": "github" - } - }, - "nixpkgs_5": { - "locked": { - "lastModified": 1679966490, - "narHash": "sha256-k0jV+y1jawE6w4ZvKgXDNg4+O9NNtcaWwzw8gufv0b4=", - "owner": "NixOS", - "repo": "nixpkgs", - "rev": "5b7cd5c39befee629be284970415b6eb3b0ff000", - "type": "github" - }, - "original": { - "owner": "NixOS", - "ref": "nixos-22.11", - "repo": "nixpkgs", - "type": "github" - } - }, - "nixpkgs_6": { - "locked": { - "lastModified": 1677852945, - "narHash": "sha256-liiVJjkBTuBTAkRW3hrI8MbPD2ImYzwUpa7kvteiKhM=", - "owner": "NixOS", - "repo": "nixpkgs", - "rev": "f5ffd5787786dde3a8bf648c7a1b5f78c4e01abb", - "type": "github" - }, - "original": { - "id": "nixpkgs", - "type": "indirect" - } - }, - "nixpkgs_7": { - "locked": { - "lastModified": 1677852945, - "narHash": "sha256-liiVJjkBTuBTAkRW3hrI8MbPD2ImYzwUpa7kvteiKhM=", - "owner": "NixOS", - "repo": "nixpkgs", - "rev": "f5ffd5787786dde3a8bf648c7a1b5f78c4e01abb", - "type": "github" - }, - "original": { - "owner": "NixOS", - "ref": "nixpkgs-unstable", - "repo": "nixpkgs", - "type": "github" - } - }, - "nixpkgs_8": { - "locked": { - "lastModified": 1674407282, - "narHash": "sha256-2qwc8mrPINSFdWffPK+ji6nQ9aGnnZyHSItVcYDZDlk=", - "owner": "NixOS", - "repo": "nixpkgs", - "rev": "ab1254087f4cdf4af74b552d7fc95175d9bdbb49", - "type": "github" - }, - "original": { - "owner": "NixOS", - "ref": "nixos-22.11", - "repo": "nixpkgs", - "type": "github" - } - }, - "nixpkgs_9": { - "locked": { - "lastModified": 1713537308, - "narHash": "sha256-XtTSSIB2DA6tOv+l0FhvfDMiyCmhoRbNB+0SeInZkbk=", - "owner": "NixOS", - "repo": "nixpkgs", - "rev": "5c24cf2f0a12ad855f444c30b2421d044120c66f", - "type": "github" - }, - "original": { - "id": "nixpkgs", - "ref": "nixos-unstable", - "type": "indirect" - } - }, "root": { "inputs": { - "arion": "arion", - "easymacros": "easymacros", + "crane": "crane", "fenix": "fenix", - "gumseite": "gumseite", "home-manager": "home-manager", - "karton": "karton", "mac-brcm-fw": "mac-brcm-fw", - "meowsite": "meowsite", "nixos-hardware": "nixos-hardware", - "nixpkgs": "nixpkgs_9", + "nixpkgs": "nixpkgs", "nixpkgs-stable": "nixpkgs-stable", - "nixpkgs-unstable-small": "nixpkgs-unstable-small", - "wordsofgod": "wordsofgod" + "nixpkgs-unstable-small": "nixpkgs-unstable-small" } }, "rust-analyzer-src": { @@ -576,56 +163,6 @@ "repo": "rust-analyzer", "type": "github" } - }, - "utils": { - "locked": { - "lastModified": 1676283394, - "narHash": "sha256-XX2f9c3iySLCw54rJ/CZs+ZK6IQy7GXNY4nSOyu2QG4=", - "owner": "numtide", - "repo": "flake-utils", - "rev": "3db36a8b464d0c4532ba1c7dda728f4576d6d073", - "type": "github" - }, - "original": { - "owner": "numtide", - "repo": "flake-utils", - "type": "github" - } - }, - "utils_2": { - "locked": { - "lastModified": 1667395993, - "narHash": "sha256-nuEHfE/LcWyuSWnS8t12N1wc105Qtau+/OdUAjtQ0rA=", - "owner": "numtide", - "repo": "flake-utils", - "rev": "5aed5285a952e0b949eb3ba02c12fa4fcfef535f", - "type": "github" - }, - "original": { - "owner": "numtide", - "repo": "flake-utils", - "type": "github" - } - }, - "wordsofgod": { - "inputs": { - "naersk": "naersk_3", - "nixpkgs": "nixpkgs_11", - "utils": "utils_2" - }, - "locked": { - "lastModified": 1675936524, - "narHash": "sha256-cr6lknWz+2N4mq6csfdYLUBNTxB2MbaEGH8yQyk3XbA=", - "ref": "refs/heads/master", - "rev": "93c03cbe6f7bac22c7c5023d4bcba3af837ce43b", - "revCount": 8, - "type": "git", - "url": "https://gitlab.com/obsidianical/wordsofgod.git" - }, - "original": { - "type": "git", - "url": "https://gitlab.com/obsidianical/wordsofgod.git" - } } }, "root": "root", diff --git a/flake.nix b/flake.nix index c24ac67..caba18a 100644 --- a/flake.nix +++ b/flake.nix @@ -14,14 +14,17 @@ url = "path:/home/jade/nix-configs/mac-brcm-fw"; flake = false; }; - #mms.url = "github:mkaito/nixos-modded-minecraft-servers"; - easymacros.url = "git+https://gitlab.com/obsidianical/easymacros.git"; - meowsite.url = "git+https://gitlab.com/obsidianical/meowsite.git"; - wordsofgod.url = "git+https://gitlab.com/obsidianical/wordsofgod.git"; - karton.url = "git+https://gitlab.com/obsidianical/microbin.git"; - arion.url = "github:hercules-ci/arion"; - gumseite.url = "git+https://gitlab.com/schrottkatze/gum-schulsachen.git"; - fenix.url = "github:nix-community/fenix"; + crane = { + url = "github:ipetkov/crane"; + inputs = { + flake-utils.follows = "flake-utils"; + nixpkgs.follows = "nixpkgs"; + }; + }; + fenix = { + url = "github:nix-community/fenix"; + inputs.nixpkgs.follows = "nixpkgs"; + }; }; outputs = { @@ -33,27 +36,32 @@ nixos-hardware, mac-brcm-fw, fenix, + crane, ... } @ inputs: let system = "x86_64-linux"; pkgs = nixpkgs.legacyPackages.${system}; pkgs-stable = nixpkgs-stable.legacyPackages.${system}; pkgs-unstable-small = nixpkgs-unstable-small.legacyPackages.${system}; + crane-lib = crane.lib.${system}; rs-toolchain = with fenix.packages.${system}; combine [ default.toolchain rust-analyzer ]; - rs-platform = pkgs.makeRustPlatform { - cargo = rs-toolchain; - rustc = rs-toolchain; - }; + # rs-platform = pkgs.makeRustPlatform { + # cargo = rs-toolchain; + # rustc = rs-toolchain; + # }; rs-programs = final: prev: { - s10e-jrnl = rs-platform.buildRustPackage { - pname = "jrnl"; - version = "0.0.1"; - src = ./programs/jrnl; - cargoLock.lockFile = ./programs/jrnl/Cargo.lock; + # s10e-jrnl = rs-platform.buildRustPackage { + # pname = "jrnl"; + # version = "0.0.1"; + # src = ./programs/jrnl; + # cargoLock.lockFile = ./programs/jrnl/Cargo.lock; + # }; + s10e-jrnl = crane-lib.buildPackage { + src = crane-lib.cleanCargoSource (crane-lib.path ./.); }; }; in { @@ -83,6 +91,9 @@ { home-manager.useGlobalPkgs = true; home-manager.useUserPackages = true; + home-manager.extraSpecialArgs = { + inherit pkgs-unstable-small pkgs-stable; + }; home-manager.users.jade = { nixosConfig, pkgs, @@ -105,6 +116,9 @@ { home-manager.useGlobalPkgs = true; home-manager.useUserPackages = true; + home-manager.extraSpecialArgs = { + inherit pkgs-unstable-small pkgs-stable; + }; home-manager.users.jade = { nixosConfig, pkgs, @@ -128,6 +142,9 @@ { home-manager.useGlobalPkgs = true; home-manager.useUserPackages = true; + home-manager.extraSpecialArgs = { + inherit pkgs-unstable-small pkgs-stable; + }; home-manager.users.jade = { nixosConfig, pkgs, diff --git a/justfile b/justfile index 0c3044a..199a787 100644 --- a/justfile +++ b/justfile @@ -1,4 +1,4 @@ -upgrade: update build +upgrade: build test: sudo nixos-rebuild test --flake . --impure diff --git a/programs/jrnl/Cargo.lock b/programs/jrnl/Cargo.lock index e6623b0..b061ebc 100644 --- a/programs/jrnl/Cargo.lock +++ b/programs/jrnl/Cargo.lock @@ -29,6 +29,21 @@ version = "0.2.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5c6cb57a04249c6480766f7f7cef5467412af1490f8d1e243141daddada3264f" +[[package]] +name = "android-tzdata" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" + +[[package]] +name = "android_system_properties" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" +dependencies = [ + "libc", +] + [[package]] name = "anstream" version = "0.6.13" @@ -95,6 +110,12 @@ version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cf4b9d6a944f767f8e5e0db018570623c85f3d925ac718db4e06d0187adb21c1" +[[package]] +name = "bumpalo" +version = "3.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" + [[package]] name = "cassowary" version = "0.3.0" @@ -110,12 +131,32 @@ dependencies = [ "rustversion", ] +[[package]] +name = "cc" +version = "1.0.95" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d32a725bc159af97c3e629873bb9f88fb8cf8a4867175f76dc987815ea07c83b" + [[package]] name = "cfg-if" version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" +[[package]] +name = "chrono" +version = "0.4.38" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a21f936df1771bf62b77f047b726c4625ff2e8aa607c01ec06e5a05bd8463401" +dependencies = [ + "android-tzdata", + "iana-time-zone", + "js-sys", + "num-traits", + "wasm-bindgen", + "windows-targets 0.52.5", +] + [[package]] name = "clap" version = "4.5.4" @@ -175,6 +216,12 @@ dependencies = [ "static_assertions", ] +[[package]] +name = "core-foundation-sys" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f" + [[package]] name = "crossterm" version = "0.27.0" @@ -200,15 +247,6 @@ dependencies = [ "winapi", ] -[[package]] -name = "deranged" -version = "0.3.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4" -dependencies = [ - "powerfmt", -] - [[package]] name = "dirs" version = "5.0.1" @@ -287,6 +325,29 @@ version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" +[[package]] +name = "iana-time-zone" +version = "0.1.60" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7ffbb5a1b541ea2561f8c41c087286cc091e21e556a4f09a8f6cbf17b69b141" +dependencies = [ + "android_system_properties", + "core-foundation-sys", + "iana-time-zone-haiku", + "js-sys", + "wasm-bindgen", + "windows-core", +] + +[[package]] +name = "iana-time-zone-haiku" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" +dependencies = [ + "cc", +] + [[package]] name = "indexmap" version = "2.2.6" @@ -322,6 +383,7 @@ checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" name = "jrnl" version = "0.1.0" dependencies = [ + "chrono", "clap", "dirs", "ego-tree", @@ -329,7 +391,15 @@ dependencies = [ "markdown", "petgraph", "ratatui", - "time", +] + +[[package]] +name = "js-sys" +version = "0.3.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29c15563dc2726973df627357ce0c9ddddbea194836909d655df6a75d2cf296d" +dependencies = [ + "wasm-bindgen", ] [[package]] @@ -409,10 +479,13 @@ dependencies = [ ] [[package]] -name = "num-conv" -version = "0.1.0" +name = "num-traits" +version = "0.2.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" +checksum = "da0df0e5185db44f69b44f26786fe401b6c293d1907744beaa7fa62b2e5a517a" +dependencies = [ + "autocfg", +] [[package]] name = "once_cell" @@ -471,12 +544,6 @@ version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d15b6607fa632996eb8a17c9041cb6071cb75ac057abd45dece578723ea8c7c0" -[[package]] -name = "powerfmt" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" - [[package]] name = "proc-macro2" version = "1.0.80" @@ -582,26 +649,6 @@ version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" -[[package]] -name = "serde" -version = "1.0.198" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9846a40c979031340571da2545a4e5b7c4163bdae79b301d5f86d03979451fcc" -dependencies = [ - "serde_derive", -] - -[[package]] -name = "serde_derive" -version = "1.0.198" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e88edab869b01783ba905e7d0153f9fc1a6505a96e4ad3018011eedb838566d9" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - [[package]] name = "signal-hook" version = "0.3.17" @@ -713,25 +760,6 @@ dependencies = [ "syn", ] -[[package]] -name = "time" -version = "0.3.36" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5dfd88e563464686c916c7e46e623e520ddc6d79fa6641390f2e3fa86e83e885" -dependencies = [ - "deranged", - "num-conv", - "powerfmt", - "serde", - "time-core", -] - -[[package]] -name = "time-core" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" - [[package]] name = "unicode-ident" version = "1.0.12" @@ -768,6 +796,60 @@ version = "0.11.0+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" +[[package]] +name = "wasm-bindgen" +version = "0.2.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4be2531df63900aeb2bca0daaaddec08491ee64ceecbee5076636a3b026795a8" +dependencies = [ + "cfg-if", + "wasm-bindgen-macro", +] + +[[package]] +name = "wasm-bindgen-backend" +version = "0.2.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "614d787b966d3989fa7bb98a654e369c762374fd3213d212cfc0251257e747da" +dependencies = [ + "bumpalo", + "log", + "once_cell", + "proc-macro2", + "quote", + "syn", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1f8823de937b71b9460c0c34e25f3da88250760bec0ebac694b49997550d726" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "wasm-bindgen-backend", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af190c94f2773fdb3729c55b007a722abb5384da03bc0986df4c289bf5567e96" + [[package]] name = "winapi" version = "0.3.9" @@ -790,6 +872,15 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" +[[package]] +name = "windows-core" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" +dependencies = [ + "windows-targets 0.52.5", +] + [[package]] name = "windows-sys" version = "0.48.0" diff --git a/programs/jrnl/Cargo.toml b/programs/jrnl/Cargo.toml index 119d4d9..0b97fee 100644 --- a/programs/jrnl/Cargo.toml +++ b/programs/jrnl/Cargo.toml @@ -4,12 +4,13 @@ version = "0.1.0" edition = "2021" [dependencies] +chrono = "0.4.38" clap = { version = "4.5.4", features = ["derive", "env"] } dirs = "5.0.1" ego-tree = "0.6.2" indexmap = "2.2.6" markdown = "0.3.0" +owo-colors = "4.0.0" petgraph = "0.6.4" ratatui = "0.26.2" -time = { version = "0.3.36", features = ["parsing"]} -time-macros = { version = "0.2.0-alpha.1" } +termsize = "0.1.6" diff --git a/programs/jrnl/src/main.rs b/programs/jrnl/src/main.rs index f6d30cf..6d1b47e 100644 --- a/programs/jrnl/src/main.rs +++ b/programs/jrnl/src/main.rs @@ -1,15 +1,7 @@ use clap::{Parser, Subcommand}; use std::{fs, path::PathBuf}; -use time::format_description::well_known::{iso8601, Iso8601}; -use crate::md::Doc; - -const DATETIME_CONFIG: iso8601::EncodedConfig = iso8601::Config::DEFAULT - .set_time_precision(iso8601::TimePrecision::Minute { - decimal_digits: None, - }) - .encode(); -const DT_FORMAT: Iso8601 = Iso8601::; +use crate::{commands::list_entries::list_entries, md::Doc}; #[derive(Debug, Parser)] struct Cli { @@ -21,7 +13,8 @@ struct Cli { #[derive(Debug, Subcommand)] enum Command { - List, + #[command(aliases = ["l", "ls", "list"])] + ListEntries, Add, } @@ -30,23 +23,70 @@ fn main() { println!("Hello, world!"); println!("cli: {cli:#?}"); - // TODO: handle btter - let file = fs::read_to_string(cli.s10e_jrnl_file_loc).unwrap(); + match cli.command { + Some(Command::ListEntries) => list_entries(cli.s10e_jrnl_file_loc.clone()), + Some(Command::Add) => todo!(), + None => { + // TODO: handle btter + let file = fs::read_to_string(cli.s10e_jrnl_file_loc).unwrap(); - let doc = Doc::new(&file); - dbg!(doc); + let doc = Doc::new(&file); + dbg!(doc); + } + } +} + +mod utils { + use chrono::{DateTime, FixedOffset}; + pub fn format_datetime(ts: DateTime) -> String { + ts.format("%A, %-d. %B %Y %R").to_string() + } + pub fn format_datetime_padded(ts: DateTime) -> String { + format!( + "{:>9}{}{:<9}{}", + ts.format("%A, "), + ts.format("%d. "), + ts.format("%B"), + ts.format(" %Y %R"), + ) + } +} + +mod commands { + pub mod list_entries { + use owo_colors::OwoColorize; + use std::{fs, path::PathBuf}; + + use crate::md::Doc; + + pub fn list_entries(path: PathBuf) { + let file = fs::read_to_string(path).unwrap(); + let doc = Doc::new(&file); + + for (i, entry) in doc.entries.into_iter().enumerate() { + let n = format!("{:>2}", i + 1); + let r = format!(". {}", entry.title,); + let l = format!(" {} ", crate::utils::format_datetime(entry.timestamp)); + let termsize::Size { cols, .. } = termsize::get().unwrap(); + + let padding = " ".repeat(cols as usize - (n.len() + r.len() + l.len())); + + println!("{}{r}{padding}{}", n.cyan(), l.white()) + } + } + } + + mod add_entry {} } mod md { + use chrono::{DateTime, FixedOffset}; use markdown::{Block, Span}; - use time::PrimitiveDateTime; - - use crate::DT_FORMAT; #[derive(Debug)] pub struct Doc { - title: Vec, - entries: Vec, + pub title: Vec, + pub entries: Vec, } impl Doc { @@ -70,7 +110,8 @@ mod md { }; let (ts, entry_title) = title.split_once(": ").unwrap(); - let ts = PrimitiveDateTime::parse(ts, &DT_FORMAT).unwrap(); + let ts = DateTime::parse_from_rfc3339(ts).unwrap(); + // let ts = PrimitiveDateTime::parse(ts, &DT_FORMAT).unwrap(); current = Some(Entry { timestamp: ts, @@ -81,6 +122,9 @@ mod md { other => current.as_mut().unwrap().content.push(other), } } + if let Some(cur) = current { + entries.push(cur); + } Self { title: doc_title, @@ -91,8 +135,8 @@ mod md { #[derive(Debug)] pub struct Entry { - timestamp: PrimitiveDateTime, - title: String, - content: Vec, + pub timestamp: DateTime, + pub title: String, + pub content: Vec, } } From df13761fc8589d53145ca00d1f1f4396fda3b470 Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Sat, 20 Apr 2024 20:11:04 +0200 Subject: [PATCH 061/301] jrnl: put modules in its own respective files --- programs/jrnl/src/commands.rs | 3 + programs/jrnl/src/commands/list_entries.rs | 20 ++++ programs/jrnl/src/main.rs | 109 +-------------------- programs/jrnl/src/md.rs | 59 +++++++++++ programs/jrnl/src/utils.rs | 15 +++ 5 files changed, 101 insertions(+), 105 deletions(-) create mode 100644 programs/jrnl/src/commands.rs create mode 100644 programs/jrnl/src/commands/list_entries.rs create mode 100644 programs/jrnl/src/md.rs create mode 100644 programs/jrnl/src/utils.rs diff --git a/programs/jrnl/src/commands.rs b/programs/jrnl/src/commands.rs new file mode 100644 index 0000000..7340468 --- /dev/null +++ b/programs/jrnl/src/commands.rs @@ -0,0 +1,3 @@ +pub mod list_entries; + +mod add_entry {} diff --git a/programs/jrnl/src/commands/list_entries.rs b/programs/jrnl/src/commands/list_entries.rs new file mode 100644 index 0000000..6d46388 --- /dev/null +++ b/programs/jrnl/src/commands/list_entries.rs @@ -0,0 +1,20 @@ +use owo_colors::OwoColorize; +use std::{fs, path::PathBuf}; + +use crate::md::Doc; + +pub fn list_entries(path: PathBuf) { + let file = fs::read_to_string(path).unwrap(); + let doc = Doc::new(&file); + + for (i, entry) in doc.entries.into_iter().enumerate() { + let n = format!("{:>2}", i + 1); + let r = format!(". {}", entry.title,); + let l = format!(" {} ", crate::utils::format_datetime(entry.timestamp)); + let termsize::Size { cols, .. } = termsize::get().unwrap(); + + let padding = " ".repeat(cols as usize - (n.len() + r.len() + l.len())); + + println!("{}{r}{padding}{}", n.cyan(), l.white()) + } +} diff --git a/programs/jrnl/src/main.rs b/programs/jrnl/src/main.rs index 6d1b47e..294ade8 100644 --- a/programs/jrnl/src/main.rs +++ b/programs/jrnl/src/main.rs @@ -3,6 +3,10 @@ use std::{fs, path::PathBuf}; use crate::{commands::list_entries::list_entries, md::Doc}; +mod commands; +mod md; +mod utils; + #[derive(Debug, Parser)] struct Cli { #[arg(env)] @@ -35,108 +39,3 @@ fn main() { } } } - -mod utils { - use chrono::{DateTime, FixedOffset}; - pub fn format_datetime(ts: DateTime) -> String { - ts.format("%A, %-d. %B %Y %R").to_string() - } - pub fn format_datetime_padded(ts: DateTime) -> String { - format!( - "{:>9}{}{:<9}{}", - ts.format("%A, "), - ts.format("%d. "), - ts.format("%B"), - ts.format(" %Y %R"), - ) - } -} - -mod commands { - pub mod list_entries { - use owo_colors::OwoColorize; - use std::{fs, path::PathBuf}; - - use crate::md::Doc; - - pub fn list_entries(path: PathBuf) { - let file = fs::read_to_string(path).unwrap(); - let doc = Doc::new(&file); - - for (i, entry) in doc.entries.into_iter().enumerate() { - let n = format!("{:>2}", i + 1); - let r = format!(". {}", entry.title,); - let l = format!(" {} ", crate::utils::format_datetime(entry.timestamp)); - let termsize::Size { cols, .. } = termsize::get().unwrap(); - - let padding = " ".repeat(cols as usize - (n.len() + r.len() + l.len())); - - println!("{}{r}{padding}{}", n.cyan(), l.white()) - } - } - } - - mod add_entry {} -} - -mod md { - use chrono::{DateTime, FixedOffset}; - use markdown::{Block, Span}; - - #[derive(Debug)] - pub struct Doc { - pub title: Vec, - pub entries: Vec, - } - - impl Doc { - pub fn new(f: &str) -> Self { - let mut entries = Vec::new(); - let mut doc_title = vec![Span::Text("Journal".to_owned())]; - let toks = markdown::tokenize(f); - let mut current = None; - - for tok in toks { - match tok { - Block::Header(title, 1) => doc_title = title, - Block::Header(entry_title, 2) => { - if let Some(cur) = current.take() { - entries.push(cur); - } - - let Some(Span::Text(title)) = entry_title.first() else { - eprintln!("Error: Titles should be text."); - std::process::exit(1); - }; - - let (ts, entry_title) = title.split_once(": ").unwrap(); - let ts = DateTime::parse_from_rfc3339(ts).unwrap(); - // let ts = PrimitiveDateTime::parse(ts, &DT_FORMAT).unwrap(); - - current = Some(Entry { - timestamp: ts, - title: entry_title.to_owned(), - content: Vec::new(), - }); - } - other => current.as_mut().unwrap().content.push(other), - } - } - if let Some(cur) = current { - entries.push(cur); - } - - Self { - title: doc_title, - entries, - } - } - } - - #[derive(Debug)] - pub struct Entry { - pub timestamp: DateTime, - pub title: String, - pub content: Vec, - } -} diff --git a/programs/jrnl/src/md.rs b/programs/jrnl/src/md.rs new file mode 100644 index 0000000..b04ef2e --- /dev/null +++ b/programs/jrnl/src/md.rs @@ -0,0 +1,59 @@ +use chrono::{DateTime, FixedOffset}; +use markdown::{Block, Span}; + +#[derive(Debug)] +pub struct Doc { + pub title: Vec, + pub entries: Vec, +} + +impl Doc { + pub fn new(f: &str) -> Self { + let mut entries = Vec::new(); + let mut doc_title = vec![Span::Text("Journal".to_owned())]; + let toks = markdown::tokenize(f); + let mut current = None; + + for tok in toks { + match tok { + Block::Header(title, 1) => doc_title = title, + Block::Header(entry_title, 2) => { + if let Some(cur) = current.take() { + entries.push(cur); + } + + let Some(Span::Text(title)) = entry_title.first() else { + eprintln!("Error: Titles should be text."); + std::process::exit(1); + }; + + let (ts, entry_title) = title.split_once(": ").unwrap(); + let ts = DateTime::parse_from_rfc3339(ts).unwrap(); + // let ts = PrimitiveDateTime::parse(ts, &DT_FORMAT).unwrap(); + + current = Some(Entry { + timestamp: ts, + title: entry_title.to_owned(), + content: Vec::new(), + }); + } + other => current.as_mut().unwrap().content.push(other), + } + } + if let Some(cur) = current { + entries.push(cur); + } + + Self { + title: doc_title, + entries, + } + } +} + +#[derive(Debug)] +pub struct Entry { + pub timestamp: DateTime, + pub title: String, + pub content: Vec, +} diff --git a/programs/jrnl/src/utils.rs b/programs/jrnl/src/utils.rs new file mode 100644 index 0000000..4814e42 --- /dev/null +++ b/programs/jrnl/src/utils.rs @@ -0,0 +1,15 @@ +use chrono::{DateTime, FixedOffset}; + +pub fn format_datetime(ts: DateTime) -> String { + ts.format("%A, %-d. %B %Y %R").to_string() +} + +pub fn format_datetime_padded(ts: DateTime) -> String { + format!( + "{:>9}{}{:<9}{}", + ts.format("%A, "), + ts.format("%d. "), + ts.format("%B"), + ts.format(" %Y %R"), + ) +} From 84f7301f72e6b841c1f2f2aeb6bab4e4676d471c Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Sat, 20 Apr 2024 20:19:41 +0200 Subject: [PATCH 062/301] fix rustdoc aliases --- modules/desktop/firefox.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/desktop/firefox.nix b/modules/desktop/firefox.nix index 873627f..d28dc70 100644 --- a/modules/desktop/firefox.nix +++ b/modules/desktop/firefox.nix @@ -159,7 +159,7 @@ template = "https://docs.rs/{searchTerms}"; } ]; - definedAliases = ["doc"]; + definedAliases = ["doc" "docd"]; }; "rust std docs" = { urls = [ From 28bebd5aaa47a2369551d5d9c2ef3ee4e7836564 Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Sat, 20 Apr 2024 20:19:57 +0200 Subject: [PATCH 063/301] switch evolution nixpkgs-stable --- modules/desktop/mail.nix | 4 ++-- modules/desktop/social.nix | 9 ++++++--- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/modules/desktop/mail.nix b/modules/desktop/mail.nix index e52807b..253f9ac 100644 --- a/modules/desktop/mail.nix +++ b/modules/desktop/mail.nix @@ -1,7 +1,7 @@ { config, lib, - pkgs, + pkgs-stable, ... }: let cfg = config.jade.desktop.mail; @@ -20,7 +20,7 @@ in enable = mkEnableOption "Enable thunderbird mail stuff"; }; config = mkIf cfg.enable { - home-manager.users.jade = {pkgs, ...}: { + home-manager.users.jade = {pkgs-stable, ...}: { accounts.email.accounts = { "Jade" = rec { inherit imap smtp; diff --git a/modules/desktop/social.nix b/modules/desktop/social.nix index d494d0c..b8569bc 100644 --- a/modules/desktop/social.nix +++ b/modules/desktop/social.nix @@ -1,7 +1,6 @@ { config, lib, - pkgs, ... }: let cfg = config.jade.desktop.social; @@ -11,9 +10,13 @@ in enable = mkEnableOption "Enable social apps"; }; config = mkIf cfg.enable { - home-manager.users.jade = {pkgs, ...}: { + home-manager.users.jade = { + pkgs, + pkgs-stable, + ... + }: { home.packages = with pkgs; [ - evolutionWithPlugins + pkgs-stable.evolutionWithPlugins signal-desktop mumble element-desktop From 0bf5ed0c762860e6afdccbf8a3516ecfdc098e12 Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Mon, 22 Apr 2024 11:15:45 +0200 Subject: [PATCH 064/301] jrnl: simplify (or complexify, if you dont like iterators and zero-copy) the parsing --- Cargo.lock | 7 ++ programs/jrnl/Cargo.toml | 1 + programs/jrnl/src/commands/list_entries.rs | 20 +++--- programs/jrnl/src/main.rs | 4 +- programs/jrnl/src/md.rs | 76 +++++++++------------- 5 files changed, 52 insertions(+), 56 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 9415901..752d275 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -412,6 +412,7 @@ dependencies = [ "owo-colors", "petgraph", "ratatui", + "temp-file", "termsize", ] @@ -799,6 +800,12 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "temp-file" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f210bda61d003f311d95611d1b68361df8fe8e732c3609f945441bde881321d" + [[package]] name = "termion" version = "1.5.6" diff --git a/programs/jrnl/Cargo.toml b/programs/jrnl/Cargo.toml index 0b97fee..12f231a 100644 --- a/programs/jrnl/Cargo.toml +++ b/programs/jrnl/Cargo.toml @@ -13,4 +13,5 @@ markdown = "0.3.0" owo-colors = "4.0.0" petgraph = "0.6.4" ratatui = "0.26.2" +temp-file = "0.1.8" termsize = "0.1.6" diff --git a/programs/jrnl/src/commands/list_entries.rs b/programs/jrnl/src/commands/list_entries.rs index 6d46388..9471095 100644 --- a/programs/jrnl/src/commands/list_entries.rs +++ b/programs/jrnl/src/commands/list_entries.rs @@ -5,16 +5,20 @@ use crate::md::Doc; pub fn list_entries(path: PathBuf) { let file = fs::read_to_string(path).unwrap(); - let doc = Doc::new(&file); - for (i, entry) in doc.entries.into_iter().enumerate() { - let n = format!("{:>2}", i + 1); - let r = format!(". {}", entry.title,); - let l = format!(" {} ", crate::utils::format_datetime(entry.timestamp)); - let termsize::Size { cols, .. } = termsize::get().unwrap(); + if let Some(doc) = Doc::new(&file) { + for (i, entry) in doc.entries.into_iter().enumerate() { + let n = format!("{:>2}", i + 1); + let r = format!(". {}", entry.title,); + let l = format!(" {} ", crate::utils::format_datetime(entry.timestamp)); + let termsize::Size { cols, .. } = termsize::get().unwrap(); - let padding = " ".repeat(cols as usize - (n.len() + r.len() + l.len())); + let padding = " ".repeat(cols as usize - (n.len() + r.len() + l.len())); - println!("{}{r}{padding}{}", n.cyan(), l.white()) + println!("{}{r}{padding}{}", n.cyan(), l.white()) + } + } else { + eprintln!("Parsing error..."); + std::process::exit(1); } } diff --git a/programs/jrnl/src/main.rs b/programs/jrnl/src/main.rs index 294ade8..b9ba013 100644 --- a/programs/jrnl/src/main.rs +++ b/programs/jrnl/src/main.rs @@ -1,3 +1,4 @@ +#![feature(iter_collect_into)] use clap::{Parser, Subcommand}; use std::{fs, path::PathBuf}; @@ -34,8 +35,7 @@ fn main() { // TODO: handle btter let file = fs::read_to_string(cli.s10e_jrnl_file_loc).unwrap(); - let doc = Doc::new(&file); - dbg!(doc); + let doc = dbg!(Doc::new(&file)); } } } diff --git a/programs/jrnl/src/md.rs b/programs/jrnl/src/md.rs index b04ef2e..80ba946 100644 --- a/programs/jrnl/src/md.rs +++ b/programs/jrnl/src/md.rs @@ -1,59 +1,43 @@ use chrono::{DateTime, FixedOffset}; use markdown::{Block, Span}; +use std::convert::identity; #[derive(Debug)] -pub struct Doc { - pub title: Vec, - pub entries: Vec, +pub struct Doc<'src> { + pub entries: Vec>, } -impl Doc { - pub fn new(f: &str) -> Self { - let mut entries = Vec::new(); - let mut doc_title = vec![Span::Text("Journal".to_owned())]; - let toks = markdown::tokenize(f); - let mut current = None; - - for tok in toks { - match tok { - Block::Header(title, 1) => doc_title = title, - Block::Header(entry_title, 2) => { - if let Some(cur) = current.take() { - entries.push(cur); - } - - let Some(Span::Text(title)) = entry_title.first() else { - eprintln!("Error: Titles should be text."); - std::process::exit(1); - }; - - let (ts, entry_title) = title.split_once(": ").unwrap(); - let ts = DateTime::parse_from_rfc3339(ts).unwrap(); - // let ts = PrimitiveDateTime::parse(ts, &DT_FORMAT).unwrap(); - - current = Some(Entry { - timestamp: ts, - title: entry_title.to_owned(), - content: Vec::new(), - }); +impl<'src> Doc<'src> { + // TODO: better parsing errors? + pub fn new(f: &'src str) -> Option { + let entries = f + .split("\n## ") + .map(|s| s.split_once("\n")) + .skip(1) + .filter_map(identity) + .map(|(title, content)| (title.split_once(": "), content)) + .map(|(title, content)| { + if let Some((ts, title)) = title { + Some(Entry { + timestamp: DateTime::parse_from_rfc3339(ts).unwrap(), + title, + content: content.trim_matches('\n'), + }) + } else { + None } - other => current.as_mut().unwrap().content.push(other), - } - } - if let Some(cur) = current { - entries.push(cur); - } + }) + .collect::>(); - Self { - title: doc_title, - entries, - } + entries.iter().all(|it| it.is_some()).then_some(Self { + entries: entries.into_iter().filter_map(identity).collect(), + }) } } -#[derive(Debug)] -pub struct Entry { +#[derive(Debug, Clone)] +pub struct Entry<'src> { pub timestamp: DateTime, - pub title: String, - pub content: Vec, + pub title: &'src str, + pub content: &'src str, } From b967f6e90edb523c0a57ebfe0b57607c2271084b Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Mon, 22 Apr 2024 11:44:26 +0200 Subject: [PATCH 065/301] jrnl: markdown generation --- programs/jrnl/src/main.rs | 8 ++++++-- programs/jrnl/src/md.rs | 21 +++++++++++++++++++++ 2 files changed, 27 insertions(+), 2 deletions(-) diff --git a/programs/jrnl/src/main.rs b/programs/jrnl/src/main.rs index b9ba013..22faae3 100644 --- a/programs/jrnl/src/main.rs +++ b/programs/jrnl/src/main.rs @@ -2,7 +2,10 @@ use clap::{Parser, Subcommand}; use std::{fs, path::PathBuf}; -use crate::{commands::list_entries::list_entries, md::Doc}; +use crate::{ + commands::list_entries::list_entries, + md::{Doc, ToMd}, +}; mod commands; mod md; @@ -35,7 +38,8 @@ fn main() { // TODO: handle btter let file = fs::read_to_string(cli.s10e_jrnl_file_loc).unwrap(); - let doc = dbg!(Doc::new(&file)); + let doc = Doc::new(&file).unwrap(); + println!("{}", doc.to_md()) } } } diff --git a/programs/jrnl/src/md.rs b/programs/jrnl/src/md.rs index 80ba946..cd3ab43 100644 --- a/programs/jrnl/src/md.rs +++ b/programs/jrnl/src/md.rs @@ -2,6 +2,10 @@ use chrono::{DateTime, FixedOffset}; use markdown::{Block, Span}; use std::convert::identity; +pub trait ToMd { + fn to_md(&self) -> String; +} + #[derive(Debug)] pub struct Doc<'src> { pub entries: Vec>, @@ -35,9 +39,26 @@ impl<'src> Doc<'src> { } } +impl ToMd for Doc<'_> { + fn to_md(&self) -> String { + let mut r = "# Journal\n\n".to_owned(); + + self.entries.iter().fold(r, |mut r, it| r + &it.to_md()) + } +} + #[derive(Debug, Clone)] pub struct Entry<'src> { pub timestamp: DateTime, pub title: &'src str, pub content: &'src str, } + +impl ToMd for Entry<'_> { + fn to_md(&self) -> String { + format!( + "## {}: {}\n\n{}\n\n", + self.timestamp, self.title, self.content + ) + } +} From aaec1f1f78b802ce9895bc553d361474c5d94a3b Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Mon, 22 Apr 2024 21:25:29 +0200 Subject: [PATCH 066/301] jrnl: adding entries now works!! --- programs/jrnl/src/commands.rs | 3 +- programs/jrnl/src/commands/add_entry.rs | 68 ++++++++++++++++++++++ programs/jrnl/src/commands/list_entries.rs | 9 +-- programs/jrnl/src/main.rs | 16 +++-- programs/jrnl/src/md.rs | 6 +- 5 files changed, 89 insertions(+), 13 deletions(-) create mode 100644 programs/jrnl/src/commands/add_entry.rs diff --git a/programs/jrnl/src/commands.rs b/programs/jrnl/src/commands.rs index 7340468..c294e5e 100644 --- a/programs/jrnl/src/commands.rs +++ b/programs/jrnl/src/commands.rs @@ -1,3 +1,2 @@ +pub mod add_entry; pub mod list_entries; - -mod add_entry {} diff --git a/programs/jrnl/src/commands/add_entry.rs b/programs/jrnl/src/commands/add_entry.rs new file mode 100644 index 0000000..8dd1b92 --- /dev/null +++ b/programs/jrnl/src/commands/add_entry.rs @@ -0,0 +1,68 @@ +use std::{ + env, + fs::{self, OpenOptions}, + io::{self, Write}, + path::PathBuf, + process::Command, +}; + +use temp_file::{TempFile, TempFileBuilder}; + +use crate::md::{Entry, ToMd}; + +// TODO: the usual (better error handling) +pub fn add_entry(path: PathBuf, title: Option) -> io::Result<()> { + if !path.exists() { + eprintln!("Journal file does not exist at {path:?}, exiting..."); + std::process::exit(1); + } + + let title = prompt("Title")?; + + let tmp = TempFileBuilder::new() + .suffix(".jrnl-entry.md") + .build() + .unwrap(); + + let editor = match env::var("EDITOR") { + Ok(val) => val, + Err(env::VarError::NotPresent) => { + eprintln!("EDITOR not set, exiting..."); + std::process::exit(1); + } + _ => unreachable!(), + }; + + let mut editor_cmd = Command::new(&editor); + editor_cmd.arg(tmp.path()); + editor_cmd.status().unwrap(); + + let content = fs::read_to_string(tmp.path()).unwrap(); + + let now = chrono::offset::Local::now(); + + let entry = Entry { + timestamp: now.fixed_offset(), + title: &title, + content: &content, + }; + + let mut file = OpenOptions::new() + .write(true) + .append(true) + .open(path) + .unwrap(); + + write!(file, "{}", entry.to_md())?; + + Ok(()) +} + +fn prompt(title: &str) -> io::Result { + print!("{}: ", title); + let _ = io::stdout().flush(); + let mut buf = String::new(); + let stdin = io::stdin(); + stdin.read_line(&mut buf)?; + Ok(buf) +} diff --git a/programs/jrnl/src/commands/list_entries.rs b/programs/jrnl/src/commands/list_entries.rs index 9471095..b1f617b 100644 --- a/programs/jrnl/src/commands/list_entries.rs +++ b/programs/jrnl/src/commands/list_entries.rs @@ -1,22 +1,23 @@ use owo_colors::OwoColorize; -use std::{fs, path::PathBuf}; +use std::{fs, io, path::PathBuf}; use crate::md::Doc; -pub fn list_entries(path: PathBuf) { - let file = fs::read_to_string(path).unwrap(); +pub fn list_entries(path: PathBuf) -> io::Result<()> { + let file = fs::read_to_string(path)?; if let Some(doc) = Doc::new(&file) { + let termsize::Size { cols, .. } = termsize::get().unwrap(); for (i, entry) in doc.entries.into_iter().enumerate() { let n = format!("{:>2}", i + 1); let r = format!(". {}", entry.title,); let l = format!(" {} ", crate::utils::format_datetime(entry.timestamp)); - let termsize::Size { cols, .. } = termsize::get().unwrap(); let padding = " ".repeat(cols as usize - (n.len() + r.len() + l.len())); println!("{}{r}{padding}{}", n.cyan(), l.white()) } + Ok(()) } else { eprintln!("Parsing error..."); std::process::exit(1); diff --git a/programs/jrnl/src/main.rs b/programs/jrnl/src/main.rs index 22faae3..4084e83 100644 --- a/programs/jrnl/src/main.rs +++ b/programs/jrnl/src/main.rs @@ -1,8 +1,9 @@ #![feature(iter_collect_into)] use clap::{Parser, Subcommand}; -use std::{fs, path::PathBuf}; +use std::{fs, io, path::PathBuf}; use crate::{ + commands::add_entry::add_entry, commands::list_entries::list_entries, md::{Doc, ToMd}, }; @@ -23,23 +24,26 @@ struct Cli { enum Command { #[command(aliases = ["l", "ls", "list"])] ListEntries, - Add, + Add { + title: Option, + }, } -fn main() { +fn main() -> io::Result<()> { let cli = Cli::parse(); println!("Hello, world!"); println!("cli: {cli:#?}"); match cli.command { Some(Command::ListEntries) => list_entries(cli.s10e_jrnl_file_loc.clone()), - Some(Command::Add) => todo!(), + Some(Command::Add { title }) => add_entry(cli.s10e_jrnl_file_loc.clone(), title), None => { // TODO: handle btter - let file = fs::read_to_string(cli.s10e_jrnl_file_loc).unwrap(); + let file = fs::read_to_string(cli.s10e_jrnl_file_loc)?; let doc = Doc::new(&file).unwrap(); - println!("{}", doc.to_md()) + println!("{}", doc.to_md()); + Ok(()) } } } diff --git a/programs/jrnl/src/md.rs b/programs/jrnl/src/md.rs index cd3ab43..8453c77 100644 --- a/programs/jrnl/src/md.rs +++ b/programs/jrnl/src/md.rs @@ -58,7 +58,11 @@ impl ToMd for Entry<'_> { fn to_md(&self) -> String { format!( "## {}: {}\n\n{}\n\n", - self.timestamp, self.title, self.content + self.timestamp + .fixed_offset() + .to_rfc3339_opts(chrono::SecondsFormat::Secs, false), + self.title, + self.content ) } } From d425621e013ea7be8c0d1e426e7c2f04dd09197d Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Tue, 23 Apr 2024 08:04:03 +0200 Subject: [PATCH 067/301] jrnl: some add aliases --- programs/jrnl/src/main.rs | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/programs/jrnl/src/main.rs b/programs/jrnl/src/main.rs index 4084e83..400e4fa 100644 --- a/programs/jrnl/src/main.rs +++ b/programs/jrnl/src/main.rs @@ -1,4 +1,3 @@ -#![feature(iter_collect_into)] use clap::{Parser, Subcommand}; use std::{fs, io, path::PathBuf}; @@ -24,9 +23,8 @@ struct Cli { enum Command { #[command(aliases = ["l", "ls", "list"])] ListEntries, - Add { - title: Option, - }, + #[command(aliases = ["a", "add-entry"])] + Add { title: Option }, } fn main() -> io::Result<()> { From d6283011313b26cb6fac5dbc52a9cf483f6ecaf6 Mon Sep 17 00:00:00 2001 From: Jade Date: Sun, 28 Apr 2024 16:01:22 +0200 Subject: [PATCH 068/301] flake.lock: Update MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Flake lock file updates: • Updated input 'crane': 'github:ipetkov/crane/45ea0059fb325132fdc3c39faffb0941d25d08d3' (2024-04-18) → 'github:ipetkov/crane/a5eca68a2cf11adb32787fc141cddd29ac8eb79c' (2024-04-24) • Updated input 'fenix': 'github:nix-community/fenix/3247290e1bba55878a2c62d43894d0309d29c918' (2024-04-20) → 'github:nix-community/fenix/94be183087845937b0fd77281c37d0796572b899' (2024-04-28) • Updated input 'fenix/rust-analyzer-src': 'github:rust-lang/rust-analyzer/c83d8cf5844fff3d6e243ab408669222059af1c6' (2024-04-19) → 'github:rust-lang/rust-analyzer/f216be4a0746142c5f30835b254871256a7637b8' (2024-04-27) • Updated input 'home-manager': 'github:nix-community/home-manager/057117a401a34259c9615ce62218aea7afdee4d3' (2024-04-19) → 'github:nix-community/home-manager/c1609d584a6b5e9e6a02010f51bd368cb4782f8e' (2024-04-27) • Updated input 'mac-brcm-fw': 'path:/home/jade/nix-configs/mac-brcm-fw?lastModified=1709065070&narHash=sha256-%2BkW8ogc6DykjMVlrr%2B3vWKs9ZUdJ9EW72LbY7k/Qvh4%3D' (2024-02-27) → 'path:/home/jade/nix-configs/mac-brcm-fw?lastModified=1701030348&narHash=sha256-%2BkW8ogc6DykjMVlrr%2B3vWKs9ZUdJ9EW72LbY7k/Qvh4%3D' (2023-11-26) • Updated input 'nixpkgs': 'github:NixOS/nixpkgs/5c24cf2f0a12ad855f444c30b2421d044120c66f' (2024-04-19) → 'github:NixOS/nixpkgs/7bb2ccd8cdc44c91edba16c48d2c8f331fb3d856' (2024-04-25) • Updated input 'nixpkgs-stable': 'github:NixOS/nixpkgs/e402c3eb6d88384ca6c52ef1c53e61bdc9b84ddd' (2024-04-17) → 'github:NixOS/nixpkgs/12430e43bd9b81a6b4e79e64f87c624ade701eaf' (2024-04-28) • Updated input 'nixpkgs-unstable-small': 'github:NixOS/nixpkgs/c0f9060ec3937d5a7cf3ce6c698e14d989b453e5' (2024-04-20) → 'github:NixOS/nixpkgs/30ddacc06345a478f9528fa29e2c8857b90381b2' (2024-04-28) --- flake.lock | 44 ++++++++++++++++++++++---------------------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/flake.lock b/flake.lock index 9e32b5c..2f1f724 100644 --- a/flake.lock +++ b/flake.lock @@ -7,11 +7,11 @@ ] }, "locked": { - "lastModified": 1713459701, - "narHash": "sha256-LjQ11ASxnv/FXfb8QnrIyMkyqSqcBPX+lFK8gu0jSQE=", + "lastModified": 1713979152, + "narHash": "sha256-apdecPuh8SOQnkEET/kW/UcfjCRb8JbV5BKjoH+DcP4=", "owner": "ipetkov", "repo": "crane", - "rev": "45ea0059fb325132fdc3c39faffb0941d25d08d3", + "rev": "a5eca68a2cf11adb32787fc141cddd29ac8eb79c", "type": "github" }, "original": { @@ -28,11 +28,11 @@ "rust-analyzer-src": "rust-analyzer-src" }, "locked": { - "lastModified": 1713594079, - "narHash": "sha256-lYWehi0cqBdsL1W4xeUnUcXw4U4aBKKCmmQrR01yqE0=", + "lastModified": 1714285404, + "narHash": "sha256-MmoQIO+KRiH3UnH0myAp2Fgi84rmpROMfw9VIbqrjHA=", "owner": "nix-community", "repo": "fenix", - "rev": "3247290e1bba55878a2c62d43894d0309d29c918", + "rev": "94be183087845937b0fd77281c37d0796572b899", "type": "github" }, "original": { @@ -48,11 +48,11 @@ ] }, "locked": { - "lastModified": 1713566308, - "narHash": "sha256-7Y91t8pheIzjJveUMAPyeh5NOq5F49Nq4Hl2532QpJs=", + "lastModified": 1714203603, + "narHash": "sha256-eT7DENhYy7EPLOqHI9zkIMD9RvMCXcqh6gGqOK5BWYQ=", "owner": "nix-community", "repo": "home-manager", - "rev": "057117a401a34259c9615ce62218aea7afdee4d3", + "rev": "c1609d584a6b5e9e6a02010f51bd368cb4782f8e", "type": "github" }, "original": { @@ -64,7 +64,7 @@ "mac-brcm-fw": { "flake": false, "locked": { - "lastModified": 1709065070, + "lastModified": 1701030348, "narHash": "sha256-+kW8ogc6DykjMVlrr+3vWKs9ZUdJ9EW72LbY7k/Qvh4=", "path": "/home/jade/nix-configs/mac-brcm-fw", "type": "path" @@ -92,11 +92,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1713537308, - "narHash": "sha256-XtTSSIB2DA6tOv+l0FhvfDMiyCmhoRbNB+0SeInZkbk=", + "lastModified": 1714076141, + "narHash": "sha256-Drmja/f5MRHZCskS6mvzFqxEaZMeciScCTFxWVLqWEY=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "5c24cf2f0a12ad855f444c30b2421d044120c66f", + "rev": "7bb2ccd8cdc44c91edba16c48d2c8f331fb3d856", "type": "github" }, "original": { @@ -107,11 +107,11 @@ }, "nixpkgs-stable": { "locked": { - "lastModified": 1713344939, - "narHash": "sha256-jpHkAt0sG2/J7ueKnG7VvLLkBYUMQbXQ2L8OBpVG53s=", + "lastModified": 1714272655, + "narHash": "sha256-3/ghIWCve93ngkx5eNPdHIKJP/pMzSr5Wc4rNKE1wOc=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "e402c3eb6d88384ca6c52ef1c53e61bdc9b84ddd", + "rev": "12430e43bd9b81a6b4e79e64f87c624ade701eaf", "type": "github" }, "original": { @@ -122,11 +122,11 @@ }, "nixpkgs-unstable-small": { "locked": { - "lastModified": 1713597487, - "narHash": "sha256-bD+FqUZidTjHblGjK+2LpIaHBmo1THF1HW3o4ZBqmrw=", + "lastModified": 1714290118, + "narHash": "sha256-6PzUtOvU7hMQxZV579B04CHE1HXSq/loh9E+d/4fKZY=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "c0f9060ec3937d5a7cf3ce6c698e14d989b453e5", + "rev": "30ddacc06345a478f9528fa29e2c8857b90381b2", "type": "github" }, "original": { @@ -150,11 +150,11 @@ "rust-analyzer-src": { "flake": false, "locked": { - "lastModified": 1713559870, - "narHash": "sha256-HsVa+QM2vMra80OjnjH7JhdvLeJuMdR4sxBNHJveMe4=", + "lastModified": 1714217560, + "narHash": "sha256-zttBYGaoHpZfqWHQ8OI5f9OkGHCHb8tDBMySwsYNa2U=", "owner": "rust-lang", "repo": "rust-analyzer", - "rev": "c83d8cf5844fff3d6e243ab408669222059af1c6", + "rev": "f216be4a0746142c5f30835b254871256a7637b8", "type": "github" }, "original": { From 90d6d6ae85962786f6232e0df32379eede5b0d79 Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Mon, 6 May 2024 21:27:45 +0200 Subject: [PATCH 069/301] go lesbian --- Cargo.lock | 87 +++++++++++++++++++++++++++++++++- common.nix | 10 ++++ flake.lock | 134 ++++++++++++++++++++++++++++++++++++++++++++--------- flake.nix | 17 +++++-- 4 files changed, 221 insertions(+), 27 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 752d275..ebfd75c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -127,6 +127,12 @@ version = "3.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" +[[package]] +name = "byteorder" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" + [[package]] name = "cassowary" version = "0.3.0" @@ -233,6 +239,22 @@ version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f" +[[package]] +name = "crossterm" +version = "0.25.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e64e6c0fbe2c17357405f7c758c1ef960fce08bdfb2c03d88d2a18d7e09c4b67" +dependencies = [ + "bitflags 1.3.2", + "crossterm_winapi", + "libc", + "mio", + "parking_lot", + "signal-hook", + "signal-hook-mio", + "winapi 0.3.9", +] + [[package]] name = "crossterm" version = "0.27.0" @@ -279,6 +301,12 @@ dependencies = [ "windows-sys 0.48.0", ] +[[package]] +name = "dyn-clone" +version = "1.0.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d6ef0072f8a535281e4876be788938b528e9a1d43900b82c2569af7da799125" + [[package]] name = "ego-tree" version = "0.6.2" @@ -303,6 +331,24 @@ version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" +[[package]] +name = "fuzzy-matcher" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "54614a3312934d066701a80f20f15fa3b56d67ac7722b39eea5b4c9dd1d66c94" +dependencies = [ + "thread_local", +] + +[[package]] +name = "fxhash" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c31b6d751ae2c7f11320402d34e41349dd1016f8d5d45e48c4312bc8625af50c" +dependencies = [ + "byteorder", +] + [[package]] name = "getrandom" version = "0.2.14" @@ -384,6 +430,23 @@ version = "2.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b248f5224d1d606005e02c97f5aa4e88eeb230488bcc03bc9ca4d7991399f2b5" +[[package]] +name = "inquire" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fddf93031af70e75410a2511ec04d49e758ed2f26dad3404a934e0fb45cc12a" +dependencies = [ + "bitflags 2.5.0", + "crossterm 0.25.0", + "dyn-clone", + "fuzzy-matcher", + "fxhash", + "newline-converter", + "once_cell", + "unicode-segmentation", + "unicode-width", +] + [[package]] name = "itertools" version = "0.12.1" @@ -400,7 +463,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" [[package]] -name = "jrnl" +name = "j" version = "0.1.0" dependencies = [ "chrono", @@ -408,6 +471,7 @@ dependencies = [ "dirs", "ego-tree", "indexmap", + "inquire", "markdown", "owo-colors", "petgraph", @@ -511,6 +575,15 @@ dependencies = [ "windows-sys 0.48.0", ] +[[package]] +name = "newline-converter" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "47b6b097ecb1cbfed438542d16e84fd7ad9b0c76c8a65b7f9039212a3d14dc7f" +dependencies = [ + "unicode-segmentation", +] + [[package]] name = "num-traits" version = "0.2.18" @@ -616,7 +689,7 @@ dependencies = [ "bitflags 2.5.0", "cassowary", "compact_str", - "crossterm", + "crossterm 0.27.0", "indoc", "itertools", "lru", @@ -851,6 +924,16 @@ dependencies = [ "syn", ] +[[package]] +name = "thread_local" +version = "1.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b9ef9bad013ada3808854ceac7b46812a6465ba368859a37e2100283d2d719c" +dependencies = [ + "cfg-if", + "once_cell", +] + [[package]] name = "unicode-ident" version = "1.0.12" diff --git a/common.nix b/common.nix index 21aa36d..128ecb2 100644 --- a/common.nix +++ b/common.nix @@ -5,13 +5,23 @@ config, pkgs, lib, + lix-module, rs-programs, ... }: with lib; with builtins; { + imports = [lix-module.nixosModules.default]; nix = { package = pkgs.nixVersions.stable; + settings = { + extra-substituters = [ + "https://cache.lix.systems" + ]; + trusted-public-keys = [ + "cache.lix.systems:aBnZUw8zA7H35Cz2RyKFVs3H4PlGTLawyY5KRbvJR8o=" + ]; + }; extraOptions = '' experimental-features = nix-command flakes keep-outputs = true diff --git a/flake.lock b/flake.lock index 9e32b5c..c245eab 100644 --- a/flake.lock +++ b/flake.lock @@ -7,11 +7,11 @@ ] }, "locked": { - "lastModified": 1713459701, - "narHash": "sha256-LjQ11ASxnv/FXfb8QnrIyMkyqSqcBPX+lFK8gu0jSQE=", + "lastModified": 1714864355, + "narHash": "sha256-uXNW6bapWFfkYIkK1EagydSrFMqycOYEDSq75GmUpjk=", "owner": "ipetkov", "repo": "crane", - "rev": "45ea0059fb325132fdc3c39faffb0941d25d08d3", + "rev": "442a7a6152f49b907e73206dc8e1f46a61e8e873", "type": "github" }, "original": { @@ -28,11 +28,11 @@ "rust-analyzer-src": "rust-analyzer-src" }, "locked": { - "lastModified": 1713594079, - "narHash": "sha256-lYWehi0cqBdsL1W4xeUnUcXw4U4aBKKCmmQrR01yqE0=", + "lastModified": 1714976745, + "narHash": "sha256-SAYU6uaVcUmckp/RFxkndz7u7eX1D69piTIMmAAop6Y=", "owner": "nix-community", "repo": "fenix", - "rev": "3247290e1bba55878a2c62d43894d0309d29c918", + "rev": "a291b6ad30f4ec949e6c98dde43d73d2946515c3", "type": "github" }, "original": { @@ -41,6 +41,39 @@ "type": "github" } }, + "flake-utils": { + "inputs": { + "systems": "systems" + }, + "locked": { + "lastModified": 1710146030, + "narHash": "sha256-SZ5L6eA7HJ/nmkzGG7/ISclqe6oZdOZTNoesiInkXPQ=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "b1d9ab70662946ef0850d488da1c9019f3a9752a", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flakey-profile": { + "locked": { + "lastModified": 1712898590, + "narHash": "sha256-FhGIEU93VHAChKEXx905TSiPZKga69bWl1VB37FK//I=", + "owner": "lf-", + "repo": "flakey-profile", + "rev": "243c903fd8eadc0f63d205665a92d4df91d42d9d", + "type": "github" + }, + "original": { + "owner": "lf-", + "repo": "flakey-profile", + "type": "github" + } + }, "home-manager": { "inputs": { "nixpkgs": [ @@ -48,11 +81,11 @@ ] }, "locked": { - "lastModified": 1713566308, - "narHash": "sha256-7Y91t8pheIzjJveUMAPyeh5NOq5F49Nq4Hl2532QpJs=", + "lastModified": 1714981474, + "narHash": "sha256-b3/U21CJjCjJKmA9WqUbZGZgCvospO3ArOUTgJugkOY=", "owner": "nix-community", "repo": "home-manager", - "rev": "057117a401a34259c9615ce62218aea7afdee4d3", + "rev": "6ebe7be2e67be7b9b54d61ce5704f6fb466c536f", "type": "github" }, "original": { @@ -61,6 +94,48 @@ "type": "github" } }, + "lix": { + "flake": false, + "locked": { + "lastModified": 1714955862, + "narHash": "sha256-REWlo2RYHfJkxnmZTEJu3Cd/2VM+wjjpPy7Xi4BdDTQ=", + "ref": "refs/tags/2.90-beta.1", + "rev": "b6799ab0374a8e1907a48915d3187e07da41d88c", + "revCount": 15501, + "type": "git", + "url": "https://git@git.lix.systems/lix-project/lix" + }, + "original": { + "ref": "refs/tags/2.90-beta.1", + "type": "git", + "url": "https://git@git.lix.systems/lix-project/lix" + } + }, + "lix-module": { + "inputs": { + "flake-utils": "flake-utils", + "flakey-profile": "flakey-profile", + "lix": [ + "lix" + ], + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1714868057, + "narHash": "sha256-Q9vGkxmuarySjPKO6yixjZ0tkaVIQS2wU9FpCpDA7+I=", + "ref": "refs/heads/main", + "rev": "e31baf57680bab449ab5b40179cc4a08a99f5314", + "revCount": 62, + "type": "git", + "url": "https://git.lix.systems/lix-project/nixos-module" + }, + "original": { + "type": "git", + "url": "https://git.lix.systems/lix-project/nixos-module" + } + }, "mac-brcm-fw": { "flake": false, "locked": { @@ -92,11 +167,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1713537308, - "narHash": "sha256-XtTSSIB2DA6tOv+l0FhvfDMiyCmhoRbNB+0SeInZkbk=", + "lastModified": 1714906307, + "narHash": "sha256-UlRZtrCnhPFSJlDQE7M0eyhgvuuHBTe1eJ9N9AQlJQ0=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "5c24cf2f0a12ad855f444c30b2421d044120c66f", + "rev": "25865a40d14b3f9cf19f19b924e2ab4069b09588", "type": "github" }, "original": { @@ -107,11 +182,11 @@ }, "nixpkgs-stable": { "locked": { - "lastModified": 1713344939, - "narHash": "sha256-jpHkAt0sG2/J7ueKnG7VvLLkBYUMQbXQ2L8OBpVG53s=", + "lastModified": 1714782413, + "narHash": "sha256-tbg0MEuKaPcUrnmGCu4xiY5F+7LW2+ECPKVAJd2HLwM=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "e402c3eb6d88384ca6c52ef1c53e61bdc9b84ddd", + "rev": "651b4702e27a388f0f18e1b970534162dec09aff", "type": "github" }, "original": { @@ -122,11 +197,11 @@ }, "nixpkgs-unstable-small": { "locked": { - "lastModified": 1713597487, - "narHash": "sha256-bD+FqUZidTjHblGjK+2LpIaHBmo1THF1HW3o4ZBqmrw=", + "lastModified": 1715010189, + "narHash": "sha256-VG/ax2TLmsF0G8M3Q/lE0P7U/pzky8NScim8ZGmIfAY=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "c0f9060ec3937d5a7cf3ce6c698e14d989b453e5", + "rev": "95269ee8dbc9daacad586e8ad87567369a7e1042", "type": "github" }, "original": { @@ -140,6 +215,8 @@ "crane": "crane", "fenix": "fenix", "home-manager": "home-manager", + "lix": "lix", + "lix-module": "lix-module", "mac-brcm-fw": "mac-brcm-fw", "nixos-hardware": "nixos-hardware", "nixpkgs": "nixpkgs", @@ -150,11 +227,11 @@ "rust-analyzer-src": { "flake": false, "locked": { - "lastModified": 1713559870, - "narHash": "sha256-HsVa+QM2vMra80OjnjH7JhdvLeJuMdR4sxBNHJveMe4=", + "lastModified": 1714936835, + "narHash": "sha256-M+PpgfRMBfHo8Jb2ou/s3maAZbps0XnuHXQU9Hv9vL0=", "owner": "rust-lang", "repo": "rust-analyzer", - "rev": "c83d8cf5844fff3d6e243ab408669222059af1c6", + "rev": "c4618fe14d39992fbbb85c2d6cad028a232c13d2", "type": "github" }, "original": { @@ -163,6 +240,21 @@ "repo": "rust-analyzer", "type": "github" } + }, + "systems": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } } }, "root": "root", diff --git a/flake.nix b/flake.nix index caba18a..a72ed00 100644 --- a/flake.nix +++ b/flake.nix @@ -5,6 +5,15 @@ nixpkgs.url = "nixpkgs/nixos-unstable"; nixpkgs-stable.url = "nixpkgs/nixos-23.11"; nixpkgs-unstable-small.url = "nixpkgs/nixos-unstable-small"; + lix = { + url = "git+https://git@git.lix.systems/lix-project/lix?ref=refs/tags/2.90-beta.1"; + flake = false; + }; + lix-module = { + url = "git+https://git.lix.systems/lix-project/nixos-module"; + inputs.lix.follows = "lix"; + inputs.nixpkgs.follows = "nixpkgs"; + }; home-manager = { url = "github:nix-community/home-manager"; inputs.nixpkgs.follows = "nixpkgs"; @@ -17,7 +26,6 @@ crane = { url = "github:ipetkov/crane"; inputs = { - flake-utils.follows = "flake-utils"; nixpkgs.follows = "nixpkgs"; }; }; @@ -32,6 +40,7 @@ nixpkgs, nixpkgs-stable, nixpkgs-unstable-small, + lix-module, home-manager, nixos-hardware, mac-brcm-fw, @@ -82,7 +91,7 @@ nixosConfigurations = { monosodium-glutamate-g = nixpkgs.lib.nixosSystem { specialArgs = { - inherit inputs pkgs-unstable-small pkgs-stable rs-programs; + inherit inputs pkgs-unstable-small pkgs-stable rs-programs lix-module; }; system = "x86_64-linux"; modules = [ @@ -107,7 +116,7 @@ }; catbook-j = nixpkgs.lib.nixosSystem { specialArgs = { - inherit inputs pkgs-unstable-small pkgs-stable rs-programs; + inherit inputs pkgs-unstable-small pkgs-stable rs-programs lix-module; }; system = "x86_64-linux"; modules = [ @@ -132,7 +141,7 @@ }; potatobook-g = nixpkgs.lib.nixosSystem { specialArgs = { - inherit inputs pkgs-unstable-small rs-programs; + inherit inputs pkgs-unstable-small rs-programs lix-module; }; system = "x86_64-linux"; modules = [ From caaa7c7c6baaa522dfa90b08df58c20602f645d1 Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Mon, 6 May 2024 21:32:14 +0200 Subject: [PATCH 070/301] fix deprecation warnings --- hosts/catbook-j/configuration.nix | 2 +- hosts/catbook-j/modules/input.nix | 2 +- hosts/potatobook-g/configuration.nix | 7 ++++--- modules/desktop/creative.nix | 7 ++++++- modules/desktop/default.nix | 3 +-- modules/desktop/themeing.nix | 2 +- modules/desktop/x.nix | 3 ++- modules/input/default.nix | 13 +++++++------ 8 files changed, 23 insertions(+), 16 deletions(-) diff --git a/hosts/catbook-j/configuration.nix b/hosts/catbook-j/configuration.nix index 81a0966..a380743 100644 --- a/hosts/catbook-j/configuration.nix +++ b/hosts/catbook-j/configuration.nix @@ -78,7 +78,7 @@ }; boot.kernelPackages = pkgs.linuxPackages_zen; - services.xserver.displayManager.autoLogin = { + services.displayManager.autoLogin = { enable = true; user = "jade"; }; diff --git a/hosts/catbook-j/modules/input.nix b/hosts/catbook-j/modules/input.nix index 7043eec..f6d8fee 100644 --- a/hosts/catbook-j/modules/input.nix +++ b/hosts/catbook-j/modules/input.nix @@ -23,5 +23,5 @@ sensitivity = 256; }; - services.xserver.libinput.touchpad.tapping = false; + services.libinput.touchpad.tapping = false; } diff --git a/hosts/potatobook-g/configuration.nix b/hosts/potatobook-g/configuration.nix index c45c889..530f8db 100644 --- a/hosts/potatobook-g/configuration.nix +++ b/hosts/potatobook-g/configuration.nix @@ -65,9 +65,10 @@ boot.loader.systemd-boot.enable = true; boot.loader.efi.canTouchEfiVariables = true; - services.xserver.libinput.touchpad.disableWhileTyping = true; - services.xserver.libinput.touchpad.tapping = false; - + services.libinput.touchpad = { + disableWhileTyping = true; + tapping = false; + }; networking.networkmanager.enable = true; networking.hostName = "potatobook-g"; diff --git a/modules/desktop/creative.nix b/modules/desktop/creative.nix index 2eebca9..0828381 100644 --- a/modules/desktop/creative.nix +++ b/modules/desktop/creative.nix @@ -1,4 +1,8 @@ -{pkgs, ...}: { +{ + pkgs, + pkgs-stable, + ... +}: { home-manager.users.jade = {pkgs, ...}: { home.packages = with pkgs; [ audacity @@ -18,6 +22,7 @@ openscad-unstable openscad-lsp + pkgs-stable.font-manager fontforge-gtk onlyoffice-bin_latest diff --git a/modules/desktop/default.nix b/modules/desktop/default.nix index bb04410..7f91df6 100644 --- a/modules/desktop/default.nix +++ b/modules/desktop/default.nix @@ -67,7 +67,7 @@ in services.illum.enable = true; services.avahi = { enable = true; - nssmdns = true; + nssmdns4 = true; openFirewall = true; }; services.smartd = { @@ -124,7 +124,6 @@ in jellyfin-media-player # from environment.systemPackages cleanup - font-manager xdotool xorg.xwininfo gparted diff --git a/modules/desktop/themeing.nix b/modules/desktop/themeing.nix index b310287..c5eb7d8 100644 --- a/modules/desktop/themeing.nix +++ b/modules/desktop/themeing.nix @@ -37,7 +37,7 @@ }; qt = { enable = true; - platformTheme = "gtk"; + platformTheme.name = "gtk"; }; }; }; diff --git a/modules/desktop/x.nix b/modules/desktop/x.nix index dab34ec..50f9666 100644 --- a/modules/desktop/x.nix +++ b/modules/desktop/x.nix @@ -7,7 +7,6 @@ }; displayManager = { - defaultSession = "none+xmonad"; gdm.enable = true; }; @@ -15,4 +14,6 @@ enable = true; }; }; + + services.displayManager.defaultSession = "none+xmonad"; } diff --git a/modules/input/default.nix b/modules/input/default.nix index 88302da..62b0ec9 100644 --- a/modules/input/default.nix +++ b/modules/input/default.nix @@ -2,14 +2,15 @@ imports = [ ./evremap.nix ]; - services.xserver = { - xkb = { - layout = "us"; - variant = "altgr-intl"; - }; - + services = { libinput = { enable = true; }; + xserver = { + xkb = { + layout = "us"; + variant = "altgr-intl"; + }; + }; }; } From 73bbc7c616e0e4d8bde3fbbbedaf431410661d71 Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Mon, 6 May 2024 21:33:14 +0200 Subject: [PATCH 071/301] jrnl: shorten command and add inquire --- programs/jrnl/Cargo.toml | 3 ++- programs/jrnl/src/commands/add_entry.rs | 12 ++---------- 2 files changed, 4 insertions(+), 11 deletions(-) diff --git a/programs/jrnl/Cargo.toml b/programs/jrnl/Cargo.toml index 12f231a..8e3044a 100644 --- a/programs/jrnl/Cargo.toml +++ b/programs/jrnl/Cargo.toml @@ -1,5 +1,5 @@ [package] -name = "jrnl" +name = "j" version = "0.1.0" edition = "2021" @@ -15,3 +15,4 @@ petgraph = "0.6.4" ratatui = "0.26.2" temp-file = "0.1.8" termsize = "0.1.6" +inquire = "0.7.5" diff --git a/programs/jrnl/src/commands/add_entry.rs b/programs/jrnl/src/commands/add_entry.rs index 8dd1b92..c7f78db 100644 --- a/programs/jrnl/src/commands/add_entry.rs +++ b/programs/jrnl/src/commands/add_entry.rs @@ -6,6 +6,7 @@ use std::{ process::Command, }; +use inquire::Text; use temp_file::{TempFile, TempFileBuilder}; use crate::md::{Entry, ToMd}; @@ -17,7 +18,7 @@ pub fn add_entry(path: PathBuf, title: Option) -> io::Result<()> { std::process::exit(1); } - let title = prompt("Title")?; + let title = Text::new("Title").prompt().unwrap(); let tmp = TempFileBuilder::new() .suffix(".jrnl-entry.md") @@ -57,12 +58,3 @@ pub fn add_entry(path: PathBuf, title: Option) -> io::Result<()> { Ok(()) } - -fn prompt(title: &str) -> io::Result { - print!("{}: ", title); - let _ = io::stdout().flush(); - let mut buf = String::new(); - let stdin = io::stdin(); - stdin.read_line(&mut buf)?; - Ok(buf) -} From a3777bd73a1e70f8ab7379ad17aa4e2dde0b6f5a Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Mon, 6 May 2024 21:33:30 +0200 Subject: [PATCH 072/301] change editor timeout to 200ms --- modules/shell/helix.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/shell/helix.nix b/modules/shell/helix.nix index 5055a35..7f025b3 100644 --- a/modules/shell/helix.nix +++ b/modules/shell/helix.nix @@ -48,7 +48,7 @@ "file-encoding" "file-type" ]; - idle-timeout = 30; + idle-timeout = 200; indent-guides = { render = true; character = "│"; From e64935cf002212dd5ba341099b71e8ae3e521aec Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Mon, 6 May 2024 21:49:11 +0200 Subject: [PATCH 073/301] fix crane warnings --- flake.nix | 2 ++ 1 file changed, 2 insertions(+) diff --git a/flake.nix b/flake.nix index a72ed00..89bffb8 100644 --- a/flake.nix +++ b/flake.nix @@ -70,6 +70,8 @@ # cargoLock.lockFile = ./programs/jrnl/Cargo.lock; # }; s10e-jrnl = crane-lib.buildPackage { + pname = "s10e-bs"; + version = "0.0.1"; src = crane-lib.cleanCargoSource (crane-lib.path ./.); }; }; From 093fe30d752f4bd52554888e2f7c457c97ab011a Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Mon, 6 May 2024 21:49:22 +0200 Subject: [PATCH 074/301] fix unused markdown uses --- programs/jrnl/src/md.rs | 1 - 1 file changed, 1 deletion(-) diff --git a/programs/jrnl/src/md.rs b/programs/jrnl/src/md.rs index 8453c77..234666e 100644 --- a/programs/jrnl/src/md.rs +++ b/programs/jrnl/src/md.rs @@ -1,5 +1,4 @@ use chrono::{DateTime, FixedOffset}; -use markdown::{Block, Span}; use std::convert::identity; pub trait ToMd { From 81246671df3acc577f60f3c837624d9e07287336 Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Wed, 12 Jun 2024 11:11:13 +0200 Subject: [PATCH 075/301] setup sway --- modules/desktop-environment/home/default.nix | 1 + .../desktop-environment/home/sway/default.nix | 166 ++++++++++++++++++ modules/desktop/x.nix | 9 +- 3 files changed, 175 insertions(+), 1 deletion(-) create mode 100644 modules/desktop-environment/home/sway/default.nix diff --git a/modules/desktop-environment/home/default.nix b/modules/desktop-environment/home/default.nix index 6891b94..9ea2526 100644 --- a/modules/desktop-environment/home/default.nix +++ b/modules/desktop-environment/home/default.nix @@ -6,6 +6,7 @@ ./compositing.nix ./panels ./xmonad + ./sway ]; }; } diff --git a/modules/desktop-environment/home/sway/default.nix b/modules/desktop-environment/home/sway/default.nix new file mode 100644 index 0000000..d7f849e --- /dev/null +++ b/modules/desktop-environment/home/sway/default.nix @@ -0,0 +1,166 @@ +{ + pkgs, + lib, + config, + ... +}: { + programs.wofi.enable = true; + wayland.windowManager.sway = { + enable = true; + config = { + modes = { + resize = { + Down = "resize grow height 10 px"; + Escape = "mode default"; + Left = "resize shrink width 10 px"; + Return = "mode default"; + Right = "resize grow width 10 px"; + Up = "resize shrink height 10 px"; + h = "resize shrink width 10 px"; + j = "resize grow height 10 px"; + k = "resize shrink height 10 px"; + l = "resize grow width 10 px"; + }; + }; + output = { + "*" = { + bg = "${../xmonad/wallpaper/wallpaper.jpg} fill"; + }; + }; + input = { + "*" = { + xkb_layout = "us"; + xkb_variant = "altgr-intl"; + }; + }; + menu = "wofi -d"; + modifier = "Mod4"; + keybindings = with { + #mod = config.xsession.windowManager.i3.config.modifier; + # mod = "Mod1"; + mod = config.wayland.windowManager.sway.config.modifier; + }; + lib.mkOptionDefault { + # switch window focus + "${mod}+h" = "focus left"; + "${mod}+j" = "focus down"; + "${mod}+k" = "focus up"; + "${mod}+l" = "focus right"; + # move windows + "${mod}+Shift+h" = "move left"; + "${mod}+Shift+j" = "move down"; + "${mod}+Shift+k" = "move up"; + "${mod}+Shift+l" = "move right"; + # layout shit + "${mod}+shift+semicolon" = "split h"; + "${mod}+semicolon" = "split v"; + "${mod}+f" = "fullscreen toggle"; + "${mod}+Shift+w" = "layout tabbed"; + "${mod}+e" = "layout toggle split"; + "${mod}+Shift+space" = "floating toggle"; + # focus parents/children + # "${mod}+Shift+a" = "focus parent"; + # "${mod}+Shift+c" = "focus child"; + # screenshot + # "${mod}+w" = "exec window-screenshot.sh"; + # "${mod}+s" = "exec flameshot gui -c -p $HOME/Pictures/screenshots"; + # "${mod}+a" = "exec flameshot screen -c -p $HOME/Pictures/screenshots"; + # "${mod}+t" = "exec ocr-screenshot.sh"; + + # rofi fuckery + "${mod}+d" = "exec wofi -S drun --allow-images"; + "${mod}+i" = "exec rofimoji --selector wofi -f alchemical_symbols anatolian_hieroglyphs emojis braille_patterns box_drawing chess_symbols emoticons geometric_shapes gothic greek_extended math mathematical_alphanumeric_symbols mathematical_operators miscellaneous_symbols miscellaneous_mathematical_symbols-a miscellaneous_mathematical_symbols-b miscellaneous_symbols_and_arrows miscellaneous_symbols_and_pictographs miscellaneous_technical modi modifier_tone_letters musical_symbols nerd_font number_forms shorthand_format_controls specials variation_selectors vertical_forms -a copy"; + # TODO: wayland + # "${mod}+d" = "exec --no-startup-id rofi -show drun -theme ${../../other/rofi-themes/applauncher.rasi}"; + # "${mod}+space" = "exec --no-startup-id rofi -show combi -combi-show window#run -modes combi -theme ${../../other/rofi-themes/applauncher.rasi}"; + # "${mod}+i" = "exec --no-startup-id rofimoji -f alchemical_symbols anatolian_hieroglyphs emojis braille_patterns box_drawing chess_symbols emoticons geometric_shapes gothic greek_extended math mathematical_alphanumeric_symbols mathematical_operators miscellaneous_symbols miscellaneous_mathematical_symbols-a miscellaneous_mathematical_symbols-b miscellaneous_symbols_and_arrows miscellaneous_symbols_and_pictographs miscellaneous_technical modi modifier_tone_letters musical_symbols nerd_font number_forms shorthand_format_controls specials variation_selectors vertical_forms -a copy"; + # "${mod}+Shift+e" = "exec --no-startup-id rofi -show \"desktopctl\" -modes \"desktopctl:${desktop-ctl.outPath}/bin/desktopctl\" -theme ${../../other/rofi-themes/applauncher.rasi}"; + # "${mod}+m" = "exec --no-startup-id menu-qalc"; + + # "${mod}+o" = "exec --no-startup-id rofi -show searchwolf -modes \"searchwolf:${searchwolf.outPath}/bin/searchwolf\""; + + # audio + "XF86AudioRaiseVolume" = "exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ +10% && $refresh_i3status"; + "XF86AudioLowerVolume" = "exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ -10% && $refresh_i3status"; + "XF86AudioMute" = "exec --no-startup-id pactl set-sink-mute @DEFAULT_SINK@ toggle && $refresh_i3status"; + "XF86AudioMicMute" = "exec --no-startup-id pactl set-source-mute @DEFAULT_SOURCE@ toggle && $refresh_i3status"; + + "XF86AudioNext" = "exec playerctl next"; + "XF86AudioPrev" = "exec playerctl previous"; + "XF86AudioPause" = "exec playerctl pause"; + "XF86AudioPlay" = "exec playerctl play"; + "XF86AudioStop" = "exec playerctl stop"; + + "XF86MonBrightnessUp" = "exec brightnessctl set 5%+"; + "XF86MonBrightnessDown" = "exec brightnessctl set 5%-"; + + "XF86KbdBrightnessUp" = "exec brillo -kA 10.0"; + "XF86KbdBrightnessDown" = "exec brillo -kU 10.0"; + + # macros + # "${mod}+q" = "exec em-record.sh"; + # "${mod}+p" = "exec em-play.sh"; + # "${mod}+Shift+p" = "exec em-play-loop.sh"; + + # permaclip + # "${mod}+c" = "exec rofi -show register -modes \"register:${pc-set.outPath}/bin/pc-set.sh\" -theme gruvbox-dark"; + # "${mod}+v" = "exec rofi -show register -modes \"register:${pc-get.outPath}/bin/pc-get.sh\" -theme gruvbox-dark"; + }; + fonts = { + names = ["Atkinson Hyperlegible"]; + style = "Regular"; + size = 9.0; + }; + gaps = { + #top = 24; + inner = 15; + outer = 0; + smartGaps = true; + smartBorders = "on"; + }; + colors = { + background = "#1d2021"; + focused = { + background = "#282828"; + border = "#504945"; + childBorder = "#7c6f64"; + indicator = "#504945"; + text = "#ebdbb2"; + }; + focusedInactive = { + background = "#1d2021"; + border = "#504945"; + childBorder = "#665c54"; + indicator = "#664c54"; + text = "#d5c4a1"; + }; + placeholder = { + background = "#1d2021"; + border = "#00ff00"; + childBorder = "#504945"; + indicator = "#504945"; + text = "#928374"; + }; + unfocused = { + background = "#1d2021"; + border = "#3c3836"; + childBorder = "#504945"; + indicator = "#504945"; + text = "#bdae93"; + }; + urgent = { + background = "#9d0006"; + border = "#cc241d"; + childBorder = "#3c3836"; + indicator = "#fb4943"; + text = "#ebdbb2"; + }; + }; + + window = { + border = 2; + titlebar = true; + }; + }; + }; +} diff --git a/modules/desktop/x.nix b/modules/desktop/x.nix index 50f9666..1bd4586 100644 --- a/modules/desktop/x.nix +++ b/modules/desktop/x.nix @@ -1,4 +1,4 @@ -{...}: { +{pkgs, ...}: { services.xserver = { enable = true; @@ -8,6 +8,10 @@ displayManager = { gdm.enable = true; + sessionPackages = [ + pkgs.sway + ]; + gdm.autoLogin.delay = 5; }; windowManager.xmonad = { @@ -15,5 +19,8 @@ }; }; + security.polkit.enable = true; + programs.sway.enable = true; + services.displayManager.defaultSession = "none+xmonad"; } From 8c81b94e47184c35250761bf0c4b4be4b9e24079 Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Wed, 12 Jun 2024 13:23:20 +0200 Subject: [PATCH 076/301] helix inline diags --- flake.nix | 14 +++++++++++--- modules/shell/helix.nix | 15 ++++++++++++--- 2 files changed, 23 insertions(+), 6 deletions(-) diff --git a/flake.nix b/flake.nix index 89bffb8..52c8181 100644 --- a/flake.nix +++ b/flake.nix @@ -5,6 +5,13 @@ nixpkgs.url = "nixpkgs/nixos-unstable"; nixpkgs-stable.url = "nixpkgs/nixos-23.11"; nixpkgs-unstable-small.url = "nixpkgs/nixos-unstable-small"; + helix-inline-diags = { + url = "github:pascalkuthe/helix/inline-diagnostics"; + inputs = { + crane.follows = "crane"; + nixpkgs.follows = "nixpkgs"; + }; + }; lix = { url = "git+https://git@git.lix.systems/lix-project/lix?ref=refs/tags/2.90-beta.1"; flake = false; @@ -40,6 +47,7 @@ nixpkgs, nixpkgs-stable, nixpkgs-unstable-small, + helix-inline-diags, lix-module, home-manager, nixos-hardware, @@ -93,7 +101,7 @@ nixosConfigurations = { monosodium-glutamate-g = nixpkgs.lib.nixosSystem { specialArgs = { - inherit inputs pkgs-unstable-small pkgs-stable rs-programs lix-module; + inherit inputs pkgs-unstable-small pkgs-stable rs-programs lix-module helix-inline-diags; }; system = "x86_64-linux"; modules = [ @@ -118,7 +126,7 @@ }; catbook-j = nixpkgs.lib.nixosSystem { specialArgs = { - inherit inputs pkgs-unstable-small pkgs-stable rs-programs lix-module; + inherit inputs pkgs-unstable-small pkgs-stable rs-programs lix-module helix-inline-diags; }; system = "x86_64-linux"; modules = [ @@ -143,7 +151,7 @@ }; potatobook-g = nixpkgs.lib.nixosSystem { specialArgs = { - inherit inputs pkgs-unstable-small rs-programs lix-module; + inherit inputs pkgs-unstable-small rs-programs lix-module helix-inline-diags; }; system = "x86_64-linux"; modules = [ diff --git a/modules/shell/helix.nix b/modules/shell/helix.nix index 7f025b3..36d3e41 100644 --- a/modules/shell/helix.nix +++ b/modules/shell/helix.nix @@ -1,4 +1,8 @@ -{config, ...}: { +{ + config, + helix-inline-diags, + ... +}: { home-manager.users.jade = {pkgs, ...}: { home = { sessionVariables.EDITOR = "hx"; @@ -12,7 +16,7 @@ }; programs.helix = { enable = true; - package = pkgs.helix; + package = helix-inline-diags.outputs.packages."x86_64-linux".default; settings = { theme = "gruvbox"; editor = { @@ -22,6 +26,11 @@ cursorline = true; auto-save = true; auto-format = true; + end-of-line-diagnostics = "hint"; + inline-diagnostics = { + cursor-line = "hint"; + other-lines = "error"; + }; lsp = { display-messages = true; display-inlay-hints = true; @@ -48,7 +57,7 @@ "file-encoding" "file-type" ]; - idle-timeout = 200; + idle-timeout = 50; indent-guides = { render = true; character = "│"; From e3767b54413b82c790724b81a45ca9587908fb74 Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Wed, 12 Jun 2024 13:24:47 +0200 Subject: [PATCH 077/301] fix hw key --- common.nix | 1 + modules/desktop-environment/home/default.nix | 6 ++++++ 2 files changed, 7 insertions(+) diff --git a/common.nix b/common.nix index 128ecb2..2d1320d 100644 --- a/common.nix +++ b/common.nix @@ -115,6 +115,7 @@ with builtins; { mtr.enable = true; }; + hardware.gpgSmartcards.enable = true; time.timeZone = "Europe/Berlin"; home-manager.users.jade = { diff --git a/modules/desktop-environment/home/default.nix b/modules/desktop-environment/home/default.nix index 9ea2526..b9f6429 100644 --- a/modules/desktop-environment/home/default.nix +++ b/modules/desktop-environment/home/default.nix @@ -8,5 +8,11 @@ ./xmonad ./sway ]; + + services.gpg-agent = { + enable = true; + enableNushellIntegration = true; + enableSshSupport = true; + }; }; } From a20ee22543e65479fa32b0dfacee57ee384ff0c4 Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Wed, 12 Jun 2024 13:25:10 +0200 Subject: [PATCH 078/301] fix home manager search alias --- modules/desktop/firefox.nix | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/modules/desktop/firefox.nix b/modules/desktop/firefox.nix index d28dc70..37c5cd6 100644 --- a/modules/desktop/firefox.nix +++ b/modules/desktop/firefox.nix @@ -82,12 +82,16 @@ "Home manager Options" = { urls = [ { - template = "https://mipmip.github.io/home-manager-option-search/"; + template = "https://home-manager-options.extranix.com/"; params = [ { name = "query"; value = "{searchTerms}"; } + { + name = "release"; + value = "master"; + } ]; } ]; From 11d200f60bcc50954198c925964b7a6a5db98de9 Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Wed, 12 Jun 2024 13:25:51 +0200 Subject: [PATCH 079/301] more sway stuff --- modules/desktop-environment/home/sway/default.nix | 10 ++++++++++ modules/desktop/x.nix | 5 +++-- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/modules/desktop-environment/home/sway/default.nix b/modules/desktop-environment/home/sway/default.nix index d7f849e..0aafe8e 100644 --- a/modules/desktop-environment/home/sway/default.nix +++ b/modules/desktop-environment/home/sway/default.nix @@ -5,8 +5,17 @@ ... }: { programs.wofi.enable = true; + programs.swaylock.enable = true; + wayland.windowManager.sway = { enable = true; + systemd = { + enable = true; + }; + wrapperFeatures = { + base = true; + gtk = true; + }; config = { modes = { resize = { @@ -22,6 +31,7 @@ l = "resize grow width 10 px"; }; }; + terminal = "kitty"; output = { "*" = { bg = "${../xmonad/wallpaper/wallpaper.jpg} fill"; diff --git a/modules/desktop/x.nix b/modules/desktop/x.nix index 1bd4586..8ea697b 100644 --- a/modules/desktop/x.nix +++ b/modules/desktop/x.nix @@ -20,7 +20,8 @@ }; security.polkit.enable = true; - programs.sway.enable = true; + # programs.sway.enable = true; - services.displayManager.defaultSession = "none+xmonad"; + # services.displayManager.defaultSession = "none+xmonad"; + services.displayManager.defaultSession = "sway"; } From b3fe297a4a0540b5d01f6b348a8825b32b07dd27 Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Wed, 12 Jun 2024 13:26:05 +0200 Subject: [PATCH 080/301] add logseq --- modules/desktop/default.nix | 2 ++ 1 file changed, 2 insertions(+) diff --git a/modules/desktop/default.nix b/modules/desktop/default.nix index 7f91df6..152db4e 100644 --- a/modules/desktop/default.nix +++ b/modules/desktop/default.nix @@ -169,6 +169,8 @@ in mupdf inotify-tools + + logseq ]; xsession = { enable = true; From 5a1252da4b5f021106d82c4603432500dc92cd85 Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Wed, 12 Jun 2024 13:26:34 +0200 Subject: [PATCH 081/301] update nushell stuff --- common.nix | 3 ++- modules/shell/nu.nix | 5 +++++ other/config.nu | 38 +++++++++++++++++++++++++++++++++++++- 3 files changed, 44 insertions(+), 2 deletions(-) diff --git a/common.nix b/common.nix index 2d1320d..dafa9d7 100644 --- a/common.nix +++ b/common.nix @@ -116,6 +116,7 @@ with builtins; { }; hardware.gpgSmartcards.enable = true; + time.timeZone = "Europe/Berlin"; home-manager.users.jade = { @@ -156,5 +157,5 @@ with builtins; { algorithm = "zstd"; }; - users.defaultUserShell = pkgs.nushellFull; + users.defaultUserShell = pkgs.nushell; } diff --git a/modules/shell/nu.nix b/modules/shell/nu.nix index 24d3e6a..f338d7e 100644 --- a/modules/shell/nu.nix +++ b/modules/shell/nu.nix @@ -11,6 +11,11 @@ }; home.packages = [ pkgs.pueue + pkgs.nushellPlugins.net + pkgs.nushellPlugins.query + pkgs.nushellPlugins.gstat + pkgs.nushellPlugins.polars + pkgs.nushellPlugins.formats ]; programs.nushell = { enable = true; diff --git a/other/config.nu b/other/config.nu index 0f359b5..9435b28 100644 --- a/other/config.nu +++ b/other/config.nu @@ -42,6 +42,7 @@ let dark_theme = { shape_directory: cyan shape_external: cyan shape_externalarg: green_bold + shape_external_resolved: light_cyan_bold shape_filepath: cyan shape_flag: blue_bold shape_float: purple_bold @@ -238,7 +239,36 @@ $env.config = { use_ansi_coloring: true bracketed_paste: true # enable bracketed paste, currently useless on windows edit_mode: vi # emacs, vi - shell_integration: true # enables terminal shell integration. Off by default, as some terminals have issues with this. + shell_integration: { + # osc2 abbreviates the path if in the home_dir, sets the tab/window title, shows the running command in the tab/window title + osc2: true + # osc7 is a way to communicate the path to the terminal, this is helpful for spawning new tabs in the same directory + osc7: true + # osc8 is also implemented as the deprecated setting ls.show_clickable_links, it shows clickable links in ls output if your terminal supports it. show_clickable_links is deprecated in favor of osc8 + osc8: true + # osc9_9 is from ConEmu and is starting to get wider support. It's similar to osc7 in that it communicates the path to the terminal + osc9_9: false + # osc133 is several escapes invented by Final Term which include the supported ones below. + # 133;A - Mark prompt start + # 133;B - Mark prompt end + # 133;C - Mark pre-execution + # 133;D;exit - Mark execution finished with exit code + # This is used to enable terminals to know where the prompt is, the command is, where the command finishes, and where the output of the command is + osc133: true + # osc633 is closely related to osc133 but only exists in visual studio code (vscode) and supports their shell integration features + # 633;A - Mark prompt start + # 633;B - Mark prompt end + # 633;C - Mark pre-execution + # 633;D;exit - Mark execution finished with exit code + # 633;E - NOT IMPLEMENTED - Explicitly set the command line with an optional nonce + # 633;P;Cwd= - Mark the current working directory and communicate it to the terminal + # and also helps with the run recent menu in vscode + osc633: false + # reset_application_mode is escape \x1b[?1l and was added to help ssh work better + reset_application_mode: true + } + use_kitty_protocol: false + highlight_resolved_externals: true render_right_prompt_on_last_line: false # true or false to enable or disable right prompt to be rendered on last line of the prompt. hooks: { @@ -781,6 +811,12 @@ def start_zellij [] { start_zellij +# plugin add nu_plugin_net +# plugin add nu_plugin_gstat +# plugin add nu_plugin_query +# plugin add nu_plugin_polars +# plugin add nu_plugin_formats + def nsp [ ...programs: string ] { From f05b49fa81c8015a303093210b8e86ac51a7d067 Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Wed, 12 Jun 2024 13:27:57 +0200 Subject: [PATCH 082/301] flake.lock: Update --- flake.lock | 137 +++++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 111 insertions(+), 26 deletions(-) diff --git a/flake.lock b/flake.lock index c245eab..1b02b89 100644 --- a/flake.lock +++ b/flake.lock @@ -7,11 +7,11 @@ ] }, "locked": { - "lastModified": 1714864355, - "narHash": "sha256-uXNW6bapWFfkYIkK1EagydSrFMqycOYEDSq75GmUpjk=", + "lastModified": 1718078026, + "narHash": "sha256-LbQabH6h86ZzTvDnaZHmMwedRZNB2jYtUQzmoqWQoJ8=", "owner": "ipetkov", "repo": "crane", - "rev": "442a7a6152f49b907e73206dc8e1f46a61e8e873", + "rev": "a3f0c63eed74a516298932b9b1627dd80b9c3892", "type": "github" }, "original": { @@ -28,11 +28,11 @@ "rust-analyzer-src": "rust-analyzer-src" }, "locked": { - "lastModified": 1714976745, - "narHash": "sha256-SAYU6uaVcUmckp/RFxkndz7u7eX1D69piTIMmAAop6Y=", + "lastModified": 1717827974, + "narHash": "sha256-ixopuTeTouxqTxfMuzs6IaRttbT8JqRW5C9Q/57WxQw=", "owner": "nix-community", "repo": "fenix", - "rev": "a291b6ad30f4ec949e6c98dde43d73d2946515c3", + "rev": "ab655c627777ab5f9964652fe23bbb1dfbd687a8", "type": "github" }, "original": { @@ -45,6 +45,24 @@ "inputs": { "systems": "systems" }, + "locked": { + "lastModified": 1709126324, + "narHash": "sha256-q6EQdSeUZOG26WelxqkmR7kArjgWCdw5sfJVHPH/7j8=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "d465f4819400de7c8d874d50b982301f28a84605", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_2": { + "inputs": { + "systems": "systems_2" + }, "locked": { "lastModified": 1710146030, "narHash": "sha256-SZ5L6eA7HJ/nmkzGG7/ISclqe6oZdOZTNoesiInkXPQ=", @@ -74,6 +92,32 @@ "type": "github" } }, + "helix-inline-diags": { + "inputs": { + "crane": [ + "crane" + ], + "flake-utils": "flake-utils", + "nixpkgs": [ + "nixpkgs" + ], + "rust-overlay": "rust-overlay" + }, + "locked": { + "lastModified": 1717871542, + "narHash": "sha256-eUB9gt3Hva7atNOv/Vel1bchD/9Pziz0C/r9K0vh+qQ=", + "owner": "pascalkuthe", + "repo": "helix", + "rev": "418ac237bf1e162b866a873d6cd33bb69f5d1bb4", + "type": "github" + }, + "original": { + "owner": "pascalkuthe", + "ref": "inline-diagnostics", + "repo": "helix", + "type": "github" + } + }, "home-manager": { "inputs": { "nixpkgs": [ @@ -81,11 +125,11 @@ ] }, "locked": { - "lastModified": 1714981474, - "narHash": "sha256-b3/U21CJjCjJKmA9WqUbZGZgCvospO3ArOUTgJugkOY=", + "lastModified": 1717931644, + "narHash": "sha256-Sz8Wh9cAiD5FhL8UWvZxBfnvxETSCVZlqWSYWaCPyu0=", "owner": "nix-community", "repo": "home-manager", - "rev": "6ebe7be2e67be7b9b54d61ce5704f6fb466c536f", + "rev": "3d65009effd77cb0d6e7520b68b039836a7606cf", "type": "github" }, "original": { @@ -113,7 +157,7 @@ }, "lix-module": { "inputs": { - "flake-utils": "flake-utils", + "flake-utils": "flake-utils_2", "flakey-profile": "flakey-profile", "lix": [ "lix" @@ -123,11 +167,11 @@ ] }, "locked": { - "lastModified": 1714868057, - "narHash": "sha256-Q9vGkxmuarySjPKO6yixjZ0tkaVIQS2wU9FpCpDA7+I=", + "lastModified": 1717647344, + "narHash": "sha256-m8XYt8NU2T4gvkien7H7LFGXHhSA5z4tHOeuXQ3DJi4=", "ref": "refs/heads/main", - "rev": "e31baf57680bab449ab5b40179cc4a08a99f5314", - "revCount": 62, + "rev": "4e25f1ab68f2270f9cff59216056c21073db0164", + "revCount": 87, "type": "git", "url": "https://git.lix.systems/lix-project/nixos-module" }, @@ -167,11 +211,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1714906307, - "narHash": "sha256-UlRZtrCnhPFSJlDQE7M0eyhgvuuHBTe1eJ9N9AQlJQ0=", + "lastModified": 1717974879, + "narHash": "sha256-GTO3C88+5DX171F/gVS3Qga/hOs/eRMxPFpiHq2t+D8=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "25865a40d14b3f9cf19f19b924e2ab4069b09588", + "rev": "c7b821ba2e1e635ba5a76d299af62821cbcb09f3", "type": "github" }, "original": { @@ -182,11 +226,11 @@ }, "nixpkgs-stable": { "locked": { - "lastModified": 1714782413, - "narHash": "sha256-tbg0MEuKaPcUrnmGCu4xiY5F+7LW2+ECPKVAJd2HLwM=", + "lastModified": 1718060059, + "narHash": "sha256-9XKFni8VMXo81RTq9XygCyaO3I/7UKpwIlM/yn0MdcM=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "651b4702e27a388f0f18e1b970534162dec09aff", + "rev": "a3c8d64ba846725f040582b2d3b875466d2115bd", "type": "github" }, "original": { @@ -197,11 +241,11 @@ }, "nixpkgs-unstable-small": { "locked": { - "lastModified": 1715010189, - "narHash": "sha256-VG/ax2TLmsF0G8M3Q/lE0P7U/pzky8NScim8ZGmIfAY=", + "lastModified": 1718083092, + "narHash": "sha256-EQsPXycAbmby4meQUNLYfFaGOiqz2J9AlwFRV4UiHnY=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "95269ee8dbc9daacad586e8ad87567369a7e1042", + "rev": "aa1ebdaf49a606e21c06e0f6ed7aece9a41831c3", "type": "github" }, "original": { @@ -214,6 +258,7 @@ "inputs": { "crane": "crane", "fenix": "fenix", + "helix-inline-diags": "helix-inline-diags", "home-manager": "home-manager", "lix": "lix", "lix-module": "lix-module", @@ -227,11 +272,11 @@ "rust-analyzer-src": { "flake": false, "locked": { - "lastModified": 1714936835, - "narHash": "sha256-M+PpgfRMBfHo8Jb2ou/s3maAZbps0XnuHXQU9Hv9vL0=", + "lastModified": 1717583671, + "narHash": "sha256-+lRAmz92CNUxorqWusgJbL9VE1eKCnQQojglRemzwkw=", "owner": "rust-lang", "repo": "rust-analyzer", - "rev": "c4618fe14d39992fbbb85c2d6cad028a232c13d2", + "rev": "48bbdd6a74f3176987d5c809894ac33957000d19", "type": "github" }, "original": { @@ -241,6 +286,31 @@ "type": "github" } }, + "rust-overlay": { + "inputs": { + "flake-utils": [ + "helix-inline-diags", + "flake-utils" + ], + "nixpkgs": [ + "helix-inline-diags", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1709604635, + "narHash": "sha256-le4fwmWmjGRYWwkho0Gr7mnnZndOOe4XGbLw68OvF40=", + "owner": "oxalica", + "repo": "rust-overlay", + "rev": "e86c0fb5d3a22a5f30d7f64ecad88643fe26449d", + "type": "github" + }, + "original": { + "owner": "oxalica", + "repo": "rust-overlay", + "type": "github" + } + }, "systems": { "locked": { "lastModified": 1681028828, @@ -255,6 +325,21 @@ "repo": "default", "type": "github" } + }, + "systems_2": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } } }, "root": "root", From ee44af814e6eafc5006e7c34ade4fe5253b25581 Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Mon, 17 Jun 2024 17:22:03 +0200 Subject: [PATCH 083/301] make swaylock work --- hosts/catbook-j/configuration.nix | 2 ++ modules/desktop/x.nix | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/hosts/catbook-j/configuration.nix b/hosts/catbook-j/configuration.nix index a380743..79de2e1 100644 --- a/hosts/catbook-j/configuration.nix +++ b/hosts/catbook-j/configuration.nix @@ -28,6 +28,8 @@ }; }; + security.pam.services.swaylock = {}; + hardware.usb-modeswitch.enable = true; systemd.services."ModemManager".enable = true; systemd.services."ModemManager".wants = ["NetworkManager.service"]; diff --git a/modules/desktop/x.nix b/modules/desktop/x.nix index 8ea697b..00178fb 100644 --- a/modules/desktop/x.nix +++ b/modules/desktop/x.nix @@ -20,7 +20,7 @@ }; security.polkit.enable = true; - # programs.sway.enable = true; + programs.sway.enable = true; # services.displayManager.defaultSession = "none+xmonad"; services.displayManager.defaultSession = "sway"; From ee901946e2f4c234f13570b14ed12a67fe24de76 Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Tue, 18 Jun 2024 21:06:19 +0200 Subject: [PATCH 084/301] more bar --- modules/desktop-environment/default.nix | 3 + .../desktop-environment/home/sway/default.nix | 109 +++++++++++++++++- 2 files changed, 109 insertions(+), 3 deletions(-) diff --git a/modules/desktop-environment/default.nix b/modules/desktop-environment/default.nix index 3e149b8..59206a0 100644 --- a/modules/desktop-environment/default.nix +++ b/modules/desktop-environment/default.nix @@ -4,4 +4,7 @@ ./flatpak.nix ./home ]; + services.upower = { + enable = true; + }; } diff --git a/modules/desktop-environment/home/sway/default.nix b/modules/desktop-environment/home/sway/default.nix index 0aafe8e..7159b7c 100644 --- a/modules/desktop-environment/home/sway/default.nix +++ b/modules/desktop-environment/home/sway/default.nix @@ -7,6 +7,108 @@ programs.wofi.enable = true; programs.swaylock.enable = true; + programs.waybar = { + enable = true; + systemd = { + enable = true; + target = "sway-session.target"; + }; + settings = { + infobar = { + layer = "top"; + position = "top"; + modules-left = ["memory" "cpu" "network" "group/bats"]; + modules-center = ["sway/window"]; + modules-right = ["clock"]; + "group/bats" = { + orientation = "inherit"; + modules = ["battery#bat0" "battery#bat1" "upower#headphones"]; + }; + "battery#bat0" = { + adapter = "AC"; + bat = "BAT0"; + interval = 2; + format = "{icon} {capacity}% {time}"; + format-charging = "󱐋 {icon} {capacity}% {time}"; + format-time = "{h}:{m}"; + format-icons = [ + "󰁺" + "󰁻" + "󰁼" + "󰁽" + "󰁾" + "󰁿" + "󰂀" + "󰂁" + "󰂂" + "󰁹" + ]; + tooltip = true; + tooltip-format = "BAT0: {cycles} cycles"; + }; + "battery#bat1" = { + adapter = "AC"; + bat = "BAT1"; + interval = 2; + format = "󱐋 {icon} {capacity}% {time}"; + format-time = "{H}:{M}"; + format-icons = [ + "󰁺" + "󰁻" + "󰁼" + "󰁽" + "󰁾" + "󰁿" + "󰂀" + "󰂁" + "󰂂" + "󰁹" + ]; + tooltip = true; + tooltip-format = "BAT1: {cycles} cycles"; + }; + "upower#headphones" = { + native-path = "/org/bluez/hci0/dev_4C_87_5D_29_B3_76"; + format = "󰋋 {percentage} {time}"; + hide-if-empty = true; + show-icon = false; + }; + }; + interactiveBar = { + layer = "top"; + position = "bottom"; + modules-left = ["sway/workspaces" "sway/mode"]; + modules-center = ["tray"]; + modules-right = ["wlr/taskbar"]; + }; + # mainBar = { + # layer = "top"; + # position = "top"; + # height = 30; + # output = [ + # "eDP-1" + # "HDMI-A-1" + # ]; + # modules-left = ["sway/workspaces" "sway/mode" "wlr/taskbar"]; + # modules-center = ["sway/window" "custom/hello-from-waybar"]; + # modules-right = ["mpd" "custom/mymodule#with-css-id" "temperature"]; + + # "sway/workspaces" = { + # disable-scroll = true; + # all-outputs = true; + # }; + # "custom/hello-from-waybar" = { + # format = "hello {}"; + # max-length = 40; + # interval = "once"; + # exec = pkgs.writeShellScript "hello-from-waybar" '' + # echo "from within waybar" + # ''; + # }; + # }; + }; + }; + wayland.windowManager.sway = { enable = true; systemd = { @@ -43,6 +145,7 @@ xkb_variant = "altgr-intl"; }; }; + bars = []; menu = "wofi -d"; modifier = "Mod4"; keybindings = with { @@ -73,8 +176,8 @@ # "${mod}+Shift+c" = "focus child"; # screenshot # "${mod}+w" = "exec window-screenshot.sh"; - # "${mod}+s" = "exec flameshot gui -c -p $HOME/Pictures/screenshots"; - # "${mod}+a" = "exec flameshot screen -c -p $HOME/Pictures/screenshots"; + "${mod}+s" = "exec flameshot gui -c -p $HOME/Pictures/screenshots"; + "${mod}+a" = "exec flameshot screen -c -p $HOME/Pictures/screenshots"; # "${mod}+t" = "exec ocr-screenshot.sh"; # rofi fuckery @@ -169,7 +272,7 @@ window = { border = 2; - titlebar = true; + titlebar = false; }; }; }; From c64f321cc5d42695dbcd0675dfeb129bcb0d0b1b Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Sat, 29 Jun 2024 14:37:41 +0200 Subject: [PATCH 085/301] setup nushell plugins --- modules/shell/nu.nix | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/modules/shell/nu.nix b/modules/shell/nu.nix index f338d7e..88cf0d6 100644 --- a/modules/shell/nu.nix +++ b/modules/shell/nu.nix @@ -22,10 +22,11 @@ package = config.users.defaultUserShell; configFile.source = ../../other/config.nu; envFile.source = ../../other/env.nu; - # extraConfig = '' - # source ${pkgs.nu_scripts}/share/nu_scripts/modules/nix/nix.nu; - # use ${pkgs.nu_scripts}/share/nu_scripts/modules/background_task/job.nu; - # ''; + extraConfig = '' + plugin use ${pkgs.nushellPlugins.query}/bin/nu_plugin_query; + plugin use ${pkgs.nushellPlugins.polars}/bin/nu_plugin_polars; + plugin use ${pkgs.nushellPlugins.formats}/bin/nu_plugin_formats; + ''; }; programs.starship.enableNushellIntegration = true; programs.carapace.enableNushellIntegration = true; From f22a20b08c4709811783a34e1ec29026c3e0181f Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Sun, 28 Jul 2024 20:53:38 +0200 Subject: [PATCH 086/301] add some programs and set up nix auto gc --- common.nix | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/common.nix b/common.nix index dafa9d7..3f8212e 100644 --- a/common.nix +++ b/common.nix @@ -45,6 +45,8 @@ with builtins; { htmlq + prusa-slicer + zed-editor wget git neofetch @@ -158,4 +160,10 @@ with builtins; { }; users.defaultUserShell = pkgs.nushell; + + nix.gc = { + automatic = true; + dates = "weekly"; + options = "--delete-older-than 60d"; + }; } From 020a9276d550e0ae37ebfdd905059431cdcedc9c Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Sun, 28 Jul 2024 20:54:01 +0200 Subject: [PATCH 087/301] sway things (more or less successful) --- .../desktop-environment/home/sway/default.nix | 18 ++++++++++++++++++ modules/desktop/firefox.nix | 1 + 2 files changed, 19 insertions(+) diff --git a/modules/desktop-environment/home/sway/default.nix b/modules/desktop-environment/home/sway/default.nix index 7159b7c..3edfb31 100644 --- a/modules/desktop-environment/home/sway/default.nix +++ b/modules/desktop-environment/home/sway/default.nix @@ -7,6 +7,24 @@ programs.wofi.enable = true; programs.swaylock.enable = true; + xdg.portal = { + enable = true; + extraPortals = [pkgs.xdg-desktop-portal-wlr]; + # sway = { + # default = ["wlr"]; + # }; + }; + + services.swayidle = { + enable = true; + events = [ + { + event = "lock"; + command = "swaylock -c 441144"; + } + ]; + }; + programs.waybar = { enable = true; systemd = { diff --git a/modules/desktop/firefox.nix b/modules/desktop/firefox.nix index 37c5cd6..bd06ae1 100644 --- a/modules/desktop/firefox.nix +++ b/modules/desktop/firefox.nix @@ -251,6 +251,7 @@ "app.shield.optoutstudies.enabled" = false; "app.normandy.enabled" = false; "app.normandy.api_url" = ""; + "dom.private-attribution.submission.enabled" = false; "browser.safebrowsing.malware.enabled" = false; "browser.safebrowsing.phishing.enabled" = false; From 7995708a592abcbde2d2ea7f0313859f1180b2b8 Mon Sep 17 00:00:00 2001 From: Jade Date: Sun, 28 Jul 2024 20:55:32 +0200 Subject: [PATCH 088/301] update desktop --- flake.lock | 347 ++++++++++++++++++ .../monosodium-glutamate-g/configuration.nix | 4 - 2 files changed, 347 insertions(+), 4 deletions(-) create mode 100644 flake.lock diff --git a/flake.lock b/flake.lock new file mode 100644 index 0000000..f419783 --- /dev/null +++ b/flake.lock @@ -0,0 +1,347 @@ +{ + "nodes": { + "crane": { + "inputs": { + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1721842668, + "narHash": "sha256-k3oiD2z2AAwBFLa4+xfU+7G5fisRXfkvrMTCJrjZzXo=", + "owner": "ipetkov", + "repo": "crane", + "rev": "529c1a0b1f29f0d78fa3086b8f6a134c71ef3aaf", + "type": "github" + }, + "original": { + "owner": "ipetkov", + "repo": "crane", + "type": "github" + } + }, + "fenix": { + "inputs": { + "nixpkgs": [ + "nixpkgs" + ], + "rust-analyzer-src": "rust-analyzer-src" + }, + "locked": { + "lastModified": 1722148092, + "narHash": "sha256-5QS64rfIFDzU1jmZrOK6wyZOCi6Vn/90apWRI6Hy+xk=", + "owner": "nix-community", + "repo": "fenix", + "rev": "b39d8959f286dc7b9da91ae92f6af56de0169e87", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "fenix", + "type": "github" + } + }, + "flake-utils": { + "inputs": { + "systems": "systems" + }, + "locked": { + "lastModified": 1709126324, + "narHash": "sha256-q6EQdSeUZOG26WelxqkmR7kArjgWCdw5sfJVHPH/7j8=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "d465f4819400de7c8d874d50b982301f28a84605", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_2": { + "inputs": { + "systems": "systems_2" + }, + "locked": { + "lastModified": 1710146030, + "narHash": "sha256-SZ5L6eA7HJ/nmkzGG7/ISclqe6oZdOZTNoesiInkXPQ=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "b1d9ab70662946ef0850d488da1c9019f3a9752a", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flakey-profile": { + "locked": { + "lastModified": 1712898590, + "narHash": "sha256-FhGIEU93VHAChKEXx905TSiPZKga69bWl1VB37FK//I=", + "owner": "lf-", + "repo": "flakey-profile", + "rev": "243c903fd8eadc0f63d205665a92d4df91d42d9d", + "type": "github" + }, + "original": { + "owner": "lf-", + "repo": "flakey-profile", + "type": "github" + } + }, + "helix-inline-diags": { + "inputs": { + "crane": [ + "crane" + ], + "flake-utils": "flake-utils", + "nixpkgs": [ + "nixpkgs" + ], + "rust-overlay": "rust-overlay" + }, + "locked": { + "lastModified": 1721054193, + "narHash": "sha256-xonM9t7oZ8YiwcEXuVlhs+8FsMSXI42djzUgpDt1n/w=", + "owner": "pascalkuthe", + "repo": "helix", + "rev": "386fa371d708f8e91a83762dfc7a58971681e091", + "type": "github" + }, + "original": { + "owner": "pascalkuthe", + "ref": "inline-diagnostics", + "repo": "helix", + "type": "github" + } + }, + "home-manager": { + "inputs": { + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1722119539, + "narHash": "sha256-2kU90liMle0vKR8exJx1XM4hZh9CdNgZGHCTbeA9yzY=", + "owner": "nix-community", + "repo": "home-manager", + "rev": "d0240a064db3987eb4d5204cf2400bc4452d9922", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "home-manager", + "type": "github" + } + }, + "lix": { + "flake": false, + "locked": { + "lastModified": 1714955862, + "narHash": "sha256-REWlo2RYHfJkxnmZTEJu3Cd/2VM+wjjpPy7Xi4BdDTQ=", + "ref": "refs/tags/2.90-beta.1", + "rev": "b6799ab0374a8e1907a48915d3187e07da41d88c", + "revCount": 15501, + "type": "git", + "url": "https://git@git.lix.systems/lix-project/lix" + }, + "original": { + "ref": "refs/tags/2.90-beta.1", + "type": "git", + "url": "https://git@git.lix.systems/lix-project/lix" + } + }, + "lix-module": { + "inputs": { + "flake-utils": "flake-utils_2", + "flakey-profile": "flakey-profile", + "lix": [ + "lix" + ], + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1720695775, + "narHash": "sha256-8Oqzl9QPjEe/n8y0R2tC6+2v/H6xBgABHXOJwxmnBg0=", + "ref": "refs/heads/main", + "rev": "d70318fb946a0e720dfdd1fb10b0645c14e2a02a", + "revCount": 94, + "type": "git", + "url": "https://git.lix.systems/lix-project/nixos-module" + }, + "original": { + "type": "git", + "url": "https://git.lix.systems/lix-project/nixos-module" + } + }, + "mac-brcm-fw": { + "flake": false, + "locked": { + "lastModified": 1701030348, + "narHash": "sha256-+kW8ogc6DykjMVlrr+3vWKs9ZUdJ9EW72LbY7k/Qvh4=", + "path": "/home/jade/nix-configs/mac-brcm-fw", + "type": "path" + }, + "original": { + "path": "/home/jade/nix-configs/mac-brcm-fw", + "type": "path" + } + }, + "nixos-hardware": { + "locked": { + "lastModified": 1687903496, + "narHash": "sha256-4PPwbFM4dNqso3zBya5rgfRvnBoIbN2J7qZ2ZpRyOUc=", + "owner": "networkException", + "repo": "nixos-hardware", + "rev": "8e28b9ee431b265d1fc74b8b819ea0816344c4a1", + "type": "github" + }, + "original": { + "owner": "networkException", + "ref": "apple-t2-init", + "repo": "nixos-hardware", + "type": "github" + } + }, + "nixpkgs": { + "locked": { + "lastModified": 1722062969, + "narHash": "sha256-QOS0ykELUmPbrrUGmegAUlpmUFznDQeR4q7rFhl8eQg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "b73c2221a46c13557b1b3be9c2070cc42cf01eb3", + "type": "github" + }, + "original": { + "id": "nixpkgs", + "ref": "nixos-unstable", + "type": "indirect" + } + }, + "nixpkgs-stable": { + "locked": { + "lastModified": 1720535198, + "narHash": "sha256-zwVvxrdIzralnSbcpghA92tWu2DV2lwv89xZc8MTrbg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "205fd4226592cc83fd4c0885a3e4c9c400efabb5", + "type": "github" + }, + "original": { + "id": "nixpkgs", + "ref": "nixos-23.11", + "type": "indirect" + } + }, + "nixpkgs-unstable-small": { + "locked": { + "lastModified": 1722179153, + "narHash": "sha256-ZJ75T0GWpLI4hoaL+YxueHD2pXG+VYpYtPJdwbkERVs=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "dcfb2878c687e5eb5fcbc5116969c45c85be34e2", + "type": "github" + }, + "original": { + "id": "nixpkgs", + "ref": "nixos-unstable-small", + "type": "indirect" + } + }, + "root": { + "inputs": { + "crane": "crane", + "fenix": "fenix", + "helix-inline-diags": "helix-inline-diags", + "home-manager": "home-manager", + "lix": "lix", + "lix-module": "lix-module", + "mac-brcm-fw": "mac-brcm-fw", + "nixos-hardware": "nixos-hardware", + "nixpkgs": "nixpkgs", + "nixpkgs-stable": "nixpkgs-stable", + "nixpkgs-unstable-small": "nixpkgs-unstable-small" + } + }, + "rust-analyzer-src": { + "flake": false, + "locked": { + "lastModified": 1722099723, + "narHash": "sha256-61f+rvQAObm/TuBEqYFNUTngm/wXcuNhGtQbAmfZVvY=", + "owner": "rust-lang", + "repo": "rust-analyzer", + "rev": "a46788318cce3b62e14606f70a14896b223ee5ec", + "type": "github" + }, + "original": { + "owner": "rust-lang", + "ref": "nightly", + "repo": "rust-analyzer", + "type": "github" + } + }, + "rust-overlay": { + "inputs": { + "flake-utils": [ + "helix-inline-diags", + "flake-utils" + ], + "nixpkgs": [ + "helix-inline-diags", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1709604635, + "narHash": "sha256-le4fwmWmjGRYWwkho0Gr7mnnZndOOe4XGbLw68OvF40=", + "owner": "oxalica", + "repo": "rust-overlay", + "rev": "e86c0fb5d3a22a5f30d7f64ecad88643fe26449d", + "type": "github" + }, + "original": { + "owner": "oxalica", + "repo": "rust-overlay", + "type": "github" + } + }, + "systems": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + }, + "systems_2": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/hosts/monosodium-glutamate-g/configuration.nix b/hosts/monosodium-glutamate-g/configuration.nix index b6cb3d9..a1a5f47 100644 --- a/hosts/monosodium-glutamate-g/configuration.nix +++ b/hosts/monosodium-glutamate-g/configuration.nix @@ -9,18 +9,14 @@ ]; jade = { - flatpak.enable = true; desktop = { - compositing.enable = true; syncthing.enable = true; kdeconnect.enable = true; cloud.enable = true; social.enable = true; gaming.enable = true; mail.enable = true; - evremap.enable = false; }; - terminal.enable = true; }; boot = { loader = { From e222066a878aadbdc300e1ca6b1808ecb68cd660 Mon Sep 17 00:00:00 2001 From: Jade Date: Sun, 28 Jul 2024 21:11:44 +0200 Subject: [PATCH 089/301] do program stuffs --- hosts/monosodium-glutamate-g/configuration.nix | 5 ----- 1 file changed, 5 deletions(-) diff --git a/hosts/monosodium-glutamate-g/configuration.nix b/hosts/monosodium-glutamate-g/configuration.nix index a1a5f47..43e62b7 100644 --- a/hosts/monosodium-glutamate-g/configuration.nix +++ b/hosts/monosodium-glutamate-g/configuration.nix @@ -55,11 +55,6 @@ # missing: menu-qalc picom-jonaburg environment.systemPackages = with pkgs; [ # TODO: clean up. - libGL - libreoffice-fresh - wireshark - awesomebump - zenstates zenmonitor nvtop-amd From 73ed59e2a74989766efcee5193a29e15034d04e9 Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Tue, 30 Jul 2024 22:06:36 +0200 Subject: [PATCH 090/301] fix latest update --- common.nix | 1 + flake.lock | 65 ++++++++++++--------------- flake.nix | 10 +---- hosts/catbook-j/configuration.nix | 1 + modules/desktop-environment/audio.nix | 3 +- modules/desktop/default.nix | 4 +- 6 files changed, 36 insertions(+), 48 deletions(-) diff --git a/common.nix b/common.nix index 3f8212e..c7cd1be 100644 --- a/common.nix +++ b/common.nix @@ -33,6 +33,7 @@ with builtins; { config = { allowUnfree = true; permittedInsecurePackages = [ + "electron-27.3.11" "nodejs-16.20.0" ]; }; diff --git a/flake.lock b/flake.lock index f419783..47c7a76 100644 --- a/flake.lock +++ b/flake.lock @@ -28,11 +28,11 @@ "rust-analyzer-src": "rust-analyzer-src" }, "locked": { - "lastModified": 1722148092, - "narHash": "sha256-5QS64rfIFDzU1jmZrOK6wyZOCi6Vn/90apWRI6Hy+xk=", + "lastModified": 1722320953, + "narHash": "sha256-DfGaJtgrzcwPQYLTvjL1KaVIjpvi85b2MpM6yEGvJzM=", "owner": "nix-community", "repo": "fenix", - "rev": "b39d8959f286dc7b9da91ae92f6af56de0169e87", + "rev": "483df76def3e5010d709aa3a0418ba2088503994", "type": "github" }, "original": { @@ -104,16 +104,15 @@ "rust-overlay": "rust-overlay" }, "locked": { - "lastModified": 1721054193, - "narHash": "sha256-xonM9t7oZ8YiwcEXuVlhs+8FsMSXI42djzUgpDt1n/w=", - "owner": "pascalkuthe", + "lastModified": 1722305447, + "narHash": "sha256-2jG85FHBhKeoF8vNUkCHflrliuC8HCaMOzmERct9imc=", + "owner": "helix-editor", "repo": "helix", - "rev": "386fa371d708f8e91a83762dfc7a58971681e091", + "rev": "ce809fb9ef4c5af59b5401419a2e8ae6964c8229", "type": "github" }, "original": { - "owner": "pascalkuthe", - "ref": "inline-diagnostics", + "owner": "helix-editor", "repo": "helix", "type": "github" } @@ -125,11 +124,11 @@ ] }, "locked": { - "lastModified": 1722119539, - "narHash": "sha256-2kU90liMle0vKR8exJx1XM4hZh9CdNgZGHCTbeA9yzY=", + "lastModified": 1722321190, + "narHash": "sha256-WeVWVRqkgrbLzmk6FfJoloJ7Xe7HWD27Pv950IUG2kI=", "owner": "nix-community", "repo": "home-manager", - "rev": "d0240a064db3987eb4d5204cf2400bc4452d9922", + "rev": "4fcd54df7cbb1d79cbe81209909ee8514d6b17a4", "type": "github" }, "original": { @@ -141,27 +140,22 @@ "lix": { "flake": false, "locked": { - "lastModified": 1714955862, - "narHash": "sha256-REWlo2RYHfJkxnmZTEJu3Cd/2VM+wjjpPy7Xi4BdDTQ=", - "ref": "refs/tags/2.90-beta.1", - "rev": "b6799ab0374a8e1907a48915d3187e07da41d88c", - "revCount": 15501, - "type": "git", - "url": "https://git@git.lix.systems/lix-project/lix" + "lastModified": 1722357433, + "narHash": "sha256-bv8oI8t46KXY6elO4n0R9P3SPBLtuJFMYm0oDxLD/90=", + "rev": "97a389b0bee7baf2d445121afa6ec84bef3a4bd7", + "type": "tarball", + "url": "https://git.lix.systems/api/v1/repos/lix-project/lix/archive/97a389b0bee7baf2d445121afa6ec84bef3a4bd7.tar.gz" }, "original": { - "ref": "refs/tags/2.90-beta.1", - "type": "git", - "url": "https://git@git.lix.systems/lix-project/lix" + "type": "tarball", + "url": "https://git.lix.systems/lix-project/lix/archive/main.tar.gz" } }, "lix-module": { "inputs": { "flake-utils": "flake-utils_2", "flakey-profile": "flakey-profile", - "lix": [ - "lix" - ], + "lix": "lix", "nixpkgs": [ "nixpkgs" ] @@ -183,7 +177,7 @@ "mac-brcm-fw": { "flake": false, "locked": { - "lastModified": 1701030348, + "lastModified": 1709065070, "narHash": "sha256-+kW8ogc6DykjMVlrr+3vWKs9ZUdJ9EW72LbY7k/Qvh4=", "path": "/home/jade/nix-configs/mac-brcm-fw", "type": "path" @@ -211,11 +205,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1722062969, - "narHash": "sha256-QOS0ykELUmPbrrUGmegAUlpmUFznDQeR4q7rFhl8eQg=", + "lastModified": 1722185531, + "narHash": "sha256-veKR07psFoJjINLC8RK4DiLniGGMgF3QMlS4tb74S6k=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "b73c2221a46c13557b1b3be9c2070cc42cf01eb3", + "rev": "52ec9ac3b12395ad677e8b62106f0b98c1f8569d", "type": "github" }, "original": { @@ -241,11 +235,11 @@ }, "nixpkgs-unstable-small": { "locked": { - "lastModified": 1722179153, - "narHash": "sha256-ZJ75T0GWpLI4hoaL+YxueHD2pXG+VYpYtPJdwbkERVs=", + "lastModified": 1722309256, + "narHash": "sha256-Eqlu/hisMWE51b9YeKqehNaHLPhZOmkFkrx+VzI5YcM=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "dcfb2878c687e5eb5fcbc5116969c45c85be34e2", + "rev": "3fcada1050e3820241590679838954bacf7d38f8", "type": "github" }, "original": { @@ -260,7 +254,6 @@ "fenix": "fenix", "helix-inline-diags": "helix-inline-diags", "home-manager": "home-manager", - "lix": "lix", "lix-module": "lix-module", "mac-brcm-fw": "mac-brcm-fw", "nixos-hardware": "nixos-hardware", @@ -272,11 +265,11 @@ "rust-analyzer-src": { "flake": false, "locked": { - "lastModified": 1722099723, - "narHash": "sha256-61f+rvQAObm/TuBEqYFNUTngm/wXcuNhGtQbAmfZVvY=", + "lastModified": 1722262053, + "narHash": "sha256-KxjkPVn9rQqYam6DhiN/V2NcMXtYW25maxkJoiVMpmE=", "owner": "rust-lang", "repo": "rust-analyzer", - "rev": "a46788318cce3b62e14606f70a14896b223ee5ec", + "rev": "a021b85be57d34b1eed687fcafd5d5ec64b2d853", "type": "github" }, "original": { diff --git a/flake.nix b/flake.nix index 52c8181..fa735be 100644 --- a/flake.nix +++ b/flake.nix @@ -6,19 +6,14 @@ nixpkgs-stable.url = "nixpkgs/nixos-23.11"; nixpkgs-unstable-small.url = "nixpkgs/nixos-unstable-small"; helix-inline-diags = { - url = "github:pascalkuthe/helix/inline-diagnostics"; + url = "github:helix-editor/helix"; inputs = { crane.follows = "crane"; nixpkgs.follows = "nixpkgs"; }; }; - lix = { - url = "git+https://git@git.lix.systems/lix-project/lix?ref=refs/tags/2.90-beta.1"; - flake = false; - }; lix-module = { url = "git+https://git.lix.systems/lix-project/nixos-module"; - inputs.lix.follows = "lix"; inputs.nixpkgs.follows = "nixpkgs"; }; home-manager = { @@ -63,8 +58,7 @@ crane-lib = crane.lib.${system}; rs-toolchain = with fenix.packages.${system}; combine [ - default.toolchain - rust-analyzer + complete.toolchain ]; # rs-platform = pkgs.makeRustPlatform { # cargo = rs-toolchain; diff --git a/hosts/catbook-j/configuration.nix b/hosts/catbook-j/configuration.nix index 79de2e1..248d870 100644 --- a/hosts/catbook-j/configuration.nix +++ b/hosts/catbook-j/configuration.nix @@ -9,6 +9,7 @@ }: { nixpkgs.config.permittedInsecurePackages = [ "electron-25.9.0" + "electron-27.3.11" ]; imports = [ # Include the results of the hardware scan. diff --git a/modules/desktop-environment/audio.nix b/modules/desktop-environment/audio.nix index ca23387..e0ca3ed 100644 --- a/modules/desktop-environment/audio.nix +++ b/modules/desktop-environment/audio.nix @@ -16,10 +16,9 @@ playerctl pulseaudioFull - easyeffects cava helvum ]; hardware.pulseaudio.enable = pkgs.lib.mkForce false; - sound.mediaKeys.enable = true; + # sound.mediaKeys.enable = true; } diff --git a/modules/desktop/default.nix b/modules/desktop/default.nix index 152db4e..63daa0d 100644 --- a/modules/desktop/default.nix +++ b/modules/desktop/default.nix @@ -115,7 +115,7 @@ in xfce.thunar xfce.tumbler xfce.thunar-archive-plugin - gnome.file-roller + file-roller # media/file viewers vlc mpv @@ -136,7 +136,7 @@ in gitg gpick qdirstat - ffmpeg_5 + ffmpeg_7-full # external libnotify From ab61d680ac7fabe8aa1c371cdeaa6228c7a8bac1 Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Tue, 30 Jul 2024 22:06:56 +0200 Subject: [PATCH 091/301] disable firefox's latest bullshit --- modules/desktop/firefox.nix | 2 ++ 1 file changed, 2 insertions(+) diff --git a/modules/desktop/firefox.nix b/modules/desktop/firefox.nix index bd06ae1..3c603c0 100644 --- a/modules/desktop/firefox.nix +++ b/modules/desktop/firefox.nix @@ -215,6 +215,8 @@ "browser.aboutwelcome.enabled" = false; "browser.preferences.moreFromMozilla" = false; "browser.menu.showViewImageInfo" = true; + "browser.shopping.experience2023.active" = false; + "browser.shopping.experience2023.survey.enabled" = false; "identity.fxaccounts.enabled" = true; "browser.tabs.firefox-view" = true; From d8e2f19ced92edcc2491d16bccca77749021c9f4 Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Thu, 1 Aug 2024 07:44:41 +0200 Subject: [PATCH 092/301] shell: fix and clean up plugin loading --- modules/shell/nu.nix | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/modules/shell/nu.nix b/modules/shell/nu.nix index 88cf0d6..dbf1df8 100644 --- a/modules/shell/nu.nix +++ b/modules/shell/nu.nix @@ -11,11 +11,6 @@ }; home.packages = [ pkgs.pueue - pkgs.nushellPlugins.net - pkgs.nushellPlugins.query - pkgs.nushellPlugins.gstat - pkgs.nushellPlugins.polars - pkgs.nushellPlugins.formats ]; programs.nushell = { enable = true; @@ -23,9 +18,13 @@ configFile.source = ../../other/config.nu; envFile.source = ../../other/env.nu; extraConfig = '' - plugin use ${pkgs.nushellPlugins.query}/bin/nu_plugin_query; - plugin use ${pkgs.nushellPlugins.polars}/bin/nu_plugin_polars; - plugin use ${pkgs.nushellPlugins.formats}/bin/nu_plugin_formats; + plugin add ${pkgs.nushellPlugins.query}/bin/nu_plugin_query; + plugin add ${pkgs.nushellPlugins.polars}/bin/nu_plugin_polars; + plugin add ${pkgs.nushellPlugins.formats}/bin/nu_plugin_formats; + + plugin use query; + plugin use polars; + plugin use formats; ''; }; programs.starship.enableNushellIntegration = true; From 2b13d1c0bb3a6fedbc28325f8339b9a984666114 Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Thu, 1 Aug 2024 08:07:17 +0200 Subject: [PATCH 093/301] fix displayManager warnings and clean up displayManager configs --- hosts/catbook-j/configuration.nix | 8 +++--- modules/desktop-environment/default.nix | 1 + modules/desktop-environment/dm.nix | 36 +++++++++++++++++++++++++ modules/desktop/x.nix | 11 -------- 4 files changed, 41 insertions(+), 15 deletions(-) create mode 100644 modules/desktop-environment/dm.nix diff --git a/hosts/catbook-j/configuration.nix b/hosts/catbook-j/configuration.nix index 248d870..5d36a7a 100644 --- a/hosts/catbook-j/configuration.nix +++ b/hosts/catbook-j/configuration.nix @@ -20,6 +20,10 @@ ]; jade = { desktop = { + dm.autoLogin = { + enable = true; + delay = 5; + }; syncthing.enable = true; kdeconnect.enable = true; cloud.enable = true; @@ -81,10 +85,6 @@ }; boot.kernelPackages = pkgs.linuxPackages_zen; - services.displayManager.autoLogin = { - enable = true; - user = "jade"; - }; # networking networking.networkmanager.enable = true; diff --git a/modules/desktop-environment/default.nix b/modules/desktop-environment/default.nix index 59206a0..4a5b04f 100644 --- a/modules/desktop-environment/default.nix +++ b/modules/desktop-environment/default.nix @@ -3,6 +3,7 @@ ./audio.nix ./flatpak.nix ./home + ./dm.nix ]; services.upower = { enable = true; diff --git a/modules/desktop-environment/dm.nix b/modules/desktop-environment/dm.nix new file mode 100644 index 0000000..ebdb023 --- /dev/null +++ b/modules/desktop-environment/dm.nix @@ -0,0 +1,36 @@ +{ + pkgs, + config, + lib, + ... +}: let + cfg = config.jade.desktop.dm; +in + with lib; { + options.jade.desktop.dm.autoLogin = { + enable = mkEnableOption "Enable Autologin"; + delay = mkOption { + type = types.int; + default = 0; + }; + }; + config.services = { + displayManager = { + autoLogin = { + enable = cfg.autoLogin.enable; + user = "jade"; + }; + defaultSession = "sway"; + sessionPackages = [ + pkgs.sway + ]; + }; + xserver.displayManager.gdm = { + enable = true; + banner = "Meow :3"; + autoLogin = { + delay = cfg.autoLogin.delay; + }; + }; + }; + } diff --git a/modules/desktop/x.nix b/modules/desktop/x.nix index 00178fb..b8527c6 100644 --- a/modules/desktop/x.nix +++ b/modules/desktop/x.nix @@ -6,14 +6,6 @@ xterm.enable = false; }; - displayManager = { - gdm.enable = true; - sessionPackages = [ - pkgs.sway - ]; - gdm.autoLogin.delay = 5; - }; - windowManager.xmonad = { enable = true; }; @@ -21,7 +13,4 @@ security.polkit.enable = true; programs.sway.enable = true; - - # services.displayManager.defaultSession = "none+xmonad"; - services.displayManager.defaultSession = "sway"; } From b63db1934da08903a2d8b224e18431ddfc6c7c1e Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Thu, 1 Aug 2024 08:17:09 +0200 Subject: [PATCH 094/301] rework and fix some hardware key stuff --- hosts/catbook-j/configuration.nix | 1 + modules/hardware/hardware_key.nix | 51 ++++++++++++++++++++----------- 2 files changed, 34 insertions(+), 18 deletions(-) diff --git a/hosts/catbook-j/configuration.nix b/hosts/catbook-j/configuration.nix index 5d36a7a..342c186 100644 --- a/hosts/catbook-j/configuration.nix +++ b/hosts/catbook-j/configuration.nix @@ -19,6 +19,7 @@ ./modules ]; jade = { + hwKey.pamAuth.enable = true; desktop = { dm.autoLogin = { enable = true; diff --git a/modules/hardware/hardware_key.nix b/modules/hardware/hardware_key.nix index 8510d86..1f75106 100644 --- a/modules/hardware/hardware_key.nix +++ b/modules/hardware/hardware_key.nix @@ -1,20 +1,35 @@ -{pkgs, ...}: { - # nitrokey - services.udev.packages = [pkgs.nitrokey-udev-rules]; - - # smartcard daemon - services.pcscd.enable = true; - - # authenticate using hw key - security.pam = { - services.jade.u2fAuth = true; - u2f = { - enable = true; - cue = true; - control = "sufficient"; - authFile = "/home/jade/.ssh/u2f_keys"; +{ + pkgs, + config, + lib, + ... +}: let + cfg = config.jade.hwKey; +in + with lib; { + options.jade.hwKey = { + pamAuth.enable = mkEnableOption "Enable PAM authentication with hardware keys"; }; - }; + config = { + # nitrokey + services.udev.packages = [pkgs.nitrokey-udev-rules]; - programs.i3lock.u2fSupport = true; -} + # smartcard daemon + services.pcscd.enable = true; + + # authenticate using hw key + security.pam = { + services.jade.u2fAuth = cfg.pamAuth.enable; + u2f = { + enable = true; + control = "sufficient"; + settings = { + cue = true; + authFile = "/home/jade/.ssh/u2f_keys"; + }; + }; + }; + + programs.i3lock.u2fSupport = true; + }; + } From ddd6ecd05582c68e9c8581b4ee5ccd27ece8e1f6 Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Thu, 1 Aug 2024 08:37:19 +0200 Subject: [PATCH 095/301] move some graphics stuff into individual modules/files --- common.nix | 1 - hosts/catbook-j/configuration.nix | 12 ------------ hosts/catbook-j/modules/default.nix | 1 + hosts/catbook-j/modules/graphics.nix | 12 ++++++++++++ hosts/monosodium-glutamate-g/configuration.nix | 5 ++--- hosts/monosodium-glutamate-g/modules/default.nix | 5 +++++ hosts/monosodium-glutamate-g/modules/graphics.nix | 7 +++++++ modules/default.nix | 1 + modules/graphics.nix | 3 +++ 9 files changed, 31 insertions(+), 16 deletions(-) create mode 100644 hosts/catbook-j/modules/graphics.nix create mode 100644 hosts/monosodium-glutamate-g/modules/default.nix create mode 100644 hosts/monosodium-glutamate-g/modules/graphics.nix create mode 100644 modules/graphics.nix diff --git a/common.nix b/common.nix index c7cd1be..99e25fe 100644 --- a/common.nix +++ b/common.nix @@ -138,7 +138,6 @@ with builtins; { boot.kernel.sysctl."vm.max_map_count" = 2147483642; hardware = { - opengl.enable = true; uinput.enable = true; bluetooth.enable = true; # keyboard.uhk.enable = true; diff --git a/hosts/catbook-j/configuration.nix b/hosts/catbook-j/configuration.nix index 342c186..d0f1c6b 100644 --- a/hosts/catbook-j/configuration.nix +++ b/hosts/catbook-j/configuration.nix @@ -46,18 +46,6 @@ S10E_JRNL_FILE_LOC = "/home/jade/Docs/jrnl.md"; }; - hardware.opengl = { - enable = true; - extraPackages = with pkgs; [ - intel-ocl - intel-media-driver - intel-vaapi-driver - intel-compute-runtime - libvdpau-va-gl - mesa.drivers - ]; - }; - programs.wireshark.enable = true; boot.resumeDevice = "/dev/disk/by-uuid/4f9e8afa-f8d7-40bf-b3ea-17e8e8fbb694"; diff --git a/hosts/catbook-j/modules/default.nix b/hosts/catbook-j/modules/default.nix index 935baf9..ffe8790 100644 --- a/hosts/catbook-j/modules/default.nix +++ b/hosts/catbook-j/modules/default.nix @@ -1,5 +1,6 @@ {...}: { imports = [ ./input.nix + ./graphics.nix ]; } diff --git a/hosts/catbook-j/modules/graphics.nix b/hosts/catbook-j/modules/graphics.nix new file mode 100644 index 0000000..e359044 --- /dev/null +++ b/hosts/catbook-j/modules/graphics.nix @@ -0,0 +1,12 @@ +{pkgs, ...}: { + hardware.graphics = { + extraPackages = with pkgs; [ + intel-ocl + intel-media-driver + intel-vaapi-driver + intel-compute-runtime + libvdpau-va-gl + mesa.drivers + ]; + }; +} diff --git a/hosts/monosodium-glutamate-g/configuration.nix b/hosts/monosodium-glutamate-g/configuration.nix index 43e62b7..471c1a9 100644 --- a/hosts/monosodium-glutamate-g/configuration.nix +++ b/hosts/monosodium-glutamate-g/configuration.nix @@ -6,9 +6,11 @@ ./hardware-configuration.nix ../../common.nix ../../modules + ./modules ]; jade = { + hwKey.pamAuth.enable = true; desktop = { syncthing.enable = true; kdeconnect.enable = true; @@ -57,9 +59,6 @@ # TODO: clean up. zenstates zenmonitor - nvtop-amd - radeontop - rgp tea blender-hip ]; diff --git a/hosts/monosodium-glutamate-g/modules/default.nix b/hosts/monosodium-glutamate-g/modules/default.nix new file mode 100644 index 0000000..213189f --- /dev/null +++ b/hosts/monosodium-glutamate-g/modules/default.nix @@ -0,0 +1,5 @@ +{}: { + imports = [ + ./graphics.nix + ]; +} diff --git a/hosts/monosodium-glutamate-g/modules/graphics.nix b/hosts/monosodium-glutamate-g/modules/graphics.nix new file mode 100644 index 0000000..5732629 --- /dev/null +++ b/hosts/monosodium-glutamate-g/modules/graphics.nix @@ -0,0 +1,7 @@ +{pkgs, ...}: { + environment.systemPackages = [ + pkgs.nvtop-amd + pkgs.radeontop + pkgs.rgp + ]; +} diff --git a/modules/default.nix b/modules/default.nix index adf3726..afe2abc 100644 --- a/modules/default.nix +++ b/modules/default.nix @@ -6,5 +6,6 @@ ./firewall.nix ./desktop-environment ./input + ./graphics.nix ]; } diff --git a/modules/graphics.nix b/modules/graphics.nix new file mode 100644 index 0000000..cc13a5a --- /dev/null +++ b/modules/graphics.nix @@ -0,0 +1,3 @@ +{}: { + graphics.enable = true; +} From 1b802a90de117e0f2c5fd7ef4997487d83547d80 Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Thu, 1 Aug 2024 08:37:19 +0200 Subject: [PATCH 096/301] move some graphics stuff into individual modules/files --- modules/graphics.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/graphics.nix b/modules/graphics.nix index cc13a5a..910a0e2 100644 --- a/modules/graphics.nix +++ b/modules/graphics.nix @@ -1,3 +1,3 @@ -{}: { - graphics.enable = true; +{...}: { + hardware.graphics.enable = true; } From e597a9582642a5b8e4ff29cca9bcc529238fffe5 Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Thu, 1 Aug 2024 08:43:47 +0200 Subject: [PATCH 097/301] fix networking dispatcher script thingy --- modules/desktop/networking.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/desktop/networking.nix b/modules/desktop/networking.nix index e02e9fe..f0c60c7 100644 --- a/modules/desktop/networking.nix +++ b/modules/desktop/networking.nix @@ -6,7 +6,7 @@ }: let addNuShebang = path: builtins.concatStringsSep "\n\n" [ - "#!${pkgs.nushellFull}/bin/nu" + "#!${pkgs.nushell}/bin/nu" (builtins.readFile path) ]; in { From 6f5884a8a39517d98f9f92d1ce2f7a8fce58bc83 Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Thu, 1 Aug 2024 10:27:38 +0200 Subject: [PATCH 098/301] add hrt counter to shell startup --- modules/shell/nu.nix | 2 ++ other/scripts/desktop/shell-startup.nu | 46 ++++++++++++++++++++++++++ 2 files changed, 48 insertions(+) create mode 100644 other/scripts/desktop/shell-startup.nu diff --git a/modules/shell/nu.nix b/modules/shell/nu.nix index dbf1df8..2d9aa98 100644 --- a/modules/shell/nu.nix +++ b/modules/shell/nu.nix @@ -25,6 +25,8 @@ plugin use query; plugin use polars; plugin use formats; + + nu ${../../other/scripts/desktop/shell-startup.nu}; ''; }; programs.starship.enableNushellIntegration = true; diff --git a/other/scripts/desktop/shell-startup.nu b/other/scripts/desktop/shell-startup.nu new file mode 100644 index 0000000..d4b9a51 --- /dev/null +++ b/other/scripts/desktop/shell-startup.nu @@ -0,0 +1,46 @@ +def "is even" [] { + $in mod 2 == 0 +} + +const TRANS = [ 5BCEFA F5A9B8 FFFFFF F5A9B8 5BCEFA ]; +const LESBIAN = [ D52D00 EF7627 FF9A56 FFFFFF D162A4 B55690 A30262 ]; +const ENBY = [ FCF434 FFFFFF 9C59D1 2C2C2C ]; + +def flag [ + colors: list +] { + use std; + + let col_size = (term size | get columns) / ($colors | length) | math floor; + mut rest = (term size | get columns) - ($col_size * ($colors | length)); + + mut cols = $colors | wrap color | insert width $col_size | flatten; + let last = ($colors | length) - 1; + + $cols = if not ($rest | is even) { + $rest = $rest - 1; + + (if not ($colors | length | is even) { + $cols | update (($colors | length) / 2 | math floor) { $in | update width {|w| ($w.width + 1)}} + } else { + $cols | update $last { $in | update width {|w| ($w.width + 1)}} + }) + }; + + std assert ($rest | is even); + + let amount = $rest / 2; + + $cols = ($cols | update 0 { $in | update width {|w| ($w.width + $amount) } } | update $last { $in | update width {|w| ($w.width + $amount) } }); + + print ($cols | each {|col| + "=" | std repeat $col.width | prepend (ansi {fg: $"#($col.color)" }) | str join + } | prepend (ansi attr_bold) | append (ansi reset) | str join) +} + +def main [] { + flag $TRANS; + print $"(ansi attr_bold) Hi jade, you're on HRT for ((date now) - ('2024-02-18T20:53' | into datetime) | format duration month)s now!"; + flag $LESBIAN; +} + From b23856722cb89cf3c0044153369d7f201913f951 Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Thu, 1 Aug 2024 20:01:04 +0200 Subject: [PATCH 099/301] fix weird bug with some flags sometimes crashing (on even numbers) --- other/scripts/desktop/shell-startup.nu | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/other/scripts/desktop/shell-startup.nu b/other/scripts/desktop/shell-startup.nu index d4b9a51..245927b 100644 --- a/other/scripts/desktop/shell-startup.nu +++ b/other/scripts/desktop/shell-startup.nu @@ -17,14 +17,14 @@ def flag [ mut cols = $colors | wrap color | insert width $col_size | flatten; let last = ($colors | length) - 1; - $cols = if not ($rest | is even) { + if not ($rest | is even) { $rest = $rest - 1; - (if not ($colors | length | is even) { + $cols = (if not ($colors | length | is even) { $cols | update (($colors | length) / 2 | math floor) { $in | update width {|w| ($w.width + 1)}} } else { $cols | update $last { $in | update width {|w| ($w.width + 1)}} - }) + }); }; std assert ($rest | is even); From 3d2719f2f7dbba1ad806734228271394116bcb5e Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Thu, 1 Aug 2024 20:14:38 +0200 Subject: [PATCH 100/301] add TODO --- other/scripts/desktop/shell-startup.nu | 2 ++ 1 file changed, 2 insertions(+) diff --git a/other/scripts/desktop/shell-startup.nu b/other/scripts/desktop/shell-startup.nu index 245927b..af5e93a 100644 --- a/other/scripts/desktop/shell-startup.nu +++ b/other/scripts/desktop/shell-startup.nu @@ -2,6 +2,8 @@ def "is even" [] { $in mod 2 == 0 } +# TODO: flag stuff as module to be used in other stuff in shell + const TRANS = [ 5BCEFA F5A9B8 FFFFFF F5A9B8 5BCEFA ]; const LESBIAN = [ D52D00 EF7627 FF9A56 FFFFFF D162A4 B55690 A30262 ]; const ENBY = [ FCF434 FFFFFF 9C59D1 2C2C2C ]; From 62539db84df9c7ddb2253811c3162e98379b806a Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Fri, 2 Aug 2024 21:29:25 +0200 Subject: [PATCH 101/301] do flag thing help --- modules/shell/nu.nix | 8 +++- modules/shell/starship.nix | 1 + other/config.nu | 3 +- other/env.nu | 54 +++++++++++----------- other/scripts/desktop/shell-startup.nu | 20 +++++--- programs/jrnl/src/commands/list_entries.rs | 1 + 6 files changed, 51 insertions(+), 36 deletions(-) diff --git a/modules/shell/nu.nix b/modules/shell/nu.nix index 2d9aa98..30b4347 100644 --- a/modules/shell/nu.nix +++ b/modules/shell/nu.nix @@ -12,6 +12,10 @@ home.packages = [ pkgs.pueue ]; + home.file."shell-startup" = { + source = ../../other/scripts/desktop/shell-startup.nu; + target = ".config/nushell/shell-startup.nu"; + }; programs.nushell = { enable = true; package = config.users.defaultUserShell; @@ -28,8 +32,10 @@ nu ${../../other/scripts/desktop/shell-startup.nu}; ''; + extraEnv = '' + ''; }; - programs.starship.enableNushellIntegration = true; + # programs.starship.enableNushellIntegration = true; programs.carapace.enableNushellIntegration = true; programs.direnv.enableNushellIntegration = true; }; diff --git a/modules/shell/starship.nix b/modules/shell/starship.nix index 588ebe1..eea943f 100644 --- a/modules/shell/starship.nix +++ b/modules/shell/starship.nix @@ -2,6 +2,7 @@ home-manager.users.jade = {pkgs, ...}: { programs.starship = { enable = true; + enableNushellIntegration = false; settings = { format = "$all$directory$character"; character = { diff --git a/other/config.nu b/other/config.nu index 9435b28..c735edb 100644 --- a/other/config.nu +++ b/other/config.nu @@ -272,7 +272,8 @@ $env.config = { render_right_prompt_on_last_line: false # true or false to enable or disable right prompt to be rendered on last line of the prompt. hooks: { - pre_execution: [{ null }] # run before the repl input is run + pre_prompt: { null } + pre_execution: [{ $env.CMD_COUNT = $env.CMD_COUNT + 1; }] # run before the repl input is run env_change: { PWD: [{|before, after| null }] # run if the PWD environment is different since the last repl input } diff --git a/other/env.nu b/other/env.nu index 57878d8..d5ca780 100644 --- a/other/env.nu +++ b/other/env.nu @@ -2,36 +2,18 @@ # # version = "0.84.0" -def create_left_prompt [] { - mut home = "" - try { - if $nu.os-info.name == "windows" { - $home = $env.USERPROFILE - } else { - $home = $env.HOME - } - } - - let dir = ([ - ($env.PWD | str substring 0..($home | str length) | str replace $home "~"), - ($env.PWD | str substring ($home | str length)..) - ] | str join) - - let path_color = (if (is-admin) { ansi red_bold } else { ansi green_bold }) - let separator_color = (if (is-admin) { ansi light_red_bold } else { ansi light_green_bold }) - let path_segment = $"($path_color)($dir)" - - $path_segment | str replace --all (char path_sep) $"($separator_color)/($path_color)" -} +source /home/jade/.config/nushell/shell-startup.nu; +$env.STARSHIP_SHELL = "nu"; +$env.CMD_COUNT = 0; def create_right_prompt [] { # create a right prompt in magenta with green separators and am/pm underlined + let time_segment = ([ (ansi reset) - (ansi magenta) - (date now | format date '%Y/%m/%d %r') - ] | str join | str replace --regex --all "([/:])" $"(ansi green)${1}(ansi magenta)" | - str replace --regex --all "([AP]M)" $"(ansi magenta_underline)${1}") + (ansi purple) + (date now | format date '%Y/%m/%d %R') + ]) | str join; let last_exit_code = if ($env.LAST_EXIT_CODE != 0) {([ (ansi rb) @@ -43,8 +25,26 @@ def create_right_prompt [] { } # Use nushell functions to define your right and left prompt -$env.PROMPT_COMMAND = {|| create_left_prompt } -# $env.PROMPT_COMMAND_RIGHT = {|| create_right_prompt } +$env.PROMPT_COMMAND = {|| + starship prompt --cmd-duration $env.CMD_DURATION_MS $'--status=($env.LAST_EXIT_CODE)' + | lines + | filter { is-not-empty } + | update 0 {|item| + let len = (term size | get columns) - ($item | ansi strip | str length --grapheme-clusters) - (create_right_prompt | ansi strip | str length --grapheme-clusters); + # $item | append (flag $TRANS "-" $len) | str join + let deco = if ($env.CMD_COUNT == 0) { + flag $LESBIAN "=" $len + } else if ($env.CMD_COUNT | is even) { + flag $LESBIAN "-" $len + } else { + flag $TRANS "-" $len + }; + + $item | append $deco | str join + } + | str join "\n" +} +$env.PROMPT_COMMAND_RIGHT = {|| create_right_prompt } # The prompt indicators are environmental variables that represent # the state of the prompt diff --git a/other/scripts/desktop/shell-startup.nu b/other/scripts/desktop/shell-startup.nu index af5e93a..961f702 100644 --- a/other/scripts/desktop/shell-startup.nu +++ b/other/scripts/desktop/shell-startup.nu @@ -10,11 +10,17 @@ const ENBY = [ FCF434 FFFFFF 9C59D1 2C2C2C ]; def flag [ colors: list + character = "=" + width = -1, ] { use std; - let col_size = (term size | get columns) / ($colors | length) | math floor; - mut rest = (term size | get columns) - ($col_size * ($colors | length)); + let out_size = if ($width == -1) { + term size | get columns + } else { $width }; + + let col_size = $out_size / ($colors | length) | math floor; + mut rest = $out_size - ($col_size * ($colors | length)); mut cols = $colors | wrap color | insert width $col_size | flatten; let last = ($colors | length) - 1; @@ -35,14 +41,14 @@ def flag [ $cols = ($cols | update 0 { $in | update width {|w| ($w.width + $amount) } } | update $last { $in | update width {|w| ($w.width + $amount) } }); - print ($cols | each {|col| - "=" | std repeat $col.width | prepend (ansi {fg: $"#($col.color)" }) | str join - } | prepend (ansi attr_bold) | append (ansi reset) | str join) + $cols | each {|col| + $character | std repeat $col.width | prepend (ansi {fg: $"#($col.color)" }) | str join + } | prepend (ansi attr_bold) | append (ansi reset) | str join } def main [] { - flag $TRANS; + print (flag $TRANS); print $"(ansi attr_bold) Hi jade, you're on HRT for ((date now) - ('2024-02-18T20:53' | into datetime) | format duration month)s now!"; - flag $LESBIAN; + # print (flag $LESBIAN); } diff --git a/programs/jrnl/src/commands/list_entries.rs b/programs/jrnl/src/commands/list_entries.rs index b1f617b..d488932 100644 --- a/programs/jrnl/src/commands/list_entries.rs +++ b/programs/jrnl/src/commands/list_entries.rs @@ -17,6 +17,7 @@ pub fn list_entries(path: PathBuf) -> io::Result<()> { println!("{}{r}{padding}{}", n.cyan(), l.white()) } + println!("d"); Ok(()) } else { eprintln!("Parsing error..."); From bb3ed014188b08a368c69a53ed252683139dab0e Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Fri, 9 Aug 2024 20:01:46 +0200 Subject: [PATCH 102/301] new window in same dir --- modules/desktop-environment/home/terminal.nix | 3 +++ 1 file changed, 3 insertions(+) diff --git a/modules/desktop-environment/home/terminal.nix b/modules/desktop-environment/home/terminal.nix index ad9f3c8..c8b3b54 100644 --- a/modules/desktop-environment/home/terminal.nix +++ b/modules/desktop-environment/home/terminal.nix @@ -5,6 +5,9 @@ name = "FiraCode Nerd Font"; size = 11; }; + keybindings = { + "ctrl+shift+n" = "new_os_window_with_cwd"; + }; settings = { #adjust_column_width = "70%"; color0 = "#282828"; From e603b5ecd5de3bf964c705e768b4cdca575f5e04 Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Fri, 9 Aug 2024 20:02:08 +0200 Subject: [PATCH 103/301] add event counter to shell startup --- other/scripts/desktop/shell-startup.nu | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/other/scripts/desktop/shell-startup.nu b/other/scripts/desktop/shell-startup.nu index 961f702..8ce5547 100644 --- a/other/scripts/desktop/shell-startup.nu +++ b/other/scripts/desktop/shell-startup.nu @@ -48,7 +48,21 @@ def flag [ def main [] { print (flag $TRANS); - print $"(ansi attr_bold) Hi jade, you're on HRT for ((date now) - ('2024-02-18T20:53' | into datetime) | format duration month)s now!"; + let next_events = open ~/Docs/dates.csv + | update datetime {|ev| $ev.datetime | into datetime } + | sort-by datetime + | first + | each {|ev| $"(ansi attr_bold)($ev.event)(ansi reset) in (ansi attr_bold)(tfmt ($ev.datetime - (date now)))s(ansi reset)" }; + print $"Hi jade, you're on HRT for (ansi reset)(ansi attr_bold)((date now) - ('2024-02-18T20:53' | into datetime) | format duration month)s(ansi reset) now! | Next Event: ($next_events)"; # print (flag $LESBIAN); } +def tfmt [dur: duration] { + if ($dur < 1hr) { + return ($dur | format duration min); + } else if ($dur < 1day) { + return ($dur | format duration hr); + } else { + return ($dur | format duration day); + } +} From f07c54346b2d0a5911b63bad4a524083e5227735 Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Fri, 9 Aug 2024 20:02:59 +0200 Subject: [PATCH 104/301] remove zellij autostart and add keyboard shortcut for it --- other/config.nu | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/other/config.nu b/other/config.nu index c735edb..c5ea054 100644 --- a/other/config.nu +++ b/other/config.nu @@ -335,6 +335,27 @@ $env.config = { ] keybindings: [ + ################################################################################ + # Custom keybinds # + ################################################################################ + { + name: undo_change + modifier: control + keycode: char_z + mode: [vi_normal, vi_insert] + event: [ + { edit: Clear } + { + edit: InsertString + value: "zellij attach main -c" + } + { send: Enter } + ] + } + + ################################################################################ + # Default keybinds # + ################################################################################ { name: completion_menu modifier: none @@ -810,7 +831,7 @@ def start_zellij [] { } } -start_zellij +# start_zellij # plugin add nu_plugin_net # plugin add nu_plugin_gstat From 2582b3796e6cf66547e9d88006fe892e5f61329c Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Fri, 9 Aug 2024 20:04:02 +0200 Subject: [PATCH 105/301] add command to find out when next the event is --- other/config.nu | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/other/config.nu b/other/config.nu index c5ea054..8a95fc7 100644 --- a/other/config.nu +++ b/other/config.nu @@ -879,6 +879,16 @@ def typed [ mprocs --names Editor,Viewer,Notify $"hx '($name).typ'" $"while true; do mupdf-x11 '($name).pdf' && break; done" $"while inotifywait -e modify '($name).pdf' ; do pkill -HUP mupdf; done" } +def nev [ unit = day ] { + ( ( open Docs/dates.csv + | update datetime {|it| $it.datetime | into datetime } + | first + ).datetime - (date now) + ) + | into duration + | format duration $unit +} + alias gnix = cd ~/nix-configs; alias grepo = cd ~/Documents/repos; alias wh = wormhole-rs; From 3c11d4177b5768f3029651b5ce750ed2ebdc835f Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Fri, 9 Aug 2024 20:04:42 +0200 Subject: [PATCH 106/301] flake.lock: Update MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Flake lock file updates: • Updated input 'crane': 'github:ipetkov/crane/852a59f9672c3413d75bca2b3e9cb4c661cacfc3' (2024-08-03) → 'github:ipetkov/crane/4c6c77920b8d44cd6660c1621dea6b3fc4b4c4f4' (2024-08-06) • Updated input 'fenix': 'github:nix-community/fenix/0caa626457f1f4f8273a89775bf9081b7fc09823' (2024-08-04) → 'github:nix-community/fenix/d5f1b280af93acddbcce948d946bb5db2f8035fe' (2024-08-09) • Updated input 'fenix/rust-analyzer-src': 'github:rust-lang/rust-analyzer/aa00ddcf654a35ba0eafe17247cf189958d33182' (2024-08-02) → 'github:rust-lang/rust-analyzer/dab022fb3127466e47e29e40769b11174b3e0ac3' (2024-08-08) • Updated input 'helix-inline-diags': 'github:helix-editor/helix/0a4432b104099534f7a25b8ea4148234db146ab6' (2024-08-02) → 'github:helix-editor/helix/e604d9f8e0fea2223a357be7c9dc6088daef47e7' (2024-08-09) • Updated input 'home-manager': 'github:nix-community/home-manager/afc892db74d65042031a093adb6010c4c3378422' (2024-08-02) → 'github:nix-community/home-manager/b3d5ea65d88d67d4ec578ed11d4d2d51e3de525e' (2024-08-07) • Updated input 'nixpkgs': 'github:NixOS/nixpkgs/d04953086551086b44b6f3c6b7eeb26294f207da' (2024-08-02) → 'github:NixOS/nixpkgs/cb9a96f23c491c081b38eab96d22fa958043c9fa' (2024-08-04) • Updated input 'nixpkgs-unstable-small': 'github:NixOS/nixpkgs/e17a38ddc27fc9c7a81b986c5866f83238d8b23e' (2024-08-03) → 'github:NixOS/nixpkgs/0048951e7a3eba3dce8bf6ba893390d29375c5d0' (2024-08-09) --- flake.lock | 58 +++++++++++++++++++++++++++--------------------------- 1 file changed, 29 insertions(+), 29 deletions(-) diff --git a/flake.lock b/flake.lock index 47c7a76..e754b29 100644 --- a/flake.lock +++ b/flake.lock @@ -7,11 +7,11 @@ ] }, "locked": { - "lastModified": 1721842668, - "narHash": "sha256-k3oiD2z2AAwBFLa4+xfU+7G5fisRXfkvrMTCJrjZzXo=", + "lastModified": 1722960479, + "narHash": "sha256-NhCkJJQhD5GUib8zN9JrmYGMwt4lCRp6ZVNzIiYCl0Y=", "owner": "ipetkov", "repo": "crane", - "rev": "529c1a0b1f29f0d78fa3086b8f6a134c71ef3aaf", + "rev": "4c6c77920b8d44cd6660c1621dea6b3fc4b4c4f4", "type": "github" }, "original": { @@ -28,11 +28,11 @@ "rust-analyzer-src": "rust-analyzer-src" }, "locked": { - "lastModified": 1722320953, - "narHash": "sha256-DfGaJtgrzcwPQYLTvjL1KaVIjpvi85b2MpM6yEGvJzM=", + "lastModified": 1723185066, + "narHash": "sha256-u7guFfIrfspwUp6/SEWCDhs2tVoE1fcgft0Fw7LdNEU=", "owner": "nix-community", "repo": "fenix", - "rev": "483df76def3e5010d709aa3a0418ba2088503994", + "rev": "d5f1b280af93acddbcce948d946bb5db2f8035fe", "type": "github" }, "original": { @@ -104,11 +104,11 @@ "rust-overlay": "rust-overlay" }, "locked": { - "lastModified": 1722305447, - "narHash": "sha256-2jG85FHBhKeoF8vNUkCHflrliuC8HCaMOzmERct9imc=", + "lastModified": 1723218034, + "narHash": "sha256-I6hMy00IkfQRcKVFVciHcZcCvuPmdnW/f58Xkstl13Y=", "owner": "helix-editor", "repo": "helix", - "rev": "ce809fb9ef4c5af59b5401419a2e8ae6964c8229", + "rev": "e604d9f8e0fea2223a357be7c9dc6088daef47e7", "type": "github" }, "original": { @@ -124,11 +124,11 @@ ] }, "locked": { - "lastModified": 1722321190, - "narHash": "sha256-WeVWVRqkgrbLzmk6FfJoloJ7Xe7HWD27Pv950IUG2kI=", + "lastModified": 1723015306, + "narHash": "sha256-jQnFEtH20/OsDPpx71ntZzGdRlpXhUENSQCGTjn//NA=", "owner": "nix-community", "repo": "home-manager", - "rev": "4fcd54df7cbb1d79cbe81209909ee8514d6b17a4", + "rev": "b3d5ea65d88d67d4ec578ed11d4d2d51e3de525e", "type": "github" }, "original": { @@ -140,11 +140,11 @@ "lix": { "flake": false, "locked": { - "lastModified": 1722357433, - "narHash": "sha256-bv8oI8t46KXY6elO4n0R9P3SPBLtuJFMYm0oDxLD/90=", - "rev": "97a389b0bee7baf2d445121afa6ec84bef3a4bd7", + "lastModified": 1722484894, + "narHash": "sha256-mmbf3xFov+q8h+44xx3jI/RQnIqhSbVa6ljWYV/jF3c=", + "rev": "a3ab2cc78a736109435f3cc8e1364fcc366c6c97", "type": "tarball", - "url": "https://git.lix.systems/api/v1/repos/lix-project/lix/archive/97a389b0bee7baf2d445121afa6ec84bef3a4bd7.tar.gz" + "url": "https://git.lix.systems/api/v1/repos/lix-project/lix/archive/a3ab2cc78a736109435f3cc8e1364fcc366c6c97.tar.gz" }, "original": { "type": "tarball", @@ -161,11 +161,11 @@ ] }, "locked": { - "lastModified": 1720695775, - "narHash": "sha256-8Oqzl9QPjEe/n8y0R2tC6+2v/H6xBgABHXOJwxmnBg0=", + "lastModified": 1722485024, + "narHash": "sha256-+7RReWaFQUO8MfAhJYNm4FkALuM3rPGy2AlXXv9Jmc8=", "ref": "refs/heads/main", - "rev": "d70318fb946a0e720dfdd1fb10b0645c14e2a02a", - "revCount": 94, + "rev": "e350380d72f94035c309e19fda2fd550f6ab7376", + "revCount": 102, "type": "git", "url": "https://git.lix.systems/lix-project/nixos-module" }, @@ -205,11 +205,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1722185531, - "narHash": "sha256-veKR07psFoJjINLC8RK4DiLniGGMgF3QMlS4tb74S6k=", + "lastModified": 1722813957, + "narHash": "sha256-IAoYyYnED7P8zrBFMnmp7ydaJfwTnwcnqxUElC1I26Y=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "52ec9ac3b12395ad677e8b62106f0b98c1f8569d", + "rev": "cb9a96f23c491c081b38eab96d22fa958043c9fa", "type": "github" }, "original": { @@ -235,11 +235,11 @@ }, "nixpkgs-unstable-small": { "locked": { - "lastModified": 1722309256, - "narHash": "sha256-Eqlu/hisMWE51b9YeKqehNaHLPhZOmkFkrx+VzI5YcM=", + "lastModified": 1723197662, + "narHash": "sha256-NSvqhZYv0LY2eh0a3yoAvJjGlWeOLSjmPpivSnY9pXg=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "3fcada1050e3820241590679838954bacf7d38f8", + "rev": "0048951e7a3eba3dce8bf6ba893390d29375c5d0", "type": "github" }, "original": { @@ -265,11 +265,11 @@ "rust-analyzer-src": { "flake": false, "locked": { - "lastModified": 1722262053, - "narHash": "sha256-KxjkPVn9rQqYam6DhiN/V2NcMXtYW25maxkJoiVMpmE=", + "lastModified": 1723124382, + "narHash": "sha256-WdJYEBlc8qsif+y4qnkjaeEpDmOZhz8qA6i/2n1q2kw=", "owner": "rust-lang", "repo": "rust-analyzer", - "rev": "a021b85be57d34b1eed687fcafd5d5ec64b2d853", + "rev": "dab022fb3127466e47e29e40769b11174b3e0ac3", "type": "github" }, "original": { From a29f210273103930fc59ad5a00e9ed5f4c52fcc0 Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Mon, 26 Aug 2024 13:41:37 +0200 Subject: [PATCH 107/301] start eww bar setup --- .../home/panels/default.nix | 1 + .../home/panels/eww/configDir/eww.css | 7 ++ .../home/panels/eww/configDir/eww.yuck | 85 +++++++++++++++++++ .../home/panels/eww/default.nix | 6 ++ .../home/panels/eww/scripts/bat.nu | 23 +++++ modules/desktop/social.nix | 2 + 6 files changed, 124 insertions(+) create mode 100644 modules/desktop-environment/home/panels/eww/configDir/eww.css create mode 100644 modules/desktop-environment/home/panels/eww/configDir/eww.yuck create mode 100644 modules/desktop-environment/home/panels/eww/default.nix create mode 100644 modules/desktop-environment/home/panels/eww/scripts/bat.nu diff --git a/modules/desktop-environment/home/panels/default.nix b/modules/desktop-environment/home/panels/default.nix index 920a7dc..2f0bed2 100644 --- a/modules/desktop-environment/home/panels/default.nix +++ b/modules/desktop-environment/home/panels/default.nix @@ -2,5 +2,6 @@ imports = [ ./xmobar ./polybar.nix + ./eww ]; } diff --git a/modules/desktop-environment/home/panels/eww/configDir/eww.css b/modules/desktop-environment/home/panels/eww/configDir/eww.css new file mode 100644 index 0000000..3e12d0f --- /dev/null +++ b/modules/desktop-environment/home/panels/eww/configDir/eww.css @@ -0,0 +1,7 @@ +.topbar { + margin-bottom: 2px; +} + +label { + font: 14pt "FiraCode Nerd Font"; +} \ No newline at end of file diff --git a/modules/desktop-environment/home/panels/eww/configDir/eww.yuck b/modules/desktop-environment/home/panels/eww/configDir/eww.yuck new file mode 100644 index 0000000..e986e0b --- /dev/null +++ b/modules/desktop-environment/home/panels/eww/configDir/eww.yuck @@ -0,0 +1,85 @@ +(defwindow topBar + :monitor 0 + :stacking "fg" + :windowtype "normal" + :wm-ignore true + :exclusive true + :geometry (geometry + :width "100%" + :height "32px" + :anchor "top center") + (topBar)) + +(defwidget topBar [] + (overlay + :class "topBar" + (centerbox + (box + :halign "start" + :spacing 12 + :space-evenly false + (label :text " ") + (cpu) + (sep) + (mem) + ) + (box + :halign "center" + (label :text "Hi, jade! :3") + ) + (box + :halign "end" + (time) + ) + ) + (box + :class "transFlag" + :height 1 + ( flagEl :color "#5BCEFA") + ( flagEl :color "#F5A9B8") + ( flagEl :color "#FFFFFF") + ( flagEl :color "#F5A9B8") + ( flagEl :color "#5BCEFA") + ) + ) +) + +(defwidget sep [] + (label :text "|") +) + +(defwidget time [] + (label + :markup { + formattime( + EWW_TIME, + " %Y-%m-%d %H:%M:%S " + ) + } + ) +) + +(defwidget cpu [] + (box + :class "cpuIndicator" + (label + :markup " ${strlength(round(EWW_CPU.avg, 0)) == 1 ? " ${round(EWW_CPU.avg, 0)}" : round(EWW_CPU.avg, 0)}%" + ) + ) +) + +(defwidget mem [] + (box + :class "memIndicator" + (label + :markup " ${round(EWW_RAM.used_mem_perc, 0)}%" + ) + ) +) + +(defwidget flagEl [color] + (box + :style "border-bottom: 2px solid ${color}" + :halign "fill" + ) +) diff --git a/modules/desktop-environment/home/panels/eww/default.nix b/modules/desktop-environment/home/panels/eww/default.nix new file mode 100644 index 0000000..377c1f4 --- /dev/null +++ b/modules/desktop-environment/home/panels/eww/default.nix @@ -0,0 +1,6 @@ +{ ... }: { + programs.eww = { + enable = true; + configDir = ./configDir; + }; +} diff --git a/modules/desktop-environment/home/panels/eww/scripts/bat.nu b/modules/desktop-environment/home/panels/eww/scripts/bat.nu new file mode 100644 index 0000000..01a043d --- /dev/null +++ b/modules/desktop-environment/home/panels/eww/scripts/bat.nu @@ -0,0 +1,23 @@ +#!/usr/bin/env nu + +const ICONS = [ + [ 󰂎 󰢟 ] + [ 󰁺 󰢜 ] + [ 󰁻 󰂆 ] + [ 󰁼 󰂇 ] + [ 󰁽 󰂈 ] + [ 󰁾 󰢝 ] + [ 󰁿 󰂉 ] + [ 󰂀 󰢞 ] + [ 󰂁 󰂊 ] + [ 󰂂 󰂋 ] + [ 󰁹 󰂅 ] +]; + +def get_bat_percent [path: string] { + let energy_full = open $"/sys/class/power_supply/($path)/energy_full" | into float; + let energy_now = open $"/sys/class/power_supply/($path)/energy_now" | into float; + + ($energy_now / $energy_full) * 100 +} + diff --git a/modules/desktop/social.nix b/modules/desktop/social.nix index b8569bc..ea3e560 100644 --- a/modules/desktop/social.nix +++ b/modules/desktop/social.nix @@ -20,6 +20,8 @@ in signal-desktop mumble element-desktop + # nheko + # iamb ]; }; }; From d3d62ce5a5da01d21de4b922701cfbc01c032ed0 Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Mon, 26 Aug 2024 13:42:09 +0200 Subject: [PATCH 108/301] correct browser in notification daemon settings --- modules/desktop-environment/home/notifications.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/desktop-environment/home/notifications.nix b/modules/desktop-environment/home/notifications.nix index 3d4eff1..25126ff 100644 --- a/modules/desktop-environment/home/notifications.nix +++ b/modules/desktop-environment/home/notifications.nix @@ -4,7 +4,7 @@ settings = { global = { dmenu = "${pkgs.rofi}/bin/rofi -theme gruvbox-dark -dmenu -p dunst"; - browser = "${pkgs.librewolf}/bin/librewolf"; + browser = "${pkgs.firefox}/bin/firefox"; mouse_left_click = "context"; mouse_middle_click = "close_current"; background = "#282828"; From 3157730a5f723c077cbd4e5ccdc9df901fad3d4a Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Mon, 26 Aug 2024 13:42:20 +0200 Subject: [PATCH 109/301] use typst-lsp from stable --- modules/shell/helix.nix | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/modules/shell/helix.nix b/modules/shell/helix.nix index 36d3e41..c3c4ea9 100644 --- a/modules/shell/helix.nix +++ b/modules/shell/helix.nix @@ -3,7 +3,11 @@ helix-inline-diags, ... }: { - home-manager.users.jade = {pkgs, ...}: { + home-manager.users.jade = { + pkgs, + pkgs-stable, + ... + }: { home = { sessionVariables.EDITOR = "hx"; packages = [ @@ -11,7 +15,7 @@ pkgs.vscode-langservers-extracted pkgs.nodePackages.typescript-language-server pkgs.emmet-language-server - pkgs.typst-lsp + pkgs-stable.typst-lsp ]; }; programs.helix = { From fcb7c0cd683718f22585b35b8e2d0b932267aed1 Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Mon, 26 Aug 2024 13:42:26 +0200 Subject: [PATCH 110/301] flake.lock: Update --- flake.lock | 58 +++++++++++++++++++++++++++--------------------------- 1 file changed, 29 insertions(+), 29 deletions(-) diff --git a/flake.lock b/flake.lock index e754b29..6e741be 100644 --- a/flake.lock +++ b/flake.lock @@ -7,11 +7,11 @@ ] }, "locked": { - "lastModified": 1722960479, - "narHash": "sha256-NhCkJJQhD5GUib8zN9JrmYGMwt4lCRp6ZVNzIiYCl0Y=", + "lastModified": 1724537630, + "narHash": "sha256-gpqINM71zp3kw5XYwUXa84ZtPnCmLLnByuFoYesT1bY=", "owner": "ipetkov", "repo": "crane", - "rev": "4c6c77920b8d44cd6660c1621dea6b3fc4b4c4f4", + "rev": "3e08f4b1fc9aaede5dd511d8f5f4ef27501e49b0", "type": "github" }, "original": { @@ -28,11 +28,11 @@ "rust-analyzer-src": "rust-analyzer-src" }, "locked": { - "lastModified": 1723185066, - "narHash": "sha256-u7guFfIrfspwUp6/SEWCDhs2tVoE1fcgft0Fw7LdNEU=", + "lastModified": 1724567349, + "narHash": "sha256-w2G1EJlGvgRSC1OAm2147mCzlt6ZOWIiqX/TSJUgrGE=", "owner": "nix-community", "repo": "fenix", - "rev": "d5f1b280af93acddbcce948d946bb5db2f8035fe", + "rev": "71fe264f6e208831aa0e7e54ad557a283c375014", "type": "github" }, "original": { @@ -104,11 +104,11 @@ "rust-overlay": "rust-overlay" }, "locked": { - "lastModified": 1723218034, - "narHash": "sha256-I6hMy00IkfQRcKVFVciHcZcCvuPmdnW/f58Xkstl13Y=", + "lastModified": 1724401716, + "narHash": "sha256-LXTYUVhv6Kz9Iy9DxXSI0J+2/hunUj2fj0Kvw2eDarQ=", "owner": "helix-editor", "repo": "helix", - "rev": "e604d9f8e0fea2223a357be7c9dc6088daef47e7", + "rev": "620dfceb849d6b68d41d4f7678bb4675009fef4d", "type": "github" }, "original": { @@ -124,11 +124,11 @@ ] }, "locked": { - "lastModified": 1723015306, - "narHash": "sha256-jQnFEtH20/OsDPpx71ntZzGdRlpXhUENSQCGTjn//NA=", + "lastModified": 1724435763, + "narHash": "sha256-UNky3lJNGQtUEXT2OY8gMxejakSWPTfWKvpFkpFlAfM=", "owner": "nix-community", "repo": "home-manager", - "rev": "b3d5ea65d88d67d4ec578ed11d4d2d51e3de525e", + "rev": "c2cd2a52e02f1dfa1c88f95abeb89298d46023be", "type": "github" }, "original": { @@ -140,11 +140,11 @@ "lix": { "flake": false, "locked": { - "lastModified": 1722484894, - "narHash": "sha256-mmbf3xFov+q8h+44xx3jI/RQnIqhSbVa6ljWYV/jF3c=", - "rev": "a3ab2cc78a736109435f3cc8e1364fcc366c6c97", + "lastModified": 1723511168, + "narHash": "sha256-XDcqLVPcsMhORerIPuQ1XNALtDvG6QRA2dKyNrccXyg=", + "rev": "f9a3bf6ccccf8ac6b1604c1a2980e3a565ae4f44", "type": "tarball", - "url": "https://git.lix.systems/api/v1/repos/lix-project/lix/archive/a3ab2cc78a736109435f3cc8e1364fcc366c6c97.tar.gz" + "url": "https://git.lix.systems/api/v1/repos/lix-project/lix/archive/f9a3bf6ccccf8ac6b1604c1a2980e3a565ae4f44.tar.gz?rev=f9a3bf6ccccf8ac6b1604c1a2980e3a565ae4f44" }, "original": { "type": "tarball", @@ -161,11 +161,11 @@ ] }, "locked": { - "lastModified": 1722485024, - "narHash": "sha256-+7RReWaFQUO8MfAhJYNm4FkALuM3rPGy2AlXXv9Jmc8=", + "lastModified": 1723511483, + "narHash": "sha256-rT/OkVXKkns2YvyF1nFvl+8Gc3sld1c1sXPtGkbqaDY=", "ref": "refs/heads/main", - "rev": "e350380d72f94035c309e19fda2fd550f6ab7376", - "revCount": 102, + "rev": "cecf70b77539c1a593f60ec9d0305b5e537ab6a9", + "revCount": 106, "type": "git", "url": "https://git.lix.systems/lix-project/nixos-module" }, @@ -205,11 +205,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1722813957, - "narHash": "sha256-IAoYyYnED7P8zrBFMnmp7ydaJfwTnwcnqxUElC1I26Y=", + "lastModified": 1724224976, + "narHash": "sha256-Z/ELQhrSd7bMzTO8r7NZgi9g5emh+aRKoCdaAv5fiO0=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "cb9a96f23c491c081b38eab96d22fa958043c9fa", + "rev": "c374d94f1536013ca8e92341b540eba4c22f9c62", "type": "github" }, "original": { @@ -235,11 +235,11 @@ }, "nixpkgs-unstable-small": { "locked": { - "lastModified": 1723197662, - "narHash": "sha256-NSvqhZYv0LY2eh0a3yoAvJjGlWeOLSjmPpivSnY9pXg=", + "lastModified": 1724558323, + "narHash": "sha256-uPXidysk1BXSayGzpxDW8JUgGvLWS+L1CTlBV3xcQB4=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "0048951e7a3eba3dce8bf6ba893390d29375c5d0", + "rev": "ba0c72cea47a45556ccd5bc566433bd1242a0f93", "type": "github" }, "original": { @@ -265,11 +265,11 @@ "rust-analyzer-src": { "flake": false, "locked": { - "lastModified": 1723124382, - "narHash": "sha256-WdJYEBlc8qsif+y4qnkjaeEpDmOZhz8qA6i/2n1q2kw=", + "lastModified": 1724480527, + "narHash": "sha256-C+roFDGk6Bn/C58NGpyt7cneLCetdRMUfFTkm3O4zWM=", "owner": "rust-lang", "repo": "rust-analyzer", - "rev": "dab022fb3127466e47e29e40769b11174b3e0ac3", + "rev": "74a6427861eb8d1e3b7c6090b2c2890ff4c53e0e", "type": "github" }, "original": { From ac3df09b6bdac70bf64131a73674a380c567fb8c Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Wed, 28 Aug 2024 09:12:28 +0200 Subject: [PATCH 111/301] replace top bar with eww bar --- .../home/panels/eww/configDir/eww.yuck | 86 +--------------- .../home/panels/eww/configDir/scripts/bat.nu | 55 +++++++++++ .../panels/eww/configDir/topBar/sysinfo.yuck | 27 +++++ .../panels/eww/configDir/topBar/time.yuck | 10 ++ .../panels/eww/configDir/topBar/topBar.yuck | 56 +++++++++++ .../home/panels/eww/configDir/util.yuck | 11 +++ .../home/panels/eww/scripts/bat.nu | 23 ----- .../desktop-environment/home/sway/default.nix | 98 +++---------------- 8 files changed, 172 insertions(+), 194 deletions(-) create mode 100755 modules/desktop-environment/home/panels/eww/configDir/scripts/bat.nu create mode 100644 modules/desktop-environment/home/panels/eww/configDir/topBar/sysinfo.yuck create mode 100644 modules/desktop-environment/home/panels/eww/configDir/topBar/time.yuck create mode 100644 modules/desktop-environment/home/panels/eww/configDir/topBar/topBar.yuck create mode 100644 modules/desktop-environment/home/panels/eww/configDir/util.yuck delete mode 100644 modules/desktop-environment/home/panels/eww/scripts/bat.nu diff --git a/modules/desktop-environment/home/panels/eww/configDir/eww.yuck b/modules/desktop-environment/home/panels/eww/configDir/eww.yuck index e986e0b..d17d0f0 100644 --- a/modules/desktop-environment/home/panels/eww/configDir/eww.yuck +++ b/modules/desktop-environment/home/panels/eww/configDir/eww.yuck @@ -1,85 +1 @@ -(defwindow topBar - :monitor 0 - :stacking "fg" - :windowtype "normal" - :wm-ignore true - :exclusive true - :geometry (geometry - :width "100%" - :height "32px" - :anchor "top center") - (topBar)) - -(defwidget topBar [] - (overlay - :class "topBar" - (centerbox - (box - :halign "start" - :spacing 12 - :space-evenly false - (label :text " ") - (cpu) - (sep) - (mem) - ) - (box - :halign "center" - (label :text "Hi, jade! :3") - ) - (box - :halign "end" - (time) - ) - ) - (box - :class "transFlag" - :height 1 - ( flagEl :color "#5BCEFA") - ( flagEl :color "#F5A9B8") - ( flagEl :color "#FFFFFF") - ( flagEl :color "#F5A9B8") - ( flagEl :color "#5BCEFA") - ) - ) -) - -(defwidget sep [] - (label :text "|") -) - -(defwidget time [] - (label - :markup { - formattime( - EWW_TIME, - " %Y-%m-%d %H:%M:%S " - ) - } - ) -) - -(defwidget cpu [] - (box - :class "cpuIndicator" - (label - :markup " ${strlength(round(EWW_CPU.avg, 0)) == 1 ? " ${round(EWW_CPU.avg, 0)}" : round(EWW_CPU.avg, 0)}%" - ) - ) -) - -(defwidget mem [] - (box - :class "memIndicator" - (label - :markup " ${round(EWW_RAM.used_mem_perc, 0)}%" - ) - ) -) - -(defwidget flagEl [color] - (box - :style "border-bottom: 2px solid ${color}" - :halign "fill" - ) -) +(include "topBar/topBar.yuck") diff --git a/modules/desktop-environment/home/panels/eww/configDir/scripts/bat.nu b/modules/desktop-environment/home/panels/eww/configDir/scripts/bat.nu new file mode 100755 index 0000000..4136585 --- /dev/null +++ b/modules/desktop-environment/home/panels/eww/configDir/scripts/bat.nu @@ -0,0 +1,55 @@ +#!/usr/bin/env nu + +const ICONS = [ + [ normal charging]; + [ 󰂎 󰢟 ] + [ 󰁺 󰢜 ] + [ 󰁻 󰂆 ] + [ 󰁼 󰂇 ] + [ 󰁽 󰂈 ] + [ 󰁾 󰢝 ] + [ 󰁿 󰂉 ] + [ 󰂀 󰢞 ] + [ 󰂁 󰂊 ] + [ 󰂂 󰂋 ] + [ 󰁹 󰂅 ] +]; + +def main [ path: string ] { + loop { + let fract = get_bat_charge_fraction $path; + let is_charging = get_bat_charging_status $path; + let percent = ($fract * 100) | math round; + + print $"(get_bat_icon $fract $is_charging) ($percent)%"; + sleep 2sec; + } +} + +def get_bat_charge_fraction [ + path: string +] { + let energy_full = open $"/sys/class/power_supply/($path)/energy_full" | into float; + let energy_now = open $"/sys/class/power_supply/($path)/energy_now" | into float; + + $energy_now / $energy_full +} + +def get_bat_charging_status [ + path: string +] { + let status = open $"/sys/class/power_supply/($path)/status"; + + if ($status == Charging) { + true + } else { + false + } +} + +def get_bat_icon [ + frac: float + is_charging = false +] { + $ICONS | get (($frac * 10) | math round) | get (if ($is_charging) { "charging" } else { "normal" }) +} diff --git a/modules/desktop-environment/home/panels/eww/configDir/topBar/sysinfo.yuck b/modules/desktop-environment/home/panels/eww/configDir/topBar/sysinfo.yuck new file mode 100644 index 0000000..3cf8e2c --- /dev/null +++ b/modules/desktop-environment/home/panels/eww/configDir/topBar/sysinfo.yuck @@ -0,0 +1,27 @@ +(deflisten bat0 + :initial "BAT0 ERR" + { "~/.config/eww/scripts/bat.nu BAT0"} +) +(deflisten bat1 + :initial "BAT1 ERR" + { "~/.config/eww/scripts/bat.nu BAT1"} +) + +(defwidget cpu [] + (box + :class "cpuIndicator" + (label + :markup " ${strlength(round(EWW_CPU.avg, 0)) == 1 ? " ${round(EWW_CPU.avg, 0)}" : round(EWW_CPU.avg, 0)}%" + ) + ) +) + +(defwidget mem [] + (box + :class "memIndicator" + (label + :markup " ${round(EWW_RAM.used_mem_perc, 0)}%" + ) + ) +) + diff --git a/modules/desktop-environment/home/panels/eww/configDir/topBar/time.yuck b/modules/desktop-environment/home/panels/eww/configDir/topBar/time.yuck new file mode 100644 index 0000000..48b58de --- /dev/null +++ b/modules/desktop-environment/home/panels/eww/configDir/topBar/time.yuck @@ -0,0 +1,10 @@ +(defwidget time [] + (label + :markup { + formattime( + EWW_TIME, + " %Y-%m-%d %H:%M:%S " + ) + } + ) +) diff --git a/modules/desktop-environment/home/panels/eww/configDir/topBar/topBar.yuck b/modules/desktop-environment/home/panels/eww/configDir/topBar/topBar.yuck new file mode 100644 index 0000000..8963e5a --- /dev/null +++ b/modules/desktop-environment/home/panels/eww/configDir/topBar/topBar.yuck @@ -0,0 +1,56 @@ +(include "topBar/time.yuck") +(include "topBar/sysinfo.yuck") +(include "util.yuck") + +(defwindow topBar + :monitor 0 + :stacking "fg" + :windowtype "normal" + :wm-ignore true + :exclusive true + :geometry (geometry + :width "100%" + :height "32px" + :anchor "top center") + (topBar)) + +(defwidget topBar [] + (overlay + :class "topBar" + (centerbox + (box + :halign "start" + :spacing 12 + :space-evenly false + (label :text " ") + (cpu) + (sep) + (mem) + (sep) + (label :markup bat0) + (sep) + (label :markup bat1) + ) + (box + :halign "center" + (systray + :icon-size 18 + :spacing 3 + ) + ) + (box + :halign "end" + (time) + ) + ) + (box + :class "transFlag" + :height 1 + ( flagEl :color "#5BCEFA") + ( flagEl :color "#F5A9B8") + ( flagEl :color "#FFFFFF") + ( flagEl :color "#F5A9B8") + ( flagEl :color "#5BCEFA") + ) + ) +) diff --git a/modules/desktop-environment/home/panels/eww/configDir/util.yuck b/modules/desktop-environment/home/panels/eww/configDir/util.yuck new file mode 100644 index 0000000..53b9be5 --- /dev/null +++ b/modules/desktop-environment/home/panels/eww/configDir/util.yuck @@ -0,0 +1,11 @@ +(defwidget flagEl [color] + (box + :style "border-bottom: 3px solid ${color}" + :halign "fill" + ) +) + +(defwidget sep [] + (label :text "|") +) + diff --git a/modules/desktop-environment/home/panels/eww/scripts/bat.nu b/modules/desktop-environment/home/panels/eww/scripts/bat.nu deleted file mode 100644 index 01a043d..0000000 --- a/modules/desktop-environment/home/panels/eww/scripts/bat.nu +++ /dev/null @@ -1,23 +0,0 @@ -#!/usr/bin/env nu - -const ICONS = [ - [ 󰂎 󰢟 ] - [ 󰁺 󰢜 ] - [ 󰁻 󰂆 ] - [ 󰁼 󰂇 ] - [ 󰁽 󰂈 ] - [ 󰁾 󰢝 ] - [ 󰁿 󰂉 ] - [ 󰂀 󰢞 ] - [ 󰂁 󰂊 ] - [ 󰂂 󰂋 ] - [ 󰁹 󰂅 ] -]; - -def get_bat_percent [path: string] { - let energy_full = open $"/sys/class/power_supply/($path)/energy_full" | into float; - let energy_now = open $"/sys/class/power_supply/($path)/energy_now" | into float; - - ($energy_now / $energy_full) * 100 -} - diff --git a/modules/desktop-environment/home/sway/default.nix b/modules/desktop-environment/home/sway/default.nix index 3edfb31..75f4bf5 100644 --- a/modules/desktop-environment/home/sway/default.nix +++ b/modules/desktop-environment/home/sway/default.nix @@ -32,98 +32,12 @@ target = "sway-session.target"; }; settings = { - infobar = { - layer = "top"; - position = "top"; - modules-left = ["memory" "cpu" "network" "group/bats"]; - modules-center = ["sway/window"]; - modules-right = ["clock"]; - "group/bats" = { - orientation = "inherit"; - modules = ["battery#bat0" "battery#bat1" "upower#headphones"]; - }; - "battery#bat0" = { - adapter = "AC"; - bat = "BAT0"; - interval = 2; - format = "{icon} {capacity}% {time}"; - format-charging = "󱐋 {icon} {capacity}% {time}"; - format-time = "{h}:{m}"; - format-icons = [ - "󰁺" - "󰁻" - "󰁼" - "󰁽" - "󰁾" - "󰁿" - "󰂀" - "󰂁" - "󰂂" - "󰁹" - ]; - tooltip = true; - tooltip-format = "BAT0: {cycles} cycles"; - }; - "battery#bat1" = { - adapter = "AC"; - bat = "BAT1"; - interval = 2; - format = "󱐋 {icon} {capacity}% {time}"; - format-time = "{H}:{M}"; - format-icons = [ - "󰁺" - "󰁻" - "󰁼" - "󰁽" - "󰁾" - "󰁿" - "󰂀" - "󰂁" - "󰂂" - "󰁹" - ]; - tooltip = true; - tooltip-format = "BAT1: {cycles} cycles"; - }; - "upower#headphones" = { - native-path = "/org/bluez/hci0/dev_4C_87_5D_29_B3_76"; - format = "󰋋 {percentage} {time}"; - hide-if-empty = true; - show-icon = false; - }; - }; interactiveBar = { layer = "top"; position = "bottom"; modules-left = ["sway/workspaces" "sway/mode"]; - modules-center = ["tray"]; modules-right = ["wlr/taskbar"]; }; - # mainBar = { - # layer = "top"; - # position = "top"; - # height = 30; - # output = [ - # "eDP-1" - # "HDMI-A-1" - # ]; - # modules-left = ["sway/workspaces" "sway/mode" "wlr/taskbar"]; - # modules-center = ["sway/window" "custom/hello-from-waybar"]; - # modules-right = ["mpd" "custom/mymodule#with-css-id" "temperature"]; - - # "sway/workspaces" = { - # disable-scroll = true; - # all-outputs = true; - # }; - # "custom/hello-from-waybar" = { - # format = "hello {}"; - # max-length = 40; - # interval = "once"; - # exec = pkgs.writeShellScript "hello-from-waybar" '' - # echo "from within waybar" - # ''; - # }; - # }; }; }; @@ -163,6 +77,18 @@ xkb_variant = "altgr-intl"; }; }; + startup = [ + { + command = "eww open topBar"; + } + { + command = "pkill nm-applet; sleep 1 && nm-applet"; + always = true; + } + { + command = "sleep 1 && mullvad-gui"; + } + ]; bars = []; menu = "wofi -d"; modifier = "Mod4"; From 6aab08ec9b215c2393af1bb0e614a03b62dee721 Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Mon, 2 Sep 2024 19:07:19 +0200 Subject: [PATCH 112/301] do more bar things --- .../eww/configDir/bottomBar/bottomBar.yuck | 41 +++++++++++++++++++ .../home/panels/eww/configDir/eww.css | 2 +- .../home/panels/eww/configDir/eww.yuck | 1 + .../eww/configDir/scripts/workspaces.nu | 3 ++ .../panels/eww/configDir/topBar/topBar.yuck | 11 +++-- .../home/panels/eww/configDir/util.yuck | 4 +- 6 files changed, 53 insertions(+), 9 deletions(-) create mode 100644 modules/desktop-environment/home/panels/eww/configDir/bottomBar/bottomBar.yuck create mode 100644 modules/desktop-environment/home/panels/eww/configDir/scripts/workspaces.nu diff --git a/modules/desktop-environment/home/panels/eww/configDir/bottomBar/bottomBar.yuck b/modules/desktop-environment/home/panels/eww/configDir/bottomBar/bottomBar.yuck new file mode 100644 index 0000000..2a2da02 --- /dev/null +++ b/modules/desktop-environment/home/panels/eww/configDir/bottomBar/bottomBar.yuck @@ -0,0 +1,41 @@ +(defwindow bottomBar + :monitor 0 + :stacking "fg" + :wm-ignore true + :exclusive true + :geometry (geometry + :width "100%" + :height "32px" + :anchor "bottom center") + (bottomBar)) + +(defwidget bottomBar [] + (overlay + :class "bottomBar" + (centerbox + (box + :halign "start" + (label :text "left") + ) + (box + :halign "center" + (label :text "mid") + ) + (box + :halign "end" + (label :text "right") + ) + ) + (box + :class "lesbianFlag" + :height 1 + ( flagEl :flipped true :color "#D52D00") + ( flagEl :flipped true :color "#EF7627") + ( flagEl :flipped true :color "#FF9A56") + ( flagEl :flipped true :color "#FFFFFF") + ( flagEl :flipped true :color "#D162A4") + ( flagEl :flipped true :color "#B55690") + ( flagEl :flipped true :color "#A30262") + ) + ) +) diff --git a/modules/desktop-environment/home/panels/eww/configDir/eww.css b/modules/desktop-environment/home/panels/eww/configDir/eww.css index 3e12d0f..851f731 100644 --- a/modules/desktop-environment/home/panels/eww/configDir/eww.css +++ b/modules/desktop-environment/home/panels/eww/configDir/eww.css @@ -1,4 +1,4 @@ -.topbar { +.topBar { margin-bottom: 2px; } diff --git a/modules/desktop-environment/home/panels/eww/configDir/eww.yuck b/modules/desktop-environment/home/panels/eww/configDir/eww.yuck index d17d0f0..5e5d10d 100644 --- a/modules/desktop-environment/home/panels/eww/configDir/eww.yuck +++ b/modules/desktop-environment/home/panels/eww/configDir/eww.yuck @@ -1 +1,2 @@ (include "topBar/topBar.yuck") +(include "bottomBar/bottomBar.yuck") diff --git a/modules/desktop-environment/home/panels/eww/configDir/scripts/workspaces.nu b/modules/desktop-environment/home/panels/eww/configDir/scripts/workspaces.nu new file mode 100644 index 0000000..6e72651 --- /dev/null +++ b/modules/desktop-environment/home/panels/eww/configDir/scripts/workspaces.nu @@ -0,0 +1,3 @@ +def main [] { + mut workspaces = waymsg -rt get_workspaces | from json | select name focused urgent; +} diff --git a/modules/desktop-environment/home/panels/eww/configDir/topBar/topBar.yuck b/modules/desktop-environment/home/panels/eww/configDir/topBar/topBar.yuck index 8963e5a..be4b25f 100644 --- a/modules/desktop-environment/home/panels/eww/configDir/topBar/topBar.yuck +++ b/modules/desktop-environment/home/panels/eww/configDir/topBar/topBar.yuck @@ -5,7 +5,6 @@ (defwindow topBar :monitor 0 :stacking "fg" - :windowtype "normal" :wm-ignore true :exclusive true :geometry (geometry @@ -46,11 +45,11 @@ (box :class "transFlag" :height 1 - ( flagEl :color "#5BCEFA") - ( flagEl :color "#F5A9B8") - ( flagEl :color "#FFFFFF") - ( flagEl :color "#F5A9B8") - ( flagEl :color "#5BCEFA") + ( flagEl :flipped false :color "#5BCEFA") + ( flagEl :flipped false :color "#F5A9B8") + ( flagEl :flipped false :color "#FFFFFF") + ( flagEl :flipped false :color "#F5A9B8") + ( flagEl :flipped false :color "#5BCEFA") ) ) ) diff --git a/modules/desktop-environment/home/panels/eww/configDir/util.yuck b/modules/desktop-environment/home/panels/eww/configDir/util.yuck index 53b9be5..f0aa592 100644 --- a/modules/desktop-environment/home/panels/eww/configDir/util.yuck +++ b/modules/desktop-environment/home/panels/eww/configDir/util.yuck @@ -1,6 +1,6 @@ -(defwidget flagEl [color] +(defwidget flagEl [color ?flipped] (box - :style "border-bottom: 3px solid ${color}" + :style "border-${flipped ? "top" : "bottom"}: 3px solid ${color}" :halign "fill" ) ) From 47ba1e5796a173d172df2fc7866a4d9113521d17 Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Mon, 2 Sep 2024 19:07:58 +0200 Subject: [PATCH 113/301] fix broken/deprecated things --- flake.lock | 47 +++++++++---------- flake.nix | 5 +- hosts/catbook-j/configuration.nix | 2 +- .../desktop-environment/home/sway/default.nix | 1 + modules/desktop/default.nix | 8 ---- 5 files changed, 24 insertions(+), 39 deletions(-) diff --git a/flake.lock b/flake.lock index 6e741be..df5082c 100644 --- a/flake.lock +++ b/flake.lock @@ -1,17 +1,12 @@ { "nodes": { "crane": { - "inputs": { - "nixpkgs": [ - "nixpkgs" - ] - }, "locked": { - "lastModified": 1724537630, - "narHash": "sha256-gpqINM71zp3kw5XYwUXa84ZtPnCmLLnByuFoYesT1bY=", + "lastModified": 1725125250, + "narHash": "sha256-CB20rDD5eHikF6mMTTJdwPP1qvyoiyyw1RDUzwIaIF8=", "owner": "ipetkov", "repo": "crane", - "rev": "3e08f4b1fc9aaede5dd511d8f5f4ef27501e49b0", + "rev": "96fd12c7100e9e05fa1a0a5bd108525600ce282f", "type": "github" }, "original": { @@ -28,11 +23,11 @@ "rust-analyzer-src": "rust-analyzer-src" }, "locked": { - "lastModified": 1724567349, - "narHash": "sha256-w2G1EJlGvgRSC1OAm2147mCzlt6ZOWIiqX/TSJUgrGE=", + "lastModified": 1725258763, + "narHash": "sha256-7s5RfYlTljWnKGkK4hOMJCJ0sNQoLYjMxezX3Vijy/0=", "owner": "nix-community", "repo": "fenix", - "rev": "71fe264f6e208831aa0e7e54ad557a283c375014", + "rev": "0774f58cf1025bbb713971deecc7f07c856be6ed", "type": "github" }, "original": { @@ -104,11 +99,11 @@ "rust-overlay": "rust-overlay" }, "locked": { - "lastModified": 1724401716, - "narHash": "sha256-LXTYUVhv6Kz9Iy9DxXSI0J+2/hunUj2fj0Kvw2eDarQ=", + "lastModified": 1724856988, + "narHash": "sha256-JBLe2CxAhG+J8+x8qmbzkGHNYmGcSiuY2QO4Zhb72lI=", "owner": "helix-editor", "repo": "helix", - "rev": "620dfceb849d6b68d41d4f7678bb4675009fef4d", + "rev": "1b5295a3f3d7cccd96eed5bfd394807a4dae87fc", "type": "github" }, "original": { @@ -124,11 +119,11 @@ ] }, "locked": { - "lastModified": 1724435763, - "narHash": "sha256-UNky3lJNGQtUEXT2OY8gMxejakSWPTfWKvpFkpFlAfM=", + "lastModified": 1725180166, + "narHash": "sha256-fzssXuGR/mCeGbzM1ExaTqDz7QDGta3WA4jJsZyRruo=", "owner": "nix-community", "repo": "home-manager", - "rev": "c2cd2a52e02f1dfa1c88f95abeb89298d46023be", + "rev": "471e3eb0a114265bcd62d11d58ba8d3421ee68eb", "type": "github" }, "original": { @@ -205,11 +200,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1724224976, - "narHash": "sha256-Z/ELQhrSd7bMzTO8r7NZgi9g5emh+aRKoCdaAv5fiO0=", + "lastModified": 1725103162, + "narHash": "sha256-Ym04C5+qovuQDYL/rKWSR+WESseQBbNAe5DsXNx5trY=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "c374d94f1536013ca8e92341b540eba4c22f9c62", + "rev": "12228ff1752d7b7624a54e9c1af4b222b3c1073b", "type": "github" }, "original": { @@ -235,11 +230,11 @@ }, "nixpkgs-unstable-small": { "locked": { - "lastModified": 1724558323, - "narHash": "sha256-uPXidysk1BXSayGzpxDW8JUgGvLWS+L1CTlBV3xcQB4=", + "lastModified": 1725274606, + "narHash": "sha256-xXINAjCR8eTmp3AxZTk/PIH9nNoFNN0OM7MUw6eB7oQ=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "ba0c72cea47a45556ccd5bc566433bd1242a0f93", + "rev": "66a352a3f27a2eb2f27e42a13c6fe245d3be2b98", "type": "github" }, "original": { @@ -265,11 +260,11 @@ "rust-analyzer-src": { "flake": false, "locked": { - "lastModified": 1724480527, - "narHash": "sha256-C+roFDGk6Bn/C58NGpyt7cneLCetdRMUfFTkm3O4zWM=", + "lastModified": 1725191098, + "narHash": "sha256-YH0kH5CSOnAuPUB1BUzUqvnKiv5SgDhfMNjrkki9Ahk=", "owner": "rust-lang", "repo": "rust-analyzer", - "rev": "74a6427861eb8d1e3b7c6090b2c2890ff4c53e0e", + "rev": "779d9eee2ea403da447278a7007c9627c8878856", "type": "github" }, "original": { diff --git a/flake.nix b/flake.nix index fa735be..52b2f66 100644 --- a/flake.nix +++ b/flake.nix @@ -27,9 +27,6 @@ }; crane = { url = "github:ipetkov/crane"; - inputs = { - nixpkgs.follows = "nixpkgs"; - }; }; fenix = { url = "github:nix-community/fenix"; @@ -55,7 +52,7 @@ pkgs = nixpkgs.legacyPackages.${system}; pkgs-stable = nixpkgs-stable.legacyPackages.${system}; pkgs-unstable-small = nixpkgs-unstable-small.legacyPackages.${system}; - crane-lib = crane.lib.${system}; + crane-lib = crane.mkLib nixpkgs.legacyPackages.${system}; rs-toolchain = with fenix.packages.${system}; combine [ complete.toolchain diff --git a/hosts/catbook-j/configuration.nix b/hosts/catbook-j/configuration.nix index d0f1c6b..5ed71d5 100644 --- a/hosts/catbook-j/configuration.nix +++ b/hosts/catbook-j/configuration.nix @@ -42,7 +42,7 @@ systemd.services."ModemManager".wantedBy = ["multi-user.target"]; environment.variables = { - VDPAU_DRIVER = lib.mkIf config.hardware.opengl.enable (lib.mkDefault "va_gl"); + VDPAU_DRIVER = lib.mkIf config.hardware.graphics.enable (lib.mkDefault "va_gl"); S10E_JRNL_FILE_LOC = "/home/jade/Docs/jrnl.md"; }; diff --git a/modules/desktop-environment/home/sway/default.nix b/modules/desktop-environment/home/sway/default.nix index 75f4bf5..781b6c4 100644 --- a/modules/desktop-environment/home/sway/default.nix +++ b/modules/desktop-environment/home/sway/default.nix @@ -13,6 +13,7 @@ # sway = { # default = ["wlr"]; # }; + config.common.default = "*"; }; services.swayidle = { diff --git a/modules/desktop/default.nix b/modules/desktop/default.nix index 63daa0d..a94b504 100644 --- a/modules/desktop/default.nix +++ b/modules/desktop/default.nix @@ -30,14 +30,6 @@ in ./x.nix ]; - i18n.inputMethod = { - enabled = "fcitx5"; - fcitx5.addons = with pkgs; [ - fcitx5-mozc - fcitx5-gtk - ]; - }; - programs.seahorse.enable = true; security.pam.services.jade.enableGnomeKeyring = true; From e920f9c2069efd9af1eb427171b5f91177253933 Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Mon, 2 Sep 2024 19:08:10 +0200 Subject: [PATCH 114/301] add frequently used programs --- common.nix | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/common.nix b/common.nix index 99e25fe..41f83fe 100644 --- a/common.nix +++ b/common.nix @@ -90,6 +90,10 @@ with builtins; { libjxl s10e-jrnl + + ungoogled-chromium + scc + speedtest-rs ]; }; From c01c5da7c46063c62cd5923f874b87467b47cd4e Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Mon, 2 Sep 2024 19:14:45 +0200 Subject: [PATCH 115/301] add Departure Mono font --- modules/desktop/fonts.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/modules/desktop/fonts.nix b/modules/desktop/fonts.nix index d7b3b12..97c7453 100644 --- a/modules/desktop/fonts.nix +++ b/modules/desktop/fonts.nix @@ -14,6 +14,7 @@ libertine inter b612 + departure-mono ]; fonts.fontDir.enable = true; } From 089740ffaf5e67011f4373b009243959ad3419b9 Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Mon, 2 Sep 2024 19:17:58 +0200 Subject: [PATCH 116/301] remove some unused software --- common.nix | 9 --------- modules/desktop/default.nix | 4 ---- modules/desktop/social.nix | 2 -- 3 files changed, 15 deletions(-) diff --git a/common.nix b/common.nix index 41f83fe..bc82484 100644 --- a/common.nix +++ b/common.nix @@ -42,8 +42,6 @@ with builtins; { environment = { systemPackages = with pkgs; [ - veracrypt - htmlq prusa-slicer @@ -62,21 +60,14 @@ with builtins; { jdk11 jdk libsecret - gh - nix-prefetch-scripts fzf - glab ripgrep - sl - lolcat appimage-run git-crypt file whois p7zip file - nmap - cmatrix tree socat smartmontools diff --git a/modules/desktop/default.nix b/modules/desktop/default.nix index a94b504..993e172 100644 --- a/modules/desktop/default.nix +++ b/modules/desktop/default.nix @@ -116,11 +116,7 @@ in jellyfin-media-player # from environment.systemPackages cleanup - xdotool - xorg.xwininfo gparted - # uhk-agent - cool-retro-term xdg-desktop-portal-gtk virt-manager ddccontrol-db diff --git a/modules/desktop/social.nix b/modules/desktop/social.nix index ea3e560..b8569bc 100644 --- a/modules/desktop/social.nix +++ b/modules/desktop/social.nix @@ -20,8 +20,6 @@ in signal-desktop mumble element-desktop - # nheko - # iamb ]; }; }; From a9525ec467be2d0aebdfea9081f2aa14a310c65b Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Mon, 2 Sep 2024 20:33:22 +0200 Subject: [PATCH 117/301] add workspace monitor to bottom bar and remove waybar --- Cargo.lock | 63 +++++++++++++++++++ Cargo.toml | 2 +- .../eww/configDir/bottomBar/bottomBar.yuck | 18 +++++- .../eww/configDir/scripts/workspaces.nu | 3 - .../desktop-environment/home/sway/default.nix | 18 +----- programs/bar-ws-monitor/Cargo.toml | 9 +++ programs/bar-ws-monitor/src/main.rs | 53 ++++++++++++++++ 7 files changed, 144 insertions(+), 22 deletions(-) delete mode 100644 modules/desktop-environment/home/panels/eww/configDir/scripts/workspaces.nu create mode 100644 programs/bar-ws-monitor/Cargo.toml create mode 100644 programs/bar-ws-monitor/src/main.rs diff --git a/Cargo.lock b/Cargo.lock index ebfd75c..5227abe 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -109,6 +109,15 @@ version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f1fdabc7756949593fe60f30ec81974b613357de856987752631dea1e3394c80" +[[package]] +name = "bar-ws-monitor" +version = "0.1.0" +dependencies = [ + "serde", + "serde_json", + "swayipc", +] + [[package]] name = "bitflags" version = "1.3.2" @@ -782,6 +791,38 @@ version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" +[[package]] +name = "serde" +version = "1.0.209" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "99fce0ffe7310761ca6bf9faf5115afbc19688edd00171d81b1bb1b116c63e09" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.209" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a5831b979fd7b5439637af1752d535ff49f4860c0f341d1baeb6faf0f4242170" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "serde_json" +version = "1.0.127" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8043c06d9f82bd7271361ed64f415fe5e12a77fdb52e573e7f06a516dea329ad" +dependencies = [ + "itoa", + "memchr", + "ryu", + "serde", +] + [[package]] name = "signal-hook" version = "0.3.17" @@ -862,6 +903,28 @@ dependencies = [ "syn", ] +[[package]] +name = "swayipc" +version = "3.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "daa5d19f881f372e225095e297072e2e3ee1c4e9e3a46cafe5f5cf70f1313f29" +dependencies = [ + "serde", + "serde_json", + "swayipc-types", +] + +[[package]] +name = "swayipc-types" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e487a656336f74341c70a73a289f68d9ba3cab579ba776352ea0c6cdf603fcda" +dependencies = [ + "serde", + "serde_json", + "thiserror", +] + [[package]] name = "syn" version = "2.0.60" diff --git a/Cargo.toml b/Cargo.toml index e35ff11..7d9f635 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,5 +1,5 @@ [workspace] resolver = "2" -members = [ +members = [ "programs/bar-ws-monitor", "programs/jrnl" ] diff --git a/modules/desktop-environment/home/panels/eww/configDir/bottomBar/bottomBar.yuck b/modules/desktop-environment/home/panels/eww/configDir/bottomBar/bottomBar.yuck index 2a2da02..68c8a9f 100644 --- a/modules/desktop-environment/home/panels/eww/configDir/bottomBar/bottomBar.yuck +++ b/modules/desktop-environment/home/panels/eww/configDir/bottomBar/bottomBar.yuck @@ -15,7 +15,7 @@ (centerbox (box :halign "start" - (label :text "left") + (workspaceWidget) ) (box :halign "center" @@ -39,3 +39,19 @@ ) ) ) + +(defwidget workspaceWidget [] + (box + :class "workspaces" + (for workspace in workspaces + (button + (label :markup "${workspace.name}") + ) + ) + ) +) + +(deflisten workspaces + :initial "[]" + "bar-ws-monitor" +) diff --git a/modules/desktop-environment/home/panels/eww/configDir/scripts/workspaces.nu b/modules/desktop-environment/home/panels/eww/configDir/scripts/workspaces.nu deleted file mode 100644 index 6e72651..0000000 --- a/modules/desktop-environment/home/panels/eww/configDir/scripts/workspaces.nu +++ /dev/null @@ -1,3 +0,0 @@ -def main [] { - mut workspaces = waymsg -rt get_workspaces | from json | select name focused urgent; -} diff --git a/modules/desktop-environment/home/sway/default.nix b/modules/desktop-environment/home/sway/default.nix index 781b6c4..2522cc6 100644 --- a/modules/desktop-environment/home/sway/default.nix +++ b/modules/desktop-environment/home/sway/default.nix @@ -26,22 +26,6 @@ ]; }; - programs.waybar = { - enable = true; - systemd = { - enable = true; - target = "sway-session.target"; - }; - settings = { - interactiveBar = { - layer = "top"; - position = "bottom"; - modules-left = ["sway/workspaces" "sway/mode"]; - modules-right = ["wlr/taskbar"]; - }; - }; - }; - wayland.windowManager.sway = { enable = true; systemd = { @@ -80,7 +64,7 @@ }; startup = [ { - command = "eww open topBar"; + command = "eww open topBar; eww open bottomBar"; } { command = "pkill nm-applet; sleep 1 && nm-applet"; diff --git a/programs/bar-ws-monitor/Cargo.toml b/programs/bar-ws-monitor/Cargo.toml new file mode 100644 index 0000000..5c1a1f6 --- /dev/null +++ b/programs/bar-ws-monitor/Cargo.toml @@ -0,0 +1,9 @@ +[package] +name = "bar-ws-monitor" +version = "0.1.0" +edition = "2021" + +[dependencies] +serde = { version = "1.0.209", features = [ "derive" ] } +serde_json = "1.0.127" +swayipc = "3.0.2" diff --git a/programs/bar-ws-monitor/src/main.rs b/programs/bar-ws-monitor/src/main.rs new file mode 100644 index 0000000..b911272 --- /dev/null +++ b/programs/bar-ws-monitor/src/main.rs @@ -0,0 +1,53 @@ +use core::panic; + +use serde::Serialize; +use swayipc::{Connection, Event, EventType, Fallible, Workspace, WorkspaceChange}; + +fn main() -> Fallible<()> { + let mut con = Connection::new()?; + let mut workspaces: Vec = con + .get_workspaces()? + .into_iter() + .map(|ws| ws.into()) + .collect(); + println!("{}", serde_json::ser::to_string(&workspaces).unwrap()); + + for ev in con.subscribe([EventType::Workspace])? { + // the lazy/ugly solution! + // we create a new connection and request workspaces again and again and again + // TODO: properly handle events one by one + let mut con = Connection::new()?; + workspaces = con + .get_workspaces()? + .into_iter() + .map(|ws| ws.into()) + .collect(); + println!("{}", serde_json::ser::to_string(&workspaces).unwrap()); + } + + Ok(()) +} + +#[derive(Debug, Serialize)] +struct WsData { + name: String, + focused: bool, + urgent: bool, +} + +impl From for WsData { + fn from( + Workspace { + name, + focused, + urgent, + .. + }: Workspace, + ) -> Self { + WsData { + name, + focused, + urgent, + } + } +} From 37a4235e5cd6b4e118ff424e3fc0c1c40aa56176 Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Mon, 2 Sep 2024 20:40:47 +0200 Subject: [PATCH 118/301] add gui workspace switching --- .../home/panels/eww/configDir/bottomBar/bottomBar.yuck | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/modules/desktop-environment/home/panels/eww/configDir/bottomBar/bottomBar.yuck b/modules/desktop-environment/home/panels/eww/configDir/bottomBar/bottomBar.yuck index 68c8a9f..45d7e9f 100644 --- a/modules/desktop-environment/home/panels/eww/configDir/bottomBar/bottomBar.yuck +++ b/modules/desktop-environment/home/panels/eww/configDir/bottomBar/bottomBar.yuck @@ -45,7 +45,8 @@ :class "workspaces" (for workspace in workspaces (button - (label :markup "${workspace.name}") + :onclick "swaymsg workspace ${workspace.name}" + (label :markup "${workspace.name}") ) ) ) From 867514362a982a93029e730be49e53a9517b6bfc Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Mon, 2 Sep 2024 22:07:47 +0200 Subject: [PATCH 119/301] improve workspace selector styling --- .../panels/eww/configDir/bottomBar/bottomBar.yuck | 3 ++- .../home/panels/eww/configDir/eww.css | 13 +++++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/modules/desktop-environment/home/panels/eww/configDir/bottomBar/bottomBar.yuck b/modules/desktop-environment/home/panels/eww/configDir/bottomBar/bottomBar.yuck index 45d7e9f..6c31965 100644 --- a/modules/desktop-environment/home/panels/eww/configDir/bottomBar/bottomBar.yuck +++ b/modules/desktop-environment/home/panels/eww/configDir/bottomBar/bottomBar.yuck @@ -45,8 +45,9 @@ :class "workspaces" (for workspace in workspaces (button + :class "${workspace.urgent ? "urgent" : ""} ${workspace.focused ? "focused" : 0}" :onclick "swaymsg workspace ${workspace.name}" - (label :markup "${workspace.name}") + (label :text "${workspace.name}") ) ) ) diff --git a/modules/desktop-environment/home/panels/eww/configDir/eww.css b/modules/desktop-environment/home/panels/eww/configDir/eww.css index 851f731..229ec7e 100644 --- a/modules/desktop-environment/home/panels/eww/configDir/eww.css +++ b/modules/desktop-environment/home/panels/eww/configDir/eww.css @@ -4,4 +4,17 @@ label { font: 14pt "FiraCode Nerd Font"; +} + +.workspaces button { + border: 0px; + background-color: #282828; +} + +.workspaces button.urgent { + background-color: #cc241d; +} + +.workspaces button.focused { + background-color: #504935; } \ No newline at end of file From 718fe00b469bad8e583e0dad2b4bae6fe59d9d08 Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Sat, 7 Sep 2024 18:31:04 +0200 Subject: [PATCH 120/301] start working on bar pinger and traewelling client --- .gitignore | 1 + Cargo.lock | 927 +++++++++++++++++- Cargo.toml | 4 +- flake.nix | 2 + .../home/panels/eww/configDir/eww.css | 4 - programs/bar-pinger/Cargo.toml | 6 + programs/bar-pinger/src/main.rs | 5 + programs/traveldings/Cargo.toml | 13 + programs/traveldings/src/commands.rs | 1 + .../src/commands/current_journey.rs | 9 + programs/traveldings/src/main.rs | 35 + programs/traveldings/src/traewelling.rs | 56 ++ programs/traveldings/src/traewelling/model.rs | 47 + 13 files changed, 1062 insertions(+), 48 deletions(-) create mode 100644 programs/bar-pinger/Cargo.toml create mode 100644 programs/bar-pinger/src/main.rs create mode 100644 programs/traveldings/Cargo.toml create mode 100644 programs/traveldings/src/commands.rs create mode 100644 programs/traveldings/src/commands/current_journey.rs create mode 100644 programs/traveldings/src/main.rs create mode 100644 programs/traveldings/src/traewelling.rs create mode 100644 programs/traveldings/src/traewelling/model.rs diff --git a/.gitignore b/.gitignore index 0c61835..5f7e2dd 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,4 @@ result .direnv/ programs/*/target target +*openapi.json diff --git a/Cargo.lock b/Cargo.lock index 5227abe..7e5d422 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2,6 +2,21 @@ # It is not intended for manual editing. version = 3 +[[package]] +name = "addr2line" +version = "0.22.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e4503c46a5c0c7844e948c9a4d6acd9f50cccb4de1c48eb9e291ea17470c678" +dependencies = [ + "gimli", +] + +[[package]] +name = "adler" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" + [[package]] name = "ahash" version = "0.8.11" @@ -92,13 +107,25 @@ dependencies = [ "windows-sys 0.52.0", ] +[[package]] +name = "anyhow" +version = "1.0.86" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b3d1d046238990b9cf5bcde22a3fb3584ee5cf65fb2765f454ed428c7a0063da" + +[[package]] +name = "atomic-waker" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" + [[package]] name = "atty" version = "0.2.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8" dependencies = [ - "hermit-abi", + "hermit-abi 0.1.19", "libc", "winapi 0.3.9", ] @@ -109,6 +136,25 @@ version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f1fdabc7756949593fe60f30ec81974b613357de856987752631dea1e3394c80" +[[package]] +name = "backtrace" +version = "0.3.73" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5cc23269a4f8976d0a4d2e7109211a419fe30e8d88d677cd60b6bc79c5732e0a" +dependencies = [ + "addr2line", + "cc", + "cfg-if", + "libc", + "miniz_oxide", + "object", + "rustc-demangle", +] + +[[package]] +name = "bar-pinger" +version = "0.1.0" + [[package]] name = "bar-ws-monitor" version = "0.1.0" @@ -118,6 +164,12 @@ dependencies = [ "swayipc", ] +[[package]] +name = "base64" +version = "0.22.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" + [[package]] name = "bitflags" version = "1.3.2" @@ -142,6 +194,12 @@ version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" +[[package]] +name = "bytes" +version = "1.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8318a53db07bb3f8dca91a600466bdb3f2eaadeedfdbcf02e1accbad9271ba50" + [[package]] name = "cassowary" version = "0.3.0" @@ -159,9 +217,12 @@ dependencies = [ [[package]] name = "cc" -version = "1.0.95" +version = "1.1.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d32a725bc159af97c3e629873bb9f88fb8cf8a4867175f76dc987815ea07c83b" +checksum = "e9d013ecb737093c0e86b151a7b837993cf9ec6c502946cfb44bedc392421e0b" +dependencies = [ + "shlex", +] [[package]] name = "cfg-if" @@ -179,8 +240,9 @@ dependencies = [ "iana-time-zone", "js-sys", "num-traits", + "serde", "wasm-bindgen", - "windows-targets 0.52.5", + "windows-targets 0.52.6", ] [[package]] @@ -257,7 +319,7 @@ dependencies = [ "bitflags 1.3.2", "crossterm_winapi", "libc", - "mio", + "mio 0.8.11", "parking_lot", "signal-hook", "signal-hook-mio", @@ -273,7 +335,7 @@ dependencies = [ "bitflags 2.5.0", "crossterm_winapi", "libc", - "mio", + "mio 0.8.11", "parking_lot", "signal-hook", "signal-hook-mio", @@ -328,6 +390,15 @@ version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a47c1c47d2f5964e29c61246e81db715514cd532db6b5116a25ea3c03d6780a2" +[[package]] +name = "encoding_rs" +version = "0.8.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b45de904aa0b010bce2ab45264d0631681847fa7b6f2eaa7dab7619943bc4f59" +dependencies = [ + "cfg-if", +] + [[package]] name = "equivalent" version = "1.0.1" @@ -340,6 +411,60 @@ version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + +[[package]] +name = "form_urlencoded" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" +dependencies = [ + "percent-encoding", +] + +[[package]] +name = "futures-channel" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78" +dependencies = [ + "futures-core", +] + +[[package]] +name = "futures-core" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d" + +[[package]] +name = "futures-sink" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fb8e00e87438d937621c1c6269e53f536c14d3fbd6a042bb24879e57d474fb5" + +[[package]] +name = "futures-task" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004" + +[[package]] +name = "futures-util" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48" +dependencies = [ + "futures-core", + "futures-task", + "pin-project-lite", + "pin-utils", +] + [[package]] name = "fuzzy-matcher" version = "0.3.7" @@ -369,6 +494,31 @@ dependencies = [ "wasi", ] +[[package]] +name = "gimli" +version = "0.29.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "40ecd4077b5ae9fd2e9e169b102c6c330d0605168eb0e8bf79952b256dbefffd" + +[[package]] +name = "h2" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "524e8ac6999421f49a846c2d4411f337e53497d8ec55d67753beffa43c5d9205" +dependencies = [ + "atomic-waker", + "bytes", + "fnv", + "futures-core", + "futures-sink", + "http", + "indexmap", + "slab", + "tokio", + "tokio-util", + "tracing", +] + [[package]] name = "hashbrown" version = "0.14.3" @@ -400,6 +550,110 @@ dependencies = [ "libc", ] +[[package]] +name = "hermit-abi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" + +[[package]] +name = "http" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "21b9ddb458710bc376481b842f5da65cdf31522de232c1ca8146abce2a358258" +dependencies = [ + "bytes", + "fnv", + "itoa", +] + +[[package]] +name = "http-body" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" +dependencies = [ + "bytes", + "http", +] + +[[package]] +name = "http-body-util" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "793429d76616a256bcb62c2a2ec2bed781c8307e797e2598c50010f2bee2544f" +dependencies = [ + "bytes", + "futures-util", + "http", + "http-body", + "pin-project-lite", +] + +[[package]] +name = "httparse" +version = "1.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fcc0b4a115bf80b728eb8ea024ad5bd707b615bfed49e0665b6e0f86fd082d9" + +[[package]] +name = "hyper" +version = "1.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50dfd22e0e76d0f662d429a5f80fcaf3855009297eab6a0a9f8543834744ba05" +dependencies = [ + "bytes", + "futures-channel", + "futures-util", + "h2", + "http", + "http-body", + "httparse", + "itoa", + "pin-project-lite", + "smallvec", + "tokio", + "want", +] + +[[package]] +name = "hyper-rustls" +version = "0.27.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08afdbb5c31130e3034af566421053ab03787c640246a446327f550d11bcb333" +dependencies = [ + "futures-util", + "http", + "hyper", + "hyper-util", + "rustls", + "rustls-pki-types", + "tokio", + "tokio-rustls", + "tower-service", + "webpki-roots", +] + +[[package]] +name = "hyper-util" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cde7055719c54e36e95e8719f95883f22072a48ede39db7fc17a4e1d5281e9b9" +dependencies = [ + "bytes", + "futures-channel", + "futures-util", + "http", + "http-body", + "hyper", + "pin-project-lite", + "socket2", + "tokio", + "tower", + "tower-service", + "tracing", +] + [[package]] name = "iana-time-zone" version = "0.1.60" @@ -423,6 +677,16 @@ dependencies = [ "cc", ] +[[package]] +name = "idna" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6" +dependencies = [ + "unicode-bidi", + "unicode-normalization", +] + [[package]] name = "indexmap" version = "2.2.6" @@ -456,6 +720,12 @@ dependencies = [ "unicode-width", ] +[[package]] +name = "ipnet" +version = "2.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f518f335dce6725a761382244631d86cf0ccb2863413590b31338feb467f9c3" + [[package]] name = "itertools" version = "0.12.1" @@ -572,6 +842,21 @@ version = "2.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6c8640c5d730cb13ebd907d8d04b52f55ac9a2eec55b440c8892f40d56c76c1d" +[[package]] +name = "mime" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" + +[[package]] +name = "miniz_oxide" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8a240ddb74feaf34a79a7add65a741f3167852fba007066dcac1ca548d89c08" +dependencies = [ + "adler", +] + [[package]] name = "mio" version = "0.8.11" @@ -584,6 +869,18 @@ dependencies = [ "windows-sys 0.48.0", ] +[[package]] +name = "mio" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "80e04d1dcff3aae0704555fe5fee3bcfaf3d1fdf8a7e521d5b9d2b42acb52cec" +dependencies = [ + "hermit-abi 0.3.9", + "libc", + "wasi", + "windows-sys 0.52.0", +] + [[package]] name = "newline-converter" version = "0.3.0" @@ -608,6 +905,15 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b8f8bdf33df195859076e54ab11ee78a1b208382d3a26ec40d142ffc1ecc49ef" +[[package]] +name = "object" +version = "0.36.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "084f1a5821ac4c651660a94a7153d27ac9d8a53736203f58b31945ded098070a" +dependencies = [ + "memchr", +] + [[package]] name = "once_cell" version = "1.19.0" @@ -655,6 +961,12 @@ version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "de3145af08024dea9fa9914f381a17b8fc6034dfb00f3a84013f7ff43f29ed4c" +[[package]] +name = "percent-encoding" +version = "2.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" + [[package]] name = "petgraph" version = "0.6.4" @@ -665,12 +977,53 @@ dependencies = [ "indexmap", ] +[[package]] +name = "pin-project" +version = "1.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6bf43b791c5b9e34c3d182969b4abb522f9343702850a2e57f460d00d09b4b3" +dependencies = [ + "pin-project-internal", +] + +[[package]] +name = "pin-project-internal" +version = "1.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2f38a4412a78282e09a2cf38d195ea5420d15ba0602cb375210efbc877243965" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "pin-project-lite" +version = "0.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bda66fc9667c18cb2758a2ac84d1167245054bcf85d5d1aaa6923f45801bdd02" + +[[package]] +name = "pin-utils" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" + [[package]] name = "pipeline" version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d15b6607fa632996eb8a17c9041cb6071cb75ac057abd45dece578723ea8c7c0" +[[package]] +name = "ppv-lite86" +version = "0.2.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77957b295656769bb8ad2b6a6b09d897d94f05c41b069aede1fcdaa675eaea04" +dependencies = [ + "zerocopy", +] + [[package]] name = "proc-macro2" version = "1.0.81" @@ -680,6 +1033,54 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "quinn" +version = "0.11.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c7c5fdde3cdae7203427dc4f0a68fe0ed09833edc525a03456b153b79828684" +dependencies = [ + "bytes", + "pin-project-lite", + "quinn-proto", + "quinn-udp", + "rustc-hash", + "rustls", + "socket2", + "thiserror", + "tokio", + "tracing", +] + +[[package]] +name = "quinn-proto" +version = "0.11.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fadfaed2cd7f389d0161bb73eeb07b7b78f8691047a6f3e73caaeae55310a4a6" +dependencies = [ + "bytes", + "rand", + "ring", + "rustc-hash", + "rustls", + "slab", + "thiserror", + "tinyvec", + "tracing", +] + +[[package]] +name = "quinn-udp" +version = "0.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8bffec3605b73c6f1754535084a85229fa8a30f86014e6c81aeec4abb68b0285" +dependencies = [ + "libc", + "once_cell", + "socket2", + "tracing", + "windows-sys 0.52.0", +] + [[package]] name = "quote" version = "1.0.36" @@ -689,6 +1090,36 @@ dependencies = [ "proc-macro2", ] +[[package]] +name = "rand" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" +dependencies = [ + "libc", + "rand_chacha", + "rand_core", +] + +[[package]] +name = "rand_chacha" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +dependencies = [ + "ppv-lite86", + "rand_core", +] + +[[package]] +name = "rand_core" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" +dependencies = [ + "getrandom", +] + [[package]] name = "ratatui" version = "0.26.2" @@ -773,6 +1204,118 @@ version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "adad44e29e4c806119491a7f06f03de4d1af22c3a680dd47f1e6e179439d1f56" +[[package]] +name = "reqwest" +version = "0.12.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8f4955649ef5c38cc7f9e8aa41761d48fb9677197daea9984dc54f56aad5e63" +dependencies = [ + "base64", + "bytes", + "encoding_rs", + "futures-core", + "futures-util", + "h2", + "http", + "http-body", + "http-body-util", + "hyper", + "hyper-rustls", + "hyper-util", + "ipnet", + "js-sys", + "log", + "mime", + "once_cell", + "percent-encoding", + "pin-project-lite", + "quinn", + "rustls", + "rustls-pemfile", + "rustls-pki-types", + "serde", + "serde_json", + "serde_urlencoded", + "sync_wrapper", + "tokio", + "tokio-rustls", + "tower-service", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", + "webpki-roots", + "windows-registry", +] + +[[package]] +name = "ring" +version = "0.17.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c17fa4cb658e3583423e915b9f3acc01cceaee1860e33d59ebae66adc3a2dc0d" +dependencies = [ + "cc", + "cfg-if", + "getrandom", + "libc", + "spin", + "untrusted", + "windows-sys 0.52.0", +] + +[[package]] +name = "rustc-demangle" +version = "0.1.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" + +[[package]] +name = "rustc-hash" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "583034fd73374156e66797ed8e5b0d5690409c9226b22d87cb7f19821c05d152" + +[[package]] +name = "rustls" +version = "0.23.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c58f8c84392efc0a126acce10fa59ff7b3d2ac06ab451a33f2741989b806b044" +dependencies = [ + "once_cell", + "ring", + "rustls-pki-types", + "rustls-webpki", + "subtle", + "zeroize", +] + +[[package]] +name = "rustls-pemfile" +version = "2.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "196fe16b00e106300d3e45ecfcb764fa292a535d7326a29a5875c579c7417425" +dependencies = [ + "base64", + "rustls-pki-types", +] + +[[package]] +name = "rustls-pki-types" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc0a2ce646f8655401bb81e7927b812614bd5d91dbc968696be50603510fcaf0" + +[[package]] +name = "rustls-webpki" +version = "0.102.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "84678086bd54edf2b415183ed7a94d0efb049f1b646a33e22a36f3794be6ae56" +dependencies = [ + "ring", + "rustls-pki-types", + "untrusted", +] + [[package]] name = "rustversion" version = "1.0.15" @@ -813,9 +1356,9 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.127" +version = "1.0.128" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8043c06d9f82bd7271361ed64f415fe5e12a77fdb52e573e7f06a516dea329ad" +checksum = "6ff5456707a1de34e7e37f2a6fd3d3f808c318259cbd01ab6377795054b483d8" dependencies = [ "itoa", "memchr", @@ -823,6 +1366,24 @@ dependencies = [ "serde", ] +[[package]] +name = "serde_urlencoded" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" +dependencies = [ + "form_urlencoded", + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "shlex" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" + [[package]] name = "signal-hook" version = "0.3.17" @@ -840,7 +1401,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "29ad2e15f37ec9a6cc544097b78a1ec90001e9f71b81338ca39f430adaca99af" dependencies = [ "libc", - "mio", + "mio 0.8.11", "signal-hook", ] @@ -853,12 +1414,37 @@ dependencies = [ "libc", ] +[[package]] +name = "slab" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" +dependencies = [ + "autocfg", +] + [[package]] name = "smallvec" version = "1.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" +[[package]] +name = "socket2" +version = "0.5.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce305eb0b4296696835b71df73eb912e0f1ffd2556a501fcede6e0c50349191c" +dependencies = [ + "libc", + "windows-sys 0.52.0", +] + +[[package]] +name = "spin" +version = "0.9.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" + [[package]] name = "stability" version = "0.2.0" @@ -903,6 +1489,12 @@ dependencies = [ "syn", ] +[[package]] +name = "subtle" +version = "2.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" + [[package]] name = "swayipc" version = "3.0.2" @@ -927,15 +1519,24 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.60" +version = "2.0.65" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "909518bc7b1c9b779f1bbf07f2929d35af9f0f37e47c6e9ef7f9dddc1e1821f3" +checksum = "d2863d96a84c6439701d7a38f9de935ec562c8832cc55d1dde0f513b52fad106" dependencies = [ "proc-macro2", "quote", "unicode-ident", ] +[[package]] +name = "sync_wrapper" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7065abeca94b6a8a577f9bd45aa0867a2238b74e8eb67cf10d492bc39351394" +dependencies = [ + "futures-core", +] + [[package]] name = "temp-file" version = "0.1.8" @@ -969,18 +1570,18 @@ dependencies = [ [[package]] name = "thiserror" -version = "1.0.58" +version = "1.0.63" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03468839009160513471e86a034bb2c5c0e4baae3b43f79ffc55c4a5427b3297" +checksum = "c0342370b38b6a11b6cc11d6a805569958d54cfa061a29969c3b5ce2ea405724" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.58" +version = "1.0.63" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c61f3ba182994efc43764a46c018c347bc492c79f024e705f46567b418f6d4f7" +checksum = "a4558b58466b9ad7ca0f102865eccc95938dca1a74a856f2b57b6629050da261" dependencies = [ "proc-macro2", "quote", @@ -997,12 +1598,160 @@ dependencies = [ "once_cell", ] +[[package]] +name = "tinyvec" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "445e881f4f6d382d5f27c034e25eb92edd7c784ceab92a0937db7f2e9471b938" +dependencies = [ + "tinyvec_macros", +] + +[[package]] +name = "tinyvec_macros" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" + +[[package]] +name = "tokio" +version = "1.40.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2b070231665d27ad9ec9b8df639893f46727666c6767db40317fbe920a5d998" +dependencies = [ + "backtrace", + "bytes", + "libc", + "mio 1.0.2", + "parking_lot", + "pin-project-lite", + "signal-hook-registry", + "socket2", + "tokio-macros", + "windows-sys 0.52.0", +] + +[[package]] +name = "tokio-macros" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "693d596312e88961bc67d7f1f97af8a70227d9f90c31bba5806eec004978d752" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "tokio-rustls" +version = "0.26.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c7bc40d0e5a97695bb96e27995cd3a08538541b0a846f65bba7a359f36700d4" +dependencies = [ + "rustls", + "rustls-pki-types", + "tokio", +] + +[[package]] +name = "tokio-util" +version = "0.7.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "61e7c3654c13bcd040d4a03abee2c75b1d14a37b423cf5a813ceae1cc903ec6a" +dependencies = [ + "bytes", + "futures-core", + "futures-sink", + "pin-project-lite", + "tokio", +] + +[[package]] +name = "tower" +version = "0.4.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c" +dependencies = [ + "futures-core", + "futures-util", + "pin-project", + "pin-project-lite", + "tokio", + "tower-layer", + "tower-service", +] + +[[package]] +name = "tower-layer" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e" + +[[package]] +name = "tower-service" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" + +[[package]] +name = "tracing" +version = "0.1.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" +dependencies = [ + "pin-project-lite", + "tracing-core", +] + +[[package]] +name = "tracing-core" +version = "0.1.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" +dependencies = [ + "once_cell", +] + +[[package]] +name = "traveldings" +version = "0.1.0" +dependencies = [ + "anyhow", + "chrono", + "clap", + "reqwest", + "serde", + "serde_json", + "tokio", +] + +[[package]] +name = "try-lock" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" + +[[package]] +name = "unicode-bidi" +version = "0.3.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08f95100a766bf4f8f28f90d77e0a5461bbdb219042e7679bebe79004fed8d75" + [[package]] name = "unicode-ident" version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" +[[package]] +name = "unicode-normalization" +version = "0.1.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a56d1686db2308d901306f92a263857ef59ea39678a5458e7cb17f01415101f5" +dependencies = [ + "tinyvec", +] + [[package]] name = "unicode-segmentation" version = "1.11.0" @@ -1015,6 +1764,23 @@ version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e51733f11c9c4f72aa0c160008246859e340b00807569a0da0e7a1079b27ba85" +[[package]] +name = "untrusted" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" + +[[package]] +name = "url" +version = "2.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22784dbdf76fdde8af1aeda5622b546b422b6fc585325248a2bf9f5e41e94d6c" +dependencies = [ + "form_urlencoded", + "idna", + "percent-encoding", +] + [[package]] name = "utf8parse" version = "0.2.1" @@ -1027,6 +1793,15 @@ version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" +[[package]] +name = "want" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" +dependencies = [ + "try-lock", +] + [[package]] name = "wasi" version = "0.11.0+wasi-snapshot-preview1" @@ -1058,6 +1833,18 @@ dependencies = [ "wasm-bindgen-shared", ] +[[package]] +name = "wasm-bindgen-futures" +version = "0.4.42" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76bc14366121efc8dbb487ab05bcc9d346b3b5ec0eaa76e46594cabbe51762c0" +dependencies = [ + "cfg-if", + "js-sys", + "wasm-bindgen", + "web-sys", +] + [[package]] name = "wasm-bindgen-macro" version = "0.2.92" @@ -1087,6 +1874,25 @@ version = "0.2.92" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "af190c94f2773fdb3729c55b007a722abb5384da03bc0986df4c289bf5567e96" +[[package]] +name = "web-sys" +version = "0.3.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77afa9a11836342370f4817622a2f0f418b134426d91a82dfb48f532d2ec13ef" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "webpki-roots" +version = "0.26.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b3de34ae270483955a94f4b21bdaaeb83d508bb84a01435f393818edb0012009" +dependencies = [ + "rustls-pki-types", +] + [[package]] name = "winapi" version = "0.2.8" @@ -1127,7 +1933,37 @@ version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" dependencies = [ - "windows-targets 0.52.5", + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-registry" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e400001bb720a623c1c69032f8e3e4cf09984deec740f007dd2b03ec864804b0" +dependencies = [ + "windows-result", + "windows-strings", + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-result" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d1043d8214f791817bab27572aaa8af63732e11bf84aa21a45a78d6c317ae0e" +dependencies = [ + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-strings" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4cd9b125c486025df0eabcb585e62173c6c9eddcec5d117d3b6e8c30e2ee4d10" +dependencies = [ + "windows-result", + "windows-targets 0.52.6", ] [[package]] @@ -1145,7 +1981,7 @@ version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" dependencies = [ - "windows-targets 0.52.5", + "windows-targets 0.52.6", ] [[package]] @@ -1165,18 +2001,18 @@ dependencies = [ [[package]] name = "windows-targets" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f0713a46559409d202e70e28227288446bf7841d3211583a4b53e3f6d96e7eb" +checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" dependencies = [ - "windows_aarch64_gnullvm 0.52.5", - "windows_aarch64_msvc 0.52.5", - "windows_i686_gnu 0.52.5", + "windows_aarch64_gnullvm 0.52.6", + "windows_aarch64_msvc 0.52.6", + "windows_i686_gnu 0.52.6", "windows_i686_gnullvm", - "windows_i686_msvc 0.52.5", - "windows_x86_64_gnu 0.52.5", - "windows_x86_64_gnullvm 0.52.5", - "windows_x86_64_msvc 0.52.5", + "windows_i686_msvc 0.52.6", + "windows_x86_64_gnu 0.52.6", + "windows_x86_64_gnullvm 0.52.6", + "windows_x86_64_msvc 0.52.6", ] [[package]] @@ -1187,9 +2023,9 @@ checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" [[package]] name = "windows_aarch64_gnullvm" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7088eed71e8b8dda258ecc8bac5fb1153c5cffaf2578fc8ff5d61e23578d3263" +checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" [[package]] name = "windows_aarch64_msvc" @@ -1199,9 +2035,9 @@ checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" [[package]] name = "windows_aarch64_msvc" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9985fd1504e250c615ca5f281c3f7a6da76213ebd5ccc9561496568a2752afb6" +checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" [[package]] name = "windows_i686_gnu" @@ -1211,15 +2047,15 @@ checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" [[package]] name = "windows_i686_gnu" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88ba073cf16d5372720ec942a8ccbf61626074c6d4dd2e745299726ce8b89670" +checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" [[package]] name = "windows_i686_gnullvm" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87f4261229030a858f36b459e748ae97545d6f1ec60e5e0d6a3d32e0dc232ee9" +checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" [[package]] name = "windows_i686_msvc" @@ -1229,9 +2065,9 @@ checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" [[package]] name = "windows_i686_msvc" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db3c2bf3d13d5b658be73463284eaf12830ac9a26a90c717b7f771dfe97487bf" +checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" [[package]] name = "windows_x86_64_gnu" @@ -1241,9 +2077,9 @@ checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" [[package]] name = "windows_x86_64_gnu" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e4246f76bdeff09eb48875a0fd3e2af6aada79d409d33011886d3e1581517d9" +checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" [[package]] name = "windows_x86_64_gnullvm" @@ -1253,9 +2089,9 @@ checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" [[package]] name = "windows_x86_64_gnullvm" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "852298e482cd67c356ddd9570386e2862b5673c85bd5f88df9ab6802b334c596" +checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" [[package]] name = "windows_x86_64_msvc" @@ -1265,9 +2101,9 @@ checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" [[package]] name = "windows_x86_64_msvc" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bec47e5bfd1bff0eeaf6d8b485cc1074891a197ab4225d504cb7a1ab88b02bf0" +checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" [[package]] name = "zerocopy" @@ -1275,6 +2111,7 @@ version = "0.7.32" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "74d4d3961e53fa4c9a25a8637fc2bfaf2595b3d3ae34875568a5cf64787716be" dependencies = [ + "byteorder", "zerocopy-derive", ] @@ -1288,3 +2125,9 @@ dependencies = [ "quote", "syn", ] + +[[package]] +name = "zeroize" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" diff --git a/Cargo.toml b/Cargo.toml index 7d9f635..60afbd9 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,5 +1,5 @@ [workspace] resolver = "2" -members = [ "programs/bar-ws-monitor", +members = [ "programs/bar-pinger", "programs/bar-ws-monitor", "programs/jrnl" -] +, "programs/traveldings"] diff --git a/flake.nix b/flake.nix index 52b2f66..516f018 100644 --- a/flake.nix +++ b/flake.nix @@ -87,6 +87,8 @@ ])) rs-toolchain pkgs.haskell-language-server + pkgs.pkg-config + pkgs.openssl ]; }; nixosConfigurations = { diff --git a/modules/desktop-environment/home/panels/eww/configDir/eww.css b/modules/desktop-environment/home/panels/eww/configDir/eww.css index 229ec7e..848f77a 100644 --- a/modules/desktop-environment/home/panels/eww/configDir/eww.css +++ b/modules/desktop-environment/home/panels/eww/configDir/eww.css @@ -1,7 +1,3 @@ -.topBar { - margin-bottom: 2px; -} - label { font: 14pt "FiraCode Nerd Font"; } diff --git a/programs/bar-pinger/Cargo.toml b/programs/bar-pinger/Cargo.toml new file mode 100644 index 0000000..86538f0 --- /dev/null +++ b/programs/bar-pinger/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "bar-pinger" +version = "0.1.0" +edition = "2021" + +[dependencies] diff --git a/programs/bar-pinger/src/main.rs b/programs/bar-pinger/src/main.rs new file mode 100644 index 0000000..ddfc410 --- /dev/null +++ b/programs/bar-pinger/src/main.rs @@ -0,0 +1,5 @@ +// const ADDRS: [&str] = ["katzen.cafe", "fucktorio.s10e.de", "9.9.9.9"]; + +fn main() { + // let pingers = ADDRS.iter.map(|addr| Command::new("ping").args([addr])); +} diff --git a/programs/traveldings/Cargo.toml b/programs/traveldings/Cargo.toml new file mode 100644 index 0000000..3b8ad29 --- /dev/null +++ b/programs/traveldings/Cargo.toml @@ -0,0 +1,13 @@ +[package] +name = "traveldings" +version = "0.1.0" +edition = "2021" + +[dependencies] +serde = { version = "1.0.209", features = ["derive"] } +serde_json = "1.0.128" +reqwest = {version = "0.12.7", default-features = false, features = ["rustls-tls", "charset", "http2"]} +tokio = { version = "1", features = ["full"] } +anyhow = "1" +chrono = { version = "0.4", features = ["serde"]} +clap = { version = "4.5", features = ["derive"]} diff --git a/programs/traveldings/src/commands.rs b/programs/traveldings/src/commands.rs new file mode 100644 index 0000000..48676be --- /dev/null +++ b/programs/traveldings/src/commands.rs @@ -0,0 +1 @@ +pub mod current_journey; diff --git a/programs/traveldings/src/commands/current_journey.rs b/programs/traveldings/src/commands/current_journey.rs new file mode 100644 index 0000000..ee57973 --- /dev/null +++ b/programs/traveldings/src/commands/current_journey.rs @@ -0,0 +1,9 @@ +use crate::traewelling::TraewellingClient; + +pub async fn get_current_journey() -> anyhow::Result<()> { + let client = TraewellingClient::new()?; + + println!("active: {:#?}", client.get_active_checkin().await?); + + Ok(()) +} diff --git a/programs/traveldings/src/main.rs b/programs/traveldings/src/main.rs new file mode 100644 index 0000000..2c9b31c --- /dev/null +++ b/programs/traveldings/src/main.rs @@ -0,0 +1,35 @@ +use std::{default, fs}; + +use clap::{Parser, Subcommand}; +use commands::current_journey::get_current_journey; +use reqwest::{ + header::{self, HeaderMap}, + ClientBuilder, +}; +use traewelling::model::{Container, Status}; + +mod commands; +mod traewelling; + +#[derive(Parser)] +struct Cli { + #[command(subcommand)] + subcommand: Subcommands, +} + +#[derive(Subcommand, Clone)] +enum Subcommands { + /// Watch for a current journey and give out json info about it + Current, +} + +#[tokio::main] +async fn main() -> anyhow::Result<()> { + let args = Cli::parse(); + + match args.subcommand { + Subcommands::Current => get_current_journey().await?, + }; + + Ok(()) +} diff --git a/programs/traveldings/src/traewelling.rs b/programs/traveldings/src/traewelling.rs new file mode 100644 index 0000000..3f55f5a --- /dev/null +++ b/programs/traveldings/src/traewelling.rs @@ -0,0 +1,56 @@ +use std::{fmt, fs}; + +use model::{Container, Status}; +use reqwest::{ + header::{self, HeaderMap}, + Client, ClientBuilder, +}; + +const KEY_PATH: &str = "/home/jade/Docs/traveldings-key"; +const USER_AGENT: &str = "s10e/traveldings"; +const TRAEWELLING_API_URL: &str = "https://traewelling.de/api/v1"; + +pub struct TraewellingClient { + client: Client, +} + +impl TraewellingClient { + pub fn new() -> anyhow::Result { + let mut headers = HeaderMap::new(); + let token = fs::read_to_string(KEY_PATH)?; + let key = header::HeaderValue::from_str(&format!("Bearer {token}"))?; + println!("meow"); + headers.insert("Authorization", key); + headers.insert( + header::ACCEPT, + header::HeaderValue::from_static("application/json"), + ); + Ok(Self { + client: ClientBuilder::new() + .user_agent("s10e/traveldings") + .default_headers(headers) + .build()?, + }) + } + + pub async fn get_active_checkin(&self) -> anyhow::Result { + let txt = self + .client + .get(Self::fmt_url("user/statuses/active")) + .send() + .await? + .text() + .await?; + + println!("{txt}"); + + let res: Container = serde_json::de::from_str(&txt)?; + Ok(res.data) + } + + fn fmt_url(path: impl fmt::Display) -> String { + format!("{TRAEWELLING_API_URL}/{path}") + } +} + +pub mod model; diff --git a/programs/traveldings/src/traewelling/model.rs b/programs/traveldings/src/traewelling/model.rs new file mode 100644 index 0000000..b40554a --- /dev/null +++ b/programs/traveldings/src/traewelling/model.rs @@ -0,0 +1,47 @@ +use chrono::{DateTime, FixedOffset}; +use serde::Deserialize; + +#[derive(Deserialize, Debug)] +pub struct Container { + pub data: D, +} + +#[derive(Deserialize, Debug)] +#[serde(rename_all = "camelCase")] +pub struct Status { + train: TransportResource, +} + +#[derive(Deserialize, Debug)] +#[serde(rename_all = "camelCase")] +pub struct TransportResource { + category: String, + line_name: String, + distance: u32, + duration: u32, + operator: OperatorResource, + origin: StopOverResource, + destination: StopOverResource, +} + +#[derive(Deserialize, Debug)] +#[serde(rename_all = "camelCase")] +pub struct StopOverResource { + name: String, + ril_identifier: Option, + arrival: Option>, + arrival_planned: Option>, + arrival_real: Option>, + departure: Option>, + departure_planned: Option>, + departure_real: Option>, + platform: Option, + departure_platform_planned: Option, + departure_platform_real: Option, +} + +#[derive(Deserialize, Debug)] +#[serde(rename_all = "camelCase")] +pub struct OperatorResource { + name: String, +} From 4f1e43e923f8d51b3eed8b291d6f484acea5b328 Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Sat, 7 Sep 2024 18:31:54 +0200 Subject: [PATCH 121/301] continue work on wayland things --- .../desktop-environment/home/sway/default.nix | 38 ++++++++----------- 1 file changed, 16 insertions(+), 22 deletions(-) diff --git a/modules/desktop-environment/home/sway/default.nix b/modules/desktop-environment/home/sway/default.nix index 2522cc6..44b4c5f 100644 --- a/modules/desktop-environment/home/sway/default.nix +++ b/modules/desktop-environment/home/sway/default.nix @@ -6,6 +6,7 @@ }: { programs.wofi.enable = true; programs.swaylock.enable = true; + services.network-manager-applet.enable = true; xdg.portal = { enable = true; @@ -64,11 +65,7 @@ }; startup = [ { - command = "eww open topBar; eww open bottomBar"; - } - { - command = "pkill nm-applet; sleep 1 && nm-applet"; - always = true; + command = "eww open-many topBar bottomBar"; } { command = "sleep 1 && mullvad-gui"; @@ -77,6 +74,16 @@ bars = []; menu = "wofi -d"; modifier = "Mod4"; + assigns = { + "1" = [ + {class = "^Signal$";} + {class = "^Element$";} + {class = "^Evolution$";} + ]; + "2" = [ + {app_id = "^firefox$";} + ]; + }; keybindings = with { #mod = config.xsession.windowManager.i3.config.modifier; # mod = "Mod1"; @@ -112,14 +119,6 @@ # rofi fuckery "${mod}+d" = "exec wofi -S drun --allow-images"; "${mod}+i" = "exec rofimoji --selector wofi -f alchemical_symbols anatolian_hieroglyphs emojis braille_patterns box_drawing chess_symbols emoticons geometric_shapes gothic greek_extended math mathematical_alphanumeric_symbols mathematical_operators miscellaneous_symbols miscellaneous_mathematical_symbols-a miscellaneous_mathematical_symbols-b miscellaneous_symbols_and_arrows miscellaneous_symbols_and_pictographs miscellaneous_technical modi modifier_tone_letters musical_symbols nerd_font number_forms shorthand_format_controls specials variation_selectors vertical_forms -a copy"; - # TODO: wayland - # "${mod}+d" = "exec --no-startup-id rofi -show drun -theme ${../../other/rofi-themes/applauncher.rasi}"; - # "${mod}+space" = "exec --no-startup-id rofi -show combi -combi-show window#run -modes combi -theme ${../../other/rofi-themes/applauncher.rasi}"; - # "${mod}+i" = "exec --no-startup-id rofimoji -f alchemical_symbols anatolian_hieroglyphs emojis braille_patterns box_drawing chess_symbols emoticons geometric_shapes gothic greek_extended math mathematical_alphanumeric_symbols mathematical_operators miscellaneous_symbols miscellaneous_mathematical_symbols-a miscellaneous_mathematical_symbols-b miscellaneous_symbols_and_arrows miscellaneous_symbols_and_pictographs miscellaneous_technical modi modifier_tone_letters musical_symbols nerd_font number_forms shorthand_format_controls specials variation_selectors vertical_forms -a copy"; - # "${mod}+Shift+e" = "exec --no-startup-id rofi -show \"desktopctl\" -modes \"desktopctl:${desktop-ctl.outPath}/bin/desktopctl\" -theme ${../../other/rofi-themes/applauncher.rasi}"; - # "${mod}+m" = "exec --no-startup-id menu-qalc"; - - # "${mod}+o" = "exec --no-startup-id rofi -show searchwolf -modes \"searchwolf:${searchwolf.outPath}/bin/searchwolf\""; # audio "XF86AudioRaiseVolume" = "exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ +10% && $refresh_i3status"; @@ -138,16 +137,11 @@ "XF86KbdBrightnessUp" = "exec brillo -kA 10.0"; "XF86KbdBrightnessDown" = "exec brillo -kU 10.0"; - - # macros - # "${mod}+q" = "exec em-record.sh"; - # "${mod}+p" = "exec em-play.sh"; - # "${mod}+Shift+p" = "exec em-play-loop.sh"; - - # permaclip - # "${mod}+c" = "exec rofi -show register -modes \"register:${pc-set.outPath}/bin/pc-set.sh\" -theme gruvbox-dark"; - # "${mod}+v" = "exec rofi -show register -modes \"register:${pc-get.outPath}/bin/pc-get.sh\" -theme gruvbox-dark"; }; + workspaceAutoBackAndForth = true; + focus = { + wrapping = "yes"; + }; fonts = { names = ["Atkinson Hyperlegible"]; style = "Regular"; From 258d4639d7942a6e05325ca0b89b430abcb736ae Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Sat, 7 Sep 2024 18:32:06 +0200 Subject: [PATCH 122/301] fix event countdowns not skipping past events --- other/scripts/desktop/shell-startup.nu | 1 + 1 file changed, 1 insertion(+) diff --git a/other/scripts/desktop/shell-startup.nu b/other/scripts/desktop/shell-startup.nu index 8ce5547..66eb610 100644 --- a/other/scripts/desktop/shell-startup.nu +++ b/other/scripts/desktop/shell-startup.nu @@ -51,6 +51,7 @@ def main [] { let next_events = open ~/Docs/dates.csv | update datetime {|ev| $ev.datetime | into datetime } | sort-by datetime + | filter {|ev| ($ev.datetime > (date now))} | first | each {|ev| $"(ansi attr_bold)($ev.event)(ansi reset) in (ansi attr_bold)(tfmt ($ev.datetime - (date now)))s(ansi reset)" }; print $"Hi jade, you're on HRT for (ansi reset)(ansi attr_bold)((date now) - ('2024-02-18T20:53' | into datetime) | format duration month)s(ansi reset) now! | Next Event: ($next_events)"; From bd3674accfba8bb89e8e78d923d321e04a861964 Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Tue, 10 Sep 2024 21:37:18 +0200 Subject: [PATCH 123/301] continue working on traveldings (get live checkin thing working maybe??) --- Cargo.lock | 1 + programs/traveldings/Cargo.toml | 1 + .../src/commands/current_journey.rs | 177 +++++++++++++++++- programs/traveldings/src/traewelling.rs | 45 ++++- programs/traveldings/src/traewelling/model.rs | 80 +++++--- 5 files changed, 274 insertions(+), 30 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 7e5d422..83b54a2 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1722,6 +1722,7 @@ dependencies = [ "reqwest", "serde", "serde_json", + "thiserror", "tokio", ] diff --git a/programs/traveldings/Cargo.toml b/programs/traveldings/Cargo.toml index 3b8ad29..c21a6d1 100644 --- a/programs/traveldings/Cargo.toml +++ b/programs/traveldings/Cargo.toml @@ -8,6 +8,7 @@ serde = { version = "1.0.209", features = ["derive"] } serde_json = "1.0.128" reqwest = {version = "0.12.7", default-features = false, features = ["rustls-tls", "charset", "http2"]} tokio = { version = "1", features = ["full"] } +thiserror = "1" anyhow = "1" chrono = { version = "0.4", features = ["serde"]} clap = { version = "4.5", features = ["derive"]} diff --git a/programs/traveldings/src/commands/current_journey.rs b/programs/traveldings/src/commands/current_journey.rs index ee57973..c7a8792 100644 --- a/programs/traveldings/src/commands/current_journey.rs +++ b/programs/traveldings/src/commands/current_journey.rs @@ -1,9 +1,182 @@ -use crate::traewelling::TraewellingClient; +use std::time::Duration; + +use chrono::Local; +use reqwest::StatusCode; +use serde::Serialize; +use tokio::time::sleep; + +use crate::traewelling::{ + model::{JsonableData, Status, StopJourneyPart}, + RequestErr, TraewellingClient, +}; pub async fn get_current_journey() -> anyhow::Result<()> { let client = TraewellingClient::new()?; - println!("active: {:#?}", client.get_active_checkin().await?); + let mut state; + let mut cur_active_checkin = None; + + loop { + match client.get_active_checkin().await { + Ok(status) => { + cur_active_checkin = Some(status); + state = State::Live; + } + Err(err) => { + if err == RequestErr::WithStatus(StatusCode::NOT_FOUND) { + state = State::NoCheckin; + cur_active_checkin = None; + } else { + state = State::NoConnectionOrSomethingElseDoesntWork; + } + } + }; + + match (state, &cur_active_checkin) { + (State::Live | State::NoConnectionOrSomethingElseDoesntWork, Some(status)) => { + let live = state == State::Live; + let out = CurrentJourneyOutput::new(&status, live); + + println!( + "{}", + serde_json::to_string(&out) + .expect("serde should not make you sad but it does because it's serde") + ); + sleep(Duration::from_secs(20)).await; + } + (_, None) | (State::NoCheckin, Some(_)) => { + println!("null"); + sleep(Duration::from_secs(60)).await; + } + } + } Ok(()) } + +#[derive(PartialEq, Eq, Clone, Copy, Debug)] +enum State { + Live, + NoConnectionOrSomethingElseDoesntWork, + NoCheckin, +} + +#[derive(Serialize)] +struct CurrentJourneyOutput { + live: bool, + // Journey progress, 0.0-1.0 + progress: Option, + time_left: Option, + icon: String, + + // Invalid data received? + departure_err: bool, + departure_planned: Option, + departure_real: Option, + departure_station: String, + departure_ril100: Option, + departure_platform_data_available: bool, + departure_platform_planned: Option, + departure_platform_real: Option, + + // Invalid data received? + arrival_err: bool, + arrival_planned: Option, + arrival_real: Option, + arrival_station: String, + arrival_ril100: Option, + arrival_platform_data_available: bool, + arrival_platform_planned: Option, + arrival_platform_real: Option, +} + +impl CurrentJourneyOutput { + fn new(checkin: &Status, live: bool) -> Self { + let JsonableData { + time_err: departure_err, + time_planned: departure_planned, + time_real: departure_real, + station: departure_station, + ril100: departure_ril100, + platform_data_available: departure_platform_data_available, + platform_planned: departure_platform_planned, + platform_real: departure_platform_real, + } = checkin.train.origin.get_time_data(StopJourneyPart::Origin); + let JsonableData { + time_err: arrival_err, + time_planned: arrival_planned, + time_real: arrival_real, + station: arrival_station, + ril100: arrival_ril100, + platform_data_available: arrival_platform_data_available, + platform_planned: arrival_platform_planned, + platform_real: arrival_platform_real, + } = checkin + .train + .destination + .get_time_data(StopJourneyPart::Destination); + + let (progress, time_left) = if !departure_err && !arrival_err { + let departure = departure_real.unwrap_or(departure_planned.unwrap()); + let arrival = arrival_real.unwrap_or(arrival_planned.unwrap()); + let dur = arrival - departure; + + let now = Local::now().timestamp(); + + let progress = ((now - departure) as f32) / dur as f32; + let time_left = arrival - now; + + (Some(progress), Some(time_left)) + } else { + (None, None) + }; + + let icon = match checkin.train.category.as_str() { + "nationalExpress" | "national" => "longDistanceTrans", + "regionalExp" | "regional" => "regionalTrans", + "suburban" => "localTrans", + "subway" => "subTrans", + "bus" => "bus", + "tram" => "tram", + "ferry" => "ferry", + _ => "other", + } + .to_string(); + + CurrentJourneyOutput { + live, + progress, + time_left, + icon, + departure_err, + departure_planned, + departure_real, + departure_station, + departure_ril100, + departure_platform_data_available, + departure_platform_planned, + departure_platform_real, + arrival_err, + arrival_planned, + arrival_real, + arrival_station, + arrival_ril100, + arrival_platform_data_available, + arrival_platform_planned, + arrival_platform_real, + } + } +} + +enum TransportType { + // FV, ob jetzt NJ, IC, ICE... egal + LongDistanceTrans, + RegionalTrans, + // S-bahn... + LocalTrans, + // U-bahn + SubTrans, + Bus, + Tram, + Ferry, +} diff --git a/programs/traveldings/src/traewelling.rs b/programs/traveldings/src/traewelling.rs index 3f55f5a..e1537e8 100644 --- a/programs/traveldings/src/traewelling.rs +++ b/programs/traveldings/src/traewelling.rs @@ -3,7 +3,7 @@ use std::{fmt, fs}; use model::{Container, Status}; use reqwest::{ header::{self, HeaderMap}, - Client, ClientBuilder, + Client, ClientBuilder, StatusCode, }; const KEY_PATH: &str = "/home/jade/Docs/traveldings-key"; @@ -19,7 +19,6 @@ impl TraewellingClient { let mut headers = HeaderMap::new(); let token = fs::read_to_string(KEY_PATH)?; let key = header::HeaderValue::from_str(&format!("Bearer {token}"))?; - println!("meow"); headers.insert("Authorization", key); headers.insert( header::ACCEPT, @@ -33,16 +32,17 @@ impl TraewellingClient { }) } - pub async fn get_active_checkin(&self) -> anyhow::Result { - let txt = self + pub async fn get_active_checkin(&self) -> Result { + let res = self .client .get(Self::fmt_url("user/statuses/active")) .send() - .await? - .text() .await?; + if res.status() != StatusCode::OK { + return Err(RequestErr::WithStatus(res.status())); + } - println!("{txt}"); + let txt = res.text().await?; let res: Container = serde_json::de::from_str(&txt)?; Ok(res.data) @@ -53,4 +53,35 @@ impl TraewellingClient { } } +#[derive(thiserror::Error, Debug, PartialEq, Eq)] +pub enum RequestErr { + #[error("Couldn't deserialize the json :(")] + DeserializationError, + #[error("an error related to connect happened!!")] + RelatedToConnect, + #[error("error haz status: {0}")] + WithStatus(StatusCode), + #[error("fuck if i know what went wrong :333 am silly ")] + Other, +} + +impl From for RequestErr { + fn from(value: serde_json::Error) -> Self { + eprintln!("serde error: {value:?}"); + Self::DeserializationError + } +} + +impl From for RequestErr { + fn from(value: reqwest::Error) -> Self { + if let Some(status) = value.status() { + Self::WithStatus(status) + } else if value.is_connect() { + Self::RelatedToConnect + } else { + Self::Other + } + } +} + pub mod model; diff --git a/programs/traveldings/src/traewelling/model.rs b/programs/traveldings/src/traewelling/model.rs index b40554a..4b54c7b 100644 --- a/programs/traveldings/src/traewelling/model.rs +++ b/programs/traveldings/src/traewelling/model.rs @@ -1,4 +1,4 @@ -use chrono::{DateTime, FixedOffset}; +use chrono::{DateTime, FixedOffset, Timelike}; use serde::Deserialize; #[derive(Deserialize, Debug)] @@ -9,39 +9,77 @@ pub struct Container { #[derive(Deserialize, Debug)] #[serde(rename_all = "camelCase")] pub struct Status { - train: TransportResource, + pub train: TransportResource, } #[derive(Deserialize, Debug)] #[serde(rename_all = "camelCase")] pub struct TransportResource { - category: String, - line_name: String, - distance: u32, - duration: u32, - operator: OperatorResource, - origin: StopOverResource, - destination: StopOverResource, + pub category: String, + pub line_name: String, + pub distance: u32, + pub duration: u32, + pub operator: Option, + pub origin: StopOverResource, + pub destination: StopOverResource, } #[derive(Deserialize, Debug)] #[serde(rename_all = "camelCase")] pub struct StopOverResource { - name: String, - ril_identifier: Option, - arrival: Option>, - arrival_planned: Option>, - arrival_real: Option>, - departure: Option>, - departure_planned: Option>, - departure_real: Option>, - platform: Option, - departure_platform_planned: Option, - departure_platform_real: Option, + pub name: String, + pub ril_identifier: Option, + pub arrival_planned: Option>, + pub arrival_real: Option>, + pub departure_planned: Option>, + pub departure_real: Option>, + pub platform: Option, + pub departure_platform_planned: Option, + pub departure_platform_real: Option, +} + +// ???? +pub struct JsonableData { + pub time_err: bool, + pub time_planned: Option, + pub time_real: Option, + pub station: String, + pub ril100: Option, + pub platform_data_available: bool, + pub platform_planned: Option, + pub platform_real: Option, +} + +// What the meaning of the stop in the journey is +pub enum StopJourneyPart { + Origin, + Destination, +} +impl StopOverResource { + pub fn get_time_data(&self, journey_part: StopJourneyPart) -> JsonableData { + let (time_planned, time_real) = match journey_part { + StopJourneyPart::Origin => (self.departure_planned, self.departure_real), + StopJourneyPart::Destination => (self.arrival_planned, self.arrival_real), + }; + + let time_err = time_planned == None; + + JsonableData { + time_err, + time_planned: time_planned.map(|ts| ts.timestamp()), + time_real: time_real.map(|ts| ts.timestamp()), + station: self.name.clone(), + ril100: self.ril_identifier.clone(), + platform_data_available: self.departure_platform_planned.is_none() + || self.departure_platform_real.is_none(), + platform_planned: self.departure_platform_planned.clone(), + platform_real: self.departure_platform_real.clone(), + } + } } #[derive(Deserialize, Debug)] #[serde(rename_all = "camelCase")] pub struct OperatorResource { - name: String, + pub name: String, } From 54a1e34fa602a3538e7b3cc051163e214e82c0cf Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Tue, 10 Sep 2024 22:07:27 +0200 Subject: [PATCH 124/301] refactor bottomBar smol bit --- .../eww/configDir/bottomBar/bottomBar.yuck | 20 ++----------------- .../eww/configDir/bottomBar/workspaces.yuck | 17 ++++++++++++++++ 2 files changed, 19 insertions(+), 18 deletions(-) create mode 100644 modules/desktop-environment/home/panels/eww/configDir/bottomBar/workspaces.yuck diff --git a/modules/desktop-environment/home/panels/eww/configDir/bottomBar/bottomBar.yuck b/modules/desktop-environment/home/panels/eww/configDir/bottomBar/bottomBar.yuck index 6c31965..f3bbb94 100644 --- a/modules/desktop-environment/home/panels/eww/configDir/bottomBar/bottomBar.yuck +++ b/modules/desktop-environment/home/panels/eww/configDir/bottomBar/bottomBar.yuck @@ -1,3 +1,5 @@ +(include "bottomBar/workspaces.yuck") + (defwindow bottomBar :monitor 0 :stacking "fg" @@ -39,21 +41,3 @@ ) ) ) - -(defwidget workspaceWidget [] - (box - :class "workspaces" - (for workspace in workspaces - (button - :class "${workspace.urgent ? "urgent" : ""} ${workspace.focused ? "focused" : 0}" - :onclick "swaymsg workspace ${workspace.name}" - (label :text "${workspace.name}") - ) - ) - ) -) - -(deflisten workspaces - :initial "[]" - "bar-ws-monitor" -) diff --git a/modules/desktop-environment/home/panels/eww/configDir/bottomBar/workspaces.yuck b/modules/desktop-environment/home/panels/eww/configDir/bottomBar/workspaces.yuck new file mode 100644 index 0000000..4c5495f --- /dev/null +++ b/modules/desktop-environment/home/panels/eww/configDir/bottomBar/workspaces.yuck @@ -0,0 +1,17 @@ +(defwidget workspaceWidget [] + (box + :class "workspaces" + (for workspace in workspaces + (button + :class "${workspace.urgent ? "urgent" : ""} ${workspace.focused ? "focused" : 0}" + :onclick "swaymsg workspace ${workspace.name}" + (label :text "${workspace.name}") + ) + ) + ) +) + +(deflisten workspaces + :initial "[]" + "bar-ws-monitor" +) From b4dfef1d6de0245029ad725ac6a5af7fa5fb75f3 Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Wed, 11 Sep 2024 02:09:08 +0200 Subject: [PATCH 125/301] traveldings stuff! --- .../eww/configDir/bottomBar/bottomBar.yuck | 3 +- .../eww/configDir/bottomBar/traveldings.yuck | 50 +++++++++++++++++++ .../home/panels/eww/configDir/eww.css | 17 +++++++ .../src/commands/current_journey.rs | 2 + programs/traveldings/src/traewelling/model.rs | 25 +++++++--- 5 files changed, 89 insertions(+), 8 deletions(-) create mode 100644 modules/desktop-environment/home/panels/eww/configDir/bottomBar/traveldings.yuck diff --git a/modules/desktop-environment/home/panels/eww/configDir/bottomBar/bottomBar.yuck b/modules/desktop-environment/home/panels/eww/configDir/bottomBar/bottomBar.yuck index f3bbb94..2034740 100644 --- a/modules/desktop-environment/home/panels/eww/configDir/bottomBar/bottomBar.yuck +++ b/modules/desktop-environment/home/panels/eww/configDir/bottomBar/bottomBar.yuck @@ -1,4 +1,5 @@ (include "bottomBar/workspaces.yuck") +(include "bottomBar/traveldings.yuck") (defwindow bottomBar :monitor 0 @@ -21,7 +22,7 @@ ) (box :halign "center" - (label :text "mid") + (traveldings) ) (box :halign "end" diff --git a/modules/desktop-environment/home/panels/eww/configDir/bottomBar/traveldings.yuck b/modules/desktop-environment/home/panels/eww/configDir/bottomBar/traveldings.yuck new file mode 100644 index 0000000..0e13b28 --- /dev/null +++ b/modules/desktop-environment/home/panels/eww/configDir/bottomBar/traveldings.yuck @@ -0,0 +1,50 @@ +(defwidget traveldings [] + (revealer + :class "traveldings" + :transition "crossfade" + :reveal { traveldings_data != "null" } + (traveldingsBarWidget) + ) +) + +(defwidget traveldingsBarWidget [] + (overlay + (box + :width 640 + (label + :halign "start" + :text "${traveldings_data.line} -> ${strlength(traveldings_data.arrival_station) > 24 ? "${substring(traveldings_data.arrival_station, 0, 24)}…" : traveldings_data.arrival_station}${traveldings_data.arrival_platform_data_available ? " (Gl. ${traveldings_data.arrival_platform_real})" : ""}" + ) + (label + :halign "end" + :text { traveldings_data.time_left >= 3600 ? formattime(traveldings_data.time_left, "noch %-Hh %-Mmin", "Etc/UTC") : formattime(traveldings_data.time_left, "noch %-Mmin", "Etc/UTC") } + ) + ) + (box + (progress + :value {traveldings_data.progress * 100} + :orientation "horizontal" + ) + ) + ) +) + +(defwindow traveldingsWindow + :monitor 0 + :stacking "overlay" + :exclusive "false" + :geometry (geometry + :x "0%" + :y "6.6%" + :width "30%" + :height "20%" + :anchor "bottom center") + (box + :class "traveldingsWindow" + (label :text "TODO")) +) + +(deflisten traveldings_data + :initial "null" + "traveldings current" +) diff --git a/modules/desktop-environment/home/panels/eww/configDir/eww.css b/modules/desktop-environment/home/panels/eww/configDir/eww.css index 848f77a..f512917 100644 --- a/modules/desktop-environment/home/panels/eww/configDir/eww.css +++ b/modules/desktop-environment/home/panels/eww/configDir/eww.css @@ -13,4 +13,21 @@ label { .workspaces button.focused { background-color: #504935; +} + +.traveldings progressbar trough { + border: none; + background-color: #3c3836; + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} + +.traveldings progressbar progress { + background-color: #79740e; + border-bottom-left-radius: 0; +} + + +.traveldingsWindow { + border-radius: 15px; } \ No newline at end of file diff --git a/programs/traveldings/src/commands/current_journey.rs b/programs/traveldings/src/commands/current_journey.rs index c7a8792..b0864bf 100644 --- a/programs/traveldings/src/commands/current_journey.rs +++ b/programs/traveldings/src/commands/current_journey.rs @@ -68,6 +68,7 @@ struct CurrentJourneyOutput { progress: Option, time_left: Option, icon: String, + line: String, // Invalid data received? departure_err: bool, @@ -148,6 +149,7 @@ impl CurrentJourneyOutput { progress, time_left, icon, + line: checkin.train.line_name.clone(), departure_err, departure_planned, departure_real, diff --git a/programs/traveldings/src/traewelling/model.rs b/programs/traveldings/src/traewelling/model.rs index 4b54c7b..090d36f 100644 --- a/programs/traveldings/src/traewelling/model.rs +++ b/programs/traveldings/src/traewelling/model.rs @@ -36,6 +36,8 @@ pub struct StopOverResource { pub platform: Option, pub departure_platform_planned: Option, pub departure_platform_real: Option, + pub arrival_platform_planned: Option, + pub arrival_platform_real: Option, } // ???? @@ -57,9 +59,19 @@ pub enum StopJourneyPart { } impl StopOverResource { pub fn get_time_data(&self, journey_part: StopJourneyPart) -> JsonableData { - let (time_planned, time_real) = match journey_part { - StopJourneyPart::Origin => (self.departure_planned, self.departure_real), - StopJourneyPart::Destination => (self.arrival_planned, self.arrival_real), + let (time_planned, time_real, platform_planned, platform_real) = match journey_part { + StopJourneyPart::Origin => ( + self.departure_planned, + self.departure_real, + self.departure_platform_planned.clone(), + self.departure_platform_real.clone(), + ), + StopJourneyPart::Destination => ( + self.arrival_planned, + self.arrival_real, + self.arrival_platform_planned.clone(), + self.arrival_platform_real.clone(), + ), }; let time_err = time_planned == None; @@ -70,10 +82,9 @@ impl StopOverResource { time_real: time_real.map(|ts| ts.timestamp()), station: self.name.clone(), ril100: self.ril_identifier.clone(), - platform_data_available: self.departure_platform_planned.is_none() - || self.departure_platform_real.is_none(), - platform_planned: self.departure_platform_planned.clone(), - platform_real: self.departure_platform_real.clone(), + platform_data_available: platform_planned.is_some() || platform_real.is_some(), + platform_planned, + platform_real, } } } From f903d1b45e9974a2f48d8562621865d92b4020a3 Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Thu, 26 Sep 2024 19:15:58 +0200 Subject: [PATCH 126/301] do things --- common.nix | 2 +- modules/desktop-environment/home/default.nix | 9 +++++++++ .../panels/eww/configDir/bottomBar/bottomBar.yuck | 8 +++++++- .../eww/configDir/bottomBar/traveldings.yuck | 15 +-------------- .../home/panels/eww/configDir/eww.css | 8 ++++++-- .../home/panels/eww/configDir/scripts/iceTacho.nu | 15 +++++++++++++++ modules/desktop-environment/home/sway/default.nix | 5 ++--- modules/desktop/default.nix | 1 + modules/desktop/firefox.nix | 5 +++-- other/env.nu | 2 +- other/scripts/desktop/shell-startup.nu | 3 +-- 11 files changed, 47 insertions(+), 26 deletions(-) create mode 100644 modules/desktop-environment/home/panels/eww/configDir/scripts/iceTacho.nu diff --git a/common.nix b/common.nix index bc82484..d011905 100644 --- a/common.nix +++ b/common.nix @@ -74,7 +74,7 @@ with builtins; { mprocs dig aria2 - usbutils + cyme numbat devd diff --git a/modules/desktop-environment/home/default.nix b/modules/desktop-environment/home/default.nix index b9f6429..e348ec6 100644 --- a/modules/desktop-environment/home/default.nix +++ b/modules/desktop-environment/home/default.nix @@ -14,5 +14,14 @@ enableNushellIntegration = true; enableSshSupport = true; }; + fonts.fontconfig = { + enable = true; + defaultFonts = { + emoji = []; + monospace = []; + sansSerif = ["Atkinson Hyperlegible"]; + serif = []; + }; + }; }; } diff --git a/modules/desktop-environment/home/panels/eww/configDir/bottomBar/bottomBar.yuck b/modules/desktop-environment/home/panels/eww/configDir/bottomBar/bottomBar.yuck index 2034740..635de40 100644 --- a/modules/desktop-environment/home/panels/eww/configDir/bottomBar/bottomBar.yuck +++ b/modules/desktop-environment/home/panels/eww/configDir/bottomBar/bottomBar.yuck @@ -26,7 +26,7 @@ ) (box :halign "end" - (label :text "right") + (label :text "${iceData.speed}km/h") ) ) (box @@ -42,3 +42,9 @@ ) ) ) + +(defpoll iceData + :interval "2s" + :initial "" + `(iw dev wlp4s0 link | grep "WIFIonICE" > /dev/null) && curl https://iceportal.de/api1/rs/status` +) diff --git a/modules/desktop-environment/home/panels/eww/configDir/bottomBar/traveldings.yuck b/modules/desktop-environment/home/panels/eww/configDir/bottomBar/traveldings.yuck index 0e13b28..4aac614 100644 --- a/modules/desktop-environment/home/panels/eww/configDir/bottomBar/traveldings.yuck +++ b/modules/desktop-environment/home/panels/eww/configDir/bottomBar/traveldings.yuck @@ -22,6 +22,7 @@ ) (box (progress + :class { traveldings_data.live ? "traveldings_live" : "traveldings_disconnected" } :value {traveldings_data.progress * 100} :orientation "horizontal" ) @@ -29,20 +30,6 @@ ) ) -(defwindow traveldingsWindow - :monitor 0 - :stacking "overlay" - :exclusive "false" - :geometry (geometry - :x "0%" - :y "6.6%" - :width "30%" - :height "20%" - :anchor "bottom center") - (box - :class "traveldingsWindow" - (label :text "TODO")) -) (deflisten traveldings_data :initial "null" diff --git a/modules/desktop-environment/home/panels/eww/configDir/eww.css b/modules/desktop-environment/home/panels/eww/configDir/eww.css index f512917..7186cab 100644 --- a/modules/desktop-environment/home/panels/eww/configDir/eww.css +++ b/modules/desktop-environment/home/panels/eww/configDir/eww.css @@ -22,12 +22,16 @@ label { border-bottom-left-radius: 0; } -.traveldings progressbar progress { +.traveldings progressbar.traveldings_live progress { background-color: #79740e; border-bottom-left-radius: 0; } +.traveldings progressbar.traveldings_disconnected progress { + background-color: #cc241d; +} + .traveldingsWindow { border-radius: 15px; -} \ No newline at end of file +} diff --git a/modules/desktop-environment/home/panels/eww/configDir/scripts/iceTacho.nu b/modules/desktop-environment/home/panels/eww/configDir/scripts/iceTacho.nu new file mode 100644 index 0000000..0be47c8 --- /dev/null +++ b/modules/desktop-environment/home/panels/eww/configDir/scripts/iceTacho.nu @@ -0,0 +1,15 @@ +#!/usr/bin/env nu + +const TABLE = [ + [ br vmax ]; + [ 401 280 ] + [ 402 280 ] + [ 403 330 ] + [ 406 330 ] + [ 407 320 ] + [ 408 320 ] + [ 411 230 ] + [ 415 230 ] + [ 412 265 ] + [ 605 200 ] +]; diff --git a/modules/desktop-environment/home/sway/default.nix b/modules/desktop-environment/home/sway/default.nix index 44b4c5f..951afa5 100644 --- a/modules/desktop-environment/home/sway/default.nix +++ b/modules/desktop-environment/home/sway/default.nix @@ -112,8 +112,8 @@ # "${mod}+Shift+c" = "focus child"; # screenshot # "${mod}+w" = "exec window-screenshot.sh"; - "${mod}+s" = "exec flameshot gui -c -p $HOME/Pictures/screenshots"; - "${mod}+a" = "exec flameshot screen -c -p $HOME/Pictures/screenshots"; + "${mod}+s" = "exec gscreenshot -csf $HOME/Pictures/screenshots"; + "${mod}+a" = "exec gscreenshot -cf $HOME/Pictures/screenshots"; # "${mod}+t" = "exec ocr-screenshot.sh"; # rofi fuckery @@ -138,7 +138,6 @@ "XF86KbdBrightnessUp" = "exec brillo -kA 10.0"; "XF86KbdBrightnessDown" = "exec brillo -kU 10.0"; }; - workspaceAutoBackAndForth = true; focus = { wrapping = "yes"; }; diff --git a/modules/desktop/default.nix b/modules/desktop/default.nix index 993e172..711b538 100644 --- a/modules/desktop/default.nix +++ b/modules/desktop/default.nix @@ -100,6 +100,7 @@ in xclip xmacro xorg.xev + gscreenshot syncplay diff --git a/modules/desktop/firefox.nix b/modules/desktop/firefox.nix index 3c603c0..336b3d6 100644 --- a/modules/desktop/firefox.nix +++ b/modules/desktop/firefox.nix @@ -254,6 +254,8 @@ "app.normandy.enabled" = false; "app.normandy.api_url" = ""; "dom.private-attribution.submission.enabled" = false; + "browser.newtabpage.activity-stream.feeds.showWeather" = false; + "browser.newtabpage.activity-stream.feeds.weatherfeed" = false; "browser.safebrowsing.malware.enabled" = false; "browser.safebrowsing.phishing.enabled" = false; @@ -319,8 +321,7 @@ "privacy.window.maxInnerWidth" = 1600; "privacy.window.maxInnerHeight" = 900; "privacy.resistFingerprinting.block_mozAddonManager" = true; - "privacy.resistFingerprinting.letterboxing" = true; - "privacy.resistFingerprinting.letterboxing.dimensions" = ""; + "privacy.resistFingerprinting.letterboxing" = false; "widget.non-native-theme.enabled" = true; "browser.link.open_newwindow" = 3; "browser.link.open_newwindow.restriction" = 0; diff --git a/other/env.nu b/other/env.nu index d5ca780..908d237 100644 --- a/other/env.nu +++ b/other/env.nu @@ -33,7 +33,7 @@ $env.PROMPT_COMMAND = {|| let len = (term size | get columns) - ($item | ansi strip | str length --grapheme-clusters) - (create_right_prompt | ansi strip | str length --grapheme-clusters); # $item | append (flag $TRANS "-" $len) | str join let deco = if ($env.CMD_COUNT == 0) { - flag $LESBIAN "=" $len + flag $TRANS "=" $len } else if ($env.CMD_COUNT | is even) { flag $LESBIAN "-" $len } else { diff --git a/other/scripts/desktop/shell-startup.nu b/other/scripts/desktop/shell-startup.nu index 66eb610..debcf05 100644 --- a/other/scripts/desktop/shell-startup.nu +++ b/other/scripts/desktop/shell-startup.nu @@ -47,7 +47,7 @@ def flag [ } def main [] { - print (flag $TRANS); + print (flag $LESBIAN); let next_events = open ~/Docs/dates.csv | update datetime {|ev| $ev.datetime | into datetime } | sort-by datetime @@ -55,7 +55,6 @@ def main [] { | first | each {|ev| $"(ansi attr_bold)($ev.event)(ansi reset) in (ansi attr_bold)(tfmt ($ev.datetime - (date now)))s(ansi reset)" }; print $"Hi jade, you're on HRT for (ansi reset)(ansi attr_bold)((date now) - ('2024-02-18T20:53' | into datetime) | format duration month)s(ansi reset) now! | Next Event: ($next_events)"; - # print (flag $LESBIAN); } def tfmt [dur: duration] { From f0b640eeedbbf3df2390495c41287d3146ad830b Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Thu, 3 Oct 2024 19:30:56 +0200 Subject: [PATCH 127/301] fix bar layout --- .../eww/configDir/bottomBar/bottomBar.yuck | 28 ++++++----- .../panels/eww/configDir/topBar/topBar.yuck | 49 ++++++++++--------- 2 files changed, 42 insertions(+), 35 deletions(-) diff --git a/modules/desktop-environment/home/panels/eww/configDir/bottomBar/bottomBar.yuck b/modules/desktop-environment/home/panels/eww/configDir/bottomBar/bottomBar.yuck index 635de40..cad75ea 100644 --- a/modules/desktop-environment/home/panels/eww/configDir/bottomBar/bottomBar.yuck +++ b/modules/desktop-environment/home/panels/eww/configDir/bottomBar/bottomBar.yuck @@ -15,18 +15,22 @@ (defwidget bottomBar [] (overlay :class "bottomBar" - (centerbox - (box - :halign "start" - (workspaceWidget) - ) - (box - :halign "center" - (traveldings) - ) - (box - :halign "end" - (label :text "${iceData.speed}km/h") + (transform + :translate-y "1.5px" + (centerbox + (box + :halign "start" + (workspaceWidget) + ) + (box + :halign "center" + (traveldings) + ) + (box + :halign "end" + ; (label :text "${iceData.speed}km/h") + (iceTacho) + ) ) ) (box diff --git a/modules/desktop-environment/home/panels/eww/configDir/topBar/topBar.yuck b/modules/desktop-environment/home/panels/eww/configDir/topBar/topBar.yuck index be4b25f..bf20581 100644 --- a/modules/desktop-environment/home/panels/eww/configDir/topBar/topBar.yuck +++ b/modules/desktop-environment/home/panels/eww/configDir/topBar/topBar.yuck @@ -16,30 +16,33 @@ (defwidget topBar [] (overlay :class "topBar" - (centerbox - (box - :halign "start" - :spacing 12 - :space-evenly false - (label :text " ") - (cpu) - (sep) - (mem) - (sep) - (label :markup bat0) - (sep) - (label :markup bat1) - ) - (box - :halign "center" - (systray - :icon-size 18 - :spacing 3 + (transform + :translate-y "-1.5px" + (centerbox + (box + :halign "start" + :spacing 12 + :space-evenly false + (label :text " ") + (cpu) + (sep) + (mem) + (sep) + (label :markup bat0) + (sep) + (label :markup bat1) + ) + (box + :halign "center" + (systray + :icon-size 18 + :spacing 3 + ) + ) + (box + :halign "end" + (time) ) - ) - (box - :halign "end" - (time) ) ) (box From effe29cd74c07a279341c108e845a5e226d0ec45 Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Thu, 3 Oct 2024 19:31:13 +0200 Subject: [PATCH 128/301] continue work on ICE tacho --- .../eww/configDir/bottomBar/bottomBar.yuck | 19 +++++-- .../panels/eww/configDir/scripts/iceTacho.nu | 49 ++++++++++++++----- 2 files changed, 51 insertions(+), 17 deletions(-) mode change 100644 => 100755 modules/desktop-environment/home/panels/eww/configDir/scripts/iceTacho.nu diff --git a/modules/desktop-environment/home/panels/eww/configDir/bottomBar/bottomBar.yuck b/modules/desktop-environment/home/panels/eww/configDir/bottomBar/bottomBar.yuck index cad75ea..611590e 100644 --- a/modules/desktop-environment/home/panels/eww/configDir/bottomBar/bottomBar.yuck +++ b/modules/desktop-environment/home/panels/eww/configDir/bottomBar/bottomBar.yuck @@ -47,8 +47,19 @@ ) ) -(defpoll iceData - :interval "2s" - :initial "" - `(iw dev wlp4s0 link | grep "WIFIonICE" > /dev/null) && curl https://iceportal.de/api1/rs/status` +(defwidget iceTacho [] + (box + :class "iceTacho" + :tooltip "Tz${iceTachoData.tzn} (BR ${iceTachoData.br})" + (circular-progress + :value { iceTachoData.frac * 60 + 20 } + :thickness 3 + ) + (label :text "${iceTachoData.speed} km/h") + ) +) + +(deflisten iceTachoData + :initial "null" + { "~/.config/eww/scripts/iceTacho.nu" } ) diff --git a/modules/desktop-environment/home/panels/eww/configDir/scripts/iceTacho.nu b/modules/desktop-environment/home/panels/eww/configDir/scripts/iceTacho.nu old mode 100644 new mode 100755 index 0be47c8..fa82321 --- a/modules/desktop-environment/home/panels/eww/configDir/scripts/iceTacho.nu +++ b/modules/desktop-environment/home/panels/eww/configDir/scripts/iceTacho.nu @@ -1,15 +1,38 @@ #!/usr/bin/env nu -const TABLE = [ - [ br vmax ]; - [ 401 280 ] - [ 402 280 ] - [ 403 330 ] - [ 406 330 ] - [ 407 320 ] - [ 408 320 ] - [ 411 230 ] - [ 415 230 ] - [ 412 265 ] - [ 605 200 ] -]; +const TABLE = { + 401: 280 + 402: 280 + 403: 330 + 406: 330 + 407: 320 + 408: 320 + 411: 230 + 415: 230 + 412: 265 + 605: 200 +}; + +def main [ ] { + loop { + if ((iw dev wlp4s0 link | lines | filter {|it| $it =~ "WIFIonICE" } | length) == 1) { + let iceData = http get https://iceportal.de/api1/rs/status; + let tzn = $iceData.tzn; + let br = $iceData.series; + let speed = $iceData.speed; + let speedfrac = $speed / ($TABLE | get $br); + + print ({ + tzn: $tzn, + br: $br, + speed: $speed, + frac: $speedfrac + } | to json -r); + + sleep 2sec; + } else { + print "null"; + sleep 5sec; + } + } +} From cdb1b93296b68976013f4150b2708db1d0fc35e7 Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Thu, 3 Oct 2024 19:31:26 +0200 Subject: [PATCH 129/301] make evolution setup cooler(tm) --- modules/desktop/social.nix | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/modules/desktop/social.nix b/modules/desktop/social.nix index b8569bc..10c05d0 100644 --- a/modules/desktop/social.nix +++ b/modules/desktop/social.nix @@ -1,6 +1,7 @@ { config, lib, + pkgs, ... }: let cfg = config.jade.desktop.social; @@ -16,11 +17,17 @@ in ... }: { home.packages = with pkgs; [ - pkgs-stable.evolutionWithPlugins signal-desktop mumble element-desktop + pkgs.evolution-data-server-gtk4 ]; }; + programs.evolution = { + enable = true; + plugins = [pkgs.evolution-ews]; + }; + services.gnome.evolution-data-server.enable = true; + services.gnome.evolution-data-server.plugins = []; }; } From f9b59e8ed24149ffc762e18758ab92d117ecdad1 Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Thu, 3 Oct 2024 19:31:47 +0200 Subject: [PATCH 130/301] setup teams window assignment --- modules/desktop-environment/home/sway/default.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/modules/desktop-environment/home/sway/default.nix b/modules/desktop-environment/home/sway/default.nix index 951afa5..2a2bee3 100644 --- a/modules/desktop-environment/home/sway/default.nix +++ b/modules/desktop-environment/home/sway/default.nix @@ -79,6 +79,7 @@ {class = "^Signal$";} {class = "^Element$";} {class = "^Evolution$";} + {class = "^teams-for-linux$";} ]; "2" = [ {app_id = "^firefox$";} From b7fe5a0014e26c8654ef0074aea1cbb188111d01 Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Thu, 3 Oct 2024 19:31:56 +0200 Subject: [PATCH 131/301] enable touchpad tapping --- hosts/catbook-j/modules/input.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hosts/catbook-j/modules/input.nix b/hosts/catbook-j/modules/input.nix index f6d8fee..fdb5785 100644 --- a/hosts/catbook-j/modules/input.nix +++ b/hosts/catbook-j/modules/input.nix @@ -23,5 +23,5 @@ sensitivity = 256; }; - services.libinput.touchpad.tapping = false; + services.libinput.touchpad.tapping = true; } From 92a7e6021d35c8bda25c927c3fbd18fd84839d36 Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Fri, 4 Oct 2024 18:13:21 +0200 Subject: [PATCH 132/301] set up easyroam/eduroam (well, mostly kloenk did it) Co-authored-by: kloenk --- modules/desktop-environment/default.nix | 1 + modules/desktop-environment/eduroam.nix | 56 +++++++++++++++++++++++++ 2 files changed, 57 insertions(+) create mode 100644 modules/desktop-environment/eduroam.nix diff --git a/modules/desktop-environment/default.nix b/modules/desktop-environment/default.nix index 4a5b04f..73050ec 100644 --- a/modules/desktop-environment/default.nix +++ b/modules/desktop-environment/default.nix @@ -1,6 +1,7 @@ {...}: { imports = [ ./audio.nix + ./eduroam.nix ./flatpak.nix ./home ./dm.nix diff --git a/modules/desktop-environment/eduroam.nix b/modules/desktop-environment/eduroam.nix new file mode 100644 index 0000000..45c2c5c --- /dev/null +++ b/modules/desktop-environment/eduroam.nix @@ -0,0 +1,56 @@ +# Thanks @ kloenk (@kloenk@catcatnya.com) for making this for me at MRMCD 2024 :33 +{pkgs, ...}: let + caDir = "/var/lib/easyroam"; + uuid = "821ad781-76a3-447f-a2e8-c7f18a1df3bc"; +in { + systemd.services.easyroam = { + requires = ["NetworkManager.service"]; + after = ["NetworkManager.service"]; + requiredBy = ["network-online.target"]; + path = with pkgs; [networkmanager openssl gnused]; + script = '' + set -x + openssl pkcs12 -password pass: -in ${caDir}/my_easyroam_cert.p12 -legacy -nokeys | openssl x509 > ${caDir}/easyroam_client_cert.pem + cn=$(openssl x509 -noout -subject -in ${caDir}/easyroam_client_cert.pem -legacy | sed 's/.*CN = \(.*\), C.*/\1/') + openssl pkcs12 -legacy -password pass: -in ${caDir}/my_easyroam_cert.p12 -nodes -nocerts | openssl rsa -aes256 -passin pass: -passout pass:meow -out ${caDir}/easyroam_client_key.pem + openssl pkcs12 -password pass: -in ${caDir}/my_easyroam_cert.p12 -legacy -cacerts -nokeys > ${caDir}/easyroam_root_ca.pem + + nmcli connection modify --temporary uuid ${uuid} 802-1x.identity "$cn" + ''; + serviceConfig = { + Type = "oneshot"; + }; + }; + + networking.networkmanager.ensureProfiles.profiles.eduroam = { + "802-1x" = { + ca-cert = "${caDir}/easyroam_root_ca.pem"; + client-cert = "${caDir}/easyroam_client_cert.pem"; + domain-suffix-match = "easyroam.eduroam.de"; + eap = "tls;"; + identity = "meow"; + private-key = "${caDir}/easyroam_client_key.pem"; + private-key-password = "meow"; + }; + connection = { + id = "eduroam"; + type = "wifi"; + inherit uuid; + }; + ipv4 = { + method = "auto"; + }; + ipv6 = { + addr-gen-mode = "default"; + method = "auto"; + }; + proxy = {}; + wifi = { + mode = "infrastructure"; + ssid = "eduroam"; + }; + wifi-security = { + key-mgmt = "wpa-eap"; + }; + }; +} From be22d9da42388530f75c39105c35c3f098723be5 Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Thu, 10 Oct 2024 14:40:29 +0200 Subject: [PATCH 133/301] flake.lock: Update MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Flake lock file updates: • Updated input 'crane': 'github:ipetkov/crane/96fd12c7100e9e05fa1a0a5bd108525600ce282f' (2024-08-31) → 'github:ipetkov/crane/fd86b78f5f35f712c72147427b1eb81a9bd55d0b' (2024-10-07) • Updated input 'fenix': 'github:nix-community/fenix/0774f58cf1025bbb713971deecc7f07c856be6ed' (2024-09-02) → 'github:nix-community/fenix/b135535125e24270dddddc8cfab455533492e4ad' (2024-10-10) • Updated input 'fenix/rust-analyzer-src': 'github:rust-lang/rust-analyzer/779d9eee2ea403da447278a7007c9627c8878856' (2024-09-01) → 'github:rust-lang/rust-analyzer/0fb804acb375b02a3beeaceeb75b71969ef37b15' (2024-10-09) • Updated input 'helix-inline-diags': 'github:helix-editor/helix/1b5295a3f3d7cccd96eed5bfd394807a4dae87fc' (2024-08-28) → 'github:helix-editor/helix/761f70d61179f38152e76c1f224589a53b62d00f' (2024-10-08) • Updated input 'home-manager': 'github:nix-community/home-manager/471e3eb0a114265bcd62d11d58ba8d3421ee68eb' (2024-09-01) → 'github:nix-community/home-manager/038630363e7de57c36c417fd2f5d7c14773403e4' (2024-10-07) • Updated input 'lix-module': 'git+https://git.lix.systems/lix-project/nixos-module?ref=refs/heads/main&rev=cecf70b77539c1a593f60ec9d0305b5e537ab6a9' (2024-08-13) → 'git+https://git.lix.systems/lix-project/nixos-module?ref=refs/heads/main&rev=fd186f535a4ac7ae35d98c1dd5d79f0a81b7976d' (2024-10-01) • Updated input 'lix-module/flake-utils': 'github:numtide/flake-utils/b1d9ab70662946ef0850d488da1c9019f3a9752a' (2024-03-11) → 'github:numtide/flake-utils/c1dfcf08411b08f6b8615f7d8971a2bfa81d5e8a' (2024-09-17) • Updated input 'lix-module/lix': 'https://git.lix.systems/api/v1/repos/lix-project/lix/archive/f9a3bf6ccccf8ac6b1604c1a2980e3a565ae4f44.tar.gz?narHash=sha256-XDcqLVPcsMhORerIPuQ1XNALtDvG6QRA2dKyNrccXyg%3D&rev=f9a3bf6ccccf8ac6b1604c1a2980e3a565ae4f44' (2024-08-13) → 'https://git.lix.systems/api/v1/repos/lix-project/lix/archive/a16ceb9411c57993d811c6bebb517742fe3d34e3.tar.gz?narHash=sha256-7kaZRZCWG8PmxwIDTVKjJo3VtAGDun7mqfAMlucQbdQ%3D&rev=a16ceb9411c57993d811c6bebb517742fe3d34e3' (2024-09-30) • Updated input 'nixpkgs': 'github:NixOS/nixpkgs/12228ff1752d7b7624a54e9c1af4b222b3c1073b' (2024-08-31) → 'github:NixOS/nixpkgs/5633bcff0c6162b9e4b5f1264264611e950c8ec7' (2024-10-09) • Updated input 'nixpkgs-unstable-small': 'github:NixOS/nixpkgs/66a352a3f27a2eb2f27e42a13c6fe245d3be2b98' (2024-09-02) → 'github:NixOS/nixpkgs/6b955bdbb9efe4a5c047746323951fe1bdf8d01b' (2024-10-10) --- flake.lock | 64 +++++++++++++++++++++++++++--------------------------- 1 file changed, 32 insertions(+), 32 deletions(-) diff --git a/flake.lock b/flake.lock index df5082c..6ca71bd 100644 --- a/flake.lock +++ b/flake.lock @@ -2,11 +2,11 @@ "nodes": { "crane": { "locked": { - "lastModified": 1725125250, - "narHash": "sha256-CB20rDD5eHikF6mMTTJdwPP1qvyoiyyw1RDUzwIaIF8=", + "lastModified": 1728344376, + "narHash": "sha256-lxTce2XE6mfJH8Zk6yBbqsbu9/jpwdymbSH5cCbiVOA=", "owner": "ipetkov", "repo": "crane", - "rev": "96fd12c7100e9e05fa1a0a5bd108525600ce282f", + "rev": "fd86b78f5f35f712c72147427b1eb81a9bd55d0b", "type": "github" }, "original": { @@ -23,11 +23,11 @@ "rust-analyzer-src": "rust-analyzer-src" }, "locked": { - "lastModified": 1725258763, - "narHash": "sha256-7s5RfYlTljWnKGkK4hOMJCJ0sNQoLYjMxezX3Vijy/0=", + "lastModified": 1728542061, + "narHash": "sha256-2YAnVU67qimQGO71rCBWcv7RrRK5gYgysXe3NVomuwQ=", "owner": "nix-community", "repo": "fenix", - "rev": "0774f58cf1025bbb713971deecc7f07c856be6ed", + "rev": "b135535125e24270dddddc8cfab455533492e4ad", "type": "github" }, "original": { @@ -59,11 +59,11 @@ "systems": "systems_2" }, "locked": { - "lastModified": 1710146030, - "narHash": "sha256-SZ5L6eA7HJ/nmkzGG7/ISclqe6oZdOZTNoesiInkXPQ=", + "lastModified": 1726560853, + "narHash": "sha256-X6rJYSESBVr3hBoH0WbKE5KvhPU5bloyZ2L4K60/fPQ=", "owner": "numtide", "repo": "flake-utils", - "rev": "b1d9ab70662946ef0850d488da1c9019f3a9752a", + "rev": "c1dfcf08411b08f6b8615f7d8971a2bfa81d5e8a", "type": "github" }, "original": { @@ -99,11 +99,11 @@ "rust-overlay": "rust-overlay" }, "locked": { - "lastModified": 1724856988, - "narHash": "sha256-JBLe2CxAhG+J8+x8qmbzkGHNYmGcSiuY2QO4Zhb72lI=", + "lastModified": 1728372216, + "narHash": "sha256-amGNilpQ/vohlgerF/5D4QNsXCRbh2H06nmWyz/xyS8=", "owner": "helix-editor", "repo": "helix", - "rev": "1b5295a3f3d7cccd96eed5bfd394807a4dae87fc", + "rev": "761f70d61179f38152e76c1f224589a53b62d00f", "type": "github" }, "original": { @@ -119,11 +119,11 @@ ] }, "locked": { - "lastModified": 1725180166, - "narHash": "sha256-fzssXuGR/mCeGbzM1ExaTqDz7QDGta3WA4jJsZyRruo=", + "lastModified": 1728337164, + "narHash": "sha256-VdRTjJFyq4Q9U7Z/UoC2Q5jK8vSo6E86lHc2OanXtvc=", "owner": "nix-community", "repo": "home-manager", - "rev": "471e3eb0a114265bcd62d11d58ba8d3421ee68eb", + "rev": "038630363e7de57c36c417fd2f5d7c14773403e4", "type": "github" }, "original": { @@ -135,11 +135,11 @@ "lix": { "flake": false, "locked": { - "lastModified": 1723511168, - "narHash": "sha256-XDcqLVPcsMhORerIPuQ1XNALtDvG6QRA2dKyNrccXyg=", - "rev": "f9a3bf6ccccf8ac6b1604c1a2980e3a565ae4f44", + "lastModified": 1727712632, + "narHash": "sha256-7kaZRZCWG8PmxwIDTVKjJo3VtAGDun7mqfAMlucQbdQ=", + "rev": "a16ceb9411c57993d811c6bebb517742fe3d34e3", "type": "tarball", - "url": "https://git.lix.systems/api/v1/repos/lix-project/lix/archive/f9a3bf6ccccf8ac6b1604c1a2980e3a565ae4f44.tar.gz?rev=f9a3bf6ccccf8ac6b1604c1a2980e3a565ae4f44" + "url": "https://git.lix.systems/api/v1/repos/lix-project/lix/archive/a16ceb9411c57993d811c6bebb517742fe3d34e3.tar.gz?rev=a16ceb9411c57993d811c6bebb517742fe3d34e3" }, "original": { "type": "tarball", @@ -156,11 +156,11 @@ ] }, "locked": { - "lastModified": 1723511483, - "narHash": "sha256-rT/OkVXKkns2YvyF1nFvl+8Gc3sld1c1sXPtGkbqaDY=", + "lastModified": 1727752861, + "narHash": "sha256-jowmo2aEzrEpPSM96IWtajuogdJm7DjAWxFTEb7Ct0s=", "ref": "refs/heads/main", - "rev": "cecf70b77539c1a593f60ec9d0305b5e537ab6a9", - "revCount": 106, + "rev": "fd186f535a4ac7ae35d98c1dd5d79f0a81b7976d", + "revCount": 116, "type": "git", "url": "https://git.lix.systems/lix-project/nixos-module" }, @@ -200,11 +200,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1725103162, - "narHash": "sha256-Ym04C5+qovuQDYL/rKWSR+WESseQBbNAe5DsXNx5trY=", + "lastModified": 1728492678, + "narHash": "sha256-9UTxR8eukdg+XZeHgxW5hQA9fIKHsKCdOIUycTryeVw=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "12228ff1752d7b7624a54e9c1af4b222b3c1073b", + "rev": "5633bcff0c6162b9e4b5f1264264611e950c8ec7", "type": "github" }, "original": { @@ -230,11 +230,11 @@ }, "nixpkgs-unstable-small": { "locked": { - "lastModified": 1725274606, - "narHash": "sha256-xXINAjCR8eTmp3AxZTk/PIH9nNoFNN0OM7MUw6eB7oQ=", + "lastModified": 1728534991, + "narHash": "sha256-wLUZyvtOOowAz0kTrU2MoC4nXWniFaVezGyzuEt5HPc=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "66a352a3f27a2eb2f27e42a13c6fe245d3be2b98", + "rev": "6b955bdbb9efe4a5c047746323951fe1bdf8d01b", "type": "github" }, "original": { @@ -260,11 +260,11 @@ "rust-analyzer-src": { "flake": false, "locked": { - "lastModified": 1725191098, - "narHash": "sha256-YH0kH5CSOnAuPUB1BUzUqvnKiv5SgDhfMNjrkki9Ahk=", + "lastModified": 1728505432, + "narHash": "sha256-QFPMazeiGLo7AGy4RREmTgko0Quch/toMVKhGUjDEeo=", "owner": "rust-lang", "repo": "rust-analyzer", - "rev": "779d9eee2ea403da447278a7007c9627c8878856", + "rev": "0fb804acb375b02a3beeaceeb75b71969ef37b15", "type": "github" }, "original": { From 5c16f2df1b224a5a231a1d7426bd0c27bfa32947 Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Fri, 11 Oct 2024 08:49:54 +0200 Subject: [PATCH 134/301] fix jrnl not working anymore --- Cargo.lock | 98 +++------------------- hosts/catbook-j/configuration.nix | 1 - programs/jrnl/Cargo.toml | 2 +- programs/jrnl/src/commands/list_entries.rs | 7 +- 4 files changed, 17 insertions(+), 91 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 83b54a2..9702d07 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -119,17 +119,6 @@ version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" -[[package]] -name = "atty" -version = "0.2.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8" -dependencies = [ - "hermit-abi 0.1.19", - "libc", - "winapi 0.3.9", -] - [[package]] name = "autocfg" version = "1.2.0" @@ -323,7 +312,7 @@ dependencies = [ "parking_lot", "signal-hook", "signal-hook-mio", - "winapi 0.3.9", + "winapi", ] [[package]] @@ -339,7 +328,7 @@ dependencies = [ "parking_lot", "signal-hook", "signal-hook-mio", - "winapi 0.3.9", + "winapi", ] [[package]] @@ -348,7 +337,7 @@ version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "acdd7c62a3665c7f6830a51635d9ac9b23ed385797f70a83bb8bafe9c572ab2b" dependencies = [ - "winapi 0.3.9", + "winapi", ] [[package]] @@ -541,15 +530,6 @@ version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" -[[package]] -name = "hermit-abi" -version = "0.1.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33" -dependencies = [ - "libc", -] - [[package]] name = "hermit-abi" version = "0.3.9" @@ -768,16 +748,6 @@ dependencies = [ "wasm-bindgen", ] -[[package]] -name = "kernel32-sys" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d" -dependencies = [ - "winapi 0.2.8", - "winapi-build", -] - [[package]] name = "lazy_static" version = "1.4.0" @@ -875,7 +845,7 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "80e04d1dcff3aae0704555fe5fee3bcfaf3d1fdf8a7e521d5b9d2b42acb52cec" dependencies = [ - "hermit-abi 0.3.9", + "hermit-abi", "libc", "wasi", "windows-sys 0.52.0", @@ -899,12 +869,6 @@ dependencies = [ "autocfg", ] -[[package]] -name = "numtoa" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8f8bdf33df195859076e54ab11ee78a1b208382d3a26ec40d142ffc1ecc49ef" - [[package]] name = "object" version = "0.36.4" @@ -950,7 +914,7 @@ checksum = "4c42a9226546d68acdd9c0a280d17ce19bfe27a46bf68784e4066115788d008e" dependencies = [ "cfg-if", "libc", - "redox_syscall 0.4.1", + "redox_syscall", "smallvec", "windows-targets 0.48.5", ] @@ -1140,15 +1104,6 @@ dependencies = [ "unicode-width", ] -[[package]] -name = "redox_syscall" -version = "0.2.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a" -dependencies = [ - "bitflags 1.3.2", -] - [[package]] name = "redox_syscall" version = "0.4.1" @@ -1158,12 +1113,6 @@ dependencies = [ "bitflags 1.3.2", ] -[[package]] -name = "redox_termios" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20145670ba436b55d91fc92d25e71160fbfbdd57831631c8d7d36377a476f1cb" - [[package]] name = "redox_users" version = "0.4.5" @@ -1539,33 +1488,18 @@ dependencies = [ [[package]] name = "temp-file" -version = "0.1.8" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f210bda61d003f311d95611d1b68361df8fe8e732c3609f945441bde881321d" - -[[package]] -name = "termion" -version = "1.5.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "077185e2eac69c3f8379a4298e1e07cd36beb962290d4a51199acf0fdc10607e" -dependencies = [ - "libc", - "numtoa", - "redox_syscall 0.2.16", - "redox_termios", -] +checksum = "b5ff282c3f91797f0acb021f3af7fffa8a78601f0f2fd0a9f79ee7dcf9a9af9e" [[package]] name = "termsize" -version = "0.1.6" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e86d824a8e90f342ad3ef4bd51ef7119a9b681b0cc9f8ee7b2852f02ccd2517" +checksum = "6f11ff5c25c172608d5b85e2fb43ee9a6d683a7f4ab7f96ae07b3d8b590368fd" dependencies = [ - "atty", - "kernel32-sys", "libc", - "termion", - "winapi 0.2.8", + "winapi", ] [[package]] @@ -1894,12 +1828,6 @@ dependencies = [ "rustls-pki-types", ] -[[package]] -name = "winapi" -version = "0.2.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a" - [[package]] name = "winapi" version = "0.3.9" @@ -1910,12 +1838,6 @@ dependencies = [ "winapi-x86_64-pc-windows-gnu", ] -[[package]] -name = "winapi-build" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc" - [[package]] name = "winapi-i686-pc-windows-gnu" version = "0.4.0" diff --git a/hosts/catbook-j/configuration.nix b/hosts/catbook-j/configuration.nix index 5ed71d5..14e2f64 100644 --- a/hosts/catbook-j/configuration.nix +++ b/hosts/catbook-j/configuration.nix @@ -43,7 +43,6 @@ environment.variables = { VDPAU_DRIVER = lib.mkIf config.hardware.graphics.enable (lib.mkDefault "va_gl"); - S10E_JRNL_FILE_LOC = "/home/jade/Docs/jrnl.md"; }; programs.wireshark.enable = true; diff --git a/programs/jrnl/Cargo.toml b/programs/jrnl/Cargo.toml index 8e3044a..83fe71c 100644 --- a/programs/jrnl/Cargo.toml +++ b/programs/jrnl/Cargo.toml @@ -14,5 +14,5 @@ owo-colors = "4.0.0" petgraph = "0.6.4" ratatui = "0.26.2" temp-file = "0.1.8" -termsize = "0.1.6" +termsize = "0.1.9" inquire = "0.7.5" diff --git a/programs/jrnl/src/commands/list_entries.rs b/programs/jrnl/src/commands/list_entries.rs index d488932..61ca763 100644 --- a/programs/jrnl/src/commands/list_entries.rs +++ b/programs/jrnl/src/commands/list_entries.rs @@ -7,13 +7,18 @@ pub fn list_entries(path: PathBuf) -> io::Result<()> { let file = fs::read_to_string(path)?; if let Some(doc) = Doc::new(&file) { + // TODO: testing, so this shit doesn't blow the fuck up in our face anymore let termsize::Size { cols, .. } = termsize::get().unwrap(); + assert!(cols > 0, "we don't have a terminal width."); + for (i, entry) in doc.entries.into_iter().enumerate() { let n = format!("{:>2}", i + 1); let r = format!(". {}", entry.title,); let l = format!(" {} ", crate::utils::format_datetime(entry.timestamp)); - let padding = " ".repeat(cols as usize - (n.len() + r.len() + l.len())); + let fuck_you_debugging = cols as usize - (n.len() + r.chars().count() + l.len()); + dbg!(fuck_you_debugging); + let padding = " ".repeat(fuck_you_debugging); println!("{}{r}{padding}{}", n.cyan(), l.white()) } From 6022a6e3308d1fc931fea08055066d9916631488 Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Fri, 11 Oct 2024 08:50:47 +0200 Subject: [PATCH 135/301] set log-format to multiline --- justfile | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/justfile b/justfile index 199a787..2585971 100644 --- a/justfile +++ b/justfile @@ -1,13 +1,13 @@ -upgrade: build +upgrade: update build test: - sudo nixos-rebuild test --flake . --impure + sudo nixos-rebuild test --flake . --impure --log-format multiline build: - sudo nixos-rebuild switch --flake . --impure --fast + sudo nixos-rebuild switch --flake . --impure --fast --log-format multiline update: - nix flake update --commit-lock-file + nix flake update --commit-lock-file --log-format multiline build-mac: - sudo nixos-rebuild switch --flake . --impure --override-input mac-brcm-fw path:/home/jade/mac-brcm-fw --fast + sudo nixos-rebuild switch --flake . --impure --override-input mac-brcm-fw path:/home/jade/mac-brcm-fw --fast --log-format multiline From 70145c2a6666d1706daaa091bcb846e63ce87d46 Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Fri, 11 Oct 2024 08:51:11 +0200 Subject: [PATCH 136/301] try fixing env stuff (again) --- modules/desktop/default.nix | 3 +++ modules/shell/helix.nix | 1 + 2 files changed, 4 insertions(+) diff --git a/modules/desktop/default.nix b/modules/desktop/default.nix index 711b538..56fb870 100644 --- a/modules/desktop/default.nix +++ b/modules/desktop/default.nix @@ -69,6 +69,9 @@ in }; home-manager.users.jade = {pkgs, ...}: { + home.sessionVariables = { + "S10E_JRNL_FILE_LOC" = "/home/jade/Docs/jrnl.md"; + }; programs.ssh = { controlMaster = "yes"; }; diff --git a/modules/shell/helix.nix b/modules/shell/helix.nix index c3c4ea9..6662cba 100644 --- a/modules/shell/helix.nix +++ b/modules/shell/helix.nix @@ -20,6 +20,7 @@ }; programs.helix = { enable = true; + defaultEditor = true; package = helix-inline-diags.outputs.packages."x86_64-linux".default; settings = { theme = "gruvbox"; From da38ff265d702cdf76c3f52676d76c3848f2ad51 Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Fri, 11 Oct 2024 08:51:35 +0200 Subject: [PATCH 137/301] update/fix nu stuff --- other/config.nu | 7 ------- 1 file changed, 7 deletions(-) diff --git a/other/config.nu b/other/config.nu index 8a95fc7..d9d74e3 100644 --- a/other/config.nu +++ b/other/config.nu @@ -232,7 +232,6 @@ $env.config = { } color_config: $dark_theme # if you want a more interesting theme, you can replace the empty record with `$dark_theme`, `$light_theme` or another custom record - use_grid_icons: true footer_mode: "25" # always, never, number_of_rows, auto float_precision: 2 # the precision for displaying floats in tables buffer_editor: "" # command that will be used to edit the current line buffer with ctrl+o, if unset fallback to $env.EDITOR and $env.VISUAL @@ -833,12 +832,6 @@ def start_zellij [] { # start_zellij -# plugin add nu_plugin_net -# plugin add nu_plugin_gstat -# plugin add nu_plugin_query -# plugin add nu_plugin_polars -# plugin add nu_plugin_formats - def nsp [ ...programs: string ] { From 8d34a32f246cc106f45c2c30550e8dc1eaadd267 Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Fri, 11 Oct 2024 08:52:24 +0200 Subject: [PATCH 138/301] add tabby cat --- modules/desktop/firefox.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/modules/desktop/firefox.nix b/modules/desktop/firefox.nix index 336b3d6..3efa52c 100644 --- a/modules/desktop/firefox.nix +++ b/modules/desktop/firefox.nix @@ -31,6 +31,7 @@ "youtube-mrbeastify" "return-youtube-dislikes" "multi-account-containers" + "tabby-cat-friend" ]; Extensions.Uninstall = [ "google@search.mozilla.org" From 8134abcf863e91aad83c8cf9b96975e812bce487 Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Fri, 11 Oct 2024 21:18:14 +0200 Subject: [PATCH 139/301] remove firefox stupid fucking llm bullshit --- modules/desktop/firefox.nix | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/modules/desktop/firefox.nix b/modules/desktop/firefox.nix index 3efa52c..bb559f6 100644 --- a/modules/desktop/firefox.nix +++ b/modules/desktop/firefox.nix @@ -229,6 +229,19 @@ "privacy.trackingprotection.enabled" = true; "privacy.trackingprotection.socialtracking.enabled" = true; + "browser.ml.chat.enabled" = false; + "browser.ml.chat.hideLocalhost" = false; + "browser.ml.chat.prompt.prefix" = ""; + "browser.ml.chat.prompts.0" = ""; + "browser.ml.chat.prompts.1" = ""; + "browser.ml.chat.prompts.2" = ""; + "browser.ml.chat.prompts.3" = ""; + "browser.ml.chat.provider" = ""; + "browser.ml.chat.shortcuts" = false; + "browser.ml.chat.shortcuts.custom" = false; + "browser.ml.chat.shortcuts.longPress" = ""; + "browser.ml.chat.sidebar" = false; + "geo.provider.network.logging.enabled" = true; "extensions.getAddons.showPane" = false; "extensions.htmlaboutaddons.recommendations.enabled" = false; From eb723ef18130be2c20ed48b5eb1a2d27e27fc7a2 Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Sat, 12 Oct 2024 20:07:48 +0200 Subject: [PATCH 140/301] flake.lock: Update MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Flake lock file updates: • Updated input 'fenix': 'github:nix-community/fenix/b135535125e24270dddddc8cfab455533492e4ad' (2024-10-10) → 'github:nix-community/fenix/ea96690b28eb5a859d28bcf02887a26e3854e4f3' (2024-10-12) • Updated input 'helix-inline-diags': 'github:helix-editor/helix/761f70d61179f38152e76c1f224589a53b62d00f' (2024-10-08) → 'github:helix-editor/helix/a7651f5bf027ec98645d571ab05a685d97e1b772' (2024-10-11) • Updated input 'home-manager': 'github:nix-community/home-manager/038630363e7de57c36c417fd2f5d7c14773403e4' (2024-10-07) → 'github:nix-community/home-manager/d57112db877f07387ce7104b5ac346ede556d2d7' (2024-10-12) • Updated input 'nixpkgs-unstable-small': 'github:NixOS/nixpkgs/6b955bdbb9efe4a5c047746323951fe1bdf8d01b' (2024-10-10) → 'github:NixOS/nixpkgs/162ee4189cf5c0449a642f3f5aa7566faac77476' (2024-10-12) --- flake.lock | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/flake.lock b/flake.lock index 6ca71bd..44fb045 100644 --- a/flake.lock +++ b/flake.lock @@ -23,11 +23,11 @@ "rust-analyzer-src": "rust-analyzer-src" }, "locked": { - "lastModified": 1728542061, - "narHash": "sha256-2YAnVU67qimQGO71rCBWcv7RrRK5gYgysXe3NVomuwQ=", + "lastModified": 1728714564, + "narHash": "sha256-CciuT/8HI/BR+y+W2/FyHRDpchbKQ9wA8ABJiio0CE8=", "owner": "nix-community", "repo": "fenix", - "rev": "b135535125e24270dddddc8cfab455533492e4ad", + "rev": "ea96690b28eb5a859d28bcf02887a26e3854e4f3", "type": "github" }, "original": { @@ -99,11 +99,11 @@ "rust-overlay": "rust-overlay" }, "locked": { - "lastModified": 1728372216, - "narHash": "sha256-amGNilpQ/vohlgerF/5D4QNsXCRbh2H06nmWyz/xyS8=", + "lastModified": 1728632301, + "narHash": "sha256-R20bJbGcjku/AZHZOkza1HLHRIA+6eCMrE+/fzjDToA=", "owner": "helix-editor", "repo": "helix", - "rev": "761f70d61179f38152e76c1f224589a53b62d00f", + "rev": "a7651f5bf027ec98645d571ab05a685d97e1b772", "type": "github" }, "original": { @@ -119,11 +119,11 @@ ] }, "locked": { - "lastModified": 1728337164, - "narHash": "sha256-VdRTjJFyq4Q9U7Z/UoC2Q5jK8vSo6E86lHc2OanXtvc=", + "lastModified": 1728726232, + "narHash": "sha256-8ZWr1HpciQsrFjvPMvZl0W+b0dilZOqXPoKa2Ux36bc=", "owner": "nix-community", "repo": "home-manager", - "rev": "038630363e7de57c36c417fd2f5d7c14773403e4", + "rev": "d57112db877f07387ce7104b5ac346ede556d2d7", "type": "github" }, "original": { @@ -230,11 +230,11 @@ }, "nixpkgs-unstable-small": { "locked": { - "lastModified": 1728534991, - "narHash": "sha256-wLUZyvtOOowAz0kTrU2MoC4nXWniFaVezGyzuEt5HPc=", + "lastModified": 1728709450, + "narHash": "sha256-QToJSkKLD7g9g2lSbqJ7D01uUv7Iv0+ToTUNQMU+r1o=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "6b955bdbb9efe4a5c047746323951fe1bdf8d01b", + "rev": "162ee4189cf5c0449a642f3f5aa7566faac77476", "type": "github" }, "original": { From b245efa86eab8cf749cd9c7a29c0fc305a4e5eed Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Mon, 14 Oct 2024 08:43:14 +0200 Subject: [PATCH 141/301] add java support --- modules/shell/helix.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/modules/shell/helix.nix b/modules/shell/helix.nix index 6662cba..f5c04dc 100644 --- a/modules/shell/helix.nix +++ b/modules/shell/helix.nix @@ -16,6 +16,7 @@ pkgs.nodePackages.typescript-language-server pkgs.emmet-language-server pkgs-stable.typst-lsp + pkgs.jdt-language-server ]; }; programs.helix = { From 65f16fd33c7db13ea5e53615b66bf4f5b9f25692 Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Tue, 22 Oct 2024 20:21:42 +0200 Subject: [PATCH 142/301] flake.lock: Update MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Flake lock file updates: • Updated input 'crane': 'github:ipetkov/crane/fd86b78f5f35f712c72147427b1eb81a9bd55d0b' (2024-10-07) → 'github:ipetkov/crane/fa8b7445ddadc37850ed222718ca86622be01967' (2024-10-18) • Updated input 'fenix': 'github:nix-community/fenix/ea96690b28eb5a859d28bcf02887a26e3854e4f3' (2024-10-12) → 'github:nix-community/fenix/d66cda53e8193a878742dcadb5bb75f4df7c3c0a' (2024-10-22) • Updated input 'fenix/rust-analyzer-src': 'github:rust-lang/rust-analyzer/0fb804acb375b02a3beeaceeb75b71969ef37b15' (2024-10-09) → 'github:rust-lang/rust-analyzer/de2ff17bc513807412d7bbaba1d995a774938583' (2024-10-21) • Updated input 'helix-inline-diags': 'github:helix-editor/helix/a7651f5bf027ec98645d571ab05a685d97e1b772' (2024-10-11) → 'github:helix-editor/helix/6d64e6288add793caf1c841ea295518414c04ea0' (2024-10-21) • Updated input 'helix-inline-diags/flake-utils': 'github:numtide/flake-utils/d465f4819400de7c8d874d50b982301f28a84605' (2024-02-28) → 'github:numtide/flake-utils/c1dfcf08411b08f6b8615f7d8971a2bfa81d5e8a' (2024-09-17) • Updated input 'helix-inline-diags/rust-overlay': 'github:oxalica/rust-overlay/e86c0fb5d3a22a5f30d7f64ecad88643fe26449d' (2024-03-05) → 'github:oxalica/rust-overlay/25685cc2c7054efc31351c172ae77b21814f2d42' (2024-10-07) • Removed input 'helix-inline-diags/rust-overlay/flake-utils' • Updated input 'home-manager': 'github:nix-community/home-manager/d57112db877f07387ce7104b5ac346ede556d2d7' (2024-10-12) → 'github:nix-community/home-manager/5ec753a1fc4454df9285d8b3ec0809234defb975' (2024-10-21) • Updated input 'nixpkgs': 'github:NixOS/nixpkgs/5633bcff0c6162b9e4b5f1264264611e950c8ec7' (2024-10-09) → 'github:NixOS/nixpkgs/1997e4aa514312c1af7e2bda7fad1644e778ff26' (2024-10-20) • Updated input 'nixpkgs-unstable-small': 'github:NixOS/nixpkgs/162ee4189cf5c0449a642f3f5aa7566faac77476' (2024-10-12) → 'github:NixOS/nixpkgs/29dccd64f527eebafce219e7ca2bfda5fee75456' (2024-10-22) --- flake.lock | 58 +++++++++++++++++++++++++----------------------------- 1 file changed, 27 insertions(+), 31 deletions(-) diff --git a/flake.lock b/flake.lock index 44fb045..b11db88 100644 --- a/flake.lock +++ b/flake.lock @@ -2,11 +2,11 @@ "nodes": { "crane": { "locked": { - "lastModified": 1728344376, - "narHash": "sha256-lxTce2XE6mfJH8Zk6yBbqsbu9/jpwdymbSH5cCbiVOA=", + "lastModified": 1729273024, + "narHash": "sha256-Mb5SemVsootkn4Q2IiY0rr9vrXdCCpQ9HnZeD/J3uXs=", "owner": "ipetkov", "repo": "crane", - "rev": "fd86b78f5f35f712c72147427b1eb81a9bd55d0b", + "rev": "fa8b7445ddadc37850ed222718ca86622be01967", "type": "github" }, "original": { @@ -23,11 +23,11 @@ "rust-analyzer-src": "rust-analyzer-src" }, "locked": { - "lastModified": 1728714564, - "narHash": "sha256-CciuT/8HI/BR+y+W2/FyHRDpchbKQ9wA8ABJiio0CE8=", + "lastModified": 1729578683, + "narHash": "sha256-h0Wmvrkadbyi3IJXFLPi+QyYjCAKDr2xQ6dLxlQ8cXY=", "owner": "nix-community", "repo": "fenix", - "rev": "ea96690b28eb5a859d28bcf02887a26e3854e4f3", + "rev": "d66cda53e8193a878742dcadb5bb75f4df7c3c0a", "type": "github" }, "original": { @@ -41,11 +41,11 @@ "systems": "systems" }, "locked": { - "lastModified": 1709126324, - "narHash": "sha256-q6EQdSeUZOG26WelxqkmR7kArjgWCdw5sfJVHPH/7j8=", + "lastModified": 1726560853, + "narHash": "sha256-X6rJYSESBVr3hBoH0WbKE5KvhPU5bloyZ2L4K60/fPQ=", "owner": "numtide", "repo": "flake-utils", - "rev": "d465f4819400de7c8d874d50b982301f28a84605", + "rev": "c1dfcf08411b08f6b8615f7d8971a2bfa81d5e8a", "type": "github" }, "original": { @@ -99,11 +99,11 @@ "rust-overlay": "rust-overlay" }, "locked": { - "lastModified": 1728632301, - "narHash": "sha256-R20bJbGcjku/AZHZOkza1HLHRIA+6eCMrE+/fzjDToA=", + "lastModified": 1729477666, + "narHash": "sha256-ri40XjKyZIMH5wBCFNa50dq5wTBPF5qH/NVDo+syhNM=", "owner": "helix-editor", "repo": "helix", - "rev": "a7651f5bf027ec98645d571ab05a685d97e1b772", + "rev": "6d64e6288add793caf1c841ea295518414c04ea0", "type": "github" }, "original": { @@ -119,11 +119,11 @@ ] }, "locked": { - "lastModified": 1728726232, - "narHash": "sha256-8ZWr1HpciQsrFjvPMvZl0W+b0dilZOqXPoKa2Ux36bc=", + "lastModified": 1729551526, + "narHash": "sha256-7LAGY32Xl14OVQp3y6M43/0AtHYYvV6pdyBcp3eoz0s=", "owner": "nix-community", "repo": "home-manager", - "rev": "d57112db877f07387ce7104b5ac346ede556d2d7", + "rev": "5ec753a1fc4454df9285d8b3ec0809234defb975", "type": "github" }, "original": { @@ -200,11 +200,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1728492678, - "narHash": "sha256-9UTxR8eukdg+XZeHgxW5hQA9fIKHsKCdOIUycTryeVw=", + "lastModified": 1729413321, + "narHash": "sha256-I4tuhRpZFa6Fu6dcH9Dlo5LlH17peT79vx1y1SpeKt0=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "5633bcff0c6162b9e4b5f1264264611e950c8ec7", + "rev": "1997e4aa514312c1af7e2bda7fad1644e778ff26", "type": "github" }, "original": { @@ -230,11 +230,11 @@ }, "nixpkgs-unstable-small": { "locked": { - "lastModified": 1728709450, - "narHash": "sha256-QToJSkKLD7g9g2lSbqJ7D01uUv7Iv0+ToTUNQMU+r1o=", + "lastModified": 1729577921, + "narHash": "sha256-bxktXyAj3818+okqwaR9L/F4UREnry0OEjnYqwYVdkc=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "162ee4189cf5c0449a642f3f5aa7566faac77476", + "rev": "29dccd64f527eebafce219e7ca2bfda5fee75456", "type": "github" }, "original": { @@ -260,11 +260,11 @@ "rust-analyzer-src": { "flake": false, "locked": { - "lastModified": 1728505432, - "narHash": "sha256-QFPMazeiGLo7AGy4RREmTgko0Quch/toMVKhGUjDEeo=", + "lastModified": 1729533545, + "narHash": "sha256-A/AuEWcGwwjpfBCZqWDNNg5GwYrJduzLvlMe+A7xG5U=", "owner": "rust-lang", "repo": "rust-analyzer", - "rev": "0fb804acb375b02a3beeaceeb75b71969ef37b15", + "rev": "de2ff17bc513807412d7bbaba1d995a774938583", "type": "github" }, "original": { @@ -276,21 +276,17 @@ }, "rust-overlay": { "inputs": { - "flake-utils": [ - "helix-inline-diags", - "flake-utils" - ], "nixpkgs": [ "helix-inline-diags", "nixpkgs" ] }, "locked": { - "lastModified": 1709604635, - "narHash": "sha256-le4fwmWmjGRYWwkho0Gr7mnnZndOOe4XGbLw68OvF40=", + "lastModified": 1728268235, + "narHash": "sha256-lJMFnMO4maJuNO6PQ5fZesrTmglze3UFTTBuKGwR1Nw=", "owner": "oxalica", "repo": "rust-overlay", - "rev": "e86c0fb5d3a22a5f30d7f64ecad88643fe26449d", + "rev": "25685cc2c7054efc31351c172ae77b21814f2d42", "type": "github" }, "original": { From 30f0f7ec204d4687551aae1f39761a432b2a5f5b Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Sun, 3 Nov 2024 19:46:36 +0100 Subject: [PATCH 143/301] setup uni java things --- common.nix | 5 +++-- hosts/monosodium-glutamate-g/configuration.nix | 2 ++ 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/common.nix b/common.nix index d011905..f0f5da1 100644 --- a/common.nix +++ b/common.nix @@ -56,8 +56,9 @@ with builtins; { iw btop nodejs - jdk8 - jdk11 + maven + jetbrains.idea-ultimate + jetbrains.rust-rover jdk libsecret fzf diff --git a/hosts/monosodium-glutamate-g/configuration.nix b/hosts/monosodium-glutamate-g/configuration.nix index 471c1a9..97881a3 100644 --- a/hosts/monosodium-glutamate-g/configuration.nix +++ b/hosts/monosodium-glutamate-g/configuration.nix @@ -61,6 +61,8 @@ zenmonitor tea blender-hip + jdk8 + jdk11 ]; programs = { wireshark.enable = true; From 6a706007c8d5b2dd3232fd85ed013c7cb85c065d Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Sun, 3 Nov 2024 19:48:04 +0100 Subject: [PATCH 144/301] fix suspension --- common.nix | 3 +++ modules/desktop-environment/home/sway/default.nix | 4 ++++ 2 files changed, 7 insertions(+) diff --git a/common.nix b/common.nix index f0f5da1..3a14546 100644 --- a/common.nix +++ b/common.nix @@ -56,10 +56,12 @@ with builtins; { iw btop nodejs + maven jetbrains.idea-ultimate jetbrains.rust-rover jdk + libsecret fzf ripgrep @@ -96,6 +98,7 @@ with builtins; { }; services = { + systemd-lock-handler.enable = true; openssh = { enable = true; # settings.PasswordAuthentication = false; diff --git a/modules/desktop-environment/home/sway/default.nix b/modules/desktop-environment/home/sway/default.nix index 2a2bee3..e93e9b7 100644 --- a/modules/desktop-environment/home/sway/default.nix +++ b/modules/desktop-environment/home/sway/default.nix @@ -20,6 +20,10 @@ services.swayidle = { enable = true; events = [ + { + event = "before-sleep"; + command = "${pkgs.swaylock}/bin/swaylock -fF -c 442244"; + } { event = "lock"; command = "swaylock -c 441144"; From f8492fc9e93f228781cef8d996ae18d09b66a8c2 Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Thu, 3 Oct 2024 01:32:42 +0200 Subject: [PATCH 145/301] desktop adjustments --- .../monosodium-glutamate-g/configuration.nix | 20 ++---------- .../hardware-configuration.nix | 32 +++++++++---------- .../modules/default.nix | 2 +- 3 files changed, 19 insertions(+), 35 deletions(-) diff --git a/hosts/monosodium-glutamate-g/configuration.nix b/hosts/monosodium-glutamate-g/configuration.nix index 97881a3..5c20795 100644 --- a/hosts/monosodium-glutamate-g/configuration.nix +++ b/hosts/monosodium-glutamate-g/configuration.nix @@ -82,23 +82,7 @@ # networking.firewall.allowedTCPPorts = [ 4713 ]; systemd.services."NetworkManager-wait-online".enable = false; - systemd.services = { - create-swapfile = { - serviceConfig.Type = "oneshot"; - wantedBy = ["swap-swapfile.swap"]; - script = '' - swapfile="/swap/swapfile" - if [[ -f "$swapfile" ]]; then - echo "Swap file $swapfile already exists, taking no action" - else - echo "Setting up swap file $swapfile" - ${pkgs.coreutils}/bin/truncate -s 0 "$swapfile" - ${pkgs.e2fsprogs}/bin/chattr +C "$swapfile" - fi - ''; - }; - }; + swapDevices = [{device = "/swap/swapfile";}]; - # release channel - system.stateVersion = "22.05"; # Did you read the comment? + system.stateVersion = "24.05"; # Did you read the comment? } diff --git a/hosts/monosodium-glutamate-g/hardware-configuration.nix b/hosts/monosodium-glutamate-g/hardware-configuration.nix index b04b33c..c414f70 100644 --- a/hosts/monosodium-glutamate-g/hardware-configuration.nix +++ b/hosts/monosodium-glutamate-g/hardware-configuration.nix @@ -12,34 +12,32 @@ (modulesPath + "/installer/scan/not-detected.nix") ]; - boot.initrd.availableKernelModules = ["nvme" "xhci_pci" "ahci" "usbhid" "usb_storage" "sd_mod"]; + boot.initrd.availableKernelModules = ["nvme" "xhci_pci" "ahci" "uas" "usbhid" "sd_mod"]; boot.initrd.kernelModules = []; boot.kernelModules = ["kvm-amd"]; boot.extraModulePackages = []; fileSystems."/" = { - device = "/dev/disk/by-uuid/72ffbc9d-a319-42d7-8d26-13c921a679db"; + device = "/dev/disk/by-uuid/efb8f256-5b14-4b52-a2d9-ae4b91ecb711"; fsType = "btrfs"; - options = ["subvol=@root" "compress=zstd:3"]; + options = ["subvol=@"]; }; - fileSystems."/home" = { - device = "/dev/disk/by-uuid/72ffbc9d-a319-42d7-8d26-13c921a679db"; - fsType = "btrfs"; - options = ["subvol=@home" "compress=zstd:3"]; - }; + boot.initrd.luks.devices."luks-919f9b8b-2804-447a-97e0-f7f515d0be56".device = "/dev/disk/by-uuid/919f9b8b-2804-447a-97e0-f7f515d0be56"; fileSystems."/boot" = { - device = "/dev/disk/by-uuid/D63E-18C9"; + device = "/dev/disk/by-uuid/3FAD-A6B4"; fsType = "vfat"; + options = ["fmask=0077" "dmask=0077"]; }; - swapDevices = [ - { - device = "/swap/swapfile"; - size = (1024 * 64) + (1024 * 8); # 72G - } - ]; + fileSystems."/swap" = { + device = "/dev/disk/by-uuid/efb8f256-5b14-4b52-a2d9-ae4b91ecb711"; + fsType = "btrfs"; + options = ["subvol=swap"]; + }; + + 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 @@ -47,7 +45,9 @@ # with explicit per-interface declarations with `networking.interfaces..useDHCP`. networking.useDHCP = lib.mkDefault true; # networking.interfaces.eno1.useDHCP = lib.mkDefault true; - # networking.interfaces.wlp9s0.useDHCP = lib.mkDefault true; + # networking.interfaces.wg0-mullvad.useDHCP = lib.mkDefault true; + # networking.interfaces.wlp6s0.useDHCP = lib.mkDefault true; + nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; hardware.cpu.amd.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; } diff --git a/hosts/monosodium-glutamate-g/modules/default.nix b/hosts/monosodium-glutamate-g/modules/default.nix index 213189f..fb1c643 100644 --- a/hosts/monosodium-glutamate-g/modules/default.nix +++ b/hosts/monosodium-glutamate-g/modules/default.nix @@ -1,4 +1,4 @@ -{}: { +{...}: { imports = [ ./graphics.nix ]; From a60a5613012c87752da7ed5d4702dba60dc5e8b7 Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Thu, 3 Oct 2024 01:52:00 +0200 Subject: [PATCH 146/301] obs virtualcam --- modules/desktop/default.nix | 1 + modules/desktop/obs.nix | 23 +++++++++++++++++++++++ 2 files changed, 24 insertions(+) create mode 100644 modules/desktop/obs.nix diff --git a/modules/desktop/default.nix b/modules/desktop/default.nix index 56fb870..63f0143 100644 --- a/modules/desktop/default.nix +++ b/modules/desktop/default.nix @@ -28,6 +28,7 @@ in ./fonts.nix ./firefox.nix ./x.nix + ./obs.nix ]; programs.seahorse.enable = true; diff --git a/modules/desktop/obs.nix b/modules/desktop/obs.nix new file mode 100644 index 0000000..921d67e --- /dev/null +++ b/modules/desktop/obs.nix @@ -0,0 +1,23 @@ +{ + pkgs, + config, + ... +}: { + environment.systemPackages = [ + (pkgs.wrapOBS { + plugins = with pkgs.obs-studio-plugins; [ + wlrobs + obs-backgroundremoval + obs-pipewire-audio-capture + ]; + }) + ]; + + boot.extraModulePackages = with config.boot.kernelPackages; [ + v4l2loopback + ]; + boot.extraModprobeConfig = '' + options v4l2loopback devices=1 video_nr=1 card_label="OBS Cam" exclusive_caps=1 + ''; + security.polkit.enable = true; +} From 854c8c8fb2f139ff534753780f8f2bdd4fd37a22 Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Thu, 3 Oct 2024 01:52:52 +0200 Subject: [PATCH 147/301] flake.lock: Update MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Flake lock file updates: • Updated input 'crane': 'github:ipetkov/crane/5b03654ce046b5167e7b0bccbd8244cb56c16f0e' (2024-09-26) → 'github:ipetkov/crane/a376dd1efac7bce448857c62961c6311be26cb09' (2024-10-01) • Updated input 'fenix': 'github:nix-community/fenix/a9d2e5fa8d77af05240230c9569bbbddd28ccfaf' (2024-10-01) → 'github:nix-community/fenix/b85dddb88366113db4616a64925a8b2a23854f98' (2024-10-02) • Updated input 'fenix/rust-analyzer-src': 'github:rust-lang/rust-analyzer/28830ff2f1158ee92f4852ef3ec35af0935d1562' (2024-09-30) → 'github:rust-lang/rust-analyzer/e1a76671af2fbc74c84c18ba18fcda5e653d7531' (2024-10-01) • Updated input 'home-manager': 'github:nix-community/home-manager/ffe2d07e771580a005e675108212597e5b367d2d' (2024-09-26) → 'github:nix-community/home-manager/437ec62009fa8ceb684eb447d455ffba25911cf9' (2024-10-01) • Updated input 'nixpkgs': 'github:NixOS/nixpkgs/06cf0e1da4208d3766d898b7fdab6513366d45b9' (2024-09-29) → 'github:NixOS/nixpkgs/27e30d177e57d912d614c88c622dcfdb2e6e6515' (2024-10-01) • Updated input 'nixpkgs-unstable-small': 'github:NixOS/nixpkgs/e277415cfed1a4c5bd96183e8ba51c60f046fe22' (2024-10-01) → 'github:NixOS/nixpkgs/35d02934a17a4fdc53a8857826ed35f3694e5f1c' (2024-10-02) --- flake.lock | 331 ----------------------------------------------------- 1 file changed, 331 deletions(-) delete mode 100644 flake.lock diff --git a/flake.lock b/flake.lock deleted file mode 100644 index b11db88..0000000 --- a/flake.lock +++ /dev/null @@ -1,331 +0,0 @@ -{ - "nodes": { - "crane": { - "locked": { - "lastModified": 1729273024, - "narHash": "sha256-Mb5SemVsootkn4Q2IiY0rr9vrXdCCpQ9HnZeD/J3uXs=", - "owner": "ipetkov", - "repo": "crane", - "rev": "fa8b7445ddadc37850ed222718ca86622be01967", - "type": "github" - }, - "original": { - "owner": "ipetkov", - "repo": "crane", - "type": "github" - } - }, - "fenix": { - "inputs": { - "nixpkgs": [ - "nixpkgs" - ], - "rust-analyzer-src": "rust-analyzer-src" - }, - "locked": { - "lastModified": 1729578683, - "narHash": "sha256-h0Wmvrkadbyi3IJXFLPi+QyYjCAKDr2xQ6dLxlQ8cXY=", - "owner": "nix-community", - "repo": "fenix", - "rev": "d66cda53e8193a878742dcadb5bb75f4df7c3c0a", - "type": "github" - }, - "original": { - "owner": "nix-community", - "repo": "fenix", - "type": "github" - } - }, - "flake-utils": { - "inputs": { - "systems": "systems" - }, - "locked": { - "lastModified": 1726560853, - "narHash": "sha256-X6rJYSESBVr3hBoH0WbKE5KvhPU5bloyZ2L4K60/fPQ=", - "owner": "numtide", - "repo": "flake-utils", - "rev": "c1dfcf08411b08f6b8615f7d8971a2bfa81d5e8a", - "type": "github" - }, - "original": { - "owner": "numtide", - "repo": "flake-utils", - "type": "github" - } - }, - "flake-utils_2": { - "inputs": { - "systems": "systems_2" - }, - "locked": { - "lastModified": 1726560853, - "narHash": "sha256-X6rJYSESBVr3hBoH0WbKE5KvhPU5bloyZ2L4K60/fPQ=", - "owner": "numtide", - "repo": "flake-utils", - "rev": "c1dfcf08411b08f6b8615f7d8971a2bfa81d5e8a", - "type": "github" - }, - "original": { - "owner": "numtide", - "repo": "flake-utils", - "type": "github" - } - }, - "flakey-profile": { - "locked": { - "lastModified": 1712898590, - "narHash": "sha256-FhGIEU93VHAChKEXx905TSiPZKga69bWl1VB37FK//I=", - "owner": "lf-", - "repo": "flakey-profile", - "rev": "243c903fd8eadc0f63d205665a92d4df91d42d9d", - "type": "github" - }, - "original": { - "owner": "lf-", - "repo": "flakey-profile", - "type": "github" - } - }, - "helix-inline-diags": { - "inputs": { - "crane": [ - "crane" - ], - "flake-utils": "flake-utils", - "nixpkgs": [ - "nixpkgs" - ], - "rust-overlay": "rust-overlay" - }, - "locked": { - "lastModified": 1729477666, - "narHash": "sha256-ri40XjKyZIMH5wBCFNa50dq5wTBPF5qH/NVDo+syhNM=", - "owner": "helix-editor", - "repo": "helix", - "rev": "6d64e6288add793caf1c841ea295518414c04ea0", - "type": "github" - }, - "original": { - "owner": "helix-editor", - "repo": "helix", - "type": "github" - } - }, - "home-manager": { - "inputs": { - "nixpkgs": [ - "nixpkgs" - ] - }, - "locked": { - "lastModified": 1729551526, - "narHash": "sha256-7LAGY32Xl14OVQp3y6M43/0AtHYYvV6pdyBcp3eoz0s=", - "owner": "nix-community", - "repo": "home-manager", - "rev": "5ec753a1fc4454df9285d8b3ec0809234defb975", - "type": "github" - }, - "original": { - "owner": "nix-community", - "repo": "home-manager", - "type": "github" - } - }, - "lix": { - "flake": false, - "locked": { - "lastModified": 1727712632, - "narHash": "sha256-7kaZRZCWG8PmxwIDTVKjJo3VtAGDun7mqfAMlucQbdQ=", - "rev": "a16ceb9411c57993d811c6bebb517742fe3d34e3", - "type": "tarball", - "url": "https://git.lix.systems/api/v1/repos/lix-project/lix/archive/a16ceb9411c57993d811c6bebb517742fe3d34e3.tar.gz?rev=a16ceb9411c57993d811c6bebb517742fe3d34e3" - }, - "original": { - "type": "tarball", - "url": "https://git.lix.systems/lix-project/lix/archive/main.tar.gz" - } - }, - "lix-module": { - "inputs": { - "flake-utils": "flake-utils_2", - "flakey-profile": "flakey-profile", - "lix": "lix", - "nixpkgs": [ - "nixpkgs" - ] - }, - "locked": { - "lastModified": 1727752861, - "narHash": "sha256-jowmo2aEzrEpPSM96IWtajuogdJm7DjAWxFTEb7Ct0s=", - "ref": "refs/heads/main", - "rev": "fd186f535a4ac7ae35d98c1dd5d79f0a81b7976d", - "revCount": 116, - "type": "git", - "url": "https://git.lix.systems/lix-project/nixos-module" - }, - "original": { - "type": "git", - "url": "https://git.lix.systems/lix-project/nixos-module" - } - }, - "mac-brcm-fw": { - "flake": false, - "locked": { - "lastModified": 1709065070, - "narHash": "sha256-+kW8ogc6DykjMVlrr+3vWKs9ZUdJ9EW72LbY7k/Qvh4=", - "path": "/home/jade/nix-configs/mac-brcm-fw", - "type": "path" - }, - "original": { - "path": "/home/jade/nix-configs/mac-brcm-fw", - "type": "path" - } - }, - "nixos-hardware": { - "locked": { - "lastModified": 1687903496, - "narHash": "sha256-4PPwbFM4dNqso3zBya5rgfRvnBoIbN2J7qZ2ZpRyOUc=", - "owner": "networkException", - "repo": "nixos-hardware", - "rev": "8e28b9ee431b265d1fc74b8b819ea0816344c4a1", - "type": "github" - }, - "original": { - "owner": "networkException", - "ref": "apple-t2-init", - "repo": "nixos-hardware", - "type": "github" - } - }, - "nixpkgs": { - "locked": { - "lastModified": 1729413321, - "narHash": "sha256-I4tuhRpZFa6Fu6dcH9Dlo5LlH17peT79vx1y1SpeKt0=", - "owner": "NixOS", - "repo": "nixpkgs", - "rev": "1997e4aa514312c1af7e2bda7fad1644e778ff26", - "type": "github" - }, - "original": { - "id": "nixpkgs", - "ref": "nixos-unstable", - "type": "indirect" - } - }, - "nixpkgs-stable": { - "locked": { - "lastModified": 1720535198, - "narHash": "sha256-zwVvxrdIzralnSbcpghA92tWu2DV2lwv89xZc8MTrbg=", - "owner": "NixOS", - "repo": "nixpkgs", - "rev": "205fd4226592cc83fd4c0885a3e4c9c400efabb5", - "type": "github" - }, - "original": { - "id": "nixpkgs", - "ref": "nixos-23.11", - "type": "indirect" - } - }, - "nixpkgs-unstable-small": { - "locked": { - "lastModified": 1729577921, - "narHash": "sha256-bxktXyAj3818+okqwaR9L/F4UREnry0OEjnYqwYVdkc=", - "owner": "NixOS", - "repo": "nixpkgs", - "rev": "29dccd64f527eebafce219e7ca2bfda5fee75456", - "type": "github" - }, - "original": { - "id": "nixpkgs", - "ref": "nixos-unstable-small", - "type": "indirect" - } - }, - "root": { - "inputs": { - "crane": "crane", - "fenix": "fenix", - "helix-inline-diags": "helix-inline-diags", - "home-manager": "home-manager", - "lix-module": "lix-module", - "mac-brcm-fw": "mac-brcm-fw", - "nixos-hardware": "nixos-hardware", - "nixpkgs": "nixpkgs", - "nixpkgs-stable": "nixpkgs-stable", - "nixpkgs-unstable-small": "nixpkgs-unstable-small" - } - }, - "rust-analyzer-src": { - "flake": false, - "locked": { - "lastModified": 1729533545, - "narHash": "sha256-A/AuEWcGwwjpfBCZqWDNNg5GwYrJduzLvlMe+A7xG5U=", - "owner": "rust-lang", - "repo": "rust-analyzer", - "rev": "de2ff17bc513807412d7bbaba1d995a774938583", - "type": "github" - }, - "original": { - "owner": "rust-lang", - "ref": "nightly", - "repo": "rust-analyzer", - "type": "github" - } - }, - "rust-overlay": { - "inputs": { - "nixpkgs": [ - "helix-inline-diags", - "nixpkgs" - ] - }, - "locked": { - "lastModified": 1728268235, - "narHash": "sha256-lJMFnMO4maJuNO6PQ5fZesrTmglze3UFTTBuKGwR1Nw=", - "owner": "oxalica", - "repo": "rust-overlay", - "rev": "25685cc2c7054efc31351c172ae77b21814f2d42", - "type": "github" - }, - "original": { - "owner": "oxalica", - "repo": "rust-overlay", - "type": "github" - } - }, - "systems": { - "locked": { - "lastModified": 1681028828, - "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", - "owner": "nix-systems", - "repo": "default", - "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", - "type": "github" - }, - "original": { - "owner": "nix-systems", - "repo": "default", - "type": "github" - } - }, - "systems_2": { - "locked": { - "lastModified": 1681028828, - "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", - "owner": "nix-systems", - "repo": "default", - "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", - "type": "github" - }, - "original": { - "owner": "nix-systems", - "repo": "default", - "type": "github" - } - } - }, - "root": "root", - "version": 7 -} From 81cf7bb89e1c9441732b9ed947b0d20612db297e Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Sat, 9 Nov 2024 23:27:47 +0100 Subject: [PATCH 148/301] add some software --- common.nix | 3 +++ 1 file changed, 3 insertions(+) diff --git a/common.nix b/common.nix index 3a14546..781f311 100644 --- a/common.nix +++ b/common.nix @@ -42,6 +42,9 @@ with builtins; { environment = { systemPackages = with pkgs; [ + overskride + pulsemixer + htmlq prusa-slicer From efcf81af5f9bb68dc3648afa3ab6fd790336e4b2 Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Sat, 9 Nov 2024 23:30:51 +0100 Subject: [PATCH 149/301] flake.lock: Add MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Flake lock file updates: • Added input 'crane': 'github:ipetkov/crane/ef80ead953c1b28316cc3f8613904edc2eb90c28' (2024-11-08) • Added input 'fenix': 'github:nix-community/fenix/87e4581cdfecbac602220fe76c67b37d2d1ee995' (2024-11-09) • Added input 'fenix/nixpkgs': follows 'nixpkgs' • Added input 'fenix/rust-analyzer-src': 'github:rust-lang/rust-analyzer/dd9cd22514cb1001a0a2374b36a85eb75245f27b' (2024-11-08) • Added input 'helix-inline-diags': 'github:helix-editor/helix/b53dafe326d51b7f64a1c52379e3d4150cd2991e' (2024-11-05) • Added input 'helix-inline-diags/crane': follows 'crane' • Added input 'helix-inline-diags/flake-utils': 'github:numtide/flake-utils/c1dfcf08411b08f6b8615f7d8971a2bfa81d5e8a' (2024-09-17) • Added input 'helix-inline-diags/flake-utils/systems': 'github:nix-systems/default/da67096a3b9bf56a91d16901293e51ba5b49a27e' (2023-04-09) • Added input 'helix-inline-diags/nixpkgs': follows 'nixpkgs' • Added input 'helix-inline-diags/rust-overlay': 'github:oxalica/rust-overlay/25685cc2c7054efc31351c172ae77b21814f2d42' (2024-10-07) • Added input 'helix-inline-diags/rust-overlay/nixpkgs': follows 'helix-inline-diags/nixpkgs' • Added input 'home-manager': 'github:nix-community/home-manager/2f607e07f3ac7e53541120536708e824acccfaa8' (2024-11-05) • Added input 'home-manager/nixpkgs': follows 'nixpkgs' • Added input 'lix-module': 'git+https://git.lix.systems/lix-project/nixos-module?ref=refs/heads/main&rev=691193879d96bdfd1e6ab5ebcca2fadc7604cf34' (2024-11-09) • Added input 'lix-module/flake-utils': 'github:numtide/flake-utils/c1dfcf08411b08f6b8615f7d8971a2bfa81d5e8a' (2024-09-17) • Added input 'lix-module/flake-utils/systems': 'github:nix-systems/default/da67096a3b9bf56a91d16901293e51ba5b49a27e' (2023-04-09) • Added input 'lix-module/flakey-profile': 'github:lf-/flakey-profile/243c903fd8eadc0f63d205665a92d4df91d42d9d' (2024-04-12) • Added input 'lix-module/lix': 'https://git.lix.systems/api/v1/repos/lix-project/lix/archive/b967f1d5fe9d1bf58e6159e9b426c5b341489397.tar.gz?narHash=sha256-WnT6MpgrMKgqV2Rs%2BMfU88%2BKO%2B/njELPOtGoNhoX2oA%3D&rev=b967f1d5fe9d1bf58e6159e9b426c5b341489397' (2024-11-09) • Added input 'lix-module/nixpkgs': follows 'nixpkgs' • Added input 'mac-brcm-fw': 'path:/home/jade/nix-configs/mac-brcm-fw?lastModified=1727366922&narHash=sha256-%2BkW8ogc6DykjMVlrr%2B3vWKs9ZUdJ9EW72LbY7k/Qvh4%3D' (2024-09-26) • Added input 'nixos-hardware': 'github:networkException/nixos-hardware/8e28b9ee431b265d1fc74b8b819ea0816344c4a1' (2023-06-27) • Added input 'nixpkgs': 'github:NixOS/nixpkgs/4aa36568d413aca0ea84a1684d2d46f55dbabad7' (2024-11-05) • Added input 'nixpkgs-stable': 'github:NixOS/nixpkgs/205fd4226592cc83fd4c0885a3e4c9c400efabb5' (2024-07-09) • Added input 'nixpkgs-unstable-small': 'github:NixOS/nixpkgs/4a2c7def574d031cbf3d7110969f2ca5f38f8ed7' (2024-11-09) --- flake.lock | 331 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 331 insertions(+) create mode 100644 flake.lock diff --git a/flake.lock b/flake.lock new file mode 100644 index 0000000..08d4a52 --- /dev/null +++ b/flake.lock @@ -0,0 +1,331 @@ +{ + "nodes": { + "crane": { + "locked": { + "lastModified": 1731098351, + "narHash": "sha256-HQkYvKvaLQqNa10KEFGgWHfMAbWBfFp+4cAgkut+NNE=", + "owner": "ipetkov", + "repo": "crane", + "rev": "ef80ead953c1b28316cc3f8613904edc2eb90c28", + "type": "github" + }, + "original": { + "owner": "ipetkov", + "repo": "crane", + "type": "github" + } + }, + "fenix": { + "inputs": { + "nixpkgs": [ + "nixpkgs" + ], + "rust-analyzer-src": "rust-analyzer-src" + }, + "locked": { + "lastModified": 1731133750, + "narHash": "sha256-gZ3m8e176ai+akwiayg7Mve73rcUCD0+l6OMMFhGEYI=", + "owner": "nix-community", + "repo": "fenix", + "rev": "87e4581cdfecbac602220fe76c67b37d2d1ee995", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "fenix", + "type": "github" + } + }, + "flake-utils": { + "inputs": { + "systems": "systems" + }, + "locked": { + "lastModified": 1726560853, + "narHash": "sha256-X6rJYSESBVr3hBoH0WbKE5KvhPU5bloyZ2L4K60/fPQ=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "c1dfcf08411b08f6b8615f7d8971a2bfa81d5e8a", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_2": { + "inputs": { + "systems": "systems_2" + }, + "locked": { + "lastModified": 1726560853, + "narHash": "sha256-X6rJYSESBVr3hBoH0WbKE5KvhPU5bloyZ2L4K60/fPQ=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "c1dfcf08411b08f6b8615f7d8971a2bfa81d5e8a", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flakey-profile": { + "locked": { + "lastModified": 1712898590, + "narHash": "sha256-FhGIEU93VHAChKEXx905TSiPZKga69bWl1VB37FK//I=", + "owner": "lf-", + "repo": "flakey-profile", + "rev": "243c903fd8eadc0f63d205665a92d4df91d42d9d", + "type": "github" + }, + "original": { + "owner": "lf-", + "repo": "flakey-profile", + "type": "github" + } + }, + "helix-inline-diags": { + "inputs": { + "crane": [ + "crane" + ], + "flake-utils": "flake-utils", + "nixpkgs": [ + "nixpkgs" + ], + "rust-overlay": "rust-overlay" + }, + "locked": { + "lastModified": 1730790589, + "narHash": "sha256-xJ6bQ4VmdTB7A+dMbmOMaZ8a6erB6rkZkB+yzqD7gd4=", + "owner": "helix-editor", + "repo": "helix", + "rev": "b53dafe326d51b7f64a1c52379e3d4150cd2991e", + "type": "github" + }, + "original": { + "owner": "helix-editor", + "repo": "helix", + "type": "github" + } + }, + "home-manager": { + "inputs": { + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1730837930, + "narHash": "sha256-0kZL4m+bKBJUBQse0HanewWO0g8hDdCvBhudzxgehqc=", + "owner": "nix-community", + "repo": "home-manager", + "rev": "2f607e07f3ac7e53541120536708e824acccfaa8", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "home-manager", + "type": "github" + } + }, + "lix": { + "flake": false, + "locked": { + "lastModified": 1731164513, + "narHash": "sha256-WnT6MpgrMKgqV2Rs+MfU88+KO+/njELPOtGoNhoX2oA=", + "rev": "b967f1d5fe9d1bf58e6159e9b426c5b341489397", + "type": "tarball", + "url": "https://git.lix.systems/api/v1/repos/lix-project/lix/archive/b967f1d5fe9d1bf58e6159e9b426c5b341489397.tar.gz?rev=b967f1d5fe9d1bf58e6159e9b426c5b341489397" + }, + "original": { + "type": "tarball", + "url": "https://git.lix.systems/lix-project/lix/archive/main.tar.gz" + } + }, + "lix-module": { + "inputs": { + "flake-utils": "flake-utils_2", + "flakey-profile": "flakey-profile", + "lix": "lix", + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1731185731, + "narHash": "sha256-RNaIu43b9PoXEhW4OqXUNZKY/jezQyCYWwdv1M0VjsA=", + "ref": "refs/heads/main", + "rev": "691193879d96bdfd1e6ab5ebcca2fadc7604cf34", + "revCount": 117, + "type": "git", + "url": "https://git.lix.systems/lix-project/nixos-module" + }, + "original": { + "type": "git", + "url": "https://git.lix.systems/lix-project/nixos-module" + } + }, + "mac-brcm-fw": { + "flake": false, + "locked": { + "lastModified": 1727366922, + "narHash": "sha256-+kW8ogc6DykjMVlrr+3vWKs9ZUdJ9EW72LbY7k/Qvh4=", + "path": "/home/jade/nix-configs/mac-brcm-fw", + "type": "path" + }, + "original": { + "path": "/home/jade/nix-configs/mac-brcm-fw", + "type": "path" + } + }, + "nixos-hardware": { + "locked": { + "lastModified": 1687903496, + "narHash": "sha256-4PPwbFM4dNqso3zBya5rgfRvnBoIbN2J7qZ2ZpRyOUc=", + "owner": "networkException", + "repo": "nixos-hardware", + "rev": "8e28b9ee431b265d1fc74b8b819ea0816344c4a1", + "type": "github" + }, + "original": { + "owner": "networkException", + "ref": "apple-t2-init", + "repo": "nixos-hardware", + "type": "github" + } + }, + "nixpkgs": { + "locked": { + "lastModified": 1730785428, + "narHash": "sha256-Zwl8YgTVJTEum+L+0zVAWvXAGbWAuXHax3KzuejaDyo=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "4aa36568d413aca0ea84a1684d2d46f55dbabad7", + "type": "github" + }, + "original": { + "id": "nixpkgs", + "ref": "nixos-unstable", + "type": "indirect" + } + }, + "nixpkgs-stable": { + "locked": { + "lastModified": 1720535198, + "narHash": "sha256-zwVvxrdIzralnSbcpghA92tWu2DV2lwv89xZc8MTrbg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "205fd4226592cc83fd4c0885a3e4c9c400efabb5", + "type": "github" + }, + "original": { + "id": "nixpkgs", + "ref": "nixos-23.11", + "type": "indirect" + } + }, + "nixpkgs-unstable-small": { + "locked": { + "lastModified": 1731136819, + "narHash": "sha256-qGmBFnq3/9AiiLZUOVxDsU5j6ysL3PXA8KRp7muJWMs=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "4a2c7def574d031cbf3d7110969f2ca5f38f8ed7", + "type": "github" + }, + "original": { + "id": "nixpkgs", + "ref": "nixos-unstable-small", + "type": "indirect" + } + }, + "root": { + "inputs": { + "crane": "crane", + "fenix": "fenix", + "helix-inline-diags": "helix-inline-diags", + "home-manager": "home-manager", + "lix-module": "lix-module", + "mac-brcm-fw": "mac-brcm-fw", + "nixos-hardware": "nixos-hardware", + "nixpkgs": "nixpkgs", + "nixpkgs-stable": "nixpkgs-stable", + "nixpkgs-unstable-small": "nixpkgs-unstable-small" + } + }, + "rust-analyzer-src": { + "flake": false, + "locked": { + "lastModified": 1731056261, + "narHash": "sha256-TPeXChHVcaCBAoE349K7OZH4We5/2ys1GgG4IiwjwOs=", + "owner": "rust-lang", + "repo": "rust-analyzer", + "rev": "dd9cd22514cb1001a0a2374b36a85eb75245f27b", + "type": "github" + }, + "original": { + "owner": "rust-lang", + "ref": "nightly", + "repo": "rust-analyzer", + "type": "github" + } + }, + "rust-overlay": { + "inputs": { + "nixpkgs": [ + "helix-inline-diags", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1728268235, + "narHash": "sha256-lJMFnMO4maJuNO6PQ5fZesrTmglze3UFTTBuKGwR1Nw=", + "owner": "oxalica", + "repo": "rust-overlay", + "rev": "25685cc2c7054efc31351c172ae77b21814f2d42", + "type": "github" + }, + "original": { + "owner": "oxalica", + "repo": "rust-overlay", + "type": "github" + } + }, + "systems": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + }, + "systems_2": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + } + }, + "root": "root", + "version": 7 +} From 8496ca234d4f6bd5c0ffc73c1bb8db151298d87f Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Sun, 3 Nov 2024 19:55:04 +0100 Subject: [PATCH 150/301] disable jxl bc it doesn't work anyway :( --- modules/desktop/firefox.nix | 1 - 1 file changed, 1 deletion(-) diff --git a/modules/desktop/firefox.nix b/modules/desktop/firefox.nix index bb559f6..9cfc37a 100644 --- a/modules/desktop/firefox.nix +++ b/modules/desktop/firefox.nix @@ -204,7 +204,6 @@ "devtools.toolbox.host" = "right"; "devtools.theme" = "dark"; "webgl.disabled" = false; - "image.jxl.enabled" = true; "browser.urlbar.decodeURLsOnCopy" = true; "browser.urlbar.unitConversion.enabled" = true; "browser.urlbar.suggest.calculator" = true; From 7dde1e7c7739860a4a4722843b1cf20a35912487 Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Sun, 3 Nov 2024 19:55:46 +0100 Subject: [PATCH 151/301] remove smartd x11 notifications bc we dont use x11 anymore --- modules/desktop/default.nix | 1 - 1 file changed, 1 deletion(-) diff --git a/modules/desktop/default.nix b/modules/desktop/default.nix index 63f0143..94249e1 100644 --- a/modules/desktop/default.nix +++ b/modules/desktop/default.nix @@ -65,7 +65,6 @@ in }; services.smartd = { enable = true; - notifications.x11.enable = true; notifications.test = true; }; From 7f72323bc2ebdfee97d073ea6870c376d03d2795 Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Mon, 11 Nov 2024 11:39:32 +0100 Subject: [PATCH 152/301] flake.lock: Add MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Flake lock file updates: • Added input 'crane': 'github:ipetkov/crane/ef80ead953c1b28316cc3f8613904edc2eb90c28' (2024-11-08) • Added input 'fenix': 'github:nix-community/fenix/b7206c170fa6b4695eb8211e10fdd0be0de9a248' (2024-11-11) • Added input 'fenix/nixpkgs': follows 'nixpkgs' • Added input 'fenix/rust-analyzer-src': 'github:rust-lang/rust-analyzer/30e71b609b493897ed81f4fec95eb75d903820c9' (2024-11-10) • Added input 'helix-inline-diags': 'github:helix-editor/helix/10c3502a89d51e2d074d0d2ca62f85241d6e8c0f' (2024-11-11) • Added input 'helix-inline-diags/crane': follows 'crane' • Added input 'helix-inline-diags/flake-utils': 'github:numtide/flake-utils/c1dfcf08411b08f6b8615f7d8971a2bfa81d5e8a' (2024-09-17) • Added input 'helix-inline-diags/flake-utils/systems': 'github:nix-systems/default/da67096a3b9bf56a91d16901293e51ba5b49a27e' (2023-04-09) • Added input 'helix-inline-diags/nixpkgs': follows 'nixpkgs' • Added input 'helix-inline-diags/rust-overlay': 'github:oxalica/rust-overlay/25685cc2c7054efc31351c172ae77b21814f2d42' (2024-10-07) • Added input 'helix-inline-diags/rust-overlay/nixpkgs': follows 'helix-inline-diags/nixpkgs' • Added input 'home-manager': 'github:nix-community/home-manager/60bb110917844d354f3c18e05450606a435d2d10' (2024-11-10) • Added input 'home-manager/nixpkgs': follows 'nixpkgs' • Added input 'lix-module': 'git+https://git.lix.systems/lix-project/nixos-module?ref=refs/heads/main&rev=691193879d96bdfd1e6ab5ebcca2fadc7604cf34' (2024-11-09) • Added input 'lix-module/flake-utils': 'github:numtide/flake-utils/c1dfcf08411b08f6b8615f7d8971a2bfa81d5e8a' (2024-09-17) • Added input 'lix-module/flake-utils/systems': 'github:nix-systems/default/da67096a3b9bf56a91d16901293e51ba5b49a27e' (2023-04-09) • Added input 'lix-module/flakey-profile': 'github:lf-/flakey-profile/243c903fd8eadc0f63d205665a92d4df91d42d9d' (2024-04-12) • Added input 'lix-module/lix': 'https://git.lix.systems/api/v1/repos/lix-project/lix/archive/b967f1d5fe9d1bf58e6159e9b426c5b341489397.tar.gz?narHash=sha256-WnT6MpgrMKgqV2Rs%2BMfU88%2BKO%2B/njELPOtGoNhoX2oA%3D&rev=b967f1d5fe9d1bf58e6159e9b426c5b341489397' (2024-11-09) • Added input 'lix-module/nixpkgs': follows 'nixpkgs' • Added input 'mac-brcm-fw': 'path:/home/jade/nix-configs/mac-brcm-fw?lastModified=1709065070&narHash=sha256-%2BkW8ogc6DykjMVlrr%2B3vWKs9ZUdJ9EW72LbY7k/Qvh4%3D' (2024-02-27) • Added input 'nixos-hardware': 'github:networkException/nixos-hardware/8e28b9ee431b265d1fc74b8b819ea0816344c4a1' (2023-06-27) • Added input 'nixpkgs': 'github:NixOS/nixpkgs/76612b17c0ce71689921ca12d9ffdc9c23ce40b2' (2024-11-09) • Added input 'nixpkgs-stable': 'github:NixOS/nixpkgs/205fd4226592cc83fd4c0885a3e4c9c400efabb5' (2024-07-09) • Added input 'nixpkgs-unstable-small': 'github:NixOS/nixpkgs/3f42f0b61e6c45ca80d87cec5dd11e121d6b9c14' (2024-11-11) --- flake.lock | 38 +++++++++++++++++++------------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/flake.lock b/flake.lock index 08d4a52..0c41d4d 100644 --- a/flake.lock +++ b/flake.lock @@ -23,11 +23,11 @@ "rust-analyzer-src": "rust-analyzer-src" }, "locked": { - "lastModified": 1731133750, - "narHash": "sha256-gZ3m8e176ai+akwiayg7Mve73rcUCD0+l6OMMFhGEYI=", + "lastModified": 1731306807, + "narHash": "sha256-Z8r5l7GdIPt3sP9D3mZSiAdpLc75/ohmtLheG/Lo44w=", "owner": "nix-community", "repo": "fenix", - "rev": "87e4581cdfecbac602220fe76c67b37d2d1ee995", + "rev": "b7206c170fa6b4695eb8211e10fdd0be0de9a248", "type": "github" }, "original": { @@ -99,11 +99,11 @@ "rust-overlay": "rust-overlay" }, "locked": { - "lastModified": 1730790589, - "narHash": "sha256-xJ6bQ4VmdTB7A+dMbmOMaZ8a6erB6rkZkB+yzqD7gd4=", + "lastModified": 1731295855, + "narHash": "sha256-PpkEexKnFxd72Z+bRnZqYmaSlNF0ztOIjY+aa/5PKak=", "owner": "helix-editor", "repo": "helix", - "rev": "b53dafe326d51b7f64a1c52379e3d4150cd2991e", + "rev": "10c3502a89d51e2d074d0d2ca62f85241d6e8c0f", "type": "github" }, "original": { @@ -119,11 +119,11 @@ ] }, "locked": { - "lastModified": 1730837930, - "narHash": "sha256-0kZL4m+bKBJUBQse0HanewWO0g8hDdCvBhudzxgehqc=", + "lastModified": 1731235328, + "narHash": "sha256-NjavpgE9/bMe/ABvZpyHIUeYF1mqR5lhaep3wB79ucs=", "owner": "nix-community", "repo": "home-manager", - "rev": "2f607e07f3ac7e53541120536708e824acccfaa8", + "rev": "60bb110917844d354f3c18e05450606a435d2d10", "type": "github" }, "original": { @@ -172,7 +172,7 @@ "mac-brcm-fw": { "flake": false, "locked": { - "lastModified": 1727366922, + "lastModified": 1709065070, "narHash": "sha256-+kW8ogc6DykjMVlrr+3vWKs9ZUdJ9EW72LbY7k/Qvh4=", "path": "/home/jade/nix-configs/mac-brcm-fw", "type": "path" @@ -200,11 +200,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1730785428, - "narHash": "sha256-Zwl8YgTVJTEum+L+0zVAWvXAGbWAuXHax3KzuejaDyo=", + "lastModified": 1731139594, + "narHash": "sha256-IigrKK3vYRpUu+HEjPL/phrfh7Ox881er1UEsZvw9Q4=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "4aa36568d413aca0ea84a1684d2d46f55dbabad7", + "rev": "76612b17c0ce71689921ca12d9ffdc9c23ce40b2", "type": "github" }, "original": { @@ -230,11 +230,11 @@ }, "nixpkgs-unstable-small": { "locked": { - "lastModified": 1731136819, - "narHash": "sha256-qGmBFnq3/9AiiLZUOVxDsU5j6ysL3PXA8KRp7muJWMs=", + "lastModified": 1731300529, + "narHash": "sha256-PwzToM8oltfO3GlHpo3hIqmhPZwTbwkdnMIe4NpaN4g=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "4a2c7def574d031cbf3d7110969f2ca5f38f8ed7", + "rev": "3f42f0b61e6c45ca80d87cec5dd11e121d6b9c14", "type": "github" }, "original": { @@ -260,11 +260,11 @@ "rust-analyzer-src": { "flake": false, "locked": { - "lastModified": 1731056261, - "narHash": "sha256-TPeXChHVcaCBAoE349K7OZH4We5/2ys1GgG4IiwjwOs=", + "lastModified": 1731264417, + "narHash": "sha256-TDI1s2Sc/rpMLwful1NcTjYBbqzbQ4Mjw5PPOuOXVfg=", "owner": "rust-lang", "repo": "rust-analyzer", - "rev": "dd9cd22514cb1001a0a2374b36a85eb75245f27b", + "rev": "30e71b609b493897ed81f4fec95eb75d903820c9", "type": "github" }, "original": { From e65b60c50e377384bc51f370fd2aee632b4d0c8d Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Fri, 15 Nov 2024 09:40:44 +0100 Subject: [PATCH 153/301] jrnl: remove debug stuff --- programs/jrnl/src/commands/list_entries.rs | 2 -- 1 file changed, 2 deletions(-) diff --git a/programs/jrnl/src/commands/list_entries.rs b/programs/jrnl/src/commands/list_entries.rs index 61ca763..2519394 100644 --- a/programs/jrnl/src/commands/list_entries.rs +++ b/programs/jrnl/src/commands/list_entries.rs @@ -17,12 +17,10 @@ pub fn list_entries(path: PathBuf) -> io::Result<()> { let l = format!(" {} ", crate::utils::format_datetime(entry.timestamp)); let fuck_you_debugging = cols as usize - (n.len() + r.chars().count() + l.len()); - dbg!(fuck_you_debugging); let padding = " ".repeat(fuck_you_debugging); println!("{}{r}{padding}{}", n.cyan(), l.white()) } - println!("d"); Ok(()) } else { eprintln!("Parsing error..."); From 7d1462d8395a81ad5d7274cfc7ff74667f996283 Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Fri, 15 Nov 2024 09:43:55 +0100 Subject: [PATCH 154/301] flake.lock: Update MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Flake lock file updates: • Updated input 'fenix': 'github:nix-community/fenix/b7206c170fa6b4695eb8211e10fdd0be0de9a248' (2024-11-11) → 'github:nix-community/fenix/664e2f335aa5ae28c8759ff206444edb198dc1c9' (2024-11-15) • Updated input 'fenix/rust-analyzer-src': 'github:rust-lang/rust-analyzer/30e71b609b493897ed81f4fec95eb75d903820c9' (2024-11-10) → 'github:rust-lang/rust-analyzer/fc98e0657abf3ce07eed513e38274c89bbb2f8ad' (2024-11-11) • Updated input 'helix-inline-diags': 'github:helix-editor/helix/10c3502a89d51e2d074d0d2ca62f85241d6e8c0f' (2024-11-11) → 'github:helix-editor/helix/6cca98264fe308bd6a4f7f85be2d821b58f60b4a' (2024-11-13) • Updated input 'home-manager': 'github:nix-community/home-manager/60bb110917844d354f3c18e05450606a435d2d10' (2024-11-10) → 'github:nix-community/home-manager/1d0862ee2d7c6f6cd720d6f32213fa425004be10' (2024-11-14) • Updated input 'nixpkgs': 'github:NixOS/nixpkgs/76612b17c0ce71689921ca12d9ffdc9c23ce40b2' (2024-11-09) → 'github:NixOS/nixpkgs/dc460ec76cbff0e66e269457d7b728432263166c' (2024-11-11) • Updated input 'nixpkgs-unstable-small': 'github:NixOS/nixpkgs/3f42f0b61e6c45ca80d87cec5dd11e121d6b9c14' (2024-11-11) → 'github:NixOS/nixpkgs/cea28c811faadb50bee00d433bbf2fea845a43e4' (2024-11-14) --- flake.lock | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/flake.lock b/flake.lock index 0c41d4d..ad04279 100644 --- a/flake.lock +++ b/flake.lock @@ -23,11 +23,11 @@ "rust-analyzer-src": "rust-analyzer-src" }, "locked": { - "lastModified": 1731306807, - "narHash": "sha256-Z8r5l7GdIPt3sP9D3mZSiAdpLc75/ohmtLheG/Lo44w=", + "lastModified": 1731652660, + "narHash": "sha256-vau17dcGvfEWX9DLWuSPC0dfE0XcDe9ZNlsqXy46P88=", "owner": "nix-community", "repo": "fenix", - "rev": "b7206c170fa6b4695eb8211e10fdd0be0de9a248", + "rev": "664e2f335aa5ae28c8759ff206444edb198dc1c9", "type": "github" }, "original": { @@ -99,11 +99,11 @@ "rust-overlay": "rust-overlay" }, "locked": { - "lastModified": 1731295855, - "narHash": "sha256-PpkEexKnFxd72Z+bRnZqYmaSlNF0ztOIjY+aa/5PKak=", + "lastModified": 1731479417, + "narHash": "sha256-NZ+Jc9XecxUIC6RBE5TdDo8hKzI704fMBKTz6lEH32w=", "owner": "helix-editor", "repo": "helix", - "rev": "10c3502a89d51e2d074d0d2ca62f85241d6e8c0f", + "rev": "6cca98264fe308bd6a4f7f85be2d821b58f60b4a", "type": "github" }, "original": { @@ -119,11 +119,11 @@ ] }, "locked": { - "lastModified": 1731235328, - "narHash": "sha256-NjavpgE9/bMe/ABvZpyHIUeYF1mqR5lhaep3wB79ucs=", + "lastModified": 1731604581, + "narHash": "sha256-Qq2YZZaDTB3FZLWU/Hgh1uuWlUBl3cMLGB99bm7rFUM=", "owner": "nix-community", "repo": "home-manager", - "rev": "60bb110917844d354f3c18e05450606a435d2d10", + "rev": "1d0862ee2d7c6f6cd720d6f32213fa425004be10", "type": "github" }, "original": { @@ -200,11 +200,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1731139594, - "narHash": "sha256-IigrKK3vYRpUu+HEjPL/phrfh7Ox881er1UEsZvw9Q4=", + "lastModified": 1731319897, + "narHash": "sha256-PbABj4tnbWFMfBp6OcUK5iGy1QY+/Z96ZcLpooIbuEI=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "76612b17c0ce71689921ca12d9ffdc9c23ce40b2", + "rev": "dc460ec76cbff0e66e269457d7b728432263166c", "type": "github" }, "original": { @@ -230,11 +230,11 @@ }, "nixpkgs-unstable-small": { "locked": { - "lastModified": 1731300529, - "narHash": "sha256-PwzToM8oltfO3GlHpo3hIqmhPZwTbwkdnMIe4NpaN4g=", + "lastModified": 1731611831, + "narHash": "sha256-R51rOqkWMfubBkZ9BY4Y1VaRoeqEBshlfQ8mMH5RjqI=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "3f42f0b61e6c45ca80d87cec5dd11e121d6b9c14", + "rev": "cea28c811faadb50bee00d433bbf2fea845a43e4", "type": "github" }, "original": { @@ -260,11 +260,11 @@ "rust-analyzer-src": { "flake": false, "locked": { - "lastModified": 1731264417, - "narHash": "sha256-TDI1s2Sc/rpMLwful1NcTjYBbqzbQ4Mjw5PPOuOXVfg=", + "lastModified": 1731342671, + "narHash": "sha256-36eYDHoPzjavnpmEpc2MXdzMk557S0YooGms07mDuKk=", "owner": "rust-lang", "repo": "rust-analyzer", - "rev": "30e71b609b493897ed81f4fec95eb75d903820c9", + "rev": "fc98e0657abf3ce07eed513e38274c89bbb2f8ad", "type": "github" }, "original": { From e08038d3a776bff40d7ef42e0353ec8ad9f8d404 Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Fri, 15 Nov 2024 10:02:44 +0100 Subject: [PATCH 155/301] bare basics stuff --- common.nix | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/common.nix b/common.nix index 781f311..fd64708 100644 --- a/common.nix +++ b/common.nix @@ -60,6 +60,11 @@ with builtins; { btop nodejs + cmatrix + sl + lolcat + cool-retro-term + maven jetbrains.idea-ultimate jetbrains.rust-rover From 33cb62770e869b17a2bc5c6cd9cb9bd1f446fcf2 Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Tue, 19 Nov 2024 12:56:28 +0100 Subject: [PATCH 156/301] flake.lock: Update MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Flake lock file updates: • Updated input 'crane': 'github:ipetkov/crane/ef80ead953c1b28316cc3f8613904edc2eb90c28' (2024-11-08) → 'github:ipetkov/crane/3cb338ce81076ce5e461cf77f7824476addb0e1c' (2024-11-19) • Updated input 'fenix': 'github:nix-community/fenix/664e2f335aa5ae28c8759ff206444edb198dc1c9' (2024-11-15) → 'github:nix-community/fenix/3a8ac5fe1052d1ebe0cfee036aab71cce110b713' (2024-11-19) • Updated input 'fenix/rust-analyzer-src': 'github:rust-lang/rust-analyzer/fc98e0657abf3ce07eed513e38274c89bbb2f8ad' (2024-11-11) → 'github:rust-lang/rust-analyzer/ba56d9b9b5f7ae7311b4bd1cc47159d87eb033d0' (2024-11-17) • Updated input 'home-manager': 'github:nix-community/home-manager/1d0862ee2d7c6f6cd720d6f32213fa425004be10' (2024-11-14) → 'github:nix-community/home-manager/a42fa14b53ceab66274a21da480c9f8e06204173' (2024-11-18) • Updated input 'lix-module': 'git+https://git.lix.systems/lix-project/nixos-module?ref=refs/heads/main&rev=691193879d96bdfd1e6ab5ebcca2fadc7604cf34' (2024-11-09) → 'git+https://git.lix.systems/lix-project/nixos-module?ref=refs/heads/main&rev=aa2846680fa9a2032939d720487942567fd9eb63' (2024-11-18) • Updated input 'lix-module/flake-utils': 'github:numtide/flake-utils/c1dfcf08411b08f6b8615f7d8971a2bfa81d5e8a' (2024-09-17) → 'github:numtide/flake-utils/11707dc2f618dd54ca8739b309ec4fc024de578b' (2024-11-13) • Updated input 'lix-module/lix': 'https://git.lix.systems/api/v1/repos/lix-project/lix/archive/b967f1d5fe9d1bf58e6159e9b426c5b341489397.tar.gz?narHash=sha256-WnT6MpgrMKgqV2Rs%2BMfU88%2BKO%2B/njELPOtGoNhoX2oA%3D&rev=b967f1d5fe9d1bf58e6159e9b426c5b341489397' (2024-11-09) → 'https://git.lix.systems/api/v1/repos/lix-project/lix/archive/c859d03013712b349d82ee6223948d6d03e63a8d.tar.gz?narHash=sha256-bq21I1EjXJa/s5Rra9J9ot2NkPCnI0F5uNPurwYLdpE%3D&rev=c859d03013712b349d82ee6223948d6d03e63a8d' (2024-11-15) • Updated input 'nixpkgs': 'github:NixOS/nixpkgs/dc460ec76cbff0e66e269457d7b728432263166c' (2024-11-11) → 'github:NixOS/nixpkgs/5e4fbfb6b3de1aa2872b76d49fafc942626e2add' (2024-11-15) • Updated input 'nixpkgs-stable': 'github:NixOS/nixpkgs/c21b77913ea840f8bcf9adf4c41cecc2abffd38d' (2024-11-15) → 'github:NixOS/nixpkgs/e8c38b73aeb218e27163376a2d617e61a2ad9b59' (2024-11-16) • Updated input 'nixpkgs-unstable-small': 'github:NixOS/nixpkgs/cea28c811faadb50bee00d433bbf2fea845a43e4' (2024-11-14) → 'github:NixOS/nixpkgs/0705964c881cea8896474610188905ba41b59b08' (2024-11-19) --- flake.lock | 66 +++++++++++++++++++++++++++--------------------------- 1 file changed, 33 insertions(+), 33 deletions(-) diff --git a/flake.lock b/flake.lock index ad04279..c600fee 100644 --- a/flake.lock +++ b/flake.lock @@ -2,11 +2,11 @@ "nodes": { "crane": { "locked": { - "lastModified": 1731098351, - "narHash": "sha256-HQkYvKvaLQqNa10KEFGgWHfMAbWBfFp+4cAgkut+NNE=", + "lastModified": 1731974733, + "narHash": "sha256-enYSSZVVl15FI5p+0Y5/Ckf5DZAvXe6fBrHxyhA/njc=", "owner": "ipetkov", "repo": "crane", - "rev": "ef80ead953c1b28316cc3f8613904edc2eb90c28", + "rev": "3cb338ce81076ce5e461cf77f7824476addb0e1c", "type": "github" }, "original": { @@ -23,11 +23,11 @@ "rust-analyzer-src": "rust-analyzer-src" }, "locked": { - "lastModified": 1731652660, - "narHash": "sha256-vau17dcGvfEWX9DLWuSPC0dfE0XcDe9ZNlsqXy46P88=", + "lastModified": 1731998089, + "narHash": "sha256-nyTC7PboxqkPXgtwn142GV837AUlUOJ1TeVxtFn8kA8=", "owner": "nix-community", "repo": "fenix", - "rev": "664e2f335aa5ae28c8759ff206444edb198dc1c9", + "rev": "3a8ac5fe1052d1ebe0cfee036aab71cce110b713", "type": "github" }, "original": { @@ -59,11 +59,11 @@ "systems": "systems_2" }, "locked": { - "lastModified": 1726560853, - "narHash": "sha256-X6rJYSESBVr3hBoH0WbKE5KvhPU5bloyZ2L4K60/fPQ=", + "lastModified": 1731533236, + "narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=", "owner": "numtide", "repo": "flake-utils", - "rev": "c1dfcf08411b08f6b8615f7d8971a2bfa81d5e8a", + "rev": "11707dc2f618dd54ca8739b309ec4fc024de578b", "type": "github" }, "original": { @@ -119,11 +119,11 @@ ] }, "locked": { - "lastModified": 1731604581, - "narHash": "sha256-Qq2YZZaDTB3FZLWU/Hgh1uuWlUBl3cMLGB99bm7rFUM=", + "lastModified": 1731968878, + "narHash": "sha256-+hTCwETOE9N8voTAaF+IzdUZz28Ws3LDpH90FWADrEE=", "owner": "nix-community", "repo": "home-manager", - "rev": "1d0862ee2d7c6f6cd720d6f32213fa425004be10", + "rev": "a42fa14b53ceab66274a21da480c9f8e06204173", "type": "github" }, "original": { @@ -135,11 +135,11 @@ "lix": { "flake": false, "locked": { - "lastModified": 1731164513, - "narHash": "sha256-WnT6MpgrMKgqV2Rs+MfU88+KO+/njELPOtGoNhoX2oA=", - "rev": "b967f1d5fe9d1bf58e6159e9b426c5b341489397", + "lastModified": 1731683711, + "narHash": "sha256-bq21I1EjXJa/s5Rra9J9ot2NkPCnI0F5uNPurwYLdpE=", + "rev": "c859d03013712b349d82ee6223948d6d03e63a8d", "type": "tarball", - "url": "https://git.lix.systems/api/v1/repos/lix-project/lix/archive/b967f1d5fe9d1bf58e6159e9b426c5b341489397.tar.gz?rev=b967f1d5fe9d1bf58e6159e9b426c5b341489397" + "url": "https://git.lix.systems/api/v1/repos/lix-project/lix/archive/c859d03013712b349d82ee6223948d6d03e63a8d.tar.gz?rev=c859d03013712b349d82ee6223948d6d03e63a8d" }, "original": { "type": "tarball", @@ -156,11 +156,11 @@ ] }, "locked": { - "lastModified": 1731185731, - "narHash": "sha256-RNaIu43b9PoXEhW4OqXUNZKY/jezQyCYWwdv1M0VjsA=", + "lastModified": 1731967274, + "narHash": "sha256-n6dPGRlMGdL8X5gviA6ZuRfUdbdD5KiNN/BpABA5YT0=", "ref": "refs/heads/main", - "rev": "691193879d96bdfd1e6ab5ebcca2fadc7604cf34", - "revCount": 117, + "rev": "aa2846680fa9a2032939d720487942567fd9eb63", + "revCount": 119, "type": "git", "url": "https://git.lix.systems/lix-project/nixos-module" }, @@ -200,11 +200,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1731319897, - "narHash": "sha256-PbABj4tnbWFMfBp6OcUK5iGy1QY+/Z96ZcLpooIbuEI=", + "lastModified": 1731676054, + "narHash": "sha256-OZiZ3m8SCMfh3B6bfGC/Bm4x3qc1m2SVEAlkV6iY7Yg=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "dc460ec76cbff0e66e269457d7b728432263166c", + "rev": "5e4fbfb6b3de1aa2872b76d49fafc942626e2add", "type": "github" }, "original": { @@ -215,26 +215,26 @@ }, "nixpkgs-stable": { "locked": { - "lastModified": 1720535198, - "narHash": "sha256-zwVvxrdIzralnSbcpghA92tWu2DV2lwv89xZc8MTrbg=", + "lastModified": 1731797254, + "narHash": "sha256-df3dJApLPhd11AlueuoN0Q4fHo/hagP75LlM5K1sz9g=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "205fd4226592cc83fd4c0885a3e4c9c400efabb5", + "rev": "e8c38b73aeb218e27163376a2d617e61a2ad9b59", "type": "github" }, "original": { "id": "nixpkgs", - "ref": "nixos-23.11", + "ref": "nixos-24.05", "type": "indirect" } }, "nixpkgs-unstable-small": { "locked": { - "lastModified": 1731611831, - "narHash": "sha256-R51rOqkWMfubBkZ9BY4Y1VaRoeqEBshlfQ8mMH5RjqI=", + "lastModified": 1732007104, + "narHash": "sha256-qaWPxgLAvtIHTDcm0qJuc+WNYjcy4ZKigOyn2ag4ihM=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "cea28c811faadb50bee00d433bbf2fea845a43e4", + "rev": "0705964c881cea8896474610188905ba41b59b08", "type": "github" }, "original": { @@ -260,11 +260,11 @@ "rust-analyzer-src": { "flake": false, "locked": { - "lastModified": 1731342671, - "narHash": "sha256-36eYDHoPzjavnpmEpc2MXdzMk557S0YooGms07mDuKk=", + "lastModified": 1731827189, + "narHash": "sha256-isYgZVCLHYoXPtkns2jL+QAKFxnZ6lXCvKO7mT4ooiE=", "owner": "rust-lang", "repo": "rust-analyzer", - "rev": "fc98e0657abf3ce07eed513e38274c89bbb2f8ad", + "rev": "ba56d9b9b5f7ae7311b4bd1cc47159d87eb033d0", "type": "github" }, "original": { From f7100a9e56a45fdb2d5e84d246fb993c9797f2db Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Wed, 20 Nov 2024 10:34:10 +0100 Subject: [PATCH 157/301] add trace build recipe --- justfile | 3 +++ 1 file changed, 3 insertions(+) diff --git a/justfile b/justfile index 2585971..3243fda 100644 --- a/justfile +++ b/justfile @@ -6,6 +6,9 @@ test: build: sudo nixos-rebuild switch --flake . --impure --fast --log-format multiline +tbuild: + sudo nixos-rebuild switch --flake . --impure --fast --log-format multiline-with-logs --show-trace + update: nix flake update --commit-lock-file --log-format multiline From 0767bab5bd3c30573503b2c06792d43081888a6f Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Wed, 20 Nov 2024 10:39:37 +0100 Subject: [PATCH 158/301] google-fonts --- modules/desktop/fonts.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/modules/desktop/fonts.nix b/modules/desktop/fonts.nix index 97c7453..cbb67d1 100644 --- a/modules/desktop/fonts.nix +++ b/modules/desktop/fonts.nix @@ -1,6 +1,7 @@ {pkgs, ...}: { fonts.packages = with pkgs; [ (nerdfonts.override {fonts = ["FiraCode" "AnonymousPro"];}) + google-fonts montserrat noto-fonts atkinson-hyperlegible From 06460678431001d07c27287b4b6e0cf4837a2cf0 Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Thu, 28 Nov 2024 08:42:49 +0100 Subject: [PATCH 159/301] rename laptop --- flake.nix | 4 ++-- hosts/{catbook-j => denkbrett}/configuration.nix | 2 +- hosts/{catbook-j => denkbrett}/hardware-configuration.nix | 0 hosts/{catbook-j => denkbrett}/modules/default.nix | 0 hosts/{catbook-j => denkbrett}/modules/graphics.nix | 0 hosts/{catbook-j => denkbrett}/modules/input.nix | 0 6 files changed, 3 insertions(+), 3 deletions(-) rename hosts/{catbook-j => denkbrett}/configuration.nix (98%) rename hosts/{catbook-j => denkbrett}/hardware-configuration.nix (100%) rename hosts/{catbook-j => denkbrett}/modules/default.nix (100%) rename hosts/{catbook-j => denkbrett}/modules/graphics.nix (100%) rename hosts/{catbook-j => denkbrett}/modules/input.nix (100%) diff --git a/flake.nix b/flake.nix index 516f018..de9b7e2 100644 --- a/flake.nix +++ b/flake.nix @@ -117,13 +117,13 @@ } ]; }; - catbook-j = nixpkgs.lib.nixosSystem { + denkbrett = nixpkgs.lib.nixosSystem { specialArgs = { inherit inputs pkgs-unstable-small pkgs-stable rs-programs lix-module helix-inline-diags; }; system = "x86_64-linux"; modules = [ - ./hosts/catbook-j/configuration.nix + ./hosts/denkbrett/configuration.nix home-manager.nixosModules.home-manager { home-manager.useGlobalPkgs = true; diff --git a/hosts/catbook-j/configuration.nix b/hosts/denkbrett/configuration.nix similarity index 98% rename from hosts/catbook-j/configuration.nix rename to hosts/denkbrett/configuration.nix index 14e2f64..ae72336 100644 --- a/hosts/catbook-j/configuration.nix +++ b/hosts/denkbrett/configuration.nix @@ -76,7 +76,7 @@ # networking networking.networkmanager.enable = true; - networking.hostName = "catbook-j"; + networking.hostName = "denkbrett"; i18n.extraLocaleSettings = { LC_ADDRESS = "de_DE.UTF-8"; diff --git a/hosts/catbook-j/hardware-configuration.nix b/hosts/denkbrett/hardware-configuration.nix similarity index 100% rename from hosts/catbook-j/hardware-configuration.nix rename to hosts/denkbrett/hardware-configuration.nix diff --git a/hosts/catbook-j/modules/default.nix b/hosts/denkbrett/modules/default.nix similarity index 100% rename from hosts/catbook-j/modules/default.nix rename to hosts/denkbrett/modules/default.nix diff --git a/hosts/catbook-j/modules/graphics.nix b/hosts/denkbrett/modules/graphics.nix similarity index 100% rename from hosts/catbook-j/modules/graphics.nix rename to hosts/denkbrett/modules/graphics.nix diff --git a/hosts/catbook-j/modules/input.nix b/hosts/denkbrett/modules/input.nix similarity index 100% rename from hosts/catbook-j/modules/input.nix rename to hosts/denkbrett/modules/input.nix From a636270116f919aae7d6be770c83861efa31ba47 Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Thu, 28 Nov 2024 08:47:24 +0100 Subject: [PATCH 160/301] update nixpkgs-stable --- flake.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/flake.nix b/flake.nix index de9b7e2..3ea114b 100644 --- a/flake.nix +++ b/flake.nix @@ -3,7 +3,7 @@ inputs = { nixpkgs.url = "nixpkgs/nixos-unstable"; - nixpkgs-stable.url = "nixpkgs/nixos-23.11"; + nixpkgs-stable.url = "nixpkgs/nixos-24.05"; nixpkgs-unstable-small.url = "nixpkgs/nixos-unstable-small"; helix-inline-diags = { url = "github:helix-editor/helix"; From 8fb63359d10f16ddfa633db8b5b894ba1748eeea Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Thu, 28 Nov 2024 18:05:02 +0100 Subject: [PATCH 161/301] flake.lock: Update MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Flake lock file updates: • Updated input 'crane': 'github:ipetkov/crane/3cb338ce81076ce5e461cf77f7824476addb0e1c' (2024-11-19) → 'github:ipetkov/crane/f2b4b472983817021d9ffb60838b2b36b9376b20' (2024-11-24) • Updated input 'fenix': 'github:nix-community/fenix/3a8ac5fe1052d1ebe0cfee036aab71cce110b713' (2024-11-19) → 'github:nix-community/fenix/a8a983027ca02b363dfc82fbe3f7d9548a8d3dce' (2024-11-27) • Updated input 'fenix/rust-analyzer-src': 'github:rust-lang/rust-analyzer/ba56d9b9b5f7ae7311b4bd1cc47159d87eb033d0' (2024-11-17) → 'github:rust-lang/rust-analyzer/8d5e91c94f80c257ce6dbdfba7bd63a5e8a03fa6' (2024-11-26) • Updated input 'helix-inline-diags': 'github:helix-editor/helix/6cca98264fe308bd6a4f7f85be2d821b58f60b4a' (2024-11-13) → 'github:helix-editor/helix/e1d1a5c5a12127ded88dfcf66dd74aad1650977c' (2024-11-27) • Updated input 'home-manager': 'github:nix-community/home-manager/a42fa14b53ceab66274a21da480c9f8e06204173' (2024-11-18) → 'github:nix-community/home-manager/2f7739d01080feb4549524e8f6927669b61c6ee3' (2024-11-28) • Updated input 'lix-module': 'git+https://git.lix.systems/lix-project/nixos-module?ref=refs/heads/main&rev=aa2846680fa9a2032939d720487942567fd9eb63' (2024-11-18) → 'git+https://git.lix.systems/lix-project/nixos-module?ref=refs/heads/main&rev=15b999f9c958c475f71fb8c543b9fc2f36ae8730' (2024-11-26) • Updated input 'nixpkgs': 'github:NixOS/nixpkgs/5e4fbfb6b3de1aa2872b76d49fafc942626e2add' (2024-11-15) → 'github:NixOS/nixpkgs/4633a7c72337ea8fd23a4f2ba3972865e3ec685d' (2024-11-25) • Updated input 'nixpkgs-stable': 'github:NixOS/nixpkgs/e8c38b73aeb218e27163376a2d617e61a2ad9b59' (2024-11-16) → 'github:NixOS/nixpkgs/0c5b4ecbed5b155b705336aa96d878e55acd8685' (2024-11-27) • Updated input 'nixpkgs-unstable-small': 'github:NixOS/nixpkgs/0705964c881cea8896474610188905ba41b59b08' (2024-11-19) → 'github:NixOS/nixpkgs/226216574ada4c3ecefcbbec41f39ce4655f78ef' (2024-11-28) --- flake.lock | 56 +++++++++++++++++++++++++++--------------------------- 1 file changed, 28 insertions(+), 28 deletions(-) diff --git a/flake.lock b/flake.lock index c600fee..7fa1026 100644 --- a/flake.lock +++ b/flake.lock @@ -2,11 +2,11 @@ "nodes": { "crane": { "locked": { - "lastModified": 1731974733, - "narHash": "sha256-enYSSZVVl15FI5p+0Y5/Ckf5DZAvXe6fBrHxyhA/njc=", + "lastModified": 1732407143, + "narHash": "sha256-qJOGDT6PACoX+GbNH2PPx2ievlmtT1NVeTB80EkRLys=", "owner": "ipetkov", "repo": "crane", - "rev": "3cb338ce81076ce5e461cf77f7824476addb0e1c", + "rev": "f2b4b472983817021d9ffb60838b2b36b9376b20", "type": "github" }, "original": { @@ -23,11 +23,11 @@ "rust-analyzer-src": "rust-analyzer-src" }, "locked": { - "lastModified": 1731998089, - "narHash": "sha256-nyTC7PboxqkPXgtwn142GV837AUlUOJ1TeVxtFn8kA8=", + "lastModified": 1732689334, + "narHash": "sha256-yKI1KiZ0+bvDvfPTQ1ZT3oP/nIu3jPYm4dnbRd6hYg4=", "owner": "nix-community", "repo": "fenix", - "rev": "3a8ac5fe1052d1ebe0cfee036aab71cce110b713", + "rev": "a8a983027ca02b363dfc82fbe3f7d9548a8d3dce", "type": "github" }, "original": { @@ -99,11 +99,11 @@ "rust-overlay": "rust-overlay" }, "locked": { - "lastModified": 1731479417, - "narHash": "sha256-NZ+Jc9XecxUIC6RBE5TdDo8hKzI704fMBKTz6lEH32w=", + "lastModified": 1732735497, + "narHash": "sha256-qaiRKT4T+kRAMwfFf1fIJ5pwCcaLp2dfNpT65C4uWuE=", "owner": "helix-editor", "repo": "helix", - "rev": "6cca98264fe308bd6a4f7f85be2d821b58f60b4a", + "rev": "e1d1a5c5a12127ded88dfcf66dd74aad1650977c", "type": "github" }, "original": { @@ -119,11 +119,11 @@ ] }, "locked": { - "lastModified": 1731968878, - "narHash": "sha256-+hTCwETOE9N8voTAaF+IzdUZz28Ws3LDpH90FWADrEE=", + "lastModified": 1732793095, + "narHash": "sha256-6TrknJ8CpvSSF4gviQSeD+wyj3siRcMvdBKhOXkEMKU=", "owner": "nix-community", "repo": "home-manager", - "rev": "a42fa14b53ceab66274a21da480c9f8e06204173", + "rev": "2f7739d01080feb4549524e8f6927669b61c6ee3", "type": "github" }, "original": { @@ -156,11 +156,11 @@ ] }, "locked": { - "lastModified": 1731967274, - "narHash": "sha256-n6dPGRlMGdL8X5gviA6ZuRfUdbdD5KiNN/BpABA5YT0=", + "lastModified": 1732603698, + "narHash": "sha256-Jw2MhzgCCrKV2MJytehG0cCLIAosBX71p8qmQ6XQlR4=", "ref": "refs/heads/main", - "rev": "aa2846680fa9a2032939d720487942567fd9eb63", - "revCount": 119, + "rev": "15b999f9c958c475f71fb8c543b9fc2f36ae8730", + "revCount": 123, "type": "git", "url": "https://git.lix.systems/lix-project/nixos-module" }, @@ -200,11 +200,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1731676054, - "narHash": "sha256-OZiZ3m8SCMfh3B6bfGC/Bm4x3qc1m2SVEAlkV6iY7Yg=", + "lastModified": 1732521221, + "narHash": "sha256-2ThgXBUXAE1oFsVATK1ZX9IjPcS4nKFOAjhPNKuiMn0=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "5e4fbfb6b3de1aa2872b76d49fafc942626e2add", + "rev": "4633a7c72337ea8fd23a4f2ba3972865e3ec685d", "type": "github" }, "original": { @@ -215,11 +215,11 @@ }, "nixpkgs-stable": { "locked": { - "lastModified": 1731797254, - "narHash": "sha256-df3dJApLPhd11AlueuoN0Q4fHo/hagP75LlM5K1sz9g=", + "lastModified": 1732749044, + "narHash": "sha256-T38FQOg0BV5M8FN1712fovzNakSOENEYs+CSkg31C9Y=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "e8c38b73aeb218e27163376a2d617e61a2ad9b59", + "rev": "0c5b4ecbed5b155b705336aa96d878e55acd8685", "type": "github" }, "original": { @@ -230,11 +230,11 @@ }, "nixpkgs-unstable-small": { "locked": { - "lastModified": 1732007104, - "narHash": "sha256-qaWPxgLAvtIHTDcm0qJuc+WNYjcy4ZKigOyn2ag4ihM=", + "lastModified": 1732780316, + "narHash": "sha256-NskLIz0ue4Uqbza+1+8UGHuPVr8DrUiLfZu5VS4VQxw=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "0705964c881cea8896474610188905ba41b59b08", + "rev": "226216574ada4c3ecefcbbec41f39ce4655f78ef", "type": "github" }, "original": { @@ -260,11 +260,11 @@ "rust-analyzer-src": { "flake": false, "locked": { - "lastModified": 1731827189, - "narHash": "sha256-isYgZVCLHYoXPtkns2jL+QAKFxnZ6lXCvKO7mT4ooiE=", + "lastModified": 1732633904, + "narHash": "sha256-7VKcoLug9nbAN2txqVksWHHJplqK9Ou8dXjIZAIYSGc=", "owner": "rust-lang", "repo": "rust-analyzer", - "rev": "ba56d9b9b5f7ae7311b4bd1cc47159d87eb033d0", + "rev": "8d5e91c94f80c257ce6dbdfba7bd63a5e8a03fa6", "type": "github" }, "original": { From ffdf893e15eb3dd18584b4a25706092394ea4987 Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Fri, 29 Nov 2024 15:46:11 +0100 Subject: [PATCH 162/301] add typst configs --- modules/desktop-environment/home/default.nix | 1 + modules/desktop-environment/home/typst.nix | 33 ++++++++++++++++++++ 2 files changed, 34 insertions(+) create mode 100644 modules/desktop-environment/home/typst.nix diff --git a/modules/desktop-environment/home/default.nix b/modules/desktop-environment/home/default.nix index e348ec6..558291e 100644 --- a/modules/desktop-environment/home/default.nix +++ b/modules/desktop-environment/home/default.nix @@ -4,6 +4,7 @@ ./notifications.nix ./terminal.nix ./compositing.nix + ./typst.nix ./panels ./xmonad ./sway diff --git a/modules/desktop-environment/home/typst.nix b/modules/desktop-environment/home/typst.nix new file mode 100644 index 0000000..f60ed7c --- /dev/null +++ b/modules/desktop-environment/home/typst.nix @@ -0,0 +1,33 @@ +{ + pkgs, + lib, + ... +}: let + packages = { + typst-configs = pkgs.fetchFromGitea { + domain = "forge.katzen.cafe"; + owner = "schrottkatze"; + repo = "typst-configs"; + rev = "3a09cd374f0508c8e0c5d95f5ad7358adc50bafa"; + }; + flow = pkgs.fetchFromGithub { + owner = "MultisampledNight"; + repo = "flow"; + rev = "f5c653c706d80145165ec684b217b803a0246e8c"; + }; + }; + mkTypstPath = name: ".local/share/typst/packages/local/${name}/0.1.0"; +in { + home.file = { + typst-configs = { + target = mkTypstPath "typst-configs"; + source = packages.typst-configs; + recursive = true; + }; + flow = { + target = mkTypstPath "flow"; + source = packages.flow; + recursive = true; + }; + }; +} From 7da65291bb79104115caa5c910031b91a2d1c7b4 Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Fri, 29 Nov 2024 15:46:20 +0100 Subject: [PATCH 163/301] update .envrc --- .envrc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.envrc b/.envrc index 3550a30..b1f915f 100644 --- a/.envrc +++ b/.envrc @@ -1 +1 @@ -use flake +use flake --log-format multiline-with-logs From 6f452681505636a49f06696ef866478d846b53f5 Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Fri, 29 Nov 2024 15:46:54 +0100 Subject: [PATCH 164/301] add layaway --- .../desktop-environment/home/sway/default.nix | 24 ++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/modules/desktop-environment/home/sway/default.nix b/modules/desktop-environment/home/sway/default.nix index e93e9b7..a1e12b3 100644 --- a/modules/desktop-environment/home/sway/default.nix +++ b/modules/desktop-environment/home/sway/default.nix @@ -3,10 +3,32 @@ lib, config, ... -}: { +}: let + # stolen: https://github.com/MultisampledNight/core/blob/678f176cb24f5dc4b5dc629cfd3e643487be01bb/system/packages/layaway/default.nix#L7-L25 + layaway = pkgs.rustPlatform.buildRustPackage rec { + pname = "layaway"; + version = "0.2.0"; + + src = pkgs.fetchFromGitHub { + owner = "MultisampledNight"; + repo = pname; + rev = "v${version}"; + hash = "sha256-SzAuVFEy56svasO3+1p6ysBRrIQd0UZX++/P4ZuwWm0="; + }; + + cargoHash = "sha256-liWP6AI72xG1O+MbCZ0cjJ2llHj/iv3hR/U3BLv5fKA="; + + meta = with lib; { + description = "Layout creation for Sway via a relative and human-readable DSL."; + homepage = "https://github.com/MultisampledNight/layaway"; + maintainers = [maintainers.multisn8]; + }; + }; +in { programs.wofi.enable = true; programs.swaylock.enable = true; services.network-manager-applet.enable = true; + home.packages = [layaway]; xdg.portal = { enable = true; From 9f0a3640d8b199d64e43648744645541816e130f Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Fri, 29 Nov 2024 15:47:35 +0100 Subject: [PATCH 165/301] add tlp --- modules/desktop-environment/default.nix | 1 + modules/desktop-environment/tlp.nix | 9 +++++++++ 2 files changed, 10 insertions(+) create mode 100644 modules/desktop-environment/tlp.nix diff --git a/modules/desktop-environment/default.nix b/modules/desktop-environment/default.nix index 73050ec..d6030ad 100644 --- a/modules/desktop-environment/default.nix +++ b/modules/desktop-environment/default.nix @@ -5,6 +5,7 @@ ./flatpak.nix ./home ./dm.nix + ./tlp.nix ]; services.upower = { enable = true; diff --git a/modules/desktop-environment/tlp.nix b/modules/desktop-environment/tlp.nix new file mode 100644 index 0000000..88aa4d7 --- /dev/null +++ b/modules/desktop-environment/tlp.nix @@ -0,0 +1,9 @@ +{...}: { + services.tlp = { + enable = true; + settings = { + START_CHARGE_THRESH_BAT0 = "70"; + STOP_CHARGE_TRESH_BAT0 = "85"; + }; + }; +} From 355d513434750635be7bda5505566a0b4e8a281b Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Fri, 29 Nov 2024 15:47:54 +0100 Subject: [PATCH 166/301] update hwkey in git --- modules/shell/git.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/shell/git.nix b/modules/shell/git.nix index 87c068f..743e653 100644 --- a/modules/shell/git.nix +++ b/modules/shell/git.nix @@ -22,7 +22,7 @@ s = "status"; }; signing = { - key = "${pkgs.writeText "red_nk3.pub" "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOaE8TFsIazpn4OnHvHcRpOFr9FfvMaWOiEjmHsmnAoE cardno:000F_70CD7D05"}"; + key = "${pkgs.writeText "blue_nk3.pub" "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAILg7hhAKxIAbokHHcIj9HBgbkgoKGCG2R+gx7HZKL+iz cardno:000F_93C6A612"}"; signByDefault = true; }; extraConfig = { From 3e8eb1e6d794e30875d6471c43383832847de6ec Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Fri, 29 Nov 2024 15:48:15 +0100 Subject: [PATCH 167/301] update nu config --- other/config.nu | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/other/config.nu b/other/config.nu index d9d74e3..6dbae6e 100644 --- a/other/config.nu +++ b/other/config.nu @@ -232,7 +232,7 @@ $env.config = { } color_config: $dark_theme # if you want a more interesting theme, you can replace the empty record with `$dark_theme`, `$light_theme` or another custom record - footer_mode: "25" # always, never, number_of_rows, auto + footer_mode: 25 # always, never, number_of_rows, auto float_precision: 2 # the precision for displaying floats in tables buffer_editor: "" # command that will be used to edit the current line buffer with ctrl+o, if unset fallback to $env.EDITOR and $env.VISUAL use_ansi_coloring: true From 9657b8771f90c394c55966462e09f7161f91aeea Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Fri, 29 Nov 2024 15:48:39 +0100 Subject: [PATCH 168/301] add bahn.expert lookup command to nu config --- other/config.nu | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/other/config.nu b/other/config.nu index 6dbae6e..b03a517 100644 --- a/other/config.nu +++ b/other/config.nu @@ -882,6 +882,17 @@ def nev [ unit = day ] { | format duration $unit } +# TODO: intermediate stations +def bx [from: string to: string] { + let map = open ~/Docs/ril100map.json; + let start = $map | get ($from | str upcase) | first; + let dest = $map | get ($to | str upcase) | first; + + let url = $"https://bahn.expert/routing/($start)/($dest)/0/"; + print $url; + ^bash -c $"nohup chromium '($url)' &"; +} + alias gnix = cd ~/nix-configs; alias grepo = cd ~/Documents/repos; alias wh = wormhole-rs; @@ -907,3 +918,5 @@ alias bash = echo $"(ansi red)no, fuck that shit!"; alias sh = echo $"(ansi red)no, fuck that shit!"; alias zsh = echo $"(ansi red)no, fuck that shit!"; alias fish = echo $"(ansi red)no, fuck that shit!"; + +alias px = pulsemixer; From e9a1461924cb7200a29f169f1871fe4a66d42d77 Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Fri, 29 Nov 2024 16:31:39 +0100 Subject: [PATCH 169/301] finally replace typst-lsp by tinymist! --- modules/shell/helix.nix | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/modules/shell/helix.nix b/modules/shell/helix.nix index f5c04dc..ad5b857 100644 --- a/modules/shell/helix.nix +++ b/modules/shell/helix.nix @@ -15,8 +15,9 @@ pkgs.vscode-langservers-extracted pkgs.nodePackages.typescript-language-server pkgs.emmet-language-server - pkgs-stable.typst-lsp pkgs.jdt-language-server + pkgs.tinymist + pkgs.typstyle ]; }; programs.helix = { @@ -148,9 +149,10 @@ command = "psalm"; args = ["--language-server"]; }; - "typst-lsp" = { + "tinymist" = { config = { exportPdf = "onType"; + formatterMode = "typstyle"; }; }; }; From 9a23089b2365e8391c32a3f8379e8810ef80c4ce Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Wed, 1 Jan 2025 03:12:41 +0100 Subject: [PATCH 170/301] update nerd fonts --- modules/desktop/fonts.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/desktop/fonts.nix b/modules/desktop/fonts.nix index cbb67d1..81f6c8c 100644 --- a/modules/desktop/fonts.nix +++ b/modules/desktop/fonts.nix @@ -1,6 +1,6 @@ {pkgs, ...}: { fonts.packages = with pkgs; [ - (nerdfonts.override {fonts = ["FiraCode" "AnonymousPro"];}) + nerd-fonts.fira-code google-fonts montserrat noto-fonts From e16b9be12059ea31538c3844bb0316194dc574ff Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Wed, 1 Jan 2025 03:13:45 +0100 Subject: [PATCH 171/301] update eduroam thing to use stable --- modules/desktop-environment/eduroam.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/desktop-environment/eduroam.nix b/modules/desktop-environment/eduroam.nix index 45c2c5c..d6bc3db 100644 --- a/modules/desktop-environment/eduroam.nix +++ b/modules/desktop-environment/eduroam.nix @@ -1,5 +1,5 @@ # Thanks @ kloenk (@kloenk@catcatnya.com) for making this for me at MRMCD 2024 :33 -{pkgs, ...}: let +{pkgs-stable, ...}: let caDir = "/var/lib/easyroam"; uuid = "821ad781-76a3-447f-a2e8-c7f18a1df3bc"; in { @@ -7,7 +7,7 @@ in { requires = ["NetworkManager.service"]; after = ["NetworkManager.service"]; requiredBy = ["network-online.target"]; - path = with pkgs; [networkmanager openssl gnused]; + path = with pkgs-stable; [networkmanager openssl gnused]; script = '' set -x openssl pkcs12 -password pass: -in ${caDir}/my_easyroam_cert.p12 -legacy -nokeys | openssl x509 > ${caDir}/easyroam_client_cert.pem From 1e19aa996bcb7e000ea8a31e221725f88a53e53c Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Wed, 1 Jan 2025 03:14:19 +0100 Subject: [PATCH 172/301] update typst things --- modules/desktop-environment/home/typst.nix | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/modules/desktop-environment/home/typst.nix b/modules/desktop-environment/home/typst.nix index f60ed7c..c4ab6c1 100644 --- a/modules/desktop-environment/home/typst.nix +++ b/modules/desktop-environment/home/typst.nix @@ -8,12 +8,14 @@ domain = "forge.katzen.cafe"; owner = "schrottkatze"; repo = "typst-configs"; - rev = "3a09cd374f0508c8e0c5d95f5ad7358adc50bafa"; + rev = "569cd8525a85878140baf5952597f27fd7ea51d3"; + sha256 = "sha256-4pAammwrFGhpSquEsh4QSd8Hw/ioHm3fMiC5oqNgbAQ="; }; - flow = pkgs.fetchFromGithub { + flow = pkgs.fetchFromGitHub { owner = "MultisampledNight"; repo = "flow"; rev = "f5c653c706d80145165ec684b217b803a0246e8c"; + sha256 = "sha256-tXfogxo1DGmsrwjOhF2h+60825P6NVcgQGN6Q1tspZA="; }; }; mkTypstPath = name: ".local/share/typst/packages/local/${name}/0.1.0"; From db11ba184cd9b99a0444bb7b37118edd646935d5 Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Wed, 1 Jan 2025 03:15:13 +0100 Subject: [PATCH 173/301] update height of bars --- .../home/panels/eww/configDir/bottomBar/bottomBar.yuck | 2 +- .../home/panels/eww/configDir/topBar/topBar.yuck | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/desktop-environment/home/panels/eww/configDir/bottomBar/bottomBar.yuck b/modules/desktop-environment/home/panels/eww/configDir/bottomBar/bottomBar.yuck index 611590e..fd0bcbe 100644 --- a/modules/desktop-environment/home/panels/eww/configDir/bottomBar/bottomBar.yuck +++ b/modules/desktop-environment/home/panels/eww/configDir/bottomBar/bottomBar.yuck @@ -8,7 +8,7 @@ :exclusive true :geometry (geometry :width "100%" - :height "32px" + :height "33px" :anchor "bottom center") (bottomBar)) diff --git a/modules/desktop-environment/home/panels/eww/configDir/topBar/topBar.yuck b/modules/desktop-environment/home/panels/eww/configDir/topBar/topBar.yuck index bf20581..a2135cc 100644 --- a/modules/desktop-environment/home/panels/eww/configDir/topBar/topBar.yuck +++ b/modules/desktop-environment/home/panels/eww/configDir/topBar/topBar.yuck @@ -9,7 +9,7 @@ :exclusive true :geometry (geometry :width "100%" - :height "32px" + :height "33px" :anchor "top center") (topBar)) From 554b573699512b7c3565183242516994256022ca Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Wed, 1 Jan 2025 03:15:29 +0100 Subject: [PATCH 174/301] remove nix-direnv --- modules/shell/direnv.nix | 1 - 1 file changed, 1 deletion(-) diff --git a/modules/shell/direnv.nix b/modules/shell/direnv.nix index c5f22ff..daa3707 100644 --- a/modules/shell/direnv.nix +++ b/modules/shell/direnv.nix @@ -2,7 +2,6 @@ home-manager.users.jade = {pkgs, ...}: { programs.direnv = { enable = true; - nix-direnv.enable = true; }; }; } From 78deecc427545711366bab54795fecab9927ac85 Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Wed, 1 Jan 2025 03:15:45 +0100 Subject: [PATCH 175/301] update tty font package thingy --- modules/shell/tty.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/shell/tty.nix b/modules/shell/tty.nix index 3070907..2213f22 100644 --- a/modules/shell/tty.nix +++ b/modules/shell/tty.nix @@ -59,7 +59,7 @@ in { fonts = [ { name = "FiraCode Nerd Font"; - package = pkgs.nerdfonts.override {fonts = ["FiraCode"];}; + package = pkgs.nerd-fonts.fira-code; } ]; extraConfig = "font-size=14"; From f8a322ca8e1b906c8d4e1de8cd6d55687d45ad8b Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Wed, 1 Jan 2025 03:15:54 +0100 Subject: [PATCH 176/301] update nu config --- other/config.nu | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/other/config.nu b/other/config.nu index b03a517..6537149 100644 --- a/other/config.nu +++ b/other/config.nu @@ -271,7 +271,7 @@ $env.config = { render_right_prompt_on_last_line: false # true or false to enable or disable right prompt to be rendered on last line of the prompt. hooks: { - pre_prompt: { null } + pre_prompt: [] pre_execution: [{ $env.CMD_COUNT = $env.CMD_COUNT + 1; }] # run before the repl input is run env_change: { PWD: [{|before, after| null }] # run if the PWD environment is different since the last repl input From 96a2acd8cde17308204548a07d2f362d642cf51b Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Wed, 1 Jan 2025 03:17:22 +0100 Subject: [PATCH 177/301] fix shell startup shit --- other/scripts/desktop/shell-startup.nu | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/other/scripts/desktop/shell-startup.nu b/other/scripts/desktop/shell-startup.nu index debcf05..133f149 100644 --- a/other/scripts/desktop/shell-startup.nu +++ b/other/scripts/desktop/shell-startup.nu @@ -39,10 +39,10 @@ def flag [ let amount = $rest / 2; - $cols = ($cols | update 0 { $in | update width {|w| ($w.width + $amount) } } | update $last { $in | update width {|w| ($w.width + $amount) } }); + $cols = ($cols | update 0 { $in | update width {|w| (($w.width | into int) + $amount) } } | update $last { $in | update width {|w| ($w.width + $amount) } }); $cols | each {|col| - $character | std repeat $col.width | prepend (ansi {fg: $"#($col.color)" }) | str join + $character | std repeat ($col.width | into int) | prepend (ansi {fg: $"#($col.color)" }) | str join } | prepend (ansi attr_bold) | append (ansi reset) | str join } @@ -51,10 +51,14 @@ def main [] { let next_events = open ~/Docs/dates.csv | update datetime {|ev| $ev.datetime | into datetime } | sort-by datetime - | filter {|ev| ($ev.datetime > (date now))} - | first - | each {|ev| $"(ansi attr_bold)($ev.event)(ansi reset) in (ansi attr_bold)(tfmt ($ev.datetime - (date now)))s(ansi reset)" }; - print $"Hi jade, you're on HRT for (ansi reset)(ansi attr_bold)((date now) - ('2024-02-18T20:53' | into datetime) | format duration month)s(ansi reset) now! | Next Event: ($next_events)"; + | filter {|ev| ($ev.datetime > (date now))}; + + let evstr = if ($next_events | is-not-empty) { + let ev = $next_events | first; + $" | Next Event: (ansi attr_bold)($ev.event)(ansi reset) in (ansi attr_bold)(tfmt ($ev.datetime - (date now)))s(ansi reset)" + } else ""; + + print $"Hi jade, you're on HRT for (ansi reset)(ansi attr_bold)((date now) - ('2024-02-18T20:53' | into datetime) | format duration month)s(ansi reset) now!($evstr)"; } def tfmt [dur: duration] { From 36d6e2b0d7193b5a670d48e8661042c0eb2813e0 Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Wed, 1 Jan 2025 03:22:46 +0100 Subject: [PATCH 178/301] update creative.nix module --- modules/desktop-environment/home/typst.nix | 7 ++----- modules/desktop/creative.nix | 6 ------ 2 files changed, 2 insertions(+), 11 deletions(-) diff --git a/modules/desktop-environment/home/typst.nix b/modules/desktop-environment/home/typst.nix index c4ab6c1..4bf4d64 100644 --- a/modules/desktop-environment/home/typst.nix +++ b/modules/desktop-environment/home/typst.nix @@ -1,8 +1,4 @@ -{ - pkgs, - lib, - ... -}: let +{pkgs, ...}: let packages = { typst-configs = pkgs.fetchFromGitea { domain = "forge.katzen.cafe"; @@ -32,4 +28,5 @@ in { recursive = true; }; }; + home.packages = [pkgs.typst]; } diff --git a/modules/desktop/creative.nix b/modules/desktop/creative.nix index 0828381..d3a42ca 100644 --- a/modules/desktop/creative.nix +++ b/modules/desktop/creative.nix @@ -7,17 +7,12 @@ home.packages = with pkgs; [ audacity krita - # gimp-with-plugins gimp inkscape-with-extensions obs-studio kdenlive scribus - lilypond - gnuplot - graphviz - povray openscad-unstable openscad-lsp @@ -26,7 +21,6 @@ fontforge-gtk onlyoffice-bin_latest - typst rawtherapee ]; From 49aeec06a6d5cea2ddeb7f109fe640970ffbe397 Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Wed, 1 Jan 2025 03:23:00 +0100 Subject: [PATCH 179/301] remove cava --- modules/desktop-environment/audio.nix | 1 - 1 file changed, 1 deletion(-) diff --git a/modules/desktop-environment/audio.nix b/modules/desktop-environment/audio.nix index e0ca3ed..eebad68 100644 --- a/modules/desktop-environment/audio.nix +++ b/modules/desktop-environment/audio.nix @@ -16,7 +16,6 @@ playerctl pulseaudioFull - cava helvum ]; hardware.pulseaudio.enable = pkgs.lib.mkForce false; From c32f2bc1fa0d48675f9367a427359682873173fb Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Wed, 1 Jan 2025 03:23:18 +0100 Subject: [PATCH 180/301] remove gpick because it doesn't build --- modules/desktop/default.nix | 1 - 1 file changed, 1 deletion(-) diff --git a/modules/desktop/default.nix b/modules/desktop/default.nix index 94249e1..2ebd6ef 100644 --- a/modules/desktop/default.nix +++ b/modules/desktop/default.nix @@ -126,7 +126,6 @@ in ddccontrol-db firebird-emu gitg - gpick qdirstat ffmpeg_7-full From acb47d0372ac485a2db9a58fc17270a358bc96eb Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Wed, 1 Jan 2025 03:23:27 +0100 Subject: [PATCH 181/301] try out iamb --- modules/desktop/social.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/modules/desktop/social.nix b/modules/desktop/social.nix index 10c05d0..2dcde86 100644 --- a/modules/desktop/social.nix +++ b/modules/desktop/social.nix @@ -21,6 +21,7 @@ in mumble element-desktop pkgs.evolution-data-server-gtk4 + iamb ]; }; programs.evolution = { From 974b04c35a76a95bdb5b3f315646ab32b56a0e55 Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Wed, 1 Jan 2025 03:23:44 +0100 Subject: [PATCH 182/301] fix google fonts --- common.nix | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/common.nix b/common.nix index fd64708..3733b71 100644 --- a/common.nix +++ b/common.nix @@ -139,6 +139,15 @@ with builtins; { nixpkgs.config.packageOverrides = pkgs: { sudo = pkgs.sudo.override {withInsults = true;}; + google-fonts = pkgs.google-fonts.overrideAttrs (oldAttrs: { + src = pkgs.fetchFromGitHub { + owner = "google"; + repo = "fonts"; + rev = "c06520efccd2c99d970b536d4f62cb4d95b4e6b2"; + sha256 = "sha256-9TzeihEKIEDRtDuv+NmLWjTpoGnBR+RP/jIBfB1O06U="; + }; + installPhase = oldAttrs.installPhase + "mv $out/share/fonts/truetype $out/share/fonts/ttf"; + }); }; security.sudo.extraConfig = "Defaults insults"; From 59108c554a95a048577e916b0f968246f95a0b36 Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Wed, 1 Jan 2025 03:40:04 +0100 Subject: [PATCH 183/301] do program shit in common.nix --- common.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/common.nix b/common.nix index 3733b71..94f3d5f 100644 --- a/common.nix +++ b/common.nix @@ -47,8 +47,8 @@ with builtins; { htmlq + ausweisapp prusa-slicer - zed-editor wget git neofetch @@ -66,8 +66,8 @@ with builtins; { cool-retro-term maven + zed-editor jetbrains.idea-ultimate - jetbrains.rust-rover jdk libsecret From 59db5f0ffa00fb24a67b7aca1ea20848d411a5af Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Wed, 1 Jan 2025 03:40:14 +0100 Subject: [PATCH 184/301] flake.lock: Update MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Flake lock file updates: • Updated input 'mac-brcm-fw': 'path:/home/jade/nix-configs/mac-brcm-fw?lastModified=1709065070&narHash=sha256-%2BkW8ogc6DykjMVlrr%2B3vWKs9ZUdJ9EW72LbY7k/Qvh4%3D' (2024-02-27) → 'path:/home/jade/nix-configs/mac-brcm-fw?lastModified=1735699162&narHash=sha256-%2BkW8ogc6DykjMVlrr%2B3vWKs9ZUdJ9EW72LbY7k/Qvh4%3D' (2025-01-01) --- flake.lock | 66 +++++++++++++++++++++++++++--------------------------- 1 file changed, 33 insertions(+), 33 deletions(-) diff --git a/flake.lock b/flake.lock index 7fa1026..159fdeb 100644 --- a/flake.lock +++ b/flake.lock @@ -2,11 +2,11 @@ "nodes": { "crane": { "locked": { - "lastModified": 1732407143, - "narHash": "sha256-qJOGDT6PACoX+GbNH2PPx2ievlmtT1NVeTB80EkRLys=", + "lastModified": 1734808813, + "narHash": "sha256-3aH/0Y6ajIlfy7j52FGZ+s4icVX0oHhqBzRdlOeztqg=", "owner": "ipetkov", "repo": "crane", - "rev": "f2b4b472983817021d9ffb60838b2b36b9376b20", + "rev": "72e2d02dbac80c8c86bf6bf3e785536acf8ee926", "type": "github" }, "original": { @@ -23,11 +23,11 @@ "rust-analyzer-src": "rust-analyzer-src" }, "locked": { - "lastModified": 1732689334, - "narHash": "sha256-yKI1KiZ0+bvDvfPTQ1ZT3oP/nIu3jPYm4dnbRd6hYg4=", + "lastModified": 1735626869, + "narHash": "sha256-hWGkpAWB59YWAOtBC6AE3DDnhMrBaqtiOaw1g+/mdLU=", "owner": "nix-community", "repo": "fenix", - "rev": "a8a983027ca02b363dfc82fbe3f7d9548a8d3dce", + "rev": "120e688c881f2233f053dca5a5ddb8945d8ca5d7", "type": "github" }, "original": { @@ -99,11 +99,11 @@ "rust-overlay": "rust-overlay" }, "locked": { - "lastModified": 1732735497, - "narHash": "sha256-qaiRKT4T+kRAMwfFf1fIJ5pwCcaLp2dfNpT65C4uWuE=", + "lastModified": 1735674113, + "narHash": "sha256-X2+0+s6qNxrD+ySlD15jr5H314jOKMKJHBzbtNw1cBk=", "owner": "helix-editor", "repo": "helix", - "rev": "e1d1a5c5a12127ded88dfcf66dd74aad1650977c", + "rev": "b1759f998d527b7014b6be1eb26a518e1b5927c4", "type": "github" }, "original": { @@ -119,11 +119,11 @@ ] }, "locked": { - "lastModified": 1732793095, - "narHash": "sha256-6TrknJ8CpvSSF4gviQSeD+wyj3siRcMvdBKhOXkEMKU=", + "lastModified": 1735381016, + "narHash": "sha256-CyCZFhMUkuYbSD6bxB/r43EdmDE7hYeZZPTCv0GudO4=", "owner": "nix-community", "repo": "home-manager", - "rev": "2f7739d01080feb4549524e8f6927669b61c6ee3", + "rev": "10e99c43cdf4a0713b4e81d90691d22c6a58bdf2", "type": "github" }, "original": { @@ -135,11 +135,11 @@ "lix": { "flake": false, "locked": { - "lastModified": 1731683711, - "narHash": "sha256-bq21I1EjXJa/s5Rra9J9ot2NkPCnI0F5uNPurwYLdpE=", - "rev": "c859d03013712b349d82ee6223948d6d03e63a8d", + "lastModified": 1733448312, + "narHash": "sha256-id5U81bzXk/Lg900nGLM4CQb0wmTdzIvQz7CZk2OcTM=", + "rev": "2a9e560570982a91937d199af3e7b7a8f3cbe14b", "type": "tarball", - "url": "https://git.lix.systems/api/v1/repos/lix-project/lix/archive/c859d03013712b349d82ee6223948d6d03e63a8d.tar.gz?rev=c859d03013712b349d82ee6223948d6d03e63a8d" + "url": "https://git.lix.systems/api/v1/repos/lix-project/lix/archive/2a9e560570982a91937d199af3e7b7a8f3cbe14b.tar.gz?rev=2a9e560570982a91937d199af3e7b7a8f3cbe14b" }, "original": { "type": "tarball", @@ -156,11 +156,11 @@ ] }, "locked": { - "lastModified": 1732603698, - "narHash": "sha256-Jw2MhzgCCrKV2MJytehG0cCLIAosBX71p8qmQ6XQlR4=", + "lastModified": 1733522213, + "narHash": "sha256-H+Pk19MzvI/TAbXWimUPZAoKkD56OSyxJBm8lVIA5n0=", "ref": "refs/heads/main", - "rev": "15b999f9c958c475f71fb8c543b9fc2f36ae8730", - "revCount": 123, + "rev": "c374ebf5548c7b6d4bf884369a5b6879cfc916ea", + "revCount": 124, "type": "git", "url": "https://git.lix.systems/lix-project/nixos-module" }, @@ -172,7 +172,7 @@ "mac-brcm-fw": { "flake": false, "locked": { - "lastModified": 1709065070, + "lastModified": 1735699162, "narHash": "sha256-+kW8ogc6DykjMVlrr+3vWKs9ZUdJ9EW72LbY7k/Qvh4=", "path": "/home/jade/nix-configs/mac-brcm-fw", "type": "path" @@ -200,11 +200,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1732521221, - "narHash": "sha256-2ThgXBUXAE1oFsVATK1ZX9IjPcS4nKFOAjhPNKuiMn0=", + "lastModified": 1735471104, + "narHash": "sha256-0q9NGQySwDQc7RhAV2ukfnu7Gxa5/ybJ2ANT8DQrQrs=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "4633a7c72337ea8fd23a4f2ba3972865e3ec685d", + "rev": "88195a94f390381c6afcdaa933c2f6ff93959cb4", "type": "github" }, "original": { @@ -215,11 +215,11 @@ }, "nixpkgs-stable": { "locked": { - "lastModified": 1732749044, - "narHash": "sha256-T38FQOg0BV5M8FN1712fovzNakSOENEYs+CSkg31C9Y=", + "lastModified": 1735563628, + "narHash": "sha256-OnSAY7XDSx7CtDoqNh8jwVwh4xNL/2HaJxGjryLWzX8=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "0c5b4ecbed5b155b705336aa96d878e55acd8685", + "rev": "b134951a4c9f3c995fd7be05f3243f8ecd65d798", "type": "github" }, "original": { @@ -230,11 +230,11 @@ }, "nixpkgs-unstable-small": { "locked": { - "lastModified": 1732780316, - "narHash": "sha256-NskLIz0ue4Uqbza+1+8UGHuPVr8DrUiLfZu5VS4VQxw=", + "lastModified": 1735667141, + "narHash": "sha256-OdxSR4u4QQ/cnBWJBdbg9gMHQkJ2AQaOFif9965iciE=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "226216574ada4c3ecefcbbec41f39ce4655f78ef", + "rev": "ffd125e27fecc4e5b935413276143a97449fcfd8", "type": "github" }, "original": { @@ -260,11 +260,11 @@ "rust-analyzer-src": { "flake": false, "locked": { - "lastModified": 1732633904, - "narHash": "sha256-7VKcoLug9nbAN2txqVksWHHJplqK9Ou8dXjIZAIYSGc=", + "lastModified": 1735570005, + "narHash": "sha256-ekN1mLeHM9upiAXykoNm646ctsm0qcS8+G2SjGtXp5k=", "owner": "rust-lang", "repo": "rust-analyzer", - "rev": "8d5e91c94f80c257ce6dbdfba7bd63a5e8a03fa6", + "rev": "1c6b83852b0d3bc129a3558386663373f126337e", "type": "github" }, "original": { From f64f61b9b6004398ba37c88a41eac6763cc17e3d Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Wed, 1 Jan 2025 04:47:30 +0100 Subject: [PATCH 185/301] largely remove defaults --- other/config.nu | 743 +----------------------------------------------- 1 file changed, 8 insertions(+), 735 deletions(-) diff --git a/other/config.nu b/other/config.nu index 6537149..275be1a 100644 --- a/other/config.nu +++ b/other/config.nu @@ -1,20 +1,8 @@ -# Nushell Config File -# -# version = "0.84.0" - -# For more information on defining custom themes, see -# https://www.nushell.sh/book/coloring_and_theming.html -# And here is the theme collection -# https://github.com/nushell/nu_scripts/tree/main/themes -let dark_theme = { - # color for nushell primitives +let colors = { separator: white leading_trailing_space_bg: { attr: n } # no fg, no bg, attr none effectively turns this off header: green_bold empty: blue - # Closures can be used to choose colors for specific values. - # The value (in this case, a bool) is piped into the closure. - # eg) {|| if $in { 'light_cyan' } else { 'light_gray' } } bool: light_cyan int: white filesize: cyan @@ -46,7 +34,6 @@ let dark_theme = { shape_filepath: cyan shape_flag: blue_bold shape_float: purple_bold - # shapes are used to change the cli syntax highlighting shape_garbage: { fg: white bg: red attr: b} shape_globpattern: cyan_bold shape_int: purple_bold @@ -70,159 +57,29 @@ let dark_theme = { shape_vardecl: purple } -let light_theme = { - # color for nushell primitives - separator: dark_gray - leading_trailing_space_bg: { attr: n } # no fg, no bg, attr none effectively turns this off - header: green_bold - empty: blue - # Closures can be used to choose colors for specific values. - # The value (in this case, a bool) is piped into the closure. - # eg) {|| if $in { 'dark_cyan' } else { 'dark_gray' } } - bool: dark_cyan - int: dark_gray - filesize: cyan_bold - duration: dark_gray - date: purple - range: dark_gray - float: dark_gray - string: dark_gray - nothing: dark_gray - binary: dark_gray - cellpath: dark_gray - row_index: green_bold - record: white - list: white - block: white - hints: dark_gray - search_result: {fg: white bg: red} - shape_and: purple_bold - shape_binary: purple_bold - shape_block: blue_bold - shape_bool: light_cyan - shape_closure: green_bold - shape_custom: green - shape_datetime: cyan_bold - shape_directory: cyan - shape_external: cyan - shape_externalarg: green_bold - shape_filepath: cyan - shape_flag: blue_bold - shape_float: purple_bold - # shapes are used to change the cli syntax highlighting - shape_garbage: { fg: white bg: red attr: b} - shape_globpattern: cyan_bold - shape_int: purple_bold - shape_internalcall: cyan_bold - shape_list: cyan_bold - shape_literal: blue - shape_match_pattern: green - shape_matching_brackets: { attr: u } - shape_nothing: light_cyan - shape_operator: yellow - shape_or: purple_bold - shape_pipe: purple_bold - shape_range: yellow_bold - shape_record: cyan_bold - shape_redirection: purple_bold - shape_signature: green_bold - shape_string: green - shape_string_interpolation: cyan_bold - shape_table: blue_bold - shape_variable: purple - shape_vardecl: purple -} - -# External completer example -# let carapace_completer = {|spans| -# carapace $spans.0 nushell $spans | from json -# } - -# The default config record. This is where much of your global configuration is setup. $env.config = { show_banner: false # true or false to enable or disable the welcome banner at startup ls: { use_ls_colors: true # use the LS_COLORS environment variable to colorize output - clickable_links: true # enable or disable clickable links. Your terminal has to support links. } - rm: { - always_trash: true # always act as if -t was given. Can be overridden with -p + always_trash: true } table: { mode: reinforced # basic, compact, compact_double, light, thin, with_love, rounded, reinforced, heavy, none, other - index_mode: always # "always" show indexes, "never" show indexes, "auto" = show indexes when a table has "index" column - show_empty: true # show 'empty list' and 'empty record' placeholders for command output - padding: { left: 1, right: 1 } # a left right padding of each column in a table - trim: { - methodology: wrapping # wrapping or truncating - wrapping_try_keep_words: true # A strategy used by the 'wrapping' methodology - truncating_suffix: "..." # A suffix used by the 'truncating' methodology - } - header_on_separator: false # show header text on separator/border line - } - - # datetime_format determines what a datetime rendered in the shell would look like. - # Behavior without this configuration point will be to "humanize" the datetime display, - # showing something like "a day ago." - datetime_format: { - # normal: '%a, %d %b %Y %H:%M:%S %z' # shows up in displays of variables or other datetime's outside of tables - # table: '%m/%d/%y %I:%M:%S%p' # generally shows up in tabular outputs such as ls. commenting this out will change it to the default human readable datetime format - } - - explore: { - try: { - border_color: {fg: "white"} - }, - status_bar_background: {fg: "#ebdbb2", bg: "#504945"}, - command_bar_text: {fg: "#ebdbb2"}, - highlight: {fg: "black", bg: "yellow"}, - status: { - error: {fg: "white", bg: "red"}, - warn: {} - info: {} - }, - table: { - split_line: {fg: "#404040"}, - selected_cell: {}, - selected_row: {}, - selected_column: {}, - show_cursor: true, - line_head_top: true, - line_head_bottom: true, - line_shift: true, - line_index: true, - }, - config: { - border_color: {fg: "white"} - cursor_color: {fg: "black", bg: "light_yellow"} - }, + header_on_separator: true # show header text on separator/border line } history: { - max_size: 100_000 # Session has to be reloaded for this to take effect - sync_on_enter: true # Enable to share history between multiple sessions, else you have to close the session to write history to file - file_format: "sqlite" # "sqlite" or "plaintext" - isolation: false # only available with sqlite file_format. true enables history isolation, false disables it. true will allow the history to be isolated to the current session using up/down arrows. false will allow the history to be shared across all sessions. + max_size: 1_000_000_000 # Session has to be reloaded for this to take effect + isolation: false } completions: { - case_sensitive: false # set to true to enable case-sensitive completions - quick: true # set this to false to prevent auto-selecting completions when only one remains - partial: true # set this to false to prevent partial filling of the prompt algorithm: "fuzzy" # prefix or fuzzy - external: { - enable: true # set to false to prevent nushell looking into $env.PATH to find more suggestions, `false` recommended for WSL users as this look up may be very slow - max_results: 100 # setting it lower can improve completion performance at the cost of omitting some options - # completer: $carapace_completer # check 'carapace_completer' above as an example - } - } - - filesize: { - metric: true # true => KB, MB, GB (ISO standard), false => KiB, MiB, GiB (Windows standard) - format: "auto" # b, kb, kib, mb, mib, gb, gib, tb, tib, pb, pib, eb, eib, auto + sort: "smart" } cursor_shape: { @@ -231,605 +88,21 @@ $env.config = { vi_normal: block # block, underscore, line, blink_block, blink_underscore, blink_line (underscore is the default) } - color_config: $dark_theme # if you want a more interesting theme, you can replace the empty record with `$dark_theme`, `$light_theme` or another custom record + color_config: $colors # if you want a more interesting theme, you can replace the empty record with `$dark_theme`, `$light_theme` or another custom record footer_mode: 25 # always, never, number_of_rows, auto float_precision: 2 # the precision for displaying floats in tables buffer_editor: "" # command that will be used to edit the current line buffer with ctrl+o, if unset fallback to $env.EDITOR and $env.VISUAL use_ansi_coloring: true bracketed_paste: true # enable bracketed paste, currently useless on windows edit_mode: vi # emacs, vi - shell_integration: { - # osc2 abbreviates the path if in the home_dir, sets the tab/window title, shows the running command in the tab/window title - osc2: true - # osc7 is a way to communicate the path to the terminal, this is helpful for spawning new tabs in the same directory - osc7: true - # osc8 is also implemented as the deprecated setting ls.show_clickable_links, it shows clickable links in ls output if your terminal supports it. show_clickable_links is deprecated in favor of osc8 - osc8: true - # osc9_9 is from ConEmu and is starting to get wider support. It's similar to osc7 in that it communicates the path to the terminal - osc9_9: false - # osc133 is several escapes invented by Final Term which include the supported ones below. - # 133;A - Mark prompt start - # 133;B - Mark prompt end - # 133;C - Mark pre-execution - # 133;D;exit - Mark execution finished with exit code - # This is used to enable terminals to know where the prompt is, the command is, where the command finishes, and where the output of the command is - osc133: true - # osc633 is closely related to osc133 but only exists in visual studio code (vscode) and supports their shell integration features - # 633;A - Mark prompt start - # 633;B - Mark prompt end - # 633;C - Mark pre-execution - # 633;D;exit - Mark execution finished with exit code - # 633;E - NOT IMPLEMENTED - Explicitly set the command line with an optional nonce - # 633;P;Cwd= - Mark the current working directory and communicate it to the terminal - # and also helps with the run recent menu in vscode - osc633: false - # reset_application_mode is escape \x1b[?1l and was added to help ssh work better - reset_application_mode: true - } - use_kitty_protocol: false - highlight_resolved_externals: true - render_right_prompt_on_last_line: false # true or false to enable or disable right prompt to be rendered on last line of the prompt. + use_kitty_protocol: true hooks: { - pre_prompt: [] pre_execution: [{ $env.CMD_COUNT = $env.CMD_COUNT + 1; }] # run before the repl input is run - env_change: { - PWD: [{|before, after| null }] # run if the PWD environment is different since the last repl input - } - display_output: "if (term size).columns >= 100 { table -e } else { table }" # run to display the output of a pipeline - command_not_found: { null } # return an error message when a command is not found } - - menus: [ - # Configuration for default nushell menus - # Note the lack of source parameter - { - name: completion_menu - only_buffer_difference: false - marker: "| " - type: { - layout: columnar - columns: 4 - col_width: 20 # Optional value. If missing all the screen width is used to calculate column width - col_padding: 2 - } - style: { - text: green - selected_text: green_reverse - description_text: yellow - } - } - { - name: history_menu - only_buffer_difference: true - marker: "? " - type: { - layout: list - page_size: 10 - } - style: { - text: green - selected_text: green_reverse - description_text: yellow - } - } - { - name: help_menu - only_buffer_difference: true - marker: "? " - type: { - layout: description - columns: 4 - col_width: 20 # Optional value. If missing all the screen width is used to calculate column width - col_padding: 2 - selection_rows: 4 - description_rows: 10 - } - style: { - text: green - selected_text: green_reverse - description_text: yellow - } - } - ] - - keybindings: [ - ################################################################################ - # Custom keybinds # - ################################################################################ - { - name: undo_change - modifier: control - keycode: char_z - mode: [vi_normal, vi_insert] - event: [ - { edit: Clear } - { - edit: InsertString - value: "zellij attach main -c" - } - { send: Enter } - ] - } - - ################################################################################ - # Default keybinds # - ################################################################################ - { - name: completion_menu - modifier: none - keycode: tab - mode: [emacs vi_normal vi_insert] - event: { - until: [ - { send: menu name: completion_menu } - { send: menunext } - ] - } - } - { - name: history_menu - modifier: control - keycode: char_r - mode: [emacs, vi_insert, vi_normal] - event: { send: menu name: history_menu } - } - { - name: help_menu - modifier: none - keycode: f1 - mode: [emacs, vi_insert, vi_normal] - event: { send: menu name: help_menu } - } - { - name: completion_previous_menu - modifier: shift - keycode: backtab - mode: [emacs, vi_normal, vi_insert] - event: { send: menuprevious } - } - { - name: next_page_menu - modifier: control - keycode: char_x - mode: emacs - event: { send: menupagenext } - } - { - name: undo_or_previous_page_menu - modifier: control - keycode: char_z - mode: emacs - event: { - until: [ - { send: menupageprevious } - { edit: undo } - ] - } - } - { - name: escape - modifier: none - keycode: escape - mode: [emacs, vi_normal, vi_insert] - event: { send: esc } # NOTE: does not appear to work - } - { - name: cancel_command - modifier: control - keycode: char_c - mode: [emacs, vi_normal, vi_insert] - event: { send: ctrlc } - } - { - name: quit_shell - modifier: control - keycode: char_d - mode: [emacs, vi_normal, vi_insert] - event: { send: ctrld } - } - { - name: clear_screen - modifier: control - keycode: char_l - mode: [emacs, vi_normal, vi_insert] - event: { send: clearscreen } - } - { - name: search_history - modifier: control - keycode: char_q - mode: [emacs, vi_normal, vi_insert] - event: { send: searchhistory } - } - { - name: open_command_editor - modifier: control - keycode: char_o - mode: [emacs, vi_normal, vi_insert] - event: { send: openeditor } - } - { - name: move_up - modifier: none - keycode: up - mode: [emacs, vi_normal, vi_insert] - event: { - until: [ - {send: menuup} - {send: up} - ] - } - } - { - name: move_down - modifier: none - keycode: down - mode: [emacs, vi_normal, vi_insert] - event: { - until: [ - {send: menudown} - {send: down} - ] - } - } - { - name: move_left - modifier: none - keycode: left - mode: [emacs, vi_normal, vi_insert] - event: { - until: [ - {send: menuleft} - {send: left} - ] - } - } - { - name: move_right_or_take_history_hint - modifier: none - keycode: right - mode: [emacs, vi_normal, vi_insert] - event: { - until: [ - {send: historyhintcomplete} - {send: menuright} - {send: right} - ] - } - } - { - name: move_one_word_left - modifier: control - keycode: left - mode: [emacs, vi_normal, vi_insert] - event: {edit: movewordleft} - } - { - name: move_one_word_right_or_take_history_hint - modifier: control - keycode: right - mode: [emacs, vi_normal, vi_insert] - event: { - until: [ - {send: historyhintwordcomplete} - {edit: movewordright} - ] - } - } - { - name: move_to_line_start - modifier: none - keycode: home - mode: [emacs, vi_normal, vi_insert] - event: {edit: movetolinestart} - } - { - name: move_to_line_start - modifier: control - keycode: char_a - mode: [emacs, vi_normal, vi_insert] - event: {edit: movetolinestart} - } - { - name: move_to_line_end_or_take_history_hint - modifier: none - keycode: end - mode: [emacs, vi_normal, vi_insert] - event: { - until: [ - {send: historyhintcomplete} - {edit: movetolineend} - ] - } - } - { - name: move_to_line_end_or_take_history_hint - modifier: control - keycode: char_e - mode: [emacs, vi_normal, vi_insert] - event: { - until: [ - {send: historyhintcomplete} - {edit: movetolineend} - ] - } - } - { - name: move_to_line_start - modifier: control - keycode: home - mode: [emacs, vi_normal, vi_insert] - event: {edit: movetolinestart} - } - { - name: move_to_line_end - modifier: control - keycode: end - mode: [emacs, vi_normal, vi_insert] - event: {edit: movetolineend} - } - { - name: move_up - modifier: control - keycode: char_p - mode: [emacs, vi_normal, vi_insert] - event: { - until: [ - {send: menuup} - {send: up} - ] - } - } - { - name: move_down - modifier: control - keycode: char_t - mode: [emacs, vi_normal, vi_insert] - event: { - until: [ - {send: menudown} - {send: down} - ] - } - } - { - name: delete_one_character_backward - modifier: none - keycode: backspace - mode: [emacs, vi_insert] - event: {edit: backspace} - } - { - name: delete_one_word_backward - modifier: control - keycode: backspace - mode: [emacs, vi_insert] - event: {edit: backspaceword} - } - { - name: delete_one_character_forward - modifier: none - keycode: delete - mode: [emacs, vi_insert] - event: {edit: delete} - } - { - name: delete_one_character_forward - modifier: control - keycode: delete - mode: [emacs, vi_insert] - event: {edit: delete} - } - { - name: delete_one_character_forward - modifier: control - keycode: char_h - mode: [emacs, vi_insert] - event: {edit: backspace} - } - { - name: delete_one_word_backward - modifier: control - keycode: char_w - mode: [emacs, vi_insert] - event: {edit: backspaceword} - } - { - name: move_left - modifier: none - keycode: backspace - mode: vi_normal - event: {edit: moveleft} - } - { - name: newline_or_run_command - modifier: none - keycode: enter - mode: emacs - event: {send: enter} - } - { - name: move_left - modifier: control - keycode: char_b - mode: emacs - event: { - until: [ - {send: menuleft} - {send: left} - ] - } - } - { - name: move_right_or_take_history_hint - modifier: control - keycode: char_f - mode: emacs - event: { - until: [ - {send: historyhintcomplete} - {send: menuright} - {send: right} - ] - } - } - { - name: redo_change - modifier: control - keycode: char_g - mode: emacs - event: {edit: redo} - } - { - name: undo_change - modifier: control - keycode: char_z - mode: emacs - event: {edit: undo} - } - { - name: paste_before - modifier: control - keycode: char_y - mode: emacs - event: {edit: pastecutbufferbefore} - } - { - name: cut_word_left - modifier: control - keycode: char_w - mode: emacs - event: {edit: cutwordleft} - } - { - name: cut_line_to_end - modifier: control - keycode: char_k - mode: emacs - event: {edit: cuttoend} - } - { - name: cut_line_from_start - modifier: control - keycode: char_u - mode: emacs - event: {edit: cutfromstart} - } - { - name: swap_graphemes - modifier: control - keycode: char_t - mode: emacs - event: {edit: swapgraphemes} - } - { - name: move_one_word_left - modifier: alt - keycode: left - mode: emacs - event: {edit: movewordleft} - } - { - name: move_one_word_right_or_take_history_hint - modifier: alt - keycode: right - mode: emacs - event: { - until: [ - {send: historyhintwordcomplete} - {edit: movewordright} - ] - } - } - { - name: move_one_word_left - modifier: alt - keycode: char_b - mode: emacs - event: {edit: movewordleft} - } - { - name: move_one_word_right_or_take_history_hint - modifier: alt - keycode: char_f - mode: emacs - event: { - until: [ - {send: historyhintwordcomplete} - {edit: movewordright} - ] - } - } - { - name: delete_one_word_forward - modifier: alt - keycode: delete - mode: emacs - event: {edit: deleteword} - } - { - name: delete_one_word_backward - modifier: alt - keycode: backspace - mode: emacs - event: {edit: backspaceword} - } - { - name: delete_one_word_backward - modifier: alt - keycode: char_m - mode: emacs - event: {edit: backspaceword} - } - { - name: cut_word_to_right - modifier: alt - keycode: char_d - mode: emacs - event: {edit: cutwordright} - } - { - name: upper_case_word - modifier: alt - keycode: char_u - mode: emacs - event: {edit: uppercaseword} - } - { - name: lower_case_word - modifier: alt - keycode: char_l - mode: emacs - event: {edit: lowercaseword} - } - { - name: capitalize_char - modifier: alt - keycode: char_c - mode: emacs - event: {edit: capitalizechar} - } - ] } -# STOLEN FROM: https://www.grailbox.com/2023/07/autostart-zellij-in-nushell/ -# zellij -def start_zellij [] { - if 'ZELLIJ' not-in ($env | columns) { - if 'ZELLIJ_AUTO_ATTACH' in ($env | columns) and $env.ZELLIJ_AUTO_ATTACH == 'true' { - zellij attach -c - } else { - zellij - } - - if 'ZELLIJ_AUTO_EXIT' in ($env | columns) and $env.ZELLIJ_AUTO_EXIT == 'true' { - exit - } - } -} - # start_zellij def nsp [ From 2ce0df9880cfe5f58b3ccc16f4c7f8b7dc5d6348 Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Wed, 1 Jan 2025 05:16:08 +0100 Subject: [PATCH 186/301] rewrite nu shit --- modules/shell/nu.nix | 10 +- modules/shell/nu/aliases.nu | 28 ++++++ {other => modules/shell/nu}/config.nu | 92 ------------------- modules/shell/nu/custom_commands.nu | 67 ++++++++++++++ {other => modules/shell/nu}/env.nu | 0 .../shell/nu}/shell-startup.nu | 0 6 files changed, 101 insertions(+), 96 deletions(-) create mode 100644 modules/shell/nu/aliases.nu rename {other => modules/shell/nu}/config.nu (61%) create mode 100644 modules/shell/nu/custom_commands.nu rename {other => modules/shell/nu}/env.nu (100%) rename {other/scripts/desktop => modules/shell/nu}/shell-startup.nu (100%) diff --git a/modules/shell/nu.nix b/modules/shell/nu.nix index 30b4347..54ec9a8 100644 --- a/modules/shell/nu.nix +++ b/modules/shell/nu.nix @@ -13,14 +13,14 @@ pkgs.pueue ]; home.file."shell-startup" = { - source = ../../other/scripts/desktop/shell-startup.nu; + source = ./nu/shell-startup.nu; target = ".config/nushell/shell-startup.nu"; }; programs.nushell = { enable = true; package = config.users.defaultUserShell; - configFile.source = ../../other/config.nu; - envFile.source = ../../other/env.nu; + configFile.source = ./nu/config.nu; + envFile.source = ./nu/env.nu; extraConfig = '' plugin add ${pkgs.nushellPlugins.query}/bin/nu_plugin_query; plugin add ${pkgs.nushellPlugins.polars}/bin/nu_plugin_polars; @@ -30,7 +30,9 @@ plugin use polars; plugin use formats; - nu ${../../other/scripts/desktop/shell-startup.nu}; + source ${./nu/custom_commands.nu}; + source ${./nu/aliases.nu}; + nu ${./nu/shell-startup.nu}; ''; extraEnv = '' ''; diff --git a/modules/shell/nu/aliases.nu b/modules/shell/nu/aliases.nu new file mode 100644 index 0000000..5e1287b --- /dev/null +++ b/modules/shell/nu/aliases.nu @@ -0,0 +1,28 @@ + +alias gnix = cd ~/nix-configs; +alias grepo = cd ~/Documents/repos; +alias wh = wormhole-rs; + +alias gg = gitui; +alias ga = git add; +alias gc = git commit; +alias gca = git commit --all; +alias gp = git push; +alias gl = git pull; +alias gs = git status; +alias clip = xclip -selection c; + +alias cr = cargo run; +alias cl = cargo clippy; +alias cb = cargo build; +alias cch = cargo check; + +alias togglecaps = xdotool key Caps_Lock; +alias TOGGLECAPS = togglecaps; + +alias bash = echo $"(ansi red)no, fuck that shit!"; +alias sh = echo $"(ansi red)no, fuck that shit!"; +alias zsh = echo $"(ansi red)no, fuck that shit!"; +alias fish = echo $"(ansi red)no, fuck that shit!"; + +alias px = pulsemixer; diff --git a/other/config.nu b/modules/shell/nu/config.nu similarity index 61% rename from other/config.nu rename to modules/shell/nu/config.nu index 275be1a..c2348f0 100644 --- a/other/config.nu +++ b/modules/shell/nu/config.nu @@ -101,95 +101,3 @@ $env.config = { pre_execution: [{ $env.CMD_COUNT = $env.CMD_COUNT + 1; }] # run before the repl input is run } } - - -# start_zellij - -def nsp [ - ...programs: string -] { - nix shell ...($programs | each {|it| $"nixpkgs#($it)" }) -} - -def nr [ - program: string -] { - nix run $"nixpkgs#($program)" -} - -def lcr [ - file_extension: string -] { - ls **/* - | where name ends-with $".($file_extension)" - | par-each {|file| - open $file.name - | lines --skip-empty - | length } - | math sum -} - -def glog [ - amount: int -] { - git log --pretty=%h»¦«%s»¦«%aN»¦«%aE»¦«%aD -n $amount - | lines - | split column "»¦«" commit subject name email date -} - -def typed [ - name: string -] { - touch $"($name).typ" - typst compile $"($name).typ" - mprocs --names Editor,Viewer,Notify $"hx '($name).typ'" $"while true; do mupdf-x11 '($name).pdf' && break; done" $"while inotifywait -e modify '($name).pdf' ; do pkill -HUP mupdf; done" -} - -def nev [ unit = day ] { - ( ( open Docs/dates.csv - | update datetime {|it| $it.datetime | into datetime } - | first - ).datetime - (date now) - ) - | into duration - | format duration $unit -} - -# TODO: intermediate stations -def bx [from: string to: string] { - let map = open ~/Docs/ril100map.json; - let start = $map | get ($from | str upcase) | first; - let dest = $map | get ($to | str upcase) | first; - - let url = $"https://bahn.expert/routing/($start)/($dest)/0/"; - print $url; - ^bash -c $"nohup chromium '($url)' &"; -} - -alias gnix = cd ~/nix-configs; -alias grepo = cd ~/Documents/repos; -alias wh = wormhole-rs; - -alias gg = gitui; -alias ga = git add; -alias gc = git commit; -alias gca = git commit --all; -alias gp = git push; -alias gl = git pull; -alias gs = git status; -alias clip = xclip -selection c; - -alias cr = cargo run; -alias cl = cargo clippy; -alias cb = cargo build; -alias cch = cargo check; - -alias togglecaps = xdotool key Caps_Lock; -alias TOGGLECAPS = togglecaps; - -alias bash = echo $"(ansi red)no, fuck that shit!"; -alias sh = echo $"(ansi red)no, fuck that shit!"; -alias zsh = echo $"(ansi red)no, fuck that shit!"; -alias fish = echo $"(ansi red)no, fuck that shit!"; - -alias px = pulsemixer; diff --git a/modules/shell/nu/custom_commands.nu b/modules/shell/nu/custom_commands.nu new file mode 100644 index 0000000..e3581f3 --- /dev/null +++ b/modules/shell/nu/custom_commands.nu @@ -0,0 +1,67 @@ +# open nix shell with a bunch of programs +def nsp [ + ...programs: string +] { + nix shell ...($programs | each {|it| $"nixpkgs#($it)" }) +} + +# do a nix run of a nix package +def nr [ + program: string +] { + nix run $"nixpkgs#($program)" +} + +# do a recursive line count of a file extension +def lcr [ + file_extension: string +] { + ls **/* + | where name ends-with $".($file_extension)" + | par-each {|file| + open $file.name + | lines --skip-empty + | length } + | math sum +} + +# get parsed git log +def glog [ + amount: int +] { + git log --pretty=%h»¦«%s»¦«%aN»¦«%aE»¦«%aD -n $amount + | lines + | split column "»¦«" commit subject name email date +} + +# open typst IDE ish setup +def typed [ + name: string +] { + touch $"($name).typ" + typst compile $"($name).typ" + mprocs --names Editor,Viewer,Notify $"hx '($name).typ'" $"while true; do mupdf-x11 '($name).pdf' && break; done" $"while inotifywait -e modify '($name).pdf' ; do pkill -HUP mupdf; done" +} + +# figure out when the next event is +def nev [ unit = day ] { + ( ( open Docs/dates.csv + | update datetime {|it| $it.datetime | into datetime } + | first + ).datetime - (date now) + ) + | into duration + | format duration $unit +} + +# open chromium with bahn.expert opened and ready +# TODO: intermediate stations +def bx [from: string to: string] { + let map = open ~/Docs/ril100map.json; + let start = $map | get ($from | str upcase) | first; + let dest = $map | get ($to | str upcase) | first; + + let url = $"https://bahn.expert/routing/($start)/($dest)/0/"; + print $url; + ^bash -c $"nohup chromium '($url)' &"; +} diff --git a/other/env.nu b/modules/shell/nu/env.nu similarity index 100% rename from other/env.nu rename to modules/shell/nu/env.nu diff --git a/other/scripts/desktop/shell-startup.nu b/modules/shell/nu/shell-startup.nu similarity index 100% rename from other/scripts/desktop/shell-startup.nu rename to modules/shell/nu/shell-startup.nu From 7d335a83732a472337fe06723d88536db916d399 Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Wed, 1 Jan 2025 05:42:14 +0100 Subject: [PATCH 187/301] remove empty newline at start of aliases file --- modules/shell/nu/aliases.nu | 1 - 1 file changed, 1 deletion(-) diff --git a/modules/shell/nu/aliases.nu b/modules/shell/nu/aliases.nu index 5e1287b..f2cce90 100644 --- a/modules/shell/nu/aliases.nu +++ b/modules/shell/nu/aliases.nu @@ -1,4 +1,3 @@ - alias gnix = cd ~/nix-configs; alias grepo = cd ~/Documents/repos; alias wh = wormhole-rs; From ff5e965db1269299e695d077d7c8e4a7e2e45b6a Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Wed, 1 Jan 2025 06:08:52 +0100 Subject: [PATCH 188/301] experimentally use departure mono as status bar font --- modules/desktop-environment/home/panels/eww/configDir/eww.css | 2 +- modules/desktop/fonts.nix | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/modules/desktop-environment/home/panels/eww/configDir/eww.css b/modules/desktop-environment/home/panels/eww/configDir/eww.css index 7186cab..94ff7aa 100644 --- a/modules/desktop-environment/home/panels/eww/configDir/eww.css +++ b/modules/desktop-environment/home/panels/eww/configDir/eww.css @@ -1,5 +1,5 @@ label { - font: 14pt "FiraCode Nerd Font"; + font: 14pt "Departure Mono Nerd Font"; } .workspaces button { diff --git a/modules/desktop/fonts.nix b/modules/desktop/fonts.nix index 81f6c8c..df6d522 100644 --- a/modules/desktop/fonts.nix +++ b/modules/desktop/fonts.nix @@ -1,6 +1,7 @@ {pkgs, ...}: { fonts.packages = with pkgs; [ nerd-fonts.fira-code + nerd-fonts.departure-mono google-fonts montserrat noto-fonts From 117bdea98a84773265344a8c11dff4c78186af93 Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Fri, 3 Jan 2025 17:24:21 +0100 Subject: [PATCH 189/301] add a criminally stupid cursed fucking template system to this config for automatically editing nix files --- build-utils/templ-edit.nu | 47 ++++++++++++++++++++++ modules/desktop-environment/home/typst.nix | 4 +- 2 files changed, 49 insertions(+), 2 deletions(-) create mode 100755 build-utils/templ-edit.nu diff --git a/build-utils/templ-edit.nu b/build-utils/templ-edit.nu new file mode 100755 index 0000000..e38fc89 --- /dev/null +++ b/build-utils/templ-edit.nu @@ -0,0 +1,47 @@ +#!/usr/bin/env nu + +def main [] {} + +def "main find" [ + file: string +] { + open $file --raw + | lines + | enumerate + | update item {|it| $it.item | parse '{current}#:{name}:-{template}-:#' } + | filter {|it| $it.item | is-not-empty} + | flatten -a + | rename -c { index: line } +} + +# TODO: support mroe then single template +def "main edit" [ + file: path + name: string + to: string + --preview +] { + let template = main find $file + | where name == $name + | first; + let new = $template.template + | str replace $"%($name)%" $to + | append $" #:($template.name):-($template.template)-:#" + | str join; + let rest = open $file --raw + | lines + | enumerate + | where index != $template.line + | append { index: $template.line, item: $new} + | sort-by index + | reject index + | get item + | append "" + | str join "\n"; + + if $preview { + print $rest + } else { + $rest | save -f $file + } +} diff --git a/modules/desktop-environment/home/typst.nix b/modules/desktop-environment/home/typst.nix index 4bf4d64..e6fc769 100644 --- a/modules/desktop-environment/home/typst.nix +++ b/modules/desktop-environment/home/typst.nix @@ -4,8 +4,8 @@ domain = "forge.katzen.cafe"; owner = "schrottkatze"; repo = "typst-configs"; - rev = "569cd8525a85878140baf5952597f27fd7ea51d3"; - sha256 = "sha256-4pAammwrFGhpSquEsh4QSd8Hw/ioHm3fMiC5oqNgbAQ="; + rev = "569cd8525a85878140baf5952597f27fd7ea51d3"; #:REV:- rev = "%REV%";-:# + sha256 = "sha256-4pAammwrFGhpSquEsh4QSd8Hw/ioHm3fMiC5oqNgbAQ="; #:SHA:- sha256 = "%SHA%";-:# }; flow = pkgs.fetchFromGitHub { owner = "MultisampledNight"; From 879c0f98233d217520935cdebdd986b9967fb5ab Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Fri, 3 Jan 2025 17:25:36 +0100 Subject: [PATCH 190/301] retheme --- .../home/panels/eww/configDir/eww.css | 5 ++++- modules/desktop-environment/home/terminal.nix | 10 +++++----- modules/shell/helix.nix | 2 +- modules/shell/nu/env.nu | 4 ++-- 4 files changed, 12 insertions(+), 9 deletions(-) diff --git a/modules/desktop-environment/home/panels/eww/configDir/eww.css b/modules/desktop-environment/home/panels/eww/configDir/eww.css index 94ff7aa..a61a23f 100644 --- a/modules/desktop-environment/home/panels/eww/configDir/eww.css +++ b/modules/desktop-environment/home/panels/eww/configDir/eww.css @@ -2,9 +2,12 @@ label { font: 14pt "Departure Mono Nerd Font"; } +.background { + background-color: #1d2021; +} + .workspaces button { border: 0px; - background-color: #282828; } .workspaces button.urgent { diff --git a/modules/desktop-environment/home/terminal.nix b/modules/desktop-environment/home/terminal.nix index c8b3b54..cfa9ac2 100644 --- a/modules/desktop-environment/home/terminal.nix +++ b/modules/desktop-environment/home/terminal.nix @@ -2,13 +2,13 @@ programs.kitty = { enable = true; font = { - name = "FiraCode Nerd Font"; - size = 11; + name = "Departure Mono Nerd Font"; + size = 12; }; keybindings = { "ctrl+shift+n" = "new_os_window_with_cwd"; }; - settings = { + settings = rec { #adjust_column_width = "70%"; color0 = "#282828"; color8 = "#928374"; @@ -26,8 +26,8 @@ color14 = "#8ec07c"; color7 = "#a89984"; color15 = "#ebdbb2"; - foreground = "#ebdbb2"; - background = "#282828"; + foreground = color15; + background = "#1d2021"; confirm_os_window_close = 0; }; }; diff --git a/modules/shell/helix.nix b/modules/shell/helix.nix index ad5b857..1f8a2f2 100644 --- a/modules/shell/helix.nix +++ b/modules/shell/helix.nix @@ -25,7 +25,7 @@ defaultEditor = true; package = helix-inline-diags.outputs.packages."x86_64-linux".default; settings = { - theme = "gruvbox"; + theme = "gruvbox_dark_hard"; editor = { line-number = "relative"; bufferline = "multiple"; diff --git a/modules/shell/nu/env.nu b/modules/shell/nu/env.nu index 908d237..5df3a55 100644 --- a/modules/shell/nu/env.nu +++ b/modules/shell/nu/env.nu @@ -35,9 +35,9 @@ $env.PROMPT_COMMAND = {|| let deco = if ($env.CMD_COUNT == 0) { flag $TRANS "=" $len } else if ($env.CMD_COUNT | is even) { - flag $LESBIAN "-" $len + flag $LESBIAN "–" $len } else { - flag $TRANS "-" $len + flag $TRANS "–" $len }; $item | append $deco | str join From 6bacec4c8484a35d34fdc594aa97ff90a6eba097 Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Fri, 3 Jan 2025 17:25:53 +0100 Subject: [PATCH 191/301] fix (switch to sqlite agian) --- modules/shell/nu/config.nu | 1 + 1 file changed, 1 insertion(+) diff --git a/modules/shell/nu/config.nu b/modules/shell/nu/config.nu index c2348f0..9a53c97 100644 --- a/modules/shell/nu/config.nu +++ b/modules/shell/nu/config.nu @@ -73,6 +73,7 @@ $env.config = { } history: { + file_format: sqlite, max_size: 1_000_000_000 # Session has to be reloaded for this to take effect isolation: false } From 141d4705fb8b1021c3b9b0c32164124f275d0ba2 Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Fri, 3 Jan 2025 17:55:34 +0100 Subject: [PATCH 192/301] commit crimes to live edit nix --- justfile | 9 +++++++++ modules/desktop-environment/home/typst.nix | 4 ++-- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/justfile b/justfile index 3243fda..37f346e 100644 --- a/justfile +++ b/justfile @@ -14,3 +14,12 @@ update: build-mac: sudo nixos-rebuild switch --flake . --impure --override-input mac-brcm-fw path:/home/jade/mac-brcm-fw --fast --log-format multiline + +update-typst-configs: + #!/usr/bin/env nu + let file = './modules/desktop-environment/home/typst.nix'; + let $rev = http get https://forge.katzen.cafe/schrottkatze/typst-configs/commits/branch/main | query web -mq '.commit-list tr:first-of-type a.ui.sha.label' -a href | path basename | first; + ./build-utils/templ-edit.nu edit $file REV $rev; + let $hash = nix-prefetch-url https://forge.katzen.cafe/schrottkatze/typst-configs/archive/main.tar.gz --unpack; + let $sri = nix hash to-sri --type sha256 $hash; + ./build-utils/templ-edit.nu edit $file SHA $sri; diff --git a/modules/desktop-environment/home/typst.nix b/modules/desktop-environment/home/typst.nix index e6fc769..1b7f032 100644 --- a/modules/desktop-environment/home/typst.nix +++ b/modules/desktop-environment/home/typst.nix @@ -4,8 +4,8 @@ domain = "forge.katzen.cafe"; owner = "schrottkatze"; repo = "typst-configs"; - rev = "569cd8525a85878140baf5952597f27fd7ea51d3"; #:REV:- rev = "%REV%";-:# - sha256 = "sha256-4pAammwrFGhpSquEsh4QSd8Hw/ioHm3fMiC5oqNgbAQ="; #:SHA:- sha256 = "%SHA%";-:# + rev = "7e184eecd8c6f87c08246a0bb105867423bd4fbf"; #:REV:- rev = "%REV%";-:# + sha256 = "sha256-Lv5/DxBiG7EUgcOHPL8aqztJ97s+78TXXENB7lb1olM="; #:SHA:- sha256 = "%SHA%";-:# }; flow = pkgs.fetchFromGitHub { owner = "MultisampledNight"; From c42079235f411077b0c27fe6b94f3ea94b83dd78 Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Fri, 3 Jan 2025 19:04:46 +0100 Subject: [PATCH 193/301] mreow --- justfile | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/justfile b/justfile index 37f346e..9d972c9 100644 --- a/justfile +++ b/justfile @@ -9,7 +9,7 @@ build: tbuild: sudo nixos-rebuild switch --flake . --impure --fast --log-format multiline-with-logs --show-trace -update: +update: update-typst-configs nix flake update --commit-lock-file --log-format multiline build-mac: @@ -23,3 +23,5 @@ update-typst-configs: let $hash = nix-prefetch-url https://forge.katzen.cafe/schrottkatze/typst-configs/archive/main.tar.gz --unpack; let $sri = nix hash to-sri --type sha256 $hash; ./build-utils/templ-edit.nu edit $file SHA $sri; + git add $file + git commit -m "typst-configs: Update" From 01a07f54c1c313d4688e86db9a8db77c25450e32 Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Sun, 5 Jan 2025 03:18:47 +0100 Subject: [PATCH 194/301] typst-configs: Update --- modules/desktop-environment/home/typst.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/desktop-environment/home/typst.nix b/modules/desktop-environment/home/typst.nix index 1b7f032..d7d3fcc 100644 --- a/modules/desktop-environment/home/typst.nix +++ b/modules/desktop-environment/home/typst.nix @@ -4,8 +4,8 @@ domain = "forge.katzen.cafe"; owner = "schrottkatze"; repo = "typst-configs"; - rev = "7e184eecd8c6f87c08246a0bb105867423bd4fbf"; #:REV:- rev = "%REV%";-:# - sha256 = "sha256-Lv5/DxBiG7EUgcOHPL8aqztJ97s+78TXXENB7lb1olM="; #:SHA:- sha256 = "%SHA%";-:# + rev = "9a5bd5256ace2a56de51b89793f191b4eecce1dc"; #:REV:- rev = "%REV%";-:# + sha256 = "sha256-E+5fJULNxM0XcbimuENqIJC24ZwPRMSHnG97ncBtEGw="; #:SHA:- sha256 = "%SHA%";-:# }; flow = pkgs.fetchFromGitHub { owner = "MultisampledNight"; From cbf71bded5e31a8459f598ceb848f05e0ce24216 Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Sun, 5 Jan 2025 03:19:06 +0100 Subject: [PATCH 195/301] add uni aliases --- modules/shell/nu/aliases.nu | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/modules/shell/nu/aliases.nu b/modules/shell/nu/aliases.nu index f2cce90..20fe226 100644 --- a/modules/shell/nu/aliases.nu +++ b/modules/shell/nu/aliases.nu @@ -25,3 +25,10 @@ alias zsh = echo $"(ansi red)no, fuck that shit!"; alias fish = echo $"(ansi red)no, fuck that shit!"; alias px = pulsemixer; + +# uni +alias gun = cd ~/Docs/uni; +alias guni = cd ~/Docs/uni/info1; +alias gunids = cd ~/Docs/uni/design; +alias gunida = cd ~/Docs/uni/dramaturgie; +alias gunm = cd ~/Docs/uni/mathe1-3; From edafaf3c144cb36ba5ea8e49846218ad0d5a2522 Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Sun, 5 Jan 2025 03:19:20 +0100 Subject: [PATCH 196/301] improve `typed` command --- modules/shell/nu/custom_commands.nu | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/modules/shell/nu/custom_commands.nu b/modules/shell/nu/custom_commands.nu index e3581f3..5b66b1b 100644 --- a/modules/shell/nu/custom_commands.nu +++ b/modules/shell/nu/custom_commands.nu @@ -38,8 +38,13 @@ def glog [ def typed [ name: string ] { - touch $"($name).typ" - typst compile $"($name).typ" + const DEFAULT_TYPST_FILE = "#import \"@local/typst-configs:0.1.0\": generic, sf;\n#show: generic.with();" + if not ($"($name).typ" | path exists) and not ($"($name).pdf" | path exists) { + $DEFAULT_TYPST_FILE | save $"($name).typ" + typst compile $"($name).typ" + } else if ($"($name).pdf" | path exists) { + typst compile $"($name).typ" + } mprocs --names Editor,Viewer,Notify $"hx '($name).typ'" $"while true; do mupdf-x11 '($name).pdf' && break; done" $"while inotifywait -e modify '($name).pdf' ; do pkill -HUP mupdf; done" } From 3b6367a9f409ad86be685155f8bb0032c4d6408c Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Mon, 6 Jan 2025 07:44:09 +0100 Subject: [PATCH 197/301] add environment variables that home manager should've added but didn't for whatever fucking reason --- modules/shell/nu/env.nu | 2 ++ 1 file changed, 2 insertions(+) diff --git a/modules/shell/nu/env.nu b/modules/shell/nu/env.nu index 5df3a55..91332be 100644 --- a/modules/shell/nu/env.nu +++ b/modules/shell/nu/env.nu @@ -5,6 +5,8 @@ source /home/jade/.config/nushell/shell-startup.nu; $env.STARSHIP_SHELL = "nu"; $env.CMD_COUNT = 0; +$env.EDITOR = "hx"; +$env.S10E_JRNL_FILE_LOC = "~/Docs/jrnl.md"; def create_right_prompt [] { # create a right prompt in magenta with green separators and am/pm underlined From 5521d3f47910ee60186aefde15ee896967fc056b Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Mon, 6 Jan 2025 08:22:31 +0100 Subject: [PATCH 198/301] reconfiguring helix a bit :3 --- modules/shell/helix.nix | 27 +++++++++++++++++++++++++-- 1 file changed, 25 insertions(+), 2 deletions(-) diff --git a/modules/shell/helix.nix b/modules/shell/helix.nix index 1f8a2f2..53ea07e 100644 --- a/modules/shell/helix.nix +++ b/modules/shell/helix.nix @@ -31,12 +31,18 @@ bufferline = "multiple"; color-modes = true; cursorline = true; - auto-save = true; + auto-save = { + focus-lost = true; + after-delay.enable = true; + after-delay.timeout = 10000; + }; auto-format = true; end-of-line-diagnostics = "hint"; + # slightly optimized based on my layout + jump-label-alphabet = "jfkdaslghwenuiopbcmyzqrtvx"; + clipboard-provider = "wayland"; inline-diagnostics = { cursor-line = "hint"; - other-lines = "error"; }; lsp = { display-messages = true; @@ -65,9 +71,14 @@ "file-type" ]; idle-timeout = 50; + completion-timeout = 100; indent-guides = { render = true; character = "│"; + skip-levels = 2; + }; + soft-wrap = { + enable = true; }; whitespace = { render = { @@ -85,6 +96,10 @@ keys = { normal = { space."=" = ":fmt"; + + # smart tab++ + tab = "move_parent_node_end"; + S-tab = "move_parent_node_start"; }; insert = { up = "no_op"; @@ -95,6 +110,14 @@ pagedown = "no_op"; home = "no_op"; end = "no_op"; + + # smart tab ++ + S-tab = "move_parent_node_start"; + }; + select = { + # smart tab++ + tab = "extend_parent_node_end"; + S-tab = "extend_parent_node_start"; }; }; }; From fa9a5caea60f477247b55ce39e0870a063b93a35 Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Wed, 15 Jan 2025 14:44:32 +0100 Subject: [PATCH 199/301] do a bunch of shit --- .../home/panels/eww/configDir/scripts/bat.nu | 6 +----- modules/desktop/firefox.nix | 1 + modules/shell/helix.nix | 19 +++++++++---------- modules/shell/nu/aliases.nu | 3 +++ 4 files changed, 14 insertions(+), 15 deletions(-) diff --git a/modules/desktop-environment/home/panels/eww/configDir/scripts/bat.nu b/modules/desktop-environment/home/panels/eww/configDir/scripts/bat.nu index 4136585..fc2efae 100755 --- a/modules/desktop-environment/home/panels/eww/configDir/scripts/bat.nu +++ b/modules/desktop-environment/home/panels/eww/configDir/scripts/bat.nu @@ -40,11 +40,7 @@ def get_bat_charging_status [ ] { let status = open $"/sys/class/power_supply/($path)/status"; - if ($status == Charging) { - true - } else { - false - } + $status like Charging } def get_bat_icon [ diff --git a/modules/desktop/firefox.nix b/modules/desktop/firefox.nix index 9cfc37a..b52c74c 100644 --- a/modules/desktop/firefox.nix +++ b/modules/desktop/firefox.nix @@ -32,6 +32,7 @@ "return-youtube-dislikes" "multi-account-containers" "tabby-cat-friend" + "indie-wiki-buddy" ]; Extensions.Uninstall = [ "google@search.mozilla.org" diff --git a/modules/shell/helix.nix b/modules/shell/helix.nix index 53ea07e..8bf82af 100644 --- a/modules/shell/helix.nix +++ b/modules/shell/helix.nix @@ -31,15 +31,15 @@ bufferline = "multiple"; color-modes = true; cursorline = true; - auto-save = { - focus-lost = true; - after-delay.enable = true; - after-delay.timeout = 10000; - }; + # auto-save = { + # focus-lost = true; + # after-delay.enable = true; + # after-delay.timeout = 10000; + # }; auto-format = true; end-of-line-diagnostics = "hint"; # slightly optimized based on my layout - jump-label-alphabet = "jfkdaslghwenuiopbcmyzqrtvx"; + jump-label-alphabet = "jfkdhaslgwenuiopbcmyzqrtvx"; clipboard-provider = "wayland"; inline-diagnostics = { cursor-line = "hint"; @@ -75,20 +75,19 @@ indent-guides = { render = true; character = "│"; - skip-levels = 2; + skip-levels = 3; }; soft-wrap = { enable = true; }; whitespace = { render = { - space = "all"; + space = "none"; tab = "all"; newline = "none"; }; characters = { - space = "·"; - nbsp = "⍽"; + nbsp = "·"; tab = "→"; }; }; diff --git a/modules/shell/nu/aliases.nu b/modules/shell/nu/aliases.nu index 20fe226..7876154 100644 --- a/modules/shell/nu/aliases.nu +++ b/modules/shell/nu/aliases.nu @@ -32,3 +32,6 @@ alias guni = cd ~/Docs/uni/info1; alias gunids = cd ~/Docs/uni/design; alias gunida = cd ~/Docs/uni/dramaturgie; alias gunm = cd ~/Docs/uni/mathe1-3; + +# typos +alias juts = just; From e61519b3c1865ad9bdcaa91a2cd8fbd25e8b530e Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Wed, 15 Jan 2025 14:45:36 +0100 Subject: [PATCH 200/301] update nix stable thignythign --- flake.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/flake.nix b/flake.nix index 3ea114b..98b4fbc 100644 --- a/flake.nix +++ b/flake.nix @@ -3,7 +3,7 @@ inputs = { nixpkgs.url = "nixpkgs/nixos-unstable"; - nixpkgs-stable.url = "nixpkgs/nixos-24.05"; + nixpkgs-stable.url = "nixpkgs/nixos-24.11"; nixpkgs-unstable-small.url = "nixpkgs/nixos-unstable-small"; helix-inline-diags = { url = "github:helix-editor/helix"; From cc43283675e66c89e612fec09988c6e5beec0dfd Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Wed, 15 Jan 2025 14:46:42 +0100 Subject: [PATCH 201/301] hotfix shit --- hosts/monosodium-glutamate-g/configuration.nix | 8 +++++--- modules/desktop-environment/audio.nix | 2 -- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/hosts/monosodium-glutamate-g/configuration.nix b/hosts/monosodium-glutamate-g/configuration.nix index 5c20795..ed65d9f 100644 --- a/hosts/monosodium-glutamate-g/configuration.nix +++ b/hosts/monosodium-glutamate-g/configuration.nix @@ -1,7 +1,11 @@ # 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’). -{pkgs, ...}: { +{ + pkgs, + pkgs-stable, + ... +}: { imports = [ ./hardware-configuration.nix ../../common.nix @@ -34,8 +38,6 @@ networking.hostName = "monosodium-glutamate-g"; services = { - # monitor control - ddccontrol.enable = true; xserver = { layout = "us"; xkbVariant = "altgr-intl"; diff --git a/modules/desktop-environment/audio.nix b/modules/desktop-environment/audio.nix index eebad68..dd5be85 100644 --- a/modules/desktop-environment/audio.nix +++ b/modules/desktop-environment/audio.nix @@ -15,9 +15,7 @@ volumeicon playerctl - pulseaudioFull helvum ]; - hardware.pulseaudio.enable = pkgs.lib.mkForce false; # sound.mediaKeys.enable = true; } From 4b9a8323e9e68bb6f984ab10ac0bb89feecb2182 Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Wed, 15 Jan 2025 14:47:03 +0100 Subject: [PATCH 202/301] add pixelorama and glaxnimate --- flake.lock | 52 ++++++++++++++++++------------------ modules/desktop/creative.nix | 5 +++- 2 files changed, 30 insertions(+), 27 deletions(-) diff --git a/flake.lock b/flake.lock index 159fdeb..1162a64 100644 --- a/flake.lock +++ b/flake.lock @@ -2,11 +2,11 @@ "nodes": { "crane": { "locked": { - "lastModified": 1734808813, - "narHash": "sha256-3aH/0Y6ajIlfy7j52FGZ+s4icVX0oHhqBzRdlOeztqg=", + "lastModified": 1736566337, + "narHash": "sha256-SC0eDcZPqISVt6R0UfGPyQLrI0+BppjjtQ3wcSlk0oI=", "owner": "ipetkov", "repo": "crane", - "rev": "72e2d02dbac80c8c86bf6bf3e785536acf8ee926", + "rev": "9172acc1ee6c7e1cbafc3044ff850c568c75a5a3", "type": "github" }, "original": { @@ -23,11 +23,11 @@ "rust-analyzer-src": "rust-analyzer-src" }, "locked": { - "lastModified": 1735626869, - "narHash": "sha256-hWGkpAWB59YWAOtBC6AE3DDnhMrBaqtiOaw1g+/mdLU=", + "lastModified": 1736577158, + "narHash": "sha256-ngnAENZ+vmzOFgnj0EDtHj22nuH7MQB+EqzUmdbvaqA=", "owner": "nix-community", "repo": "fenix", - "rev": "120e688c881f2233f053dca5a5ddb8945d8ca5d7", + "rev": "05dcdb02ea657f81b13d99bd0ca36b09d25f4c43", "type": "github" }, "original": { @@ -99,11 +99,11 @@ "rust-overlay": "rust-overlay" }, "locked": { - "lastModified": 1735674113, - "narHash": "sha256-X2+0+s6qNxrD+ySlD15jr5H314jOKMKJHBzbtNw1cBk=", + "lastModified": 1736602937, + "narHash": "sha256-KVw1PMrxlC1m+FT99BQxOO2nG2zQ5xDCoDgH7u3kO8A=", "owner": "helix-editor", "repo": "helix", - "rev": "b1759f998d527b7014b6be1eb26a518e1b5927c4", + "rev": "b26903cd13fdf8976bda43abbc5e85a50130d12f", "type": "github" }, "original": { @@ -119,11 +119,11 @@ ] }, "locked": { - "lastModified": 1735381016, - "narHash": "sha256-CyCZFhMUkuYbSD6bxB/r43EdmDE7hYeZZPTCv0GudO4=", + "lastModified": 1736508663, + "narHash": "sha256-ZOaGwa+WnB7Zn3YXimqjmIugAnHePdXCmNu+AHkq808=", "owner": "nix-community", "repo": "home-manager", - "rev": "10e99c43cdf4a0713b4e81d90691d22c6a58bdf2", + "rev": "2532b500c3ed2b8940e831039dcec5a5ea093afc", "type": "github" }, "original": { @@ -172,7 +172,7 @@ "mac-brcm-fw": { "flake": false, "locked": { - "lastModified": 1735699162, + "lastModified": 1727366922, "narHash": "sha256-+kW8ogc6DykjMVlrr+3vWKs9ZUdJ9EW72LbY7k/Qvh4=", "path": "/home/jade/nix-configs/mac-brcm-fw", "type": "path" @@ -200,11 +200,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1735471104, - "narHash": "sha256-0q9NGQySwDQc7RhAV2ukfnu7Gxa5/ybJ2ANT8DQrQrs=", + "lastModified": 1736344531, + "narHash": "sha256-8YVQ9ZbSfuUk2bUf2KRj60NRraLPKPS0Q4QFTbc+c2c=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "88195a94f390381c6afcdaa933c2f6ff93959cb4", + "rev": "bffc22eb12172e6db3c5dde9e3e5628f8e3e7912", "type": "github" }, "original": { @@ -215,26 +215,26 @@ }, "nixpkgs-stable": { "locked": { - "lastModified": 1735563628, - "narHash": "sha256-OnSAY7XDSx7CtDoqNh8jwVwh4xNL/2HaJxGjryLWzX8=", + "lastModified": 1736200483, + "narHash": "sha256-JO+lFN2HsCwSLMUWXHeOad6QUxOuwe9UOAF/iSl1J4I=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "b134951a4c9f3c995fd7be05f3243f8ecd65d798", + "rev": "3f0a8ac25fb674611b98089ca3a5dd6480175751", "type": "github" }, "original": { "id": "nixpkgs", - "ref": "nixos-24.05", + "ref": "nixos-24.11", "type": "indirect" } }, "nixpkgs-unstable-small": { "locked": { - "lastModified": 1735667141, - "narHash": "sha256-OdxSR4u4QQ/cnBWJBdbg9gMHQkJ2AQaOFif9965iciE=", + "lastModified": 1736603572, + "narHash": "sha256-yOZxepSF/z6ZDAOlJ3VZRIGOKfroa6CmOm2x6ud8S3s=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "ffd125e27fecc4e5b935413276143a97449fcfd8", + "rev": "376250fab39653e93864b4dfd9ab161751fbe430", "type": "github" }, "original": { @@ -260,11 +260,11 @@ "rust-analyzer-src": { "flake": false, "locked": { - "lastModified": 1735570005, - "narHash": "sha256-ekN1mLeHM9upiAXykoNm646ctsm0qcS8+G2SjGtXp5k=", + "lastModified": 1736517563, + "narHash": "sha256-YJ5ajpMsyXITc91ZfnI0Mdocd+tmCFkZ3BLozUkB44M=", "owner": "rust-lang", "repo": "rust-analyzer", - "rev": "1c6b83852b0d3bc129a3558386663373f126337e", + "rev": "4f35021ca9a8e7f9ed4344139b9eaf770a2e5725", "type": "github" }, "original": { diff --git a/modules/desktop/creative.nix b/modules/desktop/creative.nix index d3a42ca..648a5da 100644 --- a/modules/desktop/creative.nix +++ b/modules/desktop/creative.nix @@ -10,7 +10,10 @@ gimp inkscape-with-extensions obs-studio - kdenlive + kdePackages.kdenlive + glaxnimate + + pixelorama scribus From 870e5ec059c4d3958d866333fa2c698f7b90d71e Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Mon, 10 Mar 2025 14:22:10 +0100 Subject: [PATCH 203/301] ' shortcuts, including flip-bool --- Cargo.lock | 6 +++++- Cargo.toml | 2 +- modules/shell/helix.nix | 24 +++++++++++++----------- programs/flip-bool/Cargo.toml | 6 ++++++ programs/flip-bool/src/main.rs | 25 +++++++++++++++++++++++++ 5 files changed, 50 insertions(+), 13 deletions(-) create mode 100644 programs/flip-bool/Cargo.toml create mode 100644 programs/flip-bool/src/main.rs diff --git a/Cargo.lock b/Cargo.lock index 9702d07..0be5f80 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1,6 +1,6 @@ # This file is automatically @generated by Cargo. # It is not intended for manual editing. -version = 3 +version = 4 [[package]] name = "addr2line" @@ -400,6 +400,10 @@ version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" +[[package]] +name = "flip-bool" +version = "0.1.0" + [[package]] name = "fnv" version = "1.0.7" diff --git a/Cargo.toml b/Cargo.toml index 60afbd9..208cd50 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,5 +1,5 @@ [workspace] resolver = "2" -members = [ "programs/bar-pinger", "programs/bar-ws-monitor", +members = [ "programs/bar-pinger", "programs/bar-ws-monitor", "programs/flip-bool", "programs/jrnl" , "programs/traveldings"] diff --git a/modules/shell/helix.nix b/modules/shell/helix.nix index 8bf82af..e0dc3ea 100644 --- a/modules/shell/helix.nix +++ b/modules/shell/helix.nix @@ -1,8 +1,4 @@ -{ - config, - helix-inline-diags, - ... -}: { +{config, ...}: { home-manager.users.jade = { pkgs, pkgs-stable, @@ -23,7 +19,6 @@ programs.helix = { enable = true; defaultEditor = true; - package = helix-inline-diags.outputs.packages."x86_64-linux".default; settings = { theme = "gruvbox_dark_hard"; editor = { @@ -31,11 +26,10 @@ bufferline = "multiple"; color-modes = true; cursorline = true; - # auto-save = { - # focus-lost = true; - # after-delay.enable = true; - # after-delay.timeout = 10000; - # }; + auto-save = { + after-delay.enable = true; + after-delay.timeout = 10000; + }; auto-format = true; end-of-line-diagnostics = "hint"; # slightly optimized based on my layout @@ -99,6 +93,14 @@ # smart tab++ tab = "move_parent_node_end"; S-tab = "move_parent_node_start"; + "'" = { + D = "@sgd"; + F = "@sgy"; + d = "@vgd"; + f = "@vgy"; + h = ":toggle-option lsp.display-inlay-hints"; + t = "@|flip-bool"; + }; }; insert = { up = "no_op"; diff --git a/programs/flip-bool/Cargo.toml b/programs/flip-bool/Cargo.toml new file mode 100644 index 0000000..c65d2fa --- /dev/null +++ b/programs/flip-bool/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "flip-bool" +version = "0.1.0" +edition = "2021" + +[dependencies] diff --git a/programs/flip-bool/src/main.rs b/programs/flip-bool/src/main.rs new file mode 100644 index 0000000..3ae9375 --- /dev/null +++ b/programs/flip-bool/src/main.rs @@ -0,0 +1,25 @@ +use std::io::{Read, Write}; + +fn main() { + let mut input = String::new(); + let mut stdin = std::io::stdin(); + let mut stdout = std::io::stdout(); + + stdin.read_to_string(&mut input).unwrap(); + + stdout + .write_all(match input.as_bytes() { + b"true" => b"false", + b"True" => b"False", + b"TRUE" => b"FALSE", + b"false" => b"true", + b"False" => b"True", + b"FALSE" => b"TRUE", + b"1" => b"0", + b"yes" => b"no", + b"0" => b"1", + b"no" => b"yes", + other => other, + }) + .unwrap(); +} From e5aba8530fe621f387f424425726c81f2d134952 Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Mon, 10 Mar 2025 14:23:05 +0100 Subject: [PATCH 204/301] google-fonts the second --- common.nix | 9 --------- modules/desktop/fonts.nix | 11 +++++++++++ 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/common.nix b/common.nix index 94f3d5f..fef5517 100644 --- a/common.nix +++ b/common.nix @@ -139,15 +139,6 @@ with builtins; { nixpkgs.config.packageOverrides = pkgs: { sudo = pkgs.sudo.override {withInsults = true;}; - google-fonts = pkgs.google-fonts.overrideAttrs (oldAttrs: { - src = pkgs.fetchFromGitHub { - owner = "google"; - repo = "fonts"; - rev = "c06520efccd2c99d970b536d4f62cb4d95b4e6b2"; - sha256 = "sha256-9TzeihEKIEDRtDuv+NmLWjTpoGnBR+RP/jIBfB1O06U="; - }; - installPhase = oldAttrs.installPhase + "mv $out/share/fonts/truetype $out/share/fonts/ttf"; - }); }; security.sudo.extraConfig = "Defaults insults"; diff --git a/modules/desktop/fonts.nix b/modules/desktop/fonts.nix index df6d522..b686e8d 100644 --- a/modules/desktop/fonts.nix +++ b/modules/desktop/fonts.nix @@ -1,4 +1,15 @@ {pkgs, ...}: { + nixpkgs.config.packageOverrides = pkgs: { + google-fonts = pkgs.google-fonts.overrideAttrs (oldAttrs: { + src = pkgs.fetchFromGitHub { + owner = "google"; + repo = "fonts"; + rev = "8a0041ea7b92e339a7ce13e4e1dadcc85cb8f5df"; + sha256 = "sha256-9TzeihEKIEDRtDuv+NmLWjTpoGnBR+RP/jIBfB1O06U="; + }; + installPhase = oldAttrs.installPhase + "mv $out/share/fonts/truetype $out/share/fonts/ttf"; + }); + }; fonts.packages = with pkgs; [ nerd-fonts.fira-code nerd-fonts.departure-mono From 1a2bb1293a5e664b0b287db8b0c114d5d61d51a4 Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Mon, 10 Mar 2025 14:23:49 +0100 Subject: [PATCH 205/301] gay + some more custom commands --- hosts/denkbrett/modules/input.nix | 10 ++++++--- modules/shell/nu/custom_commands.nu | 33 +++++++++++++++++++++++++++++ 2 files changed, 40 insertions(+), 3 deletions(-) diff --git a/hosts/denkbrett/modules/input.nix b/hosts/denkbrett/modules/input.nix index fdb5785..a6116f5 100644 --- a/hosts/denkbrett/modules/input.nix +++ b/hosts/denkbrett/modules/input.nix @@ -1,8 +1,7 @@ {...}: { # key remapping - jade.input.remapping = { - enable = true; - devices."AT Translated Set 2 keyboard" = { + jade.input.remapping = let + default = { swapKeys = [ ["KEY_Y" "KEY_Z"] ["KEY_LEFTALT" "KEY_LEFTMETA"] @@ -15,6 +14,11 @@ } ]; }; + in { + enable = true; + devices."AT Translated Set 2 keyboard" = default; + devices."Razer Razer Huntsman" = default; + devices."Razer Razer DeathAdder V2" = default; }; hardware.trackpoint = { diff --git a/modules/shell/nu/custom_commands.nu b/modules/shell/nu/custom_commands.nu index 5b66b1b..d777349 100644 --- a/modules/shell/nu/custom_commands.nu +++ b/modules/shell/nu/custom_commands.nu @@ -70,3 +70,36 @@ def bx [from: string to: string] { print $url; ^bash -c $"nohup chromium '($url)' &"; } + +def meow [ n = 1 ] { + "m{rr,r,}{e,ee,{,e,aa}o}w{,w,ww}" | str expand | shuffle | first $n | str join ' ' +} + +alias miau = meow; + +def bars [display_name?: string] { + print $display_name; + pkill eww + if ($display_name | is-empty) { + print "Opening bars on whatever eww figures is best" + eww open-many topBar bottomBar + } else { + print $"Opening bars on ($display_name)" + eww open --screen $display_name bottomBar + eww open --screen $display_name topBar + } +} + +def "dp ccchh" [] { + layaway "hdmi2 + edp/bottom,center" + pkill eww + bars "25BL56WY" +} + +def "dp gay" [] { + layaway "dp3 + edp1/bottom,center + dp5/right,top" + # manual fix for lack of frequency in layaway, else monitor just turns off + swaymsg "output DP-3 position 0 0 scale 1 transform normal resolution 1920x1080@60Hz" + pkill eww + bars "LEN G27c-10" +} From e05e01b2aa152c932da8ed457d9ca91fa034c902 Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Mon, 10 Mar 2025 14:24:13 +0100 Subject: [PATCH 206/301] make evremap not block rebuilds if device isn't plugged in --- modules/input/evremap.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/input/evremap.nix b/modules/input/evremap.nix index 1880eb9..cd4145e 100644 --- a/modules/input/evremap.nix +++ b/modules/input/evremap.nix @@ -97,8 +97,8 @@ in value = let cfgFile = toml.generate "remaps-${toString i}.toml" (elemAt devs i); in { - script = "${evremap}/bin/evremap remap ${cfgFile}"; wantedBy = ["multi-user.target"]; + serviceConfig.ExecStart = "-${evremap}/bin/evremap remap ${cfgFile}"; unitConfig = { Restart = "on-failure"; }; From d0bb73d359e85c367c06413c12506ca73edde8e9 Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Mon, 10 Mar 2025 14:39:46 +0100 Subject: [PATCH 207/301] yeet --- modules/desktop-environment/audio.nix | 1 + modules/desktop-environment/home/compositing.nix | 1 - modules/desktop-environment/home/sway/default.nix | 4 ++-- modules/desktop-environment/home/terminal.nix | 1 + modules/desktop-environment/home/typst.nix | 7 ++++++- modules/shell/git.nix | 6 +----- modules/shell/nu/aliases.nu | 6 ++++-- 7 files changed, 15 insertions(+), 11 deletions(-) diff --git a/modules/desktop-environment/audio.nix b/modules/desktop-environment/audio.nix index dd5be85..2909e3a 100644 --- a/modules/desktop-environment/audio.nix +++ b/modules/desktop-environment/audio.nix @@ -17,5 +17,6 @@ helvum ]; + # hardware.pulseaudio.enable = pkgs.lib.mkForce false; # sound.mediaKeys.enable = true; } diff --git a/modules/desktop-environment/home/compositing.nix b/modules/desktop-environment/home/compositing.nix index a9823d6..fbba084 100644 --- a/modules/desktop-environment/home/compositing.nix +++ b/modules/desktop-environment/home/compositing.nix @@ -1,6 +1,5 @@ {...}: { services.picom = { - enable = true; backend = "glx"; shadow = true; diff --git a/modules/desktop-environment/home/sway/default.nix b/modules/desktop-environment/home/sway/default.nix index a1e12b3..91ecece 100644 --- a/modules/desktop-environment/home/sway/default.nix +++ b/modules/desktop-environment/home/sway/default.nix @@ -159,8 +159,8 @@ in { "XF86AudioPlay" = "exec playerctl play"; "XF86AudioStop" = "exec playerctl stop"; - "XF86MonBrightnessUp" = "exec brightnessctl set 5%+"; - "XF86MonBrightnessDown" = "exec brightnessctl set 5%-"; + "XF86MonBrightnessUp" = "exec brightnessctl set 1%+"; + "XF86MonBrightnessDown" = "exec brightnessctl set 1%-"; "XF86KbdBrightnessUp" = "exec brillo -kA 10.0"; "XF86KbdBrightnessDown" = "exec brillo -kU 10.0"; diff --git a/modules/desktop-environment/home/terminal.nix b/modules/desktop-environment/home/terminal.nix index cfa9ac2..9a41eea 100644 --- a/modules/desktop-environment/home/terminal.nix +++ b/modules/desktop-environment/home/terminal.nix @@ -5,6 +5,7 @@ name = "Departure Mono Nerd Font"; size = 12; }; + shellIntegration.enableFishIntegration = false; keybindings = { "ctrl+shift+n" = "new_os_window_with_cwd"; }; diff --git a/modules/desktop-environment/home/typst.nix b/modules/desktop-environment/home/typst.nix index d7d3fcc..e70930e 100644 --- a/modules/desktop-environment/home/typst.nix +++ b/modules/desktop-environment/home/typst.nix @@ -1,4 +1,8 @@ -{pkgs, ...}: let +{ + pkgs, + typst-within, + ... +}: let packages = { typst-configs = pkgs.fetchFromGitea { domain = "forge.katzen.cafe"; @@ -28,5 +32,6 @@ in { recursive = true; }; }; + # home.packages = [typst-within.packages."x86_64-linux".default]; home.packages = [pkgs.typst]; } diff --git a/modules/shell/git.nix b/modules/shell/git.nix index 743e653..f597c76 100644 --- a/modules/shell/git.nix +++ b/modules/shell/git.nix @@ -22,14 +22,10 @@ s = "status"; }; signing = { + format = "ssh"; key = "${pkgs.writeText "blue_nk3.pub" "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAILg7hhAKxIAbokHHcIj9HBgbkgoKGCG2R+gx7HZKL+iz cardno:000F_93C6A612"}"; signByDefault = true; }; - extraConfig = { - gpg = { - format = "ssh"; - }; - }; }; programs.jujutsu = { enable = true; diff --git a/modules/shell/nu/aliases.nu b/modules/shell/nu/aliases.nu index 7876154..72d528d 100644 --- a/modules/shell/nu/aliases.nu +++ b/modules/shell/nu/aliases.nu @@ -27,11 +27,13 @@ alias fish = echo $"(ansi red)no, fuck that shit!"; alias px = pulsemixer; # uni -alias gun = cd ~/Docs/uni; +alias guni = cd ~/Docs/uni; alias guni = cd ~/Docs/uni/info1; alias gunids = cd ~/Docs/uni/design; alias gunida = cd ~/Docs/uni/dramaturgie; -alias gunm = cd ~/Docs/uni/mathe1-3; +alias gunim = cd ~/Docs/uni/mathe1-3; # typos alias juts = just; + +alias shut = shutdown now; From 0a22b2cc6666622a8ee0bcf842e2992dccf0e95a Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Mon, 10 Mar 2025 14:32:28 +0100 Subject: [PATCH 208/301] make btop module --- modules/shell/btop.nix | 11 +++++++++++ modules/shell/default.nix | 1 + 2 files changed, 12 insertions(+) create mode 100644 modules/shell/btop.nix diff --git a/modules/shell/btop.nix b/modules/shell/btop.nix new file mode 100644 index 0000000..4e5f97d --- /dev/null +++ b/modules/shell/btop.nix @@ -0,0 +1,11 @@ +{...}: { + home-manager.users.jade = {pkgs, ...}: { + programs.btop = { + enable = true; + settings = { + color_theme = "gruvbox_dark"; + vim_keys = true; + }; + }; + }; +} diff --git a/modules/shell/default.nix b/modules/shell/default.nix index 6f7f4db..a78ef80 100644 --- a/modules/shell/default.nix +++ b/modules/shell/default.nix @@ -9,6 +9,7 @@ ./tty.nix ./git.nix ./mprocs.nix + ./btop.nix ]; programs.mosh.enable = true; } From d0b775774170d4e1e8da75f9d4f607cc0669957c Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Mon, 10 Mar 2025 15:00:40 +0100 Subject: [PATCH 209/301] eeeeeeeeeeee --- common.nix | 10 --- flake.lock | 251 ++++++++++++++++++++++++++++++++++------------------- flake.nix | 22 ++--- 3 files changed, 170 insertions(+), 113 deletions(-) diff --git a/common.nix b/common.nix index fef5517..764bee3 100644 --- a/common.nix +++ b/common.nix @@ -13,15 +13,6 @@ with lib; with builtins; { imports = [lix-module.nixosModules.default]; nix = { - package = pkgs.nixVersions.stable; - settings = { - extra-substituters = [ - "https://cache.lix.systems" - ]; - trusted-public-keys = [ - "cache.lix.systems:aBnZUw8zA7H35Cz2RyKFVs3H4PlGTLawyY5KRbvJR8o=" - ]; - }; extraOptions = '' experimental-features = nix-command flakes keep-outputs = true @@ -66,7 +57,6 @@ with builtins; { cool-retro-term maven - zed-editor jetbrains.idea-ultimate jdk diff --git a/flake.lock b/flake.lock index 1162a64..02ae1c6 100644 --- a/flake.lock +++ b/flake.lock @@ -2,11 +2,26 @@ "nodes": { "crane": { "locked": { - "lastModified": 1736566337, - "narHash": "sha256-SC0eDcZPqISVt6R0UfGPyQLrI0+BppjjtQ3wcSlk0oI=", + "lastModified": 1741481578, + "narHash": "sha256-JBTSyJFQdO3V8cgcL08VaBUByEU6P5kXbTJN6R0PFQo=", "owner": "ipetkov", "repo": "crane", - "rev": "9172acc1ee6c7e1cbafc3044ff850c568c75a5a3", + "rev": "bb1c9567c43e4434f54e9481eb4b8e8e0d50f0b5", + "type": "github" + }, + "original": { + "owner": "ipetkov", + "repo": "crane", + "type": "github" + } + }, + "crane_2": { + "locked": { + "lastModified": 1727060013, + "narHash": "sha256-/fC5YlJy4IoAW9GhkJiwyzk0K/gQd9Qi4rRcoweyG9E=", + "owner": "ipetkov", + "repo": "crane", + "rev": "6b40cc876c929bfe1e3a24bf538ce3b5622646ba", "type": "github" }, "original": { @@ -23,11 +38,11 @@ "rust-analyzer-src": "rust-analyzer-src" }, "locked": { - "lastModified": 1736577158, - "narHash": "sha256-ngnAENZ+vmzOFgnj0EDtHj22nuH7MQB+EqzUmdbvaqA=", + "lastModified": 1741588215, + "narHash": "sha256-XTZ051fwGcDPtCUSb7gJv5BsUPYcvjH9mFjVZboMIKQ=", "owner": "nix-community", "repo": "fenix", - "rev": "05dcdb02ea657f81b13d99bd0ca36b09d25f4c43", + "rev": "49b0989891f48cbfe6fc288ea76c3efa84000ed5", "type": "github" }, "original": { @@ -36,28 +51,50 @@ "type": "github" } }, + "fenix_2": { + "inputs": { + "nixpkgs": [ + "typst-within", + "nixpkgs" + ], + "rust-analyzer-src": "rust-analyzer-src_2" + }, + "locked": { + "lastModified": 1727245890, + "narHash": "sha256-B4gUhZxqdn24PqL7z7ZuvLOS84HVskhKRByWdgA4/RI=", + "owner": "nix-community", + "repo": "fenix", + "rev": "de3acda8b67b92abeeb35ac236924afd959874ad", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "fenix", + "type": "github" + } + }, + "flake-parts": { + "inputs": { + "nixpkgs-lib": "nixpkgs-lib" + }, + "locked": { + "lastModified": 1726153070, + "narHash": "sha256-HO4zgY0ekfwO5bX0QH/3kJ/h4KvUDFZg8YpkNwIbg1U=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "bcef6817a8b2aa20a5a6dbb19b43e63c5bf8619a", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, "flake-utils": { "inputs": { "systems": "systems" }, - "locked": { - "lastModified": 1726560853, - "narHash": "sha256-X6rJYSESBVr3hBoH0WbKE5KvhPU5bloyZ2L4K60/fPQ=", - "owner": "numtide", - "repo": "flake-utils", - "rev": "c1dfcf08411b08f6b8615f7d8971a2bfa81d5e8a", - "type": "github" - }, - "original": { - "owner": "numtide", - "repo": "flake-utils", - "type": "github" - } - }, - "flake-utils_2": { - "inputs": { - "systems": "systems_2" - }, "locked": { "lastModified": 1731533236, "narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=", @@ -87,31 +124,6 @@ "type": "github" } }, - "helix-inline-diags": { - "inputs": { - "crane": [ - "crane" - ], - "flake-utils": "flake-utils", - "nixpkgs": [ - "nixpkgs" - ], - "rust-overlay": "rust-overlay" - }, - "locked": { - "lastModified": 1736602937, - "narHash": "sha256-KVw1PMrxlC1m+FT99BQxOO2nG2zQ5xDCoDgH7u3kO8A=", - "owner": "helix-editor", - "repo": "helix", - "rev": "b26903cd13fdf8976bda43abbc5e85a50130d12f", - "type": "github" - }, - "original": { - "owner": "helix-editor", - "repo": "helix", - "type": "github" - } - }, "home-manager": { "inputs": { "nixpkgs": [ @@ -119,11 +131,11 @@ ] }, "locked": { - "lastModified": 1736508663, - "narHash": "sha256-ZOaGwa+WnB7Zn3YXimqjmIugAnHePdXCmNu+AHkq808=", + "lastModified": 1741613526, + "narHash": "sha256-HUEfRLqCy47BQ7kOG4SRVhqE7J6lkFzAagnd13I17qk=", "owner": "nix-community", "repo": "home-manager", - "rev": "2532b500c3ed2b8940e831039dcec5a5ea093afc", + "rev": "3593ee59a44974b8518829a5239b2f77222e3c81", "type": "github" }, "original": { @@ -135,11 +147,11 @@ "lix": { "flake": false, "locked": { - "lastModified": 1733448312, - "narHash": "sha256-id5U81bzXk/Lg900nGLM4CQb0wmTdzIvQz7CZk2OcTM=", - "rev": "2a9e560570982a91937d199af3e7b7a8f3cbe14b", + "lastModified": 1738174211, + "narHash": "sha256-eYmp1mKM4kULV1W+EBtCPk6LmKWl2REivaYfGRl+AWo=", + "rev": "64e33a7e09a0d1faacf2fd3f6ebd647fe4d8346a", "type": "tarball", - "url": "https://git.lix.systems/api/v1/repos/lix-project/lix/archive/2a9e560570982a91937d199af3e7b7a8f3cbe14b.tar.gz?rev=2a9e560570982a91937d199af3e7b7a8f3cbe14b" + "url": "https://git.lix.systems/api/v1/repos/lix-project/lix/archive/64e33a7e09a0d1faacf2fd3f6ebd647fe4d8346a.tar.gz?rev=64e33a7e09a0d1faacf2fd3f6ebd647fe4d8346a" }, "original": { "type": "tarball", @@ -148,7 +160,7 @@ }, "lix-module": { "inputs": { - "flake-utils": "flake-utils_2", + "flake-utils": "flake-utils", "flakey-profile": "flakey-profile", "lix": "lix", "nixpkgs": [ @@ -156,11 +168,11 @@ ] }, "locked": { - "lastModified": 1733522213, - "narHash": "sha256-H+Pk19MzvI/TAbXWimUPZAoKkD56OSyxJBm8lVIA5n0=", + "lastModified": 1738176840, + "narHash": "sha256-NG3IRvRs3u3btVCN861FqHvgOwqcNT/Oy6PBG86F5/E=", "ref": "refs/heads/main", - "rev": "c374ebf5548c7b6d4bf884369a5b6879cfc916ea", - "revCount": 124, + "rev": "621aae0f3cceaffa6d73a4fb0f89c08d338d729e", + "revCount": 133, "type": "git", "url": "https://git.lix.systems/lix-project/nixos-module" }, @@ -172,7 +184,7 @@ "mac-brcm-fw": { "flake": false, "locked": { - "lastModified": 1727366922, + "lastModified": 1735699162, "narHash": "sha256-+kW8ogc6DykjMVlrr+3vWKs9ZUdJ9EW72LbY7k/Qvh4=", "path": "/home/jade/nix-configs/mac-brcm-fw", "type": "path" @@ -200,11 +212,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1736344531, - "narHash": "sha256-8YVQ9ZbSfuUk2bUf2KRj60NRraLPKPS0Q4QFTbc+c2c=", + "lastModified": 1741379970, + "narHash": "sha256-Wh7esNh7G24qYleLvgOSY/7HlDUzWaL/n4qzlBePpiw=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "bffc22eb12172e6db3c5dde9e3e5628f8e3e7912", + "rev": "36fd87baa9083f34f7f5027900b62ee6d09b1f2f", "type": "github" }, "original": { @@ -213,13 +225,25 @@ "type": "indirect" } }, + "nixpkgs-lib": { + "locked": { + "lastModified": 1725233747, + "narHash": "sha256-Ss8QWLXdr2JCBPcYChJhz4xJm+h/xjl4G0c0XlP6a74=", + "type": "tarball", + "url": "https://github.com/NixOS/nixpkgs/archive/356624c12086a18f2ea2825fed34523d60ccc4e3.tar.gz" + }, + "original": { + "type": "tarball", + "url": "https://github.com/NixOS/nixpkgs/archive/356624c12086a18f2ea2825fed34523d60ccc4e3.tar.gz" + } + }, "nixpkgs-stable": { "locked": { - "lastModified": 1736200483, - "narHash": "sha256-JO+lFN2HsCwSLMUWXHeOad6QUxOuwe9UOAF/iSl1J4I=", + "lastModified": 1741445498, + "narHash": "sha256-F5Em0iv/CxkN5mZ9hRn3vPknpoWdcdCyR0e4WklHwiE=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "3f0a8ac25fb674611b98089ca3a5dd6480175751", + "rev": "52e3095f6d812b91b22fb7ad0bfc1ab416453634", "type": "github" }, "original": { @@ -230,11 +254,11 @@ }, "nixpkgs-unstable-small": { "locked": { - "lastModified": 1736603572, - "narHash": "sha256-yOZxepSF/z6ZDAOlJ3VZRIGOKfroa6CmOm2x6ud8S3s=", + "lastModified": 1741605585, + "narHash": "sha256-1bgzejf8fwsbzr/5cRK7jPArxf7xGyQqKsy05J5p05o=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "376250fab39653e93864b4dfd9ab161751fbe430", + "rev": "77172a85a0cdca4a9cc2aed74de9bbb14c7c8e43", "type": "github" }, "original": { @@ -243,28 +267,44 @@ "type": "indirect" } }, + "nixpkgs_2": { + "locked": { + "lastModified": 1726937504, + "narHash": "sha256-bvGoiQBvponpZh8ClUcmJ6QnsNKw0EMrCQJARK3bI1c=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "9357f4f23713673f310988025d9dc261c20e70c6", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, "root": { "inputs": { "crane": "crane", "fenix": "fenix", - "helix-inline-diags": "helix-inline-diags", "home-manager": "home-manager", "lix-module": "lix-module", "mac-brcm-fw": "mac-brcm-fw", "nixos-hardware": "nixos-hardware", "nixpkgs": "nixpkgs", "nixpkgs-stable": "nixpkgs-stable", - "nixpkgs-unstable-small": "nixpkgs-unstable-small" + "nixpkgs-unstable-small": "nixpkgs-unstable-small", + "typst-within": "typst-within" } }, "rust-analyzer-src": { "flake": false, "locked": { - "lastModified": 1736517563, - "narHash": "sha256-YJ5ajpMsyXITc91ZfnI0Mdocd+tmCFkZ3BLozUkB44M=", + "lastModified": 1741517882, + "narHash": "sha256-MmYdZyVwKa3YHzqoHdHw9/jZXkDE/5M3M+7363t4Pkc=", "owner": "rust-lang", "repo": "rust-analyzer", - "rev": "4f35021ca9a8e7f9ed4344139b9eaf770a2e5725", + "rev": "5e7dd31c80d5821113ed9c9aa1616a73a63b49a1", "type": "github" }, "original": { @@ -274,27 +314,35 @@ "type": "github" } }, - "rust-overlay": { - "inputs": { - "nixpkgs": [ - "helix-inline-diags", - "nixpkgs" - ] - }, + "rust-analyzer-src_2": { + "flake": false, "locked": { - "lastModified": 1728268235, - "narHash": "sha256-lJMFnMO4maJuNO6PQ5fZesrTmglze3UFTTBuKGwR1Nw=", - "owner": "oxalica", - "repo": "rust-overlay", - "rev": "25685cc2c7054efc31351c172ae77b21814f2d42", + "lastModified": 1727104575, + "narHash": "sha256-lB/ZS0SnHyE8Z3G8DIL/QJPg6w6x5ZhgVO2pBqnz89g=", + "owner": "rust-lang", + "repo": "rust-analyzer", + "rev": "3d0343251fe084b335b55c17a52bb4a3527b1bd0", "type": "github" }, "original": { - "owner": "oxalica", - "repo": "rust-overlay", + "owner": "rust-lang", + "ref": "nightly", + "repo": "rust-analyzer", "type": "github" } }, + "rust-manifest": { + "flake": false, + "locked": { + "narHash": "sha256-Yqu2/i9170R7pQhvOCR1f5SyFr7PcFbO6xcMr9KWruQ=", + "type": "file", + "url": "https://static.rust-lang.org/dist/channel-rust-1.83.0.toml" + }, + "original": { + "type": "file", + "url": "https://static.rust-lang.org/dist/channel-rust-1.83.0.toml" + } + }, "systems": { "locked": { "lastModified": 1681028828, @@ -324,6 +372,29 @@ "repo": "default", "type": "github" } + }, + "typst-within": { + "inputs": { + "crane": "crane_2", + "fenix": "fenix_2", + "flake-parts": "flake-parts", + "nixpkgs": "nixpkgs_2", + "rust-manifest": "rust-manifest", + "systems": "systems_2" + }, + "locked": { + "lastModified": 1739736913, + "narHash": "sha256-qVaWE+q1Npq8XbvrZ/c6ElU+F1u1YNf2a18X4RzVLoc=", + "owner": "schrottkatze", + "repo": "typst", + "rev": "5aa9b90a7b3e7f5ed964bf6727e445bdfc5211cd", + "type": "github" + }, + "original": { + "owner": "schrottkatze", + "repo": "typst", + "type": "github" + } } }, "root": "root", diff --git a/flake.nix b/flake.nix index 98b4fbc..c4c0b17 100644 --- a/flake.nix +++ b/flake.nix @@ -5,12 +5,8 @@ nixpkgs.url = "nixpkgs/nixos-unstable"; nixpkgs-stable.url = "nixpkgs/nixos-24.11"; nixpkgs-unstable-small.url = "nixpkgs/nixos-unstable-small"; - helix-inline-diags = { - url = "github:helix-editor/helix"; - inputs = { - crane.follows = "crane"; - nixpkgs.follows = "nixpkgs"; - }; + typst-within = { + url = "github:schrottkatze/typst"; }; lix-module = { url = "git+https://git.lix.systems/lix-project/nixos-module"; @@ -39,8 +35,8 @@ nixpkgs, nixpkgs-stable, nixpkgs-unstable-small, - helix-inline-diags, lix-module, + typst-within, home-manager, nixos-hardware, mac-brcm-fw, @@ -94,7 +90,7 @@ nixosConfigurations = { monosodium-glutamate-g = nixpkgs.lib.nixosSystem { specialArgs = { - inherit inputs pkgs-unstable-small pkgs-stable rs-programs lix-module helix-inline-diags; + inherit inputs pkgs-unstable-small pkgs-stable rs-programs lix-module; }; system = "x86_64-linux"; modules = [ @@ -104,7 +100,7 @@ home-manager.useGlobalPkgs = true; home-manager.useUserPackages = true; home-manager.extraSpecialArgs = { - inherit pkgs-unstable-small pkgs-stable; + inherit pkgs-unstable-small pkgs-stable typst-within; }; home-manager.users.jade = { nixosConfig, @@ -119,7 +115,7 @@ }; denkbrett = nixpkgs.lib.nixosSystem { specialArgs = { - inherit inputs pkgs-unstable-small pkgs-stable rs-programs lix-module helix-inline-diags; + inherit inputs pkgs-unstable-small pkgs-stable rs-programs lix-module; }; system = "x86_64-linux"; modules = [ @@ -129,7 +125,7 @@ home-manager.useGlobalPkgs = true; home-manager.useUserPackages = true; home-manager.extraSpecialArgs = { - inherit pkgs-unstable-small pkgs-stable; + inherit pkgs-unstable-small pkgs-stable typst-within; }; home-manager.users.jade = { nixosConfig, @@ -144,7 +140,7 @@ }; potatobook-g = nixpkgs.lib.nixosSystem { specialArgs = { - inherit inputs pkgs-unstable-small rs-programs lix-module helix-inline-diags; + inherit inputs pkgs-unstable-small rs-programs lix-module; }; system = "x86_64-linux"; modules = [ @@ -155,7 +151,7 @@ home-manager.useGlobalPkgs = true; home-manager.useUserPackages = true; home-manager.extraSpecialArgs = { - inherit pkgs-unstable-small pkgs-stable; + inherit pkgs-unstable-small pkgs-stable typst-within; }; home-manager.users.jade = { nixosConfig, From ebaa206a8146957354c9427feae6a90d0763fcf5 Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Wed, 12 Mar 2025 02:00:13 +0100 Subject: [PATCH 210/301] Switch to niri - Episode 1: beginnings --- common.nix | 4 +- flake.lock | 132 +++++++++++++++++- flake.nix | 11 +- hosts/denkbrett/modules/input.nix | 2 - modules/desktop-environment/dm.nix | 2 +- modules/desktop-environment/home/default.nix | 2 + .../desktop-environment/home/niri/binds.nix | 70 ++++++++++ .../desktop-environment/home/niri/default.nix | 44 ++++++ .../desktop-environment/home/niri/input.nix | 14 ++ .../home/niri/screenshot.nix | 10 ++ .../desktop-environment/home/niri/style.nix | 54 +++++++ .../home/niri/xwayland-sat.nix | 8 ++ modules/desktop-environment/home/terminal.nix | 1 + modules/desktop/creative.nix | 2 + 14 files changed, 343 insertions(+), 13 deletions(-) create mode 100644 modules/desktop-environment/home/niri/binds.nix create mode 100644 modules/desktop-environment/home/niri/default.nix create mode 100644 modules/desktop-environment/home/niri/input.nix create mode 100644 modules/desktop-environment/home/niri/screenshot.nix create mode 100644 modules/desktop-environment/home/niri/style.nix create mode 100644 modules/desktop-environment/home/niri/xwayland-sat.nix diff --git a/common.nix b/common.nix index 764bee3..c72d791 100644 --- a/common.nix +++ b/common.nix @@ -2,9 +2,9 @@ # your system. Help is available in the configuration.nix(5) man page # and in the NixOS manual (accessible by running ‘nixos-help’). { - config, pkgs, lib, + niri, lix-module, rs-programs, ... @@ -28,7 +28,7 @@ with builtins; { "nodejs-16.20.0" ]; }; - overlays = [rs-programs]; + overlays = [rs-programs niri.overlays.niri]; }; environment = { diff --git a/flake.lock b/flake.lock index 02ae1c6..ba64528 100644 --- a/flake.lock +++ b/flake.lock @@ -194,6 +194,62 @@ "type": "path" } }, + "niri": { + "inputs": { + "niri-stable": "niri-stable", + "niri-unstable": "niri-unstable", + "nixpkgs": "nixpkgs", + "nixpkgs-stable": "nixpkgs-stable", + "xwayland-satellite-stable": "xwayland-satellite-stable", + "xwayland-satellite-unstable": "xwayland-satellite-unstable" + }, + "locked": { + "lastModified": 1741589763, + "narHash": "sha256-F0LYLKX2jaUIs+/sPYjSLVtVfgsfwsdkbb5WoMkSlmQ=", + "owner": "sodiboo", + "repo": "niri-flake", + "rev": "aab4ffcc1d43e8a0fb02f84c2a88c25fd0528110", + "type": "github" + }, + "original": { + "owner": "sodiboo", + "repo": "niri-flake", + "type": "github" + } + }, + "niri-stable": { + "flake": false, + "locked": { + "lastModified": 1740117926, + "narHash": "sha256-mTTHA0RAaQcdYe+9A3Jx77cmmyLFHmRoZdd8RpWa+m8=", + "owner": "YaLTeR", + "repo": "niri", + "rev": "b94a5db8790339cf9134873d8b490be69e02ac71", + "type": "github" + }, + "original": { + "owner": "YaLTeR", + "ref": "v25.02", + "repo": "niri", + "type": "github" + } + }, + "niri-unstable": { + "flake": false, + "locked": { + "lastModified": 1741582754, + "narHash": "sha256-lS1bn4Eq94xbOfkxq2RbpohqME99H7k/8i0yq62I6ms=", + "owner": "YaLTeR", + "repo": "niri", + "rev": "b351f6ff220560d96a260d8dd3ad794000923481", + "type": "github" + }, + "original": { + "owner": "YaLTeR", + "repo": "niri", + "type": "github" + } + }, "nixos-hardware": { "locked": { "lastModified": 1687903496, @@ -220,9 +276,10 @@ "type": "github" }, "original": { - "id": "nixpkgs", + "owner": "NixOS", "ref": "nixos-unstable", - "type": "indirect" + "repo": "nixpkgs", + "type": "github" } }, "nixpkgs-lib": { @@ -238,6 +295,22 @@ } }, "nixpkgs-stable": { + "locked": { + "lastModified": 1741445498, + "narHash": "sha256-F5Em0iv/CxkN5mZ9hRn3vPknpoWdcdCyR0e4WklHwiE=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "52e3095f6d812b91b22fb7ad0bfc1ab416453634", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-24.11", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-stable_2": { "locked": { "lastModified": 1741445498, "narHash": "sha256-F5Em0iv/CxkN5mZ9hRn3vPknpoWdcdCyR0e4WklHwiE=", @@ -268,6 +341,21 @@ } }, "nixpkgs_2": { + "locked": { + "lastModified": 1741379970, + "narHash": "sha256-Wh7esNh7G24qYleLvgOSY/7HlDUzWaL/n4qzlBePpiw=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "36fd87baa9083f34f7f5027900b62ee6d09b1f2f", + "type": "github" + }, + "original": { + "id": "nixpkgs", + "ref": "nixos-unstable", + "type": "indirect" + } + }, + "nixpkgs_3": { "locked": { "lastModified": 1726937504, "narHash": "sha256-bvGoiQBvponpZh8ClUcmJ6QnsNKw0EMrCQJARK3bI1c=", @@ -290,9 +378,10 @@ "home-manager": "home-manager", "lix-module": "lix-module", "mac-brcm-fw": "mac-brcm-fw", + "niri": "niri", "nixos-hardware": "nixos-hardware", - "nixpkgs": "nixpkgs", - "nixpkgs-stable": "nixpkgs-stable", + "nixpkgs": "nixpkgs_2", + "nixpkgs-stable": "nixpkgs-stable_2", "nixpkgs-unstable-small": "nixpkgs-unstable-small", "typst-within": "typst-within" } @@ -378,7 +467,7 @@ "crane": "crane_2", "fenix": "fenix_2", "flake-parts": "flake-parts", - "nixpkgs": "nixpkgs_2", + "nixpkgs": "nixpkgs_3", "rust-manifest": "rust-manifest", "systems": "systems_2" }, @@ -395,6 +484,39 @@ "repo": "typst", "type": "github" } + }, + "xwayland-satellite-stable": { + "flake": false, + "locked": { + "lastModified": 1739246919, + "narHash": "sha256-/hBM43/Gd0/tW+egrhlWgOIISeJxEs2uAOIYVpfDKeU=", + "owner": "Supreeeme", + "repo": "xwayland-satellite", + "rev": "44590a416d4a3e8220e19e29e0b6efe64a80315d", + "type": "github" + }, + "original": { + "owner": "Supreeeme", + "ref": "v0.5.1", + "repo": "xwayland-satellite", + "type": "github" + } + }, + "xwayland-satellite-unstable": { + "flake": false, + "locked": { + "lastModified": 1741140299, + "narHash": "sha256-Y2bPO92Yg5HcH5ORvrVOQb4wRGEapGEteHXGtNvboxk=", + "owner": "Supreeeme", + "repo": "xwayland-satellite", + "rev": "10cb041a80bb815cc1789cfa305923f1f9e3713d", + "type": "github" + }, + "original": { + "owner": "Supreeeme", + "repo": "xwayland-satellite", + "type": "github" + } } }, "root": "root", diff --git a/flake.nix b/flake.nix index c4c0b17..1943853 100644 --- a/flake.nix +++ b/flake.nix @@ -5,6 +5,7 @@ nixpkgs.url = "nixpkgs/nixos-unstable"; nixpkgs-stable.url = "nixpkgs/nixos-24.11"; nixpkgs-unstable-small.url = "nixpkgs/nixos-unstable-small"; + niri.url = "github:sodiboo/niri-flake"; typst-within = { url = "github:schrottkatze/typst"; }; @@ -40,6 +41,7 @@ home-manager, nixos-hardware, mac-brcm-fw, + niri, fenix, crane, ... @@ -90,10 +92,11 @@ nixosConfigurations = { monosodium-glutamate-g = nixpkgs.lib.nixosSystem { specialArgs = { - inherit inputs pkgs-unstable-small pkgs-stable rs-programs lix-module; + inherit inputs pkgs-unstable-small pkgs-stable rs-programs lix-module niri; }; system = "x86_64-linux"; modules = [ + inputs.niri.nixosModules.niri ./hosts/monosodium-glutamate-g/configuration.nix home-manager.nixosModules.home-manager { @@ -115,10 +118,11 @@ }; denkbrett = nixpkgs.lib.nixosSystem { specialArgs = { - inherit inputs pkgs-unstable-small pkgs-stable rs-programs lix-module; + inherit inputs pkgs-unstable-small pkgs-stable rs-programs lix-module niri; }; system = "x86_64-linux"; modules = [ + inputs.niri.nixosModules.niri ./hosts/denkbrett/configuration.nix home-manager.nixosModules.home-manager { @@ -140,10 +144,11 @@ }; potatobook-g = nixpkgs.lib.nixosSystem { specialArgs = { - inherit inputs pkgs-unstable-small rs-programs lix-module; + inherit inputs pkgs-unstable-small rs-programs lix-module niri; }; system = "x86_64-linux"; modules = [ + inputs.niri.nixosModules.niri "${mac-brcm-fw}" ./hosts/potatobook-g/configuration.nix home-manager.nixosModules.home-manager diff --git a/hosts/denkbrett/modules/input.nix b/hosts/denkbrett/modules/input.nix index a6116f5..db9b4db 100644 --- a/hosts/denkbrett/modules/input.nix +++ b/hosts/denkbrett/modules/input.nix @@ -26,6 +26,4 @@ device = "TPPS/2 IBM TrackPoint"; sensitivity = 256; }; - - services.libinput.touchpad.tapping = true; } diff --git a/modules/desktop-environment/dm.nix b/modules/desktop-environment/dm.nix index ebdb023..9fe88a6 100644 --- a/modules/desktop-environment/dm.nix +++ b/modules/desktop-environment/dm.nix @@ -20,7 +20,7 @@ in enable = cfg.autoLogin.enable; user = "jade"; }; - defaultSession = "sway"; + defaultSession = "niri"; sessionPackages = [ pkgs.sway ]; diff --git a/modules/desktop-environment/home/default.nix b/modules/desktop-environment/home/default.nix index 558291e..0b48b10 100644 --- a/modules/desktop-environment/home/default.nix +++ b/modules/desktop-environment/home/default.nix @@ -1,4 +1,5 @@ {...}: { + programs.niri.enable = true; home-manager.users.jade = {...}: { imports = [ ./notifications.nix @@ -8,6 +9,7 @@ ./panels ./xmonad ./sway + ./niri ]; services.gpg-agent = { diff --git a/modules/desktop-environment/home/niri/binds.nix b/modules/desktop-environment/home/niri/binds.nix new file mode 100644 index 0000000..35e5895 --- /dev/null +++ b/modules/desktop-environment/home/niri/binds.nix @@ -0,0 +1,70 @@ +{...}: { + programs.niri.settings.binds = { + # spawn terminal + "Mod+Return".action.spawn = "kitty"; + "Mod+Return".repeat = false; + "Mod+D".action.spawn = ["wofi" "-S" "drun" "--allow-images"]; + "Mod+D".repeat = false; + + "Mod+Shift+E".action.quit = []; + "Mod+Shift+Q".action.close-window = []; + + "Mod+Shift+Slash".action.show-hotkey-overlay = []; + + # window/columns controls + "Mod+H".action.focus-column-left = []; + "Mod+J".action.focus-window-down = []; + "Mod+K".action.focus-window-up = []; + "Mod+L".action.focus-column-right = []; + "Mod+Ctrl+H".action.move-column-left = []; + "Mod+Ctrl+J".action.move-window-down = []; + "Mod+Ctrl+K".action.move-window-up = []; + "Mod+Ctrl+L".action.move-column-right = []; + + # monitor controls + "Mod+Shift+H".action.focus-monitor-left = []; + "Mod+Shift+J".action.focus-monitor-down = []; + "Mod+Shift+K".action.focus-monitor-up = []; + "Mod+Shift+L".action.focus-monitor-right = []; + "Mod+Shift+Ctrl+H".action.move-column-to-monitor-left = []; + "Mod+Shift+Ctrl+J".action.move-column-to-monitor-down = []; + "Mod+Shift+Ctrl+K".action.move-column-to-monitor-up = []; + "Mod+Shift+Ctrl+L".action.move-column-to-monitor-right = []; + + # workspace controls + "Mod+P".action.focus-workspace-up = []; + "Mod+N".action.focus-workspace-down = []; + "Mod+Ctrl+P".action.move-column-to-workspace-up = []; + "Mod+Ctrl+N".action.move-column-to-workspace-down = []; + "Mod+1".action.focus-workspace = 1; + "Mod+2".action.focus-workspace = 2; + "Mod+3".action.focus-workspace = 3; + "Mod+4".action.focus-workspace = 4; + "Mod+5".action.focus-workspace = 5; + "Mod+6".action.focus-workspace = 6; + "Mod+7".action.focus-workspace = 7; + "Mod+8".action.focus-workspace = 8; + "Mod+9".action.focus-workspace = 9; + "Mod+Shift+1".action.move-column-to-workspace = 1; + "Mod+Shift+2".action.move-column-to-workspace = 2; + "Mod+Shift+3".action.move-column-to-workspace = 3; + "Mod+Shift+4".action.move-column-to-workspace = 4; + "Mod+Shift+5".action.move-column-to-workspace = 5; + "Mod+Shift+6".action.move-column-to-workspace = 6; + "Mod+Shift+7".action.move-column-to-workspace = 7; + "Mod+Shift+8".action.move-column-to-workspace = 8; + "Mod+Shift+9".action.move-column-to-workspace = 9; + + # column editing stuffs + "Mod+BracketLeft".action.consume-or-expel-window-left = []; + "Mod+BracketRight".action.consume-or-expel-window-right = []; + "Mod+F".action.maximize-column = []; + "Mod+Shift+F".action.fullscreen-window = []; + "Mod+C".action.center-column = []; + "Mod+Minus".action.set-column-width = "-5%"; + "Mod+Equal".action.set-column-width = "+5%"; + "Mod+Shift+Minus".action.set-window-height = "-10%"; + "Mod+Shift+Equal".action.set-window-height = "+10%"; + "Mod+W".action.toggle-column-tabbed-display = []; + }; +} diff --git a/modules/desktop-environment/home/niri/default.nix b/modules/desktop-environment/home/niri/default.nix new file mode 100644 index 0000000..7dea436 --- /dev/null +++ b/modules/desktop-environment/home/niri/default.nix @@ -0,0 +1,44 @@ +{pkgs, ...}: { + imports = [ + ./xwayland-sat.nix + ./screenshot.nix + ./input.nix + ./binds.nix + ./style.nix + ]; + programs.niri.settings = { + outputs."eDP-1" = { + scale = 1.0; + }; + + spawn-at-startup = [ + { + command = ["eww" "open-many" "topBar" "bottomBar"]; + } + { + command = [ + "${pkgs.swaybg}/bin/swaybg" + "-i" + "${../xmonad/wallpaper/wallpaper.jpg}" + "-m" + "fill" + ]; + } + ]; + + window-rules = [ + # TODO: privacy screen rules + # { + # geometry-corner-radius = let val = 1.; in { + # bottom-left = val; + # bottom-right = val; + # top-left = val; + # top-right = val; + # }; + # clip-to-geometry = true; + # } + ]; + + environment.ELECTRON_OZONE_PLATFORM_HINT = "auto"; + }; +} diff --git a/modules/desktop-environment/home/niri/input.nix b/modules/desktop-environment/home/niri/input.nix new file mode 100644 index 0000000..9d8ca1f --- /dev/null +++ b/modules/desktop-environment/home/niri/input.nix @@ -0,0 +1,14 @@ +{...}: { + programs.niri.settings.input = { + keyboard = { + xkb = { + layout = "us"; + variant = "altgr-intl"; + }; + }; + touchpad = { + tap = true; + natural-scroll = true; + }; + }; +} diff --git a/modules/desktop-environment/home/niri/screenshot.nix b/modules/desktop-environment/home/niri/screenshot.nix new file mode 100644 index 0000000..e39a0e9 --- /dev/null +++ b/modules/desktop-environment/home/niri/screenshot.nix @@ -0,0 +1,10 @@ +{pkgs, ...}: { + programs.niri.settings = { + screenshot-path = "~/Pictures/screenshots/%Y-%m-%dT%H:%M:%S.png"; + binds = { + "Print".action.screenshot = []; + "Ctrl+Print".action.screenshot-screen = []; + "Alt+Print".action.screenshot-window = []; + }; + }; +} diff --git a/modules/desktop-environment/home/niri/style.nix b/modules/desktop-environment/home/niri/style.nix new file mode 100644 index 0000000..0511b67 --- /dev/null +++ b/modules/desktop-environment/home/niri/style.nix @@ -0,0 +1,54 @@ +{...}: { + programs.niri.settings = { + cursor = { + theme = "phinger-cursors"; + size = 16; + hide-when-typing = true; + hide-after-inactive-ms = 2500; + }; + + layout = { + gaps = 15; + focus-ring.enable = false; + border = { + enable = true; + width = 3; + inactive.gradient = { + from = "#f69ecf"; + to = "#ff9a56"; + in' = "oklch shorter hue"; + relative-to = "window"; + angle = 135; + }; + active.gradient = { + from = "#f69ecf"; + to = "#5bcefa"; + in' = "oklch shorter hue"; + relative-to = "window"; + angle = 135; + }; + }; + center-focused-column = "never"; + empty-workspace-above-first = false; + tab-indicator = { + hide-when-single-tab = true; + active.color = "#5bcefa"; + inactive.color = "#3c3836"; + gap = 1; + width = 3; + position = "left"; + gaps-between-tabs = 0; + }; + }; + + window-rules = [{ + geometry-corner-radius = let val = 1.; in { + bottom-left = val; + bottom-right = val; + top-left = val; + top-right = val; + }; + clip-to-geometry = true; + }]; + }; +} diff --git a/modules/desktop-environment/home/niri/xwayland-sat.nix b/modules/desktop-environment/home/niri/xwayland-sat.nix new file mode 100644 index 0000000..4846b11 --- /dev/null +++ b/modules/desktop-environment/home/niri/xwayland-sat.nix @@ -0,0 +1,8 @@ +{pkgs, ...}: { + programs.niri.settings = { + spawn-at-startup = [ + {command = ["${pkgs.xwayland-satellite}/bin/xwayland-satellite"];} + ]; + environment.DISPLAY = ":0"; + }; +} diff --git a/modules/desktop-environment/home/terminal.nix b/modules/desktop-environment/home/terminal.nix index 9a41eea..5b6427b 100644 --- a/modules/desktop-environment/home/terminal.nix +++ b/modules/desktop-environment/home/terminal.nix @@ -30,6 +30,7 @@ foreground = color15; background = "#1d2021"; confirm_os_window_close = 0; + hide_window_decorations = true; }; }; home.sessionVariables = { diff --git a/modules/desktop/creative.nix b/modules/desktop/creative.nix index 648a5da..32a2c3d 100644 --- a/modules/desktop/creative.nix +++ b/modules/desktop/creative.nix @@ -5,6 +5,8 @@ }: { home-manager.users.jade = {pkgs, ...}: { home.packages = with pkgs; [ + pastel + audacity krita gimp From 8d16698228a7634475abd43b529cbc655d3ab3cd Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Wed, 12 Mar 2025 04:40:27 +0100 Subject: [PATCH 211/301] more helix convenience shortcuts --- modules/shell/helix.nix | 2 ++ 1 file changed, 2 insertions(+) diff --git a/modules/shell/helix.nix b/modules/shell/helix.nix index e0dc3ea..1b483dd 100644 --- a/modules/shell/helix.nix +++ b/modules/shell/helix.nix @@ -89,10 +89,12 @@ keys = { normal = { space."=" = ":fmt"; + space.space = "@[]"; # smart tab++ tab = "move_parent_node_end"; S-tab = "move_parent_node_start"; + A-S = "@S[\\s]+"; "'" = { D = "@sgd"; F = "@sgy"; From db8205f4b6be6298623e76765977d55f72f15d5f Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Wed, 12 Mar 2025 04:41:11 +0100 Subject: [PATCH 212/301] remove logseq bc unmaintained --- modules/desktop/default.nix | 2 -- 1 file changed, 2 deletions(-) diff --git a/modules/desktop/default.nix b/modules/desktop/default.nix index 2ebd6ef..c8b74d3 100644 --- a/modules/desktop/default.nix +++ b/modules/desktop/default.nix @@ -160,8 +160,6 @@ in mupdf inotify-tools - - logseq ]; xsession = { enable = true; From 6106bd267474d8e0b1329706c5cb1a851b5a9c41 Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Wed, 12 Mar 2025 05:23:27 +0100 Subject: [PATCH 213/301] more niri confing --- modules/desktop-environment/home/niri/binds.nix | 5 +++++ modules/desktop-environment/home/niri/input.nix | 4 +++- modules/desktop-environment/home/niri/style.nix | 14 +++++++++++++- 3 files changed, 21 insertions(+), 2 deletions(-) diff --git a/modules/desktop-environment/home/niri/binds.nix b/modules/desktop-environment/home/niri/binds.nix index 35e5895..d4eba4f 100644 --- a/modules/desktop-environment/home/niri/binds.nix +++ b/modules/desktop-environment/home/niri/binds.nix @@ -8,6 +8,7 @@ "Mod+Shift+E".action.quit = []; "Mod+Shift+Q".action.close-window = []; + "Mod+Shift+P".action.power-off-monitors = []; "Mod+Shift+Slash".action.show-hotkey-overlay = []; @@ -20,6 +21,10 @@ "Mod+Ctrl+J".action.move-window-down = []; "Mod+Ctrl+K".action.move-window-up = []; "Mod+Ctrl+L".action.move-column-right = []; + "Mod+R".action.switch-preset-column-width = []; + + "Mod+V".action.toggle-window-floating = []; + "Mod+Shift+V".action.switch-focus-between-floating-and-tiling = []; # monitor controls "Mod+Shift+H".action.focus-monitor-left = []; diff --git a/modules/desktop-environment/home/niri/input.nix b/modules/desktop-environment/home/niri/input.nix index 9d8ca1f..25760b3 100644 --- a/modules/desktop-environment/home/niri/input.nix +++ b/modules/desktop-environment/home/niri/input.nix @@ -7,8 +7,10 @@ }; }; touchpad = { - tap = true; + tap = false; natural-scroll = true; + dwt = true; + dwtp = true; }; }; } diff --git a/modules/desktop-environment/home/niri/style.nix b/modules/desktop-environment/home/niri/style.nix index 0511b67..bb4dec9 100644 --- a/modules/desktop-environment/home/niri/style.nix +++ b/modules/desktop-environment/home/niri/style.nix @@ -41,7 +41,19 @@ }; }; - window-rules = [{ + window-rules = [ + { + matches = [{ + is-floating = true; + }]; + shadow = { + softness = 40; + color = "#bab9e5af"; + inactive-color = "#fa9d99af"; + enable = true; + }; + } + { geometry-corner-radius = let val = 1.; in { bottom-left = val; bottom-right = val; From c9dfca27deea8406b52cb506b4ae8fb4bf0290ee Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Wed, 12 Mar 2025 06:04:04 +0100 Subject: [PATCH 214/301] inhibiting toggle --- modules/desktop-environment/home/niri/binds.nix | 3 +++ 1 file changed, 3 insertions(+) diff --git a/modules/desktop-environment/home/niri/binds.nix b/modules/desktop-environment/home/niri/binds.nix index d4eba4f..0dd7e0c 100644 --- a/modules/desktop-environment/home/niri/binds.nix +++ b/modules/desktop-environment/home/niri/binds.nix @@ -10,6 +10,9 @@ "Mod+Shift+Q".action.close-window = []; "Mod+Shift+P".action.power-off-monitors = []; + "Mod+Shift+Ctrl+Slash".action.toggle-keyboard-shortcuts-inhibit = []; + "Mod+Shift+Ctrl+Slash".allow-inhibiting = false; + "Mod+Shift+Slash".action.show-hotkey-overlay = []; # window/columns controls From aaf906c9b5c70d2425f553a8a2a5f989440210c7 Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Wed, 12 Mar 2025 08:03:30 +0100 Subject: [PATCH 215/301] FINALLY fix clipboard support --- modules/shell/helix.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/modules/shell/helix.nix b/modules/shell/helix.nix index 1b483dd..d24aa16 100644 --- a/modules/shell/helix.nix +++ b/modules/shell/helix.nix @@ -7,6 +7,7 @@ home = { sessionVariables.EDITOR = "hx"; packages = [ + pkgs.wl-clipboard-rs pkgs.nil pkgs.vscode-langservers-extracted pkgs.nodePackages.typescript-language-server From b08b46f4a8950b8c9666f531d06b14b7039074be Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Wed, 12 Mar 2025 08:04:04 +0100 Subject: [PATCH 216/301] fix cursors --- modules/desktop-environment/home/niri/style.nix | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/modules/desktop-environment/home/niri/style.nix b/modules/desktop-environment/home/niri/style.nix index bb4dec9..538a7e4 100644 --- a/modules/desktop-environment/home/niri/style.nix +++ b/modules/desktop-environment/home/niri/style.nix @@ -1,7 +1,9 @@ {...}: { programs.niri.settings = { + prefer-no-csd = true; + cursor = { - theme = "phinger-cursors"; + theme = "phinger-cursors-dark"; size = 16; hide-when-typing = true; hide-after-inactive-ms = 2500; From c7deaaa048dc2a9aacb50be855e39cdc5bc23c59 Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Thu, 13 Mar 2025 17:26:57 +0100 Subject: [PATCH 217/301] rewrite bar-ws-monitor for niri support --- Cargo.lock | 54 +++----- .../eww/configDir/bottomBar/workspaces.yuck | 5 +- programs/bar-ws-monitor/Cargo.toml | 2 +- programs/bar-ws-monitor/src/main.rs | 121 ++++++++++++------ 4 files changed, 107 insertions(+), 75 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 0be5f80..6f7092e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -148,9 +148,9 @@ version = "0.1.0" name = "bar-ws-monitor" version = "0.1.0" dependencies = [ + "niri-ipc", "serde", "serde_json", - "swayipc", ] [[package]] @@ -864,6 +864,16 @@ dependencies = [ "unicode-segmentation", ] +[[package]] +name = "niri-ipc" +version = "25.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "01515d0a7e73f1f3bd0347100542c4c3f6ebc280688add12e7ed2af4c35af4fb" +dependencies = [ + "serde", + "serde_json", +] + [[package]] name = "num-traits" version = "0.2.18" @@ -994,9 +1004,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.81" +version = "1.0.94" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d1597b0c024618f09a9c3b8655b7e430397a36d23fdafec26d6965e9eec3eba" +checksum = "a31971752e70b8b2686d7e46ec17fb38dad4051d94024c88df49b667caea9c84" dependencies = [ "unicode-ident", ] @@ -1289,18 +1299,18 @@ checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" [[package]] name = "serde" -version = "1.0.209" +version = "1.0.219" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "99fce0ffe7310761ca6bf9faf5115afbc19688edd00171d81b1bb1b116c63e09" +checksum = "5f0e2c6ed6606019b4e29e69dbaba95b11854410e5347d525002456dbbb786b6" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.209" +version = "1.0.219" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5831b979fd7b5439637af1752d535ff49f4860c0f341d1baeb6faf0f4242170" +checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00" dependencies = [ "proc-macro2", "quote", @@ -1309,9 +1319,9 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.128" +version = "1.0.140" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ff5456707a1de34e7e37f2a6fd3d3f808c318259cbd01ab6377795054b483d8" +checksum = "20068b6e96dc6c9bd23e01df8827e6c7e1f2fddd43c21810382803c136b99373" dependencies = [ "itoa", "memchr", @@ -1448,33 +1458,11 @@ version = "2.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" -[[package]] -name = "swayipc" -version = "3.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "daa5d19f881f372e225095e297072e2e3ee1c4e9e3a46cafe5f5cf70f1313f29" -dependencies = [ - "serde", - "serde_json", - "swayipc-types", -] - -[[package]] -name = "swayipc-types" -version = "1.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e487a656336f74341c70a73a289f68d9ba3cab579ba776352ea0c6cdf603fcda" -dependencies = [ - "serde", - "serde_json", - "thiserror", -] - [[package]] name = "syn" -version = "2.0.65" +version = "2.0.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2863d96a84c6439701d7a38f9de935ec562c8832cc55d1dde0f513b52fad106" +checksum = "b09a44accad81e1ba1cd74a32461ba89dee89095ba17b32f5d03683b1b1fc2a0" dependencies = [ "proc-macro2", "quote", diff --git a/modules/desktop-environment/home/panels/eww/configDir/bottomBar/workspaces.yuck b/modules/desktop-environment/home/panels/eww/configDir/bottomBar/workspaces.yuck index 4c5495f..96e37a5 100644 --- a/modules/desktop-environment/home/panels/eww/configDir/bottomBar/workspaces.yuck +++ b/modules/desktop-environment/home/panels/eww/configDir/bottomBar/workspaces.yuck @@ -3,9 +3,10 @@ :class "workspaces" (for workspace in workspaces (button - :class "${workspace.urgent ? "urgent" : ""} ${workspace.focused ? "focused" : 0}" + :style "border-bottom: 4px solid ${workspace.color}" + :class "${workspace.active ? "focused" : 0}" :onclick "swaymsg workspace ${workspace.name}" - (label :text "${workspace.name}") + (label :text "${workspace.idx}") ) ) ) diff --git a/programs/bar-ws-monitor/Cargo.toml b/programs/bar-ws-monitor/Cargo.toml index 5c1a1f6..f7c7ec4 100644 --- a/programs/bar-ws-monitor/Cargo.toml +++ b/programs/bar-ws-monitor/Cargo.toml @@ -6,4 +6,4 @@ edition = "2021" [dependencies] serde = { version = "1.0.209", features = [ "derive" ] } serde_json = "1.0.127" -swayipc = "3.0.2" +niri-ipc = "25.2.0" diff --git a/programs/bar-ws-monitor/src/main.rs b/programs/bar-ws-monitor/src/main.rs index b911272..23cfb6e 100644 --- a/programs/bar-ws-monitor/src/main.rs +++ b/programs/bar-ws-monitor/src/main.rs @@ -1,28 +1,87 @@ use core::panic; +use std::{collections::HashMap, io::Write}; +use niri_ipc::{ + socket::Socket, + state::{EventStreamState, EventStreamStatePart}, + Request, Response, Workspace, +}; use serde::Serialize; -use swayipc::{Connection, Event, EventType, Fallible, Workspace, WorkspaceChange}; -fn main() -> Fallible<()> { - let mut con = Connection::new()?; - let mut workspaces: Vec = con - .get_workspaces()? - .into_iter() - .map(|ws| ws.into()) - .collect(); - println!("{}", serde_json::ser::to_string(&workspaces).unwrap()); +// gruvbox colors +const COLORS: [[&str; 2]; 7] = [ + ["#458588", "#83a598"], // blue + ["#b16286", "#d3869b"], // purple + ["#689d6a", "#8ec07c"], // aqua + ["#97971a", "#b8bb26"], // green + ["#d79921", "#fabd2f"], // yellow + ["#d65d0e", "#fe8019"], // orange + ["#cc241d", "#fb4934"], // red +]; - for ev in con.subscribe([EventType::Workspace])? { - // the lazy/ugly solution! - // we create a new connection and request workspaces again and again and again - // TODO: properly handle events one by one - let mut con = Connection::new()?; - workspaces = con - .get_workspaces()? - .into_iter() - .map(|ws| ws.into()) - .collect(); - println!("{}", serde_json::ser::to_string(&workspaces).unwrap()); +fn main() -> Result<(), std::io::Error> { + let mut state = EventStreamState::default(); + let sock = Socket::connect()?; + let mut func = sock.send(Request::EventStream).and_then(|it| match it { + (Ok(Response::Handled), func) => Ok(func), + _ => unreachable!(), + })?; + + while let Ok(ev) = (func)() { + // check only relevant later, only done here to avoid a clone + let ev_is_ws_related = matches!( + &ev, + niri_ipc::Event::WorkspacesChanged { .. } + | niri_ipc::Event::WorkspaceActivated { .. } + | niri_ipc::Event::WorkspaceActiveWindowChanged { .. } + ); + + // apply event to state + state.apply(ev); + + if ev_is_ws_related { + let mut workspaces = state + .workspaces + .workspaces + .values() + .map(|it| it.clone()) + .collect::>(); + workspaces.sort_by(|a, b| a.idx.cmp(&b.idx)); + workspaces.sort_by(|a, b| { + a.output + .clone() + .expect("unreachable") + .to_lowercase() + .cmp(&b.output.clone().expect("unreachable").to_lowercase()) + }); + + let output_colors_lut = workspaces + .iter() + .map(|it| it.output.clone().expect("unreachable")) + .fold(Vec::new(), |mut acc, it| { + if !acc.contains(&it) { + acc.push(it); + } + acc + }) + .into_iter() + .enumerate() + .map(|(idx, val)| (val, &COLORS[idx])) + .collect::>(); + + let results = workspaces + .iter() + .map(|ws| WsData { + color: output_colors_lut[&ws.output.clone().expect("unreachable")] + [if ws.is_active { 1 } else { 0 }], + idx: ws.idx, + focused: ws.is_focused, + active: ws.is_active, + }) + .collect::>(); + + println!("{}", serde_json::to_string(&results).unwrap()); + } } Ok(()) @@ -30,24 +89,8 @@ fn main() -> Fallible<()> { #[derive(Debug, Serialize)] struct WsData { - name: String, + color: &'static str, + idx: u8, focused: bool, - urgent: bool, -} - -impl From for WsData { - fn from( - Workspace { - name, - focused, - urgent, - .. - }: Workspace, - ) -> Self { - WsData { - name, - focused, - urgent, - } - } + active: bool, } From f071ae5659a0665ad21e48d08478f22a5b274e6d Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Thu, 13 Mar 2025 17:32:25 +0100 Subject: [PATCH 218/301] switch to hyfetch --- common.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common.nix b/common.nix index c72d791..9c8005f 100644 --- a/common.nix +++ b/common.nix @@ -42,7 +42,7 @@ with builtins; { prusa-slicer wget git - neofetch + hyfetch pciutils zip unzip From 7cbd48889f800085c1c4a7b510c2c46603da42fc Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Thu, 13 Mar 2025 17:32:48 +0100 Subject: [PATCH 219/301] even more column fullscreening shortcuts --- modules/desktop-environment/home/niri/binds.nix | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/modules/desktop-environment/home/niri/binds.nix b/modules/desktop-environment/home/niri/binds.nix index 0dd7e0c..563a4dc 100644 --- a/modules/desktop-environment/home/niri/binds.nix +++ b/modules/desktop-environment/home/niri/binds.nix @@ -67,7 +67,8 @@ "Mod+BracketLeft".action.consume-or-expel-window-left = []; "Mod+BracketRight".action.consume-or-expel-window-right = []; "Mod+F".action.maximize-column = []; - "Mod+Shift+F".action.fullscreen-window = []; + "Mod+Shift+F".action.expand-column-to-available-width = []; + "Mod+Ctrl+F".action.fullscreen-window = []; "Mod+C".action.center-column = []; "Mod+Minus".action.set-column-width = "-5%"; "Mod+Equal".action.set-column-width = "+5%"; From b741d1eeb26c21a43603d722e0f1bc7ef1906dcd Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Thu, 13 Mar 2025 17:33:39 +0100 Subject: [PATCH 220/301] eeeeeee --- modules/desktop-environment/home/niri/default.nix | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/modules/desktop-environment/home/niri/default.nix b/modules/desktop-environment/home/niri/default.nix index 7dea436..27f6645 100644 --- a/modules/desktop-environment/home/niri/default.nix +++ b/modules/desktop-environment/home/niri/default.nix @@ -28,17 +28,9 @@ window-rules = [ # TODO: privacy screen rules - # { - # geometry-corner-radius = let val = 1.; in { - # bottom-left = val; - # bottom-right = val; - # top-left = val; - # top-right = val; - # }; - # clip-to-geometry = true; - # } ]; + # fix electron apps not doing wayland environment.ELECTRON_OZONE_PLATFORM_HINT = "auto"; }; } From beceee7c99ce65d63c12c12402d87b7594c87583 Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Thu, 13 Mar 2025 17:33:50 +0100 Subject: [PATCH 221/301] improve tab indicator styles --- modules/desktop-environment/home/niri/style.nix | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/modules/desktop-environment/home/niri/style.nix b/modules/desktop-environment/home/niri/style.nix index 538a7e4..d9d9a61 100644 --- a/modules/desktop-environment/home/niri/style.nix +++ b/modules/desktop-environment/home/niri/style.nix @@ -36,8 +36,9 @@ hide-when-single-tab = true; active.color = "#5bcefa"; inactive.color = "#3c3836"; - gap = 1; - width = 3; + gap = 2; + width = 5; + corner-radius= 3; position = "left"; gaps-between-tabs = 0; }; From bc6d1a94a5ba6296f4765b1ded28536b56946554 Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Fri, 14 Mar 2025 13:08:22 +0100 Subject: [PATCH 222/301] disallow steams focus stealing --- modules/desktop-environment/home/niri/default.nix | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/modules/desktop-environment/home/niri/default.nix b/modules/desktop-environment/home/niri/default.nix index 27f6645..e35a08c 100644 --- a/modules/desktop-environment/home/niri/default.nix +++ b/modules/desktop-environment/home/niri/default.nix @@ -28,6 +28,14 @@ window-rules = [ # TODO: privacy screen rules + { + matches = [ + { + app-id = "steam"; + } + ]; + open-focused = false; + } ]; # fix electron apps not doing wayland From 582b4cbe3f2cce3a941ea03c98acd6d934d528f9 Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Fri, 14 Mar 2025 13:09:28 +0100 Subject: [PATCH 223/301] small amounts of work on ws monitor --- .../eww/configDir/bottomBar/workspaces.yuck | 4 ++-- .../home/panels/eww/configDir/eww.css | 6 +---- programs/bar-ws-monitor/src/main.rs | 23 +++++++++++++------ 3 files changed, 19 insertions(+), 14 deletions(-) diff --git a/modules/desktop-environment/home/panels/eww/configDir/bottomBar/workspaces.yuck b/modules/desktop-environment/home/panels/eww/configDir/bottomBar/workspaces.yuck index 96e37a5..16215ff 100644 --- a/modules/desktop-environment/home/panels/eww/configDir/bottomBar/workspaces.yuck +++ b/modules/desktop-environment/home/panels/eww/configDir/bottomBar/workspaces.yuck @@ -3,8 +3,8 @@ :class "workspaces" (for workspace in workspaces (button - :style "border-bottom: 4px solid ${workspace.color}" - :class "${workspace.active ? "focused" : 0}" + :style "border-bottom: 4px solid ${workspace.color}${workspace.active ? "; background-color: #3c3836" : ""}" + :class "${workspace.focused ? "focused" : ""}" :onclick "swaymsg workspace ${workspace.name}" (label :text "${workspace.idx}") ) diff --git a/modules/desktop-environment/home/panels/eww/configDir/eww.css b/modules/desktop-environment/home/panels/eww/configDir/eww.css index a61a23f..81a6604 100644 --- a/modules/desktop-environment/home/panels/eww/configDir/eww.css +++ b/modules/desktop-environment/home/panels/eww/configDir/eww.css @@ -10,10 +10,6 @@ label { border: 0px; } -.workspaces button.urgent { - background-color: #cc241d; -} - .workspaces button.focused { background-color: #504935; } @@ -37,4 +33,4 @@ label { .traveldingsWindow { border-radius: 15px; -} +} \ No newline at end of file diff --git a/programs/bar-ws-monitor/src/main.rs b/programs/bar-ws-monitor/src/main.rs index 23cfb6e..31d7d34 100644 --- a/programs/bar-ws-monitor/src/main.rs +++ b/programs/bar-ws-monitor/src/main.rs @@ -46,6 +46,7 @@ fn main() -> Result<(), std::io::Error> { .values() .map(|it| it.clone()) .collect::>(); + workspaces.sort_by(|a, b| a.idx.cmp(&b.idx)); workspaces.sort_by(|a, b| { a.output @@ -71,13 +72,21 @@ fn main() -> Result<(), std::io::Error> { let results = workspaces .iter() - .map(|ws| WsData { - color: output_colors_lut[&ws.output.clone().expect("unreachable")] - [if ws.is_active { 1 } else { 0 }], - idx: ws.idx, - focused: ws.is_focused, - active: ws.is_active, - }) + .map( + |Workspace { + idx, + output, + is_active, + is_focused, + .. + }| WsData { + color: output_colors_lut[&output.clone().expect("unreachable")] + [if *is_active { 1 } else { 0 }], + idx: *idx, + focused: *is_focused, + active: *is_active, + }, + ) .collect::>(); println!("{}", serde_json::to_string(&results).unwrap()); From f6d2dc5512decd472996ccc868bad0b3c5ae403f Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Fri, 14 Mar 2025 13:09:38 +0100 Subject: [PATCH 224/301] fix floating style --- modules/desktop-environment/home/niri/style.nix | 2 ++ 1 file changed, 2 insertions(+) diff --git a/modules/desktop-environment/home/niri/style.nix b/modules/desktop-environment/home/niri/style.nix index d9d9a61..99c5a69 100644 --- a/modules/desktop-environment/home/niri/style.nix +++ b/modules/desktop-environment/home/niri/style.nix @@ -50,6 +50,8 @@ is-floating = true; }]; shadow = { + offset.y = 0; + offset.x = 0; softness = 40; color = "#bab9e5af"; inactive-color = "#fa9d99af"; From b8ac1ed939999e44b3fe5f3dd8169012b68e6c20 Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Fri, 14 Mar 2025 13:09:58 +0100 Subject: [PATCH 225/301] reduce unnecessary killings of eww --- modules/shell/nu/custom_commands.nu | 2 -- 1 file changed, 2 deletions(-) diff --git a/modules/shell/nu/custom_commands.nu b/modules/shell/nu/custom_commands.nu index d777349..4f1d00b 100644 --- a/modules/shell/nu/custom_commands.nu +++ b/modules/shell/nu/custom_commands.nu @@ -92,7 +92,6 @@ def bars [display_name?: string] { def "dp ccchh" [] { layaway "hdmi2 + edp/bottom,center" - pkill eww bars "25BL56WY" } @@ -100,6 +99,5 @@ def "dp gay" [] { layaway "dp3 + edp1/bottom,center + dp5/right,top" # manual fix for lack of frequency in layaway, else monitor just turns off swaymsg "output DP-3 position 0 0 scale 1 transform normal resolution 1920x1080@60Hz" - pkill eww bars "LEN G27c-10" } From bdf243ed75af75ba835c0bebaceb55a8fe3b0ea5 Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Fri, 14 Mar 2025 13:10:11 +0100 Subject: [PATCH 226/301] move miau alias to correct file --- modules/shell/nu/aliases.nu | 1 + modules/shell/nu/custom_commands.nu | 2 -- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/modules/shell/nu/aliases.nu b/modules/shell/nu/aliases.nu index 72d528d..3d6bfab 100644 --- a/modules/shell/nu/aliases.nu +++ b/modules/shell/nu/aliases.nu @@ -36,4 +36,5 @@ alias gunim = cd ~/Docs/uni/mathe1-3; # typos alias juts = just; +alias miau = meow; alias shut = shutdown now; diff --git a/modules/shell/nu/custom_commands.nu b/modules/shell/nu/custom_commands.nu index 4f1d00b..fc22cba 100644 --- a/modules/shell/nu/custom_commands.nu +++ b/modules/shell/nu/custom_commands.nu @@ -75,8 +75,6 @@ def meow [ n = 1 ] { "m{rr,r,}{e,ee,{,e,aa}o}w{,w,ww}" | str expand | shuffle | first $n | str join ' ' } -alias miau = meow; - def bars [display_name?: string] { print $display_name; pkill eww From f28ec1ae8f5ce86b59d5ce1b3a7d4ab538dc7698 Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Fri, 14 Mar 2025 16:01:58 +0100 Subject: [PATCH 227/301] extend cursor despawn time to make it properly possible to read alt texts --- modules/desktop-environment/home/niri/style.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/desktop-environment/home/niri/style.nix b/modules/desktop-environment/home/niri/style.nix index 99c5a69..b12b202 100644 --- a/modules/desktop-environment/home/niri/style.nix +++ b/modules/desktop-environment/home/niri/style.nix @@ -6,7 +6,7 @@ theme = "phinger-cursors-dark"; size = 16; hide-when-typing = true; - hide-after-inactive-ms = 2500; + hide-after-inactive-ms = 10000; }; layout = { From c2ebb8d760a5a4bf1039845cad82134d2ea27556 Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Fri, 14 Mar 2025 20:02:24 +0100 Subject: [PATCH 228/301] Switch to niri - Episode 2: The (first?) purge --- flake.nix | 9 - modules/desktop-environment/audio.nix | 2 - modules/desktop-environment/default.nix | 3 +- modules/desktop-environment/flatpak.nix | 16 - .../desktop-environment/home/compositing.nix | 27 - modules/desktop-environment/home/default.nix | 12 +- .../eww/configDir/bottomBar/bottomBar.yuck | 0 .../eww/configDir/bottomBar/traveldings.yuck | 0 .../eww/configDir/bottomBar/workspaces.yuck | 0 .../home/{panels => }/eww/configDir/eww.css | 0 .../home/{panels => }/eww/configDir/eww.yuck | 0 .../{panels => }/eww/configDir/scripts/bat.nu | 0 .../eww/configDir/scripts/iceTacho.nu | 0 .../eww/configDir/topBar/sysinfo.yuck | 0 .../eww/configDir/topBar/time.yuck | 0 .../eww/configDir/topBar/topBar.yuck | 0 .../home/{panels => }/eww/configDir/util.yuck | 0 .../home/{panels => }/eww/default.nix | 0 modules/desktop-environment/home/layaway.nix | 28 + .../desktop-environment/home/niri/binds.nix | 10 + .../desktop-environment/home/niri/default.nix | 2 +- .../home/panels/default.nix | 7 - .../home/panels/polybar.nix | 146 - .../home/panels/xmobar/default.nix | 27 - .../home/panels/xmobar/xmobar.hs | 47 - .../desktop-environment/home/sway/default.nix | 228 - modules/desktop-environment/home/swayidle.nix | 17 + modules/desktop-environment/home/typst.nix | 8 +- .../home/xmonad/default.nix | 9 - .../home/xmonad/wallpaper/default.nix | 9 - .../desktop-environment/home/xmonad/xmonad.hs | 175 - modules/desktop-environment/xdg-portals.nix | 17 + modules/desktop/default.nix | 258 +- modules/desktop/ios-compat.nix | 29 - modules/desktop/x.nix | 5 - modules/shell/default.nix | 1 + other/0001-fomx.patch | 4983 - other/assets/desktopctl/lock-screen.svg | 58 - other/assets/desktopctl/logout.svg | 59 - other/assets/desktopctl/reboot.svg | 56 - other/assets/desktopctl/shutdown.svg | 54 - .../assets}/wallpaper/wallpaper.jpg | Bin other/assets/xenia.pnm | 76804 ---------------- other/assets/xenia.xcf | Bin 39636 -> 0 bytes other/remaps-potatobook-g.toml | 18 - other/rofi-themes/applauncher.rasi | 79 - other/scripts/desktop/desktopctl.nix | 35 - other/scripts/desktop/macros/play-loop.sh | 9 - other/scripts/desktop/macros/play.sh | 5 - other/scripts/desktop/macros/record.sh | 5 - other/scripts/desktop/menu-qalc.sh | 87 - other/scripts/desktop/ocr-screenshot.sh | 27 - other/scripts/desktop/window-screenshot.nu | 19 - other/scripts/desktop/window-screenshot.sh | 8 - 54 files changed, 192 insertions(+), 83206 deletions(-) delete mode 100644 modules/desktop-environment/flatpak.nix delete mode 100644 modules/desktop-environment/home/compositing.nix rename modules/desktop-environment/home/{panels => }/eww/configDir/bottomBar/bottomBar.yuck (100%) rename modules/desktop-environment/home/{panels => }/eww/configDir/bottomBar/traveldings.yuck (100%) rename modules/desktop-environment/home/{panels => }/eww/configDir/bottomBar/workspaces.yuck (100%) rename modules/desktop-environment/home/{panels => }/eww/configDir/eww.css (100%) rename modules/desktop-environment/home/{panels => }/eww/configDir/eww.yuck (100%) rename modules/desktop-environment/home/{panels => }/eww/configDir/scripts/bat.nu (100%) rename modules/desktop-environment/home/{panels => }/eww/configDir/scripts/iceTacho.nu (100%) rename modules/desktop-environment/home/{panels => }/eww/configDir/topBar/sysinfo.yuck (100%) rename modules/desktop-environment/home/{panels => }/eww/configDir/topBar/time.yuck (100%) rename modules/desktop-environment/home/{panels => }/eww/configDir/topBar/topBar.yuck (100%) rename modules/desktop-environment/home/{panels => }/eww/configDir/util.yuck (100%) rename modules/desktop-environment/home/{panels => }/eww/default.nix (100%) create mode 100644 modules/desktop-environment/home/layaway.nix delete mode 100644 modules/desktop-environment/home/panels/default.nix delete mode 100644 modules/desktop-environment/home/panels/polybar.nix delete mode 100644 modules/desktop-environment/home/panels/xmobar/default.nix delete mode 100644 modules/desktop-environment/home/panels/xmobar/xmobar.hs delete mode 100644 modules/desktop-environment/home/sway/default.nix create mode 100644 modules/desktop-environment/home/swayidle.nix delete mode 100644 modules/desktop-environment/home/xmonad/default.nix delete mode 100644 modules/desktop-environment/home/xmonad/wallpaper/default.nix delete mode 100644 modules/desktop-environment/home/xmonad/xmonad.hs create mode 100644 modules/desktop-environment/xdg-portals.nix delete mode 100644 modules/desktop/ios-compat.nix delete mode 100644 other/0001-fomx.patch delete mode 100644 other/assets/desktopctl/lock-screen.svg delete mode 100644 other/assets/desktopctl/logout.svg delete mode 100644 other/assets/desktopctl/reboot.svg delete mode 100644 other/assets/desktopctl/shutdown.svg rename {modules/desktop-environment/home/xmonad => other/assets}/wallpaper/wallpaper.jpg (100%) delete mode 100644 other/assets/xenia.pnm delete mode 100644 other/assets/xenia.xcf delete mode 100644 other/remaps-potatobook-g.toml delete mode 100644 other/rofi-themes/applauncher.rasi delete mode 100644 other/scripts/desktop/desktopctl.nix delete mode 100644 other/scripts/desktop/macros/play-loop.sh delete mode 100644 other/scripts/desktop/macros/play.sh delete mode 100644 other/scripts/desktop/macros/record.sh delete mode 100644 other/scripts/desktop/menu-qalc.sh delete mode 100755 other/scripts/desktop/ocr-screenshot.sh delete mode 100755 other/scripts/desktop/window-screenshot.nu delete mode 100644 other/scripts/desktop/window-screenshot.sh diff --git a/flake.nix b/flake.nix index 1943853..7cb1cfb 100644 --- a/flake.nix +++ b/flake.nix @@ -75,16 +75,7 @@ in { devShells."x86_64-linux".default = pkgs.mkShell { buildInputs = [ - (pkgs.haskellPackages.ghcWithPackages - (pkgs: - with pkgs; [ - xmonad - xmonad-contrib - xmobar - statgrab - ])) rs-toolchain - pkgs.haskell-language-server pkgs.pkg-config pkgs.openssl ]; diff --git a/modules/desktop-environment/audio.nix b/modules/desktop-environment/audio.nix index 2909e3a..c26f679 100644 --- a/modules/desktop-environment/audio.nix +++ b/modules/desktop-environment/audio.nix @@ -17,6 +17,4 @@ helvum ]; - # hardware.pulseaudio.enable = pkgs.lib.mkForce false; - # sound.mediaKeys.enable = true; } diff --git a/modules/desktop-environment/default.nix b/modules/desktop-environment/default.nix index d6030ad..a7ef2f3 100644 --- a/modules/desktop-environment/default.nix +++ b/modules/desktop-environment/default.nix @@ -2,11 +2,12 @@ imports = [ ./audio.nix ./eduroam.nix - ./flatpak.nix + ./xdg-portals.nix ./home ./dm.nix ./tlp.nix ]; + services.flatpak.enable = true; services.upower = { enable = true; }; diff --git a/modules/desktop-environment/flatpak.nix b/modules/desktop-environment/flatpak.nix deleted file mode 100644 index cf8b7b2..0000000 --- a/modules/desktop-environment/flatpak.nix +++ /dev/null @@ -1,16 +0,0 @@ -{ - config, - lib, - pkgs, - ... -}: { - services.flatpak.enable = true; - xdg.portal = { - enable = true; - # TODO - config.common.default = "*"; - extraPortals = [ - pkgs.xdg-desktop-portal-gtk - ]; - }; -} diff --git a/modules/desktop-environment/home/compositing.nix b/modules/desktop-environment/home/compositing.nix deleted file mode 100644 index fbba084..0000000 --- a/modules/desktop-environment/home/compositing.nix +++ /dev/null @@ -1,27 +0,0 @@ -{...}: { - services.picom = { - backend = "glx"; - - shadow = true; - shadowOffsets = [(-40) (-30)]; - shadowOpacity = 0.2; - shadowExclude = [ - "class_g ?= 'Notify-osd'" - "_GTK_FRAME_EXTENTS@:c" - "!(class_g = 'Rofi' || class_g = 'Dunst')" - ]; - - vSync = true; - settings = { - "shadow-radius" = 40; - # fading rofi - "fading" = true; - "fade-in-step" = 0.25; - "fade-out-step" = 0.2; - "fade-delta" = 20; - "fade-exclude" = ["class_g != 'Rofi'"]; - # use damage information - "use-damage" = true; - }; - }; -} diff --git a/modules/desktop-environment/home/default.nix b/modules/desktop-environment/home/default.nix index 0b48b10..483b614 100644 --- a/modules/desktop-environment/home/default.nix +++ b/modules/desktop-environment/home/default.nix @@ -4,14 +4,18 @@ imports = [ ./notifications.nix ./terminal.nix - ./compositing.nix + ./layaway.nix + ./swayidle.nix ./typst.nix - ./panels - ./xmonad - ./sway + ./eww ./niri ]; + # temporary(tm) + programs.wofi.enable = true; + programs.swaylock.enable = true; + services.network-manager-applet.enable = true; + services.gpg-agent = { enable = true; enableNushellIntegration = true; diff --git a/modules/desktop-environment/home/panels/eww/configDir/bottomBar/bottomBar.yuck b/modules/desktop-environment/home/eww/configDir/bottomBar/bottomBar.yuck similarity index 100% rename from modules/desktop-environment/home/panels/eww/configDir/bottomBar/bottomBar.yuck rename to modules/desktop-environment/home/eww/configDir/bottomBar/bottomBar.yuck diff --git a/modules/desktop-environment/home/panels/eww/configDir/bottomBar/traveldings.yuck b/modules/desktop-environment/home/eww/configDir/bottomBar/traveldings.yuck similarity index 100% rename from modules/desktop-environment/home/panels/eww/configDir/bottomBar/traveldings.yuck rename to modules/desktop-environment/home/eww/configDir/bottomBar/traveldings.yuck diff --git a/modules/desktop-environment/home/panels/eww/configDir/bottomBar/workspaces.yuck b/modules/desktop-environment/home/eww/configDir/bottomBar/workspaces.yuck similarity index 100% rename from modules/desktop-environment/home/panels/eww/configDir/bottomBar/workspaces.yuck rename to modules/desktop-environment/home/eww/configDir/bottomBar/workspaces.yuck diff --git a/modules/desktop-environment/home/panels/eww/configDir/eww.css b/modules/desktop-environment/home/eww/configDir/eww.css similarity index 100% rename from modules/desktop-environment/home/panels/eww/configDir/eww.css rename to modules/desktop-environment/home/eww/configDir/eww.css diff --git a/modules/desktop-environment/home/panels/eww/configDir/eww.yuck b/modules/desktop-environment/home/eww/configDir/eww.yuck similarity index 100% rename from modules/desktop-environment/home/panels/eww/configDir/eww.yuck rename to modules/desktop-environment/home/eww/configDir/eww.yuck diff --git a/modules/desktop-environment/home/panels/eww/configDir/scripts/bat.nu b/modules/desktop-environment/home/eww/configDir/scripts/bat.nu similarity index 100% rename from modules/desktop-environment/home/panels/eww/configDir/scripts/bat.nu rename to modules/desktop-environment/home/eww/configDir/scripts/bat.nu diff --git a/modules/desktop-environment/home/panels/eww/configDir/scripts/iceTacho.nu b/modules/desktop-environment/home/eww/configDir/scripts/iceTacho.nu similarity index 100% rename from modules/desktop-environment/home/panels/eww/configDir/scripts/iceTacho.nu rename to modules/desktop-environment/home/eww/configDir/scripts/iceTacho.nu diff --git a/modules/desktop-environment/home/panels/eww/configDir/topBar/sysinfo.yuck b/modules/desktop-environment/home/eww/configDir/topBar/sysinfo.yuck similarity index 100% rename from modules/desktop-environment/home/panels/eww/configDir/topBar/sysinfo.yuck rename to modules/desktop-environment/home/eww/configDir/topBar/sysinfo.yuck diff --git a/modules/desktop-environment/home/panels/eww/configDir/topBar/time.yuck b/modules/desktop-environment/home/eww/configDir/topBar/time.yuck similarity index 100% rename from modules/desktop-environment/home/panels/eww/configDir/topBar/time.yuck rename to modules/desktop-environment/home/eww/configDir/topBar/time.yuck diff --git a/modules/desktop-environment/home/panels/eww/configDir/topBar/topBar.yuck b/modules/desktop-environment/home/eww/configDir/topBar/topBar.yuck similarity index 100% rename from modules/desktop-environment/home/panels/eww/configDir/topBar/topBar.yuck rename to modules/desktop-environment/home/eww/configDir/topBar/topBar.yuck diff --git a/modules/desktop-environment/home/panels/eww/configDir/util.yuck b/modules/desktop-environment/home/eww/configDir/util.yuck similarity index 100% rename from modules/desktop-environment/home/panels/eww/configDir/util.yuck rename to modules/desktop-environment/home/eww/configDir/util.yuck diff --git a/modules/desktop-environment/home/panels/eww/default.nix b/modules/desktop-environment/home/eww/default.nix similarity index 100% rename from modules/desktop-environment/home/panels/eww/default.nix rename to modules/desktop-environment/home/eww/default.nix diff --git a/modules/desktop-environment/home/layaway.nix b/modules/desktop-environment/home/layaway.nix new file mode 100644 index 0000000..e0f45b5 --- /dev/null +++ b/modules/desktop-environment/home/layaway.nix @@ -0,0 +1,28 @@ +{ + pkgs, + lib, + ... +}: let + # stolen: https://github.com/MultisampledNight/core/blob/678f176cb24f5dc4b5dc629cfd3e643487be01bb/system/packages/layaway/default.nix#L7-L25 + layaway = pkgs.rustPlatform.buildRustPackage rec { + pname = "layaway"; + version = "0.2.0"; + + src = pkgs.fetchFromGitHub { + owner = "MultisampledNight"; + repo = pname; + rev = "v${version}"; + hash = "sha256-SzAuVFEy56svasO3+1p6ysBRrIQd0UZX++/P4ZuwWm0="; + }; + + cargoHash = "sha256-liWP6AI72xG1O+MbCZ0cjJ2llHj/iv3hR/U3BLv5fKA="; + + meta = with lib; { + description = "Layout creation for Sway via a relative and human-readable DSL."; + homepage = "https://github.com/MultisampledNight/layaway"; + maintainers = [maintainers.multisn8]; + }; + }; +in { + home.packages = [layaway]; +} diff --git a/modules/desktop-environment/home/niri/binds.nix b/modules/desktop-environment/home/niri/binds.nix index 563a4dc..9f8b60d 100644 --- a/modules/desktop-environment/home/niri/binds.nix +++ b/modules/desktop-environment/home/niri/binds.nix @@ -75,5 +75,15 @@ "Mod+Shift+Minus".action.set-window-height = "-10%"; "Mod+Shift+Equal".action.set-window-height = "+10%"; "Mod+W".action.toggle-column-tabbed-display = []; + + # media keys + "XF86AudioRaiseVolume".action.spawn = ["wpctl" "set-volume" "@DEFAULT_AUDIO_SINK@" "0.1+"]; + "XF86AudioLowerVolume".action.spawn = ["wpctl" "set-volume" "@DEFAULT_AUDIO_SINK@" "0.1-"]; + "XF86AudioMute".action.spawn = ["wpctl" "set-mute" "@DEFAULT_AUDIO_SINK@" "toggle"]; + "XF86AudioMicMute" .action.spawn = ["wpctl" "set-mute" "@DEFAULT_AUDIO_SOURCE@" "toggle"]; + "XF86AudioRaiseVolume".allow-when-locked = true; + "XF86AudioLowerVolume".allow-when-locked = true; + "XF86AudioMute".allow-when-locked = true; + "XF86AudioMicMute" .allow-when-locked = true; }; } diff --git a/modules/desktop-environment/home/niri/default.nix b/modules/desktop-environment/home/niri/default.nix index e35a08c..8b80d13 100644 --- a/modules/desktop-environment/home/niri/default.nix +++ b/modules/desktop-environment/home/niri/default.nix @@ -19,7 +19,7 @@ command = [ "${pkgs.swaybg}/bin/swaybg" "-i" - "${../xmonad/wallpaper/wallpaper.jpg}" + "${../../../../other/assets/wallpaper/wallpaper.jpg}" "-m" "fill" ]; diff --git a/modules/desktop-environment/home/panels/default.nix b/modules/desktop-environment/home/panels/default.nix deleted file mode 100644 index 2f0bed2..0000000 --- a/modules/desktop-environment/home/panels/default.nix +++ /dev/null @@ -1,7 +0,0 @@ -{...}: { - imports = [ - ./xmobar - ./polybar.nix - ./eww - ]; -} diff --git a/modules/desktop-environment/home/panels/polybar.nix b/modules/desktop-environment/home/panels/polybar.nix deleted file mode 100644 index 4e8e02e..0000000 --- a/modules/desktop-environment/home/panels/polybar.nix +++ /dev/null @@ -1,146 +0,0 @@ -{ - config, - lib, - pkgs, - ... -}: { - services.polybar = { - enable = true; - package = pkgs.polybarFull; - - script = ""; - settings = { - colors = { - background = "#282828"; - background-alt = "#3c3836"; - foreground = "#ebdbb2"; - primary = "#d65d0e"; - secondary = "#fe8019"; - alert = "#cc241d"; - disabled = "#504945"; - }; - "bar/status" = { - # Style - bottom = true; - width = "100%"; - height = "24px"; - radius = 0; - tray-position = "center"; - background = "\${colors.background}"; - foreground = "\${colors.foreground}"; - line-size = "4px"; - border-color = "#00000000"; - padding-left = 0; - padding-right = 1; - module-margin = 1; - separator = "|"; - separator-foreground = "\${colors.disabled}"; - font-0 = "FiraCode Nerd Font"; - modules-left = "xworkspaces xwindow"; - modules-right = "memory cpu wlan bat0 bat1"; - cursor-click = "pointer"; - cursor-scroll = "ns-resize"; - enable-ipc = true; - wm-restack = "generic"; - override-redirect = false; - }; - - "module/xworkspaces" = { - type = "internal/xworkspaces"; - label-active = ""; - label-active-padding = 1; - label-occupied = ""; - label-occupied-padding = 1; - label-urgent = ""; - label-urgent-foreground = "\${colors.alert}"; - label-urgent-padding = 1; - label-empty = ""; - label-empty-foreground = "\${colors.disabled}"; - label-empty-padding = 1; - }; - - "module/xwindow" = { - type = "internal/xwindow"; - label = "%title:0:60:...%"; - }; - - "module/memory" = { - type = "internal/memory"; - interval = 2; - format-prefix = "󰍛 "; - format-prefix-foreground = "\${colors.primary}"; - label = "%percentage_used:2%%"; - }; - - "module/cpu" = { - type = "internal/cpu"; - interval = "2"; - format-prefix = "󰻠 "; - format-prefix-foreground = "\${colors.primary}"; - label = "%percentage:2%%"; - }; - - "network-base" = { - type = "internal/network"; - interval = 5; - format-connected = " "; - format-disconnected = ""; - label-disconnected = "󰣼"; - label-disconnected-foreground = "#d65d0e"; - ramp.signal = [ - "%{F#cc241d}󰣾" - "%{F#d79921}󰣴" - "%{F#98971a}󰣶" - "%{F#98971a}󰣸" - "%{F#98971a}󰣺" - ]; - }; - - "module/wlan" = { - "inherit" = "network-base"; - interface-type = "wireless"; - label-connected = "%{F#F0C674}%{F-} %local_ip%"; - }; - "battery-base" = { - type = "internal/battery"; - poll-interval = 1; - time-format = "%H%{F#7c6f64}:%{F#d5c4a1}%M"; - label-charging = "%{F#98971a}󰚥 %{F#ebdbb2}%percentage%%%{F#d5c4a1} %time%"; - format-charging = " "; - label-discharging = "%{F#ebdbb2}%percentage%%%{F#bdae93} %time%"; - format-discharging = " "; - label-full = "%{F#98971a}󰁹%{F#ebdbb2} %percentage%%"; - format-full = ""; - label-low = "%{F#cc241d}󰂎%{F#ebdbb2} %percentage%%"; - format-low = ""; - ramp.capacity = [ - "%{F#cc241d}󰁺" - "%{F#d79921}󰁻" - "%{F#98971a}󰁼" - "%{F#98971a}󰁽" - "%{F#98971a}󰁾" - "%{F#98971a}󰁿" - "%{F#98971a}󰂀" - "%{F#98971a}󰂁" - "%{F#98971a}󰂂" - "%{F#98971a}󰁹" - ]; - }; - "module/bat0" = { - "inherit" = "battery-base"; - battery = "BAT0"; - adapter = "ADP1"; - }; - "module/bat1" = { - "inherit" = "battery-base"; - battery = "BAT1"; - adapter = "ADP1"; - }; - - "settings" = { - screenchange-reload = true; - pseudo-transparency = true; - }; - }; - }; -} diff --git a/modules/desktop-environment/home/panels/xmobar/default.nix b/modules/desktop-environment/home/panels/xmobar/default.nix deleted file mode 100644 index c5ac0f8..0000000 --- a/modules/desktop-environment/home/panels/xmobar/default.nix +++ /dev/null @@ -1,27 +0,0 @@ -{ - lib, - pkgs, - ... -}: let - xmobarGhc = pkgs.haskellPackages.ghcWithPackages (pkgs: - with pkgs; [ - xmobar - statgrab - ]); -in { - home = { - packages = [xmobarGhc]; - file."xmobar.hs" = rec { - source = ./xmobar.hs; - target = ".config/xmobar/xmobar.hs"; - onChange = '' - ${xmobarGhc}/bin/ghc -threaded ${target} - ${pkgs.busybox}/bin/pkill xmobar - ${pkgs.haskellPackages.xmonad}/bin/xmonad --restart - ''; - }; - }; - programs.xmobar = { - enable = true; - }; -} diff --git a/modules/desktop-environment/home/panels/xmobar/xmobar.hs b/modules/desktop-environment/home/panels/xmobar/xmobar.hs deleted file mode 100644 index 51b6138..0000000 --- a/modules/desktop-environment/home/panels/xmobar/xmobar.hs +++ /dev/null @@ -1,47 +0,0 @@ -import Xmobar -import System.Statgrab - --- TODOS: --- - custom cpu module --- - custom mem module --- - custom network/ping module with avg of n pings and blah --- - custom graph rendering based on braille characters --- - custom "ramp" thingies --- - newsticker? --- - mail/message monitoring --- - if possible, different bars per workspace - -data CustomCpu = CustomCpu - deriving (Read, Show) - -instance Exec CustomCpu where - alias CustomCpu = "cpu" - run CustomCpu = do - -- return (show :: IO String (snapshot :: Stats CPUPercent)) - return "meow" - -fc code content = "" ++ content ++ "" - -sep = fc "#7c6f64" -icon = fc "#d65d0e" - -config :: Config -config = - defaultConfig - { font = "FiraCode Nerd Font", - allDesktops = True, - alpha = 255, - bgColor = "#282828", - fgColor = "#ebdbb2", - commands = - [ Run $ Xmobar.Memory ["t", "Mem: %"] 10, - Run $ CustomCpu, - Run $ Date (icon "\983277" ++ " %Y" ++ sep "-" ++ "%m" ++ sep "-" ++ "%d " ++ icon "\988236" ++ " %H" ++ sep ":" ++ "%M" ++ sep ":" ++ "%S ") "date" 10 - ], - template = "%memory% }{ %cpu% }{ %date%", - alignSep = "}{", - position = TopH 24 - } - -main :: IO () -main = xmobar config -- or: configFromArgs config >>= xmobar diff --git a/modules/desktop-environment/home/sway/default.nix b/modules/desktop-environment/home/sway/default.nix deleted file mode 100644 index 91ecece..0000000 --- a/modules/desktop-environment/home/sway/default.nix +++ /dev/null @@ -1,228 +0,0 @@ -{ - pkgs, - lib, - config, - ... -}: let - # stolen: https://github.com/MultisampledNight/core/blob/678f176cb24f5dc4b5dc629cfd3e643487be01bb/system/packages/layaway/default.nix#L7-L25 - layaway = pkgs.rustPlatform.buildRustPackage rec { - pname = "layaway"; - version = "0.2.0"; - - src = pkgs.fetchFromGitHub { - owner = "MultisampledNight"; - repo = pname; - rev = "v${version}"; - hash = "sha256-SzAuVFEy56svasO3+1p6ysBRrIQd0UZX++/P4ZuwWm0="; - }; - - cargoHash = "sha256-liWP6AI72xG1O+MbCZ0cjJ2llHj/iv3hR/U3BLv5fKA="; - - meta = with lib; { - description = "Layout creation for Sway via a relative and human-readable DSL."; - homepage = "https://github.com/MultisampledNight/layaway"; - maintainers = [maintainers.multisn8]; - }; - }; -in { - programs.wofi.enable = true; - programs.swaylock.enable = true; - services.network-manager-applet.enable = true; - home.packages = [layaway]; - - xdg.portal = { - enable = true; - extraPortals = [pkgs.xdg-desktop-portal-wlr]; - # sway = { - # default = ["wlr"]; - # }; - config.common.default = "*"; - }; - - services.swayidle = { - enable = true; - events = [ - { - event = "before-sleep"; - command = "${pkgs.swaylock}/bin/swaylock -fF -c 442244"; - } - { - event = "lock"; - command = "swaylock -c 441144"; - } - ]; - }; - - wayland.windowManager.sway = { - enable = true; - systemd = { - enable = true; - }; - wrapperFeatures = { - base = true; - gtk = true; - }; - config = { - modes = { - resize = { - Down = "resize grow height 10 px"; - Escape = "mode default"; - Left = "resize shrink width 10 px"; - Return = "mode default"; - Right = "resize grow width 10 px"; - Up = "resize shrink height 10 px"; - h = "resize shrink width 10 px"; - j = "resize grow height 10 px"; - k = "resize shrink height 10 px"; - l = "resize grow width 10 px"; - }; - }; - terminal = "kitty"; - output = { - "*" = { - bg = "${../xmonad/wallpaper/wallpaper.jpg} fill"; - }; - }; - input = { - "*" = { - xkb_layout = "us"; - xkb_variant = "altgr-intl"; - }; - }; - startup = [ - { - command = "eww open-many topBar bottomBar"; - } - { - command = "sleep 1 && mullvad-gui"; - } - ]; - bars = []; - menu = "wofi -d"; - modifier = "Mod4"; - assigns = { - "1" = [ - {class = "^Signal$";} - {class = "^Element$";} - {class = "^Evolution$";} - {class = "^teams-for-linux$";} - ]; - "2" = [ - {app_id = "^firefox$";} - ]; - }; - keybindings = with { - #mod = config.xsession.windowManager.i3.config.modifier; - # mod = "Mod1"; - mod = config.wayland.windowManager.sway.config.modifier; - }; - lib.mkOptionDefault { - # switch window focus - "${mod}+h" = "focus left"; - "${mod}+j" = "focus down"; - "${mod}+k" = "focus up"; - "${mod}+l" = "focus right"; - # move windows - "${mod}+Shift+h" = "move left"; - "${mod}+Shift+j" = "move down"; - "${mod}+Shift+k" = "move up"; - "${mod}+Shift+l" = "move right"; - # layout shit - "${mod}+shift+semicolon" = "split h"; - "${mod}+semicolon" = "split v"; - "${mod}+f" = "fullscreen toggle"; - "${mod}+Shift+w" = "layout tabbed"; - "${mod}+e" = "layout toggle split"; - "${mod}+Shift+space" = "floating toggle"; - # focus parents/children - # "${mod}+Shift+a" = "focus parent"; - # "${mod}+Shift+c" = "focus child"; - # screenshot - # "${mod}+w" = "exec window-screenshot.sh"; - "${mod}+s" = "exec gscreenshot -csf $HOME/Pictures/screenshots"; - "${mod}+a" = "exec gscreenshot -cf $HOME/Pictures/screenshots"; - # "${mod}+t" = "exec ocr-screenshot.sh"; - - # rofi fuckery - "${mod}+d" = "exec wofi -S drun --allow-images"; - "${mod}+i" = "exec rofimoji --selector wofi -f alchemical_symbols anatolian_hieroglyphs emojis braille_patterns box_drawing chess_symbols emoticons geometric_shapes gothic greek_extended math mathematical_alphanumeric_symbols mathematical_operators miscellaneous_symbols miscellaneous_mathematical_symbols-a miscellaneous_mathematical_symbols-b miscellaneous_symbols_and_arrows miscellaneous_symbols_and_pictographs miscellaneous_technical modi modifier_tone_letters musical_symbols nerd_font number_forms shorthand_format_controls specials variation_selectors vertical_forms -a copy"; - - # audio - "XF86AudioRaiseVolume" = "exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ +10% && $refresh_i3status"; - "XF86AudioLowerVolume" = "exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ -10% && $refresh_i3status"; - "XF86AudioMute" = "exec --no-startup-id pactl set-sink-mute @DEFAULT_SINK@ toggle && $refresh_i3status"; - "XF86AudioMicMute" = "exec --no-startup-id pactl set-source-mute @DEFAULT_SOURCE@ toggle && $refresh_i3status"; - - "XF86AudioNext" = "exec playerctl next"; - "XF86AudioPrev" = "exec playerctl previous"; - "XF86AudioPause" = "exec playerctl pause"; - "XF86AudioPlay" = "exec playerctl play"; - "XF86AudioStop" = "exec playerctl stop"; - - "XF86MonBrightnessUp" = "exec brightnessctl set 1%+"; - "XF86MonBrightnessDown" = "exec brightnessctl set 1%-"; - - "XF86KbdBrightnessUp" = "exec brillo -kA 10.0"; - "XF86KbdBrightnessDown" = "exec brillo -kU 10.0"; - }; - focus = { - wrapping = "yes"; - }; - fonts = { - names = ["Atkinson Hyperlegible"]; - style = "Regular"; - size = 9.0; - }; - gaps = { - #top = 24; - inner = 15; - outer = 0; - smartGaps = true; - smartBorders = "on"; - }; - colors = { - background = "#1d2021"; - focused = { - background = "#282828"; - border = "#504945"; - childBorder = "#7c6f64"; - indicator = "#504945"; - text = "#ebdbb2"; - }; - focusedInactive = { - background = "#1d2021"; - border = "#504945"; - childBorder = "#665c54"; - indicator = "#664c54"; - text = "#d5c4a1"; - }; - placeholder = { - background = "#1d2021"; - border = "#00ff00"; - childBorder = "#504945"; - indicator = "#504945"; - text = "#928374"; - }; - unfocused = { - background = "#1d2021"; - border = "#3c3836"; - childBorder = "#504945"; - indicator = "#504945"; - text = "#bdae93"; - }; - urgent = { - background = "#9d0006"; - border = "#cc241d"; - childBorder = "#3c3836"; - indicator = "#fb4943"; - text = "#ebdbb2"; - }; - }; - - window = { - border = 2; - titlebar = false; - }; - }; - }; -} diff --git a/modules/desktop-environment/home/swayidle.nix b/modules/desktop-environment/home/swayidle.nix new file mode 100644 index 0000000..d4c5b3d --- /dev/null +++ b/modules/desktop-environment/home/swayidle.nix @@ -0,0 +1,17 @@ +{pkgs, ...}: { + # unsure whether i still need swayidle, will keep it in and might remove after further testing + + services.swayidle = { + enable = true; + events = [ + { + event = "before-sleep"; + command = "${pkgs.swaylock}/bin/swaylock -fF -c 442244"; + } + { + event = "lock"; + command = "swaylock -c 441144"; + } + ]; + }; +} diff --git a/modules/desktop-environment/home/typst.nix b/modules/desktop-environment/home/typst.nix index e70930e..76c2c24 100644 --- a/modules/desktop-environment/home/typst.nix +++ b/modules/desktop-environment/home/typst.nix @@ -33,5 +33,11 @@ in { }; }; # home.packages = [typst-within.packages."x86_64-linux".default]; - home.packages = [pkgs.typst]; + home.packages = [ + pkgs.typst + + # `typed` dependencies + pkgs.mupdf + pkgs.inotify-tools + ]; } diff --git a/modules/desktop-environment/home/xmonad/default.nix b/modules/desktop-environment/home/xmonad/default.nix deleted file mode 100644 index 5242f57..0000000 --- a/modules/desktop-environment/home/xmonad/default.nix +++ /dev/null @@ -1,9 +0,0 @@ -{pkgs, ...}: { - imports = [./wallpaper]; - home.packages = [pkgs.xmonadctl]; - xsession.windowManager.xmonad = { - enable = true; - enableContribAndExtras = true; - config = ./xmonad.hs; - }; -} diff --git a/modules/desktop-environment/home/xmonad/wallpaper/default.nix b/modules/desktop-environment/home/xmonad/wallpaper/default.nix deleted file mode 100644 index 12d938e..0000000 --- a/modules/desktop-environment/home/xmonad/wallpaper/default.nix +++ /dev/null @@ -1,9 +0,0 @@ -{...}: { - home.file.wallpaper = { - target = "Pictures/wallpaper.jpg"; - source = ./wallpaper.jpg; - onChange = '' - feh --bg-fill ~/Pictures/wallpaper.jpg; - ''; - }; -} diff --git a/modules/desktop-environment/home/xmonad/xmonad.hs b/modules/desktop-environment/home/xmonad/xmonad.hs deleted file mode 100644 index 4f2f9ce..0000000 --- a/modules/desktop-environment/home/xmonad/xmonad.hs +++ /dev/null @@ -1,175 +0,0 @@ -import Control.Monad (when) -import Data.Map qualified as M -import Data.Monoid -import Data.Ratio -import Graphics.X11.ExtraTypes.XF86 -import System.Exit -import XMonad -import XMonad.Actions.KeyRemap -import XMonad.Hooks.EwmhDesktops -import XMonad.Hooks.ManageDocks -import XMonad.Hooks.StatusBar -import XMonad.Hooks.StatusBar.PP -import XMonad.Layout.Circle -import XMonad.Layout.DraggingVisualizer -import XMonad.Layout.Grid -import XMonad.Layout.IfMax -import XMonad.Layout.Magnifier -import XMonad.Layout.Spacing -import XMonad.Layout.Tabbed -import XMonad.Layout.ThreeColumns -import XMonad.Layout.VoidBorders -import XMonad.Layout.WindowSwitcherDecoration -import XMonad.Prompt -import XMonad.Prompt.Layout -import XMonad.StackSet qualified as W -import XMonad.Actions.NoBorders -import XMonad.Util.EZConfig -import XMonad.Hooks.ServerMode - -myKeys conf@(XConfig {XMonad.modMask = modm}) = - M.fromList $ - [ ((modm, xK_Return), spawn $ XMonad.terminal conf), - ((modm .|. shiftMask, xK_q), kill), - -- -- Rotate through the available layout algorithms - ((modm, xK_space), sendMessage NextLayout), - -- rofiing - ((modm, xK_d), spawn "rofi -show drun"), - ((modm .|. shiftMask, xK_e), spawn "rofi -show desktopctl -modes desktopctl:desktopctl -show-icons"), - ((modm, xK_m), spawn "menu-qalc -- -theme gruvbox-dark"), - ((modm, xK_i), spawn "rofimoji --selector-args '-theme gruvbox-dark' -f alchemical_symbols anatolian_hieroglyphs emojis braille_patterns box_drawing chess_symbols emoticons geometric_shapes gothic greek_extended math mathematical_alphanumeric_symbols mathematical_operators miscellaneous_symbols miscellaneous_mathematical_symbols-a miscellaneous_mathematical_symbols-b miscellaneous_symbols_and_arrows miscellaneous_symbols_and_pictographs miscellaneous_technical modi modifier_tone_letters musical_symbols nerd_font number_forms shorthand_format_controls specials variation_selectors vertical_forms -a copy"), - -- screenshotting - -- TODO: Fix/rewrite window-screenshot - ((modm, xK_w), spawn "window-screenshot.nu"), - ((modm, xK_s), spawn "flameshot gui -c -p $HOME/Pictures/screenshots"), - ((modm, xK_a), spawn "flameshot screen -c -p $HOME/Pictures/screenshots"), - ((modm, xK_t), spawn "ocr-screenshot.sh"), - ((modm .|. shiftMask, xK_t), spawn "DEVICE=\"bcm5974\"; if [ $(xinput list-props \"$DEVICE\" | awk '/^\\tDevice Enabled \\([0-9]+\\):\\t[01]/ {print $NF}') = \"1\" ]; then xinput disable \"$DEVICE\"; else xinput enable \"$DEVICE\"; fi"), - -- Push window back into tiling - ((modm .|. shiftMask, xK_space), withFocused $ windows . W.sink), - -- Resize viewed windows to the correct size - ((modm, xK_n), refresh), - -- Move focus to the next window - ((modm, xK_Tab), layoutPrompt def), - -- Move focus - ((modm, xK_j), windows W.focusDown), - ((modm, xK_k), windows W.focusUp), - -- Swap the focused window with the next window - ((modm .|. shiftMask, xK_j), windows W.swapDown), - ((modm .|. shiftMask, xK_k), windows W.swapUp), - -- Shrink the master area - ((modm, xK_h), sendMessage Shrink), - ((modm, xK_l), sendMessage Expand), - -- Increment the number of windows in the master area - ((modm, xK_comma), sendMessage (IncMasterN 1)), - ((modm, xK_period), sendMessage (IncMasterN (-1))), - ((modm, xK_b), sendMessage ToggleStruts >> withFocused toggleBorder), - -- volume keys - -- TODO: other media keys - ((0, xF86XK_AudioRaiseVolume), spawn "amixer -D pulse sset Master 10%+"), - ((0, xF86XK_AudioLowerVolume), spawn "amixer -D pulse sset Master 10%-"), - ((0, xF86XK_AudioMute), spawn "amixer -D pulse sset Master toggle"), - ((0, xF86XK_AudioNext), spawn "playerctl next"), - ((0, xF86XK_AudioPrev), spawn "playerctl previous"), - ((0, xF86XK_AudioPause), spawn "playerctl play-pause") - ] - ++ [ ((m .|. modm, k), windows $ f i) - | (i, k) <- zip (XMonad.workspaces conf) [xK_1 .. xK_9], - (f, m) <- [(W.greedyView, 0), (W.shift, shiftMask)] - ] - --- TODO: figure out multi screen stuff, including xinerama - --- Mouse bindings: default actions bound to mouse events -myMouseBindings (XConfig {XMonad.modMask = modm}) = - M.fromList - -- mod-button1, Set the window to floating mode and move by dragging - [ ( (modm, button1), - \w -> do - focus w - mouseMoveWindow w - windows W.shiftMaster - ), - -- mod-button2, Raise the window to the top of the stack - ( (modm, button3), - \w -> do - focus w - mouseResizeWindow w - windows W.shiftMaster - ) - ] - -tabCfg = - def - { activeColor = "#282828", - inactiveColor = "#1d2021", - urgentColor = "#9d0006", - activeBorderColor = "#504945", - inactiveBorderColor = "#3c3836", - urgentBorderColor = "#cc241d", - activeTextColor = "#ebdbb2", - inactiveTextColor = "#bdae93", - urgentTextColor = "#ebdbb2" - } - -myLayout = setupSpacing $ avoidStruts $ autoChoose ||| tabbed shrinkText tabCfg - where - -- default tiling algorithm partitions the screen into two panes - autoChoose = IfMax 2 tiled $ IfMax 3 tiled_mag $ IfMax 4 grid_mag threeCol - setupSpacing = spacingRaw True (Border 0 0 0 0) True (Border 7 7 7 7) True - grid_mag = magnifiercz 1.4 Grid - tiled = Tall nmaster delta ratio - tiled_mag = magnifiercz' 1.4 tiled - threeCol = magnifiercz' 1.6 $ ThreeColMid nmaster delta ratio - -- The default number of windows in the master pane - nmaster = 1 - -- Default proportion of screen occupied by master pane - ratio = 1 / 2 - -- Percent of screen to increment by when resizing panes - delta = 3 / 100 - -myManageHook = - composeAll - [ className =? "MPlayer" --> doFloat, - className =? "Gimp" --> doFloat, - className =? "firefox" --> doShift "browser", - className =? "Evolution" --> doShift "comms", - className =? "Signal" --> doShift "comms", - className =? "SchildiChat" --> doShift "comms", - resource =? "desktop_window" --> doIgnore, - resource =? "kdesktop" --> doIgnore - ] - -myStartupHook = do - spawn "pgrep oneko || oneko -tofocus -tora -position +-1+5 -fg palevioletred3 -bg pink -name 'Rose the desktop kitty'" - spawn "pgrep volumeicon || volumeicon" - spawn "pgrep nm-applet || nm-applet" - spawn "pgrep mullvad-gui || mullvad-vpn" - spawn "feh --bg-fill ~/Pictures/wallpaper.jpg" - -xmeowbar = statusBarProp "~/.config/xmobar/xmobar" $ pure xmobarPP -polybar = statusBarProp "polybar" $ pure xmobarPP -barSpawner 0 = pure $ xmeowbar <> polybar -barSpawner _ = mempty - -main :: IO() -main = xmonad $ docks $ dynamicSBs barSpawner $ ewmh defaults - -defaults = - def - { -- simple stuff - terminal = "kitty", - focusFollowsMouse = False, - clickJustFocuses = False, - borderWidth = 2, - modMask = mod4Mask, - workspaces = ["comms", "browser"] ++ map show [3 .. 9], - normalBorderColor = "#3c3836", - focusedBorderColor = "#504945", - keys = myKeys, - mouseBindings = myMouseBindings, - layoutHook =myLayout, - manageHook = myManageHook, - startupHook = myStartupHook, - handleEventHook = serverModeEventHook - } diff --git a/modules/desktop-environment/xdg-portals.nix b/modules/desktop-environment/xdg-portals.nix new file mode 100644 index 0000000..a15033a --- /dev/null +++ b/modules/desktop-environment/xdg-portals.nix @@ -0,0 +1,17 @@ +{pkgs, ...}: { + services.gnome.gnome-keyring.enable = true; + xdg.portal = { + enable = true; + + config.common = { + default = ["gtk"]; + "org.freedesktop.impl.portal.Screencast" = ["gnome"]; + "org.freedesktop.impl.portal.Secret" = ["gnome-keyring"]; + }; + + extraPortals = [ + pkgs.xdg-desktop-portal-gnome + pkgs.xdg-desktop-portal-gtk + ]; + }; +} diff --git a/modules/desktop/default.nix b/modules/desktop/default.nix index c8b74d3..5aede2b 100644 --- a/modules/desktop/default.nix +++ b/modules/desktop/default.nix @@ -3,166 +3,110 @@ lib, pkgs, ... -}: let - # window-screenshot = pkgs.writeTextFile "window-screenshot.nu" (builtins.readFile ../../other/scripts/desktop/window-screenshot.nu); - window-screenshot = pkgs.writeShellScriptBin "window-screenshot.sh" (builtins.readFile ../../other/scripts/desktop/window-screenshot.sh); - # desktop-ctl = pkgs.writeShellScriptBin "desktop-ctl.sh" (builtins.readFile ../scripts/desktop/desktop-ctl.sh); - desktop-ctl = import ../../other/scripts/desktop/desktopctl.nix {inherit pkgs;}; - # TODO: fix ocr screenshot script - ocr-screenshot = pkgs.writeShellScriptBin "ocr-screenshot.sh" (builtins.readFile ../../other/scripts/desktop/ocr-screenshot.sh); - # rofi calculator copied from https://github.com/barbuk/menu-qalc - menu-qalc = pkgs.writeShellScriptBin "menu-qalc" (builtins.readFile ../../other/scripts/desktop/menu-qalc.sh); -in - with lib; { - imports = [ - ./gaming.nix - ./creative.nix # TODO: more fine grained choices, not every setup needs fspy or rawtherapee - ./ios-compat.nix - ./syncthing.nix - ./kdeconnect.nix - ./themeing.nix - ./cloud.nix - ./networking.nix - ./social.nix - ./mail.nix - ./fonts.nix - ./firefox.nix - ./x.nix - ./obs.nix - ]; +}: +with lib; { + imports = [ + ./gaming.nix + ./creative.nix # TODO: more fine grained choices, not every setup needs fspy or rawtherapee + ./syncthing.nix + ./kdeconnect.nix + ./themeing.nix + ./cloud.nix + ./networking.nix + ./social.nix + ./mail.nix + ./fonts.nix + ./firefox.nix + ./x.nix + ./obs.nix + ]; - programs.seahorse.enable = true; - security.pam.services.jade.enableGnomeKeyring = true; + programs.seahorse.enable = true; + security.pam.services.jade.enableGnomeKeyring = true; - virtualisation.libvirtd.enable = true; + virtualisation.libvirtd.enable = true; - services = { - printing = { - enable = true; - drivers = [ - pkgs.gutenprint - pkgs.gutenprintBin - pkgs.hplip - pkgs.brlaser - pkgs.brgenml1lpr - pkgs.brgenml1cupswrapper - pkgs.ptouch-driver - ]; - }; - gnome.gnome-keyring.enable = true; - }; - - programs.xss-lock = { + services = { + printing = { enable = true; - lockerCommand = "${pkgs.i3lock}/bin/i3lock -c 1d2021"; - }; - - services.illum.enable = true; - services.avahi = { - enable = true; - nssmdns4 = true; - openFirewall = true; - }; - services.smartd = { - enable = true; - notifications.test = true; - }; - - home-manager.users.jade = {pkgs, ...}: { - home.sessionVariables = { - "S10E_JRNL_FILE_LOC" = "/home/jade/Docs/jrnl.md"; - }; - programs.ssh = { - controlMaster = "yes"; - }; - - programs.bat = { - # TODO: more config - enable = true; - }; - programs.rofi = { - enable = true; - theme = ../../other/rofi-themes/applauncher.rasi; - }; - home.packages = with pkgs; [ - just - bacon - - magic-wormhole-rs - - yt-dlp - - i3lock - rofimoji - feh - xorg.xinput - arandr - flameshot - tesseract5 - imagemagick - xclip - xmacro - xorg.xev - gscreenshot - - syncplay - - # filemanager - xfce.thunar - xfce.tumbler - xfce.thunar-archive-plugin - file-roller - # media/file viewers - vlc - mpv - evince - nomacs - jellyfin-media-player - - # from environment.systemPackages cleanup - gparted - xdg-desktop-portal-gtk - virt-manager - ddccontrol-db - firebird-emu - gitg - qdirstat - ffmpeg_7-full - - # external - libnotify - i3lock - rofi - rofimoji - feh - xorg.xinput - arandr - flameshot - tesseract5 - imagemagick - xclip - kitty - xmacro - brightnessctl - drawing - libqalculate - - # custom scripts - window-screenshot - desktop-ctl - ocr-screenshot - menu-qalc - - # meow - oneko - - plover.dev - - mupdf - inotify-tools + drivers = [ + pkgs.gutenprint + pkgs.gutenprintBin + pkgs.hplip + pkgs.brlaser + pkgs.brgenml1lpr + pkgs.brgenml1cupswrapper + pkgs.ptouch-driver ]; - xsession = { - enable = true; - }; }; - } + }; + + programs.xss-lock = { + enable = true; + lockerCommand = "${pkgs.i3lock}/bin/i3lock -c 1d2021"; + }; + + services.illum.enable = true; + services.avahi = { + enable = true; + nssmdns4 = true; + openFirewall = true; + }; + services.smartd = { + enable = true; + notifications.test = true; + }; + + home-manager.users.jade = {pkgs, ...}: { + home.sessionVariables = { + "S10E_JRNL_FILE_LOC" = "/home/jade/Docs/jrnl.md"; + }; + programs.ssh = { + controlMaster = "yes"; + }; + home.packages = with pkgs; [ + just + bacon + + magic-wormhole-rs + + yt-dlp + + imagemagick + + syncplay + + # filemanager + xfce.thunar + xfce.tumbler + xfce.thunar-archive-plugin + file-roller + + # media/file viewers + vlc + mpv + evince + nomacs + jellyfin-media-player + + # from environment.systemPackages cleanup + virt-manager + ddccontrol-db + ffmpeg_7-full + + # external + libnotify + rofimoji + xorg.xinput + arandr + flameshot + tesseract5 + imagemagick + brightnessctl + drawing + ]; + xsession = { + enable = true; + }; + }; +} diff --git a/modules/desktop/ios-compat.nix b/modules/desktop/ios-compat.nix deleted file mode 100644 index 0805f95..0000000 --- a/modules/desktop/ios-compat.nix +++ /dev/null @@ -1,29 +0,0 @@ -{ - config, - lib, - pkgs, - ... -}: let - cfg = config.jade.desktop.ios-compat; -in - with lib; { - options.jade.desktop.ios-compat = { - enable = mkEnableOption "Enable the ios compatability programs"; - }; - config = mkIf cfg.enable { - services = { - usbmuxd.enable = true; - gvfs.enable = true; - }; - home-manager.users.jade = {pkgs, ...}: { - home.packages = with pkgs; [ - libimobiledevice - libimobiledevice-glue - ifuse - usbmuxd - libusbmuxd - gvfs - ]; - }; - }; - } diff --git a/modules/desktop/x.nix b/modules/desktop/x.nix index b8527c6..04dad28 100644 --- a/modules/desktop/x.nix +++ b/modules/desktop/x.nix @@ -5,12 +5,7 @@ desktopManager = { xterm.enable = false; }; - - windowManager.xmonad = { - enable = true; - }; }; security.polkit.enable = true; - programs.sway.enable = true; } diff --git a/modules/shell/default.nix b/modules/shell/default.nix index a78ef80..e3655dd 100644 --- a/modules/shell/default.nix +++ b/modules/shell/default.nix @@ -12,4 +12,5 @@ ./btop.nix ]; programs.mosh.enable = true; + programs.bat.enable = true; } diff --git a/other/0001-fomx.patch b/other/0001-fomx.patch deleted file mode 100644 index 78d8801..0000000 --- a/other/0001-fomx.patch +++ /dev/null @@ -1,4983 +0,0 @@ -From 3293ae056b6c5d905ff367283a14e6eb19acf41f Mon Sep 17 00:00:00 2001 -From: Jade -Date: Tue, 11 Apr 2023 16:11:04 +0200 -Subject: [PATCH] fomx - -Signed-off-by: Jade ---- - drivers/video/logo/logo_linux_clut224.ppm | 4963 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ - 1 file changed, 3361 insertions(+), 1602 deletions(-) - -diff --git a/drivers/video/logo/logo_linux_clut224.ppm b/drivers/video/logo/logo_linux_clut224.ppm -index 3c14e43..eae3002 100644 ---- a/drivers/video/logo/logo_linux_clut224.ppm -+++ b/drivers/video/logo/logo_linux_clut224.ppm -@@ -1,1604 +1,3363 @@ - P3 --# Standard 224-color Linux logo --80 80 -+160 160 - 255 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 6 6 6 6 6 6 10 10 10 10 10 10 -- 10 10 10 6 6 6 6 6 6 6 6 6 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 6 6 6 10 10 10 14 14 14 -- 22 22 22 26 26 26 30 30 30 34 34 34 -- 30 30 30 30 30 30 26 26 26 18 18 18 -- 14 14 14 10 10 10 6 6 6 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 1 0 0 1 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 6 6 6 14 14 14 26 26 26 42 42 42 -- 54 54 54 66 66 66 78 78 78 78 78 78 -- 78 78 78 74 74 74 66 66 66 54 54 54 -- 42 42 42 26 26 26 18 18 18 10 10 10 -- 6 6 6 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 1 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 10 10 10 -- 22 22 22 42 42 42 66 66 66 86 86 86 -- 66 66 66 38 38 38 38 38 38 22 22 22 -- 26 26 26 34 34 34 54 54 54 66 66 66 -- 86 86 86 70 70 70 46 46 46 26 26 26 -- 14 14 14 6 6 6 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 1 0 0 1 0 0 1 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 10 10 10 26 26 26 -- 50 50 50 82 82 82 58 58 58 6 6 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 6 6 6 54 54 54 86 86 86 66 66 66 -- 38 38 38 18 18 18 6 6 6 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 6 6 6 22 22 22 50 50 50 -- 78 78 78 34 34 34 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 6 6 6 70 70 70 -- 78 78 78 46 46 46 22 22 22 6 6 6 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 1 0 0 1 0 0 1 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 6 6 6 18 18 18 42 42 42 82 82 82 -- 26 26 26 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 14 14 14 -- 46 46 46 34 34 34 6 6 6 2 2 6 -- 42 42 42 78 78 78 42 42 42 18 18 18 -- 6 6 6 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 1 0 0 0 0 0 1 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 10 10 10 30 30 30 66 66 66 58 58 58 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 26 26 26 -- 86 86 86 101 101 101 46 46 46 10 10 10 -- 2 2 6 58 58 58 70 70 70 34 34 34 -- 10 10 10 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 1 0 0 1 0 0 1 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 14 14 14 42 42 42 86 86 86 10 10 10 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 30 30 30 -- 94 94 94 94 94 94 58 58 58 26 26 26 -- 2 2 6 6 6 6 78 78 78 54 54 54 -- 22 22 22 6 6 6 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 6 6 6 -- 22 22 22 62 62 62 62 62 62 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 26 26 26 -- 54 54 54 38 38 38 18 18 18 10 10 10 -- 2 2 6 2 2 6 34 34 34 82 82 82 -- 38 38 38 14 14 14 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 1 0 0 1 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 6 6 6 -- 30 30 30 78 78 78 30 30 30 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 10 10 10 -- 10 10 10 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 78 78 78 -- 50 50 50 18 18 18 6 6 6 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 1 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 10 10 10 -- 38 38 38 86 86 86 14 14 14 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 54 54 54 -- 66 66 66 26 26 26 6 6 6 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 1 0 0 1 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 14 14 14 -- 42 42 42 82 82 82 2 2 6 2 2 6 -- 2 2 6 6 6 6 10 10 10 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 6 6 6 -- 14 14 14 10 10 10 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 18 18 18 -- 82 82 82 34 34 34 10 10 10 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 1 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 14 14 14 -- 46 46 46 86 86 86 2 2 6 2 2 6 -- 6 6 6 6 6 6 22 22 22 34 34 34 -- 6 6 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 18 18 18 34 34 34 -- 10 10 10 50 50 50 22 22 22 2 2 6 -- 2 2 6 2 2 6 2 2 6 10 10 10 -- 86 86 86 42 42 42 14 14 14 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 1 0 0 1 0 0 1 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 14 14 14 -- 46 46 46 86 86 86 2 2 6 2 2 6 -- 38 38 38 116 116 116 94 94 94 22 22 22 -- 22 22 22 2 2 6 2 2 6 2 2 6 -- 14 14 14 86 86 86 138 138 138 162 162 162 --154 154 154 38 38 38 26 26 26 6 6 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 86 86 86 46 46 46 14 14 14 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 14 14 14 -- 46 46 46 86 86 86 2 2 6 14 14 14 --134 134 134 198 198 198 195 195 195 116 116 116 -- 10 10 10 2 2 6 2 2 6 6 6 6 --101 98 89 187 187 187 210 210 210 218 218 218 --214 214 214 134 134 134 14 14 14 6 6 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 86 86 86 50 50 50 18 18 18 6 6 6 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 1 0 0 0 -- 0 0 1 0 0 1 0 0 1 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 14 14 14 -- 46 46 46 86 86 86 2 2 6 54 54 54 --218 218 218 195 195 195 226 226 226 246 246 246 -- 58 58 58 2 2 6 2 2 6 30 30 30 --210 210 210 253 253 253 174 174 174 123 123 123 --221 221 221 234 234 234 74 74 74 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 70 70 70 58 58 58 22 22 22 6 6 6 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 14 14 14 -- 46 46 46 82 82 82 2 2 6 106 106 106 --170 170 170 26 26 26 86 86 86 226 226 226 --123 123 123 10 10 10 14 14 14 46 46 46 --231 231 231 190 190 190 6 6 6 70 70 70 -- 90 90 90 238 238 238 158 158 158 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 70 70 70 58 58 58 22 22 22 6 6 6 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 1 0 0 0 -- 0 0 1 0 0 1 0 0 1 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 14 14 14 -- 42 42 42 86 86 86 6 6 6 116 116 116 --106 106 106 6 6 6 70 70 70 149 149 149 --128 128 128 18 18 18 38 38 38 54 54 54 --221 221 221 106 106 106 2 2 6 14 14 14 -- 46 46 46 190 190 190 198 198 198 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 74 74 74 62 62 62 22 22 22 6 6 6 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 1 0 0 0 -- 0 0 1 0 0 0 0 0 1 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 14 14 14 -- 42 42 42 94 94 94 14 14 14 101 101 101 --128 128 128 2 2 6 18 18 18 116 116 116 --118 98 46 121 92 8 121 92 8 98 78 10 --162 162 162 106 106 106 2 2 6 2 2 6 -- 2 2 6 195 195 195 195 195 195 6 6 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 74 74 74 62 62 62 22 22 22 6 6 6 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 1 0 0 1 -- 0 0 1 0 0 0 0 0 1 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 10 10 10 -- 38 38 38 90 90 90 14 14 14 58 58 58 --210 210 210 26 26 26 54 38 6 154 114 10 --226 170 11 236 186 11 225 175 15 184 144 12 --215 174 15 175 146 61 37 26 9 2 2 6 -- 70 70 70 246 246 246 138 138 138 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 70 70 70 66 66 66 26 26 26 6 6 6 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 10 10 10 -- 38 38 38 86 86 86 14 14 14 10 10 10 --195 195 195 188 164 115 192 133 9 225 175 15 --239 182 13 234 190 10 232 195 16 232 200 30 --245 207 45 241 208 19 232 195 16 184 144 12 --218 194 134 211 206 186 42 42 42 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 50 50 50 74 74 74 30 30 30 6 6 6 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 10 10 10 -- 34 34 34 86 86 86 14 14 14 2 2 6 --121 87 25 192 133 9 219 162 10 239 182 13 --236 186 11 232 195 16 241 208 19 244 214 54 --246 218 60 246 218 38 246 215 20 241 208 19 --241 208 19 226 184 13 121 87 25 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 50 50 50 82 82 82 34 34 34 10 10 10 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 10 10 10 -- 34 34 34 82 82 82 30 30 30 61 42 6 --180 123 7 206 145 10 230 174 11 239 182 13 --234 190 10 238 202 15 241 208 19 246 218 74 --246 218 38 246 215 20 246 215 20 246 215 20 --226 184 13 215 174 15 184 144 12 6 6 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 26 26 26 94 94 94 42 42 42 14 14 14 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 10 10 10 -- 30 30 30 78 78 78 50 50 50 104 69 6 --192 133 9 216 158 10 236 178 12 236 186 11 --232 195 16 241 208 19 244 214 54 245 215 43 --246 215 20 246 215 20 241 208 19 198 155 10 --200 144 11 216 158 10 156 118 10 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 6 6 6 90 90 90 54 54 54 18 18 18 -- 6 6 6 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 10 10 10 -- 30 30 30 78 78 78 46 46 46 22 22 22 --137 92 6 210 162 10 239 182 13 238 190 10 --238 202 15 241 208 19 246 215 20 246 215 20 --241 208 19 203 166 17 185 133 11 210 150 10 --216 158 10 210 150 10 102 78 10 2 2 6 -- 6 6 6 54 54 54 14 14 14 2 2 6 -- 2 2 6 62 62 62 74 74 74 30 30 30 -- 10 10 10 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 10 10 10 -- 34 34 34 78 78 78 50 50 50 6 6 6 -- 94 70 30 139 102 15 190 146 13 226 184 13 --232 200 30 232 195 16 215 174 15 190 146 13 --168 122 10 192 133 9 210 150 10 213 154 11 --202 150 34 182 157 106 101 98 89 2 2 6 -- 2 2 6 78 78 78 116 116 116 58 58 58 -- 2 2 6 22 22 22 90 90 90 46 46 46 -- 18 18 18 6 6 6 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 10 10 10 -- 38 38 38 86 86 86 50 50 50 6 6 6 --128 128 128 174 154 114 156 107 11 168 122 10 --198 155 10 184 144 12 197 138 11 200 144 11 --206 145 10 206 145 10 197 138 11 188 164 115 --195 195 195 198 198 198 174 174 174 14 14 14 -- 2 2 6 22 22 22 116 116 116 116 116 116 -- 22 22 22 2 2 6 74 74 74 70 70 70 -- 30 30 30 10 10 10 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 6 6 6 18 18 18 -- 50 50 50 101 101 101 26 26 26 10 10 10 --138 138 138 190 190 190 174 154 114 156 107 11 --197 138 11 200 144 11 197 138 11 192 133 9 --180 123 7 190 142 34 190 178 144 187 187 187 --202 202 202 221 221 221 214 214 214 66 66 66 -- 2 2 6 2 2 6 50 50 50 62 62 62 -- 6 6 6 2 2 6 10 10 10 90 90 90 -- 50 50 50 18 18 18 6 6 6 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 10 10 10 34 34 34 -- 74 74 74 74 74 74 2 2 6 6 6 6 --144 144 144 198 198 198 190 190 190 178 166 146 --154 121 60 156 107 11 156 107 11 168 124 44 --174 154 114 187 187 187 190 190 190 210 210 210 --246 246 246 253 253 253 253 253 253 182 182 182 -- 6 6 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 62 62 62 -- 74 74 74 34 34 34 14 14 14 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 10 10 10 22 22 22 54 54 54 -- 94 94 94 18 18 18 2 2 6 46 46 46 --234 234 234 221 221 221 190 190 190 190 190 190 --190 190 190 187 187 187 187 187 187 190 190 190 --190 190 190 195 195 195 214 214 214 242 242 242 --253 253 253 253 253 253 253 253 253 253 253 253 -- 82 82 82 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 14 14 14 -- 86 86 86 54 54 54 22 22 22 6 6 6 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 6 6 6 18 18 18 46 46 46 90 90 90 -- 46 46 46 18 18 18 6 6 6 182 182 182 --253 253 253 246 246 246 206 206 206 190 190 190 --190 190 190 190 190 190 190 190 190 190 190 190 --206 206 206 231 231 231 250 250 250 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --202 202 202 14 14 14 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 42 42 42 86 86 86 42 42 42 18 18 18 -- 6 6 6 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 6 6 6 -- 14 14 14 38 38 38 74 74 74 66 66 66 -- 2 2 6 6 6 6 90 90 90 250 250 250 --253 253 253 253 253 253 238 238 238 198 198 198 --190 190 190 190 190 190 195 195 195 221 221 221 --246 246 246 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 82 82 82 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 78 78 78 70 70 70 34 34 34 -- 14 14 14 6 6 6 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 14 14 14 -- 34 34 34 66 66 66 78 78 78 6 6 6 -- 2 2 6 18 18 18 218 218 218 253 253 253 --253 253 253 253 253 253 253 253 253 246 246 246 --226 226 226 231 231 231 246 246 246 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 178 178 178 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 18 18 18 90 90 90 62 62 62 -- 30 30 30 10 10 10 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 10 10 10 26 26 26 -- 58 58 58 90 90 90 18 18 18 2 2 6 -- 2 2 6 110 110 110 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --250 250 250 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 231 231 231 18 18 18 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 18 18 18 94 94 94 -- 54 54 54 26 26 26 10 10 10 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 6 6 6 22 22 22 50 50 50 -- 90 90 90 26 26 26 2 2 6 2 2 6 -- 14 14 14 195 195 195 250 250 250 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --250 250 250 242 242 242 54 54 54 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 38 38 38 -- 86 86 86 50 50 50 22 22 22 6 6 6 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 6 6 6 14 14 14 38 38 38 82 82 82 -- 34 34 34 2 2 6 2 2 6 2 2 6 -- 42 42 42 195 195 195 246 246 246 253 253 253 --253 253 253 253 253 253 253 253 253 250 250 250 --242 242 242 242 242 242 250 250 250 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 250 250 250 246 246 246 238 238 238 --226 226 226 231 231 231 101 101 101 6 6 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 38 38 38 82 82 82 42 42 42 14 14 14 -- 6 6 6 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 10 10 10 26 26 26 62 62 62 66 66 66 -- 2 2 6 2 2 6 2 2 6 6 6 6 -- 70 70 70 170 170 170 206 206 206 234 234 234 --246 246 246 250 250 250 250 250 250 238 238 238 --226 226 226 231 231 231 238 238 238 250 250 250 --250 250 250 250 250 250 246 246 246 231 231 231 --214 214 214 206 206 206 202 202 202 202 202 202 --198 198 198 202 202 202 182 182 182 18 18 18 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 62 62 62 66 66 66 30 30 30 -- 10 10 10 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 14 14 14 42 42 42 82 82 82 18 18 18 -- 2 2 6 2 2 6 2 2 6 10 10 10 -- 94 94 94 182 182 182 218 218 218 242 242 242 --250 250 250 253 253 253 253 253 253 250 250 250 --234 234 234 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 246 246 246 --238 238 238 226 226 226 210 210 210 202 202 202 --195 195 195 195 195 195 210 210 210 158 158 158 -- 6 6 6 14 14 14 50 50 50 14 14 14 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 6 6 6 86 86 86 46 46 46 -- 18 18 18 6 6 6 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 6 6 6 -- 22 22 22 54 54 54 70 70 70 2 2 6 -- 2 2 6 10 10 10 2 2 6 22 22 22 --166 166 166 231 231 231 250 250 250 253 253 253 --253 253 253 253 253 253 253 253 253 250 250 250 --242 242 242 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 246 246 246 --231 231 231 206 206 206 198 198 198 226 226 226 -- 94 94 94 2 2 6 6 6 6 38 38 38 -- 30 30 30 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 62 62 62 66 66 66 -- 26 26 26 10 10 10 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 10 10 10 -- 30 30 30 74 74 74 50 50 50 2 2 6 -- 26 26 26 26 26 26 2 2 6 106 106 106 --238 238 238 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 246 246 246 218 218 218 202 202 202 --210 210 210 14 14 14 2 2 6 2 2 6 -- 30 30 30 22 22 22 2 2 6 2 2 6 -- 2 2 6 2 2 6 18 18 18 86 86 86 -- 42 42 42 14 14 14 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 14 14 14 -- 42 42 42 90 90 90 22 22 22 2 2 6 -- 42 42 42 2 2 6 18 18 18 218 218 218 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 250 250 250 221 221 221 --218 218 218 101 101 101 2 2 6 14 14 14 -- 18 18 18 38 38 38 10 10 10 2 2 6 -- 2 2 6 2 2 6 2 2 6 78 78 78 -- 58 58 58 22 22 22 6 6 6 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 6 6 6 18 18 18 -- 54 54 54 82 82 82 2 2 6 26 26 26 -- 22 22 22 2 2 6 123 123 123 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 250 250 250 --238 238 238 198 198 198 6 6 6 38 38 38 -- 58 58 58 26 26 26 38 38 38 2 2 6 -- 2 2 6 2 2 6 2 2 6 46 46 46 -- 78 78 78 30 30 30 10 10 10 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 10 10 10 30 30 30 -- 74 74 74 58 58 58 2 2 6 42 42 42 -- 2 2 6 22 22 22 231 231 231 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 250 250 250 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 246 246 246 46 46 46 38 38 38 -- 42 42 42 14 14 14 38 38 38 14 14 14 -- 2 2 6 2 2 6 2 2 6 6 6 6 -- 86 86 86 46 46 46 14 14 14 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 6 6 6 14 14 14 42 42 42 -- 90 90 90 18 18 18 18 18 18 26 26 26 -- 2 2 6 116 116 116 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 250 250 250 238 238 238 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 94 94 94 6 6 6 -- 2 2 6 2 2 6 10 10 10 34 34 34 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 74 74 74 58 58 58 22 22 22 6 6 6 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 10 10 10 26 26 26 66 66 66 -- 82 82 82 2 2 6 38 38 38 6 6 6 -- 14 14 14 210 210 210 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 246 246 246 242 242 242 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 144 144 144 2 2 6 -- 2 2 6 2 2 6 2 2 6 46 46 46 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 42 42 42 74 74 74 30 30 30 10 10 10 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 6 6 6 14 14 14 42 42 42 90 90 90 -- 26 26 26 6 6 6 42 42 42 2 2 6 -- 74 74 74 250 250 250 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 242 242 242 242 242 242 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 182 182 182 2 2 6 -- 2 2 6 2 2 6 2 2 6 46 46 46 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 10 10 10 86 86 86 38 38 38 10 10 10 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 10 10 10 26 26 26 66 66 66 82 82 82 -- 2 2 6 22 22 22 18 18 18 2 2 6 --149 149 149 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 234 234 234 242 242 242 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 206 206 206 2 2 6 -- 2 2 6 2 2 6 2 2 6 38 38 38 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 6 6 6 86 86 86 46 46 46 14 14 14 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 6 6 6 -- 18 18 18 46 46 46 86 86 86 18 18 18 -- 2 2 6 34 34 34 10 10 10 6 6 6 --210 210 210 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 234 234 234 242 242 242 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 221 221 221 6 6 6 -- 2 2 6 2 2 6 6 6 6 30 30 30 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 82 82 82 54 54 54 18 18 18 -- 6 6 6 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 10 10 10 -- 26 26 26 66 66 66 62 62 62 2 2 6 -- 2 2 6 38 38 38 10 10 10 26 26 26 --238 238 238 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 231 231 231 238 238 238 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 231 231 231 6 6 6 -- 2 2 6 2 2 6 10 10 10 30 30 30 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 66 66 66 58 58 58 22 22 22 -- 6 6 6 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 10 10 10 -- 38 38 38 78 78 78 6 6 6 2 2 6 -- 2 2 6 46 46 46 14 14 14 42 42 42 --246 246 246 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 231 231 231 242 242 242 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 234 234 234 10 10 10 -- 2 2 6 2 2 6 22 22 22 14 14 14 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 66 66 66 62 62 62 22 22 22 -- 6 6 6 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 6 6 6 18 18 18 -- 50 50 50 74 74 74 2 2 6 2 2 6 -- 14 14 14 70 70 70 34 34 34 62 62 62 --250 250 250 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 231 231 231 246 246 246 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 234 234 234 14 14 14 -- 2 2 6 2 2 6 30 30 30 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 66 66 66 62 62 62 22 22 22 -- 6 6 6 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 6 6 6 18 18 18 -- 54 54 54 62 62 62 2 2 6 2 2 6 -- 2 2 6 30 30 30 46 46 46 70 70 70 --250 250 250 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 231 231 231 246 246 246 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 226 226 226 10 10 10 -- 2 2 6 6 6 6 30 30 30 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 66 66 66 58 58 58 22 22 22 -- 6 6 6 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 6 6 6 22 22 22 -- 58 58 58 62 62 62 2 2 6 2 2 6 -- 2 2 6 2 2 6 30 30 30 78 78 78 --250 250 250 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 231 231 231 246 246 246 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 206 206 206 2 2 6 -- 22 22 22 34 34 34 18 14 6 22 22 22 -- 26 26 26 18 18 18 6 6 6 2 2 6 -- 2 2 6 82 82 82 54 54 54 18 18 18 -- 6 6 6 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 6 6 6 26 26 26 -- 62 62 62 106 106 106 74 54 14 185 133 11 --210 162 10 121 92 8 6 6 6 62 62 62 --238 238 238 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 231 231 231 246 246 246 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 158 158 158 18 18 18 -- 14 14 14 2 2 6 2 2 6 2 2 6 -- 6 6 6 18 18 18 66 66 66 38 38 38 -- 6 6 6 94 94 94 50 50 50 18 18 18 -- 6 6 6 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 6 6 6 -- 10 10 10 10 10 10 18 18 18 38 38 38 -- 78 78 78 142 134 106 216 158 10 242 186 14 --246 190 14 246 190 14 156 118 10 10 10 10 -- 90 90 90 238 238 238 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 231 231 231 250 250 250 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 246 230 190 --238 204 91 238 204 91 181 142 44 37 26 9 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 38 38 38 46 46 46 -- 26 26 26 106 106 106 54 54 54 18 18 18 -- 6 6 6 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 6 6 6 14 14 14 22 22 22 -- 30 30 30 38 38 38 50 50 50 70 70 70 --106 106 106 190 142 34 226 170 11 242 186 14 --246 190 14 246 190 14 246 190 14 154 114 10 -- 6 6 6 74 74 74 226 226 226 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 231 231 231 250 250 250 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 228 184 62 --241 196 14 241 208 19 232 195 16 38 30 10 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 6 6 6 30 30 30 26 26 26 --203 166 17 154 142 90 66 66 66 26 26 26 -- 6 6 6 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 6 6 6 18 18 18 38 38 38 58 58 58 -- 78 78 78 86 86 86 101 101 101 123 123 123 --175 146 61 210 150 10 234 174 13 246 186 14 --246 190 14 246 190 14 246 190 14 238 190 10 --102 78 10 2 2 6 46 46 46 198 198 198 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 234 234 234 242 242 242 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 224 178 62 --242 186 14 241 196 14 210 166 10 22 18 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 6 6 6 121 92 8 --238 202 15 232 195 16 82 82 82 34 34 34 -- 10 10 10 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 14 14 14 38 38 38 70 70 70 154 122 46 --190 142 34 200 144 11 197 138 11 197 138 11 --213 154 11 226 170 11 242 186 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --225 175 15 46 32 6 2 2 6 22 22 22 --158 158 158 250 250 250 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 250 250 250 242 242 242 224 178 62 --239 182 13 236 186 11 213 154 11 46 32 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 61 42 6 225 175 15 --238 190 10 236 186 11 112 100 78 42 42 42 -- 14 14 14 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 6 6 6 -- 22 22 22 54 54 54 154 122 46 213 154 11 --226 170 11 230 174 11 226 170 11 226 170 11 --236 178 12 242 186 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --241 196 14 184 144 12 10 10 10 2 2 6 -- 6 6 6 116 116 116 242 242 242 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 231 231 231 198 198 198 214 170 54 --236 178 12 236 178 12 210 150 10 137 92 6 -- 18 14 6 2 2 6 2 2 6 2 2 6 -- 6 6 6 70 47 6 200 144 11 236 178 12 --239 182 13 239 182 13 124 112 88 58 58 58 -- 22 22 22 6 6 6 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 10 10 10 -- 30 30 30 70 70 70 180 133 36 226 170 11 --239 182 13 242 186 14 242 186 14 246 186 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 232 195 16 98 70 6 2 2 6 -- 2 2 6 2 2 6 66 66 66 221 221 221 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 206 206 206 198 198 198 214 166 58 --230 174 11 230 174 11 216 158 10 192 133 9 --163 110 8 116 81 8 102 78 10 116 81 8 --167 114 7 197 138 11 226 170 11 239 182 13 --242 186 14 242 186 14 162 146 94 78 78 78 -- 34 34 34 14 14 14 6 6 6 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 6 6 6 -- 30 30 30 78 78 78 190 142 34 226 170 11 --239 182 13 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 241 196 14 203 166 17 22 18 6 -- 2 2 6 2 2 6 2 2 6 38 38 38 --218 218 218 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --250 250 250 206 206 206 198 198 198 202 162 69 --226 170 11 236 178 12 224 166 10 210 150 10 --200 144 11 197 138 11 192 133 9 197 138 11 --210 150 10 226 170 11 242 186 14 246 190 14 --246 190 14 246 186 14 225 175 15 124 112 88 -- 62 62 62 30 30 30 14 14 14 6 6 6 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 10 10 10 -- 30 30 30 78 78 78 174 135 50 224 166 10 --239 182 13 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 241 196 14 139 102 15 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 78 78 78 250 250 250 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --250 250 250 214 214 214 198 198 198 190 150 46 --219 162 10 236 178 12 234 174 13 224 166 10 --216 158 10 213 154 11 213 154 11 216 158 10 --226 170 11 239 182 13 246 190 14 246 190 14 --246 190 14 246 190 14 242 186 14 206 162 42 --101 101 101 58 58 58 30 30 30 14 14 14 -- 6 6 6 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 10 10 10 -- 30 30 30 74 74 74 174 135 50 216 158 10 --236 178 12 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 241 196 14 226 184 13 -- 61 42 6 2 2 6 2 2 6 2 2 6 -- 22 22 22 238 238 238 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 226 226 226 187 187 187 180 133 36 --216 158 10 236 178 12 239 182 13 236 178 12 --230 174 11 226 170 11 226 170 11 230 174 11 --236 178 12 242 186 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 186 14 239 182 13 --206 162 42 106 106 106 66 66 66 34 34 34 -- 14 14 14 6 6 6 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 6 6 6 -- 26 26 26 70 70 70 163 133 67 213 154 11 --236 178 12 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 241 196 14 --190 146 13 18 14 6 2 2 6 2 2 6 -- 46 46 46 246 246 246 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 221 221 221 86 86 86 156 107 11 --216 158 10 236 178 12 242 186 14 246 186 14 --242 186 14 239 182 13 239 182 13 242 186 14 --242 186 14 246 186 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --242 186 14 225 175 15 142 122 72 66 66 66 -- 30 30 30 10 10 10 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 6 6 6 -- 26 26 26 70 70 70 163 133 67 210 150 10 --236 178 12 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --232 195 16 121 92 8 34 34 34 106 106 106 --221 221 221 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --242 242 242 82 82 82 18 14 6 163 110 8 --216 158 10 236 178 12 242 186 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 242 186 14 163 133 67 -- 46 46 46 18 18 18 6 6 6 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 10 10 10 -- 30 30 30 78 78 78 163 133 67 210 150 10 --236 178 12 246 186 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --241 196 14 215 174 15 190 178 144 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 218 218 218 -- 58 58 58 2 2 6 22 18 6 167 114 7 --216 158 10 236 178 12 246 186 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 186 14 242 186 14 190 150 46 -- 54 54 54 22 22 22 6 6 6 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 14 14 14 -- 38 38 38 86 86 86 180 133 36 213 154 11 --236 178 12 246 186 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 232 195 16 190 146 13 214 214 214 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 250 250 250 170 170 170 26 26 26 -- 2 2 6 2 2 6 37 26 9 163 110 8 --219 162 10 239 182 13 246 186 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 186 14 236 178 12 224 166 10 142 122 72 -- 46 46 46 18 18 18 6 6 6 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 6 6 6 18 18 18 -- 50 50 50 109 106 95 192 133 9 224 166 10 --242 186 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --242 186 14 226 184 13 210 162 10 142 110 46 --226 226 226 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --253 253 253 253 253 253 253 253 253 253 253 253 --198 198 198 66 66 66 2 2 6 2 2 6 -- 2 2 6 2 2 6 50 34 6 156 107 11 --219 162 10 239 182 13 246 186 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 242 186 14 --234 174 13 213 154 11 154 122 46 66 66 66 -- 30 30 30 10 10 10 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 6 6 6 22 22 22 -- 58 58 58 154 121 60 206 145 10 234 174 13 --242 186 14 246 186 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 186 14 236 178 12 210 162 10 163 110 8 -- 61 42 6 138 138 138 218 218 218 250 250 250 --253 253 253 253 253 253 253 253 253 250 250 250 --242 242 242 210 210 210 144 144 144 66 66 66 -- 6 6 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 61 42 6 163 110 8 --216 158 10 236 178 12 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 239 182 13 230 174 11 216 158 10 --190 142 34 124 112 88 70 70 70 38 38 38 -- 18 18 18 6 6 6 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 6 6 6 22 22 22 -- 62 62 62 168 124 44 206 145 10 224 166 10 --236 178 12 239 182 13 242 186 14 242 186 14 --246 186 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 236 178 12 216 158 10 175 118 6 -- 80 54 7 2 2 6 6 6 6 30 30 30 -- 54 54 54 62 62 62 50 50 50 38 38 38 -- 14 14 14 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 6 6 6 80 54 7 167 114 7 --213 154 11 236 178 12 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 190 14 242 186 14 239 182 13 239 182 13 --230 174 11 210 150 10 174 135 50 124 112 88 -- 82 82 82 54 54 54 34 34 34 18 18 18 -- 6 6 6 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 6 6 6 18 18 18 -- 50 50 50 158 118 36 192 133 9 200 144 11 --216 158 10 219 162 10 224 166 10 226 170 11 --230 174 11 236 178 12 239 182 13 239 182 13 --242 186 14 246 186 14 246 190 14 246 190 14 --246 190 14 246 190 14 246 190 14 246 190 14 --246 186 14 230 174 11 210 150 10 163 110 8 --104 69 6 10 10 10 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 6 6 6 91 60 6 167 114 7 --206 145 10 230 174 11 242 186 14 246 190 14 --246 190 14 246 190 14 246 186 14 242 186 14 --239 182 13 230 174 11 224 166 10 213 154 11 --180 133 36 124 112 88 86 86 86 58 58 58 -- 38 38 38 22 22 22 10 10 10 6 6 6 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 14 14 14 -- 34 34 34 70 70 70 138 110 50 158 118 36 --167 114 7 180 123 7 192 133 9 197 138 11 --200 144 11 206 145 10 213 154 11 219 162 10 --224 166 10 230 174 11 239 182 13 242 186 14 --246 186 14 246 186 14 246 186 14 246 186 14 --239 182 13 216 158 10 185 133 11 152 99 6 --104 69 6 18 14 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 2 2 6 2 2 6 2 2 6 -- 2 2 6 6 6 6 80 54 7 152 99 6 --192 133 9 219 162 10 236 178 12 239 182 13 --246 186 14 242 186 14 239 182 13 236 178 12 --224 166 10 206 145 10 192 133 9 154 121 60 -- 94 94 94 62 62 62 42 42 42 22 22 22 -- 14 14 14 6 6 6 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 6 6 6 -- 18 18 18 34 34 34 58 58 58 78 78 78 --101 98 89 124 112 88 142 110 46 156 107 11 --163 110 8 167 114 7 175 118 6 180 123 7 --185 133 11 197 138 11 210 150 10 219 162 10 --226 170 11 236 178 12 236 178 12 234 174 13 --219 162 10 197 138 11 163 110 8 130 83 6 -- 91 60 6 10 10 10 2 2 6 2 2 6 -- 18 18 18 38 38 38 38 38 38 38 38 38 -- 38 38 38 38 38 38 38 38 38 38 38 38 -- 38 38 38 38 38 38 26 26 26 2 2 6 -- 2 2 6 6 6 6 70 47 6 137 92 6 --175 118 6 200 144 11 219 162 10 230 174 11 --234 174 13 230 174 11 219 162 10 210 150 10 --192 133 9 163 110 8 124 112 88 82 82 82 -- 50 50 50 30 30 30 14 14 14 6 6 6 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 6 6 6 14 14 14 22 22 22 34 34 34 -- 42 42 42 58 58 58 74 74 74 86 86 86 --101 98 89 122 102 70 130 98 46 121 87 25 --137 92 6 152 99 6 163 110 8 180 123 7 --185 133 11 197 138 11 206 145 10 200 144 11 --180 123 7 156 107 11 130 83 6 104 69 6 -- 50 34 6 54 54 54 110 110 110 101 98 89 -- 86 86 86 82 82 82 78 78 78 78 78 78 -- 78 78 78 78 78 78 78 78 78 78 78 78 -- 78 78 78 82 82 82 86 86 86 94 94 94 --106 106 106 101 101 101 86 66 34 124 80 6 --156 107 11 180 123 7 192 133 9 200 144 11 --206 145 10 200 144 11 192 133 9 175 118 6 --139 102 15 109 106 95 70 70 70 42 42 42 -- 22 22 22 10 10 10 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 6 6 6 10 10 10 -- 14 14 14 22 22 22 30 30 30 38 38 38 -- 50 50 50 62 62 62 74 74 74 90 90 90 --101 98 89 112 100 78 121 87 25 124 80 6 --137 92 6 152 99 6 152 99 6 152 99 6 --138 86 6 124 80 6 98 70 6 86 66 30 --101 98 89 82 82 82 58 58 58 46 46 46 -- 38 38 38 34 34 34 34 34 34 34 34 34 -- 34 34 34 34 34 34 34 34 34 34 34 34 -- 34 34 34 34 34 34 38 38 38 42 42 42 -- 54 54 54 82 82 82 94 86 76 91 60 6 --134 86 6 156 107 11 167 114 7 175 118 6 --175 118 6 167 114 7 152 99 6 121 87 25 --101 98 89 62 62 62 34 34 34 18 18 18 -- 6 6 6 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 6 6 6 6 6 6 10 10 10 -- 18 18 18 22 22 22 30 30 30 42 42 42 -- 50 50 50 66 66 66 86 86 86 101 98 89 --106 86 58 98 70 6 104 69 6 104 69 6 --104 69 6 91 60 6 82 62 34 90 90 90 -- 62 62 62 38 38 38 22 22 22 14 14 14 -- 10 10 10 10 10 10 10 10 10 10 10 10 -- 10 10 10 10 10 10 6 6 6 10 10 10 -- 10 10 10 10 10 10 10 10 10 14 14 14 -- 22 22 22 42 42 42 70 70 70 89 81 66 -- 80 54 7 104 69 6 124 80 6 137 92 6 --134 86 6 116 81 8 100 82 52 86 86 86 -- 58 58 58 30 30 30 14 14 14 6 6 6 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 6 6 6 10 10 10 14 14 14 -- 18 18 18 26 26 26 38 38 38 54 54 54 -- 70 70 70 86 86 86 94 86 76 89 81 66 -- 89 81 66 86 86 86 74 74 74 50 50 50 -- 30 30 30 14 14 14 6 6 6 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 6 6 6 18 18 18 34 34 34 58 58 58 -- 82 82 82 89 81 66 89 81 66 89 81 66 -- 94 86 66 94 86 76 74 74 74 50 50 50 -- 26 26 26 14 14 14 6 6 6 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 6 6 6 6 6 6 14 14 14 18 18 18 -- 30 30 30 38 38 38 46 46 46 54 54 54 -- 50 50 50 42 42 42 30 30 30 18 18 18 -- 10 10 10 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 6 6 6 14 14 14 26 26 26 -- 38 38 38 50 50 50 58 58 58 58 58 58 -- 54 54 54 42 42 42 30 30 30 18 18 18 -- 10 10 10 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 6 6 6 -- 6 6 6 10 10 10 14 14 14 18 18 18 -- 18 18 18 14 14 14 10 10 10 6 6 6 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 6 6 6 -- 14 14 14 18 18 18 22 22 22 22 22 22 -- 18 18 18 14 14 14 10 10 10 6 6 6 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -- 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+ -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 13 13 13 119 117 113 134 131 128 63 62 61 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+ -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 26 28 29 196 196 196 248 248 248 249 249 249 226 226 226 119 117 113 -+13 13 13 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+ -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 147 147 146 251 250 250 253 253 253 252 252 252 255 255 255 230 230 229 -+97 96 96 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+ -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 52 51 50 207 206 206 255 255 255 226 226 226 162 160 159 249 249 249 255 255 255 -+226 226 226 67 67 66 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 20 23 23 122 123 123 -+207 206 206 216 216 216 162 160 159 39 42 42 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+ -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 134 131 128 246 245 245 252 252 252 192 189 185 167 162 159 168 168 168 251 250 250 -+253 253 253 200 200 199 54 58 58 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 52 51 50 168 168 168 246 245 245 -+255 255 255 255 255 255 254 254 254 162 160 159 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+ -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+20 23 23 213 211 211 255 255 255 237 237 237 168 168 168 230 225 217 182 182 182 196 196 196 -+253 253 253 251 250 250 168 168 168 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 69 73 72 196 196 196 251 250 250 255 255 255 -+233 232 232 225 222 218 255 255 255 230 230 229 20 23 23 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+ -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+119 117 113 251 250 250 255 255 255 177 176 172 206 202 198 231 227 218 226 222 213 139 137 135 -+216 216 216 255 255 255 248 248 248 134 134 133 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 84 81 78 216 216 216 253 253 253 253 253 253 216 216 216 -+105 107 107 147 147 146 254 254 254 246 245 245 97 96 96 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+ -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+200 200 199 255 255 255 233 232 232 167 162 159 232 228 219 231 227 218 232 228 219 192 189 185 -+97 96 96 230 230 229 255 255 255 233 232 232 97 96 96 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 13 13 13 122 123 123 226 226 226 255 255 255 251 250 250 196 196 196 119 117 113 -+203 196 190 147 147 146 243 242 242 251 250 250 157 157 157 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+ -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 97 96 96 -+237 237 237 254 254 254 192 189 185 214 212 206 232 228 219 232 228 219 231 227 218 230 225 217 -+119 117 113 139 137 135 246 245 245 254 254 254 196 196 196 39 42 42 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 115 110 108 237 237 237 255 255 255 248 248 248 168 168 168 97 96 96 206 202 198 -+232 228 219 168 168 168 225 222 218 254 254 254 200 200 199 33 33 31 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+ -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 13 13 13 162 160 159 -+251 250 250 243 242 242 179 179 176 226 222 213 232 228 219 232 228 219 232 228 219 232 228 219 -+203 196 190 13 15 17 190 190 190 254 254 254 249 249 249 139 137 135 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 13 13 13 -+119 117 113 237 237 237 255 255 255 246 245 245 162 160 159 68 65 63 203 196 190 234 228 221 -+233 229 220 206 202 198 196 196 196 254 254 254 230 230 229 84 81 78 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+ -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 52 51 50 213 211 211 -+255 255 255 225 222 218 192 189 185 231 227 218 232 228 219 232 228 219 232 228 219 232 228 219 -+226 222 213 105 107 107 63 62 61 226 226 226 255 255 255 233 232 232 97 96 96 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 134 131 128 -+237 237 237 255 255 255 243 242 242 147 147 146 47 49 48 177 176 172 231 227 218 234 229 223 -+234 229 223 223 218 211 177 176 172 251 250 250 246 245 245 119 117 113 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+ -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 97 96 96 248 248 248 -+254 254 254 182 182 182 214 212 206 231 227 218 231 227 218 232 228 219 233 229 220 233 229 220 -+231 227 218 177 170 162 10 11 13 134 131 128 246 245 245 254 254 254 200 200 199 47 49 48 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 20 23 23 147 147 146 245 244 244 -+255 255 255 245 244 244 147 147 146 27 25 23 134 134 133 230 225 217 234 229 223 234 229 223 -+234 229 223 230 225 217 157 157 157 246 245 245 255 255 255 157 157 157 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+ -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 177 176 172 255 255 255 -+243 242 242 157 157 157 232 228 219 231 227 218 232 228 219 232 228 219 233 229 220 232 228 219 -+233 229 220 206 202 198 69 68 64 33 33 31 192 189 185 253 253 253 247 247 246 147 147 146 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 20 23 23 157 157 157 245 244 244 255 255 255 -+237 237 237 139 137 135 0 0 0 97 96 96 214 212 206 234 229 223 234 229 223 234 229 224 -+234 229 224 234 229 224 167 162 159 225 222 218 255 255 255 207 206 206 13 13 13 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+ -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 47 49 48 237 237 237 255 255 255 -+196 196 196 203 196 190 231 227 218 231 227 218 231 227 218 233 229 220 233 229 220 233 229 220 -+233 229 220 226 222 213 119 117 113 0 0 0 69 73 72 233 232 232 255 255 255 233 232 232 -+97 96 96 115 110 108 122 123 123 97 96 96 20 23 23 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 20 23 23 168 168 168 246 245 245 255 255 255 237 237 237 -+122 123 123 13 15 17 51 47 44 192 189 185 232 228 219 234 229 224 234 229 224 234 229 224 -+234 229 224 234 229 224 192 189 185 182 182 182 255 255 255 233 232 232 33 33 31 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+ -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 147 147 146 251 250 250 251 250 250 -+162 160 159 229 225 217 231 227 218 232 228 219 231 227 218 233 229 220 233 229 220 233 229 220 -+233 229 220 233 229 220 177 170 162 10 11 13 0 0 0 139 137 135 251 250 250 255 255 255 -+249 249 249 253 253 253 254 254 254 249 249 249 213 211 211 134 134 133 47 49 48 0 0 0 -+0 0 0 0 0 0 39 42 42 179 179 176 251 250 250 255 255 255 230 230 229 115 110 108 -+0 0 0 20 20 21 147 147 146 230 223 213 234 229 223 234 229 223 234 229 224 234 229 224 -+234 229 223 234 229 223 214 212 206 147 147 146 255 255 255 251 250 250 105 107 107 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+ -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 33 33 31 200 200 199 254 254 254 226 226 226 -+192 189 185 230 225 217 231 227 218 232 228 219 232 228 219 233 229 220 233 229 220 233 229 220 -+233 229 220 233 229 220 214 212 206 26 28 29 2 2 2 39 42 42 200 200 199 254 254 254 -+255 255 255 255 255 255 247 247 246 255 255 255 255 255 255 246 245 245 200 200 199 115 110 108 -+0 0 0 0 0 0 168 168 168 248 248 248 254 254 254 225 222 218 97 96 96 0 0 0 -+0 0 0 85 88 88 214 212 206 233 229 220 234 229 223 234 229 223 234 229 223 234 229 224 -+234 229 223 234 229 223 232 228 221 122 123 123 246 245 245 254 254 254 157 157 157 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+ -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 85 88 88 233 232 232 253 253 253 196 196 196 -+206 202 198 231 227 218 232 228 219 231 227 218 232 228 219 233 229 220 233 229 220 232 228 221 -+233 229 220 232 228 219 231 227 218 97 96 96 0 0 0 3 3 6 97 96 96 226 226 226 -+213 211 211 134 134 133 97 96 96 157 157 157 233 232 232 253 253 253 254 254 254 246 245 245 -+207 206 206 213 211 211 251 250 250 255 255 255 226 226 226 85 88 88 5 6 8 2 2 2 -+0 0 0 179 179 176 229 225 217 223 218 211 234 229 223 234 229 223 234 229 224 234 229 224 -+234 229 223 234 229 223 234 229 223 157 157 157 225 222 218 255 255 255 200 200 199 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+ -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 139 137 135 253 253 253 249 249 249 177 176 172 -+223 218 211 231 227 218 232 228 219 232 228 219 232 228 219 233 229 220 232 228 221 232 228 221 -+233 229 220 233 229 220 232 228 219 167 162 159 0 0 0 0 0 0 17 7 8 89 75 50 -+124 73 40 150 99 58 150 99 58 128 86 51 105 88 81 182 182 182 237 237 237 255 255 255 -+255 255 255 255 255 255 255 255 255 225 222 218 85 88 88 0 0 0 2 2 2 0 0 0 -+115 110 108 206 202 198 162 160 159 203 196 190 234 229 223 234 229 224 234 229 224 234 229 224 -+234 229 224 234 229 223 233 229 220 192 189 185 196 196 196 255 255 255 220 219 215 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+ -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 13 13 13 190 190 190 255 255 255 233 232 232 168 168 168 -+230 225 217 232 228 219 232 228 219 232 228 219 232 228 219 234 229 223 234 229 223 232 228 221 -+233 229 220 233 229 220 232 228 219 162 160 159 0 0 0 8 5 4 81 52 41 145 89 57 -+157 101 56 157 101 56 157 101 56 157 101 56 150 99 58 128 86 51 115 110 108 190 190 190 -+249 249 249 226 226 226 177 176 172 97 96 96 63 45 38 49 32 29 22 12 9 2 2 2 -+97 96 96 134 119 113 126 96 80 214 212 206 234 229 224 234 229 223 234 229 223 234 229 224 -+234 229 224 234 229 223 233 229 220 206 202 198 177 176 172 255 255 255 230 230 229 63 62 61 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+ -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 77 78 76 243 242 242 255 255 255 190 190 190 206 202 198 -+231 227 218 232 228 219 232 228 219 233 229 220 233 229 220 234 229 223 234 228 221 233 229 220 -+233 229 220 230 225 217 168 168 168 27 25 23 2 2 2 81 52 41 145 89 57 150 99 58 -+157 101 56 157 101 56 158 101 56 159 102 57 158 101 56 158 101 58 150 99 58 107 75 50 -+97 96 96 105 88 81 150 99 58 158 101 58 159 102 57 158 101 58 150 99 58 145 89 57 -+150 99 58 158 101 58 154 142 136 229 225 217 234 229 224 234 229 223 234 229 224 234 229 224 -+234 229 224 234 229 223 233 229 220 222 218 209 162 160 159 252 252 252 243 242 242 115 110 108 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+ -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 167 162 159 254 254 254 247 247 246 147 147 146 229 225 217 -+232 228 219 233 229 220 232 228 219 233 229 220 233 229 220 234 229 223 233 229 220 233 229 220 -+231 227 218 177 170 162 47 49 48 0 0 0 81 52 41 145 89 57 157 101 56 157 101 56 -+157 101 56 158 101 56 159 102 57 159 102 57 159 102 57 159 102 57 158 101 56 157 101 56 -+137 86 52 107 75 50 150 99 58 159 102 57 159 102 57 159 102 57 159 102 57 159 102 57 -+159 102 57 126 96 80 206 202 198 234 229 224 234 229 223 234 229 223 234 229 223 234 229 224 -+234 229 224 234 229 223 234 229 223 229 225 217 168 168 168 246 245 245 246 245 245 134 134 133 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+ -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 26 28 29 216 216 216 255 255 255 216 216 216 177 170 162 232 228 219 -+233 229 220 233 229 220 232 228 219 233 229 220 233 229 220 234 229 223 232 228 221 232 228 219 -+179 179 176 39 42 42 0 0 0 63 45 38 137 86 52 157 101 56 157 101 56 158 101 56 -+158 101 56 159 102 57 159 102 57 159 102 57 159 102 57 159 102 57 159 102 57 159 102 57 -+157 101 56 150 99 58 123 75 52 159 102 57 159 102 57 159 102 57 158 101 56 159 102 57 -+137 86 52 177 170 162 234 228 221 234 229 223 234 229 224 234 229 223 234 229 224 234 229 224 -+234 229 224 234 229 223 234 229 224 229 225 217 168 168 168 240 239 239 251 250 250 147 147 146 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+ -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 105 107 107 240 239 239 253 253 253 168 168 168 167 162 159 232 228 219 -+232 228 219 232 228 219 233 229 220 233 229 220 233 229 220 232 228 221 232 228 219 192 189 185 -+57 54 50 0 0 0 8 5 4 128 86 51 157 101 56 157 101 56 158 101 56 158 101 56 -+158 101 56 158 101 56 159 102 57 159 102 57 159 102 57 159 102 57 159 102 57 159 102 57 -+159 102 57 159 102 57 150 99 58 150 99 58 159 102 57 159 102 57 159 102 57 158 101 58 -+137 86 52 134 119 113 203 196 190 232 228 221 234 229 223 234 229 223 234 229 223 234 229 224 -+234 229 223 234 229 223 234 229 224 231 227 218 177 176 172 237 237 237 252 252 252 157 157 157 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+ -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 13 13 13 157 157 157 251 250 250 243 242 242 122 123 123 122 123 123 232 228 219 -+232 228 219 232 228 219 233 229 220 233 229 220 233 229 220 233 229 220 219 214 205 85 88 88 -+3 3 6 2 2 2 22 12 9 145 89 57 157 101 56 157 101 56 158 101 56 158 101 56 -+158 101 56 158 101 56 158 101 56 159 102 57 159 102 57 158 101 56 159 102 57 158 101 56 -+159 102 57 159 102 57 159 102 57 159 102 57 159 102 57 159 102 57 159 102 57 159 102 57 -+159 102 57 157 101 56 126 96 80 203 196 190 234 229 223 234 229 224 234 229 224 234 229 224 -+234 229 223 234 229 224 234 229 223 232 228 219 179 179 176 233 232 232 254 254 254 168 168 168 -+13 13 13 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+ -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 20 23 23 177 176 172 254 254 254 233 232 232 57 54 50 67 65 62 206 202 198 -+232 228 219 232 228 221 232 228 221 233 229 220 233 229 220 233 229 220 192 189 185 0 0 0 -+2 2 2 22 12 9 42 16 9 157 101 56 150 99 58 150 99 58 159 102 57 158 101 56 -+158 101 56 158 101 56 159 102 57 158 101 56 159 102 57 159 102 57 159 102 57 159 102 57 -+159 102 57 159 102 57 159 102 57 159 102 57 159 102 57 159 102 57 159 102 57 159 102 57 -+157 101 56 159 102 57 159 102 57 126 96 80 222 218 209 234 229 224 234 229 224 234 229 223 -+234 229 223 234 229 223 234 229 223 232 228 219 182 182 182 230 230 229 255 255 255 182 182 182 -+26 28 29 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+ -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 26 28 29 182 182 182 255 255 255 226 226 226 28 30 31 20 23 23 139 137 135 -+226 222 213 234 229 223 234 229 223 233 229 220 233 229 220 233 229 220 134 131 128 0 0 0 -+17 7 8 107 51 29 107 51 29 158 101 58 137 86 52 107 75 50 159 102 57 158 101 56 -+157 101 56 157 101 56 157 101 56 158 101 56 158 101 56 159 102 57 159 102 57 159 102 57 -+159 102 57 159 102 57 159 102 57 159 102 57 159 102 57 159 102 57 159 102 57 159 102 57 -+145 89 57 157 101 56 157 101 56 150 99 58 167 162 159 234 229 224 234 229 224 234 229 223 -+234 229 223 234 229 223 234 229 224 232 228 221 179 179 176 220 219 215 255 255 255 196 196 196 -+39 42 42 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+ -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 26 28 29 182 182 182 255 255 255 230 230 229 39 42 42 10 11 13 33 33 31 -+179 179 176 232 228 219 232 228 221 233 229 220 233 229 220 226 222 213 64 64 61 0 0 0 -+107 51 29 178 79 39 147 67 29 137 86 52 137 86 52 107 51 29 150 99 58 158 101 56 -+157 101 56 157 101 56 158 101 56 158 101 56 158 101 56 157 101 56 157 101 56 159 102 57 -+158 101 56 159 102 57 159 102 57 159 102 57 159 102 57 159 102 57 157 101 56 159 102 57 -+137 86 52 150 99 58 157 101 56 128 86 51 119 117 113 225 222 218 234 229 224 234 229 223 -+234 229 224 234 229 224 234 229 224 232 228 221 177 176 172 213 211 211 255 255 255 196 196 196 -+39 42 42 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+ -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 20 23 23 177 176 172 254 254 254 237 237 237 97 96 96 13 15 17 6 7 9 -+60 59 58 192 189 185 233 229 220 233 229 220 233 229 220 206 202 198 17 18 16 81 44 20 -+170 77 39 182 81 37 174 79 37 107 75 50 148 72 46 158 73 41 123 75 52 157 101 56 -+157 101 56 128 86 51 145 89 57 158 101 56 157 101 56 157 101 56 150 99 58 158 101 58 -+159 102 57 159 102 57 159 102 57 159 102 57 159 102 57 159 102 57 128 86 51 159 102 57 -+137 86 52 150 99 58 145 89 57 145 89 57 157 157 157 214 212 206 234 229 223 232 228 221 -+234 229 224 234 229 224 234 229 224 223 218 211 97 96 96 207 206 206 255 255 255 200 200 199 -+47 49 48 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+ -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 122 123 123 243 242 242 253 253 253 182 182 182 39 42 42 9 10 12 -+7 10 12 69 73 72 134 131 128 134 131 128 139 137 135 122 123 123 81 44 20 166 76 38 -+180 81 37 182 81 37 182 81 38 147 67 29 138 69 38 174 79 37 138 69 38 123 75 52 -+150 99 58 150 99 58 81 52 41 128 86 51 157 101 56 150 99 58 128 86 51 157 101 56 -+159 102 57 159 102 57 159 102 57 159 102 57 159 102 57 159 102 57 123 75 52 159 102 57 -+128 86 51 150 99 58 128 86 51 137 86 52 139 137 135 232 228 219 233 229 220 234 229 223 -+234 229 224 234 229 223 230 225 217 134 131 128 64 64 61 226 226 226 255 255 255 200 200 199 -+39 42 42 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+ -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 196 196 196 254 254 254 248 248 248 134 131 128 0 0 0 -+9 10 12 49 32 29 129 59 33 138 69 38 129 59 33 81 44 20 138 69 38 179 80 38 -+179 80 38 179 81 36 176 79 38 166 76 38 147 67 29 147 67 29 147 67 29 129 59 33 -+107 51 29 124 73 40 107 75 50 49 32 29 128 86 51 150 99 58 107 75 50 150 99 58 -+159 102 57 159 102 57 159 102 57 158 101 56 159 102 57 158 101 58 107 75 50 157 101 56 -+128 86 51 150 99 58 128 86 51 107 75 50 63 62 61 203 196 190 232 228 219 234 229 224 -+234 229 224 225 221 213 147 147 146 39 42 42 168 168 168 251 250 250 251 250 250 157 157 157 -+13 13 13 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+ -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 77 78 76 226 226 226 255 255 255 233 232 232 105 107 107 -+2 2 2 5 6 8 49 32 29 107 51 29 159 71 30 172 77 34 179 80 38 179 79 37 -+175 79 35 158 73 41 107 51 29 81 44 20 81 44 20 107 51 29 107 51 29 81 44 20 -+81 44 20 107 51 29 147 67 29 158 73 41 129 59 33 137 86 52 123 75 52 123 75 52 -+159 102 57 159 102 57 159 102 57 159 102 57 159 102 57 145 89 57 107 75 50 145 89 57 -+123 75 52 137 86 52 107 75 50 107 51 29 24 7 0 134 131 128 230 225 217 234 229 224 -+214 212 206 122 123 123 0 0 0 157 157 157 247 247 246 255 255 255 216 216 216 64 64 61 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+ -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 134 131 128 246 245 245 254 254 254 216 216 216 -+84 81 78 8 8 9 42 16 9 138 69 38 176 79 38 180 81 37 180 81 37 179 81 36 -+147 67 29 81 44 20 107 51 29 124 73 40 124 73 40 138 69 38 138 69 38 138 69 38 -+124 73 40 107 51 29 81 44 20 166 76 38 176 79 38 124 73 40 137 73 51 138 69 38 -+150 99 58 159 102 57 159 102 57 159 102 57 159 102 57 128 86 51 123 75 52 124 73 40 -+137 73 51 81 52 41 138 69 38 170 77 39 129 59 33 28 30 31 214 212 206 177 176 172 -+77 78 76 13 15 17 134 131 128 245 244 244 255 255 255 233 232 232 85 88 88 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+ -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 122 123 123 230 230 229 255 255 255 254 254 254 -+168 168 168 49 32 29 138 69 38 179 81 40 179 80 38 182 81 37 182 81 38 158 73 41 -+81 44 20 107 51 29 107 51 29 107 51 29 81 44 20 81 44 20 81 44 20 107 51 29 -+124 73 40 138 69 38 107 51 29 107 51 29 166 76 38 158 73 41 138 69 38 158 73 41 -+137 86 52 159 102 57 159 102 57 158 101 58 145 89 57 129 59 33 107 51 29 158 73 41 -+129 59 33 129 59 33 182 81 38 179 79 37 166 76 38 81 44 20 62 61 58 0 0 0 -+0 0 0 119 117 113 233 232 232 255 255 255 237 237 237 134 131 128 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+ -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+33 33 31 77 78 76 115 110 108 190 190 190 243 242 242 255 255 255 253 253 253 200 200 199 -+85 88 88 138 69 38 179 79 37 179 81 36 180 81 37 182 81 38 170 77 39 81 44 20 -+124 73 40 138 69 38 138 69 38 138 69 38 138 69 38 124 73 40 107 51 29 49 32 29 -+49 32 29 81 44 20 107 51 29 107 51 29 107 51 29 178 79 39 174 79 37 170 77 39 -+137 86 52 159 102 57 158 101 56 145 89 57 107 51 29 81 44 20 49 32 29 81 44 20 -+42 16 9 81 44 20 138 69 38 176 79 38 179 80 38 107 51 29 8 5 4 0 0 0 -+105 107 107 233 232 232 255 255 255 247 247 246 147 147 146 13 13 13 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+ -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 88 88 -+213 211 211 251 250 250 254 254 254 255 255 255 254 254 254 240 239 239 168 168 168 63 45 38 -+129 59 33 179 80 38 179 81 36 180 81 37 180 81 37 180 81 37 129 59 33 107 51 29 -+138 69 38 138 69 38 138 69 38 138 69 38 138 69 38 137 73 51 138 69 38 138 69 38 -+124 73 40 81 44 20 49 32 29 81 44 20 49 32 29 158 73 41 182 81 38 170 77 39 -+137 86 52 157 101 56 145 89 57 63 45 38 37 34 30 62 61 58 69 68 64 69 68 64 -+69 68 64 64 63 59 51 47 44 81 52 41 158 73 41 147 67 29 27 25 23 122 123 123 -+233 232 232 255 255 255 245 244 244 147 147 146 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+ -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 13 13 13 182 182 182 -+255 255 255 255 255 255 254 254 254 237 237 237 190 190 190 115 110 108 81 44 20 147 67 29 -+178 79 39 179 81 36 180 81 37 179 80 38 179 81 36 174 79 37 81 44 20 124 73 40 -+138 69 38 138 69 38 138 69 38 138 69 38 137 73 51 148 72 46 148 72 46 137 73 51 -+138 69 38 137 73 51 138 69 38 124 73 40 124 73 40 107 51 29 179 81 40 166 76 38 -+137 86 52 123 75 52 51 47 32 52 51 50 69 68 64 77 78 76 77 78 76 77 78 76 -+77 78 76 77 78 76 69 73 72 64 64 61 81 52 41 129 59 33 119 117 113 237 237 237 -+255 255 255 246 245 245 157 157 157 20 23 23 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+ -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 20 23 23 207 206 206 -+255 255 255 254 254 254 213 211 211 97 96 96 60 59 58 138 69 38 170 77 39 174 79 37 -+176 79 38 176 79 38 179 79 37 179 80 38 179 80 38 147 67 29 81 44 20 138 69 38 -+138 69 38 138 69 38 138 69 38 138 69 38 137 73 51 137 73 51 123 75 52 107 75 50 -+89 75 50 107 75 50 124 73 40 138 69 38 137 73 51 81 44 20 174 79 37 138 69 38 -+107 51 29 81 44 20 57 54 50 69 68 64 69 68 64 84 81 78 84 81 78 85 88 88 -+97 96 96 97 96 96 84 81 78 77 78 76 69 68 64 49 32 29 139 137 135 255 255 255 -+253 253 253 157 157 157 20 23 23 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+ -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 13 13 13 157 157 157 -+251 250 250 255 255 255 251 250 250 216 216 216 179 179 176 147 147 146 134 119 113 107 75 50 -+107 51 29 166 76 38 179 79 37 179 80 38 179 81 40 107 51 29 107 51 29 138 69 38 -+138 69 38 138 69 38 138 69 38 124 73 40 107 51 29 49 32 29 84 81 78 157 157 157 -+162 160 159 147 147 146 95 84 79 138 69 38 138 69 38 107 51 29 166 76 38 170 77 39 -+158 73 41 63 45 38 69 68 64 69 68 64 77 78 76 84 81 78 95 84 79 97 96 96 -+105 107 107 97 96 96 97 96 96 77 78 76 69 73 72 60 59 58 84 81 78 248 248 248 -+254 254 254 147 147 146 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+ -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 52 51 50 -+168 168 168 240 239 239 254 254 254 255 255 255 254 254 254 248 248 248 225 222 218 84 81 78 -+147 67 29 179 80 38 179 79 37 179 80 38 179 80 38 107 51 29 129 59 33 138 69 38 -+138 69 38 107 51 29 81 44 20 42 16 9 2 2 2 7 9 9 119 117 113 177 170 162 -+168 168 168 177 170 162 134 119 113 138 69 38 138 69 38 107 51 29 138 69 38 158 73 41 -+138 69 38 57 54 50 68 67 63 69 68 64 77 78 76 84 81 78 95 84 79 97 96 96 -+105 107 107 105 107 107 105 107 107 84 81 78 77 78 76 69 73 72 67 67 66 225 222 218 -+255 255 255 233 232 232 139 137 135 20 23 23 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+ -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+13 13 13 69 73 72 168 168 168 245 244 244 255 255 255 248 248 248 134 134 133 107 51 29 -+158 73 41 174 79 37 180 81 37 179 80 38 179 81 40 129 59 33 107 51 29 138 69 38 -+138 69 38 138 69 38 107 51 29 42 16 9 0 0 0 69 73 72 157 157 157 167 162 159 -+167 162 159 167 162 159 154 142 136 138 69 38 138 69 38 81 44 20 107 51 29 107 51 29 -+49 32 29 60 59 58 64 63 59 69 68 64 69 73 72 77 78 76 85 88 88 97 96 96 -+115 110 108 115 110 108 115 110 108 97 96 96 77 78 76 69 73 72 52 51 50 162 160 159 -+248 248 248 255 255 255 243 242 242 85 88 88 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+ -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 97 96 96 200 200 199 251 250 250 252 252 252 182 182 182 51 47 32 138 69 38 -+170 77 39 179 80 38 179 79 37 179 79 37 179 80 38 158 73 41 81 44 20 138 69 38 -+138 69 38 138 69 38 138 69 38 124 73 40 89 68 66 147 147 146 167 162 159 167 162 159 -+167 162 159 168 168 168 154 142 136 138 69 38 124 73 40 81 44 20 178 79 39 179 80 38 -+107 51 29 60 59 58 64 63 59 69 68 64 69 73 72 69 73 72 84 81 78 97 96 96 -+105 107 107 115 110 108 115 110 108 105 107 107 84 81 78 69 73 72 52 51 50 54 58 58 -+182 182 182 254 254 254 255 255 255 134 131 128 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+ -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 13 13 13 -+134 131 128 237 237 237 253 253 253 254 254 254 213 211 211 89 68 66 147 67 29 173 77 35 -+179 81 36 179 80 38 179 79 37 179 80 38 179 79 37 178 79 39 107 51 29 124 73 40 -+138 69 38 138 69 38 138 69 38 138 69 38 137 73 51 134 119 113 154 142 136 162 160 159 -+154 142 136 134 119 113 137 86 52 138 69 38 107 51 29 129 59 33 180 81 37 180 81 37 -+138 69 38 57 54 50 64 63 61 67 65 62 69 73 72 69 73 72 77 78 76 85 88 88 -+105 107 107 115 110 108 115 110 108 105 107 107 85 88 88 77 78 76 60 59 58 162 160 159 -+246 245 245 255 255 255 251 250 250 105 107 107 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+ -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 88 88 -+230 230 229 255 255 255 252 252 252 207 206 206 126 96 80 159 71 30 174 79 37 179 79 37 -+176 79 38 179 79 37 179 80 38 179 80 38 179 80 38 179 80 38 158 73 41 81 44 20 -+124 73 40 138 69 38 138 69 38 138 69 38 138 69 38 138 69 38 138 69 38 137 73 51 -+138 69 38 138 69 38 138 69 38 124 73 40 49 32 29 129 59 33 147 67 29 159 71 30 -+138 69 38 57 54 50 64 63 59 64 63 59 67 67 66 69 73 72 77 78 76 85 88 88 -+97 96 96 97 96 96 105 107 107 97 96 96 84 81 78 77 78 76 62 61 58 168 168 168 -+254 254 254 255 255 255 237 237 237 134 134 133 39 42 42 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+ -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 122 123 123 -+251 250 250 251 250 250 167 162 159 123 75 52 170 77 39 175 79 35 175 79 35 176 79 38 -+179 81 40 179 80 38 179 80 38 179 81 40 179 81 40 179 81 40 178 79 39 138 69 38 -+81 44 20 124 73 40 138 69 38 137 73 51 137 73 51 137 86 52 126 96 80 166 113 90 -+134 119 113 146 134 128 134 119 113 63 45 38 8 5 4 8 5 4 17 7 8 42 16 9 -+49 32 29 33 33 31 65 64 60 63 62 61 64 63 61 69 68 64 69 73 72 77 78 76 -+85 88 88 85 88 88 97 96 96 84 81 78 69 73 72 69 68 64 51 47 32 126 96 80 -+214 212 206 254 254 254 255 255 255 245 244 244 190 190 190 52 51 50 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+ -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 119 117 113 -+246 245 245 253 253 253 207 206 206 126 96 80 159 71 30 176 79 38 176 79 38 179 79 37 -+179 80 38 179 80 38 179 80 38 182 87 48 197 182 169 182 149 133 182 149 133 182 149 133 -+146 134 128 95 84 79 126 96 80 146 134 128 157 157 157 167 162 159 167 162 159 167 162 159 -+167 162 159 157 157 157 115 110 108 167 162 159 97 96 96 0 0 0 3 3 6 2 2 2 -+64 63 61 119 117 113 52 51 50 64 63 59 63 62 61 64 63 61 69 68 64 69 73 72 -+77 78 76 77 78 76 77 78 76 69 68 64 69 68 64 60 59 58 107 51 29 170 77 39 -+148 72 46 192 189 185 246 245 245 255 255 255 245 244 244 119 117 113 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+ -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 63 62 61 -+200 200 199 254 254 254 254 254 254 216 216 216 115 110 108 147 67 29 174 79 37 179 81 36 -+179 80 38 179 80 38 179 79 37 179 81 40 182 149 133 226 220 210 232 225 217 232 225 217 -+230 225 217 206 202 198 167 162 159 122 123 123 105 107 107 119 117 113 134 131 128 134 131 128 -+119 117 113 134 131 128 203 196 190 233 229 220 203 196 190 85 88 88 0 0 0 69 68 64 -+182 182 182 223 218 211 134 131 128 47 49 48 64 64 61 64 63 61 64 63 61 67 65 62 -+67 65 62 67 65 62 64 63 61 64 63 59 60 59 58 81 52 41 170 77 39 176 79 38 -+147 67 29 107 75 50 196 196 196 253 253 253 251 250 250 122 123 123 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+ -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+69 73 72 200 200 199 251 250 250 254 254 254 237 237 237 139 137 135 124 73 40 166 76 38 -+176 79 38 179 79 37 179 80 38 179 80 38 179 81 40 182 149 133 230 223 213 232 225 217 -+231 227 218 231 227 218 230 225 217 226 220 210 203 196 190 167 162 159 147 147 146 147 147 146 -+179 179 176 225 221 213 233 229 220 233 229 220 233 229 220 214 212 206 147 147 146 207 206 206 -+231 227 218 232 228 219 220 215 207 122 123 123 64 64 61 66 65 61 67 66 62 67 66 62 -+65 64 60 64 63 59 64 64 61 60 59 58 81 52 41 166 76 38 179 81 40 182 81 38 -+129 59 33 139 137 135 240 239 239 254 254 254 255 255 255 226 226 226 85 88 88 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+ -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 26 28 29 168 168 168 243 242 242 255 255 255 246 245 245 177 176 172 89 68 66 -+129 59 33 166 76 38 176 79 38 179 79 37 179 79 37 176 79 38 182 149 133 226 220 210 -+232 228 219 232 228 219 232 228 219 232 228 219 233 229 220 233 229 220 231 227 218 182 182 182 -+157 157 157 219 214 205 234 229 223 233 229 220 233 229 220 220 215 207 192 189 185 233 229 220 -+233 229 220 234 229 223 229 225 217 177 176 172 147 147 146 134 131 128 85 88 88 52 51 50 -+39 42 42 47 49 48 97 96 96 147 147 146 182 149 133 166 113 90 182 87 48 182 81 38 -+182 81 38 166 76 38 154 142 136 216 216 216 251 250 250 255 255 255 213 211 211 39 42 42 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+ -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 26 28 29 122 123 123 230 230 229 255 255 255 251 250 250 216 216 216 -+139 137 135 81 52 41 107 51 29 129 59 33 138 69 38 147 67 29 182 149 133 226 220 210 -+232 228 219 232 228 219 233 229 220 233 229 220 232 228 219 233 229 220 231 227 218 226 222 213 -+214 212 206 177 176 172 168 168 168 179 179 176 167 162 159 139 137 135 157 157 157 147 147 146 -+203 196 190 206 202 198 167 162 159 177 170 162 214 212 206 226 222 213 220 215 207 206 202 198 -+203 196 190 206 202 198 220 215 207 232 228 221 234 228 221 220 209 198 182 149 133 182 81 37 -+182 81 38 182 81 37 175 79 35 150 99 58 182 182 182 253 253 253 237 237 237 97 96 96 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+ -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 13 13 13 122 123 123 213 211 211 233 232 232 253 253 253 255 255 255 255 255 255 -+252 252 252 233 232 232 207 206 206 182 182 182 105 107 107 126 96 80 203 196 190 223 218 211 -+231 227 218 232 228 219 232 228 219 232 228 219 233 229 220 232 228 219 233 229 220 232 228 219 -+232 228 219 231 227 218 222 218 209 162 160 159 179 179 176 206 202 198 203 196 190 182 182 182 -+134 131 128 179 179 176 214 212 206 230 223 213 231 227 218 232 228 219 233 229 220 234 229 223 -+234 228 221 232 228 221 234 229 223 234 228 221 220 209 198 182 149 133 182 87 48 182 81 37 -+170 77 39 166 76 38 148 72 46 134 119 113 230 230 229 255 255 255 226 226 226 67 67 66 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+ -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 64 64 61 226 226 226 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -+255 255 255 255 255 255 255 255 255 233 232 232 84 81 78 105 88 81 97 96 96 147 147 146 -+229 225 217 232 228 219 233 229 220 232 228 219 233 229 220 232 228 219 233 229 220 234 229 223 -+232 228 221 233 229 220 232 228 219 225 221 213 226 222 213 229 225 217 230 223 213 226 220 210 -+214 212 206 226 222 213 229 225 217 232 228 219 233 229 220 233 229 220 233 229 220 234 229 223 -+234 229 223 233 229 220 230 223 213 197 182 169 166 113 90 179 79 34 182 81 38 182 81 38 -+129 59 33 89 68 66 190 190 190 240 239 239 255 255 255 246 245 245 147 147 146 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+ -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 85 88 88 245 244 244 255 255 255 230 230 229 254 253 253 255 255 255 255 255 255 -+255 255 255 255 255 255 255 255 255 233 232 232 207 206 206 226 226 226 237 237 237 190 190 190 -+206 202 198 230 225 217 232 228 219 232 228 219 233 229 220 233 229 220 233 229 220 234 229 223 -+232 228 221 233 229 220 231 227 218 230 225 217 229 225 217 229 225 217 226 222 213 229 225 217 -+226 222 213 230 225 217 231 227 218 233 229 220 233 229 220 233 229 220 233 229 220 232 225 217 -+220 209 198 197 182 169 166 113 90 182 87 48 174 79 37 174 79 37 166 76 38 147 67 29 -+107 51 29 60 59 58 182 182 182 252 252 252 252 252 252 162 160 159 20 23 23 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+ -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 63 62 61 226 226 226 255 255 255 200 200 199 207 206 206 253 253 253 255 255 255 -+255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 252 252 252 182 182 182 -+119 117 113 219 214 205 220 215 207 232 228 219 233 229 220 234 229 223 234 229 223 234 229 223 -+234 229 223 234 229 223 233 229 220 232 228 219 231 227 218 232 228 219 232 228 219 231 227 218 -+230 225 217 231 227 218 232 228 219 233 229 220 234 228 221 233 229 220 233 229 220 221 217 205 -+166 113 90 147 67 29 166 76 38 138 69 38 107 51 29 81 52 41 122 123 123 157 157 157 -+182 182 182 207 206 206 237 237 237 254 254 254 237 237 237 97 96 96 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+ -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 33 33 31 190 190 190 255 255 255 237 237 237 134 131 128 168 168 168 237 237 237 -+254 254 254 255 255 255 255 255 255 255 255 255 255 255 255 249 249 249 182 182 182 105 88 81 -+68 65 63 157 157 157 147 147 146 231 227 218 233 229 220 233 229 220 234 229 223 232 228 221 -+234 229 223 234 229 224 234 229 224 234 229 223 232 228 219 233 229 220 233 229 220 232 228 219 -+231 227 218 231 227 218 231 227 218 232 228 221 230 223 213 203 196 190 182 149 133 166 113 90 -+158 101 58 138 69 38 81 44 20 81 44 20 49 32 29 60 59 58 220 219 215 251 250 250 -+255 255 255 255 255 255 255 255 255 249 249 249 177 176 172 33 33 31 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+ -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 134 134 133 246 245 245 253 253 253 179 179 176 137 86 52 126 96 80 -+167 162 159 206 202 198 216 216 216 213 211 211 192 189 185 134 119 113 123 75 52 123 75 52 -+107 75 50 57 54 50 51 47 44 206 202 198 232 228 219 232 228 219 232 228 219 232 228 221 -+234 229 223 234 229 224 234 229 224 234 229 223 233 229 220 233 229 220 233 229 220 231 227 218 -+232 228 219 232 228 219 231 227 218 225 221 213 119 117 113 134 131 128 177 176 172 196 196 196 -+168 168 168 139 137 135 168 168 168 230 230 229 237 237 237 245 244 244 254 254 254 253 253 253 -+233 232 232 213 211 211 190 190 190 119 117 113 13 13 13 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+ -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 64 64 61 220 219 215 255 255 255 240 239 239 134 131 128 128 86 51 -+137 86 52 124 73 40 124 73 40 124 73 40 124 73 40 137 86 52 137 86 52 137 86 52 -+128 86 51 81 52 41 81 52 41 139 137 135 229 225 217 230 225 217 232 228 219 232 228 219 -+234 229 223 234 229 223 233 229 220 233 229 220 233 229 220 232 228 219 232 228 219 232 228 219 -+231 227 218 231 227 218 231 227 218 230 223 213 122 123 123 251 250 250 255 255 255 255 255 255 -+255 255 255 253 253 253 247 247 246 254 254 254 255 255 255 255 255 255 251 250 250 207 206 206 -+85 88 88 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+ -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 119 117 113 248 248 248 255 255 255 233 232 232 115 110 108 -+123 75 52 137 86 52 150 99 58 150 99 58 137 86 52 128 86 51 145 89 57 137 86 52 -+150 99 58 107 75 50 128 86 51 77 78 76 206 202 198 232 228 219 231 227 218 231 227 218 -+232 228 219 232 228 221 233 229 220 233 229 220 233 229 220 233 229 220 233 229 220 233 229 220 -+232 228 219 231 227 218 206 202 198 226 220 210 139 137 135 248 248 248 255 255 255 233 232 232 -+237 237 237 246 245 245 251 250 250 246 245 245 182 182 182 168 168 168 119 117 113 54 58 58 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+ -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 177 176 172 247 247 246 255 255 255 233 232 232 -+157 157 157 126 96 80 128 86 51 123 75 52 128 86 51 145 89 57 145 89 57 157 101 56 -+137 86 52 107 75 50 123 75 52 51 47 32 167 162 159 229 225 217 232 228 219 232 228 219 -+232 228 219 232 228 219 232 228 219 231 227 218 232 228 219 232 228 219 232 228 219 232 228 219 -+232 228 219 231 227 218 134 134 133 134 131 128 134 134 133 240 239 239 254 254 254 162 160 159 -+0 0 0 97 96 96 139 137 135 105 107 107 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+ -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 39 42 42 177 176 172 251 250 250 255 255 255 -+247 247 246 179 179 176 107 75 50 150 99 58 150 99 58 150 99 58 157 101 56 145 89 57 -+81 52 41 123 75 52 107 75 50 107 75 50 97 96 96 223 218 211 232 228 219 232 228 219 -+231 227 218 232 228 219 232 228 219 232 228 219 232 228 219 232 228 219 232 228 219 233 229 220 -+232 228 219 232 228 219 203 196 190 196 196 196 243 242 242 252 252 252 254 254 254 147 147 146 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+ -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 77 78 76 216 216 216 254 254 254 251 250 250 -+200 200 199 123 75 52 123 75 52 150 99 58 150 99 58 157 101 56 145 89 57 107 75 50 -+137 86 52 137 86 52 137 86 52 128 86 51 81 44 20 192 189 185 231 227 218 231 227 218 -+233 229 220 232 228 219 232 228 219 231 227 218 232 228 219 232 228 219 231 227 218 231 227 218 -+232 228 219 233 229 220 225 221 213 177 176 172 246 245 245 255 255 255 243 242 242 115 110 108 -+13 13 13 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+ -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 20 23 23 200 200 199 254 254 254 252 252 252 192 189 185 -+126 96 80 128 86 51 150 99 58 150 99 58 157 101 56 150 99 58 107 75 50 137 86 52 -+137 86 52 145 89 57 150 99 58 137 86 52 49 32 29 122 123 123 225 221 213 231 227 218 -+231 227 218 230 225 217 231 227 218 232 228 219 231 227 218 231 227 218 233 229 220 233 229 220 -+233 229 220 233 229 220 233 229 220 192 189 185 196 196 196 255 255 255 255 255 255 237 237 237 -+168 168 168 119 117 113 39 42 42 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+ -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 168 168 168 252 252 252 254 254 254 190 190 190 128 86 51 -+128 86 51 150 99 58 150 99 58 157 101 56 150 99 58 107 75 50 123 75 52 128 86 51 -+150 99 58 157 101 56 145 89 57 107 75 50 81 52 41 60 59 58 203 196 190 229 225 217 -+229 225 217 229 225 217 230 225 217 231 227 218 232 228 219 232 228 219 233 229 220 232 228 219 -+233 229 220 234 229 223 234 229 223 232 228 221 147 147 146 196 196 196 248 248 248 255 255 255 -+251 250 250 247 247 246 230 230 229 182 182 182 105 107 107 52 51 50 20 23 23 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+ -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 105 107 107 237 237 237 255 255 255 216 216 216 126 96 80 128 86 51 -+150 99 58 157 101 56 157 101 56 150 99 58 107 75 50 88 74 36 128 86 51 145 89 57 -+150 99 58 145 89 57 128 86 51 107 75 50 107 75 50 51 47 32 177 170 162 229 225 217 -+230 225 217 230 225 217 230 225 217 231 227 218 232 228 219 233 229 220 232 228 219 233 229 220 -+233 229 220 234 229 223 234 229 224 234 229 224 229 225 217 182 182 182 168 168 168 216 216 216 -+243 242 242 253 253 253 255 255 255 255 255 255 248 248 248 213 211 211 177 176 172 157 157 157 -+139 137 135 105 107 107 64 64 61 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+ -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 39 42 42 190 190 190 254 254 254 243 242 242 146 134 128 128 86 51 145 89 57 -+158 101 56 150 99 58 150 99 58 88 74 36 63 45 38 107 75 50 150 99 58 145 89 57 -+150 99 58 137 86 52 137 86 52 107 75 50 88 74 36 97 96 96 214 212 206 229 225 217 -+230 225 217 230 225 217 230 225 217 231 227 218 231 227 218 233 229 220 232 228 219 233 229 220 -+234 229 223 234 229 223 234 229 223 234 229 223 234 229 224 234 229 224 222 218 209 182 182 182 -+139 137 135 147 147 146 196 196 196 240 239 239 254 254 254 255 255 255 254 254 254 251 250 250 -+246 245 245 240 239 239 233 232 232 200 200 199 139 137 135 52 51 50 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+ -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 64 64 61 230 230 229 255 255 255 206 202 198 128 86 51 123 75 52 158 101 56 -+157 101 56 150 99 58 107 75 50 63 45 38 107 75 50 150 99 58 145 89 57 150 99 58 -+145 89 57 145 89 57 123 75 52 107 75 50 97 96 96 206 202 198 229 225 217 229 225 217 -+230 225 217 231 227 218 231 227 218 231 227 218 232 228 219 233 229 220 233 229 220 233 229 220 -+232 228 221 234 229 224 234 229 223 234 229 223 234 229 224 234 229 224 234 229 223 234 229 223 -+192 189 185 60 59 58 46 53 56 85 88 88 162 160 159 216 216 216 233 232 232 240 239 239 -+246 245 245 251 250 250 255 255 255 255 255 255 253 253 253 225 222 218 147 147 146 60 59 58 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+ -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 97 96 96 249 249 249 254 254 254 154 142 136 124 73 40 150 99 58 157 101 56 -+150 99 58 145 89 57 81 52 41 107 75 50 137 86 52 145 89 57 128 86 51 150 99 58 -+137 86 52 145 89 57 81 52 41 115 110 108 206 202 198 229 225 217 229 225 217 229 225 217 -+230 225 217 231 227 218 230 225 217 231 227 218 232 228 219 232 228 219 232 228 219 233 229 220 -+233 229 220 234 229 223 234 229 224 234 229 224 234 229 223 234 229 224 234 229 224 232 228 221 -+157 157 157 34 41 43 33 38 41 38 46 48 28 35 38 46 53 56 85 88 88 119 117 113 -+134 134 133 157 157 157 192 189 185 226 226 226 253 253 253 255 255 255 251 250 250 207 206 206 -+105 107 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+ -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 134 134 133 255 255 255 247 247 246 105 88 81 128 86 51 150 99 58 157 101 56 -+150 99 58 107 75 50 81 52 41 128 86 51 145 89 57 123 75 52 150 99 58 137 86 52 -+137 86 52 107 75 50 105 107 107 214 212 206 231 227 218 230 225 217 229 225 217 230 225 217 -+231 227 218 231 227 218 231 227 218 231 227 218 231 227 218 231 227 218 231 227 218 233 229 220 -+233 229 220 232 228 221 234 229 223 234 229 224 234 229 224 234 229 223 234 229 224 222 218 209 -+105 107 107 28 35 38 28 35 38 33 38 41 28 35 38 34 41 43 33 38 41 34 41 43 -+34 41 43 38 46 48 54 58 58 85 88 88 147 147 146 226 226 226 252 252 252 254 254 254 -+230 230 229 85 88 88 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+ -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 134 134 133 255 255 255 245 244 244 89 68 66 128 86 51 157 101 56 150 99 58 -+137 86 52 63 45 38 123 75 52 137 86 52 137 86 52 128 86 51 137 86 52 128 86 51 -+88 74 36 122 123 123 214 212 206 232 228 219 231 227 218 230 225 217 230 225 217 231 227 218 -+231 227 218 231 227 218 231 227 218 231 227 218 230 225 217 231 227 218 232 228 219 233 229 220 -+233 229 220 232 228 221 234 229 223 234 229 223 234 229 223 234 229 223 234 229 223 179 179 176 -+33 38 41 29 32 34 28 35 38 33 38 41 33 38 41 33 38 41 28 35 38 33 38 41 -+33 38 41 34 41 43 34 41 43 34 41 43 42 49 51 77 78 76 182 182 182 247 247 246 -+254 254 254 213 211 211 77 78 76 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+ -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 119 117 113 255 255 255 251 250 250 105 88 81 124 73 40 157 101 56 150 99 58 -+107 75 50 88 74 36 128 86 51 128 86 51 128 86 51 137 86 52 123 75 52 81 44 20 -+119 117 113 219 214 205 231 227 218 231 227 218 230 225 217 229 225 217 230 225 217 231 227 218 -+231 227 218 231 227 218 231 227 218 229 225 217 230 225 217 231 227 218 231 227 218 232 228 219 -+232 228 219 233 229 220 232 228 221 234 229 223 234 229 223 234 229 223 214 212 206 77 78 76 -+23 27 31 25 30 33 28 35 38 33 38 41 33 38 41 28 35 38 33 38 41 33 38 41 -+33 38 41 38 46 48 38 46 48 34 41 43 42 49 51 54 58 58 69 73 72 182 182 182 -+252 252 252 254 254 254 196 196 196 39 42 42 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+ -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 97 96 96 251 250 250 254 254 254 134 131 128 124 73 40 157 101 56 145 89 57 -+81 44 20 107 75 50 128 86 51 137 86 52 128 86 51 88 74 36 37 34 30 3 3 8 -+162 160 159 233 229 220 231 227 218 230 225 217 230 225 217 229 225 217 230 225 217 231 227 218 -+231 227 218 231 227 218 231 227 218 230 225 217 230 225 217 230 225 217 230 225 217 232 228 219 -+232 228 219 233 229 220 234 229 223 234 229 223 233 229 220 223 218 211 119 117 113 28 35 38 -+29 32 34 29 32 34 29 32 34 25 30 33 25 30 33 28 35 38 28 35 38 28 35 38 -+34 41 43 38 46 48 38 46 48 38 46 48 42 49 51 46 53 56 54 58 58 64 67 67 -+196 196 196 254 253 253 254 254 254 190 190 190 52 51 50 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+ -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 67 67 66 233 232 232 254 254 254 179 179 176 124 73 40 157 101 56 137 86 52 -+63 45 38 107 75 50 137 86 52 137 86 52 81 52 41 27 25 23 20 24 26 14 18 20 -+105 107 107 230 225 217 230 225 217 230 225 217 230 225 217 230 225 217 229 225 217 231 227 218 -+231 227 218 230 225 217 230 225 217 229 225 217 229 225 217 229 225 217 231 227 218 231 227 218 -+232 228 219 233 229 220 233 229 220 233 229 220 226 222 213 147 147 146 39 42 42 28 35 38 -+29 32 34 25 30 33 25 30 33 21 25 29 25 30 33 29 32 34 28 35 38 28 35 38 -+34 41 43 34 41 43 34 41 43 38 46 48 42 49 51 46 53 56 46 53 56 54 58 58 -+85 88 88 207 206 206 254 254 254 251 250 250 168 168 168 26 28 29 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+ -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 52 51 50 207 206 206 255 255 255 207 206 206 124 73 40 150 99 58 123 75 52 -+88 74 36 88 74 36 81 52 41 49 32 29 26 28 29 21 25 29 21 25 29 16 19 20 -+60 59 58 203 196 190 230 225 217 230 225 217 231 227 218 230 225 217 229 225 217 230 225 217 -+231 227 218 230 225 217 229 225 217 226 222 213 226 222 213 229 225 217 231 227 218 232 228 219 -+231 227 218 233 229 220 232 228 219 222 218 209 139 137 135 33 38 41 25 30 33 29 32 34 -+29 32 34 25 30 33 23 27 31 21 25 29 25 30 33 28 35 38 28 35 38 34 41 43 -+33 38 41 33 38 41 34 41 43 38 46 48 42 49 51 46 53 56 42 49 51 46 53 56 -+46 53 56 85 88 88 220 219 215 255 255 255 246 245 245 122 123 123 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+ -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 26 28 29 182 182 182 255 255 255 226 226 226 128 86 51 145 89 57 107 75 50 -+49 32 29 27 25 23 13 17 18 20 23 23 20 24 26 20 24 26 20 23 23 16 19 20 -+26 28 29 139 137 135 226 222 213 229 225 217 229 225 217 229 225 217 229 225 217 229 225 217 -+229 225 217 229 225 217 226 222 213 226 222 213 226 222 213 229 225 217 231 227 218 231 227 218 -+231 227 218 231 227 218 203 196 190 119 117 113 28 35 38 29 32 34 23 27 31 25 30 33 -+25 30 33 28 35 38 29 32 34 25 30 33 25 30 33 28 35 38 33 38 41 34 41 43 -+34 41 43 33 38 41 34 41 43 38 46 48 38 46 48 38 46 48 42 49 51 42 49 51 -+46 53 56 46 53 56 105 107 107 233 232 232 255 255 255 237 237 237 105 107 107 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+ -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 13 13 13 168 168 168 253 253 253 233 232 232 126 96 80 128 86 51 49 32 29 -+21 25 29 21 25 29 16 22 26 16 19 20 16 19 20 16 19 20 16 19 20 16 19 20 -+16 22 26 52 51 50 167 162 159 226 222 213 229 225 217 229 225 217 229 225 217 230 225 217 -+229 225 217 229 225 217 229 225 217 226 222 213 225 221 213 229 225 217 230 225 217 230 225 217 -+220 215 207 162 160 159 84 81 78 28 35 38 28 35 38 25 30 33 21 25 29 21 25 29 -+23 27 31 25 30 33 29 32 34 29 32 34 23 27 31 29 32 34 28 35 38 33 38 41 -+34 41 43 33 38 41 33 38 41 34 41 43 34 41 43 38 46 48 38 46 48 42 49 51 -+46 53 56 46 53 56 46 53 56 139 137 135 243 242 242 254 254 254 220 219 215 84 81 78 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+ -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 162 160 159 252 252 252 237 237 237 134 119 113 88 74 36 16 22 26 -+20 24 26 20 23 23 16 19 20 16 19 20 20 23 23 20 23 23 20 23 23 16 19 20 -+14 18 20 20 23 23 29 32 34 134 131 128 203 196 190 226 220 210 230 225 217 230 225 217 -+229 225 217 230 223 213 226 222 213 226 222 213 226 222 213 223 218 211 214 212 206 177 176 172 -+85 88 88 28 35 38 29 32 34 23 27 31 21 25 29 20 24 26 23 27 31 21 25 29 -+20 24 26 21 25 29 23 27 31 29 32 34 25 30 33 25 30 33 33 38 41 28 35 38 -+33 38 41 33 38 41 28 35 38 33 38 41 34 41 43 38 46 48 38 46 48 38 46 48 -+42 49 51 42 49 51 42 49 51 54 58 58 182 182 182 252 252 252 254 254 254 168 168 168 -+13 13 13 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+ -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 20 23 23 177 176 172 254 254 254 237 237 237 134 119 113 51 47 32 20 23 23 -+16 19 20 16 19 20 14 18 20 16 19 20 20 23 23 14 18 20 20 23 23 20 23 23 -+14 18 20 14 18 20 20 23 23 16 22 26 69 73 72 139 137 135 179 179 176 206 202 198 -+220 215 207 223 218 211 220 215 207 203 196 190 177 170 162 134 134 133 85 88 88 14 18 20 -+23 27 31 23 27 31 20 24 26 20 24 26 20 23 23 20 24 26 20 24 26 20 24 26 -+16 22 26 20 24 26 23 27 31 25 30 33 25 30 33 28 35 38 28 35 38 29 32 34 -+33 38 41 33 38 41 29 32 34 28 35 38 33 38 41 34 41 43 34 41 43 34 41 43 -+42 49 51 42 49 51 42 49 51 46 53 56 85 88 88 213 211 211 255 255 255 246 245 245 -+134 131 128 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+ -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 20 23 23 147 147 146 207 206 206 200 200 199 119 117 113 -+39 42 42 47 49 48 190 190 190 255 255 255 237 237 237 105 88 81 33 33 31 20 24 26 -+20 24 26 16 19 20 13 15 17 13 15 17 12 13 15 10 12 14 14 18 20 16 19 20 -+13 17 18 14 18 20 20 23 23 20 23 23 20 24 26 20 24 26 47 49 48 63 62 61 -+69 73 72 84 81 78 69 73 72 60 59 58 39 42 42 20 24 26 20 24 26 21 25 29 -+16 22 26 20 23 23 20 23 23 16 19 20 12 15 17 13 15 17 13 15 17 13 15 17 -+12 13 15 13 17 18 21 25 29 25 30 33 25 30 33 25 30 33 28 35 38 28 35 38 -+28 35 38 33 38 41 29 32 34 25 30 33 29 32 34 34 41 43 38 46 48 42 49 51 -+42 49 51 46 53 56 46 53 56 42 49 51 54 58 58 115 110 108 233 232 232 255 255 255 -+230 230 229 97 96 96 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+ -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 139 137 135 248 248 248 255 255 255 255 255 255 246 245 245 -+196 196 196 192 189 185 243 242 242 255 255 255 213 211 211 51 47 32 26 28 29 20 23 23 -+16 22 26 13 17 18 12 15 17 13 15 17 10 11 13 10 12 14 12 15 17 13 17 18 -+13 15 17 12 13 15 12 15 17 13 17 18 13 15 17 12 13 15 16 19 20 14 18 20 -+12 15 17 13 15 17 12 15 17 12 15 17 13 17 18 16 19 20 20 23 23 20 23 23 -+13 17 18 14 18 20 13 15 17 10 12 14 12 13 15 14 18 20 14 18 20 13 17 18 -+12 13 15 10 12 14 16 19 20 20 24 26 21 25 29 23 27 31 25 30 33 25 30 33 -+25 30 33 29 32 34 25 30 33 29 32 34 28 35 38 33 38 41 42 49 51 42 49 51 -+42 49 51 46 53 56 54 58 58 46 53 56 46 53 56 69 73 72 157 157 157 247 247 246 -+254 254 254 207 206 206 54 58 58 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+ -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 182 182 182 253 253 253 245 244 244 243 242 242 254 254 254 -+255 255 255 255 255 255 255 255 255 246 245 245 134 131 128 37 34 30 13 17 18 14 18 20 -+14 18 20 13 15 17 12 13 15 12 13 15 9 10 12 9 10 12 10 11 13 10 12 14 -+10 11 13 10 11 13 10 11 13 10 11 13 12 13 15 13 15 17 14 18 20 13 15 17 -+9 10 12 9 10 12 8 9 11 8 9 11 9 10 12 10 11 13 10 11 13 12 13 14 -+9 10 12 9 10 12 12 13 15 12 13 15 12 13 15 13 17 18 13 17 18 13 15 17 -+12 13 15 10 12 14 13 15 17 13 17 18 16 19 20 20 23 23 20 24 26 23 27 31 -+21 25 29 25 30 33 28 35 38 33 38 41 33 38 41 33 38 41 38 46 48 34 41 43 -+38 46 48 42 49 51 54 58 58 54 58 58 46 53 56 46 53 56 64 67 67 182 182 182 -+254 254 254 252 252 252 190 190 190 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+ -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 157 157 157 251 250 250 249 249 249 167 162 159 192 189 185 -+226 226 226 235 232 229 220 215 207 146 134 128 107 75 50 12 15 17 13 17 18 12 15 17 -+10 11 13 9 10 12 9 10 12 7 8 10 7 8 10 7 9 9 8 9 11 7 8 10 -+9 10 12 9 10 12 8 9 11 10 11 13 12 13 15 12 13 15 12 13 15 10 11 13 -+8 8 9 7 8 10 7 8 10 7 8 10 8 9 11 8 8 9 8 8 9 8 9 11 -+10 12 14 9 10 12 10 11 13 10 11 13 12 13 15 13 17 18 14 18 20 12 13 15 -+10 11 13 10 11 13 10 11 13 12 13 15 13 17 18 16 19 20 20 23 23 20 24 26 -+23 27 31 25 30 33 33 38 41 34 41 43 33 38 41 34 41 43 38 46 48 34 41 43 -+38 46 48 38 46 48 42 49 51 42 49 51 42 49 51 42 49 51 46 53 56 64 67 67 -+207 206 206 254 254 254 251 250 250 168 168 168 26 28 29 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+ -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 77 78 76 233 232 232 255 255 255 237 237 237 134 131 128 -+123 75 52 126 96 80 128 86 51 145 89 57 51 47 32 13 17 18 16 19 20 13 15 17 -+9 10 12 10 11 13 10 12 14 8 9 11 8 9 11 9 10 12 10 11 13 7 8 10 -+8 9 11 10 12 14 9 10 12 12 13 15 13 15 17 10 11 13 8 9 11 7 8 10 -+8 9 11 8 9 11 8 9 11 7 8 10 7 8 10 6 7 9 8 9 11 9 10 12 -+9 10 12 9 10 12 9 10 12 9 10 12 10 12 14 13 17 18 13 15 17 10 12 14 -+9 10 12 9 10 12 10 11 13 14 18 20 20 23 23 20 24 26 20 24 26 21 25 29 -+25 30 33 25 30 33 28 35 38 28 35 38 33 38 41 38 46 48 42 49 51 38 46 48 -+34 41 43 34 41 43 34 41 43 42 49 51 42 49 51 46 53 56 38 46 48 46 53 56 -+97 96 96 220 219 215 254 254 254 245 244 244 147 147 146 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+ -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 134 131 128 246 245 245 255 255 255 243 242 242 -+179 179 176 107 75 50 128 86 51 107 75 50 20 20 21 12 13 15 16 19 20 12 13 15 -+12 13 15 13 15 17 10 11 13 9 10 12 8 9 11 10 12 14 12 13 15 10 11 13 -+8 9 11 8 9 11 8 8 9 8 8 9 8 8 9 8 8 9 7 8 10 8 9 11 -+7 8 10 7 8 10 6 7 9 6 7 9 7 8 10 6 7 9 8 9 11 9 10 12 -+10 11 13 10 11 13 13 13 13 17 18 16 13 15 17 13 15 17 10 12 14 10 11 13 -+9 10 12 9 10 12 10 11 13 20 20 21 20 23 23 25 30 33 21 25 29 23 27 31 -+25 30 33 25 30 33 25 30 33 25 30 33 29 32 34 33 38 41 34 41 43 33 38 41 -+33 38 41 33 38 41 34 41 43 38 46 48 42 49 51 46 53 56 42 49 51 38 46 48 -+46 53 56 119 117 113 237 237 237 255 255 255 245 244 244 134 134 133 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+ -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 122 123 123 243 242 242 255 255 255 243 242 242 -+177 170 162 150 99 58 128 86 51 63 45 38 10 11 13 10 11 13 12 13 15 13 15 17 -+16 19 20 16 19 20 12 15 17 8 9 11 9 10 12 10 12 14 13 15 17 12 13 15 -+12 13 14 9 10 12 8 9 11 8 9 11 6 7 9 8 9 11 6 7 9 3 3 8 -+3 3 8 3 3 8 7 10 12 3 3 6 4 4 14 13 15 17 13 17 18 16 22 26 -+16 19 20 20 23 23 137 105 55 108 90 44 20 24 26 21 25 29 20 23 23 16 19 20 -+9 10 12 10 11 13 10 12 14 12 13 15 13 17 18 20 24 26 23 27 31 23 27 31 -+25 30 33 23 27 31 23 27 31 23 27 31 21 25 29 23 27 31 29 32 34 28 35 38 -+28 35 38 29 32 34 28 35 38 28 35 38 38 46 48 46 53 56 42 49 51 38 46 48 -+42 49 51 46 53 56 122 123 123 237 237 237 255 255 255 237 237 237 119 117 113 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+ -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 33 33 31 225 222 218 255 255 255 237 237 237 154 142 136 -+137 86 52 128 86 51 107 75 50 27 25 23 8 9 11 13 15 17 13 17 18 12 13 15 -+16 19 20 14 18 20 13 17 18 12 13 15 17 18 16 17 18 16 13 15 17 14 18 20 -+27 25 23 20 20 21 27 25 23 37 34 30 27 25 23 16 19 20 88 74 36 122 100 50 -+122 100 50 122 100 50 81 52 41 200 163 79 200 163 79 189 156 74 16 22 26 23 27 31 -+23 27 31 37 34 30 223 182 84 152 111 60 21 25 29 21 25 29 16 22 26 16 19 20 -+12 13 15 10 12 14 10 11 13 10 11 13 13 17 18 16 19 20 20 23 23 20 24 26 -+25 30 33 23 27 31 23 27 31 25 30 33 23 27 31 21 25 29 25 30 33 29 32 34 -+29 32 34 25 30 33 29 32 34 29 32 34 38 46 48 42 49 51 38 46 48 38 46 48 -+42 49 51 42 49 51 46 53 56 139 137 135 243 242 242 255 255 255 233 232 232 122 123 123 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+ -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 122 123 123 248 248 248 252 252 252 167 162 159 137 86 52 -+128 86 51 128 86 51 81 52 41 7 10 12 8 9 11 10 11 13 13 15 17 13 15 17 -+12 13 15 13 15 17 13 15 17 27 25 23 137 105 55 161 132 61 28 30 31 23 27 31 -+189 156 74 161 132 61 161 132 61 235 192 90 161 132 61 20 24 26 161 132 61 216 177 82 -+200 163 79 177 145 72 108 90 44 241 195 89 216 177 82 228 186 86 51 47 32 25 30 33 -+23 27 31 89 75 50 235 192 90 108 90 44 21 25 29 23 27 31 20 24 26 16 22 26 -+10 12 14 9 10 12 9 10 12 13 15 17 16 19 20 16 19 20 16 19 20 16 19 20 -+21 25 29 25 30 33 25 30 33 25 30 33 28 35 38 33 38 41 28 35 38 29 32 34 -+29 32 34 33 38 41 28 35 38 33 38 41 42 49 51 38 46 48 34 41 43 38 46 48 -+38 46 48 38 46 48 34 41 43 33 38 41 162 160 159 246 245 245 255 255 255 237 237 237 -+85 88 88 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+ -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 147 147 146 251 250 250 237 237 237 134 119 113 128 86 51 -+128 86 51 124 73 40 27 25 23 8 9 11 8 9 11 10 11 13 12 15 17 20 23 23 -+17 18 16 10 11 13 12 13 14 49 32 29 200 163 79 223 182 84 33 33 31 63 45 38 -+235 192 90 177 145 72 200 163 79 248 200 89 161 132 61 37 34 30 177 145 72 200 163 79 -+208 171 79 177 145 72 108 90 44 241 195 89 189 156 74 235 190 84 89 75 50 21 25 29 -+7 16 24 152 111 60 228 186 86 63 45 38 25 30 33 23 27 31 20 24 26 14 18 20 -+10 11 13 9 10 12 10 11 13 10 12 14 13 15 17 16 19 20 16 19 20 14 18 20 -+16 22 26 21 25 29 29 32 34 25 30 33 28 35 38 29 32 34 29 32 34 28 35 38 -+33 38 41 33 38 41 34 41 43 42 49 51 42 49 51 38 46 48 38 46 48 34 41 43 -+34 41 43 38 46 48 34 41 43 38 46 48 38 46 48 157 157 157 245 244 244 251 250 250 -+157 157 157 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+ -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 147 147 146 251 250 250 233 232 232 134 119 113 128 86 51 -+128 86 51 63 45 38 7 8 10 9 10 12 8 9 11 9 10 12 26 28 29 119 117 113 -+69 73 72 10 11 13 9 10 12 51 47 32 216 177 82 200 163 79 33 33 31 89 75 50 -+241 195 89 161 132 61 216 177 82 248 200 89 161 132 61 51 47 32 200 163 79 189 156 74 -+223 182 84 161 132 61 122 100 50 241 195 89 161 132 61 241 195 89 122 100 50 20 24 26 -+7 16 24 189 156 74 208 171 79 21 25 29 29 32 34 23 27 31 20 24 26 20 23 23 -+13 15 17 10 11 13 10 12 14 10 12 14 13 15 17 20 23 23 20 23 23 16 19 20 -+16 19 20 29 32 34 33 38 41 33 38 41 28 35 38 29 32 34 29 32 34 25 30 33 -+34 41 43 38 46 48 42 49 51 42 49 51 38 46 48 38 46 48 42 49 51 38 46 48 -+42 49 51 46 53 56 38 46 48 33 38 41 34 41 43 122 123 123 245 244 244 251 250 250 -+157 157 157 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+ -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 147 147 146 251 250 250 237 237 237 134 119 113 107 75 50 -+107 75 50 22 12 9 8 9 11 9 10 12 8 9 11 0 0 0 97 96 96 134 134 133 -+20 20 21 9 10 12 10 12 14 63 45 38 235 190 84 177 145 72 26 28 29 122 100 50 -+241 195 89 161 132 61 223 182 84 248 200 89 161 132 61 51 47 32 216 177 82 177 145 72 -+235 192 90 161 132 61 122 100 50 235 192 90 137 105 55 241 195 89 152 111 60 23 27 31 -+21 25 29 216 177 82 177 145 72 7 16 24 29 32 34 25 30 33 23 27 31 20 24 26 -+14 18 20 10 11 13 12 13 15 13 17 18 20 24 26 23 27 31 21 25 29 20 23 23 -+20 23 23 23 27 31 33 38 41 28 35 38 29 32 34 25 30 33 23 27 31 21 25 29 -+33 38 41 42 49 51 46 53 56 42 49 51 46 53 56 38 46 48 42 49 51 38 46 48 -+51 47 44 107 51 29 49 32 29 5 12 15 105 107 107 230 230 229 255 255 255 237 237 237 -+97 96 96 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+ -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 134 134 133 249 249 249 246 245 245 146 134 128 107 75 50 -+81 52 41 13 13 13 10 11 13 10 11 13 5 6 8 67 67 66 167 162 159 52 51 50 -+13 15 17 8 9 11 10 11 13 88 74 36 248 200 89 161 132 61 20 24 26 137 105 55 -+241 195 89 152 111 60 235 190 84 248 200 89 177 145 72 81 52 41 228 186 86 161 132 61 -+241 195 89 152 111 60 122 100 50 235 192 90 108 90 44 241 195 89 161 132 61 21 25 29 -+81 52 41 228 186 86 152 111 60 7 16 24 23 27 31 25 30 33 29 32 34 16 22 26 -+13 15 17 10 12 14 13 17 18 16 19 20 20 24 26 21 25 29 21 25 29 4 4 14 -+168 168 168 122 123 123 23 27 31 28 35 38 28 35 38 25 30 33 29 32 34 23 27 31 -+28 35 38 42 49 51 42 49 51 46 53 56 46 53 56 38 46 48 42 49 51 81 52 41 -+158 73 41 176 79 38 129 59 33 85 88 88 225 222 218 255 255 255 246 245 245 147 147 146 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+ -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 77 78 76 105 107 107 122 123 123 122 123 123 122 123 123 105 107 107 67 67 66 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 139 137 135 249 249 249 243 242 242 134 119 113 89 75 50 -+20 20 21 8 9 11 10 11 13 10 11 13 39 42 42 157 157 157 77 78 76 12 15 17 -+14 18 20 7 10 12 7 10 12 108 90 44 248 200 89 137 105 55 16 22 26 161 132 61 -+241 195 89 152 111 60 235 190 84 248 200 89 177 145 72 81 52 41 235 192 90 152 111 60 -+241 195 89 152 111 60 122 100 50 235 192 90 108 90 44 228 186 86 177 145 72 26 28 29 -+108 90 44 235 192 90 89 75 50 16 22 26 23 27 31 25 30 33 29 32 34 16 19 20 -+12 15 17 12 15 17 16 19 20 16 22 26 25 30 33 21 25 29 20 24 26 85 88 88 -+233 232 232 226 226 226 77 78 76 28 35 38 28 35 38 29 32 34 34 41 43 28 35 38 -+28 35 38 39 42 42 42 49 51 54 58 58 38 46 48 39 42 42 107 51 29 166 76 38 -+182 81 38 180 81 37 170 77 39 147 147 146 248 248 248 254 254 254 182 182 182 33 33 31 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+ -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 39 42 42 -+162 160 159 226 226 226 243 242 242 252 252 252 253 253 253 252 252 252 243 242 242 216 216 216 -+147 147 146 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 85 88 88 207 206 206 253 253 253 233 232 232 115 110 108 81 52 41 -+3 3 8 6 7 9 9 10 12 12 13 15 105 107 107 134 134 133 26 28 29 16 19 20 -+16 19 20 8 9 11 3 3 8 137 105 55 248 200 89 122 100 50 7 16 24 177 145 72 -+241 195 89 137 105 55 235 190 84 248 200 89 177 145 72 88 74 36 241 195 89 161 132 61 -+241 195 89 137 105 55 108 90 44 228 186 86 108 90 44 208 171 79 189 156 74 37 34 30 -+137 105 55 228 186 86 51 47 32 21 25 29 25 30 33 25 30 33 25 30 33 20 23 23 -+13 17 18 14 18 20 16 19 20 20 24 26 23 27 31 21 25 29 33 38 41 168 168 168 -+252 252 252 251 250 250 177 176 172 42 49 51 28 35 38 33 38 41 38 46 48 34 41 43 -+33 38 41 34 41 43 42 49 51 42 49 51 33 38 41 129 59 33 174 79 37 182 81 37 -+182 81 37 180 81 37 179 79 37 126 96 80 230 230 229 255 255 255 207 206 206 52 51 50 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+ -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 26 28 29 177 176 172 -+249 249 249 254 254 254 251 250 250 248 248 248 246 245 245 248 248 248 251 250 250 255 255 255 -+248 248 248 182 182 182 52 51 50 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 69 73 72 230 230 229 254 254 254 254 254 254 200 200 199 89 68 66 27 25 23 -+6 7 9 7 8 10 9 10 12 26 28 29 157 157 157 60 59 58 13 15 17 16 19 20 -+16 19 20 8 9 11 3 3 8 177 145 72 241 195 89 108 90 44 7 16 24 189 156 74 -+241 195 89 137 105 55 241 195 89 235 190 84 189 156 74 108 90 44 241 195 89 177 145 72 -+241 195 89 122 100 50 108 90 44 228 186 86 89 75 50 189 156 74 208 171 79 51 47 32 -+161 132 61 216 177 82 27 25 23 21 25 29 25 30 33 25 30 33 25 30 33 14 18 20 -+13 17 18 14 18 20 16 19 20 16 19 20 20 24 26 21 25 29 84 81 78 237 237 237 -+255 255 255 255 255 255 240 239 239 105 107 107 33 38 41 38 46 48 38 46 48 39 42 42 -+33 38 41 34 41 43 34 41 43 51 47 32 129 59 33 176 79 38 182 81 38 182 81 38 -+182 81 38 182 81 38 182 81 37 159 71 30 177 176 172 254 254 254 246 245 245 97 96 96 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+ -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 88 88 240 239 239 -+255 255 255 226 226 226 200 200 199 200 200 199 200 200 199 196 196 196 200 200 199 226 226 226 -+254 254 254 251 250 250 168 168 168 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 168 168 168 254 254 254 249 249 249 207 206 206 97 96 96 0 0 0 6 7 9 -+8 8 9 8 9 11 2 2 2 84 81 78 147 147 146 0 0 0 12 13 15 16 19 20 -+13 15 17 8 9 11 3 3 8 189 156 74 228 186 86 88 74 36 16 22 26 189 156 74 -+235 190 84 152 111 60 241 195 89 216 177 82 189 156 74 137 105 55 235 192 90 177 145 72 -+235 190 84 108 90 44 122 100 50 228 186 86 89 75 50 161 132 61 223 182 84 81 52 41 -+177 145 72 189 156 74 27 25 23 20 24 26 23 27 31 28 35 38 25 30 33 13 17 18 -+14 18 20 14 18 20 16 19 20 16 19 20 16 22 26 3 3 8 168 168 168 255 255 255 -+249 249 249 248 248 248 255 255 255 216 216 216 69 73 72 34 41 43 33 38 41 28 35 38 -+33 38 41 46 53 56 63 45 38 138 69 38 179 80 38 182 81 38 182 81 37 182 81 38 -+182 81 38 182 81 38 182 81 38 179 79 37 126 96 80 243 242 242 255 255 255 190 190 190 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+ -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 134 134 133 255 255 255 -+249 249 249 168 168 168 247 247 246 255 255 255 255 255 255 254 254 254 246 245 245 196 196 196 -+220 219 215 255 255 255 246 245 245 122 123 123 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 162 160 159 254 254 254 252 252 252 226 226 226 200 200 199 147 147 146 20 23 23 -+6 7 9 7 8 10 3 3 6 66 65 61 139 137 135 0 0 0 13 17 18 16 19 20 -+12 15 17 8 9 11 2 2 2 208 171 79 223 182 84 88 74 36 33 33 31 200 163 79 -+223 182 84 161 132 61 235 192 90 208 171 79 200 163 79 161 132 61 235 190 84 189 156 74 -+235 190 84 108 90 44 122 100 50 228 186 86 89 75 50 137 105 55 235 192 90 88 74 36 -+208 171 79 161 132 61 20 23 23 20 24 26 23 27 31 29 32 34 21 25 29 13 17 18 -+14 18 20 12 15 17 14 18 20 16 19 20 13 17 18 97 96 96 240 239 239 255 255 255 -+200 200 199 182 182 182 253 253 253 252 252 252 179 179 176 38 46 48 33 38 41 33 38 41 -+38 46 48 63 45 38 148 72 46 179 80 38 182 81 37 182 81 38 182 81 38 182 81 37 -+182 81 38 182 81 38 182 81 38 182 81 38 158 73 41 190 190 190 255 255 255 237 237 237 -+67 67 66 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+ -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 162 160 159 255 255 255 -+237 237 237 182 182 182 255 255 255 246 245 245 216 216 216 237 237 237 254 254 254 253 253 253 -+190 190 190 233 232 232 255 255 255 216 216 216 52 51 50 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 64 64 61 225 222 218 252 252 252 255 255 255 255 255 255 251 250 250 177 176 172 -+60 59 58 5 6 8 7 8 10 20 20 21 157 157 157 13 15 17 13 17 18 16 19 20 -+12 13 15 7 8 10 2 2 2 228 186 86 216 177 82 63 45 38 51 47 32 208 171 79 -+216 177 82 161 132 61 235 192 90 200 163 79 208 171 79 177 145 72 228 186 86 189 156 74 -+235 190 84 89 75 50 137 105 55 228 186 86 88 74 36 122 100 50 241 195 89 108 90 44 -+223 182 84 137 105 55 16 19 20 20 23 23 21 25 29 23 27 31 16 19 20 13 17 18 -+13 17 18 13 15 17 13 15 17 20 20 21 26 28 29 182 182 182 253 253 253 245 244 244 -+122 123 123 60 59 58 207 206 206 254 254 254 237 237 237 115 110 108 33 38 41 34 41 43 -+81 52 41 158 73 41 182 81 38 182 81 37 182 81 38 182 81 38 182 81 38 182 81 37 -+182 81 37 182 81 38 182 81 38 182 81 38 179 81 40 146 134 128 248 248 248 251 250 250 -+162 160 159 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+ -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 168 168 168 255 255 255 -+230 230 229 196 196 196 255 255 255 216 216 216 0 0 0 85 88 88 213 211 211 255 255 255 -+247 247 246 196 196 196 251 250 250 247 247 246 139 137 135 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 77 78 76 162 160 159 196 196 196 230 230 229 254 254 254 252 252 252 -+200 200 199 84 81 78 0 0 0 17 18 16 139 137 135 97 96 96 13 17 18 16 19 20 -+10 11 13 6 7 9 27 25 23 235 192 90 208 171 79 37 34 30 51 47 32 208 171 79 -+208 171 79 161 132 61 228 186 86 189 156 74 208 171 79 189 156 74 223 182 84 200 163 79 -+235 190 84 89 75 50 152 111 60 228 186 86 88 74 36 108 90 44 235 192 90 152 111 60 -+228 186 86 122 100 50 16 22 26 21 25 29 23 27 31 23 27 31 16 19 20 12 13 15 -+12 13 15 13 15 17 13 17 18 16 19 20 85 88 88 230 230 229 254 254 254 200 200 199 -+33 33 31 0 0 0 105 107 107 243 242 242 255 255 255 196 196 196 21 25 29 81 52 41 -+158 73 41 182 81 37 182 81 38 182 81 38 182 81 38 182 81 38 182 81 38 182 81 37 -+182 81 38 182 81 37 182 81 37 182 81 38 180 81 37 150 99 58 225 222 218 255 255 255 -+216 216 216 64 64 61 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+ -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 168 168 168 255 255 255 -+233 232 232 196 196 196 255 255 255 213 211 211 0 0 0 0 0 0 105 107 107 233 232 232 -+254 254 254 213 211 211 237 237 237 255 255 255 190 190 190 39 42 42 0 0 0 0 0 0 -+0 0 0 0 0 0 13 13 13 26 28 29 39 42 42 52 51 50 64 64 61 69 73 72 -+85 88 88 122 123 123 162 160 159 200 200 199 216 216 216 240 239 239 255 255 255 255 255 255 -+254 254 254 233 232 232 122 123 123 33 33 31 97 96 96 139 137 135 28 30 31 13 15 17 -+9 10 12 5 6 8 81 52 41 241 195 89 189 156 74 14 18 20 63 45 38 216 177 82 -+200 163 79 177 145 72 216 177 82 177 145 72 216 177 82 200 163 79 216 177 82 200 163 79 -+235 190 84 89 75 50 161 132 61 223 182 84 81 52 41 88 74 36 223 182 84 189 156 74 -+228 186 86 108 90 44 23 27 31 23 27 31 29 32 34 25 30 33 14 18 20 13 15 17 -+12 13 15 13 15 17 13 17 18 26 28 29 177 176 172 254 254 254 247 247 246 134 131 128 -+0 0 0 0 0 0 0 0 0 192 189 185 255 255 255 248 248 248 157 157 157 129 59 33 -+179 80 38 180 81 37 182 81 38 182 81 38 182 81 38 182 81 38 182 81 38 182 81 37 -+182 81 37 182 81 38 182 81 38 182 81 38 182 81 37 166 76 38 182 182 182 253 253 253 -+246 245 245 122 123 123 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+ -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 147 147 146 255 255 255 -+240 239 239 182 182 182 255 255 255 230 230 229 0 0 0 0 0 0 13 13 13 182 182 182 -+253 253 253 233 232 232 207 206 206 255 255 255 230 230 229 67 67 66 52 51 50 97 96 96 -+119 117 113 147 147 146 168 168 168 192 189 185 196 196 196 213 211 211 226 226 226 237 237 237 -+247 247 246 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 254 254 254 249 249 249 -+237 237 237 226 226 226 207 206 206 122 123 123 84 81 78 147 147 146 69 73 72 10 11 13 -+9 10 12 3 3 8 108 90 44 241 195 89 177 145 72 7 16 24 81 52 41 216 177 82 -+200 163 79 189 156 74 208 171 79 177 145 72 223 182 84 208 171 79 216 177 82 200 163 79 -+235 190 84 81 52 41 177 145 72 223 182 84 81 52 41 51 47 32 208 171 79 228 186 86 -+223 182 84 88 74 36 25 30 33 25 30 33 28 35 38 23 27 31 13 17 18 12 15 17 -+16 19 20 12 15 17 6 7 9 105 107 107 243 242 242 255 255 255 200 200 199 0 0 0 -+0 0 0 0 0 0 0 0 0 97 96 96 237 237 237 255 255 255 237 237 237 105 107 107 -+166 76 38 182 81 37 182 81 37 182 81 38 182 81 38 182 81 38 182 81 38 182 81 38 -+182 81 38 182 81 38 182 81 38 182 81 38 182 81 38 175 79 35 126 96 80 243 242 242 -+255 255 255 190 190 190 13 13 13 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+ -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 122 123 123 255 255 255 -+252 252 252 162 160 159 255 255 255 246 245 245 97 96 96 0 0 0 0 0 0 134 131 128 -+249 249 249 248 248 248 168 168 168 254 254 254 251 250 250 225 222 218 230 230 229 237 237 237 -+243 242 242 251 250 250 253 253 253 255 255 255 255 255 255 255 255 255 254 254 254 254 254 254 -+254 254 254 251 250 250 240 239 239 220 219 215 200 200 199 182 182 182 167 162 159 168 168 168 -+182 182 182 203 196 190 206 202 198 214 212 206 206 202 198 157 157 157 57 54 50 9 10 12 -+8 8 9 3 3 6 122 100 50 241 195 89 177 145 72 7 16 24 88 74 36 223 182 84 -+189 156 74 189 156 74 200 163 79 161 132 61 235 192 90 216 177 82 208 171 79 200 163 79 -+228 186 86 63 45 38 177 145 72 216 177 82 63 45 38 20 20 21 200 163 79 248 200 89 -+216 177 82 63 45 38 25 30 33 28 35 38 33 38 41 25 30 33 13 17 18 13 17 18 -+16 19 20 12 15 17 0 0 0 182 182 182 255 255 255 240 239 239 97 96 96 0 0 0 -+0 0 0 0 0 0 0 0 0 20 23 23 147 147 146 245 244 244 253 253 253 179 179 176 -+107 75 50 179 81 40 180 81 37 179 81 36 180 81 37 180 81 37 180 81 37 182 81 38 -+182 81 37 182 81 37 182 81 38 182 81 38 182 81 37 182 81 37 147 67 29 182 182 182 -+255 255 255 246 245 245 97 96 96 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+ -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 84 81 78 243 242 242 -+254 254 254 190 190 190 240 239 239 252 252 252 182 182 182 97 96 96 134 131 128 182 182 182 -+251 250 250 255 255 255 168 168 168 246 245 245 255 255 255 255 255 255 255 255 255 251 250 250 -+246 245 245 240 239 239 237 237 237 226 226 226 220 219 215 213 211 211 190 190 190 179 179 176 -+162 160 159 157 157 157 162 160 159 177 176 172 203 196 190 214 212 206 219 214 205 223 218 211 -+226 220 210 226 220 210 226 222 213 225 221 213 226 222 213 230 225 217 119 117 113 2 2 2 -+6 7 9 3 3 6 152 111 60 241 195 89 161 132 61 7 16 24 88 74 36 223 182 84 -+189 156 74 200 163 79 189 156 74 152 111 60 241 195 89 216 177 82 208 171 79 208 171 79 -+228 186 86 63 45 38 189 156 74 216 177 82 51 47 32 5 12 15 177 145 72 248 200 89 -+200 163 79 37 34 30 25 30 33 28 35 38 29 32 34 21 25 29 13 15 17 12 15 17 -+13 17 18 12 15 17 12 13 14 213 211 211 255 255 255 207 206 206 52 51 50 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 26 28 29 207 206 206 255 255 255 243 242 242 -+119 117 113 147 67 29 180 81 37 179 81 36 179 81 36 180 81 37 180 81 37 179 81 36 -+179 81 36 180 81 37 182 81 38 182 81 38 180 81 37 182 81 37 178 79 39 126 96 80 -+243 242 242 254 254 254 182 182 182 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+ -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 52 51 50 207 206 206 -+255 255 255 226 226 226 207 206 206 254 254 254 245 244 244 237 237 237 251 250 250 255 255 255 -+255 255 255 255 255 255 182 182 182 216 216 216 225 222 218 200 200 199 179 179 176 177 176 172 -+177 176 172 177 176 172 177 170 162 177 170 162 177 176 172 197 182 169 203 196 190 206 202 198 -+219 214 205 221 217 205 222 218 209 222 218 209 226 220 210 225 221 213 226 222 213 226 222 213 -+229 225 217 229 225 217 229 225 217 225 221 213 225 221 213 229 225 217 157 157 157 0 0 0 -+6 7 9 3 3 6 161 132 61 241 195 89 137 105 55 7 16 24 88 74 36 228 186 86 -+177 145 72 208 171 79 189 156 74 137 105 55 241 195 89 223 182 84 208 171 79 208 171 79 -+228 186 86 51 47 32 189 156 74 216 177 82 51 47 32 7 16 24 152 111 60 248 200 89 -+189 156 74 7 16 24 23 27 31 28 35 38 25 30 33 20 24 26 13 15 17 10 12 14 -+14 18 20 20 23 23 69 73 72 233 232 232 254 254 254 182 182 182 26 28 29 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 105 107 107 237 237 237 255 255 255 -+220 219 215 89 68 66 166 76 38 179 81 36 179 81 36 179 80 38 180 81 37 180 81 37 -+180 81 37 180 81 37 182 81 38 182 81 37 180 81 37 180 81 37 182 81 38 145 89 57 -+196 196 196 255 255 255 233 232 232 69 73 72 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+ -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 52 51 50 182 182 182 -+253 253 253 251 250 250 182 182 182 243 242 242 255 255 255 253 253 253 248 248 248 237 237 237 -+213 211 211 177 176 172 115 110 108 115 110 108 177 176 172 192 189 185 206 202 198 206 202 198 -+206 202 198 206 202 198 220 209 198 219 214 205 219 214 205 221 217 205 221 217 205 222 218 209 -+226 220 210 223 218 211 223 218 211 225 221 213 226 222 213 226 222 213 226 222 213 226 222 213 -+229 225 217 226 222 213 229 225 217 226 222 213 226 222 213 225 221 213 162 160 159 0 0 0 -+6 7 9 3 3 6 177 145 72 241 195 89 122 100 50 7 16 24 88 74 36 228 186 86 -+177 145 72 208 171 79 177 145 72 122 100 50 241 195 89 228 186 86 208 171 79 208 171 79 -+228 186 86 51 47 32 189 156 74 208 171 79 51 47 32 14 18 20 108 90 44 241 195 89 -+161 132 61 16 22 26 29 32 34 28 35 38 23 27 31 20 24 26 13 15 17 12 13 15 -+16 19 20 16 22 26 119 117 113 243 242 242 251 250 250 147 147 146 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 13 13 13 162 160 159 252 252 252 -+252 252 252 190 190 190 107 75 50 176 79 38 179 81 36 179 80 38 179 80 38 180 81 37 -+180 81 37 179 80 38 180 81 37 180 81 37 179 81 36 179 81 36 180 81 37 174 79 37 -+154 142 136 248 248 248 247 247 246 139 137 135 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+ -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 13 13 13 182 182 182 252 252 252 -+255 255 255 255 255 255 207 206 206 177 176 172 207 206 206 190 190 190 167 162 159 157 157 157 -+177 176 172 203 196 190 192 189 185 192 189 185 220 209 198 220 209 198 219 214 205 219 214 205 -+219 214 205 221 217 205 221 217 205 221 217 205 221 217 205 221 217 205 222 218 209 222 218 209 -+223 218 211 226 220 210 226 220 210 225 221 213 226 222 213 226 222 213 225 221 213 226 222 213 -+226 222 213 229 225 217 229 225 217 229 225 217 230 225 217 230 225 217 177 170 162 0 0 0 -+5 6 8 3 3 8 189 156 74 241 195 89 108 90 44 12 15 17 88 74 36 235 190 84 -+177 145 72 216 177 82 177 145 72 122 100 50 241 195 89 241 195 89 208 171 79 208 171 79 -+228 186 86 37 34 30 200 163 79 208 171 79 51 47 32 16 22 26 89 75 50 241 195 89 -+177 145 72 7 16 24 28 35 38 28 35 38 23 27 31 16 19 20 13 17 18 13 17 18 -+16 22 26 21 25 29 147 147 146 249 249 249 243 242 242 119 117 113 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 63 62 61 200 200 199 -+254 254 254 246 245 245 147 147 146 129 59 33 179 80 38 179 80 38 180 81 37 180 81 37 -+180 81 37 179 81 36 180 81 37 180 81 37 179 81 36 179 81 36 180 81 37 179 81 36 -+126 96 80 233 232 232 255 255 255 196 196 196 39 42 42 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+ -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 97 96 96 246 245 245 254 254 254 -+225 222 218 162 160 159 139 137 135 167 162 159 192 189 185 203 196 190 206 202 198 220 209 198 -+219 214 205 219 214 205 221 217 205 219 214 205 219 214 205 221 217 205 219 214 205 219 214 205 -+219 214 205 221 217 205 221 217 205 221 217 205 221 217 205 221 217 205 222 218 209 223 218 211 -+223 218 211 226 220 210 226 220 210 225 221 213 225 221 213 225 221 213 226 222 213 229 225 217 -+226 222 213 229 225 217 229 225 217 230 225 217 231 227 218 230 225 217 192 189 185 0 0 0 -+5 6 8 4 4 14 189 156 74 241 195 89 88 74 36 13 17 18 88 74 36 235 190 84 -+161 132 61 223 182 84 177 145 72 108 90 44 241 195 89 248 200 89 208 171 79 216 177 82 -+228 186 86 27 25 23 200 163 79 208 171 79 51 47 32 16 22 26 122 100 50 248 200 89 -+200 163 79 27 25 23 28 35 38 29 32 34 20 24 26 14 18 20 14 18 20 16 19 20 -+20 23 23 28 30 31 177 176 172 254 254 254 233 232 232 64 64 61 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 88 88 -+230 230 229 255 255 255 240 239 239 119 117 113 159 71 30 179 81 36 179 81 36 180 81 37 -+180 81 37 180 81 37 179 80 38 179 80 38 179 80 38 180 81 37 179 81 36 179 81 36 -+159 71 30 192 189 185 255 255 255 240 239 239 85 88 88 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+ -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 134 134 133 249 249 249 245 244 244 -+122 123 123 179 179 176 147 147 146 214 212 206 219 214 205 219 214 205 219 214 205 221 217 205 -+220 215 207 221 217 205 222 218 209 219 214 205 221 217 205 221 217 205 219 214 205 219 214 205 -+221 217 205 221 217 205 219 214 205 221 217 205 222 218 209 222 218 209 222 218 209 223 218 211 -+226 220 210 223 218 211 226 220 210 226 220 210 226 222 213 226 222 213 226 222 213 226 222 213 -+229 225 217 229 225 217 229 225 217 230 225 217 230 225 217 230 225 217 192 189 185 0 0 0 -+3 3 6 27 25 23 200 163 79 241 195 89 63 45 38 14 18 20 88 74 36 235 190 84 -+161 132 61 223 182 84 161 132 61 108 90 44 235 190 84 248 200 89 208 171 79 216 177 82 -+223 182 84 5 12 15 200 163 79 208 171 79 51 47 32 7 16 24 161 132 61 248 200 89 -+216 177 82 63 45 38 23 27 31 23 27 31 20 23 23 16 19 20 14 18 20 13 17 18 -+16 19 20 52 51 50 206 202 198 255 255 255 216 216 216 20 23 23 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+119 117 113 240 239 239 255 255 255 230 230 229 105 88 81 166 76 38 179 80 38 179 80 38 -+179 80 38 179 81 40 179 80 38 179 80 38 179 79 37 179 81 36 180 81 37 179 81 36 -+179 79 37 126 96 80 246 245 245 255 255 255 182 182 182 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+ -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 105 107 107 248 248 248 252 252 252 -+139 137 135 206 202 198 147 147 146 219 214 205 222 218 209 222 218 209 222 218 209 222 218 209 -+222 218 209 222 218 209 223 218 211 221 217 205 222 218 209 221 217 205 221 217 205 221 217 205 -+221 217 205 221 217 205 221 217 205 221 217 205 222 218 209 222 218 209 222 218 209 222 218 209 -+223 218 211 223 218 211 226 220 210 225 221 213 225 221 213 226 222 213 226 222 213 226 222 213 -+229 225 217 226 222 213 229 225 217 230 225 217 230 225 217 230 225 217 206 202 198 0 0 0 -+5 6 8 49 32 29 208 171 79 241 195 89 37 34 30 12 15 17 108 90 44 235 192 90 -+161 132 61 228 186 86 161 132 61 88 74 36 228 186 86 248 200 89 208 171 79 223 182 84 -+223 182 84 4 4 14 189 156 74 216 177 82 63 45 38 5 12 15 177 145 72 248 200 89 -+228 186 86 88 74 36 23 27 31 23 27 31 20 23 23 12 15 17 13 17 18 14 18 20 -+16 19 20 69 73 72 233 232 232 254 254 254 182 182 182 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+13 13 13 147 147 146 246 245 245 254 253 253 207 206 206 107 75 50 170 77 39 180 81 37 -+179 80 38 179 80 38 179 80 38 179 80 38 179 80 38 180 81 37 180 81 37 179 81 36 -+182 81 37 148 72 46 190 190 190 255 255 255 237 237 237 60 59 58 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+ -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 52 51 50 237 237 237 255 255 255 -+167 162 159 203 196 190 147 147 146 214 212 206 223 218 211 223 218 211 223 218 211 226 220 210 -+226 220 210 226 220 210 226 220 210 222 218 209 223 218 211 222 218 209 221 217 205 221 217 205 -+221 217 205 221 217 205 221 217 205 221 217 205 222 218 209 222 218 209 222 218 209 222 218 209 -+223 218 211 223 218 211 223 218 211 226 220 210 226 222 213 226 222 213 226 222 213 225 221 213 -+226 222 213 226 222 213 226 222 213 230 225 217 231 227 218 230 225 217 214 212 206 0 0 0 -+5 6 8 51 47 32 208 171 79 235 190 84 12 15 17 12 13 15 108 90 44 235 192 90 -+161 132 61 228 186 86 161 132 61 88 74 36 223 182 84 248 200 89 216 177 82 228 186 86 -+223 182 84 3 3 8 189 156 74 216 177 82 63 45 38 20 20 21 189 156 74 228 186 86 -+235 192 90 108 90 44 23 27 31 21 25 29 20 23 23 12 15 17 12 15 17 14 18 20 -+12 15 17 119 117 113 254 254 254 252 252 252 119 117 113 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+13 13 13 85 88 88 226 226 226 255 255 255 254 254 254 190 190 190 107 51 29 174 79 37 -+179 80 38 179 80 38 179 80 38 179 80 38 179 80 38 179 81 36 179 81 36 179 81 36 -+180 81 37 178 79 39 146 134 128 248 248 248 251 250 250 157 157 157 20 23 23 13 13 13 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+ -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 216 216 216 255 255 255 -+200 200 199 177 176 172 162 160 159 192 189 185 226 220 210 222 218 209 223 218 211 226 220 210 -+226 220 210 226 220 210 226 220 210 223 218 211 223 218 211 222 218 209 221 217 205 222 218 209 -+221 217 205 221 217 205 221 217 205 221 217 205 221 217 205 221 217 205 222 218 209 223 218 211 -+226 220 210 226 220 210 226 220 210 225 221 213 225 221 213 225 221 213 226 222 213 226 222 213 -+226 222 213 226 222 213 229 225 217 230 225 217 229 225 217 229 225 217 206 202 198 0 0 0 -+6 7 9 63 45 38 216 177 82 228 186 86 4 4 14 12 13 15 108 90 44 241 195 89 -+152 111 60 228 186 86 161 132 61 63 45 38 216 177 82 248 200 89 216 177 82 228 186 86 -+223 182 84 4 4 14 189 156 74 223 182 84 81 52 41 51 47 32 208 171 79 200 163 79 -+228 186 86 152 111 60 25 30 33 21 25 29 16 19 20 16 19 20 16 19 20 14 18 20 -+0 0 0 182 182 182 255 255 255 233 232 232 33 33 31 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+85 88 88 225 222 218 254 254 254 254 254 254 230 230 229 192 189 185 105 88 81 166 76 38 -+179 79 37 179 80 38 179 80 38 179 80 38 179 80 38 180 81 37 179 81 36 180 81 37 -+180 81 37 180 81 37 145 89 57 216 216 216 255 255 255 233 232 232 182 182 182 162 160 159 -+85 88 88 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+ -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 182 182 182 255 255 255 -+230 230 229 139 137 135 192 189 185 157 157 157 225 221 213 223 218 211 226 220 210 226 220 210 -+225 221 213 226 220 210 226 220 210 223 218 211 223 218 211 226 220 210 226 220 210 225 221 213 -+226 220 210 221 217 205 221 217 205 221 217 205 221 217 205 222 218 209 222 218 209 223 218 211 -+223 218 211 226 220 210 226 220 210 226 220 210 225 221 213 225 221 213 225 221 213 226 222 213 -+226 222 213 226 222 213 226 222 213 229 225 217 229 225 217 229 225 217 177 170 162 0 0 0 -+8 8 9 81 52 41 216 177 82 216 177 82 4 4 14 12 13 15 108 90 44 241 195 89 -+152 111 60 228 186 86 161 132 61 49 32 29 208 171 79 248 200 89 216 177 82 223 182 84 -+223 182 84 27 25 23 177 145 72 228 186 86 88 74 36 81 52 41 223 182 84 161 132 61 -+208 171 79 189 156 74 27 25 23 20 23 23 13 15 17 13 17 18 13 17 18 13 17 18 -+0 0 0 233 232 232 255 255 255 190 190 190 13 13 13 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+177 176 172 255 255 255 251 250 250 192 189 185 166 113 90 166 76 38 173 77 35 179 79 37 -+178 79 39 179 80 38 179 80 38 179 80 38 179 80 38 179 79 37 179 81 36 179 81 36 -+179 81 36 180 81 37 166 76 38 147 147 146 249 249 249 255 255 255 255 255 255 252 252 252 -+233 232 232 134 131 128 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+ -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 122 123 123 254 254 254 -+252 252 252 139 137 135 206 202 198 122 123 123 226 222 213 223 218 211 226 220 210 226 220 210 -+225 221 213 225 221 213 226 220 210 223 218 211 225 221 213 214 212 206 192 189 185 214 212 206 -+222 218 209 221 217 205 221 217 205 221 217 205 221 217 205 222 218 209 222 218 209 222 218 209 -+222 218 209 226 220 210 226 220 210 223 218 211 226 220 210 225 221 213 225 221 213 225 221 213 -+226 222 213 226 222 213 226 222 213 226 222 213 226 222 213 226 222 213 97 96 96 2 2 2 -+10 11 13 88 74 36 223 182 84 216 177 82 3 3 8 12 13 14 108 90 44 241 195 89 -+152 111 60 228 186 86 161 132 61 27 25 23 200 163 79 248 200 89 223 182 84 216 177 82 -+228 186 86 51 47 32 161 132 61 228 186 86 89 75 50 88 74 36 228 186 86 137 105 55 -+177 145 72 216 177 82 27 25 23 20 23 23 13 15 17 12 13 15 12 13 15 10 11 13 -+52 51 50 243 242 242 255 255 255 157 157 157 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+182 182 182 255 255 255 243 242 242 146 134 128 145 89 57 158 73 41 158 73 41 138 69 38 -+166 76 38 179 79 37 179 79 37 179 80 38 179 80 38 179 80 38 179 80 38 180 81 37 -+179 81 36 179 80 38 178 79 39 129 59 33 177 170 162 225 222 218 226 226 226 252 252 252 -+255 255 255 233 232 232 67 67 66 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+ -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 78 76 237 237 237 -+254 254 254 182 182 182 192 189 185 139 137 135 214 212 206 226 220 210 225 221 213 225 221 213 -+225 221 213 225 221 213 226 220 210 219 214 205 214 212 206 115 110 108 0 0 0 182 182 182 -+214 212 206 167 162 159 182 182 182 222 218 209 221 217 205 222 218 209 222 218 209 222 218 209 -+222 218 209 223 218 211 226 220 210 226 220 210 226 220 210 226 220 210 226 220 210 226 222 213 -+225 221 213 225 221 213 226 222 213 226 222 213 226 222 213 203 196 190 57 54 50 5 6 8 -+12 13 15 88 74 36 228 186 86 208 171 79 3 3 8 10 12 14 108 90 44 241 195 89 -+152 111 60 228 186 86 161 132 61 4 4 14 177 145 72 248 200 89 223 182 84 208 171 79 -+235 190 84 88 74 36 161 132 61 235 190 84 89 75 50 108 90 44 235 192 90 88 74 36 -+161 132 61 241 195 89 81 52 41 14 18 20 9 10 12 9 10 12 10 12 14 12 13 15 -+0 0 0 233 232 232 255 255 255 179 179 176 13 13 13 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+139 137 135 253 253 253 255 255 255 237 237 237 115 110 108 107 51 29 147 67 29 174 79 37 -+180 81 37 179 80 38 179 79 37 179 80 38 179 81 40 179 80 38 179 80 38 179 80 38 -+179 81 36 179 80 38 180 81 37 179 81 40 129 59 33 42 16 9 97 96 96 207 206 206 -+254 254 254 248 248 248 122 123 123 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+ -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 47 49 48 207 206 206 -+255 255 255 220 219 215 167 162 159 177 176 172 192 189 185 225 221 213 225 221 213 225 221 213 -+226 220 210 223 218 211 182 182 182 115 110 108 147 147 146 33 38 41 69 68 64 203 196 190 -+139 137 135 27 25 23 84 81 78 214 212 206 220 215 207 221 217 205 222 218 209 222 218 209 -+222 218 209 222 218 209 222 218 209 226 220 210 225 221 213 226 220 210 225 221 213 226 222 213 -+225 221 213 226 222 213 226 222 213 226 222 213 225 221 213 147 147 146 20 20 21 5 6 8 -+10 12 14 88 74 36 228 186 86 200 163 79 3 3 8 10 12 14 108 90 44 241 195 89 -+152 111 60 228 186 86 161 132 61 4 4 14 161 132 61 248 200 89 228 186 86 200 163 79 -+235 190 84 88 74 36 152 111 60 241 195 89 108 90 44 122 100 50 235 192 90 81 52 41 -+122 100 50 235 192 90 137 105 55 5 12 15 9 10 12 9 10 12 12 13 15 16 19 20 -+0 0 0 213 211 211 255 255 255 200 200 199 13 13 13 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 88 88 -+230 230 229 255 255 255 248 248 248 157 157 157 129 59 33 170 77 39 176 79 38 176 79 38 -+179 80 38 179 79 37 179 80 38 179 80 38 179 80 38 179 80 38 179 80 38 179 80 38 -+179 81 36 179 79 37 180 81 37 170 77 39 138 69 38 81 52 41 147 147 146 247 247 246 -+255 255 255 220 219 215 33 33 31 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+ -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 13 13 13 168 168 168 -+253 253 253 237 237 237 157 157 157 206 202 198 157 157 157 226 220 210 225 221 213 225 221 213 -+223 218 211 192 189 185 69 68 64 52 51 50 47 49 48 17 18 16 139 137 135 167 162 159 -+10 10 10 0 0 0 139 137 135 221 217 205 221 217 205 220 215 207 221 217 205 222 218 209 -+222 218 209 221 217 205 221 217 205 222 218 209 223 218 211 223 218 211 223 218 211 226 220 210 -+226 220 210 225 221 213 226 222 213 226 222 213 214 212 206 97 96 96 5 6 8 5 6 8 -+10 11 13 88 74 36 235 190 84 200 163 79 3 3 8 12 13 15 108 90 44 241 195 89 -+137 105 55 223 182 84 161 132 61 7 10 12 152 111 60 248 200 89 235 190 84 189 156 74 -+235 190 84 108 90 44 137 105 55 241 195 89 108 90 44 137 105 55 228 186 86 63 45 38 -+63 45 38 228 186 86 189 156 74 4 4 14 9 10 12 10 12 14 13 15 17 13 15 17 -+0 0 0 179 179 176 255 255 255 233 232 232 33 33 31 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 88 88 216 216 216 -+254 254 254 247 247 246 162 160 159 129 59 33 174 79 37 176 79 38 176 79 38 179 80 38 -+179 79 37 179 80 38 179 80 38 179 80 38 179 80 38 179 80 38 179 80 38 179 81 40 -+179 81 40 166 76 38 138 69 38 107 51 29 105 88 81 182 182 182 247 247 246 255 255 255 -+237 237 237 122 123 123 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+ -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 134 134 133 -+246 245 245 246 245 245 167 162 159 214 212 206 147 147 146 219 214 205 226 222 213 225 221 213 -+219 214 205 105 107 107 13 13 13 63 62 61 17 18 16 57 54 50 177 170 162 84 81 78 -+3 3 6 63 62 61 206 202 198 214 212 206 221 217 205 219 214 205 219 214 205 221 217 205 -+221 217 205 221 217 205 221 217 205 221 217 205 221 217 205 222 218 209 222 218 209 222 218 209 -+223 218 211 225 221 213 226 222 213 225 221 213 182 182 182 13 13 13 6 7 9 5 6 8 -+10 12 14 88 74 36 235 190 84 189 156 74 3 3 8 10 12 14 108 90 44 241 195 89 -+137 105 55 223 182 84 177 145 72 10 11 13 122 100 50 248 200 89 235 190 84 177 145 72 -+241 195 89 122 100 50 122 100 50 241 195 89 108 90 44 161 132 61 216 177 82 51 47 32 -+3 3 8 200 163 79 223 182 84 37 34 30 10 11 13 10 11 13 13 15 17 13 15 17 -+10 12 14 134 134 133 255 255 255 246 245 245 67 67 66 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 39 42 42 213 211 211 254 254 254 -+251 250 250 177 176 172 137 73 51 174 79 37 179 80 38 179 80 38 179 79 37 179 80 38 -+179 80 38 179 80 38 179 80 38 179 80 38 179 80 38 179 80 38 179 80 38 179 79 37 -+180 81 37 176 79 38 147 67 29 42 16 9 157 157 157 243 242 242 255 255 255 240 239 239 -+134 131 128 13 13 13 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+ -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 97 96 96 -+237 237 237 251 250 250 167 162 159 214 212 206 147 147 146 219 214 205 226 222 213 226 222 213 -+167 162 159 0 0 0 52 51 50 33 33 31 0 0 0 115 110 108 147 147 146 2 2 2 -+17 18 16 134 131 128 97 96 96 51 47 44 147 147 146 219 214 205 221 217 205 222 218 209 -+221 217 205 221 217 205 222 218 209 222 218 209 223 218 211 223 218 211 223 218 211 226 220 210 -+225 221 213 226 222 213 226 222 213 225 221 213 115 110 108 0 0 0 6 7 9 3 3 6 -+12 13 14 108 90 44 235 190 84 189 156 74 3 3 8 10 11 13 108 90 44 241 195 89 -+137 105 55 216 177 82 177 145 72 13 13 13 88 74 36 241 195 89 241 195 89 161 132 61 -+241 195 89 137 105 55 108 90 44 241 195 89 122 100 50 189 156 74 200 163 79 49 32 29 -+3 3 8 161 132 61 235 190 84 108 90 44 12 13 15 12 13 14 12 13 15 13 15 17 -+12 15 17 97 96 96 253 253 253 252 252 252 105 107 107 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 33 33 31 177 176 172 254 254 254 252 252 252 -+179 179 176 129 59 33 174 79 37 179 81 36 179 79 37 179 80 38 179 80 38 179 80 38 -+179 80 38 179 80 38 179 80 38 179 80 38 179 80 38 179 79 37 179 80 38 179 80 38 -+179 80 38 179 80 38 158 73 41 105 88 81 162 160 159 237 237 237 255 255 255 216 216 216 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+ -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 63 62 61 -+230 230 229 255 255 255 177 176 172 206 202 198 162 160 159 214 212 206 225 221 213 214 212 206 -+84 81 78 6 7 9 39 42 42 5 6 8 0 0 0 147 147 146 52 51 50 3 3 6 -+63 62 61 97 96 96 17 18 16 26 28 29 52 51 50 206 202 198 220 215 207 221 217 205 -+221 217 205 221 217 205 222 218 209 223 218 211 226 220 210 225 221 213 225 221 213 226 222 213 -+226 222 213 220 215 207 214 212 206 192 189 185 33 33 31 5 6 8 5 6 8 3 3 6 -+10 12 14 108 90 44 235 190 84 177 145 72 3 3 8 7 10 12 108 90 44 241 195 89 -+137 105 55 216 177 82 177 145 72 17 18 16 37 34 30 235 192 90 241 195 89 152 111 60 -+241 195 89 137 105 55 108 90 44 241 195 89 122 100 50 208 171 79 177 145 72 33 33 31 -+7 10 12 88 74 36 241 195 89 161 132 61 13 13 13 9 10 12 12 15 17 13 17 18 -+13 17 18 84 81 78 243 242 242 254 254 254 147 147 146 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 13 13 13 157 157 157 247 247 246 254 254 254 206 202 198 -+123 75 52 174 79 37 175 79 35 176 79 38 176 79 38 176 79 38 179 80 38 179 79 37 -+179 79 37 179 79 37 179 80 38 179 80 38 179 80 38 179 80 38 179 80 38 180 81 37 -+176 79 38 129 59 33 147 147 146 225 222 218 254 254 254 255 255 255 248 248 248 147 147 146 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+ -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+225 222 218 255 255 255 190 190 190 192 189 185 167 162 159 214 212 206 225 221 213 177 170 162 -+33 38 41 39 42 42 47 49 48 5 6 8 28 30 31 97 96 96 0 0 0 13 13 13 -+97 96 96 52 51 50 7 8 10 69 73 72 85 88 88 219 214 205 219 214 205 219 214 205 -+214 212 206 219 214 205 206 202 198 192 189 185 179 179 176 167 162 159 147 147 146 122 123 123 -+97 96 96 69 68 64 68 65 63 67 67 66 8 8 9 5 6 8 5 6 8 5 6 8 -+12 13 15 108 90 44 241 195 89 177 145 72 3 3 8 10 11 13 108 90 44 241 195 89 -+137 105 55 208 171 79 189 156 74 17 18 16 2 2 2 223 182 84 248 200 89 137 105 55 -+248 200 89 152 111 60 107 75 50 241 195 89 122 100 50 223 182 84 161 132 61 20 20 21 -+14 18 20 27 25 23 216 177 82 189 156 74 37 34 30 8 9 11 12 13 15 12 13 15 -+13 17 18 64 67 67 225 222 218 255 255 255 190 190 190 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 13 13 13 147 147 146 247 247 246 255 255 255 226 226 226 126 96 80 -+170 77 39 175 79 35 175 79 35 175 79 35 176 79 38 176 79 38 179 79 37 179 79 37 -+179 79 37 179 80 38 179 80 38 179 80 38 179 80 38 179 80 38 179 80 38 170 77 39 -+126 96 80 196 196 196 249 249 249 255 255 255 249 249 249 216 216 216 134 131 128 20 23 23 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+ -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+200 200 199 255 255 255 216 216 216 167 162 159 167 162 159 206 202 198 222 218 209 139 137 135 -+13 13 13 69 73 72 47 49 48 17 18 16 105 107 107 47 49 48 0 0 0 77 78 76 -+97 96 96 0 0 0 20 20 21 85 88 88 139 137 135 182 182 182 167 162 159 139 137 135 -+119 117 113 84 81 78 47 49 48 3 3 6 0 0 0 0 0 0 0 0 0 0 0 0 -+3 3 6 8 8 9 52 51 50 52 51 50 6 7 9 5 6 8 5 6 8 5 6 8 -+13 17 18 108 90 44 241 195 89 177 145 72 3 3 6 9 10 12 108 90 44 241 195 89 -+137 105 55 208 171 79 189 156 74 20 20 21 3 3 8 200 163 79 248 200 89 122 100 50 -+241 195 89 161 132 61 122 100 50 235 192 90 108 90 44 235 192 90 152 111 60 13 17 18 -+13 15 17 20 20 21 161 132 61 223 182 84 63 45 38 9 10 12 12 13 15 13 15 17 -+13 15 17 47 49 48 196 196 196 255 255 255 220 219 215 26 28 29 0 0 0 0 0 0 -+0 0 0 26 28 29 147 147 146 246 245 245 255 255 255 230 230 229 134 119 113 168 75 33 -+175 79 35 175 79 35 175 79 35 175 79 35 176 79 38 175 79 35 176 79 38 179 80 38 -+179 79 37 179 79 37 179 80 38 179 79 37 179 80 38 179 80 38 159 71 30 126 96 80 -+207 206 206 254 254 254 254 254 254 230 230 229 147 147 146 20 23 23 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+ -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+168 168 168 254 254 254 233 232 232 134 134 133 177 170 162 203 196 190 214 212 206 115 110 108 -+12 13 15 64 64 61 39 42 42 13 13 13 63 62 61 20 20 21 0 0 0 77 78 76 -+26 28 29 3 3 6 8 8 9 33 33 31 52 51 50 39 42 42 10 10 10 0 0 0 -+0 0 0 2 2 2 5 6 8 6 7 9 6 7 9 7 8 10 6 7 9 6 7 9 -+6 7 9 16 19 20 54 58 58 20 20 21 7 8 10 8 8 9 5 6 8 5 6 8 -+10 11 13 108 90 44 241 195 89 177 145 72 3 3 6 10 11 13 108 90 44 241 195 89 -+137 105 55 200 163 79 200 163 79 20 20 21 3 3 8 177 145 72 248 200 89 122 100 50 -+228 186 86 177 145 72 161 132 61 228 186 86 108 90 44 235 192 90 137 105 55 12 13 15 -+12 13 15 13 17 18 122 100 50 241 195 89 108 90 44 7 8 10 13 15 17 13 15 17 -+13 15 17 20 24 26 162 160 159 252 252 252 237 237 237 97 96 96 0 0 0 0 0 0 -+13 13 13 157 157 157 246 245 245 255 255 255 230 230 229 134 119 113 166 76 38 175 79 35 -+175 79 35 175 79 35 175 79 35 176 79 38 175 79 35 176 79 38 176 79 38 179 79 37 -+176 79 38 176 79 38 179 79 37 179 81 36 176 79 38 148 72 46 154 142 136 230 230 229 -+254 254 254 253 253 253 200 200 199 85 88 88 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+ -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+119 117 113 253 253 253 252 252 252 122 123 123 177 176 172 182 182 182 220 215 207 139 137 135 -+20 20 21 0 0 0 0 0 0 8 8 9 47 49 48 13 13 13 27 25 23 54 58 58 -+39 42 42 69 73 72 84 81 78 85 88 88 105 107 107 105 107 107 97 96 96 60 59 58 -+0 0 0 0 0 0 5 6 8 6 7 9 8 8 9 8 9 11 9 10 12 8 9 11 -+3 3 6 64 64 61 57 54 50 5 6 8 6 7 9 8 8 9 5 6 8 3 3 6 -+6 7 9 108 90 44 241 195 89 161 132 61 3 3 6 8 9 11 108 90 44 241 195 89 -+137 105 55 189 156 74 208 171 79 17 18 16 3 3 8 152 111 60 248 200 89 137 105 55 -+189 156 74 241 195 89 241 195 89 200 163 79 122 100 50 235 192 90 108 90 44 10 11 13 -+9 10 12 10 11 13 88 74 36 223 182 84 177 145 72 3 3 8 13 15 17 13 15 17 -+12 13 15 13 17 18 134 134 133 246 245 245 247 247 246 157 157 157 20 23 23 39 42 42 -+157 157 157 249 249 249 255 255 255 233 232 232 146 134 128 166 76 38 175 79 35 174 79 37 -+175 79 35 175 79 35 175 79 35 176 79 38 176 79 38 176 79 38 176 79 38 176 79 38 -+176 79 38 176 79 38 179 81 36 166 76 38 126 96 80 192 189 185 250 250 249 255 255 255 -+246 245 245 179 179 176 26 28 29 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+ -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+64 64 61 246 245 245 255 255 255 157 157 157 147 147 146 134 134 133 147 147 146 139 137 135 -+157 157 157 168 168 168 122 123 123 157 157 157 213 211 211 190 190 190 196 196 196 216 216 216 -+213 211 211 225 222 218 226 226 226 230 230 229 240 239 239 243 242 242 233 232 232 216 216 216 -+182 182 182 134 131 128 52 51 50 0 0 0 0 0 0 6 7 9 7 8 10 5 6 8 -+52 51 50 85 88 88 0 0 0 6 7 9 5 6 8 6 7 9 5 6 8 3 3 6 -+5 6 8 108 90 44 241 195 89 161 132 61 3 3 6 6 7 9 108 90 44 241 195 89 -+122 100 50 189 156 74 216 177 82 17 18 16 3 3 8 108 90 44 248 200 89 137 105 55 -+108 90 44 223 182 84 228 186 86 122 100 50 152 111 60 228 186 86 81 52 41 6 7 9 -+6 7 9 6 7 9 27 25 23 161 132 61 177 145 72 3 3 8 12 13 15 10 12 14 -+12 13 15 13 17 18 69 73 72 230 230 229 255 255 255 243 242 242 119 117 113 190 190 190 -+248 248 248 255 255 255 226 226 226 115 110 108 159 71 30 173 79 35 174 79 37 175 79 35 -+175 79 35 175 79 35 175 79 35 175 79 35 175 79 35 175 79 35 176 79 38 176 79 38 -+176 79 38 176 79 38 147 67 29 154 142 136 226 226 226 255 255 255 255 255 255 226 226 226 -+147 147 146 33 33 31 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+ -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+26 28 29 220 219 215 255 255 255 213 211 211 119 117 113 162 160 159 190 190 190 190 190 190 -+249 249 249 252 252 252 249 249 249 251 250 250 255 255 255 254 254 254 254 254 254 254 254 254 -+254 254 254 253 253 253 252 252 252 252 252 252 251 250 250 251 250 250 252 252 252 255 255 255 -+253 253 253 249 249 249 240 239 239 200 200 199 139 137 135 77 78 76 52 51 50 20 23 23 -+84 81 78 39 42 42 7 8 10 6 7 9 6 7 9 7 8 10 6 7 9 3 3 6 -+5 6 8 108 90 44 241 195 89 161 132 61 122 100 50 63 45 38 88 74 36 228 186 86 -+122 100 50 177 145 72 200 163 79 22 12 9 6 7 9 51 47 32 177 145 72 88 74 36 -+17 18 16 51 47 32 63 45 38 17 18 16 88 74 36 108 90 44 13 13 13 6 7 9 -+5 6 8 6 7 9 9 10 12 37 34 30 37 34 30 10 11 13 12 13 14 13 15 17 -+12 15 17 13 17 18 7 10 12 119 117 113 243 242 242 255 255 255 240 239 239 253 253 253 -+254 254 254 226 226 226 105 107 107 42 16 9 107 51 29 166 76 38 174 79 37 176 79 38 -+176 79 38 175 79 35 175 79 35 176 79 38 175 79 35 175 79 35 175 79 35 176 79 38 -+170 77 39 126 96 80 182 182 182 247 247 246 255 255 255 248 248 248 190 190 190 69 73 72 -+13 13 13 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+ -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+13 13 13 168 168 168 253 253 253 255 255 255 254 254 254 255 255 255 249 249 249 190 190 190 -+249 249 249 255 255 255 251 250 250 246 245 245 225 222 218 220 219 215 216 216 216 200 200 199 -+200 200 199 190 190 190 168 168 168 168 168 168 147 147 146 147 147 146 168 168 168 207 206 206 -+233 232 232 249 249 249 255 255 255 255 255 255 255 255 255 243 242 242 213 211 211 168 168 168 -+67 67 66 5 6 8 6 7 9 7 8 10 8 9 11 7 8 10 6 7 9 5 6 8 -+3 3 6 88 74 36 200 163 79 200 163 79 177 145 72 88 74 36 37 34 30 108 90 44 -+37 34 30 27 25 23 27 25 23 7 8 10 6 7 9 5 6 8 2 2 2 3 3 8 -+7 8 10 7 8 10 8 9 11 9 10 12 10 11 13 5 6 8 5 6 8 5 6 8 -+5 6 8 7 8 10 12 13 15 12 15 17 12 15 17 12 13 15 13 17 18 13 15 17 -+12 15 17 13 17 18 14 18 20 97 96 96 247 247 246 255 255 255 255 255 255 251 250 250 -+200 200 199 77 78 76 8 5 4 23 5 0 23 5 0 81 44 20 147 67 29 173 77 35 -+175 79 35 175 79 35 175 79 35 176 79 38 175 79 35 174 79 37 172 77 34 138 69 38 -+154 142 136 226 226 226 255 255 255 255 255 255 230 230 229 147 147 146 13 13 13 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+ -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 67 67 66 190 190 190 243 242 242 252 252 252 255 255 255 255 255 255 190 190 190 -+246 245 245 255 255 255 182 182 182 119 117 113 69 73 72 64 64 61 60 59 58 26 28 29 -+20 23 23 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 39 42 42 -+85 88 88 122 123 123 177 176 172 226 226 226 251 250 250 255 255 255 255 255 255 226 226 226 -+63 62 61 7 8 10 8 9 11 7 10 12 8 9 11 8 8 9 7 8 10 8 9 11 -+9 10 12 20 20 21 49 32 29 22 12 9 2 2 2 3 3 6 6 7 9 3 3 8 -+5 6 8 6 7 9 6 7 9 6 7 9 7 8 10 6 7 9 7 8 10 7 8 10 -+7 8 10 8 9 11 7 8 10 8 9 11 13 15 17 12 13 15 10 11 13 9 10 12 -+8 9 11 10 11 13 12 13 15 13 17 18 13 17 18 13 17 18 12 15 17 13 15 17 -+12 13 15 20 24 26 26 28 29 67 67 66 190 190 190 216 216 216 200 200 199 147 147 146 -+57 54 50 23 5 0 24 7 0 24 7 0 23 5 0 24 7 0 107 51 29 170 77 39 -+174 79 37 175 79 35 175 79 35 175 79 35 175 79 35 158 73 41 126 96 80 206 202 198 -+246 245 245 255 255 255 252 252 252 200 200 199 97 96 96 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+ -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 20 23 23 52 51 50 69 73 72 213 211 211 255 255 255 207 206 206 -+237 237 237 255 255 255 177 176 172 13 13 13 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 13 13 13 20 23 23 168 168 168 255 255 255 253 253 253 157 157 157 -+0 0 0 7 8 10 7 10 12 8 9 11 9 10 12 9 10 12 9 10 12 8 9 11 -+8 9 11 10 11 13 6 7 9 3 3 6 5 6 8 5 6 8 6 7 9 5 6 8 -+6 7 9 6 7 9 6 7 9 6 7 9 6 7 9 5 6 8 5 6 8 6 7 9 -+6 7 9 7 8 10 6 7 9 9 10 12 13 15 17 10 12 14 12 13 15 13 15 17 -+12 13 15 10 12 14 12 13 15 14 18 20 13 17 18 13 17 18 12 15 17 13 15 17 -+12 13 15 20 23 23 17 18 16 13 15 17 27 25 23 26 28 29 20 20 21 22 12 9 -+23 5 0 23 5 0 24 7 0 24 7 0 24 7 0 24 7 0 24 7 0 107 51 29 -+170 77 39 173 79 35 174 79 37 166 76 38 126 96 80 157 157 157 237 237 237 255 255 255 -+254 254 254 237 237 237 162 160 159 26 28 29 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+ -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 190 190 190 255 255 255 220 219 215 -+226 226 226 255 255 255 182 182 182 13 13 13 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 60 59 58 233 232 232 255 255 255 225 222 218 39 42 42 -+6 7 9 7 8 10 8 9 11 8 9 11 10 11 13 9 10 12 10 11 13 10 11 13 -+10 11 13 10 12 14 8 9 11 5 6 8 5 6 8 5 6 8 6 7 9 6 7 9 -+6 7 9 7 8 10 6 7 9 5 6 8 5 6 8 5 6 8 5 6 8 8 8 9 -+6 7 9 6 7 9 6 7 9 8 9 11 9 10 12 8 9 11 10 12 14 12 13 15 -+13 15 17 12 15 17 12 13 15 12 15 17 14 18 20 14 18 20 16 19 20 14 18 20 -+17 7 8 23 5 0 23 5 0 23 5 0 23 5 0 23 5 0 24 7 0 23 5 0 -+24 7 0 24 7 0 24 7 0 24 7 0 24 7 0 24 7 0 23 5 0 42 16 9 -+129 59 33 159 71 30 123 75 52 177 170 162 225 222 218 252 252 252 255 255 255 251 250 250 -+190 190 190 105 107 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+ -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 190 190 190 255 255 255 225 222 218 -+226 226 226 255 255 255 182 182 182 13 13 13 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 20 23 23 179 179 176 252 252 252 249 249 249 139 137 135 9 10 12 -+6 7 9 7 8 10 6 7 9 8 9 11 10 11 13 10 11 13 10 11 13 10 11 13 -+10 12 14 10 12 14 10 11 13 7 8 10 5 6 8 5 6 8 5 6 8 5 6 8 -+5 6 8 5 6 8 5 6 8 5 6 8 5 6 8 3 3 6 5 6 8 5 6 8 -+6 7 9 6 7 9 8 8 9 9 10 12 10 11 13 10 11 13 10 11 13 12 13 15 -+13 17 18 12 15 17 13 15 17 13 15 17 13 17 18 14 18 20 20 20 21 17 7 8 -+23 5 0 23 5 0 24 7 0 24 7 0 24 7 0 24 7 0 24 7 0 24 7 0 -+24 7 0 24 7 0 24 7 0 24 7 0 24 7 0 23 5 0 23 5 0 22 12 9 -+89 68 66 147 147 146 230 230 229 251 250 250 255 255 255 249 249 249 216 216 216 122 123 123 -+39 42 42 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+ -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 196 196 196 255 255 255 213 211 211 -+226 226 226 255 255 255 182 182 182 13 13 13 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 115 110 108 237 237 237 254 254 254 213 211 211 63 62 61 7 8 10 -+8 8 9 8 9 11 7 8 10 10 11 13 10 11 13 9 10 12 10 11 13 10 11 13 -+10 12 14 10 12 14 10 11 13 10 11 13 8 9 11 8 9 11 7 8 10 6 7 9 -+8 8 9 8 9 11 5 6 8 3 3 6 3 3 6 5 6 8 5 6 8 6 7 9 -+8 8 9 8 9 11 7 8 10 9 10 12 9 10 12 10 12 14 10 12 14 12 13 15 -+13 15 17 14 18 20 14 18 20 13 15 17 13 15 17 17 18 16 17 7 8 23 5 0 -+24 7 0 24 7 0 24 7 0 24 7 0 24 7 0 24 7 0 24 7 0 24 7 0 -+24 7 0 24 7 0 24 7 0 24 7 0 23 5 0 0 0 0 60 59 58 147 147 146 -+216 216 216 254 253 253 255 255 255 249 249 249 216 216 216 147 147 146 33 33 31 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+ -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 13 13 13 216 216 216 255 255 255 200 200 199 -+245 244 244 255 255 255 162 160 159 13 13 13 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 20 23 23 207 206 206 255 255 255 247 247 246 134 131 128 2 2 2 6 7 9 -+8 9 11 9 10 12 8 9 11 10 11 13 10 11 13 9 10 12 10 11 13 10 12 14 -+10 11 13 10 11 13 10 11 13 10 12 14 10 11 13 9 10 12 10 11 13 9 10 12 -+9 10 12 10 11 13 8 9 11 5 6 8 5 6 8 6 7 9 5 6 8 6 7 9 -+7 8 10 8 9 11 7 10 12 9 10 12 10 11 13 9 10 12 10 12 14 13 17 18 -+13 15 17 13 17 18 12 15 17 12 13 15 13 13 13 22 12 9 23 5 0 24 7 0 -+24 7 0 24 7 0 24 7 0 24 7 0 24 7 0 24 7 0 24 7 0 24 7 0 -+23 5 0 23 5 0 24 7 0 22 12 9 52 51 50 157 157 157 226 226 226 249 249 249 -+255 255 255 254 254 254 216 216 216 134 134 133 64 64 61 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+ -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 85 88 88 237 237 237 254 254 254 196 196 196 -+248 248 248 253 253 253 139 137 135 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 67 67 66 247 247 246 255 255 255 168 168 168 0 0 0 8 8 9 5 6 8 -+7 8 10 9 10 12 9 10 12 10 11 13 10 11 13 10 11 13 9 10 12 10 11 13 -+10 11 13 12 13 15 10 12 14 10 11 13 10 12 14 10 11 13 10 12 14 9 10 12 -+8 9 11 10 11 13 8 9 11 7 8 10 6 7 9 6 7 9 6 7 9 7 8 10 -+9 10 12 9 10 12 9 10 12 10 11 13 10 11 13 12 13 15 13 15 17 13 15 17 -+13 15 17 13 17 18 16 19 20 39 42 42 39 42 42 17 7 8 23 5 0 24 7 0 -+24 7 0 24 7 0 24 7 0 24 7 0 24 7 0 24 7 0 23 5 0 23 5 0 -+23 5 0 22 12 9 85 88 88 167 162 159 230 230 229 253 253 253 255 255 255 251 250 250 -+226 226 226 157 157 157 52 51 50 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+ -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 139 137 135 247 247 246 246 245 245 200 200 199 -+251 250 250 243 242 242 105 107 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 97 96 96 251 250 250 254 254 254 147 147 146 0 0 0 5 6 8 5 6 8 -+6 7 9 7 8 10 9 10 12 9 10 12 10 11 13 10 11 13 9 10 12 10 11 13 -+12 13 15 12 13 15 10 12 14 10 11 13 10 11 13 10 12 14 10 11 13 7 10 12 -+9 10 12 10 11 13 8 9 11 6 7 9 7 8 10 7 8 10 7 8 10 6 7 9 -+8 9 11 9 10 12 12 13 15 12 13 15 12 13 15 12 13 15 13 15 17 12 13 15 -+9 10 12 28 30 31 57 54 50 67 65 62 65 64 60 37 34 30 23 5 0 23 5 0 -+24 7 0 24 7 0 24 7 0 24 7 0 24 7 0 24 7 0 24 7 0 23 5 0 -+23 5 0 69 73 72 216 216 216 255 255 255 255 255 255 252 252 252 225 222 218 168 168 168 -+64 64 61 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+ -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 33 33 31 190 190 190 255 255 255 233 232 232 213 211 211 -+254 254 254 225 222 218 69 73 72 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 39 42 42 230 230 229 255 255 255 247 247 246 168 168 168 20 20 21 5 6 8 -+5 6 8 6 7 9 8 9 11 8 9 11 10 11 13 12 13 15 13 15 17 10 12 14 -+10 12 14 9 10 12 7 8 10 8 9 11 7 10 12 9 10 12 10 12 14 9 10 12 -+8 9 11 8 9 11 7 8 10 6 7 9 6 7 9 6 7 9 6 7 9 8 9 11 -+9 10 12 10 11 13 13 17 18 10 11 13 12 13 15 13 15 17 12 13 15 20 20 21 -+52 51 50 64 64 61 67 67 66 68 67 63 68 67 63 60 59 58 20 20 21 23 5 0 -+23 5 0 24 7 0 24 7 0 24 7 0 24 7 0 24 7 0 24 7 0 23 5 0 -+22 12 9 157 157 157 253 253 253 253 253 253 213 211 211 122 123 123 63 62 61 20 23 23 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+ -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 69 73 72 233 232 232 255 255 255 213 211 211 230 230 229 -+254 254 254 190 190 190 13 13 13 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 162 160 159 255 255 255 251 250 250 157 157 157 57 54 50 39 42 42 -+17 18 16 5 6 8 6 7 9 7 8 10 8 9 11 10 12 14 13 15 17 9 10 12 -+8 8 9 6 7 9 6 7 9 7 8 10 8 9 11 8 9 11 8 9 11 8 9 11 -+7 8 10 7 8 10 6 7 9 6 7 9 6 7 9 6 7 9 7 8 10 8 9 11 -+10 11 13 10 12 14 12 13 15 12 13 15 10 12 14 27 25 23 51 47 44 64 62 59 -+67 67 66 67 67 66 67 67 66 67 67 66 67 67 66 68 67 63 51 47 44 17 7 8 -+23 5 0 23 5 0 24 7 0 24 7 0 24 7 0 24 7 0 24 7 0 23 5 0 -+17 18 16 192 189 185 255 255 255 248 248 248 139 137 135 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+ -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 134 131 128 254 254 254 253 253 253 177 176 172 251 250 250 -+249 249 249 134 134 133 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 33 33 31 216 216 216 255 255 255 233 232 232 69 68 64 68 67 63 68 67 63 -+62 61 58 28 30 31 8 8 9 5 6 8 6 7 9 8 9 11 7 8 10 7 8 10 -+6 7 9 6 7 9 6 7 9 6 7 9 6 7 9 7 8 10 6 7 9 7 9 9 -+8 9 11 7 8 10 8 9 11 7 8 10 8 8 9 9 10 12 9 10 12 13 15 17 -+13 17 18 13 17 18 13 15 17 16 19 20 47 49 48 62 61 58 67 66 62 68 67 63 -+67 67 66 68 67 63 68 67 63 67 67 66 67 67 66 68 67 63 68 65 63 39 42 42 -+17 7 8 23 5 0 23 5 0 24 7 0 24 7 0 24 7 0 24 7 0 23 5 0 -+81 44 20 115 110 108 233 232 232 255 255 255 237 237 237 122 123 123 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+ -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 213 211 211 255 255 255 226 226 226 206 202 198 255 255 255 -+233 232 232 26 28 29 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 115 110 108 251 250 250 255 255 255 168 168 168 60 59 58 68 67 63 69 68 64 -+62 61 58 39 42 42 60 59 58 39 42 42 27 25 23 12 13 15 3 3 6 3 3 6 -+5 6 8 5 6 8 6 7 9 6 7 9 7 8 10 6 7 9 6 7 9 7 8 10 -+8 9 11 8 9 11 9 10 12 8 9 11 9 10 12 8 9 11 9 10 12 12 13 15 -+20 20 21 33 33 31 47 49 48 64 63 61 68 67 63 68 67 63 68 67 63 68 67 63 -+68 67 63 68 65 63 67 67 66 67 67 66 68 65 63 68 67 63 67 67 66 67 65 62 -+51 47 44 27 25 23 22 12 9 23 5 0 23 5 0 23 5 0 23 5 0 8 5 4 -+81 44 20 138 69 38 154 142 136 243 242 242 255 255 255 240 239 239 134 134 133 39 42 42 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+ -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 97 96 96 246 245 245 254 254 254 182 182 182 246 245 245 255 255 255 -+177 176 172 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 196 196 196 255 255 255 240 239 239 85 88 88 67 66 62 68 67 63 65 64 60 -+51 47 44 62 61 58 66 65 61 68 67 63 65 64 60 57 54 50 39 42 42 17 18 16 -+0 0 0 0 0 0 2 2 2 3 3 6 5 6 8 6 7 9 5 6 8 6 7 9 -+7 8 10 5 6 8 5 6 8 10 11 13 20 23 23 37 34 30 51 47 44 52 51 50 -+60 59 58 67 66 62 69 68 64 69 68 64 69 68 64 69 68 64 69 68 64 69 68 64 -+69 68 64 69 68 64 67 67 66 67 67 66 67 67 66 69 68 64 68 67 63 67 66 62 -+67 66 62 62 61 58 52 51 50 37 34 30 22 12 9 8 5 4 23 5 0 2 2 2 -+17 7 8 129 59 33 147 67 29 154 142 136 240 239 239 255 255 255 246 245 245 196 196 196 -+97 96 96 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+ -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 177 176 172 252 252 252 240 239 239 200 200 199 254 254 254 243 242 242 -+85 88 88 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 13 13 13 -+97 96 96 237 237 237 255 255 255 196 196 196 69 73 72 67 66 62 64 63 61 39 42 42 -+60 59 58 64 63 59 69 68 64 68 67 63 68 67 63 68 67 63 67 66 62 66 65 61 -+57 54 50 39 42 42 27 25 23 13 13 13 10 10 10 13 13 13 20 20 21 26 28 29 -+39 42 42 57 54 50 60 59 58 66 65 61 67 65 62 68 65 63 68 65 63 69 68 64 -+69 68 64 68 67 63 69 68 64 69 68 64 69 68 64 69 68 64 69 68 64 69 68 64 -+69 68 64 68 67 63 68 65 63 67 67 66 68 65 63 68 67 63 68 67 63 67 66 62 -+68 67 63 67 66 62 66 65 61 65 64 60 64 63 59 60 59 58 51 47 44 33 33 31 -+20 20 21 81 44 20 129 59 33 148 72 46 146 134 128 233 232 232 253 253 253 253 253 253 -+243 242 242 177 176 172 77 78 76 20 23 23 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+ -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 67 67 66 220 219 215 255 255 255 216 216 216 230 230 229 255 255 255 200 200 199 -+47 49 48 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 67 67 66 157 157 157 -+213 211 211 252 252 252 248 248 248 147 147 146 64 63 59 57 54 50 39 42 42 57 54 50 -+65 64 60 68 65 63 68 67 63 69 68 64 69 68 64 69 68 64 68 67 63 67 67 66 -+67 67 66 69 68 64 67 67 66 60 59 58 57 54 50 60 59 58 64 64 61 68 67 63 -+69 68 64 69 68 64 65 64 60 68 67 63 67 67 66 68 67 63 68 67 63 69 68 64 -+68 67 63 68 67 63 68 67 63 69 68 64 68 67 63 68 67 63 68 67 63 68 67 63 -+68 67 63 68 67 63 62 61 58 66 65 61 67 66 62 67 66 62 67 66 62 67 65 62 -+67 66 62 67 66 62 68 65 63 67 66 62 66 65 61 67 66 62 66 65 61 66 65 61 -+64 63 59 49 32 29 138 69 38 138 69 38 147 67 29 126 96 80 190 190 190 243 242 242 -+255 255 255 255 255 255 230 230 229 177 176 172 115 110 108 13 13 13 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+ -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 122 123 123 248 248 248 251 250 250 200 200 199 245 244 244 249 249 249 157 157 157 -+13 13 13 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 78 76 213 211 211 251 250 250 -+255 255 255 254 254 254 230 230 229 84 81 78 39 42 42 52 51 50 62 61 58 68 65 63 -+67 67 66 68 67 63 67 67 66 68 67 63 69 68 64 69 68 64 68 67 63 67 67 66 -+69 68 64 69 68 64 69 68 64 69 68 64 68 67 63 69 68 64 67 66 62 66 65 61 -+68 67 63 69 68 64 66 65 61 68 65 63 68 67 63 68 67 63 68 67 63 68 67 63 -+68 65 63 67 67 66 68 67 63 68 67 63 68 65 63 68 65 63 67 66 62 68 67 63 -+68 67 63 67 66 62 60 59 58 60 59 58 66 65 61 67 66 62 67 66 62 67 66 62 -+66 65 61 67 66 62 68 65 63 68 65 63 66 65 61 67 66 62 67 66 62 66 65 61 -+65 64 60 81 44 20 166 76 38 166 76 38 138 69 38 158 73 41 148 72 46 134 119 113 -+200 200 199 251 250 250 255 255 255 253 253 253 243 242 242 213 211 211 134 131 128 33 33 31 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+ -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 157 157 157 255 255 255 246 245 245 190 190 190 254 254 254 237 237 237 97 96 96 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 13 13 13 168 168 168 255 255 255 251 250 250 -+226 226 226 177 176 172 84 81 78 52 51 50 62 61 58 64 63 59 67 66 62 68 67 63 -+68 65 63 68 67 63 68 67 63 68 67 63 68 67 63 69 68 64 67 67 66 68 67 63 -+69 68 64 69 68 64 69 68 64 69 68 64 69 68 64 69 68 64 67 66 62 66 65 61 -+68 67 63 69 68 64 66 65 61 64 64 61 68 65 63 68 67 63 67 66 62 68 65 63 -+67 67 66 67 67 66 68 65 63 68 67 63 68 67 63 68 67 63 67 66 62 67 66 62 -+68 67 63 67 66 62 60 59 58 52 51 50 64 63 59 66 65 61 67 66 62 67 66 62 -+67 66 62 67 66 62 67 66 62 67 66 62 66 65 61 67 66 62 67 66 62 66 65 61 -+57 54 50 107 51 29 174 79 37 174 79 37 170 77 39 138 69 38 158 73 41 170 77 39 -+138 69 38 134 131 128 213 211 211 243 242 242 253 253 253 255 255 255 251 250 250 213 211 211 -+122 123 123 52 51 50 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+ -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+13 13 13 213 211 211 255 255 255 225 222 218 213 211 211 255 255 255 207 206 206 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 20 23 23 207 206 206 255 255 255 213 211 211 -+60 59 58 51 47 44 62 61 58 62 61 58 62 61 58 65 64 60 67 66 62 67 66 62 -+67 66 62 68 67 63 68 65 63 67 66 62 68 67 63 68 67 63 68 67 63 68 67 63 -+67 66 62 68 67 63 68 67 63 68 67 63 68 67 63 69 68 64 67 66 62 64 64 61 -+68 65 63 68 67 63 66 65 61 64 63 59 68 67 63 67 66 62 66 65 61 67 66 62 -+67 66 62 67 66 62 67 66 62 67 66 62 67 66 62 67 66 62 66 65 61 67 66 62 -+67 66 62 66 65 61 64 63 59 47 49 48 57 54 50 65 64 60 66 65 61 67 66 62 -+67 66 62 67 66 62 67 65 62 67 66 62 67 66 62 67 66 62 66 65 61 65 64 60 -+51 47 44 129 59 33 175 79 35 173 77 35 174 79 37 172 77 34 147 67 29 158 73 41 -+174 79 37 159 71 30 138 69 38 134 119 113 177 176 172 230 230 229 255 255 255 255 255 255 -+246 245 245 200 200 199 134 131 128 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+ -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+105 107 107 249 249 249 255 255 255 179 179 176 243 242 242 254 254 254 162 160 159 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 20 23 23 220 219 215 255 255 255 182 182 182 -+13 13 13 62 61 58 62 61 58 62 61 58 65 64 60 67 66 62 66 65 61 67 66 62 -+67 66 62 67 66 62 67 66 62 67 66 62 67 66 62 67 66 62 68 67 63 68 67 63 -+66 65 61 66 65 61 67 66 62 68 67 63 67 67 66 69 68 64 67 66 62 64 63 61 -+67 67 66 67 67 66 68 65 63 63 62 61 68 67 63 67 66 62 66 65 61 66 65 61 -+67 66 62 68 67 63 67 66 62 66 65 61 67 66 62 67 66 62 67 66 62 67 66 62 -+67 66 62 66 65 61 66 65 61 57 54 50 39 42 42 60 59 58 65 64 60 67 66 62 -+67 66 62 66 65 61 67 65 62 67 66 62 67 66 62 67 66 62 67 66 62 66 65 61 -+51 47 44 129 59 33 173 77 35 173 79 35 173 77 35 174 79 37 168 75 33 166 76 38 -+138 69 38 166 76 38 173 77 35 172 77 34 158 73 41 126 96 80 157 157 157 237 237 237 -+252 252 252 254 254 254 246 245 245 177 176 172 64 64 61 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+ -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+147 147 146 254 254 254 252 252 252 168 168 168 255 255 255 249 249 249 85 88 88 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 20 23 23 207 206 206 255 255 255 207 206 206 -+2 2 2 62 61 58 62 61 58 62 61 58 66 65 61 67 66 62 67 66 62 67 66 62 -+67 66 62 66 65 61 67 66 62 67 66 62 68 67 63 67 66 62 67 66 62 68 65 63 -+68 67 63 66 65 61 66 65 61 67 66 62 67 66 62 68 67 63 68 67 63 64 63 61 -+67 67 66 67 67 66 67 66 62 64 62 59 68 67 63 67 66 62 66 65 61 67 66 62 -+67 66 62 67 66 62 67 66 62 68 65 63 67 66 62 67 66 62 67 66 62 67 66 62 -+67 66 62 66 65 61 66 65 61 64 63 59 39 42 42 39 42 42 47 49 48 60 59 58 -+66 65 61 67 66 62 67 66 62 67 66 62 67 66 62 67 66 62 67 66 62 65 64 60 -+52 51 50 107 51 29 158 73 41 158 73 41 173 79 35 173 77 35 174 79 37 172 77 34 -+168 75 33 158 73 41 170 77 39 173 77 35 173 77 35 174 79 37 147 67 29 126 96 80 -+182 182 182 237 237 237 255 255 255 255 255 255 216 216 216 134 134 133 13 13 13 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+ -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+168 168 168 254 254 254 233 232 232 190 190 190 255 255 255 230 230 229 33 33 31 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 13 13 13 190 190 190 255 255 255 220 219 215 -+0 0 0 60 59 58 60 59 58 64 63 59 66 65 61 66 65 61 67 66 62 67 66 62 -+67 66 62 67 66 62 67 66 62 67 66 62 67 66 62 67 66 62 67 66 62 67 66 62 -+66 65 61 67 66 62 66 65 61 65 64 60 66 65 61 66 65 61 68 67 63 63 62 61 -+68 65 63 68 67 63 67 66 62 62 61 58 67 66 62 66 65 61 67 66 62 67 66 62 -+67 66 62 67 66 62 67 66 62 67 66 62 67 66 62 66 65 61 66 65 61 67 66 62 -+66 65 61 66 65 61 67 66 62 67 66 62 60 59 58 37 34 30 33 33 31 39 42 42 -+60 59 58 62 61 58 62 61 58 65 64 60 67 66 62 67 66 62 67 66 62 66 65 61 -+60 59 58 81 44 20 138 69 38 158 73 41 147 67 29 173 77 35 173 77 35 173 77 35 -+172 77 34 168 75 33 173 77 35 173 77 35 166 76 38 174 79 37 174 79 37 170 77 39 -+158 73 41 134 119 113 213 211 211 253 253 253 255 255 255 243 242 242 177 176 172 39 42 42 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+ -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+196 196 196 255 255 255 216 216 216 213 211 211 255 255 255 213 211 211 26 28 29 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 13 13 13 179 179 176 255 255 255 226 226 226 -+0 0 0 57 54 50 62 61 58 64 63 59 65 64 60 65 64 60 66 65 61 66 65 61 -+66 65 61 67 66 62 67 66 62 67 66 62 67 66 62 66 65 61 67 66 62 67 66 62 -+67 66 62 66 65 61 67 66 62 66 65 61 65 64 60 66 65 61 66 65 61 60 59 58 -+67 65 62 67 66 62 67 66 62 62 61 58 66 65 61 67 66 62 67 66 62 67 66 62 -+67 66 62 67 66 62 67 66 62 67 66 62 67 66 62 65 64 60 65 64 60 66 65 61 -+65 64 60 66 65 61 66 65 61 66 65 61 65 64 60 64 63 59 47 49 48 39 42 42 -+37 34 30 39 42 42 51 47 44 52 51 50 65 64 60 67 66 62 65 64 60 65 64 60 -+65 64 60 81 44 20 147 67 29 138 69 38 148 72 46 158 73 41 172 77 34 173 77 35 -+174 79 37 172 77 34 168 75 33 173 77 35 158 73 41 138 69 38 166 76 38 173 77 35 -+173 77 35 170 77 39 137 73 51 162 160 159 237 237 237 255 255 255 253 253 253 192 189 185 -+60 59 58 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+ -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 17 18 16 0 0 0 0 0 0 39 42 42 -+216 216 216 255 255 255 200 200 199 225 222 218 255 255 255 246 245 245 139 137 135 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 162 160 159 255 255 255 237 237 237 -+37 34 30 57 54 50 62 61 58 62 61 58 64 63 59 65 64 60 65 64 60 65 64 60 -+66 65 61 66 65 61 66 65 61 66 65 61 66 65 61 66 65 61 66 65 61 66 65 61 -+67 66 62 67 66 62 67 66 62 67 66 62 66 65 61 65 64 60 66 65 61 60 59 58 -+66 65 61 66 65 61 66 65 61 62 61 58 66 65 61 66 65 61 67 66 62 67 66 62 -+66 65 61 67 66 62 67 66 62 66 65 61 66 65 61 65 64 60 65 64 60 65 64 60 -+65 64 60 65 64 60 64 63 59 64 63 59 65 64 60 65 64 60 65 64 60 60 59 58 -+52 51 50 52 51 50 52 51 50 60 59 58 65 64 60 67 66 62 66 65 61 65 64 60 -+66 65 61 63 45 38 159 71 30 166 76 38 158 73 41 147 67 29 158 73 41 166 76 38 -+174 79 37 173 77 35 173 77 35 172 77 34 172 77 34 166 76 38 147 67 29 158 73 41 -+173 79 35 174 79 37 174 79 37 159 71 30 134 119 113 213 211 211 255 255 255 253 253 253 -+200 200 199 67 67 66 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+ -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 33 33 31 0 0 0 0 0 0 134 131 128 -+245 244 244 254 254 254 196 196 196 177 176 172 240 239 239 255 255 255 225 222 218 39 42 42 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 147 147 146 255 255 255 245 244 244 -+67 67 66 52 51 50 62 61 58 62 61 58 64 63 59 65 64 60 65 64 60 65 64 60 -+65 64 60 65 64 60 65 64 60 65 64 60 65 64 60 65 64 60 65 64 60 65 64 60 -+66 65 61 66 65 61 66 65 61 67 66 62 66 65 61 66 65 61 65 64 60 60 59 58 -+62 61 58 65 64 60 65 64 60 60 59 58 65 64 60 66 65 61 66 65 61 66 65 61 -+65 64 60 66 65 61 66 65 61 66 65 61 64 63 59 65 64 60 64 63 59 65 64 60 -+64 63 59 65 64 60 65 64 60 64 63 59 65 64 60 64 63 59 65 64 60 65 64 60 -+64 63 59 64 62 59 62 61 58 65 64 60 66 65 61 66 65 61 66 65 61 65 64 60 -+65 64 60 63 45 38 147 67 29 170 77 39 168 75 33 158 73 41 158 73 41 158 73 41 -+166 76 38 173 77 35 173 77 35 173 77 35 172 77 34 168 75 33 173 77 35 148 72 46 -+158 73 41 174 79 37 173 79 35 173 77 35 170 77 39 126 96 80 200 200 199 252 252 252 -+254 254 254 200 200 199 52 51 50 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+ -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 17 18 16 0 0 0 0 0 0 157 157 157 -+251 250 250 240 239 239 105 107 107 0 0 0 162 160 159 251 250 250 240 239 239 105 107 107 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 122 123 123 249 249 249 249 249 249 -+122 123 123 39 42 42 62 61 58 62 61 58 64 63 59 64 63 59 65 64 60 65 64 60 -+64 63 59 64 63 59 65 64 60 65 64 60 64 63 59 65 64 60 65 64 60 65 64 60 -+65 64 60 65 64 60 65 64 60 66 65 61 65 64 60 64 63 59 64 63 59 62 61 58 -+52 51 50 60 59 58 60 59 58 57 54 50 62 61 58 66 65 61 65 64 60 66 65 61 -+66 65 61 66 65 61 66 65 61 65 64 60 64 63 59 65 64 60 65 64 60 64 63 59 -+65 64 60 65 64 60 64 63 59 65 64 60 65 64 60 65 64 60 65 64 60 65 64 60 -+65 64 60 65 64 60 65 64 60 64 63 59 65 64 60 65 64 60 66 65 61 65 64 60 -+65 64 60 52 51 50 107 51 29 147 67 29 172 77 34 173 77 35 170 77 39 166 76 38 -+158 73 41 166 76 38 173 77 35 174 79 37 175 79 35 172 77 34 168 75 33 172 77 34 -+158 73 41 158 73 41 173 77 35 173 77 35 173 77 35 172 77 34 137 73 51 200 200 199 -+253 253 253 254 254 254 196 196 196 54 58 58 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+ -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 157 157 157 -+251 250 250 237 237 237 97 96 96 2 2 2 122 123 123 245 244 244 246 245 245 134 134 133 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 97 96 96 237 237 237 252 252 252 -+167 162 159 17 18 16 64 62 59 62 61 58 64 63 59 65 64 60 64 63 59 64 63 59 -+64 63 59 64 63 59 64 63 59 64 63 59 65 64 60 65 64 60 65 64 60 65 64 60 -+65 64 60 65 64 60 65 64 60 64 63 59 65 64 60 64 63 59 62 61 58 51 47 44 -+52 51 50 62 61 58 64 63 59 62 61 58 60 59 58 65 64 60 65 64 60 66 65 61 -+66 65 61 66 65 61 65 64 60 64 63 59 64 63 59 65 64 60 65 64 60 64 63 59 -+65 64 60 64 63 59 64 63 59 65 64 60 66 65 61 65 64 60 65 64 60 66 65 61 -+64 63 59 64 63 59 64 63 59 64 63 59 64 63 59 65 64 60 65 64 60 64 63 59 -+64 63 59 57 54 50 107 51 29 138 69 38 147 67 29 173 77 35 173 77 35 173 77 35 -+173 77 35 173 77 35 173 77 35 174 79 37 174 79 37 173 77 35 173 77 35 172 77 34 -+168 75 33 147 67 29 158 73 41 173 77 35 173 77 35 173 77 35 173 77 35 145 89 57 -+196 196 196 253 253 253 251 250 250 182 182 182 39 42 42 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+ -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 147 147 146 -+248 248 248 240 239 239 105 107 107 0 0 0 122 123 123 245 244 244 246 245 245 139 137 135 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 67 67 66 220 219 215 254 254 254 -+200 200 199 33 33 31 60 59 58 64 62 59 65 64 60 65 64 60 64 63 59 65 64 60 -+64 63 59 64 63 59 65 64 60 65 64 60 65 64 60 65 64 60 65 64 60 65 64 60 -+65 64 60 65 64 60 65 64 60 64 63 59 65 64 60 65 64 60 64 63 59 52 51 50 -+20 20 21 33 33 31 57 54 50 60 59 58 60 59 58 65 64 60 65 64 60 66 65 61 -+65 64 60 65 64 60 64 63 59 64 63 59 64 63 59 65 64 60 65 64 60 64 63 59 -+65 64 60 65 64 60 65 64 60 65 64 60 66 65 61 65 64 60 64 63 59 65 64 60 -+65 64 60 65 64 60 64 63 59 65 64 60 65 64 60 65 64 60 64 63 59 64 63 59 -+62 61 58 54 58 58 107 51 29 166 76 38 147 67 29 147 67 29 173 77 35 170 77 39 -+174 79 37 173 77 35 173 77 35 173 77 35 173 77 35 174 79 37 173 77 35 173 77 35 -+173 77 35 166 76 38 138 69 38 158 73 41 166 76 38 173 77 35 173 77 35 174 79 37 -+145 89 57 213 211 211 254 254 254 251 250 250 162 160 159 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+ -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 139 137 135 -+247 247 246 246 245 245 147 147 146 119 117 113 177 176 172 251 250 250 245 244 244 134 131 128 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 13 13 13 190 190 190 253 253 253 -+226 226 226 77 78 76 52 51 50 62 61 58 64 63 59 65 64 60 65 64 60 65 64 60 -+64 63 59 62 61 58 64 63 59 65 64 60 65 64 60 65 64 60 65 64 60 65 64 60 -+64 63 59 65 64 60 65 64 60 65 64 60 65 64 60 65 64 60 65 64 60 65 64 60 -+51 47 44 10 11 13 5 6 8 26 28 29 51 47 44 62 61 58 65 64 60 65 64 60 -+65 64 60 65 64 60 64 63 59 64 63 59 65 64 60 65 64 60 65 64 60 65 64 60 -+65 64 60 66 65 61 66 65 61 66 65 61 66 65 61 66 65 61 66 65 61 65 64 60 -+65 64 60 65 64 60 64 63 59 65 64 60 65 64 60 65 64 60 65 64 60 65 64 60 -+64 63 59 60 59 58 81 52 41 168 75 33 168 75 33 147 67 29 138 69 38 158 73 41 -+147 67 29 174 79 37 173 77 35 174 79 37 174 79 37 173 77 35 174 79 37 173 77 35 -+174 79 37 173 77 35 166 76 38 138 69 38 158 73 41 158 73 41 174 79 37 175 79 35 -+172 77 34 126 96 80 216 216 216 255 255 255 243 242 242 139 137 135 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+ -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 105 107 107 -+237 237 237 255 255 255 200 200 199 105 107 107 207 206 206 255 255 255 226 226 226 67 67 66 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 147 147 146 251 250 250 -+245 244 244 119 117 113 39 42 42 64 63 59 64 63 59 65 64 60 65 64 60 65 64 60 -+64 63 59 62 61 58 64 63 59 65 64 60 65 64 60 65 64 60 65 64 60 64 63 59 -+64 63 59 64 63 59 66 65 61 66 65 61 66 65 61 66 65 61 65 64 60 66 65 61 -+60 59 58 28 30 31 20 20 21 3 3 6 8 5 4 57 54 50 64 63 59 64 63 59 -+65 64 60 66 65 61 65 64 60 65 64 60 65 64 60 65 64 60 66 65 61 66 65 61 -+66 65 61 67 66 62 66 65 61 67 66 62 66 65 61 66 65 61 65 64 60 66 65 61 -+66 65 61 66 65 61 66 65 61 65 64 60 66 65 61 66 65 61 66 65 61 66 65 61 -+64 63 59 62 61 58 63 45 38 158 73 41 168 75 33 172 77 34 158 73 41 138 69 38 -+158 73 41 158 73 41 174 79 37 174 79 37 174 79 37 174 79 37 174 79 37 174 79 37 -+174 79 37 174 79 37 173 77 35 158 73 41 158 73 41 166 76 38 166 76 38 170 77 39 -+158 73 41 170 77 39 134 119 113 233 232 232 255 255 255 230 230 229 97 96 96 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+ -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+196 196 196 255 255 255 247 247 246 243 242 242 253 253 253 255 255 255 179 179 176 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 88 88 243 242 242 -+255 255 255 168 168 168 28 30 31 62 61 58 64 63 59 65 64 60 65 64 60 65 64 60 -+65 64 60 65 64 60 65 64 60 65 64 60 65 64 60 65 64 60 65 64 60 65 64 60 -+64 63 59 65 64 60 66 65 61 67 66 62 67 66 62 67 66 62 66 65 61 66 65 61 -+65 64 60 47 49 48 39 42 42 27 25 23 13 13 13 51 47 44 65 64 60 65 64 60 -+65 64 60 66 65 61 66 65 61 65 64 60 64 63 59 65 64 60 67 66 62 67 66 62 -+67 66 62 67 66 62 67 66 62 67 66 62 67 66 62 66 65 61 66 65 61 67 66 62 -+67 66 62 66 65 61 67 66 62 67 66 62 66 65 61 66 65 61 67 66 62 66 65 61 -+66 65 61 64 63 59 39 42 42 147 67 29 168 75 33 172 77 34 174 79 37 159 71 30 -+138 69 38 158 73 41 158 73 41 170 77 39 175 79 35 174 79 37 174 79 37 174 79 37 -+174 79 37 174 79 37 173 77 35 173 79 35 138 69 38 158 73 41 158 73 41 166 76 38 -+107 51 29 129 59 33 159 71 30 154 142 136 246 245 245 255 255 255 207 206 206 39 42 42 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+ -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+97 96 96 226 226 226 254 254 254 254 254 254 251 250 250 200 200 199 64 64 61 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 200 200 199 -+255 255 255 216 216 216 28 30 31 57 54 50 64 63 59 65 64 60 65 64 60 65 64 60 -+65 64 60 65 64 60 65 64 60 65 64 60 65 64 60 64 63 59 64 63 59 64 63 59 -+65 64 60 65 64 60 66 65 61 67 66 62 67 66 62 67 66 62 67 66 62 67 66 62 -+66 65 61 60 59 58 39 42 42 39 42 42 33 33 31 33 33 31 65 64 60 66 65 61 -+65 64 60 66 65 61 66 65 61 65 64 60 65 64 60 65 64 60 67 66 62 67 66 62 -+67 66 62 67 66 62 67 66 62 67 66 62 67 66 62 67 66 62 67 66 62 67 66 62 -+67 66 62 67 66 62 67 66 62 67 66 62 67 66 62 67 66 62 67 66 62 67 66 62 -+66 65 61 65 64 60 39 42 42 129 59 33 159 71 30 172 77 34 173 77 35 173 77 35 -+166 76 38 147 67 29 158 73 41 147 67 29 172 77 34 173 79 35 174 79 37 174 79 37 -+173 77 35 173 77 35 173 77 35 173 77 35 170 77 39 138 69 38 166 76 38 147 67 29 -+166 76 38 81 44 20 81 44 20 107 51 29 168 168 168 254 254 254 252 252 252 168 168 168 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+ -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 67 67 66 147 147 146 157 157 157 119 117 113 33 33 31 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 157 157 157 -+255 255 255 245 244 244 60 59 58 51 47 44 64 63 59 64 63 59 65 64 60 65 64 60 -+65 64 60 65 64 60 65 64 60 65 64 60 65 64 60 65 64 60 64 63 59 64 63 59 -+64 63 59 64 63 59 66 65 61 66 65 61 66 65 61 67 66 62 67 66 62 67 66 62 -+65 64 60 57 54 50 52 51 50 39 42 42 39 42 42 27 25 23 60 59 58 65 64 60 -+65 64 60 66 65 61 65 64 60 65 64 60 65 64 60 65 64 60 66 65 61 67 66 62 -+67 66 62 67 66 62 67 66 62 67 66 62 67 66 62 67 66 62 67 66 62 67 66 62 -+67 66 62 67 66 62 67 66 62 67 66 62 67 66 62 67 66 62 67 66 62 67 66 62 -+66 65 61 65 64 60 47 49 48 107 51 29 147 67 29 166 76 38 173 77 35 173 77 35 -+173 77 35 158 73 41 147 67 29 166 76 38 158 73 41 174 79 37 173 77 35 173 77 35 -+173 77 35 174 79 37 174 79 37 173 77 35 173 77 35 158 73 41 166 76 38 147 67 29 -+166 76 38 138 69 38 27 25 23 68 65 63 67 65 62 213 211 211 255 255 255 240 239 239 -+119 117 113 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+ -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 97 96 96 -+251 250 250 254 254 254 134 134 133 27 25 23 64 62 59 64 63 59 64 63 59 65 64 60 -+65 64 60 65 64 60 65 64 60 65 64 60 65 64 60 65 64 60 65 64 60 65 64 60 -+65 64 60 64 63 59 66 65 61 66 65 61 67 66 62 67 66 62 67 66 62 67 66 62 -+66 65 61 60 59 58 57 54 50 47 49 48 51 47 44 33 33 31 51 47 44 65 64 60 -+65 64 60 66 65 61 65 64 60 65 64 60 65 64 60 66 65 61 66 65 61 67 66 62 -+67 66 62 67 66 62 67 66 62 67 66 62 67 66 62 67 66 62 67 66 62 67 66 62 -+67 66 62 67 66 62 67 66 62 67 66 62 67 66 62 67 66 62 67 66 62 67 66 62 -+67 66 62 66 65 61 52 51 50 42 16 9 129 59 33 138 69 38 166 76 38 173 77 35 -+173 77 35 174 79 37 158 73 41 147 67 29 166 76 38 158 73 41 174 79 37 173 77 35 -+173 77 35 174 79 37 174 79 37 174 79 37 174 79 37 166 76 38 158 73 41 170 77 39 -+147 67 29 170 77 39 81 52 41 168 168 168 147 147 146 119 117 113 240 239 239 255 255 255 -+207 206 206 52 51 50 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+ -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 64 64 61 -+230 230 229 255 255 255 182 182 182 0 0 0 60 59 58 64 63 59 65 64 60 65 64 60 -+65 64 60 65 64 60 65 64 60 65 64 60 65 64 60 65 64 60 65 64 60 65 64 60 -+65 64 60 65 64 60 65 64 60 66 65 61 67 66 62 67 66 62 67 66 62 67 66 62 -+67 66 62 63 62 61 60 59 58 52 51 50 52 51 50 52 51 50 39 42 42 64 63 59 -+65 64 60 66 65 61 66 65 61 66 65 61 66 65 61 66 65 61 67 66 62 67 66 62 -+67 66 62 67 66 62 67 66 62 67 66 62 67 66 62 67 66 62 67 66 62 67 66 62 -+67 66 62 67 66 62 67 66 62 67 66 62 67 66 62 67 66 62 67 66 62 67 66 62 -+67 66 62 66 65 61 47 49 48 13 15 17 51 47 32 138 69 38 148 72 46 166 76 38 -+173 77 35 173 77 35 173 77 35 158 73 41 159 71 30 166 76 38 158 73 41 173 77 35 -+173 77 35 173 77 35 174 79 37 174 79 37 174 79 37 173 77 35 158 73 41 173 77 35 -+158 73 41 166 76 38 147 67 29 139 137 135 243 242 242 177 176 172 182 182 182 254 254 254 -+252 252 252 119 117 113 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+ -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 39 42 42 -+200 200 199 255 255 255 225 222 218 33 33 31 51 47 44 64 63 59 64 63 59 65 64 60 -+65 64 60 65 64 60 65 64 60 65 64 60 65 64 60 65 64 60 65 64 60 65 64 60 -+65 64 60 65 64 60 66 65 61 66 65 61 66 65 61 67 66 62 67 66 62 67 66 62 -+67 66 62 67 65 62 57 54 50 57 54 50 57 54 50 60 59 58 51 47 44 60 59 58 -+65 64 60 66 65 61 66 65 61 66 65 61 66 65 61 67 66 62 67 66 62 67 66 62 -+66 65 61 67 66 62 67 66 62 67 66 62 67 66 62 67 66 62 67 66 62 67 66 62 -+67 66 62 67 66 62 67 66 62 67 66 62 67 66 62 67 66 62 67 66 62 67 66 62 -+67 66 62 66 65 61 47 49 48 60 59 58 162 160 159 63 45 38 158 73 41 158 73 41 -+173 77 35 172 77 34 172 77 34 173 77 35 147 67 29 166 76 38 158 73 41 166 76 38 -+173 77 35 172 77 34 172 77 34 173 77 35 173 77 35 173 77 35 147 67 29 170 77 39 -+158 73 41 158 73 41 159 71 30 89 68 66 240 239 239 249 249 249 196 196 196 248 248 248 -+255 255 255 134 134 133 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+ -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 39 42 42 52 51 50 11 10 9 0 0 0 0 0 0 13 13 13 -+162 160 159 251 250 250 240 239 239 115 110 108 27 25 23 66 65 61 67 66 62 67 66 62 -+67 66 62 67 66 62 67 66 62 67 66 62 67 66 62 67 66 62 67 66 62 67 66 62 -+67 66 62 67 66 62 68 67 63 68 67 63 68 67 63 69 68 64 69 68 64 69 68 64 -+69 68 64 69 68 64 67 67 66 57 54 50 60 59 58 64 63 61 52 51 50 60 59 58 -+68 67 63 68 67 63 68 67 63 69 68 64 69 68 64 69 68 64 69 68 64 69 68 64 -+69 68 64 69 68 64 69 68 64 69 68 64 69 68 64 69 68 64 69 68 64 69 68 64 -+69 68 64 69 68 64 69 68 64 69 68 64 69 68 64 69 68 64 69 68 64 69 68 64 -+69 68 64 69 68 64 51 47 44 85 88 88 240 239 239 134 131 128 81 44 20 158 73 41 -+166 76 38 174 79 37 174 79 37 174 79 37 166 76 38 138 69 38 174 79 37 158 73 41 -+174 79 37 174 79 37 174 79 37 174 79 37 174 79 37 174 79 37 166 76 38 158 73 41 -+174 79 37 147 67 29 170 77 39 81 44 20 207 206 206 254 254 254 254 254 254 254 254 254 -+240 239 239 85 88 88 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -+ --- -libgit2 1.6.2 - diff --git a/other/assets/desktopctl/lock-screen.svg b/other/assets/desktopctl/lock-screen.svg deleted file mode 100644 index d0ed566..0000000 --- a/other/assets/desktopctl/lock-screen.svg +++ /dev/null @@ -1,58 +0,0 @@ - - - - - - - - - - - - - diff --git a/other/assets/desktopctl/logout.svg b/other/assets/desktopctl/logout.svg deleted file mode 100644 index 2b00a03..0000000 --- a/other/assets/desktopctl/logout.svg +++ /dev/null @@ -1,59 +0,0 @@ - - - - - - - - - - - - - diff --git a/other/assets/desktopctl/reboot.svg b/other/assets/desktopctl/reboot.svg deleted file mode 100644 index a689cce..0000000 --- a/other/assets/desktopctl/reboot.svg +++ /dev/null @@ -1,56 +0,0 @@ - - - - - - - - - - - - - diff --git a/other/assets/desktopctl/shutdown.svg b/other/assets/desktopctl/shutdown.svg deleted file mode 100644 index 1f198cb..0000000 --- a/other/assets/desktopctl/shutdown.svg +++ /dev/null @@ -1,54 +0,0 @@ - - - - - - - - - - - - - diff --git a/modules/desktop-environment/home/xmonad/wallpaper/wallpaper.jpg b/other/assets/wallpaper/wallpaper.jpg similarity index 100% rename from modules/desktop-environment/home/xmonad/wallpaper/wallpaper.jpg rename to other/assets/wallpaper/wallpaper.jpg diff --git a/other/assets/xenia.pnm b/other/assets/xenia.pnm deleted file mode 100644 index fb7aa3b..0000000 --- a/other/assets/xenia.pnm +++ /dev/null @@ -1,76804 +0,0 @@ -P3 -# Created by GIMP version 2.10.34 PNM plug-in -160 160 -255 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -13 -13 -13 -114 -114 -114 -130 -130 -130 -61 -61 -61 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -28 -28 -28 -194 -194 -194 -248 -248 -248 -249 -249 -249 -227 -227 -227 -117 -117 -117 -13 -13 -13 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -146 -146 -146 -250 -250 -250 -253 -253 -252 -252 -252 -252 -255 -255 -255 -228 -228 -228 -101 -101 -101 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -53 -53 -53 -209 -209 -209 -255 -255 -255 -225 -225 -225 -163 -162 -162 -249 -249 -249 -255 -255 -255 -223 -223 -223 -69 -69 -69 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -22 -22 -22 -124 -124 -124 -209 -209 -209 -217 -217 -217 -161 -161 -161 -38 -38 -38 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -128 -128 -128 -246 -246 -246 -252 -252 -252 -188 -187 -186 -166 -163 -159 -172 -171 -170 -250 -250 -250 -253 -253 -253 -201 -201 -201 -56 -56 -56 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -53 -53 -53 -168 -168 -168 -246 -246 -246 -255 -255 -255 -255 -255 -255 -254 -254 -254 -162 -162 -162 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -22 -22 -22 -212 -212 -212 -255 -255 -255 -237 -237 -236 -172 -170 -165 -230 -226 -217 -187 -184 -179 -194 -194 -194 -253 -253 -253 -251 -251 -251 -170 -170 -170 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -71 -71 -71 -196 -196 -196 -251 -251 -251 -255 -255 -255 -234 -234 -233 -222 -221 -221 -255 -255 -255 -229 -229 -229 -22 -22 -22 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -117 -117 -117 -251 -251 -251 -255 -255 -255 -175 -175 -173 -210 -208 -199 -231 -227 -218 -226 -222 -213 -142 -140 -136 -216 -216 -215 -255 -255 -255 -248 -248 -248 -132 -132 -132 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -83 -83 -83 -215 -215 -215 -253 -253 -253 -253 -253 -253 -216 -216 -215 -109 -109 -107 -146 -146 -145 -254 -254 -254 -246 -246 -246 -95 -95 -95 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -199 -199 -199 -255 -255 -255 -233 -234 -233 -167 -164 -159 -232 -228 -219 -231 -227 -218 -232 -228 -219 -192 -188 -181 -98 -97 -96 -230 -230 -229 -255 -255 -255 -232 -232 -232 -98 -98 -98 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -13 -13 -13 -122 -122 -122 -227 -227 -227 -255 -255 -255 -250 -250 -250 -195 -195 -195 -121 -120 -117 -199 -196 -190 -150 -149 -146 -241 -241 -241 -251 -251 -251 -154 -154 -154 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -101 -101 -101 -237 -237 -237 -254 -254 -254 -189 -188 -187 -216 -212 -205 -232 -228 -219 -232 -228 -219 -231 -227 -218 -230 -226 -217 -119 -118 -113 -139 -139 -139 -245 -245 -245 -254 -254 -254 -194 -194 -194 -42 -42 -42 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -110 -110 -110 -235 -235 -235 -255 -255 -255 -248 -248 -248 -171 -171 -171 -100 -99 -97 -212 -206 -200 -232 -228 -219 -171 -168 -164 -221 -221 -221 -254 -254 -254 -198 -198 -198 -34 -34 -34 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -13 -13 -13 -163 -163 -163 -251 -251 -251 -243 -243 -243 -183 -181 -177 -227 -223 -214 -232 -228 -219 -232 -228 -219 -232 -228 -219 -232 -228 -219 -200 -196 -189 -16 -14 -16 -190 -190 -190 -254 -254 -254 -249 -249 -249 -138 -138 -138 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -13 -13 -13 -118 -118 -118 -236 -236 -236 -255 -255 -255 -246 -246 -246 -161 -161 -159 -67 -66 -64 -203 -199 -193 -234 -229 -221 -233 -229 -220 -204 -201 -194 -198 -198 -197 -254 -254 -254 -228 -228 -228 -83 -83 -83 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -53 -53 -53 -212 -212 -212 -255 -255 -255 -222 -222 -221 -189 -186 -180 -231 -227 -218 -232 -228 -219 -232 -228 -219 -232 -228 -219 -232 -228 -219 -227 -223 -214 -109 -108 -104 -63 -63 -62 -224 -224 -223 -255 -255 -255 -232 -232 -232 -93 -93 -93 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -130 -130 -130 -235 -235 -235 -255 -255 -255 -243 -242 -242 -152 -152 -151 -48 -47 -46 -180 -177 -171 -231 -227 -219 -234 -229 -223 -234 -229 -222 -221 -217 -211 -176 -175 -173 -251 -250 -250 -245 -245 -245 -117 -117 -117 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -98 -98 -98 -248 -248 -248 -254 -254 -254 -184 -183 -180 -216 -212 -204 -231 -227 -218 -231 -227 -218 -232 -228 -219 -233 -229 -220 -233 -228 -220 -231 -227 -218 -172 -168 -163 -12 -11 -12 -131 -131 -130 -246 -246 -246 -254 -254 -254 -199 -199 -199 -46 -46 -46 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -22 -22 -22 -148 -148 -148 -244 -244 -244 -255 -255 -255 -244 -244 -243 -148 -148 -147 -26 -26 -26 -137 -135 -130 -230 -224 -218 -234 -230 -222 -234 -230 -223 -234 -229 -223 -230 -225 -218 -160 -157 -154 -246 -246 -246 -255 -255 -255 -153 -153 -153 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -176 -176 -176 -255 -255 -255 -243 -243 -242 -156 -154 -149 -231 -228 -219 -231 -227 -218 -232 -228 -219 -232 -228 -219 -233 -229 -220 -232 -228 -219 -233 -229 -220 -206 -203 -195 -71 -70 -68 -33 -33 -33 -187 -187 -186 -253 -253 -253 -247 -247 -247 -144 -144 -144 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -22 -22 -22 -155 -155 -155 -244 -244 -244 -255 -255 -255 -237 -237 -237 -136 -136 -135 -0 -0 -0 -95 -94 -91 -216 -212 -205 -233 -229 -223 -234 -230 -223 -235 -230 -224 -235 -230 -224 -235 -230 -225 -166 -163 -159 -224 -223 -222 -255 -255 -255 -209 -209 -209 -13 -13 -13 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -46 -46 -46 -235 -235 -235 -255 -255 -255 -198 -198 -197 -202 -200 -193 -231 -227 -217 -231 -227 -218 -231 -227 -218 -233 -229 -220 -233 -229 -220 -233 -229 -220 -233 -229 -220 -227 -223 -215 -117 -115 -111 -0 -0 -0 -74 -74 -73 -234 -233 -233 -255 -255 -255 -232 -232 -232 -98 -98 -98 -110 -110 -110 -124 -124 -124 -92 -92 -92 -22 -22 -22 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -22 -22 -22 -165 -165 -165 -246 -246 -246 -255 -255 -255 -236 -236 -235 -126 -126 -125 -15 -15 -15 -49 -48 -46 -195 -192 -185 -232 -228 -220 -234 -230 -224 -235 -230 -224 -235 -230 -224 -235 -230 -224 -236 -231 -225 -191 -187 -182 -185 -184 -184 -255 -255 -255 -233 -233 -233 -34 -34 -34 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -148 -148 -148 -250 -250 -250 -250 -250 -250 -161 -161 -159 -228 -224 -215 -231 -226 -218 -232 -228 -219 -231 -227 -218 -233 -229 -220 -233 -229 -220 -233 -229 -220 -233 -229 -220 -234 -229 -220 -171 -168 -162 -11 -10 -12 -0 -0 -0 -141 -140 -140 -251 -251 -251 -255 -255 -255 -249 -249 -249 -253 -253 -253 -254 -254 -254 -249 -249 -249 -211 -211 -211 -132 -132 -132 -46 -46 -46 -0 -0 -0 -0 -0 -0 -0 -0 -0 -42 -42 -42 -178 -178 -178 -251 -251 -251 -255 -255 -254 -230 -230 -230 -112 -112 -111 -0 -0 -0 -20 -20 -19 -148 -147 -141 -228 -223 -214 -233 -229 -222 -234 -229 -223 -235 -230 -224 -235 -230 -224 -234 -229 -223 -234 -229 -223 -214 -209 -203 -146 -145 -144 -255 -255 -255 -251 -251 -251 -102 -102 -102 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -34 -34 -34 -201 -201 -201 -254 -254 -254 -225 -225 -225 -188 -187 -181 -230 -226 -217 -231 -227 -218 -232 -228 -219 -232 -228 -219 -233 -229 -220 -233 -229 -220 -233 -229 -220 -234 -230 -221 -233 -229 -220 -212 -209 -200 -28 -27 -27 -1 -1 -3 -43 -43 -43 -200 -200 -199 -254 -254 -254 -255 -255 -255 -255 -255 -254 -247 -246 -246 -255 -255 -255 -255 -255 -255 -246 -246 -246 -200 -200 -200 -110 -110 -110 -0 -0 -0 -0 -0 -0 -166 -166 -166 -248 -248 -248 -254 -254 -254 -221 -221 -221 -101 -101 -100 -0 -0 -0 -0 -0 -0 -88 -87 -83 -215 -211 -203 -234 -230 -221 -234 -229 -222 -234 -229 -223 -234 -229 -223 -235 -230 -224 -234 -229 -223 -234 -229 -223 -232 -227 -221 -127 -126 -124 -245 -245 -245 -254 -254 -254 -156 -156 -156 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -90 -90 -90 -231 -231 -231 -253 -253 -253 -197 -197 -196 -211 -208 -198 -231 -226 -218 -231 -228 -219 -231 -227 -218 -232 -228 -219 -233 -229 -220 -233 -229 -221 -232 -228 -221 -234 -230 -221 -233 -228 -219 -231 -227 -218 -102 -100 -98 -0 -0 -0 -4 -4 -5 -93 -92 -92 -224 -224 -224 -211 -211 -209 -137 -133 -131 -100 -92 -88 -159 -157 -155 -233 -233 -233 -253 -253 -253 -254 -254 -254 -245 -245 -245 -206 -206 -206 -211 -211 -211 -250 -250 -250 -255 -255 -255 -226 -226 -226 -87 -86 -86 -6 -6 -6 -2 -2 -2 -0 -0 -1 -184 -180 -175 -229 -223 -216 -223 -219 -211 -234 -229 -223 -234 -229 -223 -235 -230 -224 -235 -230 -224 -234 -229 -223 -234 -229 -223 -235 -230 -223 -156 -155 -150 -223 -223 -222 -255 -255 -255 -203 -203 -203 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -141 -141 -141 -253 -253 -253 -249 -249 -249 -176 -175 -171 -223 -219 -210 -231 -227 -218 -232 -228 -219 -232 -228 -219 -232 -228 -219 -233 -229 -220 -233 -228 -221 -232 -227 -221 -233 -229 -220 -233 -229 -220 -233 -228 -219 -166 -163 -158 -0 -0 -0 -0 -0 -2 -15 -5 -2 -88 -65 -48 -121 -77 -38 -147 -96 -55 -153 -100 -58 -127 -81 -44 -107 -88 -78 -185 -184 -183 -236 -236 -236 -255 -255 -255 -255 -255 -255 -255 -255 -255 -255 -255 -255 -221 -220 -221 -89 -89 -89 -0 -0 -0 -2 -2 -2 -0 -0 -0 -115 -112 -109 -210 -206 -200 -164 -159 -154 -202 -197 -192 -233 -228 -223 -235 -230 -224 -235 -230 -224 -235 -230 -224 -235 -230 -224 -234 -229 -223 -233 -228 -220 -190 -188 -182 -196 -196 -196 -255 -255 -255 -219 -219 -219 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -13 -13 -13 -193 -193 -193 -255 -255 -255 -234 -234 -234 -170 -168 -163 -231 -226 -217 -232 -228 -219 -232 -228 -219 -232 -228 -219 -232 -228 -220 -234 -229 -222 -234 -229 -222 -233 -228 -222 -233 -229 -220 -233 -229 -220 -231 -228 -219 -163 -161 -154 -0 -0 -0 -10 -5 -5 -87 -57 -33 -142 -92 -53 -154 -100 -55 -157 -101 -56 -157 -100 -56 -157 -101 -57 -149 -97 -54 -130 -89 -58 -120 -108 -102 -188 -188 -188 -249 -249 -249 -225 -225 -224 -175 -173 -171 -110 -99 -94 -71 -45 -28 -54 -35 -22 -22 -11 -7 -4 -0 -0 -106 -100 -96 -141 -117 -103 -136 -103 -83 -216 -212 -206 -235 -230 -224 -234 -229 -223 -234 -229 -223 -235 -230 -224 -236 -231 -225 -235 -230 -223 -233 -229 -220 -210 -206 -200 -176 -176 -176 -255 -255 -255 -230 -230 -230 -61 -61 -61 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -79 -79 -79 -241 -241 -241 -255 -255 -255 -190 -190 -189 -206 -203 -196 -231 -227 -218 -232 -228 -219 -232 -228 -219 -233 -229 -220 -233 -228 -220 -234 -229 -223 -234 -229 -221 -233 -229 -220 -233 -229 -220 -230 -226 -218 -171 -169 -163 -24 -23 -23 -3 -1 -3 -79 -52 -31 -141 -92 -53 -153 -99 -55 -155 -100 -56 -157 -101 -55 -158 -101 -56 -159 -102 -56 -158 -101 -57 -158 -101 -58 -152 -99 -58 -114 -79 -52 -106 -98 -95 -108 -84 -69 -147 -98 -60 -158 -102 -60 -159 -103 -59 -156 -102 -60 -148 -97 -59 -141 -92 -54 -151 -99 -58 -155 -102 -60 -164 -145 -134 -228 -224 -217 -234 -230 -224 -234 -229 -223 -235 -230 -224 -235 -230 -224 -235 -230 -224 -233 -228 -223 -233 -229 -221 -222 -219 -210 -162 -161 -161 -252 -251 -251 -241 -241 -241 -113 -113 -113 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -164 -164 -164 -254 -254 -254 -247 -247 -246 -150 -150 -146 -228 -224 -215 -232 -228 -219 -233 -229 -220 -232 -228 -219 -233 -229 -220 -233 -229 -221 -233 -228 -223 -233 -229 -221 -233 -229 -220 -231 -227 -218 -174 -172 -166 -46 -46 -45 -0 -0 -2 -78 -51 -30 -143 -93 -54 -155 -99 -55 -156 -100 -55 -157 -101 -56 -158 -101 -56 -160 -103 -58 -159 -102 -57 -159 -102 -57 -159 -101 -57 -158 -101 -56 -156 -102 -57 -136 -88 -50 -113 -75 -46 -153 -99 -58 -159 -103 -58 -160 -103 -58 -160 -103 -58 -160 -102 -58 -159 -103 -58 -159 -103 -58 -144 -104 -77 -208 -201 -196 -235 -230 -224 -234 -229 -223 -234 -229 -223 -234 -229 -223 -235 -230 -224 -235 -230 -224 -233 -229 -222 -234 -229 -222 -228 -224 -215 -167 -166 -165 -246 -246 -246 -245 -245 -245 -132 -132 -132 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -28 -28 -28 -215 -215 -215 -255 -255 -255 -215 -215 -215 -172 -172 -164 -232 -228 -218 -233 -229 -220 -233 -229 -220 -232 -228 -219 -233 -229 -220 -233 -229 -221 -234 -229 -223 -232 -228 -221 -233 -228 -219 -182 -179 -172 -41 -40 -39 -0 -0 -2 -62 -41 -24 -141 -91 -52 -154 -100 -55 -157 -101 -55 -158 -100 -56 -158 -100 -56 -159 -102 -57 -159 -102 -57 -159 -102 -57 -159 -102 -57 -159 -102 -57 -159 -102 -57 -159 -102 -57 -157 -102 -56 -150 -97 -56 -122 -81 -50 -158 -103 -58 -159 -102 -57 -159 -102 -57 -158 -101 -56 -159 -102 -57 -140 -91 -51 -178 -173 -167 -234 -228 -221 -235 -230 -223 -235 -230 -224 -234 -229 -223 -235 -230 -224 -235 -230 -224 -235 -230 -224 -233 -228 -223 -234 -230 -224 -229 -225 -218 -172 -171 -168 -240 -240 -240 -250 -250 -250 -149 -149 -149 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -105 -105 -105 -240 -240 -240 -253 -253 -253 -170 -170 -170 -169 -167 -161 -232 -228 -220 -232 -228 -219 -232 -228 -219 -233 -229 -220 -233 -229 -220 -233 -229 -221 -233 -228 -222 -232 -227 -219 -193 -190 -184 -55 -55 -53 -0 -0 -2 -8 -4 -4 -124 -82 -49 -157 -101 -57 -157 -100 -55 -158 -101 -56 -158 -101 -56 -158 -101 -56 -158 -101 -56 -159 -102 -57 -159 -102 -57 -159 -102 -57 -159 -103 -58 -159 -102 -57 -159 -102 -57 -158 -102 -57 -158 -103 -57 -152 -99 -56 -152 -99 -57 -159 -102 -57 -159 -102 -57 -159 -102 -56 -158 -101 -58 -140 -90 -53 -145 -122 -109 -204 -199 -193 -232 -228 -221 -234 -229 -223 -234 -229 -223 -234 -229 -223 -235 -230 -224 -234 -229 -223 -234 -229 -222 -234 -229 -224 -230 -226 -219 -176 -174 -170 -236 -235 -235 -252 -252 -252 -158 -158 -158 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -13 -13 -13 -155 -155 -155 -251 -251 -251 -243 -243 -242 -120 -121 -120 -126 -126 -121 -232 -228 -219 -232 -228 -219 -232 -228 -219 -233 -229 -220 -234 -230 -221 -233 -229 -220 -233 -229 -220 -218 -213 -206 -89 -87 -85 -4 -4 -4 -1 -1 -3 -25 -12 -9 -145 -95 -57 -157 -102 -56 -157 -100 -55 -159 -101 -56 -158 -101 -56 -158 -101 -56 -158 -101 -56 -158 -101 -56 -159 -102 -57 -159 -102 -57 -158 -101 -56 -159 -102 -57 -158 -101 -56 -159 -102 -57 -159 -103 -57 -159 -102 -57 -159 -103 -57 -160 -103 -58 -160 -103 -58 -160 -103 -58 -160 -103 -58 -159 -102 -58 -155 -102 -57 -142 -107 -84 -202 -197 -190 -235 -230 -223 -235 -230 -224 -235 -230 -224 -235 -230 -224 -234 -229 -223 -235 -230 -224 -234 -229 -223 -232 -228 -219 -183 -182 -176 -233 -233 -232 -254 -254 -254 -167 -167 -167 -13 -13 -13 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -22 -22 -22 -173 -173 -173 -254 -254 -254 -232 -232 -231 -54 -54 -53 -66 -65 -63 -210 -207 -199 -232 -228 -219 -232 -227 -221 -233 -228 -221 -233 -229 -220 -233 -229 -220 -233 -229 -220 -188 -187 -180 -0 -0 -0 -1 -1 -3 -26 -10 -6 -46 -26 -15 -154 -100 -58 -153 -99 -57 -149 -96 -56 -159 -102 -56 -158 -101 -56 -158 -101 -56 -158 -101 -56 -159 -102 -57 -158 -101 -56 -159 -102 -57 -159 -102 -57 -160 -103 -58 -159 -102 -57 -159 -102 -57 -160 -103 -58 -160 -103 -58 -160 -103 -58 -159 -102 -57 -159 -102 -57 -159 -102 -57 -159 -102 -57 -156 -101 -56 -158 -102 -57 -158 -102 -57 -135 -106 -88 -221 -216 -210 -235 -231 -224 -235 -230 -224 -234 -229 -223 -234 -229 -223 -234 -229 -223 -233 -229 -222 -232 -228 -219 -187 -184 -178 -228 -228 -228 -255 -255 -255 -185 -185 -185 -28 -28 -28 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -28 -28 -28 -183 -183 -183 -255 -255 -255 -226 -226 -226 -29 -30 -29 -23 -23 -24 -142 -140 -135 -226 -223 -214 -234 -229 -223 -233 -229 -222 -233 -229 -220 -233 -229 -220 -233 -229 -221 -135 -134 -129 -0 -0 -0 -17 -5 -4 -116 -54 -27 -108 -54 -29 -155 -101 -59 -136 -87 -52 -113 -73 -45 -159 -102 -57 -158 -101 -56 -157 -101 -56 -157 -101 -56 -157 -101 -55 -158 -101 -56 -158 -101 -56 -159 -102 -57 -159 -102 -57 -159 -102 -57 -159 -102 -57 -159 -102 -57 -159 -102 -57 -160 -103 -58 -159 -102 -57 -160 -103 -58 -160 -103 -58 -159 -102 -57 -140 -91 -54 -154 -100 -57 -156 -100 -56 -146 -96 -60 -171 -163 -154 -235 -231 -224 -235 -230 -224 -234 -229 -223 -234 -229 -223 -234 -229 -223 -235 -230 -224 -233 -228 -222 -185 -181 -176 -219 -219 -218 -255 -255 -255 -195 -195 -195 -38 -38 -38 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -28 -28 -28 -183 -183 -183 -255 -255 -255 -230 -229 -229 -40 -39 -39 -10 -11 -13 -31 -31 -31 -183 -181 -174 -232 -227 -220 -233 -228 -221 -233 -229 -220 -233 -229 -220 -227 -223 -214 -65 -64 -62 -3 -0 -0 -104 -48 -25 -178 -79 -39 -149 -69 -34 -138 -89 -52 -141 -84 -49 -114 -61 -36 -151 -100 -59 -158 -101 -56 -157 -101 -56 -156 -100 -56 -158 -101 -57 -158 -100 -56 -158 -101 -57 -157 -101 -56 -157 -101 -56 -159 -102 -57 -158 -101 -56 -160 -103 -58 -160 -103 -58 -160 -103 -58 -159 -102 -57 -160 -103 -58 -156 -102 -57 -160 -102 -58 -135 -88 -52 -151 -100 -59 -154 -100 -55 -123 -82 -50 -123 -116 -109 -226 -222 -216 -235 -230 -225 -233 -228 -223 -235 -230 -224 -235 -230 -224 -235 -230 -224 -233 -228 -222 -178 -175 -170 -213 -212 -211 -255 -255 -255 -196 -196 -196 -38 -38 -38 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -22 -22 -22 -173 -173 -173 -254 -254 -254 -238 -238 -238 -100 -100 -100 -13 -14 -16 -5 -7 -10 -59 -58 -57 -196 -193 -187 -233 -230 -221 -233 -229 -220 -234 -229 -220 -204 -201 -194 -20 -17 -17 -94 -41 -21 -171 -79 -39 -182 -81 -37 -174 -80 -39 -108 -66 -41 -141 -77 -44 -155 -74 -38 -122 -80 -47 -156 -101 -56 -156 -100 -56 -132 -88 -52 -142 -92 -54 -158 -101 -57 -157 -100 -55 -154 -99 -55 -150 -98 -56 -158 -101 -58 -159 -102 -57 -160 -103 -58 -160 -103 -58 -159 -102 -57 -160 -103 -58 -161 -104 -59 -131 -86 -52 -159 -103 -58 -134 -87 -52 -147 -97 -57 -143 -94 -55 -139 -91 -56 -154 -152 -150 -215 -211 -205 -234 -229 -222 -233 -228 -222 -235 -230 -224 -235 -230 -224 -235 -230 -224 -222 -217 -211 -97 -96 -94 -206 -206 -206 -255 -255 -255 -202 -202 -202 -46 -46 -46 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -125 -125 -125 -243 -243 -243 -253 -253 -253 -185 -185 -185 -39 -39 -39 -10 -10 -12 -8 -10 -12 -75 -73 -71 -137 -134 -128 -138 -135 -129 -139 -135 -130 -127 -122 -118 -70 -32 -19 -162 -75 -37 -181 -82 -37 -182 -81 -37 -182 -81 -38 -146 -69 -36 -134 -64 -36 -174 -80 -38 -137 -67 -38 -122 -78 -47 -152 -100 -58 -147 -95 -56 -84 -55 -34 -132 -88 -53 -157 -101 -56 -152 -99 -56 -128 -84 -51 -155 -100 -57 -159 -102 -57 -160 -103 -58 -160 -103 -58 -159 -102 -57 -159 -102 -57 -160 -103 -59 -122 -79 -49 -159 -103 -59 -128 -84 -51 -147 -97 -56 -129 -86 -53 -134 -90 -53 -142 -139 -136 -231 -227 -220 -233 -228 -220 -234 -229 -223 -235 -230 -224 -234 -230 -223 -230 -226 -218 -135 -133 -130 -63 -64 -63 -226 -226 -226 -255 -255 -255 -201 -201 -201 -42 -42 -42 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -197 -197 -197 -254 -254 -254 -248 -248 -248 -129 -130 -129 -0 -0 -0 -9 -10 -11 -54 -25 -17 -128 -62 -35 -141 -64 -37 -122 -56 -31 -84 -37 -21 -142 -65 -35 -180 -80 -38 -179 -81 -38 -179 -81 -37 -176 -80 -37 -164 -75 -37 -149 -69 -37 -146 -67 -33 -147 -68 -35 -127 -61 -35 -93 -52 -32 -114 -70 -42 -100 -64 -44 -59 -32 -19 -131 -85 -51 -153 -100 -57 -108 -70 -43 -146 -96 -56 -159 -102 -56 -160 -103 -58 -160 -103 -58 -158 -101 -56 -159 -102 -57 -157 -102 -59 -114 -75 -48 -155 -101 -58 -126 -83 -51 -150 -97 -58 -128 -85 -50 -108 -72 -44 -63 -61 -60 -198 -194 -189 -232 -228 -219 -235 -229 -224 -235 -230 -224 -224 -220 -215 -147 -144 -141 -42 -41 -41 -169 -169 -169 -250 -250 -250 -250 -250 -250 -156 -156 -156 -13 -13 -13 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -79 -79 -79 -227 -227 -227 -255 -255 -255 -233 -233 -233 -105 -105 -104 -0 -1 -3 -6 -6 -8 -60 -26 -15 -113 -50 -29 -158 -71 -34 -170 -76 -36 -178 -81 -38 -179 -80 -37 -175 -79 -36 -156 -71 -36 -108 -49 -25 -81 -39 -23 -88 -46 -30 -96 -51 -31 -96 -51 -32 -91 -46 -31 -87 -44 -29 -106 -52 -30 -147 -70 -36 -154 -70 -36 -124 -61 -34 -133 -88 -52 -126 -76 -47 -123 -76 -47 -160 -103 -58 -159 -102 -57 -159 -102 -57 -159 -102 -57 -159 -102 -57 -145 -94 -55 -106 -70 -44 -145 -94 -55 -117 -75 -47 -134 -88 -53 -103 -67 -43 -108 -55 -31 -30 -4 -0 -130 -128 -124 -230 -225 -218 -236 -230 -225 -213 -209 -203 -129 -126 -124 -0 -0 -0 -156 -156 -155 -247 -246 -246 -255 -255 -255 -215 -215 -215 -64 -64 -64 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -131 -131 -131 -246 -246 -246 -254 -254 -254 -215 -215 -215 -80 -80 -80 -7 -8 -9 -46 -20 -13 -141 -66 -36 -176 -79 -38 -181 -81 -37 -181 -82 -37 -179 -81 -37 -149 -69 -36 -67 -31 -18 -95 -51 -33 -120 -65 -43 -127 -68 -42 -131 -68 -43 -132 -70 -42 -133 -70 -41 -128 -69 -41 -97 -52 -32 -86 -41 -22 -162 -76 -38 -175 -80 -39 -112 -64 -39 -134 -74 -46 -139 -70 -39 -152 -100 -58 -159 -103 -58 -159 -102 -57 -159 -102 -57 -158 -102 -57 -129 -79 -49 -116 -76 -50 -124 -70 -44 -138 -78 -46 -92 -56 -34 -141 -68 -37 -171 -79 -38 -128 -59 -31 -29 -30 -29 -214 -210 -205 -178 -175 -170 -79 -78 -76 -15 -15 -16 -131 -131 -131 -244 -244 -244 -255 -255 -255 -233 -233 -233 -90 -90 -90 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -125 -125 -125 -230 -230 -230 -255 -255 -255 -254 -254 -254 -168 -168 -167 -46 -24 -19 -142 -66 -35 -178 -81 -39 -180 -80 -38 -182 -81 -37 -181 -81 -38 -158 -72 -36 -74 -36 -21 -112 -59 -38 -109 -57 -36 -95 -51 -32 -84 -45 -28 -73 -39 -26 -81 -43 -27 -108 -57 -36 -126 -67 -41 -135 -72 -44 -113 -60 -37 -96 -46 -27 -168 -77 -38 -153 -72 -37 -135 -64 -33 -161 -76 -41 -139 -90 -54 -159 -102 -57 -158 -102 -57 -159 -102 -59 -143 -92 -55 -123 -63 -39 -106 -59 -40 -152 -72 -38 -120 -62 -37 -133 -63 -37 -182 -82 -39 -179 -80 -37 -167 -77 -38 -72 -31 -11 -62 -60 -58 -0 -0 -0 -0 -0 -0 -117 -117 -117 -233 -232 -232 -255 -255 -255 -237 -237 -237 -128 -128 -128 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -34 -34 -34 -77 -77 -77 -113 -113 -113 -190 -190 -190 -241 -241 -241 -255 -255 -255 -253 -253 -253 -203 -202 -202 -90 -87 -86 -137 -65 -35 -178 -80 -37 -179 -82 -37 -180 -81 -38 -182 -81 -38 -171 -78 -38 -93 -44 -24 -115 -61 -40 -136 -70 -44 -137 -71 -43 -135 -71 -43 -133 -69 -42 -125 -65 -40 -103 -54 -34 -63 -31 -22 -52 -26 -17 -78 -42 -27 -108 -58 -37 -100 -55 -37 -116 -57 -32 -177 -80 -39 -174 -79 -39 -171 -80 -40 -135 -87 -53 -159 -102 -57 -158 -102 -56 -140 -92 -55 -102 -60 -40 -81 -39 -24 -59 -30 -21 -73 -36 -22 -45 -23 -17 -83 -38 -23 -136 -63 -34 -175 -80 -39 -179 -80 -38 -117 -54 -25 -10 -1 -0 -0 -0 -0 -108 -107 -107 -234 -234 -234 -255 -255 -255 -247 -247 -247 -150 -150 -150 -13 -13 -13 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -90 -90 -90 -213 -213 -213 -251 -251 -251 -254 -254 -254 -255 -255 -255 -254 -254 -254 -239 -239 -238 -169 -169 -168 -58 -38 -33 -136 -63 -32 -178 -82 -38 -180 -81 -36 -180 -82 -37 -180 -81 -37 -180 -82 -37 -134 -62 -33 -100 -53 -34 -135 -70 -43 -136 -71 -43 -137 -72 -44 -137 -72 -44 -136 -71 -44 -137 -73 -44 -136 -72 -43 -136 -70 -44 -119 -63 -41 -88 -45 -30 -62 -30 -20 -69 -37 -25 -63 -32 -21 -154 -71 -38 -182 -81 -38 -168 -80 -40 -134 -87 -52 -156 -101 -56 -140 -90 -55 -70 -46 -30 -40 -37 -35 -63 -60 -57 -70 -68 -66 -71 -70 -67 -70 -69 -66 -64 -63 -60 -49 -48 -46 -90 -47 -31 -161 -74 -37 -143 -65 -34 -35 -20 -17 -121 -121 -121 -234 -234 -234 -255 -255 -255 -244 -244 -244 -144 -144 -144 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -13 -13 -13 -182 -182 -182 -255 -255 -255 -255 -255 -255 -254 -254 -254 -236 -236 -235 -190 -190 -189 -110 -109 -108 -91 -38 -19 -149 -69 -36 -177 -80 -39 -179 -81 -35 -180 -81 -37 -179 -81 -38 -179 -81 -37 -173 -80 -40 -84 -40 -25 -127 -67 -42 -136 -71 -43 -137 -72 -44 -137 -72 -44 -137 -72 -44 -140 -75 -46 -144 -78 -49 -144 -77 -49 -138 -74 -46 -137 -72 -43 -138 -73 -45 -132 -70 -43 -128 -68 -41 -116 -62 -40 -107 -49 -26 -180 -82 -40 -163 -79 -39 -134 -89 -53 -119 -77 -46 -57 -40 -30 -53 -53 -50 -71 -68 -65 -79 -75 -72 -78 -77 -73 -78 -74 -71 -78 -75 -72 -80 -77 -74 -75 -74 -70 -63 -64 -61 -75 -44 -35 -131 -62 -35 -120 -115 -114 -236 -236 -236 -255 -255 -255 -246 -246 -246 -155 -155 -155 -22 -22 -22 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -22 -22 -22 -204 -204 -204 -255 -255 -255 -254 -254 -254 -214 -213 -213 -96 -96 -95 -66 -54 -53 -136 -67 -40 -170 -77 -38 -175 -79 -37 -176 -80 -39 -177 -80 -38 -179 -80 -37 -179 -80 -38 -180 -80 -38 -146 -68 -35 -86 -44 -29 -136 -71 -43 -136 -71 -43 -137 -72 -44 -137 -72 -44 -137 -72 -44 -138 -74 -45 -139 -77 -49 -125 -74 -52 -106 -69 -55 -91 -62 -52 -104 -64 -51 -129 -70 -45 -136 -71 -43 -133 -72 -44 -89 -41 -23 -173 -78 -39 -135 -65 -33 -108 -60 -39 -68 -36 -24 -58 -55 -52 -70 -69 -65 -73 -71 -67 -82 -78 -75 -84 -82 -78 -92 -89 -86 -98 -94 -91 -98 -95 -92 -87 -85 -82 -75 -75 -71 -69 -67 -64 -54 -34 -27 -141 -139 -139 -255 -255 -255 -253 -253 -253 -155 -155 -155 -22 -22 -22 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -13 -13 -13 -157 -157 -157 -251 -251 -251 -255 -255 -255 -250 -250 -250 -216 -215 -215 -177 -177 -175 -157 -147 -145 -142 -120 -114 -109 -73 -61 -100 -47 -25 -165 -74 -37 -179 -80 -37 -179 -80 -38 -179 -81 -39 -110 -49 -25 -111 -58 -37 -136 -71 -42 -136 -71 -42 -135 -71 -43 -136 -71 -44 -121 -64 -40 -97 -52 -33 -55 -30 -22 -82 -81 -78 -157 -154 -149 -161 -159 -154 -150 -148 -143 -103 -80 -72 -136 -72 -43 -135 -72 -43 -94 -46 -28 -168 -76 -36 -169 -76 -37 -154 -71 -36 -65 -47 -41 -69 -69 -65 -70 -69 -65 -76 -75 -71 -83 -79 -76 -89 -86 -82 -97 -93 -90 -106 -102 -99 -104 -100 -97 -100 -97 -93 -79 -78 -74 -74 -74 -70 -59 -59 -56 -83 -83 -83 -248 -248 -248 -254 -254 -254 -142 -142 -142 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -53 -53 -53 -169 -169 -169 -240 -240 -240 -254 -254 -254 -255 -255 -255 -254 -254 -254 -248 -248 -248 -222 -222 -222 -85 -75 -72 -145 -68 -32 -179 -80 -38 -179 -80 -37 -178 -80 -38 -179 -81 -38 -108 -48 -24 -118 -62 -38 -136 -71 -43 -134 -70 -41 -108 -57 -37 -78 -41 -26 -43 -21 -14 -3 -1 -2 -7 -9 -9 -117 -115 -110 -171 -169 -162 -170 -167 -162 -171 -168 -162 -135 -125 -120 -131 -69 -39 -135 -72 -43 -96 -50 -31 -137 -65 -34 -156 -72 -38 -137 -64 -32 -59 -57 -52 -68 -67 -63 -70 -69 -65 -78 -77 -73 -84 -80 -77 -91 -87 -84 -98 -94 -91 -109 -105 -102 -109 -105 -102 -106 -102 -99 -86 -83 -80 -76 -74 -70 -73 -72 -68 -67 -66 -66 -223 -222 -222 -255 -255 -255 -233 -233 -233 -141 -141 -141 -22 -22 -22 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -13 -13 -13 -73 -73 -73 -168 -168 -168 -244 -244 -244 -255 -255 -255 -248 -248 -248 -135 -133 -132 -118 -54 -29 -156 -70 -37 -174 -79 -37 -180 -80 -37 -179 -80 -38 -180 -81 -39 -128 -59 -30 -112 -58 -36 -136 -71 -43 -134 -71 -42 -132 -71 -44 -111 -61 -39 -43 -21 -15 -0 -0 -0 -72 -70 -69 -157 -154 -148 -170 -167 -160 -170 -167 -160 -170 -167 -160 -162 -149 -140 -134 -69 -37 -136 -71 -43 -78 -41 -25 -109 -49 -26 -110 -51 -28 -60 -31 -21 -59 -58 -55 -64 -63 -59 -70 -69 -65 -74 -73 -69 -78 -77 -74 -89 -87 -83 -99 -95 -92 -112 -108 -105 -114 -110 -107 -111 -107 -104 -99 -95 -92 -78 -74 -71 -74 -72 -68 -51 -50 -48 -161 -161 -161 -248 -248 -248 -255 -255 -255 -241 -241 -241 -90 -90 -90 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -93 -93 -93 -203 -203 -203 -251 -251 -251 -252 -252 -252 -180 -181 -180 -55 -39 -36 -140 -67 -38 -169 -78 -37 -179 -80 -38 -179 -80 -37 -179 -80 -37 -179 -80 -38 -154 -71 -36 -85 -44 -28 -135 -72 -44 -134 -72 -43 -135 -72 -42 -135 -71 -43 -116 -62 -40 -98 -77 -68 -154 -150 -144 -170 -167 -160 -170 -166 -159 -170 -167 -161 -170 -168 -162 -161 -144 -133 -135 -68 -39 -129 -69 -44 -92 -42 -22 -177 -81 -39 -179 -80 -39 -111 -53 -30 -58 -58 -54 -64 -63 -60 -69 -68 -65 -73 -72 -69 -74 -73 -71 -82 -80 -78 -98 -94 -91 -110 -106 -103 -115 -111 -108 -114 -110 -107 -108 -104 -101 -85 -80 -77 -74 -72 -68 -53 -52 -48 -56 -55 -55 -185 -185 -183 -254 -254 -254 -255 -255 -255 -128 -128 -128 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -13 -13 -13 -130 -130 -130 -238 -238 -238 -253 -253 -253 -254 -254 -254 -214 -213 -213 -89 -68 -63 -146 -68 -36 -173 -78 -36 -177 -80 -36 -179 -80 -38 -178 -79 -37 -179 -80 -38 -179 -80 -37 -177 -79 -40 -94 -46 -27 -120 -65 -40 -135 -71 -43 -135 -71 -43 -135 -71 -43 -134 -70 -42 -133 -74 -48 -147 -115 -100 -163 -151 -141 -166 -157 -148 -161 -145 -134 -148 -117 -104 -136 -83 -62 -135 -71 -44 -98 -51 -33 -133 -63 -33 -181 -82 -37 -181 -81 -37 -138 -63 -33 -58 -56 -52 -64 -63 -61 -66 -65 -63 -72 -71 -69 -74 -73 -71 -78 -77 -74 -92 -90 -87 -106 -102 -99 -114 -110 -107 -112 -108 -105 -110 -106 -103 -92 -89 -86 -76 -74 -70 -61 -58 -55 -160 -161 -160 -246 -246 -246 -255 -255 -255 -251 -251 -251 -108 -108 -108 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -90 -90 -90 -230 -230 -230 -255 -255 -255 -252 -251 -251 -207 -207 -207 -122 -89 -80 -159 -72 -34 -175 -78 -37 -178 -80 -37 -177 -80 -37 -178 -79 -37 -179 -80 -38 -179 -80 -38 -178 -80 -38 -179 -80 -39 -154 -71 -36 -91 -48 -30 -129 -69 -42 -135 -71 -42 -134 -70 -42 -134 -70 -42 -135 -71 -43 -134 -70 -41 -134 -73 -43 -135 -75 -47 -133 -66 -35 -134 -67 -36 -134 -68 -39 -118 -62 -39 -57 -29 -18 -128 -62 -35 -141 -64 -32 -157 -71 -35 -139 -64 -34 -60 -51 -47 -64 -63 -60 -64 -63 -60 -68 -67 -65 -73 -72 -70 -75 -74 -72 -85 -85 -83 -96 -93 -91 -105 -101 -98 -106 -103 -100 -103 -101 -97 -86 -85 -81 -76 -74 -70 -63 -59 -57 -172 -171 -171 -254 -254 -254 -255 -255 -255 -235 -235 -235 -135 -135 -135 -42 -42 -42 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -124 -124 -124 -251 -251 -251 -250 -250 -250 -164 -163 -162 -127 -81 -68 -169 -76 -36 -177 -79 -36 -176 -79 -36 -177 -80 -37 -179 -82 -39 -179 -80 -38 -179 -80 -38 -179 -82 -40 -178 -82 -41 -179 -81 -40 -177 -80 -39 -140 -65 -35 -84 -43 -27 -127 -68 -43 -135 -71 -44 -134 -72 -45 -133 -74 -47 -136 -82 -58 -143 -99 -81 -149 -114 -98 -152 -124 -111 -154 -130 -118 -148 -122 -111 -67 -41 -34 -11 -7 -6 -8 -4 -3 -17 -6 -4 -47 -20 -11 -60 -25 -15 -35 -29 -28 -65 -64 -60 -63 -62 -60 -64 -63 -61 -69 -68 -66 -74 -73 -71 -78 -77 -75 -88 -87 -85 -92 -91 -88 -93 -93 -89 -84 -83 -79 -74 -73 -69 -73 -71 -67 -52 -40 -36 -136 -98 -89 -212 -209 -207 -254 -254 -254 -255 -255 -255 -244 -244 -244 -190 -190 -190 -50 -50 -50 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -117 -117 -117 -246 -246 -246 -253 -253 -253 -204 -204 -204 -121 -92 -85 -159 -73 -35 -176 -79 -37 -177 -80 -37 -178 -80 -37 -179 -80 -38 -180 -80 -38 -179 -80 -38 -181 -93 -59 -208 -167 -148 -201 -153 -134 -191 -135 -115 -190 -133 -113 -158 -131 -119 -97 -87 -80 -124 -100 -89 -150 -133 -123 -163 -153 -145 -170 -165 -156 -171 -167 -159 -170 -166 -159 -168 -165 -158 -156 -153 -147 -115 -113 -110 -165 -163 -159 -94 -93 -90 -0 -1 -1 -4 -4 -4 -2 -2 -2 -64 -63 -61 -121 -119 -115 -52 -53 -49 -64 -63 -59 -63 -62 -60 -64 -63 -61 -69 -68 -66 -72 -71 -69 -75 -74 -72 -80 -79 -77 -77 -76 -73 -69 -68 -64 -70 -69 -65 -58 -58 -55 -99 -47 -27 -172 -79 -40 -150 -78 -56 -192 -184 -183 -246 -245 -246 -255 -255 -255 -244 -244 -244 -114 -114 -114 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -61 -61 -61 -202 -202 -202 -254 -254 -254 -254 -254 -254 -215 -215 -215 -119 -106 -102 -139 -60 -23 -175 -79 -37 -177 -81 -37 -179 -80 -38 -179 -80 -38 -179 -80 -37 -179 -82 -42 -196 -141 -122 -231 -220 -209 -233 -225 -216 -232 -226 -215 -231 -226 -217 -209 -205 -197 -168 -164 -160 -128 -126 -122 -105 -102 -99 -120 -117 -114 -131 -129 -125 -132 -129 -125 -120 -118 -113 -133 -132 -127 -202 -199 -192 -233 -228 -220 -202 -198 -192 -91 -90 -87 -0 -0 -0 -69 -68 -66 -185 -182 -176 -222 -218 -211 -134 -132 -127 -50 -50 -47 -65 -64 -62 -64 -63 -62 -64 -63 -61 -66 -65 -63 -66 -65 -63 -66 -65 -63 -65 -63 -61 -64 -63 -60 -60 -59 -55 -83 -46 -33 -168 -77 -39 -177 -80 -37 -143 -66 -32 -109 -71 -62 -197 -197 -197 -253 -253 -253 -250 -250 -250 -125 -125 -125 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -73 -73 -73 -201 -201 -201 -251 -251 -251 -254 -254 -254 -236 -236 -236 -141 -138 -138 -118 -63 -45 -165 -76 -38 -177 -79 -38 -178 -79 -37 -178 -80 -38 -178 -81 -38 -179 -81 -40 -204 -160 -144 -231 -221 -213 -232 -226 -218 -232 -227 -218 -231 -227 -218 -230 -226 -217 -224 -220 -211 -200 -196 -188 -168 -165 -159 -150 -148 -143 -150 -148 -144 -183 -180 -175 -225 -221 -214 -233 -229 -220 -233 -229 -220 -233 -229 -220 -216 -212 -204 -151 -149 -144 -211 -208 -201 -231 -227 -218 -232 -228 -219 -219 -217 -209 -128 -127 -123 -65 -64 -63 -66 -65 -62 -67 -66 -62 -67 -66 -62 -65 -64 -61 -64 -63 -60 -64 -64 -61 -60 -59 -56 -82 -46 -35 -162 -74 -38 -181 -82 -40 -181 -82 -38 -132 -62 -34 -143 -136 -134 -240 -240 -240 -254 -254 -254 -255 -255 -255 -226 -226 -226 -90 -90 -90 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -28 -28 -28 -170 -170 -170 -242 -242 -242 -255 -255 -255 -246 -246 -246 -175 -175 -174 -98 -69 -64 -137 -60 -22 -166 -75 -36 -176 -81 -38 -179 -80 -37 -179 -80 -37 -176 -80 -37 -203 -160 -144 -228 -220 -210 -231 -228 -219 -232 -228 -219 -232 -228 -219 -232 -228 -219 -233 -228 -220 -233 -229 -220 -231 -228 -218 -188 -185 -178 -159 -156 -152 -217 -214 -206 -234 -230 -222 -233 -229 -220 -234 -230 -221 -219 -214 -208 -192 -189 -182 -232 -229 -220 -234 -230 -221 -234 -229 -222 -228 -224 -218 -177 -176 -170 -154 -152 -149 -131 -129 -126 -91 -89 -88 -52 -51 -49 -42 -41 -38 -50 -50 -47 -101 -99 -96 -153 -151 -147 -194 -159 -147 -190 -112 -84 -182 -85 -43 -183 -82 -39 -183 -83 -39 -162 -75 -40 -161 -137 -133 -216 -215 -215 -250 -250 -250 -255 -255 -255 -210 -210 -210 -42 -42 -42 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -28 -28 -28 -126 -126 -126 -230 -230 -230 -255 -255 -255 -251 -251 -251 -218 -218 -218 -138 -135 -134 -81 -46 -36 -109 -54 -33 -130 -62 -36 -137 -64 -33 -148 -68 -34 -187 -132 -112 -228 -219 -209 -232 -228 -219 -232 -228 -219 -233 -229 -220 -233 -229 -220 -232 -228 -219 -233 -229 -220 -231 -227 -218 -227 -223 -214 -216 -211 -204 -179 -176 -169 -171 -169 -163 -184 -182 -176 -169 -167 -160 -141 -140 -136 -156 -155 -150 -150 -148 -145 -201 -197 -192 -207 -203 -197 -167 -165 -159 -176 -172 -164 -214 -210 -202 -227 -223 -215 -219 -214 -207 -207 -203 -196 -198 -194 -187 -206 -202 -195 -220 -214 -207 -232 -227 -221 -235 -227 -219 -230 -212 -200 -202 -146 -122 -182 -81 -36 -183 -82 -38 -182 -82 -37 -175 -78 -35 -150 -93 -76 -184 -184 -183 -253 -253 -253 -238 -238 -238 -93 -93 -93 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -13 -13 -13 -122 -122 -122 -210 -210 -210 -233 -233 -233 -253 -253 -253 -255 -255 -255 -255 -255 -255 -252 -252 -252 -234 -233 -233 -205 -204 -204 -181 -180 -179 -107 -105 -104 -140 -99 -84 -207 -193 -180 -224 -219 -210 -231 -227 -218 -232 -228 -219 -232 -228 -219 -232 -228 -219 -233 -229 -220 -232 -228 -219 -233 -229 -220 -232 -228 -220 -232 -228 -219 -230 -227 -217 -222 -219 -210 -162 -159 -155 -180 -179 -172 -205 -201 -195 -203 -199 -193 -186 -184 -178 -134 -133 -128 -184 -181 -172 -215 -211 -201 -228 -223 -214 -231 -227 -218 -232 -228 -220 -234 -230 -221 -234 -229 -223 -234 -228 -222 -233 -228 -221 -234 -229 -223 -235 -228 -220 -226 -207 -196 -195 -135 -113 -182 -85 -44 -182 -81 -37 -169 -76 -37 -165 -75 -37 -147 -74 -49 -137 -121 -118 -228 -228 -228 -255 -255 -255 -227 -227 -227 -66 -66 -66 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -64 -64 -64 -225 -225 -225 -255 -255 -255 -255 -255 -255 -255 -255 -255 -255 -255 -255 -255 -255 -255 -255 -255 -255 -255 -255 -255 -255 -255 -255 -234 -233 -233 -85 -79 -78 -111 -94 -88 -100 -97 -94 -152 -149 -144 -228 -224 -215 -232 -228 -219 -233 -229 -220 -232 -228 -219 -233 -229 -220 -232 -228 -219 -233 -229 -220 -233 -229 -222 -233 -228 -221 -233 -229 -220 -232 -228 -219 -225 -221 -213 -227 -223 -213 -229 -225 -215 -228 -224 -214 -224 -220 -211 -214 -211 -202 -227 -223 -214 -229 -225 -216 -232 -228 -219 -233 -229 -220 -233 -229 -220 -234 -230 -221 -234 -230 -222 -234 -229 -222 -233 -228 -220 -233 -223 -213 -210 -172 -156 -186 -103 -73 -182 -79 -32 -184 -82 -38 -183 -82 -38 -127 -60 -33 -79 -69 -67 -187 -187 -187 -240 -240 -240 -255 -255 -255 -246 -246 -246 -146 -146 -146 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -85 -85 -85 -244 -244 -244 -255 -255 -255 -230 -230 -229 -254 -253 -253 -255 -255 -255 -255 -255 -255 -255 -255 -255 -255 -255 -255 -255 -255 -255 -235 -234 -234 -209 -209 -209 -227 -227 -227 -236 -236 -235 -189 -188 -188 -205 -200 -194 -231 -226 -217 -232 -228 -219 -232 -228 -219 -233 -229 -220 -234 -230 -221 -234 -230 -221 -234 -229 -223 -232 -228 -221 -233 -229 -220 -231 -227 -218 -230 -226 -217 -229 -225 -216 -229 -225 -216 -227 -223 -214 -228 -224 -215 -227 -223 -214 -230 -226 -217 -231 -227 -218 -233 -229 -220 -233 -229 -220 -233 -229 -220 -234 -230 -220 -232 -225 -217 -225 -207 -195 -209 -173 -161 -188 -117 -93 -177 -86 -49 -175 -80 -37 -174 -80 -39 -167 -79 -40 -147 -69 -36 -107 -58 -40 -59 -57 -57 -183 -183 -182 -252 -252 -252 -252 -252 -252 -161 -161 -161 -22 -22 -22 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -61 -61 -61 -224 -224 -224 -255 -255 -255 -203 -203 -203 -206 -206 -206 -253 -253 -253 -255 -255 -255 -255 -255 -255 -255 -255 -255 -255 -255 -255 -255 -255 -255 -255 -255 -255 -255 -255 -255 -252 -252 -252 -181 -180 -180 -123 -120 -117 -217 -213 -205 -220 -216 -208 -232 -228 -218 -233 -229 -220 -234 -229 -222 -234 -229 -223 -234 -229 -223 -234 -229 -222 -234 -230 -222 -233 -229 -221 -232 -228 -219 -231 -227 -218 -232 -228 -219 -232 -228 -219 -231 -227 -218 -230 -226 -217 -231 -227 -218 -232 -228 -219 -233 -229 -220 -234 -229 -221 -233 -229 -221 -234 -229 -220 -227 -214 -202 -187 -128 -106 -139 -64 -30 -166 -75 -38 -144 -68 -39 -94 -46 -29 -75 -49 -44 -127 -125 -125 -154 -155 -155 -181 -180 -180 -209 -208 -208 -235 -235 -235 -254 -254 -254 -237 -237 -237 -98 -98 -98 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -34 -34 -34 -190 -190 -190 -255 -255 -255 -235 -235 -235 -134 -127 -122 -170 -166 -163 -237 -237 -236 -254 -254 -254 -255 -255 -255 -255 -255 -255 -255 -255 -255 -255 -255 -255 -249 -249 -249 -182 -181 -180 -110 -87 -72 -76 -65 -59 -157 -154 -151 -147 -144 -140 -231 -227 -217 -233 -229 -220 -233 -229 -221 -234 -229 -222 -233 -228 -222 -234 -229 -223 -235 -230 -224 -235 -230 -224 -234 -230 -222 -232 -228 -219 -233 -229 -220 -233 -229 -220 -232 -228 -219 -231 -227 -218 -231 -227 -218 -231 -227 -218 -233 -228 -221 -231 -222 -214 -213 -197 -187 -184 -159 -146 -158 -121 -107 -161 -92 -67 -140 -69 -43 -67 -32 -21 -82 -43 -30 -59 -35 -29 -59 -59 -58 -219 -219 -218 -251 -251 -251 -255 -255 -255 -255 -255 -255 -255 -255 -255 -249 -249 -249 -173 -173 -173 -34 -34 -34 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -132 -132 -132 -245 -245 -245 -253 -253 -253 -182 -179 -178 -134 -92 -60 -126 -96 -78 -167 -160 -157 -205 -203 -201 -218 -217 -215 -215 -213 -213 -194 -190 -188 -131 -119 -112 -119 -80 -52 -121 -81 -51 -110 -76 -52 -60 -51 -45 -56 -47 -42 -204 -201 -193 -232 -228 -218 -232 -228 -219 -232 -228 -220 -233 -228 -222 -234 -229 -223 -235 -230 -224 -235 -230 -224 -234 -229 -223 -234 -230 -221 -233 -229 -220 -233 -229 -220 -231 -227 -218 -232 -228 -219 -232 -228 -219 -231 -227 -218 -226 -221 -213 -121 -114 -109 -134 -130 -129 -175 -174 -173 -195 -195 -194 -169 -167 -167 -145 -139 -138 -168 -168 -167 -231 -231 -230 -238 -238 -238 -245 -245 -244 -254 -254 -254 -253 -253 -253 -234 -234 -234 -212 -212 -212 -190 -190 -190 -114 -114 -114 -13 -13 -13 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -64 -64 -64 -219 -219 -219 -255 -255 -255 -240 -240 -239 -140 -131 -126 -132 -85 -49 -141 -89 -46 -130 -80 -37 -128 -80 -43 -125 -78 -42 -128 -78 -36 -133 -85 -48 -136 -88 -54 -137 -90 -55 -124 -83 -55 -88 -60 -40 -87 -60 -42 -140 -138 -133 -229 -225 -216 -230 -226 -217 -232 -228 -219 -232 -228 -220 -234 -230 -222 -234 -229 -223 -233 -229 -221 -233 -229 -221 -233 -229 -220 -232 -228 -219 -232 -228 -219 -232 -228 -219 -231 -227 -218 -231 -227 -218 -231 -227 -218 -228 -223 -214 -122 -121 -119 -250 -250 -250 -255 -255 -255 -255 -255 -255 -255 -255 -255 -253 -253 -253 -247 -247 -247 -254 -254 -254 -255 -255 -255 -255 -255 -255 -251 -251 -251 -208 -208 -208 -88 -88 -88 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -118 -118 -118 -248 -248 -248 -255 -255 -255 -233 -232 -232 -114 -104 -100 -116 -78 -52 -133 -86 -51 -149 -96 -55 -150 -96 -55 -138 -90 -55 -126 -82 -49 -146 -94 -53 -137 -90 -55 -150 -98 -57 -103 -70 -46 -123 -83 -55 -80 -77 -75 -208 -204 -196 -232 -228 -219 -231 -227 -218 -231 -227 -218 -232 -228 -220 -233 -228 -222 -233 -229 -221 -233 -229 -219 -233 -229 -220 -233 -229 -220 -233 -229 -220 -233 -229 -220 -232 -228 -219 -231 -227 -218 -205 -203 -195 -224 -220 -211 -138 -137 -134 -248 -248 -247 -255 -255 -255 -231 -231 -231 -237 -237 -237 -246 -246 -246 -250 -250 -250 -245 -245 -245 -184 -184 -184 -168 -168 -168 -114 -114 -114 -56 -56 -56 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -173 -173 -173 -247 -247 -247 -255 -255 -255 -231 -231 -231 -162 -155 -153 -125 -96 -79 -127 -84 -48 -119 -78 -48 -129 -85 -51 -146 -95 -54 -144 -94 -52 -156 -101 -57 -138 -91 -53 -114 -78 -51 -116 -79 -52 -56 -41 -32 -166 -162 -158 -229 -225 -217 -232 -228 -219 -232 -228 -219 -232 -228 -219 -232 -228 -219 -232 -228 -219 -231 -227 -218 -232 -228 -219 -232 -228 -219 -232 -228 -219 -232 -228 -219 -232 -228 -219 -231 -227 -218 -137 -136 -132 -128 -129 -129 -135 -136 -136 -240 -240 -239 -254 -254 -254 -159 -159 -159 -0 -0 -0 -101 -101 -101 -140 -140 -140 -104 -104 -104 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -38 -38 -38 -175 -175 -175 -251 -251 -251 -255 -255 -255 -247 -247 -247 -182 -179 -178 -106 -72 -44 -149 -95 -54 -154 -98 -57 -152 -98 -56 -157 -101 -57 -144 -93 -54 -86 -56 -36 -122 -82 -52 -102 -68 -43 -111 -75 -48 -102 -97 -93 -223 -219 -210 -232 -228 -219 -232 -228 -219 -231 -227 -218 -232 -228 -219 -232 -228 -219 -232 -228 -219 -232 -228 -219 -232 -228 -219 -232 -228 -219 -233 -229 -220 -232 -228 -219 -232 -228 -219 -202 -199 -192 -196 -196 -195 -241 -241 -241 -252 -252 -252 -254 -254 -254 -142 -142 -142 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -79 -79 -79 -214 -214 -214 -254 -254 -254 -251 -251 -251 -203 -200 -198 -115 -84 -65 -118 -78 -49 -149 -96 -57 -150 -97 -54 -157 -101 -56 -146 -94 -55 -104 -68 -42 -137 -89 -52 -133 -87 -54 -135 -90 -53 -130 -85 -50 -75 -49 -29 -193 -188 -181 -232 -227 -218 -231 -227 -218 -233 -229 -220 -232 -228 -219 -232 -228 -219 -231 -227 -218 -232 -228 -219 -232 -228 -219 -231 -227 -218 -231 -227 -218 -232 -228 -219 -233 -229 -220 -225 -221 -212 -176 -175 -171 -246 -246 -246 -255 -255 -255 -242 -242 -242 -110 -110 -110 -13 -13 -13 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -22 -22 -22 -199 -199 -199 -254 -254 -254 -252 -252 -252 -190 -185 -182 -126 -93 -72 -123 -82 -50 -146 -96 -54 -147 -95 -53 -157 -102 -57 -150 -97 -57 -106 -70 -44 -137 -89 -54 -139 -89 -53 -144 -94 -55 -148 -95 -56 -133 -88 -53 -56 -38 -24 -123 -121 -117 -226 -221 -212 -231 -227 -218 -231 -227 -218 -230 -226 -217 -231 -227 -218 -232 -228 -219 -231 -227 -218 -231 -227 -218 -233 -229 -220 -233 -229 -220 -233 -229 -220 -233 -229 -220 -234 -230 -221 -196 -194 -187 -194 -194 -192 -255 -255 -255 -255 -255 -255 -235 -235 -235 -169 -169 -169 -115 -115 -115 -38 -38 -38 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -167 -167 -167 -252 -252 -252 -254 -254 -254 -195 -192 -189 -128 -89 -61 -125 -82 -49 -150 -97 -54 -151 -97 -53 -154 -100 -56 -149 -98 -55 -104 -69 -42 -122 -81 -51 -125 -82 -48 -146 -96 -56 -155 -100 -55 -144 -93 -53 -105 -71 -44 -78 -55 -38 -62 -59 -55 -199 -195 -187 -228 -224 -215 -228 -224 -215 -229 -225 -216 -230 -226 -217 -231 -227 -218 -232 -228 -219 -232 -228 -219 -233 -229 -220 -232 -228 -219 -233 -229 -220 -234 -229 -222 -233 -229 -222 -232 -228 -221 -151 -150 -146 -194 -194 -194 -248 -248 -247 -255 -255 -255 -251 -251 -251 -247 -247 -247 -229 -229 -229 -185 -185 -185 -108 -108 -108 -53 -53 -53 -22 -22 -22 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -108 -108 -108 -238 -238 -238 -255 -255 -255 -216 -214 -213 -134 -97 -73 -129 -84 -50 -150 -96 -54 -155 -100 -55 -153 -99 -54 -151 -97 -56 -109 -72 -42 -98 -67 -42 -125 -84 -50 -143 -93 -53 -147 -95 -53 -144 -93 -53 -129 -84 -49 -103 -69 -46 -108 -73 -48 -53 -43 -37 -172 -170 -162 -229 -225 -216 -230 -226 -217 -230 -226 -217 -230 -226 -217 -231 -227 -218 -232 -228 -219 -233 -229 -220 -232 -228 -219 -233 -229 -219 -233 -229 -221 -234 -230 -223 -235 -230 -224 -236 -229 -224 -229 -225 -218 -185 -183 -177 -172 -172 -170 -214 -214 -214 -243 -243 -242 -253 -253 -253 -255 -255 -255 -255 -255 -255 -248 -248 -248 -213 -213 -213 -174 -174 -174 -154 -154 -154 -137 -137 -137 -105 -105 -105 -64 -64 -64 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -38 -38 -38 -190 -190 -190 -254 -254 -254 -242 -241 -240 -154 -135 -123 -125 -81 -46 -143 -93 -53 -158 -101 -56 -151 -98 -55 -153 -100 -57 -94 -60 -35 -69 -46 -28 -111 -74 -43 -149 -97 -55 -145 -94 -54 -147 -95 -53 -133 -86 -48 -133 -88 -53 -112 -75 -47 -99 -65 -41 -102 -99 -95 -214 -210 -201 -228 -224 -215 -230 -226 -217 -230 -226 -217 -230 -226 -217 -231 -227 -218 -231 -227 -218 -233 -229 -220 -232 -228 -219 -233 -229 -221 -233 -229 -222 -234 -229 -223 -234 -230 -222 -235 -230 -223 -235 -230 -224 -235 -230 -224 -221 -217 -210 -187 -184 -179 -141 -140 -139 -146 -147 -146 -196 -196 -196 -240 -240 -240 -254 -254 -254 -255 -255 -255 -254 -254 -254 -251 -251 -251 -246 -246 -246 -239 -239 -239 -231 -231 -231 -203 -203 -203 -141 -141 -141 -50 -50 -50 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -64 -64 -64 -228 -228 -228 -255 -255 -255 -207 -204 -201 -127 -82 -46 -121 -78 -46 -158 -102 -56 -155 -100 -56 -151 -97 -55 -115 -75 -45 -72 -49 -30 -113 -74 -43 -147 -96 -53 -141 -91 -53 -147 -95 -53 -144 -94 -53 -142 -93 -52 -120 -79 -46 -106 -73 -47 -105 -100 -95 -210 -206 -198 -228 -224 -215 -229 -225 -216 -230 -226 -217 -231 -227 -218 -231 -227 -218 -231 -227 -218 -232 -228 -219 -233 -229 -220 -233 -229 -220 -233 -228 -220 -233 -228 -222 -235 -230 -224 -235 -230 -222 -235 -230 -223 -236 -231 -225 -235 -230 -224 -236 -230 -223 -235 -230 -223 -197 -193 -187 -59 -60 -61 -47 -52 -55 -81 -84 -85 -162 -162 -162 -216 -216 -216 -234 -234 -233 -240 -240 -240 -245 -245 -245 -251 -251 -251 -255 -255 -255 -255 -255 -255 -253 -253 -253 -221 -221 -221 -144 -144 -144 -59 -59 -59 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -99 -99 -99 -249 -249 -249 -254 -254 -254 -155 -145 -139 -118 -78 -44 -147 -96 -54 -157 -101 -56 -150 -97 -54 -143 -93 -54 -75 -50 -30 -112 -73 -43 -136 -88 -49 -145 -94 -54 -131 -86 -50 -148 -96 -54 -139 -90 -53 -141 -92 -53 -89 -59 -37 -113 -107 -102 -209 -204 -197 -229 -225 -216 -229 -225 -216 -229 -225 -216 -230 -226 -217 -231 -227 -218 -230 -226 -217 -231 -227 -218 -232 -228 -219 -232 -228 -219 -232 -228 -219 -233 -229 -220 -233 -229 -221 -234 -229 -223 -235 -230 -224 -235 -230 -224 -234 -229 -223 -235 -230 -224 -234 -230 -224 -232 -228 -222 -160 -158 -153 -36 -40 -42 -34 -39 -42 -38 -46 -48 -26 -37 -40 -46 -53 -54 -80 -84 -84 -113 -115 -114 -134 -136 -136 -158 -160 -159 -186 -187 -186 -225 -225 -225 -253 -253 -253 -255 -255 -255 -250 -250 -250 -209 -209 -209 -102 -102 -102 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -132 -132 -132 -255 -255 -255 -247 -246 -246 -110 -91 -78 -128 -84 -49 -151 -97 -54 -154 -99 -54 -151 -98 -55 -107 -70 -43 -84 -55 -34 -127 -82 -46 -145 -95 -55 -124 -80 -46 -146 -96 -55 -137 -88 -50 -133 -86 -50 -111 -73 -46 -107 -103 -99 -216 -212 -204 -231 -226 -218 -230 -225 -216 -229 -225 -216 -230 -226 -217 -231 -227 -218 -231 -227 -218 -231 -227 -218 -231 -227 -218 -231 -227 -218 -231 -227 -218 -231 -227 -218 -233 -229 -220 -233 -229 -221 -233 -228 -222 -234 -229 -223 -235 -230 -224 -235 -230 -224 -234 -229 -223 -235 -229 -224 -221 -216 -209 -105 -105 -102 -31 -35 -38 -31 -36 -39 -32 -36 -39 -31 -36 -39 -35 -40 -43 -31 -37 -39 -36 -42 -44 -35 -41 -44 -39 -46 -48 -51 -58 -59 -81 -85 -86 -146 -147 -147 -227 -227 -227 -252 -252 -252 -254 -254 -254 -230 -230 -230 -85 -85 -85 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -134 -134 -134 -255 -255 -255 -244 -244 -243 -94 -78 -65 -128 -84 -48 -153 -100 -55 -152 -99 -54 -140 -92 -53 -71 -47 -29 -121 -80 -48 -137 -90 -50 -133 -86 -49 -126 -82 -48 -140 -91 -52 -128 -83 -50 -98 -66 -41 -126 -121 -116 -216 -212 -205 -232 -228 -218 -231 -227 -218 -230 -226 -217 -230 -226 -217 -231 -227 -218 -231 -227 -218 -231 -227 -218 -231 -227 -218 -231 -227 -218 -230 -226 -217 -231 -227 -218 -232 -228 -219 -233 -229 -219 -233 -229 -220 -233 -228 -222 -234 -229 -223 -234 -229 -223 -234 -229 -223 -234 -229 -223 -234 -229 -223 -183 -180 -175 -32 -37 -39 -28 -33 -36 -29 -34 -37 -32 -37 -40 -33 -38 -41 -33 -38 -41 -31 -36 -39 -33 -38 -41 -32 -37 -40 -34 -41 -44 -34 -41 -44 -34 -42 -44 -41 -50 -52 -76 -82 -82 -182 -182 -182 -247 -247 -247 -254 -254 -254 -213 -213 -213 -77 -77 -77 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -118 -118 -118 -255 -255 -255 -251 -251 -251 -99 -92 -87 -125 -80 -45 -155 -99 -55 -152 -98 -55 -105 -68 -40 -95 -64 -39 -132 -86 -49 -129 -84 -46 -132 -86 -50 -134 -88 -53 -117 -78 -49 -69 -43 -23 -120 -117 -113 -217 -213 -206 -231 -227 -218 -231 -227 -218 -230 -226 -217 -229 -225 -216 -230 -226 -217 -231 -227 -218 -231 -227 -218 -231 -227 -218 -231 -227 -218 -229 -225 -216 -230 -226 -217 -231 -227 -218 -231 -227 -218 -232 -228 -219 -232 -228 -220 -233 -229 -221 -233 -228 -222 -234 -229 -223 -235 -230 -222 -234 -230 -223 -215 -210 -204 -78 -78 -77 -23 -29 -32 -26 -31 -34 -31 -36 -39 -32 -36 -39 -32 -37 -40 -31 -36 -39 -33 -38 -41 -32 -37 -40 -34 -39 -42 -37 -43 -46 -36 -44 -46 -35 -43 -45 -41 -49 -51 -51 -59 -61 -70 -75 -77 -185 -185 -185 -252 -252 -252 -254 -254 -254 -196 -196 -196 -38 -38 -38 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -98 -98 -98 -250 -250 -250 -254 -254 -254 -130 -129 -127 -126 -80 -42 -156 -99 -55 -145 -94 -55 -71 -45 -27 -112 -75 -44 -130 -85 -48 -134 -87 -50 -127 -83 -50 -95 -65 -42 -41 -31 -25 -0 -3 -8 -162 -160 -156 -233 -229 -220 -231 -227 -218 -230 -226 -217 -230 -226 -217 -229 -225 -216 -230 -226 -217 -231 -227 -218 -231 -227 -218 -231 -227 -218 -231 -227 -218 -230 -226 -217 -230 -226 -217 -230 -226 -217 -230 -226 -217 -232 -228 -219 -232 -228 -219 -233 -229 -220 -233 -229 -222 -234 -229 -223 -233 -228 -220 -223 -218 -212 -119 -118 -115 -31 -35 -38 -27 -32 -35 -28 -33 -36 -28 -33 -36 -25 -29 -32 -25 -30 -33 -30 -35 -38 -29 -34 -37 -31 -36 -39 -35 -40 -43 -38 -43 -46 -39 -48 -50 -37 -45 -47 -40 -48 -50 -45 -53 -55 -50 -57 -59 -63 -70 -71 -197 -197 -196 -254 -254 -253 -254 -254 -254 -190 -190 -190 -50 -50 -50 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -69 -69 -69 -233 -233 -233 -254 -254 -254 -179 -177 -175 -127 -79 -36 -155 -100 -55 -133 -85 -49 -73 -48 -30 -112 -75 -46 -134 -88 -51 -133 -88 -53 -82 -54 -33 -27 -24 -22 -21 -24 -27 -14 -19 -22 -104 -103 -99 -230 -225 -217 -230 -226 -217 -230 -226 -217 -230 -226 -217 -230 -226 -217 -229 -225 -216 -231 -227 -218 -231 -227 -218 -230 -226 -217 -230 -226 -217 -229 -225 -216 -229 -225 -216 -229 -225 -216 -231 -227 -218 -231 -227 -218 -232 -228 -219 -233 -229 -220 -233 -229 -221 -233 -228 -220 -226 -222 -213 -146 -143 -139 -39 -43 -45 -31 -35 -39 -28 -33 -36 -24 -29 -32 -26 -30 -33 -21 -25 -28 -25 -29 -32 -27 -32 -35 -29 -34 -37 -31 -36 -39 -35 -40 -43 -35 -41 -44 -35 -43 -45 -37 -46 -48 -41 -49 -51 -44 -52 -54 -45 -53 -55 -54 -61 -63 -82 -87 -87 -208 -208 -208 -254 -254 -254 -250 -250 -250 -170 -170 -170 -28 -28 -28 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -50 -50 -50 -209 -209 -209 -255 -255 -255 -210 -208 -207 -128 -81 -39 -151 -98 -54 -125 -80 -46 -96 -64 -42 -94 -64 -41 -86 -57 -36 -46 -31 -20 -26 -27 -26 -23 -27 -28 -23 -27 -28 -16 -20 -21 -58 -59 -58 -198 -195 -188 -230 -226 -217 -230 -226 -217 -231 -227 -218 -230 -226 -217 -229 -225 -216 -230 -226 -217 -231 -227 -218 -230 -226 -217 -229 -225 -216 -227 -223 -214 -226 -222 -213 -229 -225 -216 -231 -227 -218 -232 -228 -219 -231 -227 -218 -233 -228 -220 -232 -227 -219 -221 -218 -210 -138 -136 -132 -36 -39 -41 -25 -30 -33 -28 -33 -36 -28 -33 -36 -24 -29 -32 -24 -28 -31 -22 -26 -29 -24 -29 -32 -29 -34 -37 -31 -36 -39 -35 -40 -43 -34 -39 -42 -33 -38 -41 -33 -42 -44 -37 -45 -47 -41 -49 -51 -44 -52 -54 -43 -51 -53 -46 -54 -55 -47 -56 -57 -88 -92 -91 -220 -221 -220 -255 -255 -255 -246 -246 -246 -126 -126 -126 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -28 -28 -28 -184 -184 -184 -255 -255 -255 -229 -227 -227 -132 -89 -54 -146 -95 -53 -107 -71 -43 -47 -37 -29 -27 -21 -20 -13 -16 -18 -19 -23 -23 -19 -25 -26 -20 -25 -25 -18 -22 -23 -17 -21 -22 -26 -29 -30 -142 -141 -136 -226 -222 -212 -229 -225 -217 -229 -225 -216 -229 -225 -216 -228 -224 -215 -229 -225 -216 -229 -225 -216 -228 -224 -215 -227 -223 -214 -226 -222 -213 -226 -222 -213 -229 -225 -216 -231 -227 -218 -231 -227 -218 -231 -227 -218 -231 -227 -218 -204 -200 -191 -118 -119 -114 -31 -36 -39 -27 -32 -35 -22 -27 -31 -24 -29 -32 -24 -29 -32 -29 -34 -37 -28 -33 -36 -26 -31 -34 -24 -29 -32 -30 -35 -38 -32 -37 -40 -36 -43 -45 -36 -41 -44 -33 -39 -42 -35 -43 -45 -36 -44 -46 -37 -45 -47 -38 -45 -48 -41 -49 -51 -42 -50 -52 -46 -54 -56 -45 -54 -55 -107 -110 -109 -233 -233 -233 -255 -255 -255 -236 -236 -236 -108 -108 -108 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -13 -13 -13 -167 -167 -167 -253 -253 -253 -235 -235 -234 -141 -107 -85 -129 -86 -51 -47 -38 -34 -21 -25 -29 -22 -26 -29 -18 -22 -25 -15 -20 -21 -16 -20 -21 -17 -21 -22 -17 -21 -22 -16 -20 -21 -17 -21 -24 -49 -51 -51 -166 -163 -157 -227 -223 -213 -228 -224 -216 -229 -225 -216 -228 -224 -215 -230 -226 -217 -229 -225 -216 -228 -224 -215 -228 -224 -215 -227 -223 -214 -225 -221 -212 -228 -224 -215 -230 -226 -217 -231 -225 -216 -220 -216 -208 -163 -161 -156 -82 -83 -81 -29 -35 -38 -30 -35 -38 -25 -30 -31 -21 -26 -29 -20 -25 -28 -22 -27 -30 -26 -31 -35 -28 -33 -36 -28 -33 -36 -24 -29 -31 -27 -32 -35 -30 -35 -38 -32 -37 -40 -35 -40 -43 -34 -39 -42 -33 -39 -42 -35 -43 -44 -34 -42 -44 -38 -44 -46 -38 -45 -47 -43 -51 -53 -44 -52 -54 -46 -54 -56 -47 -55 -56 -139 -140 -140 -243 -243 -243 -254 -254 -254 -220 -220 -220 -83 -83 -83 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -159 -159 -159 -252 -252 -252 -236 -236 -236 -140 -112 -94 -98 -66 -41 -15 -23 -25 -19 -23 -25 -19 -23 -24 -17 -21 -22 -15 -19 -21 -19 -23 -24 -18 -22 -23 -18 -22 -23 -15 -19 -20 -14 -18 -19 -19 -22 -24 -32 -34 -36 -130 -129 -125 -204 -200 -192 -224 -220 -211 -230 -226 -217 -230 -225 -216 -228 -224 -216 -228 -223 -215 -227 -223 -214 -227 -223 -214 -226 -222 -213 -223 -219 -211 -212 -209 -201 -177 -175 -168 -88 -89 -87 -29 -34 -36 -27 -32 -35 -24 -28 -30 -22 -26 -27 -21 -25 -26 -23 -28 -31 -22 -26 -29 -21 -25 -27 -22 -26 -28 -23 -28 -31 -28 -33 -36 -26 -31 -34 -24 -29 -32 -32 -37 -40 -29 -34 -37 -32 -37 -40 -33 -38 -41 -30 -36 -38 -32 -37 -40 -33 -40 -43 -37 -45 -47 -36 -44 -46 -39 -46 -49 -41 -49 -51 -42 -50 -52 -41 -49 -51 -52 -59 -61 -180 -181 -180 -252 -252 -252 -254 -254 -254 -171 -171 -171 -13 -13 -13 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -22 -22 -22 -172 -172 -172 -254 -254 -254 -238 -238 -238 -140 -118 -105 -55 -39 -30 -18 -22 -24 -16 -20 -21 -16 -20 -21 -14 -18 -19 -15 -19 -21 -18 -21 -23 -15 -17 -19 -19 -22 -24 -19 -23 -24 -14 -18 -19 -14 -18 -19 -19 -23 -24 -15 -20 -24 -72 -72 -71 -140 -137 -134 -182 -179 -172 -207 -204 -196 -220 -216 -208 -223 -219 -211 -220 -215 -206 -203 -200 -192 -172 -169 -162 -136 -135 -130 -87 -86 -85 -12 -20 -24 -23 -28 -32 -23 -28 -31 -19 -23 -26 -20 -25 -26 -18 -23 -23 -21 -25 -26 -19 -23 -25 -19 -23 -26 -17 -21 -23 -21 -25 -27 -23 -27 -30 -24 -29 -32 -25 -30 -33 -30 -35 -38 -31 -36 -39 -27 -32 -35 -34 -39 -42 -32 -37 -40 -28 -33 -36 -31 -36 -39 -32 -37 -40 -33 -40 -42 -34 -41 -43 -36 -43 -46 -43 -51 -53 -43 -51 -53 -40 -48 -50 -45 -53 -55 -81 -87 -88 -211 -211 -211 -255 -255 -255 -245 -245 -245 -130 -130 -130 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -22 -22 -22 -143 -143 -143 -209 -209 -209 -201 -201 -201 -117 -117 -117 -38 -38 -38 -46 -46 -46 -190 -190 -190 -255 -255 -255 -236 -236 -235 -110 -97 -89 -33 -32 -30 -19 -23 -25 -19 -23 -26 -15 -19 -20 -13 -16 -17 -14 -15 -17 -12 -13 -15 -11 -12 -14 -15 -18 -19 -17 -21 -22 -14 -17 -18 -14 -18 -19 -18 -22 -23 -17 -22 -22 -20 -24 -25 -21 -25 -27 -45 -46 -46 -62 -62 -61 -74 -74 -72 -81 -81 -79 -74 -73 -70 -60 -61 -59 -40 -42 -41 -21 -25 -26 -21 -26 -26 -21 -26 -28 -18 -22 -25 -17 -22 -23 -18 -22 -23 -16 -20 -21 -12 -16 -17 -13 -16 -17 -13 -14 -16 -14 -15 -17 -12 -14 -15 -14 -16 -18 -22 -26 -29 -24 -29 -32 -24 -29 -32 -26 -31 -34 -29 -34 -37 -29 -34 -37 -30 -35 -38 -32 -37 -40 -27 -32 -35 -26 -31 -34 -27 -32 -35 -33 -40 -42 -38 -46 -48 -41 -49 -51 -42 -50 -52 -45 -53 -55 -47 -55 -57 -43 -51 -54 -54 -62 -63 -109 -113 -112 -233 -233 -233 -255 -255 -255 -230 -230 -230 -96 -96 -96 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -137 -137 -137 -248 -248 -248 -255 -255 -255 -255 -255 -255 -245 -245 -245 -196 -196 -196 -186 -186 -186 -241 -241 -241 -255 -255 -255 -213 -212 -211 -56 -44 -36 -24 -28 -29 -18 -21 -24 -16 -21 -23 -14 -17 -18 -12 -15 -16 -13 -14 -16 -11 -12 -13 -11 -12 -14 -12 -15 -17 -13 -16 -18 -14 -15 -17 -12 -14 -15 -11 -15 -16 -14 -16 -18 -13 -14 -16 -11 -14 -16 -16 -20 -21 -15 -18 -19 -12 -15 -16 -13 -16 -17 -12 -15 -16 -12 -15 -17 -14 -17 -19 -16 -19 -20 -18 -22 -22 -18 -22 -23 -14 -17 -18 -15 -17 -19 -13 -14 -16 -11 -12 -14 -12 -13 -15 -14 -19 -20 -15 -17 -19 -15 -16 -18 -12 -13 -15 -11 -12 -14 -17 -20 -22 -20 -24 -27 -21 -25 -29 -23 -26 -30 -26 -30 -33 -25 -30 -33 -25 -30 -33 -28 -33 -36 -26 -31 -34 -27 -32 -35 -30 -35 -38 -33 -38 -41 -40 -48 -50 -42 -50 -52 -42 -50 -52 -46 -54 -56 -50 -58 -60 -48 -56 -58 -45 -53 -55 -64 -72 -73 -155 -156 -156 -247 -247 -247 -254 -254 -254 -205 -205 -205 -56 -56 -56 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -184 -184 -184 -253 -253 -253 -244 -244 -244 -243 -243 -243 -255 -254 -254 -255 -255 -255 -255 -255 -255 -255 -255 -255 -246 -245 -244 -140 -131 -126 -42 -30 -24 -13 -17 -17 -14 -18 -20 -14 -18 -19 -13 -14 -16 -12 -13 -15 -12 -13 -15 -9 -10 -12 -9 -10 -12 -10 -11 -13 -11 -12 -14 -10 -11 -13 -10 -11 -13 -10 -12 -13 -10 -11 -13 -12 -13 -15 -13 -14 -16 -15 -18 -19 -13 -14 -16 -9 -10 -12 -9 -10 -12 -8 -9 -11 -8 -9 -11 -9 -10 -12 -10 -11 -13 -10 -11 -13 -12 -12 -14 -9 -11 -12 -9 -10 -12 -12 -13 -15 -12 -13 -15 -12 -14 -15 -13 -18 -18 -14 -16 -18 -14 -15 -17 -13 -13 -15 -11 -12 -14 -14 -15 -17 -13 -16 -18 -15 -19 -20 -18 -22 -24 -19 -23 -25 -23 -28 -30 -21 -27 -29 -26 -31 -34 -30 -35 -38 -32 -37 -40 -33 -38 -41 -34 -39 -42 -37 -44 -46 -34 -42 -44 -36 -44 -46 -43 -51 -53 -49 -57 -59 -49 -57 -59 -46 -54 -56 -46 -54 -56 -63 -70 -72 -183 -184 -184 -254 -254 -254 -252 -252 -252 -190 -190 -190 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -158 -158 -158 -251 -251 -251 -249 -249 -248 -165 -163 -162 -194 -190 -187 -229 -227 -225 -236 -233 -231 -220 -213 -208 -162 -132 -114 -112 -75 -50 -9 -15 -18 -13 -17 -18 -12 -15 -17 -9 -11 -13 -9 -10 -12 -9 -10 -12 -7 -8 -10 -7 -8 -10 -7 -9 -10 -8 -9 -11 -7 -8 -10 -9 -10 -12 -9 -10 -12 -8 -9 -11 -10 -11 -13 -12 -13 -15 -12 -13 -15 -12 -13 -15 -10 -11 -13 -8 -8 -10 -7 -8 -10 -7 -8 -10 -7 -8 -10 -8 -9 -11 -8 -8 -10 -8 -8 -10 -9 -9 -11 -11 -12 -14 -9 -10 -12 -10 -11 -13 -10 -11 -13 -12 -13 -15 -13 -17 -18 -14 -18 -19 -12 -14 -16 -11 -11 -13 -10 -11 -13 -10 -11 -13 -12 -14 -16 -13 -17 -19 -16 -20 -21 -18 -23 -24 -20 -26 -27 -22 -28 -31 -25 -30 -33 -31 -37 -39 -34 -41 -43 -33 -38 -41 -36 -41 -44 -39 -47 -49 -34 -42 -44 -37 -45 -47 -36 -44 -46 -41 -48 -51 -43 -51 -53 -43 -51 -53 -42 -50 -52 -44 -52 -54 -63 -69 -70 -205 -206 -205 -254 -254 -254 -251 -251 -251 -168 -168 -168 -28 -28 -28 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -75 -75 -75 -231 -231 -231 -255 -255 -255 -235 -235 -235 -140 -130 -123 -120 -82 -51 -142 -105 -77 -132 -84 -45 -144 -95 -54 -57 -40 -27 -12 -17 -20 -15 -20 -21 -13 -15 -17 -9 -9 -12 -10 -11 -13 -11 -12 -14 -8 -9 -11 -8 -9 -11 -9 -10 -12 -10 -11 -13 -7 -8 -10 -8 -9 -11 -11 -12 -14 -9 -10 -12 -12 -13 -15 -14 -15 -17 -10 -11 -13 -8 -9 -11 -7 -8 -10 -8 -9 -11 -8 -9 -11 -8 -9 -11 -7 -8 -10 -7 -8 -10 -7 -7 -9 -8 -9 -11 -9 -10 -12 -9 -10 -12 -9 -10 -12 -9 -10 -12 -9 -10 -12 -11 -12 -14 -15 -16 -18 -13 -15 -17 -11 -12 -14 -9 -10 -12 -9 -10 -12 -10 -11 -13 -15 -18 -19 -18 -23 -24 -20 -25 -25 -21 -26 -26 -22 -27 -29 -24 -29 -32 -24 -29 -32 -28 -34 -36 -30 -35 -38 -32 -36 -39 -38 -43 -46 -41 -49 -51 -37 -45 -47 -35 -43 -45 -35 -43 -45 -35 -42 -44 -42 -50 -52 -43 -51 -53 -44 -52 -54 -39 -47 -49 -44 -53 -55 -94 -98 -98 -219 -219 -219 -254 -254 -254 -244 -244 -244 -143 -143 -143 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -129 -129 -129 -246 -246 -246 -255 -255 -255 -244 -243 -243 -180 -177 -174 -102 -76 -57 -126 -83 -49 -112 -74 -45 -19 -18 -19 -11 -14 -16 -16 -18 -20 -11 -13 -15 -12 -13 -15 -13 -15 -16 -10 -11 -13 -9 -10 -12 -8 -9 -11 -11 -12 -14 -12 -13 -15 -10 -11 -13 -8 -9 -11 -8 -9 -11 -8 -8 -10 -8 -8 -10 -8 -8 -10 -8 -8 -10 -7 -8 -10 -8 -9 -11 -7 -8 -10 -7 -8 -10 -6 -7 -9 -6 -7 -9 -7 -8 -10 -6 -7 -9 -7 -9 -11 -9 -11 -12 -10 -11 -13 -10 -11 -13 -14 -14 -14 -17 -16 -16 -13 -14 -16 -13 -16 -17 -11 -12 -14 -10 -11 -13 -9 -10 -12 -9 -10 -12 -10 -11 -13 -18 -20 -22 -20 -24 -24 -25 -30 -32 -21 -27 -29 -23 -29 -31 -24 -29 -32 -24 -29 -32 -24 -29 -32 -26 -31 -34 -28 -33 -36 -32 -36 -39 -35 -42 -44 -33 -39 -41 -32 -38 -41 -32 -38 -40 -33 -40 -42 -36 -44 -46 -41 -49 -51 -46 -53 -55 -42 -50 -52 -38 -46 -48 -49 -56 -58 -112 -115 -115 -235 -235 -235 -255 -255 -255 -244 -244 -244 -133 -133 -133 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -122 -122 -122 -242 -242 -242 -255 -255 -255 -242 -241 -240 -183 -169 -161 -144 -98 -62 -128 -83 -47 -62 -41 -26 -11 -11 -12 -9 -11 -13 -11 -13 -15 -14 -15 -16 -17 -20 -21 -15 -19 -20 -12 -15 -17 -8 -9 -11 -9 -10 -12 -11 -12 -14 -13 -14 -16 -12 -13 -15 -12 -12 -14 -9 -10 -12 -8 -9 -11 -8 -9 -12 -7 -7 -9 -9 -9 -11 -4 -7 -12 -0 -1 -10 -0 -0 -10 -0 -1 -11 -5 -9 -14 -0 -0 -6 -0 -3 -13 -13 -14 -16 -13 -17 -19 -17 -21 -23 -17 -21 -22 -21 -23 -24 -132 -112 -59 -109 -92 -50 -22 -26 -26 -21 -25 -28 -18 -22 -24 -15 -19 -21 -9 -11 -12 -10 -11 -13 -11 -12 -14 -12 -13 -15 -14 -16 -18 -20 -24 -26 -23 -28 -30 -22 -28 -30 -24 -29 -32 -23 -28 -31 -23 -28 -31 -23 -28 -31 -22 -26 -29 -24 -28 -31 -27 -32 -35 -31 -36 -39 -29 -34 -37 -28 -33 -36 -30 -35 -38 -30 -36 -38 -39 -47 -49 -46 -54 -56 -43 -51 -53 -39 -47 -49 -42 -50 -52 -48 -57 -58 -125 -127 -127 -236 -236 -235 -255 -255 -255 -236 -236 -236 -118 -118 -118 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -34 -34 -34 -222 -222 -222 -255 -255 -255 -238 -237 -236 -161 -139 -126 -139 -92 -54 -130 -83 -47 -101 -66 -40 -32 -23 -18 -8 -9 -11 -13 -15 -17 -15 -17 -18 -12 -14 -16 -16 -18 -20 -15 -18 -19 -14 -18 -18 -12 -13 -15 -17 -16 -17 -20 -18 -17 -14 -14 -17 -15 -17 -19 -24 -24 -21 -21 -22 -20 -25 -24 -21 -38 -33 -21 -28 -26 -22 -16 -17 -19 -77 -65 -35 -118 -101 -53 -125 -106 -55 -123 -105 -54 -72 -60 -33 -198 -164 -83 -201 -166 -81 -188 -156 -79 -13 -22 -28 -23 -29 -31 -24 -29 -31 -37 -35 -31 -219 -182 -87 -144 -120 -60 -22 -26 -27 -21 -25 -28 -18 -22 -25 -15 -19 -21 -12 -13 -16 -11 -12 -14 -10 -11 -13 -11 -11 -13 -14 -16 -18 -17 -21 -22 -18 -23 -24 -20 -26 -27 -25 -30 -33 -23 -28 -31 -23 -28 -31 -24 -29 -32 -23 -28 -31 -21 -26 -29 -24 -29 -32 -28 -33 -36 -28 -33 -36 -26 -31 -34 -28 -33 -36 -27 -32 -35 -38 -45 -48 -40 -48 -50 -38 -46 -48 -38 -46 -48 -40 -48 -50 -40 -48 -50 -45 -53 -54 -137 -138 -138 -242 -242 -242 -255 -255 -255 -232 -232 -232 -120 -120 -120 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -121 -121 -121 -248 -248 -248 -252 -252 -252 -174 -159 -152 -137 -90 -54 -132 -85 -48 -125 -81 -47 -77 -52 -34 -7 -10 -12 -8 -9 -11 -10 -11 -13 -13 -14 -16 -13 -14 -16 -12 -13 -15 -14 -15 -16 -13 -15 -17 -27 -23 -18 -136 -113 -59 -164 -137 -72 -28 -31 -29 -23 -27 -30 -185 -154 -77 -151 -126 -65 -165 -136 -72 -231 -190 -88 -151 -124 -63 -24 -25 -26 -164 -135 -64 -214 -177 -87 -200 -166 -80 -181 -148 -68 -101 -83 -43 -240 -196 -93 -213 -175 -82 -227 -185 -85 -53 -49 -36 -25 -29 -32 -20 -27 -32 -86 -73 -44 -232 -190 -88 -111 -94 -50 -21 -24 -28 -23 -27 -30 -19 -23 -27 -18 -20 -24 -11 -12 -15 -9 -10 -12 -9 -10 -12 -13 -14 -16 -16 -18 -20 -15 -19 -20 -15 -19 -20 -15 -20 -21 -20 -25 -28 -24 -29 -32 -26 -31 -34 -24 -29 -32 -29 -34 -37 -32 -37 -40 -29 -34 -37 -28 -32 -35 -28 -33 -36 -32 -37 -40 -30 -35 -38 -32 -37 -40 -41 -48 -50 -37 -45 -47 -36 -42 -45 -38 -46 -48 -37 -45 -47 -36 -44 -46 -35 -42 -44 -32 -40 -42 -159 -159 -159 -245 -245 -245 -255 -255 -255 -238 -238 -238 -88 -88 -88 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -151 -151 -151 -250 -250 -250 -238 -237 -237 -153 -124 -108 -130 -86 -50 -131 -84 -48 -116 -74 -45 -28 -20 -17 -8 -9 -11 -7 -9 -11 -9 -11 -13 -12 -15 -17 -22 -23 -24 -17 -17 -18 -10 -11 -13 -11 -13 -14 -48 -40 -23 -203 -166 -76 -221 -181 -85 -34 -36 -33 -58 -53 -40 -236 -194 -90 -175 -144 -67 -199 -163 -75 -250 -202 -88 -162 -132 -62 -34 -32 -23 -181 -148 -67 -203 -168 -80 -211 -174 -82 -172 -140 -65 -114 -94 -46 -240 -196 -91 -189 -155 -74 -233 -189 -85 -95 -81 -46 -22 -26 -29 -6 -20 -29 -144 -120 -63 -227 -187 -86 -65 -57 -38 -25 -29 -33 -23 -28 -31 -19 -23 -26 -15 -18 -21 -10 -11 -13 -9 -10 -12 -10 -11 -13 -11 -12 -14 -13 -14 -16 -15 -19 -20 -16 -20 -21 -14 -18 -19 -17 -21 -23 -21 -26 -29 -28 -33 -36 -26 -31 -34 -30 -35 -38 -27 -32 -35 -27 -32 -35 -29 -35 -37 -33 -39 -41 -33 -38 -41 -35 -42 -44 -41 -49 -51 -43 -51 -53 -39 -47 -49 -38 -46 -48 -34 -42 -44 -35 -43 -45 -37 -45 -47 -34 -43 -44 -37 -45 -46 -38 -46 -48 -154 -154 -154 -245 -245 -244 -251 -251 -251 -155 -155 -155 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -151 -151 -151 -250 -250 -250 -235 -234 -233 -138 -115 -101 -129 -85 -48 -127 -83 -48 -63 -40 -24 -7 -8 -11 -9 -10 -12 -8 -9 -11 -10 -10 -12 -28 -28 -29 -117 -117 -115 -72 -72 -71 -10 -11 -13 -9 -11 -12 -59 -49 -25 -218 -178 -81 -202 -166 -79 -33 -35 -35 -90 -78 -48 -239 -194 -86 -163 -133 -66 -212 -175 -80 -251 -203 -88 -165 -135 -63 -48 -41 -25 -198 -162 -73 -190 -156 -75 -222 -181 -87 -167 -136 -63 -119 -98 -48 -238 -194 -90 -161 -132 -67 -238 -194 -85 -122 -102 -52 -21 -24 -27 -0 -10 -27 -186 -153 -73 -209 -173 -81 -16 -25 -31 -27 -32 -35 -22 -27 -30 -21 -25 -27 -18 -22 -23 -13 -15 -17 -10 -11 -13 -11 -12 -14 -11 -12 -14 -13 -15 -17 -19 -22 -25 -18 -22 -24 -16 -20 -22 -17 -21 -22 -27 -32 -35 -33 -38 -41 -32 -37 -40 -29 -34 -37 -27 -32 -35 -28 -33 -36 -24 -30 -32 -34 -42 -44 -38 -46 -48 -40 -48 -50 -42 -50 -52 -38 -46 -48 -37 -45 -47 -40 -48 -50 -36 -44 -46 -41 -49 -51 -47 -54 -56 -38 -45 -47 -31 -37 -40 -36 -41 -43 -127 -127 -127 -244 -244 -244 -251 -251 -251 -155 -155 -155 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -150 -150 -150 -250 -250 -250 -238 -237 -237 -140 -118 -107 -111 -72 -43 -110 -73 -45 -28 -19 -14 -8 -9 -12 -9 -10 -12 -8 -9 -11 -0 -0 -2 -101 -100 -99 -136 -136 -134 -19 -19 -21 -9 -10 -12 -10 -12 -14 -69 -56 -26 -233 -190 -86 -179 -148 -70 -24 -27 -29 -115 -96 -53 -240 -195 -86 -151 -124 -62 -224 -185 -83 -252 -203 -87 -170 -138 -64 -60 -51 -28 -212 -175 -80 -173 -141 -68 -231 -189 -89 -160 -129 -59 -121 -98 -50 -236 -192 -89 -130 -107 -54 -241 -197 -89 -142 -117 -57 -23 -26 -30 -21 -26 -30 -214 -175 -82 -183 -150 -74 -0 -16 -29 -28 -32 -35 -26 -31 -34 -24 -28 -31 -20 -24 -26 -15 -17 -19 -9 -11 -13 -11 -14 -15 -14 -17 -18 -20 -23 -25 -24 -27 -31 -22 -26 -29 -19 -22 -24 -19 -22 -23 -22 -27 -30 -33 -38 -41 -31 -36 -39 -27 -32 -35 -24 -29 -32 -23 -27 -30 -21 -25 -28 -32 -38 -41 -41 -49 -51 -47 -55 -57 -42 -50 -52 -44 -52 -54 -39 -47 -49 -40 -48 -50 -36 -46 -48 -53 -46 -45 -97 -49 -35 -55 -27 -19 -5 -11 -13 -104 -104 -104 -230 -229 -229 -255 -255 -255 -237 -237 -237 -93 -93 -93 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -132 -132 -132 -249 -249 -249 -245 -245 -245 -150 -130 -119 -103 -68 -44 -74 -49 -32 -12 -12 -13 -10 -11 -13 -10 -11 -13 -5 -7 -8 -67 -68 -66 -164 -163 -159 -51 -51 -51 -13 -14 -16 -8 -9 -11 -11 -11 -14 -82 -66 -31 -245 -199 -91 -156 -128 -63 -17 -26 -28 -137 -115 -59 -241 -195 -86 -146 -121 -61 -231 -188 -83 -252 -203 -87 -174 -142 -65 -70 -58 -32 -227 -185 -86 -156 -128 -59 -239 -195 -92 -150 -123 -58 -119 -97 -51 -233 -191 -88 -107 -89 -42 -238 -195 -91 -158 -130 -60 -23 -27 -27 -71 -61 -37 -228 -187 -85 -145 -119 -63 -6 -19 -28 -23 -28 -31 -25 -30 -32 -27 -32 -35 -17 -21 -23 -14 -16 -17 -11 -12 -14 -13 -17 -18 -16 -20 -21 -20 -23 -26 -21 -25 -29 -22 -26 -29 -1 -8 -12 -168 -168 -168 -124 -124 -123 -22 -28 -32 -29 -34 -37 -31 -36 -39 -25 -30 -33 -27 -31 -34 -23 -27 -30 -31 -36 -39 -44 -50 -53 -44 -51 -53 -44 -52 -54 -48 -56 -58 -38 -46 -48 -41 -47 -49 -75 -49 -41 -152 -73 -37 -175 -80 -38 -132 -62 -33 -85 -86 -86 -223 -223 -222 -255 -255 -255 -246 -246 -246 -142 -142 -142 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -75 -75 -75 -109 -109 -109 -124 -124 -124 -125 -125 -125 -125 -125 -125 -106 -106 -106 -66 -66 -66 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -138 -138 -138 -249 -249 -249 -243 -243 -243 -138 -124 -115 -96 -66 -44 -26 -18 -15 -8 -9 -11 -10 -11 -13 -10 -11 -13 -40 -40 -39 -157 -155 -150 -79 -80 -77 -11 -16 -17 -15 -18 -20 -8 -10 -12 -7 -9 -13 -105 -84 -41 -250 -204 -94 -133 -108 -52 -12 -21 -26 -155 -129 -65 -241 -196 -87 -140 -119 -58 -236 -190 -83 -252 -203 -88 -177 -145 -67 -77 -64 -33 -235 -192 -90 -149 -122 -56 -242 -197 -92 -142 -118 -56 -114 -96 -49 -231 -190 -88 -100 -83 -42 -225 -185 -87 -175 -143 -66 -29 -29 -26 -109 -92 -48 -234 -192 -87 -96 -80 -43 -17 -24 -29 -23 -28 -31 -25 -30 -33 -27 -32 -35 -16 -20 -22 -11 -15 -16 -12 -16 -17 -15 -19 -20 -18 -22 -25 -25 -29 -32 -21 -25 -28 -19 -23 -26 -91 -91 -91 -234 -234 -234 -223 -223 -223 -77 -79 -79 -30 -35 -38 -31 -36 -39 -27 -32 -35 -34 -41 -44 -30 -36 -38 -30 -35 -38 -37 -42 -45 -43 -50 -53 -49 -57 -59 -40 -47 -49 -41 -41 -43 -100 -54 -39 -168 -77 -38 -181 -81 -38 -181 -81 -37 -169 -78 -38 -156 -147 -144 -248 -248 -248 -254 -254 -254 -182 -182 -182 -34 -34 -34 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -42 -42 -42 -163 -163 -163 -223 -223 -223 -242 -242 -242 -252 -252 -252 -253 -253 -253 -252 -252 -252 -241 -241 -241 -218 -218 -218 -151 -151 -151 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -90 -90 -90 -209 -209 -209 -253 -253 -253 -232 -231 -231 -114 -102 -96 -89 -61 -41 -2 -5 -9 -6 -7 -9 -9 -10 -12 -12 -13 -15 -105 -104 -102 -136 -134 -131 -26 -27 -28 -16 -20 -23 -17 -20 -23 -8 -9 -11 -0 -4 -11 -140 -115 -58 -245 -200 -91 -117 -96 -46 -5 -20 -24 -170 -140 -67 -242 -196 -90 -136 -113 -56 -238 -193 -84 -248 -201 -87 -183 -149 -68 -90 -74 -36 -239 -196 -92 -154 -127 -59 -241 -196 -90 -134 -111 -55 -111 -94 -48 -229 -189 -87 -98 -82 -42 -207 -170 -81 -193 -157 -73 -44 -40 -29 -138 -113 -55 -228 -187 -88 -52 -45 -28 -21 -25 -29 -25 -30 -33 -26 -31 -34 -24 -29 -32 -18 -22 -23 -13 -17 -18 -14 -18 -19 -16 -20 -22 -19 -23 -25 -24 -28 -31 -21 -25 -28 -33 -36 -38 -171 -171 -170 -252 -252 -252 -251 -251 -251 -173 -173 -173 -43 -47 -49 -30 -35 -38 -31 -37 -40 -38 -45 -48 -36 -42 -44 -33 -38 -41 -35 -40 -43 -43 -51 -53 -42 -50 -52 -35 -37 -38 -117 -57 -34 -172 -78 -37 -182 -82 -37 -182 -81 -37 -181 -82 -37 -179 -80 -37 -143 -92 -77 -229 -229 -229 -255 -255 -255 -205 -205 -205 -50 -50 -50 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -28 -28 -28 -172 -172 -172 -249 -249 -249 -254 -254 -254 -251 -251 -251 -248 -248 -248 -246 -246 -246 -248 -248 -248 -251 -251 -251 -255 -255 -255 -248 -248 -248 -182 -182 -182 -50 -50 -50 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -71 -71 -71 -230 -230 -230 -254 -254 -254 -254 -254 -254 -203 -203 -203 -84 -66 -56 -36 -24 -18 -6 -7 -10 -7 -8 -10 -9 -10 -12 -27 -27 -27 -157 -156 -154 -60 -59 -59 -13 -15 -18 -15 -19 -22 -16 -17 -21 -8 -9 -11 -0 -0 -9 -169 -139 -68 -239 -193 -87 -105 -86 -45 -3 -18 -23 -184 -150 -72 -240 -194 -89 -139 -114 -56 -240 -196 -87 -232 -187 -82 -188 -153 -70 -112 -92 -47 -239 -196 -91 -169 -138 -70 -240 -195 -86 -123 -103 -53 -113 -95 -48 -229 -188 -87 -96 -80 -43 -186 -153 -73 -208 -171 -79 -56 -49 -32 -160 -131 -61 -214 -176 -84 -29 -28 -24 -22 -25 -28 -24 -29 -32 -26 -31 -34 -24 -29 -32 -15 -18 -20 -14 -17 -18 -14 -18 -19 -16 -20 -21 -17 -21 -21 -20 -24 -25 -22 -26 -29 -81 -82 -82 -236 -236 -235 -255 -255 -255 -255 -255 -255 -241 -241 -240 -108 -109 -108 -31 -36 -40 -39 -47 -49 -40 -46 -49 -37 -43 -45 -33 -38 -41 -36 -41 -44 -34 -41 -43 -53 -41 -37 -131 -61 -34 -176 -79 -39 -182 -81 -39 -183 -82 -38 -183 -82 -38 -182 -82 -38 -182 -81 -37 -160 -69 -27 -180 -174 -173 -254 -254 -254 -245 -245 -245 -98 -98 -98 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -86 -86 -86 -239 -239 -239 -255 -255 -255 -224 -224 -224 -200 -200 -199 -201 -201 -200 -200 -199 -199 -198 -198 -197 -201 -201 -200 -227 -227 -227 -254 -254 -255 -251 -251 -251 -170 -170 -170 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -166 -166 -166 -254 -254 -254 -249 -249 -249 -204 -204 -203 -100 -99 -98 -2 -0 -0 -7 -7 -8 -7 -8 -9 -8 -8 -11 -1 -2 -4 -82 -81 -79 -144 -143 -140 -0 -0 -0 -11 -14 -16 -16 -19 -23 -13 -14 -18 -8 -9 -12 -0 -0 -8 -191 -158 -75 -231 -186 -82 -92 -77 -42 -16 -21 -24 -193 -158 -73 -232 -190 -87 -145 -119 -56 -240 -197 -91 -215 -175 -81 -194 -157 -73 -135 -112 -58 -237 -193 -88 -180 -148 -76 -237 -192 -84 -111 -94 -50 -120 -99 -51 -230 -187 -87 -94 -78 -43 -160 -131 -63 -224 -184 -86 -72 -60 -33 -183 -150 -68 -193 -159 -76 -26 -26 -24 -20 -24 -27 -23 -28 -31 -29 -34 -37 -26 -30 -33 -13 -17 -19 -14 -18 -19 -14 -18 -19 -17 -21 -22 -15 -19 -20 -17 -21 -23 -0 -5 -9 -172 -172 -171 -255 -255 -255 -249 -249 -249 -248 -248 -248 -255 -255 -255 -217 -217 -217 -72 -74 -74 -34 -41 -43 -32 -37 -40 -29 -34 -37 -33 -39 -42 -46 -53 -56 -60 -43 -41 -136 -63 -34 -180 -80 -39 -184 -81 -38 -182 -81 -37 -183 -82 -38 -183 -82 -38 -183 -82 -38 -182 -81 -38 -179 -80 -37 -130 -93 -84 -242 -242 -242 -255 -255 -255 -188 -188 -188 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -132 -132 -132 -255 -255 -255 -249 -249 -249 -169 -169 -168 -247 -247 -247 -255 -255 -255 -255 -255 -255 -254 -254 -254 -245 -245 -245 -196 -195 -195 -218 -218 -217 -255 -255 -255 -246 -246 -246 -121 -121 -121 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -162 -162 -162 -254 -254 -254 -252 -252 -252 -224 -224 -224 -201 -201 -200 -145 -145 -144 -21 -22 -22 -6 -8 -9 -7 -8 -10 -3 -4 -7 -65 -65 -63 -142 -142 -139 -0 -0 -0 -13 -16 -18 -16 -20 -23 -12 -14 -17 -8 -8 -11 -0 -0 -5 -210 -172 -82 -223 -181 -80 -78 -67 -39 -33 -32 -25 -200 -164 -73 -224 -184 -85 -152 -124 -58 -237 -195 -93 -206 -169 -79 -198 -162 -74 -154 -128 -63 -233 -189 -85 -187 -154 -77 -235 -191 -83 -100 -86 -48 -128 -105 -53 -230 -187 -87 -91 -75 -43 -135 -110 -52 -236 -193 -91 -87 -72 -39 -205 -168 -80 -165 -135 -64 -21 -23 -21 -19 -23 -25 -22 -27 -30 -27 -32 -35 -22 -26 -29 -13 -17 -18 -14 -18 -19 -12 -16 -17 -15 -18 -19 -15 -19 -20 -13 -17 -19 -92 -93 -92 -239 -239 -238 -255 -255 -255 -202 -202 -202 -181 -181 -181 -253 -253 -253 -252 -252 -252 -178 -178 -178 -39 -44 -46 -33 -38 -41 -31 -37 -40 -40 -46 -49 -68 -49 -48 -150 -70 -38 -180 -80 -39 -182 -82 -37 -182 -81 -38 -183 -82 -38 -182 -81 -37 -183 -82 -38 -183 -82 -38 -183 -82 -38 -183 -82 -38 -156 -74 -38 -190 -189 -188 -255 -255 -255 -238 -238 -238 -66 -66 -66 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -160 -160 -160 -255 -255 -255 -236 -236 -235 -184 -184 -183 -255 -255 -255 -246 -246 -246 -218 -218 -218 -235 -235 -235 -254 -254 -254 -253 -253 -253 -191 -190 -189 -234 -234 -233 -255 -255 -255 -218 -218 -218 -53 -53 -53 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -64 -64 -64 -221 -221 -221 -252 -252 -252 -255 -255 -255 -255 -255 -255 -251 -251 -251 -174 -174 -173 -59 -59 -59 -5 -6 -8 -7 -8 -10 -19 -19 -20 -158 -158 -155 -14 -16 -17 -12 -16 -18 -16 -20 -21 -11 -13 -15 -7 -8 -10 -0 -0 -5 -226 -185 -87 -214 -173 -79 -61 -53 -35 -46 -42 -28 -208 -169 -75 -219 -178 -83 -161 -131 -61 -231 -190 -92 -200 -163 -77 -204 -168 -77 -171 -141 -68 -229 -185 -82 -193 -158 -78 -235 -191 -83 -95 -79 -45 -137 -114 -54 -228 -187 -86 -87 -73 -41 -116 -95 -46 -240 -197 -92 -109 -90 -46 -219 -180 -86 -138 -113 -54 -17 -20 -21 -19 -22 -25 -22 -26 -29 -24 -28 -31 -17 -21 -22 -14 -17 -18 -14 -16 -18 -14 -16 -17 -13 -15 -17 -18 -21 -22 -26 -29 -30 -186 -186 -185 -253 -253 -253 -244 -244 -244 -122 -122 -122 -59 -59 -59 -206 -206 -206 -254 -254 -254 -238 -238 -238 -112 -113 -113 -34 -39 -41 -36 -43 -45 -75 -48 -41 -151 -70 -37 -181 -82 -38 -183 -81 -37 -182 -81 -38 -182 -82 -38 -183 -82 -38 -182 -81 -37 -182 -81 -37 -183 -82 -38 -183 -82 -38 -182 -81 -38 -178 -81 -39 -146 -129 -125 -248 -248 -248 -251 -251 -251 -159 -159 -159 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -167 -167 -167 -255 -255 -255 -229 -229 -228 -195 -195 -194 -255 -255 -255 -218 -218 -218 -0 -0 -0 -88 -88 -88 -211 -211 -211 -255 -255 -255 -247 -247 -247 -196 -196 -195 -250 -250 -250 -247 -247 -247 -139 -139 -139 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -77 -77 -77 -159 -159 -159 -194 -194 -194 -230 -230 -230 -254 -254 -254 -252 -252 -251 -203 -203 -203 -80 -80 -80 -0 -0 -0 -16 -17 -18 -142 -140 -136 -97 -96 -94 -12 -16 -18 -17 -19 -21 -10 -10 -13 -7 -7 -9 -28 -23 -14 -237 -194 -89 -205 -167 -76 -36 -31 -24 -55 -48 -29 -213 -173 -78 -210 -172 -80 -170 -138 -63 -224 -184 -89 -192 -157 -73 -212 -172 -79 -188 -154 -73 -224 -182 -81 -197 -162 -77 -234 -189 -84 -88 -75 -44 -147 -122 -59 -227 -185 -84 -84 -70 -40 -100 -84 -43 -234 -192 -88 -143 -118 -59 -228 -187 -90 -116 -95 -46 -18 -23 -25 -22 -26 -28 -24 -28 -31 -23 -28 -30 -16 -19 -21 -12 -14 -16 -12 -13 -15 -13 -14 -16 -14 -16 -18 -15 -19 -20 -90 -90 -90 -230 -230 -230 -254 -254 -254 -200 -200 -200 -34 -34 -34 -0 -0 -0 -106 -106 -106 -242 -242 -242 -255 -255 -255 -195 -195 -195 -21 -25 -29 -81 -44 -34 -159 -76 -40 -182 -82 -37 -183 -82 -38 -183 -82 -38 -183 -82 -38 -183 -82 -38 -183 -82 -38 -182 -81 -37 -183 -82 -38 -182 -81 -37 -182 -81 -37 -183 -81 -38 -181 -81 -37 -151 -95 -80 -221 -222 -221 -255 -255 -255 -216 -216 -216 -64 -64 -64 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -166 -166 -166 -255 -255 -255 -232 -232 -232 -196 -196 -196 -255 -255 -255 -210 -210 -210 -0 -0 -0 -0 -0 -0 -104 -104 -104 -234 -234 -234 -254 -254 -254 -213 -213 -213 -235 -235 -235 -255 -255 -255 -192 -192 -192 -38 -38 -38 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -13 -13 -13 -28 -28 -28 -38 -38 -38 -53 -53 -53 -64 -64 -64 -73 -73 -73 -88 -88 -88 -127 -127 -127 -159 -159 -159 -202 -202 -202 -216 -216 -216 -239 -239 -239 -255 -255 -255 -255 -255 -255 -254 -254 -254 -231 -231 -231 -126 -126 -125 -31 -32 -32 -99 -98 -96 -143 -141 -138 -29 -29 -29 -14 -15 -17 -10 -10 -12 -4 -6 -10 -75 -63 -33 -241 -197 -87 -195 -159 -74 -12 -18 -20 -63 -54 -32 -217 -176 -80 -201 -166 -77 -178 -145 -67 -218 -178 -87 -181 -149 -70 -220 -179 -81 -199 -164 -79 -220 -178 -81 -200 -164 -80 -233 -189 -83 -82 -72 -45 -158 -131 -65 -225 -182 -83 -78 -64 -36 -82 -69 -36 -224 -184 -82 -184 -152 -74 -228 -189 -87 -100 -84 -43 -22 -27 -30 -24 -28 -31 -27 -31 -34 -26 -31 -33 -15 -17 -19 -13 -14 -16 -12 -14 -15 -13 -14 -16 -13 -17 -18 -24 -27 -29 -174 -175 -173 -254 -254 -254 -247 -247 -247 -130 -130 -130 -0 -0 -0 -0 -0 -0 -0 -0 -0 -186 -186 -186 -255 -255 -255 -248 -248 -247 -158 -158 -157 -120 -58 -35 -178 -80 -38 -181 -81 -37 -183 -82 -38 -183 -82 -38 -183 -82 -38 -183 -82 -38 -183 -82 -38 -182 -81 -37 -182 -81 -37 -183 -82 -38 -183 -82 -38 -183 -82 -38 -182 -81 -36 -164 -74 -35 -185 -179 -179 -253 -252 -253 -246 -246 -246 -121 -121 -121 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -150 -150 -150 -255 -255 -255 -241 -241 -240 -184 -184 -183 -255 -255 -255 -230 -230 -230 -0 -0 -0 -0 -0 -0 -13 -13 -13 -185 -185 -185 -253 -253 -253 -231 -231 -231 -208 -208 -207 -255 -255 -255 -228 -228 -228 -66 -66 -66 -53 -53 -53 -96 -96 -96 -119 -119 -119 -151 -151 -151 -166 -166 -166 -186 -186 -186 -194 -194 -194 -212 -212 -212 -223 -223 -223 -236 -236 -236 -247 -247 -247 -255 -255 -255 -255 -255 -255 -255 -255 -255 -255 -255 -255 -255 -255 -255 -254 -254 -254 -249 -249 -249 -238 -238 -237 -226 -226 -226 -204 -205 -204 -122 -123 -120 -83 -82 -80 -145 -144 -141 -71 -71 -70 -10 -11 -13 -9 -10 -11 -1 -3 -9 -107 -89 -45 -243 -196 -87 -181 -150 -70 -8 -18 -24 -71 -61 -35 -220 -178 -79 -195 -161 -77 -187 -153 -70 -210 -172 -82 -169 -139 -66 -225 -184 -83 -208 -171 -83 -215 -175 -79 -201 -166 -80 -232 -188 -83 -75 -65 -41 -169 -140 -70 -221 -181 -82 -73 -61 -34 -57 -47 -29 -212 -174 -79 -228 -185 -84 -223 -184 -84 -83 -69 -40 -24 -29 -32 -26 -31 -34 -29 -34 -37 -24 -29 -31 -14 -17 -18 -11 -15 -16 -15 -20 -20 -12 -15 -17 -4 -8 -11 -105 -106 -106 -242 -242 -241 -255 -255 -255 -203 -203 -203 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -93 -93 -93 -238 -238 -238 -255 -255 -255 -238 -238 -238 -110 -101 -100 -166 -75 -38 -182 -80 -37 -182 -82 -37 -182 -82 -38 -182 -82 -38 -182 -82 -38 -182 -82 -38 -183 -82 -38 -183 -82 -38 -183 -82 -38 -183 -82 -38 -182 -82 -38 -183 -81 -38 -176 -79 -35 -137 -103 -95 -242 -241 -241 -255 -255 -255 -191 -191 -191 -13 -13 -13 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -122 -122 -122 -255 -255 -255 -252 -252 -251 -163 -163 -162 -255 -255 -255 -245 -245 -245 -98 -98 -98 -0 -0 -0 -0 -0 -0 -131 -131 -131 -249 -249 -249 -249 -248 -248 -171 -171 -170 -254 -254 -254 -251 -251 -251 -221 -221 -221 -230 -230 -230 -238 -238 -238 -242 -242 -242 -250 -250 -250 -253 -253 -253 -255 -255 -255 -255 -255 -255 -255 -255 -255 -254 -254 -254 -254 -254 -254 -254 -254 -254 -250 -250 -250 -239 -239 -239 -220 -220 -220 -201 -201 -200 -183 -183 -182 -165 -165 -163 -169 -170 -166 -184 -183 -178 -198 -196 -189 -208 -204 -197 -213 -209 -201 -205 -202 -193 -155 -154 -149 -54 -54 -53 -9 -11 -12 -8 -8 -10 -0 -0 -7 -128 -107 -52 -242 -197 -85 -170 -140 -65 -10 -19 -27 -77 -66 -38 -223 -182 -81 -189 -156 -77 -196 -159 -73 -201 -165 -79 -158 -130 -60 -231 -190 -88 -214 -177 -84 -212 -173 -78 -203 -166 -79 -231 -187 -83 -67 -59 -38 -179 -148 -73 -218 -178 -81 -65 -56 -32 -23 -22 -19 -197 -162 -75 -251 -202 -87 -213 -174 -79 -61 -54 -35 -26 -30 -33 -30 -35 -38 -32 -37 -40 -25 -30 -32 -14 -16 -18 -14 -17 -18 -16 -21 -21 -12 -15 -16 -0 -0 -0 -184 -184 -183 -255 -255 -255 -240 -240 -240 -101 -101 -101 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -22 -22 -22 -143 -143 -143 -244 -244 -244 -253 -253 -253 -177 -178 -177 -112 -61 -46 -179 -82 -39 -180 -81 -37 -179 -81 -37 -180 -82 -37 -180 -82 -37 -180 -82 -37 -182 -82 -38 -182 -82 -37 -182 -82 -37 -183 -82 -38 -183 -82 -38 -182 -81 -37 -182 -81 -37 -147 -64 -23 -185 -182 -181 -255 -255 -255 -246 -246 -246 -95 -95 -95 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -83 -83 -83 -243 -243 -243 -254 -254 -254 -189 -188 -188 -239 -239 -238 -252 -252 -252 -181 -181 -181 -96 -96 -96 -129 -129 -129 -182 -182 -182 -251 -251 -251 -255 -255 -255 -169 -169 -169 -246 -246 -246 -255 -255 -255 -255 -255 -255 -255 -255 -255 -251 -251 -251 -246 -246 -246 -241 -241 -240 -235 -235 -235 -227 -227 -225 -219 -219 -218 -211 -210 -209 -193 -192 -191 -182 -180 -177 -161 -160 -156 -157 -156 -151 -162 -160 -153 -179 -178 -170 -199 -196 -188 -212 -209 -200 -219 -215 -206 -223 -219 -210 -224 -220 -210 -225 -221 -211 -226 -222 -212 -225 -222 -212 -227 -223 -213 -230 -226 -216 -122 -120 -114 -0 -2 -4 -7 -7 -9 -0 -0 -7 -146 -121 -60 -243 -197 -85 -156 -130 -63 -7 -17 -24 -82 -69 -39 -225 -184 -82 -185 -151 -75 -202 -164 -76 -192 -158 -75 -149 -122 -57 -238 -194 -91 -218 -180 -85 -210 -172 -77 -205 -169 -79 -229 -187 -84 -60 -52 -34 -184 -153 -73 -215 -176 -80 -60 -51 -29 -5 -14 -19 -176 -145 -67 -250 -201 -88 -200 -164 -76 -38 -39 -34 -26 -31 -34 -29 -34 -37 -27 -32 -35 -21 -26 -28 -13 -15 -17 -12 -15 -16 -14 -18 -18 -12 -15 -17 -11 -13 -13 -213 -213 -212 -255 -255 -255 -208 -208 -208 -50 -50 -50 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -28 -28 -28 -205 -205 -205 -255 -255 -255 -242 -242 -241 -119 -115 -113 -146 -68 -33 -180 -81 -37 -179 -81 -37 -179 -81 -36 -180 -82 -37 -180 -81 -37 -179 -81 -36 -179 -81 -36 -180 -82 -37 -182 -82 -38 -183 -82 -38 -181 -81 -37 -182 -81 -37 -177 -81 -39 -119 -95 -90 -243 -243 -243 -254 -254 -254 -183 -183 -183 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -50 -50 -50 -209 -209 -209 -255 -255 -255 -227 -228 -227 -208 -208 -208 -254 -254 -254 -244 -244 -244 -236 -236 -236 -251 -251 -251 -255 -255 -255 -255 -255 -255 -255 -255 -255 -185 -184 -184 -218 -218 -218 -222 -222 -222 -199 -199 -198 -179 -179 -178 -175 -175 -173 -175 -174 -171 -177 -174 -170 -175 -172 -165 -175 -171 -162 -182 -176 -167 -190 -184 -176 -199 -194 -185 -210 -204 -195 -217 -212 -202 -221 -216 -206 -223 -218 -208 -223 -219 -209 -224 -220 -211 -225 -221 -212 -226 -222 -213 -227 -223 -214 -229 -225 -216 -229 -225 -216 -229 -225 -216 -225 -221 -212 -225 -221 -212 -229 -225 -216 -157 -155 -148 -0 -0 -0 -7 -7 -9 -0 -0 -6 -161 -132 -64 -244 -196 -86 -140 -117 -58 -9 -18 -23 -88 -73 -40 -228 -185 -84 -180 -147 -72 -207 -169 -77 -186 -152 -72 -139 -113 -53 -241 -196 -92 -223 -183 -86 -209 -171 -77 -206 -170 -80 -228 -187 -85 -56 -49 -33 -190 -157 -75 -214 -174 -78 -56 -48 -29 -6 -15 -20 -150 -124 -61 -246 -198 -86 -185 -152 -73 -10 -19 -26 -22 -27 -30 -31 -36 -39 -25 -30 -32 -20 -23 -26 -14 -15 -17 -10 -13 -14 -14 -18 -19 -18 -22 -23 -73 -74 -73 -234 -233 -233 -254 -254 -254 -180 -180 -180 -28 -28 -28 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -102 -102 -102 -238 -238 -238 -255 -255 -255 -219 -219 -218 -99 -73 -65 -166 -76 -38 -179 -81 -37 -179 -81 -37 -179 -80 -38 -180 -81 -38 -180 -81 -37 -180 -82 -37 -180 -82 -37 -182 -81 -38 -182 -82 -37 -180 -82 -37 -181 -81 -36 -181 -81 -38 -151 -80 -56 -196 -196 -196 -255 -255 -255 -231 -231 -231 -71 -71 -71 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -50 -50 -50 -182 -182 -182 -253 -253 -253 -250 -250 -250 -185 -185 -184 -243 -243 -243 -255 -255 -255 -253 -253 -252 -248 -248 -248 -237 -237 -236 -210 -210 -209 -173 -173 -172 -113 -112 -111 -114 -112 -109 -178 -175 -169 -195 -190 -180 -209 -203 -193 -208 -202 -192 -208 -202 -191 -211 -205 -194 -214 -208 -197 -219 -212 -202 -220 -215 -204 -221 -217 -206 -221 -217 -206 -222 -218 -207 -224 -220 -211 -223 -219 -210 -223 -219 -210 -225 -221 -212 -226 -222 -213 -226 -222 -213 -226 -222 -213 -227 -223 -214 -228 -224 -215 -227 -223 -214 -229 -225 -216 -227 -223 -214 -227 -223 -214 -226 -221 -213 -163 -161 -154 -0 -0 -0 -7 -7 -9 -0 -0 -7 -172 -142 -67 -243 -196 -86 -126 -105 -53 -9 -17 -21 -91 -75 -39 -231 -187 -84 -174 -143 -68 -211 -172 -79 -179 -148 -70 -128 -104 -47 -241 -197 -90 -229 -188 -83 -209 -170 -75 -207 -170 -81 -227 -187 -84 -51 -44 -28 -193 -159 -76 -213 -173 -78 -53 -47 -29 -13 -19 -22 -113 -95 -50 -242 -196 -87 -164 -136 -65 -11 -21 -28 -27 -32 -35 -31 -36 -39 -24 -29 -31 -19 -23 -25 -13 -16 -17 -12 -14 -16 -17 -21 -22 -17 -21 -23 -114 -114 -114 -241 -241 -241 -250 -250 -250 -149 -149 -149 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -13 -13 -13 -161 -161 -161 -252 -252 -252 -252 -252 -252 -190 -190 -189 -112 -63 -50 -175 -79 -38 -179 -81 -37 -179 -80 -38 -179 -81 -38 -180 -82 -37 -180 -82 -37 -180 -80 -38 -180 -82 -37 -180 -82 -37 -179 -82 -37 -179 -81 -37 -181 -82 -37 -173 -81 -38 -159 -147 -144 -248 -248 -248 -247 -247 -247 -140 -140 -140 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -13 -13 -13 -184 -184 -184 -252 -252 -252 -255 -255 -255 -255 -255 -255 -205 -205 -204 -176 -176 -176 -209 -209 -209 -192 -191 -189 -165 -163 -158 -158 -155 -146 -182 -177 -168 -204 -199 -189 -195 -190 -182 -191 -186 -177 -216 -211 -199 -217 -211 -200 -219 -213 -203 -218 -213 -202 -219 -215 -204 -220 -216 -205 -220 -216 -205 -221 -216 -205 -221 -217 -206 -221 -217 -206 -222 -218 -207 -223 -219 -208 -223 -219 -210 -224 -220 -211 -224 -220 -211 -225 -221 -212 -226 -222 -213 -226 -222 -213 -225 -221 -212 -227 -223 -214 -227 -223 -214 -228 -224 -215 -228 -224 -215 -229 -225 -216 -230 -226 -217 -230 -225 -216 -176 -173 -166 -0 -0 -0 -6 -6 -8 -0 -0 -8 -184 -151 -70 -243 -197 -86 -108 -89 -48 -9 -15 -19 -94 -78 -39 -233 -189 -85 -169 -139 -67 -216 -176 -82 -174 -143 -68 -119 -97 -45 -242 -197 -89 -239 -194 -84 -209 -170 -76 -210 -173 -81 -227 -186 -83 -42 -36 -23 -195 -162 -78 -212 -172 -77 -51 -45 -27 -16 -21 -24 -90 -76 -43 -241 -197 -89 -171 -140 -67 -7 -20 -25 -30 -34 -37 -29 -34 -37 -23 -27 -30 -15 -19 -21 -14 -17 -18 -14 -17 -18 -18 -23 -25 -21 -25 -28 -149 -149 -149 -249 -249 -249 -242 -242 -242 -115 -115 -115 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -61 -61 -61 -203 -203 -203 -254 -254 -254 -245 -245 -245 -143 -143 -143 -130 -61 -32 -179 -81 -38 -179 -80 -38 -180 -81 -38 -180 -82 -37 -180 -82 -37 -179 -81 -37 -180 -81 -37 -180 -82 -37 -179 -81 -37 -179 -81 -36 -180 -82 -37 -178 -81 -37 -146 -96 -82 -231 -231 -231 -255 -255 -255 -197 -197 -197 -42 -42 -42 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -99 -99 -99 -245 -245 -245 -255 -254 -254 -221 -221 -221 -162 -162 -161 -140 -139 -137 -165 -162 -154 -192 -189 -180 -202 -197 -188 -211 -204 -194 -216 -210 -198 -216 -212 -201 -219 -215 -204 -220 -216 -205 -219 -215 -204 -219 -215 -204 -220 -216 -205 -219 -215 -204 -219 -215 -204 -219 -215 -204 -220 -216 -205 -220 -216 -205 -220 -216 -205 -220 -216 -205 -221 -217 -206 -222 -218 -208 -223 -219 -210 -223 -219 -210 -224 -220 -211 -224 -220 -211 -225 -221 -212 -225 -221 -212 -225 -221 -212 -226 -222 -213 -228 -224 -215 -227 -223 -214 -229 -225 -216 -229 -225 -216 -230 -226 -217 -231 -227 -218 -230 -226 -217 -189 -187 -180 -0 -0 -0 -5 -5 -6 -2 -7 -12 -194 -158 -74 -243 -197 -89 -85 -71 -37 -11 -17 -19 -96 -80 -39 -235 -190 -85 -165 -135 -65 -220 -179 -84 -170 -138 -66 -111 -90 -43 -242 -195 -87 -249 -201 -86 -210 -171 -77 -214 -175 -83 -227 -184 -84 -27 -22 -19 -196 -163 -78 -213 -172 -78 -52 -45 -29 -16 -22 -26 -125 -104 -56 -245 -198 -87 -195 -160 -75 -28 -28 -25 -29 -34 -37 -28 -33 -36 -19 -25 -26 -14 -18 -19 -14 -18 -19 -16 -20 -21 -18 -22 -24 -27 -30 -31 -173 -173 -172 -254 -254 -254 -231 -231 -231 -64 -64 -64 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -85 -85 -85 -229 -229 -229 -255 -255 -255 -240 -240 -240 -126 -117 -114 -154 -69 -32 -179 -81 -37 -179 -81 -37 -180 -81 -37 -180 -81 -37 -180 -81 -37 -180 -80 -38 -179 -80 -38 -179 -80 -38 -180 -81 -37 -179 -81 -36 -179 -81 -36 -155 -67 -25 -190 -184 -184 -255 -255 -254 -239 -239 -239 -85 -85 -85 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -133 -133 -133 -249 -249 -249 -244 -244 -244 -126 -126 -124 -182 -180 -174 -155 -152 -146 -214 -210 -200 -217 -213 -202 -218 -214 -203 -220 -215 -204 -221 -217 -206 -220 -216 -206 -221 -216 -205 -222 -218 -207 -219 -216 -205 -221 -217 -206 -221 -217 -206 -219 -215 -204 -219 -215 -204 -220 -216 -205 -220 -216 -205 -218 -214 -203 -220 -216 -205 -222 -218 -207 -222 -218 -207 -222 -218 -209 -223 -219 -210 -224 -220 -211 -223 -219 -210 -224 -220 -211 -224 -220 -211 -226 -222 -213 -226 -222 -213 -226 -222 -213 -227 -223 -214 -228 -224 -215 -229 -225 -216 -229 -225 -216 -230 -226 -217 -230 -226 -217 -230 -226 -217 -195 -192 -185 -0 -0 -0 -5 -5 -5 -28 -27 -22 -200 -164 -76 -242 -197 -90 -64 -54 -33 -14 -19 -21 -97 -81 -39 -235 -192 -85 -160 -131 -65 -224 -181 -84 -166 -135 -65 -102 -83 -40 -236 -191 -85 -253 -203 -86 -210 -172 -77 -219 -179 -84 -225 -183 -84 -4 -10 -16 -195 -161 -79 -213 -173 -78 -56 -49 -30 -9 -18 -23 -153 -127 -62 -247 -199 -88 -213 -175 -78 -61 -53 -31 -23 -28 -30 -23 -28 -31 -17 -22 -23 -15 -19 -20 -14 -18 -19 -13 -17 -18 -17 -21 -21 -50 -51 -51 -203 -203 -202 -255 -255 -255 -218 -218 -218 -22 -22 -22 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -117 -117 -117 -240 -240 -240 -255 -255 -255 -228 -228 -228 -115 -94 -90 -166 -77 -39 -180 -80 -39 -179 -80 -38 -179 -80 -38 -180 -81 -39 -179 -80 -38 -179 -80 -38 -178 -79 -37 -179 -81 -36 -180 -82 -37 -180 -81 -36 -178 -79 -36 -130 -103 -96 -246 -246 -246 -255 -255 -255 -184 -184 -184 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -104 -104 -104 -248 -248 -248 -252 -252 -252 -137 -136 -135 -205 -202 -193 -149 -147 -141 -217 -213 -204 -222 -218 -208 -223 -219 -209 -222 -218 -209 -223 -219 -209 -222 -218 -208 -222 -218 -209 -223 -219 -210 -221 -217 -207 -222 -218 -208 -221 -217 -207 -220 -216 -205 -221 -217 -206 -221 -217 -206 -220 -216 -205 -220 -216 -205 -221 -217 -206 -222 -218 -207 -222 -218 -207 -222 -218 -209 -222 -218 -209 -223 -219 -210 -223 -219 -210 -224 -220 -211 -225 -221 -212 -225 -221 -212 -226 -222 -213 -226 -222 -213 -227 -223 -214 -228 -224 -215 -227 -223 -214 -228 -224 -215 -230 -226 -217 -230 -226 -217 -230 -225 -217 -207 -203 -194 -0 -0 -0 -6 -6 -6 -44 -37 -25 -205 -168 -77 -240 -195 -89 -37 -32 -21 -12 -15 -17 -99 -82 -39 -237 -194 -86 -156 -127 -62 -226 -184 -85 -163 -132 -64 -92 -76 -38 -230 -186 -83 -253 -203 -87 -212 -173 -78 -223 -182 -85 -224 -182 -83 -0 -0 -13 -193 -159 -77 -216 -175 -78 -61 -52 -31 -4 -14 -19 -175 -145 -68 -250 -202 -88 -229 -186 -84 -90 -76 -40 -23 -27 -29 -23 -27 -30 -18 -22 -23 -12 -16 -17 -13 -17 -18 -14 -18 -19 -17 -21 -22 -71 -71 -71 -233 -232 -232 -254 -254 -254 -180 -180 -180 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -13 -13 -13 -150 -150 -150 -246 -246 -246 -254 -254 -253 -205 -206 -205 -108 -70 -60 -169 -77 -40 -180 -81 -38 -179 -80 -38 -179 -80 -38 -179 -80 -38 -179 -80 -38 -179 -80 -38 -180 -82 -37 -180 -82 -37 -180 -81 -36 -183 -81 -37 -146 -70 -39 -194 -193 -192 -255 -255 -255 -235 -235 -235 -59 -59 -59 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -50 -50 -50 -238 -238 -238 -255 -255 -255 -164 -164 -163 -198 -195 -187 -147 -145 -139 -216 -211 -203 -223 -219 -210 -223 -219 -210 -223 -219 -210 -224 -220 -211 -224 -220 -211 -224 -220 -211 -224 -220 -211 -222 -218 -209 -223 -219 -210 -222 -218 -207 -221 -217 -206 -221 -217 -206 -221 -217 -206 -221 -217 -206 -221 -217 -206 -221 -217 -206 -222 -218 -207 -222 -218 -207 -221 -217 -208 -222 -218 -209 -223 -219 -210 -223 -219 -210 -223 -219 -210 -224 -220 -211 -226 -222 -213 -226 -222 -213 -226 -222 -213 -225 -221 -212 -227 -223 -214 -227 -223 -213 -227 -223 -214 -230 -226 -217 -231 -227 -218 -230 -226 -217 -212 -208 -200 -0 -0 -0 -5 -5 -7 -55 -45 -26 -213 -172 -76 -233 -190 -87 -12 -16 -17 -12 -14 -16 -101 -84 -39 -237 -194 -88 -153 -126 -61 -227 -185 -85 -159 -129 -62 -81 -66 -34 -224 -181 -82 -253 -204 -87 -215 -175 -79 -225 -184 -87 -224 -181 -84 -0 -0 -10 -190 -156 -74 -219 -178 -80 -68 -58 -33 -18 -22 -21 -194 -158 -75 -230 -186 -84 -237 -194 -89 -115 -94 -44 -23 -27 -31 -22 -26 -28 -18 -22 -22 -12 -16 -17 -12 -16 -17 -14 -18 -19 -11 -16 -18 -118 -118 -118 -254 -254 -254 -252 -252 -252 -119 -119 -119 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -13 -13 -13 -85 -85 -85 -224 -224 -224 -255 -255 -255 -254 -254 -254 -193 -192 -191 -109 -57 -41 -172 -78 -38 -179 -80 -38 -179 -80 -38 -179 -80 -38 -179 -80 -38 -179 -80 -38 -179 -81 -37 -179 -81 -37 -179 -81 -37 -180 -82 -37 -177 -80 -40 -141 -129 -127 -248 -248 -248 -251 -251 -251 -158 -158 -158 -22 -22 -22 -13 -13 -13 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -215 -215 -215 -255 -255 -255 -201 -201 -201 -179 -175 -169 -164 -160 -154 -193 -190 -183 -224 -220 -211 -222 -218 -209 -223 -219 -210 -224 -220 -211 -224 -220 -211 -224 -220 -211 -224 -220 -211 -223 -219 -210 -223 -219 -210 -222 -218 -208 -221 -217 -207 -222 -218 -208 -222 -218 -206 -221 -217 -206 -221 -217 -206 -220 -216 -205 -221 -217 -206 -221 -217 -207 -222 -218 -209 -223 -219 -210 -224 -220 -211 -224 -220 -211 -224 -220 -211 -225 -221 -212 -225 -221 -212 -225 -221 -212 -226 -222 -213 -227 -223 -214 -227 -223 -214 -227 -223 -214 -228 -224 -215 -230 -226 -217 -229 -225 -216 -229 -225 -215 -206 -203 -195 -0 -0 -0 -6 -7 -8 -65 -53 -29 -218 -175 -78 -225 -184 -87 -0 -5 -14 -12 -14 -16 -102 -85 -41 -239 -195 -90 -150 -123 -59 -228 -186 -85 -158 -128 -62 -63 -53 -28 -216 -176 -80 -254 -204 -86 -218 -177 -80 -225 -184 -87 -224 -183 -84 -0 -0 -13 -184 -150 -72 -223 -180 -81 -77 -65 -37 -45 -41 -28 -208 -171 -79 -198 -162 -79 -231 -189 -88 -146 -119 -58 -25 -29 -31 -23 -26 -29 -17 -21 -21 -15 -19 -20 -15 -19 -20 -14 -18 -19 -0 -0 -0 -185 -185 -184 -255 -255 -255 -232 -232 -232 -34 -34 -34 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -90 -90 -90 -222 -222 -222 -254 -254 -254 -254 -254 -254 -230 -230 -230 -193 -189 -188 -118 -83 -75 -162 -73 -36 -178 -80 -37 -179 -80 -38 -179 -80 -38 -179 -80 -38 -179 -80 -38 -180 -82 -37 -179 -81 -37 -180 -81 -38 -180 -82 -37 -180 -81 -38 -145 -90 -76 -217 -217 -217 -255 -255 -255 -232 -232 -232 -183 -183 -183 -162 -162 -162 -85 -85 -85 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -181 -181 -181 -255 -255 -255 -230 -230 -229 -141 -139 -134 -192 -188 -182 -156 -154 -149 -226 -221 -213 -223 -219 -210 -224 -220 -211 -224 -220 -211 -225 -221 -212 -224 -220 -211 -224 -220 -211 -223 -219 -210 -223 -219 -210 -225 -220 -210 -225 -221 -211 -225 -221 -212 -224 -220 -210 -221 -217 -206 -220 -216 -205 -220 -216 -205 -220 -216 -205 -221 -217 -208 -223 -219 -209 -223 -219 -210 -223 -219 -210 -224 -220 -211 -224 -220 -211 -224 -220 -211 -225 -221 -212 -225 -221 -212 -225 -221 -212 -226 -222 -213 -226 -222 -213 -226 -222 -213 -227 -223 -214 -229 -225 -216 -228 -224 -215 -229 -225 -216 -171 -169 -162 -0 -0 -0 -7 -8 -9 -72 -60 -33 -220 -179 -80 -218 -179 -84 -0 -0 -14 -12 -15 -15 -104 -85 -42 -240 -195 -89 -147 -121 -58 -228 -187 -87 -157 -128 -60 -45 -39 -22 -209 -169 -76 -254 -203 -86 -220 -179 -80 -220 -181 -87 -225 -185 -84 -29 -23 -17 -175 -144 -69 -228 -184 -82 -86 -72 -41 -74 -63 -38 -220 -180 -83 -167 -139 -68 -210 -171 -80 -185 -152 -72 -26 -26 -26 -19 -23 -24 -13 -16 -17 -13 -17 -18 -13 -17 -18 -13 -17 -18 -0 -0 -0 -231 -231 -231 -255 -255 -255 -190 -190 -190 -13 -13 -13 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -175 -175 -175 -255 -255 -255 -251 -250 -250 -190 -188 -187 -145 -105 -96 -162 -74 -38 -172 -77 -36 -178 -79 -37 -178 -79 -38 -179 -80 -38 -179 -80 -38 -179 -80 -38 -179 -80 -38 -179 -80 -37 -179 -81 -36 -179 -81 -37 -179 -81 -36 -180 -81 -37 -166 -74 -38 -158 -149 -147 -249 -249 -249 -255 -255 -255 -255 -255 -255 -252 -252 -252 -231 -231 -231 -130 -130 -130 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -125 -125 -125 -254 -254 -254 -253 -252 -252 -141 -140 -137 -204 -201 -193 -126 -124 -119 -227 -222 -214 -223 -219 -210 -224 -220 -211 -224 -220 -211 -225 -221 -212 -225 -221 -212 -225 -221 -211 -223 -219 -210 -225 -221 -212 -212 -208 -200 -193 -189 -182 -216 -212 -202 -222 -218 -208 -220 -216 -205 -220 -216 -205 -220 -216 -204 -221 -217 -206 -222 -218 -208 -222 -218 -208 -222 -218 -208 -222 -218 -209 -224 -220 -211 -224 -220 -211 -223 -219 -210 -224 -220 -211 -225 -221 -212 -225 -221 -212 -225 -221 -212 -226 -222 -213 -226 -222 -213 -227 -223 -214 -227 -223 -214 -227 -223 -214 -226 -222 -213 -101 -100 -96 -1 -1 -3 -10 -11 -13 -79 -67 -37 -224 -182 -81 -213 -174 -81 -0 -0 -11 -11 -14 -14 -104 -86 -40 -240 -196 -89 -147 -121 -58 -228 -186 -87 -158 -129 -60 -26 -23 -17 -196 -160 -73 -252 -203 -87 -224 -181 -80 -212 -175 -84 -229 -187 -83 -57 -46 -26 -164 -135 -66 -231 -188 -85 -92 -77 -43 -91 -78 -42 -229 -188 -87 -134 -110 -54 -182 -148 -68 -218 -179 -85 -31 -29 -23 -17 -22 -22 -13 -15 -16 -12 -13 -15 -12 -13 -15 -10 -11 -13 -51 -52 -51 -242 -242 -242 -255 -255 -255 -154 -154 -154 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -182 -182 -182 -255 -255 -255 -241 -241 -241 -141 -132 -131 -144 -82 -63 -155 -74 -36 -156 -73 -38 -145 -68 -36 -166 -74 -38 -178 -80 -37 -178 -80 -37 -179 -80 -38 -179 -80 -38 -179 -80 -38 -179 -80 -38 -180 -82 -37 -180 -81 -36 -180 -80 -38 -178 -80 -39 -136 -60 -28 -173 -167 -165 -221 -220 -220 -227 -227 -226 -252 -252 -252 -255 -255 -255 -232 -232 -232 -69 -69 -69 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -75 -75 -75 -235 -235 -235 -254 -254 -254 -182 -182 -181 -194 -191 -184 -140 -139 -134 -215 -211 -203 -224 -220 -211 -225 -221 -212 -225 -221 -212 -225 -221 -212 -225 -221 -212 -224 -220 -211 -218 -215 -206 -216 -212 -204 -115 -113 -109 -0 -0 -0 -188 -185 -178 -214 -210 -200 -168 -164 -157 -189 -185 -178 -223 -219 -208 -221 -217 -206 -222 -218 -207 -222 -218 -207 -223 -219 -208 -222 -218 -209 -223 -219 -210 -224 -220 -211 -224 -220 -211 -224 -220 -211 -224 -220 -211 -224 -220 -211 -226 -222 -213 -225 -221 -212 -225 -221 -212 -227 -223 -214 -227 -223 -214 -226 -222 -213 -199 -196 -189 -55 -54 -52 -5 -5 -7 -11 -12 -16 -85 -71 -38 -227 -184 -82 -208 -170 -79 -0 -0 -8 -11 -12 -14 -106 -86 -40 -240 -196 -90 -145 -120 -57 -227 -186 -85 -160 -130 -62 -2 -6 -12 -183 -150 -70 -251 -202 -87 -226 -183 -81 -205 -167 -80 -233 -188 -84 -79 -65 -36 -153 -126 -63 -235 -190 -86 -97 -81 -44 -107 -89 -45 -236 -193 -91 -97 -80 -40 -151 -124 -59 -238 -194 -91 -72 -61 -34 -13 -18 -20 -9 -11 -12 -9 -10 -12 -10 -12 -14 -12 -13 -15 -0 -0 -0 -234 -234 -234 -255 -255 -255 -178 -178 -178 -13 -13 -13 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -136 -136 -136 -253 -253 -253 -255 -255 -255 -237 -237 -237 -112 -112 -112 -95 -44 -27 -151 -70 -36 -175 -80 -37 -180 -80 -37 -179 -80 -38 -178 -79 -37 -179 -80 -38 -180 -81 -39 -179 -80 -38 -179 -80 -38 -179 -81 -38 -179 -81 -36 -179 -80 -38 -180 -82 -38 -177 -81 -40 -128 -56 -23 -55 -23 -6 -96 -95 -94 -207 -207 -206 -254 -254 -254 -248 -248 -248 -127 -127 -127 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -46 -46 -46 -204 -204 -204 -255 -255 -255 -219 -219 -219 -169 -166 -161 -179 -177 -170 -190 -187 -180 -225 -221 -212 -225 -221 -212 -225 -221 -212 -224 -220 -211 -224 -219 -210 -187 -183 -178 -112 -111 -108 -147 -145 -143 -36 -36 -36 -71 -69 -67 -201 -197 -190 -141 -138 -133 -24 -24 -24 -84 -82 -80 -214 -209 -201 -220 -216 -206 -221 -217 -206 -222 -218 -208 -223 -219 -209 -223 -219 -209 -222 -218 -208 -223 -219 -209 -224 -220 -210 -225 -221 -212 -224 -220 -211 -225 -221 -212 -226 -222 -213 -225 -221 -212 -226 -222 -213 -226 -222 -213 -226 -222 -214 -226 -221 -212 -155 -151 -146 -21 -20 -21 -6 -6 -7 -11 -12 -15 -91 -75 -38 -230 -187 -83 -201 -164 -79 -0 -0 -8 -11 -12 -15 -106 -87 -40 -241 -197 -90 -143 -118 -57 -226 -185 -85 -163 -134 -63 -0 -5 -12 -166 -136 -64 -250 -201 -87 -230 -185 -82 -195 -159 -79 -235 -189 -83 -94 -78 -42 -142 -117 -57 -238 -193 -87 -102 -84 -42 -122 -100 -47 -234 -192 -91 -76 -63 -32 -116 -95 -48 -237 -193 -87 -138 -114 -59 -0 -10 -19 -9 -9 -12 -9 -10 -12 -12 -14 -16 -16 -19 -20 -0 -0 -0 -213 -212 -211 -255 -255 -255 -203 -203 -203 -13 -13 -13 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -85 -85 -85 -230 -230 -230 -255 -255 -255 -249 -248 -248 -157 -154 -154 -125 -63 -40 -170 -78 -38 -176 -80 -37 -177 -80 -37 -179 -81 -38 -178 -79 -37 -179 -80 -38 -179 -80 -38 -179 -80 -38 -179 -80 -38 -179 -80 -38 -179 -80 -38 -179 -81 -37 -179 -80 -37 -180 -81 -37 -169 -76 -38 -137 -66 -39 -78 -50 -40 -144 -144 -144 -247 -247 -247 -255 -255 -255 -220 -220 -220 -34 -34 -34 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -13 -13 -13 -169 -169 -169 -253 -253 -253 -236 -236 -236 -159 -157 -153 -207 -203 -195 -161 -159 -153 -224 -220 -211 -225 -221 -212 -225 -221 -212 -224 -218 -210 -195 -191 -184 -71 -70 -68 -51 -51 -51 -48 -49 -49 -17 -18 -18 -141 -138 -133 -165 -162 -156 -10 -10 -10 -0 -0 -0 -144 -143 -137 -221 -217 -207 -221 -217 -206 -220 -216 -206 -221 -217 -207 -222 -218 -207 -222 -218 -207 -220 -216 -205 -221 -217 -206 -222 -218 -209 -223 -219 -211 -223 -219 -210 -223 -219 -210 -224 -220 -210 -224 -220 -211 -225 -221 -212 -226 -222 -213 -226 -222 -213 -215 -211 -202 -99 -97 -94 -6 -6 -8 -5 -5 -6 -10 -11 -13 -94 -77 -38 -232 -188 -84 -194 -160 -78 -0 -0 -9 -12 -13 -15 -107 -88 -40 -242 -197 -90 -141 -117 -57 -225 -183 -85 -166 -136 -65 -6 -8 -13 -145 -119 -58 -248 -200 -86 -233 -188 -84 -183 -151 -77 -236 -191 -83 -104 -88 -46 -132 -108 -53 -240 -196 -90 -107 -88 -43 -142 -115 -55 -228 -186 -88 -66 -54 -28 -62 -52 -28 -226 -185 -84 -189 -156 -74 -0 -2 -19 -9 -11 -12 -11 -12 -14 -13 -14 -16 -13 -14 -16 -0 -0 -0 -180 -180 -179 -255 -255 -255 -231 -231 -231 -34 -34 -34 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -90 -90 -90 -216 -216 -216 -254 -254 -254 -247 -247 -246 -161 -160 -159 -124 -57 -27 -174 -80 -38 -177 -80 -37 -177 -80 -37 -178 -80 -38 -178 -79 -37 -179 -80 -38 -179 -80 -38 -179 -80 -38 -179 -80 -38 -179 -80 -38 -179 -80 -38 -180 -81 -39 -180 -81 -39 -165 -75 -40 -138 -64 -34 -111 -51 -21 -100 -90 -88 -182 -182 -182 -248 -247 -247 -255 -255 -255 -235 -235 -235 -120 -120 -120 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -133 -133 -133 -245 -245 -245 -246 -246 -246 -164 -163 -161 -216 -212 -205 -148 -146 -141 -218 -215 -206 -226 -222 -213 -225 -221 -212 -217 -213 -205 -104 -102 -99 -13 -13 -13 -61 -61 -61 -17 -18 -17 -56 -55 -53 -173 -170 -165 -85 -84 -81 -3 -3 -4 -63 -62 -61 -206 -203 -195 -213 -209 -201 -221 -217 -207 -219 -215 -203 -219 -215 -205 -221 -217 -206 -221 -217 -206 -221 -217 -206 -220 -216 -205 -221 -217 -207 -221 -217 -207 -222 -218 -207 -222 -218 -207 -222 -218 -207 -223 -219 -210 -225 -221 -212 -226 -222 -213 -225 -221 -212 -186 -183 -177 -12 -12 -13 -7 -7 -8 -5 -5 -6 -11 -12 -14 -97 -80 -39 -234 -190 -84 -189 -156 -74 -0 -0 -10 -10 -12 -14 -107 -87 -40 -242 -197 -91 -141 -117 -57 -222 -180 -83 -171 -140 -66 -11 -12 -12 -116 -96 -49 -247 -199 -87 -237 -191 -84 -175 -143 -71 -239 -194 -84 -119 -97 -48 -121 -100 -51 -242 -197 -91 -112 -92 -44 -167 -138 -66 -213 -175 -81 -56 -47 -26 -0 -0 -10 -200 -164 -78 -222 -181 -85 -41 -36 -25 -9 -11 -13 -10 -11 -13 -13 -14 -16 -13 -14 -16 -9 -14 -16 -136 -135 -134 -255 -255 -255 -246 -246 -246 -69 -69 -69 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -42 -42 -42 -212 -212 -212 -254 -254 -254 -251 -251 -251 -173 -172 -171 -131 -69 -47 -174 -79 -38 -178 -80 -38 -179 -80 -38 -178 -79 -37 -179 -80 -38 -179 -80 -38 -179 -80 -38 -179 -80 -38 -179 -80 -38 -179 -80 -38 -179 -80 -38 -179 -80 -38 -179 -80 -37 -180 -81 -37 -176 -80 -38 -144 -67 -34 -58 -21 -5 -159 -159 -158 -242 -242 -242 -255 -255 -255 -239 -239 -239 -128 -128 -128 -13 -13 -13 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -98 -98 -98 -238 -238 -238 -251 -251 -251 -165 -164 -163 -215 -211 -203 -148 -146 -140 -217 -212 -204 -226 -222 -213 -226 -222 -213 -168 -166 -160 -0 -0 -0 -53 -53 -53 -32 -32 -32 -0 -0 -0 -111 -110 -108 -148 -147 -143 -1 -1 -3 -16 -16 -17 -131 -131 -128 -93 -93 -91 -47 -46 -45 -150 -148 -142 -217 -214 -203 -220 -216 -205 -223 -219 -208 -221 -217 -206 -221 -217 -206 -222 -218 -208 -222 -218 -209 -223 -219 -210 -223 -219 -210 -223 -219 -210 -224 -220 -211 -225 -221 -212 -226 -222 -213 -227 -223 -214 -225 -221 -212 -115 -114 -110 -0 -0 -0 -7 -7 -8 -5 -5 -5 -12 -13 -14 -100 -81 -40 -236 -191 -86 -185 -153 -73 -0 -0 -10 -9 -11 -13 -107 -87 -40 -243 -197 -90 -140 -115 -56 -219 -178 -82 -177 -145 -69 -16 -15 -13 -81 -68 -36 -243 -198 -88 -241 -193 -85 -163 -133 -68 -241 -196 -87 -130 -105 -51 -109 -90 -44 -243 -198 -92 -118 -96 -45 -190 -157 -74 -199 -162 -74 -46 -39 -25 -0 -0 -9 -152 -126 -62 -235 -192 -86 -107 -89 -48 -12 -13 -16 -12 -13 -14 -13 -14 -15 -13 -14 -16 -12 -16 -17 -97 -97 -97 -253 -253 -253 -252 -252 -252 -106 -106 -106 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -34 -34 -34 -175 -175 -175 -254 -254 -254 -252 -251 -251 -181 -179 -178 -123 -58 -30 -172 -79 -37 -177 -80 -36 -178 -80 -37 -179 -80 -38 -178 -80 -38 -179 -80 -38 -179 -80 -38 -179 -80 -38 -179 -80 -38 -179 -80 -38 -179 -80 -38 -178 -79 -37 -179 -80 -38 -180 -80 -38 -180 -80 -38 -178 -81 -38 -153 -71 -36 -108 -85 -81 -163 -161 -161 -236 -236 -236 -255 -255 -255 -214 -214 -214 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -61 -61 -61 -230 -230 -230 -255 -255 -255 -176 -176 -175 -206 -201 -194 -163 -160 -155 -217 -210 -203 -225 -221 -212 -214 -210 -202 -81 -80 -78 -7 -7 -9 -40 -40 -40 -6 -6 -7 -0 -0 -0 -145 -143 -141 -52 -52 -51 -4 -4 -7 -61 -61 -61 -98 -97 -97 -16 -16 -17 -27 -27 -27 -52 -51 -51 -210 -206 -196 -220 -216 -206 -221 -217 -206 -221 -217 -206 -221 -217 -206 -222 -218 -209 -223 -220 -211 -224 -220 -211 -225 -221 -212 -226 -221 -213 -227 -222 -214 -226 -222 -213 -220 -217 -208 -215 -211 -203 -189 -186 -179 -35 -35 -33 -6 -6 -8 -6 -6 -7 -5 -5 -5 -11 -12 -14 -102 -82 -41 -237 -192 -86 -180 -150 -72 -0 -0 -11 -8 -10 -12 -107 -87 -40 -242 -198 -91 -139 -115 -57 -215 -175 -80 -183 -149 -71 -18 -17 -14 -38 -30 -20 -235 -191 -88 -244 -196 -86 -149 -121 -59 -243 -198 -89 -139 -114 -53 -99 -82 -41 -241 -197 -91 -121 -99 -46 -209 -172 -81 -180 -148 -67 -33 -30 -24 -6 -10 -14 -81 -66 -36 -239 -196 -91 -151 -125 -59 -13 -14 -14 -9 -10 -12 -12 -15 -17 -14 -16 -18 -14 -17 -19 -80 -80 -80 -243 -243 -243 -254 -254 -254 -147 -147 -147 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -13 -13 -13 -153 -153 -153 -247 -247 -247 -254 -254 -254 -203 -203 -202 -129 -72 -55 -172 -78 -37 -177 -79 -36 -177 -80 -37 -177 -80 -37 -177 -80 -37 -178 -80 -38 -178 -79 -37 -178 -79 -37 -178 -79 -37 -179 -80 -38 -179 -80 -38 -179 -80 -38 -179 -80 -38 -180 -80 -39 -180 -80 -37 -175 -80 -39 -136 -61 -28 -150 -144 -141 -223 -223 -222 -254 -254 -254 -255 -255 -255 -248 -248 -248 -142 -142 -142 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -222 -222 -222 -255 -255 -255 -192 -191 -191 -191 -187 -182 -169 -165 -159 -214 -209 -201 -225 -221 -212 -175 -172 -165 -38 -37 -37 -39 -39 -39 -45 -45 -45 -6 -6 -8 -31 -30 -30 -99 -99 -97 -0 -0 -0 -13 -13 -14 -102 -102 -100 -50 -51 -50 -7 -7 -10 -73 -73 -71 -90 -89 -87 -217 -213 -204 -218 -214 -203 -218 -213 -203 -216 -212 -203 -217 -213 -204 -210 -206 -198 -196 -194 -186 -182 -180 -174 -167 -166 -161 -148 -146 -142 -126 -124 -120 -98 -96 -93 -71 -70 -68 -67 -66 -64 -66 -66 -65 -8 -8 -9 -6 -6 -8 -5 -5 -7 -5 -6 -6 -12 -13 -15 -104 -85 -41 -239 -193 -86 -177 -146 -70 -0 -0 -9 -9 -11 -13 -107 -87 -39 -242 -198 -91 -139 -114 -57 -209 -171 -79 -188 -153 -74 -21 -19 -16 -0 -0 -5 -221 -181 -86 -245 -198 -86 -134 -110 -50 -244 -199 -92 -148 -121 -57 -99 -80 -41 -240 -196 -91 -120 -98 -45 -224 -184 -85 -163 -133 -62 -20 -21 -21 -14 -18 -19 -29 -27 -19 -215 -177 -84 -189 -155 -71 -39 -33 -20 -8 -9 -12 -12 -14 -15 -12 -14 -16 -14 -16 -18 -64 -65 -65 -222 -221 -221 -255 -255 -255 -190 -190 -190 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -13 -13 -13 -151 -151 -151 -247 -247 -247 -255 -255 -255 -226 -224 -224 -137 -98 -88 -171 -78 -38 -176 -79 -36 -176 -79 -36 -176 -79 -36 -177 -80 -37 -177 -80 -37 -178 -80 -37 -178 -79 -37 -178 -79 -37 -179 -80 -38 -179 -80 -38 -179 -80 -38 -179 -80 -38 -179 -80 -38 -179 -80 -38 -171 -78 -39 -131 -83 -70 -195 -193 -192 -249 -249 -249 -255 -255 -255 -249 -249 -249 -215 -215 -215 -129 -129 -129 -22 -22 -22 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -202 -202 -202 -255 -255 -255 -215 -215 -214 -168 -166 -161 -170 -166 -160 -207 -203 -195 -221 -217 -209 -138 -136 -131 -12 -12 -13 -70 -70 -70 -48 -48 -48 -16 -15 -16 -109 -107 -107 -49 -49 -49 -0 -0 -0 -77 -77 -76 -94 -94 -94 -0 -0 -0 -20 -19 -20 -88 -87 -85 -138 -137 -132 -187 -183 -175 -168 -164 -158 -145 -143 -137 -117 -115 -112 -81 -80 -78 -46 -46 -46 -0 -2 -7 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -1 -3 -3 -6 -8 -8 -10 -53 -53 -53 -51 -51 -51 -7 -7 -9 -6 -6 -8 -5 -5 -6 -6 -7 -7 -14 -17 -18 -106 -86 -40 -240 -194 -87 -174 -143 -69 -0 -0 -7 -9 -10 -13 -107 -87 -40 -242 -198 -91 -138 -114 -57 -206 -167 -78 -193 -159 -75 -23 -20 -17 -0 -0 -10 -200 -164 -78 -247 -200 -88 -128 -104 -48 -241 -196 -92 -162 -132 -61 -118 -96 -49 -237 -195 -90 -114 -94 -45 -234 -192 -90 -147 -120 -56 -14 -17 -18 -13 -16 -17 -20 -21 -19 -168 -138 -65 -224 -184 -85 -64 -53 -27 -9 -10 -12 -12 -13 -15 -13 -14 -16 -13 -16 -17 -45 -47 -47 -197 -197 -196 -255 -255 -255 -219 -219 -219 -28 -28 -28 -0 -0 -0 -0 -0 -0 -0 -0 -0 -28 -28 -28 -149 -149 -149 -246 -246 -246 -255 -255 -255 -229 -229 -229 -148 -120 -113 -167 -74 -30 -176 -79 -36 -176 -79 -36 -176 -79 -36 -176 -79 -36 -177 -80 -37 -176 -79 -36 -177 -80 -37 -179 -80 -38 -178 -79 -37 -178 -79 -37 -179 -80 -38 -178 -79 -37 -179 -80 -38 -178 -80 -38 -160 -70 -27 -137 -103 -96 -208 -208 -208 -254 -254 -254 -254 -254 -254 -228 -228 -228 -150 -150 -150 -22 -22 -22 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -167 -167 -167 -254 -254 -254 -235 -235 -234 -136 -135 -131 -174 -172 -165 -199 -196 -188 -216 -212 -204 -113 -112 -108 -13 -13 -15 -64 -64 -64 -39 -39 -39 -12 -12 -13 -63 -61 -62 -20 -20 -21 -0 -0 -0 -75 -74 -73 -28 -28 -29 -4 -4 -7 -8 -8 -10 -35 -35 -34 -51 -50 -48 -42 -41 -40 -10 -10 -10 -0 -0 -0 -0 -0 -0 -2 -2 -3 -5 -5 -8 -7 -7 -8 -7 -7 -9 -7 -8 -10 -7 -7 -9 -7 -7 -9 -7 -7 -9 -18 -18 -19 -57 -57 -57 -20 -20 -22 -7 -8 -11 -8 -8 -10 -5 -5 -6 -6 -7 -7 -10 -11 -12 -108 -88 -40 -241 -196 -87 -169 -139 -68 -0 -0 -6 -9 -11 -13 -107 -88 -40 -242 -198 -90 -136 -113 -54 -201 -163 -75 -201 -165 -78 -23 -21 -16 -0 -0 -12 -176 -144 -69 -249 -202 -89 -128 -104 -48 -226 -185 -86 -183 -149 -68 -168 -138 -68 -227 -186 -84 -112 -93 -49 -236 -193 -91 -129 -106 -51 -12 -13 -15 -12 -14 -16 -14 -17 -18 -119 -98 -46 -240 -196 -91 -103 -84 -40 -5 -8 -12 -13 -14 -16 -13 -14 -16 -13 -14 -16 -22 -24 -25 -162 -162 -161 -252 -252 -252 -237 -237 -237 -95 -95 -95 -0 -0 -0 -0 -0 -0 -13 -13 -13 -155 -155 -155 -246 -246 -246 -255 -255 -255 -230 -230 -230 -147 -121 -115 -166 -76 -36 -175 -79 -36 -176 -80 -36 -176 -79 -36 -176 -79 -36 -177 -80 -37 -176 -79 -36 -176 -79 -37 -177 -80 -37 -178 -80 -37 -177 -80 -37 -177 -79 -37 -178 -79 -37 -178 -80 -36 -177 -80 -38 -141 -70 -45 -155 -144 -142 -231 -231 -230 -254 -254 -254 -253 -253 -253 -200 -200 -200 -90 -90 -90 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -118 -118 -118 -253 -253 -253 -252 -252 -252 -127 -126 -123 -178 -175 -168 -187 -185 -178 -220 -215 -207 -139 -137 -132 -19 -18 -19 -0 -0 -0 -0 -0 -0 -9 -9 -8 -48 -48 -47 -13 -13 -13 -26 -26 -26 -56 -56 -55 -40 -39 -39 -73 -72 -72 -83 -83 -82 -86 -86 -86 -106 -105 -105 -107 -106 -106 -94 -93 -93 -58 -58 -57 -0 -0 -0 -0 -0 -0 -6 -6 -8 -7 -7 -9 -8 -8 -10 -8 -8 -11 -9 -10 -12 -8 -9 -11 -3 -4 -6 -64 -64 -63 -54 -54 -54 -6 -6 -8 -6 -7 -9 -8 -8 -10 -5 -5 -6 -5 -5 -5 -7 -7 -9 -110 -89 -39 -243 -197 -87 -163 -133 -65 -0 -0 -6 -8 -9 -10 -105 -86 -40 -241 -197 -90 -133 -109 -53 -195 -159 -72 -208 -170 -80 -23 -20 -14 -0 -1 -11 -144 -120 -59 -251 -203 -93 -131 -105 -49 -191 -156 -73 -239 -194 -88 -243 -197 -89 -202 -166 -77 -121 -100 -54 -234 -191 -87 -105 -87 -45 -9 -11 -13 -9 -10 -12 -10 -11 -12 -80 -66 -33 -224 -183 -83 -171 -140 -69 -0 -0 -10 -13 -14 -16 -13 -14 -16 -12 -13 -15 -14 -17 -18 -133 -133 -133 -245 -245 -245 -247 -247 -247 -156 -156 -156 -22 -22 -22 -42 -42 -42 -156 -156 -156 -249 -249 -249 -255 -255 -255 -233 -233 -232 -149 -125 -119 -165 -75 -36 -175 -79 -35 -174 -80 -36 -176 -80 -36 -175 -80 -36 -176 -79 -36 -177 -79 -37 -176 -80 -37 -177 -80 -37 -176 -80 -37 -177 -80 -37 -177 -80 -37 -177 -80 -37 -177 -80 -36 -167 -75 -36 -138 -100 -90 -188 -187 -186 -250 -250 -249 -255 -255 -255 -246 -246 -246 -177 -177 -177 -28 -28 -28 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -64 -64 -64 -245 -245 -245 -255 -255 -255 -154 -153 -152 -148 -145 -141 -136 -134 -130 -150 -147 -142 -144 -142 -139 -156 -156 -155 -165 -165 -164 -124 -124 -123 -159 -159 -158 -212 -212 -211 -193 -192 -192 -196 -196 -196 -215 -215 -215 -211 -210 -210 -222 -222 -222 -227 -227 -227 -229 -229 -229 -241 -240 -240 -241 -241 -241 -233 -233 -233 -216 -215 -215 -182 -182 -181 -130 -130 -129 -52 -52 -51 -0 -0 -0 -0 -0 -0 -6 -6 -9 -7 -7 -10 -6 -6 -8 -51 -51 -52 -90 -90 -88 -0 -0 -1 -7 -7 -9 -5 -6 -8 -7 -7 -9 -5 -5 -6 -5 -5 -5 -5 -6 -8 -110 -89 -39 -244 -198 -88 -153 -125 -64 -0 -0 -6 -4 -7 -11 -103 -84 -40 -240 -195 -90 -127 -104 -50 -188 -152 -69 -214 -174 -81 -23 -19 -13 -2 -5 -10 -110 -90 -44 -251 -204 -94 -133 -108 -50 -106 -88 -43 -221 -182 -84 -227 -186 -85 -122 -101 -51 -144 -119 -64 -228 -188 -87 -71 -58 -30 -7 -7 -9 -6 -7 -9 -7 -7 -9 -27 -23 -15 -164 -135 -66 -166 -138 -73 -0 -0 -8 -12 -13 -15 -11 -12 -14 -12 -14 -16 -13 -17 -18 -70 -70 -70 -228 -228 -228 -255 -255 -255 -241 -241 -241 -115 -115 -115 -189 -189 -189 -248 -248 -248 -255 -255 -255 -224 -223 -223 -121 -111 -109 -156 -70 -31 -173 -79 -36 -174 -79 -36 -175 -80 -36 -175 -80 -36 -175 -80 -36 -176 -79 -36 -176 -79 -36 -176 -79 -36 -176 -79 -36 -177 -80 -37 -177 -80 -37 -177 -80 -37 -176 -80 -38 -147 -69 -37 -157 -142 -140 -225 -225 -224 -255 -255 -255 -255 -255 -255 -224 -224 -224 -142 -142 -142 -34 -34 -34 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -28 -28 -28 -220 -220 -220 -255 -255 -255 -211 -211 -210 -118 -118 -118 -160 -160 -159 -192 -192 -192 -191 -190 -190 -249 -249 -249 -252 -252 -252 -249 -249 -249 -251 -251 -251 -255 -255 -255 -254 -254 -254 -254 -254 -254 -254 -254 -254 -254 -254 -254 -253 -253 -253 -252 -252 -252 -252 -252 -252 -251 -251 -251 -250 -250 -250 -252 -252 -252 -255 -255 -255 -253 -253 -253 -249 -249 -249 -239 -238 -238 -201 -201 -201 -140 -139 -138 -79 -79 -79 -52 -52 -52 -23 -23 -23 -84 -83 -82 -39 -38 -38 -7 -8 -10 -6 -7 -9 -6 -7 -9 -7 -8 -10 -7 -7 -9 -4 -4 -5 -5 -5 -7 -109 -88 -40 -242 -197 -89 -168 -138 -68 -127 -105 -54 -63 -53 -29 -95 -79 -37 -230 -189 -89 -117 -95 -47 -168 -139 -69 -201 -166 -85 -21 -17 -11 -5 -7 -9 -59 -48 -25 -167 -139 -72 -81 -66 -34 -19 -18 -14 -62 -51 -24 -66 -54 -24 -16 -16 -14 -78 -66 -40 -99 -82 -42 -16 -13 -11 -6 -6 -9 -6 -6 -8 -7 -7 -9 -9 -9 -12 -39 -33 -21 -43 -36 -25 -10 -11 -14 -11 -13 -14 -13 -14 -16 -12 -15 -16 -13 -17 -18 -7 -10 -12 -114 -115 -115 -244 -243 -243 -255 -255 -255 -239 -239 -239 -253 -253 -253 -254 -254 -254 -225 -225 -225 -102 -102 -101 -40 -18 -13 -106 -49 -31 -161 -74 -36 -174 -80 -36 -176 -80 -37 -176 -81 -37 -175 -80 -36 -175 -80 -36 -176 -79 -37 -176 -79 -36 -176 -79 -36 -177 -79 -36 -176 -79 -37 -168 -79 -41 -133 -86 -73 -185 -181 -181 -248 -247 -247 -255 -255 -255 -248 -248 -248 -188 -188 -188 -73 -73 -73 -13 -13 -13 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -13 -13 -13 -167 -167 -167 -253 -253 -253 -255 -255 -255 -254 -254 -254 -255 -255 -255 -249 -249 -249 -192 -192 -191 -249 -249 -249 -255 -255 -255 -251 -251 -251 -245 -245 -245 -222 -222 -222 -219 -219 -219 -217 -217 -217 -202 -202 -202 -198 -198 -198 -187 -187 -187 -168 -168 -168 -167 -167 -167 -151 -151 -151 -142 -142 -142 -169 -169 -169 -206 -206 -206 -231 -231 -231 -249 -249 -249 -255 -255 -255 -255 -255 -255 -255 -255 -255 -241 -241 -241 -210 -210 -210 -167 -167 -167 -69 -69 -69 -6 -6 -8 -6 -7 -9 -7 -8 -10 -8 -9 -11 -7 -8 -10 -6 -7 -9 -5 -5 -7 -4 -4 -5 -90 -73 -35 -201 -165 -76 -198 -162 -78 -178 -147 -72 -77 -65 -32 -42 -35 -22 -100 -84 -45 -41 -35 -20 -33 -27 -17 -30 -25 -15 -6 -8 -10 -6 -7 -9 -5 -6 -9 -0 -0 -5 -3 -5 -9 -7 -8 -10 -7 -8 -11 -8 -9 -11 -10 -10 -12 -9 -10 -14 -4 -5 -10 -6 -6 -8 -6 -6 -8 -6 -6 -8 -7 -8 -10 -12 -13 -15 -12 -16 -17 -11 -15 -16 -12 -14 -16 -14 -17 -18 -13 -15 -17 -12 -15 -16 -13 -17 -18 -12 -18 -20 -97 -97 -97 -247 -247 -247 -255 -255 -255 -255 -255 -255 -251 -251 -251 -202 -202 -201 -78 -76 -75 -14 -0 -0 -23 -6 -0 -22 -4 -1 -89 -39 -24 -144 -66 -34 -172 -77 -35 -175 -80 -36 -175 -80 -36 -175 -80 -36 -176 -80 -37 -176 -80 -36 -175 -80 -37 -172 -77 -34 -144 -70 -40 -158 -146 -143 -225 -225 -225 -255 -255 -255 -255 -255 -255 -229 -229 -229 -149 -149 -149 -13 -13 -13 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -69 -69 -69 -192 -192 -192 -241 -241 -241 -252 -252 -252 -255 -255 -255 -255 -255 -255 -190 -189 -189 -245 -245 -245 -255 -255 -255 -183 -183 -183 -115 -115 -115 -71 -71 -71 -64 -64 -64 -59 -59 -59 -28 -28 -28 -22 -22 -22 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -38 -38 -38 -88 -88 -88 -126 -126 -126 -173 -173 -173 -223 -223 -223 -251 -251 -251 -255 -255 -255 -255 -255 -255 -227 -227 -227 -62 -62 -62 -7 -8 -10 -8 -9 -11 -8 -10 -12 -8 -9 -11 -8 -8 -10 -7 -8 -10 -8 -9 -11 -9 -10 -11 -24 -21 -17 -49 -41 -22 -26 -20 -11 -0 -0 -4 -2 -4 -7 -6 -7 -9 -2 -4 -9 -5 -6 -8 -6 -7 -9 -6 -7 -10 -6 -7 -9 -7 -7 -10 -7 -7 -9 -7 -8 -10 -7 -8 -10 -7 -8 -10 -8 -9 -11 -7 -8 -10 -8 -9 -11 -14 -15 -17 -12 -13 -15 -10 -11 -13 -9 -10 -12 -8 -9 -11 -10 -11 -13 -12 -13 -15 -14 -17 -19 -13 -17 -18 -13 -17 -18 -11 -15 -16 -13 -15 -16 -12 -14 -15 -20 -24 -25 -24 -29 -30 -67 -68 -68 -191 -190 -190 -216 -216 -215 -202 -202 -201 -147 -146 -146 -59 -56 -54 -21 -3 -0 -23 -7 -0 -24 -7 -0 -23 -6 -0 -24 -7 -1 -112 -54 -33 -168 -78 -38 -174 -79 -36 -175 -80 -36 -176 -80 -35 -175 -80 -36 -176 -79 -36 -161 -77 -41 -129 -99 -91 -204 -202 -201 -246 -246 -246 -255 -255 -255 -252 -252 -252 -199 -199 -199 -95 -95 -95 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -22 -22 -22 -53 -53 -53 -73 -73 -73 -212 -212 -212 -255 -255 -255 -206 -205 -205 -237 -237 -236 -255 -255 -255 -172 -172 -172 -13 -13 -13 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -13 -13 -13 -22 -22 -22 -168 -168 -168 -255 -255 -255 -253 -253 -253 -155 -155 -155 -0 -0 -0 -7 -8 -10 -8 -10 -12 -8 -9 -11 -9 -10 -12 -9 -10 -12 -9 -10 -12 -8 -9 -11 -8 -9 -11 -10 -11 -13 -7 -7 -8 -5 -5 -5 -6 -6 -7 -6 -6 -8 -7 -7 -9 -6 -6 -8 -7 -7 -9 -6 -7 -9 -7 -7 -9 -7 -7 -9 -7 -7 -9 -6 -6 -7 -5 -5 -7 -6 -7 -9 -6 -7 -9 -7 -8 -10 -6 -7 -9 -9 -10 -13 -13 -14 -16 -11 -12 -14 -12 -13 -15 -13 -14 -16 -12 -13 -15 -11 -12 -14 -12 -14 -15 -15 -18 -19 -13 -17 -18 -13 -17 -18 -12 -16 -17 -13 -16 -17 -12 -14 -16 -21 -21 -24 -16 -16 -18 -14 -14 -16 -24 -24 -25 -28 -28 -29 -26 -20 -18 -24 -10 -5 -22 -6 -0 -23 -6 -0 -24 -7 -0 -24 -7 -0 -24 -7 -0 -23 -7 -0 -29 -7 -2 -98 -45 -25 -169 -78 -38 -174 -79 -35 -173 -79 -37 -162 -74 -37 -143 -95 -82 -161 -156 -155 -237 -237 -237 -255 -255 -255 -254 -254 -254 -237 -237 -237 -159 -159 -159 -28 -28 -28 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -192 -192 -192 -255 -255 -255 -219 -219 -218 -226 -226 -226 -255 -255 -255 -183 -183 -183 -13 -13 -13 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -59 -59 -59 -232 -232 -232 -255 -255 -255 -221 -221 -220 -44 -43 -43 -6 -7 -9 -7 -8 -10 -7 -9 -11 -8 -9 -11 -10 -11 -13 -9 -10 -12 -10 -11 -13 -10 -11 -13 -10 -11 -13 -11 -12 -14 -9 -9 -11 -5 -6 -6 -5 -5 -6 -6 -6 -8 -7 -7 -8 -7 -7 -8 -6 -6 -9 -7 -7 -10 -7 -7 -9 -6 -6 -8 -6 -6 -7 -6 -6 -7 -6 -6 -6 -7 -8 -9 -7 -7 -9 -7 -7 -9 -7 -7 -9 -8 -9 -11 -9 -10 -12 -8 -9 -11 -11 -12 -14 -12 -14 -16 -13 -16 -17 -12 -16 -17 -11 -13 -15 -11 -15 -16 -14 -18 -19 -14 -19 -19 -17 -21 -22 -15 -17 -20 -14 -8 -8 -21 -5 -2 -21 -5 -0 -20 -6 -0 -20 -5 -0 -22 -6 -0 -24 -6 -0 -23 -6 -0 -24 -7 -0 -24 -7 -0 -24 -7 -0 -24 -7 -0 -24 -7 -0 -24 -7 -0 -23 -6 -1 -59 -26 -12 -131 -61 -34 -159 -72 -28 -129 -76 -59 -176 -167 -165 -223 -223 -222 -253 -252 -252 -255 -255 -255 -250 -250 -250 -191 -191 -191 -105 -105 -105 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -189 -189 -189 -255 -255 -255 -222 -222 -222 -223 -223 -223 -255 -255 -255 -183 -183 -183 -13 -13 -13 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -22 -22 -22 -178 -178 -178 -252 -252 -252 -249 -249 -249 -136 -136 -135 -10 -10 -12 -7 -7 -9 -7 -8 -10 -6 -7 -9 -8 -9 -11 -10 -11 -13 -10 -11 -13 -10 -11 -13 -10 -11 -13 -11 -12 -14 -11 -12 -14 -10 -11 -13 -7 -8 -10 -6 -6 -7 -6 -6 -8 -6 -6 -8 -6 -6 -8 -6 -6 -7 -6 -6 -7 -5 -5 -6 -5 -5 -6 -5 -5 -6 -5 -5 -5 -5 -5 -6 -6 -6 -8 -7 -7 -9 -7 -7 -9 -8 -8 -10 -9 -10 -12 -10 -11 -13 -10 -11 -13 -10 -11 -13 -12 -13 -15 -14 -16 -18 -12 -15 -16 -13 -15 -17 -13 -14 -16 -15 -16 -18 -15 -18 -19 -18 -20 -22 -16 -7 -5 -22 -5 -0 -23 -5 -1 -23 -7 -0 -24 -7 -0 -24 -7 -0 -24 -7 -0 -24 -7 -0 -24 -7 -0 -24 -7 -0 -24 -7 -0 -24 -7 -0 -24 -7 -0 -24 -7 -0 -23 -6 -0 -23 -6 -0 -27 -16 -12 -81 -66 -63 -157 -150 -147 -231 -230 -229 -251 -251 -251 -255 -255 -255 -249 -249 -249 -215 -215 -215 -126 -126 -126 -38 -38 -38 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -196 -196 -196 -255 -255 -255 -211 -211 -211 -227 -227 -226 -255 -255 -255 -183 -183 -183 -13 -13 -13 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -110 -110 -110 -235 -235 -235 -254 -254 -254 -212 -212 -211 -61 -61 -61 -7 -8 -10 -8 -8 -10 -8 -9 -11 -7 -8 -10 -10 -11 -13 -10 -11 -13 -9 -11 -12 -10 -11 -13 -10 -11 -13 -11 -12 -14 -11 -12 -14 -10 -11 -13 -10 -11 -13 -8 -9 -11 -8 -8 -11 -7 -7 -10 -7 -7 -9 -7 -8 -9 -8 -9 -10 -5 -5 -6 -4 -4 -5 -5 -5 -5 -6 -6 -7 -6 -6 -8 -7 -7 -9 -8 -8 -10 -8 -9 -11 -7 -8 -11 -9 -9 -12 -9 -10 -12 -11 -12 -14 -11 -12 -14 -12 -13 -15 -14 -16 -17 -15 -18 -19 -15 -18 -20 -13 -15 -17 -13 -14 -16 -16 -15 -16 -19 -7 -4 -23 -6 -0 -24 -6 -0 -23 -7 -0 -24 -7 -0 -24 -7 -0 -24 -7 -0 -24 -7 -0 -24 -7 -0 -24 -7 -0 -24 -7 -0 -24 -7 -0 -23 -7 -0 -24 -6 -0 -22 -4 -0 -0 -0 -0 -59 -56 -55 -152 -151 -151 -218 -218 -218 -254 -253 -253 -255 -255 -255 -249 -249 -249 -215 -215 -215 -149 -149 -149 -34 -34 -34 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -13 -13 -13 -218 -218 -218 -255 -255 -255 -201 -201 -200 -244 -244 -243 -255 -255 -255 -162 -162 -162 -13 -13 -13 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -22 -22 -22 -209 -209 -209 -255 -255 -255 -247 -247 -247 -131 -130 -130 -1 -1 -3 -7 -7 -9 -8 -9 -11 -9 -10 -12 -8 -9 -11 -10 -11 -13 -10 -11 -13 -9 -10 -12 -10 -11 -13 -11 -12 -14 -10 -11 -13 -10 -11 -13 -10 -11 -13 -11 -12 -14 -10 -11 -13 -9 -10 -12 -10 -11 -13 -9 -10 -12 -9 -10 -12 -10 -11 -13 -8 -9 -11 -5 -6 -7 -5 -5 -7 -7 -7 -9 -6 -6 -8 -6 -7 -9 -7 -8 -10 -8 -9 -11 -8 -10 -12 -9 -10 -12 -10 -11 -13 -9 -10 -12 -11 -12 -14 -15 -16 -18 -14 -15 -17 -14 -17 -18 -12 -15 -16 -12 -14 -16 -12 -12 -13 -21 -9 -6 -23 -6 -0 -24 -7 -0 -24 -7 -0 -24 -7 -0 -24 -7 -0 -24 -7 -0 -24 -7 -0 -24 -7 -0 -24 -7 -0 -24 -7 -0 -23 -6 -0 -23 -6 -0 -24 -6 -0 -25 -13 -8 -53 -49 -49 -153 -152 -152 -224 -223 -223 -249 -249 -249 -255 -255 -255 -254 -254 -254 -218 -218 -218 -135 -135 -135 -64 -64 -64 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -85 -85 -85 -235 -235 -235 -254 -254 -254 -194 -194 -193 -248 -248 -247 -253 -253 -253 -137 -137 -137 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -69 -69 -69 -247 -247 -247 -255 -255 -255 -172 -171 -170 -0 -0 -0 -7 -8 -9 -6 -6 -8 -7 -8 -11 -9 -10 -12 -9 -10 -12 -10 -11 -13 -10 -11 -13 -10 -11 -13 -9 -10 -12 -10 -11 -13 -10 -11 -13 -12 -13 -15 -11 -12 -14 -10 -11 -13 -11 -12 -14 -10 -11 -13 -11 -12 -14 -9 -10 -12 -8 -9 -11 -10 -11 -13 -8 -9 -11 -7 -8 -10 -6 -8 -9 -7 -7 -9 -6 -7 -9 -7 -8 -10 -9 -10 -12 -9 -10 -12 -9 -10 -12 -10 -11 -13 -11 -12 -13 -12 -13 -15 -14 -15 -17 -14 -15 -17 -13 -15 -16 -14 -16 -18 -17 -18 -19 -41 -41 -41 -41 -40 -40 -16 -5 -2 -23 -6 -0 -24 -7 -0 -24 -7 -0 -24 -7 -0 -24 -7 -0 -24 -7 -0 -24 -7 -0 -24 -7 -0 -23 -6 -0 -22 -5 -0 -21 -5 -0 -21 -10 -6 -89 -88 -88 -164 -164 -164 -229 -229 -229 -253 -253 -253 -255 -255 -255 -250 -250 -250 -226 -226 -226 -153 -153 -153 -50 -50 -50 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -141 -141 -141 -247 -247 -247 -246 -246 -246 -201 -201 -200 -251 -251 -251 -241 -241 -241 -106 -106 -106 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -92 -92 -92 -251 -251 -251 -254 -254 -254 -150 -150 -149 -0 -0 -0 -6 -6 -6 -6 -6 -8 -6 -6 -9 -7 -7 -10 -9 -10 -12 -9 -10 -12 -10 -11 -13 -10 -11 -13 -9 -10 -12 -10 -11 -13 -12 -13 -15 -12 -13 -15 -11 -12 -14 -11 -12 -13 -10 -11 -13 -11 -12 -14 -10 -11 -13 -8 -10 -12 -9 -10 -12 -10 -11 -13 -8 -9 -11 -6 -7 -9 -7 -8 -10 -7 -7 -10 -7 -7 -10 -6 -7 -10 -8 -9 -11 -9 -10 -12 -12 -13 -15 -12 -13 -15 -12 -13 -15 -12 -13 -15 -13 -14 -16 -12 -13 -15 -9 -10 -11 -30 -30 -30 -55 -54 -52 -66 -65 -63 -65 -64 -61 -36 -34 -33 -20 -6 -1 -23 -6 -0 -24 -6 -0 -24 -7 -0 -24 -7 -0 -24 -7 -0 -24 -7 -0 -24 -7 -0 -24 -7 -0 -22 -6 -0 -19 -5 -2 -74 -74 -73 -216 -215 -215 -255 -255 -255 -255 -255 -255 -252 -252 -252 -222 -222 -222 -166 -166 -166 -64 -64 -64 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -34 -34 -34 -188 -188 -188 -255 -255 -255 -234 -234 -234 -211 -211 -210 -254 -254 -254 -222 -222 -222 -73 -73 -73 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -42 -42 -42 -230 -230 -230 -255 -255 -255 -247 -247 -246 -170 -170 -169 -19 -20 -18 -6 -6 -7 -6 -6 -8 -6 -7 -9 -8 -9 -11 -8 -9 -11 -11 -12 -13 -12 -13 -15 -13 -15 -16 -10 -12 -14 -11 -12 -14 -9 -10 -12 -7 -8 -10 -8 -9 -11 -8 -10 -12 -9 -10 -12 -11 -12 -14 -9 -10 -12 -8 -9 -11 -8 -9 -12 -7 -8 -10 -6 -7 -9 -7 -7 -9 -7 -7 -9 -7 -7 -9 -8 -9 -11 -9 -10 -12 -9 -11 -13 -15 -16 -18 -10 -11 -13 -12 -13 -15 -13 -14 -16 -13 -13 -15 -21 -21 -20 -52 -51 -50 -65 -64 -63 -68 -67 -65 -68 -67 -64 -68 -67 -64 -59 -58 -55 -23 -18 -17 -22 -6 -1 -23 -6 -0 -24 -7 -0 -24 -7 -0 -24 -7 -0 -24 -7 -0 -24 -7 -0 -24 -7 -0 -23 -6 -0 -21 -10 -8 -158 -157 -157 -253 -253 -253 -253 -253 -253 -210 -210 -210 -125 -125 -125 -61 -61 -61 -22 -22 -22 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -71 -71 -71 -231 -231 -231 -255 -255 -255 -211 -211 -209 -229 -229 -229 -254 -254 -254 -190 -190 -190 -13 -13 -13 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -159 -159 -159 -255 -255 -255 -251 -251 -250 -154 -154 -153 -55 -54 -51 -41 -41 -39 -17 -17 -18 -5 -6 -7 -6 -7 -9 -7 -7 -10 -8 -9 -11 -11 -12 -14 -13 -15 -16 -9 -11 -12 -8 -8 -9 -7 -7 -9 -7 -7 -9 -7 -8 -10 -8 -9 -11 -8 -9 -12 -8 -9 -11 -8 -9 -11 -7 -8 -10 -7 -8 -10 -6 -7 -10 -6 -7 -9 -7 -7 -9 -6 -7 -9 -7 -7 -10 -9 -9 -11 -10 -11 -13 -11 -12 -14 -12 -14 -16 -12 -13 -15 -11 -12 -14 -25 -25 -25 -45 -45 -43 -63 -62 -59 -68 -67 -65 -68 -67 -65 -68 -67 -65 -68 -67 -65 -68 -67 -65 -68 -67 -64 -50 -48 -47 -16 -6 -4 -22 -6 -0 -23 -6 -0 -24 -6 -0 -24 -7 -0 -24 -7 -0 -24 -7 -0 -24 -7 -0 -22 -5 -1 -19 -14 -14 -187 -187 -186 -255 -255 -255 -248 -248 -248 -139 -139 -139 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -130 -130 -130 -254 -254 -254 -253 -253 -253 -176 -176 -175 -251 -251 -251 -249 -249 -249 -132 -132 -132 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -34 -34 -34 -218 -218 -218 -255 -255 -255 -232 -232 -231 -71 -70 -68 -67 -67 -63 -67 -67 -64 -61 -61 -59 -30 -29 -30 -8 -8 -10 -5 -6 -7 -6 -7 -9 -8 -9 -11 -7 -8 -10 -7 -7 -10 -7 -7 -8 -7 -7 -9 -7 -7 -9 -6 -7 -9 -7 -7 -9 -7 -8 -10 -6 -7 -9 -7 -9 -10 -8 -9 -11 -7 -8 -10 -8 -9 -11 -7 -8 -10 -8 -8 -10 -9 -10 -12 -9 -10 -12 -13 -15 -16 -15 -17 -18 -14 -17 -18 -13 -15 -16 -16 -18 -19 -46 -46 -45 -63 -62 -58 -67 -66 -63 -68 -67 -64 -68 -67 -65 -68 -67 -64 -68 -67 -63 -68 -67 -65 -68 -67 -65 -68 -67 -64 -68 -66 -64 -45 -43 -42 -15 -5 -3 -23 -5 -1 -23 -6 -0 -24 -7 -0 -24 -7 -0 -24 -7 -0 -24 -7 -0 -15 -3 -0 -83 -40 -25 -128 -108 -103 -233 -232 -232 -255 -255 -255 -238 -238 -238 -127 -127 -127 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -210 -210 -210 -255 -255 -255 -226 -226 -226 -203 -203 -202 -255 -255 -255 -231 -231 -231 -28 -28 -28 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -113 -113 -113 -251 -251 -251 -255 -255 -255 -168 -167 -166 -58 -57 -54 -68 -67 -63 -69 -68 -64 -62 -61 -58 -45 -44 -43 -60 -59 -57 -44 -44 -41 -27 -26 -25 -14 -14 -15 -3 -3 -6 -4 -4 -6 -5 -5 -7 -5 -6 -8 -6 -7 -9 -6 -7 -9 -7 -8 -10 -6 -7 -9 -6 -7 -9 -6 -8 -10 -8 -9 -11 -8 -9 -11 -9 -10 -12 -8 -9 -11 -9 -10 -12 -8 -9 -12 -9 -9 -12 -13 -13 -16 -21 -21 -22 -32 -32 -31 -50 -49 -47 -64 -63 -61 -68 -67 -63 -68 -67 -63 -68 -67 -63 -68 -67 -63 -68 -67 -63 -67 -66 -64 -68 -67 -65 -68 -67 -65 -67 -66 -64 -68 -67 -64 -68 -67 -65 -66 -65 -63 -48 -48 -45 -27 -24 -23 -20 -10 -7 -20 -5 -1 -23 -6 -0 -23 -6 -0 -23 -6 -0 -7 -2 -1 -82 -38 -23 -143 -68 -36 -152 -141 -138 -241 -241 -241 -255 -255 -255 -240 -240 -240 -133 -133 -133 -38 -38 -38 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -99 -99 -99 -245 -245 -245 -254 -254 -254 -182 -182 -181 -246 -246 -245 -255 -255 -255 -173 -173 -173 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -196 -196 -196 -255 -255 -255 -240 -240 -240 -92 -92 -90 -67 -66 -63 -68 -67 -63 -65 -64 -60 -48 -47 -45 -62 -61 -59 -66 -65 -61 -68 -67 -64 -65 -64 -61 -57 -56 -54 -42 -42 -40 -18 -18 -18 -0 -0 -1 -0 -0 -2 -2 -2 -4 -3 -3 -5 -5 -5 -7 -6 -7 -8 -6 -6 -8 -6 -7 -9 -7 -8 -10 -5 -6 -7 -5 -6 -7 -11 -11 -12 -23 -23 -23 -36 -36 -35 -46 -45 -43 -52 -51 -49 -60 -59 -56 -67 -66 -63 -69 -68 -63 -69 -68 -64 -69 -68 -64 -69 -68 -64 -69 -68 -64 -69 -68 -64 -69 -68 -64 -69 -68 -64 -68 -67 -65 -68 -67 -65 -68 -67 -65 -69 -68 -64 -68 -67 -63 -67 -66 -62 -67 -66 -62 -62 -62 -59 -52 -52 -50 -38 -37 -35 -21 -15 -13 -14 -2 -0 -16 -3 -0 -3 -1 -1 -17 -7 -6 -124 -61 -39 -140 -63 -28 -149 -140 -138 -239 -239 -238 -255 -255 -255 -246 -246 -246 -194 -194 -194 -95 -95 -95 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -175 -175 -175 -252 -252 -252 -239 -239 -239 -202 -202 -202 -254 -254 -254 -243 -243 -243 -88 -88 -88 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -13 -13 -13 -99 -99 -99 -235 -235 -235 -255 -255 -255 -198 -198 -197 -72 -71 -70 -67 -66 -62 -64 -63 -61 -43 -42 -40 -59 -58 -55 -64 -63 -60 -69 -68 -64 -68 -67 -63 -68 -67 -63 -68 -67 -63 -67 -66 -63 -65 -65 -62 -57 -56 -54 -44 -43 -43 -26 -25 -25 -12 -12 -13 -10 -10 -10 -12 -12 -12 -20 -19 -19 -28 -28 -27 -39 -39 -38 -55 -54 -52 -59 -59 -56 -65 -65 -63 -66 -65 -63 -67 -66 -64 -67 -66 -64 -69 -68 -64 -69 -68 -64 -68 -67 -63 -69 -68 -63 -69 -68 -64 -69 -68 -64 -69 -68 -64 -69 -68 -64 -69 -68 -64 -69 -68 -64 -68 -67 -64 -67 -66 -64 -68 -67 -65 -67 -66 -64 -68 -67 -63 -68 -67 -63 -67 -66 -62 -68 -67 -64 -67 -66 -63 -66 -65 -62 -65 -64 -61 -63 -63 -59 -58 -58 -54 -48 -47 -45 -31 -31 -29 -21 -18 -18 -82 -42 -28 -129 -62 -38 -149 -75 -42 -142 -132 -129 -233 -233 -233 -253 -253 -253 -253 -253 -253 -241 -241 -241 -176 -176 -176 -75 -75 -75 -22 -22 -22 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -69 -69 -69 -220 -220 -220 -255 -255 -255 -215 -215 -215 -230 -230 -229 -255 -255 -255 -200 -200 -200 -46 -46 -46 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -66 -66 -66 -153 -153 -153 -211 -211 -211 -252 -252 -252 -248 -248 -247 -143 -143 -143 -63 -63 -60 -56 -55 -52 -40 -38 -38 -56 -55 -54 -65 -64 -61 -67 -66 -64 -68 -67 -64 -69 -68 -64 -69 -68 -64 -69 -68 -64 -68 -67 -64 -68 -67 -65 -68 -67 -65 -69 -68 -65 -68 -67 -65 -61 -60 -58 -57 -56 -54 -61 -60 -58 -65 -64 -62 -67 -67 -63 -69 -68 -64 -69 -68 -63 -65 -64 -60 -68 -67 -64 -68 -67 -65 -68 -67 -63 -68 -67 -64 -69 -68 -64 -68 -67 -64 -68 -67 -64 -68 -67 -64 -69 -68 -64 -68 -67 -64 -68 -67 -64 -68 -67 -63 -68 -67 -63 -68 -67 -64 -68 -67 -64 -62 -61 -59 -66 -65 -62 -67 -66 -62 -67 -66 -62 -67 -66 -62 -66 -65 -63 -67 -66 -63 -67 -66 -63 -67 -66 -64 -67 -66 -63 -66 -65 -62 -67 -66 -62 -66 -65 -61 -66 -64 -61 -64 -63 -60 -61 -34 -27 -142 -66 -34 -140 -67 -39 -148 -68 -30 -130 -93 -85 -194 -192 -191 -243 -243 -242 -255 -255 -255 -255 -255 -255 -229 -229 -229 -175 -175 -175 -112 -112 -112 -13 -13 -13 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -120 -120 -120 -248 -248 -248 -251 -251 -251 -202 -202 -201 -245 -245 -244 -249 -249 -249 -153 -153 -153 -13 -13 -13 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -79 -79 -79 -211 -211 -211 -250 -250 -250 -255 -255 -255 -254 -254 -254 -228 -228 -228 -84 -83 -82 -42 -41 -39 -51 -50 -48 -62 -60 -58 -67 -66 -64 -68 -67 -65 -68 -67 -64 -68 -67 -65 -68 -67 -63 -69 -68 -64 -69 -68 -64 -68 -67 -64 -68 -67 -65 -69 -68 -63 -69 -68 -63 -69 -68 -65 -69 -68 -65 -68 -67 -64 -69 -68 -66 -67 -66 -63 -66 -65 -61 -68 -67 -63 -69 -68 -64 -66 -65 -61 -67 -66 -64 -68 -67 -63 -68 -67 -62 -68 -67 -63 -68 -67 -64 -67 -66 -64 -68 -67 -65 -68 -67 -63 -68 -67 -63 -67 -66 -64 -67 -66 -64 -67 -66 -63 -68 -67 -62 -68 -67 -63 -67 -66 -62 -60 -59 -57 -61 -60 -56 -66 -65 -61 -67 -66 -62 -67 -66 -62 -67 -66 -62 -66 -65 -62 -67 -66 -62 -67 -66 -64 -67 -66 -64 -66 -65 -61 -67 -66 -62 -67 -66 -62 -66 -65 -61 -64 -64 -60 -77 -36 -22 -167 -76 -38 -166 -76 -37 -143 -68 -37 -161 -74 -38 -152 -77 -51 -138 -119 -114 -198 -198 -198 -250 -250 -250 -255 -255 -255 -253 -253 -253 -241 -241 -241 -210 -210 -210 -130 -130 -130 -34 -34 -34 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -156 -156 -156 -255 -255 -255 -246 -246 -246 -193 -193 -192 -254 -254 -254 -236 -236 -236 -92 -92 -92 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -13 -13 -13 -167 -167 -167 -255 -255 -255 -251 -251 -251 -226 -226 -225 -174 -174 -173 -84 -84 -82 -53 -52 -49 -62 -61 -57 -64 -63 -60 -67 -66 -62 -68 -67 -64 -67 -66 -64 -68 -67 -64 -68 -67 -63 -68 -67 -64 -68 -67 -63 -69 -68 -64 -68 -67 -65 -68 -67 -64 -69 -68 -64 -69 -68 -64 -69 -68 -64 -69 -68 -64 -69 -68 -64 -69 -68 -64 -67 -66 -62 -66 -65 -62 -68 -67 -63 -69 -68 -64 -66 -65 -61 -65 -64 -62 -67 -66 -64 -68 -67 -62 -67 -66 -62 -68 -66 -64 -67 -66 -65 -67 -66 -65 -68 -66 -63 -68 -67 -63 -68 -67 -63 -68 -67 -63 -67 -66 -62 -67 -66 -63 -68 -67 -64 -67 -66 -62 -60 -59 -56 -51 -50 -47 -64 -63 -59 -66 -65 -61 -67 -66 -62 -67 -66 -62 -67 -66 -62 -67 -66 -62 -67 -66 -63 -67 -66 -62 -66 -65 -61 -67 -66 -62 -67 -66 -62 -66 -65 -61 -57 -56 -54 -97 -43 -22 -175 -79 -37 -174 -79 -36 -169 -76 -37 -141 -66 -35 -161 -75 -39 -168 -78 -39 -133 -68 -44 -141 -126 -123 -212 -211 -209 -241 -241 -241 -253 -253 -253 -255 -255 -255 -251 -251 -251 -213 -213 -213 -122 -122 -122 -50 -50 -50 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -13 -13 -13 -212 -212 -212 -255 -255 -255 -222 -222 -221 -213 -213 -213 -255 -255 -255 -209 -209 -209 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -22 -22 -22 -207 -207 -207 -255 -255 -255 -213 -213 -212 -59 -59 -57 -49 -48 -44 -62 -61 -57 -63 -62 -58 -62 -61 -57 -65 -64 -60 -67 -66 -62 -67 -66 -62 -67 -66 -63 -68 -67 -64 -67 -66 -64 -67 -66 -63 -68 -67 -62 -68 -67 -63 -68 -67 -64 -68 -67 -63 -68 -66 -62 -68 -67 -63 -68 -67 -63 -68 -67 -64 -68 -67 -64 -69 -68 -64 -67 -66 -62 -65 -64 -62 -67 -66 -64 -68 -67 -64 -66 -65 -62 -64 -63 -60 -68 -67 -63 -67 -66 -62 -66 -65 -62 -67 -66 -63 -67 -66 -62 -67 -66 -63 -67 -66 -62 -67 -66 -62 -67 -66 -63 -67 -66 -62 -66 -65 -61 -67 -66 -62 -67 -66 -62 -66 -65 -61 -64 -63 -59 -49 -49 -46 -55 -54 -51 -65 -64 -60 -66 -65 -61 -67 -66 -62 -67 -66 -62 -67 -66 -61 -66 -65 -63 -67 -66 -62 -67 -66 -62 -67 -66 -62 -66 -65 -61 -65 -64 -60 -49 -48 -45 -120 -55 -30 -175 -79 -36 -174 -78 -35 -174 -78 -37 -170 -77 -36 -149 -69 -36 -152 -69 -37 -172 -79 -38 -164 -73 -30 -140 -68 -37 -144 -120 -114 -176 -174 -173 -230 -230 -229 -255 -255 -255 -255 -255 -255 -245 -245 -245 -203 -203 -203 -129 -129 -129 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -104 -104 -104 -249 -249 -249 -255 -255 -255 -178 -178 -177 -244 -243 -243 -254 -254 -254 -160 -160 -160 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -22 -22 -22 -219 -219 -219 -255 -255 -255 -185 -185 -185 -14 -12 -10 -62 -61 -57 -63 -62 -58 -62 -61 -57 -65 -64 -60 -67 -66 -62 -66 -65 -61 -67 -66 -62 -67 -66 -62 -67 -66 -62 -67 -66 -62 -67 -66 -62 -67 -66 -62 -67 -66 -62 -68 -67 -63 -68 -67 -63 -66 -65 -61 -66 -65 -61 -67 -66 -62 -68 -67 -63 -68 -67 -65 -69 -68 -64 -67 -66 -62 -64 -63 -61 -68 -67 -65 -68 -67 -65 -67 -66 -64 -63 -62 -60 -68 -67 -63 -67 -66 -62 -66 -65 -61 -66 -65 -61 -67 -66 -62 -68 -67 -63 -67 -66 -62 -66 -65 -61 -67 -66 -63 -67 -66 -61 -67 -66 -62 -67 -66 -62 -67 -66 -62 -66 -65 -61 -66 -65 -61 -55 -54 -51 -39 -39 -37 -59 -59 -56 -65 -64 -60 -67 -66 -62 -67 -66 -62 -66 -65 -61 -66 -65 -63 -67 -66 -62 -67 -66 -62 -67 -66 -62 -67 -66 -62 -66 -65 -61 -48 -46 -44 -125 -56 -31 -172 -78 -36 -172 -79 -35 -173 -78 -36 -174 -78 -36 -169 -77 -35 -164 -75 -38 -143 -67 -37 -162 -74 -36 -172 -78 -36 -170 -77 -36 -158 -77 -45 -126 -87 -76 -160 -156 -155 -237 -236 -236 -252 -253 -252 -254 -254 -254 -245 -245 -245 -173 -173 -173 -64 -64 -64 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -143 -143 -143 -254 -254 -254 -252 -251 -251 -168 -167 -167 -255 -255 -255 -249 -249 -249 -88 -88 -88 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -22 -22 -22 -206 -206 -206 -255 -255 -255 -205 -204 -204 -5 -4 -1 -62 -61 -57 -63 -62 -58 -62 -61 -57 -66 -65 -61 -67 -66 -62 -67 -66 -62 -67 -66 -63 -67 -66 -62 -66 -65 -61 -67 -66 -62 -67 -66 -62 -68 -67 -62 -67 -66 -62 -67 -66 -63 -67 -66 -64 -68 -67 -64 -66 -65 -62 -66 -65 -61 -67 -66 -62 -67 -66 -63 -68 -67 -63 -68 -67 -64 -64 -63 -61 -68 -67 -65 -68 -67 -65 -67 -66 -63 -63 -62 -59 -68 -67 -63 -67 -66 -62 -66 -65 -62 -67 -66 -62 -67 -66 -62 -67 -66 -62 -67 -66 -63 -67 -66 -64 -67 -66 -63 -67 -66 -62 -67 -66 -62 -67 -66 -62 -67 -66 -62 -66 -65 -61 -66 -65 -61 -64 -63 -60 -40 -39 -37 -41 -40 -39 -50 -49 -47 -61 -60 -57 -66 -65 -61 -67 -66 -61 -67 -66 -62 -67 -66 -62 -67 -66 -62 -67 -66 -62 -67 -66 -62 -65 -64 -60 -53 -52 -49 -103 -47 -27 -159 -73 -38 -160 -73 -37 -172 -79 -36 -173 -78 -36 -174 -78 -36 -170 -76 -35 -169 -76 -35 -159 -72 -37 -169 -76 -36 -173 -77 -35 -172 -77 -35 -173 -79 -37 -153 -67 -29 -131 -90 -81 -186 -183 -181 -238 -238 -238 -255 -255 -255 -255 -255 -255 -218 -218 -218 -132 -132 -132 -13 -13 -13 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -166 -166 -166 -254 -254 -254 -233 -233 -233 -191 -191 -191 -255 -255 -255 -228 -228 -228 -34 -34 -34 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -13 -13 -13 -187 -187 -187 -255 -255 -255 -220 -220 -219 -0 -0 -0 -60 -59 -55 -61 -60 -56 -64 -63 -59 -66 -65 -61 -66 -65 -61 -67 -66 -62 -67 -66 -62 -67 -66 -61 -67 -66 -62 -67 -66 -63 -67 -66 -63 -67 -66 -62 -67 -66 -62 -67 -66 -62 -67 -66 -62 -66 -65 -62 -67 -66 -62 -66 -65 -61 -65 -64 -60 -66 -65 -61 -66 -65 -61 -68 -67 -63 -63 -62 -60 -67 -66 -64 -68 -67 -64 -67 -66 -62 -63 -62 -58 -67 -66 -62 -66 -65 -61 -67 -66 -62 -67 -66 -63 -67 -66 -63 -67 -66 -63 -67 -66 -62 -67 -66 -62 -67 -66 -61 -66 -65 -61 -66 -65 -61 -67 -66 -62 -66 -65 -61 -66 -65 -61 -67 -66 -62 -67 -66 -62 -60 -59 -55 -38 -37 -36 -32 -30 -30 -42 -41 -39 -61 -60 -57 -62 -61 -58 -63 -62 -58 -65 -64 -60 -67 -66 -61 -67 -66 -62 -67 -66 -62 -66 -65 -61 -60 -59 -56 -69 -33 -21 -135 -66 -36 -151 -71 -38 -150 -69 -37 -172 -77 -36 -173 -78 -36 -173 -78 -36 -170 -77 -34 -169 -75 -34 -172 -77 -35 -174 -77 -35 -168 -77 -37 -172 -78 -37 -173 -78 -37 -170 -77 -37 -156 -77 -45 -138 -114 -108 -211 -210 -209 -253 -253 -253 -255 -255 -255 -243 -243 -243 -175 -175 -175 -42 -42 -42 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -197 -197 -197 -255 -255 -255 -215 -215 -214 -214 -213 -213 -255 -255 -255 -212 -212 -212 -28 -28 -28 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -13 -13 -13 -177 -177 -177 -255 -255 -255 -227 -227 -227 -0 -0 -0 -56 -55 -51 -62 -61 -57 -64 -63 -59 -65 -64 -60 -65 -64 -60 -66 -65 -61 -66 -65 -61 -66 -65 -61 -67 -66 -62 -67 -66 -62 -67 -66 -62 -67 -66 -62 -66 -65 -61 -67 -66 -62 -67 -66 -62 -67 -66 -62 -66 -65 -61 -67 -66 -62 -66 -65 -61 -65 -64 -60 -66 -65 -61 -66 -65 -61 -61 -60 -58 -66 -65 -63 -67 -66 -62 -67 -66 -62 -62 -61 -57 -66 -65 -61 -67 -66 -62 -67 -66 -62 -67 -66 -62 -67 -66 -61 -67 -66 -61 -67 -66 -62 -67 -66 -62 -67 -66 -62 -65 -64 -60 -65 -64 -60 -66 -65 -61 -65 -64 -60 -66 -65 -61 -66 -65 -61 -66 -65 -61 -65 -64 -60 -64 -63 -59 -50 -49 -47 -39 -38 -38 -36 -35 -34 -44 -43 -41 -49 -47 -46 -54 -53 -52 -65 -64 -60 -67 -66 -62 -65 -64 -60 -65 -64 -60 -65 -64 -61 -75 -36 -25 -150 -70 -37 -139 -66 -37 -151 -70 -40 -153 -71 -37 -170 -77 -36 -173 -78 -36 -174 -78 -36 -170 -77 -34 -168 -75 -32 -172 -77 -35 -159 -73 -37 -142 -68 -37 -166 -76 -36 -173 -77 -35 -174 -78 -35 -171 -79 -39 -136 -72 -50 -166 -157 -154 -236 -236 -235 -255 -255 -255 -253 -253 -253 -186 -186 -186 -59 -59 -59 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -19 -18 -18 -0 -0 -0 -0 -0 -0 -38 -38 -38 -218 -218 -218 -255 -255 -255 -200 -200 -199 -223 -223 -222 -255 -255 -255 -245 -245 -245 -136 -136 -136 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -161 -161 -161 -255 -255 -255 -235 -235 -235 -37 -36 -35 -55 -54 -51 -63 -62 -58 -63 -62 -58 -64 -63 -59 -65 -64 -60 -65 -64 -60 -65 -64 -60 -66 -65 -61 -66 -65 -61 -66 -65 -61 -66 -65 -61 -66 -65 -61 -66 -65 -61 -66 -65 -61 -66 -65 -61 -67 -66 -62 -67 -66 -62 -67 -66 -62 -67 -66 -62 -66 -65 -61 -65 -64 -60 -66 -65 -61 -60 -59 -56 -66 -65 -62 -66 -65 -61 -66 -65 -61 -62 -61 -57 -66 -65 -61 -66 -65 -61 -67 -66 -62 -67 -66 -62 -66 -65 -61 -67 -66 -62 -67 -66 -62 -66 -65 -61 -66 -65 -61 -65 -64 -60 -65 -64 -60 -65 -64 -60 -65 -64 -60 -65 -64 -60 -64 -63 -59 -64 -63 -59 -65 -64 -60 -65 -64 -60 -65 -64 -60 -60 -59 -56 -52 -51 -49 -51 -50 -48 -53 -52 -49 -61 -60 -57 -65 -64 -60 -67 -66 -62 -66 -65 -61 -65 -64 -60 -66 -65 -61 -68 -42 -35 -154 -70 -32 -165 -75 -36 -152 -70 -38 -151 -70 -36 -154 -72 -38 -165 -75 -37 -174 -78 -36 -173 -77 -35 -172 -77 -35 -170 -76 -35 -170 -76 -34 -165 -76 -37 -147 -69 -37 -158 -74 -38 -173 -79 -36 -174 -78 -36 -174 -79 -37 -158 -71 -28 -145 -119 -112 -211 -210 -209 -255 -255 -255 -253 -253 -253 -199 -199 -199 -69 -69 -69 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -34 -34 -33 -0 -0 -0 -0 -0 -0 -128 -128 -128 -244 -244 -244 -254 -254 -254 -195 -195 -194 -175 -174 -173 -240 -240 -240 -255 -255 -255 -221 -221 -221 -42 -42 -42 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -142 -142 -142 -255 -255 -255 -245 -244 -244 -69 -68 -67 -53 -52 -49 -63 -62 -58 -63 -62 -58 -64 -63 -59 -65 -64 -60 -65 -64 -60 -65 -64 -60 -65 -64 -60 -65 -64 -60 -65 -64 -60 -65 -64 -60 -65 -64 -60 -65 -64 -60 -65 -64 -60 -65 -64 -60 -66 -65 -61 -66 -65 -61 -66 -65 -61 -67 -66 -62 -66 -65 -61 -66 -65 -61 -65 -64 -61 -59 -58 -54 -61 -61 -57 -65 -64 -60 -65 -64 -60 -61 -60 -56 -65 -64 -60 -66 -65 -61 -66 -65 -61 -66 -65 -61 -65 -64 -60 -66 -65 -61 -66 -65 -61 -66 -65 -61 -64 -63 -59 -65 -64 -60 -64 -63 -59 -65 -64 -60 -64 -63 -59 -65 -64 -60 -65 -64 -60 -64 -63 -59 -65 -64 -60 -64 -63 -59 -65 -64 -60 -65 -64 -60 -64 -63 -60 -63 -62 -59 -63 -62 -58 -65 -64 -60 -66 -65 -61 -66 -65 -61 -66 -65 -61 -65 -64 -60 -65 -64 -60 -61 -45 -41 -144 -65 -31 -169 -76 -36 -169 -77 -35 -161 -74 -37 -156 -71 -37 -151 -70 -39 -164 -74 -39 -173 -77 -35 -173 -77 -35 -173 -77 -35 -171 -77 -35 -167 -74 -34 -171 -77 -36 -148 -69 -38 -155 -72 -37 -174 -78 -36 -173 -79 -36 -173 -78 -35 -170 -78 -37 -138 -90 -77 -202 -201 -200 -252 -252 -252 -254 -254 -254 -199 -199 -199 -50 -50 -50 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -19 -18 -18 -0 -0 -0 -0 -0 -0 -155 -155 -155 -251 -251 -251 -239 -239 -239 -107 -106 -105 -0 -0 -0 -160 -160 -159 -251 -251 -251 -240 -240 -240 -109 -109 -109 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -122 -122 -122 -249 -249 -249 -249 -249 -249 -121 -120 -120 -42 -41 -38 -63 -62 -58 -62 -61 -57 -64 -63 -59 -64 -63 -59 -65 -64 -60 -65 -64 -60 -64 -63 -59 -64 -63 -59 -65 -64 -60 -65 -64 -60 -64 -63 -59 -65 -64 -60 -65 -64 -60 -65 -64 -60 -65 -64 -60 -65 -64 -60 -65 -64 -60 -66 -65 -61 -65 -64 -60 -64 -63 -59 -64 -63 -59 -61 -61 -57 -52 -51 -48 -58 -57 -54 -58 -57 -55 -55 -54 -52 -63 -62 -58 -65 -65 -61 -65 -64 -60 -66 -65 -61 -66 -65 -61 -66 -65 -61 -66 -65 -61 -65 -64 -60 -64 -63 -59 -65 -64 -60 -65 -64 -60 -64 -63 -59 -65 -64 -60 -65 -64 -60 -64 -63 -59 -65 -64 -60 -65 -64 -60 -65 -64 -60 -65 -64 -60 -65 -64 -60 -65 -64 -60 -65 -64 -60 -65 -64 -60 -64 -63 -59 -65 -64 -60 -65 -64 -60 -66 -65 -61 -65 -64 -60 -65 -64 -60 -53 -50 -48 -99 -48 -25 -152 -70 -35 -170 -77 -35 -173 -77 -35 -169 -76 -36 -163 -74 -35 -160 -72 -38 -167 -75 -36 -173 -77 -35 -174 -78 -36 -175 -79 -36 -171 -77 -35 -169 -75 -33 -171 -77 -35 -150 -71 -37 -154 -72 -37 -173 -78 -35 -173 -77 -35 -173 -78 -36 -171 -78 -35 -136 -78 -60 -199 -198 -197 -253 -253 -253 -254 -254 -254 -195 -195 -195 -56 -56 -56 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -155 -155 -155 -251 -251 -251 -237 -237 -237 -94 -94 -93 -1 -1 -3 -126 -126 -125 -244 -244 -244 -246 -246 -246 -134 -134 -134 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -99 -99 -99 -237 -237 -237 -252 -252 -252 -165 -164 -164 -19 -17 -16 -63 -62 -59 -63 -62 -58 -64 -63 -59 -65 -64 -60 -64 -63 -59 -64 -63 -59 -64 -63 -59 -64 -63 -59 -64 -63 -59 -64 -63 -59 -65 -64 -60 -65 -64 -60 -65 -64 -60 -65 -64 -60 -65 -64 -60 -65 -64 -60 -65 -64 -60 -64 -63 -59 -65 -64 -60 -64 -63 -59 -63 -62 -58 -46 -45 -43 -54 -53 -49 -63 -62 -58 -64 -63 -59 -62 -61 -57 -61 -60 -56 -65 -64 -60 -65 -64 -60 -66 -65 -61 -66 -65 -61 -66 -65 -61 -65 -64 -60 -64 -63 -59 -64 -63 -59 -65 -64 -60 -65 -64 -60 -64 -63 -59 -65 -64 -60 -64 -63 -59 -64 -63 -59 -65 -64 -60 -66 -65 -61 -65 -64 -60 -65 -64 -60 -66 -65 -61 -64 -63 -59 -64 -63 -59 -64 -63 -59 -64 -63 -59 -64 -63 -59 -65 -64 -60 -65 -64 -60 -64 -63 -59 -64 -63 -59 -57 -55 -52 -118 -55 -30 -141 -67 -36 -151 -69 -35 -172 -77 -36 -174 -77 -36 -172 -77 -36 -173 -77 -35 -172 -77 -35 -173 -77 -35 -174 -78 -36 -174 -78 -36 -173 -77 -35 -173 -77 -35 -171 -77 -34 -167 -74 -34 -147 -69 -37 -156 -72 -37 -173 -78 -35 -174 -77 -36 -174 -78 -35 -172 -78 -35 -143 -86 -68 -194 -193 -193 -253 -253 -253 -251 -251 -251 -185 -185 -185 -42 -42 -42 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -142 -142 -142 -248 -248 -248 -240 -240 -240 -107 -107 -107 -0 -0 -0 -125 -125 -124 -244 -244 -244 -246 -246 -246 -136 -136 -136 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -66 -66 -66 -219 -219 -219 -254 -254 -254 -201 -201 -200 -32 -31 -31 -60 -59 -56 -63 -62 -59 -65 -64 -60 -65 -64 -60 -64 -63 -59 -65 -64 -60 -64 -63 -59 -64 -63 -59 -65 -64 -60 -65 -64 -60 -65 -64 -60 -65 -64 -60 -65 -64 -60 -65 -64 -60 -65 -64 -60 -65 -64 -60 -65 -64 -60 -64 -63 -59 -65 -64 -60 -65 -64 -60 -64 -63 -60 -53 -52 -49 -21 -20 -20 -33 -32 -30 -55 -54 -50 -59 -58 -55 -60 -58 -55 -65 -64 -60 -65 -64 -60 -66 -65 -61 -65 -64 -60 -65 -64 -60 -64 -63 -59 -64 -63 -59 -64 -63 -59 -65 -64 -60 -65 -64 -60 -64 -63 -59 -65 -64 -60 -65 -64 -60 -65 -64 -60 -65 -64 -60 -66 -65 -61 -65 -64 -60 -64 -63 -59 -65 -64 -60 -65 -64 -60 -65 -64 -60 -64 -63 -59 -65 -64 -60 -65 -64 -60 -65 -64 -60 -64 -63 -59 -64 -63 -59 -63 -62 -58 -57 -57 -56 -107 -51 -30 -164 -72 -36 -146 -68 -35 -152 -70 -34 -171 -77 -36 -169 -76 -36 -173 -78 -37 -173 -78 -36 -173 -77 -35 -173 -77 -35 -174 -78 -35 -174 -78 -36 -173 -77 -35 -173 -77 -35 -172 -77 -35 -167 -75 -36 -138 -64 -37 -161 -74 -38 -162 -74 -37 -173 -78 -36 -173 -78 -36 -172 -79 -37 -138 -85 -68 -212 -209 -209 -254 -254 -254 -251 -251 -251 -159 -159 -159 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -140 -140 -140 -247 -247 -247 -246 -246 -246 -146 -146 -145 -119 -118 -115 -175 -175 -175 -250 -250 -250 -244 -244 -244 -130 -130 -130 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -13 -13 -13 -189 -189 -189 -253 -253 -253 -226 -226 -226 -79 -79 -79 -51 -50 -47 -63 -62 -58 -64 -63 -59 -65 -64 -60 -65 -64 -60 -65 -64 -60 -64 -63 -59 -63 -62 -58 -64 -63 -59 -65 -64 -60 -65 -64 -60 -65 -64 -60 -65 -64 -60 -65 -64 -60 -64 -63 -59 -65 -64 -60 -65 -64 -60 -65 -64 -60 -65 -64 -60 -65 -64 -60 -65 -64 -60 -65 -64 -60 -49 -48 -46 -11 -11 -12 -6 -6 -7 -29 -28 -28 -48 -47 -45 -62 -61 -58 -65 -64 -60 -65 -64 -60 -65 -64 -60 -65 -64 -60 -64 -63 -59 -64 -63 -59 -65 -64 -60 -65 -64 -60 -65 -64 -60 -65 -64 -60 -65 -64 -60 -66 -65 -61 -66 -65 -61 -66 -65 -61 -66 -65 -61 -66 -65 -61 -66 -65 -61 -65 -64 -60 -65 -64 -60 -65 -64 -60 -64 -63 -59 -65 -64 -60 -65 -64 -60 -65 -64 -60 -65 -64 -60 -65 -64 -60 -64 -63 -59 -60 -60 -56 -85 -45 -33 -163 -73 -34 -168 -74 -35 -151 -69 -36 -139 -65 -34 -155 -72 -38 -150 -70 -36 -173 -78 -37 -173 -77 -35 -174 -78 -36 -174 -78 -36 -173 -77 -35 -174 -78 -36 -173 -77 -35 -174 -78 -36 -172 -77 -35 -167 -75 -36 -142 -66 -35 -160 -73 -37 -156 -71 -38 -174 -79 -36 -175 -80 -36 -170 -76 -34 -135 -93 -81 -216 -215 -215 -255 -255 -255 -243 -243 -243 -139 -139 -139 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -105 -105 -105 -238 -238 -238 -255 -255 -255 -199 -199 -199 -105 -104 -103 -207 -207 -206 -255 -255 -255 -227 -227 -227 -66 -66 -66 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -146 -146 -146 -250 -250 -250 -244 -244 -244 -115 -115 -115 -39 -38 -36 -64 -63 -59 -64 -63 -59 -65 -64 -60 -65 -64 -60 -65 -64 -60 -64 -63 -59 -63 -62 -58 -64 -63 -59 -65 -64 -60 -65 -64 -60 -65 -64 -60 -65 -64 -60 -64 -63 -59 -64 -63 -59 -64 -63 -59 -66 -65 -61 -66 -65 -61 -66 -65 -61 -66 -65 -61 -65 -64 -60 -66 -65 -61 -61 -60 -57 -30 -30 -29 -21 -21 -21 -5 -5 -5 -7 -6 -6 -55 -55 -53 -64 -63 -58 -64 -63 -60 -65 -64 -60 -66 -65 -61 -65 -64 -60 -65 -64 -60 -65 -64 -60 -65 -64 -60 -66 -65 -61 -66 -65 -61 -66 -65 -61 -67 -66 -62 -66 -65 -61 -67 -66 -62 -66 -65 -61 -66 -65 -61 -65 -64 -60 -66 -65 -61 -66 -65 -61 -66 -65 -61 -66 -65 -61 -65 -64 -60 -66 -65 -61 -66 -65 -61 -66 -65 -61 -66 -65 -61 -64 -63 -59 -62 -61 -56 -58 -39 -32 -160 -73 -36 -168 -75 -34 -171 -76 -35 -158 -73 -37 -141 -67 -37 -152 -72 -39 -150 -71 -37 -174 -79 -38 -174 -79 -37 -174 -78 -36 -174 -78 -36 -174 -78 -36 -174 -78 -36 -174 -78 -36 -174 -78 -36 -173 -77 -36 -156 -74 -35 -151 -71 -38 -164 -76 -38 -163 -74 -36 -168 -77 -39 -153 -70 -36 -169 -78 -39 -140 -114 -108 -233 -233 -232 -255 -255 -255 -229 -229 -229 -98 -98 -98 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -196 -196 -196 -255 -255 -255 -247 -247 -247 -243 -243 -242 -253 -253 -253 -255 -255 -255 -178 -178 -178 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -88 -88 -88 -242 -242 -242 -255 -255 -255 -171 -171 -170 -30 -30 -29 -62 -61 -57 -64 -63 -59 -65 -64 -60 -65 -64 -60 -65 -64 -60 -65 -64 -60 -65 -64 -60 -65 -64 -60 -65 -64 -60 -65 -64 -60 -65 -64 -60 -65 -64 -60 -65 -64 -60 -64 -63 -59 -65 -64 -60 -66 -65 -61 -67 -66 -62 -67 -66 -62 -67 -66 -62 -66 -65 -61 -66 -65 -61 -65 -64 -60 -50 -49 -48 -39 -39 -38 -24 -23 -23 -14 -13 -14 -46 -46 -44 -65 -64 -60 -65 -64 -60 -65 -64 -60 -66 -65 -61 -66 -65 -61 -65 -64 -60 -64 -63 -59 -65 -64 -60 -67 -66 -62 -67 -66 -62 -67 -66 -62 -67 -66 -62 -67 -66 -62 -67 -66 -62 -67 -66 -62 -66 -65 -61 -66 -65 -61 -67 -66 -62 -67 -66 -62 -66 -65 -61 -67 -66 -62 -67 -66 -62 -66 -65 -61 -66 -65 -61 -67 -66 -62 -66 -65 -61 -66 -65 -61 -64 -63 -59 -42 -38 -36 -146 -67 -37 -168 -75 -34 -171 -76 -34 -173 -78 -37 -158 -72 -34 -144 -69 -35 -155 -73 -38 -152 -72 -37 -171 -78 -38 -175 -78 -36 -174 -78 -36 -174 -78 -36 -174 -78 -36 -174 -78 -36 -174 -78 -36 -173 -78 -35 -173 -79 -36 -142 -65 -35 -160 -74 -36 -155 -70 -38 -167 -76 -38 -111 -52 -28 -124 -57 -31 -152 -71 -34 -160 -147 -144 -246 -246 -246 -255 -255 -255 -206 -206 -206 -42 -42 -42 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -93 -93 -93 -227 -227 -227 -254 -254 -254 -254 -254 -254 -251 -251 -251 -199 -199 -199 -64 -64 -64 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -203 -203 -203 -255 -255 -255 -217 -217 -216 -29 -29 -29 -56 -55 -51 -64 -63 -59 -65 -64 -60 -65 -64 -60 -65 -64 -60 -65 -64 -60 -65 -64 -60 -65 -64 -60 -65 -64 -60 -65 -64 -60 -64 -63 -59 -64 -63 -59 -64 -63 -59 -65 -64 -60 -65 -64 -60 -66 -65 -61 -67 -66 -62 -67 -66 -62 -67 -66 -62 -67 -66 -62 -67 -66 -62 -66 -65 -61 -58 -57 -55 -40 -40 -38 -42 -41 -40 -35 -34 -34 -34 -33 -32 -65 -64 -60 -66 -65 -61 -65 -64 -60 -66 -65 -61 -65 -65 -61 -65 -64 -60 -65 -64 -60 -65 -64 -60 -67 -66 -62 -67 -66 -62 -67 -66 -62 -67 -66 -62 -67 -66 -62 -67 -66 -62 -67 -66 -62 -67 -66 -62 -67 -66 -62 -67 -66 -62 -67 -66 -62 -67 -66 -62 -67 -66 -62 -67 -66 -62 -67 -66 -62 -67 -66 -62 -67 -66 -62 -67 -66 -62 -65 -65 -61 -65 -64 -59 -41 -43 -41 -119 -58 -34 -153 -70 -34 -171 -76 -35 -173 -77 -36 -173 -77 -36 -163 -75 -37 -144 -67 -35 -160 -76 -38 -149 -70 -37 -170 -77 -36 -174 -79 -35 -174 -78 -36 -174 -78 -36 -174 -78 -35 -174 -78 -35 -173 -77 -36 -173 -77 -35 -168 -78 -39 -138 -64 -33 -163 -75 -37 -149 -68 -35 -163 -76 -38 -76 -33 -18 -79 -36 -20 -110 -58 -38 -172 -170 -169 -254 -254 -254 -252 -252 -252 -170 -170 -170 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -66 -66 -66 -150 -150 -150 -158 -158 -158 -114 -114 -114 -34 -34 -34 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -153 -153 -153 -255 -255 -255 -244 -244 -244 -58 -57 -56 -46 -45 -42 -64 -63 -59 -64 -63 -59 -65 -64 -60 -65 -64 -60 -65 -64 -60 -65 -64 -60 -65 -64 -60 -65 -64 -60 -65 -64 -60 -65 -64 -60 -64 -63 -59 -64 -63 -59 -64 -63 -59 -64 -63 -59 -66 -65 -61 -66 -65 -61 -66 -65 -61 -67 -66 -62 -67 -66 -62 -67 -66 -62 -65 -64 -61 -57 -56 -54 -51 -50 -48 -42 -41 -40 -43 -43 -42 -27 -26 -26 -60 -59 -56 -65 -64 -60 -65 -64 -60 -66 -65 -61 -65 -64 -60 -65 -64 -60 -65 -64 -60 -65 -64 -60 -66 -65 -61 -67 -66 -62 -67 -66 -62 -67 -66 -62 -67 -66 -62 -67 -66 -62 -67 -66 -62 -67 -66 -62 -67 -66 -62 -67 -66 -62 -67 -66 -62 -67 -66 -62 -67 -66 -62 -67 -66 -62 -67 -66 -62 -67 -66 -62 -67 -66 -62 -67 -66 -62 -66 -65 -61 -65 -64 -60 -48 -49 -46 -105 -50 -31 -146 -68 -35 -162 -73 -37 -173 -78 -34 -173 -77 -34 -173 -77 -36 -160 -74 -36 -148 -69 -36 -167 -76 -38 -153 -71 -36 -172 -78 -37 -174 -78 -35 -173 -77 -35 -173 -77 -35 -174 -78 -36 -174 -78 -36 -173 -77 -36 -173 -77 -36 -154 -72 -37 -163 -76 -36 -151 -67 -35 -165 -75 -37 -140 -64 -35 -31 -24 -24 -68 -64 -63 -69 -62 -61 -210 -210 -209 -255 -255 -255 -239 -239 -239 -115 -115 -115 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -99 -99 -99 -250 -250 -250 -254 -254 -254 -132 -132 -131 -24 -23 -22 -63 -62 -59 -64 -63 -59 -65 -63 -59 -65 -64 -60 -65 -64 -60 -65 -64 -60 -65 -64 -60 -65 -64 -60 -65 -64 -60 -65 -64 -60 -65 -64 -60 -65 -64 -60 -65 -64 -60 -64 -63 -59 -66 -65 -61 -66 -65 -61 -67 -66 -62 -67 -66 -62 -67 -66 -62 -67 -66 -62 -66 -65 -61 -59 -58 -56 -55 -54 -52 -48 -48 -46 -49 -48 -46 -33 -31 -30 -49 -48 -46 -65 -64 -61 -65 -64 -60 -66 -65 -61 -65 -64 -60 -65 -64 -60 -65 -64 -60 -66 -65 -61 -66 -65 -61 -67 -66 -62 -67 -66 -62 -67 -66 -62 -67 -66 -62 -67 -66 -62 -67 -66 -62 -67 -66 -62 -67 -66 -62 -67 -66 -62 -67 -66 -62 -67 -66 -62 -67 -66 -62 -67 -66 -62 -67 -66 -62 -67 -66 -62 -67 -66 -62 -67 -66 -62 -67 -66 -62 -66 -65 -61 -51 -50 -47 -41 -20 -15 -128 -59 -32 -145 -67 -37 -165 -76 -36 -173 -77 -35 -173 -77 -35 -174 -79 -36 -159 -74 -36 -148 -68 -34 -168 -76 -37 -154 -70 -36 -173 -78 -37 -173 -77 -35 -173 -77 -35 -174 -78 -36 -175 -79 -37 -174 -78 -36 -174 -78 -36 -167 -76 -37 -157 -72 -36 -169 -77 -36 -146 -67 -33 -169 -76 -39 -89 -48 -38 -168 -168 -168 -147 -147 -146 -115 -115 -114 -240 -240 -240 -255 -255 -255 -207 -207 -207 -53 -53 -53 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -64 -64 -64 -228 -228 -228 -255 -255 -255 -183 -183 -182 -0 -0 -0 -59 -59 -56 -64 -63 -59 -65 -64 -60 -65 -64 -60 -65 -64 -60 -65 -64 -60 -65 -64 -60 -65 -64 -60 -65 -64 -60 -65 -64 -60 -65 -64 -60 -65 -64 -60 -65 -64 -60 -65 -64 -60 -65 -64 -60 -66 -65 -61 -67 -66 -62 -67 -66 -62 -67 -66 -62 -67 -66 -62 -67 -66 -61 -63 -62 -60 -58 -57 -56 -51 -50 -48 -51 -50 -48 -54 -53 -52 -40 -39 -37 -64 -63 -59 -65 -64 -60 -66 -65 -61 -66 -65 -61 -66 -65 -61 -66 -65 -61 -66 -65 -61 -67 -66 -62 -67 -66 -62 -67 -66 -62 -67 -66 -62 -67 -66 -62 -67 -66 -62 -67 -66 -62 -67 -66 -62 -67 -66 -62 -67 -66 -62 -67 -66 -62 -67 -66 -62 -67 -66 -62 -67 -66 -62 -67 -66 -62 -67 -66 -62 -67 -66 -62 -67 -66 -62 -67 -66 -62 -66 -65 -61 -50 -50 -47 -15 -16 -17 -55 -38 -35 -141 -67 -36 -147 -68 -38 -168 -76 -38 -173 -77 -35 -173 -78 -35 -174 -77 -36 -156 -73 -36 -157 -72 -35 -166 -76 -38 -155 -70 -36 -174 -77 -36 -172 -78 -35 -173 -77 -35 -174 -78 -36 -174 -78 -36 -173 -78 -37 -172 -78 -36 -154 -70 -36 -171 -78 -36 -154 -71 -36 -163 -75 -35 -139 -62 -30 -141 -142 -141 -242 -242 -242 -173 -173 -172 -183 -182 -182 -254 -254 -254 -252 -252 -252 -119 -119 -119 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -42 -42 -42 -200 -200 -200 -255 -255 -255 -223 -223 -222 -34 -34 -33 -47 -47 -44 -64 -63 -59 -64 -63 -59 -65 -64 -60 -65 -64 -60 -65 -64 -60 -65 -64 -60 -65 -64 -60 -65 -64 -60 -65 -64 -60 -65 -64 -60 -65 -64 -60 -65 -64 -60 -65 -64 -60 -66 -65 -61 -66 -65 -61 -66 -65 -61 -67 -66 -62 -67 -66 -62 -67 -66 -62 -67 -66 -62 -66 -65 -63 -56 -55 -53 -57 -56 -54 -55 -54 -52 -60 -59 -57 -46 -46 -44 -60 -60 -56 -65 -64 -60 -66 -65 -61 -66 -65 -61 -66 -65 -61 -66 -65 -61 -67 -66 -62 -67 -66 -62 -67 -66 -62 -66 -65 -61 -67 -66 -62 -67 -66 -62 -67 -66 -62 -67 -66 -62 -67 -66 -62 -67 -66 -62 -67 -66 -62 -67 -66 -62 -67 -66 -62 -67 -66 -63 -67 -66 -62 -67 -66 -62 -67 -66 -62 -67 -66 -62 -67 -66 -62 -67 -66 -62 -66 -65 -61 -48 -49 -46 -60 -59 -59 -160 -159 -159 -70 -46 -40 -151 -70 -37 -159 -72 -36 -172 -77 -35 -172 -76 -34 -172 -76 -34 -171 -77 -36 -148 -68 -35 -167 -77 -36 -161 -73 -36 -164 -74 -37 -172 -76 -35 -172 -76 -34 -172 -76 -34 -172 -76 -35 -172 -76 -35 -173 -78 -35 -152 -70 -34 -170 -76 -38 -159 -73 -36 -160 -74 -37 -158 -73 -34 -85 -68 -62 -240 -240 -240 -249 -249 -249 -196 -195 -195 -248 -248 -248 -255 -255 -255 -134 -134 -134 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -42 -41 -40 -53 -53 -51 -11 -11 -10 -0 -0 -0 -0 -0 -0 -13 -13 -13 -161 -161 -161 -251 -251 -251 -239 -239 -239 -110 -109 -108 -28 -27 -26 -65 -65 -61 -67 -66 -62 -67 -66 -62 -67 -66 -62 -67 -66 -62 -67 -66 -62 -67 -66 -62 -67 -66 -62 -67 -66 -62 -67 -66 -62 -67 -66 -62 -67 -66 -62 -67 -66 -62 -68 -67 -63 -68 -67 -63 -68 -67 -63 -69 -68 -64 -69 -68 -64 -69 -68 -64 -69 -68 -64 -69 -68 -65 -68 -67 -65 -56 -55 -54 -60 -59 -57 -64 -63 -61 -52 -52 -50 -61 -60 -57 -68 -67 -63 -68 -67 -63 -68 -67 -63 -69 -68 -64 -69 -68 -64 -69 -68 -64 -69 -68 -64 -69 -68 -64 -69 -68 -64 -69 -68 -64 -69 -68 -64 -69 -68 -64 -69 -68 -64 -69 -68 -65 -69 -68 -64 -69 -68 -64 -69 -68 -64 -69 -68 -64 -69 -68 -64 -69 -68 -64 -69 -68 -64 -69 -68 -64 -69 -68 -64 -69 -68 -64 -69 -68 -64 -68 -68 -64 -48 -48 -45 -88 -88 -87 -239 -239 -239 -130 -129 -129 -91 -43 -26 -158 -75 -40 -167 -78 -38 -174 -79 -38 -173 -79 -38 -174 -80 -38 -166 -79 -41 -143 -67 -39 -173 -80 -39 -152 -71 -38 -174 -80 -39 -174 -79 -38 -174 -79 -38 -174 -79 -38 -174 -79 -38 -174 -80 -39 -165 -77 -38 -161 -74 -39 -172 -80 -39 -148 -70 -37 -172 -79 -42 -99 -39 -7 -209 -209 -207 -254 -254 -254 -254 -254 -254 -254 -254 -254 -239 -239 -239 -90 -90 -90 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 diff --git a/other/assets/xenia.xcf b/other/assets/xenia.xcf deleted file mode 100644 index b2d72b706aa4283b743411b0f4ec623109109b25..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 39636 zcmYe#%q>u;NKR8IGcYt{U|?Wa0L38oGzJC+K?Vi}Mn(n(24MyU1`enG@3TOdfq_AU zfq{XAfq{XIfq_8`$_A+uWnf^s$iToL05V!PGdD3kRX4pTGX-QINPdk*aYnfaLqknXE{!BC(uN9P2$HTSE=Wwy%u81=G|=SI zs6^pGIl85JnI#IDdC3{6#hP3i75Qmt#i=CV)&NlZyBNd$>A zGB7Z{w6U+q%~2>zEh^5;&$CrG)H6_5NX<*mPsz+nw^a`fanrR>x3}Z6foZhkQc$od zNlaJBOUzBRRdTJ!Ow;oO1(BXpW=U~CYEf`vZb43}lAVQug@T2Reo10FZY^MqKB;-> zB^gR~hGquDC=bs}Ax^b_QD$mhNn%N6ex8z@ApxUEATc==hYuoh3-n4d)6(>?de%lC5o@3bN5aej z5YCLH5E_N7faV}jVwXxzEXl}ENlj0zEGbP&)h#Z_Ni5FLE67U+X#r&&P!{^nz`&pg z%0l)HAYld$5F3>57#J8hp=^+Z5)xYmiOq$?RzPBNBe8jq*t|$=eo(fCW@nHc>`*z7 z`KnMhNL&TP{{R0!$gRpqY*;bC1X6^+EJ+A911v;9eg$dmgUHS3h0-%2G?;{`1*tm+ z7GaQLhS0hPA#^ZQe_1w!-RuU{(Cb0|NUprvNgY${{Q=DYRJI+|JU0!&vqaB%lseAS%2yIqrMx= z|No2VGyFGZ`v2qQ@)yrv97uY`^#A`KeFmog-~R2r@#4kvXXV{rng8oD{5N3w|M&Cu z$ILJOoDkUekLmyar8*4E|Nq|G`<(g3pU1iO519Y!Ffjf9{BOsN=g(ifeEED0PxCkC z|Jn>p|KER}^ZfaX7cXDDJm;>s`|tn%|Cs)(Gl0l{$4)UlXMXwnaVdk>E7t$&3{3xj z{aX0s`HSbwFMqvS&CSsJo8`Y6!+&9>|GysYdG`Fp3#OM}UcI~`!>E1Y-~a#L|En=D z{r~&-=w+toA6~qC`Qp{f=V=Tqu@5eHrpyOP{rS1!{&S`mj4%JcV0!s|83O}E+Moiy64W`(`oCRb^oQ|7zbkkXv8AdiC<|rpaK}J8SN| zc}(+_8GbVU{r~^(s+CMHm|y;QanPKBqh{`0=6Q_sRX|SvTv5mL;`7T_FJIn@WMPz? zICt)R=6V0Ya=%`fIbC}3g8Ak5Jq(Oedb4IuozFDy-~4&X4F4IK{{MO;E8h3$74yq) z?F@n?IkP(o=g(uB`+pwD)L+juxa7CLV0!uSu_JTFrm0=MMbqcaoih(C`Qlv)FRS&D zmoHzP5s6#9ZCy_9?5a6)TKXW8e|M^Lad>xjb=SKs+PZDqq_%aPRWl}sw5Txr_h9<} z@<$^Br&&X9RY>2K&6_tYnL255eQZ&RH8|W}W-_qZ6wX_eAqQ1GMwIMNVkrKnd+JCJ7U;kU7*SBfQwypEL3UcE^JOgv; z+6xnu7});5`g=O6bJON6+g8UGcXYP5)~4H=_~oQ1F#I=U{r~IV`;}H5o0zwJYD;PF z=TOToKx1(mgA?*%wD>B)#~}42dsZ@U{yrH*VO-y!rK}%^Q0{>f75|JNl>2m^Hey>i4a#z}%+JDZ8J%0Oy_O zk8f;Vy+fJdzdPIi?|)vM-J0EV{=svm7e8LUc=_VRvwMq_8Myv`eHEIYG6R$kU%p^| z`R~O;WrqKMng0KK_K)TNx7QaRzu9{hlz*9C{dw{7`7>pP{}-A5|2=)~FWdj0f3{ZN zyz}BE%d3AcUx4z-@7Has-u`3$|MBOxJfFFfpTB(h>gB7~uU~=WKK$L*R=51@t?P%H z%PaG2EY2{!_zji>6$CFo^tALgHPkk=c68Q6g!eps_TmMoyij5IFT(u)?aQK))~VCF z>LztgORo;N@Z$ON7fdfz8UBN;dcLT(zPxeLggISBB^Jw`vb^~JT#e!X3g-Xszi-Q$ zI%~$<31L-f`DyoGym-#^LY3iv9rOR!zfTvJO`SG(QbuQMdz1IU7tde5c<~&Z=l<-g ztDZD@?zF7V?g>*`Evg?qfBx+G3y?FI{=fWpxS@91^jT9gs%j_Ao{;Hhcl^ndr_Y`% zGyG%x%k=;4jkd;Vvu94vO{(pmJfSf?$8^n8re_S#iK$~2{Y2C;yBDuUu47g`+JUHJ zE1gIveFTJq%alRb$@bSB=h&pE0lgCeSRIbAstH^V8q=iy6FL!t0m^kDfecdHQ<=7efzH z6|?)%<0ns;o_=}u^rAGRiunevVqX0{dg0NN$4{OG7GRv8sFg^YLB*O;&z?TL8qUJV z6Q7pClKLMk_49?9fG{MK>>2#fx*DvH8R9DB{elAH3cmBE`^WX>fp1dPfrSJ`UeI$`FaJU zrbNU*bb_iFF3-01_9_MMpuj*^hX7~4lz8(9SQXR6z$IztV4><55EvNX?dt4eYvSgh z01CBNFEbh0q>S8s0t5Wr4b}CGjrDX)+}uDx4XR=|M4bEsg92UUjU8QF+}vDEG<^_N zjD%BQKwzMUinXP&uDZ6Rvxkiyq>4Ee?idgh80e>C>*nt6>S!h}rDbIfsbXIId%sf6 zJ}59KFv!l-&E3Pp-P6O(URO>PRLA`M_hw(Nnri@a;GX~uXLlx#AKrexULKxqE}$yr z=fA57X3oC;ECGL9blgF*UcO$gb`EatkP7DWuj?BpS9t1s1q1{dS~0tScQBC)oHc(+ zfCs34`Tg(5J#QDLfDeHNcJ6MLnxc%H#VePusC5O^FW-K&nz{K01O!@JF}eS?6=iUn z#kBn2R99I2vQ^#Lk2&C53#aq$ZX@DB*^*K=fY|L*2h zJbmuO(qMN`1@q(g`A83tEOWp+cLP^GEYuXBIAIV3>0U zR=s4|_y;ltybkKU^YGE5vrFpIN*f!?T8=+Ks$ZV}d(&kPvMw-i!QDrXA3wTtWa*SC zTkbx63awv$eOvEp;~mHp@NdB#mM1@-KG`|v+Owzd+NE93%+A53<@OU$o_YHC{^boT zx4~+cmuI$QCLaXl+#gS$Jbm)y@$LDb+U5OA|G31d;2a3n^yDtAdil%p|NX0rkKgP$ z@d#9mK70D)>ElPp)yuCxTPm*Jc*64Z@3W^*K-u8;>-uG&>gDIpt>KQdCOl?(`tQk8 zre`3j4}UkuBrG_6^Xk6xfIuH({gcd3{ycs5>?x=Oc=Mq-G%_H-&o4A0D%i%R>*1p( zPo6P71r_Sd|6jex@C!>whzg2}N^%SKJ@e!-s2q6;t6XL$g!qNV$E8O5`D-qE$nxa> zV_4;~*&{wFDK*w2$i+MH_LC=%nV!HZmlGj=35lt3E|K9;p@w@NKL!N`IJf=T85@)k zpO)wr85tKJp;meK@#9C2pMcx}s$3341|=q@B)J9#C8Wf2C;_Ns?Wj~E_fty~yU`Y*_J%dYvWkm{Bg`*%Z{N9n=dg?7F692p@1qBA-nzwn=lAt|22Xh9GXMIm+qYQm{9eR^ zQn_rsdF%FVraNEm-Z>%7tbP37|9_Cm<;UM6$8O!eb^8v}-LJQAB{8tZJh<2#F&k8@ z{rS22(k-UjAMf0~d*{yWc??WU25RP3Iv}aPuNL2Ay8ZtS(>=yJ-)_%hU{y3Vx3I7T z$K2i{Am`q>e;4Epab|f_a|?3|3sB;E`EAm5kVo#`zkBD_GF>J)Gjnqb3oA=V_44NW zl3RD~+`e=7{@vSa)R`nqK$1+B$_%d{otTApZr{Fh=kC4RJ4~5a3@y!>Ef_69$@%Z6 zib|&2U+&z!bLU(r3p1ysg*l7Gf3Vcg=ce|@Z{NMkbm!+524*&XD@zuOf0h=I+U4yd zS&8;*_wU`gbGMO!MOxO{MAwqZ;-9$%$k4Y>)p_ODfy}&S#~`V$WMZgd%>>d5l6>(l zMS#n4_uV^p4hf2?tEy}2sOei+n3#d>{Q7sNIuDO~Lt|5!Fq7&xH5C;#HGL}!B~wTh z^W{e)1Gk{Es=TPOni{j}Peo;A1uY$6aLB#PVCLYLRZ>w?RZ)=?my=hJmz7gd0fqO^ zf7b&zc~#VyRKKVQDQatJYiVjKh^fJAnB~IC>T0TLDxzvC3NljCDw;Z~(x4jV*WXiN z%BreNYM&)EbhNd#G?c^yrBziSHO$X{?^Y-(sHrfi{!vuY)@IiErLChWCn5=|U_SnP zy*Ec#MO|4{O;tluOPfjOhn}IKp0=*GCa8w_@b7B8sfL;=$Wk?BS#6NKuAzy!iLtIW zq>g#^>-zeMMYfWvs%q+zs#;pwIvR>%ep6@lduW3ynYaIb-1AUSQ&m%wP}9~_mEvRK z%wt;guRP1=Fji*0ZPoOOlp7C zRpgkpzG!P|>np3MtHbJ;zrPl_FsVFKRaaBf(9}>@me$tM)wc>v$}h`TVqkc)+X&Q& z`SbTos4|l(liDlmDQ(4tyu4?A|Ah6|?%aV_GV2_~K=J-> z!X@V0jCX$B+BDX<%Qp`s}{cj^(}sG@vxrWbMwyKd-v`?cyJFS_u}s+8^5_HuV39$U}9{d zt99_!?K>dJ`{2UheVw76s(-rncW=Y0nwkCv2F7M4mZrug3iEEV-2Q(HR@H3MF|)L=G*dCrHi*4+`}Qp+ zkREV9=9r_QrJ04fmWi3Ek?hu6x9;4&eG8oJ{%rFwGBdTb)G;$Pw=k6`y>jc;&0DuY z?f_Ladut-la@1$|$GM#6|G%>`dJO;M-}C(c`)3lnF2nzPzW@K;x$7|eW53M*|Mxk04P$8y zhJW6l1^)l}^y}|Ob%wtzQ~!$mS7-Pqbw(6Kx%?LWug36?u|o_*i97&P@qfkst1|p! zUMCKsRPKrYS7G?e81fZNGiCn)(f^n$CH|{0K&ih>*?+-`O`eE@4C?<2Hb~@%7|0T< zS75tLPKy3lX86S-tkv@1pXh%jhTl@FzW@0r{$G*dA7i;Rh+>)rqW&_5eUtjH#PEkR z_5NRp|H=%17zI(}AR z_l{#c!I<;Ci|O#lCjt1|pIW%>W*+d}8luU?)x_V54yO{xqm|G#~nVX)=- zt5IB!Ot1ef zd%*Pnf2TA9(|;zgy+7a7@f#j~@rvp7-#7brGXIxmVEGRkI{5UgfI(!+6YwC!t80@$ z672tf{=1vXzz}hr`PHx2uU@^V|H|}Vn&IEezpVe?KMH4KV%YKY{wvUs#;ezJ?t`TM zX77B%{QukCNCqZ`;!8_Ty<~p<=he%7M?iAVr#4mW`T1~tp1YYCOIB~kjn}VUy?*oh z<)sZw|Nl>xVql#2VMb9_&g6OX=S=CHK6}ZNSFe~}Grs(LZ_yv7|56N$^MB2o(@{8c zKGOom`F|%|c+K>R@%8VQubwRb29jo;|7q^Ds(JJ0&zs+~3FIUukmS=fA0U#9^B89^ z&Hp{GXX2R`Ot1dG1_j!NH%$NkGfFc2nLls-Jm&e#3;xWX-FJ%l^{-d2U%lA=5~PuF z{@(@j=QAx}p8s>sym{?+U%zI0_2=b_-A_Q0|L3vJ|FU5If(7$?X3d$j8Z7tv<<8q6 zx!?2V&YeGxX~CEI3+60npFXR)`qAr`Ot1gG+;kNr{bug0Y4boj7c6X^-!{3wd)D<= zAnALF=RnfW=FVuC4U(R}plW`@2S2xIB+vLyR`~?){FIUWLU)Vi=-u(XRtQi%p+cq!vuw!5-eF>TZkY;#Q zvT@z&_WARA(gLkLb%Q(BZ!YCx$a%%`Uxwke{j6;(+UE4QY1q5DyEzy}E$mmWe8v3# z|6f^#Zzb7V7PpmKn!5Wl`TY#=w)bwXc*F8vj^S-<>0>6C9bCm677_WgYwjC0?Y41naPjmGO~}kj5A(5K z^N;1fEW;~q4nchzWk-7lS1-SanAi|6Pm_)-|Cs;(_mp9H8OOlFSmR^X4-*o%>QK=zMhI^aNT*Y&B)QgfywEUqk~QGijDobM?tOrf6@#uUf!5~`T2|6 z4USIE&W;WaHbINFZf)uR@DCI>&tKg>@Z#00CmUxqN1JFFrOrIGZ`=0mix%Ga#q|Hb zu@uAOmA!MOojkvM!?nk^&mTK?=f&%1r?ze1wtm`Jb%IT z>dVVluOA)Wwr%Co$(>J_{{Q!oV)*v>>5~W79zT8Y@+H$N#+TnO?b^0ud%gee4t+wD>AUW`0>26 zq5Z@E|3BFN|94knV0!WM<%<`mj(q&X_Fs*G@de}a-!EQ1-0+R{zXk*2bLN+SUmZEb z{{QbG21aED#uwjTzIgfS<%{WuesKQ(J3UB5p5YT{7U|`y*KeNgTyyR7U+(|^K<+0{ z#DmIgTt$4vk*UZz64~?GK(k zd-`xLS`q*2Z3jc#m8Z9 z672tffD8EW%g>me{(AQG>Ek-&5wFE}^<=o98= zf1Wr<)PZ^&vKK=V(8MuUJN&B1_n4XrF znijqG$uo%7XAf6{3;2I&=}c*V)02~#(tf8#RULoA^z{ETrl)@&t$PhA-)#|B{xTmKKqc5>#^U*%PK`f1j+s0`kq9l;osT zkjC_ku=Mc6xab*|pMs=sCP0e#)Z~y9kaSwQe|kt_SXB4pCr_U}d(`RxDdIy@+!E5# z(^J#ZyirGQ_k$MkzkNL%e4?1rKE~Kvd)V0r1^CL_Fff$9fEMwV z0saBuX=yPw>T)XLYW4vEW{eEkkRo2eJuo0VHA+v_#>LIm-ay~WQ3O`Rzp*n6@{jb@ zFm>_v_44-ha?r6Wh7|E0ntqNpD(0^4enF9O@uA+%O5H4=BHlyK$H!gY)z#ZSEH*7A z(GRJJ_b_twaIkcC^$iG*%gjs*_VRGL2QK2>H4TmBt?XSreZ%8(^0MQ-JdEH)ysK7V zfT@+ei-%`GTvmQwMu3NjIkbp3whs!lx3G6~_wutrjB(dwV8FM*A<;dcFZp?(ic1>6NJ$9zVHR@8Ia< z+aKWY+;L;-6jH`}En<2ODNIMjC4xB~PDU5E>Nh-FY2W#4qoeJ>}@>rE4zT zzjpf2scVlPUzrpb6yz5RE#jYVK6!jc>(9EX+gPZ%Hne)9D0dPoWX znEC17XNM3a{F8rApD;cB^JE%Q2@jtA02Qd)i7w$^f{JW-34c9%B61_Xbl)W85T|B{>EjHEll_SO}htbssHuc4l3ipt@zv%vku&6 ze(>l1oo$dZ-pnd(&(8;|<7C9x84}Wi&po(*|G~ricTPad_;;38RwnVTHa6Ba)@D{V zZ8sm>XL|7a{@qKEGM>@$kAzvEx%Y?U9^Pkq@b})T%OGh+^LG|tomSQ+ zRwkC_7Sqn&yT|n4@8vjf0ncdh!q^gIu%)%3wXub%X~&&A_aEH9)dX$B8(V5ySXfzE zSXvuc8Cx0Y*zCRi;KB7?SOKqOqOWhoZ27@l$6Vi3Tb`lj*2B{^46~sHJfr#_J#{N9 zCd-e8Mml;*s%rAGXIJ?MK-=(Ys*0LsmX_A$>KbaQs_Lq0+*U{hyn?#AhN-26xrT(O zn4q|lx|$>dtbi9)Q`0c9Fqc!dbaHmG(UVtI5`-7<8d4hSrh0Nljvk)w9$s#?%F0EM z0$xX4T~S@a#L?N?FDyDH$lXC2Qow7=sHm!FIy$=h1Vtq$#(KF~z}xWJ@=9t7Ciae= zz9G?RX~_X@F3Upk-8(cQ(%;otCGtG14IjnG!em=)Xl-NbELKCtzoep(uO|}&fv7+ za=pHtoh_67CtDkHMRipLJ6Hk#{mz*QCvV-pSZ&W__r=!6) zd$(3it&1>J(@&T@IYe7sU85CVz%S^SHu1pG`Abe+KYwKR;q!NIpQut%Q&sla4r#-` zU32*0riL{quid(H_x`=R_wO7j)L~NnYgh&=;ICf4cKOt`8{l#Ddv~tR@l;S#Q*?$F z@Hc*6yMFEFE#^C)ZysJ4YpANOp`u~A4bp_a1)9yc1sW8*b1F+tO z*5S)--=R(T+dpo#G8&_TXglNKlV)(^myl7)Is{zAL&XiaG|Nn{6 zXZS17`rIz@ZvT3`!|_Uib3lCzZzyR)y)c~dLYzv zb}(-$n-qiO|G!^C8A0^FwY<^{694~Qkdk2#|NrlXxh#X&|G#hj7-bnm|NndDF3%wH z|L?0{CV2+o|9^jnFexwy|Nr;LRS_h7-i1jXr0Ri`JcHQ(|K?!MS2Ymz_lg~x9E0fp zKmVS!aL9s8ey$CszL>~@tUD+L_R>-|khA~YlmSym_`ptiI|G9mufR`{{Q<(gHelt^Z)OEms53EH5j=6|NQ>$c(ocQlL`a>|DPXL=?~zjr~$#O5j8y^)0%LH&d0pj9wT|6hO4YnVQ3dUi};*;X-KNO@#6WjXDkq@-^sPJXJp2= zG`6&rx>nqL4$<}hDOlgXrn)&3-3yx9>f<#T7QKA_3~c28XCTQ>|2EgpZuKl^YYmbX z<;!4s_Uq|$kOGh=UtDUKUYigXrY9vXE?{-+8K_?d!jD0cAD^~N%GQ_W6&4l|5|rwD z#PswRs6qGm5lHgI>)u9vQ86KY0YO0lLBnOBl`){kC0OT+H$6%G!oq_5!a_p)e8LJ% zXC6Fz_Tw^g#-ln_=Wg|h57h|`8|5JoxgMc&S_Z&&i^mo4DatrYD@bd70)}sCU@|pSn z=Wjh)ynKATJUpD7T-?lDKX`cgc{w>bI6x}C{#<(K>6<%?3OIRrm^hi(e{ryLa&mAn z@%-cBU}BeLVE+H?bx%cK%LGdveqK&4ZVnDkE_M!XP98ok4t6Gv|Lk%M%>Uni*^*XQ zAj~bm&BM#Z$-<#me!Eor9g7jZK!}|4!!rFFtLb&|t^S$;~Io&%?pV4RQ+y2RkPV z6T^R2kO`08E$nVeRp8*|=MmuN;}I0$9W*4wjla&XC%dT?=C-#Voj^?vb{-%AaS?YplUCI*iGfB*eW;$vX?fB$n=f)ocAm&ROwZhj8-%wMfMvp@E{ z`LogY_0&&&Mb8-+x&HtA_n(L1-`_t>|L?yjiezHr;H$p*IBc&3(w=@5#VNLcy!HH z@51ec&rh6L{q*4L_|7MwwbV}!v;P14{RpTx$H>Y6>VmTVfAr^c0E0kZB99;!yUg3O zD&|)&t$J|a%AN;DUqwuQ4AS-D2 zzj<=gt*v*C-#PIzXx>9muzlR||Np;#O#lBqzaaGg;lH2n9-XNQp6JfS$(a3lD~J1? z!@Do7e0bsd$rs)$?}9A&vzYDw-=C}hasFreckS2vJ14gHo#w-#)&6eEagjZ42iv+I;-V?fVZN zK6?20Srr32!=%r1*n=MKJau5|yIYseKDF6#o#6!2|G$qf{A2z9YUizc$2YHEzj6Kg zZTpU2x_KAWlK^!;86UoQI+uZ+Vd0k^&WI;l&hP5}c>m(LCl>pzF);ss`fKOs|9^kH zy|lKlXw%_~7cN}B25Pk2dvO2$L#9WM9zS{f^zq|Iiy7D%)_ktxjDEiE^5%w*PcNQ- zY<%$QKbHUR&u+MQVClSVXAbYbaTByE;ttbYQ11)0yyVft$Drjd&z@~yU}M_~gKs_XW zgXuo=gTMFg-($VYc<~6J^zhgHhgS~XxChe9e2?+L zzxxlE9x^^+dVK#;DkGQwgR2bOAl>t%j{JFW<*DV8=io%T?NHD42h0yYJh*kEm|@Sg z6?^Z4X0PwvX8|SAhmRjWI&RL&9s2kJ19#SkiH{dBZU6n~>`VWduR*2HpW7=p?_+w% z_~7O4g2^iGCwnDAuH6Ae_r3cM9)k2UKYBh}l#M(3*+~ZOtdISV7BejS_3ZHLxW0EF z?N8s#Kfmz7!-o$JyBiw__AcdOm;eg5d-v{u!kzKKsfUjqT~B6X<%)Z8h=C{jQ}4rN zY!iRH-2Nt`%%&b=B{%G#Tia~Z}_;V>@8UH>yCBDZxr%6sPov1FnG(ba3~vVaWOD3 zv9hv16|xjz=U`>y%K5kwq_^YbNpXe^KN}uxU-1~E_t>BMO}p=O3o|fq8t_V4Xm|#P zWo5@%F)*;Pb8v8SFguvBv2n1nvgdtX%)pWPvGwo;afS)MoAZq2&; zxC*5E%jL2K2loH`^Yi!rfB!iC-}(FV{mCAG6Y&srb~ZM4b{5v$Pb=!}>M0SoQxdbx!76R*x1?F*_haWvVobLEDZk*S^odK{fOy5F9Y-c zA9r=wK-O_Gaed?FWMySzXJ=z)XJ%t&|Ifh=s&ww%XZp{>@L!VY|IeQtTE#49Ki_<84~$JsO0m)NN{ovSi|}?#z62_>9)nxwXM+6FQWCuly%M71 z<6`|iQ_ekj_=xE-v~@nwFCjHC*2ps=E-WD`#ya~9)5AZH9)p${~=i4zs7*%I9>11@L)%I<^@k5KY~a;0!e=Sx6wZ()WAC;!c0O! zIQ=2>qhFu`=+Q%vFMnJJObT#tu#{(#{w!jB_|YSfv5y};ybqH6_&74&T~$;-TvAd@ zRJQjX)5Bk&a^?O#kmQTk*quUSX@j@ zSV&B%@x+}+4<9hyM{b>$sf&q-2nmY{iiryeiHmr2Za#D4_Vp9s2Kbvq1#xj<0e)T{ zAyGjgF);~AJv*;JPg}6$6&)E-Q9*t_9v*%Hem;HyK0Xm4egS@dP%HEAm(Ty0{y+cP zEGH-=#K+6a#l_9T&CSEj%O}Lg#l^`9QuFfX;(d=_UTyK_7v$&W;^N={wa&RXxtVzX zb2D>5+UHF{nIZ8Sf+GB!+~6iY2PY2~FF!XY2NUOi4p8g*?dOd?!CpdqLcF~E++3VI zyxg3eEF8Z%IXKwaAr15=A6F&?YjSh*@{0)bb8_+U@$ztSaGcqu8f{gg~wmT-+ zNt}~kkdH~|J+FWepP+=8grbz7V`^5W%@UAPAO4vi6&h&5#mUXb$IH(zUf3xwJ*%!` zUyWq@#${82kAT&@tqBY965-_J<`);_=G9oXRmJqsgvF;?6sD|L*AoX(^Qt&BSc8L$ z6VyQG<~H24Oxf>H>-y8}nv3Ra?MONVF{jMKQ<#&BlOd%;n2X0^-xTSD!!y>?e{MNYrxq+ z7wkz85awbRKeSxlVC|Z&9dp;r+O}w~chyc%QHHI7u8`C#%g@DTe{{Z(*@k5kH%;BV zWYdzp9?jdZH_*>k2TgG2=3gvvRk|%njfM`V(*iea9_O1AX1PHLEx5ICSR94bbr5z57fL z8SlP$IGcf;q2)-akmt_HD`ylQ*}i(!Zo|3jP#Wk31?%^nK6UEsg)7%@-UO}2yUTR% z(ftSaAKt%zcOe5iL*J21LGRuDYo=rz-Lq=dZk_pS|FQi4cy`0Z{flRBJic$&<;z#E zUT3<&c=OgRP-7X?@C40MJbd(UEdv|F^rMmdetWw&^d}xYv})}xl|^en6CigNbuZd` z^vtCz*Kb_EeuL>c^NnAibFp8JDhJyMFV=jaxTv-n@SO#*J$?m_P%Nx9{9xy7%Y)gNF~99=$riz$(4u zsF`r!f#$94!TV3I*}R==;aaBuum5zMntb)v?OV5R-MW4A*3BC?Z{E0Zlld0oZE$<} z-u(ynA3S>W@H7LP>Wae({6UB6ceMEII=yz=Hir4@!7cQ|6EA~06@PEtzQuZz@z%ea zw;*eFC`|GWn zw{G18S$^v_(;cR}|L-x~fBN9j!-uCC*iF~(VC4%vT)nHobi|J}3h zJ+toKz5`ke4PF*{=O)vQ|2LVy+L`V>z5npR!<7siHk&sy@P{6*+})tQ^7Q7dJH;pL zU|{(Tq zV-*8W*pZ4|O>EOnZC}2}v2Guz`1x~t*~Z;Wcc0(6y*+=TitEuXiJ*%&K+z3KsCVw( zyUTR%+1=?PY&_n(moV^zA1&M2#@cam=ls2Xr3XR!pT3!Udj6fecW>=?Gd2|JTExZB z4+=O?8}$~`ZN@vN?%un1IgyQ(+jq|b2HuFHrQ16=%1`W>zCR-82&9R=_{yZ~_wHUz z(`lX{=ISYCey7Wx9{G&yPb!fl_y}|9FYB`TY7jBj_>b3l$df9 z(nMc!dD4}8_m+X0=y{VtO?15}*KXXtdGppSrrQth+`V`IZV>}JD{tWbnGD?FM~gR2 z&_ieJOAe8U7#j9PtbvB z3|!&Iiq}sSl-qx#@>o&OQAiVg|L&z1@2*i**JYCfHPMaPJtMDPyL#p7xkFo)O{z(7 za{@Kd*?2<_PGaB=KUTDQrZB_SV|m9b1CD@N%FnJZTXyS*@E*##ueMx_D zfF2Vwyp7H-7VKy7qe5e6?%8{J3~+(u_- z=U@Ui(>XX;*|{T*bTe>A94lPBRFq-Dsf?XdyLN%JANy0ce&_X0A!svQ-6J?GGb+o4jCI1SQD<@@w(Uv<=>|8`_aQga-<|CCHxUn3<6vj! zU}s^CINFtI>c2O>dzm1+LAR5Tu^HB8Iy(m^2Rkc^=h8)!9hF0rr6oDo*%(+sBaz@{ z`rfai|KB~f>Qk&++0lD-*`CL;H~uk98B#0IkC0VIoLUwxfyx>adWV;LEGtEpmyk+ z57m067Uq`9GTP>5rUs_^n(-&EGu`}u3)D{keo{}*!oplvPMg{Ehl!qk{ITmdZZh41 zHq*Ox%q+~zCmV9hxsx2!bBrYW>E+*G;<>rkW*Kgdoe(fq)@>Qs@ zlB}$xsHm8jsD$y{t2b_3zj@>Ob%@S4ahj5n5@Mnf;^HF05-PO^E`u~*yN29M&yJv0=#^JLW2APLIMJ!!UBQXPXJJthQBg5rWm9uA z#bA(IAO4wPW}vUc!_6xoz%L*uWbGj<=j-SZVK3zn9^j%K3s&fmQ64_2FgID#FuUMz2blnuNNb}=)MomhujM)lOuR2RoaP$~aP!GW z+sjyo*#?I@Duh|bSQ$s4Hq(oB__=v`)u;IiitzAi#+gVthFb+kI4ee3#8??1w>Jp+A1bgV-_y0Em;YZVf@WCeM+6vMql z6asvm!`%Y?0|SC}9fLuw^bgx%!|3P1!{~1xov8@ub>rpc)D3r&Q1ocA{I_|n^1cR^&oE_Z_DUVU;hv#&j4^M z9Wso*!OmV*cOA3A#K%(-*tFJHQJh3V>}YuB&cxOVO8ECxU69@!YNR7cO1CeC6uZ zE7z`pw$R*I#=ybh7G@x<9_k$Aq8l0F6BsP+=L>G7FYKJPWzV5wC(oQcbLK458RoOU z&Rw{4>GEZ!E03;Tzjous&09COFtG7>MXCy`hdPEhX@`gT28Rgy`7!-}{H12yq!Xu3 zpE-B#?D@0j&Yd}P_U!4i=g(ifbQxs8)j!v+-?+ha^VLoURxzI_MNyD`M~%=h-;fXi ze?O-Gzy7oz>^*aV>EhE17cZT^05an2*>mU5U%Utj@T=FZU%Sq9^W`B1Hc8(|Q9<=E zyHE$U;BddtU|wH8P&0k;?(Wk}mzXdAy?E(7>p8~r|1Ml)y7d1t)78gUu3f!$^VZE1 z4D3=q;erC{5w@XrNHpWKZQG_^1qJct%S@O4T)uMY z9Mjo97cO1`>u0+9^xBQP(}Kb;55uYq)5xqRu$ ziEXDYoIQKy9Mgs07cXDFbeZW2<5i|>_pc@}^Qs00a`S0`ved}? zr!O;K`EdE%nOufVC+2RtaPIv13l}f3Tz+`<%9U%^uI@Eq7f=iG=it+bvJAE3aSIO& z2vM;Q0~J7jZZBN5h3U$v%a=Cg^s6}UYn2E%dG6eWix)3kymaOAm8(~-UcGi@k|;aB zTChI{KS;klk3)Enf3TJ%xBz?oX6E6Um#NP^fhd7enXybLW`O|2cc^;$@~w zCqb$1R2&BzuUd#7Cs@BDuT@xxZ?K+e6r`cP@NDn7t5?n@^V$lUE)8U{J$&-~>9b7d z{-0$zf8^4Yt5-Jia5EVIoVj{+0jQat)6Xo} z5UtyH`s@Xe511}J0OhtTc?=w^d>Ub%T)Y}l7D2AODiNVB;l?^K;AZ-p^@nDkzH-Ws zQ-htM*O=WlQBd0W2=lqy7eU$O+SLoEH!E_mv+`+%d2sV+L|X>9^NB=+Sx1^`MuS`F zZ}xASfAY#wRdrnsxkLuO6eBM8@H0%O@18lfYu&=WidYv1M@|lQHh#@8H%?ylXiI-D z0oJfEqZmugXi!7>*|miW4qt5Mbu$piHe~RLV-N{#SwF9{z)z2ziQzFL8<(juCkGq5 zkVd#GJFiBxrJuJTmtTZIjICi5Nc)pl%}e*3$>DcU=d}}M@RVieQZmrsVqjnfwMdyb zp9))wadWY;^Js*-u<>d{nR)vO@VG`Agt@qcfV3a`Q@vu-`4(XY1`d5*DRXs?AW$>i zl7WGP6Er5sW^cy9$;HOXsUGgg#-$Nu>Jh-lZ5?aq84>9VYG@yy(c9G5J$p&@yvs<< z^sSA?3=EuH93~NroE)5NtQ_hQ4s6^SQAVzTyj(hQM%p2v#vt8aE|twcun)DF-sNv1 z9;C*_$;rjZ%B~UVVkWB^sqY%f%_-@j#3v!ahZs%Y4;xJfIhBi(omJV#&qF~>S45DX zi<6U;lZ%_12i{D7`PdHRA1*F#Zb30_7SK`yPA*PRGyE?%7dND(4%%>pKBCUW!_CCQ z$o-R-gB8>nVButBXXO0L#mNh8so#Q)r{B>AS;))7#QTSjn~jZ$<0q(Bz|PLb%=w=i zqov-?!^y?T&CJWl_m`K8or!~yor&!yD;ozVCl`+j!(Z0szo3nF|9Fprx56oW1X2I3 zCI721{I>;>|MdQWg#O8Y0aN_v!4$_LFvVO2qW&@_{}Ko7po{zgGV3o><{$C@atuG1 z+!jsMWo2)X0C5~X{Qv)=xAp;u^RMa`s68S1Uyk8l_*Xd)C3HsazdXY~i`TLs%IL8y zNRVYWSkCYRnDYOEO!+~0)*t2mvoQP=Qa3g+QRNe2_~-aZ?mrX5H@4V4kAMFD`CzlZ z0K;FY#lPkLGcx>T&iu&s|L^+>4qk@80w@2-|7T?QCvlhK|G#f(ybS*m|0?`vWcY8* z_5a^1Lmq~IF@M1PDCYlvUT?bcm-+v{O`O~ee|dNO0BQW6#QguyCI-o6%>Vzrb>d<8 zEgac(>aPsQghb~5zn3yFC|_j$|F4~unc*`dGb<;rprl#k^bL3aftC0%|NnK8fq}95 z7t{aGNBKDA^!*cSyO!_0_D%`pD5HN&|9`!dXJD}U$n^i`*PSPCJ^uVl10*B%gz5jU zpJj3u6<>`&e2zuT|NlO}_RR$3KaPsuR{#GnFjoDr{{NRj;f2lrzYI2?K&0|}5Xo`N z2IRhVV6qHE{xkVw4KhaPGMHkY1)}~krvA42&&2T0<|UYtzX_&zPFekDX86AgME;xh z&+7nBsj2rkJ!tk5F?cvXV%>RE@>Im?1Gc&O={9=_f&EE4>?msKTZzfK`6`=JC znT)&)e;Aok{>lF5VEESt5~^h6WBA8?Rt_Z42od0A_{&uEL+=02=PzHpd8wXB$3_4GOS)AeTv*$0EUb4LU zwp~F+RzXowUQvNb>5rz*w(m^;|NWjP#_;$V_*lA^uU@~p?k6rKub?2WsGy{(qO57` zw(}3u|Nno*7?_?hzF-6$40XR;URp**Qc_M+UCb1 z#Bl%NlV{KGEDn;DlN1#Zlai5V(|-N4Jt{{LQ&rDtTI>o6M>1^?3c7=Cebaq)0+ zGVweCtrFwrxa|9Kf0+5dB}aK7Q@2Te9{@e7HFib+Vw$SJ64sxm46 z(9+gX*NMCRkNH0j!y9%sc1|uXK0#hyZcvRQBqAv)&Lr_cN=89hQ9(gbMN>~p&9LA# z^Z);1JPeGyjDjCTTXMxjh4?|0BcF)4m;{sf2Qdk0d081bIdwg4buEM1H%$K-|8X%~ zKe>ljTtfBs1dwtbZZ2*TI<-d}xeDk&27 zB41QoScsdGlUIO=|CNY@l!UB;tc;9;oPwq*=u`@2h528Z|8p{2-TN|LjBUbWM@eyE zelAWfZeD%?K0#3#DLH9rSw%%K2GC1q75Rkc}PnLz3nzN->t*mY4rT1-@kmy4U5 zS6E0uP+CzzR$4|vNlimbO;tlhQ(sM9rTz;@{k5i#ed40mwll~`Nq{Ez_(UYcgoVWv z<)tOWMHMvlwRF@qR7?}iSu>u2obx#Q-8^ykCllGkC8Y)VxOoLcM8z0a)QHK-OG=B& zGwFOcP}B6DvA!krKJ)+oe>fSgr#xIQoBJw3P+U@4fSZS3NK#Zd`qh13P{NawQ`I)q z&`epeb?eGGKR{t~J?Z>GovtS)qLNaeAprql2~ow>e}1pkmXlXgQB>B}QZ8MyZQIt( z{ZB!vFDLA}V6otuteAw91V102fS`z2;G6&dKjz4*Yp5!!D48~I*tUK9wrvZxfEI{y zF}#gi@W5mHK`9Y&St(vVK0$s#hBeIpzufdtQjk^Dv+3BfV;j@SNr%4@hx+p=xj_HE4D|IOJ43YM?oB_DEccL@rM zNeD9W{pJ;t+Vz*^|J!#3N-Eydw{8ci1vzEYq#vL#e;1PSs{cuekeGzH0BE3xKk6CV z|KEp21LtpJ+5Tf2Ncq<3cbWflFud~%da&b3ikO776hAKyFR#Qpa52O5|M!o16`QuQ zY-a>JdCAVdO#e9;UV2(yd2&BkLP}PGkDH%|CG*q&|9}26{A2q6_g&sH)@{t&e{b8q zq4N`Hxf?sf2S@RvzpvU#$tg(k@d@xS>|p-?H=W@-)Bj(8Hx_K(vYBZM(>BKKjNATA z-pTx*o#BHG>xN$^)TCskMR|Gnc(|`JfhwbIO#k0~Dxb7v^X4reylwl|Z5zu!GyVUs z%Es`)f^FKjom^t_k|KOud_tbDnEtbXjuO3{yo_lx^A^T!zqf4NI{gR}$Z%8M!cR-M zrR61rd3gi{i#|e>{`s@7U_H}jmMx5%|7=}5{|D25Himb`0#P4Vv&+ef^YifuiBA3b z|352eB9`g@@2~w$n>RCU`3`Z*rb*A4{{Mf?%J9}ip!Vxw8Ce-&K0W~<>9zm<{|{ng zVE+I6L*1;+Act)Jy=C*}+514j!piW`f^+8gtG43eg8Y2Ef<~vA{{Q!22OTE)q<9&~ zi=aapw`|!2Ix~oc;iE0f`d?3@#Knbpc=-g~UxH$R`Ty^KXLD9=VcE>IT*F{QuX#X9vp`ZDQX14-_%~Cf;QG|D7Ss>(25^JEeq~dH*qh{F=+b z!1Vv;?|l;&t=Y5*WazSaKUx2OWQd7=+P3YMJZRLA%lH$>Vy6G!KlV8l z$?nl!22O5XUWP58N|%-4-+_-z|9^a6ShH^9#!Z`8H#2VewX`cgW!n$t{~rqrmS44C zIB`#tlZ%&^vjY-2pk>TIf3Iy`w`ubxj?KTeY?xp*{}apq4-94dj_WbZc%99|!^_K) z_!p9Ve*D>5y=LR4&6`*^f8Vru%a%Cq<^SJD zovWEPFm7bp#Jc&<>gK~gSwV`6UQOoX6|9?S@EdT#LowA&H!>5g) zP}#J3)8o;uNuyF(P#y`uu z_WWY`|DTzS;lqR{?(A&r(o2>x@No0+x;HpV%57RWV7OvZ{Vf}ih4Zk*SSkb!k2kU=MhJTza zOl&XNd3d-%3psds62Jfd|NE35pSW1$gf&d-88`f1zh=TbkjXw=47d4sxHvgLOFnqH zd3i)6ocG^2HQ8EJTtZx;V8y!i8`f`F*m&j}sJX|(@QRn4hnI(&ho6_1hnGiGfKNh3 zNoY2A_5G5A3uG<^pyG8&zn1X zCPQ1Qzd?)c!8;F_o_#xLV-kYYR(%564E_G;vu97{X{hU|nuZj2EZ7Zisy=3X`W>`= z`03LdnaWHm-!xRUH1(`PCxi0Ve`axpUyneGOP{bjeZNIjQAt%zO+`&rQ&Y<*2+>%5 z1YY|JGUSqFKK{x5|_i6cuIVl$BI8v<-9( zOfB7@ZPka2pw*mDpWN%$R#udilay6ZQqj=V)-yCQwGD^2Rqs7~{N(YI$G1Av zQIwYjwOv$HHFS0K42=w}w}QPW$Z&6EdzgrfjJTw@q_{Y!sV%3hqM)v-sG_Q&scmd* zU>Xi?tNziFl#*f+dm;kb*T5$rB`Yhhq@=8>Ag`dIXJ}+x7bd1X~K zbsa4oV@pdjGq)X}diXCN!xzwWAP=aSB`Czl#Ql;_P()lxMov{zO;cY>SI5BE*vQ27 z9JsOi7ql0F>miQ-KWHjNNL*416r9Q`+J?H?+FC}&CiSl`I99@bc0Hb+cWR(V?mNI59?2#AVH$;rroVjtXf(lyZ2GcYji0ykE# zt>0-VEA6>2PC{B-golfZPe@o;L{e5>R!LP!K~Ys%)j(HEPgh4v1KL=fy*E%wq+++F ztcV(r6{kgprEX-re$cXucxK0tF5aCZLGE&N|WH4xmHp^T2hRkn}>&A zOiV;nK@DWMoR*$}k)E!Bj-i>ZswT9tntilXN^1Qy0R?#(2|;c?L2+p*F)?X16$M#o zNi{=rBNKfCJv~Ed?u@6PR@wE)!%fn*yUT@TClEML|$U(?JtFwk!@q_G;b zYOY4%Ze2+^d08<*ArWyINtM-qey`P6R@K!~(=awtwe$-L3<`(=H&!19%v^2Qyg>#O zctV0gBBByfL7>KJu8O{%wi=V>Ut9k`rl6mJuIr$URlnvPHq+)yNysRHR_=)ki?V_n zt6rL_O6sQC_5p!`OhJDF17abKRqwom9xK|##ibRb1cd~IgauvryNm6cbL733G;=g5LLRsXz8^$y?+`V;7%{t;B^ zvon0K5Lk-Q4RQOj?EC3R*@6u=M@t3dI@Pbyua<~69_s-HYf-j z8Uc_-s=jdikq%J>6W{BCm5~t>77`RShBs3GK8f>X3iuWn5CA$M*FXIm^M4kGk0yK* zPwn!NmKGBb6cTlR0SbRmBlVn{Zy-wmBPjIT4#HZgR$}vZ9g35d5)%**5kW1bTfiUh zl-fiD`R!r>Q#M`?VczO5)!41^=`ELIHOaaXP%mII0`#`NoQ2W#=h!@m8RaD{T z<>MFRD*g;amvNY#P*VdSAd^Ske^>r2+}z9VPIoXck*Qo z_~Yv~31p@Z7sF3}(0~v(FOwi6|9d_OS(kk`PEE342Cb1d^8>|(zi;v>Sj&`;hnJ6+ zhfhdQP(XkW+%gs6Vq;@r|Do&W@9z~q2iz`w&&A2ZCm;YC;Sv?(U}a@vWnyDx|G_3@ z>*2Hf{vTMgl=~~M06#yUfRG3~D=QZ}BinBQr)ke%t(K5YyZtK8m`iDO5s1UP?+_N>WN(T24VxO)W|#n z+%mnZDJ3NXYP*6q>+%c9Dkvzas;X%yD=BLk7@L?|n%NgXTBgDxV&X!=0(|@;!b1Ff zV$!m5Oo|^>l$6ypjZ91|Y^=;Z;Vsi&;1O9KCVobtXM+5oVMYl_Iawt&4NWaQ9X(TP zYYPhxc*_*jas+pLgoFi{cwY(#i%Lk#E2?X2>KN+i>lvGxnwYskhEe}=adNZpJmeD+ z5iK-*9nqgWMn>APCy)%PS_KAS=(L@IgsM zT}Km?8jQ_N46NWyQ(ggKaWM&NBPkgPQ664CejzD2IRz&953=&g>Z&SgYK9i3h9*|^ zuOZ{8e*^txnB?z<+ephuiVE=Y@(PJbNGpOy{ACqXRFqVd4U7yxjde)V^g~dnih_bp zgprJ#v;;p7j{uX%OHmmGB?VOtRb>?oH4P(uT?2hR9W7|n)GJg^R@OdDO;KJ-l$VE> zPe4ReSX@>`NljTPLQG6q z6J)r8j)9ShfxeNRv4y^dHneGK7HKIb7vv?YtRycb%*!t%DK9G_E~lxktRN?&X>4g? zW@u!ft1Qe5ZJKID+eoX1+RMl*D2og735iO{%JQtJR!~(}RFYFSH8ry`Fw|64Qw+NY z9Y@s)caky)*Orx6R2CBu6p>VrkpeYM)zp=B)YNoMtqrx+L5JH;05?tVX$5-9nn%dU zDk>?63ki!!%FC#&`ty6Op_+z)j;6M$iJB6N>OWs_!}PAUr@w-2hy*C;M1+JzMI~i} zUjP69AxFc|P*+n&TUAM2ok{JdDtO%N9~Z+{ZTm1q7as{}c~wOw;oo8+;+(5Nqo`im z8md|rno8HFeOTy)0_~ z_b~tGWO%Eo7o!(uCMqc_FD4`;C@3bk^DoQ)AMXk^bv0GhRGHKm!Dk8ALRzI7+7Z@K zdXh5oa-stK0zx97R_X7yl?80<9~I@zkRenhS^tm_4Fx4tc_9H2LGG-Nup!jn?^4uMRXNrED#ydx zr3%8{;r_~sY8nbcLZSi;+hGH!fBtUNQ)f~A4swN>s;c-_aMM&)*g3*SNl8^%Mo>UV zkoO8`%;`U9{Pbg?qN=Kjs;Y_#C^%HrqhO6wSrOYXPboQd1t~#3VR27rEsCP)Dj=YSRprEi2tXcZ^-+oP2HD=Yn z8uiddsj7^>e}t91tf+{HFaxNq{D%WFc)G`1MU`2NQT4Z)s+teDRjR2L>=NK1B_YTp zgw!hi^=o&6nhH1#si>-`s!ayBOSQGa&0Ipo#RT~Ic@YDs&Gssw;Tu(EP!Oo8%PhU~ z=nwP%Pdd8M8rIQDB0M~N{0zt=sM0E`s%olg>P%|iRn*ip#M$D`fyPj^^rICF!mWjQ zcmzZkE+e%}L1zZ3sj{juss2_|*8n$6wap`BWJ0`zK@ALs&B%kO-{wn$QiUq38l(Cz z4JFYCNXt~mDNu^bFI1A3mr3A%8z|wkf-mIy`+K!MliGh(c5s*|vCadJqUw5iNpjkS z83^$43kbrRroVn~l2cVtWmo&J%B=QBB@os&)eCf%;8TgV=Hn3*5=OL5PnoN#Fsc4m zV^U>S`>C#~F4KDtGK#7jY9}fz9O5p*!!IC&+(3;`V^U#JWmWs5?sfpuJk^b|5E2x2 z43*~L7ZB7x0v|&ylw(%;1d0}LK&nY6z?-Lr(Z>7&LVD2}JWK+=Bo{))Q2#wEW>NX4 zs=})JOGQn$?-_jf)GS<=mxo6&*p*8_fL{pQGJR35qRgzqrpl=DH)_{U$jIqmhj2M2 z&Tsrqo*bZt8mM9V_kONC2k01gHPxO6&{0zjEpAQ@P99OvG>U)_52#i8<=?|pUeMSb zC{r`3{8rWUgf>k1xR^Lza`6ia2nY!Z2#J6jrYF4_7#Jm#l$lh1s;a0eY4k(ermqG0 zd3m^bK}UKB2=GhFx$L`sa*`P{!xu(HH5CgEWn`p|L@ln zWyFc{yS&D&7k%F-z`Zl5cM?#nYtmv#i05B z-)mQHkkUUDEZiXO91bw`Ql1-hxX#B9BLDw4fS7-$m;Dz0|L+zb7lY9M-_MM==lvD> z|LSu!#FuND6P?~Ngd|9=KE!#|nZ!vFuZ zGIB5o{Qq}Pk(uEyliM?)|Nmaef<+c`urT~(p7T%e|G&SL91Q&b|NbpuW@Y%NbX(~E zztaNj4E+E9efDKz_{$jmQ}F-4x6WXZM>^~be|cv95&ZwJkBtqa<}@z{!$0v8g8%>B z6$cA!V&Y`@r+Z)U|NkmB2EPCQ{+4nv{AKieBk=#<6>e6L$Payxi1qv+rxs|9}1-^peGUZ5k&R zXoCzJcwaj^1LOa{{|@~CDF+WCtYKhhW9Q^#;(7;K6v55K&Be{h!NmdE^v%x1`Jamo zH0$^6u8qELSuds4)wbQlHk>+D&VFd*u$Z6j= zIXF2uc|{eB99Y0!-1ZH$yPfI(yALtWE{+CvPA-m?T0#sAOw6oIY+u+}S-Hhk^h|7= zU0sG!Fx zO#lBIa5Av`|M~Aph?cRPGqVe$E29gu>kk)KXD1g|Cue4t|ISPf*xc`U$MX(b>h>#o5^fr0Fu#|9|(cf)1JHWMKaP z^QyI>oxPnSlk;B}XJ-zVZ?4Xc&Mr<4F3wIY&Y(q?|2BOAtz=;S|6?Z~NTIV6n=_*e zqtiQQ7Z+D&2NxG-dlzRXCubLDC(r`Xe}7hhyvzLm*I8COdpjp)=RZ!)&Mr*OA6=Y4 z3>TOVkm*eS|GnG~YEN*1TylrO#@4~fiPQO$le3eflaq_Rvx~F6vlFZH-P681|NjoJ|G@PBzaJ>+|N81`YH#nr<;djp&DqJx z(c0G0(bkd4=|4!|&GVrD|KDdbEcgwY0ta2L`RQk+mc5;WgQFuDvpRlpa&&O8HL%h5}@&C_1ONH(29UNI5*c`t&I6Bztnb|wo*@C?D#nIu@ zs-XY>KV&o1g2Vlj^#A|=PAb^gJ32ZzIyi7RJ_T81DynF1ZR6CtEpDR(5j-2apY*X#M;B^Iy;b56u7ntd_HL;Bx%y;ONBU z%;@yX(MVl_Pmjrw5fnZQ9RER?_0LUN3kP;bCI?2x|4uBdCmSm}8#@Ol7Z*nPyqbZ7jf0De ziTfRB9*_sLTZs!&fUOH9{6c7D^MmD<&Mvk();dz4 zvKe$T2s@}42iIV{q6&ugsAcp04>3;84*Ir^&JGsPvKbVHY;4@(D!RtjPA)Fk%4T;b zdo3$_7bfRdPL3AZk~~~I!ZPY+){dZJ#l;z{2fb`IS2K5T0+p-I-&~w+ENmQ{U0fWP zo&UQqIsbRTQZ@%`8re88gUUi@W|tq%E>4clE{@Rh2v^x`Vr%c@?8FQ%Ygt`>fVDU{ zIkPzZcV=Svk5Muk*xK1TFgg8o2BrP~PR!2VT$~)7oE`0*og7)5Af@wXSn13IQtaf& z=EUgC==cs));ifcJ3HAqJ2^Unibqg3{`Y%1v~)hhVrysX$n5mT(aFh~$?2mrC}^CW zVLCvjqnFOsphAcfR6001I66ApIXOGoIXSXA{e7AaE}cPj%0Ezf`|~k_xvf2@OkoBU z3Qk`foj^Kl9G#qO9od}zK7EW@I;)u3+1WFJ$^xf9jt-92OpfntLC$e>a&mkLDsTTC zUWX{1zqpv#+1YbBFgbn$6@ON?4h}XBOpgCS0#ELPO6M$;(z!y@&eq=E!2yg}9lkg^ z*xTEJCgANH9he=zI$YR?UOF!kw6n8!V6|s+_+sy1Z>MW&XK!l*^3E3r``1`XXL)No z2M2oxdwULtryz?=L=?=dtQ70Qmoz?8^nH)fhnH`wynH@hlINHdGva*4yG)D&qP_&|y&bIbk4u9=Ig&?Ej zF9$<)ab7)eLF@q9l?W}J&F$G8nCuxH{yVZbeQ~tZ&{R@%07a1lqI9;@wYO(?V76y+ zWODlAU}2=GEoBY%61;T&4lbR=?df3EE5qDxU4Z(aG%e!_nNr%vui=ogxg3FaAJO{P~b8?a1xK5N={xrCf@gapmjn#yxi>UoS^+7JUoyR`rvnva&QZJ6$5Ck5DydY zC(uG5K3+c1%3{#2SkC`kOg#U2LFMhwZztd_=;!~YGO%%Qa)DQq@$&QY@q*@kKu6jz zbN%7w;pYcw`1R@%tO5P<+e#sJ4o=X~HUfNnJfJ2p9}hPV7c=K?ZXRACUT^_@5vl$B z<=0GObs=_6E^a;n9wyG;pbabBOk7Nyzqq)0`2_eOW%T;rkb3*`a~FFDYdJ1wvkqxwv?E1cZbHgkh!hDM$y62DD)Xw7uoGfSA0# zEu@s*`W4cGzW*W0-rh#n+Sb9=Ohbr~iG>x^0pMb1=Mh)dHngy}cfe9gA9b^{)iAel zV7C8cXQnO5%f%xst!83jZx6}{|3NyyW%N@}k;U@==l6aa6E!niR#2|BGPAO?cd)l{ zaI|N2fE3Q4z7eG1{Po|HAaw&PP>Qx^a(L}%4{AI)+1uJX*gDwT**iEm+S|iQ=mUt> z^N-&T*9I9{+SoBU{I++ncW`8LV6^*U?_g`^U zgSmyZt*sqcA*X6AUzL2h4%4#kVfOL*UH9LR@O{5?6%By&q3#6+u7P$LM*kj zef$vAq&~D3snB*dw6e11vSG6QZ^vZ&%goZo#sb8#VY2=9_#UXx&SaR6)TFLZv$C|d zwy^6!Un*r3MULs&^Wo^T1&1Un(+Q!;S z+tA9|(gNhAFE-XMp@nu0qDg&1-U4L2jkPt0&3|hqo0oVYG%7+Ue&Yq4WDov5K`dlMP5Qvkj9qv+XAv zTT59{RyI>BunnLn{`>tCtVz8}*3z2G=C8F4IIw@&7^sQ!=`h(a+WxnJ7uq*ujjh>j zn5-FX{@b$HeX%uH(@;{d0Y#GyqR_U`vbJWoVYX%hN1~a5hL)5C)WUzDb71)yet`<@ zW-%sfPMg2hwzkZ6Uu-Q*^z`KPY(YMUmf71FEUbBK{@XI!eYdr-FfcGtwYFih6=C>w z=E>tn;6nSJqK-8$sdS{KOb_WY`N{2KzZ5mx0$7_ktLHo zg98V{zaH2&pMM%x%0r4wL|Ns4R;AQy7{|+qR@|NlU zzXz(k4F9CREBptI_B4PD*(J!!@Q>{zNaUZuX(rGZA!s{M#6S7}Yz+S_|1kak_tBb< z;UCK;kdpsPnE(Gf!_3FpZQ<`+63n^Z$SU3i%lRNj?Jcf65&G`}g}qUVeuEGeO?}&F2@c%_6|? zKT!F<6vID-FG?Va_b8ZRo1*kzl;ImYHzNZBWAxWQ|K$IF;^gKA?e*aW&Fe~tvrGIC zmk?vHo^k6R+yDQJf(*a7IJx=x_?US9iHdVbFpB?@kTjk7;3w<cd<6vkG>b-+TPChs} z8dj`dw{F$c8EcmGOxW;@_5c5Wd<-nkj7~qy)vXf|rq5rnX6?FFE9b9VyJqdo=3Vbt|Njr>V)y_W zAp#A!*r+LJ+1lAVGC99?vT<#nK5fm~wX0UHS+`=%+EsJ9F8^iu&&BW?)E5DbwKzH$ zsjKK1nmIZ%Ill3p);)dZssxVfoL=@ZX8Wk~(9`uIf7V2Q=mS6Rgnzd`zu3NWu?ds)| z=d4|~ZcYE8zs&zx8UBDYFgyNra)fqb7#)7tTV^krG-LHj=CzFL7}tJXv%G8JqP1(+ zbX@_@IsPhk04>{NbYyb+ z<%JP|O)`1a;#{kYQ{LVj}3~Uy-O`p%S z=J)C;%NH(TS@U)6j8*d&%nSYS^T-d-!KfmxA6*P0-Zw?hTfT1Xx@G-qXRxmOxpd*0 zDQl81vHbt{kKr?@9WMYn7N4J;jg6E2CmRcc#q?XCe8nip@Rgg3M}Qx6dL}0u2Rjqn zZ(hS0_hDt$KOSBt{$Bz@ni`;i=pSsXtXvU@GK=>IA1{}jnWKXeXoc4wHde3euriC6 zk5|;#fyw!gl@J>nEBhZduDOshi$_w|j@9|U0qFeIzpQ+SA`3M5`P)gGm6eT|{SUK7 z&I@pv<@^;CpU%#X1`?npZNHh+TzcVUmJ5^f2haenorx+x6Eh>bt$h!?%yM}JN;=LU z!qLIrN?%?`%g(z6US>J}gA9u@Lwfl3N>0u$u?G-kmJ_4%A17j)Y^b@E%@1Wx2 z*!$5UTpRb>+4g^Yv%;WAy#z=iu$)qo`uF3R+${I5-M8 zJ#us~G;;Cu^Y!&|^>K&z&DYn%$JyIK!odzwUO6~A3OYSgVR;>E-G2;pbs+aV6^V(IDb|qqesnXx*%HfO`P5|BnD) zuK+iHbx3*jm4}ayUr<;?P(Xl%kKvCwyr}vHUV92UL5z)u;Wr0TIrWW~Ul25Huc^Vr z#qgUAsf^JvwE$HBAuPe^Z$i(oQQCy`9 zUP3uAIeu`kx3jZ0Qs!k~U}RI5>3RokRk1m|0S)KbIoR9TTAS(03dyKxHNwg#a6)$Y zZ_RASWd8|dfUT{Kw3519=>AWzW)-8uPf!ot(!!R-j?v*0sLyO823i7RTm&tl?0?wV zJJ?z1TiY_*y|uRksW1~$RZ&$|SJ$b&2rHvLLS(GX;=NT2Y2y)7^_;?*xA|IGuwT$)sa_GR#8z_Q)N>5t?M)U4YXH8fE6n- zDl@D8(apICDW>c|y+J11cQ)4gYD$`VCN>}eNmW%1RVI}$N(#!VAfwfdX1xYCt!!Cr z7_FIX-dPwLfW}2^ZETelz{{0Xn3TVPR-&q?sLB+8PRIZ?t-e`U#oGOo2P#HrDJmKdeE{vN4ckQhuwVtOgDaMP*f0 zWn~p*o1?H|3as4P8q`m*#%lsfz&hG z{I#{QW&(Hd8LhurS;(mavFxmdHv$eAY4M_aAVYdBZZK0r|1oEq@nkt*hcV#s-6?GN$ zoEPAxm9-5UcpT*|D1Cr*S*xfjDXA(ctEsB7s(b~RuBIj*!QfR20?KR!k}ax2$Y!h3wwg>I*8XsHrJ~ zJPukU1abni%1>pv-cM^FC6z6c-G5sSyZ`pAcJFNUtmkW}swgWdf!wI7tfT}=9cn77 zN_MdFio@Z*Be%mZ-SGE~QX0%^zctm>)zq2QeyFRdtE+0UUjR3;*oFKAuRpMRUI8F@epe4ga8fmZhX{awoqS_Sm?*F=6!2JQcU z|4iiIV9@#h_ir~BJA>~3zu&6a*ckNw|N9of#-RWI-%}@62L1nk|DBL$VKDsvZ!Q}% zi29Mv%wY8Y-yIz$2BZJK|IO!QU@-pw=chgcgUSEDwhRms|Ns9J{r~?j)1QBLq!<|( z7#M6A7#IRT34Jdm70|NsHgA_3*rGrG7Km-E=0~-Sa0}BHK!+!<_21O9t zz5y)50b(;SFo3jhLfIe*B_y^C5}ON&t$@VlMq=|Iv3Zf${0s~XAp1b(gD^W(4rIP6 zlnoMB0kQx8{||DjG7?(^#D@9>qz;N_u7EN?6v+D^4Du@j1H;TKAVCI(S$m-L2?z}) zLFz!5fq`L`4p@X?7AR;zd><%321@5Z=^7~A1EuFc=`|3VfuUXi1^>t3b1*Q}BQT~s jx_*ROkiP#&da?6a7#Qji7!-z}qyoYqCxVg+2r~cx)zuf{ diff --git a/other/remaps-potatobook-g.toml b/other/remaps-potatobook-g.toml deleted file mode 100644 index a026f94..0000000 --- a/other/remaps-potatobook-g.toml +++ /dev/null @@ -1,18 +0,0 @@ -device_name = "Apple Inc. Apple Internal Keyboard / Trackpad" - -[[remap]] -input = [ "KEY_RIGHTMETA" ] -output = [ "KEY_SPACE" ] - -[[remap]] -input = [ "KEY_Y" ] -output = [ "KEY_Z" ] - -[[remap]] -input = [ "KEY_Z" ] -output = [ "KEY_Y" ] - -[[dual_role]] -input = "KEY_CAPSLOCK" -hold = ["KEY_LEFTCTRL"] -tap = ["KEY_ESC"] diff --git a/other/rofi-themes/applauncher.rasi b/other/rofi-themes/applauncher.rasi deleted file mode 100644 index f099de8..0000000 --- a/other/rofi-themes/applauncher.rasi +++ /dev/null @@ -1,79 +0,0 @@ -* { - background-color: #282828; - text-color: #ebdbb2; -} - - -window { - width: 1024px; - background-color: #1d2021; - border-radius: 12px; -} - -mainbox { - spacing: 0px; - children: [inputbar,listview]; -} - -element { - background: #1d2021; - children: [ element-icon, element-text ]; -} -element,element-text,element-icon, button { - cursor: pointer; -} - -inputbar { - margin: 0px 0px 0.5em 0em; - spacing: 0.4em; - background-color: #1d2021; - children: [entry,overlay]; -} - -listview, inputbar, message { - columns: 5; - lines: 3; -} - -listview { - padding: 20px; - border-radius: inherit; -} - - -element { - border: 0; - padding: 10px; - font: "Atkinson Hyperlegible 8"; - orientation: vertical; - border-radius: 10px; -} - -element-icon { - padding: 1.5em 1.5em 0.5em; - size: 4.5em; -} - -element selected { - background-color: #1d2021; -} - -element-text { - padding: 0 0 7px 0; -} - -element-text selected, element-icon selected { - background-color: #1d2021; -} - -element-text, element-icon { - font-size: 2em; - font: "Atkinson Hyperlegible"; - horizontal-align: 0.5; -} - -entry { - padding: 15px; - background-color: #1d2021; -} - diff --git a/other/scripts/desktop/desktopctl.nix b/other/scripts/desktop/desktopctl.nix deleted file mode 100644 index 117f6ea..0000000 --- a/other/scripts/desktop/desktopctl.nix +++ /dev/null @@ -1,35 +0,0 @@ -{pkgs, ...}: -pkgs.writeShellScriptBin "desktopctl" '' - case $@ in - "Lock Screen") - loginctl lock-session - exit 0 - ;; - "Log Out") - pkill xmonad - exit 0 - ;; - "Shut Down") - shutdown now - exit 0 - ;; - "Reboot") - systemctl reboot - exit 0 - ;; - esac - - # resizes grid - echo -en "\0theme\x1flistview,inputbar,message{columns:4;lines:1;}\n" - # resizes window, moves it to top of screen, adjusts rounded corners - echo -en "\0theme\x1fwindow{width:800px;location:north;y-offset:24px;border-radius:0 0 12px 12px;}\n" - # swaps grid and input bar - echo -en "\0theme\x1fmainbox{children:[listview,inputbar];}\n" - # fixes brown line below input bar - echo -en "\0theme\x1finputbar{margin:0;}\n" - - echo -en "Lock Screen\0icon\x1f${../../../other/assets/desktopctl/lock-screen.svg}\n" - echo -en "Log Out\0icon\x1f${../../../other/assets/desktopctl/logout.svg}\n" - echo -en "Shut Down\0icon\x1f${../../../other/assets/desktopctl/shutdown.svg}\n" - echo -en "Reboot\0icon\x1f${../../../other/assets/desktopctl/reboot.svg}\n" -'' diff --git a/other/scripts/desktop/macros/play-loop.sh b/other/scripts/desktop/macros/play-loop.sh deleted file mode 100644 index a38f47e..0000000 --- a/other/scripts/desktop/macros/play-loop.sh +++ /dev/null @@ -1,9 +0,0 @@ -mkdir -p $HOME/xmacros - -register=$(ls $HOME/xmacros | rofi -dmenu) -count=$(echo "2;5;10;20;50;100" | rofi -dmenu -sep ";" -l 5) - -for i in $(seq $count); do - echo $i - xmacroplay "$DISPLAY" < $HOME/xmacros/$register -done diff --git a/other/scripts/desktop/macros/play.sh b/other/scripts/desktop/macros/play.sh deleted file mode 100644 index 60587fd..0000000 --- a/other/scripts/desktop/macros/play.sh +++ /dev/null @@ -1,5 +0,0 @@ -mkdir -p $HOME/xmacros - -register=$(ls $HOME/xmacros | rofi -dmenu) - -xmacroplay "$DISPLAY" < $HOME/xmacros/$register diff --git a/other/scripts/desktop/macros/record.sh b/other/scripts/desktop/macros/record.sh deleted file mode 100644 index f08ce07..0000000 --- a/other/scripts/desktop/macros/record.sh +++ /dev/null @@ -1,5 +0,0 @@ -mkdir -p $HOME/xmacros - -register=$(ls $HOME/xmacros | rofi -dmenu) - -xmacrorec2 > $HOME/xmacros/$register diff --git a/other/scripts/desktop/menu-qalc.sh b/other/scripts/desktop/menu-qalc.sh deleted file mode 100644 index ae6c153..0000000 --- a/other/scripts/desktop/menu-qalc.sh +++ /dev/null @@ -1,87 +0,0 @@ -# Copy-pasted from https://raw.githubusercontent.com/BarbUk/menu-qalc/master/%3D -# I hope this is even legal but OH WELL - -# https://github.com/onespaceman/menu-calc -# Calculator for use with rofi/dmenu(2) -# Copying to the clipboard requires xclip - -usage() { - echo "$(tput bold)menu-calc$(tput sgr0)" - echo "A calculator for Rofi/dmenu(2)" - echo - echo "$(tput bold)Usage:$(tput sgr0)" - echo " = 4+2" - echo " = (4+2)/(4+3)" - echo " = 4^2" - echo " = sqrt(4)" - echo " = c(2)" - echo - echo "$(tput bold)Force Rofi/dmenu(2):$(tput sgr0)" - echo "By default, if rofi exists, it will be used. To force menu-calc to" - echo "use one or the other, use the --dmenu argument" - echo - echo " = --dmenu=" - echo - echo "$(tput bold)Passing arguments to Rofi/dmenu(2):$(tput sgr0)" - echo "Any parameters after ' -- ' will be passed to Rofi/dmenu(2)." - echo - echo " = -- " - echo - echo "The answer can be copied to the clipboard and used for further calculations inside (or outside) Rofi/dmenu." - echo - echo "If launched outside of Rofi/dmenu the expression may need quotation marks." - exit -} - -# Process CLI parameters -for var in "$@" -do - case $var in - -h|--help) usage ;; - -d=*|--dmenu=*) - menu=$(echo $var | cut -d'=' -f 2); - ;; - --) break ;; - esac -done - -# Grab the answer -if [ -n "$1" ]; then - answer=$(echo "$1" | qalc +u8 -color=never -terse | awk '!/^>/ && !/^$/ {gsub(/^[ \t]+|[ \t]+$/, "", $0); print}') -fi - -# Path to menu application -if [ -z "${menu+1}" ]; then - if [[ -n $(command -v rofi) ]]; then - menu="$(command -v rofi)" - elif [[ -n $(command -v dmenu) ]]; then - menu=$(command -v dmenu) - else - >&2 echo "Rofi or dmenu not found" - exit - fi -fi - -# If using rofi, add the necessary parameters -if [[ $menu == "rofi" || $menu == $(command -v rofi) ]]; then - menu="$menu -dmenu -lines 3" -elif [[ $menu == "dmenu" || $menu == $(command -v dmenu) ]]; then - menu="$menu ""$DMENU_OPTIONS" -fi - -# Determine args to pass to dmenu/rofi -while [[ $# -gt 0 && $1 != "--" ]]; do - shift -done -[[ $1 == "--" ]] && shift - -action=$(echo -e "Copy to clipboard\nClear\nClose" | $menu "$@" -p "= $answer") - -case $action in - "Clear") $0 ;; - "Copy to clipboard") echo -n "$answer" | xclip -selection clipboard ;; - "Close") ;; - "") ;; - *) $0 "$answer $action" "--dmenu=$menu" "--" "$@" ;; -esac - diff --git a/other/scripts/desktop/ocr-screenshot.sh b/other/scripts/desktop/ocr-screenshot.sh deleted file mode 100755 index 6cf3da8..0000000 --- a/other/scripts/desktop/ocr-screenshot.sh +++ /dev/null @@ -1,27 +0,0 @@ -langs="eng deu spa osd" -langs=$(tesseract --list-langs | tail +2) -first_menu="$langs exit" -selection_menu1=$(echo $first_menu | rofi -sep " " -dmenu) - -tmp_img=`mktemp` -trap "rm $tmp_img*" EXIT - - -echo $selection_menu1 - -case $selection_menu1 in - "eng"|"deu"|"spa"|"osd"|"fra") - tesseract_lang=$selection_menu1 - flameshot gui -p $tmp_img.png -d 100 - mogrify -modulate 100,0 -resize 400% $tmp_img.png - ;; - "exit") - exit - ;; -esac - -tesseract $tmp_img.png $tmp_img -cat $tmp_img -xclip -i $tmp_img -selection clipboard -exit - diff --git a/other/scripts/desktop/window-screenshot.nu b/other/scripts/desktop/window-screenshot.nu deleted file mode 100755 index 89785b2..0000000 --- a/other/scripts/desktop/window-screenshot.nu +++ /dev/null @@ -1,19 +0,0 @@ -#!/usr/bin/env nu - -def main [ ] { - let reg = ( - xwininfo -id (xdotool getactivewindow) - | lines - | parse '{key}: {value}' - | str trim - | get value - | echo { - x: $in.1 - y: $in.2 - w: $in.5 - h: $in.6 - } - ); - - flameshot gui --region $"($reg.w)x($reg.h)+($reg.x)+($reg.y)" -c -p ~/Pictures/screenshots -} \ No newline at end of file diff --git a/other/scripts/desktop/window-screenshot.sh b/other/scripts/desktop/window-screenshot.sh deleted file mode 100644 index 5ff7359..0000000 --- a/other/scripts/desktop/window-screenshot.sh +++ /dev/null @@ -1,8 +0,0 @@ -unset x y w h -eval $(xwininfo -id $(xdotool getactivewindow) | - sed -n -e "s/^ \+Absolute upper-left X: \+\([0-9]\+\).*/x=\1/p" \ - -e "s/^ \+Absolute upper-left Y: \+\([0-9]\+\).*/y=\1/p" \ - -e "s/^ \+Width: \+\([0-9]\+\).*/w=\1/p" \ - -e "s/^ \+Height: \+\([0-9]\+\).*/h=\1/p" ) -echo -n "$x $y $w $h" -flameshot gui --region "${w}x${h}+${x}+${y}" -c -p ~/Pictures/screenshots/ From a6e6f38484826a8a391d1a1525e0b02dee196559 Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Fri, 14 Mar 2025 20:08:50 +0100 Subject: [PATCH 229/301] remove secret-data (i so hope i won't regret this) --- secret-data/mb-pass | Bin 28 -> 0 bytes secret-data/nextcloud-admin-pass | Bin 53 -> 0 bytes secret-data/penpot-smtp-pass | Bin 53 -> 0 bytes secret-data/ssh-desktop-knownhosts-thingies | Bin 860 -> 0 bytes secret-data/vaultwarden-admin-token | Bin 88 -> 0 bytes 5 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 secret-data/mb-pass delete mode 100644 secret-data/nextcloud-admin-pass delete mode 100644 secret-data/penpot-smtp-pass delete mode 100644 secret-data/ssh-desktop-knownhosts-thingies delete mode 100644 secret-data/vaultwarden-admin-token diff --git a/secret-data/mb-pass b/secret-data/mb-pass deleted file mode 100644 index 55d07c71a6148683e23154083976a28e334c6ea6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 28 jcmZQ@_Y83kiVO&05ZS7{*uU%fw6GW+C)xKlU7mXZfny3Z diff --git a/secret-data/nextcloud-admin-pass b/secret-data/nextcloud-admin-pass deleted file mode 100644 index 7ad3b0ea046969664c73f0a2f5fccecba17d9179..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 53 zcmZQ@_Y83kiVO&0C|@Tk&p5~K(a#!&*F0V;rUYi6bL#x}dCrV5xh}04%zK_4C_DFa KUDF~_Qw0Dy#21$U diff --git a/secret-data/penpot-smtp-pass b/secret-data/penpot-smtp-pass deleted file mode 100644 index 1d6512f92fb8656ec1b315f9df2b021aa16c23f7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 53 zcmZQ@_Y83kiVO&0n6bb7jCN%6gMWWi->fF(Urf#wOi$BoJFUQS K`K#0Vng#%naT*c; diff --git a/secret-data/ssh-desktop-knownhosts-thingies b/secret-data/ssh-desktop-knownhosts-thingies deleted file mode 100644 index 81ff117c6c0cdf6ab52241804374dc48147f52d0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 860 zcmZQ@_Y83kiVO&0czpWERQ_(EWP%}YHUsBv+NVYuk+oof63y%oH#H^Kj{ zb%AGRW(~WWUu>NAGY{?HdDj;fIxQDIvTSv-<4mW?2_IJJKhQYByRGW^+f9pC?cNb0 zWZe*8vG{{@hWY=Sr?{e+)x77McF(+eCV1-{wof~~4z_h1^q9xmQg5ojx@?b;uD$;a zZYL8jiRZz3t$hOGhwW4z^$c+UE8^!F>^7WXaDOMUF-Oid<-U?`ROAl+=IhECPiN<_%{rky z8wqk*2R8=st0 zOOJEC|IA?b0kLuh*4(-i%{xW6_iydum@b=DwxV_M$1kzRRyobs^wD+p5ysY3D>XCz z59(*^pK?oontk0`?||Lzo_qD2;)^q#GX4l0opffQP>u-e4F-Yyda>54e{@faiRbm} z9Gd7Pw^-m+w236g#)8ZHqj-eRk4^&cdI)-BaqJ_d|OBKjvu_C;$NS#+okx diff --git a/secret-data/vaultwarden-admin-token b/secret-data/vaultwarden-admin-token deleted file mode 100644 index 7e1a87b28f97f5cfc8de03f9484ce299fe488736..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 88 zcmZQ@_Y83kiVO&0aG&wL_N2Z{vr7BzO|2UjMOV#jJ2-Eh@6wN}UryCG_G0EKSaUYp u$o`Y*Wv!p4`5XJnD!M-L0PvwT2QciSD%i6WB~x%VJ5!- From cc53b33f8e2a114d96cd2ecb13cd929250b60be5 Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Tue, 18 Mar 2025 18:23:45 +0100 Subject: [PATCH 230/301] Switch to niri - Episode 3: The (second?) purge --- hosts/denkbrett/configuration.nix | 18 - hosts/denkbrett/modules/graphics.nix | 10 +- .../monosodium-glutamate-g/configuration.nix | 6 +- justfile | 2 +- modules/desktop-environment/default.nix | 8 +- modules/desktop-environment/home/browser.nix | 355 ++++++++++++++++ modules/desktop-environment/home/default.nix | 12 +- .../desktop-environment/home/niri/binds.nix | 3 +- .../home/notifications.nix | 3 + modules/desktop-environment/locale.nix | 13 + modules/desktop-environment/media/default.nix | 55 +++ modules/desktop-environment/media/fonts.nix | 48 +++ modules/desktop-environment/media/obs.nix | 33 ++ .../{home => media}/typst.nix | 0 modules/desktop-environment/printing.nix | 20 + modules/desktop/cloud.nix | 23 -- modules/desktop/creative.nix | 33 -- modules/desktop/default.nix | 54 +-- modules/desktop/firefox.nix | 380 ------------------ modules/desktop/fonts.nix | 33 -- modules/desktop/mail.nix | 77 ---- modules/desktop/networking.nix | 1 - modules/desktop/obs.nix | 23 -- modules/desktop/x.nix | 11 - 24 files changed, 551 insertions(+), 670 deletions(-) create mode 100644 modules/desktop-environment/home/browser.nix create mode 100644 modules/desktop-environment/locale.nix create mode 100644 modules/desktop-environment/media/default.nix create mode 100644 modules/desktop-environment/media/fonts.nix create mode 100644 modules/desktop-environment/media/obs.nix rename modules/desktop-environment/{home => media}/typst.nix (100%) create mode 100644 modules/desktop-environment/printing.nix delete mode 100644 modules/desktop/cloud.nix delete mode 100644 modules/desktop/creative.nix delete mode 100644 modules/desktop/firefox.nix delete mode 100644 modules/desktop/fonts.nix delete mode 100644 modules/desktop/mail.nix delete mode 100644 modules/desktop/obs.nix delete mode 100644 modules/desktop/x.nix diff --git a/hosts/denkbrett/configuration.nix b/hosts/denkbrett/configuration.nix index ae72336..c41ba1a 100644 --- a/hosts/denkbrett/configuration.nix +++ b/hosts/denkbrett/configuration.nix @@ -27,9 +27,7 @@ }; syncthing.enable = true; kdeconnect.enable = true; - cloud.enable = true; social.enable = true; - mail.enable = true; gaming.enable = true; }; }; @@ -41,10 +39,6 @@ systemd.services."ModemManager".wants = ["NetworkManager.service"]; systemd.services."ModemManager".wantedBy = ["multi-user.target"]; - environment.variables = { - VDPAU_DRIVER = lib.mkIf config.hardware.graphics.enable (lib.mkDefault "va_gl"); - }; - programs.wireshark.enable = true; boot.resumeDevice = "/dev/disk/by-uuid/4f9e8afa-f8d7-40bf-b3ea-17e8e8fbb694"; @@ -78,18 +72,6 @@ networking.networkmanager.enable = true; networking.hostName = "denkbrett"; - i18n.extraLocaleSettings = { - LC_ADDRESS = "de_DE.UTF-8"; - LC_IDENTIFICATION = "de_DE.UTF-8"; - LC_MEASUREMENT = "de_DE.UTF-8"; - LC_MONETARY = "de_DE.UTF-8"; - LC_NAME = "de_DE.UTF-8"; - LC_NUMERIC = "de_DE.UTF-8"; - LC_PAPER = "de_DE.UTF-8"; - LC_TELEPHONE = "de_DE.UTF-8"; - LC_TIME = "de_DE.UTF-8"; - }; - # 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. It‘s perfectly fine and recommended to leave diff --git a/hosts/denkbrett/modules/graphics.nix b/hosts/denkbrett/modules/graphics.nix index e359044..dae70fb 100644 --- a/hosts/denkbrett/modules/graphics.nix +++ b/hosts/denkbrett/modules/graphics.nix @@ -1,4 +1,12 @@ -{pkgs, ...}: { +{ + pkgs, + lib, + config, + ... +}: { + environment.variables = { + VDPAU_DRIVER = lib.mkIf config.hardware.graphics.enable (lib.mkDefault "va_gl"); + }; hardware.graphics = { extraPackages = with pkgs; [ intel-ocl diff --git a/hosts/monosodium-glutamate-g/configuration.nix b/hosts/monosodium-glutamate-g/configuration.nix index ed65d9f..f803286 100644 --- a/hosts/monosodium-glutamate-g/configuration.nix +++ b/hosts/monosodium-glutamate-g/configuration.nix @@ -16,12 +16,14 @@ jade = { hwKey.pamAuth.enable = true; desktop = { + creative = { + obs = true; + videoEditing = true; + }; syncthing.enable = true; kdeconnect.enable = true; - cloud.enable = true; social.enable = true; gaming.enable = true; - mail.enable = true; }; }; boot = { diff --git a/justfile b/justfile index 9d972c9..1f26cbc 100644 --- a/justfile +++ b/justfile @@ -17,7 +17,7 @@ build-mac: update-typst-configs: #!/usr/bin/env nu - let file = './modules/desktop-environment/home/typst.nix'; + let file = './modules/desktop-environment/media/typst.nix'; let $rev = http get https://forge.katzen.cafe/schrottkatze/typst-configs/commits/branch/main | query web -mq '.commit-list tr:first-of-type a.ui.sha.label' -a href | path basename | first; ./build-utils/templ-edit.nu edit $file REV $rev; let $hash = nix-prefetch-url https://forge.katzen.cafe/schrottkatze/typst-configs/archive/main.tar.gz --unpack; diff --git a/modules/desktop-environment/default.nix b/modules/desktop-environment/default.nix index a7ef2f3..51d9ee6 100644 --- a/modules/desktop-environment/default.nix +++ b/modules/desktop-environment/default.nix @@ -4,11 +4,13 @@ ./eduroam.nix ./xdg-portals.nix ./home + ./media ./dm.nix ./tlp.nix + ./locale.nix ]; services.flatpak.enable = true; - services.upower = { - enable = true; - }; + security.polkit.enable = true; + services.illum.enable = true; + services.upower.enable = true; } diff --git a/modules/desktop-environment/home/browser.nix b/modules/desktop-environment/home/browser.nix new file mode 100644 index 0000000..afc8090 --- /dev/null +++ b/modules/desktop-environment/home/browser.nix @@ -0,0 +1,355 @@ +{pkgs, ...}: { + home.file = { + ".tridactylrc" = { + text = '' + set editorcmd kitty hx %f +%l + set newtab about:blank + ''; + }; + }; + programs.firefox = { + enable = true; + package = pkgs.firefox.override { + nativeMessagingHosts = [ + pkgs.tridactyl-native + ]; + }; + policies = { + DefaultDownloadDirectory = "\${home}/Downloads"; + Extensions.Install = builtins.map (name: "https://addons.mozilla.org/firefox/downloads/latest/${name}") [ + "ublock-origin" + "tridactyl-vim" + "privacy-badger17" + "gruvbox-dark-theme" + "torproject-snowflake" + "bitwarden-password-manager" + "terms-of-service-didnt-read" + "shinigami-eyes" + "darkreader" + "sponsorblock" + "youtube-mrbeastify" + "return-youtube-dislikes" + "multi-account-containers" + "tabby-cat-friend" + "indie-wiki-buddy" + ]; + Extensions.Uninstall = [ + "google@search.mozilla.org" + "bing@search.mozilla.org" + "amazondotcom@search.mozilla.org" + "ebay@search.mozilla.org" + "twitter@search.mozilla.org" + ]; + "DisableFirefoxStudies" = true; + "DisableTelemetry" = true; + "DisableFeedbackCommands" = true; + "DisablePocket" = true; + }; + profiles.jade = { + search = { + force = true; + default = "DuckDuckGo"; + engines = { + "Nix Packages" = { + urls = [ + { + template = "https://search.nixos.org/packages"; + params = [ + { + name = "query"; + value = "{searchTerms}"; + } + ]; + } + ]; + icon = "${pkgs.nixos-icons}/share/icons/hicolor/scalable/apps/nix-snowflake.svg"; + definedAliases = ["pkgs"]; + }; + "Nix Options" = { + urls = [ + { + template = "https://search.nixos.org/options"; + params = [ + { + name = "query"; + value = "{searchTerms}"; + } + ]; + } + ]; + icon = "${pkgs.nixos-icons}/share/icons/hicolor/scalable/apps/nix-snowflake.svg"; + definedAliases = ["opts"]; + }; + "Home manager Options" = { + urls = [ + { + template = "https://home-manager-options.extranix.com/"; + params = [ + { + name = "query"; + value = "{searchTerms}"; + } + { + name = "release"; + value = "master"; + } + ]; + } + ]; + icon = "${pkgs.nixos-icons}/share/icons/hicolor/scalable/apps/nix-snowflake.svg"; + definedAliases = ["hm"]; + }; + "NixOS Wiki" = { + urls = [ + { + template = "https://nixos.wiki/index.php"; + params = [ + { + name = "search"; + value = "{searchTerms}"; + } + ]; + } + ]; + icon = "${pkgs.nixos-icons}/share/icons/hicolor/scalable/apps/nix-snowflake.svg"; + definedAliases = ["nxwk"]; + }; + "Noogle" = { + urls = [ + { + template = "https://noogle.dev/q"; + params = [ + { + name = "term"; + value = "{searchTerms}"; + } + ]; + } + ]; + definedAliases = ["ngl"]; + }; + "lib.rs" = { + urls = [ + { + template = "https://lib.rs/search"; + params = [ + { + name = "q"; + value = "{searchTerms}"; + } + ]; + } + ]; + icon = "https://lib.rs/favicon.png"; + definedAliases = ["libs"]; + }; + "rust docs" = { + urls = [ + { + template = "https://docs.rs/releases/search"; + params = [ + { + name = "query"; + value = "{searchTerms}"; + } + ]; + } + ]; + icon = "https://docs.rs/-/static/favicon.ico"; + definedAliases = ["docs"]; + }; + "rust docs direct open" = { + urls = [ + { + template = "https://docs.rs/{searchTerms}"; + } + ]; + definedAliases = ["doc" "docd"]; + }; + "rust std docs" = { + urls = [ + { + template = "https://docs.rust-lang.org/std/index.html"; + params = [ + { + name = "search"; + value = "{searchTerms}"; + } + ]; + } + ]; + icon = "https://doc.rust-lang.org/favicon.ico"; + definedAliases = ["std"]; + }; + "MDN" = { + urls = [ + { + template = "https://developer.mozilla.org/search"; + params = [ + { + name = "q"; + value = "{searchTerms}"; + } + ]; + } + ]; + }; + "Bing".metaData.hidden = true; + "Google".metaData.hidden = true; + "Amazon.de".metaData.hidden = true; + }; + }; + settings = { + "devtools.editor.keymap" = "vim"; + "devtools.toolbox.host" = "right"; + "devtools.theme" = "dark"; + "webgl.disabled" = false; + "browser.urlbar.decodeURLsOnCopy" = true; + "browser.urlbar.unitConversion.enabled" = true; + "browser.urlbar.suggest.calculator" = true; + "browser.compactmode.show" = true; + "browser.uidensity" = 1; + "screenshots.browser.component.enabled" = true; + "browser.aboutConfig.showWarning" = false; + "browser.aboutwelcome.showModal" = false; + "browser.aboutwelcome.enabled" = false; + "browser.preferences.moreFromMozilla" = false; + "browser.menu.showViewImageInfo" = true; + "browser.shopping.experience2023.active" = false; + "browser.shopping.experience2023.survey.enabled" = false; + + "identity.fxaccounts.enabled" = true; + "browser.tabs.firefox-view" = true; + "browser.tabs.firefox-view-next" = true; + "browser.newtabpage.activity-stream.showSponsored" = false; + "browser.newtabpage.activity-stream.showSponsoredTopSites" = false; + "browser.newtabpage.activity-stream.improvesearch.topSiteSearchShortcuts" = false; + "privacy.trackingprotection.emailtracking.enabled" = true; + "privacy.trackingprotection.enabled" = true; + "privacy.trackingprotection.socialtracking.enabled" = true; + + "browser.ml.chat.enabled" = false; + "browser.ml.chat.hideLocalhost" = false; + "browser.ml.chat.prompt.prefix" = ""; + "browser.ml.chat.prompts.0" = ""; + "browser.ml.chat.prompts.1" = ""; + "browser.ml.chat.prompts.2" = ""; + "browser.ml.chat.prompts.3" = ""; + "browser.ml.chat.provider" = ""; + "browser.ml.chat.shortcuts" = false; + "browser.ml.chat.shortcuts.custom" = false; + "browser.ml.chat.shortcuts.longPress" = ""; + "browser.ml.chat.sidebar" = false; + + "geo.provider.network.logging.enabled" = true; + "extensions.getAddons.showPane" = false; + "extensions.htmlaboutaddons.recommendations.enabled" = false; + "browser.discovery.enabled" = false; + "browser.shopping.experience2023.enabled" = false; + "datareporting.policy.dataSubmissionEnabled" = false; + "datareporting.healthreport.uploadEnabled" = false; + "toolkit.telemetry.unified" = false; + "toolkit.telemetry.enabled" = false; + "toolkit.telemetry.server" = "data:,"; + "toolkit.telemetry.archive.enabled" = false; + "toolkit.telemetry.newProfilePing.enabled" = false; + "toolkit.telemetry.shutdownPingSender.enabled" = false; + "toolkit.telemetry.updatePing.enabled" = false; + "toolkit.telemetry.bhrPing.enabled" = false; + "toolkit.telemetry.firstShutdownPing.enabled" = false; + "toolkit.telemetry.coverage.opt-out" = true; + "toolkit.coverage.opt-out" = true; + "toolkit.coverage.endpoint.base" = ""; + "browser.ping-centre.telemetry" = false; + "browser.newtabpage.activity-stream.feeds.telemetry" = false; + "browser.newtabpage.activity-stream.telemetry" = false; + "app.shield.optoutstudies.enabled" = false; + "app.normandy.enabled" = false; + "app.normandy.api_url" = ""; + "dom.private-attribution.submission.enabled" = false; + "browser.newtabpage.activity-stream.feeds.showWeather" = false; + "browser.newtabpage.activity-stream.feeds.weatherfeed" = false; + + "browser.safebrowsing.malware.enabled" = false; + "browser.safebrowsing.phishing.enabled" = false; + "browser.safebrowsing.downloads.enabled" = false; + "browser.safebrowsing.downloads.remote.enabled" = false; + "browser.safebrowsing.downloads.remote.url" = ""; + "browser.safebrowsing.downloads.remote.block_potentially_unwanted" = false; + "browser.safebrowsing.downloads.remote.block_uncommon" = false; + "browser.safebrowsing.allowOverride" = false; + + "network.prefetch-next" = false; + "network.dns.disablePrefetch" = true; + "network.dns.disablePrefetchFromHTTPS" = true; + "network.predictor.enabled" = false; + "network.predictor.enable-prefetch" = false; + "network.http.speculative-parallel-limit" = 0; + "browser.places.speculativeConnect.enabled" = false; + "browser.send_pings" = false; + + "browser.urlbar.pocket.featureGate" = false; + "browser.urlbar.weather.featureGate" = false; + "browser.urlbar.speculativeConnect.enabled" = false; + "browser.urlbar.suggest.quicksuggest.nonsponsored" = false; + "browser.urlbar.suggest.quicksuggest.sponsored" = false; + "browser.search.suggest.enabled" = false; + "browser.urlbar.suggest.searches" = false; + "browser.urlbar.trending.featureGate" = false; + + "security.ssl.require_safe_negotiation" = true; + "security.remote_settings.crlite_filters.enabled" = true; + "security.pki.crlite_mode" = 2; + + "dom.security.https_only_mode" = true; + "dom.security.https_only_mode_pbm" = true; + "security.ssl.treat_unsafe_negotiation_as_broken" = true; + "browser.xul.error_pages.expert_bad_cert" = true; + "network.http.referer.XOriginTrimmingPolicy" = 2; + + "privacy.userContext.enabled" = true; + "privacy.userContext.ui.enabled" = true; + "privacy.userContext.newTabContainerOnLeftClick.enabled" = true; + + "dom.disable_window_move_resize" = true; + + "browser.uitour.enabled" = false; + + "browser.uitour.url" = ""; + "permissions.manager.defaultsUrl" = ""; + "webchannel.allowObject.urlWhitelist" = ""; + + "network.IDN_show_punycode" = true; + "pdfjs.disabled" = false; + "pdfjs.enableScripting" = false; + "browser.tabs.searchclipboardfor.middleclick" = false; + "browser.download.useDownloadDir" = false; + "browser.download.alwaysOpenPanel" = false; + + "browser.download.manager.addToRecentDocs" = false; + + "browser.download.always_ask_before_handling_new_types" = true; + "privacy.resistFingerprinting" = true; + "privacy.resistFingerprinting.pbmode" = true; + "privacy.window.maxInnerWidth" = 1600; + "privacy.window.maxInnerHeight" = 900; + "privacy.resistFingerprinting.block_mozAddonManager" = true; + "privacy.resistFingerprinting.letterboxing" = false; + "widget.non-native-theme.enabled" = true; + "browser.link.open_newwindow" = 3; + "browser.link.open_newwindow.restriction" = 0; + "signon.rememberSignons" = false; + "dom.popup_allowed_events" = "click dblclick mousedown pointerdown"; + "browser.pagethumbnails.capturing_disabled" = true; + + "geo.enabled" = false; + "full-screen-api.enabled" = false; + "permissions.default.geo" = 0; + "permissions.default.camera" = 0; + "permissions.default.microphone" = 0; + "permissions.default.desktop-notification" = 0; + "permissions.default.xr" = 0; + }; + }; + }; +} diff --git a/modules/desktop-environment/home/default.nix b/modules/desktop-environment/home/default.nix index 483b614..06847ca 100644 --- a/modules/desktop-environment/home/default.nix +++ b/modules/desktop-environment/home/default.nix @@ -6,7 +6,7 @@ ./terminal.nix ./layaway.nix ./swayidle.nix - ./typst.nix + ./browser.nix ./eww ./niri ]; @@ -15,20 +15,12 @@ programs.wofi.enable = true; programs.swaylock.enable = true; services.network-manager-applet.enable = true; + xsession.enable = true; services.gpg-agent = { enable = true; enableNushellIntegration = true; enableSshSupport = true; }; - fonts.fontconfig = { - enable = true; - defaultFonts = { - emoji = []; - monospace = []; - sansSerif = ["Atkinson Hyperlegible"]; - serif = []; - }; - }; }; } diff --git a/modules/desktop-environment/home/niri/binds.nix b/modules/desktop-environment/home/niri/binds.nix index 9f8b60d..f0d3f62 100644 --- a/modules/desktop-environment/home/niri/binds.nix +++ b/modules/desktop-environment/home/niri/binds.nix @@ -1,10 +1,11 @@ -{...}: { +{pkgs, ...}: { programs.niri.settings.binds = { # spawn terminal "Mod+Return".action.spawn = "kitty"; "Mod+Return".repeat = false; "Mod+D".action.spawn = ["wofi" "-S" "drun" "--allow-images"]; "Mod+D".repeat = false; + "Mod+I".action.spawn = ["${pkgs.rofimoji}/bin/rofimoji" "--selector" "wofi" "-f" "alchemical_symbols" "anatolian_hieroglyphs" "emojis" "braille_patterns" "box_drawing" "chess_symbols" "emoticons" "geometric_shapes" "gothic" "greek_extended" "math" "mathematical_alphanumeric_symbols" "mathematical_operators" "miscellaneous_symbols" "miscellaneous_mathematical_symbols-a" "miscellaneous_mathematical_symbols-b" "miscellaneous_symbols_and_arrows" "miscellaneous_symbols_and_pictographs" "miscellaneous_technical" "modi" "modifier_tone_letters" "musical_symbols" "nerd_font" "number_forms" "shorthand_format_controls" "specials" "variation_selectors" "vertical_forms" "-a" "copy"]; "Mod+Shift+E".action.quit = []; "Mod+Shift+Q".action.close-window = []; diff --git a/modules/desktop-environment/home/notifications.nix b/modules/desktop-environment/home/notifications.nix index 25126ff..8c5f9aa 100644 --- a/modules/desktop-environment/home/notifications.nix +++ b/modules/desktop-environment/home/notifications.nix @@ -1,4 +1,7 @@ {pkgs, ...}: { + home.packages = [ + pkgs.libnotify + ]; services.dunst = { enable = true; settings = { diff --git a/modules/desktop-environment/locale.nix b/modules/desktop-environment/locale.nix new file mode 100644 index 0000000..7319975 --- /dev/null +++ b/modules/desktop-environment/locale.nix @@ -0,0 +1,13 @@ +{...}: { + i18n.extraLocaleSettings = { + LC_ADDRESS = "de_DE.UTF-8"; + LC_IDENTIFICATION = "de_DE.UTF-8"; + LC_MEASUREMENT = "de_DE.UTF-8"; + LC_MONETARY = "de_DE.UTF-8"; + LC_NAME = "de_DE.UTF-8"; + LC_NUMERIC = "de_DE.UTF-8"; + LC_PAPER = "de_DE.UTF-8"; + LC_TELEPHONE = "de_DE.UTF-8"; + LC_TIME = "de_DE.UTF-8"; + }; +} diff --git a/modules/desktop-environment/media/default.nix b/modules/desktop-environment/media/default.nix new file mode 100644 index 0000000..760c884 --- /dev/null +++ b/modules/desktop-environment/media/default.nix @@ -0,0 +1,55 @@ +{ + pkgs, + pkgs-stable, + config, + lib, + ... +}: let + cfg = config.jade.desktop.media; +in + with lib; { + imports = [ + ./obs.nix + ./fonts.nix + ]; + options.jade.desktop.media.videoEditing = mkEnableOption "Enable Video editing software"; + config = { + home-manager.users.jade = {pkgs, ...}: { + imports = [./typst.nix]; + home.packages = with pkgs; [ + # creative software basics + pastel + krita + gimp + drawing + inkscape-with-extensions + pixelorama + rawtherapee + scribus + audacity + + openscad-unstable + openscad-lsp + + imagemagick + ffmpeg_7-full + + onlyoffice-bin_latest + + # viewers + pkgs-stable.font-manager + yt-dlp + + syncplay + + vlc + mpv + kdePackages.okular + nomacs + jellyfin-media-player + + (mkIf cfg.videoEditing [kdePackages.kdenlive glaxnimate]) + ]; + }; + }; + } diff --git a/modules/desktop-environment/media/fonts.nix b/modules/desktop-environment/media/fonts.nix new file mode 100644 index 0000000..27a9253 --- /dev/null +++ b/modules/desktop-environment/media/fonts.nix @@ -0,0 +1,48 @@ +{pkgs, ...}: { + nixpkgs.config.packageOverrides = pkgs: { + google-fonts = pkgs.google-fonts.overrideAttrs (oldAttrs: { + src = pkgs.fetchFromGitHub { + owner = "google"; + repo = "fonts"; + rev = "8a0041ea7b92e339a7ce13e4e1dadcc85cb8f5df"; + sha256 = "sha256-9TzeihEKIEDRtDuv+NmLWjTpoGnBR+RP/jIBfB1O06U="; + }; + installPhase = oldAttrs.installPhase + "mv $out/share/fonts/truetype $out/share/fonts/ttf"; + }); + }; + + fonts = { + packages = with pkgs; [ + nerd-fonts.fira-code + nerd-fonts.departure-mono + google-fonts + montserrat + noto-fonts + atkinson-hyperlegible + arkpandora_ttf + liberation_ttf + caladea + carlito + garamond-libre + ocr-a + amiri + libertine + inter + b612 + departure-mono + ]; + fontDir.enable = true; + }; + + home-manager.users.jade = {...}: { + fonts.fontconfig = { + enable = true; + defaultFonts = { + emoji = []; + monospace = []; + sansSerif = ["Atkinson Hyperlegible"]; + serif = []; + }; + }; + }; +} diff --git a/modules/desktop-environment/media/obs.nix b/modules/desktop-environment/media/obs.nix new file mode 100644 index 0000000..d61f764 --- /dev/null +++ b/modules/desktop-environment/media/obs.nix @@ -0,0 +1,33 @@ +{ + config, + lib, + pkgs, + ... +}: let + cfg = config.jade.media.obs; +in + with lib; { + options.jade.desktop.media.obs = mkEnableOption "Enable OBS"; + + config = mkIf cfg.enable { + # OBS stuffs + environment.systemPackages = [ + (pkgs.wrapOBS { + plugins = with pkgs.obs-studio-plugins; [ + wlrobs + obs-backgroundremoval + obs-pipewire-audio-capture + ]; + }) + ]; + + boot = { + extraModulePackages = with config.boot.kernelPackages; [ + v4l2loopback + ]; + extraModprobeConfig = '' + options v4l2loopback devices=1 video_nr=1 card_label="OBS Cam" exclusive_caps=1 + ''; + }; + }; + } diff --git a/modules/desktop-environment/home/typst.nix b/modules/desktop-environment/media/typst.nix similarity index 100% rename from modules/desktop-environment/home/typst.nix rename to modules/desktop-environment/media/typst.nix diff --git a/modules/desktop-environment/printing.nix b/modules/desktop-environment/printing.nix new file mode 100644 index 0000000..006ea0b --- /dev/null +++ b/modules/desktop-environment/printing.nix @@ -0,0 +1,20 @@ +{pkgs, ...}: { + services.printing = { + enable = true; + drivers = with pkgs; [ + gutenprint + gutenprintBin + hplip + brlaser + brgenml1lpr + brgenml1cupswrapper + ptouch-driver + epsonscan2 + epson-escpr + epson-inkjet-printer-escpr2 + epson_201207w + epson-alc1100 + epson + ]; + }; +} diff --git a/modules/desktop/cloud.nix b/modules/desktop/cloud.nix deleted file mode 100644 index 15e3c3a..0000000 --- a/modules/desktop/cloud.nix +++ /dev/null @@ -1,23 +0,0 @@ -{ - config, - lib, - pkgs, - pkgs-stable, - ... -}: let - cfg = config.jade.desktop.cloud; -in - with lib; { - options.jade.desktop.cloud = { - enable = mkEnableOption "Enable cloud things"; - }; - config = mkIf cfg.enable { - home-manager.users.jade = {pkgs, ...}: { - home.packages = with pkgs; [ - fluent-reader - pkgs-stable.bitwarden - rofi-rbw - ]; - }; - }; - } diff --git a/modules/desktop/creative.nix b/modules/desktop/creative.nix deleted file mode 100644 index 32a2c3d..0000000 --- a/modules/desktop/creative.nix +++ /dev/null @@ -1,33 +0,0 @@ -{ - pkgs, - pkgs-stable, - ... -}: { - home-manager.users.jade = {pkgs, ...}: { - home.packages = with pkgs; [ - pastel - - audacity - krita - gimp - inkscape-with-extensions - obs-studio - kdePackages.kdenlive - glaxnimate - - pixelorama - - scribus - - openscad-unstable - openscad-lsp - - pkgs-stable.font-manager - fontforge-gtk - - onlyoffice-bin_latest - - rawtherapee - ]; - }; -} diff --git a/modules/desktop/default.nix b/modules/desktop/default.nix index 5aede2b..a069ad7 100644 --- a/modules/desktop/default.nix +++ b/modules/desktop/default.nix @@ -7,18 +7,12 @@ with lib; { imports = [ ./gaming.nix - ./creative.nix # TODO: more fine grained choices, not every setup needs fspy or rawtherapee + # TODO: more fine grained choices, not every setup needs fspy or rawtherapee ./syncthing.nix ./kdeconnect.nix ./themeing.nix - ./cloud.nix ./networking.nix ./social.nix - ./mail.nix - ./fonts.nix - ./firefox.nix - ./x.nix - ./obs.nix ]; programs.seahorse.enable = true; @@ -26,21 +20,6 @@ with lib; { virtualisation.libvirtd.enable = true; - services = { - printing = { - enable = true; - drivers = [ - pkgs.gutenprint - pkgs.gutenprintBin - pkgs.hplip - pkgs.brlaser - pkgs.brgenml1lpr - pkgs.brgenml1cupswrapper - pkgs.ptouch-driver - ]; - }; - }; - programs.xss-lock = { enable = true; lockerCommand = "${pkgs.i3lock}/bin/i3lock -c 1d2021"; @@ -58,9 +37,6 @@ with lib; { }; home-manager.users.jade = {pkgs, ...}: { - home.sessionVariables = { - "S10E_JRNL_FILE_LOC" = "/home/jade/Docs/jrnl.md"; - }; programs.ssh = { controlMaster = "yes"; }; @@ -70,43 +46,15 @@ with lib; { magic-wormhole-rs - yt-dlp - - imagemagick - - syncplay - # filemanager xfce.thunar xfce.tumbler xfce.thunar-archive-plugin file-roller - # media/file viewers - vlc - mpv - evince - nomacs - jellyfin-media-player - # from environment.systemPackages cleanup virt-manager ddccontrol-db - ffmpeg_7-full - - # external - libnotify - rofimoji - xorg.xinput - arandr - flameshot - tesseract5 - imagemagick - brightnessctl - drawing ]; - xsession = { - enable = true; - }; }; } diff --git a/modules/desktop/firefox.nix b/modules/desktop/firefox.nix deleted file mode 100644 index b52c74c..0000000 --- a/modules/desktop/firefox.nix +++ /dev/null @@ -1,380 +0,0 @@ -{...}: { - home-manager.users.jade = {pkgs, ...}: { - home.file = { - ".tridactylrc" = { - text = '' - set editorcmd kitty hx %f +%l - set newtab about:blank - ''; - }; - }; - programs.firefox = { - enable = true; - package = pkgs.firefox.override { - nativeMessagingHosts = [ - pkgs.tridactyl-native - ]; - }; - policies = { - DefaultDownloadDirectory = "\${home}/Downloads"; - Extensions.Install = builtins.map (name: "https://addons.mozilla.org/firefox/downloads/latest/${name}") [ - "ublock-origin" - "tridactyl-vim" - "privacy-badger17" - "gruvbox-dark-theme" - "torproject-snowflake" - "bitwarden-password-manager" - "terms-of-service-didnt-read" - "shinigami-eyes" - "darkreader" - "sponsorblock" - "youtube-mrbeastify" - "return-youtube-dislikes" - "multi-account-containers" - "tabby-cat-friend" - "indie-wiki-buddy" - ]; - Extensions.Uninstall = [ - "google@search.mozilla.org" - "bing@search.mozilla.org" - "amazondotcom@search.mozilla.org" - "ebay@search.mozilla.org" - "twitter@search.mozilla.org" - ]; - "DisableFirefoxStudies" = true; - "DisableTelemetry" = true; - "DisableFeedbackCommands" = true; - "DisablePocket" = true; - }; - profiles.jade = { - search = { - force = true; - default = "DuckDuckGo"; - engines = { - "Nix Packages" = { - urls = [ - { - template = "https://search.nixos.org/packages"; - params = [ - { - name = "query"; - value = "{searchTerms}"; - } - ]; - } - ]; - icon = "${pkgs.nixos-icons}/share/icons/hicolor/scalable/apps/nix-snowflake.svg"; - definedAliases = ["pkgs"]; - }; - "Nix Options" = { - urls = [ - { - template = "https://search.nixos.org/options"; - params = [ - { - name = "query"; - value = "{searchTerms}"; - } - ]; - } - ]; - icon = "${pkgs.nixos-icons}/share/icons/hicolor/scalable/apps/nix-snowflake.svg"; - definedAliases = ["opts"]; - }; - "Home manager Options" = { - urls = [ - { - template = "https://home-manager-options.extranix.com/"; - params = [ - { - name = "query"; - value = "{searchTerms}"; - } - { - name = "release"; - value = "master"; - } - ]; - } - ]; - icon = "${pkgs.nixos-icons}/share/icons/hicolor/scalable/apps/nix-snowflake.svg"; - definedAliases = ["hm"]; - }; - "NixOS Wiki" = { - urls = [ - { - template = "https://nixos.wiki/index.php"; - params = [ - { - name = "search"; - value = "{searchTerms}"; - } - ]; - } - ]; - icon = "${pkgs.nixos-icons}/share/icons/hicolor/scalable/apps/nix-snowflake.svg"; - definedAliases = ["nxwk"]; - }; - "Noogle" = { - urls = [ - { - template = "https://noogle.dev/q"; - params = [ - { - name = "term"; - value = "{searchTerms}"; - } - ]; - } - ]; - definedAliases = ["ngl"]; - }; - "lib.rs" = { - urls = [ - { - template = "https://lib.rs/search"; - params = [ - { - name = "q"; - value = "{searchTerms}"; - } - ]; - } - ]; - icon = "https://lib.rs/favicon.png"; - definedAliases = ["libs"]; - }; - "rust docs" = { - urls = [ - { - template = "https://docs.rs/releases/search"; - params = [ - { - name = "query"; - value = "{searchTerms}"; - } - ]; - } - ]; - icon = "https://docs.rs/-/static/favicon.ico"; - definedAliases = ["docs"]; - }; - "rust docs direct open" = { - urls = [ - { - template = "https://docs.rs/{searchTerms}"; - } - ]; - definedAliases = ["doc" "docd"]; - }; - "rust std docs" = { - urls = [ - { - template = "https://docs.rust-lang.org/std/index.html"; - params = [ - { - name = "search"; - value = "{searchTerms}"; - } - ]; - } - ]; - icon = "https://doc.rust-lang.org/favicon.ico"; - definedAliases = ["std"]; - }; - "MDN" = { - urls = [ - { - template = "https://developer.mozilla.org/search"; - params = [ - { - name = "q"; - value = "{searchTerms}"; - } - ]; - } - ]; - }; - "Bing".metaData.hidden = true; - "Google".metaData.hidden = true; - "Amazon.de".metaData.hidden = true; - }; - }; - settings = { - "devtools.editor.keymap" = "vim"; - "devtools.toolbox.host" = "right"; - "devtools.theme" = "dark"; - "webgl.disabled" = false; - "browser.urlbar.decodeURLsOnCopy" = true; - "browser.urlbar.unitConversion.enabled" = true; - "browser.urlbar.suggest.calculator" = true; - "browser.compactmode.show" = true; - "browser.uidensity" = 1; - "screenshots.browser.component.enabled" = true; - "browser.aboutConfig.showWarning" = false; - "browser.aboutwelcome.showModal" = false; - "browser.aboutwelcome.enabled" = false; - "browser.preferences.moreFromMozilla" = false; - "browser.menu.showViewImageInfo" = true; - "browser.shopping.experience2023.active" = false; - "browser.shopping.experience2023.survey.enabled" = false; - - "identity.fxaccounts.enabled" = true; - "browser.tabs.firefox-view" = true; - "browser.tabs.firefox-view-next" = true; - "browser.newtabpage.activity-stream.showSponsored" = false; - "browser.newtabpage.activity-stream.showSponsoredTopSites" = false; - "browser.newtabpage.activity-stream.improvesearch.topSiteSearchShortcuts" = false; - "privacy.trackingprotection.emailtracking.enabled" = true; - "privacy.trackingprotection.enabled" = true; - "privacy.trackingprotection.socialtracking.enabled" = true; - - "browser.ml.chat.enabled" = false; - "browser.ml.chat.hideLocalhost" = false; - "browser.ml.chat.prompt.prefix" = ""; - "browser.ml.chat.prompts.0" = ""; - "browser.ml.chat.prompts.1" = ""; - "browser.ml.chat.prompts.2" = ""; - "browser.ml.chat.prompts.3" = ""; - "browser.ml.chat.provider" = ""; - "browser.ml.chat.shortcuts" = false; - "browser.ml.chat.shortcuts.custom" = false; - "browser.ml.chat.shortcuts.longPress" = ""; - "browser.ml.chat.sidebar" = false; - - "geo.provider.network.logging.enabled" = true; - "extensions.getAddons.showPane" = false; - "extensions.htmlaboutaddons.recommendations.enabled" = false; - "browser.discovery.enabled" = false; - "browser.shopping.experience2023.enabled" = false; - "datareporting.policy.dataSubmissionEnabled" = false; - "datareporting.healthreport.uploadEnabled" = false; - "toolkit.telemetry.unified" = false; - "toolkit.telemetry.enabled" = false; - "toolkit.telemetry.server" = "data:,"; - "toolkit.telemetry.archive.enabled" = false; - "toolkit.telemetry.newProfilePing.enabled" = false; - "toolkit.telemetry.shutdownPingSender.enabled" = false; - "toolkit.telemetry.updatePing.enabled" = false; - "toolkit.telemetry.bhrPing.enabled" = false; - "toolkit.telemetry.firstShutdownPing.enabled" = false; - "toolkit.telemetry.coverage.opt-out" = true; - "toolkit.coverage.opt-out" = true; - "toolkit.coverage.endpoint.base" = ""; - "browser.ping-centre.telemetry" = false; - "browser.newtabpage.activity-stream.feeds.telemetry" = false; - "browser.newtabpage.activity-stream.telemetry" = false; - "app.shield.optoutstudies.enabled" = false; - "app.normandy.enabled" = false; - "app.normandy.api_url" = ""; - "dom.private-attribution.submission.enabled" = false; - "browser.newtabpage.activity-stream.feeds.showWeather" = false; - "browser.newtabpage.activity-stream.feeds.weatherfeed" = false; - - "browser.safebrowsing.malware.enabled" = false; - "browser.safebrowsing.phishing.enabled" = false; - "browser.safebrowsing.downloads.enabled" = false; - "browser.safebrowsing.downloads.remote.enabled" = false; - "browser.safebrowsing.downloads.remote.url" = ""; - "browser.safebrowsing.downloads.remote.block_potentially_unwanted" = false; - "browser.safebrowsing.downloads.remote.block_uncommon" = false; - "browser.safebrowsing.allowOverride" = false; - - "network.prefetch-next" = false; - "network.dns.disablePrefetch" = true; - "network.dns.disablePrefetchFromHTTPS" = true; - "network.predictor.enabled" = false; - "network.predictor.enable-prefetch" = false; - "network.http.speculative-parallel-limit" = 0; - "browser.places.speculativeConnect.enabled" = false; - "browser.send_pings" = false; - - "browser.urlbar.pocket.featureGate" = false; - "browser.urlbar.weather.featureGate" = false; - "browser.urlbar.speculativeConnect.enabled" = false; - "browser.urlbar.suggest.quicksuggest.nonsponsored" = false; - "browser.urlbar.suggest.quicksuggest.sponsored" = false; - "browser.search.suggest.enabled" = false; - "browser.urlbar.suggest.searches" = false; - "browser.urlbar.trending.featureGate" = false; - - "security.ssl.require_safe_negotiation" = true; - "security.remote_settings.crlite_filters.enabled" = true; - "security.pki.crlite_mode" = 2; - - "dom.security.https_only_mode" = true; - "dom.security.https_only_mode_pbm" = true; - "security.ssl.treat_unsafe_negotiation_as_broken" = true; - "browser.xul.error_pages.expert_bad_cert" = true; - "network.http.referer.XOriginTrimmingPolicy" = 2; - - "privacy.userContext.enabled" = true; - "privacy.userContext.ui.enabled" = true; - "privacy.userContext.newTabContainerOnLeftClick.enabled" = true; - - "dom.disable_window_move_resize" = true; - - "browser.uitour.enabled" = false; - - "browser.uitour.url" = ""; - "permissions.manager.defaultsUrl" = ""; - "webchannel.allowObject.urlWhitelist" = ""; - - "network.IDN_show_punycode" = true; - "pdfjs.disabled" = false; - "pdfjs.enableScripting" = false; - "browser.tabs.searchclipboardfor.middleclick" = false; - "browser.download.useDownloadDir" = false; - "browser.download.alwaysOpenPanel" = false; - - "browser.download.manager.addToRecentDocs" = false; - - "browser.download.always_ask_before_handling_new_types" = true; - "privacy.resistFingerprinting" = true; - "privacy.resistFingerprinting.pbmode" = true; - "privacy.window.maxInnerWidth" = 1600; - "privacy.window.maxInnerHeight" = 900; - "privacy.resistFingerprinting.block_mozAddonManager" = true; - "privacy.resistFingerprinting.letterboxing" = false; - "widget.non-native-theme.enabled" = true; - "browser.link.open_newwindow" = 3; - "browser.link.open_newwindow.restriction" = 0; - "signon.rememberSignons" = false; - "dom.popup_allowed_events" = "click dblclick mousedown pointerdown"; - "browser.pagethumbnails.capturing_disabled" = true; - - "geo.enabled" = false; - "full-screen-api.enabled" = false; - "permissions.default.geo" = 0; - "permissions.default.camera" = 0; - "permissions.default.microphone" = 0; - "permissions.default.desktop-notification" = 0; - "permissions.default.xr" = 0; - - "browser.newtabpage.pinned" = [ - { - title = "Katzencafé"; - url = "https://ck.katzen.cafe"; - } - { - title = "Katzenschmiede"; - url = "https://forge.katzen.cafe"; - } - { - title = "CatPad"; - url = "https://pad.katzen.cafe"; - } - { - title = "Katzenwolke"; - url = "https://wolke.katzen.cafe"; - } - { - title = "Penpot"; - url = "https://design.katzen.cafe"; - } - ]; - }; - }; - }; - }; -} diff --git a/modules/desktop/fonts.nix b/modules/desktop/fonts.nix deleted file mode 100644 index b686e8d..0000000 --- a/modules/desktop/fonts.nix +++ /dev/null @@ -1,33 +0,0 @@ -{pkgs, ...}: { - nixpkgs.config.packageOverrides = pkgs: { - google-fonts = pkgs.google-fonts.overrideAttrs (oldAttrs: { - src = pkgs.fetchFromGitHub { - owner = "google"; - repo = "fonts"; - rev = "8a0041ea7b92e339a7ce13e4e1dadcc85cb8f5df"; - sha256 = "sha256-9TzeihEKIEDRtDuv+NmLWjTpoGnBR+RP/jIBfB1O06U="; - }; - installPhase = oldAttrs.installPhase + "mv $out/share/fonts/truetype $out/share/fonts/ttf"; - }); - }; - fonts.packages = with pkgs; [ - nerd-fonts.fira-code - nerd-fonts.departure-mono - google-fonts - montserrat - noto-fonts - atkinson-hyperlegible - arkpandora_ttf - liberation_ttf - caladea - carlito - garamond-libre - ocr-a - amiri - libertine - inter - b612 - departure-mono - ]; - fonts.fontDir.enable = true; -} diff --git a/modules/desktop/mail.nix b/modules/desktop/mail.nix deleted file mode 100644 index 253f9ac..0000000 --- a/modules/desktop/mail.nix +++ /dev/null @@ -1,77 +0,0 @@ -{ - config, - lib, - pkgs-stable, - ... -}: let - cfg = config.jade.desktop.mail; - imap = { - host = "imap.migadu.com"; - port = 993; - }; - smtp = { - host = "smtp.migadu.com"; - port = 465; - tls.enable = true; - }; -in - with lib; { - options.jade.desktop.mail = { - enable = mkEnableOption "Enable thunderbird mail stuff"; - }; - config = mkIf cfg.enable { - home-manager.users.jade = {pkgs-stable, ...}: { - accounts.email.accounts = { - "Jade" = rec { - inherit imap smtp; - address = "jade@schrottkatze.de"; - userName = address; - realName = "Jade"; - thunderbird.enable = true; - primary = true; - }; - "Logins" = rec { - inherit imap smtp; - address = "logins@schrottkatze.de"; - userName = address; - realName = "Logins"; - thunderbird.enable = true; - }; - "Contact" = rec { - inherit imap smtp; - address = "contact@schrottkatze.de"; - userName = address; - realName = "Jade"; - thunderbird.enable = true; - }; - "Schule" = rec { - inherit imap smtp; - address = "schule@schrottkatze.de"; - userName = address; - realName = "Jade"; - thunderbird.enable = true; - }; - "Admin" = rec { - inherit imap smtp; - address = "admin@schrottkatze.de"; - userName = address; - realName = "admin"; - thunderbird.enable = true; - }; - "CatchAll" = rec { - inherit imap smtp; - address = "catchall@schrottkatze.de"; - userName = address; - realName = "Catch all"; - thunderbird.enable = true; - }; - }; - programs.thunderbird = { - enable = true; - profiles.jade = { - isDefault = true; - }; - }; - }; - }; - } diff --git a/modules/desktop/networking.nix b/modules/desktop/networking.nix index f0c60c7..d32d49b 100644 --- a/modules/desktop/networking.nix +++ b/modules/desktop/networking.nix @@ -62,7 +62,6 @@ in { home.packages = with pkgs; [ networkmanagerapplet mullvad-vpn - speedtest-cli macchanger ]; }; diff --git a/modules/desktop/obs.nix b/modules/desktop/obs.nix deleted file mode 100644 index 921d67e..0000000 --- a/modules/desktop/obs.nix +++ /dev/null @@ -1,23 +0,0 @@ -{ - pkgs, - config, - ... -}: { - environment.systemPackages = [ - (pkgs.wrapOBS { - plugins = with pkgs.obs-studio-plugins; [ - wlrobs - obs-backgroundremoval - obs-pipewire-audio-capture - ]; - }) - ]; - - boot.extraModulePackages = with config.boot.kernelPackages; [ - v4l2loopback - ]; - boot.extraModprobeConfig = '' - options v4l2loopback devices=1 video_nr=1 card_label="OBS Cam" exclusive_caps=1 - ''; - security.polkit.enable = true; -} diff --git a/modules/desktop/x.nix b/modules/desktop/x.nix deleted file mode 100644 index 04dad28..0000000 --- a/modules/desktop/x.nix +++ /dev/null @@ -1,11 +0,0 @@ -{pkgs, ...}: { - services.xserver = { - enable = true; - - desktopManager = { - xterm.enable = false; - }; - }; - - security.polkit.enable = true; -} From feec1907652c885e7df273cc3d9b06552c9ef8aa Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Wed, 19 Mar 2025 15:41:22 +0100 Subject: [PATCH 231/301] fix media stuff --- hosts/monosodium-glutamate-g/configuration.nix | 2 +- modules/desktop-environment/media/default.nix | 3 ++- modules/desktop-environment/media/obs.nix | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/hosts/monosodium-glutamate-g/configuration.nix b/hosts/monosodium-glutamate-g/configuration.nix index f803286..a418f74 100644 --- a/hosts/monosodium-glutamate-g/configuration.nix +++ b/hosts/monosodium-glutamate-g/configuration.nix @@ -16,7 +16,7 @@ jade = { hwKey.pamAuth.enable = true; desktop = { - creative = { + media = { obs = true; videoEditing = true; }; diff --git a/modules/desktop-environment/media/default.nix b/modules/desktop-environment/media/default.nix index 760c884..0829585 100644 --- a/modules/desktop-environment/media/default.nix +++ b/modules/desktop-environment/media/default.nix @@ -48,7 +48,8 @@ in nomacs jellyfin-media-player - (mkIf cfg.videoEditing [kdePackages.kdenlive glaxnimate]) + (mkIf cfg.videoEditing kdePackages.kdenlive) + (mkIf cfg.videoEditing glaxnimate) ]; }; }; diff --git a/modules/desktop-environment/media/obs.nix b/modules/desktop-environment/media/obs.nix index d61f764..a89e884 100644 --- a/modules/desktop-environment/media/obs.nix +++ b/modules/desktop-environment/media/obs.nix @@ -4,7 +4,7 @@ pkgs, ... }: let - cfg = config.jade.media.obs; + cfg = config.jade.desktop.media.obs; in with lib; { options.jade.desktop.media.obs = mkEnableOption "Enable OBS"; From 29f32e1dc9960db76669db542a8521c57f175d91 Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Wed, 19 Mar 2025 15:45:46 +0100 Subject: [PATCH 232/301] update + fixes --- flake.lock | 90 +++++++++++++++++++++++++++--------------------------- justfile | 2 -- 2 files changed, 45 insertions(+), 47 deletions(-) diff --git a/flake.lock b/flake.lock index ba64528..be42a05 100644 --- a/flake.lock +++ b/flake.lock @@ -2,11 +2,11 @@ "nodes": { "crane": { "locked": { - "lastModified": 1741481578, - "narHash": "sha256-JBTSyJFQdO3V8cgcL08VaBUByEU6P5kXbTJN6R0PFQo=", + "lastModified": 1742394900, + "narHash": "sha256-vVOAp9ahvnU+fQoKd4SEXB2JG2wbENkpqcwlkIXgUC0=", "owner": "ipetkov", "repo": "crane", - "rev": "bb1c9567c43e4434f54e9481eb4b8e8e0d50f0b5", + "rev": "70947c1908108c0c551ddfd73d4f750ff2ea67cd", "type": "github" }, "original": { @@ -38,11 +38,11 @@ "rust-analyzer-src": "rust-analyzer-src" }, "locked": { - "lastModified": 1741588215, - "narHash": "sha256-XTZ051fwGcDPtCUSb7gJv5BsUPYcvjH9mFjVZboMIKQ=", + "lastModified": 1742366221, + "narHash": "sha256-GhWGWyGUvTF7H2DDGlQehsve1vRqIKAFhxy6D82Nj3Q=", "owner": "nix-community", "repo": "fenix", - "rev": "49b0989891f48cbfe6fc288ea76c3efa84000ed5", + "rev": "a074d1bc9fd34f6b3a9049c5a61a82aea2044801", "type": "github" }, "original": { @@ -131,11 +131,11 @@ ] }, "locked": { - "lastModified": 1741613526, - "narHash": "sha256-HUEfRLqCy47BQ7kOG4SRVhqE7J6lkFzAagnd13I17qk=", + "lastModified": 1742326330, + "narHash": "sha256-Tumt3tcMXJniSh7tw2gW+WAnVLeB3WWm+E+yYFnLBXo=", "owner": "nix-community", "repo": "home-manager", - "rev": "3593ee59a44974b8518829a5239b2f77222e3c81", + "rev": "22a36aa709de7dd42b562a433b9cefecf104a6ee", "type": "github" }, "original": { @@ -147,11 +147,11 @@ "lix": { "flake": false, "locked": { - "lastModified": 1738174211, - "narHash": "sha256-eYmp1mKM4kULV1W+EBtCPk6LmKWl2REivaYfGRl+AWo=", - "rev": "64e33a7e09a0d1faacf2fd3f6ebd647fe4d8346a", + "lastModified": 1741888409, + "narHash": "sha256-gJ7QmlwsJ/QdwUjwTjifNo3v7OBQm2N6xa19l3mMWM4=", + "rev": "20edd45ae816c73504ddfb9c678756e003ceeafd", "type": "tarball", - "url": "https://git.lix.systems/api/v1/repos/lix-project/lix/archive/64e33a7e09a0d1faacf2fd3f6ebd647fe4d8346a.tar.gz?rev=64e33a7e09a0d1faacf2fd3f6ebd647fe4d8346a" + "url": "https://git.lix.systems/api/v1/repos/lix-project/lix/archive/20edd45ae816c73504ddfb9c678756e003ceeafd.tar.gz?rev=20edd45ae816c73504ddfb9c678756e003ceeafd" }, "original": { "type": "tarball", @@ -168,11 +168,11 @@ ] }, "locked": { - "lastModified": 1738176840, - "narHash": "sha256-NG3IRvRs3u3btVCN861FqHvgOwqcNT/Oy6PBG86F5/E=", + "lastModified": 1741894565, + "narHash": "sha256-2FD0NDJbEjUHloVrtEIms5miJsj1tvQCc/0YK5ambyc=", "ref": "refs/heads/main", - "rev": "621aae0f3cceaffa6d73a4fb0f89c08d338d729e", - "revCount": 133, + "rev": "a6da43f8193d9e329bba1795c42590c27966082e", + "revCount": 136, "type": "git", "url": "https://git.lix.systems/lix-project/nixos-module" }, @@ -184,7 +184,7 @@ "mac-brcm-fw": { "flake": false, "locked": { - "lastModified": 1735699162, + "lastModified": 1727366922, "narHash": "sha256-+kW8ogc6DykjMVlrr+3vWKs9ZUdJ9EW72LbY7k/Qvh4=", "path": "/home/jade/nix-configs/mac-brcm-fw", "type": "path" @@ -204,11 +204,11 @@ "xwayland-satellite-unstable": "xwayland-satellite-unstable" }, "locked": { - "lastModified": 1741589763, - "narHash": "sha256-F0LYLKX2jaUIs+/sPYjSLVtVfgsfwsdkbb5WoMkSlmQ=", + "lastModified": 1742355568, + "narHash": "sha256-cHW060+beSciKdCK4SZ9vYPOFy/otAq+t9MiO54zKYY=", "owner": "sodiboo", "repo": "niri-flake", - "rev": "aab4ffcc1d43e8a0fb02f84c2a88c25fd0528110", + "rev": "10b56ff2ecc915ec26505526125b4f3a3006d5b3", "type": "github" }, "original": { @@ -237,11 +237,11 @@ "niri-unstable": { "flake": false, "locked": { - "lastModified": 1741582754, - "narHash": "sha256-lS1bn4Eq94xbOfkxq2RbpohqME99H7k/8i0yq62I6ms=", + "lastModified": 1742276600, + "narHash": "sha256-muceB5DW++WPqrGKpX3Hkii/DNSMmFs2oQrYRYHmPiU=", "owner": "YaLTeR", "repo": "niri", - "rev": "b351f6ff220560d96a260d8dd3ad794000923481", + "rev": "e251ca7340bc71870c3a81a7ffc3d9bde58e685a", "type": "github" }, "original": { @@ -268,11 +268,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1741379970, - "narHash": "sha256-Wh7esNh7G24qYleLvgOSY/7HlDUzWaL/n4qzlBePpiw=", + "lastModified": 1742288794, + "narHash": "sha256-Txwa5uO+qpQXrNG4eumPSD+hHzzYi/CdaM80M9XRLCo=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "36fd87baa9083f34f7f5027900b62ee6d09b1f2f", + "rev": "b6eaf97c6960d97350c584de1b6dcff03c9daf42", "type": "github" }, "original": { @@ -296,11 +296,11 @@ }, "nixpkgs-stable": { "locked": { - "lastModified": 1741445498, - "narHash": "sha256-F5Em0iv/CxkN5mZ9hRn3vPknpoWdcdCyR0e4WklHwiE=", + "lastModified": 1742268799, + "narHash": "sha256-IhnK4LhkBlf14/F8THvUy3xi/TxSQkp9hikfDZRD4Ic=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "52e3095f6d812b91b22fb7ad0bfc1ab416453634", + "rev": "da044451c6a70518db5b730fe277b70f494188f1", "type": "github" }, "original": { @@ -312,11 +312,11 @@ }, "nixpkgs-stable_2": { "locked": { - "lastModified": 1741445498, - "narHash": "sha256-F5Em0iv/CxkN5mZ9hRn3vPknpoWdcdCyR0e4WklHwiE=", + "lastModified": 1742268799, + "narHash": "sha256-IhnK4LhkBlf14/F8THvUy3xi/TxSQkp9hikfDZRD4Ic=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "52e3095f6d812b91b22fb7ad0bfc1ab416453634", + "rev": "da044451c6a70518db5b730fe277b70f494188f1", "type": "github" }, "original": { @@ -327,11 +327,11 @@ }, "nixpkgs-unstable-small": { "locked": { - "lastModified": 1741605585, - "narHash": "sha256-1bgzejf8fwsbzr/5cRK7jPArxf7xGyQqKsy05J5p05o=", + "lastModified": 1742362661, + "narHash": "sha256-wonmHfY804hKBC0SA/s3rOhjgNseURTLjpOXfAC2MkE=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "77172a85a0cdca4a9cc2aed74de9bbb14c7c8e43", + "rev": "903d679a5a674158c3f8d823f62680d5664d15c6", "type": "github" }, "original": { @@ -342,11 +342,11 @@ }, "nixpkgs_2": { "locked": { - "lastModified": 1741379970, - "narHash": "sha256-Wh7esNh7G24qYleLvgOSY/7HlDUzWaL/n4qzlBePpiw=", + "lastModified": 1742288794, + "narHash": "sha256-Txwa5uO+qpQXrNG4eumPSD+hHzzYi/CdaM80M9XRLCo=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "36fd87baa9083f34f7f5027900b62ee6d09b1f2f", + "rev": "b6eaf97c6960d97350c584de1b6dcff03c9daf42", "type": "github" }, "original": { @@ -389,11 +389,11 @@ "rust-analyzer-src": { "flake": false, "locked": { - "lastModified": 1741517882, - "narHash": "sha256-MmYdZyVwKa3YHzqoHdHw9/jZXkDE/5M3M+7363t4Pkc=", + "lastModified": 1742296961, + "narHash": "sha256-gCpvEQOrugHWLimD1wTFOJHagnSEP6VYBDspq96Idu0=", "owner": "rust-lang", "repo": "rust-analyzer", - "rev": "5e7dd31c80d5821113ed9c9aa1616a73a63b49a1", + "rev": "15d87419f1a123d8f888d608129c3ce3ff8f13d4", "type": "github" }, "original": { @@ -505,11 +505,11 @@ "xwayland-satellite-unstable": { "flake": false, "locked": { - "lastModified": 1741140299, - "narHash": "sha256-Y2bPO92Yg5HcH5ORvrVOQb4wRGEapGEteHXGtNvboxk=", + "lastModified": 1742249030, + "narHash": "sha256-YZ+axsuNsgIKWfnRkt6Qa9UoKfUOIWf42vNUonXxmxM=", "owner": "Supreeeme", "repo": "xwayland-satellite", - "rev": "10cb041a80bb815cc1789cfa305923f1f9e3713d", + "rev": "cca74a5f6b23742d77dc5db4312dfc40fd4a0fcc", "type": "github" }, "original": { diff --git a/justfile b/justfile index 1f26cbc..e6b5b75 100644 --- a/justfile +++ b/justfile @@ -23,5 +23,3 @@ update-typst-configs: let $hash = nix-prefetch-url https://forge.katzen.cafe/schrottkatze/typst-configs/archive/main.tar.gz --unpack; let $sri = nix hash to-sri --type sha256 $hash; ./build-utils/templ-edit.nu edit $file SHA $sri; - git add $file - git commit -m "typst-configs: Update" From 427416f09ba3af3fe8a6554999566c64c885c413 Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Thu, 20 Mar 2025 09:45:41 +0100 Subject: [PATCH 233/301] remove sway --- modules/desktop-environment/dm.nix | 3 --- 1 file changed, 3 deletions(-) diff --git a/modules/desktop-environment/dm.nix b/modules/desktop-environment/dm.nix index 9fe88a6..e37fc8e 100644 --- a/modules/desktop-environment/dm.nix +++ b/modules/desktop-environment/dm.nix @@ -21,9 +21,6 @@ in user = "jade"; }; defaultSession = "niri"; - sessionPackages = [ - pkgs.sway - ]; }; xserver.displayManager.gdm = { enable = true; From 45c45e2e1177c0b4713b3952170b3a5f94683474 Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Thu, 20 Mar 2025 09:45:54 +0100 Subject: [PATCH 234/301] fix media.obs --- modules/desktop-environment/media/obs.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/desktop-environment/media/obs.nix b/modules/desktop-environment/media/obs.nix index a89e884..4f5adc1 100644 --- a/modules/desktop-environment/media/obs.nix +++ b/modules/desktop-environment/media/obs.nix @@ -9,7 +9,7 @@ in with lib; { options.jade.desktop.media.obs = mkEnableOption "Enable OBS"; - config = mkIf cfg.enable { + config = mkIf cfg { # OBS stuffs environment.systemPackages = [ (pkgs.wrapOBS { From 80e3399d0cb6ede38088f205e894a97349525fa8 Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Thu, 20 Mar 2025 14:53:11 +0100 Subject: [PATCH 235/301] ugrade flip-bool --- flake.nix | 2 +- programs/flip-bool/src/main.rs | 122 +++++++++++++++++++++++++++++---- 2 files changed, 109 insertions(+), 15 deletions(-) diff --git a/flake.nix b/flake.nix index 7cb1cfb..8f30908 100644 --- a/flake.nix +++ b/flake.nix @@ -50,7 +50,6 @@ pkgs = nixpkgs.legacyPackages.${system}; pkgs-stable = nixpkgs-stable.legacyPackages.${system}; pkgs-unstable-small = nixpkgs-unstable-small.legacyPackages.${system}; - crane-lib = crane.mkLib nixpkgs.legacyPackages.${system}; rs-toolchain = with fenix.packages.${system}; combine [ complete.toolchain @@ -59,6 +58,7 @@ # cargo = rs-toolchain; # rustc = rs-toolchain; # }; + crane-lib = (crane.mkLib nixpkgs.legacyPackages.${system}).overrideToolchain rs-toolchain; rs-programs = final: prev: { # s10e-jrnl = rs-platform.buildRustPackage { # pname = "jrnl"; diff --git a/programs/flip-bool/src/main.rs b/programs/flip-bool/src/main.rs index 3ae9375..299685f 100644 --- a/programs/flip-bool/src/main.rs +++ b/programs/flip-bool/src/main.rs @@ -1,4 +1,22 @@ -use std::io::{Read, Write}; +#![feature(iter_array_chunks)] +#![feature(round_char_boundary)] +#![feature(iter_collect_into)] +#![feature(pattern)] + +use std::{ + hint::black_box, + io::{Read, Write}, + str::pattern::Pattern, +}; + +const BOOL_COUNT: usize = BOOLS.len(); +const BOOLS: &[[&str; 2]] = &[ + ["false", "true"], + ["False", "True"], + ["FALSE", "TRUE"], + ["0", "1"], + ["no", "yes"], +]; fn main() { let mut input = String::new(); @@ -7,19 +25,95 @@ fn main() { stdin.read_to_string(&mut input).unwrap(); + let bool_locs = find_bools(&input); stdout - .write_all(match input.as_bytes() { - b"true" => b"false", - b"True" => b"False", - b"TRUE" => b"FALSE", - b"false" => b"true", - b"False" => b"True", - b"FALSE" => b"TRUE", - b"1" => b"0", - b"yes" => b"no", - b"0" => b"1", - b"no" => b"yes", - other => other, - }) + .write_all(replace_bools(&mut input, bool_locs).as_bytes()) .unwrap(); } + +type BoolLocs = [[Vec; 2]; BOOL_COUNT]; + +// you thought [`find_bools`] was stupid? this is *so* much worse!!! +fn replace_bools(input: &str, mut bool_locs: BoolLocs) -> String { + let mut result = String::with_capacity(input.len()); + let mut intermediate = input; + let mut flattened = bool_locs + .iter_mut() + .flatten() + .map(|vec| { + vec.reverse(); + vec + }) + .enumerate() + .collect::>(); + + let mut smallest = || { + let min_idx = flattened + .iter() + .min_by(|va, vb| { + va.1.last() + .unwrap_or(&usize::MAX) + .cmp(vb.1.last().unwrap_or(&usize::MAX)) + })? + .0; + + Some((min_idx, flattened[min_idx].1.pop()?)) + }; + + let mut input_idx = 0; + while let Some(item) = smallest() { + let (a, b) = intermediate.split_at(item.1 - input_idx); + input_idx += a.len(); + result += a; + let bool_ = &BOOLS[item.0 / 2]; + input_idx += bool_[item.0 % 2].len(); + result += bool_[if item.0 % 2 == 0 { 1 } else { 0 }]; + let (_, b) = b.split_at(bool_[item.0 % 2].len()); + intermediate = b; + } + + result + intermediate +} + +// this is so fucking stupid +// it also would've been way easier using a regex crate lmao +fn find_bools(input: &str) -> [[Vec; 2]; BOOL_COUNT] { + let mut res = Vec::with_capacity(BOOL_COUNT); + BOOLS + .iter() + .flatten() + .map(|it| { + input + .match_indices(it) + .filter_map(|it| { + let char_guard = |c: char| !(c.is_alphanumeric() || c.is_contained_in("-_")); + let mut allow = true; + + if it.0 > 0 { + allow &= char_guard( + input[it.1.floor_char_boundary(it.0 - 1)..it.0] + .chars() + .last() + .unwrap(), + ); + } + + let last_idx = it.0 + it.1.len(); + if last_idx < input.len() { + allow &= char_guard( + input[(last_idx)..(input.ceil_char_boundary(last_idx + 1))] + .chars() + .last() + .unwrap(), + ); + } + + allow.then_some(it.0) + }) + .collect() + }) + .array_chunks::<2>() + .collect_into(&mut res); + + res.try_into().unwrap() +} From d545dc682ed11776975c4692d2636ab023cffb4f Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Thu, 20 Mar 2025 17:14:55 +0100 Subject: [PATCH 236/301] some small cleanup stuff --- common.nix | 1 - modules/desktop/gaming.nix | 2 -- modules/firewall.nix | 3 --- modules/input/evremap.nix | 1 - modules/shell/carapace.nix | 7 ------- modules/shell/default.nix | 7 ++++--- modules/shell/direnv.nix | 7 ------- modules/shell/tty.nix | 4 ++-- modules/shell/zellij.nix | 28 ---------------------------- 9 files changed, 6 insertions(+), 54 deletions(-) delete mode 100644 modules/shell/carapace.nix delete mode 100644 modules/shell/direnv.nix delete mode 100644 modules/shell/zellij.nix diff --git a/common.nix b/common.nix index 9c8005f..fab7f75 100644 --- a/common.nix +++ b/common.nix @@ -56,7 +56,6 @@ with builtins; { lolcat cool-retro-term - maven jetbrains.idea-ultimate jdk diff --git a/modules/desktop/gaming.nix b/modules/desktop/gaming.nix index 228c2c0..8e6b7bc 100644 --- a/modules/desktop/gaming.nix +++ b/modules/desktop/gaming.nix @@ -1,7 +1,6 @@ { config, lib, - pkgs, ... }: let cfg = config.jade.desktop.gaming; @@ -16,7 +15,6 @@ in home.packages = with pkgs; [ lutris prismlauncher - legendary-gl wineWowPackages.stable dxvk_2 vkd3d-proton diff --git a/modules/firewall.nix b/modules/firewall.nix index d790480..e10dec0 100644 --- a/modules/firewall.nix +++ b/modules/firewall.nix @@ -16,9 +16,6 @@ 80 443 - # syncthing web ui - 8384 - # syncthing 22000 diff --git a/modules/input/evremap.nix b/modules/input/evremap.nix index cd4145e..24115de 100644 --- a/modules/input/evremap.nix +++ b/modules/input/evremap.nix @@ -2,7 +2,6 @@ pkgs, config, lib, - utils, ... }: let cfg = config.jade.input.remapping; diff --git a/modules/shell/carapace.nix b/modules/shell/carapace.nix deleted file mode 100644 index 3bd3c24..0000000 --- a/modules/shell/carapace.nix +++ /dev/null @@ -1,7 +0,0 @@ -{...}: { - home-manager.users.jade = {pkgs, ...}: { - programs.carapace = { - enable = true; - }; - }; -} diff --git a/modules/shell/default.nix b/modules/shell/default.nix index e3655dd..9ce0499 100644 --- a/modules/shell/default.nix +++ b/modules/shell/default.nix @@ -3,9 +3,6 @@ ./helix.nix ./nu.nix ./starship.nix - ./zellij.nix - ./carapace.nix - ./direnv.nix ./tty.nix ./git.nix ./mprocs.nix @@ -13,4 +10,8 @@ ]; programs.mosh.enable = true; programs.bat.enable = true; + home-manager.users.jade = {...}: { + programs.carapace.enable = true; + programs.direnv.enable = true; + }; } diff --git a/modules/shell/direnv.nix b/modules/shell/direnv.nix deleted file mode 100644 index daa3707..0000000 --- a/modules/shell/direnv.nix +++ /dev/null @@ -1,7 +0,0 @@ -{...}: { - home-manager.users.jade = {pkgs, ...}: { - programs.direnv = { - enable = true; - }; - }; -} diff --git a/modules/shell/tty.nix b/modules/shell/tty.nix index 2213f22..ee05300 100644 --- a/modules/shell/tty.nix +++ b/modules/shell/tty.nix @@ -58,8 +58,8 @@ in { enable = true; fonts = [ { - name = "FiraCode Nerd Font"; - package = pkgs.nerd-fonts.fira-code; + name = "Departure Mono Nerd Font"; + package = pkgs.nerd-fonts.departure-mono; } ]; extraConfig = "font-size=14"; diff --git a/modules/shell/zellij.nix b/modules/shell/zellij.nix deleted file mode 100644 index 9e24251..0000000 --- a/modules/shell/zellij.nix +++ /dev/null @@ -1,28 +0,0 @@ -{ - config, - lib, - ... -}: { - home-manager.users.jade = {pkgs, ...}: { - programs.zellij = { - enable = true; - settings = { - theme = "gruvbox-dark"; - themes.gruvbox-dark = { - fg = "#d5c4a1"; - bg = "#282828"; - black = "#3C3836"; - red = "#CC241D"; - green = "#98971A"; - yellow = "#D79921"; - blue = "#3C8588"; - magenta = "#B16286"; - cyan = "#689D6A"; - white = "#ebdbb2"; - orange = "#D65D0E"; - }; - pane_frames = false; - }; - }; - }; -} From f71fed2884f2ec8857c0bd59884be1b28049c581 Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Thu, 20 Mar 2025 17:27:45 +0100 Subject: [PATCH 237/301] fix eval warnings --- hosts/monosodium-glutamate-g/configuration.nix | 6 ------ hosts/monosodium-glutamate-g/modules/graphics.nix | 2 +- hosts/potatobook-g/configuration.nix | 14 -------------- modules/desktop-environment/home/layaway.nix | 3 ++- modules/input/evremap.nix | 5 +---- 5 files changed, 4 insertions(+), 26 deletions(-) diff --git a/hosts/monosodium-glutamate-g/configuration.nix b/hosts/monosodium-glutamate-g/configuration.nix index a418f74..c0bac2f 100644 --- a/hosts/monosodium-glutamate-g/configuration.nix +++ b/hosts/monosodium-glutamate-g/configuration.nix @@ -40,12 +40,6 @@ networking.hostName = "monosodium-glutamate-g"; services = { - xserver = { - layout = "us"; - xkbVariant = "altgr-intl"; - enable = true; - }; - openssh.settings.PermitRootLogin = "without-password"; blueman.enable = true; diff --git a/hosts/monosodium-glutamate-g/modules/graphics.nix b/hosts/monosodium-glutamate-g/modules/graphics.nix index 5732629..baa608b 100644 --- a/hosts/monosodium-glutamate-g/modules/graphics.nix +++ b/hosts/monosodium-glutamate-g/modules/graphics.nix @@ -1,6 +1,6 @@ {pkgs, ...}: { environment.systemPackages = [ - pkgs.nvtop-amd + pkgs.nvtopPackages.amd pkgs.radeontop pkgs.rgp ]; diff --git a/hosts/potatobook-g/configuration.nix b/hosts/potatobook-g/configuration.nix index 530f8db..6cbd34c 100644 --- a/hosts/potatobook-g/configuration.nix +++ b/hosts/potatobook-g/configuration.nix @@ -67,24 +67,10 @@ services.libinput.touchpad = { disableWhileTyping = true; - tapping = false; }; - networking.networkmanager.enable = true; networking.hostName = "potatobook-g"; - services.xserver = { - resolutions = [ - { - x = 1920; - y = 1200; - } - ]; - # dpi = 180; - layout = "us"; - xkbVariant = "altgr-intl"; - }; - services.autorandr = { enable = true; profiles = { diff --git a/modules/desktop-environment/home/layaway.nix b/modules/desktop-environment/home/layaway.nix index e0f45b5..ba0354f 100644 --- a/modules/desktop-environment/home/layaway.nix +++ b/modules/desktop-environment/home/layaway.nix @@ -15,7 +15,8 @@ hash = "sha256-SzAuVFEy56svasO3+1p6ysBRrIQd0UZX++/P4ZuwWm0="; }; - cargoHash = "sha256-liWP6AI72xG1O+MbCZ0cjJ2llHj/iv3hR/U3BLv5fKA="; + useFetchCargoVendor = true; + cargoHash = "sha256-QVxlkE+sq4U048LnshI/tq6HInKiSgjQLAdR+27/wEI="; meta = with lib; { description = "Layout creation for Sway via a relative and human-readable DSL."; diff --git a/modules/input/evremap.nix b/modules/input/evremap.nix index 24115de..05eb08f 100644 --- a/modules/input/evremap.nix +++ b/modules/input/evremap.nix @@ -14,11 +14,8 @@ rev = "4480c4eda223b98899b0fbd926bc34f7bd0e1a18"; sha256 = "sha256-BxSrphgW1n465FX6bKVkq6O0XE2JqanfSYlsGwWUWkQ="; }; + useFetchCargoVendor = true; cargoHash = ""; - cargoLock.lockFile = ../../other/evremap.Cargo.lock; - postPatch = '' - cp ${../../other/evremap.Cargo.lock} Cargo.lock - ''; nativeBuildInputs = [pkgs.pkg-config]; buildInputs = [pkgs.libevdev]; }; From 36c5ec22ae9887947116d87bdea86aeaca91e8f9 Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Thu, 20 Mar 2025 17:56:42 +0100 Subject: [PATCH 238/301] fix bat monitor --- .../home/eww/configDir/scripts/bat.nu | 34 ++++++++++++++++--- .../home/eww/configDir/topBar/sysinfo.yuck | 8 ++--- .../home/eww/configDir/topBar/topBar.yuck | 5 +-- 3 files changed, 33 insertions(+), 14 deletions(-) diff --git a/modules/desktop-environment/home/eww/configDir/scripts/bat.nu b/modules/desktop-environment/home/eww/configDir/scripts/bat.nu index fc2efae..690cca6 100755 --- a/modules/desktop-environment/home/eww/configDir/scripts/bat.nu +++ b/modules/desktop-environment/home/eww/configDir/scripts/bat.nu @@ -15,15 +15,41 @@ const ICONS = [ [ 󰁹 󰂅 ] ]; +const DELAY = 2sec; + +def "main auto" [] { + loop { + let paths = ls "/sys/class/power_supply" + | each {|it| $it.name | path basename} + | filter {|it| $it starts-with "BAT"}; + + if ($paths | is-not-empty) { + let result = $paths + | each {|it| get_and_format $it} + | prepend "" + | str join "|"; + + print $result + } else { + print "" + } + sleep $DELAY; + } +} + def main [ path: string ] { loop { + print (get_and_format $path) + sleep $DELAY; + } +} + +def get_and_format [ path: string ] { let fract = get_bat_charge_fraction $path; let is_charging = get_bat_charging_status $path; let percent = ($fract * 100) | math round; - - print $"(get_bat_icon $fract $is_charging) ($percent)%"; - sleep 2sec; - } + + return $"(get_bat_icon $fract $is_charging) ($percent)%"; } def get_bat_charge_fraction [ diff --git a/modules/desktop-environment/home/eww/configDir/topBar/sysinfo.yuck b/modules/desktop-environment/home/eww/configDir/topBar/sysinfo.yuck index 3cf8e2c..06a5635 100644 --- a/modules/desktop-environment/home/eww/configDir/topBar/sysinfo.yuck +++ b/modules/desktop-environment/home/eww/configDir/topBar/sysinfo.yuck @@ -1,10 +1,6 @@ -(deflisten bat0 +(deflisten bat :initial "BAT0 ERR" - { "~/.config/eww/scripts/bat.nu BAT0"} -) -(deflisten bat1 - :initial "BAT1 ERR" - { "~/.config/eww/scripts/bat.nu BAT1"} + { "~/.config/eww/scripts/bat.nu auto"} ) (defwidget cpu [] diff --git a/modules/desktop-environment/home/eww/configDir/topBar/topBar.yuck b/modules/desktop-environment/home/eww/configDir/topBar/topBar.yuck index a2135cc..6725623 100644 --- a/modules/desktop-environment/home/eww/configDir/topBar/topBar.yuck +++ b/modules/desktop-environment/home/eww/configDir/topBar/topBar.yuck @@ -27,10 +27,7 @@ (cpu) (sep) (mem) - (sep) - (label :markup bat0) - (sep) - (label :markup bat1) + (label :markup bat) ) (box :halign "center" From 768d17f0774c5347d33e159bdc8eb877e5cfe4d4 Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Thu, 20 Mar 2025 18:11:47 +0100 Subject: [PATCH 239/301] fix spacing --- .../desktop-environment/home/eww/configDir/scripts/bat.nu | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/modules/desktop-environment/home/eww/configDir/scripts/bat.nu b/modules/desktop-environment/home/eww/configDir/scripts/bat.nu index 690cca6..9abc988 100755 --- a/modules/desktop-environment/home/eww/configDir/scripts/bat.nu +++ b/modules/desktop-environment/home/eww/configDir/scripts/bat.nu @@ -26,8 +26,9 @@ def "main auto" [] { if ($paths | is-not-empty) { let result = $paths | each {|it| get_and_format $it} - | prepend "" - | str join "|"; + | str join " | " + | prepend "| " + | str join; print $result } else { From 66ca973686cd6c7e6037cfbe120abc2c44d91970 Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Thu, 20 Mar 2025 18:12:08 +0100 Subject: [PATCH 240/301] add evremap hash and remove lockfile --- modules/input/evremap.nix | 2 +- other/evremap.Cargo.lock | 693 -------------------------------------- 2 files changed, 1 insertion(+), 694 deletions(-) delete mode 100644 other/evremap.Cargo.lock diff --git a/modules/input/evremap.nix b/modules/input/evremap.nix index 05eb08f..18d644e 100644 --- a/modules/input/evremap.nix +++ b/modules/input/evremap.nix @@ -15,7 +15,7 @@ sha256 = "sha256-BxSrphgW1n465FX6bKVkq6O0XE2JqanfSYlsGwWUWkQ="; }; useFetchCargoVendor = true; - cargoHash = ""; + cargoHash = "sha256-O1rJ48m8Q7kZABw/UNpmUT7FFBWQedo6CuV+NX9kDt8="; nativeBuildInputs = [pkgs.pkg-config]; buildInputs = [pkgs.libevdev]; }; diff --git a/other/evremap.Cargo.lock b/other/evremap.Cargo.lock deleted file mode 100644 index f9e7e9b..0000000 --- a/other/evremap.Cargo.lock +++ /dev/null @@ -1,693 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 3 - -[[package]] -name = "aho-corasick" -version = "0.7.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4f55bd91a0978cbfd91c457a164bab8b4001c833b7f323132c0a4e1922dd44e" -dependencies = [ - "memchr", -] - -[[package]] -name = "android_system_properties" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" -dependencies = [ - "libc", -] - -[[package]] -name = "ansi_term" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2" -dependencies = [ - "winapi", -] - -[[package]] -name = "anyhow" -version = "1.0.65" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "98161a4e3e2184da77bb14f02184cdd111e83bbbcc9979dfee3c44b9a85f5602" - -[[package]] -name = "atty" -version = "0.2.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8" -dependencies = [ - "hermit-abi", - "libc", - "winapi", -] - -[[package]] -name = "autocfg" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" - -[[package]] -name = "bitflags" -version = "1.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" - -[[package]] -name = "bumpalo" -version = "3.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1ad822118d20d2c234f427000d5acc36eabe1e29a348c89b63dd60b13f28e5d" - -[[package]] -name = "cc" -version = "1.0.73" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2fff2a6927b3bb87f9595d67196a70493f627687a71d87a0d692242c33f58c11" - -[[package]] -name = "cfg-if" -version = "0.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822" - -[[package]] -name = "cfg-if" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" - -[[package]] -name = "chrono" -version = "0.4.22" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfd4d1b31faaa3a89d7934dbded3111da0d2ef28e3ebccdb4f0179f5929d1ef1" -dependencies = [ - "iana-time-zone", - "js-sys", - "num-integer", - "num-traits", - "time", - "wasm-bindgen", - "winapi", -] - -[[package]] -name = "clap" -version = "2.34.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a0610544180c38b88101fecf2dd634b174a62eef6946f84dfc6a7127512b381c" -dependencies = [ - "ansi_term", - "atty", - "bitflags", - "strsim", - "textwrap", - "unicode-width", - "vec_map", -] - -[[package]] -name = "codespan-reporting" -version = "0.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3538270d33cc669650c4b093848450d380def10c331d38c768e34cac80576e6e" -dependencies = [ - "termcolor", - "unicode-width", -] - -[[package]] -name = "core-foundation-sys" -version = "0.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5827cebf4670468b8772dd191856768aedcb1b0278a04f989f7766351917b9dc" - -[[package]] -name = "cxx" -version = "1.0.79" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f83d0ebf42c6eafb8d7c52f7e5f2d3003b89c7aa4fd2b79229209459a849af8" -dependencies = [ - "cc", - "cxxbridge-flags", - "cxxbridge-macro", - "link-cplusplus", -] - -[[package]] -name = "cxx-build" -version = "1.0.79" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07d050484b55975889284352b0ffc2ecbda25c0c55978017c132b29ba0818a86" -dependencies = [ - "cc", - "codespan-reporting", - "once_cell", - "proc-macro2", - "quote", - "scratch", - "syn", -] - -[[package]] -name = "cxxbridge-flags" -version = "1.0.79" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "99d2199b00553eda8012dfec8d3b1c75fce747cf27c169a270b3b99e3448ab78" - -[[package]] -name = "cxxbridge-macro" -version = "1.0.79" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcb67a6de1f602736dd7eaead0080cf3435df806c61b24b13328db128c58868f" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "env_logger" -version = "0.6.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aafcde04e90a5226a6443b7aabdb016ba2f8307c847d524724bd9b346dd1a2d3" -dependencies = [ - "atty", - "humantime", - "log", - "regex", - "termcolor", -] - -[[package]] -name = "evdev-rs" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95f73dad019df28348aad51f059684bdf628822325c26d34fbe126e513369799" -dependencies = [ - "bitflags", - "evdev-sys", - "libc", - "log", - "nix", -] - -[[package]] -name = "evdev-sys" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14ead42b547b15d47089c1243d907bcf0eb94e457046d3b315a26ac9c9e9ea6d" -dependencies = [ - "cc", - "libc", - "pkg-config", -] - -[[package]] -name = "evremap" -version = "0.1.0" -dependencies = [ - "anyhow", - "evdev-rs", - "libc", - "log", - "pretty_env_logger", - "serde", - "structopt", - "thiserror", - "toml", -] - -[[package]] -name = "heck" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d621efb26863f0e9924c6ac577e8275e5e6b77455db64ffa6c65c904e9e132c" -dependencies = [ - "unicode-segmentation", -] - -[[package]] -name = "hermit-abi" -version = "0.1.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33" -dependencies = [ - "libc", -] - -[[package]] -name = "humantime" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df004cfca50ef23c36850aaaa59ad52cc70d0e90243c3c7737a4dd32dc7a3c4f" -dependencies = [ - "quick-error", -] - -[[package]] -name = "iana-time-zone" -version = "0.1.51" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f5a6ef98976b22b3b7f2f3a806f858cb862044cfa66805aa3ad84cb3d3b785ed" -dependencies = [ - "android_system_properties", - "core-foundation-sys", - "iana-time-zone-haiku", - "js-sys", - "wasm-bindgen", - "winapi", -] - -[[package]] -name = "iana-time-zone-haiku" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0703ae284fc167426161c2e3f1da3ea71d94b21bedbcc9494e92b28e334e3dca" -dependencies = [ - "cxx", - "cxx-build", -] - -[[package]] -name = "js-sys" -version = "0.3.60" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49409df3e3bf0856b916e2ceaca09ee28e6871cf7d9ce97a692cacfdb2a25a47" -dependencies = [ - "wasm-bindgen", -] - -[[package]] -name = "lazy_static" -version = "1.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" - -[[package]] -name = "libc" -version = "0.2.135" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68783febc7782c6c5cb401fbda4de5a9898be1762314da0bb2c10ced61f18b0c" - -[[package]] -name = "link-cplusplus" -version = "1.0.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9272ab7b96c9046fbc5bc56c06c117cb639fe2d509df0c421cad82d2915cf369" -dependencies = [ - "cc", -] - -[[package]] -name = "log" -version = "0.4.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e" -dependencies = [ - "cfg-if 1.0.0", -] - -[[package]] -name = "memchr" -version = "2.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" - -[[package]] -name = "nix" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4dbdc256eaac2e3bd236d93ad999d3479ef775c863dbda3068c4006a92eec51b" -dependencies = [ - "bitflags", - "cc", - "cfg-if 0.1.10", - "libc", - "void", -] - -[[package]] -name = "num-integer" -version = "0.1.45" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9" -dependencies = [ - "autocfg", - "num-traits", -] - -[[package]] -name = "num-traits" -version = "0.2.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd" -dependencies = [ - "autocfg", -] - -[[package]] -name = "once_cell" -version = "1.15.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e82dad04139b71a90c080c8463fe0dc7902db5192d939bd0950f074d014339e1" - -[[package]] -name = "pkg-config" -version = "0.3.25" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1df8c4ec4b0627e53bdf214615ad287367e482558cf84b109250b37464dc03ae" - -[[package]] -name = "pretty_env_logger" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "717ee476b1690853d222af4634056d830b5197ffd747726a9a1eee6da9f49074" -dependencies = [ - "chrono", - "env_logger", - "log", -] - -[[package]] -name = "proc-macro-error" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" -dependencies = [ - "proc-macro-error-attr", - "proc-macro2", - "quote", - "syn", - "version_check", -] - -[[package]] -name = "proc-macro-error-attr" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" -dependencies = [ - "proc-macro2", - "quote", - "version_check", -] - -[[package]] -name = "proc-macro2" -version = "1.0.47" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ea3d908b0e36316caf9e9e2c4625cdde190a7e6f440d794667ed17a1855e725" -dependencies = [ - "unicode-ident", -] - -[[package]] -name = "quick-error" -version = "1.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0" - -[[package]] -name = "quote" -version = "1.0.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbe448f377a7d6961e30f5955f9b8d106c3f5e449d493ee1b125c1d43c2b5179" -dependencies = [ - "proc-macro2", -] - -[[package]] -name = "regex" -version = "1.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c4eb3267174b8c6c2f654116623910a0fef09c4753f8dd83db29c48a0df988b" -dependencies = [ - "aho-corasick", - "memchr", - "regex-syntax", -] - -[[package]] -name = "regex-syntax" -version = "0.6.27" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3f87b73ce11b1619a3c6332f45341e0047173771e8b8b73f87bfeefb7b56244" - -[[package]] -name = "scratch" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c8132065adcfd6e02db789d9285a0deb2f3fcb04002865ab67d5fb103533898" - -[[package]] -name = "serde" -version = "1.0.145" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "728eb6351430bccb993660dfffc5a72f91ccc1295abaa8ce19b27ebe4f75568b" -dependencies = [ - "serde_derive", -] - -[[package]] -name = "serde_derive" -version = "1.0.145" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81fa1584d3d1bcacd84c277a0dfe21f5b0f6accf4a23d04d4c6d61f1af522b4c" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "strsim" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a" - -[[package]] -name = "structopt" -version = "0.3.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c6b5c64445ba8094a6ab0c3cd2ad323e07171012d9c98b0b15651daf1787a10" -dependencies = [ - "clap", - "lazy_static", - "structopt-derive", -] - -[[package]] -name = "structopt-derive" -version = "0.4.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcb5ae327f9cc13b68763b5749770cb9e048a99bd9dfdfa58d0cf05d5f64afe0" -dependencies = [ - "heck", - "proc-macro-error", - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "syn" -version = "1.0.102" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fcd952facd492f9be3ef0d0b7032a6e442ee9b361d4acc2b1d0c4aaa5f613a1" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] - -[[package]] -name = "termcolor" -version = "1.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bab24d30b911b2376f3a13cc2cd443142f0c81dda04c118693e35b3835757755" -dependencies = [ - "winapi-util", -] - -[[package]] -name = "textwrap" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060" -dependencies = [ - "unicode-width", -] - -[[package]] -name = "thiserror" -version = "1.0.37" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10deb33631e3c9018b9baf9dcbbc4f737320d2b576bac10f6aefa048fa407e3e" -dependencies = [ - "thiserror-impl", -] - -[[package]] -name = "thiserror-impl" -version = "1.0.37" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "982d17546b47146b28f7c22e3d08465f6b8903d0ea13c1660d9d84a6e7adcdbb" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "time" -version = "0.1.44" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6db9e6914ab8b1ae1c260a4ae7a49b6c5611b40328a735b21862567685e73255" -dependencies = [ - "libc", - "wasi", - "winapi", -] - -[[package]] -name = "toml" -version = "0.5.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d82e1a7758622a465f8cee077614c73484dac5b836c02ff6a40d5d1010324d7" -dependencies = [ - "serde", -] - -[[package]] -name = "unicode-ident" -version = "1.0.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ceab39d59e4c9499d4e5a8ee0e2735b891bb7308ac83dfb4e80cad195c9f6f3" - -[[package]] -name = "unicode-segmentation" -version = "1.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fdbf052a0783de01e944a6ce7a8cb939e295b1e7be835a1112c3b9a7f047a5a" - -[[package]] -name = "unicode-width" -version = "0.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b" - -[[package]] -name = "vec_map" -version = "0.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191" - -[[package]] -name = "version_check" -version = "0.9.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" - -[[package]] -name = "void" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d" - -[[package]] -name = "wasi" -version = "0.10.0+wasi-snapshot-preview1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a143597ca7c7793eff794def352d41792a93c481eb1042423ff7ff72ba2c31f" - -[[package]] -name = "wasm-bindgen" -version = "0.2.83" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eaf9f5aceeec8be17c128b2e93e031fb8a4d469bb9c4ae2d7dc1888b26887268" -dependencies = [ - "cfg-if 1.0.0", - "wasm-bindgen-macro", -] - -[[package]] -name = "wasm-bindgen-backend" -version = "0.2.83" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c8ffb332579b0557b52d268b91feab8df3615f265d5270fec2a8c95b17c1142" -dependencies = [ - "bumpalo", - "log", - "once_cell", - "proc-macro2", - "quote", - "syn", - "wasm-bindgen-shared", -] - -[[package]] -name = "wasm-bindgen-macro" -version = "0.2.83" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "052be0f94026e6cbc75cdefc9bae13fd6052cdcaf532fa6c45e7ae33a1e6c810" -dependencies = [ - "quote", - "wasm-bindgen-macro-support", -] - -[[package]] -name = "wasm-bindgen-macro-support" -version = "0.2.83" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07bc0c051dc5f23e307b13285f9d75df86bfdf816c5721e573dec1f9b8aa193c" -dependencies = [ - "proc-macro2", - "quote", - "syn", - "wasm-bindgen-backend", - "wasm-bindgen-shared", -] - -[[package]] -name = "wasm-bindgen-shared" -version = "0.2.83" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c38c045535d93ec4f0b4defec448e4291638ee608530863b1e2ba115d4fff7f" - -[[package]] -name = "winapi" -version = "0.3.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" -dependencies = [ - "winapi-i686-pc-windows-gnu", - "winapi-x86_64-pc-windows-gnu", -] - -[[package]] -name = "winapi-i686-pc-windows-gnu" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" - -[[package]] -name = "winapi-util" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178" -dependencies = [ - "winapi", -] - -[[package]] -name = "winapi-x86_64-pc-windows-gnu" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" From 2da9d27e545845a233000d5fdf8730fee88734bf Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Fri, 21 Mar 2025 13:42:18 +0100 Subject: [PATCH 241/301] fix printing lmao --- modules/desktop-environment/default.nix | 1 + modules/desktop-environment/printing.nix | 3 +-- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/desktop-environment/default.nix b/modules/desktop-environment/default.nix index 51d9ee6..ef44236 100644 --- a/modules/desktop-environment/default.nix +++ b/modules/desktop-environment/default.nix @@ -8,6 +8,7 @@ ./dm.nix ./tlp.nix ./locale.nix + ./printing.nix ]; services.flatpak.enable = true; security.polkit.enable = true; diff --git a/modules/desktop-environment/printing.nix b/modules/desktop-environment/printing.nix index 006ea0b..3233279 100644 --- a/modules/desktop-environment/printing.nix +++ b/modules/desktop-environment/printing.nix @@ -11,10 +11,9 @@ ptouch-driver epsonscan2 epson-escpr - epson-inkjet-printer-escpr2 + epson-escpr2 epson_201207w epson-alc1100 - epson ]; }; } From 07a58afaff73f025bd4a027b78e9a8215716e8c8 Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Fri, 21 Mar 2025 14:15:12 +0100 Subject: [PATCH 242/301] improve flip-bool --- modules/shell/helix.nix | 2 +- programs/flip-bool/src/main.rs | 27 ++++++++++++--------------- 2 files changed, 13 insertions(+), 16 deletions(-) diff --git a/modules/shell/helix.nix b/modules/shell/helix.nix index d24aa16..adfda34 100644 --- a/modules/shell/helix.nix +++ b/modules/shell/helix.nix @@ -102,7 +102,7 @@ d = "@vgd"; f = "@vgy"; h = ":toggle-option lsp.display-inlay-hints"; - t = "@|flip-bool"; + t = ":pipe flip-bool"; }; }; insert = { diff --git a/programs/flip-bool/src/main.rs b/programs/flip-bool/src/main.rs index 299685f..0b99ab8 100644 --- a/programs/flip-bool/src/main.rs +++ b/programs/flip-bool/src/main.rs @@ -4,7 +4,6 @@ #![feature(pattern)] use std::{ - hint::black_box, io::{Read, Write}, str::pattern::Pattern, }; @@ -86,29 +85,27 @@ fn find_bools(input: &str) -> [[Vec; 2]; BOOL_COUNT] { input .match_indices(it) .filter_map(|it| { - let char_guard = |c: char| !(c.is_alphanumeric() || c.is_contained_in("-_")); - let mut allow = true; + fn char_guard(c: char) -> bool { + !(c.is_alphanumeric() || c.is_contained_in("-_")) + } - if it.0 > 0 { - allow &= char_guard( + let last_idx = it.0 + it.1.len(); + + (it.0 > 0 + && last_idx < input.len() + && char_guard( input[it.1.floor_char_boundary(it.0 - 1)..it.0] .chars() .last() .unwrap(), - ); - } - - let last_idx = it.0 + it.1.len(); - if last_idx < input.len() { - allow &= char_guard( + ) + && char_guard( input[(last_idx)..(input.ceil_char_boundary(last_idx + 1))] .chars() .last() .unwrap(), - ); - } - - allow.then_some(it.0) + )) + .then_some(it.0) }) .collect() }) From 3ac8ca1f5efc4a3adb205e9aaa3e5d82ce7dea7a Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Wed, 26 Mar 2025 23:25:25 +0100 Subject: [PATCH 243/301] rust stuff(tm) --- flake.nix | 10 ---------- programs/flip-bool/src/main.rs | 20 +++++++------------- 2 files changed, 7 insertions(+), 23 deletions(-) diff --git a/flake.nix b/flake.nix index 8f30908..e5c7897 100644 --- a/flake.nix +++ b/flake.nix @@ -54,18 +54,8 @@ combine [ complete.toolchain ]; - # rs-platform = pkgs.makeRustPlatform { - # cargo = rs-toolchain; - # rustc = rs-toolchain; - # }; crane-lib = (crane.mkLib nixpkgs.legacyPackages.${system}).overrideToolchain rs-toolchain; rs-programs = final: prev: { - # s10e-jrnl = rs-platform.buildRustPackage { - # pname = "jrnl"; - # version = "0.0.1"; - # src = ./programs/jrnl; - # cargoLock.lockFile = ./programs/jrnl/Cargo.lock; - # }; s10e-jrnl = crane-lib.buildPackage { pname = "s10e-bs"; version = "0.0.1"; diff --git a/programs/flip-bool/src/main.rs b/programs/flip-bool/src/main.rs index 0b99ab8..8062888 100644 --- a/programs/flip-bool/src/main.rs +++ b/programs/flip-bool/src/main.rs @@ -1,7 +1,4 @@ -#![feature(iter_array_chunks)] -#![feature(round_char_boundary)] -#![feature(iter_collect_into)] -#![feature(pattern)] +#![feature(pattern, iter_array_chunks, round_char_boundary, iter_collect_into)] use std::{ io::{Read, Write}, @@ -17,17 +14,16 @@ const BOOLS: &[[&str; 2]] = &[ ["no", "yes"], ]; -fn main() { +fn main() -> std::io::Result<()> { let mut input = String::new(); let mut stdin = std::io::stdin(); let mut stdout = std::io::stdout(); - stdin.read_to_string(&mut input).unwrap(); + stdin.read_to_string(&mut input)?; let bool_locs = find_bools(&input); - stdout - .write_all(replace_bools(&mut input, bool_locs).as_bytes()) - .unwrap(); + + stdout.write_all(replace_bools(&mut input, bool_locs).as_bytes()) } type BoolLocs = [[Vec; 2]; BOOL_COUNT]; @@ -96,14 +92,12 @@ fn find_bools(input: &str) -> [[Vec; 2]; BOOL_COUNT] { && char_guard( input[it.1.floor_char_boundary(it.0 - 1)..it.0] .chars() - .last() - .unwrap(), + .last()?, ) && char_guard( input[(last_idx)..(input.ceil_char_boundary(last_idx + 1))] .chars() - .last() - .unwrap(), + .last()?, )) .then_some(it.0) }) From 66c22f7a137484e644c17b2e7380f41b44506787 Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Wed, 26 Mar 2025 23:25:41 +0100 Subject: [PATCH 244/301] add fluent reader --- modules/desktop-environment/home/default.nix | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/modules/desktop-environment/home/default.nix b/modules/desktop-environment/home/default.nix index 06847ca..690a915 100644 --- a/modules/desktop-environment/home/default.nix +++ b/modules/desktop-environment/home/default.nix @@ -1,6 +1,6 @@ {...}: { programs.niri.enable = true; - home-manager.users.jade = {...}: { + home-manager.users.jade = {pkgs, ...}: { imports = [ ./notifications.nix ./terminal.nix @@ -17,6 +17,10 @@ services.network-manager-applet.enable = true; xsession.enable = true; + home.packages = [ + pkgs.fluent-reader + ]; + services.gpg-agent = { enable = true; enableNushellIntegration = true; From 2b8634a56ae15dca3cc3a3e8e6338206085cbcbd Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Wed, 26 Mar 2025 23:25:55 +0100 Subject: [PATCH 245/301] workspace moves from shift to ctrl mod --- .../desktop-environment/home/niri/binds.nix | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/modules/desktop-environment/home/niri/binds.nix b/modules/desktop-environment/home/niri/binds.nix index f0d3f62..df6fbc2 100644 --- a/modules/desktop-environment/home/niri/binds.nix +++ b/modules/desktop-environment/home/niri/binds.nix @@ -54,15 +54,15 @@ "Mod+7".action.focus-workspace = 7; "Mod+8".action.focus-workspace = 8; "Mod+9".action.focus-workspace = 9; - "Mod+Shift+1".action.move-column-to-workspace = 1; - "Mod+Shift+2".action.move-column-to-workspace = 2; - "Mod+Shift+3".action.move-column-to-workspace = 3; - "Mod+Shift+4".action.move-column-to-workspace = 4; - "Mod+Shift+5".action.move-column-to-workspace = 5; - "Mod+Shift+6".action.move-column-to-workspace = 6; - "Mod+Shift+7".action.move-column-to-workspace = 7; - "Mod+Shift+8".action.move-column-to-workspace = 8; - "Mod+Shift+9".action.move-column-to-workspace = 9; + "Mod+Ctrl+1".action.move-column-to-workspace = 1; + "Mod+Ctrl+2".action.move-column-to-workspace = 2; + "Mod+Ctrl+3".action.move-column-to-workspace = 3; + "Mod+Ctrl+4".action.move-column-to-workspace = 4; + "Mod+Ctrl+5".action.move-column-to-workspace = 5; + "Mod+Ctrl+6".action.move-column-to-workspace = 6; + "Mod+Ctrl+7".action.move-column-to-workspace = 7; + "Mod+Ctrl+8".action.move-column-to-workspace = 8; + "Mod+Ctrl+9".action.move-column-to-workspace = 9; # column editing stuffs "Mod+BracketLeft".action.consume-or-expel-window-left = []; From 38ace717a728d8042a34683742915623a2a337b6 Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Wed, 26 Mar 2025 23:29:13 +0100 Subject: [PATCH 246/301] add yet another alias --- modules/shell/nu/aliases.nu | 2 ++ 1 file changed, 2 insertions(+) diff --git a/modules/shell/nu/aliases.nu b/modules/shell/nu/aliases.nu index 3d6bfab..3643f48 100644 --- a/modules/shell/nu/aliases.nu +++ b/modules/shell/nu/aliases.nu @@ -16,6 +16,8 @@ alias cl = cargo clippy; alias cb = cargo build; alias cch = cargo check; +alias jb = just build; + alias togglecaps = xdotool key Caps_Lock; alias TOGGLECAPS = togglecaps; From 2de0639d54e3c24a813e432cfa25eb4d8302cd58 Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Thu, 27 Mar 2025 00:06:06 +0100 Subject: [PATCH 247/301] remove xdg portal conf bc that, apparently, works better --- modules/desktop-environment/default.nix | 1 - modules/desktop-environment/xdg-portals.nix | 17 ----------------- 2 files changed, 18 deletions(-) delete mode 100644 modules/desktop-environment/xdg-portals.nix diff --git a/modules/desktop-environment/default.nix b/modules/desktop-environment/default.nix index ef44236..bfd7fde 100644 --- a/modules/desktop-environment/default.nix +++ b/modules/desktop-environment/default.nix @@ -2,7 +2,6 @@ imports = [ ./audio.nix ./eduroam.nix - ./xdg-portals.nix ./home ./media ./dm.nix diff --git a/modules/desktop-environment/xdg-portals.nix b/modules/desktop-environment/xdg-portals.nix deleted file mode 100644 index a15033a..0000000 --- a/modules/desktop-environment/xdg-portals.nix +++ /dev/null @@ -1,17 +0,0 @@ -{pkgs, ...}: { - services.gnome.gnome-keyring.enable = true; - xdg.portal = { - enable = true; - - config.common = { - default = ["gtk"]; - "org.freedesktop.impl.portal.Screencast" = ["gnome"]; - "org.freedesktop.impl.portal.Secret" = ["gnome-keyring"]; - }; - - extraPortals = [ - pkgs.xdg-desktop-portal-gnome - pkgs.xdg-desktop-portal-gtk - ]; - }; -} From 0162bcefd3609a30b0f606303807006e92988159 Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Thu, 27 Mar 2025 01:54:57 +0100 Subject: [PATCH 248/301] add privacy screenshare blocking settings --- .../desktop-environment/home/niri/default.nix | 1 + .../desktop-environment/home/niri/privacy.nix | 21 +++++++++++++++++++ 2 files changed, 22 insertions(+) create mode 100644 modules/desktop-environment/home/niri/privacy.nix diff --git a/modules/desktop-environment/home/niri/default.nix b/modules/desktop-environment/home/niri/default.nix index 8b80d13..d8db4c2 100644 --- a/modules/desktop-environment/home/niri/default.nix +++ b/modules/desktop-environment/home/niri/default.nix @@ -5,6 +5,7 @@ ./input.nix ./binds.nix ./style.nix + ./privacy.nix ]; programs.niri.settings = { outputs."eDP-1" = { diff --git a/modules/desktop-environment/home/niri/privacy.nix b/modules/desktop-environment/home/niri/privacy.nix new file mode 100644 index 0000000..1d4fbee --- /dev/null +++ b/modules/desktop-environment/home/niri/privacy.nix @@ -0,0 +1,21 @@ +{...}: { + programs.niri.settings = { + layer-rules = [ + { + matches = [ + {namespace = "notifications";} + ]; + block-out-from = "screen-capture"; + } + ]; + window-rules = [ + { + matches = [ + {app-id = "^signal|Element|org\.gnome\.Evolution$";} + {title = "^.*(Discord|Beispiel Screenshare block Bug).*$";} + ]; + block-out-from = "screen-capture"; + } + ]; + }; +} From ab35ec8d34bee2ea710af1719fc10cea24cbb097 Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Thu, 27 Mar 2025 01:55:30 +0100 Subject: [PATCH 249/301] every sufficiently advanced software project will eventually develop a quirks file. --- .../desktop-environment/home/niri/default.nix | 16 +--------------- modules/desktop-environment/home/niri/quirks.nix | 16 ++++++++++++++++ 2 files changed, 17 insertions(+), 15 deletions(-) create mode 100644 modules/desktop-environment/home/niri/quirks.nix diff --git a/modules/desktop-environment/home/niri/default.nix b/modules/desktop-environment/home/niri/default.nix index d8db4c2..b812229 100644 --- a/modules/desktop-environment/home/niri/default.nix +++ b/modules/desktop-environment/home/niri/default.nix @@ -6,6 +6,7 @@ ./binds.nix ./style.nix ./privacy.nix + ./quirks.nix ]; programs.niri.settings = { outputs."eDP-1" = { @@ -26,20 +27,5 @@ ]; } ]; - - window-rules = [ - # TODO: privacy screen rules - { - matches = [ - { - app-id = "steam"; - } - ]; - open-focused = false; - } - ]; - - # fix electron apps not doing wayland - environment.ELECTRON_OZONE_PLATFORM_HINT = "auto"; }; } diff --git a/modules/desktop-environment/home/niri/quirks.nix b/modules/desktop-environment/home/niri/quirks.nix new file mode 100644 index 0000000..ce67532 --- /dev/null +++ b/modules/desktop-environment/home/niri/quirks.nix @@ -0,0 +1,16 @@ +{...}: { + window-rules = [ + # handle steam grabbing focus 1000 times on startup + { + matches = [ + { + app-id = "steam"; + } + ]; + open-focused = false; + } + ]; + + # fix electron apps not doing wayland + environment.ELECTRON_OZONE_PLATFORM_HINT = "auto"; +} From 4c74dd5024d92b47625e3fa7d5dcfcf84a00e360 Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Thu, 27 Mar 2025 01:55:37 +0100 Subject: [PATCH 250/301] formatting --- modules/desktop-environment/home/niri/default.nix | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/modules/desktop-environment/home/niri/default.nix b/modules/desktop-environment/home/niri/default.nix index b812229..f038aee 100644 --- a/modules/desktop-environment/home/niri/default.nix +++ b/modules/desktop-environment/home/niri/default.nix @@ -14,9 +14,7 @@ }; spawn-at-startup = [ - { - command = ["eww" "open-many" "topBar" "bottomBar"]; - } + {command = ["eww" "open-many" "topBar" "bottomBar"];} { command = [ "${pkgs.swaybg}/bin/swaybg" From ac251e6d90ade52fb8e6bba18aa61dc9b3e064d9 Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Thu, 27 Mar 2025 01:57:44 +0100 Subject: [PATCH 251/301] start mullvad thing --- .../eww/configDir/bottomBar/bottomBar.yuck | 22 ++++++++++++++----- .../home/eww/configDir/eww.css | 16 ++++++++++++++ 2 files changed, 33 insertions(+), 5 deletions(-) diff --git a/modules/desktop-environment/home/eww/configDir/bottomBar/bottomBar.yuck b/modules/desktop-environment/home/eww/configDir/bottomBar/bottomBar.yuck index fd0bcbe..d955d31 100644 --- a/modules/desktop-environment/home/eww/configDir/bottomBar/bottomBar.yuck +++ b/modules/desktop-environment/home/eww/configDir/bottomBar/bottomBar.yuck @@ -29,7 +29,7 @@ (box :halign "end" ; (label :text "${iceData.speed}km/h") - (iceTacho) + (mullvadThing) ) ) ) @@ -47,14 +47,26 @@ ) ) +(deflisten mullvad + :initial "{\"state\":\"init\"}" + `mullvad status -j listen` +) + +(defwidget mullvadThing [] + (box + :class "container" + (button + :height 16 + :width 16 + :class "mullvad-state-${mullvad.state}" + ) + ) +) + (defwidget iceTacho [] (box :class "iceTacho" :tooltip "Tz${iceTachoData.tzn} (BR ${iceTachoData.br})" - (circular-progress - :value { iceTachoData.frac * 60 + 20 } - :thickness 3 - ) (label :text "${iceTachoData.speed} km/h") ) ) diff --git a/modules/desktop-environment/home/eww/configDir/eww.css b/modules/desktop-environment/home/eww/configDir/eww.css index 81a6604..2d36825 100644 --- a/modules/desktop-environment/home/eww/configDir/eww.css +++ b/modules/desktop-environment/home/eww/configDir/eww.css @@ -33,4 +33,20 @@ label { .traveldingsWindow { border-radius: 15px; +} + +.mullvad-state-connected { + background-color: #98971a +} + +.mullvad-state-connecting { + background-color: #d79921 +} + +.mullvad-state-disconnected { + background-color: #cc241d +} + +.mullvad-state-init { + background-color: #458588 } \ No newline at end of file From 4488cbcf1b05590c5877f0407c298a241cc30393 Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Thu, 27 Mar 2025 02:56:33 +0100 Subject: [PATCH 252/301] fix quirks.nix --- .../desktop-environment/home/niri/quirks.nix | 28 ++++++++++--------- 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/modules/desktop-environment/home/niri/quirks.nix b/modules/desktop-environment/home/niri/quirks.nix index ce67532..9f92af1 100644 --- a/modules/desktop-environment/home/niri/quirks.nix +++ b/modules/desktop-environment/home/niri/quirks.nix @@ -1,16 +1,18 @@ {...}: { - window-rules = [ - # handle steam grabbing focus 1000 times on startup - { - matches = [ - { - app-id = "steam"; - } - ]; - open-focused = false; - } - ]; + programs.niri.settings = { + window-rules = [ + # handle steam grabbing focus 1000 times on startup + { + matches = [ + { + app-id = "steam"; + } + ]; + open-focused = false; + } + ]; - # fix electron apps not doing wayland - environment.ELECTRON_OZONE_PLATFORM_HINT = "auto"; + # fix electron apps not doing wayland + environment.ELECTRON_OZONE_PLATFORM_HINT = "auto"; + }; } From 63493fd3667adcd7dab21927b1b80b161faa2209 Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Thu, 27 Mar 2025 19:02:45 +0100 Subject: [PATCH 253/301] stylix (untested) --- flake.lock | 443 +++++++++++++++++- flake.nix | 5 + modules/desktop-environment/default.nix | 1 + modules/desktop-environment/home/terminal.nix | 36 +- modules/desktop-environment/stylix.nix | 27 ++ modules/desktop/themeing.nix | 39 +- modules/shell/helix.nix | 2 +- modules/shell/tty.nix | 50 +- 8 files changed, 537 insertions(+), 66 deletions(-) create mode 100644 modules/desktop-environment/stylix.nix diff --git a/flake.lock b/flake.lock index be42a05..81b1fc3 100644 --- a/flake.lock +++ b/flake.lock @@ -1,5 +1,72 @@ { "nodes": { + "base16": { + "inputs": { + "fromYaml": "fromYaml" + }, + "locked": { + "lastModified": 1732200724, + "narHash": "sha256-+R1BH5wHhfnycySb7Sy5KbYEaTJZWm1h+LW1OtyhiTs=", + "owner": "SenchoPens", + "repo": "base16.nix", + "rev": "153d52373b0fb2d343592871009a286ec8837aec", + "type": "github" + }, + "original": { + "owner": "SenchoPens", + "repo": "base16.nix", + "type": "github" + } + }, + "base16-fish": { + "flake": false, + "locked": { + "lastModified": 1622559957, + "narHash": "sha256-PebymhVYbL8trDVVXxCvZgc0S5VxI7I1Hv4RMSquTpA=", + "owner": "tomyun", + "repo": "base16-fish", + "rev": "2f6dd973a9075dabccd26f1cded09508180bf5fe", + "type": "github" + }, + "original": { + "owner": "tomyun", + "repo": "base16-fish", + "type": "github" + } + }, + "base16-helix": { + "flake": false, + "locked": { + "lastModified": 1736852337, + "narHash": "sha256-esD42YdgLlEh7koBrSqcT7p2fsMctPAcGl/+2sYJa2o=", + "owner": "tinted-theming", + "repo": "base16-helix", + "rev": "03860521c40b0b9c04818f2218d9cc9efc21e7a5", + "type": "github" + }, + "original": { + "owner": "tinted-theming", + "repo": "base16-helix", + "type": "github" + } + }, + "base16-vim": { + "flake": false, + "locked": { + "lastModified": 1732806396, + "narHash": "sha256-e0bpPySdJf0F68Ndanwm+KWHgQiZ0s7liLhvJSWDNsA=", + "owner": "tinted-theming", + "repo": "base16-vim", + "rev": "577fe8125d74ff456cf942c733a85d769afe58b7", + "type": "github" + }, + "original": { + "owner": "tinted-theming", + "repo": "base16-vim", + "rev": "577fe8125d74ff456cf942c733a85d769afe58b7", + "type": "github" + } + }, "crane": { "locked": { "lastModified": 1742394900, @@ -73,7 +140,60 @@ "type": "github" } }, + "firefox-gnome-theme": { + "flake": false, + "locked": { + "lastModified": 1741628778, + "narHash": "sha256-RsvHGNTmO2e/eVfgYK7g+eYEdwwh7SbZa+gZkT24MEA=", + "owner": "rafaelmardojai", + "repo": "firefox-gnome-theme", + "rev": "5a81d390bb64afd4e81221749ec4bffcbeb5fa80", + "type": "github" + }, + "original": { + "owner": "rafaelmardojai", + "repo": "firefox-gnome-theme", + "type": "github" + } + }, + "flake-compat": { + "locked": { + "lastModified": 1733328505, + "narHash": "sha256-NeCCThCEP3eCl2l/+27kNNK7QrwZB1IJCrXfrbv5oqU=", + "owner": "edolstra", + "repo": "flake-compat", + "rev": "ff81ac966bb2cae68946d5ed5fc4994f96d0ffec", + "type": "github" + }, + "original": { + "owner": "edolstra", + "repo": "flake-compat", + "type": "github" + } + }, "flake-parts": { + "inputs": { + "nixpkgs-lib": [ + "stylix", + "nur", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1733312601, + "narHash": "sha256-4pDvzqnegAfRkPwO3wmwBhVi/Sye1mzps0zHWYnP88c=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "205b12d8b7cd4802fbcb8e8ef6a0f1408781a4f9", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "flake-parts_2": { "inputs": { "nixpkgs-lib": "nixpkgs-lib" }, @@ -109,6 +229,27 @@ "type": "github" } }, + "flake-utils_2": { + "inputs": { + "systems": [ + "stylix", + "systems" + ] + }, + "locked": { + "lastModified": 1731533236, + "narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "11707dc2f618dd54ca8739b309ec4fc024de578b", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, "flakey-profile": { "locked": { "lastModified": 1712898590, @@ -124,6 +265,87 @@ "type": "github" } }, + "fromYaml": { + "flake": false, + "locked": { + "lastModified": 1731966426, + "narHash": "sha256-lq95WydhbUTWig/JpqiB7oViTcHFP8Lv41IGtayokA8=", + "owner": "SenchoPens", + "repo": "fromYaml", + "rev": "106af9e2f715e2d828df706c386a685698f3223b", + "type": "github" + }, + "original": { + "owner": "SenchoPens", + "repo": "fromYaml", + "type": "github" + } + }, + "git-hooks": { + "inputs": { + "flake-compat": [ + "stylix", + "flake-compat" + ], + "gitignore": "gitignore", + "nixpkgs": [ + "stylix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1741379162, + "narHash": "sha256-srpAbmJapkaqGRE3ytf3bj4XshspVR5964OX5LfjDWc=", + "owner": "cachix", + "repo": "git-hooks.nix", + "rev": "b5a62751225b2f62ff3147d0a334055ebadcd5cc", + "type": "github" + }, + "original": { + "owner": "cachix", + "repo": "git-hooks.nix", + "type": "github" + } + }, + "gitignore": { + "inputs": { + "nixpkgs": [ + "stylix", + "git-hooks", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1709087332, + "narHash": "sha256-HG2cCnktfHsKV0s4XW83gU3F57gaTljL9KNSuG6bnQs=", + "owner": "hercules-ci", + "repo": "gitignore.nix", + "rev": "637db329424fd7e46cf4185293b9cc8c88c95394", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "gitignore.nix", + "type": "github" + } + }, + "gnome-shell": { + "flake": false, + "locked": { + "lastModified": 1732369855, + "narHash": "sha256-JhUWbcYPjHO3Xs3x9/Z9RuqXbcp5yhPluGjwsdE2GMg=", + "owner": "GNOME", + "repo": "gnome-shell", + "rev": "dadd58f630eeea41d645ee225a63f719390829dc", + "type": "github" + }, + "original": { + "owner": "GNOME", + "ref": "47.2", + "repo": "gnome-shell", + "type": "github" + } + }, "home-manager": { "inputs": { "nixpkgs": [ @@ -144,6 +366,27 @@ "type": "github" } }, + "home-manager_2": { + "inputs": { + "nixpkgs": [ + "stylix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1741635347, + "narHash": "sha256-2aYfV44h18alHXopyfL4D9GsnpE5XlSVkp4MGe586VU=", + "owner": "nix-community", + "repo": "home-manager", + "rev": "7fb8678716c158642ac42f9ff7a18c0800fea551", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "home-manager", + "type": "github" + } + }, "lix": { "flake": false, "locked": { @@ -356,6 +599,22 @@ } }, "nixpkgs_3": { + "locked": { + "lastModified": 1741513245, + "narHash": "sha256-7rTAMNTY1xoBwz0h7ZMtEcd8LELk9R5TzBPoHuhNSCk=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "e3e32b642a31e6714ec1b712de8c91a3352ce7e1", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_4": { "locked": { "lastModified": 1726937504, "narHash": "sha256-bvGoiQBvponpZh8ClUcmJ6QnsNKw0EMrCQJARK3bI1c=", @@ -371,6 +630,29 @@ "type": "github" } }, + "nur": { + "inputs": { + "flake-parts": "flake-parts", + "nixpkgs": [ + "stylix", + "nixpkgs" + ], + "treefmt-nix": "treefmt-nix" + }, + "locked": { + "lastModified": 1741693509, + "narHash": "sha256-emkxnsZstiJWmGACimyAYqIKz2Qz5We5h1oBVDyQjLw=", + "owner": "nix-community", + "repo": "NUR", + "rev": "5479646b2574837f1899da78bdf9a48b75a9fb27", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "NUR", + "type": "github" + } + }, "root": { "inputs": { "crane": "crane", @@ -383,6 +665,7 @@ "nixpkgs": "nixpkgs_2", "nixpkgs-stable": "nixpkgs-stable_2", "nixpkgs-unstable-small": "nixpkgs-unstable-small", + "stylix": "stylix", "typst-within": "typst-within" } }, @@ -432,6 +715,41 @@ "url": "https://static.rust-lang.org/dist/channel-rust-1.83.0.toml" } }, + "stylix": { + "inputs": { + "base16": "base16", + "base16-fish": "base16-fish", + "base16-helix": "base16-helix", + "base16-vim": "base16-vim", + "firefox-gnome-theme": "firefox-gnome-theme", + "flake-compat": "flake-compat", + "flake-utils": "flake-utils_2", + "git-hooks": "git-hooks", + "gnome-shell": "gnome-shell", + "home-manager": "home-manager_2", + "nixpkgs": "nixpkgs_3", + "nur": "nur", + "systems": "systems_2", + "tinted-foot": "tinted-foot", + "tinted-kitty": "tinted-kitty", + "tinted-schemes": "tinted-schemes", + "tinted-tmux": "tinted-tmux", + "tinted-zed": "tinted-zed" + }, + "locked": { + "lastModified": 1743075971, + "narHash": "sha256-8fSI6C19ZTcHgvoLK17wfEEVI08tgnZfSLgVe3E/22w=", + "owner": "danth", + "repo": "stylix", + "rev": "2fb8321ea16c595e0208b22021ddaf1f471c634a", + "type": "github" + }, + "original": { + "owner": "danth", + "repo": "stylix", + "type": "github" + } + }, "systems": { "locked": { "lastModified": 1681028828, @@ -462,14 +780,133 @@ "type": "github" } }, + "systems_3": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + }, + "tinted-foot": { + "flake": false, + "locked": { + "lastModified": 1726913040, + "narHash": "sha256-+eDZPkw7efMNUf3/Pv0EmsidqdwNJ1TaOum6k7lngDQ=", + "owner": "tinted-theming", + "repo": "tinted-foot", + "rev": "fd1b924b6c45c3e4465e8a849e67ea82933fcbe4", + "type": "github" + }, + "original": { + "owner": "tinted-theming", + "repo": "tinted-foot", + "rev": "fd1b924b6c45c3e4465e8a849e67ea82933fcbe4", + "type": "github" + } + }, + "tinted-kitty": { + "flake": false, + "locked": { + "lastModified": 1716423189, + "narHash": "sha256-2xF3sH7UIwegn+2gKzMpFi3pk5DlIlM18+vj17Uf82U=", + "owner": "tinted-theming", + "repo": "tinted-kitty", + "rev": "eb39e141db14baef052893285df9f266df041ff8", + "type": "github" + }, + "original": { + "owner": "tinted-theming", + "repo": "tinted-kitty", + "rev": "eb39e141db14baef052893285df9f266df041ff8", + "type": "github" + } + }, + "tinted-schemes": { + "flake": false, + "locked": { + "lastModified": 1741468895, + "narHash": "sha256-YKM1RJbL68Yp2vESBqeZQBjTETXo8mCTTzLZyckCfZk=", + "owner": "tinted-theming", + "repo": "schemes", + "rev": "47c8c7726e98069cade5827e5fb2bfee02ce6991", + "type": "github" + }, + "original": { + "owner": "tinted-theming", + "repo": "schemes", + "type": "github" + } + }, + "tinted-tmux": { + "flake": false, + "locked": { + "lastModified": 1740877430, + "narHash": "sha256-zWcCXgdC4/owfH/eEXx26y5BLzTrefjtSLFHWVD5KxU=", + "owner": "tinted-theming", + "repo": "tinted-tmux", + "rev": "d48ee86394cbe45b112ba23ab63e33656090edb4", + "type": "github" + }, + "original": { + "owner": "tinted-theming", + "repo": "tinted-tmux", + "type": "github" + } + }, + "tinted-zed": { + "flake": false, + "locked": { + "lastModified": 1725758778, + "narHash": "sha256-8P1b6mJWyYcu36WRlSVbuj575QWIFZALZMTg5ID/sM4=", + "owner": "tinted-theming", + "repo": "base16-zed", + "rev": "122c9e5c0e6f27211361a04fae92df97940eccf9", + "type": "github" + }, + "original": { + "owner": "tinted-theming", + "repo": "base16-zed", + "type": "github" + } + }, + "treefmt-nix": { + "inputs": { + "nixpkgs": [ + "stylix", + "nur", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1733222881, + "narHash": "sha256-JIPcz1PrpXUCbaccEnrcUS8jjEb/1vJbZz5KkobyFdM=", + "owner": "numtide", + "repo": "treefmt-nix", + "rev": "49717b5af6f80172275d47a418c9719a31a78b53", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "treefmt-nix", + "type": "github" + } + }, "typst-within": { "inputs": { "crane": "crane_2", "fenix": "fenix_2", - "flake-parts": "flake-parts", - "nixpkgs": "nixpkgs_3", + "flake-parts": "flake-parts_2", + "nixpkgs": "nixpkgs_4", "rust-manifest": "rust-manifest", - "systems": "systems_2" + "systems": "systems_3" }, "locked": { "lastModified": 1739736913, diff --git a/flake.nix b/flake.nix index e5c7897..d9bca2e 100644 --- a/flake.nix +++ b/flake.nix @@ -6,6 +6,7 @@ nixpkgs-stable.url = "nixpkgs/nixos-24.11"; nixpkgs-unstable-small.url = "nixpkgs/nixos-unstable-small"; niri.url = "github:sodiboo/niri-flake"; + stylix.url = "github:danth/stylix"; typst-within = { url = "github:schrottkatze/typst"; }; @@ -42,6 +43,7 @@ nixos-hardware, mac-brcm-fw, niri, + stylix, fenix, crane, ... @@ -78,6 +80,7 @@ system = "x86_64-linux"; modules = [ inputs.niri.nixosModules.niri + stylix.nixosModules.stylix ./hosts/monosodium-glutamate-g/configuration.nix home-manager.nixosModules.home-manager { @@ -104,6 +107,7 @@ system = "x86_64-linux"; modules = [ inputs.niri.nixosModules.niri + stylix.nixosModules.stylix ./hosts/denkbrett/configuration.nix home-manager.nixosModules.home-manager { @@ -130,6 +134,7 @@ system = "x86_64-linux"; modules = [ inputs.niri.nixosModules.niri + stylix.nixosModules.stylix "${mac-brcm-fw}" ./hosts/potatobook-g/configuration.nix home-manager.nixosModules.home-manager diff --git a/modules/desktop-environment/default.nix b/modules/desktop-environment/default.nix index bfd7fde..4dc7928 100644 --- a/modules/desktop-environment/default.nix +++ b/modules/desktop-environment/default.nix @@ -8,6 +8,7 @@ ./tlp.nix ./locale.nix ./printing.nix + ./stylix.nix ]; services.flatpak.enable = true; security.polkit.enable = true; diff --git a/modules/desktop-environment/home/terminal.nix b/modules/desktop-environment/home/terminal.nix index 5b6427b..e050429 100644 --- a/modules/desktop-environment/home/terminal.nix +++ b/modules/desktop-environment/home/terminal.nix @@ -11,24 +11,24 @@ }; settings = rec { #adjust_column_width = "70%"; - color0 = "#282828"; - color8 = "#928374"; - color1 = "#cc241d"; - color9 = "#fb4934"; - color2 = "#98971a"; - color10 = "#b8bb26"; - color3 = "#d79921"; - color11 = "#fabd2f"; - color4 = "#458588"; - color12 = "#83a598"; - color5 = "#b16286"; - color13 = "#d3869b"; - color6 = "#689d6a"; - color14 = "#8ec07c"; - color7 = "#a89984"; - color15 = "#ebdbb2"; - foreground = color15; - background = "#1d2021"; + # color0 = "#282828"; + # color8 = "#928374"; + # color1 = "#cc241d"; + # color9 = "#fb4934"; + # color2 = "#98971a"; + # color10 = "#b8bb26"; + # color3 = "#d79921"; + # color11 = "#fabd2f"; + # color4 = "#458588"; + # color12 = "#83a598"; + # color5 = "#b16286"; + # color13 = "#d3869b"; + # color6 = "#689d6a"; + # color14 = "#8ec07c"; + # color7 = "#a89984"; + # color15 = "#ebdbb2"; + # foreground = color15; + # background = "#1d2021"; confirm_os_window_close = 0; hide_window_decorations = true; }; diff --git a/modules/desktop-environment/stylix.nix b/modules/desktop-environment/stylix.nix new file mode 100644 index 0000000..99ee80e --- /dev/null +++ b/modules/desktop-environment/stylix.nix @@ -0,0 +1,27 @@ +{pkgs, ...}: { + stylix = { + enable = true; + base16Scheme = "${pkgs.base16-schemes}/share/themes/gruvbox-dark-hard.yaml"; + fonts = { + serif = { + package = pkgs.libertine; + name = "Linux Libertine O"; + }; + + sansSerif = { + package = pkgs.b612; + name = "B612"; + }; + + monospace = { + package = pkgs.departure-mono; + name = "Departure Mono"; + }; + + emoji = { + package = pkgs.noto-fonts-emoji; + name = "Noto Color Emoji"; + }; + }; + }; +} diff --git a/modules/desktop/themeing.nix b/modules/desktop/themeing.nix index c5eb7d8..1803dc4 100644 --- a/modules/desktop/themeing.nix +++ b/modules/desktop/themeing.nix @@ -5,40 +5,41 @@ ... }: { config = { - fonts.packages = with pkgs; [ - atkinson-hyperlegible - ]; + # fonts.packages = with pkgs; [ + # atkinson-hyperlegible + # ]; home-manager.users.jade = {pkgs, ...}: { home.packages = with pkgs; [ - gtk-engine-murrine - gruvbox-dark-gtk + # gtk-engine-murrine + # gruvbox-dark-gtk gruvbox-dark-icons-gtk ]; gtk = { - enable = true; + # enable = true; cursorTheme = { package = pkgs.phinger-cursors; name = "phinger-cursors"; size = 30; }; - font = { - package = pkgs.atkinson-hyperlegible; - name = "Atkinson Hyperlegible"; - size = 11.5; - }; + # font = { + # package = pkgs.atkinson-hyperlegible; + # name = "Atkinson Hyperlegible"; + # size = 11.5; + # }; iconTheme = { package = pkgs.gruvbox-dark-icons-gtk; name = "gruvbox-dark-icons"; }; - theme = { - package = pkgs.gruvbox-dark-gtk; - name = "gruvbox-dark"; - }; - }; - qt = { - enable = true; - platformTheme.name = "gtk"; }; + # theme = { + # package = pkgs.gruvbox-dark-gtk; + # name = "gruvbox-dark"; + # }; + # }; + # qt = { + # enable = true; + # platformTheme.name = "gtk"; + # }; }; }; } diff --git a/modules/shell/helix.nix b/modules/shell/helix.nix index adfda34..90db752 100644 --- a/modules/shell/helix.nix +++ b/modules/shell/helix.nix @@ -21,7 +21,7 @@ enable = true; defaultEditor = true; settings = { - theme = "gruvbox_dark_hard"; + # theme = "gruvbox_dark_hard"; editor = { line-number = "relative"; bufferline = "multiple"; diff --git a/modules/shell/tty.nix b/modules/shell/tty.nix index ee05300..764d905 100644 --- a/modules/shell/tty.nix +++ b/modules/shell/tty.nix @@ -56,37 +56,37 @@ in { services.kmscon = { enable = true; - fonts = [ - { - name = "Departure Mono Nerd Font"; - package = pkgs.nerd-fonts.departure-mono; - } - ]; + # fonts = [ + # { + # name = "Departure Mono Nerd Font"; + # package = pkgs.nerd-fonts.departure-mono; + # } + # ]; extraConfig = "font-size=14"; # extraOptions = "--term xterm-256color"; extraOptions = generateOptions { xkb-layout = config.services.xserver.xkb.layout; xkb-variant = config.services.xserver.xkb.variant; - palette = "custom"; - palette-foreground = hexToOpt "#ebdbb2"; - palette-background = hexToOpt "#282828"; - palette-black = hexToOpt "#282828"; - palette-red = hexToOpt "#cc241d"; - palette-green = hexToOpt "#98971a"; - palette-yellow = hexToOpt "#d79921"; - palette-blue = hexToOpt "#458588"; - palette-magenta = hexToOpt "#b16286"; - palette-cyan = hexToOpt "#689d6a"; - palette-light-grey = hexToOpt "#a89984"; - palette-dark-grey = hexToOpt "#928374"; - palette-light-red = hexToOpt "#fb4934"; - palette-light-green = hexToOpt "#b8bb26"; - palette-light-yellow = hexToOpt "#fabd2f"; - palette-light-blue = hexToOpt "#83a598"; - palette-light-magenta = hexToOpt "#d3869b"; - palette-light-cyan = hexToOpt "#8ec07c"; - palette-white = hexToOpt "#ebdbb2"; + # palette = "custom"; + # palette-foreground = hexToOpt "#ebdbb2"; + # palette-background = hexToOpt "#282828"; + # palette-black = hexToOpt "#282828"; + # palette-red = hexToOpt "#cc241d"; + # palette-green = hexToOpt "#98971a"; + # palette-yellow = hexToOpt "#d79921"; + # palette-blue = hexToOpt "#458588"; + # palette-magenta = hexToOpt "#b16286"; + # palette-cyan = hexToOpt "#689d6a"; + # palette-light-grey = hexToOpt "#a89984"; + # palette-dark-grey = hexToOpt "#928374"; + # palette-light-red = hexToOpt "#fb4934"; + # palette-light-green = hexToOpt "#b8bb26"; + # palette-light-yellow = hexToOpt "#fabd2f"; + # palette-light-blue = hexToOpt "#83a598"; + # palette-light-magenta = hexToOpt "#d3869b"; + # palette-light-cyan = hexToOpt "#8ec07c"; + # palette-white = hexToOpt "#ebdbb2"; }; hwRender = true; }; From 5b7e15db6216f525151ec4b3fe905e1d4184f7f0 Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Thu, 27 Mar 2025 19:41:45 +0100 Subject: [PATCH 254/301] stylix (round 2) --- .../home/eww/configDir/eww.css | 6 +++ .../home/niri/screenshot.nix | 5 ++- modules/desktop-environment/home/terminal.nix | 44 +++++++++---------- modules/desktop-environment/stylix.nix | 23 ++++++++-- modules/shell/helix.nix | 2 +- 5 files changed, 51 insertions(+), 29 deletions(-) diff --git a/modules/desktop-environment/home/eww/configDir/eww.css b/modules/desktop-environment/home/eww/configDir/eww.css index 2d36825..90d015d 100644 --- a/modules/desktop-environment/home/eww/configDir/eww.css +++ b/modules/desktop-environment/home/eww/configDir/eww.css @@ -2,12 +2,18 @@ label { font: 14pt "Departure Mono Nerd Font"; } +button { + border-radius: 0px; + padding: 0; +} + .background { background-color: #1d2021; } .workspaces button { border: 0px; + padding: 0 3px; } .workspaces button.focused { diff --git a/modules/desktop-environment/home/niri/screenshot.nix b/modules/desktop-environment/home/niri/screenshot.nix index e39a0e9..bba65b2 100644 --- a/modules/desktop-environment/home/niri/screenshot.nix +++ b/modules/desktop-environment/home/niri/screenshot.nix @@ -4,7 +4,10 @@ binds = { "Print".action.screenshot = []; "Ctrl+Print".action.screenshot-screen = []; - "Alt+Print".action.screenshot-window = []; + "Shift+Print".action.screenshot-window = []; + "Mod+S".action.screenshot = []; + "Mod+Ctrl+S".action.screenshot-screen = []; + "Mod+Shift+S".action.screenshot-window = []; }; }; } diff --git a/modules/desktop-environment/home/terminal.nix b/modules/desktop-environment/home/terminal.nix index e050429..6b14f2e 100644 --- a/modules/desktop-environment/home/terminal.nix +++ b/modules/desktop-environment/home/terminal.nix @@ -1,34 +1,32 @@ {...}: { programs.kitty = { enable = true; - font = { - name = "Departure Mono Nerd Font"; - size = 12; - }; + font.size = 12; + font.name = "Departure Mono Nerd Font"; shellIntegration.enableFishIntegration = false; keybindings = { "ctrl+shift+n" = "new_os_window_with_cwd"; }; settings = rec { - #adjust_column_width = "70%"; - # color0 = "#282828"; - # color8 = "#928374"; - # color1 = "#cc241d"; - # color9 = "#fb4934"; - # color2 = "#98971a"; - # color10 = "#b8bb26"; - # color3 = "#d79921"; - # color11 = "#fabd2f"; - # color4 = "#458588"; - # color12 = "#83a598"; - # color5 = "#b16286"; - # color13 = "#d3869b"; - # color6 = "#689d6a"; - # color14 = "#8ec07c"; - # color7 = "#a89984"; - # color15 = "#ebdbb2"; - # foreground = color15; - # background = "#1d2021"; + adjust_column_width = "95%"; + color0 = "#282828"; + color8 = "#928374"; + color1 = "#cc241d"; + color9 = "#fb4934"; + color2 = "#98971a"; + color10 = "#b8bb26"; + color3 = "#d79921"; + color11 = "#fabd2f"; + color4 = "#458588"; + color12 = "#83a598"; + color5 = "#b16286"; + color13 = "#d3869b"; + color6 = "#689d6a"; + color14 = "#8ec07c"; + color7 = "#a89984"; + color15 = "#ebdbb2"; + foreground = color15; + background = "#1d2021"; confirm_os_window_close = 0; hide_window_decorations = true; }; diff --git a/modules/desktop-environment/stylix.nix b/modules/desktop-environment/stylix.nix index 99ee80e..4d2d991 100644 --- a/modules/desktop-environment/stylix.nix +++ b/modules/desktop-environment/stylix.nix @@ -1,6 +1,7 @@ {pkgs, ...}: { stylix = { enable = true; + polarity = "dark"; base16Scheme = "${pkgs.base16-schemes}/share/themes/gruvbox-dark-hard.yaml"; fonts = { serif = { @@ -9,13 +10,13 @@ }; sansSerif = { - package = pkgs.b612; - name = "B612"; + package = pkgs.atkinson-hyperlegible; + name = "Atkinson Hyperlegible"; }; monospace = { - package = pkgs.departure-mono; - name = "Departure Mono"; + package = pkgs.nerd-fonts.departure-mono; + name = "Departure Mono Nerd Font"; }; emoji = { @@ -24,4 +25,18 @@ }; }; }; + home-manager.users.jade = {pkgs, ...}: { + stylix.targets = { + firefox = { + profileNames = ["jade"]; + }; + helix.enable = false; + btop.enable = false; + nushell.enable = false; + starship.enable = false; + kitty.enable = false; + dunst.enable = false; + wofi.enable = false; + }; + }; } diff --git a/modules/shell/helix.nix b/modules/shell/helix.nix index 90db752..adfda34 100644 --- a/modules/shell/helix.nix +++ b/modules/shell/helix.nix @@ -21,7 +21,7 @@ enable = true; defaultEditor = true; settings = { - # theme = "gruvbox_dark_hard"; + theme = "gruvbox_dark_hard"; editor = { line-number = "relative"; bufferline = "multiple"; From 2de002ef1bfeb78d397842073f58480d13ebb491 Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Thu, 27 Mar 2025 19:57:34 +0100 Subject: [PATCH 255/301] remove dead code 1 (old themeing code) --- .../home/notifications.nix | 1 + modules/desktop/themeing.nix | 21 +------ modules/shell/tty.nix | 55 +------------------ 3 files changed, 3 insertions(+), 74 deletions(-) diff --git a/modules/desktop-environment/home/notifications.nix b/modules/desktop-environment/home/notifications.nix index 8c5f9aa..37390e9 100644 --- a/modules/desktop-environment/home/notifications.nix +++ b/modules/desktop-environment/home/notifications.nix @@ -14,6 +14,7 @@ foreground = "#ebdbb2"; frame_color = "#504945"; frame_width = 2; + font = "Atkinson Hyperlegible"; }; }; }; diff --git a/modules/desktop/themeing.nix b/modules/desktop/themeing.nix index 1803dc4..ad065df 100644 --- a/modules/desktop/themeing.nix +++ b/modules/desktop/themeing.nix @@ -5,41 +5,22 @@ ... }: { config = { - # fonts.packages = with pkgs; [ - # atkinson-hyperlegible - # ]; home-manager.users.jade = {pkgs, ...}: { home.packages = with pkgs; [ - # gtk-engine-murrine - # gruvbox-dark-gtk gruvbox-dark-icons-gtk ]; gtk = { - # enable = true; + enable = true; cursorTheme = { package = pkgs.phinger-cursors; name = "phinger-cursors"; size = 30; }; - # font = { - # package = pkgs.atkinson-hyperlegible; - # name = "Atkinson Hyperlegible"; - # size = 11.5; - # }; iconTheme = { package = pkgs.gruvbox-dark-icons-gtk; name = "gruvbox-dark-icons"; }; }; - # theme = { - # package = pkgs.gruvbox-dark-gtk; - # name = "gruvbox-dark"; - # }; - # }; - # qt = { - # enable = true; - # platformTheme.name = "gtk"; - # }; }; }; } diff --git a/modules/shell/tty.nix b/modules/shell/tty.nix index 764d905..becd7b0 100644 --- a/modules/shell/tty.nix +++ b/modules/shell/tty.nix @@ -1,10 +1,4 @@ -{ - pkgs, - config, - lib, - ... -}: let - # generate shell command options for kmscon fom an attrset +{config, ...}: let generateOptions = with builtins; ( opts: toString ( @@ -13,26 +7,6 @@ ) ) ); - # generate a hexadecimal number lookup table to get integers from them - hexLookupTable = with lib; (listToAttrs (genList (i: { - name = let - r = toHexString i; - in ( - # pad with 0 in front if only 1 digit - if (stringLength r) == 1 - then "0${r}" - else r - ); - value = toString i; - }) - 256)); - # "parse" hex color strings and convert them to kmscon options - hexToOpt = with lib; (color: - concatStringsSep "," [ - (getAttr (substring 1 2 (toUpper color)) hexLookupTable) - (getAttr (substring 3 2 (toUpper color)) hexLookupTable) - (getAttr (substring 5 2 (toUpper color)) hexLookupTable) - ]); in { # TODO: global colorscheme vars for everything console.colors = [ @@ -56,37 +30,10 @@ in { services.kmscon = { enable = true; - # fonts = [ - # { - # name = "Departure Mono Nerd Font"; - # package = pkgs.nerd-fonts.departure-mono; - # } - # ]; extraConfig = "font-size=14"; - # extraOptions = "--term xterm-256color"; extraOptions = generateOptions { xkb-layout = config.services.xserver.xkb.layout; xkb-variant = config.services.xserver.xkb.variant; - - # palette = "custom"; - # palette-foreground = hexToOpt "#ebdbb2"; - # palette-background = hexToOpt "#282828"; - # palette-black = hexToOpt "#282828"; - # palette-red = hexToOpt "#cc241d"; - # palette-green = hexToOpt "#98971a"; - # palette-yellow = hexToOpt "#d79921"; - # palette-blue = hexToOpt "#458588"; - # palette-magenta = hexToOpt "#b16286"; - # palette-cyan = hexToOpt "#689d6a"; - # palette-light-grey = hexToOpt "#a89984"; - # palette-dark-grey = hexToOpt "#928374"; - # palette-light-red = hexToOpt "#fb4934"; - # palette-light-green = hexToOpt "#b8bb26"; - # palette-light-yellow = hexToOpt "#fabd2f"; - # palette-light-blue = hexToOpt "#83a598"; - # palette-light-magenta = hexToOpt "#d3869b"; - # palette-light-cyan = hexToOpt "#8ec07c"; - # palette-white = hexToOpt "#ebdbb2"; }; hwRender = true; }; From 6ec141902ac0cf5c1f178811ce6737cb52ff7cda Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Thu, 27 Mar 2025 19:59:18 +0100 Subject: [PATCH 256/301] remove old commented out code (pixiecore, utils, xenia kernel) --- hosts/potatobook-g/configuration.nix | 64 ---------------------------- modules/utils.nix | 56 ------------------------ 2 files changed, 120 deletions(-) delete mode 100644 modules/utils.nix diff --git a/hosts/potatobook-g/configuration.nix b/hosts/potatobook-g/configuration.nix index 6cbd34c..11e0641 100644 --- a/hosts/potatobook-g/configuration.nix +++ b/hosts/potatobook-g/configuration.nix @@ -11,33 +11,8 @@ ./hardware-configuration.nix ../../common.nix ../../modules - #inputs.mms.module ]; - #nixpkgs = { - #overlays = [ - #(self: super: { - #linux_zen_xeniafied = pkgs.linuxPackagesFor (pkgs.linuxKernel.kernels.linux_zen.override { - #structuredExtraConfig = with lib.kernel; { - ##"FB" = yes; - ##"FRAMEBUFFER_CONSOLE" = yes; - ##"VGA_CONSOLE" = yes; - ##"VIDEO_SELECT" = yes; - #LOGO = lib.mkForce yes; - #LOGO_LINUX_CLUT224 = yes; - #}; - #ignoreConfigErrors = true; - #}); - #}) - #]; - #}; - #boot.kernelPatches = [ - #{ - #name = "fomx"; - #patch = ../other/0001-fomx.patch; - #} - #]; - boot.binfmt.emulatedSystems = ["aarch64-linux"]; jade = { @@ -59,7 +34,6 @@ "/".options = ["compress=zstd:3"]; "/home".options = ["compress=zstd:3"]; "/nix".options = ["compress=zstd:3" "noatime"]; - #"/swap".options = [ "noatime" ]; }; boot.loader.systemd-boot.enable = true; @@ -85,7 +59,6 @@ }; }; - # hardware.keyboard.uhk.enable = true; hardware.enableRedistributableFirmware = true; environment.systemPackages = with pkgs; [ @@ -106,43 +79,6 @@ systemd.services."NetworkManager-wait-online".enable = false; - # services.pixiecore = - # let - # nixpkgs = builtins.getFlake "nixpkgs/nixos-unstable"; - # sys = nixpkgs.lib.nixosSystem { - # system = "x86_64-linux"; - # modules = [ - # ({config, pkgs, lib, modulesPath, ...}: { - # imports = [ - # (modulesPath + "/installer/netboot/netboot-base.nix") - # ]; - - # services.getty.autologinUser = lib.mkForce "root"; - # console.keyMap = "de"; - - # system.stateVersion = config.system.nixos.release; - # environment.systemPackages = with pkgs; [ - # helix nil git neofetch - # ]; - - # programs = { - # zsh = { - # enable = true; - # enableCompletion = true; - # }; - # }; - # }) - # ]; - # }; - # build = sys.config.system.build; - # in { - # enable = true; - # openFirewall = true; - # kernel = "${build.kernel}/bzImage"; - # initrd = "${build.netbootRamdisk}/initrd"; - # cmdLine = "init=${build.toplevel}/init loglevel=4"; - # }; - systemd.services = { create-swapfile = { serviceConfig.Type = "oneshot"; diff --git a/modules/utils.nix b/modules/utils.nix deleted file mode 100644 index 1de413c..0000000 --- a/modules/utils.nix +++ /dev/null @@ -1,56 +0,0 @@ -{ - pkgs, - lib, -}: rec { - # taken from https://github.com/NixOS/nixpkgs/blob/3650808d85dccbfa3be3d785dfd3ce33a757bd2c/pkgs/build-support/trivial-builders/default.nix#L335 - writeNuShellApplication = { - name, - text, - runtimeInputs ? [], - meta ? {}, - checkPhase ? null, - }: - writeTextFile { - inherit name meta; - executable = true; - destination = "/bin/${name}"; - allowSubstitutes = true; - preferLocalBuild = false; - text = - '' - #!${pkgs.nushell} - '' - + lib.optionalString (runtimeInputs != []) '' - - $env.PATH = ($env.PATH | split row (char esep) | prepend '${lib.makeBinPath runtimeInputs}'); - '' - + '' - - ${text} - ''; - - checkPhase = - # GHC (=> shellcheck) isn't supported on some platforms (such as risc-v) - # but we still want to use writeShellApplication on those platforms - if checkPhase == null - then '' - runHook preCheck - - nu -c "nu-check -d $target" - - runHook postCheck - '' - else checkPhase; - }; - packageNushellApplication = { - name, - path, - runtimeInputs ? [], - meta ? {}, - checkPhase ? null, - }: - writeNuShellApplication { - inherit name runtimeInputs meta checkPhase; - text = builtins.readFile path; - }; -} From 8b6d55aad6ef6516939948a6af316590aabfc867 Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Thu, 27 Mar 2025 20:02:54 +0100 Subject: [PATCH 257/301] more themeing stuff --- modules/desktop-environment/default.nix | 2 +- .../{stylix.nix => themeing.nix} | 13 ++++++++++ modules/desktop/themeing.nix | 26 ------------------- 3 files changed, 14 insertions(+), 27 deletions(-) rename modules/desktop-environment/{stylix.nix => themeing.nix} (78%) delete mode 100644 modules/desktop/themeing.nix diff --git a/modules/desktop-environment/default.nix b/modules/desktop-environment/default.nix index 4dc7928..11b2941 100644 --- a/modules/desktop-environment/default.nix +++ b/modules/desktop-environment/default.nix @@ -8,7 +8,7 @@ ./tlp.nix ./locale.nix ./printing.nix - ./stylix.nix + ./themeing.nix ]; services.flatpak.enable = true; security.polkit.enable = true; diff --git a/modules/desktop-environment/stylix.nix b/modules/desktop-environment/themeing.nix similarity index 78% rename from modules/desktop-environment/stylix.nix rename to modules/desktop-environment/themeing.nix index 4d2d991..9b9a414 100644 --- a/modules/desktop-environment/stylix.nix +++ b/modules/desktop-environment/themeing.nix @@ -39,4 +39,17 @@ wofi.enable = false; }; }; + + gtk = { + enable = true; + cursorTheme = { + package = pkgs.phinger-cursors; + name = "phinger-cursors"; + size = 30; + }; + iconTheme = { + package = pkgs.gruvbox-dark-icons-gtk; + name = "gruvbox-dark-icons"; + }; + }; } diff --git a/modules/desktop/themeing.nix b/modules/desktop/themeing.nix deleted file mode 100644 index ad065df..0000000 --- a/modules/desktop/themeing.nix +++ /dev/null @@ -1,26 +0,0 @@ -{ - config, - lib, - pkgs, - ... -}: { - config = { - home-manager.users.jade = {pkgs, ...}: { - home.packages = with pkgs; [ - gruvbox-dark-icons-gtk - ]; - gtk = { - enable = true; - cursorTheme = { - package = pkgs.phinger-cursors; - name = "phinger-cursors"; - size = 30; - }; - iconTheme = { - package = pkgs.gruvbox-dark-icons-gtk; - name = "gruvbox-dark-icons"; - }; - }; - }; - }; -} From 9379b9c61b46e8053cc4bd9b6e31f548aac3e7d7 Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Thu, 27 Mar 2025 20:03:07 +0100 Subject: [PATCH 258/301] remove autorandr from old laptop --- hosts/potatobook-g/configuration.nix | 18 ------------------ 1 file changed, 18 deletions(-) diff --git a/hosts/potatobook-g/configuration.nix b/hosts/potatobook-g/configuration.nix index 11e0641..db0f132 100644 --- a/hosts/potatobook-g/configuration.nix +++ b/hosts/potatobook-g/configuration.nix @@ -45,26 +45,8 @@ networking.hostName = "potatobook-g"; - services.autorandr = { - enable = true; - profiles = { - "default" = { - config = { - "eDP-1" = { - enable = true; - mode = "1920x1200"; - }; - }; - }; - }; - }; - hardware.enableRedistributableFirmware = true; - environment.systemPackages = with pkgs; [ - android-tools - ]; - environment.pathsToLink = [ "/share/nix-direnv" ]; From 49298541e53bc0ef43b7ff6cd8f64a98d3b112ee Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Thu, 27 Mar 2025 20:06:54 +0100 Subject: [PATCH 259/301] do some moving --- modules/{desktop-environment => de}/audio.nix | 0 .../{desktop-environment => de}/default.nix | 1 - modules/{desktop-environment => de}/dm.nix | 0 .../{desktop-environment => de}/eduroam.nix | 0 .../home/browser.nix | 0 .../home/default.nix | 0 .../eww/configDir/bottomBar/bottomBar.yuck | 0 .../eww/configDir/bottomBar/traveldings.yuck | 0 .../eww/configDir/bottomBar/workspaces.yuck | 0 .../home/eww/configDir/eww.css | 0 .../home/eww/configDir/eww.yuck | 0 .../home/eww/configDir/scripts/bat.nu | 0 .../home/eww/configDir/scripts/iceTacho.nu | 0 .../home/eww/configDir/topBar/sysinfo.yuck | 0 .../home/eww/configDir/topBar/time.yuck | 0 .../home/eww/configDir/topBar/topBar.yuck | 0 .../home/eww/configDir/util.yuck | 0 .../home/eww/default.nix | 0 .../home/layaway.nix | 0 .../home/niri/binds.nix | 0 .../home/niri/default.nix | 0 .../home/niri/input.nix | 0 .../home/niri/privacy.nix | 0 .../home/niri/quirks.nix | 0 .../home/niri/screenshot.nix | 0 .../home/niri/style.nix | 0 .../home/niri/xwayland-sat.nix | 0 .../home/notifications.nix | 0 .../home/swayidle.nix | 0 .../home/terminal.nix | 0 .../{desktop-environment => de}/locale.nix | 0 .../{desktop-environment => de}/printing.nix | 0 .../{desktop-environment => de}/themeing.nix | 23 +++++++++---------- modules/{desktop-environment => de}/tlp.nix | 0 modules/default.nix | 3 ++- modules/desktop/default.nix | 2 -- .../media/default.nix | 0 .../{desktop-environment => }/media/fonts.nix | 0 .../{desktop-environment => }/media/obs.nix | 0 .../{desktop-environment => }/media/typst.nix | 0 40 files changed, 13 insertions(+), 16 deletions(-) rename modules/{desktop-environment => de}/audio.nix (100%) rename modules/{desktop-environment => de}/default.nix (96%) rename modules/{desktop-environment => de}/dm.nix (100%) rename modules/{desktop-environment => de}/eduroam.nix (100%) rename modules/{desktop-environment => de}/home/browser.nix (100%) rename modules/{desktop-environment => de}/home/default.nix (100%) rename modules/{desktop-environment => de}/home/eww/configDir/bottomBar/bottomBar.yuck (100%) rename modules/{desktop-environment => de}/home/eww/configDir/bottomBar/traveldings.yuck (100%) rename modules/{desktop-environment => de}/home/eww/configDir/bottomBar/workspaces.yuck (100%) rename modules/{desktop-environment => de}/home/eww/configDir/eww.css (100%) rename modules/{desktop-environment => de}/home/eww/configDir/eww.yuck (100%) rename modules/{desktop-environment => de}/home/eww/configDir/scripts/bat.nu (100%) rename modules/{desktop-environment => de}/home/eww/configDir/scripts/iceTacho.nu (100%) rename modules/{desktop-environment => de}/home/eww/configDir/topBar/sysinfo.yuck (100%) rename modules/{desktop-environment => de}/home/eww/configDir/topBar/time.yuck (100%) rename modules/{desktop-environment => de}/home/eww/configDir/topBar/topBar.yuck (100%) rename modules/{desktop-environment => de}/home/eww/configDir/util.yuck (100%) rename modules/{desktop-environment => de}/home/eww/default.nix (100%) rename modules/{desktop-environment => de}/home/layaway.nix (100%) rename modules/{desktop-environment => de}/home/niri/binds.nix (100%) rename modules/{desktop-environment => de}/home/niri/default.nix (100%) rename modules/{desktop-environment => de}/home/niri/input.nix (100%) rename modules/{desktop-environment => de}/home/niri/privacy.nix (100%) rename modules/{desktop-environment => de}/home/niri/quirks.nix (100%) rename modules/{desktop-environment => de}/home/niri/screenshot.nix (100%) rename modules/{desktop-environment => de}/home/niri/style.nix (100%) rename modules/{desktop-environment => de}/home/niri/xwayland-sat.nix (100%) rename modules/{desktop-environment => de}/home/notifications.nix (100%) rename modules/{desktop-environment => de}/home/swayidle.nix (100%) rename modules/{desktop-environment => de}/home/terminal.nix (100%) rename modules/{desktop-environment => de}/locale.nix (100%) rename modules/{desktop-environment => de}/printing.nix (100%) rename modules/{desktop-environment => de}/themeing.nix (78%) rename modules/{desktop-environment => de}/tlp.nix (100%) rename modules/{desktop-environment => }/media/default.nix (100%) rename modules/{desktop-environment => }/media/fonts.nix (100%) rename modules/{desktop-environment => }/media/obs.nix (100%) rename modules/{desktop-environment => }/media/typst.nix (100%) diff --git a/modules/desktop-environment/audio.nix b/modules/de/audio.nix similarity index 100% rename from modules/desktop-environment/audio.nix rename to modules/de/audio.nix diff --git a/modules/desktop-environment/default.nix b/modules/de/default.nix similarity index 96% rename from modules/desktop-environment/default.nix rename to modules/de/default.nix index 11b2941..3370088 100644 --- a/modules/desktop-environment/default.nix +++ b/modules/de/default.nix @@ -3,7 +3,6 @@ ./audio.nix ./eduroam.nix ./home - ./media ./dm.nix ./tlp.nix ./locale.nix diff --git a/modules/desktop-environment/dm.nix b/modules/de/dm.nix similarity index 100% rename from modules/desktop-environment/dm.nix rename to modules/de/dm.nix diff --git a/modules/desktop-environment/eduroam.nix b/modules/de/eduroam.nix similarity index 100% rename from modules/desktop-environment/eduroam.nix rename to modules/de/eduroam.nix diff --git a/modules/desktop-environment/home/browser.nix b/modules/de/home/browser.nix similarity index 100% rename from modules/desktop-environment/home/browser.nix rename to modules/de/home/browser.nix diff --git a/modules/desktop-environment/home/default.nix b/modules/de/home/default.nix similarity index 100% rename from modules/desktop-environment/home/default.nix rename to modules/de/home/default.nix diff --git a/modules/desktop-environment/home/eww/configDir/bottomBar/bottomBar.yuck b/modules/de/home/eww/configDir/bottomBar/bottomBar.yuck similarity index 100% rename from modules/desktop-environment/home/eww/configDir/bottomBar/bottomBar.yuck rename to modules/de/home/eww/configDir/bottomBar/bottomBar.yuck diff --git a/modules/desktop-environment/home/eww/configDir/bottomBar/traveldings.yuck b/modules/de/home/eww/configDir/bottomBar/traveldings.yuck similarity index 100% rename from modules/desktop-environment/home/eww/configDir/bottomBar/traveldings.yuck rename to modules/de/home/eww/configDir/bottomBar/traveldings.yuck diff --git a/modules/desktop-environment/home/eww/configDir/bottomBar/workspaces.yuck b/modules/de/home/eww/configDir/bottomBar/workspaces.yuck similarity index 100% rename from modules/desktop-environment/home/eww/configDir/bottomBar/workspaces.yuck rename to modules/de/home/eww/configDir/bottomBar/workspaces.yuck diff --git a/modules/desktop-environment/home/eww/configDir/eww.css b/modules/de/home/eww/configDir/eww.css similarity index 100% rename from modules/desktop-environment/home/eww/configDir/eww.css rename to modules/de/home/eww/configDir/eww.css diff --git a/modules/desktop-environment/home/eww/configDir/eww.yuck b/modules/de/home/eww/configDir/eww.yuck similarity index 100% rename from modules/desktop-environment/home/eww/configDir/eww.yuck rename to modules/de/home/eww/configDir/eww.yuck diff --git a/modules/desktop-environment/home/eww/configDir/scripts/bat.nu b/modules/de/home/eww/configDir/scripts/bat.nu similarity index 100% rename from modules/desktop-environment/home/eww/configDir/scripts/bat.nu rename to modules/de/home/eww/configDir/scripts/bat.nu diff --git a/modules/desktop-environment/home/eww/configDir/scripts/iceTacho.nu b/modules/de/home/eww/configDir/scripts/iceTacho.nu similarity index 100% rename from modules/desktop-environment/home/eww/configDir/scripts/iceTacho.nu rename to modules/de/home/eww/configDir/scripts/iceTacho.nu diff --git a/modules/desktop-environment/home/eww/configDir/topBar/sysinfo.yuck b/modules/de/home/eww/configDir/topBar/sysinfo.yuck similarity index 100% rename from modules/desktop-environment/home/eww/configDir/topBar/sysinfo.yuck rename to modules/de/home/eww/configDir/topBar/sysinfo.yuck diff --git a/modules/desktop-environment/home/eww/configDir/topBar/time.yuck b/modules/de/home/eww/configDir/topBar/time.yuck similarity index 100% rename from modules/desktop-environment/home/eww/configDir/topBar/time.yuck rename to modules/de/home/eww/configDir/topBar/time.yuck diff --git a/modules/desktop-environment/home/eww/configDir/topBar/topBar.yuck b/modules/de/home/eww/configDir/topBar/topBar.yuck similarity index 100% rename from modules/desktop-environment/home/eww/configDir/topBar/topBar.yuck rename to modules/de/home/eww/configDir/topBar/topBar.yuck diff --git a/modules/desktop-environment/home/eww/configDir/util.yuck b/modules/de/home/eww/configDir/util.yuck similarity index 100% rename from modules/desktop-environment/home/eww/configDir/util.yuck rename to modules/de/home/eww/configDir/util.yuck diff --git a/modules/desktop-environment/home/eww/default.nix b/modules/de/home/eww/default.nix similarity index 100% rename from modules/desktop-environment/home/eww/default.nix rename to modules/de/home/eww/default.nix diff --git a/modules/desktop-environment/home/layaway.nix b/modules/de/home/layaway.nix similarity index 100% rename from modules/desktop-environment/home/layaway.nix rename to modules/de/home/layaway.nix diff --git a/modules/desktop-environment/home/niri/binds.nix b/modules/de/home/niri/binds.nix similarity index 100% rename from modules/desktop-environment/home/niri/binds.nix rename to modules/de/home/niri/binds.nix diff --git a/modules/desktop-environment/home/niri/default.nix b/modules/de/home/niri/default.nix similarity index 100% rename from modules/desktop-environment/home/niri/default.nix rename to modules/de/home/niri/default.nix diff --git a/modules/desktop-environment/home/niri/input.nix b/modules/de/home/niri/input.nix similarity index 100% rename from modules/desktop-environment/home/niri/input.nix rename to modules/de/home/niri/input.nix diff --git a/modules/desktop-environment/home/niri/privacy.nix b/modules/de/home/niri/privacy.nix similarity index 100% rename from modules/desktop-environment/home/niri/privacy.nix rename to modules/de/home/niri/privacy.nix diff --git a/modules/desktop-environment/home/niri/quirks.nix b/modules/de/home/niri/quirks.nix similarity index 100% rename from modules/desktop-environment/home/niri/quirks.nix rename to modules/de/home/niri/quirks.nix diff --git a/modules/desktop-environment/home/niri/screenshot.nix b/modules/de/home/niri/screenshot.nix similarity index 100% rename from modules/desktop-environment/home/niri/screenshot.nix rename to modules/de/home/niri/screenshot.nix diff --git a/modules/desktop-environment/home/niri/style.nix b/modules/de/home/niri/style.nix similarity index 100% rename from modules/desktop-environment/home/niri/style.nix rename to modules/de/home/niri/style.nix diff --git a/modules/desktop-environment/home/niri/xwayland-sat.nix b/modules/de/home/niri/xwayland-sat.nix similarity index 100% rename from modules/desktop-environment/home/niri/xwayland-sat.nix rename to modules/de/home/niri/xwayland-sat.nix diff --git a/modules/desktop-environment/home/notifications.nix b/modules/de/home/notifications.nix similarity index 100% rename from modules/desktop-environment/home/notifications.nix rename to modules/de/home/notifications.nix diff --git a/modules/desktop-environment/home/swayidle.nix b/modules/de/home/swayidle.nix similarity index 100% rename from modules/desktop-environment/home/swayidle.nix rename to modules/de/home/swayidle.nix diff --git a/modules/desktop-environment/home/terminal.nix b/modules/de/home/terminal.nix similarity index 100% rename from modules/desktop-environment/home/terminal.nix rename to modules/de/home/terminal.nix diff --git a/modules/desktop-environment/locale.nix b/modules/de/locale.nix similarity index 100% rename from modules/desktop-environment/locale.nix rename to modules/de/locale.nix diff --git a/modules/desktop-environment/printing.nix b/modules/de/printing.nix similarity index 100% rename from modules/desktop-environment/printing.nix rename to modules/de/printing.nix diff --git a/modules/desktop-environment/themeing.nix b/modules/de/themeing.nix similarity index 78% rename from modules/desktop-environment/themeing.nix rename to modules/de/themeing.nix index 9b9a414..3cc2047 100644 --- a/modules/desktop-environment/themeing.nix +++ b/modules/de/themeing.nix @@ -38,18 +38,17 @@ dunst.enable = false; wofi.enable = false; }; - }; - - gtk = { - enable = true; - cursorTheme = { - package = pkgs.phinger-cursors; - name = "phinger-cursors"; - size = 30; - }; - iconTheme = { - package = pkgs.gruvbox-dark-icons-gtk; - name = "gruvbox-dark-icons"; + gtk = { + enable = true; + cursorTheme = { + package = pkgs.phinger-cursors; + name = "phinger-cursors"; + size = 30; + }; + iconTheme = { + package = pkgs.gruvbox-dark-icons-gtk; + name = "gruvbox-dark-icons"; + }; }; }; } diff --git a/modules/desktop-environment/tlp.nix b/modules/de/tlp.nix similarity index 100% rename from modules/desktop-environment/tlp.nix rename to modules/de/tlp.nix diff --git a/modules/default.nix b/modules/default.nix index afe2abc..2abba8e 100644 --- a/modules/default.nix +++ b/modules/default.nix @@ -4,8 +4,9 @@ ./desktop ./hardware ./firewall.nix - ./desktop-environment + ./de ./input + ./media ./graphics.nix ]; } diff --git a/modules/desktop/default.nix b/modules/desktop/default.nix index a069ad7..7213f3b 100644 --- a/modules/desktop/default.nix +++ b/modules/desktop/default.nix @@ -7,10 +7,8 @@ with lib; { imports = [ ./gaming.nix - # TODO: more fine grained choices, not every setup needs fspy or rawtherapee ./syncthing.nix ./kdeconnect.nix - ./themeing.nix ./networking.nix ./social.nix ]; diff --git a/modules/desktop-environment/media/default.nix b/modules/media/default.nix similarity index 100% rename from modules/desktop-environment/media/default.nix rename to modules/media/default.nix diff --git a/modules/desktop-environment/media/fonts.nix b/modules/media/fonts.nix similarity index 100% rename from modules/desktop-environment/media/fonts.nix rename to modules/media/fonts.nix diff --git a/modules/desktop-environment/media/obs.nix b/modules/media/obs.nix similarity index 100% rename from modules/desktop-environment/media/obs.nix rename to modules/media/obs.nix diff --git a/modules/desktop-environment/media/typst.nix b/modules/media/typst.nix similarity index 100% rename from modules/desktop-environment/media/typst.nix rename to modules/media/typst.nix From 0bbb0aa204bae158ae61b428673e2b5de14b27f2 Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Thu, 27 Mar 2025 20:18:54 +0100 Subject: [PATCH 260/301] rewrite networking modules --- modules/default.nix | 2 +- modules/desktop/default.nix | 1 - modules/desktop/networking.nix | 69 ------------------- modules/net/default.nix | 17 +++++ modules/net/dispatchers/default.nix | 27 ++++++++ .../net/dispatchers}/dispatcher.nu | 0 .../net/dispatchers/hooks}/WIFI@DB.nu | 0 .../net/dispatchers/hooks}/WIFIonICE.nu | 0 .../net/dispatchers/hooks}/ccchh.nu | 0 modules/{ => net}/firewall.nix | 0 modules/net/hosts.nix | 24 +++++++ 11 files changed, 69 insertions(+), 71 deletions(-) delete mode 100644 modules/desktop/networking.nix create mode 100644 modules/net/default.nix create mode 100644 modules/net/dispatchers/default.nix rename {other/scripts => modules/net/dispatchers}/dispatcher.nu (100%) rename {other/scripts/networkhooks => modules/net/dispatchers/hooks}/WIFI@DB.nu (100%) rename {other/scripts/networkhooks => modules/net/dispatchers/hooks}/WIFIonICE.nu (100%) rename {other/scripts/networkhooks => modules/net/dispatchers/hooks}/ccchh.nu (100%) rename modules/{ => net}/firewall.nix (100%) create mode 100644 modules/net/hosts.nix diff --git a/modules/default.nix b/modules/default.nix index 2abba8e..44c9a43 100644 --- a/modules/default.nix +++ b/modules/default.nix @@ -3,8 +3,8 @@ ./shell ./desktop ./hardware - ./firewall.nix ./de + ./net ./input ./media ./graphics.nix diff --git a/modules/desktop/default.nix b/modules/desktop/default.nix index 7213f3b..ad4114d 100644 --- a/modules/desktop/default.nix +++ b/modules/desktop/default.nix @@ -9,7 +9,6 @@ with lib; { ./gaming.nix ./syncthing.nix ./kdeconnect.nix - ./networking.nix ./social.nix ]; diff --git a/modules/desktop/networking.nix b/modules/desktop/networking.nix deleted file mode 100644 index d32d49b..0000000 --- a/modules/desktop/networking.nix +++ /dev/null @@ -1,69 +0,0 @@ -{ - config, - lib, - pkgs, - ... -}: let - addNuShebang = path: - builtins.concatStringsSep "\n\n" [ - "#!${pkgs.nushell}/bin/nu" - (builtins.readFile path) - ]; -in { - config = { - networking = { - networkmanager = { - wifi.backend = "wpa_supplicant"; - dispatcherScripts = [ - { - type = "basic"; - source = pkgs.writeText "dispatcher" (addNuShebang ../../other/scripts/dispatcher.nu); - } - ]; - }; - hosts = { - "127.0.0.1" = [ - "www.tiktok.com" - "www.twitter.com" - "www.instagram.com" - "www.facebook.com" - "www.snapchat.com" - - "tiktok.com" - "twitter.com" - "instagram.com" - "facebook.com" - "snapchat.com" - - "google-analytics.com" - "stats.g.doubleclick.net" - "googleadservices.com" - "googletagmanager.com" - "googletagservices.com" - "googlesyndication.com" - ]; - }; - }; - environment.etc = with builtins; ( - listToAttrs ( - map (v: { - name = "networkhooks/${v}"; - value = { - text = addNuShebang ../../other/scripts/networkhooks/${v}; - mode = "0755"; - }; - }) - (attrNames (readDir ../../other/scripts/networkhooks)) - ) - ); - systemd.services."NetworkManager-wait-online".enable = false; - services.mullvad-vpn.enable = true; - home-manager.users.jade = {pkgs, ...}: { - home.packages = with pkgs; [ - networkmanagerapplet - mullvad-vpn - macchanger - ]; - }; - }; -} diff --git a/modules/net/default.nix b/modules/net/default.nix new file mode 100644 index 0000000..3bbc4af --- /dev/null +++ b/modules/net/default.nix @@ -0,0 +1,17 @@ +{...}: { + imports = [ + ./firewall.nix + ./hosts.nix + ./dispatchers + ]; + networking.networkmanager.wifi.backend = "wpa_supplicant"; + systemd.services."NetworkManager-wait-online".enable = false; + services.mullvad-vpn.enable = true; + home-manager.users.jade = {pkgs, ...}: { + home.packages = with pkgs; [ + networkmanagerapplet + mullvad-vpn + macchanger + ]; + }; +} diff --git a/modules/net/dispatchers/default.nix b/modules/net/dispatchers/default.nix new file mode 100644 index 0000000..656d9cd --- /dev/null +++ b/modules/net/dispatchers/default.nix @@ -0,0 +1,27 @@ +{pkgs, ...}: let + addNuShebang = path: + builtins.concatStringsSep "\n\n" [ + "#!${pkgs.nushell}/bin/nu" + (builtins.readFile path) + ]; +in { + networking.networkmanager.dispatcherScripts = [ + { + type = "basic"; + source = pkgs.writeText "dispatcher" (addNuShebang ./dispatcher.nu); + } + ]; + + environment.etc = with builtins; ( + listToAttrs ( + map (v: { + name = "networkhooks/${v}"; + value = { + text = addNuShebang ./hooks/${v}; + mode = "0755"; + }; + }) + (attrNames (readDir ./hooks)) + ) + ); +} diff --git a/other/scripts/dispatcher.nu b/modules/net/dispatchers/dispatcher.nu similarity index 100% rename from other/scripts/dispatcher.nu rename to modules/net/dispatchers/dispatcher.nu diff --git a/other/scripts/networkhooks/WIFI@DB.nu b/modules/net/dispatchers/hooks/WIFI@DB.nu similarity index 100% rename from other/scripts/networkhooks/WIFI@DB.nu rename to modules/net/dispatchers/hooks/WIFI@DB.nu diff --git a/other/scripts/networkhooks/WIFIonICE.nu b/modules/net/dispatchers/hooks/WIFIonICE.nu similarity index 100% rename from other/scripts/networkhooks/WIFIonICE.nu rename to modules/net/dispatchers/hooks/WIFIonICE.nu diff --git a/other/scripts/networkhooks/ccchh.nu b/modules/net/dispatchers/hooks/ccchh.nu similarity index 100% rename from other/scripts/networkhooks/ccchh.nu rename to modules/net/dispatchers/hooks/ccchh.nu diff --git a/modules/firewall.nix b/modules/net/firewall.nix similarity index 100% rename from modules/firewall.nix rename to modules/net/firewall.nix diff --git a/modules/net/hosts.nix b/modules/net/hosts.nix new file mode 100644 index 0000000..1bfb877 --- /dev/null +++ b/modules/net/hosts.nix @@ -0,0 +1,24 @@ +{...}: { + networking.hosts = { + "127.0.0.1" = [ + "www.tiktok.com" + "www.twitter.com" + "www.instagram.com" + "www.facebook.com" + "www.snapchat.com" + + "tiktok.com" + "twitter.com" + "instagram.com" + "facebook.com" + "snapchat.com" + + "google-analytics.com" + "stats.g.doubleclick.net" + "googleadservices.com" + "googletagmanager.com" + "googletagservices.com" + "googlesyndication.com" + ]; + }; +} From b7d7dcb75e93f610411434e2b44ca4734cf151ef Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Thu, 27 Mar 2025 20:22:29 +0100 Subject: [PATCH 261/301] remove broken wifionice script to be rewritten on some longer journey --- modules/net/dispatchers/hooks/WIFIonICE.nu | 22 ---------------------- 1 file changed, 22 deletions(-) delete mode 100644 modules/net/dispatchers/hooks/WIFIonICE.nu diff --git a/modules/net/dispatchers/hooks/WIFIonICE.nu b/modules/net/dispatchers/hooks/WIFIonICE.nu deleted file mode 100644 index 2de9902..0000000 --- a/modules/net/dispatchers/hooks/WIFIonICE.nu +++ /dev/null @@ -1,22 +0,0 @@ -#! /usr/bin/env nix-shell -#! nix-shell -i bash -p curl htmlq - -# echo "Fetching cookie and CSRF token..." -# form=$(curl --silent --location --junk-session-cookies --cookie-jar /tmp/wifionice "https://login.wifionice.de/en/" --resolve login.wifionice.de:443:10.101.64.10 -i | htmlq "input") - -# keys=$(htmlq "input" --attribute "name" <<< "$form") -# values=$(htmlq "input" --attribute "value" <<< "$form") -# payload=$(paste --delimiters="=" <(echo "$keys") <(echo "$values") | tr "\n" "&") - -# echo "Payload: \"$payload\"" -# echo "POSTing payload..." - -# curl --cookie /tmp/wifionice "https://login.wifionice.de/en/" --resolve login.wifionice.de:443:10.101.64.10 -d "$payload" - -def main [ - interface: string - type: string -] { - let form = curl --silent --location --junk-session-cookies --cookie-jar /tmp/wifionice 'https://login.wifionice.de/en/' --resolve 'login.wifionice.de:443:10.101.64.10' -i | htmlq 'input'; - # TODO -} From bd29a1c80f099c03da47096dbdce16500d58500a Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Thu, 27 Mar 2025 20:24:29 +0100 Subject: [PATCH 262/301] remove other/ dir --- modules/de/home/niri/default.nix | 2 +- .../de/home/niri}/wallpaper.jpg | Bin other/assets/logo_linux_clut224.ppm | 3363 ----------------- 3 files changed, 1 insertion(+), 3364 deletions(-) rename {other/assets/wallpaper => modules/de/home/niri}/wallpaper.jpg (100%) delete mode 100644 other/assets/logo_linux_clut224.ppm diff --git a/modules/de/home/niri/default.nix b/modules/de/home/niri/default.nix index f038aee..66736d0 100644 --- a/modules/de/home/niri/default.nix +++ b/modules/de/home/niri/default.nix @@ -19,7 +19,7 @@ command = [ "${pkgs.swaybg}/bin/swaybg" "-i" - "${../../../../other/assets/wallpaper/wallpaper.jpg}" + "${./wallpaper.jpg}" "-m" "fill" ]; diff --git a/other/assets/wallpaper/wallpaper.jpg b/modules/de/home/niri/wallpaper.jpg similarity index 100% rename from other/assets/wallpaper/wallpaper.jpg rename to modules/de/home/niri/wallpaper.jpg diff --git a/other/assets/logo_linux_clut224.ppm b/other/assets/logo_linux_clut224.ppm deleted file mode 100644 index eae3002..0000000 --- a/other/assets/logo_linux_clut224.ppm +++ /dev/null @@ -1,3363 +0,0 @@ -P3 -160 160 -255 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 13 13 13 119 117 113 134 131 128 63 62 61 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 26 28 29 196 196 196 248 248 248 249 249 249 226 226 226 119 117 113 -13 13 13 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 147 147 146 251 250 250 253 253 253 252 252 252 255 255 255 230 230 229 -97 96 96 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 52 51 50 207 206 206 255 255 255 226 226 226 162 160 159 249 249 249 255 255 255 -226 226 226 67 67 66 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 20 23 23 122 123 123 -207 206 206 216 216 216 162 160 159 39 42 42 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 134 131 128 246 245 245 252 252 252 192 189 185 167 162 159 168 168 168 251 250 250 -253 253 253 200 200 199 54 58 58 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 52 51 50 168 168 168 246 245 245 -255 255 255 255 255 255 254 254 254 162 160 159 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -20 23 23 213 211 211 255 255 255 237 237 237 168 168 168 230 225 217 182 182 182 196 196 196 -253 253 253 251 250 250 168 168 168 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 69 73 72 196 196 196 251 250 250 255 255 255 -233 232 232 225 222 218 255 255 255 230 230 229 20 23 23 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -119 117 113 251 250 250 255 255 255 177 176 172 206 202 198 231 227 218 226 222 213 139 137 135 -216 216 216 255 255 255 248 248 248 134 134 133 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 84 81 78 216 216 216 253 253 253 253 253 253 216 216 216 -105 107 107 147 147 146 254 254 254 246 245 245 97 96 96 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -200 200 199 255 255 255 233 232 232 167 162 159 232 228 219 231 227 218 232 228 219 192 189 185 -97 96 96 230 230 229 255 255 255 233 232 232 97 96 96 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 13 13 13 122 123 123 226 226 226 255 255 255 251 250 250 196 196 196 119 117 113 -203 196 190 147 147 146 243 242 242 251 250 250 157 157 157 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 97 96 96 -237 237 237 254 254 254 192 189 185 214 212 206 232 228 219 232 228 219 231 227 218 230 225 217 -119 117 113 139 137 135 246 245 245 254 254 254 196 196 196 39 42 42 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 115 110 108 237 237 237 255 255 255 248 248 248 168 168 168 97 96 96 206 202 198 -232 228 219 168 168 168 225 222 218 254 254 254 200 200 199 33 33 31 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 13 13 13 162 160 159 -251 250 250 243 242 242 179 179 176 226 222 213 232 228 219 232 228 219 232 228 219 232 228 219 -203 196 190 13 15 17 190 190 190 254 254 254 249 249 249 139 137 135 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 13 13 13 -119 117 113 237 237 237 255 255 255 246 245 245 162 160 159 68 65 63 203 196 190 234 228 221 -233 229 220 206 202 198 196 196 196 254 254 254 230 230 229 84 81 78 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 52 51 50 213 211 211 -255 255 255 225 222 218 192 189 185 231 227 218 232 228 219 232 228 219 232 228 219 232 228 219 -226 222 213 105 107 107 63 62 61 226 226 226 255 255 255 233 232 232 97 96 96 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 134 131 128 -237 237 237 255 255 255 243 242 242 147 147 146 47 49 48 177 176 172 231 227 218 234 229 223 -234 229 223 223 218 211 177 176 172 251 250 250 246 245 245 119 117 113 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 97 96 96 248 248 248 -254 254 254 182 182 182 214 212 206 231 227 218 231 227 218 232 228 219 233 229 220 233 229 220 -231 227 218 177 170 162 10 11 13 134 131 128 246 245 245 254 254 254 200 200 199 47 49 48 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 20 23 23 147 147 146 245 244 244 -255 255 255 245 244 244 147 147 146 27 25 23 134 134 133 230 225 217 234 229 223 234 229 223 -234 229 223 230 225 217 157 157 157 246 245 245 255 255 255 157 157 157 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 177 176 172 255 255 255 -243 242 242 157 157 157 232 228 219 231 227 218 232 228 219 232 228 219 233 229 220 232 228 219 -233 229 220 206 202 198 69 68 64 33 33 31 192 189 185 253 253 253 247 247 246 147 147 146 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 20 23 23 157 157 157 245 244 244 255 255 255 -237 237 237 139 137 135 0 0 0 97 96 96 214 212 206 234 229 223 234 229 223 234 229 224 -234 229 224 234 229 224 167 162 159 225 222 218 255 255 255 207 206 206 13 13 13 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 47 49 48 237 237 237 255 255 255 -196 196 196 203 196 190 231 227 218 231 227 218 231 227 218 233 229 220 233 229 220 233 229 220 -233 229 220 226 222 213 119 117 113 0 0 0 69 73 72 233 232 232 255 255 255 233 232 232 -97 96 96 115 110 108 122 123 123 97 96 96 20 23 23 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 20 23 23 168 168 168 246 245 245 255 255 255 237 237 237 -122 123 123 13 15 17 51 47 44 192 189 185 232 228 219 234 229 224 234 229 224 234 229 224 -234 229 224 234 229 224 192 189 185 182 182 182 255 255 255 233 232 232 33 33 31 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 147 147 146 251 250 250 251 250 250 -162 160 159 229 225 217 231 227 218 232 228 219 231 227 218 233 229 220 233 229 220 233 229 220 -233 229 220 233 229 220 177 170 162 10 11 13 0 0 0 139 137 135 251 250 250 255 255 255 -249 249 249 253 253 253 254 254 254 249 249 249 213 211 211 134 134 133 47 49 48 0 0 0 -0 0 0 0 0 0 39 42 42 179 179 176 251 250 250 255 255 255 230 230 229 115 110 108 -0 0 0 20 20 21 147 147 146 230 223 213 234 229 223 234 229 223 234 229 224 234 229 224 -234 229 223 234 229 223 214 212 206 147 147 146 255 255 255 251 250 250 105 107 107 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 33 33 31 200 200 199 254 254 254 226 226 226 -192 189 185 230 225 217 231 227 218 232 228 219 232 228 219 233 229 220 233 229 220 233 229 220 -233 229 220 233 229 220 214 212 206 26 28 29 2 2 2 39 42 42 200 200 199 254 254 254 -255 255 255 255 255 255 247 247 246 255 255 255 255 255 255 246 245 245 200 200 199 115 110 108 -0 0 0 0 0 0 168 168 168 248 248 248 254 254 254 225 222 218 97 96 96 0 0 0 -0 0 0 85 88 88 214 212 206 233 229 220 234 229 223 234 229 223 234 229 223 234 229 224 -234 229 223 234 229 223 232 228 221 122 123 123 246 245 245 254 254 254 157 157 157 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 85 88 88 233 232 232 253 253 253 196 196 196 -206 202 198 231 227 218 232 228 219 231 227 218 232 228 219 233 229 220 233 229 220 232 228 221 -233 229 220 232 228 219 231 227 218 97 96 96 0 0 0 3 3 6 97 96 96 226 226 226 -213 211 211 134 134 133 97 96 96 157 157 157 233 232 232 253 253 253 254 254 254 246 245 245 -207 206 206 213 211 211 251 250 250 255 255 255 226 226 226 85 88 88 5 6 8 2 2 2 -0 0 0 179 179 176 229 225 217 223 218 211 234 229 223 234 229 223 234 229 224 234 229 224 -234 229 223 234 229 223 234 229 223 157 157 157 225 222 218 255 255 255 200 200 199 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 139 137 135 253 253 253 249 249 249 177 176 172 -223 218 211 231 227 218 232 228 219 232 228 219 232 228 219 233 229 220 232 228 221 232 228 221 -233 229 220 233 229 220 232 228 219 167 162 159 0 0 0 0 0 0 17 7 8 89 75 50 -124 73 40 150 99 58 150 99 58 128 86 51 105 88 81 182 182 182 237 237 237 255 255 255 -255 255 255 255 255 255 255 255 255 225 222 218 85 88 88 0 0 0 2 2 2 0 0 0 -115 110 108 206 202 198 162 160 159 203 196 190 234 229 223 234 229 224 234 229 224 234 229 224 -234 229 224 234 229 223 233 229 220 192 189 185 196 196 196 255 255 255 220 219 215 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 13 13 13 190 190 190 255 255 255 233 232 232 168 168 168 -230 225 217 232 228 219 232 228 219 232 228 219 232 228 219 234 229 223 234 229 223 232 228 221 -233 229 220 233 229 220 232 228 219 162 160 159 0 0 0 8 5 4 81 52 41 145 89 57 -157 101 56 157 101 56 157 101 56 157 101 56 150 99 58 128 86 51 115 110 108 190 190 190 -249 249 249 226 226 226 177 176 172 97 96 96 63 45 38 49 32 29 22 12 9 2 2 2 -97 96 96 134 119 113 126 96 80 214 212 206 234 229 224 234 229 223 234 229 223 234 229 224 -234 229 224 234 229 223 233 229 220 206 202 198 177 176 172 255 255 255 230 230 229 63 62 61 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 77 78 76 243 242 242 255 255 255 190 190 190 206 202 198 -231 227 218 232 228 219 232 228 219 233 229 220 233 229 220 234 229 223 234 228 221 233 229 220 -233 229 220 230 225 217 168 168 168 27 25 23 2 2 2 81 52 41 145 89 57 150 99 58 -157 101 56 157 101 56 158 101 56 159 102 57 158 101 56 158 101 58 150 99 58 107 75 50 -97 96 96 105 88 81 150 99 58 158 101 58 159 102 57 158 101 58 150 99 58 145 89 57 -150 99 58 158 101 58 154 142 136 229 225 217 234 229 224 234 229 223 234 229 224 234 229 224 -234 229 224 234 229 223 233 229 220 222 218 209 162 160 159 252 252 252 243 242 242 115 110 108 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 167 162 159 254 254 254 247 247 246 147 147 146 229 225 217 -232 228 219 233 229 220 232 228 219 233 229 220 233 229 220 234 229 223 233 229 220 233 229 220 -231 227 218 177 170 162 47 49 48 0 0 0 81 52 41 145 89 57 157 101 56 157 101 56 -157 101 56 158 101 56 159 102 57 159 102 57 159 102 57 159 102 57 158 101 56 157 101 56 -137 86 52 107 75 50 150 99 58 159 102 57 159 102 57 159 102 57 159 102 57 159 102 57 -159 102 57 126 96 80 206 202 198 234 229 224 234 229 223 234 229 223 234 229 223 234 229 224 -234 229 224 234 229 223 234 229 223 229 225 217 168 168 168 246 245 245 246 245 245 134 134 133 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 26 28 29 216 216 216 255 255 255 216 216 216 177 170 162 232 228 219 -233 229 220 233 229 220 232 228 219 233 229 220 233 229 220 234 229 223 232 228 221 232 228 219 -179 179 176 39 42 42 0 0 0 63 45 38 137 86 52 157 101 56 157 101 56 158 101 56 -158 101 56 159 102 57 159 102 57 159 102 57 159 102 57 159 102 57 159 102 57 159 102 57 -157 101 56 150 99 58 123 75 52 159 102 57 159 102 57 159 102 57 158 101 56 159 102 57 -137 86 52 177 170 162 234 228 221 234 229 223 234 229 224 234 229 223 234 229 224 234 229 224 -234 229 224 234 229 223 234 229 224 229 225 217 168 168 168 240 239 239 251 250 250 147 147 146 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 105 107 107 240 239 239 253 253 253 168 168 168 167 162 159 232 228 219 -232 228 219 232 228 219 233 229 220 233 229 220 233 229 220 232 228 221 232 228 219 192 189 185 -57 54 50 0 0 0 8 5 4 128 86 51 157 101 56 157 101 56 158 101 56 158 101 56 -158 101 56 158 101 56 159 102 57 159 102 57 159 102 57 159 102 57 159 102 57 159 102 57 -159 102 57 159 102 57 150 99 58 150 99 58 159 102 57 159 102 57 159 102 57 158 101 58 -137 86 52 134 119 113 203 196 190 232 228 221 234 229 223 234 229 223 234 229 223 234 229 224 -234 229 223 234 229 223 234 229 224 231 227 218 177 176 172 237 237 237 252 252 252 157 157 157 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 13 13 13 157 157 157 251 250 250 243 242 242 122 123 123 122 123 123 232 228 219 -232 228 219 232 228 219 233 229 220 233 229 220 233 229 220 233 229 220 219 214 205 85 88 88 -3 3 6 2 2 2 22 12 9 145 89 57 157 101 56 157 101 56 158 101 56 158 101 56 -158 101 56 158 101 56 158 101 56 159 102 57 159 102 57 158 101 56 159 102 57 158 101 56 -159 102 57 159 102 57 159 102 57 159 102 57 159 102 57 159 102 57 159 102 57 159 102 57 -159 102 57 157 101 56 126 96 80 203 196 190 234 229 223 234 229 224 234 229 224 234 229 224 -234 229 223 234 229 224 234 229 223 232 228 219 179 179 176 233 232 232 254 254 254 168 168 168 -13 13 13 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 20 23 23 177 176 172 254 254 254 233 232 232 57 54 50 67 65 62 206 202 198 -232 228 219 232 228 221 232 228 221 233 229 220 233 229 220 233 229 220 192 189 185 0 0 0 -2 2 2 22 12 9 42 16 9 157 101 56 150 99 58 150 99 58 159 102 57 158 101 56 -158 101 56 158 101 56 159 102 57 158 101 56 159 102 57 159 102 57 159 102 57 159 102 57 -159 102 57 159 102 57 159 102 57 159 102 57 159 102 57 159 102 57 159 102 57 159 102 57 -157 101 56 159 102 57 159 102 57 126 96 80 222 218 209 234 229 224 234 229 224 234 229 223 -234 229 223 234 229 223 234 229 223 232 228 219 182 182 182 230 230 229 255 255 255 182 182 182 -26 28 29 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 26 28 29 182 182 182 255 255 255 226 226 226 28 30 31 20 23 23 139 137 135 -226 222 213 234 229 223 234 229 223 233 229 220 233 229 220 233 229 220 134 131 128 0 0 0 -17 7 8 107 51 29 107 51 29 158 101 58 137 86 52 107 75 50 159 102 57 158 101 56 -157 101 56 157 101 56 157 101 56 158 101 56 158 101 56 159 102 57 159 102 57 159 102 57 -159 102 57 159 102 57 159 102 57 159 102 57 159 102 57 159 102 57 159 102 57 159 102 57 -145 89 57 157 101 56 157 101 56 150 99 58 167 162 159 234 229 224 234 229 224 234 229 223 -234 229 223 234 229 223 234 229 224 232 228 221 179 179 176 220 219 215 255 255 255 196 196 196 -39 42 42 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 26 28 29 182 182 182 255 255 255 230 230 229 39 42 42 10 11 13 33 33 31 -179 179 176 232 228 219 232 228 221 233 229 220 233 229 220 226 222 213 64 64 61 0 0 0 -107 51 29 178 79 39 147 67 29 137 86 52 137 86 52 107 51 29 150 99 58 158 101 56 -157 101 56 157 101 56 158 101 56 158 101 56 158 101 56 157 101 56 157 101 56 159 102 57 -158 101 56 159 102 57 159 102 57 159 102 57 159 102 57 159 102 57 157 101 56 159 102 57 -137 86 52 150 99 58 157 101 56 128 86 51 119 117 113 225 222 218 234 229 224 234 229 223 -234 229 224 234 229 224 234 229 224 232 228 221 177 176 172 213 211 211 255 255 255 196 196 196 -39 42 42 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 20 23 23 177 176 172 254 254 254 237 237 237 97 96 96 13 15 17 6 7 9 -60 59 58 192 189 185 233 229 220 233 229 220 233 229 220 206 202 198 17 18 16 81 44 20 -170 77 39 182 81 37 174 79 37 107 75 50 148 72 46 158 73 41 123 75 52 157 101 56 -157 101 56 128 86 51 145 89 57 158 101 56 157 101 56 157 101 56 150 99 58 158 101 58 -159 102 57 159 102 57 159 102 57 159 102 57 159 102 57 159 102 57 128 86 51 159 102 57 -137 86 52 150 99 58 145 89 57 145 89 57 157 157 157 214 212 206 234 229 223 232 228 221 -234 229 224 234 229 224 234 229 224 223 218 211 97 96 96 207 206 206 255 255 255 200 200 199 -47 49 48 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 122 123 123 243 242 242 253 253 253 182 182 182 39 42 42 9 10 12 -7 10 12 69 73 72 134 131 128 134 131 128 139 137 135 122 123 123 81 44 20 166 76 38 -180 81 37 182 81 37 182 81 38 147 67 29 138 69 38 174 79 37 138 69 38 123 75 52 -150 99 58 150 99 58 81 52 41 128 86 51 157 101 56 150 99 58 128 86 51 157 101 56 -159 102 57 159 102 57 159 102 57 159 102 57 159 102 57 159 102 57 123 75 52 159 102 57 -128 86 51 150 99 58 128 86 51 137 86 52 139 137 135 232 228 219 233 229 220 234 229 223 -234 229 224 234 229 223 230 225 217 134 131 128 64 64 61 226 226 226 255 255 255 200 200 199 -39 42 42 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 196 196 196 254 254 254 248 248 248 134 131 128 0 0 0 -9 10 12 49 32 29 129 59 33 138 69 38 129 59 33 81 44 20 138 69 38 179 80 38 -179 80 38 179 81 36 176 79 38 166 76 38 147 67 29 147 67 29 147 67 29 129 59 33 -107 51 29 124 73 40 107 75 50 49 32 29 128 86 51 150 99 58 107 75 50 150 99 58 -159 102 57 159 102 57 159 102 57 158 101 56 159 102 57 158 101 58 107 75 50 157 101 56 -128 86 51 150 99 58 128 86 51 107 75 50 63 62 61 203 196 190 232 228 219 234 229 224 -234 229 224 225 221 213 147 147 146 39 42 42 168 168 168 251 250 250 251 250 250 157 157 157 -13 13 13 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 77 78 76 226 226 226 255 255 255 233 232 232 105 107 107 -2 2 2 5 6 8 49 32 29 107 51 29 159 71 30 172 77 34 179 80 38 179 79 37 -175 79 35 158 73 41 107 51 29 81 44 20 81 44 20 107 51 29 107 51 29 81 44 20 -81 44 20 107 51 29 147 67 29 158 73 41 129 59 33 137 86 52 123 75 52 123 75 52 -159 102 57 159 102 57 159 102 57 159 102 57 159 102 57 145 89 57 107 75 50 145 89 57 -123 75 52 137 86 52 107 75 50 107 51 29 24 7 0 134 131 128 230 225 217 234 229 224 -214 212 206 122 123 123 0 0 0 157 157 157 247 247 246 255 255 255 216 216 216 64 64 61 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 134 131 128 246 245 245 254 254 254 216 216 216 -84 81 78 8 8 9 42 16 9 138 69 38 176 79 38 180 81 37 180 81 37 179 81 36 -147 67 29 81 44 20 107 51 29 124 73 40 124 73 40 138 69 38 138 69 38 138 69 38 -124 73 40 107 51 29 81 44 20 166 76 38 176 79 38 124 73 40 137 73 51 138 69 38 -150 99 58 159 102 57 159 102 57 159 102 57 159 102 57 128 86 51 123 75 52 124 73 40 -137 73 51 81 52 41 138 69 38 170 77 39 129 59 33 28 30 31 214 212 206 177 176 172 -77 78 76 13 15 17 134 131 128 245 244 244 255 255 255 233 232 232 85 88 88 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 122 123 123 230 230 229 255 255 255 254 254 254 -168 168 168 49 32 29 138 69 38 179 81 40 179 80 38 182 81 37 182 81 38 158 73 41 -81 44 20 107 51 29 107 51 29 107 51 29 81 44 20 81 44 20 81 44 20 107 51 29 -124 73 40 138 69 38 107 51 29 107 51 29 166 76 38 158 73 41 138 69 38 158 73 41 -137 86 52 159 102 57 159 102 57 158 101 58 145 89 57 129 59 33 107 51 29 158 73 41 -129 59 33 129 59 33 182 81 38 179 79 37 166 76 38 81 44 20 62 61 58 0 0 0 -0 0 0 119 117 113 233 232 232 255 255 255 237 237 237 134 131 128 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -33 33 31 77 78 76 115 110 108 190 190 190 243 242 242 255 255 255 253 253 253 200 200 199 -85 88 88 138 69 38 179 79 37 179 81 36 180 81 37 182 81 38 170 77 39 81 44 20 -124 73 40 138 69 38 138 69 38 138 69 38 138 69 38 124 73 40 107 51 29 49 32 29 -49 32 29 81 44 20 107 51 29 107 51 29 107 51 29 178 79 39 174 79 37 170 77 39 -137 86 52 159 102 57 158 101 56 145 89 57 107 51 29 81 44 20 49 32 29 81 44 20 -42 16 9 81 44 20 138 69 38 176 79 38 179 80 38 107 51 29 8 5 4 0 0 0 -105 107 107 233 232 232 255 255 255 247 247 246 147 147 146 13 13 13 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 88 88 -213 211 211 251 250 250 254 254 254 255 255 255 254 254 254 240 239 239 168 168 168 63 45 38 -129 59 33 179 80 38 179 81 36 180 81 37 180 81 37 180 81 37 129 59 33 107 51 29 -138 69 38 138 69 38 138 69 38 138 69 38 138 69 38 137 73 51 138 69 38 138 69 38 -124 73 40 81 44 20 49 32 29 81 44 20 49 32 29 158 73 41 182 81 38 170 77 39 -137 86 52 157 101 56 145 89 57 63 45 38 37 34 30 62 61 58 69 68 64 69 68 64 -69 68 64 64 63 59 51 47 44 81 52 41 158 73 41 147 67 29 27 25 23 122 123 123 -233 232 232 255 255 255 245 244 244 147 147 146 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 13 13 13 182 182 182 -255 255 255 255 255 255 254 254 254 237 237 237 190 190 190 115 110 108 81 44 20 147 67 29 -178 79 39 179 81 36 180 81 37 179 80 38 179 81 36 174 79 37 81 44 20 124 73 40 -138 69 38 138 69 38 138 69 38 138 69 38 137 73 51 148 72 46 148 72 46 137 73 51 -138 69 38 137 73 51 138 69 38 124 73 40 124 73 40 107 51 29 179 81 40 166 76 38 -137 86 52 123 75 52 51 47 32 52 51 50 69 68 64 77 78 76 77 78 76 77 78 76 -77 78 76 77 78 76 69 73 72 64 64 61 81 52 41 129 59 33 119 117 113 237 237 237 -255 255 255 246 245 245 157 157 157 20 23 23 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 20 23 23 207 206 206 -255 255 255 254 254 254 213 211 211 97 96 96 60 59 58 138 69 38 170 77 39 174 79 37 -176 79 38 176 79 38 179 79 37 179 80 38 179 80 38 147 67 29 81 44 20 138 69 38 -138 69 38 138 69 38 138 69 38 138 69 38 137 73 51 137 73 51 123 75 52 107 75 50 -89 75 50 107 75 50 124 73 40 138 69 38 137 73 51 81 44 20 174 79 37 138 69 38 -107 51 29 81 44 20 57 54 50 69 68 64 69 68 64 84 81 78 84 81 78 85 88 88 -97 96 96 97 96 96 84 81 78 77 78 76 69 68 64 49 32 29 139 137 135 255 255 255 -253 253 253 157 157 157 20 23 23 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 13 13 13 157 157 157 -251 250 250 255 255 255 251 250 250 216 216 216 179 179 176 147 147 146 134 119 113 107 75 50 -107 51 29 166 76 38 179 79 37 179 80 38 179 81 40 107 51 29 107 51 29 138 69 38 -138 69 38 138 69 38 138 69 38 124 73 40 107 51 29 49 32 29 84 81 78 157 157 157 -162 160 159 147 147 146 95 84 79 138 69 38 138 69 38 107 51 29 166 76 38 170 77 39 -158 73 41 63 45 38 69 68 64 69 68 64 77 78 76 84 81 78 95 84 79 97 96 96 -105 107 107 97 96 96 97 96 96 77 78 76 69 73 72 60 59 58 84 81 78 248 248 248 -254 254 254 147 147 146 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 52 51 50 -168 168 168 240 239 239 254 254 254 255 255 255 254 254 254 248 248 248 225 222 218 84 81 78 -147 67 29 179 80 38 179 79 37 179 80 38 179 80 38 107 51 29 129 59 33 138 69 38 -138 69 38 107 51 29 81 44 20 42 16 9 2 2 2 7 9 9 119 117 113 177 170 162 -168 168 168 177 170 162 134 119 113 138 69 38 138 69 38 107 51 29 138 69 38 158 73 41 -138 69 38 57 54 50 68 67 63 69 68 64 77 78 76 84 81 78 95 84 79 97 96 96 -105 107 107 105 107 107 105 107 107 84 81 78 77 78 76 69 73 72 67 67 66 225 222 218 -255 255 255 233 232 232 139 137 135 20 23 23 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -13 13 13 69 73 72 168 168 168 245 244 244 255 255 255 248 248 248 134 134 133 107 51 29 -158 73 41 174 79 37 180 81 37 179 80 38 179 81 40 129 59 33 107 51 29 138 69 38 -138 69 38 138 69 38 107 51 29 42 16 9 0 0 0 69 73 72 157 157 157 167 162 159 -167 162 159 167 162 159 154 142 136 138 69 38 138 69 38 81 44 20 107 51 29 107 51 29 -49 32 29 60 59 58 64 63 59 69 68 64 69 73 72 77 78 76 85 88 88 97 96 96 -115 110 108 115 110 108 115 110 108 97 96 96 77 78 76 69 73 72 52 51 50 162 160 159 -248 248 248 255 255 255 243 242 242 85 88 88 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 97 96 96 200 200 199 251 250 250 252 252 252 182 182 182 51 47 32 138 69 38 -170 77 39 179 80 38 179 79 37 179 79 37 179 80 38 158 73 41 81 44 20 138 69 38 -138 69 38 138 69 38 138 69 38 124 73 40 89 68 66 147 147 146 167 162 159 167 162 159 -167 162 159 168 168 168 154 142 136 138 69 38 124 73 40 81 44 20 178 79 39 179 80 38 -107 51 29 60 59 58 64 63 59 69 68 64 69 73 72 69 73 72 84 81 78 97 96 96 -105 107 107 115 110 108 115 110 108 105 107 107 84 81 78 69 73 72 52 51 50 54 58 58 -182 182 182 254 254 254 255 255 255 134 131 128 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 13 13 13 -134 131 128 237 237 237 253 253 253 254 254 254 213 211 211 89 68 66 147 67 29 173 77 35 -179 81 36 179 80 38 179 79 37 179 80 38 179 79 37 178 79 39 107 51 29 124 73 40 -138 69 38 138 69 38 138 69 38 138 69 38 137 73 51 134 119 113 154 142 136 162 160 159 -154 142 136 134 119 113 137 86 52 138 69 38 107 51 29 129 59 33 180 81 37 180 81 37 -138 69 38 57 54 50 64 63 61 67 65 62 69 73 72 69 73 72 77 78 76 85 88 88 -105 107 107 115 110 108 115 110 108 105 107 107 85 88 88 77 78 76 60 59 58 162 160 159 -246 245 245 255 255 255 251 250 250 105 107 107 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 88 88 -230 230 229 255 255 255 252 252 252 207 206 206 126 96 80 159 71 30 174 79 37 179 79 37 -176 79 38 179 79 37 179 80 38 179 80 38 179 80 38 179 80 38 158 73 41 81 44 20 -124 73 40 138 69 38 138 69 38 138 69 38 138 69 38 138 69 38 138 69 38 137 73 51 -138 69 38 138 69 38 138 69 38 124 73 40 49 32 29 129 59 33 147 67 29 159 71 30 -138 69 38 57 54 50 64 63 59 64 63 59 67 67 66 69 73 72 77 78 76 85 88 88 -97 96 96 97 96 96 105 107 107 97 96 96 84 81 78 77 78 76 62 61 58 168 168 168 -254 254 254 255 255 255 237 237 237 134 134 133 39 42 42 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 122 123 123 -251 250 250 251 250 250 167 162 159 123 75 52 170 77 39 175 79 35 175 79 35 176 79 38 -179 81 40 179 80 38 179 80 38 179 81 40 179 81 40 179 81 40 178 79 39 138 69 38 -81 44 20 124 73 40 138 69 38 137 73 51 137 73 51 137 86 52 126 96 80 166 113 90 -134 119 113 146 134 128 134 119 113 63 45 38 8 5 4 8 5 4 17 7 8 42 16 9 -49 32 29 33 33 31 65 64 60 63 62 61 64 63 61 69 68 64 69 73 72 77 78 76 -85 88 88 85 88 88 97 96 96 84 81 78 69 73 72 69 68 64 51 47 32 126 96 80 -214 212 206 254 254 254 255 255 255 245 244 244 190 190 190 52 51 50 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 119 117 113 -246 245 245 253 253 253 207 206 206 126 96 80 159 71 30 176 79 38 176 79 38 179 79 37 -179 80 38 179 80 38 179 80 38 182 87 48 197 182 169 182 149 133 182 149 133 182 149 133 -146 134 128 95 84 79 126 96 80 146 134 128 157 157 157 167 162 159 167 162 159 167 162 159 -167 162 159 157 157 157 115 110 108 167 162 159 97 96 96 0 0 0 3 3 6 2 2 2 -64 63 61 119 117 113 52 51 50 64 63 59 63 62 61 64 63 61 69 68 64 69 73 72 -77 78 76 77 78 76 77 78 76 69 68 64 69 68 64 60 59 58 107 51 29 170 77 39 -148 72 46 192 189 185 246 245 245 255 255 255 245 244 244 119 117 113 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 63 62 61 -200 200 199 254 254 254 254 254 254 216 216 216 115 110 108 147 67 29 174 79 37 179 81 36 -179 80 38 179 80 38 179 79 37 179 81 40 182 149 133 226 220 210 232 225 217 232 225 217 -230 225 217 206 202 198 167 162 159 122 123 123 105 107 107 119 117 113 134 131 128 134 131 128 -119 117 113 134 131 128 203 196 190 233 229 220 203 196 190 85 88 88 0 0 0 69 68 64 -182 182 182 223 218 211 134 131 128 47 49 48 64 64 61 64 63 61 64 63 61 67 65 62 -67 65 62 67 65 62 64 63 61 64 63 59 60 59 58 81 52 41 170 77 39 176 79 38 -147 67 29 107 75 50 196 196 196 253 253 253 251 250 250 122 123 123 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -69 73 72 200 200 199 251 250 250 254 254 254 237 237 237 139 137 135 124 73 40 166 76 38 -176 79 38 179 79 37 179 80 38 179 80 38 179 81 40 182 149 133 230 223 213 232 225 217 -231 227 218 231 227 218 230 225 217 226 220 210 203 196 190 167 162 159 147 147 146 147 147 146 -179 179 176 225 221 213 233 229 220 233 229 220 233 229 220 214 212 206 147 147 146 207 206 206 -231 227 218 232 228 219 220 215 207 122 123 123 64 64 61 66 65 61 67 66 62 67 66 62 -65 64 60 64 63 59 64 64 61 60 59 58 81 52 41 166 76 38 179 81 40 182 81 38 -129 59 33 139 137 135 240 239 239 254 254 254 255 255 255 226 226 226 85 88 88 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 26 28 29 168 168 168 243 242 242 255 255 255 246 245 245 177 176 172 89 68 66 -129 59 33 166 76 38 176 79 38 179 79 37 179 79 37 176 79 38 182 149 133 226 220 210 -232 228 219 232 228 219 232 228 219 232 228 219 233 229 220 233 229 220 231 227 218 182 182 182 -157 157 157 219 214 205 234 229 223 233 229 220 233 229 220 220 215 207 192 189 185 233 229 220 -233 229 220 234 229 223 229 225 217 177 176 172 147 147 146 134 131 128 85 88 88 52 51 50 -39 42 42 47 49 48 97 96 96 147 147 146 182 149 133 166 113 90 182 87 48 182 81 38 -182 81 38 166 76 38 154 142 136 216 216 216 251 250 250 255 255 255 213 211 211 39 42 42 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 26 28 29 122 123 123 230 230 229 255 255 255 251 250 250 216 216 216 -139 137 135 81 52 41 107 51 29 129 59 33 138 69 38 147 67 29 182 149 133 226 220 210 -232 228 219 232 228 219 233 229 220 233 229 220 232 228 219 233 229 220 231 227 218 226 222 213 -214 212 206 177 176 172 168 168 168 179 179 176 167 162 159 139 137 135 157 157 157 147 147 146 -203 196 190 206 202 198 167 162 159 177 170 162 214 212 206 226 222 213 220 215 207 206 202 198 -203 196 190 206 202 198 220 215 207 232 228 221 234 228 221 220 209 198 182 149 133 182 81 37 -182 81 38 182 81 37 175 79 35 150 99 58 182 182 182 253 253 253 237 237 237 97 96 96 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 13 13 13 122 123 123 213 211 211 233 232 232 253 253 253 255 255 255 255 255 255 -252 252 252 233 232 232 207 206 206 182 182 182 105 107 107 126 96 80 203 196 190 223 218 211 -231 227 218 232 228 219 232 228 219 232 228 219 233 229 220 232 228 219 233 229 220 232 228 219 -232 228 219 231 227 218 222 218 209 162 160 159 179 179 176 206 202 198 203 196 190 182 182 182 -134 131 128 179 179 176 214 212 206 230 223 213 231 227 218 232 228 219 233 229 220 234 229 223 -234 228 221 232 228 221 234 229 223 234 228 221 220 209 198 182 149 133 182 87 48 182 81 37 -170 77 39 166 76 38 148 72 46 134 119 113 230 230 229 255 255 255 226 226 226 67 67 66 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 64 64 61 226 226 226 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 233 232 232 84 81 78 105 88 81 97 96 96 147 147 146 -229 225 217 232 228 219 233 229 220 232 228 219 233 229 220 232 228 219 233 229 220 234 229 223 -232 228 221 233 229 220 232 228 219 225 221 213 226 222 213 229 225 217 230 223 213 226 220 210 -214 212 206 226 222 213 229 225 217 232 228 219 233 229 220 233 229 220 233 229 220 234 229 223 -234 229 223 233 229 220 230 223 213 197 182 169 166 113 90 179 79 34 182 81 38 182 81 38 -129 59 33 89 68 66 190 190 190 240 239 239 255 255 255 246 245 245 147 147 146 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 85 88 88 245 244 244 255 255 255 230 230 229 254 253 253 255 255 255 255 255 255 -255 255 255 255 255 255 255 255 255 233 232 232 207 206 206 226 226 226 237 237 237 190 190 190 -206 202 198 230 225 217 232 228 219 232 228 219 233 229 220 233 229 220 233 229 220 234 229 223 -232 228 221 233 229 220 231 227 218 230 225 217 229 225 217 229 225 217 226 222 213 229 225 217 -226 222 213 230 225 217 231 227 218 233 229 220 233 229 220 233 229 220 233 229 220 232 225 217 -220 209 198 197 182 169 166 113 90 182 87 48 174 79 37 174 79 37 166 76 38 147 67 29 -107 51 29 60 59 58 182 182 182 252 252 252 252 252 252 162 160 159 20 23 23 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 63 62 61 226 226 226 255 255 255 200 200 199 207 206 206 253 253 253 255 255 255 -255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 252 252 252 182 182 182 -119 117 113 219 214 205 220 215 207 232 228 219 233 229 220 234 229 223 234 229 223 234 229 223 -234 229 223 234 229 223 233 229 220 232 228 219 231 227 218 232 228 219 232 228 219 231 227 218 -230 225 217 231 227 218 232 228 219 233 229 220 234 228 221 233 229 220 233 229 220 221 217 205 -166 113 90 147 67 29 166 76 38 138 69 38 107 51 29 81 52 41 122 123 123 157 157 157 -182 182 182 207 206 206 237 237 237 254 254 254 237 237 237 97 96 96 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 33 33 31 190 190 190 255 255 255 237 237 237 134 131 128 168 168 168 237 237 237 -254 254 254 255 255 255 255 255 255 255 255 255 255 255 255 249 249 249 182 182 182 105 88 81 -68 65 63 157 157 157 147 147 146 231 227 218 233 229 220 233 229 220 234 229 223 232 228 221 -234 229 223 234 229 224 234 229 224 234 229 223 232 228 219 233 229 220 233 229 220 232 228 219 -231 227 218 231 227 218 231 227 218 232 228 221 230 223 213 203 196 190 182 149 133 166 113 90 -158 101 58 138 69 38 81 44 20 81 44 20 49 32 29 60 59 58 220 219 215 251 250 250 -255 255 255 255 255 255 255 255 255 249 249 249 177 176 172 33 33 31 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 134 134 133 246 245 245 253 253 253 179 179 176 137 86 52 126 96 80 -167 162 159 206 202 198 216 216 216 213 211 211 192 189 185 134 119 113 123 75 52 123 75 52 -107 75 50 57 54 50 51 47 44 206 202 198 232 228 219 232 228 219 232 228 219 232 228 221 -234 229 223 234 229 224 234 229 224 234 229 223 233 229 220 233 229 220 233 229 220 231 227 218 -232 228 219 232 228 219 231 227 218 225 221 213 119 117 113 134 131 128 177 176 172 196 196 196 -168 168 168 139 137 135 168 168 168 230 230 229 237 237 237 245 244 244 254 254 254 253 253 253 -233 232 232 213 211 211 190 190 190 119 117 113 13 13 13 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 64 64 61 220 219 215 255 255 255 240 239 239 134 131 128 128 86 51 -137 86 52 124 73 40 124 73 40 124 73 40 124 73 40 137 86 52 137 86 52 137 86 52 -128 86 51 81 52 41 81 52 41 139 137 135 229 225 217 230 225 217 232 228 219 232 228 219 -234 229 223 234 229 223 233 229 220 233 229 220 233 229 220 232 228 219 232 228 219 232 228 219 -231 227 218 231 227 218 231 227 218 230 223 213 122 123 123 251 250 250 255 255 255 255 255 255 -255 255 255 253 253 253 247 247 246 254 254 254 255 255 255 255 255 255 251 250 250 207 206 206 -85 88 88 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 119 117 113 248 248 248 255 255 255 233 232 232 115 110 108 -123 75 52 137 86 52 150 99 58 150 99 58 137 86 52 128 86 51 145 89 57 137 86 52 -150 99 58 107 75 50 128 86 51 77 78 76 206 202 198 232 228 219 231 227 218 231 227 218 -232 228 219 232 228 221 233 229 220 233 229 220 233 229 220 233 229 220 233 229 220 233 229 220 -232 228 219 231 227 218 206 202 198 226 220 210 139 137 135 248 248 248 255 255 255 233 232 232 -237 237 237 246 245 245 251 250 250 246 245 245 182 182 182 168 168 168 119 117 113 54 58 58 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 177 176 172 247 247 246 255 255 255 233 232 232 -157 157 157 126 96 80 128 86 51 123 75 52 128 86 51 145 89 57 145 89 57 157 101 56 -137 86 52 107 75 50 123 75 52 51 47 32 167 162 159 229 225 217 232 228 219 232 228 219 -232 228 219 232 228 219 232 228 219 231 227 218 232 228 219 232 228 219 232 228 219 232 228 219 -232 228 219 231 227 218 134 134 133 134 131 128 134 134 133 240 239 239 254 254 254 162 160 159 -0 0 0 97 96 96 139 137 135 105 107 107 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 39 42 42 177 176 172 251 250 250 255 255 255 -247 247 246 179 179 176 107 75 50 150 99 58 150 99 58 150 99 58 157 101 56 145 89 57 -81 52 41 123 75 52 107 75 50 107 75 50 97 96 96 223 218 211 232 228 219 232 228 219 -231 227 218 232 228 219 232 228 219 232 228 219 232 228 219 232 228 219 232 228 219 233 229 220 -232 228 219 232 228 219 203 196 190 196 196 196 243 242 242 252 252 252 254 254 254 147 147 146 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 77 78 76 216 216 216 254 254 254 251 250 250 -200 200 199 123 75 52 123 75 52 150 99 58 150 99 58 157 101 56 145 89 57 107 75 50 -137 86 52 137 86 52 137 86 52 128 86 51 81 44 20 192 189 185 231 227 218 231 227 218 -233 229 220 232 228 219 232 228 219 231 227 218 232 228 219 232 228 219 231 227 218 231 227 218 -232 228 219 233 229 220 225 221 213 177 176 172 246 245 245 255 255 255 243 242 242 115 110 108 -13 13 13 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 20 23 23 200 200 199 254 254 254 252 252 252 192 189 185 -126 96 80 128 86 51 150 99 58 150 99 58 157 101 56 150 99 58 107 75 50 137 86 52 -137 86 52 145 89 57 150 99 58 137 86 52 49 32 29 122 123 123 225 221 213 231 227 218 -231 227 218 230 225 217 231 227 218 232 228 219 231 227 218 231 227 218 233 229 220 233 229 220 -233 229 220 233 229 220 233 229 220 192 189 185 196 196 196 255 255 255 255 255 255 237 237 237 -168 168 168 119 117 113 39 42 42 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 168 168 168 252 252 252 254 254 254 190 190 190 128 86 51 -128 86 51 150 99 58 150 99 58 157 101 56 150 99 58 107 75 50 123 75 52 128 86 51 -150 99 58 157 101 56 145 89 57 107 75 50 81 52 41 60 59 58 203 196 190 229 225 217 -229 225 217 229 225 217 230 225 217 231 227 218 232 228 219 232 228 219 233 229 220 232 228 219 -233 229 220 234 229 223 234 229 223 232 228 221 147 147 146 196 196 196 248 248 248 255 255 255 -251 250 250 247 247 246 230 230 229 182 182 182 105 107 107 52 51 50 20 23 23 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 105 107 107 237 237 237 255 255 255 216 216 216 126 96 80 128 86 51 -150 99 58 157 101 56 157 101 56 150 99 58 107 75 50 88 74 36 128 86 51 145 89 57 -150 99 58 145 89 57 128 86 51 107 75 50 107 75 50 51 47 32 177 170 162 229 225 217 -230 225 217 230 225 217 230 225 217 231 227 218 232 228 219 233 229 220 232 228 219 233 229 220 -233 229 220 234 229 223 234 229 224 234 229 224 229 225 217 182 182 182 168 168 168 216 216 216 -243 242 242 253 253 253 255 255 255 255 255 255 248 248 248 213 211 211 177 176 172 157 157 157 -139 137 135 105 107 107 64 64 61 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 39 42 42 190 190 190 254 254 254 243 242 242 146 134 128 128 86 51 145 89 57 -158 101 56 150 99 58 150 99 58 88 74 36 63 45 38 107 75 50 150 99 58 145 89 57 -150 99 58 137 86 52 137 86 52 107 75 50 88 74 36 97 96 96 214 212 206 229 225 217 -230 225 217 230 225 217 230 225 217 231 227 218 231 227 218 233 229 220 232 228 219 233 229 220 -234 229 223 234 229 223 234 229 223 234 229 223 234 229 224 234 229 224 222 218 209 182 182 182 -139 137 135 147 147 146 196 196 196 240 239 239 254 254 254 255 255 255 254 254 254 251 250 250 -246 245 245 240 239 239 233 232 232 200 200 199 139 137 135 52 51 50 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 64 64 61 230 230 229 255 255 255 206 202 198 128 86 51 123 75 52 158 101 56 -157 101 56 150 99 58 107 75 50 63 45 38 107 75 50 150 99 58 145 89 57 150 99 58 -145 89 57 145 89 57 123 75 52 107 75 50 97 96 96 206 202 198 229 225 217 229 225 217 -230 225 217 231 227 218 231 227 218 231 227 218 232 228 219 233 229 220 233 229 220 233 229 220 -232 228 221 234 229 224 234 229 223 234 229 223 234 229 224 234 229 224 234 229 223 234 229 223 -192 189 185 60 59 58 46 53 56 85 88 88 162 160 159 216 216 216 233 232 232 240 239 239 -246 245 245 251 250 250 255 255 255 255 255 255 253 253 253 225 222 218 147 147 146 60 59 58 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 97 96 96 249 249 249 254 254 254 154 142 136 124 73 40 150 99 58 157 101 56 -150 99 58 145 89 57 81 52 41 107 75 50 137 86 52 145 89 57 128 86 51 150 99 58 -137 86 52 145 89 57 81 52 41 115 110 108 206 202 198 229 225 217 229 225 217 229 225 217 -230 225 217 231 227 218 230 225 217 231 227 218 232 228 219 232 228 219 232 228 219 233 229 220 -233 229 220 234 229 223 234 229 224 234 229 224 234 229 223 234 229 224 234 229 224 232 228 221 -157 157 157 34 41 43 33 38 41 38 46 48 28 35 38 46 53 56 85 88 88 119 117 113 -134 134 133 157 157 157 192 189 185 226 226 226 253 253 253 255 255 255 251 250 250 207 206 206 -105 107 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 134 134 133 255 255 255 247 247 246 105 88 81 128 86 51 150 99 58 157 101 56 -150 99 58 107 75 50 81 52 41 128 86 51 145 89 57 123 75 52 150 99 58 137 86 52 -137 86 52 107 75 50 105 107 107 214 212 206 231 227 218 230 225 217 229 225 217 230 225 217 -231 227 218 231 227 218 231 227 218 231 227 218 231 227 218 231 227 218 231 227 218 233 229 220 -233 229 220 232 228 221 234 229 223 234 229 224 234 229 224 234 229 223 234 229 224 222 218 209 -105 107 107 28 35 38 28 35 38 33 38 41 28 35 38 34 41 43 33 38 41 34 41 43 -34 41 43 38 46 48 54 58 58 85 88 88 147 147 146 226 226 226 252 252 252 254 254 254 -230 230 229 85 88 88 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 134 134 133 255 255 255 245 244 244 89 68 66 128 86 51 157 101 56 150 99 58 -137 86 52 63 45 38 123 75 52 137 86 52 137 86 52 128 86 51 137 86 52 128 86 51 -88 74 36 122 123 123 214 212 206 232 228 219 231 227 218 230 225 217 230 225 217 231 227 218 -231 227 218 231 227 218 231 227 218 231 227 218 230 225 217 231 227 218 232 228 219 233 229 220 -233 229 220 232 228 221 234 229 223 234 229 223 234 229 223 234 229 223 234 229 223 179 179 176 -33 38 41 29 32 34 28 35 38 33 38 41 33 38 41 33 38 41 28 35 38 33 38 41 -33 38 41 34 41 43 34 41 43 34 41 43 42 49 51 77 78 76 182 182 182 247 247 246 -254 254 254 213 211 211 77 78 76 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 119 117 113 255 255 255 251 250 250 105 88 81 124 73 40 157 101 56 150 99 58 -107 75 50 88 74 36 128 86 51 128 86 51 128 86 51 137 86 52 123 75 52 81 44 20 -119 117 113 219 214 205 231 227 218 231 227 218 230 225 217 229 225 217 230 225 217 231 227 218 -231 227 218 231 227 218 231 227 218 229 225 217 230 225 217 231 227 218 231 227 218 232 228 219 -232 228 219 233 229 220 232 228 221 234 229 223 234 229 223 234 229 223 214 212 206 77 78 76 -23 27 31 25 30 33 28 35 38 33 38 41 33 38 41 28 35 38 33 38 41 33 38 41 -33 38 41 38 46 48 38 46 48 34 41 43 42 49 51 54 58 58 69 73 72 182 182 182 -252 252 252 254 254 254 196 196 196 39 42 42 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 97 96 96 251 250 250 254 254 254 134 131 128 124 73 40 157 101 56 145 89 57 -81 44 20 107 75 50 128 86 51 137 86 52 128 86 51 88 74 36 37 34 30 3 3 8 -162 160 159 233 229 220 231 227 218 230 225 217 230 225 217 229 225 217 230 225 217 231 227 218 -231 227 218 231 227 218 231 227 218 230 225 217 230 225 217 230 225 217 230 225 217 232 228 219 -232 228 219 233 229 220 234 229 223 234 229 223 233 229 220 223 218 211 119 117 113 28 35 38 -29 32 34 29 32 34 29 32 34 25 30 33 25 30 33 28 35 38 28 35 38 28 35 38 -34 41 43 38 46 48 38 46 48 38 46 48 42 49 51 46 53 56 54 58 58 64 67 67 -196 196 196 254 253 253 254 254 254 190 190 190 52 51 50 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 67 67 66 233 232 232 254 254 254 179 179 176 124 73 40 157 101 56 137 86 52 -63 45 38 107 75 50 137 86 52 137 86 52 81 52 41 27 25 23 20 24 26 14 18 20 -105 107 107 230 225 217 230 225 217 230 225 217 230 225 217 230 225 217 229 225 217 231 227 218 -231 227 218 230 225 217 230 225 217 229 225 217 229 225 217 229 225 217 231 227 218 231 227 218 -232 228 219 233 229 220 233 229 220 233 229 220 226 222 213 147 147 146 39 42 42 28 35 38 -29 32 34 25 30 33 25 30 33 21 25 29 25 30 33 29 32 34 28 35 38 28 35 38 -34 41 43 34 41 43 34 41 43 38 46 48 42 49 51 46 53 56 46 53 56 54 58 58 -85 88 88 207 206 206 254 254 254 251 250 250 168 168 168 26 28 29 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 52 51 50 207 206 206 255 255 255 207 206 206 124 73 40 150 99 58 123 75 52 -88 74 36 88 74 36 81 52 41 49 32 29 26 28 29 21 25 29 21 25 29 16 19 20 -60 59 58 203 196 190 230 225 217 230 225 217 231 227 218 230 225 217 229 225 217 230 225 217 -231 227 218 230 225 217 229 225 217 226 222 213 226 222 213 229 225 217 231 227 218 232 228 219 -231 227 218 233 229 220 232 228 219 222 218 209 139 137 135 33 38 41 25 30 33 29 32 34 -29 32 34 25 30 33 23 27 31 21 25 29 25 30 33 28 35 38 28 35 38 34 41 43 -33 38 41 33 38 41 34 41 43 38 46 48 42 49 51 46 53 56 42 49 51 46 53 56 -46 53 56 85 88 88 220 219 215 255 255 255 246 245 245 122 123 123 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 26 28 29 182 182 182 255 255 255 226 226 226 128 86 51 145 89 57 107 75 50 -49 32 29 27 25 23 13 17 18 20 23 23 20 24 26 20 24 26 20 23 23 16 19 20 -26 28 29 139 137 135 226 222 213 229 225 217 229 225 217 229 225 217 229 225 217 229 225 217 -229 225 217 229 225 217 226 222 213 226 222 213 226 222 213 229 225 217 231 227 218 231 227 218 -231 227 218 231 227 218 203 196 190 119 117 113 28 35 38 29 32 34 23 27 31 25 30 33 -25 30 33 28 35 38 29 32 34 25 30 33 25 30 33 28 35 38 33 38 41 34 41 43 -34 41 43 33 38 41 34 41 43 38 46 48 38 46 48 38 46 48 42 49 51 42 49 51 -46 53 56 46 53 56 105 107 107 233 232 232 255 255 255 237 237 237 105 107 107 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 13 13 13 168 168 168 253 253 253 233 232 232 126 96 80 128 86 51 49 32 29 -21 25 29 21 25 29 16 22 26 16 19 20 16 19 20 16 19 20 16 19 20 16 19 20 -16 22 26 52 51 50 167 162 159 226 222 213 229 225 217 229 225 217 229 225 217 230 225 217 -229 225 217 229 225 217 229 225 217 226 222 213 225 221 213 229 225 217 230 225 217 230 225 217 -220 215 207 162 160 159 84 81 78 28 35 38 28 35 38 25 30 33 21 25 29 21 25 29 -23 27 31 25 30 33 29 32 34 29 32 34 23 27 31 29 32 34 28 35 38 33 38 41 -34 41 43 33 38 41 33 38 41 34 41 43 34 41 43 38 46 48 38 46 48 42 49 51 -46 53 56 46 53 56 46 53 56 139 137 135 243 242 242 254 254 254 220 219 215 84 81 78 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 162 160 159 252 252 252 237 237 237 134 119 113 88 74 36 16 22 26 -20 24 26 20 23 23 16 19 20 16 19 20 20 23 23 20 23 23 20 23 23 16 19 20 -14 18 20 20 23 23 29 32 34 134 131 128 203 196 190 226 220 210 230 225 217 230 225 217 -229 225 217 230 223 213 226 222 213 226 222 213 226 222 213 223 218 211 214 212 206 177 176 172 -85 88 88 28 35 38 29 32 34 23 27 31 21 25 29 20 24 26 23 27 31 21 25 29 -20 24 26 21 25 29 23 27 31 29 32 34 25 30 33 25 30 33 33 38 41 28 35 38 -33 38 41 33 38 41 28 35 38 33 38 41 34 41 43 38 46 48 38 46 48 38 46 48 -42 49 51 42 49 51 42 49 51 54 58 58 182 182 182 252 252 252 254 254 254 168 168 168 -13 13 13 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 20 23 23 177 176 172 254 254 254 237 237 237 134 119 113 51 47 32 20 23 23 -16 19 20 16 19 20 14 18 20 16 19 20 20 23 23 14 18 20 20 23 23 20 23 23 -14 18 20 14 18 20 20 23 23 16 22 26 69 73 72 139 137 135 179 179 176 206 202 198 -220 215 207 223 218 211 220 215 207 203 196 190 177 170 162 134 134 133 85 88 88 14 18 20 -23 27 31 23 27 31 20 24 26 20 24 26 20 23 23 20 24 26 20 24 26 20 24 26 -16 22 26 20 24 26 23 27 31 25 30 33 25 30 33 28 35 38 28 35 38 29 32 34 -33 38 41 33 38 41 29 32 34 28 35 38 33 38 41 34 41 43 34 41 43 34 41 43 -42 49 51 42 49 51 42 49 51 46 53 56 85 88 88 213 211 211 255 255 255 246 245 245 -134 131 128 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 20 23 23 147 147 146 207 206 206 200 200 199 119 117 113 -39 42 42 47 49 48 190 190 190 255 255 255 237 237 237 105 88 81 33 33 31 20 24 26 -20 24 26 16 19 20 13 15 17 13 15 17 12 13 15 10 12 14 14 18 20 16 19 20 -13 17 18 14 18 20 20 23 23 20 23 23 20 24 26 20 24 26 47 49 48 63 62 61 -69 73 72 84 81 78 69 73 72 60 59 58 39 42 42 20 24 26 20 24 26 21 25 29 -16 22 26 20 23 23 20 23 23 16 19 20 12 15 17 13 15 17 13 15 17 13 15 17 -12 13 15 13 17 18 21 25 29 25 30 33 25 30 33 25 30 33 28 35 38 28 35 38 -28 35 38 33 38 41 29 32 34 25 30 33 29 32 34 34 41 43 38 46 48 42 49 51 -42 49 51 46 53 56 46 53 56 42 49 51 54 58 58 115 110 108 233 232 232 255 255 255 -230 230 229 97 96 96 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 139 137 135 248 248 248 255 255 255 255 255 255 246 245 245 -196 196 196 192 189 185 243 242 242 255 255 255 213 211 211 51 47 32 26 28 29 20 23 23 -16 22 26 13 17 18 12 15 17 13 15 17 10 11 13 10 12 14 12 15 17 13 17 18 -13 15 17 12 13 15 12 15 17 13 17 18 13 15 17 12 13 15 16 19 20 14 18 20 -12 15 17 13 15 17 12 15 17 12 15 17 13 17 18 16 19 20 20 23 23 20 23 23 -13 17 18 14 18 20 13 15 17 10 12 14 12 13 15 14 18 20 14 18 20 13 17 18 -12 13 15 10 12 14 16 19 20 20 24 26 21 25 29 23 27 31 25 30 33 25 30 33 -25 30 33 29 32 34 25 30 33 29 32 34 28 35 38 33 38 41 42 49 51 42 49 51 -42 49 51 46 53 56 54 58 58 46 53 56 46 53 56 69 73 72 157 157 157 247 247 246 -254 254 254 207 206 206 54 58 58 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 182 182 182 253 253 253 245 244 244 243 242 242 254 254 254 -255 255 255 255 255 255 255 255 255 246 245 245 134 131 128 37 34 30 13 17 18 14 18 20 -14 18 20 13 15 17 12 13 15 12 13 15 9 10 12 9 10 12 10 11 13 10 12 14 -10 11 13 10 11 13 10 11 13 10 11 13 12 13 15 13 15 17 14 18 20 13 15 17 -9 10 12 9 10 12 8 9 11 8 9 11 9 10 12 10 11 13 10 11 13 12 13 14 -9 10 12 9 10 12 12 13 15 12 13 15 12 13 15 13 17 18 13 17 18 13 15 17 -12 13 15 10 12 14 13 15 17 13 17 18 16 19 20 20 23 23 20 24 26 23 27 31 -21 25 29 25 30 33 28 35 38 33 38 41 33 38 41 33 38 41 38 46 48 34 41 43 -38 46 48 42 49 51 54 58 58 54 58 58 46 53 56 46 53 56 64 67 67 182 182 182 -254 254 254 252 252 252 190 190 190 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 157 157 157 251 250 250 249 249 249 167 162 159 192 189 185 -226 226 226 235 232 229 220 215 207 146 134 128 107 75 50 12 15 17 13 17 18 12 15 17 -10 11 13 9 10 12 9 10 12 7 8 10 7 8 10 7 9 9 8 9 11 7 8 10 -9 10 12 9 10 12 8 9 11 10 11 13 12 13 15 12 13 15 12 13 15 10 11 13 -8 8 9 7 8 10 7 8 10 7 8 10 8 9 11 8 8 9 8 8 9 8 9 11 -10 12 14 9 10 12 10 11 13 10 11 13 12 13 15 13 17 18 14 18 20 12 13 15 -10 11 13 10 11 13 10 11 13 12 13 15 13 17 18 16 19 20 20 23 23 20 24 26 -23 27 31 25 30 33 33 38 41 34 41 43 33 38 41 34 41 43 38 46 48 34 41 43 -38 46 48 38 46 48 42 49 51 42 49 51 42 49 51 42 49 51 46 53 56 64 67 67 -207 206 206 254 254 254 251 250 250 168 168 168 26 28 29 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 77 78 76 233 232 232 255 255 255 237 237 237 134 131 128 -123 75 52 126 96 80 128 86 51 145 89 57 51 47 32 13 17 18 16 19 20 13 15 17 -9 10 12 10 11 13 10 12 14 8 9 11 8 9 11 9 10 12 10 11 13 7 8 10 -8 9 11 10 12 14 9 10 12 12 13 15 13 15 17 10 11 13 8 9 11 7 8 10 -8 9 11 8 9 11 8 9 11 7 8 10 7 8 10 6 7 9 8 9 11 9 10 12 -9 10 12 9 10 12 9 10 12 9 10 12 10 12 14 13 17 18 13 15 17 10 12 14 -9 10 12 9 10 12 10 11 13 14 18 20 20 23 23 20 24 26 20 24 26 21 25 29 -25 30 33 25 30 33 28 35 38 28 35 38 33 38 41 38 46 48 42 49 51 38 46 48 -34 41 43 34 41 43 34 41 43 42 49 51 42 49 51 46 53 56 38 46 48 46 53 56 -97 96 96 220 219 215 254 254 254 245 244 244 147 147 146 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 134 131 128 246 245 245 255 255 255 243 242 242 -179 179 176 107 75 50 128 86 51 107 75 50 20 20 21 12 13 15 16 19 20 12 13 15 -12 13 15 13 15 17 10 11 13 9 10 12 8 9 11 10 12 14 12 13 15 10 11 13 -8 9 11 8 9 11 8 8 9 8 8 9 8 8 9 8 8 9 7 8 10 8 9 11 -7 8 10 7 8 10 6 7 9 6 7 9 7 8 10 6 7 9 8 9 11 9 10 12 -10 11 13 10 11 13 13 13 13 17 18 16 13 15 17 13 15 17 10 12 14 10 11 13 -9 10 12 9 10 12 10 11 13 20 20 21 20 23 23 25 30 33 21 25 29 23 27 31 -25 30 33 25 30 33 25 30 33 25 30 33 29 32 34 33 38 41 34 41 43 33 38 41 -33 38 41 33 38 41 34 41 43 38 46 48 42 49 51 46 53 56 42 49 51 38 46 48 -46 53 56 119 117 113 237 237 237 255 255 255 245 244 244 134 134 133 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 122 123 123 243 242 242 255 255 255 243 242 242 -177 170 162 150 99 58 128 86 51 63 45 38 10 11 13 10 11 13 12 13 15 13 15 17 -16 19 20 16 19 20 12 15 17 8 9 11 9 10 12 10 12 14 13 15 17 12 13 15 -12 13 14 9 10 12 8 9 11 8 9 11 6 7 9 8 9 11 6 7 9 3 3 8 -3 3 8 3 3 8 7 10 12 3 3 6 4 4 14 13 15 17 13 17 18 16 22 26 -16 19 20 20 23 23 137 105 55 108 90 44 20 24 26 21 25 29 20 23 23 16 19 20 -9 10 12 10 11 13 10 12 14 12 13 15 13 17 18 20 24 26 23 27 31 23 27 31 -25 30 33 23 27 31 23 27 31 23 27 31 21 25 29 23 27 31 29 32 34 28 35 38 -28 35 38 29 32 34 28 35 38 28 35 38 38 46 48 46 53 56 42 49 51 38 46 48 -42 49 51 46 53 56 122 123 123 237 237 237 255 255 255 237 237 237 119 117 113 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 33 33 31 225 222 218 255 255 255 237 237 237 154 142 136 -137 86 52 128 86 51 107 75 50 27 25 23 8 9 11 13 15 17 13 17 18 12 13 15 -16 19 20 14 18 20 13 17 18 12 13 15 17 18 16 17 18 16 13 15 17 14 18 20 -27 25 23 20 20 21 27 25 23 37 34 30 27 25 23 16 19 20 88 74 36 122 100 50 -122 100 50 122 100 50 81 52 41 200 163 79 200 163 79 189 156 74 16 22 26 23 27 31 -23 27 31 37 34 30 223 182 84 152 111 60 21 25 29 21 25 29 16 22 26 16 19 20 -12 13 15 10 12 14 10 11 13 10 11 13 13 17 18 16 19 20 20 23 23 20 24 26 -25 30 33 23 27 31 23 27 31 25 30 33 23 27 31 21 25 29 25 30 33 29 32 34 -29 32 34 25 30 33 29 32 34 29 32 34 38 46 48 42 49 51 38 46 48 38 46 48 -42 49 51 42 49 51 46 53 56 139 137 135 243 242 242 255 255 255 233 232 232 122 123 123 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 122 123 123 248 248 248 252 252 252 167 162 159 137 86 52 -128 86 51 128 86 51 81 52 41 7 10 12 8 9 11 10 11 13 13 15 17 13 15 17 -12 13 15 13 15 17 13 15 17 27 25 23 137 105 55 161 132 61 28 30 31 23 27 31 -189 156 74 161 132 61 161 132 61 235 192 90 161 132 61 20 24 26 161 132 61 216 177 82 -200 163 79 177 145 72 108 90 44 241 195 89 216 177 82 228 186 86 51 47 32 25 30 33 -23 27 31 89 75 50 235 192 90 108 90 44 21 25 29 23 27 31 20 24 26 16 22 26 -10 12 14 9 10 12 9 10 12 13 15 17 16 19 20 16 19 20 16 19 20 16 19 20 -21 25 29 25 30 33 25 30 33 25 30 33 28 35 38 33 38 41 28 35 38 29 32 34 -29 32 34 33 38 41 28 35 38 33 38 41 42 49 51 38 46 48 34 41 43 38 46 48 -38 46 48 38 46 48 34 41 43 33 38 41 162 160 159 246 245 245 255 255 255 237 237 237 -85 88 88 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 147 147 146 251 250 250 237 237 237 134 119 113 128 86 51 -128 86 51 124 73 40 27 25 23 8 9 11 8 9 11 10 11 13 12 15 17 20 23 23 -17 18 16 10 11 13 12 13 14 49 32 29 200 163 79 223 182 84 33 33 31 63 45 38 -235 192 90 177 145 72 200 163 79 248 200 89 161 132 61 37 34 30 177 145 72 200 163 79 -208 171 79 177 145 72 108 90 44 241 195 89 189 156 74 235 190 84 89 75 50 21 25 29 -7 16 24 152 111 60 228 186 86 63 45 38 25 30 33 23 27 31 20 24 26 14 18 20 -10 11 13 9 10 12 10 11 13 10 12 14 13 15 17 16 19 20 16 19 20 14 18 20 -16 22 26 21 25 29 29 32 34 25 30 33 28 35 38 29 32 34 29 32 34 28 35 38 -33 38 41 33 38 41 34 41 43 42 49 51 42 49 51 38 46 48 38 46 48 34 41 43 -34 41 43 38 46 48 34 41 43 38 46 48 38 46 48 157 157 157 245 244 244 251 250 250 -157 157 157 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 147 147 146 251 250 250 233 232 232 134 119 113 128 86 51 -128 86 51 63 45 38 7 8 10 9 10 12 8 9 11 9 10 12 26 28 29 119 117 113 -69 73 72 10 11 13 9 10 12 51 47 32 216 177 82 200 163 79 33 33 31 89 75 50 -241 195 89 161 132 61 216 177 82 248 200 89 161 132 61 51 47 32 200 163 79 189 156 74 -223 182 84 161 132 61 122 100 50 241 195 89 161 132 61 241 195 89 122 100 50 20 24 26 -7 16 24 189 156 74 208 171 79 21 25 29 29 32 34 23 27 31 20 24 26 20 23 23 -13 15 17 10 11 13 10 12 14 10 12 14 13 15 17 20 23 23 20 23 23 16 19 20 -16 19 20 29 32 34 33 38 41 33 38 41 28 35 38 29 32 34 29 32 34 25 30 33 -34 41 43 38 46 48 42 49 51 42 49 51 38 46 48 38 46 48 42 49 51 38 46 48 -42 49 51 46 53 56 38 46 48 33 38 41 34 41 43 122 123 123 245 244 244 251 250 250 -157 157 157 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 147 147 146 251 250 250 237 237 237 134 119 113 107 75 50 -107 75 50 22 12 9 8 9 11 9 10 12 8 9 11 0 0 0 97 96 96 134 134 133 -20 20 21 9 10 12 10 12 14 63 45 38 235 190 84 177 145 72 26 28 29 122 100 50 -241 195 89 161 132 61 223 182 84 248 200 89 161 132 61 51 47 32 216 177 82 177 145 72 -235 192 90 161 132 61 122 100 50 235 192 90 137 105 55 241 195 89 152 111 60 23 27 31 -21 25 29 216 177 82 177 145 72 7 16 24 29 32 34 25 30 33 23 27 31 20 24 26 -14 18 20 10 11 13 12 13 15 13 17 18 20 24 26 23 27 31 21 25 29 20 23 23 -20 23 23 23 27 31 33 38 41 28 35 38 29 32 34 25 30 33 23 27 31 21 25 29 -33 38 41 42 49 51 46 53 56 42 49 51 46 53 56 38 46 48 42 49 51 38 46 48 -51 47 44 107 51 29 49 32 29 5 12 15 105 107 107 230 230 229 255 255 255 237 237 237 -97 96 96 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 134 134 133 249 249 249 246 245 245 146 134 128 107 75 50 -81 52 41 13 13 13 10 11 13 10 11 13 5 6 8 67 67 66 167 162 159 52 51 50 -13 15 17 8 9 11 10 11 13 88 74 36 248 200 89 161 132 61 20 24 26 137 105 55 -241 195 89 152 111 60 235 190 84 248 200 89 177 145 72 81 52 41 228 186 86 161 132 61 -241 195 89 152 111 60 122 100 50 235 192 90 108 90 44 241 195 89 161 132 61 21 25 29 -81 52 41 228 186 86 152 111 60 7 16 24 23 27 31 25 30 33 29 32 34 16 22 26 -13 15 17 10 12 14 13 17 18 16 19 20 20 24 26 21 25 29 21 25 29 4 4 14 -168 168 168 122 123 123 23 27 31 28 35 38 28 35 38 25 30 33 29 32 34 23 27 31 -28 35 38 42 49 51 42 49 51 46 53 56 46 53 56 38 46 48 42 49 51 81 52 41 -158 73 41 176 79 38 129 59 33 85 88 88 225 222 218 255 255 255 246 245 245 147 147 146 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 77 78 76 105 107 107 122 123 123 122 123 123 122 123 123 105 107 107 67 67 66 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 139 137 135 249 249 249 243 242 242 134 119 113 89 75 50 -20 20 21 8 9 11 10 11 13 10 11 13 39 42 42 157 157 157 77 78 76 12 15 17 -14 18 20 7 10 12 7 10 12 108 90 44 248 200 89 137 105 55 16 22 26 161 132 61 -241 195 89 152 111 60 235 190 84 248 200 89 177 145 72 81 52 41 235 192 90 152 111 60 -241 195 89 152 111 60 122 100 50 235 192 90 108 90 44 228 186 86 177 145 72 26 28 29 -108 90 44 235 192 90 89 75 50 16 22 26 23 27 31 25 30 33 29 32 34 16 19 20 -12 15 17 12 15 17 16 19 20 16 22 26 25 30 33 21 25 29 20 24 26 85 88 88 -233 232 232 226 226 226 77 78 76 28 35 38 28 35 38 29 32 34 34 41 43 28 35 38 -28 35 38 39 42 42 42 49 51 54 58 58 38 46 48 39 42 42 107 51 29 166 76 38 -182 81 38 180 81 37 170 77 39 147 147 146 248 248 248 254 254 254 182 182 182 33 33 31 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 39 42 42 -162 160 159 226 226 226 243 242 242 252 252 252 253 253 253 252 252 252 243 242 242 216 216 216 -147 147 146 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 85 88 88 207 206 206 253 253 253 233 232 232 115 110 108 81 52 41 -3 3 8 6 7 9 9 10 12 12 13 15 105 107 107 134 134 133 26 28 29 16 19 20 -16 19 20 8 9 11 3 3 8 137 105 55 248 200 89 122 100 50 7 16 24 177 145 72 -241 195 89 137 105 55 235 190 84 248 200 89 177 145 72 88 74 36 241 195 89 161 132 61 -241 195 89 137 105 55 108 90 44 228 186 86 108 90 44 208 171 79 189 156 74 37 34 30 -137 105 55 228 186 86 51 47 32 21 25 29 25 30 33 25 30 33 25 30 33 20 23 23 -13 17 18 14 18 20 16 19 20 20 24 26 23 27 31 21 25 29 33 38 41 168 168 168 -252 252 252 251 250 250 177 176 172 42 49 51 28 35 38 33 38 41 38 46 48 34 41 43 -33 38 41 34 41 43 42 49 51 42 49 51 33 38 41 129 59 33 174 79 37 182 81 37 -182 81 37 180 81 37 179 79 37 126 96 80 230 230 229 255 255 255 207 206 206 52 51 50 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 26 28 29 177 176 172 -249 249 249 254 254 254 251 250 250 248 248 248 246 245 245 248 248 248 251 250 250 255 255 255 -248 248 248 182 182 182 52 51 50 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 69 73 72 230 230 229 254 254 254 254 254 254 200 200 199 89 68 66 27 25 23 -6 7 9 7 8 10 9 10 12 26 28 29 157 157 157 60 59 58 13 15 17 16 19 20 -16 19 20 8 9 11 3 3 8 177 145 72 241 195 89 108 90 44 7 16 24 189 156 74 -241 195 89 137 105 55 241 195 89 235 190 84 189 156 74 108 90 44 241 195 89 177 145 72 -241 195 89 122 100 50 108 90 44 228 186 86 89 75 50 189 156 74 208 171 79 51 47 32 -161 132 61 216 177 82 27 25 23 21 25 29 25 30 33 25 30 33 25 30 33 14 18 20 -13 17 18 14 18 20 16 19 20 16 19 20 20 24 26 21 25 29 84 81 78 237 237 237 -255 255 255 255 255 255 240 239 239 105 107 107 33 38 41 38 46 48 38 46 48 39 42 42 -33 38 41 34 41 43 34 41 43 51 47 32 129 59 33 176 79 38 182 81 38 182 81 38 -182 81 38 182 81 38 182 81 37 159 71 30 177 176 172 254 254 254 246 245 245 97 96 96 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 88 88 240 239 239 -255 255 255 226 226 226 200 200 199 200 200 199 200 200 199 196 196 196 200 200 199 226 226 226 -254 254 254 251 250 250 168 168 168 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 168 168 168 254 254 254 249 249 249 207 206 206 97 96 96 0 0 0 6 7 9 -8 8 9 8 9 11 2 2 2 84 81 78 147 147 146 0 0 0 12 13 15 16 19 20 -13 15 17 8 9 11 3 3 8 189 156 74 228 186 86 88 74 36 16 22 26 189 156 74 -235 190 84 152 111 60 241 195 89 216 177 82 189 156 74 137 105 55 235 192 90 177 145 72 -235 190 84 108 90 44 122 100 50 228 186 86 89 75 50 161 132 61 223 182 84 81 52 41 -177 145 72 189 156 74 27 25 23 20 24 26 23 27 31 28 35 38 25 30 33 13 17 18 -14 18 20 14 18 20 16 19 20 16 19 20 16 22 26 3 3 8 168 168 168 255 255 255 -249 249 249 248 248 248 255 255 255 216 216 216 69 73 72 34 41 43 33 38 41 28 35 38 -33 38 41 46 53 56 63 45 38 138 69 38 179 80 38 182 81 38 182 81 37 182 81 38 -182 81 38 182 81 38 182 81 38 179 79 37 126 96 80 243 242 242 255 255 255 190 190 190 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 134 134 133 255 255 255 -249 249 249 168 168 168 247 247 246 255 255 255 255 255 255 254 254 254 246 245 245 196 196 196 -220 219 215 255 255 255 246 245 245 122 123 123 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 162 160 159 254 254 254 252 252 252 226 226 226 200 200 199 147 147 146 20 23 23 -6 7 9 7 8 10 3 3 6 66 65 61 139 137 135 0 0 0 13 17 18 16 19 20 -12 15 17 8 9 11 2 2 2 208 171 79 223 182 84 88 74 36 33 33 31 200 163 79 -223 182 84 161 132 61 235 192 90 208 171 79 200 163 79 161 132 61 235 190 84 189 156 74 -235 190 84 108 90 44 122 100 50 228 186 86 89 75 50 137 105 55 235 192 90 88 74 36 -208 171 79 161 132 61 20 23 23 20 24 26 23 27 31 29 32 34 21 25 29 13 17 18 -14 18 20 12 15 17 14 18 20 16 19 20 13 17 18 97 96 96 240 239 239 255 255 255 -200 200 199 182 182 182 253 253 253 252 252 252 179 179 176 38 46 48 33 38 41 33 38 41 -38 46 48 63 45 38 148 72 46 179 80 38 182 81 37 182 81 38 182 81 38 182 81 37 -182 81 38 182 81 38 182 81 38 182 81 38 158 73 41 190 190 190 255 255 255 237 237 237 -67 67 66 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 162 160 159 255 255 255 -237 237 237 182 182 182 255 255 255 246 245 245 216 216 216 237 237 237 254 254 254 253 253 253 -190 190 190 233 232 232 255 255 255 216 216 216 52 51 50 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 64 64 61 225 222 218 252 252 252 255 255 255 255 255 255 251 250 250 177 176 172 -60 59 58 5 6 8 7 8 10 20 20 21 157 157 157 13 15 17 13 17 18 16 19 20 -12 13 15 7 8 10 2 2 2 228 186 86 216 177 82 63 45 38 51 47 32 208 171 79 -216 177 82 161 132 61 235 192 90 200 163 79 208 171 79 177 145 72 228 186 86 189 156 74 -235 190 84 89 75 50 137 105 55 228 186 86 88 74 36 122 100 50 241 195 89 108 90 44 -223 182 84 137 105 55 16 19 20 20 23 23 21 25 29 23 27 31 16 19 20 13 17 18 -13 17 18 13 15 17 13 15 17 20 20 21 26 28 29 182 182 182 253 253 253 245 244 244 -122 123 123 60 59 58 207 206 206 254 254 254 237 237 237 115 110 108 33 38 41 34 41 43 -81 52 41 158 73 41 182 81 38 182 81 37 182 81 38 182 81 38 182 81 38 182 81 37 -182 81 37 182 81 38 182 81 38 182 81 38 179 81 40 146 134 128 248 248 248 251 250 250 -162 160 159 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 168 168 168 255 255 255 -230 230 229 196 196 196 255 255 255 216 216 216 0 0 0 85 88 88 213 211 211 255 255 255 -247 247 246 196 196 196 251 250 250 247 247 246 139 137 135 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 77 78 76 162 160 159 196 196 196 230 230 229 254 254 254 252 252 252 -200 200 199 84 81 78 0 0 0 17 18 16 139 137 135 97 96 96 13 17 18 16 19 20 -10 11 13 6 7 9 27 25 23 235 192 90 208 171 79 37 34 30 51 47 32 208 171 79 -208 171 79 161 132 61 228 186 86 189 156 74 208 171 79 189 156 74 223 182 84 200 163 79 -235 190 84 89 75 50 152 111 60 228 186 86 88 74 36 108 90 44 235 192 90 152 111 60 -228 186 86 122 100 50 16 22 26 21 25 29 23 27 31 23 27 31 16 19 20 12 13 15 -12 13 15 13 15 17 13 17 18 16 19 20 85 88 88 230 230 229 254 254 254 200 200 199 -33 33 31 0 0 0 105 107 107 243 242 242 255 255 255 196 196 196 21 25 29 81 52 41 -158 73 41 182 81 37 182 81 38 182 81 38 182 81 38 182 81 38 182 81 38 182 81 37 -182 81 38 182 81 37 182 81 37 182 81 38 180 81 37 150 99 58 225 222 218 255 255 255 -216 216 216 64 64 61 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 168 168 168 255 255 255 -233 232 232 196 196 196 255 255 255 213 211 211 0 0 0 0 0 0 105 107 107 233 232 232 -254 254 254 213 211 211 237 237 237 255 255 255 190 190 190 39 42 42 0 0 0 0 0 0 -0 0 0 0 0 0 13 13 13 26 28 29 39 42 42 52 51 50 64 64 61 69 73 72 -85 88 88 122 123 123 162 160 159 200 200 199 216 216 216 240 239 239 255 255 255 255 255 255 -254 254 254 233 232 232 122 123 123 33 33 31 97 96 96 139 137 135 28 30 31 13 15 17 -9 10 12 5 6 8 81 52 41 241 195 89 189 156 74 14 18 20 63 45 38 216 177 82 -200 163 79 177 145 72 216 177 82 177 145 72 216 177 82 200 163 79 216 177 82 200 163 79 -235 190 84 89 75 50 161 132 61 223 182 84 81 52 41 88 74 36 223 182 84 189 156 74 -228 186 86 108 90 44 23 27 31 23 27 31 29 32 34 25 30 33 14 18 20 13 15 17 -12 13 15 13 15 17 13 17 18 26 28 29 177 176 172 254 254 254 247 247 246 134 131 128 -0 0 0 0 0 0 0 0 0 192 189 185 255 255 255 248 248 248 157 157 157 129 59 33 -179 80 38 180 81 37 182 81 38 182 81 38 182 81 38 182 81 38 182 81 38 182 81 37 -182 81 37 182 81 38 182 81 38 182 81 38 182 81 37 166 76 38 182 182 182 253 253 253 -246 245 245 122 123 123 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 147 147 146 255 255 255 -240 239 239 182 182 182 255 255 255 230 230 229 0 0 0 0 0 0 13 13 13 182 182 182 -253 253 253 233 232 232 207 206 206 255 255 255 230 230 229 67 67 66 52 51 50 97 96 96 -119 117 113 147 147 146 168 168 168 192 189 185 196 196 196 213 211 211 226 226 226 237 237 237 -247 247 246 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 254 254 254 249 249 249 -237 237 237 226 226 226 207 206 206 122 123 123 84 81 78 147 147 146 69 73 72 10 11 13 -9 10 12 3 3 8 108 90 44 241 195 89 177 145 72 7 16 24 81 52 41 216 177 82 -200 163 79 189 156 74 208 171 79 177 145 72 223 182 84 208 171 79 216 177 82 200 163 79 -235 190 84 81 52 41 177 145 72 223 182 84 81 52 41 51 47 32 208 171 79 228 186 86 -223 182 84 88 74 36 25 30 33 25 30 33 28 35 38 23 27 31 13 17 18 12 15 17 -16 19 20 12 15 17 6 7 9 105 107 107 243 242 242 255 255 255 200 200 199 0 0 0 -0 0 0 0 0 0 0 0 0 97 96 96 237 237 237 255 255 255 237 237 237 105 107 107 -166 76 38 182 81 37 182 81 37 182 81 38 182 81 38 182 81 38 182 81 38 182 81 38 -182 81 38 182 81 38 182 81 38 182 81 38 182 81 38 175 79 35 126 96 80 243 242 242 -255 255 255 190 190 190 13 13 13 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 122 123 123 255 255 255 -252 252 252 162 160 159 255 255 255 246 245 245 97 96 96 0 0 0 0 0 0 134 131 128 -249 249 249 248 248 248 168 168 168 254 254 254 251 250 250 225 222 218 230 230 229 237 237 237 -243 242 242 251 250 250 253 253 253 255 255 255 255 255 255 255 255 255 254 254 254 254 254 254 -254 254 254 251 250 250 240 239 239 220 219 215 200 200 199 182 182 182 167 162 159 168 168 168 -182 182 182 203 196 190 206 202 198 214 212 206 206 202 198 157 157 157 57 54 50 9 10 12 -8 8 9 3 3 6 122 100 50 241 195 89 177 145 72 7 16 24 88 74 36 223 182 84 -189 156 74 189 156 74 200 163 79 161 132 61 235 192 90 216 177 82 208 171 79 200 163 79 -228 186 86 63 45 38 177 145 72 216 177 82 63 45 38 20 20 21 200 163 79 248 200 89 -216 177 82 63 45 38 25 30 33 28 35 38 33 38 41 25 30 33 13 17 18 13 17 18 -16 19 20 12 15 17 0 0 0 182 182 182 255 255 255 240 239 239 97 96 96 0 0 0 -0 0 0 0 0 0 0 0 0 20 23 23 147 147 146 245 244 244 253 253 253 179 179 176 -107 75 50 179 81 40 180 81 37 179 81 36 180 81 37 180 81 37 180 81 37 182 81 38 -182 81 37 182 81 37 182 81 38 182 81 38 182 81 37 182 81 37 147 67 29 182 182 182 -255 255 255 246 245 245 97 96 96 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 84 81 78 243 242 242 -254 254 254 190 190 190 240 239 239 252 252 252 182 182 182 97 96 96 134 131 128 182 182 182 -251 250 250 255 255 255 168 168 168 246 245 245 255 255 255 255 255 255 255 255 255 251 250 250 -246 245 245 240 239 239 237 237 237 226 226 226 220 219 215 213 211 211 190 190 190 179 179 176 -162 160 159 157 157 157 162 160 159 177 176 172 203 196 190 214 212 206 219 214 205 223 218 211 -226 220 210 226 220 210 226 222 213 225 221 213 226 222 213 230 225 217 119 117 113 2 2 2 -6 7 9 3 3 6 152 111 60 241 195 89 161 132 61 7 16 24 88 74 36 223 182 84 -189 156 74 200 163 79 189 156 74 152 111 60 241 195 89 216 177 82 208 171 79 208 171 79 -228 186 86 63 45 38 189 156 74 216 177 82 51 47 32 5 12 15 177 145 72 248 200 89 -200 163 79 37 34 30 25 30 33 28 35 38 29 32 34 21 25 29 13 15 17 12 15 17 -13 17 18 12 15 17 12 13 14 213 211 211 255 255 255 207 206 206 52 51 50 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 26 28 29 207 206 206 255 255 255 243 242 242 -119 117 113 147 67 29 180 81 37 179 81 36 179 81 36 180 81 37 180 81 37 179 81 36 -179 81 36 180 81 37 182 81 38 182 81 38 180 81 37 182 81 37 178 79 39 126 96 80 -243 242 242 254 254 254 182 182 182 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 52 51 50 207 206 206 -255 255 255 226 226 226 207 206 206 254 254 254 245 244 244 237 237 237 251 250 250 255 255 255 -255 255 255 255 255 255 182 182 182 216 216 216 225 222 218 200 200 199 179 179 176 177 176 172 -177 176 172 177 176 172 177 170 162 177 170 162 177 176 172 197 182 169 203 196 190 206 202 198 -219 214 205 221 217 205 222 218 209 222 218 209 226 220 210 225 221 213 226 222 213 226 222 213 -229 225 217 229 225 217 229 225 217 225 221 213 225 221 213 229 225 217 157 157 157 0 0 0 -6 7 9 3 3 6 161 132 61 241 195 89 137 105 55 7 16 24 88 74 36 228 186 86 -177 145 72 208 171 79 189 156 74 137 105 55 241 195 89 223 182 84 208 171 79 208 171 79 -228 186 86 51 47 32 189 156 74 216 177 82 51 47 32 7 16 24 152 111 60 248 200 89 -189 156 74 7 16 24 23 27 31 28 35 38 25 30 33 20 24 26 13 15 17 10 12 14 -14 18 20 20 23 23 69 73 72 233 232 232 254 254 254 182 182 182 26 28 29 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 105 107 107 237 237 237 255 255 255 -220 219 215 89 68 66 166 76 38 179 81 36 179 81 36 179 80 38 180 81 37 180 81 37 -180 81 37 180 81 37 182 81 38 182 81 37 180 81 37 180 81 37 182 81 38 145 89 57 -196 196 196 255 255 255 233 232 232 69 73 72 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 52 51 50 182 182 182 -253 253 253 251 250 250 182 182 182 243 242 242 255 255 255 253 253 253 248 248 248 237 237 237 -213 211 211 177 176 172 115 110 108 115 110 108 177 176 172 192 189 185 206 202 198 206 202 198 -206 202 198 206 202 198 220 209 198 219 214 205 219 214 205 221 217 205 221 217 205 222 218 209 -226 220 210 223 218 211 223 218 211 225 221 213 226 222 213 226 222 213 226 222 213 226 222 213 -229 225 217 226 222 213 229 225 217 226 222 213 226 222 213 225 221 213 162 160 159 0 0 0 -6 7 9 3 3 6 177 145 72 241 195 89 122 100 50 7 16 24 88 74 36 228 186 86 -177 145 72 208 171 79 177 145 72 122 100 50 241 195 89 228 186 86 208 171 79 208 171 79 -228 186 86 51 47 32 189 156 74 208 171 79 51 47 32 14 18 20 108 90 44 241 195 89 -161 132 61 16 22 26 29 32 34 28 35 38 23 27 31 20 24 26 13 15 17 12 13 15 -16 19 20 16 22 26 119 117 113 243 242 242 251 250 250 147 147 146 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 13 13 13 162 160 159 252 252 252 -252 252 252 190 190 190 107 75 50 176 79 38 179 81 36 179 80 38 179 80 38 180 81 37 -180 81 37 179 80 38 180 81 37 180 81 37 179 81 36 179 81 36 180 81 37 174 79 37 -154 142 136 248 248 248 247 247 246 139 137 135 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 13 13 13 182 182 182 252 252 252 -255 255 255 255 255 255 207 206 206 177 176 172 207 206 206 190 190 190 167 162 159 157 157 157 -177 176 172 203 196 190 192 189 185 192 189 185 220 209 198 220 209 198 219 214 205 219 214 205 -219 214 205 221 217 205 221 217 205 221 217 205 221 217 205 221 217 205 222 218 209 222 218 209 -223 218 211 226 220 210 226 220 210 225 221 213 226 222 213 226 222 213 225 221 213 226 222 213 -226 222 213 229 225 217 229 225 217 229 225 217 230 225 217 230 225 217 177 170 162 0 0 0 -5 6 8 3 3 8 189 156 74 241 195 89 108 90 44 12 15 17 88 74 36 235 190 84 -177 145 72 216 177 82 177 145 72 122 100 50 241 195 89 241 195 89 208 171 79 208 171 79 -228 186 86 37 34 30 200 163 79 208 171 79 51 47 32 16 22 26 89 75 50 241 195 89 -177 145 72 7 16 24 28 35 38 28 35 38 23 27 31 16 19 20 13 17 18 13 17 18 -16 22 26 21 25 29 147 147 146 249 249 249 243 242 242 119 117 113 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 63 62 61 200 200 199 -254 254 254 246 245 245 147 147 146 129 59 33 179 80 38 179 80 38 180 81 37 180 81 37 -180 81 37 179 81 36 180 81 37 180 81 37 179 81 36 179 81 36 180 81 37 179 81 36 -126 96 80 233 232 232 255 255 255 196 196 196 39 42 42 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 97 96 96 246 245 245 254 254 254 -225 222 218 162 160 159 139 137 135 167 162 159 192 189 185 203 196 190 206 202 198 220 209 198 -219 214 205 219 214 205 221 217 205 219 214 205 219 214 205 221 217 205 219 214 205 219 214 205 -219 214 205 221 217 205 221 217 205 221 217 205 221 217 205 221 217 205 222 218 209 223 218 211 -223 218 211 226 220 210 226 220 210 225 221 213 225 221 213 225 221 213 226 222 213 229 225 217 -226 222 213 229 225 217 229 225 217 230 225 217 231 227 218 230 225 217 192 189 185 0 0 0 -5 6 8 4 4 14 189 156 74 241 195 89 88 74 36 13 17 18 88 74 36 235 190 84 -161 132 61 223 182 84 177 145 72 108 90 44 241 195 89 248 200 89 208 171 79 216 177 82 -228 186 86 27 25 23 200 163 79 208 171 79 51 47 32 16 22 26 122 100 50 248 200 89 -200 163 79 27 25 23 28 35 38 29 32 34 20 24 26 14 18 20 14 18 20 16 19 20 -20 23 23 28 30 31 177 176 172 254 254 254 233 232 232 64 64 61 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 88 88 -230 230 229 255 255 255 240 239 239 119 117 113 159 71 30 179 81 36 179 81 36 180 81 37 -180 81 37 180 81 37 179 80 38 179 80 38 179 80 38 180 81 37 179 81 36 179 81 36 -159 71 30 192 189 185 255 255 255 240 239 239 85 88 88 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 134 134 133 249 249 249 245 244 244 -122 123 123 179 179 176 147 147 146 214 212 206 219 214 205 219 214 205 219 214 205 221 217 205 -220 215 207 221 217 205 222 218 209 219 214 205 221 217 205 221 217 205 219 214 205 219 214 205 -221 217 205 221 217 205 219 214 205 221 217 205 222 218 209 222 218 209 222 218 209 223 218 211 -226 220 210 223 218 211 226 220 210 226 220 210 226 222 213 226 222 213 226 222 213 226 222 213 -229 225 217 229 225 217 229 225 217 230 225 217 230 225 217 230 225 217 192 189 185 0 0 0 -3 3 6 27 25 23 200 163 79 241 195 89 63 45 38 14 18 20 88 74 36 235 190 84 -161 132 61 223 182 84 161 132 61 108 90 44 235 190 84 248 200 89 208 171 79 216 177 82 -223 182 84 5 12 15 200 163 79 208 171 79 51 47 32 7 16 24 161 132 61 248 200 89 -216 177 82 63 45 38 23 27 31 23 27 31 20 23 23 16 19 20 14 18 20 13 17 18 -16 19 20 52 51 50 206 202 198 255 255 255 216 216 216 20 23 23 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -119 117 113 240 239 239 255 255 255 230 230 229 105 88 81 166 76 38 179 80 38 179 80 38 -179 80 38 179 81 40 179 80 38 179 80 38 179 79 37 179 81 36 180 81 37 179 81 36 -179 79 37 126 96 80 246 245 245 255 255 255 182 182 182 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 105 107 107 248 248 248 252 252 252 -139 137 135 206 202 198 147 147 146 219 214 205 222 218 209 222 218 209 222 218 209 222 218 209 -222 218 209 222 218 209 223 218 211 221 217 205 222 218 209 221 217 205 221 217 205 221 217 205 -221 217 205 221 217 205 221 217 205 221 217 205 222 218 209 222 218 209 222 218 209 222 218 209 -223 218 211 223 218 211 226 220 210 225 221 213 225 221 213 226 222 213 226 222 213 226 222 213 -229 225 217 226 222 213 229 225 217 230 225 217 230 225 217 230 225 217 206 202 198 0 0 0 -5 6 8 49 32 29 208 171 79 241 195 89 37 34 30 12 15 17 108 90 44 235 192 90 -161 132 61 228 186 86 161 132 61 88 74 36 228 186 86 248 200 89 208 171 79 223 182 84 -223 182 84 4 4 14 189 156 74 216 177 82 63 45 38 5 12 15 177 145 72 248 200 89 -228 186 86 88 74 36 23 27 31 23 27 31 20 23 23 12 15 17 13 17 18 14 18 20 -16 19 20 69 73 72 233 232 232 254 254 254 182 182 182 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -13 13 13 147 147 146 246 245 245 254 253 253 207 206 206 107 75 50 170 77 39 180 81 37 -179 80 38 179 80 38 179 80 38 179 80 38 179 80 38 180 81 37 180 81 37 179 81 36 -182 81 37 148 72 46 190 190 190 255 255 255 237 237 237 60 59 58 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 52 51 50 237 237 237 255 255 255 -167 162 159 203 196 190 147 147 146 214 212 206 223 218 211 223 218 211 223 218 211 226 220 210 -226 220 210 226 220 210 226 220 210 222 218 209 223 218 211 222 218 209 221 217 205 221 217 205 -221 217 205 221 217 205 221 217 205 221 217 205 222 218 209 222 218 209 222 218 209 222 218 209 -223 218 211 223 218 211 223 218 211 226 220 210 226 222 213 226 222 213 226 222 213 225 221 213 -226 222 213 226 222 213 226 222 213 230 225 217 231 227 218 230 225 217 214 212 206 0 0 0 -5 6 8 51 47 32 208 171 79 235 190 84 12 15 17 12 13 15 108 90 44 235 192 90 -161 132 61 228 186 86 161 132 61 88 74 36 223 182 84 248 200 89 216 177 82 228 186 86 -223 182 84 3 3 8 189 156 74 216 177 82 63 45 38 20 20 21 189 156 74 228 186 86 -235 192 90 108 90 44 23 27 31 21 25 29 20 23 23 12 15 17 12 15 17 14 18 20 -12 15 17 119 117 113 254 254 254 252 252 252 119 117 113 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -13 13 13 85 88 88 226 226 226 255 255 255 254 254 254 190 190 190 107 51 29 174 79 37 -179 80 38 179 80 38 179 80 38 179 80 38 179 80 38 179 81 36 179 81 36 179 81 36 -180 81 37 178 79 39 146 134 128 248 248 248 251 250 250 157 157 157 20 23 23 13 13 13 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 216 216 216 255 255 255 -200 200 199 177 176 172 162 160 159 192 189 185 226 220 210 222 218 209 223 218 211 226 220 210 -226 220 210 226 220 210 226 220 210 223 218 211 223 218 211 222 218 209 221 217 205 222 218 209 -221 217 205 221 217 205 221 217 205 221 217 205 221 217 205 221 217 205 222 218 209 223 218 211 -226 220 210 226 220 210 226 220 210 225 221 213 225 221 213 225 221 213 226 222 213 226 222 213 -226 222 213 226 222 213 229 225 217 230 225 217 229 225 217 229 225 217 206 202 198 0 0 0 -6 7 9 63 45 38 216 177 82 228 186 86 4 4 14 12 13 15 108 90 44 241 195 89 -152 111 60 228 186 86 161 132 61 63 45 38 216 177 82 248 200 89 216 177 82 228 186 86 -223 182 84 4 4 14 189 156 74 223 182 84 81 52 41 51 47 32 208 171 79 200 163 79 -228 186 86 152 111 60 25 30 33 21 25 29 16 19 20 16 19 20 16 19 20 14 18 20 -0 0 0 182 182 182 255 255 255 233 232 232 33 33 31 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -85 88 88 225 222 218 254 254 254 254 254 254 230 230 229 192 189 185 105 88 81 166 76 38 -179 79 37 179 80 38 179 80 38 179 80 38 179 80 38 180 81 37 179 81 36 180 81 37 -180 81 37 180 81 37 145 89 57 216 216 216 255 255 255 233 232 232 182 182 182 162 160 159 -85 88 88 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 182 182 182 255 255 255 -230 230 229 139 137 135 192 189 185 157 157 157 225 221 213 223 218 211 226 220 210 226 220 210 -225 221 213 226 220 210 226 220 210 223 218 211 223 218 211 226 220 210 226 220 210 225 221 213 -226 220 210 221 217 205 221 217 205 221 217 205 221 217 205 222 218 209 222 218 209 223 218 211 -223 218 211 226 220 210 226 220 210 226 220 210 225 221 213 225 221 213 225 221 213 226 222 213 -226 222 213 226 222 213 226 222 213 229 225 217 229 225 217 229 225 217 177 170 162 0 0 0 -8 8 9 81 52 41 216 177 82 216 177 82 4 4 14 12 13 15 108 90 44 241 195 89 -152 111 60 228 186 86 161 132 61 49 32 29 208 171 79 248 200 89 216 177 82 223 182 84 -223 182 84 27 25 23 177 145 72 228 186 86 88 74 36 81 52 41 223 182 84 161 132 61 -208 171 79 189 156 74 27 25 23 20 23 23 13 15 17 13 17 18 13 17 18 13 17 18 -0 0 0 233 232 232 255 255 255 190 190 190 13 13 13 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -177 176 172 255 255 255 251 250 250 192 189 185 166 113 90 166 76 38 173 77 35 179 79 37 -178 79 39 179 80 38 179 80 38 179 80 38 179 80 38 179 79 37 179 81 36 179 81 36 -179 81 36 180 81 37 166 76 38 147 147 146 249 249 249 255 255 255 255 255 255 252 252 252 -233 232 232 134 131 128 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 122 123 123 254 254 254 -252 252 252 139 137 135 206 202 198 122 123 123 226 222 213 223 218 211 226 220 210 226 220 210 -225 221 213 225 221 213 226 220 210 223 218 211 225 221 213 214 212 206 192 189 185 214 212 206 -222 218 209 221 217 205 221 217 205 221 217 205 221 217 205 222 218 209 222 218 209 222 218 209 -222 218 209 226 220 210 226 220 210 223 218 211 226 220 210 225 221 213 225 221 213 225 221 213 -226 222 213 226 222 213 226 222 213 226 222 213 226 222 213 226 222 213 97 96 96 2 2 2 -10 11 13 88 74 36 223 182 84 216 177 82 3 3 8 12 13 14 108 90 44 241 195 89 -152 111 60 228 186 86 161 132 61 27 25 23 200 163 79 248 200 89 223 182 84 216 177 82 -228 186 86 51 47 32 161 132 61 228 186 86 89 75 50 88 74 36 228 186 86 137 105 55 -177 145 72 216 177 82 27 25 23 20 23 23 13 15 17 12 13 15 12 13 15 10 11 13 -52 51 50 243 242 242 255 255 255 157 157 157 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -182 182 182 255 255 255 243 242 242 146 134 128 145 89 57 158 73 41 158 73 41 138 69 38 -166 76 38 179 79 37 179 79 37 179 80 38 179 80 38 179 80 38 179 80 38 180 81 37 -179 81 36 179 80 38 178 79 39 129 59 33 177 170 162 225 222 218 226 226 226 252 252 252 -255 255 255 233 232 232 67 67 66 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 78 76 237 237 237 -254 254 254 182 182 182 192 189 185 139 137 135 214 212 206 226 220 210 225 221 213 225 221 213 -225 221 213 225 221 213 226 220 210 219 214 205 214 212 206 115 110 108 0 0 0 182 182 182 -214 212 206 167 162 159 182 182 182 222 218 209 221 217 205 222 218 209 222 218 209 222 218 209 -222 218 209 223 218 211 226 220 210 226 220 210 226 220 210 226 220 210 226 220 210 226 222 213 -225 221 213 225 221 213 226 222 213 226 222 213 226 222 213 203 196 190 57 54 50 5 6 8 -12 13 15 88 74 36 228 186 86 208 171 79 3 3 8 10 12 14 108 90 44 241 195 89 -152 111 60 228 186 86 161 132 61 4 4 14 177 145 72 248 200 89 223 182 84 208 171 79 -235 190 84 88 74 36 161 132 61 235 190 84 89 75 50 108 90 44 235 192 90 88 74 36 -161 132 61 241 195 89 81 52 41 14 18 20 9 10 12 9 10 12 10 12 14 12 13 15 -0 0 0 233 232 232 255 255 255 179 179 176 13 13 13 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -139 137 135 253 253 253 255 255 255 237 237 237 115 110 108 107 51 29 147 67 29 174 79 37 -180 81 37 179 80 38 179 79 37 179 80 38 179 81 40 179 80 38 179 80 38 179 80 38 -179 81 36 179 80 38 180 81 37 179 81 40 129 59 33 42 16 9 97 96 96 207 206 206 -254 254 254 248 248 248 122 123 123 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 47 49 48 207 206 206 -255 255 255 220 219 215 167 162 159 177 176 172 192 189 185 225 221 213 225 221 213 225 221 213 -226 220 210 223 218 211 182 182 182 115 110 108 147 147 146 33 38 41 69 68 64 203 196 190 -139 137 135 27 25 23 84 81 78 214 212 206 220 215 207 221 217 205 222 218 209 222 218 209 -222 218 209 222 218 209 222 218 209 226 220 210 225 221 213 226 220 210 225 221 213 226 222 213 -225 221 213 226 222 213 226 222 213 226 222 213 225 221 213 147 147 146 20 20 21 5 6 8 -10 12 14 88 74 36 228 186 86 200 163 79 3 3 8 10 12 14 108 90 44 241 195 89 -152 111 60 228 186 86 161 132 61 4 4 14 161 132 61 248 200 89 228 186 86 200 163 79 -235 190 84 88 74 36 152 111 60 241 195 89 108 90 44 122 100 50 235 192 90 81 52 41 -122 100 50 235 192 90 137 105 55 5 12 15 9 10 12 9 10 12 12 13 15 16 19 20 -0 0 0 213 211 211 255 255 255 200 200 199 13 13 13 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 88 88 -230 230 229 255 255 255 248 248 248 157 157 157 129 59 33 170 77 39 176 79 38 176 79 38 -179 80 38 179 79 37 179 80 38 179 80 38 179 80 38 179 80 38 179 80 38 179 80 38 -179 81 36 179 79 37 180 81 37 170 77 39 138 69 38 81 52 41 147 147 146 247 247 246 -255 255 255 220 219 215 33 33 31 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 13 13 13 168 168 168 -253 253 253 237 237 237 157 157 157 206 202 198 157 157 157 226 220 210 225 221 213 225 221 213 -223 218 211 192 189 185 69 68 64 52 51 50 47 49 48 17 18 16 139 137 135 167 162 159 -10 10 10 0 0 0 139 137 135 221 217 205 221 217 205 220 215 207 221 217 205 222 218 209 -222 218 209 221 217 205 221 217 205 222 218 209 223 218 211 223 218 211 223 218 211 226 220 210 -226 220 210 225 221 213 226 222 213 226 222 213 214 212 206 97 96 96 5 6 8 5 6 8 -10 11 13 88 74 36 235 190 84 200 163 79 3 3 8 12 13 15 108 90 44 241 195 89 -137 105 55 223 182 84 161 132 61 7 10 12 152 111 60 248 200 89 235 190 84 189 156 74 -235 190 84 108 90 44 137 105 55 241 195 89 108 90 44 137 105 55 228 186 86 63 45 38 -63 45 38 228 186 86 189 156 74 4 4 14 9 10 12 10 12 14 13 15 17 13 15 17 -0 0 0 179 179 176 255 255 255 233 232 232 33 33 31 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 88 88 216 216 216 -254 254 254 247 247 246 162 160 159 129 59 33 174 79 37 176 79 38 176 79 38 179 80 38 -179 79 37 179 80 38 179 80 38 179 80 38 179 80 38 179 80 38 179 80 38 179 81 40 -179 81 40 166 76 38 138 69 38 107 51 29 105 88 81 182 182 182 247 247 246 255 255 255 -237 237 237 122 123 123 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 134 134 133 -246 245 245 246 245 245 167 162 159 214 212 206 147 147 146 219 214 205 226 222 213 225 221 213 -219 214 205 105 107 107 13 13 13 63 62 61 17 18 16 57 54 50 177 170 162 84 81 78 -3 3 6 63 62 61 206 202 198 214 212 206 221 217 205 219 214 205 219 214 205 221 217 205 -221 217 205 221 217 205 221 217 205 221 217 205 221 217 205 222 218 209 222 218 209 222 218 209 -223 218 211 225 221 213 226 222 213 225 221 213 182 182 182 13 13 13 6 7 9 5 6 8 -10 12 14 88 74 36 235 190 84 189 156 74 3 3 8 10 12 14 108 90 44 241 195 89 -137 105 55 223 182 84 177 145 72 10 11 13 122 100 50 248 200 89 235 190 84 177 145 72 -241 195 89 122 100 50 122 100 50 241 195 89 108 90 44 161 132 61 216 177 82 51 47 32 -3 3 8 200 163 79 223 182 84 37 34 30 10 11 13 10 11 13 13 15 17 13 15 17 -10 12 14 134 134 133 255 255 255 246 245 245 67 67 66 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 39 42 42 213 211 211 254 254 254 -251 250 250 177 176 172 137 73 51 174 79 37 179 80 38 179 80 38 179 79 37 179 80 38 -179 80 38 179 80 38 179 80 38 179 80 38 179 80 38 179 80 38 179 80 38 179 79 37 -180 81 37 176 79 38 147 67 29 42 16 9 157 157 157 243 242 242 255 255 255 240 239 239 -134 131 128 13 13 13 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 97 96 96 -237 237 237 251 250 250 167 162 159 214 212 206 147 147 146 219 214 205 226 222 213 226 222 213 -167 162 159 0 0 0 52 51 50 33 33 31 0 0 0 115 110 108 147 147 146 2 2 2 -17 18 16 134 131 128 97 96 96 51 47 44 147 147 146 219 214 205 221 217 205 222 218 209 -221 217 205 221 217 205 222 218 209 222 218 209 223 218 211 223 218 211 223 218 211 226 220 210 -225 221 213 226 222 213 226 222 213 225 221 213 115 110 108 0 0 0 6 7 9 3 3 6 -12 13 14 108 90 44 235 190 84 189 156 74 3 3 8 10 11 13 108 90 44 241 195 89 -137 105 55 216 177 82 177 145 72 13 13 13 88 74 36 241 195 89 241 195 89 161 132 61 -241 195 89 137 105 55 108 90 44 241 195 89 122 100 50 189 156 74 200 163 79 49 32 29 -3 3 8 161 132 61 235 190 84 108 90 44 12 13 15 12 13 14 12 13 15 13 15 17 -12 15 17 97 96 96 253 253 253 252 252 252 105 107 107 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 33 33 31 177 176 172 254 254 254 252 252 252 -179 179 176 129 59 33 174 79 37 179 81 36 179 79 37 179 80 38 179 80 38 179 80 38 -179 80 38 179 80 38 179 80 38 179 80 38 179 80 38 179 79 37 179 80 38 179 80 38 -179 80 38 179 80 38 158 73 41 105 88 81 162 160 159 237 237 237 255 255 255 216 216 216 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 63 62 61 -230 230 229 255 255 255 177 176 172 206 202 198 162 160 159 214 212 206 225 221 213 214 212 206 -84 81 78 6 7 9 39 42 42 5 6 8 0 0 0 147 147 146 52 51 50 3 3 6 -63 62 61 97 96 96 17 18 16 26 28 29 52 51 50 206 202 198 220 215 207 221 217 205 -221 217 205 221 217 205 222 218 209 223 218 211 226 220 210 225 221 213 225 221 213 226 222 213 -226 222 213 220 215 207 214 212 206 192 189 185 33 33 31 5 6 8 5 6 8 3 3 6 -10 12 14 108 90 44 235 190 84 177 145 72 3 3 8 7 10 12 108 90 44 241 195 89 -137 105 55 216 177 82 177 145 72 17 18 16 37 34 30 235 192 90 241 195 89 152 111 60 -241 195 89 137 105 55 108 90 44 241 195 89 122 100 50 208 171 79 177 145 72 33 33 31 -7 10 12 88 74 36 241 195 89 161 132 61 13 13 13 9 10 12 12 15 17 13 17 18 -13 17 18 84 81 78 243 242 242 254 254 254 147 147 146 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 13 13 13 157 157 157 247 247 246 254 254 254 206 202 198 -123 75 52 174 79 37 175 79 35 176 79 38 176 79 38 176 79 38 179 80 38 179 79 37 -179 79 37 179 79 37 179 80 38 179 80 38 179 80 38 179 80 38 179 80 38 180 81 37 -176 79 38 129 59 33 147 147 146 225 222 218 254 254 254 255 255 255 248 248 248 147 147 146 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -225 222 218 255 255 255 190 190 190 192 189 185 167 162 159 214 212 206 225 221 213 177 170 162 -33 38 41 39 42 42 47 49 48 5 6 8 28 30 31 97 96 96 0 0 0 13 13 13 -97 96 96 52 51 50 7 8 10 69 73 72 85 88 88 219 214 205 219 214 205 219 214 205 -214 212 206 219 214 205 206 202 198 192 189 185 179 179 176 167 162 159 147 147 146 122 123 123 -97 96 96 69 68 64 68 65 63 67 67 66 8 8 9 5 6 8 5 6 8 5 6 8 -12 13 15 108 90 44 241 195 89 177 145 72 3 3 8 10 11 13 108 90 44 241 195 89 -137 105 55 208 171 79 189 156 74 17 18 16 2 2 2 223 182 84 248 200 89 137 105 55 -248 200 89 152 111 60 107 75 50 241 195 89 122 100 50 223 182 84 161 132 61 20 20 21 -14 18 20 27 25 23 216 177 82 189 156 74 37 34 30 8 9 11 12 13 15 12 13 15 -13 17 18 64 67 67 225 222 218 255 255 255 190 190 190 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 13 13 13 147 147 146 247 247 246 255 255 255 226 226 226 126 96 80 -170 77 39 175 79 35 175 79 35 175 79 35 176 79 38 176 79 38 179 79 37 179 79 37 -179 79 37 179 80 38 179 80 38 179 80 38 179 80 38 179 80 38 179 80 38 170 77 39 -126 96 80 196 196 196 249 249 249 255 255 255 249 249 249 216 216 216 134 131 128 20 23 23 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -200 200 199 255 255 255 216 216 216 167 162 159 167 162 159 206 202 198 222 218 209 139 137 135 -13 13 13 69 73 72 47 49 48 17 18 16 105 107 107 47 49 48 0 0 0 77 78 76 -97 96 96 0 0 0 20 20 21 85 88 88 139 137 135 182 182 182 167 162 159 139 137 135 -119 117 113 84 81 78 47 49 48 3 3 6 0 0 0 0 0 0 0 0 0 0 0 0 -3 3 6 8 8 9 52 51 50 52 51 50 6 7 9 5 6 8 5 6 8 5 6 8 -13 17 18 108 90 44 241 195 89 177 145 72 3 3 6 9 10 12 108 90 44 241 195 89 -137 105 55 208 171 79 189 156 74 20 20 21 3 3 8 200 163 79 248 200 89 122 100 50 -241 195 89 161 132 61 122 100 50 235 192 90 108 90 44 235 192 90 152 111 60 13 17 18 -13 15 17 20 20 21 161 132 61 223 182 84 63 45 38 9 10 12 12 13 15 13 15 17 -13 15 17 47 49 48 196 196 196 255 255 255 220 219 215 26 28 29 0 0 0 0 0 0 -0 0 0 26 28 29 147 147 146 246 245 245 255 255 255 230 230 229 134 119 113 168 75 33 -175 79 35 175 79 35 175 79 35 175 79 35 176 79 38 175 79 35 176 79 38 179 80 38 -179 79 37 179 79 37 179 80 38 179 79 37 179 80 38 179 80 38 159 71 30 126 96 80 -207 206 206 254 254 254 254 254 254 230 230 229 147 147 146 20 23 23 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -168 168 168 254 254 254 233 232 232 134 134 133 177 170 162 203 196 190 214 212 206 115 110 108 -12 13 15 64 64 61 39 42 42 13 13 13 63 62 61 20 20 21 0 0 0 77 78 76 -26 28 29 3 3 6 8 8 9 33 33 31 52 51 50 39 42 42 10 10 10 0 0 0 -0 0 0 2 2 2 5 6 8 6 7 9 6 7 9 7 8 10 6 7 9 6 7 9 -6 7 9 16 19 20 54 58 58 20 20 21 7 8 10 8 8 9 5 6 8 5 6 8 -10 11 13 108 90 44 241 195 89 177 145 72 3 3 6 10 11 13 108 90 44 241 195 89 -137 105 55 200 163 79 200 163 79 20 20 21 3 3 8 177 145 72 248 200 89 122 100 50 -228 186 86 177 145 72 161 132 61 228 186 86 108 90 44 235 192 90 137 105 55 12 13 15 -12 13 15 13 17 18 122 100 50 241 195 89 108 90 44 7 8 10 13 15 17 13 15 17 -13 15 17 20 24 26 162 160 159 252 252 252 237 237 237 97 96 96 0 0 0 0 0 0 -13 13 13 157 157 157 246 245 245 255 255 255 230 230 229 134 119 113 166 76 38 175 79 35 -175 79 35 175 79 35 175 79 35 176 79 38 175 79 35 176 79 38 176 79 38 179 79 37 -176 79 38 176 79 38 179 79 37 179 81 36 176 79 38 148 72 46 154 142 136 230 230 229 -254 254 254 253 253 253 200 200 199 85 88 88 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -119 117 113 253 253 253 252 252 252 122 123 123 177 176 172 182 182 182 220 215 207 139 137 135 -20 20 21 0 0 0 0 0 0 8 8 9 47 49 48 13 13 13 27 25 23 54 58 58 -39 42 42 69 73 72 84 81 78 85 88 88 105 107 107 105 107 107 97 96 96 60 59 58 -0 0 0 0 0 0 5 6 8 6 7 9 8 8 9 8 9 11 9 10 12 8 9 11 -3 3 6 64 64 61 57 54 50 5 6 8 6 7 9 8 8 9 5 6 8 3 3 6 -6 7 9 108 90 44 241 195 89 161 132 61 3 3 6 8 9 11 108 90 44 241 195 89 -137 105 55 189 156 74 208 171 79 17 18 16 3 3 8 152 111 60 248 200 89 137 105 55 -189 156 74 241 195 89 241 195 89 200 163 79 122 100 50 235 192 90 108 90 44 10 11 13 -9 10 12 10 11 13 88 74 36 223 182 84 177 145 72 3 3 8 13 15 17 13 15 17 -12 13 15 13 17 18 134 134 133 246 245 245 247 247 246 157 157 157 20 23 23 39 42 42 -157 157 157 249 249 249 255 255 255 233 232 232 146 134 128 166 76 38 175 79 35 174 79 37 -175 79 35 175 79 35 175 79 35 176 79 38 176 79 38 176 79 38 176 79 38 176 79 38 -176 79 38 176 79 38 179 81 36 166 76 38 126 96 80 192 189 185 250 250 249 255 255 255 -246 245 245 179 179 176 26 28 29 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -64 64 61 246 245 245 255 255 255 157 157 157 147 147 146 134 134 133 147 147 146 139 137 135 -157 157 157 168 168 168 122 123 123 157 157 157 213 211 211 190 190 190 196 196 196 216 216 216 -213 211 211 225 222 218 226 226 226 230 230 229 240 239 239 243 242 242 233 232 232 216 216 216 -182 182 182 134 131 128 52 51 50 0 0 0 0 0 0 6 7 9 7 8 10 5 6 8 -52 51 50 85 88 88 0 0 0 6 7 9 5 6 8 6 7 9 5 6 8 3 3 6 -5 6 8 108 90 44 241 195 89 161 132 61 3 3 6 6 7 9 108 90 44 241 195 89 -122 100 50 189 156 74 216 177 82 17 18 16 3 3 8 108 90 44 248 200 89 137 105 55 -108 90 44 223 182 84 228 186 86 122 100 50 152 111 60 228 186 86 81 52 41 6 7 9 -6 7 9 6 7 9 27 25 23 161 132 61 177 145 72 3 3 8 12 13 15 10 12 14 -12 13 15 13 17 18 69 73 72 230 230 229 255 255 255 243 242 242 119 117 113 190 190 190 -248 248 248 255 255 255 226 226 226 115 110 108 159 71 30 173 79 35 174 79 37 175 79 35 -175 79 35 175 79 35 175 79 35 175 79 35 175 79 35 175 79 35 176 79 38 176 79 38 -176 79 38 176 79 38 147 67 29 154 142 136 226 226 226 255 255 255 255 255 255 226 226 226 -147 147 146 33 33 31 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -26 28 29 220 219 215 255 255 255 213 211 211 119 117 113 162 160 159 190 190 190 190 190 190 -249 249 249 252 252 252 249 249 249 251 250 250 255 255 255 254 254 254 254 254 254 254 254 254 -254 254 254 253 253 253 252 252 252 252 252 252 251 250 250 251 250 250 252 252 252 255 255 255 -253 253 253 249 249 249 240 239 239 200 200 199 139 137 135 77 78 76 52 51 50 20 23 23 -84 81 78 39 42 42 7 8 10 6 7 9 6 7 9 7 8 10 6 7 9 3 3 6 -5 6 8 108 90 44 241 195 89 161 132 61 122 100 50 63 45 38 88 74 36 228 186 86 -122 100 50 177 145 72 200 163 79 22 12 9 6 7 9 51 47 32 177 145 72 88 74 36 -17 18 16 51 47 32 63 45 38 17 18 16 88 74 36 108 90 44 13 13 13 6 7 9 -5 6 8 6 7 9 9 10 12 37 34 30 37 34 30 10 11 13 12 13 14 13 15 17 -12 15 17 13 17 18 7 10 12 119 117 113 243 242 242 255 255 255 240 239 239 253 253 253 -254 254 254 226 226 226 105 107 107 42 16 9 107 51 29 166 76 38 174 79 37 176 79 38 -176 79 38 175 79 35 175 79 35 176 79 38 175 79 35 175 79 35 175 79 35 176 79 38 -170 77 39 126 96 80 182 182 182 247 247 246 255 255 255 248 248 248 190 190 190 69 73 72 -13 13 13 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -13 13 13 168 168 168 253 253 253 255 255 255 254 254 254 255 255 255 249 249 249 190 190 190 -249 249 249 255 255 255 251 250 250 246 245 245 225 222 218 220 219 215 216 216 216 200 200 199 -200 200 199 190 190 190 168 168 168 168 168 168 147 147 146 147 147 146 168 168 168 207 206 206 -233 232 232 249 249 249 255 255 255 255 255 255 255 255 255 243 242 242 213 211 211 168 168 168 -67 67 66 5 6 8 6 7 9 7 8 10 8 9 11 7 8 10 6 7 9 5 6 8 -3 3 6 88 74 36 200 163 79 200 163 79 177 145 72 88 74 36 37 34 30 108 90 44 -37 34 30 27 25 23 27 25 23 7 8 10 6 7 9 5 6 8 2 2 2 3 3 8 -7 8 10 7 8 10 8 9 11 9 10 12 10 11 13 5 6 8 5 6 8 5 6 8 -5 6 8 7 8 10 12 13 15 12 15 17 12 15 17 12 13 15 13 17 18 13 15 17 -12 15 17 13 17 18 14 18 20 97 96 96 247 247 246 255 255 255 255 255 255 251 250 250 -200 200 199 77 78 76 8 5 4 23 5 0 23 5 0 81 44 20 147 67 29 173 77 35 -175 79 35 175 79 35 175 79 35 176 79 38 175 79 35 174 79 37 172 77 34 138 69 38 -154 142 136 226 226 226 255 255 255 255 255 255 230 230 229 147 147 146 13 13 13 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 67 67 66 190 190 190 243 242 242 252 252 252 255 255 255 255 255 255 190 190 190 -246 245 245 255 255 255 182 182 182 119 117 113 69 73 72 64 64 61 60 59 58 26 28 29 -20 23 23 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 39 42 42 -85 88 88 122 123 123 177 176 172 226 226 226 251 250 250 255 255 255 255 255 255 226 226 226 -63 62 61 7 8 10 8 9 11 7 10 12 8 9 11 8 8 9 7 8 10 8 9 11 -9 10 12 20 20 21 49 32 29 22 12 9 2 2 2 3 3 6 6 7 9 3 3 8 -5 6 8 6 7 9 6 7 9 6 7 9 7 8 10 6 7 9 7 8 10 7 8 10 -7 8 10 8 9 11 7 8 10 8 9 11 13 15 17 12 13 15 10 11 13 9 10 12 -8 9 11 10 11 13 12 13 15 13 17 18 13 17 18 13 17 18 12 15 17 13 15 17 -12 13 15 20 24 26 26 28 29 67 67 66 190 190 190 216 216 216 200 200 199 147 147 146 -57 54 50 23 5 0 24 7 0 24 7 0 23 5 0 24 7 0 107 51 29 170 77 39 -174 79 37 175 79 35 175 79 35 175 79 35 175 79 35 158 73 41 126 96 80 206 202 198 -246 245 245 255 255 255 252 252 252 200 200 199 97 96 96 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 20 23 23 52 51 50 69 73 72 213 211 211 255 255 255 207 206 206 -237 237 237 255 255 255 177 176 172 13 13 13 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 13 13 13 20 23 23 168 168 168 255 255 255 253 253 253 157 157 157 -0 0 0 7 8 10 7 10 12 8 9 11 9 10 12 9 10 12 9 10 12 8 9 11 -8 9 11 10 11 13 6 7 9 3 3 6 5 6 8 5 6 8 6 7 9 5 6 8 -6 7 9 6 7 9 6 7 9 6 7 9 6 7 9 5 6 8 5 6 8 6 7 9 -6 7 9 7 8 10 6 7 9 9 10 12 13 15 17 10 12 14 12 13 15 13 15 17 -12 13 15 10 12 14 12 13 15 14 18 20 13 17 18 13 17 18 12 15 17 13 15 17 -12 13 15 20 23 23 17 18 16 13 15 17 27 25 23 26 28 29 20 20 21 22 12 9 -23 5 0 23 5 0 24 7 0 24 7 0 24 7 0 24 7 0 24 7 0 107 51 29 -170 77 39 173 79 35 174 79 37 166 76 38 126 96 80 157 157 157 237 237 237 255 255 255 -254 254 254 237 237 237 162 160 159 26 28 29 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 190 190 190 255 255 255 220 219 215 -226 226 226 255 255 255 182 182 182 13 13 13 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 60 59 58 233 232 232 255 255 255 225 222 218 39 42 42 -6 7 9 7 8 10 8 9 11 8 9 11 10 11 13 9 10 12 10 11 13 10 11 13 -10 11 13 10 12 14 8 9 11 5 6 8 5 6 8 5 6 8 6 7 9 6 7 9 -6 7 9 7 8 10 6 7 9 5 6 8 5 6 8 5 6 8 5 6 8 8 8 9 -6 7 9 6 7 9 6 7 9 8 9 11 9 10 12 8 9 11 10 12 14 12 13 15 -13 15 17 12 15 17 12 13 15 12 15 17 14 18 20 14 18 20 16 19 20 14 18 20 -17 7 8 23 5 0 23 5 0 23 5 0 23 5 0 23 5 0 24 7 0 23 5 0 -24 7 0 24 7 0 24 7 0 24 7 0 24 7 0 24 7 0 23 5 0 42 16 9 -129 59 33 159 71 30 123 75 52 177 170 162 225 222 218 252 252 252 255 255 255 251 250 250 -190 190 190 105 107 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 190 190 190 255 255 255 225 222 218 -226 226 226 255 255 255 182 182 182 13 13 13 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 20 23 23 179 179 176 252 252 252 249 249 249 139 137 135 9 10 12 -6 7 9 7 8 10 6 7 9 8 9 11 10 11 13 10 11 13 10 11 13 10 11 13 -10 12 14 10 12 14 10 11 13 7 8 10 5 6 8 5 6 8 5 6 8 5 6 8 -5 6 8 5 6 8 5 6 8 5 6 8 5 6 8 3 3 6 5 6 8 5 6 8 -6 7 9 6 7 9 8 8 9 9 10 12 10 11 13 10 11 13 10 11 13 12 13 15 -13 17 18 12 15 17 13 15 17 13 15 17 13 17 18 14 18 20 20 20 21 17 7 8 -23 5 0 23 5 0 24 7 0 24 7 0 24 7 0 24 7 0 24 7 0 24 7 0 -24 7 0 24 7 0 24 7 0 24 7 0 24 7 0 23 5 0 23 5 0 22 12 9 -89 68 66 147 147 146 230 230 229 251 250 250 255 255 255 249 249 249 216 216 216 122 123 123 -39 42 42 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 196 196 196 255 255 255 213 211 211 -226 226 226 255 255 255 182 182 182 13 13 13 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 115 110 108 237 237 237 254 254 254 213 211 211 63 62 61 7 8 10 -8 8 9 8 9 11 7 8 10 10 11 13 10 11 13 9 10 12 10 11 13 10 11 13 -10 12 14 10 12 14 10 11 13 10 11 13 8 9 11 8 9 11 7 8 10 6 7 9 -8 8 9 8 9 11 5 6 8 3 3 6 3 3 6 5 6 8 5 6 8 6 7 9 -8 8 9 8 9 11 7 8 10 9 10 12 9 10 12 10 12 14 10 12 14 12 13 15 -13 15 17 14 18 20 14 18 20 13 15 17 13 15 17 17 18 16 17 7 8 23 5 0 -24 7 0 24 7 0 24 7 0 24 7 0 24 7 0 24 7 0 24 7 0 24 7 0 -24 7 0 24 7 0 24 7 0 24 7 0 23 5 0 0 0 0 60 59 58 147 147 146 -216 216 216 254 253 253 255 255 255 249 249 249 216 216 216 147 147 146 33 33 31 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 13 13 13 216 216 216 255 255 255 200 200 199 -245 244 244 255 255 255 162 160 159 13 13 13 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 20 23 23 207 206 206 255 255 255 247 247 246 134 131 128 2 2 2 6 7 9 -8 9 11 9 10 12 8 9 11 10 11 13 10 11 13 9 10 12 10 11 13 10 12 14 -10 11 13 10 11 13 10 11 13 10 12 14 10 11 13 9 10 12 10 11 13 9 10 12 -9 10 12 10 11 13 8 9 11 5 6 8 5 6 8 6 7 9 5 6 8 6 7 9 -7 8 10 8 9 11 7 10 12 9 10 12 10 11 13 9 10 12 10 12 14 13 17 18 -13 15 17 13 17 18 12 15 17 12 13 15 13 13 13 22 12 9 23 5 0 24 7 0 -24 7 0 24 7 0 24 7 0 24 7 0 24 7 0 24 7 0 24 7 0 24 7 0 -23 5 0 23 5 0 24 7 0 22 12 9 52 51 50 157 157 157 226 226 226 249 249 249 -255 255 255 254 254 254 216 216 216 134 134 133 64 64 61 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 85 88 88 237 237 237 254 254 254 196 196 196 -248 248 248 253 253 253 139 137 135 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 67 67 66 247 247 246 255 255 255 168 168 168 0 0 0 8 8 9 5 6 8 -7 8 10 9 10 12 9 10 12 10 11 13 10 11 13 10 11 13 9 10 12 10 11 13 -10 11 13 12 13 15 10 12 14 10 11 13 10 12 14 10 11 13 10 12 14 9 10 12 -8 9 11 10 11 13 8 9 11 7 8 10 6 7 9 6 7 9 6 7 9 7 8 10 -9 10 12 9 10 12 9 10 12 10 11 13 10 11 13 12 13 15 13 15 17 13 15 17 -13 15 17 13 17 18 16 19 20 39 42 42 39 42 42 17 7 8 23 5 0 24 7 0 -24 7 0 24 7 0 24 7 0 24 7 0 24 7 0 24 7 0 23 5 0 23 5 0 -23 5 0 22 12 9 85 88 88 167 162 159 230 230 229 253 253 253 255 255 255 251 250 250 -226 226 226 157 157 157 52 51 50 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 139 137 135 247 247 246 246 245 245 200 200 199 -251 250 250 243 242 242 105 107 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 97 96 96 251 250 250 254 254 254 147 147 146 0 0 0 5 6 8 5 6 8 -6 7 9 7 8 10 9 10 12 9 10 12 10 11 13 10 11 13 9 10 12 10 11 13 -12 13 15 12 13 15 10 12 14 10 11 13 10 11 13 10 12 14 10 11 13 7 10 12 -9 10 12 10 11 13 8 9 11 6 7 9 7 8 10 7 8 10 7 8 10 6 7 9 -8 9 11 9 10 12 12 13 15 12 13 15 12 13 15 12 13 15 13 15 17 12 13 15 -9 10 12 28 30 31 57 54 50 67 65 62 65 64 60 37 34 30 23 5 0 23 5 0 -24 7 0 24 7 0 24 7 0 24 7 0 24 7 0 24 7 0 24 7 0 23 5 0 -23 5 0 69 73 72 216 216 216 255 255 255 255 255 255 252 252 252 225 222 218 168 168 168 -64 64 61 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 33 33 31 190 190 190 255 255 255 233 232 232 213 211 211 -254 254 254 225 222 218 69 73 72 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 39 42 42 230 230 229 255 255 255 247 247 246 168 168 168 20 20 21 5 6 8 -5 6 8 6 7 9 8 9 11 8 9 11 10 11 13 12 13 15 13 15 17 10 12 14 -10 12 14 9 10 12 7 8 10 8 9 11 7 10 12 9 10 12 10 12 14 9 10 12 -8 9 11 8 9 11 7 8 10 6 7 9 6 7 9 6 7 9 6 7 9 8 9 11 -9 10 12 10 11 13 13 17 18 10 11 13 12 13 15 13 15 17 12 13 15 20 20 21 -52 51 50 64 64 61 67 67 66 68 67 63 68 67 63 60 59 58 20 20 21 23 5 0 -23 5 0 24 7 0 24 7 0 24 7 0 24 7 0 24 7 0 24 7 0 23 5 0 -22 12 9 157 157 157 253 253 253 253 253 253 213 211 211 122 123 123 63 62 61 20 23 23 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 69 73 72 233 232 232 255 255 255 213 211 211 230 230 229 -254 254 254 190 190 190 13 13 13 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 162 160 159 255 255 255 251 250 250 157 157 157 57 54 50 39 42 42 -17 18 16 5 6 8 6 7 9 7 8 10 8 9 11 10 12 14 13 15 17 9 10 12 -8 8 9 6 7 9 6 7 9 7 8 10 8 9 11 8 9 11 8 9 11 8 9 11 -7 8 10 7 8 10 6 7 9 6 7 9 6 7 9 6 7 9 7 8 10 8 9 11 -10 11 13 10 12 14 12 13 15 12 13 15 10 12 14 27 25 23 51 47 44 64 62 59 -67 67 66 67 67 66 67 67 66 67 67 66 67 67 66 68 67 63 51 47 44 17 7 8 -23 5 0 23 5 0 24 7 0 24 7 0 24 7 0 24 7 0 24 7 0 23 5 0 -17 18 16 192 189 185 255 255 255 248 248 248 139 137 135 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 134 131 128 254 254 254 253 253 253 177 176 172 251 250 250 -249 249 249 134 134 133 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 33 33 31 216 216 216 255 255 255 233 232 232 69 68 64 68 67 63 68 67 63 -62 61 58 28 30 31 8 8 9 5 6 8 6 7 9 8 9 11 7 8 10 7 8 10 -6 7 9 6 7 9 6 7 9 6 7 9 6 7 9 7 8 10 6 7 9 7 9 9 -8 9 11 7 8 10 8 9 11 7 8 10 8 8 9 9 10 12 9 10 12 13 15 17 -13 17 18 13 17 18 13 15 17 16 19 20 47 49 48 62 61 58 67 66 62 68 67 63 -67 67 66 68 67 63 68 67 63 67 67 66 67 67 66 68 67 63 68 65 63 39 42 42 -17 7 8 23 5 0 23 5 0 24 7 0 24 7 0 24 7 0 24 7 0 23 5 0 -81 44 20 115 110 108 233 232 232 255 255 255 237 237 237 122 123 123 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 213 211 211 255 255 255 226 226 226 206 202 198 255 255 255 -233 232 232 26 28 29 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 115 110 108 251 250 250 255 255 255 168 168 168 60 59 58 68 67 63 69 68 64 -62 61 58 39 42 42 60 59 58 39 42 42 27 25 23 12 13 15 3 3 6 3 3 6 -5 6 8 5 6 8 6 7 9 6 7 9 7 8 10 6 7 9 6 7 9 7 8 10 -8 9 11 8 9 11 9 10 12 8 9 11 9 10 12 8 9 11 9 10 12 12 13 15 -20 20 21 33 33 31 47 49 48 64 63 61 68 67 63 68 67 63 68 67 63 68 67 63 -68 67 63 68 65 63 67 67 66 67 67 66 68 65 63 68 67 63 67 67 66 67 65 62 -51 47 44 27 25 23 22 12 9 23 5 0 23 5 0 23 5 0 23 5 0 8 5 4 -81 44 20 138 69 38 154 142 136 243 242 242 255 255 255 240 239 239 134 134 133 39 42 42 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 97 96 96 246 245 245 254 254 254 182 182 182 246 245 245 255 255 255 -177 176 172 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 196 196 196 255 255 255 240 239 239 85 88 88 67 66 62 68 67 63 65 64 60 -51 47 44 62 61 58 66 65 61 68 67 63 65 64 60 57 54 50 39 42 42 17 18 16 -0 0 0 0 0 0 2 2 2 3 3 6 5 6 8 6 7 9 5 6 8 6 7 9 -7 8 10 5 6 8 5 6 8 10 11 13 20 23 23 37 34 30 51 47 44 52 51 50 -60 59 58 67 66 62 69 68 64 69 68 64 69 68 64 69 68 64 69 68 64 69 68 64 -69 68 64 69 68 64 67 67 66 67 67 66 67 67 66 69 68 64 68 67 63 67 66 62 -67 66 62 62 61 58 52 51 50 37 34 30 22 12 9 8 5 4 23 5 0 2 2 2 -17 7 8 129 59 33 147 67 29 154 142 136 240 239 239 255 255 255 246 245 245 196 196 196 -97 96 96 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 177 176 172 252 252 252 240 239 239 200 200 199 254 254 254 243 242 242 -85 88 88 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 13 13 13 -97 96 96 237 237 237 255 255 255 196 196 196 69 73 72 67 66 62 64 63 61 39 42 42 -60 59 58 64 63 59 69 68 64 68 67 63 68 67 63 68 67 63 67 66 62 66 65 61 -57 54 50 39 42 42 27 25 23 13 13 13 10 10 10 13 13 13 20 20 21 26 28 29 -39 42 42 57 54 50 60 59 58 66 65 61 67 65 62 68 65 63 68 65 63 69 68 64 -69 68 64 68 67 63 69 68 64 69 68 64 69 68 64 69 68 64 69 68 64 69 68 64 -69 68 64 68 67 63 68 65 63 67 67 66 68 65 63 68 67 63 68 67 63 67 66 62 -68 67 63 67 66 62 66 65 61 65 64 60 64 63 59 60 59 58 51 47 44 33 33 31 -20 20 21 81 44 20 129 59 33 148 72 46 146 134 128 233 232 232 253 253 253 253 253 253 -243 242 242 177 176 172 77 78 76 20 23 23 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 67 67 66 220 219 215 255 255 255 216 216 216 230 230 229 255 255 255 200 200 199 -47 49 48 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 67 67 66 157 157 157 -213 211 211 252 252 252 248 248 248 147 147 146 64 63 59 57 54 50 39 42 42 57 54 50 -65 64 60 68 65 63 68 67 63 69 68 64 69 68 64 69 68 64 68 67 63 67 67 66 -67 67 66 69 68 64 67 67 66 60 59 58 57 54 50 60 59 58 64 64 61 68 67 63 -69 68 64 69 68 64 65 64 60 68 67 63 67 67 66 68 67 63 68 67 63 69 68 64 -68 67 63 68 67 63 68 67 63 69 68 64 68 67 63 68 67 63 68 67 63 68 67 63 -68 67 63 68 67 63 62 61 58 66 65 61 67 66 62 67 66 62 67 66 62 67 65 62 -67 66 62 67 66 62 68 65 63 67 66 62 66 65 61 67 66 62 66 65 61 66 65 61 -64 63 59 49 32 29 138 69 38 138 69 38 147 67 29 126 96 80 190 190 190 243 242 242 -255 255 255 255 255 255 230 230 229 177 176 172 115 110 108 13 13 13 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 122 123 123 248 248 248 251 250 250 200 200 199 245 244 244 249 249 249 157 157 157 -13 13 13 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 78 76 213 211 211 251 250 250 -255 255 255 254 254 254 230 230 229 84 81 78 39 42 42 52 51 50 62 61 58 68 65 63 -67 67 66 68 67 63 67 67 66 68 67 63 69 68 64 69 68 64 68 67 63 67 67 66 -69 68 64 69 68 64 69 68 64 69 68 64 68 67 63 69 68 64 67 66 62 66 65 61 -68 67 63 69 68 64 66 65 61 68 65 63 68 67 63 68 67 63 68 67 63 68 67 63 -68 65 63 67 67 66 68 67 63 68 67 63 68 65 63 68 65 63 67 66 62 68 67 63 -68 67 63 67 66 62 60 59 58 60 59 58 66 65 61 67 66 62 67 66 62 67 66 62 -66 65 61 67 66 62 68 65 63 68 65 63 66 65 61 67 66 62 67 66 62 66 65 61 -65 64 60 81 44 20 166 76 38 166 76 38 138 69 38 158 73 41 148 72 46 134 119 113 -200 200 199 251 250 250 255 255 255 253 253 253 243 242 242 213 211 211 134 131 128 33 33 31 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 157 157 157 255 255 255 246 245 245 190 190 190 254 254 254 237 237 237 97 96 96 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 13 13 13 168 168 168 255 255 255 251 250 250 -226 226 226 177 176 172 84 81 78 52 51 50 62 61 58 64 63 59 67 66 62 68 67 63 -68 65 63 68 67 63 68 67 63 68 67 63 68 67 63 69 68 64 67 67 66 68 67 63 -69 68 64 69 68 64 69 68 64 69 68 64 69 68 64 69 68 64 67 66 62 66 65 61 -68 67 63 69 68 64 66 65 61 64 64 61 68 65 63 68 67 63 67 66 62 68 65 63 -67 67 66 67 67 66 68 65 63 68 67 63 68 67 63 68 67 63 67 66 62 67 66 62 -68 67 63 67 66 62 60 59 58 52 51 50 64 63 59 66 65 61 67 66 62 67 66 62 -67 66 62 67 66 62 67 66 62 67 66 62 66 65 61 67 66 62 67 66 62 66 65 61 -57 54 50 107 51 29 174 79 37 174 79 37 170 77 39 138 69 38 158 73 41 170 77 39 -138 69 38 134 131 128 213 211 211 243 242 242 253 253 253 255 255 255 251 250 250 213 211 211 -122 123 123 52 51 50 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -13 13 13 213 211 211 255 255 255 225 222 218 213 211 211 255 255 255 207 206 206 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 20 23 23 207 206 206 255 255 255 213 211 211 -60 59 58 51 47 44 62 61 58 62 61 58 62 61 58 65 64 60 67 66 62 67 66 62 -67 66 62 68 67 63 68 65 63 67 66 62 68 67 63 68 67 63 68 67 63 68 67 63 -67 66 62 68 67 63 68 67 63 68 67 63 68 67 63 69 68 64 67 66 62 64 64 61 -68 65 63 68 67 63 66 65 61 64 63 59 68 67 63 67 66 62 66 65 61 67 66 62 -67 66 62 67 66 62 67 66 62 67 66 62 67 66 62 67 66 62 66 65 61 67 66 62 -67 66 62 66 65 61 64 63 59 47 49 48 57 54 50 65 64 60 66 65 61 67 66 62 -67 66 62 67 66 62 67 65 62 67 66 62 67 66 62 67 66 62 66 65 61 65 64 60 -51 47 44 129 59 33 175 79 35 173 77 35 174 79 37 172 77 34 147 67 29 158 73 41 -174 79 37 159 71 30 138 69 38 134 119 113 177 176 172 230 230 229 255 255 255 255 255 255 -246 245 245 200 200 199 134 131 128 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -105 107 107 249 249 249 255 255 255 179 179 176 243 242 242 254 254 254 162 160 159 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 20 23 23 220 219 215 255 255 255 182 182 182 -13 13 13 62 61 58 62 61 58 62 61 58 65 64 60 67 66 62 66 65 61 67 66 62 -67 66 62 67 66 62 67 66 62 67 66 62 67 66 62 67 66 62 68 67 63 68 67 63 -66 65 61 66 65 61 67 66 62 68 67 63 67 67 66 69 68 64 67 66 62 64 63 61 -67 67 66 67 67 66 68 65 63 63 62 61 68 67 63 67 66 62 66 65 61 66 65 61 -67 66 62 68 67 63 67 66 62 66 65 61 67 66 62 67 66 62 67 66 62 67 66 62 -67 66 62 66 65 61 66 65 61 57 54 50 39 42 42 60 59 58 65 64 60 67 66 62 -67 66 62 66 65 61 67 65 62 67 66 62 67 66 62 67 66 62 67 66 62 66 65 61 -51 47 44 129 59 33 173 77 35 173 79 35 173 77 35 174 79 37 168 75 33 166 76 38 -138 69 38 166 76 38 173 77 35 172 77 34 158 73 41 126 96 80 157 157 157 237 237 237 -252 252 252 254 254 254 246 245 245 177 176 172 64 64 61 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -147 147 146 254 254 254 252 252 252 168 168 168 255 255 255 249 249 249 85 88 88 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 20 23 23 207 206 206 255 255 255 207 206 206 -2 2 2 62 61 58 62 61 58 62 61 58 66 65 61 67 66 62 67 66 62 67 66 62 -67 66 62 66 65 61 67 66 62 67 66 62 68 67 63 67 66 62 67 66 62 68 65 63 -68 67 63 66 65 61 66 65 61 67 66 62 67 66 62 68 67 63 68 67 63 64 63 61 -67 67 66 67 67 66 67 66 62 64 62 59 68 67 63 67 66 62 66 65 61 67 66 62 -67 66 62 67 66 62 67 66 62 68 65 63 67 66 62 67 66 62 67 66 62 67 66 62 -67 66 62 66 65 61 66 65 61 64 63 59 39 42 42 39 42 42 47 49 48 60 59 58 -66 65 61 67 66 62 67 66 62 67 66 62 67 66 62 67 66 62 67 66 62 65 64 60 -52 51 50 107 51 29 158 73 41 158 73 41 173 79 35 173 77 35 174 79 37 172 77 34 -168 75 33 158 73 41 170 77 39 173 77 35 173 77 35 174 79 37 147 67 29 126 96 80 -182 182 182 237 237 237 255 255 255 255 255 255 216 216 216 134 134 133 13 13 13 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -168 168 168 254 254 254 233 232 232 190 190 190 255 255 255 230 230 229 33 33 31 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 13 13 13 190 190 190 255 255 255 220 219 215 -0 0 0 60 59 58 60 59 58 64 63 59 66 65 61 66 65 61 67 66 62 67 66 62 -67 66 62 67 66 62 67 66 62 67 66 62 67 66 62 67 66 62 67 66 62 67 66 62 -66 65 61 67 66 62 66 65 61 65 64 60 66 65 61 66 65 61 68 67 63 63 62 61 -68 65 63 68 67 63 67 66 62 62 61 58 67 66 62 66 65 61 67 66 62 67 66 62 -67 66 62 67 66 62 67 66 62 67 66 62 67 66 62 66 65 61 66 65 61 67 66 62 -66 65 61 66 65 61 67 66 62 67 66 62 60 59 58 37 34 30 33 33 31 39 42 42 -60 59 58 62 61 58 62 61 58 65 64 60 67 66 62 67 66 62 67 66 62 66 65 61 -60 59 58 81 44 20 138 69 38 158 73 41 147 67 29 173 77 35 173 77 35 173 77 35 -172 77 34 168 75 33 173 77 35 173 77 35 166 76 38 174 79 37 174 79 37 170 77 39 -158 73 41 134 119 113 213 211 211 253 253 253 255 255 255 243 242 242 177 176 172 39 42 42 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -196 196 196 255 255 255 216 216 216 213 211 211 255 255 255 213 211 211 26 28 29 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 13 13 13 179 179 176 255 255 255 226 226 226 -0 0 0 57 54 50 62 61 58 64 63 59 65 64 60 65 64 60 66 65 61 66 65 61 -66 65 61 67 66 62 67 66 62 67 66 62 67 66 62 66 65 61 67 66 62 67 66 62 -67 66 62 66 65 61 67 66 62 66 65 61 65 64 60 66 65 61 66 65 61 60 59 58 -67 65 62 67 66 62 67 66 62 62 61 58 66 65 61 67 66 62 67 66 62 67 66 62 -67 66 62 67 66 62 67 66 62 67 66 62 67 66 62 65 64 60 65 64 60 66 65 61 -65 64 60 66 65 61 66 65 61 66 65 61 65 64 60 64 63 59 47 49 48 39 42 42 -37 34 30 39 42 42 51 47 44 52 51 50 65 64 60 67 66 62 65 64 60 65 64 60 -65 64 60 81 44 20 147 67 29 138 69 38 148 72 46 158 73 41 172 77 34 173 77 35 -174 79 37 172 77 34 168 75 33 173 77 35 158 73 41 138 69 38 166 76 38 173 77 35 -173 77 35 170 77 39 137 73 51 162 160 159 237 237 237 255 255 255 253 253 253 192 189 185 -60 59 58 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 17 18 16 0 0 0 0 0 0 39 42 42 -216 216 216 255 255 255 200 200 199 225 222 218 255 255 255 246 245 245 139 137 135 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 162 160 159 255 255 255 237 237 237 -37 34 30 57 54 50 62 61 58 62 61 58 64 63 59 65 64 60 65 64 60 65 64 60 -66 65 61 66 65 61 66 65 61 66 65 61 66 65 61 66 65 61 66 65 61 66 65 61 -67 66 62 67 66 62 67 66 62 67 66 62 66 65 61 65 64 60 66 65 61 60 59 58 -66 65 61 66 65 61 66 65 61 62 61 58 66 65 61 66 65 61 67 66 62 67 66 62 -66 65 61 67 66 62 67 66 62 66 65 61 66 65 61 65 64 60 65 64 60 65 64 60 -65 64 60 65 64 60 64 63 59 64 63 59 65 64 60 65 64 60 65 64 60 60 59 58 -52 51 50 52 51 50 52 51 50 60 59 58 65 64 60 67 66 62 66 65 61 65 64 60 -66 65 61 63 45 38 159 71 30 166 76 38 158 73 41 147 67 29 158 73 41 166 76 38 -174 79 37 173 77 35 173 77 35 172 77 34 172 77 34 166 76 38 147 67 29 158 73 41 -173 79 35 174 79 37 174 79 37 159 71 30 134 119 113 213 211 211 255 255 255 253 253 253 -200 200 199 67 67 66 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 33 33 31 0 0 0 0 0 0 134 131 128 -245 244 244 254 254 254 196 196 196 177 176 172 240 239 239 255 255 255 225 222 218 39 42 42 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 147 147 146 255 255 255 245 244 244 -67 67 66 52 51 50 62 61 58 62 61 58 64 63 59 65 64 60 65 64 60 65 64 60 -65 64 60 65 64 60 65 64 60 65 64 60 65 64 60 65 64 60 65 64 60 65 64 60 -66 65 61 66 65 61 66 65 61 67 66 62 66 65 61 66 65 61 65 64 60 60 59 58 -62 61 58 65 64 60 65 64 60 60 59 58 65 64 60 66 65 61 66 65 61 66 65 61 -65 64 60 66 65 61 66 65 61 66 65 61 64 63 59 65 64 60 64 63 59 65 64 60 -64 63 59 65 64 60 65 64 60 64 63 59 65 64 60 64 63 59 65 64 60 65 64 60 -64 63 59 64 62 59 62 61 58 65 64 60 66 65 61 66 65 61 66 65 61 65 64 60 -65 64 60 63 45 38 147 67 29 170 77 39 168 75 33 158 73 41 158 73 41 158 73 41 -166 76 38 173 77 35 173 77 35 173 77 35 172 77 34 168 75 33 173 77 35 148 72 46 -158 73 41 174 79 37 173 79 35 173 77 35 170 77 39 126 96 80 200 200 199 252 252 252 -254 254 254 200 200 199 52 51 50 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 17 18 16 0 0 0 0 0 0 157 157 157 -251 250 250 240 239 239 105 107 107 0 0 0 162 160 159 251 250 250 240 239 239 105 107 107 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 122 123 123 249 249 249 249 249 249 -122 123 123 39 42 42 62 61 58 62 61 58 64 63 59 64 63 59 65 64 60 65 64 60 -64 63 59 64 63 59 65 64 60 65 64 60 64 63 59 65 64 60 65 64 60 65 64 60 -65 64 60 65 64 60 65 64 60 66 65 61 65 64 60 64 63 59 64 63 59 62 61 58 -52 51 50 60 59 58 60 59 58 57 54 50 62 61 58 66 65 61 65 64 60 66 65 61 -66 65 61 66 65 61 66 65 61 65 64 60 64 63 59 65 64 60 65 64 60 64 63 59 -65 64 60 65 64 60 64 63 59 65 64 60 65 64 60 65 64 60 65 64 60 65 64 60 -65 64 60 65 64 60 65 64 60 64 63 59 65 64 60 65 64 60 66 65 61 65 64 60 -65 64 60 52 51 50 107 51 29 147 67 29 172 77 34 173 77 35 170 77 39 166 76 38 -158 73 41 166 76 38 173 77 35 174 79 37 175 79 35 172 77 34 168 75 33 172 77 34 -158 73 41 158 73 41 173 77 35 173 77 35 173 77 35 172 77 34 137 73 51 200 200 199 -253 253 253 254 254 254 196 196 196 54 58 58 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 157 157 157 -251 250 250 237 237 237 97 96 96 2 2 2 122 123 123 245 244 244 246 245 245 134 134 133 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 97 96 96 237 237 237 252 252 252 -167 162 159 17 18 16 64 62 59 62 61 58 64 63 59 65 64 60 64 63 59 64 63 59 -64 63 59 64 63 59 64 63 59 64 63 59 65 64 60 65 64 60 65 64 60 65 64 60 -65 64 60 65 64 60 65 64 60 64 63 59 65 64 60 64 63 59 62 61 58 51 47 44 -52 51 50 62 61 58 64 63 59 62 61 58 60 59 58 65 64 60 65 64 60 66 65 61 -66 65 61 66 65 61 65 64 60 64 63 59 64 63 59 65 64 60 65 64 60 64 63 59 -65 64 60 64 63 59 64 63 59 65 64 60 66 65 61 65 64 60 65 64 60 66 65 61 -64 63 59 64 63 59 64 63 59 64 63 59 64 63 59 65 64 60 65 64 60 64 63 59 -64 63 59 57 54 50 107 51 29 138 69 38 147 67 29 173 77 35 173 77 35 173 77 35 -173 77 35 173 77 35 173 77 35 174 79 37 174 79 37 173 77 35 173 77 35 172 77 34 -168 75 33 147 67 29 158 73 41 173 77 35 173 77 35 173 77 35 173 77 35 145 89 57 -196 196 196 253 253 253 251 250 250 182 182 182 39 42 42 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 147 147 146 -248 248 248 240 239 239 105 107 107 0 0 0 122 123 123 245 244 244 246 245 245 139 137 135 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 67 67 66 220 219 215 254 254 254 -200 200 199 33 33 31 60 59 58 64 62 59 65 64 60 65 64 60 64 63 59 65 64 60 -64 63 59 64 63 59 65 64 60 65 64 60 65 64 60 65 64 60 65 64 60 65 64 60 -65 64 60 65 64 60 65 64 60 64 63 59 65 64 60 65 64 60 64 63 59 52 51 50 -20 20 21 33 33 31 57 54 50 60 59 58 60 59 58 65 64 60 65 64 60 66 65 61 -65 64 60 65 64 60 64 63 59 64 63 59 64 63 59 65 64 60 65 64 60 64 63 59 -65 64 60 65 64 60 65 64 60 65 64 60 66 65 61 65 64 60 64 63 59 65 64 60 -65 64 60 65 64 60 64 63 59 65 64 60 65 64 60 65 64 60 64 63 59 64 63 59 -62 61 58 54 58 58 107 51 29 166 76 38 147 67 29 147 67 29 173 77 35 170 77 39 -174 79 37 173 77 35 173 77 35 173 77 35 173 77 35 174 79 37 173 77 35 173 77 35 -173 77 35 166 76 38 138 69 38 158 73 41 166 76 38 173 77 35 173 77 35 174 79 37 -145 89 57 213 211 211 254 254 254 251 250 250 162 160 159 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 139 137 135 -247 247 246 246 245 245 147 147 146 119 117 113 177 176 172 251 250 250 245 244 244 134 131 128 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 13 13 13 190 190 190 253 253 253 -226 226 226 77 78 76 52 51 50 62 61 58 64 63 59 65 64 60 65 64 60 65 64 60 -64 63 59 62 61 58 64 63 59 65 64 60 65 64 60 65 64 60 65 64 60 65 64 60 -64 63 59 65 64 60 65 64 60 65 64 60 65 64 60 65 64 60 65 64 60 65 64 60 -51 47 44 10 11 13 5 6 8 26 28 29 51 47 44 62 61 58 65 64 60 65 64 60 -65 64 60 65 64 60 64 63 59 64 63 59 65 64 60 65 64 60 65 64 60 65 64 60 -65 64 60 66 65 61 66 65 61 66 65 61 66 65 61 66 65 61 66 65 61 65 64 60 -65 64 60 65 64 60 64 63 59 65 64 60 65 64 60 65 64 60 65 64 60 65 64 60 -64 63 59 60 59 58 81 52 41 168 75 33 168 75 33 147 67 29 138 69 38 158 73 41 -147 67 29 174 79 37 173 77 35 174 79 37 174 79 37 173 77 35 174 79 37 173 77 35 -174 79 37 173 77 35 166 76 38 138 69 38 158 73 41 158 73 41 174 79 37 175 79 35 -172 77 34 126 96 80 216 216 216 255 255 255 243 242 242 139 137 135 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 105 107 107 -237 237 237 255 255 255 200 200 199 105 107 107 207 206 206 255 255 255 226 226 226 67 67 66 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 147 147 146 251 250 250 -245 244 244 119 117 113 39 42 42 64 63 59 64 63 59 65 64 60 65 64 60 65 64 60 -64 63 59 62 61 58 64 63 59 65 64 60 65 64 60 65 64 60 65 64 60 64 63 59 -64 63 59 64 63 59 66 65 61 66 65 61 66 65 61 66 65 61 65 64 60 66 65 61 -60 59 58 28 30 31 20 20 21 3 3 6 8 5 4 57 54 50 64 63 59 64 63 59 -65 64 60 66 65 61 65 64 60 65 64 60 65 64 60 65 64 60 66 65 61 66 65 61 -66 65 61 67 66 62 66 65 61 67 66 62 66 65 61 66 65 61 65 64 60 66 65 61 -66 65 61 66 65 61 66 65 61 65 64 60 66 65 61 66 65 61 66 65 61 66 65 61 -64 63 59 62 61 58 63 45 38 158 73 41 168 75 33 172 77 34 158 73 41 138 69 38 -158 73 41 158 73 41 174 79 37 174 79 37 174 79 37 174 79 37 174 79 37 174 79 37 -174 79 37 174 79 37 173 77 35 158 73 41 158 73 41 166 76 38 166 76 38 170 77 39 -158 73 41 170 77 39 134 119 113 233 232 232 255 255 255 230 230 229 97 96 96 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -196 196 196 255 255 255 247 247 246 243 242 242 253 253 253 255 255 255 179 179 176 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 85 88 88 243 242 242 -255 255 255 168 168 168 28 30 31 62 61 58 64 63 59 65 64 60 65 64 60 65 64 60 -65 64 60 65 64 60 65 64 60 65 64 60 65 64 60 65 64 60 65 64 60 65 64 60 -64 63 59 65 64 60 66 65 61 67 66 62 67 66 62 67 66 62 66 65 61 66 65 61 -65 64 60 47 49 48 39 42 42 27 25 23 13 13 13 51 47 44 65 64 60 65 64 60 -65 64 60 66 65 61 66 65 61 65 64 60 64 63 59 65 64 60 67 66 62 67 66 62 -67 66 62 67 66 62 67 66 62 67 66 62 67 66 62 66 65 61 66 65 61 67 66 62 -67 66 62 66 65 61 67 66 62 67 66 62 66 65 61 66 65 61 67 66 62 66 65 61 -66 65 61 64 63 59 39 42 42 147 67 29 168 75 33 172 77 34 174 79 37 159 71 30 -138 69 38 158 73 41 158 73 41 170 77 39 175 79 35 174 79 37 174 79 37 174 79 37 -174 79 37 174 79 37 173 77 35 173 79 35 138 69 38 158 73 41 158 73 41 166 76 38 -107 51 29 129 59 33 159 71 30 154 142 136 246 245 245 255 255 255 207 206 206 39 42 42 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -97 96 96 226 226 226 254 254 254 254 254 254 251 250 250 200 200 199 64 64 61 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 200 200 199 -255 255 255 216 216 216 28 30 31 57 54 50 64 63 59 65 64 60 65 64 60 65 64 60 -65 64 60 65 64 60 65 64 60 65 64 60 65 64 60 64 63 59 64 63 59 64 63 59 -65 64 60 65 64 60 66 65 61 67 66 62 67 66 62 67 66 62 67 66 62 67 66 62 -66 65 61 60 59 58 39 42 42 39 42 42 33 33 31 33 33 31 65 64 60 66 65 61 -65 64 60 66 65 61 66 65 61 65 64 60 65 64 60 65 64 60 67 66 62 67 66 62 -67 66 62 67 66 62 67 66 62 67 66 62 67 66 62 67 66 62 67 66 62 67 66 62 -67 66 62 67 66 62 67 66 62 67 66 62 67 66 62 67 66 62 67 66 62 67 66 62 -66 65 61 65 64 60 39 42 42 129 59 33 159 71 30 172 77 34 173 77 35 173 77 35 -166 76 38 147 67 29 158 73 41 147 67 29 172 77 34 173 79 35 174 79 37 174 79 37 -173 77 35 173 77 35 173 77 35 173 77 35 170 77 39 138 69 38 166 76 38 147 67 29 -166 76 38 81 44 20 81 44 20 107 51 29 168 168 168 254 254 254 252 252 252 168 168 168 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 67 67 66 147 147 146 157 157 157 119 117 113 33 33 31 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 157 157 157 -255 255 255 245 244 244 60 59 58 51 47 44 64 63 59 64 63 59 65 64 60 65 64 60 -65 64 60 65 64 60 65 64 60 65 64 60 65 64 60 65 64 60 64 63 59 64 63 59 -64 63 59 64 63 59 66 65 61 66 65 61 66 65 61 67 66 62 67 66 62 67 66 62 -65 64 60 57 54 50 52 51 50 39 42 42 39 42 42 27 25 23 60 59 58 65 64 60 -65 64 60 66 65 61 65 64 60 65 64 60 65 64 60 65 64 60 66 65 61 67 66 62 -67 66 62 67 66 62 67 66 62 67 66 62 67 66 62 67 66 62 67 66 62 67 66 62 -67 66 62 67 66 62 67 66 62 67 66 62 67 66 62 67 66 62 67 66 62 67 66 62 -66 65 61 65 64 60 47 49 48 107 51 29 147 67 29 166 76 38 173 77 35 173 77 35 -173 77 35 158 73 41 147 67 29 166 76 38 158 73 41 174 79 37 173 77 35 173 77 35 -173 77 35 174 79 37 174 79 37 173 77 35 173 77 35 158 73 41 166 76 38 147 67 29 -166 76 38 138 69 38 27 25 23 68 65 63 67 65 62 213 211 211 255 255 255 240 239 239 -119 117 113 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 97 96 96 -251 250 250 254 254 254 134 134 133 27 25 23 64 62 59 64 63 59 64 63 59 65 64 60 -65 64 60 65 64 60 65 64 60 65 64 60 65 64 60 65 64 60 65 64 60 65 64 60 -65 64 60 64 63 59 66 65 61 66 65 61 67 66 62 67 66 62 67 66 62 67 66 62 -66 65 61 60 59 58 57 54 50 47 49 48 51 47 44 33 33 31 51 47 44 65 64 60 -65 64 60 66 65 61 65 64 60 65 64 60 65 64 60 66 65 61 66 65 61 67 66 62 -67 66 62 67 66 62 67 66 62 67 66 62 67 66 62 67 66 62 67 66 62 67 66 62 -67 66 62 67 66 62 67 66 62 67 66 62 67 66 62 67 66 62 67 66 62 67 66 62 -67 66 62 66 65 61 52 51 50 42 16 9 129 59 33 138 69 38 166 76 38 173 77 35 -173 77 35 174 79 37 158 73 41 147 67 29 166 76 38 158 73 41 174 79 37 173 77 35 -173 77 35 174 79 37 174 79 37 174 79 37 174 79 37 166 76 38 158 73 41 170 77 39 -147 67 29 170 77 39 81 52 41 168 168 168 147 147 146 119 117 113 240 239 239 255 255 255 -207 206 206 52 51 50 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 64 64 61 -230 230 229 255 255 255 182 182 182 0 0 0 60 59 58 64 63 59 65 64 60 65 64 60 -65 64 60 65 64 60 65 64 60 65 64 60 65 64 60 65 64 60 65 64 60 65 64 60 -65 64 60 65 64 60 65 64 60 66 65 61 67 66 62 67 66 62 67 66 62 67 66 62 -67 66 62 63 62 61 60 59 58 52 51 50 52 51 50 52 51 50 39 42 42 64 63 59 -65 64 60 66 65 61 66 65 61 66 65 61 66 65 61 66 65 61 67 66 62 67 66 62 -67 66 62 67 66 62 67 66 62 67 66 62 67 66 62 67 66 62 67 66 62 67 66 62 -67 66 62 67 66 62 67 66 62 67 66 62 67 66 62 67 66 62 67 66 62 67 66 62 -67 66 62 66 65 61 47 49 48 13 15 17 51 47 32 138 69 38 148 72 46 166 76 38 -173 77 35 173 77 35 173 77 35 158 73 41 159 71 30 166 76 38 158 73 41 173 77 35 -173 77 35 173 77 35 174 79 37 174 79 37 174 79 37 173 77 35 158 73 41 173 77 35 -158 73 41 166 76 38 147 67 29 139 137 135 243 242 242 177 176 172 182 182 182 254 254 254 -252 252 252 119 117 113 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 39 42 42 -200 200 199 255 255 255 225 222 218 33 33 31 51 47 44 64 63 59 64 63 59 65 64 60 -65 64 60 65 64 60 65 64 60 65 64 60 65 64 60 65 64 60 65 64 60 65 64 60 -65 64 60 65 64 60 66 65 61 66 65 61 66 65 61 67 66 62 67 66 62 67 66 62 -67 66 62 67 65 62 57 54 50 57 54 50 57 54 50 60 59 58 51 47 44 60 59 58 -65 64 60 66 65 61 66 65 61 66 65 61 66 65 61 67 66 62 67 66 62 67 66 62 -66 65 61 67 66 62 67 66 62 67 66 62 67 66 62 67 66 62 67 66 62 67 66 62 -67 66 62 67 66 62 67 66 62 67 66 62 67 66 62 67 66 62 67 66 62 67 66 62 -67 66 62 66 65 61 47 49 48 60 59 58 162 160 159 63 45 38 158 73 41 158 73 41 -173 77 35 172 77 34 172 77 34 173 77 35 147 67 29 166 76 38 158 73 41 166 76 38 -173 77 35 172 77 34 172 77 34 173 77 35 173 77 35 173 77 35 147 67 29 170 77 39 -158 73 41 158 73 41 159 71 30 89 68 66 240 239 239 249 249 249 196 196 196 248 248 248 -255 255 255 134 134 133 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 39 42 42 52 51 50 11 10 9 0 0 0 0 0 0 13 13 13 -162 160 159 251 250 250 240 239 239 115 110 108 27 25 23 66 65 61 67 66 62 67 66 62 -67 66 62 67 66 62 67 66 62 67 66 62 67 66 62 67 66 62 67 66 62 67 66 62 -67 66 62 67 66 62 68 67 63 68 67 63 68 67 63 69 68 64 69 68 64 69 68 64 -69 68 64 69 68 64 67 67 66 57 54 50 60 59 58 64 63 61 52 51 50 60 59 58 -68 67 63 68 67 63 68 67 63 69 68 64 69 68 64 69 68 64 69 68 64 69 68 64 -69 68 64 69 68 64 69 68 64 69 68 64 69 68 64 69 68 64 69 68 64 69 68 64 -69 68 64 69 68 64 69 68 64 69 68 64 69 68 64 69 68 64 69 68 64 69 68 64 -69 68 64 69 68 64 51 47 44 85 88 88 240 239 239 134 131 128 81 44 20 158 73 41 -166 76 38 174 79 37 174 79 37 174 79 37 166 76 38 138 69 38 174 79 37 158 73 41 -174 79 37 174 79 37 174 79 37 174 79 37 174 79 37 174 79 37 166 76 38 158 73 41 -174 79 37 147 67 29 170 77 39 81 44 20 207 206 206 254 254 254 254 254 254 254 254 254 -240 239 239 85 88 88 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - From 4c996f831ac8a604f8d8a35f3a45e0e20bea4bf3 Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Thu, 27 Mar 2025 20:25:26 +0100 Subject: [PATCH 263/301] move eduroam config to correct module --- modules/de/default.nix | 1 - modules/net/default.nix | 1 + modules/{de => net}/eduroam.nix | 0 3 files changed, 1 insertion(+), 1 deletion(-) rename modules/{de => net}/eduroam.nix (100%) diff --git a/modules/de/default.nix b/modules/de/default.nix index 3370088..ba82753 100644 --- a/modules/de/default.nix +++ b/modules/de/default.nix @@ -1,7 +1,6 @@ {...}: { imports = [ ./audio.nix - ./eduroam.nix ./home ./dm.nix ./tlp.nix diff --git a/modules/net/default.nix b/modules/net/default.nix index 3bbc4af..de797b4 100644 --- a/modules/net/default.nix +++ b/modules/net/default.nix @@ -2,6 +2,7 @@ imports = [ ./firewall.nix ./hosts.nix + ./eduroam.nix ./dispatchers ]; networking.networkmanager.wifi.backend = "wpa_supplicant"; diff --git a/modules/de/eduroam.nix b/modules/net/eduroam.nix similarity index 100% rename from modules/de/eduroam.nix rename to modules/net/eduroam.nix From df0ffea214e577739b46b306f8282dd3be126940 Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Thu, 27 Mar 2025 20:27:09 +0100 Subject: [PATCH 264/301] remove chronically ignored todo.md --- todo.md | 7 ------- 1 file changed, 7 deletions(-) delete mode 100644 todo.md diff --git a/todo.md b/todo.md deleted file mode 100644 index 6b12575..0000000 --- a/todo.md +++ /dev/null @@ -1,7 +0,0 @@ -# TODOs - -- add rofi thingy for editing rust stuff (with nix shell integration) or config -- project manager rofi script for opening tools in shell without open terminal - - sps rofi integration - - From 500c18b76a64d6476e7970fe7768d34c5533503d Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Thu, 27 Mar 2025 20:28:36 +0100 Subject: [PATCH 265/301] move desktop shit again --- modules/de/default.nix | 15 ---- modules/default.nix | 2 +- modules/desktop-legacy/default.nix | 57 ++++++++++++++++ .../{desktop => desktop-legacy}/gaming.nix | 0 .../kdeconnect.nix | 0 .../{desktop => desktop-legacy}/social.nix | 0 .../{desktop => desktop-legacy}/syncthing.nix | 0 modules/{de => desktop}/audio.nix | 0 modules/desktop/default.nix | 64 +++--------------- modules/{de => desktop}/dm.nix | 0 modules/{de => desktop}/home/browser.nix | 0 modules/{de => desktop}/home/default.nix | 0 .../eww/configDir/bottomBar/bottomBar.yuck | 0 .../eww/configDir/bottomBar/traveldings.yuck | 0 .../eww/configDir/bottomBar/workspaces.yuck | 0 .../home/eww/configDir/eww.css | 0 .../home/eww/configDir/eww.yuck | 0 .../home/eww/configDir/scripts/bat.nu | 0 .../home/eww/configDir/scripts/iceTacho.nu | 0 .../home/eww/configDir/topBar/sysinfo.yuck | 0 .../home/eww/configDir/topBar/time.yuck | 0 .../home/eww/configDir/topBar/topBar.yuck | 0 .../home/eww/configDir/util.yuck | 0 modules/{de => desktop}/home/eww/default.nix | 0 modules/{de => desktop}/home/layaway.nix | 0 modules/{de => desktop}/home/niri/binds.nix | 0 modules/{de => desktop}/home/niri/default.nix | 0 modules/{de => desktop}/home/niri/input.nix | 0 modules/{de => desktop}/home/niri/privacy.nix | 0 modules/{de => desktop}/home/niri/quirks.nix | 0 .../{de => desktop}/home/niri/screenshot.nix | 0 modules/{de => desktop}/home/niri/style.nix | 0 .../{de => desktop}/home/niri/wallpaper.jpg | Bin .../home/niri/xwayland-sat.nix | 0 .../{de => desktop}/home/notifications.nix | 0 modules/{de => desktop}/home/swayidle.nix | 0 modules/{de => desktop}/home/terminal.nix | 0 modules/{de => desktop}/locale.nix | 0 modules/{de => desktop}/printing.nix | 0 modules/{de => desktop}/themeing.nix | 0 modules/{de => desktop}/tlp.nix | 0 41 files changed, 69 insertions(+), 69 deletions(-) delete mode 100644 modules/de/default.nix create mode 100644 modules/desktop-legacy/default.nix rename modules/{desktop => desktop-legacy}/gaming.nix (100%) rename modules/{desktop => desktop-legacy}/kdeconnect.nix (100%) rename modules/{desktop => desktop-legacy}/social.nix (100%) rename modules/{desktop => desktop-legacy}/syncthing.nix (100%) rename modules/{de => desktop}/audio.nix (100%) rename modules/{de => desktop}/dm.nix (100%) rename modules/{de => desktop}/home/browser.nix (100%) rename modules/{de => desktop}/home/default.nix (100%) rename modules/{de => desktop}/home/eww/configDir/bottomBar/bottomBar.yuck (100%) rename modules/{de => desktop}/home/eww/configDir/bottomBar/traveldings.yuck (100%) rename modules/{de => desktop}/home/eww/configDir/bottomBar/workspaces.yuck (100%) rename modules/{de => desktop}/home/eww/configDir/eww.css (100%) rename modules/{de => desktop}/home/eww/configDir/eww.yuck (100%) rename modules/{de => desktop}/home/eww/configDir/scripts/bat.nu (100%) rename modules/{de => desktop}/home/eww/configDir/scripts/iceTacho.nu (100%) rename modules/{de => desktop}/home/eww/configDir/topBar/sysinfo.yuck (100%) rename modules/{de => desktop}/home/eww/configDir/topBar/time.yuck (100%) rename modules/{de => desktop}/home/eww/configDir/topBar/topBar.yuck (100%) rename modules/{de => desktop}/home/eww/configDir/util.yuck (100%) rename modules/{de => desktop}/home/eww/default.nix (100%) rename modules/{de => desktop}/home/layaway.nix (100%) rename modules/{de => desktop}/home/niri/binds.nix (100%) rename modules/{de => desktop}/home/niri/default.nix (100%) rename modules/{de => desktop}/home/niri/input.nix (100%) rename modules/{de => desktop}/home/niri/privacy.nix (100%) rename modules/{de => desktop}/home/niri/quirks.nix (100%) rename modules/{de => desktop}/home/niri/screenshot.nix (100%) rename modules/{de => desktop}/home/niri/style.nix (100%) rename modules/{de => desktop}/home/niri/wallpaper.jpg (100%) rename modules/{de => desktop}/home/niri/xwayland-sat.nix (100%) rename modules/{de => desktop}/home/notifications.nix (100%) rename modules/{de => desktop}/home/swayidle.nix (100%) rename modules/{de => desktop}/home/terminal.nix (100%) rename modules/{de => desktop}/locale.nix (100%) rename modules/{de => desktop}/printing.nix (100%) rename modules/{de => desktop}/themeing.nix (100%) rename modules/{de => desktop}/tlp.nix (100%) diff --git a/modules/de/default.nix b/modules/de/default.nix deleted file mode 100644 index ba82753..0000000 --- a/modules/de/default.nix +++ /dev/null @@ -1,15 +0,0 @@ -{...}: { - imports = [ - ./audio.nix - ./home - ./dm.nix - ./tlp.nix - ./locale.nix - ./printing.nix - ./themeing.nix - ]; - services.flatpak.enable = true; - security.polkit.enable = true; - services.illum.enable = true; - services.upower.enable = true; -} diff --git a/modules/default.nix b/modules/default.nix index 44c9a43..2f6e4d9 100644 --- a/modules/default.nix +++ b/modules/default.nix @@ -2,8 +2,8 @@ imports = [ ./shell ./desktop + ./desktop-legacy ./hardware - ./de ./net ./input ./media diff --git a/modules/desktop-legacy/default.nix b/modules/desktop-legacy/default.nix new file mode 100644 index 0000000..ad4114d --- /dev/null +++ b/modules/desktop-legacy/default.nix @@ -0,0 +1,57 @@ +{ + config, + lib, + pkgs, + ... +}: +with lib; { + imports = [ + ./gaming.nix + ./syncthing.nix + ./kdeconnect.nix + ./social.nix + ]; + + programs.seahorse.enable = true; + security.pam.services.jade.enableGnomeKeyring = true; + + virtualisation.libvirtd.enable = true; + + programs.xss-lock = { + enable = true; + lockerCommand = "${pkgs.i3lock}/bin/i3lock -c 1d2021"; + }; + + services.illum.enable = true; + services.avahi = { + enable = true; + nssmdns4 = true; + openFirewall = true; + }; + services.smartd = { + enable = true; + notifications.test = true; + }; + + home-manager.users.jade = {pkgs, ...}: { + programs.ssh = { + controlMaster = "yes"; + }; + home.packages = with pkgs; [ + just + bacon + + magic-wormhole-rs + + # filemanager + xfce.thunar + xfce.tumbler + xfce.thunar-archive-plugin + file-roller + + # from environment.systemPackages cleanup + virt-manager + ddccontrol-db + ]; + }; +} diff --git a/modules/desktop/gaming.nix b/modules/desktop-legacy/gaming.nix similarity index 100% rename from modules/desktop/gaming.nix rename to modules/desktop-legacy/gaming.nix diff --git a/modules/desktop/kdeconnect.nix b/modules/desktop-legacy/kdeconnect.nix similarity index 100% rename from modules/desktop/kdeconnect.nix rename to modules/desktop-legacy/kdeconnect.nix diff --git a/modules/desktop/social.nix b/modules/desktop-legacy/social.nix similarity index 100% rename from modules/desktop/social.nix rename to modules/desktop-legacy/social.nix diff --git a/modules/desktop/syncthing.nix b/modules/desktop-legacy/syncthing.nix similarity index 100% rename from modules/desktop/syncthing.nix rename to modules/desktop-legacy/syncthing.nix diff --git a/modules/de/audio.nix b/modules/desktop/audio.nix similarity index 100% rename from modules/de/audio.nix rename to modules/desktop/audio.nix diff --git a/modules/desktop/default.nix b/modules/desktop/default.nix index ad4114d..ba82753 100644 --- a/modules/desktop/default.nix +++ b/modules/desktop/default.nix @@ -1,57 +1,15 @@ -{ - config, - lib, - pkgs, - ... -}: -with lib; { +{...}: { imports = [ - ./gaming.nix - ./syncthing.nix - ./kdeconnect.nix - ./social.nix + ./audio.nix + ./home + ./dm.nix + ./tlp.nix + ./locale.nix + ./printing.nix + ./themeing.nix ]; - - programs.seahorse.enable = true; - security.pam.services.jade.enableGnomeKeyring = true; - - virtualisation.libvirtd.enable = true; - - programs.xss-lock = { - enable = true; - lockerCommand = "${pkgs.i3lock}/bin/i3lock -c 1d2021"; - }; - + services.flatpak.enable = true; + security.polkit.enable = true; services.illum.enable = true; - services.avahi = { - enable = true; - nssmdns4 = true; - openFirewall = true; - }; - services.smartd = { - enable = true; - notifications.test = true; - }; - - home-manager.users.jade = {pkgs, ...}: { - programs.ssh = { - controlMaster = "yes"; - }; - home.packages = with pkgs; [ - just - bacon - - magic-wormhole-rs - - # filemanager - xfce.thunar - xfce.tumbler - xfce.thunar-archive-plugin - file-roller - - # from environment.systemPackages cleanup - virt-manager - ddccontrol-db - ]; - }; + services.upower.enable = true; } diff --git a/modules/de/dm.nix b/modules/desktop/dm.nix similarity index 100% rename from modules/de/dm.nix rename to modules/desktop/dm.nix diff --git a/modules/de/home/browser.nix b/modules/desktop/home/browser.nix similarity index 100% rename from modules/de/home/browser.nix rename to modules/desktop/home/browser.nix diff --git a/modules/de/home/default.nix b/modules/desktop/home/default.nix similarity index 100% rename from modules/de/home/default.nix rename to modules/desktop/home/default.nix diff --git a/modules/de/home/eww/configDir/bottomBar/bottomBar.yuck b/modules/desktop/home/eww/configDir/bottomBar/bottomBar.yuck similarity index 100% rename from modules/de/home/eww/configDir/bottomBar/bottomBar.yuck rename to modules/desktop/home/eww/configDir/bottomBar/bottomBar.yuck diff --git a/modules/de/home/eww/configDir/bottomBar/traveldings.yuck b/modules/desktop/home/eww/configDir/bottomBar/traveldings.yuck similarity index 100% rename from modules/de/home/eww/configDir/bottomBar/traveldings.yuck rename to modules/desktop/home/eww/configDir/bottomBar/traveldings.yuck diff --git a/modules/de/home/eww/configDir/bottomBar/workspaces.yuck b/modules/desktop/home/eww/configDir/bottomBar/workspaces.yuck similarity index 100% rename from modules/de/home/eww/configDir/bottomBar/workspaces.yuck rename to modules/desktop/home/eww/configDir/bottomBar/workspaces.yuck diff --git a/modules/de/home/eww/configDir/eww.css b/modules/desktop/home/eww/configDir/eww.css similarity index 100% rename from modules/de/home/eww/configDir/eww.css rename to modules/desktop/home/eww/configDir/eww.css diff --git a/modules/de/home/eww/configDir/eww.yuck b/modules/desktop/home/eww/configDir/eww.yuck similarity index 100% rename from modules/de/home/eww/configDir/eww.yuck rename to modules/desktop/home/eww/configDir/eww.yuck diff --git a/modules/de/home/eww/configDir/scripts/bat.nu b/modules/desktop/home/eww/configDir/scripts/bat.nu similarity index 100% rename from modules/de/home/eww/configDir/scripts/bat.nu rename to modules/desktop/home/eww/configDir/scripts/bat.nu diff --git a/modules/de/home/eww/configDir/scripts/iceTacho.nu b/modules/desktop/home/eww/configDir/scripts/iceTacho.nu similarity index 100% rename from modules/de/home/eww/configDir/scripts/iceTacho.nu rename to modules/desktop/home/eww/configDir/scripts/iceTacho.nu diff --git a/modules/de/home/eww/configDir/topBar/sysinfo.yuck b/modules/desktop/home/eww/configDir/topBar/sysinfo.yuck similarity index 100% rename from modules/de/home/eww/configDir/topBar/sysinfo.yuck rename to modules/desktop/home/eww/configDir/topBar/sysinfo.yuck diff --git a/modules/de/home/eww/configDir/topBar/time.yuck b/modules/desktop/home/eww/configDir/topBar/time.yuck similarity index 100% rename from modules/de/home/eww/configDir/topBar/time.yuck rename to modules/desktop/home/eww/configDir/topBar/time.yuck diff --git a/modules/de/home/eww/configDir/topBar/topBar.yuck b/modules/desktop/home/eww/configDir/topBar/topBar.yuck similarity index 100% rename from modules/de/home/eww/configDir/topBar/topBar.yuck rename to modules/desktop/home/eww/configDir/topBar/topBar.yuck diff --git a/modules/de/home/eww/configDir/util.yuck b/modules/desktop/home/eww/configDir/util.yuck similarity index 100% rename from modules/de/home/eww/configDir/util.yuck rename to modules/desktop/home/eww/configDir/util.yuck diff --git a/modules/de/home/eww/default.nix b/modules/desktop/home/eww/default.nix similarity index 100% rename from modules/de/home/eww/default.nix rename to modules/desktop/home/eww/default.nix diff --git a/modules/de/home/layaway.nix b/modules/desktop/home/layaway.nix similarity index 100% rename from modules/de/home/layaway.nix rename to modules/desktop/home/layaway.nix diff --git a/modules/de/home/niri/binds.nix b/modules/desktop/home/niri/binds.nix similarity index 100% rename from modules/de/home/niri/binds.nix rename to modules/desktop/home/niri/binds.nix diff --git a/modules/de/home/niri/default.nix b/modules/desktop/home/niri/default.nix similarity index 100% rename from modules/de/home/niri/default.nix rename to modules/desktop/home/niri/default.nix diff --git a/modules/de/home/niri/input.nix b/modules/desktop/home/niri/input.nix similarity index 100% rename from modules/de/home/niri/input.nix rename to modules/desktop/home/niri/input.nix diff --git a/modules/de/home/niri/privacy.nix b/modules/desktop/home/niri/privacy.nix similarity index 100% rename from modules/de/home/niri/privacy.nix rename to modules/desktop/home/niri/privacy.nix diff --git a/modules/de/home/niri/quirks.nix b/modules/desktop/home/niri/quirks.nix similarity index 100% rename from modules/de/home/niri/quirks.nix rename to modules/desktop/home/niri/quirks.nix diff --git a/modules/de/home/niri/screenshot.nix b/modules/desktop/home/niri/screenshot.nix similarity index 100% rename from modules/de/home/niri/screenshot.nix rename to modules/desktop/home/niri/screenshot.nix diff --git a/modules/de/home/niri/style.nix b/modules/desktop/home/niri/style.nix similarity index 100% rename from modules/de/home/niri/style.nix rename to modules/desktop/home/niri/style.nix diff --git a/modules/de/home/niri/wallpaper.jpg b/modules/desktop/home/niri/wallpaper.jpg similarity index 100% rename from modules/de/home/niri/wallpaper.jpg rename to modules/desktop/home/niri/wallpaper.jpg diff --git a/modules/de/home/niri/xwayland-sat.nix b/modules/desktop/home/niri/xwayland-sat.nix similarity index 100% rename from modules/de/home/niri/xwayland-sat.nix rename to modules/desktop/home/niri/xwayland-sat.nix diff --git a/modules/de/home/notifications.nix b/modules/desktop/home/notifications.nix similarity index 100% rename from modules/de/home/notifications.nix rename to modules/desktop/home/notifications.nix diff --git a/modules/de/home/swayidle.nix b/modules/desktop/home/swayidle.nix similarity index 100% rename from modules/de/home/swayidle.nix rename to modules/desktop/home/swayidle.nix diff --git a/modules/de/home/terminal.nix b/modules/desktop/home/terminal.nix similarity index 100% rename from modules/de/home/terminal.nix rename to modules/desktop/home/terminal.nix diff --git a/modules/de/locale.nix b/modules/desktop/locale.nix similarity index 100% rename from modules/de/locale.nix rename to modules/desktop/locale.nix diff --git a/modules/de/printing.nix b/modules/desktop/printing.nix similarity index 100% rename from modules/de/printing.nix rename to modules/desktop/printing.nix diff --git a/modules/de/themeing.nix b/modules/desktop/themeing.nix similarity index 100% rename from modules/de/themeing.nix rename to modules/desktop/themeing.nix diff --git a/modules/de/tlp.nix b/modules/desktop/tlp.nix similarity index 100% rename from modules/de/tlp.nix rename to modules/desktop/tlp.nix From 056661f6f894bae7ef575146b5447dde736afd1f Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Thu, 27 Mar 2025 20:29:14 +0100 Subject: [PATCH 266/301] remove old template.nix --- modules/template.nix | 16 ---------------- 1 file changed, 16 deletions(-) delete mode 100644 modules/template.nix diff --git a/modules/template.nix b/modules/template.nix deleted file mode 100644 index 745d5f6..0000000 --- a/modules/template.nix +++ /dev/null @@ -1,16 +0,0 @@ -{ - config, - lib, - pkgs, - ... -}: let - cfg = config.jade.NAME; -in - with lib; { - options.jade.NAME = { - enable = mkEnableOption "Enable the module"; - }; - config = - mkIf cfg.enable { - }; - } From 2390273f53a79f369b72550afa647cfda5181fdd Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Thu, 27 Mar 2025 20:48:56 +0100 Subject: [PATCH 267/301] too much rewriting at once... (bad idea) --- common.nix | 57 +------------------ hosts/denkbrett/configuration.nix | 8 +-- .../monosodium-glutamate-g/configuration.nix | 1 - modules/default.nix | 1 + modules/desktop-legacy/default.nix | 5 -- modules/desktop/audio.nix | 4 +- modules/desktop/locale.nix | 1 + modules/graphics.nix | 3 - modules/net/default.nix | 2 + modules/nix.nix | 29 ++++++++++ modules/shell/default.nix | 5 +- modules/shell/sudo.nix | 6 ++ 12 files changed, 48 insertions(+), 74 deletions(-) delete mode 100644 modules/graphics.nix create mode 100644 modules/nix.nix create mode 100644 modules/shell/sudo.nix diff --git a/common.nix b/common.nix index fab7f75..9e74f7c 100644 --- a/common.nix +++ b/common.nix @@ -12,29 +12,10 @@ with lib; with builtins; { imports = [lix-module.nixosModules.default]; - nix = { - extraOptions = '' - experimental-features = nix-command flakes - keep-outputs = true - keep-derivations = true - ''; - }; - - nixpkgs = { - config = { - allowUnfree = true; - permittedInsecurePackages = [ - "electron-27.3.11" - "nodejs-16.20.0" - ]; - }; - overlays = [rs-programs niri.overlays.niri]; - }; environment = { systemPackages = with pkgs; [ overskride - pulsemixer htmlq @@ -88,18 +69,14 @@ with builtins; { ]; }; - networking = { - networkmanager = { - enable = true; - }; - }; + hardware.graphics.enable = true; services = { systemd-lock-handler.enable = true; openssh = { enable = true; - # settings.PasswordAuthentication = false; - # settings.KbdInteractiveAuthentication = false; + settings.PasswordAuthentication = false; + settings.KbdInteractiveAuthentication = false; }; }; @@ -116,31 +93,11 @@ with builtins; { hardware.gpgSmartcards.enable = true; - time.timeZone = "Europe/Berlin"; - - home-manager.users.jade = { - nixosConfig, - pkgs, - ... - }: { - home.sessionVariables.TZ = nixosConfig.time.timeZone; - }; - - nixpkgs.config.packageOverrides = pkgs: { - sudo = pkgs.sudo.override {withInsults = true;}; - }; - security.sudo.extraConfig = "Defaults insults"; - boot.kernel.sysctl."vm.max_map_count" = 2147483642; hardware = { uinput.enable = true; bluetooth.enable = true; - # keyboard.uhk.enable = true; - }; - - services.avahi = { - enable = true; }; security.rtkit.enable = true; @@ -154,12 +111,4 @@ with builtins; { enable = true; algorithm = "zstd"; }; - - users.defaultUserShell = pkgs.nushell; - - nix.gc = { - automatic = true; - dates = "weekly"; - options = "--delete-older-than 60d"; - }; } diff --git a/hosts/denkbrett/configuration.nix b/hosts/denkbrett/configuration.nix index c41ba1a..6ecfb45 100644 --- a/hosts/denkbrett/configuration.nix +++ b/hosts/denkbrett/configuration.nix @@ -1,12 +1,7 @@ # 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, - lib, - ... -}: { +{pkgs, ...}: { nixpkgs.config.permittedInsecurePackages = [ "electron-25.9.0" "electron-27.3.11" @@ -46,7 +41,6 @@ boot.binfmt.emulatedSystems = ["aarch64-linux"]; - hardware.bluetooth.enable = true; services.blueman.enable = true; environment.systemPackages = [ diff --git a/hosts/monosodium-glutamate-g/configuration.nix b/hosts/monosodium-glutamate-g/configuration.nix index c0bac2f..de708f8 100644 --- a/hosts/monosodium-glutamate-g/configuration.nix +++ b/hosts/monosodium-glutamate-g/configuration.nix @@ -47,7 +47,6 @@ gnome.gnome-keyring.enable = true; }; hardware = { - bluetooth.enable = true; keyboard.uhk.enable = true; enableRedistributableFirmware = true; }; diff --git a/modules/default.nix b/modules/default.nix index 2f6e4d9..125b127 100644 --- a/modules/default.nix +++ b/modules/default.nix @@ -7,6 +7,7 @@ ./net ./input ./media + ./nix.nix ./graphics.nix ]; } diff --git a/modules/desktop-legacy/default.nix b/modules/desktop-legacy/default.nix index ad4114d..7a2f692 100644 --- a/modules/desktop-legacy/default.nix +++ b/modules/desktop-legacy/default.nix @@ -23,11 +23,6 @@ with lib; { }; services.illum.enable = true; - services.avahi = { - enable = true; - nssmdns4 = true; - openFirewall = true; - }; services.smartd = { enable = true; notifications.test = true; diff --git a/modules/desktop/audio.nix b/modules/desktop/audio.nix index c26f679..c38403d 100644 --- a/modules/desktop/audio.nix +++ b/modules/desktop/audio.nix @@ -11,10 +11,8 @@ }; }; environment.systemPackages = with pkgs; [ - pavucontrol - volumeicon playerctl - + pulsemixer helvum ]; } diff --git a/modules/desktop/locale.nix b/modules/desktop/locale.nix index 7319975..9071f8d 100644 --- a/modules/desktop/locale.nix +++ b/modules/desktop/locale.nix @@ -1,4 +1,5 @@ {...}: { + time.timeZone = "Europe/Berlin"; i18n.extraLocaleSettings = { LC_ADDRESS = "de_DE.UTF-8"; LC_IDENTIFICATION = "de_DE.UTF-8"; diff --git a/modules/graphics.nix b/modules/graphics.nix deleted file mode 100644 index 910a0e2..0000000 --- a/modules/graphics.nix +++ /dev/null @@ -1,3 +0,0 @@ -{...}: { - hardware.graphics.enable = true; -} diff --git a/modules/net/default.nix b/modules/net/default.nix index de797b4..fba3d47 100644 --- a/modules/net/default.nix +++ b/modules/net/default.nix @@ -5,7 +5,9 @@ ./eduroam.nix ./dispatchers ]; + networking.networkmanager.enable = true; networking.networkmanager.wifi.backend = "wpa_supplicant"; + systemd.services."NetworkManager-wait-online".enable = false; services.mullvad-vpn.enable = true; home-manager.users.jade = {pkgs, ...}: { diff --git a/modules/nix.nix b/modules/nix.nix new file mode 100644 index 0000000..42160d2 --- /dev/null +++ b/modules/nix.nix @@ -0,0 +1,29 @@ +{ + rs-programs, + niri, + ... +}: { + nix = { + extraOptions = '' + experimental-features = nix-command flakes + keep-outputs = true + keep-derivations = true + ''; + gc = { + automatic = true; + dates = "weekly"; + options = "--delete-older-than 60d"; + }; + }; + + nixpkgs = { + config = { + allowUnfree = true; + permittedInsecurePackages = [ + "electron-27.3.11" + "nodejs-16.20.0" + ]; + }; + overlays = [rs-programs niri.overlays.niri]; + }; +} diff --git a/modules/shell/default.nix b/modules/shell/default.nix index 9ce0499..180d1ab 100644 --- a/modules/shell/default.nix +++ b/modules/shell/default.nix @@ -1,4 +1,4 @@ -{...}: { +{pkgs, ...}: { imports = [ ./helix.nix ./nu.nix @@ -7,6 +7,7 @@ ./git.nix ./mprocs.nix ./btop.nix + ./sudo.nix ]; programs.mosh.enable = true; programs.bat.enable = true; @@ -14,4 +15,6 @@ programs.carapace.enable = true; programs.direnv.enable = true; }; + + users.defaultUserShell = pkgs.nushell; } diff --git a/modules/shell/sudo.nix b/modules/shell/sudo.nix new file mode 100644 index 0000000..bcc38cd --- /dev/null +++ b/modules/shell/sudo.nix @@ -0,0 +1,6 @@ +{...}: { + nixpkgs.config.packageOverrides = pkgs: { + sudo = pkgs.sudo.override {withInsults = true;}; + }; + security.sudo.extraConfig = "Defaults insults"; +} From 772c6311d0d5abc03a158bfd2e2400cd3044c9ea Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Thu, 27 Mar 2025 20:52:26 +0100 Subject: [PATCH 268/301] remove this fucking macbook finally (it's all in vcs anyway) --- flake.lock | 28 ++---- flake.nix | 43 +-------- hosts/potatobook-g/configuration.nix | 87 ------------------- hosts/potatobook-g/hardware-configuration.nix | 62 ------------- hosts/potatobook-g/iso.nix | 11 --- mac-brcm-fw/default.nix | 3 - 6 files changed, 8 insertions(+), 226 deletions(-) delete mode 100644 hosts/potatobook-g/configuration.nix delete mode 100644 hosts/potatobook-g/hardware-configuration.nix delete mode 100644 hosts/potatobook-g/iso.nix delete mode 100644 mac-brcm-fw/default.nix diff --git a/flake.lock b/flake.lock index 81b1fc3..155bf7c 100644 --- a/flake.lock +++ b/flake.lock @@ -424,19 +424,6 @@ "url": "https://git.lix.systems/lix-project/nixos-module" } }, - "mac-brcm-fw": { - "flake": false, - "locked": { - "lastModified": 1727366922, - "narHash": "sha256-+kW8ogc6DykjMVlrr+3vWKs9ZUdJ9EW72LbY7k/Qvh4=", - "path": "/home/jade/nix-configs/mac-brcm-fw", - "type": "path" - }, - "original": { - "path": "/home/jade/nix-configs/mac-brcm-fw", - "type": "path" - } - }, "niri": { "inputs": { "niri-stable": "niri-stable", @@ -495,18 +482,16 @@ }, "nixos-hardware": { "locked": { - "lastModified": 1687903496, - "narHash": "sha256-4PPwbFM4dNqso3zBya5rgfRvnBoIbN2J7qZ2ZpRyOUc=", - "owner": "networkException", + "lastModified": 1742806253, + "narHash": "sha256-zvQ4GsCJT6MTOzPKLmlFyM+lxo0JGQ0cSFaZSACmWfY=", + "owner": "NixOS", "repo": "nixos-hardware", - "rev": "8e28b9ee431b265d1fc74b8b819ea0816344c4a1", + "rev": "ecaa2d911e77c265c2a5bac8b583c40b0f151726", "type": "github" }, "original": { - "owner": "networkException", - "ref": "apple-t2-init", - "repo": "nixos-hardware", - "type": "github" + "id": "nixos-hardware", + "type": "indirect" } }, "nixpkgs": { @@ -659,7 +644,6 @@ "fenix": "fenix", "home-manager": "home-manager", "lix-module": "lix-module", - "mac-brcm-fw": "mac-brcm-fw", "niri": "niri", "nixos-hardware": "nixos-hardware", "nixpkgs": "nixpkgs_2", diff --git a/flake.nix b/flake.nix index d9bca2e..4ff56c9 100644 --- a/flake.nix +++ b/flake.nix @@ -7,9 +7,8 @@ nixpkgs-unstable-small.url = "nixpkgs/nixos-unstable-small"; niri.url = "github:sodiboo/niri-flake"; stylix.url = "github:danth/stylix"; - typst-within = { - url = "github:schrottkatze/typst"; - }; + typst-within.url = "github:schrottkatze/typst"; + crane.url = "github:ipetkov/crane"; lix-module = { url = "git+https://git.lix.systems/lix-project/nixos-module"; inputs.nixpkgs.follows = "nixpkgs"; @@ -18,14 +17,6 @@ url = "github:nix-community/home-manager"; inputs.nixpkgs.follows = "nixpkgs"; }; - nixos-hardware.url = "github:networkException/nixos-hardware/apple-t2-init"; - mac-brcm-fw = { - url = "path:/home/jade/nix-configs/mac-brcm-fw"; - flake = false; - }; - crane = { - url = "github:ipetkov/crane"; - }; fenix = { url = "github:nix-community/fenix"; inputs.nixpkgs.follows = "nixpkgs"; @@ -41,7 +32,6 @@ typst-within, home-manager, nixos-hardware, - mac-brcm-fw, niri, stylix, fenix, @@ -127,35 +117,6 @@ } ]; }; - potatobook-g = nixpkgs.lib.nixosSystem { - specialArgs = { - inherit inputs pkgs-unstable-small rs-programs lix-module niri; - }; - system = "x86_64-linux"; - modules = [ - inputs.niri.nixosModules.niri - stylix.nixosModules.stylix - "${mac-brcm-fw}" - ./hosts/potatobook-g/configuration.nix - home-manager.nixosModules.home-manager - { - home-manager.useGlobalPkgs = true; - home-manager.useUserPackages = true; - home-manager.extraSpecialArgs = { - inherit pkgs-unstable-small pkgs-stable typst-within; - }; - home-manager.users.jade = { - nixosConfig, - pkgs, - ... - }: { - home.sessionVariables.TZ = nixosConfig.time.timeZone; - home.stateVersion = "${nixosConfig.system.stateVersion}"; - }; - } - nixos-hardware.nixosModules.apple-t2 - ]; - }; }; }; } diff --git a/hosts/potatobook-g/configuration.nix b/hosts/potatobook-g/configuration.nix deleted file mode 100644 index db0f132..0000000 --- a/hosts/potatobook-g/configuration.nix +++ /dev/null @@ -1,87 +0,0 @@ -{pkgs, ...}: { - nix.settings = { - trusted-substituters = [ - "https://t2linux.cachix.org" - ]; - trusted-public-keys = [ - "t2linux.cachix.org-1:P733c5Gt1qTcxsm+Bae0renWnT8OLs0u9+yfaK2Bejw=" - ]; - }; - imports = [ - ./hardware-configuration.nix - ../../common.nix - ../../modules - ]; - - boot.binfmt.emulatedSystems = ["aarch64-linux"]; - - jade = { - flatpak.enable = true; - desktop = { - compositing.enable = true; - syncthing.enable = true; - kdeconnect.enable = true; - cloud.enable = true; - social.enable = true; - mail.enable = true; - gaming.enable = true; - evremap.enable = true; - }; - terminal.enable = true; - }; - - fileSystems = { - "/".options = ["compress=zstd:3"]; - "/home".options = ["compress=zstd:3"]; - "/nix".options = ["compress=zstd:3" "noatime"]; - }; - - boot.loader.systemd-boot.enable = true; - boot.loader.efi.canTouchEfiVariables = true; - - services.libinput.touchpad = { - disableWhileTyping = true; - }; - - networking.hostName = "potatobook-g"; - - hardware.enableRedistributableFirmware = true; - - environment.pathsToLink = [ - "/share/nix-direnv" - ]; - - services.blueman.enable = true; - - programs.adb.enable = true; - - services.gnome.gnome-keyring.enable = true; - programs.seahorse.enable = true; - security.pam.services.jade.enableGnomeKeyring = true; - - systemd.services."NetworkManager-wait-online".enable = false; - - systemd.services = { - create-swapfile = { - serviceConfig.Type = "oneshot"; - wantedBy = ["swap-swapfile.swap"]; - script = '' - swapfile="/swap/swapfile" - if [[ -f "$swapfile" ]]; then - echo "Swap file $swapfile already exists, taking no action" - else - echo "Setting up swap file $swapfile" - ${pkgs.coreutils}/bin/truncate -s 0 "$swapfile" - ${pkgs.e2fsprogs}/bin/chattr +C "$swapfile" - fi - ''; - }; - }; - - services.logind.extraConfig = '' - RuntimeDirectorySize=12G - ''; - - # i rly should put that important big comment back here - system.stateVersion = "22.11"; # Did you read the comment? -} diff --git a/hosts/potatobook-g/hardware-configuration.nix b/hosts/potatobook-g/hardware-configuration.nix deleted file mode 100644 index 31a176a..0000000 --- a/hosts/potatobook-g/hardware-configuration.nix +++ /dev/null @@ -1,62 +0,0 @@ -# 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" "usbhid" "uas" "sd_mod"]; - boot.initrd.kernelModules = []; - boot.kernelModules = ["kvm-intel"]; - boot.extraModulePackages = []; - - fileSystems."/" = { - device = "/dev/disk/by-uuid/f6d243ec-6be9-4551-8cbb-aefb7b691a62"; - fsType = "btrfs"; - options = ["subvol=root"]; - }; - - fileSystems."/home" = { - device = "/dev/disk/by-uuid/f6d243ec-6be9-4551-8cbb-aefb7b691a62"; - fsType = "btrfs"; - options = ["subvol=home"]; - }; - - fileSystems."/nix" = { - device = "/dev/disk/by-uuid/f6d243ec-6be9-4551-8cbb-aefb7b691a62"; - fsType = "btrfs"; - options = ["subvol=nix"]; - }; - - fileSystems."/boot" = { - device = "/dev/disk/by-uuid/5F66-17ED"; - fsType = "vfat"; - }; - - swapDevices = [ - { - device = "/swap/swapfile"; - size = 1024 * 12; # 12GB - } - ]; - - # 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..useDHCP`. - networking.useDHCP = lib.mkDefault true; - # networking.interfaces.enp2s0f1u1.useDHCP = lib.mkDefault true; - # networking.interfaces.wlan0.useDHCP = lib.mkDefault true; - - nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; - powerManagement.cpuFreqGovernor = lib.mkDefault "powersave"; - hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; - # high-resolution display -} diff --git a/hosts/potatobook-g/iso.nix b/hosts/potatobook-g/iso.nix deleted file mode 100644 index b99407f..0000000 --- a/hosts/potatobook-g/iso.nix +++ /dev/null @@ -1,11 +0,0 @@ -{ - config, - pkgs, - ... -}: { - imports = [ - - - ./configuration.nix - ]; -} diff --git a/mac-brcm-fw/default.nix b/mac-brcm-fw/default.nix deleted file mode 100644 index 0ce5a72..0000000 --- a/mac-brcm-fw/default.nix +++ /dev/null @@ -1,3 +0,0 @@ -{...}: {} -# dummy - From a1d636e3301d5322532c6cca5acf8d8bb85a0e18 Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Thu, 27 Mar 2025 20:52:42 +0100 Subject: [PATCH 269/301] remove graphics.nix from modules/default.nix --- modules/default.nix | 1 - 1 file changed, 1 deletion(-) diff --git a/modules/default.nix b/modules/default.nix index 125b127..cd4c0e8 100644 --- a/modules/default.nix +++ b/modules/default.nix @@ -8,6 +8,5 @@ ./input ./media ./nix.nix - ./graphics.nix ]; } From 01e6551935e1c3a26263f5f19745bd1ddff5ddd1 Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Thu, 27 Mar 2025 20:55:20 +0100 Subject: [PATCH 270/301] remove macbook build script --- justfile | 3 --- 1 file changed, 3 deletions(-) diff --git a/justfile b/justfile index e6b5b75..d5ba36d 100644 --- a/justfile +++ b/justfile @@ -12,9 +12,6 @@ tbuild: update: update-typst-configs nix flake update --commit-lock-file --log-format multiline -build-mac: - sudo nixos-rebuild switch --flake . --impure --override-input mac-brcm-fw path:/home/jade/mac-brcm-fw --fast --log-format multiline - update-typst-configs: #!/usr/bin/env nu let file = './modules/desktop-environment/media/typst.nix'; From 9e9ed12969588df2156572a45ac9345a342ba199 Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Fri, 28 Mar 2025 15:05:48 +0100 Subject: [PATCH 271/301] add more shit to privacy.nix --- modules/desktop/home/niri/privacy.nix | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/modules/desktop/home/niri/privacy.nix b/modules/desktop/home/niri/privacy.nix index 1d4fbee..30b25ff 100644 --- a/modules/desktop/home/niri/privacy.nix +++ b/modules/desktop/home/niri/privacy.nix @@ -12,7 +12,10 @@ { matches = [ {app-id = "^signal|Element|org\.gnome\.Evolution$";} - {title = "^.*(Discord|Beispiel Screenshare block Bug).*$";} + {title = "^.*(Discord|Beispiel Screenshare block Bug|Bitwarden|Träwelling).*$";} + ]; + excludes = [ + {title = "^.*(Schrottkatze|Statistics|Leaderboard) - Träwelling.*$";} ]; block-out-from = "screen-capture"; } From eb969b4f6eb201a526c8bb5d11beeb0dcc7d69a9 Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Fri, 28 Mar 2025 15:06:21 +0100 Subject: [PATCH 272/301] upgrade and pure builds!!!! --- flake.lock | 76 +++++++++++++++++++++++++++--------------------------- justfile | 8 +++--- 2 files changed, 42 insertions(+), 42 deletions(-) diff --git a/flake.lock b/flake.lock index 155bf7c..31011ff 100644 --- a/flake.lock +++ b/flake.lock @@ -105,11 +105,11 @@ "rust-analyzer-src": "rust-analyzer-src" }, "locked": { - "lastModified": 1742366221, - "narHash": "sha256-GhWGWyGUvTF7H2DDGlQehsve1vRqIKAFhxy6D82Nj3Q=", + "lastModified": 1742452566, + "narHash": "sha256-sVuLDQ2UIWfXUBbctzrZrXM2X05YjX08K7XHMztt36E=", "owner": "nix-community", "repo": "fenix", - "rev": "a074d1bc9fd34f6b3a9049c5a61a82aea2044801", + "rev": "7d9ba794daf5e8cc7ee728859bc688d8e26d5f06", "type": "github" }, "original": { @@ -353,11 +353,11 @@ ] }, "locked": { - "lastModified": 1742326330, - "narHash": "sha256-Tumt3tcMXJniSh7tw2gW+WAnVLeB3WWm+E+yYFnLBXo=", + "lastModified": 1743097780, + "narHash": "sha256-5tUbaMBKYbfTe/4aXACxmiXG22TgwPBNcfZ8Kg3rt+g=", "owner": "nix-community", "repo": "home-manager", - "rev": "22a36aa709de7dd42b562a433b9cefecf104a6ee", + "rev": "b14a70c40f4fd0b73d095ab04a7c6e31fbc18e52", "type": "github" }, "original": { @@ -390,11 +390,11 @@ "lix": { "flake": false, "locked": { - "lastModified": 1741888409, - "narHash": "sha256-gJ7QmlwsJ/QdwUjwTjifNo3v7OBQm2N6xa19l3mMWM4=", - "rev": "20edd45ae816c73504ddfb9c678756e003ceeafd", + "lastModified": 1742622332, + "narHash": "sha256-z652gNdFc/95Fheq4DzVObERYRo+j9RdCF6tzkR8r80=", + "rev": "6059cbb031e49e05dd5d16208e2e50d3ab2611db", "type": "tarball", - "url": "https://git.lix.systems/api/v1/repos/lix-project/lix/archive/20edd45ae816c73504ddfb9c678756e003ceeafd.tar.gz?rev=20edd45ae816c73504ddfb9c678756e003ceeafd" + "url": "https://git.lix.systems/api/v1/repos/lix-project/lix/archive/6059cbb031e49e05dd5d16208e2e50d3ab2611db.tar.gz?rev=6059cbb031e49e05dd5d16208e2e50d3ab2611db" }, "original": { "type": "tarball", @@ -411,11 +411,11 @@ ] }, "locked": { - "lastModified": 1741894565, - "narHash": "sha256-2FD0NDJbEjUHloVrtEIms5miJsj1tvQCc/0YK5ambyc=", + "lastModified": 1742945498, + "narHash": "sha256-MB/b/xcDKqaVBxJIIxwb81r8ZiGLeKEcqokATRRroo8=", "ref": "refs/heads/main", - "rev": "a6da43f8193d9e329bba1795c42590c27966082e", - "revCount": 136, + "rev": "fa69ae26cc32dda178117b46487c2165c0e08316", + "revCount": 138, "type": "git", "url": "https://git.lix.systems/lix-project/nixos-module" }, @@ -434,11 +434,11 @@ "xwayland-satellite-unstable": "xwayland-satellite-unstable" }, "locked": { - "lastModified": 1742355568, - "narHash": "sha256-cHW060+beSciKdCK4SZ9vYPOFy/otAq+t9MiO54zKYY=", + "lastModified": 1742954683, + "narHash": "sha256-ZJBJzpWQcZYuxiX7YbLCaiZl1aOt8xQphXt0ZO0st+8=", "owner": "sodiboo", "repo": "niri-flake", - "rev": "10b56ff2ecc915ec26505526125b4f3a3006d5b3", + "rev": "41db28938147dfa2a2d528f24b59b6962b96f0c5", "type": "github" }, "original": { @@ -467,11 +467,11 @@ "niri-unstable": { "flake": false, "locked": { - "lastModified": 1742276600, - "narHash": "sha256-muceB5DW++WPqrGKpX3Hkii/DNSMmFs2oQrYRYHmPiU=", + "lastModified": 1742877599, + "narHash": "sha256-3Xy1mlAUcYSQSpt0Q/flA+o6Y1ZACDW52vVP2CX52w8=", "owner": "YaLTeR", "repo": "niri", - "rev": "e251ca7340bc71870c3a81a7ffc3d9bde58e685a", + "rev": "4534d3726676a403eb3dd19d28371bd8acd98401", "type": "github" }, "original": { @@ -496,11 +496,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1742288794, - "narHash": "sha256-Txwa5uO+qpQXrNG4eumPSD+hHzzYi/CdaM80M9XRLCo=", + "lastModified": 1742669843, + "narHash": "sha256-G5n+FOXLXcRx+3hCJ6Rt6ZQyF1zqQ0DL0sWAMn2Nk0w=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "b6eaf97c6960d97350c584de1b6dcff03c9daf42", + "rev": "1e5b653dff12029333a6546c11e108ede13052eb", "type": "github" }, "original": { @@ -524,11 +524,11 @@ }, "nixpkgs-stable": { "locked": { - "lastModified": 1742268799, - "narHash": "sha256-IhnK4LhkBlf14/F8THvUy3xi/TxSQkp9hikfDZRD4Ic=", + "lastModified": 1742751704, + "narHash": "sha256-rBfc+H1dDBUQ2mgVITMGBPI1PGuCznf9rcWX/XIULyE=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "da044451c6a70518db5b730fe277b70f494188f1", + "rev": "f0946fa5f1fb876a9dc2e1850d9d3a4e3f914092", "type": "github" }, "original": { @@ -540,11 +540,11 @@ }, "nixpkgs-stable_2": { "locked": { - "lastModified": 1742268799, - "narHash": "sha256-IhnK4LhkBlf14/F8THvUy3xi/TxSQkp9hikfDZRD4Ic=", + "lastModified": 1742937945, + "narHash": "sha256-lWc+79eZRyvHp/SqMhHTMzZVhpxkRvthsP1Qx6UCq0E=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "da044451c6a70518db5b730fe277b70f494188f1", + "rev": "d02d88f8de5b882ccdde0465d8fa2db3aa1169f7", "type": "github" }, "original": { @@ -555,11 +555,11 @@ }, "nixpkgs-unstable-small": { "locked": { - "lastModified": 1742362661, - "narHash": "sha256-wonmHfY804hKBC0SA/s3rOhjgNseURTLjpOXfAC2MkE=", + "lastModified": 1743082947, + "narHash": "sha256-wZ/bfXu9x025oNa4pVcwYbgVRSl2tf/izZTegPSljUQ=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "903d679a5a674158c3f8d823f62680d5664d15c6", + "rev": "8b1bcd4edc0de0a950eb117a37c55294997588b5", "type": "github" }, "original": { @@ -570,11 +570,11 @@ }, "nixpkgs_2": { "locked": { - "lastModified": 1742288794, - "narHash": "sha256-Txwa5uO+qpQXrNG4eumPSD+hHzzYi/CdaM80M9XRLCo=", + "lastModified": 1742889210, + "narHash": "sha256-hw63HnwnqU3ZQfsMclLhMvOezpM7RSB0dMAtD5/sOiw=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "b6eaf97c6960d97350c584de1b6dcff03c9daf42", + "rev": "698214a32beb4f4c8e3942372c694f40848b360d", "type": "github" }, "original": { @@ -926,11 +926,11 @@ "xwayland-satellite-unstable": { "flake": false, "locked": { - "lastModified": 1742249030, - "narHash": "sha256-YZ+axsuNsgIKWfnRkt6Qa9UoKfUOIWf42vNUonXxmxM=", + "lastModified": 1742773235, + "narHash": "sha256-YhJex62HHVF6EfdGLIC01uM6jH8XJu5ryZ+LlhG7wMs=", "owner": "Supreeeme", "repo": "xwayland-satellite", - "rev": "cca74a5f6b23742d77dc5db4312dfc40fd4a0fcc", + "rev": "b2613aec05f9e3f8488ef924203d62cafb712642", "type": "github" }, "original": { diff --git a/justfile b/justfile index d5ba36d..7460b44 100644 --- a/justfile +++ b/justfile @@ -1,20 +1,20 @@ upgrade: update build test: - sudo nixos-rebuild test --flake . --impure --log-format multiline + sudo nixos-rebuild test --flake . --log-format multiline build: - sudo nixos-rebuild switch --flake . --impure --fast --log-format multiline + sudo nixos-rebuild switch --flake . --fast --log-format multiline tbuild: - sudo nixos-rebuild switch --flake . --impure --fast --log-format multiline-with-logs --show-trace + sudo nixos-rebuild switch --flake . --fast --log-format multiline-with-logs --show-trace update: update-typst-configs nix flake update --commit-lock-file --log-format multiline update-typst-configs: #!/usr/bin/env nu - let file = './modules/desktop-environment/media/typst.nix'; + let file = './modules/media/typst.nix'; let $rev = http get https://forge.katzen.cafe/schrottkatze/typst-configs/commits/branch/main | query web -mq '.commit-list tr:first-of-type a.ui.sha.label' -a href | path basename | first; ./build-utils/templ-edit.nu edit $file REV $rev; let $hash = nix-prefetch-url https://forge.katzen.cafe/schrottkatze/typst-configs/archive/main.tar.gz --unpack; From 0eace3f336999fcfc8e19d122afaa73517670e97 Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Fri, 28 Mar 2025 23:34:51 +0100 Subject: [PATCH 273/301] more quirks!!! --- modules/desktop/home/niri/quirks.nix | 28 +++++++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/modules/desktop/home/niri/quirks.nix b/modules/desktop/home/niri/quirks.nix index 9f92af1..879918a 100644 --- a/modules/desktop/home/niri/quirks.nix +++ b/modules/desktop/home/niri/quirks.nix @@ -1,8 +1,9 @@ {...}: { programs.niri.settings = { window-rules = [ - # handle steam grabbing focus 1000 times on startup { + # handle steam grabbing focus 1000 times on startup + matches = [ { app-id = "steam"; @@ -10,6 +11,31 @@ ]; open-focused = false; } + { + # position steam notifs correctly: https://github.com/YaLTeR/niri/wiki/Application-Issues + + matches = [ + { + app-id = "steam"; + title = "^notificationtoasts_\\d+desktop$"; + } + ]; + default-floating-position = { + x = 10; + y = 10; + relative-to = "bottom-right"; + }; + } + { + matches = [ + { + title = "Guild Wars 2"; + app-id = "steam_app_1284210"; + } + ]; + border.enable = false; + shadow.enable = false; + } ]; # fix electron apps not doing wayland From cf3904423ea19c432a78a04d41118612ec2f18c6 Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Sat, 29 Mar 2025 17:33:55 +0100 Subject: [PATCH 274/301] allow mutual ssh access between devices --- common.nix | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/common.nix b/common.nix index 9e74f7c..e7cee06 100644 --- a/common.nix +++ b/common.nix @@ -105,6 +105,10 @@ with builtins; { users.users.jade = { isNormalUser = true; extraGroups = ["wheel" "input" "uinput" "libvirtd" "adbusers" "dialout" "plugdev" "wireshark"]; + openssh.authorizedKeys.keys = [ + "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOaE8TFsIazpn4OnHvHcRpOFr9FfvMaWOiEjmHsmnAoE cardno:000F_70CD7D05" + "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAILg7hhAKxIAbokHHcIj9HBgbkgoKGCG2R+gx7HZKL+iz cardno:000F_93C6A612" + ]; }; zramSwap = { From 62ea077ae974d8ce2cdb6bb1d7e952d93ee621c5 Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Sat, 29 Mar 2025 17:34:20 +0100 Subject: [PATCH 275/301] more quirks (because we didn't have enough already huh) --- modules/desktop/home/niri/quirks.nix | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/modules/desktop/home/niri/quirks.nix b/modules/desktop/home/niri/quirks.nix index 879918a..070f2fd 100644 --- a/modules/desktop/home/niri/quirks.nix +++ b/modules/desktop/home/niri/quirks.nix @@ -1,13 +1,15 @@ -{...}: { +{pkgs, ...}: { + home.packages = [pkgs.gamescope]; programs.niri.settings = { window-rules = [ { # handle steam grabbing focus 1000 times on startup matches = [ - { - app-id = "steam"; - } + {app-id = "steam";} + ]; + excludes = [ + {title = "(Guild Wars 2)";} ]; open-focused = false; } From 0f8d3f933cd9331941f57664beeb5620afa9d48b Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Sun, 30 Mar 2025 23:58:38 +0200 Subject: [PATCH 276/301] more complex privacy rules --- modules/desktop/home/niri/privacy.nix | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/modules/desktop/home/niri/privacy.nix b/modules/desktop/home/niri/privacy.nix index 30b25ff..b847972 100644 --- a/modules/desktop/home/niri/privacy.nix +++ b/modules/desktop/home/niri/privacy.nix @@ -15,7 +15,8 @@ {title = "^.*(Discord|Beispiel Screenshare block Bug|Bitwarden|Träwelling).*$";} ]; excludes = [ - {title = "^.*(Schrottkatze|Statistics|Leaderboard) - Träwelling.*$";} + {title = "^.*((Schrottkatze|Statistics|Leaderboard) - Träwelling|chaos.social|Nekoverse|catgirl.cloud).*$";} + {is-floating = true;} ]; block-out-from = "screen-capture"; } From 0d1d7b8c3a7f104010b6d4264182cc36051142e3 Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Tue, 1 Apr 2025 15:34:52 +0200 Subject: [PATCH 277/301] flake.lock: Update MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Flake lock file updates: • Updated input 'home-manager': 'github:nix-community/home-manager/b14a70c40f4fd0b73d095ab04a7c6e31fbc18e52' (2025-03-27) → 'github:nix-community/home-manager/55cf1f16324e694c991e846ad5fc897f0f75ac64' (2025-04-01) • Updated input 'niri': 'github:sodiboo/niri-flake/41db28938147dfa2a2d528f24b59b6962b96f0c5' (2025-03-26) → 'github:sodiboo/niri-flake/cdca190c377558ee9109d848b20ecb3bf941ef88' (2025-04-01) • Updated input 'niri/niri-unstable': 'github:YaLTeR/niri/4534d3726676a403eb3dd19d28371bd8acd98401' (2025-03-25) → 'github:YaLTeR/niri/60034a57efd9c8130b05797b37cbc187a8c13145' (2025-04-01) • Updated input 'niri/nixpkgs': 'github:NixOS/nixpkgs/1e5b653dff12029333a6546c11e108ede13052eb' (2025-03-22) → 'github:NixOS/nixpkgs/52faf482a3889b7619003c0daec593a1912fddc1' (2025-03-30) • Updated input 'niri/nixpkgs-stable': 'github:NixOS/nixpkgs/f0946fa5f1fb876a9dc2e1850d9d3a4e3f914092' (2025-03-23) → 'github:NixOS/nixpkgs/7ffe0edc685f14b8c635e3d6591b0bbb97365e6c' (2025-03-30) • Updated input 'niri/xwayland-satellite-unstable': 'github:Supreeeme/xwayland-satellite/b2613aec05f9e3f8488ef924203d62cafb712642' (2025-03-23) → 'github:Supreeeme/xwayland-satellite/45c055696437a08e3989d9b91d9c617b84cc2bc3' (2025-03-30) • Updated input 'nixos-hardware': 'github:NixOS/nixos-hardware/ecaa2d911e77c265c2a5bac8b583c40b0f151726' (2025-03-24) → 'github:NixOS/nixos-hardware/de6fc5551121c59c01e2a3d45b277a6d05077bc4' (2025-03-31) • Updated input 'nixpkgs': 'github:NixOS/nixpkgs/698214a32beb4f4c8e3942372c694f40848b360d' (2025-03-25) → 'github:NixOS/nixpkgs/52faf482a3889b7619003c0daec593a1912fddc1' (2025-03-30) • Updated input 'nixpkgs-stable': 'github:NixOS/nixpkgs/d02d88f8de5b882ccdde0465d8fa2db3aa1169f7' (2025-03-25) → 'github:NixOS/nixpkgs/7ffe0edc685f14b8c635e3d6591b0bbb97365e6c' (2025-03-30) • Updated input 'nixpkgs-unstable-small': 'github:NixOS/nixpkgs/8b1bcd4edc0de0a950eb117a37c55294997588b5' (2025-03-27) → 'github:NixOS/nixpkgs/88e992074d86ad50249de12b7fb8dbaadf8dc0c5' (2025-04-01) • Updated input 'stylix': 'github:danth/stylix/2fb8321ea16c595e0208b22021ddaf1f471c634a' (2025-03-27) → 'github:danth/stylix/54721996d6590267d095f63297d9051e9342a33d' (2025-04-01) --- flake.lock | 173 ++++++++++++++++++++++++++++++++++++++++------------- 1 file changed, 130 insertions(+), 43 deletions(-) diff --git a/flake.lock b/flake.lock index 31011ff..9d0e9d5 100644 --- a/flake.lock +++ b/flake.lock @@ -157,6 +157,20 @@ } }, "flake-compat": { + "locked": { + "lastModified": 1733328505, + "narHash": "sha256-NeCCThCEP3eCl2l/+27kNNK7QrwZB1IJCrXfrbv5oqU=", + "rev": "ff81ac966bb2cae68946d5ed5fc4994f96d0ffec", + "revCount": 69, + "type": "tarball", + "url": "https://api.flakehub.com/f/pinned/edolstra/flake-compat/1.1.0/01948eb7-9cba-704f-bbf3-3fa956735b52/source.tar.gz" + }, + "original": { + "type": "tarball", + "url": "https://flakehub.com/f/edolstra/flake-compat/1.tar.gz" + } + }, + "flake-compat_2": { "locked": { "lastModified": 1733328505, "narHash": "sha256-NeCCThCEP3eCl2l/+27kNNK7QrwZB1IJCrXfrbv5oqU=", @@ -353,11 +367,11 @@ ] }, "locked": { - "lastModified": 1743097780, - "narHash": "sha256-5tUbaMBKYbfTe/4aXACxmiXG22TgwPBNcfZ8Kg3rt+g=", + "lastModified": 1743513930, + "narHash": "sha256-ExRQkfXHwHbf6nKgnwDB0vSNInUS16cubvEVm3PrHeQ=", "owner": "nix-community", "repo": "home-manager", - "rev": "b14a70c40f4fd0b73d095ab04a7c6e31fbc18e52", + "rev": "55cf1f16324e694c991e846ad5fc897f0f75ac64", "type": "github" }, "original": { @@ -434,11 +448,11 @@ "xwayland-satellite-unstable": "xwayland-satellite-unstable" }, "locked": { - "lastModified": 1742954683, - "narHash": "sha256-ZJBJzpWQcZYuxiX7YbLCaiZl1aOt8xQphXt0ZO0st+8=", + "lastModified": 1743513993, + "narHash": "sha256-4ActcWd2XOBei7ZcDrL8zWxUWh1TxwwsAp6CTwlgjog=", "owner": "sodiboo", "repo": "niri-flake", - "rev": "41db28938147dfa2a2d528f24b59b6962b96f0c5", + "rev": "cdca190c377558ee9109d848b20ecb3bf941ef88", "type": "github" }, "original": { @@ -467,11 +481,11 @@ "niri-unstable": { "flake": false, "locked": { - "lastModified": 1742877599, - "narHash": "sha256-3Xy1mlAUcYSQSpt0Q/flA+o6Y1ZACDW52vVP2CX52w8=", + "lastModified": 1743492917, + "narHash": "sha256-OqLDg0Ody1HX23hgjvjIkfZPNhYKxbkj/ONcDjdD4Ik=", "owner": "YaLTeR", "repo": "niri", - "rev": "4534d3726676a403eb3dd19d28371bd8acd98401", + "rev": "60034a57efd9c8130b05797b37cbc187a8c13145", "type": "github" }, "original": { @@ -480,13 +494,34 @@ "type": "github" } }, + "nixcord": { + "inputs": { + "flake-compat": "flake-compat", + "nixpkgs": "nixpkgs_2", + "systems": "systems_2", + "treefmt-nix": "treefmt-nix" + }, + "locked": { + "lastModified": 1743453178, + "narHash": "sha256-TdVPzQabTKVeX50Mbwu6Tq2l65e5WQk2o3S4NHyRBA0=", + "owner": "kaylorben", + "repo": "nixcord", + "rev": "ea80fdaf62168f85ce9813bc8f21fe45f892f5e7", + "type": "github" + }, + "original": { + "owner": "kaylorben", + "repo": "nixcord", + "type": "github" + } + }, "nixos-hardware": { "locked": { - "lastModified": 1742806253, - "narHash": "sha256-zvQ4GsCJT6MTOzPKLmlFyM+lxo0JGQ0cSFaZSACmWfY=", + "lastModified": 1743420942, + "narHash": "sha256-b/exDDQSLmENZZgbAEI3qi9yHkuXAXCPbormD8CSJXo=", "owner": "NixOS", "repo": "nixos-hardware", - "rev": "ecaa2d911e77c265c2a5bac8b583c40b0f151726", + "rev": "de6fc5551121c59c01e2a3d45b277a6d05077bc4", "type": "github" }, "original": { @@ -496,11 +531,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1742669843, - "narHash": "sha256-G5n+FOXLXcRx+3hCJ6Rt6ZQyF1zqQ0DL0sWAMn2Nk0w=", + "lastModified": 1743315132, + "narHash": "sha256-6hl6L/tRnwubHcA4pfUUtk542wn2Om+D4UnDhlDW9BE=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "1e5b653dff12029333a6546c11e108ede13052eb", + "rev": "52faf482a3889b7619003c0daec593a1912fddc1", "type": "github" }, "original": { @@ -524,11 +559,11 @@ }, "nixpkgs-stable": { "locked": { - "lastModified": 1742751704, - "narHash": "sha256-rBfc+H1dDBUQ2mgVITMGBPI1PGuCznf9rcWX/XIULyE=", + "lastModified": 1743367904, + "narHash": "sha256-sOos1jZGKmT6xxPvxGQyPTApOunXvScV4lNjBCXd/CI=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "f0946fa5f1fb876a9dc2e1850d9d3a4e3f914092", + "rev": "7ffe0edc685f14b8c635e3d6591b0bbb97365e6c", "type": "github" }, "original": { @@ -540,11 +575,11 @@ }, "nixpkgs-stable_2": { "locked": { - "lastModified": 1742937945, - "narHash": "sha256-lWc+79eZRyvHp/SqMhHTMzZVhpxkRvthsP1Qx6UCq0E=", + "lastModified": 1743367904, + "narHash": "sha256-sOos1jZGKmT6xxPvxGQyPTApOunXvScV4lNjBCXd/CI=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "d02d88f8de5b882ccdde0465d8fa2db3aa1169f7", + "rev": "7ffe0edc685f14b8c635e3d6591b0bbb97365e6c", "type": "github" }, "original": { @@ -555,11 +590,11 @@ }, "nixpkgs-unstable-small": { "locked": { - "lastModified": 1743082947, - "narHash": "sha256-wZ/bfXu9x025oNa4pVcwYbgVRSl2tf/izZTegPSljUQ=", + "lastModified": 1743472173, + "narHash": "sha256-xwNv3FYTC5pl4QVZ79gUxqCEvqKzcKdXycpH5UbYscw=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "8b1bcd4edc0de0a950eb117a37c55294997588b5", + "rev": "88e992074d86ad50249de12b7fb8dbaadf8dc0c5", "type": "github" }, "original": { @@ -570,11 +605,27 @@ }, "nixpkgs_2": { "locked": { - "lastModified": 1742889210, - "narHash": "sha256-hw63HnwnqU3ZQfsMclLhMvOezpM7RSB0dMAtD5/sOiw=", + "lastModified": 1742800061, + "narHash": "sha256-oDJGK1UMArK52vcW9S5S2apeec4rbfNELgc50LqiPNs=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "698214a32beb4f4c8e3942372c694f40848b360d", + "rev": "1750f3c1c89488e2ffdd47cab9d05454dddfb734", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixpkgs-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_3": { + "locked": { + "lastModified": 1743315132, + "narHash": "sha256-6hl6L/tRnwubHcA4pfUUtk542wn2Om+D4UnDhlDW9BE=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "52faf482a3889b7619003c0daec593a1912fddc1", "type": "github" }, "original": { @@ -583,7 +634,7 @@ "type": "indirect" } }, - "nixpkgs_3": { + "nixpkgs_4": { "locked": { "lastModified": 1741513245, "narHash": "sha256-7rTAMNTY1xoBwz0h7ZMtEcd8LELk9R5TzBPoHuhNSCk=", @@ -599,7 +650,7 @@ "type": "github" } }, - "nixpkgs_4": { + "nixpkgs_5": { "locked": { "lastModified": 1726937504, "narHash": "sha256-bvGoiQBvponpZh8ClUcmJ6QnsNKw0EMrCQJARK3bI1c=", @@ -622,7 +673,7 @@ "stylix", "nixpkgs" ], - "treefmt-nix": "treefmt-nix" + "treefmt-nix": "treefmt-nix_2" }, "locked": { "lastModified": 1741693509, @@ -645,8 +696,9 @@ "home-manager": "home-manager", "lix-module": "lix-module", "niri": "niri", + "nixcord": "nixcord", "nixos-hardware": "nixos-hardware", - "nixpkgs": "nixpkgs_2", + "nixpkgs": "nixpkgs_3", "nixpkgs-stable": "nixpkgs-stable_2", "nixpkgs-unstable-small": "nixpkgs-unstable-small", "stylix": "stylix", @@ -706,14 +758,14 @@ "base16-helix": "base16-helix", "base16-vim": "base16-vim", "firefox-gnome-theme": "firefox-gnome-theme", - "flake-compat": "flake-compat", + "flake-compat": "flake-compat_2", "flake-utils": "flake-utils_2", "git-hooks": "git-hooks", "gnome-shell": "gnome-shell", "home-manager": "home-manager_2", - "nixpkgs": "nixpkgs_3", + "nixpkgs": "nixpkgs_4", "nur": "nur", - "systems": "systems_2", + "systems": "systems_3", "tinted-foot": "tinted-foot", "tinted-kitty": "tinted-kitty", "tinted-schemes": "tinted-schemes", @@ -721,11 +773,11 @@ "tinted-zed": "tinted-zed" }, "locked": { - "lastModified": 1743075971, - "narHash": "sha256-8fSI6C19ZTcHgvoLK17wfEEVI08tgnZfSLgVe3E/22w=", + "lastModified": 1743496321, + "narHash": "sha256-xhHg8ixBhZngvGOMb2SJuJEHhHA10n8pA02fEKuKzek=", "owner": "danth", "repo": "stylix", - "rev": "2fb8321ea16c595e0208b22021ddaf1f471c634a", + "rev": "54721996d6590267d095f63297d9051e9342a33d", "type": "github" }, "original": { @@ -750,6 +802,20 @@ } }, "systems_2": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "id": "systems", + "type": "indirect" + } + }, + "systems_3": { "locked": { "lastModified": 1681028828, "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", @@ -764,7 +830,7 @@ "type": "github" } }, - "systems_3": { + "systems_4": { "locked": { "lastModified": 1681028828, "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", @@ -862,6 +928,27 @@ } }, "treefmt-nix": { + "inputs": { + "nixpkgs": [ + "nixcord", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1742370146, + "narHash": "sha256-XRE8hL4vKIQyVMDXykFh4ceo3KSpuJF3ts8GKwh5bIU=", + "owner": "numtide", + "repo": "treefmt-nix", + "rev": "adc195eef5da3606891cedf80c0d9ce2d3190808", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "treefmt-nix", + "type": "github" + } + }, + "treefmt-nix_2": { "inputs": { "nixpkgs": [ "stylix", @@ -888,9 +975,9 @@ "crane": "crane_2", "fenix": "fenix_2", "flake-parts": "flake-parts_2", - "nixpkgs": "nixpkgs_4", + "nixpkgs": "nixpkgs_5", "rust-manifest": "rust-manifest", - "systems": "systems_3" + "systems": "systems_4" }, "locked": { "lastModified": 1739736913, @@ -926,11 +1013,11 @@ "xwayland-satellite-unstable": { "flake": false, "locked": { - "lastModified": 1742773235, - "narHash": "sha256-YhJex62HHVF6EfdGLIC01uM6jH8XJu5ryZ+LlhG7wMs=", + "lastModified": 1743346993, + "narHash": "sha256-i7rWd/5BcqLgQEtB5L/6gKN5R5GUJcmm34F+iBivH60=", "owner": "Supreeeme", "repo": "xwayland-satellite", - "rev": "b2613aec05f9e3f8488ef924203d62cafb712642", + "rev": "45c055696437a08e3989d9b91d9c617b84cc2bc3", "type": "github" }, "original": { From 279aebf54e066eb79a6facd80f1b8a55df22f644 Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Tue, 1 Apr 2025 17:57:28 +0200 Subject: [PATCH 278/301] fix vencord startup corner radius mismatch --- modules/desktop/home/niri/quirks.nix | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/modules/desktop/home/niri/quirks.nix b/modules/desktop/home/niri/quirks.nix index 070f2fd..1f4eb31 100644 --- a/modules/desktop/home/niri/quirks.nix +++ b/modules/desktop/home/niri/quirks.nix @@ -38,6 +38,21 @@ border.enable = false; shadow.enable = false; } + { + matches = [ + { + app-id = "vesktop"; + title = "vesktop"; + is-floating = true; + } + ]; + geometry-corner-radius = let val = 5.; in { + bottom-left = val; + bottom-right = val; + top-left = val; + top-right = val; + }; + } ]; # fix electron apps not doing wayland From b8c6e0c19636ba752b104051f557e6087be4bfff Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Tue, 1 Apr 2025 17:58:07 +0200 Subject: [PATCH 279/301] add vencord (yes, ik, wrong order) --- flake.nix | 7 +++++++ modules/desktop-legacy/social.nix | 11 +++++++++++ 2 files changed, 18 insertions(+) diff --git a/flake.nix b/flake.nix index 4ff56c9..e33d645 100644 --- a/flake.nix +++ b/flake.nix @@ -9,6 +9,7 @@ stylix.url = "github:danth/stylix"; typst-within.url = "github:schrottkatze/typst"; crane.url = "github:ipetkov/crane"; + nixcord.url = "github:kaylorben/nixcord"; lix-module = { url = "git+https://git.lix.systems/lix-project/nixos-module"; inputs.nixpkgs.follows = "nixpkgs"; @@ -79,6 +80,9 @@ home-manager.extraSpecialArgs = { inherit pkgs-unstable-small pkgs-stable typst-within; }; + home-manager.sharedModules = [ + inputs.nixcord.homeManagerModules.nixcord + ]; home-manager.users.jade = { nixosConfig, pkgs, @@ -106,6 +110,9 @@ home-manager.extraSpecialArgs = { inherit pkgs-unstable-small pkgs-stable typst-within; }; + home-manager.sharedModules = [ + inputs.nixcord.homeManagerModules.nixcord + ]; home-manager.users.jade = { nixosConfig, pkgs, diff --git a/modules/desktop-legacy/social.nix b/modules/desktop-legacy/social.nix index 2dcde86..dca396b 100644 --- a/modules/desktop-legacy/social.nix +++ b/modules/desktop-legacy/social.nix @@ -16,6 +16,17 @@ in pkgs-stable, ... }: { + programs.nixcord = { + enable = true; + vesktop = { + enable = true; + # autoScroll.enable = true; + }; + config = { + frameless = true; + disableMinSize = true; + }; + }; home.packages = with pkgs; [ signal-desktop mumble From d129bc287b1b6b25ea6ab3ecfee2b0ec5ee43d1f Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Fri, 4 Apr 2025 17:20:08 +0200 Subject: [PATCH 280/301] enable baba-is-float for floating windows --- modules/desktop/home/niri/style.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/modules/desktop/home/niri/style.nix b/modules/desktop/home/niri/style.nix index b12b202..c4dd1fa 100644 --- a/modules/desktop/home/niri/style.nix +++ b/modules/desktop/home/niri/style.nix @@ -49,6 +49,7 @@ matches = [{ is-floating = true; }]; + baba-is-float = true; shadow = { offset.y = 0; offset.x = 0; From 2de24d60b973d009a4c609553d6193a2ccb0c1c2 Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Fri, 4 Apr 2025 17:20:26 +0200 Subject: [PATCH 281/301] more steam quirks (who would have thought...) --- modules/desktop/home/niri/quirks.nix | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/modules/desktop/home/niri/quirks.nix b/modules/desktop/home/niri/quirks.nix index 1f4eb31..7a9199e 100644 --- a/modules/desktop/home/niri/quirks.nix +++ b/modules/desktop/home/niri/quirks.nix @@ -4,29 +4,30 @@ window-rules = [ { # handle steam grabbing focus 1000 times on startup - matches = [ - {app-id = "steam";} - ]; - excludes = [ - {title = "(Guild Wars 2)";} + { + app-id = "steam"; + title = "Steam"; + } ]; open-focused = false; } { # position steam notifs correctly: https://github.com/YaLTeR/niri/wiki/Application-Issues - matches = [ { app-id = "steam"; - title = "^notificationtoasts_\\d+desktop$"; + title = "^notificationtoasts_[\\d]+_desktop$"; } ]; default-floating-position = { - x = 10; - y = 10; + x = 0; + y = 0; relative-to = "bottom-right"; }; + shadow.enable = false; + border.enable = false; + baba-is-float = false; } { matches = [ From 4c54a7b40b9e64fc97ba9c7acf0c92adc818e07b Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Fri, 4 Apr 2025 17:20:37 +0200 Subject: [PATCH 282/301] switch back to evince --- modules/media/default.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/media/default.nix b/modules/media/default.nix index 0829585..a3a8925 100644 --- a/modules/media/default.nix +++ b/modules/media/default.nix @@ -44,7 +44,7 @@ in vlc mpv - kdePackages.okular + evince nomacs jellyfin-media-player From e1d8bab29c81ca3021dd7a631a0245d33a0a0e91 Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Wed, 9 Apr 2025 05:38:25 +0200 Subject: [PATCH 283/301] fancy obs shit --- modules/media/obs.nix | 3 +++ 1 file changed, 3 insertions(+) diff --git a/modules/media/obs.nix b/modules/media/obs.nix index 4f5adc1..978a8d3 100644 --- a/modules/media/obs.nix +++ b/modules/media/obs.nix @@ -10,6 +10,7 @@ in options.jade.desktop.media.obs = mkEnableOption "Enable OBS"; config = mkIf cfg { + programs.obs-studio.enableVirtualCamera = true; # OBS stuffs environment.systemPackages = [ (pkgs.wrapOBS { @@ -17,6 +18,8 @@ in wlrobs obs-backgroundremoval obs-pipewire-audio-capture + waveform + obs-3d-effect ]; }) ]; From 5750480f034ea31517868470ad0c23745cd7d1f3 Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Wed, 9 Apr 2025 05:46:53 +0200 Subject: [PATCH 284/301] install transmission --- common.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/common.nix b/common.nix index e7cee06..9b9cb3b 100644 --- a/common.nix +++ b/common.nix @@ -16,6 +16,7 @@ with builtins; { environment = { systemPackages = with pkgs; [ overskride + transmission_4-gtk htmlq From 4919a62f3f50fdc234346a2cce8533d520a77af7 Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Fri, 11 Apr 2025 09:08:18 +0200 Subject: [PATCH 285/301] make steam notifs not steal focus --- modules/desktop/home/niri/quirks.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/modules/desktop/home/niri/quirks.nix b/modules/desktop/home/niri/quirks.nix index 7a9199e..37e6e8f 100644 --- a/modules/desktop/home/niri/quirks.nix +++ b/modules/desktop/home/niri/quirks.nix @@ -28,6 +28,7 @@ shadow.enable = false; border.enable = false; baba-is-float = false; + open-focused = false; } { matches = [ From 2be0a923e6b2945dacb6855414a1caa1a9b10910 Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Fri, 11 Apr 2025 09:08:32 +0200 Subject: [PATCH 286/301] switch to libreoffice --- modules/media/default.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/media/default.nix b/modules/media/default.nix index a3a8925..c69abfc 100644 --- a/modules/media/default.nix +++ b/modules/media/default.nix @@ -34,7 +34,7 @@ in imagemagick ffmpeg_7-full - onlyoffice-bin_latest + libreoffice # viewers pkgs-stable.font-manager From 38d96c9f525dcc227471e81abd30bb0795af51d3 Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Fri, 11 Apr 2025 09:08:46 +0200 Subject: [PATCH 287/301] set up nixfmt --- flake.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/flake.nix b/flake.nix index e33d645..1b05de3 100644 --- a/flake.nix +++ b/flake.nix @@ -56,6 +56,7 @@ }; }; in { + formatter.x86_64-linux = nixpkgs.legacyPackages.x86_64-linux.nixfmt-rfc-style; devShells."x86_64-linux".default = pkgs.mkShell { buildInputs = [ rs-toolchain From 509320c115216663aa06e88d5f740a5faf919a07 Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Fri, 11 Apr 2025 09:20:46 +0200 Subject: [PATCH 288/301] formatting, big time --- common.nix | 17 +- flake.nix | 216 +++++---- hosts/denkbrett/configuration.nix | 13 +- hosts/denkbrett/hardware-configuration.nix | 36 +- hosts/denkbrett/modules/default.nix | 3 +- hosts/denkbrett/modules/graphics.nix | 3 +- hosts/denkbrett/modules/input.nix | 49 +- .../monosodium-glutamate-g/configuration.nix | 7 +- .../hardware-configuration.nix | 32 +- .../modules/default.nix | 3 +- .../modules/graphics.nix | 3 +- modules/default.nix | 3 +- modules/desktop-legacy/default.nix | 45 +- modules/desktop-legacy/gaming.nix | 24 +- modules/desktop-legacy/kdeconnect.nix | 24 +- modules/desktop-legacy/social.nix | 34 +- modules/desktop-legacy/syncthing.nix | 28 +- modules/desktop/audio.nix | 3 +- modules/desktop/default.nix | 3 +- modules/desktop/dm.nix | 50 +- modules/desktop/home/browser.nix | 60 +-- modules/desktop/home/default.nix | 51 ++- modules/desktop/home/eww/default.nix | 11 +- modules/desktop/home/layaway.nix | 10 +- modules/desktop/home/niri/binds.nix | 147 ++++-- modules/desktop/home/niri/default.nix | 12 +- modules/desktop/home/niri/input.nix | 3 +- modules/desktop/home/niri/privacy.nix | 15 +- modules/desktop/home/niri/quirks.nix | 21 +- modules/desktop/home/niri/screenshot.nix | 15 +- modules/desktop/home/niri/style.nix | 58 ++- modules/desktop/home/niri/xwayland-sat.nix | 5 +- modules/desktop/home/notifications.nix | 3 +- modules/desktop/home/swayidle.nix | 3 +- modules/desktop/home/terminal.nix | 3 +- modules/desktop/locale.nix | 3 +- modules/desktop/printing.nix | 3 +- modules/desktop/themeing.nix | 51 ++- modules/desktop/tlp.nix | 3 +- modules/hardware/default.nix | 3 +- modules/hardware/hardware_key.nix | 48 +- modules/hardware/spacenav.nix | 5 +- modules/hardware/wacom.nix | 19 +- modules/input/default.nix | 3 +- modules/input/evremap.nix | 165 ++++--- modules/media/default.nix | 28 +- modules/media/fonts.nix | 23 +- modules/media/obs.nix | 54 +-- modules/media/typst.nix | 10 +- modules/net/default.nix | 19 +- modules/net/dispatchers/default.nix | 20 +- modules/net/eduroam.nix | 20 +- modules/net/firewall.nix | 3 +- modules/net/hosts.nix | 3 +- modules/nix.nix | 8 +- modules/shell/btop.nix | 19 +- modules/shell/default.nix | 13 +- modules/shell/git.nix | 93 ++-- modules/shell/helix.nix | 430 +++++++++--------- modules/shell/mprocs.nix | 47 +- modules/shell/nu.nix | 78 ++-- modules/shell/starship.nix | 77 ++-- modules/shell/sudo.nix | 5 +- modules/shell/tty.nix | 17 +- 64 files changed, 1293 insertions(+), 990 deletions(-) diff --git a/common.nix b/common.nix index 9b9cb3b..4c6e6f7 100644 --- a/common.nix +++ b/common.nix @@ -10,11 +10,13 @@ ... }: with lib; -with builtins; { - imports = [lix-module.nixosModules.default]; +with builtins; +{ + imports = [ lix-module.nixosModules.default ]; environment = { systemPackages = with pkgs; [ + nixfmt-rfc-style overskride transmission_4-gtk @@ -105,7 +107,16 @@ with builtins; { users.users.jade = { isNormalUser = true; - extraGroups = ["wheel" "input" "uinput" "libvirtd" "adbusers" "dialout" "plugdev" "wireshark"]; + extraGroups = [ + "wheel" + "input" + "uinput" + "libvirtd" + "adbusers" + "dialout" + "plugdev" + "wireshark" + ]; openssh.authorizedKeys.keys = [ "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOaE8TFsIazpn4OnHvHcRpOFr9FfvMaWOiEjmHsmnAoE cardno:000F_70CD7D05" "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAILg7hhAKxIAbokHHcIj9HBgbkgoKGCG2R+gx7HZKL+iz cardno:000F_93C6A612" diff --git a/flake.nix b/flake.nix index 1b05de3..1dd871f 100644 --- a/flake.nix +++ b/flake.nix @@ -24,107 +24,129 @@ }; }; - outputs = { - self, - nixpkgs, - nixpkgs-stable, - nixpkgs-unstable-small, - lix-module, - typst-within, - home-manager, - nixos-hardware, - niri, - stylix, - fenix, - crane, - ... - } @ inputs: let - system = "x86_64-linux"; - pkgs = nixpkgs.legacyPackages.${system}; - pkgs-stable = nixpkgs-stable.legacyPackages.${system}; - pkgs-unstable-small = nixpkgs-unstable-small.legacyPackages.${system}; - rs-toolchain = with fenix.packages.${system}; - combine [ - complete.toolchain - ]; - crane-lib = (crane.mkLib nixpkgs.legacyPackages.${system}).overrideToolchain rs-toolchain; - rs-programs = final: prev: { - s10e-jrnl = crane-lib.buildPackage { - pname = "s10e-bs"; - version = "0.0.1"; - src = crane-lib.cleanCargoSource (crane-lib.path ./.); - }; - }; - in { - formatter.x86_64-linux = nixpkgs.legacyPackages.x86_64-linux.nixfmt-rfc-style; - devShells."x86_64-linux".default = pkgs.mkShell { - buildInputs = [ - rs-toolchain - pkgs.pkg-config - pkgs.openssl - ]; - }; - nixosConfigurations = { - monosodium-glutamate-g = nixpkgs.lib.nixosSystem { - specialArgs = { - inherit inputs pkgs-unstable-small pkgs-stable rs-programs lix-module niri; + outputs = + { + self, + nixpkgs, + nixpkgs-stable, + nixpkgs-unstable-small, + lix-module, + typst-within, + home-manager, + nixos-hardware, + niri, + stylix, + fenix, + crane, + ... + }@inputs: + let + system = "x86_64-linux"; + pkgs = nixpkgs.legacyPackages.${system}; + pkgs-stable = nixpkgs-stable.legacyPackages.${system}; + pkgs-unstable-small = nixpkgs-unstable-small.legacyPackages.${system}; + rs-toolchain = + with fenix.packages.${system}; + combine [ + complete.toolchain + ]; + crane-lib = (crane.mkLib nixpkgs.legacyPackages.${system}).overrideToolchain rs-toolchain; + rs-programs = final: prev: { + s10e-jrnl = crane-lib.buildPackage { + pname = "s10e-bs"; + version = "0.0.1"; + src = crane-lib.cleanCargoSource (crane-lib.path ./.); }; - system = "x86_64-linux"; - modules = [ - inputs.niri.nixosModules.niri - stylix.nixosModules.stylix - ./hosts/monosodium-glutamate-g/configuration.nix - home-manager.nixosModules.home-manager - { - home-manager.useGlobalPkgs = true; - home-manager.useUserPackages = true; - home-manager.extraSpecialArgs = { - inherit pkgs-unstable-small pkgs-stable typst-within; - }; - home-manager.sharedModules = [ - inputs.nixcord.homeManagerModules.nixcord - ]; - home-manager.users.jade = { - nixosConfig, - pkgs, - ... - }: { - home.sessionVariables.TZ = nixosConfig.time.timeZone; - home.stateVersion = "${nixosConfig.system.stateVersion}"; - }; - } + }; + in + { + formatter.x86_64-linux = nixpkgs.legacyPackages.x86_64-linux.nixfmt-rfc-style; + devShells."x86_64-linux".default = pkgs.mkShell { + buildInputs = [ + rs-toolchain + pkgs.pkg-config + pkgs.openssl ]; }; - denkbrett = nixpkgs.lib.nixosSystem { - specialArgs = { - inherit inputs pkgs-unstable-small pkgs-stable rs-programs lix-module niri; + nixosConfigurations = { + monosodium-glutamate-g = nixpkgs.lib.nixosSystem { + specialArgs = { + inherit + inputs + pkgs-unstable-small + pkgs-stable + rs-programs + lix-module + niri + ; + }; + system = "x86_64-linux"; + modules = [ + inputs.niri.nixosModules.niri + stylix.nixosModules.stylix + ./hosts/monosodium-glutamate-g/configuration.nix + home-manager.nixosModules.home-manager + { + home-manager.useGlobalPkgs = true; + home-manager.useUserPackages = true; + home-manager.extraSpecialArgs = { + inherit pkgs-unstable-small pkgs-stable typst-within; + }; + home-manager.sharedModules = [ + inputs.nixcord.homeManagerModules.nixcord + ]; + home-manager.users.jade = + { + nixosConfig, + pkgs, + ... + }: + { + home.sessionVariables.TZ = nixosConfig.time.timeZone; + home.stateVersion = "${nixosConfig.system.stateVersion}"; + }; + } + ]; + }; + denkbrett = nixpkgs.lib.nixosSystem { + specialArgs = { + inherit + inputs + pkgs-unstable-small + pkgs-stable + rs-programs + lix-module + niri + ; + }; + system = "x86_64-linux"; + modules = [ + inputs.niri.nixosModules.niri + stylix.nixosModules.stylix + ./hosts/denkbrett/configuration.nix + home-manager.nixosModules.home-manager + { + home-manager.useGlobalPkgs = true; + home-manager.useUserPackages = true; + home-manager.extraSpecialArgs = { + inherit pkgs-unstable-small pkgs-stable typst-within; + }; + home-manager.sharedModules = [ + inputs.nixcord.homeManagerModules.nixcord + ]; + home-manager.users.jade = + { + nixosConfig, + pkgs, + ... + }: + { + home.sessionVariables.TZ = nixosConfig.time.timeZone; + home.stateVersion = "22.11"; + }; + } + ]; }; - system = "x86_64-linux"; - modules = [ - inputs.niri.nixosModules.niri - stylix.nixosModules.stylix - ./hosts/denkbrett/configuration.nix - home-manager.nixosModules.home-manager - { - home-manager.useGlobalPkgs = true; - home-manager.useUserPackages = true; - home-manager.extraSpecialArgs = { - inherit pkgs-unstable-small pkgs-stable typst-within; - }; - home-manager.sharedModules = [ - inputs.nixcord.homeManagerModules.nixcord - ]; - home-manager.users.jade = { - nixosConfig, - pkgs, - ... - }: { - home.sessionVariables.TZ = nixosConfig.time.timeZone; - home.stateVersion = "22.11"; - }; - } - ]; }; }; - }; } diff --git a/hosts/denkbrett/configuration.nix b/hosts/denkbrett/configuration.nix index 6ecfb45..a7558b7 100644 --- a/hosts/denkbrett/configuration.nix +++ b/hosts/denkbrett/configuration.nix @@ -1,7 +1,8 @@ # 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’). -{pkgs, ...}: { +{ pkgs, ... }: +{ nixpkgs.config.permittedInsecurePackages = [ "electron-25.9.0" "electron-27.3.11" @@ -27,19 +28,19 @@ }; }; - security.pam.services.swaylock = {}; + security.pam.services.swaylock = { }; hardware.usb-modeswitch.enable = true; systemd.services."ModemManager".enable = true; - systemd.services."ModemManager".wants = ["NetworkManager.service"]; - systemd.services."ModemManager".wantedBy = ["multi-user.target"]; + systemd.services."ModemManager".wants = [ "NetworkManager.service" ]; + systemd.services."ModemManager".wantedBy = [ "multi-user.target" ]; programs.wireshark.enable = true; boot.resumeDevice = "/dev/disk/by-uuid/4f9e8afa-f8d7-40bf-b3ea-17e8e8fbb694"; - boot.kernelParams = ["resume_offset=7380652"]; + boot.kernelParams = [ "resume_offset=7380652" ]; - boot.binfmt.emulatedSystems = ["aarch64-linux"]; + boot.binfmt.emulatedSystems = [ "aarch64-linux" ]; services.blueman.enable = true; diff --git a/hosts/denkbrett/hardware-configuration.nix b/hosts/denkbrett/hardware-configuration.nix index 6430beb..9528956 100644 --- a/hosts/denkbrett/hardware-configuration.nix +++ b/hosts/denkbrett/hardware-configuration.nix @@ -7,35 +7,53 @@ pkgs, modulesPath, ... -}: { +}: +{ imports = [ (modulesPath + "/installer/scan/not-detected.nix") ]; - boot.initrd.availableKernelModules = ["xhci_pci" "nvme" "usb_storage" "sd_mod" "rtsx_pci_sdmmc"]; - boot.initrd.kernelModules = ["i915"]; - boot.kernelModules = ["kvm-intel"]; - boot.extraModulePackages = []; + boot.initrd.availableKernelModules = [ + "xhci_pci" + "nvme" + "usb_storage" + "sd_mod" + "rtsx_pci_sdmmc" + ]; + boot.initrd.kernelModules = [ "i915" ]; + boot.kernelModules = [ "kvm-intel" ]; + boot.extraModulePackages = [ ]; fileSystems."/" = { device = "/dev/disk/by-uuid/4f9e8afa-f8d7-40bf-b3ea-17e8e8fbb694"; fsType = "btrfs"; - options = ["subvol=@" "compress=zstd:3" "noatime"]; + options = [ + "subvol=@" + "compress=zstd:3" + "noatime" + ]; }; fileSystems."/home" = { device = "/dev/disk/by-uuid/4f9e8afa-f8d7-40bf-b3ea-17e8e8fbb694"; fsType = "btrfs"; - options = ["subvol=@home" "compress=zstd:3"]; + options = [ + "subvol=@home" + "compress=zstd:3" + ]; }; fileSystems."/swap" = { device = "/dev/disk/by-uuid/4f9e8afa-f8d7-40bf-b3ea-17e8e8fbb694"; fsType = "btrfs"; - options = ["subvol=@/@swap" "noatime"]; + options = [ + "subvol=@/@swap" + "noatime" + ]; }; - boot.initrd.luks.devices."luks-9cd75cce-6829-4db8-8c5c-a9fb9ec3e122".device = "/dev/disk/by-uuid/9cd75cce-6829-4db8-8c5c-a9fb9ec3e122"; + boot.initrd.luks.devices."luks-9cd75cce-6829-4db8-8c5c-a9fb9ec3e122".device = + "/dev/disk/by-uuid/9cd75cce-6829-4db8-8c5c-a9fb9ec3e122"; fileSystems."/boot" = { device = "/dev/disk/by-uuid/C6CA-5DE8"; diff --git a/hosts/denkbrett/modules/default.nix b/hosts/denkbrett/modules/default.nix index ffe8790..b278c2b 100644 --- a/hosts/denkbrett/modules/default.nix +++ b/hosts/denkbrett/modules/default.nix @@ -1,4 +1,5 @@ -{...}: { +{ ... }: +{ imports = [ ./input.nix ./graphics.nix diff --git a/hosts/denkbrett/modules/graphics.nix b/hosts/denkbrett/modules/graphics.nix index dae70fb..3666bc9 100644 --- a/hosts/denkbrett/modules/graphics.nix +++ b/hosts/denkbrett/modules/graphics.nix @@ -3,7 +3,8 @@ lib, config, ... -}: { +}: +{ environment.variables = { VDPAU_DRIVER = lib.mkIf config.hardware.graphics.enable (lib.mkDefault "va_gl"); }; diff --git a/hosts/denkbrett/modules/input.nix b/hosts/denkbrett/modules/input.nix index db9b4db..f4c9c0b 100644 --- a/hosts/denkbrett/modules/input.nix +++ b/hosts/denkbrett/modules/input.nix @@ -1,25 +1,34 @@ -{...}: { +{ ... }: +{ # key remapping - jade.input.remapping = let - default = { - swapKeys = [ - ["KEY_Y" "KEY_Z"] - ["KEY_LEFTALT" "KEY_LEFTMETA"] - ]; - dual_role = [ - { - input = "KEY_CAPSLOCK"; - hold = ["KEY_LEFTCTRL"]; - tap = ["KEY_ESC"]; - } - ]; + jade.input.remapping = + let + default = { + swapKeys = [ + [ + "KEY_Y" + "KEY_Z" + ] + [ + "KEY_LEFTALT" + "KEY_LEFTMETA" + ] + ]; + dual_role = [ + { + input = "KEY_CAPSLOCK"; + hold = [ "KEY_LEFTCTRL" ]; + tap = [ "KEY_ESC" ]; + } + ]; + }; + in + { + enable = true; + devices."AT Translated Set 2 keyboard" = default; + devices."Razer Razer Huntsman" = default; + devices."Razer Razer DeathAdder V2" = default; }; - in { - enable = true; - devices."AT Translated Set 2 keyboard" = default; - devices."Razer Razer Huntsman" = default; - devices."Razer Razer DeathAdder V2" = default; - }; hardware.trackpoint = { enable = true; diff --git a/hosts/monosodium-glutamate-g/configuration.nix b/hosts/monosodium-glutamate-g/configuration.nix index de708f8..9b27e5c 100644 --- a/hosts/monosodium-glutamate-g/configuration.nix +++ b/hosts/monosodium-glutamate-g/configuration.nix @@ -5,7 +5,8 @@ pkgs, pkgs-stable, ... -}: { +}: +{ imports = [ ./hardware-configuration.nix ../../common.nix @@ -35,7 +36,7 @@ kernelPackages = pkgs.linuxPackages_zen; - binfmt.emulatedSystems = ["aarch64-linux"]; + binfmt.emulatedSystems = [ "aarch64-linux" ]; }; networking.hostName = "monosodium-glutamate-g"; @@ -79,7 +80,7 @@ # networking.firewall.allowedTCPPorts = [ 4713 ]; systemd.services."NetworkManager-wait-online".enable = false; - swapDevices = [{device = "/swap/swapfile";}]; + swapDevices = [ { device = "/swap/swapfile"; } ]; system.stateVersion = "24.05"; # Did you read the comment? } diff --git a/hosts/monosodium-glutamate-g/hardware-configuration.nix b/hosts/monosodium-glutamate-g/hardware-configuration.nix index c414f70..c328c42 100644 --- a/hosts/monosodium-glutamate-g/hardware-configuration.nix +++ b/hosts/monosodium-glutamate-g/hardware-configuration.nix @@ -7,37 +7,49 @@ pkgs, modulesPath, ... -}: { +}: +{ imports = [ (modulesPath + "/installer/scan/not-detected.nix") ]; - boot.initrd.availableKernelModules = ["nvme" "xhci_pci" "ahci" "uas" "usbhid" "sd_mod"]; - boot.initrd.kernelModules = []; - boot.kernelModules = ["kvm-amd"]; - boot.extraModulePackages = []; + boot.initrd.availableKernelModules = [ + "nvme" + "xhci_pci" + "ahci" + "uas" + "usbhid" + "sd_mod" + ]; + boot.initrd.kernelModules = [ ]; + boot.kernelModules = [ "kvm-amd" ]; + boot.extraModulePackages = [ ]; fileSystems."/" = { device = "/dev/disk/by-uuid/efb8f256-5b14-4b52-a2d9-ae4b91ecb711"; fsType = "btrfs"; - options = ["subvol=@"]; + options = [ "subvol=@" ]; }; - boot.initrd.luks.devices."luks-919f9b8b-2804-447a-97e0-f7f515d0be56".device = "/dev/disk/by-uuid/919f9b8b-2804-447a-97e0-f7f515d0be56"; + boot.initrd.luks.devices."luks-919f9b8b-2804-447a-97e0-f7f515d0be56".device = + "/dev/disk/by-uuid/919f9b8b-2804-447a-97e0-f7f515d0be56"; fileSystems."/boot" = { device = "/dev/disk/by-uuid/3FAD-A6B4"; fsType = "vfat"; - options = ["fmask=0077" "dmask=0077"]; + options = [ + "fmask=0077" + "dmask=0077" + ]; }; fileSystems."/swap" = { device = "/dev/disk/by-uuid/efb8f256-5b14-4b52-a2d9-ae4b91ecb711"; fsType = "btrfs"; - options = ["subvol=swap"]; + options = [ "subvol=swap" ]; }; - swapDevices = []; + 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 diff --git a/hosts/monosodium-glutamate-g/modules/default.nix b/hosts/monosodium-glutamate-g/modules/default.nix index fb1c643..34ffd52 100644 --- a/hosts/monosodium-glutamate-g/modules/default.nix +++ b/hosts/monosodium-glutamate-g/modules/default.nix @@ -1,4 +1,5 @@ -{...}: { +{ ... }: +{ imports = [ ./graphics.nix ]; diff --git a/hosts/monosodium-glutamate-g/modules/graphics.nix b/hosts/monosodium-glutamate-g/modules/graphics.nix index baa608b..f4b1efa 100644 --- a/hosts/monosodium-glutamate-g/modules/graphics.nix +++ b/hosts/monosodium-glutamate-g/modules/graphics.nix @@ -1,4 +1,5 @@ -{pkgs, ...}: { +{ pkgs, ... }: +{ environment.systemPackages = [ pkgs.nvtopPackages.amd pkgs.radeontop diff --git a/modules/default.nix b/modules/default.nix index cd4c0e8..1bf5670 100644 --- a/modules/default.nix +++ b/modules/default.nix @@ -1,4 +1,5 @@ -{...}: { +{ ... }: +{ imports = [ ./shell ./desktop diff --git a/modules/desktop-legacy/default.nix b/modules/desktop-legacy/default.nix index 7a2f692..7ddb6ef 100644 --- a/modules/desktop-legacy/default.nix +++ b/modules/desktop-legacy/default.nix @@ -4,7 +4,8 @@ pkgs, ... }: -with lib; { +with lib; +{ imports = [ ./gaming.nix ./syncthing.nix @@ -28,25 +29,27 @@ with lib; { notifications.test = true; }; - home-manager.users.jade = {pkgs, ...}: { - programs.ssh = { - controlMaster = "yes"; + home-manager.users.jade = + { pkgs, ... }: + { + programs.ssh = { + controlMaster = "yes"; + }; + home.packages = with pkgs; [ + just + bacon + + magic-wormhole-rs + + # filemanager + xfce.thunar + xfce.tumbler + xfce.thunar-archive-plugin + file-roller + + # from environment.systemPackages cleanup + virt-manager + ddccontrol-db + ]; }; - home.packages = with pkgs; [ - just - bacon - - magic-wormhole-rs - - # filemanager - xfce.thunar - xfce.tumbler - xfce.thunar-archive-plugin - file-roller - - # from environment.systemPackages cleanup - virt-manager - ddccontrol-db - ]; - }; } diff --git a/modules/desktop-legacy/gaming.nix b/modules/desktop-legacy/gaming.nix index 8e6b7bc..e8b0df4 100644 --- a/modules/desktop-legacy/gaming.nix +++ b/modules/desktop-legacy/gaming.nix @@ -2,16 +2,20 @@ config, lib, ... -}: let +}: +let cfg = config.jade.desktop.gaming; in - with lib; { - options.jade.desktop.gaming = { - enable = mkEnableOption "Enable gaming stuff"; - }; - config = mkIf cfg.enable { - programs.steam.enable = true; - home-manager.users.jade = {pkgs, ...}: { +with lib; +{ + options.jade.desktop.gaming = { + enable = mkEnableOption "Enable gaming stuff"; + }; + config = mkIf cfg.enable { + programs.steam.enable = true; + home-manager.users.jade = + { pkgs, ... }: + { home.packages = with pkgs; [ lutris prismlauncher @@ -20,5 +24,5 @@ in vkd3d-proton ]; }; - }; - } + }; +} diff --git a/modules/desktop-legacy/kdeconnect.nix b/modules/desktop-legacy/kdeconnect.nix index 5133f5c..cd73159 100644 --- a/modules/desktop-legacy/kdeconnect.nix +++ b/modules/desktop-legacy/kdeconnect.nix @@ -3,20 +3,24 @@ lib, pkgs, ... -}: let +}: +let cfg = config.jade.desktop.kdeconnect; in - with lib; { - options.jade.desktop.kdeconnect = { - enable = mkEnableOption "Enable KDE connect"; - }; - config = mkIf cfg.enable { - programs.kdeconnect.enable = true; - home-manager.users.jade = {pkgs, ...}: { +with lib; +{ + options.jade.desktop.kdeconnect = { + enable = mkEnableOption "Enable KDE connect"; + }; + config = mkIf cfg.enable { + programs.kdeconnect.enable = true; + home-manager.users.jade = + { pkgs, ... }: + { services.kdeconnect = { enable = true; indicator = true; }; }; - }; - } + }; +} diff --git a/modules/desktop-legacy/social.nix b/modules/desktop-legacy/social.nix index dca396b..bd86033 100644 --- a/modules/desktop-legacy/social.nix +++ b/modules/desktop-legacy/social.nix @@ -3,19 +3,23 @@ lib, pkgs, ... -}: let +}: +let cfg = config.jade.desktop.social; in - with lib; { - options.jade.desktop.social = { - enable = mkEnableOption "Enable social apps"; - }; - config = mkIf cfg.enable { - home-manager.users.jade = { +with lib; +{ + options.jade.desktop.social = { + enable = mkEnableOption "Enable social apps"; + }; + config = mkIf cfg.enable { + home-manager.users.jade = + { pkgs, pkgs-stable, ... - }: { + }: + { programs.nixcord = { enable = true; vesktop = { @@ -35,11 +39,11 @@ in iamb ]; }; - programs.evolution = { - enable = true; - plugins = [pkgs.evolution-ews]; - }; - services.gnome.evolution-data-server.enable = true; - services.gnome.evolution-data-server.plugins = []; + programs.evolution = { + enable = true; + plugins = [ pkgs.evolution-ews ]; }; - } + services.gnome.evolution-data-server.enable = true; + services.gnome.evolution-data-server.plugins = [ ]; + }; +} diff --git a/modules/desktop-legacy/syncthing.nix b/modules/desktop-legacy/syncthing.nix index f44e40c..d114ce4 100644 --- a/modules/desktop-legacy/syncthing.nix +++ b/modules/desktop-legacy/syncthing.nix @@ -3,19 +3,21 @@ lib, pkgs, ... -}: let +}: +let cfg = config.jade.desktop.syncthing; in - with lib; { - options.jade.desktop.syncthing = { - enable = mkEnableOption "Enable syncing via syncthing"; +with lib; +{ + options.jade.desktop.syncthing = { + enable = mkEnableOption "Enable syncing via syncthing"; + }; + config = mkIf cfg.enable { + services.syncthing = rec { + enable = true; + user = "jade"; + dataDir = "/home/${user}/Documents"; + configDir = "/home/${user}/Documents/.config/syncthing"; }; - config = mkIf cfg.enable { - services.syncthing = rec { - enable = true; - user = "jade"; - dataDir = "/home/${user}/Documents"; - configDir = "/home/${user}/Documents/.config/syncthing"; - }; - }; - } + }; +} diff --git a/modules/desktop/audio.nix b/modules/desktop/audio.nix index c38403d..fdfb747 100644 --- a/modules/desktop/audio.nix +++ b/modules/desktop/audio.nix @@ -1,4 +1,5 @@ -{pkgs, ...}: { +{ pkgs, ... }: +{ programs = { noisetorch.enable = true; }; diff --git a/modules/desktop/default.nix b/modules/desktop/default.nix index ba82753..a5d5279 100644 --- a/modules/desktop/default.nix +++ b/modules/desktop/default.nix @@ -1,4 +1,5 @@ -{...}: { +{ ... }: +{ imports = [ ./audio.nix ./home diff --git a/modules/desktop/dm.nix b/modules/desktop/dm.nix index e37fc8e..f4f3470 100644 --- a/modules/desktop/dm.nix +++ b/modules/desktop/dm.nix @@ -3,31 +3,33 @@ config, lib, ... -}: let +}: +let cfg = config.jade.desktop.dm; in - with lib; { - options.jade.desktop.dm.autoLogin = { - enable = mkEnableOption "Enable Autologin"; - delay = mkOption { - type = types.int; - default = 0; +with lib; +{ + options.jade.desktop.dm.autoLogin = { + enable = mkEnableOption "Enable Autologin"; + delay = mkOption { + type = types.int; + default = 0; + }; + }; + config.services = { + displayManager = { + autoLogin = { + enable = cfg.autoLogin.enable; + user = "jade"; + }; + defaultSession = "niri"; + }; + xserver.displayManager.gdm = { + enable = true; + banner = "Meow :3"; + autoLogin = { + delay = cfg.autoLogin.delay; }; }; - config.services = { - displayManager = { - autoLogin = { - enable = cfg.autoLogin.enable; - user = "jade"; - }; - defaultSession = "niri"; - }; - xserver.displayManager.gdm = { - enable = true; - banner = "Meow :3"; - autoLogin = { - delay = cfg.autoLogin.delay; - }; - }; - }; - } + }; +} diff --git a/modules/desktop/home/browser.nix b/modules/desktop/home/browser.nix index afc8090..0e6934e 100644 --- a/modules/desktop/home/browser.nix +++ b/modules/desktop/home/browser.nix @@ -1,4 +1,5 @@ -{pkgs, ...}: { +{ pkgs, ... }: +{ home.file = { ".tridactylrc" = { text = '' @@ -16,23 +17,25 @@ }; policies = { DefaultDownloadDirectory = "\${home}/Downloads"; - Extensions.Install = builtins.map (name: "https://addons.mozilla.org/firefox/downloads/latest/${name}") [ - "ublock-origin" - "tridactyl-vim" - "privacy-badger17" - "gruvbox-dark-theme" - "torproject-snowflake" - "bitwarden-password-manager" - "terms-of-service-didnt-read" - "shinigami-eyes" - "darkreader" - "sponsorblock" - "youtube-mrbeastify" - "return-youtube-dislikes" - "multi-account-containers" - "tabby-cat-friend" - "indie-wiki-buddy" - ]; + Extensions.Install = + builtins.map (name: "https://addons.mozilla.org/firefox/downloads/latest/${name}") + [ + "ublock-origin" + "tridactyl-vim" + "privacy-badger17" + "gruvbox-dark-theme" + "torproject-snowflake" + "bitwarden-password-manager" + "terms-of-service-didnt-read" + "shinigami-eyes" + "darkreader" + "sponsorblock" + "youtube-mrbeastify" + "return-youtube-dislikes" + "multi-account-containers" + "tabby-cat-friend" + "indie-wiki-buddy" + ]; Extensions.Uninstall = [ "google@search.mozilla.org" "bing@search.mozilla.org" @@ -63,7 +66,7 @@ } ]; icon = "${pkgs.nixos-icons}/share/icons/hicolor/scalable/apps/nix-snowflake.svg"; - definedAliases = ["pkgs"]; + definedAliases = [ "pkgs" ]; }; "Nix Options" = { urls = [ @@ -78,7 +81,7 @@ } ]; icon = "${pkgs.nixos-icons}/share/icons/hicolor/scalable/apps/nix-snowflake.svg"; - definedAliases = ["opts"]; + definedAliases = [ "opts" ]; }; "Home manager Options" = { urls = [ @@ -97,7 +100,7 @@ } ]; icon = "${pkgs.nixos-icons}/share/icons/hicolor/scalable/apps/nix-snowflake.svg"; - definedAliases = ["hm"]; + definedAliases = [ "hm" ]; }; "NixOS Wiki" = { urls = [ @@ -112,7 +115,7 @@ } ]; icon = "${pkgs.nixos-icons}/share/icons/hicolor/scalable/apps/nix-snowflake.svg"; - definedAliases = ["nxwk"]; + definedAliases = [ "nxwk" ]; }; "Noogle" = { urls = [ @@ -126,7 +129,7 @@ ]; } ]; - definedAliases = ["ngl"]; + definedAliases = [ "ngl" ]; }; "lib.rs" = { urls = [ @@ -141,7 +144,7 @@ } ]; icon = "https://lib.rs/favicon.png"; - definedAliases = ["libs"]; + definedAliases = [ "libs" ]; }; "rust docs" = { urls = [ @@ -156,7 +159,7 @@ } ]; icon = "https://docs.rs/-/static/favicon.ico"; - definedAliases = ["docs"]; + definedAliases = [ "docs" ]; }; "rust docs direct open" = { urls = [ @@ -164,7 +167,10 @@ template = "https://docs.rs/{searchTerms}"; } ]; - definedAliases = ["doc" "docd"]; + definedAliases = [ + "doc" + "docd" + ]; }; "rust std docs" = { urls = [ @@ -179,7 +185,7 @@ } ]; icon = "https://doc.rust-lang.org/favicon.ico"; - definedAliases = ["std"]; + definedAliases = [ "std" ]; }; "MDN" = { urls = [ diff --git a/modules/desktop/home/default.nix b/modules/desktop/home/default.nix index 690a915..92880a2 100644 --- a/modules/desktop/home/default.nix +++ b/modules/desktop/home/default.nix @@ -1,30 +1,33 @@ -{...}: { +{ ... }: +{ programs.niri.enable = true; - home-manager.users.jade = {pkgs, ...}: { - imports = [ - ./notifications.nix - ./terminal.nix - ./layaway.nix - ./swayidle.nix - ./browser.nix - ./eww - ./niri - ]; + home-manager.users.jade = + { pkgs, ... }: + { + imports = [ + ./notifications.nix + ./terminal.nix + ./layaway.nix + ./swayidle.nix + ./browser.nix + ./eww + ./niri + ]; - # temporary(tm) - programs.wofi.enable = true; - programs.swaylock.enable = true; - services.network-manager-applet.enable = true; - xsession.enable = true; + # temporary(tm) + programs.wofi.enable = true; + programs.swaylock.enable = true; + services.network-manager-applet.enable = true; + xsession.enable = true; - home.packages = [ - pkgs.fluent-reader - ]; + home.packages = [ + pkgs.fluent-reader + ]; - services.gpg-agent = { - enable = true; - enableNushellIntegration = true; - enableSshSupport = true; + services.gpg-agent = { + enable = true; + enableNushellIntegration = true; + enableSshSupport = true; + }; }; - }; } diff --git a/modules/desktop/home/eww/default.nix b/modules/desktop/home/eww/default.nix index 377c1f4..f7ce3c1 100644 --- a/modules/desktop/home/eww/default.nix +++ b/modules/desktop/home/eww/default.nix @@ -1,6 +1,7 @@ -{ ... }: { - programs.eww = { - enable = true; - configDir = ./configDir; - }; +{ ... }: +{ + programs.eww = { + enable = true; + configDir = ./configDir; + }; } diff --git a/modules/desktop/home/layaway.nix b/modules/desktop/home/layaway.nix index ba0354f..7687d3b 100644 --- a/modules/desktop/home/layaway.nix +++ b/modules/desktop/home/layaway.nix @@ -2,7 +2,8 @@ pkgs, lib, ... -}: let +}: +let # stolen: https://github.com/MultisampledNight/core/blob/678f176cb24f5dc4b5dc629cfd3e643487be01bb/system/packages/layaway/default.nix#L7-L25 layaway = pkgs.rustPlatform.buildRustPackage rec { pname = "layaway"; @@ -21,9 +22,10 @@ meta = with lib; { description = "Layout creation for Sway via a relative and human-readable DSL."; homepage = "https://github.com/MultisampledNight/layaway"; - maintainers = [maintainers.multisn8]; + maintainers = [ maintainers.multisn8 ]; }; }; -in { - home.packages = [layaway]; +in +{ + home.packages = [ layaway ]; } diff --git a/modules/desktop/home/niri/binds.nix b/modules/desktop/home/niri/binds.nix index df6fbc2..2bb27a5 100644 --- a/modules/desktop/home/niri/binds.nix +++ b/modules/desktop/home/niri/binds.nix @@ -1,50 +1,91 @@ -{pkgs, ...}: { +{ pkgs, ... }: +{ programs.niri.settings.binds = { # spawn terminal "Mod+Return".action.spawn = "kitty"; "Mod+Return".repeat = false; - "Mod+D".action.spawn = ["wofi" "-S" "drun" "--allow-images"]; + "Mod+D".action.spawn = [ + "wofi" + "-S" + "drun" + "--allow-images" + ]; "Mod+D".repeat = false; - "Mod+I".action.spawn = ["${pkgs.rofimoji}/bin/rofimoji" "--selector" "wofi" "-f" "alchemical_symbols" "anatolian_hieroglyphs" "emojis" "braille_patterns" "box_drawing" "chess_symbols" "emoticons" "geometric_shapes" "gothic" "greek_extended" "math" "mathematical_alphanumeric_symbols" "mathematical_operators" "miscellaneous_symbols" "miscellaneous_mathematical_symbols-a" "miscellaneous_mathematical_symbols-b" "miscellaneous_symbols_and_arrows" "miscellaneous_symbols_and_pictographs" "miscellaneous_technical" "modi" "modifier_tone_letters" "musical_symbols" "nerd_font" "number_forms" "shorthand_format_controls" "specials" "variation_selectors" "vertical_forms" "-a" "copy"]; + "Mod+I".action.spawn = [ + "${pkgs.rofimoji}/bin/rofimoji" + "--selector" + "wofi" + "-f" + "alchemical_symbols" + "anatolian_hieroglyphs" + "emojis" + "braille_patterns" + "box_drawing" + "chess_symbols" + "emoticons" + "geometric_shapes" + "gothic" + "greek_extended" + "math" + "mathematical_alphanumeric_symbols" + "mathematical_operators" + "miscellaneous_symbols" + "miscellaneous_mathematical_symbols-a" + "miscellaneous_mathematical_symbols-b" + "miscellaneous_symbols_and_arrows" + "miscellaneous_symbols_and_pictographs" + "miscellaneous_technical" + "modi" + "modifier_tone_letters" + "musical_symbols" + "nerd_font" + "number_forms" + "shorthand_format_controls" + "specials" + "variation_selectors" + "vertical_forms" + "-a" + "copy" + ]; - "Mod+Shift+E".action.quit = []; - "Mod+Shift+Q".action.close-window = []; - "Mod+Shift+P".action.power-off-monitors = []; + "Mod+Shift+E".action.quit = [ ]; + "Mod+Shift+Q".action.close-window = [ ]; + "Mod+Shift+P".action.power-off-monitors = [ ]; - "Mod+Shift+Ctrl+Slash".action.toggle-keyboard-shortcuts-inhibit = []; + "Mod+Shift+Ctrl+Slash".action.toggle-keyboard-shortcuts-inhibit = [ ]; "Mod+Shift+Ctrl+Slash".allow-inhibiting = false; - "Mod+Shift+Slash".action.show-hotkey-overlay = []; + "Mod+Shift+Slash".action.show-hotkey-overlay = [ ]; # window/columns controls - "Mod+H".action.focus-column-left = []; - "Mod+J".action.focus-window-down = []; - "Mod+K".action.focus-window-up = []; - "Mod+L".action.focus-column-right = []; - "Mod+Ctrl+H".action.move-column-left = []; - "Mod+Ctrl+J".action.move-window-down = []; - "Mod+Ctrl+K".action.move-window-up = []; - "Mod+Ctrl+L".action.move-column-right = []; - "Mod+R".action.switch-preset-column-width = []; + "Mod+H".action.focus-column-left = [ ]; + "Mod+J".action.focus-window-down = [ ]; + "Mod+K".action.focus-window-up = [ ]; + "Mod+L".action.focus-column-right = [ ]; + "Mod+Ctrl+H".action.move-column-left = [ ]; + "Mod+Ctrl+J".action.move-window-down = [ ]; + "Mod+Ctrl+K".action.move-window-up = [ ]; + "Mod+Ctrl+L".action.move-column-right = [ ]; + "Mod+R".action.switch-preset-column-width = [ ]; - "Mod+V".action.toggle-window-floating = []; - "Mod+Shift+V".action.switch-focus-between-floating-and-tiling = []; + "Mod+V".action.toggle-window-floating = [ ]; + "Mod+Shift+V".action.switch-focus-between-floating-and-tiling = [ ]; # monitor controls - "Mod+Shift+H".action.focus-monitor-left = []; - "Mod+Shift+J".action.focus-monitor-down = []; - "Mod+Shift+K".action.focus-monitor-up = []; - "Mod+Shift+L".action.focus-monitor-right = []; - "Mod+Shift+Ctrl+H".action.move-column-to-monitor-left = []; - "Mod+Shift+Ctrl+J".action.move-column-to-monitor-down = []; - "Mod+Shift+Ctrl+K".action.move-column-to-monitor-up = []; - "Mod+Shift+Ctrl+L".action.move-column-to-monitor-right = []; + "Mod+Shift+H".action.focus-monitor-left = [ ]; + "Mod+Shift+J".action.focus-monitor-down = [ ]; + "Mod+Shift+K".action.focus-monitor-up = [ ]; + "Mod+Shift+L".action.focus-monitor-right = [ ]; + "Mod+Shift+Ctrl+H".action.move-column-to-monitor-left = [ ]; + "Mod+Shift+Ctrl+J".action.move-column-to-monitor-down = [ ]; + "Mod+Shift+Ctrl+K".action.move-column-to-monitor-up = [ ]; + "Mod+Shift+Ctrl+L".action.move-column-to-monitor-right = [ ]; # workspace controls - "Mod+P".action.focus-workspace-up = []; - "Mod+N".action.focus-workspace-down = []; - "Mod+Ctrl+P".action.move-column-to-workspace-up = []; - "Mod+Ctrl+N".action.move-column-to-workspace-down = []; + "Mod+P".action.focus-workspace-up = [ ]; + "Mod+N".action.focus-workspace-down = [ ]; + "Mod+Ctrl+P".action.move-column-to-workspace-up = [ ]; + "Mod+Ctrl+N".action.move-column-to-workspace-down = [ ]; "Mod+1".action.focus-workspace = 1; "Mod+2".action.focus-workspace = 2; "Mod+3".action.focus-workspace = 3; @@ -65,26 +106,46 @@ "Mod+Ctrl+9".action.move-column-to-workspace = 9; # column editing stuffs - "Mod+BracketLeft".action.consume-or-expel-window-left = []; - "Mod+BracketRight".action.consume-or-expel-window-right = []; - "Mod+F".action.maximize-column = []; - "Mod+Shift+F".action.expand-column-to-available-width = []; - "Mod+Ctrl+F".action.fullscreen-window = []; - "Mod+C".action.center-column = []; + "Mod+BracketLeft".action.consume-or-expel-window-left = [ ]; + "Mod+BracketRight".action.consume-or-expel-window-right = [ ]; + "Mod+F".action.maximize-column = [ ]; + "Mod+Shift+F".action.expand-column-to-available-width = [ ]; + "Mod+Ctrl+F".action.fullscreen-window = [ ]; + "Mod+C".action.center-column = [ ]; "Mod+Minus".action.set-column-width = "-5%"; "Mod+Equal".action.set-column-width = "+5%"; "Mod+Shift+Minus".action.set-window-height = "-10%"; "Mod+Shift+Equal".action.set-window-height = "+10%"; - "Mod+W".action.toggle-column-tabbed-display = []; + "Mod+W".action.toggle-column-tabbed-display = [ ]; # media keys - "XF86AudioRaiseVolume".action.spawn = ["wpctl" "set-volume" "@DEFAULT_AUDIO_SINK@" "0.1+"]; - "XF86AudioLowerVolume".action.spawn = ["wpctl" "set-volume" "@DEFAULT_AUDIO_SINK@" "0.1-"]; - "XF86AudioMute".action.spawn = ["wpctl" "set-mute" "@DEFAULT_AUDIO_SINK@" "toggle"]; - "XF86AudioMicMute" .action.spawn = ["wpctl" "set-mute" "@DEFAULT_AUDIO_SOURCE@" "toggle"]; + "XF86AudioRaiseVolume".action.spawn = [ + "wpctl" + "set-volume" + "@DEFAULT_AUDIO_SINK@" + "0.1+" + ]; + "XF86AudioLowerVolume".action.spawn = [ + "wpctl" + "set-volume" + "@DEFAULT_AUDIO_SINK@" + "0.1-" + ]; + "XF86AudioMute".action.spawn = [ + "wpctl" + "set-mute" + "@DEFAULT_AUDIO_SINK@" + "toggle" + ]; + "XF86AudioMicMute".action.spawn = [ + "wpctl" + "set-mute" + "@DEFAULT_AUDIO_SOURCE@" + "toggle" + ]; "XF86AudioRaiseVolume".allow-when-locked = true; "XF86AudioLowerVolume".allow-when-locked = true; "XF86AudioMute".allow-when-locked = true; - "XF86AudioMicMute" .allow-when-locked = true; + "XF86AudioMicMute".allow-when-locked = true; }; } diff --git a/modules/desktop/home/niri/default.nix b/modules/desktop/home/niri/default.nix index 66736d0..779106f 100644 --- a/modules/desktop/home/niri/default.nix +++ b/modules/desktop/home/niri/default.nix @@ -1,4 +1,5 @@ -{pkgs, ...}: { +{ pkgs, ... }: +{ imports = [ ./xwayland-sat.nix ./screenshot.nix @@ -14,7 +15,14 @@ }; spawn-at-startup = [ - {command = ["eww" "open-many" "topBar" "bottomBar"];} + { + command = [ + "eww" + "open-many" + "topBar" + "bottomBar" + ]; + } { command = [ "${pkgs.swaybg}/bin/swaybg" diff --git a/modules/desktop/home/niri/input.nix b/modules/desktop/home/niri/input.nix index 25760b3..22a9eb2 100644 --- a/modules/desktop/home/niri/input.nix +++ b/modules/desktop/home/niri/input.nix @@ -1,4 +1,5 @@ -{...}: { +{ ... }: +{ programs.niri.settings.input = { keyboard = { xkb = { diff --git a/modules/desktop/home/niri/privacy.nix b/modules/desktop/home/niri/privacy.nix index b847972..6cd2016 100644 --- a/modules/desktop/home/niri/privacy.nix +++ b/modules/desktop/home/niri/privacy.nix @@ -1,9 +1,10 @@ -{...}: { +{ ... }: +{ programs.niri.settings = { layer-rules = [ { matches = [ - {namespace = "notifications";} + { namespace = "notifications"; } ]; block-out-from = "screen-capture"; } @@ -11,12 +12,14 @@ window-rules = [ { matches = [ - {app-id = "^signal|Element|org\.gnome\.Evolution$";} - {title = "^.*(Discord|Beispiel Screenshare block Bug|Bitwarden|Träwelling).*$";} + { app-id = "^signal|Element|org\.gnome\.Evolution$"; } + { title = "^.*(Discord|Beispiel Screenshare block Bug|Bitwarden|Träwelling).*$"; } ]; excludes = [ - {title = "^.*((Schrottkatze|Statistics|Leaderboard) - Träwelling|chaos.social|Nekoverse|catgirl.cloud).*$";} - {is-floating = true;} + { + title = "^.*((Schrottkatze|Statistics|Leaderboard) - Träwelling|chaos.social|Nekoverse|catgirl.cloud).*$"; + } + { is-floating = true; } ]; block-out-from = "screen-capture"; } diff --git a/modules/desktop/home/niri/quirks.nix b/modules/desktop/home/niri/quirks.nix index 37e6e8f..e43637f 100644 --- a/modules/desktop/home/niri/quirks.nix +++ b/modules/desktop/home/niri/quirks.nix @@ -1,5 +1,6 @@ -{pkgs, ...}: { - home.packages = [pkgs.gamescope]; +{ pkgs, ... }: +{ + home.packages = [ pkgs.gamescope ]; programs.niri.settings = { window-rules = [ { @@ -48,12 +49,16 @@ is-floating = true; } ]; - geometry-corner-radius = let val = 5.; in { - bottom-left = val; - bottom-right = val; - top-left = val; - top-right = val; - }; + geometry-corner-radius = + let + val = 5.; + in + { + bottom-left = val; + bottom-right = val; + top-left = val; + top-right = val; + }; } ]; diff --git a/modules/desktop/home/niri/screenshot.nix b/modules/desktop/home/niri/screenshot.nix index bba65b2..9719fcb 100644 --- a/modules/desktop/home/niri/screenshot.nix +++ b/modules/desktop/home/niri/screenshot.nix @@ -1,13 +1,14 @@ -{pkgs, ...}: { +{ pkgs, ... }: +{ programs.niri.settings = { screenshot-path = "~/Pictures/screenshots/%Y-%m-%dT%H:%M:%S.png"; binds = { - "Print".action.screenshot = []; - "Ctrl+Print".action.screenshot-screen = []; - "Shift+Print".action.screenshot-window = []; - "Mod+S".action.screenshot = []; - "Mod+Ctrl+S".action.screenshot-screen = []; - "Mod+Shift+S".action.screenshot-window = []; + "Print".action.screenshot = [ ]; + "Ctrl+Print".action.screenshot-screen = [ ]; + "Shift+Print".action.screenshot-window = [ ]; + "Mod+S".action.screenshot = [ ]; + "Mod+Ctrl+S".action.screenshot-screen = [ ]; + "Mod+Shift+S".action.screenshot-window = [ ]; }; }; } diff --git a/modules/desktop/home/niri/style.nix b/modules/desktop/home/niri/style.nix index c4dd1fa..2cee326 100644 --- a/modules/desktop/home/niri/style.nix +++ b/modules/desktop/home/niri/style.nix @@ -1,6 +1,7 @@ -{...}: { +{ ... }: +{ programs.niri.settings = { - prefer-no-csd = true; + prefer-no-csd = true; cursor = { theme = "phinger-cursors-dark"; @@ -38,35 +39,42 @@ inactive.color = "#3c3836"; gap = 2; width = 5; - corner-radius= 3; + corner-radius = 3; position = "left"; gaps-between-tabs = 0; }; }; - + window-rules = [ - { - matches = [{ - is-floating = true; - }]; - baba-is-float = true; - shadow = { - offset.y = 0; - offset.x = 0; - softness = 40; - color = "#bab9e5af"; - inactive-color = "#fa9d99af"; - enable = true; - }; - } - { - geometry-corner-radius = let val = 1.; in { - bottom-left = val; - bottom-right = val; - top-left = val; - top-right = val; + { + matches = [ + { + is-floating = true; + } + ]; + baba-is-float = true; + shadow = { + offset.y = 0; + offset.x = 0; + softness = 40; + color = "#bab9e5af"; + inactive-color = "#fa9d99af"; + enable = true; }; + } + { + geometry-corner-radius = + let + val = 1.; + in + { + bottom-left = val; + bottom-right = val; + top-left = val; + top-right = val; + }; clip-to-geometry = true; - }]; + } + ]; }; } diff --git a/modules/desktop/home/niri/xwayland-sat.nix b/modules/desktop/home/niri/xwayland-sat.nix index 4846b11..bae4d93 100644 --- a/modules/desktop/home/niri/xwayland-sat.nix +++ b/modules/desktop/home/niri/xwayland-sat.nix @@ -1,7 +1,8 @@ -{pkgs, ...}: { +{ pkgs, ... }: +{ programs.niri.settings = { spawn-at-startup = [ - {command = ["${pkgs.xwayland-satellite}/bin/xwayland-satellite"];} + { command = [ "${pkgs.xwayland-satellite}/bin/xwayland-satellite" ]; } ]; environment.DISPLAY = ":0"; }; diff --git a/modules/desktop/home/notifications.nix b/modules/desktop/home/notifications.nix index 37390e9..ebbd633 100644 --- a/modules/desktop/home/notifications.nix +++ b/modules/desktop/home/notifications.nix @@ -1,4 +1,5 @@ -{pkgs, ...}: { +{ pkgs, ... }: +{ home.packages = [ pkgs.libnotify ]; diff --git a/modules/desktop/home/swayidle.nix b/modules/desktop/home/swayidle.nix index d4c5b3d..427023e 100644 --- a/modules/desktop/home/swayidle.nix +++ b/modules/desktop/home/swayidle.nix @@ -1,4 +1,5 @@ -{pkgs, ...}: { +{ pkgs, ... }: +{ # unsure whether i still need swayidle, will keep it in and might remove after further testing services.swayidle = { diff --git a/modules/desktop/home/terminal.nix b/modules/desktop/home/terminal.nix index 6b14f2e..725a68e 100644 --- a/modules/desktop/home/terminal.nix +++ b/modules/desktop/home/terminal.nix @@ -1,4 +1,5 @@ -{...}: { +{ ... }: +{ programs.kitty = { enable = true; font.size = 12; diff --git a/modules/desktop/locale.nix b/modules/desktop/locale.nix index 9071f8d..10cafb8 100644 --- a/modules/desktop/locale.nix +++ b/modules/desktop/locale.nix @@ -1,4 +1,5 @@ -{...}: { +{ ... }: +{ time.timeZone = "Europe/Berlin"; i18n.extraLocaleSettings = { LC_ADDRESS = "de_DE.UTF-8"; diff --git a/modules/desktop/printing.nix b/modules/desktop/printing.nix index 3233279..c44ff0d 100644 --- a/modules/desktop/printing.nix +++ b/modules/desktop/printing.nix @@ -1,4 +1,5 @@ -{pkgs, ...}: { +{ pkgs, ... }: +{ services.printing = { enable = true; drivers = with pkgs; [ diff --git a/modules/desktop/themeing.nix b/modules/desktop/themeing.nix index 3cc2047..837e117 100644 --- a/modules/desktop/themeing.nix +++ b/modules/desktop/themeing.nix @@ -1,4 +1,5 @@ -{pkgs, ...}: { +{ pkgs, ... }: +{ stylix = { enable = true; polarity = "dark"; @@ -25,30 +26,32 @@ }; }; }; - home-manager.users.jade = {pkgs, ...}: { - stylix.targets = { - firefox = { - profileNames = ["jade"]; + home-manager.users.jade = + { pkgs, ... }: + { + stylix.targets = { + firefox = { + profileNames = [ "jade" ]; + }; + helix.enable = false; + btop.enable = false; + nushell.enable = false; + starship.enable = false; + kitty.enable = false; + dunst.enable = false; + wofi.enable = false; }; - helix.enable = false; - btop.enable = false; - nushell.enable = false; - starship.enable = false; - kitty.enable = false; - dunst.enable = false; - wofi.enable = false; - }; - gtk = { - enable = true; - cursorTheme = { - package = pkgs.phinger-cursors; - name = "phinger-cursors"; - size = 30; - }; - iconTheme = { - package = pkgs.gruvbox-dark-icons-gtk; - name = "gruvbox-dark-icons"; + gtk = { + enable = true; + cursorTheme = { + package = pkgs.phinger-cursors; + name = "phinger-cursors"; + size = 30; + }; + iconTheme = { + package = pkgs.gruvbox-dark-icons-gtk; + name = "gruvbox-dark-icons"; + }; }; }; - }; } diff --git a/modules/desktop/tlp.nix b/modules/desktop/tlp.nix index 88aa4d7..5372b2d 100644 --- a/modules/desktop/tlp.nix +++ b/modules/desktop/tlp.nix @@ -1,4 +1,5 @@ -{...}: { +{ ... }: +{ services.tlp = { enable = true; settings = { diff --git a/modules/hardware/default.nix b/modules/hardware/default.nix index a28d10f..c08c133 100644 --- a/modules/hardware/default.nix +++ b/modules/hardware/default.nix @@ -3,7 +3,8 @@ lib, pkgs, ... -}: { +}: +{ imports = [ ./spacenav.nix ./wacom.nix diff --git a/modules/hardware/hardware_key.nix b/modules/hardware/hardware_key.nix index 1f75106..278bf91 100644 --- a/modules/hardware/hardware_key.nix +++ b/modules/hardware/hardware_key.nix @@ -3,33 +3,35 @@ config, lib, ... -}: let +}: +let cfg = config.jade.hwKey; in - with lib; { - options.jade.hwKey = { - pamAuth.enable = mkEnableOption "Enable PAM authentication with hardware keys"; - }; - config = { - # nitrokey - services.udev.packages = [pkgs.nitrokey-udev-rules]; +with lib; +{ + options.jade.hwKey = { + pamAuth.enable = mkEnableOption "Enable PAM authentication with hardware keys"; + }; + config = { + # nitrokey + services.udev.packages = [ pkgs.nitrokey-udev-rules ]; - # smartcard daemon - services.pcscd.enable = true; + # smartcard daemon + services.pcscd.enable = true; - # authenticate using hw key - security.pam = { - services.jade.u2fAuth = cfg.pamAuth.enable; - u2f = { - enable = true; - control = "sufficient"; - settings = { - cue = true; - authFile = "/home/jade/.ssh/u2f_keys"; - }; + # authenticate using hw key + security.pam = { + services.jade.u2fAuth = cfg.pamAuth.enable; + u2f = { + enable = true; + control = "sufficient"; + settings = { + cue = true; + authFile = "/home/jade/.ssh/u2f_keys"; }; }; - - programs.i3lock.u2fSupport = true; }; - } + + programs.i3lock.u2fSupport = true; + }; +} diff --git a/modules/hardware/spacenav.nix b/modules/hardware/spacenav.nix index 5d2a12c..00b4cb8 100644 --- a/modules/hardware/spacenav.nix +++ b/modules/hardware/spacenav.nix @@ -1,10 +1,11 @@ -{pkgs, ...}: { +{ pkgs, ... }: +{ environment.systemPackages = with pkgs; [ spacenavd libspnav ]; systemd.services.spacenavd = { - wantedBy = ["graphical.target"]; + wantedBy = [ "graphical.target" ]; script = "${pkgs.spacenavd}/bin/spacenavd -d"; }; } diff --git a/modules/hardware/wacom.nix b/modules/hardware/wacom.nix index 104cc68..0234f30 100644 --- a/modules/hardware/wacom.nix +++ b/modules/hardware/wacom.nix @@ -1,10 +1,13 @@ -{...}: { +{ ... }: +{ services.xserver.wacom.enable = true; - home-manager.users.jade = {pkgs, ...}: { - home.packages = [ - # TODO: figure out if the previous enabled option depends on these anyway - pkgs.libwacom - pkgs.wacomtablet - ]; - }; + home-manager.users.jade = + { pkgs, ... }: + { + home.packages = [ + # TODO: figure out if the previous enabled option depends on these anyway + pkgs.libwacom + pkgs.wacomtablet + ]; + }; } diff --git a/modules/input/default.nix b/modules/input/default.nix index 62b0ec9..12ceb65 100644 --- a/modules/input/default.nix +++ b/modules/input/default.nix @@ -1,4 +1,5 @@ -{...}: { +{ ... }: +{ imports = [ ./evremap.nix ]; diff --git a/modules/input/evremap.nix b/modules/input/evremap.nix index 18d644e..1c37c7e 100644 --- a/modules/input/evremap.nix +++ b/modules/input/evremap.nix @@ -3,7 +3,8 @@ config, lib, ... -}: let +}: +let cfg = config.jade.input.remapping; evremap = pkgs.rustPlatform.buildRustPackage { pname = "evremap"; @@ -16,91 +17,117 @@ }; useFetchCargoVendor = true; cargoHash = "sha256-O1rJ48m8Q7kZABw/UNpmUT7FFBWQedo6CuV+NX9kDt8="; - nativeBuildInputs = [pkgs.pkg-config]; - buildInputs = [pkgs.libevdev]; + nativeBuildInputs = [ pkgs.pkg-config ]; + buildInputs = [ pkgs.libevdev ]; }; - toml = pkgs.formats.toml {}; + toml = pkgs.formats.toml { }; in - with lib; { - options.jade.input.remapping = { - enable = mkEnableOption "Enable evremap"; - devices = mkOption { - type = types.attrsOf (types.submodule ({name, ...}: { - options = { - device_name = mkOption { - type = types.str; - description = "The device name"; - default = name; +with lib; +{ + options.jade.input.remapping = { + enable = mkEnableOption "Enable evremap"; + devices = mkOption { + type = types.attrsOf ( + types.submodule ( + { name, ... }: + { + options = { + device_name = mkOption { + type = types.str; + description = "The device name"; + default = name; + }; + remap = mkOption { + type = types.listOf ( + types.submodule ( + { ... }: + { + options.input = mkOption { type = types.listOf types.str; }; + options.output = mkOption { type = types.listOf types.str; }; + } + ) + ); + default = [ ]; + }; + swapKeys = mkOption { + description = "Lists with two keys to be swapped on the keyboard layout."; + type = types.listOf ( + # verify that each key swapping list contains two elements + types.addCheck (types.listOf types.str) (v: builtins.length v == 2) + ); + default = [ ]; + }; + dual_role = mkOption { + type = types.listOf ( + types.submodule ( + { ... }: + { + options.input = mkOption { type = types.str; }; + options.hold = mkOption { type = types.listOf types.str; }; + options.tap = mkOption { type = types.listOf types.str; }; + } + ) + ); + default = [ ]; + }; }; - remap = mkOption { - type = types.listOf (types.submodule ({...}: { - options.input = mkOption {type = types.listOf types.str;}; - options.output = mkOption {type = types.listOf types.str;}; - })); - default = []; - }; - swapKeys = mkOption { - description = "Lists with two keys to be swapped on the keyboard layout."; - type = types.listOf ( - # verify that each key swapping list contains two elements - types.addCheck (types.listOf types.str) (v: builtins.length v == 2) - ); - default = []; - }; - dual_role = mkOption { - type = types.listOf (types.submodule ({...}: { - options.input = mkOption {type = types.str;}; - options.hold = mkOption {type = types.listOf types.str;}; - options.tap = mkOption {type = types.listOf types.str;}; - })); - default = []; - }; - }; - })); - }; + } + ) + ); }; - config = mkIf cfg.enable ( - with builtins; let - devs = map ({ + }; + config = mkIf cfg.enable ( + with builtins; + let + devs = map ( + { device_name, remap, swapKeys, dual_role, - }: { + }: + { inherit device_name dual_role; # expand swapKeys to normal remaps remap = concatLists [ remap - (lib.lists.flatten (map (keys: [ + (lib.lists.flatten ( + map (keys: [ { - input = [(head keys)]; - output = [(lib.lists.last keys)]; + input = [ (head keys) ]; + output = [ (lib.lists.last keys) ]; } { - input = [(lib.lists.last keys)]; - output = [(head keys)]; + input = [ (lib.lists.last keys) ]; + output = [ (head keys) ]; } - ]) - swapKeys)) + ]) swapKeys + )) ]; - }) (attrValues cfg.devices); - in { - # generate numbered systemd services for each device to be remapped - # https://github.com/wez/evremap/issues/17 - systemd.services = listToAttrs (genList (i: { + } + ) (attrValues cfg.devices); + in + { + # generate numbered systemd services for each device to be remapped + # https://github.com/wez/evremap/issues/17 + systemd.services = listToAttrs ( + genList (i: { name = "evremap${toString i}"; - value = let - cfgFile = toml.generate "remaps-${toString i}.toml" (elemAt devs i); - in { - wantedBy = ["multi-user.target"]; - serviceConfig.ExecStart = "-${evremap}/bin/evremap remap ${cfgFile}"; - unitConfig = { - Restart = "on-failure"; + value = + let + cfgFile = toml.generate "remaps-${toString i}.toml" (elemAt devs i); + in + { + wantedBy = [ "multi-user.target" ]; + serviceConfig.ExecStart = "-${evremap}/bin/evremap remap ${cfgFile}"; + unitConfig = { + Restart = "on-failure"; + }; }; - }; - }) (length devs)); - environment.systemPackages = [evremap]; - } - ); - } + }) (length devs) + ); + environment.systemPackages = [ evremap ]; + } + ); +} diff --git a/modules/media/default.nix b/modules/media/default.nix index c69abfc..3726cda 100644 --- a/modules/media/default.nix +++ b/modules/media/default.nix @@ -4,18 +4,22 @@ config, lib, ... -}: let +}: +let cfg = config.jade.desktop.media; in - with lib; { - imports = [ - ./obs.nix - ./fonts.nix - ]; - options.jade.desktop.media.videoEditing = mkEnableOption "Enable Video editing software"; - config = { - home-manager.users.jade = {pkgs, ...}: { - imports = [./typst.nix]; +with lib; +{ + imports = [ + ./obs.nix + ./fonts.nix + ]; + options.jade.desktop.media.videoEditing = mkEnableOption "Enable Video editing software"; + config = { + home-manager.users.jade = + { pkgs, ... }: + { + imports = [ ./typst.nix ]; home.packages = with pkgs; [ # creative software basics pastel @@ -52,5 +56,5 @@ in (mkIf cfg.videoEditing glaxnimate) ]; }; - }; - } + }; +} diff --git a/modules/media/fonts.nix b/modules/media/fonts.nix index 27a9253..2046198 100644 --- a/modules/media/fonts.nix +++ b/modules/media/fonts.nix @@ -1,4 +1,5 @@ -{pkgs, ...}: { +{ pkgs, ... }: +{ nixpkgs.config.packageOverrides = pkgs: { google-fonts = pkgs.google-fonts.overrideAttrs (oldAttrs: { src = pkgs.fetchFromGitHub { @@ -34,15 +35,17 @@ fontDir.enable = true; }; - home-manager.users.jade = {...}: { - fonts.fontconfig = { - enable = true; - defaultFonts = { - emoji = []; - monospace = []; - sansSerif = ["Atkinson Hyperlegible"]; - serif = []; + home-manager.users.jade = + { ... }: + { + fonts.fontconfig = { + enable = true; + defaultFonts = { + emoji = [ ]; + monospace = [ ]; + sansSerif = [ "Atkinson Hyperlegible" ]; + serif = [ ]; + }; }; }; - }; } diff --git a/modules/media/obs.nix b/modules/media/obs.nix index 978a8d3..e04f440 100644 --- a/modules/media/obs.nix +++ b/modules/media/obs.nix @@ -3,34 +3,36 @@ lib, pkgs, ... -}: let +}: +let cfg = config.jade.desktop.media.obs; in - with lib; { - options.jade.desktop.media.obs = mkEnableOption "Enable OBS"; +with lib; +{ + options.jade.desktop.media.obs = mkEnableOption "Enable OBS"; - config = mkIf cfg { - programs.obs-studio.enableVirtualCamera = true; - # OBS stuffs - environment.systemPackages = [ - (pkgs.wrapOBS { - plugins = with pkgs.obs-studio-plugins; [ - wlrobs - obs-backgroundremoval - obs-pipewire-audio-capture - waveform - obs-3d-effect - ]; - }) - ]; - - boot = { - extraModulePackages = with config.boot.kernelPackages; [ - v4l2loopback + config = mkIf cfg { + programs.obs-studio.enableVirtualCamera = true; + # OBS stuffs + environment.systemPackages = [ + (pkgs.wrapOBS { + plugins = with pkgs.obs-studio-plugins; [ + wlrobs + obs-backgroundremoval + obs-pipewire-audio-capture + waveform + obs-3d-effect ]; - extraModprobeConfig = '' - options v4l2loopback devices=1 video_nr=1 card_label="OBS Cam" exclusive_caps=1 - ''; - }; + }) + ]; + + boot = { + extraModulePackages = with config.boot.kernelPackages; [ + v4l2loopback + ]; + extraModprobeConfig = '' + options v4l2loopback devices=1 video_nr=1 card_label="OBS Cam" exclusive_caps=1 + ''; }; - } + }; +} diff --git a/modules/media/typst.nix b/modules/media/typst.nix index 76c2c24..59c6638 100644 --- a/modules/media/typst.nix +++ b/modules/media/typst.nix @@ -2,14 +2,15 @@ pkgs, typst-within, ... -}: let +}: +let packages = { typst-configs = pkgs.fetchFromGitea { domain = "forge.katzen.cafe"; owner = "schrottkatze"; repo = "typst-configs"; - rev = "9a5bd5256ace2a56de51b89793f191b4eecce1dc"; #:REV:- rev = "%REV%";-:# - sha256 = "sha256-E+5fJULNxM0XcbimuENqIJC24ZwPRMSHnG97ncBtEGw="; #:SHA:- sha256 = "%SHA%";-:# + rev = "9a5bd5256ace2a56de51b89793f191b4eecce1dc"; # :REV:- rev = "%REV%";-:# + sha256 = "sha256-E+5fJULNxM0XcbimuENqIJC24ZwPRMSHnG97ncBtEGw="; # :SHA:- sha256 = "%SHA%";-:# }; flow = pkgs.fetchFromGitHub { owner = "MultisampledNight"; @@ -19,7 +20,8 @@ }; }; mkTypstPath = name: ".local/share/typst/packages/local/${name}/0.1.0"; -in { +in +{ home.file = { typst-configs = { target = mkTypstPath "typst-configs"; diff --git a/modules/net/default.nix b/modules/net/default.nix index fba3d47..df22509 100644 --- a/modules/net/default.nix +++ b/modules/net/default.nix @@ -1,4 +1,5 @@ -{...}: { +{ ... }: +{ imports = [ ./firewall.nix ./hosts.nix @@ -10,11 +11,13 @@ systemd.services."NetworkManager-wait-online".enable = false; services.mullvad-vpn.enable = true; - home-manager.users.jade = {pkgs, ...}: { - home.packages = with pkgs; [ - networkmanagerapplet - mullvad-vpn - macchanger - ]; - }; + home-manager.users.jade = + { pkgs, ... }: + { + home.packages = with pkgs; [ + networkmanagerapplet + mullvad-vpn + macchanger + ]; + }; } diff --git a/modules/net/dispatchers/default.nix b/modules/net/dispatchers/default.nix index 656d9cd..73270a7 100644 --- a/modules/net/dispatchers/default.nix +++ b/modules/net/dispatchers/default.nix @@ -1,10 +1,13 @@ -{pkgs, ...}: let - addNuShebang = path: +{ pkgs, ... }: +let + addNuShebang = + path: builtins.concatStringsSep "\n\n" [ "#!${pkgs.nushell}/bin/nu" (builtins.readFile path) ]; -in { +in +{ networking.networkmanager.dispatcherScripts = [ { type = "basic"; @@ -12,16 +15,15 @@ in { } ]; - environment.etc = with builtins; ( - listToAttrs ( + environment.etc = + with builtins; + (listToAttrs ( map (v: { name = "networkhooks/${v}"; value = { text = addNuShebang ./hooks/${v}; mode = "0755"; }; - }) - (attrNames (readDir ./hooks)) - ) - ); + }) (attrNames (readDir ./hooks)) + )); } diff --git a/modules/net/eduroam.nix b/modules/net/eduroam.nix index d6bc3db..f6e9835 100644 --- a/modules/net/eduroam.nix +++ b/modules/net/eduroam.nix @@ -1,13 +1,19 @@ # Thanks @ kloenk (@kloenk@catcatnya.com) for making this for me at MRMCD 2024 :33 -{pkgs-stable, ...}: let +{ pkgs-stable, ... }: +let caDir = "/var/lib/easyroam"; uuid = "821ad781-76a3-447f-a2e8-c7f18a1df3bc"; -in { +in +{ systemd.services.easyroam = { - requires = ["NetworkManager.service"]; - after = ["NetworkManager.service"]; - requiredBy = ["network-online.target"]; - path = with pkgs-stable; [networkmanager openssl gnused]; + requires = [ "NetworkManager.service" ]; + after = [ "NetworkManager.service" ]; + requiredBy = [ "network-online.target" ]; + path = with pkgs-stable; [ + networkmanager + openssl + gnused + ]; script = '' set -x openssl pkcs12 -password pass: -in ${caDir}/my_easyroam_cert.p12 -legacy -nokeys | openssl x509 > ${caDir}/easyroam_client_cert.pem @@ -44,7 +50,7 @@ in { addr-gen-mode = "default"; method = "auto"; }; - proxy = {}; + proxy = { }; wifi = { mode = "infrastructure"; ssid = "eduroam"; diff --git a/modules/net/firewall.nix b/modules/net/firewall.nix index e10dec0..48be5be 100644 --- a/modules/net/firewall.nix +++ b/modules/net/firewall.nix @@ -3,7 +3,8 @@ lib, pkgs, ... -}: { +}: +{ config = { networking = { firewall = { diff --git a/modules/net/hosts.nix b/modules/net/hosts.nix index 1bfb877..3a21884 100644 --- a/modules/net/hosts.nix +++ b/modules/net/hosts.nix @@ -1,4 +1,5 @@ -{...}: { +{ ... }: +{ networking.hosts = { "127.0.0.1" = [ "www.tiktok.com" diff --git a/modules/nix.nix b/modules/nix.nix index 42160d2..4878fa6 100644 --- a/modules/nix.nix +++ b/modules/nix.nix @@ -2,7 +2,8 @@ rs-programs, niri, ... -}: { +}: +{ nix = { extraOptions = '' experimental-features = nix-command flakes @@ -24,6 +25,9 @@ "nodejs-16.20.0" ]; }; - overlays = [rs-programs niri.overlays.niri]; + overlays = [ + rs-programs + niri.overlays.niri + ]; }; } diff --git a/modules/shell/btop.nix b/modules/shell/btop.nix index 4e5f97d..ee5df43 100644 --- a/modules/shell/btop.nix +++ b/modules/shell/btop.nix @@ -1,11 +1,14 @@ -{...}: { - home-manager.users.jade = {pkgs, ...}: { - programs.btop = { - enable = true; - settings = { - color_theme = "gruvbox_dark"; - vim_keys = true; +{ ... }: +{ + home-manager.users.jade = + { pkgs, ... }: + { + programs.btop = { + enable = true; + settings = { + color_theme = "gruvbox_dark"; + vim_keys = true; + }; }; }; - }; } diff --git a/modules/shell/default.nix b/modules/shell/default.nix index 180d1ab..49f20b4 100644 --- a/modules/shell/default.nix +++ b/modules/shell/default.nix @@ -1,4 +1,5 @@ -{pkgs, ...}: { +{ pkgs, ... }: +{ imports = [ ./helix.nix ./nu.nix @@ -11,10 +12,12 @@ ]; programs.mosh.enable = true; programs.bat.enable = true; - home-manager.users.jade = {...}: { - programs.carapace.enable = true; - programs.direnv.enable = true; - }; + home-manager.users.jade = + { ... }: + { + programs.carapace.enable = true; + programs.direnv.enable = true; + }; users.defaultUserShell = pkgs.nushell; } diff --git a/modules/shell/git.nix b/modules/shell/git.nix index f597c76..2732633 100644 --- a/modules/shell/git.nix +++ b/modules/shell/git.nix @@ -3,54 +3,57 @@ lib, pkgs, ... -}: { - home-manager.users.jade = { - pkgs, - config, - ... - }: { - programs.git = { - enable = true; - userName = "Schrottkatze"; - userEmail = "git@schrottkatze.de"; - aliases = { - a = "add"; - c = "commit"; - ca = "commit --all"; - p = "push"; - pl = "pull"; - s = "status"; - }; - signing = { - format = "ssh"; - key = "${pkgs.writeText "blue_nk3.pub" "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAILg7hhAKxIAbokHHcIj9HBgbkgoKGCG2R+gx7HZKL+iz cardno:000F_93C6A612"}"; - signByDefault = true; - }; - }; - programs.jujutsu = { - enable = true; - settings = { - user = { - name = config.programs.git.userName; - email = config.programs.git.userEmail; +}: +{ + home-manager.users.jade = + { + pkgs, + config, + ... + }: + { + programs.git = { + enable = true; + userName = "Schrottkatze"; + userEmail = "git@schrottkatze.de"; + aliases = { + a = "add"; + c = "commit"; + ca = "commit --all"; + p = "push"; + pl = "pull"; + s = "status"; + }; + signing = { + format = "ssh"; + key = "${pkgs.writeText "blue_nk3.pub" "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAILg7hhAKxIAbokHHcIj9HBgbkgoKGCG2R+gx7HZKL+iz cardno:000F_93C6A612"}"; + signByDefault = true; }; }; - }; - programs.gitui = { - enable = true; - keyConfig = '' - ( - move_left: Some(( code: Char('h'), modifiers: "")), - move_right: Some(( code: Char('l'), modifiers: "")), - move_up: Some(( code: Char('k'), modifiers: "")), - move_down: Some(( code: Char('j'), modifiers: "")), + programs.jujutsu = { + enable = true; + settings = { + user = { + name = config.programs.git.userName; + email = config.programs.git.userEmail; + }; + }; + }; + programs.gitui = { + enable = true; + keyConfig = '' + ( + move_left: Some(( code: Char('h'), modifiers: "")), + move_right: Some(( code: Char('l'), modifiers: "")), + move_up: Some(( code: Char('k'), modifiers: "")), + move_down: Some(( code: Char('j'), modifiers: "")), - stash_open: Some(( code: Char('l'), modifiers: "")), - open_help: Some(( code: F(1), modifiers: "")), + stash_open: Some(( code: Char('l'), modifiers: "")), + open_help: Some(( code: F(1), modifiers: "")), - status_reset_item: Some(( code: Char('U'), modifiers: "SHIFT")), - ) - ''; + status_reset_item: Some(( code: Char('U'), modifiers: "SHIFT")), + ) + ''; + }; }; - }; } diff --git a/modules/shell/helix.nix b/modules/shell/helix.nix index adfda34..dc04045 100644 --- a/modules/shell/helix.nix +++ b/modules/shell/helix.nix @@ -1,213 +1,225 @@ -{config, ...}: { - home-manager.users.jade = { - pkgs, - pkgs-stable, - ... - }: { - home = { - sessionVariables.EDITOR = "hx"; - packages = [ - pkgs.wl-clipboard-rs - pkgs.nil - pkgs.vscode-langservers-extracted - pkgs.nodePackages.typescript-language-server - pkgs.emmet-language-server - pkgs.jdt-language-server - pkgs.tinymist - pkgs.typstyle - ]; - }; - programs.helix = { - enable = true; - defaultEditor = true; - settings = { - theme = "gruvbox_dark_hard"; - editor = { - line-number = "relative"; - bufferline = "multiple"; - color-modes = true; - cursorline = true; - auto-save = { - after-delay.enable = true; - after-delay.timeout = 10000; - }; - auto-format = true; - end-of-line-diagnostics = "hint"; - # slightly optimized based on my layout - jump-label-alphabet = "jfkdhaslgwenuiopbcmyzqrtvx"; - clipboard-provider = "wayland"; - inline-diagnostics = { - cursor-line = "hint"; - }; - lsp = { - display-messages = true; - display-inlay-hints = true; - }; - popup-border = "popup"; - shell = ["nu" "-c"]; - statusline.left = [ - "mode" - "spinner" - "spacer" - "version-control" - "file-name" - "diagnostics" - "read-only-indicator" - "file-modification-indicator" - "spacer" - ]; - - statusline.right = [ - "workspace-diagnostics" - "register" - "position" - "selections" - "file-encoding" - "file-type" - ]; - idle-timeout = 50; - completion-timeout = 100; - indent-guides = { - render = true; - character = "│"; - skip-levels = 3; - }; - soft-wrap = { - enable = true; - }; - whitespace = { - render = { - space = "none"; - tab = "all"; - newline = "none"; - }; - characters = { - nbsp = "·"; - tab = "→"; - }; - }; - }; - keys = { - normal = { - space."=" = ":fmt"; - space.space = "@[]"; - - # smart tab++ - tab = "move_parent_node_end"; - S-tab = "move_parent_node_start"; - A-S = "@S[\\s]+"; - "'" = { - D = "@sgd"; - F = "@sgy"; - d = "@vgd"; - f = "@vgy"; - h = ":toggle-option lsp.display-inlay-hints"; - t = ":pipe flip-bool"; - }; - }; - insert = { - up = "no_op"; - down = "no_op"; - left = "no_op"; - right = "no_op"; - pageup = "no_op"; - pagedown = "no_op"; - home = "no_op"; - end = "no_op"; - - # smart tab ++ - S-tab = "move_parent_node_start"; - }; - select = { - # smart tab++ - tab = "extend_parent_node_end"; - S-tab = "extend_parent_node_start"; - }; - }; - }; - languages = { - language-server = { - "nu-builtin-lsp" = { - command = "${config.users.defaultUserShell}/bin/nu"; - args = ["--lsp"]; - }; - "rust-analyzer" = { - config = { - check.command = "check"; - completion.snippets.custom = { - "pub fn" = { - prefix = ["pfn" "pubfn"]; - postfix = ["pfn"]; - body = [ - "pub fn $\{receiver\}() {" - "\\t$1" - "}" - ]; - scope = "type"; - }; - }; - completion.termSearch.enable = true; - diagnostics.enable = true; - inlayHints = { - bindingModeHints.enable = true; - closureCaptureHints.enable = true; - closureReturnTypeHints.enable = true; - discriminantHints.enable = true; - expressionAdjustmentHints = { - hideOutsideUnsafe = true; - }; - lifetimeElisionHints.enable = "skip_trivial"; - }; - interpret.tests = true; - lens = { - references = { - adt.enable = true; - trait.enable = true; - }; - }; - typing.autoClosingAngleBrackets.enable = true; - }; - }; - "emmet-language-server" = { - command = "emmet-language-server"; - args = ["--stdio"]; - }; - "psalm" = { - command = "psalm"; - args = ["--language-server"]; - }; - "tinymist" = { - config = { - exportPdf = "onType"; - formatterMode = "typstyle"; - }; - }; - }; - language = [ - { - name = "nu"; - language-servers = ["nu-builtin-lsp"]; - } - { - name = "php"; - language-servers = ["psalm"]; - } - { - name = "nix"; - formatter = { - command = "${pkgs.alejandra}/bin/alejandra"; - args = ["--quiet"]; - }; - auto-format = true; - } - { - name = "html"; - roots = [".git"]; - language-servers = ["vscode-html-language-server" "emmet-language-server"]; - auto-format = false; - } +{ config, ... }: +{ + home-manager.users.jade = + { + pkgs, + pkgs-stable, + ... + }: + { + home = { + sessionVariables.EDITOR = "hx"; + packages = [ + pkgs.wl-clipboard-rs + pkgs.nil + pkgs.vscode-langservers-extracted + pkgs.nodePackages.typescript-language-server + pkgs.emmet-language-server + pkgs.jdt-language-server + pkgs.tinymist + pkgs.typstyle ]; }; + programs.helix = { + enable = true; + defaultEditor = true; + settings = { + theme = "gruvbox_dark_hard"; + editor = { + line-number = "relative"; + bufferline = "multiple"; + color-modes = true; + cursorline = true; + auto-save = { + after-delay.enable = true; + after-delay.timeout = 10000; + }; + auto-format = true; + end-of-line-diagnostics = "hint"; + # slightly optimized based on my layout + jump-label-alphabet = "jfkdhaslgwenuiopbcmyzqrtvx"; + clipboard-provider = "wayland"; + inline-diagnostics = { + cursor-line = "hint"; + }; + lsp = { + display-messages = true; + display-inlay-hints = true; + }; + popup-border = "popup"; + shell = [ + "nu" + "-c" + ]; + statusline.left = [ + "mode" + "spinner" + "spacer" + "version-control" + "file-name" + "diagnostics" + "read-only-indicator" + "file-modification-indicator" + "spacer" + ]; + + statusline.right = [ + "workspace-diagnostics" + "register" + "position" + "selections" + "file-encoding" + "file-type" + ]; + idle-timeout = 50; + completion-timeout = 100; + indent-guides = { + render = true; + character = "│"; + skip-levels = 3; + }; + soft-wrap = { + enable = true; + }; + whitespace = { + render = { + space = "none"; + tab = "all"; + newline = "none"; + }; + characters = { + nbsp = "·"; + tab = "→"; + }; + }; + }; + keys = { + normal = { + space."=" = ":fmt"; + space.space = "@[]"; + + # smart tab++ + tab = "move_parent_node_end"; + S-tab = "move_parent_node_start"; + A-S = "@S[\\s]+"; + "'" = { + D = "@sgd"; + F = "@sgy"; + d = "@vgd"; + f = "@vgy"; + h = ":toggle-option lsp.display-inlay-hints"; + t = ":pipe flip-bool"; + }; + }; + insert = { + up = "no_op"; + down = "no_op"; + left = "no_op"; + right = "no_op"; + pageup = "no_op"; + pagedown = "no_op"; + home = "no_op"; + end = "no_op"; + + # smart tab ++ + S-tab = "move_parent_node_start"; + }; + select = { + # smart tab++ + tab = "extend_parent_node_end"; + S-tab = "extend_parent_node_start"; + }; + }; + }; + languages = { + language-server = { + "nu-builtin-lsp" = { + command = "${config.users.defaultUserShell}/bin/nu"; + args = [ "--lsp" ]; + }; + "rust-analyzer" = { + config = { + check.command = "check"; + completion.snippets.custom = { + "pub fn" = { + prefix = [ + "pfn" + "pubfn" + ]; + postfix = [ "pfn" ]; + body = [ + "pub fn $\{receiver\}() {" + "\\t$1" + "}" + ]; + scope = "type"; + }; + }; + completion.termSearch.enable = true; + diagnostics.enable = true; + inlayHints = { + bindingModeHints.enable = true; + closureCaptureHints.enable = true; + closureReturnTypeHints.enable = true; + discriminantHints.enable = true; + expressionAdjustmentHints = { + hideOutsideUnsafe = true; + }; + lifetimeElisionHints.enable = "skip_trivial"; + }; + interpret.tests = true; + lens = { + references = { + adt.enable = true; + trait.enable = true; + }; + }; + typing.autoClosingAngleBrackets.enable = true; + }; + }; + "emmet-language-server" = { + command = "emmet-language-server"; + args = [ "--stdio" ]; + }; + "psalm" = { + command = "psalm"; + args = [ "--language-server" ]; + }; + "tinymist" = { + config = { + exportPdf = "onType"; + formatterMode = "typstyle"; + }; + }; + }; + language = [ + { + name = "nu"; + language-servers = [ "nu-builtin-lsp" ]; + } + { + name = "php"; + language-servers = [ "psalm" ]; + } + { + name = "nix"; + formatter = { + command = "${pkgs.nixfmt-rfc-style}/bin/nixfmt"; + args = [ "--quiet" ]; + }; + auto-format = true; + } + { + name = "html"; + roots = [ ".git" ]; + language-servers = [ + "vscode-html-language-server" + "emmet-language-server" + ]; + auto-format = false; + } + ]; + }; + }; }; - }; } diff --git a/modules/shell/mprocs.nix b/modules/shell/mprocs.nix index 7d6b96b..1a7a401 100644 --- a/modules/shell/mprocs.nix +++ b/modules/shell/mprocs.nix @@ -1,24 +1,31 @@ -{...}: { - home-manager.users.jade = { - pkgs, - lib, - ... - }: { - home = { - packages = [pkgs.mprocs]; - }; - xdg.configFile."mprocs/mprocs.yaml" = { - text = builtins.toJSON { - proc_list_width = 15; - keymap_procs = { - "" = {c = "toggle-focus";}; - }; - keymap_term = { - "" = null; - # Ctrl-m so it doesnt overlap with zellij or helix - "" = {c = "toggle-focus";}; +{ ... }: +{ + home-manager.users.jade = + { + pkgs, + lib, + ... + }: + { + home = { + packages = [ pkgs.mprocs ]; + }; + xdg.configFile."mprocs/mprocs.yaml" = { + text = builtins.toJSON { + proc_list_width = 15; + keymap_procs = { + "" = { + c = "toggle-focus"; + }; + }; + keymap_term = { + "" = null; + # Ctrl-m so it doesnt overlap with zellij or helix + "" = { + c = "toggle-focus"; + }; + }; }; }; }; - }; } diff --git a/modules/shell/nu.nix b/modules/shell/nu.nix index 54ec9a8..521a300 100644 --- a/modules/shell/nu.nix +++ b/modules/shell/nu.nix @@ -1,44 +1,46 @@ -{config, ...}: { - home-manager.users.jade = {pkgs, ...}: { - # Needed for nu_scripts background_task - services.pueue = { - enable = true; - settings = { - shared = { - use_unix_socket = true; +{ config, ... }: +{ + home-manager.users.jade = + { pkgs, ... }: + { + # Needed for nu_scripts background_task + services.pueue = { + enable = true; + settings = { + shared = { + use_unix_socket = true; + }; }; }; - }; - home.packages = [ - pkgs.pueue - ]; - home.file."shell-startup" = { - source = ./nu/shell-startup.nu; - target = ".config/nushell/shell-startup.nu"; - }; - programs.nushell = { - enable = true; - package = config.users.defaultUserShell; - configFile.source = ./nu/config.nu; - envFile.source = ./nu/env.nu; - extraConfig = '' - plugin add ${pkgs.nushellPlugins.query}/bin/nu_plugin_query; - plugin add ${pkgs.nushellPlugins.polars}/bin/nu_plugin_polars; - plugin add ${pkgs.nushellPlugins.formats}/bin/nu_plugin_formats; + home.packages = [ + pkgs.pueue + ]; + home.file."shell-startup" = { + source = ./nu/shell-startup.nu; + target = ".config/nushell/shell-startup.nu"; + }; + programs.nushell = { + enable = true; + package = config.users.defaultUserShell; + configFile.source = ./nu/config.nu; + envFile.source = ./nu/env.nu; + extraConfig = '' + plugin add ${pkgs.nushellPlugins.query}/bin/nu_plugin_query; + plugin add ${pkgs.nushellPlugins.polars}/bin/nu_plugin_polars; + plugin add ${pkgs.nushellPlugins.formats}/bin/nu_plugin_formats; - plugin use query; - plugin use polars; - plugin use formats; + plugin use query; + plugin use polars; + plugin use formats; - source ${./nu/custom_commands.nu}; - source ${./nu/aliases.nu}; - nu ${./nu/shell-startup.nu}; - ''; - extraEnv = '' - ''; + source ${./nu/custom_commands.nu}; + source ${./nu/aliases.nu}; + nu ${./nu/shell-startup.nu}; + ''; + extraEnv = ''''; + }; + # programs.starship.enableNushellIntegration = true; + programs.carapace.enableNushellIntegration = true; + programs.direnv.enableNushellIntegration = true; }; - # programs.starship.enableNushellIntegration = true; - programs.carapace.enableNushellIntegration = true; - programs.direnv.enableNushellIntegration = true; - }; } diff --git a/modules/shell/starship.nix b/modules/shell/starship.nix index eea943f..8cf92c5 100644 --- a/modules/shell/starship.nix +++ b/modules/shell/starship.nix @@ -1,41 +1,44 @@ -{...}: { - home-manager.users.jade = {pkgs, ...}: { - programs.starship = { - enable = true; - enableNushellIntegration = false; - settings = { - format = "$all$directory$character"; - character = { - success_symbol = "[\\$](green)"; - error_symbol = "[X](red)"; - }; - git_branch = { - format = "\\[[$symbol$branch]($style)\\]"; - symbol = " "; - }; - git_status = { - format = "([\\[$all_status$ahead_behind\\]]($style))"; - }; - haskell = { - format = "\\[[$symbol($version)]($style)\\]"; - symbol = " "; - }; - cmd_duration = { - format = "\\[[⏱ $duration]($style)\\]"; - }; - nix_shell = { - format = "\\[[$symbol$state( \\($name\\))]($style)\\]"; - symbol = " "; - }; - rust = { - format = "\\[[$symbol($version)]($style)\\]"; - symbol = " "; - }; - package = { - format = "\\[[$symbol$version]($style)\\]"; - symbol = " "; +{ ... }: +{ + home-manager.users.jade = + { pkgs, ... }: + { + programs.starship = { + enable = true; + enableNushellIntegration = false; + settings = { + format = "$all$directory$character"; + character = { + success_symbol = "[\\$](green)"; + error_symbol = "[X](red)"; + }; + git_branch = { + format = "\\[[$symbol$branch]($style)\\]"; + symbol = " "; + }; + git_status = { + format = "([\\[$all_status$ahead_behind\\]]($style))"; + }; + haskell = { + format = "\\[[$symbol($version)]($style)\\]"; + symbol = " "; + }; + cmd_duration = { + format = "\\[[⏱ $duration]($style)\\]"; + }; + nix_shell = { + format = "\\[[$symbol$state( \\($name\\))]($style)\\]"; + symbol = " "; + }; + rust = { + format = "\\[[$symbol($version)]($style)\\]"; + symbol = " "; + }; + package = { + format = "\\[[$symbol$version]($style)\\]"; + symbol = " "; + }; }; }; }; - }; } diff --git a/modules/shell/sudo.nix b/modules/shell/sudo.nix index bcc38cd..5e45338 100644 --- a/modules/shell/sudo.nix +++ b/modules/shell/sudo.nix @@ -1,6 +1,7 @@ -{...}: { +{ ... }: +{ nixpkgs.config.packageOverrides = pkgs: { - sudo = pkgs.sudo.override {withInsults = true;}; + sudo = pkgs.sudo.override { withInsults = true; }; }; security.sudo.extraConfig = "Defaults insults"; } diff --git a/modules/shell/tty.nix b/modules/shell/tty.nix index becd7b0..3384e63 100644 --- a/modules/shell/tty.nix +++ b/modules/shell/tty.nix @@ -1,13 +1,10 @@ -{config, ...}: let - generateOptions = with builtins; ( - opts: - toString ( - attrValues ( - mapAttrs (name: value: "--${name} ${toString value}") opts - ) - ) - ); -in { +{ config, ... }: +let + generateOptions = + with builtins; + (opts: toString (attrValues (mapAttrs (name: value: "--${name} ${toString value}") opts))); +in +{ # TODO: global colorscheme vars for everything console.colors = [ "282828" From 81cf4188c4747e1350c31639e543b7de386be86c Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Mon, 14 Apr 2025 22:27:14 +0200 Subject: [PATCH 289/301] remove youtube privileges --- modules/net/hosts.nix | 3 +++ 1 file changed, 3 insertions(+) diff --git a/modules/net/hosts.nix b/modules/net/hosts.nix index 3a21884..5f182a5 100644 --- a/modules/net/hosts.nix +++ b/modules/net/hosts.nix @@ -14,6 +14,9 @@ "facebook.com" "snapchat.com" + "youtube.com" + "www.youtube.com" + "google-analytics.com" "stats.g.doubleclick.net" "googleadservices.com" From 8f5547acc938795555ed86219c0175d38b7f0dba Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Wed, 16 Apr 2025 12:57:21 +0200 Subject: [PATCH 290/301] animation fuckery --- flake.nix | 1 + .../home/niri/shaders/glitch-open.frag | 39 +++++++++++++++++++ modules/desktop/home/niri/style.nix | 6 +++ 3 files changed, 46 insertions(+) create mode 100644 modules/desktop/home/niri/shaders/glitch-open.frag diff --git a/flake.nix b/flake.nix index 1dd871f..c9ca4dd 100644 --- a/flake.nix +++ b/flake.nix @@ -65,6 +65,7 @@ buildInputs = [ rs-toolchain pkgs.pkg-config + pkgs.glsl_analyzer pkgs.openssl ]; }; diff --git a/modules/desktop/home/niri/shaders/glitch-open.frag b/modules/desktop/home/niri/shaders/glitch-open.frag new file mode 100644 index 0000000..4682dd1 --- /dev/null +++ b/modules/desktop/home/niri/shaders/glitch-open.frag @@ -0,0 +1,39 @@ +float random(vec2 st) { + return fract(sin(dot(st.xy, vec2(12.9898, 78.233))) * 43758.5453123); +} + +float grid(vec2 c) { + if (mod((c.s * 512.) + random(c * niri_clamped_progress), 8.) >= 7.|| mod((c.t * 512.) + random(c * niri_clamped_progress), 8.) >= 7.) return 0.; + else return 1.; +} + +vec3 grid_colored(vec2 coords, vec3 col1, vec3 col2) { + return mix(col1, col2, grid(coords)); +} + +vec4 gen_px_squares(vec2 coords, vec4 color) { + vec2 coords_ = coords.xy; + coords = ceil(coords * 32.) / 32.; + float p = niri_clamped_progress; + + float mix_alpha = + 1. - clamp((p - length(coords)) * 3.0, 0.0, 1.0); + // vec4 blue = vec4(0.3568, 0.8078, 0.9803, color.a); + vec3 blue = vec3(0.552, 0.631, 1.); + vec3 dblue = vec3(0.419, 0.482, 0.839); + + if (color.a != 0. && p * p >= dot(coords, coords)) + return mix(color, vec4(grid_colored(coords_, dblue, blue), color.a), mix_alpha * 0.5); + else return vec4(0.); +} + +vec4 open_color(vec3 coords_geo, vec3 size_geo) { + vec3 coords_tex = niri_geo_to_tex * coords_geo; + vec4 color = texture2D(niri_tex, coords_tex.st); + + vec2 coords = (coords_geo.xy - vec2(0.5, 0.5)) * size_geo.xy * 2.0; + coords = coords / length(size_geo.xy); + + return gen_px_squares(coords, color); + // return vec4(vec3(grid(coords)),1.); +} diff --git a/modules/desktop/home/niri/style.nix b/modules/desktop/home/niri/style.nix index 2cee326..93731f0 100644 --- a/modules/desktop/home/niri/style.nix +++ b/modules/desktop/home/niri/style.nix @@ -10,6 +10,12 @@ hide-after-inactive-ms = 10000; }; + animations.window-open.easing = { + curve = "linear"; + duration-ms = 350; + }; + animations.shaders.window-open = builtins.readFile ./shaders/glitch-open.frag; + layout = { gaps = 15; focus-ring.enable = false; From c0a37db78bc6770d5ab90f31686118cb47632c93 Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Wed, 16 Apr 2025 12:57:34 +0200 Subject: [PATCH 291/301] ausweisapp installed --- modules/desktop/default.nix | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/modules/desktop/default.nix b/modules/desktop/default.nix index a5d5279..fb57132 100644 --- a/modules/desktop/default.nix +++ b/modules/desktop/default.nix @@ -13,4 +13,9 @@ security.polkit.enable = true; services.illum.enable = true; services.upower.enable = true; + + programs.ausweisapp = { + enable = true; + openFirewall = true; + }; } From d78a0b1c099e41c2eefaa3dfc7431530b8dbef30 Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Fri, 25 Apr 2025 17:09:21 +0200 Subject: [PATCH 292/301] make animations faster --- modules/desktop/home/niri/style.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/desktop/home/niri/style.nix b/modules/desktop/home/niri/style.nix index 93731f0..3904f85 100644 --- a/modules/desktop/home/niri/style.nix +++ b/modules/desktop/home/niri/style.nix @@ -12,7 +12,7 @@ animations.window-open.easing = { curve = "linear"; - duration-ms = 350; + duration-ms = 230; }; animations.shaders.window-open = builtins.readFile ./shaders/glitch-open.frag; From bd60655fcccd48c734de656a80bc2cd392e39324 Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Fri, 25 Apr 2025 17:09:58 +0200 Subject: [PATCH 293/301] do some work on jrnl --- Cargo.lock | 341 +-------------------- programs/jrnl/Cargo.toml | 6 - programs/jrnl/src/commands/add_entry.rs | 4 +- programs/jrnl/src/commands/list_entries.rs | 7 +- programs/jrnl/src/main.rs | 12 +- 5 files changed, 28 insertions(+), 342 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 6f7092e..f1121f4 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -17,33 +17,6 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" -[[package]] -name = "ahash" -version = "0.8.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011" -dependencies = [ - "cfg-if", - "once_cell", - "version_check", - "zerocopy", -] - -[[package]] -name = "aho-corasick" -version = "1.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" -dependencies = [ - "memchr", -] - -[[package]] -name = "allocator-api2" -version = "0.2.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c6cb57a04249c6480766f7f7cef5467412af1490f8d1e243141daddada3264f" - [[package]] name = "android-tzdata" version = "0.1.1" @@ -167,9 +140,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.5.0" +version = "2.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf4b9d6a944f767f8e5e0db018570623c85f3d925ac718db4e06d0187adb21c1" +checksum = "5c8214115b7bf84099f1309324e63141d4c5d7cc26862f97a0a857dbefe165bd" [[package]] name = "bumpalo" @@ -189,21 +162,6 @@ version = "1.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8318a53db07bb3f8dca91a600466bdb3f2eaadeedfdbcf02e1accbad9271ba50" -[[package]] -name = "cassowary" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df8670b8c7b9dae1793364eafadf7239c40d669904660c5960d74cfd80b46a53" - -[[package]] -name = "castaway" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a17ed5635fc8536268e5d4de1e22e81ac34419e5f052d4d51f4e01dcc263fcc" -dependencies = [ - "rustversion", -] - [[package]] name = "cc" version = "1.1.16" @@ -262,7 +220,7 @@ version = "4.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "528131438037fd55894f62d6e9f068b8f45ac57ffa77517819645d10aed04f64" dependencies = [ - "heck 0.5.0", + "heck", "proc-macro2", "quote", "syn", @@ -280,19 +238,6 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7" -[[package]] -name = "compact_str" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f86b9c4c00838774a6d902ef931eff7470720c51d90c2e32cfe15dc304737b3f" -dependencies = [ - "castaway", - "cfg-if", - "itoa", - "ryu", - "static_assertions", -] - [[package]] name = "core-foundation-sys" version = "0.8.6" @@ -315,22 +260,6 @@ dependencies = [ "winapi", ] -[[package]] -name = "crossterm" -version = "0.27.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f476fe445d41c9e991fd07515a6f463074b782242ccf4a5b7b1d1012e70824df" -dependencies = [ - "bitflags 2.5.0", - "crossterm_winapi", - "libc", - "mio 0.8.11", - "parking_lot", - "signal-hook", - "signal-hook-mio", - "winapi", -] - [[package]] name = "crossterm_winapi" version = "0.9.1" @@ -340,44 +269,11 @@ dependencies = [ "winapi", ] -[[package]] -name = "dirs" -version = "5.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44c45a9d03d6676652bcb5e724c7e988de1acad23a711b5217ab9cbecbec2225" -dependencies = [ - "dirs-sys", -] - -[[package]] -name = "dirs-sys" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "520f05a5cbd335fae5a99ff7a6ab8627577660ee5cfd6a94a6a929b52ff0321c" -dependencies = [ - "libc", - "option-ext", - "redox_users", - "windows-sys 0.48.0", -] - [[package]] name = "dyn-clone" -version = "1.0.17" +version = "1.0.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d6ef0072f8a535281e4876be788938b528e9a1d43900b82c2569af7da799125" - -[[package]] -name = "ego-tree" -version = "0.6.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a68a4904193147e0a8dec3314640e6db742afd5f6e634f428a6af230d9b3591" - -[[package]] -name = "either" -version = "1.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a47c1c47d2f5964e29c61246e81db715514cd532db6b5116a25ea3c03d6780a2" +checksum = "1c7a8fb8a9fbf66c1f703fe16184d10ca0ee9d23be5b4436400408ba54a95005" [[package]] name = "encoding_rs" @@ -394,12 +290,6 @@ version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" -[[package]] -name = "fixedbitset" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" - [[package]] name = "flip-bool" version = "0.1.0" @@ -517,16 +407,6 @@ name = "hashbrown" version = "0.14.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604" -dependencies = [ - "ahash", - "allocator-api2", -] - -[[package]] -name = "heck" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" [[package]] name = "heck" @@ -681,20 +561,14 @@ dependencies = [ "hashbrown", ] -[[package]] -name = "indoc" -version = "2.0.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b248f5224d1d606005e02c97f5aa4e88eeb230488bcc03bc9ca4d7991399f2b5" - [[package]] name = "inquire" version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0fddf93031af70e75410a2511ec04d49e758ed2f26dad3404a934e0fb45cc12a" dependencies = [ - "bitflags 2.5.0", - "crossterm 0.25.0", + "bitflags 2.9.0", + "crossterm", "dyn-clone", "fuzzy-matcher", "fxhash", @@ -710,15 +584,6 @@ version = "2.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8f518f335dce6725a761382244631d86cf0ccb2863413590b31338feb467f9c3" -[[package]] -name = "itertools" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba291022dbbd398a455acf126c1e341954079855bc60dfdda641363bd6922569" -dependencies = [ - "either", -] - [[package]] name = "itoa" version = "1.0.11" @@ -731,14 +596,8 @@ version = "0.1.0" dependencies = [ "chrono", "clap", - "dirs", - "ego-tree", - "indexmap", "inquire", - "markdown", "owo-colors", - "petgraph", - "ratatui", "temp-file", "termsize", ] @@ -752,28 +611,12 @@ dependencies = [ "wasm-bindgen", ] -[[package]] -name = "lazy_static" -version = "1.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" - [[package]] name = "libc" version = "0.2.153" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9c198f91728a82281a64e1f4f9eeb25d82cb32a5de251c6bd1b5154d63a8e7bd" -[[package]] -name = "libredox" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d" -dependencies = [ - "bitflags 2.5.0", - "libc", -] - [[package]] name = "lock_api" version = "0.4.11" @@ -790,26 +633,6 @@ version = "0.4.21" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "90ed8c1e510134f979dbc4f070f87d4313098b704861a105fe34231c70a3901c" -[[package]] -name = "lru" -version = "0.12.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3262e75e648fce39813cb56ac41f3c3e3f65217ebf3844d818d1f9398cfb0dc" -dependencies = [ - "hashbrown", -] - -[[package]] -name = "markdown" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef3aab6a1d529b112695f72beec5ee80e729cb45af58663ec902c8fac764ecdd" -dependencies = [ - "lazy_static", - "pipeline", - "regex", -] - [[package]] name = "memchr" version = "2.7.2" @@ -898,12 +721,6 @@ version = "1.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" -[[package]] -name = "option-ext" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" - [[package]] name = "owo-colors" version = "4.0.0" @@ -933,28 +750,12 @@ dependencies = [ "windows-targets 0.48.5", ] -[[package]] -name = "paste" -version = "1.0.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de3145af08024dea9fa9914f381a17b8fc6034dfb00f3a84013f7ff43f29ed4c" - [[package]] name = "percent-encoding" version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" -[[package]] -name = "petgraph" -version = "0.6.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1d3afd2628e69da2be385eb6f2fd57c8ac7977ceeff6dc166ff1657b0e386a9" -dependencies = [ - "fixedbitset", - "indexmap", -] - [[package]] name = "pin-project" version = "1.1.5" @@ -987,12 +788,6 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" -[[package]] -name = "pipeline" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d15b6607fa632996eb8a17c9041cb6071cb75ac057abd45dece578723ea8c7c0" - [[package]] name = "ppv-lite86" version = "0.2.20" @@ -1098,26 +893,6 @@ dependencies = [ "getrandom", ] -[[package]] -name = "ratatui" -version = "0.26.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a564a852040e82671dc50a37d88f3aa83bbc690dfc6844cfe7a2591620206a80" -dependencies = [ - "bitflags 2.5.0", - "cassowary", - "compact_str", - "crossterm 0.27.0", - "indoc", - "itertools", - "lru", - "paste", - "stability", - "strum", - "unicode-segmentation", - "unicode-width", -] - [[package]] name = "redox_syscall" version = "0.4.1" @@ -1127,46 +902,6 @@ dependencies = [ "bitflags 1.3.2", ] -[[package]] -name = "redox_users" -version = "0.4.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd283d9651eeda4b2a83a43c1c91b266c40fd76ecd39a50a8c630ae69dc72891" -dependencies = [ - "getrandom", - "libredox", - "thiserror", -] - -[[package]] -name = "regex" -version = "1.10.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c117dbdfde9c8308975b6a18d71f3f385c89461f7b3fb054288ecf2a2058ba4c" -dependencies = [ - "aho-corasick", - "memchr", - "regex-automata", - "regex-syntax", -] - -[[package]] -name = "regex-automata" -version = "0.4.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86b83b8b9847f9bf95ef68afb0b8e6cdb80f498442f5179a29fad448fcc1eaea" -dependencies = [ - "aho-corasick", - "memchr", - "regex-syntax", -] - -[[package]] -name = "regex-syntax" -version = "0.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adad44e29e4c806119491a7f06f03de4d1af22c3a680dd47f1e6e179439d1f56" - [[package]] name = "reqwest" version = "0.12.7" @@ -1279,12 +1014,6 @@ dependencies = [ "untrusted", ] -[[package]] -name = "rustversion" -version = "1.0.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80af6f9131f277a45a3fba6ce8e2258037bb0477a67e610d3c1fe046ab31de47" - [[package]] name = "ryu" version = "1.0.17" @@ -1359,9 +1088,9 @@ dependencies = [ [[package]] name = "signal-hook-mio" -version = "0.2.3" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29ad2e15f37ec9a6cc544097b78a1ec90001e9f71b81338ca39f430adaca99af" +checksum = "34db1a06d485c9142248b7a054f034b349b212551f3dfd19c94d45a754a217cd" dependencies = [ "libc", "mio 0.8.11", @@ -1408,50 +1137,12 @@ version = "0.9.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" -[[package]] -name = "stability" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2ff9eaf853dec4c8802325d8b6d3dffa86cc707fd7a1a4cdbf416e13b061787a" -dependencies = [ - "quote", - "syn", -] - -[[package]] -name = "static_assertions" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" - [[package]] name = "strsim" version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" -[[package]] -name = "strum" -version = "0.26.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d8cec3501a5194c432b2b7976db6b7d10ec95c253208b45f83f7136aa985e29" -dependencies = [ - "strum_macros", -] - -[[package]] -name = "strum_macros" -version = "0.26.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6cf59daf282c0a494ba14fd21610a0325f9f90ec9d1231dea26bcb1d696c946" -dependencies = [ - "heck 0.4.1", - "proc-macro2", - "quote", - "rustversion", - "syn", -] - [[package]] name = "subtle" version = "2.6.1" @@ -1681,15 +1372,15 @@ dependencies = [ [[package]] name = "unicode-segmentation" -version = "1.11.0" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4c87d22b6e3f4a18d4d40ef354e97c90fcb14dd91d7dc0aa9d8a1172ebf7202" +checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493" [[package]] name = "unicode-width" -version = "0.1.11" +version = "0.1.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e51733f11c9c4f72aa0c160008246859e340b00807569a0da0e7a1079b27ba85" +checksum = "7dd6e30e90baa6f72411720665d41d89b9a3d039dc45b8faea1ddd07f617f6af" [[package]] name = "untrusted" @@ -1714,12 +1405,6 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a" -[[package]] -name = "version_check" -version = "0.9.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" - [[package]] name = "want" version = "0.3.1" diff --git a/programs/jrnl/Cargo.toml b/programs/jrnl/Cargo.toml index 83fe71c..1fa29c5 100644 --- a/programs/jrnl/Cargo.toml +++ b/programs/jrnl/Cargo.toml @@ -6,13 +6,7 @@ edition = "2021" [dependencies] chrono = "0.4.38" clap = { version = "4.5.4", features = ["derive", "env"] } -dirs = "5.0.1" -ego-tree = "0.6.2" -indexmap = "2.2.6" -markdown = "0.3.0" owo-colors = "4.0.0" -petgraph = "0.6.4" -ratatui = "0.26.2" temp-file = "0.1.8" termsize = "0.1.9" inquire = "0.7.5" diff --git a/programs/jrnl/src/commands/add_entry.rs b/programs/jrnl/src/commands/add_entry.rs index c7f78db..4b0e266 100644 --- a/programs/jrnl/src/commands/add_entry.rs +++ b/programs/jrnl/src/commands/add_entry.rs @@ -2,7 +2,7 @@ use std::{ env, fs::{self, OpenOptions}, io::{self, Write}, - path::PathBuf, + path::{Path, PathBuf}, process::Command, }; @@ -12,7 +12,7 @@ use temp_file::{TempFile, TempFileBuilder}; use crate::md::{Entry, ToMd}; // TODO: the usual (better error handling) -pub fn add_entry(path: PathBuf, title: Option) -> io::Result<()> { +pub fn add_entry(path: &Path, title: Option) -> io::Result<()> { if !path.exists() { eprintln!("Journal file does not exist at {path:?}, exiting..."); std::process::exit(1); diff --git a/programs/jrnl/src/commands/list_entries.rs b/programs/jrnl/src/commands/list_entries.rs index 2519394..e083885 100644 --- a/programs/jrnl/src/commands/list_entries.rs +++ b/programs/jrnl/src/commands/list_entries.rs @@ -1,9 +1,12 @@ use owo_colors::OwoColorize; -use std::{fs, io, path::PathBuf}; +use std::{ + fs, io, + path::{Path, PathBuf}, +}; use crate::md::Doc; -pub fn list_entries(path: PathBuf) -> io::Result<()> { +pub fn list_entries(path: &Path) -> io::Result<()> { let file = fs::read_to_string(path)?; if let Some(doc) = Doc::new(&file) { diff --git a/programs/jrnl/src/main.rs b/programs/jrnl/src/main.rs index 400e4fa..e98d4ff 100644 --- a/programs/jrnl/src/main.rs +++ b/programs/jrnl/src/main.rs @@ -1,5 +1,8 @@ use clap::{Parser, Subcommand}; -use std::{fs, io, path::PathBuf}; +use std::{ + fs, io, + path::{self, Path, PathBuf}, +}; use crate::{ commands::add_entry::add_entry, @@ -31,13 +34,14 @@ fn main() -> io::Result<()> { let cli = Cli::parse(); println!("Hello, world!"); println!("cli: {cli:#?}"); + let path = dbg!(path::absolute(&cli.s10e_jrnl_file_loc)?); match cli.command { - Some(Command::ListEntries) => list_entries(cli.s10e_jrnl_file_loc.clone()), - Some(Command::Add { title }) => add_entry(cli.s10e_jrnl_file_loc.clone(), title), + Some(Command::ListEntries) => list_entries(&path), + Some(Command::Add { title }) => add_entry(&path, title), None => { // TODO: handle btter - let file = fs::read_to_string(cli.s10e_jrnl_file_loc)?; + let file = fs::read_to_string(path)?; let doc = Doc::new(&file).unwrap(); println!("{}", doc.to_md()); From 458a56ab4d44d19ed91057e1e3e9edb00fd51795 Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Fri, 2 May 2025 15:34:12 +0200 Subject: [PATCH 294/301] do editor fuckery --- modules/default.nix | 1 + modules/editors/default.nix | 12 ++ modules/editors/helix/binds.nix | 41 ++++++ modules/editors/helix/default.nix | 113 +++++++++++++++ modules/editors/helix/settings.nix | 74 ++++++++++ modules/editors/zed/default.nix | 42 ++++++ modules/shell/default.nix | 1 - modules/shell/helix.nix | 225 ----------------------------- 8 files changed, 283 insertions(+), 226 deletions(-) create mode 100644 modules/editors/default.nix create mode 100644 modules/editors/helix/binds.nix create mode 100644 modules/editors/helix/default.nix create mode 100644 modules/editors/helix/settings.nix create mode 100644 modules/editors/zed/default.nix delete mode 100644 modules/shell/helix.nix diff --git a/modules/default.nix b/modules/default.nix index 1bf5670..286f879 100644 --- a/modules/default.nix +++ b/modules/default.nix @@ -1,6 +1,7 @@ { ... }: { imports = [ + ./editors ./shell ./desktop ./desktop-legacy diff --git a/modules/editors/default.nix b/modules/editors/default.nix new file mode 100644 index 0000000..2c28619 --- /dev/null +++ b/modules/editors/default.nix @@ -0,0 +1,12 @@ +{ ... }: +{ + programs.niri.enable = true; + home-manager.users.jade = + { pkgs, ... }: + { + imports = [ + ./helix + ./zed + ]; + }; +} diff --git a/modules/editors/helix/binds.nix b/modules/editors/helix/binds.nix new file mode 100644 index 0000000..b7f6447 --- /dev/null +++ b/modules/editors/helix/binds.nix @@ -0,0 +1,41 @@ +{ ... }: +{ + programs.helix.settings.keys = { + normal = { + space."=" = ":fmt"; + space.ret = "@[]"; + space.space = "ms"; + + # smart tab++ + tab = "move_parent_node_end"; + S-tab = "move_parent_node_start"; + A-S = "@S[\\s]+"; + "'" = { + D = "@sgd"; + F = "@sgy"; + d = "@vgd"; + f = "@vgy"; + h = ":toggle-option lsp.display-inlay-hints"; + t = ":pipe flip-bool"; + }; + }; + insert = { + up = "no_op"; + down = "no_op"; + left = "no_op"; + right = "no_op"; + pageup = "no_op"; + pagedown = "no_op"; + home = "no_op"; + end = "no_op"; + + # smart tab ++ + S-tab = "move_parent_node_start"; + }; + select = { + # smart tab++ + tab = "extend_parent_node_end"; + S-tab = "extend_parent_node_start"; + }; + }; +} diff --git a/modules/editors/helix/default.nix b/modules/editors/helix/default.nix new file mode 100644 index 0000000..bd0b05a --- /dev/null +++ b/modules/editors/helix/default.nix @@ -0,0 +1,113 @@ +{ config, pkgs, ... }: +{ + imports = [ + ./binds.nix + ./settings.nix + ]; + home = { + sessionVariables.EDITOR = "hx"; + packages = [ + pkgs.wl-clipboard-rs + pkgs.nil + pkgs.vscode-langservers-extracted + pkgs.nodePackages.typescript-language-server + pkgs.emmet-language-server + pkgs.jdt-language-server + pkgs.tinymist + pkgs.typstyle + ]; + }; + programs.helix = { + enable = true; + defaultEditor = true; + languages = { + language-server = { + "nu-builtin-lsp" = { + command = "${pkgs.nushell}/bin/nu"; + args = [ "--lsp" ]; + }; + "rust-analyzer" = { + config = { + check.command = "check"; + completion.snippets.custom = { + "pub fn" = { + prefix = [ + "pfn" + "pubfn" + ]; + postfix = [ "pfn" ]; + body = [ + "pub fn $\{receiver\}() {" + "\\t$1" + "}" + ]; + scope = "type"; + }; + }; + completion.termSearch.enable = true; + diagnostics.enable = true; + inlayHints = { + bindingModeHints.enable = true; + closureCaptureHints.enable = true; + closureReturnTypeHints.enable = true; + discriminantHints.enable = true; + expressionAdjustmentHints = { + hideOutsideUnsafe = true; + }; + lifetimeElisionHints.enable = "skip_trivial"; + }; + interpret.tests = true; + lens = { + references = { + adt.enable = true; + trait.enable = true; + }; + }; + typing.autoClosingAngleBrackets.enable = true; + }; + }; + "emmet-language-server" = { + command = "emmet-language-server"; + args = [ "--stdio" ]; + }; + "psalm" = { + command = "psalm"; + args = [ "--language-server" ]; + }; + "tinymist" = { + config = { + exportPdf = "onType"; + formatterMode = "typstyle"; + }; + }; + }; + language = [ + { + name = "nu"; + language-servers = [ "nu-builtin-lsp" ]; + } + { + name = "php"; + language-servers = [ "psalm" ]; + } + { + name = "nix"; + formatter = { + command = "${pkgs.nixfmt-rfc-style}/bin/nixfmt"; + args = [ "--quiet" ]; + }; + auto-format = true; + } + { + name = "html"; + roots = [ ".git" ]; + language-servers = [ + "vscode-html-language-server" + "emmet-language-server" + ]; + auto-format = false; + } + ]; + }; + }; +} diff --git a/modules/editors/helix/settings.nix b/modules/editors/helix/settings.nix new file mode 100644 index 0000000..c6cc82c --- /dev/null +++ b/modules/editors/helix/settings.nix @@ -0,0 +1,74 @@ +{ ... }: +{ + programs.helix.settings = { + theme = "gruvbox_dark_hard"; + editor = { + line-number = "relative"; + bufferline = "multiple"; + color-modes = true; + cursorline = true; + auto-save = { + after-delay.enable = true; + after-delay.timeout = 10000; + }; + auto-format = true; + end-of-line-diagnostics = "hint"; + # slightly optimized based on my layout + jump-label-alphabet = "jfkdhaslgwenuiopbcmyzqrtvx"; + clipboard-provider = "wayland"; + inline-diagnostics = { + cursor-line = "hint"; + }; + lsp = { + display-messages = true; + display-inlay-hints = true; + }; + popup-border = "popup"; + shell = [ + "nu" + "-c" + ]; + statusline.left = [ + "mode" + "spinner" + "spacer" + "version-control" + "file-name" + "diagnostics" + "read-only-indicator" + "file-modification-indicator" + "spacer" + ]; + + statusline.right = [ + "workspace-diagnostics" + "register" + "position" + "selections" + "file-encoding" + "file-type" + ]; + idle-timeout = 50; + completion-timeout = 100; + indent-guides = { + render = true; + character = "│"; + skip-levels = 3; + }; + soft-wrap = { + enable = true; + }; + whitespace = { + render = { + space = "none"; + tab = "all"; + newline = "none"; + }; + characters = { + nbsp = "·"; + tab = "→"; + }; + }; + }; + }; +} diff --git a/modules/editors/zed/default.nix b/modules/editors/zed/default.nix new file mode 100644 index 0000000..243e61d --- /dev/null +++ b/modules/editors/zed/default.nix @@ -0,0 +1,42 @@ +{ ... }: +{ + programs.zed-editor = { + enable = true; + userSettings = { + features = { + edit_prediction_provider = null; + }; + show_edit_predictions = false; + middle_click_paste = false; + search = { + regex = true; + }; + inlay_hints = { + enabled = true; + }; + assistant = { + version = "2"; + enabled = false; + }; + diagnostics = { + include_warnings = false; + inline = { + enabled = true; + update_debounce_ms = 150; + padding = 4; + min_column = 0; + max_severity = null; + }; + }; + language_models = null; + vim_mode = true; + vim = { + default_mode = "helix_normal"; + }; + # ui_font_size = 16; + # WHY CAN I NOT OVERRIDE THIS + # habt'a lack gesoffen?! + # buffer_font_size = 16.; + }; + }; +} diff --git a/modules/shell/default.nix b/modules/shell/default.nix index 49f20b4..3410739 100644 --- a/modules/shell/default.nix +++ b/modules/shell/default.nix @@ -1,7 +1,6 @@ { pkgs, ... }: { imports = [ - ./helix.nix ./nu.nix ./starship.nix ./tty.nix diff --git a/modules/shell/helix.nix b/modules/shell/helix.nix deleted file mode 100644 index dc04045..0000000 --- a/modules/shell/helix.nix +++ /dev/null @@ -1,225 +0,0 @@ -{ config, ... }: -{ - home-manager.users.jade = - { - pkgs, - pkgs-stable, - ... - }: - { - home = { - sessionVariables.EDITOR = "hx"; - packages = [ - pkgs.wl-clipboard-rs - pkgs.nil - pkgs.vscode-langservers-extracted - pkgs.nodePackages.typescript-language-server - pkgs.emmet-language-server - pkgs.jdt-language-server - pkgs.tinymist - pkgs.typstyle - ]; - }; - programs.helix = { - enable = true; - defaultEditor = true; - settings = { - theme = "gruvbox_dark_hard"; - editor = { - line-number = "relative"; - bufferline = "multiple"; - color-modes = true; - cursorline = true; - auto-save = { - after-delay.enable = true; - after-delay.timeout = 10000; - }; - auto-format = true; - end-of-line-diagnostics = "hint"; - # slightly optimized based on my layout - jump-label-alphabet = "jfkdhaslgwenuiopbcmyzqrtvx"; - clipboard-provider = "wayland"; - inline-diagnostics = { - cursor-line = "hint"; - }; - lsp = { - display-messages = true; - display-inlay-hints = true; - }; - popup-border = "popup"; - shell = [ - "nu" - "-c" - ]; - statusline.left = [ - "mode" - "spinner" - "spacer" - "version-control" - "file-name" - "diagnostics" - "read-only-indicator" - "file-modification-indicator" - "spacer" - ]; - - statusline.right = [ - "workspace-diagnostics" - "register" - "position" - "selections" - "file-encoding" - "file-type" - ]; - idle-timeout = 50; - completion-timeout = 100; - indent-guides = { - render = true; - character = "│"; - skip-levels = 3; - }; - soft-wrap = { - enable = true; - }; - whitespace = { - render = { - space = "none"; - tab = "all"; - newline = "none"; - }; - characters = { - nbsp = "·"; - tab = "→"; - }; - }; - }; - keys = { - normal = { - space."=" = ":fmt"; - space.space = "@[]"; - - # smart tab++ - tab = "move_parent_node_end"; - S-tab = "move_parent_node_start"; - A-S = "@S[\\s]+"; - "'" = { - D = "@sgd"; - F = "@sgy"; - d = "@vgd"; - f = "@vgy"; - h = ":toggle-option lsp.display-inlay-hints"; - t = ":pipe flip-bool"; - }; - }; - insert = { - up = "no_op"; - down = "no_op"; - left = "no_op"; - right = "no_op"; - pageup = "no_op"; - pagedown = "no_op"; - home = "no_op"; - end = "no_op"; - - # smart tab ++ - S-tab = "move_parent_node_start"; - }; - select = { - # smart tab++ - tab = "extend_parent_node_end"; - S-tab = "extend_parent_node_start"; - }; - }; - }; - languages = { - language-server = { - "nu-builtin-lsp" = { - command = "${config.users.defaultUserShell}/bin/nu"; - args = [ "--lsp" ]; - }; - "rust-analyzer" = { - config = { - check.command = "check"; - completion.snippets.custom = { - "pub fn" = { - prefix = [ - "pfn" - "pubfn" - ]; - postfix = [ "pfn" ]; - body = [ - "pub fn $\{receiver\}() {" - "\\t$1" - "}" - ]; - scope = "type"; - }; - }; - completion.termSearch.enable = true; - diagnostics.enable = true; - inlayHints = { - bindingModeHints.enable = true; - closureCaptureHints.enable = true; - closureReturnTypeHints.enable = true; - discriminantHints.enable = true; - expressionAdjustmentHints = { - hideOutsideUnsafe = true; - }; - lifetimeElisionHints.enable = "skip_trivial"; - }; - interpret.tests = true; - lens = { - references = { - adt.enable = true; - trait.enable = true; - }; - }; - typing.autoClosingAngleBrackets.enable = true; - }; - }; - "emmet-language-server" = { - command = "emmet-language-server"; - args = [ "--stdio" ]; - }; - "psalm" = { - command = "psalm"; - args = [ "--language-server" ]; - }; - "tinymist" = { - config = { - exportPdf = "onType"; - formatterMode = "typstyle"; - }; - }; - }; - language = [ - { - name = "nu"; - language-servers = [ "nu-builtin-lsp" ]; - } - { - name = "php"; - language-servers = [ "psalm" ]; - } - { - name = "nix"; - formatter = { - command = "${pkgs.nixfmt-rfc-style}/bin/nixfmt"; - args = [ "--quiet" ]; - }; - auto-format = true; - } - { - name = "html"; - roots = [ ".git" ]; - language-servers = [ - "vscode-html-language-server" - "emmet-language-server" - ]; - auto-format = false; - } - ]; - }; - }; - }; -} From 05c04b926e9bdb05496096167e010b2fd4cd9ba0 Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Fri, 2 May 2025 15:36:02 +0200 Subject: [PATCH 295/301] unfuck_browser --- modules/desktop/home/browser.nix | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/modules/desktop/home/browser.nix b/modules/desktop/home/browser.nix index 0e6934e..6b45cc4 100644 --- a/modules/desktop/home/browser.nix +++ b/modules/desktop/home/browser.nix @@ -51,7 +51,7 @@ profiles.jade = { search = { force = true; - default = "DuckDuckGo"; + default = "ddg"; engines = { "Nix Packages" = { urls = [ @@ -200,8 +200,8 @@ } ]; }; - "Bing".metaData.hidden = true; - "Google".metaData.hidden = true; + "bing".metaData.hidden = true; + "google".metaData.hidden = true; "Amazon.de".metaData.hidden = true; }; }; From e0d68a2531c15768cd54f84ae460319a48935179 Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Fri, 2 May 2025 15:36:21 +0200 Subject: [PATCH 296/301] =?UTF-8?q?=F0=9F=94=A7=F0=9F=94=A7=F0=9F=94=A7?= =?UTF-8?q?=F0=9F=94=A7=F0=9F=94=A7=F0=9F=94=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- flake.nix | 2 +- modules/desktop-legacy/social.nix | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/flake.nix b/flake.nix index c9ca4dd..125a903 100644 --- a/flake.nix +++ b/flake.nix @@ -94,7 +94,7 @@ inherit pkgs-unstable-small pkgs-stable typst-within; }; home-manager.sharedModules = [ - inputs.nixcord.homeManagerModules.nixcord + inputs.nixcord.homeModules.nixcord ]; home-manager.users.jade = { diff --git a/modules/desktop-legacy/social.nix b/modules/desktop-legacy/social.nix index bd86033..55c0895 100644 --- a/modules/desktop-legacy/social.nix +++ b/modules/desktop-legacy/social.nix @@ -21,7 +21,7 @@ with lib; }: { programs.nixcord = { - enable = true; + enable = false; vesktop = { enable = true; # autoScroll.enable = true; From 2158be51edf9e0445a773664d47f41d169a16ef1 Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Fri, 2 May 2025 15:37:20 +0200 Subject: [PATCH 297/301] fix helix bind --- modules/editors/helix/binds.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/editors/helix/binds.nix b/modules/editors/helix/binds.nix index b7f6447..26b00b2 100644 --- a/modules/editors/helix/binds.nix +++ b/modules/editors/helix/binds.nix @@ -4,7 +4,7 @@ normal = { space."=" = ":fmt"; space.ret = "@[]"; - space.space = "ms"; + space.space = "@ms"; # smart tab++ tab = "move_parent_node_end"; From d56784fcc3b2e4ff00f25bf7df1ee389071c60d7 Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Fri, 2 May 2025 15:37:43 +0200 Subject: [PATCH 298/301] shader shader meow --- modules/desktop/home/niri/shaders/glitch-open.frag | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/modules/desktop/home/niri/shaders/glitch-open.frag b/modules/desktop/home/niri/shaders/glitch-open.frag index 4682dd1..5184af5 100644 --- a/modules/desktop/home/niri/shaders/glitch-open.frag +++ b/modules/desktop/home/niri/shaders/glitch-open.frag @@ -17,13 +17,17 @@ vec4 gen_px_squares(vec2 coords, vec4 color) { float p = niri_clamped_progress; float mix_alpha = - 1. - clamp((p - length(coords)) * 3.0, 0.0, 1.0); + clamp((1. - clamp((p - length(coords)) * 3.0, 0.0, 1.0)) * 1.3, 0., 1.); // vec4 blue = vec4(0.3568, 0.8078, 0.9803, color.a); - vec3 blue = vec3(0.552, 0.631, 1.); - vec3 dblue = vec3(0.419, 0.482, 0.839); + // vec3 blue = vec3(0.552, 0.631, 1.); + // vec3 dblue = vec3(0.419, 0.482, 0.839); + // vec3 dblue = vec3(float(0xd6) / 255., float(0x5d) / 255., float(0x0e) / 255.); + // vec3 blue = vec3(float(0xfe) / 255., float(0x80) / 255., float(0x19) / 255.); + vec3 dblue = vec3(float(0xdd) / 255., float(0xdd) / 255., float(0xdd) / 255.); + vec3 blue = vec3(float(0x55) / 255., float(0x7f) / 255., float(0xff) / 255.); if (color.a != 0. && p * p >= dot(coords, coords)) - return mix(color, vec4(grid_colored(coords_, dblue, blue), color.a), mix_alpha * 0.5); + return mix(color, vec4(grid_colored(coords_, dblue, blue), color.a), mix_alpha); else return vec4(0.); } From d2a9b1973649bf05af4b086854624e6b2e14b966 Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Fri, 2 May 2025 15:38:02 +0200 Subject: [PATCH 299/301] yeet --- justfile | 2 +- modules/net/hosts.nix | 3 --- 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/justfile b/justfile index 7460b44..fbe035d 100644 --- a/justfile +++ b/justfile @@ -9,7 +9,7 @@ build: tbuild: sudo nixos-rebuild switch --flake . --fast --log-format multiline-with-logs --show-trace -update: update-typst-configs +update: nix flake update --commit-lock-file --log-format multiline update-typst-configs: diff --git a/modules/net/hosts.nix b/modules/net/hosts.nix index 5f182a5..3a21884 100644 --- a/modules/net/hosts.nix +++ b/modules/net/hosts.nix @@ -14,9 +14,6 @@ "facebook.com" "snapchat.com" - "youtube.com" - "www.youtube.com" - "google-analytics.com" "stats.g.doubleclick.net" "googleadservices.com" From 4e44601002622b479620ef503d7c422f43543a8b Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Fri, 2 May 2025 15:38:15 +0200 Subject: [PATCH 300/301] flake.lock: Update --- flake.lock | 150 ++++++++++++++++++++++++++--------------------------- 1 file changed, 75 insertions(+), 75 deletions(-) diff --git a/flake.lock b/flake.lock index 9d0e9d5..1a20e6d 100644 --- a/flake.lock +++ b/flake.lock @@ -5,11 +5,11 @@ "fromYaml": "fromYaml" }, "locked": { - "lastModified": 1732200724, - "narHash": "sha256-+R1BH5wHhfnycySb7Sy5KbYEaTJZWm1h+LW1OtyhiTs=", + "lastModified": 1745523430, + "narHash": "sha256-EAYWV+kXbwsH+8G/8UtmcunDeKwLwSOyfcmzZUkWE/c=", "owner": "SenchoPens", "repo": "base16.nix", - "rev": "153d52373b0fb2d343592871009a286ec8837aec", + "rev": "58bfe2553d937d8af0564f79d5b950afbef69717", "type": "github" }, "original": { @@ -69,11 +69,11 @@ }, "crane": { "locked": { - "lastModified": 1742394900, - "narHash": "sha256-vVOAp9ahvnU+fQoKd4SEXB2JG2wbENkpqcwlkIXgUC0=", + "lastModified": 1745454774, + "narHash": "sha256-oLvmxOnsEKGtwczxp/CwhrfmQUG2ym24OMWowcoRhH8=", "owner": "ipetkov", "repo": "crane", - "rev": "70947c1908108c0c551ddfd73d4f750ff2ea67cd", + "rev": "efd36682371678e2b6da3f108fdb5c613b3ec598", "type": "github" }, "original": { @@ -105,11 +105,11 @@ "rust-analyzer-src": "rust-analyzer-src" }, "locked": { - "lastModified": 1742452566, - "narHash": "sha256-sVuLDQ2UIWfXUBbctzrZrXM2X05YjX08K7XHMztt36E=", + "lastModified": 1746167999, + "narHash": "sha256-18XGHsjk/5H8F0OGUCG56CeeW1u6qQ7tAfQK3azlwWg=", "owner": "nix-community", "repo": "fenix", - "rev": "7d9ba794daf5e8cc7ee728859bc688d8e26d5f06", + "rev": "bcbc23a4f3391c1c3657f1847cb693aaea3aed76", "type": "github" }, "original": { @@ -143,11 +143,11 @@ "firefox-gnome-theme": { "flake": false, "locked": { - "lastModified": 1741628778, - "narHash": "sha256-RsvHGNTmO2e/eVfgYK7g+eYEdwwh7SbZa+gZkT24MEA=", + "lastModified": 1744642301, + "narHash": "sha256-5A6LL7T0lttn1vrKsNOKUk9V0ittdW0VEqh6AtefxJ4=", "owner": "rafaelmardojai", "repo": "firefox-gnome-theme", - "rev": "5a81d390bb64afd4e81221749ec4bffcbeb5fa80", + "rev": "59e3de00f01e5adb851d824cf7911bd90c31083a", "type": "github" }, "original": { @@ -308,11 +308,11 @@ ] }, "locked": { - "lastModified": 1741379162, - "narHash": "sha256-srpAbmJapkaqGRE3ytf3bj4XshspVR5964OX5LfjDWc=", + "lastModified": 1742649964, + "narHash": "sha256-DwOTp7nvfi8mRfuL1escHDXabVXFGT1VlPD1JHrtrco=", "owner": "cachix", "repo": "git-hooks.nix", - "rev": "b5a62751225b2f62ff3147d0a334055ebadcd5cc", + "rev": "dcf5072734cb576d2b0c59b2ac44f5050b5eac82", "type": "github" }, "original": { @@ -367,11 +367,11 @@ ] }, "locked": { - "lastModified": 1743513930, - "narHash": "sha256-ExRQkfXHwHbf6nKgnwDB0vSNInUS16cubvEVm3PrHeQ=", + "lastModified": 1746177088, + "narHash": "sha256-hmHKl4meWr6ryzqQAwRD3+3Ihfb/Y/0CbK+WnE+oa6Q=", "owner": "nix-community", "repo": "home-manager", - "rev": "55cf1f16324e694c991e846ad5fc897f0f75ac64", + "rev": "f045bd46b73c3b0ed4e46cdb6036b3d5823d7dee", "type": "github" }, "original": { @@ -388,11 +388,11 @@ ] }, "locked": { - "lastModified": 1741635347, - "narHash": "sha256-2aYfV44h18alHXopyfL4D9GsnpE5XlSVkp4MGe586VU=", + "lastModified": 1746040799, + "narHash": "sha256-osgPX/SzIpkR50vev/rqoTEAVkEcOWXoQXmbzsaI4KU=", "owner": "nix-community", "repo": "home-manager", - "rev": "7fb8678716c158642ac42f9ff7a18c0800fea551", + "rev": "5f217e5a319f6c186283b530f8c975e66c028433", "type": "github" }, "original": { @@ -448,11 +448,11 @@ "xwayland-satellite-unstable": "xwayland-satellite-unstable" }, "locked": { - "lastModified": 1743513993, - "narHash": "sha256-4ActcWd2XOBei7ZcDrL8zWxUWh1TxwwsAp6CTwlgjog=", + "lastModified": 1746142190, + "narHash": "sha256-t36K3TWLMRWoGyjYyo+H8bBquDcp4orZqNZVagWNjwY=", "owner": "sodiboo", "repo": "niri-flake", - "rev": "cdca190c377558ee9109d848b20ecb3bf941ef88", + "rev": "af701c1c16c289b1b14f333d844b4f756308d244", "type": "github" }, "original": { @@ -481,11 +481,11 @@ "niri-unstable": { "flake": false, "locked": { - "lastModified": 1743492917, - "narHash": "sha256-OqLDg0Ody1HX23hgjvjIkfZPNhYKxbkj/ONcDjdD4Ik=", + "lastModified": 1746124654, + "narHash": "sha256-LmhkAt2KLvf8lp+kEUQuTFmmv7iXO8IkwwSaPasfXJw=", "owner": "YaLTeR", "repo": "niri", - "rev": "60034a57efd9c8130b05797b37cbc187a8c13145", + "rev": "6c9705dd4b2eaba25f024d1a3efd7943fd393632", "type": "github" }, "original": { @@ -502,11 +502,11 @@ "treefmt-nix": "treefmt-nix" }, "locked": { - "lastModified": 1743453178, - "narHash": "sha256-TdVPzQabTKVeX50Mbwu6Tq2l65e5WQk2o3S4NHyRBA0=", + "lastModified": 1746149931, + "narHash": "sha256-oeTNy7tgzYaw53yYtkfe9kayuqITHiKOgdu/tEarDyo=", "owner": "kaylorben", "repo": "nixcord", - "rev": "ea80fdaf62168f85ce9813bc8f21fe45f892f5e7", + "rev": "0b3661345df57314322607738b38509be4a34d80", "type": "github" }, "original": { @@ -517,11 +517,11 @@ }, "nixos-hardware": { "locked": { - "lastModified": 1743420942, - "narHash": "sha256-b/exDDQSLmENZZgbAEI3qi9yHkuXAXCPbormD8CSJXo=", + "lastModified": 1745955289, + "narHash": "sha256-mmV2oPhQN+YF2wmnJzXX8tqgYmUYXUj3uUUBSTmYN5o=", "owner": "NixOS", "repo": "nixos-hardware", - "rev": "de6fc5551121c59c01e2a3d45b277a6d05077bc4", + "rev": "72081c9fbbef63765ae82bff9727ea79cc86bd5b", "type": "github" }, "original": { @@ -531,11 +531,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1743315132, - "narHash": "sha256-6hl6L/tRnwubHcA4pfUUtk542wn2Om+D4UnDhlDW9BE=", + "lastModified": 1745930157, + "narHash": "sha256-y3h3NLnzRSiUkYpnfvnS669zWZLoqqI6NprtLQ+5dck=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "52faf482a3889b7619003c0daec593a1912fddc1", + "rev": "46e634be05ce9dc6d4db8e664515ba10b78151ae", "type": "github" }, "original": { @@ -559,11 +559,11 @@ }, "nixpkgs-stable": { "locked": { - "lastModified": 1743367904, - "narHash": "sha256-sOos1jZGKmT6xxPvxGQyPTApOunXvScV4lNjBCXd/CI=", + "lastModified": 1746055187, + "narHash": "sha256-3dqArYSMP9hM7Qpy5YWhnSjiqniSaT2uc5h2Po7tmg0=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "7ffe0edc685f14b8c635e3d6591b0bbb97365e6c", + "rev": "3e362ce63e16b9572d8c2297c04f7c19ab6725a5", "type": "github" }, "original": { @@ -575,11 +575,11 @@ }, "nixpkgs-stable_2": { "locked": { - "lastModified": 1743367904, - "narHash": "sha256-sOos1jZGKmT6xxPvxGQyPTApOunXvScV4lNjBCXd/CI=", + "lastModified": 1746055187, + "narHash": "sha256-3dqArYSMP9hM7Qpy5YWhnSjiqniSaT2uc5h2Po7tmg0=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "7ffe0edc685f14b8c635e3d6591b0bbb97365e6c", + "rev": "3e362ce63e16b9572d8c2297c04f7c19ab6725a5", "type": "github" }, "original": { @@ -590,11 +590,11 @@ }, "nixpkgs-unstable-small": { "locked": { - "lastModified": 1743472173, - "narHash": "sha256-xwNv3FYTC5pl4QVZ79gUxqCEvqKzcKdXycpH5UbYscw=", + "lastModified": 1746165930, + "narHash": "sha256-MkYNib57sO+nI6KAbpGLseXFmJVZ04QP6Celntnay8E=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "88e992074d86ad50249de12b7fb8dbaadf8dc0c5", + "rev": "97e6d418edc7a9a85d505f96f1e65ca9d6a5f7a8", "type": "github" }, "original": { @@ -605,11 +605,11 @@ }, "nixpkgs_2": { "locked": { - "lastModified": 1742800061, - "narHash": "sha256-oDJGK1UMArK52vcW9S5S2apeec4rbfNELgc50LqiPNs=", + "lastModified": 1744868846, + "narHash": "sha256-5RJTdUHDmj12Qsv7XOhuospjAjATNiTMElplWnJE9Hs=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "1750f3c1c89488e2ffdd47cab9d05454dddfb734", + "rev": "ebe4301cbd8f81c4f8d3244b3632338bbeb6d49c", "type": "github" }, "original": { @@ -621,11 +621,11 @@ }, "nixpkgs_3": { "locked": { - "lastModified": 1743315132, - "narHash": "sha256-6hl6L/tRnwubHcA4pfUUtk542wn2Om+D4UnDhlDW9BE=", + "lastModified": 1746141548, + "narHash": "sha256-IgBWhX7A2oJmZFIrpRuMnw5RAufVnfvOgHWgIdds+hc=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "52faf482a3889b7619003c0daec593a1912fddc1", + "rev": "f02fddb8acef29a8b32f10a335d44828d7825b78", "type": "github" }, "original": { @@ -636,11 +636,11 @@ }, "nixpkgs_4": { "locked": { - "lastModified": 1741513245, - "narHash": "sha256-7rTAMNTY1xoBwz0h7ZMtEcd8LELk9R5TzBPoHuhNSCk=", + "lastModified": 1745930157, + "narHash": "sha256-y3h3NLnzRSiUkYpnfvnS669zWZLoqqI6NprtLQ+5dck=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "e3e32b642a31e6714ec1b712de8c91a3352ce7e1", + "rev": "46e634be05ce9dc6d4db8e664515ba10b78151ae", "type": "github" }, "original": { @@ -676,11 +676,11 @@ "treefmt-nix": "treefmt-nix_2" }, "locked": { - "lastModified": 1741693509, - "narHash": "sha256-emkxnsZstiJWmGACimyAYqIKz2Qz5We5h1oBVDyQjLw=", + "lastModified": 1746056780, + "narHash": "sha256-/emueQGaoT4vu0QjU9LDOG5roxRSfdY0K2KkxuzazcM=", "owner": "nix-community", "repo": "NUR", - "rev": "5479646b2574837f1899da78bdf9a48b75a9fb27", + "rev": "d476cd0972dd6242d76374fcc277e6735715c167", "type": "github" }, "original": { @@ -708,11 +708,11 @@ "rust-analyzer-src": { "flake": false, "locked": { - "lastModified": 1742296961, - "narHash": "sha256-gCpvEQOrugHWLimD1wTFOJHagnSEP6VYBDspq96Idu0=", + "lastModified": 1746093169, + "narHash": "sha256-3gmUmzIzfzlgF/b4HXvtoBIP4bKofVeEubX7LcPBYLo=", "owner": "rust-lang", "repo": "rust-analyzer", - "rev": "15d87419f1a123d8f888d608129c3ce3ff8f13d4", + "rev": "298fa81aacda7b06de4db55c377b1aa081906bc9", "type": "github" }, "original": { @@ -773,11 +773,11 @@ "tinted-zed": "tinted-zed" }, "locked": { - "lastModified": 1743496321, - "narHash": "sha256-xhHg8ixBhZngvGOMb2SJuJEHhHA10n8pA02fEKuKzek=", + "lastModified": 1746158690, + "narHash": "sha256-Pe2emz36QL8GOILXvvmH/agqkspZFrcOrQxv6uufaEc=", "owner": "danth", "repo": "stylix", - "rev": "54721996d6590267d095f63297d9051e9342a33d", + "rev": "bc38629511dd9cc78c5ca37a6e546fa66330d50e", "type": "github" }, "original": { @@ -882,11 +882,11 @@ "tinted-schemes": { "flake": false, "locked": { - "lastModified": 1741468895, - "narHash": "sha256-YKM1RJbL68Yp2vESBqeZQBjTETXo8mCTTzLZyckCfZk=", + "lastModified": 1744974599, + "narHash": "sha256-Fg+rdGs5FAgfkYNCs74lnl8vkQmiZVdBsziyPhVqrlY=", "owner": "tinted-theming", "repo": "schemes", - "rev": "47c8c7726e98069cade5827e5fb2bfee02ce6991", + "rev": "28c26a621123ad4ebd5bbfb34ab39421c0144bdd", "type": "github" }, "original": { @@ -898,11 +898,11 @@ "tinted-tmux": { "flake": false, "locked": { - "lastModified": 1740877430, - "narHash": "sha256-zWcCXgdC4/owfH/eEXx26y5BLzTrefjtSLFHWVD5KxU=", + "lastModified": 1745111349, + "narHash": "sha256-udV+nHdpqgkJI9D0mtvvAzbqubt9jdifS/KhTTbJ45w=", "owner": "tinted-theming", "repo": "tinted-tmux", - "rev": "d48ee86394cbe45b112ba23ab63e33656090edb4", + "rev": "e009f18a01182b63559fb28f1c786eb027c3dee9", "type": "github" }, "original": { @@ -935,11 +935,11 @@ ] }, "locked": { - "lastModified": 1742370146, - "narHash": "sha256-XRE8hL4vKIQyVMDXykFh4ceo3KSpuJF3ts8GKwh5bIU=", + "lastModified": 1744961264, + "narHash": "sha256-aRmUh0AMwcbdjJHnytg1e5h5ECcaWtIFQa6d9gI85AI=", "owner": "numtide", "repo": "treefmt-nix", - "rev": "adc195eef5da3606891cedf80c0d9ce2d3190808", + "rev": "8d404a69efe76146368885110f29a2ca3700bee6", "type": "github" }, "original": { @@ -1013,11 +1013,11 @@ "xwayland-satellite-unstable": { "flake": false, "locked": { - "lastModified": 1743346993, - "narHash": "sha256-i7rWd/5BcqLgQEtB5L/6gKN5R5GUJcmm34F+iBivH60=", + "lastModified": 1745730655, + "narHash": "sha256-Tdsw5lD/XM8i1GnQr7ombqnEaCpt/voPs2AbjuYBbjI=", "owner": "Supreeeme", "repo": "xwayland-satellite", - "rev": "45c055696437a08e3989d9b91d9c617b84cc2bc3", + "rev": "56a681bfecc5831f41f8eb0ec8c7e96c6b277153", "type": "github" }, "original": { From cf545e9bf849766db1b7e4ff1be2fce6837d9507 Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Fri, 2 May 2025 16:14:21 +0200 Subject: [PATCH 301/301] =?UTF-8?q?u=C3=A4rgh?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../monosodium-glutamate-g/configuration.nix | 2 +- modules/desktop-legacy/social.nix | 1 + modules/editors/default.nix | 5 +- modules/editors/zed/default.nix | 110 ++++++++++++------ 4 files changed, 79 insertions(+), 39 deletions(-) diff --git a/hosts/monosodium-glutamate-g/configuration.nix b/hosts/monosodium-glutamate-g/configuration.nix index 9b27e5c..dbd0cec 100644 --- a/hosts/monosodium-glutamate-g/configuration.nix +++ b/hosts/monosodium-glutamate-g/configuration.nix @@ -3,7 +3,6 @@ # and in the NixOS manual (accessible by running ‘nixos-help’). { pkgs, - pkgs-stable, ... }: { @@ -16,6 +15,7 @@ jade = { hwKey.pamAuth.enable = true; + editors.zed.enable = true; desktop = { media = { obs = true; diff --git a/modules/desktop-legacy/social.nix b/modules/desktop-legacy/social.nix index 55c0895..6325c97 100644 --- a/modules/desktop-legacy/social.nix +++ b/modules/desktop-legacy/social.nix @@ -32,6 +32,7 @@ with lib; }; }; home.packages = with pkgs; [ + vesktop signal-desktop mumble element-desktop diff --git a/modules/editors/default.nix b/modules/editors/default.nix index 2c28619..8881b27 100644 --- a/modules/editors/default.nix +++ b/modules/editors/default.nix @@ -1,12 +1,15 @@ { ... }: { programs.niri.enable = true; + imports = [ + ./zed + ]; home-manager.users.jade = { pkgs, ... }: { + home.packages = [ pkgs.nixd ]; imports = [ ./helix - ./zed ]; }; } diff --git a/modules/editors/zed/default.nix b/modules/editors/zed/default.nix index 243e61d..d103c8c 100644 --- a/modules/editors/zed/default.nix +++ b/modules/editors/zed/default.nix @@ -1,42 +1,78 @@ -{ ... }: { - programs.zed-editor = { - enable = true; - userSettings = { - features = { - edit_prediction_provider = null; - }; - show_edit_predictions = false; - middle_click_paste = false; - search = { - regex = true; - }; - inlay_hints = { - enabled = true; - }; - assistant = { - version = "2"; - enabled = false; - }; - diagnostics = { - include_warnings = false; - inline = { - enabled = true; - update_debounce_ms = 150; - padding = 4; - min_column = 0; - max_severity = null; + pkgs, + config, + lib, + ... +}: +with lib; +{ + options.jade.editors = { + zed.enable = mkEnableOption "Enable Zed Editor"; + }; + config = mkIf config.jade.editors.zed.enable { + home-manager.users.jade = + { pkgs, ... }: + { + programs.zed-editor = { + enable = true; + extraPackages = [ + (pkgs.rustPlatform.buildRustPackage rec { + pname = "discord-presence-lsp"; + version = "d6622e5d4dbbf9f61764458c2b50ba2e58789307"; + cargoHash = "sha256-JLNCEeo9fKeV4vTtPs+Yj2wRO1RKP2fuetrPlXcPBjA="; + + src = pkgs.fetchFromGitHub { + owner = "xhyrom"; + repo = "zed-discord-presence"; + rev = version; + hash = "sha256-RmpY0xkJYNDYn6SWNdKGpPetmBxf2/xY25FLeJqf0Po="; + }; + + cargoBuildFlags = "--package discord-presence-lsp"; + }) + ]; + extensions = [ + "discord-presence" # yes, i sunk that low + "nix" + "nu" + ]; + userSettings = { + features = { + edit_prediction_provider = null; + }; + show_edit_predictions = false; + middle_click_paste = false; + search = { + regex = true; + }; + inlay_hints = { + enabled = true; + }; + assistant = { + version = "2"; + enabled = false; + }; + diagnostics = { + include_warnings = false; + inline = { + enabled = true; + update_debounce_ms = 150; + padding = 4; + min_column = 0; + max_severity = null; + }; + }; + language_models = null; + vim_mode = true; + vim = { + default_mode = "helix_normal"; + }; + # ui_font_size = 16; + # WHY CAN I NOT OVERRIDE THIS + # habt'a lack gesoffen?! + # buffer_font_size = 16.; + }; }; }; - language_models = null; - vim_mode = true; - vim = { - default_mode = "helix_normal"; - }; - # ui_font_size = 16; - # WHY CAN I NOT OVERRIDE THIS - # habt'a lack gesoffen?! - # buffer_font_size = 16.; - }; }; }