From 7ddd848890cd1a97bdf61f4a444788841dfe1845 Mon Sep 17 00:00:00 2001 From: Guillaume Brunin <32393981+gbrunin@users.noreply.github.com> Date: Wed, 8 Mar 2023 18:07:34 +0100 Subject: [PATCH] Handle serial version of VASP when reading the OUTCAR (#2881) * Handle serial compilation of VASP when reading the OUTCAR * Compressed OUTCAR file. --- pymatgen/io/vasp/outputs.py | 14 +++++++++++++- pymatgen/io/vasp/tests/test_outputs.py | 5 +++++ test_files/OUTCAR.serial.gz | Bin 0 -> 13552 bytes 3 files changed, 18 insertions(+), 1 deletion(-) create mode 100644 test_files/OUTCAR.serial.gz diff --git a/pymatgen/io/vasp/outputs.py b/pymatgen/io/vasp/outputs.py index ef51a881584..78090a1d782 100644 --- a/pymatgen/io/vasp/outputs.py +++ b/pymatgen/io/vasp/outputs.py @@ -1828,6 +1828,11 @@ def __init__(self, filename): self.filename = filename self.is_stopped = False + # Assume a compilation with parallelization enabled. + # Will be checked later. + # If VASP is compiled in serial, the OUTCAR is written slightly differently. + serial_compilation = False + # data from end of OUTCAR charge = [] mag_x = [] @@ -1967,6 +1972,11 @@ def __init__(self, filename): run_stats["cores"] = None with zopen(filename, "rt") as f: for line in f: + if "serial" in line: + # activate the serial parallelization + run_stats["cores"] = 1 + serial_compilation = True + break if "running" in line: if line.split()[1] == "on": run_stats["cores"] = int(line.split()[2]) @@ -2000,7 +2010,9 @@ def __init__(self, filename): for [n] in self.read_table_pattern( r"\n{3}-{104}\n{3}", r".+plane waves:\s+(\*{6,}|\d+)", - r"maximum and minimum number of plane-waves", + r"maximum number of plane-waves" + if serial_compilation + else r"maximum and minimum number of plane-waves", last_one_only=False, first_one_only=True, ) diff --git a/pymatgen/io/vasp/tests/test_outputs.py b/pymatgen/io/vasp/tests/test_outputs.py index 614547a3582..d0c6793df1f 100644 --- a/pymatgen/io/vasp/tests/test_outputs.py +++ b/pymatgen/io/vasp/tests/test_outputs.py @@ -1405,6 +1405,11 @@ def test_nplwvs(self): assert outcar.data["nplwv"] == [[None]] assert outcar.data["nplwvs_at_kpoints"] == [85687] + def test_serial_compilation(self): + outcar = Outcar(self.TEST_FILES_DIR / "OUTCAR.serial.gz") + assert outcar.data["nplwv"] == [[74088]] + assert outcar.data["nplwvs_at_kpoints"] == [4418, 4390, 4421, 4404] + def test_vasp620_format(self): filepath = self.TEST_FILES_DIR / "OUTCAR.vasp.6.2.0" outcar = Outcar(filepath) diff --git a/test_files/OUTCAR.serial.gz b/test_files/OUTCAR.serial.gz new file mode 100644 index 0000000000000000000000000000000000000000..b83f575a0398766d9662f8eef747dd4483ee51b3 GIT binary patch literal 13552 zcma)jW0Ph*+jZOSvu)e9ZQHhObK2IlZQJIwF>TxCGuQq8fj1vgN0L>?T3LIiQpv7O z5CaADzXE#6Yvb~lGwDIA4@5=7jbttoH>ps6_Ndh|JE>*fhIB;U{DN9cs(uKCtyZ?iuMOP z+{`^z{sMBb6~1ZNii0PY0Itaj>ltzSRs5iWS1ZYz$wa_b!wLO;ugH<$hC}bEPzE;%tg+shJkkAcEpy&lThby@xIwY721Ga523n zXA`x$&KQBi6|>IOO?wc#_~Gi$JghI5tbbC=63js%L*m`%O0SEpmVorRh80_8QhxSr zdumsm*-qli0gt_G>IBWugP&&M@&fqKu4}>^k5`M?GrWw{YB79nqOuM)33a32nU>dW zz0I6|@50a~tV67Qv|u&5H1^+?z^45)Nz?SXP?CS&jIccF<>s?s?8y9B{+LT_pG6r* zl*ClT8G-r8kV-R8X<I_f_j&j3rZUY}QyvvbxsZRcCJP1|uH{Y={ZR4H?~CKZ%iH zGmsq7^Yt6m0_4FlGfPV05!399URoJKo42#`y|Du+X==}qC{eR>i!D#BQntq`3BCQU zjVQh)^yADYtmWEln#&sm#e>;hUnxFqYayFG0k%?b-Y|7t%(=kT|Cp6D$tX&f73ULG z)JF5!FXcV~b5{mG3H7iBC5h}CxHkHY+f2XJ?81g&`<~&T7FqJ0kJRS|LhQDRS6HYQ z7m8GF3gm0;gIiA{F(;_f!kHYq+WAC>FcZ~<3jKPW9epy%A8o{zK;mbqkS|^ULrR_= z1%@bAW1Bmyw;@3D1MfB?J=kVA>5C2W@ps(ebS|2tcMmzbbaFp2;~o1m$L}$t$U~0D zI53o%6}qmk*e`a+Q5Xk}Ht=oB-|sv>JsHT9iVkBcj$e7}ImnNgw3=?o&lpT*S>O<82We$?`AB8NW%LWZeHjB*_UMYGC6EwalQm6=}H zrx9(``ovU9OI|Na=4TCLPWFRtcBP~MWl9;N-_#^pLTb$3`qf;qN%{8Pig3<8OCGp^JP^9pIuElc=ia^InGs3fQZ zE<;**t_FaWbZm9)|AG%2a47$*ro)IGy{-0qBTWRboLm}vo;R`@pRvip?E~t6X<@$a zrRfRo&VIx0Pn$g9apU*%0V^btJgYQ5fb6Egp&QSH>{1wm9MZo7 z9gJ=q<_idnJc0aX-Uw1@*u%-87B@L#8?z=z!_-vo8Vj6w&$@Yyk2ug#Zt4~qX#_1~ zl*a1oykF&~%r|y)w&XO#R5bHd#34nVN%V658+_LJo%yI!*ahb46+*^~mQ6GF)XSpX z&K(IUm(3oymP&9t*5Lc~^fkG!WU|P7C8V#?!K!8!jG}}11`qoCf_np3Xeig?;)d6_ z#BUc==97I%@XjJE`zn@u`MZ?{nMgeb}8hNHXjjvX-Hhbyp~u$y=@GDo>&5srl+MoKA`z&Lo}I zwP44GB|+&t#MmmJ9YLX6h67O=z*AtiS7Q&R^$~@?=HTstp!CBEF?Woe| zmMw;#t9M~Mh5ZliDrSVFpHIYQ7=mz|&SeyzMb-vVRYRNL1%MZ7J$S4E#v*^uC5Qkw zAH8blH6KYme~(=mPsu{y+f%jZY6AR;cUb0bGo@v6+2 z0*jUbFvSns2hKsh>5Qxj862VFfaZvuzR5fN3$y0#(^s1#{?JjUBZ56h+KeVhGaRG^ zX^FKmUmd}k;3Tz%Cj+&!l=E*{A3%2i9;&+)|>0)74?R~ z$aY22rwY{$osokd@sW)udqe2>L&j4PoNdz>3PHTz8n;dmWzqbK%``CKgkW%uPUqIO zdvz@lDR37uGqkZJ#7TxV9_sD|LRXY!NE#D8e!Y{f;HC&;3Bxm;Q5Dsn-yfkyC zNFFxeHI7FyA^Rpm@In51OASlW)m_J+i>9|p8;i5t(kCF*Fg%JD6e_weNkExy)am$j}FqUpp*!tRwpOrim3ud|IZPnQrcpU+s|QNE7F zh&Y4Oz$BSwfsr7zz-g@Lo9~LKxYXP?!9fG$;TqrUs02j&l9u;{R`S6|+3=u+bahn+ zw@F~JH4zql9RA+$^n8xi=wPW@!JKkCx-4HJ_bnZ;J-K}l4b-Hu#-TpyUkpYcGHc(V zgXCDBKk^$3oI0Rh-T4Kh3xv>ry>#|!X)XgMRt@f-PLk_R@s@U<7d%qxn4`jz_x7J& zr=$-3LWO^2ZC(ytQ#G0j9Qod(CQQO63+}(V@0nj&jX5>JfC^MVKY!B0G~$hol$nq1 z$Jm{2*|$XjEx#H>y^3t1ePl)axo0g+=!#ZUCru-CG8jK^<=&D{w~FuCylLK0IGPeF zi|-vbX;l_jPQ-V8Ki#d&-4{YeZ0kQ3Jb{tR@^0I@cDr=1dMm)dR#~+5n9f_b75G-B zx!NYAZ;5h2^J(srrBG7pz7t8{bp)!4@hLV(ET}KsH(`KjHcRQ{{|pW({B`aKDv8o! zl_irTo?*8e>`8M~HfexeU&5(;oKHAT?x^dUgy;qnHJ1eR)&w<-g&ICc(2I z4#`6E*U3_tJGK!{GW=>E5ze0Q0}|&+J-Ny+_QLsmq#vpmL;ZEXpzH?F8S)zF(Fm{nn8qzXn7~@h}kYXZ&;-$yrK?;ZToFZxr8vhp^Qime?}! z@6T`J*3X2wH>qvg8dhRMV*!XVR-KRbh-%C)O+hqIXL?$t+`Ec(GrQP#x z>He22K6uSEgveVxj}IZ|*%W1RNba~E9-$LmM2tBwQj-D%-b-dU$;XKslw(^?`XRs@ z5RIcyMb|_W3zyFLVuCrFl_9EBEb5Cbbt2oDYegUttT5xy87Tph7q1vX7;&^F)u%h(A`6ey$IYZA|Y{s-wV z?dSDD;1PQuB{*Ix1&Ok)EES;>dJ>Qv{mD>CRXG`Rx{1KihT5*(dO#x}jbZjimoOsw z5nP-Wo8-p0y+#@PoTvA$NiSrNi0$?U-e}l{eHXsw6R4ZHF>`2SA(H`3Te`5bcs?Uq+WeI z2t#R;cS55ZIq_7V691hkH&c-e5D(z1v^2Ei$&PbkyoWbG z5M3x8eQ6BF;*^wDI78u~-7x*vE?u^1)X5l`wdCMTSrcz|7O!`enu&<sOxEa#=g;uvde%qYmk9iSkf5g-!0V0;KXUgpaorEfrUQi&sRcw1O%ZOUaC^a3`d|4nM%Obhi7-fjG;2Z=$cVYz)2U=AfVs)P+>W=I9njR|96LUe}&f$q0c6*?uEj)?pYTqvb*hBL|+SbMQQW6C!3s+M-W8v`N-E z2mcH8_|T#VVj*Ios0Jd{nnaG~hqI}tRFUo$nHscKZ^#Q^%BbfT`S%EWSRPsNAB`s%B`n9AC?%G19(sayB9SyeycLv_d({GH=f(_N3fLa zL3J6iP+kxUA|EazjxDi*D$u#?iZKcm?Bmi1TZ@({AtuU1c?8V{% zrBc4aRaH|Lq$tss)AFmh?lKA{YK3q>*-(M+7DgtH|NP|(xHYluKIDT_ff7}BU4V_& zH-k>r)$1H$(vz3a&K#6T30AGg5V3Qs(UTYmxAX-;*o7^Kv&+msuSudD56s(z?xkyo z8JOG59x1tFE_#}! zu3w(=xxT+sj+yp>izK~=(PPVp7_c6)*)v7zPgy>n7Rr~coR9hRDSJp-RtA_-nWF|!17P^KZ0Vr7{rZQ>2dZe;2?x z6r7+}rVO=!j*>MHjG9|)QyZF#sT4o)a|BT!<1VZ)?%@xo@fXGrJN)T!+Wsx?yxxh3 z8%E7hlEKpIvZ+ybPZhI>iP;Bvp)M`Va2*PaCt+L#)_jQ{IfY0&Q?7}|76X z8KwFB3(?=EvtFFa2hw8@dzJE?^#Z|7Rk)%mEawS9Gnv>9#%BeCDq;}(e;{Q zLC!!W#qhfs?99RfY*ulW51KRP!shcQv@jw|hK61Ar()Qp-vTM7_Pecz#wPASeBoo- zKneLnxTeg;ks$6?{50S0TCz}m!P2zHws|~l8hPZ{HMy0o&!5F{|9PT@VE7*TVx$85Hih==xv*s^(!LLu1v!kNMskJuDJb=D{U_p!1ozzcfxsnk(6_ zGKC@h??%9CU+va-eFftCcFgDHF@RM{b~lbAw7>u1B|DyyhG3q3`0W*jBkU+6gmVfL z4-EI6&Q*T1(Z$8>c)GcAYlqLoH=)P(+4k=6^%V`SVcd(JPP8QE#Q+^4cQ7FGoRI!p zRM&Kni&XM>;y(SMi4MSMs@A^$(><(`m~WA9CE%eWiy++R!2`^agRH|Xfq>|UC#|E} z)`}N68SX#U;~39=!SDwP)&U0W>4yUBz)2bA4=3THX1-v=2WC@WHT&;JII=t|Pjcfvqc8jLwrAc}qMQ0@Os-w&weC?LjxJpEBck~Zzu31`* z1;=7e#}NN3-)!uqD88=fWHmK$2J&*k3lU62_6q}bCwnrUpI!FwVBlxqg5fvxxAUO6 zI>Sk8>u=P0Q0`Yf+B)>PVE7M+%8uZHJrG3XU;yuR94c0A1FQrvtKU|h#LxHqh_~DO zgIJBc2Tj!cGz_fK{KyO)LP7{VB4?%NwJdxD$mm-?JXgOOt_38Yv2~uQ)nrKZFyEey z2ZG#WEiOuw`^g^}u36yPH2s%&_iWdW4I%wy@aJrqM_RGfxvB?&t|+O#n4P<8FpHY% zM^(da9$cA8)5xG}7*@{L$B|ubG!iTy*H~g*DzzRr6kMIwS$FG)Kf55yc=qh^9#&Y$ zMdh|^;@r<`m}c!OylsxZAARy*B^co@q&a&9%A@31blvK!%TlG=a@8m2W>n7NoR=4+ zM{X2o)JEO4D;yL2Ri7^5pm;6xHPbf@fT48mn#4;Lq{LI>hwLH*;XZscBN{g z4z02+v}cUUB?m7hsq`i+HLkC<1rDsxPGom~jSVe7@8pHASyO8~G|`q+4;qm$MqC-` z+lsN%R}a*aB@d@8*=i+6-2zaYq9Q4H0?o8*XHmfi?xiLIViyY?}jqknVh`s?p_j{kT)VcD^RwXT0Kd@rS1 zFvK}&oh0L+){v^6td~g`2)-Y$mpyKI*l%E!z4}&#j_!@$i>YV2uy?JsyEuY~je3?a z-tu@Gqgg@GgjOh5Gt4*PQqUP=ORAPYNxY?4?aq&P=idSyy}s?>_XgdRX>jHmVm zn~c_qdDj&^4c{C#x?Z$)Q)^+xArn0E>0Q_FT0Y^yAIn<~Wz)2eG3;oGx1`R9bum|N zsJa%58D&aVwUlcT$w7Vck3+m}Z`|opAEkS~woT~c^L+=)_$KkrivTAhpOjAh(sz=) z$2oa*xHiaYbzP{P=a%~5H{VELrIwXmxO|0}jH^4ihS^zbmqCh0&-}xm`S9cEeV;B4 zd?(6Pr2`JOe1Q<%PZz8Z_fw`uV@78uHkj`Jhs*oEnClcOQARvlZorv@GeqblcgJ_1 z&c)$wKVSR~Ak7H6x#2^U>b3*?!z;W?KvLMKI$U4m02PrDpO=Tr_kCwI5;@k40rm2S zG%AXh%WL_Xf7GtJ}M7yRF!&GNa_ zs7|I?)YsGyku(eYw;$m5z+-LHiJEW-BSvxt+^l+SL)bka-;bdBW8c%#1d381=2#ho zqjjP737CkiLeYVe7sn?Ewb7JThAu-dr>6&IAB>LUk*YC?xfm(#rF^bs*$~hD!JGNI zshDw9tWMUit8!OgJC7W#>g&iDG<*gIhk)wW zTr+sm9#5Cozh@y1akoFWS2Z-wnT_ZjKnGcral`Fv&aJ&(H!JTzGzHGoQJMQ4$`G7H zxM5xSv3s4(jBrer;mPwCRsX)${dgb2xIcbAO(oX`tKrJvHay%iL<)hq7zeie8l;YB zA~vy6pOqLJW5gujOhApn&#GI&=mTTt8cePF`CH4-`PYI%{#9|0{cI)!y^x!O78n-$V#tSI|sD1@u7C zrdUP$@f67QciL#=8F!$v7$t&NE_c3Ru|A%lmNX=%M^~mRP;2a7MOvb(A|%vQgc}gT zo2sTb8TCj$Xrww}$*XZ4=ri{&%_$I=BVnj0a>;crf~I4Fbc$ff6D6Kv%%2L-O4S!B z$XhMfz(PXCYOaMnU821n?m)&!^U`x5Xl5bkSjWd!Zb8!wnQG#iIpjX(^KSmWLs_@~HsjWDDMpUed%<6g^!APCVy7 z1LBHD*o~~n<`z8EcI3$iB{lMe#LLgf976a*g}2LaG`(q`S+s%@1Hn^(7R7Y*TzHUH zeQ+W`nr3Ncy&^Tsc~P9-(P31>UvF3dZ-YZ8ZiQnWOFH^acM|ap&T-ucwo+#2cmzq1 zxP;bT6wBzbub1Ac^=H$v3e8B53aY%jU*rVaX8Vs}_S|0)jSk4!Iz1OMPRIBia;Tl{ z4@^XB0uf%jHc~O{zRo##3aFYZYEBT`-4%fv)NshdQ!M%p}NKxXu=j!%2C$ z4NupFvOyoSm*aupmRi{@RPVe#p%lGf<-c5s?lyFh>dEguWBva&Xk>S}f*%P#+qh5( z(XH14IMJeGm^N}~Fps;Mz3v)nW>O1PLlsC`ywtb^t8nvb_-P&JYl~R60@Pm2-bpYN zs~GM=&*Q74FE1k^=JNO+%RrFmobsW91UQWo+5<^h10nc0jCVU))0A%_c>^(XFaa3$=R=0>U(!u+585g{{meCxn1C=|gW5 zg9CeAlPh>6g1D~kt_9Faj4(qmDb{XXDxoj|2>wO}4R}8B2*TxXGiZPyNi&WmX59+# zI{#7BGi9?s7Ds63isG#D$K=vXli6ja=7P7S!qU_fwd59X{=_AjKDe2s2&=`Q6*5t1#evFfLKt41H>6g z`H2{k5gMga>7@=|2J`mmaM{FKC@6|6A;g}fy&x4-L<S>D8+qJlle-0Iq*Bc62&kIazNDAU87MnG5%@5$tTpP8yG3Duadwmt(kRT- zzoO?CZgjleA>l72R^N9GV#rP6bI~Lh4>k~18fa&_?^7t@y^)Pzkj|3_5-5n>P$w#J zLMU*-G-lQ1Aik2x8ght?l(}Dowg^LbZ7G|JZr(It=LOJE#G;sjNO|Y{L{L09!HQ8< zV7}`Sgt2K?6>k3p)l${9Hh)0;To55>r@?}uqFX?PkQO(bPRP$7k-*@B!{sHA4BclM z5yeW)!61(DU5&NEg%Tl_ul<&#_3_P+!It1{{JLV|_MQJvjL1p&SPIlsSb0>sOR~XI| zAqjS7B=krMpQWhdugz0;FdN_7lUoD3%>Jt^9X_dzDh zi2dc6%-LNkDRxaBgNUf0}kiyD36(WsG7h@cW zip)gb)4w8xOL(c=ZqCCMqoCpCHV3UC3;RWNWQg;TLyx~A2b9Dx%zxYg)(Yh2h>J3pKyPpFf5bEmatRXN8}u{O zp>lqu%EcUI~NNjGTke`Ms3XSS61U_l=RX~@{gCv<-|ZX zcqW3ClG53+X+xh6qRkk-Lbo#|8i>3QL+9QTgBdqATn5dL&+R@)(v~aFHCrYL3qR)d z0>?;{ge`Y!W{K#*!o1$YWC_XV5|&i-9=!0`WQ&YTjQK{zyiwlynSaV6hhap2!*;pV zWqFjrFIfe9#2D{}+XD5Lqn=E4H<{Y3dJCMc+1Ynwc*;r(oG3kIBQTPzr^C zgF^|^@X7_1N%bJ7+e&5kBm#%oVbfQ_i%W6Wcr>4yp=Rw1vj=Y!DIU_%DC$=~$l;*( zy7PeGiyWexL5C3Mig4p|VK=xvhMo5%iosw~TPB^K!6=Olsc{C_PmatlS>Y(WJm2jh z?j%C)6y_i3g9r>9hQ~W>*VP&+mKX{^w(9CQO#{CQjx-aeFm*F7LPd*wwW*RPh9acJmUBN(Il)FykzHIzRKt9sKa*5k_F zk%AKxBZUB%6?g5aOO*lE3BriV8GiyfL(1)<2N9GMnI(l_VQi9GN^BE?5tWB+48ij_ z6N{njvL<$MS4$N`0DC1C%eNs*l+%P^c!h=ya%|jre*xfl#fE6nnho4ywkpY}VwSmu z^w!nH*5B6AT4Hj;eqVTn5ZD_%eyHRVSuhWvMllVTrCjL3Qm(43#Jv;g?0CT5XLD(DzIjBKy+5<%%eN~sEVYql_4 zVr2N;H459PP@~FCMN|p2f7DHRM^tI3L?BmI1P!3Nc$l9LNhPgBqD%U(9+DG+j*c#O z5=*+2g8V00&<84eiTs~La|qFz7~wR4bQwf@bU7AP5g+@ATN)&wPNBKbFPTQRwJ)?kybKk&6Lqw8V)QsIz=xe@3;a_z@7HZ1BmlW z5x6H{SOY|oKpPn z0sXT!3y@r?zSyc!^|qb@CI&8OE#lphH6k?%Tq9mB8*M{n4J45@*d7x#cD*qygTtqW z%D`2;BHPUxhFM&m=?RLmA@+~6k~~j}s39vV{l7k|=*lPypHw4`f3Ht@mM68865Cy< ztWvp9^glpSZRbB!y$GNw`yVhXYL#+KFWZwUM~&ky3BZP0r-9|JvLxGWN^hM|XuVH1 zQ`i}`N@Jb-Z-~JTeOb1fw9+&L@K1yl;*u%l$im*vznu(vn;^ z>3_lAPFB=d5=@Kn{@t{n*FTlh!o0Of&A<NDur>^xqUS9eowO9ouijyQ2V{aN-;&T>2fY@&`T>^4RuFM8l6BZTnTkXY#N=w z_c}wiN1B#Orv^)hQt(}e#Jp0ma64*&00i#-{P=^@cRNYrSpP z)DRSa1@yuFWu_Vn;c3R+c{_2&^;T&ykE$U%&WYNUuEB=#>}<%5%H7Y7pE&!>cr|fG zv*9lmt$I^Ih}1PbB8lS$?mZ*4+cho87A+&+1auBN+W4k3O7PYmX=q&*rcTR1nm#L* zHylFNtUJ$MKGs?j4)1L8p6jiq8nQtX4uw(PR+m$f{#FkT&%k*17H8o+ipcEh<){?s z>Gc+8zR1b>=qy#LSC^A$k=VjrGEz!}4E_Ra28G#f6Om!-hJD%XDXgP3qP%Um`V*dEU# zhO~72vOd4crZQQk(=>$ntpMoPvtd!|q@eS=;)S_vOwjn{pP*-_!C`UXjQIZS-PHN% z`PIaebT;&6?(?fmkd=a1n!xu2K?olI9Kf8PSwdbit?SJG)?rd$z z^7~dp^;G!t--Y9u>4fXXn@349+2YxFpW5uLMqK&NxNFv3#Ddhq1Xo5RI61S&oTy%I zyG7wv2Bj27a8$RFF3E5UStJje`kF8!QtWUUb>Ihvfq=pT^?qyc1K?dsV_I%!q$se zHh>4S^`ZOrQBPJAjaS0FRj9dO)bO^!10z1Yz45-dkYpoCro6L^J#;i)M2X7Y+rlJi z>R2CI&WDy$^ zQTkR)c1+9>28UMDR$7^lG4U-P(O7nJS%9B=${zcu1fl_6pY|t6(TaDI8-IEV}WBZXZGcCIBx0#<4s0rgPKF4nOoa&wK54fn829o1`B%GsdK)x$Z%D8rc;=?MS&1L`pULRtn@Y{=Gq$i>0#rQG#SMPlW!Y zG(!0b{pTkhtBXgr>yKrd)H~#ThDv^2<55LZnIK8tSV+mi#1L$RM;{kYpSA&S`SUIe z+AIj|`=VNv$6kkSL}GKup{w5;?Cr++y=x2QTxnirQ8I5HowN1Ge6TYd6{^T|pUWxS zO>a2ktd%4b^eesyrUCP3EnzWQM1pwENQ%$Nz74uDQ`8QbGB$<)AaEi9ScN#jdMFwW zz(OC3Q9A}!3BIcv4icE;M3e;E9k+l6WMvgw;_KTjKB5j2sGH*;Q){o3RFxwf1k51fdiW z?xE7pJK7jjRBsM+KI;nizzZQV*Bi$OL`A!p(S)N?ZWdgBXxNUCh8-p!wXG=<#RvMO za~sHzM&mv&mR8jWj+xG+GYCp`UHY+luqTU=I=PeWy}4yr*7k0%l71Z}H`z0xWppqPPduA8C^jZ z%s%5K$YcqM9xF;sYFXFXSJZP_vwHhRx_Kd9-@X&-^1bU%#!Bf{m`zG^5n6JTyN9R4 z%?pJ#jnzy1yxn_C#?BnaZ@XE6C3Sw~x%Q;(tHgIhmR?@&$+$d%p3l8kN}e}0mR7T4{KI3$E;C0sH=TUQnB(NAo7$uOzyDUws3;f-?~J$C)#>?l_MD(`8tb z&p&~ybG|Az>R~T)l8YIsDb#JEA62)*6H^jnb*N2AQEv*tiO(`pA0@?K%F0rm2GZ6I zk_PAPDUWqMNY##eudy1GL?-_Fe)7x(GQ5!qAB@RI|U43s%}!2tq>**>{}($GG@DQex(=b!gO z-Va=xhU&VVZ!b?D4v3ApI#g4W_6+y}Qs1v520iZ1d>-w3x%^NikVBkfIBI{HrcUbq zE{{t5`-6ss