diff options
Diffstat (limited to 'pkgs/haskell')
| -rw-r--r-- | pkgs/haskell/blessings.nix | 24 | ||||
| -rw-r--r-- | pkgs/haskell/desktop-pager.nix | 16 | ||||
| -rw-r--r-- | pkgs/haskell/hack.nix | 14 | ||||
| -rw-r--r-- | pkgs/haskell/mailaids.nix | 22 | ||||
| -rw-r--r-- | pkgs/haskell/much.nix | 30 | ||||
| -rw-r--r-- | pkgs/haskell/purebred-email/default.nix | 31 | ||||
| -rw-r--r-- | pkgs/haskell/purebred-email/untweak-mime-version-header.patch | 65 | ||||
| -rw-r--r-- | pkgs/haskell/seq2.nix | 14 | ||||
| -rw-r--r-- | pkgs/haskell/terminal-scanner.nix | 13 | ||||
| -rw-r--r-- | pkgs/haskell/terminal-utilities.nix | 13 | ||||
| -rw-r--r-- | pkgs/haskell/text-wcwidth.nix | 15 | ||||
| -rw-r--r-- | pkgs/haskell/xmonad-tv/src/main.hs | 57 | ||||
| -rw-r--r-- | pkgs/haskell/xoutinfo.nix | 6 |
13 files changed, 258 insertions, 62 deletions
diff --git a/pkgs/haskell/blessings.nix b/pkgs/haskell/blessings.nix index 65661aa..9ed1664 100644 --- a/pkgs/haskell/blessings.nix +++ b/pkgs/haskell/blessings.nix @@ -1,16 +1,18 @@ -{ mkDerivation, base, bytestring, fetchgit, hspec, QuickCheck, lib, mylib, text }: - +{ mkDerivation, base, dlist, extra, fetchgit, hspec, lib +, mono-traversable, QuickCheck, seq2, text +}: mkDerivation { pname = "blessings"; - version = "2.3.0"; + version = "3.0.0"; src = fetchgit { - url = http://cgit.ni.krebsco.de/blessings; - rev = "refs/tags/v2.3.0"; - hash = "sha256-fS79UOHBMfJHyz7E0Rx4lKZSZOD2G99h2zuDT+SOUJQ="; + url = "https://cgit.krebsco.de/blessings"; + sha256 = "1x4wa9v9kgd8z11pxf9clsbk1527bqq86zvk1mp26dzwkbw8kgpk"; + rev = "2e33bc5ac86c81f0c9ee823b4913bce776ba5a0d"; + fetchSubmodules = true; }; - libraryHaskellDepends = [ base bytestring text ]; - testHaskellDepends = [ base hspec QuickCheck ]; - doHaddock = false; - # WTFPL is the true license, which is unknown to cabal. - license = lib.licenses.wtfpl; + libraryHaskellDepends = [ + base dlist extra mono-traversable seq2 text + ]; + testHaskellDepends = [ base hspec mono-traversable QuickCheck ]; + license = lib.licenses.mit; } diff --git a/pkgs/haskell/desktop-pager.nix b/pkgs/haskell/desktop-pager.nix index 3b96159..fd90c1e 100644 --- a/pkgs/haskell/desktop-pager.nix +++ b/pkgs/haskell/desktop-pager.nix @@ -1,15 +1,15 @@ { mkDerivation, aeson, base, blessings, bytestring, containers -, data-default, extra, fetchgit, hack, lib, optparse-applicative -, probability, scanner, speculate, split, terminal-size, text, unix -, utf8-string, X11 +, data-default, extra, fetchgit, hack, lib, mono-traversable +, optparse-applicative, probability, speculate, split +, terminal-scanner, terminal-size, text, unix, utf8-string, X11 }: mkDerivation { pname = "desktop-pager"; - version = "1.0.0"; + version = "1.0.2"; src = fetchgit { url = "https://cgit.krebsco.de/desktop-pager"; - sha256 = "11v4f2sz6p69fx2804w0akb8xqv56g89chjyx77jhwqcng2bn6pw"; - rev = "0894fbe50ee2f63b510d32ab8c524134e450f20d"; + sha256 = "1dvqm8a0d8lh227ck0dhyfxkjknhjgjpcwjh3dvps3721p1qldjn"; + rev = "f792f1db052afd4f4af9bca568fe2b8fb96ea7e8"; fetchSubmodules = true; }; isLibrary = true; @@ -17,8 +17,8 @@ mkDerivation { libraryHaskellDepends = [ base extra utf8-string X11 ]; executableHaskellDepends = [ aeson base blessings bytestring containers data-default hack - optparse-applicative probability scanner speculate split - terminal-size text unix X11 + mono-traversable optparse-applicative probability speculate split + terminal-scanner terminal-size text unix X11 ]; license = lib.licenses.mit; } diff --git a/pkgs/haskell/hack.nix b/pkgs/haskell/hack.nix index f1b22b5..b6c3ca6 100644 --- a/pkgs/haskell/hack.nix +++ b/pkgs/haskell/hack.nix @@ -1,21 +1,23 @@ { mkDerivation, base, blessings, containers, data-default, fetchgit -, lens, lib, mtl, old-locale, process, input-scanner, time, unix, zippers +, lens, lib, mono-traversable, mtl, old-locale, process +, terminal-scanner, time, unix, zippers }: mkDerivation { pname = "hack"; - version = "1.0.2"; + version = "1.0.4"; src = fetchgit { url = "https://cgit.krebsco.de/hack"; - hash = "sha256-QHSGF4wFwLyn8W8jYbN1QajMnmQqUI+7VWk7yVvJgIg="; - rev = "refs/tags/1.0.2"; + sha256 = "1in95j2fx12kh994ajd5wpzsf5nrk7bs1rqjjnn7gq5zal216kkq"; + rev = "4f81ea639fb7754b1169f358bdae8225e6e4e2b3"; fetchSubmodules = true; }; isLibrary = true; isExecutable = true; libraryHaskellDepends = [ base ]; executableHaskellDepends = [ - base blessings containers data-default lens mtl old-locale process - input-scanner time unix zippers + base blessings containers data-default lens mono-traversable mtl + old-locale process terminal-scanner time unix zippers ]; license = lib.licenses.mit; + mainProgram = "hack"; } diff --git a/pkgs/haskell/mailaids.nix b/pkgs/haskell/mailaids.nix new file mode 100644 index 0000000..815613c --- /dev/null +++ b/pkgs/haskell/mailaids.nix @@ -0,0 +1,22 @@ +{ mkDerivation, aeson, aeson-pretty, base, bytestring +, case-insensitive, either, fetchgit, lens, lib +, optparse-applicative, purebred-email, text, vector, word8 +}: +mkDerivation { + pname = "mailaids"; + version = "1.1.0+parts"; + src = fetchgit { + url = "https://cgit.krebsco.de/mailaids"; + sha256 = "0xwd196zrgfv2d7x1pgp1yzqj1hrpwr0m54i6mnrmk6022yx46hl"; + rev = "02d8996bb6aaeb2881e2df33da5167b649edb822"; + fetchSubmodules = true; + }; + isLibrary = false; + isExecutable = true; + executableHaskellDepends = [ + aeson aeson-pretty base bytestring case-insensitive either lens + optparse-applicative purebred-email text vector word8 + ]; + license = lib.licenses.mit; + mainProgram = "mailaid"; +} diff --git a/pkgs/haskell/much.nix b/pkgs/haskell/much.nix index 865294d..cdfe011 100644 --- a/pkgs/haskell/much.nix +++ b/pkgs/haskell/much.nix @@ -2,18 +2,19 @@ , blaze-builder, blessings, bytestring, case-insensitive , containers, data-default, deepseq, directory, either , email-header, fetchgit, filepath, friendly-time, http-types -, hyphenation, lib, linebreak, network, old-locale -, optparse-applicative, process, random, rosezipper, safe, scanner -, servant-server, split, terminal-size, text, time, transformers +, hyphenation, lib, linebreak, mono-traversable, network +, old-locale, optparse-applicative, process, process-extras, random +, rosezipper, safe, servant-server, split, terminal-scanner +, terminal-size, text, text-wcwidth, time, transformers , transformers-compat, unix, vector, wai, warp }: -mkDerivation rec { +mkDerivation { pname = "much"; - version = "1.3.2"; + version = "1.4.2"; src = fetchgit { url = "https://cgit.krebsco.de/much"; - hash = "sha256-q65EYO1d3NYVv2NECkGWPb1TyHGdARNi/GX4pgQmljc="; - rev = "refs/tags/${version}"; + sha256 = "088cbzlvh23625617qyp1s3q0qb4il4b3f4ji061gq3bikycrhkf"; + rev = "36184551980eb59b67189c2a782c7f4461285d23"; fetchSubmodules = true; }; isLibrary = true; @@ -22,15 +23,18 @@ mkDerivation rec { aeson attoparsec base base64-bytestring blaze-builder blessings bytestring case-insensitive containers data-default deepseq directory either email-header filepath friendly-time http-types - hyphenation linebreak network old-locale optparse-applicative - process random rosezipper safe scanner servant-server split - terminal-size text time transformers transformers-compat unix - vector wai warp + hyphenation linebreak mono-traversable network old-locale + optparse-applicative process process-extras random rosezipper safe + servant-server split terminal-scanner terminal-size text + text-wcwidth time transformers transformers-compat unix vector wai + warp ]; executableHaskellDepends = [ aeson base blessings bytestring case-insensitive containers - data-default deepseq directory filepath hyphenation linebreak - process rosezipper safe scanner text time transformers unix + data-default deepseq directory hyphenation linebreak + mono-traversable process rosezipper safe terminal-scanner text + text-wcwidth time transformers ]; license = lib.licenses.mit; + mainProgram = "much"; } diff --git a/pkgs/haskell/purebred-email/default.nix b/pkgs/haskell/purebred-email/default.nix new file mode 100644 index 0000000..34c3ed6 --- /dev/null +++ b/pkgs/haskell/purebred-email/default.nix @@ -0,0 +1,31 @@ +{ mkDerivation, attoparsec, base, base64-bytestring, bytestring +, case-insensitive, concise, deepseq, fetchgit, hedgehog, lens, lib +, QuickCheck, quickcheck-instances, random, semigroupoids +, stringsearch, tasty, tasty-golden, tasty-hedgehog, tasty-hunit +, tasty-quickcheck, text, time +}: +mkDerivation { + pname = "purebred-email"; + version = "0.6.0.2"; + src = fetchgit { + url = "https://github.com/purebred-mua/purebred-email"; + hash = "sha256-P9RmQZ4fvQ1LGdQXFAAP/43VR8TZtQASs2cDK/zjHWg="; + rev = "23c69d5c923a91581c366e23fc7de3992dd81e27"; + fetchSubmodules = true; + }; + isLibrary = true; + isExecutable = true; + libraryHaskellDepends = [ + attoparsec base base64-bytestring bytestring case-insensitive + concise deepseq lens random semigroupoids stringsearch text time + ]; + testHaskellDepends = [ + attoparsec base bytestring case-insensitive hedgehog lens + QuickCheck quickcheck-instances random tasty tasty-golden + tasty-hedgehog tasty-hunit tasty-quickcheck text time + ]; + homepage = "https://github.com/purebred-mua/purebred-email"; + description = "types and parser for email messages (including MIME)"; + license = lib.licenses.agpl3Plus; + jailbreak = true; +} diff --git a/pkgs/haskell/purebred-email/untweak-mime-version-header.patch b/pkgs/haskell/purebred-email/untweak-mime-version-header.patch new file mode 100644 index 0000000..97baf7a --- /dev/null +++ b/pkgs/haskell/purebred-email/untweak-mime-version-header.patch @@ -0,0 +1,65 @@ +diff --git a/src/Data/MIME.hs b/src/Data/MIME.hs +index 19af53e..be8cbd4 100644 +--- a/src/Data/MIME.hs ++++ b/src/Data/MIME.hs +@@ -810,7 +810,6 @@ multipart takeTillEnd boundary = + -- | Sets the @MIME-Version: 1.0@ header. + -- + instance RenderMessage MIME where +- tweakHeaders = set (headers . at "MIME-Version") (Just "1.0") + buildBody h z = Just $ case z of + Part partbody -> Builder.byteString partbody + Encapsulated msg -> buildMessage msg +diff --git a/tests/Generator.hs b/tests/Generator.hs +index 9e1f166..23bd122 100644 +--- a/tests/Generator.hs ++++ b/tests/Generator.hs +@@ -64,7 +64,7 @@ exampleMailsParseSuccessfully = + textPlain7bit :: MIMEMessage + textPlain7bit = + let m = createTextPlainMessage "This is a simple mail." +- in over headers (\(Headers xs) -> Headers $ (CI.mk "Subject", "Hello there") : xs) m ++ in over headers (\(Headers xs) -> Headers $ (CI.mk "MIME-Version", "1.0") : (CI.mk "Subject", "Hello there") : xs) m + + multiPartMail :: MIMEMessage + multiPartMail = +@@ -72,13 +72,16 @@ multiPartMail = + to' = Single $ Mailbox Nothing (AddrSpec "bar" (DomainDotAtom $ pure "bar.com")) + subject = "Hello there" + p = createTextPlainMessage "This is a simple mail." ++ & set (headers . at "MIME-Version") (Just "1.0") + a = createAttachment + contentTypeApplicationOctetStream + (Just "foo.bin") + "fileContentsASDF" ++ & set (headers . at "MIME-Version") (Just "1.0") + now = UTCTime (ModifiedJulianDay 123) (secondsToDiffTime 123) + in createMultipartMixedMessage "asdf" (fromList [p, a]) +- & set (headers . at "From") (Just $ renderMailboxes [from']) ++ & set (headers . at "MIME-Version") (Just "1.0") ++ . set (headers . at "From") (Just $ renderMailboxes [from']) + . set (headers . at "To") (Just $ renderAddresses [to']) + . set (headers . at "Date") (Just $ renderRFC5422Date now) + . set (headers . at "Subject") (Just $ T.encodeUtf8 subject) +diff --git a/tests/Message.hs b/tests/Message.hs +index 6711519..3e40397 100644 +--- a/tests/Message.hs ++++ b/tests/Message.hs +@@ -29,7 +29,7 @@ import Data.Char (isPrint) + import Data.Foldable (fold) + import Data.List.NonEmpty (NonEmpty(..), intersperse) + +-import Control.Lens (set, view) ++import Control.Lens ((&), at, set, view) + import qualified Data.ByteString as B + import qualified Data.Text as T + +@@ -99,7 +99,7 @@ genMessage = Gen.choice [ genTextPlain, genMultipart, encapsulate <$> genMessage + prop_messageRoundTrip :: Property + prop_messageRoundTrip = property $ do + msg <- forAll genMessage +- parse (message mime) (renderMessage msg) === Right msg ++ parse (message mime) (renderMessage $ msg & set (headers . at "MIME-Version") (Just "1.0")) === Right msg + + prop_messageFromRoundTrip :: Property + prop_messageFromRoundTrip = property $ do diff --git a/pkgs/haskell/seq2.nix b/pkgs/haskell/seq2.nix new file mode 100644 index 0000000..9d18f92 --- /dev/null +++ b/pkgs/haskell/seq2.nix @@ -0,0 +1,14 @@ +{ mkDerivation, base, fetchgit, lib }: +mkDerivation { + pname = "seq2"; + version = "1.0.0"; + src = fetchgit { + url = "https://cgit.krebsco.de/seq2"; + sha256 = "03b90b68xpk00v13cc45aw148z1spph8vyqga8vmif9iv5g0lfjn"; + rev = "6aeb56c36a9a47c9216c8f9252ca26d091506c73"; + fetchSubmodules = true; + }; + libraryHaskellDepends = [ base ]; + homepage = "https://cgit.krebsco.de/seq2"; + license = lib.licenses.mit; +} diff --git a/pkgs/haskell/terminal-scanner.nix b/pkgs/haskell/terminal-scanner.nix new file mode 100644 index 0000000..ca16644 --- /dev/null +++ b/pkgs/haskell/terminal-scanner.nix @@ -0,0 +1,13 @@ +{ mkDerivation, base, fetchgit, lib }: +mkDerivation { + pname = "terminal-scanner"; + version = "1.1.0"; + src = fetchgit { + url = "https://cgit.krebsco.de/terminal-scanner"; + sha256 = "0x37g62km90pgamrn3slr513jw29cb9zmrnb9frs8j8r9yq50fz0"; + rev = "a77acbcc13f8eb50e1277d07cf2a10004b58af71"; + fetchSubmodules = true; + }; + libraryHaskellDepends = [ base ]; + license = lib.licenses.mit; +} diff --git a/pkgs/haskell/terminal-utilities.nix b/pkgs/haskell/terminal-utilities.nix new file mode 100644 index 0000000..eeab32f --- /dev/null +++ b/pkgs/haskell/terminal-utilities.nix @@ -0,0 +1,13 @@ +{ mkDerivation, base, fetchgit, lib }: +mkDerivation { + pname = "terminal-utilities"; + version = "1.0.0"; + src = fetchgit { + url = "https://cgit.krebsco.de/terminal-utilities"; + sha256 = "0kpkm87g5ab0s22zly994ql8hfc0gbqc5s7ln4ngav2k91a0wp7j"; + rev = "e2c0cc11a71c785b268f31f60bed2a79e00a4d61"; + fetchSubmodules = true; + }; + libraryHaskellDepends = [ base ]; + license = lib.licenses.mit; +} diff --git a/pkgs/haskell/text-wcwidth.nix b/pkgs/haskell/text-wcwidth.nix new file mode 100644 index 0000000..e6a43d6 --- /dev/null +++ b/pkgs/haskell/text-wcwidth.nix @@ -0,0 +1,15 @@ +{ mkDerivation, base, fetchgit, lib, mono-traversable, text +, wcwidth +}: +mkDerivation { + pname = "text-wcwidth"; + version = "1.0.0"; + src = fetchgit { + url = "https://cgit.krebsco.de/text-wcwidth"; + sha256 = "1x51za2vpxgdz05arks3a98v9mz12s64rcncgg34fmir42f27li1"; + rev = "d70945bdfcf1bebf3dadb6b6c8ac7c75b4d3e9d0"; + fetchSubmodules = true; + }; + libraryHaskellDepends = [ base mono-traversable text wcwidth ]; + license = lib.licenses.mit; +} diff --git a/pkgs/haskell/xmonad-tv/src/main.hs b/pkgs/haskell/xmonad-tv/src/main.hs index e3090a3..05817af 100644 --- a/pkgs/haskell/xmonad-tv/src/main.hs +++ b/pkgs/haskell/xmonad-tv/src/main.hs @@ -9,6 +9,7 @@ import XMonad.Hooks.EwmhDesktops (ewmh) import XMonad.Hooks.EwmhDesktops.Extra (ewmhExtra) import XMonad.Hooks.RefocusLast (refocusLastLayoutHook, toggleFocus) +import Control.Monad (void) import Control.Monad.Extra (whenJustM) import qualified Data.Aeson import qualified Data.ByteString.Char8 @@ -23,10 +24,10 @@ import System.Posix.Process (executeFile) import XMonad.Actions.DynamicWorkspaces (removeEmptyWorkspace) import XMonad.Actions.CycleWS (toggleWS) import XMonad.Layout.Gaps (Direction2D(U,R,D,L), gaps) -import XMonad.Layout.NoBorders ( smartBorders ) +import XMonad.Layout.FocusTracking (focusTracking) +import XMonad.Layout.NoBorders (noBorders) import XMonad.Layout.ResizableTile (ResizableTall(ResizableTall)) import XMonad.Layout.ResizableTile (MirrorResize(MirrorExpand,MirrorShrink)) -import XMonad.Layout.StateFull (pattern StateFull) import qualified XMonad.StackSet as W import Data.Map (Map) import qualified Data.Map as Map @@ -44,6 +45,11 @@ import XMonad.Hooks.Place (placeHook, smart) import XMonad.Actions.PerWorkspaceKeys (chooseAction) import Shutdown (shutdown, newShutdownEventHandler) +import System.IO.Unsafe (unsafePerformIO) + + +sliceEnvPath :: FilePath +sliceEnvPath = unsafePerformIO (getEnv "XMONAD_CACHE_DIR") <> "/slice.env" main :: IO () @@ -70,10 +76,12 @@ readEnv' defaultValue name = mainNoArgs :: IO () mainNoArgs = do + getEnvironment >>= \env -> writeFile sliceEnvPath $ unlines [ k <> "=" <> v | (k, v) <- env] myMasterDelta <- readEnv' (1 / 20) "XMONAD_MASTER_DELTA" :: IO Rational myMasterWidth <- readEnv' (1 / 2) "XMONAD_MASTER_WIDTH" :: IO Rational myScreenGaps <- readEnv' [] "XMONAD_SCREEN_GAPS" :: IO [Int] - myScreenWidth <- readEnv "XMONAD_SCREEN_WIDTH" :: IO Dimension + myScreenWidth <- + bracket (getEnv "DISPLAY" >>= openDisplay) closeDisplay (return . widthOfScreen . defaultScreenOfDisplay) handleShutdownEvent <- newShutdownEventHandler config <- ewmhExtra @@ -94,14 +102,13 @@ mainNoArgs = do , layoutHook = refocusLastLayoutHook $ gaps (zip [U,R,D,L] myScreenGaps) $ - smartBorders $ - ResizableTall - 1 - myMasterDelta - (myMasterWidth + 2 * fromIntegral (borderWidth def) / fromIntegral myScreenWidth) - [] - ||| - StateFull + ResizableTall + 1 + myMasterDelta + (myMasterWidth + 2 * fromIntegral (borderWidth def) / fromIntegral myScreenWidth) + [] + ||| + noBorders (focusTracking Full) , manageHook = composeAll [ appName =? "fzmenu-urxvt" --> doCenterFloat @@ -133,16 +140,22 @@ handleFocusChangeEvent = \case forkFile :: FilePath -> [String] -> Maybe [(String, String)] -> X () -forkFile path args env = - xfork (executeFile path True args env) >> return () +forkFile path args env = void . xfork $ do + environment <- getEnvironment + executeFile path True args (env <> Just environment) -spawnRootTerm :: X () -spawnRootTerm = - forkFile - {-pkg:alacritty-tv-}"alacritty" - ["--profile=root", "-e", "/run/wrappers/bin/su", "-"] - Nothing +forkFileInSlice :: String -> FilePath -> [String] -> X () +forkFileInSlice sliceName path args = void . xfork $ + executeFile {-pkg:systemd-}"systemd-run" True + ( "--collect" + : "--user" + : "--slice=" <> sliceName + : "--property=EnvironmentFile=" <> sliceEnvPath + : path + : args + ) + Nothing myKeys :: XConfig Layout -> Map (KeyMask, KeySym) (X ()) @@ -151,10 +164,12 @@ myKeys conf = Map.fromList $ , ((_4S , xK_c ), kill) , ((_4 , xK_o ), forkFile {-pkg:fzmenu-}"otpmenu" [] Nothing) + , ((_4C , xK_o ), forkFile {-pkg:fzmenu-}"otpmenu" ["--phase2-method=copy"] Nothing) , ((_4 , xK_p ), forkFile {-pkg:fzmenu-}"passmenu" [] Nothing) + , ((_4C , xK_p ), forkFile {-pkg:fzmenu-}"passmenu" ["--phase2-method=copy"] Nothing) - , ((_4 , xK_x ), forkFile {-pkg:alacritty-tv-}"alacritty" ["--singleton"] Nothing) - , ((_4C , xK_x ), spawnRootTerm) + , ((_4 , xK_x ), forkFileInSlice "alacritty" {-pkg:alacritty-tv-}"alacritty" ["--dtach", "--singleton"]) + , ((_4C , xK_x ), forkFileInSlice "alacritty" {-pkg:alacritty-tv-}"alacritty" ["--profile=root", "-e", "/run/wrappers/bin/su", "-"]) , ((_C , xK_Menu ), toggleWS) diff --git a/pkgs/haskell/xoutinfo.nix b/pkgs/haskell/xoutinfo.nix index 64b6f87..fc983d6 100644 --- a/pkgs/haskell/xoutinfo.nix +++ b/pkgs/haskell/xoutinfo.nix @@ -1,11 +1,11 @@ { mkDerivation, aeson, base, bytestring, fetchgit, lib, X11 }: mkDerivation { pname = "xoutinfo"; - version = "0.1.0.0"; + version = "0.1.1.0"; src = fetchgit { url = "https://cgit.ni.krebsco.de/xoutinfo"; - sha256 = "1g3s9vyy7bpsl2zjiq6kk16c8hhf3n2yz4lv3ic0qy0n6wn6qqi8"; - rev = "cf7377886a55e36701bd0d5ce7c723aa6d7bd9bd"; + hash = "sha256-QSyCal5E7O1JBlZ7OV3aM8j68YozKyKgYhL2HYFTsvg="; + rev = "0.1.1.0"; fetchSubmodules = true; }; isLibrary = false; |
