From 9da0115e6543e5850d93fcbb54b7e3bf685d9d40 Mon Sep 17 00:00:00 2001 From: Botond Balazs Date: Sun, 22 Jan 2017 21:36:24 +0100 Subject: [PATCH 1/7] Fix #286 - Linked List: change pop and shift to return option --- exercises/linked-list/Example.fs | 8 ++-- exercises/linked-list/LinkedListTest.fs | 53 ++++++++++++++++--------- 2 files changed, 38 insertions(+), 23 deletions(-) diff --git a/exercises/linked-list/Example.fs b/exercises/linked-list/Example.fs index 9be16ee7a..c500e3075 100644 --- a/exercises/linked-list/Example.fs +++ b/exercises/linked-list/Example.fs @@ -12,19 +12,19 @@ let addToEmpty newValue linkedList = let pop linkedList = match linkedList.last with - | None -> failwith "Cannot pop from empty list" + | None -> None | Some oldLast -> linkedList.last <- oldLast.prev linkedList.last |> Option.iter (fun el -> el.next <- None) - oldLast.value + Some oldLast.value let shift linkedList = match linkedList.first with - | None -> failwith "Cannot shift from empty list" + | None -> None | Some oldFirst -> linkedList.first <- oldFirst.next linkedList.first |> Option.iter (fun el -> el.prev <- None) - oldFirst.value + Some oldFirst.value let push newValue linkedList = match linkedList.last with diff --git a/exercises/linked-list/LinkedListTest.fs b/exercises/linked-list/LinkedListTest.fs index a06505d92..7ece30785 100644 --- a/exercises/linked-list/LinkedListTest.fs +++ b/exercises/linked-list/LinkedListTest.fs @@ -4,6 +4,14 @@ open NUnit.Framework open LinkedList [] +let ``Pop returns None if the list is empty`` () = + let linkedList = mkLinkedList () + let value = pop linkedList + + Assert.That(value, Is.EqualTo(None)) + +[] +[] let ``Push and pop are first in last out order`` () = let linkedList = mkLinkedList () linkedList |> push 10 @@ -12,8 +20,15 @@ let ``Push and pop are first in last out order`` () = let val1 = pop linkedList let val2 = pop linkedList - Assert.That(val1, Is.EqualTo(20)) - Assert.That(val2, Is.EqualTo(10)) + Assert.That(val1, Is.EqualTo(Some 20)) + Assert.That(val2, Is.EqualTo(Some 10)) + +[] +let ``Shift returns None if the list is empty`` () = + let linkedList = mkLinkedList () + let value = shift linkedList + + Assert.That(value, Is.EqualTo(None)) [] [] @@ -25,8 +40,8 @@ let ``Push and shift are first in first out order`` () = let val1 = shift linkedList let val2 = shift linkedList - Assert.That(val1, Is.EqualTo(10)) - Assert.That(val2, Is.EqualTo(20)) + Assert.That(val1, Is.EqualTo(Some 10)) + Assert.That(val2, Is.EqualTo(Some 20)) [] [] @@ -38,8 +53,8 @@ let ``Unshift and shift are last in first out order`` () = let val1 = shift linkedList let val2 = shift linkedList - Assert.That(val1, Is.EqualTo(20)) - Assert.That(val2, Is.EqualTo(10)) + Assert.That(val1, Is.EqualTo(Some 20)) + Assert.That(val2, Is.EqualTo(Some 10)) [] [] @@ -51,8 +66,8 @@ let ``Unshift and pop are last in last out order`` () = let val1 = pop linkedList let val2 = pop linkedList - Assert.That(val1, Is.EqualTo(10)) - Assert.That(val2, Is.EqualTo(20)) + Assert.That(val1, Is.EqualTo(Some 10)) + Assert.That(val2, Is.EqualTo(Some 20)) [] [] @@ -66,9 +81,9 @@ let ``Push and pop can handle multiple values`` () = let val2 = pop linkedList let val3 = pop linkedList - Assert.That(val1, Is.EqualTo(30)) - Assert.That(val2, Is.EqualTo(20)) - Assert.That(val3, Is.EqualTo(10)) + Assert.That(val1, Is.EqualTo(Some 30)) + Assert.That(val2, Is.EqualTo(Some 20)) + Assert.That(val3, Is.EqualTo(Some 10)) [] [] @@ -82,9 +97,9 @@ let ``Unshift and shift can handle multiple values`` () = let val2 = shift linkedList let val3 = shift linkedList - Assert.That(val1, Is.EqualTo(30)) - Assert.That(val2, Is.EqualTo(20)) - Assert.That(val3, Is.EqualTo(10)) + Assert.That(val1, Is.EqualTo(Some 30)) + Assert.That(val2, Is.EqualTo(Some 20)) + Assert.That(val3, Is.EqualTo(Some 10)) [] [] @@ -95,12 +110,12 @@ let ``All methods of manipulating the linkedList can be used together`` () = let val1 = pop linkedList - Assert.That(val1, Is.EqualTo(20)) + Assert.That(val1, Is.EqualTo(Some 20)) linkedList |> push 30 let val2 = shift linkedList - Assert.That(val2, Is.EqualTo(10)) + Assert.That(val2, Is.EqualTo(Some 10)) linkedList |> unshift 40 linkedList |> push 50 @@ -109,6 +124,6 @@ let ``All methods of manipulating the linkedList can be used together`` () = let val4 = pop linkedList let val5 = shift linkedList - Assert.That(val3, Is.EqualTo(40)) - Assert.That(val4, Is.EqualTo(50)) - Assert.That(val5, Is.EqualTo(30)) \ No newline at end of file + Assert.That(val3, Is.EqualTo(Some 40)) + Assert.That(val4, Is.EqualTo(Some 50)) + Assert.That(val5, Is.EqualTo(Some 30)) \ No newline at end of file From 1d2db5209d08a8cfe51acb3feef8c9eba7a010b2 Mon Sep 17 00:00:00 2001 From: Botond Balazs Date: Sun, 22 Jan 2017 21:41:38 +0100 Subject: [PATCH 2/7] Linked List: Add missing Ignore attribute --- exercises/linked-list/LinkedListTest.fs | 1 + 1 file changed, 1 insertion(+) diff --git a/exercises/linked-list/LinkedListTest.fs b/exercises/linked-list/LinkedListTest.fs index 7ece30785..b3e22681d 100644 --- a/exercises/linked-list/LinkedListTest.fs +++ b/exercises/linked-list/LinkedListTest.fs @@ -24,6 +24,7 @@ let ``Push and pop are first in last out order`` () = Assert.That(val2, Is.EqualTo(Some 10)) [] +[] let ``Shift returns None if the list is empty`` () = let linkedList = mkLinkedList () let value = shift linkedList From be02d6aba7ca8e8a1b7338d30fbb6f7a85faee00 Mon Sep 17 00:00:00 2001 From: Botond Balazs Date: Sun, 5 Feb 2017 10:14:55 +0100 Subject: [PATCH 3/7] Markdown: Use correct tags for italic and bold text --- exercises/markdown/Example.fs | 4 ++-- exercises/markdown/Markdown.fs | 16 ++++++++-------- exercises/markdown/MarkdownTest.fs | 8 ++++---- 3 files changed, 14 insertions(+), 14 deletions(-) diff --git a/exercises/markdown/Example.fs b/exercises/markdown/Example.fs index cfc4f5651..dbd23a81b 100644 --- a/exercises/markdown/Example.fs +++ b/exercises/markdown/Example.fs @@ -12,8 +12,8 @@ let boldMarkdown = "__" let italicMarkdown = "_" let listItemMarkdown = "*" -let boldTag = "em" -let italicTag = "i" +let boldTag = "strong" +let italicTag = "em" let paragraphTag = "p" let listTag = "ul" let listItemTag = "li" diff --git a/exercises/markdown/Markdown.fs b/exercises/markdown/Markdown.fs index ce0771af4..b3995f8e8 100644 --- a/exercises/markdown/Markdown.fs +++ b/exercises/markdown/Markdown.fs @@ -26,10 +26,10 @@ let rec parse (markdown: string) = if __pos' > -1 then if __pos + 2 >= (line.Length - 1) then - line <- line.[0.. __pos - 1] + "" + line.[__pos + 2 .. __pos' - 1] + "" + line <- line.[0.. __pos - 1] + "" + line.[__pos + 2 .. __pos' - 1] + "" __pos <- __pos' + 1 else - line <- line.[0.. __pos - 1] + "" + line.[__pos + 2 .. __pos' - 1] + "" + line.[__pos' + 2 ..] + line <- line.[0.. __pos - 1] + "" + line.[__pos + 2 .. __pos' - 1] + "" + line.[__pos' + 2 ..] __pos <- __pos' + 1 else __pos <- -1 @@ -41,10 +41,10 @@ let rec parse (markdown: string) = if __pos' > -1 then if __pos + 1 >= (line.Length - 1) then - line <- line.[0.. __pos - 1] + "" + line.[__pos + 1 .. __pos' - 1] + "" + line <- line.[0.. __pos - 1] + "" + line.[__pos + 1 .. __pos' - 1] + "" __pos <- __pos' + 1 else - line <- line.[0.. __pos - 1] + "" + line.[__pos + 1 .. __pos' - 1] + "" + line.[__pos' + 1 ..] + line <- line.[0.. __pos - 1] + "" + line.[__pos + 1 .. __pos' - 1] + "" + line.[__pos' + 1 ..] __pos <- __pos' + 1 else __pos <- -1 @@ -75,10 +75,10 @@ let rec parse (markdown: string) = if __pos' > -1 then if __pos + 2 >= (line.Length - 1) then - line <- line.[0.. __pos - 1] + "" + line.[__pos + 2 .. __pos' - 1] + "" + line <- line.[0.. __pos - 1] + "" + line.[__pos + 2 .. __pos' - 1] + "" __pos <- __pos' + 1 else - line <- line.[0.. __pos - 1] + "" + line.[__pos + 2 .. __pos' - 1] + "" + line.[__pos' + 2 ..] + line <- line.[0.. __pos - 1] + "" + line.[__pos + 2 .. __pos' - 1] + "" + line.[__pos' + 2 ..] __pos <- __pos' + 1 else __pos <- -1 @@ -90,10 +90,10 @@ let rec parse (markdown: string) = if __pos' > -1 then if __pos + 1 >= (line.Length - 1) then - line <- line.[0.. __pos - 1] + "" + line.[__pos + 1 .. __pos' - 1] + "" + line <- line.[0.. __pos - 1] + "" + line.[__pos + 1 .. __pos' - 1] + "" __pos <- __pos' + 1 else - line <- line.[0.. __pos - 1] + "" + line.[__pos + 1 .. __pos' - 1] + "" + line.[__pos' + 1 ..] + line <- line.[0.. __pos - 1] + "" + line.[__pos + 1 .. __pos' - 1] + "" + line.[__pos' + 1 ..] __pos <- __pos' + 1 else __pos <- -1 diff --git a/exercises/markdown/MarkdownTest.fs b/exercises/markdown/MarkdownTest.fs index b9f062599..0a2dab2d7 100644 --- a/exercises/markdown/MarkdownTest.fs +++ b/exercises/markdown/MarkdownTest.fs @@ -13,19 +13,19 @@ let ``Parses normal text as a paragraph`` () = [] let ``Parsing italics`` () = let input = "_This will be italic_" - let expected = "

