From bc5f33df4d6dfb5b32bce814e4fd672097661522 Mon Sep 17 00:00:00 2001 From: Matthew Butterick Date: Thu, 1 Dec 2016 00:13:19 -0800 Subject: [PATCH 01/43] day01,p1 --- 2016/day01-test.rkt | 2 ++ 2016/day01.rkt | 33 +++++++++++++++++++++++++++++++++ info.rkt | 2 +- 3 files changed, 36 insertions(+), 1 deletion(-) create mode 100644 2016/day01-test.rkt create mode 100644 2016/day01.rkt diff --git a/2016/day01-test.rkt b/2016/day01-test.rkt new file mode 100644 index 0000000..54424d9 --- /dev/null +++ b/2016/day01-test.rkt @@ -0,0 +1,2 @@ +#lang aoc-racket/2016/day01 +R4, R5, L5, L5, L3, R2, R1, R1, L5, R5, R2, L1, L3, L4, R3, L1, L1, R2, R3, R3, R1, L3, L5, R3, R1, L1, R1, R2, L1, L4, L5, R4, R2, L192, R5, L2, R53, R1, L5, R73, R5, L5, R186, L3, L2, R1, R3, L3, L3, R1, L4, L2, R3, L5, R4, R3, R1, L1, R5, R2, R1, R1, R1, R3, R2, L1, R5, R1, L5, R2, L2, L4, R3, L1, R4, L5, R4, R3, L5, L3, R4, R2, L5, L5, R2, R3, R5, R4, R2, R1, L1, L5, L2, L3, L4, L5, L4, L5, L1, R3, R4, R5, R3, L5, L4, L3, L1, L4, R2, R5, R5, R4, L2, L4, R3, R1, L2, R5, L5, R1, R1, L1, L5, L5, L2, L1, R5, R2, L4, L1, R4, R3, L3, R1, R5, L1, L4, R2, L3, R5, R3, R1, L3 \ No newline at end of file diff --git a/2016/day01.rkt b/2016/day01.rkt new file mode 100644 index 0000000..c51ee77 --- /dev/null +++ b/2016/day01.rkt @@ -0,0 +1,33 @@ +#lang br/quicklang +(require racket/file) +(module+ reader + (provide read-syntax) + (define (read-syntax path port) + (strip-bindings + #`(module day01-mod "day01.rkt" + #,@(for/list ([t (in-list (string-split (port->string port) ", "))]) + `(turn ,@(string-split (string-trim t) #px"(?<=[LR])"))))))) + +(define-macro (mb . TURNS) + #'(#%module-begin + (solve . TURNS))) +(provide (rename-out [mb #%module-begin])) + +(define (solve . turns) + (define loc + (let loop ([loc 0] + [dir 1] + [turns turns]) + (if (empty? turns) + loc + (let* ([turn (car turns)] + [rotation (car turn)] + [dist (cdr turn)] + [new-dir (* dir rotation)]) + (loop (+ loc (* new-dir dist)) new-dir (cdr turns)))))) + (+ (abs (imag-part loc)) (abs (real-part loc)))) + +(define-macro-cases turn + [(turn "L" DIST) #'(cons +i (string->number DIST))] + [(turn "R" DIST) #'(cons -i (string->number DIST))]) +(provide turn) \ No newline at end of file diff --git a/info.rkt b/info.rkt index 4765c39..57f6543 100644 --- a/info.rkt +++ b/info.rkt @@ -1,6 +1,6 @@ #lang info (define collection "aoc-racket") (define scribblings '(("aoc-racket.scrbl" (multi-page)))) -(define deps '("base" "scribble-lib" "sugar" "rackunit-lib" "math-lib")) +(define deps '("base" "scribble-lib" "sugar" "rackunit-lib" "math-lib" "beautiful-racket-lib")) (define test-omit-paths (list #rx"rkt$")) (define build-deps '("rackunit-lib" "racket-doc" "scribble-doc" "rackunit-doc" "at-exp-lib" "math-doc")) \ No newline at end of file -- 2.25.1 From e050f6b6543c9ca839a0327cbfe9279d5542f06e Mon Sep 17 00:00:00 2001 From: Matthew Butterick Date: Thu, 1 Dec 2016 00:23:05 -0800 Subject: [PATCH 02/43] tweak --- 2016/day01.rkt | 30 ++++++++++++++++-------------- 1 file changed, 16 insertions(+), 14 deletions(-) diff --git a/2016/day01.rkt b/2016/day01.rkt index c51ee77..705acd7 100644 --- a/2016/day01.rkt +++ b/2016/day01.rkt @@ -15,19 +15,21 @@ (define (solve . turns) (define loc - (let loop ([loc 0] - [dir 1] - [turns turns]) - (if (empty? turns) - loc - (let* ([turn (car turns)] - [rotation (car turn)] - [dist (cdr turn)] - [new-dir (* dir rotation)]) - (loop (+ loc (* new-dir dist)) new-dir (cdr turns)))))) - (+ (abs (imag-part loc)) (abs (real-part loc)))) + (let loop ([loc 0] + [dir 1] + [turns turns]) + (if (empty? turns) + loc + (let* ([turn (car turns)] + [rotation (car turn)] + [dist (cdr turn)] + [new-dir (* dir rotation)]) + (loop (+ loc (* new-dir dist)) new-dir (cdr turns)))))) + (+ (abs (imag-part loc)) (abs (real-part loc)))) -(define-macro-cases turn - [(turn "L" DIST) #'(cons +i (string->number DIST))] - [(turn "R" DIST) #'(cons -i (string->number DIST))]) +(define-macro (turn DIR DIST) + (with-pattern ([NEW-DIR (syntax-case #'DIR () + ["L" #'+i] + ["R" #'-i])]) + #'(cons NEW-DIR (string->number DIST)))) (provide turn) \ No newline at end of file -- 2.25.1 From 72cfb197248025c282124122c7f4ee306fe0f347 Mon Sep 17 00:00:00 2001 From: Matthew Butterick Date: Thu, 1 Dec 2016 12:33:46 -0800 Subject: [PATCH 03/43] not working --- 2016/day01.rkt | 64 +++++++++++++++++++++++++++++++++++--------------- 1 file changed, 45 insertions(+), 19 deletions(-) diff --git a/2016/day01.rkt b/2016/day01.rkt index 705acd7..999d930 100644 --- a/2016/day01.rkt +++ b/2016/day01.rkt @@ -3,33 +3,59 @@ (module+ reader (provide read-syntax) (define (read-syntax path port) + (define turn-strings (string-split (port->string port) ", ")) + (define turn-pattern #px"^([LR])(\\d+)$") + (define turn-datums + (for*/list ([tstr (in-list turn-strings)]) + (define match-result (regexp-match turn-pattern (string-trim tstr))) + `(turn ,@(cdr (or match-result empty))))) (strip-bindings #`(module day01-mod "day01.rkt" - #,@(for/list ([t (in-list (string-split (port->string port) ", "))]) - `(turn ,@(string-split (string-trim t) #px"(?<=[LR])"))))))) + #,@turn-datums)))) (define-macro (mb . TURNS) #'(#%module-begin (solve . TURNS))) (provide (rename-out [mb #%module-begin])) -(define (solve . turns) - (define loc - (let loop ([loc 0] - [dir 1] - [turns turns]) - (if (empty? turns) - loc - (let* ([turn (car turns)] - [rotation (car turn)] - [dist (cdr turn)] - [new-dir (* dir rotation)]) - (loop (+ loc (* new-dir dist)) new-dir (cdr turns)))))) +(define (loc-dist loc) (+ (abs (imag-part loc)) (abs (real-part loc)))) -(define-macro (turn DIR DIST) - (with-pattern ([NEW-DIR (syntax-case #'DIR () - ["L" #'+i] - ["R" #'-i])]) - #'(cons NEW-DIR (string->number DIST)))) +(define (locs-between loca locb) + (range loca (add1 locb))) + +(module+ test + (require rackunit) + (check-equal? (locs-between 0 3) '(0 1 2 3)) + (check-equal? (locs-between 3 0) (reverse (locs-between 0 3))) + (check-equal? (locs-between +0i +3i) '(+0i +1i +2i +3i)) + (check-equal? (locs-between +3i +0i) (reverse (locs-between +0i +3i)))) + +(define (solve . turns) + (define first-loc-visited-twice #f) + (define north 0+1i) + (let loop ([locs (list 0+0i)] [dir north] [turns turns]) + (if (empty? turns) + (displayln (format "part 1 (dist of final location): ~a" (loc-dist (car locs)))) + (let* ([turn (car turns)] + [rotation (car turn)] + [new-dir (* dir rotation)] + [dist (cdr turn)] + [loc (car locs)] + [new-loc (+ loc (* new-dir dist))]) + + (when (and + (not first-loc-visited-twice) + (report* locs loc new-loc (member new-loc locs))) + (set! first-loc-visited-twice new-loc) + (displayln (format "part 2 (dist of first twice-visited location): ~a" (loc-dist new-loc)))) + (loop (report (append (locs-between new-loc loc) (cdr locs))) new-dir (cdr turns)))))) + +(define-macro-cases turn + [(_ DIR DIST) + (with-pattern ([NEW-DIR (syntax-case #'DIR () + ["L" #'+i] + ["R" #'-i])]) + #'(cons NEW-DIR (string->number DIST)))] + [else #'(void)]) (provide turn) \ No newline at end of file -- 2.25.1 From 16f101de883c30af39e791d71506d2311bc38e08 Mon Sep 17 00:00:00 2001 From: Matthew Butterick Date: Thu, 1 Dec 2016 14:34:17 -0800 Subject: [PATCH 04/43] steps --- 2016/day01.rkt | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/2016/day01.rkt b/2016/day01.rkt index 999d930..1c16f80 100644 --- a/2016/day01.rkt +++ b/2016/day01.rkt @@ -22,7 +22,14 @@ (+ (abs (imag-part loc)) (abs (real-part loc)))) (define (locs-between loca locb) - (range loca (add1 locb))) + (define real-steps (abs (- (real-part loca) (real-part locb)))) + (define imag-steps (abs (- (imag-part loca) (imag-part locb)))) + (define diff (- locb loca)) + (let loop ([locs (list loca)]) + (if (equal? (car locs) locb) + (reverse locs) + (cons (+ (real-part loca) + (* +i (imag-part loca))) locs)))) (module+ test (require rackunit) -- 2.25.1 From 167b8dd85b27b1e4fff3fed11a5e8d6d4613b87a Mon Sep 17 00:00:00 2001 From: Matthew Butterick Date: Sat, 3 Dec 2016 18:58:02 -0800 Subject: [PATCH 05/43] tweak --- 2016/day01.rkt | 65 ++++++++++++++++++++------------------------------ 1 file changed, 26 insertions(+), 39 deletions(-) diff --git a/2016/day01.rkt b/2016/day01.rkt index 1c16f80..fcae573 100644 --- a/2016/day01.rkt +++ b/2016/day01.rkt @@ -1,9 +1,8 @@ #lang br/quicklang -(require racket/file) (module+ reader (provide read-syntax) (define (read-syntax path port) - (define turn-strings (string-split (port->string port) ", ")) + (define turn-strings (string-split (port->string port) ",")) (define turn-pattern #px"^([LR])(\\d+)$") (define turn-datums (for*/list ([tstr (in-list turn-strings)]) @@ -21,48 +20,36 @@ (define (loc-dist loc) (+ (abs (imag-part loc)) (abs (real-part loc)))) -(define (locs-between loca locb) - (define real-steps (abs (- (real-part loca) (real-part locb)))) - (define imag-steps (abs (- (imag-part loca) (imag-part locb)))) - (define diff (- locb loca)) - (let loop ([locs (list loca)]) - (if (equal? (car locs) locb) - (reverse locs) - (cons (+ (real-part loca) - (* +i (imag-part loca))) locs)))) - -(module+ test - (require rackunit) - (check-equal? (locs-between 0 3) '(0 1 2 3)) - (check-equal? (locs-between 3 0) (reverse (locs-between 0 3))) - (check-equal? (locs-between +0i +3i) '(+0i +1i +2i +3i)) - (check-equal? (locs-between +3i +0i) (reverse (locs-between +0i +3i)))) +(struct $turn (rot dist) #:transparent) +(define rotate-left +i) +(define rotate-right -i) +(define same-dir 1) (define (solve . turns) - (define first-loc-visited-twice #f) + (define found-twice-visited-loc #f) (define north 0+1i) - (let loop ([locs (list 0+0i)] [dir north] [turns turns]) - (if (empty? turns) - (displayln (format "part 1 (dist of final location): ~a" (loc-dist (car locs)))) - (let* ([turn (car turns)] - [rotation (car turn)] - [new-dir (* dir rotation)] - [dist (cdr turn)] - [loc (car locs)] - [new-loc (+ loc (* new-dir dist))]) - - (when (and - (not first-loc-visited-twice) - (report* locs loc new-loc (member new-loc locs))) - (set! first-loc-visited-twice new-loc) - (displayln (format "part 2 (dist of first twice-visited location): ~a" (loc-dist new-loc)))) - (loop (report (append (locs-between new-loc loc) (cdr locs))) new-dir (cdr turns)))))) + (define starting-loc 0+0i) + (let loop ([locs (list starting-loc)] [dir north] [turns turns]) + (cond + [(empty? turns) + (displayln (format "part 1 (dist of final location): ~a" (loc-dist (car locs))))] + [(zero? ($turn-dist (car turns))) (loop locs dir (cdr turns))] + [else + (define new-dir (* dir ($turn-rot (car turns)))) + (define one-step 1) + (define new-loc (+ (car locs) (* new-dir one-step))) + (when (and (not found-twice-visited-loc) (member new-loc locs)) + (set! found-twice-visited-loc new-loc) + (displayln (format "part 2 (dist of first twice-visited location): ~a" + (loc-dist new-loc)))) + (define decremented-turn ($turn same-dir (sub1 ($turn-dist (car turns))))) + (loop (cons new-loc locs) new-dir (cons decremented-turn (cdr turns)))]))) (define-macro-cases turn [(_ DIR DIST) - (with-pattern ([NEW-DIR (syntax-case #'DIR () - ["L" #'+i] - ["R" #'-i])]) - #'(cons NEW-DIR (string->number DIST)))] + (with-pattern ([ENCODED-DIR (syntax-case #'DIR () + ["L" #'rotate-left] + ["R" #'rotate-right])]) + #'($turn ENCODED-DIR (string->number DIST)))] [else #'(void)]) (provide turn) \ No newline at end of file -- 2.25.1 From 519011efdc132ac8cf7b25eadd49526806c0e0b8 Mon Sep 17 00:00:00 2001 From: Matthew Butterick Date: Sat, 3 Dec 2016 19:54:04 -0800 Subject: [PATCH 06/43] day 02 --- 2016/day02-test.rkt | 6 ++++++ 2016/day02.rkt | 38 ++++++++++++++++++++++++++++++++++++++ 2016/day02b-test.rkt | 6 ++++++ 2016/day02b.rkt | 38 ++++++++++++++++++++++++++++++++++++++ 4 files changed, 88 insertions(+) create mode 100644 2016/day02-test.rkt create mode 100644 2016/day02.rkt create mode 100644 2016/day02b-test.rkt create mode 100644 2016/day02b.rkt diff --git a/2016/day02-test.rkt b/2016/day02-test.rkt new file mode 100644 index 0000000..6e1257c --- /dev/null +++ b/2016/day02-test.rkt @@ -0,0 +1,6 @@ +#lang aoc-racket/2016/day02 +DLRRRRLRLDRRRURRURULRLLULUURRRDDLDULDULLUUDLURLURLLDLUUUDUUUULDRDUUDUDDRRLRDDDUDLDLLRUURDRULUULRLRDULULLRLRLRLDRLUULDLDDDDRRLRUUUDDRURRULLLRURLUURULLRLUDDLDRUULDRURULRRRLLLRDLULDRRDDUDLURURLDULDRDRLDDUURRDUDDRDUURDULDUURDUDRDRULDUDUULRRULUUURDUURUDLDURDLRLURUUDRRDLRUDRULRURLDLLDLLRRDRDRLRRRULDRRLDUURLUUDLUUDDLLRULRDUUDURURLUURDRRRUDLRDULRRRLDRDULRUUDDDLRDUULDRLLDRULUULULRDRUUUULULLRLLLRUURUULRRLDDDRULRRRUDURUR +RULRUUUDLLUDURDRDDLLRLLUDRUDDRLRRDLDLDRDULDLULURDLUDDDUULURLDRUUURURLLRRDDDUUDRLRLLDLDRDDDRDUDLRDRDLLLDDLDUDDRUDUUDLLLLLDULRLURRRLLURUUULUDRLRLRLURRDRLLLRLLULRLLLDDLRLRDLUUUUUDULULDDULLUDUURDLRUDLRUDLRLLRLDLULRLDUDRURURDLRULDLULULDLLDLDLDLLLUDUDDLRLRRDULLUDRDDLLLDUURDULUDURLLLDRUDDDLRLULDLDRRDDDRDULDDUDRDDULLULRRLRUULRDUDURUDULUDUDURLDRDUUDDRRLRURDRRLRDDDDRUDLUDLDDLRDLUUDLRRURDDLURDLRDLLRDRDLDLDUUUURULUULDDDDLDULUURRRULUDLLLDRULDRURL +RRRLRDLLDUURDRRRLURDUULUDURDRRUUDURURRLDLLDRDLRRURDDUDDURLRUUDDULULRUUDRLUUDDLLDDDLRRRDLLLLLLRRURDULDLURRURRDDLDDDUDURRDURRRLUDRRULLRULDRLULRULDDRLLRDLRDUURULURLUURLRRULDULULUULDUDLRLDRDDRRRUUULULDUURLRLLURRLURDUUDDDRUULDLLLDRUURLRRLLDDUDRDLDDDULDRDDDUDRRLLLULURDUDLLUUURRLDULURURDDLUDLLRLDRULULURDLDRLURDLRRDRRUULLULDLURRDDUDRDDDLDUDLDRRUDRULDLDULRLLRRRRDDRLUURRRRDDLLRUURRLRURULDDULRLULRURRUULDUUDURDRRLRLUDRULDRUULUUDRDURDURRLULDDDULDDLRDURRUUUUUDDRRDLRDULUUDDL +DRRLLRRLULDDULRDDLRLDRURDDUDULURRDLUUULURRRLLRLULURLLRLLDLLUDDLLRDRURRDLDDURRURDRDDUDDDLLRLDLDLDDDDRRRRUDUDLRDUDDURLLRURRDUDLRLLUDDRLDUUDDLLLUDRRRLLDDULUDDRLLUDDULLDDLRLDLRURRLUDDLULULDLUURDLLUDUDRRRRDULUDLRRLRUDDUUDRRLLRUUDRRLDDLRRRUDRRDRRDDUDLULLURRUURLLLDRDDLUDDDUDDRURURDLRUULLRDRUUDRDUDRLULLDURUUULDDLDRDRUDRUDUULDDRLRDRRDRRRRLRLRUULDDUUDDLLLLRRRDUDLRDLDUDDUURLUDURLDRRRDRUDUDRLDLRLDRDDLUDRURLRDRDLDUDDDLRLULLUULURLDDDULDUDDDLDRLDLURULLUDLLDRULDLLLDUL +LDULURUULLUDLDDRLLDURRULRLURLLURLRRLRDLDDRUURULLRUURUURRUDDDLRRLDDLULDURLLRDURDLLLURLDRULLURLRLDRDRULURDULDLLDUULLLDUDULDURLUDRULRUUUUUUDUUDDDLLURDLDLRLRDLULRDRULUUDRLULLURLRLDURDRRDUDDDURLLUUDRRURUDLDUDRLRLDRLLLLDLLLURRUDDURLDDRULLRRRRDUULDLUDLDRDUUURLDLLLDLRLRRLDDULLRURRRULDLURLURRRRULUURLLUULRURDURURLRRDULLDULLUDURDUDRLUULULDRRDLLDRDRRULLLDDDRDUDLRDLRDDURRLDUDLLRUDRRRUDRURURRRRDRDDRULRRLLDDRRRLDLULRLRRRUDUDULRDLUDRULRRRRLUULRULRLLRLLURDLUURDULRLDLRLURDUURUULUUDRLLUDRULULULLLLRLDLLLDDDLUULUDLLLDDULRDRULURDLLRRDRLUDRD \ No newline at end of file diff --git a/2016/day02.rkt b/2016/day02.rkt new file mode 100644 index 0000000..da5fbb1 --- /dev/null +++ b/2016/day02.rkt @@ -0,0 +1,38 @@ +#lang br/quicklang +(module+ reader + (provide read-syntax) + (define (read-syntax path port) + (define moveset-strs (string-split (port->string port))) + (define moveset-datums + (for*/list ([msstr (in-list moveset-strs)]) + `(moveset ,@(regexp-match* #rx"." msstr)))) + (strip-bindings + #`(module day01-mod "day02.rkt" + #,@moveset-datums)))) + +(define-macro moveset #'list) +(provide moveset) + +(define-macro (mb . MOVESETS) + #'(#%module-begin + (void (solve (list . MOVESETS))))) +(provide (rename-out [mb #%module-begin])) + +(define (do-moveset button moveset) + (for/fold ([button button]) + ([move (in-list moveset)]) + (vector-ref + (case move + [("U") '#(1 2 3 1 2 3 4 5 6)] + [("L") '#(1 1 2 4 4 5 7 7 8)] + [("R") '#(2 3 3 5 6 6 8 9 9)] + [("D") '#(4 5 6 7 8 9 7 8 9)]) + (sub1 button)))) + +(define starting-button 5) +(define (solve mss) + (for/fold ([button starting-button]) + ([ms (in-list mss)]) + (define result (do-moveset button ms)) + (display (string-upcase (number->string result 16))) + result)) \ No newline at end of file diff --git a/2016/day02b-test.rkt b/2016/day02b-test.rkt new file mode 100644 index 0000000..3532f20 --- /dev/null +++ b/2016/day02b-test.rkt @@ -0,0 +1,6 @@ +#lang aoc-racket/2016/day02b +DLRRRRLRLDRRRURRURULRLLULUURRRDDLDULDULLUUDLURLURLLDLUUUDUUUULDRDUUDUDDRRLRDDDUDLDLLRUURDRULUULRLRDULULLRLRLRLDRLUULDLDDDDRRLRUUUDDRURRULLLRURLUURULLRLUDDLDRUULDRURULRRRLLLRDLULDRRDDUDLURURLDULDRDRLDDUURRDUDDRDUURDULDUURDUDRDRULDUDUULRRULUUURDUURUDLDURDLRLURUUDRRDLRUDRULRURLDLLDLLRRDRDRLRRRULDRRLDUURLUUDLUUDDLLRULRDUUDURURLUURDRRRUDLRDULRRRLDRDULRUUDDDLRDUULDRLLDRULUULULRDRUUUULULLRLLLRUURUULRRLDDDRULRRRUDURUR +RULRUUUDLLUDURDRDDLLRLLUDRUDDRLRRDLDLDRDULDLULURDLUDDDUULURLDRUUURURLLRRDDDUUDRLRLLDLDRDDDRDUDLRDRDLLLDDLDUDDRUDUUDLLLLLDULRLURRRLLURUUULUDRLRLRLURRDRLLLRLLULRLLLDDLRLRDLUUUUUDULULDDULLUDUURDLRUDLRUDLRLLRLDLULRLDUDRURURDLRULDLULULDLLDLDLDLLLUDUDDLRLRRDULLUDRDDLLLDUURDULUDURLLLDRUDDDLRLULDLDRRDDDRDULDDUDRDDULLULRRLRUULRDUDURUDULUDUDURLDRDUUDDRRLRURDRRLRDDDDRUDLUDLDDLRDLUUDLRRURDDLURDLRDLLRDRDLDLDUUUURULUULDDDDLDULUURRRULUDLLLDRULDRURL +RRRLRDLLDUURDRRRLURDUULUDURDRRUUDURURRLDLLDRDLRRURDDUDDURLRUUDDULULRUUDRLUUDDLLDDDLRRRDLLLLLLRRURDULDLURRURRDDLDDDUDURRDURRRLUDRRULLRULDRLULRULDDRLLRDLRDUURULURLUURLRRULDULULUULDUDLRLDRDDRRRUUULULDUURLRLLURRLURDUUDDDRUULDLLLDRUURLRRLLDDUDRDLDDDULDRDDDUDRRLLLULURDUDLLUUURRLDULURURDDLUDLLRLDRULULURDLDRLURDLRRDRRUULLULDLURRDDUDRDDDLDUDLDRRUDRULDLDULRLLRRRRDDRLUURRRRDDLLRUURRLRURULDDULRLULRURRUULDUUDURDRRLRLUDRULDRUULUUDRDURDURRLULDDDULDDLRDURRUUUUUDDRRDLRDULUUDDL +DRRLLRRLULDDULRDDLRLDRURDDUDULURRDLUUULURRRLLRLULURLLRLLDLLUDDLLRDRURRDLDDURRURDRDDUDDDLLRLDLDLDDDDRRRRUDUDLRDUDDURLLRURRDUDLRLLUDDRLDUUDDLLLUDRRRLLDDULUDDRLLUDDULLDDLRLDLRURRLUDDLULULDLUURDLLUDUDRRRRDULUDLRRLRUDDUUDRRLLRUUDRRLDDLRRRUDRRDRRDDUDLULLURRUURLLLDRDDLUDDDUDDRURURDLRUULLRDRUUDRDUDRLULLDURUUULDDLDRDRUDRUDUULDDRLRDRRDRRRRLRLRUULDDUUDDLLLLRRRDUDLRDLDUDDUURLUDURLDRRRDRUDUDRLDLRLDRDDLUDRURLRDRDLDUDDDLRLULLUULURLDDDULDUDDDLDRLDLURULLUDLLDRULDLLLDUL +LDULURUULLUDLDDRLLDURRULRLURLLURLRRLRDLDDRUURULLRUURUURRUDDDLRRLDDLULDURLLRDURDLLLURLDRULLURLRLDRDRULURDULDLLDUULLLDUDULDURLUDRULRUUUUUUDUUDDDLLURDLDLRLRDLULRDRULUUDRLULLURLRLDURDRRDUDDDURLLUUDRRURUDLDUDRLRLDRLLLLDLLLURRUDDURLDDRULLRRRRDUULDLUDLDRDUUURLDLLLDLRLRRLDDULLRURRRULDLURLURRRRULUURLLUULRURDURURLRRDULLDULLUDURDUDRLUULULDRRDLLDRDRRULLLDDDRDUDLRDLRDDURRLDUDLLRUDRRRUDRURURRRRDRDDRULRRLLDDRRRLDLULRLRRRUDUDULRDLUDRULRRRRLUULRULRLLRLLURDLUURDULRLDLRLURDUURUULUUDRLLUDRULULULLLLRLDLLLDDDLUULUDLLLDDULRDRULURDLLRRDRLUDRD \ No newline at end of file diff --git a/2016/day02b.rkt b/2016/day02b.rkt new file mode 100644 index 0000000..76d609d --- /dev/null +++ b/2016/day02b.rkt @@ -0,0 +1,38 @@ +#lang br/quicklang +(module+ reader + (provide read-syntax) + (define (read-syntax path port) + (define moveset-strs (string-split (port->string port))) + (define moveset-datums + (for*/list ([msstr (in-list moveset-strs)]) + `(moveset ,@(regexp-match* #rx"." msstr)))) + (strip-bindings + #`(module day01-mod "day02b.rkt" + #,@moveset-datums)))) + +(define-macro moveset #'list) +(provide moveset) + +(define-macro (mb . MOVESETS) + #'(#%module-begin + (void (solve (list . MOVESETS))))) +(provide (rename-out [mb #%module-begin])) + +(define (do-moveset button moveset) + (for/fold ([button button]) + ([move (in-list moveset)]) + (vector-ref + (case move + [("U") '#(1 2 1 4 5 2 3 4 9 6 7 8 #xb)] + [("L") '#(1 2 2 3 5 5 6 7 8 #xa #xa #xb #xd)] + [("R") '#(1 3 4 4 6 7 8 9 9 #xb #xc #xc #xd)] + [("D") '#(3 6 7 8 5 #xa #xb #xc 9 #xa #xd #xc #xd)]) + (sub1 button)))) + +(define starting-button 5) +(define (solve mss) + (for/fold ([button starting-button]) + ([ms (in-list mss)]) + (define result (do-moveset button ms)) + (display (string-upcase (number->string result 16))) + result)) \ No newline at end of file -- 2.25.1 From d7b0a90a57b7fe4127eaefafce552b4702ce56f4 Mon Sep 17 00:00:00 2001 From: Matthew Butterick Date: Sat, 3 Dec 2016 20:22:55 -0800 Subject: [PATCH 07/43] day 03 --- 2016/day03-test.rkt | 1909 ++++++++++++++++++++++++++++++++++++++++++ 2016/day03.rkt | 25 + 2016/day03b-test.rkt | 1909 ++++++++++++++++++++++++++++++++++++++++++ 2016/day03b.rkt | 31 + 4 files changed, 3874 insertions(+) create mode 100644 2016/day03-test.rkt create mode 100644 2016/day03.rkt create mode 100644 2016/day03b-test.rkt create mode 100644 2016/day03b.rkt diff --git a/2016/day03-test.rkt b/2016/day03-test.rkt new file mode 100644 index 0000000..3409019 --- /dev/null +++ b/2016/day03-test.rkt @@ -0,0 +1,1909 @@ +#lang aoc-racket/2016/day03 + 4 21 894 + 419 794 987 + 424 797 125 + 651 305 558 + 655 631 963 + 2 628 436 + 736 50 363 + 657 707 408 + 252 705 98 + 532 173 878 + 574 792 854 + 157 737 303 + 468 76 580 + 502 503 434 + 467 567 310 + 911 911 391 + 791 913 925 + 174 49 532 + 796 803 426 + 800 132 710 + 273 722 711 + 388 576 551 + 17 936 676 + 371 712 141 + 692 738 913 + 745 805 975 + 381 140 680 + 859 344 336 + 109 148 877 + 835 441 716 + 355 288 669 + 968 259 517 + 979 350 773 + 134 222 347 + 614 279 628 + 510 140 590 + 901 581 707 + 958 933 680 + 95 558 766 + 676 739 739 + 890 40 825 + 280 735 297 + 593 354 701 + 555 756 730 + 39 656 853 + 399 660 14 + 293 685 48 + 109 374 42 + 260 608 680 + 306 885 603 + 49 683 810 + 125 513 512 + 706 600 143 + 728 138 658 + 410 673 27 + 617 872 89 + 923 733 103 + 462 674 95 + 352 718 191 + 129 351 173 + 648 839 828 + 332 829 789 + 947 44 214 + 768 576 184 + 672 900 601 + 98 672 738 + 368 926 539 + 271 300 372 + 141 844 261 + 731 426 205 + 734 979 792 + 16 703 888 + 133 682 323 + 428 784 182 + 398 171 394 + 154 845 425 + 643 14 775 + 695 849 432 + 22 227 464 + 490 544 485 + 474 701 910 + 902 629 10 + 996 680 67 + 91 908 75 + 653 600 845 + 439 53 117 + 480 552 860 + 156 144 46 + 492 359 597 + 408 473 614 + 469 343 737 + 777 438 149 + 803 114 676 + 78 835 753 + 567 230 707 + 542 738 49 + 286 542 939 + 75 985 179 + 293 914 854 + 234 609 877 + 237 167 880 + 151 722 925 + 793 515 278 + 350 432 777 + 883 402 581 + 621 501 702 + 494 265 665 + 167 668 345 + 853 911 629 + 747 428 576 + 703 979 73 + 938 798 401 + 851 743 542 + 281 216 483 + 772 573 404 + 598 547 606 + 275 107 823 + 92 94 864 + 416 201 759 + 331 146 446 + 200 375 70 + 459 349 928 + 615 77 999 + 748 380 628 + 624 244 759 + 934 512 163 + 964 117 75 + 515 146 209 + 917 31 218 + 694 640 116 + 758 53 375 + 250 655 353 + 153 200 189 + 259 752 85 + 313 637 129 + 361 632 973 + 896 61 934 + 581 611 483 + 620 788 889 + 959 273 754 + 677 997 322 + 43 201 714 + 181 956 734 + 147 878 850 + 139 802 938 + 542 729 26 + 531 201 915 + 412 917 301 + 845 44 811 + 489 897 626 + 378 384 781 + 429 130 313 + 583 400 515 + 811 937 949 + 584 812 909 + 738 143 205 + 79 813 801 + 599 872 539 + 650 177 384 + 299 267 539 + 506 358 516 + 425 520 185 + 901 854 622 + 84 371 21 + 931 797 642 + 274 155 432 + 366 935 635 + 331 810 836 + 56 725 67 + 9 756 985 + 58 38 946 + 385 807 899 + 336 998 3 + 243 539 893 + 792 117 272 + 345 995 452 + 717 892 262 + 311 694 23 + 737 169 392 + 875 741 379 + 609 422 100 + 644 442 916 + 832 51 967 + 230 962 82 + 380 202 931 + 308 786 903 + 556 668 121 + 194 650 263 + 732 20 346 + 528 445 589 + 341 142 684 + 281 302 550 + 408 511 219 + 683 938 617 + 679 705 763 + 812 847 313 + 557 838 308 + 888 23 145 + 120 20 129 + 450 643 245 + 329 658 282 + 30 878 700 + 698 799 335 + 698 320 595 + 875 959 595 + 50 715 454 + 856 686 269 + 986 38 589 + 834 925 69 + 263 928 654 + 430 175 586 + 99 712 642 + 439 679 132 + 639 714 644 + 563 940 62 + 228 385 666 + 758 757 949 + 137 174 104 + 859 746 939 + 675 140 592 + 324 446 357 + 471 486 455 + 450 429 980 + 955 388 599 + 914 222 512 + 981 673 871 + 941 716 744 + 55 192 173 + 98 48 411 + 774 686 343 + 689 671 412 + 666 613 686 + 420 595 550 + 891 148 204 + 150 678 978 + 420 684 49 + 503 879 985 + 95 508 231 + 90 393 777 + 17 464 813 + 372 120 26 + 513 10 445 + 258 133 460 + 392 29 355 + 116 874 635 + 326 889 493 + 883 599 250 + 913 388 798 + 85 366 782 + 422 416 204 + 533 174 93 + 168 413 270 + 617 996 461 + 8 386 1 + 613 928 464 + 455 545 619 + 424 631 488 + 142 612 146 + 921 374 324 + 744 791 395 + 923 797 445 + 876 447 602 + 851 62 493 + 23 397 993 + 232 602 90 + 790 604 698 + 855 7 654 + 350 105 561 + 550 198 327 + 670 130 340 + 904 943 765 + 23 467 804 + 906 726 948 + 337 90 774 + 438 546 667 + 134 625 247 + 334 282 729 + 619 275 412 + 377 5 763 + 250 722 852 + 754 365 401 + 558 393 615 + 974 673 39 + 922 610 899 + 99 969 868 + 89 616 911 + 235 326 371 + 252 605 907 + 429 387 678 + 564 34 565 + 436 359 584 + 125 780 474 + 842 372 184 + 785 507 489 + 849 418 633 + 962 191 582 + 728 453 669 + 91 970 639 + 48 222 639 + 41 865 103 + 395 765 945 + 551 103 9 + 313 687 956 + 952 109 894 + 612 79 518 + 392 119 506 + 106 739 427 + 941 688 483 + 917 103 114 + 326 466 604 + 393 641 488 + 128 920 135 + 609 742 725 + 101 596 371 + 631 325 416 + 318 939 170 + 166 540 821 + 460 654 843 + 672 942 330 + 620 673 352 + 288 731 20 + 263 277 387 + 259 49 434 + 73 262 278 + 525 775 36 + 867 735 125 + 437 415 141 + 567 537 640 + 99 581 584 + 468 108 84 + 608 997 893 + 573 722 971 + 497 953 399 + 201 184 372 + 203 323 386 + 2 331 72 + 375 687 307 + 484 57 322 + 311 704 416 + 720 961 571 + 444 211 926 + 668 771 666 + 742 688 146 + 447 435 143 + 394 444 1 + 450 39 373 + 150 634 442 + 422 645 546 + 132 562 281 + 795 365 455 + 921 389 255 + 17 153 85 + 795 593 367 + 788 637 447 + 292 297 703 + 190 938 871 + 166 821 386 + 437 636 385 + 160 288 604 + 334 584 837 + 701 207 665 + 470 84 204 + 599 268 739 + 634 92 148 + 507 620 198 + 193 677 94 + 301 990 536 + 874 493 783 + 932 550 497 + 81 166 546 + 633 538 476 + 553 411 790 + 593 159 316 + 47 729 226 + 619 708 409 + 38 535 763 + 421 830 550 + 400 537 641 + 275 531 166 + 247 564 495 + 177 791 655 + 959 363 548 + 232 105 594 + 919 272 912 + 258 467 505 + 882 783 365 + 916 331 441 + 70 815 204 + 66 304 470 + 2 810 372 + 734 276 875 + 771 295 72 + 455 191 892 + 765 384 195 + 758 418 844 + 38 121 980 + 302 379 606 + 116 384 199 + 353 13 607 + 712 805 790 + 589 701 694 + 540 776 276 + 985 814 61 + 996 10 709 + 450 821 652 + 715 26 899 + 628 656 679 + 322 669 279 + 144 649 518 + 962 175 363 + 839 627 292 + 931 934 378 + 588 382 122 + 410 923 263 + 652 680 654 + 25 878 835 + 640 399 396 + 492 202 511 + 510 225 521 + 15 413 233 + 493 551 122 + 683 222 569 + 248 457 641 + 100 936 315 + 902 998 870 + 975 98 680 + 998 309 653 + 605 944 532 + 530 887 400 + 572 879 925 + 311 147 692 + 425 924 848 + 453 945 934 + 492 918 22 + 434 338 933 + 288 297 665 + 274 712 185 + 99 503 741 + 868 523 263 + 828 218 121 + 53 565 236 + 15 409 778 + 367 293 444 + 352 610 413 + 892 970 706 + 954 767 321 + 75 656 414 + 823 781 57 + 423 673 349 + 817 405 324 + 768 19 345 + 302 949 529 + 654 944 794 + 262 766 959 + 783 92 866 + 772 718 772 + 629 154 669 + 723 349 109 + 914 352 599 + 559 746 346 + 492 781 860 + 103 52 624 + 655 397 857 + 680 242 417 + 183 203 846 + 714 519 457 + 849 292 946 + 605 566 646 + 793 653 156 + 111 135 44 + 882 531 191 + 920 773 378 + 911 340 546 + 23 655 382 + 656 708 587 + 43 792 708 + 673 734 605 + 506 725 943 + 421 762 553 + 471 214 572 + 195 575 438 + 114 546 687 + 121 47 894 + 744 221 820 + 58 273 982 + 759 58 233 + 770 824 785 + 857 441 480 + 87 387 477 + 838 633 28 + 635 547 49 + 329 404 47 + 534 955 933 + 661 985 662 + 199 144 713 + 228 996 622 + 197 523 858 + 64 486 552 + 859 968 422 + 847 31 648 + 41 944 812 + 625 953 830 + 987 734 37 + 529 512 825 + 104 690 688 + 602 224 973 + 592 888 409 + 241 247 639 + 290 80 570 + 483 284 97 + 322 223 57 + 91 204 503 + 257 18 464 + 904 480 177 + 945 364 137 + 199 240 234 + 231 177 23 + 537 147 464 + 683 71 468 + 448 55 544 + 264 143 640 + 307 125 706 + 674 384 373 + 469 903 656 + 538 695 361 + 461 942 728 + 430 911 347 + 85 70 789 + 422 525 65 + 466 322 776 + 49 620 765 + 832 530 9 + 215 92 417 + 965 511 415 + 865 888 289 + 993 74 332 + 685 830 52 + 11 334 151 + 98 36 192 + 93 307 89 + 38 483 498 + 674 317 910 + 697 302 486 + 267 29 508 + 816 924 165 + 895 954 671 + 629 75 634 + 591 301 149 + 368 346 735 + 916 606 382 + 63 786 124 + 916 180 475 + 466 656 218 + 128 35 326 + 570 665 164 + 181 382 773 + 256 122 266 + 130 288 905 + 288 524 40 + 278 526 471 + 39 243 476 + 951 16 522 + 662 93 522 + 378 107 7 + 218 520 10 + 654 399 343 + 674 158 351 + 854 320 834 + 722 358 818 + 231 178 671 + 862 892 764 + 109 461 982 + 943 655 412 + 745 541 255 + 868 541 297 + 472 20 224 + 163 991 647 + 249 883 588 + 232 486 162 + 236 281 784 + 416 261 65 + 377 34 790 + 357 121 610 + 542 439 866 + 860 324 598 + 865 337 712 + 368 421 977 + 839 280 457 + 140 655 416 + 962 381 331 + 901 685 732 + 818 483 831 + 13 724 791 + 818 694 222 + 746 822 841 + 829 418 836 + 335 565 408 + 516 447 281 + 584 204 166 + 480 508 119 + 713 787 704 + 626 941 739 + 206 418 284 + 989 326 701 + 636 396 195 + 397 393 655 + 240 696 896 + 166 117 974 + 72 733 210 + 797 533 566 + 729 728 481 + 663 212 86 + 298 475 563 + 590 533 517 + 618 314 133 + 422 195 38 + 195 415 288 + 540 303 253 + 446 553 859 + 568 891 223 + 432 617 981 + 519 214 775 + 529 721 844 + 786 898 692 + 440 401 201 + 345 353 846 + 296 566 906 + 638 422 370 + 15 577 469 + 624 192 134 + 136 554 755 + 182 690 940 + 77 366 923 + 284 979 275 + 157 582 373 + 433 547 343 + 767 786 527 + 983 877 385 + 581 612 158 + 365 520 673 + 436 227 897 + 458 421 913 + 579 492 760 + 818 493 507 + 316 22 867 + 114 421 939 + 372 281 912 + 415 608 633 + 938 676 927 + 965 591 931 + 335 789 34 + 865 820 346 + 406 798 304 + 893 441 267 + 166 126 835 + 764 859 839 + 629 918 194 + 557 297 552 + 954 79 478 + 801 224 670 + 640 493 262 + 750 478 681 + 534 867 654 + 980 586 142 + 882 597 156 + 277 186 48 + 448 541 23 + 457 702 496 + 11 936 491 + 689 668 457 + 368 941 288 + 914 311 464 + 893 843 828 + 800 933 797 + 951 427 657 + 754 215 476 + 148 260 508 + 735 130 193 + 390 631 761 + 288 203 777 + 273 443 23 + 189 20 355 + 240 344 560 + 157 360 674 + 921 774 803 + 473 943 937 + 600 920 393 + 611 579 530 + 632 577 59 + 24 5 495 + 701 358 722 + 703 284 820 + 625 625 844 + 649 253 531 + 447 309 534 + 662 218 419 + 762 347 627 + 947 344 133 + 581 36 652 + 222 747 122 + 238 761 162 + 72 82 231 + 717 296 966 + 563 516 774 + 273 451 819 + 956 175 651 + 33 770 754 + 956 650 369 + 146 838 148 + 588 713 547 + 453 457 541 + 979 92 401 + 967 162 417 + 144 155 672 + 725 737 962 + 779 701 886 + 64 203 120 + 433 284 482 + 911 538 512 + 613 713 77 + 268 636 685 + 445 955 193 + 458 677 653 + 91 450 356 + 747 11 360 + 728 448 147 + 37 494 679 + 780 582 256 + 756 212 810 + 556 434 265 + 280 472 983 + 547 93 857 + 922 225 378 + 754 138 346 + 236 235 349 + 718 421 501 + 80 880 464 + 753 490 286 + 616 332 218 + 338 391 547 + 490 599 370 + 35 559 686 + 67 290 565 + 30 597 153 + 59 763 701 + 268 439 123 + 237 940 669 + 451 205 145 + 302 284 961 + 365 443 828 + 225 598 65 + 437 561 73 + 248 219 7 + 72 29 274 + 577 35 654 + 537 41 857 + 956 966 739 + 545 747 373 + 479 463 705 + 112 79 161 + 280 885 672 + 322 829 596 + 422 279 697 + 804 997 963 + 907 852 494 + 321 245 492 + 298 698 419 + 49 454 185 + 169 214 25 + 880 324 414 + 816 163 425 + 366 370 167 + 729 49 684 + 460 337 792 + 719 908 817 + 825 310 303 + 245 814 724 + 877 713 128 + 488 241 839 + 499 820 884 + 918 356 273 + 69 228 442 + 877 523 698 + 780 391 627 + 838 539 547 + 512 867 786 + 491 298 421 + 402 153 940 + 602 220 539 + 638 167 534 + 626 204 122 + 77 170 569 + 342 364 529 + 74 523 842 + 416 675 415 + 292 900 918 + 335 565 795 + 145 396 558 + 320 421 585 + 315 495 106 + 618 492 494 + 985 684 702 + 261 35 699 + 890 678 100 + 797 972 693 + 782 12 675 + 991 963 24 + 774 465 254 + 409 446 291 + 920 178 430 + 558 186 476 + 668 502 39 + 897 497 471 + 927 534 95 + 465 621 535 + 971 718 597 + 440 803 941 + 859 104 59 + 891 712 889 + 7 465 712 + 928 323 951 + 938 251 464 + 939 541 491 + 376 430 543 + 605 181 684 + 849 578 57 + 635 433 572 + 958 171 565 + 525 870 63 + 198 864 591 + 466 125 610 + 442 604 512 + 444 666 55 + 129 374 546 + 893 328 978 + 78 279 999 + 852 302 465 + 378 619 123 + 97 246 185 + 374 775 308 + 579 48 388 + 497 730 745 + 142 703 596 + 387 31 973 + 861 944 602 + 894 919 522 + 755 689 409 + 592 310 115 + 326 708 398 + 53 87 866 + 966 266 370 + 925 281 815 + 864 315 882 + 699 352 849 + 526 185 948 + 58 454 681 + 496 917 237 + 556 907 558 + 815 422 705 + 232 423 194 + 941 811 583 + 686 207 335 + 637 693 440 + 574 795 385 + 531 936 899 + 721 950 37 + 317 786 906 + 830 719 101 + 360 615 650 + 689 218 676 + 790 208 197 + 621 7 791 + 868 203 866 + 16 491 53 + 952 268 717 + 956 736 773 + 793 386 760 + 750 624 957 + 184 964 443 + 454 684 835 + 439 931 60 + 293 434 866 + 990 467 282 + 664 423 302 + 523 485 116 + 127 469 710 + 625 758 497 + 514 544 998 + 571 281 413 + 458 70 645 + 526 283 884 + 77 738 725 + 802 278 508 + 782 597 976 + 385 358 919 + 710 492 994 + 750 517 79 + 964 231 679 + 370 34 845 + 951 245 299 + 83 431 846 + 384 989 609 + 447 761 747 + 647 898 371 + 95 794 298 + 644 157 625 + 663 107 507 + 572 927 578 + 165 926 94 + 455 530 905 + 397 412 598 + 616 239 788 + 228 556 609 + 26 540 184 + 208 745 687 + 877 36 977 + 64 29 195 + 936 56 807 + 952 253 397 + 62 246 95 + 923 102 491 + 576 116 739 + 919 559 820 + 882 534 865 + 490 650 961 + 441 741 975 + 59 922 597 + 76 209 337 + 293 785 447 + 338 971 276 + 117 581 939 + 210 266 701 + 108 448 378 + 253 556 164 + 998 200 168 + 969 358 13 + 606 206 458 + 752 400 571 + 796 521 911 + 934 50 150 + 96 205 764 + 844 216 657 + 669 434 222 + 242 301 66 + 471 277 227 + 732 681 20 + 67 991 597 + 784 793 613 + 198 841 555 + 109 429 396 + 219 461 729 + 128 255 888 + 850 154 754 + 809 226 387 + 719 468 706 + 289 436 26 + 441 280 688 + 510 57 451 + 417 255 277 + 670 198 625 + 791 681 20 + 803 998 294 + 332 323 282 + 905 213 739 + 115 267 394 + 965 213 788 + 125 829 635 + 90 281 640 + 103 584 81 + 407 771 19 + 205 213 708 + 380 814 704 + 778 462 872 + 799 553 758 + 402 193 269 + 403 947 198 + 814 22 499 + 532 948 570 + 159 951 932 + 505 616 592 + 507 657 785 + 811 860 675 + 831 140 99 + 450 966 627 + 939 358 947 + 182 201 1 + 951 487 951 + 367 376 539 + 972 491 495 + 758 761 80 + 122 872 278 + 933 927 926 + 835 300 759 + 733 195 418 + 347 73 485 + 783 138 660 + 186 586 422 + 464 301 410 + 479 552 175 + 532 634 83 + 383 285 44 + 436 431 58 + 535 170 985 + 632 274 488 + 338 130 571 + 176 582 380 + 669 613 396 + 705 169 719 + 856 993 121 + 133 966 370 + 914 196 281 + 798 669 132 + 890 418 374 + 955 705 442 + 159 406 397 + 404 59 893 + 526 377 933 + 248 442 442 + 471 116 739 + 292 552 575 + 676 666 574 + 511 172 422 + 796 592 548 + 697 197 477 + 661 900 981 + 526 779 684 + 989 910 867 + 482 449 661 + 891 955 235 + 826 260 714 + 652 178 978 + 234 346 905 + 935 213 526 + 329 593 819 + 651 773 628 + 879 926 371 + 868 42 701 + 13 891 485 + 130 730 141 + 454 725 922 + 586 445 826 + 274 99 77 + 282 84 102 + 318 19 73 + 467 956 769 + 90 409 641 + 417 660 846 + 417 577 381 + 463 863 570 + 46 323 473 + 261 448 309 + 499 63 834 + 334 421 710 + 392 296 356 + 432 152 633 + 48 257 572 + 130 797 559 + 304 136 450 + 285 807 671 + 715 135 563 + 504 218 531 + 838 139 745 + 938 200 245 + 866 797 168 + 656 709 308 + 213 654 329 + 550 138 928 + 454 702 780 + 881 227 940 + 83 894 989 + 903 836 207 + 134 762 835 + 592 857 242 + 724 922 700 + 612 291 718 + 874 856 943 + 413 854 568 + 843 169 497 + 815 927 781 + 236 776 958 + 990 235 853 + 537 229 396 + 706 195 709 + 13 38 102 + 665 705 455 + 655 735 525 + 490 30 684 + 291 219 12 + 657 236 687 + 814 779 613 + 957 976 589 + 705 994 456 + 276 389 477 + 968 752 553 + 708 859 947 + 267 922 639 + 34 724 754 + 253 262 358 + 693 662 387 + 386 326 592 + 432 547 227 + 295 465 360 + 604 434 858 + 627 759 610 + 676 557 182 + 231 538 98 + 817 595 122 + 153 686 713 + 71 491 59 + 197 631 744 + 202 441 943 + 509 420 915 + 572 160 162 + 836 976 237 + 235 26 160 + 729 984 367 + 385 758 902 + 190 475 560 + 432 289 613 + 435 200 247 + 366 614 260 + 708 445 16 + 367 330 743 + 397 750 311 + 35 581 700 + 574 182 762 + 930 258 952 + 739 297 845 + 291 229 421 + 986 463 383 + 875 605 217 + 215 993 9 + 762 768 136 + 960 561 130 + 809 868 81 + 843 592 612 + 159 449 610 + 148 831 220 + 42 173 589 + 152 872 608 + 895 190 707 + 675 245 822 + 671 246 352 + 401 246 973 + 124 390 123 + 461 579 871 + 874 975 766 + 472 257 751 + 421 887 254 + 429 259 207 + 472 362 673 + 392 598 763 + 459 736 45 + 771 314 779 + 734 589 747 + 206 592 287 + 984 629 554 + 801 590 601 + 517 61 527 + 389 133 105 + 862 114 607 + 238 748 757 + 915 890 653 + 984 939 697 + 532 53 229 + 822 196 730 + 621 248 666 + 901 819 307 + 809 540 510 + 113 719 233 + 348 69 692 + 842 890 213 + 821 951 579 + 529 323 306 + 89 323 543 + 440 26 722 + 802 522 426 + 756 657 960 + 93 596 816 + 866 442 378 + 828 556 364 + 96 121 12 + 317 648 577 + 253 53 633 + 544 688 931 + 424 790 344 + 458 865 145 + 562 831 363 + 893 221 919 + 840 92 529 + 169 297 774 + 838 306 682 + 441 121 570 + 428 389 811 + 344 727 239 + 196 44 826 + 229 728 950 + 357 615 210 + 859 776 89 + 935 539 212 + 884 487 844 + 31 508 774 + 851 25 109 + 436 477 675 + 584 995 828 + 573 794 507 + 599 655 909 + 303 126 412 + 752 568 805 + 987 391 459 + 680 853 647 + 778 468 531 + 415 606 323 + 490 746 519 + 373 674 320 + 200 95 319 + 251 186 808 + 49 280 952 + 173 406 142 + 421 808 498 + 550 953 635 + 314 384 519 + 383 663 385 + 116 706 387 + 376 445 205 + 430 181 173 + 248 525 43 + 274 444 534 + 582 464 599 + 858 68 229 + 353 821 235 + 564 259 256 + 510 953 54 + 713 337 323 + 4 96 282 + 711 402 41 + 337 629 820 + 185 206 180 + 385 472 645 + 455 600 405 + 743 974 79 + 591 819 423 + 741 14 207 + 290 698 121 + 851 693 145 + 739 993 803 + 740 484 702 + 304 582 551 + 132 253 734 + 770 178 853 + 835 268 809 + 759 934 619 + 984 542 238 + 835 741 413 + 606 159 861 + 699 163 862 + 96 50 31 + 814 712 650 + 818 212 404 + 32 784 659 + 111 465 941 + 895 376 756 + 924 574 646 + 341 753 965 + 400 394 948 + 379 471 35 + 171 467 199 + 528 16 634 + 360 453 592 + 820 44 316 + 591 841 550 + 724 825 255 + 356 648 85 + 338 530 337 + 637 151 291 + 811 629 578 + 709 389 77 + 208 856 654 + 781 611 560 + 165 676 590 + 657 192 67 + 737 322 236 + 946 299 235 + 410 438 205 + 789 274 389 + 834 318 884 + 107 335 552 + 283 336 8 + 755 310 431 + 920 497 430 + 576 751 597 + 9 893 607 + 570 151 70 + 514 330 198 + 481 726 103 + 324 929 124 + 594 180 866 + 901 125 69 + 528 60 899 + 705 772 441 + 156 93 469 + 701 849 58 + 66 437 140 + 424 499 152 + 380 921 55 + 825 124 860 + 424 246 851 + 832 211 94 + 419 701 417 + 296 310 689 + 127 647 813 + 881 699 761 + 815 948 199 + 176 386 713 + 371 373 510 + 356 995 411 + 97 864 476 + 267 888 213 + 656 368 996 + 921 760 863 + 208 243 271 + 241 16 796 + 168 256 928 + 213 677 471 + 829 27 169 + 747 648 351 + 339 681 214 + 398 512 176 + 251 212 367 + 313 846 267 + 255 735 547 + 271 212 356 + 146 401 656 + 245 891 351 + 334 623 729 + 498 864 547 + 857 596 730 + 482 834 899 + 400 836 434 + 78 390 440 + 398 688 167 + 63 564 884 + 587 891 982 + 594 431 168 + 439 990 512 + 219 905 258 + 550 82 523 + 631 402 199 + 148 517 112 + 743 670 185 + 605 731 534 + 651 124 537 + 81 710 220 + 520 635 499 + 761 929 500 + 741 403 917 + 68 710 230 + 278 538 203 + 235 229 295 + 470 244 126 + 448 350 96 + 56 247 75 + 861 763 85 + 571 855 522 + 410 96 437 + 196 552 400 + 651 453 974 + 458 674 706 + 211 593 139 + 388 134 179 + 407 608 180 + 640 454 445 + 213 176 407 + 616 447 712 + 252 103 866 + 242 27 981 + 147 85 675 + 314 370 693 + 256 490 434 + 296 206 544 + 531 137 677 + 577 524 896 + 61 486 293 + 677 425 436 + 605 304 630 + 654 542 339 + 863 592 22 + 914 224 711 + 234 649 727 + 873 159 424 + 826 639 696 + 136 653 407 + 436 767 449 + 678 875 610 + 271 785 460 + 569 592 969 + 729 582 988 + 326 139 391 + 841 847 925 + 425 991 861 + 642 949 501 + 895 661 827 + 979 685 941 + 724 208 801 + 439 724 125 + 527 998 303 + 150 327 217 + 7 188 418 + 52 110 291 + 59 211 162 + 989 311 166 + 377 12 561 + 650 303 503 + 427 496 663 + 419 913 81 + 364 531 661 + 991 37 692 + 773 394 245 + 459 357 617 + 949 190 23 + 544 154 313 + 629 156 298 + 338 753 854 + 282 744 855 + 273 23 3 + 908 784 528 + 889 764 520 + 65 327 55 + 118 826 479 + 285 34 48 + 320 820 441 + 652 154 358 + 373 876 806 + 543 778 916 + 261 387 788 + 695 408 734 + 956 128 961 + 750 302 195 + 669 163 641 + 197 291 528 + 406 959 749 + 835 747 135 + 474 931 721 + 374 616 113 + 385 279 59 + 85 772 123 + 767 955 243 + 782 383 174 + 253 918 312 + 941 99 123 + 234 689 235 + 950 737 269 + 145 535 192 + 13 352 267 + 134 621 325 + 897 529 864 + 373 646 618 + 597 968 619 + 876 655 663 + 83 735 132 + 866 556 738 + 580 162 735 + 437 822 458 + 482 811 492 + 401 656 753 + 615 435 892 + 493 771 395 + 721 994 734 + 243 133 298 + 526 873 809 + 564 836 232 + 768 309 254 + 366 958 72 + 568 606 339 + 775 134 538 + 255 575 619 + 997 278 669 + 957 88 623 + 720 342 370 + 213 811 197 + 931 690 50 + 838 814 200 + 776 480 744 + 638 396 519 + 356 511 309 + 912 125 65 + 939 277 931 + 305 350 864 + 20 981 501 + 78 931 296 + 66 194 781 + 572 395 560 + 453 92 447 + 919 312 747 + 824 44 469 + 367 312 862 + 709 357 563 + 637 984 458 + 549 698 470 + 248 861 48 + 603 264 145 + 379 795 37 + 607 646 180 + 826 195 197 + 562 207 255 + 426 29 108 + 945 796 577 + 292 521 686 + 674 293 324 + 739 14 179 + 544 385 839 + 236 373 943 + 126 522 467 + 17 521 11 + 111 12 470 + 232 480 781 + 393 938 941 + 541 520 836 + 705 990 34 + 800 961 999 + 532 825 963 + 783 931 544 + 327 483 595 + 578 905 886 + 734 718 476 + 744 158 824 + 80 643 837 + 118 615 866 + 59 51 845 + 56 598 106 + 676 553 786 + 660 815 795 + 202 324 8 + 349 876 702 + 421 439 420 + 717 937 924 + 223 875 728 + 236 895 561 + 302 114 176 + 314 163 38 + 349 581 456 + 124 526 474 + 537 74 902 + 618 216 612 + 183 160 937 + 945 731 219 + 108 30 508 + 935 728 300 + 854 527 753 + 87 473 250 + 918 208 524 + 554 611 73 + 545 728 620 + 77 596 588 + 751 552 839 + 615 178 163 + 993 541 716 + 581 615 625 + 788 406 731 + 655 937 322 + 223 203 650 + 267 376 258 + 321 428 886 + 379 751 439 + 865 701 554 + 758 180 165 + 880 855 658 + 53 414 748 + 852 963 754 + 324 813 28 + 535 817 588 + 364 44 581 + 211 198 458 + 193 192 695 + 61 92 991 + 205 599 445 + 920 416 284 + 965 956 500 + 835 324 654 + 627 371 100 + 897 92 624 + 47 382 646 + 800 43 758 + 804 349 363 + 766 209 373 + 299 499 662 + 685 349 311 + 23 870 624 + 202 811 638 + 189 231 50 + 813 226 556 + 546 499 403 + 476 654 206 + 781 604 423 + 805 673 459 + 26 452 406 + 278 721 185 + 364 442 550 + 169 576 423 + 808 518 616 + 841 739 727 + 380 504 391 + 191 81 239 + 895 35 203 + 940 65 86 + 311 717 120 + 77 422 22 + 318 531 139 + 613 513 219 + 650 825 630 + 45 488 702 + 470 339 498 + 849 231 382 + 623 154 426 + 23 433 332 + 810 273 385 + 835 251 140 + 83 577 853 + 125 526 609 + 174 415 846 + 698 974 257 + 280 869 9 + 436 151 254 + 603 73 174 + 782 392 58 + 626 457 140 + 629 410 748 + 40 30 560 + 601 427 364 + 532 766 900 + 969 786 66 + 558 31 848 + 8 834 70 + 915 887 103 + 909 468 53 + 738 758 163 + 805 631 345 + 188 364 354 + 116 605 773 + 366 606 20 + 346 85 757 + 447 812 952 + 51 696 925 + 425 428 977 + 817 409 802 + 911 218 886 + 335 240 294 + 17 100 608 + 2 77 754 + 20 100 721 + 984 724 971 + 446 970 606 + 948 270 957 + 765 492 236 + 527 552 37 + 365 301 253 + 434 418 690 + 501 250 117 + 416 292 808 + 180 696 352 + 657 477 190 + 568 244 418 + 716 395 525 + 725 691 472 + 611 625 489 + 584 930 500 + 600 702 701 + 202 762 713 + 354 361 19 + 579 524 355 + 711 499 338 + 430 427 492 + 680 504 673 + 284 396 779 + 544 250 813 + 247 47 933 + 372 205 679 + 458 583 566 + 161 787 651 + 438 308 536 + 138 281 797 + 452 223 221 + 460 496 911 + 401 351 611 + 191 218 755 + 475 452 497 + 72 219 536 + 906 220 214 + 959 62 418 + 225 697 628 + 195 838 657 + 411 854 328 + 993 733 236 + 846 838 306 + 263 112 119 + 158 9 149 + 144 87 732 + 87 82 674 + 283 33 61 + 888 734 364 + 718 750 344 + 2 485 454 + 337 451 728 + 341 170 577 + 651 272 820 + 225 562 481 + 472 759 609 + 63 402 607 + 731 394 506 + 744 680 331 + 697 381 236 + 336 396 451 + 360 20 281 + 710 608 343 + 624 567 415 + 778 800 390 + 422 831 213 + 453 294 120 + 28 635 287 + 788 367 373 + 213 739 579 + 622 560 219 + 296 890 516 + 733 808 384 + 481 245 585 + 58 647 842 + 60 652 705 + 2 100 202 + 36 696 415 + 151 786 712 + 174 410 804 + 867 904 58 + 885 869 868 + 99 679 864 + 396 301 272 + 744 849 192 + 425 621 289 + 805 71 892 + 92 422 424 + 873 363 573 + 480 977 298 + 263 514 173 + 456 963 265 + 636 637 203 + 902 573 219 + 414 405 90 + 314 842 900 + 251 946 787 + 562 519 831 + 865 20 512 + 560 190 301 + 915 183 779 + 372 559 104 + 15 434 105 + 377 134 11 + 178 479 303 + 503 396 290 + 427 522 349 + 567 694 454 + 630 919 58 + 353 305 511 + 704 867 137 + 713 974 740 + 911 756 703 + 655 148 739 + 519 212 406 + 677 289 620 + 983 84 724 + 142 389 335 + 841 384 662 + 807 587 868 + 888 560 138 + 84 24 812 + 432 278 122 + 656 178 215 + 234 100 209 + 239 186 768 + 101 342 212 + 264 265 666 + 575 971 78 + 655 70 294 + 616 902 307 + 888 637 155 + 929 282 916 + 639 730 964 + 438 345 192 + 468 610 206 + 51 472 217 + 423 875 674 + 371 748 692 + 793 387 318 + 642 879 775 + 499 948 877 + 930 102 541 + 223 95 252 + 588 61 258 + 439 51 56 + 495 666 26 + 262 696 423 + 276 102 416 + 656 484 499 + 807 663 474 + 876 411 24 + 351 138 143 + 312 124 534 + 336 200 421 + 687 489 733 + 751 229 941 + 322 414 256 + 440 575 936 + 373 304 5 + 689 311 931 + 854 760 440 + 824 432 463 + 302 807 159 + 842 822 499 + 751 893 350 + 205 284 474 + 852 890 257 + 91 826 609 + 806 154 808 + 947 710 269 + 999 150 135 + 291 838 260 + 347 728 885 + 481 454 779 + 518 339 139 + 767 914 644 + 519 946 650 + 561 56 988 + 485 44 40 + 42 839 457 + 518 845 490 + 121 535 452 + 392 674 242 + 502 361 491 + 838 170 716 + 828 458 249 + 260 528 618 + 359 825 228 + 494 786 183 + 701 160 315 + 568 437 13 + 577 367 383 + 65 235 376 + 134 948 942 + 151 468 204 + 67 819 813 + 90 396 447 + 688 334 528 + 706 319 398 + 609 530 604 + 564 129 561 + 932 584 43 + 653 30 91 + 262 657 302 + 389 628 375 + 9 664 564 + 764 101 568 + 754 730 927 + 650 910 57 + 51 379 96 + 616 820 112 + 100 564 98 + 688 835 659 + 720 466 647 + 262 893 400 + 425 104 167 + 388 919 466 + 257 765 50 + 197 717 734 + 101 750 750 + 412 526 261 + 382 762 382 + 209 361 315 + 470 712 398 + 447 641 40 + 390 267 438 + 441 98 446 + 402 836 333 + 678 925 255 + 835 35 166 + 471 665 859 + 390 699 875 + 551 523 235 + 691 639 263 + 879 647 53 + 331 413 118 + 154 477 970 + 389 406 916 + 811 948 239 + 408 217 244 + 868 943 404 + 349 276 792 + 236 585 481 + 320 656 546 + 835 769 804 + 161 728 778 + 948 729 65 + 835 164 940 + 692 211 148 + 434 58 920 + 524 174 30 + 572 233 25 + 50 94 8 + 554 421 618 + 338 274 638 + 346 188 656 \ No newline at end of file diff --git a/2016/day03.rkt b/2016/day03.rkt new file mode 100644 index 0000000..6a61b72 --- /dev/null +++ b/2016/day03.rkt @@ -0,0 +1,25 @@ +#lang br/quicklang +(module+ reader + (provide read-syntax) + (define (read-syntax path port) + (strip-bindings + #`(module day01-mod "day03.rkt" + #,@(for*/list ([triangle-str (in-list (string-split (port->string port) "\n"))]) + `(triangle ,@(string-split triangle-str))))))) + +(define-macro (mb . TRIANGLES) + #'(#%module-begin + (length (filter valid-triangle? (list . TRIANGLES))))) +(provide (rename-out [mb #%module-begin])) + +(define-macro (triangle A B C) + #'(list (string->number A) + (string->number B) + (string->number C))) +(provide triangle) + +(define (valid-triangle? triangle) + (match-define (list a b c) triangle) + (and (> (+ a b) c) + (> (+ b c) a) + (> (+ a c) b))) \ No newline at end of file diff --git a/2016/day03b-test.rkt b/2016/day03b-test.rkt new file mode 100644 index 0000000..c9d9eb2 --- /dev/null +++ b/2016/day03b-test.rkt @@ -0,0 +1,1909 @@ +#lang aoc-racket/2016/day03b + 4 21 894 + 419 794 987 + 424 797 125 + 651 305 558 + 655 631 963 + 2 628 436 + 736 50 363 + 657 707 408 + 252 705 98 + 532 173 878 + 574 792 854 + 157 737 303 + 468 76 580 + 502 503 434 + 467 567 310 + 911 911 391 + 791 913 925 + 174 49 532 + 796 803 426 + 800 132 710 + 273 722 711 + 388 576 551 + 17 936 676 + 371 712 141 + 692 738 913 + 745 805 975 + 381 140 680 + 859 344 336 + 109 148 877 + 835 441 716 + 355 288 669 + 968 259 517 + 979 350 773 + 134 222 347 + 614 279 628 + 510 140 590 + 901 581 707 + 958 933 680 + 95 558 766 + 676 739 739 + 890 40 825 + 280 735 297 + 593 354 701 + 555 756 730 + 39 656 853 + 399 660 14 + 293 685 48 + 109 374 42 + 260 608 680 + 306 885 603 + 49 683 810 + 125 513 512 + 706 600 143 + 728 138 658 + 410 673 27 + 617 872 89 + 923 733 103 + 462 674 95 + 352 718 191 + 129 351 173 + 648 839 828 + 332 829 789 + 947 44 214 + 768 576 184 + 672 900 601 + 98 672 738 + 368 926 539 + 271 300 372 + 141 844 261 + 731 426 205 + 734 979 792 + 16 703 888 + 133 682 323 + 428 784 182 + 398 171 394 + 154 845 425 + 643 14 775 + 695 849 432 + 22 227 464 + 490 544 485 + 474 701 910 + 902 629 10 + 996 680 67 + 91 908 75 + 653 600 845 + 439 53 117 + 480 552 860 + 156 144 46 + 492 359 597 + 408 473 614 + 469 343 737 + 777 438 149 + 803 114 676 + 78 835 753 + 567 230 707 + 542 738 49 + 286 542 939 + 75 985 179 + 293 914 854 + 234 609 877 + 237 167 880 + 151 722 925 + 793 515 278 + 350 432 777 + 883 402 581 + 621 501 702 + 494 265 665 + 167 668 345 + 853 911 629 + 747 428 576 + 703 979 73 + 938 798 401 + 851 743 542 + 281 216 483 + 772 573 404 + 598 547 606 + 275 107 823 + 92 94 864 + 416 201 759 + 331 146 446 + 200 375 70 + 459 349 928 + 615 77 999 + 748 380 628 + 624 244 759 + 934 512 163 + 964 117 75 + 515 146 209 + 917 31 218 + 694 640 116 + 758 53 375 + 250 655 353 + 153 200 189 + 259 752 85 + 313 637 129 + 361 632 973 + 896 61 934 + 581 611 483 + 620 788 889 + 959 273 754 + 677 997 322 + 43 201 714 + 181 956 734 + 147 878 850 + 139 802 938 + 542 729 26 + 531 201 915 + 412 917 301 + 845 44 811 + 489 897 626 + 378 384 781 + 429 130 313 + 583 400 515 + 811 937 949 + 584 812 909 + 738 143 205 + 79 813 801 + 599 872 539 + 650 177 384 + 299 267 539 + 506 358 516 + 425 520 185 + 901 854 622 + 84 371 21 + 931 797 642 + 274 155 432 + 366 935 635 + 331 810 836 + 56 725 67 + 9 756 985 + 58 38 946 + 385 807 899 + 336 998 3 + 243 539 893 + 792 117 272 + 345 995 452 + 717 892 262 + 311 694 23 + 737 169 392 + 875 741 379 + 609 422 100 + 644 442 916 + 832 51 967 + 230 962 82 + 380 202 931 + 308 786 903 + 556 668 121 + 194 650 263 + 732 20 346 + 528 445 589 + 341 142 684 + 281 302 550 + 408 511 219 + 683 938 617 + 679 705 763 + 812 847 313 + 557 838 308 + 888 23 145 + 120 20 129 + 450 643 245 + 329 658 282 + 30 878 700 + 698 799 335 + 698 320 595 + 875 959 595 + 50 715 454 + 856 686 269 + 986 38 589 + 834 925 69 + 263 928 654 + 430 175 586 + 99 712 642 + 439 679 132 + 639 714 644 + 563 940 62 + 228 385 666 + 758 757 949 + 137 174 104 + 859 746 939 + 675 140 592 + 324 446 357 + 471 486 455 + 450 429 980 + 955 388 599 + 914 222 512 + 981 673 871 + 941 716 744 + 55 192 173 + 98 48 411 + 774 686 343 + 689 671 412 + 666 613 686 + 420 595 550 + 891 148 204 + 150 678 978 + 420 684 49 + 503 879 985 + 95 508 231 + 90 393 777 + 17 464 813 + 372 120 26 + 513 10 445 + 258 133 460 + 392 29 355 + 116 874 635 + 326 889 493 + 883 599 250 + 913 388 798 + 85 366 782 + 422 416 204 + 533 174 93 + 168 413 270 + 617 996 461 + 8 386 1 + 613 928 464 + 455 545 619 + 424 631 488 + 142 612 146 + 921 374 324 + 744 791 395 + 923 797 445 + 876 447 602 + 851 62 493 + 23 397 993 + 232 602 90 + 790 604 698 + 855 7 654 + 350 105 561 + 550 198 327 + 670 130 340 + 904 943 765 + 23 467 804 + 906 726 948 + 337 90 774 + 438 546 667 + 134 625 247 + 334 282 729 + 619 275 412 + 377 5 763 + 250 722 852 + 754 365 401 + 558 393 615 + 974 673 39 + 922 610 899 + 99 969 868 + 89 616 911 + 235 326 371 + 252 605 907 + 429 387 678 + 564 34 565 + 436 359 584 + 125 780 474 + 842 372 184 + 785 507 489 + 849 418 633 + 962 191 582 + 728 453 669 + 91 970 639 + 48 222 639 + 41 865 103 + 395 765 945 + 551 103 9 + 313 687 956 + 952 109 894 + 612 79 518 + 392 119 506 + 106 739 427 + 941 688 483 + 917 103 114 + 326 466 604 + 393 641 488 + 128 920 135 + 609 742 725 + 101 596 371 + 631 325 416 + 318 939 170 + 166 540 821 + 460 654 843 + 672 942 330 + 620 673 352 + 288 731 20 + 263 277 387 + 259 49 434 + 73 262 278 + 525 775 36 + 867 735 125 + 437 415 141 + 567 537 640 + 99 581 584 + 468 108 84 + 608 997 893 + 573 722 971 + 497 953 399 + 201 184 372 + 203 323 386 + 2 331 72 + 375 687 307 + 484 57 322 + 311 704 416 + 720 961 571 + 444 211 926 + 668 771 666 + 742 688 146 + 447 435 143 + 394 444 1 + 450 39 373 + 150 634 442 + 422 645 546 + 132 562 281 + 795 365 455 + 921 389 255 + 17 153 85 + 795 593 367 + 788 637 447 + 292 297 703 + 190 938 871 + 166 821 386 + 437 636 385 + 160 288 604 + 334 584 837 + 701 207 665 + 470 84 204 + 599 268 739 + 634 92 148 + 507 620 198 + 193 677 94 + 301 990 536 + 874 493 783 + 932 550 497 + 81 166 546 + 633 538 476 + 553 411 790 + 593 159 316 + 47 729 226 + 619 708 409 + 38 535 763 + 421 830 550 + 400 537 641 + 275 531 166 + 247 564 495 + 177 791 655 + 959 363 548 + 232 105 594 + 919 272 912 + 258 467 505 + 882 783 365 + 916 331 441 + 70 815 204 + 66 304 470 + 2 810 372 + 734 276 875 + 771 295 72 + 455 191 892 + 765 384 195 + 758 418 844 + 38 121 980 + 302 379 606 + 116 384 199 + 353 13 607 + 712 805 790 + 589 701 694 + 540 776 276 + 985 814 61 + 996 10 709 + 450 821 652 + 715 26 899 + 628 656 679 + 322 669 279 + 144 649 518 + 962 175 363 + 839 627 292 + 931 934 378 + 588 382 122 + 410 923 263 + 652 680 654 + 25 878 835 + 640 399 396 + 492 202 511 + 510 225 521 + 15 413 233 + 493 551 122 + 683 222 569 + 248 457 641 + 100 936 315 + 902 998 870 + 975 98 680 + 998 309 653 + 605 944 532 + 530 887 400 + 572 879 925 + 311 147 692 + 425 924 848 + 453 945 934 + 492 918 22 + 434 338 933 + 288 297 665 + 274 712 185 + 99 503 741 + 868 523 263 + 828 218 121 + 53 565 236 + 15 409 778 + 367 293 444 + 352 610 413 + 892 970 706 + 954 767 321 + 75 656 414 + 823 781 57 + 423 673 349 + 817 405 324 + 768 19 345 + 302 949 529 + 654 944 794 + 262 766 959 + 783 92 866 + 772 718 772 + 629 154 669 + 723 349 109 + 914 352 599 + 559 746 346 + 492 781 860 + 103 52 624 + 655 397 857 + 680 242 417 + 183 203 846 + 714 519 457 + 849 292 946 + 605 566 646 + 793 653 156 + 111 135 44 + 882 531 191 + 920 773 378 + 911 340 546 + 23 655 382 + 656 708 587 + 43 792 708 + 673 734 605 + 506 725 943 + 421 762 553 + 471 214 572 + 195 575 438 + 114 546 687 + 121 47 894 + 744 221 820 + 58 273 982 + 759 58 233 + 770 824 785 + 857 441 480 + 87 387 477 + 838 633 28 + 635 547 49 + 329 404 47 + 534 955 933 + 661 985 662 + 199 144 713 + 228 996 622 + 197 523 858 + 64 486 552 + 859 968 422 + 847 31 648 + 41 944 812 + 625 953 830 + 987 734 37 + 529 512 825 + 104 690 688 + 602 224 973 + 592 888 409 + 241 247 639 + 290 80 570 + 483 284 97 + 322 223 57 + 91 204 503 + 257 18 464 + 904 480 177 + 945 364 137 + 199 240 234 + 231 177 23 + 537 147 464 + 683 71 468 + 448 55 544 + 264 143 640 + 307 125 706 + 674 384 373 + 469 903 656 + 538 695 361 + 461 942 728 + 430 911 347 + 85 70 789 + 422 525 65 + 466 322 776 + 49 620 765 + 832 530 9 + 215 92 417 + 965 511 415 + 865 888 289 + 993 74 332 + 685 830 52 + 11 334 151 + 98 36 192 + 93 307 89 + 38 483 498 + 674 317 910 + 697 302 486 + 267 29 508 + 816 924 165 + 895 954 671 + 629 75 634 + 591 301 149 + 368 346 735 + 916 606 382 + 63 786 124 + 916 180 475 + 466 656 218 + 128 35 326 + 570 665 164 + 181 382 773 + 256 122 266 + 130 288 905 + 288 524 40 + 278 526 471 + 39 243 476 + 951 16 522 + 662 93 522 + 378 107 7 + 218 520 10 + 654 399 343 + 674 158 351 + 854 320 834 + 722 358 818 + 231 178 671 + 862 892 764 + 109 461 982 + 943 655 412 + 745 541 255 + 868 541 297 + 472 20 224 + 163 991 647 + 249 883 588 + 232 486 162 + 236 281 784 + 416 261 65 + 377 34 790 + 357 121 610 + 542 439 866 + 860 324 598 + 865 337 712 + 368 421 977 + 839 280 457 + 140 655 416 + 962 381 331 + 901 685 732 + 818 483 831 + 13 724 791 + 818 694 222 + 746 822 841 + 829 418 836 + 335 565 408 + 516 447 281 + 584 204 166 + 480 508 119 + 713 787 704 + 626 941 739 + 206 418 284 + 989 326 701 + 636 396 195 + 397 393 655 + 240 696 896 + 166 117 974 + 72 733 210 + 797 533 566 + 729 728 481 + 663 212 86 + 298 475 563 + 590 533 517 + 618 314 133 + 422 195 38 + 195 415 288 + 540 303 253 + 446 553 859 + 568 891 223 + 432 617 981 + 519 214 775 + 529 721 844 + 786 898 692 + 440 401 201 + 345 353 846 + 296 566 906 + 638 422 370 + 15 577 469 + 624 192 134 + 136 554 755 + 182 690 940 + 77 366 923 + 284 979 275 + 157 582 373 + 433 547 343 + 767 786 527 + 983 877 385 + 581 612 158 + 365 520 673 + 436 227 897 + 458 421 913 + 579 492 760 + 818 493 507 + 316 22 867 + 114 421 939 + 372 281 912 + 415 608 633 + 938 676 927 + 965 591 931 + 335 789 34 + 865 820 346 + 406 798 304 + 893 441 267 + 166 126 835 + 764 859 839 + 629 918 194 + 557 297 552 + 954 79 478 + 801 224 670 + 640 493 262 + 750 478 681 + 534 867 654 + 980 586 142 + 882 597 156 + 277 186 48 + 448 541 23 + 457 702 496 + 11 936 491 + 689 668 457 + 368 941 288 + 914 311 464 + 893 843 828 + 800 933 797 + 951 427 657 + 754 215 476 + 148 260 508 + 735 130 193 + 390 631 761 + 288 203 777 + 273 443 23 + 189 20 355 + 240 344 560 + 157 360 674 + 921 774 803 + 473 943 937 + 600 920 393 + 611 579 530 + 632 577 59 + 24 5 495 + 701 358 722 + 703 284 820 + 625 625 844 + 649 253 531 + 447 309 534 + 662 218 419 + 762 347 627 + 947 344 133 + 581 36 652 + 222 747 122 + 238 761 162 + 72 82 231 + 717 296 966 + 563 516 774 + 273 451 819 + 956 175 651 + 33 770 754 + 956 650 369 + 146 838 148 + 588 713 547 + 453 457 541 + 979 92 401 + 967 162 417 + 144 155 672 + 725 737 962 + 779 701 886 + 64 203 120 + 433 284 482 + 911 538 512 + 613 713 77 + 268 636 685 + 445 955 193 + 458 677 653 + 91 450 356 + 747 11 360 + 728 448 147 + 37 494 679 + 780 582 256 + 756 212 810 + 556 434 265 + 280 472 983 + 547 93 857 + 922 225 378 + 754 138 346 + 236 235 349 + 718 421 501 + 80 880 464 + 753 490 286 + 616 332 218 + 338 391 547 + 490 599 370 + 35 559 686 + 67 290 565 + 30 597 153 + 59 763 701 + 268 439 123 + 237 940 669 + 451 205 145 + 302 284 961 + 365 443 828 + 225 598 65 + 437 561 73 + 248 219 7 + 72 29 274 + 577 35 654 + 537 41 857 + 956 966 739 + 545 747 373 + 479 463 705 + 112 79 161 + 280 885 672 + 322 829 596 + 422 279 697 + 804 997 963 + 907 852 494 + 321 245 492 + 298 698 419 + 49 454 185 + 169 214 25 + 880 324 414 + 816 163 425 + 366 370 167 + 729 49 684 + 460 337 792 + 719 908 817 + 825 310 303 + 245 814 724 + 877 713 128 + 488 241 839 + 499 820 884 + 918 356 273 + 69 228 442 + 877 523 698 + 780 391 627 + 838 539 547 + 512 867 786 + 491 298 421 + 402 153 940 + 602 220 539 + 638 167 534 + 626 204 122 + 77 170 569 + 342 364 529 + 74 523 842 + 416 675 415 + 292 900 918 + 335 565 795 + 145 396 558 + 320 421 585 + 315 495 106 + 618 492 494 + 985 684 702 + 261 35 699 + 890 678 100 + 797 972 693 + 782 12 675 + 991 963 24 + 774 465 254 + 409 446 291 + 920 178 430 + 558 186 476 + 668 502 39 + 897 497 471 + 927 534 95 + 465 621 535 + 971 718 597 + 440 803 941 + 859 104 59 + 891 712 889 + 7 465 712 + 928 323 951 + 938 251 464 + 939 541 491 + 376 430 543 + 605 181 684 + 849 578 57 + 635 433 572 + 958 171 565 + 525 870 63 + 198 864 591 + 466 125 610 + 442 604 512 + 444 666 55 + 129 374 546 + 893 328 978 + 78 279 999 + 852 302 465 + 378 619 123 + 97 246 185 + 374 775 308 + 579 48 388 + 497 730 745 + 142 703 596 + 387 31 973 + 861 944 602 + 894 919 522 + 755 689 409 + 592 310 115 + 326 708 398 + 53 87 866 + 966 266 370 + 925 281 815 + 864 315 882 + 699 352 849 + 526 185 948 + 58 454 681 + 496 917 237 + 556 907 558 + 815 422 705 + 232 423 194 + 941 811 583 + 686 207 335 + 637 693 440 + 574 795 385 + 531 936 899 + 721 950 37 + 317 786 906 + 830 719 101 + 360 615 650 + 689 218 676 + 790 208 197 + 621 7 791 + 868 203 866 + 16 491 53 + 952 268 717 + 956 736 773 + 793 386 760 + 750 624 957 + 184 964 443 + 454 684 835 + 439 931 60 + 293 434 866 + 990 467 282 + 664 423 302 + 523 485 116 + 127 469 710 + 625 758 497 + 514 544 998 + 571 281 413 + 458 70 645 + 526 283 884 + 77 738 725 + 802 278 508 + 782 597 976 + 385 358 919 + 710 492 994 + 750 517 79 + 964 231 679 + 370 34 845 + 951 245 299 + 83 431 846 + 384 989 609 + 447 761 747 + 647 898 371 + 95 794 298 + 644 157 625 + 663 107 507 + 572 927 578 + 165 926 94 + 455 530 905 + 397 412 598 + 616 239 788 + 228 556 609 + 26 540 184 + 208 745 687 + 877 36 977 + 64 29 195 + 936 56 807 + 952 253 397 + 62 246 95 + 923 102 491 + 576 116 739 + 919 559 820 + 882 534 865 + 490 650 961 + 441 741 975 + 59 922 597 + 76 209 337 + 293 785 447 + 338 971 276 + 117 581 939 + 210 266 701 + 108 448 378 + 253 556 164 + 998 200 168 + 969 358 13 + 606 206 458 + 752 400 571 + 796 521 911 + 934 50 150 + 96 205 764 + 844 216 657 + 669 434 222 + 242 301 66 + 471 277 227 + 732 681 20 + 67 991 597 + 784 793 613 + 198 841 555 + 109 429 396 + 219 461 729 + 128 255 888 + 850 154 754 + 809 226 387 + 719 468 706 + 289 436 26 + 441 280 688 + 510 57 451 + 417 255 277 + 670 198 625 + 791 681 20 + 803 998 294 + 332 323 282 + 905 213 739 + 115 267 394 + 965 213 788 + 125 829 635 + 90 281 640 + 103 584 81 + 407 771 19 + 205 213 708 + 380 814 704 + 778 462 872 + 799 553 758 + 402 193 269 + 403 947 198 + 814 22 499 + 532 948 570 + 159 951 932 + 505 616 592 + 507 657 785 + 811 860 675 + 831 140 99 + 450 966 627 + 939 358 947 + 182 201 1 + 951 487 951 + 367 376 539 + 972 491 495 + 758 761 80 + 122 872 278 + 933 927 926 + 835 300 759 + 733 195 418 + 347 73 485 + 783 138 660 + 186 586 422 + 464 301 410 + 479 552 175 + 532 634 83 + 383 285 44 + 436 431 58 + 535 170 985 + 632 274 488 + 338 130 571 + 176 582 380 + 669 613 396 + 705 169 719 + 856 993 121 + 133 966 370 + 914 196 281 + 798 669 132 + 890 418 374 + 955 705 442 + 159 406 397 + 404 59 893 + 526 377 933 + 248 442 442 + 471 116 739 + 292 552 575 + 676 666 574 + 511 172 422 + 796 592 548 + 697 197 477 + 661 900 981 + 526 779 684 + 989 910 867 + 482 449 661 + 891 955 235 + 826 260 714 + 652 178 978 + 234 346 905 + 935 213 526 + 329 593 819 + 651 773 628 + 879 926 371 + 868 42 701 + 13 891 485 + 130 730 141 + 454 725 922 + 586 445 826 + 274 99 77 + 282 84 102 + 318 19 73 + 467 956 769 + 90 409 641 + 417 660 846 + 417 577 381 + 463 863 570 + 46 323 473 + 261 448 309 + 499 63 834 + 334 421 710 + 392 296 356 + 432 152 633 + 48 257 572 + 130 797 559 + 304 136 450 + 285 807 671 + 715 135 563 + 504 218 531 + 838 139 745 + 938 200 245 + 866 797 168 + 656 709 308 + 213 654 329 + 550 138 928 + 454 702 780 + 881 227 940 + 83 894 989 + 903 836 207 + 134 762 835 + 592 857 242 + 724 922 700 + 612 291 718 + 874 856 943 + 413 854 568 + 843 169 497 + 815 927 781 + 236 776 958 + 990 235 853 + 537 229 396 + 706 195 709 + 13 38 102 + 665 705 455 + 655 735 525 + 490 30 684 + 291 219 12 + 657 236 687 + 814 779 613 + 957 976 589 + 705 994 456 + 276 389 477 + 968 752 553 + 708 859 947 + 267 922 639 + 34 724 754 + 253 262 358 + 693 662 387 + 386 326 592 + 432 547 227 + 295 465 360 + 604 434 858 + 627 759 610 + 676 557 182 + 231 538 98 + 817 595 122 + 153 686 713 + 71 491 59 + 197 631 744 + 202 441 943 + 509 420 915 + 572 160 162 + 836 976 237 + 235 26 160 + 729 984 367 + 385 758 902 + 190 475 560 + 432 289 613 + 435 200 247 + 366 614 260 + 708 445 16 + 367 330 743 + 397 750 311 + 35 581 700 + 574 182 762 + 930 258 952 + 739 297 845 + 291 229 421 + 986 463 383 + 875 605 217 + 215 993 9 + 762 768 136 + 960 561 130 + 809 868 81 + 843 592 612 + 159 449 610 + 148 831 220 + 42 173 589 + 152 872 608 + 895 190 707 + 675 245 822 + 671 246 352 + 401 246 973 + 124 390 123 + 461 579 871 + 874 975 766 + 472 257 751 + 421 887 254 + 429 259 207 + 472 362 673 + 392 598 763 + 459 736 45 + 771 314 779 + 734 589 747 + 206 592 287 + 984 629 554 + 801 590 601 + 517 61 527 + 389 133 105 + 862 114 607 + 238 748 757 + 915 890 653 + 984 939 697 + 532 53 229 + 822 196 730 + 621 248 666 + 901 819 307 + 809 540 510 + 113 719 233 + 348 69 692 + 842 890 213 + 821 951 579 + 529 323 306 + 89 323 543 + 440 26 722 + 802 522 426 + 756 657 960 + 93 596 816 + 866 442 378 + 828 556 364 + 96 121 12 + 317 648 577 + 253 53 633 + 544 688 931 + 424 790 344 + 458 865 145 + 562 831 363 + 893 221 919 + 840 92 529 + 169 297 774 + 838 306 682 + 441 121 570 + 428 389 811 + 344 727 239 + 196 44 826 + 229 728 950 + 357 615 210 + 859 776 89 + 935 539 212 + 884 487 844 + 31 508 774 + 851 25 109 + 436 477 675 + 584 995 828 + 573 794 507 + 599 655 909 + 303 126 412 + 752 568 805 + 987 391 459 + 680 853 647 + 778 468 531 + 415 606 323 + 490 746 519 + 373 674 320 + 200 95 319 + 251 186 808 + 49 280 952 + 173 406 142 + 421 808 498 + 550 953 635 + 314 384 519 + 383 663 385 + 116 706 387 + 376 445 205 + 430 181 173 + 248 525 43 + 274 444 534 + 582 464 599 + 858 68 229 + 353 821 235 + 564 259 256 + 510 953 54 + 713 337 323 + 4 96 282 + 711 402 41 + 337 629 820 + 185 206 180 + 385 472 645 + 455 600 405 + 743 974 79 + 591 819 423 + 741 14 207 + 290 698 121 + 851 693 145 + 739 993 803 + 740 484 702 + 304 582 551 + 132 253 734 + 770 178 853 + 835 268 809 + 759 934 619 + 984 542 238 + 835 741 413 + 606 159 861 + 699 163 862 + 96 50 31 + 814 712 650 + 818 212 404 + 32 784 659 + 111 465 941 + 895 376 756 + 924 574 646 + 341 753 965 + 400 394 948 + 379 471 35 + 171 467 199 + 528 16 634 + 360 453 592 + 820 44 316 + 591 841 550 + 724 825 255 + 356 648 85 + 338 530 337 + 637 151 291 + 811 629 578 + 709 389 77 + 208 856 654 + 781 611 560 + 165 676 590 + 657 192 67 + 737 322 236 + 946 299 235 + 410 438 205 + 789 274 389 + 834 318 884 + 107 335 552 + 283 336 8 + 755 310 431 + 920 497 430 + 576 751 597 + 9 893 607 + 570 151 70 + 514 330 198 + 481 726 103 + 324 929 124 + 594 180 866 + 901 125 69 + 528 60 899 + 705 772 441 + 156 93 469 + 701 849 58 + 66 437 140 + 424 499 152 + 380 921 55 + 825 124 860 + 424 246 851 + 832 211 94 + 419 701 417 + 296 310 689 + 127 647 813 + 881 699 761 + 815 948 199 + 176 386 713 + 371 373 510 + 356 995 411 + 97 864 476 + 267 888 213 + 656 368 996 + 921 760 863 + 208 243 271 + 241 16 796 + 168 256 928 + 213 677 471 + 829 27 169 + 747 648 351 + 339 681 214 + 398 512 176 + 251 212 367 + 313 846 267 + 255 735 547 + 271 212 356 + 146 401 656 + 245 891 351 + 334 623 729 + 498 864 547 + 857 596 730 + 482 834 899 + 400 836 434 + 78 390 440 + 398 688 167 + 63 564 884 + 587 891 982 + 594 431 168 + 439 990 512 + 219 905 258 + 550 82 523 + 631 402 199 + 148 517 112 + 743 670 185 + 605 731 534 + 651 124 537 + 81 710 220 + 520 635 499 + 761 929 500 + 741 403 917 + 68 710 230 + 278 538 203 + 235 229 295 + 470 244 126 + 448 350 96 + 56 247 75 + 861 763 85 + 571 855 522 + 410 96 437 + 196 552 400 + 651 453 974 + 458 674 706 + 211 593 139 + 388 134 179 + 407 608 180 + 640 454 445 + 213 176 407 + 616 447 712 + 252 103 866 + 242 27 981 + 147 85 675 + 314 370 693 + 256 490 434 + 296 206 544 + 531 137 677 + 577 524 896 + 61 486 293 + 677 425 436 + 605 304 630 + 654 542 339 + 863 592 22 + 914 224 711 + 234 649 727 + 873 159 424 + 826 639 696 + 136 653 407 + 436 767 449 + 678 875 610 + 271 785 460 + 569 592 969 + 729 582 988 + 326 139 391 + 841 847 925 + 425 991 861 + 642 949 501 + 895 661 827 + 979 685 941 + 724 208 801 + 439 724 125 + 527 998 303 + 150 327 217 + 7 188 418 + 52 110 291 + 59 211 162 + 989 311 166 + 377 12 561 + 650 303 503 + 427 496 663 + 419 913 81 + 364 531 661 + 991 37 692 + 773 394 245 + 459 357 617 + 949 190 23 + 544 154 313 + 629 156 298 + 338 753 854 + 282 744 855 + 273 23 3 + 908 784 528 + 889 764 520 + 65 327 55 + 118 826 479 + 285 34 48 + 320 820 441 + 652 154 358 + 373 876 806 + 543 778 916 + 261 387 788 + 695 408 734 + 956 128 961 + 750 302 195 + 669 163 641 + 197 291 528 + 406 959 749 + 835 747 135 + 474 931 721 + 374 616 113 + 385 279 59 + 85 772 123 + 767 955 243 + 782 383 174 + 253 918 312 + 941 99 123 + 234 689 235 + 950 737 269 + 145 535 192 + 13 352 267 + 134 621 325 + 897 529 864 + 373 646 618 + 597 968 619 + 876 655 663 + 83 735 132 + 866 556 738 + 580 162 735 + 437 822 458 + 482 811 492 + 401 656 753 + 615 435 892 + 493 771 395 + 721 994 734 + 243 133 298 + 526 873 809 + 564 836 232 + 768 309 254 + 366 958 72 + 568 606 339 + 775 134 538 + 255 575 619 + 997 278 669 + 957 88 623 + 720 342 370 + 213 811 197 + 931 690 50 + 838 814 200 + 776 480 744 + 638 396 519 + 356 511 309 + 912 125 65 + 939 277 931 + 305 350 864 + 20 981 501 + 78 931 296 + 66 194 781 + 572 395 560 + 453 92 447 + 919 312 747 + 824 44 469 + 367 312 862 + 709 357 563 + 637 984 458 + 549 698 470 + 248 861 48 + 603 264 145 + 379 795 37 + 607 646 180 + 826 195 197 + 562 207 255 + 426 29 108 + 945 796 577 + 292 521 686 + 674 293 324 + 739 14 179 + 544 385 839 + 236 373 943 + 126 522 467 + 17 521 11 + 111 12 470 + 232 480 781 + 393 938 941 + 541 520 836 + 705 990 34 + 800 961 999 + 532 825 963 + 783 931 544 + 327 483 595 + 578 905 886 + 734 718 476 + 744 158 824 + 80 643 837 + 118 615 866 + 59 51 845 + 56 598 106 + 676 553 786 + 660 815 795 + 202 324 8 + 349 876 702 + 421 439 420 + 717 937 924 + 223 875 728 + 236 895 561 + 302 114 176 + 314 163 38 + 349 581 456 + 124 526 474 + 537 74 902 + 618 216 612 + 183 160 937 + 945 731 219 + 108 30 508 + 935 728 300 + 854 527 753 + 87 473 250 + 918 208 524 + 554 611 73 + 545 728 620 + 77 596 588 + 751 552 839 + 615 178 163 + 993 541 716 + 581 615 625 + 788 406 731 + 655 937 322 + 223 203 650 + 267 376 258 + 321 428 886 + 379 751 439 + 865 701 554 + 758 180 165 + 880 855 658 + 53 414 748 + 852 963 754 + 324 813 28 + 535 817 588 + 364 44 581 + 211 198 458 + 193 192 695 + 61 92 991 + 205 599 445 + 920 416 284 + 965 956 500 + 835 324 654 + 627 371 100 + 897 92 624 + 47 382 646 + 800 43 758 + 804 349 363 + 766 209 373 + 299 499 662 + 685 349 311 + 23 870 624 + 202 811 638 + 189 231 50 + 813 226 556 + 546 499 403 + 476 654 206 + 781 604 423 + 805 673 459 + 26 452 406 + 278 721 185 + 364 442 550 + 169 576 423 + 808 518 616 + 841 739 727 + 380 504 391 + 191 81 239 + 895 35 203 + 940 65 86 + 311 717 120 + 77 422 22 + 318 531 139 + 613 513 219 + 650 825 630 + 45 488 702 + 470 339 498 + 849 231 382 + 623 154 426 + 23 433 332 + 810 273 385 + 835 251 140 + 83 577 853 + 125 526 609 + 174 415 846 + 698 974 257 + 280 869 9 + 436 151 254 + 603 73 174 + 782 392 58 + 626 457 140 + 629 410 748 + 40 30 560 + 601 427 364 + 532 766 900 + 969 786 66 + 558 31 848 + 8 834 70 + 915 887 103 + 909 468 53 + 738 758 163 + 805 631 345 + 188 364 354 + 116 605 773 + 366 606 20 + 346 85 757 + 447 812 952 + 51 696 925 + 425 428 977 + 817 409 802 + 911 218 886 + 335 240 294 + 17 100 608 + 2 77 754 + 20 100 721 + 984 724 971 + 446 970 606 + 948 270 957 + 765 492 236 + 527 552 37 + 365 301 253 + 434 418 690 + 501 250 117 + 416 292 808 + 180 696 352 + 657 477 190 + 568 244 418 + 716 395 525 + 725 691 472 + 611 625 489 + 584 930 500 + 600 702 701 + 202 762 713 + 354 361 19 + 579 524 355 + 711 499 338 + 430 427 492 + 680 504 673 + 284 396 779 + 544 250 813 + 247 47 933 + 372 205 679 + 458 583 566 + 161 787 651 + 438 308 536 + 138 281 797 + 452 223 221 + 460 496 911 + 401 351 611 + 191 218 755 + 475 452 497 + 72 219 536 + 906 220 214 + 959 62 418 + 225 697 628 + 195 838 657 + 411 854 328 + 993 733 236 + 846 838 306 + 263 112 119 + 158 9 149 + 144 87 732 + 87 82 674 + 283 33 61 + 888 734 364 + 718 750 344 + 2 485 454 + 337 451 728 + 341 170 577 + 651 272 820 + 225 562 481 + 472 759 609 + 63 402 607 + 731 394 506 + 744 680 331 + 697 381 236 + 336 396 451 + 360 20 281 + 710 608 343 + 624 567 415 + 778 800 390 + 422 831 213 + 453 294 120 + 28 635 287 + 788 367 373 + 213 739 579 + 622 560 219 + 296 890 516 + 733 808 384 + 481 245 585 + 58 647 842 + 60 652 705 + 2 100 202 + 36 696 415 + 151 786 712 + 174 410 804 + 867 904 58 + 885 869 868 + 99 679 864 + 396 301 272 + 744 849 192 + 425 621 289 + 805 71 892 + 92 422 424 + 873 363 573 + 480 977 298 + 263 514 173 + 456 963 265 + 636 637 203 + 902 573 219 + 414 405 90 + 314 842 900 + 251 946 787 + 562 519 831 + 865 20 512 + 560 190 301 + 915 183 779 + 372 559 104 + 15 434 105 + 377 134 11 + 178 479 303 + 503 396 290 + 427 522 349 + 567 694 454 + 630 919 58 + 353 305 511 + 704 867 137 + 713 974 740 + 911 756 703 + 655 148 739 + 519 212 406 + 677 289 620 + 983 84 724 + 142 389 335 + 841 384 662 + 807 587 868 + 888 560 138 + 84 24 812 + 432 278 122 + 656 178 215 + 234 100 209 + 239 186 768 + 101 342 212 + 264 265 666 + 575 971 78 + 655 70 294 + 616 902 307 + 888 637 155 + 929 282 916 + 639 730 964 + 438 345 192 + 468 610 206 + 51 472 217 + 423 875 674 + 371 748 692 + 793 387 318 + 642 879 775 + 499 948 877 + 930 102 541 + 223 95 252 + 588 61 258 + 439 51 56 + 495 666 26 + 262 696 423 + 276 102 416 + 656 484 499 + 807 663 474 + 876 411 24 + 351 138 143 + 312 124 534 + 336 200 421 + 687 489 733 + 751 229 941 + 322 414 256 + 440 575 936 + 373 304 5 + 689 311 931 + 854 760 440 + 824 432 463 + 302 807 159 + 842 822 499 + 751 893 350 + 205 284 474 + 852 890 257 + 91 826 609 + 806 154 808 + 947 710 269 + 999 150 135 + 291 838 260 + 347 728 885 + 481 454 779 + 518 339 139 + 767 914 644 + 519 946 650 + 561 56 988 + 485 44 40 + 42 839 457 + 518 845 490 + 121 535 452 + 392 674 242 + 502 361 491 + 838 170 716 + 828 458 249 + 260 528 618 + 359 825 228 + 494 786 183 + 701 160 315 + 568 437 13 + 577 367 383 + 65 235 376 + 134 948 942 + 151 468 204 + 67 819 813 + 90 396 447 + 688 334 528 + 706 319 398 + 609 530 604 + 564 129 561 + 932 584 43 + 653 30 91 + 262 657 302 + 389 628 375 + 9 664 564 + 764 101 568 + 754 730 927 + 650 910 57 + 51 379 96 + 616 820 112 + 100 564 98 + 688 835 659 + 720 466 647 + 262 893 400 + 425 104 167 + 388 919 466 + 257 765 50 + 197 717 734 + 101 750 750 + 412 526 261 + 382 762 382 + 209 361 315 + 470 712 398 + 447 641 40 + 390 267 438 + 441 98 446 + 402 836 333 + 678 925 255 + 835 35 166 + 471 665 859 + 390 699 875 + 551 523 235 + 691 639 263 + 879 647 53 + 331 413 118 + 154 477 970 + 389 406 916 + 811 948 239 + 408 217 244 + 868 943 404 + 349 276 792 + 236 585 481 + 320 656 546 + 835 769 804 + 161 728 778 + 948 729 65 + 835 164 940 + 692 211 148 + 434 58 920 + 524 174 30 + 572 233 25 + 50 94 8 + 554 421 618 + 338 274 638 + 346 188 656 \ No newline at end of file diff --git a/2016/day03b.rkt b/2016/day03b.rkt new file mode 100644 index 0000000..c0ced41 --- /dev/null +++ b/2016/day03b.rkt @@ -0,0 +1,31 @@ +#lang br/quicklang +(require sugar/list) + +(module+ reader + (provide read-syntax) + (define (read-syntax path port) + (define triads (slice-at (map string-split (string-split (port->string port) "\n")) 3)) + (define new-triples + (slice-at (flatten (for/list ([triad (in-list triads)]) + (apply map list triad))) 3)) + (strip-bindings + #`(module mod "day03b.rkt" + #,@(for*/list ([triple (in-list new-triples)]) + `(triangle ,@triple)))))) + +(define-macro (mb . TRIANGLES) + #'(#%module-begin + (length (filter valid-triangle? (list . TRIANGLES))))) +(provide (rename-out [mb #%module-begin])) + +(define-macro (triangle A B C) + #'(list (string->number A) + (string->number B) + (string->number C))) +(provide triangle) + +(define (valid-triangle? triangle) + (match-define (list a b c) triangle) + (and (> (+ a b) c) + (> (+ b c) a) + (> (+ a c) b))) \ No newline at end of file -- 2.25.1 From 3ba5818afd33ed6aefa9363dde076c530fbcb510 Mon Sep 17 00:00:00 2001 From: Matthew Butterick Date: Sun, 4 Dec 2016 08:39:26 -0800 Subject: [PATCH 08/43] day 04 --- 2016/day04-input.rkt | 981 +++++++++++++++++++++++++++++++++++++++++++ 2016/day04-test.rkt | 5 + 2016/day04.rkt | 55 +++ 3 files changed, 1041 insertions(+) create mode 100644 2016/day04-input.rkt create mode 100644 2016/day04-test.rkt create mode 100644 2016/day04.rkt diff --git a/2016/day04-input.rkt b/2016/day04-input.rkt new file mode 100644 index 0000000..4430ec2 --- /dev/null +++ b/2016/day04-input.rkt @@ -0,0 +1,981 @@ +#lang aoc-racket/2016/day04 +bkwzkqsxq-tovvilokx-nozvyiwoxd-172[fstek] +wifilzof-wbiwifuny-yhachyylcha-526[qrazx] +jvyyvzpcl-jhukf-shivyhavyf-487[zhtsi] +kwvacumz-ozilm-kivlg-kwvbiqvumvb-694[gknyw] +mvhkvbdib-kmjezxodgz-mvwwdo-omvdidib-837[dmvbi] +nzydfxpc-rclop-qwzhpc-lnbftdtetzy-171[cptzd] +vhehkyne-unggr-inkvatlbgz-813[gnehk] +tcorcikpi-hnqygt-octmgvkpi-570[nzewo] +xmtjbzidx-wvnfzo-jkzmvodjin-447[uyzlp] +willimcpy-mwupyhayl-bohn-mufym-734[stjoc] +sbejpbdujwf-cvooz-xpsltipq-961[azfnd] +jchipqat-qphzti-rjhidbtg-htgkxrt-271[thigj] +npmhcargjc-zsllw-pcqcypaf-158[mzwnx] +luxciuwncpy-jfumncw-alumm-qilembij-318[mucil] +bxaxipgn-vgpst-rpcsn-rdpixcv-htgkxrth-427[ywazt] +zekvierkzferc-tyftfcrkv-ivtvzmzex-295[evzfk] +enzcntvat-qlr-hfre-grfgvat-143[rtaef] +mvkccspson-bkllsd-nofovyzwoxd-224[oscdk] +enzcntvat-zvyvgnel-tenqr-pnaql-pbngvat-ratvarrevat-429[zymbs] +nwzekwypera-xwogap-pnwejejc-992[lkiwn] +ajmrxjlcren-ajkkrc-lxwcjrwvnwc-667[ezynd] +bxaxipgn-vgpst-hrpktcvtg-wjci-advxhixrh-661[lytku] +owshgfarwv-vqw-kzahhafy-190[ahwfv] +jqwpihizlwca-moo-twoqabqka-512[ncdyv] +apwmeclga-pyzzgr-rcaflmjmew-886[amceg] +tyepcyletzylw-ojp-wzrtdetnd-951[mxqsy] +dlhwvupglk-kfl-hjxbpzpapvu-773[nrotd] +fab-eqodqf-dmnnuf-bgdotmeuzs-612[dchyk] +qjopwxha-bhksan-skngodkl-940[kahno] +lsyrkjkbnyec-dyz-combod-cmkfoxqob-rexd-bomosfsxq-718[lktzs] +zixppfcfba-bdd-jxohbqfkd-939[sqtor] +vxupkizork-kmm-ktmotkkxotm-852[dsqjh] +excdklvo-mkxni-mykdsxq-nozkbdwoxd-952[zspmc] +bnqqnrhud-eknvdq-sqzhmhmf-391[qhndm] +gzefmnxq-otaoaxmfq-ogefayqd-eqdhuoq-716[zinwb] +qzoggwtwsr-qobrm-ghcfous-428[goqrs] +gpbepvxcv-ltpedcxots-qphzti-steadnbtci-193[ignjy] +hvbizodx-nxvqzibzm-cpio-hvmfzodib-265[hixfe] +wkqxodsm-lexxi-kxkvicsc-926[xkcis] +bknsykmdsfo-myxcewob-qbkno-oqq-zebmrkcsxq-380[utqrz] +lejkrscv-wcfnvi-kirzezex-711[ecikr] +htwwtxnaj-idj-btwpxmtu-255[itgmd] +zsxyfgqj-jll-ijufwyrjsy-931[wrpgt] +iuxxuyobk-yigbktmkx-natz-gtgreyoy-384[ygktx] +qjopwxha-xqjju-zalhkuiajp-628[esmxk] +lxaaxbren-ljwmh-anbnjalq-745[stjqy] +gokzyxsjon-zvkcdsm-qbkcc-dbksxsxq-380[tsyqk] +qzoggwtwsr-qobrm-qcohwbu-rsdofhasbh-168[obhqr] +pelbtravp-pnaql-fgbentr-325[pabel] +xzwrmkbqtm-akidmvomz-pcvb-mvoqvmmzqvo-122[mvoqz] +sbnqbhjoh-ezf-fohjoffsjoh-233[xskyb] +jyddc-yrwxefpi-fewoix-hiwmkr-412[pdekg] +fab-eqodqf-rxaiqd-xmnadmfadk-690[sicjl] +xcitgcpixdcpa-rpcsn-htgkxrth-427[stznv] +rflsjynh-rnqnyfwd-lwfij-jll-xytwflj-229[lfjnw] +zotts-wlsiayhcw-vumeyn-fuvilunils-500[ilsun] +odiih-yujbcrl-pajbb-dbna-cnbcrwp-147[bcadi] +udskkaxawv-tmffq-klgjsyw-996[tmnfc] +emixwvqhml-kpwkwtibm-wxmzibqwva-278[zomvn] +dfcxsqhwzs-dzoghwq-ufogg-zcuwghwqg-116[kmijn] +dwbcjkun-ouxfna-mnbrpw-745[nbuwa] +jchipqat-rwdrdapit-pcpanhxh-973[hglvu] +fkqbokxqflkxi-avb-zlkqxfkjbkq-861[wdnor] +wbhsfbohwcboz-foppwh-qighcasf-gsfjwqs-480[fhswb] +dzczkrip-xiruv-szfyrqriuflj-treup-kvtyefcfxp-451[rfipu] +fmsledevhsyw-fyrrc-eguymwmxmsr-698[yzoxu] +udskkaxawv-jsttal-wfyafwwjafy-840[nlkda] +sno-rdbqds-idkkxadzm-sqzhmhmf-287[lngzc] +crwwv-yxphbq-rpbo-qbpqfkd-341[bpqrw] +odiih-mhn-anjlzdrbrcrxw-563[xadcy] +jyddc-ikk-wlmttmrk-698[lmstk] +buzahisl-wshzapj-nyhzz-klzpnu-149[pjxor] +odkasqzuo-eomhqzsqd-tgzf-ymzmsqyqzf-560[frqmp] +gokzyxsjon-bkllsd-yzobkdsyxc-874[nbtmv] +excdklvo-pvygob-bocokbmr-952[tyzxa] +jvsvymbs-jovjvshal-aljouvsvnf-253[zgtdm] +hafgnoyr-qlr-erfrnepu-637[refna] +pelbtravp-sybjre-fnyrf-299[tjoim] +fodvvlilhg-gbh-vwrudjh-621[hvdgl] +kgjgrypw-epybc-bwc-bcnjmwkclr-678[smijy] +myxcewob-qbkno-mrymyvkdo-dbksxsxq-458[bkmox] +joufsobujpobm-fhh-dpoubjonfou-311[uvksy] +rflsjynh-ojqqdgjfs-ijajqturjsy-697[jqsfr] +vetllbybxw-vtgwr-kxtvjnblbmbhg-709[athym] +ajvyjprwp-ajmrxjlcren-kdwwh-lxwcjrwvnwc-433[qsaxt] +zbytomdsvo-mkxni-mykdsxq-myxdksxwoxd-952[xdmko] +esyfwlau-bwddqtwsf-suimakalagf-684[stvip] +jef-iushuj-fhezusjybu-fbqijys-whqii-huiuqhsx-582[uhijs] +tpspahyf-nyhkl-jovjvshal-bzly-alzapun-565[sdprn] +apwmeclga-hcjjwzcyl-umpiqfmn-132[shfrg] +kwtwznct-jcvvg-lmxizbumvb-148[vbcmt] +rmn-qcapcr-aylbw-umpiqfmn-366[juftv] +sorozgxe-mxgjk-hgyqkz-yzuxgmk-748[xuvst] +bkwzkqsxq-wsvsdkbi-qbkno-mkxni-mykdsxq-yzobkdsyxc-822[ksbqx] +ryexqpqhteki-vbemuh-skijecuh-iuhlysu-842[tszmj] +ikhcxvmbex-wrx-wxlbzg-501[zhqis] +lsyrkjkbnyec-mrymyvkdo-nozvyiwoxd-978[enkfi] +wdjcvuvmyjpn-mvhkvbdib-agjrzm-nojmvbz-395[tcxne] +uwtojhynqj-gfxpjy-fhvznxnynts-567[kqpvs] +iqmbazulqp-pkq-dqoquhuzs-534[ntpuq] +gntmfefwitzx-ojqqdgjfs-ijajqturjsy-385[jfqtg] +sebehvkb-fhezusjybu-zubboruqd-husuylydw-972[ytsim] +nzcczdtgp-nsznzwlep-hzcvdsza-405[yotgu] +joufsobujpobm-fhh-ufdiopmphz-675[tsymn] +cxy-bnlanc-snuuhknjw-anbnjalq-823[nabcj] +shoewudys-rkddo-huiuqhsx-374[dhsuo] +vagreangvbany-rtt-jbexfubc-403[ynepo] +aoubshwq-dzoghwq-ufogg-aobousasbh-714[oabgh] +njmjubsz-hsbef-dipdpmbuf-qvsdibtjoh-805[bdjsf] +zovldbkfz-gbiivybxk-lmboxqflkp-653[nyajo] +yknnkoera-xwogap-hkceopeyo-628[ybmzc] +nij-mywlyn-wbiwifuny-guleyncha-396[nyiwl] +ocipgvke-ecpfa-eqcvkpi-vgejpqnqia-258[jsiqz] +encuukhkgf-hnqygt-vgejpqnqia-882[dxzer] +odiih-ljwmh-anbnjalq-927[ahijl] +fkqbokxqflkxi-zxkav-ixyloxqlov-861[nxgja] +udskkaxawv-xmrrq-uzgugdslw-sfsdqkak-216[msfyx] +owshgfarwv-bwddqtwsf-kzahhafy-216[wafhd] +oaxadrgx-dmnnuf-ruzmzouzs-794[uqhse] +ziuxioqvo-akidmvomz-pcvb-zmikycqaqbqwv-616[iqvmo] +bqvvu-xqjju-opknwca-550[yzhum] +xgjougizobk-lruckx-gtgreyoy-670[nbfmk] +bxaxipgn-vgpst-uadltg-bpgztixcv-323[gptxa] +vcibutulxiom-jfumncw-alumm-nluchcha-448[ucmla] +irgyyolokj-xghhoz-uvkxgzouty-930[ogyhk] +kyelcrga-aylbw-amyrgle-umpiqfmn-782[almye] +jsvagsulanw-xdgowj-kzahhafy-138[dblcm] +ixccb-fkrfrodwh-uhdftxlvlwlrq-881[mblzw] +chnylhuncihuf-mwupyhayl-bohn-guleyncha-422[hnuyc] +irdgrxzex-treup-tfrkzex-uvgrikdvek-165[sjbnk] +xzwrmkbqtm-akidmvomz-pcvb-zmikycqaqbqwv-434[sanut] +ykhknbqh-zua-iwjwcaiajp-524[kjlio] +jlidywncfy-mwupyhayl-bohn-uwkocmcncih-916[cyhnw] +nuatmlmdpage-omzpk-eqdhuoqe-326[ljtsm] +xmrrq-kusnwfywj-zmfl-suimakalagf-684[afmkl] +foadouwbu-qvcqczohs-rsgwub-116[oubcq] +etyyx-bgnbnkzsd-kzanqzsnqx-391[pnmlv] +pinovwgz-wvnfzo-hvmfzodib-291[ovzfi] +qekrixmg-gsrwyqiv-kvehi-fewoix-ywiv-xiwxmrk-828[iwxek] +jqwpihizlwca-xtiabqk-oziaa-kcabwumz-amzdqkm-928[aizkm] +qekrixmg-jpsaiv-stivexmsrw-672[etmsq] +excdklvo-gokzyxsjon-mrymyvkdo-bomosfsxq-562[okmsx] +qczcftiz-pibbm-aobousasbh-532[zynvo] +wbhsfbohwcboz-suu-gsfjwqsg-506[bdhxv] +lxwbdvna-pajmn-ajkkrc-anlnrerwp-563[anrjk] +lsyrkjkbnyec-pvygob-cobfsmoc-900[uyrgf] +cqwdujys-sxesebqju-ixyffydw-374[nyjvi] +odiih-ouxfna-anlnrerwp-433[naior] +rzvkjiduzy-xviyt-xjvodib-vxlpdndodji-993[aousd] +ltpedcxots-qphzti-rjhidbtg-htgkxrt-453[rjlkn] +krxqjijamxdb-kdwwh-fxatbqxy-823[wctav] +froruixo-edvnhw-vwrudjh-829[rdhou] +jvyyvzpcl-jhukf-aljouvsvnf-201[uwkic] +nij-mywlyn-vumeyn-zchuhwcha-266[hnycm] +ydjuhdqjyedqb-zubboruqd-tufbeocudj-244[vmkln] +qlm-pbzobq-mixpqfz-doxpp-mrozexpfkd-575[zswni] +qvbmzvibqwvit-moo-tijwzibwzg-330[ibvwz] +pbeebfvir-fpniratre-uhag-freivprf-949[gvxlm] +wfummczcyx-jfumncw-alumm-uwkocmcncih-890[vturj] +dwbcjkun-npp-cajrwrwp-355[kstqo] +dpssptjwf-cbtlfu-vtfs-uftujoh-441[ftsuj] +vrurcjah-pajmn-npp-anbnjalq-303[tozvd] +wfruflnsl-ojqqdgjfs-xfqjx-775[fjqls] +pbafhzre-tenqr-qlr-qrirybczrag-897[yszub] +sehheiylu-rkddo-udwyduuhydw-322[qbyad] +upq-tfdsfu-cbtlfu-nbobhfnfou-103[vpxyh] +ajvyjprwp-npp-dbna-cnbcrwp-901[stevo] +bkzrrhehdc-bzmcx-bnzshmf-qdrdzqbg-833[msuya] +amlqskcp-epybc-aylbw-rcaflmjmew-730[arbyn] +wbhsfbohwcboz-dzoghwq-ufogg-gozsg-272[gobhw] +ksodcbwnsr-dfcxsqhwzs-gqojsbusf-vibh-obozmgwg-194[rwimn] +mfklstdw-usfvq-hmjuzskafy-424[ulgym] +wfruflnsl-ojqqdgjfs-qfgtwfytwd-177[xbofz] +sedikcuh-whqtu-isqludwuh-xkdj-jhqydydw-218[dhuqw] +ltpedcxots-raphhxuxts-qphzti-advxhixrh-765[jahpi] +zgmfyxypbmsq-djmucp-rcaflmjmew-548[aeoiv] +qspkfdujmf-ezf-nbobhfnfou-207[lnkrt] +fbebmtkr-zktwx-pxtihgbsxw-ietlmbv-zktll-kxlxtkva-943[hajmb] +apwmeclga-hcjjwzcyl-bctcjmnkclr-548[yxnzl] +rflsjynh-kqtbjw-btwpxmtu-177[tbjwf] +kfg-jvtivk-treup-uvgcfpdvek-373[vkefg] +upq-tfdsfu-kfmmzcfbo-nbobhfnfou-285[vsglz] +chnylhuncihuf-mwupyhayl-bohn-xypyfijgyhn-266[pwahm] +apwmeclga-zyqicr-dglylagle-886[lagce] +jlidywncfy-xsy-qilembij-188[uxjts] +jqwpihizlwca-lgm-lmaqov-954[laimq] +qcffcgwjs-foppwh-gozsg-246[fgcop] +bqxnfdmhb-rbzudmfdq-gtms-cdrhfm-287[dmbfh] +gifavtkzcv-wcfnvi-rthlzjzkzfe-763[tmniq] +uqtqbizg-ozilm-kivlg-kwibqvo-tijwzibwzg-720[qndzg] +sxdobxkdsyxkv-mkxni-bomosfsxq-848[zyubw] +qfmcusbwq-foppwh-kcfygvcd-662[cfpqw] +sehheiylu-fbqijys-whqii-skijecuh-iuhlysu-660[kdjyq] +sedikcuh-whqtu-uww-bqrehqjeho-660[dtawl] +veqtekmrk-wgezirkiv-lyrx-eguymwmxmsr-464[emrkg] +lqwhuqdwlrqdo-exqqb-uhdftxlvlwlrq-231[ydznk] +sno-rdbqds-bzmcx-otqbgzrhmf-183[gomah] +ujqgywfau-jsttal-hmjuzskafy-476[lghae] +yrwxefpi-jpsaiv-gsrxemrqirx-100[yazxo] +udglrdfwlyh-exqqb-sxufkdvlqj-569[dlqfu] +ugjjgkanw-uzgugdslw-esjcwlafy-736[rnxjs] +pdjqhwlf-sodvwlf-judvv-orjlvwlfv-673[vldfj] +xekdwvwnzkqo-fahhuxawj-ajcejaanejc-524[ajewc] +pwcvonofrcig-pibbm-fsqswjwbu-766[myazu] +tcrjjzwzvu-wcfnvi-glityrjzex-893[bkuyx] +lugjuacha-wbiwifuny-omyl-nymncha-448[mosph] +ckgvutofkj-inuiurgzk-jkvgxzsktz-228[kguzi] +ydjuhdqjyedqb-sqdto-ijehqwu-868[ozqsj] +sxdobxkdsyxkv-zvkcdsm-qbkcc-myxdksxwoxd-640[xdksc] +odkasqzuo-dmnnuf-dqmocgueufuaz-482[wfbke] +wpuvcdng-tcddkv-wugt-vguvkpi-414[hayjs] +lqwhuqdwlrqdo-edvnhw-uhfhlylqj-439[bjzye] +wpuvcdng-dwppa-ceswkukvkqp-674[mxnkj] +qzlozfhmf-bkzrrhehdc-okzrshb-fqzrr-zbpthrhshnm-365[hrzbf] +raphhxuxts-rpcsn-rdpixcv-rjhidbtg-htgkxrt-635[yozvr] +tfejldvi-xiruv-gcrjkzt-xirjj-tljkfdvi-jvimztv-321[veyxs] +ryexqpqhteki-sxesebqju-iqbui-868[qebar] +eqpuwogt-itcfg-hnqygt-tgegkxkpi-648[ywzjl] +uzfqdzmfuazmx-pkq-bgdotmeuzs-482[zmudf] +sbnqbhjoh-cbtlfu-bdrvjtjujpo-441[taquv] +gokzyxsjon-bkwzkqsxq-lexxi-bomosfsxq-354[xoskq] +oazegyqd-sdmpq-iqmbazulqp-dmnnuf-geqd-fqefuzs-456[qdefm] +dwbcjkun-ljwmh-lxjcrwp-anbnjalq-875[hoynm] +udskkaxawv-eadalsjq-yjsvw-xdgowj-klgjsyw-216[cnwyi] +surmhfwloh-exqqb-sxufkdvlqj-439[tspmq] +ksodcbwnsr-foppwh-zcuwghwqg-402[vopuk] +zsxyfgqj-hmthtqfyj-fhvznxnynts-697[fhnty] +yflexwxoalrp-yxphbq-bkdfkbbofkd-653[jzvpm] +ltpedcxots-tvv-rdcipxcbtci-557[ctdip] +slqryzjc-djmucp-qyjcq-756[cjqyd] +rgndvtcxr-qphzti-bpcpvtbtci-817[tcpbi] +ftzgxmbv-fbebmtkr-zktwx-vtgwr-vhtmbgz-lmhktzx-371[wzxvl] +htqtwkzq-hfsid-yjhmstqtld-463[rxszy] +rwcnawjcrxwju-yujbcrl-pajbb-mnenuxyvnwc-979[gkutb] +gokzyxsjon-tovvilokx-kmaescsdsyx-562[dwlah] +iutyaskx-mxgjk-lruckx-iayzuskx-ykxboik-826[kxiuy] +vhglnfxk-zktwx-yehpxk-hixktmbhgl-891[diznt] +sedikcuh-whqtu-kdijqrbu-sqdto-seqjydw-iuhlysui-790[lksjh] +jyfvnlupj-zjhclunly-obua-vwlyhapvuz-617[pirsw] +iuruxlar-sgmtkzoi-hgyqkz-zkinturume-670[qatsn] +wkqxodsm-mrymyvkdo-mecdywob-cobfsmo-250[hgarm] +odiih-kjbtnc-nwprwnnarwp-381[qpodn] +kfg-jvtivk-tyftfcrkv-kirzezex-373[srcvd] +gcfcnuls-aluxy-zotts-wuhxs-omyl-nymncha-552[clnsu] +xmtjbzidx-zbb-xpnojhzm-nzmqdxz-421[mnkio] +qjopwxha-acc-iwngapejc-160[jimst] +emixwvqhml-kivlg-kwibqvo-aitma-564[qspyb] +nvrgfezqvu-avccpsvre-cfxzjkztj-529[lmnsh] +emixwvqhml-ktiaaqnqml-xtiabqk-oziaa-ikycqaqbqwv-746[ozadu] +zhdsrqlchg-hjj-orjlvwlfv-751[hjlrv] +cybyjqho-whqtu-uww-qsgkyiyjyed-478[szxuo] +clxalrtyr-nsznzwlep-wzrtdetnd-405[lnrtz] +sgmtkzoi-yigbktmkx-natz-rghuxgzuxe-722[gktxz] +hjgbwuladw-tskcwl-sfsdqkak-502[txdsw] +yrwxefpi-hci-vigimzmrk-646[hdmzy] +hqcfqwydw-hqrryj-jusxdebewo-946[qwdeh] +wsvsdkbi-qbkno-cmkfoxqob-rexd-yzobkdsyxc-276[wptxs] +qfmcusbwq-qvcqczohs-zcuwghwqg-870[mnybx] +clxalrtyr-nsznzwlep-cpdplcns-743[rtycz] +fbebmtkr-zktwx-ktuubm-ybgtgvbgz-553[osmdy] +jvuzbtly-nyhkl-yhtwhnpun-jovjvshal-ylzlhyjo-773[hlyjn] +slqryzjc-aylbw-pcacgtgle-782[nxkri] +tfcfiwlc-wcfnvi-wzeretzex-971[smobe] +jef-iushuj-uww-qsgkyiyjyed-556[xzrwq] +crwwv-yxphbq-xkxivpfp-653[pxvwb] +hqcfqwydw-zubboruqd-husuylydw-244[lqeho] +oxmeeuruqp-qss-eqdhuoqe-534[equos] +qxdwpopgsdjh-rgndvtcxr-gpqqxi-gthtpgrw-687[gpdqr] +mybbycsfo-mrymyvkdo-bocokbmr-692[pymza] +myvybpev-oqq-yzobkdsyxc-250[sxytw] +fnjyxwrinm-kdwwh-uxprbcrlb-329[natqu] +aietsrmdih-nippcfier-gsrxemrqirx-958[iremp] +xmrrq-tmffq-vwhdgqewfl-138[fqmrw] +oqnidbshkd-bzmcx-sdbgmnknfx-599[nzdyx] +eqttqukxg-ecpfa-eqcvkpi-ewuvqogt-ugtxkeg-128[mytkp] +nchhg-ntwemz-amzdqkma-252[kmbop] +bjfutsneji-jll-zxjw-yjxynsl-775[ndbsw] +ktwbhtvmbox-lvtoxgzxk-angm-mxvaghehzr-319[ijqxb] +kyelcrga-afmamjyrc-pcqcypaf-210[acyfm] +myxcewob-qbkno-mkxni-oxqsxoobsxq-484[oxbqk] +esyfwlau-vqw-kzahhafy-788[jikae] +oqnidbshkd-eknvdq-btrsnldq-rdquhbd-391[njzml] +qjopwxha-bhksan-opknwca-888[ahkno] +udskkaxawv-jsttal-vwhdgqewfl-190[hqmnt] +excdklvo-lexxi-crszzsxq-458[uavnl] +frqvxphu-judgh-fdqgb-frdwlqj-wudlqlqj-179[bimaq] +iuruxlar-kmm-ykxboiky-852[tijpz] +tyepcyletzylw-mldvpe-lylwjdtd-509[lydet] +frqvxphu-judgh-gbh-whfkqrorjb-101[mhbes] +xqvwdeoh-edvnhw-zrunvkrs-699[zmudw] +irdgrxzex-treup-fgvirkzfej-893[fbsyn] +cxy-bnlanc-ljwmh-orwjwlrwp-771[ngpmz] +eqpuwogt-itcfg-gii-ucngu-388[hzgae] +ikhcxvmbex-cxeeruxtg-wxlbzg-553[mvnfs] +mrxivrexmsrep-fyrrc-asvowlst-854[codsq] +npmhcargjc-aylbw-qcptgacq-366[ditsg] +ftzgxmbv-ietlmbv-zktll-phkdlahi-241[ltbhi] +hqcfqwydw-tou-bewyijysi-270[hnvux] +emixwvqhml-kivlg-abwziom-590[imlvw] +pejji-nio-mecdywob-cobfsmo-926[wrjmp] +bknsykmdsfo-oqq-dbksxsxq-640[naysz] +gifavtkzcv-vxx-tfekrzedvek-789[cnwtp] +kmjezxodgz-diozmivodjivg-agjrzm-xjiovdihzio-915[yqktj] +shoewudys-vbemuh-qsgkyiyjyed-946[nqsjd] +htqtwkzq-ojqqdgjfs-rfwpjynsl-749[hryqo] +rmn-qcapcr-zyqicr-pcacgtgle-340[znstw] +bnqqnrhud-bzmcx-bnmszhmldms-729[yfetv] +surmhfwloh-gbh-rshudwlrqv-725[dsaym] +jchipqat-tvv-itrwcdadvn-505[povhu] +zgmfyxypbmsq-njyqrga-epyqq-rcaflmjmew-340[mqyae] +froruixo-exqqb-pdunhwlqj-283[nmuqd] +lnkfaypeha-xwogap-odellejc-784[ytrsz] +jlidywncfy-xsy-fuvilunils-864[ilyfn] +joufsobujpobm-dipdpmbuf-sftfbsdi-545[rwjnm] +tvsnigxmpi-gerhc-gsexmrk-eguymwmxmsr-932[pivem] +tfejldvi-xiruv-srjbvk-ivjvrity-815[vijrt] +zuv-ykixkz-yigbktmkx-natz-zkinturume-410[kzitu] +enzcntvat-pubpbyngr-qrcyblzrag-117[oywbs] +wsvsdkbi-qbkno-lkcuod-nofovyzwoxd-744[xnuqc] +wbhsfbohwcboz-foppwh-aobousasbh-246[nfsml] +uiovmbqk-jcvvg-abwziom-720[nbqaz] +etaqigpke-fag-fgrnqaogpv-674[gaefp] +ejpanjwpekjwh-nwxxep-hkceopeyo-238[bmscu] +qjopwxha-bhksan-wjwhuoeo-940[xenwh] +etyyx-bzmcx-bnzshmf-qdzbpthrhshnm-729[hbmzn] +uqtqbizg-ozilm-lgm-abwziom-356[tspmz] +excdklvo-mybbycsfo-tovvilokx-psxkxmsxq-874[axwon] +mvydjvxodqz-xviyt-xjvodib-pnzm-oznodib-187[nflym] +ixccb-zhdsrqlchg-edvnhw-xvhu-whvwlqj-465[hcvwd] +qspkfdujmf-votubcmf-tdbwfohfs-ivou-bdrvjtjujpo-181[esuzg] +fkqbokxqflkxi-qlm-pbzobq-bdd-jxohbqfkd-601[dcgym] +mtzslklcozfd-prr-nfdezxpc-dpcgtnp-301[tmnrk] +xekdwvwnzkqo-lhwopey-cnwoo-wymqeoepekj-290[rzsnk] +fubrjhqlf-sodvwlf-judvv-pdqdjhphqw-725[dfhjq] +shoewudys-zubboruqd-skijecuh-iuhlysu-608[ushbd] +zlkprjbo-doxab-zxkav-rpbo-qbpqfkd-679[bkopa] +nzcczdtgp-mldvpe-opawzjxpye-587[tkbms] +apuut-nxvqzibzm-cpio-yzkvmohzio-655[rsozd] +rgllk-ngzzk-ymdwqfuzs-300[yhzxu] +cvabijtm-jcvvg-uiviomumvb-538[ixajz] +oazegyqd-sdmpq-otaoaxmfq-pqbmdfyqzf-248[qadfm] +rtqlgevkng-fag-nqikuvkeu-960[nqdom] +bnknqetk-cxd-cdrhfm-183[mfpwa] +ohmnuvfy-wuhxs-wiuncha-lyuwkocmcncih-552[chunw] +hqtyeqsjylu-jef-iushuj-tou-fkhsxqiydw-296[isfmy] +kwtwznct-kwvacumz-ozilm-jiasmb-uiviomumvb-746[qmjyz] +qfmcusbwq-foppwh-twbobqwbu-298[bwqfo] +ykhknbqh-xqjju-owhao-472[hjtck] +dszphfojd-tdbwfohfs-ivou-mbcpsbupsz-103[sbdfo] +lahxpnwrl-ljwmh-nwprwnnarwp-641[srtpm] +ckgvutofkj-lruckx-jkvruesktz-878[zjlyk] +dyz-combod-zvkcdsm-qbkcc-nocsqx-926[yvute] +ktwbhtvmbox-wrx-nlxk-mxlmbgz-345[lsuwt] +nwilwcejc-nwxxep-zalhkuiajp-186[bznxr] +uzfqdzmfuazmx-otaoaxmfq-bgdotmeuzs-846[mzafo] +oxmeeuruqp-omzpk-oamfuzs-oazfmuzyqzf-352[ypdzg] +zhdsrqlchg-fdqgb-ghsduwphqw-361[hdgqs] +nchhg-jiasmb-amzdqkma-278[qklti] +tfiifjzmv-upv-wzeretzex-295[itvos] +eqttqukxg-ecpfa-ujkrrkpi-830[kepqr] +clotzlnetgp-mldvpe-nzyeltyxpye-145[xfpsy] +mbiyqoxsm-myvybpev-mkxni-mykdsxq-yzobkdsyxc-900[ymxbk] +plolwdub-judgh-vfdyhqjhu-kxqw-vhuylfhv-621[zqwmy] +atyzghrk-vxupkizork-jek-giwaoyozout-228[abrmv] +zotts-xsy-mufym-162[mstyf] +vhehkyne-ktuubm-mktbgbgz-293[qmytr] +kwvacumz-ozilm-zijjqb-ivitgaqa-616[fkoxt] +yaxsnlcrun-ajvyjprwp-snuuhknjw-anlnrerwp-771[zpyld] +raphhxuxts-bpvctixr-eaphixr-vgphh-bpcpvtbtci-115[phtxb] +nuatmlmdpage-odkasqzuo-qss-dqmocgueufuaz-768[umnqw] +yknnkoera-lhwopey-cnwoo-nawymqeoepekj-680[eonkw] +pybgmyargtc-aylbw-qyjcq-886[buzfp] +gzefmnxq-ngzzk-iadwetab-638[zaegn] +sbnqbhjoh-kfmmzcfbo-usbjojoh-129[acdkb] +lxaaxbren-lujbbrornm-ljwmh-lxjcrwp-mnyjacvnwc-355[yzsuk] +nchhg-lgm-nqvivkqvo-200[dystz] +plolwdub-judgh-udeelw-rshudwlrqv-335[sihdt] +wlsiayhcw-vumeyn-lymyulwb-292[zbrux] +ytu-xjhwjy-hfsid-htfynsl-qtlnxynhx-411[adxmu] +wkqxodsm-tovvilokx-ckvoc-822[uhgov] +chnylhuncihuf-vumeyn-nluchcha-500[rcbmn] +tfiifjzmv-lejkrscv-tyftfcrkv-jyzggzex-243[fjtvz] +eqpuwogt-itcfg-tcddkv-tgugctej-310[pyemh] +iuruxlar-xgsvgmotm-pkrrehkgt-xkykgxin-956[btwqp] +shoewudys-sxesebqju-qdqboiyi-894[seqbd] +zlkprjbo-doxab-gbiivybxk-pxibp-861[azyjx] +ckgvutofkj-inuiurgzk-lotgtiotm-982[qszly] +thnulapj-jshzzpmplk-jhukf-vwlyhapvuz-747[hpjlu] +pybgmyargtc-hcjjwzcyl-qcptgacq-782[bxsuc] +xgsvgmotm-vrgyzoi-mxgyy-iutzgotsktz-150[gtmoy] +laffe-yigbktmkx-natz-jkyomt-696[ktafm] +zvyvgnel-tenqr-pubpbyngr-znexrgvat-507[wfjhu] +pelbtravp-pnaql-znantrzrag-403[cbyja] +jqwpihizlwca-akidmvomz-pcvb-apqxxqvo-850[oxymv] +cvabijtm-ntwemz-twoqabqka-954[atbmq] +zixppfcfba-avb-zlkqxfkjbkq-809[zlmjc] +sebehvkb-zubboruqd-tufqhjcudj-556[budeh] +lqwhuqdwlrqdo-fdqgb-ghvljq-621[qdlgh] +qlm-pbzobq-crwwv-zxkav-zlxqfkd-rpbo-qbpqfkd-731[ciyxw] +pwcvonofrcig-gqojsbusf-vibh-qighcasf-gsfjwqs-740[csebm] +mvydjvxodqz-kmjezxodgz-kgvnodx-bmvnn-yzqzgjkhzio-239[zdovg] +kzgwomvqk-xtiabqk-oziaa-tijwzibwzg-564[menyj] +ksodcbwnsr-xszzmpsob-kcfygvcd-454[mbaod] +ejpanjwpekjwh-xwogap-hwxknwpknu-472[wpjkn] +mvydjvxodqz-hvbizodx-wpiit-hvivbzhzio-967[ivzdh] +mvydjvxodqz-mvwwdo-nzmqdxzn-681[jryzk] +enqvbnpgvir-rtt-freivprf-871[lgqrc] +hvbizodx-wpiit-kpmxcvndib-291[dyjmn] +molgbzqfib-mixpqfz-doxpp-xkxivpfp-965[pxfib] +fbebmtkr-zktwx-cxeeruxtg-nlxk-mxlmbgz-137[dckut] +luxciuwncpy-luvvcn-mbcjjcha-500[qsvzt] +apwmeclga-hcjjwzcyl-qyjcq-704[cjalq] +wpuvcdng-eqttqukxg-uecxgpigt-jwpv-cpcnauku-830[ucgpt] +iehepwnu-cnwza-fahhuxawj-pnwejejc-940[ewahj] +pbybeshy-pbeebfvir-pnaql-pbngvat-freivprf-715[uyzwp] +htsxzrjw-lwfij-ojqqdgjfs-zxjw-yjxynsl-957[iyonc] +sxdobxkdsyxkv-wsvsdkbi-qbkno-zvkcdsm-qbkcc-bomosfsxq-536[mbyan] +fruurvlyh-fkrfrodwh-uhdftxlvlwlrq-335[rflhu] +froruixo-hjj-orjlvwlfv-387[uyawn] +myvybpev-lexxi-vklybkdybi-978[ybvei] +chnylhuncihuf-vohhs-xymcah-240[yxnmh] +tagzsrsjvgmk-vqw-vwhsjlewfl-606[svwgj] +zbytomdsvo-lexxi-domrxyvyqi-250[oxydi] +qfkkj-clmmte-opgpwzaxpye-821[pekma] +lgh-kwujwl-udskkaxawv-jsttal-hmjuzskafy-320[axyrm] +irdgrxzex-nvrgfezqvu-avccpsvre-cfxzjkztj-191[sclzh] +mhi-lxvkxm-xzz-etuhktmhkr-319[rcomn] +lhkhszqx-fqzcd-dff-sdbgmnknfx-391[ugevx] +apwmeclga-aylbw-ylyjwqgq-314[izfye] +yflexwxoalrp-zlkprjbo-doxab-ciltbo-qbzeklildv-341[byclp] +cvabijtm-kwzzwaqdm-ntwemz-abwziom-252[rdmvn] +qfkkj-upwwjmply-epnsyzwzrj-899[okhgz] +jxdkbqfz-avb-zlkqxfkjbkq-861[wptxb] +gpsxdprixkt-qphzti-hwxeexcv-947[krgwe] +nij-mywlyn-wuhxs-wiuncha-lymyulwb-968[wylnu] +sbnqbhjoh-kfmmzcfbo-ufdiopmphz-987[bfhmo] +guahyncw-jfumncw-alumm-xyjfisgyhn-500[htamn] +ytu-xjhwjy-jll-ijxnls-879[duthg] +lgh-kwujwl-usfvq-ugslafy-esfsywewfl-944[ilszy] +tvsnigxmpi-tpewxmg-kveww-xiglrspskc-152[gipsw] +joufsobujpobm-cbtlfu-dvtupnfs-tfswjdf-129[fubjo] +rwcnawjcrxwju-bljenwpna-qdwc-mnyuxhvnwc-225[wncja] +qzchnzbshud-okzrshb-fqzrr-rzkdr-989[rzhbd] +qzoggwtwsr-pogysh-rsjszcdasbh-896[sghor] +gzefmnxq-dmnnuf-xmnadmfadk-326[tvuiw] +qzoggwtwsr-pibbm-zopcfohcfm-792[jsmfu] +mvydjvxodqz-xviyt-xjvodib-hvivbzhzio-369[iceny] +wkqxodsm-lkcuod-cdybkqo-224[dkocq] +veqtekmrk-ikk-wxsveki-542[keivm] +zlkprjbo-doxab-yxphbq-pqloxdb-419[ckdtm] +buzahisl-ibuuf-klzpnu-721[stjnm] +hwdtljsnh-kqtbjw-ijajqturjsy-515[plnqy] +luxciuwncpy-jfumncw-alumm-lyuwkocmcncih-474[lqpco] +tinnm-ibghopzs-rms-aobousasbh-506[sboah] +pbeebfvir-rtt-ratvarrevat-403[tdokj] +dmybmsuzs-pkq-efadmsq-300[msdqa] +ujqgywfau-tmffq-dgyaklauk-970[yxmid] +ovbunmneqbhf-enoovg-hfre-grfgvat-481[efgno] +hqfxxnknji-kzeed-uqfxynh-lwfxx-wjhjnansl-957[nxfhj] +plolwdub-judgh-edvnhw-pdqdjhphqw-985[dsxhg] +nwlddtqtpo-awldetn-rcldd-nfdezxpc-dpcgtnp-353[dnptc] +bwx-amkzmb-xzwrmkbqtm-ntwemz-amzdqkma-668[swmnl] +bqxnfdmhb-qzaahs-rdquhbdr-443[bdhqa] +egdytrixat-ide-htrgti-uadltg-steadnbtci-297[zampy] +gsrwyqiv-kvehi-gerhc-gsexmrk-erepcwmw-880[bkwts] +nsyjwsfyntsfq-gfxpjy-jslnsjjwnsl-749[lvzus] +dfcxsqhwzs-pibbm-gvwddwbu-246[dqbem] +mtzslklcozfd-ojp-fdpc-epdetyr-613[dpcef] +gbc-frperg-ohaal-erfrnepu-351[reafg] +gvaaz-cbtlfu-efqbsunfou-311[dvnmz] +ugdgjxmd-tskcwl-umklgewj-kwjnauw-892[wgjku] +iruzfrtkzmv-avccpsvre-nfibjyfg-243[jzoyc] +shoewudys-hqrryj-bqrehqjeho-296[heqrj] +hwdtljsnh-kqtbjw-htsyfnsrjsy-827[dntpc] +zilqwikbqdm-kivlg-uiviomumvb-902[imvbk] +rsvxltspi-sfnigx-wxsveki-984[sixve] +surmhfwloh-gbh-xvhu-whvwlqj-387[hwluv] +ubhatstkwhnl-yehpxk-wxlbzg-137[raqjb] +oknkvcta-itcfg-uecxgpigt-jwpv-ocpcigogpv-596[cgpio] +amjmpdsj-djmucp-nspafyqgle-470[ztpqn] +zixppfcfba-avb-abpfdk-471[abfpc] +owshgfarwv-jsttal-vwkayf-944[smcyx] +vjpwncrl-ljwmh-lxjcrwp-lxwcjrwvnwc-589[irbxq] +qvbmzvibqwvit-ziuxioqvo-lgm-amzdqkma-928[hgfln] +lxuxaodu-kjbtnc-jwjuhbrb-147[bjuxa] +etaqigpke-fag-yqtmujqr-440[qaegt] +zekvierkzferc-irdgrxzex-jtrmvexvi-ylek-rthlzjzkzfe-633[gkyzp] +mfklstdw-hdsklau-yjskk-kwjnauwk-762[vnfzg] +pkl-oaynap-fahhuxawj-oanreyao-706[mdfpn] +hwdtljsnh-hmthtqfyj-rfsfljrjsy-359[sxziu] +fab-eqodqf-ngzzk-bgdotmeuzs-144[kxags] +tagzsrsjvgmk-tskcwl-vwhsjlewfl-424[ejuah] +kzgwomvqk-jiasmb-uizsmbqvo-590[mbiko] +qjopwxha-xqjju-oanreyao-758[ubmon] +hvbizodx-xmtjbzidx-nxvqzibzm-cpio-yzkgjthzio-889[rmyqo] +iuruxlar-kmm-jkvruesktz-644[kruma] +ujqgywfau-jsttal-vwhdgqewfl-710[hbdlx] +jlidywncfy-wuhxs-wiuncha-yhachyylcha-630[hycaw] +lugjuacha-wlsiayhcw-dyffsvyuh-uhufsmcm-890[juefh] +hjgbwuladw-xdgowj-hmjuzskafy-398[wqigl] +yuxufmdk-sdmpq-pkq-etubbuzs-456[wldkg] +vcibutulxiom-dyffsvyuh-qilembij-110[jdnmz] +nzwzcqfw-clmmte-dpcgtnpd-509[cdmnp] +aczupnetwp-nlyoj-nzletyr-zapcletzyd-665[zelnp] +htsxzrjw-lwfij-wfintfhynaj-kqtbjw-knsfshnsl-983[kytzm] +enqvbnpgvir-onfxrg-qrirybczrag-611[rgnbi] +molgbzqfib-ciltbo-xkxivpfp-159[biflo] +plolwdub-judgh-fkrfrodwh-ghyhorsphqw-517[hdorw] +gzefmnxq-omzpk-oazfmuzyqzf-872[zkycu] +qjopwxha-lhwopey-cnwoo-naoawnyd-186[cvyno] +jyfvnlupj-ipvohghykvbz-jovjvshal-ylzlhyjo-435[xlenk] +ajmrxjlcren-kjbtnc-jwjuhbrb-329[klcuz] +wdjcvuvmyjpn-ezggtwzvi-jkzmvodjin-603[gmveh] +muqfedyput-fbqijys-whqii-bqrehqjeho-192[vdlge] +ktfitzbgz-xzz-ftgtzxfxgm-605[izfql] +bknsykmdsfo-oqq-wkbuodsxq-458[stifb] +slqryzjc-hcjjwzcyl-yaosgqgrgml-314[qymir] +gpewwmjmih-veffmx-xvemrmrk-126[itcvu] +rdadguja-gpqqxi-ldgzhwde-297[hnvso] +lxaaxbren-mhn-cnlqwxuxph-251[xvjuz] +xst-wigvix-fewoix-gsrxemrqirx-698[xireg] +iehepwnu-cnwza-zua-wymqeoepekj-108[sdnmj] +oknkvcta-itcfg-rncuvke-itcuu-hkpcpekpi-908[pgfbe] +enqvbnpgvir-ohaal-hfre-grfgvat-351[hsgdf] +ixccb-iorzhu-hqjlqhhulqj-647[hqcij] +apuut-agjrzm-jkzmvodjin-915[jamuz] +hqcfqwydw-rqiauj-ijehqwu-530[qwhij] +vhehkyne-ktwbhtvmbox-lvtoxgzxk-angm-kxvxbobgz-683[tsurp] +gntmfefwitzx-idj-knsfshnsl-723[fnsit] +ajvyjprwp-bljenwpna-qdwc-ujkxajcxah-563[yskxv] +joufsobujpobm-dboez-dpbujoh-mbcpsbupsz-259[bopuj] +xlrypetn-prr-nzyeltyxpye-847[yeprl] +zuv-ykixkz-xgsvgmotm-lruckx-jkvgxzsktz-696[ijlfz] +jqwpihizlwca-moo-lmxtwgumvb-798[nkzsr] +jsvagsulanw-kusnwfywj-zmfl-klgjsyw-736[ectrq] +ykhknbqh-nwxxep-nawymqeoepekj-758[cfvdy] +kzeed-gfxpjy-tujwfyntsx-385[aunmy] +slqryzjc-qaytclecp-fslr-dglylagle-184[lcyae] +laffe-vrgyzoi-mxgyy-iutzgotsktz-410[gtyzf] +gpbepvxcv-hrpktcvtg-wjci-stktadebtci-141[zoqhx] +yaxsnlcrun-lqxlxujcn-mnyuxhvnwc-641[nxclu] +tagzsrsjvgmk-kusnwfywj-zmfl-dstgjslgjq-294[gayon] +kwzzwaqdm-zijjqb-xczkpiaqvo-902[mkgjt] +mfklstdw-usfvq-ugslafy-xafsfuafy-684[fsaul] +zvyvgnel-tenqr-ovbunmneqbhf-sybjre-fgbentr-117[shfce] +emixwvqhml-akidmvomz-pcvb-amzdqkma-720[relbk] +rdggdhxkt-eaphixr-vgphh-hwxeexcv-973[xozyv] +bqvvu-zua-iwngapejc-992[nmdax] +bjfutsneji-kqtbjw-wjxjfwhm-203[irjmx] +bdavqofuxq-nmewqf-abqdmfuaze-976[vgzhc] +vdzonmhydc-okzrshb-fqzrr-rzkdr-313[rzdhk] +sawlkjevaz-oywrajcan-dqjp-wjwhuoeo-836[ajwoe] +fruurvlyh-gbh-sxufkdvlqj-413[kftmo] +fruurvlyh-sodvwlf-judvv-ghsorbphqw-569[tadzk] +sbejpbdujwf-tdbwfohfs-ivou-dpoubjonfou-103[rbqio] +oxmeeuruqp-otaoaxmfq-xasuefuoe-222[ozipy] +rdggdhxkt-qphzti-ejgrwphxcv-921[tusrb] +dkqjcbctfqwu-fag-yqtmujqr-882[kzvuf] +gzefmnxq-dmnnuf-mzmxkeue-248[menfu] +kgjgrypw-epybc-aylbw-kylyeckclr-314[mlvhs] +bwx-amkzmb-akidmvomz-pcvb-abwziom-148[nmtyw] +ckgvutofkj-sorozgxe-mxgjk-xghhoz-xkykgxin-670[gkxoh] +zhdsrqlchg-fkrfrodwh-ghsorbphqw-803[cjybd] +hvbizodx-wvnfzo-adivixdib-603[xwstz] +tvsnigxmpi-gerhc-hitpscqirx-204[icghp] +jrncbavmrq-cynfgvp-tenff-npdhvfvgvba-741[ybszn] +mbiyqoxsm-pvygob-psxkxmsxq-952[mjfnc] +gsrwyqiv-kvehi-veffmx-gywxsqiv-wivzmgi-282[bdrgj] +clxalrtyr-xtwtelcj-rclop-awldetn-rcldd-cpdplcns-847[lcdrt] +ahngzyzqcntr-bzmcx-sdbgmnknfx-287[fmyqt] +zgmfyxypbmsq-aylbw-amyrgle-bctcjmnkclr-340[mybcl] +fydelmwp-prr-nzyeltyxpye-717[gfjxa] +rnqnyfwd-lwfij-rflsjynh-wfggny-xfqjx-931[fnjwy] +zilqwikbqdm-xtiabqk-oziaa-twoqabqka-278[ftonr] +bjfutsneji-gzssd-uzwhmfxnsl-827[sfjnu] +ojk-nzxmzo-pinovwgz-agjrzm-jkzmvodjin-733[zjomn] +ygcrqpkbgf-dcumgv-fgukip-570[vmhxn] +dzczkrip-xiruv-srjbvk-jyzggzex-945[uzneh] +bkzrrhehdc-bzmcx-lzmzfdldms-287[eclvd] +ziuxioqvo-kpwkwtibm-lmxizbumvb-564[txsru] +kzgwomvqk-lgm-lmxizbumvb-122[mbgkl] +htsxzrjw-lwfij-idj-xjwanhjx-463[obdze] +gntmfefwitzx-kqtbjw-wjxjfwhm-749[qzutv] +htsxzrjw-lwfij-jll-tujwfyntsx-671[xugan] +ymszqfuo-rxaiqd-etubbuzs-118[ubqsz] +vdzonmhydc-azrjds-lzqjdshmf-989[dzhjm] +dyz-combod-bkllsd-oxqsxoobsxq-354[nrmkx] +pyknyegle-afmamjyrc-yaosgqgrgml-626[zdlfg] +oxmeeuruqp-vqxxknqmz-oazfmuzyqzf-352[rnsyt] +qjopwxha-xqjju-pnwejejc-654[jepqw] +wifilzof-jfumncw-alumm-xypyfijgyhn-604[fjerw] +vagreangvbany-enoovg-fuvccvat-533[gncot] +avw-zljyla-zjhclunly-obua-thuhnltlua-669[wathd] +ynssr-lvtoxgzxk-angm-mxvaghehzr-345[vopnm] +cvabijtm-uqtqbizg-ozilm-xtiabqk-oziaa-lmdmtwxumvb-928[imabt] +frqvxphu-judgh-sodvwlf-judvv-pdqdjhphqw-751[azovy] +qmpmxevc-kvehi-jyddc-fyrrc-qerekiqirx-282[ygmhv] +fodvvlilhg-udeelw-pdunhwlqj-153[sndmo] +gpsxdprixkt-ytaanqtpc-gthtpgrw-765[tpgar] +cvabijtm-kpwkwtibm-bmkpvwtwog-174[wbkmt] +vetllbybxw-yehpxk-wxlbzg-891[yekxl] +nzwzcqfw-nlyoj-dezclrp-275[zclnw] +qmpmxevc-kvehi-glsgspexi-gsrxemrqirx-828[exgim] +xtwtelcj-rclop-dnlgpyrpc-sfye-hzcvdsza-873[xmpon] +jrncbavmrq-pnaql-jbexfubc-793[bacjn] +ohmnuvfy-yaa-lymyulwb-266[yalmu] +nzwzcqfw-aczupnetwp-awldetn-rcldd-pyrtyppctyr-613[pctwd] +vqr-ugetgv-uecxgpigt-jwpv-rwtejcukpi-752[geptu] +tfcfiwlc-lejkrscv-upv-rthlzjzkzfe-607[tcfns] +hwdtljsnh-uqfxynh-lwfxx-knsfshnsl-229[xtngb] +iuruxlar-igtje-iayzuskx-ykxboik-930[kmghr] +xjgjmapg-ezggtwzvi-hvivbzhzio-421[gzivh] +gpbepvxcv-hrpktcvtg-wjci-hwxeexcv-349[xswrp] +tcorcikpi-eqttqukxg-gii-hkpcpekpi-622[ruxyk] +ygcrqpkbgf-ejqeqncvg-ucngu-440[gcqen] +etyyx-dff-qdbdhuhmf-729[wskto] +tfiifjzmv-upv-vexzevvizex-399[veizf] +houngfgxjuay-sorozgxe-mxgjk-jek-aykx-zkyzotm-566[aimhd] +hcd-gsqfsh-dzoghwq-ufogg-aobousasbh-714[ynfie] +foadouwbu-qobrm-qcohwbu-zopcfohcfm-792[obcfu] +ynukcajey-oywrajcan-dqjp-wjwhuoeo-680[jaowy] +rflsjynh-jll-rfsfljrjsy-489[jlfrs] +vkrhzxgbv-pxtihgbsxw-yehpxk-mktbgbgz-917[igtvy] +hjgbwuladw-tskcwl-dgyaklauk-294[aklwd] +cvabijtm-jcvvg-zmikycqaqbqwv-772[vcqab] +odiih-yujbcrl-pajbb-vjwjpnvnwc-849[jbcin] +tinnm-tzcksf-igsf-hsghwbu-220[bnamt] +pbeebfvir-wryylorna-jbexfubc-637[egouk] +xmtjbzidx-xviyt-yzqzgjkhzio-265[vxsry] +avw-zljyla-zjhclunly-obua-klwhyatlua-201[sjayl] +dfcxsqhwzs-qvcqczohs-fsgsofqv-246[dosrp] +rzvkjiduzy-xviyt-xjvodib-kpmxcvndib-291[cwzla] +gcfcnuls-aluxy-mwupyhayl-bohn-wihnuchgyhn-968[hnuyc] +dyz-combod-lsyrkjkbnyec-bkllsd-domrxyvyqi-328[vtxzd] +fruurvlyh-mhoobehdq-dftxlvlwlrq-907[jlves] +mrxivrexmsrep-gerhc-gsexmrk-tyvglewmrk-152[wzuly] +votubcmf-gmpxfs-pqfsbujpot-883[fpbmo] +bljenwpna-qdwc-anbnjalq-329[lcwmy] +xekdwvwnzkqo-ydkykhwpa-wjwhuoeo-550[toavy] +yhkpvhjapcl-yhiipa-jbzavtly-zlycpjl-201[lpyah] +xjinphzm-bmvyz-wvnfzo-nzmqdxzn-681[ykfxe] +pbeebfvir-rtt-ybtvfgvpf-507[bftve] +gvcskirmg-ikk-hizipstqirx-750[iyquj] +yhwooebeaz-lhwopey-cnwoo-oanreyao-108[tmuag] +wlqqp-jtrmvexvi-ylek-nfibjyfg-581[tnrhf] +tfiifjzmv-avccpsvre-jyzggzex-477[mvnjr] +xjmmjndqz-zbb-yzndbi-811[bzdjm] +qjopwxha-xwogap-nayaerejc-160[isjqz] +qzlozfhmf-azrjds-knfhrshbr-573[dfmys] +vhglnfxk-zktwx-vetllbybxw-vtgwr-vhtmbgz-ybgtgvbgz-761[gbtvl] +etaqigpke-ecpfa-eqcvkpi-cpcnauku-336[eyxtb] +lqwhuqdwlrqdo-fdqgb-frdwlqj-zrunvkrs-933[tvijl] +gvcskirmg-tvsnigxmpi-gerhc-gsexmrk-wlmttmrk-828[szawg] +irdgrxzex-kfg-jvtivk-wcfnvi-jyzggzex-269[givxz] +cqwdujys-sqdto-iqbui-270[siyeh] +bnqqnrhud-bgnbnkzsd-trdq-sdrshmf-807[dnbqr] +rgndvtcxr-hrpktcvtg-wjci-prfjxhxixdc-193[yjsht] +qekrixmg-hci-xvemrmrk-282[mreik] +xcitgcpixdcpa-snt-apqdgpidgn-349[mfywv] +wkqxodsm-pvygob-wkbuodsxq-978[ysamp] +aoubshwq-qvcqczohs-kcfygvcd-558[ytvls] +tyepcyletzylw-qwzhpc-opalcexpye-301[gamdn] +tfcfiwlc-treup-uvjzxe-607[nrthm] +ubhatstkwhnl-lvtoxgzxk-angm-inkvatlbgz-865[tagkl] +wihmogyl-aluxy-yaa-qilembij-890[emvct] +bxaxipgn-vgpst-ltpedcxots-gpqqxi-hidgpvt-245[pgtxi] +jfifqxov-doxab-mixpqfz-doxpp-obpbxoze-107[ghpyi] +gvaaz-dpssptjwf-sbccju-fohjoffsjoh-675[pfzwa] +gzefmnxq-eomhqzsqd-tgzf-efadmsq-378[qefmz] +emixwvqhml-kivlg-zmkmqdqvo-876[dcfin] +fodvvlilhg-fdqgb-frqwdlqphqw-725[qdflg] +laffe-pkrrehkgt-rumoyzoiy-670[dyjut] +egdytrixat-qphzti-tcvxcttgxcv-245[tcxgi] +htqtwkzq-wfintfhynaj-xhfajsljw-mzsy-jslnsjjwnsl-645[eynzi] +vrurcjah-pajmn-npp-mnyuxhvnwc-563[npach] +ejpanjwpekjwh-acc-klanwpekjo-576[jaekp] +kwvacumz-ozilm-kpwkwtibm-uizsmbqvo-876[mikwz] +hjgbwuladw-xdgowj-esfsywewfl-866[byzdm] +pbybeshy-wryylorna-npdhvfvgvba-351[stmxy] +qjopwxha-ywjzu-hkceopeyo-654[tysoa] +lhkhszqx-fqzcd-dff-vnqjrgno-417[fqdhn] +rgllk-otaoaxmfq-fdmuzuzs-768[vkqac] +ohmnuvfy-xsy-omyl-nymncha-214[hmtfs] +enzcntvat-cynfgvp-tenff-nanylfvf-455[cuimh] +sedikcuh-whqtu-sehheiylu-tou-bqrehqjeho-868[ydaux] +tyepcyletzylw-ojp-opalcexpye-145[wciks] +udpsdjlqj-hjj-frqwdlqphqw-309[gbpcz] +eqpuwogt-itcfg-lgnnadgcp-vtckpkpi-388[gpcti] +rkpqxyib-pzxsbkdbo-erkq-zrpqljbo-pbosfzb-133[bpkoq] +kdijqrbu-sxesebqju-tufqhjcudj-114[tdbva] +gsvvswmzi-wgezirkiv-lyrx-irkmriivmrk-412[twsrk] +ucynmlgxcb-qaytclecp-fslr-amlryglkclr-704[lcrya] +xst-wigvix-veffmx-wxsveki-100[ocvmr] +surmhfwloh-vfdyhqjhu-kxqw-frqwdlqphqw-829[hqwfd] +xmrrq-usfvq-esfsywewfl-528[alidm] +zhdsrqlchg-lqwhuqdwlrqdo-sodvwlf-judvv-ghsorbphqw-777[rtnmj] +egdytrixat-xcitgcpixdcpa-rwdrdapit-uxcpcrxcv-245[cdabn] +yrwxefpi-ikk-gywxsqiv-wivzmgi-152[iwgkv] +qcffcgwjs-foppwh-obozmgwg-558[zotsu] +veqtekmrk-gerhc-gsexmrk-hitpscqirx-568[nczdq] +gzefmnxq-pkq-pqbmdfyqzf-794[jxrmh] +eadalsjq-yjsvw-usfvq-ugslafy-ugflsafewfl-632[fsalu] +esyfwlau-usfvq-ugslafy-vwhdgqewfl-684[flsuw] +ktfitzbgz-fbebmtkr-zktwx-utldxm-wxlbzg-683[afwhg] +wihmogyl-aluxy-vohhs-uwkocmcncih-292[wzryd] +bkzrrhehdc-idkkxadzm-lzmzfdldms-677[oxwvn] +clxalrtyr-qwzhpc-lnbftdtetzy-249[zryvn] +rgllk-fab-eqodqf-vqxxknqmz-pqbxakyqzf-222[qfkxa] +xjinphzm-bmvyz-xviyt-mzxzdqdib-603[xnhfs] +htsxzrjw-lwfij-hmthtqfyj-wjfhvznxnynts-385[zreuy] +myvybpev-gokzyxsjon-oqq-nozvyiwoxd-692[iyzuj] +hcd-gsqfsh-pogysh-gvwddwbu-480[mysuk] +hcd-gsqfsh-foppwh-rsgwub-428[kvtfs] +frqvxphu-judgh-exqqb-uhvhdufk-621[wtgmn] +vhglnfxk-zktwx-vahvhetmx-vhgmtbgfxgm-345[hnamj] +tagzsrsjvgmk-usfvq-ugslafy-ugflsafewfl-892[yckbv] +joufsobujpobm-gmpxfs-vtfs-uftujoh-233[foujs] +zsxyfgqj-ojqqdgjfs-zxjw-yjxynsl-593[jqsxy] +bnknqetk-atmmx-qdzbpthrhshnm-131[ecnmt] +hmsdqmzshnmzk-dff-sqzhmhmf-859[dnxcz] +hqtyeqsjylu-tou-udwyduuhydw-348[uydhq] +ktiaaqnqml-kpwkwtibm-zmikycqaqbqwv-772[tlrsg] +nzydfxpc-rclop-mtzslklcozfd-mfyyj-nfdezxpc-dpcgtnp-951[cpdfz] +ckgvutofkj-hatte-gtgreyoy-644[tgeko] +iwcjapey-zua-paydjkhkcu-628[hntmg] +bnknqetk-okzrshb-fqzrr-trdq-sdrshmf-729[tuzoy] +qmpmxevc-kvehi-yrwxefpi-glsgspexi-wlmttmrk-828[hsyvf] +amjmpdsj-njyqrga-epyqq-qcptgacq-106[bhysd] +dwbcjkun-ljwmh-mnyuxhvnwc-641[wuyrz] +gspsvjyp-jpsaiv-hiwmkr-854[zthel] +gsrwyqiv-kvehi-gerhc-stivexmsrw-750[whgse] +xjgjmapg-wpiit-ozxcijgjbt-889[ytsop] +xgjougizobk-kmm-rghuxgzuxe-280[cwrty] +zovldbkfz-oxjmxdfkd-oxyyfq-ixyloxqlov-653[snkwb] +qczcftiz-qvcqczohs-gsfjwqsg-142[cqszf] +krxqjijamxdb-mhn-ldbcxvna-bnaerln-771[ravbt] +pybgmyargtc-bwc-bcqgel-860[bcgya] +wyvqljapsl-jovjvshal-shivyhavyf-773[vahjl] +pbafhzre-tenqr-onfxrg-bcrengvbaf-221[zyaro] +glrcplyrgmlyj-bwc-pcqcypaf-132[clpyg] +dpmpsgvm-dboez-dpbujoh-tfswjdft-545[bdmzf] +dkqjcbctfqwu-rncuvke-itcuu-cpcnauku-700[cuknq] +ajmrxjlcren-yujbcrl-pajbb-anbnjalq-459[yslvg] +oazegyqd-sdmpq-bxmefuo-sdmee-fqotzaxask-586[vfmnu] +ugdgjxmd-jsttal-ksdwk-632[hfjix] +aietsrmdih-gvcskirmg-tpewxmg-kveww-vigimzmrk-412[kfcim] +drxevkzt-jtrmvexvi-ylek-uvgcfpdvek-685[vekdr] +excdklvo-bkllsd-nozvyiwoxd-250[dlokv] +uwtojhynqj-hfsid-wjxjfwhm-281[fqsmx] +plolwdub-judgh-udeelw-uhfhlylqj-205[ludhe] +oqnidbshkd-dff-zmzkxrhr-729[cvlkx] +bknsykmdsfo-tovvilokx-bomosfsxq-328[boqly] +dpotvnfs-hsbef-qspkfdujmf-cvooz-tijqqjoh-961[zmnyi] +gspsvjyp-fyrrc-gsrxemrqirx-490[rsgpx] +gifavtkzcv-szfyrqriuflj-wcfnvi-uvmvcfgdvek-139[zadfj] +gsrwyqiv-kvehi-wgezirkiv-lyrx-wxsveki-490[alpzb] +ykhknbqh-ydkykhwpa-zalhkuiajp-862[khayp] +dmybmsuzs-yuxufmdk-sdmpq-bxmefuo-sdmee-fqotzaxask-586[nwikx] +nwzekwypera-bhksan-nayaerejc-940[xnmta] +wrs-vhfuhw-hjj-zrunvkrs-283[hrjsu] +ajyqqgdgcb-pyzzgr-amlryglkclr-782[lozts] +ohmnuvfy-jfumncw-alumm-womnigyl-mylpcwy-110[mqrgd] +foadouwbu-suu-obozmgwg-792[hgkuj] +wdjcvuvmyjpn-ytz-yzkgjthzio-109[jyztv] +ucynmlgxcb-pyzzgr-qfgnngle-210[iftry] +ymszqfuo-omzpk-oamfuzs-pqhqxabyqzf-872[qzfmo] +clotzlnetgp-ojp-opawzjxpye-769[pnhtz] +mhi-lxvkxm-yehpxk-ftgtzxfxgm-657[etajx] +surmhfwloh-fkrfrodwh-uhfhlylqj-699[rkslj] +iruzfrtkzmv-tyftfcrkv-kirzezex-841[emztq] +bdavqofuxq-nmewqf-ogefayqd-eqdhuoq-352[jpmyv] +bdavqofuxq-otaoaxmfq-xasuefuoe-326[aofqu] +gpsxdprixkt-tvv-ldgzhwde-219[dgptv] +pbeebfvir-rtt-bcrengvbaf-897[enlaq] +jchipqat-gpqqxi-bpgztixcv-375[cnqyt] +glrcplyrgmlyj-qaytclecp-fslr-pcqcypaf-574[clpyr] +pejji-oqq-vyqscdsmc-640[qcjsd] +houngfgxjuay-yigbktmkx-natz-xkykgxin-774[mszcw] +ltpedcxots-jchipqat-gpqqxi-bpcpvtbtci-219[isgfv] +gifavtkzcv-tyftfcrkv-drerxvdvek-659[vbdyz] +vjpwncrl-mhn-orwjwlrwp-641[wrjln] +vjpwncrl-ouxfna-bcxajpn-511[ydzfw] +rzvkjiduzy-xviyt-xjvodib-adivixdib-187[idvxb] +tinnm-suu-twbobqwbu-272[datjf] +apuut-xviyt-vxlpdndodji-941[zrtso] +jxdkbqfz-zixppfcfba-mixpqfz-doxpp-jxohbqfkd-705[fpxbd] +zilqwikbqdm-lgm-kwvbiqvumvb-876[bqpme] +jyddc-wgezirkiv-lyrx-wxsveki-256[sjntv] +ahngzyzqcntr-qzaahs-zbpthrhshnm-963[fzvai] +ksodcbwnsr-qfmcusbwq-suu-qighcasf-gsfjwqs-350[wyezk] +atyzghrk-igtje-iugzotm-jkyomt-462[ksuli] +dwbcjkun-ajmrxjlcren-yujbcrl-pajbb-nwprwnnarwp-563[tjsqg] +aoubshwq-dzoghwq-ufogg-aofyshwbu-896[hwcmz] +apwmeclga-npmhcargjc-njyqrga-epyqq-rpyglgle-340[dgtsc] +apwmeclga-aylbw-amyrgle-dglylagle-210[iumzy] +ydjuhdqjyedqb-rkddo-sedjqydcudj-738[ycbmx] +iuxxuyobk-xgjougizobk-pkrrehkgt-sgtgmksktz-644[pzsmw] +bnmrtldq-fqzcd-bgnbnkzsd-vnqjrgno-521[nbdqg] +wfruflnsl-gzssd-wjhjnansl-177[wtmsg] +yhwooebeaz-ywjzu-klanwpekjo-680[eowaj] +pynffvsvrq-cynfgvp-tenff-ernpdhvfvgvba-663[vbduy] +zilqwikbqdm-ntwemz-uizsmbqvo-356[yhenq] +jvsvymbs-zjhclunly-obua-jvuahputlua-721[uajlv] +fhezusjybu-rqiauj-tufbeocudj-400[ecamb] +ftzgxmbv-wrx-xgzbgxxkbgz-293[xgbzf] +chnylhuncihuf-xsy-xypyfijgyhn-578[jigcy] +vhkkhlbox-pxtihgbsxw-cxeeruxtg-wxlbzg-111[hsuty] +foadouwbu-tzcksf-gozsg-246[ofgsu] +xzwrmkbqtm-moo-nqvivkqvo-434[moqvk] +gvaaz-cvooz-dpoubjonfou-415[mcnzb] +pbafhzre-tenqr-enoovg-grpuabybtl-169[bktjl] +uwtojhynqj-gzssd-ywfnsnsl-723[phguv] +dlhwvupglk-zjhclunly-obua-klwhyatlua-227[luahk] +vhkkhlbox-vhehkyne-vahvhetmx-ybgtgvbgz-215[hvbeg] +qlm-pbzobq-gbiivybxk-lmboxqflkp-809[blqik] +forwcoqhwjs-qvcqczohs-ghcfous-792[mtuqn] +eqpuwogt-itcfg-dwppa-fgrnqaogpv-570[gpafo] +lxuxaodu-bljenwpna-qdwc-jwjuhbrb-121[rbqfd] +ykhknbqh-xqjju-oanreyao-680[ahjkn] +ugfkmewj-yjsvw-hdsklau-yjskk-kzahhafy-918[kahjs] +gbc-frperg-fpniratre-uhag-fnyrf-897[dskta] +myxcewob-qbkno-lexxi-wkxkqowoxd-770[spdoc] +cqwdujys-fbqijys-whqii-huiuqhsx-998[uhebs] +ckgvutofkj-igtje-iugzotm-rghuxgzuxe-774[gutei] +excdklvo-lexxi-psxkxmsxq-302[ypsmx] +mbiyqoxsm-dyz-combod-mkxni-mykdsxq-zebmrkcsxq-692[fnhpz] +zlkprjbo-doxab-gbiivybxk-xkxivpfp-809[ydtxn] +wdjcvuvmyjpn-ezggtwzvi-hvmfzodib-603[vzdgi] +njmjubsz-hsbef-fhh-bobmztjt-649[mxkjw] +wsvsdkbi-qbkno-oqq-ecob-docdsxq-796[rglok] +htsxzrjw-lwfij-gfxpjy-fsfqdxnx-307[uyteb] +wpuvcdng-ejqeqncvg-yqtmujqr-882[svamn] +tagzsrsjvgmk-hdsklau-yjskk-ugflsafewfl-606[tysrn] +kwtwznct-akidmvomz-pcvb-zmamizkp-200[skpom] +dpmpsgvm-dboez-dpbujoh-fohjoffsjoh-311[fknst] +rnqnyfwd-lwfij-hmthtqfyj-xytwflj-567[gzkol] +zntargvp-pnaql-hfre-grfgvat-923[yijbm] +dzczkrip-xiruv-treup-tfrkzex-drerxvdvek-347[vrmsu] +ajyqqgdgcb-afmamjyrc-sqcp-rcqrgle-522[cqagr] +pelbtravp-ohaal-erprvivat-715[jnbmz] +irdgrxzex-sleep-ivrthlzjzkzfe-113[bmsnw] +eqpuwogt-itcfg-tcddkv-fgxgnqrogpv-804[gtcdf] +cvabijtm-moo-ivitgaqa-226[darfu] +ytu-xjhwjy-xhfajsljw-mzsy-zxjw-yjxynsl-281[wzjeb] +fkqbokxqflkxi-yxphbq-obxznrfpfqflk-809[dcasb] +gokzyxsjon-sxdobxkdsyxkv-mkxni-ecob-docdsxq-276[zypso] +ibghopzs-suu-kcfygvcd-402[cgsub] +tfiifjzmv-srjbvk-uvjzxe-581[sovtj] +gntmfefwitzx-gfxpjy-xmnuunsl-619[fnxgm] +lgh-kwujwl-bwddqtwsf-vwhsjlewfl-788[tlejf] +hjgbwuladw-wyy-ghwjslagfk-164[wgahj] +nzwzcqfw-ojp-qtylyntyr-431[ynqtw] +sbejpbdujwf-sbccju-vtfs-uftujoh-909[kujit] +vhkkhlbox-wrx-ftkdxmbgz-241[uwzex] +lahxpnwrl-bljenwpna-qdwc-cajrwrwp-381[yjzno] +lugjuacha-jfumncw-alumm-jolwbumcha-838[uamcj] +gvcskirmg-glsgspexi-jmrergmrk-828[smeyi] +thnulapj-ihzrla-thyrlapun-955[ahlnp] +sno-rdbqds-bzmcx-btrsnldq-rdquhbd-937[dbqrs] +vdzonmhydc-eknvdq-dmfhmddqhmf-781[dmhfn] +iehepwnu-cnwza-xqjju-ykjpwejiajp-368[jepwa] +dfcxsqhwzs-dzoghwq-ufogg-cdsfohwcbg-974[gcdfh] +sbqiiyvyut-tou-jhqydydw-608[okbzs] +htsxzrjw-lwfij-gzssd-uzwhmfxnsl-801[nmtjq] +hvbizodx-rzvkjiduzy-xviyt-yzqzgjkhzio-213[zivyd] +ajmrxjlcren-ljwmh-lxjcrwp-bqryyrwp-745[kheat] +vkppo-shoewudys-tou-udwyduuhydw-556[udowy] +dpotvnfs-hsbef-dmbttjgjfe-gmpxfs-nbslfujoh-363[qapli] +glrcplyrgmlyj-djmucp-qrmpyec-158[clmpr] +emixwvqhml-xtiabqk-oziaa-wxmzibqwva-642[rkpba] +qczcftiz-dzoghwq-ufogg-aofyshwbu-298[lmcuy] +cvabijtm-zilqwikbqdm-akidmvomz-pcvb-nqvivkqvo-746[ynxzo] +pkl-oaynap-acc-wjwhuoeo-134[jxlai] +xjmmjndqz-kgvnodx-bmvnn-rjmfncjk-291[njmdk] +ejpanjwpekjwh-nwxxep-nayaerejc-550[lisvd] +htwwtxnaj-htsxzrjw-lwfij-hfsid-htfynsl-wjfhvznxnynts-541[hntwf] +mbiyqoxsm-mkxni-mykdsxq-crszzsxq-770[zhowm] +rmn-qcapcr-ucynmlgxcb-cee-pcqcypaf-886[cpaem] +rtqlgevkng-ejqeqncvg-fgxgnqrogpv-466[zktns] +fydelmwp-mfyyj-nfdezxpc-dpcgtnp-769[anfej] +yuxufmdk-sdmpq-otaoaxmfq-pqbxakyqzf-742[ohxti] +vxupkizork-igtje-xkgiwaoyozout-592[bmwjf] +veqtekmrk-tvsnigxmpi-gerhc-gsexmrk-gywxsqiv-wivzmgi-802[dglps] +nsyjwsfyntsfq-uqfxynh-lwfxx-ijuqtdrjsy-931[ymnhu] +gifavtkzcv-avccpsvre-fgvirkzfej-841[ypigz] +krxqjijamxdb-kdwwh-mnyjacvnwc-641[krnma] +dszphfojd-ezf-sftfbsdi-805[fdszb] +xmrrq-tmffq-lwuzfgdgyq-372[fqgmr] +tagzsrsjvgmk-xdgowj-vwhsjlewfl-788[gjswl] +lsyrkjkbnyec-mkxni-nofovyzwoxd-614[knoyx] +dwbcjkun-mhn-bjunb-173[mykra] +vhehkyne-vtgwr-nlxk-mxlmbgz-319[eghkl] +bkzrrhehdc-bnqqnrhud-bzmcx-bnzshmf-otqbgzrhmf-677[xaszn] +oxmeeuruqp-bxmefuo-sdmee-abqdmfuaze-248[udtec] +jlidywncfy-mwupyhayl-bohn-uhufsmcm-500[yhmuc] +xjmmjndqz-zbb-mzvxlpdndodji-239[djmzb] +yuxufmdk-sdmpq-omzpk-qzsuzqqduzs-534[ofrpg] +tfejldvi-xiruv-vxx-uvgrikdvek-659[cnesm] +yaxsnlcrun-ajkkrc-anbnjalq-979[nmivs] +tvsnigxmpi-ikk-wivzmgiw-880[agunv] +mrxivrexmsrep-tpewxmg-kveww-viwievgl-698[evwim] +nglmtuex-yehpxk-labiibgz-241[begil] +zuv-ykixkz-ixeumktoi-igtje-iugzotm-aykx-zkyzotm-670[pjybl] +forwcoqhwjs-dzoghwq-ufogg-difqvogwbu-272[xkwoz] +ajyqqgdgcb-qaytclecp-fslr-bcqgel-886[mkvsi] +myxcewob-qbkno-mkxni-mykdsxq-wkbuodsxq-770[zmijb] +uwtojhynqj-kqtbjw-yjhmstqtld-333[jtqhw] +wsvsdkbi-qbkno-lkcuod-dbksxsxq-406[biaoe] +gpbepvxcv-rpcsn-rdpixcv-advxhixrh-895[dcwgp] +muqfedyput-isqludwuh-xkdj-mehaixef-712[betdq] +ckgvutofkj-inuiurgzk-xkgiwaoyozout-956[sazyo] +wfruflnsl-uqfxynh-lwfxx-btwpxmtu-541[fxluw] +qfmcusbwq-rms-igsf-hsghwbu-246[sbfgh] +ynukcajey-nwxxep-qoan-paopejc-602[htmbv] +ujqgywfau-uzgugdslw-jwkwsjuz-138[newms] +yflexwxoalrp-zxkav-cfkxkzfkd-705[ctnsy] +vjpwncrl-lqxlxujcn-mnyuxhvnwc-953[nawmz] +willimcpy-wuhxs-lyuwkocmcncih-786[cilwh] +mtzslklcozfd-clmmte-cpnptgtyr-119[tjkgv] +xlrypetn-awldetn-rcldd-cplnbftdtetzy-795[tdlen] +vkppo-rqiauj-huqsgkyiyjyed-452[yijkp] +vxupkizork-lruckx-jkbkruvsktz-124[eumyz] +diozmivodjivg-agjrzm-nzmqdxzn-915[otpfl] +owshgfarwv-hdsklau-yjskk-klgjsyw-918[qcjim] +zuv-ykixkz-igtje-iugzotm-zkinturume-202[plvqf] +zlilocri-oxyyfq-bkdfkbbofkd-835[bswmn] +ziuxioqvo-lgm-amzdqkma-798[maioq] +xqvwdeoh-sodvwlf-judvv-ghyhorsphqw-517[hvdow] +ovbunmneqbhf-enqvbnpgvir-onfxrg-qrfvta-507[nvbfq] +gbc-frperg-pnaql-genvavat-351[pmzkq] +eadalsjq-yjsvw-jsttal-suimakalagf-580[zjghy] +rdadguja-rpcsn-rdpixcv-apqdgpidgn-245[dpagr] +tbxmlkfwba-pzxsbkdbo-erkq-abpfdk-523[vifrq] +ocipgvke-uecxgpigt-jwpv-ugtxkegu-544[abfsh] +ovbunmneqbhf-zvyvgnel-tenqr-wryylorna-ybtvfgvpf-481[hxymg] +pinovwgz-xjinphzm-bmvyz-agjrzm-ozxcijgjbt-681[cqlnu] +tinnm-qobrm-ghcfous-220[hyczt] +iuruxlar-yigbktmkx-natz-ykxboiky-748[kixya] +bkzrrhehdc-bzmcx-bnzshmf-cdrhfm-209[hbcmr] +gpsxdprixkt-tvv-uxcpcrxcv-973[xcpvr] +forwcoqhwjs-rms-hfowbwbu-974[stzrm] +zovldbkfz-fkqbokxqflkxi-mixpqfz-doxpp-cfkxkzfkd-705[tsmfo] +vetllbybxw-lvtoxgzxk-angm-ftgtzxfxgm-371[sbemy] +hwbba-ejqeqncvg-tgugctej-232[iyrqv] +vqr-ugetgv-lgnnadgcp-wugt-vguvkpi-596[gvunp] +xgvnndadzy-wpiit-yzndbi-343[rawyd] +jxdkbqfz-oxyyfq-qbzeklildv-107[qbdfk] +wlsiayhcw-luvvcn-mufym-656[jbvne] +surmhfwloh-fdqgb-ghvljq-621[ymnve] +mvkccspson-bkllsd-vklybkdybi-432[yscux] +dszphfojd-sbccju-dvtupnfs-tfswjdf-129[itbfs] +lsyrkjkbnyec-lexxi-crszzsxq-978[sxcek] +qlm-pbzobq-mixpqfz-doxpp-zlkqxfkjbkq-211[satyb] +bknsykmdsfo-nio-kmaescsdsyx-744[tspif] +bpvctixr-rpcsn-rjhidbtg-htgkxrt-713[rtbcg] +sebehvkb-rqiauj-udwyduuhydw-140[udbeh] +zhdsrqlchg-fdqgb-hqjlqhhulqj-387[zptrs] +qxdwpopgsdjh-rpcsn-sthxvc-635[nbixj] +pualyuhapvuhs-msvdly-klzpnu-721[ulpah] +sbqiiyvyut-shoewudys-isqludwuh-xkdj-jhqydydw-894[dysuh] +wsvsdkbi-qbkno-lexxi-dbksxsxq-614[onzwh] +ydjuhdqjyedqb-rqiauj-efuhqjyedi-894[ocdpe] +kwzzwaqdm-ntwemz-wxmzibqwva-434[nwzml] +qspkfdujmf-fhh-nbobhfnfou-571[zpyau] +bxaxipgn-vgpst-tvv-detgpixdch-583[xwiac] +qfmcusbwq-dfcxsqhwzs-xszzmpsob-fsqswjwbu-402[lstrx] +dpmpsgvm-dboez-sfdfjwjoh-337[dfjmo] +dzoghwq-ufogg-fsgsofqv-636[gfoqs] +nzwzcqfw-dnlgpyrpc-sfye-qtylyntyr-509[milhd] +xgsvgmotm-pkrrehkgt-vaxingyotm-176[jubcm] +xgsvgmotm-jek-cuxqynuv-644[soxwn] +cxy-bnlanc-lahxpnwrl-kdwwh-fxatbqxy-485[zamhj] +irgyyolokj-inuiurgzk-sgtgmksktz-982[vzkrq] +xgvnndadzy-xcjxjgvoz-xjiovdihzio-733[ozhyu] +gvcskirmg-nippcfier-xiglrspskc-334[bastq] +zlilocri-gbiivybxk-obxznrfpfqflk-367[ntyda] +pyknyegle-pyzzgr-pcqcypaf-886[nxvzy] +zhdsrqlchg-gbh-frqwdlqphqw-361[nqzts] +kyelcrga-cee-yaosgqgrgml-808[izdqr] +hplazytkpo-prr-cpnptgtyr-379[prtya] \ No newline at end of file diff --git a/2016/day04-test.rkt b/2016/day04-test.rkt new file mode 100644 index 0000000..1321632 --- /dev/null +++ b/2016/day04-test.rkt @@ -0,0 +1,5 @@ +#lang aoc-racket/2016/day04 +aaaaa-bbb-z-y-x-123[abxyz] +a-b-c-d-e-f-g-h-987[abcde] +not-a-real-room-404[oarel] +totally-real-room-200[decoy] \ No newline at end of file diff --git a/2016/day04.rkt b/2016/day04.rkt new file mode 100644 index 0000000..3a78f74 --- /dev/null +++ b/2016/day04.rkt @@ -0,0 +1,55 @@ +#lang br/quicklang +(module+ reader + (provide read-syntax) + (define (read-syntax path port) + (strip-bindings + #`(module mod "day04.rkt" + #,@(for*/list ([room-str (in-lines port)] + #:when (not (equal? "" room-str))) + `(room ,@(cdr (regexp-match #px"^(.*)-(\\d+)\\[(\\w+)\\]$" room-str)))))))) + +#| +Each room consists of an encrypted name (lowercase letters separated by dashes) +followed by a dash, a sector ID, and a checksum in square brackets. +|# +(struct $room (name sector checksum) #:transparent) +(define-macro (room NAME SECTOR CHECKSUM) + #'($room NAME (string->number SECTOR) CHECKSUM)) +(provide room) + +(define-macro (mb . ROOMS) + #'(#%module-begin + (define rooms (list . ROOMS)) + (display "part a: ") + (displayln (for/sum ([room (in-list rooms)] + #:when (real-room? room)) + ($room-sector room))) + (display "part b: ") + (displayln + (for/first ([room (in-list rooms)] + #:when (equal? (shift-string ($room-name room) ($room-sector room)) + "northpole object storage")) + ($room-sector room))))) +(provide (rename-out [mb #%module-begin])) + +#| +A room is real (not a decoy) if the checksum is +the five most common letters in the encrypted name, in order, +with ties broken by alphabetization. +|# + +(require sugar/list) +(define (real-room? room) + (define room-chars (string->list (string-replace ($room-name room) "-" ""))) + (define freqs (hash->list (frequency-hash room-chars))) + (define sorted-freqs (sort (sort freqs char #:key cdr)) + (equal? ($room-checksum room) (list->string (map car (take sorted-freqs 5))))) + +(define (shift-string str shift) + (list->string + (for/list ([c (in-string str)]) + (cond + [(char=? c #\-) #\space] + [else + (define a-val (char->integer #\a)) + (integer->char (+ (modulo (+ (char->integer c) (- a-val) shift) 26) a-val))])))) \ No newline at end of file -- 2.25.1 From 5924352c7a3018dc6e511d7b03f5f2f39ba1ff98 Mon Sep 17 00:00:00 2001 From: Matthew Butterick Date: Sun, 4 Dec 2016 14:46:53 -0800 Subject: [PATCH 09/43] edits --- 2016/day01.rkt | 28 ++++++++++++++-------------- 2016/day02.rkt | 20 ++++++++++---------- 2016/day02b.rkt | 20 ++++++++++---------- 2016/day03.rkt | 4 +--- 2016/day03b.rkt | 11 ++++------- 2016/day04.rkt | 30 +++++++++++++++--------------- 6 files changed, 54 insertions(+), 59 deletions(-) diff --git a/2016/day01.rkt b/2016/day01.rkt index fcae573..eae2db9 100644 --- a/2016/day01.rkt +++ b/2016/day01.rkt @@ -1,16 +1,16 @@ #lang br/quicklang -(module+ reader - (provide read-syntax) - (define (read-syntax path port) - (define turn-strings (string-split (port->string port) ",")) - (define turn-pattern #px"^([LR])(\\d+)$") - (define turn-datums - (for*/list ([tstr (in-list turn-strings)]) - (define match-result (regexp-match turn-pattern (string-trim tstr))) - `(turn ,@(cdr (or match-result empty))))) - (strip-bindings - #`(module day01-mod "day01.rkt" - #,@turn-datums)))) + +(define (read-syntax path port) + (define turn-strings (string-split (port->string port) ",")) + (define turn-pattern #px"^([LR])(\\d+)$") + (define turn-datums + (for*/list ([tstr (in-list turn-strings)]) + (define match-result (regexp-match turn-pattern (string-trim tstr))) + `(turn ,@(cdr (or match-result empty))))) + (strip-bindings + #`(module day01-mod "day01.rkt" + #,@turn-datums))) +(module+ reader (provide read-syntax)) (define-macro (mb . TURNS) #'(#%module-begin @@ -48,8 +48,8 @@ (define-macro-cases turn [(_ DIR DIST) (with-pattern ([ENCODED-DIR (syntax-case #'DIR () - ["L" #'rotate-left] - ["R" #'rotate-right])]) + ["L" #'rotate-left] + ["R" #'rotate-right])]) #'($turn ENCODED-DIR (string->number DIST)))] [else #'(void)]) (provide turn) \ No newline at end of file diff --git a/2016/day02.rkt b/2016/day02.rkt index da5fbb1..0fb2bcf 100644 --- a/2016/day02.rkt +++ b/2016/day02.rkt @@ -1,14 +1,14 @@ #lang br/quicklang -(module+ reader - (provide read-syntax) - (define (read-syntax path port) - (define moveset-strs (string-split (port->string port))) - (define moveset-datums - (for*/list ([msstr (in-list moveset-strs)]) - `(moveset ,@(regexp-match* #rx"." msstr)))) - (strip-bindings - #`(module day01-mod "day02.rkt" - #,@moveset-datums)))) + +(define (read-syntax path port) + (define moveset-strs (string-split (port->string port))) + (define moveset-datums + (for*/list ([msstr (in-list moveset-strs)]) + `(moveset ,@(regexp-match* #rx"." msstr)))) + (strip-bindings + #`(module day01-mod "day02.rkt" + #,@moveset-datums))) +(module+ reader (provide read-syntax)) (define-macro moveset #'list) (provide moveset) diff --git a/2016/day02b.rkt b/2016/day02b.rkt index 76d609d..e164540 100644 --- a/2016/day02b.rkt +++ b/2016/day02b.rkt @@ -1,14 +1,14 @@ #lang br/quicklang -(module+ reader - (provide read-syntax) - (define (read-syntax path port) - (define moveset-strs (string-split (port->string port))) - (define moveset-datums - (for*/list ([msstr (in-list moveset-strs)]) - `(moveset ,@(regexp-match* #rx"." msstr)))) - (strip-bindings - #`(module day01-mod "day02b.rkt" - #,@moveset-datums)))) + +(define (read-syntax path port) + (define moveset-strs (string-split (port->string port))) + (define moveset-datums + (for*/list ([msstr (in-list moveset-strs)]) + `(moveset ,@(regexp-match* #rx"." msstr)))) + (strip-bindings + #`(module day01-mod "day02b.rkt" + #,@moveset-datums))) +(module+ reader (provide read-syntax)) (define-macro moveset #'list) (provide moveset) diff --git a/2016/day03.rkt b/2016/day03.rkt index 6a61b72..16c8a48 100644 --- a/2016/day03.rkt +++ b/2016/day03.rkt @@ -13,9 +13,7 @@ (provide (rename-out [mb #%module-begin])) (define-macro (triangle A B C) - #'(list (string->number A) - (string->number B) - (string->number C))) + #'(map string->number (list A B C))) (provide triangle) (define (valid-triangle? triangle) diff --git a/2016/day03b.rkt b/2016/day03b.rkt index c0ced41..fff651c 100644 --- a/2016/day03b.rkt +++ b/2016/day03b.rkt @@ -1,9 +1,7 @@ #lang br/quicklang (require sugar/list) -(module+ reader - (provide read-syntax) - (define (read-syntax path port) +(define (read-syntax path port) (define triads (slice-at (map string-split (string-split (port->string port) "\n")) 3)) (define new-triples (slice-at (flatten (for/list ([triad (in-list triads)]) @@ -11,7 +9,8 @@ (strip-bindings #`(module mod "day03b.rkt" #,@(for*/list ([triple (in-list new-triples)]) - `(triangle ,@triple)))))) + `(triangle ,@triple))))) +(module+ reader (provide read-syntax)) (define-macro (mb . TRIANGLES) #'(#%module-begin @@ -19,9 +18,7 @@ (provide (rename-out [mb #%module-begin])) (define-macro (triangle A B C) - #'(list (string->number A) - (string->number B) - (string->number C))) + #'(map string->number (list A B C))) (provide triangle) (define (valid-triangle? triangle) diff --git a/2016/day04.rkt b/2016/day04.rkt index 3a78f74..16b4dd7 100644 --- a/2016/day04.rkt +++ b/2016/day04.rkt @@ -1,12 +1,12 @@ #lang br/quicklang -(module+ reader - (provide read-syntax) - (define (read-syntax path port) - (strip-bindings - #`(module mod "day04.rkt" - #,@(for*/list ([room-str (in-lines port)] - #:when (not (equal? "" room-str))) - `(room ,@(cdr (regexp-match #px"^(.*)-(\\d+)\\[(\\w+)\\]$" room-str)))))))) + +(define (read-syntax path port) + (strip-bindings + #`(module mod "day04.rkt" + #,@(for*/list ([room-str (in-lines port)] + #:when (not (equal? "" room-str))) + `(room ,@(cdr (regexp-match #px"^(.*)-(\\d+)\\[(\\w+)\\]$" room-str))))))) +(module+ reader (provide read-syntax)) #| Each room consists of an encrypted name (lowercase letters separated by dashes) @@ -23,13 +23,13 @@ followed by a dash, a sector ID, and a checksum in square brackets. (display "part a: ") (displayln (for/sum ([room (in-list rooms)] #:when (real-room? room)) - ($room-sector room))) + ($room-sector room))) (display "part b: ") (displayln (for/first ([room (in-list rooms)] #:when (equal? (shift-string ($room-name room) ($room-sector room)) "northpole object storage")) - ($room-sector room))))) + ($room-sector room))))) (provide (rename-out [mb #%module-begin])) #| @@ -48,8 +48,8 @@ with ties broken by alphabetization. (define (shift-string str shift) (list->string (for/list ([c (in-string str)]) - (cond - [(char=? c #\-) #\space] - [else - (define a-val (char->integer #\a)) - (integer->char (+ (modulo (+ (char->integer c) (- a-val) shift) 26) a-val))])))) \ No newline at end of file + (cond + [(char=? c #\-) #\space] + [else + (define a-val (char->integer #\a)) + (integer->char (+ (modulo (+ (char->integer c) (- a-val) shift) 26) a-val))])))) \ No newline at end of file -- 2.25.1 From f8abf55483d2548a6ce406e959601a89343d047b Mon Sep 17 00:00:00 2001 From: Matthew Butterick Date: Sun, 4 Dec 2016 14:50:41 -0800 Subject: [PATCH 10/43] nit --- 2016/day03.rkt | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/2016/day03.rkt b/2016/day03.rkt index 16c8a48..9a6362f 100644 --- a/2016/day03.rkt +++ b/2016/day03.rkt @@ -1,11 +1,11 @@ #lang br/quicklang -(module+ reader - (provide read-syntax) - (define (read-syntax path port) - (strip-bindings - #`(module day01-mod "day03.rkt" - #,@(for*/list ([triangle-str (in-list (string-split (port->string port) "\n"))]) - `(triangle ,@(string-split triangle-str))))))) + +(define (read-syntax path port) + (strip-bindings + #`(module mod "day03.rkt" + #,@(for*/list ([triangle-str (in-list (string-split (port->string port) "\n"))]) + `(triangle ,@(string-split triangle-str)))))) +(module+ reader (provide read-syntax)) (define-macro (mb . TRIANGLES) #'(#%module-begin -- 2.25.1 From 8d3cf51a1198a0808ddae4f5dca2f984c26a6dac Mon Sep 17 00:00:00 2001 From: Matthew Butterick Date: Sun, 4 Dec 2016 23:54:43 -0800 Subject: [PATCH 11/43] start day05 --- 2016/day05.rkt | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 2016/day05.rkt diff --git a/2016/day05.rkt b/2016/day05.rkt new file mode 100644 index 0000000..3454698 --- /dev/null +++ b/2016/day05.rkt @@ -0,0 +1,15 @@ +#lang br +(require openssl/md5) + +(define key "ojvtpuvg") + +(let loop ([idx 0][password-cs empty]) + (cond + [(= 8 (length password-cs)) + (apply string-append (reverse password-cs))] + [else + (define this-key (format "~a~a" key idx)) + (define next-hash (md5 (open-input-string this-key))) + (if (string-prefix? next-hash "00000") + (loop (add1 idx) (cons (substring next-hash 5 6) password-cs)) + (loop (add1 idx) password-cs))])) -- 2.25.1 From 87d3d263d726a447d48fac7a6d2013b88a36f32f Mon Sep 17 00:00:00 2001 From: Matthew Butterick Date: Mon, 5 Dec 2016 10:59:01 -0800 Subject: [PATCH 12/43] langify --- 2016/day05-input.rkt | 2 ++ 2016/day05.rkt | 34 ++++++++++++++++++++++------------ 2 files changed, 24 insertions(+), 12 deletions(-) create mode 100644 2016/day05-input.rkt diff --git a/2016/day05-input.rkt b/2016/day05-input.rkt new file mode 100644 index 0000000..c888270 --- /dev/null +++ b/2016/day05-input.rkt @@ -0,0 +1,2 @@ +#lang aoc-racket/2016/day05 +ojvtpuvg \ No newline at end of file diff --git a/2016/day05.rkt b/2016/day05.rkt index 3454698..3668599 100644 --- a/2016/day05.rkt +++ b/2016/day05.rkt @@ -1,15 +1,25 @@ -#lang br +#lang br/quicklang (require openssl/md5) -(define key "ojvtpuvg") +(define (read-syntax path port) + (strip-bindings + #`(module mod "day05.rkt" + (solve-part-a #,(string-trim (port->string port)))))) +(module+ reader (provide read-syntax)) -(let loop ([idx 0][password-cs empty]) - (cond - [(= 8 (length password-cs)) - (apply string-append (reverse password-cs))] - [else - (define this-key (format "~a~a" key idx)) - (define next-hash (md5 (open-input-string this-key))) - (if (string-prefix? next-hash "00000") - (loop (add1 idx) (cons (substring next-hash 5 6) password-cs)) - (loop (add1 idx) password-cs))])) +(provide #%module-begin) + +(define (solve-part-a key) + (display "part a solution: ") + (for*/fold ([password-cs empty]) + ([idx (in-naturals)] + [this-key (in-value (format "~a~a" key idx))] + #:break (= 8 (length password-cs))) + (define this-hash (md5 (open-input-string this-key))) + (if (string-prefix? this-hash "00000") + (let ([next-str (substring this-hash 5 6)]) + (display next-str) + (cons next-str password-cs)) + password-cs)) + (displayln "")) +(provide solve-part-a) -- 2.25.1 From 5f292272d48318669408046a25d62f62c06c5285 Mon Sep 17 00:00:00 2001 From: Matthew Butterick Date: Mon, 5 Dec 2016 19:23:54 -0800 Subject: [PATCH 13/43] finish day05 (very slow) --- 2016/day05.rkt | 46 +++++++++++++++++++++++++++++++--------------- 1 file changed, 31 insertions(+), 15 deletions(-) diff --git a/2016/day05.rkt b/2016/day05.rkt index 3668599..b25d605 100644 --- a/2016/day05.rkt +++ b/2016/day05.rkt @@ -4,22 +4,38 @@ (define (read-syntax path port) (strip-bindings #`(module mod "day05.rkt" - (solve-part-a #,(string-trim (port->string port)))))) + (solve #,(string-trim (port->string port)))))) (module+ reader (provide read-syntax)) (provide #%module-begin) -(define (solve-part-a key) - (display "part a solution: ") - (for*/fold ([password-cs empty]) - ([idx (in-naturals)] - [this-key (in-value (format "~a~a" key idx))] - #:break (= 8 (length password-cs))) - (define this-hash (md5 (open-input-string this-key))) - (if (string-prefix? this-hash "00000") - (let ([next-str (substring this-hash 5 6)]) - (display next-str) - (cons next-str password-cs)) - password-cs)) - (displayln "")) -(provide solve-part-a) +(define (solve key) + (define-values + (part-a-solution part-b-solution) + (for*/fold ([part-a empty] + [part-b (make-vector 8 #f)]) + ([idx (in-naturals 1000000)] + [this-key (in-value (format "~a~a" key idx))] + #:break (and (= 8 (length part-a)) + (andmap string? (vector->list part-b)))) + (define this-hash (md5 (open-input-string this-key))) + (define next-part-a + (if (and (not (= 8 (length part-a))) + (string-prefix? this-hash "00000")) + (let ([next-str (substring this-hash 5 6)]) + (displayln (format "part a progress: ~a" next-str)) + (cons next-str part-a)) + part-a)) + (define next-part-b + (let () + (when (and (string-prefix? this-hash "00000") + (string->number (substring this-hash 5 6)) + (<= 0 (string->number (substring this-hash 5 6)) 7) + (not (vector-ref part-b (string->number (substring this-hash 5 6))))) + (displayln (format "part b progress: idx ~a, hash ~a, ~a at ~a" idx this-hash (substring this-hash 6 7) (substring this-hash 5 6))) + (vector-set! part-b (string->number (substring this-hash 5 6)) (substring this-hash 6 7))) + part-b)) + (values next-part-a next-part-b))) + (displayln (format "part a: ~a" (apply string-append (reverse part-a-solution)))) + (displayln (format "part b: ~a" (apply string-append (vector->list part-b-solution))))) +(provide solve) -- 2.25.1 From 78d7dfa3ab4f92c8105946e272a810b554fea53d Mon Sep 17 00:00:00 2001 From: Matthew Butterick Date: Mon, 5 Dec 2016 23:55:35 -0800 Subject: [PATCH 14/43] day06 --- 2016/day06-input.rkt | 625 +++++++++++++++++++++++++++++++++++++++++++ 2016/day06-test.rkt | 17 ++ 2016/day06.rkt | 19 ++ 3 files changed, 661 insertions(+) create mode 100644 2016/day06-input.rkt create mode 100644 2016/day06-test.rkt create mode 100644 2016/day06.rkt diff --git a/2016/day06-input.rkt b/2016/day06-input.rkt new file mode 100644 index 0000000..1d5bc41 --- /dev/null +++ b/2016/day06-input.rkt @@ -0,0 +1,625 @@ +#lang aoc-racket/2016/day06 +focdealm +ggsipflx +rvibwxbm +vqrfyyrh +hsjtzpgs +ozymxpoy +jiecwags +lztseufl +dfwibwsn +skiuhnwl +kamgzqog +axeqncwa +gobivxto +nwgoryhd +tzrlitrq +uzoldxbv +zsteobha +pfcgdqkg +prcqlunp +iwivemkh +vpkilupm +ewuznabz +veaptost +cyvirffe +ejhhqfng +ibsqztgg +xzczkboh +bckhbodf +vbycgonv +esmoyyku +unccgdgj +cqwnqlzs +edoqmykb +bkvzlhyq +yzrspisn +zlzibhca +povnweaf +muyfegxe +oaojqfrl +gwesjxws +rjknfyeh +dkquvctc +cfuzhxoj +tdzzzfqc +lzjzsyni +wjfxckkf +xmhyjhop +kmtllzxs +yohearbj +ilmvyxgn +erczytzw +kuetjsba +vwkpollq +tujwluzc +jlvedjcp +acmoaoji +gqoliyen +agckavhf +ottamfdm +jxwlyotw +tdpsrapj +carwwmqc +ykaipjdj +zdfrbduu +vwiiosud +uoixglbw +yegbwxjb +wbpqqqfv +wpynmyqi +aqdkscgd +oghnbnnf +duftexbb +ttvbofay +jferymwy +hqzimpiq +sifyogml +nymxqbws +dhdlhhqp +urtuhcrj +giwcunfq +fxgretsl +maihqkpk +pdxfkcru +xixtthag +vuzxqzzi +wxxeleug +xpopxkzo +hgcsyuad +xcbydxnx +kxocfakp +erxdajeq +tliakzhh +iygbbuxs +qlgqthpp +duzzptwk +gfnqdotc +kjayxeqf +fehitfar +yemshppn +igtczmmw +gfajhxch +bslzmgwo +xpmhmirx +yhlwlupt +nymajupw +tlhgdefw +bqkudizc +lucrhmnm +svkoaqzz +luggfivf +ckawtiwy +eeivawhj +qdmmmvdl +quezzzqa +oimsfsuo +jdvcknqu +aupohqbk +llwsasnz +zlpljtjl +xfylqxlv +zqppxkul +varoizrq +yxryqwso +gsscetca +gcbdgqyo +hsdnvteo +pxtoreoc +rwjdkwzs +zdgofynf +polyntkx +jhulgrnf +ycbzpdpw +bzvdbwsy +vydjbucs +rxadwwuo +ccnvzjak +nombazjc +lbxwdasr +cbdlkiha +sdomdvow +phjnkkkp +nmtmrnyz +nxsvmcwk +hqimjvir +vmjhhuuv +zilhgqlb +gfgbibgg +imxxugfe +wtaffkbj +lyguqvjs +pejslhls +qjnefwii +oanqnnnc +kcjyfwxm +zoxjwxmw +ihmokcrm +uebsbhfr +fxvjiorr +ebjiucyt +ofutlokv +mdfnsuyr +dzviwqdk +umwyaijz +hdqwfalt +qtyrouwh +lkzcrtwa +dtqvwzke +buplmmca +xxepjuvj +omyotlar +ytndbwhi +sbntigym +mphrnsme +xiymeoxr +kcujxcih +bydnchgk +snwdjlip +yljsymtv +tyhbpoab +zlqhvzxl +akbtnzop +xnpjmysj +znhednen +vbcsocrm +ywjajour +ejngbqev +rstykfhc +cbcnoexq +mzlxvxwj +vfdqaalp +nbszzozr +dqpyojid +hfuqilbl +uoackeup +shqkcsmr +jbdasroe +fmlkvsnt +cnomxkvk +unbsfncq +bnzxltxe +bbadfyin +skmhtmhn +xkypwglb +flbfiioo +fzywneyg +srngxbut +qtodeuxg +xvawfqli +nyfmrdsn +rdjysbxj +spmezvvj +ofoivcuc +touzgqzx +mfqyzagc +dmaurbdv +gqnrlyuw +wuppusoh +qgstihuy +uldnlrpi +xaskgwim +djjrphid +qjhmctyu +osfenjdn +zvoahhkk +xiuyatyn +fepobmjh +kmugpjpw +aikpozqs +kmgmazif +gbzlodzb +hrocqadn +noekklwb +vzwhnkvx +osrspxsc +iekmqgua +xeehndee +quttqjav +htoptweo +cyicmwba +jltlwlyy +qvccdkig +bibggekq +kwfwvrfg +eycwlcup +murgcddl +lyukeubx +twbpzoyg +dkcvzele +fozhtmcz +frugeivm +qjbhpdpr +tgkkeroo +ryuvgqgc +jhixykqn +wsebmcrn +wohtjpgu +isflpxxt +xggwmamk +tfwdsrfe +cpjvcghr +fekhexdb +zcwzqofh +awnfiqzu +ihekvqby +rqaqajij +cumouwzx +ccyrflxd +rredygrk +patcpktn +mjnwuefa +tuhgyfsw +mjpxrgkx +hupfjqxo +mgkclcrf +jkmkhkci +nkcrwgqd +apmfiqpg +pxiawshv +ledhpfaz +btikmkwj +jwosopir +mgxftcte +phkbcdex +uakftnbh +fnkmdecn +swrvbjwj +hphskevf +trnpfdmy +odvmmqss +akvqgemq +zyqlkwdm +nbnaqjsa +mbnogzyt +mchaxjxu +tcqqerqz +ayylasgq +zqbrjfli +ccjjnfat +lvlpdjqu +luiabalt +qsvkepvz +dtyobsiy +jkulvrnc +thwjbzkh +vvhrwbkx +fhxejrff +bacuriaz +grmtyude +feynnckb +hfdepyjn +lvsfflyc +xfrgfgeh +vqqybtba +ntlfjqjt +zadauvmg +itukkpqf +mrnnfgmf +hpjqvppo +dshgwmgb +pzxeoymv +nlokvrio +cgcaxffl +dvimsnxu +iczcvwho +lkxumswj +satmovog +ujwknitl +halkgpaa +pnttnodc +adsvsumi +jwerfpko +yhsjqytk +vpevemez +yvjmltwj +vdoeippw +siouxait +ftrspdpx +hptwqlmz +haewgrft +watbdvqz +eiptzrvr +msvbioso +dnjeoucg +qixvmlem +mqquklfq +sszagakl +khfbexqb +uysydrlc +inawynse +whuonlhq +eshukapj +vtrepdxm +pgjjcisd +puiunlts +replddlv +emjyyhmd +aahwhond +laneyzsj +jnlkdpyb +sqxrctuo +wmmyybvl +ldyvqldz +bzbrsdjr +ekxwhzte +gnpqywzz +afsfbtte +ggkbrgds +dlawfrbp +opypolpc +cqpxcfgh +ynmtlgvl +slfmicyv +ooguwxjc +tewmtlty +wcdwansw +ktercyvw +qrgxrzne +wvbhflls +dpfjwbmm +uigmcaow +ejzhkxic +fbewvcoh +jxbtcmwn +ywiktjqn +rftnjqpp +yalixnnw +srdsiwgy +pdpdrynx +ioroheqp +vpvvnmad +tqksxfsp +snzxciua +nrhtoskm +crfvapzk +wndbcxvf +syffkzmv +nneibkaf +unuvhnli +ujhdjkvs +gmyqgvdr +jedfxwje +bcshopnu +xgiprhyv +onibkkoq +riguljez +yodzrfeu +ogbwakaa +ymrltbxa +ourmuhrx +yxwixtuv +ptnxdvdm +oskvgexz +fbigwiaw +xctckzmy +khwiyvmw +qbqbtxpr +kavzlngz +bbklqvzt +rwlzppbq +upirhhca +ezlaqdgo +ieuynchi +qmjtojzq +qrricseq +hxkrsfmw +nssfpnws +tiaziudb +rvskpahe +pplmppvi +jxpyidio +teudseap +aclyhavi +yqafhkyd +drjhcqgu +zvfcfbjc +sqfuuezn +gwtsupqk +czakgbiy +wknfzbyj +ooxwycji +wxymanlx +ewbtpqtl +jmwnxydh +ceqdllqb +jhdbejmt +mazzsanu +uypyqlvh +itnrzbie +miuegdjz +tqxeipin +kbareizb +jgjxrycy +epshhech +oicruxsz +ptxgidha +bmgnvjtr +qvwzlmgq +cvwtdffi +ibzasmru +jfenrbjd +nrkgwvcz +hlmghdgd +emhdaicl +wdwrzocv +spwjcrud +dsgilvqn +phvmafqk +iiihsfff +uvcqgtyc +doxkrzzw +hktdpsbv +evqojani +kzapomdx +ewtbrdtb +rgshzyxq +ltinzxld +cazrrlcu +irfxunbt +rmqcsbvm +gddexbsb +qladhkpd +xlvzpmab +wirftlbu +fxfqjubx +sgogtrcb +zlqxxwfy +djgtbihr +gslssgsu +wytydgje +vmovsmdh +ogyiuirh +mtfxzrrx +kcpfbemc +blreqhel +zjsjqqyh +ciqwtpvk +yjcinpaa +wxbxagui +aqbjqmig +ybaeuhew +mjzpnttv +mevjcrqp +fpmgzgco +gklesvof +jzfssvvx +aynfmwhl +euosbnhf +lcebcalt +kvsuuyyt +ltranzur +nlledtpz +vqdrgckr +yodxnjpt +uyznwnni +ckczwqkp +uxtjgoee +otdoyaxg +lbccbfgi +mhzjujrp +cekkthvf +fbvpuhog +nzfannep +rnnqusey +aiocsiyy +uvcbtfwr +bzqirxrg +qnmfgshq +inyevvbn +wswvhglx +huxqxwwb +fdutjnfq +adajhsjk +ahllesij +tcfawzgu +zfdgmtry +byznvpfp +duunxdad +kgadxmdf +ptfaovzv +uhuvlivs +xcoqrmeu +nnnlvmga +zwrbykek +lvpumidd +hieivrnt +vrwqsvci +npbplsvm +ougzcgty +rzvgzooo +iehafkto +rzspzjne +dzvvhvld +fgkmmfda +xjsnnlmd +igvjrsuk +narcempo +xrhoiugu +ghxbpomr +waxtcbcg +tmqgsejx +dobaxhel +mpzgjyww +ehyfvnaz +zxrdlajd +hfquyvok +aqxxdcqv +vjbukram +rjvttibk +pryxgzrd +hcqpxgee +qjgqvoal +wmbuvcty +zpgxmdiu +foequjps +lmdjwyfj +mhqudwzv +lrzkttsw +owyatnru +gwppbbfb +fvlkdsjk +pwhlvjtb +zgldiibp +sokjzgvq +kfourwqm +nfqoyvsz +hdiwmrhk +nnapsbht +blqjjtwy +aknoauti +uhgowkyx +uypyjorh +blfeioot +kzbukpxk +kfmbxgle +zmegahum +upjouzrg +tkedvzfy +bxwxuutn +rrwxobjp +jdujkhox +jkycewdx +ivlbibns +qjshodxf +bektjeou +wotjfgfl +rjrcfiug +aklhubjf +kwpnaezt +lsqvzdom +pxzvorct +vcxazyzs +xsszjsjq +ydgfsukl +gqxpcrla +rvsoxkhy +rschupcm +ivlpikxi +etrnyvkh +byzymjms +qagdcqww +sxnausxs +giuitchj +qgolehtg +keeskeyb \ No newline at end of file diff --git a/2016/day06-test.rkt b/2016/day06-test.rkt new file mode 100644 index 0000000..a9b9bb3 --- /dev/null +++ b/2016/day06-test.rkt @@ -0,0 +1,17 @@ +#lang aoc-racket/2016/day06 +eedadn +drvtee +eandsr +raavrd +atevrs +tsrnev +sdttsa +rasrtv +nssdts +ntnada +svetve +tesnvt +vntsnd +vrdear +dvrsen +enarar \ No newline at end of file diff --git a/2016/day06.rkt b/2016/day06.rkt new file mode 100644 index 0000000..bfdf664 --- /dev/null +++ b/2016/day06.rkt @@ -0,0 +1,19 @@ +#lang br/quicklang + +(define (read-syntax path port) + (strip-bindings + #`(module mod "day06.rkt" + (solve #,@(string-split (port->string port)))))) +(module+ reader (provide read-syntax)) + +(require sugar/list) +(define (solve . ws) + (define-values (s1 s2) + (for/lists (acc acc2) ([vert-cs (in-list (apply map list (map string->list ws)))]) + (define freqs (hash->list (frequency-hash vert-cs))) + (values (car (argmax cdr freqs)) (car (argmin cdr freqs))))) + (displayln (list->string s1)) + (displayln (list->string s2))) +(provide solve) + +(provide #%module-begin) \ No newline at end of file -- 2.25.1 From fe604327c17b89d776b45070e5606f4c38bf0dad Mon Sep 17 00:00:00 2001 From: Matthew Butterick Date: Tue, 6 Dec 2016 23:37:07 -0800 Subject: [PATCH 15/43] start day07 --- 2016/day07-input.rkt | 2001 ++++++++++++++++++++++++++++++++++++++++++ 2016/day07-test.rkt | 5 + 2016/day07.rkt | 24 + 3 files changed, 2030 insertions(+) create mode 100644 2016/day07-input.rkt create mode 100644 2016/day07-test.rkt create mode 100644 2016/day07.rkt diff --git a/2016/day07-input.rkt b/2016/day07-input.rkt new file mode 100644 index 0000000..641a03a --- /dev/null +++ b/2016/day07-input.rkt @@ -0,0 +1,2001 @@ +#lang aoc-racket/2016/day07 +dnwtsgywerfamfv[gwrhdujbiowtcirq]bjbhmuxdcasenlctwgh +rnqfzoisbqxbdlkgfh[lwlybvcsiupwnsyiljz]kmbgyaptjcsvwcltrdx[ntrpwgkrfeljpye]jxjdlgtntpljxaojufe +jgltdnjfjsbrffzwbv[nclpjchuobdjfrpavcq]sbzanvbimpahadkk[yyoasqmddrzunoyyk]knfdltzlirrbypa +vvrchszuidkhtwx[ebqaetowcthddea]cxgxbffcoudllbtxsa +olgvwasskryjoqpfyvr[hawojecuuzobgyinfi]iywikscwfnlhsgqon +jlzynnkpwqyjvqcmcbz[fdjxnwkoqiquvbvo]bgkxfhztgjyyrcquoiv[xetgnqvwtdiuyiyv]zyfprefpmvxzauur +vjqhodfzrrqjshbhx[lezezbbswydnjnz]ejcflwytgzvyigz[hjdilpgdyzfkloa]mxtkrysovvotkuyekba +xjmkkppyuxybkmzya[jbmofazcbdwzameos]skmpycixjqsagnzwmy +zeebynirxqrjbdqzjav[cawghcfvfeefkmx]xqcdkvawumyayfnq[qhhwzlwjvjpvyavtm]sbnvwssglfpyacfbua[wpbknuubmsjjbekkfy]icimffaoqghdpvsbx +enupgggxsmwvfdljoaj[qlfmrciiyljngimjh]qkjawvmtnvkidcclfay[bllphejvluylyfzyvli]heboydfsgafkqoi +ottpscfbgoiyfri[iwzhojzrpzuinumuwd]orfroqlcemumqbqqrea +zhrhvyfxxcsdpris[xdqecoqujrnqbgla]bpwibmrkcfbzigf[rlqtqykdltcpusvc]ybtsglkxrhucxwv +msaebhhuxyaevahov[skkhuecthcqtrvtunw]bzlvljpsapsezchptjs[lbcxoczqbyysmha]zdqlfydjdctfnuetghr[owwhfhnjmpekukafw]qqitepzwooogqifl +jhdfwesnofrkpse[mkruficpgplktbmoo]mnrjpuvsauanolvzhym +ucibfxxivatgxlupp[rxlbgrqostcioowo]faiimhdhgpockadenua[teomupxzwrernokhyud]ohsfljkyjvkfzwus +gzxcgjqdbyvfndfpw[ypfsapvecfqihnpuszq]mvwxgfkniekgqzqid +fipkggpfwvgrqiwosi[itadifxotejgzkt]szwurlcbvffhgse +ketltdpowbxcusrcua[oonjssgqvcgwvlz]otjxgpizqfpcriuco[mgtgmwcjecomtdkxdev]dnrecyeyhqcpausqzsw +lcototgbpkkoxhsg[erticxnxcjwypnunco]notoouvtmgqcfdupe[hubcmesmprktstzyae]unuquevgbpxqnrib[egalxegqwowylkdjkdg]spqmkzfjnzwcwgutl +nesmourutitzqtolwd[rurfefjvljejcufm]jagkqdwpkefkjdz[cctohikipqxxbdjxsg]badmffkslhmgsxqscf +vvbwenaczgfagvrv[dqjzprtikukbikojlgm]bkfrnbigwaitptbdcha[llnwgonsrsppphnnp]sqozspzzfbeigmw +jzkzjzzghblqqme[fsqzyykcotbavruyp]vjzohzsunrevhmpi +jlngucjirfgdgorbgb[nvvkvebcjahujrwjmy]cfnlrssuthgusytkqt +kegsdcxndhtlskseb[zbtcngduxclffzlw]wrdqbtrqbcpbeaiqvx[svsyqhkrryycnkceq]ztrawvffepndijceeih +imtafeyfivrcegpagsl[tjzsewuwboushjl]mtnyptormlwiijlds +sblhlpnuutqgtuvlc[jlkivbtbkivklrnr]zkzcykzkyjxarepzvrr +ojuqmcidxmsyjkhuh[gsegkxlimzuyceo]dlhjiensaurluhul +sxkxluastorxmnd[gwkeczwgmamhjquth]yvpdadteadabxgsplmr +cndxxzfcmwwtcibgktm[ntsvmiwosuvniztv]onnfaenxutizlbxdk +eqiwaqxxstamxgzc[vnomzylvfpmcscjar]rwdqevxpeqvrmvliu +tvzbzkhvpzedqtp[whzeqaisikjjbezzcow]hqbizwaaffwbtfglq +ajwpjiqawievazmipkw[mgfhwrppaxagfdgfsa]iaqcnovhgearcutadns[anaukyaljeflxdnucbn]bhqcwrkeolrhwdih +neakzsrjrhvixwp[ydbbvlckobfkgbandud]xdynfcpsooblftf[wzyquuvtwnjjrjbuhj]yxlpiloirianyrkzfqe +jugqswdvlbaorwk[dfqvlubdcigzpcz]aqhybhnoukoyxuiw +kkkfysfugyvqnfvj[ahhqkrufcvhfvapblc]jfincvlxbjivelqrs[mpoymhslpyekjmy]eicbqlzecwuugez[tsqmqvjiokqofbp]senbbdxrdigwcjwik +ogiiiqaxakiaucwa[ltdchlxwnzefocrw]koxethzfvlsewbqdt[qdfqgtzftqpaxuzcruo]fvkgjcglmmxqnifv +epmnxkubnsnyeeyubv[ydzhcoytayiqmxlv]edmbahbircojbkmrg[dlxyprugefqzkum]svdaxiwnnwlkrkukfg[eacekyzjchfpzghltn]ofwgevhoivrevueaj +vvwvubpdeogvuklsjy[psnqcfnqhxaibnij]fwzpkbdgmpocoqp +pjdxcbutwijvtoftvw[zkqtzecoenkibees]llfxdbldntlydpvvn[uaweaigkebxceixszbh]xxlipjtlogbnxse +zmnirrxetiwyese[cedxmaoadgjjvsesk]nuisspyclmncqlasmuy[zxwlwmbzbjmvubgcf]hfqniztoirmsdwz[zlffqhttbpehxoabzhx]upmydjqzzwefvgdpqu +lwvsssgvvylrvqh[duxjrrqkzchbpvnmm]pckmefvejytvzavgzgc[dcekfwnrzooigwio]pmutxfiwfowlfnnggl[lzytuzirtzgwhkz]yzgxtksuqrgvvgfefon +tpmyecqhqjjpertn[qomuwmxstmgzexds]ftvqqwsvsrnmvpg[vtpebuufpyieqbhuu]dorortnekxkwnploro[pzajzflqvbkhautupl]eowpcyzmyvnntvzmvx +foguzgeasrkncbny[tlyweucylxkswwxb]jtzjubgewwhlddar[dkddqrpwaqvlhdp]skkegnatbjubqglwu[pkwscrmgvjzarzb]ibaagrqwnxblvtkg +ejgpdxesfyoyaggmymi[axfkdoyoqkpkhusfwe]pnczsmszqevkqiwlfc[dqhzcqjzpgnoknmv]ldrjdhopfyctlqtn +gqhyasteoryuofc[bhblyxlbiqtzzyzvzqg]dtvxrlkyuwxttyw[qvvzvuzhkemwglh]bopvfttkwtaeckq[vvhkkgrddaoxnzctwar]gsscsjuictekguq +sviwnvbtrgyydtadhz[ipjrrywkoxwuzmlrzd]kcxruwyisqvokporkub[tvarlltnhjmcuvvcck]raafszljrhconjqsqi[snbxmvzrkojpjybkgpi]ekoeuottccqbxrvpkb +vtouviqjarqwnoexuy[lzxhegzxptktueqo]azfsikzbwiajcrhnas[hvqxgtffjyyfgsjowxy]ddbmpksrtghvvypev[eoepwehfavxzwgt]igsulpdhrevkghzh +fucimprxzsubuuzmk[umzezmmnkfzvjlela]qxzdlcryifsinmkgeha +kauzjbailyzpvtji[hgeslalzqgpdkpuvomw]utsywinellykvmuawwr +oacbdgfaszolybf[hsytrkjoylrkkduzfz]bmoelqhppaxshmfjl[cusgbbuydfqtbbmsju]mcftwalxlvfvvpeu +ybylybngqxxrmplf[mybpfztzwnisfpfgqmb]fsllclehoezgthek[ldxhvhwniqfpqbl]ebybalwrmrqldukb[okenxoqxjgrenrcjd]kluumgtqybryflqi +mufsafgfxiegfgf[ydibrbrmiaulexjek]ouwchrlvilmygbuppjl[imyaxsiodgjteppdyy]ugondbuqnhjrzzzn +idihouejjocbahe[mclnirhxghanatge]ubwhxskdzgkmyrp[vksyktucsyumvxoc]bregaefrdlrgmtwt +qnsqwkqttdevlnzg[noyxiueharjajsalnhu]heaxmujxhpgjddqur[xnqwujjeasceovnroiv]hnrnwuogebatnfsa +evruuxfhpivnmknolsj[itpsnnhbtrrbllsbo]gefodpceljlvwuahz +ebddlswrvbjohtnkyip[qkssdudizhcoaazvyow]xvnqicorrkjrnxixp +bbmmzbebuexzmtbr[tpzfxmwgamhaikfpaeu]kraaocehdtalyjrf[zzqqtjplepyidohpvx]kzehgejueimxlqglfj[zgysopfdgxtokkdxwk]gwcfaflybmhdgoxjq +xztpwfipuczrtoyt[uwnlokmtopkhdtemm]sdfmvgvctgwbdjpmvhh[ozjpkdigpjqzqgy]yrkwokmkrevauzroaqm[vctyupmildfnnjomue]cvagxsievhrukgyqzg +jpmvqhuabqsvroxgmyk[toieqxrazxhhsbrm]wdwhoqdddwdacuo +mlaqnefjmwbxeetyxz[sziklwesunikpiqjark]iltkcgfzmhvusdnlr[bmfprkswemctykvio]hhsmvppnztgipxij[kvlbovfklljaumwmy]mdpaiazrlputabj +czdgmoqwzhvfnulxo[mlbkytxjhscsxrgchri]veugcvavrzihzencp +rbjtyudgcswzezr[inlznakcutfnnequc]uhisbxotgqqtzionoq[hzlgqtkpeubvudi]qqsryagiowmcijbejhr +wkvwdohwocizssun[kimsjrwwfpilzpkf]ruqhrplgugwhmnn[iouhwbjnqzlqyewxof]exjuguxwmphfypvsivl +bcnuloxdfhnyesgtdky[hvmgfzcjhhiiqino]sfipughwbebgstwrua[behnamammdxrnnok]ttpbmbflilacfvwiwd[sosjbmmjygpbfetziv]qcosdgrbfdsgqqrlhym +fbmthzppxydfxiipo[zsyfzbueqoaoxeueado]santekllapuywlmwjkl[yfsonktbvuyilcxf]xjerezinsamruvn[cceqpogyrsztadfap]fiivtuyynltqoypypou +lfjigofbbnyrdlhxv[gfblbnmkfnpxbio]zeqevpmpjowrxtw[mofuoyllwekzcjtxjhp]lnzewigzwruzlbjh +xjgdfbtgqmgazgvtif[farekeencwufapef]dxjltmtfxuiydactuko +njaolcljynwvrwy[qplxbpadtyndosjcch]fscxierutuanappsqiy[jftravlojauqkmgludp]pkfwxpdfcrjrmbucf +iyotvokljqynxnpjsfs[lfwwocnwcwstidfpb]mutsdjbqfruxxprzrnk +kpvxcagazjsxgagg[sabugyxucglnvcjb]uvrdglycowrjddy +zclgitkurpfdspcbk[yedvkzgbawpthoyn]dhvnmtxbrpttrdrio[drdahsrphffqsigrlmk]ykghbvcdosmtcgxdeb +rkmajkdvlbqwtnuanue[brdlutivdnfekggixum]pbsgstnxgghrygqwpf[rlqzaflmkbvvefdoc]jhbtzkodsfglsaow[onlllmfziapizsd]usvejrxmziulunvjux +jqlketojwcgvuce[ftcxdqqebijrnfzjriq]ucwgiavuxrxokmvxgad[zmyusreluasvwgzngmx]semjnvafnqvwtvkimy[owvczdccmvfohtbijfu]dmhbiikbzcualbbs +roewzhbnwyvondnn[ejikyjgtzpmepihnnl]yurjuztavzqkxqlrle[mbjcyqrzfuhhsnipzx]fcrtuzhrqorxrdmrcn +ycznijylnnqwmqzdd[ycnztjgxgyapvafhwaa]pzdtesugxpchhdb[sdruhgxaqpitoxlncc]exnhjwmnvqmquvclhu +iufdjzqflteyvhrem[eqiluhtbfuegasby]ikqccaxrpnjjrevdsev[wfluwngzffaxhaflbf]wnlyrgvaxzsmqvc[smkdicgtwwwxmdizdi]joaqneodtgvioxzg +pddsupswtnzture[pehcqhpltqocptr]ymzrvibfbeasccxh[jwwhastouxzmyhh]xsllfxcuzbtciegzcd +rnnvfdyavlqnvwze[aistrderxrrojbsspnu]hfkzgodowrlajmmeq +qnebfycqdylighjpgo[ablnwbutiwhdcrmwbg]hnqeseogqdsdhith[nmrgaeenxhizhoqper]tjxbhutvqtjzpyzh +batsftctktgebkvzv[rovosiyqqpafttgdmoc]ynnztvhekfnexdcuq[lnevylboilqebnkf]udftgymwddomqmy +ybrcyivzafzoubcj[crhigqvjszwqflocc]aesdfdfgzcnyxsmzg +oskvnzcbuyaytyixp[ypctohskpfoxhpydwpf]kgkbxhyfncznsar[vulxrgolpxlqzkknzva]ightbuekpmjodxzfky[nyjpxhpycxjrqdno]jhvrgxgfjwarwzkmfj +relqdjmixussrbijgqj[mfsyrfbtjbojcesuyw]wsckbuhopguszeh[unyhvpqjxxgfbgyf]dddjalolfjwliasyezn +xahbldxnvsviywko[ucmjsyoejvcggbtx]prfpnzzlexpolsgsmsf[bgocwabottcqekxs]ijvpreqlfejnqhfbi +qtcopopjmmcjlyfrtot[dmnfjowrhqtqhevs]pfczfmefcnnfbxiovzj[exoentzecnbfjsy]comgdcvnlyaemmya +plhhfkjlotvzupi[ilbcfjbrxuildya]uuvdzteoijumhavq[tcuesohvzusidbgpw]hdsgdngmjtlybnas +yoifccopobbguvkytps[xhkzrdcfsyhpmuujbt]ocidhllwycinggwu[kouoyzxtwiwknduclv]wkokzcbbqvjxtubqg[plgujclgyfmafflyurt]rpjrpxriaxyinneajvy +jbmiqrqkpbjasqhvwcv[zlyzpnhzdtqiorod]dkigqgjtzmpleja[ijenfaygzeceopbmxks]iwzcpoekmitcckbxbzr +zixveaipmutzulr[awdlukrjbyxtssfksb]hreqwpgrawaqwtqpt[bykxrwwuypetebhs]xhtujigporvkxqot +cldscqwnyjkrzvyegsf[zwsvoudppoalxeja]dbqrfscekpmhmpoellj[xxxpuyedbyuihdzdf]bmtfdebklpxvuacq +ohdqlkppqasvyrkkjm[hevshusrmyhuyyo]qbmrotalialbvje +nvwdnytzqwrugam[pflhibktydncffbnlva]lguqdlkusqqwovr[bgufsrqjnngbwxnhuco]uanvcpxragayfoj +zkvrrzmgitfjnit[gezdzgcdvxdkxytcq]avznjhxyjldbqpfoua +mmyxbuoieontkaxvnk[lijzkcghkhiryhceqc]zuouxoicowwkhklyp[baqxxkavhepnpepnj]jcdekzxrpfucavdq[nxrhabcrumlshoitzba]httcbsbgoyhjpkv +hpzoxihsevceefdjv[nxgkyykcfpjwtlz]lkszzbxqdrwyktr +djqunzvzcyxmjqhy[qapfiyujulhgqipfm]htqbtlhlsqxnjyply +lilhndsdretyqjojrn[oxrhvlpgqiotmvruvh]hgdlazecfzdrmegmnw[alxxixmnnjkyhrqjgh]mpbjuwwcyhdfxynyk +fcrwgutcgcqizev[nwszwhfvqtdhrymgqf]iiahiososrpdafnt[gbkrardsossgcvu]fmudukrxbiqyrpi +xpcgsvaeydonptb[ewpsimxlttaeoth]gersjqmmdamhikqtv[sxyvukeegkkbbarjknr]sohijvshdnoawujw +vnjkhbmpsmvxkdt[yrpltayaihgspvnjxb]ivhwkahhjjlwzxfpz +ofoancxlupttxku[hkedaqsibrvtvqu]zkssllvuecmgtqvs[eklsqwgwuhucbxykl]ioompempaewmnco +nwviejwlkyokiqhuvo[csddbtlbfdwtakxlmss]fxdoqlbdjhoslraj[shasfhtvpcsajdsmxfp]errsdzqcqzbrfnkeux +gvmytvlyluvnmemhgjr[bvqbhytqwpyemefwo]sygljhpvyjnuxzjqy +zootaoveazcrmtbda[qlxlwntntbkjtkqve]vffdsbekufzemgwomh[vzllvqlmloffyyldfh]alltnttrzqrchacoiqm +ksbuxsjkmtzsfsy[shracmzkycsuqrei]qrmgsndwzkqhtojsn[innhjjhyfsffgsboglx]zhwuwgyrwmucjfii +dagldnrnugbavjwiiq[vrsiyprmsvuapxvn]piirprosbofdwzuuhn[epdsrdcpgzkkzdjle]jylrtjltlmvazfpmh[rqqteknolbyzykdysvr]ieejzvgtumekqapi +mtamroysxwglblwmjn[gmebbprtzaogucvyzv]tjzuzqyyfuihjubuzu +pcfbudkakpzlyou[zznswrvmytntytfkt]kvudoarqnyybzeddvn +moelqaykzlstyntby[qmpxihbeysykajdo]omqcjgdbuqvvydd +ddyczdjdwnoacci[wpgjlohduqnlrifih]dfwcghvsdezgdixnpxe[ohhccenoirazgekq]lqtssqpzgusrlvyrd +ewirhlfcfhkqbvmvi[ixrorekrimzzkckpel]ihyukzubvqdpnmqpgu[mbtybrusfomfdhlg]ucrcmbvpnjbghnxdo[lyajfieycgiubui]llelwgnuopqhjax +jpltuunwbrijwnudg[ejxyrxniclwnqxxnh]krckhlysnmqahsz +hkdpdpshmftvxob[fsdhonsqalgpydpub]dirxpfxsxhpxliqg[tvbhlcqkymtbnytjp]xuvawokttfililgwgue +mdnmunbnueofzddapl[wxfahokzfixiapig]wekvqzgvufgztlgldh[zwglgerouhvhtbrdib]xeogmvaqszvkdvxv +mbqnuqonmkxmczjo[ueqnkvfdskaqwesufs]zmoqtlzfcwqaxdnddkk +qoaqjkdsftjstyjyqd[fyvizziweplccjt]ryvpqznfcdvjxuu[syspurpgsonxbbdrcc]vvedpafqmoeugwuize +ctdgzypcrjqxirm[ouyjhaohcueqwdez]kroowbthpspnnzgzuau[pqijczlztofszvdzhx]iccbpchemtflqnhdrnw[esvbnyvlckqirev]psrquqfxaotuzsojbt +rgukaurlmsyzovie[noclopxqrusykxpix]zbbopbxzogbeppp[anouobvemneuuztti]rpnbuugshsxxbbkhauq[zpqywyyxjfabzyppw]ecdrhvipvzregbgl +vmbtrbtoajfkswgy[kailajjwltvmwasynoq]goxmpryedtsrgkx[hljqifnoadoljqtub]xucplzmspnbxvliaap[tfqpmrhbakiidoxwa]iceqprkydjgouemqsmf +cvpnedbnibipftign[cigxthfejgyjzvspaam]esifvgljjjbexwm[uspsplcqhomoszleq]qnogejwqjdiznyfellc[sszzsifsfavntyghfs]btswodsrhcrrbodmtz +lvxwpuujqxypkhqfymh[wtizujakvxzrqwpols]jffeswrfpnhhakyhwlz[lzyloeveicgwixnvdx]uvwhpnjlszclssbf +noblqdnmgtyjbxjq[chxjibegmcbmljibes]edtgpajthcmqgpz[qafbzkjfqbjzilzh]aorhwssnugyflolh +hunicsoijinxshpfskq[lniiseazhvpjiyg]wirqusdwvaiyatimhx[jntjijtppuekuvvzz]mxebkmgiqyfaglow +wvzgoeqwcuudhjlc[nsjqegpxfiwvbtyuo]hehqjsarzkbbidy +ncjcjhyagdubxcibe[qpddbjyualjarnnpkf]cizleaqaaewqysxwys +jqslpqaqntewoglud[xtzdawarqxbigpuf]qnxdyobxvfsrwoaz[snegbwbzchqcbavh]kipasixtzznhgkjskv +hptaschabsnqdgmuzoj[satvzxkqetnonungbjb]gqhigqimupvihhwy[nejqgulbxtzfjbjlya]jywahuqdzrufxenshjj +sjgpoxxqtfsltzk[jqwzhblplilweukbso]tgorxisfymrcgyr[tfbebfnnljlpcfeps]ahpjfbonoajtohthzri[tdgaokthtdhxpsg]ajcykosmkhftnrjqphg +tnwtnvvrpilvadiy[taucexvsohfmaxd]cfhrctuhgqwjgtll +xzzmvrhyhwvprzczwz[lnshilvbyfjqgff]qfkoodzijhqkpuob[iyyvvfibosnuwlov]fhbcvpuqvpxmlolhry[osdmjplktygtobvt]msazwlubhinqvyfh +wanhwievduqinfwlcou[uyalesnoaqmajcc]zbdddgzmqprwiia +dfovljmseevxcfarf[enpclythxgepfzqcw]wechankwzxxkkutq[mvzawbhttzrauulkxvd]emcdawwiunjraebra +sylgfxqcfrqgeeuh[dljwdydnbuddmtdgp]fhenkxvmwvdyaukaxa[xcdbxlqqfgqtjyhoi]tbnpjbnpoxxaxef[rlnmcnmntjlitsmn]vkculrpgrmqsrayre +xexefhsfpwtpxuygp[omxfywhnlcapmpalz]foblbhtxieggkgpcru[lscwcbkqvexwzzbri]ipjoiumgoyugfzq +hbeghglpgqnwpxqio[pcujpvhzhghnyjkmppe]jwcnwmqwctqgoxpj +apqmhkpxrtrfwulqbq[trthojavkcrlcgc]oikizlfqpukeudv[afgmhbusoqjubra]ajbuhxzuhecopcxm[lowqlmwiyvmdojjla]jrrhjmopywkqrhlgicl +dxrqnbrkijtvmkwq[dvtqzljjbreayipqgp]erhjjvypeyramuaab[cjedbzbceteuydrps]kolgelhdemrbeviu +gwjakwyuaxixflozol[omjuyjzbtditgoznip]nqybdawthoydext +lcdwaahhbhajoai[cszvgduipwduhgmo]vpsgnhmtypusbgmhwnb[qitqpalswmqvjiu]iyjenmmobfasnzqefci +tkxizzrgmsxvmrdawsx[edbhkciwrqmoflyang]nbuwbbspldrfhic[guhvpvocfyjpwwclv]olxhqqgrylvzzqxxd[cnhwdegsxurungopo]rdenofdlpgilpiuvmr +wkadrydzokfmuiah[mihkmnzzjladulkvb]weqzktdsbwalcdijda[rejzrqqdtbvrwgbgojt]ggruyvfdesfdwenyx[jjyyleykqeskpfmzl]ssqauxmvzygppvncz +djzzsqykcfbhgfoq[frykddayaohlxmkem]kawloxhrgcpronph[xxkgjvdfespwmnja]jddmrdznkctmsmaxih[uxotxlcobxfemckshh]irmewesnknuknipl +hzojrovrbmfobhsau[itboujfkrmpgjpsvsr]qgczawmbunmisxs[dtrvnzrayqlvdpyzbuy]wrcsquxgcxpvbwwzlqo[kqbfajfleopglhfui]bsoomwrdifoekal +cntxerwyrvbludhaa[fclfiyjfekdtavmgy]lnvvlflygrewrgswx[juijxzrpwfrmshbttg]yjeuhzyjbmbdslbdhf +gclzrtvgfbqqqcl[fdkwmnpoansxtklyusn]ywwzqahbabjbcbzd[kuiejkftwfuzmjbiify]tabpjhaiwzcdnzvof +hmshguykeqstxgzs[fsnsxtrvkdyrlek]rkzkooteryozbwmda[jyjzddadewtuaqulp]gtprcoocgdsfbtduekc[llfoixzevsmexhuitz]ppiutxxuvaxhzgiib +ouvpvcchazfdcljaux[kxqnkynylosbuekz]arsuffkkpzlwuibqd[lmmxhndkoldfbtyfpw]nvcrjoborzogjhgwn +ojesaevpprrzqaksixa[ykxbgapdjiulhmxgihm]nrxxnhdwodfgqoeproy +vzbltcugyxvtlxqnkxu[fcflcasuyaljgewcynf]azqaltkfsglwgkeh +urcslegrolaaalf[grobiijzrtgpntne]uhpzjqkslgahpkehix[prmevyrajmgfhsjpag]kwfhbrhzkojqazxjocg +zwfeopovkggasxxb[fadbebqmbxwktwfdeui]ftomtaogfvgkkdrkc[rdkdznntsigigjiv]warlzbzbnfbjjsh[etjzyzfdjztsfsyi]dulnqfxjoewssxgkfb +nvrsqzcyguparczn[ewfmgkjaibzjoiex]kpooaykofbtkpawayfh[ssuzuankcdhqvold]qaeuwxgakqvcugn +rnlhwrnjgxwleghohuz[nktpaaaciwyfagkpqw]yeyzojziajnryse[bmpxxtaljjigfiv]ojzukghfhfhykqrcdyy +doqbqcwjoldvwtws[qaxghysnphejfacrnkn]iqyhfkjogmrkjpk[hfjqxqeuzwywwmnzj]uzhpypjadzqcpeibcgc +kmcmhdptzlhgqui[cpluzrcwihnwxrsdoj]czbxutspkzdwesrc[fccnqmeaqfmxtqqng]fitsnmdmyzwsifevbat[fxhgcmqhxrudtnleoww]yhxgwphkxlzhxzjnvcp +tmjpplcwhmsaxav[epfnxqdzfpxmaztdqn]vwdoatnafiotogpsxk[lydghxujguhqcjqtbbk]mtvqsesoxvybfrxyoi +fslvgbiibdkhchajyb[zpbhqrokrbfuqrowop]gqqzoqvfsdfcjcdurrs[xhqfcfytbbekivnvod]jxjwuxivnyhppvfhaol[evfnrmrjnnhychtpv]emiyjcjsnojxexs +gqaygymjihevbsps[iepworrljuepufyvne]fzfjulzebpsphczby[kxaohggiqnjpdbf]bsjfluhncewudkumaxj +mvjlhovwivdanexv[iaphahshtwtnhoeoqsk]syolycabjeiwtwtec +ikhcujftlekmcnmcy[ubsoslmlaitakaqb]ruyiqnoobymxiim[ppxtpuphuisxnqumd]qxjhzfwvixjjmfgaqej[bdjpilcwzhqphfumpny]itvjttbjsbfmxppif +xhemwtnqvfankrccdtk[bbjzsytqxhxcgtedp]ksfozdggjvyvpoyw[tberajbwhcirnenwv]juojuogrifenjsbldn +bczvqdwkurvezjxgrg[yjvuwvfypobetomm]vtfujjaergrizoots[snwcbtqylvuhnxyvb]turadiqlfjvclpvbweg[mekdlejerxpllbf]bgkveafnrceyxufsqj +duqeascyrgxyhlspebo[kzimyrleaopbbwmbi]xsxqyleqvoscazopte[debdbibiuaosfdyioum]vjaptdzpitqctukwhf[jffyamdmvkrggbe]qrnqpwcdoditjixsc +cuxdugzthpcubgw[qjvtzbgagyebkobkhf]tsbcghahxswropcgj[yenmfdvoxlqekjsk]kjdmhdgepvdoovzvg[mafjriyxqtotmhxgvty]mdyayljihzqxhiga +ehkhfoqcdkpyxeum[xvjaglxwocodctbzj]osufidsaijsczhtfg[rvmapxxierwnjkc]pgshnzbphxdoaitou +wagqtjalswmbehwmuwm[oarjxyzwyhxzhpgilh]qapupwvuflcoryf[hmqhnrjiahzdfbaz]kuprvbaykjhqagnl[wfxatijeapdinkt]hadtvdjbkdduycdut +emfkovpbnkaxykrmwjg[otoxyqlkgczzivgdt]nsvpzdvcbsvrbpo[vdfxwihznfpxlbsju]xbcniikjhgzelav[opidnljejcjawbikt]gedgtkiksnpijteviu +fxbpujpvuboflfip[dogcwovzlakonhdyww]tkzftiqvyzumadasjtu +rqtkvmbmqtdrqsahsdy[dhaassflbjfdslopp]zetcyybbahysvheand[uncbkqyoidhvxjf]mxqjozeotsollwolhs +pxfqsysywqfsmername[yfcktnozutkhniqyp]tjzzakrnlxrtscena[bitenzjdqfopqevroqo]zujogbgemdxiaven[dtxlpfkysfcivyrxqt]fsgjjgzltbnlvdojqvk +guclyozvgpvbuhktwbh[qmueutcpmdebodbilp]vglsdvkxogzhzewjpl[guoovyobczavohc]jdguogegerfiwrxthui[hdcvpajqgpsoxuoawmz]ztwnqkdjnnwazrdzpc +llcocydhktglycn[aqvpbqqcyyjlfspio]bfwtqbvqbywnhvn[bdkrsfpiokzttiazuaw]kchhszhegdhxega[mgfuozyxaqcxmillwlx]mzcerkylhvawvyujx +jceiyppxbreywlqlc[fizmzubzyefdntbmd]bmholmqrninpjuux[wkbshvxwlfhlrpkbk]bnqhoqtiqqpsibgykwd[ajvhuevpxmsrjrdwt]ejcwhcsechltmxlycwv +lhzgbwzjykgdqwj[ksxhpuzyromwycwqtmi]fqkgkgvjfshsltg[ypmdudbfamagwadtia]nxqvzfdgxlwbbkrssc[zqmfrjzhsztnqbdgo]dvzoywqsqizywigsqsm +vvnbnhvgcpquhzbarub[ufazesxvliazvkcanib]agtuglmgoxupumcispr +mtpdvvydctgradgywc[mtpimzrgtmnlcge]vxbxcxjkpticzboc[ffiyihkovkviqjifrnt]yhxctiahahicybqti[latcrvinlucwkxhmc]ajivvpmxwiypcjtevwh +dpnjvkzcoyyzmgvvs[gtjdsruwdhyukkx]qndpbpmhkdngjmab +raugsxxkqxpsglitbj[ncskiewbnqnhxvojfx]qnqtemgvotsgnlgxyb[exshfmlaagkpxueykd]vgcwastyxsoddgu +vtmkqugezjlfpad[ljdytmxdmcfjvqus]zwkxtirtowwwoqybn[wwbggxlelxpmctsyio]ojizduyxsklhvogj[wkjkwbzdmusrmnwuq]dnvercuduocxwzzqvc +kcuaibmbtowdpkk[behnytmljmvkfzjzx]vwmeazoaavjnyopedp +jzmgdckgiwbhbits[qapkyzlxkcinhakr]zymyymfbxgiypcn +kbcfgsoqgqvurokxs[ygvbgzijbgfeylxvl]xsjucuevvfddgod +unfolwpdrbsrzgoo[xcskhiayzcpeegqfoe]sqhinsvvbcdboctc +yclpzeggejjnvkssg[jaxstjrzmutqmaqq]buvqcwkayhypitxnmp[hpxwubjyepaqhyhud]qhqlpdiqdhhgffsgtqw[ijhwhbvlbixaeywd]fwpyiwyrgoquoeuicxp +jwgenomewntwyxiawpa[eqcukoqwwwaruuaeoaz]przxcbqvsrozygtcyl[krwnmcxmgcgfbvkj]pcifuzymidokmsecl[wetuprgdinttljgam]wiiixvydbevhtscp +vzuukbqyqsivwpeeygi[bsfyvyrjgidexcfzq]wyfowikcidviqqnzcw +nsvfdglsbfbwlxfpfs[hdfyjgnwdgeropdfian]gznlvhnfjawhokhugz[klxeguqtsnydunmtj]gaauhesdugovoftjb[agqwktizuxyqgbvt]zhbzbgfwnkahvueja +xcnkdghtgpxbfefay[iekwzcvfquaynjpflf]rfmwtjyxputzpsgr[rxbiyhzboydmvufaz]vbibxkxeazvkbzpnrqv +efxnnxokdpeqbimle[sygsnwvurqpxovmfv]bfkvfubmjyasmvc +pvyunauqgvtigep[ypayrmkixxbagcbawlh]gsvqfsxbquttcaayobo[cwanbliqbdzlcur]ckdwzoeeeldqnmpnzta +uaxiegivsmmvixygiih[bwxhotmjiqmiffwt]ifggldhrjitovzh[wtrrvwjwudasapqdal]zegculmtzsyaxytuhih +hvikzocatynjoxxzjrr[yowwrajfokqlojraj]gvquwhdppqvtcvd[sqcangyggkdiljktl]fpjugbjlanzohbvfylb[fxdhqobssfucfmeaz]mzrtcejhidkqkpqc +lcgelocktqpqhjgon[vmfhipgnrbypfellki]bqgdqxjnlynzdjogpbk[ppgoudyairolaaomp]utxjqpmjzchqdhz +mtfryyrtmzzlooy[qltyhniowpskiqmolx]nuxblfnfrcqtjqfbzi[bdslgcpqyowecpp]vlxwrojvicfzzzfb +widpcxggzgbkofmmtkl[bhvmncpisdisugtk]azxcnslcqsbtyufnt[lqwxnibqiwuwzwkf]iqnupikuhmhvvhf +amceoqorrqtczywlb[znieihkpkxkvvqxk]rmoexicvufbvzrcxisb[nrrbalocuvporahypgm]sapytlndnufcmsmnl +ldbwysbqqkcizwlkqk[kxbcvzlolkrtyzou]zsqlgwgtcvtkmrc +bejhbhwlnmysyqgzk[gombhcspwwomoqoprog]zgwpzkhgbgaveqpe[kldisefosjggfqzo]eiyzwmdoqqsrpekrs[yoblfghskpxbimnq]ewghiykdpitzdsydl +uxdgjfelalnofqouoee[obhlfmbrcdwvtgs]hgtqhblpsfyxxdmruq[amhlljtgsqandpxg]uftttypexliymsri +xwcoczwpeprblqvdsze[fcqzupldpqdpibi]peaetflnafpkrqz[aibobqkhvfzpwaajxj]mzlrkrfslubibbu +fpofuivhqvybvczq[zbhaursvrqknspvj]zlovzphchihqwko[bxcpnqiijtjpypqk]hmdzgwlnervibxuz[hxskzadaiwuhkjrvia]fqtcewytffzarnbdid +kqzfapnhrgdwnrxtwcw[keiqggcxbtzwrcvrvl]itnkudvtbvfwlcvguev +folpqmauykgkbtb[sajzutpltmpwuvzu]qgkgeonxzucthfluwfz +qiniyhvlxrpcbscgf[mmjtkliysclrogfxsx]snxccrqkeuqchwfi[wbbptxydvrbgemquc]uyqttlcltqvqmhu[sawrjbeubszmuwsjuj]rowkyiykcizmcgha +xafcvdeuuhyxixxn[abpngbyvpnkmojksc]anahdcroysddmoxf[tasztimgjqwkkic]fiycikeddfoyafacbfl +fzmscbkkolwovgnjeb[qzholetigkxxmnmkoc]ffztdtemtdnustwuu[zjrqslegqkywtcaqod]qdtqbyfhwehdezedf[qqvslpytqtjuzrkc]knqvowafliildhqxgex +hicsgtpdpugetplbufu[lzlwcptzokxrsxtrl]smxnwfvtzttcsesdu[wmucgluptdavbca]xggqqcfaxxcagagkx +hwnfzlhdbchsmjwaytr[xfggqnxtnpdjzuyqm]efiweqzxmsxetmyjnhc[mgjnkbfmmvyrwyocr]jhviqqnrgzjsdmidsjs +nvouetegmutetgw[keqvyocxdetebkcgl]qfhnyfdnjqnklpad[swuvsfhrnzsnatb]zjwqmrmphlgwdnms[hdlfprihcbcemfn]lrraefojxvtpxljil +fowkqklueytawgdxklx[pmrpenfrmskqjttdqiw]ttqjijvoxxfxrrdve +nsyzzlnqjssmirvejh[gpqbubkrsqphkdjwg]gvzcxqgbvhopkgy[nzlfaemkjnuwvhul]vxdiuaimpogvtkx +pofmqefryoxboubl[neoxktodwrswfsxwruj]frlrumshrtcllqqf[erlodpkifgfpjlbl]bbfocfbyqjagesavoc[ajasttvajmlfwec]enqqcyveejcayzw +rqtdsfpdgwrlmfj[nmeovqshevzueyvd]ibiplfpvkyxvacl +wtvwzmpwviqbzol[oqlqunyszsyebxbm]ywqypuyvaiegekaok +ijcorxkdzocwisjb[qvcjrwytrzftjicua]buuniicmziszwzikph +pplaiaulcciebujjsx[hlyeskfzscwmeqss]tuuolvvbnyymfmo[trsqblvfyagxmgtwfk]kcigogbmkzsjlsrj +dbsqyxlovoghbra[lwqmeeclsvfsrezsed]odqamvyyhsmctpqegav[xxoamahurojgqse]tngvfzhoprhrxsccgnu[zwwglwyqrieusmlfmrv]tzfresqfmfspigfeo +tmnutczqpsydibk[skiokxeqdgilzjq]rfkxwumjpjulbkiz[folgircuujlcjhjqxa]snhsgynrkjecrsu[vukuvrankaiilqegzup]clzyhjlcbrfdbjrzlu +opgifufncugjrflllk[epkqgmpkzdijtdedk]xmvotyghoniyalmmg +ovtwjnqubjphsgapb[cnrcpnxrfclncasoeka]duqduyvmbzwdopyxp +imtmstorxxvbvmz[muklxeyazsgitgb]sjuudyrlbxgtlph +zbnvlmvzeitlrvclu[rwlyxjkxlvgeyfzdl]uzlfzyvmybjonpqay +cdxryezdoiyoopuzgl[rnmncixgvbxromitr]jgqlptcrlpzdrqh[sstvgpzcldcmoslnycc]cyrecvckpuyjqifsuil +acjvnpfqosyvnvzbjyv[tmnczokfkjaxcvwjo]cszegpeuzanwadl +knqqmdktrcvcikcfvcg[lnsoisfwtfpizbpo]xfxuxthdxsekjpi[qsroiaojvihodgq]jaamntgiaqvdasnz +mqefdyhtbqynychpbh[rrjozrtcexpbrpvfs]dotleanpfblcxfltod +coayqpuuvtnwmxzhgnu[fyjdjtselprfevq]elfqjzpryzqsyqykkb[utrizxtivhakgjoeryu]ozeuxjmcorkcejprcr +ybbgylmtmhxlhqizp[uvknavcimbacgtcaq]bcmdwwkdvfnmnunyp +xfdywwnnhzqqvuywq[drtdcfuoxvlflptlca]oimttatgiboynmu[sdgkeffjrteokyiby]tdiaadhkqdginrtqpq +fbpfhfecwfprygkwu[hvqikgwyrdwtieahmt]dvtcvnchfsienpasxw[ybkvqrxztwzpsnz]aecndxpzpamjkanchaa[gbjwjnipsmepfxpee]wqjnfjiezpzacmgf +adwjbyiantljqwsixso[wpjjoobofoumdxgrxv]rkvrcmmrlditmjtsh[vthldqtnlpjrqbobzs]efwiuqkqzfdxyhvgim +hbbvxnhhxsvghuh[fcrgvyndxojknfr]twczivatsbiynqjxeby[ckqrjoolqrxxjgejzua]omspfwphybvgiqpsc[hmnpdaumzrmqrti]sdysxoudxhpllkknvq +gfussckpoykcibjnoi[fqnfbkgojenspavpz]xqwvoktikoqyzpofg[xhdumbvmqllllthhsrv]vattqhipurbfvlk[hbebbjewrlmxdblgq]dmdhdbknmkouvie +tupwpbmrvffvqbfiw[rqpefvswlzjnphduk]mvafdoftaeiojrirv +bawbqabxqwpswzezv[cjmoppcjgifyfignuf]uawfxptpbgjnqbv +sekswalpvwmmczwdxbf[wmcngumevhrbffuzwp]tqwvmkfngyrhgknowv +dovrepylcvtomveqe[vzzskfllpjbvrvrkryl]byjsouhntlopqffti[lqxrgcqywryeexyao]qsukbxhzoifswmycw[rktzizqtdvetwyrchc]vtsdazzrpipfcrnxbk +ydnkchnxezkalny[wlfhmxcboamfrry]rmzprrgselhmfbeamf[dssnudvuvyhvzyacu]jyzdefurrnaqrfzq[rnndewpbutqgejcy]qxuganmeckxcpdtd +xhwdvxmfxmktgaz[qfzqjtuqokjeznwalq]ddgmotioparmkkudqef[pkgzogoaxvcwsao]cyebyhigpzgyclscf[qehxqzuztsluyweopsq]tikkkgtpkewkzzkdu +cygqebguktathghp[qlkscioiowgqftpd]ytftmijxsnhgacfmmf +ccuocdvpjktkdceebi[pshiishnrprqohwpt]bubrhtrzuabpzzvbwrv[msdeugbygsvewfxco]nzavazcgkniyxva +coscymyrfqgisrge[oggmfoqevlabvhm]xfyhzwpfzhhyhimqkhz[cybjjylavqoqjyyoy]igzwdivoxazgajmiy[kkxkhfunkpsgyvwp]isgotyzlmyzfqrij +vaezncmuzyyjpeomif[lyvwvohtlkcdyuxze]wzdkddeqkxmqbqet +yxcqysoxpbwjlqjdp[jinwxwcdeflygawd]hgdgruqilmuzuzhsg[ivpimcyrtifudwjgso]ostoopidgdzcrzzyzts[vvaiuzzuzywesuzk]ccmdnuyihasnldexf +jhpygjolrfstkxwt[krdivayaqwfuktykopv]dmposdxasvjkzjesg +lcprcppxkrnwuytdt[wysluivwtmytfgqpks]orlmxnkipofpsdteaa[vroskwwxeeylirbkna]zkeahngpukldeszwuk[harebfdcelqdbfemgo]usisvvczvasjomnjrip +eybojdjnfockfbsdjd[xjxxevnxuwjdamien]frogttytivtegcy +rezxczwcihbkywyq[sdzzflizzygfiovwyw]jhtiwvelkbaqhvnylca[xpnwnmqbaawlyqz]kftcwdejxaznztqsbhy +zitlyztihmeogushh[wpsygveulmddxdzvwvt]auvwghiyvkvfxyzf[ccnkvkboczqbgcmekt]hkqnuaoeffocspxkck +ucliphnwkaxtwgnma[wxkbcziemdvopzeq]nwxnkykbefamsdo[lveynsoldnjkcdn]kluaaaoiqsepyqfz[bgjuhrlfjgiyngwkwgj]ofjimzheftgbbyrugn +hshzrytllakuifsbuap[znsqxjzxbeewshkb]tdiohjkqimfsaijvmvf[wxvmhzzkjopfxhshsol]qgjutmxlputvudf[thwwxcavnensivbscm]dounftyvyaoguqzy +hktpfbzotlbrgddcff[adqmcoiraqbphjpag]fxxdcjqhwkftprk[lfeudfsbvnqjvywynfl]whirlnojvbkpyndhyv[xpypetlsykaucaibapl]gcpogvgqrgensxdeyh +afbiuqpasfjkniuw[bqclbergutdzfdqhdpm]gcgpimwjmvopfjhk[geztaacbsloyevwikqp]jjmlssrsuxmhbtnq +ojotaeydgumtjrfdtam[gpkjanckhqjvfjewt]zonzrwxnucpwtrmqyhv +llkryzvclmpozerpao[gfrhlpemunmdackfmp]fbntrvdilgbposhu[koksbsqnmtfdsyifpp]eswrneaxvurkzfs[ixjekbpjqsrhnpgw]pppbdmxsdflptotr +vbmibdiednxxbammtn[gqvlmbobpzpiuoda]agjiighkbopkxvwakva +fnlgxejzkpocaonnloc[ojrecrvcmirtehjfcvi]mrafnbifqfcqxpmqdrb[obuqfqpyrkeinweynd]qceebfqvcmnowjanh[ejpkcpwkjfbvyjmyzoo]hhjyeulunsuagwq +nubgjzyeuxvtwcc[vlpjhggsyeiulml]evysofvjmwxxazzr[tapuneqjkzgtblgy]gvbvijhcgtrdsybt[sdufwiyfojmptfruns]zqzvbotgmrcynfyq +ibcblmwnlhhftwfd[ajuhvgkyaqeikjgju]rvuwgrbnjxvbcgdpy +hizeoqbkkesksvtjotj[wkvmcgctdzwhzlubt]aegcgfmdneprdbw +lqyvebgqsrsfbcdccps[hygatrvziszspyihy]ratonoqinqfwcmm[pfieelpgzrfzhdffhx]zwaytmidpntpolajcg +admawesoilkvcfx[rqurmchqtkuifxm]tliyyitqauzegwst[zwpbngnlemkipcku]hpxfncvznjgfglvugk[ruinbrosnwmxdzav]adbvgjbxedbmxbkpxa +gpqgezsbrdmqmeihdr[etboranxahpniwzr]woeyirnlebizohoa[rufjzeicrsxgitspt]gltoxcqgcsnvlys[dcvxqvoivyuxxayd]zkxlasittnitmoisr +acoxthwyfwbhszfoz[wphyzlksmfenksfs]hpzmfaofkobjpcdxzs[sncrftlydahuqmuvoqq]ojvuhabayhrsynq +nxtmkatkddomlbnxs[qdqxrwoaamrztvkzq]ycyqxxaijhrpzamcbh[japizeqvlqsmdqygr]xhxvgqmbzgomhsm[kizldaqvytagvviondv]tidqihojfrzvyxy +lllcbzykxbdewnyff[iomemkjmyaqllvcx]vjvnigrbpnhdrbi[ukmffsdgnyqxafwstg]ralpevvmfxtqbzyii +vphviazdmmvtcyc[dcomcirqycymvqkm]meeikjmqliqraeqd +jcgueeliyoclqera[verzkovhghnquyndr]lptflbxptsugmbhvf +rcdghcuautflhme[zngtjffrvagsmdrxurj]mwsuxjbytlzyhinxyr[cibaxfqjdkmdwxr]yikrelnmbneqrsg +jyvaeqjealrbvbvekn[yharteswtwefyedz]wosalojtbxzaujpiba +cdfzjfycznejinx[uhnuxxhxgipoujnarw]bkwbisknvmurfnhp[jwbnvuvlvegrddzf]bkeykrhmjuphuvoza +aalmyxywwvbwwttad[daxeeneiiiupzvqz]cqcjxzindssjrqb[komptxyxwgtnuedefro]xfbjflfujclbqflke[fpatdmophhvpcmwfj]cqbuduaifbuhwiy +kogkhuakigjclxbjoi[yuidmmdeopwzvatxc]qdsbzscrwpmnloga[xsnwctwrdpgqvggoian]yayspjjhhpdsyzkkzx[qbttlvpkbplhagtb]ndnljzkxhgdvclz +rojijwgcylsaspmmrdy[jzptmasniljjjusl]fslcazgojebnrrrz[ybcsqnloovizrxiwal]ghjlkcnvkjjlqodusp +egzqbmomtlqvjfo[cdarustihbcqwpfpcv]fzxqpzavyniyjbfvc[wkmiofpbdcsnbtj]kmtvlxnlvdjflivtuge[jvlzovzdpwxwbcak]hwbtpuolbupvwfcbh +drzhzwluzurvcjogd[haakukjmwslumvgq]cmwkhsuahrqxfae[kugdxfrtkjmyyfheze]dyxxyffqsfctugyca +mlalvviidgseekfkqtk[rmltlzesxldtmsnyn]xdqfkftanryqfqrqkhc +vkajuyjjhekfhmwwek[uuanfibpmdbwxesfmsk]dxpsqnnmrnspifpcyts[ezmjkdjacskqhhbaupr]wkzxoqszqigbajudnq +wmpzatzujoibyjdle[awbuzjartnsdxfqtlh]votzdrynubyfrdip +tstuekiwimhtizzlky[trscvkeiiriseqj]glbwxwiwdqhndmnku +kjgjcnoipwnlqnk[hpukxdqokakrgjgjpk]nvinvznddzuhupepemb +vuawkeimjefqtywj[mgdvjppiouqnnyhzz]eeemepklcxhhfot[ktiuxquqhzrojqo]zcwlowvczfjucqeo +zatolywcfoplujidaz[avcmpullpablbdhusiu]bkwehsbzcysrauzz[tbgkmrwkzqfysfdh]anakunhzskapvmq[cqzomvulpzbizfuqug]untygoozordiywrnkm +ozynyagffvaeava[lvsgzdvrtdifdoxgvwy]pdkwomqrhfolkmj[fhemhaolmihgxlehn]huscypjzuujagfaqk[deqkgecbrdfhskujqg]grknbktwdyznqgrwm +mywakayudrxzofpri[qlywfoydoqmsmaoygp]xpwmtcqqfqsmsys +sdwltsgbumfnbqq[irstsqsogmppmlmkont]lrwnbdnpkxgfhjeo[eqstbbwumfepxoqaszs]fdrrfpfiotaugunbdrr +bappxujhicaqxhwiaoo[bjvhcmhrnldlwyrf]jdxfokaxlkbifuwyv +jlziyvwcuubpsziikv[mvkolefxtgoarsk]tpixifdoybzfwnwle[lpbkitwthyxdbvwflp]eyuzdxvhuukuiaqfp[xcwvlmoqpjnehwudh]sqxbifjmrgwknsno +rblicwlpfezecfhati[aqqhagfhathupym]vspyjiyytesirim[rqjyqiviftryoyychs]voksponpgjfuwsp[tmsccufpnvjdtgs]llptwgpugyjizqfch +admwljcwmrudrrph[rcxxxswmdlllfdwrk]etyjbtmryjxeajzccmq[nivhwmfzjwaspuon]tslmnzikhnbtqwkf[xnwykihihgkletgdy]mrtryzmlleorzwpi +ibgqtdglmjgcdfsycxt[ruddaxuheyvamwyi]neoneshgxmsbpydg[ytpshrjgditzqmjdlz]nlvhgtzsbzoskiva[asuilfpsgtgyftgtsho]xgoevzdtjemapbnady +appgubyezsrmwec[wbqyvobthbuperojt]gqxsjlchxpwvdfvdf[xlndklktmbpjkzuo]molwavhkvungdkvwywm +jusgjqhnjemncvbvy[voitjezdotclvwaggg]ffunuypbjmopbbvoh[lhufstqbkhqxqiworpi]gnhhneydiasvmbvbga +hvboappbxdqyjvxqyd[yukgymhpumetulsznf]hgiqjmlrezzsfndrx +jkovbtabgnbztjmzsoa[flxcmdoflhlgvaio]qjxscacvdykhkxclej[taocvcbcyfrjgcxlkm]aovpiymrcdmebktxwfa[coviwkpdmukcsixdob]trjjdhlgwwkwtegkqmp +ibnaxwwqjgtgxnlax[zozdkkwbccwdbvbpf]dwuzbcgeqfepczlvwo[pmlmuysuwyudzjam]pvhpqtcigtknoqxlib[kvwfykhxumzltcxidt]hybnroedkguawhgl +xqwhbiiflggraco[uwhisdtpaprjfji]dexzbtghefojvtt[nlhtexyhufqeneytdtu]fpskbqhfhavnbkjxwn[gtxmsoydrotriljoov]labmxjlalzgybpdjm +ibxakiwqconeyudxj[mwzjwhmnlaobsdy]gvxbmnzqbrzuorla[dvbreuhggwgdtbjet]hjrvpdrakncsfejis[tstdqmetsguihzdws]ukllrzriimevvsekrkv +ztiyqybtvliidsq[mvhqxpqunpsqouvgrbx]qmhkzbqhemycwxeq[cdadaodqyhjhelanr]rtrnroumhiwdadrbe +nswbgqjuxdygjrihvn[mkznbbryojdlhwee]kccwymwlzrsilyn +sebujequsxstufe[romzdeirdhctzkmemwt]vqcobpsqzelktljh[twewiabushguyyp]mktiojirfewuoacey[tgnliawsrpkhyko]kaytwdodmxqandynomu +qvfoyofzmhctntofr[xcokguepiaisrpwewng]lwwzyewekuamxxlepz[vybjmfsierveheb]bzvvxsdlcohnpmgir +txjecoixmxyskgactb[tvgiyxcbgzkdmgb]yvjfganhyoguuygau[vztmvqrrheqkzasss]mngxndysymgybqw +ptprazbzxzrjpnrcbko[qtdvwjwftefqzaw]ajavbdsfdjghhismds[vvouytxwsxpkttqr]kobwalobjsrwmxz +ucvupuxupiasbzxsuo[hnocitmtlqgttgdr]qghjdvyrttaklumszdi[oyeqkgycqizvaok]xpnaaapzbfqdzvcqhr +vvjibkoyadzluivaen[cesqlbhxmigdxphcr]ztmuzxnzeprichmdsc[daemwvspbbljrfc]jmqbyfpmjcddlepf +ztncnhqvomvfnkhca[ohbigcgrevrnpvuwgpv]lnjucgcpghvtzlrgkh +nsdamwafqwcjnslx[upwtncktpxkvkyhd]smtcegxuoakvjrl[dhvmeqrfgnbwqtd]zwlvwesmxdcnywjdb[whrrgcaujehwqcf]ayjiiktvzvxxquszmh +vnqareestxydfvuvj[psgzifyszldodtw]zkrympmklegtsstov[gblinnqlnfqargqx]hfcchypjbzvbleabbo[xvlxasumenqxcdgzqo]zyhgaickhrgscmo +jqaahcqcjjtinevp[kkntdvvdghnkloliin]zmrsdzabbeotokuz +vnrmthshyygudsrbu[yjvauysxhjhnmqenmkd]jbjlrunbjbzvilmyqf[gnoejrqddyzsdixecs]qipibwxkrnbmdgtevfx +uoqovspbksjvndhjz[gntlvpnmkbjcbsesyk]thzecqozlhmhrpm[ebvhbuhvuyfudyeyeey]zdlhgafvupyipekqoqt +hwilsmnzpcjvpyor[pmphksrtsuqgkdqfyx]psibvhgullieqqwyd[uqesmzorfwbvwgkiu]hlxqjuuflhxlgrub +dzxxmdpesgrpwhw[ohdfatbpppptmdyia]pqxvivkjxrisnmzbrl[iilqjrtayjrvxccs]gwfohsvsvsldpwaelep +vaenounqqmpnzww[duovdncntfceyoqojlv]qttmppevxurnlzde[jhwuqoqwdxjwilrgxil]ehuvfpawjlrzmssbzkm +wwxcidipvnqzxsvhaxw[oivkplzzdeoyqlemho]qthsqnpnbraqqkeyvk[pdkqargzfikxoxwsimn]biqpfsweppknwjvuwx +yefdguujlfuicqqiq[hqlabsggdampkda]tccxpvlmetflxhnd[oqnlgkzvzbhvnzzwz]rfugmbtihisgdklb +cmapvofvmxpioycw[wsmfasgncvdkvjnodyr]dkxkldjxlpdineg[omntdlldszepbdcynah]swcjxnbotrewahi +awbucpjznymkfhjaa[avrrlftouhjbnle]atvuoxpckhvplxm +wfrfilbmvnfdjycnlsf[thxhuqnznohekfern]ndjiygqshnkfehr[jpdgoiqcdevzyrywcp]iuqxgoskimjzasbvsct +crckwgzymgpzhckbgct[euhwrvuqcknwnfwokiu]muiqtteekeqzajvnuc +tljyrckyrcnheftu[xshakjmkjvzulic]mrloxmdpqnxcjhnwh[yyqdzldmfgsnmph]lwlpnskgxbkivqku[bwyxcdoyizqjmfvmc]reyetuasijwucrgylh +zkisfuqufwbhfklf[nicopfmlcpsvwfq]nmwkhlxmquqelszgbe +cqnuuhyddzalcxc[fjmqzkljrqjbexcxxf]pbjsvyixepnkthndhb[xztvuzlknucygyvegxp]nwxzswdvaspdufotcxs[bivsecxgawosnflmfd]bvdtxxionieorvecr +txqpvnrfxykothvao[uikgxsmnyxwlobod]tddprkiwjtdcwbobzrn +qjgftnxktteviik[hsnjrychdzepxamtfop]golzdtnptijzmpo[gfgevfrczlektwaohmu]vauncttcwnozkrwc[ljvbawzsqbknkuktnn]inwckpvsipmunmpo +kqxvmryochlslekzhl[ivuyfsoefnqqtwspxtu]bytaafalzlqvjumuleu[apezlzoaspstxvknv]mnkfbppakmectmiafs +vungsqgzakhfjlbuwig[cgydynonrrgfswomgev]lkyqpvlplfsmznc[kttzkoqpeplpfaoheek]ssijcynyhenhnwvd[hleabsbwqkqqnvdd]xbbxdphvgzmnauj +rxweekbgidxrpbcxk[zvguddibzffxqcmvq]edhnueezmvxinaxyo[mqhjuhujxklirvkm]eaozfcadmhsyfpoj +rcdwnquofraczluzh[gvtnjtocgohcsiswush]gnajmbxnrzppwobfjta[dckvvzvigupevbt]veqtchjayfclaltohjl[mkwsfnvdltripnzdkwr]jhdwksbflywaaul +iltlipfzwdrsmefm[brcprzzhfwsrzbk]dlegyxlpizwtlts[fcqadgpocjjnahyqm]htwrqtzfxoeamiqgeq[utrgqiasppoxrbhhv]hwkrxhaxxtltgbuvj +ljimkpaohzhoifdaiko[dkjxnandaghzxflymm]szzkmlubraphtnokpcj[irrxpfhtabogipufkev]bjucnqsbphjhekfvco[vejyxqrtfxuxeuelvmv]muygwodxspxrrijc +inovovgduyohxdw[tbzvjivtssmlxyc]pimyxafhdeyomgeu +ivahljnswgwewyhhn[jvfdvgftpukjcny]rtisgwgamadavuw[lmwlmlrkckbundmzjvo]eqjgikocnpbjpdh[mdpfdbxenzwycoou]uelglssvxdcxlwucz +zolsnrosfihzzhu[ravlcysbjoagcvaacmk]czfdqdbrlvweyyvbq +vktqafvmirobwwhtr[iqvczcryidfihypuz]adgkyomqrwfucufmm[ecbtnwriqiiaurzkn]vtyotrwlidvraksywke +oagqrhpfnkdvvsqemp[qsjyvadkirmihtfezev]vuuantqauwqrbyzxpev[mpaqvjcfntbdcpdi]ghgstpggptgbvwnmyiz[hghmuvsvhqxvxmmnx]owoulisjbqpndzgt +yyyrtktdrrprfdtbyli[tqbcxefwdtzllez]uaixdyuensmvobo +rginebxdxtfoudqwqx[bvnzfxfxsztzqyyq]dfvdsghoihksjcoccbe +avmokgrhvdnoptv[ngynfydflwspxifoi]lcdqccyarzcasxrbue[navvkjotgujkewhrx]ogzqcdvefknpghfjssj +sshuolwwobwchug[cwcurmfcxqblopvho]ghvtsqgltvvlsahwqpt[skxuphjregpzpqm]epmegfynfypbewftism[mwtakvgutsuppqz]tvapecuvnpedscjkfs +vsqfdssjnhoineb[tmcwmioejrnbdyrq]hlclokouzhvmmywskkk +zuxeupjvtrzzlwezm[gsptwvqfzpvkevapsvq]pvjuezgybonsblmmxdv +dsyuvmvaisuqxff[vmguqxuvvtbjrrva]ivytyfdovrfmzudyzcw[kwgjymkeadjgvdvxarz]rpizkvgpobjriqutyt +rpetcixepthhnydtsx[dvivlhhlgbxftlw]ensdqrwytpwniviwh[uierkmawdkijrbrbb]ywvqqtldiulgtft +iruarpzjrxupbdovqlk[cipcsklubepettbee]jfnvwjcgypepsbnauh[ncvfofkqfotujbat]moqzftmyjreztaugkij +uqqijwordoicegmn[ihceutxbgzatiwhtd]hxqgbplciimactv +kthovdomnavxzkrtg[utmtbhgqydotlxos]rtwopdppoocytum[ptdpdrndjiboffigipy]fwxyvpdnlhjofwjtwx +vitzjdhxjjossygyje[vzysmvvgddhvkufqb]fhwstpatifhmyespsay[mrpnqgygncsiwial]cwbbaisjnqrpuzca[taqkhmlvfdelcrzbryp]kwsdxlkmoplziobgct +iwybfvkucobqwagtdf[nafgfydrpzzdujp]nzdzwcpazorvzncb[niuturhwvakdywurves]txickuysfxeaamhlv[kpiwhdphpimfnmjinua]crunehowomfdmznrc +qololsmsdenfcxmtqxo[orjyxjutzakvhok]wgcgzavspuxtiyhdds +fvzbruyrecjzobgjfnv[tfnighcrmbgeklgaq]eanwrgtehcxvxow[hrmkbicsuekiicxw]pmyfavysbfzttzncxbm +frjvccazhabvndxri[wrmbltymeeoqpqtx]hbyuxmlxfrjrzifpj +nkasezsbfuldeolo[wshypstyfliqxplkh]nsoplkbnmiagngvusr[mwpwshlkyfrxlgcofiy]ycplnfgorpssaitngop[rtplyrqezwrwqhc]houlrclmoatskoufgti +cmsmitcywtmhtimj[pevbzyuhvaqftnugc]rjaxtggjpjvayzmhx[pvfplwswzpusjzhom]jmaurmlkkbusduxd +tshzomvzzouayvevgb[esegiphlwqwlkgt]letvbhxdhuzidevee[zngibooquknjqqxnxz]dtnugmifjztkwjpqd +uuzovqhxwovqeki[ddwwgejprtbquodnj]nafunjrpotozufcf[lqyfeicklrejcwwrvxu]kfxgdnpvqdmvvitzt +syawdtcaspkeubwty[vyxykmhcofzktwfex]fmevgmpetmzurpou[bgqqdkgrojeesxj]lhnvraueoksvtjz +hkyhsguxgsejarhub[kuluosrzpmogndwe]wzqvcpdculcwgqldxm[uybwzbsgzjqfspayk]nysymudwyxdocossgu[usnahkjspekuwvgtje]gtjxtcjsdvtzwmf +jiuygraiggbzoxz[wopmhgtzdwlkyzvfhs]kquojxccygvgujcopbq +rmdqmtbvzoocsjddyj[mmwewpzkjayrxkortj]cznmpvsiqtjdpbgbbf[dfgdncqhajjrohr]kjsivnolfcccyijyd[smuudgbnrfqkxzec]zukmasqygzxrjqoz +zvhafubtbxcnggnnec[khfuhiaikrpowmg]udtuciwamjspaojuks[wlzjqwtmrfrfxmxcfd]plaqjdorfrbkkppep[exrlzahsxksdqsllkn]fooqtqpmnglrwokq +rilxjscompommcmc[qpdxzxqycqutfyj]xvoufpojhanaloymvez +crvrlgjjpprknkurjq[tuvlylfiibnpkzmi]ghncayxzzrrhwfe[atnpozkssbyznplv]elzhtwbiernezqns +yvdbhamisqligavziqh[jcfjonwpgcszajk]xdszcpfvefvmlduoo[vqszbxqazfwgrfazh]geltrpsnlfyzzxjsg[usmmfawdtvkvkcm]wqimqpbsojuimmf +fsgjpguxmrmwxeymhjr[gsunymylqpnrbmiqyi]bwqcxjzweyndcslvxx[rhtvuzqaxazgzhhwp]lqiceppxpscreytystv +zdzsidcfertfbeifye[vdttvawxhnsjirsifn]abpddikgqtsqalilwl[mgqwvkdulrgdgni]bqjuliwrgnvycgnvcr +jrrmfvdpwdborgjxw[uqsuxsointqfsbunl]qosvmfqnyadjfhrc +huekbtocejhhjud[hzglqavqagcxaaksxp]afqncrfalluiiqzfo[mdgrvbtzxdzaztpeg]lsthchkkrvofbaa +lsehhfmwrfuqzewvxkv[rjrryjrjwhgtdifux]nnhqgwmoxdcixsna[wgburhmplkpkrgmpco]hrakazqqsstcrxupvv[mhacbkzqgskhorwf]fbobhetgehykvsbmb +cjmaltrbirusgyoirp[eipxzkuhukkdcdh]iqyymukrkwitywb[dcvtitgqvetxqip]sldydwlrcdcrljhzu +oqpgfzdkcrsrazei[geqerlvxxatddmn]igakhcntksmsttyqsv +tjhfyftjaclsdwzby[oiinbkqwzmhzxeic]ehyliwwisegufbhh[sqmpgxuqhsxnzdi]whwxlqgetakchwht +ukgmtuvowisscvp[nhzgobykdniheamz]ekflzosxwmggiuuudz +sqbsxlbyunhhepfx[okuhhqbyojpkahiz]hhywggdmcojawfpvkhx +xlqohzjcztxennv[cnbtlwijpkczgrk]pwxkxivbtxzovdn[bekntreckjtfkrsihm]ouowyjrzyjbgsygj[cbirdomndbelavpb]ujdrausbmqhnretkhtw +jaowfyulkleymkdpl[yxwftdgbtfzugqnnzwr]ztmzcodybfzmfrv[sttkedpckbjaxmqvhds]fidvanwfqvpywervo[jtludguqxuwucvzcjmv]mfnoqzvgatqhvteacyp +txyjtniwndqckudby[jbemysikizywlxbv]bezhcvssxmbmzgpo +gcxfeqprbvpwtdnrxcx[kvhziidtwrxlhejxm]kxzumooacujxvuwsiui +vvzhcfuecgfvrxrnquo[oqgutuxthxlcxhpke]liqjotlxzbmsassyxrf[colshvmiwbfjansdg]vggdkkyqrjvthtvp[dmozaqtceghrabasafj]lnsoewepnlbqvibyk +keehyqsqydfzlqrqqu[obaslijmtiakxkc]wmrxgysajmjymaqpas[tqwlwdqldidsapjtzct]mjeqlhemnwupulj[xdnkrxbbtlkzeapnat]btxcxfncwhdqlhmh +qwdiosimjitfulva[dhnypfmjunifrhopd]plrzlaakgfirzcccif[strfuwthjgfazeoq]lvhimnjpbpagrozczhn +adqktintsuslnns[mtlbicyrgqgnxuhqcd]mdadfpkvbkvkaimvghc[cvqgxjplvvqbato]lbskgsbvqnvndequq +brftuxdhebezivqio[yukrabpvgetpxpylxj]ldgifnehggvkdtq[pobhasghdmctwcgl]ccevtzwnziffjhqu +ibeocesspzaammu[twfeunwtyqohdtz]kiknftbdbkwrzhrdj[ywsjzyncsuyykqgu]yqbjeqoftsblixeozlz[mmcmncavhecsxbxi]aumsmhzrbxpjqrxllit +hieqiicvqswviniteuv[ubxwceioqqhagxybrl]kikxmdnftjiqazj[oyvdrxwqbljzkjbh]mejsqgnksglqmsfrlf +zjeouhblfsglaxzz[efenlnptrfbopulk]tbdiezqxnkiwmifiyy[pylvblxazwozkdv]guaxwfuktjlovasatlc[blnlcbxxlcgddfquwgx]jkemembgzzxssliiywp +juscmzarbykdkbcf[naosptvhazhfydzz]yflhbtlxgowuvmf[bdmledxprwnfcaflpf]fvjeubkojokjcfnzoo[bmmclnpuykellsdywvh]vibjnjgmtpoyvdw +kqmrdsifaonqprpach[chzxtugxvhbjujlzgq]ffbjsynmytyajcbsyn[jsondannallzwhz]gjrnybnhyxjismip[nocashryyqnbsszebpp]pbugutcxooiznkwwim +vfziparbxeibtccl[efwcwvbtlutmoltmrr]fjwkgsaambdhwvefs[nsrvprujruqdlxrls]ivmnrtvdbkumpiio +bjweouryhlzxnkfj[uuqptwyhasahjmkirh]rrxwiqmpcbwkhzr +bgdivzqqpztnswtd[xwfurbswsweduce]osimciokvwbydgqojkk[yyjvptlwdknyxnzpr]cqiztxdhugywyclvz +ftcvabkblehqjyqtl[txwnhqhrsrnengcl]skhszkrtpljsgiylab +ackokzybncuxpku[xzpocuamnohjypcdq]dwroulahreyhkraojf +hqlijbwudkycvijqs[buaclznmftiadyidde]jxhkyqsoqbpxcjgsus[atcehpnpgwuchfzekk]rvyzujpclugrfyksmk +hnrkcioqaeeqjrpg[cowbmmovdcsubwiltd]myuwiosvtmymgfyav[yvyjgtogmgxxnawpda]saqmtvyakacfwsvtxvd +tyanupyqajrxmuk[bkxkehodeqxpclfebq]kiupgpdlxfvzydgs[rvbbrqbdsolzrgse]srmrovuaxvxvzmrmev +pjbnyjsxcwyhjzpvqkl[qtgofokbciwsszwa]bwvnbcneuvipqaaiyjv +ecxbamdgtlfpmqhi[khvmvwiorzygnitsbb]znripfwspcqgsdzosv[nfhgdavrprmveeexppv]uhzugtmfmipmaznbby +jdoggfnexvkxovwiatd[xzxovisxynejpyxhfz]ciehyiyumbbwwxrc[nozxzgzvotunvgnhhjk]umzgdkvcwauvkzr +qhdaymaijahfkqzw[mbjhxuvbksqtvxwveau]rkvgvfqsehbynbom[keygsbhockgurps]nzmhlxxwjlpjhzbhw[ujitcxihwbjrmrep]cbfpxvdzbljvbfpzsw +wiuprpjfojcowmy[vmrpruwhtzbwyciid]ntbkrodejcrwavjfqfa +ctqdkuxwiricymu[wexourbkgedaqbybfj]revrxjgaoalievfbj[qtvcolrhwgqtjesuvkw]ozphhuwwzzguldf +bqpwrkyhlysqvwxga[ghyqnatqnccegjnkgw]pdgglsmagwkwemidd[fcddsukcrksifkv]cyutddgeoqcyopmm +mxmpasrqdexjpqfapbh[rqeoslcvcwqteki]zpervmncbpfbhwaxmd[rnljbhhtgiyluaaetx]aycxgjfqyxhgeraelo[fukyvtlgjzupjjrxvt]peumsiryqvhwcsutrj +nbdnniplhgrqkrcd[thcyuekybfqraxspek]rlwhyqiavfrfglg[luswlglyiuklvbuqe]mdgjepgjbhuyqkcs +lwueejoqpguiciw[kpbyblloubmxdhk]omjurxlkfpsdwdmbl[qnifmaxwapfvglrt]vssmqdzlxyyrdgkwh[ljslsxolkkivoakh]upwkosogsrzzuej +rfqbvdzxrnrbuhvw[wzurtnrnslhoqkdoaja]vuxsxofemkrjzqkk +pqslistydhvgulggwbi[nipdejpoxqfmbeft]frepgyumygqywwycjl +excgzlqtguboybi[guywktnzbmkwqrbp]qghuyihqlgjrdbuljs[zrkzhirafcadgqnifuz]medyulldvxdtpmqifpg[lsmokycxcicnxcyfpe]cobezkjtvpuqyqu +aajcheqlcfjvktswy[lsgbzwuxqcbgicd]skvwyyeawvlzzfp +afnnxrxdhbqqixcli[msrrsiakxynnwiard]tzanbapzvxtabeuz[rbyqhswrxrofedlykg]phyilynmscckkxgbhks[enrqxrwqiotksdor]phnmohcaqxspqhv +pjyiwunebggfgpgsk[ovrxnqwfhtrjoxwi]lmkquysxzdebvarwfxu +cdztgjverhjafgemi[aogtmpdwqhazrij]dmypauxszajopbp[sdsrejzmjvpjijq]okitpugefdhpbfnzs[jyospqqhusxbhfuuzp]btfwfpiblknocxncj +djgkwjxzxrgsncwd[iuaqmffmnfklkieaq]agtkftischmbszqpo[conozrxbpdsuonpvx]mflbagusvgzybhasrlf[ntidmtstsedfdbfwost]igffrxgipzxzzyjy +ahfhhpqofpjyshcus[lrxchnknzrjtzkgt]hvtqhnuzihgxovj[wbnqnjjnzltdyvxswv]bmppxzhzgwdsckuo +ghwlmylxxuybkpmo[bkxcurwihedpwjm]ypkvoiavnzgzlkahlp[lnxohqbghwsnbeqgk]vsegowbzcrqwcsgy +whzaoswycajecyuw[nwzgcizbidljdtoull]zfyczyjiqsqxgzsjm[nfkpyfcjwjijtnb]dabgzqajwpzsczrfzrl +sitsnxvhgjjnlitqs[vvlbonwoskugqxo]bqitwdmlvnlcziltj +avgdblmcidneynp[gkjdefhfakqungkij]eztuncfdkicjhaytdzw[dcfldbgzscsumjox]okqkplzsscszdsxejso[yihmpxvcbnsofchozr]easrxwgppwzqern +cvefvhycaorfsfbmi[fkvzdrremrlrvdl]cfcjirtcmdphvfircx +wegfumofnzigbnhy[oqkrudppjpvcuvr]fzyxsxrktwkgrvyiwz[jkporwybtotanposc]exmwkvygccdurwge +iqfavtweexjxhdkz[drnsnxjziacormb]yftyjvtetmuvwew[vlrdviggcdfnribze]xzykwuzopkedwfqjxo[vnadxonxshmwhvk]mqbtnfjmhjmfdftwm +odyopnscztauzvjvbfe[zpgqzgzcqclarhkkc]lfuvvhwhtlypbfv +ogaqzpgfwlmdrjgo[abvqsomptscdejeyfg]rukgbtpqwyyvnvrdz[bcvgngjhgitweuc]bljvftlzomvgvmlkzsd[yhpnqsmblsnfgfnyv]nvnkvwwllyygxcdnef +jlbnwewczmvtoshkwk[rmtpjyqhqxturbfc]ulsjqpziwqfjccmdpgy[neunvaltjjkcxvf]opuswwcrtqbkqyq[wzpxgeaohprbhvamaf]ybxisfhszawrtgsj +mmrbaaqjvgpshmn[exjdqzgpzdalrwmtha]qrxggoccbehivaiegs[udbyzlbkpvwfkaot]vfbmvytjziptkyv +pjtbkayljttjwyztu[clbiouysqsjbyjguhe]srltvgtetxcbkud[qnuhjnuziihtvqtbeyw]iccppmvrkzyehgiv[lldvqxdqvpcrizue]vpwqjhbktcmiyed +vxqpmalvgeaxtkpv[elquojhkjsxpmks]dqvuljielvjopjcuvsx[yoklegkajhhpatv]cnfivppgdnkjzmrr[vnjebiwfefjgqzle]aqkvijxvgljbxmm +lhkkzniihzzsqxdr[gvhbztmgmlicdoasdxn]fthfehxdcnyjhdwvsx +sthxexgjpexecjzr[semwlxfagpybhblcq]ztkmocjbxsqnwfs +tsswuaezqpzyevei[nolctgupccscwsj]serolamcjmqaawea[qgjyyldemhsqivwmvtn]rlmxvchrccptrgmmbko[qtiqgvilvevjvlkxc]jjcnzdjdxycczflslq +geiglvdxwpsdtyt[isbkywwxvuzljpnv]djxvppprsgjagqtfgl[wmhnkumvdpikdjhmt]snjqvydpmjqutduh +ksqeegpqcodzekvp[htprcliyvqdgjbqv]sqykqimpyqiwktnq[bfjsisougvnyjoyha]ixghemgcvicbedylz +mwomvddjcxrdzmqplow[fznhevtpwhldwpo]ygskvziyhzxmtbcikbl[tjhieqjuukoqmixm]mgzzrsccohxzfgak +xvdiafigrvgrckwol[gttxgvtlreruvonzl]fgwyzafvtwaqdwuo +siyvzqpzfobnlgtxn[zcgxyzgysabhpvsviup]xfdpicxyxyjgxyxd +tuyintcsfdyhfxofk[abiuiwquiscebxbk]zqazrpoxqqswycjwvk[hayvaaykkacbakpom]bwwhqzhuiitdaed +ckkmzdomnglfwcbeh[avqftwjqckajjqe]fkpgyrqzygfcheoctfy +teuvnsaipkrkmuu[rtiypvevtipwuelkzxf]xqywsffobbokraw[oonkmkqovksdycu]noxwpblcqqbikpbck +bwgmejgaihdorgcqq[djldztucejcjizv]nuuzvdhlgqscyrjmab[nwcglzehbfzzvgr]aybubdihvypmvqmpfhi +gxrmeqpjnbegqjeuui[iqpcaqmpavyeeqkye]etydxarxyxculok +wakuruxdmenhmcsgt[lndpybwsvzyibmd]tfabajlzuxwwhofz[msknqgraxzpzwytjx]lfoqigitqufmhfmgwgi +gpusiwyruzmkoluea[ofbgogetujmjnqv]dzmarlipdqkgwdzwzd[uhsfvlrawossxvxyk]yeseypubhoapfgdjom +rcmnwwzrimrifziyoyg[avrikteehxhxcqhsq]yklfcrtqwaxmoepr[lahpskzjdwrjonqg]wddynujhryzkunrokho[ixwzkdpcqefelgcoabt]arjhdevhgaqcohbut +zkcxzfkwxxdtbumymqv[qgaztskshqiukhwuelq]wxzpzaxuhdtfbimub +nlgurkzredyklilaicv[mtxzdczugdhoowtp]hnhcyeygqrbqdnsc +pbbcmecbydtmjigfn[giiambqbdgbgntq]zaaqvlpkysxuvbgbo +aqyxolkflikpaxr[iqrnhzdtynkqymz]rwmgahzmvwtfebyguxh +kcxhmwgrvommccee[oqvsuahbhwioqeunkz]mhcyripmlfivqsimnpk[zptnyqihvavtlxkq]guacutltkqoixskg +ldpiuuwsszyidqxqj[tsmectapcwuyhhy]slauiehtpaocaeqyd[wbhrligadmsgznlyvd]nyvfiipvkthxjuoubc[zplkhqbtciuqnhjhiwy]olcmrcsayukgcbf +tzcpkpyrdolcerqnwu[zqvhulfxfhgaehbwf]zaekvjegdligfrsh +ghellbvwbjaummjjoss[pevgyftbjzmlsryfzv]kjdgnwfofftlxbiabir +pidtrxbnvaobubqwah[nftxjicikdapqexh]mwssisitrwjgxhk[nghedqdzfdgxaqacas]hvehmhbxzfwylzdrjf[bisktoqalmaapoomzt]lwkkhvacvuqvmsv +bdqjqlmohbjvqlson[mupepkeeoofwydse]ekylhrfsudqdcvkv[joofkljfkmpknazry]anyojhejtzfofcg[zcvpdeswtvtngyqleri]seqoyrfsqawkrudmg +lmjegqfshvauxngz[ysmejumumaurgvgrsy]xrmslpnljfmaidojz[mtvwolafkcxlwjjthy]yjqsssxayanfdrel +qmmiampdlsscnqml[ymselibefbqnqakirdw]uzxhisxyqljsdvhfe[jhjnivjgqdfyeqcea]nxbqpgyhtqzcwoptq[frlnwadwwyfnndeqv]qcbefaxmhgspalprcdo +tavfmtbizkrpnerc[kmenfsatjafincrwrlk]pbbxvydrsqnfyap +hwrkfzaovfbmrqhff[qglmybgnoytlkma]ibbbvmtqegqqxdk[gquqtiaqekcwiudebb]ozhpyabnxipgwfs[xqcajsdxhwpkofa]ssaordrnwjyvmcmjtp +pkyhiseqcvejtkbqcgf[xvgqerenvyizecof]sflyqnazxuwbyexzwyq[zppuknfnnngpwihe]hacwithomkpaveqjrs[whsspxqxxqihxrmqxvn]ifsktqmduowpuhck +xqctscaefqpvqcrm[rqbjdsxwoynqeoubwz]zycfrxbkijaedhkr[rzzbvjmogwxgcqa]hpzjokedwwmsbcrggmd +hcbohuwdyeacvgmbmea[mmpvzmjiryorskh]tydknyaqhgcxafmqj[ejadhaojfjlsfxs]duohhgjdfjffvwzcgel +ltlddqcbkkayshw[qdedbdppzuqdhfaxt]doedeeehsibaylpsnk +bywykrbttmmpyacsoo[ghicjobuumyckupnmw]wzxuueyajmgprxe +gejngdvsephfgyawm[eahzdehzhyymhcwx]qejrbkjhhplzgbehwdw +hobcaacuxkoxnutlayu[yvsylobmhtczpxdhvh]qpwhgyojuomiubmahcd[pmspsmyxaqrdvcpwnwj]ghdvfbhifxhphkseh[ntyabnyuoadseevhvpf]opibtuiwjogylqzt +bbuecmhireivvxmtw[kkvuwrudhmpqpmqr]cqrzfeasrpqapvtjqnz +uxsiwqfamsnemtcqyym[wemijyiqgxbcsvdz]tdhlutowbxpxrkrlpx +tnnlwlvfrrluuxjnvx[fgijrjghghgrkfmfb]lslknlacvseuzwy[acexgqeksduhjpf]enxevtqjetnyftgrad +wiegevfedudnajr[uryivbxbutbhfuh]zrpurmrupgeggdyc[tfykavyeulosotky]ahsieiakxnitxhaa +cdymukpgwzamxpe[ihvwjlomeozhnxq]zqlglkiyekzhkesoyui[dqdkxlczjrxgbdfqf]pdipsbuxwhibjytdb[ngoqkjeboqlsuic]efcostvlclbxvzhloan +uuavzipkjlcgutoxrbc[orpbrqapdzdsagy]hbgwsmgmyowonxftjl[wrimpmzmwyjjtnkaf]qmlpvrkqhqbdswyyvpf[lpjhsulqumdzgjxuajn]yocpoqqrpuquduay +wivyimuplkhmmkxioub[vqfixqklclmrbume]trenzswrpqljwctfat[ulkqyvjjpchvkpd]mvlwfrclcfqziho[pbmrqudqsivfemt]osmrlwtwstidtwmbmzc +owpgvzzedsxwjjdeuz[kyqifdbwfxcphnb]kyeaxxmsplabrbd[gayquqvysxjwpckzlvj]tiuxhodkebirvmdb[zhnicexwwcgbbnfd]hcxwgyjpphxocggfl +vrjvymyzflpaqfy[fokfgiaiyyzruyt]yvfrfomlsjqkvtps[mprfrwzeokyjmdetnl]znjipokvzxljjgqaw +opczfzhpovblsevqcx[twcavjnyjerbqfqvooy]tmyyybovoyqcygzzyk +gpifunuvcpqjornc[wcenyqazsxzksun]dijyypqoxxmjiyi[kdzvguquhohgsghqqko]tzknqsgldnnbotqnocj +xtnewbseisluqott[ukktnadfrptzmvmnmwe]nfevmvifmaaubdrytcb +uvwgvqvzikkvvaltpbs[darnokckfpuiwvaq]qjgglscrdhximnfg[cplqfytiupsnlwjnz]tjjkzojxijhhghoo +mwvyjvnzfbptvndlui[dvpxdnwzdssddngva]nkvlbcdcwjumrqmjuw[xgrpriwhdpyxvakfpsu]jzugamflkelhfrzswca[hvdnwrkyrvcdkep]kqyiaalprdowzeudqvt +zahhurbvayisuhkxluc[dpkhtfqcplnlwkr]moobahksmsqtmxasrw[oyxemzzmvwvxrldebja]tqnquzqoslugwcqcwtr[vibjzqdbmsmtxckkkn]ylujuamatwbexgo +ffpiprpoymeaccwoun[avnvjzwvzowgthwymt]sakvpfnqtnzdyhodzud[egijncssvgvsofu]dplbxmzfihrpopurlvn[knjefyormeaeoni]ubcbldkemxgefbnjcbj +fpyokxpcrydmqzkgr[gprmekopimtigwz]fobjyaxokhstzjsgkw[njzhtjqrhoynlzpiw]svrqxlhgpckwoat +srrcdyevzyzhxnx[bbojuevgatiabjudws]zoxxvzrngllhtrtfm[rxoiyzmzwoenbodp]keodzdiobtdfgrxzgye[akofrgfwqtqblvntv]rfyrjcwbfblulkw +kxuswiaijpaejqzoxes[cgyhiwbpjrhaacwe]uqqocaxbsotoaei[runskhbiegmjwfyjv]qgnmhdcjcbgbsztap +kvzutkvgsyiyrab[zhbqkvgbyqzgwvfpbf]nhtaiwzmvrssvxsrdz +tncgsbkllaugseepp[axryamrptnzekcb]xcvqkfuggjcfqhb[mtmzyjnvrgyuwtev]xziofjwvnbsothqzdm +hmjthvqdelrmghgnvxg[cvfmsllxyxchaglntl]ikpeldmfhjdtnvaw +sdhirfhdcxlwhxevbv[rfktrkotbfwiolxd]bhbkmmbdisqlclttbi[ueaqlmpvdaoxhezzg]baphbkfivkwpmtj +crzkarxgbgpitxjeunw[xlonohiojoepwnuhd]kalfjqpazwmwruq[erssxjpfzosbcta]exvgtqljewfuwioyq[syaeqtgrgswbgbetkzw]ofnozzjtykajqcuc +xdojuclultxptlxgci[nkmxgmiyhrrfgoshmeg]zqxcexaabvdjcaiarw +rewjiwxykozqjzneh[tczrbiawzwtndtqnew]yxrgwvnswgyxjvnot[khomcpuiavkhwjsl]ksqiuqyarwwibcssseg[dsrplcalbjojxlecjdo]falbpuscbjsdxvyn +dusvvyynezzobcrt[yrikyxqxqreoqcyyq]vkjxvnlnmleqybmgt +qzmjfdvoruomeilaejd[ksrwqvmnyiessfejo]lvhmckdfwzoxwmydxm[icmiecrnoqepcuzctl]unxwrfwxgnijdxqjc[tuwcbylgfhpaveyak]qslgbtviucbmeluf +djblesvduxlxfxp[grmuswjaheivlqvtst]yrqstsaryoqejwkd +kpyoqmyglnrmxculu[tuyuqjronsgluls]whuymvpcdxvxrimvmow +lruqeoicrisykqejy[ruqwiitwyrsithkyo]hbgqgiywqwsclcsn +pkpmmddfcezjrrs[rbzbxotrbqlnmlpidpu]aakddaqjvbbafbnk[sendmtepxbcpttn]udnifsqhogqvszi +foqjzmqhghzmymeq[isvvkjfpmvmhquoidkk]tskrbirqdtjpxolwzw +pneojhviynihvnv[meuldylhohlfwsxp]nmdwxhxuexorktj +gpnxdnxmueucaawmctx[ggcizpwllvbffytwv]riqcitchmdekosocp +kcoafhejmqsopizo[lyoqftddzxuuerafco]zrvrzbmnzcawaydwg[bhnmhrnwpzmghrprzzw]qcrnkmyfcdoymceacg +chcabwcrpxqnelguile[ckxfqhnrwlulnfgxjb]toauhcbsxmeirtlyy[cfgmasaieapbabcgdd]ijenfrqiaeiehllwpvk[ciymykejvkzxsbxy]iiyypzaxohmykgbzej +yeqhlpncjcipsmtzpi[zoidbyeatjrlgmi]rcrhombxichyykncbwh[wtduqjwbefekhnwo]kqemsisbcrcjaqzdzw +nbxvvetblqcarlcku[njrccfhdvxtarpj]rhndgwlyfzaeubc[imtcezhovdlfyixzwm]dwughoowqyazwaziea[slarywwdukqwygnhre]efzdruetqfoqqxusb +vhvbnbyluqqaqzolkrs[fbfwkawbihbzwlrhd]npfzyqkoxlgkklgxz[zboinxtlzrqbwcqo]jqhvalbjqaogtyn[razwnxfkshezamemtr]nywqcxpvmuudyqo +jubvozjfmykufhrkk[qhbaxcvcpyzbrwjlrij]itseilbvjwvzlgqjfe[lgxynowzlpqgoyrk]inolsbnzxvdmvbrvwqu[hjzfopqwsuqvqhb]wffwgmhjubihiqkpuls +rqnjadbwfosviivshb[rutsuesebrktxitgy]abukeyordcrrqvrgf +bfveiveawwoqyluxwu[trxwkfvioqzltgafma]swkyqokgtrprzzit[kuziuekaorgdgqjgi]zudaehzrjfzogiwb[fyxwwswqrbwgomriqo]sqfjrdskmdvalkhchc +pnrvpotetwyvodue[xwkxyzxflrvxdfogk]kamxypekoelgwktq +etjkovmlbwryvhv[wvubzziqtxbjvua]hmrqokvqrctugqdazz[ykobpstcxdqweotsi]eiczvmdcfjpvhdyfnci[eeklndzunbzipcqubp]tjsktxuorvbnisy +fnexznsqqbhygrm[jgnmivchcvxgssjcm]klqcaszkwyzzecve +pdmzjundpcsxbgplk[lbdsyrmgxnatuwk]nwrhpgieqrtzpktaiqw[dcxtjtkzvlxpibanjma]djszxtofdcuyfpdr[kzblikjgqfiaykr]yhiqqurlkwlrrjo +bwtgmmjbtisnzbnyedf[iniovvuewpetwsg]dgvjyrzfrqcozekvp[xsulvxvvtwcxuvbxau]vvjyodjlbbjxigdxvxv +jcanelvhybigzhplc[lhgjkwbpdlcybzgacya]uwisdadjoniyerw[kzcrorifvylivkhs]ssicvecwpkxbdwq +tuxlnjuyudvhazlxdf[oknheznyzffrtcb]joozaraxuivijskxblf +rvfdfyaemhgyeynw[hmmkdfdhadrqkxzzmsj]ugfozgghllznjhdxw[ucrgusuuqthlgxx]ipiercifxtkghbkf +jgzrilirvzcocaphnz[gyrvhettmmhxaxbmyg]ecpwkoozcgtpoac[iretjtqyscaqfqziu]wqjckfkbfoqmmjkuhqe +pswuxyynrpckrquj[wfbedboaabsgnnzzzwl]wgfrecpfkvlvjzl +zkcihebtrfmiryqkd[ybedpynfafkkrbfdm]ovrsmnhexyqblafad +pbkoczqfumwdpfu[gtcvqjuwknlrfxre]crpyxhawudbilybaomf +pnagrmxhmjftwltxh[aqlhxdwuzrvnwjwl]xhmgrrajywnizazyrdc[hxdxewvthhrwhsva]ckluhnyewiiqazzmvd +amjksgqzgmoavvxtov[ekqixufaaepczzusfga]fvlmiilpsqsgfgg[gzcyehzgpujyquhrkm]caaocajhmhqzbacvpog +hitezskizncharbzyz[nbwuldsjxkjezjq]monndtwsxuikupvi[iardznrxkorquvyvwlk]etzyolkxhyqsdirbaj +ocsxlxpsgimcvori[gawgkxlilqzeakhzds]bodnyayaioozoeg[bmaukrfdlswrnvuwy]nafolaiqfeendahms +kseklqtakbkzzhfd[ghivxwcqlgfgxeot]levjimgmcfpgqrjjic[ixwevpbqkyzthafyj]azdxqlromttwteeqep[kxyiyoxyhvgqlmvscwz]zxdujwvngqyoabmrio +elgbshsnykhiyndouao[nhumkawagmrztsamd]fwqupmyuogneywsyhub[zzcemywfdswhvjpl]ockclifwawqsyzt +hyetqdpieicmycip[ciwciijtqspvydxsdu]zjrfhyctplqvypy[hdewteddlqfaoifgy]murcplulddvzheegmgd[rooqfiqsnkjeelfjcag]pdzzjacxzdzmmgmqwu +nufvveulfkudkrvskbg[cdrvqfofoxmqwtv]jzgfbywojzvwumo[vvshcsjnhobkayk]gkwnyerwhezneuze +qhmjnzcokmkmvclhfh[ywruoexbmjwuxvrk]lswliylmniqdgybtyx[yjrzasyfroiuaeps]xevbxtsyjknqmeuv +crwelvogceorioqm[xmduhdacxyzodslgtv]wilmwenmmnwgqteftrx[zonwpkkjimmmhbrtls]vfbovjoabzwjpxd[jjxievceapgflzeldwb]onucskcmpkgsryl +ujitrvtlzcrtazmghgm[mculcmczwibnuhtunnt]izqgurxwxhwboygvmf +lespfnkqubxfoqa[exmzkeazfrfrkhzufz]xpunddczqrkxtgorc[ymsbogpyjeimnuola]kufhnwzukrdayts +mitdlhggspwferwda[fcwhldszpyfznayp]rbfzewqihtcwtjznsp +wzhbemsmffcmcswdvp[jcbuktuymokdqfjj]zyhqthqbczupmcmkhi +qulvtldmhliyflccbyg[mqggwujrznjefvjw]sduatqntzkkvgfqel[fyxdewnrtlkkils]utxmideawxrzpewmee +ggpinoooeucoxmezfi[ovisfbmebypyafknejc]ccqkrmaimxmvxhtain +cqezdujipgzaara[afkpzozyzuitollf]srmeiyjzqjruima +ivbrwakbgkrxpilylu[eewfaajedkwjbdrk]stsichtqqsksydtubf[umxwxeikoyehrou]kwddyduytdhdgdbyn +vowwatzholrusydvmdb[jarugsbvowdtznwx]oofschlksdrodakrk +oruwtttstrcvcgxz[cvidyuxfxluddzxuz]jckmrrmvolclrbam[dqptqpdwkpewhmcax]rtfmeakahrcbazlzsju +vjrkcrzvefpxgardmqb[wxmurzwunsvjaxfhik]meiaafxurfgikqg[dkoextitsnfeorgoihc]diohmorpmlhisrs[ibtzwvoovjmdpfi]oelairhwcbbltmjcjdr +miafjehtxwnfqzxg[nlovpfjpeclnmlbm]rleupmgzewtvuewypt +osoaytxzfrkcljfjv[bbpjqntkuuwpgupxsy]bgryerdaukelujvayjt[gycrjaelxuemeosc]jgdfpdoltoqnmow[yfwoyzixdzamgqweb]lvmnjywqfjfvyxhb +oiksidcbtzhhtnegqa[vdxnacjfxbcsjzqdq]ixvwmdqdaleuzjniki +ngbyqfvobuxdnjeqia[ksktvzdyzkvyvjrgkos]xwuslzgntfwrnyqrod[cxmkhhwyremunrbc]hijkgxizhlyzqfaay[ljwayjqxyrduyoebm]ancrkgmzboqtwkjah +kxcifwahsdmqasrmwi[aqzdihesmgntomgmj]jkhmcqvxqxtshprsy[wgewbxfsobokszgsivz]zlpavaqlwvauvedwf +ibhzychwgtvobvws[qaestubbbtvyylbr]ovsxlggntxnneirtot[kgqrkbiqracxbnbi]lzpfersavecdddsytb +abjcqoeeqfhvqmo[eferwxtafaxzidjzbr]qztbvxsaiyqhcsdkj +uqqngbvhyfxovmdods[zwyybohwrhprvxaaaio]cgyaactenmhiokzh +hiqqvjquvdkfcjwmo[jzrxnmbrqfhjhvppdxm]mwvibfiltxmwroeruo[fasknewgpsmftnx]aubymogtwkseupwmr[xnyevhhalilxuxqqvya]mastwtyfihocpbjngaw +aqvkyxqnjtthgkjxr[ahvjgtzfqetvqhz]vcaijasfqaygnxmdba[loyjulxsgyldkotlefn]lnzykvlsbkyuvnqb[iqjxfxdmjgyxboyzr]zbfwxpxbthtwtnjdaw +iweumcmplhykolkazmb[zgzeryniuwebpka]hsuxltmwyxogseiogl[ogacxzbrbvopihzm]ipogfmqtohqqfvowzl +hlvbzegrmbrgoepemyh[luscnqomtcxbpxjmxvx]tipsuhgnhdavsubyqha[ozroemaxbdbcpnydjqs]xqdwngpkteoyyvkq +fgpmkosjnfnltkfy[sxqzypihbntsfnryubc]oygetjhbfvozerfzw[nwvofzjfuwdzxncwvo]nvbtoxgwkmhnyox +kbqkyxwacrffvkoxmb[tqfooaoggaauopcanz]ptiakppuyxzwzpua[tefuhyaqzyeteexrsj]hkuwublifohismiqg +pdbrixpmacobfnpg[mxmgtvdlsuyhjnjxz]ghuebmnxzqfljxyutl +ichijthjvilenbfg[zeibnuadotzachqyvej]qogvchvkfeskckvmxw[plyhbwjrhhnvdumajut]xazlyayoobgkmevrpho +cbkznopiuqsssvle[gecuynehzvcmfuzcaxz]qfihmsdjfsxymvesb[jtriyipbkkpfnazcj]wbcwllfdxxdzrimwues +ntxzlslwvxztbmola[duloarwqzkzxsfag]nzrsxasndnrktih +fvvowikdydblgts[xozwhuhhngdjqnbry]hkcwbqloymkqjyzpj[xfwuoehhuljposct]ashitwoprqcooweytiw +ynbifagloxgkzlydhk[qoxltvqdpmqhawcvef]wfnbtiyjafaqfujr[crcuopstahopywinvgc]ppxsgbvevlrkdgsv +tdgutgskbatswuizuv[zpmhakbnxnkehhf]ffuohvkaxpiptot[zlykjduigarhxygukw]bucqoskhlesclyzbpd[igdjnevmqlibrugc]seyjwcizckvbncjwon +holbjgzpvhqirwrxts[lpvaadhoqjjwvijk]etjusqwbrccaqea[livhtrfodwoxnkvk]dmprijbirsnzuptikc[icjaaepybpgnorie]imtoivdxpujjmlegqn +ljywtdshrtzqzrln[lqzqgywtrpgszaigfv]vjyyvrbkjdiiminfas +xfluerhpuqsqnrq[rtxglsxbetzajmo]bktotbhryqxdqfaf[cptmsctjrifdojglh]qzpxnniqwxlbvnexlg[vooexmzwbpulnxxv]eumwdzoixhfxkoavu +xmomvhstjavjyisvhs[suremlzhaiwhikzzojb]urbiiuvmveiapcybgz[botikbmkcfsghtgtcn]jbsrxdkpxnynfibgxyw[agdmtydfehaujynym]xfpytnqyoafnuott +xjzhgefdlodsdahv[ihwwnfbwhcjdbrdixy]kmsckqifucrgpocyvc[pudtuuaebkvsrflz]qjfwaaylzyhzerjbhyn[fsnmlxncwzsdsqp]edevlblbzmwkgkfluke +qxlppzrvoymnsiyb[ybyeqxwtoberzwvcdlk]zsofrmazkapwiuxwjjn +jbdmjeyxyksaonmswm[vhxyxtashfdrzjzytoq]jpkbmclxjtprrhmaz +vxishfigjpmdwufh[oykzgieieiypyrqaxdx]etgleieyrezvbcg[scrtyttykipejzmuhy]oxnektqrkndltaixnj +jnetcyoxmhjfyfjxm[dezndcwpoghexum]xloobrzxrvanbbh[gvcaufplrrstvrf]jgdhedqsxchoorlai +enbtwxacyokhcwyhxp[ahjgrmfhavhnhqoqsfs]ahdcbzojcfgzkjfe[gtjphvcbwzsiohlha]lwaphixwqbmbqhyoccv +arwtwiiowytbbjsumh[iwdhsnllysydgbcuxw]kummpwhpyydfdaf +laidhzhbdwoezqhi[eccvqcxwasyyzqvhrw]oobigxsojqsyijmjmu[kinacswultmqsxdhw]xlildtoykeuzgzl +fbwcshbijakfapcqzj[qktwqwrlnuktxjvuvn]nbzsrphskcxzuzho[lrbnsyzvrorznoq]ewytfrszdyhcrhpcx[bmzudjktpnqxqwmblf]xtwqqocsaxoluhsh +xgnhvwkwhfbprypnak[yuwpjkfdxygltniuepa]mmbkjavsboilcvpp +hprznssbfrukcvu[mojrsfuktavnbhzty]ipdxnxmtbvsazyx +tfdicuergiqhvie[wwpqnqkyfyhuqlb]wovoujvgcwuptcqhkd[whhyzgbflhplrff]kezriqiamcvkeifegv[kcbdxrvoharumkgzufn]xypaikbmpsjqcbxrrp +tkqpijxftrvwkam[yyajdcxgzrkhkroq]qfrbvprhxlpgunqqs +fvwgqznbhbrmcaubz[lgsawqyuhadojbqwrwt]gzbvdgpwjuwqsgokqy[zpzdukphcvdqgpdoex]atanoaretkhxbyzw +fispfedprcrygxs[xqiggqkjgjhaskp]thgqnbgscmrcfqjckbw[tvueixxvxlsnaupqed]lshjncmwxgzzczjssh +fplljoayuqmjtjs[vnlhbmvowousilhym]emygvrnfsofwobaducv[flrnwxzgkghpboubuh]sdndpovsuohytnq +utkqxfkbxtoudnbh[bjatbltbacnlwzlbjk]eunawwbizxdytndqc[arhtjgntcqetkeikojq]jfooeguervzgzgudb[nhifbismjhcwqyt]xwsxwzwwvtqoadmgvoe +bxbifxmedhwkesbmjff[ncfbdgsqfejalnqyar]oifushwlnfxghktjhtq[gnapwycvocshetc]zzslupkhadbieerb +rrotstdgmwqowfmf[zlddfgpxgucuestu]dvlbhinllnkxdybha[aovlzdyhamvvcgm]dzehxcilzoxrmcyhiwb[xkeszyasnqsumpx]bnrsppzfvjhiyafpk +qgpylzwwdjxmepsc[bumaitztsvayatapvl]gotathwcrjrsknrfuk +odbkgubddtpxdsgmhvh[mbgpgqafpcrymkkdpsd]ieabelyvewiypbkjm[psowbfplvsxifqwq]szgntjujujycbfy +urqwuzkruqfgejkdoh[qxxkamiyhedlffzg]hnfntvahsaivnzmawf[mxcrmrqtgmnplma]gxcsbxvqcoxpddj +qzkfvuxmfneyrpysh[clufxjecvedwwegflp]rcxzfazrzbgogna[ogoplmljfwvizwniudc]yewvacqgzcjgdnmasw +mgweqpewhvtdjnjdbu[pecantesazignmq]upotybqiovoujemqg[ipzggdcevkbkvpyz]wqtflwovevactij[ednlhfkzrtfwpuignhd]epfijiuwnczwxdmgvzd +lavqyaejctfofhdend[enxgzalvzelvvxdt]dkrlwjpuipwnqvuv[ishvyxwuhxdxujbgkev]euytwzxkpwccexc +haibamsiwfwmdvzu[aekmrvauzoxdbtury]tfgjabbgdrwbzde +gqoyggrpzhfgrkjjw[kwhwkctzmjdpdoeey]ngurqljoormcjarv[bmvadfmdgpwpzfiiv]fkfqchwhedeymsa[etqtnxepdmolklpa]tywoaqpoowybxcoqq +vnvmbxxccmctcba[ncggihzavxxxrhb]mblrxjgtypycewg[syiizsazwqrhsllezvs]tpzocblnycaokaphz +ffpbdxvenqkihvvsi[bbukwnounmzzxody]bzfefymopdtkpdm[sjbemcyhrspadzkuwi]xlhinxfjjeajzuqjkuo[zfpeikvvdfptpxe]dhsjhnwlzlcxbkz +gulvdtkcmjewjchf[auqodvrekgvzxzyiwee]rarumiavqvnbyqu[xywssgnmbeefrqgr]lyyjmkpmqxmjbughzta[avdsmuyfdwvzrzn]qvhfqmazlactaxtxi +vvqlvlsnrxwhoxfnac[sablzmrjccqvauyjfao]avdnqlseflqxtgb[masnpoqnvjtkreifrvy]lvtoftpiotxcstvu[vohbaippdypuwpkuip]kxffhmrvrbmvhecnui +kclmgqkaprofpmdm[bhbitgjmddxhbhu]hmasnpqsttrgtmuq +tvqcqkarkyqtpvea[fjqrifichijyykq]qqtmxszpmovzfvk[xrcoyhzyxwmqwujxp]nzlgwxpkuersepyhy +zalveeaqakqjhfl[uypjekwlbcplfcasa]sasiztlswzyhvpd[weglkkwlrrvdvfd]mvsdbveypnjsymtjka[kroszrkveyammdqqool]kgmxohwwgmvcdludvdl +xbroawhwunnamvnaogo[uzdvwckcbkaahqltp]bxudkhzxrykrkffaiiq[ljfeimkibushcpclbia]wztapafqrfdpwcwpyz[xwzhahnbnaxjorpkaj]glhfrkaiizzidtmfi +cycyarwdelrstoi[rivlkfszzvyljoa]hkjtyvycydwronsgyd +mbdqighfupmzacpi[keeoafjlwzqeoaryo]vjcwhcjkjkandqir[auactffhpuwzgzm]ybkwzkxyevwrphq +cpiuxmmwrsjzbyqkfms[buipqvxsetxzsgqi]tzwpfhknlpwmtxzggc[nidtlxvnowvutuqv]qsohatjnnizngzsqxxr[klnzvuognkllhhr]clpjgdupfpanyxwjg +hhtduiwmfhibnpmhjm[emakclmaqjnvjsjyt]ntebrhiztekglpmhsrg[rgehmkrotjobrtah]gzlybshvhkoznupnhr +hyzvardyeiddsgk[vszukhazfkwqsodz]psztzqehiwcpifdlna[igstccorevbmgfae]vdapqjiijwygxap +towtxxuitgwhddsua[bydcnwqycygmimbrut]cvnvgtuiuduzjod[gpazublcnojkfnnvn]rozlfkywwjelmry[wvtxeleixyqstxjqed]vsuvzaskgyooigoczd +uywuytlehdznyxr[goerwtisqdsinimd]abuktfxdobkfqabm +rolwzkzesawhyxddo[yuuvalxthkptulugzh]tagfpsdniekrekzkt +nstbvilzeselffses[cpgyssgpjimcevp]ehfkumlscjuocclfhel +idvdfrmadfyhafvyixs[igsqckpzuelddtl]eclbbakcdyttbtse[irchopmhiqbeloiqq]lwbecblskhopzyw[yjmdufblseluvukftkv]nnawapbepipwcsfz +thqwduckwmjtxwwmj[ppnucfmtpcsawxvkago]vojtdpukjwwlnirsvle[cscyjfrxjlgxhyu]fldolxqfbxhigdom[tgacpmzitahxucqpzke]copdqvctocklhvrq +maseolhlyrjuoqdazl[klgwgcdfwhpwmnlklcx]jycbhtwurlwwsjyuubt[cuabclvzukvmoiniql]pzockwxqjbtadsspl[izzcraalbnmcopcr]cqdxcrkdnwclxcitizq +ucyccfdgxaciwhx[txuygxhekywmyuaaina]szfdjuddiopneadpot[zpjsnpjtmicknxkybi]lfirzuldnatglheyhnw[rhgqfyfxlaunabfqxl]hplszylhorbrkuy +vmgeqazfjldqcfif[fuepxyjuuzxkect]ywoxrfdxbyjomjo +qacfshruytmlwyj[jpqmllbdypmnzqoe]sdhmtuefjbrmvmeby[xkyplnmmmcrcmixkls]motyvnyucleirbnmrys[zdopkcnnuvxmhrg]feeagfdkgorsubr +knlaaiwxponscqwtqla[jxilqsyolsnanzxvqi]itqqqbrfpcexbnecnkw[bpcxykvtdbxejlcda]mxodmdxzohrturffnwf +txvqlvddwpcysvkctlu[wvuoeprflcpycbghfv]ksbpnggnitrxkua[hqyiyucnvjqsceml]uwwwbxrjvodohwznlx +oebxtpwwjtewgkwjbv[omataxkuqenxmxolwe]aiepvclknbgapqh[wywlrbzliilwwvebxbl]ljsiuvllqbjrvqzh +jznegbplekeeohnf[hegaqbzbjwdhgkouzja]msaozvrtyshcajexwen[cnleoafnzyvbvdfndha]guawhzetoxlxmjwt +nytoqgolirudokcgok[qjtvenvrstrjjlsbvzq]mwhkktxfsokxxqb[pgswnhmmgzcrgjbqcx]amhrxgwmcnykgpuzfb[dnihosgggajabkoq]jtyxfrifreihydzwjdx +bxihyluintytvypxhl[kbnizownozfekbhmsp]sjgxqgjbhoftgmbck[knoibzmlipdnfca]ofyxruebaspanxxhakl +xhrlcwziflvahls[babpaszszfgfywj]gkquumhyqvozkgubcs[gkjczyujqykeifhsylz]fhmvopfsltpzijdw +ntyxwcfpdgnsyau[eqjxtsfneseakvrf]sbzesbxxrrmpmlazhi +lwakhsvcamfxiceusua[ymczlpqkoiophom]fiybjcxhftziivsrsok[sejyfiorjpptboakf]ipsamdcnfnlhger +ncgeewwfszytkag[kizbzwnxepsvdxsbzbm]fofhxxpymrbqvcco[swphuoqvhbpghtku]hvxqclwgtxxqywhhs[ibvpkuiylqazccin]oftqdvkbzdkmycntx +yhnhzwjjsiqngmhe[jtkcipgiclbqublpfs]glxyczwidjilkqoa[ytsphdvgnawjsctty]xdofsnhnpsylvmso[pmjrjgiwhqfegydcs]ylfcipikfzvmpjn +pwlhyvxnneepoqexj[jsnwzbjxibgqnpjgdf]qndnlnzxewcrjio[hccvunupvbcyptqdihc]rfhmapmentuhoiv[kohfhnoakeglvnasojm]oggzhzybuuupwdrjrtj +eyglfycgaoqwsqqnue[woaxqinxtvrhsbjjvnk]cfnkhvorifhxedbmbmq +nrqqggalpihpjyu[dqbqopedkxhoqqnp]qguazmdjtenlvzgoemw[ccjlmsdaajwghuikrnp]xrjcyfkrrfxddnjn +wkiymdlskwyjrft[ovucvqbenolfvvu]tzymrvmekxnlptynj[dupyullbzepmmrmgwe]fnjtcvrvzstijxq[elzfqhyjdyprzfxa]uszwjwzbbzgpcavynk +jrdliqwwffvgzpu[mxoivfuwuqvtxqmbbs]tvtlqzqgwzgshkpw[hspnaspqnjvwybzfzxd]clkhutlibvxzxfrgg[yujteartlwdhzfgsn]lyfrxjqcpkcvcsnsw +gtfhmxlpptgvgwob[xlzqaoawpmmjwszqmhm]xalfbbroilfuzzqm +gqxmhinpeppmdhbdt[cpoaeltrlzmfgsipvg]iqlrhncmkmjijjh[xsbdusetrksrxjiofj]zndjqyxwvmsnrbcyrmh[qnbxczovjlrrvilks]rfpihmkwzmgxcynu +abcncmuhelkxeph[crlbybjylvbgtsk]yvnbosicedmzurqcm +fbhtialrsrrtpwcxxh[pisambikwkesdtbsj]zcdseybwrdrkxeiylg +sehxfywgpznuuypj[upswvzwnkinocjk]nabhugsxhitlhis[ilrwksgypfqgfexvuhv]torregbntatolgchv[kkimpdkcxhsxyuczj]xpfacbmnrhcxnbgwis +hldgiynbgrfjcunattg[nwfovbxygpkwmxnulm]xleqlwcajqwnncww[waoaudnttcfdktcd]yikfvdmekcexcrhsi[sntclwlhouhyjrob]wqpclaistsngwfmf +izblnsxlmqjhxvx[qpmqqzakbjpbapwtlel]vmriwjoqlrttqpoxay[ylqzxxdpycurefadv]ftcuduceaycwejp +jqjtnshmtsvokhwnpr[bxprgnaltcsqdkceygx]udqckcknpvegeryj[zvjfvligrqxnpypoerp]zhzwojzkckjwgdyu +ohxpnvtduqvsihjt[eczkrdqlgyddymrdjfj]zzqhfijxsgoisbwpd[lysfkgekxvqspagq]kemxkdqxetnkyctjp[bknjdsvchfxflsrkuum]wmxncxrwwxxxgza +xnulgysrzxheppsiril[hdxgzhscbjhkcntrmsy]vhedyohrrqclnoe[nnuxdbtlbjvaddo]xivkwdwvmkplsvfaal[omihwmflpvrshkcoci]hekqpjtrjlsaomfd +hfyusspcypxdbgzb[cxbfccrumbqqqxb]ygsuxbxdfkisqwstqp[lqctoagvchrmggtmo]dgmcjusbvlmlvkdmnpu +vmpobkctlhdwqjyb[dxeinhrldspqhgeu]ndglldouuoawkiwtask[szkthuhxdkmfqoqwwgq]zwjhzselzvirjadzvr[rholepzsidriqmlepo]yhbxhcmbkvripyusams +mzscivdohxhfkdqet[imwvpkunuzbhbaj]tohxwppjtsjykxrj[nhonsbadufgsqiysn]cogovslrrwexgzujn +pzsteeyowqmhzaqao[qsbohgqamrksizzs]vscfiltkxbxwbdlold[psofpwfkxhsxllnz]odwbidqaqpuchaew[kruwykloeqpcrjzon]famaoipldevywnouele +tuqiapyobwqwpwbqqu[ycphsbdcwbmklro]medgafihivwegukhfof +lficcecamifbjwk[sdguwtafkigjiapxagj]hmeqrhxptojctevbdbu[zvxeefaytjajdpwi]uliqtzilzcnwmbfusnm +pvyzncrszmuienoptx[bigapupzitygcxstqx]rqikselsbelyfjdm[lyqmdmfyofksmecg]wjceogefnlgelpguu +hmddytvxqrazumnnr[hpeurkbdfejhlfvg]pedwizmuhmtpdwh[efikgkrhnagpmqypzx]ltlncfegswhwcxa[bakxhwhtvxcwcxtmofk]zwjvbxyvljlfaie +oxgoszggsifsgrck[gruwptjveewmfewguku]otchieijhojsyxi +kunxbbrdhibhtlknrq[tmtsuhwakksyets]xdugxmqcstdallfqgq[tticbbqirncbjtx]knkygxawcwdhefesu[rerbfffgddyehtvl]yasblwlhikbvjidgku +qoqnwslopcpytqy[zngrksptgviifcwbw]nuislpzizqikmgn +khmctigslwdgzghkbk[veaqghpizqwjxlwcf]aymehevjgpjgwruhyc[hzgzilbhyoazljsk]jocgjmooxqxayzsa +xodvowdhvnquwtma[kvlbfwwzeuucthg]djlyemkbpudpjlnrkv[cbaqlhuwfwwfvbdewx]vsjvsxsizgwsakpx[pzyowqndqdbkdakdney]eeylqpqpuqvdyyr +cmdykdqavxgeismtlua[iwviddbtauhirfcabh]fhpsinbnwrcpxdho[tdbgrmgscvzukjl]rxupjtwbwmtgnltbjp[vgzucvscpzgjnvg]zftzsshpmizeksiz +kfzmwzmzdpxabvi[ftkotbrorpkpfxzbg]hgbrsewdgnnqhxvueya[lkjknzgrbuzjqxwqseg]oyzaqahfuqtpbzi[yflzhfxwkugpetsqli]nowgjqaquqhrlxz +ktphtjqwsitgbaii[tjwcbyfrpupwkvzrol]smlczhhekwxtlvxdfn[mqfupholnlvfhuv]mvdhzncezgunydrk +lrvdftzasxbpfgb[pglmengmgfbnzxz]hbasbstksqkkqpwkcbp +siheyyvdmjiubhlapns[xfcaevnaoexubdar]pgbougfzkmlzjqygdta +tblrafqbjhwzbwbe[iefobcqdrypwnwidvm]olrzzrqgkwiefngf[asvmlckavcwtuosgkrm]esqsgwmiyxncjjqsqp +alvaycnbqdlvvnwcnq[jwxzjzgpnzmcampkye]hepmdlzjvxhboxh +mtfkavmnrxyfzvkes[gmwvavomsyolkahey]dnqosibjkplwzjojus +gbckujjuhwnvovpfqw[qwievsrrtusgzbscuf]bnrjcovodutibjtq[fxteivdfkpixonphrog]mnumbxikkkyeositn +remzamtzlhwpndrknl[xgrbcgdvlvrcdrpi]tnzimcpmxzaxsgpu[klvglrrepqxiiewn]lozcwxnclirneaky[nevhtplqsmuhykzqxf]fgmsbwdgfwjftndzi +aybmjypdrytigyyip[zafsvprjirkniuwr]wfdyfncywtdtzezdbtm[umbxrtflhquwdofgut]lyjixlycobwpwvhfp[xoxtkyhvwqgawmike]bfqtgcxvcfwtdpl +tugswvsgbsfbiyzcm[akmlddjckugylrea]fyzltfupxnvagbshlb +lcgvlozzzzpzxeoee[zsvjydznyoadkvyxlsq]wqmgagbkerqyxjnnx[isukybwewezizpll]odqwazjphoaqhzltms[gtqeysqpwuuohdbhcnx]yqtvojobgaluizidrbn +agnxxgirnprujhsk[hagcvuqcwyhmkdqmn]zehvuytegijhnfqnk[ytlokgpipjcviulp]hsomdskdngoysnbmg[wztsneomppnewhrl]gpkauttapxhcjrsicvy +cvnowinufvrjpiqtq[kuavqbtrcelpcuasmk]poksbapbwverccds[qdddbhewvxgfoldib]mthrvrsfygbhlwlkcs[zhivcpxibufugkpigzs]qffdjnrsoigwxqhaf +kovjiaxxjvzmzvmn[cmrbwjccgphtstvaiq]onqfbpryjertymd[sgmcnqbseodopnnd]gbgealygrgjnamdq[yrjuwjfvmsmgbur]ldiztdwrwmeqrohy +tluglhveqluxpiy[wrsgxdrzuigwzfsby]bmhqmnbecjnyutpwlbk[iifejjworkzrsaj]illltueflutteej[adfixnftjenvyrigmkv]zgsqagrctomzublltjm +fhcnrceynkcnnjxj[jrevstsodmhopao]zqapczirtxrunfhl +rzmxbxurpdmzgef[agevdburkuvnsrof]rhclixqpruwxuanwxct +vxejrazzpddvobzlq[dpspaddyabqzrjgvv]elcpgozzkqjsasufcv +iaodnwpcpresylkhyy[dltvlrxbvnqslzzyvox]qownkehbhjprbzf +kqbwgctrhxwrkkedau[occltggonhshykttsrr]snshslgqtlgejanlg +jpesfmiguicqdcnkm[oawppiwdsmoidvkcre]wfifgnhqeisplngcjkr[wevtsiuznmpapke]dqgxavmudniuaml +ddewtwhdfjatjlgrt[ceurnauksrgwzondnb]znsvkdkwsimbmdxfkh +hwjwuhdokecprunbju[jhftguwujsuetdriyu]vcgpesthcnwuwpwes +cgizaalsahfzkcxab[nehrqohgkmbxiufyco]xbnclpuepsanwrwjoo[kvdifptokbtlihgx]hgynbeebmdwbkwrfbh[rlypefyljzefnft]wwevofyexvbojyc +ckxkzlpwrfhwzuep[etqgjhcmexxvaccx]qqkhjttaudjpbjboeo[gihevbqqqumfythcfm]hraqbarwvqnmvtiy[cbnfqzxyjcpmwvu]lrugefybnoiopvzi +bbmhfnwnuhvdgmoibjq[eugipbrefcqiniulz]frkuvbhbdiaoaqdcaq[ksqqrrhjltlxvet]cdjhqazjzfrphjzjr[aspkvkpmwhkzxfeic]vkhbjolvoddtaasvs +rxkbkkhnaiudojzsr[ecdvrnjjyzyqjxf]uxctotuqtvambwea +saknwxxhcybeglwr[molhqlfbvopapnuco]hbbaomsdwcfwvoi[rlvhmvffqcyftricsyb]pkeuoigxjpwfbffif +pylywhhzktocomu[sehthaaqwkyerucg]cwfmpqudeylrtavze +vmawzgbfmmsivwfqclb[fpvwdbyrfjgmidxw]btatkdonphkxtprxfsj +kspofpgsttceoft[fcqagpbfoujjulhp]fkbxvsbuwioyngydy[hnoxyyuhdviahwsf]gustmoflyrtelseo +xyiofnffruqapvtgnr[wmigiedeszezgunm]vydqpobqqrisgtt[kolobhezpsiolofxrlq]abrzbbmtlqvuhxl +enzmvjyrzypbbtmbvx[izvhoqpjgqgmmvricf]dbghstbtqgqawqjr[irvprevogenchjy]gbiwvcxncbjjvwmshsx +uavpufepuqdbjedp[itqmeflkorinwdpjwp]hlrnsxymcnxwulsmfk[bayxjuxhtpcwafadefe]srrkibtivlskepjxamu +dlwhxttrwjlxlit[atmcusmqvonodkfwqvb]ilfdsqjtjbimpaqht[zsbqjwsrgxlxbjqmulb]feblytbapctmfuao +zfzicvjnuuugutgymp[owgyvyjfhrqpuukkgok]dfkfwodxgvrdqelliaa[xaumszuhzjjsxwe]ihaxfxpxjxcbhjg +gmsgnyadjfimoemyzt[fjtprppdzhkorpqoo]eyxayeizyntiumrgk +wvdatykekdfednl[kwpjrdcfjjklpdofpq]lidlhawqalcyigapvv[ukqjuzvvxehbwzhsci]rdrfhnobcwtvivgcc +wvqxpnxpjmzfnfy[xgtkzusumupupuqvn]vmxceafgkxhnosupdkj +ypfaupbycoerlpnhvk[pjrtdmwsmsckcfongoo]bjxlfxbekwvfruvy[uccfekaoczxlyigfs]gnvkjcwikenkmvgrpdj[yrtbyzxjkmpewjpbstp]nfwcwhereraqwxu +cqxbsrqdgqudcci[olptuqqvfgunmstjc]xnppdflvdcjfviaemlm +asywjbgrfvbfnkhnc[euubbvzujqjnsxtmel]gwxqasfbyjazgqodfh +gvnexriimytwvefmo[dtuxofcgyfnaiibqx]iaaodpjwjnkbrqsmdzp[nuvnumldfhglafg]dpcqqfdrekqdfyfe +hnwaqtrqgztvegfhj[mzqkcvhmqhzwmhlkc]kytpmyhzrvtytwvfkqk +latjxjyjkwwnvyrbl[bjnilknxprpwziowcjn]zpdvccsjiuhfwrkn +nowozzvrysgsfhxd[lhgxyitirlsyljl]nodxmmwtydaqkoxvu[vgbjtbbjqgfbssytsk]gpzprrvyvseifydxz +sjihqhaecgshhhdrbto[goawszmxrrdtoxq]qvywgrnewpsordounhw[oaxydcsvrzzunbizz]nzisqsdrmmsaqwt[nmyxmrkeainaqyfe]eacdicawhfuobezyao +oyztkiwsxqcufgqk[iyxqvktohfnoymgisag]acfhjawamdhawitvjg[npflzsugezpsmunukqa]vhhxnunvyxjtehyvv +jzfmuzdlemckyiccan[rykdnvtoavzjtjxtx]vcmkcuioriltvpzzxqb[jdgqayewkwcqpkg]ulsujrvqzsmnpqgvg[lshytukyfqhnjehk]cpwbeyiudngpkrl +uruvigtkkoqkfdbqkre[wyvcwnxixwkacuu]ajvziogdmzueetqzxxx[fyevgfzreomzjbsumi]ahbhcyjbadiacwjplq[quesxyjqfbckmnt]oqehbkjyoxsyczfta +xzqfptkjpiknvkyzzt[hklpsitbnhlozgp]pkbgrwmqrbhohay[mhphptvyseydwfq]ehswmqarsalmcatb +ohahitbjjxlnkyb[umyhhgtcasbfbxqx]dxyhbvpjjatkwvpkyry +bcixbnnzlqxkisv[tapovjggqzlwlmc]vwnosivvmdcfsor[uaapwzmzarenaplcjp]jdcpazyedcdkdinrrz +kdofbgwblzpnocgpq[scfdzdrueknbdud]axnfckaaghmrpfmk +fisxkiplryvtnrvm[sypuemhvxvohsapkccc]exrrwesixcvnhzpopk[hpsilxrztuukzksyax]lixfijobrlgmonzui +zjnlscyhmjmoofha[ezglbbmqulybnvf]qvbharzbfbbustsm[tdeqjfbfxeiknfr]chpwwntytidtnnjf +qildxsfzfukzbmre[jykfpbbfelicvkqov]pyemzfzobutliokrrox[uplajddwknupdnfje]vombwrjguiukbiwozj[kcutkvgruxqqcuykn]zsbonxyerpjkfpnxchj +pdmfyadwrblhcvecezb[fhqgurbenzitepyh]xhhtisxbusntgekaps[yefgbqwocpsexwq]emmlcuwjwvluecbfo[ohehzdjljocucatf]zmgbwenmeuiftywp +xhrulprzdnbbzenux[ptzrrcmdscsuryk]ognjzqtletsyrcy[snpqabmryhyvcyztmd]lhkwhjylportbbo +xphruwdeuqibzdss[ubuaiomstyuqgcgzyn]upkpgfqmamubaqhkao[ohjojarsqpjldirf]ianntdwcgclwmyzwjh[qqeajbudidxsqfw]nenqeljkdyjucrqnsgd +xuydzitbfqwpaafru[jasqmetengbkljylhse]wkqxkjwkoipjfhkafnt[uolbyhzhmtupebneng]pcjjrczeczmoenefu +ievtjpcjrlfqwisl[pzhzabrlrdeadbtpyec]sowfrknejwbuvgs +qcuiylijqwfcqwjisqr[icjobpbxzjzuaxc]pcrdpfgwajrudfhxb[oiqtbvhfvitjvuts]ctwyepzbqlrtwuclz[smugjsqssswocjyc]lhlncivlmhmoexsrd +yqmqbdhiciqlgdmf[rywqydtlwdocdih]ofxwyqckxktvcrlxsx[rxupkwzkvwrmhuiz]znbksfkkqxephhb +bgzhbpweidflkmmjc[gxozhwikjiygyrm]vykpmxdywyfummana[mcqteiumnmmoyiwtcqw]ntczagaqoprodvhxbl +gvtyicyxseltoqfgk[eozvokbnjytodemeo]ogofokdupjyhzdgrk[fucnzhyuqkcakflcky]zfgxqfofzfdxyzetc[kdgpxyithocprbr]rpqlihcmgthswhvz +svrwqsrlntabucyssj[trbqnxxvtfiatqd]isjqyfxsoarfetrtgmm[lnwqkkgqucipvocrk]cdcsuvgwvzurnxleuus[wqjewzmcvqhhgwawyo]arzledaetbnpjmwjrl +jttgsvurypqumflcm[ccznbkqklwsxmva]ooughikefyugfvz[rzsyqmtahohpmnq]kyotvedmsjfshan[bwadbneyfitukleqbyg]oyeonratlyvtfbcrs +rpbklfvsjmisbnowf[vupfpfstcrfdxipqi]wuftflxmtftrcrb +igqcfvsqbbvpmgflu[kremgawldkinlqnr]ogcijqlgvrvbloj +ncjbiybzlsophbdemtc[zszwhtluxpobqclp]unvkyqmemvucdtwt[bzmibpkgwokausrgo]btnixophsknmjrqozwt +gxapkeestvvhodxnp[xlvglgrlzjdrpjrps]sephfhztipqaftxnqp +zalwvceeodddhqqyrk[znydhdhxhprlmip]bjijtiotyvfgyiou[odtkdhdrwuzpgwkf]kldnjprzjewdeyzmdua[wsdyljqvdmfdenajaks]zcvlwqkrytjsryab +schsgvlniqevsrjfkxw[drtzpizdeopipceke]bduaeqelcxyvykt[vhoefhavfmuhjkgooub]tzgcfhwkfuvwcif +wocmjawhtyhxksjiktg[hftunpxmlvyxauvnfj]spefcqpimqgjhnou[gmzejgwtyavnatavwju]vccngpxjmmxlruac +igqxjgofompnnrsaxoh[lmmrwzhovfloeps]loixvtpiyzagyvgq[yaiiiuvpjpuldqk]jwpjsgmvglkzuiepr +jgvoejrytatxvfqwt[hinkejefiqlrpqy]cgmvjuyjejpinjunld[qcdmwbqbqusirlxh]udhmheqsvmqmczbbofh +qffigxgklwwslnts[gwhobujjovmwfmrg]menqzjmmxrgchttltek[fwegvyhranuutxgxec]fwzgoobvkjekogpfscr +qlphzfkuyrhvkmsfxmb[unvtasxalhelbiw]gwqjfeftpkxtfiru[dhkyfsvpktyrttk]mypdaocnergxlnbodpi +pxdqzshlqhkrhzwcqkb[tudazezhnktsxxexyq]ybzclsifzrgndcaxq[ewlslzvwnqqwvljgo]nwnyptvummeraaoow +ysivygqkobbtznpxy[ydbgipznapsnkzfq]upackoodqdqmpvbgc[qnzvzwnbwrvgvwn]imcsgjzzaeltfxyhbx +hcqlfxoahajthjesrdy[nammwfgfdqnjewunwz]pdzecgfgatymrrntt +vwpdygtfuvbryipr[ehziaqbphyzzdolbfsv]rqxvfvafrauzncapu[dvqlgdgkzgpbjuihbl]sdtldsvjvvtlvjdgd +rajovnvmoxozjldjd[czqnvirgxkydoaaxr]dejvwkgmpwqvnvnzzsb[zwxifotwvljvpkxae]taoulidxuvefjqxjdu +jywqykajspyzvcw[jkqxjzfmvcrsqszgim]fncjgfxwbvfdwujhooa[otrkhmvyonynxsyap]skgdhtgcwmzixpdgmjh +wbkndoivecgnkrid[tpdmkrufmawhpijryk]untkposunbiezua[njngjktbavkmsozyy]dqotrtnnoxxejcz[nyinrkqzxnsaahwa]zpdibcyegeumjjgowz +gexzzkajyulforpnmb[mwihfmwsdpjjsnaxmme]xavowvaqybvqcqescdq[hjymwnhorqcdkoxv]myycpwmcpxinhru[koqbxfaoankdcpi]hgdktcvvxvoolccqcy +alpcsvxjoouuhjrgzo[blnjpvnbtcufzsxqn]ipijmuwbljfwuxotk[sgpwkohrsfeypqc]vqlggpiytetmkifwc +ixbszxrkuuzvvstrn[kdgfwhiapjrtiervwi]iugjmuvqljcbnmumal[ajgjfwerxsqqyrxuvob]qcdagpdvlnicajqcooo[qtuiukkwxyevxmgijtm]bgfetysdwvceqjc +pdbbmswfeutwunlcm[ywbxptxhgqpjkpeenbx]wzzaxgyiztbdftpm[lbeexhgaqvezxfef]fqktklfxugwifcfaio[ucpewlhkqnbsigioumy]cawftwrwmbnfmzmhd +xmtduxirbkbxjrqkvg[ythlqfokwjfwowrq]dguxbidgwelcrbxahi[mdumdnvbcsicvki]yhdgylmjisngrkcnbne +yzilepuvsfipivcroyu[czocwppwvwxjadgqpc]uoypwqxrpcpdzmsyyqx[mzjaguojtnjobsvpdx]vnsywqfvrnpipenwka[dtiayvtdtuyeqlddh]wpxkwbagfqncorkomi +qyebzyuerdwfocyr[cayytpduwkezuatyb]nuazweyhjemncuqpp[gwadeldyzfsvyqyk]gqjdzsuylxshtoayat +eliktfnkrxvywmvr[tlnexbwvbbdeupd]gynrdmuppfbawfcb[dqsidilgsixsudputz]odwsmpcptosjdhrp[mumunqhddegofkrpabd]bnetmxiqkwhtcsgpuui +wuozzupdubqhnbm[siwvzeelxcodzissd]niswczzlnrokkhrnd +bjxpecnvcntfbqdyqy[hjawjkugajcwmouz]ipusnakbyyxmqhyislo[xcafwiwiabdlxpaqqo]vaemogopzemmnilw +dlczcabztkrsdznjlcd[atcfirjxoipnvnoobjr]ujnimmhscetvevwpj[vnbwetjzberefmavwuy]penzvgcewibypznzpv[rqsqdxopumiqfftcb]qrotltpgkmzcndx +juqqbnfozoikxscqata[cgretlqkyynhwhmk]yiehuxyidjlzpjs[jdnlbxkxvsufsduoulo]ymrfqienfjrrgraxfh[jlopugujyekjzrfet]hqlqjkulbfsnnxyksp +epcyjxlwzmxwlulhx[pxjecldoxjwjkrndmir]baneyblyinubutjdi[cufdnjpvlwbfqbulb]dbzgyztjopciduxuo[paqntbrciorikaw]jbpsfzmzxvxlrgj +euufrqxfhnfdzlawui[zwgpectzebtpxfwbym]btexmfeuilnoqsbgmz[hvnxaanolwzkygx]hurfyrjkanhjlaz[vdmsczzhobknlhoslpg]bgitrvjaildspbz +gaweiazdfuixwqo[qedebtjxaewtracsgk]qnmuhjsbvqvcnov[aabcxwfcazxjqajv]xlhkehyvjohrqkbzyow +uqxzgyclomagldxv[amcvkpboneuscronwcs]qbeqgbmrdcdtvsc +xgkenttkfbysllows[bamxgmibkgysryjebgr]dhfiqnlocykclbofdzj +ppyfzqrjpxgouxmsduv[euokodyohaiajyvsrz]xfxsvtjasezevkjwjk +vcsgnfhhjkjssirc[kfdwqpdjaejqbfaxu]riqzqfwmwnsiqgamwm +tvxtikdqugadgbux[niaxwpplrlwrnipcnnc]tcunnqamexertrdm[xkxjepysgqqdphb]vnxvtxntrsqrfjaz[akxkeqvlxgaorhqnd]sfhwarxbzfbtftuflr +lwklfaiawghiwljxxow[oqmepnydmfkjbgkrjaj]clhguzdrfrmcoslsghh +eqtzgxqoviujmxpg[pkkbcdmlkvbcppqrm]zjzmsjmxdkaknido[sellbmhvshvqdsslyq]xuokcgfaxstavgkni +gstjodvjotzmvnm[mfvosfrnlksillaqs]riecejrjvhdrjvdl[sznhzufedvbdhbeq]msgvdfzoxeykqyx +ivwoejkryedvxpi[autbisivgebnntgixu]papdjtvhwtxgipbhes +apzalddmyxxmfysm[cdzptytpjydinlfdxa]gnjxiwepetlucfl[izgqnvcdaqkzgtpvwvk]cdxqaizjmvdnxigkmvm[cdybhclfttdchsbnyzs]xlqahfrmgnowlgba +slubhmrmovzbgdw[dehwvsngduvcfkontgs]zeiqylnomqgevvikm[oubxjfwewqtdjwacb]mqjinmndnakfemp[mccapdxlrmrevbuaas]hcjdpjgnoguztrdjgbt +vqeogkqjnfuayfpioi[rnkeynfubkpmjalnz]ybrwpzhiscwtyue[vnhkeaqwzawibjnvnos]ctmmursouxvylixiqko[voqlscgdnaelsbxcshf]azssljeollyzjjwkxin +sanarwdtnkaemdsoj[ojswyaadxpnpzcm]acjrepbjwnnpncdf +uvankqvbgxtgignh[zaimktolqipleig]mobimtizmlgqetrxkft[kooknezmesqkqisip]jdpwwsisdorcrryvyjn +lkiqyvxlouvphqf[wiibwrighxagoiod]mavajklcesvhiytvcx[ntesmbqoxkadtth]kovhcrsmmtllhai +ilzqxrlibfavovp[hrdmyejnxrlntti]yqmycbqlyitgkumdm +oslndtyjgissmwhqbo[lguvaxjavhlklnqvd]cbmjzevkakhfauq[huujtqleuzhwcbpxjf]hiitxzclsgphiembgwx[ixccjsoybxmjmufm]knmagcfohytzcoq +eutljtdlueiugunxsy[bmbgyvpiruvvuezir]vksxzmgftqglhrowpk[wphxqgxjmzhuqrwhce]giazmdryyjldglcivd[nsicphjzfpfzlhfymh]pfpeazmsdcttsutbs +tmdniznfpsrdaivxpcp[nlebmzzfjfklqixhk]sbusrwexlbpswiyslbh[tuvimwrkchmarbvl]ykhoceojfjugoim +vjkixsnkgnhzcsj[eqauuxevvcbzmlrvxk]owiikpkahbpkpuhkmns +yiomyydjxljwyxoeh[rxyahvmloktamapez]ygtodyeyjtqusou[esemeduybcbngynmzl]rxszjfhelknuyjq +hayzvqcfdjowlfeavo[mmcaawmtqthurqvmlfq]kbdpwcduhsjfbskcin[sueeedwjrdazxpae]drtfzfbefgvneiiqtsn +lfsgnugdavjvstpk[usjflghmtbzdzavzgos]vajnuirkzezjgkst[ixiusdyawuqkbnacri]yfhtwiifnoltnygk +fqvyvpipisvelyjfa[xewusykjjogfsupar]icdydlsidbisscyn[bpibwwfzoqajtnxlad]potpbswobrhcyvy +wozhxjyiybczbhbqvd[kfsajcbxdespfdewbjw]afcsihkfitjosfwxb[fngvcuammwspeglx]xizamsngscxtprjwkq +kmakicivcpvmjokl[rnsobihgweztudwrql]wytavzsniyqrdrxu +nawqmyenftpbvxo[nsztprtyzoacbxy]jiwvrmgzztoisveafzh[kgpykqugwgvfkztnnz]qqmehjutfdzzowkof +mxddcacabljlmyxmpn[zdlffviwrbhbjhl]niubaphkzsiybwkmh[ysxwkjpjhpyjmosgeo]kkhqupjsegymyxfh[sxxdsrtuwgsznnvhuy]licmdzzrtcxkgce +hkvugidmuerakcmmsn[mkmrvpqxfoghbyxr]brkgsmexzyvqztplvgo +inbjfdjjfofwckfckfo[nhjqvxeoedsfzfpwt]snlalnxxyjihecmxl[qtoxbcyxxtvuliams]bijqmocptaquusurml +wmwfxoaocwtzuhvenl[yzpbmaoazbchjxozl]oulzkybjweqqzml[ydkamvkncxomqsibme]fcuomzdfejvijxeniaf +clyxvevuyzylpdud[jmwhfhkzrzzkawp]nwcvtlwlwnbebgdz[cbnfsolnppgafml]mxhbrzrialopbbk +ekyvudgmgzgiomwt[ebcbzzamsuhycbcvc]gzmmgrqbbuvbzfebh[lyuflvjhaxkfxkv]bvnmyumtjzismbtig[nqoxegjljmzarvyowo]rldakoyzzgansfefpwr +wjhfgmicaoysnhmcer[kocbthyqjwsefyepgqh]vvzlwheralmhnixsb[adysumyfpsahmkntv]bnzgyilfgsepwvrdbdo[yqcnxfvzlpjxnvv]syedcecdzbffhmpztd +qdmvnazvvyyxqjkm[lcmgrtbttzwijqf]gjacmuqivbcttnp[uduzbmcdayazzpr]vabqjkbgwnjophdxwvr[yyljnrcxwwcehamtg]psdjpizyavaebua +fzjlpppzspuaflfwtv[dqmrdnatqlqnvowh]bevfgmojlmxmvfqb[smrcvucejxdrppkldvg]nbagvxquhrilbzi[dtbbwkaqepopjtgsgnz]zebxmxzzszbxtqeyjmd +kipuoxmzbydfycmkxcx[bfmjtzvthijzhezx]aiwnfmjhetyrdahmi +hiekvarctkixnmypau[dafmuxavuaosooos]czvsosvafizsjiouwi +epzppyfkcwcqiirpm[drxvceywherxdpnxl]pzylclelnhztrgnqb[qrmfgrtyqmlnsggg]seaeqafycqwjfccuyhv[fnwvqeftfesdvyu]djdlucfogiqnrblz +ihjtuvxjkvzqdpepjd[xzmyhwkdjooosritpw]rsvwysjoukgevdeve +wdgepzzfwonrsxprc[oefuycfwngwkrgklo]fbckfdmwzzwfiinlfhw[mjebaresrtulcvkeb]aqxnxzpnqukspcol[hpfnupcjrkswiwlgzz]xbnwmtcsqwbpkxys +nbaxkwtbtodcuecg[xqoetzqgjhxmuvfvnoa]edvwhehydqhhfjm[xyepeppmsepsaixyisi]txxbbqwefwuffdztlnc +aqeknneydrvnameefot[dduhtgzqtjyggmr]ausnandgijmikvgd[jjvsfofhypkfrrc]rgzmkiqggfaesoznlxl[przqmabciaxkcunhy]cnntseafxmnjldcp +rxilrztnhgzclsgy[yaxsuppphljrtcxev]mqyqgjopdetsxzmutjk[adyfostrkvhuajndjaw]ikumnitoxctaqcpop +ntotlcdwgtsgotovhyj[wgduvgtqijgobem]hhdytbkiplykiejg[sntkfbyrzgguijtwmm]mpxnepfkhssujwhegbq[sxpsxodobizsvppqptl]uqlqlsopbfmgliw +wbyugpjhymzlgbl[zdoddxxbnxqimlo]tyaobecgkbvrmgajpga[asriovkglwqiukcxtjk]nvjqkrzxwicfzdr[vzqasgjrafilljt]eobbqeenineqwps +xbtwnvkwrlnwseaids[znlftryxezmidoc]suigxfrnxfzeudpi[ahlshriqmozkpiogtc]zpjiwsbdawhjynju +drjfebkgnrcuqyzpezw[hnweqviwyjtfrwpu]popubobnviqwkqfv[plaxjplhmhjqjmqjsh]idacejabrvhfteelbiu[hhxwpwgvjcncpjcovv]tqyykiwalnnkoniju +fwdnjlvptzmxpwvsli[eidmcurldxszfvvhjf]bshskptweuzuqtjym[dpwmmspdxpiqidrfz]bulnlyngfaybqfinqn +khvidctisgemoswq[vzknkycuuvznnjkzay]rvzkmucboqomxkmtuvv +ymfxlhojyjfqvctzue[sihfpembvmdtdda]wezkljquqtkcyiar +cgzdjkbnmhptcggqib[autoeqiibhxdief]zapmbimuvhywdtsbtm +gilwnvmvdyftcdmvaql[esmtawtmepovyih]quztpmdplotzlszav +sfsncarxehtgmutj[aqauaojoqabkguvan]olgokvyhpfjzyqgvbcy[fsfdkbxhstvxlkzb]ozwgbzlhrocqpjoseq +shzexlixgxazcobmdvz[bvrebdcpytgplvii]gxdgzyoqpmkqznz[wuywofxihsgxgpcksgh]lwqsslamcrmkobn +pkjlltvbsjnfarycgf[gwkayyieahfowbrgr]ccgyjvjbdeoilsznvbi[njniljtubngiuwlil]kosrulvapzdufvq +clhvakestwquwywsohs[ubwecsjptinhzngw]dvjcvukpkdrgpbeua[svetegijnnbtetpgfu]nfejtethkqavpol +vksryzexymetdykenw[etxzvunetbovrwttr]pnmwnldqzmxzjldnmh[vnskreneiwajgmd]rwbeletsldocxguy[agccpaxhrlfokpt]wembexaqbprlrzg +wrxyiatlpvvcuroguv[hfcsmxesvpwfgtpqip]jbspeicucxtbnti +gbxyskaitzeogoej[drokshekgcpxpgktoi]ivxtocmlrugoguf +sfzpstesdmegcuhn[drrpxmsfpcjvqerjb]jqcvoeifgceremgz[chsbisfayixexqer]qyhonslazxrkagpp +bfufgciknfkthfbr[tlfmuebscorrclekjfx]offqunmqlcetebpov[bsbmhnbmmqmdbpnt]knkjsvpmffjqvtqpk[bryxvufxbsocwnd]hkxplkqhsymumxarn +ftafmqgtmaazvmstfq[qxsvdxplpesqzqg]yrbkrhtzaqtygxjheuo +xqgmldfvsmitjzhbr[yrwujpzkzksxdbthk]jblnpmdcljgadym +ijtilnlhxlkhoaftet[rgzfrfsilxhwgpzx]gmdwwndlvtvvtdimd[wyghkhzahfwpaknrxiy]ekpkylqvvxypaszcozp[hjdwslazthbzhdimne]xuptxflgcjgdajfgqa +ceklxvygwnkfrqvwd[qxjqndmhxzvhicvcf]lvrzumjuaawtgviue[xdvdtoulmeaaiiuqa]xveikrwzicxctyy +pdvdkirojjubchc[iylcutkspnuquwdc]uzbtxemzazuwottv[sojezpwrsstkdwkses]laokggzzeaobwfus +ibuowtqicxqiifze[emohxvujvolopghkrgw]secpljnouzblzup[xvpvnqvnsgsnmhwdpbn]ykpvwjlhtpdjlflxvye +botbhhrfjqjqwdgmeu[itwjgbhzrqnnagvy]pzexftzhniligeyd[egtdkuktihxgmdd]cumzxbfgryzedtsc +dgvuwphikpupaovhovx[nbwxxhepxfzlxcoma]vypmvuopklupuzlk[plkvxscxriyzeln]sopaaxvckgcbiahm[gpafvifmxvjouczus]uyqhgsdxkcylwle +gufjlajgktlwahsa[kwtpvwbvjzpmpbstiyj]nqkkgajutaofdauzmfq[zihotkwlyixmfsp]fezlipznjthttsiwpj +lqriaqvyvawemnogd[gyqqrvivtuxxbzf]xqrrsgnxbpmjsgqqr[zfwpyfwojhemhmyoajq]pyninwzcjzypmygy[qzftysfhztknzjo]zyybzurfxiolsik +iojvqxazkhdwzed[jnnntfrduoxnyqpeszj]dpeducyducrsuwa[rnfiudvklwbdbho]lklubgxkqldqalvh[ogbeiwjdaeuwjyz]cvhoaaenmeuovocvog +kxtwtkvaixeisgzjky[cnzhhsipmfawaqzc]gjpptvjnwmbqqbuum[qryazcieexjwwsvfi]cysiabvuldrkvsxqgu[koflanzstuwaebjih]krzursoabnpundffqs +bzqcnugxfeixhnvk[sjyuxwjdceauputr]tcjsgbmvjklijlowud[mdmuqbpupxhndvfcd]ypgdbaxwopztyqelfis[bvpphfvdscmfbhynf]vjaytjezersopuqa +sceyeinwgkcccgn[sgxwelfgqimdwzlbj]uvyuazuplvkhpndc[etahwkowloxlylnp]hletqjpvxzicdrs[kyrfwcyoudjlueqrvr]kdqsjyoajsfenmrol +atkckckrgntchlets[tyebmdckmayofez]hryglgphkgeoswe[jeamxrrzxgyzvmuh]vcvejocdlauybbz[lnnricpcvqztoumc]uggeimsqrjnppskl +rutaemkjlwrslmsp[jwwgmphxqlggydlsh]xdudpbdjfqtcgrw +lwddwkagigyjsht[zpizzqoqkcbqmdqfqp]vbvigihfyemwjqusdh[kqgxbnysneqgxdwzkpp]issqguyhzmttxofz +zzxsolnnbmerygtvvk[bhfexiwvaohrbqbadi]zdsieuxicwijamvo +lbfovxmrghyzhfdybb[whedwghlrxnjtvqelzp]oezlanrknbaxtmo[jtrlurnbhmuymfwx]puvsiaizbjtqnot[rssajpiwyftzhoacoqh]ihmzohwlncqrfrjpbpn +mflsnlcufwvqbhye[lslradskdqrueaxvoez]iyrdzgwbghbrctrmdt[bqgxpsiwleisnru]sjwifvnufaaedueaag +rcdjaebyojixvatc[bjybjvqonbvdtyjwet]rnatoqmpxauyiezad[ltcfporqmmavmsjgmrb]sdiogziluykhmgcjf[bkkhyuslxlarrqbqe]zzsdsepgilymdpnhw +jikhvuzivjikuxkmlus[vsgrhafeosvtphzg]bjhxequjxbqorsnhx[pvkgxrttjofimfuq]cmrxlinhwqxhrkrdzpk[xugunnrtpxbnemj]hapjbouhnfydllttkdt +xsvwiruapkldajmkyx[iohclbiotvabvkhkngm]qfvbpipvniprtqjj[ehcphknxkybflhn]ackdoidsuczifwx[bdbekqnxcwwskgxp]ofvzsecshsgbqll +rnpjfqpbnpfqtlpkc[itzrqowsquwryisqywl]mrkjwermsejxwqubxwi[plxkhpuflnhspjficnt]djldgtkuzafchfwar[auijeassmbtfdsd]etfcwmifwixeffrtpco +nkqwqvkikgnmwcnos[nmvtwkyhwtwyrrupx]emdniphxpavkede +tkcdryrjllweves[pqdjnylpftbbktemtkl]qlykuckixcfhwuczikv +cfjwosfrfjwgwognyjc[jiwoynoxdngalmreoq]otqvhbkwlkpqatkx[wwgwguxuzwlorap]rjuopkpuaftnkdeg +icgtjqangadcebdax[wyosawgqnexwsdqq]ulyhqvrzrqhibudyu +mrrdimungjnszyr[quzeqzycxcsamewykb]vqrhnvflewxwzvxwxg +aciggfsvhpeaemh[xhizavbtwzpsxdkgzdl]dbqpkvkmrbwjcle +ctxwfkazxjvguatxus[hkcjonilmmvovjawir]ruwyywhbhkrheofbpr[qeknvkabxrdgfxgrp]hymknrdlgolmqrpklal[qbkzigpdxfcgnfhdrqr]hrutorkgyzxlqlujnv +ocyqsefzuzizjllui[ttpjltsmxnkavfbviwn]ccfanejrzrghpnb[ehkgwatoncpnwfpjc]qkwynkumqgvxuslirgg[vrnprgoivxrsqlpbmke]jdygjgsfkbhrbfc +necmpldghpppjggvw[vtantcichlsjgrzdxlo]bihypdunzshlhxktuk[iusfpqesheojjdmk]ycztqgqrqsuifzgnqvw[oyjhytgpicigpcf]ewrixdzorbmmxgywf +tsddziihnzqushtoeg[ldqhzxrgtfkcrhecrm]nnesvhwbrujwmon +rdapxiunwuijmxrqf[qvekjcwvibpucemj]uidzbyozcfnpempx +fdvouzrhnlgyemqqqa[rosijdvpwbgnxzzr]moxykttwbfixxvflpje[daadlshdcnrwftzxpjj]pgpphzgfkeapstad[rptqkhjmanvnfuj]drurgqqilijigaa +dcdcoboftwhtitlto[qdqpbbobdncixqwhmn]cdjrukqmcdbzwji +fsmzzqlggnjqunemec[oxrxnckqpvilfinnolv]mgpmmemxrkuonag[wsoiyculboqjnux]urwswywdpuesxaq +gpughkygfkxahewxsip[licxlfgczxcqejs]idnuezcmwhwgryjare +shoehgaydkpbxwshf[ksbdsdldhfsxjipf]ubrrcyykdsgnywhojya[hfjwtuughentmddwd]wjpsomayxantmltuoep +srpgizgochbueqgg[qeqltfdohredaspdbmy]cexowllqgvorkapnkc[kfivkiksqxospfw]naiqwxlkjowysnh +patacqalyfmxulxxtkw[hyxkhrfewkpafeel]thgckmswuwcjgcuepp[lsfmmxuvmiyyzzxu]yiktaounkhxoqzm +maeefdbswszxotz[sdfwswrwotoblvzk]bqmhwlxmzvjnorn[phhhipunsmqfmormtk]aasvyeqeffypmcop +fhpaqlgiumuampggbha[tktjydzyzgbpqosq]dpqodhygfzmbfku +iotcaohleclcmtwp[zirjcaznbsuwrbbspl]vdyhcyoroztlltnsubz[nmnaakmudmmobxzk]xjxybbzqfoibovwhr[tpzyhrmupmrfoeufsv]nfvtlfdnynqiwrmnmt +bsadpcmsvgfxbpskka[bqcswpjvfijomiajzjv]zjzfrshleucdcwpf[ipqvielmzuykgbs]rsvzmpmpfahujfofx +fvryaokhaacjqgah[epbqswhzewpvaip]cuveezfvkvejvvaizr[hlhatamayfeqllu]ixwqbzzaekbgxkmhzaz +reyvoyklzltgudphp[oxjgegadnwxleogg]ljmtypolhtjwpvs +cbihaubuoteffoyu[svxjexmihzibcqb]jzdqjhmjgugqyur +krpfvdsywmrzxbusjl[juomxpbfboxgvkm]brhpobarqecdmqkiwy +wsbwcjnpzputekmilg[qhdrjrdtwqqaqsymipv]fyrpxnpnbowlhwkcwd[wcxmrmmzlznnrel]oamqtpijleztiuknf +mmjzxbxoyrxkyvdtss[cikixrlteokbezfi]urjcocznnivoqkf[wzqgjmuuvuniccrj]eiarnnhreduakcv +honratmzckbtooiwan[epebkioukueaexbb]xyakukoiqfmtdhvxf +auczawuragikjbyg[xqvricdlkrsbnmjqymq]uwinnxrbwluaanvjyvz +rrpjxhttogyefupw[cidavmfspeeooolb]ucfrrurpkeqltglk[ulptzlfrcvniduqkc]bytebcgtpqkknxpbh +ateymyqwgrjfwemgg[xppbfkjrlnizskzttbw]genvojuvqaudosfm[psnzsxmpjtdbznh]kljgvgkdvezzljte[ovfuojewcuvcqrfdzsk]kmbgrfpjzllvrbmpimu +mrvctdetjidibveb[msvevesuydbqwrytbh]yiliwznzilsslmachk[mqyuthyalilcmdpxz]ctawteeyyrsbncp +xhqazvqcraogaog[efbpamcmboregjesn]vinozerwxjyrytyd[vmzmjnevhaiidnhiuw]nvzsnlixrdzmzvtgfy[veacynylxxfkeep]syokzdwmkkhirrz +swavkosetgudxoshj[fvzlrzpjhrbnbqsccn]hlvbbqalpdfefmaxdse[ekisavmzzlowfwcmqp]hutgwyxxcqjdiso[vraskyhzrfjitpxakqa]rcljjityeqogidyb +hidnzkzjrekzkkqqpj[qvvuzioihfbxhglu]nzlgputvbrvwrchwhzc[rimjeexwqbdnsdn]tfzbpsuttxirwszy +wiubbpcsjjmtbnd[thcllhnafhmdojqr]viplkejozrbrwacv +jaywbjoscfdifdfalf[lvouibjhzbkxdqd]mcxggciwqqirwcyps[ztiybfroldnlieeg]vwnzbrghyfatjsxsvfl[jenhflndcjmgdojv]uyxvsnfigbtgaemccz +uutahwebslojhtl[affybmhohxqavah]xocumtcofvavgdgl[xlypyhazihrgfwllp]ptfnqjlzbaccyoaawi +akdzebybusompcsooz[xgymxdecspvdvkgit]dtnhtzkelcazovecig +jqajvhvbrkrynxg[yekfvwkborakrkfl]bovxzhceonjclmgecgy +ilythgztqwpxktjrpf[igwywudlvdqpqbu]hxmvjverypjvjtk +dbkmmuymxedkowpcws[kxtthcqfurgkuxxx]vkypnrqtmhlsqogt[rtixamexlrydluvxe]nbehtyxipwgvefctyaf[cxtipjkxixrgawvomc]ssvdpknocgugwjxpzpf +fidyxymrgwqpntyg[loqqjfrzmidkxskyfsa]mqilmzklkzhzedf[mitpmedchdhhzxdqpl]roerrhbijrjwmsm[quhrsmqqujwufnm]layxublhkfpoykadvcr +njsjelrfstonstmhq[crcgsmvxndyvyfsjku]yvyrpgjnuimkxcutgvh[gwmbqumupsdfrusp]sbedcqptxzhsohroth[wudivolpxauvxvxbpqk]bnfygsxxzqwxumonnm +ivtobvcmwywqtjkfa[tcfyhhgftbsswpnvbtv]bkuulyhtihhqcckjo[lgnkduoojrzyjhby]uwkeujommiprdopgche +mzrhrvpuyolqlku[rlofuuumtasfuknrasa]tfhglvunxtkafazyehj[hrnjrlpyjntwosogwti]ixtpihfavwqkjnlipmm +jzhfwqxoqsgnrnex[ccrtrnroigtbvrnjeji]bbhfsodufjqhjvplii[mcubmtdgwttmmnazhpt]hovifldmlnbzrwqicaz +hcchhpmerpjppsj[wftljcxoqwtoclz]xihvvfjfhefdkeip[abdthspjojqvwxx]fhffpflinospcczm +vupulseekbaiaoempu[zupmjydxyobqbfmy]xkyopqxvogwcpuwnud[orgnovcpbpqecljkaq]sdvcakqwdmgydeeup +wruccyxbyiexpnka[iirsbfvggokpwli]gztvpqcsckeaiqofwf[zdloxqdlcazkhkppz]jydaafpuoznegyif +lwxqnbbzjlckuji[bzxykmlhlgjosvs]fdocjjmtlhlghzvj[snveavqbuhnzqktmyur]xcoabwwqxexqzakbrh[iqkdvngcdtlhlhudqk]edydfxflcnpzrcjsppt +eokcsyiozfqhcbzffj[uiczyrevovzcgvu]mniuhovkpklhedhx[gbyzowvpnxpemkcrccc]avfhgxxldgtjxuy +rxjbmcovdnxoxrjter[ijiplhrlromkesgs]xwtfawphuvrjimntwvs +uuwjtmgqskgrxrlzt[nqzvntwfmxeptqylma]gbahtqxvunohprsd[strhrrwmxsuoiuvi]nhamfjzlocoufnwbgu[osdxgghdsdkbqcpj]ywmalngfjbjymkz +vsmcjtzwfubhlop[ttbkmxwjonmuscwi]ikjuxrmqhqldtfzqa +oqhkopaodmimgikwcg[biimzvsoczaxfdy]bkcbjbcusyhdpfo[vfnzlymbwetzhbcxz]zyntiiipnkmsjjemxq +hzaeznnipwioicdfa[lperfrgxekbntipyf]mnerflshwywujfsp[nrkcmayjxnxbhuvo]mdxovxksmxlwvkbrdf +cuqqyiwojnwvbybcps[bujmpcuovhebtztm]bektaixvzjpofzb[egiiqzxqdlfwoukjyiw]nqkjlpwevuxeognpnq +ryxoyvavwharlbwzeq[rphqbmnaiykgafsftjs]ijrqxkvnqersvvryz[mevoiitcztvfztorohn]hkchrvkqswjpyay[staoxhiuifnbmxuytlc]fuawdkujedmkpeto +caowivzceqsclbyp[grpcqqthiebrabqwhxv]bzmazhewqmbuhjokm +uhrtxyxnakvjydnroc[fhnjxathwyyxszmo]zzukeuqdhxravrs[zqcltmosvkqcekap]gjartckwucksqzcn[smddsrvnfxqjxya]gkumdkzqxcqxfyhm +ldzhaqlkbxfagur[qvlstlwnkzbmxlxw]reflsfhdsosjaaesps[qajtodlxlfrbdlj]bxytsckpxumuoklw +ghjjrxtnytqatjfxwt[opmvopscrillueslb]zsxtxstrwnyzolxk[lyeeidvaghynwkckr]shhkellgnhsuekrzoc +vpliqrfetzttovx[nkmmjlsskjhnyxh]ayockmlevegaseq[auzorvghfdfuuajnt]poknhujvpctqrrycfun +vzgpmpjvlzbhzhlexp[zheyfmgekvhjsnmosaq]krmficowypbxwbztrn[rvoedtkjlfpxtaot]rxwejzlarsgdlayv +jfrznpvhlbchvre[obxfauzcchgnzksp]fgimlwasdrgqvquis[ewaqnfexmitmuxhqnp]graisawghismkouwfv +nqmcashwuluyxaxcw[fdqovhbtwijgklubmon]dgxewefrjkhrylq[maeguvhvptbgmjdwhxb]dkdmdobhsbyforzmqr +huwexxqnjlofulknxz[qnbpzxlpdlsqrti]sbmmwvryxqsrfzpm[ucizjfqroaflnixzbpr]ndztjtaeahzmkyords +mwlrbdybkjhgorutus[bmbedqpcsxwkganh]ttwjrjrvxsikepdbvgs[qycnjzrbeiiplxarls]atrevpowofauioaof[nlhyhaoljptrowlmyo]hmeaxvwasyaszlgq +tqsmjetgtzmxfgakjqs[cbnxrpnckgcndpcwiae]uavavaewuucokfrm[viufzfvvuiuuehyxcw]nkskrloinkwsoukw +roximfsrbnzyzjmn[bqugwcdliqyzyaqiupv]rpdidncsfgexyncbg[amzmtmqwzipkjfy]fqnscfsjmxjlpoccvfd[bpebfxoinyaqsgjpb]dykidfsbcykdobqe +rcmbmjwgmwathepxunw[uoieoiytmrywrjevift]ourmrqqatqnwmrisyu[bxodgsozbekrcuwf]gkaigbulsjxysdiawg[kczakejsrndvzdirs]ggjgbhegtgijrdz +xtksmozdsgsclsxrfh[afxjsmsjpuqnomb]onqkiyrogyrkykxjr[bhvnrdaenimevcx]snufewjwvfqkafjjzn[cquvjkzxpbfbghmnpwi]wjbdkkloxxgsgnmriw +doruvpwqkvibnww[uslnnvqcrwjlexech]cshujlmmujfjdtjw[pkbasqruzspzipwrqke]yypbzzqwoasgldn +aoxxznvrxfhzwyyq[byxxvystyyrlzvl]jnilbnasrzvgbbhrl +wvtujbbebuyuazangzc[moooepbzqolouuyxij]vhqrubkyyuypknfh[gvfucxhufyyjefei]axvrkaeaqlxxfip[fiazyighxscxhiwydc]acvifmzzltvluos +yzyfibzwjuddaoxc[gpjgkmckxctlttgcdcm]rmjohduchcituck[noozqqxrakiadwu]mipigxbhlbtngtpcpz +zipobscyynjrecng[jeekozoaoyuuqmroisx]tgffoyomlggbyjnnv[mcfybdsenqhygjo]dnzrpghyroqbcje[aoapyvfyscqfzhihddf]vplszbvbycwxqrhb +gcoyyfxpuufglqfsczx[ebjwlqjgtgkqdeike]xtuuxrrbgiwhwqdcyw +mdwjuxoulckloxfujkj[omieaeznetsnkeoroh]ggnwbuenkgeujmap[ghrtxfonaxyhfogpjub]ptyopzxhctssbwlpwy[xmpglsqcnihwzgbgm]yqmqddmugnlrbnqkgci +xeayvddumafiomemh[euwluehznzxvpmzbz]fxcevhwksvwhrvzid[maotzdveeldpyetguj]cixjfwlbbbrrqmnoklo +larctxbpbdnbpqyyz[vzooyuwrgpgtjtq]sgizsbcjteinyxto[jbqzsxejwwgrpcgzwrj]bpwcfwyglhtuxqmy +zbxohuvlboydqvqhhkd[wgcjvlrppivpnxifvk]kmpdiwdtpmrctyhy[pprsqaqxunduprjnjxx]zfbqlbdpmcgfwenem +ghcjhgkmyfejmua[mqsuukbcdvjmdnz]ixxelnebxjrtrdwzlkd[ikojyewznghqksregl]tkthqugytcsdudoggp +hdfwyjganjbjhbjvswz[bfaxlkjfrkakeedg]zrkxyzbozmchfqgz +inmdmdyssqhykuhn[vbjasprzyxaphygdg]ucbbhyvlsjjdqri +zdyejivfbywyaaqljp[sxmtwgwmwbqelhsg]jesgfubnghtsagcu[tofvxzmzzsnywhbx]ibnbzcdhusdiqhgika[sipfigjsngidlzxxneq]bljavpomkpqzrsuuo +uahcmotfanpvzru[opmqbnngxtudnuyc]lsvafzhwwwmoagl[kzpffwsffxozirgyz]lsbjnbzflbiprwuvurf +rzietxnbixgvzxnmzlj[iygcirkrgwwsgpcidzr]bfrwgfeyyatmalyjsl[dweehclvlbefvlcp]qurpnzinmyweipshzs[lgbfgdjhddmtvbzxu]ppxtzzkiizoqqguct +zfsvifntrvbjgdcuc[jjwqwhifqbxeqkbigcl]fmyuetebsksddti[hmopwdnxvmqwqflr]jidndiejmzoutjpkdm +qwnlstjkluchubgkttm[yyndjrkhfqrxuyglebo]xdltobqidrkstozk[shmmslerstluurc]fxkrzqnfjoalxcmssq[bjenpehkwbxpktb]eaallvedtajrnupomva +zxqdqrztephcpieqdi[rigecfyegojksvjmya]rgygzpdzmpvogeurni[odgdyrqmqgrcmhfcu]ggdgejoiritcrdxxu +ezhzkozgllmnompn[sqyilkceizeygqkwot]pdkuklrqdgtgoqap[yvadgqlkffoklshvf]hkgwcnlbadpbiuzvkaz[oozjtyzsxujalkwoo]dhntuiangtulscbzg +zvwmdxzivmtzpkmhnp[qduttqlbrhetmuj]vmykluzepgxxilmn[qgswpbooccvoxlg]ujndjzfubkxmvvdib[yrneuetnuktitut]vvwnzxosnenywomkyj +phuncbfvyiwxfour[oauntpjxaqvwvqn]liffvpoxrbljogpcwvw +usabjelvalpgdyiyn[hywbrqfeqwkizwnxf]ebpcgxloqmzflbeag[dxifrjggqwzokner]ndwzylxxlkdcpbk[kfergfdezgbceby]uscylihvxfbetfnog +afgmwhqdwessspzx[ssbmbckihwjmiaw]zbbiktbhykmehed +hforuldqhrolhqsm[gofgjhapikxnhhdn]xgdarfanlnonwdielb[hvntptxixclnlqphvq]hvvdpsmvsveyaiubt[hiiscphavjogadmj]bbfjdjeecrhhrspxdpq +djtyronibzvtixf[yvofthnckundxfe]eccattkkitxyotbziy[afdaacfefrerytfh]cquizrjfjtqgjozagid[xkbcgazeolbliwp]hukcarrfnjctdycpfb +egwoebxchfxxlrr[hxugiprrlfwmknw]cpmfgzxzakyhumd[evzzvvtjwwzwzywvk]lwcfpjlcgrbjszjvf +hktuhumsttqsgfltrdv[rctkgluikouomerrv]jblnggtkdhveufixx +ejjzogefxwuyadzthjb[ibrhegtzukygkfnziwt]utcbeamzzfkbrmqonlu[yofpkwiuewvtbswaet]zxkgoommtfxezcfcweb +wbauuixpbtjnuos[ozwhlzidaubnfiuiqa]nlkdtbovsytnvjz[ztfjpnzvymrefnt]nixbxdoogrxdvuxbxbr +xadpfckydqkmbvbj[vwdzgyfbjlyslafrp]mbozdmkfztxwailiuv[uttdatknprbzvjvucxh]cqcbkumzxiaqweqfiry +bsdbnkvvlwpezlhc[cdzdiuewblcmciggdgp]halpvjdbnpbdrnkz[ikoyxulwagjnwego]twyvbkffqxasqbomi[ajwtpvliyyssqjex]cfbqtoqqlggpufbfx +qoqtovwkavyaqbkwmd[vxuqdoobfxtanlwd]zklibywcjpksseelw[roqxvvoifjmxnarqvt]zeijltexwykdvpd +obkgwgtfxwjfrepg[slekjheburvgrunuaxf]cnhsvevmitpuwokwee +flulgpwvsikwhpzpza[pmlcfhtmvuiyoidfbfh]czcxxurdakbxizbbfb[blpwjusbzbdwugwbcv]vltmmzttxuhooid[hlbpbqjpqyclebkye]hgozvhgdplllxiio +oupstawbevsasbhv[ddvybaqnhfckfvdgabz]nooqiufueyoflccqzc[jyljuydjddholsx]bbejlommzienlhz[mpbmppjwfqrgucxdqxx]sjohlscgjoprsqt +augjtgfyoatluixgc[atdsbsouunywohfnk]dpghgakdvfscbapsm[nkodybopavlbeikalqj]myhpkcbsbkbjfgj +whzlsgvuspnzdunurbg[cypfmgrkqjeppudbdy]civtfkixnmrkqmchhg[ypyakrsygkyvmfmmyf]blihjslfkbrysntsl +xeyyjiqvduxcflt[xiqxiqeepbpkkydtzxs]vbpbdsaivyavnfwj[rduzjulshqiluheud]inliammiyxregzbsrkt +txvixsvhvmxxsomvo[hgdskyjskapgvyiqzsz]shvhmfrbpxbndsx[plvytalszauhmpkr]jyujmokrvxwmanzbxbi[mefmngrdhatojkpplcv]dttxfesvavgpkbtpri +pproajkxqwedocrc[muhbyboayoghprmbtxs]odroemzznotffsaxsmg[ykfnecchdltzosnyby]nozuvokzntxrnitq +rqimalibychumvzdq[siqhwfjimixscjmne]hkvxsavgjvpzkyay[nzbxnmxgmyuwcywvd]qkuzrfifsyvonaalxu +rymadifucrlickzorqr[phxxuxpffvnjgofl]zqfbhfmzbvhbmask +gzuklpopfcjdrxoekz[lwviuuoyojzggqjs]cyacdnvkgqqafcyprae[iyazavdiashvzwpgip]sztafbunqsyjtpz[fkwjsbllccbrrdpa]dijejdfyzqycvrdkl +nhmayligrdtlvyeo[laulduejrclodvnaoh]frxoepqtmqdzwwupiy +exzcpmjdjiagpvsvin[aontczoixbznfwsvss]hdlmrrdtbumlfvril[gcuizdwjbzyhttw]apadljkbcsylwgekv +pujkeovpnvnleypqz[ecxuhbtnrlnzojsxs]eyolbkoatzbwvnvwxlx +oefowwmlhqytnxaec[rdbjjilbmiazndcycr]dvjwgldyxfrzicw[fxpbshhafqifvyju]ygagsxtxwnsphgzqrpv +lhbebfasigqbhndgsux[drchunjaqzkcmefjys]nzloazwftxoemnmifox[gjpmyydbftxggnggadd]onlcnitfjniiekbiaz[swjdwdaikyykupgyg]ltwxeordcvjfarrhx +ukvzfltucnovohjidr[apslrphaneessxbpdx]cxrovjkruohahxshazw +xnsrwrjioindnxhxrrn[mvuraryghmwxppnlp]mconcxeyryuvfqcoy +opafehetqedyikso[vjnjwsjlbiknomzuu]pjurldelcuxkdlhehm +kvpcbopojkvzykdhm[ldleeqmztdnrohjm]vejwyvzvekairyhc +yrbrakwltaduyge[qwvsxbxwiretxirlsbt]hdnwansdelcvxptiou[uhibherodkibtww]aphfcrfnpewbrblyme[lfwjpxyosiappsd]rshmipxgjvorazj +tsymbomuywfpmdul[wgulyfhhwodplfi]xixmazxgewasngsv +ktywwprbuvuhmnpwfoa[fcuicnujrweusdoe]fuarbahbvkhqjibcfp +snhkrkibygzndryeblm[pykdztwnxrawqbevu]wwiwrwfcwtirdkjh +xhomjlsunzjzgkxc[qyxzsooayiqnuzljj]jftgbnqtumwipywdfrp +mhfgzwlocsrhbfkdbud[kwtnglxzzdwqcfw]ezvrdgdyjjqfwuv[abznvdwgiisyqjxvu]khcfgchqbgwflioa[upibqontzrahabnpi]tgjaagwvmqewmfyer +yfptdfhnebzhgpzism[tglibrfrnpfmydwbea]mmoqveuvvenorhnrw +ljztcdworsemcoe[yloilpxuumxdzzxl]dyawqaacdnjlttcz[dxyytbozmlibkocr]dxpindavjlezzpogz +bwkhzerttqexrgoea[ubnuzbvktcxsxednmu]zqjpbtbzdcfmidopdy[malphrsrebpeeuw]vwdlaafkntcaqmwjqc[abciktgfeaiptay]yqksuqwsuqtckkoyh +filqrpdsqqfgkcu[obiciozcvbatglnx]sjzgtjuddnazrzfcju[svrswvhpfraptqsxolt]nfcphmwaudhrnxkzc[ysohuzukkfqlskgkd]nynxljuswasofiaarc +desdobciyiqsycj[wzvqcbwfbneahei]svofzhyvvsrwasvvg[igvhymbudpcrdgjwv]qtyrjtghnbbtekl +fygnlyiuxapyciwwnbw[fhwxcrwprlaoiybnkbe]fxvtiehvhfgfwtsdfh[mreawqbzyvkbcnkyftm]rryknthocegscrdtbcw[ktbeedxfulszfogwnqi]kqwtzaemzwmsloi +zxroedxtywemimrje[fvzlxeqgczajhimr]lrhvziwtgglifto[buxquosscraxroklx]pryldzimioibwliygt[yvmeeklmyokbgexl]oqezpvcwnctcbskefas +dcowzgprrgvczwfx[zminxdmdflugwkkkk]vfoltgijbqlhjdohr +vtrfdkwipegmqbwrvo[kshaxjtaiuyicufl]zfkbjdxhihqmtjco +djidszgreaxdweqjk[rdjzkbmqtyolitmqhf]plltubpvwojnccsygfy[mewadohjaliobsdwezu]vmrkkqgbtfmwemn[erlreifagjhqavlxxh]yplrasxtqcyowlci +ctautcpnnufupce[qtydhgcjjqofrfay]lfahmjfjyppehyp[qzaxqkpopvwzqofe]rkcqkjpgptshvoucer[qmczzorygyrwbxiji]zljzfavjmwawfrfr +mwmkedorswoukdumznq[hdujfmdkyiznceknql]wgvbskjuuwmwrsvca +sdvjnkxypkzbwaam[jrjyjxcfvipcsfv]hqpkybfiuthhszpey[cxzhyjyccoulowr]bwjcdjlwidvcfkguaud +wfvvroenfriclccedd[aqkoeakjbakjprhnj]ytucldefderfpqaibsn[gjukmqtaxbygrygukiy]xfreqhtftbfsvsjstda +gmqthnogaadlkycgrv[qrgjpxucfcnthziuqmc]fqlchcfytukeoho +muwfuurxmlzrcgij[ifojpmgnfufvhbmmeu]ezcruchallsnspos[bwlnhfxtqvwcdjo]lnfuojduqnrbdyk[jhfihfozzosipwsyk]akukjehglqpancmiy +ultbxqkpivdepjvze[flhbwrxncynirgxwt]twqbnqiaivfwlqorpa +izvobuuojtimkzlsak[moodohlaudrwsto]cxjybpccizkmeau[dqaajcusqoaatpbojuh]pxlzqhwqdgetmjcm[jmjesiihxrtbmgwkcck]ywajslefzjxwyfivv +ymymmfpvyiyegjw[auyhltgyvzodazgd]twjkvzwomymmrhfthwc +romqbwenzvevhyq[ewpxvrduvqewryaoct]wxgowmsdxrxjnyj[obazseiipwfmbyxhkdv]gjalmcoqrquvdnmzacu[abzkksqdcduhkizuzxs]uzuazfdegdfqjmmr +frvysxhaafihjpza[uuwayzhynhgliyxcc]vdcjfobjuqddqibjef[iusgoufujvqkfjt]cejktzeuphymtswrxj[nthrscqmjniokzsq]tnsfuflhwdkvsrlm +rrybzahzqjlsnrf[aexlsirbdpwkrfhms]ftuaymthroqwnjlhwv[gugocacufksbdyqsfwn]ptivpdoxkvpbwaohlfr +ikdnaifadlcqtyfpq[ftwtatuewtwyxevw]klpnngjlhfuuwykwbqh +jcjepxytivozlscfk[pdosptbukdrtforgvxk]wdghlnuxqjdaztviyiz[mqtajavotnicuxco]vovuvrvnwoedhflabai +yaiokdeleeowglfd[qzhtllekpxcjvig]ohtsvsylelaafkxk +qkopuespenokczipnz[qmncizyvbxioknj]piygfwazneqkamiq[oebzwpkixhbywqc]tglnlkwhricqqzzbkuo[azpshyiwubdevjojg]fqlqjwtirppkilhplu +wpjdzojjjgthuvhs[ttvkvkootolwcilow]lvilrilboatpxwa +sqcunkrlvqeapsseomh[hcaleossxxtjalzts]dwokbxvvtiocokk[ziimvyrfcpcagbchp]lqsdomcpacsejdzcxw[tpekrtncgabhvirc]nqguzphabzalcgqjbmw +lchsqkntfaymwss[glcnjoqtmlubbldwxb]repxhlvahfruswno +gvwpylwrbvedenl[bsexdkrwujurnrhirju]eskvbigiwdmjthvhrw +uumyugkrepjyfna[clcqpswhmttsgtrnh]wnfqshojhbnuvkblcjh +hcwvxdxtuptlajr[svvedookmmgybok]dgfqpjqcewcjwqcw[rtkptmdbzfeqcyiha]xjnmaukpdrlznfxvfl[phdpcpgmzzlbeplqeyp]xfxopckbwdpteui +mxlmvngjychkbdad[nprwbbiggpyhrgjnox]kkkrpnnokeecsxwtfp[mscljzerlkqzmxsghg]mvwiwebrwurrppqw +bdgrunylqufybegh[hwkqigrllagcnatuzqe]tfooqltcwxznzoaot[hvdskwgtazfkqlbbbk]zlqphymjvcvgybaxo[uvougcsxvyieite]lryismkbwdzxmprwjmu +mtrggduulofkvbdmqj[oijictmaujkaxedjfm]kvriyuoautahkfmt +ljywcelytwxtjojhn[iopmxuupcuvfcgubem]alcwlvcmjgwoksp +ybgcqoheatckeypwgq[szypqmipvcfzxbl]obblmhvzjoiinqd[kvoyilelwmylaezhow]fforcawucbchzbjlrmu +txgcosxcdgywyfhgjm[etzfxsiksioqtrir]czbkwziihsrtlceuaj[ksksgvozuazlcgqcy]tcottzfkvhsmrsyvf +iggzhhbedhayxftelth[qznllaqmnrogfmdtbx]ualmvsfjwntzbzd +dfeuwphubioymbzuwo[tucongmmrqerhidwq]tjzrtrfhgixyspdsl[tygroajgdzxudheh]oumnugqbzgyilbrth[ejcdurppfugoluctx]rtxzchnbmwvfewg +kyzwhtfybawdrjkvoyl[fzrhzpdsmtmmmvuu]fgbiqggdekddtlpzvzh +irtlqtjyzstyynjfjt[zrlqdodytcoqczaib]brhvezqcuycqmta[uaofbaluqnucifngqd]eeprilhhysftrhp[zmdzijhtuxhysuaye]bqokznpdffiubikgf +nsrehcsbptmpdeskqi[rpcpoctimqyccgnpnfp]peakqjqlahqkqfgoc[irckfbpvcdodsmwm]oxnqnxhwmwflazjv +iuanxnzepawwipojp[bzoxbyrugitmuiutg]wtsagitdstugmsssbc[dvxwzoncffczplwcaw]gifhatzuqdvuwnupmja[wncssuyvhyawbmfpbdv]faluhtnnnvuiwbbudh +fpedlxzxifcuqmvxm[vrfcejeyfkhegliplkr]giqaenxejvscrlxbg[qctzkslosctnoamy]qyjmeunfiiuoxsid[xpbjwjejckcavehej]txgqklgnzqdtimmiqwc +iwkrzpmhsunofgrddx[ecssnqrcjyhmsfh]yrmuqswzgcbxnaa +lacpahmmufjghzen[zkbpbownspfqxnclzk]yjnyyjnabyhsrggji +vgxbpddjqotuvzbakan[vnagjxrcehlhbxwdw]kxuenaclhrihntgwjq[bgqywyrrhjzjqdnu]eirujssxedivdmvlsby +tsqxgzovbjzlwpcbv[rgaywjaothmsswcdrtp]owwnjohtsgegsgtah +xzxejmuyfhjmgoxfl[hyafuepnewepjpy]lbdbsoxevfzdpnwpfk +moucalsxxvhjiyoceol[gwxofnqdrtxzusk]qjosxisditclyvucbm +bjgdyrlrhtkbqrjohwj[gcmcelqjvjadxqnj]tlupekhzidsrscrf[oqadjqqatohbjwxrneo]ykhccsunlyamcmmk +vgihvcltopalggrjzsv[hmrksbhlxuzvtbnuss]yqpcbwauqeduyse[oojtsldylgtokmdwsy]intpovuqazkybvjim[qbqspjlovnizurecdj]fkxluehqgdogxdofnq +mhwhttcwzcntsbufi[afretswhwxhwkptb]srrajfoeahmhecarmu[wgjragqlbpfbfpd]epytkbjxmblfnkwhlhe +dgpphmjzkoobitcjyoo[nzkzbsfktzftpmgwdcd]nbezurwvzkhwskfq +epuokjzxtxphttxtkz[xcyaposdqcfkcxhncz]hcupnojktsvxrfwlyv +xfoshshomwdgssxla[uhshvhbfofuhdsqk]zbzynuiyfagqpemuplr +hycladrjbjuyieejeg[ajsfbpoakutelvhdak]hjejfrmmzslupsepozu +ksputfunecibpffwovl[xteycruesicuhzai]sqpunyzatnromjeq[xlzamstzzisboayh]gzlnqcjacsbkkmgzi[aonbwutxuesczgwnr]aflrcbdkkgoyumfakb +gjgmaueywnbqdvgf[tpheftnkpnlyujv]tvnqzdugoyjybxfpx[lnhefqkhesyicqqgvai]dvdgtlsayhtscupgikg[fyjgjzcrucldwdd]ohlycgvvdatuyvduhuo +emkefdmyurledfdd[dxzytfxcsdxgjcwxjzb]rqwwzvnosuhkcplv +fpmhvozxaaxsyxcpx[yohzimahvewgvzucn]ztkenzkvcryyrmo[drnglpsvnlefqhx]clawabytpjiwgqflfbv[xvqqglnkzkxlevq]dhpydxfqbclvcjtdcn +itvuciuufdkcgdqgo[mgwnpeydayczlvjegm]jyrwfakomakilgvhd[mslududkqwtcsojaosn]dssdnwxzapuchnxz +twopcscmaiqhzsepel[qhydrqfqwvjjvinlq]tfmaoxgmccymtrbecjk[zkuwqiccdgoubccjoc]pepwccwqlxzlvuhb +dingttjebuuxtxrxt[jmgffmivzzxvgvefk]bqxyaoqiukfungsvu[sidxinaokekzqpqz]hekuuswyvznavhuvk[lnmhqeaujpofmdzub]vcufrufbmgwvdwksqn +mlgkvlqtkpwzcjbrr[yzhdcawedycuwdw]ncjgthabbqmeuji +oqybrhgapxiiaxihexa[gerjxleappelousidd]dblyflqmoarwpne[enariawxfzzpeqdvj]lgjzpkhkrumhvap[rtcetzkiztcmyyjzs]adjuxkqsxrlyjgf +hqxmuovloocgcgjlajv[hjbhghstuvarcwhfy]wldxggmqrrhiwdc +yelxlqwqeiqqwwaitp[uservmlohjixnqtl]cocskteueenenkfmy[ehpleyhokmlzslrdlh]lyvwccjeqrqiofplw[pcsjxogpwmbhrpvvn]ncmxjsoxflyiderh +znmujbypnozpjpkqii[iydnrowiwhgazihmxxp]lvehdleutcqbwwan +lympkckqyhgbaumc[oodkeqjyhckceptyqui]ejkkqbitfscazcx +sxvzcdelbmcqawvour[jgrjmuzvknqddwawl]cfdxxgxsviiyckx +nrsjamicxprsigw[iywcxzvebsemowpdmn]tbmisagklgwliuuin[ztbbbdtyfonwumpl]cjmddkvsaxzaszisyy +tllvdxtvmesnmauwk[qaomhmguwvmsjbwrwz]gvzyhjymfhmheexe +jqiffwykdbqbfcz[nzzfstvzsrtshctbwt]uazcksxgiyuwlkbde[nvsnfriumhwznjfdual]beqjfgyanriagjl[mkwaqdkmtnrzfpszb]mrqgyvqvyqabnugoc +kyvjsbdoorblnmy[wxackciwbnwvsggfoxe]pbufyorljghrayitwnf[orktaokqgpeenjyk]xdldvupmoyqwylb[aljdjuvxqagigdbti]erzojwkjcoxvuztbqw +zuceocflmwjxczrua[gpdqtptmhzmrumm]lvmswwevpotdyrrztzl[pkzxcpcqxpbfmznn]zoaxhfddhvfzxmdreww[roilsmnfdmogsvyyr]inqfvvkesrzgzwsnwya +lihowzmdtujxkokt[czwvzrilryxqxqm]appqwnbyvtxjysxkh[wpjuzvceldxgvsx]hkyptytryliycwhpbkk +ccyquivxwnsmzvurzl[gatwkzfmiuzvlxqqyy]twruqhcerhppziydvey +kfmpvuwkfbczuahpr[uhtwcsydtbjjfcyu]mltkvudoyovjipwmptv +yzuinluayrwqgezu[qbeujtuehlcqhbz]qwvclzkjxuficbgqv[qrzlculckkjhunba]gemnanesaovxzxatvm +ytnrkypitsppgols[boldlbadecdiaeyp]miwxcsnjabbmlfz[nmfvanenygvwqmgpiei]dqwnubvfbwzdptj[ormimocwondmsyrk]eptdchejhezxzpqimj +bpvimxocqygiyfak[kocimiojschpxlmlbh]oeohxkrlnaramquwz[mvodjkrtgwsyshboxo]jmxqxvydlieugen[qsqvwfzcowdvxzeflfz]eoysyaomzucvprpm +uhanxfxnxmoedczj[pjqlsouqdhqhforcuk]wgqlbagmjmtimaewh[qlnvfdicashjzjjmmwe]wrtbmpniixypmei[hnikhifbzacymvga]cueedmtiokuuauro +rmwtcdtidmhhqvlooj[ibfeikfmamtpxld]tvqxdwcislwdijaa[znpzxccexnnkerzseb]cvyteeonwbckvkmw +xtrkdnwsvlqfpzb[fyqeealbxbpjxohdssv]eomkcxpzhdzzchmg[rszbjedcqvxmotecne]arebcunvopesercpsif +wpmgxfiikbeczkih[cjfseyjqbnprrzrc]vmofgvrwxiitjsy[cdbplfeqqrpvyoguuqp]gicntinbexxdcom[bhrrykkursqvyepyy]lhpnuchjkxczxxvqp +qnaldysjxpygshfd[ggbsrjqdcbppktpfk]rfapyzecbxeoluhop[njlupwxmsxpopefrwl]xhmjoasimqrdlgjwm +acajjiclnscuxdsyxv[axykpgkepnjhrhfgqvr]slbbdyluiqetchbrhrm +ryolywtcfhaxzpu[cihbqzqvoqwayjwqtx]cpnraqtbqozlcrvoxn[ippcsfxvbyrodbacgmg]gfmqhdjmgnfisex +etevnoklfebubfa[kjvpcomfcdacfhthi]nfqsxiilqrwqianlsex[ugqfrpggyrmumjf]utvcyluzwmzjygnta +tvqkpekrujjfpzlot[kgoaglxyitdkwjmf]mlihujxyrtwfmzup +ktqkqvqxohypotivf[nsytklzqsdqgtjsrved]beidsrlrqlaaykv[bhalrlzjhvbdtjcmig]awjesirwjnmfjdslc +axgwliaxadkosbsp[hpschybkdbrmhmm]sslipdgrubjiifxzze[sptnagunoyiasvcunvg]fywdxjoeyzvwrpinmf +rhpxrkwvbmiuoks[ynxkvorcjpyldmigt]juvdfreyownzxciopxa +qlmnvnzbswfkadrm[gvgyozcjgthimuxze]ewpsviwopsrqszjq[odmqbtcagnixpgasn]cywfvmbtfcixzjmyue[ekxllezjdqxkqfxkflf]smxhvcoojkrwvuiv +mrjroyadyadcyppfliq[xunpwmmutvwiewlkyye]ppcjwembftkaakdig[fycllhoijmljdas]ghnbcqzccvagpgplb[eafwmpftuwwwoln]qbxjdgsbyahqkxqzrlv +fzfcqlltfzjujqeym[jeaiiecptdpgfsfccuc]sfsekysmcjtdxjc +jjynfbiotihgcbrojww[vrxthptqnzbjegjxzru]yethaiycpixaqfb[bplbbjoveuznxlgvooa]izorgiwsvfgporxo[lnktkblkgpenjuqu]hsizqsxbuadccikdw +qgqbnxfvfobowmipa[pgiycstlgkcvsbi]nuvfvhbouoykamjuttp +evroxuhzulkndbn[lfllzavhyovpvvcvg]kihcrzllseowjwezs[vpvpwqtlbykudupl]qrmhrwziizlifhb +zgnewkpulzskmghubbx[matncbjczcjofajeilk]gimvlsfgxcdovxelxsu +zgznxyobzrrgfnipxlx[gsazrixylwsicyquamn]isxlagxgkbtgrbjknn[qxjewpiicycnpta]tghqdldoiwdennnuha[wpwsawddkuxonmxv]bmkekmujdpmibjrg +geeoheswegiuwrrmii[hbthbiwayyxkftmbayn]olgnlfwlixhqjgjvgsr +crxkwxwfcdjitekzrdm[duvbsycafjsvivy]ysrnkudiueyakhpydv[totferyeflbkxuz]nyrvffrgktfpmwsmaig +shfruolertwzhwvfv[oaeslwnysponjvpne]lzvqqieleintnev[jdhnbbkdwzksbijpsle]svtrwqftbwtkzzixrlf[wzxzoplqpcybbhhfz]klsezcnzpvgvbxqeedp +rodljmmftzgdnxxcufa[jgqmtuwqkermnrimyb]uouynscrkxdkjhrz[hpihpdzqgzcmawkdsw]dlvcgdmdmupcmuduu[xyjvfzjaypcbbeettvr]pnqhcmdgguswinpxmqo +yrcxqglagiyyhpt[fudlgwwllpsimkfp]esvhuezhtkwulzmut +qwiwjsxdiblovdjx[evezbqlggluydkth]xtoftegxpmgjsgn[dygxbbfgcnrlaebugya]jvcmiigduerloizkyzq[oyfqcvstibjtqcknk]sdykrdksunkdurm +mlublposwxvdmcasb[mmvoctlqinqyogj]lblnmvdegbddxjuuij[vlkyfhcwrywyksv]epprdwoppwnazhbfxs +xidpschespoxuwka[lifyliiagwhtynahwr]mophvutwbflkblhzp[ngfdfvwwlfuyujsy]pqgdfdrrwonjcsxyb[txlrkdplwmwanoxhveq]sirdziimdysnzdrzt +khglmzmqqlgtsoyuyk[ckwowqtfatmitmx]cqsnmpgwitnlycvr[hcjwrehoqrluifbx]dvorwhvznwutwctl +lsjtzcpwlhruhcyvu[ppankbohskraacy]xriyjykeufmypvpcg[khfkqffqnnzsskbvi]exldjyjnsnxqgfxg +cwilddndcerivvgcot[pwnjzedgzbwjhwdngiv]budzscutbkzehgi[swgapyqpuwuqitke]aihrettehkbulnndniz[ladvxuqplmfxnwm]zovkncitewbtnxao +nwkbypvbwxrhjccd[tzjkzmgvioaqorgsan]bghmwniqqnnugulkcq[devmzttwdxjayueapxz]pigrhvuthflwfvyghl +zxoysnouzggrhhygrn[wvovlnwttrpgnub]tflqcvvfrhwiikpfp[fmvlpmktaybiodqon]sawjgpmqugnvancar +sfhshdpjhpscqgmcx[elzcuconpnmipksf]qebfhzrzjddpkrwy[mtpfmfwynqlzlcavdjx]olgxbalbprtdnjl +ribazjlrsqqorxkipi[rkwdafpcbgzcvveipl]jtutooefoewtkwcolek[pddkdpvzyumbkuci]qyeuvqqxiqrwuzygf +eobvoofynuxzuaudo[icwrahzvyvejahwlbq]ewwnptijkewsppx[bmqxtgqmosyeyhcbsvv]ojsamjjroupnfxbygrm[yqqusonrkvfmwpiwo]nueolsbydgeyemas +vdmbxyiptwawwgfxzh[kmxqzdwjfyspqkptz]hkkuurdkmfzivckdwp[ncwldxetviygsqga]oxlfsqrbntyltzp +gewjydarttmsjtqn[zxbhrkxlalwtmmrgfag]ouqpvnvhrcsyaepju +iogmaqbbnpknpihgdzr[xddekzhpwasgjya]qvqeqqyfgmcjqlljhn[yqwhbjjgtlspllovxu]yzvhuxwuqjnqqwu[mnqqonpvybsaxob]emyjayuxxbvtumvsc +ompsdhuyibxinkeelcw[vcyphnznqaeqzcdm]iqpgmmktiakqfpiejnm +ciowlwsiatdaewieita[sjaasprpfvlolpah]bpeqtpttkceukaef[rprweenazfnwtmfqh]wedhtjlhyntjrqw[hyrqbnvfdzilazmclcl]cnzbapdwalrxcbd +duvtrfezztrbcbrpkwm[vtrqvfcxuueqcpbx]xmjukrhgfutvtcyd[ptqlpgejdqamrwxxbl]aavkmmqbqdkxyuwpllb[cvtooqdwzcluidljfni]pohomwwnjxhohmv +ieozeqgyrtjpfix[opyearfnbegqcgjqve]ljeerzciyhyvukdifu +awjmnojyjmqatcnnr[hdggsjlyjznqadyuwg]gvkbbwfvbtwwfjjnpa +dvtdsunzfozfzmgbost[cvhhdpznusqmedy]ayllrpvroikxhxetks +jyyboehdjvkufzixpf[ijsadnufldjduipx]zmcubrihovbjtdych[vtmkafgmqunhknoqttz]amdwppzqbnylhsi +gblfvnsmtqowxewqrzx[kzyxibskmbrkunl]nqajypwcmviecsn[fvewudrwzvqashspitb]docgbflbdpnxxtin +evhfjidivoswuxhsbd[wmxbybthkqklvtfekms]xnnifuivlakbrvkfaau[upixryknmsroqfh]tfaezdhmvigabvwfgt +dvdsnwpipghloop[diwimibgyehecqflqtd]tnfzbffdhkvhfsbhq[rtmprhoebqdxppae]gczergujhbzsgdxupd[ezswzkaawaqhjcdgfl]jgwotzkgibphpas +oyuvlfvippqkkfxsgsi[jkfszneoxbhkxlorzz]rmotcrnupuzltlqurcv +olonicnsustzovmd[kkmgnznlwjgwkkytz]usukziqukpwigcfvxw[uveqyxukqkusxuz]aqojtdccmpwlluelsyf[clqnppgmfzwrtlfh]obgkzmtyhlcounaf +bgntejhmisbzfrblik[nitcxhpegfmqugmlw]rcwxgxofqbishzhq[jyzbrgwyikdrbof]gdxdwgpsfmmqejfyodp +suumjpqhafxvgmgdokb[lmpsinjodlukkfk]jhehvjrbweyoeivfzt[ricjsiwyhcomnsgltrs]iysygfjrdfebsny[irlxudmuuykkcxj]wndlninlcnixabgs +xusauuaaldibtqcyn[hvjidaemmzaurmyyk]qxooscxoynakekchbj +xilzzdiyoqrwzcnwklx[jzmgqccfobvufhdfgha]lzkfzklxafmroamh[xxdzjoeflrhqibidync]kuodqrpntknogybhh +zfogxhqdfspdmvxtuwp[fshligclkdavscty]tkvaozljxenzeoj[txujxbzywfgqkyfrjh]fwwjvdiaceuyumeqscq +iqqislvjgveszvnb[qbfceykxhcelnwes]mgbeubhjgaydsrrps +unvvlzfszuuztae[ytbzbzacrvxlksvk]aeaoeugpmkydbixbmv[nzznffshspwmlkqig]hwamlnoeyfmzhrxmbi +eyrqyerdzuptlwfz[pgehfansstewngd]vdlfglsqchelite +irwhlxxczsizolo[mgrotoelpfspnben]xuboaosbbqvskeooh +mvvsstnbgtaripcmiv[lqhlubezzcqsqoh]ofqbajkawszexqw[pytqrosnsskcgmno]ceyhqvutvgwawrao +aehuceoazqppxdvj[fekwbrgjolkkssozjr]ovwtwkvvxtwlatlhc[anrzzudeipqtlgvtibj]djkyozdjetkxaxrg +qdkosvyshtjamlw[nvupkgnksmlfyivlaqz]vzjxmxzwetvndab[rjtknjbarestnsqar]emeeqkvpkwwwbpbyho[fxsxkmlskjyvniynt]yxdwuxqranfmwae +mpkajmbuiqyysjiqxg[gmhxmogelodamttt]aboupdcqcaggrmjwo[uqmzyshqeruzquxxez]agzfrbsajxlgzgfueb[dxxqiqrjkpgalcp]qcqyeyosztojwikdqo +cwzcxuvjuongdoellki[pqzhljdqxosuhdgqc]qqxxrckatnjwvmdjvty[qdlnrwhhbeldxrirock]kzsfmkvvjexhibpjfpv +xqxcttuxwhriomnnarc[hrkxvrjviqxxeih]ofnkwkzmwkwfbflu[bsjloysawmfoigzrsa]kjajcjknclhkjofvh[jtocrkwufebomaervq]hawuelpfzimwdnxens +axhzhgcgbqdeauomnjz[hbuvuiuidkykmvbd]yjddakntyygztrc[mgxbjwjbkzwnkybcgch]orbyhhpqxylsrzu[mygxsbzjoicfneimx]jddqvyyavgguqlqk +sstrdkfdyahmpmolvuh[nuhocbdkubnidqy]fnhfqdyorbtzefo +youjjtvznztbjozve[vcsiywlpdylxwpg]saiwvtogtdayorhni[bcbwjvcnlvrcqbeexf]cxmaphpnniedclqd[ilghtvdoebmgoykzmjc]gqxcmtfqougbpixu +jypsrripwfsirlizywh[qwqvrrfaltcifzgrzk]urwxtgxsivdxexc[hxqqrmnggugvdgdcle]sirkwolflgudrrwfvnr +jczbvdpvkmrklaxdh[iqwzvnjtjhmulvo]amkhoscjxrxkvtrlm[nlvnfnszosucrhvafm]dpkerwgcehqnmxmny[xabxqyrisiuhudad]egbjvaumucthookv +shephwsolmshfqhuslh[iqeoxejhscbjknjkgk]ytigxjcdexjgptz[mdcfmxfkyxnaaoixuv]ltysxdcxashhzrhfzcg[jrjzihjbmjzwwikgrj]zkrlixaauhydpmvpggc +hdwtqxvelsuakiujcgb[vrzoeqcoqwpdvdxrly]fieebtoboyeztrohbz[unoqhtonsyzptmpgo]bxsxkyquwwdwyhpxcan +wbxdrndbjpmgdewnt[hnmfgladivxjjrhgx]hhwhdeyhnhtngzasnm[eanqualmsluacqejow]wtycyvqujeitvrvtkhk[vfabcjjiloownkmsa]xqjgahkglpsjfcryzv +psxpjyoleoctcjgpwvw[qkiussudbvamcbw]hbauvxvnrwhyupg[jbuclksbbwmdnddkn]phqrldjcwlixcghiau +oeiqnisrrknnuqczk[qhtdnexhjbgdaplymaj]fqqywiecdftfcpfnkrd[lvlesddgirngtuo]mfvvfvlufkoqwpwl[hljsgiuexvjatvztcp]ixguvozijkebslzjaco +dktnilosvtkmvltdwd[vznigqxsgvlquhbquk]uinsbypzarhkgsgce +ljjdiiuiikwufjnnvjm[xjbujiikgaghrijcbsc]escofoimfyedoist[ltrrqmdcekykivhaz]xdiijidhpxdgqbtxue +lfwumqctskgwsfvhl[sgtnklskhazwypsys]bvjxbzrabgfrvyvyv[rlityjbenmcoigrfmfh]wczyjwqulaqxapozcnz[uqbunpfwhfrvgqcozw]ktvibesxhbrooqt +ammvknbggljpkwpr[vnrtrxiwcitskywiw]ubyickjafcfifgupssy[cbkzhebhjtdbsgct]cgefqdgpdpcjlzrz +wzpaqedqkmltsuij[jjuasmpwngjrynzettu]dtmgfvwtyxdfqce[usljscrncmnvrbb]tnevcveidnyskzs[ttmnmxqodycaikjio]qfhvrqvqpgjhkaaicj +apdywyijusgxzfj[sgbhrwbwywwisyg]ssiiosnfconncgiy +grownnednjxvuew[iniatygttcdaelocols]iyzwgdboxuadbrbooe[tojrecocburpdzi]oelyopkilwnsejur +hfdpohrtqqyfntpfk[trpnstnxymqupxjri]lheljryczqxgvqip +iielceqagqfksuqpzr[ollobpkbzanfxcjuhrz]jnxizyaoygzbzciu +njpftdmpmkjwcngeot[mocqjgcycgznvcqjv]aixpwfggjyqyemoz[fmklzletfvqdyvvg]mznoxpgwowvjjmus[prrehzdyfwwuxvhl]hqppujbqaizlzvv +vbjenrifdqsyzlwga[wmjenjnqufhqohvgc]uhrzouilmqjnjigwpa +vwooqueyzrusban[gjwcwiagfwpvrct]vfqlgxbhucjhvobi[bkbtechiapvschnh]vjzryzyisyzyzewdy +udumujkujngtkcfv[klinhdudyghspdsga]gxavvcsxqxvaziqrmsm[htseffbehxafyhoars]ghilivgeuuzjlmih[vtjpcrmvldjluqdazun]mebwzbxywmrfhet +cwkfdzyxoayxukcgdv[wamyytyfmfaucrko]dchdvtpdkeonmdqc +zklwcknfrvlblaamoo[ndrnobufquyjknl]dnxgeqvqwezfwky +zbqgtpvsqcteltrs[uwrmlyjkcidsfdpx]cgaobtbuuntwyuhxmjx +lbbyafbvhsilwmjivv[fkftqvaahnrokuhu]dvgaejsxgjuwiemu[yqopsyejqtvmlfxm]gzuulybydsrzhigldh +ficlcqjefsddeds[kfkmusacvnqualtppxh]drbsbqefpdoossbkyng[uvpyqnoidjnssjobt]gsheeufqtzrdsil[jbvevjzeugpmopo]nrgxwajuatycddzwr +xnhrhgadoziectoigmf[jwudbvxzwdfuubhjlt]lupnypmntyrvwqzlb[vvfvttkizuxshnhhw]lfdrjokdrbrcldjfs[wawjpqzozodmnmah]vdbjaoofkmhkjbphx +fsymutmdbqyguwut[qvxhywjtposhjgwuhxg]ftwhtxqxeicsrlfye +fglgkrjwulmkxbzolgn[vurpqcvuydmympiyofl]nbzudjasxeknjid +nbtrkgsywnudokk[vurfuvkjdvnsukh]vkmqsmcrotppqorkah +iqccpqvhiesnaohkhao[xykqfbmojjnscqhdv]aqlxkvudzlrncmpy +dtlwnznjqsixssrsaii[vkikcmtsepgtyqhica]ovcpoaucnwravbozsg +nobwzchgrycgkxc[tqoxhzxeorivdtdkde]ctdtkwzsvuxfgjtjg +zsknnbedctklyuxngn[jjzvkixpfmskcagh]fkvhsfuckghltyqk[hmygppkjpcdicxw]mnurqampwwoiiynr[jbkvqeqrhnksizlssff]xhkxiwlzgvjdfakjg +gqbxrvghncjdllxtge[bjuwjsvewzvrgcujf]tkrdrbempmwqujk[pmbtbgbrgzpxeoqsxw]nfvaaumgpjysgtvk +clfcvnwzcbfaqaj[prmpnpjwklodeukzznp]zukpytpqzgmlbvidv[qhfrkjlsbsqufgnet]pfhfcxzeiowmgiyksj +vogrpuzrevmatdbqqx[qolpybjnetsxcqfcvbc]ixxogojluwsdsldl[bztslfanuylwdld]xanhrzxetowrgift +dqrkbymiudzhkgf[spvsqvyntikovrefqc]bzltachhfylbrzl[znefllzixypjdkmfcxn]mtpikjxqsppxlal[oeyhdcnpxvhawqbmkzy]nxhshzdshsiercr +xmgedfiblpeazvgkss[cwbtqqjoaqbrgbptah]clzsinbtqsrkudymf +puwqcxmsuxnmneuzrhj[dbljkganxzmjvtxgr]ekmomoccimbpbieaf[khezmkkqdwkouzb]cpkfuyzfdfxhhhuhk +thfdbnkmqrektilpc[weshzvpsyofygysio]bffomelkkwvfsdxa[owhidyrjieeietzn]kmeqgnvyclngrcgquc[ieikyuuoliuiczq]nnqhogvlhwqipvpiao +zsdcvcbtwlzlzlmteky[nrqtpxoefofrjeaf]myjmnezlzkfcpmik +afyxnybelqewnebaai[ddjgeajpzswwdrg]qfwfqryofesysiuznz[ouajwvymsxmxzvgdx]ryuvawdhfmfvikye[kuovduidpcdyepuoq]didoelcmjebmytdyke +oopihddimztsopfcia[udmncuvhkvvbcmxzey]fpehwxjiczzhqcxxi[onmizmkoyhadrxpsemf]htycdbotvmomguwbttt[gjsdzuveiuvudbyakzw]ramxommwjmpkihl +bwlccfsaovlozdqpsv[dniiqfcldfhjiex]cdzbfrecwehrluxzprd[xpyzvlqwekcyglksq]dncoqoaakpgnbagf +uxoopzavjdqdkaz[exsbnpbaeuvusypih]qgojfhbprpoavcbxysa +mailxensjcsuodzpd[ftitdguigzeundytyp]fgoitzvujhkjynr[hnpcvussglqshxn]debsveizfcuroqrm[yeageekyjhilfwr]ozgpzusfpbyanxnzuak +vxjnjaguqlrwoxlhfbq[zlqpitkigwihrikvr]dysutdfrbljdzjgcw[eslbaxzslwoxscpgoy]sudodfmlfyuczzf[vsthktidtghtmazbip]jfyoxxiaowptvosevi +lgxmivlggzfdpductjg[qxgoioxsurcwayndy]uwlgoodqsjoxsjqqln +qognhfgzowjikeqz[nkwezojneylzwfdm]omduvysmcovvpvse[bwxvkzoqsykfils]jwgfmwxajhmggos +pvuwgxmpcrqknzpbkg[qbpmfthtmbkmljnsqs]zmplrxnulurhzvijupv[tgsommhtbbujbjpf]qaxqxdxmpqwduwwxpgg +lzlrgghqmetsmcxd[fjffxsqjqctkxnw]zlzlpvksrpnatxmh +ayirfkbsdyssjjpqmi[vpkvhbtreetyxstwcqp]rjbuxsgsrlqrdnpyg +ukqefgljywjmlce[nqjcndjjdwohtizoed]njfgjjqkdenohbwqm +kdwzhrslryuexdgbcr[hmbcvmrrmbsvyaii]bqprdkrgdlwjvoiyb[mqbaokwptkfmxzqr]wcauinrezkhduhcktrd +hbtuzqvyldtvwgyumzw[dibedlwdcjyfngungt]towfeyxyxixyxee[libuilcfsdkejjl]wzzxfhwcgawuhskreyh +oxjkoqahhqqcxcoxksg[bouywtiajyfmanxcx]xgqpjxtkaejvmqckkuf +prhqbaccndsoscdm[cuayhbnfywztddbvww]psgyhytgosopvbbp +dxdtcskiowtdomepjp[islofsowtuyqvcqwb]pjhyaudkqxxlwfoo +vdatepedgnvgpah[jbooucwxtveomnpmyx]ixgsuidbemgmahtlt +oncdjplunkvqphbyb[uvivlundxhdiwjncfq]dvhypguriulrangqwr +vipebvitwbccsnahjhu[kpwtbwddwqgyhnkjsv]acfaqhywmwbkmgh[nryplosnxtbkpwxtkfp]njzhnytzwlprvfcv +csvlzvkinldedsxt[dbxoceaaismltmspg]yomriudrxzmlbbbm[qilkpyxcxlvtfzqmw]rhwekeawwpyngqxzc[akqljrphobjicoco]utlunpkuptawrtfcccv +acfepkrkhnviixe[cvksybusnhacmfoy]tmqqmgfdharutrqvdpm +hjehtfbextjkaxilhaw[qvavsivlumfavaafhqz]ahdjvprlhlmuneewyxi[rzeuqtjkiuacirxsw]ucmfkrotfprypzuyqe[rutydtgtkppegdgjn]hmvzjyquxtydoujq +ntosjqtunrqfoboek[aogjyqyzxpdgopkpbx]sdvftoxtcjefotm[jivgsxjogxklwkhm]cahcjmgzepqebtn +omkznbrlrodmtmnhwsu[ysoinknpnzrjqkf]ybiqtlzoiohtldgoaud[fbzfiajeahzmiplcih]qimubctnnrmtwro +drdygweayxraomiblsc[oglpuxzweqpofwi]mbipxabkjqcdscltkh[axbvkumlaforzbqy]ircpsgstqyzpwnv +jefmuplsptisjqguywe[lkgtuysseapteszy]wzcehypttzjhjfp[nkwvzebjrydcwfkqne]tnmaxtrhvwvdnrhpxne +elfqfvbjutssktxpdo[paguttthfghhyktkjjy]wkpqdurcibsvviqfqpu +suzpbjqdiebctwhb[gwnbzgajwrorqcx]qoqdgemwbkdpsqgjds[qgozargzosdgbgo]hbsmqrwnlqsdans[vhppwpwwamtuurulc]ylczevsobuxtdhvyg +qfixarbnawmgjcga[dhgdmxcpwpvycmwl]mkqfghairqabhmokxk +srjvnnbutjaeikkbsd[flieajbdmghmuzp]ieimmehrnixqjynp[rjxiepmrhwrmrpi]yfrfmlgakaehvqm[hucfgczbwdpxxuhk]bvgmehildjqbjdu +qcmjtgmmgybxhde[fvpxdzdmzkhxdzjfkf]qfnaclxnryinmvpgr[pcsmctnmmrpxtfgi]oszbhmhynpzqvtxso[qhpljywydqpnksmwzdi]yqwxnvgcwsdwuluiouo +vhvuumgtzbrbgazpo[epktoekzvomswsqq]bbkntocwjpaxaoc[rnlzbqxqcuyltjxepz]iaelcpyexpoqavcbepy[azyksbvkvgmgimw]kvknvptkveiacqnzll +pkkcmeinlwpoupwpu[qtoyfabmibfrubvepwx]atgpzcehuidgikzn +srwntduyxjkpivzkgvl[hmenzrmnnisxgodof]lpuawirahbvibfki[gazzozitxhvxixvc]knbuydfpbjzupju[emzrzykcaeukvec]grtwlnuzmqivnvknug +vzlbpuiceftddittp[srespcesbfprkwuku]bslyxxcynfqywwu +icolypvmrgrhuvj[fgpeakrskxaljnakz]bqxravyjmdodsvhf[cjyehkcrdetiknsttv]dhoghrdxmmzxbjtbql +nowswrulawbgqkmcee[qsktncayiihoxiu]wtsjxnvcxdriviyn[tebqonpavhbfnwxvjc]tvpwgpgrozhtqtiy[lhagntjbctcsdejajh]aedpfftlvvtmaqneaxd +phiopnkoxulhkaddkxv[ueqfevwkcjwpcmsfspz]zkcoexersqysbtqdpc[nmcsonrswjxvdtuk]xdrsvfxrrdrfdbny +aosrkxvljnapvnux[ldzgwtxmjbynmlp]yrxxllppgosniqv[prtvqenfqapocxdrlst]gypcighnnppaytp[azueqhhtymzpujx]lsgvwvvgctkiyvlc +rketxmupdbmrircajep[xfmnkumekemjnwki]zurvxfxnrrvkmkrhbxh[lsrwyjtfjairiuwbaw]dyvmozkzkcvmunw +crxtvtdwdxejpebbv[xthcfmihpjqbhrvqfkd]hztqefpqdtgyhfzqsi[nlaeacaqscestvv]ylbteskdlwjfwru[morvntwyebnmswguff]othonakykxxajuj +zclhqcnlmxsurcrqaty[stohpulyrzcbabnydyp]veajkekzuxjmecdzym[ysujzinvkawzoqi]hfkcorxooelnfididyu +oejzfesyaxeittrdh[yziovimnkfkadiplm]arzmtikoiveyvlsdkwd +wvdwkqqmnretidj[smwnemzwzqhclpkud]yzguktkwahnuabs[bbyhgwmhhbpbwij]qstxwyfjjagyqvdaexg[nkerjbdjlikfgdv]qortpkyhpqvvebjdzw +apdkznwjfxwdrsm[fddlqepbyrbrfgmyeiy]fvymcxblcjkcvpcyup[szsfswjdzmcabwuz]hmutpmhknvwrlwbvs[vpfcztrelzjnqzq]gqbpttcrakuedsp +sujqaghlxszzfxf[jqybozaufdtanwa]rthiqanlennnowvdkm[elvfekcowitcout]ntjaqinnbwtqsctwrz[axpnqwfjmkocafoeadn]aplpjbnhkrcrbebmo +hzkbvadkdojwmdmdxq[ohmqkaainyaufipcso]zojzxelggufdascjz[zlxncckagxntpzqa]kindyikavjkmhopcnek +yjcsnegfsmmnfce[ueladqjdaqflfas]wcifctlledgnvodtlzw[zqswolvsfhpyrcivk]vemkuyjebqxyahb[ydjhmgjxmruwwmq]cufuqsyyytlgbpwrj +jkkrynqxqlgxukyfv[fugivxklerausdl]shcuiixkbmzymoxv[thtakgbdzvjsjsera]lmpwzqhthoottxvp +ncmijtczixmeyfuhspt[ixlxgrsyxrebpupt]sdoinvpfizdezpc[xckbxvncmseucrzjo]rzxfgqlionzaeocj +xmqnycsovydhyaqiv[iuvymmaguzbrtgs]zhvxodssnpnhajwzy +rqqzaaswdepcnnmqfif[pzkyyjprisjybnnjcq]kqpjhykszghcripq[vgdhuqujrkqljuc]qhtxqkqygazsvuh +qynvobsdeutfrvb[fddgwzhlhryauxzb]etznfbueibykerqfugr[rviezfaehsvigssm]nwhvctxhqvfdmgqe +ihonnjncwrkvglabk[pnjachlnpyonivmjtc]uoxellmcbixrdsisuhb[nkwsdmhisjdqurn]bowvauofupqfmxf[liiytxrcuwwnimdurys]acluoarkxopwppv +ipqsfckjkqxkxyuvxje[arswyomsnfueuwmcbev]mmlwwcviicdmllylq[jnqpolrlwmmccsd]nfobgtdlxveuuldt[uebjwwikiebtttgqss]ikdxnjdmzbrpqqvw +zhjywcsrtcadzdrby[ynasiklerbnlgidest]xhzwkwypktpkqgfyh[fuuxtaekwjpobdjfvdh]jcsrxmtbrqkerkrc +osahjtbzrqukvphpe[guutbgosbfkaurvuf]baiwluaouikebnlgf[cgssqcbscupvvadpbt]lxwmvxorsfcaorccxp[jcqzcrfdkncuoqj]gbgdolqdrauivfnsyti +vvqcdtcodesyomh[efjjzleahiejvczmsd]naeosnsaltqgjrk +yucpovujdwslgdczxzo[fbnfueoeatnphvv]gwegeafilsbwgor +thfmmzylspbxupt[asfhmdmkqwnqppnmu]awoxkgkgtrkdjzz +ghbifboivgelqxkfeo[gtpozhzqfntyyoodc]yjqcvpimanwiunamfh[aglylsuuakjkmqx]edfukuqcchtbhtblcf +qzonwqxjkpwqier[qmrnrkkwruteiijirkf]xhnrnahamaegfla[fzshmzjiczdyzqhwx]acjlrknukkbewao[afpeaepzoljqxcwvs]dlvdxhsoljmqgmvzf +mzibkpddgkilmcwcshm[sgpxutpcqniuckl]kqiwkwdgydpnjcj[exyhorurvawneziiy]njznkaphsmgisqyujms +xgzabblockmothpuxc[mhiwwhtpmtbxowbnp]aucpfqmnquiggenklcx +rnhfshqrlxczmrcz[agxxpteadztvdfeo]zogmjfpebldprrmqg[zppblhkevlkqlyie]mgovaojjsutbwtpzsm +kjgtqizmvuqerhb[dmhtzazyzqwjhpn]knmrbytrwrcsonmshb[oiazannnreojooa]hkhackgpdqgyqsgnb +orhnenfhsjyibqacq[tznvydkguvcwayiwmi]hejujxsitqcaabjwskl[qhpfmxgjdfgtgmy]ahilwlhjkfytezctsj[ewxepeeisacexgtc]paxwwhhpaukgjnafuwl +mhmfziehhppfqoocvju[hmfnlywpplffsxwzg]bkhkauhasnuoglve[oytxewvmknoqchvy]fyodxbpsytyeltnfsl[wojcbkfsswlcuqcz]izcrkyxzjclhkfuv +slabudcjhktddar[cvkvaakjffjjovgus]ahgxzdctihvboiarn +degyynefmxidnbw[zcfgkvupltxmbhroi]dbnaezqekcegyki[tjrnhpsmfftiscppybi]qgyifwlhvccshdiqfx +sxszfjmiathxoqnxg[smizlxpwmelqjlf]etoglecoddmflqma[hsggyxsxkhhshucgtnw]oqzadjxenphyexaqrb +kqwjndajvawmwxs[fskyhhktkilzwjtkt]ufpvkdnhygmuzfsfiso +iqdscwzpnnwehtqmwrd[fqbmsfrezrkhqcw]gqkpkiqhtrjpusoefg +bhwbuaqjofxcbuxrqub[aaanhuielrhxhlzscv]fkgimzkootysfzwcan[svktoznaqxkkibhigju]fmqhtjgxbrovymq +pjybsukpzvvyouum[rzeunjnideaseer]ltquzytuezonpowuhdn[wzwlbeegsgtwpzo]hqivrviswwfsdmpgnz[fhabjemewetsjrjhy]lgbwcozirgljoudhng +ampiucjqxwrzbdtcjnr[ufubjvykdfixyzqq]mcxabdvjzhohlcmcu[xihctxapmjpmrev]mggwuizzzxymhypmcw +pprbxhbjbnlqecvmu[ewuffgnuylwmrcvkbku]bntyrptthpmexiakh[lswyqkuxrfzokacp]rvkhcgbfnjivaagp[mnpbbcgrakjlmdqt]bujykhlbutiiqyke +xtcidzkptvkjakxl[kwjzzydtkvjmqdz]httbqtbiyxwryblrfd[cyjwthdmalqkqvso]knfncfebbbueoqze[zuruluaalfysbnmf]vodfiptptwqpnllvbdf +wtjthnkscjzzqrbpc[eirytrqekucxajz]ghycghnyntrthzkechc[eiylrukgxsqpetjfnv]xuiymnuzydlawjygi +rjrldatkdhvzvgcux[iuhectextisybzvz]vycerefkzhnmdyg +lqftkkvpvepilrmyty[uptcsbeqtmcljaziisb]himkwiqkrogoyhjpru[wxocqzrdgaclbeefd]mtytxwskqznxgpfex[whqbcssppfhqedhv]cbtiuzgbvptcticlbcg +pbotpqbiqdjzsmpbki[zqcshqinikcszjm]xjxijypculvuoavvg[nltkubwokrppvzifi]dmedgmkonytjzzk[obonilwwerhchueuf]mlfqiwmaicuecljj +exlndpqjplyfdbmvlji[fzzvnaszvmpwpdcovj]ymothxghgfddmzqtglj[wyfqyqwrhanponsr]ydpntagauckmdqpjb[icumanaybbefssdjnqz]owhsbdpufodsqezginf +ukfirftsouqdsgbgmht[nrkpwksebkijlha]zfkumnifusjysuzt +uyzxwkcgjfsekdhktx[qhgrmuyjmfmunghm]mgjbupndudwultdnnt[oczntpgnyanxxgdqx]oryrlqkmroilyca[xbevednhpnvzzwmrorm]bdozfrabvamfxae +toqvrteazudmppbrxct[cyiebroauwofshvceeo]fhoxdufwnvmlwhhp[xykvdatsfccxlfmn]zpqqflqttorrmjs +ltkcveeqyawjrryerqa[zxoihtpkswzjrhnbvz]cfpirvnjowhsnnbehd +gdiyzvnydjwhfzrimq[lvieihnyxtdrgrbs]kpotvolpjgjtfiqf[koloumkhoyktylql]cxgmdumzkygpppqe[aywuzxkrvrevgnnihh]uplcpitzxbcqkmfgsy +tskqojnfadpujfxym[xomwfoclpvyejczgyy]lkmawlhwgnpccotaetj[fvhbgpqqvasfykn]xfxmjfyoygcsbxl[ldveqjhkzxczzgxhbxh]tfpibohzhgrythjgqor +xkduagbswofivadpo[mxlqngyjwbqfsszj]xoxngqbxwsttknmtcyk +zvmlodxbacmwvdti[itdxiimzuvluomfxq]ymrkoyojdnsjqvl[dihqibcaznldgoteyx]thrrpohvatzogxrz +soetmauqgsswblf[hlkchnarzzrgjawosj]zsghpkoexwcujpakaou[wvfxggiskbpgntosh]zbohdymojoxhndfr[qhyzatgvedhoibktw]iggjhmravyoswvu +mwjmmmeiclpjmvishbx[dbmbrjcjcmbnqxq]mvhzexhgdmmnduc[yiccjcrvmzjvygs]uyvqfjmiyccasgzlz +dsfwjqahjoozkpei[olrrkslvxvijsyopa]jmzojmvqtzvkhaxukkv +kudhszsgsrenjqcrbp[ipvxqnbradyxoline]srcnihnhywqlietbgqv +eklfpuufieqqdfrgouk[ycxgdyairggpehtkim]sdfhxncpiqxguzlqw[ysjhhepmruqaegxp]wklvpveoxxfyizmf +apdypwjfmxhjgojtb[zojzoufhucunvjr]zjpuqiciaujfbjta[wlusnbuvcffrnac]ecaccicpvcmbomsvf +wenmnejyihmxaxdqwqw[rckytszqrgaxmjpbqh]pngxudjgdtbshebyv +ieyarudhbjrrevfodgm[grmjubbiqdodhae]mhzexlzijmzpltsxjfa +byfyxjxqlcpjxbpd[pdqkhutluqjoelb]pberlwpeqxmovie[zkholwknvgbfxcyymye]askmwovcktpqhcg +ccjcygsnanyvdss[frpxggwvfjuugdysypg]tuqczwtmobkusalqusm[ignjrlsysasfmzasa]nfpomrlygzjyylhvypi[lahpgasntfymdoub]rlvsrtudkvhtwhycf +omuyrkrubieiduzegr[gcigoszvylmdrlrc]jtlrlsgqxiqtciehh +hqeghunlieoqhetnh[unjtmdurovonejpsjtq]xtatdniykzzxpufps[ysaytzqvcxkvimhql]tyfkttaoythcttexrp +ciyuspkrywyyplmlro[myfyzvlzntivldrquq]eighmudngyiwlsme[eukgbrmtghntxpacth]pmvxbxswfexsnkxmm +gdbeqewbrhyfbfpeti[yvyiclmkwzelbqi]sktocytuvyvpcia +gnfkqxrtauwnkhfoyc[msfhopavdyhpvpttg]ewuyaxehxbyziwmxd[iyqrfiudsalpmpk]smpmubdejyevdggead +rqvcsivlxhfyboxj[flvvsnglektzosreb]yrfdzdgvkzgrxqoyv[rygmqeiccgtqqmni]frypfnzvhkzvlabrr +idyqowifirnwhkk[vloivxhtkdzjrbuuzmi]beozwodgehayklyr[cptxwcsgsapmprrp]hfrdeefhyehwwvghgdq[prcadfsulvamytpsfo]tyodjlxziwyqtqmi +tdwoqxlhhaqkdmv[cxayaazioswycmwj]pkenayaygxyrtqrqugi +vtqeqlrohgalpwrqig[bewbjgeryrvhzwetm]hpccsjcgunkysntpwp[yefsyqedopuhssgo]jjkkuwoyvhzzcmdlvv[uqczrglqumshdhkdkut]dlfilxdlomkvtjhv +fezgzsmmxdvhtmy[rrmbxexyopsrhxag]ezltorfyxclstzhp +ytcnqprainktcjei[phwarjaicrgistkt]qdtijjhbywixrie[llwwjrzrxhaqhie]ufaezqgmmdhhzjzrza +uyvaorvuqwbbexmafbj[tnpwadyyakeawtdextg]tiqechjccyyczpvbf[vaqfvvcbrowtjxyu]oqswjgtolyixytoj[ismczyxhizrzbbpscus]rtlaqgqrcxpjgmih +jzamkswiztvnelaqnqb[iptcqxmvbgyaeiwob]xnhehagwcwdgsvpomgt[jsasqvgectyfdja]dgjdtjlzbkyyckvy[fobafodakfhhiem]thozlpiakivgzzvemu +owfgxupnufaiuovcesw[jeskiymcmexnjbxrbp]obganlgvlqdczqrvwad +chsvqakwmnabitpotyv[eqeyowfftbjxdkpyf]cflqouimlafrxuqvh[vgjbvqafqyzexrzhr]mnywvcxtgsaifufkcu[rtjuztroxgmpkbnim]xsqyofncdrvdpin +kufzqdykjclolpveo[fopvuhisayecxlainzx]wvrhymidhtoldhb[vylhmdjqsdhokif]megnkxywjthliwepc +cqjpttuijfdzott[wubeiefulpuuhweqv]cqxbaudhnmrvrigogf +hkzaqueemmhessqjq[xofafbaefryhwyzzuoc]yyzaekuutvjrwnhonpk +zsgyhvutvjmrgnmar[kbxkhssdsmefafntsr]ocjxtkpqmugcvkopvsu[dsdwezhcblqssurfmlx]veiioiyfnncyfrdwyv +nsqgaufitxefakffd[brdfctppxqczvlohw]ntxmfmrsajxuqmo[pbalhistyzwnbfs]inapnupdvnwtlvvu +krtwywfktmbdobnq[msnsspogynsnwdb]efcftgrjdyygncnqdks +rrasplhwovftrffuw[txyylwsjezcxalx]voncsevbgofoiiolvk[axcouuspjtfzsekglc]qoutiffuqnorbpnlp +etyvjsjqwelcdzpnjxm[eetihszvjrmccshr]uskafocfyjorzhdx +rqfzvsuredndurz[ebgtddsixmgsugd]ilczpjzsukpyekhobu[eeciaduigoflustith]ohmscfdomzprzjncno +jjjarldpnxgwvlxve[yjoqlmnvtslexafgvbd]yngfttqfsebrcwtctf[bwevtymxqlrpqqaage]wdcaqtgkvmzesrjex[svnkfzogwcsyfxoxh]hvrsvxcpdxqmlfhb +ldwuplbjkimdskui[flisuphwbiqphsddaxk]eelzsgjnvecwedneyb +busmmdpbgxvdiytw[kwlhqlohknjgwfh]xgmkafonkyzffqtj +ngtpdikbtooilycy[dwpneelecozfzwwseg]kwkwssbtktxenqbnyfs[lekbaoqzpvjbnuvq]vhlbuorxxxxztocuiq[rscjyzvyznunxnun]jhipkmizwfpoxeuktk +leghszcprzadwpwlakv[cauvyhahnjycqgmslqr]pisyfnajcsrgnvkhcmj[ozrbuuodecumxzbsr]gtqbofuoteafyjk[sodglraziyxhcpm]lbzccqgejtsczvj +aiqnofheehbiqxqlg[wojpqldgrsrkqqpywb]dyxygexggvertuktz[iolnpmkijfefcsebi]okwjyjatnoyvlhe[zbfipzfoszigysxpwu]jitbvwjmknigdnlt +tvxhyndcnfrobfrdvo[vwbjbbozwjpolbmlkwd]kzsgbhkshipoxtfp[sylshvahmztsbngdl]emwcmnpjzydlvvknrhn[aarrocnhsmnzqgozo]uswudvvjntlhqjc +adbrrsdjlpyizfgvuc[qoimvkfjruwpheezeuk]gyjjepfgjpnyajypq +xgkzhzjlkwacqnihyns[bmprkvdabnasxzqzwg]hxwyywhnuntidvpg[mvqpemdfnvvdlpul]ttqocuncdebtomizabo +zztkzvwguaggryld[fgkabjmksknxlfhzpc]iysntrtaaweknzbxemc +ocwsupvhvpcgwehx[vnmhfmgubwbhhrmkp]hqpkkwxwwefzojltpph[bvsvcgwsztazzzjoxi]iasiueagvwjgmcugh +tkxywinosybkrutpu[eluxrinxkarduffy]brxgvdsoguiggjfemb[paaawmhcmdxneql]qtvmkmlldspsheyac +vzcnrbtoegbsuglk[rqhhdwpschucsvlnq]hzjzijxkcoxpwhi[glryptoeiosdosoj]fhduvpzlbptbehtt[yigihwrodvsulsrsh]numkgigkznkushjc +oexrobvxlwbqkrigz[nnbfhaheuublajo]pvlstoxdjdlbroezlbj[ykvlcsvqstxycpp]rxxgokhffgyioltc +cstzrhymnqxwtwpnvh[dzbyzhzvaooswlkdrof]dzxgsohzaxvkiwho +hftmeaqbiiefqtwklr[bmqfhgvsfrywauxq]brzoeoncrvljpjqxpjd +vbnuypzeryxltunvcb[ldnuxdvgfcbbysibhop]ejgwhaxwgnnbfide[okhykghpvystpufnxqr]umdmoixuvfqgecr[rkwsaizjzxjgmmftw]czzteyolfgwkrnkxid +nvflxkucsnbsltnp[iqhnmiyolnoxjzjzjvl]ctdsnjzjaflstsy +glmwwqvembkbsnvs[skbkkvnoycklltrnyrd]irlewhaeagdiojbr +gmzbjlrhyoqkiyrb[nezqwphjfpghjubnw]lflopkhihhamygznxv[zuecanynqmvceqxyy]kddyqjerkeuhuamjxcu +kwneigdpqhtznqaide[ncindqlugpdagtfzf]ctutcducslvhztsii +vhjlncnrshwikfm[amlxjsoevzrlkgoxnml]lztearcwiosrcmhfi[gkdbcfroyrgwylu]mwhzhimfdrflqqihaq +wlswesjcluvzurgrnul[iehnkjghqwvennpj]znqbjbnszpnklctx[pkxxihelrhfkiqizi]dlmwkrxyjxaumvtlbc[icgjedlkxpjwmauu]cpbstqjtdebbywkf +yxjwddyrzrzhqrarheo[dcayrrmkvazrzzlpqh]gkvbwuimfochtndis +cmqdgywvwqpfkixkga[zkcmkmqoxmpzued]iaerrfcfhcaidkkvwvm +uhwbwhbgkrzntdxrw[pchhzpiwclaasygyqn]oalmglktkidoijgyg[yugfmrxigwwqldfsfb]otdsjvxzdlsdhnyk +ctjuabhainyjydm[axxsgakjkreoeifx]qaphofrkpiflusbeecj +hdfthabpjjuxgoh[zskhkbvmwkfmqct]vmqfixzmyefzvza +wnihepbftegtdrtndsc[wtmfxwvxzxorhbj]oqlfpicrqpjgvmo[zyvhvkalgcwwjucnxq]ppatiiiatwbpyiwjr +ojaqpoarskgzmtrj[blfchukdercwzqa]anfsoaopkutqfqltry +ofijvkbfofbyadh[xmlicvxwtnufzpn]jetnmprdolywrbmjes +fosypykuipsqxaud[tbfwtcrdgvidqsg]tvmvfhrepppxxwme[qpmrvterftfxchiv]flnooydpykdzrtfck[omhwxcdomygkbaeqrfg]cwztbmysqwpqfuig +lvojllusjibvayrr[izfttqfhjethscsrghs]egzyjonmwdatznvzjw[mfxjaelqslyvkaqir]ckbkobhykxhocczot[oezwabicsuchjia]ivolkjcvilnlsdnk +acytktosnzjatmwue[medgjpfpvbiqgld]rjsbxcwqhrrklyfuu[xclxdxjcgjwkervy]mspnrnsznpccgcke[ptntxmnzdrorgoexbsg]bovvgignwezlpgoy +wdefvabtqsgstwhdxm[otahaybdinlnszsaan]xgjagsgrnziuqxjasw +cqkpuofhsousjfnlfxu[syvkhshtiyisqmrdp]vtvtzgdxigpsxcpdkt +qwagfdeyxorxoaphzt[kijseqropygskgre]tnpsgfihigocogn +nvppsgsgegzthtmpt[dsjjswqmzkoqtihud]toeoabpfknrnwqxk[hgyvhoktbvmdvwauue]pniilifxxtotvypye +noijjdbzbeowhtut[tlfprbqoqtftqnjjs]fwqyyfzzbzjeykhoje +rewfvmohscszlog[dwgnxketzlgefgf]fmvoxbzpxywaicq +pvtakzfeeithcogo[mbktbqqelkzddsmn]nuydimwmhdyhrls +qfzdrtjoipdlwkd[fsymmkclzvcdvqexr]yrhwcyjdzgwhmuijhth[zgturekjlobpmcje]eywzpwpfahsrwpwl[bgyprfkbmyaixrqj]fvhhmcltucokvqba +vbpnikyhvhqnemdo[lnyocyrozyteoxalil]phhqtzpbgpzrusr[yygaktzkmithtegl]cskivnspoecsaoi +obaxlisumjgehbkpea[ehzysfspgzssttpebuy]vwceybunjzvlqevd +fpanvbmzhlkcazo[wfnkxffkzmxnslov]gtifhhnlnnxkeaolr[pwkmfvowikzjctrje]anfzfrtlihlyutaq[vbujdswyelmwoudg]lckbqqgkglpkfnhu +ubsustsojocdyjv[obkxihfxtkbaeusurk]zmlqtgokothiokq +fpgjwchgmuuwpzquwf[xtluejeypvgynbsdgip]nyztcugwqufjpakuxkb[yanyavbmpeqlalnk]tknqteuqrnnorhcm[eshuljurljirasr]supqastijujykowxxhz +solyplfhwchyjtchjuk[wuwirpjuevkxulrs]axqqiqzteislutclbzo +oktlpryceitvhqqjqxq[ufupbpapoxovifhqp]xgrwutvfooowfaxs[yxoxzdoqyhxsiwcxrgm]swmalhlzrknfxgnamr +kmmguldgktbolgarsp[lxrqjtqbuhuthezfcfm]nhyafiyealodqrmagqq +jfowosecwpywmrwka[rlvhxlrwehljixaggho]tadphuxhvtyxkgvyru[kdwmctblkvpkral]ufydjpceosbxpcy[qkiwffygsjragvq]zlvqihgbbhdojkgjgj +fjnehklshlckrcdhxk[umipduxaengqrizo]obuxhxbrybwifedma +dzeftgulomkuwyrrm[aphjorxpuphqsqmp]nnslfcfiblaexsbftwi +eypbooqqyvqucqvyys[rcijvtatnyzpafpqhwi]jrpwrlhuiihzfwt +zikyfwsyxwrtrgdkjh[netvaemiverwhfctosi]xwdoncumksuzsryj +jxtpnxhjudmsotudd[lgvfscyjpngmela]wumifhvbwbmmticp[dvxmvcccimvvcrvpist]czyqdmwoqjgnfvjuxul +fvmjytywcfdqfmfvj[nhufehmupvzkcrtewz]hyxlzunwnjccnnphrsg[hrfqmrewnweuyulb]hmqxiwaqfebkvxhv +peqyzkuviznbwojhtys[svfilvdawzpmtygynd]fpfggygzketpcrrqx +ttcupspyysrbukznk[rpewzuewspsqthbqb]yszbsclsnmbgoazsfl +vwoufilgfhpaqfxt[dmlwugzgaywwzqb]rkwtuggupfsffridmux +faibpioziimdefafugx[unrfywlgqlxqmwtxrb]owzarstubtqbwwjlh +mvgbokjnhpcnsgcpm[vznublzcbsgzahkjprq]qdhqdlpftbetdzckvs +dgpkamepjkfizyaknmw[ctdimkbvwctjqcbl]euwsfdqpvfkrxuwr +rjcdwjzbrqqqqljqj[vsrppwgvlsokgpn]rxpddxouefplfnctudb +lhbnntitpjdtprbd[cctbkujpuoegzrijpus]xbkzdntmvzbzfxljvt[brlovkywclhnnoyrz]rhixzndklgudnxkr +byahaivirlqxulwdoe[otyasqivnfuwxmpn]vzsqfapigdecsmaqd +myozxxksdnucpxq[jgpjjngigboxsoy]tidzlszxsdbqxba[lctczcenpuntfjnf]hzdlcamkehorgpz +uoylyvyljpnzqimzgh[umieqlmcsmhnnxle]zvxwqjbaemhtoexyzr[gjyxtenkxacukadvhfh]kwagkgvaqklyfurjnar +rqzfgsolwpyfzeg[fqbhyjayacblhmm]egufazwxlncxundcyyw +eexntdgtjwjtizhlc[havetzocjnmfnpgzl]rmeusmuumcpbzodie[efuqzkuscnrbxwef]ehxrajahcfdggjyq +ozakiysvzkycefw[dcjsobqhxqyxnvwz]yuoszalpobgzxqk +pterhsdeyetokcbtzn[cdooadgsexdxfzjmo]xdxrkcynckoeirmjnlj[matsfmymdliwcqlqf]llnuahmiztvbbpise[egvzoittbupbbqrvd]bantcrmtkbvvbxi +tqpfhtrunndzpsd[zjzqvvckxscqzavcig]zquncdjejdyzegvcm[sxxdynlbdymictrfspg]smgkjimutkedknlppsa +byjykuzyigqofolpgf[cybrboapdfgimjwjm]oczicilrowczdlcy[tyaduotkhfvyatb]iklhgcjvfdyypdrdbz[dqkfqaadlcnxfofsvw]syuiaqaemufewlijxk +flbmovywhikcuedd[xyzunixgypmuhyj]loihlyylswpxtenh[jadvlnlzdpmoghiir]xbiwlfkwxtthlimngnl[vgtvhphgxfsshkgkb]vttcixaajhdcjnqx +xxxluypjxxutqoozzn[gufawigbmnhtmwhcgry]yaldvqcedheoocj +seczijwqqpigqcchnz[snihttcoqeotvsvxtsh]zzgbjkslldiespjeejy[dxpgxigvppgnnddyd]hcwgvtogqdyllyhkqj[hbkamssyyusrgbg]dnnseuhlwkwnycktlu +xeupsswdnrpzqvl[tmaszjcshsavymzuog]svjeaxmdkgbimlv +dktkcbqwdeomyrp[fqaiihosklfctvufhw]kscgwrylrgbrxjzogj[hqvwmstcpchcqkowtxp]xfooorpnwwfrqstxft[zclwozroattjxczqx]uwnclgxymympirm +yohglmwqjxpcgozvfc[ojnlrvpzwcwgnfbvf]uwjufnumsvqwxpg[wrfczzmahjdxdzhifs]psipfjeacaysvubcqqb[paeelhpmpjlvbal]buinqeedxmiijkxpcpk +ficdlwimcpzelkxcb[kyizgumxqprpckyyh]lcwwypjwqbzhtozovh +bycnifysnrtdseez[xombfbujijpsrccccl]tbvuubyduxnascxjkds[gteskflapsthkzigcet]otggllmgcgfgqloehf +wvrrowjovflnwpjhhrj[dqfmznuqmmttqtdqnp]wevjmhhfmorcrvxvw[cnjtxcdcketvdidcbu]icghhdkudxptbdcdhik +wquydkoyevtyfwqyimg[bhbhiqnxwfrcvqcsdq]hvcjbihyziwvmqr[phnejggzeulkkbdxb]uzpvcrhqhfkdkwvxcku[piqegxvplepyfjff]xqgfyfmlqqgcsnngmli +aiufvoznehafclsi[ynuiezokzxlhzsnlnmw]buhvbbmikiczqjlfhg[qfqcudscoobzjdwfyu]dcqxfcrpnhywlcabobo[piypuleecpciydz]xiendyljklimrwaexac +bmcenbqijebgornj[kskdxdmdlojqtjtw]kqpwfyitjbkfubsh +wjivpitbdiigvkhfpjf[ijhxqgwkoctfiyf]ezeuczihdpeegpnppj[rdcsrurelstudtzqv]afvyxjglfxybwff +rypyyznanxetdychyd[srdvpypvsmzquaeec]qzehxnsvvccjqbjres +disgynuubaeuiwg[qhmjwkqbmmjhjze]zgunyyctwtucdho[xljnbisahxahllyiob]astxdjwqultlphiijvh[zmhdobafwbzdndlrm]hwcwvfxwjynbaxidj +cdhvflnylxmmlsgo[oollmpblrqislxgmvvp]nivfytkylfpufcdxun[bocnmaazerwhgtzt]txxystvwvrsyoym[iafzkvskmhqjdtk]pgdgojbemypqbkofwf +sjtahdwpdhuosbqyss[lopwkbhedbpxtcw]bvtrmrjxtncfnrw +tdofrfbhpawcjokb[ynloiqgijuwanfekxsz]fdpwynqofzqumlrelfr[orxakqzzdjfnzlgywae]udzboibfngqztfguv +huwdaehvnyhbowsp[kbskeavlxslbvco]sekeunfcfnrsjqgqpcd[xrfzxupwqfrobegw]ndphbckizbunwqmykse[qyoqnkrhdydzuir]romctjjzwxjbxyqm +eyutpqnxiqygxwt[wxsiplbaidmlgph]vhlavtrefmbfpdfbju[owuuvbqjuailmgynkqa]setuzkegazwdjyzskty[oaqtnegjwglqnyw]pyizfgyjbebfacjexkh +bxpzupefyifcfhkv[fyllboalhcmvoctf]bvfifvthhaovzixpx[vtppcxdmlfbfgvgolil]gtyweatzcejbwtse[prplzrovjaeczsyxc]jkylsdulnhfilbsqh +eedtujnpvzzzdpgfrm[uopptnavfamhccc]qdnckczikmbwkxfmst +hzpjojvdukrnakxzkdv[gychyosqibeedkj]efhirtkgyzjnrqn[egmuiotfolnlyjg]nbleytvfmuvypkpabt +xadnnqlykhisnky[hvfudohkwpthdtyxe]xumogpuzbvdpbnapcw[gaavnafcpfbycdpvz]xlgtfefhzyskqazl +ohnpejtztddevoitaw[hoixesaghtpruyayyzu]ksyuxpootryqgsfctcx[yoazsorvwpkcrjqq]allrvqctxxhldwwzil[rxxioewpnqttrzaevnw]tjgvhfbpninpzwvxtl +qhapfqjbpzieybx[iobyolfvekomzeelsd]ygcprxtqzmwotja[pheachmbpziycyhykp]yhlmlzbdngqpvfcjt +egcxwspabytsgsbam[hewsugjwdvnywgjhrsb]gbxbpxonzzllmmkags[jylmvbwwjvmvkkgvusd]fxckijyjjwfrmlzp[eiohquiromkekgsbp]bpimyywlklqwdpfasc +iypuotjzbcsafzclwb[mudgawqgospvlepaexc]bsqftdoatnacbnpqk[bxaxwphnmcxlptaz]yhbsqduzzzkviyxmv[cfeyjhtefuxjqndg]rknngkyxrldxnqxfil +epqhofdmbeblgqjcpan[tuffplppwdkoimwbu]yiyfzqemymmtzevrvtb[vzuuiqvvudpedkbdgq]qzkbzuuvgzujipvh[etjfbbzkhkhvlslkjg]sqkdjmgjilbpvmr +cukbhochuhppwcuwwh[ziuieaxmtjrcovi]egmfefvbqztrinknvh[tcrdwnuqobusvhhhuw]llwltqrtuzujeuatp +uegokkxxfybcozva[hwnrfpsyzbclsubdc]kxssypkvfyghukcsted[uvtzwttuxxztqwwyjx]lhlyeezyttvgxgtz +vgriivdekqhhyzgmc[lkzxlushgdqezkwkbv]aqtzbkzcfxrkuwkw[aeubxxnhyhlolauhnu]qphfpphyptbmbvcyutk[xscabrjhmsfredzulrm]torgsvodiuuxkgcp +blygklicgpngtpgcldl[melaiuchcudinutcx]fldhqlhwyjqhgthjsrb[qnvfdzzszgaedjqky]amhauyjuhdistfgbipm[irrhdtrtvlhanuhfb]cszydrvyiahzwegkdiv +yrncnxrkuamoung[vteffidkspotxmwhna]lohvncugddeuevq[ueuixhkoouhzzfucs]xgwgddhczhiovgacg +gowzwidadczncgofqsa[gzkezmlagbaetlf]oochwgecelkuokyunem[slzawxgblqhorfpezd]chugkzdgaukccbeoi[apmckbkkvlblsel]tokgjnxyppksnep +zyqnagblhgoyiqihy[oisqkkmqfxdtvfx]qrpxcdxvmtlqbgvm[rsoqvutimhujjhbwaf]xtdayhoscopmejfxz[sqcpfrehprvngyagm]ecwgbravfceaajqg +nntkrxodbypdodgtj[lnlglurkrynztgae]twtxdcskknbsbinlnnu +meztofjunuxbkfx[cthbsibrfgxjyjawtv]ujhnboyhpoyjprrheg[qmjwvltvyjgntydrmeb]dsbnlksebapwyfrtr[aoyswieertsyvbfijuw]wfzftnldrfdpnmnn +aanwuubqnptyoryyrw[izbhposjoffhknmia]pmpudrwiwouwspqnozk[sojpnvluazibqcqkw]veawduaoceyxmzwbgd +aenjhairjysyrfylli[ksygiscororwmpcbpl]mdggayipjsxxfhz[zrovsdxuwyxjjbfm]vpmedxtfdporoono[zfnnenxocrbtapmnezl]odykztbwvuvlngxkwm +aetllelassgaxxhspd[knioznfojvtrwjtnvfj]zmdmmmgudgcrchsuufw[qowcvxqgjaoptskz]qyrfhavolkmidaul +gkevcmsegjotmpa[yjvykufplocymkaq]yhewirtmatswhjud +kaerzsgqzwhdrlzk[fgmfnhjaylhdvepgdr]smkwpurhnnhaqccuho[cznwafhuvozqolaruqx]ktiyadiryeclynr +qnfeguqpvoiadeipxs[tuodvfpmqdlndroq]ruumxxencwatfiv[otgvbhlyuhtbtyfews]swsjtpcysedmpsgwao +mpxuvhlsahhdmtwlhz[saxrupcdkcfpmpvzk]rctxchvmeqnqsxqizr[isqtziiuucctgioof]vdlchnruvtuupzvukfx +czxihwpinbwjaatnmx[quuiszmtsnqdsugbr]fhhhwhvrnenwekmyi[phwhrltyjkmdffqyu]woxrbiznmygdqbptf +qwqniztrmqkkiyg[yvknzntvwmikawjlgh]izdzijciztugcknoi[mqpjeordqprhefbbsdj]rtwjvqdagpycdsxtd +pyslrefucxvqpgtnfd[guaqdwpjlwhfmmyzxln]unlgsygdedtpfrpz[uxytlfxsaeouxxdpdb]ufpwpasnaiqyqnex[kiulyoykitwlllexti]cvxikzspuywpgaud +rbzuremuvpunjopiw[evldkwtjsfwgvdl]unsafmnksqehiore[ipvgyeheeuobibga]ohwjoehyibiihubwuo +zlxdszmzwikrjfjfh[rmzbjspugrnhysidi]impguvxjhbhtirmdihz[wlpaqqnimsearxzka]fftirrvfdqzoyusjucj +yvzxaecltitusbcfqv[witiggtqtgarfrq]bhnbijcfbhoqpojeuqw +peyeydbwowzleyebpqs[abxvydhobwmlksefjy]hntuuskjfvsfwnmh +gxdajcawzfzzhjbzpxm[nxdsexkhsbaviwzw]kojsiljoybqxuvi[razmescyfxecbmzc]fdayjgkrzsmzngiszt[sdqgfgolavfqmuzqag]uzbbbcwcizcmhntiom +gssllxegqicytbgko[imezntkypaaclprdo]hojadqftyszdiohirac[wcpiroednqmsrywvxsh]gkfmxwfuaykpwmdukm +iwdziuryoqkhqzukcbq[qdoppjrevjmjuod]jewewfyupjnuydkn[ysbuocvxflmhbdhlb]ggjdqbzqfekjbbf[ubywismzabwewsrl]fufmyromzqrxtxsijkl +tbmlgasrsqjxwto[mvoqzbghnwpunzvxu]wxnwrrzdalxjlflva +hlalpnzdmwlhuwewel[uqawlldafxwhejwbxj]vkktsmliwswarsq[isoseemfosjusoo]bjbjwogehxaqhasloxq[oktpqmpxmsnvbnsubz]ekgpiztxkkuvpszb +xfxkkivnffdwrqecja[lvgeafomwyqhlfd]uyvvthewoyqjyoo[dcoayhnhnhakcuv]sfucrodbqeqcqhpmc +iqfduwigwfxgkhbge[qojiewaocberonshm]toxtpcpkallieefn[swenxuejqehdfutw]oaiceeyuhhzpazuyaiw[gqbyuetdmvtttffowv]neqopgkvwqemnrmauc +bbwxyipchypnmsk[lefobpxeokqvfglny]rwdgvzdupkxjhppcqp[onrpulkcgonndkfq]eegboakcdoqrmdgfta +yxeegoeubfjhijn[pmdjdggehnbtvfqkdk]ofdoklopgeznrvssgdc[jidbyndormgpitjsl]ucucnufigpzjuuxdq[phajlefstzyysdkdrh]vziqmjzpeeqnqholz +pnlllqydepsbgkrhm[ltoscinqrrvkdyusds]qwwtxmmexgsfqgoh[uucslmiboquvlso]xmbeigfpdmodrodwbp +jatdtuzlcxvgwpryf[dvyuqxhxkurrpblehq]vowbsishfgkjtvicd[krvikdxyqlwdjjnd]mujppmtqzmeviflf[ihqppwgfywzrqyx]aobhudzykvgwwhirfiy +thmdermwtxojztany[xcohmubhlagpuew]lnlsiczemaohvjhhknx[spnegzrtgilojpnoxs]spnvmefqqzpdfzset +jccjsrpjiyokryde[gfwdanjjnbycygt]iqiuzghicmveelbxp[tzugzompmkteyydyeb]bkvntycebtvjlgour +rzskdzdoxsdqinbmjlv[fnwbduvtemtogsfi]oayebzmwazggkoo +hzpsgtucyxemkvmfxy[duxikzpqdgcmkbl]bluegvpkqmjiyzibglc[qruyknjgybyboyvmrsk]pqyrdevwrpeatgkyo +uubdyuzvtcfrrdl[stntntweakppdrbqk]yoiwxzsdefzihdnilx[vvvsontntjvgcvanni]sqdbtjoziwfolwbby +tdpetsinuufpbezbgpt[hpklzrbaryhnibm]ucetauqranqexnfdstk[sadfrrjazeweeec]jaozzdmvmylzatlon[gyrmfjwewarvlpsh]wfojorkgrvraihwpaf +sarrhlzjldgzhyuvefm[braqtukjacxtcbrgtx]rpfporiksxcacot[zezcjaonoyzxnbgd]jmrjkrugljonkzb +hclqtamrzmzkhhwcd[hcxqnplterhqgbude]kduskujldxotldizi[ashjjijtmbppyhgxo]ozdvjfhxmojeqagmoa[dppzupkveblwydh]qonltaesyzvczgyng +urvfscylyvpyvpqwl[akngblyladvcuwa]pauygcletxnisgriad[ovsqsgvuccmdzqcwn]jjugrvjyydebzrjghae +ohvihbfwdsvpzohtu[qsxghcyyscnxwgnspni]kxlgrkvsbjeomgckk +gzywjgljugwxnrv[mssfmontfbahkya]gfmnxglcggnbrpvuxv[poejydksxougrcw]tiqmbdmjniaqnqgptk +hillvlrgjsewmjkoha[iighatessfoqwexqdc]iqwztbnauifcazihogj[xgovsowyvdafqch]qfjgljkcgkdmrnlrrmv[hnjcrfgkftyitryole]muemrwwikauccsregut +vmdrttktgqkyovr[myycrednrrhozjdhiog]qrrfvxcqpthdfcls[nipthbalwkyqrmqy]xaprggoudqizdkqu +ofmohzqodnueziyemx[njkghrspckzhduwsrg]fxxnmxloclzfmlkebpl +naurkqfrkpbbfkmbe[cpttgjergcoemawxjtl]cdkngakkemsmtgtwyzn +xtwigprawkooqitoy[dzapkodeyqhkixy]zrtxkzjqgqeuagdie[vnieacbchbgexzaf]ezbpshpznqosvuk[mcmcfwuzlyodiqez]bojvjhtatwvmxsxhkbs +muiyjlnqtepriyly[cnrfxiwdlkrqsarpc]hdlysxsdtpqxquhnz +clmaeawlvsluxfrhl[rayxcpbervctzew]syqcakahftovtzcdl +ljjlywtzejfslouih[hmsyjqsqljnppyv]bxdissuzzauueguk[xhyiqeotzpbtzsrd]wapoxmkfmxhbykdv +duvdnbsaqzqemzc[kfefbyefuptincfaw]jhuvhgdqrnjwmlfrmr[niprevfcbwagwvewhj]hdhrwocbqysjstefldo[uelmkdqczcnlmaefjms]bwszcueianjsjhiywwh +yrfewhgpkihnhct[pxzsdirhdakahwdxteq]ygayoyiuikakdqo +wjrmypbsxqajzbtwl[pvltruknhkznchej]ypobvzyforzyiihvzq +pdchmvgzmxaspkcwkpp[kekolrkqgqcekeitv]xwpjbdcxgoelowm[wxdhdpqotthaeay]ovvuawitaqelckg +fcqvgochyglldipl[ryndsmjdhqvikwnexf]smwbuebgfzzmfftrdck[ynaegesquznhgmisvri]hwbktncquitjaqs +hcbbiznmlcfgdfjtgc[xqnepuustubktgck]jspcsloqtblxprd[mudjqeoagjqcfato]vgguzyxablhnrlye[rvzjejrpykdzzqcpgmc]okcylioamjhremephbh +ihlcdgalqwvznxl[afsqmxduvmdjftmrjeq]ekvaovqjvajxfdutwhv[zolonpiqednbtfpsrh]vurkbqdeglqdsml[jivoaiwnfpbgbzzc]neycassstykebswqao +bsgrhhzfgwsgzowrbj[mvkzjwkxsuwxnioolfq]yobngzosyzkmgrphxc +edoabezjjyzijqbgxup[lcxkqejwnnslgykokx]wihvmpynxyyhaysxvrq +wmbgvnekkdivugwirt[yuioeaoerarbpcmbwk]bdlohxkfgdbthtxlc[zqpipkuumpyyioewz]xssqnavbegcidoenex[xvcirztjwasastitiy]mmcxttawlbzdztesk +fmfwtjsguazrodvdy[uuzglafbhjlwujwr]rjttgtqakbrloqs +mjtlntwhjqjoxsbhk[adswsdpwqnvqtuj]uwzfdezklxcvhvhb[rzmgufbrcamkvsl]imtazflkqvdgqvfthc[pvktfhdynocqbhqb]qjtlmgsjspdfgoazn +hfeiexxrkdehqttaam[uinfvckvhatgmlblj]rhksgzqfcizyqqx[ofgjnqhqhveobpzva]qaxdjvvaibeenyuzpzl[ktwkynazrcnewdnb]yzmotgipaelgbsahicf +djhinybbfbbvidnyest[zougucdzxpenqpoi]vvxbocdotanwdrjks +poulgwkphlvqfjplgw[enhvwdoftxrnowdy]jfepitixnyjgvvl +agbtjztsonrgwzivf[igqgvjqttujviljk]pmqphqrfzfdiinxhy[hjpgkjjwxgfsiki]fqgfwrylhecwcoowxsi[fygonoznhkmzcjcpm]nwouwxzbpqmsxnfhedh +fnukiqycmrzcije[optroggxrsbsokabplj]vlepcfzbmvrqptyx +pdteouejbrhsicugggj[dipcyddhrktybch]rsynpfyiklwyhvlzoxz +yuxxurstojjfnoft[obornuhvvdtcyzj]kivbosojivpliva[twgyjecwqsxjmgi]hbphkpnfffzpbwjgf +iuauoxmsalkxobrgb[blehxxupivauaxkahxf]torbqoddhsksgtnps +sjgwxpuwloyujust[psqoquaifhrgmah]vpaddscloldhahh[hditsfewhihijrpf]ofjdasdbjvfrwefs +arpvdepqyadnevyphg[kbpdnghrphvogmn]wrzcskupnydzepdmxkp[beeaeyelchimtyrq]yppeqczzpjsntfytp[aofegesxpscjbehmcr]wkhyeeykbgemqgcynxs +ouluccjlcbcurdpkzg[flulmqooipvjzhip]qkxrrgvodksuivbspr +zfmcvmwchidwtgjmpoh[ecthaqwuytzvxcfk]pwvwrbzdjqdtxlq[fwbcqsvdosnolronvef]sbroultaoabvbtvh[ziihpfydzrkdqsz]uydoxylhbdlicydahf +wyvxswplnabvdoeshds[zhrpmmoiilsleemryd]pgkwuzialwbqkiw +ehkebgpllhheumhf[pfovxzqmiqoxdmywhc]qpzsvhisrjgjfqnliw +bzizropqhokoukoxz[ahvweuhqlrysrwu]sdmyzgqcevcixtomzch +kfyocamgrbgzslp[bclztdzvmbyetlgjk]llzxtjeauatwnnpkrvp[pxshjlevsleipkfkmf]xblovddfkfhviqulap[zhqfznscbngsaej]rjfncwzuuqwowdhfk +biaunelzsqaxohte[zyqygmhjmwigxsfi]lmdfmblocglcxaszya +ngxgqwjnobiygnm[jnhtcpyfpwpwkxapib]lyhgjgvcuwgbxgxwn[rovvgibkfcahiyn]dyojmojklujquiqfsj +tqdbdrqgfyumjwktbg[weesraucasfagyailb]ilhskphxtzaqesynmi[stfgxrouxicascniwpo]yfkxnhvrwkielncq +twgbfgwbpygvbfnyy[xhwmhyacxxleyadli]wffogpkjkmysxzlmpuv[qnjizoqydldcwubtux]askyjzovxsalrrgo +yunqqhjmfpqqycv[vamwyuzotttqgdzgj]lmuivwjmlbeqkay +qhquozlhiohsyzwv[utxfaionxyjgcnpulf]nkmfgjxfobxmrydyic +wehhwiznslzkyncnkc[dzxeftrnxfhrwprllke]imknddjnfrzanslzdz[dfqldjhkxhowubxs]ojzmgmludytadwespep +rbkqkcqoxrfczfwte[poemreldxewfaif]vehqkzgxcwmvocban[ffpechryektpzbdaivy]emfkcgsqpqkqxiitol +eidbkaxexnexudiembn[xyiztwlbqvoavomnlwv]rrfwfdixzpzvwkhwlw[kjinrqheqjsynha]pilasnmhghvvgaxor[nrgzhlsetahyskduscq]uazoholzvqjdaovgjr +ynlcechniybypvzubo[fupezmnrswguyjysfj]ckmilshpttvobgoux[hybhkdzvvhelhyvoynm]amrybybroexntrlcmvy +qpmlcmgstzjfincjh[axvarrnhwnkyucrz]wbbpucxtqbdjxsug[tutypessbhpshlyt]wwlkakvsggtbzcz[rypxpzrrmmohyowkja]aeuhylvosccpatslhp +hrdlnpgexbirsepd[waphktwkfccnylxg]hgukjgxutuzfovpazhx[jzgspycuftkivlpx]bhfazqqagtfpljr +ciyqjrkwqlwtuhh[lknvhwchhuntllyvjb]ontiepkrlphiydhyir[pdcojzrccoatarrqj]rwmyqonvfiexmbnjy[nhknsnxkwatatfhwa]qzlqiiovmuukmwypy +tjxbenxjlgozxrtqdp[fqimqatlktqjwjdzuoc]fedjvxnqivqaxkvcw[lskccrwcsxulkabzp]orszzlxhimwlzfawjw +yufbensvlqaxthui[vplidvdhajkxfkledbz]uposqezqxglywtlxgg +wacgjknueqomqccqnkf[erdhexyxtcmmvhums]bnywbavxkfzbqwlppv[bwdbqoqfxejqnsgjd]eafoepuyabzlznxw[etyfwvldfchsrdsjyec]apzomripffavakswd +conwdmtawpjnzrjlkrs[lfssaruafijkmgdp]izwehdqwarvfgxi[stkwrpsrwwucxlrpvd]sucqudlqvvklrfdgac[gelbgtycawlilemxamk]zmdjppqtsdlqfbhmm +ufwwjiajxhcorfa[hrdobejvqrdojftlnj]vamxyyehcgnupky +eonddfixsvjssautqun[kktlnrsxhmhwisd]drpflrvwelqqmdrcleu[vefzppqxcrtevyv]yeayirahatkufcjvax +gipuuaoxlxfkqld[kytubcrnjxvhdxjto]kwpqrvvtjopyigmq[urijeznvkopxtgkd]infdbnklnolvaqwwvo +bdqprkxthvsgqlp[qtcbdifrlnjdpxrb]xqmtwugptmssrivqb[zlkwptpsqnljxxod]esxomobcnfjuxxdmsmc[tifraqareavetzrpw]dlpsxjssqzyqwhd +ylwhvgowletbcqjgr[tnhoxqhrnytlbnwifx]pyzwjmotosezztkqd[ejfcslurfhiompqindp]kvbfdwfmwkiswfm +bqlhxpzchtvwcqc[jhpqckkyntskugvua]ylakfwmlerklrxq[wjrmeexzlljednrxho]rdobmdgxkucmdrk +ehtqwbiyigxjvkp[qujbspkhxogjrzskfm]qebesubhovwonqudy +sjqrkysnnbgtkhwe[ibgrjvqztrkknsr]mnbkbbxvfhsihzkbsqz[hxxhvxonqzrgcant]kbkvnbphoymseakbxjf[yjkdvhsscxggtyyk]tofzfukarcsahrmvs +ndepmgjnsgfsttp[rgrcqahcpnsyknjkd]uablhivltavxssnx[uwjmrokgisrjukeoh]wollclyotaektyjg[tzbziofnztlojbros]qvbgoapfzbecqwjsq +lspiukvizecamzh[vgaxbxgipyodtbxb]qpnkwuqxsgnihgd +khdzfhioeykvnvxuhic[lhfxiidbrwldhvfav]rwxsfwhshazzaxvk +coaljuoxfhvirzhedxp[femqrflktuakhveiiye]iabhkrebiawlktxmbr[pzvgzzcfzhswxitunrj]kqpbmoluwjetvhdcr[tyqdtrnkdmvdpuf]skrdeadiylehnbiyvws +qimxmesehwdrqskwitd[nvgxgwksihjcplpl]bxnyyafyzxludvyehd[hswtrhxmggpcpcvew]cucgudrfxfbietibgv +moiyvifvvucewfqu[wuzvazqcictmsbtq]nktfnkfjbsejorafo[vfreizeqljwshfafwdx]xrtbsdzcfkdmskiiuwj +kchuwlbokzivzlzvib[izbibinxysyjrvtapis]vugjoxtigdmbdqjn +xbclcahcqnbzwpvshao[qkamrpzzmssylpxb]tjsufvzaorutvdu +hraytavipeznkuoi[jmllyjddfakuxwfsx]ofoxhbhnucmiztrtcji[vebzprplbxwqnzllu]peaegqqeqbjikxff[jxzebruqgpoqmklz]liakpsmvutnpufovqlq +omtbdjlfagkxdlntz[mhwuaqvyldixapgoaec]aghmtjapinrxlvem +kbvvqlrdswbturvx[qpkrbbaxhpljnhlytou]xsogoxibyznqcpqgygn +orqcxbycauryvjxq[ijorpddboqkyznnnm]rvildjpthqvtdrzcq +hvttzyckbqjbyfdn[lzeulxlidymszjl]wbbmixifmqzkvypqola +eizqnqqixewedcvcit[ohtuntptfbovbsnl]uuswevyvyulevsfnw[etmfugdbznyzikdtx]euprxmmhcrdoefvfjg +pvxjhbwdlshqkth[gwmtamzhtucvbkmwacs]uyephbahzeptqmif +zitdlkpouvntzndz[iluwraejfdnwafe]fuevzmqlsflfcht[suumoqktussjsze]dawzltubgawnahpd +krskxctpuowviqiqxu[xunkhvqyyqiqhyx]rcdhdjoqrutobnjpimv +frsjlbcvuwydaobhii[bdatbysbolkcpzcxoyf]lwsfakbmjilithjrls[fhozecjhruquesmkca]oorqtbaamburjorhy[occzlzfhekgspeep]lilnnsqheytwakzah +ragajrztetigfkm[egetcjedsnrseahrxr]cblhtdmtcnoaank[fzhqephlcyygbwt]uyqlhhlhmnfyfcts +nklzxesmrrdlzyakdk[pfexuhulnvbmndvyat]xjvspjnesqugmkngn[vmzvdrheaknqmzyrc]xfncycggjiaqvirfvnn[aqeinzmbaijlafd]pjojbnvismokshrs +urteecaminrqiohs[rskgnsdfpksfznqpphc]yaxixbacbtysdrnwixf +ibvmhqpmnpzmghdtdpo[djdzntakacvezlr]jtdoweayvyiaskblc[qhwimwixemjmqsu]rzekezftftlqqovnq[hzeyrnhbrrducxz]ceiqewhcqqmqluro +joqwthpcrccoovxrvq[qjlcrltwaxkjenbbql]ovebjdqfnfkomjpswn[qhwrxhvbaattcrkvff]nmytfcchpqktagojhtf +jeeuutsrxjlqegcdlrm[chrtabpzdcoetzoopc]axdhgbwmwhhlrvc +djcujdyidkcgwygy[zfpuoobkfdetgiifrpf]uxzlkhxzqgiuyvuc[gboovijloiwizfuuye]wimticbreszjcpsls +ylpbdnvjaavulnhg[novahskycjcruokxbrc]gzsmxnvpupgxwhx +qdarjsoimlwxduyp[nghlzeghibocgcbhqb]vuoixghxxsxftuztlxs +ikdnbajyzpzbtzjdey[fiygpvlyluerdjvcdc]hheswtvpmtvjochdsih[kmjnhhmbpokaxsrf]byzdcdlvgyorjvkujyl[ttxlhbnifbfgmvs]onytmkodkklacgel +rcpgwlbaskiorvxhgsb[xikxwyiageqvilea]rhkkzuqtuxbhuygcxya[prteqotsqfyypus]mpdedamsijgmdktn[ptlcxgtlxfnvychnwe]mdjujbmrytfbzpslad +edjzqlaktolcrbwboup[bvmtkmfmidimoohq]kpsgyntrgidclnq[ohqjnvirkjlmztem]smtywugfaobbpvmzj[aksdrqczxftjrzuylmm]ffyrsvfwtqlmwbw +rkgutyhaonmyick[udryocpupaohqhrmmsk]lmusznhxbkbagotha +ebtiyamyxtfcakoku[tfggedpatfzjvirou]iwbguywvekoline +vjyzycrsfycfrookru[iszkkyvwngsskic]bnnqauaqcfxctnyofoi[tlegfofrqiuqlgkld]biryppugzufezftpjra +neipbfcjvrnrmpijwhq[eppjsmrnolpscnfowe]crsmezklwmkbysajb +quwdpyfsllgkwtj[ercxwsjcfkbpohokuc]isdjfklflnudrjetf[fuxsclqmfyplxxvao]xflfujjqnglxzxlxz +vfxrgmnvontljaodk[pwtwiqibbceehlnhf]lwzkbshrmagzhwqyq +ecfthornfevsngitzhb[pblbvztbbsbsxxuwec]jtjnnhwkekrgjanoxbe[osbstvuwyjietzx]xiordmxphcsjnzfnrwe +tcnlllsrvzoxupp[ficwiahpzqtauuk]whxfguillhkpxitoqq[ovsdwbddmfojvkqrxb]bfagfcimddodrtb[lghczsmdqufswoayezk]ctkmauzrnhgotbibbb +qahnaxgypnpjftgu[bghbgwqxwfnfrcybzd]qinmtddfxbpkhqnna[rheeshzhyxfbcfxkd]awwsrosrkyfqcvtx +siffwvlfljwbcndns[cawuqwatfhgwsphjn]twfwwneebgzxmqyrhbr[awxuvozbhlohuaxim]dykizkumcmmnwiwdx[dikxuxtmacvaxiwih]mscklmepmcgjemwtvv +nwnwxbeggraucwj[ygdjhwgskclfginltdy]ngfxeqsonadvobrnwne +ceulusceecbvzesfpia[etyucdrmmbsstudbfo]jjzwvaqsiovrgro[msadpldzcxurzije]mjrrrqwmyqxpdgmp +aiwctbwfathsnst[ymcmlyeojcaokgf]hchdxsyquapjjgncfq[adzpesdwzpvcksioys]rbfqvkxsicnkphd +hnbounecoxhinavuro[tdytxmzudgjmyxmm]fovpxazijvtvirqfrup[qbfsslqkpyioabrzhlz]htlcbtysbfxurnuqgs[nybjnpqgugmtfculk]zxdfwtbtbvhxyrtcodd +ecszlqenzswzeujn[aymhmhqkvzbuabtr]qasueshfbfducoit +bmvypnceplfbhhsko[eypvaebyvggpcmzum]ycwgnjvrjmdrkiao[hdkledypozrgbkexls]isuydppzigzqtfo[onvsgjzwozxcvgkukez]uhjisxtizfjiaebue +ljvtminczzipicxg[eqfvilzenlbztef]hpdptelqvvscyfqjbk +kofmsmvngqzdobeg[atcxvdptaufgfpec]rbyvvgagylqgryjmdz +qrqirixxxpivzyxidp[vanhxwefpeffrphvwm]awiajngjmxhscxctxt[hnmowanymdizdow]lqjbxcvbswqatxyp +baeknzdxlkxorrfi[tiqhvwvqoyavllfk]uqqdkslrjsueklu +usgfgiqvoudfsdyov[unqciexsmnreobavmoq]kcboezrfdmoqrgg +xrqjdugnwddstnr[gbnpzkldpjyfady]edvtrvipwheribydmaq[mwzdiuqdstogfjy]owanzbjqvaqgsgf +oumjseobbaxvipit[ukwqpfaqohsabpd]twomizennyccksgi[hszmrfksmdcycyda]connwmiollbtvgh +skyizttcnisqncq[lcxdhawnbdbcptj]ocvhdptvtfnwqcdmjff[sqbbfcaufseolqwcjt]xlnlzmuciirvedlni +nwlhzupppktailtktkb[bzdpulmwswdaqrv]kncfgfqmxoohevsxfp[vgabgahytpqzalhap]bbubtzxxzeysqyqp[nhpmkotpzfifrfpmk]fruxnzwuvonfoxc +yedymyfylbzvjfwst[woezxcgsurflqnrmvt]qsiblcwatgywwbktdmh +gnbeeaxxlvupyacdpl[dhgikxwvtnhllqs]dzsbgvmgvhcbygjkxz[qmayyikkpsqdoukt]kdfbifunpwlbhsh[qrqskqnysxtloxs]zudxossasajrdeanct +rhftgsygepdspzqbewd[lcmdbukbzwdesfroixj]oblwwxyfconxmhefjow[fvutwgcvuaemgzqanrz]xtiuegikggcimaobg[uhqwmtpowirexexim]txoyjvcawbfxprxf +viebpcquqeagmuavf[kxfkxsoijrjklkgtahh]gdxrwirjrvzjcykax +uptdisvspkluwgzkti[omvlmaxnyxyzwuian]pmieocovsvpfcveurx +ejmnzzuuduhzoze[xrdlxozvhgiofrc]sxtycslunhjmvejtkd[pakbfwkagujukiybe]adudpcxmlamtkwak +lqyqdhuldmtwbvydji[okhzffzbmlvqiko]wdcicvzpzkaowwqnztt +imnhospjiqsxihx[utoykmsvdetrkdxvzti]zgdfvtmfjggwyjef +lwsirsmcseswkfxh[izotdhmoodsvpsp]jivuksxahorpwcgxnn[plncjtzvyamfyxzst]nnpdtmoozfzuemdcenb +puavooykfwvhwzmkglt[xutftanpuhgsdznc]rvzdveoxydbctczqu[hetpqpdgohitmgtgyp]koiwybsyijhmmqxesqk +puivygxavmlrxwkst[qvtxsgezqcquyae]brdptsxbxnobkvcqclm[ibxfeuecufosgtzhxg]vziaqziqriftdfrpnll[bjfubyvxxrbsjbqvi]nnlbiuncvdtnnarm +tlzooyjugzfsomi[robsmcwkpeprtatddr]taktjvhztdlygkj[vbjvzeeznvmamus]sformulcgeirdihntt +zbcyicsjcmpicotmt[tbrfctpfnqspmvnv]edzcoymhzfqwbuyuyu[jhauxxgwnguurrviws]rfkagjqfdvhjiavoxtf[zdejarfvfodyslh]pzjedvtgzwflpduq +dhbhmlhsizoeldofqs[qcypvphfozxibpjdo]idntecorhucvlufrwu[naoixcxuqlgsytnt]ehsyusyugbmahyrn[djtckrolqitsztwtuq]urantneyeodhvorgsx +cnsrdanbfjubsdd[nwynwjxiyygvgdlx]gyyuqjjvumvquvzib +otivcdfzmsjivefwujc[yiveblxrayrkmfjwd]mbwaroznwihbnbmjp +fwanqgdmtlsezhtvat[bhxmmztvspchqvhovae]cnjyjntrcijkmnjwnlp[rziosbsufkiamqmqnmt]mvxhzoxxibbkezhzlks[hfessxjoefqfbgxhc]kdgmlomxtdfgdgku +ygxiiehdqiqtqjzj[cwbddmmlczrgdgpibge]tartaeajmndarksakye[qnurjchyeijxcsdpc]uguxoncwdrojsyszsib[mlwwasmjacumzfqr]sguglzsozcdjzlooexl +ytyzugjtaxtnwxkns[aclewmcdbbbwyyu]hlfhrgrigvwsdmdethb[osohbeuazmmffxyeq]ygmbsfwcmyqowdvh[pqpwyutdqwwunfqt]ppkundibovmqwjwyll +vcrftmfliijtpaqsoy[zcpypxlyshsruwbclj]mnwgypyvzdxnnie +fmfdmvxkdupjadbxh[tauggdjujfbeogtsgzs]pygzoyudakrlrlba +ysxiybmwpoygkyle[xaaughrlqulsertp]iukezabalczvwieegzj[wlycqpkbqptraajl]mjevizxosnolkxnfwxc[veialybabbpytrf]tpgpqighdqgphcwoysw +cnxnptbcjhgrxrtremt[tjguyerqizvuobq]honeukqpcsoiapswdgs[hcroutdslvvzypfklj]owxcxqehkqqyeflgi +ypgeqbggpntconrgr[fmsyjvaninmkfqekne]ykrmyjpfwlhnsvgehop[gvltviftpcixosamy]xlsyzevtwaokuvneo[nbfcynlfsbmmweiml]nxuzmhrwlucgvfy +zagsvkbkhcrkvnukl[pyfiiavqjgonrarga]antgzbmtohtndzgf[gkvovvdgppcnyjifrc]lxdhpometcwlkofze[fpxwacqdussynpwd]mymrmftjovoqtkuae +xrtjipuirgczdlrrlnu[xdczaqvzsfgavmzq]luocuzuztdgsyxbcy[agpcmbiyqxfntvnmzn]atjschwzmauidumzxru[gvmmftvwtfsvudtd]vhmononuocptbuvorau +fzozmcmcymohndlq[rnrgxsywctnmxxd]unfjafhfgeexfykym[xnldroqvnecyhhcwel]wagagwcqljxduzebjeb +efvejswssxdrqggx[iqwwyhgngmwzwsw]dlkdcjxurmpsoceomp[scbledaqpgsgynjo]rsdxazcyjgcubfxlbb +rlkrgjrxefztgtho[tphpsircgzsauqfew]ridnbmerksozxzwx[lcqwhfgiihdzgtgudp]whskzgdpjubkztb +qbtcopfgkbhzhhglhh[ostebaqylyggiyfptkw]bbuaatfqlpxstpgwg[nydgrdgyazzfwlagrz]fiiddplgxeyyntyeb +bogowskdtwkyhtdpzw[uxvrferconwfnnj]eukencoekwwahhefvs[xtrpjeahwpxbwgogfmh]axqvtgibzojnfcku[zhkpmdtwlogmypeqc]jzqywlhocshrdrlgd +rdmpdlidbkplejoikjc[iqzadghltpndooanzp]ltizdvolnhagtlvr[rqcrkoaqwfwjpsrj]rtlcwqisvkznpvrjrbi +ndbtkvzkgjsuyfibsn[gbfhvruiotbnbtvuxaa]xihrrhcnbnowthpdge +vxtgjsiuodbsuhg[updgogkqrntiedefvh]xwgrhmgmpzsxyen[tbhogopfepprmtewkm]fmrtnudhysikudz[rrdmqrctpwlcykzr]lpbvstnhcmvnfcpngja +eoaqeiqpsqdqkdvia[pdyuqgwuhxfiukmpvw]wsjyvdabhrdsxij[puikfklqhrmvfrwomu]zvbbuuromxgpnmpviw[fvfilnspmeoxozaba]yaouxfprxpkvkit +qpaksrcracxnyuozqc[evqvzzqomyzwufkvxx]vmbkqqkzjskcxbmbbp[alqaapbcvzuxchmaa]pzxrooiyfqprfaucxue +jmjvvyxljzznmaarmau[piytxuyakxaropkfnfb]txaaoeuvlqiwynhqlt +yrgxyekmldicpvo[wqcvsbptigcqvzoet]jjwvbjbshgmwttac[ymvjkuxxoojchqomnj]tsapoddljyrehrxrke[ajspkmvbrzxrxlpzw]hwymrguaqnefpsza +dmlshfvkrzncuuoo[fddyurlzqbpqdidtkrs]kcewmacglikdszapy[fltgxlltlvysvylrl]rgovwrvccixdullrof[bqkrpxjupbbrdnahf]ebmiiwmxkutltuxwrds +lzklscqfbovjmjbo[rhwheqhkaseohohelh]msyobgeiybsbyucus +olbjozztfeowxftbsx[oefyqpxsebyfawerwwb]uyfpnsvujqenwouagc +hwhbihujnzgayah[euifzicfxexpxir]lpgjmexgfyseevwjpqo[nniwslmnmrgybuelwb]khkudtujoigkyyjipu +okiwsdqqwbijptpjzl[ktibxjcdrjvsgxzlgg]cimquzswgbhabcf[gictypilnrboctfwls]oiofteanmgnauid +hdwokqbmfofrujxvf[gcrxxfsxmycedcfr]xwcmtasmlcvfmezvtk +gcxgyjgbqhtcqznfuoh[yitqnwqdcpkgwzayq]oqbiabducwietmxira[kuxdaeohprtnmpfniab]wddlljbeofkomijydzt +gnxobceomvkecom[oedsyavphnrvulwlqfk]klkcrpigniietqecrc +bgzhntrrxvjvhyqhf[tnyvbggtjvjfgratfo]hltqszvzgcutrdcvddq +sgzcemtrlzdjijht[wtvzogdoomtmhxcwckm]nmvftmtbucjnczm[hkqmnugntbrrsphbmn]yfvwwzebdqjkryhm[ydcjwepsqqrwnhkpup]tyssdovqgkhvvstvd +buhlborygnuuklh[haftitnpydnilqbqabe]gemzbfstwlhejmjoox[awjrajspxybgdkbl]nrkncxgvjhuwukw +suckcafpmeixlavp[ehmqotytcsxzagjq]vfwmytywcapfwlljl +vblctxriewmbbpxo[xsgdnvmcmfnuejlrtz]iltofzajbcezlpy[wnfixwfqqgseisa]buystfqzokvletbzv[woumxjkmiqqstnt]ciarbpnsahayntnv +cjsgiueunqlisps[zurvijydsqsdtktm]xhlpspwgqlwqfvx +bobcmszgphpejiwlwdm[wwjrxebfctqobojw]hyrcpguihwihhpmr +jlyvxnexbisiiwyjjf[pxpqjtfgwysrewmrv]xcfaninzgmdidqswt[spnysxcfdiwijvfqitl]wigmjtxvsmwlquxew +qqtluuthgrubwpqzr[kgebpbdpqekehnnuyuh]onnyuyxeqstunzueapk +sizavpqzmcfexfocoxn[dwcfbufvxxousaeah]hymczucocssffcj +ldupymvmttlywlxbbs[vsttjksdhwfdxclitx]hfvkvgmtmaxtifvo +tbgqiatbujypfbjha[catabtthtrydcjbt]aujolgbocqymyeqfr[apsuwlktuaukokmldw]qllsjhthoqdlpykgwz +zqtpkzchpnnmyzygsaf[zuokmkcncefsioenp]ynympbineurlgzkdys[nhrjzpmbwhwcsuowx]hzawgwukxrerbljm +navcmnriavzmexm[xdvtpfcjdxlbsyenvtx]byqzubujbhvpwfcme +kookhqsmbrpgpsbctfp[wlbmttbadvipoyrojd]cqmhhdfaunlqkre[gqmltgpxfyljdyo]zvzerdpqmktqmezf[npidrfvvtdeqgzhojn]hzehtqonmwoahdakvve +tanngpmswmpddgfpph[egmymqydmigpnpr]bymycsueiolsfyfey +uddmrzbeefaxbulsm[ieevtshivgygbvsiwpd]lbxhzadyduakugey[sqywcrjzoxbbgadoqne]xngapfdfzbwcrkd[gurtymibbzvsbxtpypw]elpexxrljomuxnybuxk +diqvdzizaoprrpzrovy[cbayiwiifklhjkw]somecbyhptpmhjvkrba[gczcezgzlsyowteraem]xkjkakyvwxbgmybzj[htxdiogfsahudae]hhbdrescqujtyeyo +kzrqpxxtetqkqqfxild[tenlubsvlvxwjgokm]zxfixurqybohvhfa +pjhbxnktknirbwjp[arlmosnekoqwtpysn]hexsbuespjgsrzbvpf[vaacxsepjnqxegwqq]owuxuohhzxqnoqepvha +pumaevegtbjlzsijtf[cjpsnszjnvoexufcgxy]dxngvevsnjzsbuask +azhhrcrptkuqsvxa[hwxldisbvxutspea]tiqwqugkmslokmixx[wzqlcgyfzacbyoguk]klpprvhtplelelsmx +dumehssexnwcppac[gucpccbmtrdgoee]zpcpjjuztjtgxxhzroz[iizviarbucshvccj]xlypepsxxhxphttgc +deujoayipwnugheu[nnyjneomcvpfrvfu]sfspbwylbnzbyqh[innsmlncnbxrbfuhu]tldwbficslnxpkzlrtw[kyfmnucfyrwlvbb]wedvxsifdxaysaw +lcvkjzckpkeyzyjgtwy[osncmhyofupofwscd]rysnhkmiqoqulyu[lqwjsxrgpkpkgxnvhf]ftmywmwfpckoadd +pixbxvhtlxjxzpm[nvmqocftgaxxgejke]npibmenishbqrxtavc[jzceumsoxcyqbfv]qcdqqbwcueyyqptc[egixgueerjonkmigr]teecwbxvwhgavdfjxi +vhtgslxovrpmlojcyiu[pngyxboltgfaskge]eawigmpxrezdxtau[osjcsdhppmqtqxixkg]gkxhhsphrnkjyxgmp[khnpkxghpkaxnvgxqe]zpedrsevlishcdbd +ixnbejxsfmcjmqh[pagzggnbjxxwktstf]hcjdsogfetpzoucuxg[gsnpjjdmrqzojcozi]csxsgebagjjgxqjx +mekdjtrwhgafduvnmwn[aaphpbnxrwwkhzxn]jqzcqvefysuegreqcw +wbpogjbyzelmxqeaazu[djdqdlmpfmezzehvjl]qdquppvgjweftqvph[equcifktaceuqwoakk]uxemheczqpboerwq +objhlxsujoqunmhip[bxpjvcdqedgvqrv]rvycwulyrrllbrxlbty +ckxcgnosnlskecyq[lcbisjdelotgldlea]edcebpmpxvvgktuxq[pewmfvnkiiulfehy]electgrfvkbxiic[emqhtmrsqfbebmykzv]jfdpefifxcptpfzvovc +leyueicungygchlce[fbclcyopnajqvxey]jcwvhehawbpflgddtn[xlozeiujqbiinjlvrt]ljmnnzlebbjbccao +mblrhofhihdiotvy[nfatavuoewnlsvc]gtuqdhyxielngaci +eyzlvgyolwwobcg[vaeslqvdrjthzho]zdakaychskakuufan +ukqgdhxdohzgrdfc[vfxeqopkydlzdehao]cormknsmtbidhgml[ceialgwruscjsapfc]erjsjeuxzxjokxct +szronkojjdgnfzkpqzq[xpzmblnarrtycgglkw]cixtddybdschdshenjl[gflkqtgzlxeesrfvx]erpfhhlwbsdasjljnqh +crndgetyvbvxhujqtu[svhcpjoxbaacvpqf]ohhkqbbwhtbcatwopz[nzfqzdbjhixrtpw]dpyfzrpxayfoglzji[aynmktzgxtegbucrw]igvfejgptghxddj +efswwtohurobgbpvlhr[sbgfgmsrjsrjblwr]xkswzbsgmboecxc[odmohossczkqjwtrdi]gvdjrovgilpgrdgt +qihgnzozzcedhgivz[wfzerbwlgrjbwolsz]ehnxlqolcgghtdfkeus[isyrflbjdelvbgz]eblyrmmkbobefzo[baowrnzmyctfmoylu]bzhtmcwxpcqhubyws +tjgkgtykbfdogfa[tixjoqenpxjbetz]oybvzsgugsucpvid[qukesagikwrrpuesq]xodwkyngdrxadgqz[sigwgfluzksbqqpvueq]rlgcptipyfrgihzn +tbilszajwwosrhs[rewcahkzssatddmv]wtusvesduewjvissr[efusbpnhwnrdjwgjthd]dunuqtpzocqwyqbysak +spvqcisucqxihmincf[csjfurernawvtia]vzarehconlkvnhbpsaa[mttsrsqoluowbizxrbk]pewqfgipuxqzsfj[qznswrhnuvmmqtbq]mbjqscwfpmkejjowy +eqeycwhpzzryclb[mvthqzizihyfvtdgon]maeannxtfakrfmg[xlxbqdqlglfspvyqrx]chjokbtqngjjsidqdyf[nnmqygvepumttyp]zipyquwulqtblevg +etutgnamoiukjadrf[phwftwicxcpgdegzkr]lafqcmydwbvsxlegc +kbwfmffiylhmwisrb[wvoulhoyvagzmgxmp]heupruovkypjtzkilqm +hjgmjhzizaeqewp[fepsjuqdjujbjpnooe]rnovsbmzwqtukgy +rlxvqkugtcovejm[vqlkivalxqfohnwz]afmwxjnymstqmem[ynyidmrgyujdkmjq]cliodisdvotckoatva[ysfxjtwokboitvhi]xfxomfghbnfnkobval +oxsmqxhljzdjqtx[eavkvuusdpcbrlwmr]kkpbxnnmuqigfvbrf[qrfzadqfcladouu]irmuceccvwsazcydh[kvkeafmibmbgpjoc]kgmkohjtzjqnfwxkv +hvvzujphepxjyypzp[isabpxdneywzpzr]rjbcrfhnidqlywbgvxf +ezfeilvlhanyhfvd[wgbqirhrycdzzbu]wpwvyghpwpfykgdt[drvcvbpndcvrcirig]qzcdvhfcxqdxubat +hjkktoruvvqmuauitf[dmygsosigufbzkm]rjbwsccifhzyhqk +zazrvwupbrzlepfcc[nzlsrlgeovdbndxwqv]yhjwjlnravqgraen +fqjubgphparanlll[avwevtaigfdxgjet]mgftlttzuhaqlvwqn[cnxupkaxahrlnjelty]yqgaieunjkxlhrha[xexqcuvkacjayozydc]blhjzcfcoyiozuajqxw +nacvyqozsyqgnvkvw[urqhhtybjqfpqqcrex]pxfufqzfghzxinnnlq[vbxhmpntjgivfgzgmq]vgsmxbkpphhjvzqdirx[mrnmmtbamdhoved]zziaxsjdqjfvqzq +hdrdsknkwrtejdgeqg[wbvycsdyecvuclhi]owhsjsujsqjachyh +jwfxtraepnpxwmziud[qhwoewcswwusdqcvfh]czaiemhwpbkflzqi[yntelahhkwcytedvpe]kpkuxgqygwicxoh[vuifmbkhbycxqiv]cfyzggvhpveafhduk +ngiytctkauehibctccr[coszigxgcttxzoqrhvn]hfrpsylypetiwrggzg[xwnfgwaxrjabzmsqquj]gxdqtprloqdojdthh +rhhicddiuxdobco[ihkmummwydkeoqp]seubufqphohblrkn +sgslfpeleveakroo[kgpoljsrrcfwlwyzb]zeacrfqqaortgdv[yoipuknesgpwoscvguw]ubrzxeqpijxuflgsgpt[allsdtgmdlnupofjb]brnjhlzxmijpicty +vbcaptabloujxkqwnsc[iujlwsczjefkoewao]yqwmtuetinhedenovhm +fcswktnxobrvovrjg[qsaxxwxgrenkdcpfvx]bmivhngglvcwxwgjz +nhmxhadaretplflb[eaaitxsycuqarue]zzdsqhjjnebzptm[znupjbepvjzujwj]djueiauiobywmclemio +lzgmurmbxidxqofgvy[nhpkiprmeusixtqhfid]zlpmcgmvjfsqhddfzu +aziympesgvakqhltci[qdofqedxvlvpyqat]txvwrspujxyuqsn +ezewtaywtinlcbrn[idtmhvforhdxgcdy]ohpcvnchsamehoewc +ayzzozmdklbhitpd[xwlznwdbvtciozoykoy]ainwvvxkreuvsgdatbm +kvacickhqbjjwkk[fryxetyntagtppzorb]gkqgbqhjykyewipbcj[zdaanxpihogooeeqby]lxdkkpostipynvh +nzngguddxyeihkkyt[wamdyvzgrnofprps]znzgitnmvvvrrzsb +vnbogcvphumewlx[cboxtlpwdmfbtfegkai]zlxznqxwahbghxz +stwxjgiqglghaaot[gdxpnepcgstafgt]psljddrwgewawdc[snbjvfbagexsbpyh]wqqhsxerdjilgln[jyqcqbxxikzmrguo]sophymnkilydvivcdk +kihnifnjfzhvlinqrqi[bcgxtjpdyxtgejzrdi]avzbrcqlbmaadrrvazb[ntmnrjhiklfwujlg]pifpvzbirqokamrmd[rbanfbdlrtmtkxca]udilckezqvrehkz +liradbqjmqeaifibll[yrfnryjrscfrxgazpzc]vxmlibidbmcwgoygn[ojkunzztsdudqhma]dvmtamzfaanvyivxqrq[yqypfcmwnezorcnbzy]wytsaklpzfftqat +fhaxbfjherqxbzbrtg[nabthakgwjarjsfhj]iokwyfrrjtwulhwi +asundudwctdvninxpag[opdvadcnjnbxptahj]scynlgwnmzdtmudu[bupcfcyqmmcwsqfffb]rjargbcgxvonfgjco +zwzcwjnudozdektxh[wesqhjkthgohlufhrf]mwqrvudkqiysxokugz[lcjiemidwqbdnohpd]psvhnbkuptpjicdmb[vfoerfpkymcjmhzicwm]pwykcpzewskfmho +zbhxhhqfeurqurm[buuctguwokorlkfq]extdceaqdkokhdaxzqj +qcrnmtdrftlnyciul[qvtjesglscjradq]tcoobnfosubnnrps[qafsnrpijrnjkemz]urgzkcxptagwndzug[olhgasghsicjvswx]higdtidzwjfzlfkmxbf +ymvlttwormrtliwoy[wrcafamahrcipugxxgy]mjzzpdkuowbrbqtmr +swwktdvpgkbbntq[jujwbyzbmzktmpag]uinhisqwpyszittfqe +qrlfgtcrpyanzwfeuhl[sstllbrafqeobsocmsc]gmfmnisxdoqqctof +znfoqfwiwmxdiixycul[tsxegdjmxscgpfllqvi]fhwwrpconfwceqv[gqpboszvyuduzehsun]hmydskzdmmifotkn[jurqmnkixknhmwj]vcjomeocgzfhftqq +wukfxspnkhedqdbtfti[cjcrwokxqxfqbvfatie]eaohmttcidinhxqtcu +usgxfhglhuknqauzic[jlhntqhcyjuoywthv]hbskrwccmtzgyby[pijipgraqquvxhso]hehkqohxirecivlxnvo[lawgvpbmozisammvpcx]vuchsyinsehynzm +dgnciyptfimtrbmfbcd[tedeoxadobgoobffh]iucidwknmfofwia[bbtbzcwjwiphlcruw]ukwczycabezutqdcc +huxitbsdoqaffnlyxyn[vzcnvdddtezaeymzrr]bmovgbcqswsdmjacezx[jjdtfpukrwhiafcy]fwlhrymiaolokojdkx[ftqdrarkfhfbelc]yfonqpoegjmmxkwhz +ldedcblvfbdacsy[rksxibwzdatluua]agxedenvctglzyvpu[qkwulxegyokwljso]akjfktolnkzwsnn[lfhdwjomyhroqkkzk]mtkhpnffxrrwipsrqet +ajwscynjeiagnubeew[ftyzkgsmsevmdkpyv]ufeszcwnhqpwsep[rinrtwoninoxbqvlgy]mzacylokxrhxtbyut +rdlragvdebqlteu[kitphkhhnrssleu]chisqrsnofxmmbegi +sjzglwvefnntfgofuax[htbkuezcjsfgohzynlp]wquzxtqerwxlperau[kqnbhymijqtvtzxbra]tcwbvbockcilgvn +bdqyqodloytjtcylu[xgwgnadrhxshcyhd]qshqmfdqpzbruygmmzc +pnwkymgknqqdwzmymmh[vcnetknxxjvihfrlvq]cujdvtwltkpkzwkc[owjyboqcsymigajgish]bdklpwzslsjvadacm[mmimdikciuetfjeece]dxwoxjenzguercr +vxgoxslogbrjaxbjg[qyyckvarfyidktepi]odfkcgodqdusnjs +nmumnqunfnuhvtucy[voatnmasscuvwjth]grckxjhdzzoqtpgwm[qwmgudaltzavyrchqy]bmxedeqkwkgoqyrmlx[uqzdpkjekjgfvlnfwh]tpsfewpellmljsakhea +dvvwqujegsgarow[rkjpzfvtrtlpcdlc]kvpqbvyshmoemkhvq[hzbtnbzhmgaufkfvwh]ipdgirduhpdkhcwzfid[jmxetzvqbkrhkices]yzrxhfcakriippr +xyijrstjowvehnp[ylbnnbclmipxjtxtbb]dtynyczfzgqozpa[rmontkapaesmlvuasig]qmuqzwqsoipzutdwz +bdwyvvnsxojfzifhkr[mfdopzhxfakffhoudpz]vqnrhwzqbahbztlynpi +hymeoolncfmkblqrd[ifbyrijjwxsjvmhql]vgybqqlmoilegcrcp +arqsuxhcivbxfiuf[jfqqzwkamooqvyj]awbpyjrtunzulggzmh[iipnlkhwzzmzcdi]ktvdnpdmzmkrqavxsxy[dnoqbxknjvouymfz]brcemvbpovqjdvps +sxhcuagminkkyodlma[zkcpbofatowxfdddhv]iydjxsbzyvvptmrivf[thuzxghsyyrkqbjozw]zicredtdvmavltqgeg +qgvauvsmewyfypvgx[bkzpxdkwztxbpak]ghwmldmcmotjcmun +ivnbdeggumwedodrru[ejwxagdnszmvpyxtsfv]eaabhawecgtctegy +nylnblglukusyetuly[annmbyywmkzxoxcubb]fwslxffcquyfzezst[exsgjgeufpzlscazuw]rebffdvzignmrpriw[qwsiovjdtaimkun]utobenmeyrtxlorxjx +eivxnczlgqbmybivjx[zrbbxnnjprbaknh]gtfbkkxqoowynpt +botxfdjpvcayvpxmf[jysydtitavnzahbeg]zwkgkehpvxtocktco[iodpobnripiqifmexh]zpnrcxntqwwwucz[nwrxbbqtsqmkaiysi]pecfziyavdcfehr +bmfbcrmibywamwmic[npcluivjtbtwmwxmx]mxyepxnjdabcuiexhwi +kezzmzrmfsmhwxfhy[euevwjfsullybtlul]edrcskoqqmtwbhhafnl +yywsnxvznbcockrn[fnmwrszfamgerfhocoa]uxfgnvtphthtmeuyy[houdomoboxleqhrf]zznqyqwslypolnqef[ttbcfuirmlnwevhzw]dmohemntzpwivaab +xfrmjbgozdwamlqe[rdrfdfobgryckvow]gzbnazpqaqxcjdro +vdxepylmqqekuqe[hagzuweczkaioxyz]sndgjumcegndnuwwukz[ymkpvinydrrvfare]oplwhupwenqwloy +paikbyhegnbvcqa[kawvebmxrhzszrncq]noltxgnszsqxfbxbrk +hwifnlppmjawmyb[gulsfllyemlqkcws]wfopsunpcakhzkz[fcpmxchdgicqido]tlvnxgdsecuxsux +yogujlygnpdyhkxpdf[bawcwagtpbuwaorpa]noyoqlkcbsytnzywva[zvdbrjsxhozvyrugdnr]yyehxcwcnepivtjntex +ukkuxsacdvwqkgwu[qfhnxatswcchleqaeg]qynrnkuwuynramm +srvnvdghsmgtyvvli[gujzqjtjtrdfeandy]rypduscceqqfodndh[bssbtbzcdoiygtdse]klhkfnjidkombeom +hrxpcidpccertdnde[iubpwxhlmbnofumjnk]tzjinnaqvzhuqmjgzqs[tbpdksrgbhbhscpnns]kgaslrsilgklgukanif +xhrwvvblyiyyjithaqj[nxzhuqjrftquwsq]juvsrstyudnsyjxqpko +qjjtuuqdjaovcgs[klwmohvmeyujgvauez]faqyixqvshgpkrgvac[hzjbtsvreecwygo]vluysvnbqjuroaondag[qqaysmxakrfjdrpvj]lteebmjrrlysmwocpg +fkemhtixlciygti[babpytzqdpoovfy]ptjooannebsdcfrs[ismooacbkqjciwrfw]wsawvmoxxzwzloxunq[wrjhadcbmeslujxk]zckevlidqnpsdordy +ikapdixlczlrtpab[xyfywwygclrvxmc]tugwitpyopgfhucrrp[zjnmpndgvwlqnsfnemv]xeahjahtuyjwjwxfdv +wjbljlhlkfhhkhrz[kfhvlihkiqprhjno]mhceaicjbnvajugy[rvkrsptmdupaylqsbv]nptyjetdstrwmqjav +nqcmyiscwhuiafdyg[njnrwedfdsnzkyg]rsxrirfayriqxvyqthn[alkdpteuyfothxvyeow]smfyaybytdibkus +msvwpibrptekclckgdd[gdowictxfvmjmdtyimm]nlrlpatlusnrqcydh[zqiivotvmzapjjdzhx]eqxxguxozcbzlfkktk[amsfzydattcuqolcoaw]exjpttscqgketzhe +uqiaugsvrqenozqcnry[hcmsmwdqjcoohwlu]morsyizcifxpoyzes[tdnfcmzkcxkltvom]jbkvbwcolkcpkxdlhy[joounotcqahwjvx]teeotmpwnuvnrgdxscb +xsejzfhwsziaedxovv[accbrvbghrsomiv]glmkioydimjfcneh[xejzphhekszjpec]qfetmjhsfagbzjurrr +qwmyiuonuwttopaz[esdvdnqxftkihzblcc]xxfxmkdxigfxfwadl +gnvhardsrapmlpmlg[gmliinpyvjenkrnnh]kovjprgbyfdknmnbfme[nhzmroniytmwwfp]falokmiuiibxhheszok +zcczeqrlhunbfsxu[ifzbbveczjlfwppp]pvtsdxzdoxrrlukmqmh +rbgkskquxcvswaf[xihgvfvaxkptizohvn]tbntgfbhclvkdael[zuxdeparbafjpwqvg]cpfuexhjmkrdurlbnis[vfmoasavisksmltggm]hsnrpmdkogfxnprmvxu +abttallvhutezhtr[beucmccowruviwqjxlo]slskvryjaodaowc[vqtmaqykahuvoqc]valnulizvgiciruetx[rbhcdafdupnswhn]bppfeuexkximknecfq +hlnjhkjucpmxmguhb[gtoyutdhjwfudqnra]pipjkprnypqtglf[phovsbawbyxsuwsyopo]phkewndekgucmrrbw +bikqggafubkrtyskep[eugvetcxkbfuajpuz]drgqdldmenwxyldlwd[klwzyogvokknfwdqw]ffojmxeeurqxasxgf[qdjndihaiuwjqie]uaatdignzrdeyjddxzg +ddjhxhnkcrmnaztvps[crzhufiibsjerulkslh]snirbjgmmerlrucjlv +ckxphmsmljtplee[mbrperwqumwnitb]aikxmbbxmgsmsfgeni +zwmouppnlfbatcigqkh[kahnxdhbhongbfgmtxy]kfictxvtzrwlzvxees +gfrgqbgweickiocqas[urgmzzgkrwpkfhpf]aazsfnctfvvdrrf +sgndtkclbxdovlte[ylbolooanippjrmyi]lfydwbjkfsgdrecxzn +gfypysbhqsgyoxrtxxp[vdfjphnhrphzphdia]ekhgpckheqjkjinexuu +tagvhpldzimodoca[odnlmmdinuwyazwif]hsresddnysmuldvv[zpnjyvabzrktghfvtfx]jbzsfhvzaglqkstj[leniqywipplvkues]zumzesiphmejqufbn +qhkrsmlwyoxfawk[egspgdlxbrdcwvoeje]pxuytqzjiabwebbmu +wsxvnbuosiwcutjct[nzthycbqcazrnqppb]keasqheprjcqwac +jyiifehztqkdshfuj[cddnloevonuheydyle]tftddpechuzfagnww +zyicuknwqxtzzzy[mqgzslkciigsugirbcu]vadteaxyvnpyhwbec[waifsdqtrcbdnvrl]dygogwgquwnouhc +jltdbxzvwoxlherhs[vuuwuslxdkthbcs]ujzniwntplzaaldguqb[zdcnhufvintzrxm]cunexbzfbuzomrv +huikyoqqhcabtgosej[tqbxkfxeqyclgcqqsu]thtunfddczjfocqmr[vddedigjifexfqgp]otvsknxemvtrpbxw +sgukpjkupqmgtmj[qmvzpbebkypfmje]howlgwptfegdnqp +wnomkfqdtyobjkmd[goockdzswfoumhiavf]noshgjhgufjxgxiro +ivzlyzlnqpslrbldxqw[qmlmhingxmcporfx]bccugkqyzoqaqbv[msgojkckxyuihysrhp]hdmzempetgwwycoy +xzyacqjyialgkmmcj[aqenwwtnrupdsmitna]bhbicwoaervlixo[cggrwmpqsyxfoidjm]yawyxhdkscodboohvvo +aoywrlzjkqkzcmmicvi[lhwojrkhqdearhac]zwhrxrrrmfpkjvrnd[zwdpqkomjgjvkcndhi]cxpctyvgnthrsarfhx[clnierazieohvgsy]eydbsvaautujuqqsr +zfozpdjsfxmbwyb[ignvlhfnrdhybkwhxq]qfxolqnfiyokzcbdy[ohvvpuipajnqwml]rybjvumgzqgzfveqjvy +gkvxesvhovzoekxbmgh[hjnizppxqxtlkdj]mqvvrcdepnalllarg[urffyistzzqlhimfhi]yhndztrezwcapskbkz +qbuqvobipnbazji[qypkenwigkvsjhfdhd]pafhisczyaozydialh +dkocroswvahrephwueh[qtiawejyhzlhsnlaxz]yyelniorfgcpgfxtle +uyuylzyqivmpinpi[nxooflqcmtftzosn]vwxiscnnmmujalwegzl +ewyjffqwxipurwkejav[yxcfacgyuuqpjqxgn]bsxufukndbljizkbo +lglancnskvgdozzuuy[eossyfcrfjnpqtim]mvjbtylaisjdcgyn +lxrbvlmepaibubsqlc[pnndwclekhualwxbpg]cxaynaselbcbisw[evtpqzovucquqbgg]lsscjpanobjuqlpkhtu +wqcqpnmdhfupmmaa[qawfetitfsotgsibhg]vanugoxziwlnbda[apowiuucwbqxkcxry]kithnvgmjbuevopx[okzohlobuxbbjxeul]wrcnqenrhpvmxzp +qwmlncrpjifxmtyxjil[evgtbhnhavfwyih]ganxbqprffolbtg[pxidrhwgdqsycynecqe]sukgwvxkhbzolomvx +vmgykxaeppaasupwolg[pqkilujgqcoxpzys]vtmypzwtqecvidu[nolweceicrhwtvov]uevlxruhysbiedfibc[ytdalspbuzpagzjr]yrkwrgdaptnoxcqqr +fgwnpezirnabdiwcknh[qnwczufxpwtomgr]umwdzmivstlmecryoh[ogyfrrqklslzcqoo]yohswnizpisqpvpyu[bmwnspsfofxvrvqkc]itdkhtuqsybuiom +ynbnpjgaoammxaoagp[xkivkmwwiejjbbgk]ongbnbtqtcxqipe +gxuxnshdgyttcjzvk[lsxpwpvsoquxuazidye]mfihmxgxumzfhnm +ngwlkbdsfkoopeugbf[zkcrhoyehnzszjl]jwkxolilixmiake[kcoazkmvlmmlxhlip]urmeqvldopqdrvrdd +hnlkmhqgkitizzp[dgtnogdyumxjgnh]gazsmgjzighgwpided[vaxfshfsqkmebtkceye]ndxcvfbzddvksncrr[clhmftvehwzwljbp]tooichznleiqlksnv +jgnvwreomaddorfbnna[oedwzjkpxolayry]wdkdtjlmdviveeog[tkbjzabxaqxvbnasst]lqttnyqfnirsajb +yiuwebgrrtctqhvq[dmddhqpukxspoiaua]egktbjgjcfzhltkjtyu +sbfvjniiethddwbjx[guajrdwgcphepysv]qntvmggllbcquzfu[qtlrmikwlmlzfpqufgk]tjwivdcycoacfcwwfyl +mxbvlmxjhiorcnni[ubvkvylqtxbchszgp]kzxkzbjtogzujapfq +aezkzdgfurigqcdxt[kkjkjuyowyhylcxzs]maogxmmqteaectjv[aocufmtewquabwa]wlidntwbxueqzbql +gngwphszdvmcnjj[qvbontopydlzjywvaiq]jbrgkevvbwzvkcpz +qtdsnkqlmcwenkzxodb[wqmskmdllfarzicsce]dmubpplnmipygwqjim[yejatlbffcwmlyrek]gsvwxfaeblczgpdvhhm +ktshrikjzljpacyux[omqqrcsqtbtdqsupfvm]bggungenwwenmztg[kacviemyqpqmwmiivp]petgeydeoygoknl +lvvozapyfvdohboxrt[sqedcfculzdrbsafvg]ioohxzwwppkserbkim[bytwtckhnlhtxgmes]uzwrmuczkofyfgv +ocskfzkwwmnkize[wnjrhvmcynlydnbvn]qbykllzinrgwfvod +eqnrivojtcjljsfcj[rlxxybjowtdptsg]rnnvkyrsxzytscf[mbykscjmwlryaiictd]gmfcxwtjljrpihljll[gxrwqhtelbnpguyvw]lpbbvcxyokowlqfih +sujejaymvqavyvhwpe[vzobezygmsxvqwnnu]dmuyhdixfuqfbnehqve[gwdapthzmbpwtui]hxhsorcfmtmrdqqrzf[dqrxkbkttpsjkqpbnl]qsmueuwxsrnejednm +vmqbwehpqesssnps[jkyzwrfofkfqkse]glwxlfrqaamjejrievu[jhbggigitejevdzgqsm]sqxbxgyvfpqtxrlbca +mlbhjbelhzgprdshat[zcytqxmfhuyriabyr]yzhvmpjfzkhgxavltdz +ctdohoakygysybf[loxbfdhctlnhggxpoq]bimosyslpbihbwqp[fahhvvdfkiiucdf]bbgugrcsmoasoxyymgz[wjhbkirawxanrqf]palckvdfnlhficazmwm +qoetptacgfcrdrstl[gpcfptpchpeiicbmfd]vsjqqgbwiqlndgmop +dmlzhkeleeqkgqvriu[qxzssbjfthbzhdf]inuernrmyomwyre +pcezyuyfhpyebmvanp[jccebfvhvicqksgwyqy]nssvudrlhkckath +mrpkkivxuuozfbxejfm[bkwbwzhwwkfqqlupltj]ngrlyucvbmdilkke[qlzntmxfkeapmlbumu]ynjqdpmonwypyjpalvh +tkqhdmjsbnhbvkdgo[jufmjoypjidudkbcvy]olrsjedkqdbeijypjp +brnhsqltbrizrohj[dlzumegwwcbonaa]llqtbxfulkgjeqw +vxjgwcccalsesmngkbk[owvdclfjsyhgchpt]zgqonnjsnsqxxvqzmqs[wsmtnxjpvzcdpobat]rkgwlaecswhucndgv +wkjmaneymsjdyjd[uvgaxovnqgsvamsbz]naumvynxlnbgksk[mmjeguwrwppdwmdjlm]puiytitjsyskwomrfqj +fquaiztteofhvsbcba[hvstcffflwbvchn]ntvqaedorhoikidi[cpypurqddikmaynmxzx]qkrvwfsppcglqejkn +cpjplvpmbumvgsduald[sowmjselnjpjwhav]flufpydujtzuzusyrr +jfhplkijkstxymvwgz[kbsytlilpsegzanvlee]ywcxnydvgcxzuibxvu[ayieqmzukhoxmcli]rsyubeqkgvobehe +ocsbswhjtvywugym[twhemgyfgdfegogpj]xamojomgxvyedia[rukhjizwdryazdtdsb]fdiecwglfmtfjqxocw +vywxxiyjfwsjhvjmk[mwjsyhoifeimjqtmx]ribwktjvuvxakqqznf[izcdtybzxfbyubfbckt]aocntguubagirsgvz +ursnbtivqkjfkcbls[ckjjoszuogsdnficmhy]wwzjkspwdvilshnzg[gzuoexgingreqktak]ywmfxtqooxdgqaa[bmucdllxdktiifoqp]pvxrfcknwxdjivyym +ebtozyepluaazxsuoi[mocwxdgmeyxmoulo]grazonsbnsnczptl[rusiwrrcbqpybtjfxt]ewazwwjculbvwjgc[jmoyjpbznvzlvnzu]ghwsmgrsqjgragu +cmbehdhyvukkufctwpl[toklbggcxvjerfqozbj]wqbacnegquxmszdul[ggzaznwywpswuxmlmg]swowxuqlmlfvxmznm +qbebmodvutfozxt[macysosjlpjhykkb]qdewwbokbiqofejcsj[ddzpouyuxgogajwmuk]iukkhkmjmrrkefycw +adaobhuodvmkfzrbk[ucroxtaavsmpvfd]nvrnzhxozidrgvf +yytzgmmuqrfqegalpow[eyefbjmsyximixd]sgxjxpfncigzmft[zuwduxnhjiidywvsm]qmdvambkreelttqmv[mqhlvabyxnmnjfpkigl]vuxmnunvxclyhkxi +qdgaknszcwxvyhlrfsr[kbbxnitytjopwtruar]ucanrksrycnoqlcvrd +nqwjdcnwfxkdglllft[gbawkxvzhyiprfenf]ysybkzwywpqwerm[cwsthmeytiuialllzxx]plcctxffnigyhdfmndc[kyyvjcfkxfofxfsrw]cwynasabqneione +kqthcqbvfsncuenmqx[rpokleyrpkohzefrw]txvckiapuezhimt[rrfglfzarznwgchlej]vpnrufinbaqrbjtu[hypcxgeuiotonfxvuf]cfpjwonfyqddtogr +aaxuojwascuilsqjt[aqpfsummtaolqpdi]qoqnuhfpinypgxiex[peasbtrzdkneuriyt]dbhohenosanaxkqqxq[fwvbczhithdxtbdpd]bmncqvxnaijxuexu +mgiepbqfrprbaqd[swsyfijoncrtrigly]bzdkfgrsmwamezhp[minqrxxklutrtrfxps]dacjpwxdrbxhumh +shdjdexuhgauroqwtmd[jpvifgjpgzmjlrnuyj]svvjpufybafcjsoppia[albycpxsvxdykattdos]ewhcfugwuovgnepvovv +ldwjwyzaqxwfrelh[rzkhymugnnpmowx]xufycgvikehdxxggp[mykgpsmatnpimovscqe]cpdwiemofukofnauyh[iicxbleijoxlvml]dxzlvafklkbfhqke +cqdtbwoinxghfrwulij[wwuuffpfxzcckuf]zeayaofaskxfueiq +odegrvwiwncavmxd[smgtzidklnmlnltytx]psknhjsrxwqdqlw[kmejoinwatytdkz]dfziwicdcmfwawwf +jzioqoutlwitjdcb[furuyivyebozkvcny]gfhakdfpfouliybsvk[vfrykghujsittpcxjnj]vjekmvdvwkaffrhhr +rclnyybawbizurp[cptbsqptpvcuchcyncy]rlqjeblagqogxwy[mwexxfjhkiyoihog]slgmmhvjhpomcvgabu[xgipgcmbydzmayywci]tptdbfqkemdnuzvuz +junsrcleteqbngabdh[loajbjvuielphzeel]yquxjlecdumepsr[lktbtwjmyeqrurys]ralurzrcthwtkenjtet +zgykbezaearyhzuxhta[pqtjhajbyttwqzfozi]dzodljvnchwsytat[wrdvidyboznzzbgvxc]fnpmjaiocpucgucwh[kiqymnngzdrlcncpw]xkjzheobflinqcxu +kbaghyebhrmquslcfc[ukdaffinqagmwhvhl]ruyaqrvavvfrzwiyit[jdhkzojqtxymxoaval]qfxsbqwjtsudcet +obscoqxaeartfjmeue[dtceaealpasuxsdoo]zhtpbqqfonksrcpu +bphcztpaoqfofau[wlhtxjzhyooevsax]pvktnvejsbjwsizugxj[aijfjqhoxneawmq]dlfbjynbvobrkyur[swgyiujwbafngtiql]nepaaduwebbpsrew +fsjxwoamqjhjvyyr[johjhabbsofojaxccga]tqcnhtvkimixbyiqt +lrasfxkclqtptlt[bmwhuwhzvfmwxxwla]xghbszjpdbdykjmfvhx[cerzilbrtilvfptwid]nkzdvndlbgkwkgzwatw[njpjupthwiwffesnct]cipyoqwmxtiugbyfmk +txfqpycfderhwnqtrp[cvtdbizqhlxikkw]nuxymppbyfdpayjxt[sfsnmgqrjqrlfxh]dgwdxoveamltzalgyw +ntfdficysbefpup[fvdhtaqmjosqoxosu]pwrbdoceiweqrfyrx[ftlwubetphczbxhx]jolpetpuszxjkxuupke[mbcbzrxeoqpibuyjsgg]cpdzzdzkwbucybc +pwwzjoakzydrvkyn[xisfgbgguunevtbg]ntzbwgeohmdvitrtdpj[fzkkujhplarmvzckn]whvdpxzietgdyfhok[hlmsjxrxxrdjfrzncyi]xvvkjroullhawqdj +pgazkqglbbjzrofkpy[mkeiyuwlxlmgmeugcbb]oguzgbkaasscxhict[lckibbhqnkatvzlqcw]ulilgiydzfsdwngr[qcrozfdctltxaatyajh]ojyzengehkhylgh +zdatmhxwkinjiumoy[qwhfmokowsvzgcngeax]uqebryzrbawakjz[ltilidihghatuhi]lljxtazlhxbrnvwsrc[updgoblisisvpdqngzo]tjvlrlfopjdoyoisim +tfguxgdgurymskwxk[ngtycndepeqrcif]gttrbjkhsbrfczdwxo[xulqdcmgztpjgiajnkn]pgwsbrzakmvblfsvlsd +lclevdvivjogclcmn[kpxlegarknivgdvfymk]kygexxjbzqppiywvxtz +zadpyjsswjcfimejbc[htbpkbzsmbkfeqww]ydwbivnpofvmzvw[archeurcpsapgylrf]teidjxdxdailsbb[nmoqxuhzymlxxqykol]zbesrnrszqdpsbchg +ykwptdjfydxfdue[svxdapsdzsvmsifz]omdvdqwkswiktcwkma[tprmxhwqpdycftzlsz]dyfcmpaaokppkzvoa +adfqjdussbzlxfvlg[hxktcqjmyqctyjnl]ouyrbuvumwwygdc +rrryoldbjkwnauaz[uarnttzxeuurzokpa]clkjazjocprwqti[krkcdnwldqexavrpo]fdegufvailefzfi[izadiszyerlbhwd]myayzynvrymyobbfdc +krttvoiaszqvnme[hlywolnuxbxjhzmnt]lwcvxyuuugaqribebi +yrznsouskotcing[jnttzbfwdrpszrcqr]dhxidpojntnwrrsjjc[dlvjkiqqyrrougz]bjhjvlhvrefihomycx[veomjtdhecgcvsshcwo]iboybnggfhdhymyukl +qtvgzpyhogqojzi[vtbmgswqkcpdzhxwzo]jsmnjadclhgsofgrq[lltxvswaeqdbvbyqj]gvrdvrgygzhbetbkjq +oqmbdnnrpqmjasc[hzdfeapdznngjzjchow]fdoxpevjbqngxrhhlhj +ujszwtyancoxbcga[qzpevsjkmozdbeqf]bdzegnfxtazxdna[wyinvjijbvudlvkwvg]mrgzfijgyouxyio[qehebkkwomsmozoojy]sqhbhyonrnjocbjzfl +hinhkyqfttbnnou[luuiucbkkrnwiuqbwb]ujfitmunviqwhkiziy[wqbetolmyaceofd]wbwbxudxttgmtuxjeo +schrxkylmxpwphllds[iijplekwtutqrdkmsrt]hvejiqeylhoxdpkxz[gbhczsfvoidbktsgbqu]rtfwgjnvhjhemkkvbm[lxojvsbvcnlbuofvwg]ruakyrabueflgsnict +fvqtupyapfmstztmbe[zxtzrmjxlmgshjlfywb]tdihozcziyvstvdtvd[ifzqxsyyhgstjwlr]xihkbuvismdtqtfm[xtxunrrzvtuhjlzoji]zotmlgbjircyvzgcxkd +shkjoyjuiufvxbluji[saofjqdwpwodltmra]xldohzmyameybbnw[zwaispolnanumhtz]hpobrxhytzqmkrkf +jgaozdtecqmpueg[bnfjhfyhdndzlkxrcb]esbfjomhfrfvzgm[wqvhdvpvrbsazqzgnw]lkmrymdcupndnoktuv +mehlgjudopvrolla[ghqzncojnxbdtupn]vacvkbpzsztmzhz[tcvqbgfvrehiycr]unpokrfctcwqexbgo[hbigocuneutkffaka]dwwclmxsripmvcluve +rkdurapdxvohktm[idaisubzmlljyfbblho]kkkxhnkaiaxxyivjsna +ujdjbvlqoavnuoeeilr[tpiehldutfyewbqv]crvmofwdjdesxrl +ptyvtwbbmoujjbvsf[avhpwnutnjkysjdubd]ysgpwvxugjswjzhw[fvgohaphbuqpbwzr]sqvpubqxxhmfxvlw +sslbaaxswqcqfln[nmdfjxyyrexvtxv]wavnexwpbgnrbrwyrf[deouszhzjkbxxrhvkn]xtfqfjexnqgdiddxh[tphqtpimimjxxkkndng]ncngkkzdnhmbqohupgr +kcowklgmyivdmreahg[nhhhjuxwoafzwur]jokzmfbbnzsobiahlhi[qgzkumabuuxqhki]ubnjasaqscrxdjy +ccofivnvzaxcise[erfolydklxltrildvth]sjprbxbfldbsozha[lrbdfwialwqinprra]wqresduonlpwaamhj[nmlgvtrcuqvsirfhwi]qjtgpekylrqmxxbm +fugomjlqyofxoij[prndifttmowgenapio]jpvcsgonnqmvqrxwo[yuioijkmnwkyiba]gtosuvsrcszwsotg[zvtndiccjofwagevdcb]qpdjgtopkcimpfyqw +zbzstwtngoozwdgtkme[mrcfdmgpywwvikyrto]ktlmqekphuekemo[wenupyuqahrgisu]wjyyqsuatrkzlohmo[judqmuzbdrqamof]qiovruvlcreoircteb +yyclnzxvjfymqgrzup[koyfzianzwtvdjga]jtfmxjxehvwejfl[xbebzfwcbmjrhka]oqnpqgevsokznwo[briagugdtzfswfbq]dmnccxrswiebtkwao +muxweanabaymbamknkz[abtqprtejlmchtpy]nmrtnrjxewbqynvbe[rtxnzbwcjbtmvob]segkftbvlvczkgubgp +hkihivjdrqvywhwt[xpciwwigazxeddp]vkaysmwlighihfka[lcyiuojfjmmhltubrj]spandymlggnmqiact[xizoxzguscxtsut]cmjecsmmjasgpvx +kasrdhbhmrlwiczlyp[sfvdefhihrtmmgele]voszgwzdjlvkejvrkn[ahwvipvknuyzrzbrmkk]yuhtxgfpaipuupqep[hezjazdypaguhxkwud]bsfgurgwdetewwg +mkxpacxlrpbfqio[axwgpntpusujnovkpxp]afzkmjvcysdkbfeli +mspmqxwmjhzxqmbhbj[zniufuwcidklzfpuoxs]uvlrvuhbhjhudvx +nrgtmsqbjxlnpsc[hpbskrvswufaucjmjv]pkuulesksyygynxyku +kmopgjfjwvvrfgvo[qsigvjyusqjqziiuwxf]ewkbjkiqfgdwhkot[tbrynegplyfllxcqaar]cybelgkyrndjodpf +wjzkfwmrsnyjitglauy[jnncpybddtktmehxz]hluaspiawjwywug[ujwjjttoevainaxqmer]gewchllvjclaahplb[haewxwlxjjnfggtg]uxmnawcpzfwhfiefo +jogfshkvmshdacro[anluswkewepuhbemk]rwfxbxtmtfgxatwj[lwqompcrkgqzkajgrqg]ckjftivpzkflgbifzx[autylalyokqqlxgu]chewqmwkwewmwoby +vhqxmrwadjsfoprv[imclvgvrtvqfbcllpr]kmgvgofdlkarrusoo +kwkqhpdsrkdlhuq[njldfvflplvygnihg]hikxtejykexrghupbqz[tanglgtyodyncabh]ennzrvfvgcnlehci +hmibwhrmzhcxvzgt[vrdwkryugziqxxfv]tcgmqhirboxwvyy[mjgojhlpjolsjtcu]tphrqucjxjpsdsi[ahqidqxdgeucevqinms]edzoyewnqweqkla +deizsskvkzcsohdf[plhmdlimpiduxfdyzv]iaodhxioxasudzv +aepgcwcwlpdqric[xyxiplpunvajsjk]dkragqziaqxgbwr +keocoxwzsscocdxcf[lvdnlggndlqzvxjo]cajmnvjxphmfopy[bxfnemakuysdjvhzv]ymuttirruskkndjlpw +rrfoglacqhfucnjkhsf[ejgwoteprdneomyqphi]gtsffeskyegnxzfkssz +awgoetenjdtwnpw[hflbiyqshareqvcc]qxwgczjnzceffwk[eumisjskpmnqfmox]dtsifzhnbdvlfaqdkwe +jezzkwqvkbbcskih[cxqpssjfttcropqrk]eqkohazzfagyqpjt[qveehpentvwwdazsmdc]enufhtsnszihemkf +zqokauntjcoqolc[kfjplmodgrkaeuuvq]fqicoryxfrkubee[fcncbrofqpyxdnejn]yebngpgxcbjnivisgza[bpwzrwupgpmtbhg]ufxyezblslkscovzaqd +vdrhbvkjchpslgpwwdt[cfslokjhwrpogwmf]qkxlvkrswbbbhudgk[ryazzfichahhigijhc]xbxrwruzjhyjlwxf[xlulxjmhxnhmkflqw]xtkuftnstlwxwiirwko +qwbqncrimtxfjspgyyn[ysolszsumngdzijn]stfhvhqwymtjpauip[lnucccqwwzenxlytrb]aumcvdswfuucagbkel[skoaaxgeqadxehwvjt]jrjzozvfrrjrsvmov +akweexwajqyahlpq[pjxilukjsvzjerrcdcb]qsptnuxrshmerfccxhb +xbnsmtgyhitmtounl[msqlrxysydxdydbtyho]varxjhsmmqlilsprkq +udmbexywtscnesd[azofuoboewwundyif]mykxybobvefathvqkfx +gjedwdykwqbxqpsb[nykqvlfsckqcgfhvbd]xdactphykfhbpjollax +tinuplnorykjcuete[qqwstzqrupgcliapi]durprlvdyucmbkhceq +zrfmusbfbogbrsin[gaayijtuqfbfnxb]cgjsibujnswdmuhfez[rhatyymizrxrqud]wpvajerbhxbtrva +tpjpjlmhvuorwnd[vnwdgopuigazzwytzbe]uaplhgdvedfaiboz[rqkafxfjjzjwbzwung]cqwjlakbfpqvxspia[chyrracxefgkuznb]chigmcxzjqnzsdn +badqhtkxeokdbres[wmdthitngyoujdumxfb]lnafdeqakaggcdttnq[acuhhjaemkakovqq]vfvloofttmvvolbpgb +myaunxirrlgywdtyrlp[nxinrircujeyezto]tdzynxmmbhjybgz[sxbjlwhbkhpplbveqk]oplketzgeeoczpadvhj +wtqjkfmtshufwfiux[njjvqujaetzgcihtxvi]fapfzhffwqovrvfpatr[hwjfoqsbiothjtrbg]sfwifkjkimjnyzaui +milzoncxkgtbsgtxgb[zvskfgfsgefelbjckwy]lrdralfxvtlupde[kvvibrstieyneglniu]pfyopkpteyovtkahwby +sjwqwumquvxpwokonnd[wooozqoxtlhwsfhtcic]tgzecomscwuxgazattf[dmaxzgxonbkehxgymq]xbqkxgbziuumwex[csesnsjiexhypqrxjj]dbscxozezqgzexrwci +yqgpqvteubzxsmjb[bntiezjqbiywrsq]nrgpewzpshvjwdx[qifsblzcgkiqfmele]oypyewwjmytlaujp +bxlsaiblatkrxpcr[xxnilxrehixaglra]apwnnbwgatzwgmr +rqsogjhjijafydmr[krhzamyodyfpbdv]jkjdjxgdszznhiv[ywihxdwlgdadayqm]cjvrvelwbegtiqswzqr[toujknandbegjga]wvdikqjnnxpuxtijios +dqlbbhlsllmcdejnme[fchpcehhwkjwkythfc]shnipixrreczdblufyb +pljkshxmvbpvswl[gbuflmmaywvbjwibfud]mexysgjrvoxovxtvici[svuosbkwxjzhvmztiq]cvfjfnisqtyomho[jvrshoymwbzcpgxtxl]ysdystgkeioszdbora +ooyljflrcdoujmfajfu[qvnbylveipljcmgrvl]cjfvbounfvjfpsxmbnj[mohdhwcdrykexihcgvb]gfzxjkkqdnspzbqb[jkoiqbqtbjxgezxvsgn]juvveztzrtcxhyp +ebfbaesgsxjbwhkmpxp[dzkhyyykwhayaztjt]xkxdjdlfvlzpqbb[tjdqvwygsgoldpffs]uwccbahfnjkhbfzcocf +uayfnudukxaldfgdvh[tshkbhbydlzzndsc]wtjmhgayuizllbngcr[tfglywxclqmgpeatsva]riocgxwsethrhbh[xnerbhkafskywvgxbdl]yzubvjedgzbpqqng +iensavdsekzfncu[frepnzfzbolseio]thbtyqsviqjozgq[mqobufwdnxkzqvqtgj]woxdzihysaypdxamitb[llqsjadcqlogalbice]xwrmwjiednucqqfuy +lgmcluvxcilrgacyc[ozvsjikotkgiepo]ximiftuuulbsghmm[ykwtdziaokecacpd]bvhsjkjycywcuitep +eoefpqghlbkskrhdhv[wkzmafhoocaswuz]iyiulabsaueugqys +noklaptafpgtvzb[hocgskfdbisxdlcdbq]sgwqzdhmwapbbjox[yyjutkzwybpoeea]xtnvxgftzjdwqhgh[nqgarhtwigpfriuq]etonjczcgfhclbf +tyqqeyfkxjcnjih[edtgzfrlpapwoyrnccx]fmsegnaucwnvsyrsj[lptzjaxumqhbwhmljyv]rugwpouagbvimws +enpywofbxruqkma[lesuqdferlsfxqis]tqkchirhakakvbgf[ytrxxjwygqwaauwjsg]ncrkbikcmvtbtrabvqb +nticpuumzthsihk[asrmrtlzizgsvnvcxny]wjntjizixwyedcrh +yjkotqgkximxcbpa[ttuenysknomggwwvvhe]htzkgoilhlqrpmbcvh[zucaclqaevmjqfuy]pfkvmsbcslkjxyydhk[obfcguogfxfimowk]eczitrwtnkfqyvxco +nbrsaktghjdxrhul[kmtgawzkmntyypqmw]jggmopgbovomadux[pkwngsqopjftulu]ymmfdmimjpxufntd[hnovhrnfsloivbbueip]oreyglwcjkylphqtwl +ufynjbkocygleqwskw[yuykssufmvmdkdntk]opbcqjxsioqpkzbtuhh +nkxtoheqxycxqbp[nmjgqytppiuscyylrm]ezhiobiihpmhkqjc[bewnvjufjzxgfwhy]hslvggdrixjquaigzp[dkaylzejrwivzcl]mxzgkigdgfhmczixkrq +fgcsqpmignjsbxxzt[zoatnmdxtjwltkazbep]wiadjhqakemepgfh[csuxhgjcqjsztsrwb]wdekgrxgngaaqcequ[kjlsrjjtidezpuitng]lhibpbcwjndstunhfff +ozgymklbikxnhme[bbbbemtxaxyxnnazaxm]jszcoclvxluigfgdlq[bkkxgjapnrpvovq]tdsakecfolgpiynztiu +tytomipjwhuqwshlvho[ewcfspufoolvxmeyodk]wrrxjaexfktctmwrkvc[fwdrputsdfepfvglfq]fqhmqffdtqahfpyelce[elfiaqrgaqxwpjbxcig]jmlxcfxgjkteodsufs +zdfxveufnuenptljiet[bxzgimeczdpygyen]ptmmjlitdsoncpjlwh +yfyzedhbbtpqiwmri[uqxjtkmjcivoqatycbc]etqdfgffuplikkgrug[ezipcwmudtfakrrif]kumvfsiqqyfrbcbvgf[upsfgrzgndzpzxhmx]aewrwjwdquhsagmgwah +tkhbexdnhdkmlogvk[rvuvfkiqrvxwewnhihc]yytysizvrtytoqznokd[cyxenputwxkuesw]qukaxyqfxbjvgdcy[rfvlqyyapixtzghha]sjazfjtokjizlxiim +ynwzzgtnjmfjhbys[enxaumsepjmyaapa]tctribvarqtdaceq[omcmnkckmzjjdhjiwvj]qlkbuktkubixegud[bbvvgpocsbliknv]nivyswbiijvnvvkuw +dwncikgxhzvktwgwa[nwmhqzwlvntxvjv]dmbsieiwdzgwecq[uvutvspxpxwfafv]vauzasizdqputolg[ncsglnqbwjshyxa]dtgwditcpcuncdcxn +kupmpwwjcwmmrhum[aakppoytxqucqfncv]gpuyruwkndprpqjqwup[lrcoaodsmpmlhnhnyq]zathwgfvwmumcjwaa +ivdparkbqlazewoujo[tzfulakdrwfncibtnza]titrajiplrfpbsar[rnjnbtkpwadofahdfvv]uwobxeoluadvnxyxwl +kkoyqwkjdgcvqaufnj[qucvzomguivuynsg]cbhahcwrhchflfuc[czlxnbidfvtovgdl]jmyougddwlejoyrfsfm[kcuqcjogcjrhvjpxx]khnizsdkqwzdzehlpe +wzeknwbkawxgvgtq[wmypojfjlgomvmk]tfwjzxvhrbxpkuyk +ivalkzrbqzhiqmjo[olluyctvwisrwwt]ndrunxditvvundvd +zezjmfpqesoftjufk[tdueprzpghkckpq]fnwlbwrhqmmayee +jpmhszgjuxnpjdsbtk[cpzosccgpfbvzuretl]nfpjzsqdvzkcszid[csygzwucakziegi]laqibhadzxurnulc[otxsegwpopkabmwbxzd]ymmsoiqsjnlnsvlsq +srgtzegqicrsutbpfsh[wfdoodrpmioayoa]kfqtpkwcfgyvjeyhvsj[yzcyshhziwjudxmm]xnmgrqxumondortjbye[nyajdyykzhnmolyv]zbdkvkbjavamxrafhbl +ifwabdpxckluvreesop[dsyliwtgkelyyam]hqwleigpcnogipr +bpaukztdyuwjkjrqj[dnslgwpwsanuxvtyn]fxkjtpifmtqzrlok[vfcgvkrunowkiilyok]ypgxcltrqbuzwiqom[ikzgjcafxhxmtgril]btdnvecxukjskjkndz +nghqjtbvhviyatzaz[guzxivxizjukrxwaf]vtggynfcmuttsnrvm[eqvzxmtlkaigaur]dmfhpohcbyjikjl[kxaapmbxolonwgbw]uektjdecblphouwitdv +fxefzaiaeclqyvka[srznplyazbvctgfdr]xakjubrnnbfykcep +rwlthwstbsaxphlsrz[ihywtcvcfdeczmy]lpxfewmiwnskbnv[ripgyxpgczfvxkzp]iltpwldaivxkwwcb[yiejtwqmnnnzywks]krnbkndouhoakztwzh +mwaxggiakwqnbihaaj[pxslpnutqpgdfvhvwgp]nhhnvftzfwdfnrqisfi[hgroxibwekbugif]btrhjqipvkpfvcf +xmxlpyuuqssmtmzqyb[ybwrbnrgkansaodfap]cihlwrfxgbaxddtja +fahbkbakvcwwazgioub[ouuvcmqsmykbkhfhj]gntumiippgacbcl +hqkuhmrurcqtkzusgu[drwgthikmebvdcjapw]vdxfpjwqlcvwpgsflb[mmaxekmyvkxfxye]nlusofrecbdvhbruu +tjyqhrxlyrubiuwl[voyszxwudonuwiptjoy]xggibveyrclwxsq[aolwexwhfxpwcuavvwr]bwkkcnpvsiynoeikmlb +cxpvpcjhfbokvuh[sdkkaewwgkvniqymkrl]emeetymmtcbrivitvn[bvyzmgaorsfbsmqoka]vodjpeovgjpofkq +nupojuxxbgjvlafg[uhfrugmmacqdsap]nxuunqzbasceyiz[ircwdmgmysazaya]qwsmsdywyhklvniiq +mxujioozxlybxvyjcmj[afimhsdzsmtxszd]fsckiqksntizegvxgz +htyhhcuqdfhhniloe[iqslmejacjbynzkw]nenyirdlormvppyym +jbphnkbvlextsaqnid[xdebmjhugwvnodt]spdqamgmvsuftfx +mpdupjaxozerpkit[pcivcugsbsqynoz]zrxxjvwswbpuylnxi[tjoxsullllulompfxhy]zobcdnaypuabmzfn[inubfyjlhoysdjath]vufswsypjkekcrb +qsbiexorinxuevkoad[tjzedsasyapfnvwa]qbfrkhbfmaxcgmovnif[evrexsygnumrldt]serpxomgczhbzjix +ukqzagjymparwzqvw[lnkduutsjulfxuqug]lvupmgsyiquqeepmgsv[ekenewopqmddlcqc]rhnwektxgccickla +ezrytvzepmzxbjapim[knaxuvqciriixgji]epksyimofrrkgawirz[tewvfyplzorvkyeog]bwnejljtelcigsqfx +fngkrmmwapuutwtn[pjrinpthoymdxemoe]qoxhlklweoscgcagw[pyrevdqrznakburr]fnsowwitbsxsdsdv[hzbrhpemwokvyhpohjw]jppmuxhrsdsmmprl +wfpphsvqgdaostxg[abwxepvuvujjmdbhees]uxitcdrdkyaqgtyrdr[rqdczpmmmisomtmop]lnqpzuqcyrdgzrcc[cvzwdsaeorgdzzklrx]ekwjqzkeolvlkkqtj +qzhiltifnugunsngzg[fxfhjhvijjnhnxkbl]bbaftchmgjrfuanns +isducdmcjzbiacltx[jvkepdvzknnyqegqte]zbuvzcrrsbjsqkf[dowjjsipssfisalqwmk]uzrmibeeevzeuxtb[ajzixsnzrxwpekzpy]weogtsmtsuxvjyhy +dnxhdwkvawccsfvncy[odsmukbcbpfyjqeau]ugusdxmjuxjosasg[ouwrwzplzttepynf]avhgcbmjesyqkzjgms +pwyizorvifedguhjqrg[zsafqttsqlygzwmqv]hxilzjvsuyfnyck[dnovwvccguuzizrjw]qgbluurgbxnollv +meqzvrprpthaebpd[htamsljskphtldx]riagbpmpasjnjefv[cvpfevyvpivbals]tgxiqxmhvqhhmrr[cgeamacqfrlrhaoz]vficakheeoprpbows +okkhpeexympjqvlamxu[mvjvngmxhkbiaygi]pnwoitpqlyqaiwdpf[ryfcbkcyzbvxuyngw]xxgknvjauivacqxr[tqmanixcxxbolxf]orhkvkwpyrwbymux +ipwcjobowzgrgzmnf[uahjinxxnmyyibzp]badwoisgtafnkgnp +bcbwbvyvqpozfig[twwsbwyhvfaddwo]jogvkczzowocmkwwlla[yedsazzkeklftvohfqz]tghtcjemmehumuyxar +bevtohpxkrlrjjen[jxnohlogvkugugmk]nrxomawkgbwlnqwb[rtjoeivssknwelkhv]dihcnpigtbnwfdlxhm +upuufvskhseazwfttq[kkipejrjmxwmqjsh]xquyqplziwgvkkiyv[iirqohxpmcxsjryb]ajblnptlfnukvae +sijztjuwnyftelgytm[mgirqlkcbaigiyx]wgbeoandnwaudhgvd[drhbrumogcajpxnvqov]vwandmoxgzsokgfs[xwgtfizcmyjrfzgejhv]nhckviycimfezwefw +gfgrgtizxajkaicjcc[mftrzuftzrgrwilsv]uckwgxywnamzjglbnts +znbgncjrhyxaxgd[xyyzkorhakwqubjzk]wrsdvjsrsdorwkgr[krrqukxrdobhkzmr]mdebvnlirbtdbavpj[adbczigmaoreudvgns]yqxeoeccdlpuwyvf +ymjcaobrviuqtvxjqq[jwpvalizcmbpfdjk]wmxpzhqvcavedvmhtn[llsefbpkphhetqhbj]qryznzcexwgvxni +ginmrsljkrcminltayt[iarzxlzixokzfxiazwl]aircthhepljgylm[wlorimkebaxcvcwanlh]bihvjtofcsnvuem +zdegfhthlaitfojyj[bltnoljmwcfdvle]gnadpzusiepwthtv[ieuoyrprfkwonhwjt]wwfphscvjchvrab +kdnddjueyrofzhjdzcs[asdqcpbunitvxrwi]usylnhwfapvczeb[ozrrpkegwtbkftyeusg]pncbcdrovovzozcazn +lkksyjqoayppxtvns[csiuzvhklkfijem]xpsmnkdmivkitka[djmnmzweqxrkfomzqhr]wkzmhoiasanmhez[wojpalkldcaopeg]murhvjrgpwxpbveekq +jawznxjorxwvflmkk[gafmrermlounwjqod]nalazknfqhepgnelal +wlszezwacdeehnlnoj[njlzbwkfnvnbwim]fydgpvvovkuardng[gqxvckevjodockykp]qsbtvwpwaaeatbd +bwwttxctuzuezxfdz[apvuanhzemgcupc]qcfxkvevimwvwpu[zhhorxgplrpuyabae]gzabsprhuhwrtkd[sqhumhfqwdgxthu]fyebhdninkahfyy +hhttjuhgvcgkisaqof[obpleewrfrrsgpumz]umcmeaytqjlqkyrawp[rhkhciyzmxciiysv]kszzqcmcylslhlpqjag +fnevugmjjescvvmbmt[bjzdquqohnusozz]fwlevkwzllmptbcelsh +hzqfveaxrqycvuolynx[ztsmaipixbuhbmv]ebvofyoeponbpip +utmnuyowmxipzhde[yuvqwfsuyhonciiepq]ynjvqvvifywnecwzdk[httqooeiilokkjghwjq]znixikpswkpgxcchuyg +goojhvcnizyiukzgmwb[euyvjdmnjjrkjwpu]puidllwqpsddlrhx +ysglduipsofxegb[kzrbdzimejxkyftyuz]aekosjomszyegyy[vpkwocloupebnjeo]ocdaynpnnytwrgkn +anheyoxddpkmqla[isqzqeuwwitvtqy]jnchwevvrgyznqsomum[kribzkkrxawjnfsmiux]mlerrnvwcydnfckydfm[hwouaafteeabtgflb]acwwvgztxwcanzizha +kaqernqhzefzthuc[tiuifctajhxawtoi]kyqdkeudzkihvfsn +vwwekuavrftztxb[aywyoempmajrdkxpsc]eibnjbszsfsapujqn[rxpcsihuzszefcdzl]gsahdvozzgxjhontxk +ymjyffbcgimsalujegr[dnppglortkqlowskj]wxwtxtdaaopcyvp[xfsnsdrlopdotuqx]sprrvphwennltlddiw +lguyxqxdnirprljpkec[gevtjwbiofgesdwil]phnydixjjjcprpxlpj +mgjnnftohavesepu[slwhvezajhvdukghl]hdhtlheqzqqrsqmfqyz +iapqmjgrjnecxylopbo[pnbvgmbhbcmcnpsf]opurzpqoyxdxfkud +efuoofbuyjoaqjd[achnmlslfvovmgt]xcuyvikslsewgqlx[gjxolnhgqhhglojjqhy]iarxidejlgphqwaei +uxpcurtzqgpgtzkvp[mibqtgwackcedfri]otnnsgolldyzdpbew[tmgiijgjuvjykwahml]xxgjgzmnicxmywdubrb[hwhcgbzhuoankdubft]rxqzywfyuliatahn +uhmufcxuptehmuf[sygthxldinztzudvs]bdxukzqaxeavvrbqmuz[wovugtpgwisttusjlet]tpfbcndafwhdnolv +kwknefvhmzbtjezkh[zcvncbptzekirhqo]qvgnyfkmrnxlgxzjjxl[twxzjkybjlrpurfmufa]lclhwuylibekjjxc +mspxottklkidvlomd[rhiachlbqgpdhfnxyc]ekkxgijnueonlkpfkm[dnwcjiihmpjqtmb]dkknlqniolowydd[dyqofryhvgracxeuivp]pbsgttbtgksqqevytrb +pjvdfpsdlampeztecfq[lpqshzeegwiouas]nwxqaoryigyvbby[iiddsczjoxentwv]weexunkmtaaufurjz[meywmosucyrxzlgxi]huqfmfpxdmcmqfk +abbhujqyoaphnruaih[yidrkxgrxeoarph]fvryghhzqrobkbsck[dnokdwmkbktlfoihxl]ttptfiadsswiwsfbvf +djwqivpbexyvdquh[qmmdydhjbmunyjixviv]nradabzesdavhasjbjs[lsabjblhocebvyhfee]hwbyvnzltgezasg +maxofygcnygnwefsb[gdfccusdbseqsqfwva]cxdmwhnjitaazhjftn[kcratndpffdnbopd]wocybndplnotqgctr[ymceqbtulsezvftsi]eggtzhqojksdjapnv +lzihlroqvmeohnun[wskcytlimfagjyd]tnehibbupupuhepqz[hschjdjtzbvavum]zstmglsltkovvckpmqr +syzoikkgzplleoaz[ccpsffhupzpuhjcw]kaswkcoyhlrayhikme[qnjnztjupvbwyns]ggmkqikeziailzpuv[ugqgbpunztgvsxsp]mntxaumliefzkpnia +dxnkgspqhyejogxstsk[jfgckouqypxttst]axtisjbtaviwafh +baxazxlkzlyzvbdvtlc[yhegkwrrluxcnaahyl]nyegiipdjrnjobyjp[ulhbizabyukfvhmdg]hgmxctzxzewckasi[fuvwuolxkcfdkmtcngk]xvmvoydeiuaeawcz +bkomgyefwkmwwpsayb[rozknmkljogphrqywyo]vlpasefojmrzbpox[epogjnrjrntbcnzha]okfkagkfyagcszueu[gjpfnuvnazbnqylfm]busunenasatqeieestf +dwlbzijjdujfhotvj[swplsznswlgnaud]bgedlfxgjbwxekq +ffjhdorivdezjdb[tqkfrzxthlxadqstmqe]ttmrscyvbrresartqnh[rfztsxgbedcdecgv]qxcsxdqhshsqtjtl +zwosebsoogknldkh[mkcucbphbvnaqyxjope]aibznttouadentsy[xfucuvnlnchuawcapcq]jqherkgzqodpzydtgu +xondkuknycfwyenkceu[ugjlxueqtcyhyhni]bbofydvkhtjgxxnyrc[gpnwoarvjltzyhhe]qebolgjnwnstokco +cygilweroxmbmbmx[hopxissehjarmezawol]exywzaffjuhehvmbm +nbndomwcaauiluzbg[qjxqxhccqsvtkwm]oazwbouchccdhtrbnbv[vetwfilwgnxxxrhxar]mrbcnwlpciwpizkxj +xuabbxdwkutpsogcfea[tgetfqpgstsxrokcemk]cbftstsldgcqbxf[vwjejomptmifhdulc]ejeroshnazbwjjzofbe \ No newline at end of file diff --git a/2016/day07-test.rkt b/2016/day07-test.rkt new file mode 100644 index 0000000..dfa2b70 --- /dev/null +++ b/2016/day07-test.rkt @@ -0,0 +1,5 @@ +#lang aoc-racket/2016/day07 +abba[mnop]qrst +abcd[bddb]xyyx +aaaa[qwer]tyui +ioxxoj[asdfgh]zxcvbn \ No newline at end of file diff --git a/2016/day07.rkt b/2016/day07.rkt new file mode 100644 index 0000000..78c66e9 --- /dev/null +++ b/2016/day07.rkt @@ -0,0 +1,24 @@ +#lang br/quicklang + +(module+ reader (provide read-syntax)) +(define (read-syntax path port) + (strip-bindings + #`(module mod "day07.rkt" + #,@(for/list ([ip (in-lines port)] + #:when (not (equal? ip ""))) + ip)))) + +(provide (rename-out [mb #%module-begin])) +(define-macro (mb . IPS) + #'(#%module-begin + (length (filter supports-tls? (list . IPS))) + (map supports-tls? (list . IPS)))) + +(define (supports-tls? x) + (and + (let ([maybe-abbas (regexp-match* #px"(\\w)(\\w)\\2\\1" x)]) + (ormap (λ(ma) + (not (equal? (substring ma 0 1) (substring ma 1 2)))) maybe-abbas)) + (let ([maybe-bad-abbas (regexp-match* #px"\\[.*((\\w)(\\w)\\3\\2).*\\]" x #:match-select cadr)]) + (andmap (λ(ma) + (equal? (substring ma 0 1) (substring ma 1 2))) maybe-bad-abbas)))) -- 2.25.1 From 1c97c199b0b460c58afff23012d1c6a1abee2afa Mon Sep 17 00:00:00 2001 From: Matthew Butterick Date: Wed, 7 Dec 2016 22:05:47 -0800 Subject: [PATCH 16/43] finish day07 --- 2016/day07.rkt | 53 +++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 44 insertions(+), 9 deletions(-) diff --git a/2016/day07.rkt b/2016/day07.rkt index 78c66e9..0448975 100644 --- a/2016/day07.rkt +++ b/2016/day07.rkt @@ -11,14 +11,49 @@ (provide (rename-out [mb #%module-begin])) (define-macro (mb . IPS) #'(#%module-begin - (length (filter supports-tls? (list . IPS))) - (map supports-tls? (list . IPS)))) + (define ips (list . IPS)) + (displayln (format "part a: ~a" (length (filter supports-tls? ips)))) + (displayln (format "part b: ~a" (length (filter supports-ssl? ips)))))) -(define (supports-tls? x) +(define bracketed-pattern #rx"\\[.*?\\]") + +(define (bracketed-parts str) + (regexp-match* bracketed-pattern str)) + +(define (unbracketed-parts str) + (string-split str bracketed-pattern)) + +(define (has-abba? str) + (for*/or ([idx (in-range (string-length str))] + [substr (in-list (regexp-match* #px"^\\w\\w\\w\\w" str idx))] + #:when substr) + (define cs (string->list substr)) + (and + (char=? (first cs) (fourth cs)) + (char=? (second cs) (third cs)) + (not (char=? (first cs) (second cs)))))) + +(define (supports-tls? str) (and - (let ([maybe-abbas (regexp-match* #px"(\\w)(\\w)\\2\\1" x)]) - (ormap (λ(ma) - (not (equal? (substring ma 0 1) (substring ma 1 2)))) maybe-abbas)) - (let ([maybe-bad-abbas (regexp-match* #px"\\[.*((\\w)(\\w)\\3\\2).*\\]" x #:match-select cadr)]) - (andmap (λ(ma) - (equal? (substring ma 0 1) (substring ma 1 2))) maybe-bad-abbas)))) + (ormap has-abba? (unbracketed-parts str)) + (andmap (negate has-abba?) (bracketed-parts str)))) + +(define (find-abas str) + (for*/list ([idx (in-range (string-length str))] + [substr (in-list (regexp-match* #px"^\\w\\w\\w" str idx))] + [cs (in-value (string->list substr))] + #:when (and + substr + (char=? (first cs) (third cs)) + (not (char=? (first cs) (second cs))))) + substr)) + +(define (aba->bab aba) (format "~a~a~a" (substring aba 1 2) + (substring aba 0 1) + (substring aba 1 2))) + +(define (supports-ssl? str) + (define abas (append-map find-abas (unbracketed-parts str))) + (for*/or ([bab (in-list (map aba->bab abas))] + [str (in-list (bracketed-parts str))]) + (regexp-match bab str))) -- 2.25.1 From af7139275aff55df17cc8ed0593577a0cd766725 Mon Sep 17 00:00:00 2001 From: Matthew Butterick Date: Thu, 8 Dec 2016 21:47:31 -0800 Subject: [PATCH 17/43] finish day08 --- 2016/day08-input.rkt | 174 +++++++++++++++++++++++++++++++++++++++++++ 2016/day08-test.rkt | 5 ++ 2016/day08.rkt | 52 +++++++++++++ 3 files changed, 231 insertions(+) create mode 100644 2016/day08-input.rkt create mode 100644 2016/day08-test.rkt create mode 100644 2016/day08.rkt diff --git a/2016/day08-input.rkt b/2016/day08-input.rkt new file mode 100644 index 0000000..909cc6f --- /dev/null +++ b/2016/day08-input.rkt @@ -0,0 +1,174 @@ +#lang aoc-racket/2016/day08 +rect 1x1 +rotate row y=0 by 20 +rect 1x1 +rotate row y=0 by 2 +rect 1x1 +rotate row y=0 by 3 +rect 2x1 +rotate row y=0 by 2 +rect 1x1 +rotate row y=0 by 3 +rect 2x1 +rotate row y=0 by 2 +rect 1x1 +rotate row y=0 by 4 +rect 2x1 +rotate row y=0 by 2 +rect 1x1 +rotate row y=0 by 2 +rect 1x1 +rotate row y=0 by 2 +rect 1x1 +rotate row y=0 by 3 +rect 2x1 +rotate row y=0 by 2 +rect 1x1 +rotate row y=0 by 5 +rect 1x1 +rotate row y=0 by 2 +rect 1x1 +rotate row y=0 by 6 +rect 5x1 +rotate row y=0 by 2 +rect 1x3 +rotate row y=2 by 8 +rotate row y=0 by 8 +rotate column x=0 by 1 +rect 7x1 +rotate row y=2 by 24 +rotate row y=0 by 20 +rotate column x=5 by 1 +rotate column x=4 by 2 +rotate column x=2 by 2 +rotate column x=0 by 1 +rect 7x1 +rotate column x=34 by 2 +rotate column x=22 by 1 +rotate column x=15 by 1 +rotate row y=2 by 18 +rotate row y=0 by 12 +rotate column x=8 by 2 +rotate column x=7 by 1 +rotate column x=5 by 2 +rotate column x=2 by 1 +rotate column x=0 by 1 +rect 9x1 +rotate row y=3 by 28 +rotate row y=1 by 28 +rotate row y=0 by 20 +rotate column x=18 by 1 +rotate column x=15 by 1 +rotate column x=14 by 1 +rotate column x=13 by 1 +rotate column x=12 by 2 +rotate column x=10 by 3 +rotate column x=8 by 1 +rotate column x=7 by 2 +rotate column x=6 by 1 +rotate column x=5 by 1 +rotate column x=3 by 1 +rotate column x=2 by 2 +rotate column x=0 by 1 +rect 19x1 +rotate column x=34 by 2 +rotate column x=24 by 1 +rotate column x=23 by 1 +rotate column x=14 by 1 +rotate column x=9 by 2 +rotate column x=4 by 2 +rotate row y=3 by 5 +rotate row y=2 by 3 +rotate row y=1 by 7 +rotate row y=0 by 5 +rotate column x=0 by 2 +rect 3x2 +rotate column x=16 by 2 +rotate row y=3 by 27 +rotate row y=2 by 5 +rotate row y=0 by 20 +rotate column x=8 by 2 +rotate column x=7 by 1 +rotate column x=5 by 1 +rotate column x=3 by 3 +rotate column x=2 by 1 +rotate column x=1 by 2 +rotate column x=0 by 1 +rect 9x1 +rotate row y=4 by 42 +rotate row y=3 by 40 +rotate row y=1 by 30 +rotate row y=0 by 40 +rotate column x=37 by 2 +rotate column x=36 by 3 +rotate column x=35 by 1 +rotate column x=33 by 1 +rotate column x=32 by 1 +rotate column x=31 by 3 +rotate column x=30 by 1 +rotate column x=28 by 1 +rotate column x=27 by 1 +rotate column x=25 by 1 +rotate column x=23 by 3 +rotate column x=22 by 1 +rotate column x=21 by 1 +rotate column x=20 by 1 +rotate column x=18 by 1 +rotate column x=17 by 1 +rotate column x=16 by 3 +rotate column x=15 by 1 +rotate column x=13 by 1 +rotate column x=12 by 1 +rotate column x=11 by 2 +rotate column x=10 by 1 +rotate column x=8 by 1 +rotate column x=7 by 2 +rotate column x=5 by 1 +rotate column x=3 by 3 +rotate column x=2 by 1 +rotate column x=1 by 1 +rotate column x=0 by 1 +rect 39x1 +rotate column x=44 by 2 +rotate column x=42 by 2 +rotate column x=35 by 5 +rotate column x=34 by 2 +rotate column x=32 by 2 +rotate column x=29 by 2 +rotate column x=25 by 5 +rotate column x=24 by 2 +rotate column x=19 by 2 +rotate column x=15 by 4 +rotate column x=14 by 2 +rotate column x=12 by 3 +rotate column x=9 by 2 +rotate column x=5 by 5 +rotate column x=4 by 2 +rotate row y=5 by 5 +rotate row y=4 by 38 +rotate row y=3 by 10 +rotate row y=2 by 46 +rotate row y=1 by 10 +rotate column x=48 by 4 +rotate column x=47 by 3 +rotate column x=46 by 3 +rotate column x=45 by 1 +rotate column x=43 by 1 +rotate column x=37 by 5 +rotate column x=36 by 5 +rotate column x=35 by 4 +rotate column x=33 by 1 +rotate column x=32 by 5 +rotate column x=31 by 5 +rotate column x=28 by 5 +rotate column x=27 by 5 +rotate column x=26 by 3 +rotate column x=25 by 4 +rotate column x=23 by 1 +rotate column x=17 by 5 +rotate column x=16 by 5 +rotate column x=13 by 1 +rotate column x=12 by 5 +rotate column x=11 by 5 +rotate column x=3 by 1 +rotate column x=0 by 1 \ No newline at end of file diff --git a/2016/day08-test.rkt b/2016/day08-test.rkt new file mode 100644 index 0000000..d9078c2 --- /dev/null +++ b/2016/day08-test.rkt @@ -0,0 +1,5 @@ +#lang aoc-racket/2016/day08 +rect 3x2 +rotate column x=1 by 1 +rotate row y=0 by 4 +rotate column x=1 by 1 \ No newline at end of file diff --git a/2016/day08.rkt b/2016/day08.rkt new file mode 100644 index 0000000..1239b1d --- /dev/null +++ b/2016/day08.rkt @@ -0,0 +1,52 @@ +#lang br/quicklang + +(module+ reader (provide read-syntax)) +(define (read-syntax path port) + (strip-bindings + #`(module mod "day08.rkt" + #,@(for/list ([inst (in-lines port)] + #:when (not (equal? inst ""))) + (format-datum '(~a) inst))))) + +(provide (rename-out [mb #%module-begin])) +(define-macro (mb INST ...) + #'(#%module-begin + (define g (for/fold ([g (grid 50 6)]) + ([inst (in-list (list INST ...))]) + (inst g))) + (for-each displayln (map (λ(gr) (map (λ(gri) (if (= gri 1) "X" " ")) gr)) g)) + (apply + (flatten g)))) + +(require (for-syntax racket/string)) +(define-macro (rect ARG) + (with-pattern ([(COLS ROWS) (map string->number (string-split (symbol->string (syntax->datum #'ARG)) "x"))]) + #'(curryr fill COLS ROWS))) +(provide rect) + +(define-macro (rotate DIR WHICH-RAW by DIST) + (with-pattern ([PROC (prefix-id "shift-" #'DIR)] + [WHICH (string->number (car (string-split (symbol->string (syntax->datum #'WHICH-RAW)) #rx"[xy]=")))]) + #'(curryr PROC WHICH DIST))) +(provide rotate) + +(define (grid x y) + (make-list y (make-list x 0))) + +(define (fill g cols rows) + (for/list ([(row ridx) (in-indexed g)]) + (for/list ([(col cidx) (in-indexed (list-ref g ridx))]) + (if (and (< ridx rows) (< cidx cols)) + 1 + col)))) + +(require sugar/list) +(define (shift-row g which dist) + (for/list ([(row ridx) (in-indexed g)]) + (if (= which ridx) + (shift row dist #f #t) + row))) +(provide shift-row) + +(define (shift-column g which dist) + (apply map list (shift-row (apply map list g) which dist))) +(provide shift-column) \ No newline at end of file -- 2.25.1 From 4138dbb774a307c0b59e435514187fb7ffe50222 Mon Sep 17 00:00:00 2001 From: Matthew Butterick Date: Fri, 9 Dec 2016 22:00:03 -0800 Subject: [PATCH 18/43] day09 --- 2016/day09-input.rkt | 2 ++ 2016/day09-test.rkt | 2 ++ 2016/day09.rkt | 55 ++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 59 insertions(+) create mode 100644 2016/day09-input.rkt create mode 100644 2016/day09-test.rkt create mode 100644 2016/day09.rkt diff --git a/2016/day09-input.rkt b/2016/day09-input.rkt new file mode 100644 index 0000000..e326ca1 --- /dev/null +++ b/2016/day09-input.rkt @@ -0,0 +1,2 @@ +#lang aoc-racket/2016/day09 +(6x9)JUORKH(10x13)LNWIKDMACM(126x14)(21x8)QLKUJNVVZIQGGFCJZMPHK(2x1)ZH(59x3)(38x14)KELEPIDYLCGJUBCXACRSOCEZYXLOFJSADZAYXN(8x11)HORSWAQU(21x2)YEZNNYDLDSTGWMQFSMTEZ(111x14)(14x14)IMLQOUGGZSUMFQ(73x10)(5x8)KWHRS(6x1)OQMANE(6x4)FALFZJ(3x3)OAQ(26x15)LALOJKTKJWTMRDDQQVCSDHJYGF(4x12)OXMQ(63x6)(6x10)OSJMJX(9x13)(4x2)FAUQ(29x13)UDCLMPVICKKUFMPQUENGCRIUGHOKM(7x7)JNKRSAT(79x7)(11x1)(5x13)RUQIL(47x12)HDIEMWYDIMTVXSIRZSRMIMZVMCEIUOMJDGHQXPWDFLOYIWL(3x5)IHX(1x6)M(33x3)ORLXEMAAICHAIJUIPKKWPWZMVXJSCZZYG(9x11)TIMKMEBMC(9930x13)(1513x15)(779x2)(333x4)(197x8)(27x4)IVLXTLXGDDQPWQOAXDEISEOTSAW(68x4)(4x13)OOZQ(3x5)NIN(10x12)UDGXNSJXLP(17x6)FZETGJDTLNUQRLHWU(4x13)AIZY(9x10)HESLLDOPY(69x1)(5x13)LULVA(10x1)CBTQWNWMRT(3x11)UYT(4x13)APGU(17x2)ADKQUAPCVNCXGBUGI(8x7)EGCQRTUU(108x11)(30x14)(2x13)LW(16x7)OTSCBRYUGBHSLRHU(2x1)KT(58x4)(3x12)SBW(7x15)IJTOSYM(30x8)MGFBFVKJDCFQHTLVSLZSSRVALHIYUN(25x4)(19x6)(5x2)ULAFN(4x1)LZBJ(60x10)(33x1)(26x14)FXVHHVMIQZBNSJRJWVQQBTLCJT(14x15)MCNCQPHNNPDVLT(326x1)(90x6)(8x9)(2x10)QQ(7x9)(2x9)QA(15x5)(3x12)YYF(1x9)E(2x5)PN(30x10)(16x1)DNOMTDTPGQECFDZR(2x11)PO(83x9)(18x6)(6x6)WCIAVF(2x4)PG(4x10)LMEG(2x9)TM(7x8)CYTGIPV(23x13)(1x9)V(1x15)E(4x14)EFSQ(102x15)(19x4)(6x5)GOXZGT(3x2)VQM(5x12)ZPRXJ(17x1)(10x15)RJNMNYZGHQ(37x2)(11x8)BZHBHSYQFZR(7x3)ISJOGDR(3x8)HEC(25x2)(19x6)(7x7)WKDHBGA(2x1)HH(2x11)TS(297x11)(289x14)(6x13)QERECU(4x3)IKNT(13x7)(7x11)(1x13)C(242x1)(28x4)(22x3)PHZYSAKYKBEGOCKKMRKOOO(12x1)RJDMLFYCFSIP(90x1)(17x2)YMAFXOHNVIPPURYIK(7x15)UYDUWQX(33x9)AIRWLTEJXUBYKOIBBDABIUKOYZXOPEGIW(9x11)RMBVBJFRV(88x9)(8x10)UQXEIUOO(24x2)OJEVOVTOFTKJSBPOOUPDZHGM(5x14)OWMBL(8x13)DKXEFKWI(12x12)WDCXEDVGOCPY(299x2)(239x3)(172x5)(67x7)(5x8)SYGVZ(5x8)DREXA(6x1)FNDUMM(30x2)PMYQAWIEQSOAWKGTANFXJVIPIXAVXK(5x5)ANQRI(83x3)(15x12)TGXTICPXLKWBCIP(13x5)DVMOKEUOBYENI(10x14)MIBPUUQJWN(12x3)GRHQZIDWWGLK(2x7)WR(11x7)(5x15)EIKHL(36x12)(21x4)AJDVITQLAQQOJJOFFKNLS(3x11)EZR(5x2)YHNYY(6x7)YCSGKC(18x13)ZEIUSEMQHQWMZVPLNZ(2x9)NN(79x7)(73x7)(67x3)(60x10)(9x5)TGBRMOCPG(32x2)FDWNZGDQFMFCQUHYSAOQAOTEIUBCDNIW(2x12)JM(24x15)IRWDGUFXLEKCWDNZRVBNRYSS(1280x14)(193x2)(12x4)(6x10)ZHTRGA(155x7)(34x8)(27x12)(5x10)VXVVJ(4x5)PLYR(2x4)YO(10x2)XXATONMJPD(7x5)(1x15)L(72x8)(21x7)(4x13)QGHA(5x15)BYFQB(18x5)(12x9)GHLYVOFFOHII(15x4)XQRPRDSSBORQHKA(3x11)LVM(8x8)IYHEOOSI(575x5)(289x5)(15x3)WUJJUHESVBKMKWI(144x1)(27x8)(21x2)ZWKIBQKYDICTDWZJSMFMB(85x4)(2x11)YJ(9x9)NEIHAQFQS(3x13)FMR(18x7)HTTQTCRJQAOGPSGCEP(24x3)FGXUVDQTTFSBUWGYWIWIVLNH(13x12)(1x3)A(1x13)H(14x9)(9x5)(4x3)SJAA(74x13)(18x6)FKPLHFUKSNVZXJTTYB(21x3)(15x8)LDLRHRRFVCEAEZW(17x8)BUQDCTSPWOMNYXSXQ(10x5)GYOKDVURIQ(10x1)ZSXQJVASBA(244x5)(237x3)(56x1)(2x3)IH(8x5)JPNMZEJU(15x10)SOIGFVVDBCHWLUX(8x11)IMNGAHMV(36x11)(6x6)AVOERJ(1x15)I(11x15)TGRCPFFXZWN(80x2)(2x11)UD(3x4)AJO(19x12)FQOHLQVIFPAEBOCLBOD(7x13)ZLCBKLN(18x12)BOEPSWVDLNKVUFDHKV(39x15)(10x4)AYYJAXAJXB(10x10)EWKJCLSLBE(1x6)C(6x12)EMSRFU(2x8)PX(483x14)(186x8)(178x12)(6x9)VJVAVY(65x1)(1x5)F(2x6)GE(4x13)BUJP(9x14)IMEJXLWER(20x12)HUUEGUTSDWPZHFZKXVFV(59x8)(5x13)VYEFV(25x6)DWBRYFPBHUNYZJUMZXCKFIHIE(1x11)F(5x8)DLUUQ(1x2)K(19x6)PPXCSNESTBPIWHDFLGG(4x10)NHOY(273x3)(18x9)SEWPNVRXHLBCKGESND(31x1)(1x6)J(19x5)SIQBBERDYWEKHMAJEWB(58x1)(43x13)(15x13)BKGAXDZLFQHWDIS(7x7)JWIGQYE(4x9)DHHW(3x6)OHR(140x13)(28x15)(10x12)JOMQKBRMDS(5x13)PUVLJ(44x7)(4x13)DKZR(16x15)NQDHKHTUOJOXBWWY(5x13)BAOCL(34x10)(28x1)JCJWLCJRLTIFXVJQBKHWOTLJFIVI(9x4)YFQNAGIPW(2478x7)(1083x5)(417x15)(117x10)(92x11)(31x1)XHEFNUFJDMXCTUQFXSZMYHFEHXUVGYQ(7x2)ZITTPBY(9x14)SSCNHQYKS(22x5)UVJATRGWLHAIVMQAGJMHEK(4x4)IUEZ(4x5)YKGS(96x14)(12x1)ZELBJAPFUHLZ(72x4)(2x14)NP(6x8)SMHEEP(14x11)HKYNMOLKTUVIXZ(15x1)NSAGJXXSAYRTIUK(5x15)NPRBV(182x9)(76x12)(4x9)LLZF(35x11)DLKHAYYAZXRSZKTEHJNIZQERZANTBHDVFQM(13x6)XPSSVVUTYEUKX(1x2)X(33x14)(2x11)IG(11x8)FPEMVSXFOHQ(3x6)BRW(46x11)(1x3)Q(3x10)ZHT(3x7)VNL(1x7)R(10x12)GZWTUNGVDQ(1x1)Y(120x10)(14x9)PBYCGWOFRQUZWJ(83x6)(17x12)(3x4)EAM(4x6)CJOU(53x6)(13x5)INHCJBTGHXSDE(19x8)CWOKMSSFKYMDMSLRSPA(4x6)XDUP(6x4)LYNJVO(2x7)AD(509x1)(188x4)(74x10)(41x9)FUNFGSCSMVNLSJIJIBJZMBXKRACPLVGYEVJVRXTLF(1x7)O(15x5)ZIFCLBIMIFPOFVA(8x5)(2x10)SA(3x15)SYB(29x12)(2x4)LR(15x13)SUPSUGVKOEIHPAZ(43x9)(18x6)IONNEOWXXVFDIQOMQM(1x14)N(7x7)VICZLXN(253x1)(26x11)(2x15)OF(4x4)EINM(4x7)VPFW(90x2)(2x12)OS(18x15)IHDJBISYOELRBFBMRT(16x5)ZWDVZWPFHTFZRHGM(6x15)RMASVP(17x8)HHEQZPDKXKRYHABWF(64x9)(24x4)XXMFXKEZKTMCOQDOYEXVQWGY(12x14)IXJHAYHVQVBG(9x11)OEOVLDHWO(47x10)(14x6)OQYNLIFVBHCLDV(21x7)GNVWPMWHRPNVRYWBOKXXH(2x1)GE(25x9)(3x3)YHT(10x10)WGUTPDXLCO(10x4)PTGWGFREXV(2x8)CP(569x3)(119x13)(56x1)(50x5)(1x5)T(25x8)QVDBRPILAVKKPNKCWACDVQKAM(8x1)UDZHAVIS(44x10)(32x5)(8x9)WVPZVSEF(12x10)EBBNJTJBZPSH(1x5)I(1x2)M(1x10)K(27x1)(2x4)IV(14x1)(9x8)(4x4)JVUB(112x15)(99x2)(49x3)(1x14)C(1x5)D(2x14)WK(5x15)XXYUI(11x9)KLPOYCKHWFV(14x6)GVHBCOJYAOCJAH(10x3)BATKUDEPLN(3x2)SPJ(2x1)TA(275x3)(41x4)(18x5)(2x12)PT(4x15)MAUM(11x6)(5x15)RFIRF(220x15)(29x11)XWFPDWBZOCIASNAPTYSYUUVQCLCYG(5x7)LJJUN(34x4)(1x1)I(4x3)DPAN(12x12)LFHZRFTTUZLE(46x13)(6x5)FMHJMK(2x7)PZ(9x13)SATIDLMYD(7x10)RXCEUNC(75x9)(5x15)WCKRG(15x3)MYYAJYGJIBOWXOX(29x1)AABPHEDEUZZCJICBHSJZFVGLJCQMX(3x1)UNW(803x15)(441x13)(65x6)(59x2)(8x4)VCYBDQQS(15x9)MHGZPTDZETHSKLL(7x2)NMOFOIS(7x14)KUAWWUP(15x8)GNNUKIVQVUVZULA(161x1)(87x6)(4x4)BHUM(1x14)W(40x2)HZRMQLYLMDMWKBSXEAOHCJVANHFGTEAPXAALYUNE(18x14)MIGSNNUDEKHXIVPAOP(62x6)(1x13)B(12x8)SJKLEEFTVPLM(4x3)WONT(5x9)TAESF(12x5)AQTLVIYDFKZV(53x9)SWGZYFRQBSYVZRKBUETKECZABCQOBKWTLUXIIRCYXIYYCIZPWXYLJ(114x13)(65x12)(33x12)FYYFQQIQMKTPWLRATCIXJWQWZHDZEMDSX(19x9)RDXSFWGCVHIAEFRATQB(8x4)SMHSAZUP(22x14)(1x4)O(2x9)TL(3x10)JWD(325x11)(107x6)(80x10)(1x9)I(7x14)VRZNXOX(17x5)SXTYFBITZSWXLUUFJ(11x3)LOCMMDXNMXN(15x6)ESLRVLYBOQKPEZA(2x3)ES(7x11)EDZPYNR(69x15)(8x15)HATTKOTD(1x15)C(1x14)O(35x1)(2x1)CW(21x13)MQITCFLIILUSRLVQGSKXW(121x6)(12x15)(6x13)HZQFNF(9x9)UIDOFTGVI(57x8)(15x14)DJHSOBMGQLFKFTQ(11x6)QWKTRHFEAGK(2x4)IH(6x5)ZHDHJX(10x15)ACPQGUGWIL(3x2)QMK(2x3)OT(15x6)NZGYKDPCNTWTZCH(3552x13)(852x7)(284x12)(277x1)(8x11)TGYIXQNL(40x13)(17x9)LWDCCCCWVOGYOWYZP(3x8)ZVN(3x10)SDQ(3x3)DWU(123x2)(10x14)NSZEKFDZRL(26x2)ENELBBZQLDXFNGFSVGYFTSJPBP(19x5)STCNNNFTTGNFSHLQIMV(7x14)BMGHAMA(30x9)LWDBIXXPHDSHEHLGUWINWVVCSQLNYK(72x1)(5x3)SMBBE(1x15)U(4x3)XLJH(12x6)LYEVOLDUQOII(22x3)UYBOYDZYRBWIHVBZJZJIBD(10x15)ORGFBMUTUK(535x12)(100x8)(6x15)PJFDCS(29x7)(4x2)RERM(4x1)BFHS(6x7)GNJACX(13x6)THUMFYQLTLTCJ(28x8)RTDQHJQHMBOOPZUEWWKMSANXGGQL(56x7)(50x4)(4x2)EUXN(3x12)LWU(2x13)YV(12x8)PXZISAYRVHIE(1x4)L(77x13)(70x12)(24x14)XLKAJZMEOBGJQOZFGDAARDDF(4x13)HMEZ(22x13)TRAZZTZVHZFJQBCVPUERWP(116x7)(8x13)FQQDJSSI(21x4)(3x3)GUX(1x12)J(1x7)F(26x14)(12x6)JVDQPKZGKVQJ(2x13)DV(36x7)(10x4)HVKCDIWLKC(8x5)LGTFQODZ(1x12)L(152x5)(4x6)CURR(80x1)(17x15)GUVFWMLWUJEGNLRVL(6x7)NJXRSS(7x14)AKRRJPI(8x5)DQVRMWFL(12x15)UMLQPEZXZYIZ(10x10)FTKQEWMORC(25x8)(4x1)NPOF(2x4)ZB(4x5)MNGN(4x1)SVFL(819x3)(422x1)(161x5)(63x11)(10x9)LMWKXPVXUD(12x11)NVMYGSXJQBVT(2x12)XS(14x1)LCJFACSGQHOPUG(44x6)(31x9)IYNFDKSDSHMXTGMRIOPAQJRHQBFEKDH(2x4)SX(14x3)HIZENUSZORNUXE(7x2)(1x12)C(3x10)LQD(246x14)(79x13)(32x14)FBUFQJMOZAUHZPGKGNZOTHLBIYETINMF(13x1)GKCLXCMWWPDZV(15x7)MNXJKTCLCEEKJCJ(39x4)(14x14)QYBWZMQBFIWBYQ(12x6)VHQHHLDLMOBZ(93x2)(40x1)TYXOJHUCXHXFBLOHLFUUDAHEWHQJFIUZMAGFRGWP(2x7)MS(9x13)VVJYBKHTL(19x4)IEBQYXDIHQGRMTODBIF(5x6)GWEDR(1x3)M(345x13)(185x7)(8x14)ZXFOFWFV(9x8)EZMSOIYCO(61x13)(33x11)OFPSLJWRGPSLTALOWBSVBFAAYMKCPMYTY(9x6)IUDMWEHGP(1x10)H(6x9)QPVXCO(71x11)(1x11)Y(5x14)PSMCR(7x2)ZAZQZSB(24x14)DCIFQYMEDXSNYMDBSIPOWQUL(5x5)OWYAX(4x5)ISZB(7x3)HWLAEOE(125x9)(45x13)(21x11)YRXZKZQVBPNYBKZIFSYMH(2x13)EL(3x14)HXM(6x15)YQWWDS(5x10)VWCRE(44x7)(8x6)ONMUMKWM(24x15)OBREAALATPCTXPSADMXUXKDK(31x8)(25x8)(18x15)(1x6)K(6x15)WFSHOE(1064x8)(180x12)(91x7)(2x9)UQ(77x10)(14x9)KQHDSHPDIDEWFX(7x13)DBZDGLP(17x1)PEQPQFLLLGAZMPJLK(5x8)DTSJE(5x10)JGHKO(16x10)(2x7)LP(3x11)PDI(40x10)(1x7)Y(27x13)IXDUDNKRJKLBBKIVORLOGMGJWCQ(8x6)(3x2)RTB(323x5)(79x9)(44x13)(19x1)VGWKUHADQZUENXNLNGP(12x10)HCFBPZQRWQEQ(3x10)PLL(12x13)(7x2)GVCTUOT(118x1)(57x15)(13x12)XQESMYXNDFYYW(1x8)G(3x6)XFU(17x8)BHBGTSSJBGGFRPPRT(48x7)(10x1)BLQHPNBCVO(8x13)QAYCKEPP(11x14)FBTYJKKUQCA(4x4)JNWW(97x11)(33x3)WYMAFQHRKESJTBRMNMOARAUYBABCIIZHH(11x8)DTIJCCBXCHK(4x2)ZLMO(25x11)(1x3)L(2x6)EN(7x1)FBJYMYH(11x4)GRWQQFIQDAL(89x9)(83x7)(23x14)QSLZVMSWOGEMUVQUMMBBXZS(33x5)(7x11)ZCEHLWD(14x2)BSRRFIINKZJUTM(9x3)XBPUGZIBI(426x11)(144x11)(10x2)ZVQMPUEXDS(7x14)(2x3)NP(8x8)(2x10)WY(31x4)(8x14)MQXSEJDJ(2x7)FW(4x13)XEQJ(59x3)(17x11)MTJKGUKCQPWDUSFMV(3x6)VDL(8x6)OHZZPPZE(8x12)JMJZCIBE(267x9)(6x7)QQULTD(109x3)(32x9)KHIFGECKKBYSJQUPZYCSWRGOISZBQZMP(5x11)WWVRO(53x13)RNKMDBXJEJEYGREGYLVFXJAGXKPLZGSBEGCLRHUBWMMIMMSEJLKVS(20x10)(1x12)Q(1x4)J(1x10)T(44x7)(3x1)HQS(2x14)OY(4x3)NYOT(3x11)HRB(5x3)AWNPF(57x4)(51x4)NRDWDRLNIEMNTPTKPXWYVRZVJXCEPIWDOZHHSPWTINYYPNKRIJM(788x7)(373x2)(13x13)OMNINNXSMZGVU(110x10)(9x4)MUCJLTXXY(23x8)(16x10)QPEZTMHGTAZMDZFT(4x12)QARM(50x15)(3x11)XOH(16x6)YBLZLQWJABJGQWOU(4x1)PMXY(4x15)OHDQ(118x4)(5x11)EPKSP(24x4)AWIBAENYEFRILVCXFWNDTDKD(1x4)B(65x2)(12x2)YLEUJZAKLKME(24x13)TTXHIHEKQRZMJJYYKWQLCBJP(10x2)FCVCPOTJEU(102x12)(76x14)(7x12)UZQCZAB(3x1)XMW(9x1)UJSGSEURM(11x13)BOKCOFUHRNM(17x1)AEMFGQNASPGQHPXUB(1x13)P(6x11)CVFTDM(166x1)(74x3)(3x12)ONA(36x9)(29x12)AGQWRIAFZDTLKFAWUBZVULOQIYWPP(17x9)AKFFQIWNYGWXFBZZN(71x7)(31x2)XOIACTRUJMFXAVRZUMXKBXZFREZNVJJ(27x15)(20x12)EWQHGQNTXRUIOVHORPOV(3x12)TVU(117x1)(109x14)(10x12)BEIZCDNSAS(86x7)(27x9)FURZRGYPYLGCCCEKYZJPGYYDBQQ(5x2)SBYXR(25x4)ZXXGJHSMUOPRERLXZXQJLECBO(6x15)JUOYIW(91x3)(23x14)MGGWDYYRPCJTIYELCDIZVHS(2x12)KD(6x3)BCDBJV(19x3)(13x4)RXIRDQSOWIPGW(11x1)QGAYMDNYTSL(8x11)FJQAMNNG(1063x13)(250x5)(60x10)(24x11)(8x12)BJYJZMJY(5x8)BJXMU(7x14)NZTAXLS(4x8)VBAT(2x3)HO(176x5)(169x4)(13x15)TWSLJCGYWHLHA(73x6)(36x12)AOUGLFXLSSEWZXFMZUNGDGZVCYYJZUPNKRIH(3x3)UFP(3x1)QIQ(8x15)NPNWNAWS(50x15)(3x6)YIW(1x10)D(10x14)FCLZEIFJWG(1x12)N(6x8)AZDFPX(7x13)DICRGNA(799x2)(533x11)(276x6)(100x9)(17x5)LPMZDSXVBZCMEDFQB(24x8)TCDTFHHXXVEQIVVZCESDANQS(10x15)EPDXGVSSBQ(7x13)WQSTXRF(10x11)RIBWTNVIOX(3x15)VSF(61x6)(8x15)TWCPLZZZ(8x9)AVRPJLHR(21x9)QDODHNZHZERQGXTVKLHYW(1x13)U(53x11)(2x15)RC(32x12)CWBFTTDPKPGPZVZFIJHVLZRCOPJRNFOJ(1x1)I(26x11)CDUFFOGUBYLOBYJNLCWGPDRSMS(201x12)(8x5)(3x1)YIC(8x10)BDXPEMTD(64x4)(10x1)RBHVYIUNFH(5x14)KYIHZ(14x2)TGSOMUZWRGPUNE(11x3)QJHVUCUELOW(8x14)VKMCUJKE(83x11)(1x11)L(5x12)WLWRL(4x12)NQVE(36x3)FJDUVTWHNITJXXVVUMFUDALUXKSIPQFJOEDT(8x1)GDWDODFR(35x2)(22x13)(4x14)OSLD(7x4)VWJVMIF(1x6)H(10x6)VDQYBSDXHG(149x10)(16x14)DROZRQNSVIJWCMPZ(67x6)(54x6)NDDMSLQZBUOSOSAFMDFQGMQBMSGREAKGVTMWIRQPTESMEACCZIOGQH(1x15)J(8x10)CFHPKNID(24x1)(18x2)EMDBIEKPGRSNYXDATP(4x4)HSHR(79x9)(51x1)(2x12)BB(6x15)LNUMRD(25x8)(10x6)FBWLKYGCNJ(3x13)XRN(16x7)(3x9)ONH(2x10)HS(47x1)(2x2)MS(34x9)VLUZLSWIOQZSOBREZDZXEQYKYWTNHHWRNZ(9x6)(4x4)WMMX(78x9)(17x7)(1x10)J(4x14)WZCZ(49x9)(3x5)IPZ(35x7)ROJEZWTCDQCBOWTBEEJCVWBPNMBNXJDJZMG(183x15)(3x6)KRR(54x13)(3x11)JXV(4x7)WRTT(1x6)Q(16x15)LLQNPHNXKWRMAGKX(2x1)ID(21x15)UGXWFMKPKPUMLJCQDBWGS(4x1)NZTP(71x2)(21x7)PKYTHOAENWACXNCPHTTTU(14x12)ZFQGENBKFBMONH(1x7)G(10x10)VSHYAMJWEV(33x7)(4x6)LAZL(12x9)KIDULBTPZHYR(1x4)U(143x8)(29x3)(22x13)LQNQIWKSHNSMJZKWJQWDQA(79x10)(1x8)V(35x12)BTLWYXERIMYWZOFPFAVAAZOFQAHKQXAPOWO(24x13)RLAORQSPJCCOLZLXDAAOXYHY(16x1)MZLJXILHCLGHOAPW(12x3)(7x1)ELWCOIZ \ No newline at end of file diff --git a/2016/day09-test.rkt b/2016/day09-test.rkt new file mode 100644 index 0000000..87cf955 --- /dev/null +++ b/2016/day09-test.rkt @@ -0,0 +1,2 @@ +#lang aoc-racket/2016/day09 +(27x12)(20x12)(13x14)(7x10)(1x12)A \ No newline at end of file diff --git a/2016/day09.rkt b/2016/day09.rkt new file mode 100644 index 0000000..687a52a --- /dev/null +++ b/2016/day09.rkt @@ -0,0 +1,55 @@ +#lang br/quicklang +(require racket/string) + +(module+ reader (provide read-syntax)) +(define (read-syntax path port) + (strip-bindings + #`(module mod "day09.rkt" + #,@(for/list ([str (in-lines port)] + #:when (not (equal? str ""))) + `(solve ,(string-trim str)))))) + +(provide solve #%module-begin) +(define (solve str) + (for-each displayln + (let (#;[decomp-result (decomp str)] + [decomp2-result (decomp2 str)]) + (list #;decomp-result #;(string-length decomp-result) + decomp2-result)))) + +(define (decomp str) + (define p (open-input-string str)) + (define decompressor-pat "\\((\\d+)x(\\d+)\\)") + (let loop ([bstrs empty][decompressor #f]) + (define cur-pat (if decompressor + (pregexp (format ".{~a}" (car decompressor))) + (pregexp (format "~a|." decompressor-pat)))) + (define match (let ([result (regexp-try-match cur-pat p)]) + (and result (car result)))) + (cond + [(not match) (string-append* (map ~a (reverse (flatten bstrs))))] + [decompressor (loop (cons (make-list (cadr decompressor) match) bstrs) #f)] + [else + (define maybe-decompressor (regexp-match (pregexp decompressor-pat) match)) + (if maybe-decompressor + (loop bstrs (map (compose1 string->number ~a) (cdr maybe-decompressor))) + (loop (cons match bstrs) #f))]))) + +(define (decomp2 str) + (define p (open-input-string str)) + (define decompressor-pat "\\((\\d+)x(\\d+)\\)") + (let loop ([sum 0][decompressor #f]) + (define cur-pat (if decompressor + (pregexp (format ".{~a}" (car decompressor))) + (pregexp (format "~a|." decompressor-pat)))) + (define match (let ([result (regexp-try-match cur-pat p)]) + (and result (car result)))) + (cond + [(not match) sum] + [decompressor (loop (+ sum (* (cadr decompressor) (decomp2 (~a match)))) #f)] + [else + (define maybe-decompressor (regexp-match (pregexp decompressor-pat) match)) + (if maybe-decompressor + (loop sum (map (compose1 string->number ~a) (cdr maybe-decompressor))) + (loop (+ sum (string-length (~a match))) #f))]))) + -- 2.25.1 From 5d101ecfbef7925cb41f6b5a178311221bede6ce Mon Sep 17 00:00:00 2001 From: Matthew Butterick Date: Sat, 10 Dec 2016 10:17:20 -0800 Subject: [PATCH 19/43] start day10 --- 2016/day10/input.rkt | 232 +++++++++++++++++++++++++++++++++++++++++++ 2016/day10/lang.rkt | 50 ++++++++++ 2016/day10/test.rkt | 7 ++ 3 files changed, 289 insertions(+) create mode 100644 2016/day10/input.rkt create mode 100644 2016/day10/lang.rkt create mode 100644 2016/day10/test.rkt diff --git a/2016/day10/input.rkt b/2016/day10/input.rkt new file mode 100644 index 0000000..0c34997 --- /dev/null +++ b/2016/day10/input.rkt @@ -0,0 +1,232 @@ +#lang reader "lang.rkt" +bot 119 gives low to bot 18 and high to bot 3 +bot 69 gives low to bot 47 and high to bot 172 +bot 51 gives low to output 6 and high to bot 174 +bot 11 gives low to bot 94 and high to bot 165 +bot 42 gives low to bot 0 and high to bot 95 +bot 195 gives low to bot 69 and high to bot 99 +bot 96 gives low to bot 169 and high to bot 85 +bot 24 gives low to bot 119 and high to bot 44 +bot 114 gives low to output 5 and high to bot 43 +bot 13 gives low to bot 203 and high to bot 197 +bot 20 gives low to bot 146 and high to bot 164 +bot 127 gives low to bot 132 and high to bot 11 +bot 50 gives low to bot 80 and high to bot 148 +bot 77 gives low to bot 35 and high to bot 67 +bot 151 gives low to output 16 and high to bot 68 +bot 72 gives low to bot 130 and high to bot 88 +bot 89 gives low to bot 184 and high to bot 170 +bot 158 gives low to bot 178 and high to bot 29 +bot 85 gives low to bot 93 and high to bot 191 +bot 6 gives low to bot 159 and high to bot 7 +bot 156 gives low to bot 25 and high to bot 16 +bot 177 gives low to output 8 and high to bot 157 +bot 26 gives low to bot 131 and high to bot 149 +value 61 goes to bot 119 +bot 18 gives low to bot 161 and high to bot 118 +bot 53 gives low to bot 128 and high to bot 74 +bot 110 gives low to bot 126 and high to bot 90 +bot 95 gives low to bot 52 and high to bot 62 +bot 67 gives low to bot 121 and high to bot 156 +bot 138 gives low to bot 151 and high to bot 171 +bot 173 gives low to bot 137 and high to bot 15 +bot 175 gives low to bot 136 and high to bot 117 +bot 28 gives low to bot 120 and high to bot 92 +bot 143 gives low to bot 70 and high to bot 26 +bot 78 gives low to bot 90 and high to bot 63 +bot 113 gives low to bot 73 and high to bot 193 +bot 207 gives low to bot 23 and high to bot 125 +bot 116 gives low to bot 100 and high to bot 158 +bot 172 gives low to bot 10 and high to bot 61 +bot 64 gives low to bot 24 and high to bot 41 +bot 16 gives low to bot 147 and high to bot 106 +value 11 goes to bot 2 +bot 203 gives low to bot 125 and high to bot 197 +value 5 goes to bot 18 +bot 49 gives low to bot 160 and high to bot 83 +bot 112 gives low to bot 39 and high to bot 32 +bot 129 gives low to bot 186 and high to bot 112 +bot 68 gives low to output 7 and high to bot 87 +bot 201 gives low to bot 56 and high to bot 124 +bot 56 gives low to bot 83 and high to bot 207 +bot 38 gives low to bot 89 and high to bot 136 +bot 194 gives low to bot 40 and high to bot 105 +bot 15 gives low to bot 1 and high to bot 50 +bot 47 gives low to bot 6 and high to bot 10 +bot 63 gives low to bot 205 and high to bot 139 +bot 176 gives low to bot 30 and high to bot 138 +value 41 goes to bot 24 +bot 71 gives low to bot 165 and high to bot 185 +bot 84 gives low to bot 209 and high to bot 129 +bot 204 gives low to bot 61 and high to bot 91 +bot 152 gives low to bot 163 and high to bot 166 +bot 139 gives low to bot 45 and high to bot 5 +bot 100 gives low to bot 55 and high to bot 178 +bot 81 gives low to bot 95 and high to bot 188 +bot 163 gives low to output 12 and high to bot 114 +bot 133 gives low to bot 124 and high to bot 13 +bot 206 gives low to bot 37 and high to bot 21 +bot 23 gives low to bot 116 and high to bot 82 +bot 134 gives low to bot 195 and high to bot 202 +bot 73 gives low to bot 54 and high to bot 22 +bot 99 gives low to bot 172 and high to bot 204 +bot 192 gives low to bot 34 and high to bot 115 +bot 8 gives low to bot 171 and high to bot 60 +bot 142 gives low to bot 199 and high to bot 28 +bot 41 gives low to bot 44 and high to bot 140 +bot 0 gives low to bot 71 and high to bot 52 +bot 154 gives low to bot 148 and high to bot 33 +bot 62 gives low to bot 66 and high to bot 65 +bot 160 gives low to bot 175 and high to bot 153 +value 73 goes to bot 111 +bot 164 gives low to bot 141 and high to bot 9 +bot 202 gives low to bot 99 and high to bot 19 +bot 12 gives low to bot 46 and high to bot 48 +bot 170 gives low to bot 190 and high to bot 194 +bot 27 gives low to bot 101 and high to bot 200 +bot 148 gives low to bot 127 and high to bot 182 +bot 147 gives low to bot 57 and high to bot 96 +bot 65 gives low to bot 78 and high to bot 46 +bot 125 gives low to bot 82 and high to bot 79 +bot 86 gives low to output 10 and high to output 18 +bot 105 gives low to bot 108 and high to bot 98 +bot 103 gives low to output 15 and high to bot 199 +bot 14 gives low to bot 65 and high to bot 12 +bot 132 gives low to bot 113 and high to bot 94 +value 53 goes to bot 102 +bot 136 gives low to bot 170 and high to bot 196 +bot 55 gives low to bot 105 and high to bot 145 +bot 36 gives low to bot 67 and high to bot 126 +bot 92 gives low to bot 177 and high to bot 101 +bot 161 gives low to output 17 and high to bot 208 +bot 32 gives low to bot 180 and high to bot 123 +bot 179 gives low to output 19 and high to bot 86 +bot 90 gives low to bot 76 and high to bot 205 +bot 21 gives low to bot 103 and high to bot 142 +bot 174 gives low to output 11 and high to bot 30 +bot 46 gives low to bot 63 and high to bot 48 +bot 94 gives low to bot 193 and high to bot 77 +bot 70 gives low to bot 21 and high to bot 131 +bot 29 gives low to bot 181 and high to bot 144 +bot 82 gives low to bot 158 and high to bot 135 +bot 33 gives low to bot 182 and high to bot 0 +bot 144 gives low to bot 192 and high to bot 141 +bot 197 gives low to bot 79 and high to bot 20 +value 17 goes to bot 2 +bot 137 gives low to bot 41 and high to bot 1 +bot 121 gives low to bot 8 and high to bot 25 +bot 40 gives low to bot 15 and high to bot 108 +bot 83 gives low to bot 153 and high to bot 23 +value 2 goes to bot 64 +value 47 goes to bot 184 +bot 188 gives low to bot 62 and high to bot 14 +bot 171 gives low to bot 68 and high to bot 59 +bot 39 gives low to bot 143 and high to bot 180 +bot 157 gives low to output 2 and high to bot 179 +bot 126 gives low to bot 156 and high to bot 76 +value 19 goes to bot 187 +bot 60 gives low to bot 59 and high to bot 57 +bot 104 gives low to bot 188 and high to bot 4 +bot 74 gives low to bot 183 and high to bot 113 +bot 102 gives low to bot 187 and high to bot 173 +bot 120 gives low to output 9 and high to bot 177 +bot 111 gives low to bot 134 and high to bot 107 +bot 155 gives low to bot 109 and high to bot 34 +bot 19 gives low to bot 204 and high to bot 91 +bot 145 gives low to bot 98 and high to bot 155 +value 3 goes to bot 150 +bot 107 gives low to bot 202 and high to bot 19 +value 43 goes to bot 195 +bot 97 gives low to bot 129 and high to bot 168 +bot 48 gives low to bot 139 and high to bot 5 +bot 58 gives low to bot 17 and high to bot 27 +bot 149 gives low to bot 75 and high to bot 58 +bot 44 gives low to bot 3 and high to bot 53 +bot 186 gives low to bot 191 and high to bot 39 +bot 2 gives low to bot 111 and high to bot 107 +bot 22 gives low to bot 176 and high to bot 198 +bot 167 gives low to bot 43 and high to bot 206 +value 59 goes to bot 6 +bot 135 gives low to bot 29 and high to bot 146 +bot 166 gives low to bot 114 and high to bot 167 +bot 5 gives low to bot 97 and high to bot 168 +bot 205 gives low to bot 31 and high to bot 45 +bot 17 gives low to bot 92 and high to bot 27 +bot 3 gives low to bot 118 and high to bot 128 +bot 209 gives low to bot 85 and high to bot 186 +bot 30 gives low to output 1 and high to bot 151 +value 67 goes to bot 69 +bot 193 gives low to bot 22 and high to bot 35 +bot 196 gives low to bot 194 and high to bot 55 +bot 4 gives low to bot 14 and high to bot 12 +bot 98 gives low to bot 154 and high to bot 109 +bot 184 gives low to bot 102 and high to bot 190 +bot 180 gives low to bot 26 and high to bot 123 +bot 200 gives low to bot 179 and high to bot 86 +bot 185 gives low to bot 36 and high to bot 110 +bot 52 gives low to bot 185 and high to bot 66 +bot 123 gives low to bot 149 and high to bot 58 +bot 88 gives low to bot 51 and high to bot 54 +bot 208 gives low to output 4 and high to bot 130 +bot 153 gives low to bot 117 and high to bot 116 +bot 131 gives low to bot 142 and high to bot 75 +bot 54 gives low to bot 174 and high to bot 176 +bot 91 gives low to bot 133 and high to bot 13 +bot 130 gives low to output 0 and high to bot 51 +bot 140 gives low to bot 53 and high to bot 162 +bot 165 gives low to bot 77 and high to bot 36 +bot 61 gives low to bot 201 and high to bot 133 +bot 57 gives low to bot 152 and high to bot 169 +bot 182 gives low to bot 11 and high to bot 71 +bot 37 gives low to output 20 and high to bot 103 +bot 199 gives low to output 13 and high to bot 120 +bot 59 gives low to bot 87 and high to bot 152 +bot 181 gives low to bot 155 and high to bot 192 +bot 178 gives low to bot 145 and high to bot 181 +bot 31 gives low to bot 106 and high to bot 84 +bot 122 gives low to bot 150 and high to bot 160 +bot 25 gives low to bot 60 and high to bot 147 +bot 189 gives low to bot 206 and high to bot 70 +value 23 goes to bot 47 +bot 128 gives low to bot 72 and high to bot 183 +bot 34 gives low to bot 42 and high to bot 81 +bot 43 gives low to output 14 and high to bot 37 +bot 66 gives low to bot 110 and high to bot 78 +bot 101 gives low to bot 157 and high to bot 200 +value 71 goes to bot 89 +bot 198 gives low to bot 138 and high to bot 8 +bot 106 gives low to bot 96 and high to bot 209 +value 31 goes to bot 159 +bot 117 gives low to bot 196 and high to bot 100 +bot 159 gives low to bot 122 and high to bot 49 +bot 168 gives low to bot 112 and high to bot 32 +bot 187 gives low to bot 64 and high to bot 137 +bot 79 gives low to bot 135 and high to bot 20 +bot 35 gives low to bot 198 and high to bot 121 +bot 80 gives low to bot 162 and high to bot 127 +bot 1 gives low to bot 140 and high to bot 80 +bot 45 gives low to bot 84 and high to bot 97 +bot 108 gives low to bot 50 and high to bot 154 +bot 115 gives low to bot 81 and high to bot 104 +bot 118 gives low to bot 208 and high to bot 72 +bot 190 gives low to bot 173 and high to bot 40 +bot 10 gives low to bot 7 and high to bot 201 +bot 169 gives low to bot 166 and high to bot 93 +value 29 goes to bot 38 +bot 9 gives low to bot 104 and high to bot 4 +value 37 goes to bot 122 +bot 150 gives low to bot 38 and high to bot 175 +bot 75 gives low to bot 28 and high to bot 17 +value 13 goes to bot 134 +bot 124 gives low to bot 207 and high to bot 203 +bot 109 gives low to bot 33 and high to bot 42 +value 7 goes to bot 161 +bot 93 gives low to bot 167 and high to bot 189 +bot 191 gives low to bot 189 and high to bot 143 +bot 146 gives low to bot 144 and high to bot 164 +bot 141 gives low to bot 115 and high to bot 9 +bot 162 gives low to bot 74 and high to bot 132 +bot 87 gives low to output 3 and high to bot 163 +bot 7 gives low to bot 49 and high to bot 56 +bot 183 gives low to bot 88 and high to bot 73 +bot 76 gives low to bot 16 and high to bot 31 \ No newline at end of file diff --git a/2016/day10/lang.rkt b/2016/day10/lang.rkt new file mode 100644 index 0000000..601b74d --- /dev/null +++ b/2016/day10/lang.rkt @@ -0,0 +1,50 @@ +#lang br/quicklang +(require racket/string (for-syntax syntax/strip-context)) +;; http://adventofcode.com/2016/day/10 + +(provide read-syntax) +(define (read-syntax path port) + (strip-bindings + #`(module mod "lang.rkt" + #,@(for/list ([str (in-lines port)] + #:when (not (equal? str ""))) + (format-datum '~a str))))) + +(define-macro (mb ARG ...) + #'(#%module-begin + ARG ... + )) +(provide (rename-out [mb #%module-begin])) + +(define bots (make-hash)) +(define outputs (make-hash)) + +(define chip-comparison-key '(17 61)) +(define-macro (value VAL goes to TYPE NUM) + (with-pattern ([HASH-NAME (replace-context #'here (suffix-id #'TYPE "s"))]) + #'(begin + (hash-update! HASH-NAME NUM (λ (val) (cons VAL val)) empty) + #;(displayln (format "bots: ~v" bots)) + #;(displayln (format "outputs: ~v" outputs))))) +(provide value) + +(define (bot-low bot) + (define botvals (hash-ref bots bot)) + (define minval (car (sort botvals <))) + (hash-set! bots bot (remove minval botvals)) + minval) + +(define (bot-high bot) + (define botvals (hash-ref bots bot)) + (define maxval (car (sort botvals >))) + (hash-set! bots bot (remove maxval botvals)) + maxval) + +; bot BOT gives low to LOW-TYPE LOW-NUM and high to HIGH-TYPE HIGH-NUM +(define-macro (bot BOT gives low to LOW-TYPE LOW-NUM and high to HIGH-TYPE HIGH-NUM) + #'(module+ main + (when (equal? (sort (hash-ref bots BOT) <) (sort chip-comparison-key <)) + (displayln (format "answer: bot ~a holds ~a chips" BOT chip-comparison-key))) + (value (bot-low BOT) goes to LOW-TYPE LOW-NUM) + (value (bot-high BOT) goes to HIGH-TYPE HIGH-NUM))) +(provide bot and) \ No newline at end of file diff --git a/2016/day10/test.rkt b/2016/day10/test.rkt new file mode 100644 index 0000000..e319a0a --- /dev/null +++ b/2016/day10/test.rkt @@ -0,0 +1,7 @@ +#lang reader "lang.rkt" +value 5 goes to bot 2 +bot 2 gives low to bot 1 and high to bot 0 +value 3 goes to bot 1 +bot 1 gives low to output 1 and high to bot 0 +bot 0 gives low to output 2 and high to output 0 +value 2 goes to bot 2 \ No newline at end of file -- 2.25.1 From 05f1f914dbcb84dab15935462aeaf561e5134a22 Mon Sep 17 00:00:00 2001 From: Matthew Butterick Date: Mon, 12 Dec 2016 07:40:13 -0800 Subject: [PATCH 20/43] finish day10 --- 2016/day10/lang.rkt | 64 ++++++++++++++++++++------------------------- 1 file changed, 29 insertions(+), 35 deletions(-) diff --git a/2016/day10/lang.rkt b/2016/day10/lang.rkt index 601b74d..5180871 100644 --- a/2016/day10/lang.rkt +++ b/2016/day10/lang.rkt @@ -1,50 +1,44 @@ #lang br/quicklang -(require racket/string (for-syntax syntax/strip-context)) ;; http://adventofcode.com/2016/day/10 - (provide read-syntax) (define (read-syntax path port) (strip-bindings #`(module mod "lang.rkt" #,@(for/list ([str (in-lines port)] #:when (not (equal? str ""))) - (format-datum '~a str))))) + `(handle ,@(string-split str)))))) -(define-macro (mb ARG ...) +(define chip-comparison-key '(17 61)) +(define-macro (mb . ARGS) #'(#%module-begin - ARG ... - )) + (begin . ARGS) + (displayln + (for/first ([(k v) (in-hash gates)] + #:when (equal? (sort (apply eval-gate k) <) + (sort chip-comparison-key <))) + k)) + (displayln (for/product ([i (in-range 3)]) + (gate-low "output" (~a i)))))) (provide (rename-out [mb #%module-begin])) -(define bots (make-hash)) -(define outputs (make-hash)) - -(define chip-comparison-key '(17 61)) -(define-macro (value VAL goes to TYPE NUM) - (with-pattern ([HASH-NAME (replace-context #'here (suffix-id #'TYPE "s"))]) - #'(begin - (hash-update! HASH-NAME NUM (λ (val) (cons VAL val)) empty) - #;(displayln (format "bots: ~v" bots)) - #;(displayln (format "outputs: ~v" outputs))))) -(provide value) +(define gates (make-hash)) -(define (bot-low bot) - (define botvals (hash-ref bots bot)) - (define minval (car (sort botvals <))) - (hash-set! bots bot (remove minval botvals)) - minval) +(define-macro-cases handle + [(_ "value" VAL "goes" "to" TYPE NUM) + #'(hash-update! gates (list TYPE NUM) (λ (val) (cons (λ () (let ([v VAL]) + (if (string? v) + (string->number v) + v))) val)) empty)] + [(_ "bot" BOT "gives" "low" "to" LOW-TYPE LOW-NUM "and" "high" "to" HIGH-TYPE HIGH-NUM) + #'(begin + (handle "value" (gate-low "bot" BOT) "goes" "to" LOW-TYPE LOW-NUM) + (handle "value" (gate-high "bot" BOT) "goes" "to" HIGH-TYPE HIGH-NUM))]) +(provide handle) -(define (bot-high bot) - (define botvals (hash-ref bots bot)) - (define maxval (car (sort botvals >))) - (hash-set! bots bot (remove maxval botvals)) - maxval) +(require sugar/cache) +(define/caching (eval-gate type num) + (for/list ([proc (in-list (hash-ref gates (list type num)))]) + (proc))) -; bot BOT gives low to LOW-TYPE LOW-NUM and high to HIGH-TYPE HIGH-NUM -(define-macro (bot BOT gives low to LOW-TYPE LOW-NUM and high to HIGH-TYPE HIGH-NUM) - #'(module+ main - (when (equal? (sort (hash-ref bots BOT) <) (sort chip-comparison-key <)) - (displayln (format "answer: bot ~a holds ~a chips" BOT chip-comparison-key))) - (value (bot-low BOT) goes to LOW-TYPE LOW-NUM) - (value (bot-high BOT) goes to HIGH-TYPE HIGH-NUM))) -(provide bot and) \ No newline at end of file +(define (gate-low type num) (car (sort (eval-gate type num) <))) +(define (gate-high type num) (car (sort (eval-gate type num) >))) -- 2.25.1 From 4c514babbe2abbe81c447acacd392d1b85f17d87 Mon Sep 17 00:00:00 2001 From: Matthew Butterick Date: Mon, 12 Dec 2016 07:40:17 -0800 Subject: [PATCH 21/43] start day12 --- 2016/day12/input.rkt | 24 ++++++++++++++++++++++++ 2016/day12/lang.rkt | 25 +++++++++++++++++++++++++ 2016/day12/test.rkt | 7 +++++++ 3 files changed, 56 insertions(+) create mode 100644 2016/day12/input.rkt create mode 100644 2016/day12/lang.rkt create mode 100644 2016/day12/test.rkt diff --git a/2016/day12/input.rkt b/2016/day12/input.rkt new file mode 100644 index 0000000..ed9d5e4 --- /dev/null +++ b/2016/day12/input.rkt @@ -0,0 +1,24 @@ +#lang reader "lang.rkt" +cpy 1 a +cpy 1 b +cpy 26 d +jnz c 2 +jnz 1 5 +cpy 7 c +inc d +dec c +jnz c -2 +cpy a c +inc a +dec b +jnz b -2 +cpy c b +dec d +jnz d -6 +cpy 16 c +cpy 17 d +inc a +dec d +jnz d -2 +dec c +jnz c -5 \ No newline at end of file diff --git a/2016/day12/lang.rkt b/2016/day12/lang.rkt new file mode 100644 index 0000000..a00f7fd --- /dev/null +++ b/2016/day12/lang.rkt @@ -0,0 +1,25 @@ +#lang br/quicklang +;; http://adventofcode.com/2016/day/12 + +(provide read-syntax) + +(define (read-syntax path port) + (strip-bindings + #`(module mod "lang.rkt" + #,@(for/list ([str (in-lines port)] + #:when (not (equal? str ""))) + (format-datum `(handle ,@(map string->symbol (string-split str)))))))) + +(define (mb . INSTS) + #'(#%module-begin + (define insts (list . INSTS)) + (define regs (make-hash '((a . 0)(b . 0)(c . 0)(d . 0)))) + (let loop ([ptr 0]) + (define inst (list-ref insts ptr)) + (inst regs)))) +(provide (rename-out [mb #%module-begin])) + +(define-macro-cases handle + [(_ cpy X Y) #'(λ(regs) 42)]) +(provide handle) + \ No newline at end of file diff --git a/2016/day12/test.rkt b/2016/day12/test.rkt new file mode 100644 index 0000000..de3dce0 --- /dev/null +++ b/2016/day12/test.rkt @@ -0,0 +1,7 @@ +#lang reader "lang.rkt" +cpy 41 a +inc a +inc a +dec a +jnz a 2 +dec a \ No newline at end of file -- 2.25.1 From 2139fc459d16df119262afc7928fdd78c1d5f725 Mon Sep 17 00:00:00 2001 From: Matthew Butterick Date: Mon, 12 Dec 2016 21:23:15 -0800 Subject: [PATCH 22/43] finish day12 --- 2016/day12/lang.rkt | 44 ++++++++++++++++++++++++++++++-------------- 1 file changed, 30 insertions(+), 14 deletions(-) diff --git a/2016/day12/lang.rkt b/2016/day12/lang.rkt index a00f7fd..39950e4 100644 --- a/2016/day12/lang.rkt +++ b/2016/day12/lang.rkt @@ -1,25 +1,41 @@ #lang br/quicklang ;; http://adventofcode.com/2016/day/12 - -(provide read-syntax) +(provide read-syntax + (rename-out [mb #%module-begin]) + cpy inc dec jnz) (define (read-syntax path port) (strip-bindings #`(module mod "lang.rkt" #,@(for/list ([str (in-lines port)] - #:when (not (equal? str ""))) - (format-datum `(handle ,@(map string->symbol (string-split str)))))))) + #:when (not (zero? (string-length str)))) + (format-datum '(~a) str))))) -(define (mb . INSTS) +(define-macro (mb . INSTS) #'(#%module-begin - (define insts (list . INSTS)) + (define insts (vector . INSTS)) (define regs (make-hash '((a . 0)(b . 0)(c . 0)(d . 0)))) - (let loop ([ptr 0]) - (define inst (list-ref insts ptr)) - (inst regs)))) -(provide (rename-out [mb #%module-begin])) + (println (solve insts regs)) + (hash-set! regs 'c 1) + (println (solve insts regs)))) + +(define (solve insts regs) + (let loop ([ptr 0]) + (if (>= ptr (vector-length insts)) + regs + (loop (+ ptr (let ([move ((vector-ref insts ptr) regs)]) + (if (void? move) 1 move))))))) + +(define-macro (cpy X Y) + #'(λ(regs) + (define val (if (number? 'X) 'X (hash-ref regs 'X))) + (hash-set! regs 'Y val))) + +(define-macro (inc X) #'(λ(regs) (hash-update! regs 'X add1))) + +(define-macro (dec X) #'(λ(regs) (hash-update! regs 'X sub1))) -(define-macro-cases handle - [(_ cpy X Y) #'(λ(regs) 42)]) -(provide handle) - \ No newline at end of file +(define-macro (jnz X Y) + #'(λ(regs) + (when (not (zero? (if (number? 'X) 'X (hash-ref regs 'X)))) + Y))) -- 2.25.1 From e39fa816879382324e7fa480ab73056870b5a90d Mon Sep 17 00:00:00 2001 From: Matthew Butterick Date: Mon, 12 Dec 2016 23:37:06 -0800 Subject: [PATCH 23/43] day13 --- 2016/day13/input.rkt | 2 ++ 2016/day13/lang.rkt | 64 ++++++++++++++++++++++++++++++++++++++++++++ 2016/day13/test.rkt | 2 ++ 3 files changed, 68 insertions(+) create mode 100644 2016/day13/input.rkt create mode 100644 2016/day13/lang.rkt create mode 100644 2016/day13/test.rkt diff --git a/2016/day13/input.rkt b/2016/day13/input.rkt new file mode 100644 index 0000000..af31bdb --- /dev/null +++ b/2016/day13/input.rkt @@ -0,0 +1,2 @@ +#lang reader "lang.rkt" +1358 \ No newline at end of file diff --git a/2016/day13/lang.rkt b/2016/day13/lang.rkt new file mode 100644 index 0000000..4f5fe98 --- /dev/null +++ b/2016/day13/lang.rkt @@ -0,0 +1,64 @@ +#lang br/quicklang +;; http://adventofcode.com/2016/day/13 +(require graph) +(provide read-syntax + (rename-out [mb #%module-begin])) + +(define (read-syntax path port) + (strip-bindings + #`(module mod "lang.rkt" + #,(string->number (string-trim (port->string port)))))) + +(define-macro (mb NUM) + #'(#%module-begin + (solve 50 NUM) + (solve2 NUM))) + +(define (solve dim num) + (define open? (make-open-pred num)) + (define g (undirected-graph '((0 0)))) + (for* ([x (in-range dim)] + [y (in-range dim)] + #:when (open? (list y x))) + (when (open? (list (add1 y) x)) + (add-edge! g (list y x) (list (add1 y) x))) + (when (open? (list y (add1 x))) + (add-edge! g (list y x) (list y (add1 x))))) + (define path (fewest-vertices-path g '(1 1) '(31 39))) + (displayln (and path (sub1 (length path))))) + +(define (solve2 num) + (define open? (make-open-pred num)) + (define (nonnegative? pt) (and (not (negative? (car pt))) + (not (negative? (cadr pt))) + pt)) + (let loop ([all-visited-pts empty] + [last-visited-pts '((1 1))] + [step 0]) + (cond + [(= step 50) + (length (remove-duplicates (append all-visited-pts last-visited-pts)))] + [else + (loop (append last-visited-pts all-visited-pts) + (append* + (for/list ([lvp (in-list last-visited-pts)]) + (match-define (list x y) lvp) + (for/list ([pt (in-list (list (list (add1 x) y) + (list x (add1 y)) + (list (sub1 x) y) + (list x (sub1 y))))] + #:when (and (nonnegative? pt) + (open? pt) + (not (member pt all-visited-pts)))) + pt))) + (add1 step))]))) + +(define (make-open-pred num) + (λ(pt) + (match-define (list x y) pt) + (define sum + (+ (* x x) (* 3 x) (* 2 x y) y (* y y) num)) + (even? + (for/sum ([c (in-string (format "~b" sum))] + #:when (char=? #\1 c)) + 1)))) \ No newline at end of file diff --git a/2016/day13/test.rkt b/2016/day13/test.rkt new file mode 100644 index 0000000..8250704 --- /dev/null +++ b/2016/day13/test.rkt @@ -0,0 +1,2 @@ +#lang reader "lang.rkt" +10 \ No newline at end of file -- 2.25.1 From 1d1c9d323bfa8482f9ed4ac9da5aff876ab61a8c Mon Sep 17 00:00:00 2001 From: Matthew Butterick Date: Mon, 12 Dec 2016 23:44:40 -0800 Subject: [PATCH 24/43] edits --- 2016/day13/lang.rkt | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/2016/day13/lang.rkt b/2016/day13/lang.rkt index 4f5fe98..238291a 100644 --- a/2016/day13/lang.rkt +++ b/2016/day13/lang.rkt @@ -17,23 +17,23 @@ (define (solve dim num) (define open? (make-open-pred num)) (define g (undirected-graph '((0 0)))) - (for* ([x (in-range dim)] - [y (in-range dim)] - #:when (open? (list y x))) - (when (open? (list (add1 y) x)) - (add-edge! g (list y x) (list (add1 y) x))) - (when (open? (list y (add1 x))) - (add-edge! g (list y x) (list y (add1 x))))) - (define path (fewest-vertices-path g '(1 1) '(31 39))) + (for* ([y (in-range dim)] + [x (in-range dim)] + #:when (open? (cons x y))) + (when (open? (cons (add1 x) y)) + (add-edge! g (cons x y) (cons (add1 x) y))) + (when (open? (cons x (add1 y))) + (add-edge! g (cons x y) (cons x (add1 y))))) + (define path (fewest-vertices-path g '(1 . 1) '(31 . 39))) (displayln (and path (sub1 (length path))))) (define (solve2 num) (define open? (make-open-pred num)) (define (nonnegative? pt) (and (not (negative? (car pt))) - (not (negative? (cadr pt))) + (not (negative? (cdr pt))) pt)) (let loop ([all-visited-pts empty] - [last-visited-pts '((1 1))] + [last-visited-pts '((1 . 1))] [step 0]) (cond [(= step 50) @@ -42,11 +42,11 @@ (loop (append last-visited-pts all-visited-pts) (append* (for/list ([lvp (in-list last-visited-pts)]) - (match-define (list x y) lvp) - (for/list ([pt (in-list (list (list (add1 x) y) - (list x (add1 y)) - (list (sub1 x) y) - (list x (sub1 y))))] + (match-define (cons x y) lvp) + (for/list ([pt (in-list (list (cons (add1 x) y) + (cons x (add1 y)) + (cons (sub1 x) y) + (cons x (sub1 y))))] #:when (and (nonnegative? pt) (open? pt) (not (member pt all-visited-pts)))) @@ -55,7 +55,7 @@ (define (make-open-pred num) (λ(pt) - (match-define (list x y) pt) + (match-define (cons x y) pt) (define sum (+ (* x x) (* 3 x) (* 2 x y) y (* y y) num)) (even? -- 2.25.1 From 7d08926344753b4d09d26a27cce883d2a75de48e Mon Sep 17 00:00:00 2001 From: Matthew Butterick Date: Tue, 13 Dec 2016 09:33:19 -0800 Subject: [PATCH 25/43] use complex numbers --- 2016/day13/lang.rkt | 70 +++++++++++++++++++++------------------------ 1 file changed, 32 insertions(+), 38 deletions(-) diff --git a/2016/day13/lang.rkt b/2016/day13/lang.rkt index 238291a..3d3b420 100644 --- a/2016/day13/lang.rkt +++ b/2016/day13/lang.rkt @@ -11,54 +11,48 @@ (define-macro (mb NUM) #'(#%module-begin - (solve 50 NUM) + (solve 50 NUM) ; 50 is arbitrarily large space to search (solve2 NUM))) +(define starting-pt 1+1i) + (define (solve dim num) (define open? (make-open-pred num)) - (define g (undirected-graph '((0 0)))) - (for* ([y (in-range dim)] - [x (in-range dim)] - #:when (open? (cons x y))) - (when (open? (cons (add1 x) y)) - (add-edge! g (cons x y) (cons (add1 x) y))) - (when (open? (cons x (add1 y))) - (add-edge! g (cons x y) (cons x (add1 y))))) - (define path (fewest-vertices-path g '(1 . 1) '(31 . 39))) + (define g (undirected-graph (list starting-pt))) + (for* ([row (in-range dim)] + [col (in-range dim)] + [p (in-value (+ col (* +i row)))] + #:when (open? p)) + (when (open? (+ p 1)) (add-edge! g p (+ p 1))) + (when (open? (+ p +i)) (add-edge! g p (+ p +i)))) + (define path (fewest-vertices-path g 1+1i 31+39i)) (displayln (and path (sub1 (length path))))) (define (solve2 num) (define open? (make-open-pred num)) - (define (nonnegative? pt) (and (not (negative? (car pt))) - (not (negative? (cdr pt))) + (define (nonnegative? pt) (and (not (negative? (real-part pt))) + (not (negative? (imag-part pt))) pt)) - (let loop ([all-visited-pts empty] - [last-visited-pts '((1 . 1))] - [step 0]) - (cond - [(= step 50) - (length (remove-duplicates (append all-visited-pts last-visited-pts)))] - [else - (loop (append last-visited-pts all-visited-pts) - (append* - (for/list ([lvp (in-list last-visited-pts)]) - (match-define (cons x y) lvp) - (for/list ([pt (in-list (list (cons (add1 x) y) - (cons x (add1 y)) - (cons (sub1 x) y) - (cons x (sub1 y))))] - #:when (and (nonnegative? pt) - (open? pt) - (not (member pt all-visited-pts)))) - pt))) - (add1 step))]))) + (let take-step ([all-visited-pts empty] + [last-visited-pts (list starting-pt)] + [count 0]) + (if (= count 50) + (length (remove-duplicates (append all-visited-pts last-visited-pts))) + (take-step + (append last-visited-pts all-visited-pts) + (flatten + (for*/list ([p (in-list last-visited-pts)] + [next-p (in-list (map (curry + p) '(1 -1 +i -i)))] + #:when (and (nonnegative? next-p) + (open? next-p) + (not (member next-p all-visited-pts)))) + next-p)) + (add1 count))))) (define (make-open-pred num) (λ(pt) - (match-define (cons x y) pt) + (define col (real-part pt)) + (define row (imag-part pt)) (define sum - (+ (* x x) (* 3 x) (* 2 x y) y (* y y) num)) - (even? - (for/sum ([c (in-string (format "~b" sum))] - #:when (char=? #\1 c)) - 1)))) \ No newline at end of file + (+ (* col col) (* 3 col) (* 2 col row) row (* row row) num)) + (even? (length (regexp-match* "1" (format "~b" sum)))))) \ No newline at end of file -- 2.25.1 From 785ca6d6c0c5ea03dcc251bdc4528d6e7bc6a866 Mon Sep 17 00:00:00 2001 From: Matthew Butterick Date: Tue, 13 Dec 2016 22:00:27 -0800 Subject: [PATCH 26/43] reorg --- 2016/{day01.rkt => day01/lang.rkt} | 4 ++-- 2016/{day01-test.rkt => day01/test.rkt} | 2 +- 2016/{day02b.rkt => day02/lang-b.rkt} | 4 ++-- 2016/{day02.rkt => day02/lang.rkt} | 4 ++-- 2016/{day02-test.rkt => day02/test-b.rkt} | 2 +- 2016/{day02b-test.rkt => day02/test.rkt} | 2 +- 2016/{day03b.rkt => day03/lang-b.rkt} | 4 ++-- 2016/{day03.rkt => day03/lang.rkt} | 4 ++-- 2016/{day03-test.rkt => day03/test-b.rkt} | 2 +- 2016/{day03b-test.rkt => day03/test.rkt} | 2 +- 2016/{day04-input.rkt => day04/input.rkt} | 2 +- 2016/{day04.rkt => day04/lang.rkt} | 4 ++-- 2016/{day04-test.rkt => day04/test.rkt} | 2 +- 2016/day05-input.rkt | 2 -- 2016/day05/input.rkt | 2 ++ 2016/{day05.rkt => day05/lang.rkt} | 5 ++--- 2016/{day06-input.rkt => day06/input.rkt} | 2 +- 2016/{day06.rkt => day06/lang.rkt} | 4 ++-- 2016/{day06-test.rkt => day06/test.rkt} | 2 +- 2016/day07-test.rkt | 5 ----- 2016/{day07-input.rkt => day07/input.rkt} | 2 +- 2016/{day07.rkt => day07/lang.rkt} | 4 ++-- 2016/day07/test.rkt | 5 +++++ 2016/{day08-input.rkt => day08/input.rkt} | 2 +- 2016/{day08.rkt => day08/lang.rkt} | 5 ++--- 2016/{day08-test.rkt => day08/test.rkt} | 2 +- 2016/day09-test.rkt | 2 -- 2016/{day09-input.rkt => day09/input.rkt} | 2 +- 2016/{day09.rkt => day09/lang.rkt} | 5 ++--- 2016/day09/test.rkt | 2 ++ 2016/day14/input.rkt | 2 ++ 2016/day14/lang.rkt | 15 +++++++++++++++ 2016/day14/test.rkt | 2 ++ 33 files changed, 63 insertions(+), 47 deletions(-) rename 2016/{day01.rkt => day01/lang.rkt} (95%) rename 2016/{day01-test.rkt => day01/test.rkt} (95%) rename 2016/{day02b.rkt => day02/lang-b.rkt} (92%) rename 2016/{day02.rkt => day02/lang.rkt} (92%) rename 2016/{day02-test.rkt => day02/test-b.rkt} (98%) rename 2016/{day02b-test.rkt => day02/test.rkt} (98%) rename 2016/{day03b.rkt => day03/lang-b.rkt} (89%) rename 2016/{day03.rkt => day03/lang.rkt} (86%) rename 2016/{day03-test.rkt => day03/test-b.rkt} (99%) rename 2016/{day03b-test.rkt => day03/test.rkt} (99%) rename 2016/{day04-input.rkt => day04/input.rkt} (99%) rename 2016/{day04.rkt => day04/lang.rkt} (95%) rename 2016/{day04-test.rkt => day04/test.rkt} (59%) delete mode 100644 2016/day05-input.rkt create mode 100644 2016/day05/input.rkt rename 2016/{day05.rkt => day05/lang.rkt} (96%) rename 2016/{day06-input.rkt => day06/input.rkt} (99%) rename 2016/{day06.rkt => day06/lang.rkt} (87%) rename 2016/{day06-test.rkt => day06/test.rkt} (75%) delete mode 100644 2016/day07-test.rkt rename 2016/{day07-input.rkt => day07/input.rkt} (99%) rename 2016/{day07.rkt => day07/lang.rkt} (96%) create mode 100644 2016/day07/test.rkt rename 2016/{day08-input.rkt => day08/input.rkt} (98%) rename 2016/{day08.rkt => day08/lang.rkt} (94%) rename 2016/{day08-test.rkt => day08/test.rkt} (50%) delete mode 100644 2016/day09-test.rkt rename 2016/{day09-input.rkt => day09/input.rkt} (99%) rename 2016/{day09.rkt => day09/lang.rkt} (96%) create mode 100644 2016/day09/test.rkt create mode 100644 2016/day14/input.rkt create mode 100644 2016/day14/lang.rkt create mode 100644 2016/day14/test.rkt diff --git a/2016/day01.rkt b/2016/day01/lang.rkt similarity index 95% rename from 2016/day01.rkt rename to 2016/day01/lang.rkt index eae2db9..e3cab26 100644 --- a/2016/day01.rkt +++ b/2016/day01/lang.rkt @@ -8,9 +8,9 @@ (define match-result (regexp-match turn-pattern (string-trim tstr))) `(turn ,@(cdr (or match-result empty))))) (strip-bindings - #`(module day01-mod "day01.rkt" + #`(module day01-mod "lang.rkt" #,@turn-datums))) -(module+ reader (provide read-syntax)) +(provide read-syntax) (define-macro (mb . TURNS) #'(#%module-begin diff --git a/2016/day01-test.rkt b/2016/day01/test.rkt similarity index 95% rename from 2016/day01-test.rkt rename to 2016/day01/test.rkt index 54424d9..92d8ae3 100644 --- a/2016/day01-test.rkt +++ b/2016/day01/test.rkt @@ -1,2 +1,2 @@ -#lang aoc-racket/2016/day01 +#lang reader "lang.rkt" R4, R5, L5, L5, L3, R2, R1, R1, L5, R5, R2, L1, L3, L4, R3, L1, L1, R2, R3, R3, R1, L3, L5, R3, R1, L1, R1, R2, L1, L4, L5, R4, R2, L192, R5, L2, R53, R1, L5, R73, R5, L5, R186, L3, L2, R1, R3, L3, L3, R1, L4, L2, R3, L5, R4, R3, R1, L1, R5, R2, R1, R1, R1, R3, R2, L1, R5, R1, L5, R2, L2, L4, R3, L1, R4, L5, R4, R3, L5, L3, R4, R2, L5, L5, R2, R3, R5, R4, R2, R1, L1, L5, L2, L3, L4, L5, L4, L5, L1, R3, R4, R5, R3, L5, L4, L3, L1, L4, R2, R5, R5, R4, L2, L4, R3, R1, L2, R5, L5, R1, R1, L1, L5, L5, L2, L1, R5, R2, L4, L1, R4, R3, L3, R1, R5, L1, L4, R2, L3, R5, R3, R1, L3 \ No newline at end of file diff --git a/2016/day02b.rkt b/2016/day02/lang-b.rkt similarity index 92% rename from 2016/day02b.rkt rename to 2016/day02/lang-b.rkt index e164540..7fe5a31 100644 --- a/2016/day02b.rkt +++ b/2016/day02/lang-b.rkt @@ -6,9 +6,9 @@ (for*/list ([msstr (in-list moveset-strs)]) `(moveset ,@(regexp-match* #rx"." msstr)))) (strip-bindings - #`(module day01-mod "day02b.rkt" + #`(module day01-mod "lang-b.rkt" #,@moveset-datums))) -(module+ reader (provide read-syntax)) +(provide read-syntax) (define-macro moveset #'list) (provide moveset) diff --git a/2016/day02.rkt b/2016/day02/lang.rkt similarity index 92% rename from 2016/day02.rkt rename to 2016/day02/lang.rkt index 0fb2bcf..d740b0b 100644 --- a/2016/day02.rkt +++ b/2016/day02/lang.rkt @@ -6,9 +6,9 @@ (for*/list ([msstr (in-list moveset-strs)]) `(moveset ,@(regexp-match* #rx"." msstr)))) (strip-bindings - #`(module day01-mod "day02.rkt" + #`(module day01-mod "lang.rkt" #,@moveset-datums))) -(module+ reader (provide read-syntax)) +(provide read-syntax) (define-macro moveset #'list) (provide moveset) diff --git a/2016/day02-test.rkt b/2016/day02/test-b.rkt similarity index 98% rename from 2016/day02-test.rkt rename to 2016/day02/test-b.rkt index 6e1257c..4886c4f 100644 --- a/2016/day02-test.rkt +++ b/2016/day02/test-b.rkt @@ -1,4 +1,4 @@ -#lang aoc-racket/2016/day02 +#lang reader "lang-b.rkt" DLRRRRLRLDRRRURRURULRLLULUURRRDDLDULDULLUUDLURLURLLDLUUUDUUUULDRDUUDUDDRRLRDDDUDLDLLRUURDRULUULRLRDULULLRLRLRLDRLUULDLDDDDRRLRUUUDDRURRULLLRURLUURULLRLUDDLDRUULDRURULRRRLLLRDLULDRRDDUDLURURLDULDRDRLDDUURRDUDDRDUURDULDUURDUDRDRULDUDUULRRULUUURDUURUDLDURDLRLURUUDRRDLRUDRULRURLDLLDLLRRDRDRLRRRULDRRLDUURLUUDLUUDDLLRULRDUUDURURLUURDRRRUDLRDULRRRLDRDULRUUDDDLRDUULDRLLDRULUULULRDRUUUULULLRLLLRUURUULRRLDDDRULRRRUDURUR RULRUUUDLLUDURDRDDLLRLLUDRUDDRLRRDLDLDRDULDLULURDLUDDDUULURLDRUUURURLLRRDDDUUDRLRLLDLDRDDDRDUDLRDRDLLLDDLDUDDRUDUUDLLLLLDULRLURRRLLURUUULUDRLRLRLURRDRLLLRLLULRLLLDDLRLRDLUUUUUDULULDDULLUDUURDLRUDLRUDLRLLRLDLULRLDUDRURURDLRULDLULULDLLDLDLDLLLUDUDDLRLRRDULLUDRDDLLLDUURDULUDURLLLDRUDDDLRLULDLDRRDDDRDULDDUDRDDULLULRRLRUULRDUDURUDULUDUDURLDRDUUDDRRLRURDRRLRDDDDRUDLUDLDDLRDLUUDLRRURDDLURDLRDLLRDRDLDLDUUUURULUULDDDDLDULUURRRULUDLLLDRULDRURL RRRLRDLLDUURDRRRLURDUULUDURDRRUUDURURRLDLLDRDLRRURDDUDDURLRUUDDULULRUUDRLUUDDLLDDDLRRRDLLLLLLRRURDULDLURRURRDDLDDDUDURRDURRRLUDRRULLRULDRLULRULDDRLLRDLRDUURULURLUURLRRULDULULUULDUDLRLDRDDRRRUUULULDUURLRLLURRLURDUUDDDRUULDLLLDRUURLRRLLDDUDRDLDDDULDRDDDUDRRLLLULURDUDLLUUURRLDULURURDDLUDLLRLDRULULURDLDRLURDLRRDRRUULLULDLURRDDUDRDDDLDUDLDRRUDRULDLDULRLLRRRRDDRLUURRRRDDLLRUURRLRURULDDULRLULRURRUULDUUDURDRRLRLUDRULDRUULUUDRDURDURRLULDDDULDDLRDURRUUUUUDDRRDLRDULUUDDL diff --git a/2016/day02b-test.rkt b/2016/day02/test.rkt similarity index 98% rename from 2016/day02b-test.rkt rename to 2016/day02/test.rkt index 3532f20..0da3503 100644 --- a/2016/day02b-test.rkt +++ b/2016/day02/test.rkt @@ -1,4 +1,4 @@ -#lang aoc-racket/2016/day02b +#lang reader "lang.rkt" DLRRRRLRLDRRRURRURULRLLULUURRRDDLDULDULLUUDLURLURLLDLUUUDUUUULDRDUUDUDDRRLRDDDUDLDLLRUURDRULUULRLRDULULLRLRLRLDRLUULDLDDDDRRLRUUUDDRURRULLLRURLUURULLRLUDDLDRUULDRURULRRRLLLRDLULDRRDDUDLURURLDULDRDRLDDUURRDUDDRDUURDULDUURDUDRDRULDUDUULRRULUUURDUURUDLDURDLRLURUUDRRDLRUDRULRURLDLLDLLRRDRDRLRRRULDRRLDUURLUUDLUUDDLLRULRDUUDURURLUURDRRRUDLRDULRRRLDRDULRUUDDDLRDUULDRLLDRULUULULRDRUUUULULLRLLLRUURUULRRLDDDRULRRRUDURUR RULRUUUDLLUDURDRDDLLRLLUDRUDDRLRRDLDLDRDULDLULURDLUDDDUULURLDRUUURURLLRRDDDUUDRLRLLDLDRDDDRDUDLRDRDLLLDDLDUDDRUDUUDLLLLLDULRLURRRLLURUUULUDRLRLRLURRDRLLLRLLULRLLLDDLRLRDLUUUUUDULULDDULLUDUURDLRUDLRUDLRLLRLDLULRLDUDRURURDLRULDLULULDLLDLDLDLLLUDUDDLRLRRDULLUDRDDLLLDUURDULUDURLLLDRUDDDLRLULDLDRRDDDRDULDDUDRDDULLULRRLRUULRDUDURUDULUDUDURLDRDUUDDRRLRURDRRLRDDDDRUDLUDLDDLRDLUUDLRRURDDLURDLRDLLRDRDLDLDUUUURULUULDDDDLDULUURRRULUDLLLDRULDRURL RRRLRDLLDUURDRRRLURDUULUDURDRRUUDURURRLDLLDRDLRRURDDUDDURLRUUDDULULRUUDRLUUDDLLDDDLRRRDLLLLLLRRURDULDLURRURRDDLDDDUDURRDURRRLUDRRULLRULDRLULRULDDRLLRDLRDUURULURLUURLRRULDULULUULDUDLRLDRDDRRRUUULULDUURLRLLURRLURDUUDDDRUULDLLLDRUURLRRLLDDUDRDLDDDULDRDDDUDRRLLLULURDUDLLUUURRLDULURURDDLUDLLRLDRULULURDLDRLURDLRRDRRUULLULDLURRDDUDRDDDLDUDLDRRUDRULDLDULRLLRRRRDDRLUURRRRDDLLRUURRLRURULDDULRLULRURRUULDUUDURDRRLRLUDRULDRUULUUDRDURDURRLULDDDULDDLRDURRUUUUUDDRRDLRDULUUDDL diff --git a/2016/day03b.rkt b/2016/day03/lang-b.rkt similarity index 89% rename from 2016/day03b.rkt rename to 2016/day03/lang-b.rkt index fff651c..d8d4f7e 100644 --- a/2016/day03b.rkt +++ b/2016/day03/lang-b.rkt @@ -7,10 +7,10 @@ (slice-at (flatten (for/list ([triad (in-list triads)]) (apply map list triad))) 3)) (strip-bindings - #`(module mod "day03b.rkt" + #`(module mod "lang-b.rkt" #,@(for*/list ([triple (in-list new-triples)]) `(triangle ,@triple))))) -(module+ reader (provide read-syntax)) +(provide read-syntax) (define-macro (mb . TRIANGLES) #'(#%module-begin diff --git a/2016/day03.rkt b/2016/day03/lang.rkt similarity index 86% rename from 2016/day03.rkt rename to 2016/day03/lang.rkt index 9a6362f..18a5e39 100644 --- a/2016/day03.rkt +++ b/2016/day03/lang.rkt @@ -2,10 +2,10 @@ (define (read-syntax path port) (strip-bindings - #`(module mod "day03.rkt" + #`(module mod "lang.rkt" #,@(for*/list ([triangle-str (in-list (string-split (port->string port) "\n"))]) `(triangle ,@(string-split triangle-str)))))) -(module+ reader (provide read-syntax)) +(provide read-syntax) (define-macro (mb . TRIANGLES) #'(#%module-begin diff --git a/2016/day03-test.rkt b/2016/day03/test-b.rkt similarity index 99% rename from 2016/day03-test.rkt rename to 2016/day03/test-b.rkt index 3409019..2ec3fc1 100644 --- a/2016/day03-test.rkt +++ b/2016/day03/test-b.rkt @@ -1,4 +1,4 @@ -#lang aoc-racket/2016/day03 +#lang reader "lang-b.rkt" 4 21 894 419 794 987 424 797 125 diff --git a/2016/day03b-test.rkt b/2016/day03/test.rkt similarity index 99% rename from 2016/day03b-test.rkt rename to 2016/day03/test.rkt index c9d9eb2..9e8d793 100644 --- a/2016/day03b-test.rkt +++ b/2016/day03/test.rkt @@ -1,4 +1,4 @@ -#lang aoc-racket/2016/day03b +#lang reader "lang.rkt" 4 21 894 419 794 987 424 797 125 diff --git a/2016/day04-input.rkt b/2016/day04/input.rkt similarity index 99% rename from 2016/day04-input.rkt rename to 2016/day04/input.rkt index 4430ec2..71697e3 100644 --- a/2016/day04-input.rkt +++ b/2016/day04/input.rkt @@ -1,4 +1,4 @@ -#lang aoc-racket/2016/day04 +#lang reader "lang.rkt" bkwzkqsxq-tovvilokx-nozvyiwoxd-172[fstek] wifilzof-wbiwifuny-yhachyylcha-526[qrazx] jvyyvzpcl-jhukf-shivyhavyf-487[zhtsi] diff --git a/2016/day04.rkt b/2016/day04/lang.rkt similarity index 95% rename from 2016/day04.rkt rename to 2016/day04/lang.rkt index 16b4dd7..4bf1903 100644 --- a/2016/day04.rkt +++ b/2016/day04/lang.rkt @@ -2,11 +2,11 @@ (define (read-syntax path port) (strip-bindings - #`(module mod "day04.rkt" + #`(module mod "lang.rkt" #,@(for*/list ([room-str (in-lines port)] #:when (not (equal? "" room-str))) `(room ,@(cdr (regexp-match #px"^(.*)-(\\d+)\\[(\\w+)\\]$" room-str))))))) -(module+ reader (provide read-syntax)) +(provide read-syntax) #| Each room consists of an encrypted name (lowercase letters separated by dashes) diff --git a/2016/day04-test.rkt b/2016/day04/test.rkt similarity index 59% rename from 2016/day04-test.rkt rename to 2016/day04/test.rkt index 1321632..bd0328a 100644 --- a/2016/day04-test.rkt +++ b/2016/day04/test.rkt @@ -1,4 +1,4 @@ -#lang aoc-racket/2016/day04 +#lang reader "lang.rkt" aaaaa-bbb-z-y-x-123[abxyz] a-b-c-d-e-f-g-h-987[abcde] not-a-real-room-404[oarel] diff --git a/2016/day05-input.rkt b/2016/day05-input.rkt deleted file mode 100644 index c888270..0000000 --- a/2016/day05-input.rkt +++ /dev/null @@ -1,2 +0,0 @@ -#lang aoc-racket/2016/day05 -ojvtpuvg \ No newline at end of file diff --git a/2016/day05/input.rkt b/2016/day05/input.rkt new file mode 100644 index 0000000..8a5a6bc --- /dev/null +++ b/2016/day05/input.rkt @@ -0,0 +1,2 @@ +#lang reader "lang.rkt" +ojvtpuvg \ No newline at end of file diff --git a/2016/day05.rkt b/2016/day05/lang.rkt similarity index 96% rename from 2016/day05.rkt rename to 2016/day05/lang.rkt index b25d605..3eb14a5 100644 --- a/2016/day05.rkt +++ b/2016/day05/lang.rkt @@ -1,11 +1,10 @@ #lang br/quicklang (require openssl/md5) - +(provide read-syntax) (define (read-syntax path port) (strip-bindings - #`(module mod "day05.rkt" + #`(module mod "lang.rkt" (solve #,(string-trim (port->string port)))))) -(module+ reader (provide read-syntax)) (provide #%module-begin) diff --git a/2016/day06-input.rkt b/2016/day06/input.rkt similarity index 99% rename from 2016/day06-input.rkt rename to 2016/day06/input.rkt index 1d5bc41..1e8f500 100644 --- a/2016/day06-input.rkt +++ b/2016/day06/input.rkt @@ -1,4 +1,4 @@ -#lang aoc-racket/2016/day06 +#lang reader "lang.rkt" focdealm ggsipflx rvibwxbm diff --git a/2016/day06.rkt b/2016/day06/lang.rkt similarity index 87% rename from 2016/day06.rkt rename to 2016/day06/lang.rkt index bfdf664..082571f 100644 --- a/2016/day06.rkt +++ b/2016/day06/lang.rkt @@ -1,8 +1,8 @@ #lang br/quicklang - +(provide read-syntax) (define (read-syntax path port) (strip-bindings - #`(module mod "day06.rkt" + #`(module mod "lang.rkt" (solve #,@(string-split (port->string port)))))) (module+ reader (provide read-syntax)) diff --git a/2016/day06-test.rkt b/2016/day06/test.rkt similarity index 75% rename from 2016/day06-test.rkt rename to 2016/day06/test.rkt index a9b9bb3..a15a7e9 100644 --- a/2016/day06-test.rkt +++ b/2016/day06/test.rkt @@ -1,4 +1,4 @@ -#lang aoc-racket/2016/day06 +#lang reader "lang.rkt" eedadn drvtee eandsr diff --git a/2016/day07-test.rkt b/2016/day07-test.rkt deleted file mode 100644 index dfa2b70..0000000 --- a/2016/day07-test.rkt +++ /dev/null @@ -1,5 +0,0 @@ -#lang aoc-racket/2016/day07 -abba[mnop]qrst -abcd[bddb]xyyx -aaaa[qwer]tyui -ioxxoj[asdfgh]zxcvbn \ No newline at end of file diff --git a/2016/day07-input.rkt b/2016/day07/input.rkt similarity index 99% rename from 2016/day07-input.rkt rename to 2016/day07/input.rkt index 641a03a..c0aeb24 100644 --- a/2016/day07-input.rkt +++ b/2016/day07/input.rkt @@ -1,4 +1,4 @@ -#lang aoc-racket/2016/day07 +#lang reader "lang.rkt" dnwtsgywerfamfv[gwrhdujbiowtcirq]bjbhmuxdcasenlctwgh rnqfzoisbqxbdlkgfh[lwlybvcsiupwnsyiljz]kmbgyaptjcsvwcltrdx[ntrpwgkrfeljpye]jxjdlgtntpljxaojufe jgltdnjfjsbrffzwbv[nclpjchuobdjfrpavcq]sbzanvbimpahadkk[yyoasqmddrzunoyyk]knfdltzlirrbypa diff --git a/2016/day07.rkt b/2016/day07/lang.rkt similarity index 96% rename from 2016/day07.rkt rename to 2016/day07/lang.rkt index 0448975..0a61684 100644 --- a/2016/day07.rkt +++ b/2016/day07/lang.rkt @@ -1,9 +1,9 @@ #lang br/quicklang -(module+ reader (provide read-syntax)) +(provide read-syntax) (define (read-syntax path port) (strip-bindings - #`(module mod "day07.rkt" + #`(module mod "lang.rkt" #,@(for/list ([ip (in-lines port)] #:when (not (equal? ip ""))) ip)))) diff --git a/2016/day07/test.rkt b/2016/day07/test.rkt new file mode 100644 index 0000000..0ec0215 --- /dev/null +++ b/2016/day07/test.rkt @@ -0,0 +1,5 @@ +#lang reader "lang.rkt" +abba[mnop]qrst +abcd[bddb]xyyx +aaaa[qwer]tyui +ioxxoj[asdfgh]zxcvbn \ No newline at end of file diff --git a/2016/day08-input.rkt b/2016/day08/input.rkt similarity index 98% rename from 2016/day08-input.rkt rename to 2016/day08/input.rkt index 909cc6f..1a5711d 100644 --- a/2016/day08-input.rkt +++ b/2016/day08/input.rkt @@ -1,4 +1,4 @@ -#lang aoc-racket/2016/day08 +#lang reader "lang.rkt" rect 1x1 rotate row y=0 by 20 rect 1x1 diff --git a/2016/day08.rkt b/2016/day08/lang.rkt similarity index 94% rename from 2016/day08.rkt rename to 2016/day08/lang.rkt index 1239b1d..583530c 100644 --- a/2016/day08.rkt +++ b/2016/day08/lang.rkt @@ -1,9 +1,8 @@ #lang br/quicklang - -(module+ reader (provide read-syntax)) +(provide read-syntax) (define (read-syntax path port) (strip-bindings - #`(module mod "day08.rkt" + #`(module mod "lang.rkt" #,@(for/list ([inst (in-lines port)] #:when (not (equal? inst ""))) (format-datum '(~a) inst))))) diff --git a/2016/day08-test.rkt b/2016/day08/test.rkt similarity index 50% rename from 2016/day08-test.rkt rename to 2016/day08/test.rkt index d9078c2..4185a38 100644 --- a/2016/day08-test.rkt +++ b/2016/day08/test.rkt @@ -1,4 +1,4 @@ -#lang aoc-racket/2016/day08 +#lang reader "lang.rkt" rect 3x2 rotate column x=1 by 1 rotate row y=0 by 4 diff --git a/2016/day09-test.rkt b/2016/day09-test.rkt deleted file mode 100644 index 87cf955..0000000 --- a/2016/day09-test.rkt +++ /dev/null @@ -1,2 +0,0 @@ -#lang aoc-racket/2016/day09 -(27x12)(20x12)(13x14)(7x10)(1x12)A \ No newline at end of file diff --git a/2016/day09-input.rkt b/2016/day09/input.rkt similarity index 99% rename from 2016/day09-input.rkt rename to 2016/day09/input.rkt index e326ca1..abd1663 100644 --- a/2016/day09-input.rkt +++ b/2016/day09/input.rkt @@ -1,2 +1,2 @@ -#lang aoc-racket/2016/day09 +#lang reader "lang.rkt" (6x9)JUORKH(10x13)LNWIKDMACM(126x14)(21x8)QLKUJNVVZIQGGFCJZMPHK(2x1)ZH(59x3)(38x14)KELEPIDYLCGJUBCXACRSOCEZYXLOFJSADZAYXN(8x11)HORSWAQU(21x2)YEZNNYDLDSTGWMQFSMTEZ(111x14)(14x14)IMLQOUGGZSUMFQ(73x10)(5x8)KWHRS(6x1)OQMANE(6x4)FALFZJ(3x3)OAQ(26x15)LALOJKTKJWTMRDDQQVCSDHJYGF(4x12)OXMQ(63x6)(6x10)OSJMJX(9x13)(4x2)FAUQ(29x13)UDCLMPVICKKUFMPQUENGCRIUGHOKM(7x7)JNKRSAT(79x7)(11x1)(5x13)RUQIL(47x12)HDIEMWYDIMTVXSIRZSRMIMZVMCEIUOMJDGHQXPWDFLOYIWL(3x5)IHX(1x6)M(33x3)ORLXEMAAICHAIJUIPKKWPWZMVXJSCZZYG(9x11)TIMKMEBMC(9930x13)(1513x15)(779x2)(333x4)(197x8)(27x4)IVLXTLXGDDQPWQOAXDEISEOTSAW(68x4)(4x13)OOZQ(3x5)NIN(10x12)UDGXNSJXLP(17x6)FZETGJDTLNUQRLHWU(4x13)AIZY(9x10)HESLLDOPY(69x1)(5x13)LULVA(10x1)CBTQWNWMRT(3x11)UYT(4x13)APGU(17x2)ADKQUAPCVNCXGBUGI(8x7)EGCQRTUU(108x11)(30x14)(2x13)LW(16x7)OTSCBRYUGBHSLRHU(2x1)KT(58x4)(3x12)SBW(7x15)IJTOSYM(30x8)MGFBFVKJDCFQHTLVSLZSSRVALHIYUN(25x4)(19x6)(5x2)ULAFN(4x1)LZBJ(60x10)(33x1)(26x14)FXVHHVMIQZBNSJRJWVQQBTLCJT(14x15)MCNCQPHNNPDVLT(326x1)(90x6)(8x9)(2x10)QQ(7x9)(2x9)QA(15x5)(3x12)YYF(1x9)E(2x5)PN(30x10)(16x1)DNOMTDTPGQECFDZR(2x11)PO(83x9)(18x6)(6x6)WCIAVF(2x4)PG(4x10)LMEG(2x9)TM(7x8)CYTGIPV(23x13)(1x9)V(1x15)E(4x14)EFSQ(102x15)(19x4)(6x5)GOXZGT(3x2)VQM(5x12)ZPRXJ(17x1)(10x15)RJNMNYZGHQ(37x2)(11x8)BZHBHSYQFZR(7x3)ISJOGDR(3x8)HEC(25x2)(19x6)(7x7)WKDHBGA(2x1)HH(2x11)TS(297x11)(289x14)(6x13)QERECU(4x3)IKNT(13x7)(7x11)(1x13)C(242x1)(28x4)(22x3)PHZYSAKYKBEGOCKKMRKOOO(12x1)RJDMLFYCFSIP(90x1)(17x2)YMAFXOHNVIPPURYIK(7x15)UYDUWQX(33x9)AIRWLTEJXUBYKOIBBDABIUKOYZXOPEGIW(9x11)RMBVBJFRV(88x9)(8x10)UQXEIUOO(24x2)OJEVOVTOFTKJSBPOOUPDZHGM(5x14)OWMBL(8x13)DKXEFKWI(12x12)WDCXEDVGOCPY(299x2)(239x3)(172x5)(67x7)(5x8)SYGVZ(5x8)DREXA(6x1)FNDUMM(30x2)PMYQAWIEQSOAWKGTANFXJVIPIXAVXK(5x5)ANQRI(83x3)(15x12)TGXTICPXLKWBCIP(13x5)DVMOKEUOBYENI(10x14)MIBPUUQJWN(12x3)GRHQZIDWWGLK(2x7)WR(11x7)(5x15)EIKHL(36x12)(21x4)AJDVITQLAQQOJJOFFKNLS(3x11)EZR(5x2)YHNYY(6x7)YCSGKC(18x13)ZEIUSEMQHQWMZVPLNZ(2x9)NN(79x7)(73x7)(67x3)(60x10)(9x5)TGBRMOCPG(32x2)FDWNZGDQFMFCQUHYSAOQAOTEIUBCDNIW(2x12)JM(24x15)IRWDGUFXLEKCWDNZRVBNRYSS(1280x14)(193x2)(12x4)(6x10)ZHTRGA(155x7)(34x8)(27x12)(5x10)VXVVJ(4x5)PLYR(2x4)YO(10x2)XXATONMJPD(7x5)(1x15)L(72x8)(21x7)(4x13)QGHA(5x15)BYFQB(18x5)(12x9)GHLYVOFFOHII(15x4)XQRPRDSSBORQHKA(3x11)LVM(8x8)IYHEOOSI(575x5)(289x5)(15x3)WUJJUHESVBKMKWI(144x1)(27x8)(21x2)ZWKIBQKYDICTDWZJSMFMB(85x4)(2x11)YJ(9x9)NEIHAQFQS(3x13)FMR(18x7)HTTQTCRJQAOGPSGCEP(24x3)FGXUVDQTTFSBUWGYWIWIVLNH(13x12)(1x3)A(1x13)H(14x9)(9x5)(4x3)SJAA(74x13)(18x6)FKPLHFUKSNVZXJTTYB(21x3)(15x8)LDLRHRRFVCEAEZW(17x8)BUQDCTSPWOMNYXSXQ(10x5)GYOKDVURIQ(10x1)ZSXQJVASBA(244x5)(237x3)(56x1)(2x3)IH(8x5)JPNMZEJU(15x10)SOIGFVVDBCHWLUX(8x11)IMNGAHMV(36x11)(6x6)AVOERJ(1x15)I(11x15)TGRCPFFXZWN(80x2)(2x11)UD(3x4)AJO(19x12)FQOHLQVIFPAEBOCLBOD(7x13)ZLCBKLN(18x12)BOEPSWVDLNKVUFDHKV(39x15)(10x4)AYYJAXAJXB(10x10)EWKJCLSLBE(1x6)C(6x12)EMSRFU(2x8)PX(483x14)(186x8)(178x12)(6x9)VJVAVY(65x1)(1x5)F(2x6)GE(4x13)BUJP(9x14)IMEJXLWER(20x12)HUUEGUTSDWPZHFZKXVFV(59x8)(5x13)VYEFV(25x6)DWBRYFPBHUNYZJUMZXCKFIHIE(1x11)F(5x8)DLUUQ(1x2)K(19x6)PPXCSNESTBPIWHDFLGG(4x10)NHOY(273x3)(18x9)SEWPNVRXHLBCKGESND(31x1)(1x6)J(19x5)SIQBBERDYWEKHMAJEWB(58x1)(43x13)(15x13)BKGAXDZLFQHWDIS(7x7)JWIGQYE(4x9)DHHW(3x6)OHR(140x13)(28x15)(10x12)JOMQKBRMDS(5x13)PUVLJ(44x7)(4x13)DKZR(16x15)NQDHKHTUOJOXBWWY(5x13)BAOCL(34x10)(28x1)JCJWLCJRLTIFXVJQBKHWOTLJFIVI(9x4)YFQNAGIPW(2478x7)(1083x5)(417x15)(117x10)(92x11)(31x1)XHEFNUFJDMXCTUQFXSZMYHFEHXUVGYQ(7x2)ZITTPBY(9x14)SSCNHQYKS(22x5)UVJATRGWLHAIVMQAGJMHEK(4x4)IUEZ(4x5)YKGS(96x14)(12x1)ZELBJAPFUHLZ(72x4)(2x14)NP(6x8)SMHEEP(14x11)HKYNMOLKTUVIXZ(15x1)NSAGJXXSAYRTIUK(5x15)NPRBV(182x9)(76x12)(4x9)LLZF(35x11)DLKHAYYAZXRSZKTEHJNIZQERZANTBHDVFQM(13x6)XPSSVVUTYEUKX(1x2)X(33x14)(2x11)IG(11x8)FPEMVSXFOHQ(3x6)BRW(46x11)(1x3)Q(3x10)ZHT(3x7)VNL(1x7)R(10x12)GZWTUNGVDQ(1x1)Y(120x10)(14x9)PBYCGWOFRQUZWJ(83x6)(17x12)(3x4)EAM(4x6)CJOU(53x6)(13x5)INHCJBTGHXSDE(19x8)CWOKMSSFKYMDMSLRSPA(4x6)XDUP(6x4)LYNJVO(2x7)AD(509x1)(188x4)(74x10)(41x9)FUNFGSCSMVNLSJIJIBJZMBXKRACPLVGYEVJVRXTLF(1x7)O(15x5)ZIFCLBIMIFPOFVA(8x5)(2x10)SA(3x15)SYB(29x12)(2x4)LR(15x13)SUPSUGVKOEIHPAZ(43x9)(18x6)IONNEOWXXVFDIQOMQM(1x14)N(7x7)VICZLXN(253x1)(26x11)(2x15)OF(4x4)EINM(4x7)VPFW(90x2)(2x12)OS(18x15)IHDJBISYOELRBFBMRT(16x5)ZWDVZWPFHTFZRHGM(6x15)RMASVP(17x8)HHEQZPDKXKRYHABWF(64x9)(24x4)XXMFXKEZKTMCOQDOYEXVQWGY(12x14)IXJHAYHVQVBG(9x11)OEOVLDHWO(47x10)(14x6)OQYNLIFVBHCLDV(21x7)GNVWPMWHRPNVRYWBOKXXH(2x1)GE(25x9)(3x3)YHT(10x10)WGUTPDXLCO(10x4)PTGWGFREXV(2x8)CP(569x3)(119x13)(56x1)(50x5)(1x5)T(25x8)QVDBRPILAVKKPNKCWACDVQKAM(8x1)UDZHAVIS(44x10)(32x5)(8x9)WVPZVSEF(12x10)EBBNJTJBZPSH(1x5)I(1x2)M(1x10)K(27x1)(2x4)IV(14x1)(9x8)(4x4)JVUB(112x15)(99x2)(49x3)(1x14)C(1x5)D(2x14)WK(5x15)XXYUI(11x9)KLPOYCKHWFV(14x6)GVHBCOJYAOCJAH(10x3)BATKUDEPLN(3x2)SPJ(2x1)TA(275x3)(41x4)(18x5)(2x12)PT(4x15)MAUM(11x6)(5x15)RFIRF(220x15)(29x11)XWFPDWBZOCIASNAPTYSYUUVQCLCYG(5x7)LJJUN(34x4)(1x1)I(4x3)DPAN(12x12)LFHZRFTTUZLE(46x13)(6x5)FMHJMK(2x7)PZ(9x13)SATIDLMYD(7x10)RXCEUNC(75x9)(5x15)WCKRG(15x3)MYYAJYGJIBOWXOX(29x1)AABPHEDEUZZCJICBHSJZFVGLJCQMX(3x1)UNW(803x15)(441x13)(65x6)(59x2)(8x4)VCYBDQQS(15x9)MHGZPTDZETHSKLL(7x2)NMOFOIS(7x14)KUAWWUP(15x8)GNNUKIVQVUVZULA(161x1)(87x6)(4x4)BHUM(1x14)W(40x2)HZRMQLYLMDMWKBSXEAOHCJVANHFGTEAPXAALYUNE(18x14)MIGSNNUDEKHXIVPAOP(62x6)(1x13)B(12x8)SJKLEEFTVPLM(4x3)WONT(5x9)TAESF(12x5)AQTLVIYDFKZV(53x9)SWGZYFRQBSYVZRKBUETKECZABCQOBKWTLUXIIRCYXIYYCIZPWXYLJ(114x13)(65x12)(33x12)FYYFQQIQMKTPWLRATCIXJWQWZHDZEMDSX(19x9)RDXSFWGCVHIAEFRATQB(8x4)SMHSAZUP(22x14)(1x4)O(2x9)TL(3x10)JWD(325x11)(107x6)(80x10)(1x9)I(7x14)VRZNXOX(17x5)SXTYFBITZSWXLUUFJ(11x3)LOCMMDXNMXN(15x6)ESLRVLYBOQKPEZA(2x3)ES(7x11)EDZPYNR(69x15)(8x15)HATTKOTD(1x15)C(1x14)O(35x1)(2x1)CW(21x13)MQITCFLIILUSRLVQGSKXW(121x6)(12x15)(6x13)HZQFNF(9x9)UIDOFTGVI(57x8)(15x14)DJHSOBMGQLFKFTQ(11x6)QWKTRHFEAGK(2x4)IH(6x5)ZHDHJX(10x15)ACPQGUGWIL(3x2)QMK(2x3)OT(15x6)NZGYKDPCNTWTZCH(3552x13)(852x7)(284x12)(277x1)(8x11)TGYIXQNL(40x13)(17x9)LWDCCCCWVOGYOWYZP(3x8)ZVN(3x10)SDQ(3x3)DWU(123x2)(10x14)NSZEKFDZRL(26x2)ENELBBZQLDXFNGFSVGYFTSJPBP(19x5)STCNNNFTTGNFSHLQIMV(7x14)BMGHAMA(30x9)LWDBIXXPHDSHEHLGUWINWVVCSQLNYK(72x1)(5x3)SMBBE(1x15)U(4x3)XLJH(12x6)LYEVOLDUQOII(22x3)UYBOYDZYRBWIHVBZJZJIBD(10x15)ORGFBMUTUK(535x12)(100x8)(6x15)PJFDCS(29x7)(4x2)RERM(4x1)BFHS(6x7)GNJACX(13x6)THUMFYQLTLTCJ(28x8)RTDQHJQHMBOOPZUEWWKMSANXGGQL(56x7)(50x4)(4x2)EUXN(3x12)LWU(2x13)YV(12x8)PXZISAYRVHIE(1x4)L(77x13)(70x12)(24x14)XLKAJZMEOBGJQOZFGDAARDDF(4x13)HMEZ(22x13)TRAZZTZVHZFJQBCVPUERWP(116x7)(8x13)FQQDJSSI(21x4)(3x3)GUX(1x12)J(1x7)F(26x14)(12x6)JVDQPKZGKVQJ(2x13)DV(36x7)(10x4)HVKCDIWLKC(8x5)LGTFQODZ(1x12)L(152x5)(4x6)CURR(80x1)(17x15)GUVFWMLWUJEGNLRVL(6x7)NJXRSS(7x14)AKRRJPI(8x5)DQVRMWFL(12x15)UMLQPEZXZYIZ(10x10)FTKQEWMORC(25x8)(4x1)NPOF(2x4)ZB(4x5)MNGN(4x1)SVFL(819x3)(422x1)(161x5)(63x11)(10x9)LMWKXPVXUD(12x11)NVMYGSXJQBVT(2x12)XS(14x1)LCJFACSGQHOPUG(44x6)(31x9)IYNFDKSDSHMXTGMRIOPAQJRHQBFEKDH(2x4)SX(14x3)HIZENUSZORNUXE(7x2)(1x12)C(3x10)LQD(246x14)(79x13)(32x14)FBUFQJMOZAUHZPGKGNZOTHLBIYETINMF(13x1)GKCLXCMWWPDZV(15x7)MNXJKTCLCEEKJCJ(39x4)(14x14)QYBWZMQBFIWBYQ(12x6)VHQHHLDLMOBZ(93x2)(40x1)TYXOJHUCXHXFBLOHLFUUDAHEWHQJFIUZMAGFRGWP(2x7)MS(9x13)VVJYBKHTL(19x4)IEBQYXDIHQGRMTODBIF(5x6)GWEDR(1x3)M(345x13)(185x7)(8x14)ZXFOFWFV(9x8)EZMSOIYCO(61x13)(33x11)OFPSLJWRGPSLTALOWBSVBFAAYMKCPMYTY(9x6)IUDMWEHGP(1x10)H(6x9)QPVXCO(71x11)(1x11)Y(5x14)PSMCR(7x2)ZAZQZSB(24x14)DCIFQYMEDXSNYMDBSIPOWQUL(5x5)OWYAX(4x5)ISZB(7x3)HWLAEOE(125x9)(45x13)(21x11)YRXZKZQVBPNYBKZIFSYMH(2x13)EL(3x14)HXM(6x15)YQWWDS(5x10)VWCRE(44x7)(8x6)ONMUMKWM(24x15)OBREAALATPCTXPSADMXUXKDK(31x8)(25x8)(18x15)(1x6)K(6x15)WFSHOE(1064x8)(180x12)(91x7)(2x9)UQ(77x10)(14x9)KQHDSHPDIDEWFX(7x13)DBZDGLP(17x1)PEQPQFLLLGAZMPJLK(5x8)DTSJE(5x10)JGHKO(16x10)(2x7)LP(3x11)PDI(40x10)(1x7)Y(27x13)IXDUDNKRJKLBBKIVORLOGMGJWCQ(8x6)(3x2)RTB(323x5)(79x9)(44x13)(19x1)VGWKUHADQZUENXNLNGP(12x10)HCFBPZQRWQEQ(3x10)PLL(12x13)(7x2)GVCTUOT(118x1)(57x15)(13x12)XQESMYXNDFYYW(1x8)G(3x6)XFU(17x8)BHBGTSSJBGGFRPPRT(48x7)(10x1)BLQHPNBCVO(8x13)QAYCKEPP(11x14)FBTYJKKUQCA(4x4)JNWW(97x11)(33x3)WYMAFQHRKESJTBRMNMOARAUYBABCIIZHH(11x8)DTIJCCBXCHK(4x2)ZLMO(25x11)(1x3)L(2x6)EN(7x1)FBJYMYH(11x4)GRWQQFIQDAL(89x9)(83x7)(23x14)QSLZVMSWOGEMUVQUMMBBXZS(33x5)(7x11)ZCEHLWD(14x2)BSRRFIINKZJUTM(9x3)XBPUGZIBI(426x11)(144x11)(10x2)ZVQMPUEXDS(7x14)(2x3)NP(8x8)(2x10)WY(31x4)(8x14)MQXSEJDJ(2x7)FW(4x13)XEQJ(59x3)(17x11)MTJKGUKCQPWDUSFMV(3x6)VDL(8x6)OHZZPPZE(8x12)JMJZCIBE(267x9)(6x7)QQULTD(109x3)(32x9)KHIFGECKKBYSJQUPZYCSWRGOISZBQZMP(5x11)WWVRO(53x13)RNKMDBXJEJEYGREGYLVFXJAGXKPLZGSBEGCLRHUBWMMIMMSEJLKVS(20x10)(1x12)Q(1x4)J(1x10)T(44x7)(3x1)HQS(2x14)OY(4x3)NYOT(3x11)HRB(5x3)AWNPF(57x4)(51x4)NRDWDRLNIEMNTPTKPXWYVRZVJXCEPIWDOZHHSPWTINYYPNKRIJM(788x7)(373x2)(13x13)OMNINNXSMZGVU(110x10)(9x4)MUCJLTXXY(23x8)(16x10)QPEZTMHGTAZMDZFT(4x12)QARM(50x15)(3x11)XOH(16x6)YBLZLQWJABJGQWOU(4x1)PMXY(4x15)OHDQ(118x4)(5x11)EPKSP(24x4)AWIBAENYEFRILVCXFWNDTDKD(1x4)B(65x2)(12x2)YLEUJZAKLKME(24x13)TTXHIHEKQRZMJJYYKWQLCBJP(10x2)FCVCPOTJEU(102x12)(76x14)(7x12)UZQCZAB(3x1)XMW(9x1)UJSGSEURM(11x13)BOKCOFUHRNM(17x1)AEMFGQNASPGQHPXUB(1x13)P(6x11)CVFTDM(166x1)(74x3)(3x12)ONA(36x9)(29x12)AGQWRIAFZDTLKFAWUBZVULOQIYWPP(17x9)AKFFQIWNYGWXFBZZN(71x7)(31x2)XOIACTRUJMFXAVRZUMXKBXZFREZNVJJ(27x15)(20x12)EWQHGQNTXRUIOVHORPOV(3x12)TVU(117x1)(109x14)(10x12)BEIZCDNSAS(86x7)(27x9)FURZRGYPYLGCCCEKYZJPGYYDBQQ(5x2)SBYXR(25x4)ZXXGJHSMUOPRERLXZXQJLECBO(6x15)JUOYIW(91x3)(23x14)MGGWDYYRPCJTIYELCDIZVHS(2x12)KD(6x3)BCDBJV(19x3)(13x4)RXIRDQSOWIPGW(11x1)QGAYMDNYTSL(8x11)FJQAMNNG(1063x13)(250x5)(60x10)(24x11)(8x12)BJYJZMJY(5x8)BJXMU(7x14)NZTAXLS(4x8)VBAT(2x3)HO(176x5)(169x4)(13x15)TWSLJCGYWHLHA(73x6)(36x12)AOUGLFXLSSEWZXFMZUNGDGZVCYYJZUPNKRIH(3x3)UFP(3x1)QIQ(8x15)NPNWNAWS(50x15)(3x6)YIW(1x10)D(10x14)FCLZEIFJWG(1x12)N(6x8)AZDFPX(7x13)DICRGNA(799x2)(533x11)(276x6)(100x9)(17x5)LPMZDSXVBZCMEDFQB(24x8)TCDTFHHXXVEQIVVZCESDANQS(10x15)EPDXGVSSBQ(7x13)WQSTXRF(10x11)RIBWTNVIOX(3x15)VSF(61x6)(8x15)TWCPLZZZ(8x9)AVRPJLHR(21x9)QDODHNZHZERQGXTVKLHYW(1x13)U(53x11)(2x15)RC(32x12)CWBFTTDPKPGPZVZFIJHVLZRCOPJRNFOJ(1x1)I(26x11)CDUFFOGUBYLOBYJNLCWGPDRSMS(201x12)(8x5)(3x1)YIC(8x10)BDXPEMTD(64x4)(10x1)RBHVYIUNFH(5x14)KYIHZ(14x2)TGSOMUZWRGPUNE(11x3)QJHVUCUELOW(8x14)VKMCUJKE(83x11)(1x11)L(5x12)WLWRL(4x12)NQVE(36x3)FJDUVTWHNITJXXVVUMFUDALUXKSIPQFJOEDT(8x1)GDWDODFR(35x2)(22x13)(4x14)OSLD(7x4)VWJVMIF(1x6)H(10x6)VDQYBSDXHG(149x10)(16x14)DROZRQNSVIJWCMPZ(67x6)(54x6)NDDMSLQZBUOSOSAFMDFQGMQBMSGREAKGVTMWIRQPTESMEACCZIOGQH(1x15)J(8x10)CFHPKNID(24x1)(18x2)EMDBIEKPGRSNYXDATP(4x4)HSHR(79x9)(51x1)(2x12)BB(6x15)LNUMRD(25x8)(10x6)FBWLKYGCNJ(3x13)XRN(16x7)(3x9)ONH(2x10)HS(47x1)(2x2)MS(34x9)VLUZLSWIOQZSOBREZDZXEQYKYWTNHHWRNZ(9x6)(4x4)WMMX(78x9)(17x7)(1x10)J(4x14)WZCZ(49x9)(3x5)IPZ(35x7)ROJEZWTCDQCBOWTBEEJCVWBPNMBNXJDJZMG(183x15)(3x6)KRR(54x13)(3x11)JXV(4x7)WRTT(1x6)Q(16x15)LLQNPHNXKWRMAGKX(2x1)ID(21x15)UGXWFMKPKPUMLJCQDBWGS(4x1)NZTP(71x2)(21x7)PKYTHOAENWACXNCPHTTTU(14x12)ZFQGENBKFBMONH(1x7)G(10x10)VSHYAMJWEV(33x7)(4x6)LAZL(12x9)KIDULBTPZHYR(1x4)U(143x8)(29x3)(22x13)LQNQIWKSHNSMJZKWJQWDQA(79x10)(1x8)V(35x12)BTLWYXERIMYWZOFPFAVAAZOFQAHKQXAPOWO(24x13)RLAORQSPJCCOLZLXDAAOXYHY(16x1)MZLJXILHCLGHOAPW(12x3)(7x1)ELWCOIZ \ No newline at end of file diff --git a/2016/day09.rkt b/2016/day09/lang.rkt similarity index 96% rename from 2016/day09.rkt rename to 2016/day09/lang.rkt index 687a52a..a09e4f7 100644 --- a/2016/day09.rkt +++ b/2016/day09/lang.rkt @@ -1,10 +1,9 @@ #lang br/quicklang (require racket/string) - -(module+ reader (provide read-syntax)) +(provide read-syntax) (define (read-syntax path port) (strip-bindings - #`(module mod "day09.rkt" + #`(module mod "lang.rkt" #,@(for/list ([str (in-lines port)] #:when (not (equal? str ""))) `(solve ,(string-trim str)))))) diff --git a/2016/day09/test.rkt b/2016/day09/test.rkt new file mode 100644 index 0000000..40eda16 --- /dev/null +++ b/2016/day09/test.rkt @@ -0,0 +1,2 @@ +#lang reader "lang.rkt" +(27x12)(20x12)(13x14)(7x10)(1x12)A \ No newline at end of file diff --git a/2016/day14/input.rkt b/2016/day14/input.rkt new file mode 100644 index 0000000..e14e2f9 --- /dev/null +++ b/2016/day14/input.rkt @@ -0,0 +1,2 @@ +#lang reader "lang.rkt" +ahsbgdzn \ No newline at end of file diff --git a/2016/day14/lang.rkt b/2016/day14/lang.rkt new file mode 100644 index 0000000..2a26242 --- /dev/null +++ b/2016/day14/lang.rkt @@ -0,0 +1,15 @@ +#lang br/quicklang +(require openssl/md5) +;; http://adventofcode.com/2016/day/13 +(require graph) +(provide read-syntax + (rename-out [mb #%module-begin])) + +(define (read-syntax path port) + (strip-bindings + #`(module mod "lang.rkt" + #,(string-trim (port->string port))))) + +(define-macro (mb SALT) + #'(#%module-begin + (md5 (open-input-string SALT)))) \ No newline at end of file diff --git a/2016/day14/test.rkt b/2016/day14/test.rkt new file mode 100644 index 0000000..ecf8e8b --- /dev/null +++ b/2016/day14/test.rkt @@ -0,0 +1,2 @@ +#lang reader "lang.rkt" +abc \ No newline at end of file -- 2.25.1 From 95b784f621ebae4b626b3b5f0fce7eeca141f102 Mon Sep 17 00:00:00 2001 From: Matthew Butterick Date: Thu, 15 Dec 2016 22:11:51 -0800 Subject: [PATCH 27/43] finish day14 --- 2016/day14/lang.rkt | 34 ++++++++++++++++++++++++++++++---- 1 file changed, 30 insertions(+), 4 deletions(-) diff --git a/2016/day14/lang.rkt b/2016/day14/lang.rkt index 2a26242..30b6403 100644 --- a/2016/day14/lang.rkt +++ b/2016/day14/lang.rkt @@ -1,7 +1,5 @@ -#lang br/quicklang +#lang br/quicklang ;; http://adventofcode.com/2016/day/14 (require openssl/md5) -;; http://adventofcode.com/2016/day/13 -(require graph) (provide read-syntax (rename-out [mb #%module-begin])) @@ -12,4 +10,32 @@ (define-macro (mb SALT) #'(#%module-begin - (md5 (open-input-string SALT)))) \ No newline at end of file + (solve SALT) + (parameterize ([key-stretch 2017]) + (solve SALT)))) + +(define key-stretch (make-parameter 0)) +(require sugar/cache) +(define/caching (get-hash salt i) + (for/fold ([str (string-downcase (format "~a~a" salt i))]) + ([i (in-range (key-stretch))]) + (md5 (open-input-string str)))) + +(define (valid? hash salt i) + (let* ([triple-char-pat (pregexp "(.)\\1\\1")] + [result (regexp-match triple-char-pat hash)]) + (and result + (let* ([repeated-char (cadr result)] + [penta-char-pat (pregexp (format "(~a)\\1\\1\\1\\1" repeated-char))]) + (for/or ([idx (in-range (add1 i) (+ 1001 i))]) + (regexp-match penta-char-pat (get-hash salt idx))))))) + +(define (solve salt) + (caar + (for/fold ([keys empty]) + ([i (in-naturals)] + #:break (= (length keys) 64)) + (define hash (get-hash salt i)) + (if (valid? hash salt i) + (report* i hash (cons (cons i hash) keys)) + keys)))) -- 2.25.1 From 107965d5eeebbe8ad2fd88bf33da5da7ec701645 Mon Sep 17 00:00:00 2001 From: Matthew Butterick Date: Thu, 15 Dec 2016 22:45:17 -0800 Subject: [PATCH 28/43] day15 --- 2016/day15/input-b.rkt | 8 ++++++++ 2016/day15/input.rkt | 7 +++++++ 2016/day15/lang.rkt | 27 +++++++++++++++++++++++++++ 2016/day15/test.rkt | 3 +++ 4 files changed, 45 insertions(+) create mode 100644 2016/day15/input-b.rkt create mode 100644 2016/day15/input.rkt create mode 100644 2016/day15/lang.rkt create mode 100644 2016/day15/test.rkt diff --git a/2016/day15/input-b.rkt b/2016/day15/input-b.rkt new file mode 100644 index 0000000..51d7764 --- /dev/null +++ b/2016/day15/input-b.rkt @@ -0,0 +1,8 @@ +#lang reader "lang.rkt" +Disc #1 has 5 positions; at time=0, it is at position 2. +Disc #2 has 13 positions; at time=0, it is at position 7. +Disc #3 has 17 positions; at time=0, it is at position 10. +Disc #4 has 3 positions; at time=0, it is at position 2. +Disc #5 has 19 positions; at time=0, it is at position 9. +Disc #6 has 7 positions; at time=0, it is at position 0. +Disc #7 has 11 positions; at time=0, it is at position 0. \ No newline at end of file diff --git a/2016/day15/input.rkt b/2016/day15/input.rkt new file mode 100644 index 0000000..d259a96 --- /dev/null +++ b/2016/day15/input.rkt @@ -0,0 +1,7 @@ +#lang reader "lang.rkt" +Disc #1 has 5 positions; at time=0, it is at position 2. +Disc #2 has 13 positions; at time=0, it is at position 7. +Disc #3 has 17 positions; at time=0, it is at position 10. +Disc #4 has 3 positions; at time=0, it is at position 2. +Disc #5 has 19 positions; at time=0, it is at position 9. +Disc #6 has 7 positions; at time=0, it is at position 0. \ No newline at end of file diff --git a/2016/day15/lang.rkt b/2016/day15/lang.rkt new file mode 100644 index 0000000..11ea01d --- /dev/null +++ b/2016/day15/lang.rkt @@ -0,0 +1,27 @@ +#lang br/quicklang ;; http://adventofcode.com/2016/day/15 +(require openssl/md5) +(provide read-syntax + (rename-out [mb #%module-begin])) + +(define (read-syntax path port) + (strip-bindings + #`(module mod "lang.rkt" + #,@(for/list ([line (in-list (string-split (port->string port) "\n"))]) + `(disc ,@(map string->number (regexp-match* #px"\\d+" line))))))) + +(define-macro (mb . DISCS) + #'(#%module-begin + (solve . DISCS))) + +(define-macro (solve . DISCS) + (with-pattern ([(DISC# ...) (generate-temporaries #'DISCS)] + [(DISC-SLOTS ...) #'DISCS]) + #'(for/or ([DISC# (in-cycle DISC-SLOTS)] ... + [i (in-naturals)] + #:when (= DISC# ...)) + i))) + +(require sugar/list) +(define-macro (disc TIME-OFFSET SIZE _ START) + #'(shift (range SIZE) (modulo (- (+ START TIME-OFFSET)) SIZE) #f #t)) +(provide disc) \ No newline at end of file diff --git a/2016/day15/test.rkt b/2016/day15/test.rkt new file mode 100644 index 0000000..4a873c0 --- /dev/null +++ b/2016/day15/test.rkt @@ -0,0 +1,3 @@ +#lang reader "lang.rkt" +Disc #1 has 5 positions; at time=0, it is at position 4. +Disc #2 has 2 positions; at time=0, it is at position 1. \ No newline at end of file -- 2.25.1 From 05eed96174e377a25e7ea71f2fb8bcb26d02f1bc Mon Sep 17 00:00:00 2001 From: Matthew Butterick Date: Thu, 15 Dec 2016 23:34:06 -0800 Subject: [PATCH 29/43] small edits --- 2016/day15/lang.rkt | 10 +++++----- info.rkt | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/2016/day15/lang.rkt b/2016/day15/lang.rkt index 11ea01d..7ef3de0 100644 --- a/2016/day15/lang.rkt +++ b/2016/day15/lang.rkt @@ -16,12 +16,12 @@ (define-macro (solve . DISCS) (with-pattern ([(DISC# ...) (generate-temporaries #'DISCS)] [(DISC-SLOTS ...) #'DISCS]) - #'(for/or ([DISC# (in-cycle DISC-SLOTS)] ... - [i (in-naturals)] - #:when (= DISC# ...)) - i))) + #'(for/first ([DISC# (in-cycle DISC-SLOTS)] ... + [i (in-naturals)] + #:when (= 0 DISC# ...)) + i))) (require sugar/list) (define-macro (disc TIME-OFFSET SIZE _ START) - #'(shift (range SIZE) (modulo (- (+ START TIME-OFFSET)) SIZE) #f #t)) + #'(shift-left-cycle (range SIZE) (+ START TIME-OFFSET))) (provide disc) \ No newline at end of file diff --git a/info.rkt b/info.rkt index 57f6543..416afb1 100644 --- a/info.rkt +++ b/info.rkt @@ -1,6 +1,6 @@ #lang info (define collection "aoc-racket") (define scribblings '(("aoc-racket.scrbl" (multi-page)))) -(define deps '("base" "scribble-lib" "sugar" "rackunit-lib" "math-lib" "beautiful-racket-lib")) +(define deps '("base" "scribble-lib" ("sugar" #:version "0.3") "rackunit-lib" "math-lib" "beautiful-racket-lib")) (define test-omit-paths (list #rx"rkt$")) (define build-deps '("rackunit-lib" "racket-doc" "scribble-doc" "rackunit-doc" "at-exp-lib" "math-doc")) \ No newline at end of file -- 2.25.1 From 86ff9c26d0413fcc81d93de1687c520d64451463 Mon Sep 17 00:00:00 2001 From: Matthew Butterick Date: Fri, 16 Dec 2016 10:44:21 -0800 Subject: [PATCH 30/43] touchup --- 2016/day15/lang.rkt | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/2016/day15/lang.rkt b/2016/day15/lang.rkt index 7ef3de0..c5fcbf6 100644 --- a/2016/day15/lang.rkt +++ b/2016/day15/lang.rkt @@ -1,5 +1,4 @@ #lang br/quicklang ;; http://adventofcode.com/2016/day/15 -(require openssl/md5) (provide read-syntax (rename-out [mb #%module-begin])) @@ -14,11 +13,11 @@ (solve . DISCS))) (define-macro (solve . DISCS) - (with-pattern ([(DISC# ...) (generate-temporaries #'DISCS)] + (with-pattern ([(DISC-ID ...) (generate-temporaries #'DISCS)] [(DISC-SLOTS ...) #'DISCS]) - #'(for/first ([DISC# (in-cycle DISC-SLOTS)] ... + #'(for/first ([DISC-ID (in-cycle DISC-SLOTS)] ... [i (in-naturals)] - #:when (= 0 DISC# ...)) + #:when (= 0 DISC-ID ...)) i))) (require sugar/list) -- 2.25.1 From 9bc43809efeb983f8aad0f1062282164982b3ba9 Mon Sep 17 00:00:00 2001 From: Matthew Butterick Date: Fri, 16 Dec 2016 22:31:25 -0800 Subject: [PATCH 31/43] start day16 --- 2016/day16/input-b.rkt | 2 ++ 2016/day16/input.rkt | 2 ++ 2016/day16/lang.rkt | 38 ++++++++++++++++++++++++++++++++++++++ 2016/day16/test-b.rkt | 2 ++ 2016/day16/test.rkt | 2 ++ 5 files changed, 46 insertions(+) create mode 100644 2016/day16/input-b.rkt create mode 100644 2016/day16/input.rkt create mode 100644 2016/day16/lang.rkt create mode 100644 2016/day16/test-b.rkt create mode 100644 2016/day16/test.rkt diff --git a/2016/day16/input-b.rkt b/2016/day16/input-b.rkt new file mode 100644 index 0000000..c37fcbe --- /dev/null +++ b/2016/day16/input-b.rkt @@ -0,0 +1,2 @@ +#lang reader "lang.rkt" +35651584, 10010000000110000 \ No newline at end of file diff --git a/2016/day16/input.rkt b/2016/day16/input.rkt new file mode 100644 index 0000000..fbd18e6 --- /dev/null +++ b/2016/day16/input.rkt @@ -0,0 +1,2 @@ +#lang reader "lang.rkt" +272, 10010000000110000 \ No newline at end of file diff --git a/2016/day16/lang.rkt b/2016/day16/lang.rkt new file mode 100644 index 0000000..d7ea2e6 --- /dev/null +++ b/2016/day16/lang.rkt @@ -0,0 +1,38 @@ +#lang br/quicklang ;; http://adventofcode.com/2016/day/16 +(require openssl/md5) +(provide read-syntax + (rename-out [mb #%module-begin])) + +(define (read-syntax path port) + (strip-bindings + #`(module mod "lang.rkt" + #,@(string-split (string-trim (port->string port)) ", ")))) + +(define-macro (mb SIZE INIT) + #'(#%module-begin + (display (list->string (checksum (fill-disk (string->list INIT) (string->number SIZE))))))) + +(define (dragonize cs) + (append cs '(#\0) + (for/list ([c (in-list (reverse cs))]) + (if (eqv? c #\1) + #\0 + #\1)))) + +(define (fill-disk init size) + (let loop ([cs init]) + (if (>= (length cs) size) + (take cs size) + (loop (dragonize cs))))) + +(require sugar/list) +(define (checksum cs) + (let loop ([cs cs]) + (if (odd? (length cs)) + cs + (loop + (for/list ([match (in-list (slice-at cs 2))]) + (if (member match '((#\0 #\0) (#\1 #\1))) + #\1 + #\0)))))) + diff --git a/2016/day16/test-b.rkt b/2016/day16/test-b.rkt new file mode 100644 index 0000000..238af15 --- /dev/null +++ b/2016/day16/test-b.rkt @@ -0,0 +1,2 @@ +#lang reader "lang.rkt" +20, 10000 \ No newline at end of file diff --git a/2016/day16/test.rkt b/2016/day16/test.rkt new file mode 100644 index 0000000..93b5eb8 --- /dev/null +++ b/2016/day16/test.rkt @@ -0,0 +1,2 @@ +#lang reader "lang.rkt" +12, 110010110100 \ No newline at end of file -- 2.25.1 From 4f738c22e80c25410d0cfd772280f069fb1504ed Mon Sep 17 00:00:00 2001 From: Matthew Butterick Date: Sat, 17 Dec 2016 23:13:45 -0800 Subject: [PATCH 32/43] day18 --- 2016/day18/input.rkt | 2 ++ 2016/day18/lang.rkt | 30 ++++++++++++++++++++++++++++++ 2016/day18/test.rkt | 2 ++ 3 files changed, 34 insertions(+) create mode 100644 2016/day18/input.rkt create mode 100644 2016/day18/lang.rkt create mode 100644 2016/day18/test.rkt diff --git a/2016/day18/input.rkt b/2016/day18/input.rkt new file mode 100644 index 0000000..6c7712f --- /dev/null +++ b/2016/day18/input.rkt @@ -0,0 +1,2 @@ +#lang reader "lang.rkt" +.^^^.^.^^^.^.......^^.^^^^.^^^^..^^^^^.^.^^^..^^.^.^^..^.^..^^...^.^^.^^^...^^.^.^^^..^^^^.....^.... \ No newline at end of file diff --git a/2016/day18/lang.rkt b/2016/day18/lang.rkt new file mode 100644 index 0000000..5715c01 --- /dev/null +++ b/2016/day18/lang.rkt @@ -0,0 +1,30 @@ +#lang br/quicklang ;; http://adventofcode.com/2016/day/18 +(provide read-syntax + (rename-out [mb #%module-begin])) + +(define (read-syntax path port) + (strip-bindings + #`(module mod "lang.rkt" + #,(string-trim (port->string port))))) + +(define-macro (mb STR) + #'(#%module-begin + (define (traps cs) + (length (filter (λ(c) (char=? #\. c)) cs))) + (let loop ([cs (string->list STR)] + [count (traps (string->list STR))] + [i 0]) + (if (= i 399999) ; number of rows + count + (let* ([result (next-cs cs)] + [this-count (traps result)]) + (loop result (+ this-count count) (add1 i))))))) + +(define (next-cs cs) + (define adj-cs (append (list #\.) cs (list #\.))) + (for/list ([c1 (in-list adj-cs)] + [c2 (in-list (cdr adj-cs))] + [c3 (in-list (cddr adj-cs))]) + (case (list c1 c2 c3) + [((#\^ #\^ #\.) (#\. #\^ #\^) (#\^ #\. #\.) (#\. #\. #\^)) #\^] + [else #\.]))) diff --git a/2016/day18/test.rkt b/2016/day18/test.rkt new file mode 100644 index 0000000..1411285 --- /dev/null +++ b/2016/day18/test.rkt @@ -0,0 +1,2 @@ +#lang reader "lang.rkt" +.^^.^.^^^^ \ No newline at end of file -- 2.25.1 From cfd27965fbdc3b7d1c994d309f11d5af3acc0fe8 Mon Sep 17 00:00:00 2001 From: Matthew Butterick Date: Sun, 18 Dec 2016 11:05:34 -0800 Subject: [PATCH 33/43] y17 --- 2016/day17/input.rkt | 2 ++ 2016/day17/lang.rkt | 76 ++++++++++++++++++++++++++++++++++++++++++++ 2016/day17/test.rkt | 2 ++ 3 files changed, 80 insertions(+) create mode 100644 2016/day17/input.rkt create mode 100644 2016/day17/lang.rkt create mode 100644 2016/day17/test.rkt diff --git a/2016/day17/input.rkt b/2016/day17/input.rkt new file mode 100644 index 0000000..dcdb925 --- /dev/null +++ b/2016/day17/input.rkt @@ -0,0 +1,2 @@ +#lang reader "lang.rkt" +hhhxzeay \ No newline at end of file diff --git a/2016/day17/lang.rkt b/2016/day17/lang.rkt new file mode 100644 index 0000000..3ade62a --- /dev/null +++ b/2016/day17/lang.rkt @@ -0,0 +1,76 @@ +#lang br/quicklang ;; http://adventofcode.com/2016/day/17 +(require openssl/md5 sugar/cache) +(provide read-syntax + (rename-out [mb #%module-begin])) + +(define (read-syntax path port) + (strip-bindings + #`(module mod "lang.rkt" + #,(string-trim (port->string port))))) + +(define-macro (mb STR) + #'(#%module-begin + (displayln (solve-shortest STR)) + (displayln (solve-longest STR)))) + +(define (path->dirs path) + (regexp-match* #rx"[UDLR]" path)) + +(define (on-grid? pos) + (and (<= 0 (real-part pos) 3) + (<= 0 (imag-part pos) 3))) + +(define/caching (follow-path path) + (define result (regexp-match #rx"^(.*)([UDLR])$" path)) + (define end + (cond + [result + (match-define (list _ prefix suffix) result) + (+ (follow-path prefix) (case suffix + [("D") +i] + [("U") -i] + [("L") -1] + [("R") 1]))] + [else 0])) + (and (on-grid? end) end)) + +(define/caching (get-hash str) + (md5 (open-input-string str))) + +(define (take-step path) + (define hash (get-hash path)) + (define prefix (car (regexp-match #rx"^...." hash))) + (define possible-dirs + (for/list ([dir (in-list (list "U" "D" "L" "R"))] + [c (in-string prefix)] + #:when (member c '(#\b #\c #\d #\e #\f))) + dir)) + (for*/list ([dir (in-list possible-dirs)] + [path+dir (in-value (string-append path dir))] + #:when (follow-path path+dir)) + path+dir)) + +(define vault 3+3i) + +(define (solve-shortest str) + (let loop ([paths (list str)]) + (define stepped-paths (append-map take-step paths)) + (if (empty? stepped-paths) + 'no-solution + (or (for/first ([sp (in-list stepped-paths)] + #:when (= vault (follow-path sp))) + (apply string-append (path->dirs sp))) + (loop stepped-paths))))) + +(define (solve-longest str) + (length + (path->dirs + (argmax string-length + (let loop ([paths (list str)][vault-paths empty][i 0]) + (cond + [(empty? paths) vault-paths] + [else + (define stepped-paths (append-map take-step paths)) + (define-values (new-vault-paths other-paths) + (partition (λ(sp) (= vault (follow-path sp))) stepped-paths)) + (loop other-paths (if (pair? new-vault-paths) new-vault-paths vault-paths) (add1 i))])))))) diff --git a/2016/day17/test.rkt b/2016/day17/test.rkt new file mode 100644 index 0000000..f797a45 --- /dev/null +++ b/2016/day17/test.rkt @@ -0,0 +1,2 @@ +#lang reader "lang.rkt" +hijkl \ No newline at end of file -- 2.25.1 From f86149e4df5cedee025aa7f7e4202dfbbd186cb2 Mon Sep 17 00:00:00 2001 From: Matthew Butterick Date: Sun, 18 Dec 2016 22:47:31 -0800 Subject: [PATCH 34/43] start day19 --- 2016/day19/input.rkt | 2 ++ 2016/day19/lang.rkt | 33 +++++++++++++++++++++++++++++++++ 2016/day19/test.rkt | 2 ++ 3 files changed, 37 insertions(+) create mode 100644 2016/day19/input.rkt create mode 100644 2016/day19/lang.rkt create mode 100644 2016/day19/test.rkt diff --git a/2016/day19/input.rkt b/2016/day19/input.rkt new file mode 100644 index 0000000..ae5b64d --- /dev/null +++ b/2016/day19/input.rkt @@ -0,0 +1,2 @@ +#lang reader "lang.rkt" +3017957 \ No newline at end of file diff --git a/2016/day19/lang.rkt b/2016/day19/lang.rkt new file mode 100644 index 0000000..be1b5c3 --- /dev/null +++ b/2016/day19/lang.rkt @@ -0,0 +1,33 @@ +#lang br/quicklang ;; http://adventofcode.com/2016/day/18 +(provide read-syntax + (rename-out [mb #%module-begin])) + +(define (read-syntax path port) + (strip-bindings + #`(module mod "lang.rkt" + #,(string-trim (port->string port))))) + +(define-macro (mb NUM-STR) + #'(#%module-begin + (displayln (solve (string->number NUM-STR) #f)) + (displayln (solve (string->number NUM-STR) #t)))) + +(define (idx-after vec x) + (or + (for/first ([idx (in-range (modulo (add1 x) (vector-length vec)) (vector-length vec))] + #:when (vector-ref vec idx)) + idx) + (idx-after vec 0))) + +(define (solve num [circle? #f]) + (define elves (make-vector num #t)) + (let loop ([taker 0][elves-left num]) + (cond + [(= elves-left 2) (add1 taker)] + [else + (define giver (for/fold ([elf taker]) + ([i (in-range (if circle? (floor (/ num 2)) 1))]) + (idx-after elves elf))) + (vector-set! elves giver #f) + (loop (idx-after elves taker) (sub1 elves-left))]))) + diff --git a/2016/day19/test.rkt b/2016/day19/test.rkt new file mode 100644 index 0000000..2c1028d --- /dev/null +++ b/2016/day19/test.rkt @@ -0,0 +1,2 @@ +#lang reader "lang.rkt" +5 \ No newline at end of file -- 2.25.1 From 9013625d239def753609eac3b1c576b04a7713b2 Mon Sep 17 00:00:00 2001 From: Matthew Butterick Date: Sun, 18 Dec 2016 23:10:52 -0800 Subject: [PATCH 35/43] fix --- 2016/day19/lang.rkt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/2016/day19/lang.rkt b/2016/day19/lang.rkt index be1b5c3..036ae0f 100644 --- a/2016/day19/lang.rkt +++ b/2016/day19/lang.rkt @@ -9,7 +9,7 @@ (define-macro (mb NUM-STR) #'(#%module-begin - (displayln (solve (string->number NUM-STR) #f)) + #;(displayln (solve (string->number NUM-STR) #f)) (displayln (solve (string->number NUM-STR) #t)))) (define (idx-after vec x) @@ -17,7 +17,7 @@ (for/first ([idx (in-range (modulo (add1 x) (vector-length vec)) (vector-length vec))] #:when (vector-ref vec idx)) idx) - (idx-after vec 0))) + (idx-after vec -1))) (define (solve num [circle? #f]) (define elves (make-vector num #t)) @@ -26,7 +26,7 @@ [(= elves-left 2) (add1 taker)] [else (define giver (for/fold ([elf taker]) - ([i (in-range (if circle? (floor (/ num 2)) 1))]) + ([i (in-range (if circle? (floor (/ elves-left 2)) 1))]) (idx-after elves elf))) (vector-set! elves giver #f) (loop (idx-after elves taker) (sub1 elves-left))]))) -- 2.25.1 From 9f3525d17495fabef4e9397764f53f9f80c056cc Mon Sep 17 00:00:00 2001 From: Matthew Butterick Date: Mon, 19 Dec 2016 23:08:46 -0800 Subject: [PATCH 36/43] day20 --- 2016/day20/input.rkt | 959 +++++++++++++++++++++++++++++++++++++++++++ 2016/day20/lang.rkt | 47 +++ 2016/day20/test.rkt | 4 + 3 files changed, 1010 insertions(+) create mode 100644 2016/day20/input.rkt create mode 100644 2016/day20/lang.rkt create mode 100644 2016/day20/test.rkt diff --git a/2016/day20/input.rkt b/2016/day20/input.rkt new file mode 100644 index 0000000..dbed444 --- /dev/null +++ b/2016/day20/input.rkt @@ -0,0 +1,959 @@ +#lang reader "lang.rkt" +420604416-480421096 +172102328-195230700 +613677102-639635955 +1689844284-1724152701 +3358865073-3365629764 +1333423844-1344930397 +2519115700-2535290065 +698684483-723211151 +979757052-1003200781 +4165068842-4190472815 +2020267004-2045214369 +2979897715-3004836346 +2110213890-2115506975 +2970017340-2973461626 +2236378365-2258142409 +3423992974-3426380317 +1462489107-1490036931 +2189940955-2198476022 +2417413696-2430182746 +3624276792-3633790184 +1005063612-1009015074 +1061038892-1061410454 +2276099915-2310172070 +1202572862-1215598809 +1783724555-1785267178 +1262810964-1264200367 +592924330-594021870 +1981502514-2001291898 +3639371125-3691832997 +751455858-758389721 +575870144-588215938 +2707934395-2711294609 +2271125072-2271532092 +723211153-745881341 +291750706-293834948 +3846273818-3846421786 +1798292566-1840652756 +907920869-908496244 +2979008391-2984333350 +3120502195-3140695376 +1316734884-1323407408 +4013388816-4015102290 +4211041074-4243535195 +3264591092-3270165984 +1356324132-1369836240 +3500337320-3511856741 +2675082203-2680516758 +269092398-286582232 +9214023-16864642 +3496293771-3507984426 +789173169-790658193 +1589657426-1592447273 +3018889533-3040428852 +3190582871-3209497449 +2582019510-2592221443 +452701865-462658183 +581072273-585497818 +2885687081-2887027444 +405199391-406037773 +1926405498-1961345770 +1591447330-1595803034 +2075061753-2117082859 +2738757089-2739984421 +1758742902-1766649306 +1598451138-1603784829 +904873440-933144524 +743128701-751089192 +2946510215-2953128493 +4258067806-4258357961 +2162946809-2194271963 +2502065462-2529412983 +1794208357-1812728725 +2399604728-2399751734 +2675639614-2686964361 +1243509131-1261449357 +1334629713-1360716911 +490307573-506198210 +3865783894-3882438935 +1355288427-1356825096 +4080632471-4085694027 +1069989320-1079328173 +1261530547-1263095027 +1864453415-1864536898 +500660752-513276733 +859810764-865812062 +4054243009-4055337105 +795048590-839560602 +2708730392-2712322515 +3642043390-3653718654 +2350724230-2355301182 +663974525-698684482 +734062708-734919764 +2004656983-2006812551 +987361385-989501665 +3621608802-3622545302 +1133546243-1135802698 +147516310-150573031 +2271038167-2271338460 +3912004191-3947848898 +2301820906-2338108229 +2361989797-2363651982 +3867365-5819500 +3702314080-3703559974 +4134127328-4135370466 +756306610-770493891 +2079529322-2090642509 +3981814383-3992802961 +4031189022-4042698219 +1560502437-1565573103 +408025952-414757361 +137808459-150920914 +3393581407-3411447948 +2151896844-2162946807 +4201010521-4201471695 +3713302577-3725874062 +142387170-154849830 +2166232094-2205567227 +3291340751-3298984606 +938375497-943547413 +4055961596-4110367884 +136677359-137609692 +3037464396-3044180771 +2691576247-2691980924 +1009015076-1045645521 +789113477-790592023 +899519940-911794289 +2137437783-2155776766 +1399083500-1402900021 +1469947218-1479256900 +2944855925-2953686693 +2910064491-2920533014 +144173340-148094230 +2360899146-2362380838 +2013535209-2049558890 +1109489564-1124585673 +2756379565-2767828753 +1060568096-1073644115 +1691100485-1728041197 +1592871439-1600233767 +1516639981-1518466748 +2098130915-2098541161 +3704291842-3706581331 +962586078-1003763244 +527697837-533713889 +1856931843-1873776214 +2399693233-2399917980 +2055406323-2063623078 +240041628-275447727 +1513843540-1521844727 +1648487379-1649719916 +2087056931-2102042862 +3717079814-3719847466 +1500211877-1510297315 +407413483-415066321 +3596458788-3618072868 +218197655-228951780 +643659026-656047997 +1603704290-1614650204 +2358880422-2366638177 +3004836348-3015765511 +3046845638-3046851095 +3305333257-3307471995 +2401731427-2405370552 +4017360677-4027723482 +557056664-575870142 +609440078-615655979 +1139493162-1151170381 +428962141-483384245 +2293357845-2334971307 +3091700546-3119568633 +1864347502-1864482912 +1749751448-1750782554 +420140812-420604414 +1317387394-1324899402 +3623998911-3629315327 +4150451309-4152623876 +434323808-454005042 +1858560120-1864845209 +2009686203-2018214121 +605094405-611343970 +4256094197-4258455116 +1177692263-1227426205 +4011096895-4014427778 +39304785-47673299 +498903368-524596608 +605553131-610691072 +3048424158-3066041482 +153238649-154812518 +1317950434-1324244958 +3355309684-3360596455 +2409598473-2428168849 +2946469763-2949510201 +543235050-544883779 +1079837788-1081762723 +3600722024-3622452566 +4257178957-4258853576 +1922845451-1979527610 +1162924278-1217904821 +1854156984-1867582222 +2573163840-2578960281 +1159211723-1163517189 +1490036932-1500211875 +482764386-488744315 +235990048-265498430 +1714315712-1724421861 +958737616-962586076 +790658195-851798647 +2019736814-2021017547 +2162802-8327007 +787368380-789171975 +3467221232-3469771790 +3416813106-3439834312 +906735025-908389759 +64489226-70116603 +1908532718-1922845449 +1234754192-1245016567 +3287320754-3296095689 +3031537491-3039742613 +3769892977-3785548652 +1645238060-1655418015 +612066331-620597775 +2905104738-2920311121 +2014785668-2022435799 +3844301667-3844798343 +2828382380-2863199622 +2676931732-2682206642 +171451625-218197654 +2153052343-2156659109 +610691073-636761246 +2604642896-2615712599 +1589965559-1603704289 +2935029177-2942217574 +186697135-187447861 +1986224726-1986550701 +770493893-789113476 +3557491384-3562596711 +2898302199-2920593201 +934606912-955515749 +1855368372-1872942514 +2570443173-2571696675 +186869593-188420012 +1029668904-1048703657 +3284676192-3295161434 +3955266215-3977053319 +2476141495-2479329360 +4276025347-4283606977 +534415917-569504381 +2263536298-2268109489 +1200129331-1210019228 +3971350693-3990304290 +489813454-495749644 +1743364359-1768398619 +3924729773-3931294732 +105847925-111482255 +794582284-818505469 +1811415389-1838855885 +1890243027-1898852651 +1986067335-1986471617 +104143552-106052965 +772703103-776359533 +3911720342-3933921905 +395790945-398705617 +2258142410-2267980008 +613561861-616915116 +3310135636-3330660281 +2061419260-2061539636 +2624281089-2626673183 +1877477043-1884442706 +2933979446-2949991401 +543661669-563658372 +197557686-226037744 +613176712-618285697 +4265278830-4278950571 +3556799964-3560580457 +1116126837-1122976017 +1187703503-1205238834 +983871724-1001238917 +3887842382-3903790188 +2641349279-2643172883 +3583057749-3587680646 +2601030398-2608486868 +4157885743-4168988833 +1162830362-1167726097 +2514929623-2525222702 +3291107480-3295972867 +2151518630-2154613192 +3046851552-3046878017 +325969068-334085941 +189084100-189886055 +3650880042-3683085757 +2453733029-2471942669 +1662489961-1666626344 +44287139-49449042 +1400982930-1421830420 +2546953607-2554587873 +2639634659-2672001824 +641036962-646629131 +1236906461-1244507638 +1331784152-1367083336 +506198211-527697835 +255997224-260755488 +2588563930-2611385666 +3599734818-3614926593 +2285367719-2289556931 +1088850011-1109811497 +3586236383-3589929173 +2399595142-2399763869 +1385676603-1390665612 +3513146704-3513797148 +2738224131-2740166097 +2869889938-2880215300 +2005865698-2011251487 +3046872422-3055338791 +2940602932-2944294443 +3711823219-3713306331 +327670367-327738352 +2793738-2841656 +3807120966-3836270308 +3711433856-3712911001 +592896405-592954516 +688452447-718340962 +2063048458-2068052789 +4162162406-4167839641 +2049558892-2064994876 +20968691-38549168 +2497497428-2510517683 +1583336096-1589657424 +1143974607-1155771407 +2381952303-2397368087 +2009571163-2013286329 +942853383-944865487 +951722030-952400166 +200197723-215328622 +3106021045-3120502193 +4140023055-4149617577 +1668895062-1671431568 +2626673185-2653038422 +1841289175-1846422485 +335754679-386244011 +4062044458-4068497802 +331356502-332799273 +3307471997-3371549847 +2018475560-2021933871 +150920915-171451623 +2194931559-2195514567 +4089933248-4090707368 +4157463945-4165762209 +4100746531-4104107984 +3411013858-3416813104 +3374946441-3393581406 +2552376718-2552429766 +725947111-751643934 +2473774976-2490564633 +3566405121-3581497459 +2683823262-2693090640 +2734605142-2742827358 +3441986164-3442398493 +1524044927-1541206072 +4254311927-4257287997 +2411062371-2425081809 +3666577856-3698298724 +440803690-480698287 +1614650206-1663590083 +4257850447-4258201271 +2637194180-2658593345 +1269282838-1312761281 +2522666665-2525818042 +141503475-143914340 +364934589-385277316 +24026223-27879741 +3557755338-3564098914 +2943664323-2954588780 +1571687539-1572996177 +957113399-959367378 +3585168986-3592657057 +1356305980-1369637926 +3630349604-3639371123 +2570730499-2575580881 +2459213065-2486172460 +814620199-829988953 +1983439516-1984861942 +3800496806-3833569562 +2841657-3867364 +1706481656-1713944571 +454683370-473903295 +2697862561-2701781892 +1451637419-1454646761 +501104716-523461517 +3304490686-3306418502 +3846192081-3846304020 +4191662000-4235899383 +4096574372-4111227622 +480421097-485653417 +3762938052-3790582378 +701786054-705861635 +1214808315-1215006746 +364434099-382831881 +3713276399-3714579266 +1336679025-1347883722 +1979527611-1979886571 +2090642510-2129888576 +3624144511-3633098213 +2097515227-2098217363 +1851357581-1859249610 +3021641379-3030459043 +860720178-867061373 +4053454232-4055923518 +591971809-592927822 +899570088-914232296 +3171743426-3178833535 +1767780850-1769461322 +1648285748-1664437761 +2756023351-2772357724 +1841385621-1851357579 +1764427585-1768013247 +3968976986-3979761882 +204898529-205069325 +1192059065-1225447718 +204967480-205140904 +3191614963-3205521380 +2687221525-2690406018 +3713502419-3714707176 +859460566-860824071 +2761514667-2765543032 +3357906031-3364349724 +3275219921-3282195064 +3391484605-3394594750 +406732797-420140811 +4273899514-4281205511 +3083762422-3113295478 +2193854781-2195333482 +4203706684-4251257733 +384194709-397192696 +3591265505-3596458786 +1102914397-1124045826 +2310172071-2344149963 +3066041483-3069828748 +2635666365-2641585945 +1060740916-1061127459 +3774707512-3782147573 +1743737707-1779166247 +246638755-280110373 +851798648-859460564 +605075197-611133696 +2293962494-2298136342 +3460740393-3471166317 +3280182044-3284676190 +14791161-17348573 +2691399120-2691637915 +1728558700-1733098513 +3461545676-3473725502 +3751769544-3774673277 +772066259-780246746 +3356968359-3362991077 +1605924820-1613022664 +4015102292-4053454231 +4206207007-4214797098 +1335854520-1363709511 +823795603-854558918 +3290449369-3304490685 +2540570240-2570730498 +749722515-756306609 +3442398495-3465001104 +4229168442-4235745839 +150802546-151838496 +1380772851-1392292807 +4190472817-4203706683 +1466784263-1498319230 +50105778-54260393 +0-2793737 +2956453641-2979008390 +2552426525-2553141195 +3069828750-3083762421 +2800389226-2809306363 +2275201948-2301909928 +670647362-674039479 +2639146472-2642836023 +3846421788-3895249037 +326561664-329333434 +188182835-189612566 +4253790781-4254533752 +1804500603-1806558363 +2405370554-2428432104 +3608464545-3623946707 +2353553540-2360491647 +1325917396-1352060617 +3577002908-3585168985 +1864487525-1877898802 +2535505356-2540570238 +2012841949-2013535208 +4122773972-4147066021 +2221253241-2227916854 +3996989806-4013388815 +1118808237-1118876034 +406730726-412027046 +2830200680-2841462745 +4009639150-4012108169 +3387543681-3395550318 +2412794571-2444576238 +1022924735-1024398890 +643270862-663974523 +907974347-909753482 +4148481231-4151899399 +2061333796-2061422413 +3844115908-3844704314 +296503398-319176563 +2743436711-2744991704 +1024231444-1050533093 +2976066221-2982350583 +3913440938-3921340086 +2546064716-2552639130 +647510635-649788184 +1861939256-1878905542 +1119182827-1127962138 +4176776277-4185432506 +1728041199-1736154206 +1905044208-1915920572 +1860265438-1881626361 +2934389290-2943526097 +1068791968-1074539223 +3124236778-3149982255 +286582234-304243327 +2100258789-2123748546 +3432475911-3432766967 +82082661-88073370 +2327755908-2338617065 +734803505-734970787 +4225862764-4241303856 +1352060618-1372691007 +2552301217-2552408303 +3873980245-3908789488 +734733934-734933525 +913241510-934606910 +1746136669-1783130039 +3478455269-3482503593 +2300261034-2307782855 +3248901770-3254155181 +651662856-660523209 +1118827933-1118873914 +3495324533-3508390070 +3614090639-3630342601 +4152623878-4165068841 +4251257735-4252768738 +740064940-744628705 +2663526-7317845 +3173018368-3173033650 +840243299-850630387 +874982768-893955653 +4195369814-4215042523 +3712999015-3713605711 +3167305950-3179505229 +68345070-74894937 +3467499056-3471357060 +623795984-626879791 +533357402-536413407 +3551720149-3555281211 +3933921906-3941710756 +1732833292-1736931431 +1172618521-1194746246 +2011668991-2019214712 +4173423213-4185833738 +4129967821-4130008117 +2025432624-2029847095 +1663590084-1670239922 +1677571493-1698026005 +1167726098-1232818725 +3785872097-3790663631 +3140695377-3166258968 +2971784945-2974988576 +538998996-562454834 +4225819511-4229474556 +610567638-613651106 +2462186480-2480650826 +75973934-91434042 +2688408664-2707934393 +228951782-267685402 +1783130040-1784614561 +1872942515-1880846327 +1262147457-1263932136 +4024512115-4053495116 +579938959-585172735 +602874206-610295015 +403990885-414323983 +1730191207-1736990500 +3623946708-3627097897 +1350246834-1362835856 +232836175-284581763 +1569378906-1570007725 +3026358814-3033526682 +1636906011-1655244443 +1346904336-1351608843 +363534678-372420875 +3465001105-3471897467 +3934746154-3952361164 +7208229-13983082 +3469317144-3474090343 +4280938719-4290730270 +2020957337-2022484776 +1692136283-1719643620 +4032740692-4053771021 +2972345930-2975812534 +140067848-159037627 +3630086418-3634626029 +3252572678-3274451634 +77141551-85341019 +692066237-700847528 +3552713357-3558885449 +3075915215-3085817045 +4162664504-4169419288 +124626946-135046727 +1884442708-1905044207 +3703243550-3704832207 +2220909545-2224015721 +2692074751-2692885915 +1069864185-1073578735 +2691786564-2692864691 +1737853571-1745347739 +95461456-115187423 +143224398-144838969 +2138286928-2151694571 +867061374-882471488 +983262449-1001173152 +4129969371-4130354697 +3470641201-3487201657 +2051110734-2064915382 +747750272-758258548 +3333190532-3365085965 +3015765512-3029456808 +3265304770-3277560812 +546123550-551416184 +3622334530-3628645995 +1927820889-1967493838 +3871603105-3889565720 +529055056-557056663 +2061323456-2061416792 +614047849-615723475 +1421830422-1438217488 +893955655-899822408 +2836598019-2847622397 +3513797149-3566405119 +2073594551-2086857816 +3848735454-3851859716 +2350779348-2362218008 +1157368724-1159211721 +1472023233-1491740523 +409000134-412025522 +973866742-991888713 +1668403284-1669772137 +499560567-510329898 +267685403-276025076 +1214847765-1215067953 +2969721904-2972007967 +585291343-591565800 +1232818727-1248762127 +2829953392-2835562942 +3581151256-3592382743 +3138701074-3144007132 +1411308101-1412230389 +2005544666-2044382522 +3588499596-3590044644 +409649298-412147889 +2729008724-2746584170 +2271068854-2273711594 +3908832580-3914932215 +335104351-395790944 +1473266198-1475735364 +91434044-136650095 +2061500256-2061621366 +3046851992-3046857394 +1045645522-1053843281 +3062437124-3066285848 +2953128494-2956453639 +2287457295-2292066307 +670003013-672161332 +999493075-1005063611 +2468468433-2475614015 +1784620864-1794208355 +1840652757-1842609020 +2736112937-2745142809 +445972682-455985981 +1400181442-1408982387 +2727005736-2744339492 +1372691009-1399083499 +1258925192-1259447558 +3572543625-3573210768 +2855143621-2872648483 +3524287180-3550477388 +2401321114-2401936589 +188464419-190820937 +873632167-889945153 +6333787-9214022 +866108152-883525080 +588215939-596870293 +6123882-6333786 +1945222555-1965326766 +1450943271-1455273678 +1071513900-1075274877 +4066257746-4107013454 +3743897533-3750360675 +2210516312-2243489046 +739672099-743664201 +1190706188-1231785159 +1541206073-1552994486 +3512385624-3513610248 +4004909328-4014105124 +1552994488-1583336095 +2691601784-2692559045 +2959924467-2960061300 +2065049768-2073594549 +2928347959-2948232651 +2737697310-2739140372 +3440216783-3442065814 +137081234-137703805 +1455284245-1455810565 +1261449358-1261530545 +3839728048-3846372390 +4054367050-4055961594 +3439834313-3441586831 +608984617-613222255 +499254004-518922214 +2175403815-2205135632 +1454597594-1455393440 +693379909-700041190 +1736154207-1737853569 +4010049861-4012151447 +3836393111-3838773709 +1506443565-1527056312 +334384992-335104349 +3432143787-3438801061 +600863019-608705787 +136650096-136849627 +3836270310-3838516660 +3746890560-3764006100 +791648716-794185505 +987754526-999694763 +2099169385-2119583372 +641698158-648180068 +3460880474-3481616563 +3813294403-3818142124 +1317229673-1321947166 +2017066792-2036619196 +1169805608-1194307388 +702695743-722588266 +19217566-33973125 +32718247-42062630 +210053297-217544318 +3911504558-3933321555 +3975617006-3984996156 +551283440-558238333 +1127962140-1141935253 +1136611230-1157368723 +2379700479-2401127625 +54260395-75973933 +1952020827-1967209978 +1264200368-1316734882 +1397096904-1403128933 +1258173114-1259068731 +989260243-995310756 +1799866888-1833669063 +137517987-137808457 +3730940245-3762938051 +2963015846-2980970857 +600863799-603995952 +338151951-378904722 +3027117516-3030869045 +2785828139-2786645836 +1079328174-1079992013 +1053843283-1069416181 +1060967066-1061236944 +3487201659-3496293770 +3347750745-3362523105 +1338305534-1352171648 +1438217489-1462489105 +4197364536-4222741711 +3189733030-3234111514 +451903598-461106580 +2097704515-2099471338 +304243328-325969066 +2086846158-2113069670 +2545746395-2547066650 +3895249038-3906283534 +895659434-904873439 +1856927180-1866112900 +2775894269-2810724921 +1324244959-1325601021 +846667177-848199595 +3505699661-3506197363 +871734319-878294262 +4258853578-4294967295 +3880214909-3895480719 +1986216334-1986348856 +742290938-753736254 +3234111516-3258189066 +3383899774-3396452612 +3501809450-3512385622 +3378934393-3392160599 +3079010157-3098817100 +1803429736-1805049104 +2166530895-2176167104 +1317292508-1322866502 +1832462772-1847638033 +333679750-334384991 +72032218-76605612 +17348575-50105777 +484459786-489813452 +3046849434-3046856389 +3467134484-3473562579 +2803678490-2810293665 +3794709054-3822236055 +3186979605-3189733029 +2695314106-2700550784 +1699535593-1705619603 +2237090616-2240620274 +1448226508-1452768177 +2397634923-2402113900 +3900871909-3908832578 +4277179118-4284467979 +869824885-875039223 +3193444038-3195088604 +2098172269-2099552847 +3166258970-3174350156 +3713306332-3730940243 +3790663633-3807120965 +3193807148-3198905625 +2686964362-2695658937 +3046846149-3046946514 +605656762-611150528 +3489750890-3497886462 +397630917-403990883 +3074826378-3080783127 +492235894-493663068 +642025801-643219257 +788627002-789236451 +3084604998-3115741036 +3371549848-3374946439 +3874793389-3876408934 +1139585817-1143207799 +3174350157-3186979603 +639635957-642849593 +1597646197-1612855132 +1382702163-1398831616 +684158166-713176675 +1894143091-1917115741 +2089306322-2114752226 +2578960283-2621599896 +1532015022-1546127235 +1324354899-1325917394 +2416646543-2437368922 +2269877523-2275201946 +1992225975-2000270993 +640306549-643270861 +3044180773-3051507071 +2775774779-2793333778 +1691451382-1692811369 +939103383-944332736 +1888996559-1920171303 +2268109491-2269877522 +2215835480-2260579751 +602969274-607505129 +1604071710-1613863780 +3050099422-3052240627 +3628771809-3629905363 +3875733031-3886920632 +1079554232-1083825209 +4121927827-4137657636 +1185125973-1212455950 +3691832998-3711433854 +3128913327-3142493871 +4136061085-4148481230 +183514025-223274420 +1692066643-1696528120 +666994178-678090088 +2754770797-2759197512 +3628299759-3628932735 +596038993-600863017 +2166543044-2179778402 +787127754-788139041 +2552150503-2552363008 +3258189067-3269060433 +2282238677-2289889500 +2833059982-2837278958 +2887027445-2928347957 +2012405876-2032624685 +787098717-787195228 +1468456416-1495861617 +1677947927-1720886831 +2345295255-2357276476 +3982867112-3996989804 +3952361166-3982867111 +2822115640-2865481783 +748108837-753342957 +3838773710-3843041501 +2129888578-2151896843 +859599485-871063826 +3258061263-3260134830 +3333184176-3370719083 +4252768739-4258730892 +2621599897-2626383698 +3691176288-3710040996 +3294271054-3294614974 +1297573835-1313952886 +1689064095-1727538616 +4111227623-4121927825 +3377701672-3394223952 +3457691408-3475080606 +1439643724-1454465680 +2050656519-2065049767 +3915610103-3945886566 +451360431-486638413 +1979886573-1992225974 +1081566438-1088850009 +2656393854-2668773976 +3294056463-3294326494 +3242916477-3253418464 +1341083507-1344391028 +2110664130-2123875999 +2049746107-2050500846 +3841089640-3844211293 +3837279464-3842572520 +2865481784-2885687079 +2271061510-2272621997 +2269988720-2270241311 +1202018544-1229602920 +2712322516-2753492383 +1257333433-1258706059 +2653038423-2675082201 +955515750-959548963 +1285036550-1301703071 +2769057410-2775774777 +2428432105-2446718114 +2446718116-2468468432 +2344149965-2353553539 +1427316534-1430111473 +2205135633-2210516310 +2753492385-2769057409 +1886236958-1909206855 +465545077-470595473 +4270417833-4279802697 +1516656167-1519514351 +2810724922-2822115638 +1992340399-2004656981 +1109811498-1124752055 +1390540334-1390759638 +3377856394-3382045950 +2366638179-2397634922 +1118808079-1118848239 +5926527-6123881 +1671674170-1691100484 +5819501-6106336 +2490564635-2514000009 +311106391-314727280 +314059640-315255926 +4010827162-4011730305 +4010139590-4011598075 +1803265906-1803834597 +2497969870-2535505355 +1671431570-1689108789 +151189360-154214893 \ No newline at end of file diff --git a/2016/day20/lang.rkt b/2016/day20/lang.rkt new file mode 100644 index 0000000..1be5288 --- /dev/null +++ b/2016/day20/lang.rkt @@ -0,0 +1,47 @@ +#lang br/quicklang ;; http://adventofcode.com/2016/day/18 +(provide read-syntax + cons + (rename-out [mb #%module-begin])) + +(define (read-syntax path port) + (strip-bindings + #`(module mod "lang.rkt" + #,@(for/list ([line (in-list (string-split (port->string port) "\n"))]) + `(cons ,@(map string->number (string-split line "-"))))))) + +(define-macro (mb . RANGE-PAIRS) + #'(#%module-begin + (define range-pairs (sort (list . RANGE-PAIRS) < #:key car)) + (solve-a range-pairs) + (solve-b range-pairs))) + +(define (solve-a range-pairs) + (for/first ([left (in-list range-pairs)] + [right (in-list (cdr range-pairs))] + #:when (> (- (car right) (cdr left)) 1)) + (add1 (cdr left)))) + +(define (find-overlap n ranges) + (and (pair? ranges) + (for/first ([r (in-list ranges)] + #:when (<= (car r) n (cdr r))) + r))) + +(define (solve-b range-pairs) + (define rps (for/fold ([rps empty]) + ([rp (in-list (append range-pairs '((4294967295 . 4294967295))))]) + (define next-rps rps) + (define left (or + (let ([result (find-overlap (car rp) rps)]) + (and result (set! next-rps (remove result next-rps)) (car result))) + (car rp))) + (define right (or + (let ([result (find-overlap (cdr rp) rps)]) + (and result (set! next-rps (remove result next-rps)) (cdr result))) + (cdr rp))) + (cons (cons left right) next-rps))) + (define sorted-rps (sort rps < #:key car)) + (for/sum ([left (in-list sorted-rps)] + [right (in-list (cdr sorted-rps))] + #:when (> (- (car right) (cdr left)) 1)) + (- (car right) (cdr left) 1))) \ No newline at end of file diff --git a/2016/day20/test.rkt b/2016/day20/test.rkt new file mode 100644 index 0000000..edc49c7 --- /dev/null +++ b/2016/day20/test.rkt @@ -0,0 +1,4 @@ +#lang reader "lang.rkt" +5-8 +0-2 +4-7 -- 2.25.1 From daa8be8e0ada70f5e229c0ec0bfe25c566924f61 Mon Sep 17 00:00:00 2001 From: Matthew Butterick Date: Tue, 20 Dec 2016 22:18:38 -0800 Subject: [PATCH 37/43] day21 --- 2016/day19/lang.rkt | 2 +- 2016/day20/lang.rkt | 2 +- 2016/day21/input.rkt | 102 +++++++++++++++++++++++++++++++++++++++++++ 2016/day21/lang.rkt | 80 +++++++++++++++++++++++++++++++++ 2016/day21/test.rkt | 10 +++++ 5 files changed, 194 insertions(+), 2 deletions(-) create mode 100644 2016/day21/input.rkt create mode 100644 2016/day21/lang.rkt create mode 100644 2016/day21/test.rkt diff --git a/2016/day19/lang.rkt b/2016/day19/lang.rkt index 036ae0f..4eda1f0 100644 --- a/2016/day19/lang.rkt +++ b/2016/day19/lang.rkt @@ -1,4 +1,4 @@ -#lang br/quicklang ;; http://adventofcode.com/2016/day/18 +#lang br/quicklang ;; http://adventofcode.com/2016/day/19 (provide read-syntax (rename-out [mb #%module-begin])) diff --git a/2016/day20/lang.rkt b/2016/day20/lang.rkt index 1be5288..a52eec9 100644 --- a/2016/day20/lang.rkt +++ b/2016/day20/lang.rkt @@ -1,4 +1,4 @@ -#lang br/quicklang ;; http://adventofcode.com/2016/day/18 +#lang br/quicklang ;; http://adventofcode.com/2016/day/20 (provide read-syntax cons (rename-out [mb #%module-begin])) diff --git a/2016/day21/input.rkt b/2016/day21/input.rkt new file mode 100644 index 0000000..de2bf9c --- /dev/null +++ b/2016/day21/input.rkt @@ -0,0 +1,102 @@ +#lang reader "lang.rkt" +abcdefgh +swap position 5 with position 6 +reverse positions 1 through 6 +rotate right 7 steps +rotate based on position of letter c +rotate right 7 steps +reverse positions 0 through 4 +swap letter f with letter h +reverse positions 1 through 2 +move position 1 to position 0 +rotate based on position of letter f +move position 6 to position 3 +reverse positions 3 through 6 +rotate based on position of letter c +rotate based on position of letter b +move position 2 to position 4 +swap letter b with letter d +move position 1 to position 6 +move position 7 to position 1 +swap letter f with letter c +move position 2 to position 3 +swap position 1 with position 7 +reverse positions 3 through 5 +swap position 1 with position 4 +move position 4 to position 7 +rotate right 4 steps +reverse positions 3 through 6 +move position 0 to position 6 +swap position 3 with position 5 +swap letter e with letter h +rotate based on position of letter c +swap position 4 with position 7 +reverse positions 0 through 5 +rotate right 5 steps +rotate left 0 steps +rotate based on position of letter f +swap letter e with letter b +rotate right 2 steps +rotate based on position of letter c +swap letter a with letter e +rotate left 4 steps +rotate left 0 steps +move position 6 to position 7 +rotate right 2 steps +rotate left 6 steps +rotate based on position of letter d +swap letter a with letter b +move position 5 to position 4 +reverse positions 0 through 7 +rotate left 3 steps +rotate based on position of letter e +rotate based on position of letter h +swap position 4 with position 6 +reverse positions 4 through 5 +reverse positions 5 through 7 +rotate left 3 steps +move position 7 to position 2 +move position 3 to position 4 +swap letter b with letter d +reverse positions 3 through 4 +swap letter e with letter a +rotate left 4 steps +swap position 3 with position 4 +swap position 7 with position 5 +rotate right 1 step +rotate based on position of letter g +reverse positions 0 through 3 +swap letter g with letter b +rotate based on position of letter b +swap letter a with letter c +swap position 0 with position 2 +reverse positions 1 through 3 +rotate left 7 steps +swap letter f with letter a +move position 5 to position 0 +reverse positions 1 through 5 +rotate based on position of letter d +rotate based on position of letter c +rotate left 2 steps +swap letter b with letter a +swap letter f with letter c +swap letter h with letter f +rotate based on position of letter b +rotate left 3 steps +swap letter b with letter h +reverse positions 1 through 7 +rotate based on position of letter h +swap position 1 with position 5 +rotate left 1 step +rotate based on position of letter h +reverse positions 0 through 1 +swap position 5 with position 7 +reverse positions 0 through 2 +reverse positions 1 through 3 +move position 1 to position 4 +reverse positions 1 through 3 +rotate left 1 step +swap position 4 with position 1 +move position 1 to position 3 +rotate right 2 steps +move position 0 to position 5 \ No newline at end of file diff --git a/2016/day21/lang.rkt b/2016/day21/lang.rkt new file mode 100644 index 0000000..b1e8cec --- /dev/null +++ b/2016/day21/lang.rkt @@ -0,0 +1,80 @@ +#lang br/quicklang ;; http://adventofcode.com/2016/day/21 +(provide read-syntax + (rename-out [mb #%module-begin])) + +(define (read-syntax path port) + (strip-bindings + (let ([lines (string-split (port->string port) "\n")]) + #`(module mod "lang.rkt" + #,(car lines) + #,@(for/list ([args (in-list (map string-split (cdr lines)))]) + `(inst ,@(map (λ(arg) (or (string->number arg) arg)) args))))))) + +(define-macro (mb CODE . INSTS) + #'(#%module-begin + (define (explode str) (regexp-match* #rx"." str)) + (define (scramble code) + (apply string-append + (vector->list + (for/fold ([code (apply vector (explode code))]) + ([proc (in-list (list . INSTS))]) + (proc code))))) + (scramble CODE) + (for*/first ([uplist (in-permutations (explode "fbgdceah"))] + [up (in-value (string-join uplist ""))] + #:when (equal? (scramble up) "fbgdceah")) + up))) + +(define-macro-cases inst + [(_ "swap" "position" X "with" "position" Y) #'(swap-position X Y)] + [(_ "swap" "letter" X "with" "letter" Y) #'(swap-letter X Y)] + [(_ "reverse" "positions" X "through" Y) #'(reverse-letters X Y)] + [(_ "rotate" DIR NUM _) #'(rotate DIR NUM)] + [(_ "move" "position" X "to" "position" Y) #'(move X Y)] + [(_ "rotate" "based" "on" "position" "of" "letter" X) #'(rotate-letter X)]) +(provide inst) + +(define (swap-position xidx yidx) + (λ(v) + (define tmp (vector-ref v xidx)) + (vector-set*! v xidx (vector-ref v yidx) yidx tmp) + v)) + +(define (swap-letter x y) + (λ(v) ((swap-position (vector-member x v) (vector-member y v)) v))) + +(define (reverse-letters xidx yidx) + (λ(v) + (define letter-idxs (range xidx (add1 yidx))) + (define letters + (for/list ([idx (in-list letter-idxs)]) + (vector-ref v idx))) + (for ([idx (in-list (reverse letter-idxs))] + [letter (in-list letters)]) + (vector-set! v idx letter)) + v)) + +(require sugar/list) +(define (rotate dir num) + (λ(v) + (list->vector + ((if (equal? "left" dir) + shift-left-cycle + shift-cycle) (vector->list v) num)))) + +(define (rotate-letter x) + (λ(v) + (define xidx (vector-member x v)) + (define rotval (+ 1 xidx (if (>= xidx 4) 1 0))) + ((rotate "right" rotval) v))) + +(define (move xidx yidx) + (λ(v) + (define xs (vector->list v)) + (define-values (head tail) (split-at xs xidx)) + (define x (car tail)) + (define new-xs (append head (cdr tail))) + (define-values (newhead newtail) (split-at new-xs yidx)) + (list->vector (append newhead (list x) newtail)))) + + diff --git a/2016/day21/test.rkt b/2016/day21/test.rkt new file mode 100644 index 0000000..bf75555 --- /dev/null +++ b/2016/day21/test.rkt @@ -0,0 +1,10 @@ +#lang reader "lang.rkt" +abcde +swap position 4 with position 0 +swap letter d with letter b +reverse positions 0 through 4 +rotate left 1 step +move position 1 to position 4 +move position 3 to position 0 +rotate based on position of letter b +rotate based on position of letter d \ No newline at end of file -- 2.25.1 From a4d0ffa256c5dde50ebb9789ce945d279c06d031 Mon Sep 17 00:00:00 2001 From: Matthew Butterick Date: Wed, 21 Dec 2016 22:11:52 -0800 Subject: [PATCH 38/43] start day22 --- 2016/day22/input.rkt | 1053 ++++++++++++++++++++++++++++++++++++++++++ 2016/day22/lang.rkt | 33 ++ 2016/day22/test.rkt | 1 + 3 files changed, 1087 insertions(+) create mode 100644 2016/day22/input.rkt create mode 100644 2016/day22/lang.rkt create mode 100644 2016/day22/test.rkt diff --git a/2016/day22/input.rkt b/2016/day22/input.rkt new file mode 100644 index 0000000..afebe54 --- /dev/null +++ b/2016/day22/input.rkt @@ -0,0 +1,1053 @@ +#lang reader "lang.rkt" +root@ebhq-gridcenter# df -h +Filesystem Size Used Avail Use% +/dev/grid/node-x0-y0 92T 73T 19T 79% +/dev/grid/node-x0-y1 91T 66T 25T 72% +/dev/grid/node-x0-y2 85T 73T 12T 85% +/dev/grid/node-x0-y3 85T 68T 17T 80% +/dev/grid/node-x0-y4 87T 67T 20T 77% +/dev/grid/node-x0-y5 88T 69T 19T 78% +/dev/grid/node-x0-y6 88T 68T 20T 77% +/dev/grid/node-x0-y7 92T 66T 26T 71% +/dev/grid/node-x0-y8 89T 69T 20T 77% +/dev/grid/node-x0-y9 90T 73T 17T 81% +/dev/grid/node-x0-y10 90T 72T 18T 80% +/dev/grid/node-x0-y11 87T 72T 15T 82% +/dev/grid/node-x0-y12 87T 71T 16T 81% +/dev/grid/node-x0-y13 87T 71T 16T 81% +/dev/grid/node-x0-y14 90T 71T 19T 78% +/dev/grid/node-x0-y15 86T 64T 22T 74% +/dev/grid/node-x0-y16 85T 69T 16T 81% +/dev/grid/node-x0-y17 91T 68T 23T 74% +/dev/grid/node-x0-y18 85T 73T 12T 85% +/dev/grid/node-x0-y19 93T 66T 27T 70% +/dev/grid/node-x0-y20 88T 66T 22T 75% +/dev/grid/node-x0-y21 85T 70T 15T 82% +/dev/grid/node-x0-y22 89T 67T 22T 75% +/dev/grid/node-x0-y23 92T 64T 28T 69% +/dev/grid/node-x0-y24 92T 68T 24T 73% +/dev/grid/node-x0-y25 91T 64T 27T 70% +/dev/grid/node-x0-y26 85T 67T 18T 78% +/dev/grid/node-x0-y27 89T 72T 17T 80% +/dev/grid/node-x0-y28 86T 65T 21T 75% +/dev/grid/node-x0-y29 91T 72T 19T 79% +/dev/grid/node-x0-y30 90T 66T 24T 73% +/dev/grid/node-x0-y31 90T 70T 20T 77% +/dev/grid/node-x0-y32 90T 65T 25T 72% +/dev/grid/node-x0-y33 90T 73T 17T 81% +/dev/grid/node-x0-y34 93T 69T 24T 74% +/dev/grid/node-x1-y0 91T 73T 18T 80% +/dev/grid/node-x1-y1 94T 69T 25T 73% +/dev/grid/node-x1-y2 89T 66T 23T 74% +/dev/grid/node-x1-y3 94T 72T 22T 76% +/dev/grid/node-x1-y4 89T 65T 24T 73% +/dev/grid/node-x1-y5 89T 69T 20T 77% +/dev/grid/node-x1-y6 87T 66T 21T 75% +/dev/grid/node-x1-y7 92T 64T 28T 69% +/dev/grid/node-x1-y8 85T 69T 16T 81% +/dev/grid/node-x1-y9 93T 69T 24T 74% +/dev/grid/node-x1-y10 88T 70T 18T 79% +/dev/grid/node-x1-y11 87T 70T 17T 80% +/dev/grid/node-x1-y12 90T 70T 20T 77% +/dev/grid/node-x1-y13 94T 64T 30T 68% +/dev/grid/node-x1-y14 89T 72T 17T 80% +/dev/grid/node-x1-y15 93T 71T 22T 76% +/dev/grid/node-x1-y16 502T 495T 7T 98% +/dev/grid/node-x1-y17 87T 73T 14T 83% +/dev/grid/node-x1-y18 88T 71T 17T 80% +/dev/grid/node-x1-y19 87T 68T 19T 78% +/dev/grid/node-x1-y20 85T 73T 12T 85% +/dev/grid/node-x1-y21 93T 69T 24T 74% +/dev/grid/node-x1-y22 94T 68T 26T 72% +/dev/grid/node-x1-y23 88T 71T 17T 80% +/dev/grid/node-x1-y24 89T 69T 20T 77% +/dev/grid/node-x1-y25 88T 67T 21T 76% +/dev/grid/node-x1-y26 86T 67T 19T 77% +/dev/grid/node-x1-y27 92T 72T 20T 78% +/dev/grid/node-x1-y28 94T 73T 21T 77% +/dev/grid/node-x1-y29 94T 64T 30T 68% +/dev/grid/node-x1-y30 88T 67T 21T 76% +/dev/grid/node-x1-y31 86T 66T 20T 76% +/dev/grid/node-x1-y32 93T 64T 29T 68% +/dev/grid/node-x1-y33 93T 66T 27T 70% +/dev/grid/node-x1-y34 88T 68T 20T 77% +/dev/grid/node-x2-y0 94T 65T 29T 69% +/dev/grid/node-x2-y1 85T 68T 17T 80% +/dev/grid/node-x2-y2 94T 66T 28T 70% +/dev/grid/node-x2-y3 89T 72T 17T 80% +/dev/grid/node-x2-y4 88T 70T 18T 79% +/dev/grid/node-x2-y5 91T 71T 20T 78% +/dev/grid/node-x2-y6 88T 69T 19T 78% +/dev/grid/node-x2-y7 89T 66T 23T 74% +/dev/grid/node-x2-y8 90T 70T 20T 77% +/dev/grid/node-x2-y9 90T 71T 19T 78% +/dev/grid/node-x2-y10 90T 69T 21T 76% +/dev/grid/node-x2-y11 85T 68T 17T 80% +/dev/grid/node-x2-y12 94T 67T 27T 71% +/dev/grid/node-x2-y13 87T 70T 17T 80% +/dev/grid/node-x2-y14 94T 67T 27T 71% +/dev/grid/node-x2-y15 93T 64T 29T 68% +/dev/grid/node-x2-y16 507T 495T 12T 97% +/dev/grid/node-x2-y17 86T 70T 16T 81% +/dev/grid/node-x2-y18 94T 70T 24T 74% +/dev/grid/node-x2-y19 89T 64T 25T 71% +/dev/grid/node-x2-y20 87T 70T 17T 80% +/dev/grid/node-x2-y21 92T 65T 27T 70% +/dev/grid/node-x2-y22 93T 71T 22T 76% +/dev/grid/node-x2-y23 93T 64T 29T 68% +/dev/grid/node-x2-y24 94T 66T 28T 70% +/dev/grid/node-x2-y25 89T 70T 19T 78% +/dev/grid/node-x2-y26 86T 67T 19T 77% +/dev/grid/node-x2-y27 89T 65T 24T 73% +/dev/grid/node-x2-y28 90T 73T 17T 81% +/dev/grid/node-x2-y29 93T 67T 26T 72% +/dev/grid/node-x2-y30 94T 66T 28T 70% +/dev/grid/node-x2-y31 87T 66T 21T 75% +/dev/grid/node-x2-y32 90T 69T 21T 76% +/dev/grid/node-x2-y33 90T 73T 17T 81% +/dev/grid/node-x2-y34 91T 65T 26T 71% +/dev/grid/node-x3-y0 91T 67T 24T 73% +/dev/grid/node-x3-y1 85T 70T 15T 82% +/dev/grid/node-x3-y2 91T 67T 24T 73% +/dev/grid/node-x3-y3 93T 66T 27T 70% +/dev/grid/node-x3-y4 94T 70T 24T 74% +/dev/grid/node-x3-y5 94T 71T 23T 75% +/dev/grid/node-x3-y6 94T 70T 24T 74% +/dev/grid/node-x3-y7 93T 64T 29T 68% +/dev/grid/node-x3-y8 90T 70T 20T 77% +/dev/grid/node-x3-y9 91T 64T 27T 70% +/dev/grid/node-x3-y10 90T 72T 18T 80% +/dev/grid/node-x3-y11 88T 64T 24T 72% +/dev/grid/node-x3-y12 87T 73T 14T 83% +/dev/grid/node-x3-y13 91T 73T 18T 80% +/dev/grid/node-x3-y14 94T 64T 30T 68% +/dev/grid/node-x3-y15 94T 70T 24T 74% +/dev/grid/node-x3-y16 504T 490T 14T 97% +/dev/grid/node-x3-y17 94T 69T 25T 73% +/dev/grid/node-x3-y18 92T 66T 26T 71% +/dev/grid/node-x3-y19 94T 73T 21T 77% +/dev/grid/node-x3-y20 90T 66T 24T 73% +/dev/grid/node-x3-y21 89T 67T 22T 75% +/dev/grid/node-x3-y22 92T 67T 25T 72% +/dev/grid/node-x3-y23 90T 68T 22T 75% +/dev/grid/node-x3-y24 85T 68T 17T 80% +/dev/grid/node-x3-y25 89T 67T 22T 75% +/dev/grid/node-x3-y26 88T 71T 17T 80% +/dev/grid/node-x3-y27 85T 71T 14T 83% +/dev/grid/node-x3-y28 89T 65T 24T 73% +/dev/grid/node-x3-y29 88T 69T 19T 78% +/dev/grid/node-x3-y30 89T 70T 19T 78% +/dev/grid/node-x3-y31 94T 72T 22T 76% +/dev/grid/node-x3-y32 85T 71T 14T 83% +/dev/grid/node-x3-y33 90T 65T 25T 72% +/dev/grid/node-x3-y34 88T 69T 19T 78% +/dev/grid/node-x4-y0 92T 66T 26T 71% +/dev/grid/node-x4-y1 85T 66T 19T 77% +/dev/grid/node-x4-y2 86T 72T 14T 83% +/dev/grid/node-x4-y3 90T 67T 23T 74% +/dev/grid/node-x4-y4 91T 67T 24T 73% +/dev/grid/node-x4-y5 94T 72T 22T 76% +/dev/grid/node-x4-y6 85T 66T 19T 77% +/dev/grid/node-x4-y7 87T 66T 21T 75% +/dev/grid/node-x4-y8 91T 72T 19T 79% +/dev/grid/node-x4-y9 92T 66T 26T 71% +/dev/grid/node-x4-y10 93T 70T 23T 75% +/dev/grid/node-x4-y11 89T 65T 24T 73% +/dev/grid/node-x4-y12 90T 70T 20T 77% +/dev/grid/node-x4-y13 86T 69T 17T 80% +/dev/grid/node-x4-y14 85T 72T 13T 84% +/dev/grid/node-x4-y15 88T 68T 20T 77% +/dev/grid/node-x4-y16 501T 497T 4T 99% +/dev/grid/node-x4-y17 92T 67T 25T 72% +/dev/grid/node-x4-y18 94T 66T 28T 70% +/dev/grid/node-x4-y19 87T 66T 21T 75% +/dev/grid/node-x4-y20 91T 69T 22T 75% +/dev/grid/node-x4-y21 93T 66T 27T 70% +/dev/grid/node-x4-y22 89T 68T 21T 76% +/dev/grid/node-x4-y23 89T 68T 21T 76% +/dev/grid/node-x4-y24 90T 65T 25T 72% +/dev/grid/node-x4-y25 94T 0T 94T 0% +/dev/grid/node-x4-y26 92T 71T 21T 77% +/dev/grid/node-x4-y27 90T 69T 21T 76% +/dev/grid/node-x4-y28 93T 68T 25T 73% +/dev/grid/node-x4-y29 93T 65T 28T 69% +/dev/grid/node-x4-y30 88T 70T 18T 79% +/dev/grid/node-x4-y31 93T 70T 23T 75% +/dev/grid/node-x4-y32 94T 68T 26T 72% +/dev/grid/node-x4-y33 89T 71T 18T 79% +/dev/grid/node-x4-y34 93T 69T 24T 74% +/dev/grid/node-x5-y0 86T 65T 21T 75% +/dev/grid/node-x5-y1 85T 68T 17T 80% +/dev/grid/node-x5-y2 89T 67T 22T 75% +/dev/grid/node-x5-y3 92T 71T 21T 77% +/dev/grid/node-x5-y4 93T 66T 27T 70% +/dev/grid/node-x5-y5 89T 73T 16T 82% +/dev/grid/node-x5-y6 87T 71T 16T 81% +/dev/grid/node-x5-y7 85T 70T 15T 82% +/dev/grid/node-x5-y8 91T 65T 26T 71% +/dev/grid/node-x5-y9 86T 69T 17T 80% +/dev/grid/node-x5-y10 86T 71T 15T 82% +/dev/grid/node-x5-y11 88T 69T 19T 78% +/dev/grid/node-x5-y12 92T 66T 26T 71% +/dev/grid/node-x5-y13 85T 65T 20T 76% +/dev/grid/node-x5-y14 86T 67T 19T 77% +/dev/grid/node-x5-y15 88T 72T 16T 81% +/dev/grid/node-x5-y16 503T 492T 11T 97% +/dev/grid/node-x5-y17 88T 70T 18T 79% +/dev/grid/node-x5-y18 87T 71T 16T 81% +/dev/grid/node-x5-y19 92T 71T 21T 77% +/dev/grid/node-x5-y20 90T 69T 21T 76% +/dev/grid/node-x5-y21 91T 69T 22T 75% +/dev/grid/node-x5-y22 88T 66T 22T 75% +/dev/grid/node-x5-y23 94T 68T 26T 72% +/dev/grid/node-x5-y24 89T 64T 25T 71% +/dev/grid/node-x5-y25 86T 69T 17T 80% +/dev/grid/node-x5-y26 85T 73T 12T 85% +/dev/grid/node-x5-y27 92T 70T 22T 76% +/dev/grid/node-x5-y28 89T 69T 20T 77% +/dev/grid/node-x5-y29 87T 65T 22T 74% +/dev/grid/node-x5-y30 92T 73T 19T 79% +/dev/grid/node-x5-y31 86T 68T 18T 79% +/dev/grid/node-x5-y32 88T 73T 15T 82% +/dev/grid/node-x5-y33 85T 73T 12T 85% +/dev/grid/node-x5-y34 87T 72T 15T 82% +/dev/grid/node-x6-y0 90T 70T 20T 77% +/dev/grid/node-x6-y1 91T 65T 26T 71% +/dev/grid/node-x6-y2 93T 66T 27T 70% +/dev/grid/node-x6-y3 88T 65T 23T 73% +/dev/grid/node-x6-y4 90T 73T 17T 81% +/dev/grid/node-x6-y5 86T 64T 22T 74% +/dev/grid/node-x6-y6 91T 73T 18T 80% +/dev/grid/node-x6-y7 92T 65T 27T 70% +/dev/grid/node-x6-y8 93T 68T 25T 73% +/dev/grid/node-x6-y9 92T 65T 27T 70% +/dev/grid/node-x6-y10 86T 67T 19T 77% +/dev/grid/node-x6-y11 91T 66T 25T 72% +/dev/grid/node-x6-y12 89T 72T 17T 80% +/dev/grid/node-x6-y13 87T 72T 15T 82% +/dev/grid/node-x6-y14 92T 71T 21T 77% +/dev/grid/node-x6-y15 89T 64T 25T 71% +/dev/grid/node-x6-y16 501T 499T 2T 99% +/dev/grid/node-x6-y17 85T 71T 14T 83% +/dev/grid/node-x6-y18 86T 67T 19T 77% +/dev/grid/node-x6-y19 89T 71T 18T 79% +/dev/grid/node-x6-y20 86T 67T 19T 77% +/dev/grid/node-x6-y21 92T 68T 24T 73% +/dev/grid/node-x6-y22 86T 71T 15T 82% +/dev/grid/node-x6-y23 88T 68T 20T 77% +/dev/grid/node-x6-y24 92T 71T 21T 77% +/dev/grid/node-x6-y25 93T 68T 25T 73% +/dev/grid/node-x6-y26 86T 65T 21T 75% +/dev/grid/node-x6-y27 89T 68T 21T 76% +/dev/grid/node-x6-y28 87T 64T 23T 73% +/dev/grid/node-x6-y29 94T 67T 27T 71% +/dev/grid/node-x6-y30 89T 69T 20T 77% +/dev/grid/node-x6-y31 86T 64T 22T 74% +/dev/grid/node-x6-y32 86T 71T 15T 82% +/dev/grid/node-x6-y33 89T 71T 18T 79% +/dev/grid/node-x6-y34 86T 72T 14T 83% +/dev/grid/node-x7-y0 90T 64T 26T 71% +/dev/grid/node-x7-y1 93T 69T 24T 74% +/dev/grid/node-x7-y2 87T 64T 23T 73% +/dev/grid/node-x7-y3 90T 71T 19T 78% +/dev/grid/node-x7-y4 89T 64T 25T 71% +/dev/grid/node-x7-y5 92T 70T 22T 76% +/dev/grid/node-x7-y6 87T 72T 15T 82% +/dev/grid/node-x7-y7 90T 66T 24T 73% +/dev/grid/node-x7-y8 94T 69T 25T 73% +/dev/grid/node-x7-y9 85T 66T 19T 77% +/dev/grid/node-x7-y10 89T 71T 18T 79% +/dev/grid/node-x7-y11 91T 66T 25T 72% +/dev/grid/node-x7-y12 93T 68T 25T 73% +/dev/grid/node-x7-y13 91T 66T 25T 72% +/dev/grid/node-x7-y14 87T 73T 14T 83% +/dev/grid/node-x7-y15 88T 68T 20T 77% +/dev/grid/node-x7-y16 506T 490T 16T 96% +/dev/grid/node-x7-y17 93T 72T 21T 77% +/dev/grid/node-x7-y18 86T 65T 21T 75% +/dev/grid/node-x7-y19 92T 71T 21T 77% +/dev/grid/node-x7-y20 93T 65T 28T 69% +/dev/grid/node-x7-y21 93T 67T 26T 72% +/dev/grid/node-x7-y22 92T 67T 25T 72% +/dev/grid/node-x7-y23 94T 72T 22T 76% +/dev/grid/node-x7-y24 92T 64T 28T 69% +/dev/grid/node-x7-y25 93T 73T 20T 78% +/dev/grid/node-x7-y26 85T 73T 12T 85% +/dev/grid/node-x7-y27 91T 71T 20T 78% +/dev/grid/node-x7-y28 92T 72T 20T 78% +/dev/grid/node-x7-y29 88T 64T 24T 72% +/dev/grid/node-x7-y30 90T 69T 21T 76% +/dev/grid/node-x7-y31 90T 70T 20T 77% +/dev/grid/node-x7-y32 87T 66T 21T 75% +/dev/grid/node-x7-y33 91T 72T 19T 79% +/dev/grid/node-x7-y34 86T 64T 22T 74% +/dev/grid/node-x8-y0 87T 66T 21T 75% +/dev/grid/node-x8-y1 90T 64T 26T 71% +/dev/grid/node-x8-y2 94T 68T 26T 72% +/dev/grid/node-x8-y3 92T 68T 24T 73% +/dev/grid/node-x8-y4 92T 68T 24T 73% +/dev/grid/node-x8-y5 91T 66T 25T 72% +/dev/grid/node-x8-y6 94T 73T 21T 77% +/dev/grid/node-x8-y7 85T 65T 20T 76% +/dev/grid/node-x8-y8 90T 73T 17T 81% +/dev/grid/node-x8-y9 86T 72T 14T 83% +/dev/grid/node-x8-y10 93T 72T 21T 77% +/dev/grid/node-x8-y11 91T 72T 19T 79% +/dev/grid/node-x8-y12 90T 64T 26T 71% +/dev/grid/node-x8-y13 91T 71T 20T 78% +/dev/grid/node-x8-y14 85T 64T 21T 75% +/dev/grid/node-x8-y15 93T 68T 25T 73% +/dev/grid/node-x8-y16 503T 497T 6T 98% +/dev/grid/node-x8-y17 92T 68T 24T 73% +/dev/grid/node-x8-y18 85T 67T 18T 78% +/dev/grid/node-x8-y19 91T 67T 24T 73% +/dev/grid/node-x8-y20 91T 71T 20T 78% +/dev/grid/node-x8-y21 91T 73T 18T 80% +/dev/grid/node-x8-y22 89T 73T 16T 82% +/dev/grid/node-x8-y23 88T 70T 18T 79% +/dev/grid/node-x8-y24 94T 71T 23T 75% +/dev/grid/node-x8-y25 92T 73T 19T 79% +/dev/grid/node-x8-y26 86T 69T 17T 80% +/dev/grid/node-x8-y27 87T 71T 16T 81% +/dev/grid/node-x8-y28 92T 65T 27T 70% +/dev/grid/node-x8-y29 94T 65T 29T 69% +/dev/grid/node-x8-y30 91T 73T 18T 80% +/dev/grid/node-x8-y31 85T 69T 16T 81% +/dev/grid/node-x8-y32 88T 68T 20T 77% +/dev/grid/node-x8-y33 86T 66T 20T 76% +/dev/grid/node-x8-y34 92T 70T 22T 76% +/dev/grid/node-x9-y0 87T 65T 22T 74% +/dev/grid/node-x9-y1 87T 66T 21T 75% +/dev/grid/node-x9-y2 89T 66T 23T 74% +/dev/grid/node-x9-y3 86T 73T 13T 84% +/dev/grid/node-x9-y4 88T 73T 15T 82% +/dev/grid/node-x9-y5 94T 70T 24T 74% +/dev/grid/node-x9-y6 91T 73T 18T 80% +/dev/grid/node-x9-y7 93T 73T 20T 78% +/dev/grid/node-x9-y8 85T 73T 12T 85% +/dev/grid/node-x9-y9 88T 69T 19T 78% +/dev/grid/node-x9-y10 86T 65T 21T 75% +/dev/grid/node-x9-y11 88T 66T 22T 75% +/dev/grid/node-x9-y12 87T 73T 14T 83% +/dev/grid/node-x9-y13 92T 65T 27T 70% +/dev/grid/node-x9-y14 92T 69T 23T 75% +/dev/grid/node-x9-y15 90T 70T 20T 77% +/dev/grid/node-x9-y16 509T 496T 13T 97% +/dev/grid/node-x9-y17 88T 65T 23T 73% +/dev/grid/node-x9-y18 92T 73T 19T 79% +/dev/grid/node-x9-y19 87T 70T 17T 80% +/dev/grid/node-x9-y20 87T 64T 23T 73% +/dev/grid/node-x9-y21 92T 65T 27T 70% +/dev/grid/node-x9-y22 92T 71T 21T 77% +/dev/grid/node-x9-y23 94T 69T 25T 73% +/dev/grid/node-x9-y24 89T 73T 16T 82% +/dev/grid/node-x9-y25 87T 66T 21T 75% +/dev/grid/node-x9-y26 90T 67T 23T 74% +/dev/grid/node-x9-y27 94T 73T 21T 77% +/dev/grid/node-x9-y28 91T 67T 24T 73% +/dev/grid/node-x9-y29 88T 73T 15T 82% +/dev/grid/node-x9-y30 85T 73T 12T 85% +/dev/grid/node-x9-y31 93T 65T 28T 69% +/dev/grid/node-x9-y32 89T 67T 22T 75% +/dev/grid/node-x9-y33 91T 70T 21T 76% +/dev/grid/node-x9-y34 86T 73T 13T 84% +/dev/grid/node-x10-y0 93T 68T 25T 73% +/dev/grid/node-x10-y1 87T 72T 15T 82% +/dev/grid/node-x10-y2 90T 69T 21T 76% +/dev/grid/node-x10-y3 89T 67T 22T 75% +/dev/grid/node-x10-y4 90T 66T 24T 73% +/dev/grid/node-x10-y5 89T 72T 17T 80% +/dev/grid/node-x10-y6 88T 65T 23T 73% +/dev/grid/node-x10-y7 88T 72T 16T 81% +/dev/grid/node-x10-y8 93T 65T 28T 69% +/dev/grid/node-x10-y9 91T 67T 24T 73% +/dev/grid/node-x10-y10 88T 68T 20T 77% +/dev/grid/node-x10-y11 85T 65T 20T 76% +/dev/grid/node-x10-y12 93T 64T 29T 68% +/dev/grid/node-x10-y13 93T 65T 28T 69% +/dev/grid/node-x10-y14 87T 65T 22T 74% +/dev/grid/node-x10-y15 91T 70T 21T 76% +/dev/grid/node-x10-y16 506T 491T 15T 97% +/dev/grid/node-x10-y17 92T 67T 25T 72% +/dev/grid/node-x10-y18 93T 73T 20T 78% +/dev/grid/node-x10-y19 88T 67T 21T 76% +/dev/grid/node-x10-y20 88T 69T 19T 78% +/dev/grid/node-x10-y21 85T 66T 19T 77% +/dev/grid/node-x10-y22 90T 68T 22T 75% +/dev/grid/node-x10-y23 90T 71T 19T 78% +/dev/grid/node-x10-y24 85T 73T 12T 85% +/dev/grid/node-x10-y25 85T 70T 15T 82% +/dev/grid/node-x10-y26 94T 73T 21T 77% +/dev/grid/node-x10-y27 91T 67T 24T 73% +/dev/grid/node-x10-y28 88T 64T 24T 72% +/dev/grid/node-x10-y29 87T 70T 17T 80% +/dev/grid/node-x10-y30 87T 69T 18T 79% +/dev/grid/node-x10-y31 94T 71T 23T 75% +/dev/grid/node-x10-y32 87T 66T 21T 75% +/dev/grid/node-x10-y33 92T 70T 22T 76% +/dev/grid/node-x10-y34 91T 68T 23T 74% +/dev/grid/node-x11-y0 94T 73T 21T 77% +/dev/grid/node-x11-y1 88T 72T 16T 81% +/dev/grid/node-x11-y2 92T 66T 26T 71% +/dev/grid/node-x11-y3 87T 65T 22T 74% +/dev/grid/node-x11-y4 93T 70T 23T 75% +/dev/grid/node-x11-y5 89T 72T 17T 80% +/dev/grid/node-x11-y6 93T 71T 22T 76% +/dev/grid/node-x11-y7 89T 66T 23T 74% +/dev/grid/node-x11-y8 93T 67T 26T 72% +/dev/grid/node-x11-y9 89T 72T 17T 80% +/dev/grid/node-x11-y10 90T 65T 25T 72% +/dev/grid/node-x11-y11 91T 66T 25T 72% +/dev/grid/node-x11-y12 94T 70T 24T 74% +/dev/grid/node-x11-y13 87T 64T 23T 73% +/dev/grid/node-x11-y14 88T 64T 24T 72% +/dev/grid/node-x11-y15 85T 64T 21T 75% +/dev/grid/node-x11-y16 501T 496T 5T 99% +/dev/grid/node-x11-y17 87T 71T 16T 81% +/dev/grid/node-x11-y18 89T 73T 16T 82% +/dev/grid/node-x11-y19 92T 73T 19T 79% +/dev/grid/node-x11-y20 87T 66T 21T 75% +/dev/grid/node-x11-y21 91T 64T 27T 70% +/dev/grid/node-x11-y22 92T 65T 27T 70% +/dev/grid/node-x11-y23 92T 66T 26T 71% +/dev/grid/node-x11-y24 90T 65T 25T 72% +/dev/grid/node-x11-y25 91T 73T 18T 80% +/dev/grid/node-x11-y26 93T 65T 28T 69% +/dev/grid/node-x11-y27 86T 66T 20T 76% +/dev/grid/node-x11-y28 88T 71T 17T 80% +/dev/grid/node-x11-y29 87T 65T 22T 74% +/dev/grid/node-x11-y30 91T 69T 22T 75% +/dev/grid/node-x11-y31 85T 65T 20T 76% +/dev/grid/node-x11-y32 94T 65T 29T 69% +/dev/grid/node-x11-y33 85T 71T 14T 83% +/dev/grid/node-x11-y34 93T 68T 25T 73% +/dev/grid/node-x12-y0 94T 65T 29T 69% +/dev/grid/node-x12-y1 93T 70T 23T 75% +/dev/grid/node-x12-y2 93T 66T 27T 70% +/dev/grid/node-x12-y3 85T 72T 13T 84% +/dev/grid/node-x12-y4 93T 71T 22T 76% +/dev/grid/node-x12-y5 93T 67T 26T 72% +/dev/grid/node-x12-y6 87T 71T 16T 81% +/dev/grid/node-x12-y7 86T 71T 15T 82% +/dev/grid/node-x12-y8 85T 71T 14T 83% +/dev/grid/node-x12-y9 94T 68T 26T 72% +/dev/grid/node-x12-y10 86T 69T 17T 80% +/dev/grid/node-x12-y11 93T 67T 26T 72% +/dev/grid/node-x12-y12 86T 66T 20T 76% +/dev/grid/node-x12-y13 90T 71T 19T 78% +/dev/grid/node-x12-y14 85T 65T 20T 76% +/dev/grid/node-x12-y15 88T 68T 20T 77% +/dev/grid/node-x12-y16 503T 494T 9T 98% +/dev/grid/node-x12-y17 89T 67T 22T 75% +/dev/grid/node-x12-y18 93T 68T 25T 73% +/dev/grid/node-x12-y19 86T 64T 22T 74% +/dev/grid/node-x12-y20 91T 66T 25T 72% +/dev/grid/node-x12-y21 90T 71T 19T 78% +/dev/grid/node-x12-y22 93T 71T 22T 76% +/dev/grid/node-x12-y23 85T 68T 17T 80% +/dev/grid/node-x12-y24 94T 68T 26T 72% +/dev/grid/node-x12-y25 94T 67T 27T 71% +/dev/grid/node-x12-y26 94T 73T 21T 77% +/dev/grid/node-x12-y27 85T 67T 18T 78% +/dev/grid/node-x12-y28 93T 68T 25T 73% +/dev/grid/node-x12-y29 85T 72T 13T 84% +/dev/grid/node-x12-y30 88T 72T 16T 81% +/dev/grid/node-x12-y31 87T 70T 17T 80% +/dev/grid/node-x12-y32 86T 70T 16T 81% +/dev/grid/node-x12-y33 91T 65T 26T 71% +/dev/grid/node-x12-y34 93T 69T 24T 74% +/dev/grid/node-x13-y0 92T 72T 20T 78% +/dev/grid/node-x13-y1 88T 66T 22T 75% +/dev/grid/node-x13-y2 90T 70T 20T 77% +/dev/grid/node-x13-y3 90T 73T 17T 81% +/dev/grid/node-x13-y4 86T 72T 14T 83% +/dev/grid/node-x13-y5 85T 72T 13T 84% +/dev/grid/node-x13-y6 92T 65T 27T 70% +/dev/grid/node-x13-y7 87T 72T 15T 82% +/dev/grid/node-x13-y8 86T 68T 18T 79% +/dev/grid/node-x13-y9 90T 70T 20T 77% +/dev/grid/node-x13-y10 86T 67T 19T 77% +/dev/grid/node-x13-y11 93T 67T 26T 72% +/dev/grid/node-x13-y12 90T 64T 26T 71% +/dev/grid/node-x13-y13 86T 72T 14T 83% +/dev/grid/node-x13-y14 93T 69T 24T 74% +/dev/grid/node-x13-y15 91T 71T 20T 78% +/dev/grid/node-x13-y16 503T 497T 6T 98% +/dev/grid/node-x13-y17 93T 64T 29T 68% +/dev/grid/node-x13-y18 90T 65T 25T 72% +/dev/grid/node-x13-y19 86T 65T 21T 75% +/dev/grid/node-x13-y20 86T 66T 20T 76% +/dev/grid/node-x13-y21 86T 71T 15T 82% +/dev/grid/node-x13-y22 89T 64T 25T 71% +/dev/grid/node-x13-y23 92T 68T 24T 73% +/dev/grid/node-x13-y24 85T 67T 18T 78% +/dev/grid/node-x13-y25 89T 69T 20T 77% +/dev/grid/node-x13-y26 91T 69T 22T 75% +/dev/grid/node-x13-y27 89T 69T 20T 77% +/dev/grid/node-x13-y28 90T 69T 21T 76% +/dev/grid/node-x13-y29 94T 71T 23T 75% +/dev/grid/node-x13-y30 92T 68T 24T 73% +/dev/grid/node-x13-y31 87T 66T 21T 75% +/dev/grid/node-x13-y32 91T 64T 27T 70% +/dev/grid/node-x13-y33 88T 65T 23T 73% +/dev/grid/node-x13-y34 92T 66T 26T 71% +/dev/grid/node-x14-y0 85T 66T 19T 77% +/dev/grid/node-x14-y1 94T 70T 24T 74% +/dev/grid/node-x14-y2 92T 68T 24T 73% +/dev/grid/node-x14-y3 86T 71T 15T 82% +/dev/grid/node-x14-y4 90T 71T 19T 78% +/dev/grid/node-x14-y5 92T 68T 24T 73% +/dev/grid/node-x14-y6 94T 65T 29T 69% +/dev/grid/node-x14-y7 89T 67T 22T 75% +/dev/grid/node-x14-y8 87T 70T 17T 80% +/dev/grid/node-x14-y9 89T 70T 19T 78% +/dev/grid/node-x14-y10 91T 70T 21T 76% +/dev/grid/node-x14-y11 91T 65T 26T 71% +/dev/grid/node-x14-y12 92T 72T 20T 78% +/dev/grid/node-x14-y13 94T 66T 28T 70% +/dev/grid/node-x14-y14 88T 71T 17T 80% +/dev/grid/node-x14-y15 91T 71T 20T 78% +/dev/grid/node-x14-y16 509T 499T 10T 98% +/dev/grid/node-x14-y17 85T 69T 16T 81% +/dev/grid/node-x14-y18 86T 67T 19T 77% +/dev/grid/node-x14-y19 89T 68T 21T 76% +/dev/grid/node-x14-y20 94T 72T 22T 76% +/dev/grid/node-x14-y21 86T 71T 15T 82% +/dev/grid/node-x14-y22 90T 67T 23T 74% +/dev/grid/node-x14-y23 86T 69T 17T 80% +/dev/grid/node-x14-y24 93T 65T 28T 69% +/dev/grid/node-x14-y25 94T 71T 23T 75% +/dev/grid/node-x14-y26 94T 67T 27T 71% +/dev/grid/node-x14-y27 93T 73T 20T 78% +/dev/grid/node-x14-y28 88T 66T 22T 75% +/dev/grid/node-x14-y29 94T 65T 29T 69% +/dev/grid/node-x14-y30 87T 73T 14T 83% +/dev/grid/node-x14-y31 93T 67T 26T 72% +/dev/grid/node-x14-y32 88T 69T 19T 78% +/dev/grid/node-x14-y33 86T 68T 18T 79% +/dev/grid/node-x14-y34 86T 70T 16T 81% +/dev/grid/node-x15-y0 94T 68T 26T 72% +/dev/grid/node-x15-y1 87T 65T 22T 74% +/dev/grid/node-x15-y2 89T 65T 24T 73% +/dev/grid/node-x15-y3 93T 66T 27T 70% +/dev/grid/node-x15-y4 90T 72T 18T 80% +/dev/grid/node-x15-y5 94T 73T 21T 77% +/dev/grid/node-x15-y6 89T 67T 22T 75% +/dev/grid/node-x15-y7 85T 70T 15T 82% +/dev/grid/node-x15-y8 86T 68T 18T 79% +/dev/grid/node-x15-y9 92T 70T 22T 76% +/dev/grid/node-x15-y10 93T 65T 28T 69% +/dev/grid/node-x15-y11 88T 67T 21T 76% +/dev/grid/node-x15-y12 87T 69T 18T 79% +/dev/grid/node-x15-y13 93T 67T 26T 72% +/dev/grid/node-x15-y14 85T 67T 18T 78% +/dev/grid/node-x15-y15 91T 73T 18T 80% +/dev/grid/node-x15-y16 508T 490T 18T 96% +/dev/grid/node-x15-y17 91T 65T 26T 71% +/dev/grid/node-x15-y18 86T 64T 22T 74% +/dev/grid/node-x15-y19 86T 73T 13T 84% +/dev/grid/node-x15-y20 89T 68T 21T 76% +/dev/grid/node-x15-y21 89T 69T 20T 77% +/dev/grid/node-x15-y22 87T 67T 20T 77% +/dev/grid/node-x15-y23 87T 65T 22T 74% +/dev/grid/node-x15-y24 87T 65T 22T 74% +/dev/grid/node-x15-y25 87T 67T 20T 77% +/dev/grid/node-x15-y26 88T 70T 18T 79% +/dev/grid/node-x15-y27 85T 72T 13T 84% +/dev/grid/node-x15-y28 91T 65T 26T 71% +/dev/grid/node-x15-y29 94T 73T 21T 77% +/dev/grid/node-x15-y30 91T 66T 25T 72% +/dev/grid/node-x15-y31 94T 71T 23T 75% +/dev/grid/node-x15-y32 86T 69T 17T 80% +/dev/grid/node-x15-y33 86T 69T 17T 80% +/dev/grid/node-x15-y34 90T 65T 25T 72% +/dev/grid/node-x16-y0 89T 72T 17T 80% +/dev/grid/node-x16-y1 85T 66T 19T 77% +/dev/grid/node-x16-y2 91T 65T 26T 71% +/dev/grid/node-x16-y3 90T 64T 26T 71% +/dev/grid/node-x16-y4 88T 67T 21T 76% +/dev/grid/node-x16-y5 91T 71T 20T 78% +/dev/grid/node-x16-y6 93T 69T 24T 74% +/dev/grid/node-x16-y7 91T 66T 25T 72% +/dev/grid/node-x16-y8 87T 71T 16T 81% +/dev/grid/node-x16-y9 94T 72T 22T 76% +/dev/grid/node-x16-y10 91T 69T 22T 75% +/dev/grid/node-x16-y11 92T 65T 27T 70% +/dev/grid/node-x16-y12 89T 69T 20T 77% +/dev/grid/node-x16-y13 87T 66T 21T 75% +/dev/grid/node-x16-y14 89T 64T 25T 71% +/dev/grid/node-x16-y15 89T 64T 25T 71% +/dev/grid/node-x16-y16 503T 494T 9T 98% +/dev/grid/node-x16-y17 88T 72T 16T 81% +/dev/grid/node-x16-y18 91T 68T 23T 74% +/dev/grid/node-x16-y19 87T 64T 23T 73% +/dev/grid/node-x16-y20 88T 72T 16T 81% +/dev/grid/node-x16-y21 92T 73T 19T 79% +/dev/grid/node-x16-y22 87T 69T 18T 79% +/dev/grid/node-x16-y23 87T 68T 19T 78% +/dev/grid/node-x16-y24 93T 65T 28T 69% +/dev/grid/node-x16-y25 85T 64T 21T 75% +/dev/grid/node-x16-y26 88T 68T 20T 77% +/dev/grid/node-x16-y27 92T 64T 28T 69% +/dev/grid/node-x16-y28 93T 67T 26T 72% +/dev/grid/node-x16-y29 93T 64T 29T 68% +/dev/grid/node-x16-y30 86T 71T 15T 82% +/dev/grid/node-x16-y31 92T 70T 22T 76% +/dev/grid/node-x16-y32 88T 71T 17T 80% +/dev/grid/node-x16-y33 89T 69T 20T 77% +/dev/grid/node-x16-y34 94T 68T 26T 72% +/dev/grid/node-x17-y0 90T 72T 18T 80% +/dev/grid/node-x17-y1 85T 66T 19T 77% +/dev/grid/node-x17-y2 86T 67T 19T 77% +/dev/grid/node-x17-y3 85T 66T 19T 77% +/dev/grid/node-x17-y4 93T 66T 27T 70% +/dev/grid/node-x17-y5 85T 64T 21T 75% +/dev/grid/node-x17-y6 93T 72T 21T 77% +/dev/grid/node-x17-y7 88T 65T 23T 73% +/dev/grid/node-x17-y8 92T 70T 22T 76% +/dev/grid/node-x17-y9 85T 64T 21T 75% +/dev/grid/node-x17-y10 91T 72T 19T 79% +/dev/grid/node-x17-y11 93T 73T 20T 78% +/dev/grid/node-x17-y12 94T 73T 21T 77% +/dev/grid/node-x17-y13 87T 65T 22T 74% +/dev/grid/node-x17-y14 85T 68T 17T 80% +/dev/grid/node-x17-y15 90T 72T 18T 80% +/dev/grid/node-x17-y16 503T 495T 8T 98% +/dev/grid/node-x17-y17 88T 64T 24T 72% +/dev/grid/node-x17-y18 94T 72T 22T 76% +/dev/grid/node-x17-y19 88T 66T 22T 75% +/dev/grid/node-x17-y20 86T 70T 16T 81% +/dev/grid/node-x17-y21 87T 73T 14T 83% +/dev/grid/node-x17-y22 91T 71T 20T 78% +/dev/grid/node-x17-y23 85T 67T 18T 78% +/dev/grid/node-x17-y24 89T 66T 23T 74% +/dev/grid/node-x17-y25 89T 64T 25T 71% +/dev/grid/node-x17-y26 86T 73T 13T 84% +/dev/grid/node-x17-y27 93T 71T 22T 76% +/dev/grid/node-x17-y28 94T 70T 24T 74% +/dev/grid/node-x17-y29 89T 65T 24T 73% +/dev/grid/node-x17-y30 89T 66T 23T 74% +/dev/grid/node-x17-y31 94T 68T 26T 72% +/dev/grid/node-x17-y32 89T 73T 16T 82% +/dev/grid/node-x17-y33 86T 73T 13T 84% +/dev/grid/node-x17-y34 90T 64T 26T 71% +/dev/grid/node-x18-y0 87T 67T 20T 77% +/dev/grid/node-x18-y1 91T 71T 20T 78% +/dev/grid/node-x18-y2 85T 70T 15T 82% +/dev/grid/node-x18-y3 89T 68T 21T 76% +/dev/grid/node-x18-y4 90T 66T 24T 73% +/dev/grid/node-x18-y5 87T 65T 22T 74% +/dev/grid/node-x18-y6 89T 70T 19T 78% +/dev/grid/node-x18-y7 85T 71T 14T 83% +/dev/grid/node-x18-y8 91T 69T 22T 75% +/dev/grid/node-x18-y9 94T 68T 26T 72% +/dev/grid/node-x18-y10 85T 71T 14T 83% +/dev/grid/node-x18-y11 93T 68T 25T 73% +/dev/grid/node-x18-y12 93T 72T 21T 77% +/dev/grid/node-x18-y13 85T 70T 15T 82% +/dev/grid/node-x18-y14 90T 64T 26T 71% +/dev/grid/node-x18-y15 85T 67T 18T 78% +/dev/grid/node-x18-y16 503T 493T 10T 98% +/dev/grid/node-x18-y17 86T 73T 13T 84% +/dev/grid/node-x18-y18 92T 72T 20T 78% +/dev/grid/node-x18-y19 90T 65T 25T 72% +/dev/grid/node-x18-y20 87T 64T 23T 73% +/dev/grid/node-x18-y21 90T 73T 17T 81% +/dev/grid/node-x18-y22 85T 72T 13T 84% +/dev/grid/node-x18-y23 87T 73T 14T 83% +/dev/grid/node-x18-y24 88T 67T 21T 76% +/dev/grid/node-x18-y25 90T 67T 23T 74% +/dev/grid/node-x18-y26 85T 67T 18T 78% +/dev/grid/node-x18-y27 86T 72T 14T 83% +/dev/grid/node-x18-y28 93T 71T 22T 76% +/dev/grid/node-x18-y29 88T 64T 24T 72% +/dev/grid/node-x18-y30 89T 73T 16T 82% +/dev/grid/node-x18-y31 89T 67T 22T 75% +/dev/grid/node-x18-y32 91T 65T 26T 71% +/dev/grid/node-x18-y33 91T 70T 21T 76% +/dev/grid/node-x18-y34 88T 70T 18T 79% +/dev/grid/node-x19-y0 90T 70T 20T 77% +/dev/grid/node-x19-y1 90T 68T 22T 75% +/dev/grid/node-x19-y2 91T 65T 26T 71% +/dev/grid/node-x19-y3 87T 72T 15T 82% +/dev/grid/node-x19-y4 87T 67T 20T 77% +/dev/grid/node-x19-y5 91T 64T 27T 70% +/dev/grid/node-x19-y6 87T 69T 18T 79% +/dev/grid/node-x19-y7 88T 72T 16T 81% +/dev/grid/node-x19-y8 91T 73T 18T 80% +/dev/grid/node-x19-y9 86T 68T 18T 79% +/dev/grid/node-x19-y10 86T 68T 18T 79% +/dev/grid/node-x19-y11 94T 71T 23T 75% +/dev/grid/node-x19-y12 93T 66T 27T 70% +/dev/grid/node-x19-y13 88T 69T 19T 78% +/dev/grid/node-x19-y14 85T 70T 15T 82% +/dev/grid/node-x19-y15 85T 73T 12T 85% +/dev/grid/node-x19-y16 507T 498T 9T 98% +/dev/grid/node-x19-y17 94T 65T 29T 69% +/dev/grid/node-x19-y18 92T 67T 25T 72% +/dev/grid/node-x19-y19 89T 64T 25T 71% +/dev/grid/node-x19-y20 86T 67T 19T 77% +/dev/grid/node-x19-y21 93T 69T 24T 74% +/dev/grid/node-x19-y22 94T 66T 28T 70% +/dev/grid/node-x19-y23 92T 72T 20T 78% +/dev/grid/node-x19-y24 94T 70T 24T 74% +/dev/grid/node-x19-y25 93T 68T 25T 73% +/dev/grid/node-x19-y26 93T 66T 27T 70% +/dev/grid/node-x19-y27 93T 70T 23T 75% +/dev/grid/node-x19-y28 85T 69T 16T 81% +/dev/grid/node-x19-y29 91T 72T 19T 79% +/dev/grid/node-x19-y30 85T 69T 16T 81% +/dev/grid/node-x19-y31 85T 69T 16T 81% +/dev/grid/node-x19-y32 91T 72T 19T 79% +/dev/grid/node-x19-y33 87T 68T 19T 78% +/dev/grid/node-x19-y34 86T 70T 16T 81% +/dev/grid/node-x20-y0 92T 64T 28T 69% +/dev/grid/node-x20-y1 89T 68T 21T 76% +/dev/grid/node-x20-y2 91T 64T 27T 70% +/dev/grid/node-x20-y3 90T 68T 22T 75% +/dev/grid/node-x20-y4 94T 72T 22T 76% +/dev/grid/node-x20-y5 93T 70T 23T 75% +/dev/grid/node-x20-y6 93T 64T 29T 68% +/dev/grid/node-x20-y7 91T 70T 21T 76% +/dev/grid/node-x20-y8 87T 68T 19T 78% +/dev/grid/node-x20-y9 92T 68T 24T 73% +/dev/grid/node-x20-y10 87T 71T 16T 81% +/dev/grid/node-x20-y11 89T 70T 19T 78% +/dev/grid/node-x20-y12 85T 66T 19T 77% +/dev/grid/node-x20-y13 94T 69T 25T 73% +/dev/grid/node-x20-y14 93T 67T 26T 72% +/dev/grid/node-x20-y15 88T 70T 18T 79% +/dev/grid/node-x20-y16 509T 492T 17T 96% +/dev/grid/node-x20-y17 85T 72T 13T 84% +/dev/grid/node-x20-y18 89T 65T 24T 73% +/dev/grid/node-x20-y19 86T 67T 19T 77% +/dev/grid/node-x20-y20 93T 67T 26T 72% +/dev/grid/node-x20-y21 90T 66T 24T 73% +/dev/grid/node-x20-y22 94T 71T 23T 75% +/dev/grid/node-x20-y23 93T 73T 20T 78% +/dev/grid/node-x20-y24 90T 67T 23T 74% +/dev/grid/node-x20-y25 94T 70T 24T 74% +/dev/grid/node-x20-y26 93T 67T 26T 72% +/dev/grid/node-x20-y27 88T 70T 18T 79% +/dev/grid/node-x20-y28 92T 72T 20T 78% +/dev/grid/node-x20-y29 89T 64T 25T 71% +/dev/grid/node-x20-y30 85T 71T 14T 83% +/dev/grid/node-x20-y31 94T 66T 28T 70% +/dev/grid/node-x20-y32 89T 71T 18T 79% +/dev/grid/node-x20-y33 89T 73T 16T 82% +/dev/grid/node-x20-y34 93T 72T 21T 77% +/dev/grid/node-x21-y0 88T 64T 24T 72% +/dev/grid/node-x21-y1 88T 66T 22T 75% +/dev/grid/node-x21-y2 90T 67T 23T 74% +/dev/grid/node-x21-y3 87T 70T 17T 80% +/dev/grid/node-x21-y4 91T 71T 20T 78% +/dev/grid/node-x21-y5 89T 67T 22T 75% +/dev/grid/node-x21-y6 93T 65T 28T 69% +/dev/grid/node-x21-y7 87T 69T 18T 79% +/dev/grid/node-x21-y8 87T 65T 22T 74% +/dev/grid/node-x21-y9 87T 66T 21T 75% +/dev/grid/node-x21-y10 88T 65T 23T 73% +/dev/grid/node-x21-y11 85T 65T 20T 76% +/dev/grid/node-x21-y12 89T 73T 16T 82% +/dev/grid/node-x21-y13 86T 66T 20T 76% +/dev/grid/node-x21-y14 92T 67T 25T 72% +/dev/grid/node-x21-y15 91T 73T 18T 80% +/dev/grid/node-x21-y16 510T 491T 19T 96% +/dev/grid/node-x21-y17 86T 71T 15T 82% +/dev/grid/node-x21-y18 86T 67T 19T 77% +/dev/grid/node-x21-y19 86T 69T 17T 80% +/dev/grid/node-x21-y20 90T 70T 20T 77% +/dev/grid/node-x21-y21 92T 65T 27T 70% +/dev/grid/node-x21-y22 93T 71T 22T 76% +/dev/grid/node-x21-y23 88T 67T 21T 76% +/dev/grid/node-x21-y24 92T 66T 26T 71% +/dev/grid/node-x21-y25 92T 65T 27T 70% +/dev/grid/node-x21-y26 85T 73T 12T 85% +/dev/grid/node-x21-y27 91T 64T 27T 70% +/dev/grid/node-x21-y28 90T 66T 24T 73% +/dev/grid/node-x21-y29 94T 65T 29T 69% +/dev/grid/node-x21-y30 92T 72T 20T 78% +/dev/grid/node-x21-y31 94T 69T 25T 73% +/dev/grid/node-x21-y32 88T 66T 22T 75% +/dev/grid/node-x21-y33 94T 64T 30T 68% +/dev/grid/node-x21-y34 91T 66T 25T 72% +/dev/grid/node-x22-y0 85T 71T 14T 83% +/dev/grid/node-x22-y1 90T 68T 22T 75% +/dev/grid/node-x22-y2 94T 64T 30T 68% +/dev/grid/node-x22-y3 86T 64T 22T 74% +/dev/grid/node-x22-y4 86T 69T 17T 80% +/dev/grid/node-x22-y5 94T 71T 23T 75% +/dev/grid/node-x22-y6 87T 65T 22T 74% +/dev/grid/node-x22-y7 90T 70T 20T 77% +/dev/grid/node-x22-y8 86T 68T 18T 79% +/dev/grid/node-x22-y9 91T 72T 19T 79% +/dev/grid/node-x22-y10 90T 68T 22T 75% +/dev/grid/node-x22-y11 88T 73T 15T 82% +/dev/grid/node-x22-y12 87T 64T 23T 73% +/dev/grid/node-x22-y13 93T 68T 25T 73% +/dev/grid/node-x22-y14 93T 69T 24T 74% +/dev/grid/node-x22-y15 94T 67T 27T 71% +/dev/grid/node-x22-y16 510T 493T 17T 96% +/dev/grid/node-x22-y17 87T 64T 23T 73% +/dev/grid/node-x22-y18 92T 70T 22T 76% +/dev/grid/node-x22-y19 85T 69T 16T 81% +/dev/grid/node-x22-y20 92T 68T 24T 73% +/dev/grid/node-x22-y21 86T 73T 13T 84% +/dev/grid/node-x22-y22 91T 65T 26T 71% +/dev/grid/node-x22-y23 93T 64T 29T 68% +/dev/grid/node-x22-y24 90T 65T 25T 72% +/dev/grid/node-x22-y25 86T 65T 21T 75% +/dev/grid/node-x22-y26 90T 70T 20T 77% +/dev/grid/node-x22-y27 91T 71T 20T 78% +/dev/grid/node-x22-y28 94T 70T 24T 74% +/dev/grid/node-x22-y29 89T 68T 21T 76% +/dev/grid/node-x22-y30 87T 73T 14T 83% +/dev/grid/node-x22-y31 92T 69T 23T 75% +/dev/grid/node-x22-y32 89T 66T 23T 74% +/dev/grid/node-x22-y33 87T 66T 21T 75% +/dev/grid/node-x22-y34 87T 67T 20T 77% +/dev/grid/node-x23-y0 85T 69T 16T 81% +/dev/grid/node-x23-y1 92T 69T 23T 75% +/dev/grid/node-x23-y2 85T 64T 21T 75% +/dev/grid/node-x23-y3 88T 72T 16T 81% +/dev/grid/node-x23-y4 87T 68T 19T 78% +/dev/grid/node-x23-y5 85T 70T 15T 82% +/dev/grid/node-x23-y6 88T 70T 18T 79% +/dev/grid/node-x23-y7 88T 70T 18T 79% +/dev/grid/node-x23-y8 92T 66T 26T 71% +/dev/grid/node-x23-y9 91T 65T 26T 71% +/dev/grid/node-x23-y10 92T 68T 24T 73% +/dev/grid/node-x23-y11 90T 73T 17T 81% +/dev/grid/node-x23-y12 92T 70T 22T 76% +/dev/grid/node-x23-y13 94T 65T 29T 69% +/dev/grid/node-x23-y14 94T 67T 27T 71% +/dev/grid/node-x23-y15 86T 66T 20T 76% +/dev/grid/node-x23-y16 501T 493T 8T 98% +/dev/grid/node-x23-y17 93T 70T 23T 75% +/dev/grid/node-x23-y18 92T 65T 27T 70% +/dev/grid/node-x23-y19 91T 70T 21T 76% +/dev/grid/node-x23-y20 90T 69T 21T 76% +/dev/grid/node-x23-y21 93T 71T 22T 76% +/dev/grid/node-x23-y22 93T 67T 26T 72% +/dev/grid/node-x23-y23 86T 69T 17T 80% +/dev/grid/node-x23-y24 87T 69T 18T 79% +/dev/grid/node-x23-y25 92T 73T 19T 79% +/dev/grid/node-x23-y26 89T 66T 23T 74% +/dev/grid/node-x23-y27 94T 68T 26T 72% +/dev/grid/node-x23-y28 92T 70T 22T 76% +/dev/grid/node-x23-y29 91T 71T 20T 78% +/dev/grid/node-x23-y30 93T 73T 20T 78% +/dev/grid/node-x23-y31 88T 64T 24T 72% +/dev/grid/node-x23-y32 93T 73T 20T 78% +/dev/grid/node-x23-y33 90T 71T 19T 78% +/dev/grid/node-x23-y34 93T 64T 29T 68% +/dev/grid/node-x24-y0 93T 70T 23T 75% +/dev/grid/node-x24-y1 88T 66T 22T 75% +/dev/grid/node-x24-y2 92T 67T 25T 72% +/dev/grid/node-x24-y3 91T 66T 25T 72% +/dev/grid/node-x24-y4 85T 70T 15T 82% +/dev/grid/node-x24-y5 85T 65T 20T 76% +/dev/grid/node-x24-y6 87T 70T 17T 80% +/dev/grid/node-x24-y7 91T 70T 21T 76% +/dev/grid/node-x24-y8 93T 65T 28T 69% +/dev/grid/node-x24-y9 86T 67T 19T 77% +/dev/grid/node-x24-y10 87T 72T 15T 82% +/dev/grid/node-x24-y11 88T 64T 24T 72% +/dev/grid/node-x24-y12 93T 73T 20T 78% +/dev/grid/node-x24-y13 92T 71T 21T 77% +/dev/grid/node-x24-y14 89T 68T 21T 76% +/dev/grid/node-x24-y15 94T 71T 23T 75% +/dev/grid/node-x24-y16 502T 495T 7T 98% +/dev/grid/node-x24-y17 94T 68T 26T 72% +/dev/grid/node-x24-y18 90T 69T 21T 76% +/dev/grid/node-x24-y19 89T 72T 17T 80% +/dev/grid/node-x24-y20 88T 70T 18T 79% +/dev/grid/node-x24-y21 93T 65T 28T 69% +/dev/grid/node-x24-y22 89T 68T 21T 76% +/dev/grid/node-x24-y23 85T 64T 21T 75% +/dev/grid/node-x24-y24 93T 71T 22T 76% +/dev/grid/node-x24-y25 86T 67T 19T 77% +/dev/grid/node-x24-y26 86T 70T 16T 81% +/dev/grid/node-x24-y27 91T 64T 27T 70% +/dev/grid/node-x24-y28 88T 70T 18T 79% +/dev/grid/node-x24-y29 90T 69T 21T 76% +/dev/grid/node-x24-y30 87T 67T 20T 77% +/dev/grid/node-x24-y31 85T 64T 21T 75% +/dev/grid/node-x24-y32 93T 70T 23T 75% +/dev/grid/node-x24-y33 85T 68T 17T 80% +/dev/grid/node-x24-y34 93T 70T 23T 75% +/dev/grid/node-x25-y0 87T 66T 21T 75% +/dev/grid/node-x25-y1 90T 70T 20T 77% +/dev/grid/node-x25-y2 88T 69T 19T 78% +/dev/grid/node-x25-y3 85T 70T 15T 82% +/dev/grid/node-x25-y4 90T 72T 18T 80% +/dev/grid/node-x25-y5 85T 72T 13T 84% +/dev/grid/node-x25-y6 91T 67T 24T 73% +/dev/grid/node-x25-y7 94T 66T 28T 70% +/dev/grid/node-x25-y8 89T 67T 22T 75% +/dev/grid/node-x25-y9 88T 71T 17T 80% +/dev/grid/node-x25-y10 90T 66T 24T 73% +/dev/grid/node-x25-y11 93T 66T 27T 70% +/dev/grid/node-x25-y12 85T 65T 20T 76% +/dev/grid/node-x25-y13 87T 68T 19T 78% +/dev/grid/node-x25-y14 88T 71T 17T 80% +/dev/grid/node-x25-y15 91T 72T 19T 79% +/dev/grid/node-x25-y16 505T 497T 8T 98% +/dev/grid/node-x25-y17 94T 69T 25T 73% +/dev/grid/node-x25-y18 87T 71T 16T 81% +/dev/grid/node-x25-y19 86T 73T 13T 84% +/dev/grid/node-x25-y20 92T 69T 23T 75% +/dev/grid/node-x25-y21 85T 66T 19T 77% +/dev/grid/node-x25-y22 89T 71T 18T 79% +/dev/grid/node-x25-y23 87T 70T 17T 80% +/dev/grid/node-x25-y24 93T 67T 26T 72% +/dev/grid/node-x25-y25 89T 73T 16T 82% +/dev/grid/node-x25-y26 85T 64T 21T 75% +/dev/grid/node-x25-y27 91T 68T 23T 74% +/dev/grid/node-x25-y28 88T 65T 23T 73% +/dev/grid/node-x25-y29 87T 72T 15T 82% +/dev/grid/node-x25-y30 87T 68T 19T 78% +/dev/grid/node-x25-y31 85T 64T 21T 75% +/dev/grid/node-x25-y32 93T 67T 26T 72% +/dev/grid/node-x25-y33 90T 66T 24T 73% +/dev/grid/node-x25-y34 86T 67T 19T 77% +/dev/grid/node-x26-y0 91T 69T 22T 75% +/dev/grid/node-x26-y1 93T 71T 22T 76% +/dev/grid/node-x26-y2 88T 65T 23T 73% +/dev/grid/node-x26-y3 88T 69T 19T 78% +/dev/grid/node-x26-y4 87T 64T 23T 73% +/dev/grid/node-x26-y5 88T 73T 15T 82% +/dev/grid/node-x26-y6 89T 73T 16T 82% +/dev/grid/node-x26-y7 88T 69T 19T 78% +/dev/grid/node-x26-y8 86T 67T 19T 77% +/dev/grid/node-x26-y9 85T 70T 15T 82% +/dev/grid/node-x26-y10 92T 65T 27T 70% +/dev/grid/node-x26-y11 85T 64T 21T 75% +/dev/grid/node-x26-y12 89T 72T 17T 80% +/dev/grid/node-x26-y13 88T 67T 21T 76% +/dev/grid/node-x26-y14 87T 73T 14T 83% +/dev/grid/node-x26-y15 85T 64T 21T 75% +/dev/grid/node-x26-y16 503T 492T 11T 97% +/dev/grid/node-x26-y17 85T 64T 21T 75% +/dev/grid/node-x26-y18 91T 70T 21T 76% +/dev/grid/node-x26-y19 90T 70T 20T 77% +/dev/grid/node-x26-y20 85T 72T 13T 84% +/dev/grid/node-x26-y21 94T 66T 28T 70% +/dev/grid/node-x26-y22 91T 67T 24T 73% +/dev/grid/node-x26-y23 92T 65T 27T 70% +/dev/grid/node-x26-y24 90T 70T 20T 77% +/dev/grid/node-x26-y25 86T 64T 22T 74% +/dev/grid/node-x26-y26 89T 69T 20T 77% +/dev/grid/node-x26-y27 86T 66T 20T 76% +/dev/grid/node-x26-y28 85T 71T 14T 83% +/dev/grid/node-x26-y29 93T 70T 23T 75% +/dev/grid/node-x26-y30 91T 69T 22T 75% +/dev/grid/node-x26-y31 94T 70T 24T 74% +/dev/grid/node-x26-y32 88T 69T 19T 78% +/dev/grid/node-x26-y33 88T 71T 17T 80% +/dev/grid/node-x26-y34 87T 67T 20T 77% +/dev/grid/node-x27-y0 87T 65T 22T 74% +/dev/grid/node-x27-y1 92T 73T 19T 79% +/dev/grid/node-x27-y2 91T 71T 20T 78% +/dev/grid/node-x27-y3 85T 73T 12T 85% +/dev/grid/node-x27-y4 86T 73T 13T 84% +/dev/grid/node-x27-y5 93T 70T 23T 75% +/dev/grid/node-x27-y6 90T 72T 18T 80% +/dev/grid/node-x27-y7 90T 64T 26T 71% +/dev/grid/node-x27-y8 85T 69T 16T 81% +/dev/grid/node-x27-y9 91T 64T 27T 70% +/dev/grid/node-x27-y10 94T 64T 30T 68% +/dev/grid/node-x27-y11 93T 70T 23T 75% +/dev/grid/node-x27-y12 86T 73T 13T 84% +/dev/grid/node-x27-y13 89T 66T 23T 74% +/dev/grid/node-x27-y14 90T 73T 17T 81% +/dev/grid/node-x27-y15 91T 70T 21T 76% +/dev/grid/node-x27-y16 508T 492T 16T 96% +/dev/grid/node-x27-y17 85T 70T 15T 82% +/dev/grid/node-x27-y18 90T 67T 23T 74% +/dev/grid/node-x27-y19 87T 66T 21T 75% +/dev/grid/node-x27-y20 85T 73T 12T 85% +/dev/grid/node-x27-y21 92T 67T 25T 72% +/dev/grid/node-x27-y22 86T 66T 20T 76% +/dev/grid/node-x27-y23 92T 69T 23T 75% +/dev/grid/node-x27-y24 89T 69T 20T 77% +/dev/grid/node-x27-y25 89T 65T 24T 73% +/dev/grid/node-x27-y26 90T 70T 20T 77% +/dev/grid/node-x27-y27 86T 67T 19T 77% +/dev/grid/node-x27-y28 86T 65T 21T 75% +/dev/grid/node-x27-y29 94T 65T 29T 69% +/dev/grid/node-x27-y30 90T 70T 20T 77% +/dev/grid/node-x27-y31 94T 67T 27T 71% +/dev/grid/node-x27-y32 90T 71T 19T 78% +/dev/grid/node-x27-y33 92T 66T 26T 71% +/dev/grid/node-x27-y34 94T 72T 22T 76% +/dev/grid/node-x28-y0 86T 69T 17T 80% +/dev/grid/node-x28-y1 94T 69T 25T 73% +/dev/grid/node-x28-y2 89T 65T 24T 73% +/dev/grid/node-x28-y3 86T 68T 18T 79% +/dev/grid/node-x28-y4 86T 73T 13T 84% +/dev/grid/node-x28-y5 90T 70T 20T 77% +/dev/grid/node-x28-y6 86T 65T 21T 75% +/dev/grid/node-x28-y7 88T 64T 24T 72% +/dev/grid/node-x28-y8 92T 68T 24T 73% +/dev/grid/node-x28-y9 91T 68T 23T 74% +/dev/grid/node-x28-y10 91T 73T 18T 80% +/dev/grid/node-x28-y11 88T 73T 15T 82% +/dev/grid/node-x28-y12 89T 65T 24T 73% +/dev/grid/node-x28-y13 93T 64T 29T 68% +/dev/grid/node-x28-y14 89T 72T 17T 80% +/dev/grid/node-x28-y15 92T 65T 27T 70% +/dev/grid/node-x28-y16 506T 492T 14T 97% +/dev/grid/node-x28-y17 85T 67T 18T 78% +/dev/grid/node-x28-y18 92T 64T 28T 69% +/dev/grid/node-x28-y19 89T 68T 21T 76% +/dev/grid/node-x28-y20 89T 72T 17T 80% +/dev/grid/node-x28-y21 86T 72T 14T 83% +/dev/grid/node-x28-y22 88T 71T 17T 80% +/dev/grid/node-x28-y23 90T 64T 26T 71% +/dev/grid/node-x28-y24 89T 64T 25T 71% +/dev/grid/node-x28-y25 88T 69T 19T 78% +/dev/grid/node-x28-y26 91T 67T 24T 73% +/dev/grid/node-x28-y27 87T 73T 14T 83% +/dev/grid/node-x28-y28 87T 65T 22T 74% +/dev/grid/node-x28-y29 85T 65T 20T 76% +/dev/grid/node-x28-y30 86T 71T 15T 82% +/dev/grid/node-x28-y31 92T 66T 26T 71% +/dev/grid/node-x28-y32 89T 72T 17T 80% +/dev/grid/node-x28-y33 90T 65T 25T 72% +/dev/grid/node-x28-y34 85T 65T 20T 76% +/dev/grid/node-x29-y0 85T 65T 20T 76% +/dev/grid/node-x29-y1 93T 71T 22T 76% +/dev/grid/node-x29-y2 90T 70T 20T 77% +/dev/grid/node-x29-y3 91T 65T 26T 71% +/dev/grid/node-x29-y4 92T 71T 21T 77% +/dev/grid/node-x29-y5 89T 67T 22T 75% +/dev/grid/node-x29-y6 94T 71T 23T 75% +/dev/grid/node-x29-y7 89T 71T 18T 79% +/dev/grid/node-x29-y8 87T 73T 14T 83% +/dev/grid/node-x29-y9 90T 70T 20T 77% +/dev/grid/node-x29-y10 88T 70T 18T 79% +/dev/grid/node-x29-y11 87T 68T 19T 78% +/dev/grid/node-x29-y12 88T 70T 18T 79% +/dev/grid/node-x29-y13 87T 73T 14T 83% +/dev/grid/node-x29-y14 93T 66T 27T 70% +/dev/grid/node-x29-y15 89T 71T 18T 79% +/dev/grid/node-x29-y16 501T 492T 9T 98% +/dev/grid/node-x29-y17 93T 71T 22T 76% +/dev/grid/node-x29-y18 88T 72T 16T 81% +/dev/grid/node-x29-y19 90T 71T 19T 78% +/dev/grid/node-x29-y20 89T 67T 22T 75% +/dev/grid/node-x29-y21 90T 66T 24T 73% +/dev/grid/node-x29-y22 85T 64T 21T 75% +/dev/grid/node-x29-y23 94T 66T 28T 70% +/dev/grid/node-x29-y24 94T 69T 25T 73% +/dev/grid/node-x29-y25 91T 71T 20T 78% +/dev/grid/node-x29-y26 86T 67T 19T 77% +/dev/grid/node-x29-y27 85T 68T 17T 80% +/dev/grid/node-x29-y28 86T 73T 13T 84% +/dev/grid/node-x29-y29 92T 64T 28T 69% +/dev/grid/node-x29-y30 94T 71T 23T 75% +/dev/grid/node-x29-y31 85T 70T 15T 82% +/dev/grid/node-x29-y32 92T 64T 28T 69% +/dev/grid/node-x29-y33 88T 67T 21T 76% +/dev/grid/node-x29-y34 86T 73T 13T 84% \ No newline at end of file diff --git a/2016/day22/lang.rkt b/2016/day22/lang.rkt new file mode 100644 index 0000000..86f2dc7 --- /dev/null +++ b/2016/day22/lang.rkt @@ -0,0 +1,33 @@ +#lang br/quicklang ;; http://adventofcode.com/2016/day/22 +(provide read-syntax + (rename-out [mb #%module-begin])) + +(define (read-syntax path port) + (strip-bindings + (let ([lines (string-split (port->string port) "\n")]) + #`(module mod "lang.rkt" + #,@(for/list ([args (in-list (map string-split (cddr lines)))]) + `(node ,@args)))))) + +(define-macro (mb . NODES) + #'(#%module-begin + (define nodes (list . NODES)) + (count-viable-pairs nodes))) + +(struct $node (pos used avail) #:transparent) + +(define-macro (node NAME _ USED AVAIL _) + #'($node + (apply (λ(r i) (+ (string->number r) + (* (string->number i) +i))) (regexp-match* #px"\\d+" NAME)) + (string->number (string-trim USED "T")) + (string->number (string-trim AVAIL "T")))) +(provide node) + +(define (count-viable-pairs nodes) + (for*/sum ([a (in-list nodes)] + [b (in-list nodes)] + #:when (and (not (zero? ($node-used a))) + (not (equal? ($node-pos a) ($node-pos b))) + (<= ($node-used a) ($node-avail b)))) + 1)) \ No newline at end of file diff --git a/2016/day22/test.rkt b/2016/day22/test.rkt new file mode 100644 index 0000000..f152049 --- /dev/null +++ b/2016/day22/test.rkt @@ -0,0 +1 @@ +#lang reader "lang.rkt" \ No newline at end of file -- 2.25.1 From 8e7f5838184f56f7f2a7884a3348e7137ae68394 Mon Sep 17 00:00:00 2001 From: Matthew Butterick Date: Fri, 23 Dec 2016 08:49:48 -0800 Subject: [PATCH 39/43] start day23 --- 2016/day23/input.rkt | 27 +++++++++++++++ 2016/day23/lang.rkt | 82 ++++++++++++++++++++++++++++++++++++++++++++ 2016/day23/test.rkt | 2 ++ 3 files changed, 111 insertions(+) create mode 100644 2016/day23/input.rkt create mode 100644 2016/day23/lang.rkt create mode 100644 2016/day23/test.rkt diff --git a/2016/day23/input.rkt b/2016/day23/input.rkt new file mode 100644 index 0000000..4e03e18 --- /dev/null +++ b/2016/day23/input.rkt @@ -0,0 +1,27 @@ +#lang reader "lang.rkt" +cpy a b +dec b +cpy a d +cpy 0 a +cpy b c +inc a +dec c +jnz c -2 +dec d +jnz d -5 +dec b +cpy b c +cpy c d +dec d +inc c +jnz d -2 +tgl c +cpy -16 c +jnz 1 c +cpy 70 c +jnz 87 d +inc a +inc d +jnz d -2 +inc c +jnz c -5 \ No newline at end of file diff --git a/2016/day23/lang.rkt b/2016/day23/lang.rkt new file mode 100644 index 0000000..f9a8697 --- /dev/null +++ b/2016/day23/lang.rkt @@ -0,0 +1,82 @@ +#lang br/quicklang ;; http://adventofcode.com/2016/day/23 +(provide read-syntax + (rename-out [mb #%module-begin]) + cpy inc dec jnz tgl) + +(define (read-syntax path port) + (strip-bindings + #`(module mod "lang.rkt" + #,@(for/list ([str (in-lines port)] + #:when (not (zero? (string-length str)))) + (format-datum '(~a) str))))) + +(define-macro (mb INST ...) + #'(#%module-begin + (report 'INST) ... + (define insts (vector INST ...)) + (define regs (make-hash '((a . 0)(b . 0)(c . 0)(d . 0)))) + (println (solve insts regs)) + (hash-set! regs 'c 1) + (println (solve insts regs)))) + +(define current-toggles (make-parameter empty)) +(define current-ptr (make-parameter #f)) + +(define (toggled?) (member (current-ptr) (current-toggles))) + +(define (solve insts regs) + (let loop ([ptr 0]) + (current-ptr ptr) + (if (>= ptr (vector-length insts)) + regs + (loop (+ ptr (let ([move ((vector-ref insts ptr) regs)]) + (if (void? move) 1 move))))))) + +(define-macro (make-tgl-base X) + #'(λ(regs) + (current-toggles + ((if (member X (current-toggles)) + remove + cons) X (current-toggles))))) + +(define-macro (tgl X) + #'(λ(regs) + ((if (toggled?) + (make-inc-base X) + (make-tgl-base X)) regs))) + +(define-macro (make-cpy-base X Y) + #'(λ(regs) + (define val (if (number? 'X) 'X (hash-ref regs 'X))) + (hash-set! regs 'Y val))) + +(define-macro (cpy X Y) + #'(λ(regs) + ((if (toggled?) + (make-jnz-base X Y) + (make-cpy-base X Y)) regs))) + +(define-macro (make-dec-base X) #'(λ(regs) (hash-update! regs 'X sub1))) +(define-macro (make-inc-base X) #'(λ(regs) (hash-update! regs 'X add1))) + +(define-macro (inc X) #'(λ(regs) + ((if (toggled?) + (make-dec-base X) + (make-inc-base X)) regs))) + +(define-macro (dec X) #'(λ(regs) + ((if (toggled?) + (make-inc-base X) + (make-dec-base X)) regs))) + + +(define-macro (make-jnz-base X Y) + #'(λ(regs) + (when (not (zero? (if (number? 'X) 'X (hash-ref regs 'X)))) + Y))) + +(define-macro (jnz X Y) + #'(λ(regs) + ((if (toggled?) + (make-copy-base X Y) + (make-jnz-base X Y)) regs))) diff --git a/2016/day23/test.rkt b/2016/day23/test.rkt new file mode 100644 index 0000000..a53638e --- /dev/null +++ b/2016/day23/test.rkt @@ -0,0 +1,2 @@ +#lang reader "lang.rkt" +cpy 2 a \ No newline at end of file -- 2.25.1 From 9f3e201a06fe189c19ba36d2d55638f1e03b5eed Mon Sep 17 00:00:00 2001 From: Matthew Butterick Date: Sun, 25 Dec 2016 15:12:32 -0800 Subject: [PATCH 40/43] start day25 --- 2016/day25/input.rkt | 31 ++++++++++++++++++++++++++++ 2016/day25/lang.rkt | 48 ++++++++++++++++++++++++++++++++++++++++++++ 2016/day25/test.rkt | 7 +++++++ 3 files changed, 86 insertions(+) create mode 100644 2016/day25/input.rkt create mode 100644 2016/day25/lang.rkt create mode 100644 2016/day25/test.rkt diff --git a/2016/day25/input.rkt b/2016/day25/input.rkt new file mode 100644 index 0000000..6788074 --- /dev/null +++ b/2016/day25/input.rkt @@ -0,0 +1,31 @@ +#lang reader "lang.rkt" +cpy a d +cpy 14 c +cpy 182 b +inc d +dec b +jnz b -2 +dec c +jnz c -5 +cpy d a +jnz 0 0 +cpy a b +cpy 0 a +cpy 2 c +jnz b 2 +jnz 1 6 +dec b +dec c +jnz c -4 +inc a +jnz 1 -7 +cpy 2 b +jnz c 2 +jnz 1 4 +dec b +dec c +jnz 1 -4 +jnz 0 0 +out b +jnz a -19 +jnz 1 -21 \ No newline at end of file diff --git a/2016/day25/lang.rkt b/2016/day25/lang.rkt new file mode 100644 index 0000000..403a65d --- /dev/null +++ b/2016/day25/lang.rkt @@ -0,0 +1,48 @@ +#lang br/quicklang ;; http://adventofcode.com/2016/day/25 +(provide read-syntax + (rename-out [mb #%module-begin]) + cpy inc dec jnz out) + +(define (read-syntax path port) + (strip-bindings + #`(module mod "lang.rkt" + #,@(for/list ([str (in-lines port)] + #:when (not (zero? (string-length str)))) + (format-datum '(~a) str))))) + +(define-macro (mb . INSTS) + #'(#%module-begin + (define insts (vector . INSTS)) + (define regs (make-hash '((a . 0)(b . 0)(c . 0)(d . 0)))) + (for*/first ([i (in-naturals)] + #:when + (begin + (hash-set! regs 'a i) + (regexp-match "010101010101" (with-output-to-string (λ () (solve insts regs 50000)))))) + i))) + +(define (solve insts regs max-count) + (let loop ([ptr 0][count 0]) + (if (or (>= ptr (vector-length insts)) (> count max-count)) + regs + (loop (+ ptr (let ([move ((vector-ref insts ptr) regs)]) + (if (void? move) 1 move))) + (add1 count))))) + +(define-macro (cpy X Y) + #'(λ(regs) + (define val (if (number? 'X) 'X (hash-ref regs 'X))) + (hash-set! regs 'Y val))) + +(define-macro (inc X) #'(λ(regs) (hash-update! regs 'X add1))) + +(define-macro (dec X) #'(λ(regs) (hash-update! regs 'X sub1))) + +(define-macro (jnz X Y) + #'(λ(regs) + (when (not (zero? (if (number? 'X) 'X (hash-ref regs 'X)))) + Y))) + +(define-macro (out X) + #'(λ(regs) + (print (hash-ref regs 'X)))) diff --git a/2016/day25/test.rkt b/2016/day25/test.rkt new file mode 100644 index 0000000..de3dce0 --- /dev/null +++ b/2016/day25/test.rkt @@ -0,0 +1,7 @@ +#lang reader "lang.rkt" +cpy 41 a +inc a +inc a +dec a +jnz a 2 +dec a \ No newline at end of file -- 2.25.1 From d6ecf92746f0cc359bae13a30b1181e15e1f0f5c Mon Sep 17 00:00:00 2001 From: Matthew Butterick Date: Sun, 25 Dec 2016 15:17:13 -0800 Subject: [PATCH 41/43] del --- 2016/day25/test.rkt | 7 ------- 1 file changed, 7 deletions(-) delete mode 100644 2016/day25/test.rkt diff --git a/2016/day25/test.rkt b/2016/day25/test.rkt deleted file mode 100644 index de3dce0..0000000 --- a/2016/day25/test.rkt +++ /dev/null @@ -1,7 +0,0 @@ -#lang reader "lang.rkt" -cpy 41 a -inc a -inc a -dec a -jnz a 2 -dec a \ No newline at end of file -- 2.25.1 From c666411e3a45e6f7724fb6b959b38219636778da Mon Sep 17 00:00:00 2001 From: Matthew Butterick Date: Sun, 25 Dec 2016 16:34:31 -0800 Subject: [PATCH 42/43] day24 --- 2016/day24/input.rkt | 38 +++++++++++++++++++++++++++++++++ 2016/day24/lang.rkt | 51 ++++++++++++++++++++++++++++++++++++++++++++ 2016/day24/test.rkt | 6 ++++++ 3 files changed, 95 insertions(+) create mode 100644 2016/day24/input.rkt create mode 100644 2016/day24/lang.rkt create mode 100644 2016/day24/test.rkt diff --git a/2016/day24/input.rkt b/2016/day24/input.rkt new file mode 100644 index 0000000..43c0d47 --- /dev/null +++ b/2016/day24/input.rkt @@ -0,0 +1,38 @@ +#lang reader "lang.rkt" +####################################################################################################################################################################################### +#.....................#.....#.#.......#.......#...#.....#.#...#.........#...........#...#.........#...#...#...#...#.........#.#.....#.........#.#.#.....#.....#.....#.#.#.............# +#.#.###.#.###.#.###.#.#.###.#.###.#########.#.#####.#####.#.###.#.#.#.#.###.#.###.#.#.#.#.###.#.#.#.#.###.#.#.#.#.###.#.#.#.#.#.#.#.#.###.#.#.#.#.#.#####.###.#.#.#.#.#.###.#.#.#.#.#.# +#.........#.......#...#.....#.#.#.#.......#.#.....#...#.....#.....#.....#...............#.#.#...#...#.#.....#.......#.#...#.....#.......#...#.#.#...#2#...#.................#...#.....# +#.###.#.###.#.#.#.#.#.#.#.#.#.#.#.#####.#.#.#.###.#.###.#.#.#.###.#.#.#.###.#.#.###.#.#####.#.#.#####.#.#.#.#######.#.#####.###.###.###.#.#.#.#.#.#.#.#.###.###.###.###.#.#.#.#.####### +#.#....1#.....#...#.......#...#.#.#.....#.....#.....................#.#...........#...#.....#.....#.....#.......#.....#.#.......#...........#...#.#...#...#...............#.#.#.#.....# +#.#.#######.#.#.#.#.#############.#.###.###.###.#.#.#########.#.###.#.#.#.#.#.#.#.#####.#.#.#.###.#.#.#.#.#.#.#.#.#.###.#########.#.#.#############.#######.#.#.#.###.###.###.#####.### +#.#.#...#.........#.....#.........#.....#.#.#...#...........#...#.........#...#.#.....#.#...............#...#.....#.#.#.............#.....#...#.....#...........#.#.#.....#...#.......# +#.###.#.#.#.#.#######.#.#.#.#.###.###.#.#.#.#.#.#.#.#####.###.#.#.#.#.#.#######.#.###.#.#.#.###.#.###.#.#.###.#.#.#.#.#.#.#.#.#.#######.#.###.#.###.#.###.#.#.###.#.###.#.#.#.#.#.#.### +#...#.#.........#.#...#.....#...#.......#.#.#.......#.#.#...#.........#.....#.#...#.#.#...#...#...#.....#.........#.#.....#.......#.....#.......#.#...#...#.....#.....#.......#.#.#...# +#.#.#.#.#.#.###.#.#.#.#.###.#####.#####.#######.#.###.#.#.#.#####.#.#####.###.#.#.#.#.#.#.###.#.#.#.#####.#.#####.#.###.#####.#.#.#.###.###.###.#.#.#.#####.#.#.#####.#.#######.#.#.### +#.....#.#.....#.........#.#...#.......#...#.......#.........#...#.#.#.#.......#...#...............#.#...................#.#.#.......#.#.........#....0#...#.#.......#.#.#.#...#.....#.# +#######.#.#.#.#######.###.#.###.#.#.#.#.#.#.#.#.###.###.#####.#.#.###.#.#.###.#####.#.#.#.#.#####.#.###.###.#.#.#######.#.#.#.#######.#.#.#.#.#.#.#.#.#.###.#.###.#.###.#.#####.#.#.#.# +#.........#...#...#.....#.........#.......#...#...........#.#.#.#...#...#.#...#.#...#.#.#.......#.......#...#.....#.....#.#...#.#.#.#.........#...............#...#.#...........#.....# +#.#.#.#.#.#####.###.#####.#.#######.#.#.#.#.#.#.#.#####.###.#.#.#.#.#.###.#.#.#.#.#.#.#.#.#.#.#.###.#.###.#.###.#.#.#.#.#.###.#.#.#.#.#.#.#.#.#.#####.###.###.#.#######.#.###.#.####### +#.#...#...#...#.....#.#.#.#...#.................#...#...#.#...#...#...#.#.#.#.....#.#.#.....#.#...#.#.......#.#.#...#...#.#...#.....#...#.#...#...#.....#.....#...#.....#.....#.#...#.# +#.###.###.###.###.#.#.#.#.#.#.#.#.#.###.#.###.#####.#.###.#.###.###.#.#.#.#.#.###.#.###.#####.###.###.#.#.#.#.#.#.#.#.#.#.#.###.#.#.#.###.#####.#.###########.#.#.#.###.#.#######.#.#.# +#..3#.#.......#...#.............#.....#.....#...#...#.#.....#.......#.....#...#.....#.#.#.........#...#.#.........#.....#...............#.........#...#...........#.#.#...#7#.#.....#.# +###.#.#.###.#.#.###.#############.###.#.#######.#.#####.#######.#####.#.###.#.#.#.#.#.#.#.#.#.#.#.###.#.#########.#.#.#.#.#.#.###.#.###.#####.#####.###.#.###.#.#.#.#.#.#.#.#.#.###.#.# +#.#...#.....#.#.#.#.#.#...........................#.......#...#.#.....#.#...#...#.#...#.........#...........#.#.....#.....#...#...#.#.......#.#.#...#...#.#.......#.......#...#.....#.# +#.#########.#.#.#.#.#.#.#.#####.###.#######.#.#####.#.#.#.#.###.#.#.#.#.#####.#######.#.#####.#.#.#.#####.#.#.#.###.#####.#.#######.#######.###.###.#.#.#.###.###.#.#########.#.#.###.# +#.#.......#...#.....#.#.......#.#...#.....#...........#.#...........#...#.....#.........#.......#...#.........#.#.....#.#...#.............#.............#...........#.....#...#.#.#.#.# +#.#.###.#.#.#.#.#.###.###.#####.#.#.#.#.#.###.#.#####.#.#.#.#.###.#####.#######.#.#.#.#.#.#.#.#.#.#.###.#.###.#.#.#.#.#.#.###.#.###.#.###.#######.###.#.#.#.#.###.###.#.#.#.#.#.#.#.### +#.#.......................#.......#.......#.#.#.......#...........#...#...#.....#.#.#...#...#...#.......#.......#.#.#...#.....#.....#...#...#.....#.#...#...#...........#.....#...#...# +#.#.###.#####.#.###.#.#.###.#.#.#.#######.#.#####.#.#.###.#.#######.#.#.#.#.#.#.###.#.#.#.#.#.#.#.###.#.###.#.###.###.#######.#.###.###.#.#.#.###.#.###.###.###.#.#.#.#.#.#.#.#.###.#.# +#...#.....#.........#...#.#.....#...#...#.#.#...#.....#.#.#...#.......#.....#.......#.....#.....#.#.....#...#.#.#.......#...#.#...#.........#...#...........#...#...#...#.....#.#.#.#.# +#########.###.#####.#.#.#.#.#.###.#.#.###.#.#.#.#.###.#.#.#.#.#.#.###.#.###.#.#####.#######.#.###.#.###.#.#.###.#.#.#####.#######.#.###.#.###.###.#.###.#.#.#.###.#.#######.#.###.#.#.# +#.#...#...#...#.....#...#.#6......#.#.....#.....#.....#.#...#...#...#.#.....#...#...#...#...#.............#.#...#.......#.#...#...........#.#..5#...#.#.....#...#.....#...#...#.......# +#.###.#.#.###.###.#.#.#.#.#####.#.#.#####.#.#.###.#.#.#.#.#.#.###.#.#.###.#.#########.###.###.#######.#.#.#.#.#.#.#####.#.#.#.#.#.###.#.###.#####.#.#.#.#.#.#.#.###.#.###.#.###.#.#.#.# +#.#...#...#...#.........#...#.................#.....#.....#...............#.....#.#...#.....#.......#...#.....#.#.#.......#.............#.#.#.#...#.#...#.#.#...#.....#.......#.......# +#.###.#.###.###.###.#.#.#.#.#.###.###.#.#.###.###.###############.#####.#.#######.#.#.#.###########.###.#.#.#.#.#.#.#.###.#.#####.#######.###.#.#.#.#.###.#.#.#.#.###.###.###.#.#.###.# +#...................#...........#.#.#.........#.....#...#...#...#.#.....#.........#...#.#.......#...#...............#.#.................#.....#.....#.#.....#...#...#.#.....#...#.....# +#.#.#.#.#.###.###.#.###.#.#####.#.#.#########.#.#.###.#.###.#####.#.#.#.#.#.#.#######.#####.#.#.#.###.#.#.###.#####.#.#.#.###.###.###.###.#######.#.#.#.###.#.#.#.#.#.#.#.###.#.#.###.# +#.#...#.#.#.#.......#.#...#.#.....#.......#.#.#.....#.#.#.......#...#.#.....#.#...#...#.........#.......#.....#.#...#...#.......#.#...#...#.#.........#...#.........#.........#.#.#...# +###.#####.#.#.###.#.#.#.###.#.#.#.#.#.#.#.#.#.#####.###.#.###.#.#.#.#.#.#.#.#######.#.###.#.#####.###.#####.###.#.#.###.#.#.#.###.#.###.#.#.#.#.#####.#.#####.###.#.#.#.###.#####.#.#.# +#...........#...................#.....#.....#...............#...#.#.....#.......#...#...#...#...#.......#...#...#.....#...#...#...#.....#4#...#...#...#.....#.............#.#...#.....# +####################################################################################################################################################################################### \ No newline at end of file diff --git a/2016/day24/lang.rkt b/2016/day24/lang.rkt new file mode 100644 index 0000000..6b0b01e --- /dev/null +++ b/2016/day24/lang.rkt @@ -0,0 +1,51 @@ +#lang br/quicklang ; http://adventofcode.com/2016/day/24 +(require graph) +(provide read-syntax + (rename-out [mb #%module-begin])) + +(define (read-syntax path port) + (strip-bindings + #`(module mod "lang.rkt" + #,(string-trim (port->string port))))) + +(define-macro (mb STR) + #'(#%module-begin + (solve STR))) + +(define (open? c) (not (equal? c "#"))) + +(define (solve str) + (define g (undirected-graph empty)) + (define ptcols + (for*/list ([(row ridx) (in-indexed (string-split str))] + [(col cidx) (in-indexed (regexp-match* #rx"." row))] + [pt (in-value (+ cidx (* +i ridx)))] + #:when (open? col)) + (list pt col))) + (for ([p (in-list ptcols)]) + (let ([right (assoc (+ (car p) 1) ptcols)]) + (when right (add-edge! g (car p) (car right)))) + (let ([down (assoc (+ (car p) +i) ptcols)]) + (when down (add-edge! g (car p) (car down))))) + (define colpts (apply hash (flatten (map reverse ptcols)))) + (define highest-num (apply max (filter number? (map (compose1 string->number cadr) ptcols)))) + (displayln + (argmin cdr + (for/list ([path-digits (in-permutations (range 1 (add1 highest-num)))]) + (cons path-digits + (for/sum ([start-num (in-list (cons 0 path-digits))] + [end-num (in-list path-digits)]) + (define start (hash-ref colpts (~a start-num))) + (define stop (hash-ref colpts (~a end-num))) + (define spath (fewest-vertices-path g start stop)) + (sub1 (length spath))))))) + (displayln + (argmin cdr + (for/list ([path-digits (in-permutations (range 1 (add1 highest-num)))]) + (cons path-digits + (for/sum ([start-num (in-list (append '(0) path-digits '(0)))] + [end-num (in-list (append path-digits '(0)))]) + (define start (hash-ref colpts (~a start-num))) + (define stop (hash-ref colpts (~a end-num))) + (define spath (fewest-vertices-path g start stop)) + (sub1 (length spath)))))))) diff --git a/2016/day24/test.rkt b/2016/day24/test.rkt new file mode 100644 index 0000000..112cac2 --- /dev/null +++ b/2016/day24/test.rkt @@ -0,0 +1,6 @@ +#lang reader "lang.rkt" +########### +#0.1.....2# +#.#######.# +#4.......3# +########### \ No newline at end of file -- 2.25.1 From 43585dbd0aa1141df34e55d3ab5c88b420c40738 Mon Sep 17 00:00:00 2001 From: Ryan Davis Date: Thu, 29 Dec 2016 04:19:15 -0800 Subject: [PATCH 43/43] Fixed quoting levels. This doesn't fix the implementation but at least gets the code parsing and running. Pushed the quoting up to inc/dec/jnz/etc because they're the entry points. Doesn't terminate on input file (and hits a point where it doesn't seem to be doing anything but spinning in the loop). --- 2016/day23/lang.rkt | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/2016/day23/lang.rkt b/2016/day23/lang.rkt index f9a8697..493917c 100644 --- a/2016/day23/lang.rkt +++ b/2016/day23/lang.rkt @@ -42,41 +42,41 @@ (define-macro (tgl X) #'(λ(regs) ((if (toggled?) - (make-inc-base X) - (make-tgl-base X)) regs))) + (make-inc-base 'X) + (make-tgl-base 'X)) regs))) (define-macro (make-cpy-base X Y) #'(λ(regs) - (define val (if (number? 'X) 'X (hash-ref regs 'X))) - (hash-set! regs 'Y val))) + (define val (if (number? X) X (hash-ref regs X))) + (hash-set! regs Y val))) (define-macro (cpy X Y) #'(λ(regs) ((if (toggled?) - (make-jnz-base X Y) - (make-cpy-base X Y)) regs))) + (make-jnz-base 'X 'Y) + (make-cpy-base 'X 'Y)) regs))) -(define-macro (make-dec-base X) #'(λ(regs) (hash-update! regs 'X sub1))) -(define-macro (make-inc-base X) #'(λ(regs) (hash-update! regs 'X add1))) +(define-macro (make-dec-base X) #'(λ(regs) (hash-update! regs X sub1))) +(define-macro (make-inc-base X) #'(λ(regs) (hash-update! regs X add1))) (define-macro (inc X) #'(λ(regs) ((if (toggled?) - (make-dec-base X) - (make-inc-base X)) regs))) + (make-dec-base 'X) + (make-inc-base 'X)) regs))) (define-macro (dec X) #'(λ(regs) ((if (toggled?) - (make-inc-base X) - (make-dec-base X)) regs))) + (make-inc-base 'X) + (make-dec-base 'X)) regs))) (define-macro (make-jnz-base X Y) #'(λ(regs) - (when (not (zero? (if (number? 'X) 'X (hash-ref regs 'X)))) + (when (not (zero? (if (number? X) X (hash-ref regs X)))) Y))) (define-macro (jnz X Y) #'(λ(regs) ((if (toggled?) - (make-copy-base X Y) - (make-jnz-base X Y)) regs))) + (make-cpy-base 'X 'Y) + (make-jnz-base 'X 'Y)) regs))) -- 2.25.1