From 3122750c10e27805d58d62727061506f092a81d7 Mon Sep 17 00:00:00 2001 From: Sears Russell Date: Sat, 2 Sep 2006 22:38:58 +0000 Subject: [PATCH] added torn page figure --- doc/paper3/LLADD.tex | 42 +++++++++++++++++++--------------- doc/paper3/figs/torn-page.pdf | Bin 0 -> 21652 bytes 2 files changed, 24 insertions(+), 18 deletions(-) create mode 100755 doc/paper3/figs/torn-page.pdf diff --git a/doc/paper3/LLADD.tex b/doc/paper3/LLADD.tex index ce65726..718d090 100644 --- a/doc/paper3/LLADD.tex +++ b/doc/paper3/LLADD.tex @@ -606,6 +606,8 @@ recovery-specific code in the system. \caption{\sf\label{fig:structure} The portions of \yad that directly interact with new operations.} \end{figure} + + The first step in implementing a new operation is to decide upon an external interface, which is typically cleaner than directly calling {\tt Tupdate()} to invoke the redo/undo operations. The externally visible interface is implemented @@ -964,31 +966,35 @@ operations performed by redo are blind updates, they can be applied regardless of whether the initial page was the correct version or even logically consistent. +\begin{figure} +\includegraphics[% + bb=0bp 0bp 445bp 275bp, + clip, + width=1\columnwidth]{figs/torn-page.pdf} +\caption{\sf\label{fig:torn}Torn pages and LSN-free recovery. +The page is torn during the crash, but consistent once redo completes. +Overwritten and stale torn sectors are shaded.} +\end{figure} -\eat{ Figure~\ref{fig:todo} provides an example page, and a number of -log entries that were applied to it. Assume that the initial version +\rcs{Next 3 paragraphs are new; check flow, etc} +Figure~\ref{fig:torn} describes a page that is torn during crash, and the actions performed by redo that repair it. Assume that the initial version of the page, with LSN $0$, is on disk, and the disk is in the process of writing out the version with LSN $2$ when the system crashes. When recovery reads the page from disk, it may encounter any combination of sectors from these two versions. -Note that the first and last two sectors are not overwritten by any -of the log entries that Redo will play back. Therefore, their value -is unchanged in both versions of the page. Since Redo will not change -them, we know that they will have the correct value when it completes. -The remainder of the sectors are overwritten at some point in the log. -If we constrain the updates to overwrite an entire sector at once, then -the initial on-disk value of these sectors would not have any affect -on the outcome of Redo. Furthermore, since the redo entries are -played back in order, each sector would contain the most up to date -version after redo. +Note that the first and last two sectors are not overwritten by any of +the log entries that Redo will play back. Therefore, their values are +unchanged in both versions of the page. In the example, two of these +sectors are overwritten during the crash, while the shaded one is left +over from the old version of the page. -Of course, we do not want to constrain log entries to update entire -sectors at once. In order to support finer-grained logging, we simply -repeat the above argument on the byte or bit level. Each bit is -either overwritten by redo, or has a known, correct, value before -redo. -} +Redoing LSN 1 is unnecessary, since all of its sectors happened to +make it to disk. However, recovery has no way of knowing this and +applies the entry to the page, replacing a up-to-date sector with a +stale one. When LSN 2 is applied, it brings this sector up to date, +and also overwrites one of the two sectors that did not make it to +disk. At this point, the page is internally consistent. Since LSN-free recovery only relies upon atomic updates at the bit level, it decouples page boundaries from atomicity and recovery. This diff --git a/doc/paper3/figs/torn-page.pdf b/doc/paper3/figs/torn-page.pdf new file mode 100755 index 0000000000000000000000000000000000000000..1bf26ad8ac0a9ed8c31deafea08e15f93d269c7d GIT binary patch literal 21652 zcmbrmbyS?o(l3llfDqhaf&`agaCditySuwT03a(XKF4Bo+V=1VCc==K#Jb{C)tekv{xGVqswVFB%&w!++9%42=K9 z2Lv*+{TCmI1@vDuRu<;}qOtw=yo_wj|EV94m4Th{KgI&tSy|ZsgT}z{?&SZpjg9%= z>~OT#GqW_Ze~T3oz2aMx-rSEwFK%sY19&qGpzsz41sfYj0P8;uIeR1L_lPjCy!D6+ zX>jQoFfr;gu^Th8v9JKy3|RE_KuoOqjCzJ3V+K8AW_BJfkUl$uK8VGTjTLCf%)r9T z#Ky$R%ErvbWT?-?Y-kAL(Rzz5l7pk3z2jf8VL&1y6P6YEJIYA!6aNpEzPi~O0q6zw z9Q7=1Ox_fb(=#!00K8fFm!i@}j(Ub~eSkN&{zZ82meSKVvUC8vdF!3@Zy*Bxn`C-L z0Eh+fhC)_00KJHrrK6Gk+h0pPMLmmNhXF%Lg7bdI^*`eNLHJ+uyqnGPmI?pR-lzT#PrMuWmmBPjtR4Ty4+=&O zHcs{iZ=QL>!(WaNw6S)4<8XLK{ofP?8^<^60PGBJ!=;T3&GZCpT;Fo?4Hy6xAR~bF z4PNhgDQItF`*+Wqf8H);Ru%y38yw&I{>_!|)BKNSa`rX`ibjra!sy@10)YOjk*nih zvP9mL0KAn1`mbLZ0YKniio6S<7j|_NRs2hx_g+y&AmBYA|8XeBL@R}Gh0U+`?tCH9Sq)G#m?|nQQm-LD`sS7 zV(R!d5Q+Ys@4b(f@l83T_wbv%Ve7pny-N}J+YPiVZ%IoFVq^v|z84JOTZa9QaWZ;V z@8}c}lN1x6=C?P~vwRyX{)SaE1Ac20OQXMLQFJu2QvU1hUFsXwjNY8_PpbX9G4KBQ zzZml-QPD}?@vl7iYVTz9mzi%Gn%O%z3YzNK|E;i;-ajqinOM!uW>o zcQ5_#2?But@Av;w7y!&~0shzh@AUU~r1!^L?!G_Y%MyU)4WaKhE8}}m{yzWr{coPX z+wWX&0^S>czrHiGGrf!Y&-3qL|EtNrCS!aX`$j9Ovo-;| z*=@~l?O^sl1SEO^JqM$|aQL5L`VXM|g{A+f7w`7HM?~X2s)B;=qTW8z{;4%u|H{(8 zGVGtg{i|xQ|G&!0d%*vVaIi$Sd&VGV2Taq!1!fB@i{VqiPCJ(= zL*&ybyz)5fldp_PF@~4s`lq=OnV1kBg^#UtEfaoyt?zi$()668a$Ume=htE{E)V=M zi>gf+re!ySfu&XST;<#%;NKwkU;{s^+-){liizRa@uYC~VLLxYp<#0Q-sey|ymoAC z`)1Sa_UN?~m*V*+R9@uS`4rr7_iv-um=DO;yi_y157)b!kV~0fE80DHF+X>6hCPtc z8>;8KW15yVu|DwJXJzt-HT$cWt|557eqLXp=i=APN40`%X5_Y~PKVY)=s@o1vzpsL zNp;H3_|P$VYPmFQ1SJNIM~OQ?JIB<`lCx%qLxT6p*iU7g6C$5bd`?`5ni#5Ij-rsK zlzxJ6HayMf?ODqxO`RH~Q5Z?-%deNtpt_L5Q~RidtEZs7R` zVSA*5I*N1VD&zckd;fI0)ZB8$Y&e1-mFzUdzIQ(Iu=UGzR$L9NG)L5GtJd?^JA%85 zcBiK-tMNEiqM#m&^AJ$OU7&-ra9e1r!N~M2XGA!D*k@eCjX3kfw>|h2mr8UPHU5myvW>ZHLn0&rl=3097%Z5y_05={? zn66E;_?R)PW?cMa@qtxi3DE*823r^&f<%jK9fz1qF^q3eOtg3Fw=6nkU~@o3Oa!Nx z|JpLYg3&NK_PjZhEJh8}dKjXmG$v)Di?>)!JTYUrlW4DLA&G*S0O}hD;{>X67b-`G z2OzQ9d>+*8oqZpHj*=r#(9UtRyBxQ4#(9kOKar>Cz#;z}ZF)UKg{ zuz3C@P7%KGHWL1H&(jdfcvfP_0lZk>{YY#{cY|(ySA&opcap@yR==2vFL5hpL$6TS zVB!&ndLRD#Q~kZx{i`ZL*3Aqb47 znkOX}L6L_NRt!Td1PTBiXQ{}vZ2vn-F^#!K)Xw!Jl4!uV+(H*!<5Ae6Fo0O03T?zjs1N=%0nj87}n<2VJ*+oi_ z^1vYezMTx&Z zUYKVu-oarFiFlcDag#iRe5g?x=Z6zLnve@*Jh}aH;~n*V&le8M%0BpqXp@oKv`<&W z7MghHp)2I6B9uz$FHQGYo`Nc&pkz92tfVawqo4K*2kWI-!tAs9$kqxbxKiv_)KmrL zr8z2Qp!!M5W*U)@&<%Dw>BM0PHzAy%n4(c7<>Inw=EM>2q}Sxvs+Tn5(xwmWT*xEr zkAJEYs5wJe(v8@nCG!=qg&9o^i^Q)WdQjCRJ91zaq^0q<(Y11^uWXw6e?no?5X;O7 z%fe`lqD+KG>W7;eu#vT+y~h6fQ6%*p(kOK_2_s!8QgfnONBgU#M4G;Rmf{S@wRAoI za-Mg#_Rl~K9Yp@Yp+(LU(iQgIV4wPq@s5dALv0}y9zi^p9M~x~59A&xo>Pv@##`H< z?j{!&iF`-gk&F}>P|5ew#yEO;?qkHA_N0#vNj!NL=?;N=groQHK)DF?O`J@OzFdWJ zEIgsOyRT2A6^v5O@mfZ?_+&*x`s}iF@lI1Q((OF_7xiX$rsmlC1cFh}L6@Ur7zWbQs;2wgC&2GX9M{ z+#~htwUSj5Yn$MufRbpV)IQn5!e~M%(N>+fQmwlt8W3bV8g0l+CZ5@eb-|^UaD3N- zD)Gxv>F7I}>xU?c{Za(yCTI^MGTMIc^{rz^>iooASNygf4?W_7spzRd^i9_=n4zj_ zh>6e%yM)to^QY9Xc+~P9uu>7ul^u;=q8V1=b&drcA&ht@;0>&WnAaWC$i9XVmPuGZPuCf$d{6?MwKh!f{5qrXr!Z z;;l|#+kw1TilaYk=4rYt9Uv84iKdfhj%vVH*D#nSC0-HEHh}HyyQbx-WDC@^~C z+%cN{ZTAV1fhD7xY`OTPj_L9-R@{2G;=nXNHcQL4|W#g9r!i|f5Fi*>qTa)=fKNZfUs1Oly(Y56v7e1M&!eseO4jy` zk=>rU^+qyRWL{{(JzapZy%?>Wcy?*aThfe!4R9-hIQB@c6;`EKi6X~L04_ORSz|kF zrrN$^CHG&N9b150G84Ck&NfF7Iw#$$eH?Xj!DN&}k@6WQEDgXPo7|*a8~piq?KC0K zGmvx1OOF`^d?F9OxjqFc7u$WI%do)3ze7h3s0)Ln}CERg6v70s|Ot@;A8CMClO4fR8*F+NMNkJ{&V*Oj>N zH_ka+p@{TZ;*nZgalZ(@*}hpk_Jh>^eZ&Wj*8cvEXb9Qw}{2lI=5B|JOxuM-T)kS&>wqH^Ai42);#GimX`l_ug`sr&eYD%I=z zZ%d-=U7s#09JbSatPFgYM22&03p)&(bz28ilA@}m)aV?tqGU$aN3MKg#uYP{~A zoo%msJ^gJWTVYp=B%FoB?^}}aE@ivZ4(rSF7&2>)DcrDVB<$BlXEQQJ(BB0LmLtBL9RU0~2$L>wd>qqUqf zqkgX!pvrG;ll)wA$-(ih!KEZ|e0T5bUSI)&7{Ti~PMi{YL?mI#cOx^;g!K`#nKO~$ zi(d)9d)^kWXpbg=NE&^oh(Zp>7zL1hbEOglpKt z6&ti1W;8`wG0}Oem;R=dKl!tIMDUmee9*5Kb2wo>3Rv^IfgTDLw}F{3o@IXEkPl7R zyV-3k^9yR~#HFLG)rpJ|DX`PJQ7xV9d^`)JzJI{#C5UDyy^N_3y1qu;x0f0h+HSr=Y586)H=$JjKP>w zD|S&p8|j1zrMfI-lNehtQV(iA#SX5CA~<8!Za)yMlY7Q1z$vN2I$B}1wR1(;l<~zu>qX+v|D#;X1THlEf#-L4fcWuzpdd;_WAsneyc@^ zqaD>?lQ(7zbCs3UxxoIV3Hf$FwZs{}LEFGwI1T3RnqC+DZXO1faojTdL^uM3!Qi{! z384#S3QgsQ(OKJxKPsK95_cY!ygnCy?l(92xF$IF#b8#w2iTOQJYF|vaLzT;#l5e-JRPs=bkjx&RvND)h>IgoU%%n@7j&SPh@}p zNXm}*j01pL+Q}$la;Hw9lLg)*=8kke6Z27Dfze{L%@OgAyKO;S^*!KSwa)Uv3U%Cj zkO_UR&obxoUI;rag6B$dk1fUF;&FA6!td)#=S;+R-k2Hl+*t%NLs|k}wQJ5BBBOng zQABx_%h?kz?rBb8(|_?rVpQ!Un0jUw6?MX9+&T7{6;SgGG;L0eU08SBpKMVcv8|P7 zO^EVr-bHLVL`~onwWS$61kbSa0<(JP6`L~t{9G6eh_qQ~igv($)G|*MiE``SW0EzG z8;$GNkN1Jy+kr2CT;I#UWePribgXnpQg?42Y7)IhTrkQq8Q6Ba1b>!W$s?O;2lksS zlp*V_+QCS8q#ff2^6I%16#Gu36%!sNm(CCq<-oGk%5G_YS{}WHSPfnHe3x>X3sX9) zJ>cQ@Xgn$8rc++1Fz2m(U|YmkD??wPY!HJPuAg4tRu^y^_NVLSY{i2p|6H4QJk(pA z)H{sD8#ml}Yzh{fgpfyab(ndIMfQTs|WG^0#=zIr;-eE$tqw^va*$J?kwMg7HF*bav9sjwSr5 zg__J@yGlrPI3Dw&wChivs+51)l~qkFX?LS%MQYhZA_Uoj@44+ly7dW-@DirMv;v|W zP%jAsPk>uC9QLeyfzpIv&C5bzG%_ z_^a#OP`pP)OiNfF^iMH$W1%T|>0Lr|)T$zcUkY6JO(8l`a%62R3eV)@dB&RfVFe zm(%8!=o1%&t^!ne3rQBB7KpWTNpiyv)G*U4tp2BUt{gj&6ZUOSm)cZIWU!4-m80WsiV*d%cz)Y|p8?3;M=Vg(#<75{tQXBr%6#wP1 zk8k0i)2KETxno;TR*ybu^XOZJJSPEOl|hy!d33nc!JB<6v3<+RTbxO($m6)*0_A6 z2f)0kthjZB2UeY3QMe%hyi zTG8SD45qZ4@xY4TjmY*NLx!(N#%`09A#e&7JTwYt4$Qp?>< zeA2z_PLYogLR3t-T`^tR8$YG*+A_5tUlP;pAe6gC4|^seHZEw6gjzJ&`JJX7M&G|e zZH-Iv5uI(ky3>98ROXA!K(|it1NU^$yH)n2&^)({O_E0q?g?sF4&{z{&(;HZ0=hqs z3#GZrKZ_Li;nOy3_UTXEQsUUuW0&o(d*0T!*9)5%>d(R6!j9XFwhITm(=bcn7muAJ z6t5_rm`foyr@5;JYYxiKGqf>85Sam7aQ8fbkc-<+?=w#Tcyi!NFwPSp&N;z@&hDX) z&l1Jv*bf5daj;w8+s2O1*2x*q_}`XSamQbx`f!}F)*V6W-TOWyQR(Y~+A~zXs z9M~{l_1hi{(l}1;mbuBj;Yq!307D_0x2WVW`Vz(P%%3_Zy0o*E6TtlX)Bx+Eq%aw} z_Fz^EYru*HQv`k~1H9k3frV!3!4LYsM?Xsq#aC$5UI9viplGY5Tr*kO)MxvMNLv?hXI8e2E~B z-mT(t*}11q{`uOrgb&P|!Bz>zR@qr<^sy;;{Za+?K`wQ@Vsc6Ux1xzH%Y1c_wrJ(O z!$-S@a|fi(W?t$8`h1us7*AX~oICd$sgaWkZtGPJm#)8S?oB2WVU`P*9Ty$_Q2*w+ z-1A+1(wIqMteFA!?GiWTUCX!aYmX)$XT;5{&6-`>$EfPyz*E>8Kb#cM74}UyJ0FfO zh{_4hsAYSxmz;>4r?(1{jrCL;+-AdRjj%cElQW4E?77P)>crmyi{HBnLuW7VoJKAk zVu|#}dwE=AqO+#KoO~hopxYCltL`~TA6__nN=8;4Xe&w%6G5Gg__hL>qU|5?MJ)v_ z53L%Ysq^(2Kjedj7FRR#kxYJcgyiOCoB#ZY(#N>;^O$ta;qm#qg@E^+|fNMAYDe z)T4~Fq6WM_-O$9K#(s=dj>Yu()z?HUParl>i}la|om8W@#1_$^m#hgva~BX)6A|=l zkO8;43&z)37Y-X*fsbw)1KagyHOm|>0IUwu!&e@lf@p%SYp7uyQWfeqV+gZ6NWv0P z2BE@E{bvNdXhSJcd|Afa;g^WYaNkpYamc5Q>X92#+P%lRwVfhpQu^e9kJZ)+LA)Ef zK`om=$WCbyLk}Y6pfS^s$QtC!r0tI+n$xdHt92Qd#vXzbD2~x2XKOlOBvR^Z3vig4N%6wba;`Du z@<9f4aDteExBR){XXP=Lx*>?@znWB)^` zmAjCEbZd?Jib}vM%8a-6a_8g4W&2ZW6-*odm2fYvjro3pxR;}uMk<=60?(|4sF_<` zyV!iY5Y0;S#rNd`^4OTC?@|{cV?!tIwP0&Xvd~!{E~vN^TT4InHApE9oitx47#^lj zLH9YkaGyILha3aQ)~kZ1Rt|xvbi12E633Sgx;gRIxsz)VeG6B9@z4?boZz zFLe2QZ(`73F;iem!Ii)o7g-n3rVuv}&~6Ax+TJz_M1FncWNeM+g@(ZslUo*U5u>3> zsT2eCC{HehtuD+i*rV>F@)GLHKXqbXPpLK_0WH7Zz`wSsIUWzXrnv15+dj}Op^nH5 z%mq)Nt`=46Y_D~%>yza#Xfj%5`OQSHX$>d!Q zBAC!iz#tRf{URotgE)IUo7wFoq(CbDJzrK=uMI}9#)ogtL>(tYk?qOryZ*@iK)ExP0 zwL~_v%b0?OUMHtFc0e>{l|=pwp7ikWLtIH2Ir_JXAcxDqu`lVb)mpTZ@?TBvRyeCN zmgnbFym-l5<_#g$$hOQN!g0dCg&`HBLy5_-0OD0PAmP6Cu1VX{_q!*K_MPfqS@Hgt&S^4p;+~Jv;du)#Z6~QLtTQX0nos9x#k}wMLW7@K~J35 z`ZBM_!qn(fB+b^?7Y-}`GacqTvNC&ezL8Ir90G%P!#K_JRW<2~wd&mZi)$)DB3~!H zzLLocqZ062i~DQm8c-ll@B3B4CKL@T-seGz-o0j&5E*amOR4DD1lbDSs?l&|DCCfc z#gZ=ku7Op2@fcU;Ia2i3Ezcvhbh9~Qv=^)utmRKl8@rG;%rnY6t{V;Y?~`mlylc1k zZsVCfC4X3YEsewkhm^=3RiuT~uI7hf$lfvfV`{dygV<6<#)JO*<&)dUF3T&V6P_?P zDlIOpJ}DJ3N*ZWd1gbK3gaKEC1G`du%`$xZ-GGu&L@9TWh{XQB( z7uy}q{jTtR$AwSQB0o!ok&bYGBpfl- zz^c&@XOct=>V>X>j0HVF%V^#48FIMT>5%KqmAJkzNPI?+a@9Xh@@$s}dOHW`?V4wl zdzXLqntlvs&mc*knDRrr6W)rHRetEi)=kpu_?9Nr#|M#+5p<6?I(h*vKvGYO)=6yP&vmyY7@O zdy5PiGycd~pQbpRC1FWt_lI>2r&z*HzJcRO9s{!zM)~$)f_a+TO*~#A)UW`?Gi)Cr}yF4x4ru{a} zH#VMBMEG{_Ds>U>(!YRizR9 ztwn^3d|I;9tnL%pf`dp_QH1hN8fHjse56#Zed;5(k3ds_s+1;krbrWYv}kmp6aE{Fl0L;=NIUGUQ&>kY;LRV zub-r^f}d$E^Rv!uPnrzAVg)gzyR@4z^AV!n~X@HjEa6kvvEO6Gt)HbU)-_0Nex5BDFzLTo}ATofzJw{l%-o)VXpaa~v0pEw6O)toaMQ2Er5d4(JnTW4w98tcjYS-2N9-UcZu z-L{62XX3fpL<167q>`J7vy5xq0(9(00LFoGr#0;PJVIx34GcH82|RHUdS7)j0x)w5 za_UV5i*b%OR`ge@8$cDainGY_I(yDy3CEwA(e>@`QOvCw(t*D?#@Lsc$A0=+z*YRP zX*kt)9&Yicb>%gaf2H7zLA%E&+A!$?z1lkp;S`!ZuA>-*A?dNKO_F}euE|BMl@_RB z=%3445B(-RM=Eb6#bYHy8~OeD+)(%fB9hmuTqFqH6AWB^zf)xc^=N(G)EEv#N>F^kI|G2Obp@x zt|`Z4n5o3?jE+;?OwjrV*l{Te!-zR!h#TgaGP>W-VwQYvNd-shLbsNm zZBEMR(ZjpjI!3`H!bSrP0-Mzsk3pL*L5H1++MC`gYclsx|X;V-cj zjb=NNqBBLeN!k%qCmnebZHW#W#Wj93V{EQ|?H?>1E}dNa^v*;v%6kJEvSzz* zkiA=9udP~87kUNF4xg-Rq+Pd2Sf`2bM#-+nXpZ+5+C0^@=yle|6?PCW+;6#3bgJd2 zjwAY>S{TmrVOnnDI>{uz*5dLU*qJQvO3N9d%}*1($6eUP+ScW*WN9@QCqQ_B4Fi~Q zoWaICHqh#GqSJ`B>Gs{jtS)Ff2JCXX5HHO;{!QsV9s^(HrfOtM3p~ zwlS5w9xEEB1%e2VC;|%Q30is|0Y#b1rN;FH`M1j&e>TQ_3-2xi+cd23>=z)oRAlG^ z5e#Zho;;GJ)GzV1Z4$==zTE@JWg;v(EN#BU6^`#|^LLth$ec8XUI7;47#H_h45qK3 zwh3HRo^N@+DgZOK0CUHQs006qtHjCN((R{IDgbXQW9F6h)IgUV=~uB>KcpH%I5I&Z z+~-GM!qLvVD!&6mk)A&ZLlNru2^(;?KCE(P?6>P~^=uoD&al|S*o@ zmrics7oPJ7!=LvX8S^~>9aY6YC`6e0%FMzFLkQdaqhP#@(xVPhXRlm6UvvRS19~W( z!6&zhzsxsee}6?!LDsm?`?#AzOwLhBY^W-28cVXzffZU6eHsEfH@_TtNPf(!!AQF@ zAUBIoUt$;W@l8qiw1*+3#QU=+}FCdp}|@O2X7hDUvNr^?gs?{j|@e z;pKoegINnCYNNHM-jYqnv1zlncL{4kz@coa8*I|iwtd!;5PDZG{mpy&Zs`TypR*&> z%zBye*rLU@@_@i=^%}+S9%i9BPBNvS5@}Qa4!cZ_8L~xRlpjfuBaXjQE^|R%t zJ^xsyJ$sN56VIvZkXSronIWm9NJL||+Z+&;tcMEc?5xO{v%#E{T4o@{Fjsh}cL7!L z5KA~S#EDE9fx1BH!rmsUNqCORN~xhNZ37RrCAqDe(5&hr_rddNz88Ey+kO&`v(Ds? zFl}4+2lsOH9~4v=(^}Gzm@}|lWHVMJbBg>bq@D^|Y$<&3vjh4kwpTul<7girv2$^z zvb*gk!vv$yBd%G~ZN6zGg^Yaf6ybMKKC>S0o5YvsEz^rK=)rK}$Ll#ETg$=YDUI60 z{to<#&hId(Uq|SLU}p-K@nhuhjQYGxukSZEW`aOT&M)MNLB{2TZppZ_*8+d(YI4JU zHjH%*clfOb)s&oxftpXInhSzp8He~?5Q=U5OuJsd{2hmVl%?fvP6%v+<>>1#q_9+f ze2Dre{^+dW7N!x@kyW@(`8Ojane*t#197xFCbr1|+kCQWZ8j3J?QLGmp>7WDi!F0{+t-^#QO4xitMp4XPJfn9b*Pq}K0Z`5-}FK2%uljhmn8d$H(#r+ zHtW!6oR7=6t+Kk@j9Oc3D}nY+(pa_TtIvtBOTfeIZTibYUUW4mho=;pjf_h$Y0G{l z6HGHz2xb}6CjYg@a7{o zSOoQuVsm1~6sq-ZfK=D>=kPXXWqUE#}$bcPN1)6R_c{rNkT~h|m?sheOQqDk6{= zfriYu&rX?ug>-Y6oo;WiFt9Ad>_{H6omVjj060Q@JC)W2A$|3KA{u>mjH6F1hvlTe zz@WfjrodR89FgjzphGc9m*_O4mCF3qeEt+@JzPRzl#KJqYBnes%yVyF6P-Ef@rkyA zVUHnRP&m{U7&;l--5}``3QHdU`88O@WI({_kGGntN9EaJ{^BXErg8A8H2c+ssNK%Q zz3%$Mn3qX%mVf!+arBjRiw9!2_ro4+Wz3;`X^?rr;gKETkRo1;e?4VM0}FLMb_E8S z1*f@#LZx#-U9PiTkG7f0K}-87bhM<1bjgvpeu>zRSqncj<^VqjW-Le*^GaNw()C48 ziU<;=9@5;yKnb{-sooM1NEm!+;Xu26axpml6-XYA`KKM6&{>KSNpY+ z<=5PySY#tKw$MB8@@Uuo^bLitJrIhQoPTZ}NQ`4KDpBq=ua;4_#H2$iDyj2+(!$-c!>wJ3RM3VUOZPtImhvUpr)0e#!5!b}+kGTRoj?s6AQhXd zB7!O9^$U%h)TX|Vnji(9H^sgE>JZi|X#M)$0JEpbD8{?dGcY)LXk@&S>wdOlzG`-k zqLSM4Wb|k$V?JX!#cRwR$K!dfKGJ2R#{%zw#?|c(1rf%QK~B|>aL1}MN^psk$=cry zT|uo>0i}d0C_n!DS36%J-`ouIANRPFra-*Fs|1suG$S^u9Vc?m z2Y3i0D;8xBdI=+icM$w;mo9}gW>+jH6%iH5%#{VN{EP8Jd+wDvJL5Py@;@C<;*-RL zl8{z6JjA%C0T{FqZPX6_s9!(Cr-YSEDw)!3U=Gey;u_HYT=+^~VLyYT^)gaOJ$^{Z zn!&2&a=rNWb&t(m@H1ft?^d{bZo9;)vQG<9^d`hGn=DYJ_^W+^M9QI?L9Aw3xsr95 z&-s$*ttFNHB}=$@Ffa((0?;B(;YI@IpUPcax{Rw(pR8O|Z|=`4QgSgs;g%Wzlhm&e zs8AZpgv~_n(Jw+JQEZ&Y&sTX`?K@?vlP1GHn@ZpZx+6a6>QO!0MCHP|WQ(+pR{Off z)Qn;*@27^Ui+RXKR-wB>VTEOr{+snKzpW21kIF3Qmo_fC{D(*p@a-&Hg+k(CIT<$q{`H(>@YBL}5LWZNlfs+*SVvZgkOU1Qd!?chIJ z>i3qGB$!XG;tvo>-D*Md=;h|I8RY`UfCH>!$)~D`3RdN|On1uIwEE#5zIbP)Yy8f_ ze|FstxHPz12daOT5l|JCc4G_n+op1U2r>M!9SDz>@SsK3wn8RvQaB|FG-4>UjGzp# z+tTwyDf|*?OvPkUofM&-GYR&a#Bt$(B#dlYV@mWQ5m7%~HxO4meSGYgLZXg0hv)9JPVfow9~G4tB<@x+A`6Xrn=>lbRgNa-iLwrX`Ug(( z7^3sRF#F&awkuiY=YZdblNy{R<(yJ;X*^6>uc_5ZFm9%j<>UImrtZXSi-v+}GKmt( z5hxEV#ER9*UlMx@6#eSo24u!_jV<{QG2~XfQb0czV$krJp)kOB^ zpm7lTD+kILl_M(vX%X3v4TV?df&;tj4p8KsD~D@7JXXn!$Gv7oC#&I#~i5J znizVYDps3ZAqE@Spq7H)y_Nv_^KT+HgAUWv8stUjj<#N&KjVuyEzU$ne=@~gYVjP& zIY$KFE)NNcrF4Ep;8$iUjMLaH4-Pz757^wmJ?&v9dTvq5mPn!a14A&0_*wjJhNMC9 zHilf_a>_A&Lb3%<_11*xO8cUP;37xWwN3lg4mmwhWykD!TGc8~>+=jrhj-KVp#JKU z?#scc^ubbi?w?zdIvbzE9;DaCxr?{&uS*U`zsXK`Nz^*A#%9PX=(%m2&>M^t5I+<+ z6gZa%9>h226PD<71MUkd6v`ZRw`P&dRKGu?LIgrbB?-O2!U@Gu3=)4#lj6hP%FRGklTSS*YHD+G}8tb|wX77F!Ti=aR&foCBAZJ)p z2LGuM0o8{kHa1~TRbhUT#7%U0ej3{zQ)G#&#H2+wo$d2dyX(21#-O)tg7>AALXN#y z1a*u*i}%sZR1#YWgubN$^c6(C!W<-QqGI{B{&;m!5plNY}6dt6CkpqK4HmW=G4fBf$K$QWUq?1a9eA`ri0-Gsl z#U~S!Mt>1Pw?1~Pt7|JJp_u^j;e+nC56P2Y)Yn|D$su8}w9j$^_$2ACOlmxO#Z~| zCMiUYBj{*0Ud>}=#j%$}PP#@h6nEXv zIc#Q#VaO%Q0Y*QW2QmxP0whw^7$w6LAa~gO)?nH48C?I&lT_ zi?g$i#J@yZH-bZOg(;Z#GT|0<=AsMj(3L``B$=k1%YET9d|?D3E3*$z@DSt*#b1}6 zdq}rAt{nWHd+PGXn7(YWT%4HFUJBemq1`AnAjjb-xk6o5U(6{vluV?{;_!NK7|}8l zxasN-+tAsGPnu>%(k}e1uX|^snYnK@xqe&3_eG0}x`j_)D-64Wl9ab1EW-7ySYePZ zoRHYy$oz{TaUV)uuAU`bg2dsO@>1Ah4H&64hb{R@_p)kl9h(A?E>) ztJ&U|R{(Dc+D+GB>@BTrJe%{153CJYBQ$`c9a>u!jFlWv06s_rsrv9rFzZ*8Q};!8 zLXs~d#&^>M?BqvL&gq@;*$j{0XUO~)I`G#asHxT0iNU2OD77(os2lQFAyjeF|JUQ` z6@rbA4;kxhT7U-vCDZMU#3Y>A&bfI>matIp3zYx-G$KkwaOfw$Zeo2*UTqLsb}NK& zm!-23QuQZH?#KGq7D3;*E!HH@a4_QwPRt9v5AmId#ei1_jL`tx3*;(acU6Q#Jp?BH z%QJ>an~87mmfLj$)MfL-GkGc>U+>eNB5g0nKE9+-k5(HSiV{-Tm~KhFG7|yKA*P+717>fDkr4T(4S>#wia!Uxq#^68VvMpHvEyMF;J&Qf!i!~G=AS@Ohc93;v z^*M|_xh{kqRFK#g22Xq6b*K+x3IJ*piXcghk`2DB8Ygggk03@E=WJOhUwB5uJu7Wp zPaxzypDcrnuCCFVF8B{VF6^dl%4Y-0-@hb zp=IOVs@-19!B>giy}S}S*F}5z;`q-)$36riel{D}H_)6R*vd`J?*C z!4%{*!@(X~9p;~?3@kR$3>lNc-={>Ux9qnrr>D!SZMPYhVAN`uXr+kRJdLC}50k6?C+mpJCU&_e)l*FTp>BXKKU7n6(j04R$$_e(EA}$*{_z;BtsyN z;oK};7VaAo{=+-OrK{}Y0Z74NPJ_Xl5B%&M`6 zpAA#AU=dYNofkVAX(Nwd4Cn0x?RVo|cZF`0tk{lv?d{js*F5G0O9NjgSs$`KcJQ6H zP7F9MrCsRS4Kt?H4Ev@We5tA|WjUx(&ycF@4df-*(D^^LoOwJ{>mSEawp84@TKv#R z3^Ha+*2&PwE-Dn$YRn8KvuKtqMYmf~mR4Dc?Ay(tEDeh6qHH1in!S*05q@W8s;h3d zdw+lY=Jh)BI_Er}=leY8`+T0~Jm;Uc)Z7OTcPGWFAkX+s*DHz>_c0IkylYZw5MX3& zvUXXv-gqA0ykAZ4HH(E!<4tQ8OjnuYnS3n5(_hbHmAS6#Lgy6Z&MiUsgnCy`=co1> z;rUtX9^F^5hnaW%Z{zyysj>NF@0uwzA72!od^hh-d(rRCy*5+y~yAe}Bv(&vOzFC4Ysuis!YRMIbj!0go)8o*jGfS( zgPr5k6+L+o+~Yf;%qJ#MWGwlM%yy$4CJ3u5K{B3k;=@J)HxJ_UsB5+TkD=sm8drz} zU7;RaD<0G1yy32YWt~K(_&Y=2y5mEbDK$_22z{s8*Q*5zgS!odWKD$qg_QJ>(f%-# zX4APVu0F1TFbj9H9UDFx@Ty)4HBbf}7Q1)#X$iArRY_loc}ZRgdc#$m;pBG18}+8} zTNfG(TlHIw=L6_rY8IZB2{)xGmfozU%An21K%%#1Z|KRLl<$%)h)GvS4T6~=3{ix* zse@$-Uj^CPXdK!T7&UNUXVSX{nGx@its|t7jS_(a1|sqJ`i9K@Oqtek=g3zH z&d?#rT<~#yXv}|xM~Al6Uw>5)qlbZQAqO}c$rL}cD{p?ORXTU~eS3h*09IbzIy5UR zFjPt-k2n)*iphmzL(Ri1UZ4hK1`G#eH(l;8yOoYhIou>PsxT_x68sYH-#koQmlyKX z*Xx>B0a$Mmf*ov)r!@}Rf-q`W-RL1nz1djYu)Y|zY%t~I>DdjJA1TqHKi;Z zEA4#WsncH9Vd?6}9ou^H-p7AZ^4_)#T1G6#Uyd*gxLofLSnBOxwW&s#q#O&m6WkFj zsGNq*&n!ymWhyZ>>;jK=JTzh=nY);y%*W`+hu*m24B^K&+vshQnK=ZJHqTba7L7J< z`?G~-nyNch>MWfemyQK>$ezvj%JjOt_}gOQjHo1Q{mu2Ke0hCqB$xccu&Q?A8kZu< z93@Fowfp41i&r$!*c*K2j0PC)oaRD}zM??=?Iv{-RDnXI>roME%m;(5V& zoYD~P_QR`PmVpYutO+O2wigR%5xLtM>{4LE1m-$L^n7$Xx3HN`3*(X%{u5fC^^iO z>Rg-lZ!Guzbz$EId9=K?v~P)A8Kc~ygw{*z^X)6JbTvC5_tqlRbgdcDQs=&biJ58Z z4f@_w;5+7S=1#Zv-U^Y6w2V%~C9X|8cY7r4kNwDCfke4P(!RW>wT$R9J?;pTkOa!U zg4;3`Nzdo@%B${@rS13tMaQHBr)0FWzwLdCY}rq9pv_as{kek@wEY9BAN(fI3?i$p zSB=+19($AL+!FJFzlne3ciGEvMNf(%E@$}nZKfR2IsU6n!y&rYReRIoTQqZK$YIE0 zTqs(3r>>2@!gFYg_2fn6;~Gl$01M{ZB4k4@+VM&Kgq@9(*v8Yva&A2}aI zh-!{Dj?Rvej|q+yh&>ZK5O+APJYFk4IYA=9KVdPEoYX7dd*ZS4 z<8Bt3RhMIyQg*cL8dj}# zZEl@TU4Fe@ec>yES7i;R4ONYnjde|jnwno9d)?iPYaVJLw!CjW)4I_1TRVTdUx!#n zaHnKvOqXI;TDL~`(;kDK7roZKZGG6j(Koa=pZYHitQ!a(+%}jz1Rr`bY&2Xua&)AB z)OB>>t*#w=>o6dDmF0$xP8WMo| zL4h1GL>im%WNiV0sleDYA{#3>dq?VsVG!xx0+3b)vj#NZlzze2aG-3K3=*3M1OSYH z!|FSn6PpI~U8lI9t#wdy0*+meOTpp*q9_ainFR2XR71{F_JT=~>1zaO|G z`ISfZC$h=TV&B(K2vwN2+BZ-S9X)pdbL9fCvmEeF1Tqo~1`%*bu&ufU%))gq-kD(H zNyS@xTH0VeU9j3XFv!7!j;A5PK%iY%2 z2n^L-!x_5&HKpztSMG>>9ys9o$0=PQ#JF-(if7NYzsnY&XD5{4= zMV9}4-d!0~B4_sCuuwb^Phzw5fZVHowKER;HT6Hy;;;xTdpV>~|Kcm4h|XSe{*_xe z4+6||-9J|hfHi~!Q-M|BuP+%cR1pM#;5Z;i&L2oaU4552$ni7p5{$K1!RZRdw%ArU87mh9I*Z=?k literal 0 HcmV?d00001