This will be italic

" + let expected = "

This will be italic

" Assert.That(parse input, Is.EqualTo(expected)) [] let ``Parsing bold text`` () = let input = "__This will be bold__" - let expected = "

This will be bold

" + let expected = "

This will be bold

" Assert.That(parse input, Is.EqualTo(expected)) [] let ``Mixed normal, italics and bold text`` () = let input = "This will _be_ __mixed__" - let expected = "

This will be mixed

" + let expected = "

This will be mixed

" Assert.That(parse input, Is.EqualTo(expected)) [] @@ -55,5 +55,5 @@ let ``Unordered lists`` () = [] let ``With a little bit of everything`` () = let input = "# Header!\n* __Bold Item__\n* _Italic Item_" - let expected = "

Header!

  • Bold Item
  • Italic Item
" + let expected = "

Header!

  • Bold Item
  • Italic Item
" Assert.That(parse input, Is.EqualTo(expected)) \ No newline at end of file From 895f7425b43bbfe63075104e9b449863214b60ea Mon Sep 17 00:00:00 2001 From: Botond Balazs Date: Sun, 5 Feb 2017 10:18:27 +0100 Subject: [PATCH 4/7] Revert "Fix #286 - Linked List: change pop and shift to return option" This reverts commit 9da0115e6543e5850d93fcbb54b7e3bf685d9d40. --- exercises/linked-list/Example.fs | 8 ++-- exercises/linked-list/LinkedListTest.fs | 54 +++++++++---------------- 2 files changed, 23 insertions(+), 39 deletions(-) diff --git a/exercises/linked-list/Example.fs b/exercises/linked-list/Example.fs index c500e3075..9be16ee7a 100644 --- a/exercises/linked-list/Example.fs +++ b/exercises/linked-list/Example.fs @@ -12,19 +12,19 @@ let addToEmpty newValue linkedList = let pop linkedList = match linkedList.last with - | None -> None + | None -> failwith "Cannot pop from empty list" | Some oldLast -> linkedList.last <- oldLast.prev linkedList.last |> Option.iter (fun el -> el.next <- None) - Some oldLast.value + oldLast.value let shift linkedList = match linkedList.first with - | None -> None + | None -> failwith "Cannot shift from empty list" | Some oldFirst -> linkedList.first <- oldFirst.next linkedList.first |> Option.iter (fun el -> el.prev <- None) - Some oldFirst.value + oldFirst.value let push newValue linkedList = match linkedList.last with diff --git a/exercises/linked-list/LinkedListTest.fs b/exercises/linked-list/LinkedListTest.fs index b3e22681d..a06505d92 100644 --- a/exercises/linked-list/LinkedListTest.fs +++ b/exercises/linked-list/LinkedListTest.fs @@ -4,14 +4,6 @@ open NUnit.Framework open LinkedList [] -let ``Pop returns None if the list is empty`` () = - let linkedList = mkLinkedList () - let value = pop linkedList - - Assert.That(value, Is.EqualTo(None)) - -[] -[] let ``Push and pop are first in last out order`` () = let linkedList = mkLinkedList () linkedList |> push 10 @@ -20,16 +12,8 @@ let ``Push and pop are first in last out order`` () = let val1 = pop linkedList let val2 = pop linkedList - Assert.That(val1, Is.EqualTo(Some 20)) - Assert.That(val2, Is.EqualTo(Some 10)) - -[] -[] -let ``Shift returns None if the list is empty`` () = - let linkedList = mkLinkedList () - let value = shift linkedList - - Assert.That(value, Is.EqualTo(None)) + Assert.That(val1, Is.EqualTo(20)) + Assert.That(val2, Is.EqualTo(10)) [] [] @@ -41,8 +25,8 @@ let ``Push and shift are first in first out order`` () = let val1 = shift linkedList let val2 = shift linkedList - Assert.That(val1, Is.EqualTo(Some 10)) - Assert.That(val2, Is.EqualTo(Some 20)) + Assert.That(val1, Is.EqualTo(10)) + Assert.That(val2, Is.EqualTo(20)) [] [] @@ -54,8 +38,8 @@ let ``Unshift and shift are last in first out order`` () = let val1 = shift linkedList let val2 = shift linkedList - Assert.That(val1, Is.EqualTo(Some 20)) - Assert.That(val2, Is.EqualTo(Some 10)) + Assert.That(val1, Is.EqualTo(20)) + Assert.That(val2, Is.EqualTo(10)) [] [] @@ -67,8 +51,8 @@ let ``Unshift and pop are last in last out order`` () = let val1 = pop linkedList let val2 = pop linkedList - Assert.That(val1, Is.EqualTo(Some 10)) - Assert.That(val2, Is.EqualTo(Some 20)) + Assert.That(val1, Is.EqualTo(10)) + Assert.That(val2, Is.EqualTo(20)) [] [] @@ -82,9 +66,9 @@ let ``Push and pop can handle multiple values`` () = let val2 = pop linkedList let val3 = pop linkedList - Assert.That(val1, Is.EqualTo(Some 30)) - Assert.That(val2, Is.EqualTo(Some 20)) - Assert.That(val3, Is.EqualTo(Some 10)) + Assert.That(val1, Is.EqualTo(30)) + Assert.That(val2, Is.EqualTo(20)) + Assert.That(val3, Is.EqualTo(10)) [] [] @@ -98,9 +82,9 @@ let ``Unshift and shift can handle multiple values`` () = let val2 = shift linkedList let val3 = shift linkedList - Assert.That(val1, Is.EqualTo(Some 30)) - Assert.That(val2, Is.EqualTo(Some 20)) - Assert.That(val3, Is.EqualTo(Some 10)) + Assert.That(val1, Is.EqualTo(30)) + Assert.That(val2, Is.EqualTo(20)) + Assert.That(val3, Is.EqualTo(10)) [] [] @@ -111,12 +95,12 @@ let ``All methods of manipulating the linkedList can be used together`` () = let val1 = pop linkedList - Assert.That(val1, Is.EqualTo(Some 20)) + Assert.That(val1, Is.EqualTo(20)) linkedList |> push 30 let val2 = shift linkedList - Assert.That(val2, Is.EqualTo(Some 10)) + Assert.That(val2, Is.EqualTo(10)) linkedList |> unshift 40 linkedList |> push 50 @@ -125,6 +109,6 @@ let ``All methods of manipulating the linkedList can be used together`` () = let val4 = pop linkedList let val5 = shift linkedList - Assert.That(val3, Is.EqualTo(Some 40)) - Assert.That(val4, Is.EqualTo(Some 50)) - Assert.That(val5, Is.EqualTo(Some 30)) \ No newline at end of file + Assert.That(val3, Is.EqualTo(40)) + Assert.That(val4, Is.EqualTo(50)) + Assert.That(val5, Is.EqualTo(30)) \ No newline at end of file From 24c787095b9f507ac82a1706ac236d64024aaae6 Mon Sep 17 00:00:00 2001 From: Botond Balazs Date: Thu, 9 Feb 2017 14:20:25 +0100 Subject: [PATCH 5/7] atbash-cipher: Replace [] tests with individual tests (#298) --- exercises/atbash-cipher/AtbashTest.fs | 56 ++++++++++++++++++++++----- 1 file changed, 47 insertions(+), 9 deletions(-) diff --git a/exercises/atbash-cipher/AtbashTest.fs b/exercises/atbash-cipher/AtbashTest.fs index e6680c60d..db92cac6d 100644 --- a/exercises/atbash-cipher/AtbashTest.fs +++ b/exercises/atbash-cipher/AtbashTest.fs @@ -3,12 +3,50 @@ module AtbashTest open NUnit.Framework open Atbash -[] -[] -[] -[] -[] -[] -[] -let ``Encodes words using atbash cipher`` words = - encode words \ No newline at end of file +let ``Encode yes`` () = + let phrase = "yes" + let expected = "bvh" + let actual = encode phrase + Assert.That(actual, Is.EqualTo(expected)) + +let ``Encode no`` () = + let phrase = "no" + let expected = "ml" + let actual = encode phrase + Assert.That(actual, Is.EqualTo(expected)) + +let ``Encode OMG`` () = + let phrase = "OMG" + let expected = "lnt" + let actual = encode phrase + Assert.That(actual, Is.EqualTo(expected)) + +let ``Encode spaces`` () = + let phrase = "O M G" + let expected = "lnt" + let actual = encode phrase + Assert.That(actual, Is.EqualTo(expected)) + +let ``Encode mindblowingly`` () = + let phrase = "mindblowingly" + let expected = "nrmwy oldrm tob" + let actual = encode phrase + Assert.That(actual, Is.EqualTo(expected)) + +let ``Encode numbers`` () = + let phrase = "Testing, 1 2 3, testing." + let expected = "gvhgr mt123 gvhgr mt" + let actual = encode phrase + Assert.That(actual, Is.EqualTo(expected)) + +let ``Encode deep thought`` () = + let phrase = "Truth is fiction." + let expected = "gifgs rhurx grlm" + let actual = encode phrase + Assert.That(actual, Is.EqualTo(expected)) + +let ``Encode all the letters`` () = + let phrase = "The quick brown fox jumps over the lazy dog." + let expected = "gsvjf rxpyi ldmul cqfnk hlevi gsvoz abwlt" + let actual = encode phrase + Assert.That(actual, Is.EqualTo(expected)) \ No newline at end of file From fdce3be29efc57d18ff7644d3dfcf49e0906ba55 Mon Sep 17 00:00:00 2001 From: Botond Balazs Date: Thu, 9 Feb 2017 14:30:59 +0100 Subject: [PATCH 6/7] Add missing [] attribute --- exercises/atbash-cipher/AtbashTest.fs | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/exercises/atbash-cipher/AtbashTest.fs b/exercises/atbash-cipher/AtbashTest.fs index db92cac6d..ae837a030 100644 --- a/exercises/atbash-cipher/AtbashTest.fs +++ b/exercises/atbash-cipher/AtbashTest.fs @@ -3,48 +3,56 @@ module AtbashTest open NUnit.Framework open Atbash +[] let ``Encode yes`` () = let phrase = "yes" let expected = "bvh" let actual = encode phrase Assert.That(actual, Is.EqualTo(expected)) +[] let ``Encode no`` () = let phrase = "no" let expected = "ml" let actual = encode phrase Assert.That(actual, Is.EqualTo(expected)) +[] let ``Encode OMG`` () = let phrase = "OMG" let expected = "lnt" let actual = encode phrase Assert.That(actual, Is.EqualTo(expected)) +[] let ``Encode spaces`` () = let phrase = "O M G" let expected = "lnt" let actual = encode phrase Assert.That(actual, Is.EqualTo(expected)) +[] let ``Encode mindblowingly`` () = let phrase = "mindblowingly" let expected = "nrmwy oldrm tob" let actual = encode phrase Assert.That(actual, Is.EqualTo(expected)) +[] let ``Encode numbers`` () = let phrase = "Testing, 1 2 3, testing." let expected = "gvhgr mt123 gvhgr mt" let actual = encode phrase Assert.That(actual, Is.EqualTo(expected)) +[] let ``Encode deep thought`` () = let phrase = "Truth is fiction." let expected = "gifgs rhurx grlm" let actual = encode phrase Assert.That(actual, Is.EqualTo(expected)) +[] let ``Encode all the letters`` () = let phrase = "The quick brown fox jumps over the lazy dog." let expected = "gsvjf rxpyi ldmul cqfnk hlevi gsvoz abwlt" From a6c80ceb55f4a0217c30bdca287bb60dd51397a0 Mon Sep 17 00:00:00 2001 From: Botond Balazs Date: Thu, 9 Feb 2017 14:40:24 +0100 Subject: [PATCH 7/7] Add missing [] attributes --- exercises/atbash-cipher/AtbashTest.fs | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/exercises/atbash-cipher/AtbashTest.fs b/exercises/atbash-cipher/AtbashTest.fs index ae837a030..62625cf13 100644 --- a/exercises/atbash-cipher/AtbashTest.fs +++ b/exercises/atbash-cipher/AtbashTest.fs @@ -11,6 +11,7 @@ let ``Encode yes`` () = Assert.That(actual, Is.EqualTo(expected)) [] +[] let ``Encode no`` () = let phrase = "no" let expected = "ml" @@ -18,6 +19,7 @@ let ``Encode no`` () = Assert.That(actual, Is.EqualTo(expected)) [] +[] let ``Encode OMG`` () = let phrase = "OMG" let expected = "lnt" @@ -25,6 +27,7 @@ let ``Encode OMG`` () = Assert.That(actual, Is.EqualTo(expected)) [] +[] let ``Encode spaces`` () = let phrase = "O M G" let expected = "lnt" @@ -32,6 +35,7 @@ let ``Encode spaces`` () = Assert.That(actual, Is.EqualTo(expected)) [] +[] let ``Encode mindblowingly`` () = let phrase = "mindblowingly" let expected = "nrmwy oldrm tob" @@ -39,6 +43,7 @@ let ``Encode mindblowingly`` () = Assert.That(actual, Is.EqualTo(expected)) [] +[] let ``Encode numbers`` () = let phrase = "Testing, 1 2 3, testing." let expected = "gvhgr mt123 gvhgr mt" @@ -46,6 +51,7 @@ let ``Encode numbers`` () = Assert.That(actual, Is.EqualTo(expected)) [] +[] let ``Encode deep thought`` () = let phrase = "Truth is fiction." let expected = "gifgs rhurx grlm" @@ -53,6 +59,7 @@ let ``Encode deep thought`` () = Assert.That(actual, Is.EqualTo(expected)) [] +[] let ``Encode all the letters`` () = let phrase = "The quick brown fox jumps over the lazy dog." let expected = "gsvjf rxpyi ldmul cqfnk hlevi gsvoz abwlt"