From 45616c7f7539fcb60547ae95b06dd4fd421ff453 Mon Sep 17 00:00:00 2001 From: drh Date: Thu, 28 Feb 2019 13:21:36 +0000 Subject: [PATCH] Add an "|| CORRUPT_DB" term to an assert() statement in the btree defragmenter. FossilOrigin-Name: 6bfd8655f006e031c0d4c988356c4b9206efa6bfdb034fde8ffa3361521a4844 --- manifest | 14 +++++++------- manifest.uuid | 2 +- src/btree.c | 2 +- test/fuzzdata8.db | Bin 1010688 -> 1013760 bytes 4 files changed, 9 insertions(+), 9 deletions(-) diff --git a/manifest b/manifest index c9649035b7..2d22cfef55 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Enable\sthe\sLIKE\soptimization\swhen\sthe\sESCAPE\skeyword\sis\spresent\sand\sthe\nPRAGMA\scase_sensitive_like\spragma\sis\sON. -D 2019-02-27T23:05:14.316 +C Add\san\s"||\sCORRUPT_DB"\sterm\sto\san\sassert()\sstatement\sin\sthe\sbtree\sdefragmenter. +D 2019-02-28T13:21:36.882 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F Makefile.in 1ad7263f38329c0ecea543c80f30af839ee714ea77fc391bf1a3fbb919a5b6b5 @@ -456,7 +456,7 @@ F src/auth.c 0fac71038875693a937e506bceb492c5f136dd7b1249fbd4ae70b4e8da14f9df F src/backup.c 78d3cecfbe28230a3a9a1793e2ead609f469be43e8f486ca996006be551857ab F src/bitvec.c 17ea48eff8ba979f1f5b04cc484c7bb2be632f33 F src/btmutex.c 8acc2f464ee76324bf13310df5692a262b801808984c1b79defb2503bbafadb6 -F src/btree.c f85f8abe99ec3e72671f0fc9b09114188974fe0b9a3ea9edc77977e853ff75e9 +F src/btree.c 59695c6e5eb527bfefc2b3d8ffebd178ad8686eaeb810c9f57719d6d2b72822e F src/btree.h 63b94fb38ce571c15eb6a3661815561b501d23d5948b2d1e951fbd7a2d04e8d3 F src/btreeInt.h 6111c15868b90669f79081039d19e7ea8674013f907710baa3c814dc3f8bfd3f F src/build.c 3acec29b23948042173301a8befebae01a98344debf66cbd4467c8b9077707b8 @@ -993,7 +993,7 @@ F test/fuzzdata4.db b502c7d5498261715812dd8b3c2005bad08b3a26e6489414bd13926cd3e4 F test/fuzzdata5.db e35f64af17ec48926481cfaf3b3855e436bd40d1cfe2d59a9474cb4b748a52a5 F test/fuzzdata6.db 92a80e4afc172c24f662a10a612d188fb272de4a9bd19e017927c95f737de6d7 F test/fuzzdata7.db 3fc78e65dfe0be9df9e262075d5a335f18f627da47dfc691d1a7b822f34d4b99 -F test/fuzzdata8.db 2328494c8c0c18d95e5e04b05cc6dd94bc6b5baf9641fc36b1e881619b897b54 +F test/fuzzdata8.db 91d6b30312ae7661d8b772314f51759a8a4c565957b25e16cdb9109f89624423 F test/fuzzer1.test 3d4c4b7e547aba5e5511a2991e3e3d07166cfbb8 F test/fuzzer2.test a85ef814ce071293bce1ad8dffa217cbbaad4c14 F test/fuzzerfault.test 8792cd77fd5bce765b05d0c8e01b9edcf8af8536 @@ -1805,7 +1805,7 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 -P 0edad5339e36d69aed9289bb3e60d35f9930386d76a62bb0194c4fdf420d16fb -R 5105eecccd0b13c8698eaccb6e160d90 +P 6ae4b8c525f446ddb0e0bdd5e4e01e06e2ab975e3effa42fce6a1102b3a39830 +R 4025c666f5821a2daa8fcb5b9013eca1 U drh -Z 96b31332bdac2a0724df8a5af90860de +Z a4ece4dce331064a24f4679f8d9a11f2 diff --git a/manifest.uuid b/manifest.uuid index f38f308993..65fb11bfb3 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -6ae4b8c525f446ddb0e0bdd5e4e01e06e2ab975e3effa42fce6a1102b3a39830 \ No newline at end of file +6bfd8655f006e031c0d4c988356c4b9206efa6bfdb034fde8ffa3361521a4844 \ No newline at end of file diff --git a/src/btree.c b/src/btree.c index 9e7a9c0426..d133395659 100644 --- a/src/btree.c +++ b/src/btree.c @@ -1421,7 +1421,7 @@ static int defragmentPage(MemPage *pPage, int nMaxFrag){ hdr = pPage->hdrOffset; cellOffset = pPage->cellOffset; nCell = pPage->nCell; - assert( nCell==get2byte(&data[hdr+3]) ); + assert( nCell==get2byte(&data[hdr+3]) || CORRUPT_DB ); iCellFirst = cellOffset + 2*nCell; usableSize = pPage->pBt->usableSize; diff --git a/test/fuzzdata8.db b/test/fuzzdata8.db index 8ebedd1d765978c511fcf38d6c4f6727bdc928b7..8b1cf405720ed53761b5d0251da7d810a84c5406 100644 GIT binary patch delta 15350 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 Q9o%Qwnne2r=kX8!5Bz~6sQ>@~ delta 14994 zcmaJ|30zgx^MB`_d+vT&6!(RP`wq_)7X-}QQE*Ak4cu}UQq0@{m$KYI)G=2mP0bBN z87)mnOLGI#%FGnXO8cdP?WOsj`z$l7KcCMVD9Vr&c%_%0yr6~r< z`6(L7nJFsCDJcrc(J6xD@D!P3ObRF2Glh|iNTE0Kj`K*go=c+H91;y@k*M=LiRv>+ zRCNbHY+?9*eq3d@AZ7!v3k6^D3fS>5pQ{PC?An$1FYg?MyWiz~C2^BpQ-%qj z^CdLV{_-o>;1vIqu{#hnP;P_m&+zrS2$Ed~+x*KI3vqY}FVD#5U8VH-0rEHSV7%I2 zZo_cGC%i-vwPe?x0sr-6rX;?n$9{%{k9iFYy2d}}>=(%Xn%6_WOZ+85_hZ=l`gKD3Zrzk>fhvp$5~=Ev6bv}WSin|!0hexrXUU}7n6ps_l*>1TeF>8^V_ zmD;lFBmc)RAZgu~iJxe&-=Sc;JPhOR@=Pwd?qk6&d5?tqBsoSfhFQzxNP-Y1=c8iC z_ZX9)@CNr_D@%^mL|xf+r0u^9Z7~d~C>Jn6<1+zQcJi7q>`U%-jgKMqBA*D!(_|Yy z*~{yL`?l#1S7-AeB-5T?Oo5_-WYsA*92@TA6&VH(mU}Z;wm^OgDj(pjF*HzaBt(7L zb*JlNFL%5tnBo!BHg>NkyWXnw*!Rx7Ed~VcRmj?HRfNDNe>?VS7AL;t3Yea;}|=~D^!Y?oCI@m*!vu~stpb(9kvJyph(j&c&i5oKmK2_k07 zt#Zf7O$BR=%_hsum|S(eUn7j2B5!7*BHdmM^DD^yw7N*&czdmEN~**>wP7eAEbt-oab{Jt~fX`P<~Vf+9U@2r2K#u~7O8pXhjI zOU@c$LTh;i!=oXjM40jo|0Xxfah@iav_n44u;75)QesUZHeBw6T@K29bvZK9Drl1 zi#$zfAzUfngh6Jc7zEMdD5!6*D+Wr!$s@W$;V%t@!C4PD`h|#uumbrQ zkeSZHL8jDzj1wXjdKbx)@n|#AnX#U5^lRs?^UhtnL?sOLh-(t-1xNo!m-B*!h9R1A zg<<2?;v!>FaP+ow`=@djIQohhg||Y*9*s=DF;a|_L^nbbjdEv47cnSzbAIK>>gCV1$ zvJ>}?6a6`R8uJ?o+En}|3v$CDkl#%F1f{9MLN!6$mDo_sZ!UtpPS^%VtQKn|$BM%s zzqObT;g@Jv4}9L4=5WYwM{}-`D^eIn_$gaRCW&DRYlE8>iIz-@ebZ3IP@JS$~Yu{E==cDBhhz~c$wkyWg<~xqrm?S@huWSN`XeB z?{x32w;tR&hBj}}3!~SH9L~m~f38^e2NobKc@Uf|%-jq?Yk3@$C7ZP|^&JtqD=I2s~Cu>-9|&L-l~mSP0MQQ0CxVw2!#s5lQ1=V{p9 zpUE8{;)3Ym%>KS$ZK1|t@s>6vR|}P0-&XkNgj4aSBSMn|CDUvwdMYXn88*!qA4x18 z{681>;iaWw4rJXI(GWXXv;~@a6_{8cug2W>L=vo-en_FBs>G&2+H;~jRw@+VayA|O?}(ew{)*fdvNnk2c<@8fQ(}qWX)nm83N~#PIcf~$DS1ej_HuIs&FUJ92iaip0-s|2Eq7zVbYJj=lIEZFJ*vIlQCoolH z;BKIFg*UQA4v-}TUcM#jGdBA#PY3e!mRM3MrfZ^|?D{6??;1jKiGd74e-kIf4ARg% zWMj;DhJ_QH8IoJ1Ld*N2fF)s26H&zQL#8y7STY2Kh!5~1S!v2y3I??lh6E!(Wa3^! z>Cf1F3&F=5k@&1*~0x3+RLsRga3)`Cnqaqbh2WL zAajUS84AxZ%K_a=LcbYia|VReyPLlNS;xqRiGGK5II#$!g#lm&e>wf zzaf5j)TnLiDW@2F39<^D5kHY@!2WEp!_n|@IBF`95c|BCfG;&tW-<0M=9h^u_K3N) zX3B4jErG}+$8SQEFI2V+%JLObSg510<&a-VY6uaxl%0_%Mt0N zW1GX&wx*VjpEiO?{giZNDLuZ*1C}OsVRnC|FK4UMJ(00c_!_GWSIhA@D7-_7VRVj^ z1<@6myk-J3F{=W9o${OlMoZ!gs~QyNNbZN<0)1Q6LA3_*1}lAWcV*s>L!Kgnz_+GU z8*YwJ$SrY5bzaKw`#8l{Vr$`Olt{+iiOOY$v166j7<&aWEo%@C9j9#LY#k);w>m+x zujK*vX%boWte*JYB*l-j^(ebmafT{ z>Ot&zropD+%1AshSLqIBeD6>%cMpHU^_oejgu_?|G zPJs*2tRsB0%<_jm%M}fc<;o9Cq|;Pi%khkJ@`W^o@`Wu}wp)3Z;rpwVb`sl)W!cIx zufgbruS3}ZB?8D)2KL^d9N=sllpRuzZ99>n7$Teu6_%4dHpJ`HuhPJ8Nqf~*UeXKgRy{4Sv%AwJ%Jt3oDR#kO4 zgdi(~?bXx{IPHd#DoJm)NY8Fk3rgQ4TUXhnxM5(Rx(uh?R8kdo7^YTWU+$|Q=mgQr zrxIJUN&U@H(-BDPq!z;cJ$65=|BG^2VsArcb=pai?kOK)xqC{P#EwGBkIIk(Bh)RN zxD9y?xXP+B^FiJV7=d;GH!D`l`j^ zExO?tlm$rvSlLhgA7{tY^Jmw9s4TV<&jhG#ID0oevoD>{E2}3tdoMjdzADzNu71hc z30!egNsutHmbzT9_pzjmRg*COWpxaLg^krDb_zyRU_UtX1Df9ij9;myQar4}G-sBl zA?QbT8H+>I+MJz%gaDsb*tVs5inFsAS=}d)4kE|xZ_sY1{wP=hB((8e0j0Km2}&EO zt04X-B^9DOs{J5qBCi0cnWMg2@FO(L$2ddrSc7Ihs=>=8}W)J3# zou@uZPg~JBx12PRLEcR!W7g9uWf{kZt8P{4LQ5XTBblz8Vv{MxGjg z5uMadw5jg3J=kM{dWf-0P*P-%g47nOhEpf0w#K^R-0A9kE-uoepFvuh+7%-b)Sl$T zKPiQO*I7JlZb~?3&sG<+E8xjcpT!w-)YnwegS@0EL@v|Dz=DP9d-C<8&vu8XMdU)o z8(MWEnr5m4F-)@P9hd1-QczHE4kBL^ZYcIut9u=LWre%=)&})c@6!Jq%UY`C8Jt?B zc7*#O>dxHdDwl}*idn4g<=(kL@ei!6qn~RSvs9HCYOB@XB=#kiEK*-%`0^G43Bl{t z3+yWlN>i^ALsEsk=ZrYed5S2o)y~Dqp*~^geog&CW;dXuL|urBx2v-``vx+nYhAJD zF7=?pam5YQ>Ox2x-3`5Os`Xy4tx-17h7P`dr&I+3XKC?JdP^OMo%X53JbVj5XVuD> zH%E(NIR1dTPGUDvKB(ST*=>vo)iOA2Ii`+ar5Mveqv`ZEv?vEt8OB6t3Pa<4^%sfV z!I;k4AqkJ1Q@b$s9Y%E1@;K~ns!_7xV&7v#FYn);2Y>$n5z$%;Y;#c^udyi1ELJN? zg5A$+&Lg>J8uL*M5*cn@%6O( z`21P5hWDPknAA`UV7RAHz3#nm50jc|y(EnORo%xV_B*gnoEA(~Z5%ebs7~VhHOjbM zm_0!2BSGrRik_Y^Nyb=3qfM7#_F#<+5$&sI!IW@qC6Xc!I9yovFm3k(t0dRa?qUre z?JLGO_zyOMp*T)^9(Va^138l+x~e`0lLNE`DpSzk!^cW+O*hF1G>TInu z_#M#7V{m5;XeDmY(nxudj@cVDjYD9H_Pz7Bf!P^aT?P}bY6iT0SJPodPb~q-*f|QN zEpaWisapAiUHZtbGJnT_PMRrM2Ws`E6u3L4oz#Me@#&$uAw<>^$(j;Te3Jb~in&5- zg1neWvM3~2 zrf|Ng1fKIoRV3g0nr!(89IuWmLw=Go&?fCwAWVJHeNdGsDpb>JKrop)9wDqh8 zmIZ0P(qB;mDN0;pM4pw^^%dgh(x7-K6G%F1;Y2>#bjlh!-^W+h8bJJ5jk3oc z+L^~3!-)c&ox9yw)>OMhOW;@aDQx+Irm1pY+4U1-{!DyL@-po#QPqchV<2XQwntQ@ z2WqF6jIRXoXh%V`sqb3ZrySnip$0P?uu|K@SRD#u+8HcdrM2Khp2d_}H5^AzePkL( z)@ofGF0J%O?J7*Eq*ua>E?O)@vh@fChc;_HSbd^BwNz(ag_2>ycqIs|se65_0hazw z8e3CETZ_B4Y6BJCsP!oHyrHhArFC2_kNbDiLMO`d=zD4;5oq74@8Zxq+7^no!!=s2 z<@G>FJ*5(5=aQNLo2}J=!ZNFZv-U!u5R7V&)Qo8BsMBg124B=}Gbo2z8EcA#=TtfX zQV4wmLw?nwX}kdK180xK8!RNC>l1t;!mA-MIhHk`9yEc}R`#fWPZ zYp}yR+UJ7xhrpBC1ljX;zkayvr1mTqR1A`uLtF#B0uIsjOz98Bw)EPxg|pIXF^E^S zDG;4V6Uo}8K8+EY<|9$X9Dd0TtP_tUFjvRez69B|v1)WHMnm|hE}melp&$4 zF0qblDv&$Rt)?%4DOWWGDb78~iPS5Lq~ty}P|tuVeP~VX_Gslu8InFm( zM@jAC327b@;&HHb;^e0L9Yu77l8@9#*xN^o0YdjIYC(D}RXioTexK?@<9Ir$Y7gxW zw4h#fVsIpVdO+qoq5^KbW{o1wK3J~+A-(je&Y(RpYl;!g(6@p?yUV!d`g+ECVb-&B z4PqOaLoutB-cO>fJiD%~5S?0HH^AM@{0OJqu~t%woTe{yhUpD?d-Q=gq=R0d3d(G5 zJ?9`AgeJ4gh{ULFFLa=Er%w#VHL>3(&o9-l zy{IRG?=+*#3j_#A8=T))PhsTvk;Amsn0i^?$slmQRtYk|h*@(_4|QP8_Kr9JG6xxV z97G1s9jXtM#bDWWdn%nvpMcG=dTniBZp}eNZbd!>ddbOMB`V}fgC1;I$>($n+A%vE zpBb%h;KVw5y6gA1@$ov5j^K&X>C`q!r&HSy@Wkkpvc>C^vJC~#0KF&nnXd2W#4>sY z>$7m)Ons5cMu7isqJDaGuPzvSlNJFaZ!?l1{5`{KiCB#2q0_O|UEUauwO-Im7>ff> zqErhDPZ>_ssAM$8(%r@kN&<9K_fB#o#8xpT;?$-3Do(^=+7+EPj8uJz#)e?QT73-D z#^f}4T6TRk3^KQ}u5f#yQ5Uzb(+4s!oaQ+eJ>Tf38I-OxH3)W_)iL6@kxZ-$GnYA5 zeFpFQ8Aln+t7y)`yk*8g=G!L3an0r-Ekat;4dWm!Q7R9yr;NS$-WENKv+)q!$RzLH z?s)eED68ibly~VfRpJ|q#);{em8?f|+FW&F7G2V0jQh&kOfiXk(y{&-1{o`iSSaqH zJ12H&3dAX9H1Q%gea7mdyQ(|)< zCQ2U&yP8r?ak8mVRl?g_bu$0%pY*5LT!@L$7dvQ*82Gl)7hv(PdTqw$LCgSs)k9n_ z&{o`@hW!&&2fX>aUXc;snBaCmEKn;#^q2a;T-i9Jh!L`@)c>J>RCjW^ltZDzseqdJ z@ajv>(s-Ue^Sw(0{hlKqpQRg0t>TiV*L9? zD&>XbzK}XaKM8GPj3Lfbi{PwgK96%N8!vG70;UWwlE^;C^>t7|ETt zjMc@Ejm99BTgRY0?Ip;s$bumG8D9fZ-RAF5xYn$)vbGNtzihk@x2OyYgrGd0Xk>IC zE)j~j8T`P-ihCJuPG@L+7R-w_YC11j0-4SA^0+tJh~aQMPhaa?Tne#m^w!v}r9piW z%g}F@QA(z2Zq|i8jk$p}pVpUBL7~0TpLoZj%3=u=U(;v6#$m<_xFpOFDvQOm&c+lj z7Smv9=|SsTui0Y;P-#oPVU%P;}l1#)v0vs&Is~=Y=@$2kV@7tThnyzTVYA8AFvm z+Sl^->2XLHm#896cKtfdYh9$6u!`1Hvi`ke<5c>*f|1|oRT&yyYjrW{l1`aQmqg=;MEoMFZy%zv zhVcPW4P7(^Znx+DKu{?-xui{hsTN4J7tx$+tX0J*$|22%Ac1KaZ$33rcKzUac&)y} z`AKW(lL;vs^w)6PVq++0uR?xPeK688f1R_}Am5{J19!M>t(hTJ$LOuPMvLmYQP-=b zEts-h|B+#MsYR=-<4xlu2hmncm}%6cb1oYFAp9d^iF5IF$PXh=skFiPR%P3<%rcrW z=Z)vQ`Nj??>aMrMBPGTY5|%EbfaE;$29^aF`=tk)S>QIkEzq0SIp6Grq8Qq+I%FAC zn%M=}p*#R7u*@a0>AVs0mqiabAf6%`vS_fr$@_8%{A$txCwH^a17d$PYC!5j;sFmE z+Y~XH>QfI^tz%c+tDbH2vMi#2iEjQg#uMe8jlOkEDpJMHkeniwv=0(m=#OkLhl$GS zN1judr_=GyCFLM%&F?d~ovjl89?IJ>7<}G%gY8Gwj(1_$<3nSED#pmJ|0O*%&jY`j z3@xr2X9V$+5@P8~h9CLTLNd?f&y6+2Ogg$+$#Bh=#$<_64LaPWa`{xfAI`aMyvW&` z7}L^d$B-=Zu0(uhOsGNii9hYK3G3f6E;Du*{nzM}yjJ?bsG?Hg%yZW`$3-r^@+c-0 z>gy!jB$;Cvv5pBB^p&_qHYanI4+$6bFaDllY{$!nNyVObFfEi*$#{WnCQIxXP12-_ zPT^V8LSG-FjClh&1w5}~9EXr4#`8#lCyt8D70mIPct&>p*vhL2XVcvc5rO7W@iyT( z0cnR#N}k>31d4XYtPUbDf3bE`L(^tZK*G#Ij26i>C$?OB1 zyUe86{P#gRI)j|YloaQy_^U=Ga2H6$;65ekPFZfQ^Yw)XqXCT;f=@hU1}XAH*>(Cs zr$cI}Im&_eq(m))(npyUh@gK5G8c&mpsz+c%e{y`A443PO`&v!X+44fX&ST?==+Ow z)RJgDJ1?elzIn`h^%FW}N!`JnXEwwc>ZXn(<~8U5|N8R5EE*?>R_MlU3QlU##PK;X@)ZgSGENA&PkR7t{C&z z&{ZgWi3()DG2WO#opt8M+{Na2Sxk{#c~3e+dC8T}H&vc2yAHQ{IChF8uFw!)JW{ud zKPjbBR=>!s0`5bm_fSfetJ7uy)_l|aoFToIKY;9*z-#6&!Bb!sK-Lyf?*RZL09OV3 z`tQSrQh(5^CUIQXo$)A*-D1){bi;Z0ZG30D8R-y|p7Uk{XeRh<2%KOJz`MK5=T#9e zyUtX22%5T$5_8S!O#60wFy*?1qrCHTZ21*^ZlWjFEZ{&EqxKw^bPGJAO*bg#%vfA_ z*i7Q=HpG2t?!eu7=2I#w1E1yQdwA-k*_Kl$UcoMEIl6gIYD?t7S(6I9-vMK0MaY{# zb!1X5)w^FRGH0pcSxSR@dLaSXXeD&GWWJ#N@M=A(a~>yZf^6qpPjygHzn=6Xcyi6o zI6TUHRf4If%`_lwE^_b@uQAOWf%nf!#PR*s_HG@Z}aW1@=xeV}Rb?8}|QX_Lii37_-Kta*Y0q`HLh;zeCI$=1iP(*L;CX z(tSw#&@2VFYH0`VT0J!}O?F-K`q!&?OQ$YP@f-EcO5oXGB|>l{YmIv?i<&ApdNSyM zhim*T3d?eOP|X0a6KoCL0hX@G(`8oy#I3WsVPbXbWiA*EqN41!sFa$D;PgGn#i ztDty^<;J8z7O{#Mixn#IxVR3Z9q$NbOUQMr&4Khq}3eam)mV%a|Nq6zSYEP zVX#EJ-P-bFLZOFjhzqnTLF#g94odAnU!4fGI&kWgn>@(+9KY&d)!@{Mu{Yix3xtr4 zBwMT$SdnhW;_yg|nsWRgyN}fe`*pUmIJM2?Wytl=-P6sNNwOMRYt3@p! zgH?oki>v_;&S1B+!o$CXtj23Y=C74t!N6F4Y`1;!>s*izixF`)C=d$WhldJkF{=E zB@%0o372(J=0Et6)kL7Rq+SwZIS1cxo%R3*v~OR{q4LHMpl(5_qS~O zCy6})DK8s!Ag_c?hqo)*eIdTH+7K)G+uusWh2@8;g?J&r4pvzgs#@AZoM}>dxGMw& z>w_@1gT0CP3CZ+BpN{q&GFNk5b^vz+PXn_OgtXA7!tx0F5{|BGZqo@fEiu&@+yr7bGf`7oBFo5VC_7QR)q804^VDC#q}^oL)fvlx;`bRD&K2 z@e^4ku*#%45V)LQ!Nl?Qa*4RAw7Eo(SDR#C=h6^&de@pwv3a~rr{bY)TDEQ3vehUe zbs#Oww-M}E#U`$KTG@c%iS}`c7z}x)Jy};s<-f$W0{=wcPJi!3jmL@e?Nv4U?cJ(D^_0&hwz^M0P_#wz;NG?5mtq9Ha4f|ADw^hG1q}G37a@0( zI?5YYo`JZ}**Khf(oW;*$kxQ$@^KJXTTqFmhtFOt++tH7NKU3;RKC4W5@Tqj`1F*3;W+ZRoyn=;EoBwe)!kL?S`MsL)b&Pfi7MrW5nJse zPIk(trAOAT_YhC6)ACl8|`keA=dX5jNNU&=Cr&$f@#J-Fg^Duregb!rl?eL zT^ok^{yyy`eKfskDt%^we}NwIi1IMwJ$sbX<@PwxIY2-^!Oy<8>v1;sagg)=0rH*$ zGU-u}$&Z4ReMoUBkAl>EzSAgcIPCB9gd~V$;tO+90v7&d(>Sk97ePWh-{ZKsiSJ4J z&kt37rZM&cME3AG2V~CW7+b@KUi;$X@D~3Ao>zx2JqqvTN8x$xy5v!KAwIOu4D1-{ zGm{z1&eTZJAJ^vs!n_L9ik6QR5aRSzyDwcKr`6l ze4PsUmfaJQPuoN__V6iioO7htAJV|Dg>NY|mDDI}#@Vow6{;Qp|pkJGSmh%@E?A%_8)%o%Hs~b?r~$R|94|-c+?mh9~wi$ z9y5IoIsIslEV4O{ub6-M${NyN=6~RO^&j|NdmP`E$MJ3bcYLouijSD2$AZB2zvF9T ziVVWF^FMIy`UkGvkK@|&IIg|_jw|a?T-pD?weL|}&KkqFcKdXe#2bX}z<;32{RcXH z9Nodk(H;7CbZn!)k2jSBk-Ns4Ah{)mZW7!KTCHtwpe4b&n^StbhQm24b zwIiJnUrWMgn)z;E#LtxcrUb5eTJ24lt8ZIpfdj)g2m5*`o%x-bBePog_Ty(f4I$_Y zB@k;4_5IYLcKKOIxv$iR=nHm#ObYd-4E!9#MEiV(pN{qo^xjc`G5vieGn_cycZD}( z6g~uBAA5H8?WEKH7g`?Wn;?mkG~oGkPlXE)f)nB0K_^t&jhv3XF3#&NK+q?8z#s9o zcz|zhiJHT*x7fK}tlcH{5fpu`)_Aa2LSdS!0d;8AaUT5`GB?`Ofj}O?R&l=PBz6&- zW!WEaN4t%jJ3hf?vd>P2d&m3sm#F=Vnp~