Zwfe+bhPf;#_G36^Os+`?lC5Zj41pEG{5^VoR31~(zDeitCtG}b9%3`9l5(*g@HW-zi#l^O6Dj6F<)ZL%HyVF>
z{jLNzhS-FD8gMWxB9Nxrj*yU}L`dD;T*9^QzQmH$gf1~2hifqZ#D;rnxqW#vH9dmy
z>En0`sy7%9mRBR-36kr@0So(uk=GU+QfH=K8>r|A#L3#><-ly`17=^?1v=nVGR5^8
z6ll%KukD)HpMt@Ofs=!aBlQ&XN*hPM07RZ(Yl4`azU_Z&A(FY+So
zbeeIl$*Q{PkZ)PJ=&ircM@o|B8*FNl{y0s4P4s(RrVp{oQ~0v2y^sQovlfV3`CA1d
znHhZKY*v$KSLS~gR!!C1I?EWms?rx^*GTzB(p;6k3v*g#WXvm`B&5*Sm(qHSrj?ip
zkTZp@_=TcE-J{ZtC_&YI-_I7Orf{)Jj472$@s7(!eQ{sy)lsosm7SDaG^L+o`Xng0
zIUSK0jobF()&ENb{*Su4TP69gx*GaN1YUfLK+L})P)>a1U7J{xC?IvNN*d|7PWPX>
z0{pJ4RlBo(D1vS)zH1#?N~_l&;5kt!Sn#tkonB=cP0`4C
zun0))K%dVU)!RN&L~erTpjGI|>af5`vzNK~T0bgUw+HByS
zv-?g0hc%J8(>bD!1aTX<+yU1dP(S%Z3Yt_Swh
zEN>t3tT8lDF*`0akZ~gwItw)8y#hC9>RwDFv#sOw=d-%19iBNgeY}eOMD~dN2Kh
zdD2CSKi?^%r>Ccfs#_T)@n1z%d8Vf16Lub%__;l!2SDex4KUbYT@5rm^m2k7_OYJ{Y=iGr7~p#3$T1
zO%lq8ibV^rI!X)QkPvYFhQnYaE9{?Q@yfckK85B&yiYobbwo!A(Top+)WyDVF8S(w<
zR4u2AGUG*cEDW%i^vp?)#c_LA8coavKcREeq8rzsq~`=n35$rV!~=!0oPHi
zlE{~F^0)9rMx}x=Fe6SU;6cMu@f(M(k3z4Hu{MT$)=R_tJNjad!r8m
zNt0eiB)RB|V!l9S!{8?()OK5sJl*8KSjMb++?8faWE}^s1EGRh(hf-OslREXuXkUp
zkwJC&d%kuiXw$050D_Bm!3M{^@WoUj*fFn&}!Mw_&Mwbsm59Auwy9ESbH&
zcRu@a%clL{207E|a=n60TB>&?y^HE9UyonBtL!p=zHfMHY0N#?z@$4h(bkeP&vxUT
zD+G}0yL)!HKoQAq+z@ZByt`SrP?ABhA+9g|6BH9py3l5*$>qO2iuF9#Ma|#0i^2nD
zxAhd{twOURH4@}_x%i*0456
z0IMyctH}>#;S1a(RYILYHVX+ktubUm?XK$?%bdn6@(fFY;^k57C2jVDkDdT;oD3&5
z*yv_m_(lOW78}U0O`4FLl<|aEt-Y`wO;hqK=umj(u^=s46lxkN$&N%8D-u)O3IU|{
z3X+rGrmw(P#NH#E(vq8RR6*v=)C$gbBLxM5d5CnG(j1UR+)nA`YGE9WfE)fAOfyz`
z;TqFpy^i##6ZvWPD`Zxkc@mO*?A8m5G;56oJxTcMcQpkG;iHOSZA+aEc2b9I>J|w`
zQNpi7eFO303@p+~k{#iw?K?P-Z298br%827b)W2q}fnHIbYlon7aDx
zp;?(((b$~vzRr}Bl*#kbs{6N{d9T3HKrcmleq@vgcMEqk_DlNv09P+^zn0mz%3eT!
zlKzIiHc&Qkm9^}R!0njMYoepOXPJs$vYjW;+SyHPBU{4QK+y^l1|aMMnT%#bp*+1#
zFP=a7L{(pj7Q0UgMz~NcIBsBCr`q=PBZuU*++@sR=*q97ALGe=8$QV7@kg3D)-1kc
zj3U*97nT1F*<~4^m4MMI)!+74x~P7P*W6
zq%vn8fFA<^PWJ-ijSnWfI(pf(Zb8EMll{u~UFD~Cjk8!VFpWL&=aZ^eK?>!{-L-f{
zOJ6X|^zzZtQrDz8yq%8K>~PQ$NoEwWyPNN{oF-MAb-&fFRG!1E8B=$vi!mjVDX%^<
z1q-YYGYnx-$8I2CH1vZ=)R5wYVz**@H~kQ$RjDhg(^4sOF%Yc4JTxo|
z$9R^0cyK8hK-%G}N`XHvT;o6=evj=G@~wca?1vR!s80yxqI@e9e~ysg%+542I6?j9
zM@4#m_86x%M(BWha6#%+qVUx|3mbXdX%VP&(%1vy1m4KlNSfoq7v_c~94JhDGzfi}
zx8G?wn=?CgXB83g1o7#wHbOkNFCN4V;&k8b)1SpVDPq=i!JW;(MXHELQAsR^pv(seW(gBP6#Oi>gEZg*M`)_j6i3sUM$+7xrkjRYIA~^Tn)4NMm3>Lg
z48+;#9~717G=ah5bI+q-N|DoE0nbDorYdao!5u0Ru`XrPDdHh%1!K59NHy8m!%4KG
zF{8b9ZO`WkY@XT$ltR{FJ-+&}h*{bD==Xs+&@CHu>y9^7TVYl;B{MLoY@eOV&p3-H
zZ)xlbwx@Z1DZWg2Y)6GmdA&L0YS%%+Wz-2%?YR$}RSC$W9Ysy(E4$3~Sw{_uTL3CQ
zukzmz?K&^3s7xQ&)Freo!?FJEz{hxN;7L{VKLn*ss31wdsLM)1AlhI_O)>fxbDnJA!|pOt>+
zR#K)>=#f(E-P@uwO$&JFkS+?it>%cLA|>3r__0%2G)MpqQtTeiY!CI*1K{h}yHERD
zbDb?MZ*Q!mQRqQjdcGQ;zr2uqfbnh^9Jt(1Eu%BnmMy(Ffj)Cr;(L99@?OYCRQCNL
z2qL)B#npbBThlesTLa88&D*W;;aL2bI4^MK$_$V?D+Amk(s0uI3TPxQpvouqk&<;L
ztadGdQV^356sds6MRx>$NDk-H75n7^rAQCguf3=qQ@&ok-3UHlzW5o0Kk%}#ZEM0)
znrzLpc{jyoP?N)ai1B)q#%Pff(a>frJ0C;c)6L{1Q|~?e2_kkD4qVe$b+}e|j}~=X
zk0JA$Kl;#lu(50`1v?y(=~Y>FN|o$^-p4pIWv?2pd3FL!tJUP>Yt_Dhr}X!q%BnGx
z9HSri1KI!_k=3(%r@QfTMzNxl#NBPxv*v}GX~bx-tcc;X{23W$t@?bW0GGmXp=(t;
z^C#ubM7IxM8Km!hlRT@16g4~CZ??@g2noKX7dLTg!i|rNNmSZawPuEYOg+%<`=!{D
zU}bLgv<12b3ACzrUPfE_J8!^HuD&iYv_6lfyIjQr527whDH6H)ekLD}-q)i-bkj;G
zA?!`VQ-xVq5w0Ao3Qd%diKicfjpdM6L9DnR2B5a4jQORqpg|qIRk&r!
zVxk67wD$Ee^JU+U$QW%2xM-N~?+AlE$#uzYT{bpor&Tu2eamic&S;0-i^^DGeyQ{s
z+BZlQZMYB`N_arO#R5r!PdDOvdI&InJXd57mEEPNJbnhPo|>a`?S8Kz;U5J^^szgB
zq@j^Us-7tcj2;){*J?Zq9-uI^Icecg1L-`XHtUkfqNrA|isp>xBib~O|s10MW6!|>A$%U9)Tb|xH?C?@8QPCSe|zl=2N8BUYf
z_?W%l16f3)@*f4D5X>k4^Mt6Nu=Ty})7>msEEur>=MbPF5U5?xfU)AKTgoRyk7(Gw
z({e0+Fm(WZ=Aci{CZN(GT&bRl?4}H}{-YQg?iHhufbTU4K>DxKym(JXqQ6z~
zE``y|$1-pnS=h7&<3cPWE{!5@ck70AHiK6`IRJCka$}Zu-FQb8Gm8TKGchXW&9%ln
z6w~4%o*?-nCMz~5!=a~BT_dR)q$qQY9qdaxJJPpaH=#tiK2?x|Tl{S`48thYZsd}1
zGksNL!vG!v`w2ZzEeWt0^I3|U13pWaFUo}S_Vyvj!RK}aR_huwekV*>Vu;5jdYq-{g&U?FY&F_9Lalb+9v7_Kc|Shg5DN7
zVQdvzo}iSy>SsA;bEhoIs+e9w_mrSn7v3u1K~KsCKidrm&=?#6W{_Fwi)|tzM~i=%
z>fAmyTKUOmc&HVHH$!bL^W~9G+svs|`_=BW!2U@fBi}JM4)PPp69Ci#L8b0Da4PA<2
zD|bzmK~r!|r!jkLYb$E}2Sw+7tU&nV6iZr<@5Pfwts+dr>BqjTK3p|o5|xnT<2c0T
zm@mqs0NI)tAFCS7j~yC#Mzy4plJYGbL{Xi>MERNt`7iLO8o48(
zVRTkDwozBZNRh(?Mb2o#bx$hi>c_FaG^up3%$C^HJebnh0|)kR+52KPSyl$Dx(uT3
z-ilkrV__U21lA{k^a-)+$b5x`j&(xQ`64*eVc}7JB8mc8FV_T%@Wb);VtSQ+?b2~&
z|4fhB{h^s_FNf&xLI&vJ64=b}S^cIW0o~275$KaLDs1RHP&^vg^wte<+sk2dEh9(d
zjsVw*LXH9%VG)NY#oaQ7S|JXD=ZXS9jUR#>%Q(+Kda<9s)J2_Ch2kWyr`T
zS~)wQXI=(nT=>*FdzkpM2&7K7|By7uQ(j+A8gw?X&uKgF3FpQjNbJL7vrM46)lc3q
zb0|XK2O2;y;Qjm~r=7L<=8wtZqyL
zxi3ZuaXZLKbrbV`5=zEDV6Q_M(7m0V(p-q>6+h(Mcr&QO
zl80BIm)ipg8G{8r3{JvRu$v~PBFdP&e>(2{eBz!p9hhL(HT*rjYRFN?QLsXq~m_HZ-UA;z~7<}9B1zYt7BLw51JZGGfbuZ|*h7}|{ojoky
zwzrA9{gBcgcK`!6E*oM^yCw~1Ahu}@K}o0$<^Z_GJ^?yApHyF5so$=cROk;jRD~N@
zP@xi#_rXk_&LD~S8$^=d3^$O{^emIcWp`tM)*--Q;f0yR808DbZBH|{GV$rpmYOCp
zN~rnoTWAPf9Xq;$o|u`ADgJSi*{BxpE%cm#gY;KopRzgX5Gd(}I~+z+KBLX=>T;Ta?j=5@sk
zrs^5+NZArWOEct=p1z%zNEW)1#S%eL+Un}5b*izE7reW=R8HVM0}EZ
zK{5nIYJ{`TwX<#tJ#|26hRRNURN^uriPB7L3?=%mO@icCC6PNQ{X>
z=(>y*CL3@YC0pLo*p9ycdFp<&(O{RVmV^trCBBRhUJHipt(1FChl2I{^9eFNrJ+~A
zuJR1h5oG|xyIj^X&H#TkbyXDqXOKBL44$jGyj@-xvQ`TEES4F&Xjm4{DG)y{tY^v(
zK64FMO{Bi)c8xFvotQKLA=y8eDa_T8IpeL8KT$`xVDG6KGYm*nKNQxnWSI|XgDPUs+#!^U8*eDN2!>HO2R0><|gw!2rLNqn&E7;mJ%mI
zXLTSi+6GyoHJ4ERQ>EWEFdS(lRGPU^VF#!9e4+3>4P^dt`rE_Yfg`z*F5W=HJv};^
zHDE@FfiY0plFtx##2)hwF>qX9An|(;23pjCK&R&skUXYDoxrKX=p=ltm>*mV!o)D`ZU3>=-GQ%$Ahre+pQQD1MQY*iWp_j~du`~W)+-Q)n=*hHN&i?#
z7*+lhlO&r2Wp6Tf<+v4gq?~QSbv`f5gek>wEX6~sY5P`YFA08jZU=LJYAwQS#=GG5
z)Tdy%vM!-aZWGu=2zA6pC~~`pylFAtU|38Tf5`RFUB)&YaAq1AnR!8GI=AdeD!CWJs
zJxW<&P=68{d%g4gm=f5;<(h?9Ze@Ghj!gI5BM)|;vkrV$C~kqi~^
z>qKnzN7HM-Uea4bwd-%U@D}GYj=p9iHsloTQ3;JXhaTV{JP4LPK0gb`w!Yvjf0Y0V
z-Vu>0W6XOVCY)U;5F~J|Z9=X^FmK6lyD(k(N&?ZztD~?cq^L(Q!5#i{sos^^V|~-a
zJSg31TOiFM=*=IZxSdO(D=fAUX~QT~-2r>_
zwE>T0m&OBKlfQo}9XWw}&J`V6_LLn+k!H)$H)*fLP*3<4*GocfWgDP_7U#%Mqi~KD
zxJZyr4>}JQ>51ftc8&U{9i#x34E67Ci0S5r-r*VLv(n|9ysvS+)6F5EhVhjroi(XW
zWM08g#!u2qJ2cS%r0?n1w$SmrBenPm3=^qo7W$0e2&(fCU8?6iW!*~`IB)*)+^
zHxGkD&53ooH5OuQa?wuUQ%Zg1yuFl^Pf~kLBAWmAg!po
zK?BaE!u_A@v@+WGtUQw_&C1UKdaucIev$pw-cd8+Uh-dt!4EFi@6tjMh*6me%uh1r
zA9w+mVK(4q_lIP@fC{vt6oB2R{6G-12@a7<2RvSO-ma6H+opyeG7sPtHqH_fKqX@{
zF>BE^h>;QNPR-jT=tGK)1Sex{sh7Swz2_yNGHKgCN4M%ZSc1_4J@}LBMp6a$z0}Mt
z#?HnsSC~$iW#S$PBb2oz*7hO-3HD>CxCV9D7*{|eg@0x9>@JbYI)xfgiqua*wa`oZ
zefIjI>6E+E|1mP{N#JosSHVtE_4zYzdaiq&>-#xW9cyd1)_fXKWOw#4ZRVptMS5_4
zR@e`>nX(H8)S(Jx3VFVra}IAeODnRj;dlot&Vlwp0>hg9NSHy5)bV?Ej=}SVgt%r`
zUULUE$rj4SbVR7D#AZZ_9`3OqB(3r^nHQzoYXeQx(H_zze-mwk&PC_8QxDBhQL+xh
z>lOXN)(hyuz0-aob+rD$_Y%cO&wd37Iy$X@lEDfpDdy!?7EfM2BKzeA0qivbFsLL*
z2VdtGNdCT9l(Q%7<|eO86vQtE7q#<=Yh>|2v6^<$)&zoBh#2Aoe^0u0lN^P>30g;s
zHI`ikVQJz%$G&E^-%-_vH-nlXo^*YhU4u?+*9u0U%@k22%M!(zy>UOU5RX;t_@Z!I|M{yJz?Oyu!r5P)Xr>c
zHKv_CCb@XMpp74F!pV4(@BMnvrjyTZ9RL_z7C2KmKLz9uWnK&k}?MAV%;{3JmYttt#h&S9EQVXfZbb`euUF6;aN7FY(hH1O*nlMosX^IOt74
z)G*D2&DhhJ4@c4p7~FP`;O7Whm}^uINJGZ_m9-f`9$?AtLC`0#(4asqOZp{6uY!1V
zxJ9!aCzw~x(JHsA0^BZ6N&ptv#&pMn;8mN>72lC*&;Fv_j)Sx-#9IYJru((|d-yqs
zhUcoARZh2rR7$(;Siau_<|*3Fds$ayF!kZD#~Ku%{O>}nDcLzDMwt6Cd1@|8@*rf*
z2S5tM@VS4oAU=sPmU+zs*DWjxE=2~kkoz%m)cX2t>a_8{
zpFbgz1&Eey<(LBAsmdgqL?3ETG}7+9jE6qs8+XIh8!6N~8r!5dlDAlR^$$q*nksUE
zA+m1$?JGv3Hg2$nJQ;}2UZ{km~
z9oBrVFEEVdH4%JCJjN3+g}E8<{X@q7>V^8NF`8o~k!J-Q{FN=K
z&495FSv0$voF4$x4pbGFHX{#Oz_MCWjx-yiRdVvwDF{Abjsj!zI0>RJI*{)~r_q^6
zWb9SfAU*l%18qlL#pelK($zmU_u~d+fOL<^cxw<%gDc$5MYXXH*s?+*XAO8)+&%jU
zobkSv$^S_d+$?AD_R6e5W|2mUra0Rapr)H;8!|`9DL_;mr6Nn`aMsaLvIAZ(sJEl|
zDut+RRJ4XF-1HuGK&QXLw>DW3ZAV$qgI%W*)vBl#1tUMk^T9RJ@`*`oC!VT}GEy2I
zMnShupnFU<%Rf#oT^vLe!svRks(s<2s^hZRPKdw<3chP;Kc}Z7&lmxs)_01+EWTYfzd=?alv{q
zdMuI=)8nra*ZEgQKzN}bjn|^xe;OjRO<-sQD(stN9X48d6
zqsN%2?gLUZvf_9t{lsrWrMe(ih#KxTmhwNXHy*nC0`U7%8tuflP?uo
zIRvDZcngy}LD5jtA>0#DTU-GJ_z0=mI>C;_cfJ@Dl(eK
z#+!;~wk=3p$BS#5USV&%xBYV{6`GW}HK{mpf@_318>Q{o=zr6B^ASspUKlB8B(n@X
z*CM$&*kw%NQN_$A&2riV
z(8K@O?ds{jler;+=LF1O2QAYKY2*Y(rn|ow1^1<{>nK6k4}&JiSb*c_{o^I@2Vk
zh6vtYS6wJ5JYa=&tnbP3))Dk0^=!%yLz8oi#k4d7^(3vlDvY`X;&
z>#4PCfg^>M(uxgdHbVZ;XsR~sLxA$<4Yp)Gik~oa8`8ve9c)gZHr`NZ(C-zBlz;>k
zS+t_mqru#G)~VS&GX*G%rj3atOuxb3#0myI?|Rq2E>z5<{*0NV3F!
z;cWjzsgo5XKPaL3^C!9IdW5
z=^q$#Z0Vz6zaex5{=enuzfx1p%975^(a7rW8+BIGb+G>Q@WZ!TCHPx;m}mwP>ak<&
zdq8?W3n4D!w!`k8PzwSe?yv8@WKihXh>?KnPaNtdnh61HYMVZ@BP_Iwz~oP&D6#d;
zXPI29j}hVpDj)+Y`l18}_{1+<$AxFOaEpi+0xZbCpS>c!U}riZew6k_s51F^dB`@x
zK-RHJn5S$;@no!>@75Y>;sGU{nnFS1Qz}z+_?Qq=3dObJ20-$KyJGWCpvdt*|CD}b
z1JHlWmw#-u|2@#Zg!DIBqu2@a@8l7F{(vm#;xeac5wFETG}#tH@q~AjzB%hA-E0_BrU#)R9MGH+-__&fIqRA@h#J7!n*cwPn>@;B;$S3hcpl2d
zLh`o0>_%&tavL?N+ggd$*D@0DJInIEx$1Cl)o71D^kg(myThzoYbb
zSYs+>%X*z2dF1*Tnfw`^+=>ER!Kg85mfXnGap4O47`Ss7uU>5)lR5^6SBeD2mfsazG1-)M5M@<5u*<&f%{<7HNbrl<%o3R-H+
z8lkv|V;ft($#ZA+r|mDwOnI6psagS&XQOy}$WQeq_frQxL?q(R=>6|$%izP@Lwj}g
zWh#Z4I498T9w6AJcUa^%zF)IJsr(-1e9xBj{BOY+N%2d*wzU_r3TY4*Lm|d3
zk_kx~Unke#pYkEj-q8)F{q!KB`m&>w>;jL&cwn${x`o~n3T>T0p+o{X*ls3Bu*GVn
zeI-(f!0MqGf`N!3>>$(p*VCpzTNoGsM&astu$M(i{Z-6h7%`9%_cKydN??On;vUW5
z^pmqm^bXs$v_ViO71hIH^bSRTtT6GC_q9=?(0uL+FxJo3q{A2{lePVu)1dSHsE@8@
z@E`|=r^SC++xncUNI`9Pl+EhNF@?h)v%=+(U39UuD*9F3cl12XsKCmL2Kr1uNaCC}
zQVl>KD|F0%Of|FElwR}ydBeq#G?B;1j^?4e*B(PbpmGtvL}Hk@IJ8$xz+)>Y7}&?4
zHRl>6I-E*e7}WC{`c$4|DJPk|62n8iy;2#YX57hD=KCR
zvY#G4@R~<>wL`iBpHSKZA&)H%Qb(}eDqsq3Oy%JcCY##zrnP}-hu-Le8OcL0bX^@l
zI2lN=LaXEwe|J55*`u^V*{x4pp?*;QZB$`c1b`@x*A{mvRAhM4t?_iBLyx$K33^k~
zDFx_GI{Vu7#h9;2uf7-wKE3+KayQrKfU{Q(3T{?9jK-^c-_mzS$Vi*+D-u~Ar^knw
z4Ll;UY8V90e!3m%J^T9>-nG!|arJjxX#cTv|6Sz&Yuf6+MZVPxhG4cH0p1m+bb~o>
zg=Oh2rZCsS=32kocQ8HeIiNJ9ICH_zLvF$TZDx*)Z0uqr3bAlmzsf6PTM9BpNFb3K
z2T5imwN3ry2sVgMHcx1{94DUB=T7sB<0DjNv;!Stf@>%5%b2h0SAFyG?nd{IpJ4>>X;d+JS%bO9{S2M(6`o=cTryE_Z=Wn*x|7v#m
zzeoOWNbT>D7b$96Y|_JfUe~Zc&`#jRTLrxcVCmw|@=?J2R!&xNDNZ&d)~+df=utiX
zoyQ%ogvz*TB@!kfO>v)%Xg)6FKc%I%?ktNR@?o*(~_H^L?{jy^Kez+$u*H4xbgW
z0dAbMZs`t%vp&SG3y=64HWEB7qpw)@vJ-(J$y+jWxgcD&6;$`xrNK&|8x`@O6k_b3Fok
zij6+y5Un{zQtYVLiu2-|WX`_O^t*F0v~$)oe>`%&W7l!AkV)1bH>i|M-K9UAh8pmo
z2BW_tRniqdC1Qg(}Emr9%1c(vRa|9N3TxIT|3mE1m@Z`(!nJd}0QZjIYD;
zLW~#+&6D^91N@Sa_D`sP1Psmr4}I}>Z6AHlEd2Y<_J30I-=21gRYidUE(z^ENL*L3w^fU
z+^wD17z^S)_S_h-BKH;BmfLvQM~7dS@-~roHAjINlTU$PuL;Ktgn=S~N8NopsnzdK
z*}vsuNN*6HSQjfU0?eYI9XW8|N=W-eb}(s*4-_3N(Sa5PTX`>i<8^=X9GETj2dI(I
z(b1974IqtY7XiM$_So=(8qbD7Rir#VEjSVn9|qh{8`kv>J93;w2S?bgpvUvO*m2ah
ze{3(J$B>qcVm~4E!k3;rlimDU{3AuMs-zZ>z*7sA<^jz^*&4at=9zI;s}
zRhOQ+aQi#~b^X+jKvc;YU{;I=h1vYG)dO{7>jYXjnAM=wza4uv8!Sr>sMq8o8OCIy96c-W+NG|*~V3p1$AllA{S`v*Y#>3`k)M}
z)AjJI_^&WN1f=X*)ak%2pg>VG1n}4*$TZob?9htEU5T7Y%#ZM=tSoF-R(5b4~Y0%f4=yQGOSI*TjSDQW1a`$25Lu~u>eb?Yj$)a3*{`3POzgNB-}
zUbb!rx6&i32*S)*Lp0A3>1%=)SP%Rthk3%Zn}fE=z%LtsbtDo
zwW@u=PYZb+K5<-rnX$o6K7nPV+?1d=WTrq*G;C$A}}V=y53)*3$Hs(
zPK%UFMv$iyiT0TIequriuPprXXMjz5<|ds@OgDV5fi{=ZF8L_Uyx(#q9~V)Q!l`nH
zh?LLE{_d9&Y?6R?QSwWWrH*2AHWHK-wpdxWbu3VH+U}X9>DRXEF~?hid^Y$Y61<~v
zM`|aaV(jNybO0)>_+i58QFg%gmB7XL_8qeV{1M@CwUE7GL^Jc2k~Q#cm|imlSY|Vy
zma&S3_mhy$fv0(t4lm-fIyH-!1FM`KJthedMNmu>uePYQBQiv(Sn)61;tn_P_EK)e
z&Q}4g73Unu6Y{F#4n2}2(&5SnkMYLJTt9eh@K6gCOExw;E72)wbF-#=*e
zh*!p4uygG8EGW<@=kM0!kntaZx%@!>v&+i(Ld&)fj)kc7h_t~SZ7?}%y
z^D)^WuKc9>eXCRbqWxjDStiJ@v96t-tF7tG2_|E)&7|m*QJ_g64($Gn4kFxAx@S@p
zmdZ>|#*&bVHo%1RnFBWrziP|v+*y9#9$lTDwO0!z(uK7PplM2BpV~g!RBZM4tLGoi
zS<`$?{uW5gTDjHraV?Z_YmK2xwlt#6;gcYG+`hx}D{vqmJe0AK;%hY~r
z*xur>4v96G0{=Xkg^9jq!N#3}!iLmO)}Z%Hd-h26zN?;Ybnt6x(aNaMJ#Jb#Prqia
zCaNPBOAn@HlO~NUQ$XQ~lnu)(5**B3J09nVq8Ne(o{hapXOJ{Do~p1e5wnTPs<&UhFhmWQfiw(HEvp)
z;Enzz*HWg7pby)FAiBG?3rq98U;q9D(49ZYprKdZrYBPpwiiB{H71!7IdxMZy%F$B
zO-%Q}Y1Vb&GvqmW3$S3fKEWstMp+&~+3raj`P!r`xxAW8TaiF63V`o$*nsM21rA=@
zcsHK=egh-~C*%Y*g>z@4uZDepd31Kh3%-azSbzFpjnBu}Z)05;q`ch%vRvC@Vgdnu
zhF!FF>9zz+4*R9f5Z>!O*@GK02VV*X#USMjC_H7hjUq!fta=xvSQ{=wrja^CTx9!K
zIK*be$8RIUcLqJ|)dzwGWnQN<0&?AC)!8Zx%)QH8!?6
z<7M(%RqlqPc2WJ2J80ewL#dxb-RL`f?Dp990*ZRSQ4-5k+%0#|9pZ@Q7$oN=$+69k
z6&x{PV+Po-T7OK^k`|qjdIIGWh!B{5I;rdV)LOEQOZHk6`hCSjOigZR$;L@|7kOb|
zLeQ2KXPX;aExwvEt{)fgvG_r^*%kVe9=W*d=7Rbc)Gq_;pEk;%aTP~mz
zPFjGAx*r^+XIpHX^{u8O3>ln<%U<>7yr>@QEpt4(x6J@Hp1(Br1>?#anHM(&l)I!f
zrW^`&rJYowJNM%l}i@
zxyLiT|8ab7Gf8e+rcM{vVuhmAuyu%BPs5B!85u2;p&WZ)E*-L+gbt@tjFlnM$r(~g
zak?NmvXt9Vgp)2Dk#fmz`<@<;efK>(=lAx9`Q!cE`}=upAK%aW^?tm*M7Z6Y^YJUC
z=oD*J^v3ELoY~vD6^WyBzS;7(z8SZ3m{8j_szSUS|K8NQL+|h`m71SDqwDo3(N!Tu
z{eshhI5nZTwNL|q>kJXyvZ|xQOYk7ua&R#wgiWS*J-R&
zb9`1JpQc@!prO?B((=j>ehHC|M}<>J(aMDkk4@|bcJ+Gqi$CA*Tv_PJyo5cZhnGWl
zW{>UcbXlPxA5*71LC?Uw`dC-{7X_XjR=wLxshV;$T=86+-*XpQS8BQ4vlB0Z_@y=m
z#(S#Lz20`LIWuo+H(cCZEc}S$Pum2VMm*6T+lO-G^LTW4LXoiACB1+A*Ls`rL7P*E
zvX*h9#Lc|y&mr2}N{_fvvhfF#mY8M9L|#`>TuTGef47;E$tuUt3uUh&dV+qz?DfWQ
z+nWz-p83$DG$s^K*E5tXZ^VU{uF^m@`DhJlVPE>v3D<Kp3yDuv{9Q1I(8oIo*ZGzQ}7eED+g;jE%aB(
zp=Zyd)>&b2bW;BzQo=NT(%t9=VQY#j)#}?}R`b;H^pO*4ZL8JVvXE`~mTdk2C5JHL
zbI-wVcR)@5&^GBzaTE=Jn27R<$GlyJUN$-(6?m}1C(
zol*YfJPI6CYH~dySLncTIo}oke+zovi>6RyN^{1}H)hL|3-a{^R%qZ@o^c{0;YHclmYcrgj*&}Av)5qWc
zL=LIQXdt)$#QnkC{HjV|G3T__h?0p$;DIQ?ff!QgLVnffDc@@JqOEbm@yAQLry2^p
zJ5JJ!3TA3m%LQ{UUU&YOzW#n+5X~cF#YEEb>=#K+YXU0Ss>>DxvAU_=?PkgNyn~H{
zrSaSIEVN8m*B3uAvGakC)}(cNbd6rnDWiC#MZprdv;^?qH7Lr1-Pq#4!lc!uaOxa&gAK;G
zg3}uMYt7116kVO~t26uMkkJlf4~@5e;oxqB
z4GoXGCj@ZWS?9avKMC@}FgAB{FrG%r16?~94inS$jOKUjgiEyNRRd~9_V@hkr}-tX
zg?p~{_VqjBma{h16Zj9@%8mqU*E!bxpeJAM5_R(-QtjBgvb(YG5WLI1FYRgHg}0Sj
zDRWA7uCUwkdgqE%^j94sTjI_>T(f_%yD;aJI<|IcZ7X)}+ubzdP5Td);P*CMyUgA2
z2kn6EO@|pSwdOscC%n?%VrDRQ{&@YL2D5|P7XUG|GjgEznYeucG-l=GkuW3-fk41Q
z|nqCX}|)FQ!PA~qL3RE0vc~n
z3iyed(v&SC4+R+%V7r7;z_x+XlpN6nh71buEKVo|?2jf*nX;Ej0SpJB6tD-Ffn;e#
zul71YDSx-%fz<)73+Tr}fnb{{Y2dXz{{fV=wxK|dlZx{nUjD5z=F0|{g;Gxtkf(3G!ZNi
zOTV-K_fWZ0<~{({PNhEw4slR`L{)~C0T!^N%b+o#6qy?dSO*fTJ(4g@00U&HUeIE|
z%8E40Fi|$^-@j~NtwNf$mL;1dQD&fZfqUW7ON~wfv&5Pnu+%bF3VgRJz0`^+P>Rgm
x7JRQGT}D|Z6abVVlLG$FC|yQH77QliE{Wi#B=Q1-!B&fY@X9b)bB_40{{b|RUQGZ1
diff --git a/mkdocs.yml b/mkdocs.yml
index 93a8beb1d..58e2dc826 100644
--- a/mkdocs.yml
+++ b/mkdocs.yml
@@ -90,6 +90,7 @@ nav:
- Examples:
- EMMOdoc: examples/emmodoc/README.md
- Jupyter visualization: examples/jupyter-visualization/README.md
+ - Ontology generation from Excel: examples/ontology-from-excel/README.md
- ... | developers/**
- Changelog: CHANGELOG.md
- ... | api_reference/**
diff --git a/tests/tools/test_excel2onto.py b/tests/tools/test_excel2onto.py
index cd81bf325..3a047a75a 100644
--- a/tests/tools/test_excel2onto.py
+++ b/tests/tools/test_excel2onto.py
@@ -55,3 +55,10 @@ def test_run(get_tool: "Callable[[str], ModuleType]", tmpdir: "Path") -> None:
str(test_file),
]
)
+
+ # Test Error raised if ontology to be updated does not exist
+ with pytest.raises(
+ FileNotFoundError,
+ match="The output ontology to be updated does not exist",
+ ):
+ excel2onto.main([f"--output=onto_not_created.ttl", str(test_file)])
diff --git a/tools/excel2onto b/tools/excel2onto
index 525fae061..8b144d1a1 100755
--- a/tools/excel2onto
+++ b/tools/excel2onto
@@ -80,12 +80,16 @@ def main(argv: list = None):
except FileNotFoundError as err:
if args.force:
warnings.warn(
- "Did not find the input ontology, "
+ "Did not find the output ontology to be updated, "
"will fully generate a new one."
)
input_ontology = None
else:
- raise err
+ raise FileNotFoundError(
+ "The output ontology to be updated "
+ "does not exist. Missing file is: ",
+ args.output,
+ ) from err
try:
ontology, catalog, _ = create_ontology_from_excel(