From 70e72e71721adf26bb00605d79001e00209ba97b Mon Sep 17 00:00:00 2001 From: cuu Date: Sat, 29 Dec 2018 11:18:26 +0000 Subject: [PATCH 1/4] 00_lowpower.sh --- sys.py/gsnotify/Jobs/00_lowpower.sh | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/sys.py/gsnotify/Jobs/00_lowpower.sh b/sys.py/gsnotify/Jobs/00_lowpower.sh index af920d7..33ff5ab 100755 --- a/sys.py/gsnotify/Jobs/00_lowpower.sh +++ b/sys.py/gsnotify/Jobs/00_lowpower.sh @@ -4,11 +4,9 @@ BAT_PNT=`upower -i $(upower -e | grep 'battery') | grep -E "state|to\ full|perce if [ "$BAT_PNT" -lt "20" ]; then - if [ "$BAT_PNT" -lt "10" ]; then - echo '{"type":"once","content":"Low Battery: 10% of battery remaining"}' - fi - if [ "$BAT_PNT" -lt "5" ]; then + echo '{"type":"once","content":"Low Battery: 5% of battery remaining"}' + elif [ "$BAT_PNT" -lt "10" ]; then echo '{"type":"once","content":"Low Battery: 10% of battery remaining"}' fi From 3d60124d845de9a371b63d1864303919507da8aa Mon Sep 17 00:00:00 2001 From: cuu Date: Fri, 4 Jan 2019 18:44:52 +0800 Subject: [PATCH 2/4] add GPU driver switch --- Menu/GameShell/10_Settings/Lima/__init__.py | 319 ++++++++++++++++++++ Menu/GameShell/10_Settings/list_page.py | 3 +- 2 files changed, 321 insertions(+), 1 deletion(-) create mode 100644 Menu/GameShell/10_Settings/Lima/__init__.py diff --git a/Menu/GameShell/10_Settings/Lima/__init__.py b/Menu/GameShell/10_Settings/Lima/__init__.py new file mode 100644 index 0000000..6615451 --- /dev/null +++ b/Menu/GameShell/10_Settings/Lima/__init__.py @@ -0,0 +1,319 @@ +# -*- coding: utf-8 -*- +import os +import pygame +import platform +#import commands +import glob +#from beeprint import pp +from libs.roundrects import aa_round_rect + +## local UI import +from UI.constants import Width,Height,ICON_TYPES,RESTARTUI +from UI.page import Page,PageSelector +from UI.label import Label +from UI.fonts import fonts +from UI.util_funcs import midRect +from UI.keys_def import CurKeys +from UI.scroller import ListScroller +from UI.icon_pool import MyIconPool +from UI.icon_item import IconItem +from UI.multilabel import MultiLabel +from UI.skin_manager import MySkinManager +from UI.lang_manager import MyLangManager +from UI.info_page_list_item import InfoPageListItem +from UI.info_page_selector import InfoPageSelector + +import config + +class ListPageSelector(InfoPageSelector): + def Draw(self): + idx = self._Parent._PsIndex + + if idx < len(self._Parent._MyList): + x = self._Parent._MyList[idx]._PosX+2 ## ++ + y = self._Parent._MyList[idx]._PosY+1 + h = self._Parent._MyList[idx]._Height -3 + + self._PosX = x + self._PosY = y + self._Height = h + + aa_round_rect(self._Parent._CanvasHWND, + (x,y,self._Width-4,h),self._BackgroundColor,4,0,self._BackgroundColor) + + +class PageListItem(InfoPageListItem): + _PosX = 0 + _PosY = 0 + _Width = 0 + _Height = 30 + + _Labels = {} + _Icons = {} + _Fonts = {} + + _LinkObj = None + + _Active = False + _Value = "" + + def Draw(self): + + self._Labels["Text"]._PosY = self._PosY+ (self._Height- self._Labels["Text"]._Height)/2 + + if self._Active == True: + self._Parent._Icons["done"].NewCoord( self._Parent._Width-30,self._PosY+5) + self._Parent._Icons["done"].Draw() + + self._Labels["Text"].Draw(self._Active) + + if "Small" in self._Labels: + self._Labels["Small"]._PosX = self._Width - self._Labels["Small"]._Width -10 + self._Labels["Small"]._PosY = self._PosY + (self._Height- self._Labels["Small"]._Height)/2 + self._Labels["Small"].Draw() + + pygame.draw.line(self._Parent._CanvasHWND,MySkinManager.GiveColor('Line'),(self._PosX,self._PosY+self._Height-1),(self._PosX+self._Width,self._PosY+self._Height-1),1) + +class LanguagesPage(Page): + _FootMsg = ["Nav","","","Back","Select"] + _MyList = [] + _ListFont = fonts["notosanscjk15"] + + _AList = {} + + _Scrolled = 0 + + _BGwidth = 320 + _BGheight = 240-24-20 + + _DrawOnce = False + _Scroller = None + _InfoPage = None + + def __init__(self): + Page.__init__(self) + self._Icons = {} + + def GenList(self): + + self._MyList = [] + + start_x = 0 + start_y = 0 + last_height = 0 + + drivers = [["fbturbo","Fbturbo"], + ["modesetting","Lima"]] + + + for i,u in enumerate( drivers ): + #print(i,u) + li = PageListItem() + li._Parent = self + li._PosX = start_x + li._PosY = start_y + last_height + li._Width = Width + li._Fonts["normal"] = self._ListFont + li._Active = False + li._Value = u[0] + li.Init( u[1] ) + + last_height += li._Height + + self._MyList.append(li) + + def Init(self): + if self._Screen != None: + if self._Screen._CanvasHWND != None and self._CanvasHWND == None: + self._HWND = self._Screen._CanvasHWND + self._CanvasHWND = pygame.Surface( (self._Screen._Width,self._BGheight) ) + + self._PosX = self._Index*self._Screen._Width + self._Width = self._Screen._Width ## equal to screen width + self._Height = self._Screen._Height + + done = IconItem() + done._ImgSurf = MyIconPool._Icons["done"] + done._MyType = ICON_TYPES["STAT"] + done._Parent = self + self._Icons["done"] = done + + ps = ListPageSelector() + ps._Parent = self + self._Ps = ps + self._PsIndex = 0 + + self.GenList() + + self._Scroller = ListScroller() + self._Scroller._Parent = self + self._Scroller._PosX = self._Width - 10 + self._Scroller._PosY = 2 + self._Scroller.Init() + self._Scroller.SetCanvasHWND(self._HWND) + + + def ScrollDown(self): + if len(self._MyList) == 0: + return + self._PsIndex +=1 + if self._PsIndex >= len(self._MyList): + self._PsIndex = len(self._MyList) -1 + + cur_li = self._MyList[self._PsIndex] + if cur_li._PosY +cur_li._Height > self._Height: + for i in range(0,len(self._MyList)): + self._MyList[i]._PosY -= self._MyList[i]._Height + + def ScrollUp(self): + if len(self._MyList) == 0: + return + self._PsIndex -= 1 + if self._PsIndex < 0: + self._PsIndex = 0 + cur_li = self._MyList[self._PsIndex] + if cur_li._PosY < 0: + for i in range(0, len(self._MyList)): + self._MyList[i]._PosY += self._MyList[i]._Height + + + def Click(self): + if len(self._MyList) == 0: + return + + cur_li = self._MyList[self._PsIndex] + if cur_li._Active == True: + return + + print(cur_li._Value) + + if "arm" in platform.machine(): + for i in self._MyList: + i._Active = False + + cur_li._Active = True + self._Screen._MsgBox.SetText("Applying") + self._Screen._MsgBox.Draw() + self._Screen.SwapAndShow() + + if "modesetting" in cur_li._Value: + os.system("touch ~/.lima") + else: + os.system("rm ~/.lima") + + pygame.time.delay(800) + os.system("sudo reboot") + + else: + self._Screen._MsgBox.SetText("Do it in GameShell") + self._Screen._MsgBox.Draw() + self._Screen.SwapAndShow() + + def OnLoadCb(self): + self._Scrolled = 0 + self._PosY = 0 + self._DrawOnce = False + + ## grep Driver /etc/xorg.conf | tr -s " " | cut -d " " -f3 + ## "fbturbo" + ## "modesetting" + thedrv = "" + + if "arm" in platform.machine(): + if FileExists("~/.lima"): + thedrv = "modesetting" + else: + thedrv = "fbturbo" + + if thedrv == "": + thedrv = "fbturbo" + + for i in self._MyList: + if thedrv in i._Value: + i._Active = True + + def OnReturnBackCb(self): + pass + """ + self.ReturnToUpLevelPage() + self._Screen.Draw() + self._Screen.SwapAndShow() + """ + def KeyDown(self,event): + if event.key == CurKeys["A"] or event.key == CurKeys["Menu"]: + self.ReturnToUpLevelPage() + self._Screen.Draw() + self._Screen.SwapAndShow() + + if event.key == CurKeys["B"]: + self.Click() + + if event.key == CurKeys["Up"]: + self.ScrollUp() + self._Screen.Draw() + self._Screen.SwapAndShow() + if event.key == CurKeys["Down"]: + self.ScrollDown() + self._Screen.Draw() + self._Screen.SwapAndShow() + + + def Draw(self): + + self.ClearCanvas() + if len(self._MyList) == 0: + return + + else: + if len(self._MyList) * PageListItem._Height > self._Height: + self._Ps._Width = self._Width - 11 + self._Ps.Draw() + for i in self._MyList: + if i._PosY > self._Height + self._Height/2: + break + if i._PosY < 0: + continue + i.Draw() + self._Scroller.UpdateSize( len(self._MyList)*PageListItem._Height, self._PsIndex*PageListItem._Height) + self._Scroller.Draw() + + else: + self._Ps._Width = self._Width + self._Ps.Draw() + for i in self._MyList: + if i._PosY > self._Height + self._Height/2: + break + if i._PosY < 0: + continue + i.Draw() + + if self._HWND != None: + self._HWND.fill((255,255,255)) + + self._HWND.blit(self._CanvasHWND,(self._PosX,self._PosY,self._Width, self._Height ) ) + + +class APIOBJ(object): + + _Page = None + def __init__(self): + pass + def Init(self,main_screen): + self._Page = LanguagesPage() + self._Page._Screen = main_screen + self._Page._Name ="GPU driver switch" + self._Page.Init() + + def API(self,main_screen): + if main_screen !=None: + main_screen.PushPage(self._Page) + main_screen.Draw() + main_screen.SwapAndShow() + +OBJ = APIOBJ() +def Init(main_screen): + OBJ.Init(main_screen) +def API(main_screen): + OBJ.API(main_screen) + + diff --git a/Menu/GameShell/10_Settings/list_page.py b/Menu/GameShell/10_Settings/list_page.py index cb56e83..61100f9 100644 --- a/Menu/GameShell/10_Settings/list_page.py +++ b/Menu/GameShell/10_Settings/list_page.py @@ -66,7 +66,8 @@ class ListPage(Page): ["","About", "About"], ["","PowerOFF","Power off"], ["","ButtonsLayout","Buttons Layout"], - ["","LauncherGo","Switch to LauncherGo"]] + ["","LauncherGo","Switch to LauncherGo"], + ["","Lima","GPU driver switch"]] start_x = 0 start_y = 0 From 66f61e346562641e6ff13c846e9002e3f97c7c0f Mon Sep 17 00:00:00 2001 From: cuu Date: Fri, 4 Jan 2019 18:47:27 +0800 Subject: [PATCH 3/4] add xorg,xorg_lima --- .cpirc | 11 +++++++++-- .xorg.conf | 7 +++++++ .xorg_lima.conf | 7 +++++++ 3 files changed, 23 insertions(+), 2 deletions(-) create mode 100644 .xorg.conf create mode 100644 .xorg_lima.conf diff --git a/.cpirc b/.cpirc index ec599da..f0a2dcf 100644 --- a/.cpirc +++ b/.cpirc @@ -1,12 +1,19 @@ SCREEN=`cat /sys/class/graphics/fb0/modes` + +XORG_CONF="/home/cpi/launcher/.xorg.conf" +if [ -f ~/.lima ] +then +XORG_CONF="/home/cpi/launcher/.xorg_lima.conf" +fi + if [ -f /tmp/autologin ] then rm -f /tmp/autologin mpd ~/.mpd.conf if [[ $SCREEN =~ .*320.* ]] then - startx /home/cpi/launcher/.xinitrc -- -nocursor > /tmp/x.log 2>&1 + startx /home/cpi/launcher/.xinitrc -- -xf86config $XORG_CONF -nocursor > /tmp/x.log 2>&1 else - startx /home/cpi/launcher/.xinitrc hdmi > /tmp/x.log 2>&1 + startx /home/cpi/launcher/.xinitrc hdmi -- -xf86config $XORG_CONF > /tmp/x.log 2>&1 fi fi diff --git a/.xorg.conf b/.xorg.conf new file mode 100644 index 0000000..fa95690 --- /dev/null +++ b/.xorg.conf @@ -0,0 +1,7 @@ +Section "Device" + Identifier "Allwinner A10/A13 FBDEV" + Driver "fbturbo" + Option "fbdev" "/dev/fb0" + + Option "SwapbuffersWait" "true" +EndSection diff --git a/.xorg_lima.conf b/.xorg_lima.conf new file mode 100644 index 0000000..8c4fac2 --- /dev/null +++ b/.xorg_lima.conf @@ -0,0 +1,7 @@ +Section "Device" + Identifier "Allwinner A10/A13 FBDEV" + Driver "modesetting" + Option "fbdev" "/dev/fb0" + + Option "SwapbuffersWait" "true" +EndSection From c88e3146ecb2f37387bf801d2cd301a7075c7457 Mon Sep 17 00:00:00 2001 From: cuu Date: Fri, 4 Jan 2019 18:57:51 +0800 Subject: [PATCH 4/4] add dwm --- .xinitrc | 6 ++++-- dwm-mod | Bin 0 -> 45520 bytes 2 files changed, 4 insertions(+), 2 deletions(-) create mode 100755 dwm-mod diff --git a/.xinitrc b/.xinitrc index 0a43e59..2035568 100644 --- a/.xinitrc +++ b/.xinitrc @@ -5,13 +5,15 @@ hdmi ) feh --bg-center ~/launcher/sys.py/gameshell/wallpaper/desktopbg.jpg exec ~/launcher/load.sh & exec ~/launcher/sys.py/gsnotify/gsnotify-arm daemon & - exec /usr/bin/twm -f ~/launcher/.twmrc + #exec /usr/bin/twm -f ~/launcher/.twmrc + exec ~/launcher/dwm-mod ;; gameshell ) feh --bg-center ~/launcher/sys.py/gameshell/wallpaper/loading.png exec ~/launcher/load.sh & exec ~/launcher/sys.py/gsnotify/gsnotify-arm & - exec awesome -c ~/launcher/awesome/rc.lua + #exec awesome -c ~/launcher/awesome/rc.lua + exec ~/launcher/dwm-mod ;; *) exec $1;; diff --git a/dwm-mod b/dwm-mod new file mode 100755 index 0000000000000000000000000000000000000000..ab5dabc3f2b75debabc7f32f9d967a921fe82dae GIT binary patch literal 45520 zcmeFaeOy#!+6R80nE{439h3~wbcR7iQDb~5Qrln{jwq<8Sfus{0ye{YfQBz6l-ruw zu8Nk4ZJN71nr%U5kF*+^ZrkqKvqRdmrdE{IAcHuXHb;4x-}gG_jNLoCfBgRV{q_6o zse7*bd#>xg?)SIrzB#T>&k_YeVE#wT5*VS#F^o+CmEOXSjs;C&MivU*NH&7_m3c*s z`JEmj>FYz__^^}tnWM@DCa>Vziu@cztY)4#Spp+EiJp=bEIQGtzjt?$v zTbGvpdDr<*Fa7qz^N$QW_eAdS;`O`MwY+$3Kt%MnzwJD8b-=2e8QUMd`toWD68Nke zro7QI6f&OED0h0aNa@>@2=y5RnyFNh{D$yz0sLPnLGSPf_%n_-Bwt3EQy;=B0{B*? zl4S|vzZei-asX}*(D!~o_=y4791veYKzd&Zz+=_45;4LhlSh4wpnnU{H#H!>0|ETk z0@6D_p!}u>$Y%uTJ0Fn$hXeTE`V$9A<@Zd0zN`RzFd)DC1N3bOz^wu4T^Nv`2Lt$H z0>Xb7ARo!4*9iZOfb?|*1?K2LsaI6QF-Z zKzg6z=;|?*!5X0ykApgTZ$q!{GfgL8seusRJ{A9@c*As)Vo)`-J z1oTlg6WbMNLIPMXACQE1;{YVr6+D%N47NiWVYd`Quqg z8q3WrT3t|4Sd>!%Pxb0DmTN02EvhMkg36+*n$;|KZc%Mb`l_OG$j+?FU!GloXo{*> z?xOOt{7NM$EO$e)K>RzRNM8&pE0EfelE#H<&?!0vYz#9|}UQ3v^3G*Fr~GW$7LL z)NbYGf2W3Nh(Y+O{IYx+XDrN*W>u#a)Hqfln<`t*_`(9@yu6x5rWNQ91#$+IfMNj} zPZcU4wXl$U?9K}%CBWJFHFC2nEVNcsl>RKBcJP0aP?eF89Ld6!%d2Y~H5i@nYHog6 zQFeY+HTh8h`729n{)w+fWLsHT>L|ca@Uv!rRFv-(HI(v63?Ay-R9|X9dX-jDT2V#) zQjX0pBo{sb>W6-1fYgrCYim%u)r)FYB>TllCneS&LM;k4yfSL~N3Ry*+8GMY7RfwyoU{xi1GT%{C=_q6c)b=pn z6x8M~L%Yi_#TZ6OsRj?~3d$iP@oM1*o!DGN0HZyCMHEr3XiDabtH;;eWrMY97P=x&N zl^L5ye!rjoY}5Ex^}LMV?~f@E2kPrcO5!Y@zuq<{Ax*=Ph7g7pX4 zYv_q~II!T+um@-jf`{x+cY}VSQm0DKs`Q*n+g19VN;_2ArBaVdZ>UsKX|GBd>{t|! zPNjO4MyqtVO5;_Upwc9j&QNK#N^?}YRHcO~wX1ZUO1G$VyGnPf^oUB&s6x#Myu4Q(j=9ps5D!pc`B_`X`M>9sC17?n^bySrB0Q$tJI@XR->fHpi-kslT@0b z(rlIHskBn1bt>JW(mg6|Qt5G(I#t@PQjbd6N;Q6!8daL4(iD|ut29rgl`5@M=@yml zQE8J(kE_(F(sq@0sI*I^9+lousie|gm9kZ8y{S~M(g>9rR2r?)7?qA!X^Kj1D$P-; zU8SWeU8mA5D*c^GkErytO50U>L#4ecW!Nvt{Z*xUl}4!4pweiS#;DYTestGh*tm$o z2rLnWfw7lp68b;d?_DckYbT10VgwA>L$Dt-5XC+(nke>JF+?$L4JV4R%19Ij`go$S zl_wAlV{AN8m~@kfM!;TA6eCC5!oXihG?p#U~CW3aoB?rO=N68(eaGEMRWpVO++U$ z_8!rD89PGM!q`!wlNdWr6xRDwL@{4}LUbzZ;6(3Z%t`cq#?BIj0r(uz2N=6ZbQ)vr zM5i;GBZ!L#TJ6DX4d%si=3NRt)^8{~>9pf1)#2`X@RU^-pvj>Yr#f>YwO*)IZS$sDGjh zQU649Q2#`6bdg2$Vbnj-M^OJnb5Z|9A4UBWU5xrCx&-x4bSdhe=wqmVqW^{ZC%O#v zPc#qpPZTzQbwrn={)rZ#{)rZ%{)rZ${)s-0`X_2f{S$Sd{)rZ&{)v{L{)v{N{)v{M z{)ysz=q;iZsDGlBsDGkQp#F(gq5g?hqyCB3p#F)jMEw(8h59G@B%>_6gtX+F$#AK>Kgn^_~yEx913q zef*nm@A~WJZ|ygZe((3^asFJ+pACQQ%;Tb8&K7`^IoTx6pTPNzoIi&18#uq7^E1vb z{rGblJ)FOT^S5*UbDZA^KcDtf9PcRSe=k68KgZj{`FC>uEu4QN=da`ZwVc0_^V>Op z9_P>H{Mnp8gY&0w{$$Rd#Q788=kquPOUPfzdH(#2?ITn*leZsJ`B@AMQn z-KE@G+fcjD``J}y^m+gH%Gc7-DQj)#@{KKDOGo6;7ZJKimpuxbM(#yQ>Js<=|dS=~0%DXB&gKjqFYvY2&yh4&G>Iu63U8**YjY`Thmaf2?r9G8-!f3(s?JbR` z^tSL4dnr-W?HDI&cW8EeQ%t%0u*+mVC7lxlQTx)TlD>|;EbKTd<(Y_=+^sch8;)iQ zJJ#AX4SF+c$P~{?xu&zyxhUc%bSq&@X7+N}+ro~>Ys2*vR?!^OO}av%L3i`bYE6UA zd{)Xag}$S3!@AE(HL7G&S3$|V8(XZz8D@`ZsLzaUm@N9dmEF<16zRoR1W#vQf~fH< z=?Ol_Ubc!tgZ?1#LU;JQle+7gzm~GL-LeHYzG{8y%+@(9{werFckZ?x_cYe&n|BTu~Z7*g$Wjp6shc+`Cyq?}>*jfUlS3PRm6b9jT+ z6Dn<(y~Z}!zR3P)sn%Vu{b~i9km5N|w?1p$4Q3rHuCrZ|%hBV`vr~`TTel`F2yb=Q zrUXAMjWP&Rsb;44X(xEwib@mEcjCM3_>JrGm!h?cBre`k`VYGz#4&S}+=hREj9o3G z5nWW`le(DE+;ptN^Q@5Y&<*|Dc^S1f%@00rmzx2HzHRs+v~iO7g*2SK#TFuV%Hzi7 zk&SCxLL05}`=O8eyoFbiTZT1i5`)`98!ckYqgqeQEn#Y&E3`4@QRdm-r%mv-U2|ni z@rFrahhtvnhESh(^p(11($V2qi1$9P^-4-J=?IZ^ER;f-)^k%5rldg&A?DctJwLTw zby?)R#CNfT^*83e6V|AAKdZe^!V(|4k@ilKxO3(V7c*%*2YVCBS;DQhvhuku=DFSX zh>Nw>u*GcST!D?iUM3iB2KG2Q4P!p+ah5I;WcuIOXU>5CMbL}$1hyHx_pt^(0)Gws z+ZH}2)Ig_>SLB4mxt%AG+dHt-=jMcW#%vxJ$>{{FN z2EpC-#4Ll>88o}`PMAu_m%?QrOfQ8w9F`e2d#!DaZCGtdODMFPoAsG%Z82!Kd%Aqy zW4_=_A#SZLwo-p=8p6dOoF3^PF!)TZGV1yaea;!t2@<*2r@v%h7xpU@E zuKno(`@fk2yMee2hjn6J^Km=%(Kjy}?Ryc&*~>=pScf6S=iU5);n;-B-n1ZbfG8N_ zO?Qhs#V@6VEm}|Wt|c= zfS8w`05r)>eQQs?AimfU!RXC*okmeB_owQ^k>U_hC+=@fb<}m_v8d)cq~sI#9(#7& zH+IZpNtzzPGEU5d=EWD4$QLgsk{JsZ8&CNzvgS!o)a>AEi_E>9AJC{4e4MAFTP zJ`^Wjw(p15F!!@!c8e)9PSm{eDB2R$#`#YDH9>#LWkg;+b{}tvoh^W;VR0e@_jKo@ zB841(+3kwPNTKy~O3@|(GsmD?X8VS`Q+d9xv|E%np|`ZVKFVuExg3}DO@nP|c?a#m z`N5(#?^9Q>c-S>SJmmTqmug;wo#MaXs2@H8O1V#JW+;!_J|)+8xeUkdKdcq+5|1=D zH@}H;%#OP#mmu4!>CsI|6yr+v7W=%poyjdh8DmAH3%N~7(Rvz>Xq%FbvDVLE6Pa*X zO52DU2@zvj*r)`Qr}Qivd&?<|^L`OwGKgAFlN2Pf1do%&&+|lt=1TF#WHGcyH(!|I z^S1ilu-wjM^>2N{CVcDI>xgKLFf;RKxzth( zmr089fcd>qcxjJa?KhYA*uS-Bn_6tt@`WDFqT$(=~)_S@I1=ys+TL zAe2(&l!9-9UPW6D`^ok3Y&K?%ZT>wUE?v7cs56*7YfbU|rEXMbaPZm@+C+B!?{$Lt zHS1l@;9c(vZA)2P*v`9_M(z|kg9aFuR;H(TTIx)lLBfDEHZH|;tWKD$OLVopi@u?C z|4Mt_{;rk%c&Khz@geK+>+jUPaWmIC@29@%cW<(aCZlb(rF@)*k^) zc1B)H4r6Ak$Qr(sDx(*QK|52f`|ij3);BX9dC*2QB(%;H#~eB@u_WEDU05+R)EN#= zLkp>ljzPcrphK3^XvL2f=|8(QVwyP7xYertOqk}(VdHMK{ZWo>L*0Nz-L6+`XJT~? z!HvUeSt9ee>ez(!H%i{=_x4}4h;?GWchXgJ@df*^mi07md(1v_@i}|Hclp(Iv#jE3 zTL@z7y}V|Y5SI+(^Iq>@7~c$dTY5PezrVgb5b65HPBr&T$1`FI-bH}Z?~S-hd4A}| zjCbaX#J%rw2>QnSHhX61E_=oqb?txlGL3m+->BjQmvDd3z3Xp`e}|2pY_6N&$Z$n8Dy1Ym6tt5yEQIb| z{fk{ejc8N4ZydYqhJ!*wP^0GMCHCX7gY8;(wpPDWYYT^LrYP7#cJ_O%R|{M;{%AaZ z>1XB##FKeJ;>#F=ew9Zf&>s6FF(I$ty8&_Tb()J~9bql^>mg?`Nx2YYizj5L1kjBByF(~cXS9Oh~Ro}|Yp>A!s zt|3>9M1Q0)JE-xXb^VQx-VSa&Vw-LYZlGTB1=cdfHmo6F`yBw+KZUVG&{1$SjgGQ4MVZgWeq-WP=8Rb0I(b#OkXy5N0)NRZ&ij~K7VvoykI6_Qq4z<_e{qSyOeD3#t^P%CGQ>wLSujOhQ z%Z9Z$rAo`-yvmt7t+$-on@6h70RQNMgh_KPPZ(U@2#Fd?c;1<^oz{r9!R49FXQWy| zC>>YZnbNW*1l_~3~%kiX=j-wsz^vs22oEQF3))8NuUlNU&4>?gA= zu~rzsXCiLlic6EpXgz^6e3XiH&fyK>kgVmla2rZ*z&hLZj#L)h;yD(4ElJmOx-fl= z?MQ2(__FnE>nV3g$SJob;)=+fL@|n!{|?0>iPv zC~GZRN27g-^<=)`*j$921V`(k#r8ohgT)xJa%MwWc*}xvFLJyts@{6jNhNsGH3D)t zM44$g{OhLZtN{m@d7Uj)GCa845wbPnfY1=UHT-~PThP|f1G=q|2eex?Cbm_;YPsM0 z`jxzv@W$!QVU5FU!_ZHXt{BAuO@?FGp-lP7rTntiPOPJ}%390Q*NeAF`eVg7f2ceh zB!;hx5Mwj6iM6(g&ah3^pY*0p*0E08PobcroN+hm@@>~cM>ktXI#Yhqr*5(ibEf_j z270&CdOa*^lXb8&?WfTEP1b?Vu-Rd=>T*}xmak)IMXz`3GfiRwc1SdX4J(eBi5z0i z&iREPx8tE7tl6`r7+&hQl>-?`Z55%we;`XRWrKEYyk57N+H=73niI`PAk# zMJHDn;`EcXkN11eb{Rzj((~!*h=)GHxmoaZfu)ri;wrJmVc4~NSw0peaJ;L;KCGEi zQJI1@_c3;OYtxW8t*G4=HJj>xjm_yeBk4^cTZ6ZRZaX7InDkr2KnrEl=6bLiZ_Yc+@G$Xc`%J7OBx~IVD94K@Gw|D!oa_ zq0jqKhZ4I8+Y1JHQ{q?X%hqhVu?qDIKm5pk% z;&*h>?6XqB-Ze;PO7mH1{MMK4N79e99uZ%&9%&s3+k(wPKeun zC1uUw?&E8&bsKJ*zC3#+b~Tue}=~Vw?Zl9Tu|R9SU1TQq<7qWLOnO^skRSD@}G0TH%!?>3Vl4avqX`-GRK0{&#uZw9)0yD~o&76|rrs zI7w7@Jo7&NAp!Ls4fmZ@V9%5>b2ZvrRZC*?-LnlQqqqircg2-GWo)$1drx1G_*4t+ zc0S`q{?9P-e^+5_$|A!wTx zwjkSzT{tg8>MvuPV%>}`Hq49ID+j+a+yT4O_o$4vu-B@X4>y4QyKM7+quIn^+ zVLzao+|Z$A!!c7m2fEZA-7<{I>)F@Kr~R?RkywJYy&>e~Poqp&4QW9$y#62r$+~{;GV{u{EBvJ9L>MSh(yK5WLSTzlH z7bUIpbmG=IFE;&p?o+meQf={K`|CZykFV8-G;GRz9k%4(>J#mn`}SdfaJjCeH0WAJ z2-&B{-g-bxDD`<)_pmt4%i3+iwuAP)NC~^92~Q~9>kb!|pmv_V^?S6}poZWETJfK* zg9Uu+e(}l7Teh{fzlt%F!y3XGg)v`9DeRpT*ujiZV)!Q`+7G%}c%9goe(#rOrKMY_KV>-+?Zu_Ltr5uKbV#=$kE^6h zW!jggiO6LG#plo6LG1sQ$QnO|#2MIn7dLBO4%u}^%CTsWJN6Rgfzp{PjmX$rUTb?+ zZ7F1DVR&CBMaq2=eKdT$D|pxEw9-op-uAh))HJ9$Xjg1n5d4+%<6O+V(nWcs{7sYu zv!-D-*1D;pl7`b*r#! zLirN=;AU94Ed}_sTQXY&*snJ{L36DU+q z3+$6xXf-hsz4si_`0I`Wa9}w_`qs7#%VH+|AJ*Aut@y*`aiRhC`hM@u%Pc`^Gh&pE zo-3F`8iYUWD}UM+Uyfcf{(Iy)*V5SXujLWyOce9vwSosa;!qarEWr(wL)cGR-$y!k z!_~q?Wmclh$rkq~X=#)bsiTyYUq&vPwf3i*({9vNoAcsCedg!jDd}D%+rlbS`n;!G z&ER*tDvu>VS3kxHTBi<~OM0HRQQWhkDdx~*`-QSsty=rgw(~)Ee@zwZMMp_Om}O3H_6lXQ9{ArO_9knFa8UDR zt?jr2X}PLz(WAv_8VBE~dqV3mXdZS(VGWfa48retVX!BKg|wcMrU<8`Bq1E{l7!){ zw91+So{@!vH$w;oPKHD>cwz9PTE{);4B2%`N-^p2YcmZEPWk*x%wk6{bA5RwQl82F z+&!lF%PRxbcZM~muA~&x3`g%zT}ds*3d6Mc5Y`r!G_=4Jti|Koure}z7Q4{8F!dCA zVl?K1xaJVVm>}qPzTrZOu^vn??Q@x$qvY5J?P|qa8`gm-QAg3!PDu>wLY>74|CcU1 z%Eg1S7acD&C86)UatrI*1mhS%J@Fov-jI@heiuO3n z{&QcUlapL@`=%a8I11Me>mLEF{kQ{!-7?k!scUUpq$!3Vk$T~PjzO7UOBr>rlwFI^X>V4q zl3-8Dk@PcOvkq)KhmkKwiWon(OLCF|W4#2KWyZ%^vuKgKn5ca3qmdcrA zkBJe}%6D0N+UWcx0pSg>=Z0o6vnEbxz@(w>1x;I`8Mn9G? zrwz^=jB!;bUMPMR_7&lP9WCwV?c`>`{3_OMv9LI;@@XI&hS+oMNi9aaY4s(;u2L&p zcRgFa+j`ZRQhr^wQ^eRWyPVMZCfp`C{o%CY=`CcRKkbWYrn4BI*YZcbd}@)=%*uUU zdoQ)@7bL|x^xk(A%ToJrocj>fw;LhzaBpGxP5G4JNvW`$jlb1K`(zvR&w%rwtbW-P ziE-ARzx5ECSlBjsjxa`e=_#A`<)EAI;_TOmvtyl^)&MjXcc9$EuF`yj-V|jNank<8 zDXGw61g8CKE>K4PDJjeHH>^i!#;uilw)&#Z1k&>#xlUjX@7cPFdmlOtPo$wT86~vVT^##Tx8H+AYIc1QT&Hze`5h z#v(q$VNbKh{%!M6)Wk6L{P_Y}+Tb>g{d~(^nFiP|hT98DjiRzL7>d47)pe=NDDFc| z8&V=%kq8-UUs(Dq=F5eJEa6+6iBP@zwVhva!KIv3jroAJzB^f9yWnc!3gNaK8X?Qd zqrJQ)nSIFH&DLzW!tU%n@BaJ@c4+r^k6H8Dm4QpJ*Dijq`%fjbTOWM(wJQ-z{3zn$ zvyh7sKlgv2H^N3|hM>ObFKT z^m%V|opDJRuik@Of0*6;aFtWaoBxNF0a=Oix<`nkRbn5kR+^WD9RhA+P+v6RE{1Zm zpwDZ&qRULey#0zphmo@~ zCYq^e&gyUkZ`I4QRcOOx#Bjc=v?anEv|S)8pH;WrBx<*7wzKV%?bI$;b;ZtO@n1{! zy7e~9)i5`&!4Q!ZkR4OeHftUY?SE;RC5OgI~L+xCT|GcfZK>}mxg z?0Qpmn9sBgnk^AV)*x(|Z2v;i8_wefNS{~i(oJx+opTLGKF*E9nLFJ6d#R1m*+ED1 zKaCtC+dZyT|QsFUmUm><6;VSJw4h6B`vS zvK`UlpcZDN^U1p^HE$1{Bf!=~wp;YTPL^=Z8Pv!UyPev`k%JbY`6h|}tbdQsc>nswZTB;><- z*_N)|e*F4#brtj2sEWDkZBN^@jr-hs?W@*bTqw`AS#Cl+Y(PzVWLrd!aBZ+%m=fw1*epp%T4+zpYp_3? zC)|J3^*i?fZMHq4N81oF{W1G5t=hJo_6GY-tH(LunlRvN*E%~J&pa>I6_lG>`n`|z z=B*H>Ho1n2Kf1*9!RHU((izRgyQ~A+4&Mqk7Qhz@pWe6+J{^2v#!K+s<%C?4QG6qx zPKeC~=H-x1Dkvxb)hF#M*asSxbgAIda-0eD;BU(Ai)uSHKa6fhG>SswGW##Y z0nJtARV|0hR<>M_m@!Edro3y_xBg9HmHpmtd-kNe+p1kdL^rIEm8JybUI=>^Gs5oM zAC&z`s(s>5css59Ska$w>+C_ydIk2u$WeDsUfvMg@5;6>EUqtp1*tw!ybZJXLpK(^ z^K8Mh%MBP!8jDXBoJ87wxE+aFF0i*3oAZ3$Q9Z^y!Dw~$dr#wzUA4=A_VDopd{+vt z3GRdO0?UC*h8sr|V^{{Q*aFVL2DBx~qwMhVtmc2+TO>Qj%3RD;3CYe4*2!(7Gf8SK z?s9IjrnJGvV;R=WV6F9eldyv8_r}u>#Uhw==-093xJPIjz5=%&`-UPM?a3FHo^vd) zZ$n$X-9e$g?~RsYxLBl|sw~7_t0wgb?qvDA?mjmDJWH%67S!dgboRpJV1w z{AWAbU9ovbU1u>?z7O|0Trpe@ToN2kALaSsi?Zjjj%mXv`O%MhO@lSexiEzpPXPP8 z)jlI`SI}Lb_tC3ZtAsJia5y|mu&=Y7_)#yI?Xj|5W>@JZYp8QJ!tE-A_32KiMuhqh zVW@mjx|T@s1*_31AoZL3s61Y{MZd4yN-RAk)y`+eL6aB3-ggRdA1phCQ@X_Rw~A0o zmhmX12|i||Qoz{$L9%?yVsFz^bDy>)+40q`@oTY*wa;f0o@|4a#78???DDpb!+px& zhC?O8?3x|g1_3Ju){tesR_t-~dfTtk4V7i6r3{OJ6M|^d*V0?fvA7quf3Gl2hZ7xx zsmG?-GT0_;VOxah+6FD8)|osg=K+`XILr4qrlF_zcIX=;60Ob$F9s*3JN1o0i5^)e z8%;Vb;v;inZGL^2lU{;8-1H=UlVyEWZ$EUC zESLw`4JFT|kH4@LCm_F0Pq=syd)n+0ty>uIT)OE(oBZ~ki`XqhwYAJI)wt{BmFVlu zRC;g5vT;XR7g&wsLLd=s+I0u(zGTJ_oSTRCgfvE>hYzy<9Ci@G=9(5XW4??_6oqX@ zloFk)>7)9+Yj3BEb1<*mhc>mrD6p(L1KWr-!B+{eZNrVptj27S>Nt;4BE4;Ku>fi< zj%(Xp96byx$9TF)@aXbg%W-?7SKq?MPj=pubn@*nYKsv6mFxFqkF^})?C*QasVx;>EiC^YW1HPFz4=nH?wV0Zkgbuh z#^WYj<^1nlbUMRYY%0`)ytI&qjIZ;wt)BdX?KGt!#kmwiL$VjRXf8{PDM8Z%_C_k-?2`}h_*Vfj$86hHg>vUwg&Xk<$vcCepH z5p_W~Kdk;#(rr<8jVAN|A+*w;JXa~FmtBjIuZ7?Ee7}KX@OO`4Otr8Hl~>{rcE%Pz^P6hEEz9i1gW*`v<8Wx&a`H;UC}zJhZ#qq&vo?D zor9Bzm)649M+xjhIJyZLj2$Q&CG6<;e&?f`leT&5ZPU?jL!9`lag2IVJqh9rX!vvQ zLs?0P*KBVr-)Vic4SzMTg^juwHxNUw#e_a8jWJML{J5Wb?f*%}x)@uKEj@klIpO}$ zd#_@2$%0jFfBM`rCec_rU&@&NYDu5>9g@$WV-lJvu?OJ2c=K3SnGiUo=-k|Jhgro>o-+itYb z{p*O<4BRT%GBbMWG3!^#Y3Z|l-Yj1(?uF*}8nJS-_hKy?r!n<2OTU|o@ zF;{|k$%XTkcFuki9=^xc-Hs&bH1ORwOPidEGrgU}KN8&a#did)Jp=Kt2N}%os$O&I+56i5mj$-$FfA6lv|C7G#W=(&fLNBXp9p$s}!<} z)>MA`!_TKJ3t{aNU^k7njK%Cj7F2_!59{~`an@~*$GR$38H;b2ab6vV{x07YS!jQ> zyscTl-eB;TgX}r5OzB&Pi(#+~B-;0(uVUSVKJlwt9RC{d@ zn=cvJGggC>EG^-MgPI3TPQ^VZ`db^^c}0$6u*%Wn)=Juk`eP%Y19 zoIT0&TG*jzd3Ne-*;&@-&F|ZQ9&!|KDuq7p;y#_Y5%yZ_srzX3Fp9fq4P)9}o(j9iwY|pG-Pns9S0M>3_*{ecL`7(}{7aKW{u>~F4Gq}vJ?p{D(8 z+4klosO8miE$hFWU(UwrTZf{JC}X=8^*Nyx0-L%(88SEDy)gGrKyCEnzzonsxSG?>d}UMZngogI#wq z^huak2BJN|c8QT9Tns1SL5^jG)`Ew5q4q-_(h0>|2+k1QsX-``qwup*J&Q9_%U z1U-7ViJAAKzOg2BTqwp$tF6Q_CQ;kw^S&n0y=ONp&9|L>-p_jJH0CC5K_n!mIBki+ zPIKZ2j8gX7xCwb{Xgh3GroXlf&lKJyTPmHm^m^BH*_(x(=r6r2K{;)vxV0GLYK4Ap zXdlHCX~PU=#fTz&()xS%fS}K$_;$he z2~Lgl^PTc3P^B%>_Dk!j*3?*7f1yPm^#bnrgo|wsI-~k^`hd0&_dlMD!dmok?F-hB z3)@PfY%f@~=UL{C4jV(`oB_L|Q&Pqg77@Fy+UoST5C@%WMSQamYwqxud%deJ zmz2_qiEJxaZJ~|zc`wO!_rLd3%Xv%Qr9647dbYBz`nK}{-0tm{=VzQmw*?)&lRhnYUchernWQ-fWLSxpx zM1TEYGSgpseU7)Zm+SRf-8A+(s1!{!4jXXZpQ`bnWRcAt^INB~{=;c>55+Og-T;dM z!+NOS`#IJIwZbXvxIgQe$)#p-Cyjx1(m;7;vt}%y6=W3d{M(PClxr>ca9@KSx7u=% zn{2pJORx9*W&LaH-iMtnV#uqJE%%}K-G{TSb2!_QY)kC=Yp28YH@DOVHC%wDYbeIU zUT<<|!Xa1%fHHt4b$XgFz)Ci>IRR)~=Mf--@q!d#Ks;zM*`}~G#Ado6MH>;LDQMTE z<}Hp3QjB4vbz~b-WeUGGJp5ex|F+$Y+hM)ls*aGI`sQA5InKtjEi^x{#Pv6hzfJ8= zz0sO<FAtLib%Z+6=F9b%9+PK z@%0<6Dc6V8M_HNY?)s+NbwA>yZEIFFjMArJwkF2iAePTUp zwYoK$gw{Ro6O~QwdJfkEr*b$ISm3Y#e4>I2pNH@qt_M!#a4N9CVFCEWGA?{J!gIJD zIF-YxzygN_;1lz>@F@t-;d1E+F06h3{x$q3(Ib08%%HdRCfy0=eaa%f~ zRWLH#i>8+H(Y28p<86(na;CnS?gcZ?iWW9ja!$CcO+lOMKh_bPqUm8j?saPgIwzug zsK2PM>l7j~ux_0_f_X;PYgtBXn)L;=!x3^jG}q%q=sL7}_Mn|n47xqctr>)N$X-_4 z;UT#lrnvD{lh%Fi6V-?0cIe0Tz|;=?I2D-Mp&tvt)DHdlL;=EcxE`3=p`V`$OzqH* z1z>82etcpf!gIJDnA)MAp9)Ov(2oURYKMM&A`Rg=Tn|j`(9cf=rgrGZ0x-2hKRz)T z;W=CnOzqImPX(rS=*I#uwL?EXVMcfk*8@{K^z&1JsU7;U08H)Bk53Fncn;SCQ#RRV@c2%Z$ za7uEgeUhvhZB&tG37@o9cv#AjR+IIRq9~<> zh~aZLis5s%ici~mys=lFvaK5Sz9AHU#U@O_etG(A+{sJEjf^*}KjGGa^z1VcIFE&+ zwol)Ep>Mw6FHhO=x^|CL$Bwt7P5YlZ@?cJ(FVOjX2DTnPALbQUNn|X4%W%B0Aiuo4 zqQ+QSkzZ(}4^0|ZR8^E2%kd?}X~r?5s>g(}e-^Byk3lMuBxJ0qFjguboAk?RQxiNfj4iLKD8ZK+%}Gg9r`~@*GZ)DZ zGcT7PW}YHH%sfec7{2{mQC*o|P&AD`Df^%$i4{IsHqDri60{dp8K0ED_-QQ5FVBA* z&{1v7FU5CP3s)PfR+g93*J5Sy75ErqsZmbhG-FlK6D#r6U6e&((SxH3$1CssFpQyo z#?%-c<@n@qX{mAHteI&USvDiSpG%*+oyL|t_8?m_s_-#Iv+@l|bSuktvO!ml}W!Ven<;+W)m$i_9Ej=qeCwA!imNhGV zZqBl-SqpQhWbpk>R#;Y4zH%9=l}#vP6IOtfFNeeT0IET&SFm5q_yt=s=P@?ZfiHE6 zj;f*+6}9Z~YP1x`iq-Vbd9X=rGX8Ossq8*>KmNgo2mVdtLSsh7OvAeHgm1k-UHL!H ze@fs#CGejT_)iJ^rv&~}0{@mZyFuIV_vw4^ zek%O;!#w~u9qvK6hu~7-(%}5hQx7S=mGc!k7W8k~ivRm`zZ7E!Qh)aQeg6Zwt*Y!I zeDjl@TlmK434HG~@R^Elh6X-2t&Dw>qP!i(rHS77*HQR0W1o@d`5BNQUINck!;uK_ zi27ZjPVqOYbZL-+>6_mXkfVR6BoeeHU-|dxPL&A^uNcG`uARx>{l;}d8Q<*pRlEnq zP{EFe;ct#X4Y+d%FH6JTEu1jiU2ybh=?6zR5MjpwqCunJ?uI*xAM($@w{-`B)*(W8 z-{OQn758+VYz8o3K=_`O2 zr*!f|{2I6-=%erS6JDWW+_;c2J`F7M+f{5-F^H^>@G&lbR4x=BrI*Ts@TV#!{o~>4 zIgC$C%b4;@^2E=7_~-D%C+sf|3oz*?Oyd#Z$FdYm;R#cG#HVqJ@Ff;R#cC!W5n`g`W&Z;dP)Co-lf;ite+c=A(t!W5n` zg(pnm2~&8&6rM0SOj~kz11Nf;R#cCOoMWGBPfL@OyLPrc)}E( zFoh>f;R#cCe7;H!p8`tZ2~&8&6rM1JCrsf9Q+UD@9-q~c!`FdQc)}E(Foh>f;R#cC z!W5n`g?|8!%8x3T!V{+Ogeg2>3Qw5A6Q=Nf{uA)dOTrJH>xKB9I9xpXwhy#pIp!eD zlkK1(piav-fFh!*Y=?$*W#Lxot)Z~+%c{>_u4zSXKFjb(!T zXyuY*xMJ$ZN~zPjgC4D1l4$=LKMs;Tv>u^H%YtP}>jZkV3=0!Hw2q)hE7y#&?ocqb zGG#rYU`3Jt-*5B(d$6=-Q25kJ@qKrbOrVcirLuk^s>Q$OM$fu@nE>Nsk9g?c5vE5g z_gsX(gQMj4wC+;)O2X;iTT!r*aQ@$;rS~+xEBw1;>R;n%*$^4ix=Z2TEmH&fgo0ya zYQ%h|;Gr`0|KM-<{9c)Au^Ln)mDf6U4IihKmvyR~M*jCiBhPQy#$)W>3fC48a2L3j!*Lb`lD4TVOrlR&j9v@-wW#3zd@~E zzkDqxe^3}?fHOdeAB+M_#26K?VgoRZS=3Ve>CaWi zFe*RNx0J(oLH;pd>aKqIqa0t3pTi>|e*!p#lb1L?$;%TdQN)KU|4hKdO5NG7Kb|I9 z`BBo7z+wDpFB=O?;}^-}6F_VN@KP01{chmoDZY&yo&)*kfulM3ogAO!cXRkr$iE7_ zfs;4TFeE=p`ivaTgS-iN3i$r~WO01bpTl80;mHx$4->{1>CgWu zS~$p$qTk8k*Px&F&%FK__x-bc3Wxt2^0fcPQJ<{;Ezmhw81U_VYc60a)ucfHs*z(eq!_#!F{4aq|0F#_Q zKAjanew6e@aG3u6;Yi>P@cr^#9G~>u;BX`4$)?2j-@G(MyT3jQIZXc^JFRK!IQ?fi zKI#9C!-pXMeSmy64Sw>Yq`#2EM@c{MaPa-%))^A^B0#6T{(l$PWcx2fknbW{yw#w{!R!(8}Z(s{<9pPp6Tc9{!pGcNZ=>bkaJ^0ga$o!d4`ja?37V;M08+h-Rk02rWQSuwl z;Zn%ceu}0fzkDvoC+|`YuYx@7)A;qrW{ywZEgZ(BFt!zVfvW#`VA>B3;qucy7fkt4 z(kF3v2jt2A+yuTqeLL?gq80i59R5Az4*+*?^6RLv%a0j_S<@ofzhQr@Lp6v89grDViQ(?)E zqQ8m5S0GROZYL*Sn)A={bsY9Wo@`irdQNeCdViY3RgkAWcM{(F(=Ty+lJDj4I>^&r zo|?E{e#RmI`BBnu<1j6($-a;WzF&S1$0z;2<8Tn2h=YgzvO2=$>(tRe(0xj89sj-IX=nz_wS^i@>fWWTYe((`2)sUmMj14 zJ8mqqS-@m3(SuKT0WjH7{CFua*_Qlx1u)rK{J0XB>@R-22AFJ9gH(MKe~h|6r&YrS z@Ckz;z8JO{9m>i(ThZFUeJSdkyfcEgjv;l04)Is7}|Bw&NAZzwwmoWk+n z0k(1Y1KvnyMf6*6C?BQVk3c#s|0pYl^+94|Bfc2mBUW}X2`E1A0xL% zzkP>J)24t=|DJBVs_y~d2%KqcQE@6T{kyd^mc>h_hzd!2}RB@zd z6ZmAGA`MhOq|a{;qf^3N;QKMYNG0nZ&V@e#KAjiSDkPUmlWSc4io=7 z4ijJEa9n`C352P$$&ZpB9;b8i4Dn}j*q@$ST3o2%7lHpYhXccx{+sX#$ge+q?Z4qq z;rNsvJBKO1l^hQ2U$T6Wsvf7>8=&8B-^G_G<@V(7e^d+G!1rV7kNiXV{Vn)o5nlut z)V|)L^s4q;0sN1E1+_eh?*#Vu2WrpX07oKxtQ!6ru)lp1Ul)S2bc`4DkUmQPdw24u z*kft_QyvB14#1Dx$?rhfzUsG+Q>sbd&SC!W5i)-_hp9YIbND4-Cx?lDk;BAq=P>a% z4#$uDDEc>ZnD|W`rtt4^nD}+~$bs>rgx|nn;_v4$g@22~#J|B|;!7MR{*)2;ksn2W zGKYzu&0z|k!(rm@<}mU1aG3ZxBk?0YivC;nHjC*HxH(88C+<9(hGk140Gwa@#-9{wWaQFgxV#Z!QXQGW{l{e3u>{r|2>(&3s!>@Sw!i)8(`VY^4 zi--4lc-F%o^zbbnKI7rS!*_f5Vc@Ozn0FJ{-^aZAr#$>~5C5uxXV9NlfcZR$`>D&Z z{#^ija*6%j>){y>&w2Pm9$xkEZ4Eqw_A6jF-}Yd>-P5Qi{|7z%sE42M@YBF=yUx6; zK>a)eeC@UHfoO~Pd0@9c*@OMjOWyha@bK%gzjlf8yxGI=0zPxQSuZ$$4g$ON=PKYM zz?XnOT@d-N0)OYd=KU|?)4(pV{lvp}c=&D)Kj`7Fd-(eve#XPU@bDjioqjIA;7WlH z=!?6q!!;T9@09mdkN%=dF=x?#UbnFSdw|{kmFK?$*d_LF7Wg^XFCQVWy$^WxZQ}9k z^eG&lQ(k=+nC~RrWX~^wpM*XK7JtG!|6cF>hdlf(4?pSQr#<|fhhOmUs~$e*;Y-XT zZ{0uY`bV7f~JAcW;$2@$>!=I!)4gG%1tIs@q7x2Z< z?-f?Q`@Q-{fM5Iwue^=?j{~=1FTB6Q{ygQ;|IEYBd-%^D{+EX@=7V3GsK2*+__x@v zHTyT`)!*ddV;(-^;oQTY^6=+9{73^|4pE)}e)z-YemM24DU}I!!BR2%)m(#0>lqP0G477#Fo-DeDEH5=kEB5JttNP({C=a-3|b zhd5ltFxV>2qj(#AH@pvP9z|GJqQ}2UF1C_1wc19&?M|+{)~#Uxd1VEj6Lqf1IRpx} zGAxT>3+k#&39r%_&9awh+5nX(44NtT<07-7si1F5+ey5m1*9s>uxCXLeM|ZSo%mhfs z!`4uAl(8BQW5FKBrE=^bhBFcy*o+8k8IA)C8w#+F@%59^p-JiBq;$ZRu1-MapA~>pFs0N;sJ^?k6-+sWKU+MGj&qqeAx6q8p?#Qbk$GpdO*| zY?#IhLF@Y z2ISbbT(?%gmvSP3aJ{xwg2+t!rM=zM@xBRN8>cE9VU*%_;pTH zEh||#AEy`O9^{zvRWUDv3S6^TO1eUfbhW!wO=cq86Tj@TS)fpjGvf(2w3E{g#VuW{ z)qJRuZ5aJhjNL@+maLxQv|Ao27*VC&B0arxrBFY&`J%I`H=6U@Q+4zzc%IJLMN@Q) zC|V@ShHX^2)f^hVt}N(1mRVP{GjG@>{1hBr^Asq68#?Ys-JG*3)G$m-x4gmE>Sc1H z?pD}~!_MKbVcGp%C#Cs2zrIY5db8cu>FIhh8PT~=51Y7Bt9a!HC!+nrN(l7@b*h@p zgYa}4E)bWAMOumN-mt_v(QC?I<^O$5#`K78IdNQ}@^wxFcq_92Sw%U+bgP5$$i}8I zsdjfvc7QgudrI`w2(w{Rn0S;-FMF5*r`u*~t?2o5l3zQ*K*C)vnk!!^!%@I}N|55p zvDq3o9!|w(t~N$;vW>BOD{vAt_o~@~Xu)z-(8aGR&F{dK^pZamEnL^ct@(x3{k)Je z2sbNQ-8xC5{YfNRM1ug=2CZnEb0+9tTr}$%Y+))~9Zdm=x-w2lX9~kqiI(3&@OrXXZOaq(f1+N4oov**^L3J{@!87W{@T0YF~7ip zu*uPV6Bu;E&)}EwU(9UJ-41tjPZ&Dg9^ac_c6F$llz)gaZyl2r-)F%8bTO&JAzkKq z&mi*_D(U!M#83YR-7itkevppuV?28vI#h{YBRe|2mvt6&Gdy6Ell4VlXOn!t;%_-@ z6?8ntL^}5WWn|Z$nMlT_aabqPF~5TB==gkbPYJpUHHrS?`2G`!?Xn-duRXJaXNBjH z?;PrRcn+C~bo)(F|79KXMfiiZhOVj&x3;uh%nMhEI#>J;z#qmY literal 0 HcmV?d00001