From e22bcee2e52a13080f955aa430c41918d75f91e9 Mon Sep 17 00:00:00 2001 From: juhosg Date: Wed, 8 Feb 2012 16:39:21 +0000 Subject: [PATCH] package/lcd4linux-tew673gru: add a new package for TEW673GRU specific LCD4linux files git-svn-id: svn://svn.openwrt.org/openwrt/packages@30382 3c298f89-4303-0410-b956-a3cf2f4a3e73 --- utils/lcd4linux-tew673gru/Makefile | 33 +++ .../files/lcd4linux_tew673gru.conf | 243 +++++++++++++++++++++ .../lcd4linux-tew673gru/files/openwrt_220x176.png | Bin 0 -> 13128 bytes utils/lcd4linux-tew673gru/files/tew673gru-lcd | 14 ++ 4 files changed, 290 insertions(+) create mode 100644 utils/lcd4linux-tew673gru/Makefile create mode 100644 utils/lcd4linux-tew673gru/files/lcd4linux_tew673gru.conf create mode 100644 utils/lcd4linux-tew673gru/files/openwrt_220x176.png create mode 100755 utils/lcd4linux-tew673gru/files/tew673gru-lcd diff --git a/utils/lcd4linux-tew673gru/Makefile b/utils/lcd4linux-tew673gru/Makefile new file mode 100644 index 000000000..036e6be81 --- /dev/null +++ b/utils/lcd4linux-tew673gru/Makefile @@ -0,0 +1,33 @@ +# +# Copyright (C) 2012 OpenWrt.org +# +# This is free software, licensed under the GNU General Public License v2. +# See /LICENSE for more information. +# +include $(TOPDIR)/rules.mk + +PKG_NAME:=lcd4linux-tew673gru +PKG_VERSION:=1 +PKG_RELEASE:=1 + +include $(INCLUDE_DIR)/package.mk + +define Package/lcd4linux-tew673gru + SECTION:=utils + CATEGORY:=Utilities + DEPENDS:=@TARGET_ar71xx +kmod-spi-gpio +kmod-spi-dev +lcd4linux-custom + TITLE:=TRENDnet TEW673GRU LCD support +endef + +define Build/Compile +endef + +define Package/lcd4linux-tew673gru/install + $(INSTALL_DIR) $(1)/etc + $(INSTALL_DIR) $(1)/etc/uci-defaults + $(INSTALL_BIN) ./files/openwrt_220x176.png $(1)/etc/ + $(INSTALL_BIN) ./files/lcd4linux_tew673gru.conf $(1)/etc/ + $(INSTALL_BIN) ./files/tew673gru-lcd $(1)/etc/uci-defaults +endef + +$(eval $(call BuildPackage,lcd4linux-tew673gru)) diff --git a/utils/lcd4linux-tew673gru/files/lcd4linux_tew673gru.conf b/utils/lcd4linux-tew673gru/files/lcd4linux_tew673gru.conf new file mode 100644 index 000000000..a3b3ece48 --- /dev/null +++ b/utils/lcd4linux-tew673gru/files/lcd4linux_tew673gru.conf @@ -0,0 +1,243 @@ +# LCD4Linux configuration file for the TRENDnet TEW-673GRU board + +Variables { + tick 1500 + tack 3000 + minute 60000 + barstyle 'H' +} + +Display Image { + Driver 'Image' + Format 'PNG' + Size '220x176' + Font '6x8' + Pixel '1+0' + Gap '0x0' + Border 0 + background 'ffffff00' + foreground 'ffffffff' + basecolor '000000' +} + +Display TEW673GRU { + Driver 'TEW673GRU' + Port '/dev/spidev1.0' + Mode 1 + Font '6x8' + background 'ffffff00' + foreground 'ffffffff' + basecolor '000000' +} + +Display TEW673GRU_Text { + Driver 'TEW673GRU' + Port '/dev/spidev1.0' + Mode 0 + background 'ffffff00' + foreground 'ffffffff' + basecolor '000000' +} + +Widget OS { + class 'Text' + expression '*** '.uname('sysname').' '.uname('release').' ***' + width 20 + align 'M' + style 'bold' + speed 0 + update tick +} + +Widget CPU { + class 'Text' + expression uname('machine') + prefix 'CPU ' + width 9 + align 'L' + style 'norm' + update tick +} + +Widget CPUinfo { + class 'Text' + expression cpuinfo('model name') + prefix '' + width 20 + align 'M' + speed 0 + update tick +} + +Widget RAM { + class 'Text' + expression meminfo('MemTotal')/1024 + postfix 'MB RAM' + width 12 + precision 1 + align 'R' + update 0 +} + +Widget Uptime { + class 'Text' + expression uptime('%d days %H:%M:%S') + width 21 + align 'R' + prefix 'Up ' + update 1000 +} + +Widget Busy { + class 'Text' + expression proc_stat::cpu('busy', 500) + prefix 'Busy' + postfix '%' + width 10 + precision 1 + align 'R' + update tick +} + +Widget BusyBar { + class 'Bar' + expression proc_stat::cpu('busy', 500) + expression2 proc_stat::cpu('system', 500) + length 10 + direction 'E' + update tack + style barstyle +} + +Widget Load { + class 'Text' + expression loadavg(1) + prefix 'Load' + postfix ' ' + width 11 + precision 1 + align 'R' + update tick +} + +Widget LoadBar { + class 'Bar' + expression loadavg(1) + max 2.0 + length 10 + direction 'E' + update tack + style barstyle +} + +Widget LAN { + class 'Text' + expression (netdev('eth0.1', 'Rx_bytes', 500)+netdev('eth0.1', 'Tx_bytes', 500))/1024 + prefix 'LAN' + postfix ' ' + width 11 + precision 0 + align 'R' + update tick +} + +Widget LANBar { + class 'Bar' + expression netdev('eth0.1', 'Rx_bytes', 500) + expression2 netdev('eth0.1', 'Tx_bytes', 500) + length 10 + direction 'E' + update tack + style barstyle +} + +Widget WAN { + class 'Text' + expression (netdev('eth2', 'Rx_bytes', 500)+netdev('eth2', 'Tx_bytes', 500))/1024 + prefix 'WAN' + postfix ' ' + width 11 + precision 0 + align 'R' + update tick +} + +Widget WANBar { + class 'Bar' + expression netdev('eth2', 'Rx_bytes', 500) + expression2 netdev('eth2', 'Tx_bytes', 500) + length 10 + direction 'E' + update tack + style barstyle +} + +Widget Background { + class 'Image' + file '/etc/openwrt_220x176.png' + update 0 + visible 1 +} + +Layout TEW673GRU { + Row5 { + Col1 'CPU' + Col10 'RAM' + } + Row7 { + Col1 'Busy' + Col12 'BusyBar' + } + Row9 { + Col1 'Load' + Col12 'LoadBar' + } + Row11 { + Col1 'LAN' + Col12 'LANBar' + } + Row13 { + Col1 'WAN' + Col12 'WANBar' + } + Row22 { + Col1 'Uptime' + } + Layer 2 { + X1.Y1 'Background' + } +} + +Layout TEW673GRU_Text { + Row1 { + Col1 'CPU' + Col10 'RAM' + } + Row2 { + Col1 'Busy' + Col12 'BusyBar' + } + Row3 { + Col1 'Load' + Col12 'LoadBar' + } + Row4 { + Col1 'LAN' + Col12 'LANBar' + } + Row5 { + Col1 'WAN' + Col12 'WANBar' + } + Row11 { + Col1 'Uptime' + } +} + +#Display 'Image' + +Display 'TEW673GRU' +Layout 'TEW673GRU' + +#Display 'TEW673GRU_Text' +#Layout 'TEW673GRU_Text' diff --git a/utils/lcd4linux-tew673gru/files/openwrt_220x176.png b/utils/lcd4linux-tew673gru/files/openwrt_220x176.png new file mode 100644 index 0000000000000000000000000000000000000000..e9f5b9871bedbcf1029c2a55c6e231a29ca8a9ac GIT binary patch literal 13128 zcmV-OGq=o%P)Px#32;bRa{vGh*8l(w*8xH(n|J^KAOJ~3K~#9!?R|N)Bv*OgckivO*SF4lv+tu7 z!Ds}CAR&-6I+7)XL0}|^47SOMjpLXk$3`NYI61O|mEgqZfCEnOiP;>4;UL*U0ttZt z2}x+Ak=IU0vPpy?HZFL*4VvOfOZ{)m6X#ec$ittO1m6OHv}NiV5dvJ_cfGc^5Q4O20SL$S8RwyIsu4m6_I#?&DL4qh zjB!ZDLdQSedlyzuD)oA)TGKVMW^C9r8lXggTA)PT|Jvb;5actNv7tc#F*#eLjJ4iX zhec>8p8){QMWt?s&J1HD(F_2#j2eG=@p& z%kw4?5)y$U&ILdOWEJ=KX-1N<5M0XtrshgQ!1(Z>p=)6bp*A?SNU`~}4ZeYW5rV;7 zCYMfmKAkI9LLV%*$)(c(z!I~At>bv)|!Tc;11eT zLU1JVx`MAkijjN?-QH@VHi7J-aapR?d`k0~blS3%`3~VMXrqIF;SD;VIXaZr2q{%- zK4qOp&SfllcWbsAy2}WGsT)no^h1QIem@EnJWvm@f z#^P})geX+17^9JaTsKe#;TWd9c64^`NH885$O!?3N(5yhgwmD)0FLKM_6mN4X*9s+ z`82ev9fX>6D>sHQQ+uK+y6srDb&56fpt-Q`Z$E@^H3ZSwsk`Ot1KEraP^sC_aWJL39nT9LTGup1W0bYI znC-Z1gL{}SgSdB00hOT)&bv+-UHnKqoG(x2N zNGa!j?Z@B!hJuAPFnsYlub-PZzHish6|-LU&i9P1+r0OgpA{xgDEfTQ2R@R@Ld(mhroj9e=Ib@Lwr%%ql_{2B=_6uMC z`qwsW+}K^+pzcm&!i!78m%2u9SIr3ki27dP$ZMbb-;b)Bdg$RI4G)a1X}Fk< zQ!Pw4%&UOm@l~@YkDWSkJe?n0xnUDPHZwGO=01*Ih6E;-|lOX)o-aWVH*w#~a*!wa76s9Lg_)(yRF-H>zmWo!DtUB7$#&6jU|<~v`x>1~&8-@aXLdC`Rz-g)zN+T{Lf zVYVM-Eg-SqOE}Oc?)k!sp#g+C^Vf|H9{PvBd-BnT)9Dldyt-%4C;#L>UibbF1HkSl z9{+=neBkDrZ$cxE zW)6Mvi(dqQYOOYq&!0LyIksX{2*DWBG_6vt4h;@YoH{+WViW-GzWeTY zKlw=jc=+LmZ@lp)LU6fUUbSk~zJ0H+UArcDCimWZ@8kO?2Ue_$hI`{PWMN%?5LALi_gHZ?|p7 zZ^py#y6dieyPhnZI(hqVTrWXctJgpK+0TCd^PlHjV2tj)_uf=(ng-(MciwrY0wnQi!q&)j|YgFpWH|N6VXzyE>zr6T$G$A0_7!M$zZzT+crz49G%g+|%O zmMvS#bFn%_)IeyVx2M<03Q(MKN%y~w#Za%wvCbw2yq&t7`@+y44*zO-fgJFdQV z=XbyRUHSTt9(!!Vwu}DuYyY4%gf>01TrS50iR>La zcI@1_bLY;Tn>KBduM7?<@DsFmdVL*L2~bxH7+|n`j8a8_=+pP@%69E$75q-fBHv%@Pn^?`Qfj9 z>DKqW^DWH?%Oj6Gvi^cgg1g`H-uM3O!S5V=>G{i>g7?UgBizg==zR2}AKiH2C2O}_ zfSP0d`t>vbLC!fsxKk33uifz6bI%1|+4bCW`LQ)CH*S66$tT)g-?eLa)!LvbC>9Hb zm2Q1`-1^xVhA}sB{8vADD45!5?i=BTCYi=1$E8%1T||IbyJ_qH`_A`fXJ-|jo_*@c zT~9rE*Ijohvi!^c_W299zcskqyRW(CJ7535k3IbTp`oFMW_s~g>)&+6x93f*UcIUToyQ(K zU1zJeUi{a8^W}pF4*|fIEt?;H==PTDd%rB722iJ{T)i>|rphMV8}8#}MN<(6C4tX-S3tYgQIKmL=SeEYlK z+kWlMYc_2S-J#EY?sKVB>gHQ+Nm;4;@BiL6zH|RY@3|Eda_xtH`!_#)$45W-{u^() zY4z&Wwr!s}b?Slp@4x@i$FI2YHUM_uz=6jedkg?xdF2%VV2r=8d$*zM>J=eiZ0-8L z`^r}?z4TH5V2mA|DqN^x04Tcb!3Q5qrBc#u$PAB3Z0+5r;Z#v zxbL-UxkNNAlN&HcSLa8^^O;nZz}}Z$P_}!`=B+cO>gmG=03e&TG(t99cxiTUxK=Kn zKDf79w*kQR{K1uLF1YYw0GOLRHF0D=rCeHo@lD$@14D>7`Oz`; z{ZpnneeA%=gZo^^F*EseesFx_RwI>`fKFQ`fUsRpWwrw0GYw-DnnkHt79-T@fh42P z@sIc3rR6fIVx?B8+XLBjH%e$&Gl20m8^+gc=-ecdJT7?ijyJviDg(op{_~&Q{%=10 zz!(4GU;fdbKJcyobKA%M)$GyzSKsuTlrcb1cifpmnQ@*^ncw;!|K$_^>GO`~A%r;R zK4mVkGK0fHz^c(P9v&UdWOJ9k=T?_-gb){eWaa9?v6Xeltve1v zNP;OpICSFq;~U@n*4+4d$Me)gB8(B|Lf6QeEf=ode4*`nAqlAXGLjVIoya6&zgRmy zkWH7WwPK~3OQ$eKjk$#a0D+ok7zl8R9u}?R9{L=uSheQ(-j~*_T{m~~@YLxEBb%Ez zer#KD>ZM=&ba=%Is->on9b^Kw-g295+lcwkK6qa$l^WZ)&2in@%;{7*J+%3f*M9o_ zbUM9d`<2wl0D$AVqZ_sjuUtEOWM6H1!rXe{#ED~w`AD}`UbOw_FMeoR*3kNG)V24& z_F}P6*!bqR9^3uo?5X3~(Un81*3TT;Gdndox_a%)M-N?b!>!iH>dtf`YC=95L~#am55Xj#N&A!)D>V@mJ*ojgvt>Z!U68NKx6;|{E$@5(wL5RPcIOS>`=F0tEj<0^=M-N|f)2%=K;X~^;Z*zURfA1d8bq^ohzxB#%fA!Q)2Zl$SYT2t60bu(0 z;n}Iv*<60=$bK%w)TxuxvvWv@a{{@&Z4{mBmr_h)8i)?NITx^1uCeBsQ* zacG|g)VMSV0YF!4j1tka#JXoFpRLxNLZy;PnWmvjI4ag`J?-x1OYC0r-VcTpy$~>0 zuI5I^?RtHD^F@Orqbt_50^Qkxp+cp$degSasp*w#*AI-21HjPA)s%7Drx(2Cim9oo z6>B#f+4t&>cU+Yn81g;0JTsLVZWL7vtXc=T5tuk;W%Cqk8@6maJw5Z*tFJ}*QP1;i zpKZSQGKR>mAO8Tj?=i7q%LTh0d0^uO7dw>chQSyknhqE>PB@w`yO1U7A$k%$v{>D9 z*B8DD05!*%oGt1aSvxkW=Ep=%A`69G+8im-_M#9_cbwC+g|wls8O}4J>%cjH0F0Oi zngNU+oi0&E4eqa6xl&+4nCoK$bH;qfL&i*@g#9`;QbR+78uI}J*DdKa)+=s(;W++_d& zCL+KD1ZG8c@+B8tlRYAV-qQJ(>e0wRK5dzf=S@t{DH;#~4vhPQuruno-o(r-=VEj) zAK5nx01D-*w2Aq2I&_PL0M!{QWrcFtA~>Vh(A#DUdF`577DLH{ho+fBb9$r@5E;{v zKh93SGhpJox}FJQ&j2nJ_{K*DB{WY=&A6T~0@5cw@DbcV2q;x+5|k^3^0{<$_^DcN zbXUu!QgRZHYS#t;b*I(lAY~c~?s7PR1eKxbZSp_VMk|nYjF>#s^jLTYE>(Sg7b@)< zok+y^8Ny|Nz!0F7BSTW2pO~7ND^)me87t8e-{C)nNYAGe({r-J;P}X(0%eFS8RN2J z5yogRm+52|)k(`TjL@WS&!>vsFh;tr8WjO!JP0F=5EO7f7-!+=cN2V_e2Ec`3lbqD zi>kV?WrC|Sp~pkf%F)5RW$LrVN}*CM*Xo10OfHimn8df2a6P|NtyOJX2rvzOY-q66 z+N#5XPZ!D(K!e$AsPiQN1Vh}}wAHR~MKGIh8AfAHFaQMF7zK^E9F(#Uj8t0=Aw(xB z%6B8lQsR<#2_PYq1l7+JE<2!^O{G$%StwU4_4;h7GFPrxhMBeuL)Q(RV1y-MP{uv# zJFZ`MT!|z?@NhmGwB1o|Wlgr$NSQ`1V|B7lxmjXt>bjxn!P_iETU!np)lwsr6_iuz z!hh-SKOe&kU zR3NEMGc}*qY^PMML8G5mzTv_K$g*a;s!Nt4OLfO>*Hs)wFjn0zr4bJ*n_w?O0PtD3 z%v3qGoq7l%*2WDw70|+0t{U< z+Gm!yD6QKaPCcmLd$wVx=}+D9iefk%3$$ zWp-L{$Mcj7&!kM9Xd$u;resp4i4j&C_>=}|4`URJ5OvNKQE|;qBd+2{JleSgS-aFN zbeV{rGp2hO=aX}V!CW?u%}XBZ2;v11dVtIe6mekL#KClE*BtrFhWWG@yy^-rXPiXLb+PE z-I2kZwAXFugf@)E!!ZcrYTcPDR~ilUF$r+g@9_^ zso74-G;`^cWg37)FbL9B{ZZ?VTX$T7v1J-EqOK7V#ApC#!t$+$NYv zBOZy%rV;NRxlD}snf5PRvC0rSCC6k^RyMY*FbajCjEHEugI=*xWvzu7@n{57f)HY^ zTn$1epGgO;ybvNpmWHk=K?49G`woGOxva6p4cJdo}1DFHwfD%Bv{r7bfUDwh^Kh+2doV_6U=P47gWTGcO7 z@gRfkHA+lFY*HC64cvQ9RO5F~M ziA>5G$fi5gw-n&@V8xoL>$!B;f`?*5mSF^AmhG#cHgKcJvNNIyjm)GF0%DbT5+OQ^ zcHF0Qwp6avwR|QW5Ec>3*NA@d<&7Bt@&qk(KjrFP_~*-prDOqpg-?l@6Bt}Me)Wa-gJ zBd*Ewk6v5?W9X7Dhvr(O;W}RDgl-%iD{FD%^ zJWHoJ$uo2i*@`GKI*Skxj3eg&HC@l7hG+?JDQ|qnvNDz>jc+KIDDO9A4BYu0nqZu^ z%(T_yv-bKR_0aMBVx<px!{q=(=|F;EJL>poeS=`zT^3x?=PTyogp=+|>O?L2#Y9rX_ZA9CX&w1iweEBpXo9htN)efp zguq1J$akSp#t{=9YEX58p(Vj3=b}=#D|Op6beV<@Hu_(LoodVnue)xrSS}B=J)oiCTm#Awbn@-_?^;CU6LWohzYjm^V1Y=DjvXrh{l}0m`-n|t}0?MWKF9E>y zeAn|4LWZuHx^5bJu<#ptFYnc6e_h{qJ=#s=VvHn7hXlKfiK?pP5GZr$bdV_>&x^#I zWtagC?nT;YL)T^fZ{$=8(GtQ%;ehZ1)=^C+2!!itvB7>TuX1kG4GYvgswfU5; z@7HW6lH`Q;d;}4N=CsMawlpK*Y#!00f*RxLitH=F+Kb+HyVWxL!B@h>|${ z-W80IsT*m_XtiGH2x`iNXD3Y}1Zm5%noZl9p!6c6LKvfzWhl2&&h3mqxo*hQ_x$d$ zA=I_72$It@_#yxR65&ZiK~z}!S&9>ZK!BQ=9^v`a^QlMuZd}sOkTcYzpBikc)`>{Y zdChja5nC>u3N#XG_>_^HiZRNhEG3C-r<+@;$*6<+RlJ{U_u$MJD%gY-6j^MEmOLQYA;!n5gBMi2r?;4A=vf(E}J3CXlU?m*&Twh zj19%i5Kj`1X9<^-F=Z=b(mWD;7@=-)_HLP>V4;TVQOEPT#j&MQ&Ne}&_GO$`ZJTvz zfRRaAs(QnxEOH@H08mb<>wDdP4^r;LkR?VqiCLZ{To%ezjS$P!Ozr=e5;|7P ze8+%NRy0euGBTVQwBRvyeHbMc{OsaV4aT|Mgn|sJ6N06bkwNt+unIXBjB(x+Nt|)k zk2pXGEW@mP%{#d0)*{&-Mm1_f2{&G0Y0VOIF(?mv`(n|dgy?FKz0jD zVnfRvm)#vliN%HB5g{-%-89;Rnt>z9>|zYpnvF0PDD~Y<=wOU2Q&*9rZkUskdl=&} zABqu9Vnb&emjl_1=lj7$#Fk>{8ZmS&G_^8_6`#>=Wk-sq)0U}9NrY%yekuZ#&4i@m zdEHo@U`z<+T*O=OMDCmeTxtYs#7tWz=fb1Zr<5{wM(BYMtP`y{krH)NOFpBH>vdBk ziq%@BYXXE2b=U1?SS2Xs#;)hbtXZaMJ>1HqZs?rhQpMFVR>>aVTu{y!_IMRNpbCS*8i%1voUz(GvrHj&T_>!9Ha^ zu%JbgJ&BqD_10=B^46)@6kIH@szEkp4@`M$)unsBAFsDe-H`oMITudUeB2-?H9~|C zl+l=DHu?f50n25D%P412Fd>%6(UKW?wRQ;vmJ5%s^N{;C$yHFs;}I-D2_i19({L*R zvBZKee_SrbKnQeA(={zPjwex6GalY^4AoXvO+?t ztDx7aII^EkU9!SgE-flkk?~%vVoI+EQzp^M<%G*zCM9P|$SC?!P@_~)p_Ry50U!{* z&pH>(>#n;SYiP(4p?Dn0k|^2eKYmMD^P8Y@x!@8bgf*f%mom;|b2HBQ!gP%6`b-+R zAB++1R<+4E^L!SsLV|LnS-C82H;qqSLL*Ko)pw7NkZlbUP%a}}2Iu!Q1DS0AVw}rT zF*&hE$#A91F+u>1xjqEr?)pi^k{G4DXT5NzGYTN2?(Uf@QcDK*14>z2nF#RZg-h4- zH4S5oCCWnFhEQXDSs)8JdT^bnMo$jL=0!`oMw)6}#I(=|5w@-oS#QyEV~i64zC3a1 z`>x+uH%Y?;V@wE=%hd$Y**^puPeE|brAyFf`Ff{os2a8a0A<|sds8gNNN?u8dq(x+ z8~P{X-0N{6Aeb+f;#7Ky(m_Pc>I{j|_Vu6y=OFu1b1tLni!zJth!l(opY~NADpd{u z#4JLPfbtC-ClUgfoMXk#-l<5ZP@3STD+zse{!k8OKhhhTNu30gZ!lb*|`?-duPz0p%M9mqGwSjdh|3K?I223Ldq(w>7&>wAxMwmj}Sj%1qhht=X0%2!h5k z0Fs+y)~1a!+yrZw0FqJqeq*9Ca=x%nOvX9GW!-UQ{!p4)gphD^N!baK=n}6rvej7Xn11d|gJ@7f(?w zL;}pq4VAWgkrDo6EF(SMvp_vmTfQ_Qq()v;GWC3gk^E65w)@vBPPC*q8zH0-tU7Vd zU#d54cQVEH*A16TN04gzr4V8P@~BCZiSABtxp+7tjAfl&Ln=wZF6MchM)`4KyAxb4 z%2+G;--M%BScQB;lL1O*L7Z2(B=~I1Yf+VQGSaSIUt|bL8g6OylY4ny;Zke$0Fv>Y zRxEunCjge4?<$N&wpG}${I|D5kl>C>H<`nC)j7Y4Ii!97mWvj zejKgisMO|Suoy<9NDz7c;xcFf8@IffQ4ECB`_A_W;DN;DVtTO0A~JC$f1PxXjHpK$ zWdP{e5T!LgIxJ*Ve7H7wo+u%`+hB3jR(!69O zxLooLt zVf6C~m$EH(FH9_lX+47Zeiz?^){2Gf&`5%_^T>`1!8z-R-DN`U-QMy&Cjr^{#h0Qt zUji%(T*jQING58Yhqx4PgqtdQx)Wml4e=6OE@v~|)4yB>c3c*W#-Aj@2`XKhMsSbnTj3tF^vnQWk2@n^B z%hQMUQO^?~FveCUKRCXcXiLSovZ2-j>^P%7(eyLrOUPMqy?#PH^?00ALP-(fB5_GQ zPsWfL=e5!t*2vKKnx*1P)|)RQ%R)<2r-xUsTg*q#o;>Q>HAbmC0Za(d^sxJuFHD)@q%t0nNpF4HD)1T3FL$@q5mDLPmQMeR>w_VVs z>=i8pTUZ{FF@KRC?b>zUY2|4c=gjx1=SJg_^ImqGM~b@O^OLW?8hkpma&0<4(2FBn zw_bJanwicB&TFNDy73re6`9fu)3DO#7MG0CYGF2J1ET5q732Alu?6Cia~90GEk+K9 zAPxW_pOrJ#I}aH}HNNWtfL$ru)iNfe-3TMxbmp?dqd^1B8LgFyjC#6hG3s}Iv=A_T z{E&1O<;f#V#y4)AK7KgVx zYd7Xc#{xj0^iD zzkOwPCiol^0sv06GJjG>J-%8WrrpY9OVg(fD^;%)>*dmX*!rB9axt&a%6xIz7Q2zh zsupIaj~|-X*)ZR;E2a3m!8z+0C$cL=yHZq7YsIUqQRSKQweC>E!tXndHY;86F z&`O6IXb+cgM(1B%$%WvI`nA$re_9(jXVmkk=he%_p5gKE2At1M9PQ(S<}KkPC8{rCu@n4{U1 z^5K`B8(zI`aBS7Ns!$f9w?t-i5qv44_!7GF<&l?nuUNM!7`2%?cCa*cI+9}Bttv1& zZ@xqv_4CtgN)3Ddnr|Vvp!_*A(>_fBXrL!yLi36{#-g@yubx+WXZ!|*aT976LP~UAkKgwtq z&o6{a&ggvgzTkKPd(FqUUJx!j#5E>b&qGn)n>~3fog17xeIkx#d=DYq&xsx1`?AuP zQlSeWJiG2WHlrTKL^BMc8@g%XMdY7^5Y@tLZg{kxh+a56SF1+w<=$t0CLgR=ziDLk z`fi*dI^#q_i0)AUg~EEdIC*%#Q?GX0IOJb4%0#a?QTX)aT50p#tN$y$up@UWVuboS zN$Rm`VJ3b{-*Yk1=5=D_nJJ0O(}!L!oIW0Uch#1QhE}d!@KvIoYgdXLxa{lF1zk)n zXc3f9?bG*{7Aju%FyCj?2LQKTt(6Ngrxo%q8TICE$1z`k_3zspFVKz`PETY8hl9aw zgh`)=>ba#|E@_%EuM_iKTRFa+J9bL01G}H{UB^siHgCVO=fN4JQ9&5g&lv_eRg3sp z2hMEf#8K+G%@PX1{5C6DEzX`gxX*W;m>^kk>Qr&+R6p0N)4!Z=?5(*j(9+`Vew@eQWVnW3HaOnun5yp{MxNv%+JTvLL?%>#} z73(((A#+`xZdkJu$7W6(=@!C57;Sjd4(5B3hC+9?pEC>sIs%u$nc6ca4tsXJ>o;`l z>0<}a)Qu0uGG2T7ao@G)n>ps3_mx#&pdnv)jM}qnd!PQPG~uIbH_lBQ@9RDxOuZfm zHc}bR{P~`k@41GR>P)!-K&?2d*lT3%hNG|ScI!0&z?$Y%%Rv{ga~ym1#TDx}v8aft zSTJ8Irky@^xHvh{a7F92vs2?pG$POb#OtpBfalZ~P{W2At4uBlE*bUD$dTtJj?-Q- z|K=U>CXeio|Io=J`xkHyzH3Wd^4J-3rw;5bO;0v}qU${a)wNQ=-|u7wh8Cd5L)g_+ z3QN7}+4UHXT(Y4{A9v>Xkwr)o-cPm1!Vi8Xj_kYhn7O+|>t0q1vsOA6@AJ5J&2#LQ z6%``hVN*nArqhwaWPW_P_nDu-G8i(3Og+D6!YV#a#3)BQ_y;9t_>*s{%jQI#5!^%j{zaM$f!sU|IP|i2Vw}9MZ+ZRKWE$#?C z#6CNJa7jI%FXcC)%mn}e;B+a#>)~H6limSXBZ70z*<#Lz`J8&*5`CkI1AE{+8cw~! z8CzDJBZ3Nhx!7^RMPYJc=J?@7o{#6$c+z^Mk5QhPT5hN0yUx_n15LhM9(R#5TA7=g zojA7GD9ou7NlTzN=y2=RgD?D2@#V76nC022^6VM-1=q{P