From 5d8688446ea7c754cf0c1e2fd21c404707bb3e22 Mon Sep 17 00:00:00 2001 From: zongor Date: Sat, 25 Oct 2025 12:13:37 -0700 Subject: [PATCH] update paint programs --- test/paint-bw.asm.lisp | 128 ++++++---------------- test/paint-bw.rom | Bin 0 -> 617 bytes test/paint.asm.lisp | 233 +++++++++++++++++------------------------ test/paint.rom | Bin 1311 -> 1417 bytes 4 files changed, 130 insertions(+), 231 deletions(-) create mode 100644 test/paint-bw.rom diff --git a/test/paint-bw.asm.lisp b/test/paint-bw.asm.lisp index b00b1eb..4c45753 100644 --- a/test/paint-bw.asm.lisp +++ b/test/paint-bw.asm.lisp @@ -19,26 +19,16 @@ (load-offset-32 $16 $15 4) ; load handle ; outline_swatch(screen, BLACK, 1, 1); - (push $21) - (push $20) (load-absolute-32 $1 &BLACK) - (push $1) (load-immediate $12 1) - (push $12) (load-immediate $13 1) - (push $13) - (call &draw-outlined-swatch) + (call &draw-outlined-swatch ($21 $1 $12 $13 $20) nil) ; outline_swatch(screen, WHITE, 1, 1); - (push $21) - (push $20) (load-absolute-32 $1 &WHITE) - (push $1) (load-immediate $12 21) - (push $12) (load-immediate $13 1) - (push $13) - (call &draw-outlined-swatch) + (call &draw-outlined-swatch ($21 $1 $12 $13 $20) nil) ; screen.draw(); (syscall WRITE $0 $21 $22) @@ -57,45 +47,26 @@ (load-immediate $14 20) ; box size ; first row - (push $21) - (push $20) (load-absolute-32 $1 &BLACK) - (push $1) (load-immediate $12 1) - (push $12) (load-immediate $13 1) - (push $13) - (call &draw-outlined-swatch) + (call &draw-outlined-swatch ($21 $1 $12 $13 $20) nil) - ; set_color_if_clicked(box_size, box_y, box_x, click_y, click_x, color) - (call &set-color-if-clicked ($7 $8 $12 $13 $14 $5) nil) + (call &set-color-if-clicked ($7 $8 $12 $13 $1 $14) nil) - (push $21) - (push $20) (load-absolute-32 $1 &WHITE) - (push $1) (load-immediate $12 21) - (push $12) (load-immediate $13 1) - (push $13) - (call &draw-outlined-swatch) + (call &draw-outlined-swatch ($21 $1 $12 $13 $20) nil) - ; set_color_if_clicked(box_size, box_y, box_x, click_y, click_x, color) - (call &set-color-if-clicked ($7 $8 $12 $13 $14 $5) nil) + (call &set-color-if-clicked ($7 $8 $12 $13 $1 $14) nil) (syscall WRITE $0 $21 $22) (load-absolute-32 $22 &SELECTED-COLOR) ; color (load-immediate $1 5) ; size of brush - (push $21) ;base - (push $20) ;width - (push $22) ; color - (push $7) ;x - (push $8) ;y - (push $1) - (push $1) - (call &draw-box) + (call &draw-box ($21 $20 $22 $7 $8 $1 $1) nil) (jump &draw-loop)) @@ -103,13 +74,13 @@ (halt)) (label set-color-if-clicked - ; (click_x, click_y, box_x, box_y, box_size, color) + ; (click_x, click_y, box_x, box_y, color, box_size) ; Compute right = box_x + box_size - (add-int $6 $2 $4) ; $6 = right edge + (add-int $6 $2 $5) ; $6 = right edge ; Compute bottom = box_y + box_size - (add-int $7 $3 $4) ; $7 = bottom edge + (add-int $7 $3 $5) ; $7 = bottom edge ; Bounds check: x in [box_x, right] and y in [box_y, bottom] (jump-lt-int &fail $0 $2) @@ -118,87 +89,56 @@ (jump-gt-int &fail $1 $7) (load-immediate $10 &SELECTED-COLOR) - (store-absolute-8 $10 $5) + (store-absolute-8 $10 $4) (label fail) (return nil)) (label draw-outlined-swatch - (pop $0) - (pop $1) ; color - (pop $2) ; x - (pop $3) ; y - (pop $20) + ; (base, color, x, y, width) ; Constants - (load-absolute-32 $4 &GRAY) + (load-absolute-32 $5 &GRAY) (load-absolute-32 $10 &SELECTED-COLOR) (jump-eq-int &set-selected $10 $1) - (jump-eq-int &end-set-selected $4 $4) + (jump-eq-int &end-set-selected $5 $5) (label set-selected) - (load-absolute-32 $4 &DARK-GRAY) + (load-absolute-32 $5 &DARK-GRAY) (label end-set-selected) - (load-immediate $5 20) ; outline size - (load-immediate $6 17) ; fill size - (load-immediate $7 2) ; offset + (load-immediate $6 20) ; outline size + (load-immediate $7 17) ; fill size + (load-immediate $8 2) ; offset - (push $0) ; base - (push $20) ; width - (push $4) ; color (gray) - (push $2) ; x - (push $3) ; y - (push $5) ; width (20) - (push $5) ; height (20) - (call &draw-box) + (call &draw-box ($0 $4 $5 $2 $3 $6 $6) nil) - (add-int $8 $2 $7) ; x + 2 - (add-int $9 $3 $7) ; y + 2 + (add-int $9 $2 $8) ; x + 2 + (add-int $10 $3 $8) ; y + 2 - (push $0) ; base - (push $20) ; width - (push $1) ; color (original) - (push $8) ; x + 2 - (push $9) ; y + 2 - (push $6) ; width (17) - (push $6) ; height (17) - (call &draw-box) + (call &draw-box ($0 $4 $1 $9 $10 $7 $7) nil) (return nil)) - ; draw-box(color, x, y) - ; Pops: y, x, color (label draw-box - ; Pop arguments (reverse order) - (pop $14) ; height - (pop $12) ; width - (pop $13) ; y_start - (pop $11) ; x_start - (pop $3) ; color - (pop $2) ; width - (pop $21) ; base - - ; Constants - (load-immediate $1 1) ; increment + ; (base, screen_width, color, x_start, y_start, width, height) ; Compute start address: base + y*640 + x - (mul-int $15 $13 $2) ; $15 = y * 640 - (add-int $15 $15 $11) ; $15 += x - (add-nat $15 $21 $15) ; $15 = base + pixel_offset + (mul-int $15 $4 $1) ; $15 = y * 640 + (add-int $15 $15 $3) ; $15 += x + (add-nat $15 $0 $15) ; $15 = base + pixel_offset (load-immediate $25 4) - (add-nat $15 $15 $25) ; need to add offset for fat pointer size - (register-move $4 $15) + (add-nat $15 $15 $25) ; need to add offset for fat pointer size ; Outer loop: height times - (register-move $5 $14) ; $5 = row counter + (load-immediate $30 1) ; increment (label draw-box-outer - (add-int $6 $4 $12) ; $6 = row end = current + width - (register-move $7 $4) ; $7 = pixel pointer - (memset-8 $7 $3 $12) ; draw row - (add-int $4 $4 $2) ; next row (+= 640) - (sub-int $5 $5 $1) ; decrement row count - (jump-gt-int &draw-box-outer $5 0)) + (add-int $27 $15 $5) ; $27 = row end = current + width + (register-move $29 $15) ; $7 = pixel pointer + (memset-8 $29 $2 $5) ; draw row + (add-int $15 $15 $1) ; next row (+= 640) + (sub-int $6 $6 $30) ; decrement row count + (jump-gt-int &draw-box-outer $6 0)) (return nil))) (data (label screen-namespace "/dev/screen/0") diff --git a/test/paint-bw.rom b/test/paint-bw.rom new file mode 100644 index 0000000000000000000000000000000000000000..5b276e1f8bf88a7555e1444fcfb3f4577cd28438 GIT binary patch literal 617 zcmah`!Ait15X~f$q)nSmEp2hx?y}&~!-_5|xJOT({RAzDpn{8jfhUiCj33~K_#s~E zOx%KkXb$hqyqRQP5+Q{60D|p09|B^GF=kAPdrFacQL^l-GGS`UoCu*HoYy5_QBo9} zLy`F+aI=GbZp!%x^o(##sB6f5)jK$f)%w?}QY4GILB%7KBq*c`SsFM$c_BzMZ)J3o z$mnKNk^1*gSd#%`lib7T9|u2L2Rp9WqZtUA5Z>r4TUU)u0Qy6=Bw8bNYn48};_J#) zBoi}GF$0T^&lowBz0;=@x+pB4Xp4j8Gm+L#uc?BDuY`7oG2ut}8Y)mrWlZ0uGHIPk z1{G3gZ7=&-Kxjiy^B@9_`7h=njB&=M+DXupY1o~T(-2^4%xv{e1w;ErR9{?nkBiO4 geb?PC4ul_+o4bciM?z1+_ci2aTQNQZ#jo4^6PUa)vj6}9 literal 0 HcmV?d00001 diff --git a/test/paint.asm.lisp b/test/paint.asm.lisp index 0b32ee2..faf2863 100644 --- a/test/paint.asm.lisp +++ b/test/paint.asm.lisp @@ -4,7 +4,7 @@ ; use load immediate because it is a pointer to a string, not a value (load-immediate $0 &screen-namespace) (load-immediate $11 0) - (syscall OPEN $18 $0 $11) ; Screen screen = open(namespace, flags) + (syscall OPEN $18 $0 $11) ; open(out Plex screen, in namespace, in flags) (load-offset-32 $0 $18 4) ; load handle (load-offset-32 $20 $18 8) ; load width @@ -14,21 +14,61 @@ ; open mouse (load-immediate $16 &mouse-namespace) - (syscall OPEN $15 $16 $11) ; Mouse mouse = open(namespace, flags) + (syscall OPEN $15 $16 $11) ; open(out Plex mouse, in namespace, in flags) (load-offset-32 $16 $15 4) ; load handle - ; outline_swatch(screen, BLACK, 1, 1, width); + ; outline_swatch(screen, BLACK, 1, 1); (load-absolute-32 $1 &BLACK) (load-immediate $12 1) (load-immediate $13 1) (call &draw-outlined-swatch ($21 $1 $12 $13 $20) nil) - ; outline_swatch(screen, WHITE, 1, 1, width); + ; outline_swatch(screen, WHITE, 1, 1); (load-absolute-32 $1 &WHITE) (load-immediate $12 21) (load-immediate $13 1) - (call &draw-outlined-swatch ($21 $1 $12 $13 $20) nil) + (call &draw-outlined-swatch ($21 $1 $12 $13 $20) nil) + + (load-absolute-32 $1 &CHARCOAL) + (load-immediate $12 1) + (load-immediate $13 21) + (call &draw-outlined-swatch ($21 $1 $12 $13 $20) nil) + + (load-absolute-32 $1 &DARK-GRAY) + (load-immediate $12 21) + (load-immediate $13 21) + (call &draw-outlined-swatch ($21 $1 $12 $13 $20) nil) + + (load-absolute-32 $1 &RED) + (load-immediate $12 1) + (load-immediate $13 41) + (call &draw-outlined-swatch ($21 $1 $12 $13 $20) nil) + + (load-absolute-32 $1 &ORANGE) + (load-immediate $12 21) + (load-immediate $13 41) + (call &draw-outlined-swatch ($21 $1 $12 $13 $20) nil) + + (load-absolute-32 $1 &YELLOW) + (load-immediate $12 1) + (load-immediate $13 61) + (call &draw-outlined-swatch ($21 $1 $12 $13 $20) nil) + + (load-absolute-32 $1 &GREEN) + (load-immediate $12 21) + (load-immediate $13 61) + (call &draw-outlined-swatch ($21 $1 $12 $13 $20) nil) + + (load-absolute-32 $1 &BLUE) + (load-immediate $12 1) + (load-immediate $13 81) + (call &draw-outlined-swatch ($21 $1 $12 $13 $20) nil) + + (load-absolute-32 $1 &PURPLE) + (load-immediate $12 21) + (load-immediate $13 81) + (call &draw-outlined-swatch ($21 $1 $12 $13 $20) nil) ; screen.draw(); (syscall WRITE $0 $21 $22) @@ -46,132 +86,82 @@ (load-immediate $14 20) ; box size - ; first row + ; outline_swatch(screen, BLACK, 1, 1); (load-absolute-32 $1 &BLACK) (load-immediate $12 1) (load-immediate $13 1) (call &draw-outlined-swatch ($21 $1 $12 $13 $20) nil) - - ; set_color_if_clicked(color, click_x, click_y, box_x, box_y, 20); - (call &set-color-if-clicked ($1 $7 $8 $12 $13 $14) nil) - + (call &set-color-if-clicked ($7 $8 $12 $13 $1 $14) nil) + ; outline_swatch(screen, WHITE, 1, 1); (load-absolute-32 $1 &WHITE) (load-immediate $12 21) (load-immediate $13 1) - (call &draw-outlined-swatch ($21 $1 $12 $13 $20) nil) - - ; set_color_if_clicked(color, click_x, click_y, box_x, box_y, 20); - (call &set-color-if-clicked ($1 $7 $8 $12 $13 $14) nil) + (call &draw-outlined-swatch ($21 $1 $12 $13 $20) nil) + (call &set-color-if-clicked ($7 $8 $12 $13 $1 $14) nil) - ; row 2 (load-absolute-32 $1 &CHARCOAL) (load-immediate $12 1) (load-immediate $13 21) - (call &draw-outlined-swatch ($21 $1 $12 $13 $20) nil) - - ; set_color_if_clicked(color, click_x, click_y, box_x, box_y, 20); - (call &set-color-if-clicked ($1 $7 $8 $12 $13 $14) nil) + (call &draw-outlined-swatch ($21 $1 $12 $13 $20) nil) + (call &set-color-if-clicked ($7 $8 $12 $13 $1 $14) nil) - (push $21) - (push $20) (load-absolute-32 $1 &DARK-GRAY) - (push $1) (load-immediate $12 21) - (push $12) (load-immediate $13 21) - (push $13) - (call &draw-outlined-swatch ($21 $1 $12 $13 $20) nil) - - ; set_color_if_clicked(color, click_x, click_y, box_x, box_y, 20); - (call &set-color-if-clicked ($1 $7 $8 $12 $13 $14) nil) + (call &draw-outlined-swatch ($21 $1 $12 $13 $20) nil) + (call &set-color-if-clicked ($7 $8 $12 $13 $1 $14) nil) - ; row 3 - (push $21) - (push $20) (load-absolute-32 $1 &RED) - (push $1) (load-immediate $12 1) - (push $12) (load-immediate $13 41) - (push $13) - (call &draw-outlined-swatch ($21 $1 $12 $13 $20) nil) - - ; set_color_if_clicked(color, click_x, click_y, box_x, box_y, 20); - (call &set-color-if-clicked ($1 $7 $8 $12 $13 $14) nil) - + (call &draw-outlined-swatch ($21 $1 $12 $13 $20) nil) + (call &set-color-if-clicked ($7 $8 $12 $13 $1 $14) nil) (load-absolute-32 $1 &ORANGE) (load-immediate $12 21) (load-immediate $13 41) - (call &draw-outlined-swatch ($21 $1 $12 $13 $20) nil) - - ; set_color_if_clicked(color, click_x, click_y, box_x, box_y, 20); - (call &set-color-if-clicked ($1 $7 $8 $12 $13 $14) nil) + (call &draw-outlined-swatch ($21 $1 $12 $13 $20) nil) + (call &set-color-if-clicked ($7 $8 $12 $13 $1 $14) nil) - ; row 3 (load-absolute-32 $1 &YELLOW) (load-immediate $12 1) (load-immediate $13 61) - (call &draw-outlined-swatch ($21 $1 $12 $13 $20) nil) - - ; set_color_if_clicked(color, click_x, click_y, box_x, box_y, 20); - (call &set-color-if-clicked ($1 $7 $8 $12 $13 $14) nil) - + (call &draw-outlined-swatch ($21 $1 $12 $13 $20) nil) + (call &set-color-if-clicked ($7 $8 $12 $13 $1 $14) nil) (load-absolute-32 $1 &GREEN) (load-immediate $12 21) (load-immediate $13 61) - (call &draw-outlined-swatch ($21 $1 $12 $13 $20) nil) - - ; set_color_if_clicked(color, click_x, click_y, box_x, box_y, 20); - (call &set-color-if-clicked ($1 $7 $8 $12 $13 $14) nil) + (call &draw-outlined-swatch ($21 $1 $12 $13 $20) nil) + (call &set-color-if-clicked ($7 $8 $12 $13 $1 $14) nil) - ; row 4 (load-absolute-32 $1 &BLUE) (load-immediate $12 1) (load-immediate $13 81) - (call &draw-outlined-swatch ($21 $1 $12 $13 $20) nil) - - ; set_color_if_clicked(color, click_x, click_y, box_x, box_y, 20); - (call &set-color-if-clicked ($1 $7 $8 $12 $13 $14) nil) + (call &draw-outlined-swatch ($21 $1 $12 $13 $20) nil) + (call &set-color-if-clicked ($7 $8 $12 $13 $1 $14) nil) (load-absolute-32 $1 &PURPLE) (load-immediate $12 21) (load-immediate $13 81) - (call &draw-outlined-swatch ($21 $1 $12 $13 $20) nil) - - ; set_color_if_clicked(color, click_x, click_y, box_x, box_y, 20); - (call &set-color-if-clicked ($1 $7 $8 $12 $13 $14) nil) + (call &draw-outlined-swatch ($21 $1 $12 $13 $20) nil) + (call &set-color-if-clicked ($7 $8 $12 $13 $1 $14) nil) (syscall WRITE $0 $21 $22) (load-absolute-32 $22 &SELECTED-COLOR) ; color (load-immediate $1 5) ; size of brush - (push $21) ;base - (push $20) ;width - (push $22) ; color - (push $7) ;x - (push $8) ;y - (push $1) - (push $1) - ; draw_box(brush_size, ) - (call &draw-box ($1 $1 $8 $7 $22 $20 $21) nil) + (call &draw-box ($21 $20 $22 $7 $8 $1 $1) nil) (jump &draw-loop)) ; Flush and halt (halt)) - (label set-color-if-clicked - ; Pop inputs from stack (in reverse order of pushing) - (pop $11) ; $11 = color - (pop $0) ; $0 = click_x - (pop $1) ; $1 = click_y - (pop $2) ; $2 = box_x - (pop $3) ; $3 = box_y - (pop $5) ; $5 = box_size + (label set-color-if-clicked + ; (click_x, click_y, box_x, box_y, color, box_size) ; Compute right = box_x + box_size (add-int $6 $2 $5) ; $6 = right edge @@ -186,88 +176,57 @@ (jump-gt-int &fail $1 $7) (load-immediate $10 &SELECTED-COLOR) - (store-absolute-8 $10 $11) + (store-absolute-8 $10 $4) (label fail) - (return)) + (return nil)) (label draw-outlined-swatch - (pop $3) ; y - (pop $2) ; x - (pop $1) ; color - (pop $20) - (pop $21) + ; (base, color, x, y, width) ; Constants - (load-absolute-32 $4 &GRAY) + (load-absolute-32 $5 &GRAY) (load-absolute-32 $10 &SELECTED-COLOR) (jump-eq-int &set-selected $10 $1) - (jump-eq-int &end-set-selected $4 $4) + (jump-eq-int &end-set-selected $5 $5) (label set-selected) - (load-absolute-32 $4 &DARK-GRAY) + (load-absolute-32 $5 &DARK-GRAY) (label end-set-selected) - (load-immediate $5 20) ; outline size - (load-immediate $6 17) ; fill size - (load-immediate $7 2) ; offset + (load-immediate $6 20) ; outline size + (load-immediate $7 17) ; fill size + (load-immediate $8 2) ; offset - (push $21) ; base - (push $20) ; width - (push $4) ; color (gray) - (push $2) ; x - (push $3) ; y - (push $5) ; width (20) - (push $5) ; height (20) - (call &draw-box) + (call &draw-box ($0 $4 $5 $2 $3 $6 $6) nil) - (add-int $8 $2 $7) ; x + 2 - (add-int $9 $3 $7) ; y + 2 + (add-int $9 $2 $8) ; x + 2 + (add-int $10 $3 $8) ; y + 2 - (push $21) ; base - (push $20) ; width - (push $1) ; color (original) - (push $8) ; x + 2 - (push $9) ; y + 2 - (push $6) ; width (17) - (push $6) ; height (17) - (call &draw-box) + (call &draw-box ($0 $4 $1 $9 $10 $7 $7) nil) - (return)) + (return nil)) - ; draw-box(color, x, y) - ; Pops: y, x, color (label draw-box - ; Pop arguments (reverse order) - (pop $14) ; height - (pop $12) ; width - (pop $13) ; y_start - (pop $11) ; x_start - (pop $3) ; color - (pop $2) ; width - (pop $21) ; base - - ; Constants - (load-immediate $1 1) ; increment + ; (base, screen_width, color, x_start, y_start, width, height) ; Compute start address: base + y*640 + x - (mul-int $15 $13 $2) ; $15 = y * 640 - (add-int $15 $15 $11) ; $15 += x - (add-nat $15 $21 $15) ; $15 = base + pixel_offset + (mul-int $15 $4 $1) ; $15 = y * 640 + (add-int $15 $15 $3) ; $15 += x + (add-nat $15 $0 $15) ; $15 = base + pixel_offset (load-immediate $25 4) - (add-nat $15 $15 $25) ; need to add offset for fat pointer size - (register-move $4 $15) + (add-nat $15 $15 $25) ; need to add offset for fat pointer size ; Outer loop: height times - (register-move $5 $14) ; $5 = row counter + (load-immediate $30 1) ; increment (label draw-box-outer - (add-int $6 $4 $12) ; $6 = row end = current + width - (register-move $7 $4) ; $7 = pixel pointer - (memset-8 $7 $3 $12) ; draw row - (add-int $4 $4 $2) ; next row (+= 640) - (sub-int $5 $5 $1) ; decrement row count - (jump-gt-int &draw-box-outer $5 0)) - (return))) + (add-int $27 $15 $5) ; $27 = row end = current + width + (register-move $29 $15) ; $7 = pixel pointer + (memset-8 $29 $2 $5) ; draw row + (add-int $15 $15 $1) ; next row (+= 640) + (sub-int $6 $6 $30) ; decrement row count + (jump-gt-int &draw-box-outer $6 0)) + (return nil))) (data (label screen-namespace "/dev/screen/0") (label mouse-namespace "/dev/mouse/0") diff --git a/test/paint.rom b/test/paint.rom index 4f67b045e633e97edf7c1b6f0da08cf1285ab5a0..1d68daaea99fc15be65652eac324c86a565e2bbd 100644 GIT binary patch literal 1417 zcmai!&5G1O5XY;(^3h4Av)ReuvYBB(5o8Y|x~!mhaW9G|pJAP&3J!YK-HR7N^Z|SY zQSc?!!?I5x`UHYUAy#!NkWDbwp?~SB|Gy_xr3V1up2me^Pqa?}O7}Cogt+lI4!XR_u`|r6Y7ktN5${OexZAT3d0`SId7?@Azut zCCx?eVaGeH9(BCe2HtHvRHx1F4y&7v_wK;^!B-pau==IreKhc%cD((n!o~oUGp(ql zO5&1B<&xOZ{`N7xa-3wL^xco7@BUDZKd(y@{Cq+|2zNymoSla5XHg0vm8on6M+X<={`7B5R!PG?~xM16xs4OJjb6)JP< z6V4Chfk)tXLiwEtwWTvAR?FI&hxllHV*eXjtk^$C7-P*LR&+q0iVnAEjp*ZQeiXEk zDhTQ-mQiI@)MiC&!?2e1!f8=CrE9Q6RJLVr|%%uM# z3c4v2bd4yg2Jn$d&7i<;`LN7w<_VKN9E#%x@RRwP`Ga|%`Ih;H`HOkR{LTCeZgP10 literal 1311 zcmai!y^0h;5Xbwg=3{$idY#)@Sm@pjlu`GB6@=qNO}ym9$Y(e=RKZ1KJrfNC(ZtM$ z5CosW#J~p-^#ue&;jHSd!DT&eD(GK#byxqZr>jQ@A--yCHf&e^8$j%WCCtcQ3tNfW zV6Ph08DU%(2#`Z;=S?kPSYt0Pc0*eY9WC~aA6dCeJqZPE79Qvbw_dvo!pM_ebh zjpM~r@bONMIN*rxy!{bJTN;;Xe5S?@er3w4)98;_ZE4)>)p*MhokoAehb@h}y&9jl zG|r0Xip7r4V-!d#W4cv8#!Jq;#EX83^(3ikM6f{w8C1{#+C)K{YPc3~TB!YqB#xwx zBbma0HgyAQFhXJEC^XjGL7$B?d$%xlAomUt##nQJGXPYIkes77rQ(h07_Yqc;31~d zW-4uSoyIANdFDRxNt`mF3PmU}Rg!E#($l%*O4T}N=dN)up=UOCZZb7)3RRn!Vw##s zs*BbbbrC@Bf5L>|#8kL&ac}u#u{wIRTs~M_5oPDO|M2l@iH;L=Y+5(Iz|PyuH_VUB zr_686*UUf6oJoHOGJ2(C^n}U$8sa^ZJ`@=y9&NzfVLoS4{gEB7A$~BQF~2hpnXi~H Mn7^1`n7^5S0Rz)jp#T5?