From 7a9385f1bfb3679eb5648399f8eee513d8f21d57 Mon Sep 17 00:00:00 2001 From: Sander Roosendaal Date: Thu, 26 Dec 2024 17:17:04 +0100 Subject: [PATCH 1/3] fixing timezone error c2 import --- rowers/dataprep.py | 7 ++++-- rowers/dataroutines.py | 33 +++++++++++++++++++++----- rowers/tests/testdata/testdata.tcx.gz | Bin 4002 -> 4000 bytes rowers/views/workoutviews.py | 2 ++ 4 files changed, 34 insertions(+), 8 deletions(-) diff --git a/rowers/dataprep.py b/rowers/dataprep.py index a824f571..acce7fa3 100644 --- a/rowers/dataprep.py +++ b/rowers/dataprep.py @@ -1156,7 +1156,8 @@ def save_workout_database(f2, r, dosmooth=True, workouttype='rower', consistencychecks=False, startdatetime='', workoutid='', - impeller=False): + impeller=False, + timezone=''): message = None @@ -1173,7 +1174,7 @@ def save_workout_database(f2, r, dosmooth=True, workouttype='rower', row = rdata(f2, rower=rr) startdatetime, startdate, starttime, timezone_str, partofday = get_startdate_time_zone( - r, row, startdatetime=startdatetime) + r, row, startdatetime=startdatetime, timezone=timezone) if title is None or title == '': title = 'Workout' @@ -1463,6 +1464,7 @@ def new_workout_from_file(r, f2, rpe=-1, makeprivate=False, startdatetime='', + timezone='', notes='', workoutid='', oarlockfirmware='', @@ -1641,6 +1643,7 @@ def new_workout_from_file(r, f2, workoutsource=workoutsource, summary=summary, startdatetime=startdatetime, + timezone=timezone, rpe=rpe, inboard=inboard, oarlength=oarlength, seatnumber=seatnumber, boatname=boatname, diff --git a/rowers/dataroutines.py b/rowers/dataroutines.py index 001f6fcb..d020faf6 100644 --- a/rowers/dataroutines.py +++ b/rowers/dataroutines.py @@ -905,7 +905,7 @@ def clean_df_stats_pl(datadf, workstrokesonly=True, ignorehr=True, return datadf -def getpartofday(row, r): +def getpartofday(row, r, startdatetime=None, timezone=''): workoutstartdatetime = row.rowdatetime try: # pragma: no cover latavg = row.df[' latitude'].mean() @@ -932,6 +932,8 @@ def getpartofday(row, r): workoutstartdatetime = row.rowdatetime h = workoutstartdatetime.astimezone(pytz.timezone(timezone_str)).hour + if startdatetime is not None: + h = startdatetime.hour if h < 12: # pragma: no cover return "Morning" @@ -1170,7 +1172,9 @@ parsers = { } -def get_startdate_time_zone(r, row, startdatetime=None): +def get_startdate_time_zone(r, row, startdatetime=None, timezone=''): + if timezone != '': + preserve_timezone = True if isinstance(startdatetime, str): try: startdatetime = pendulum.parse(startdatetime) @@ -1184,15 +1188,15 @@ def get_startdate_time_zone(r, row, startdatetime=None): timezone_str = 'Ect/GMT' elif startdatetime == '': startdatetime = row.rowdatetime - else: - startdatetime = row.rowdatetime + #else: + # startdatetime = row.rowdatetime try: _ = startdatetime.tzinfo except AttributeError: # pragma: no cover startdatetime = row.rowdatetime - partofday = getpartofday(row, r) + partofday = getpartofday(row, r, startdatetime=startdatetime, timezone=timezone) if startdatetime.tzinfo is None or str(startdatetime.tzinfo) in ['tzutc()', 'Ect/GMT']: timezone_str = 'UTC' @@ -1200,6 +1204,8 @@ def get_startdate_time_zone(r, row, startdatetime=None): startdatetime = timezone.make_aware(startdatetime) except ValueError: # pragma: no cover pass + except AttributeError: + pass try: latavg = row.df[' latitude'].mean() @@ -1232,8 +1238,23 @@ def get_startdate_time_zone(r, row, startdatetime=None): timezone_str = str(startdatetime.tzinfo) try: - startdatetime = startdatetime.astimezone(pytz.timezone(timezone_str)) + if not preserve_timezone: + startdatetime = startdatetime.astimezone(pytz.timezone(timezone_str)) except UnknownTimeZoneError: + try: + offset = timezone_str.strip("(TimeZone('')").split(":") + hours = int(offset[0]) + minutes = int(offset[1]) + tz_offset = datetime.timedelta(hours=hours, minutes=minutes) + tz = datetime.timezone(tz_offset) + utc_offset = tz.utcoffset(datetime.utcnow()).total_seconds() + for zone in pytz.all_timezones: + if pytz.timezone(zone).utcoffset(datetime.utcnow()).total_seconds() == utc_offset: + timezone_str = zone + break + except Exception as e: + pass + startdatetime = startdatetime.astimezone(pytz.utc) startdate = startdatetime.strftime('%Y-%m-%d') diff --git a/rowers/tests/testdata/testdata.tcx.gz b/rowers/tests/testdata/testdata.tcx.gz index b4e8bb72205b09cbe511f32621f2e294a7633432..b3805e75c0c5ee1d3c677fdb474083dbcfbf304f 100644 GIT binary patch literal 4000 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 Date: Thu, 26 Dec 2024 17:32:08 +0100 Subject: [PATCH 2/3] fixing time zone errors --- rowers/dataroutines.py | 1 + rowers/tests/testdata/testdata.tcx.gz | Bin 4000 -> 4000 bytes 2 files changed, 1 insertion(+) diff --git a/rowers/dataroutines.py b/rowers/dataroutines.py index d020faf6..c828d047 100644 --- a/rowers/dataroutines.py +++ b/rowers/dataroutines.py @@ -1173,6 +1173,7 @@ parsers = { def get_startdate_time_zone(r, row, startdatetime=None, timezone=''): + preserve_timezone = False if timezone != '': preserve_timezone = True if isinstance(startdatetime, str): diff --git a/rowers/tests/testdata/testdata.tcx.gz b/rowers/tests/testdata/testdata.tcx.gz index b3805e75c0c5ee1d3c677fdb474083dbcfbf304f..feb1c75cf583d9a465adb8b1c98cef7bec065e87 100644 GIT binary patch literal 4000 zcmV;R4`1*fiwFoEf^BC4|8!+@bYx+4VJ>uIcmVC4NpBoC7J%>m6@m`QVG#CP__!#F zf^35^U}u8F$mBLCOC7mqq?XWK-v0fN-Ht5VDkM*uB3K3bV5qBW>-y@EZ|CvXZ!Rwm zUM)A<)z$i|Lo{%B@b$@~<7b<0wO*~yzgw>R<>vdY@1A$tuukyPnYSa?doWM-X~Y5UBCOa_qu@t{ZX&T zyxE@p`GJ4$`tQ1ntIcY;UA)3S-~acnKi%)Yytx$qwMz{Gy6>U;-*|ZP=-}Y^-2+HJ zBY%9q;qAdM*H@eVtHXcxFP59b{g>(M$7d%5=)M5?g5VkQk;Nl&COYB>e*-uII9{Zk z{@DLXcYW|n-);J5tIOqAhkthL&4tpT&#wCJA|Lk4^7LwbwmlK{$BR$4zCYmm)&327 zx=cTIo9;8;%SRjE@BIh96U1=5xcT&chi{Uob?3`}EYscp-1W&NTetJ=Rk*}WCZMD}LO?FV_bOb_^kFh9oq-?u1kR_EvG)|UN?tFx1* z-TGyBktlw!_4eM~>3=`C``wo7tJS){y*Yo8-hsdHF79^w@W_u|2{Cr~HQ62TKmxZZ zkpG0jp2Xb_{V2V=loaK_epHx@nZki$Jbn> zi+=p`?!LwRBHV>nOP#?aX&0-Yj%;um*z<#~h&#E8xF?7RE-1KD(who$5BKLzb;-Mx zinu#NjH*#S4G~Ayfe&(yRV45rQJC16x?kvRFFG9fIC*j zJwQd=C2>zerP1cSaTDQQm%InAh`TqzgVX5q&XqLdnC8RX*TY@F_<&X;?_P{dgnMP< zd_{Jgu!&%!hI^2b_WPXVJygWq83zO!y)H^oeSSXjj!=F+^q>}k${Fn6H`T5NA0u_;GV;O}tYIWHQI-=x= z=6SMZ$=ex`uP9=}!2p044S9i*(Ruq2zdbjrZisx6U+YknhD8!f`tW8&z9JuFx6_FQXg;_PvyP~zUvm!4Q zkq;(uS7l(@vK5sAP3FfSZ_y-;(~+v>Y0+M{GNUSLu@#YLYO04Y>ka?y8RgB5llp4jrZ08w%pt4%RI7?K%|M%I-Cx9 zZl0V$@-Amxt2!Y%!lJtUoXFQS+D8M3K@*>MOhv1xeT&bJK|bf+1`L|Mx6V@0+}k;k zugIP!Ysew1=6RvX_PM*9NZyjo4bw23^1!HxBGqUF^iqG3%EHY|xa(sGQ z>_o`d=EDp1kQdCgw5l~NycDgUpOehjq~Qr0FN7K&o_DUK-+or}d`0$rl3$LbsBIA}=qlv1l6k3!yfqd?CG!D_u0=g7 znRgYD_XdGLW7P!=lacvGewchTE)DjY(LPWpYR}JUv=8-=M>5u8)MQ-;j!ow8Nj_FY zUJL}~Xm5+IR5&Y7PDP_VdgDb@-BN-px;p8cytkg}Ay1HdW3k4Q6UwepDb&c1LY@th zt_NlaMOQ7G6Zx9vc@h%@qb370L@b(_K{J}?eMRJhktFk)N{a~8WPa+gIyquAmPwVF z5s@4DsYh%Qd21;BQ<0~l>)7P_)0UYr0(qbF@KpWqA{Sl9M(m8bpVmY^n&2?1WWI1V zmTi4+#~^RXIMG#C#lqQGb6S_Sq9|>WUty(g?_5!c)En#-b_r4?z!=p_hu#OKz9~x&hzPWYA;lcRh$c z7(qf(p--wIPsFHiQa^}3w=*SV9eQVr+IG_B`ccqZV+B<{Tm&yo>hFo3Dnjpbi!6^S z^ubL=>MKLft{(KsPP2i)s?bMYRLz^yfR7cS=QP(7sOEZvFd6i<4fr)ly)z6*s<|Gq zY`M*x&~ruTW7hDaPU_39TG-H!gFbgcb*#$F!Zc$w4SxpcB@g(jkS(H6(P;gg)Vzv} zI}V0C29<`7u6gtBYutr;(5JB*T<(vjLGO$9!F^ChCN$%25WO`3#5$=Db~5O(8Fz!| zeL}BmqLH(?ilXO+eiZc4M5}b^5V)eo9W`&>80eF-9#L0zgOnZrP3k9)UX1fv^i;N0 z+MJ{wDncKO2&o!iBPEN_H}unX>G<3k(>f8AaYso(kcqU)Pk!g)t`6 zIjPz8!|1)CAVD|adnj61k4?=R13e}IRu>PhR?R_Iycm6?#4i$Gb{yl_4O=e+o@1f^F~3>MgXHu>Rp)3 zfR8OfYY@FN7IkYGBKughaT+zdeiZc4P(-WK@I%?~4L5Jz80anK{#iP29>>_!yy*}4 zRt$);@X8`gCSG4#GIm8lTbndCq!?A`iP~I0ee?n*Did-qXYTUK18snf3S?axR!1p{Esc!@RAbLguH=fC=g0>FaWKuPnnm33(*=g3HE=$LuYXkn&bMq2pgPOnmcI5-6-gz@ut}#I8cEijPU@qdj9pJn%^O0`WW-us_$EMTcKr;{ zOD?*7dxAkhF?pTj=*ju zYe27ZtuD(&CXFr+ME!$i_h(51m%}6S5 zUbMbw^$oSYd844`-6G~H<1R{Ut6NUoo0rkMTzI8K?_yD@Z;evNK_7GBmCmk@0b294 ziF@-B`rS&_%E(=e*g9j+0KGM7rdKV1LIABt?tRhwvCzNU`p1Uj#gp#(=EILy{c?Nq z*+u{54;RbJ<+?xke7EWIgRVb-H~#nM_KZ94p9lEty#Mleu|MF^{!D-T#{Bu_(`x_y z@pqfV@oMvK-ygg5_H3?RZ@cwbcX6?MTIu6zeSX&UT{>^Kf4dTu_s1Q7^Rj<&wYl}0 zd~uIcmVC4NpBoC7J%>m6@m}RVG#CP__!#F zf^35^U}u8F$mBMtNENwfq?VvAFZuUFc000ctB^ctieMG!gQ2djt?R2tzMV&3zPUI* zc-3ET*O!|w9;1QB2VWjPI(mNHtvBn<**E=W=&!%+hVIvH+aIKzH`^~BzZizA!`15b z>(}P2yS`X&%*o}&Dt);&o2B;fu%r9A5O-kN01uub-SA6QKJH^9wJzLyU+zT5i`e8-64Xm#`H-40(RQR~k7fAs0@f9!_->#K|1t2z9Bm43<1 z<|mu4`)=6&&|g1WZ(a`lzlU2tBAw>v?)+tcj5b|l|L40atnRqPt*@VTZ`KztFaA$A zAnuMExZ@JHzJ9XVy{g0S$Gf+pPh@Yl+dVO}5Zml0)T%I03 z>ozaD^F;Bzt+)5?PX7De-S4(sU9LC7?ald%^bY)mcX7Ad`$vB8N{F%JugUI!2NJkV zf&51l_9X5`@ZJN4JD%@uhnvxB`_W~e|M1ISo(b+8!#_M@I_JN-VMt;Vk5>D?KD_2C zUG&4BclRyk7vV0vTIviYNxN7Db!3C{z@8s;Mcm0%#63Yoa6!SHlHOF1d$>P$s!QIj zRK(pGVpNUtX^7y0+~Z=nJ6jR=nB?7x*Km&|<(*+M+cdn!v$Fv;oz8>xZ#s{<-dG}&uCfq9< z=PR<~giQn+HQa-gwBMH`@1Y{@&Nv{@=yg$w>hsHycZ7-*JBfx_=cYv{OP(Jc7Z*gHDkAR;I-L^-oi91hTWF*G zB;qG%S)>(ucPw@)h~;EE`6& znkX&#q8av${6yrP0jne*U^X&e+dN-Ul-360)2pbm=OY;3G`zXb^MWRcyvm+ufT9tb z1&#JK$-G#To-L4uJmPG0`xd1gC-00G44Nn{6Bf1SmqflIdp=ueY*q6-GnzOP^4RA2 zyUBCTy=6escyiKy5_f^guEDF2r8KuDjKnAPePszTNKqiAGoN7=bOw=Lf#pSC@Ptcwy5{E$^10rce%H!7HGC? zMdgFYWAovSk-(}8}D>cS{q}@oSY?*ucyX_ zbMCG4h?>z}5N0Fu&7L189}NYFK}9|`-G2TN8=>4SMHQtLhNj!kU*^S{kaT;M%-gbA z*Rj>oPD0)rVO_*Vq%8U7!<&G-O|T7mtIE0-*T~*s~=H4!e zd`0#=Swjw4HO~vpCij+G{ro6-Z_pyCMtes^?fC_fcT^Gi+&O_*)8F2CE;`RIiF`%6 zebUxAqH5JL7q~@f7eHPNfT+5hyT~m{JO9z1y%EuMLiEtc-W~~T#!9qQGDJ8W06slljGCd zVrN3WHXmN7hrD2}rB$tI;iYK({E}q8CJj&6cp=pI@Vs*+{q~ER=PR=3ll*cdRgI1J zu2odtlYB){T8RdjKsDM2Hyho)d2dI^%ORlgN*|t&MOPtTl*~&-&d z$-JwGyf+908mlf~n2pRg^5f*AacQvEjP`*-QG0$#qkX7{Jd&{%qbBP*aBMPvPx7%M z@?sz;M|)dzrNTvdaw;0_(Hk$K>Xs5*(bY+p(Dz})V7m0*H41p8Y`&s;UaixQh!hMR1tcgTV#1u zp$~30QePQ*cJ-i7cA5YZUgQqA>< zWy@`rgq|xxAG3xZby8n;)xw5;8uYmns$*4V7N!}iY4{63FL}UMg=`Upibm^~q~=v* z+;K4EF{m_rbj_Q0U*j&+gFcPj;BtRF4SHX+5AK69GNBoFqv)*xAl6BJu(Lsr&A1yy z?-P1m6OEkBRTMop^pl{ECR(LShrksz?x=b5ra+&R^@zH%8>H;`Z&E*d^kSUXqNlR0 z(v~FkP!alIL`c;D8!1_YzM-GDOULKVnAVA?j5|sSg3P3S4z^|KN6}luUe`V+FN`sp z&PmO#A4l&E1qr$V-$T*DdTeUm6zDMtu(IF|Dd226;$ln797WFtovv#ZQY^Y~>7oXF zstCO^U`dye%fPc)KkS^o2F?kOJ^LtH{J@XG<>#Y*SVoqb2kP0oM9=btFLD%+fId=nl}l0HUb!RQt!fS z27GJ@TBGQlv8Y?i5ZT9~jnk;v^^>5Fh9X*>h9Am?Z@78$ra*5g_s`OK^Ek$)=FNY= zw_-q)g;y3~Hu3t}lCdia+S;VCA;qXdPt@l6`J)#wQMqt2TBf3ryXM2620feTkaXxR z&t`eE=ExmKziXN3Rcf9U+gv*HcjWF`CZgBP^-gA!pw-ecN6?2|%S6yEd4twVGw$YY z*N5CP(TbqTk!wS%zPT^@P!al&J80>;YS>sde8X+Pp8`FiVHT&7dV#Xb)$@YXJg5l0 z-L+Owsd-Ykjnb0p>up8oy&75mj9^B--Z9o4+HMz41&|6|{BWW|OMX)Vxvj$xgElby+$NT^sP{o|~7@vk}Tp z8V!1yPYFhAqco1*84EelQiGmD8}R4v$h9${CsGw&IU8qFY1^`NM$roy*81?BgErSM z0KFI@t(xbdW#rDi@G9h%iI}$O&YQ=mu64ONs<&t*$6papFw zK`*(X3hAWYO3}z2G&OG$^ue%T&`G_xqNy59&6@;0CF72itrfg;&5=8Imrl$r6G6MC zt@nO5b3L`7?I`+OWX+%o-}vC0UB3YI(MYoHbW$JvZ0ve!YTg)nCL`AB!Z!gzv+Eat zUUK0T=+I+P^m(bEHsDWyJ{Vxs^}`Q2d4DG8sd@9p(C3w`0fP=b$JwB7>(`H?XA^{U zk-PMwl+^HZCyIuC0`$&!wo&EM2@XrTbQXnPDncLgnzo>mdXGg1eBVkira&)boW-EZ z(g~qxrR{^zx0<_g^pdM@f+{07#G;k94;t`WFP(ApA+Kqxi`+#hy4cyGH2hk!bOd%Q zSp#~NBR8VV#-#(TZ{8^S-AdNFb?zdS4cbDR>nB0)bM=i9J^R_LZrSGgQS^BwYerIe z^P=@dt8b|F&6@;0?-nsv8Fx`)TitTz-n@+7<-#i^dKZgIeQT6D4f>c1uXJ{O4A7dV z&D@)p(C=2VRz~h(#MT*m0qCtsGrej76ar{Ha_@`YPlf*N);~5Jt)6yQHy^&g9Qy6? zC+EZG-<|gt{bo4$bhqi#gKjv0H~u$^{cn8QpAdXeX}$mc z=$q@r@$&lZzTbE0?YX{uz3n!q-TC?MX{C?r&Dm);bm_d^{_RRs-W_-J)yv_<<@K%C z`rGt0eodD?e)K=kv}{|% GfB^subT Date: Thu, 26 Dec 2024 17:49:21 +0100 Subject: [PATCH 3/3] fixing time zones, tested --- rowers/tests/test_unit_tests.py | 4 ++-- rowers/tests/testdata/testdata.tcx.gz | Bin 4000 -> 4000 bytes 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/rowers/tests/test_unit_tests.py b/rowers/tests/test_unit_tests.py index bb571703..2546d575 100644 --- a/rowers/tests/test_unit_tests.py +++ b/rowers/tests/test_unit_tests.py @@ -543,7 +543,7 @@ class DataPrepTests(TestCase): ) = dataprep.get_startdate_time_zone(self.r,row,startdatetime=aware) self.assertEqual(timezone_str,'America/Los_Angeles') - self.assertEqual(partofday,'Morning') + self.assertEqual(partofday,'Evening') want = arrow.get('2021-06-15 19:55:13.400000-07:00').isoformat() got = arrow.get(startdatetime).isoformat() @@ -569,7 +569,7 @@ class DataPrepTests(TestCase): ) = dataprep.get_startdate_time_zone(self.r,row) self.assertEqual(timezone_str,'America/Los_Angeles') - self.assertEqual(partofday,'Morning') + self.assertEqual(partofday,'Evening') want = arrow.get('2021-06-15 19:55:13.400000-07:00').isoformat() got = arrow.get(startdatetime).isoformat() diff --git a/rowers/tests/testdata/testdata.tcx.gz b/rowers/tests/testdata/testdata.tcx.gz index feb1c75cf583d9a465adb8b1c98cef7bec065e87..a7322de64d2ac744dd54cc30a06159b8726082eb 100644 GIT binary patch delta 1310 zcmV+(1>yRjAD|xwABzYGjD?W~Ab()?TllyriUP;ZU<}xvATctz4JuMc?ir~isLR{G zAF|t#Wm|>hNmB%?KpzZsb!}Z=J@V~5{O;ZP+1{Jw)n;|E{&pV??C*Vd^x*L2RkvEN z)~An`>wbClr0cuiy3KMg?Y!Q6yZ@^1FAo-rw{PE?)9&hgwKm5W=Zo~^=70Fr^1RzD zZa;kShW2--IOyK}g|j?5?pJSC{rex@^~-g>!5b%dw^@C1hPP}ku1*&OfQw(BKl^!m ziifN9rtj9r%XHLcb+9|{vy0=d-~QS=-N2sys5fNZZBG9Dz`u9>O@YPH-f-r%3_ z|9jUT@Ah9_Ukd-)r3L}r^?%UaZ`?n6u(x;k;Q^$dkw1Ri@P6;-%Zsc2+x>s`ua;N) zyD!t%Pfv~r&^-isNbnN*z~TWp6CH7czX2Qo94^vMf9(IPyWIP^@2>intMlcz`+s)q z^@Y-*FE9G;EFbps^7vwXvN;m=hl?+^emvmGYWD^`U#1_sN%xuW<$tq{ANT$P-w|Rs zTwH(pxWl6)YTfDbAIo(2KXv```^)p~tJ%N5OuyuM^V9YB%dX%2xV(D4TEFg>|L$-6 zh;*7?y0h2IBedxvyFWi(VR6ePZhZZ`d$&4&eg1#C0dcq7z%7@!@%7X7_EqiQA8p@? zWg>gM<>rGtS*8bkM1PncVp6t7mNr|H&~{i}F6zd6 z1jeE%_xFr$O(F_QAbZv)BoV0U)<66TM2!vtpY| zXZnuZZOcUTy1CxTWD>MmTIK-yux*op3mE}-lbZ`B0o#+p3oQa~i?i_y-2p(o7y4Fn zH;i6#^-WM^6TjMzG3&j7tOX{J{#fIwnXeuJ6)$yWQKB zsC+!`@X_o3)y36~*W}UV<=N`E>(fuaelf1k{l&@Bci+EWot<3&++WiBm=3-1a6W8# z-u)+CGCK=ye*SW|)jDnV@^QcIhU-WB+4&D&rkg(cX?eEnHp|2zfBNv~Zrs=5vu=I* z^vTf=FEX3$pS$fprZ>0v#q0Cmmg&v_9s=zCKV01SV)x{?kLl>a7WHbKp2OpWa(VS6 UJ&oVerH>x`4}sL=`ow?%0ObAc1poj5 delta 1346 zcmV-I1-<&9AD|xwABzYG9fFYtAb$|{Tllyrih^u|F<@tc#K`0}C`%o=XQY=x>fZc?vwU;fuU@VCw?Dk;m+O3kw@&b8yZYb^ui0E}&KCrLi{G9;`DJ&C zFIMYq->pxV>8S1MXn)=(SEpUS`?dGFfdlwVuKMmGANI@g^lE*!JrVZDi%+(`Kj8b-{tbG%Oh0y;?la%ZM}HgN@BIh96U1=5 zxcT&chi{Uob?3`}EYscp-1W&NTetJ=Rk*}WCZ zMD}LO?FV_bOb_^kFn>SB{ol7JZdT{#>DHG0i>tGfr``HxcabQ5u=V!d-RXZnxcl9f z>#Nnezr8tsk=}v7@GkCl`|!w*UI{UF_%+!b@IV5$DUkn!!k)z42tIhgaL4oA?Qk=C zZ9lo}v!8zZ%QL~9WBA8sOy~Sp*Y`gfq>Fz1^9Sy}#rz`Ng_EfQA_4c4 z%mOP6-8k68n;`NVm6O*o(@Oc)En#-b_r50eK8K>>-ANeO)uYutr;(5JB*T<(vjLGO$9!F^D( z*$IgOI(ID-y-LlqVw+26`i|UP%S80Lx!%cS60}-c<^cMzYnceTC2!DrX~x~u?fQ^g zCR!0xIdW}i)i?K(oC_uayOYBUEduX~v+@hw0YH5a`c`u{j9zl}O;BazhFG-H_CW)F z>!mY{KIAoRb&(|^<6q|w|~15mG{RTfAg|`akaVintXG8 zeX%<2`t;LpUW}V_e{!<)-M24S7iTv=_t*43rbBN%oOfHEcK=D2%+7+_pFiDgwN9J8 zyx(uP;pWkPbpGRK>84M9US2G_?J{x5pWZ#XTlaPRq+6dq{{G~LA2XZXpZo1UIHkAv z$CsDSm+8&`z5v+&f4sQ$#s10f9@ELA9qQFOJ%{fS%H`(!^faEQOP@UY9|OBN8m E0HE9cjsO4v