From b4bc004ac9eb5ec95950f5899ff40757dc0f3db4 Mon Sep 17 00:00:00 2001 From: Edward Brown Date: Wed, 30 Aug 2023 16:43:34 +0100 Subject: [PATCH] Refine imports, logging --- assets/air_fryer_cookbook.png | Bin 0 -> 48521 bytes assets/restart_button.png | Bin 0 -> 24256 bytes berry/haco.be | 2 +- haco/__init__.py | 17 +++++++++++++++++ haco/configs/air_fryer.py | 12 ++---------- haco/configs/demo.py | 8 ++++++++ haco/configs/development.py | 4 ++-- haco/device.py | 6 ++++-- haco/load_configs.py | 2 ++ haco/mqtt.py | 13 +++++++------ haco/pulldown.py | 2 +- 11 files changed, 44 insertions(+), 22 deletions(-) create mode 100644 assets/air_fryer_cookbook.png create mode 100644 assets/restart_button.png create mode 100644 haco/configs/demo.py diff --git a/assets/air_fryer_cookbook.png b/assets/air_fryer_cookbook.png new file mode 100644 index 0000000000000000000000000000000000000000..fb2bfbeefb29dc4d414d0c1441b0a04f29b75cb1 GIT binary patch literal 48521 zcmeFZXEa>l`z|aIkr0xIL_(0JL{CAY6Cy@uhA2ZsbTitF&L|-XK|=KChA|kujTR(C zuVXN3L>(=J(Y<@}`=7Pmbv~SR-u14t{$I`qYwSJysrz~E=f1D&y61zAmMRkiI|B_3 z4U^gnWjz`iS_BQv>E?51fje=C&o;ovDK|Y;B^q4M%_ZRCjE$nEA`MMR6yu=<9dLc# z`Gt`i4b5#y>ffnHFVnnfXzIDtloi3AW-Al)zN}WqZGWbCGv4y@pL=l?oQ=U?UbO{X zl?4y!7pK+#N~uq+r>sr64wnfsgyp_g)X~+s1lGa6xU!USZ}h}BE#-WSmE@?x*r(oP zV)3K0vf8qk(TTmDt*))_zqn|D_Gy&0;!up#f8Jj|&H3*JYalcA^G=uoJ@xalN;>ty zfcJO$P63|^%9j_Zw{K;h14c?ib4mA%6!r5x|Nrme0qhRL1xA&{V@O!}Bk=RpQR}{HPk+-nV8U}YVrNiW zzUJs6FbV>FpvY_ggH_3cU*V#M_sh;-;T2NFL?KbpUS7?lH`=n>U$$3C#2zWKP_hIp z2_*`&gB|mx!zVtn*|#LGR}js%+H|7V8xDH>PmVlL9gdTAUJ{5!9h88ZdYsUoHWvEr ze8ZxhTjPXKm^B50$%2BU{SZINtygw6T3zJNLV>jGJJ5%}UtegWdDa_G8l;Pv5BAAL ztH5|Sb00o>^^L|bMMPSf#4NL+K(dO59{ONIm6|tZS~?%E)UG!iXXzSXUwa*G6G^C( zgQ?6TyKv#kVxP5|HvhvvsuZIkiQ!$oG~d^4H{Cvx4BzbkU2@->izj`#uRs2nIs-jY zbW)rvoF3yYa8n)!%7jN6hdCRAn>Tapj@?(C_{rbxF|fnkKkz!2+1BAYFE>e?7X#9& zKTn^JL&mc>UyJgM_F^^5!=an&bz713M?0kBFEu(v&K|&vXA_K#abF!96|Ne84b-pN z?>FX@>NS4@mj|q5%xg01qHz^`HHwG7uTUMs*le0ElkW_F57x^Rh#RQ&a3T|n(l`w5 z!f}DK)9i@}vOblJmWt1w2&B|6IgwxFt#IW}o-_eN3BZ>01g@3!%5CMc zbg(Z+w|uSJ{S}T2kuA`K2n55-YTaSv!Q80Tk~Xg4VvA>z+DvFn6Kncoh75&pw89oPbi$;0g-{aLEDE5`) z#btJJ7+*b(D+`8!p9;NjqjVVgsaq}Zx6uIAt&8flQu zXl8!U+atZc()y^s!OzE|5c+Cmqy!yz;a#orxg9>H{knXsZqdfW(xKJQVU>Rht0tGV z;AcoLNzV&iu!51lL(PVXhUR{Aphv;mL?i}vyqAk|@;1H*abPZ5s3gJ3mG3|ko%@px z`&66oqtGoq26-Ndj}kMKka}gXT{%4srFX&mYoXm3?q)^DX+hT1cW;7(2bL zX8|NXE}407Ys$HWsdCEyU=(=gr%Zhj&bFt`QxFUGa)x5?ZJapd^9vKN#1l)_ti1_pVU*e z69gx|K6P6mIW;0@v3GLG3#=ezk_hH>E;%u%Pj`})mrzr_Umt$DA_;52KB(Is%pQ7~ zGaWmG&1R8|)jCU`R%l#N%IQAR6!C6pdOz*tFjw~I@1P2Oy}k0ibMj2=kDa%ac}xW6 zI_x*FN?L&)UL8_i<7d*5t z!+ljqlrQ>P_r+g2a0s5O+h}G~Aw4@~GWE<`3t4qZM@RQk|8^kRZ9tLfo2gs3_>bnc ztSGr(yX=$nsugU90Jv%ueA_R z(O(J$sj1Kt*-V`S^LcN)O?zP3S{+?^D}elMXFl0Uq~xu7`9uXXb`8U#3Ue#$1@@@% ze8VmnriG5rjMFozbX;ofOa{IBJIQ)lnWRoqEi4JGYC{sChOExzN67S|=O%jnau|U? z?}Ekke3seIcUAEl*?aaphL8Xc5=^q{qf(euKd_k=CJ;vVo%59;D8c@zwW*V1kLNSb zP?CjZSTXw)gx+)V?h$2*l;GjGP zD_vSX=SJ2-Kj%gry7Z5_!O9{eCr2W}gMyi_(@I@p1fA(fW^Op%N;?^;r%aOf1ArR4 zP4643gamD8tY+ry5RztZzq|PwHdgLJA2CC21cwM=;28V(8SHxtyf#6C=iG;Of-rKL zUkO(kRDFeO=?l&Ds^_&fGsG1l|Wxg7yDeG8pWl;^Bn7L6xXWT zp+uis@4da5+Y!&a64ZJb#DQ=&Vn;4H|Ng9c4Wg;3f=*#j$qWX^!gHiHAnmHo=_yz| znk&oRO)>TArCX>qjZoVLCOZ-SQLZ@<$`?_zyvV*b>e{9Wk099HyW&;h7!Gv zc2Kd|f&mU3*_p_pBgI|4`*m0luO)T=M1MJ0+5=~Zd<5*Rz~1?uu6HIC7xWVtgFc*A z!oMn&LnyG}mW?Ks6iTwi_!wT)uHp0LW2 z3B@`LSeSqHQtV41~Q9ztMjE>v>E#$2-4m%dMv|NXgMY#f&E zIUPBm(nY5uF%o1+8F$l030(dNs@2kDl>=8GzrVi>H=cRMqs{=b%ILLnwKIH}a`T*d z=Z!O|V$>zfueL|5+TaF}t*QCXAiqJYsEpG*WJVk%5U@QT(}4$?K50g@prs zM{OD!9lYyB1OrU!ASn!2>j^lE=aDz`xD95o20XEci$b+n+A!v!p-&*S?v1;OgvREG z4$R|wrpxIL@!$vu>pZwLPJ=)kewQk5Dxm)vtiRv*<-Ty5e8Al3bY( zdCgyOxr~O5_lB&V+sw5v-NTIfLBc_hu`ERkQClnBA+a#ft`6Qg>!CnRUxi}k@z~I6 zz+%!9y2b&}HP%bprdBr)pG*hDJ?8G4HfIjRPVaXur`NTh`7ac9ZiUiDf)ZFYGD87l zpwO)Y4-|nWFyeC6uP*<+o}DAcwx&>BfJpDz>Heq$sn)%LyqnJQHVt(=>VLFtC~1!7 zw6~Xw-9SdzPyYhU=?f#s;|Vd(jpLWt(RwTaRy8qiyg8H}iEH5jEuX#3 zf9gy6RJq1mb*ZZ|Eksagt&PqH?HqKkfFc7ZXK3B5Pv?c&P{muV$TJbKi`zr-7CPIN zcX;CCN@P#bDA;xI^u@BypUzWCNh;w*6ll^LwuCYXV(lSuXP+SyuJ>&Va&%M}UAWO)-bk*j=l)n!~QrmTH|PgE(-F=pxq3Kc0e~rIAa)0s|C#L${qX8*Pey0UloCZ ztC^~PCXSo>OLt@X`ayl7^U9^o#W9+LJ zQhmZeAHmJp&t?C;J*jU77{=qX3_|t-a!{l?(wOV9LI&-mv)cwCqB&m*e35ycfVIKq zY!2#%r_MxMZkt~dS?xdN-}m#Qt+chP-tEIW4p>+)=gL~X7G!3~^a;HNno&|9OD`B00B(_88JhM|kK0#ZRma>VGZ+e~ z>H3{+Qgr3!O+((0LFetNlY_>SPFueU?!1iDX}mO~O8=5p4mP1ljV_kPAF%synUvoP zkd{aGOb-g6weBh?T3A`tq<8*MvcYg6>^aw zcsZCqky(NutgPdwL!a2>uD{SbgDq$uQmm13Wd?D9f1#hFKv=DvHf~fkjvf3u<4;F+ zbmA%6v#cglCh(dc;?K;ZtET)(+xM^aRp{pJiw*`hfYy{r(=+e5MgDl-hdG2ye^aFA z{0%}igBdVAMZp7tvh#^HscJr@N<{|%5`bU7)?X2Pw7=~(Yn5>{Lv==BHFI%rXzYk z%?c-h=~VYIJC%cUT)bYphATIU;krx~&il&5?r)IP5;#+xMk<=L^_T=bNKIL*R<1P#wlWDO+ecQxFAb zQjv{4X1$uNOvW^-?t0hI{EyK?tM8iLcSvB&W8#M0MlU=^`(qsr6J zoWc>p8~dXYo8Hu8a8MXK+Leb@{-gA>m$&02t4XeyqCjL;C89FLe5^+B{#+0m5kjROZC>~ z_WS$Un-*8B(O%f65s9Xb0VY!;kY5 z9U`TN8Z2sO+!MIWWX@I&pg-|1Cmw1PLgoH^zv6!Qr;UvhvwX`42>%Uk2U{;78$sJc zzCL}n%2tD90M@FPu^VS)`cmXzLQX8wZAx8wYY zeXK<28j3fB4EVbP(J#Jt3W!A(f{dSx+nEyE^B$|LF9Bf@vPoPY2=L=Ln$7ZW$b(8>KK783J7vXAetA}Ow5fb4!D{eOlS~RT;Ni!gU<5| z6$m@Q?|r4Yr|dS@&=`h&N_XpM24)tWR7X9%>`Od%?_5X^)t9`8)ylb4Fswqjq+ER$ z4j?G$Qbr3bQm>w6M|Y(o)ggv=y8s+BUFvS%DLHWxH&~N^M3D98t^!YDE}W72mfMq{ z8hLZ6m2l6e&*%woR|k4|QD>I!$RqE*e?)#ieZ?d@-1#*1@km=%I`Lr@Ht6sDMo>&q=0PaDH?9QBo4kDrTq~anWEPLx4`AFsu^-HdfVz)b;Vz0sP?1$# zg;;fJk@x(d|5L~+wR+|MHeC1rw*J3~sK0iJl8B7yAkkZSaR*DD zig7;n$X}Uh&ljGLFdwdon<&;?{myxtyGx|__^!do=IOF`?gcO#M8VvY{^6dw>&~@` zm1E9f|Fs|av+i4O2|MHEzR9(B;NEdL$k*2x5H~|=8k$kK%fJ6h14p$kMtatSi zfYAS(^gn<}nk8*m0^u#p=BrC6;OmKZNs-BLeBLSm z#Jl%AU3du~_=h~iN)Z$-O>BPl`W-(TSmV(SaDe8Hiqx*?iA*JyS$CHL?#0MZp1%6w z+Wqd;swuO-6S*dSY`mRsj+(hVr%y@${`73z(^FPG`jAVn-rC*05>`2CP30g)YeFD3RAh)7ql`M6SmL8!iUTRmQ+f@<6%rIz`9fY`o(_iGi0oNsmgR*&>Cc+?kw zzjvw{kGeU9G!q}9ZKZnv3c<{0Rh&$!avBrsoT7Oz=NGx{#reefRmFat$jjny&m-99 zT9K~H0O8>=ONebavF=K+0J>ek={X&^)5_trF=4274gp#0g}Bt(9}1Y1MBV`L1nj92 zwV&RL@45dieMf( z>e;AXedFrpwpviu<0`+yaCQIk>O^hTfs5Z_#=8{&bKB&GeC^?H1gMA|06r@e_dQsx zQn5)=v9WHUkX^j%Oac7y#~P!&K~)m-RMDgQ0RR-Hax7sJRXCfHZL^d0ljB}lRimy{ zSrV>hp50I&m*TcsK^z0nPpc`^NxgKj1F5o*(Z*u}8Lyf2xE%#n@;YRq0XJ-T#5JS^ z_2T7<81BxtMN#5~a6(gwb29*V0mK7jo7<7m)+rXv+E zL?~_gv{w6cgtzf{KmTA2tocC%imzVp&M#_6T5kX;rRTqHS-3XxNZ;^4|LVe?-JV1b zqdivH8Acr2+0{Zil3I<1Yjoq1{c$#&`SGwFAG2|;1n?g+?W?23kDJvlv*XoRx@8(P zB;UZG3JxVt*4IK^eq3Fn;Q`2@P$rJ~I8xtIz%L+HFDB$aI$@?V8`7_^(Ar9<|K6NC z@P#q3hE2C~XqlgUgV%2xczk>4Hm|`Ug}|I(&K#dr_`9@K2n_vXpDRJqDK$UUh=6E* z!S~*v(AWxa`H@rV`;i=vtUop?Z)e(Lja3P@o`An>dey*>k~bgRAgEgctdM(c>IU0x zT?TAP6AxS}G>r^gR0h_hDpPI@ksTmx-polaRu1& z3kjL#8;1vdrylyCxWBadk9s*CLf3Q1lHgT6o03Nv!4c_F`c?3WainKEu&p>qz>^a@ zUmw|MjjjF!7Imej#OU{BV$pglq`m~32iD+$?VCw&59v=-_%V2_*Hg?AwTvMlIhx61 zfUzMDL(wVN;m9zR^!z&&^}?v*xQYVZ!URTb$-`>wVp8Sij;h&s&Ox9{c&O2E>Dn0E z0`bqV4N;S&wj~JSl3e%JK3)NtQ`W)2k?A1MdUL)vZ9NAK%vB{|)Jz)vj~t_9cbw%5 zfHBbKPNP5NEbGs}KKEp*gquRtm-;e-NjdF^fZVfZz=fMR$#8*6&OHtq4ra(@@T=(g z?&Mk$Hd{~0PaanCm_%SKc zA$d0t1$*95FPZSe#mh+`w%L}_LSs7Z~mAa57r2)>BvOxgquW_zH|{aLLagL=2)OyG7@N|EfU%=cEL z<~Iv@q$I2H4WSQNFYsZoqE29rEkr6rdT+B+6uL-z`V3xRSW42`5Ro@$oOSd2VZm-77=*KKZM~fN3dm+r+J{^ zuq6Po>;b>dd9FFsoWw5C_hVOT)~tVc!HFi_dvPc)M$n45Aeqv!-vd7Xwc!y0Rumf0 zoT8MfWst`+xfzFxRVR3!qnrv`ey3o_baO(YjoJ1ybVzbyS0xeJ7>6ST{qE@^4Tl@m zuP7@Vz>M}6QkNv(>PeFH%xvh>_w~q*K(N;+yE`3>Te98G%_a*!|9IV^SC;a%aVS*V zriAdh`gAPL#|Jn^j(mpWVq+l)X!3p<WpCBUq@O8D*`QMNKJ z>`>$Xi?y1yxI;boYr?iu%xvlb5$)pR4)XsM`RSq!+lVBJmz`dx-CVjckd=lI)8o&4 zsP;AwY|eCJ z$!D5e)F@*AFGvL7XO)6%>+^(N)m<%>v7JCX)Z`<8tq|`x z-8a@1Re&9H*T(6yrSu+@{!7)VRaZw2(Z|a=bNk$eqf1i-<=oefE&Kx? z>jf#?Z_SiMd2ya8_v>*sq`EX4z#fmq{cbBPq2QyoF_t9nri%*OIpn&b=uCE+{-{O3 zHC#9L0+St=w>0Q^q@MJv{H0RrCzxM0B55n z-`|Z~ScPY~mBMs&!hV0PcD<4>)ibj-m6H&t-6siE3&PRE>;61v>j~16g|*?JwPQ?@ zx>8jLKukN9{`S8~y7S)=;+3qNh(sLB(%2^)W|0ppfiAqi z^FK$>C3*U}dUGt)?%mTo8T`Gmn|phE@K=M>ulTh~UUs>pT~__i9nJoeIV{@|1Q9%(gbwq zaqR^wuqpkMqv;s^M}DRg{C`Z2M(x4>Vue5+xu6v0eo`dd74LJHQXFbLc}^_;y5=*^ zPLd5b83APH)u zdwK5rp${nc+n^7lemeOFr9Lrrt8sz2e~aaX;`3-y7Tkq-{$i>m8Mg4Qs%qr})(U3bc|8X`&eSG#cI zSnp%%%PaO@Cgd+f6>@+U1wLdp+iZ3B9LvFjTiaF^cs}e|2r_odrE-@Up1e0o4br?( zu+cpIXs}z0`$`ofioZNu?}EG#&Obu|ZQk1}CjF;2Aw^<%C5XGLXFD{eK^U=awfQjU z0?^7Qz|oBs>Ww1tZT+e&xMl5TnB-UUY88vnv`?%rjTud-@0Q40?G?&ueQKSx6E?a| zZ&fIMbFA4M!+zr-AKdWpdX>Ck>uRI47uhd;v|R3ibgpGrsL!e0f|3vkRBWRd&_=-P zbBNeCYuE(8qxjJoVarO$k-`k@E`QV4J8O<* zO_Rl9ODxOI!uRoolO!n##&TD28z1{IftBz%=m69aO zE05~S@RNUyR=b(um&?-P>^Z)Nr<&jJ>?o}!F?;(JZc!$say-4+zD`k2XT|wUn5>aP ztn>AS*m9zKqUvwuEu`S0<2V*3@^tPj4 zvd1u#bi=H$q@CS;!3Cq}G|w&_C)qe}s=>pIR)>mY-zm!QvCA2ST=}(QOG${>3HpJu z{=Qnn+2#G%=t>XkkQTT8BIigl)6`w-iuziueGzz?_o*yPzp{3-PxhvrD|0EYE03NZ z2m4A@H~v;#SD0cvo3>_QR}{-3L0sXs{8g!zk|22d>wNv3rEwz6fVeVq|3R%yay2JW z>d%PE74zBdp4CfbTT?SX?%An`f?DX0H(VS=7v^`<`&?E-&$ z;NgtYVJ!1K@vhPMeKmp5F5%st8DvhfvV zyQH8GhjS4h%~{G)C;b@Qve;TzABsM%8blj;Kvw$FoYMauhi48 zZ}Y7=RF=g17Ezj$K{r)8p&QS}TfHsT)?lwCw!R5D)g-L0)JHZ?Z<*Pu=WMZ0d7WAg zO{*^^%cccYHJeTsK?LYNj#3WZcopT-*sn?bl;&$&)oujqqXQ*RSUhf%w`8x7Y%pwZ z7d+Ru5TdMS(O<9BiFvP$R5OO8?UDWjPYh+EYnF5GvK1Ur2!6d?Vm{u+<8(j6&r{Eh zjZ2FHO@^o+jw?!KW*o_|FIPNfa(reJjwlq*=frm~Q$aWpo^lQ8#B8utcnx&E|@^wTkXfBy8ilfUAevleDBPs_ z_}brLz7e^Jx>dJS3ZAhpAYUw}`0zI(cKpZcugDKDk+Ddk6Rfg}u^Q`|k4-yOIOS%R zP)lTt!ZUB`#`3bv0~0w7gezj(cXyVBV(ovxBt_r;p8syTJ5u8^Ze93(^qpHceIXbu zMG&j~JEzQJCV9vzI*gxdY;9Y05d9h=z8PetBdg2GN`c!;_^6Dxdd_GRNer1(%}*Y3 za`>FO%T=ak_CinntH+VO`}pE_=gkD=KI7&3wZC=Zd9cBurRMBb#xHtULx}`EK9kpoP&*AmajNY?dI;18Nds2q_S&Py5YM zGMVgos$2b2qxY$oiYxI}0))=eRY~KmOsrI%4(Z#$L4?UoH?$YN6=%1a0GkzNJI-JE zwaTqY=KttTBALVo;Hv8WEL7*a`&jXb)>&6mrQ5GsRMYccVIz0**gO%kiC7aX7QHf} zeAJgW^YLZJ*=NHLtbs@_*C#8K)2isFP*6&w-PK2;qN9>#>B(y$UyAB!&|<`L_h0Oy zu_AfXFPhYtKHBQEk2ez@5S>h+==g`WF&q>#(f(a^fuzENAnaELDF$0)w3#ZA9qXOT zZj?AnH<12UxF)Uf>}0UyR-DONNP}1Yu*^Fg{nwfLDIU59hDtXCZVG;G_UiIshq2L3 z)J!_$2eLua*mAC^6Vg(fH`fL0w*Ox1*_rf+lzf|qUC5c-?>4$2XrPpP>ma@=0tuVr zp7aBTs*r9>hhImfz*-s-f5R7qHX_aLYC-0n3%{?yhA`ZfmER7UIB=1?xrH2u+DN#l zjaR%f;&e2VcacpF8YiO?9Nt<|avtOtP5+uG5+jT=!qe7)GmuhN5lSnmDWjc}mh+xU!BNcAbnM*9=r zH<*b(Q=;QAu|j7yNGGEuuH7&8*LXi+E>y{ACD?Fn3dBLY=z;tw#cO@RNd8ekb zSLK*Zk7c-I(zQvIRKv`AO=A@yB^OL)LaswF+f3~&+Pq!z*Ja`4&<`+4xuL*X zvlIIDdb@fL$D3}%E6cJD(poRSo_iZu#Fikuu|qGb4IfVO*?;^I;0s2aK_un7_wOEqPhLAH zDL@90{sL-x5M9XS2^q=DLPL_{f!$Y#n|VAxqv|f@$W5@mppTFwS$U2_&I>Wpi6cK3 zk1?wA`EgYB*1^yV;N2P&s4KP)R;AmuW1lpqH0N(tY?tidz8B?kV6Qk1O~W+IiyYow zJ3TF52P?Q$WvE{!Oy*-}(M7om)-M>+;2lcYj_W8$J(4n^HGthwcX4u<(Rjh>vsI&T z6v^sJ7-cKR{_BEIQ5Ml;sUDYl5OQO3--~1$9%}FM(3;*0rB7h4w>8b=(JD;CYkKzi zh+?C?^=g%oU8wS2S90FAuDLtjT|00mDUF5Lw&c}JFoZGu~PT6+5Qs5kA&^n6C zpWSMhoDiJkTku@1POKWz73na0%_Mv>&rDy~(qC@MN{QX-ch?m5?-S)%yPadx z^{4Q6k>I-zU26M%P}rTMu%HEGN*CUzNuLLkb-cMwwKNfsCC>2td$_$;rtv~7#M-_# zQh24OjCnJ6SVr4RU_J5&gaF^^sAl`bdiF3;&3gU^^lH6GM3=F*;+q1>bvoAAFL@c! zPHeom3Q{{GA4hDTeKzhva`9tpH-p6z7Y~@RfPlq-!()n>I^-mJ312M8n-KBxQkg~V z57YSb?K$4bYQoQ!$HePDChZfqVIBThDQx6VWWLSbXkE$xU7ZNi z?Am_4*lOV;!|$tX>-F|V6BE3Kx9|Vix4;f#$X5sirAoF?V=qO7gQ!LxK}WZJuw*Gju|%!ZBO==Rtv(q zwhch!;SQ6w4cAF)0q@>rd!-pIk`C!%x{L0)heG)QGdTln%4Gq z7%-pjvD>RJ>zZj(K*OOCB9na|niIcN3>EfjnXvkB(Mib?&mTCMi_GBaXrZj#8>io7SKN5Q zqu@3;@FnW|`(ZStuweL55EXlMUYW<;UWSLi=Gkb3nXUUI#f7+#Xgs9>;RFOWGz!~# zw|Ni@239q4xVn4hHiib^8miURNyJ*6pD6B+IV$NulgS<4P%hwZ08`99%VZzqMf$-p zQU0)`L(-;+1w{=l6*R^DON@$oS*kcn85j@{L(tBV)0clKYT~1ksKo690eGWuc&&-1 z6Gq@(U#!Q8vsHhl+Oz*EytR~O{Vpnu^fmT_-GsgImZb7kmPO;od3Xh4of?MT8fbw= zy!F%54;z(_m&TrIIy9_J^?_fclLsvsQ3bAfZ;FAr+}Ec*W*=sViXxRveJ>Q#A&3=74g$+AgF^1-Tk=92=SM~YXU6kXXu z(V`RI%G5+!hiO_$WpSWi$1zoULesy!@ufP2@@y0|QC`PYbsJNxkSms}lbc?Fo(^Xdt)$Aqm}UR!kjE*7uRJ*L;W7LukEh09e@2>NgiollOf+i z*&qD_G6c;T#7~aaQAc^=W94?10Ebk_i5$|coQ;$=2IzBC@4g8hkp~5`F?Il$vU(|! zQ+f=bqa9BU7vu{~s^D-lt8wwS6}_ol+AToIKLmjFm6lnAx4Qp^{H_(*o`QQR{|lt8^keEu3BUbgj_ zi!~hI7;`8Z1+>C;QF8kjs+>T=bK_O*T%3txf2PXu0NG|BTdmT0Mv2^?^^OCmjKex%L*SOfo$mm-5kHh=ar#V`(@Q?fn=&&D#fkmsf6qApRZ5pL_{qf0~-2H zP4a$4deQc`&QKT5Cr5DmZ)oJ>yL zD(w_0qfDWugiR*PnT_L*j}A;a*6wv$(fmGDLQ?zm1dwY2<2OudNBnvH) zVU;dh&jG~=l?oGg81CZo-?gBadTWK$Qbj2MxoJ&JGNWc>3Y(`=`$JWrNQ}O@Qgtk_ zH~9bR&Sj+FEyim?&Q$=%ls00M<~NUhmg>@aL!}$Y45_Bd6q%n))3DJ%O5^T_C_}tt zX5Llsw`vjp<`qeWh(JQVKC}u;z6gvk-TMx}^tAiwV1Q%Du(PwXECnEI3JKw0(!kmBD({abJZ zqu8_ff3EBeiPkjGPsC*C^HYMhoDVVHH-<|r+g>Y*cw({FLmQvGB!OPknn z1gy_tv^pD+5CBMZ+MvC>?a&(qQQZE!O;D%YPy_HLH52((l7Mg@)5>7|_`6l9%8fMH zv7z4alcTAV(dH0F7$6o95xAWXWav@3Ot>kr7QO6j3K1vN2f!ae1}fa`FYxf+ztGvy zQTp}kO+%>LTu1EjxcJZ?syZ*A17a7bMQnXF|9G9uaH1`)(Z3vT2d`F=@m#9v;njxYsMU=;~%;CR;I)=CA zsG|x8U#nl=KfujiQuBBH4t7K~>W}xyDyOt&bfAKm<$1i0dJ;n^&<~mp+`#D+hrH6S z??zE7`9^+Fat`kFV@zWe)MJ7GEu(5{YLDAUsS@BRCS=d zfxq!%HB<9zSCkL{wV>M5!X161*{){>K+S%P%xDx7}uK!z#K@((};)ZEJP zUoft8v@A|d>w=oN z3X3ehc$2&_cTVG%X(=65x?iZ-;#9VXM(59eFz{p$BSKfkM~kL7Qm8X zVhikHyZM**;r)%ZM6a-}L zD*!iR(}kQgJFSi9qQyd&aYCmGGUEVyuduZEP9#F(S$v!zZ1h#4MjRbBxOAl~QRvD~ z1a;+uBbiFy!l4(nT6hpv6G9x**2>CXY_{7q(!!&Gy#9bqMS!_M*QZ3UnO8a{%EyiE z!?8?``dKUmPR;_Wf5=zX&LM$n$WaPxdSfPP9w;$+08iDB=ssJ%cgZF3OaY?v3(`M8 z2iU;H{^t-41C!6O2Qdq=!yQ(<$pSG}0h>BTr*P%O_BXOXHJ{i6d-MlPUU-;e_u3&M zotq=kUyxq6jEtV?=L8B9TodIa3bGHV51K_>1lU`D>;Wh#9`{yc!XZ1^{My`~nU(k81GqY@^27DKb7G-zD*>``;n{T)w~4A?b(boQRtSUmg) zXi`VxxPSYo1bL-K!Ej(XbY0y{B!PK~x7T4~OwWV7yH$7jWLW>P;153w6$hH9YwCrG}ym&|=uy7Cihp zQK->6CwJuV9x!1AQPDwq_~NTw9+FL-1F+3axc}xupu;gTt0oTAm3QxM-(K^Uegs)U zCUs5X`jE3SkVq^fEnWNaE{g(dp1lijwiTMyk42EBs$PAHhQ}@7Z_ea5>1mN(9pyf!46*R=Z;$wg|oe#eiz%zwY&rb+MYymq^NA8aK zUsh(=(ihhG$Cu`HVr)-_{Y7Suw487Ja6Zio(09@b+1`e!FhQyZ7obb)GH? zXx{3|;O+Cr9mx_F6r!DC{Eyu+{;Vms z#4HdT9rF7?oU@CuHJIi6M5y|`fTTMkl$JDlCKj%XX9kz#MB6)orIh{}c1cAK&8ZxE zQ7-19aSMH!f@VzJ34L0`#zIDU@AC~KU`W16wM&(F^<^@+|tY5Gw{ucDZ6 z`;5r$_*?WrS9Vew+z2RDkoGgakB&a9o&IBzmWTQ7EAi`koW-X(@EUTANo?b1X9G8= z@FT{T1036l2%_!ZP|R%&9(bCbGq|9T_U?D@i_L|zzypNNvxEE~=e`>anyE#%P48Sj z$7~&##JiXM9N()Z#+Awp5B~QP3JpK$@TFWbq4C;s=QOzjl6Zl4_{`b-mQ3o0QW0QB z1|andX`y!XAxmo)&>ZZ4jGfC)4fMt<(n=C zJbJQtp|$0i!YmKx&(j>G;Dg52n0Fh#Kucim&&-G!+HNpNYWD)OR`6~9JX-tcTU{aV z5CaozU7|}Rz(bhp9Kcb-BKLF1a}%+94f8?IkNI(`3==T&<=p3{&*HHlE3p(`#-V#? z;0x%$0@dAuI0Q2wmY6{*Tg|~|2txY87l&B$LCz2|_{42JauYSCxj{CJui z)eDG06t>Ho&Pp-M1#Y%200(Zmciw}D%zLxnSYL9a0qq3X=9T&dCR2p@v(hm=#Z2-k%+1DmP$4q%fj!F;%B78MikhvnO2j3?mgDzV2 z8hnA0qjr6W0ro5Vs{8&Yt4g#|lKkK6b>ld$sxfP}-SCX(>Ku!_@_j@p#Nwyx%zi(4 z54HyPrca}cnAm)$dzrc_+ON#-&025yCptRh0F}|O>VIYh@kLSMSdG-i0TA zFrqk?m3X<-TKy6r@0g`BLFYxI*z==7ivX}-!wrMgarP}&lw?K8k05NB-N{W6hc(n5h8cZ!67A9a$h>Su)EX_{z3np* zVL!^`LoC%Vt=Fk4_{Oyt;{V2>6!5`bk_wE<9H~*IK1BSnBapcF{}A`yQB7^{x3@<{ zjv(L>5Cs7}7Lcw8D7^?Oy@g&yI-w?^38)B)2-s-SI|K;5B^1GeN^hYgG*MazAP@ox zfp=}czdP>R$9T&f_ixE|XJxOo*Lt2gKeHZq`X?YZND}zfRoSX)`(1FaQ|jEf0-QWc z?7P@K($DbA%jv~N?(S|6KL1ruC+$-LD`a8;6RDl>hSC6V7PqtPOLAQL66783!B>p>PM*ef*ROl#*_P~7^nRYWIcz`CB z-r8}jbxuhufp4|k{#uOZd1iLI8fEKN%L&>$+X5!+x(q5z@NR(SRP)+O6DgrV8HYf1 zAy>u*uv>~Bj@i)i<7`N|I7iv9tV%4(3$3KS4c(xbKcyWc2~`sIvyYV?KrBTq>~>B# z(#bBND^<_PE!4m82g4B)k!$+v$;A(WE(c%jtOI28@PYnfql;PwhAMZlfnG-H(6**RVx5b|Gl9 z`Qdd$cq_mB!>BmDe}uX8w*{-e_htz;R84hZJ-3@X<0yycckP3zaW-&PhI2;!IO>&m zGS`IAw;XuLV>aZ)C|UmyV<{^mhl|N>m%2jg^f)a{ER%e~o?XHBc?e;I5Nqze9)!6_ z?(KOC$>#X)fndzn@nN28C9Vsdxn^0uhjWuuJ>WX5`%Q@;;HFVb5=oX zwgmSG$**=wN|W1EvETK-iVyQxP>8It;#O`x?0q##UxKI$sWSNbvbmNo%b#dl>v*}5 zX$M==v{Ts6g0`MvD5dY1FjT%?X2W2XXTAT_1HRn}aao6k7V<_;ETf5ZKPIlRu8lwF zJ9&Fz)P!u{^YKbqEt5&-*bKA8Mv-V%2LYTGT|YkKkmPM;Y+KU-a0i}ji>ey0afMDa zUR}wOR6(#0dBkQmc}~H5=+mMO=Z4qJ;)tEpJ>6#`Jw5fO1z8Z$gC&mWsP1K>c>Y zC-ryEFwhQ%$P7Q{nFtRIc<3kjfcrF)FcaqfzHp@x7M|kVLc-ok{T54jcjcCBuXV%k z)exXisPC#SZ^3P4(hg2Fe91uyPOFT5L4L39X`x5FPxFzyav2*nXFic5{bMTRi&uZV z-Az1da4x>sQ?Ne9(rGP>c-^C*NxPv`z%Sq*IYr2Bi{to=n0Vv%mT zMp{tnd)E|`eddh9G^@)Le9gt~j9&M5-Eyzc>Og*y&AYT_B+0ZBvsIdDmEnb}Np4ux zq`F!zko{N2tauYbb9#HW%Ilv+=soQXw;rh{C`2DttEaYxjMOm`H&0LKIlVpX{(*J4 zZ_Rv^R@Yts1zC+hO5!eEagme~72Xf+vr#BkE9R2E%j~O zSgtJM_aD1}@}15ouT$xBVT`T@@3}^Flnq_&n^2IP@)@-WFR?`~NN+Dkc3O8X{{tU2 z27Z`QV0019ux|7vKluTbD&31RT%dY#X(4*K5Gve;0UP`2grfaQgEZM5O!J1eIW75{ z(+vZv`&seQ&XvZwc+|Jc$&Cxzr)~I(9lyLhyA2=!gvZPRi|9^|#p$-TxHH!}?0La! z$n#roRSo^;#7>6)$~#(&gBIjhq1Us&OKdmo0Sxi0=10lG1+nif?yY zcgoomd=OLcPBSIF2C9LqzpGS&9}g!AUnvDetvb6tPE$E}3jEGdN9nRidl=F=C#*@C z`(#+^=al1tmV#^N?U*-~qHB)PyD*WOu^Man&U}*SsGo>B&R!)#yz;UeDdIuI8pm3n zWaRWzSeF(v-HXafP8w3Mghv>A_#j`{257rRphJwl5%2rZYk^6{)|$ugtFcUXIDb4)g68WwM>KXCK*S`H@u2eYR$s@0s@7 zj_R7S7QvGXPx)BE&q@~_{>eQdw10siEZJZDb1A#Nu8isuGgzE6#4yGjUQ@PJSx}l* zE~8lgX6^aa z=;O#9X}fcd;vs8u2`~;8YsuD~Tvij29D1k9zGIsAvU%b5OJ14p0--C{2mnY(2CnHk z2;SrgID0ft+{_bJo0CHf?7l?yU^OsCe*tzQS4dnQ$_};|EucC%S@$sHUMR zu#JIHzY@eR9st~46Hk~}SHQGrxcBzTZi2-e=%V;veh%5_;?7EcN!(cSgXlcg&&=(D zFT=0?3+4*GI4#YorJ=&J?<$eskl;-<&UiAZ!)Z1?xyjj8R@25}%l-Auud(^2n5wIG zDK-~7Lu3Zv#PIj!bJ&M;V-n}ldK4Jw+*68@DV_MY2UC>9pAp`-yFk(-&egOaAqXKw*PyrnC zRJR}`w^P9X>jiKABr(hT8qp{GHtXy}qBw240)gf6bW6NI=xh{^RhDuXktF=^ipj|q zP^=_F=WalGIxUB9xG0{1dtCTq`$ztb z(I98^y&f6UtnH;YxYrqh?L~C>G z`qOq?f6$udtZ=LZwC+Om*-Is06D>2CQimX5U&@vwx>*!Hon6t}a~{NmMz zqWtm+Aup07PQo8MajPQ2gDOB6*}Gz>C<>pFyhzRv@~$$WqpBprBpce>Fglgi?y;k- zTVhPG^>W@4thgI+kEK;q=AXKWbUaxo1!!UoAyP#Z4V98gc~oLI4CS;M-oE-@{)?FmC$vp z1%>hbVP1$P2e6rA#HN5rc~FXQh|9TXZb71&j|oh_GtIc(X+;yi9p7W!2O4O>Q}4@p3w>{T&mNEW#y6^s$25&T;QYFf8LoRUQM~{eHSg>hMwwhUQ1gC14eq`?E3;V{=V3#lb-NphV?$iJ9Hv`W+>ft5>gJy8|X;Fa<91 zIuv+{Rsdoqu)vcSgIkrSrbtC$vJ=1QmMlBF4~G<>k<0Jp6NkZ}!a>P-VJy4FbNpA6 z-3Ke^WWLaZ|0lE<_e3tqvX>wVpCR7Xc~KNJ>+@>5ff!O^PY_s4bt}Hj{~Q;-MkI+h z;O)zoeD@xEm&|GOhdtg4t2xK>4*#`!Dh+eBN)#HGe7^?yZSVfaJLaOz)Rh+dHKo8% zrzo-@;^tIdyr*TY*L^(BoF6w0^A+7ED%thb;GImlhgg4Pc=Et&C`N3DZOsX}Jtxwx znSAsOrDq5-c0F}7<%a|}Yki!ock)WQ({0PrLR@hd6RHH-75GCdZ1;!XD=(#6`Vb;3 zxG3pH<;7Ocj=j-m{D}v+0f>bd| zQ{{UdMsxK@^2bO|0z=OUKdFFXx2p(^6vIU%W4AxA*1dgVbr*~fk7-Dqt-}4<#a9`{ z(H8NO++}TIq;b*FFKcg{if%}C^-!lOsF|*zr4fcEK6HU}&xSyY&c^)kqb+THjqqk_ zIbMyikhvU(p#}(D&2qJr>{(gojNjfj*!lgqwSIIUd0a!X*=enLH-GXW%~5tHCi?+8 zm9mCQR%zAhjJIW6tNC1!>BF3kim?q?E!YMpvac?kW12;Q8$#XT;d{3g)~)et^UafX6Z3Jf^%nh8KmFgddc|KB=^-^Jwz?d3$uSByZz^$S>$1 zYioYoOU=bSyWrkGzeJSB}Ni3vyuiJ?=EQ@@`Z%udQ^F;LNb8YUUKuL#Bw^ePaQ-a_M z++69ITsL*9b0(~rOmNUExo=TIsC-VPl59rpD0UGp(S0ovXtnIk{Z?k8hk-4jRCu`O z4CBQlk`jd)Q1PicpfBFhsRgIG`nL6ZI85I}=-tjXe(q)N@PeLmyO}N5_T;S3qA^&C zia-rL-pYi{@0-Cz^5liJiBS9fT+dUbmu)|y=HleA%2TE+qcscfyRJowBrXd{EXwH@ zc-V*U7I>;^mOEWB=}KX7V{zqB-f=K09-0Hbe;43;%`bgF-r!>|XD@Cf0Q587dk`d} z%gu7Y3G%(m8HoD}Ky2hcHN)?mo9z82^?LHVk6ZBz0&O&>_Vz2 zuV0Q?H?}lw@dNr0%ndzp12mU-w%OH4^lKI~IihbQKj7hbTWy`8 zuocDQG)F7l6^bYFGrL+wcQ?tv$6e(Vf9s3*MKro3z7zJMNXy(5eY!abt6(_o@A2#U zB8ysqFN^oGjm>4h5O3JDX=xImXy`S0x6_Sf^pK`gd3QJtGM@rYGU2Ri`m9y2X~~RB zn)C39t0Ets9_O@)EnE&!Zvg5W&7leA8~g$tn>Pdm4r3)xW=eh=0yW#lk8Kw2Yds<* zxWisJAjl|wCvHR0L9)s*5a89kD0%IaW2?7_>#i+?Md z6rp9w6I=*@sgqOyv|AHd!)l-kG9QHGLV=TMhu>?@a%~BOEM6FOd!gOS)!4y22;?RV zh)_jRv{BP9hyb?L*GLk+$KHbtE?rky(kZMeazo@R8Guk$>)wpUsq*kcV0ARlVcQ;! z>`k}upue9rI4CMsV2{dYqyL!Ra?7o3G@$zPAz_98&+v8VGXFPjH!#)zhoRq#dH-32 z=p_*3S%v8k$s6d(WPPR-BUtXnF^;A>sHj~TGce@+-+Md%A9Cma=-eibn~{gsiW&*) z=qm|0_k(&VJGb8*pMr>d=B_X6JVvU4j6-NuQmpdH-r>M3Z`K>OuY82INpmU}4W$+7 z^HN>Cy;Un^UR}N4>Mg{&CS8JufXxvX*Axt%vsJUr`%}$g5k$J=HG{cU#M~Q2eodM( zaG=J^cnp8dI#TxEzl}$9OFe-oD2ls#6#LdYxW`4@;)fpY+tVMMnq3~@_lbOaeoS(5 z0+|a@H|16*m-mAlbHaAF5@Qw)c|5l@X#K|O7H+Yro-X&p+jf1hk=i#IeK?(J?`9(x z6Rf$ndy1D*E(0p&*9LeA0YTnQs-O-^gDlA+XrL*ZZ z{PgU0@AKobPQB{1oFi}gIrzczF_I@JKb;kuL@*dyAoNYGlh#yY! zoA`1@0ra3be5_Ps!rHs^HpB`F+~-lbK71_rV=A@T$^K=UOB~;D6({@Hlzgq%k3X8B zLjzF5t-)=HC3L;qXuIpBN_p_xWA&q`G&+^5!MXv3nk%92{?THdWaE37CoF0rLDqAkKg$!} zWGk)UP*m>qyE<|ELt5T{x)>+fWd7}ET3*1{e_``yT&U`4fNsKj|Jp<~5 zANq6kI-l0pBPEGWvB?$HmYc~t0i4w})n427I^~->Kg4T7QgL(xP}R^p@ND zrYVvPtgAfgA`-@PokfY{(`j%oq{l)d)bl*_`~{nQzl^8xbnhar20q}ynbzVE6P9jT z?oWJotNxNtL7mU|r|t39$Uh3qL%EKi+h<+p?Gcy}Rym2ptAWz0qVH5r{Sdy~tJl73 zrR2i&giplYFUeFXTG2GQ>-SJg+{v0YGJgEOz996A>dB&AtsCGT8O@HHJ@3b=xl75D zMk?cVeGeZ@>%IRa2_wcH(5LpLy~=v5YrCP|AQ+jGv7vjvJ%lXk{?8}E@1SO>YXX_( z7O&1wy^#^kmHn*`Y2QBu9FqBj5t@EbRVEhux%q-9fv)wuiI5UV`qC1yYDT4RHXo?Z zVefT|{^(2YFZL-v3;rvasb_(iD+!6Vac=+dgv;Lkzg$Fkj7rVQt086+;8iX0215&= z;pWLjbpL-fsjArd<@3+gPok_9fVhbazzo)+wO6|{fMyVa4H3qwoc{AzctE1hR~Z>_ zaqIfpdN|=U8<4@)H#aNN0q%kf2#0mhQ7G{{6C|ev$Yb9G&xzWSKR=7A9zYNs`SFfY61EK$}KrZ2#QvHKry` z{hRIj0CovYUPwSY-g)mdr9y+O)%gSgr3n;>P6%Yn z#C(2xStn@>9Nn`vLYmjJool@;lR5ZQ!kaSyY-?3sMLh4+NAN1Y@{1AvkZi=PogX!go=UC<4|NGuq88 zEp(Pi_ldUE5_``dB{sfHO!TR(8CyuD>&KE4fL?{HeW>xHvrcUm%cY?F0{!}F$K zEaezu)4Szh&vn=d|MJ;FthMZq(?QchB1%4hnx?{R!AC!Sy*>PiZe`Z+iDw{&;y=s0 zYLM0Ai`l!g?MyO0e}5^`OPg1}1N4AIMW)xFG6G&UkxKwRwbN&D>pB|(o1|ah=)qNx z50uJNn~@yKZa`AoR_8N41u{EE2CupYBj5Uh;vSY9{EgJ?KKhqEm=OM57birLw@hAdFAMD>0<=veY0;OF*n0mh(@TjgT z>pbU*(AT5%2Oqc2&S(@30Q4*ClyQNoG0DUdpmamXvVOutH0@SEp)jM@-&-BB5j&_vtu0GR8*h?K{^xu=hTxhhvtjl{t zk|+pq{TBpGEU%NFNhBhGv61&@qPg7?EhZFHKFa|6)jM3?+14&>sN_Zk*utU!>J9g+ zPH*JQ3tE9mq{s#o%wl%SsHH^brSCxic0?vaO$EXGBz)n?{;wy$XZC+a2R!+8X}9&K zJGh^eI?vHwFhe{97fsouPTIkuDj&@=Q@|U(x01+{|pj% z0;%T`3!0Bi0!A?zWJ6Se&Jj-H=pa&c9E7XjfGC#e^u2lyKnqFQGsAKj0vDGTjS1I4 zj{;eeO)jG}0yY0iic`E_S2m3X5$KR&m=B4>svzGq4;uvE%h*-crwck82rhSfo-mh3 zh%tj#$G15jJYnR!SY*Y|m4;=rvKolqJbFV#aZ#DAy-|DD^l*V0pN!<+zF5g~i&(_c z4;80h!fUELiqk;N%qTD(LiLlDt~pyOTeL;7@?cllj&TUA91e^;#%6PXUTGAEi`#AUSW> zw{LzbT-cGA1PA%ku}w?sCo_wFub%`3mi34CGJ%}x11)C^$aMZ6uu7n}`gaH5)j)mb zHXnn$CeVQ!yi%d49!9@7$b3;|Y?<)Md8bp>rl;#c2+l!fonDsmB-GqWyXF*4+AP=4 zkoVpNU3;SJRFG3dN!{g&_p~^uf=vdDv3kHx6tSYFkRXBCV<16e{plF~rQ$J7?4M^BsD#{`TMz+>qL5@`foiJSn znsxiemm#ac9f9Caf0Cqnd99ww!Y9T+eR;k$p`#;VD9kl8xG*-iqWX+(@aq&08vCkk1V0An^00V z%_h%2;1?UOG2fj!H}5`80NQdduv&|5hgqHmc{_EWwbj8Z=e;te0Vc^_D1I9x2{q2u z0jtCWMCJ6HZf%L^n*bVmNoYwT!h^{Kqu0v~>ICfw0vJ7-j&n5QXkxi;=yQ}d|Dh=` z{M!J`O$fUnB9-_Ppu12JTb4C0O@f!n>9oH_;vt;|54kaQ2Uv(!0A4hJIS8~jGRRmG zX7z*j`b_((#;bFOkPce_#f?28K<);IbR4v9k!K{E*PrxcsZ86SQbp$U{RVn=SD)71 zLVB-}>Nsd;69ap|OVmElzHo~_TTnVIaPeq-YXp#YIRNcJJ+KUk{h}s>KSyS@=5ZB= zP*>s5&IIbqDVe)Z2Y>SzK|6!DLmj-PM^;lK_Ov)L2E#1)u%BrZ0fmu3iXITjlJSyP zDWq26`5iX<;MEk~G3{1K@pLCSS}AGZRu7%}N1N=@R$1v0r2Iis) zR-}lY$?+_9^wv2bH`@?=ota4jR)j!>x?T&>?xpkYfRR=SMIZp&<9s1D60#PQH$uvh6<<5d#sJDEt05ZvBs0~vSS~-9Pz!l<)(uqRJ-KEDK zwWiUw$t3VLx)#zL{&R~af9stMI_X6#b&HXAWD`u;@vya}P?N|nlyf1!1 z-y{WU&=;|T`+LC9Ft+ilYZB{bKh#<@s1l}3X&527XH@`^#6hvlR-pMeo0~fz!tHCu z(SdJA%W|BOdF&q!gw@~9YO3}sst%Vs+Nnz8D?!|5UJ~gU^XufF^ou==E7TE@x##@t z&E-FCJY$=I*4(*D#B@c7c$oQOsBOZ?y#mvMHz5KU=SQy(*18W-CK~c?3&FOm2WnjV za;I6yeDa0Ezkh&Xnxy(dbr|mNrs_q2q3QCc!Usx}1*8NbGWg@e%)6N#Pa zyr<&g2s(giwqcYJ%=ZB_taPs_Mo>v9S^4N}u1|R+N}g=Nf^?M6%N^}k(+^@cdo;|E ziEdnE6;P$*2+BqAhWRW8@b*&^*n5#uNqa5V9(+BC`}s!4=Bj22`pc4n>IIQK{_M4* z41ig;U>^L7F|!=12D9Zle)C@>1PwlB6=bv@2Syu37SHth+LsP>zp;WD0znX$IjRlA(;S`lHTuJi?ucG zu6T{%yI4fyf2+Z3Q?Ta!J}sCa?a?>itC8h@3f^zikcU!Jj?Qb&D81 zek>#9guNh|A$wB+Gu>d?hO<&((oYmv{9r;CH#R{^GxQKA^2q7&%CTs*d^qoZT18i& zhGl~F^&E=H@m4znp)ZkZe^Zj&QM$OPuUJ0@i@iwdOgrbFS{>C|59{>#-%Zy z+7?Rc32;*DX5`CTHH_mSl1sr}Eim{qFb{!eTpM{Dvcb`|=%6<833)R6O(Te~XqP#$g#LU!0PT{mrHNS2 zC6^xy(7*NTU9Q$&ToZ$~Cb`qs_{WOzFM6MnJ{b1py((&RbT>5)0ttdmYRQL=LY_2? z5>LiCJ>}i2A#52}M;VYdRE6i;*4a_yHZA=esL5Z>e1~7ydnw)PJ1vwdD^&{~#&$oQ zEA+c5>??IX#in*b0mC2CJ@|_AWhd`34^W@k8PHQaq?d3)x|ik9Bl)NPO`IRT!Lmy` zSK|0DoH-1G9Mr8-;hHejQ@%Ma{9g~H$c_GjyqX8vJMwucXryk&*{`)+Qe|bXJxI8E z@VS(~gjHxOrPx%A=#bhN$T?d+#^1br2S&Y|^?CTLZpJ@)nfAP4%$Jx81{XV(cFUYC zmpXT$cng@hX}NK`ICm5)!)-ZR>0#VEyyagS(~0t%FSblyl%QV$Z)EcE#iM!ptM1b# zq6qYxqF05SOcNCd-((E!HTy&To3lrGx}Pk+$*s(IDE00t)5*jQ_YB0zCTOn1>h3XH zW3^1_&Ahh#sSnHaA{1bs@ve7eqOXtZPjI~P{OiGe+g85sA;eQFr8J`FbiW$5^&;X> z*2D38A`=xz;@gK$)C;antknvN1`Xe!2|#%elRh!LD<*X$D6)Yp2l$kCca^%rjW@U7 zE|(1+$&kPfQ;x|yW!GfSN&^(_5h)NIfm4TF9ubexRz?&W!|rZra9>8>@ZdOik z@@xr}lz(pcO&@zomfvQv+XW<#Lyxh|c^_3OSfAKt<4;_qB3pNd*?h><>_ zO37V@(;P=QUhv8r$$STMXaY=(aU>;?(^S*ip2jXr(wv+Q&N6*kWN!Xt(ms`$T(TknX_YK-w~$F6qy z#cG=&S`yWpr%Y4}I^=io43V=EG1~8H?cHy|2&bd$5{bq5cW8e6ZLFDDmO^5G7SNYs z4(?Ds7otZe%siZJg^a%+p&u7fF93lV%qgc^d|-hC9A)9JxHme=nJ>z~tl6yUPjFzrSR)(?j))CR!$v<7 z0fgI=4Q#Bnt>5sTX7_V;FVkX<6-hPGNmENP2~?QvdsK{F{o{aUB?an^d_>$=E%>13 zo~wPX0=p~{xRH0oo|WZK$OurMtS~ROPhN|jX}mndNsxb?r;M!2 zS`0n!76Xg4avBNeQQnb=X|<-b6fGkro^72eZ)kP(_?JOO{A<+t%H!lE-3xa|bD}ET zZOvDNiti?#S~N9fbW8U&)+AuBTxfdzPIs}>oLRR0>~dvxg+NB|--}1`q&Y+MD6^b} z9PilUx#n-y95+>w&(=d8livAfn8V2(Y`JTmgO}C#cd0Pu#Sa!LX0y^+;FU#>3~3$X*t=k_01HXK%&BDBfVy?bjMG37x64XJSJ!ZKdTMGkFscczBlN zSgUI&qoXDUbCN4roFPH7j0k(9(qxb%=4N+N)#$oR_B)&FrD_H5X(veZSx5~g?w5>u z)B;vmXC?2eF_{_#)m9u)>`eRX*)utux53jCXm_u+trT02hLh;G`$`AX!HI20XIPik zb5HqOp?lc;R>SxFr}2!VumZsIKrI4iemj|ntu!4e*3Rp^6yb}IwNhxI{rH=Ts&J-U zEarHQs+HnqC3TvOm~`|Nc?Q%fPh6G0HOG>@QEaNA;z4Ua9^p-ylXmGo6DU&g>#eNAZ^0VHKu`k@5%f z>%$~8Hdg+Wc?svJ)H}hbxtT*cZ9MXSm1r3bpG=_LhTWm6$&5ab|9TvK4;|pZXnh|3 z_DT3p?OcX&+v^D-O?ti6{b8SX`dY^#*^g?rS^h~W4gQt*`526oRXdGxcJOR4Q{sDF zp#+n}UUa_w^hNN#h*IZYj5avG<0I|)8;c4zZ<$tQ zWy^nS)rVs+7r9Bx_wON-Qiy$T7nv6Uo!@ta7cu#~_tBF2+D|nV!*;dAa4t~c3m>gT z3vi~#443zcEPgCha}^(!dbHf>Y12aYWIi3{dt*^7CfsY}T7~i@`57qffXGo3zGHgF zN>Ew6^oY9EaSgq^zIbKx_H4=Z^&rb=Rjl8=Onps;)^b3p;1$N94WrRi;szY|>23?SCn0!E_J~m^F5O zT~clkSe=&R*z0u^(j;kB<{yPvay^DG552v!Bv7<=w>(n&H9{4AAsY#k(M?=A8s|U! zfR>*9__>EsJ6C=FCMNx|hcS z4b$WGxQKQ9$Pc^{zlTxb%Oyob853IQGZh18hIjv_hyCC2)}|(^o#K(q9H{9Qk2-U@ zi~DpeO`_ikQJN%=^m?mXaChQaZFoqJ??}7pGzZJ^_Z8IaHz`2%S?M+z$*^8)tL^KJ zRwdXIOd~FGpInsFC~&7`7`_@njsCvBbNgTVy&i%A8pk4@Gn8D&{$=Y(iQpabPRTLy z`eTPqJUged182rPlbY&@dz6P*;05!=j@=rGnxkEVT0WEUh5QDt)|3kasq8SDMPOTT~&d{@__}xFv5iCR$_cf zt@Si33+x*>_GNtfAzyB;ce%nU$cj1euO1E#tbs<5qN0JT86sMJ2+LOZRx%o>E=7)y zJ}wS_hbVn3++N%ILFWG;yf|c`!X3^A+Qp##bpPZZ^zZ+GEP3ei|C8hl!iQ~-_5g@H z@Gb}vz%d-YwK%X(q%uyrf$*bo1+AJD1WSOP`ClVJi^zJ z45DRgjPkTB6$PltWflt+1@#bwqEI*WK2%Js zgA?#(WfqPQ7Xpf%gXkRAbsmWa&tKGxm|0tbmwy?+cbK(>hy53F$8}NImo;Owy#y9xBk;?gq=$~xr~IELY`xlIsfTZB0(&NI;47H z0M#oVEidWeW3JjZqdMDZk zTSTjUD7d1l8MHT7!^Mk!9fA5~X%z&>Rst2Epfr@tt#d$wl?_phY)M56>=m(J>cXx1 zR4XO0`s*O_<+~dLx}mZ-Fc$AYt-u>bxo&&$5@5`vLgMb#5G+LD$V$s5Ew5rp;6|&v zY`T&`R~NAfN*&gGH{4#a>XaygBySWbs7?S}i%mbvv+_54p!Qe;`aiueRyZi(;->Wb z{J?&R05Ste=mhj_Bhny10zqaN2H;(IGawhhfhE452G}7K&4l9>2cX!y+HnCItSu1O za`!L25ph`JMtVT6-{Y&dY)Y^N+KXH(AfAWObR4jDYQX14qOc%a`VYsZBPr8djRZP4 z_r}!=JBBP>Gn}&?Zp5$}EFZqW$tk2?3nG#lqiqlwS$3NM1SE_;MFYI1#?#kF5}&M& z`m?x%7=Q)XPPEp80o6`Iw+8Nzfml9}RMEK@(gFI|I56mwbg1DB_zf7A5}9wHiunyH ziKHn8SF@@pkZa$H+CoKE9r(Dhns$LTsPv`q@zlM6!ZNY$z^B<9RFx)JIJyh=#_o_- z94NrcxVeUm)^Q+W5l{d^ysav7%x*S-3>i7l(+wqDElU5PJ%76kLQi38y;q4%S1bNf z1ou~NkfjWGOGE_7*`1_3wZ$T;mWGOOZ|;HHJ5&O=Lu2d;D>K^lP;`j-FT=3G67($4 zk2xxZZ28)rcC!-!HB^5`sZ{MPM3(wH?e;fI*VG<~urk%2FJt2Rn_E}2AnqHLbPZ^Q z{M-Ha_jUn8hHK`HI|GW>mcw{%i{I3r8U$Xn2_#7~MG^?(RThb;J@papKNI)UI3n0b>g=&2;& z25;EjL2dTP@puORLE3|7;dTMcosJ3#KKb$Z=e>7104Fmm)pZJ_1X*3C(gd9 z*VK_ARRH8z1E`bj2FRT&!6XbJ1Ju5fr&{RpGBZG-e`xq9^dZdQ;hh+?Nh@gbq9&1} z+@4Iv;tJ>&1(+g}EPszn4?t~nb8XUBapUX7ZBX{5o45csWCH-&fHGUrhctJ=U~nl_ zz1v_B0W&Ms79zgXuKr54uLtO)aY&0`&So-O4tlM!-o%@u{2#c@Z5-M7WVZyHW-UO= zf*&AYFlmQd)-shs0mZ9j{&0o7in%>>)kDTW=1>K81^rOwl041Kbz-?fkKdzofU7R3 zM86(%wqbIu7qDA{I<`v>Cb3A{JBz`=!4kvhsJ=FUQrkEFbCH824^mQCdcZkpsfux8h5& z-w<;x3rtT>gU`|Mb-nvuUX8Ndr?4CnRo;`>aan?w6M=v8DPz75LK5WW^74n6qBM@k;y&1)kg=Ljm4n2kIU3JC`7Ub6j%WSBSUutXNto2w@JhSJ zv^{KGbM;!yD)K&FiQwgBNAyl@{Elr&cGXDU?aKS|gBSGN4rN3 zj#oZj3rZN6iw-53>;B;V`Z#j5tS`wYsb1OHy#29vfu6v|E8C!-68JEkgOFx%96{oa zof`*R>dK_`i@jjkjo-0l5q%N>*mZ}HJH(DB700d|w5GVquCNgNyTm6eN3tFFj|^Ju zrnN-OeM32{2|&#{%f6{+W50Q(;DY)(Q_wz3mD}@`vpDfC@k_VeP<5!^H3hd(EWmYR zw|C>m_nTksspDL}YV+-c5(~e8AGtGa;n&-o%}sLutf-gQ3)LLo>VsD>)c#&$NsewH z@EbQ)*?mwv5M671T?)@>D;ts}un&^osM9aqs@0RM%<<0e*U~p&(Gq3x`gtnufn`O# zv)f;xmaP>2_ZBLp8I76!Ek(CV;RzgOW58~uJ-7NTiY9V~K-1p{q}o%KMrE#}%CB$A36Pv7RP0 zUt1fqUD&QtG6?Do*9}l_-{*Cg6C4>jM%<1Mlj}B-35??jIGvFjSu~le55%pV7lLPh za{AORxYRXw?u@PkCuB6~{P4@_UQaqJs4b4HDL2=M3(6q}%60Nk)y*7@9vRPw%qJY? zDG^N@r|VS?Rc z9;QcyNa$^O_nz}gIId$q$D;;W{0Z!uF&{8o+e| zI7X~Nl_%`Y{BV^EVGRyKVr$7QVbVS#j#E6N6IXd6X2dhRs#*dlmfI0?d-n`7P%UL^ zuNm-))sQ_!zTM9W`$`2VG6UhXA=ck%UYCp{jMS z|9^9Ki)_XI&v15Y-vX@aky4D(OlCvBH*Xr(-6M9{;o)sqe1&tp4CZa!6^jZBXSvYF zmTJGJL+2;d*whPNu{DoQT>0nvbb6AH6KBAv&gY}p*}!p`$VjQtZg$+7G<}&;w1Ox2 z)D_tsd{@S;N%?qpG`A;D^a$>9KE7r!7O8>%)QnkZb#hV;pIU7qpQg8sYE1C@7#V`lAhJdD1~kXs*p0d?h&Y4plD1)KpUZu)Ac zeo5BfC?~*yka=r1F6$#n?U-Z z93!kuwW>YTal=#XaO5$q{o(tezedboBo2mA+Z8-%EhN7tC4|vvuCY={P0xAUZkhOA ziLn>zi7g6`HzQ;r>gC5VO2MKL9bOZ1PH?OWgl0A6u*Bcrl;7UDK!LkV%Wuynjc-$P zea#(?sC=(^JlB;oVW&nsRrjwGJ{&mEjV(|~b<`t2(tVvSlvl$Aquw{G(?6+X3;tr_ zO;qF`u1}&&i5c;Inw|N#i)*k&OxaiVX`AyTOv9#_U%th4NXLgb#x-)R)U^#*CuXXcRK?-6e z#qpkvWgSt>)HN_#FKamg+TX(5H0>Vu*sZX+V-ihN5RtUustCD$Q=(n^yLsLUU736D zauda-3wPooYm52fPhKO9f=0#wGD}KjI(j}8K1F2B#wy^FD0pOOaFpyYYY69ou8m5d zjc1^vb>b3HD)N#{TYrTXZ%vZ7b@ITKx>Iaj@1)XOV%kpQw*_Rp4YmkZNhBSX{74dLW5q z;w^E>ugI%g`U&o@Ku2uxGq}A&#S$ShCU1A`RNue#@hK!9Rh-^mr-zd=ajmn(N&Ms2 zf1i`o*IV}NZScMSxTW}Y`bu3z7%NuN!pKcdPv>a;6#r! zwcqP661i=nw!eHbjqBo?&@tgGckpg;uczpCci)|>x5OJl-M=eF!f#^nd$TR+YK-3 z1<|rjx+vPSfl0w)G-J=m+RKN7Z#98O?%^206Ya8!i==Ga8R=0Qh2w8TUibe>xXLGH znYtDzYxn+htVz-*J;wcfZd=&~P5L{w3h2j5lu+nAMz-ye=%XCQL)&!4zPk7^jY;n2 zs&4-&JNF|CSFDT`KeI+e?zR5H>o6v^Rr_vhTwYcsQbHH(e46U^J@lTSf}tJxOUHAcu<6M;|E>md8%ZvmuDSFST> z%~Z?s7z6VPy%RtUQtGoxFoNkyJ`cp$*7o4)ZHTn78dEp~g@OQ$i?~6a# z->9`c*pl3TI-Z1E^M*4Z+eG&F;J--GtxdAtbT0**V|V@bM*mo%A77eJeQb%fWv{sE;2{Dt97_HLQRx5~ETf}T)MEHNtUjIkG z*Z;mB{a^Q!`+=7yawg~ap3Z!Z<9HtdwAB$CO4V1@ZxT%LX-@DrkFhE=fp=Dmbnsmd zyCSv@;&i`n;QLL`TwS|{1+av>!*~Jgfr@x%ww=46n9;GZxo~b4sq~eqV4xfd25PZHWY9!NM@!cL2MiF4$vLe27PJzB?55>TDJR+CAnm@H* zx9?+2QCLb<{5%miw%u&y0;n}t(pi!;M6?~FV5autT;^ddT1;5o*qDfzJ5>wzBcP{+ z1l1-#x~hNaUpr^<+?+cm36zj3h(eQ?|KW@7eSzuA?aYjOifffdg1gqW`n_|K9jGC1 zw}i``DfVbX4OlxlTeWyZW9y4JyMJ(ObH*XjD#6pY=eLE0Ng9oFO3n3`k;q1l;Lvq+ zcccpmbZ4`7s9_Rpn%d5_r%#@SqNz8n>-VU-K;NxCX{?2A7msQ+m)4U{UZlK*(frVA zqg~#NvT#yS40&I4VJb@eBe`!rWOf(ZbEvV-k)-muwSx7K=CsD8wg}*}xA*%L7;HpW z1v&?dJft!GR-X^kf^3ZvC@%@L(L?O-6*+zQmX(6Ew8vMU3%>-=xU0;EYl6~@Dk}+J zi^n`IFk4jMSF)0OtYSNSUjvTl98kuSU!B6&i?HYXgd@k4f8||Lqfa5MT$;PEHc*^R$cF$@UM#lJqH@6x+ z?zG>i-^+_Rr%w!pEiJ0=6n*mtYWspXD>NO?Luz8F)Z0CHSr7%IRVM%(KpwZFcj(q< zP0^a(NWD^Vv66Js9Ga)ft)=r2FZzqW|H&u3f1mpIKoVrrla`jP6h~(H+;tL9b`knL zSmd6QK|YUtTkVccDm?va4RDLPX}ga6@frUlPX53px_QruD+V>Iu@)nq_wg1a6}YKq z*OK#`?V>sylKBf8JdUx^*M9KY^&|C|QW%dDU>FQ=h z76jMl0kyRtDzPuL6_iJz;-Tyjgx~L<{+ao&G9Y#I2|m%NJphnk=Gt%Y5ulvF9s)FA zG*DwGh`^BV>c<|0HZWI!qSOZruPERoEQYc_f5HT(UV+)=XW+D-3L5~gbO3(zB2YJP z1weA(3jeIRwdM%%>j%BQ@(=;#XZtYy4@YG$kFaHuqQ@U2G6ZYjG6u6e2gv6N3V{0n zX5M2sc$EN|zMw#ah-OeZWORkPT?H4-N?5@Av=NQK1n|H~K|l)32Rxxa%!falxeoDz zz|eU(q5|MET0Cnweo*goXrUFD7Bc{BngB7q^!ZMzzeoPbPP~GWS^)j-FdVcJDSbhW zJy!}ju(veonKPZ=;a|+$hW-S!P}3XaHcfUjR5pvR>GXm`3dnKWL%<-fYE!53uJOb2 zW862_mi&euO;ylWYpF|aA=%X%v(hxD1lxfCb)Y}j_gw4#oBs~jwZ#lyc-|-=Sa?FH zw}jjKdzcxoC6iPp&fm;>)bi^kW@5yqL3g9?j_ofmX zB$ImmXdW&Ah4QdKPcjgQK2XBuA$1s{Yvb=5-dh4@(K6C-2+bbrgJ1y+miIL*U~9|W zoHd6&o@86rV=Nc(?w6fvU?M&kQ15UF^AW$Jau$oT;WsTn0gYe~V9>yRcEfs>fuX3v z>FaO1y?-4a!M>cWP#p9zrM_r}MyS_qvEQLH3EKhY`g^kUkZEUaXOhP!C;JC6!wfu5 zZQ`BjW(6t;Vz`*;QwM^9>M3Ui&E(?~5?l(aH;|1n<@d>+hE#gqZvE3UkoCGS$66n? zrLj8T2(nkW?H2_750~rrD8jile!UQ%1E#d|AW4Mc;;#k!D#8ZJmQ7y9-bf6HO8*JB zf$=vdi~3&qK?Zjo6tY1rnSKQ!pSwVD^Bxn|`DZZ!8hj%KfHal}wUoCsHcANuHO@Xg zYTz|`D_s}z`$Ewn?w1gr2Zy&j0)J`t2FN|BqJZ|}2d+G*#e!l;I`|f>IFj@&Q!YL2 zd-K4FQUP`uzTC&_F?4`X)jH!|VmD{$2$+=qLqSO1y zRR)b}o0&6phv>iLK$%QL*}OL$lLMxu3huajQckAjU1U#CF%N_XGh~i$&*g^h+wgjm ztOxf3YOd|NeC;AM?L`Xj6m_qE#g9K`$mz&B=$@ft4iZm_7IByFQ0w!4-|0RHKLfhq z1+()tHz1~bM;Qo6)PXF)?Cpu#ub{fv6WH*5+j6iOU}IdjLF3tVkUFZM$jZpr;9!l7 zpN3OIdc%k@p8JJ;p=W0!Rd6DZAX!LBx#Xzx zQWl1-n+3HXWe`&y_Ls>}*z5=TZCgH94x-EztazSM$P@2z6)w03=`JytCdbny0d3}S z2T*Q|669I#N##e%qu$8&R`Ya3$ezXqpX-TTh!rq=0CXIIh62OKE7!(4fj_rN)*oaxA$+20ec7=+VgzB8h z^80fy9g9$fRcC}SOpLwsNr1BX-=bny;y9$_VWmQVhW4it9aU_+LvP1yl-j&kC(_BJ zDPDZJ0g>R^`#xA0^+S*D3>~|xJD=cR<&Dn*dW_UTU(llA$H6hcO&<^Y z0R>Nexzp0F-2Ke8Z9IX7YOo8lsz)Hu4DHcWitR9nZ_EP9KA<8-!K1$mUS*~X zMFeb(jz;JZ9_RI3hKJ>7(m^W+{I@XKFiK_exCQ4Z^u9BY1Qr&l+GYO3xG4b}pzJ+) z2i2APmOgEr|&1?xMzAnH#iS~eJ$?BSx}IvWVr4qIm8eybtN7734)wSKQeV2 zu&@uFn8YEcfQmCRnOA49U|M(@(C?vR>s;(lp4^XnVn%(qr>iUUDx}MBlXvb14-v-{ zK>7J#nP<3L#9wKW#@)S8_rqlzEk8d$!z~W`pNU9txQaslJaqgI;>&;jTSruUiqq@5 zTlUb(&tBs}an*8c-?u>C5@|m4L|ef@`@UGg8i%7EjV~wzRN_f;x5n9SfbuQ)##{X^$*t2My!uC4gF>iHvV-d< z=vOvk$O$lYcB}2THV08hS2TJwgtQ0SJ=ri=9_KqB zTq#T=Zl(7nvMi!9gJid!nCBY0S8FrOh4{|xHgNGH}LQ*H_ zIAu#}CSOUbh(!DWyD)`@`yliSXc2Omj9>o@3W5XrY!m|SDqS(KqtXalk@wKuO6*T@&m>D zQ^fbC%ey-wK^pQ_$hPNuPHy;MJiBi_5ML%QDO2Rs8A^1rW!*W*qc@izuhZW(G4#ZS zVn>|niQHU2pcfKQ4~mJ3B9lnX%VXfmyoT>?K-_B*Xdw-M`-`+7NFsPp6iZdNma`7@ zNOz<921Z#wJPc_sX7oVHR&5OpFfb_o{*wCFbI~uw-Rsc4`Sd78!L?;)%ge2H(K)iBwA-3YhFEp5t$FA5}-&YHbe*5C(h5 zin7(Pgw4&0$mB^;cO?dL-(0Widz8J#L`22Qp-mh4&o(B{E|TiFc}eP?V%x+YwAKq- z**Hp{r?rHlnJ2EBwer2DH$&o4&)pomp3~G8xn;Hsx;F5>}&| zE}Nn{@GR(3OME_lOamX!4jh+XIjQ95Fum{=-83nufEpMO=9eql(^PeTpeW9xGp`DU z9_k_cF5HbATnPvf^TZ6ZlOtIy9Q=!Ba#drztW`{JVF=n?&10DSJJ`Q_CtJLY`)}W6 z_xWFNyFks&{L0g}2N6 zfEs50>D2cXKN~|v)T5~YkBF^G4^rY>=m{2io@*rb`BmMtuZLx1ccxezm#%P6jw%c_ zru!)%^=va+PsApf712+%*GrYH&Aadymn>Vw`qG;l$ZOu(Qo@17t@Ii_LZNn7kyC-9 zsCVkYeZF!X1d-`PCFFYaNfZ6d)q%$j`Zd1f+usA&8w384B7LUJLeF-hhlrV|NJhq$ zfPEtC$dgvN!`*>2TT?OIFBKVt_C%zQlJW*t~q7WiNzk*huLap)d>3j;4U zWi9OV&}e>V62%W2GAPGWG4dDFK$R&X#(8@ZOWf6Byu{-TtLmcJ|Fn!0Q@gD}ry{=+ zJ^GCX{V2WOuL&dDXY9VHC5)0?yN@B<7PcxRWswGT32gn01O^@U%Gn9 z%A;4Pb3RsXv3hFU`PpHO)wTwiYy`T-}{-dgOHN`A9Z}|Nu?n>Xlh>Bg+@s#7! zL&I6qm(~-NS0rs$)<={sRvN?P(Z*we%>EC)#mliM&Y1}^x=$4ruwCY|O;Z?DAG@u; zmW&YJH_)9?hns8KM5UGIG?A1aIQI{zl}^^ zy-?|83dg_7tr>c0;o6O}yJu&YTkb%96_fb4GwVXvI6Cf!RwL`a)aomAu0q9uyRPpg zZLIU3upT)Uy81@e^uH|ZX_UgGHGWhuJ-YXtSgs%*zin8PEn}XyJQc%NX4jVAKNtT{ zE-}5qMS{`B?O!oeobVSbK1m7X^ys_GmF4ji#9~l5x3}XKD*N`{-G)BbH|ulEMk7R+ z(w^*;R2V!V`nRT`_f2_C3$c8jJg+VzQdvcI$7|hNLgH8QTED{Fb z8qblxNRqfB!zSJ<`x2xc%nF|g4E>e}m&bky84lM|;Jg}$_l`Z>QKaXLe0U8vYst0t z^!7&14lZ8D(d+sZz0rz1@^bKX0aEXiNNhk0+~dOP=CR-$_0dpyGdzd?A1XFmFVpoK ze0@rl^v>7d?Xn5SNmNs3PjF?R{C+d)+4@(Bsul0Ma915o^k+}-x*19s-Tp4Ec24^X z%;r;VT9G{|-Kqb%f44NY^m>t?!0VXn%_oJvDoo03yKDErNxRc{;0RRC6>$s4Z&~U| zQovxz=U)>v=WE_+ZKsc(r8}h(wNxY`~|UD#J;ktVC5+_@zqm!ycu= zFzb!rix_LVwL^O}-!IvF3JN;was!^`zHkQ*GZbp>U}M*d(wJDrj`^{)2IHUQHW8KH zCv8iOygg+*!|J2ym_qm8`##V3?F*3&tt288S@+!*jlx78i;IBAWZ?t2X)V3Y?58xT zG9T@IZ|4~vviCmO_8q(&oxx-4RuX^S#!rTV!6rWY{QWo8pUyHk;W|90NVxU(nSndt z$QxzycN0m2wL?UuHT`jQeR^ugm~9?E;fZ6d=s-XOB2hiypzc(~_atf|^M++5g3gd$ zfS+2(>tcC}?bGxBtq|8D1>bsHbQ$ygSYHuBT8wOnX-&y0p(J2C5}*4ed6viT;1ZMG zDf;;L5xI_cuQwCJpH0PM2j_jxovYQ>MIaq(&&{*D8T7(@1NUm*BzqHH35N8_^xZd6 zW-!FQYulPB%I$xLi#-bzt(iJ8xyIO173iBxyogxjC9N#aaaX73xmZQsz7xkMv&2S< zJ|2*N*YNE(a#b<2w@~)Z4{0Mj^Gi@E0#$WWun_B~Z+qjB3&Hvdd6=#I;xaq(=Xg@1 z&v(&n1_Oh=E%(FJPkuqh(+W3%8SL9yxLYH-M)-?MSpnQ0I}Cc(@)GZUXic<}!?p8< zGKVggbkTSyVsJ_vy2X0JLOr5uVH~eOYcw&x2)p`~#$e=2sIwTf%fIaW42(`ixqFg^ z`=0b~7|^a`%+1@IAFzpjN%`|`d;3X+7L|PWnXJ~BbNy)rjEFXkYegSTeCeH^kLcI9 zzgfm7;xnp;#{3H!#qhr~Y+al#oH!A}ndGQj3q6uj*63un(#@=ocJ?y`rfM6tD89+` zT20<(+2t9=sJ%jEh0Xgfs9!YHPSEdmmp7A4JXKRJ^=Lc^ue^v_AB)?cYV0xS5{lqj zyAP0w?Xl~Epo`&_!sM1`jLKCIK( z`e_`Fa0xyFPJ3bR1Ltwqn|3DsDza3uqRe6hJg;$_7Q0cL^&4-IroS}fz>oEDw7!p= zUW{))B5XUdfM!c0Qm_q?-s-NTNpLgJf;T%JXnSEsa2BH-0;mff)#jSJQSsDH_MY{zD<{j_AJqpwV{cFVItV+^mf9 zX1qN8VQA~s;N7!5;|~@%d0@EvI&|jwaWo}{JC@Jq&9_jw_mlUuaU2-!>DX(t>IUo9 z|;Mf3U=ZMgGO|njlZTQ0zYC4MBp3 z_h)L!s3$2A5{xNhg%+aY;tzW2FlKSj)f`Z zE*INRFTt4?!cTF1O3Ku{-AoKVjtq7M+RB;5-PRw2N~dDZ{bg9)M+QR{BYl1S`QpKI zCqIU4%zRPXsrw96wn|^QVhYVdDWn7SN25KCEY_VJYlw|JCx34E$XvzKab`AiEXr(1 zORvd(RRBCytyB3oq-ig5H>37!CErWU=XNFvRco-w7H>9(Z--vwMd5p-JEiTv9pgq6 z_1V~!W{+o`V5!H|J;>@$;OQ!vPJP(j7wB?d>VCMhe?*gIrhU<0Jnz$HuDs%0cP(*V z@E+)1RvEZ^!p^u;)bac$qX8Y$W|N=IG_w+yggC_ICT@|TjkyqGSmjtjNtpu7>F*Ep%|ltqzZ-7%nJp{PVL}CCj5tU&`7X`Q_K} zg(E@F)4eP|*tzz4Z=M@R&5|Ug6^p(EGkcG?%_TTH(Zy&Z;8;$NE z+UO^1=?B{WOgd@NXK2nI&B$2|4!l%4&Wfkj*;!-P`S8qLdcTBOQ4;axFW3TZlPwZ} zvXYH_sb%6KhNf6oGQzq8RoYRH!dI>4S2bU&nTM)L;Q0di)ItkZDbZtY+Z%5)yR$vs(om0|Y7HvIOc*(IF)-t2My{G5aqbGK_zB>@2up|k`G zE?%dJ^V`dPQj`nYJ9;gT)>&=&-NQw`45Y!HzY9hbXSZCqW%au2jJ05^RA<>zMdQ5C zvGS@g5C5yxl0(U7nuWLnI-3;O%Rv+OBWzBUdbM|5(No!zm1r9;)hv{Bb%1?>dQ2MJ z$d$K06ITw>HNqTIta~JzeP!}%FJv_m`imGi+r@da$cD!bEq9V#(AJn#*@34eacUun zjg#5D-p)o_`?uNi35AzL`Nt_m(HzBcGpg<7_U-vWv;7|eTQrWJROzGH<50b7@y&K$ zisua9)AM&##XnC#_7Jw1>CT}P|F#k3DkI;Z#gh3L-z}e(19;ug&<9NA2Wj8#EJZEF zbaB`vx&bx(YAidIA?8BiuE#z)JfbikEy1f^|IE2{kP=Xi`{f^yi;@#TxfSvHs<)8f_7vbS~_<=Ve>ZdKjS`2rOB!P{zEY8{G_zi_6HBu z@vjM+>;LE9`{tBt)+0gWA)_JooV38}Jt$~)9%QrM=lK(`E|H_P5r9aP3$Nnsx~<@*XxzJZ zxmavt_Yb(4SuUB301=qNl9H0&ID5`*y?B`eMCfH)Vo&A|AxfPip%##ofZ04UK%I5v z7=9cPnwidw?g3rl89>G9lhtDNI`)%&QHwIrtH68ZJ$tqngC=-Y1u!2r74QoPU_s2{ z)y*?dFQc$}2Xdf1(wG(N{71 zom^Zffv5nt7CF=PW*5y&u=!qQPN|nd(3+R+gL-~pz|_)Y<{4f%!3$I|;ye(Hd5JM} zZzasUO-r(hDVWF`9`&hY?=TnW)cc&Ne9K~t=+SIr=+|mn;+1D-Vk0ezA>P&F`e1i)YK`qwYbmX ztFw}|CP)G?Yq{m2Jn?=zSteVMYZH?^H z@;d$dnTTgQ2>1+5LUoc{KJq&U?~OoW_URvqH~UXXLRmy^46r?n*baTc zp-QJa%M3sq4Kl!e+tyS7mZ;!ahV!m0ORZ{_rD^j`eS0UTED*OG1>e%RxK7yYCf}$- zw!1$*3@XT_T}JWc<(4Z`ZPXksj+@fYHK3~tsMAywwV&{~cMP>4cXb$6#H=nWQD_b&>x4U}24Dm8W#w?-5}p&&1>!_&NnlfvggbCQX%@mrAx zB^rvavLc=PjJF9rM>+IbnTK|c+GrL`bGsfvXnvxwu+3_!0m+wF8jt67)6{MnsLq@fOwRXf)k(So*K_fk>m994jvxba>}gBdC6T}Cucx$V zxp+5bIV>cpSFFtsQo^%{`2s&T8VKK`S|)L&lSw^-?V3~|uls^*BPQVTL$GZwHdxp% zdVjn%&va_J0L4YA`48AE#+TA9E{UGHj*U*M$b{~&zLB#9R=uTO@pFKPOVt*%9l!ny zNK#n<2@qgdRDw{Zebhjk9y_bken%m%?68uDfvO|a6{!Ot240+T)vrU}qxvM(Ns`Ga zAO3-&wV$7y1}jDJ%%>KrGr<=;{ub#(pJeDHlsUf_7;?WDlb9&1v|i3*>2UhOXz52z zKDVI&s~WJ4DYqI6vfFz1$0`l_#3sG^oJvBJf*T;Us*v$D^$NIyJ?uPuoR-i%XXRCz zoknygT`Sr&-oDNxDgX?7^Ig^G8=zwMl?PBccOm95Xo-0$C?GR&FB zgu6f|!6zrPvUdF*ts#$@E}`Y=>B$?v$!t&xZ1rqtYM{%=z+kY7?|vWs-M{Qpjb)$uxzd`2Xt;+0-Gd1`xE!#`rGthkJSIO-+CR} ZyCTy1Jx(64nT7W4mbSr7{PnwG{{<;^i*^72 literal 0 HcmV?d00001 diff --git a/assets/restart_button.png b/assets/restart_button.png new file mode 100644 index 0000000000000000000000000000000000000000..0a447fd95e6f01ba6772af9c3212ba683641621d GIT binary patch literal 24256 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 literal 0 HcmV?d00001 diff --git a/berry/haco.be b/berry/haco.be index e53f1af..8832484 100644 --- a/berry/haco.be +++ b/berry/haco.be @@ -40,7 +40,7 @@ class ConfigDownloader if self.id_downloading && self.id_downloading==id - logger.error(string.format("Got duplicate new config (same as currently being download) ID: %s. Will be ignored.",id)) + logger.error(string.format("Got duplicate new config (same as currently being downloaded) ID: %s. Will be ignored.",id)) return end diff --git a/haco/__init__.py b/haco/__init__.py index e69de29..825ad5f 100644 --- a/haco/__init__.py +++ b/haco/__init__.py @@ -0,0 +1,17 @@ +from haco import tuya +from .button import Button +from .number import Number +from .pulldown import Select +from .sensor import Sensor +from .switch import Switch +from .tasmota import Tasmota + +__all__ = [ + "Button", + "Select", + "Sensor", + "Tasmota", + "Number", + "Switch", + "tuya" +] diff --git a/haco/configs/air_fryer.py b/haco/configs/air_fryer.py index 087d615..4999d4b 100644 --- a/haco/configs/air_fryer.py +++ b/haco/configs/air_fryer.py @@ -1,14 +1,11 @@ import math -from haco import tuya -from haco.pulldown import Pulldown -from haco.sensor import Sensor -from haco.tasmota import Tasmota +from haco import Tasmota, Number, Sensor, Select, Switch, tuya from haco.tools import add_tuya_io OPTIONS = ['Default', 'Fries', 'Shrimp', 'Pizza', 'Chicken', 'Fish', 'Steak', 'Cake', 'Bacon', 'Preheat', 'Custom'] -cookbook = Pulldown('Cookbook', options=OPTIONS, icon='mdi:chef-hat') +cookbook = Select('Cookbook', options=OPTIONS, icon='mdi:chef-hat') @cookbook.callback() @@ -34,11 +31,6 @@ def tasmota(value: int): return value -from haco.switch import Switch - -from haco.number import Number -from haco import tuya - cooking_time = Number( name='Cooking Time', number_range=range(1, 60), diff --git a/haco/configs/demo.py b/haco/configs/demo.py new file mode 100644 index 0000000..23731df --- /dev/null +++ b/haco/configs/demo.py @@ -0,0 +1,8 @@ +from haco import Button, Tasmota + +restart = Button('Restart Tasmota', icon='mdi:restart') + + +@restart.callback() +def ha(value) -> Tasmota[str, 'tasmota.cmd("restart 1")']: + return value diff --git a/haco/configs/development.py b/haco/configs/development.py index f48a507..4fd0197 100644 --- a/haco/configs/development.py +++ b/haco/configs/development.py @@ -1,6 +1,6 @@ from haco.climate import Climate from haco.number import Number -from haco.pulldown import Pulldown +from haco.pulldown import Select from haco.sensor import Sensor from haco.tasmota import Tasmota from haco.text import Text, Password @@ -123,7 +123,7 @@ def temperature_low_tasmota(value: int): return value -pulldown = Pulldown( +pulldown = Select( 'Dev Select Test Control', options=list('ABC') ) diff --git a/haco/device.py b/haco/device.py index 0d2d161..a68ecaf 100644 --- a/haco/device.py +++ b/haco/device.py @@ -9,8 +9,9 @@ from haco.tools import log_publish, split_into_chunks, log_subscribe class Device: - def __init__(self, mac, controls: List[Control], run_config_post=None): + def __init__(self, mac, config_module, controls: List[Control], run_config_post=None): self.name = None + self.config_module = config_module self.topic = None self.hostname = None self.mac = mac @@ -103,7 +104,8 @@ class Device: await log_subscribe(client, str(topic)) async def bind(self, client, data_announce): - print(f'Found match for self: {self}') + msg = f'Found device with matching config {self.config_module.__name__}: Hostname: {data_announce["hostname"]} MAC:{self.mac}' + tools.logger.info(msg) self.name = data_announce['device_name'] self.topic = data_announce['topic'] self.hostname = data_announce['hostname'] diff --git a/haco/load_configs.py b/haco/load_configs.py index c727cd6..f370bdb 100644 --- a/haco/load_configs.py +++ b/haco/load_configs.py @@ -52,6 +52,8 @@ def load_controls_from_directory(): module = importlib.util.module_from_spec(spec) spec.loader.exec_module(module) + args['config_module'] = module + for obj_name in dir(module): obj = getattr(module, obj_name) if obj_name == 'DEVICE_CONFIG': diff --git a/haco/mqtt.py b/haco/mqtt.py index ecb2110..4d0cf4f 100644 --- a/haco/mqtt.py +++ b/haco/mqtt.py @@ -1,11 +1,10 @@ import aiomqtt import asyncio import json -import logging import os from pathlib import Path -from haco import constants +from haco import constants, tools from haco.device import Device from haco.load_configs import load_devices from haco.tools import log_received @@ -27,25 +26,27 @@ async def listen(client, devices): if message.topic.matches(TOPIC_ANNOUNCE): if not message.payload: - logging.warning(f'Topic {message.topic.value} got empty payload. It may have been deleted.') + msg = f'Topic {message.topic.value} got empty payload. It may have been deleted.' + tools.logger.info(msg) continue data_announce = json.loads(message.payload) mac = data_announce['wifi']['mac'] if mac not in devices: - print(f'Got announce from device with no config: {data_announce}') + msg = f'Got announce from device with no config: Hostname: {data_announce["hostname"]} MAC:{data_announce["mac"]}. Publishing config data.' + tools.logger.info(msg) continue device: Device = devices[mac] if device.config_id and data_announce['config_id'] == device.config_id: - print(f'Device {device.name} ({device.hostname}:{device.mac}) successfully configured.') + msg = f'Device {device.name} successfully configured. Hostname: {device.hostname} MAC:{device.mac}' + tools.logger.info(msg) continue await device.bind(client, data_announce) devices[device.hostname] = device - device else: _, _, device_name, _, control, capability_id, platform, io = Path(message.topic.value).parts diff --git a/haco/pulldown.py b/haco/pulldown.py index b5276ee..5c51951 100644 --- a/haco/pulldown.py +++ b/haco/pulldown.py @@ -3,7 +3,7 @@ from typing import List from haco.control import Control -class Pulldown(Control): +class Select(Control): NAME = 'select' def __init__(self, name, options: List[str], icon=None):