From f36129f156102f8cda7c714cfe520d47419af926 Mon Sep 17 00:00:00 2001 From: Alexis Jhon Gaspar Date: Thu, 7 Sep 2023 19:13:16 +0800 Subject: [PATCH] New patches --- README.md | 1 + dwm/config.def.h | 27 +- dwm/dwm | Bin 99072 -> 99480 bytes dwm/dwm.c | 165 +- dwm/dwm.o | Bin 95096 -> 98608 bytes dwm/gaplessgrid.c | 35 + dwm/horizgrid.c | 32 + .../dwm-gaplessgrid-20160731-56a31dc.diff | 43 + dwm/patches/dwm-horizgrid-6.1.diff | 70 + dwm/patches/dwm-layoutscroll-6.2.diff | 67 + dwm/patches/dwm-pertag-perseltag-6.2.diff | 224 ++ dwm/patches/dwm-windowfollow-6.3.diff | 142 ++ st/config.def.h | 4 +- st/patches/st-fullscreen-0.8.5.diff | 69 + st/st | Bin 110304 -> 110408 bytes st/st.1 | 6 + st/st.h | 1 + st/x.c | 22 + st/x.c.orig | 2127 ----------------- st/x.o | Bin 75792 -> 76568 bytes 20 files changed, 899 insertions(+), 2136 deletions(-) create mode 100644 dwm/gaplessgrid.c create mode 100644 dwm/horizgrid.c create mode 100644 dwm/patches/dwm-gaplessgrid-20160731-56a31dc.diff create mode 100644 dwm/patches/dwm-horizgrid-6.1.diff create mode 100644 dwm/patches/dwm-layoutscroll-6.2.diff create mode 100644 dwm/patches/dwm-pertag-perseltag-6.2.diff create mode 100644 dwm/patches/dwm-windowfollow-6.3.diff create mode 100644 st/patches/st-fullscreen-0.8.5.diff delete mode 100644 st/x.c.orig diff --git a/README.md b/README.md index 2b037f9..5640813 100644 --- a/README.md +++ b/README.md @@ -39,6 +39,7 @@ or ## Current bugs - ~~Taskbar not working properly~~ (fixed in commit [e9015f2](https://github.com/Lucas-mother3/suckless-utils/commit/e9015f2d2a09ef66f1c9e188b277c89d23635195) & [7085f9](https://github.com/Lucas-mother3/suckless-utils/commit/7085f97d80fc203d6f54d0209af07007c0347880)). Thanks, [Speedie](https://speedie.gq)! +- Unhiding a hidden window (using the show/hide function) crashes dwm ## Patching even further diff --git a/dwm/config.def.h b/dwm/config.def.h index 52f87e5..5e9a632 100644 --- a/dwm/config.def.h +++ b/dwm/config.def.h @@ -65,6 +65,11 @@ static const Rule rules[] = { { "Firefox", NULL, NULL, 1 << 8, 0, 0, -1 }, }; +/* window following */ +#define WFACTIVE '>' +#define WFINACTIVE 'v' +#define WFDEFAULT WFINACTIVE + /* layout(s) */ static const float mfact = 0.55; /* factor of master area size [0.05..0.95] */ static const int nmaster = 1; /* number of clients in master area */ @@ -73,12 +78,16 @@ static const int lockfullscreen = 1; /* 1 will force focus on the fullscreen win static const int decorhints = 1; /* 1 means respect decoration hints */ #include "layouts.c" +#include "horizgrid.c" +#include "gaplessgrid.c" static const Layout layouts[] = { /* symbol arrange function */ { "[]=", tile }, /* first entry is default */ { "><>", NULL }, /* no layout function means floating behavior */ { "[M]", monocle }, { "HHH", grid }, + { "-#-", horizgrid }, + { "###", gaplessgrid }, }; /* key definitions */ @@ -113,6 +122,7 @@ static Key keys[] = { { Mod4Mask, XK_e, spawn, {.v = thunarcmd } }, { Mod4Mask, XK_Print, spawn, SHCMD("maim ~/Pictures/Screenshot_$(date +%s).png") }, { MODKEY|ShiftMask, XK_b, togglebar, {0} }, + { MODKEY|ShiftMask, XK_n, togglefollow, {0} }, { MODKEY, XK_j, focusstackvis, {.i = +1 } }, { MODKEY, XK_k, focusstackvis, {.i = -1 } }, { MODKEY|ShiftMask, XK_j, focusstackhid, {.i = +1 } }, @@ -122,12 +132,14 @@ static Key keys[] = { { MODKEY, XK_h, setmfact, {.f = -0.05} }, { MODKEY, XK_l, setmfact, {.f = +0.05} }, { MODKEY, XK_Return, zoom, {0} }, - { MODKEY, XK_q, view, {0} }, + { MODKEY, XK_q, view, {0} }, { MODKEY|ShiftMask, XK_x, killclient, {0} }, { MODKEY, XK_t, setlayout, {.v = &layouts[0]} }, { MODKEY, XK_f, setlayout, {.v = &layouts[1]} }, { MODKEY, XK_m, setlayout, {.v = &layouts[2]} }, { MODKEY, XK_g, setlayout, {.v = &layouts[3]} }, + { MODKEY|ShiftMask, XK_t, setlayout, {.v = &layouts[4]} }, + { MODKEY|ShiftMask, XK_f, setlayout, {.v = &layouts[5]} }, { MODKEY, XK_space, setlayout, {0} }, { MODKEY|ShiftMask, XK_space, togglefloating, {0} }, { MODKEY|ShiftMask, XK_f, togglefullscr, {0} }, @@ -135,13 +147,15 @@ static Key keys[] = { { MODKEY|ShiftMask, XK_0, tag, {.ui = ~0 } }, { MODKEY, XK_comma, focusmon, {.i = -1 } }, { MODKEY, XK_period, focusmon, {.i = +1 } }, - { MODKEY, XK_s, show, {0} }, - { MODKEY, XK_h, hide, {0} }, + { ControlMask|ShiftMask, XK_s, show, {0} }, + { ControlMask|ShiftMask, XK_h, hide, {0} }, { MODKEY|ShiftMask, XK_comma, tagmon, {.i = -1 } }, { MODKEY|ShiftMask, XK_period, tagmon, {.i = +1 } }, - { MODKEY, XK_minus, setgaps, {.i = -1 } }, - { MODKEY, XK_equal, setgaps, {.i = +1 } }, - { MODKEY|ShiftMask, XK_equal, setgaps, {.i = 0 } }, + { MODKEY|ShiftMask, XK_h, layoutscroll, {.i = -1 } }, + { MODKEY|ShiftMask, XK_l, layoutscroll, {.i = +1 } }, + { MODKEY, XK_minus, setgaps, {.i = -1 } }, + { MODKEY, XK_equal, setgaps, {.i = +1 } }, + { MODKEY|ShiftMask, XK_equal, setgaps, {.i = 0 } }, { Mod1Mask, XK_Tab, altTabStart, {0} }, { MODKEY, XK_n, shiftview, { .i = +1 } }, { MODKEY, XK_b, shiftview, { .i = -1 } }, @@ -164,6 +178,7 @@ static Button buttons[] = { { ClkButton, 0, Button1, spawn, {.v = dmenucmd } }, { ClkLtSymbol, 0, Button1, setlayout, {0} }, { ClkLtSymbol, 0, Button3, setlayout, {.v = &layouts[2]} }, + { ClkFollowSymbol, 0, Button1, togglefollow, {0} }, { ClkWinTitle, 0, Button1, togglewin, {0} }, { ClkWinTitle, 0, Button2, zoom, {0} }, { ClkStatusText, 0, Button2, spawn, {.v = termcmd } }, diff --git a/dwm/dwm b/dwm/dwm index a1f77e887a6823303346996af6e259534775394e..97945b566f288a6b3898c48c1eaf295ab58b1368 100755 GIT binary patch delta 36557 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 eMs2Q$bcobi0kFBjEkJWwp+#^RBS;KV(E 31 ? -1 : 1]; }; @@ -507,6 +522,8 @@ buttonpress(XEvent *e) arg.ui = 1 << i; } else if (ev->x < x + blw) click = ClkLtSymbol; + else if (ev->x < x + blw + TEXTW(selmon->wfsymbol)) + click = ClkFollowSymbol; /* 2px right padding */ else if (ev->x > selmon->ww - TEXTW(stext) + lrpad - 2) click = ClkStatusText; @@ -720,6 +737,7 @@ Monitor * createmon(void) { Monitor *m; + unsigned int i; m = ecalloc(1, sizeof(Monitor)); m->tagset[0] = m->tagset[1] = 1; @@ -728,10 +746,26 @@ createmon(void) m->showbar = showbar; m->topbar = topbar; m->gappx = gappx; + m->ltcur = 0; m->lt[0] = &layouts[0]; m->lt[1] = &layouts[1 % LENGTH(layouts)]; m->nTabs = 0; strncpy(m->ltsymbol, layouts[0].symbol, sizeof m->ltsymbol); + m->pertag = ecalloc(1, sizeof(Pertag)); + m->pertag->curtag = m->pertag->prevtag = 1; + + for (i = 0; i <= LENGTH(tags); i++) { + m->pertag->nmasters[i] = m->nmaster; + m->pertag->mfacts[i] = m->mfact; + + m->pertag->ltidxs[i][0] = m->lt[0]; + m->pertag->ltidxs[i][1] = m->lt[1]; + m->pertag->sellts[i] = m->sellt; + + m->pertag->showbars[i] = m->showbar; + } + m->wfsymbol[0] = WFDEFAULT; + m->wfsymbol[1] = '\0'; return m; } @@ -850,6 +884,9 @@ drawbar(Monitor *m) drw_setscheme(drw, scheme[SchemeNorm]); x = drw_text(drw, x, 0, w, bh, lrpad / 2, m->ltsymbol, 0); + w = TEXTW(m->wfsymbol); + x = drw_text(drw, x, 0, w, bh, lrpad / 2, m->wfsymbol, 0); + if ((w = m->ww - tw - x) > bh) { if (n > 0) { int remainder = w % n; @@ -1219,7 +1256,16 @@ hidewin(Client *c) { void incnmaster(const Arg *arg) { + unsigned int i; selmon->nmaster = MAX(selmon->nmaster + arg->i, 0); + for(i=0; itagset[selmon->seltags] & 1<pertag->nmasters[i+1] = selmon->nmaster; + + if(selmon->pertag->curtag == 0) + { + selmon->pertag->nmasters[0] = selmon->nmaster; + } arrange(selmon); } @@ -1764,14 +1810,48 @@ setgaps(const Arg *arg) arrange(selmon); } +void +layoutscroll(const Arg *arg) +{ + if (!arg || !arg->i) + return; + int switchto = selmon->ltcur + arg->i; + int l = LENGTH(layouts); + + if (switchto == l) + switchto = 0; + else if(switchto < 0) + switchto = l - 1; + + selmon->ltcur = switchto; + Arg arg2 = {.v= &layouts[switchto] }; + setlayout(&arg2); + +} + void setlayout(const Arg *arg) { + unsigned int i; if (!arg || !arg->v || arg->v != selmon->lt[selmon->sellt]) selmon->sellt ^= 1; if (arg && arg->v) selmon->lt[selmon->sellt] = (Layout *)arg->v; strncpy(selmon->ltsymbol, selmon->lt[selmon->sellt]->symbol, sizeof selmon->ltsymbol); + + for(i=0; itagset[selmon->seltags] & 1<pertag->ltidxs[i+1][selmon->sellt] = selmon->lt[selmon->sellt]; + selmon->pertag->sellts[i+1] = selmon->sellt; + } + + if(selmon->pertag->curtag == 0) + { + selmon->pertag->ltidxs[0][selmon->sellt] = selmon->lt[selmon->sellt]; + selmon->pertag->sellts[0] = selmon->sellt; + } + if (selmon->sel) arrange(selmon); else @@ -1783,13 +1863,24 @@ void setmfact(const Arg *arg) { float f; + unsigned int i; if (!arg || !selmon->lt[selmon->sellt]->arrange) return; f = arg->f < 1.0 ? arg->f + selmon->mfact : arg->f - 1.0; + if (arg->f == 0.0) + f = mfact; if (f < 0.05 || f > 0.95) return; selmon->mfact = f; + for(i=0; itagset[selmon->seltags] & 1<pertag->mfacts[i+1] = f; + + if(selmon->pertag->curtag == 0) + { + selmon->pertag->mfacts[0] = f; + } arrange(selmon); } @@ -2154,6 +2245,8 @@ tag(const Arg *arg) focus(NULL); arrange(selmon); } + if (selmon->wfsymbol[0] == WFACTIVE) + view(arg); } void @@ -2162,6 +2255,8 @@ tagmon(const Arg *arg) if (!selmon->sel || !mons->next) return; sendmon(selmon->sel, dirtomon(arg->i)); + if (selmon->wfsymbol[0] == WFACTIVE) + focusmon(arg); } void @@ -2201,12 +2296,28 @@ tile(Monitor *m) void togglebar(const Arg *arg) { + unsigned int i; selmon->showbar = !selmon->showbar; + for(i=0; itagset[selmon->seltags] & 1<pertag->showbars[i+1] = selmon->showbar; + + if(selmon->pertag->curtag == 0) + { + selmon->pertag->showbars[0] = selmon->showbar; + } updatebarpos(selmon); XMoveResizeWindow(dpy, selmon->barwin, selmon->wx, selmon->by, selmon->ww, bh); arrange(selmon); } +void +togglefollow(const Arg *arg) +{ + selmon->wfsymbol[0] = (selmon->wfsymbol[0] == WFACTIVE) ? WFINACTIVE : WFACTIVE; + drawbars(); +} + void togglefloating(const Arg *arg) { @@ -2247,9 +2358,33 @@ void toggleview(const Arg *arg) { unsigned int newtagset = selmon->tagset[selmon->seltags] ^ (arg->ui & TAGMASK); + int i; if (newtagset) { selmon->tagset[selmon->seltags] = newtagset; + + if (newtagset == ~0) { + selmon->pertag->prevtag = selmon->pertag->curtag; + selmon->pertag->curtag = 0; + } + + /* test if the user did not select the same tag */ + if (!(newtagset & 1 << (selmon->pertag->curtag - 1))) { + selmon->pertag->prevtag = selmon->pertag->curtag; + for (i = 0; !(newtagset & 1 << i); i++) ; + selmon->pertag->curtag = i + 1; + } + + /* apply settings for this view */ + selmon->nmaster = selmon->pertag->nmasters[selmon->pertag->curtag]; + selmon->mfact = selmon->pertag->mfacts[selmon->pertag->curtag]; + selmon->sellt = selmon->pertag->sellts[selmon->pertag->curtag]; + selmon->lt[selmon->sellt] = selmon->pertag->ltidxs[selmon->pertag->curtag][selmon->sellt]; + selmon->lt[selmon->sellt^1] = selmon->pertag->ltidxs[selmon->pertag->curtag][selmon->sellt^1]; + + if (selmon->showbar != selmon->pertag->showbars[selmon->pertag->curtag]) + togglebar(NULL); + focus(NULL); arrange(selmon); } @@ -2613,11 +2748,37 @@ updatewmhints(Client *c) void view(const Arg *arg) { + int i; + unsigned int tmptag; + if ((arg->ui & TAGMASK) == selmon->tagset[selmon->seltags]) return; selmon->seltags ^= 1; /* toggle sel tagset */ - if (arg->ui & TAGMASK) + if (arg->ui & TAGMASK) { selmon->tagset[selmon->seltags] = arg->ui & TAGMASK; + selmon->pertag->prevtag = selmon->pertag->curtag; + + if (arg->ui == ~0) + selmon->pertag->curtag = 0; + else { + for (i = 0; !(arg->ui & 1 << i); i++) ; + selmon->pertag->curtag = i + 1; + } + } else { + tmptag = selmon->pertag->prevtag; + selmon->pertag->prevtag = selmon->pertag->curtag; + selmon->pertag->curtag = tmptag; + } + + selmon->nmaster = selmon->pertag->nmasters[selmon->pertag->curtag]; + selmon->mfact = selmon->pertag->mfacts[selmon->pertag->curtag]; + selmon->sellt = selmon->pertag->sellts[selmon->pertag->curtag]; + selmon->lt[selmon->sellt] = selmon->pertag->ltidxs[selmon->pertag->curtag][selmon->sellt]; + selmon->lt[selmon->sellt^1] = selmon->pertag->ltidxs[selmon->pertag->curtag][selmon->sellt^1]; + + if (selmon->showbar != selmon->pertag->showbars[selmon->pertag->curtag]) + togglebar(NULL); + focus(NULL); arrange(selmon); } diff --git a/dwm/dwm.o b/dwm/dwm.o index e116bcd5f0e19f4fa7d741f95a071984509119c9..9e668213a7c9c8cde9648967a98d72fac5c644ef 100644 GIT binary patch literal 98608 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 c; c = nexttiled(c->next), n++) ; + if(n == 0) + return; + + /* grid dimensions */ + for(cols = 0; cols <= n/2; cols++) + if(cols*cols >= n) + break; + if(n == 5) /* set layout against the general calculation: not 1:2:2, but 2:3 */ + cols = 2; + rows = n/cols; + + /* window geometries */ + cw = cols ? m->ww / cols : m->ww; + cn = 0; /* current column number */ + rn = 0; /* current row number */ + for(i = 0, c = nexttiled(m->clients); c; i++, c = nexttiled(c->next)) { + if(i/rows + 1 > cols - n%cols) + rows = n/cols + 1; + ch = rows ? m->wh / rows : m->wh; + cx = m->wx + cn*cw; + cy = m->wy + rn*ch; + resize(c, cx, cy, cw - 2 * c->bw, ch - 2 * c->bw, False); + rn++; + if(rn >= rows) { + rn = 0; + cn++; + } + } +} diff --git a/dwm/horizgrid.c b/dwm/horizgrid.c new file mode 100644 index 0000000..51ce0f8 --- /dev/null +++ b/dwm/horizgrid.c @@ -0,0 +1,32 @@ +void +horizgrid(Monitor *m) { + Client *c; + unsigned int n, i; + int w = 0; + int ntop, nbottom = 0; + + /* Count windows */ + for(n = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), n++); + + if(n == 0) + return; + else if(n == 1) { /* Just fill the whole screen */ + c = nexttiled(m->clients); + resize(c, m->wx, m->wy, m->ww - (2*c->bw), m->wh - (2*c->bw), False); + } else if(n == 2) { /* Split vertically */ + w = m->ww / 2; + c = nexttiled(m->clients); + resize(c, m->wx, m->wy, w - (2*c->bw), m->wh - (2*c->bw), False); + c = nexttiled(c->next); + resize(c, m->wx + w, m->wy, w - (2*c->bw), m->wh - (2*c->bw), False); + } else { + ntop = n / 2; + nbottom = n - ntop; + for(i = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), i++) { + if(i < ntop) + resize(c, m->wx + i * m->ww / ntop, m->wy, m->ww / ntop - (2*c->bw), m->wh / 2 - (2*c->bw), False); + else + resize(c, m->wx + (i - ntop) * m->ww / nbottom, m->wy + m->wh / 2, m->ww / nbottom - (2*c->bw), m->wh / 2 - (2*c->bw), False); + } + } +} diff --git a/dwm/patches/dwm-gaplessgrid-20160731-56a31dc.diff b/dwm/patches/dwm-gaplessgrid-20160731-56a31dc.diff new file mode 100644 index 0000000..4f3bb13 --- /dev/null +++ b/dwm/patches/dwm-gaplessgrid-20160731-56a31dc.diff @@ -0,0 +1,43 @@ +URL: http://dwm.suckless.org/patches/gapless_grid +Add gapless grid layout. + +Index: dwm/gaplessgrid.c +=================================================================== +--- /dev/null ++++ dwm/gaplessgrid.c +@@ -0,0 +1,35 @@ ++void ++gaplessgrid(Monitor *m) { ++ unsigned int n, cols, rows, cn, rn, i, cx, cy, cw, ch; ++ Client *c; ++ ++ for(n = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), n++) ; ++ if(n == 0) ++ return; ++ ++ /* grid dimensions */ ++ for(cols = 0; cols <= n/2; cols++) ++ if(cols*cols >= n) ++ break; ++ if(n == 5) /* set layout against the general calculation: not 1:2:2, but 2:3 */ ++ cols = 2; ++ rows = n/cols; ++ ++ /* window geometries */ ++ cw = cols ? m->ww / cols : m->ww; ++ cn = 0; /* current column number */ ++ rn = 0; /* current row number */ ++ for(i = 0, c = nexttiled(m->clients); c; i++, c = nexttiled(c->next)) { ++ if(i/rows + 1 > cols - n%cols) ++ rows = n/cols + 1; ++ ch = rows ? m->wh / rows : m->wh; ++ cx = m->wx + cn*cw; ++ cy = m->wy + rn*ch; ++ resize(c, cx, cy, cw - 2 * c->bw, ch - 2 * c->bw, False); ++ rn++; ++ if(rn >= rows) { ++ rn = 0; ++ cn++; ++ } ++ } ++} diff --git a/dwm/patches/dwm-horizgrid-6.1.diff b/dwm/patches/dwm-horizgrid-6.1.diff new file mode 100644 index 0000000..0920cee --- /dev/null +++ b/dwm/patches/dwm-horizgrid-6.1.diff @@ -0,0 +1,70 @@ +From 064e1d48631cd9b03f32b42d7be79677197ee42f Mon Sep 17 00:00:00 2001 +From: Marshall Mason +Date: Mon, 9 Nov 2015 12:38:28 -0800 +Subject: [PATCH] Added horizgrid function + +--- + config.def.h | 2 ++ + horizgrid.c | 32 ++++++++++++++++++++++++++++++++ + 2 files changed, 34 insertions(+) + create mode 100644 horizgrid.c + +diff --git a/config.def.h b/config.def.h +index eaae8f3..c2ad519 100644 +--- a/config.def.h ++++ b/config.def.h +@@ -36,11 +36,13 @@ static const float mfact = 0.55; /* factor of master area size [0.05..0.95] + static const int nmaster = 1; /* number of clients in master area */ + static const Bool resizehints = True; /* True means respect size hints in tiled resizals */ + ++#include "horizgrid.c" + static const Layout layouts[] = { + /* symbol arrange function */ + { "[]=", tile }, /* first entry is default */ + { "><>", NULL }, /* no layout function means floating behavior */ + { "[M]", monocle }, ++ { "###", horizgrid }, + }; + + /* key definitions */ +diff --git a/horizgrid.c b/horizgrid.c +new file mode 100644 +index 0000000..51ce0f8 +--- /dev/null ++++ b/horizgrid.c +@@ -0,0 +1,32 @@ ++void ++horizgrid(Monitor *m) { ++ Client *c; ++ unsigned int n, i; ++ int w = 0; ++ int ntop, nbottom = 0; ++ ++ /* Count windows */ ++ for(n = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), n++); ++ ++ if(n == 0) ++ return; ++ else if(n == 1) { /* Just fill the whole screen */ ++ c = nexttiled(m->clients); ++ resize(c, m->wx, m->wy, m->ww - (2*c->bw), m->wh - (2*c->bw), False); ++ } else if(n == 2) { /* Split vertically */ ++ w = m->ww / 2; ++ c = nexttiled(m->clients); ++ resize(c, m->wx, m->wy, w - (2*c->bw), m->wh - (2*c->bw), False); ++ c = nexttiled(c->next); ++ resize(c, m->wx + w, m->wy, w - (2*c->bw), m->wh - (2*c->bw), False); ++ } else { ++ ntop = n / 2; ++ nbottom = n - ntop; ++ for(i = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), i++) { ++ if(i < ntop) ++ resize(c, m->wx + i * m->ww / ntop, m->wy, m->ww / ntop - (2*c->bw), m->wh / 2 - (2*c->bw), False); ++ else ++ resize(c, m->wx + (i - ntop) * m->ww / nbottom, m->wy + m->wh / 2, m->ww / nbottom - (2*c->bw), m->wh / 2 - (2*c->bw), False); ++ } ++ } ++} +-- +2.1.4 + diff --git a/dwm/patches/dwm-layoutscroll-6.2.diff b/dwm/patches/dwm-layoutscroll-6.2.diff new file mode 100644 index 0000000..95e621d --- /dev/null +++ b/dwm/patches/dwm-layoutscroll-6.2.diff @@ -0,0 +1,67 @@ +diff --git a/config.def.h b/config.def.h +index 4c56466..11ee7b5 100644 +--- a/config.def.h ++++ b/config.def.h +@@ -90,6 +90,8 @@ static Key keys[] = { + { MODKEY, XK_period, focusmon, {.i = +1 } }, + { MODKEY|ShiftMask, XK_comma, tagmon, {.i = -1 } }, + { MODKEY|ShiftMask, XK_period, tagmon, {.i = +1 } }, ++ { MODKEY|ShiftMask, XK_h, layoutscroll, {.i = -1 } }, ++ { MODKEY|ShiftMask, XK_l, layoutscroll, {.i = +1 } }, + TAGKEYS( XK_1, 0) + TAGKEYS( XK_2, 1) + TAGKEYS( XK_3, 2) +diff --git a/dwm.c b/dwm.c +index 1e37fcf..24effbc 100644 +--- a/dwm.c ++++ b/dwm.c +@@ -148,6 +148,7 @@ struct Monitor { + Monitor *next; + Window barwin; + const Layout *lt[2]; ++ int ltcur; /* current layout */ + }; + + typedef struct { +@@ -227,6 +228,7 @@ static void sendmon(Client *c, Monitor *m); + static void setclientstate(Client *c, long state); + static void setfocus(Client *c); + static void setfullscreen(Client *c, int fullscreen); ++static void layoutscroll(const Arg *arg); + static void setlayout(const Arg *arg); + static void setmfact(const Arg *arg); + static void setup(void); +@@ -725,6 +727,7 @@ createmon(void) + m->nmaster = nmaster; + m->showbar = showbar; + m->topbar = topbar; ++ m->ltcur = 0; + m->lt[0] = &layouts[0]; + m->lt[1] = &layouts[1 % LENGTH(layouts)]; + strncpy(m->ltsymbol, layouts[0].symbol, sizeof m->ltsymbol); +@@ -1667,6 +1670,25 @@ setfullscreen(Client *c, int fullscreen) + } + } + ++void ++layoutscroll(const Arg *arg) ++{ ++ if (!arg || !arg->i) ++ return; ++ int switchto = selmon->ltcur + arg->i; ++ int l = LENGTH(layouts); ++ ++ if (switchto == l) ++ switchto = 0; ++ else if(switchto < 0) ++ switchto = l - 1; ++ ++ selmon->ltcur = switchto; ++ Arg arg2 = {.v= &layouts[switchto] }; ++ setlayout(&arg2); ++ ++} ++ + void + setlayout(const Arg *arg) + { diff --git a/dwm/patches/dwm-pertag-perseltag-6.2.diff b/dwm/patches/dwm-pertag-perseltag-6.2.diff new file mode 100644 index 0000000..743e7c1 --- /dev/null +++ b/dwm/patches/dwm-pertag-perseltag-6.2.diff @@ -0,0 +1,224 @@ +diff -up a/dwm.c b/dwm.c +--- a/dwm.c 2020-05-23 00:20:34.877944603 +0200 ++++ b/dwm.c 2020-06-22 12:49:55.298859682 +0200 +@@ -111,6 +111,7 @@ typedef struct { + void (*arrange)(Monitor *); + } Layout; + ++typedef struct Pertag Pertag; + struct Monitor { + char ltsymbol[16]; + float mfact; +@@ -130,6 +131,7 @@ struct Monitor { + Monitor *next; + Window barwin; + const Layout *lt[2]; ++ Pertag *pertag; + }; + + typedef struct { +@@ -271,6 +273,15 @@ static Window root, wmcheckwin; + /* configuration, allows nested code to access above variables */ + #include "config.h" + ++struct Pertag { ++ unsigned int curtag, prevtag; /* current and previous tag */ ++ int nmasters[LENGTH(tags) + 1]; /* number of windows in master area */ ++ float mfacts[LENGTH(tags) + 1]; /* mfacts per tag */ ++ unsigned int sellts[LENGTH(tags) + 1]; /* selected layouts */ ++ const Layout *ltidxs[LENGTH(tags) + 1][2]; /* matrix of tags and layouts indexes */ ++ int showbars[LENGTH(tags) + 1]; /* display bar for the current tag */ ++}; ++ + /* compile-time check if all tags fit into an unsigned int bit array. */ + struct NumTags { char limitexceeded[LENGTH(tags) > 31 ? -1 : 1]; }; + +@@ -631,6 +642,7 @@ Monitor * + createmon(void) + { + Monitor *m; ++ unsigned int i; + + m = ecalloc(1, sizeof(Monitor)); + m->tagset[0] = m->tagset[1] = 1; +@@ -641,6 +653,20 @@ createmon(void) + m->lt[0] = &layouts[0]; + m->lt[1] = &layouts[1 % LENGTH(layouts)]; + strncpy(m->ltsymbol, layouts[0].symbol, sizeof m->ltsymbol); ++ m->pertag = ecalloc(1, sizeof(Pertag)); ++ m->pertag->curtag = m->pertag->prevtag = 1; ++ ++ for (i = 0; i <= LENGTH(tags); i++) { ++ m->pertag->nmasters[i] = m->nmaster; ++ m->pertag->mfacts[i] = m->mfact; ++ ++ m->pertag->ltidxs[i][0] = m->lt[0]; ++ m->pertag->ltidxs[i][1] = m->lt[1]; ++ m->pertag->sellts[i] = m->sellt; ++ ++ m->pertag->showbars[i] = m->showbar; ++ } ++ + return m; + } + +@@ -966,7 +992,16 @@ grabkeys(void) + void + incnmaster(const Arg *arg) + { ++ unsigned int i; + selmon->nmaster = MAX(selmon->nmaster + arg->i, 0); ++ for(i=0; itagset[selmon->seltags] & 1<pertag->nmasters[i+1] = selmon->nmaster; ++ ++ if(selmon->pertag->curtag == 0) ++ { ++ selmon->pertag->nmasters[0] = selmon->nmaster; ++ } + arrange(selmon); + } + +@@ -1500,11 +1535,26 @@ setfullscreen(Client *c, int fullscreen) + void + setlayout(const Arg *arg) + { ++ unsigned int i; + if (!arg || !arg->v || arg->v != selmon->lt[selmon->sellt]) + selmon->sellt ^= 1; + if (arg && arg->v) + selmon->lt[selmon->sellt] = (Layout *)arg->v; + strncpy(selmon->ltsymbol, selmon->lt[selmon->sellt]->symbol, sizeof selmon->ltsymbol); ++ ++ for(i=0; itagset[selmon->seltags] & 1<pertag->ltidxs[i+1][selmon->sellt] = selmon->lt[selmon->sellt]; ++ selmon->pertag->sellts[i+1] = selmon->sellt; ++ } ++ ++ if(selmon->pertag->curtag == 0) ++ { ++ selmon->pertag->ltidxs[0][selmon->sellt] = selmon->lt[selmon->sellt]; ++ selmon->pertag->sellts[0] = selmon->sellt; ++ } ++ + if (selmon->sel) + arrange(selmon); + else +@@ -1516,13 +1566,24 @@ void + setmfact(const Arg *arg) + { + float f; ++ unsigned int i; + + if (!arg || !selmon->lt[selmon->sellt]->arrange) + return; + f = arg->f < 1.0 ? arg->f + selmon->mfact : arg->f - 1.0; +- if (f < 0.1 || f > 0.9) ++ if (arg->f == 0.0) ++ f = mfact; ++ if (f < 0.05 || f > 0.95) + return; + selmon->mfact = f; ++ for(i=0; itagset[selmon->seltags] & 1<pertag->mfacts[i+1] = f; ++ ++ if(selmon->pertag->curtag == 0) ++ { ++ selmon->pertag->mfacts[0] = f; ++ } + arrange(selmon); + } + +@@ -1699,7 +1760,16 @@ tile(Monitor *m) + void + togglebar(const Arg *arg) + { ++ unsigned int i; + selmon->showbar = !selmon->showbar; ++ for(i=0; itagset[selmon->seltags] & 1<pertag->showbars[i+1] = selmon->showbar; ++ ++ if(selmon->pertag->curtag == 0) ++ { ++ selmon->pertag->showbars[0] = selmon->showbar; ++ } + updatebarpos(selmon); + XMoveResizeWindow(dpy, selmon->barwin, selmon->wx, selmon->by, selmon->ww, bh); + arrange(selmon); +@@ -1738,9 +1808,33 @@ void + toggleview(const Arg *arg) + { + unsigned int newtagset = selmon->tagset[selmon->seltags] ^ (arg->ui & TAGMASK); ++ int i; + + if (newtagset) { + selmon->tagset[selmon->seltags] = newtagset; ++ ++ if (newtagset == ~0) { ++ selmon->pertag->prevtag = selmon->pertag->curtag; ++ selmon->pertag->curtag = 0; ++ } ++ ++ /* test if the user did not select the same tag */ ++ if (!(newtagset & 1 << (selmon->pertag->curtag - 1))) { ++ selmon->pertag->prevtag = selmon->pertag->curtag; ++ for (i = 0; !(newtagset & 1 << i); i++) ; ++ selmon->pertag->curtag = i + 1; ++ } ++ ++ /* apply settings for this view */ ++ selmon->nmaster = selmon->pertag->nmasters[selmon->pertag->curtag]; ++ selmon->mfact = selmon->pertag->mfacts[selmon->pertag->curtag]; ++ selmon->sellt = selmon->pertag->sellts[selmon->pertag->curtag]; ++ selmon->lt[selmon->sellt] = selmon->pertag->ltidxs[selmon->pertag->curtag][selmon->sellt]; ++ selmon->lt[selmon->sellt^1] = selmon->pertag->ltidxs[selmon->pertag->curtag][selmon->sellt^1]; ++ ++ if (selmon->showbar != selmon->pertag->showbars[selmon->pertag->curtag]) ++ togglebar(NULL); ++ + focus(NULL); + arrange(selmon); + } +@@ -2035,11 +2129,37 @@ updatewmhints(Client *c) + void + view(const Arg *arg) + { ++ int i; ++ unsigned int tmptag; ++ + if ((arg->ui & TAGMASK) == selmon->tagset[selmon->seltags]) + return; + selmon->seltags ^= 1; /* toggle sel tagset */ +- if (arg->ui & TAGMASK) ++ if (arg->ui & TAGMASK) { + selmon->tagset[selmon->seltags] = arg->ui & TAGMASK; ++ selmon->pertag->prevtag = selmon->pertag->curtag; ++ ++ if (arg->ui == ~0) ++ selmon->pertag->curtag = 0; ++ else { ++ for (i = 0; !(arg->ui & 1 << i); i++) ; ++ selmon->pertag->curtag = i + 1; ++ } ++ } else { ++ tmptag = selmon->pertag->prevtag; ++ selmon->pertag->prevtag = selmon->pertag->curtag; ++ selmon->pertag->curtag = tmptag; ++ } ++ ++ selmon->nmaster = selmon->pertag->nmasters[selmon->pertag->curtag]; ++ selmon->mfact = selmon->pertag->mfacts[selmon->pertag->curtag]; ++ selmon->sellt = selmon->pertag->sellts[selmon->pertag->curtag]; ++ selmon->lt[selmon->sellt] = selmon->pertag->ltidxs[selmon->pertag->curtag][selmon->sellt]; ++ selmon->lt[selmon->sellt^1] = selmon->pertag->ltidxs[selmon->pertag->curtag][selmon->sellt^1]; ++ ++ if (selmon->showbar != selmon->pertag->showbars[selmon->pertag->curtag]) ++ togglebar(NULL); ++ + focus(NULL); + arrange(selmon); + } diff --git a/dwm/patches/dwm-windowfollow-6.3.diff b/dwm/patches/dwm-windowfollow-6.3.diff new file mode 100644 index 0000000..b74cfda --- /dev/null +++ b/dwm/patches/dwm-windowfollow-6.3.diff @@ -0,0 +1,142 @@ +diff '--color=auto' -up dwm-6.3/config.def.h windowfollow-impl-6-3/config.def.h +--- dwm-6.3/config.def.h 2022-01-07 11:42:18.000000000 +0000 ++++ windowfollow-impl-6-3/config.def.h 2022-10-02 18:32:22.244267491 +0100 +@@ -31,6 +31,11 @@ static const Rule rules[] = { + { "Firefox", NULL, NULL, 1 << 8, 0, -1 }, + }; + ++/* window following */ ++#define WFACTIVE '>' ++#define WFINACTIVE 'v' ++#define WFDEFAULT WFINACTIVE ++ + /* layout(s) */ + static const float mfact = 0.55; /* factor of master area size [0.05..0.95] */ + static const int nmaster = 1; /* number of clients in master area */ +@@ -65,6 +70,7 @@ static Key keys[] = { + { MODKEY, XK_p, spawn, {.v = dmenucmd } }, + { MODKEY|ShiftMask, XK_Return, spawn, {.v = termcmd } }, + { MODKEY, XK_b, togglebar, {0} }, ++ { MODKEY, XK_n, togglefollow, {0} }, + { MODKEY, XK_j, focusstack, {.i = +1 } }, + { MODKEY, XK_k, focusstack, {.i = -1 } }, + { MODKEY, XK_i, incnmaster, {.i = +1 } }, +@@ -103,6 +109,7 @@ static Button buttons[] = { + /* click event mask button function argument */ + { ClkLtSymbol, 0, Button1, setlayout, {0} }, + { ClkLtSymbol, 0, Button3, setlayout, {.v = &layouts[2]} }, ++ { ClkFollowSymbol, 0, Button1, togglefollow, {0} }, + { ClkWinTitle, 0, Button2, zoom, {0} }, + { ClkStatusText, 0, Button2, spawn, {.v = termcmd } }, + { ClkClientWin, MODKEY, Button1, movemouse, {0} }, +diff '--color=auto' -up dwm-6.3/dwm.1 windowfollow-impl-6-3/dwm.1 +--- dwm-6.3/dwm.1 2022-01-07 11:42:18.000000000 +0000 ++++ windowfollow-impl-6-3/dwm.1 2022-10-02 18:32:22.244267491 +0100 +@@ -44,7 +44,8 @@ command. + .TP + .B Button1 + click on a tag label to display all windows with that tag, click on the layout +-label toggles between tiled and floating layout. ++label toggles between tiled and floating layout, click on the window follow ++icon toggles it on and off. + .TP + .B Button3 + click on a tag label adds/removes all windows with that tag to/from the view. +@@ -80,6 +81,9 @@ Send focused window to next screen, if a + .B Mod1\-b + Toggles bar on and off. + .TP ++.B Mod1\-n ++Toggles window following on and off. ++.TP + .B Mod1\-t + Sets tiled layout. + .TP +diff '--color=auto' -up dwm-6.3/dwm.c windowfollow-impl-6-3/dwm.c +--- dwm-6.3/dwm.c 2022-01-07 11:42:18.000000000 +0000 ++++ windowfollow-impl-6-3/dwm.c 2022-10-02 18:32:22.244267491 +0100 +@@ -65,7 +65,7 @@ enum { NetSupported, NetWMName, NetWMSta + NetWMWindowTypeDialog, NetClientList, NetLast }; /* EWMH atoms */ + enum { WMProtocols, WMDelete, WMState, WMTakeFocus, WMLast }; /* default atoms */ + enum { ClkTagBar, ClkLtSymbol, ClkStatusText, ClkWinTitle, +- ClkClientWin, ClkRootWin, ClkLast }; /* clicks */ ++ ClkClientWin, ClkRootWin, ClkFollowSymbol, ClkLast }; /* clicks */ + + typedef union { + int i; +@@ -113,6 +113,7 @@ typedef struct { + + struct Monitor { + char ltsymbol[16]; ++ char wfsymbol[2]; + float mfact; + int nmaster; + int num; +@@ -212,6 +213,7 @@ static void tagmon(const Arg *arg); + static void tile(Monitor *); + static void togglebar(const Arg *arg); + static void togglefloating(const Arg *arg); ++static void togglefollow(const Arg *arg); + static void toggletag(const Arg *arg); + static void toggleview(const Arg *arg); + static void unfocus(Client *c, int setfocus); +@@ -440,6 +442,8 @@ buttonpress(XEvent *e) + arg.ui = 1 << i; + } else if (ev->x < x + blw) + click = ClkLtSymbol; ++ else if (ev->x < x + blw + TEXTW(selmon->wfsymbol)) ++ click = ClkFollowSymbol; + else if (ev->x > selmon->ww - (int)TEXTW(stext)) + click = ClkStatusText; + else +@@ -642,6 +646,8 @@ createmon(void) + m->lt[0] = &layouts[0]; + m->lt[1] = &layouts[1 % LENGTH(layouts)]; + strncpy(m->ltsymbol, layouts[0].symbol, sizeof m->ltsymbol); ++ m->wfsymbol[0] = WFDEFAULT; ++ m->wfsymbol[1] = '\0'; + return m; + } + +@@ -732,6 +738,9 @@ drawbar(Monitor *m) + drw_setscheme(drw, scheme[SchemeNorm]); + x = drw_text(drw, x, 0, w, bh, lrpad / 2, m->ltsymbol, 0); + ++ w = TEXTW(m->wfsymbol); ++ x = drw_text(drw, x, 0, w, bh, lrpad / 2, m->wfsymbol, 0); ++ + if ((w = m->ww - tw - x) > bh) { + if (m->sel) { + drw_setscheme(drw, scheme[m == selmon ? SchemeSel : SchemeNorm]); +@@ -1664,6 +1673,8 @@ tag(const Arg *arg) + focus(NULL); + arrange(selmon); + } ++ if (selmon->wfsymbol[0] == WFACTIVE) ++ view(arg); + } + + void +@@ -1672,6 +1683,8 @@ tagmon(const Arg *arg) + if (!selmon->sel || !mons->next) + return; + sendmon(selmon->sel, dirtomon(arg->i)); ++ if (selmon->wfsymbol[0] == WFACTIVE) ++ focusmon(arg); + } + + void +@@ -1712,6 +1725,13 @@ togglebar(const Arg *arg) + } + + void ++togglefollow(const Arg *arg) ++{ ++ selmon->wfsymbol[0] = (selmon->wfsymbol[0] == WFACTIVE) ? WFINACTIVE : WFACTIVE; ++ drawbars(); ++} ++ ++void + togglefloating(const Arg *arg) + { + if (!selmon->sel) diff --git a/st/config.def.h b/st/config.def.h index b4c32ac..a41ba9a 100644 --- a/st/config.def.h +++ b/st/config.def.h @@ -208,8 +208,10 @@ static Shortcut shortcuts[] = { { TERMMOD, XK_Y, selpaste, {.i = 0} }, { ShiftMask, XK_Insert, selpaste, {.i = 0} }, { TERMMOD, XK_Num_Lock, numlock, {.i = 0} }, + { XK_NO_MOD, XK_F11, fullscreen, {.i = 0} }, + { MODKEY, XK_Return, fullscreen, {.i = 0} }, { ShiftMask, XK_Page_Up, kscrollup, {.i = -1} }, - { ShiftMask, XK_Page_Down, kscrolldown, {.i = -1} }, + { ShiftMask, XK_Page_Down, kscrolldown, {.i = -1} }, { TERMMOD, XK_Return, newterm, {.i = 0} }, { ControlMask|Mod1Mask, XK_slash, autocomplete, { .i = ACMPL_WORD } }, { ControlMask|Mod1Mask, XK_period, autocomplete, { .i = ACMPL_FUZZY_WORD } }, diff --git a/st/patches/st-fullscreen-0.8.5.diff b/st/patches/st-fullscreen-0.8.5.diff new file mode 100644 index 0000000..3e2868d --- /dev/null +++ b/st/patches/st-fullscreen-0.8.5.diff @@ -0,0 +1,69 @@ +diff -r -u a/config.def.h b/config.def.h +--- a/config.def.h 2022-01-07 06:41:35.000000000 -0500 ++++ b/config.def.h 2022-01-15 13:32:01.644320198 -0500 +@@ -201,6 +201,8 @@ + { TERMMOD, XK_Y, selpaste, {.i = 0} }, + { ShiftMask, XK_Insert, selpaste, {.i = 0} }, + { TERMMOD, XK_Num_Lock, numlock, {.i = 0} }, ++ { XK_NO_MOD, XK_F11, fullscreen, {.i = 0} }, ++ { MODKEY, XK_Return, fullscreen, {.i = 0} }, + }; + + /* +diff -r -u a/st.h b/st.h +--- a/st.h 2022-01-07 06:41:35.000000000 -0500 ++++ b/st.h 2022-01-15 13:32:40.084320514 -0500 +@@ -81,6 +81,7 @@ + void redraw(void); + void draw(void); + ++void fullscreen(const Arg *); + void printscreen(const Arg *); + void printsel(const Arg *); + void sendbreak(const Arg *); +diff -r -u a/x.c b/x.c +--- a/x.c 2022-01-07 06:41:35.000000000 -0500 ++++ b/x.c 2022-01-15 13:50:28.164329295 -0500 +@@ -94,6 +94,7 @@ + Drawable buf; + GlyphFontSpec *specbuf; /* font spec buffer used for rendering */ + Atom xembed, wmdeletewin, netwmname, netwmiconname, netwmpid; ++ Atom netwmstate, netwmfullscreen; + struct { + XIM xim; + XIC xic; +@@ -744,6 +745,24 @@ + xw.specbuf = xrealloc(xw.specbuf, col * sizeof(GlyphFontSpec)); + } + ++void ++fullscreen(const Arg *arg) ++{ ++ XEvent ev; ++ ++ memset(&ev, 0, sizeof(ev)); ++ ++ ev.xclient.type = ClientMessage; ++ ev.xclient.message_type = xw.netwmstate; ++ ev.xclient.display = xw.dpy; ++ ev.xclient.window = xw.win; ++ ev.xclient.format = 32; ++ ev.xclient.data.l[0] = 2; /* _NET_WM_STATE_TOGGLE */ ++ ev.xclient.data.l[1] = xw.netwmfullscreen; ++ ++ XSendEvent(xw.dpy, DefaultRootWindow(xw.dpy), False, SubstructureNotifyMask|SubstructureRedirectMask, &ev); ++} ++ + ushort + sixd_to_16bit(int x) + { +@@ -1208,6 +1227,9 @@ + XChangeProperty(xw.dpy, xw.win, xw.netwmpid, XA_CARDINAL, 32, + PropModeReplace, (uchar *)&thispid, 1); + ++ xw.netwmstate = XInternAtom(xw.dpy, "_NET_WM_STATE", False); ++ xw.netwmfullscreen = XInternAtom(xw.dpy, "_NET_WM_STATE_FULLSCREEN", False); ++ + win.mode = MODE_NUMLOCK; + resettitle(); + xhints(); diff --git a/st/st b/st/st index d686516f01f47940326969a8b56afc869debc31a..55f94c8f626f0cae5e0505050ab8da0785247ac4 100755 GIT binary patch delta 29646 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 J#RmK1Xq&EF`=NS$FWMtnY&@ZA12| z3b7arBtq!=aZ@H+nDlW-ALCf0^0d+!Qz2Cn`^i>X9VeW`xNS-Sm%$KW@lPe>Jg z9FrlF7Gi6Lw2me{?hZi2|f7iz6($9yhyTN7MwHh4B?g}W{G+;rC2L1V|4HuZiK zQr84{{ZmW@>b~5@9kaO^+QkUl*USx@)s9Za4Kn~7Yp1tq8s1hen(mV^K29cB6f!{= z@M&X*0WL5)*8pTc>O}Wkcyj43M{4jDeX0{tN45&_0&sUQ!JWYdOFBry)r&E+AT9ba z#B@hcz;`z{V=o~zvmS3K0%rE4X{1m7>W8K?2r3^gRNUvgTbr>52C0f)zOK0G6-5kd z@1h9k*+)>|bcAZ{UOdY~Nj?w$h_rDJK;g3I6?dE=Q-t1YL*AYZh7|G*Qd-1L1WgYb z!7z}v442&`^*uq=&GrK$n}j)^Ju{O=G8y`zJEQsSSF8;0lNE0oC={&?wEWu^3fsRX z1^;`XZCp8qyB1K%p=h92n_SG>jImB-FvRFc-KYc0wiCkEHFBigLaF0^#TtyY6cOpc z@<>87tt|J~2PJcG1dc?RU`TE zB4NzBmM!j(fRBEUBH&GD5t3R{nLCg86l8Y4XSxd~GjzC$!!7@_^+L|ND|Iinkxd54 zmZoBaq&mXx&pLX44NfH+0EW>Xf;~lnz0|PDen+%y_qm zL!jegQ#|cGdteWRuWdGgF~4UI?o4m)It@`M_SInZNHmh=qd!w9a^Z*3c2fn@!Cs zXNSr;_N6*q#p9TVQYtM%=Ox_|!c1#$d^~qqwxPQmv!WA>BJIH)#V{Yq;DaD`b0i8h z6DP$OJ=wJg$g3PT_G2Qsqw(^9?u8sl6;v5CPA0MTmwN9LiB+3E-GwATHu$A15u}xy z>S^U>*0k}FN_iXsQwrFCY4d0xu4ls$v}DHNhQ|nsQh#PG;=%P`jI`!U;o=to+WRd9 z*B3(*p25b(bqy`=g}QO(d2#HVmWVs)o-O}R6uT(}AxU$Tl-LQN%MU?M`VCfmjI>@Z z;lkXr?o}W~2Kz(vWXh~13ZlA(Z491a&T{Q4<4SXJj~jg zn=1?5?K-FFG*XPyr|wu`St^e(c7La739;;T(Fwh9p`odmjM@HLq%dcr#X#5E=rbKC z(Y$FJLej$xLg_|7?dF!k-Hirjg}{ClSnn<_qmBCXGAd2p@D8+jcH1GL<5xYJJcbA! zrpb;>R}qq0P@!Z_4xS3#2jKH;jIi~qo(4`))heoVQ!eGK7ixSR-u4Raq&;o=xC=!`(#w6pyAA$P^0-2aKCY5CM1v!}^$7Jg7vr8j{U?-?m8*1%ZceIfZM@xBKfGfL z^_j;=$m_fjjKetxcb^&#+Mz#h`V%}U3k_r(N;nj!x`1$6zFu!8H2WqnU<=8=La*ZE zgX`M(0obl{7g5?Ph=1WzVbV8^Jl-cdR9N=S+r!q#SLM-lz=2XaLekGLwq*_vHkZ56 znH1_VbG)Z~VB;3ygkB~4Z#Y#@h7RKLzey)zFD4RMh54m?9C7?NXA7M-*@7QJ6%{sB zj>dEuA*s3S9~D-fLYlhK!q!a<9UUP;YQ3zSOR820#{p=&;q+WYoQ6f(!MeGi!(PNQkSIfS}JB8%!b?dYs>mjRP#hca;z3yXS z*p`Ocl8=R%TLP`mXf)t%^3i7?gUX3esI2-FOpL#NXco$_HtrL7ShHcTntqA8j=Y9k zPs(%F3KzBnG2K^eZ4?=bVj&gmk+I;3vuLDBkz$^1r18>=%g-hzqG?H%$37MMY;B|6 zC<^IYTl)SbxLopL1lRXiHeN%JmXGHJ;rP}-eE4=}Yk(sR=atzF5Wlr|y4I!g!ePOgJ#gCa zh11JqlS)pvLd`Njt|KoS_iS7bVaYa~V}x8{1+?Et9|0HRdgwnmGfv;quyQO$s|91g z%JF_~MiE_-n3Y(p)Kde0BS)lse1WLQwSF#oPqUj1o0)6k*0{a*Y-W&+IWM z=ofw_a~w*e#UT&1&peL338C8h*l91gCE(`lM^-2qa}aYjQumUx9~DJW(qt_C{jU;b z7A2jEjBL7-4J}q)a57|@cQ58XBBMOj$WBI85!E3h*u3N9{~+&0`458<1ly_v6&t9*KSK#9yH77lK!V(~SbY=f zAFs78N{iH8iAYVv0fk5WryDdxt0@4tMBp3!Wuo-E2kkP?i!62SQs@#GoQH& z&AcU?DSgL_MTG=oT##+Dm!HA*yBTb9DLy6pg>oz`eaItsOw6_C{1MRDS=3r+!9*;n zk?#b{eu@m=`iv6-cNp5OCw=lFbz4TsWJNHjnvs%}Af)8d_ee=IC@3j0Q%ZPIcz;K@ zRvEO~{uqQzx}$YeoT3pj0hM$z5Kc1kZ20V}8SH5-X9oMmOLkr1>W=0OzmXGNU@OuL zMoRIe85FpLy1ee!Kp}i*xN4HWPMSFC*8>hwC5A z_4lh}Jt1?mTWx7?F>?H+2cjXca2BEE0Z^ste>KRoZ$?FXTit3eu!pBhyBC>=Y9BOAFy zmo61%e{ZaI9xBqpmBNPa+ZsmgKxz8DD9yL2-ro{#eIMe8MIY;KT_Tc)y#;;Yf^My6L!i=*|yIhrQAKdyf_L?@VRE$`ubWq`m9v?g~JWipEdO(9TH^;09+ayLNgyA&dt%oa`a_uRAwHwgr$0fI zeDp$L`49E==fD9A2U0kOIO!+s`Js8WRp8+lUPAc~^AdM(a9Sw0_M}QVW*gSr`6Y7w z$6(fuWp86QpwD=M)KygQ(GD`cpLQ8VuSxmCdDq?PVrHD?B7TAvXUK0T?A`Nz{RfLM zk5JCbJ0ZVZL^oO3QRuL@UG3dGd~=1$Mg*BT@UxJIMrm)0 zWzE9Fy^ZVNLW87{J zL)GySTPT1}pu5@dF?%{)q0^LYUo7n27ud5@HtK4oE;^V>qP#v7a;Bo2qh`C}>|Pli zh9Gg}MzZB~5#VMABQeU5u!@F+-dF2^rppQ!` zj~I~*Cl*t1KI4V%#wAz`>()U*?MfZ-qmoKC6AYuhL}?P(S7>tAQ&U=pLyL;+SGXIA zyO6lTf&C$l;>+@E)60sjAi5Dc0~q)!M)_FK;=F+TUy{sVTDT)b>OkUluH4GqgpITT z+ar8eT!+%B9ElewrWHjteprkYFQ1FxH29))36>SV(J=9lJ>bJ=eDd&x_o(dl%xGav zc1*wZ@8D`Y%F4I4a(ArUL#eQ=DrI+^e?BM9ZiN$zIjs+{A z0kK`(Q?6P0>3;Zef_<;_e76vMAl|cfeS8bSuB|W3Jdl`l2!Z`H8er2i2DDr!DBX`i zO9>gMFuAyqM5V;kt~G4~BV0)T2oE))Ph? zG&_9LsUf%r+px93uHvw*nc+LgZ4*vOs3%(BJh17*57V(+Gs9X)XoXFzV-NHrb<+oE zF!>M8w;aR(4a!S50UWHIil=wCHDd?Jp7LJxlxJ(Ei+kxNDf~zB(_HmK9wJo_7QJvJ zPQT|Gew%2h2@Cu-(jXg7@e9^_`#&~N4lhaN7pjJny+jpRxhvcq>8G`57z91NK0+_dj z=$vLum@pEg^u!?(p-Shwg=mJU z8y56N56;vI+Gs-_Ty%3#R-O%%LDvFc$sGJIcXqYq;bX3V*VP0E$9KZB+!l^MYNG_V zKM8xx73WIy7`df$5@KiKQfpu0;J8*qWucT-l)ygBV!vGUqwUabvE%8gg6`tn#)w$sfPQ-P*;in%7bV7K(zi&$-*PuS-!(LnF!Qe79 zL}?LzESlfgx3#Qqs0+y1grNnt8qiW_VQv09OpM^lA5_bXa>tO&9Uwb5VeDa3{a?JG zGkSr{&zONmL@V07KEl4k;kc{4dN|n8GEL4~?(i4aJ6~)7M?R0D9xN@LNAqJ*Ja^O9 zc)*d-DW1xyTZK-_%f~=--*Qmt=%x^gYX`~%%fTeH8X5#9^y9Xq zbUAl6-p&2!Xn`x}rWJb&r3Kvr+x1quA$6Z&pvUP$OCRWmm!N9_hZtH4F-QEWKih(B z4Qrsj`z} zo?!7M?|U9T1|@H`ZWAT%pRR&ZwrxXkD`aX6Q|SO!B8u#WttI^cw;i`)q2o znu?CN6es}09lTsK%3YfA89Z?87BDMHvEST*#;?r&2iM8I>BpceA)Vfi7LWMhFfLu@ zA}r?xZLZU=a+||%*xFoJU)_S00A{V+JX#;jUgvVSDh{IX=Dvj#VNj~Al)&w|F4te! z338v(8IBj52E>&r-f|8wx40R65r;ms_%Hns-4{LNqn;nfaXo9<(t^;<@YxXi2n7Hs zyGW6iu!Kc^ZBC(}sGg%Y>Yhsv{udl&kv1z`l zpdu_KAZ;8wQ7&uKr*K5+Zm7(oREE+hD9~9oodJx4As=m0l-rUyBfCDDZG#TK>s64bJTm;tipATQjW*?pA#ANVI-?h#yJV+IYuh##7JIiSXK&Jag7MzUdB$TnrL zF*KHKK9X(Be%7#J-e4pXtJiaUX9|jEC$Cm3+Kn}kA&(5PPO{_JC4eG!G2U_o7O~%e z)UR($-J%3ZwL)hnSmSBSG`>M7K4^`OMR+2vbBUiY5i`vW5WL}Qyp@t#4nyhbhg4ED z%VY_aKL$C*k&^D3C#jyp8ztI{^y?p*@gT=l582{4 zKzaz7V$nyj*hAbgN@Pz!E5hN5a5V|7itsw$59V|aYO*+l!Pg7gpD_?0R-B%)->~Ihb*FjIP1g{L z=sN#m5<|(RQ1);!f{^4*U7Tm1u)^4rgS8(m7IIFu_H2KSX8!AL!sC;Tj347yr?fA- zEBP;$S5j?wb{2T*%-KX}_j6cX@{GO2axYAf`mh1PM&1x5*nc+ax8Ur6`qNh^UEWYb z`10q_Mp=q76tQlvWa(2cd?ecxrOmUCwLb?9BIWmk{0hv58e`h1UV`r$jh9)8W^QYRt1h zxf$N0Fg~xd$W>aEQwzm@E17KjytM5M(vtZ$gJgG|E7rZNIVJl%9&Zz`&h&8!!!_sWdu5;X@^TA1f24Bq>|oS z|64pW6i1^-VT%$EPb@VVgA}ou#1*ob&gOPbrg$pZVizW>6#U(QJP`PM67q58L=7fI zb`3cA+Xc%AEK%~IvN9PVBW@@~bSZb)cl19{LA_oCNE4<|)l5gKC!Y>;D*~=MZN!FX z|LO6}`$Eu}Pqk_3LhhN59qmsd1>e$yr$jgQnH=2^f~sKy?F)`|CuIMILWoeVMKYK+ z0i@O_E~Mk&b4YM9TggU&YqU2(S6TuVEpPd{7&D?5D@mMAMkC3{K_?zO`?IQ6aTeo1 z4tYjB_Mudb({DFj#uCt3q#ehZwnF4AWWbCrCT1a+(W}6e%LPeT0XiqmWyS)aNbY#j zrb&o~Vv)-fi^4XD;wPxtoW*9FgJbi^{MD1(8}N*BECEQ9&^=^p7>Tk`S#HHKp6w4I z_n`XWhrb3E;zwg~54dPESW)*j8B>(nla^5@}Z$wt-yLu(I` z)1O^eF6ij@z(WEO0MamOlazdAQppgQ-+T=%kP>=|SmO(-meBII`r12B1lw=#GIfOS zertsET%ptRxxG&qxHF>ZyF83l`9 z&UBB%&=mbA-t=3tdtCG%AfC|2f5^RA0V#mbuP0e#{%y-;8m*d z#yCvv7$d>?Gj{{T(sfj-R0m6M>4zJFTO{iF zLX;rr&NVUoa+soj!K_XC$AtOk0=+*c$;Ef8%K6MgVfML@=n2H#^nzRX5c(rA7o&^J z2AwM)lSi1L8EVg+_IIJ3hXD*M4zveRlPBb#>pn%#GQsb#y&ohEt7Zl8U`l?62Z5 z6_Zpva#qp*{*V7J=+OLsa-?bY|CAty=KneY{2L`u^Y_Nh;T zUtw3Ftb^CEEoNb-)*$ZlWMY^i@xCY1ve}Fu6x}MF7WwJKIc zvQb>^%{U$O_Y*NVX`~33YZd6ib}rXcpht|$l@81S<^eUaF4r00K%fL{(%$82gX4g$ zKpW7vgUdA>7y+CL90*JY?gy>{{tDa%oZJ!qfJ03#*WWC5n)x6+aXU2t%OpRbPZyVK zJg~T{%e4sjr`6@!2pkmWa+LwM0&7--<8Cfj3^1@eA_jf~Tm<|HxDj|0xDS|SbGeQK zcL2+Pt$V;8XM8n!x?H0@(Jc;xm` z6nGZcBON)%AAV?oVSFku1Gove9C#2&!+Qy^40sKAANUAZd$G&ms)>zE1MGK~jez#YI|nW$6XTA&1MzXEpN8qIGa8Xd6lDr5i{1v~=efcJnU zK+oD5&FwWPabWg3u5BczC_M|vw%y0XTO4D zU?s2&xbhp9D-;WxW}DC(fVseQUQnfgpG!%c`XR1vBFjeo;L+&I=T{Sb{by&}RTxrTUQ zuka$lI|g3TD?BTBzT!@}Fa))Axjs=vl~t z$Qaa~n^-H92^5FA*}8ANw%P7*P!I1A% zjl^1B+OKMPQo+#&?OnvI223wznRuZA(-P6^8p39;7z^;&9p`eja1-%;g`c>fA=7~Q zTHMeONlp_FHDv1hSMTX^MUhKuEw4T`YI#~P?2ua;;Twtf8^Y~s(c}k%P2vy&WXBKQ z8;Khz)LJ~`$JA%P!-#rLyxfQh5}*2^bUKQG{!9n$y+m=OKhwas3kF!UAUTo&wLIlU z5RAssRm}2d>L9^i`7@0T=b(i#Nq*4&G*h8*TD;)TH1wU@ADx5*BWiiQ0|(RwXe!t! zdN)FwIWC4ZLfQTfEl<+ILmIcBaY9UP#MEKk!7m`PzVCi$p<^pKhOZcqZ6Mw)ZfJx$ z{87Bn2$>!(h6OMI+Kc1Fo&iiZrlpt_z_e!a#G?dt#K!?l2ak6q;7bw@wNV(6?FnL< zks0J`#HQ!f807NAywFg*Z-i@q(GNt*r9ZJc= zL#=-Ja>-vu%CLS};gaIVXhsOo6VN-Lv6p}%~y4YJQfOCS?0>KZcvY#DgZ#i+(iFAtiz zdMyw?YRm-r4+cGDfy;$SNsg)qqM~A&3jVudeq*L-&{~jLQ0cC!XuH(%q{`h5ejfP# zT5)M0<101}W_;OuU~UjC!Awh!VEAm$i!*|mMu9fa-SLe`2h~S!wM)=QF&46M;tw!s zvI^u1Oi^Q1wUMeCg?B@C4zdASrDZe=VN9$aCdESW{Sfq(7?9URE`(_vL{n-_%y5m! zjir{CQ#)KPTPuP~Agi@PycoiC2|ELNtl)Bqq}QjG*Hk$=?I2R79R3aYACRw9n$y@O zj89M`D!cVc4Ebb(x*4q|k@RT>?z&R^tO?VWT?G0M@%JW7)7af08+`0?wN_0&fPZQp zG$BWWAE)xQ=31VSps#`d4)`|las%`U{M~CG)(35JhB%=q(?4h`$Y{*V5o9LkZjzik zsf;0eaR=HLZ?CC(3Hf@%x^J>@Hx zYmGWz{1nCnvg^S-B;F5W>U$gn8Ms-j70%T2I14&svlt%EG-Ce+eN^ln&UE*nmBz@e z;+k-#iN7860W2bhQCtZa_|f#KD3*Z#T)Ys@)bF=BD>UVa5KCi_yH*Oc zC1C(#5~B#Zh=~N<#bknBVirL^aVNnbv6Nt>cwYhU_6Q}3Q3UUai3F1r7%pZ}Xo|R# zV7gdJ@S%90V2#4LhS;!c9!#ZrPY@jk%~ z(Yq7ij)=cltv0P8o#dvKO#FYuEP{Woix@@F zL&Tq14`33+WP%%F7D0u$lK>5ZV3>HHV7TaQ0Yr#V1Wm*&3!*Q`Z1_06vP_UrYo)r=9ntw_#YF^Zs4Oe7dDCIh10?A8NS z<0|KGcIzB5Ee=hw%*uF)JK`9xPw-DHp_h?f_vmG&msdBuMiUiDR4P#kM6D-kDp7ev zEhnmss2!j_p->6EjP$xkFEhQoy5lvPs7RtxiAo@9JyBDM$|GtyQDvZ*3*!B5$mccD zyE{M5A+Kszwf{qIR-1N%|B$OqU#kfc6K!ax zsyg;b2nH~bVlqLDm_=X~cM{mdQi25WKEXiIy9Z#T7)3BnOeFX~OeUBiW)aL4cM_zF zr36dF`vfaR@1B6QVids_Vj=-%Jc94VEP`xtC&6K{l%QC=Pf#Ly_X3<1qX^2xL;^`n zCb%PJ5mbsh37(6k0Efrx2YQ+x)uOG+YOVi}S4|Uj|3h9?^nU*#SBpMK6Z{_vRl`nm zF)JSJxg?$%5WVivtBhV=z0n@=4;l3C%>)G2c%vGBej_iDVj|Q~C&>hJ#Vmp^#GM4i zVkyBL@jk%&&0PH|TKXUn=01pZD!oS2YdO7A@j|Q3f;{lecJ{{`35XF(p+<8fLAvPO z7qCT)A}A3P3DEHSGM_U)h~5bZ{UAmGv>AnBzXYaJmygv`=Bmo6niz(tjCbCUS5;Dy znvQo4il-8o7DA5JGn}qU>FKu4EMwKHs@!!is9)VnJ)FKPmi9x( zs0w0oKrpN-_~zI}V-}^kO5RqC>d$npo#(A|?`>*RFna9$s6W$)anqbP3qO1Ki+KYW zV|CB-N5A6nw6R?lpf3AWm+ zPW(h1p}UL6Co)GEX>Zmf{90eDSt%Zy%zTZ`ocuns4BKqx1LhlM^xn-Mpf;HG;*V2s zu8}T2CRikfO=Xt(rY=`fU)ADg;%bk$fQU zcv*^*T$PVYADM$~x%^yG`4d$BV3l8?^79qGScEh-XuQ)bi{;%CC>DvOg7VxdKCm+_ zqC&n^gKBasynZ$TrE`jJ4NpqDEZ(wN}g_yqX{6lt|Tu;3QRiSGBGhOuhGS~M=I=X2s1xYGvZ zh_gRr8flGg;+hYcCQ-3@W?4}_UjSuP)yJuPI&Y>YROMqe3^(4R->AkmV%AI?3`fpn zJble?$gD7>t~XjtgpO~~QM2q(J`e#FuX?^Ora|mj^oI2aRh&_%n9*?!J@2XfA5?x- z1}4j~HPD2Mf%BP`G=KG*&$M7x?oFGI`9=HonY~{)7!SsG z$s3UrVCh*Kt>DVu{8Uo(EE2DzVQk$bhJC~=(|Vm2vp-@MV7qK_LcBv9<0S8=#T8B_ zNBiDyV!w1|1{T^srZc0M;=N%R%`mndG>a7{pD3_dQ9cM|${jmS$z7DHeMG#>BQ?imt*A??*8Nk8 zR;sFXTjeL8ex3hNiQ_G~k{P26zR@_`^hUbM-bl7h(Hf?}Bn9Ruuuy?j3T#s#SAo;w zm`o(`f)cu~Ks7ONDJrc2&M>`DM8#@cYI-$+vRJ&AiJOO(GL4NtSuo!!_Cv))3MDCe zsY@A8Z_hXS^d!Y#p16}@N=HmofYMN<2%KtEnc`&JgKuY5D`~1(mcA#yG1!V@Nb7A`Ywz;q%#K<$#-&W2JUwaJyYGImxAW)B z7!M&&%kEwO6|>$=t6w2@+03-4QMD|_cr$x5hK(38e>2n4`{n=WQkf+Nh|CtSm)BET z>GFCC+ql=Vg>f+Gr}u^79J>8v#l5NB^=I$`0wA3sxTs#Qg+Y#m9i^_a-X-(c8Xb+Eth66KyZt}NvF=>6$^i}3PzGDTJ&p{i&MCo=>b8GjlCP?j z#MbKX1+C2(=UaV_51$|T>8z7I`W;H{-9BdLI-jaR+=iXof}K?WvGpD{DFO3eA#7QXwn0CKAiDG#10BLmdA7&nImZ7dWaq^mi@EBfx^X&@ zf0)VX5}(W;>0|jNlTA%(sz1-zr%5eh?sbJr(f5hNB?pur&GgKCL*&nZm(|yk_{7-z zugr>>R*^60%AO@PGnJ!rOK2`4U4Z2qd7jXm|~F_AHwx@lTtv_Y=YL4J3*8 zjeU+KJ~Z~OS|XS>fl(;(WnI{nUct2&Bc#uzMB^Z7SL5EQ4h%FFXW(9#Kw$BP+AN7u? zbPbY>z3bTF-YxZ~?CeSJ+Fif2bGmu8itPG;2&BOwnmz%;AqG7hyI_ny$nzAOXjm2b zeoIXPA*Uusgk2E1uO7UKY)GGmA)Q~c{N3}c{8JQ2lE_D~wS8*)pION11WV~ccBoI| zCTBaNOpeVf5gsc!FW)cnvmnp(%pV{c4v?^TnmKER$01s>Sy12jh`Hcp4e}%&Hg-b^ z)`M>0EO%yp+Rdy!oI^C**qFYZ^jA8ut$piP%~}Bal6g~nc;^B(s$YyBa&r_dhEHzD zSy^0iof@+`DOo&R{%vf5Bjq?+z}sv@avjdW<|QX|s}8Aiw`i#X%<`?f_OVAeV-s%M zxRb^ux1M`E_QdFN8|q~F&j@7RK`oy&_I@bxQ!^;t#^oufJs-m;_D6CvYN!qRH3+H- zkv;Lcad{|YcA?CNuW%x1O-R1HUj&!SzUkLff6U7M?iU*OxmC?;iE&vGirl^8na3mC zk1ckrafpUh5IV%F1rC=xz>&f`S*QN>t38^Jm`mp#6z==*H|Dcx{hJIu&ulu_Nm9SpITn-8se=cUOsrPr~0&ZqSLYuHuA#9 z9#0~_9prpJf&UaJTDFp4JOu6dwIH2F34Q%&T#C`1Y zbOwutID``)%rzuFOl!86VoQ9G7GIcXHh}MZtm52ziIzXxApDz(#`XEe-T8%ymS2c@ zy1XdSavhY$c3CbX;7N-v;&*|dr-(mBEIgw5ASluDHM=?_%sC%4X%z7@HA>_c&OqvA zy{inZbUCbyPSe^2?cLXgD{Dg%1mJ zc7}*cFD?JF&}Hcl+GAX_9Z7MxZu^UTYcLX@%$Dak|*2)U+QN`&`L9oi&3EG=`Nu zE2^#|L~}dR5q^^wqZ5mK92+&VHcf3KL+UhxdXnH<(^bGB zVt>)}>r^D~V&aK;$6b~!Z0E>&wKjp17@mW7T3sYN^N!-#Xtyk8_eO?ubD3dOxamzY zdpTDlMZPBMII7WG0Z~+eomX3_+2v24%|G zsn{#7W1O13c$$n%`BT`bQH|nHHYaaYF}o-B$O`gzh%IY6gaiylJ4qn44|E8Ju`u*c zN<5rif-!)_jGpYglZFX34qYUdx}F_zULsByaUxLB#5qo!%HW{-)1r*K`J7bD8^!u1 z{8kXkf<;YE6(rYP20zfrBAv2l`qvVa{C$p(}b3=;!V|pqc5-K<9AszaAmg z3y)xKNWM4Nk%Bs_nv~|Gio(-WFHZZHY7nXVYpJe8s#q;+s^9!u)lI`406sAS&%SQ(mjyc3^xdVoDb+zon&n6X{@6?+`{3kG^N94b6O6!n17~)rh zSHv&J+XhJyzYLTQo+5rRtMOLDDhr{hl*T+}f9q>*JA3q2e`j)>GH`B0`6DX`G`6(B z+f~Gg{0JiQIpa4^3Vzc&Qati86dO^lcIt!;#UUUCGnYYMSHmEE*xlaG8JAO&wF|PZ51%!W*3~^Qt7BblQXLX*xNo%c(^SV*MN@*;Uq98K4r3caa_&z?-EO_eYpGw*u<95V%aoQp1zQVM7Y1>xK5*7<-g;EaBZo z+!QwK-8xk}MRB^Zs3^=i?bzaX>u?*`mUrVio_M6w7G@C_urNDI6KgIKkA~7e0;xTL zSRAe+{-~ckB?;X8WV>kC0~#B(T`VwlIM<84n;KHfOk$Z!l;__NO-(597dQVGq#}xK zOl_<`GMb%A&Coxr!}?AcPU^GWqsBvgMTRqml+8o>Ce^|){rGqo;?$}zPuSBs@hZK?llB-=hUrqQ91 zoX%>@q;1BMVNp#EQKoFlyMo^cS%fk32<4Ms%l@7kA21HAE}6d=GmTIb`8QbmX`dQD zz>w!ixs!zH6Z32ayE84a`3T~PmOcQv${*BM_|C)^G;@gxb+ zW@b%m=Hy49bB^_d{F{J@`y;Y#x_xvsqpWZp!cUJJUx@s7&~=raa}{II*fyMNu5&vL zP%%O;_KCoM0&zLc9;N|B(|Ejd$DPJ@sUzg_Vx(?=1dB*FnMRPF%Q6U{GiEk{iz0p` z>yaK7Y6J_l+XhhNyOK(`e7{2se{zS-PjB%0%y3AvI&mnScR()rkW%R?x4NEom|oRk zc~0&Ye^!;;6$~R|qC{xYV>?9J8J6Z@oUUV9y<-a_5!5;O2=-TcEq^1lINPB}R(pD_ zX3Y`En#u|0SP3cl|*!2pwy*e<=R>v=$$Eh%d}_WOJ;RSX=wHNB1V2com4fNe=r zNQt6zB>rf0-NIXvJ#CUA|Z3yFyM2<2lF! zaLH<*dp2Go-&hsdj|zMQNYOlDD3&Y7M9T=E{I2syRA`^qNK^lh=40g5hqplkOJIwc zG`o^w11P#I=ON{d?}aK>ClNqmN`ANMFA;;K0(y*Op13vik22oh=pP^QfyC( zwX2LJmp}ZYc?6^nUkw_pbb;gbI*r9Ch=kzygZ4ogNpn~5gZOz90vRoF%MGd z*-51H21S}kI;Pv9$nI&Q{hVOB22$j&5<|`ZS&&(AQ#~-0my$^(GO_F@4Uf_O45xq~ zEQ*yQ)bEzB333o-S1odZHp8Wl$SAA-3%$o&+LX!)2NY@kfcQ5-b=N2~rnS~E%O`7h8KsA&2B zqxCEpQCPY`A<>eIw{b;tsI;?mSLgz@#*V6hisaoXM$^S#VjVsPTrJd!LLKlHn{r^mbu$Qd)iDa#|j8SB5-VWVR(Xs)M zHJ}Y@S`Mb3Eh^d_Soxe{30Vr9B+TJ1`Ns<6w$>T!KV2 zghEx#2YR@H*Yt1<}6_gd(c^$gi~Oy@C*Ce}(>$ zXx}J%7TYwprjyFX^;d%Ny}HmBN-#|6{;=xCx(x3_jVnJ2N(7}ZKLBb0DBtoNP%}XJ zmwyiG9Z&(~>p`V}iYRBG-T-AS7sf6y^ahoobI-vVb*wAehS1;c$!ee_0#BXp(Q2q6 zLXX`8)Ico+?zy|E0RsY8-EGx?4uL#(90e9cKOBJL8IQXzLc&Fd@M|7rMxKgU8CA2y zpV<6a=(wL@aVYZJZc8RP9BR;={R8A;1Qx%)l#MlQ$R;TN(CzWQr zCh+r!^_jvtudyZ*iz%$nh*iyXs~=W9#GR*b*J<2gf~ga6-+u0?;>qoM%}VQ&;mkTe zH272yr}M*_2Ky|LuMVXw2iE*NOPz0SIv+9&{(d<96Zz=~Xbo^8NGu76fx*jkAB12U z!p_X^*`x|+dHEn^##?0f!Em|oPmd?#X}7d$8BeY0!(7pQ`lCS0`@0NXSr2EpGZ8^Y z+=hvpEobmfd_s2U znBTI(j3_RP$r+6s^+aae^P!oGdeY@l?&V}VKA_F7dEN!a~~zCrwP=g2D7gh zwr{#z<-7jj7YC?Wa5qG4ja|^oSEm>G6v#!>HWuQt_Kg5dM+=QkpopqKsfgcaL>>{F zAmilH0SETR(SP)&qsJq5W1liHT&4hb8D(}I6bh;##UlEah^A1s)fGGFb5h6}5QXs= zxeKO6yof3);@iIL`Zxk`J^dxuhVck=%JPkLq?q4Se49RpmP2g+P&BP&F^d}3iv=4K z0l1ji?XhJ-5eEHLv?cIE6vy~y)!39pwOXyMre?xrsR;wD%+8?ti};0L(<54RV9Q0y zLEaQFl||b)R{oMH6`DyS&@^HnIu;zWrrKcSWXCeC9a=#onBx@%_{t-h z{54`1O<`ch9u`bBfSISAyd$M>Xdzt^t#M@SAiX>*voD^@En)?WdvUFp@x3T65bs*7 z_j^0*4e9~M*n2v%Xy+=pF``~dt6afP2R|S^pn`vg)nBqf|GS+XT{423#iE2*{RBJf zBaGDFy})(|by^;EU>|}SS?-6v#n-N+<`z5lEHIAw2I%$?C!-AtMBtG(!T0-_Ouy8^ z9b(p{A%RiQl7GO(heN=vEdK}3#xI?$kL}DZEN#wZv#Mep=MWw$Bf7y>wDczWbXW91 z>XEKzoN@VgARuW;lD#C^?3H|^N@|g$4(#1a6^Y)sd;t-bHgv{jT$HA$g+KL0wF|?d zLa* z0+s;)`FtmJ;+qR&(PRM&6XcQ);X~x#^`W_yuA6(63Z_WNM7}O*VCAroGz{HIV+!3L z^g1T+K9Hdd+B0EgSmnz$1X4`j+t^nt>sG$6r`48n_RO@ZwQ=3gI^CjtW9DNt zC&9Fo4P6yJ=3VfRS<5h>JSYcMC0ZOr5B*N5wiYBeF8Tp|Lk=tktB4OL79RJ0Fpu$Z z6ogeRvNEY2{D=-!Jv_L~F0X3gJak#7n|cxEJ3!E*EXYwG>k!T>n`qO?IlrT&wuV!| z@Hv?71<(@hQ9%N~20@Xp*O7`V^*qtF6nYeBbrCGr!r8|#=;n^q!QY2p6A#C# zbOp4W)yC-f1#2?;!B3bGMgCU+2D5vY=+OO!6=`@|J0+DCGRGv{gqZLv$u^)UvtK)!E7`H8Ea5)^pKfwi`9?3h#*C!56C3HYX z<|Sh$Ex^%tf4ji0ydPb;-~y$}W!b^1e$X*O7f(?l7I_9rz=30RoI62dKP3qQHt~b_ zfXHXKuB9_ZAuX!5XsXG+_`s2v*^U+=YtR=CsmbT_{-#{Cm*wSOQYr9zyy5v27RqU` z68T=Ni4@*?8f5cYIa128T=9YKL{&FNZmZg+c*BhlrrUAXQUAnn3(Jr~oJ}B;-^11n zX^kK~;Vw$E4soZb-0H;5YPnubn1!`P=X+fhy$2enzadE}mLjmYt;JcR}1gJAC50YuxExuB#B2X*bgU zgYLpUS!)_n6$)x6dj2QQ6~?`|hAcp<7R_7QAXAo)@Rq;a35Fp9q;ZdF9`X4(igXs< z7?-Cj5J%VBcH{2ocUiR$TXQ2>*AJs=wgu1OD))6HUYy3e+Ue5prOl7UEaStv0pAr< zf%>j=2qzpqrpK+>Hy_T8O>9jk4rIPY{|}Q#8E?%<4hYNbiERk1eYaR6krOe;{_VH|FOI(iBtvtvK!_MGR{u6ahVZ z2?|}#7=2oR$oGVjavt1?v~dqW;j-uDcU{rVSg&=_1KWZjM}Ll#7V(Wh(}PA32GWt~ zNwdg(zNhNutAnBRtlW>ESxF;-3~Qr1qxtPqtxR!bC0c5-qIHqBgD4F7o6krgdf2jI*J#J0%EkMZq$xH+KR=luTu*L{}^80Gn4(pyp=xQAyQw= zDt+9n=>T#pnhz;p=|J`uC^N1jA%$7p?pyA`@pJ?3xNv>`EQ5{t_DQrXPEl}y|1&Jx@2s`;n zMC;}-GJbQ)#}E#}Zv2K<(1)*%;8^3mOOI^EM&}(x_9!cr6gc^hjE(p;tp0{hTmT!p zp$U2#+YnvpL<_ioYctE+u(sy0=JdT@0Dm_X`?I6^G=B>G%qDM)cRJ45bo&GFatLP} z#x57!H?W?uDW!NI18nyh3Lm7nT$V=gqjT0RpPA$nS08kj#B~3(9^J8}!N)Jvz?k2o zyKuIbaFa$1jAxz%PS-X?Ij5x8eB)c?5B#(-Jx+(H)|6}5)NJ{v2s&1 z7t)>n8O!~&mh%J@x(i1|J`k}c@iEcYMT9*}k+)!#16tm+WsmCX0HG$Ln5H)75@imTC; z(6ME8!R^XoP?XNu>k$vG=Gw?sBvnj`3UZ_rD6xSV?kSmKY(^0f}T7NR$?2uD^h~)mbb&# z+YR=yKAR`iOMzk+p$HA{FT0PWJ3=50gk6MFb{})QX6)z9VX=wG4NiZ$VTEI>IKric zyDSfp5nWmkT4n$)6m;d2Fx&P>V3AvF-D6;mev++#r8+=fPl?Z(6xFvp*lQt9iV9Hn z?LKiv_XzAFq2`l|PvMwb~?uq`RG#haMw#vd4v;Y~dWY;++&FoZalzlZgoTr zryFk3d`tmLH*$5FIx7{pJDoHQ$5`^VFz!?K&bHb$6W||1)^QrdPCYUXF2Mi%4))2m z(5SX#YyJpP4ni}VAua~!+8E!yuvBPiZxmA1dp_e~j5VOlI4*q^R- zg=a`g9f*9HwOk!|n19afz}s&f{J;D0q)de*>FwA?4U^9PLkB1}L116JpYNc*Psq!sh_@=)iB4{S`V_9@(M%>&3q^@$ zu7w|JKx2)~_;@H7-}_kO(3FWE3Sd%fk}vRmAyXQf8SL{f*sZ|MrGlVjL?WL3V<_!j z&Pb(kUCGN}Rlg1myTc&I`cRj9QL|{Q$@enr*P$ufEs&< z?~VS#ryGQ~*n_Xb`n?W0WPI-w<)Eh+vvg08V;#oH`7a8UgAxSIy@K+M|Bh=nox}81 zDw$7bBfbd^xP$cm6XnP#mibNHZmkfr+xTB8O(N^T|HU>FJN>`db#}9ITxNzben*3V zLGUPlicX{MVb`#BJHq=f{QzOCDZeqdOake3niiPizI~bNJ7FIRwJiT(*J!ZX$A-K_H3L_ou*-|FG{{;J^0Mbci=;& z>~E<>V7Ui&uYcIHnUK>Yte2AbLPwEqF!C#!x=u(&9jPs2XTELFFb1q=<(FNCx*+sQ!OMdmBeTcl z)I&IKpqh|du3!;6BPw;G2;$yn-FCJz9o>Oqto@=G2cq=l9JXp_^w<^9f}v;MC{*Wu zoj=M4Gf;$*#BTsHH3&D9bdCjvHwkqZ!CzKht12%f<>657u6zjVQn{0e+ifKa-xXXn zH%n<+>AzI)zcA~r*h&#+J)R1DxRkmpgxk-AUHuGua8-%2*#MBgVDheHbKf(F-hh!( z?YDl2KW`Q#zcmTy#zBoQLA9(!mVdCx--Y@;tpoB`mi1lJ*S`6cR*F=}-?L-iHL125 zAE@A<3vbaJRcF=i*cQV<8yEcr@1pq*=*PzbGU$Bk8s)d*SU{S=WwC+}7S2epGj18q zhV5=r={dd{5lp|c6}#s(e|;%pIi|GUlnN!e4lG6Armes0NSmR<3lsVNP&a1&g??FH zE}Cz$4ts+A6BHK>YqQ~d-U(hKV1TAfx;r3iLfn^FRSTw1*|j~bs}ETQPr@-}txkCv zUBVje9TNH+DzaPYK8G<+v~l3)5N#ca{AX&BMvwLH1(*c!wBgLfC;1#?r9fjtigwzQOJ4z}M7^1|Ur|?bQ<5kbRNP8H!P7 zEA^TQ2l$I59<;D|m|p*=4z|B4b8`FMnd!>;SCo(ZOC&=p4_kUm6eg<8Vr1! zp?=WIfQP`KUK>1DjwMTiAuWcHyx+37#S zexQzi^LOmTfh7N#!Dy+xK7`ddm|TZGxKM6hur@D(Kq+99$WzdA1U1 zV*F_tMM!i0Lx-^uHsmKD(L(~(ablf#XdGeqbAS#r=ima{K@5+e0u1-S!D^y-S~o{y zem~oIsHXD^#OJj-PFCM)R;0gM)3+JfkuJvFzu-4)rl~N%Z|LSIcJJ1XG6sf^1WlE) z;)=J^4=1X~E?gJx%2TkGbn|Fy75p=k@>L>zEN&ZQd)+qB##-eDaI0Cj+z76mjmvG) zaJdVXSg@7jXIDz`Q+=f+IT9!Or{A%OX;FQ}c5=Hb>_Bc^?kT&J+nD=-RmzLx{$jCt zHvQ6{*`&P0!0)NtUh21J+3vjNH8$cD%KbY=0$asV|Fmlrd~6VVnir;@x0Z$EHyPO> z2$hhyfJ%H$yu2YpA!5{SuqqS33DK76=ofy1WeqOZGb=!uSAnvN{Cf%*Rs(EVgZ~!J zueCk?Qz*pmqQDU?Gufv6rcN7ZY)xbT6p9Pvx?FK7K1NIcPxukVXZ{gcKaV4mhQ#4{ zMK`V{1>*j$P7TE@Ab|EV0U-bJ9uC|@{&gf~V@k8Eey*VAtik5?2`>+v(jkt$Q zD2%Fqj_MF+1H)ci3^8VRxSQD%xZL^){Ah)1*+l5o1Q zPVCmE9p3>q>92{Vw!p+e?bB+|cqz_cH;x85JqEhJo8L_N1>i#jaM`UM9=RzXV&byA z4LkYGIW$F-DC*8qbqmAc)K}dZJpL0Doy5s^h}uik4N%I4#W)1l1{MLP@&POuUTTDQ zOwf@XI7*i<-J-rn8BaDa@mO1ZxPcWNi*`n$yQp&z60Mjj9}Fribwlm4%&LmwNlU>+ z$`T|M)389GdS}h`JdfuQwnq0p z(kbVozX3)50^Uj%F<hBb9U@O8vD73`H|jmDiE^=ZFi^{Sik>)~y zzpRASp<&Tus3PW!DoWAp-AhX$qy33PuxtT~nwfkCpG$fV<~L9Z)w?G0Lceo?$67=y zKODyR>*P1U5uVSI*+d(^iC#z&ekR^svXbnO7{(}^AK_qYKw2|gWbdIE z3a(ee((52(4xen9GSe@_9(!0cY=JauK$Yi$=_4|UAQOI(Vp0YZlTd|o!e*gjW36qE zEf!7F$;KY=T;L~x68Y0>wHo%}=a8j{9Pt+@E`h%eDB{cTMnj}uV>|E;rc4j}pDELtd9x~ipX9o^?Dzk)G`y*@`V%XcnNPNJRwpuUhIiXl z1$W-?`FAC7e^a|(2sG4wRb3TcCE*EG=<`BYUlkrE;a95gE@;&>1KBgi|d2AYj#V>+`5JYQUt++)+ z6!F;_iPWJjoEty{EACJ+1I0SD0o+@%oaT_fE~IIM90h2VdmtYVpr6wnLy&B*@4bSU@4gsmLP z;14@=q?@-yOIu`pY71(c=#S9|7*VgXZ_kKq92Pc*H=cUUNBUI|$i(^pv!(5B$G-+r0vI{@di7>Cm*o)23J^2~7dszOo6!}o_wE6xR3oeNbBF|X=uMEK4 zW{e#W6(O2R*?^J=<5I=OxM&NqFPgS9S4m8r1XUS|xRu8*j(o5sG%jk0!pAR;eAw}l z+9Ridm(>eDy)(Q8%EvGiZ~JzL^rzrqI6LQK>P*JUHqf4BMMF{(Yk&i% z><G-zb;AiR02y6+;8bO_4kc~|!1@x%RkRhM%D`1%q zkh`Z+&D79wEa_~l&)dM6XCt_&Z0*@`+~-Vx?j!x^O!mpS_nm2U=J6FxVrq20&vg{t zpU(i^Q3TBk{tfRa{!L?{f!N+wz~TVNHBeYc$1o2hIJm6fOJN?7)&M;z3oKg9ia{7M z%#G9})*zz}WaOk18ho9nsg<9{FwmPkqkMZ)s>T|>u`GZ$SCM|KU}*;temf4Pc^om1 zfoYBb)4O)62Re6%$BIe4Na=U-l1Ye$Vo}NzE7O*UVkkx7Dz-YDxSJsJm(MQWgJ-mt zRDj$Qy+g5vQA5S3EU)~8$Unl$Q+QbU@Z%pNkKy+~T^M7~pAEXqtxssZI`w+?Ps6|rp)hQ>BUHd82lnVuV z@O|71>SJa+AFN;gl*OEXi`&VTpKp#&FbmE{23m1HEk}>1JE=b~%Y;2;kIuJtJ~;yJ z&*Qw@|NMmw!tTuD^MmYJqdiGk>Hb|Zf0o#v`i+>ox8}T zXsGrSGyHUqRhMgncN~kCU^{y;QX358)Eq=Dph`j<+Xh8H#YK8M1Ya9^E>p^ zOrBu%FE%h=CR3(5{BQ8Y-Uce4s&V3+n0iT+5PykZ_9eu-I?y`(BxJARSH2hA(LmK|_ zld6CE;{OwL>i!=&()IlRl_0FW{=X*Ri&sjZ$@zbm#7He{x}frVYUqvU!dOM~Ot;a*h1pfhA zfr;%ro&msKz;VFoz`4K+z?HxX;AY^m_V5RsZSi<+^Vkwx1EIskP8ya$LBKYhJf2ZN zxifyW1@!CU@vH;R0Gwr}p9?uToM&J=(3Gh6y ze|OmX>vWBJcszss(JiinNCjg~lE-rpxU&~h2J`?!@PpTwK3JatU+;$qfW7)70^l9s zE?^y8{*(Z3zV7kVuAfJc|1B!D$>gLMSBE8F7<2t*DgBn-G7xCHnGa0Ae14H_-5 z2k;l*+aG#75!H3Nmg`Y9z_&hjdOR~hZ1~vYSq;=}KuUpQfWH9uev0X=1`gnW1rzTg!^l1x^2mMWXqVTrk|5WJ$G~(*C^msa{5*?~h zmx2G2z zsTaXUX;vs#pSvlor%*@fI6g_SbhCOqbzh2aj1L+jc+yL}nc$rRubIY+0WJgYz7$yt zp1MiBYH|I!6Vk?7Trf95+E)t++avK|Tr)&%4ui^7X*9uQ3E!)><4#G(!?>`}ZQao< z$z``{Wyp~Z6|SSvJwbW~G1pZJt)i8J}ni$`8CDMZ0&_s@E z!+TfhI6|RAF|;bBWv>>YUtZ0hN^Bg)_8+BZ@W+jjx`%V^!b33NDm6=5ovKvxx4ovL zTCIv!H9^`K&IOw$LS-CS^hDtQHW1}W--mPc6ZHK(9*kYeL&;8s=qc2X631RGewgY| z@wg1K%~E6?E;#fg%&ep`rdq&I3AKk9sl4hkLRk|iW}GEqPayT)eOS-L~ePKt~`MJ$zuN1#ZurEL-1AkHCikz6p}8Jp+cQgRIXMaM`kn(vbC@!V9y zBEsAiDJPO^?R6V7^Ac|^c>c5h&07gxZSXK+Di7Ii1}_x6$d`C~ z!D|4Xw?IhmBzU#J!;sKGQKeEU1G6reS=1jweq)ue-Qk1YJzACPOa*wZiYc-k_`2^;L0;W_Q1LB$7)IRsn11LIRf6g43B3$ zFEtIuV(z2*T(n;h+J!q)I#!>n7v3JUVX?=9X-r94cf?8MGXQ)aiI3tM@);nTNeNM? z+%+IaNZq5j*8EwJ9i_}Du9=@djL$EX_D6Ab{F;EiDN0wOxSG5Jw6F9hRQS0dP+sTNRDrN`xXTa~G@%7ef{_&uT!PiN%8X|*#gA9_sYRL7kHvsMC z3})as(pJ(xQAs})Ybs>FNK(BRu7Te=(0{LyddF~0oh6`euJd>rk!=8K?1Eg1-)Y%-c%IP#okZ zsk*L~PI^T^i5&xjRgx)|YglC^$dgzkJmRIUv0U$_`PCw9)k2V= z8kzqWSp-yR@!{SoO>V^1;mbhBO4*ILZhlRWpTpawD~-4Y;e$cf#qwe(x$cWjho((M znhO4#Qe`2kmNtmQreGXCXWG z#h%5DxrZF~-*#zc9JfXvacNKWrrd~1oJ*Qw#tgVb$|hJLatL-wr38DW2LuPDz}A3#3BT^C%N>!D35umD04cQ(;ee{aENB=|a zwg2lC`Nyg~9TTdLHX*$TYYH#Ieo|>0Uj8b4CLN%oXf-otWAVR_)o2`pRmrc-E z${~oCN(ov^4^#+ji%@$hfxs#y6WCQSOW721NI3*aQYk@S=>fq2DX<-2u#`Z6nj;t{ zO(EDJWfP2&atIDer37Q72Lx-R!1jP~QUbvwDVboJG=*TclufWe${|=Hl@hFw9uRyW z1zG^>qy&NuQZm7MX$rw+DVyL6DTm-&sgz)!^nf5=3hV$Vk`f5EO34IYN>d0|6oPyyo8X9)Lx74TXem7)FiU|pfS;5A zheaFCWPZ=1hCYQeGI;H!PmtL`o5yHbMvr7CMH z1=$qV;0?$*n>2;^kECRTV!g(%cEDUMEn2PU98xJ+B}oqm`b&Xb07Ik%g3(ek z!8mCOKq|3w0n&ypc-3BQAWUw0xvw2TG)}G=(5g$|eYvatI=&Qi53N0YNh+dSA98QG-uWML zZ$ba@Kjd1;*V8@w9}3>O;HB&&BsWRQ0Z2QNP`_pLD#7c6ULfvMC<0XEjaRDehgb4a zSxW8&SIwj;1OugPf;mzS!A7Z+ph$WEhBD`3kt?t-LPjY8puc)l>erX+ z(CMCb)a&iT-qHIFjdAc5xwp!^!{fmN(&@fj(>>N?ZYx*$g?9GF;K~#BsP$7U1@=d; z@dgc2!pp%&B&}hfc)c1%X-a>tWAzPzYOBiB4rHJ3dk**K>To_0m#pjuzwi$RauJnd zE~%05IEfD4V;#ul8L*y`xD;-*KIYP%F)3JAHG%=$(}#uOc=PmuA)ZP#tyYELE4}Qc zwuCcjU#aRu?g+PaPw7PbC2@T|ld8PKea7jeoOietT!v(u%ze&9>~T*(=5-JG}IRmI-&+@y(Rjqf$vukp(?zPCje zYy9)C@Xu=el2`aQG=8zl@2r)9PIu26!9+Dd^d&YuPc;5Xjqgp+Gq0nGQmv_6)8_QI zE$H#u)r39evn=J`{Q4R{KSi27mFtQ^E11fStXzgKV(9UgVyAKMVwtjb8rRI(b-h*L z)>Gd2rvhNC$0l%`##c7DkPX7>g3|@+GAgTHBDCTWH2t4HR{bPvepYIU(BZR9dY))} zrs+5R#7Z2gTN)P_IzUUBH|Jk##)G9PX;}95eMP)a^Ko*M;zPGy>q_5i{PEjVeiFri z=e)+pEs7GxZdZA(YWzZtKUm|JYy7b7R^mvN(z(D|^b;m}l+6Z^M`Ed<-rO!VPv@G( zI={4%Sob|@jh;r3E3MF5>?&K=S}INFf~5`VoPYPEZ>$P8fm4NjG@pC5xJGIG*EL^H zPOF9KZJHxBevI@0KD*DE42p z*uYhuH6WDs_6mQ!#=rdve~aeMJJ=|P2k`Wj#`j)WeXQk@?sO-sNwkER3f5m5O=8_EV!I*^#CVoX;>e>`#i?>G0V+vz-cu@o_zlM^*26XNRn1H} znt<8c8sB(Kb?42)Bqg?5_&KxM)=)CalP+b?;(`;Mnpts?YW4_WdNMV$kXNE#q45Kx z1uzf2uX**hV1`>KsxP~g12Oh^$7f++A1D1u5F*9S=0@rdd@n7X&D{;{tBrHs6bU$< z4TSAXDSHmI1EqpFm@x)R$#c1pff<^zH=<>G3g%*J#wu>~e6ATyT&w1DO}PPk3g%;C z(Wjr;bKS}LaiK}CL{f-rwCZR9?e}mCNb${M68=%7u1Mneh1?2#$!Y1Yh1_B;O(rFi$tAFoDY1Jb9yBWSxs z%P=IAyvIc(eD|YODNpY?M>Ga2ihsyCl`kk#9Cw3HnRiH$OSl>O|NJO@xCHrGA{}4C z#YsQD$5rPJNu}?hOi!xtvkEv#AZCRMMrnb-H4ANkv%2bfqpm{_HIhnNBppZ`9GXmG zq@l}HRqQR(ky7AN_!_Tj&C|3xXgTnnIjvB{*a(v^Zl?;zRQO4St18@4;ZGF|5^5|M zJ3a+ks9;s0w*sLfa56-NFzS`cep?mKhByHI>WMZ7X}QulRVShfAFGffMWPZy_rZqp z`s;W#uL+t_fufagRuc!FR>c{b_`1f=euaNqb&k~xoO31xLL1=(F%aq6@Jg~Rs#aeW za6~~isVdA>AxnjgD(q4qv>5&<&6lUBiBjMAxIxwWRfWG*Wh0IR15jp5w8*s#=x{o- z9K9$?;+7-U<|=%u+Vp`9MG*5!p$wJ^mUDFji(l!~qZH%NshU;9Dm6hk6I7mAQsfGh z^g>Pi)?2E0gDTZ6mXaaH9$iVuMrpwcBx{!%I-o+43TG4;eOYtl_mk=tE8p zawSE61#X%&8lb;DO8WFGa9c>%h-;G~zXnW{MguDEn4tPEleT@$wXVE!r5b!gawAy9 Py-5vD=cGoTadrL=y!Av# diff --git a/st/st.1 b/st/st.1 index 39120b4..c60eca6 100644 --- a/st/st.1 +++ b/st/st.1 @@ -159,6 +159,12 @@ Copy the selected text to the clipboard selection. .TP .B Ctrl-Shift-v Paste from the clipboard selection. +.TP +.B Ctrl-Shift-Return +Launch a new session. +.TP +.B F11 or Alt+Return +Fullscreen mode. .SH CUSTOMIZATION .B st can be customized by creating a custom config.h and (re)compiling the source diff --git a/st/st.h b/st/st.h index eaa3f6d..f225b7f 100644 --- a/st/st.h +++ b/st/st.h @@ -86,6 +86,7 @@ void draw(void); void newterm(const Arg *); void kscrolldown(const Arg *); void kscrollup(const Arg *); +void fullscreen(const Arg *); void printscreen(const Arg *); void printsel(const Arg *); void sendbreak(const Arg *); diff --git a/st/x.c b/st/x.c index 6f1b7a7..69ceffc 100644 --- a/st/x.c +++ b/st/x.c @@ -96,6 +96,7 @@ typedef struct { Drawable buf; GlyphFontSpec *specbuf; /* font spec buffer used for rendering */ Atom xembed, wmdeletewin, netwmname, netwmiconname, netwmpid; + Atom netwmstate, netwmfullscreen; struct { XIM xim; XIC xic; @@ -769,6 +770,24 @@ xresize(int col, int row) xw.specbuf = xrealloc(xw.specbuf, col * sizeof(GlyphFontSpec)); } +void +fullscreen(const Arg *arg) +{ + XEvent ev; + + memset(&ev, 0, sizeof(ev)); + + ev.xclient.type = ClientMessage; + ev.xclient.message_type = xw.netwmstate; + ev.xclient.display = xw.dpy; + ev.xclient.window = xw.win; + ev.xclient.format = 32; + ev.xclient.data.l[0] = 2; /* _NET_WM_STATE_TOGGLE */ + ev.xclient.data.l[1] = xw.netwmfullscreen; + + XSendEvent(xw.dpy, DefaultRootWindow(xw.dpy), False, SubstructureNotifyMask|SubstructureRedirectMask, &ev); +} + ushort sixd_to_16bit(int x) { @@ -1248,6 +1267,9 @@ xinit(int cols, int rows) XChangeProperty(xw.dpy, xw.win, xw.netwmpid, XA_CARDINAL, 32, PropModeReplace, (uchar *)&thispid, 1); + xw.netwmstate = XInternAtom(xw.dpy, "_NET_WM_STATE", False); + xw.netwmfullscreen = XInternAtom(xw.dpy, "_NET_WM_STATE_FULLSCREEN", False); + win.mode = MODE_NUMLOCK; resettitle(); xhints(); diff --git a/st/x.c.orig b/st/x.c.orig deleted file mode 100644 index f38e27a..0000000 --- a/st/x.c.orig +++ /dev/null @@ -1,2127 +0,0 @@ -/* See LICENSE for license details. */ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -char *argv0; -#include "arg.h" -#include "st.h" -#include "win.h" - -/* types used in config.h */ -typedef struct { - uint mod; - KeySym keysym; - void (*func)(const Arg *); - const Arg arg; -} Shortcut; - -typedef struct { - uint mod; - uint button; - void (*func)(const Arg *); - const Arg arg; - uint release; -} MouseShortcut; - -typedef struct { - KeySym k; - uint mask; - char *s; - /* three-valued logic variables: 0 indifferent, 1 on, -1 off */ - signed char appkey; /* application keypad */ - signed char appcursor; /* application cursor */ -} Key; - -/* X modifiers */ -#define XK_ANY_MOD UINT_MAX -#define XK_NO_MOD 0 -#define XK_SWITCH_MOD (1<<13|1<<14) - -/* function definitions used in config.h */ -static void clipcopy(const Arg *); -static void clippaste(const Arg *); -static void numlock(const Arg *); -static void selpaste(const Arg *); -static void zoom(const Arg *); -static void zoomabs(const Arg *); -static void zoomreset(const Arg *); -static void ttysend(const Arg *); - -/* config.h for applying patches and the configuration. */ -#include "config.h" - -/* XEMBED messages */ -#define XEMBED_FOCUS_IN 4 -#define XEMBED_FOCUS_OUT 5 - -/* macros */ -#define IS_SET(flag) ((win.mode & (flag)) != 0) -#define TRUERED(x) (((x) & 0xff0000) >> 8) -#define TRUEGREEN(x) (((x) & 0xff00)) -#define TRUEBLUE(x) (((x) & 0xff) << 8) - -typedef XftDraw *Draw; -typedef XftColor Color; -typedef XftGlyphFontSpec GlyphFontSpec; - -/* Purely graphic info */ -typedef struct { - int tw, th; /* tty width and height */ - int w, h; /* window width and height */ - int hborderpx, vborderpx; - int ch; /* char height */ - int cw; /* char width */ - int mode; /* window state/mode flags */ - int cursor; /* cursor style */ -} TermWindow; - -typedef struct { - Display *dpy; - Colormap cmap; - Window win; - Drawable buf; - GlyphFontSpec *specbuf; /* font spec buffer used for rendering */ - Atom xembed, wmdeletewin, netwmname, netwmiconname, netwmpid; - struct { - XIM xim; - XIC xic; - XPoint spot; - XVaNestedList spotlist; - } ime; - Draw draw; - Visual *vis; - XSetWindowAttributes attrs; - int scr; - int isfixed; /* is fixed geometry? */ - int depth; /* bit depth */ - int l, t; /* left and top offset */ - int gm; /* geometry mask */ -} XWindow; - -typedef struct { - Atom xtarget; - char *primary, *clipboard; - struct timespec tclick1; - struct timespec tclick2; -} XSelection; - -/* Font structure */ -#define Font Font_ -typedef struct { - int height; - int width; - int ascent; - int descent; - int badslant; - int badweight; - short lbearing; - short rbearing; - XftFont *match; - FcFontSet *set; - FcPattern *pattern; -} Font; - -/* Drawing Context */ -typedef struct { - Color *col; - size_t collen; - Font font, bfont, ifont, ibfont; - GC gc; -} DC; - -static inline ushort sixd_to_16bit(int); -static int xmakeglyphfontspecs(XftGlyphFontSpec *, const Glyph *, int, int, int); -static void xdrawglyphfontspecs(const XftGlyphFontSpec *, Glyph, int, int, int); -static void xdrawglyph(Glyph, int, int); -static void xclear(int, int, int, int); -static int xgeommasktogravity(int); -static int ximopen(Display *); -static void ximinstantiate(Display *, XPointer, XPointer); -static void ximdestroy(XIM, XPointer, XPointer); -static int xicdestroy(XIC, XPointer, XPointer); -static void xinit(int, int); -static void cresize(int, int); -static void xresize(int, int); -static void xhints(void); -static int xloadcolor(int, const char *, Color *); -static int xloadfont(Font *, FcPattern *); -static void xloadfonts(const char *, double); -static void xunloadfont(Font *); -static void xunloadfonts(void); -static void xsetenv(void); -static void xseturgency(int); -static int evcol(XEvent *); -static int evrow(XEvent *); - -static void expose(XEvent *); -static void visibility(XEvent *); -static void unmap(XEvent *); -static void kpress(XEvent *); -static void cmessage(XEvent *); -static void resize(XEvent *); -static void focus(XEvent *); -static uint buttonmask(uint); -static int mouseaction(XEvent *, uint); -static void brelease(XEvent *); -static void bpress(XEvent *); -static void bmotion(XEvent *); -static void propnotify(XEvent *); -static void selnotify(XEvent *); -static void selclear_(XEvent *); -static void selrequest(XEvent *); -static void setsel(char *, Time); -static void mousesel(XEvent *, int); -static void mousereport(XEvent *); -static char *kmap(KeySym, uint); -static int match(uint, uint); - -static void run(void); -static void usage(void); - -static void (*handler[LASTEvent])(XEvent *) = { - [KeyPress] = kpress, - [ClientMessage] = cmessage, - [ConfigureNotify] = resize, - [VisibilityNotify] = visibility, - [UnmapNotify] = unmap, - [Expose] = expose, - [FocusIn] = focus, - [FocusOut] = focus, - [MotionNotify] = bmotion, - [ButtonPress] = bpress, - [ButtonRelease] = brelease, -/* - * Uncomment if you want the selection to disappear when you select something - * different in another window. - */ -/* [SelectionClear] = selclear_, */ - [SelectionNotify] = selnotify, -/* - * PropertyNotify is only turned on when there is some INCR transfer happening - * for the selection retrieval. - */ - [PropertyNotify] = propnotify, - [SelectionRequest] = selrequest, -}; - -/* Globals */ -static DC dc; -static XWindow xw; -static XSelection xsel; -static TermWindow win; - -/* Font Ring Cache */ -enum { - FRC_NORMAL, - FRC_ITALIC, - FRC_BOLD, - FRC_ITALICBOLD -}; - -typedef struct { - XftFont *font; - int flags; - Rune unicodep; -} Fontcache; - -/* Fontcache is an array now. A new font will be appended to the array. */ -static Fontcache *frc = NULL; -static int frclen = 0; -static int frccap = 0; -static char *usedfont = NULL; -static double usedfontsize = 0; -static double defaultfontsize = 0; - -static char *opt_alpha = NULL; -static char *opt_class = NULL; -static char **opt_cmd = NULL; -static char *opt_embed = NULL; -static char *opt_font = NULL; -static char *opt_io = NULL; -static char *opt_line = NULL; -static char *opt_name = NULL; -static char *opt_title = NULL; - -static uint buttons; /* bit field of pressed buttons */ - -void -clipcopy(const Arg *dummy) -{ - Atom clipboard; - - free(xsel.clipboard); - xsel.clipboard = NULL; - - if (xsel.primary != NULL) { - xsel.clipboard = xstrdup(xsel.primary); - clipboard = XInternAtom(xw.dpy, "CLIPBOARD", 0); - XSetSelectionOwner(xw.dpy, clipboard, xw.win, CurrentTime); - } -} - -void -clippaste(const Arg *dummy) -{ - Atom clipboard; - - clipboard = XInternAtom(xw.dpy, "CLIPBOARD", 0); - XConvertSelection(xw.dpy, clipboard, xsel.xtarget, clipboard, - xw.win, CurrentTime); -} - -void -selpaste(const Arg *dummy) -{ - XConvertSelection(xw.dpy, XA_PRIMARY, xsel.xtarget, XA_PRIMARY, - xw.win, CurrentTime); -} - -void -numlock(const Arg *dummy) -{ - win.mode ^= MODE_NUMLOCK; -} - -void -zoom(const Arg *arg) -{ - Arg larg; - - larg.f = usedfontsize + arg->f; - zoomabs(&larg); -} - -void -zoomabs(const Arg *arg) -{ - xunloadfonts(); - xloadfonts(usedfont, arg->f); - cresize(0, 0); - redraw(); - xhints(); -} - -void -zoomreset(const Arg *arg) -{ - Arg larg; - - if (defaultfontsize > 0) { - larg.f = defaultfontsize; - zoomabs(&larg); - } -} - -void -ttysend(const Arg *arg) -{ - ttywrite(arg->s, strlen(arg->s), 1); -} - -int -evcol(XEvent *e) -{ - int x = e->xbutton.x - win.hborderpx; - LIMIT(x, 0, win.tw - 1); - return x / win.cw; -} - -int -evrow(XEvent *e) -{ - int y = e->xbutton.y - win.vborderpx; - LIMIT(y, 0, win.th - 1); - return y / win.ch; -} - -void -mousesel(XEvent *e, int done) -{ - int type, seltype = SEL_REGULAR; - uint state = e->xbutton.state & ~(Button1Mask | forcemousemod); - - for (type = 1; type < LEN(selmasks); ++type) { - if (match(selmasks[type], state)) { - seltype = type; - break; - } - } - selextend(evcol(e), evrow(e), seltype, done); - if (done) - setsel(getsel(), e->xbutton.time); -} - -void -mousereport(XEvent *e) -{ - int len, btn, code; - int x = evcol(e), y = evrow(e); - int state = e->xbutton.state; - char buf[40]; - static int ox, oy; - - if (e->type == MotionNotify) { - if (x == ox && y == oy) - return; - if (!IS_SET(MODE_MOUSEMOTION) && !IS_SET(MODE_MOUSEMANY)) - return; - /* MODE_MOUSEMOTION: no reporting if no button is pressed */ - if (IS_SET(MODE_MOUSEMOTION) && buttons == 0) - return; - /* Set btn to lowest-numbered pressed button, or 12 if no - * buttons are pressed. */ - for (btn = 1; btn <= 11 && !(buttons & (1<<(btn-1))); btn++) - ; - code = 32; - } else { - btn = e->xbutton.button; - /* Only buttons 1 through 11 can be encoded */ - if (btn < 1 || btn > 11) - return; - if (e->type == ButtonRelease) { - /* MODE_MOUSEX10: no button release reporting */ - if (IS_SET(MODE_MOUSEX10)) - return; - /* Don't send release events for the scroll wheel */ - if (btn == 4 || btn == 5) - return; - } - code = 0; - } - - ox = x; - oy = y; - - /* Encode btn into code. If no button is pressed for a motion event in - * MODE_MOUSEMANY, then encode it as a release. */ - if ((!IS_SET(MODE_MOUSESGR) && e->type == ButtonRelease) || btn == 12) - code += 3; - else if (btn >= 8) - code += 128 + btn - 8; - else if (btn >= 4) - code += 64 + btn - 4; - else - code += btn - 1; - - if (!IS_SET(MODE_MOUSEX10)) { - code += ((state & ShiftMask ) ? 4 : 0) - + ((state & Mod1Mask ) ? 8 : 0) /* meta key: alt */ - + ((state & ControlMask) ? 16 : 0); - } - - if (IS_SET(MODE_MOUSESGR)) { - len = snprintf(buf, sizeof(buf), "\033[<%d;%d;%d%c", - code, x+1, y+1, - e->type == ButtonRelease ? 'm' : 'M'); - } else if (x < 223 && y < 223) { - len = snprintf(buf, sizeof(buf), "\033[M%c%c%c", - 32+code, 32+x+1, 32+y+1); - } else { - return; - } - - ttywrite(buf, len, 0); -} - -uint -buttonmask(uint button) -{ - return button == Button1 ? Button1Mask - : button == Button2 ? Button2Mask - : button == Button3 ? Button3Mask - : button == Button4 ? Button4Mask - : button == Button5 ? Button5Mask - : 0; -} - -int -mouseaction(XEvent *e, uint release) -{ - MouseShortcut *ms; - - /* ignore Buttonmask for Button - it's set on release */ - uint state = e->xbutton.state & ~buttonmask(e->xbutton.button); - - for (ms = mshortcuts; ms < mshortcuts + LEN(mshortcuts); ms++) { - if (ms->release == release && - ms->button == e->xbutton.button && - (match(ms->mod, state) || /* exact or forced */ - match(ms->mod, state & ~forcemousemod))) { - ms->func(&(ms->arg)); - return 1; - } - } - - return 0; -} - -void -bpress(XEvent *e) -{ - int btn = e->xbutton.button; - struct timespec now; - int snap; - - if (1 <= btn && btn <= 11) - buttons |= 1 << (btn-1); - - if (IS_SET(MODE_MOUSE) && !(e->xbutton.state & forcemousemod)) { - mousereport(e); - return; - } - - if (mouseaction(e, 0)) - return; - - if (btn == Button1) { - /* - * If the user clicks below predefined timeouts specific - * snapping behaviour is exposed. - */ - clock_gettime(CLOCK_MONOTONIC, &now); - if (TIMEDIFF(now, xsel.tclick2) <= tripleclicktimeout) { - snap = SNAP_LINE; - } else if (TIMEDIFF(now, xsel.tclick1) <= doubleclicktimeout) { - snap = SNAP_WORD; - } else { - snap = 0; - } - xsel.tclick2 = xsel.tclick1; - xsel.tclick1 = now; - - selstart(evcol(e), evrow(e), snap); - } -} - -void -propnotify(XEvent *e) -{ - XPropertyEvent *xpev; - Atom clipboard = XInternAtom(xw.dpy, "CLIPBOARD", 0); - - xpev = &e->xproperty; - if (xpev->state == PropertyNewValue && - (xpev->atom == XA_PRIMARY || - xpev->atom == clipboard)) { - selnotify(e); - } -} - -void -selnotify(XEvent *e) -{ - ulong nitems, ofs, rem; - int format; - uchar *data, *last, *repl; - Atom type, incratom, property = None; - - incratom = XInternAtom(xw.dpy, "INCR", 0); - - ofs = 0; - if (e->type == SelectionNotify) - property = e->xselection.property; - else if (e->type == PropertyNotify) - property = e->xproperty.atom; - - if (property == None) - return; - - do { - if (XGetWindowProperty(xw.dpy, xw.win, property, ofs, - BUFSIZ/4, False, AnyPropertyType, - &type, &format, &nitems, &rem, - &data)) { - fprintf(stderr, "Clipboard allocation failed\n"); - return; - } - - if (e->type == PropertyNotify && nitems == 0 && rem == 0) { - /* - * If there is some PropertyNotify with no data, then - * this is the signal of the selection owner that all - * data has been transferred. We won't need to receive - * PropertyNotify events anymore. - */ - MODBIT(xw.attrs.event_mask, 0, PropertyChangeMask); - XChangeWindowAttributes(xw.dpy, xw.win, CWEventMask, - &xw.attrs); - } - - if (type == incratom) { - /* - * Activate the PropertyNotify events so we receive - * when the selection owner does send us the next - * chunk of data. - */ - MODBIT(xw.attrs.event_mask, 1, PropertyChangeMask); - XChangeWindowAttributes(xw.dpy, xw.win, CWEventMask, - &xw.attrs); - - /* - * Deleting the property is the transfer start signal. - */ - XDeleteProperty(xw.dpy, xw.win, (int)property); - continue; - } - - /* - * As seen in getsel: - * Line endings are inconsistent in the terminal and GUI world - * copy and pasting. When receiving some selection data, - * replace all '\n' with '\r'. - * FIXME: Fix the computer world. - */ - repl = data; - last = data + nitems * format / 8; - while ((repl = memchr(repl, '\n', last - repl))) { - *repl++ = '\r'; - } - - if (IS_SET(MODE_BRCKTPASTE) && ofs == 0) - ttywrite("\033[200~", 6, 0); - ttywrite((char *)data, nitems * format / 8, 1); - if (IS_SET(MODE_BRCKTPASTE) && rem == 0) - ttywrite("\033[201~", 6, 0); - XFree(data); - /* number of 32-bit chunks returned */ - ofs += nitems * format / 32; - } while (rem > 0); - - /* - * Deleting the property again tells the selection owner to send the - * next data chunk in the property. - */ - XDeleteProperty(xw.dpy, xw.win, (int)property); -} - -void -xclipcopy(void) -{ - clipcopy(NULL); -} - -void -selclear_(XEvent *e) -{ - selclear(); -} - -void -selrequest(XEvent *e) -{ - XSelectionRequestEvent *xsre; - XSelectionEvent xev; - Atom xa_targets, string, clipboard; - char *seltext; - - xsre = (XSelectionRequestEvent *) e; - xev.type = SelectionNotify; - xev.requestor = xsre->requestor; - xev.selection = xsre->selection; - xev.target = xsre->target; - xev.time = xsre->time; - if (xsre->property == None) - xsre->property = xsre->target; - - /* reject */ - xev.property = None; - - xa_targets = XInternAtom(xw.dpy, "TARGETS", 0); - if (xsre->target == xa_targets) { - /* respond with the supported type */ - string = xsel.xtarget; - XChangeProperty(xsre->display, xsre->requestor, xsre->property, - XA_ATOM, 32, PropModeReplace, - (uchar *) &string, 1); - xev.property = xsre->property; - } else if (xsre->target == xsel.xtarget || xsre->target == XA_STRING) { - /* - * xith XA_STRING non ascii characters may be incorrect in the - * requestor. It is not our problem, use utf8. - */ - clipboard = XInternAtom(xw.dpy, "CLIPBOARD", 0); - if (xsre->selection == XA_PRIMARY) { - seltext = xsel.primary; - } else if (xsre->selection == clipboard) { - seltext = xsel.clipboard; - } else { - fprintf(stderr, - "Unhandled clipboard selection 0x%lx\n", - xsre->selection); - return; - } - if (seltext != NULL) { - XChangeProperty(xsre->display, xsre->requestor, - xsre->property, xsre->target, - 8, PropModeReplace, - (uchar *)seltext, strlen(seltext)); - xev.property = xsre->property; - } - } - - /* all done, send a notification to the listener */ - if (!XSendEvent(xsre->display, xsre->requestor, 1, 0, (XEvent *) &xev)) - fprintf(stderr, "Error sending SelectionNotify event\n"); -} - -void -setsel(char *str, Time t) -{ - if (!str) - return; - - free(xsel.primary); - xsel.primary = str; - - XSetSelectionOwner(xw.dpy, XA_PRIMARY, xw.win, t); - if (XGetSelectionOwner(xw.dpy, XA_PRIMARY) != xw.win) - selclear(); - clipcopy(NULL); -} - -void -xsetsel(char *str) -{ - setsel(str, CurrentTime); -} - -void -brelease(XEvent *e) -{ - int btn = e->xbutton.button; - - if (1 <= btn && btn <= 11) - buttons &= ~(1 << (btn-1)); - - if (IS_SET(MODE_MOUSE) && !(e->xbutton.state & forcemousemod)) { - mousereport(e); - return; - } - - if (mouseaction(e, 1)) - return; - if (btn == Button1) - mousesel(e, 1); -} - -void -bmotion(XEvent *e) -{ - if (IS_SET(MODE_MOUSE) && !(e->xbutton.state & forcemousemod)) { - mousereport(e); - return; - } - - mousesel(e, 0); -} - -void -cresize(int width, int height) -{ - int col, row; - - if (width != 0) - win.w = width; - if (height != 0) - win.h = height; - - col = (win.w - 2 * borderpx) / win.cw; - row = (win.h - 2 * borderpx) / win.ch; - col = MAX(1, col); - row = MAX(1, row); - - win.hborderpx = (win.w - col * win.cw) / 2; - win.vborderpx = (win.h - row * win.ch) / 2; - - tresize(col, row); - xresize(col, row); - ttyresize(win.tw, win.th); -} - -void -xresize(int col, int row) -{ - win.tw = col * win.cw; - win.th = row * win.ch; - - XFreePixmap(xw.dpy, xw.buf); - xw.buf = XCreatePixmap(xw.dpy, xw.win, win.w, win.h, - xw.depth); - XftDrawChange(xw.draw, xw.buf); - xclear(0, 0, win.w, win.h); - - /* resize to new width */ - xw.specbuf = xrealloc(xw.specbuf, col * sizeof(GlyphFontSpec)); -} - -ushort -sixd_to_16bit(int x) -{ - return x == 0 ? 0 : 0x3737 + 0x2828 * x; -} - -int -xloadcolor(int i, const char *name, Color *ncolor) -{ - XRenderColor color = { .alpha = 0xffff }; - - if (!name) { - if (BETWEEN(i, 16, 255)) { /* 256 color */ - if (i < 6*6*6+16) { /* same colors as xterm */ - color.red = sixd_to_16bit( ((i-16)/36)%6 ); - color.green = sixd_to_16bit( ((i-16)/6) %6 ); - color.blue = sixd_to_16bit( ((i-16)/1) %6 ); - } else { /* greyscale */ - color.red = 0x0808 + 0x0a0a * (i - (6*6*6+16)); - color.green = color.blue = color.red; - } - return XftColorAllocValue(xw.dpy, xw.vis, - xw.cmap, &color, ncolor); - } else - name = colorname[i]; - } - - return XftColorAllocName(xw.dpy, xw.vis, xw.cmap, name, ncolor); -} - -void -xloadcols(void) -{ - int i; - static int loaded; - Color *cp; - - if (loaded) { - for (cp = dc.col; cp < &dc.col[dc.collen]; ++cp) - XftColorFree(xw.dpy, xw.vis, xw.cmap, cp); - } else { - dc.collen = MAX(LEN(colorname), 256); - dc.col = xmalloc(dc.collen * sizeof(Color)); - } - - for (i = 0; i < dc.collen; i++) - if (!xloadcolor(i, NULL, &dc.col[i])) { - if (colorname[i]) - die("could not allocate color '%s'\n", colorname[i]); - else - die("could not allocate color %d\n", i); - } - - /* set alpha value of bg color */ - if (opt_alpha) - alpha = strtof(opt_alpha, NULL); - dc.col[defaultbg].color.alpha = (unsigned short)(0xffff * alpha); - dc.col[defaultbg].pixel &= 0x00FFFFFF; - dc.col[defaultbg].pixel |= (unsigned char)(0xff * alpha) << 24; - loaded = 1; -} - -int -xgetcolor(int x, unsigned char *r, unsigned char *g, unsigned char *b) -{ - if (!BETWEEN(x, 0, dc.collen)) - return 1; - - *r = dc.col[x].color.red >> 8; - *g = dc.col[x].color.green >> 8; - *b = dc.col[x].color.blue >> 8; - - return 0; -} - -int -xsetcolorname(int x, const char *name) -{ - Color ncolor; - - if (!BETWEEN(x, 0, dc.collen)) - return 1; - - if (!xloadcolor(x, name, &ncolor)) - return 1; - - XftColorFree(xw.dpy, xw.vis, xw.cmap, &dc.col[x]); - dc.col[x] = ncolor; - - return 0; -} - -/* - * Absolute coordinates. - */ -void -xclear(int x1, int y1, int x2, int y2) -{ - XftDrawRect(xw.draw, - &dc.col[IS_SET(MODE_REVERSE)? defaultfg : defaultbg], - x1, y1, x2-x1, y2-y1); -} - -void -xhints(void) -{ - XClassHint class = {opt_name ? opt_name : termname, - opt_class ? opt_class : termname}; - XWMHints wm = {.flags = InputHint, .input = 1}; - XSizeHints *sizeh; - - sizeh = XAllocSizeHints(); - - sizeh->flags = PSize | PResizeInc | PBaseSize | PMinSize; - sizeh->height = win.h; - sizeh->width = win.w; - sizeh->height_inc = 1; - sizeh->width_inc = 1; - sizeh->base_height = 2 * borderpx; - sizeh->base_width = 2 * borderpx; - sizeh->min_height = win.ch + 2 * borderpx; - sizeh->min_width = win.cw + 2 * borderpx; - if (xw.isfixed) { - sizeh->flags |= PMaxSize; - sizeh->min_width = sizeh->max_width = win.w; - sizeh->min_height = sizeh->max_height = win.h; - } - if (xw.gm & (XValue|YValue)) { - sizeh->flags |= USPosition | PWinGravity; - sizeh->x = xw.l; - sizeh->y = xw.t; - sizeh->win_gravity = xgeommasktogravity(xw.gm); - } - - XSetWMProperties(xw.dpy, xw.win, NULL, NULL, NULL, 0, sizeh, &wm, - &class); - XFree(sizeh); -} - -int -xgeommasktogravity(int mask) -{ - switch (mask & (XNegative|YNegative)) { - case 0: - return NorthWestGravity; - case XNegative: - return NorthEastGravity; - case YNegative: - return SouthWestGravity; - } - - return SouthEastGravity; -} - -int -xloadfont(Font *f, FcPattern *pattern) -{ - FcPattern *configured; - FcPattern *match; - FcResult result; - XGlyphInfo extents; - int wantattr, haveattr; - - /* - * Manually configure instead of calling XftMatchFont - * so that we can use the configured pattern for - * "missing glyph" lookups. - */ - configured = FcPatternDuplicate(pattern); - if (!configured) - return 1; - - FcConfigSubstitute(NULL, configured, FcMatchPattern); - XftDefaultSubstitute(xw.dpy, xw.scr, configured); - - match = FcFontMatch(NULL, configured, &result); - if (!match) { - FcPatternDestroy(configured); - return 1; - } - - if (!(f->match = XftFontOpenPattern(xw.dpy, match))) { - FcPatternDestroy(configured); - FcPatternDestroy(match); - return 1; - } - - if ((XftPatternGetInteger(pattern, "slant", 0, &wantattr) == - XftResultMatch)) { - /* - * Check if xft was unable to find a font with the appropriate - * slant but gave us one anyway. Try to mitigate. - */ - if ((XftPatternGetInteger(f->match->pattern, "slant", 0, - &haveattr) != XftResultMatch) || haveattr < wantattr) { - f->badslant = 1; - fputs("font slant does not match\n", stderr); - } - } - - if ((XftPatternGetInteger(pattern, "weight", 0, &wantattr) == - XftResultMatch)) { - if ((XftPatternGetInteger(f->match->pattern, "weight", 0, - &haveattr) != XftResultMatch) || haveattr != wantattr) { - f->badweight = 1; - fputs("font weight does not match\n", stderr); - } - } - - XftTextExtentsUtf8(xw.dpy, f->match, - (const FcChar8 *) ascii_printable, - strlen(ascii_printable), &extents); - - f->set = NULL; - f->pattern = configured; - - f->ascent = f->match->ascent; - f->descent = f->match->descent; - f->lbearing = 0; - f->rbearing = f->match->max_advance_width; - - f->height = f->ascent + f->descent; - f->width = DIVCEIL(extents.xOff, strlen(ascii_printable)); - - return 0; -} - -void -xloadfonts(const char *fontstr, double fontsize) -{ - FcPattern *pattern; - double fontval; - - if (fontstr[0] == '-') - pattern = XftXlfdParse(fontstr, False, False); - else - pattern = FcNameParse((const FcChar8 *)fontstr); - - if (!pattern) - die("can't open font %s\n", fontstr); - - if (fontsize > 1) { - FcPatternDel(pattern, FC_PIXEL_SIZE); - FcPatternDel(pattern, FC_SIZE); - FcPatternAddDouble(pattern, FC_PIXEL_SIZE, (double)fontsize); - usedfontsize = fontsize; - } else { - if (FcPatternGetDouble(pattern, FC_PIXEL_SIZE, 0, &fontval) == - FcResultMatch) { - usedfontsize = fontval; - } else if (FcPatternGetDouble(pattern, FC_SIZE, 0, &fontval) == - FcResultMatch) { - usedfontsize = -1; - } else { - /* - * Default font size is 12, if none given. This is to - * have a known usedfontsize value. - */ - FcPatternAddDouble(pattern, FC_PIXEL_SIZE, 12); - usedfontsize = 12; - } - defaultfontsize = usedfontsize; - } - - if (xloadfont(&dc.font, pattern)) - die("can't open font %s\n", fontstr); - - if (usedfontsize < 0) { - FcPatternGetDouble(dc.font.match->pattern, - FC_PIXEL_SIZE, 0, &fontval); - usedfontsize = fontval; - if (fontsize == 0) - defaultfontsize = fontval; - } - - /* Setting character width and height. */ - win.cw = ceilf(dc.font.width * cwscale); - win.ch = ceilf(dc.font.height * chscale); - - FcPatternDel(pattern, FC_SLANT); - FcPatternAddInteger(pattern, FC_SLANT, FC_SLANT_ITALIC); - if (xloadfont(&dc.ifont, pattern)) - die("can't open font %s\n", fontstr); - - FcPatternDel(pattern, FC_WEIGHT); - FcPatternAddInteger(pattern, FC_WEIGHT, FC_WEIGHT_BOLD); - if (xloadfont(&dc.ibfont, pattern)) - die("can't open font %s\n", fontstr); - - FcPatternDel(pattern, FC_SLANT); - FcPatternAddInteger(pattern, FC_SLANT, FC_SLANT_ROMAN); - if (xloadfont(&dc.bfont, pattern)) - die("can't open font %s\n", fontstr); - - FcPatternDestroy(pattern); -} - -void -xunloadfont(Font *f) -{ - XftFontClose(xw.dpy, f->match); - FcPatternDestroy(f->pattern); - if (f->set) - FcFontSetDestroy(f->set); -} - -void -xunloadfonts(void) -{ - /* Free the loaded fonts in the font cache. */ - while (frclen > 0) - XftFontClose(xw.dpy, frc[--frclen].font); - - xunloadfont(&dc.font); - xunloadfont(&dc.bfont); - xunloadfont(&dc.ifont); - xunloadfont(&dc.ibfont); -} - -int -ximopen(Display *dpy) -{ - XIMCallback imdestroy = { .client_data = NULL, .callback = ximdestroy }; - XICCallback icdestroy = { .client_data = NULL, .callback = xicdestroy }; - - xw.ime.xim = XOpenIM(xw.dpy, NULL, NULL, NULL); - if (xw.ime.xim == NULL) - return 0; - - if (XSetIMValues(xw.ime.xim, XNDestroyCallback, &imdestroy, NULL)) - fprintf(stderr, "XSetIMValues: " - "Could not set XNDestroyCallback.\n"); - - xw.ime.spotlist = XVaCreateNestedList(0, XNSpotLocation, &xw.ime.spot, - NULL); - - if (xw.ime.xic == NULL) { - xw.ime.xic = XCreateIC(xw.ime.xim, XNInputStyle, - XIMPreeditNothing | XIMStatusNothing, - XNClientWindow, xw.win, - XNDestroyCallback, &icdestroy, - NULL); - } - if (xw.ime.xic == NULL) - fprintf(stderr, "XCreateIC: Could not create input context.\n"); - - return 1; -} - -void -ximinstantiate(Display *dpy, XPointer client, XPointer call) -{ - if (ximopen(dpy)) - XUnregisterIMInstantiateCallback(xw.dpy, NULL, NULL, NULL, - ximinstantiate, NULL); -} - -void -ximdestroy(XIM xim, XPointer client, XPointer call) -{ - xw.ime.xim = NULL; - XRegisterIMInstantiateCallback(xw.dpy, NULL, NULL, NULL, - ximinstantiate, NULL); - XFree(xw.ime.spotlist); -} - -int -xicdestroy(XIC xim, XPointer client, XPointer call) -{ - xw.ime.xic = NULL; - return 1; -} - -void -xinit(int cols, int rows) -{ - XGCValues gcvalues; - Cursor cursor; - Window parent; - pid_t thispid = getpid(); - XColor xmousefg, xmousebg; - XWindowAttributes attr; - XVisualInfo vis; - - if (!(xw.dpy = XOpenDisplay(NULL))) - die("can't open display\n"); - xw.scr = XDefaultScreen(xw.dpy); - - if (!(opt_embed && (parent = strtol(opt_embed, NULL, 0)))) { - parent = XRootWindow(xw.dpy, xw.scr); - xw.depth = 32; - } else { - XGetWindowAttributes(xw.dpy, parent, &attr); - xw.depth = attr.depth; - } - - XMatchVisualInfo(xw.dpy, xw.scr, xw.depth, TrueColor, &vis); - xw.vis = vis.visual; - - /* font */ - if (!FcInit()) - die("could not init fontconfig.\n"); - - usedfont = (opt_font == NULL)? font : opt_font; - xloadfonts(usedfont, 0); - - /* colors */ - xw.cmap = XCreateColormap(xw.dpy, parent, xw.vis, None); - xloadcols(); - - /* adjust fixed window geometry */ - win.w = 2 * win.hborderpx + 2 * borderpx + cols * win.cw; - win.h = 2 * win.vborderpx + 2 * borderpx + rows * win.ch; - if (xw.gm & XNegative) - xw.l += DisplayWidth(xw.dpy, xw.scr) - win.w - 2; - if (xw.gm & YNegative) - xw.t += DisplayHeight(xw.dpy, xw.scr) - win.h - 2; - - /* Events */ - xw.attrs.background_pixel = dc.col[defaultbg].pixel; - xw.attrs.border_pixel = dc.col[defaultbg].pixel; - xw.attrs.bit_gravity = NorthWestGravity; - xw.attrs.event_mask = FocusChangeMask | KeyPressMask | KeyReleaseMask - | ExposureMask | VisibilityChangeMask | StructureNotifyMask - | ButtonMotionMask | ButtonPressMask | ButtonReleaseMask; - xw.attrs.colormap = xw.cmap; - - xw.win = XCreateWindow(xw.dpy, parent, xw.l, xw.t, - win.w, win.h, 0, xw.depth, InputOutput, - xw.vis, CWBackPixel | CWBorderPixel | CWBitGravity - | CWEventMask | CWColormap, &xw.attrs); - - memset(&gcvalues, 0, sizeof(gcvalues)); - gcvalues.graphics_exposures = False; - xw.buf = XCreatePixmap(xw.dpy, xw.win, win.w, win.h, xw.depth); - dc.gc = XCreateGC(xw.dpy, xw.buf, GCGraphicsExposures, &gcvalues); - XSetForeground(xw.dpy, dc.gc, dc.col[defaultbg].pixel); - XFillRectangle(xw.dpy, xw.buf, dc.gc, 0, 0, win.w, win.h); - - /* font spec buffer */ - xw.specbuf = xmalloc(cols * sizeof(GlyphFontSpec)); - - /* Xft rendering context */ - xw.draw = XftDrawCreate(xw.dpy, xw.buf, xw.vis, xw.cmap); - - /* input methods */ - if (!ximopen(xw.dpy)) { - XRegisterIMInstantiateCallback(xw.dpy, NULL, NULL, NULL, - ximinstantiate, NULL); - } - - /* white cursor, black outline */ - cursor = XCreateFontCursor(xw.dpy, mouseshape); - XDefineCursor(xw.dpy, xw.win, cursor); - - if (XParseColor(xw.dpy, xw.cmap, colorname[mousefg], &xmousefg) == 0) { - xmousefg.red = 0xffff; - xmousefg.green = 0xffff; - xmousefg.blue = 0xffff; - } - - if (XParseColor(xw.dpy, xw.cmap, colorname[mousebg], &xmousebg) == 0) { - xmousebg.red = 0x0000; - xmousebg.green = 0x0000; - xmousebg.blue = 0x0000; - } - - XRecolorCursor(xw.dpy, cursor, &xmousefg, &xmousebg); - - xw.xembed = XInternAtom(xw.dpy, "_XEMBED", False); - xw.wmdeletewin = XInternAtom(xw.dpy, "WM_DELETE_WINDOW", False); - xw.netwmname = XInternAtom(xw.dpy, "_NET_WM_NAME", False); - xw.netwmiconname = XInternAtom(xw.dpy, "_NET_WM_ICON_NAME", False); - XSetWMProtocols(xw.dpy, xw.win, &xw.wmdeletewin, 1); - - xw.netwmpid = XInternAtom(xw.dpy, "_NET_WM_PID", False); - XChangeProperty(xw.dpy, xw.win, xw.netwmpid, XA_CARDINAL, 32, - PropModeReplace, (uchar *)&thispid, 1); - - win.mode = MODE_NUMLOCK; - resettitle(); - xhints(); - XMapWindow(xw.dpy, xw.win); - XSync(xw.dpy, False); - - clock_gettime(CLOCK_MONOTONIC, &xsel.tclick1); - clock_gettime(CLOCK_MONOTONIC, &xsel.tclick2); - xsel.primary = NULL; - xsel.clipboard = NULL; - xsel.xtarget = XInternAtom(xw.dpy, "UTF8_STRING", 0); - if (xsel.xtarget == None) - xsel.xtarget = XA_STRING; -} - -int -xmakeglyphfontspecs(XftGlyphFontSpec *specs, const Glyph *glyphs, int len, int x, int y) -{ - float winx = win.hborderpx + x * win.cw, winy = win.vborderpx + y * win.ch, xp, yp; - ushort mode, prevmode = USHRT_MAX; - Font *font = &dc.font; - int frcflags = FRC_NORMAL; - float runewidth = win.cw; - Rune rune; - FT_UInt glyphidx; - FcResult fcres; - FcPattern *fcpattern, *fontpattern; - FcFontSet *fcsets[] = { NULL }; - FcCharSet *fccharset; - int i, f, numspecs = 0; - - for (i = 0, xp = winx, yp = winy + font->ascent; i < len; ++i) { - /* Fetch rune and mode for current glyph. */ - rune = glyphs[i].u; - mode = glyphs[i].mode; - - /* Skip dummy wide-character spacing. */ - if (mode == ATTR_WDUMMY) - continue; - - /* Determine font for glyph if different from previous glyph. */ - if (prevmode != mode) { - prevmode = mode; - font = &dc.font; - frcflags = FRC_NORMAL; - runewidth = win.cw * ((mode & ATTR_WIDE) ? 2.0f : 1.0f); - if ((mode & ATTR_ITALIC) && (mode & ATTR_BOLD)) { - font = &dc.ibfont; - frcflags = FRC_ITALICBOLD; - } else if (mode & ATTR_ITALIC) { - font = &dc.ifont; - frcflags = FRC_ITALIC; - } else if (mode & ATTR_BOLD) { - font = &dc.bfont; - frcflags = FRC_BOLD; - } - yp = winy + font->ascent; - } - - /* Lookup character index with default font. */ - glyphidx = XftCharIndex(xw.dpy, font->match, rune); - if (glyphidx) { - specs[numspecs].font = font->match; - specs[numspecs].glyph = glyphidx; - specs[numspecs].x = (short)xp; - specs[numspecs].y = (short)yp; - xp += runewidth; - numspecs++; - continue; - } - - /* Fallback on font cache, search the font cache for match. */ - for (f = 0; f < frclen; f++) { - glyphidx = XftCharIndex(xw.dpy, frc[f].font, rune); - /* Everything correct. */ - if (glyphidx && frc[f].flags == frcflags) - break; - /* We got a default font for a not found glyph. */ - if (!glyphidx && frc[f].flags == frcflags - && frc[f].unicodep == rune) { - break; - } - } - - /* Nothing was found. Use fontconfig to find matching font. */ - if (f >= frclen) { - if (!font->set) - font->set = FcFontSort(0, font->pattern, - 1, 0, &fcres); - fcsets[0] = font->set; - - /* - * Nothing was found in the cache. Now use - * some dozen of Fontconfig calls to get the - * font for one single character. - * - * Xft and fontconfig are design failures. - */ - fcpattern = FcPatternDuplicate(font->pattern); - fccharset = FcCharSetCreate(); - - FcCharSetAddChar(fccharset, rune); - FcPatternAddCharSet(fcpattern, FC_CHARSET, - fccharset); - FcPatternAddBool(fcpattern, FC_SCALABLE, 1); - - FcConfigSubstitute(0, fcpattern, - FcMatchPattern); - FcDefaultSubstitute(fcpattern); - - fontpattern = FcFontSetMatch(0, fcsets, 1, - fcpattern, &fcres); - - /* Allocate memory for the new cache entry. */ - if (frclen >= frccap) { - frccap += 16; - frc = xrealloc(frc, frccap * sizeof(Fontcache)); - } - - frc[frclen].font = XftFontOpenPattern(xw.dpy, - fontpattern); - if (!frc[frclen].font) - die("XftFontOpenPattern failed seeking fallback font: %s\n", - strerror(errno)); - frc[frclen].flags = frcflags; - frc[frclen].unicodep = rune; - - glyphidx = XftCharIndex(xw.dpy, frc[frclen].font, rune); - - f = frclen; - frclen++; - - FcPatternDestroy(fcpattern); - FcCharSetDestroy(fccharset); - } - - specs[numspecs].font = frc[f].font; - specs[numspecs].glyph = glyphidx; - specs[numspecs].x = (short)xp; - specs[numspecs].y = (short)yp; - xp += runewidth; - numspecs++; - } - - return numspecs; -} - -void -xdrawglyphfontspecs(const XftGlyphFontSpec *specs, Glyph base, int len, int x, int y) -{ - int charlen = len * ((base.mode & ATTR_WIDE) ? 2 : 1); - int winx = win.hborderpx + x * win.cw, winy = win.vborderpx + y * win.ch, - width = charlen * win.cw; - Color *fg, *bg, *temp, revfg, revbg, truefg, truebg; - XRenderColor colfg, colbg; - XRectangle r; - - /* Fallback on color display for attributes not supported by the font */ - if (base.mode & ATTR_ITALIC && base.mode & ATTR_BOLD) { - if (dc.ibfont.badslant || dc.ibfont.badweight) - base.fg = defaultattr; - } else if ((base.mode & ATTR_ITALIC && dc.ifont.badslant) || - (base.mode & ATTR_BOLD && dc.bfont.badweight)) { - base.fg = defaultattr; - } - - if (IS_TRUECOL(base.fg)) { - colfg.alpha = 0xffff; - colfg.red = TRUERED(base.fg); - colfg.green = TRUEGREEN(base.fg); - colfg.blue = TRUEBLUE(base.fg); - XftColorAllocValue(xw.dpy, xw.vis, xw.cmap, &colfg, &truefg); - fg = &truefg; - } else { - fg = &dc.col[base.fg]; - } - - if (IS_TRUECOL(base.bg)) { - colbg.alpha = 0xffff; - colbg.green = TRUEGREEN(base.bg); - colbg.red = TRUERED(base.bg); - colbg.blue = TRUEBLUE(base.bg); - XftColorAllocValue(xw.dpy, xw.vis, xw.cmap, &colbg, &truebg); - bg = &truebg; - } else { - bg = &dc.col[base.bg]; - } - - /* Change basic system colors [0-7] to bright system colors [8-15] */ - if ((base.mode & ATTR_BOLD_FAINT) == ATTR_BOLD && BETWEEN(base.fg, 0, 7)) - fg = &dc.col[base.fg + 8]; - - if (IS_SET(MODE_REVERSE)) { - if (fg == &dc.col[defaultfg]) { - fg = &dc.col[defaultbg]; - } else { - colfg.red = ~fg->color.red; - colfg.green = ~fg->color.green; - colfg.blue = ~fg->color.blue; - colfg.alpha = fg->color.alpha; - XftColorAllocValue(xw.dpy, xw.vis, xw.cmap, &colfg, - &revfg); - fg = &revfg; - } - - if (bg == &dc.col[defaultbg]) { - bg = &dc.col[defaultfg]; - } else { - colbg.red = ~bg->color.red; - colbg.green = ~bg->color.green; - colbg.blue = ~bg->color.blue; - colbg.alpha = bg->color.alpha; - XftColorAllocValue(xw.dpy, xw.vis, xw.cmap, &colbg, - &revbg); - bg = &revbg; - } - } - - if ((base.mode & ATTR_BOLD_FAINT) == ATTR_FAINT) { - colfg.red = fg->color.red / 2; - colfg.green = fg->color.green / 2; - colfg.blue = fg->color.blue / 2; - colfg.alpha = fg->color.alpha; - XftColorAllocValue(xw.dpy, xw.vis, xw.cmap, &colfg, &revfg); - fg = &revfg; - } - - if (base.mode & ATTR_REVERSE) { - temp = fg; - fg = bg; - bg = temp; - } - - if (base.mode & ATTR_BLINK && win.mode & MODE_BLINK) - fg = bg; - - if (base.mode & ATTR_INVISIBLE) - fg = bg; - - /* Intelligent cleaning up of the borders. */ - if (x == 0) { - xclear(0, (y == 0)? 0 : winy, win.vborderpx, - winy + win.ch + - ((winy + win.ch >= win.vborderpx + win.th)? win.h : 0)); - } - if (winx + width >= win.hborderpx + win.tw) { - xclear(winx + width, (y == 0)? 0 : winy, win.w, - ((winy + win.ch >= win.vborderpx + win.th)? win.h : (winy + win.ch))); - } - if (y == 0) - xclear(winx, 0, winx + width, win.vborderpx); - if (winy + win.ch >= win.vborderpx + win.th) - xclear(winx, winy + win.ch, winx + width, win.h); - - /* Clean up the region we want to draw to. */ - XftDrawRect(xw.draw, bg, winx, winy, width, win.ch); - - /* Set the clip region because Xft is sometimes dirty. */ - r.x = 0; - r.y = 0; - r.height = win.ch; - r.width = width; - XftDrawSetClipRectangles(xw.draw, winx, winy, &r, 1); - - /* Render the glyphs. */ - XftDrawGlyphFontSpec(xw.draw, fg, specs, len); - - /* Render underline and strikethrough. */ - if (base.mode & ATTR_UNDERLINE) { - XftDrawRect(xw.draw, fg, winx, winy + dc.font.ascent * chscale + 1, - width, 1); - } - - if (base.mode & ATTR_STRUCK) { - XftDrawRect(xw.draw, fg, winx, winy + 2 * dc.font.ascent * chscale / 3, - width, 1); - } - - /* Reset clip to none. */ - XftDrawSetClip(xw.draw, 0); -} - -void -xdrawglyph(Glyph g, int x, int y) -{ - int numspecs; - XftGlyphFontSpec spec; - - numspecs = xmakeglyphfontspecs(&spec, &g, 1, x, y); - xdrawglyphfontspecs(&spec, g, numspecs, x, y); -} - -void -xdrawcursor(int cx, int cy, Glyph g, int ox, int oy, Glyph og) -{ - Color drawcol; - - /* remove the old cursor */ - if (selected(ox, oy)) - og.mode ^= ATTR_REVERSE; - xdrawglyph(og, ox, oy); - - if (IS_SET(MODE_HIDE)) - return; - - /* - * Select the right color for the right mode. - */ - g.mode &= ATTR_BOLD|ATTR_ITALIC|ATTR_UNDERLINE|ATTR_STRUCK|ATTR_WIDE; - - if (IS_SET(MODE_REVERSE)) { - g.mode |= ATTR_REVERSE; - g.bg = defaultfg; - if (selected(cx, cy)) { - drawcol = dc.col[defaultcs]; - g.fg = defaultrcs; - } else { - drawcol = dc.col[defaultrcs]; - g.fg = defaultcs; - } - } else { - if (selected(cx, cy)) { - g.fg = defaultfg; - g.bg = defaultrcs; - } else { - g.fg = defaultbg; - g.bg = defaultcs; - } - drawcol = dc.col[g.bg]; - } - - /* draw the new one */ - if (IS_SET(MODE_FOCUSED)) { - switch (win.cursor) { - case 7: /* st extension */ - g.u = 0x2603; /* snowman (U+2603) */ - /* FALLTHROUGH */ - case 0: /* Blinking Block */ - case 1: /* Blinking Block (Default) */ - case 2: /* Steady Block */ - xdrawglyph(g, cx, cy); - break; - case 3: /* Blinking Underline */ - case 4: /* Steady Underline */ - XftDrawRect(xw.draw, &drawcol, - win.hborderpx + cx * win.cw, - win.vborderpx + (cy + 1) * win.ch - \ - cursorthickness, - win.cw, cursorthickness); - break; - case 5: /* Blinking bar */ - case 6: /* Steady bar */ - XftDrawRect(xw.draw, &drawcol, - win.hborderpx + cx * win.cw, - win.vborderpx + cy * win.ch, - cursorthickness, win.ch); - break; - } - } else { - XftDrawRect(xw.draw, &drawcol, - win.hborderpx + cx * win.cw, - win.vborderpx + cy * win.ch, - win.cw - 1, 1); - XftDrawRect(xw.draw, &drawcol, - win.hborderpx + cx * win.cw, - win.vborderpx + cy * win.ch, - 1, win.ch - 1); - XftDrawRect(xw.draw, &drawcol, - win.hborderpx + (cx + 1) * win.cw - 1, - win.vborderpx + cy * win.ch, - 1, win.ch - 1); - XftDrawRect(xw.draw, &drawcol, - win.hborderpx + cx * win.cw, - win.vborderpx + (cy + 1) * win.ch - 1, - win.cw, 1); - } -} - -void -xsetenv(void) -{ - char buf[sizeof(long) * 8 + 1]; - - snprintf(buf, sizeof(buf), "%lu", xw.win); - setenv("WINDOWID", buf, 1); -} - -void -xseticontitle(char *p) -{ - XTextProperty prop; - DEFAULT(p, opt_title); - - if (Xutf8TextListToTextProperty(xw.dpy, &p, 1, XUTF8StringStyle, - &prop) != Success) - return; - XSetWMIconName(xw.dpy, xw.win, &prop); - XSetTextProperty(xw.dpy, xw.win, &prop, xw.netwmiconname); - XFree(prop.value); -} - -void -xsettitle(char *p) -{ - XTextProperty prop; - DEFAULT(p, opt_title); - - if (Xutf8TextListToTextProperty(xw.dpy, &p, 1, XUTF8StringStyle, - &prop) != Success) - return; - XSetWMName(xw.dpy, xw.win, &prop); - XSetTextProperty(xw.dpy, xw.win, &prop, xw.netwmname); - XFree(prop.value); -} - -int -xstartdraw(void) -{ - if (IS_SET(MODE_VISIBLE)) - XCopyArea(xw.dpy, xw.win, xw.buf, dc.gc, 0, 0, win.w, win.h, 0, 0); - return IS_SET(MODE_VISIBLE); -} - -void -xdrawline(Line line, int x1, int y1, int x2) -{ - int i, x, ox, numspecs; - Glyph base, new; - XftGlyphFontSpec *specs = xw.specbuf; - - numspecs = xmakeglyphfontspecs(specs, &line[x1], x2 - x1, x1, y1); - i = ox = 0; - for (x = x1; x < x2 && i < numspecs; x++) { - new = line[x]; - if (new.mode == ATTR_WDUMMY) - continue; - if (selected(x, y1)) - new.mode ^= ATTR_REVERSE; - if (i > 0 && ATTRCMP(base, new)) { - xdrawglyphfontspecs(specs, base, i, ox, y1); - specs += i; - numspecs -= i; - i = 0; - } - if (i == 0) { - ox = x; - base = new; - } - i++; - } - if (i > 0) - xdrawglyphfontspecs(specs, base, i, ox, y1); -} - -void -xfinishdraw(void) -{ - XCopyArea(xw.dpy, xw.buf, xw.win, dc.gc, 0, 0, win.w, - win.h, 0, 0); - XSetForeground(xw.dpy, dc.gc, - dc.col[IS_SET(MODE_REVERSE)? - defaultfg : defaultbg].pixel); -} - -void -xximspot(int x, int y) -{ - if (xw.ime.xic == NULL) - return; - - xw.ime.spot.x = borderpx + x * win.cw; - xw.ime.spot.y = borderpx + (y + 1) * win.ch; - - XSetICValues(xw.ime.xic, XNPreeditAttributes, xw.ime.spotlist, NULL); -} - -void -expose(XEvent *ev) -{ - redraw(); -} - -void -visibility(XEvent *ev) -{ - XVisibilityEvent *e = &ev->xvisibility; - - MODBIT(win.mode, e->state != VisibilityFullyObscured, MODE_VISIBLE); -} - -void -unmap(XEvent *ev) -{ - win.mode &= ~MODE_VISIBLE; -} - -void -xsetpointermotion(int set) -{ - MODBIT(xw.attrs.event_mask, set, PointerMotionMask); - XChangeWindowAttributes(xw.dpy, xw.win, CWEventMask, &xw.attrs); -} - -void -xsetmode(int set, unsigned int flags) -{ - int mode = win.mode; - MODBIT(win.mode, set, flags); - if ((win.mode & MODE_REVERSE) != (mode & MODE_REVERSE)) - redraw(); -} - -int -xsetcursor(int cursor) -{ - if (!BETWEEN(cursor, 0, 7)) /* 7: st extension */ - return 1; - win.cursor = cursor; - return 0; -} - -void -xseturgency(int add) -{ - XWMHints *h = XGetWMHints(xw.dpy, xw.win); - - MODBIT(h->flags, add, XUrgencyHint); - XSetWMHints(xw.dpy, xw.win, h); - XFree(h); -} - -void -xbell(void) -{ - if (!(IS_SET(MODE_FOCUSED))) - xseturgency(1); - if (bellvolume) - XkbBell(xw.dpy, xw.win, bellvolume, (Atom)NULL); -} - -void -focus(XEvent *ev) -{ - XFocusChangeEvent *e = &ev->xfocus; - - if (e->mode == NotifyGrab) - return; - - if (ev->type == FocusIn) { - if (xw.ime.xic) - XSetICFocus(xw.ime.xic); - win.mode |= MODE_FOCUSED; - xseturgency(0); - if (IS_SET(MODE_FOCUS)) - ttywrite("\033[I", 3, 0); - } else { - if (xw.ime.xic) - XUnsetICFocus(xw.ime.xic); - win.mode &= ~MODE_FOCUSED; - if (IS_SET(MODE_FOCUS)) - ttywrite("\033[O", 3, 0); - } -} - -int -match(uint mask, uint state) -{ - return mask == XK_ANY_MOD || mask == (state & ~ignoremod); -} - -char* -kmap(KeySym k, uint state) -{ - Key *kp; - int i; - - /* Check for mapped keys out of X11 function keys. */ - for (i = 0; i < LEN(mappedkeys); i++) { - if (mappedkeys[i] == k) - break; - } - if (i == LEN(mappedkeys)) { - if ((k & 0xFFFF) < 0xFD00) - return NULL; - } - - for (kp = key; kp < key + LEN(key); kp++) { - if (kp->k != k) - continue; - - if (!match(kp->mask, state)) - continue; - - if (IS_SET(MODE_APPKEYPAD) ? kp->appkey < 0 : kp->appkey > 0) - continue; - if (IS_SET(MODE_NUMLOCK) && kp->appkey == 2) - continue; - - if (IS_SET(MODE_APPCURSOR) ? kp->appcursor < 0 : kp->appcursor > 0) - continue; - - return kp->s; - } - - return NULL; -} - -void -kpress(XEvent *ev) -{ - XKeyEvent *e = &ev->xkey; - KeySym ksym; - char buf[64], *customkey; - int len; - Rune c; - Status status; - Shortcut *bp; - - if (IS_SET(MODE_KBDLOCK)) - return; - - if (xw.ime.xic) - len = XmbLookupString(xw.ime.xic, e, buf, sizeof buf, &ksym, &status); - else - len = XLookupString(e, buf, sizeof buf, &ksym, NULL); - /* 1. shortcuts */ - for (bp = shortcuts; bp < shortcuts + LEN(shortcuts); bp++) { - if (ksym == bp->keysym && match(bp->mod, e->state)) { - if (bp -> func != autocomplete) - autocomplete ((const Arg []) { ACMPL_DEACTIVATE }); - bp->func(&(bp->arg)); - return; - } - } - - autocomplete ((const Arg []) { ACMPL_DEACTIVATE }); - - /* 2. custom keys from config.h */ - if ((customkey = kmap(ksym, e->state))) { - ttywrite(customkey, strlen(customkey), 1); - return; - } - - /* 3. composed string from input method */ - if (len == 0) - return; - if (len == 1 && e->state & Mod1Mask) { - if (IS_SET(MODE_8BIT)) { - if (*buf < 0177) { - c = *buf | 0x80; - len = utf8encode(c, buf); - } - } else { - buf[1] = buf[0]; - buf[0] = '\033'; - len = 2; - } - } - ttywrite(buf, len, 1); -} - -void -cmessage(XEvent *e) -{ - /* - * See xembed specs - * http://standards.freedesktop.org/xembed-spec/xembed-spec-latest.html - */ - if (e->xclient.message_type == xw.xembed && e->xclient.format == 32) { - if (e->xclient.data.l[1] == XEMBED_FOCUS_IN) { - win.mode |= MODE_FOCUSED; - xseturgency(0); - } else if (e->xclient.data.l[1] == XEMBED_FOCUS_OUT) { - win.mode &= ~MODE_FOCUSED; - } - } else if (e->xclient.data.l[0] == xw.wmdeletewin) { - ttyhangup(); - exit(0); - } -} - -void -resize(XEvent *e) -{ - if (e->xconfigure.width == win.w && e->xconfigure.height == win.h) - return; - - cresize(e->xconfigure.width, e->xconfigure.height); -} - -void -run(void) -{ - XEvent ev; - int w = win.w, h = win.h; - fd_set rfd; - int xfd = XConnectionNumber(xw.dpy), ttyfd, xev, drawing; - struct timespec seltv, *tv, now, lastblink, trigger; - double timeout; - - /* Waiting for window mapping */ - do { - XNextEvent(xw.dpy, &ev); - /* - * This XFilterEvent call is required because of XOpenIM. It - * does filter out the key event and some client message for - * the input method too. - */ - if (XFilterEvent(&ev, None)) - continue; - if (ev.type == ConfigureNotify) { - w = ev.xconfigure.width; - h = ev.xconfigure.height; - } - } while (ev.type != MapNotify); - - ttyfd = ttynew(opt_line, shell, opt_io, opt_cmd); - cresize(w, h); - - for (timeout = -1, drawing = 0, lastblink = (struct timespec){0};;) { - FD_ZERO(&rfd); - FD_SET(ttyfd, &rfd); - FD_SET(xfd, &rfd); - - if (XPending(xw.dpy)) - timeout = 0; /* existing events might not set xfd */ - - seltv.tv_sec = timeout / 1E3; - seltv.tv_nsec = 1E6 * (timeout - 1E3 * seltv.tv_sec); - tv = timeout >= 0 ? &seltv : NULL; - - if (pselect(MAX(xfd, ttyfd)+1, &rfd, NULL, NULL, tv, NULL) < 0) { - if (errno == EINTR) - continue; - die("select failed: %s\n", strerror(errno)); - } - clock_gettime(CLOCK_MONOTONIC, &now); - - if (FD_ISSET(ttyfd, &rfd)) - ttyread(); - - xev = 0; - while (XPending(xw.dpy)) { - xev = 1; - XNextEvent(xw.dpy, &ev); - if (XFilterEvent(&ev, None)) - continue; - if (handler[ev.type]) - (handler[ev.type])(&ev); - } - - /* - * To reduce flicker and tearing, when new content or event - * triggers drawing, we first wait a bit to ensure we got - * everything, and if nothing new arrives - we draw. - * We start with trying to wait minlatency ms. If more content - * arrives sooner, we retry with shorter and shorter periods, - * and eventually draw even without idle after maxlatency ms. - * Typically this results in low latency while interacting, - * maximum latency intervals during `cat huge.txt`, and perfect - * sync with periodic updates from animations/key-repeats/etc. - */ - if (FD_ISSET(ttyfd, &rfd) || xev) { - if (!drawing) { - trigger = now; - drawing = 1; - } - timeout = (maxlatency - TIMEDIFF(now, trigger)) \ - / maxlatency * minlatency; - if (timeout > 0) - continue; /* we have time, try to find idle */ - } - - /* idle detected or maxlatency exhausted -> draw */ - timeout = -1; - if (blinktimeout && tattrset(ATTR_BLINK)) { - timeout = blinktimeout - TIMEDIFF(now, lastblink); - if (timeout <= 0) { - if (-timeout > blinktimeout) /* start visible */ - win.mode |= MODE_BLINK; - win.mode ^= MODE_BLINK; - tsetdirtattr(ATTR_BLINK); - lastblink = now; - timeout = blinktimeout; - } - } - - draw(); - XFlush(xw.dpy); - drawing = 0; - } -} - -void -usage(void) -{ - die("usage: %s [-aiv] [-c class] [-f font] [-g geometry]" - " [-n name] [-o file]\n" - " [-T title] [-t title] [-w windowid]" - " [[-e] command [args ...]]\n" - " %s [-aiv] [-c class] [-f font] [-g geometry]" - " [-n name] [-o file]\n" - " [-T title] [-t title] [-w windowid] -l line" - " [stty_args ...]\n", argv0, argv0); -} - -int -main(int argc, char *argv[]) -{ - xw.l = xw.t = 0; - xw.isfixed = False; - xsetcursor(cursorshape); - - ARGBEGIN { - case 'a': - allowaltscreen = 0; - break; - case 'A': - opt_alpha = EARGF(usage()); - break; - case 'c': - opt_class = EARGF(usage()); - break; - case 'e': - if (argc > 0) - --argc, ++argv; - goto run; - case 'f': - opt_font = EARGF(usage()); - break; - case 'g': - xw.gm = XParseGeometry(EARGF(usage()), - &xw.l, &xw.t, &cols, &rows); - break; - case 'i': - xw.isfixed = 1; - break; - case 'o': - opt_io = EARGF(usage()); - break; - case 'l': - opt_line = EARGF(usage()); - break; - case 'n': - opt_name = EARGF(usage()); - break; - case 't': - case 'T': - opt_title = EARGF(usage()); - break; - case 'w': - opt_embed = EARGF(usage()); - break; - case 'v': - die("%s " VERSION "\n", argv0); - break; - default: - usage(); - } ARGEND; - -run: - if (argc > 0) /* eat all remaining arguments */ - opt_cmd = argv; - - if (!opt_title) - opt_title = (opt_line || !opt_cmd) ? "st" : opt_cmd[0]; - - setlocale(LC_CTYPE, ""); - XSetLocaleModifiers(""); - cols = MAX(cols, 1); - rows = MAX(rows, 1); - tnew(cols, rows); - xinit(cols, rows); - xsetenv(); - selinit(); - run(); - - return 0; -} diff --git a/st/x.o b/st/x.o index 0e92ad99f5c6bfe7cdd7175ae5407ec9a715359b..4ea1fbdd00182b5379eadeafeeec4cc755685b0c 100644 GIT binary patch literal 76568 zcmeIb3wRaP)%ZOpi5f2E9F;06>Oq4BMGO!i0n{9F0uv1oA(kj8gj`4@weIoc6}K z>1P~*S9M1>{s50n=k=y-^UrVl)&8^bvVAN5?f#^3ZusAlb9X6i7-=ge-X6UsDJBwV zR5ZHV=c$u+y59R;_earjDEwW!5|8%wMiSP)`|+*4y=mY1Z))}5+uH6%KZti5l{K9x zY9v9}ZRm}ht;4kb2T<-|C2U6YcHXa<%IN@|(e3f=sHW_~MJhe-YuEc?fP{B~itBZ` z+EEW<_DqR`fICxVw)TieFlJ{;Z*Q*)=`6XVUD?{*+3v3YU^i;n6;6yp8FyEGqH;K% zH?2*KzyBCGQ{*%EFT3Ir$6|nXp6i7Zlh^^?+QiWY4}!wvAj-l?YRte$>2AUGdl9wm zJQXdi^+YS37Cz0RWMy<&#nCSM=?M-ug&i)u;UVgY+(Capi{1(-8KeoR2JvjPr z{1E@f}U0 z(tXdWy5=1i-@(am(8*^fj&z%{!3JHA2JuH%_jkR$>pw>S7MJ!8A6~qESA2Xil(G6V z63>QrKZx}d)PEB49v%Nx$m^iGuuoOGU}PMrZ+kP&_5IWP#M|b2-tcJqQ1?rr z#i1XDE)3Ug>rb-RR(t8C05%}s3W9`?m;|#09sA& zXZ|Cy6Gy|}aN-#Fo12&nf0rhvbZt?>vG7+3Q`#BvkZ?FLMMnrXrn-$a!Law0nfr!T zfBjbwuW@bSD69==MPoMP*!P&*cz)3JhI_L?O`s6dov^*wn>`YakUpFxfcipZ1B6C* z`M^`7{P*Q19_dCQPXV_Pa|VioZrTBVeKMGbSMjcQz<=L@xMD9m@yO!!UpjG-r;F2` z@z*bb9FkX5#{{V=@9oUs{ZAA;;VQPr_J*PPT{mmPa1lFYQ) z_{e!#O}UA_G-c1#=Vf`%&-32NYI_HKq^vowF(v6BhejTzDm^DHa(aC2KQg^{ydB-6 zGSjXaS=*v74)bgoCOQ848}YO;1L_>qB)9R(WYxc9dE0eA zFSKlSQ#dg@+j~RBahoEE>HRWU z-VUA1G?iC>)A49ofx3WBGtSjj-}QE6dmou~%Jnh_lZ&Q8?s_5hgLQFt7!?5l9BvJ_5L-P-6Ob<0-}gRM%`7q@ec#Tw$l=sj{0(!VO^5bv z_eD-16d47k2S$Kd-DNJZ+Ka)e!0o_%k;OP5p3~dwZEJf!{%1dXwRl(o2C;mEJT= zZ#kxy{C$pFnz+0eGJawV^vR$e$}d-}D#;Hd2l5gk-R58Q4={ zZA^kO84jnz7^n=ulABl@_R10`gw$jl9SXhtr`Y8hO5q# z=e#FF-fr(1J-mAF;>}E;^EY2W(YA%Wt`Ic3#*{=?)gl#i;#cbCC<$(ka9*p13N=C1 z_ha6-gLQ>od&7s3iEg8_?g^jk#k$_hgG#;Lrwz4(^xNNccc{C({+rd18sS1}IO?B1 z9bA2lcA(7bn=eD=zgFYUew~`PL${%Z5B>GWLMhO6>?3phe1DKzA((cJfyUY|2D1?t zC#$bx_w4N)(3rf8pbC2y!=SZ}RH+P@0%6q0zCRe(4*Ju>xiU7efY+vNHnY4dBMEeY z9jlI+63*qi$(Q&@rUaXHbf= zj5y_Oa3hpD4)g7YT^Rvv1FmjH4;%;QY98EgUe_B?f&Xo#_0NLzu8dKp(&GnF`WFzRTd9ESeOsL6 zzk2(+bIE(E-UkP>31TDN&>16hHq) zr}z_T`2)MHaat)({q&VnBmz)DND1bGnT~r3wYw!9smMt|WRo#^9yEY;o zSbta>RH5TP^#`B=ed<3#d5w=cy6#~flkq2MG~sY_m?dv z0Tl%9EY?(TB(;F_kfIiqyf=(&Mi=@XQEdXheb!70wJ^mIIEXGL4%yo@o% z`Dpg=QSPqTI*8_-AN0;2?JY|57LC#Ktk_7{T|dGHGj1IZhYXbkFJq*(A^K+WR=A;Z zqF)6fKiGPhItxZdM8EPK+Zx?_Alf?2%W&0z4aMie9TL>SoJE6sbFdjebbF9nHQ5)?;*AC=*8-9yZ;qcGqxDr z-RAA@?d^V4xwn5O7d=oc<5+hm(!7q^@LeFxS5^Kt;m7^zF zEp`xpb&XZRDu<4f&P{r7;jDre22s&{mD^P3+vyyRbF%SYJv>AM&w_vHVVkuhD9qanO?&^gwUFwH|A^laO>u{Ku3>t761Pty`HR)dj zlgz=ZQS{1Gr`8X1vLrWcTO{6vwiAhgiVj0$4NL~QKUeeUREXa>>|L0J!(!U&ou}d1 zws2!cPUDE^mxo3!XuLAlJJ7VcH~QUh|MllWEr@;zON{5kiKlLmJT*VjvsQ2a`uA{g zMO7v3$moH?{5O<=bW?VGUDuBx&$P^^S6bCw^8THHb+D9B{|1D@qDr8DQKkMVK)Ux$ z-?s}EF{(h5>Pz))jMo-z^+gYij0_8Vk3aWT!`G1yO{>@*knlJB6I9(Fgg<0hTP&;u zr8`dT3A3A08h|@qPjqiwD7rU3G^{oHZXo3A3H#a_dj0k2-_W`*RoAmO+FFkNPENS# zJYN_V;2sHUB^P``fp!@2-jS<{wqBCZ@dCn zv@Hns!vb;USi^qry?*N-#`@WH4#*B>gi4VL0_3oCd%Ny{q{*s7;B=AOcv4><>+Pib zK0QfX(yl6B2~<9uKb!CU{5%C&_AE7fzsds+Hfxt_#a!Id1ftbf-4X^`Hxe zcrGTb?Z-2-4|U<$Mq@^*o7NGT;c90`E{6{Lq(~Lq%_PBE@@REOqkBE5Rk|<2Tcf?G zD!RQy-5DMN7tjyDa0v}5ougjn(*q877C{iYABRNMH$lSb7$pzOzq{FDVB;dlscJ&1 zWx{%|zDV0vJ4bbbx!`-g-+|{3umIR^K+c7nG;~vgq}p{1L>_$d(iKF#bnlZ0vBikd z1*1VPJfija>o-Cu*7fMQ!y*&NyZA)(5S2|DvA0Fv{8o1YxOg@P@(hnnb(`&%9WXY| z>VfAI%CW&nhxQH*_5Gb;_XC5{E$w}`*6~nryf4CyD|15Y-^S-1VP4VS{f3%dosU5I z<~{(hz!~}n7IG;1D){vE&UAnwZ#$kI4yWEOuPf}m4{=n^8a}K&3iCntpgL;zF1K+B zuT;aV^|j8|A!heK(LwuFZbr8{PUO&ib8~zVzw&)&Ho6)e(%B4)8Qq`r!!#KBy)PQ) z=0vZ_J!JLp#>Kh4i7$Y4PDl;x-KWA4y3y_v;Rv;=`)D{qUb++D2y^Z3L*WRy3GII& zGy<8ELCV*M1a&`9N-3 zMqKUN;l`RVnea^ZKIH*$7|gSF`$B0uYai|YgWGgvpm$NcYVh5Ms7`_>6}ll~c{En$ zHf4gVhp+Z~ZCjyCdY@|@s~j`HJsIGh6I7i;@4pXn(QkdVut*v?Li=2eP|Lpre|_91 z77JqCd(qXp-t$Bq%aqo4wXC@^p=u&Tu{1!KWvSLrx?EV2&~wiL{Rk@QziAhl#N?mb zJ8bYwo}}9!WD|F2ed@ndP0l`r<-X8EPn!gFa; zQ>%Lh$!Il?nrci1A^*>|!{d^-Kl4{Ai~L8ZL$SYdOrrmY6CgS0Bwz3BdX?u9_u<*D zu=l3-k;+xqAy6N5qfhrY3p z&|j7%mgvf#tQYC>8G|ue&IoJx-?^SpG zmFi9w$_NIRI!IIv>2>inUJdMXqu=(zv;Otp_I~5P z?)M-SZXAcQnclnbU^Xt(doKi2CTQ%?jbW44`8jIcm7|@jCzvLex--wH{iyNEcxdFE zZ~sdf{5rPR=TWxq`Aq1R4~5g1$fKDJZ$~Ei@69;2wezt0*4q1_+k)HFS0blk2`NLx zVBCdM%ym~D>-cYN?S2y1%5WGw5+HN~kz;WpK9U}a!dzRa==vP0bZFm>_{bZ&P~##& z|GjWqG3%Ph)BcBBN3Me#dw7JZrBw-RRpA@LiDP$y-0|SGkyuT;H@D*y)@@uJ9MJCg zVK0o-N&Vvp%^Tt|x8B*98F0a&-c&pb>j8-#bA+1mzVY__DzyJguU!vzx@%|(ee!;k^J)_8!k1zdP);wsoEq_O(89Krc(c6T$Icdbg57EqnJ8djDQ(Xv#;*Y?+KY;oL51B$ubI*mU9r9=GYCCW!1gc`o@?L;9 zi=KNY)HDY|_d)1R2!&b(4}CvzpL-MMit*Skla+cnNyU?F-S*%TZh<@#@tZa zzOX-gA87P}p3&Xsxn8I1y{})0z+NZ^XLRrTVk^Ece2(!nQ@yD&+ZO|{0mY3;Q=Sp~bYhm~z#jyI~Kbay{28!ip!;|=EJ&$bodk6xaZ&fssEzgYWeq5|I#+NQ2jiLbSSfN(4ghOv-V{BXYc5m0y>qA z2S0GvZ#_Uc=}e%JkjqnYw=b`a*RJS3Tt)5vB=iu94YU`g+5?{`!73wnI#?^*f_kby zaXXYZpx3<*1bREVTcE0`qnH)+Ci2JVgq+YbkPyA2QakDdL4UeYt*&<^l7952$N9W2i)Z1i<%9Uf z)wAF=n=AEWx%hU~Z|gp{q4nysqMh_kio3~tBc>7Va#TmHY-jOnp3(i650vS%{V?Iv zXCL;Ry#;5O`Oo|p$Fi0OVS&Qv08vLyc4p zp+Thk8G0V0X6-s8+U|2_o`9*;OvlwYe93j>h)^hXwRwS=Hshj2y=>d?#`J2kQWNUx&QURnENn#BacienWXA#R*L_Xf-`N zV35U(9N&MVKps?&SsRKW;$Y+Sjt7E}n7;SLS7p_j_`wC)2=jTJmePu*OzJlU5>_SS z`ojlYJ*C0=*!kRBu&x8@!DLl3*p(U$$<)|44bhU}rf^PNSf>cnnsKN^7er=Lb{ImG z?=`tC5IM^&&0ns1 zH77?0`KfO<)pSQ9E|%YqUAA_)_c6Re4c$QUpfj`nUJIYGYa?LXhf3lbP>=dU$rb(0 z$!&zk2!53lI*5yH>W0oAzswS&hlI}ipi>znfrEUfK>w12xHP}E;1sOuunnyb zoP^o(hdK9f3*8J^SC8lWd+M%yoL9h2K1}ikywL*lsNAk!_RSMOm($e>m%IRqKsBJj z-PCmiOpesTRYPyxx%eGHnre{MQ?N}@7X!DZslzrLYFv%j5Mx{&zQLy&s{SGc6qVxR zSXkSC-Ay|I4X8O(E$cuVdb2a;X;}K$rjvX&@}7EM3`TnWqTu(mSlu(gl1dybsl<&| z33lIR-mJkx!;tqae1rmbA){SyWFowsn%!8KSd|SoA$4xs`#}r|WP5Mni>_gKbrojG zBf~IhLmRzq-kxYr5MI8|+~dFR6|gJlZiR8T7aMNY*zK@h;tqQq?x4WqBeT8lI%mAh zuY=vT&fm}r-3GpA9w=V_R#Oa&0#`*J57Kf5E_a!sXHAQXIO`daGsf@zy6PqzwZ%;n-xe2 zUU@ZUrjQgQ1NRep0VBp=e;UYW+oJ~#_20N2bi#99|BcvrMGwSWeHjfCP4j&8cCaqf zXjcp@9*6vQb?6yR=zd(-P|F`?ht!2D(BESu`LgRma8E<)nxw8KkjLj|4fSwhx(;qo z-NR!~Mc=_`R@>V_cylg$*t-XnDn5lA?T+0A<*F9AJ6G<3cLk?{IvRiAy*vM1kLqkd z9{hKysQ_hT>)_eghrU*QkJmN858gIV_5%9=5^=&!>CmQO8OZbl#clK7_2l3Qhnw8q zkZM0e#|<@I=o?^l^nG|LXN_+yL7yl=wEm#fp^XoCm=5g`rf<--sUAhWe6AlV;Y^TL z%;1TznR#d*_~J)uyL!Q8kiM9wVEF#apuzkEyn8EjLI0nouN#i9b~rVfz3N^o{xSz< zWU7AT(827gIe*j;4xVuIDFZhp9n|~nhp(EvQHkD@@M8bSY^@|)b%zBzRpV|NbC|b# zd=GSXpTJ^7w)fA@)W=~dDeYVT4YQ$8VVMEuKsQW>Q&#qW9^rZTnvwyAxhd$oy1W zF{$UaV6AR~{pqT1G}?RE>Ji$0WtK9AhP}wiI(_`e&X&HO2{t?nW%VpS!UXr^gy4yd z_gViGaImvSa1hb@Sr?iy{tSEn&Z0EGyM&*aN@r=$5;QXzkWYN zT=&(Pk(06-kM`d?+gA_wE=yza)^ea6Wqp3v@J3` z+>{SXMLXhQ<@3-TwAchDP*yM-*-f?3$18Dv!&GPm-RFM4o`<&|q^JAdhDWa+g=wKS zY@LT?>tf~A9)JBxFjY^*(NyKr{`s@MmxILw^b4#d=;GEDs$ri$+@rOrSenw^-`yYK zJ%L&i&@<=|`oVk^M2}?rfW0s6&cDBhGxqOu*bD6kWwh%t=uu!14%~dMa`RQ-=H3Br zzSW2|=+pX`^G1{P8aO}yaB#t}vw50K;pE2RgiDxBGnmi?C>a^*pX)|Wd zI{Tb+(?hc}!kKgCx>@I)pFMB>f}9H$F3P>|hl}$rx_HUbODbf;oT)FnDtDT?2V2vAAf&m+GYdA&Va6N_@8bthq!YTeQNlu2d zJ+^R%;#tEHHS<4WPBOU@&8PMG8|`5xcy~_ z@TUJTobCJT5b^IEBK)o)!dr$2|KB0P|29PU-9v=mGer2`hX}uSi17P{2;VwH`29nK zFQjm;FS=Ir|K;%bel*~W!-ox^{TCcA+Yd`{xElKz8b=O?A9xvb<8b|4`d|?bm-V0f ze``27BzFk^aJbDs9B%Uuhui$a;WqzpxXnKtZu1X^+x%k=8 z{^4+&e>mLc9}c(qhr@0Dv4)d>77gJa4!8M-!)^ZIaGQTP+~yw+xA}*|ZT{hKn}4j~ z0cRNhRgWUJ{ezzbNpTsl=?Zo zEnLRuYj&`VFT?qo^-KF?d>PL1<5`ds7Do=Zm2VEkXMKIqiCe=d0*6ccxc|3?Q~br0 zj?MqJaJHAj`I_x#x7fm2p2H8apA=nav5(W?aMs71j~s5(|HC2lbGS`Ehuic&%#L7# z#F4{o`Z-*d53AwubOz$c;kNq6;Xx6PFCQ7geh#US%eEox=Wv_-9B#9p!_zrIapZ8D{o97HkHc;D zak$Ms4!7CI;Wqo)hp>;sZT4}v%{~sd*~j5F`?e2ZABWrQ<8YgO9B#9Z!)^BM7{Wdd zx7o+xHv2f-W*>*!?AtkneH?DHkHc;Dak$Ms4!7C2YY6)|+-4t#+w9|Tn|&N^vv2nh z_Hnq)J`T6p$Kf{nINWC6qeIxo;Wqm?+-4t#+w9|Tn|+TBVc+9Jgg-Gv_>)6~KQ%=7 z(?f)J3=#g!5aG`b5&ql|;m;2d{=yL9FAfp@&mqG13=#g)5aBNm5&p^$;r|*U{M8}C zUmGI)^&!Id4iV1t+Eo@gZddu1aBi2jaMo`N=lgn|$2)!7x^wZA!+9Rw7woKi#0=;A zp#E@u#_=;`09|wV4~Gc9$P&)^FR=KB^*er?W+0ry>jY}!@CkIy2Tqs6PvZbO;w!(narjJq+4mQJ`35%* zzeHd5{pIHa9KNJ4M4xcI=5X~oiy^~)N5ryt&iTf3-Z(FKEyK~zYzxbqawu==H)Ze~ z<9}Z`#y8U+EdKX}kA?_2u;Y86XgnUDd?Nc?GykX)ga4B)BReZ+_JYvDuv1WyUtLoa zacTe9WMY*Beepz+3Y|e$**^4q3W@gTJF3g>ix@=MI!mRmoovP}hqQcThC=#hI zT~Qk;s&Q%}&bXRj^2F4MQ{h*R#+B7N+7QqW?mQ3vOqw~_g#+&B)dh8M5`rV{)o?x= zj<`qQ93m~i{cPMrg%=fe)_@iYa4r)kk?cs^O5rceF8A4JfH6n&Vg57YEvx;~`h;bQ0b!<}oKNFhw6y;IIIj7`Rm*rs~5q zeVC#S%EC!hKj6sMs{G*^i*m`N>H4oO-AU6)YWhqqHJzkVl~gK8rIJ)CNu`ohnvzN* zsWg&GBdIhkHJSPlEj2k=OTkgs%Vd&LUCd<2AnJspu8EUK3QA3J`b$z=U#F1N6p~W4 ze{u>*rI4-^l1f3TV_{6GE-IV?{YX(!#S~{v5p;m7r$B#FTQu1z&tD0hX8shXU`;** zVqY^g8RfM&Njs-ZEtpzRT+HH1+F4yv8Yyy4nLK6kw8_(*Q;G}lKRBul@^h17sWpHItWqDDgdJSGx1S|5(i}0*6SPcF2 zCBuV#+mbVLgOSn*KnRZXpRNwBR^5MTAp|Tr6M_pW%gggC3WH1Xt5?qE)38E8$WP zc*<3Jhyl;$Eh>s+&HG_K6lBeeU`F4V10!=VZ+>{-SP273UPg6MexxWX!xS!1EU3my z@K!~ns4fDsxLsIL0rsS-n;%Vb*P6G)S2Dsq-A{e959W(mI{<9~g%z)`dX?|I0e$CmD>e`|i z`L&VClG2KZx>Cl%A9QT6I)8Pr3aVCWu%aw@W>G;&W$?^W$P>&e&Mc^jR93ABPDxEk zPUcAeJ^t4N|MkGX<$?e7zTw|e{$HX0df>kv_^${4>w*7z;J+UD|D^|l{kckq&)(pf zKzh2R-o02wZ#nh=&r@$gLuH^<{$2Hlx^Dl&7 zIP|q5<9U*guK9gQ{QM9%-xUiTUtPd={K&)N@mC@Oz|^m`!4dx{E!>dtJxY=ynuY1y zWO>AnFyzYUe5}FN(K)XNV;cD5ZMYq)5Ad&~I?io$UW&(XLLjCvA$|g!w&FEx)%a&l zLg2cXP{QbFY&anpvvhdE=uko+ln@^pF*hN;eJ8F(_n;hXf5Ja=6FPh`wP7p z6Gq<f$$5|Tg!L?Oy-G%g#WHF1qLO- zsrr{p;i$^lj311dYxrIHwUBf`qtZTtT&2S4TH+_*5%Sc8{@EBCN(f#T2Tq6{5>Cj8 zo#h*zkOT;dRr@0}0_&jqjRZJ8NpUw~xnGBIqjBMck^W&JOlJ#Nj(pO{LZ7Y#xy5T*m8^yilZ^%gypeE`4URzBvj2w zs0$^m^OYwo&sKE~L{Q&yic<*Z=)X%zA6~Deuw2T+_tuZ9m{LoL#>V>+>gGV&a}qYd z-VFOD-|U3VzS4v$Wy9NMo|N5{%8C@U3F{_o%g_e19CKo)`x5d(3CmX|2%6OJTQ=pZe<7I$zAqhN_Fn-U6^aW-(lZ!1zny0(4;Cb2I7rC7e6+ z69QGrYLJ9Bf%WGh3cm@%2d_WLF+~SeALWw+6c_stESKd}E~s}DJ^EZWuvM~<54+GOo_y+Q<-b&V zfO;mV)#blRl|T9*m%_rb{DZMGecZW#9Oh{q$)14a0eSkKHZV6~Z>;jqJrw73h~iwF z5SR}sV_SQIxT+7TPR9HcjY6MxQW&P`EKUgKk*^(k(5vzReR~P<(Zr8Jc_nrM?K$GHicV`IC03Ae>&CbY!PN!SY2t~GXU!frTr#6l;x zIW}e$gwBP~nAIq}0fn>h@+-6WAt(Uq_flF}aE@Cd?4J{>L2#b#$AUS-X{d}@2nFr9 z5HtpShug2Q|M>p02`5y=u8$pT#DS<-HYKEM9h`$d)9a|cVOYH-EC^wnDXb9Aq1>P| zhhZQ%Hz8?mLh=<*CNALZB=Zini|?sJXy*nP8U`6>LnD$vSAZr)9;OH7Zl+fUO_a=5 zbzv6Cs%QT>Feib*5%ZHvJd1R!rbt+Sswhmo&rqnxQ!J+q#E-@}u%VutiSbx;8R@|~ zyp_U^rFJuT9~IV}DJryV=(0HHlR@7eiFGja;4QZA?Tdk7v1-;ikYV=&bI?A>b4mPO z#s~77DFl6w8_pL|p5>SyLtOQhaL)V$;{5&v&o?m~^#>{G(R4h6Yroj=@ zZKCUVI?f{gbGqg^DPG1p)TvMy9)?3i)N?1XQaa9tBigfSZ}{7&L({t9dv>}Y2? z={W$`xUGO4^&f-v4K_8Wh2!P0qrB>K;hchB{z&5HKRZ-8sm|928p z^ITvzE4dMUdMTRoJCa|hCZ>9hjA3^WzlAs*oV$tNK>+iQ8{XJqx^aGWsr-v)j}b5a zf##|W!s$!I&nI~`cLnwq>^`GiEQf2{K7$?gmr%u2^HpH@Sr__Y9UO6E|BQfofV@uQ zK92wHHNK6+aun>01&;csV&?*zn%ly0Jn`R={mWH+7{B0%`csv3f4XVJO9am#Jw9xJ zuodcqlTEycxSGR4*bj-{PYs3rmQVb1;%dGL^5wwMo96LGHBzau{5BoKm))4!c~G4bbhu=*Q& zP-!{N-$5Sh$!6@hVB4$y!hJ034{D(1k8t`Z@jnvh{_k1hdx&T1XwJWgpD}xL^<^y@m*KjonbsRc4=MYaJ!1ZSiaLm^RQUDgHZ2`&eCV5W(BH{;# zvp+8-JxLUw>p%WR5$dlZ&ia2udj6Lx?3pxVttNTy2U&hS@f@M&$Hdt_mJh-S){}Z_ zFKo|EN*?Nu;HWm%8BW^!55EHW{*|VFehYC3Nn zrwjfdaaZs*;_M#|-lh16gKC`a??)VD=W`$*;K;^tkA?5Ga9qKpebTt3q+@-r=bo`o-0`eU7DQGYJ8$X`zK8-@Hj zi+q!XZ?^Cj3vaXV7cBf;3;)u>4~GUdSb2@H@UtvD-NG-h@TC@BWZ{=v_%#;3$-@6? z;kec_m>=3L{Amk+#lqjPaH!&gruzd6$A5ThFgvGO_$&)wVBtTs@JlSb)WR>faQt<* z!R*KR_+b3c7XA+l-(lg;TKKyb-eciM!1#6qj4+$2AK-rJIN*cXf4YUwwD3#|KhMHf zSa`LCud(oJE&S&eev5_QY2o);_;w5Lu<(~H{0$55w(xH)d<3jr4OWh$EIiS|CtLWr z7Ji9wHE$k3*ThnzqjyvEc_7*f5O6_v+!3e{A~;Wz``H4^uu3RN@$-qRbzF!u4)|d8ZL)>Wu<%tdAH#m>CNVz=S>#;{ zztF-9Eqs-QueR_F7Jj3J-)iB1web5ae5ZxKVBv3B_!kx)3+rHmm80LnPqgrf7M^C| zVGBRc!j}QZdi&aBU177R-j)(SjTQiEh_5F8YvO9H9>Su)2g~n9;8+hgh zD_%$Xw^;PFTKLlzzL)ghBlN#-k^h3^Q)r>8knF)*$HDS7960)I6UnP*0T5>t@vCNN z1s>@M50QeEG3KfL=Gu&W!QrkGiW1UUH|7R%5F4--EF#Wzh`CcYvB0UQEr;(5S2^$@ic@qseDw!^tKoyhx>ERUU-k8(Q@7f|myK4G zmX$`r6xCH#))Zlak=knb1gKyQSXka? zVQG13MNLF~bOE3EC|fW^C%>kkv~*cjHGF!ZzWeM8sR6T#3YAs*L(Ss++OkOBH6%X? z(l0H?&pVwu{B)znsjP}D!*6`liTWPMDJU@J$SUZdy=VB=vwD#-_b!pEZOx~O~we6ocORhHn1`aa5ms;8`;jHygl$xl_us`DwS zDsdHcZM8Coc=W4yvvQMZg;T_Gl4*>9b&UMNzerH}@a} zj?{IxxVEgU2K)ns4>2nWGx4J!2R?$jJlQEMEy7QrGVlZ05PqCHAM3;bqP}s0uYYx= zT8V*SsN)OayIZC!6wQDSld~!ci|U*?1@tXdxVEaS6h09y0))X}xc&~R|2kAyh#~!P z2!QASHoFpQca5>^GD`=rwBpWkK88}Lz`llQ}XU03EqZ&Fm44Vmx%iq6Tqu%h~V9Ri*z zR~=lQs@IF4XEa@#13g<&b)*!E2>LGQ6IMbaE2@Jgod*@6Vr7y3mfiU1Ixh@OE>c7h z*Er=xccts7PKe= z7fz(KCci8K?HH6*R$LCY_jLi#Rl=yZ3dF3mzD=SykRxN@r$19+X z4!FY4_}~l8D$JBq3xy5?QDvcO{8&*l%5aRDQ$Q_=n*~&O)z9W(rOYXXK@s{UT~2(Z zn}YTtx`$(c*%i<*@ax1{=rSQA^Rd>c-Y9QQX&IE5zJNFtMXQ}E^Z|4-c{%#)My)Hq z(22l@n(8MI^5&G)!jAxeeR2UTp=qBRxJIrY_Jqw?2*dz3=uRduEsmzwSr z==61Q!BAMJy$16mEP_(}uob@-cJi>6VNZi?Ikyte`dWnU@UlQwk3eAXfN<1AS|Dig zJS7E#Bh+)8~*MW0NYf4mj9n6357b|ohlc7J{RrXa?LXQibg`S>Z zI_205@Psl}w*o%fcJfxOn2pEse3)Hg)mg3EBaW;2D{!2E7&tOuPQk`(bvm!Iu(Y_e zs2aK%tkWP;RB<^rQ8j(YQ$;qHzPtupQ3w;E{8dh*awQBOs+WLvO2qs{mA% zl|i>fXYkV-6%HhVnW1@?k|?c!>RXOuKFk|ys`3k<&r|lVR^Mw^R@FGGE2|3&!KQNP z?ZMQ`Bc+9qtGdU@+JLY!~=jUh4_4_W4a~g#+ zXFYU#s~%sY{uYu;7xJ6wdV%2g(DkK)ucPOF5y2m#YkZ#vH@1g)y~YRe8wG!muKzCh z2Xw9e2^=`bJQc$Z|2B%++9;gU?WF4`1b>^ZU!)`ISqVGqd6hWp;dI|44!4E+9e29^ zNXU;N|9nOq^_RfT`eP`Z^-rMdVS=-s1mdWt)X;N=kmr2idpo$Hyy+kO2i0)nbXh(m zINLK%aJFZmq2ILUQj2_nA%7X9&wjW}$aA{a8uF_Q`8FY6M%PaY&UU^eIP2dhc!aJ` zLC3&`ek+Ha?VLs&4;2Q-_cw6E`f#K=(|=q;PbDDMv&PVaY4Eoq>jd9I_FOMG=WC;( zANvy4|0m*bd+*>9RywUicyz>IGu>vvIo)3h>Gv9CiE%c24&tAwP@kcwKOA*PRB( zcNkgEw+6>FZsu~r3)t|0Ynd#M&%1HM6|V&`)9g^&la5hyg+a+uUz72&(*NA zJkZ1jOTlj;9o@IgECx*N^-hD@$ z?dN`YW~8*}c5M+tt97IX0V8g4A#qA#79f1(u^ZKE5dAd3^lP!u`~NaDI8*JV9{QbBe*u@wCF=XcOnFR&dVOTERJA z>xs*JH3@mP=Vu0wK)T%CUo*IA&pU#%Js$|p_IyHI+H(RxD(DSO0 zXFYEV&U(5GJwG<|d}8oMgOBjT1#Ik}I%=oK6UXiq!}xoqNkX2}okkq}vk`Xo=h;I3 zCelCKkT>mFW^i*JeyzdHd2gf8KL(A3?WdAcy1z8^G=Uu3dAq@HF!&=DJ=+a=a~`{w zIQk7;emv~BbsF+F!ZoMcE97S>X~#J%pij`Bru-=4sGp`RO7K`iz8MJXA8(OQCeG!~ z}+L%!LNzuDmCeE2UGez%1`LtOgvMMK{7&pzUqub&$B9C8F)z{YyU z>Pu%harE=gU}wLbD&)Cb&M@T7bk8R))4f>e$)I$X8G6iguQm8hhCRPA^y3;V+xaJ< zANxMs?lkoL9IjdZZXu8Ngt$Fuk>4TYS^txU{4XFr>wlg&*Q>QkyW{-J(1X6_^@J}h z@`vF~1#GN`<&O}Y?;}nSJR2jzcADTkub4ob>jSsb6yj*3>9=z%@^cJ%{1%Y?FyD|z zU9Du#a)V?4!1b!c&|{`sZIQpikT=u4){w_^d41_7gPZ-*&4wN`-9K66?=I%z6s>nZ=V@@(9UJBGY-i z4~V1fru@kk`3V;Jxy13dMAZquPA^aJB^o;w#JT?PxLIT9|24>RxnCvZ*U~)X7sNSV z*OLC<7>B%z1>Jf1k_^|!FI z{mDYUp6pCFxasEw#Id~4&l^ZS*U)eJd7UATdE@!>FAV)?6W5>L7}swY1XJe&9|!5`GoolFZ~OdRd`J?v~xzQO-s@U_IbpSh3pM~S0bP#5QSgQ2Iy z(9>$jo9*Ih;;jE6(*L}n$7~m08G0~X{9ORtVn^#E>OtN@+)teCIH&7c(p@OzSIo%XZuelj{e6!gVSA2oa@O;TCKCzkT>mY z7V>*Z{^u6?EyQI#`HSFeXN#f7^m99Lwv&=|9<%6q+R$URm#N3;m~2mw6wMTT4DpcQ z+>XiwXFYX-vwXAQr;+~O3Z6v#alu*tGlH|7GwDW&{qr8_SwI}i{dU;7+=~oumTxt2 z_7Ce{CphP8li+OUErPS2uZgprUyz-LlYq4I1mbKD>pw+s*1yEi(`@8-mBG#Ywi0K1 zddZ$$#5rBApHCQi%zE{@kpCCyi9JD|V7|&>Xa65dob|K3YsmlEkk2R1c51Eg&XUl> zc9t7@Ogrm@{M)3cLGTZV|HjZ``txCfn|8iH9PPyU*j5@Z{$=Pl$EkM>J%0gt_Rpsl zdEbfJFxJ19^dCwb{cMhF~P-XzX`h9I?d1@)2bWIZ1dM?GeH{7%TTo$+G_ z>R~(mg0ucn#HF3*2zmBfSa9~+b%vh5feD=7UkUj*pSJIA!ABC`Zt!$N&x;0MX7INR zj(PYTcHF)a{2Ps(5hv>t^m97wZ09isUvBU-3~uV5EI8-u9KqS1rNmLk-G=^^LY~{T zCph;He>U{sJsI1-l{mK-{=Ke$8uEWPJ1(|=ANj`kzxbh9jc z74aC5#W>tAZ6MBeE{8DOenXt?Vf#A`{pL7wz~E*-c1EJshiRI87IA6MMTY!+5Qp=1 zy^!bjveA&oy3g`IH~2LM|AWErH~8O${w)xO+arSCrm?eAaF%~kaBh#U3(k7p5uESq zM~%}7v440SCP{GYTXCC2JPytufSvs?L&&o|>4M*kN?@BSINLK%@XbmZep6NO6rT=Q zA~=`Va^h$wwk@`ErI6RZ69;oG!P##$f^Q*vt`MC2;q`*EJ=YOOd$3KgJId-Z0Pxiq38EPp6$O)aJGMk;Il~oV}|}~4gJqpu|x@&qoqRKR;sVPqxTUHRM|j`MCyfGkBTMvlPN`s}Ve`u~SE! z$9+Hf`5GZVi{$Hxqy5`pXaBrs$e(BMb5GL|QNG>a*#?gq{Kv$(y|dqLG~~A%^0ylD z`38U7;OPeMG4#|M`~Y$G1OMJ_OcDsehW4B5|3?_yoL8J-@Es6`{WF8O%-6YwyqT|g z7WsvSe5;}V5`&xd;YY-A{8IB+Gyt}(hW>20W;>nnDp=L?bc2sH_zHsu4Q}c=n>hMy zry(CUwF zN`*Y9TTOg8=*2kv+wHVe+rk+%>>G1OlVJ8u6Vj%)+$Z08d~K7zuq z#h;;%tY@vhbQTFt(>CW4!TG(oLczmi{}qBKQvbPL@GZnQ2+sa*B98fb5_ZnlCLz!1 z{y}iI^DerHgiKG2yx>JPyG6=_QwjuvCT(h6gGvqrAzR<$+ z432e;^%NT%ZQ^|W$l!&B{PhMm~2ks<$kgQI*9cHFiRNA?WtY|nEBf7akH3q4#9 z-?#9O4L#2pdcKhIR4(5Lo(pks3!JHsXy@~=vz;ds=lU>)^o*CB>f1y^&kKg0Swf!Y z&*urw`Y({2^#9P%|DvHkU&wR2E;i)@&guS- z;9QP(5Jx}nft~$)w~*)lYO5jtgdyK1*`Hiya4gGN z)Gi`|-$UtMDfo8c>jmFUe52s}yz-ZVb3M65@R4NCABbbWjdt>L)jNee*V}sq=XUyt z;Ow^@f^&I2EjZWz=ZT{&FTu|B|1}}c_r<=mKnOOjCv4AQf^$7QTyU=EqXcJrjwO!v zJOn%2bBd7X`|HVqv!3aOo|g?hAtBHI7T8>aoAqj;!O?=mPtAsrJ zr$%u0PlMoW=SIQV4?h!}?b$>e?fI8s&lZC}W$?cUJ+r9(|4neN=l2WF^|n=TwsV)@ zZ08fi(au*5d!7^WHTlhDI{?`os!;;|wHm=WH&jW(9{vQxWJ70&L>*vYD zdA^7Lz6EaMg&y`B|0D67F6*Ca=-&(RS%0C>e>Le}WzkhGEY( z;+)@lvgc8Yo~H~wC5E0CgnXFvye{-_B>t|D=X`Zr^nWVkvq{f4LjP}x$4&y{V3Xw% zPaMnLwBIk}b4ky!#MwW8CLR>>Z2vfm{s}^UDe0MJ=trA!h@UOwxju&l=XA4(qmDOW z=lZtD(4PSOA<}=bMb9!rkLjOMAzw&(HVV#m{!DPTbCaR}&xW19C(eH6@%na)o;wXa zrk#Hm@?~V_BSQa+#CHmLw)1g|{%3`Jg!JqYoac>i7<%3^^82BXXTN(?m&i3p@<*>~V zyi;SxHS}Zs{FwAF5c2GYT;gcES?()^JdTmL)d~G`N&i)bo=TA8{QgAf;dFmt$iHjI zZxQ;Jkp9~Zc~k!bhCKR+-(T$@&VJ)`UoiA+G}8T0$n!eGSAz3ACw>YVB`Ga92B=1 z2Cs%|)*mL0>6&`x8}i+T{6z-GIBZYU!hd0KQ_p?GWx6{IdDG613~r|Tt>FCpdiYc@ z4mS2ftGa@JuTOC9uO(J&y>^_UsUx?Riabw&yM4 z(w_H)JnR2laJKU+!P(B?(+Acowr7msY|mKY(w=jL`~$ zoXht`gPY_2I|j!z*!~X$XL~*&jyw?JpC0J}3Fr7QWWdkGgpMc7u@T zdVZte?B|<^qmC_xJ)4C*+jEEDT>l@j@TU#^8w~w#3;9+E!|ijyAJo{1pQTT@d^ul! z!8u=}h-1FK!JU5p^K2o{>(X-t=k??Z1RsM2z_yGy>i-IM)?aGKR~Wp*;NJm1K=#C* z4HvMDfE}xLGG4%TI&swB3p?viAa6LSfIQs|x9a-E)6UTIKhn>?MC*=7%$I}h@Si{b<3?66jB?dR^ zNfB|bC)sEWY(KHc|C%`3Z~FgM!TEcDEe6ND@pHY~1?T5McM?b0Lk#=xA~y3{k zOZs0mxY?h)Nu29jfa==^hJJJ1CXlWbvi#vBe++T<19iX7Si#x;GX>{WaT&nBKMc!>QkIQOenf`>^@v*70wZxMVU@eaW+BHknTa^itu1MOc) zJX!Dx;yHqIKVKy{_w&ty*OHzV!PgS+5Ijn}NAMpL58yxw8<+b}h$joaiFl6Sw-T=s zoX4GJ!Fk+i5&Tc2r$g|+67LcG9^&}#+?n=2NIY5aZNzf~f0THY;M|Wl3(n(Ui{LyC zb_o7Y(%&QaE5rjM2inj5Te9Fhj^qf=<4%>}Jiasw&f`mq;5@!`2+re6kKjDM1P&i) zKaVfTg7f&2BRG#QRf6+4(rn=^g1<)o>=1k}`(JRL9|myJ0~^=>Gr9j4oacu*g7f^a zN^qXHGz-r2mKMQz-qImB&s%x~=Xp!OKhXZSD8I>qmvjFqIM2tb1b?6OGz-r2q87n< zUeqD@C+vU0zaSn647C3nwqNjAnt$X7KAd=!;71T|7JM}E7Qx35?-2YH;yr?&PCRhL zK>H^VPZm6tc#h!b60Z_GgLt#x=Mira`~u<~g69$M5quf(z>x#(FD9NW_+`X%1pg87 zD#7cBHw%6Z@fN|aBiPO)PZoSH@f^WBiB}2E^Yv!I50HF|;NKDN5d2V@H}?phKs@k+ zf%YFwoPXbp`_&VP=Lq>k;#GoAAl@u^3h@@fXA$oZJWRYt@bicVjvi?LLgLASUranl z@D;?X1iy@Uv*1<4TLiBo-XZup;yr?IARahop#9CnlLh|;@f^W#Azmf;pNKaLekbu3 z!MQ*05S;tf9>KYP3ydCUKld~IyI5R*xF5(7^4w0V1m||tEI8Nm7Qwk5b_mY(q(^Wr z#{m8Q65GjsP8OWUwH(2De5n$g`}t|q4C*jAze9(-$Kd>LlOYcrkAL<24W~E+WP_vpz0^;-1~=t%436?VuP!mTDPLu9l;2AFHw%6^MuM%y z;7c@8fBD~Q$MQlw6KP$k)sV-jRtf1*k>C%?Bf9P+O=vl!kKak0rpbN$2IACx_VHg3 z4{CLN{1)O#g8zwlvfziEtwE~bU!1E!x`n$Io@3#87QWoVODw#~!s{%2orQ0(@Ma6& zWZ|1F{5A`3vGA=H-fH2y1+Sp;>JXgEagT-XweU_0@3HU$7OpBLgmL|6dw6V;Jb+*j z`Oy|0wD2SgPZs>CSvtK`!P(Aq!52__aRq1j9Ko+8`8>f>&(Y~F7rcUaiQufiO7MS> ze4XGdzs|xp2p&WAr&(~;vq|t&lHV-&6J*bAg0r3$3*Tzttrosp@V@#lIH$Wu@R!N{ zy@GEc9-#gkgYmTJWL;iC!A}^gIj@JY{EVRH$wGd{Nt(NY`%lz7$HJEjehUshu+<69 zbD(Cyo3yyoBKUBczwH(Lewy$02>v4)-wz00ME580wEo0?@DWcpIGWDiqq%}VK;v?b z;Exc`6MQFeex88oqW-6dmk9aiiB}2!D)BnO`MbPzg1<%b8w7u!c(dRi5$ERsZ0G01 zHw*c%iQgu8EX_As1Rp_stKb3R>0f`ctUN7m23 zbDktPKZgnnzLUynx!}jdY5jKy{`YvzzY%;P^#lAK9NWYF!z?Nc=68@h&rg}h(faZ_ zA%8ychXgO7^-%5~SkF{i=Nd)%W6s|nB@6yLT30F*ocj%KcdUo|nNA_k{Z$`Rq#Jizx|Ei+|Q4ucFgt^Q~#eUIFA>+Ud8f%4C->>PxafF}0v;GtsUp^4>ylxOj&$U^e z*B{0RKJE;iZi?Wk#IprIpLm_%|2skJd0X(;CTo5`@YASc3R3%HJAX~QOz@QHTF(Z- z?;*ZL@RU?7zgzH4#La(471O?IhL%sK=h1A>p))nl6Fi@IMDRZo-zfMV;+qBki1ODBSm!)XQDbS%#Y+d6IayKz;z{FV4O)4Ck?zz zC21{UhNVnQ>ANhbi43@aSOt~k1|d3j(Nx|0l%>dxs(|9f-Tl?X8>utkfsUaXI} z#(;6D+Bl;%cCgwbr|yv`{GM{UKHW|I6$b?QgpQ}eaj^6|zS9DEG@rxtF%6miBw{lC zb<1@8R1px=xbN>YI79oXIredmpCTN~{^Mh&CH___-CtmXF*dfJ<6i_}crL`8NmID6rYCYz95dr$EzS@u=sl^eqLWpeZuze@y8TDS;(bEG*~P+riB|He`cJk0Qz$y z#WxwAb3EpMfD`P(W%)Hzd}$Zk&G8?E6Vxf=w^IC0>i<|?#>X|>!OA~y5?M<17t1FA zJICkpA1rN5>$a=$FRahgeC8-PFNR&lNApAz0|M=TlR7w;iTW%3hts;j;s?fQ$sJlv J-(MO3{{RPve%t^6 literal 75792 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