Re: Slowness in testing any crossing straight lines in a layer
Bo Guo <[email protected]> Thu, 5 Feb 2026 16:03:56 -0700
| Newsgroups | gmane.comp.gis.postgis |
|---|---|
| Message-ID | <CADHFRch_rbdCDedibRiSRm2Er-G3T9P_bWo6+Mh9N4KmjVtY6Q@mail.gmail.com> |
--00000000000050c801064a1bb4fb Content-Type: multipart/alternative; boundary="00000000000050c801064a1bb4fa" --00000000000050c801064a1bb4fa Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable *Versions: *POSTGIS=3D"3.6.1 f533623" [EXTENSION] PGSQL=3D"180" GEOS=3D"3.10.2-CAPI-1.16.0" PROJ=3D"8.2.1 NETWORK_ENABLED=3DOFF URL_ENDPOIN= T=3D https://cdn.proj.org USER_WRITABLE_DIRECTORY=3D/tmp/proj DATABASE_PATH=3D/usr/share/proj/proj.db" (compiled against PROJ 8.2.1) LIBXML=3D"2.9.13" LIBJSON=3D"0.15" LIBPROTOBUF=3D"1.3.3" WAGYU=3D"0.5.0 (In= ternal)" (core procs from "3.6.0 4c1967d" need upgrade) TOPOLOGY (topology procs from "3.6.0 4c1967d" need upgrade) Yes, this is the Explain Graphics: [image: image.png] The Intersects call - SELECT a.*, b.gad_globalid FROM _tmp_fishbone a INNER JOIN _tmp_fishbone b ON (a.gad_globalid < b.gad_globalid AND ST_Intersects(a.geom,b.geom) ); took over 15 minutes before pgAdmin session terminated. I will try it again in a bit. On Thu, Feb 5, 2026 at 11:38=E2=80=AFAM Regina Obe <[email protected]> wrote: > What does > > > > SELECT postgis_full_version(); > > > > Return. I suppose doing a cross join there does result in an order of 6= ,728,232,002 > checks. > > > > You definitely have a spatial index on your geometry column right? > > > > > > What timing do you get with below, just want to rule out some performance > issue with ST_Crosses > > > > SELECT a.*, b.gad_globalid > FROM _tmp_fishbone a INNER JOIN _tmp_fishbone b ON (a.gad_globalid < > b.gad_globalid AND ST_Intersects(a.geom,b.geom) ); > > > > > > *From:* Bo Guo <[email protected]> > *Sent:* Thursday, February 5, 2026 12:59 PM > *To:* Regina Obe <[email protected]> > *Cc:* PostGIS Users Discussion <[email protected]> > *Subject:* Re: Slowness in testing any crossing straight lines in a layer > > > > Hi Regina! > > > > Your query returned "116002, 2". > > > > I ran the three variations of the ST_Crosses query, and here are the > performance results. > > > > SELECT a.*, b.gad_globalid > FROM _tmp_fishbone a INNER JOIN _tmp_fishbone b ON (a.gad_globalid <> > b.gad_globalid AND ST_Crosses(a.geom,b.geom) ) > -- 33 minutes > > SELECT a.*, b.gad_globalid > FROM _tmp_fishbone a INNER JOIN _tmp_fishbone b ON (a.gad_globalid < > b.gad_globalid AND ST_Crosses(a.geom,b.geom) ) > -- 17 minutes > > SELECT a.*, b.gad_globalid > FROM _tmp_fishbone a INNER JOIN _tmp_fishbone b ON (a.gad_globalid < > b.gad_globalid AND a.geom && b.geom AND ST_Crosses(a.geom,b.geom) ) > -- 17 minutes > > > > It seems that 17 mins is the best I can get? > > > > Thanks! > > > > > > On Thu, Feb 5, 2026 at 8:06=E2=80=AFAM Regina Obe <[email protected]> wrote: > > How many records do you have in a / b > > > > What does this query return and point counts also impact performance > > > > SELECT COUNT(*), MAX(ST_NPoints(geom)) > > FROM my_fishbones > > > > > > Also I=E2=80=99d think you=E2=80=99d want to leave out compare with a.id = =3D b.id > > > > I also think the && is redundant as crosses already has a built in index > check > > > > SELECT a.*, b.id > FROM my_fishbones a INNER JOIN my_fishbones b ON (a.id <> b.id AND > ST_Crosses(a.geom,b.geom) ) > > > > > > > > *From:* Bo Guo <[email protected]> > *Sent:* Thursday, February 5, 2026 7:53 AM > *To:* PostGIS Users Discussion <[email protected]> > *Subject:* Slowness in testing any crossing straight lines in a layer > > > > Hi There! > > > > I have 100K straight lines in a layer - my_fishbone - with GIST indexed. > However, the following SQL query did not finish within 20 minutes! Could > you advise on any improvement ideas? > > > > SELECT a.*, b.id > FROM my_fishbones a, my_fishbones b > WHERE a.geom && b.geom > AND ST_Crosses(a.geom, b.geom) > > > > Thanks in advance! > > > > Bo Guo > > --00000000000050c801064a1bb4fa Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable <div dir=3D"ltr"><div><br clear=3D"all"></div><div><font color=3D"#696969" = face=3D"arial, helvetica, sans-serif"><b>Versions:=C2=A0=C2=A0</b></font>PO= STGIS=3D"3.6.1 f533623" [EXTENSION] PGSQL=3D"180" GEOS= =3D"3.10.2-CAPI-1.16.0" PROJ=3D"8.2.1 NETWORK_ENABLED=3DOFF = URL_ENDPOINT=3D<a href=3D"https://cdn.proj.org" target=3D"_blank">https://c= dn.proj.org</a> USER_WRITABLE_DIRECTORY=3D/tmp/proj DATABASE_PATH=3D/usr/sh= are/proj/proj.db" (compiled against PROJ 8.2.1) LIBXML=3D"2.9.13&= quot; LIBJSON=3D"0.15" LIBPROTOBUF=3D"1.3.3" WAGYU=3D&q= uot;0.5.0 (Internal)" (core procs from "3.6.0 4c1967d" need = upgrade) TOPOLOGY (topology procs from "3.6.0 4c1967d" need upgra= de)</div><div><br></div><div>Yes, this is the Explain Graphics:</div><div><= img src=3D"cid:ii_mla0olmy0" alt=3D"image.png" width=3D"490" height=3D"342"= ></div><div>The Intersects call - SELECT a.*, b.gad_globalid FROM _tmp_fish= bone a INNER JOIN =C2=A0_tmp_fishbone b ON (a.gad_globalid < =C2=A0b.gad= _globalid AND ST_Intersects(a.geom,b.geom) ); took over 15 minutes before p= gAdmin session terminated. I will try it again in a bit.</div><div>=C2=A0</= div><div></div></div><br><div class=3D"gmail_quote"><div dir=3D"ltr" class= =3D"gmail_attr">On Thu, Feb 5, 2026 at 11:38=E2=80=AFAM Regina Obe <<a h= ref=3D"mailto:[email protected]" target=3D"_blank">[email protected]</a>> wrote:<br>= </div><blockquote class=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;b= order-left:1px solid rgb(204,204,204);padding-left:1ex"><div><div lang=3D"E= N-US"><div><p class=3D"MsoNormal">What does <u></u><u></u></p><p class=3D"M= soNormal"><u></u>=C2=A0<u></u></p><p class=3D"MsoNormal">SELECT postgis_ful= l_version();<u></u><u></u></p><p class=3D"MsoNormal"><u></u>=C2=A0<u></u></= p><p class=3D"MsoNormal">Return.=C2=A0 I suppose doing a cross join there d= oes result in an order of=C2=A0 <span style=3D"font-size:11pt;font-family:&= quot;Aptos Narrow",sans-serif;color:black">6,728,232,002 checks.<u></u= ><u></u></span></p><p class=3D"MsoNormal"><span style=3D"font-size:11pt;fon= t-family:"Aptos Narrow",sans-serif;color:black"><u></u>=C2=A0<u><= /u></span></p><p class=3D"MsoNormal"><span style=3D"font-size:11pt;font-fam= ily:"Aptos Narrow",sans-serif;color:black">You definitely have a = spatial index on your geometry column right?<u></u><u></u></span></p><p cla= ss=3D"MsoNormal"><span style=3D"font-size:11pt;font-family:"Aptos Narr= ow",sans-serif;color:black"><u></u>=C2=A0<u></u></span></p><p class=3D= "MsoNormal"><u></u>=C2=A0<u></u></p><p class=3D"MsoNormal">What timing do y= ou get with below, just want to rule out some performance issue with ST_Cro= sses<u></u><u></u></p><p class=3D"MsoNormal"><u></u>=C2=A0<u></u></p><p cla= ss=3D"MsoNormal">SELECT a.*, b.gad_globalid<br>FROM _tmp_fishbone a INNER J= OIN =C2=A0_tmp_fishbone b ON (a.gad_globalid < =C2=A0b.gad_globalid AND = ST_Intersects(a.geom,b.geom) );<u></u><u></u></p><p class=3D"MsoNormal"><u>= </u>=C2=A0<u></u></p><p class=3D"MsoNormal"><u></u>=C2=A0<u></u></p><div st= yle=3D"border-top:none;border-right:none;border-bottom:none;border-left:1.5= pt solid blue;padding:0in 0in 0in 4pt"><div><div style=3D"border-right:none= ;border-bottom:none;border-left:none;border-top:1pt solid rgb(225,225,225);= padding:3pt 0in 0in"><p class=3D"MsoNormal"><b><span style=3D"font-size:11p= t;font-family:Calibri,sans-serif">From:</span></b><span style=3D"font-size:= 11pt;font-family:Calibri,sans-serif"> Bo Guo <<a href=3D"mailto:bo.guo@g= isticinc.com" target=3D"_blank">[email protected]</a>> <br><b>Sent:</= b> Thursday, February 5, 2026 12:59 PM<br><b>To:</b> Regina Obe <<a href= =3D"mailto:[email protected]" target=3D"_blank">[email protected]</a>><br><b>Cc:</b>= PostGIS Users Discussion <<a href=3D"mailto:[email protected]= rg" target=3D"_blank">[email protected]</a>><br><b>Subject:<= /b> Re: Slowness in testing any crossing straight lines in a layer<u></u><u= ></u></span></p></div></div><p class=3D"MsoNormal"><u></u>=C2=A0<u></u></p>= <div><div><p class=3D"MsoNormal">Hi Regina!=C2=A0=C2=A0<u></u><u></u></p></= div><div><p class=3D"MsoNormal"><u></u>=C2=A0<u></u></p></div><div><p class= =3D"MsoNormal">Your query returned "116002, 2".<u></u><u></u></p>= </div><div><p class=3D"MsoNormal"><u></u>=C2=A0<u></u></p></div><div><p cla= ss=3D"MsoNormal">I ran the three variations of the ST_Crosses query, and he= re are the performance results.<u></u><u></u></p></div><div><p class=3D"Mso= Normal"><u></u>=C2=A0<u></u></p></div><div><p class=3D"MsoNormal">SELECT a.= *, b.gad_globalid<br>FROM _tmp_fishbone a INNER JOIN =C2=A0_tmp_fishbone b = ON (a.gad_globalid <> b.gad_globalid AND ST_Crosses(a.geom,b.geom) )<= br>-- 33 minutes<br><br>SELECT a.*, b.gad_globalid<br>FROM _tmp_fishbone a = INNER JOIN =C2=A0_tmp_fishbone b ON (a.gad_globalid < b.gad_globalid AND= ST_Crosses(a.geom,b.geom) )<br>-- 17 minutes<br><br>SELECT a.*, b.gad_glob= alid<br>FROM _tmp_fishbone a INNER JOIN =C2=A0_tmp_fishbone b ON (a.gad_glo= balid < b.gad_globalid AND a.geom && b.geom AND ST_Crosses(a.geo= m,b.geom) )<br>-- 17 minutes<u></u><u></u></p></div><div><p class=3D"MsoNor= mal"><u></u>=C2=A0<u></u></p></div><div><p class=3D"MsoNormal">It seems tha= t 17 mins is the best I can get?<u></u><u></u></p></div><div><p class=3D"Ms= oNormal"><u></u>=C2=A0<u></u></p></div><div><p class=3D"MsoNormal">Thanks!<= u></u><u></u></p></div><div><p class=3D"MsoNormal"><u></u>=C2=A0<u></u></p>= </div></div><p class=3D"MsoNormal"><u></u>=C2=A0<u></u></p><div><div><p cla= ss=3D"MsoNormal">On Thu, Feb 5, 2026 at 8:06<span style=3D"font-family:Aria= l,sans-serif">=E2=80=AF</span>AM Regina Obe <<a href=3D"mailto:lr@pcorp.= us" target=3D"_blank">[email protected]</a>> wrote:<u></u><u></u></p></div><bl= ockquote style=3D"border-top:none;border-right:none;border-bottom:none;bord= er-left:1pt solid rgb(204,204,204);padding:0in 0in 0in 6pt;margin-left:4.8p= t;margin-right:0in"><div><div><div><p class=3D"MsoNormal">How=C2=A0 many re= cords do you have in=C2=A0 a / b<u></u><u></u></p><p class=3D"MsoNormal">= =C2=A0<u></u><u></u></p><p class=3D"MsoNormal">What does this query return = and point counts also impact performance<u></u><u></u></p><p class=3D"MsoNo= rmal">=C2=A0<u></u><u></u></p><p class=3D"MsoNormal">SELECT =C2=A0COUNT(*),= =C2=A0 MAX(ST_NPoints(geom))<u></u><u></u></p><p class=3D"MsoNormal">FROM m= y_fishbones<u></u><u></u></p><p class=3D"MsoNormal">=C2=A0<u></u><u></u></p= ><p class=3D"MsoNormal">=C2=A0<u></u><u></u></p><p class=3D"MsoNormal">Also= I=E2=80=99d think you=E2=80=99d want to leave out compare with <a href=3D"= http://a.id" target=3D"_blank">a.id</a> =3D <a href=3D"http://b.id" target= =3D"_blank">b.id</a><u></u><u></u></p><p class=3D"MsoNormal">=C2=A0<u></u><= u></u></p><p class=3D"MsoNormal">I also think the && is redundant a= s crosses already has a built in index check<u></u><u></u></p><p class=3D"M= soNormal">=C2=A0<u></u><u></u></p><p class=3D"MsoNormal" style=3D"margin-bo= ttom:12pt">SELECT a.*, <a href=3D"http://b.id" target=3D"_blank">b.id</a><b= r>FROM my_fishbones a INNER JOIN =C2=A0my_fishbones b ON (<a href=3D"http:/= /a.id" target=3D"_blank">a.id</a> <> <a href=3D"http://b.id" target= =3D"_blank">b.id</a> AND ST_Crosses(a.geom,b.geom) )<u></u><u></u></p><p cl= ass=3D"MsoNormal">=C2=A0<u></u><u></u></p><p class=3D"MsoNormal">=C2=A0<u><= /u><u></u></p><p class=3D"MsoNormal">=C2=A0<u></u><u></u></p><div style=3D"= border-top:none;border-right:none;border-bottom:none;border-left:1.5pt soli= d blue;padding:0in 0in 0in 4pt"><div><div style=3D"border-right:none;border= -bottom:none;border-left:none;border-top:1pt solid rgb(225,225,225);padding= :3pt 0in 0in"><p class=3D"MsoNormal"><b><span style=3D"font-size:11pt;font-= family:Calibri,sans-serif">From:</span></b><span style=3D"font-size:11pt;fo= nt-family:Calibri,sans-serif"> Bo Guo <<a href=3D"mailto:bo.guo@gisticin= c.com" target=3D"_blank">[email protected]</a>> <br><b>Sent:</b> Thur= sday, February 5, 2026 7:53 AM<br><b>To:</b> PostGIS Users Discussion <<= a href=3D"mailto:[email protected]" target=3D"_blank">postgis-u= [email protected]</a>><br><b>Subject:</b> Slowness in testing any cro= ssing straight lines in a layer</span><u></u><u></u></p></div></div><p clas= s=3D"MsoNormal">=C2=A0<u></u><u></u></p><div><div><p class=3D"MsoNormal">Hi= There!<u></u><u></u></p></div><div><p class=3D"MsoNormal">=C2=A0<u></u><u>= </u></p></div><div><p class=3D"MsoNormal">I have 100K straight lines in a l= ayer - my_fishbone -=C2=A0 with GIST indexed. However,=C2=A0the following S= QL query did not finish within 20 minutes!=C2=A0 Could you advise on any=C2= =A0improvement ideas?<u></u><u></u></p></div><div><p class=3D"MsoNormal">= =C2=A0<u></u><u></u></p></div><div><p class=3D"MsoNormal">SELECT a.*, <a hr= ef=3D"http://b.id" target=3D"_blank">b.id</a><br>FROM my_fishbones a, my_fi= shbones b<br>WHERE a.geom && b.geom=C2=A0<br>=C2=A0 AND ST_Crosses(= a.geom, b.geom)<u></u><u></u></p></div><div><p class=3D"MsoNormal">=C2=A0<u= ></u><u></u></p></div><div><p class=3D"MsoNormal">Thanks in advance!<u></u>= <u></u></p></div><div><p class=3D"MsoNormal">=C2=A0<u></u><u></u></p></div>= <div><p class=3D"MsoNormal">Bo Guo<u></u><u></u></p></div></div></div></div= ></div></div></blockquote></div></div></div></div></div></blockquote></div> --00000000000050c801064a1bb4fa-- --00000000000050c801064a1bb4fb Content-Type: image/png; name="image.png" Content-Disposition: inline; filename="image.png" Content-Transfer-Encoding: base64 Content-ID: <ii_mla0olmy0> X-Attachment-Id: ii_mla0olmy0 iVBORw0KGgoAAAANSUhEUgAAAeoAAAFWCAIAAAApB0ljAAAQAElEQVR4AeydB3xN5x/G783NFhIj SAiaGAlRe4tZe281q1q0RbW1urR0+ZcqrSpatFTVKlWzKGqv2ERsIrFFpoyb+3+SE8dJcpPc3H3u fe7n5/idd7/f95znvOd9bxKHK9cjaSRAAiRAArIj4OBf3odGAiRAAiQgOwIOCn5IgARIwFIEWK8B BCjfBsBjVhIgARKwHAHKt+XYs2YSIAESMIAA5dsAeMxKAukE+I8ELEOA8m0Z7qyVBEiABAwkQPk2 ECCzkwAJkIBlCFC+LcPd2mple0iABGRHgPItuyFjg0mABEggnUBu8q2+d2jh+L4t61QLrFanZf+J vxx/nJae3OB/mui1w4Nbfhmamr0kTfSWdxq3+GTf0+wR+Z+rz37TLnjw73c1+SfVJYXmyaYxtQK7 zbus1iV1bmkSNowKbjr1cI5+5pY+M1x9fm73hoOX3jCo7syytP2niTnzx0eD2tQLDgqu07Lve/P3 3iloC6WlFri1yYemtWw8duMjIw2VtC30ScDuCGiX74SjM1957efI2mPnrd64Zt7ooCvfDR+16JIh N3q+YJUeVTsNe+Wlis75pswtgZHCNU/2bNobnxa+ZesVU2loHi118G3y8rDedb1VeaTRPyrt9up3 hk0/6z/i+1V///nzBy1il785dMaRhPQC1ee/7RA8cNmdfJ7SWZPp0NqU/R83Ch69KfOp7PhC62HD ugQXVqZXyX8kQAIGEdAm32lR677/7WGbafMm9WhQtWJQg14ffzu6yrklvx5KylaVRmPEWZRj+Zde fyWktLYGZavWpKeax7s2HfLpO6jBrS2bw82v30qvWv1GdqvqbpI+pt3f9ddBl26TPurTsGrFyrXa vPH1e03urPptT7y+tRW4tQ6lmgx5vU0FJ30rZD4SIIHnBLSpZfzRfSecGnds5vVsjuRQtuNb43pX dU2EWmesfjQf8eHYzvWC2888o1ak3t41+80ujV8MCqrV4uUp668IGp/87/g6TUZ+PnVI6zpVg2q2 GPTV9tvPtVDz+NiC0Z0bBAfVaD5w+u57woQvy2pD2v2D89/uGVKzarU6bYZN33YrRWix9rqEOOMc NQ//3XSkVJv+IzrVjti6JUydWWp6r6t3nPrb/LFdGmZttkITc/aPjwa2xjJT9Yad3/zxcLaFASzF jK5d840N0WCnUGgerh5evcGkXZjwamJOLR3fs8mLgYE1m/WZvOJcXEaCLAtBqRHb/zesbd1qVarV b//6rF1Rz1qT2agC/6dUOTkrE+/ceZJRlUKh9Hzpw2WLRtdRYfUpqMvc8MRDnzYJ6rXwWno9WlCn ty1rsvQQcdkqZ2tT9n7YoOqQ3+8lbhlbLWj4WiBID6k+dmuyIuOjfZRzlpORmAcSsHIC5m+eFvlW 34u8k1bSz9fleWscSjd77d0BdZ/puTry+GXfUT+unv9KJcWFH0eN3eA6aO7GXf8sGVli98eTlmbc /ciruR8a7v3W8r3H9/zcz+HP8ROX3xR0WqG+vXXdjSYfLln720f17vw6Zf6xTHFGHsHUV38Z+8av MS99sXrbhnlDC28b/+a881i5Uedel5DP8KPm/s5NR0u2bhNUqnm72pFbN59Dtc9KVV9es+Jqow8W Z2m2Jnrrx8NnXKnz4e87dq/7KuTu/HH/2w1tfpZHoVAWCenYVHV4x/5YBdQ79uDuUPfm7Rq4K5IO fTNm5pW6n678Z+viMeWPf/7WN0eEBx+SCZYWsWLye3+7DZq/ccef/2sf//u4ySsjMwkKCQp8VBZv N7RH0f+m9Bvx9cr9V6LVCqWH34u1K5d0rTr2r+OrR1Z0q//BjtDlr1ZQKbSiVuVIJmmBttaqGn+y +9hPfb3d2sw8dnxed69n0wEhm/ZR1laOYb0WauORBGyPgBb5ViQnJSucXPJ4wXUo1fXd9zrXDXrB 203p2236qmWf9a1drrRfzd79Qtwvngl7JnmFmg95rUFpd7eSdUdMetnn5IZ/IoT70MG764fTXm5U tUqdnsM6lXsUdvGhEP6Mrvr8n3+crjJi2qhmlfwCGgz8dGJ391thd9MUedX1LK9h/6fd27n5eMlW bYJUSu8W7Wrf2br5zLPOKBTKEl3fz9FspUvt0YtXzx3TqopP6YrNB3WtGnv+7C21QvLJ0G/lgZ2H sUSReGT3Uedm7Rq6KzSJkRGPi1QLaRJUrkLt3h/OmD6ikWdq5qQ4M3Pa/duR6nINXqr9gl+VlmO+ mjW5S0BW/ctMV4D/lF4tpq5aPqlJwubPX2nXuGnP9xbuz9i6dHBydXd1clA4OLu5uTqiFu2ocyST VK21tSpnN3cXlOeY/r9KkhpuLqOstRwkp5EACWQnoE2+nZ2dNMlPM15w0yKWDsSySBA+1Xv8cDFT l5ROTk64x9PLcvAs6Xbt9/G9WtSvVbNmvTfWPlKr09LSIzL+ZSZSqAICKzrcvhEh5Fe6FHJ3zIhX uLi4KFKTs82+n167HOkVFOQjtE1ZrMNnK2f2LOOgyLsuoUCDjml3/9kU6t26bTW0Tundsm3Ne1s3 nxQbp9TabDfvYol7Zg5r37hOzZq1O359PCU1Vejl85YUbtqxmXL/9iMJSSf2HFSGtGuElW2lZ+vh g0ttebNt79FTf1hzzqtl/7aBhZ7hErI6Vu8zskXkzC4dhk2c8cs/MUG9ezfIRCLE63dUFa896LPl /x7e9ccXfUufmTv85U/2YFEje1kFR13g1uYyygUuJ3vTeW4IAeaVFQFBIrM0WVW6nJ9T1OWr6Yux DqW7zVi/cePfC4YGpKWos84OMzIlH/92xAcH/N5cvOPoyZNHF/b11lIgEqpT06eWWvIjLocpHRwg ZLBsMTrWlS2X7qdpkf9sCU28tWRAdTytgqq1mHYoMRJ6nvEcy62UtDtrJo5c/KTd9HX7Q0+Gbptc T9tLiwf0W7Nvx6Hje/anNm2frt4KhdKr8cRVu/+eOaSW6+WVE7t2eGt1ji8LOgb0+2Hbzl8ntPOL 3fvtkLa9ZxyK0ZGgQvsn+W5Y6LmIBBTi4F62bo93flj+abPHG5bverYW/jyXHqgL2trcRrmg5Txv ND0SsDMC2tTWvWHrxo4HVv51E9NIR09f/4CAF/yKuWgFo7519Midih0HtPQvghlrSkJCMrThWUpN 2rNvpiSHnQ3XlK1QTvUsKs//XSoE+D65mL5ckpEsPnTZlwv/u5+WZ10ZKQ07pN3+Z9NpnwFzN4qf lRPqPdqx+Xi2NekstaSePXxc0bBPv5qlXB2wIpKYvrubJUHGSaHGHZqpd/0459/4Ju0aFUoPUl/a OPu7rff8GnYdPunblb+OLPrf0o1Zv6ioeXho6axlJ52qvdR/zLRFa79qHvHbioN5NSW92Lz/PT3y 3bDB0/8V1Vrp6e3tqk5KynzBeP7AzBP182SS2nJvrdbkyKl9lNXG7zXqopGATRLQJt/K4p3eeata 2IwR4xf/e+rylfDTe9cu/ee6UwnvIjluRYcS5f1cwtb//NfhU8f/WTDhi83Raekr5wKq+J3zZmw6 e+vW+a0zvlj1qG73dlgAEWLyPqqCevSvfmHBlJ/2XY64dmzVp+/POphQ1Mshz7ryLlGXWPVN7FSW btOzVaWAzE/Fmj261n2yY9PRp7nnV5Wt4Jewb9nPO0+c3Lf6i4kLzqQ8778kV6HGHZunngx93Khd 4wz1Vihdo0MXT/107s7zt26FH/jn6B0XX9/iWQZD6a64tuF/U75cfexqxI2TO/8LSypV1kfb3F5S TT5ukZZD+3rv/mLMjHWHz1+5fP7gqs9mbkqu165JcYyrsnARj7SIU4cu3HiQqMgddZZkkupyba2D B8q9duJg2K3HmU+JzFzaR1lleK8zy+d/JGDzBLIohthbp8qvLlz+WcuE9VNe6dq517CPV0TWmPDr 7P6+OVIrPdu+//Wg4vunDe0/4ptj/kNfbemvjL2vFgpyqx7s+Oe73dv1mry9UP+Z0/uXzZFdSJfj qPIf+t0PA103TujRpsubi6Pbzpw/urqTIs+6cpRR0AD19a2bz5d+qV0w3iKe5cX6d/s6Mf9uPpL4 LCTH/6oqr07/sNGDpWNfHjxpZULnkX0DCyVHa5kjuzdsG+JZpGn7xh5CEQ5+L8+YO8Rz55T+bV7q NWGzy8uzpnZNV1EhNuPo1nDCgqkNoxaO6tK6/auzr9b+aPab1XV7fcnIru3g0WDyb4tHlT+/cFz/ zp36jv3pavB7i+a87Jc+Lg5lOgzt4rbzg4ET191W5446SzJpFbm1VlW1xysh8SvfGvj5zseSNzNk 1T7KuZWDDDQSIIEsBNLv3CwBmSdKj8Dukxds2Hfi/IUzx3evW/Bx/xrC976UXr0Wnd31Qe1nKqfy aT156a6TYReOb/vpvaHjf9q0cGjFTJFRlW7+7qJ/jp+/cHL3sskv+WSEZs2uqvjWhrOrhmfoh3vX +Wf3fdJAKNfBu8lbP/x98MyFs0e2/vRe6zJCaC51qYLf23Z22YBSmENmtl6P/1QBo9ad3zm5llBT ZgHKkv2WnDnwZTO33JutLFRt0KwNh86Fndm/ZvrQEV9s2DClBbYmFVm6o1Cooy5fc2jSrknhzJIV ClWppqPnbth/OuzimUObFrzTonQGnyx9ca/Sa+pvO46du3ghdPcfX/avmm1vUyyqAI7Ku/7Qz3/Z cvD0hYtnj25f/sXgWsKwKhQOvp3+t/XE+ZMrX08fv1xQZ0umS2sdKw5csPvM+eMLepdUKpxCvjh8 5rv2zkKLtY+yCXotVMcjCdgYgdzk28a6acnupEbfOPXvgs+XPmjTu/lz9c6zRYwkARIggXwJUL7z RWRgAs2jbZ8OHbcytff090IKGVgWs5MACZCASMBU8u3camboiZmtM9+Sxers0ElfgDl5es+ydxsX U9ph99llEiABUxEwlXwrTNVglksCJEACJJBOgPKdToH/SIAESEB2BCjfshsyNpgESCB/AvaQgvJt D6PMPpIACdggAYc6I+fYj9ngALJLJEAC9kqAs297HXn22/oJsIUkkCcBh9Uf9LUfu3ojikYCJEAC tkHAwb+8D40ESIAESEB2BLh4kufLCSMNJcD8JEACpiJA+TYVWZZLAiRAAiYlQPk2KV4WTgIkQAKm IpAu3zGxCSfPXdn+XyhNKwHAAaKcI4BARGnNYmAgikXhOWtkCAmQAAmIBBwgE4dPhBUvWqRNs9om MlRmopLFYk1aBeAAEUChFtFwikBEiW0wooNiUTiqEKujQwIkQALZCDhcvRkVWNHPz9c7WwRPRQKA A0QAJYbAwSkCEQXf6IZiUTiqMHrJLJAESEBuBHJtr8P9h08gFrnGMyKDABABVIabecApAjNPTPAf CkcVJiiYRZIACdgIgfS1bxvpCrtBAiRAAvZEgPJtT6PNvpKAhQiwWlMQoHybgirLJAESIAGTE9BV vvfs2TMn4wPHiI26d+9eRqmZh/DwcGnhOM2MyPgPiaWxyhANUQAAEABJREFUevhofEZJc+Dokd2Q LCsyPoaUwLwkQAIkICWQv3xfv3590KBBr7766ncZHzhDhgy5efOmtBS9/bt372aUmn6IjY2tXLmy tCicPnz4MD0u4x8SS2ML5Ju0F7q0JEO9V+iSkmmslACbRQJWRiAf+b506VKXLl1w/Pbbb49mfGbN mhUWFtatW7dbt24Z3hcHh8wGuLi44KmQs8Dhw4cjSggXEwunuh/RfpP2QveWMCUJkAAJGItApnrm VtzXX3+dkpKCmWPXrl1vZ3wg3MuWLcNMGRPi3HIVNHzkyJEqlapfv36YI0vzXrt2DYGIGjFihDS8 oL60F8UyPqboRUFbxfQkQAIkYAiBvOQbGr17924onb+/P+o4m/GBU6VKlc6dO2/ZsiU1NRWnBto7 77wzceLEJUuWREdHjxo1SloaTp88eYKoSZMmvf3229Io3f1svRAzGrcXYrHW7bB1JEACtkMgL/mO jIxMS0uDzKG7L7/88s8ZHzg4rVatWmJi4o0bN+AbYgEBAaNHj0YJdevW/f7772fMmAFfNJwiEFEI GTt2LBLDKahl6wXaLxjKCQ4ORi+MtY6PAmkkQAIkYDYCecl3yZIl0Q5hQWPFihWvZXzgIFCQPKxD wDfEXF1dxewvvfRS9erVxVM4L774IgLhCCZNLITocszWC7RfMOQVula0aFH4JrLNmzdPmTIFhSsz PnBwunXrVjg0EiABEjCEQF7yDV2rUaPGhg0bIiIiUAfmqjA4mHQjsEGDBkiAUzNbQatDI6W9ELND u//++29T9OL+/ftz5szBUhPq+vPPP5cvXy7uE2AHGKfr1q1DFBIgGRLDp5EACZBAQQnkJd8oa8yY MVg77t27N1a6q1atGhQUBOHu06dPXFycsOiBNNZv0l6o1Wos2aMXffv2NVEv7t27B72GOoPMDz/8 EBISApkOz/jMnTsXp4hFFBLAQWL4NBIgARIoKIF85Ltly5bffPNNUlISxLpRo0b16tXDTiMEvXbt 2lCia9euFbS+PNJfvnz58ePH0gQ4RaA0RD/fnL1AC7FhgKNGo8HRxcVlwYIFzZo1S874wMEpAhEl JBAS45RGAiQgBwJW1MZ85Bst7d69+65du6ZNm9a4cePAwMBBgwbt2LHj7bffPnz4cP/+/bEEgTR6 W1hY2KZNm5AdMj1gwIBXX30VvmjDhg1DIKIQsnHjRiSGo5+ZtBd5NwliPX/+fAg3DA5O807PWBIg ARLQhUD+8o1SvLy8Bg4cOHv2bGz6TZ06tUyZMk2bNp0+ffqDBw/65fiyNtLrbph7jh07FmsIWMrA XPuNN96Q5sUpAhGFBHhgILE0tqC+6XqRrSXCjxdhq1IMh2RDuGFwxEAhgZBYDKRDAiRAAjoS0Em+ tZaFFXDDFVytVqNwLA3Hx8cvXLiwbdu2OBWtXbt2CEQUEiBQSAzHiGaUXmRrj/CYEdZGxCgIN0w8 hSMkEBLjlEYCZiPAimyDgP7yjf5D+7788kvMwbGygVMDTZiNZisE24zZQox+atxeoHnFixfH8eef fxa+YJ7bEQmQrESJEjjSSIAESKCgBAySb1SGxZNly5ZhYxO+Hla4cOH6GR/shS5atOjSpUvSQsLD w3/55RdEZSSpj8TSWCP6BvYiW0t8fX2HDx8ufN88W5T0FAlGjRrl4+MjDaRPAiRAAjoSMFS+UQ22 NHHUzypUqID1dMHwGKhUqZK0nMqVKy9fvlyIxRGJpbHG9Q3pRc6WfPDBB2hwvjZhwoSceRmiEwEm IgG7J2AE+bZ7hgRAAiRAAhYgQPm2AHRWSQIkQAKGE3DwLu55K/K+4QXZdglABFDSPuIUgdKQgvt5 5UDhqCKvFIwjARKwbwIO/uV8wi7fgljYN4e8eg84QARQ0kQ4RSCipIHG8lEsCkcVxiqQ5ZAACdge AYcihd0b1Ap8+Dhm+3+hJjJQM1HJYrEmrQJwgAigUItoOEUgosQ2GNFBsSgcVYjV0SEBEiCBbATS 174hEzWrBbRpVlsPs4csgANE2cDhFIGIMgUBFIvCUQWNBEiABHIjkC7fucUxnARIgARIwGoJUL6t dmjYMBIggXwJ2HUCyrddDz87TwIkIF8ClG/5jh1bTgIkYNcEKN92PfzsvDUQYBtIQD8ClG/9uDEX CZAACViYAOXbwgPA6kmABEhAPwKUb/24MVdWAjwjARIwOwHKt9mRs0ISIAESMAYByrcxKLIMEiAB EjA7Acq3iJwOCZAACciJAOVbTqPFtpIACZCASIDyLaKgQwIkQAKWI1DwminfBWfGHCRAAiRgBQQo 31YwCGwCCZAACRScAOW74MyYgwRIQDsBhpqVAOXbrLhZGQmQAAkYiwDl21gkWQ4JkAAJmJUA5dus uFmZ9RNgC0lALgQo33IZKbaTBEiABLIQoHxnwcETEiABEpALAfnJ99UH8UeuP5La6tAI6Sn8HWH3 tp2/C0dqq45nT7bxTNR/lx9I0xy98ThFrZHL4OXaTkaQAAnYAQGZyfejhOS3Vp769eRdqc3ccXnZ ybvLTz23Hw/cnL4jXBoCf+bOyzhKbc6eq7P2XJMWNe/QrTm7LtvBuLOLJEACsicgN/mOT/YtXqh1 TT+pqVTKptXLNK/hJ1rV8sW8PQuJp4Lj6KAUHPFY1rtwlbJFpUU1CvKJiE6U/aiyAyRAAnZAwGrl Wzt7jUah1B6jT6jW0tIQqk9hzEMCJEACZiUgM/k2KxtWRgIkQAJWTIDybcWDw6aRAAlYioAc6qV8 y2GU2EYSsD4CyclpR49H/7YiYubsKwW1ufOvbdl273bkU+vrlpxaZNXyfeFO7P4rD6U401KeRscn XL3zRGoajeb63RhpyP0nifFJKdIQ+GmaNBylFpvw9EHsU2lIxIO4tJQkaY30SYAEchI4ejz6o0/D lvx68+KluJyx+YbEx6u3/3t/2pfhi365GRenzjc9E2glYNXy/cH6s5/8fU7abjf1g4opJ55c2htz aU9M+K7Y8B3xF7dXdomIu7QrJvy5uTw8WSHtkjQk5uKuSq5RWULCd5VIvlIk9vzjywdES711qLbD UWmN9ElAtgRM1fBLl+N/XnKzenCRb74O/mxK4PhxAQW1Se9VnPW/am+P9r8YHrf415umaqitl2vV 8l3a09VRleWbJsXdVUPKhY/v6Plex6LvdSr+bqeS4zqXej/w+LiX3HAq2vgGDybWuyOewnmnQ5H3 A/bDkdqkGpcmNHoysYOHaONCUht6Rtj6oLN/JGAQgSXLbvm/4D54QFk3V4MEpGqgx6ABZc9diA09 +cSgBtlrZoPo2ys09psE7JdA9JPUhw+TG9YvahQELwYXcXV1CL8Ub5TS7K0Qyre9jbjM+svmWhuB O3fT9xtLlXTJ1jC1OvnBvbBb1w/kZpG3jsbH3cuWC6coKjKSPysHEgU2yneBkTEDCdgzgRcquA/o V6ZSxUJSCIf+m/39V5WWzm+1emnv3OyPJd0WzKq5YlHn6MfXpXmdnR0Sn6ZJQ+jrSIDyrSMoJiMB Ekgn4OLs0DykuEqyKXXpwuYDu79u2mpylz4/9xmyJjfrNWhF2y4zHZ1cN619I72gZ/80GoUG/56d 8n/dCchPvtVJ8XfP7JHa0yf3H4QdkoY8uRUWG3VJGnL/3L6kuMfSEPjxd288unYKjmjR18/ozk7X lExHAjZN4PypVaV9a9Zt/EaloI5+FRrnZuX9mwfXGlCr/vC7kacePbik4MdgAvKTb6WTi1f56lJz citSxC9IGuJeoqxbUV9piGe5ak6uHtIQ+C5eJT1KvQBHNI9SFQxGygJIwL4IYEW7iFdZhW4fN/di SPjoAX+vJzAYavKTbwcHR5cixaSmcnZxLuQpDXFy83B0LSQNcS5c1MHRSRoC39HFzdm9CBzRHN0K G0qU+UnA2AQqV67cqlWr999//9ixY8Yu2wjldev/S9uus3QsSOmgQsq0tFQcaQYS0FG+DayF2UmA BPQnoFarb9y4sWrVqn79+lmDlO/+L8vPQhfyKOns7KFr9zKWuTUZR12zMF0uBCjfuYBhMAlYJQGL S/nOXQ9WrLp94NBjq8RjX42ifJtvvANk+/H395dt29Mb3rp16/T/ZPsvt2vU/FJ+7XrC2vVRaM+K lRGRUelfAIdvDmMd2gjIT741aanJsQ+lpk5JSo57LA1JSYxNTYqXhsBPS0vGUWrqpMTkxCfSkJSE WG2UGCZXAsJLOmROrh3Qud3oo6kXWBIS1T8tvqFWa9Co5BTNwsU3UlPTfY0m7f7dLL+bCAl0N6VS oVQqdU/PlCIB+cl3WkrS4+vnpJaSEPMkIlwakvgg8umjKGnIk5thKQnx0hD4T5/cj793E45ocfdu iGjo2AyBmzf5S5GMMJjLV0Q8fJQiFhQVlSTMxHdt+2jlkh7x2n6iUkz83MlQaqWSev0cid6e/ORb 5VKoVPVmUnP19PYObCANKeJXxcOnojTEu1oTF4+i0hD4hUqWK1q+OhzRilYI1hslM1obAY1Go1Ra j0yYFo9KpSpfvnzfvn1XrlwZHh7+77//fvXVV3Xr1jVira+/Wn7B3BdHvVYeZY4fFwC/X2/fM6HL Tx75JTk5buOakRqNPj88qeGP7QCoXiY/+darm1aR6YpsP1evXpVj299++21h4JVKZWBgoBy7ILRZ 6EXOoxkkO2el0pDIW0d2bn5fCLl98/Ch/3T4+iDUWsEfsxSYGXqkfBtKkPmtkwDWgtesWSO2bcCA AaIva8fiki2l5+Ts0WvQH8G1Bmg0ms59fvKr0FQaS9/UBCjfpiZsU+XLqDM7d+6MjIwUGuzm5taz Z0/Bl+PRqiRbCtC7VFW/Co29ipZXKpVl/OqVLd9QwY8ZCVC+zQibVZmRwNq1a8XaOnToAAUXT2Xn mGgt21gcHFROGUWlfwslw8nroMlYH1dlZskrJePyJSA/+U5NSngQdkhqSTEPH10OlYbERl6Ov3tN GvLo4pHk+GhpCPyEBxFPbl2AIxpO80XGBNZPAPPuXbt2ie20mZUTsUdW5RTxTP+FJ0lPdfrS7dPE aDTes2g5HGkGEpCffDs4OhUqVUFqjq7uhbzLSkNcPEs4FykmDXEvWd7RxT09RJLX2cPL1aukNNDN q5SBQJndGgisXr0aa99CS7BpWatWLcHn0RQEfP3qqlQuR/Z/fyv3v9UgRN28tvfk0V88CpcuVqKS KVpib2U6yK7DDiont6KlpaZydnPxLCkNcS7k5eTmKQ1xLVrKwdFZGgLf0dXDpXBxOKI5Fy4mOyBs cDYCEG6b3LTM1k3rOYUct+rwWdiZdatz/1sNQtSaZf0iI4617TpLpXK2nvbLtyXyk2/5smbLzUPA ljYtzUOsQLWoHNO/Sq9Oy7LSXb32oFdH72/fbU7jFhMaNX9XqzVpOblTz3mvjT1UIaCFQvJJS9M4 OtqREEm6bqhrpdRO3oreeCbqbszT+KRUOPsuPzC0o8xvNwR+/xxtqMsAABAASURBVP13sa/du3d3 c3MTT+kYTsCntCsKeST58Uucwop4+VWt0adhs3caNR+v1RqEjK0S3N3Nvbgi6+fhw2Rfn/Qyswbz LH8CVirf0/+5OOHPMxfuxD6IT4Hz0Qb9f6NC/gyYwoYIYNNy7969Yoe4aSmiMJbjXcLZ1dUhLDzO KAVGRj19EpNazo+PWH1wWql8LxlS16dI+gMZ72klCzsvGvL8Z381GnVKYqzU0lJTUpPipSGpSYnq lKdZQhJj09JyZExJSk1KkCZTJyXqQ5F5rIbA6tWrxbZg07Jq1ariKR1jEejT0/fwkcdHjqV/h8SQ MmPjUpcujyhbxrVh/aKGlGO3ea1Uvt2cVNN7VC/p4VzIRTWyqX9AiULiCEFhH1w4LLXk2MePLoVK Q+LvXI27e10a8uDi0eT4J1lCLhxOeBj5JCJMGhgdESZWREd2BNRqNTctzTBqTRsXGzrQ79ffbn0+ PXzm7Ct628efhjk7O4wb7Y/pvBmabXtVWKl8A3T9CkUHNCjXorL3gPpZviLq6OrhU/slqbkWLVky OEQa4lm+mmfZQGlI6ZqtXAsXk4bA9yj9QvGA2nBEKx7Ab5iBvVyNm5ZmG7nGjYp+8kGVoMDCHoUc 9ajU0VHp7e3cq4fvO2P8CxfWpwQ9KrW9LNYr32CNefeMni/CoZGALgQKsmmpS3lMkxeBkiWde3X3 GfV6+fHjAgpqmHFj/h7SpJgSy6N5VcK4vAhYtXzn1XDGkUBWApGRkdy0zIqEZzZOgPJt4wNsP937 7bffxM7WqFGDm5YiDTq2SkBu8q10UJj4bUtp6gqMdymxJJEANi1XrlwpnvL7giIKOjZMwEFefXMp VCL+wa27p3dLLfVp3IOwg9KQuKjL8feuS0Pund2rTn4qDYGf+Cgq+uY5OKLdv3DQzbOMvJiwtSCw efPm6OhoODA3N7dOnTrBoZGAbROQmXw7unpW6zSzVKW+UvOrNap0lQHSEN9qr5SpPkwaUrpy/3J1 35SGwC9b4zXfqoPhiIaQCo3fsu0ht8necdPSJoeVncqbgKXlO+/WaYt1L/aCZ9k6JrPa2upkmFUT wKblkSNHxCZy5UREQce2CchPvm17PNg7PQhw01IPaMxiAwQo3zYwiHbdBW5a2vXwG9x5WRdA+Zb1 8LHxCummpZeXFzcteU3YDwHKt/2MtW32lJuWtjmu7JUOBCjfOkBiEmslEB4eLt207Nevn7W21JTt Ytn2SoDyba8jbxP9lv6oTv369StXrmwT3WInSEAnApRvnTAxkRUSwKbl+vXrxYb16tVL9OmQgD0Q oHzbwyhbfx/1aSE3LfWhxjw2RIDybUODaWdd4aalnQ04u5udAOU7OxGey4IANy1lMUxspEkJUL6N hpcFmZMANy3NSZt1WScByrd1jgtblReBxMRE6aYlf8lJXrAYZ7sEbEq+U1JSPvroo/r16zdt2hRD 1rNnzwULFsDJzU6cOBEQEBAREZEzwSuvvDJhwoSc4QyxBgKbNm0Sfz2sl5dXx44draFVZmjD/v37 ccXOnz9fWhdOa9asKQ0xtY8aGzdunLOWvn37jh07Nme46UJQ3csvv2y68q285KzybbLGzp07t2XL liYrPrPgtRmfTz/9dNGiRQiCBIeEhMCh2RgBjLPYo+7du6tUKvHUHpzvvvvuxo0bRunpsWPH8DyI iooySmksxMwEzCTf5unV5cuXK1asiLlYlSpVUGPXrl2rVq0Kh2ZLBLhp6erqirdMWxpTq+1LWlqa RqOx2uaZQ77xZvftt9/evHkTz/m///4bLCpVqjRnzpw+ffoEBQU1a9Zs69athw4dat++PU47d+58 /PhxpIFh+jx69OgRI0aghHr16mHSgcDcrFOnTkuWLDl//jxqwWQfyTDfRy1wYJitvPbaazVq1EA5 kyZNiomJQaBg+/bt69ChA6ru0aPHxYsXhUAckQavZsHBwcgiloPwBw8evPPOO2hS9erV33jjjcjI SATC8EaJctAGvFe++OKLb775ZmxsLMJharV69uzZDRs2RK7hw4ejMQik6UeAm5bvv//+gQMH1q1b pxXgxo0b27Vrh+sW7yVYbBHT/PLLLy1atMCEBnfK9u3bET5y5Ejh1wxgsVF8Hpw7dw7LEdWqVWvd ujUuZlG8cJPihsI1P2TIENzLyF4gw16FcIO3atVK+o1PLHh+8803uGWCgoJ69uwp/goE3E3oxbRp 0xCFvowbN068m3KrF3IxefLkDz/8EHcZVlBnzJghpBTWSLHghokdasl2m2vFhaIgF4MHDwauO3fu COVY4dEc8o0hgQ76+flBW3HpCBTWr1//9ttv4y0YY/Puu+9inD7++ONVq1YVK1YM4iikwRGXKfQO JUyZMuWHH37YsGEDArUarmbgxmWHWqCq2dK89Vb639BZs2YNCsELI+oSEyxevBinK1aswJWEWsTw Xbt21apVC1kgxMiFBiMqOTl50KBBuHyRa9myZY8ePcJIIyOiYJcuXcJzaOHChRBr3Dk//fQTAmGf ffYZrh48wyA9Li4u6FFqairCaQUlwE1LEKtduzZ2a7/44ovHjx/jVGpbtmyBuONqx53Spk0bXGnC XAF6PX369EmTJm3evBm6jAR4icEsB9cwsv/7779YcoSDfSBoN7QP06zx48fPmjVLuOyvXLkyZswY LEXiNunfv/+2bduQWHf766+/UDUeFWjVsGHDcLMLxaIE3HG461E7QiAFQ4cOFRqMKLxMYyq2e/du VHr06NGvvvoKgXkb7tYSJUrgLhs1ahQeAFAPMT0mf3hEoSjcrahUCM8NF2Jx/0Lu0SoUiFPrNHPI t7OzM1YnlUollMvBIbNGPPnxzMfDDWKdlJSEWXaTJk3wbEf47du3Hz58KPDCpdagQQOU0KVLF0j/ 8uXLhfCcR6QRa4EjTYAZBC4FPMYx68elCW1t3ry5mADXKKLwxB48ePCZM2fEcDz8cakFBgbiiNqF vwmA2+Dq1avff/89biFkmTdvHlqLB7iQq2jRoojCVYgpBkwoDRKPZkPBGzVqVKVKFVyF165dE98w hIw86kgAT0H73LTMxmfixImOjo5ffvlltnBcfpg2YtnQ398fGo21REgn0kCsixQpgmuyQoUKmC19 8sknuEecnJxw1yAWR5QGB5MSTIBwSyI7XiUhuKtXr0b40qVLkXHq1Km4tiFqmLIgUHfD7Aev2riP cAPiLkN23IPIfv/+fZQPVW3bti1uDcg6jrinEAXz9fUdOHAg2gZZEKZ6T58+RXgehvcDNB6FvPrq q6VKlTp9+rSYWJjj455FA4QbE1G54UIUmoQnGW5/UMKpdVqmmJq/ccLlgno9PDxwxKQbR5i7uzuO mGThmM0wihC+bIG6nOLJgUH93//+hznLjz/+iBp79uwpZvTy8hJ8VI0HiTgvxgqjEI4jFkOEqvFq idcIXFgIhBUvXhzXyoULF+DDkAVXGxxYoUKF4uPj4YSFhaWlpWEehEsfhqcUAm/duoUjraAEpO/d EBdoUEFLMHl6s1RQuHBhSPCff/4pnWBiXonVP8w6cZkJhlPhSsMFj+scC5WYm2MZBGKKiW3OluLy xsRCyIsjpixCdkxZMF/BfSRkKZCi4Z7C5B3TJiEvjpjHoNi4uDi8KGNqhfkZAgXDRAr3i+BLj7j3 cWNiqiQNzOmjj2IgbmfhBhRCxCiEo0koLQ9cyCLeyPCt1iwm33oQwcKFHrmELJjU//fff5iVnD17 FtMHXOJCuI5H6C+uMyTGoGaTDEThakBU3ob5Cybpgu3cubNdu3Z5p2dsTgK420+dOiWGYxVL9O3Q wewYs2lMXcXLD5co3m4nTJggXGY44mURqxaA4+PjA9XG8h3mSVgUxjL0vXv3EJ7TEIWMgiELVhuE NHh1FpyCHtEk3DIwMSNuGfi4nXE3wckWJXYHUaIhMXx0EEdjGUpD27TiMlYVpi7HTPItPrcL2h9h pIVc2IJ44YUXBL9AR6ymff3113jqYtkO73F4EcMx3xKkbwB4CxOqxtYHFr7FSx8v8liWwRJQHqXh BRaxmG7g9VMwzNkxe0IgrUAEpFNvzObEd6ACFWJLibGagfUHzJGFTkENcYFhnQRHwXClCUu3QPfP P/9gbgu1wgIUFvSwDC3kkh4rV66MZyTeL4XsEH0sQSABpuqYmMMRDMInOLocMVXHLYDFazExNp9K ly6NlUZUBwGVRsHHLSaklNYSGhqK9/WyZcsKUUY55oHLKOWboRAzyTeGKioq6uTJkzk3W/LuJDZJ cJ1BMbEqt2PHDqyF5Z1eayzem3D5YmUN74B4ncT7Jq4nrSmlgbjcFy1ahPTYsscVjyUzxGI7COt3 2MbB8hkuaGzJYjrTuXNnROVmJUuWxGv+559/jl0jiPgff/yBd1hxcT+3XBYNt8bK8TTFPpLYMqyD ib7dOniAYSEbWiwSwJW5du3aBQsWXL9+HZtvmEpjBx6xmHB88MEH8LH+gAsbqwrCLYCrF7EIF75A hXVzJMCmJS57XN5YQZ45cyYS4OLHDAb3IFY88P4qTskRlc0SEhJQtWioFwkwYcJlj8cMwrHYvWTJ EmwtYkqHpwtKxo2JBuDexLYQCkcbkAUGxcC+FO593PjYZe3duzcWJxFuRMsNlxGrMGlRZpJvrFdg iopb7uDBgwXqD9bFMHjdu3fHhga0EqsfBcouJPb09MQOO3bVobNQUkzDsWUhROVx7NGjB+b7WDTE pYOdVbQBiTFZgKZ7e3vjQYLuYBkd1yWWuRGVh2GZEuVgrgT1xzYmdlFw4eaRnlE5CeAJCgUXwvE8 xhUl+HZ+HDp0KNaFRQi4QbBJvmrVKqzOvf/++0OGDGnRogVicQHjcsVKS+vWrefMmYMLUgjHFmWv Xr2++OILXNVIVr58eazy4U7B1Y68OEVGhGP2jVsGUbgfcRlj/oFArQYhRhWi4ZmBZGgMpi9QbTxO sG758ccfQ7URDkMju3XrNnny5E6dOmGKjfsUe6cIh2Hij5dv7B9C/UNCQpASgca13HAZtxbTlWZk +a5Tpw52PKQmPEtxv2GbBe9lwl136dIlPEuFXuEFDTsbDRs2FE5r1aqFU/EtCbOD7777DuOKFy7I N9JgFiAtX/Ax3UAULgthnx0+DFcSBh4ODJc4pgxoAN4AcAEJ5Werq0uXLqga72hIjxk3tjoh3JiD iFUjHIbZNMLRDKzD4qGCGRACYZhQ7N27F45guF5xFwk+1g1xHR8+fBjbMn///TeWLIVwHnUngPcn MTGewdIFUzHc5h3se+MShZiKPcV8Ai8luKrFEKwQYnMF02ds9mDLB5NcROGqxpwa83FcgYiVbhtg XREXOe4dJIPVq1cPE2TsxmMP88svvxRX+aC8u3fvRkrE4trGKywSZzNc8Gie1H7++WchDe531CvU DkUWAnHE0gpW53FroEaUjDUxBAqGIRbajEpnz56NqZIQLj1CHHBfCyG9TWxEAAAQAElEQVS4Z7Gs L/g4Ytr33nvvwcnjNkesVlzZikIy6zQjy/e6deuETQ/xiAe7cXseGBgoFi46GINstfDUlgjguYuH pdgjqfqIgXRIwN4IGFm+y5UrJ2x6iEe8ARmXqbDhIJYvOFgeMW4tLM2qCEin3iEhIeIbj1U1ko0h ATMTMLJ8G7f1cnmFMW6vWVo2AljyxvqAGIg1XNGnY6sEsi1FyrCb5miyVcu3OQCwDqsngF0TKLjQ TMy7sS0m+DySgJ0ToHzb+QUgg+5LV06wA4YdLRk0mk0kAdMToHybnjFrMIAANi3DwsLEAvr06SP6 dExNgOVbOQHKt5UPkL03Tzr15qalNV8N8fHxAQEBa9asybuRO3bsaNq0KRLnnYyxuhCgfOtCiWks QwBL3ty0tAx6k9VatWrV119/3T3jN9OZrBJ7KZjybS8jLcd+GmHTUo7dtuk2Y/N56NChwg8T2XRH zdE5yrc5KLMO/QhIV064aakfQ0vlyu2PUuF1CmssQqteeeWVyZO1/H0cIZbHfAlQvvNFxASWIXDi xAlx01KlUnHT0jLDoFetyXn+USppkVgrL5HL38eRJqOvlQDlWysWqwq008ZIp94tW7bES7edgpBh t7dv33419z9KJe0QRvadd96pUqXKqzn+Po40GX2tBCjfWrEw0MIEsGm5ZcsWsRG9evUSfTrWT+Dc uXN+fn7iE7d41j9KJW2/l5eXeIr9TH4jRaShi0P51oUS05ibADctzU284PUlJCRERESIf1RBcLDM hZKcM/68LRzR0tLStP4ZHTEBHT0ImEm+9WgZs9gzAenKCTctrfNKOHnyZPPmzbFIIjTvxo0bcIRf xRwUFHTz5k3hbzUgUJc/SoVktIISoHwXlBjTm5wANy1NjtgYFdSsWdPHx2fKlCkYr2PHjn300UcB AQE1atRA2W3atCnoH6VCLlpBCVC+C0qM6U1OQDr1xtaWuIRq8opZQUEIYKl68eLFLi4u2HUcOXIk pHzJkiVYNkEZDg4OixYtKugfpUJGk5ltFkz5ts1xlW+v8KIt3bTkr4e15qGsXLkyFByz7+PHj8+b N69MmTJia3P7o1Tdu3e/cuWKkCzbb4TesWOH8PdxhFge8yVA+c4XEROYlcC6desSExOFKjHvxuqq 4PNIAiSQjQDlOxsQnlqYwBrJ7zzCpqWFW2NN1bMtJJCNAOU7GxCeWpIAXsP5k5aWHADWLSsClG9Z DZetN5ablrY+wuyfMQlQvo1Jk2XlQyDPaG5a5omHkSSQnQDlOzsRnluKADctLUWe9cqUAOVbpgNn g81etWqV2KuBAweKPh0SIAGtBCjfWrHkEcgokxA4dOhQeHi4ULRKperfv7/g80gCJJAbAcp3bmQY blYC0k3L9u3bS38RnVnbwcpIQD4EKN/yGSvbbSk2Lbdu3Sr2jz9pKaKgQwLZCUjOKd8SGHQtRACb lmq1Wqjc19e3YcOGgs8jCZBAHgQo33nAYZSZCHDT0kygWY1tEaB829Z4yrA33LSU4aAZ2GRmNw4B yrdxOLIUvQlw01JvdMxo5wQo33Z+AVi4+9y0tPAAsHo5E6B8y3n05N/2P/74Q9y0rFy5sow2LeXP nj2QPQHKt+yHUNYdWL58udj+vn37ij4dEiCBfAlQvvNFxASmIoBNy8jISKF0lUrVo0cPweeRBEhA FwKUb10o2WgaS3eLm5aWHgHWL28ClG95j598W89NS/mOHVtuJQQo31YyEHbXDG5a2t2Qs8PGJiB3 +TY2D5ZnLgLctDQXadZjswQo3zY7tNbcsT179oiblm5ubty0tObBYtuslgDl22qHxpYbJt207NCh A389rC0Ptm33zaK9o3xbFL9dVo5Ny127dold79Wrl+jTIQES0J0A5Vt3VkxpHALctDQOR5Zi9wQo 33Z/CZgdADctzY487woZK1cClG+5jpxM281NS5kOHJtthQQo31Y4KLbcJG5a2vLosm/mJUD5Ni9v +64tMjJSumlpxL9pad9c2Xs7JUD5ttOBt0i3V69eLf562MDAwFq1almkGayUBGyDAOXbNsZRBr2A cK9Zs0ZsaO/evUWfDgmQgB4EKN96QDNNFlsvdefOnVg8EXrJn7QUOPBIAoYQoHwbQo95C0Bg7dq1 Ymr+pKWIgg4J6E2A8q03OmYsAAHMu7lpWQBeTEoCOhAwrnzrUCGT2CUBblra5bCz06YlQPk2LV+W DgLZNi35fUEwoZGA4QQo34YzZAn5EMi2admzZ898MjCaBPQjYGe5KN92NuCW6K70Jy27d+/u5uZm iVawThKwNQKUb1sbUWvrDzYt9+7dK7aKKyciCjokYCAByreBAJk9HwLYtBRTBAYGVq1aVTylo40A w0hAVwKUb11JMZ0eBLhpqQc0ZiEBHQlQvnUExWT6EOCmpT7UmIcEdCNA+daNE1MVhICYlpuWIgo6 JGB0ApRvoyNlgZkEuGmZCYL/kYBpCFC+TcOVpSoUv/32m4ihRo0a3LQUadAhAaMQoHzngpHBhhHA puXKlSvFMvh9QREFHRIwFgHKt7FIspwsBLBpGR0dLQS5ubl16tRJ8HkkARIwFgHKt7FIspwsBLhp mQUHT0iggAR0SU751oUS0xSMADctC8aLqUlALwKUb72wMVOeBLhpmSceRpKAcQhQvo3DkaWIBLhp KaKwd4f9NzEByreJAdtf8Zs3bxY3Lb28vLhpaX+XAHtsJgKUbzOBtp9quGlpP2PNnlqWAOXbsvxt rfbw8PAjR46IverVq5foy9Nhq0nAeglQvq13bOTYMumP6vAnLeU4gmyzjAhQvmU0WNbeVGxarl+/ Xmwlf9JSREGHBExBgPJtCqrWVabZWsNNS7OhZkUkAAKUb0CgGYcANy2Nw5GlkIBuBCjfunFiqvwI ZNu07NevX345GE8CJGAQAZnIt0F9ZGZzEJBuWtavX79y5crmqJV1kIAdE6B82/HgG6/riYmJ3LQ0 Hk6WRAI6EaB864SJifImsGnTJulPWnbs2DHv9IwlAXkRsM7WUr6tc1xk1qq1a9eKLe7evbtKpRJP 6ZAACZiIAOXbRGDtqFhuWtrRYLOr1kSA8m1NoyHPtnDTUh7jxlbaHAHKt80NqXk7xE1L8/JmbSTw nADl+zkLenoQ4KalHtCYhQSMQoDybRSM9luI9Cct+/XrZ+JNS/vlzJ6TQE4ClO+cTBiiK4Hz58+f OnVKTD1o0CDRp0MCJGBqApRvUxO25fKl3xesX7++r6+vLfeWfSMBKyNA+Tb3gNhMfdy0tJmhZEdk SoDyLdOBs3yzuWlp+TFgC+ybAOXbvsffgN5z09IAeMxKAkYgoJd8G6FeFiFvAty0lPf4sfU2QYDy bRPDaPZOSKfeISEh3LQ0+wiwQhJQUL55ERSYADctC4yMGYxKgIUJBCjfAgceC0Dgzz//hIILGby8 vFq3bi34PJIACZiTgM3Kd7I67eiNx0euPxLtv0v3N56JEk8FZ23obcERj6duPzHnAMixLunKCX/S Uo4jyDbbBgGble9vdlxacPDm6rP3RJt34ObMnZdXnbkntc+2XhATCM7UzWEHrj60jdE1RS+waRkW FiaWzJ+0FFEUzGFqEjCYgM3Kd2TM04bVyjQKLiuav0/Rst6FG1cvKzVXJ0cxgeBUqVAi6slTg8Ha bAHSqTc3LW12mNkxORCwWfnWaLTg12gNzZpQqVGo07RlzprMPs+w5M2/aWmfQ89eWyEBm5VvK2Rt A02Sblr6+vpy09IGxpRdkC8Byrd8x84CLZeunPTu3Zu/HtYCY8AqSeAZAcr3MxL8Pz8CJ06cEDct Idx9+vTJLwfjSYAETEjAZuVbk5p460Hc1TtPRLsfkxibkCSeCk5aWprgiMcHMU/TUuJMiFy2RUun 3i1btuRPWsp2JNlwGyFgs/Jd6um5k6FH9u4/IFrEtQtxj++Kp4Ljqonfu3+/4AvHO9fOOMeE28jw Gq8b2LTcsmWLWF6vXr1Enw4JkIBFCNisfPcuHf5Tz+Slr3iItrjr459CToqngvPji1t/GeQq+MJx TrMrjXzUFhkMa66Um5bWPDpsm2wJGNRwm5VvTVqaQWCYOSsB6coJNy2zsuEZCViGgG3K99WrVx8+ emQZorZYKzctbXFU2SfZE5ClfKckPDy9bvTJla8+t1XDH984hNFISUnZt29fTExMiRIlcEozCgHp 1JublkZBakuFsC+WIiBL+Y6+faJQKZ8XXuojWpmGbe6e++vGjRvbtm2rUqVKzZo1LQXU9uqNjo6W bloOGDDA9vrIHpGAHAnIUr7jYp5oNClS3EoH5b27EXfu3OncubO3t7cQFRNx8WH4UdFw+vRRlHgq OCkJTx5fCRV84ZgUw99XJfDLPK5bty4xMVE48fX1bd68ueDzSAIkYFkC8pPv1NTUixcvKnNgK+Th 8fDhw4iICDHGpXAxt6I+orkULu7o5iGeCo6Do4uLZynBF46OLq5iCXRAYM2aNTgKhk1LwbG1I/tD AjIkID/5Dg0N9a9ULSkmJv7uNdHi7t7y8CzVsWNHTMCRQBgIF09vd++yorl4lnB0KyyeCo7K2dW9 RBnBF44ql0JCdqMfA2T48ff3509aGv1KYIEkYBQC1ijfkU+eDlt2vP/iI6INWHIk9FY0Ogx1VqvV lWp3KOxdKyXGUTRlimf5BiOQoG7dusWLF8cKOJLhlGY4Ac2zX9PYrFkzLJ4YXiBLIAESMAoBa5Tv fVcelCrp2bdVVdFCalX481QkOnz8+PE6deooVc5+dQeXbzhCYq+7evoiAax8+fIhISFPoqPh25OZ pK/KjA+K7tKly/Dhw+HQSIAErISANcq3Wq1xcszWMOXTZPWZM2eqVKni7OycLzt3d/dixYvnm4wJ dCfQtm3bRo0a6Z6eKUmABExNIJtKmro6ncp/Enli7/Hzi//cKdr6HQfj75y5d+9exYoVdSoiI1Fa SpI6OfG5pSSlpaU+P82IUmjU2UI06tSM3MY/XJHzB/sKxifCEkmABAwgYF3yLXSk2wspv7Q4vXyo s2hLez4eUHiXj4+PkEDH46Nrp+6e3i1a9LXTifduiqeCkxwXfe/cPsEXjk+j7+lYPpORAAmQgAUJ WKN8a8XhXcL76tWrKSlZvu6tNaUYWKJyfd+6HUQrXrleodL+4qngOBcu7lOrjeALR7fimWvoYjl0 SIAESMAKCVilfCtzfqtboVAqa9euja1LhW4fdSp/a6BupJiKBEggk4DM/rNG+XbxKBl9M+zu6V2i 3b9w2NWzjPCttaioqHwZnzt3LiY2Jt9kTEACJEAC8iVgjfJd7IWm/k0mlKrUTzS/mq8LX+vGBDw0 NDTjV1a9ceKPwaKdXDlU+JVVMTEx27dvd3R0LFq0qHxHhS0nARIggXwJWKN8o9FFfKp7lq3z3MrU Ujo4ItzZ2blKlSqnD/5VqKSPf5sBopVp1OHOuXVhYWFHjx5t1KgR0iAxjQTsvE5lYgAACB1JREFU kAC7bD8ErFS+8xiAihUrxkQ/1miyLG0rHZR379yOjY1t3bq1h4eHkD0u6srjq6dEi428+jT6rngq OCkJsdHXzwq+cEyOeyxk55EESIAErJmA/OQbNAMDg7CTCUdqWC2Ji4sLD3/+ZyodXdyd3DxEc3R1 c3B0Fk8FR+WocpSkQaBSlT7Nl5ZMnwRIgASskIAs5dvdyycu8sadU/+Ke5v3zh3xKFahZcuWycnJ +/fvF0C7FvPx8AkQza2Yj7NHUfFUcByc3T1KVRB84ejkVljIzqPFCLBiEiABHQjIUr49y9Sq0PAt V/fKLm4VBSterpV/0zHob3BwMFZX1q9fX6BviCMjjQRIgATkRUCW8g3EXn51yzd8XfyVVaWCOilV zgiHlSpVqlu3bgnxCfBpJEACJGCrBOQq33mPh1Kp9PTyzDuNiWNZPAmQAAmYloBtyjeYQcFhcPQw pdJmsehBg1lIgASsk4DN6pRr4TKRx3feO3NItJhbV5NjY8RTwVEqHB9cOCb46cfTB++HHXUtwl97 Yp2XK1tFAiTwnEBe8v08lQy98o1GVGjwVsmKXUUrHdjbt9oA8VRwyrw4pGTFbiXFZJW6BbX7wqtc PRn2mE0mARKwLwI2K98OKpfnP7Qp/QHO/PzCpavZ1yXA3pIACciTgM3KtzyHg60mARIQCdDJhwDl Ox9AjCYBEiAB6yRA+bbOcWGrSIAESCAfApTvfAAxmgQMIcC8JGA6ApRv07FlySRAAiRgQgKUbxPC ZdEkQAIkYDoClG/TsbWVktkPEiABqyRA+bbKYWGjSIAESCA/ApTv/AgxngRIgASskoCdyLdVsmej SIAESMAAApRvA+AxKwmQAAlYjgDl23LsWTMJkICdEDBNNynfpuHKUkmABEjAxAQo3yYGzOJJgARI wDQEKN+m4cpSScDWCLA/VkdAZvJ99+7dhg0bHj16NCfI+fPnN27cOGc4Q0iABEjAJgnITL6LFSs2 cuRIf39/mxwMdooESIAEdCcgM/l2cnIaNmxY8eLFde8hU5KASIAOCdgSAZnJd1RUVEBAwKFDh4Qx 2Lp1a8uWLatXrz5kyJCbN28KgXfu3KlZs+bs2bOF04kTJ2JRJTY2VjjNedy/f3/37t2rVasWEhIy b948jUaDNFiKadeu3bRp05A3ODh43LhxeZSA9DQSIAESMDMBmcm3lM6VK1fGjBkDzV2xYkX//v23 bdsmxJYuXXry5MkLFiy4fv36sWPH1q5d+/nnnxcuXFiIzXa8f//+66+/3qxZs02bNkHo586di9KE NJcvX8ajYvfu3QjBavtXX30lhPNIAiRAAtZAQMbyvXTp0goVKkydOhWz444dO77yyisiUKh53bp1 P/nkk48//rhr166tWrUSo7I5N27cSEpKwkQbRXXp0mXOnDlwhDS+vr4DBw50dnbG7P7tt9/GY+Dp 06dClCWPrJsESIAEMgjIWL6vXr1au3ZtpVKZ0REFlsUFRzhisnz8+PGHDx9OmTJFCNF6rFWrVtu2 bfv27fvmm2/+/vvvEH2sluRMCQVPTU29fft2ziiGkAAJkIBFCMhYvsHLxcUFR62WkJAAwU1OTsbk WmsCIVClUv3444+YWdeoUeOvv/5q3rz5gQMHhCjpEeXgVFgWh0MjARIgAYsTsIh8G6fXWJg+d+6c WJZUW9Vq9aRJkzp06IANyY8++khMk9PZt2/fwoULAwMDR44cuXLlSkznFy9eLCSTFhgaGuro6Fi2 bFkhikcSIAESsDgBGcv34MGDT58+DbWNi4s7e/YsNhhFmj///DOWVj744INp06ZBoNetWydGZXMw +/7666+XLFkSERGB/UlsV1aqVElIExUVNWvWrJs3b+7YsQNbmr1793Z1dRWieCQBEiABixOQsXxj 9v39999jA7NBgwbYwGzWrJlAE8I9e/bsd99919vbG2mGDx8OEb9//74Qm+3YqFGjb775BvPul156 acyYMW3atBk3bpyQplSpUmlpaS+//DL2LUNCQt5//30hnEcSIAF5E7CV1lupfGNaHZzjs2DBAh8f nytXrjRs2FDg3759+927d2MJZfXq1Z9//rmwbO3v73/hwoWhQ4cKaSZMmHDixAlMpXOUF4wCkaZb t25bt24NCws7dOjQJ598Iq6nY2I+fvz4/fv3o3w8Dzw8PJCYRgIkQAJWQsBK5RuL0RtzfPr37683 NaMXqHdLmJEESIAEjELASuXb2dm5Qo6Pp6en3n02eoF6t4QZScAYBFgGCSisVL4tPjKjRo3au3ev xZvBBpAACZBAbgQo37mRYTgJkAAJWDUByrdVD49tN469IwESMIQA5dsQesxLAiRAAhYjQPm2GHpW TAIkQAKGEKB8G0JPoWBuEiABErAQAcq3hcCzWhIgARIwjADl2zB+zE0CJEACFiLgoFBYqGZWSwIk QAIkYAABzr4NgMesJEACJGA5ApRvy7FnzSRAAgqFghD0JUD51pcc85EACZCARQlQvi2Kn5WTAAmQ gL4EKN/6kmM+EnhOgB4JWIAA5dsC0FklCZAACRhOgPJtOEOWQAIkQAIWIED5tgB066ySrSIBEpAX Acq3vMaLrSUBEiCBTAKU70wQ/I8ESIAE5EXAtuRbXuzZWhIgARIwgADl2wB4zEoCJEACliNA+bYc e9ZMAiRgWwTM3BvKt5mBszoSIAESMA4ByrdxOLIUEiABEjAzAcq3mYGzOhKwbgJsnXwIUL7lM1Zs KQmQAAlICFC+JTDokgAJkIB8CPwfAAD//3mWP08AAAAGSURBVAMAVN5qzpbUhzsAAAAASUVORK5C YII= --00000000000050c801064a1bb4fb--