egenix-mx-base-3.2.7/0000755000175000017500000000000012251446113014207 5ustar lemburglemburgegenix-mx-base-3.2.7/PKG-INFO0000644000175000017500000001243412251446113015310 0ustar lemburglemburgMetadata-Version: 1.0 Name: egenix-mx-base Version: 3.2.7 Summary: eGenix mx Base Distribution for Python - mxDateTime, mxTextTools, mxProxy, mxTools, mxBeeBase, mxStack, mxQueue, mxURL, mxUID Home-page: http://www.egenix.com/products/python/mxBase/ Author: eGenix.com Software GmbH Author-email: info@egenix.com License: eGenix.com Public License 1.1.0; Copyright (c) 1997-2000, Marc-Andre Lemburg, All Rights Reserved; Copyright (c) 2000-2013, eGenix.com Software GmbH, All Rights Reserved Download-URL: https://downloads.egenix.com/python/download_url/egenix-mx-base/3.2.7/ Description: The eGenix mx Extension Series are a collection of Python extensions written in ANSI C and Python which provide a large spectrum of useful additions to everyday Python programming. The Base Distribution includes the Open Source subpackages of the series and is needed by all other add-on packages of the series: mxDateTime - Date/Time Library for Python mxDateTime implements three new object types, DateTime, DateTimeDelta and RelativeDateTime and many tools based on these for doing easy conversion between and parsing of various date/time formats. mxTextTools - Fast Text Parsing and Processing Tools for Python mxTextTools provides several useful functions and types that implement high-performance text parsing, processing and search algorithms. mxProxy - Object Access Control for Python mxProxy implements a new proxy type to provide low-level object access control, weak referencing and a cleanup protocol. It's ideal for use in restricted execution environments. mxBeeBase - On-disk B+Tree Based Database Kit for Python mxBeeBase is a high performance construction kit for disk based indexed databases. It offers components which you can plug together to easily build your own custom mid-sized databases. mxURL - Flexible URL Data-Type for Python mxURL provides a new datatype for storing and manipulating URL values as well as a few helpers related to URL building, encoding and decoding. mxUID - Fast Universal Identifiers for Python mxUID implements a fast mechanism for generating universal identification strings (UIDs). mxStack - Fast and Memory-Efficient Stack Type for Python mxStack implements a fast and memory efficient stack object type. mxQueue - Fast and Memory-Efficient Queue Type for Python mxQueue implements a fast and memory efficient queue object type. mxTools - Fast Everyday Helpers for Python mxTools provides a collection of handy functions and objects for every day Python programming. It includes many functions that you've often missed in Python. This software is brought to you by eGenix.com and distributed under the eGenix.com Public License 1.1.0. Platform: Windows Platform: Linux Platform: FreeBSD Platform: Solaris Platform: Mac OS X Platform: AIX Classifier: Development Status :: 5 - Production/Stable Classifier: Development Status :: 6 - Mature Classifier: Environment :: Console Classifier: Environment :: No Input/Output (Daemon) Classifier: Intended Audience :: Developers Classifier: License :: Freely Distributable Classifier: License :: OSI Approved :: Python License (CNRI Python License) Classifier: License :: Other/Proprietary License Classifier: Natural Language :: English Classifier: Operating System :: BeOS Classifier: Operating System :: MacOS Classifier: Operating System :: Microsoft :: Windows Classifier: Operating System :: OS Independent Classifier: Operating System :: OS/2 Classifier: Operating System :: Other OS Classifier: Operating System :: POSIX Classifier: Operating System :: Unix Classifier: Programming Language :: C Classifier: Programming Language :: Python Classifier: Programming Language :: Python :: 2 Classifier: Programming Language :: Python :: 2.4 Classifier: Programming Language :: Python :: 2.5 Classifier: Programming Language :: Python :: 2.6 Classifier: Programming Language :: Python :: 2.7 Classifier: Topic :: Communications Classifier: Topic :: Database Classifier: Topic :: Documentation Classifier: Topic :: Internet Classifier: Topic :: Internet :: WWW/HTTP Classifier: Topic :: Internet :: WWW/HTTP :: Dynamic Content Classifier: Topic :: Internet :: WWW/HTTP :: Dynamic Content :: CGI Tools/Libraries Classifier: Topic :: Internet :: WWW/HTTP :: Site Management :: Link Checking Classifier: Topic :: Scientific/Engineering Classifier: Topic :: Scientific/Engineering :: Interface Engine/Protocol Translator Classifier: Topic :: Software Development Classifier: Topic :: Software Development :: Libraries Classifier: Topic :: Software Development :: Libraries :: Application Frameworks Classifier: Topic :: Software Development :: Libraries :: Python Modules Classifier: Topic :: Text Processing Classifier: Topic :: Text Processing :: Filters Classifier: Topic :: Text Processing :: Markup Classifier: Topic :: Utilities egenix-mx-base-3.2.7/mx/0000755000175000017500000000000012251446113014633 5ustar lemburglemburgegenix-mx-base-3.2.7/mx/BeeBase/0000755000175000017500000000000012251446113016121 5ustar lemburglemburgegenix-mx-base-3.2.7/mx/BeeBase/Doc/0000755000175000017500000000000012251446113016626 5ustar lemburglemburgegenix-mx-base-3.2.7/mx/BeeBase/Doc/mxBeeBase.pdf0000664000175000017500000205474412133273272021201 0ustar lemburglemburg%PDF-1.4 % 1067 0 obj << /Linearized 1 /O 1071 /H [ 1532 742 ] /L 547300 /E 279068 /N 28 /T 525840 >> endobj xref 1067 24 0000000016 00000 n 0000000854 00000 n 0000001216 00000 n 0000001370 00000 n 0000002274 00000 n 0000002676 00000 n 0000002707 00000 n 0000003485 00000 n 0000003528 00000 n 0000003772 00000 n 0000004903 00000 n 0000004927 00000 n 0000005402 00000 n 0000005648 00000 n 0000005882 00000 n 0000006090 00000 n 0000021694 00000 n 0000033272 00000 n 0000036362 00000 n 0000036570 00000 n 0000036650 00000 n 0000039330 00000 n 0000001532 00000 n 0000002251 00000 n trailer << /Size 1091 /Info 1061 0 R /Encrypt 1069 0 R /Root 1068 0 R /Prev 525828 /ID[] >> startxref 0 %%EOF 1068 0 obj << /Type /Catalog /Pages 1064 0 R /Metadata 1062 0 R /Outlines 184 0 R /OpenAction [ 1071 0 R /XYZ null null null ] /PageMode /UseNone /PageLabels 1060 0 R /StructTreeRoot 1070 0 R /PieceInfo << /MarkedPDF << /LastModified (.V,gn-v[)>> >> /LastModified (.V,gn-v[) /MarkInfo << /Marked true /LetterspaceFlags 0 >> >> endobj 1069 0 obj << /Filter /Standard /R 3 /O (WЏ X_7!_ֵb{J.4@K@) /U ( yRȑ) /P -12 /V 2 /Length 128 >> endobj 1070 0 obj << /Type /StructTreeRoot /RoleMap 217 0 R /ClassMap 220 0 R /K [ 799 0 R 800 0 R 801 0 R ] /ParentTree 900 0 R /ParentTreeNextKey 34 >> endobj 1089 0 obj << /S 641 /T 768 /O 842 /L 858 /C 874 /Filter /FlateDecode /Length 1090 0 R >> stream E3CcOxO>{P~ SN,>[l?{'~'8}g{hY1ENh[Y㧇 ZMu>8v "|KCO\GS׮b:7jgJL0-B]:{sϚh7e4[8[_5CK@0S9J` oM[ҳfWj$ԝrIk!q]4'~Q ~!;$7AhO~ѷ,?\ĺ ?8I@H0x)cĻGYh'Wp8w"&֏`2*d@0:=㳊u*ȅ {7&fc i>/K syɨբobr2_|Q [eP =]MOQOO 6B΂>w~!;+;ϋ/λyʒ;?p" endstream endobj 1090 0 obj 602 endobj 1071 0 obj << /Type /Page /Parent 1063 0 R /Resources << /ColorSpace << /CS2 1074 0 R /CS3 1072 0 R >> /XObject << /Im1 1088 0 R >> /ExtGState << /GS2 1086 0 R /GS3 1085 0 R >> /Font << /TT3 1073 0 R /TT4 1078 0 R /TT5 1081 0 R >> /ProcSet [ /PDF /Text /ImageC ] >> /Contents 1076 0 R /Thumb 1000 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 0 >> endobj 1072 0 obj /DeviceGray endobj 1073 0 obj << /Type /Font /Subtype /TrueType /FirstChar 32 /LastChar 233 /Widths [ 274 329 278 0 0 0 714 144 329 329 0 833 274 329 274 281 549 549 549 549 549 549 549 549 549 549 326 326 0 833 0 0 0 604 587 669 764 502 491 734 759 282 282 602 461 905 741 821 539 821 574 512 530 743 625 958 541 519 606 329 281 329 0 0 0 474 556 472 556 498 291 503 556 250 250 500 250 854 552 552 556 556 356 434 311 552 479 766 463 486 475 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 274 0 0 0 500 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 833 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 498 ] /Encoding /WinAnsiEncoding /BaseFont /MHADGK+ZapfHumanist601BT-Demi /FontDescriptor 1075 0 R >> endobj 1074 0 obj [ /ICCBased 1087 0 R ] endobj 1075 0 obj << /Type /FontDescriptor /Ascent 962 /CapHeight 687 /Descent -272 /Flags 32 /FontBBox [ -167 -273 1106 963 ] /FontName /MHADGK+ZapfHumanist601BT-Demi /ItalicAngle 0 /StemV 94.019 /XHeight 0 /FontFile2 1082 0 R >> endobj 1076 0 obj << /Filter /FlateDecode /Length 1077 0 R >> stream e~oGQ(U@*ի<[Ftׁ:z+a쵾}O$+LI=KYub{.Om2+(+3p(kѤI_EC܀m/:һ3 ?%]aZ@blE3vWaL#K1*EJ<5 I׆?ja^3]sԼȓΙ%I!X 4,rasL.{ O^ 1%5[<\m0"fRDhQ:tnBYhm@4 *boXקkw/S!ͻgF EV(ϻS4 ץ3vߋ2m6Q)k)X}ilR;E*Ho@0e%-GvCؼ 30uԉ#*Ig2hQ2_l$ DbWhFq7{[+k0JW@ɘ Y `z (Ix-ѧ`IJ Ĭݨwgjb@0XUOU,߃ (}ӻ2)>bR̳;,$ BS`})75h꘾Ƒ9J\ í˵@] uc%tഹ` B"ZWek8xSlxM)B/{fGhq]wsmćH FsuHVt>7czpHL؅>A d-0`,Y*m mO7w8-i˰uEMM&'Lu0row ZXTjQ'iNotUhͬ endstream endobj 1077 0 obj 1049 endobj 1078 0 obj << /Type /Font /Subtype /TrueType /FirstChar 32 /LastChar 121 /Widths [ 274 0 0 0 0 0 0 0 0 0 0 0 0 0 274 0 0 549 549 549 549 549 549 549 549 0 0 0 0 0 0 0 0 608 597 660 0 515 502 743 0 329 0 0 476 891 740 828 587 0 613 544 549 731 0 971 573 547 0 0 0 0 0 0 0 516 0 484 604 535 0 514 593 291 0 0 299 891 593 567 0 0 382 427 338 592 0 0 472 478 ] /Encoding /WinAnsiEncoding /BaseFont /MHADFG+ZapfHumanist601BT-Ultra /FontDescriptor 1079 0 R >> endobj 1079 0 obj << /Type /FontDescriptor /Ascent 961 /CapHeight 687 /Descent -284 /Flags 32 /FontBBox [ -167 -284 1186 962 ] /FontName /MHADFG+ZapfHumanist601BT-Ultra /ItalicAngle 0 /StemV 166.043 /XHeight 0 /FontFile2 1083 0 R >> endobj 1080 0 obj << /Type /FontDescriptor /Ascent 951 /CapHeight 0 /Descent -273 /Flags 96 /FontBBox [ -220 -274 1143 951 ] /FontName /MHADGI+ZapfHumanist601BT-UltraItalic /ItalicAngle -15 /StemV 0 /FontFile2 1084 0 R >> endobj 1081 0 obj << /Type /Font /Subtype /TrueType /FirstChar 32 /LastChar 32 /Widths [ 274 ] /Encoding /WinAnsiEncoding /BaseFont /MHADGI+ZapfHumanist601BT-UltraItalic /FontDescriptor 1080 0 R >> endobj 1082 0 obj << /Filter /FlateDecode /Length 15510 /Length1 22644 >> stream %c9jklxR=Y b *a59\c,5#JZ"91Ma]Db=x$VD6;.' E|vװv8U[c+# 措&2z `{3!qu [T.#M# Au8԰u8X֛&݆]ZD73JqN#q!|=tgmt%jҸ7.ߙ ,mN sSH1ՈXO6Էq{MΉW\/{ud)V,eSw0V.$\M):+,mͼ,+-ZVDkVr][?.Yj1֟v*\re\XfloQy~k!3|Z0}?[ Bnx3CrD#Ta2?]fk?*t`* H( ʮXG+YzqB|r=Uz'Wf, `TOGǘVWe=Xe4Y_rNl xvL9!xI Ā:Wѭ3:-۫Qv)dKg;TFunc85s=X(u!/i9 x~nWB(`#v&˔gۡwH5"ٰb~uAE9WY-%rߜ-QSŋ2z#yb*gZZzZ-a=B6q0UL$@ɹ@F\ "`w:*zAJob #8Jy-<Op8!-0 ; weӐdv ;YeD~bۚ@zBeWܜN%ְqqq2 _kl=Ke-KYNCn}Cf.EmYi&< 1lŵMҐV^ce+F }W4"5a ƔʊmnՉ[Bk - ks#c8x<&t?oq17;R(z$#o:E@Ec9 YGH_&o) 8{ƷdZUetN墣5RPD.n+.M_esHCufsf;Fqv DF4 >7H$8c Z4P&=g9$'&hH۪1򦎹b3x6Q[p#N2AB]'BP$-WڌO`+x|l `N P} U3A`8ga>5e\ "B:NAKRSָ6 jyExNmdЗ1YytZ;[ZhwkdK?eu&mnX) IR$|+/&<9 a4_K"!gHO6`k&!?~KPfoi`GQ1K3NNgA0s KSv x#׿l L-ȸs>4f*qѳ0a" T @ z+|ooĩ &ol:[Gu n\3vU}_ U_0ןh7k\Qh@ @o9ZmJ$,?FĚ۫]@;)Q(]D]JːyQU KO-'ۦy B `R++5鏖5ܯejb)$%õÀ[;Af @["DF0=$=zر@cXeyg++6({ɍe*e wF?NUPg8H4̉TvK\oaXӆ·)--V>֕\Ea9P)3%s7qJxh~>6FG1܉xU .=mE3&mPn+[;VT"f3fqS i-5erho`uɱ;c%JR,!˚cb&y,!u'[ͯl6zFTBW:')˴lȋ@^Jw =6n \O9t@bB#Ih@Cy@!!lCHCeFV ֶSߌQqO) WYm ~{̛[fWlh)p1-4Zln-fd֑Ւ):QUZC D(j2Ƶu .65)E!ޫX(=Mh,KA( /C EQ6h,Wml&*W]_}iO*1Cz8BvױԳ"/X6ŕ =; s+Mrnt|]i\#R̙1d|vv=*lrYu kcº ^~g:M䮞`a튪k)}+`sn-x*8 al-!k&!(@{N0(]IySK=rXCoFAUg=xY(2Xy,*vһCve t漹]Xw%N%16 AcR=4lP@3Ci~eH}(w(oI \W(y-80ש-XސsB(\wHMJ{@ . Wg7.![5(;wBuK Ըx;> isV /~YU2?BAXLB{CݎPZ4B , :gI wpSD =k1t4#&Q'Vh GWwLu2'ѿmd}·x9ڊprYC=GY'_Dp=(u׉ ɏ~>=:Ω^/.)I =TUmچzL,z[OVˀnYUC2Lڪk`@_ (gT+6T ^õsѪRGl s%{O=%>ʫB  T*B܆ӂm[hH<_k64<~Cd߈OIb>Xi^kD<" ͼc&v}f]4 f8 <<~q˩D, \v\#Δ^>@LK ǯ= p7vOjOqa7w΍ܔvOt)rFЎKz@Lq⥆S읲f+~%e .ۇ!@yaSq9BdvJ~X Ƈ$[0JB嚩ٙlpu%LP{"Iɗu g=IxJ?S b:pdyY-~NqɒRj˞ 1!# 27}OJ4^/ݗA?Kxy#d/2j[$7;i0 bU]Ek_^{B;$7J!YpO*0E֐$^Goq Ʃ~tNn^8u |~(-BOw6~/ gD bA៳2l#5fɅ cN0kW列0Îk)q^k|JC 9k!I܃mX\N\'8ec=ےR9CPc?lw*Ψ 5P÷rzY5v(\xPV].l.#ŠRY^/;!Aga8DrS!SX NjD(2gMO*芛Δ=&wW=c cG}穤y_ԧpm>[᱕F6tjNo]!(Ԗ\54/Nkdu:,Lwb2\~ Ɂ@t^|^!o KxHq C2sn}gUHz]?~7aăqM \k^MD7[eŒ}cUߞ}Gp ǍM2|H$Bh U@ꥸ4QM eSD XC]tl ^ŽG~!%hraƉqcFQue٥ 7ALHd@˲ܙs}+3=q[P(QZ`B#*wyM.zĩe78t7v|m;Ը _mFLA &/~!rU;IczϰIϱVZd1飝~~IƖT̄`Dm]eI=%ݬ`=g]'v47Sz7;*Y <5'AZ_mYkO ;fё%Rƴ&4Q+%xV0` \U]? _W!cHQUuX 5d [pa`} mp|+qHi47K՝) Yd b~uB{,]_L#o#r.$QcQ'Z(qR[-$y$s>Cs =7 67a5\% 9#KYhnHƯ=g]ShKJ'`kWf배 +&X{W>urU3I`ĂF0, Ț%ddZS4K NFӦ ӭE @ G``izڱwCh^^Z|MLcgB|z׳v(e||`"K w{ Mڮd,pet&d\nܺ/7_Txd9Hu>j3=ĕ$Re{h {ogVĦ:Dڦթed:2(/nb)rc*}㤞U4R\N?W Pc}b>hZVQ>{qetPwsDW0al]|k^1yY:ީzD@2ex06ڲPfB{b#t*4u2 tX $戦{^<+嬎A*TL.?irUǝ?as Fvpg\S,̚s䈁ʳ{\Xt}yqf`^+on<)]`^%y, \;rnt}_/i1,!v7C@vޔЗ*2Y@<ġO_/H1ᦸ_[:3_ķIܼ䆋_E,5HxlT =b$Rޝ}ҭ&{IyT.ŝ ̿/ zKܺgw,w[hz)?>tD>{ L5J0uDOu9 1_&)099*:f B8 \J>URjy;hm,K#) Wf=U<p3D_RM u!*붟o8Abcv%pJQ&T6@*D';!a~q܏熜EQ bDD!]f*a<RNT.Jd%/4${P㜆6Tj1LΘVaZ| Eڧ}˖USO\_y1f] "B:rVd 6w9mZr kSX=:y`El @9QK!r?K=)DA$1#_L/3tKhW}>kLP(bO}X M檢藉y;gz-|>rYcˡ~/'ʛg⛈9.BRVpȁ+?$E1-d9~x|:>C| ߎp"i cHm&c/&a`HgST&C6>!Y+M(qD;Lj@8PB0`6~$U29ӹ m(uW9S[$Yo8ViHJ3CJrE3`}6OLZ?Q}Ç"hq"l+HA9*^u%ƕ[;R oYҫaaN7U>%`<"ZC[ӐK\=_HfRi)+rBfGj8`'_&BT:sel2NG_϶)3-ӡ6- H6wH8g yb]`넞[X%u*w`Xit{C&g{oX9c+RR3ӦOQmnbҍX}Q}$|^[L<}VK|6̇vg4"HW^߶9jwTt),?CVCVE P۽=@U[G`#~ GV;&-7j3F?-Z.ּ)rzыz51 7ŶRQ^!_"P@&9KOuV '22ȉ߶>FJ?K&GUlr7[J0ZuVD@:Ƶz w'wQcr4i8QG+wL;}3uHĻ04poc˞'{ЁK5ejJ׊Gƾryۗ,KgUAPᐆm0az ૏M0k4 E4C3{86-] 3}:G1:]Jl\a.jtM= Fe;Ow.:Y21KWKoփ;'#5Ù8)EBsҿC42\opIiG{7Ϛ,U,5IJoՔzBʛ4u8͸ ',E:|ӎؼ-882icGpNDxcsYsquyZ)ΓMvnN/gRrgg2㋆(dq6EdCn_a)p&ӖW?AuvLi :Kf=V8yZ #pB~D4UƯ<#҈9[FDQ3]Ap~pT[uX@/}qRƎgAbC@^H\%6mnvx`ty~rφ<Qv>UhIh2 kzP 'b,ӭkoz8*ذQTt4̀c֤eI,Ҋ 4DeڠG9k=W4c&USn/*4[a"%!h3*xNqR )_T})37R[HE˓!E,ōBH贳[<\CY{U]$X#ZĘekRn2r 1@[;.ߨBJT=6' a# PFU$E ]XӟUADKVSI44e;ϖ=ES!ǥZsYi ~'th#ڏyq~ٍB(; kh?]r1..PDEB th2M n4brA6PkϷjbg݄ʟlef} pݷqy);NQoC{mqB)ԐjT qsp֚kAq\qa ,2?hig*G0v 4-`8%dn|EfQj ڻ#62wH1'!DRm~Xmn1F\_%N֥:^ ӶKHFVjm/`z*栯sea5DnF,QS@w#ZE&grԣn drq2R`~|LgIɈ5fJv*uZזtwd˲IMu[!͕и1/Uw>*ozdcdɲ8y5+c|:&ff*9uw5rR5ragF"f̻Hn`Y (7Tâޕ( G_ ̍u{Ujnq髃X&E,6#Q+1 QAmI[#2V-S6!&ܲJ?Oi0\*Ubv웱ԨNzdnh+.\{SץKHN[K%ҺDl[IcEl?1M^k8sȟߓ;D 7.Q=*fÎ~s5>#TgΰoACm "9kA\]%F4˵x)0~Ȍaa&ֽ^" 1k0%CNBAc܇ ȱ\31Ʃ=?V7uIoO&*DɅdpVeRK)/݃o #ʲ/Ɯ~]Av-/C ~d5L;ؐ{.3?[Zc>9hGFbkf</U!'0.c@ɨ"Ի'*uVyjc=`(z~uCS>I6WlM>W?q#e#tb-KVNq+ߑ8&0]i)kPZܫ9#Eu~K@,A@.hQYaqU8sVS+f 2 JҀ>v+!c] y[mNZJQ|(n[~"p i@I 55ߠ#X(K]{Y*j뽎ykr8-o"6ձFz(d]I I;mURmdIQʷ7М%Jn.\݂J8-'ܺ.kh͋5.(巁43tD{l: (<<8vAKV{b. 4jbq[ "[e4V,`}w\ᦜrʭ3CjYB>)w Use-2E`ľ?3o vPXWE,4U@z!'Ij{9 \M0Uā/(M 맠ɡnKҕ<;Ie#) F,ꟷֿiP"fݶH 5"[2mzӿ[fDv#H#Y}/Y)s3Q3bc=Lpde|L*VybyJf$|GQǚ*##قd{# s}$i% Ͱ|<,Q(aUAp/6$8~YAoO7^`G Jܦã;B(p'n{R4ɆPA߳ƈ"nGf]@6Gc%z%؆%fd (Ȋlu0pk|PQ- ]!8D]T ^'"]"r%|[ 9Z'ۂ`>=ߕvҽ(ck6[Ra" su6Z=H<d[c =Zq=-fg;cfVkVThsp -7,T.e 80Ɖù)P=_.e*:EfڥCӨ7[Ym+s}-GGr'9k2mOMy ȷ p4k2 fK|A#7P_f[9_ џEaУXDɐ#e57bX_٫&bυU\Sh0L&6*6N Xp1J)x3yℍyowS9=ͥD?t _Tc6t({פD^N᪬)Q>V$B;lgys &v<9IHVaYgo6Ӥ9ϿN8ү CȅXVU"8vLoZ7@(CyL5:sh˨ x)d^Pt8ISp,VQ:H#@nj1"\VE2}EكU qe|K=ͬUGڂ^XAwVEh3L/W*%q僂~ͤ ^]x= Hqf&0|u0%馆m޿ᰯ+.+* 34Z ‡§#}f/xr1QlygE] jsQI,G0=`[7+F3~~]+z"Ʈy uu8 r*Qa9f.3K9q(%ZG#6:|n 'WEl 36J'x\vCvձqz+(| P㩍"maK GG7%SV^ 7R0$NUjxbtCDpFn)C.'׭Dh~gD:JؗFs\DؤSeWֽ'1%tEؠ~aS=uiFulHOtJ&8'EVބ# #ggCvt=>Kz{8UQ(XMT4n4zv.Jj_LLNZ? ɚݐrwyiz븆B f5r0PIZitqϝ>:ikR-2j O#-2ek;%)FLJot_zZ ?/ %]h9 s:\i[> stream &\ )cd.|`͛F58ڨ"CR hi7,ʮ^j/e6wf{y`=f)lCQ4BʈG]YCc~A WCIF ,,YpRMapD{FKXK_+uc2ci.`~0O1)xY5G^?%:^ʺ25\Y̨wLB2P~SND 9!u͊y mme|҆(M/Eb]56IS=²X_HcK'{Bƨ`lP>c<̚L4WM[W(QF#ي o|2oLHs#VIaZXkqϊkKT?:f)ՑkGdt+vƱl[VT{7,BSo qb[IDϬ4,*_2Y /mDҘ- 1xCk#tT[ 5*& k^0 g4={AJA^xcVPtCau}<&D#q<_ s8 1(݁fD0F^04&TԁQ apMYΦ 駗0+P8 Fbv~8p;}v'|tzc ?2጖8 F Z2_>EUPA[Ue1`Di7@ rp " CyĸA{B/"JwP1^/~.HuUɴ+w)DN <_i-ZW{ uy`h=J[tIbkd֑[ E\+'VJvDB\.7.DY8q ٦7>̟=4$,iZwx';W򉿡`&E] ,D)%䪭G)wUq^}@}:k #vݣ{B@Dr^l 0'N@X#1J{/wOYK$]|N/92irCܣT"{eJ5өu1z&fhڌ LӤtkSRGRqe3[}1̜5L !7D8%F"y Y[|1Kr%~WT?IrA <-m4lȋ Zh-NYfUuq #͈9,;/ЌF9w#XOT0XT!hbȕۖV Ȅ 8VvvzDŽˤÕE'l5KMU\C>`4돳d?4nv&FQs&ryi>w/Ğ@:um˃>W)L>}bfl|hOߔplApU/j>{rƥ1Oym?>E: -#͑2,dV߂ӿcjBՙ+1ܶ2ؿl%'7aYJA(;ҟÒ&1{LhKN2_ʆL]UR$8!Jo0e>|=/1= f.0="W7DKKاAspu_]qG\|!|y;y GuR9 uw]G6j/xGSuFJ8z->$+8ndT0>ٟufVm"\e6%)Hx:Z WT:[wn{cz=; {. UH;~ j@K~`2םH$^j31 b@t)df+ ė)uyRSOo4q$ТxjԙHRgkqh>^1~0|Kț:N_aՐW xNMkkZ+{y&U6+[Ix.c2\WP%u]t՜ZxAOTHhA85ql#أ#/tGMiy"VvXuzb2+ÛHRMƉU9/Cvлw֥芉ë1TUgKuJ FrA$ك 0iw뒕-o+t8XZQg J2dkWX'umr~vbSBnd|\yq7'^1L}okPqWeKL0j;JϹxߋcKB{ШXDNµq2TL4whiP# -,$]e.WzTřP!ɦb>C*$#gNHq:P )ZZ1b")ZgK|D"&):1a (&z$0:,^co)d&GpI$q}70jMq9 k̈́% [I0IoZ` -gΚ@@Z,}yXР.An6[t0ϗ84] @*eؠt{-R[߲L ^z gdk+Dι`W,ZbgFQAmcע>dƳ0tF8O4jnI=k BP+x]u%vK-+ŻL?f70IBc1i.N{Q舃-U4C(DX-RL{:QA U~]\ iOo>~m`PpKix” &+ʰ|O~@M-V1ّDZUiѥ!cBcRFI3 jXxm'B+8ۺgt=!Ϭ* ~K= %h}K0ݞژf0z`W>6CGʤL Abro`?@Z&mY$lNPŠ}(ͅŧPicT 2TCߩ$ -ݓ<*ïVm*`si pm5ٙ?pG?A_HK9 w6ʆ*R/=ѩT JϛL+2i(Ui'C3X΀ <.n$ +IzB 0'(4:$n xc EGȹb9==}wx{LJ|RFt&/CCmλ"O|y!hf$Kqo~iY``4Qyԋۉ($lRsV1_MVȟ,U6,n_ؿ}zqntmrԄl)ڵ!B6^(9Rلz~_KC$߈*mJdQ'ɇ=X9ܶ']YυDb@LvkP`<*,-ز H™)T ԰H" Ūܒ6wO8Gp_P q/VeN|ržIQ$Y;ڋe t@I#'YYě?H9L褰)N;8@ڼ*`}ZM_ c੓^t=N\K?ל{,Zjg(ecX@ Q!jw#db7sSV@Dj*oCWk4ɶάq]KK%4Ev0 ^m_l"8CT' T:}9+3+]A.W$MXàE}| ]"If;".[UpMէ^Pi.gaA6z+,G4 ߜ1T]0 o~"ʻƺr]de9<Ҭ$A/"čtIs.ׁN3mTdmi"F"2ci#%҆uFv |DhFU:@D2H%6 E@𺨼0HQ^ ݇Ylg75'0l0l鄹y6lU]<ձDm:A$|NG7+$cy~d5HP+(rϰE0릡~9F r, 7 <}j&)k:{=nM3z\]y .o+{]-XJ4ɓ!g&Ì.Z=|cs2H@KZ|[# 8՜a1<0YR̶W,U~4#E5zlFaa.H쳊n V1uXnDMPh_hmfi(Wm˹H$\`X:mN^\ndv,.O$\݄,f@U&1N~gpJv^n+Dr⛾b6/J6(WY0 |7k'Y6(6 `|(ČGv~J@pip|d8U mҁIJ.:f̴#(80 V4WZ7oW:Z*LΓ-Ȃ_A`Lhf"J/b䏬v2# tg]GSσ~{2|m:fʊO,rW'[Z"9n*%;LaLl.r2~Mq-F5y#2C iْfYt"ӝ5 VPL EBvCNf:yެ^(ܓ2٘-Qzٲ\"sc4_+\yJh yHN9 j5RA3 K (XQUN{vCܜR.,\XqsB;)9 gs@[Um,hD Gε#nenY0ٕZ{vÕwT 0^|3Y]h -;s { 8f1vzі'_f,K0[ GՃdoBPNM&#@H@$V(.>oP菟8WktE :ZJY]0:x<6ECH?3JV:2Q;$8UOAڤݮOۧԙZM[JI%OUvm w# 7 8>Rx5J#5sx{_QVeʴ8)ޛPUp򹵓U`_B~vz8j`rbu5/|F^jLHt FȎH@8(lH٦.iFLy&~wBkCsō**|C)Þ#L0O^<깸P' Ÿg(2k-?^TR(.2~j_;u^W@q(/to&)A]AH01 C*nST\3>*m8/8B8#EjB[4VE:[ |h5y[*G ;=&vW;5S&^e.+0xNX<=K0b|n6#CsN$W" |*]_+) 3y`fPt c%sg4 dɇ~):L}ٜ~x/؅C6g#@H kW36N8HecL!9ߘmZ0J ̙NG,| zBrD5$ <0Dxڡ r*'˨q>'_! "oPl3&8* !ɔ~gfG]OR{6|aŹBlH~*cTFt`98SL6P^aWz)ZꁱY%*RWo dћ yx. `y^?u8$;T½\X,M{h +`P8oO7G£]t~r/zu :b@AD+ ̭mCf;f(2F`#'IhLD:WdO(3ʀgU B7x\?7ڼ]Oh։toF! u.K߭$Mb  Ʈ#Ow bg$Pg&Q6lrnDƀ-I~e*t[Y}sҊIdaocLohh&C\nCuվ,9IYA^FH9su_vI3ta?T4nb&p/涉V9_;'`c[JDZZ~(jrܑb7ZeN2"ܝ)K8!u^6/8K" jnXQ]O]^ރ{gң[^I6̶,׎߻_w4tSM(N{gO=$.1kC{YZ\LaӇhLI~i hFquؗ{;5ӄ!lD6t lɜ\ar%FX4\qbB†e(݄`F>b UGb`MJmj]'J]`~v.0/%4v:c/K7IECh-]q:J_+7C9ʭ1ӣi^v ܭ*.9g5E!^ꙕͭG[` ;Da!êrfz,OiO2qAi}}/:Zݴa\Gg1) ^&46O xYNIbuK_{/Ƙ "OmOED~}1v֛QS J^J?_YlouOaʄ[aPhbU>/`4^s((&~=6׃?񽣄lOr="ñ[T']\yl/jaMVhYJLiDxuk3E#j{ytpCUH 11S>cQYqxaO'@}a(5_bIXu])AǸAwbj"h%4JSUʤp>%3Jfڽ.~ZLUAGh;3m&@Qؘs'EB VfD>ʕ/ֳ]>f\HZHZVNaۢ۞,P,ݔˤ+aacUv'M9`":*Eȸ'A"J.qXȱ"+-~u~EC@6Äx&P0\ne;ql Ly#rtLkVɅ߄4Ք4d,v&+*^Q֚N])%b)80Tԅ D/Pʄ3畐> dL;\4kn*nk/~+2'/-1aϊ4!SV\/2iZ!L{W\G)sQsNUk r<&X7CCξd=̊hʈ嵢Y"QVRB81z4:DEr;|0pNlLF{ =<:2\H[}Mk:WLYDp.}bb tx*eo+o{A&sD%$3NuCdxطP 蟲f!d_e# QGp)kҦ(mj=@ jlsdX^F"gȯw@Kj,vӔ~DV> stream {]\k}U[V :}Ug+ H&ӊn?MzJfK/a\6=F-3$Ik 5ŷZjIFXKNr[~^(+ؼG{k9}#U"e4+0,~gwv}cc-/ڡsVܞ)Xdxvޫ;p[DqA&<]`vB랝E'=(Oni'h U͕Sl90/.rŽC0’ 4Iǚ_R﯆&HW꒭ٓ'0 =:iCR’v4It#_׶BnCE;LhOZx!9Is2Aݔ u)4RkKBM1C_MƚB"OgޠP *V+%j)zDhMq?F%9> 4u”--գzZ2m!u߁4O+2ۮ@YlVѼdT.i+U4D*s|p.x=`K012rv8dU=&ld&ê o6] -, l*Lbqd 'pK3z^oD nkPDM.W}wmLR.B2 YGnJїz; ߃@n7 !b<)+F[11Q# TBԭ! 2oZ[Be\ٰEHsW _~sA!?qkqYvh;|pt&YWm2CEkW ?4S9ݙrޭ`5Ư dem=@_ƛ~YX. ^Fl嬇!Y`XM\55"qV@4"N/+l^˶4, )'Yس0=íyrn G.Xjfg0H1~~dبh=B;XΥt3I^ R' {iה2h$ZwKx?8Cs%KpK=W\ C=~H%obH(Dq zzEZU٫yWSNS¨7W ^gL8?}%SX ߏS[TBs=_I!0yX\ύn&U툴];  ʽFF!z,&*Asgdrn@ɦRE*$ҕ0@s(@ݓE`R*٫byGNυAeI\BOUbwJ$|ɣFdRrw-¾ܾICֹaklQg'ԛZ1)t̀h4/7 Ep6xl |aUvU?#h;t\&jJZ=;?*?ğtdD#dz `hj*|z Hdi㳌~b Q YX%ڵ|JvdwZaE6A.DSŢұCWm~/F1a:"4SSg ôg3ŲdZLw6C+/7rR/{/)d%-# v7!f_vbHVָCcxQ ю>[6\& <( 1_uPDSoF &ӮeW)6y z/Q^a#,#K:*?SZ +J}E.{R-R꽴:W';:P~;vyDqGOiUj.Wh28 LG5eJ31uũJȼ)K[ a8 @-aL!q+Cv: ‹% KChS:.Nqv!vJ[-"־$G{]4dma͉i:u L&ERzʵmtPKNb-keU{ 5Ts*J!SK1RwQqsU.aphSgsd~U]bބˇijO Q^o{Ǿŀ(d2$ZQTkl:oѵ% B0H[b0̽LGnKF_7;#5{ACB=mF%oZx]+X(@~m2<0w4zJJ%"jn/q]4Ģ/.dwvȭλ@@sHdh[y?z~ MT7~a d) endstream endobj 1085 0 obj << /Type /ExtGState /SA false /OP false /op false /OPM 0 /BG2 /Default /UCR2 /Default /TR2 /Default /HT /Default /CA 1 /ca 1 /SMask /None /AIS false /BM /Normal /TK true >> endobj 1086 0 obj << /Type /ExtGState /SA false /SM 0.02 /TR2 /Default >> endobj 1087 0 obj << /N 3 /Alternate /DeviceRGB /Length 2575 /Filter /FlateDecode >> stream dW'kYaw(-*OFBzuVh/g3 -ی732$DN1OB>GWN6=G8;gWǵ0=A&x)n~땳F|e26/{ap]!Yp(я *g ;Fnץx^'?laTw `1NJfAm'ʯF54ww!:0cPc)튾)>\"5ůRc|Y0u4cy/ ًn!!x79$a~4"na8"79ΧW 4;#:Hŷ`(e <{!h~Eϸ{;F˱x6',9D:HC V+}tʔv,o!d Rpyize rHEQ޷EJ#<($ AZdSsɋXwÂkm0̒.\EDwiBK8C rߘf#pڿvF"[C(,t}T8)#+c ,. J&ˇ! CgeG@)v&p@Ҝ[* pl@|z C/?ZEp*r ͌hl#'v[1*xKEk)go^@0ݼtه| e=w$koӐl NV@bd 3 ZP<, ȧ&& iKj;"Pi\)'Bs*ߡjajVx;`a/e3%W3•{8,*؛Q2='˕ߢqg]r)(S6g1Fudl)2 @}{H+")~ežir?>nyޫ^N-Cѩ?44GۮqRz*#bz"ͯ0F>0IeorX/+ہYl 11"e篵k'I\-碞J0OI)M`*/|v }~t%ZyV-֚$dMobxըշZ͟)Fڌj᠕Cy =Ӄ ^w)'7do]S%uzp!FH~ ^?Tp}S/v$1_.`iQK\۹gj RcYB8 9 | !9>ҎjS{Q2v("Lj[n[h?>o|߻*G_ y֍W u#@م RM8[lj|Don\<˟I?~d؇`ow \pM ձ=@z2 ?\g]Yϙ}Ճ~"ܕ/rIyr-`\/YBΆ6RS>> stream bZ]f7HQ 0)RA# t޾Qn䨍Ŝ Ktāɲ~r51TÚ7I鎷-s=Z~Z$p< &7)/{Sm5q]>h-d1mI '7:PA ?ͥNhuID&v ?Ok?o9 /2U2)ta=d]/<ކ$4e$}1o[2ݻvʰd~m҆ O3T"jɵպosϔ26d,աweY'|y3MPJ}9 ꝓmL3k~b{_JCM]Ұ>h^Y;0ѸYVV /)/eI + 2t%!e?{yKzo5@Ō\^uG^7͢vay"ɒj5aRϡ-vWKk3ƴdzJ&s$IDWSՖ\ez911sa!je>6W6&߫- wjRGO? k3vZ^wxVި5fڃ l*L[_Y;Z&nIl3]~ rh(<R2 YU0;uޡ\oe<ڂ8K'X`x,.YiT$.=#,h?-4iOVYKNA91oC1]|/7T.*Nd)JOoŽXMe}amR©GXg@e/AT|iF85o@ia}Ild:,l +|a@^A~QqzQN嗸^tdQ-Ɖ/ųBH*cpe[xrU Sy˫h焧~H/GT'\M1cK_Y;=S/+wxǑ7kvpJ{Ey)_@2wBi*x>$':.P⛜VV3tF3EKCO^#Ԟ:D! fyNn\*NI/MBGO"m~g߮,3_HCgB:|]rcG:n3޴J>'Hi z]K:  \jU :TpnS{2e0kA)^WPm.b)PT3¦Wlx1> a(^Zx% $A"k)9Y׬Z+;P J2;9Nx<2_=!9c~N1T<=Qq,*רsO٦p g#) s8fYv-#fm-`v|)H]SmXXhE9J(&a>o;uRL|'u t?5\%7v8-rɏ)ɽ #(/ڴB'-p-ܺZ{+9CH W7lo`y#0i,a*TaG.ѕւYf>n=E FԎAcw iDvҖZic_5VC;AIʽC=nVLZ$Um{yrJCŅ<.zgFq$EP#($|s$M.niGVu 5wzZ]=NqtO!딨]=n=nNL#DW4| _v%۪2r'khfZjR6@(Jx,١i^5-^yVLf`'E@m{ԙx*2y"-PybmFnjA&5xߐsBd׺:5;7Sd`_A Lʡ{XTtO Q.> XuIl9n2x`>U7BXC2#Zc_c)c%"&/)޽JWvNUYH\اAU";SezEK+Cj"&K@ꢓq4+)j[zjW Fp&M[GB_aah]Z4Z1>i׼b0Ryʺ0T[Q%wUBP,̻`k,?N\;\MɌOaCE)ic<%Nsa$0ocp;PSFi( i1$^CӇ0in~r0Wzc'J_hX>\3̾/(Po >EV;!nmWG.. :z[|~=M%@H$,j]s-PVJ!--ܷR0 D[hH a*/;Ϛ=u"%MP: (|tkU#_j&J)86~cH?DR%:T''A}ijf~51bvAJe\/2[nGT0C 6NlIɹƍ=Ͷ)D +?991bC$n{ kufaX9Cs8$Kgu#p2Yr3[s+5+s/jVosfْ3%n=Ii3D"S/dw%?&$ЦoOCH^ pxgXIEwMHd1yfxYG 3?%1E}XJ㧼 _;kse4Ӄcc8,ƪ^<)gw~`O&eȢB3g*^0B1~T{H'~`Œ!B C9;o41%CbCl$/R.`X/.M0i-Suh4i8D>y<̪N2%#WUe=@)92.'q&Vo#=l^ yi<6W ZSȭ-'lOIK|9e3J/",t‹n率U7CD*mH=xզ}&Yj_$`ܞC3TD~){аQj_ ~A[((zFI'ۚH%RH#UVحMy}-z0XGl&\& LĿh:U`ą'#a$")gMha-DFFNy,=J|zDI!@'6Ώ+s>"w2G߯z6ybG.AQy89569-gGNt7)}jI,.ݯp'g{qI1ԪrU` 9ɺsh+\N 0u-^ Wi'E՟cl"UѶ;f |Apic(]I>sY9 ޯ -uK^6Rg.K`A*ivJ e 7c ˍJXŋY;E[?2jFG ucc2j+PO$9Ub3πۍj\D[Cg%Q+s&I ^ƳanQ=x~yIwQ%mTØyv' lecVV]A^@C" kk*7p_?Z<SG~^Qп- !`6WRti^~P~0\/!rObXc4 IV-)dۀݤ@u8ȡ$6zNaTMN͖`o:#GQK a>S6 M5ze$/qFXrĐ%ƓJV!㮝jƘCT>۽g G|PFuZ%FV0Q "[c^*\ƨ|2ς`Psfv4NgXj42FTR"4%uwZ0Y@[,_Y]%ע|%RZA4ҹLK].P@;yAT!G9  E V]WGJ `{N$~*2ˌ+`V 5d9gx.eٮF Qz 4- ǿ69X4G6(gA[N;)si&X[ Uyʰ#g îðA9+^5@(kŽWxEYUM -ShEC[;Gv8K8Aio(MF`Ϩ!En1IQ>/O44#[eo{8y d>2|u 8ukfb)x#C"!ҫP ҷPۓ٢7 +#QG)|8w5' 0-y'dmVXxQ9qJ/2ļ։ncs.љT%4zLzp]4LRh_Μ* 56a)@O7Oh+m"xCX&/ؐ "UY^òu=R1 nA8mjCNYx; WYG2Ĵ%s eK۲OnOTFjaO!1vjhuq^ne^>6ʿ!SvT=,yb3p?+~wJs_Uכf?Ճnn!ztO"ʡVg/ Z q-\4س V嫹a/`lְg y/W aK:}$hfZQz2xX44FxdÆ$GRjޤo#PQa 4 ;hըԐA>/UW^Ĺ3f[=!MgS?B`Hރ*)b#}j6gkq[ͮ#=IL0 '_ӞOvěB@LD2Q9F۷RwۖHL\{Mޙ3 ",|fA۾*cМhXϞ#O'ŒqB׽,PS6ƵQD0xX]4e$W(;'`W H6`*Ƅ$𾑂3 wMF<$- ?5җB6[x!csaL-YG͹c*}P*',%v/>zq[MO@D&-񌣤C`] یI 4V*2 dSޛzALO;1Pvһ OP\mI*p1iao9I_/팊uvڥvÂi Aw]!j]OnbgEKH{f.,qoUA:~]VHY-[ׄ6ֱ$pGgjTm3 ,w(diRdx6FӌRFkt4N3VY"bD.+?Ϳ~dQyʇܠGinw] |gܖH/KȑкE%eBh].W4Io B!ǰ~>մ yq^菢h<ⴈ؁E65XE;k>")b;J%/9 _YVA~{"= v^GI+ǵIP']4X.JkEcoaCrX N.`G)H e|Y5HQЛŢcxpWpײu% XF#;R:"kдl/+Dt+ 5,zef!6KЉ~zuΗ#³np $Ų94R4 0K4-qK| #(,P9y6WLn<%T3%w~>Ϩ|l72îHkXѿ4 [UgPJXъ5Z28v(]|nRsK%_.-#JD)VJf(ggCM?n܀$wW[HsӮJ2ah 2dγ#[-KJdqd߈MCZsT֏Ow3Fh򧃪JU.^+U*S] 1 1!"(R|Lk2P8<*h2-)Rn؇[Lղ{6.ЛUFXASm#Ai&_sDi,@302s MS+e.Kx- W@אB܄6P.%CeJS f=OW=+A:rbs8t]2CҜ(Nh>Ύ=6.YengD `d:eL$O[vHbJQm[9΁րou᎟X/IY;;[D@S ^*b}Yc"Nhӳ&KXՂzwۥC(^)u(+I>. I1 Ĉ ѿ[&UyNo}6ؕ칮ʅ %&dš=7QC HJA>.jr593k9ȶCwՁrH"3oSG̷Ԛ: |5+'Pg}Šz( @'Z&`1j1ժ~/'ҏOI BDΝiudj[5( ffݽ Q?Z8k^NCr$8qˣ_81U8!Beu#UΥ *FfL*0rrYQH՟ W_>Iݠ,hLc.>p7R@{Yt؟bYKx > Ͻ0j8hB2HUM"=JߟCLKUP5QM3'H\v:f38?zP:|"x 8Wy `pf,?2ZHB@}4Nj9{ N N =:(eCODDwݞ*Q1C-x)nMk _  llg8񿯬 (M}^2cm1'ࡔiECa/-%tܻKIG;o+W9v+`Vǫ#e|biDE\q99N!|-[ijBUb˯_BբGdR.5mb!e"K &_j, {RW Fe.#Z֋x҈ei s s`K‹#0+?1HzÛPƑm{ `R]+;/ҔdfO̪J ?-S; L7@c)0=TbᅵpP č!8u?I}k+8RH|KO z7&!$ѐfs$ّgz`f^dcz2b0T',btkzr';_q `Ѹ$c]@=حx|dqS.! q8#D٨3@j%Qԩ ,oV:tyB*Z3xg;5³ީ|0cѵK5r 2>+j-g}"Q⛷u+.tg~' }44;ڞkgo^?> SQ6Û]y#ұNJ5TO KНgXh&_h^t+* =t ]BjRZ(+2yvO UIt woɝP5Sg|dgZ3!'hޝ}˂ jsAm!ƍAC+-' Ghn*EAEWeih8|>l8q!5ݙUָs&luR *֨HҮEq՛0]- 63Rê3%F5d zb %JNնs`|" `􅿬ƿ,GɆZ ^O=oC#C"s Cqo ]u{8W)xõM\!B& 3iM 6%J4JcbEIFnP'Nn=L ͹6 ,R{ԦETG ݃ Pz27_1E3g˰w8!i}USh.EE?\.$o=PR?yBEly,g %6)_#Bq2jt9TtWi+|XrߞeNC$+]omukG_RpQ> C(zE*![ (ڏC#yǴT5d"Y_|@_q!~Z(M/ʻH $)vqMS Cz4Gd&p% n pвppX4{聩+f':Sm˖aFqjX.#owb Bf_W!lRu̍rԄ_]486NTr=5fb{Ǟ+5b˙L`i;gOrKo84bb8qT }uxO{H)xҥT%Hr%fZ#F/j֪ۍ2_gӓZWib ^:*GUq6Ţdi54ښ>'!B%k8gf2 cBCxxN$᪩2P3ϕSR!jUY AhX1!Az&27I剨PB):X A3,”z(MohZdlBCdB+z~hk"2b7 _E=edU]Ω]F{lS- .*FZKqQN aЯ ?N|E0/[j# `z"rF ?( w- gq#tDNX_olC^Nq)iƈIvN`m +.ŒBp*l6aQ [.y;Y\cmo_x1vAjDr2(f u2>7?OPAehT.wM$}M|]$^ސgFHgͻyeos͢ (0Lqjl!n>s:@lQMaa?)1s6ZKҞQZ{Zm`Bd2,qMvU,Wd|#ybjh'uJx.>iw + XoUaşzХ]Jl= 3ɺeM1RRKC̍L5)8gD{ӥ)n̤k/F Lz0XYqҨ厊Y[#3j6kBCz'1a9'xwd_E]:}mdZ @ǭS766}0˳ {Ѫ+0HLK .q s|ݪ<'+۳KVaMO]e楪m \tuy-h+b8/ۄ°mKix_f sFe;$)=M;ek Rlc9eMb6G4_-Ŧe@J Ee6 $Ը4EGhb$^" iLqWPXKho*(%J_gNg{x-$>>^Y9[ZhJ^f+YAgY:jO3;#|N 33F\a//kNQTu,~͚7"JO nkv/+j`+#`,us_x!?BJ6id3Vn=4r0h@!;wЯE^A`)'Qc(r å[ˎB\[Y/nL+=?@Ō,+j-\;;rPHWܷ̠'M~,TewbUo~P=Y-B ^FL=cǧJHQ)RX0)vO ?^ocӅEzꮹ"BmAOlJ=*Ff 4]-ٹʅ@yg2QVȜ{;$"L#̒Zj:sPPy?nFBk8U̟6 ifxnߕ`)d/ET;y@ú':wͣ-6$]l0j+YNdgԞ9ݟMnRe4-B1"J^";L3D;ܯ74I|Y[u!^qf-8-TPJ( ϐpWXg2]|B;ԑ vz ,v%Mt/ &@&+X(e?Vh-d@4+E6r-2bXUVmʄPq6`j;ƆMCa|(to.*?!%3.%)TO ?2~[{lݔYeѡ7:B[ok 0g+A@aN in$BUvAtNtwAhf㑁{ރ'r#tmSsdٌKĖ)lz֭C݇TՅT%:bف9L9b ^ aHWK~DL>FJcK>l2wi‰6rD Mg8M@| wEՙ M j?%.?R ʧaso[)Xeh̺,-c@3M8"Lw]@4sTF#NIKxܥc(h ~dm&8JR]:@9y œ)r4ZM:ۤf}uKl:s6%a oR4XMpn JuAl9l(;,yʯ>^N,H$\-gZ^lEN QxH(H2bdq[K(Dz7Ï`@'9ڰy9x+3T|B14r3p]%vd*{fCF`ewYTd $b8j r(ckGƉm+ΘcOWCQ3,T@{{lS &r"  4.O7$Ǎ v !mPGz!X~n[}g8Շ$__]t4]Pw..B |>E&Mk w6 VxHkrJKV-gy%t0[m{a"7:Cir>L#@7.M4&vbK57߶P5bw ХJ!/qh଀sKP:· bq0.-ު{!,<<^q?oJ]A lsunuٲ!@@)hx&_&`\\al"_S0O23|m(VϐB]@/ٸH+3PxTIx=ndbC'zu5\g r ^k%0m}]h̵yʑ5VKa_fR dUS,ڵ(bgEɿfǢ$N;"? 2ib:a b+F ( ~E(nx[6+q o%a3LO`$hD1˖kT|\LĐk}Ad[Ij 1Q A0a廵#d,:2,/`nP56ekwvN_<jجbLHS naZ 5O6+#I* kM~ZchSD2fzm8}83pFC0|X  !ḽAڨLq‹9,& ;.)Aq}9+}-NP.+k ^f}F!1AUl7C;mGz}> Lᓒ-.1Afd к?y+kAMArEXJ'" =֫+S&˶T[j~k.5>̏Gi۔J=KkƳm+8ASCsKg)wQ3 xrRʧ5\c*$yH|odD2l'p BC>UQneʚϪǾ+9]?^MH+f_z1nWg,r (rh3֨^xk7ӻ&K}nߐK҈vஅBk78sv yVO\q4F{|H7,+oR9:3X6|=e1\-,Vl J:xIp'N Ggzw`%tR!`q(ɚ7jolx3;ʼ-fb1|SnC#K %:RĐEG3}lr}fh$9O2LvTJ6v}>;_F諘ᱚ[.CX/uZCll4F9)d5r^װ[&}!3klz&f1W`#zD>㏑l;Ve4[zry5X ;G =CFyfX)QSMX|QW(F /UcoN^Х6PB~_~&k6\Vcz5x6.|(v9OQEƘlN^蘡C*'1!̑@O|Ӿƥ7zoꏨ%FZ1c{U$ru:$7NM2Fiv2RN&eZLą4cKsid_;t5g3QɟB?-FzكEWe!mgC_,—/%hݳ{8C'MuHF KcHNl"3޻S? wnƉJ֓*`$l@]#hǧdŸl)(Q i̦8s;/lJE,D ԨC}#8[-c]fd;Q.N`^`0źft3P㰐@;[&[S&)h ;}Fk_"吃G S]+KZ<+GV(\ Ryu:ف+ğk`}a4GV5:^ >$ CwkB +sZƪ<4aF>D-y1J<%C|Ff.,jVf"hG,pU]*X"??Ή~z 5sq,aY6rȭ'V@(XZ֪DyI $< cLͰvr!R!t8*(FlvMefC6Gb2M8)lI" $Dl/R'os׌'Vn ɯX@ZP|ö8|['wv[ėK0E)J`S\ 2m)_cR@zްU4ف&g Lw-&a")[efӭ.G '-0+Ysx[~sE;lHo<ÿZϒ?S}7!G?l-: 9Y|$ls@<!u@u; u\Sz{$ @?F*-K~71H0eʰŔE^ts`Nk >{M$>ەcYnR͵eǷ;+MWWh؝1]9;Uri6wy96 U$s|3QodݴNJ:Эc#A;ي6O &,5P.gj'`'~2=Hv_2@;ŬX ڢ_ـߞ7 xyHX,gEҨї>e2W^Fw[4PZ wZ^9~Im!t 0.=-טix^rW ?d|ģs !pu-4ر݂^Aq x.dVF9okSSAus $Dե9ԛrm2+]@Ϗe6`biqGiu+D(m #Mє)k8FCq扪LM93[źQ`Csc} mR@WZbBW۴@ z]b8tyhŗʼ~I{d1_s9$Ԧrr%FxonIBΫ;A  lbj60ʥw.*5\g1e ]Nꕠ!M fkIX aAM55V1wʾ":+.CW^G(`Qe{"O}uCqOnC?p4)[zHrW.9uO$Ԋ3"cqIur RUnNN$!&(riǸnj$K|tYbһ#05P =l@Mh{pi{mhx'@#4N 1p4ɡۙE Fvi3"ᇵ"fѦw:3g| 9x մ'&LΡd@m$ vuFj~B-Vʏ7ֆgTm_V| C|JAÐOcO"UU^ ў'.+[\F#x'Y[G$QG9N;hY05k]~cBxG;Yεbv '0>dpS.DIPh&9Il$҇j5+Җ]_pTCUтt:;PE):͊G8g{`@_^_LGV\t$o( t8T d`EWU&#~-ig#9|Guzl흒b&FK!ϭ}d^noN/U S9CG/̈50#]RMs&ٛ`zFڨ"{Cφ5:"릺̫ưA;m-moӁr"WR^-zb n(]N=7eaQVktLLqWom%@\T&]yv|4Nd?ҭtﺭY&1heڧ+o&ExFbsGDp#RvQzuu9jonfXLLO(8Bqh{ªZ>ha-+CsvƇVeO tLgT#!=[IX[}w)s"XEA[fIGtV`z=Q- Xi'3ırN^[-'T:tp{`L,!$4ɦ4?$zM3ۓ dLMt7e4DhB.$w,% 閔 =Kᠨ"->$MB> ;g05b*=I#whapLfN%b Qd4m|嗂B9ġtapEc'5X@}dF V5H~`N}$$h8tqGUtr626nt˪^!yɢkK,>squGV*[reHgdܥ C!5N'ߔ[=xiD{ #пѪ^xEГY+\Zt[:db+OEMU ثH>[k3t geȁNZA>2!uShA.oFWHݠR0uo/([6!ŀ"> Υ+lGF!x箑\&>ܗtRpd3tGSE!A~+na5pPZn/k5mل-\C Pu"^6C֮Ѐ;k)1f$k PtNѿ+yz 0\| P^}L{sK'1^*8naH>$;SOK_,ʥnfa\1 #kŞDDi ~?Tea}d1{a>%~N?lŇ_]51T3`8Mt K -bO 2_uaKc$>[F[XZjj @RcEt폊Đy?!ãBY$2o Ly' uG ɓe<{#k̰.9bGj9K0q$} f0EŭK*MsD8 J!9_I1o?L\# >!$r<̒jy`>)%7#^gb@.!]n҃S.,钜!<{hJ_tZfA,P$ĀAv%Sv?p{H`Ñ-ޭV^)2>~c#,uHIfS@hhȒg^J> Yn]j |Lԧ|%v"Q}x,6SiC*ꇿZ̵ 78Kc2I"ri;_J >#ӬALSӹ .~`y;@N<ɐz#GaE@*WA4Ē7}oMaς%Fw dl__7W؆V08Y==Z-E5WϞnP =En㺆F]WcDϏ"E@K)~떓aY:sq$VN+Rr")T51򒊫Aј LQ&XO 4-\0K:62rE:j7st*oSǝ('9>HQJW&GnYgU/bH}15_9z׋H7]C # I}9f_gֻ., d?7[N6wx)<дB~Fƶ"|,0 }c(p8kI%) .2)lprm}ˉ;?^ +ުHCAs' dNbRq")/+֞qa a G1bwaJߥh#69osb׶7*p/L hsͪ05@ӧݱfbpc/e?aKh@DXƊ|Q\^GG% N ۱ qJW\gڇuN<_mQO\0g$6~8 B7xgh771o iVNіU$k9! >_C8q߆&She,^*,O(z7*\d]W(n5 [,=¶ӉEkp"O4,9?X\Z;HeS'Gl/$ToŮt;&7(Aӂ&@B}eI<]`tu[h3H dVi ~ 'tD/fǵK_X^LU s7&Lhdd$SWLS dd@p`Dr7~`ߔYX*gkdպf{vӾ^WE,r iҜu'x ZՍT>KZi,e0I7h n\ԁ[#7}d\ Z(it^\ƊC1H/ŧ4}L"0 ,<>lcɬsWYM^3ezo0<λr<:aBNmфrQ<r :&Qrrj8DmG B)~X/B#1K:s~hnśH'gwe6j^8Cs2Y e$9 2͔y '}$, RS fI֛b½X &Yà]ם>3rcVӘjaq^b!7b n#z$_s ӗ,q%'ӂFY-SJU\Df2 Z%.8_{Fn>fuVHt`9U @B 2?,A;D iz~ӉMz͸VBIe1U3{kǼ%GtƗb ڄ ;Y1@.}\OeʱV @UKWۚE>oYb#C5"X[dk }i8"s=y;Ne-0kEg9zFx3>*AHB/GZq7Ou'i z@lBn0qCu@sl,)SC9-qr%]6*>Sd틐ᰊlz*%GjK ;|Ty+rA.}+uJVC'3S4VH# .[ (FhiPq$LDh1Œյ>A` @-< C ]MVN")#i ."e'(91SSJ1 CYu[}a=E]6{ Lim:sPO rm yT.w -2sy;z7F3!/^(!^3ȭ1 Q]΁cyh: ?;a6#1łc|6< =YxrkIfe]<6%8:ZA/BtȔյiKqR87/o@>]V$(z&HDD.{ rz #ZA$8 1:7sP֔QB3ؚ,GkX+ע#\1]eL;G/ 2v\9*ӵ$(%!9@t'eXlL~j^ER-%B; Z9s"Kgl5k| "vrlvjeZrwPƏP'Uh,{[AJЀhV9×ٺ ɣ[}\HkÐ<mXD5ij0+ .摥9K?/ y5(.D#kX嫂Zk%;Es E-Y0<T΀ Gl~$\pO0 SQL -ߧo B{iϟ8E{M(T(#6βAigmE.:y>-2A$@q>l W8Yxpy]D# jots7U 1wIMԉpG4M; J).h^`*GoZ32`2-=6hg]T-(/"mQ#k'" ٕw[+K}?dt*}~'DxE`IzI`q;&! l>\%lJ@k?lAkCd"|Y(CA_ ~閬3~X=TrqL_#I⎟ sUklV2-L0uK!C QQ๟ڝU H@@̚-j{7ŷzM+6'Me"²j dD,͘xc'U!0Xic"ubrk"ڄ*+؁g -դ5w?}G~4PMq|[HC5@prvwٕa $bCA)64fa^$8 - :%V6#Kt`,Pj$.Hi5ƦH;WQ8%`eH9n= X-mV¥ ,/i&hzrvoJ0cS V hlI8cWۗM_vZ7RC/SU#@4EH P~F ŻC:Qk)9L n5Y6Տ41y)VAGї=I/pe@4(+>W0Pj{'U"?p2Q )gR{Yˤf삀/n'&HҦy.xG J_gXiɢNjFni+&{uNݶ0[I)[uF<ƌo 8 2)8O"|HG }#HZ@rR4:+^v>=4n RH02nmP) 5@{̮;"3o]'_bZAu fs\QwW$!fÐ`?s'v`ԺPc -Z%'% dj*I:eѷچWz^nZPxbT'Zu/t̲Ӱ?!2Qb|M$Jjxe>E=Z>W ?jw_4 {4M-*@\ЀT7Tcר>+ ZHYPB9m>0j9Lү6tlo1?Srn!sR I۔P&SZ3 5Vl35ˠ͡./ o 43 3ϻK< R7u Gry -ǭr9r1W2Gx}tz`[ڊ(kxX&u'%Ub{ޏS(øυjXnZONc[Ӳ>KG2}s{$_!PB8(*~e.JU DM_]Z}Tub'qQSz\(>{! $]^trn_z+SS72E'=-!В9bGG r? Dqw"_JAK㤥}L+OWѯN޹J^h 퍟eZ߻B\7`bliYFh~KbasJV'3MnC}P}T`,|r$b1ܒ^/í{0$B5MvVpK490l zP(qHY5(6^wl6[N"/RAu-aюHy=Tű*ب &u 鰕ݺr|Wv¸}z%e$dk=PKQ(\GЬ$^xOHfZF?Ն&Ȗ"Z Ad@>ERYy;]< TdDF05Ȑf(b殇j xY# ^4+=nx=QPWvLpŒ΍$Bk]t3@91<6*j_Cϴ'5Q^E+.IaW=u5>Bs4r27nW ̋HPi*1ݑScztXi@^O/ lV- =h5*fsuA6F (Ȩp~ |7W̼ǚ'qmg |O4)5qԏ*rM;rRF5WaK %'- X?Hn&bm}o~b.NuG #!>owU#Ŀx* K:BdAށG曎@C=^Pb.榱-}8W?QI%S>OմىliXӁټ^o1Xa ]%IWhHUTX|(kź˼̩Q\Y_*UHQȜC D%ȠA 42KEjmRA]2N,,x587<`ӬmH@p5+瘱|a>̵ԳL;)0(ǏsEYMY+w BmR|" OSO@>$U…MVV$H,F[p $;^h5\WYoY".a=#lL,g|e̲;.0@zИΈoqƎjD?@##'yK, /<%ѕ\&vO#9_-߲S^k.#~d=˿L{*=e{vC Exr~y:G7($f(+bו] ۮQl#L +ÆgTb}܍Ȣӳ$b8^H_R8bt r30 zYf6\{:GkffwJQbW"Gײp yFyl_0x$ چ^40R|;0URuh'>9!"^['??ӭl$w*B@ykݮ8'|mu+sfJ5mٻ SZ/Fn{K?ґU85OOJ V}N;WDt.Ӭ?&\A |r'Hk+AGZ%o%edIn&؆u=`9Ew_+4Fpܝu`me|Y %4XrKO5qS9˩ku|!v^vWm?7#Y\6$s{|i[llmէJD@>/8t-#N^U&d.m&srX%4OΦC_MCqkpyH R>ލO&4-vz)6~zjRGٴI"4^cRğP 3<竂 ~tYY}m ({;d}G|@xoQ`H.ƘmQ*a{%1R C1oJrlk[7k| %*$t[cˆt7~5*qIC" ;oy/)Uz݊>VODtRB{hBTUy1)WsZ0K1+/A ̰ɡ5 39 ۑ .AOFSlG?o,T_R-p5(cClv~m o!%E,װ1ʾ}[bk^F$t千)̥`l>1mp#P `; \+>0`ʦK&o:ǮVbnqnoDn_JϦnCaT5` ocey% a"^1ÖKm -̘Ä2`W&1ħ"͟lޥ"6<>{ǍMV?pd,ֆ414 Ş<MPx6 k oJL+Nf*;R0qC~5xO7"0J{ gw/1N &mt[} u>]=Ҽw4>D!Alb;d;)uw#@(!;ڛw<eTxf͋$C#8D,2}l.{,Ջ.PɴdzJ}$Ԑph׉@!)X0[SW rzZ%| k c=2^x#5F+I_Ֆ Qmyx:뎩M%x-2;H}cv dt:_=`_)Gm7U L YxrC2ʍTL,rШ=i*z˫w9.jaSxx!QQXjoTz(ennJr[\F=U`&mXD9;WwE.,[CVſ_k$j{5wf UX]_8Ԧ_ tH;ihP^"[|SK(vsŲ]n}c78O}Wa&Q]Bxthq:(S CZ+^ /6Qࢥ_| ljƚ5w!s!1|EÿpmW,|!%uF`y+2PVѻ!̻Z 85CKQ yhEnN;ю\la*t[nGu7W፽8 hҜ H`WOo*ìLq 3%@X#X}øv!zh n /AZXة,p5U`ykkeL5ʺG1$qB"f듡c4$[ӑ>k&]Y6hrG{K;/³Q <!T%,w :Kek-LM0|4վTyWKw:-,7IbÈIۮ*@TA:fH1=1S T'i q&^]¡)\[r7'7 J^ڏl'b_y\bfRmfHd dIK|=Gw;_bkza2.<8+U8(eA =`8pJ& W'Dr#T$9bay'Lb3l藧A"+ #Ԣq32ItVO8","+;?eRMˤVYeh1^1YKC~XxdWnhd@#jP7_U[)" "2aZ@}:9h>׀0e"-plv_uʞY@?sOgK,UFה݃t8#@n3 A{xbe'pn#ީ(D||(; rWN@p:#9*:#d PGcgEdeM.f1o = dP ˕z~q5ǫ<fD\x$O^y28 fXw/1|AjDrcZE:NƔΤ,J(KWLO8Ԑ"/}O 1/Ffr2! g_X:08(i[WX }vVZ0wKP]p &.aˀI9w@pz$"b#wS-a }AYXYHw4xNfka #9:O} r"\F{FZSٖO2}(l;?QUm/+yM$fbyO|2TpDrPjAΣ>vηpDVh*љqqPR7A!ڽM e/eM[dIUCb\aqJt!T(UvUV(,lo9wE{]5Щ#L!Q: 컚ܹB yh(f)u'), eѝ:lm>&kvrdl2I[hee3<(y{":.(KT ,v` id=[7?r"w`QojpnMkAXMR&_%J Y=+X0~rM19K0ܹ|m{Eݼhvvx  ACĤ6MIk8HKKI885&u=@ ͗8QuknmLq;yN1㲺D5.Ej#n?҃HF:ZmolQ \n^pO9P: %K t&׃&7pMR >&## 7fSF-Lg=Ow(v3M\F[̣!aW$2\Nil[%=d݂ qyPguVT2;$YWצk;J `ӶH/PQ0c~d60rq,H GAkv 0$? OI4AI==-u>'֖Ӂ*~,׀W\p_y9?(NK)ddܑI,`GfKG…cGBud4ˊ`^0Gz^wQf1Ecc(?;+` Bg6j0Vxhq0YÌ,YCK k̏k@}B* ӹ[`_xfT)[޷@xU|0cUq^ԧoBöͮyΤSr_ '귉|[2*fB$l4 ^E:(1_PqO2PHX)Rw aib_|+E^v!^ sFs>6 -vFHsړV?C5lڙ!9g{_h'bqQj.~qhK6m.=בtϲ1{pW[OQCͥ2OX9ѽnhL~ƣ/tZK}% G81Bzs_qQE l+9&5NJt>2^,qy!ȕkz)+vlN']N^ߜ4۵5|pє2Yc0sNfwbyW rЅMI1,_OX$79awW+⽣S<= L BH:qI%D>@B4Z:i|'ZHOaen<olR» <0Pl4P9 9>Nң`Us4A 8nZ(H *XZ76e щpf"Stla&Be1ÿ3Ӂ*b[1jItj_0$^z2\ȀFIK?¾N"A]'5x4 ]9[]*b Ýt6J)՜ct˹)\Zm%3։g7ܹcS/bseiMs:f_/Y-z:;T Ԑ XVNUkqcjK{n]) YyjeqO.&Fy<GrO׮zAM o`U\*s~&*+e7Ysͩ VFgnL=+VrlS<Ϡ}ͦ:{ ]B|c& *PFynz~i-Hīӷ)=ZՌ[ѕS{\2\P,hlh2-)"!4ZUR *In[J<r|ڀ$DFC"=wd#l LkVShwf k'g#n>}ܡkoLsF AɟG.8 c:sgGt=‰2 jl>T~ƼT50.sl!sܲʤf`uZ.g@$kz}eǙ] 7WwpUXfxqú4&Uu΋Soע2Jr%'DM^mN)$xgG|^5O` 6+}FlĽ@E=h΅=ck)~ M%8kp]7`OT>z>53a5 ښ$x2~DF%eC2}s+Pnc}QSXiHxWZو᜖N5)PoGq3 QXbkĪl))rBqi>Rf5/Eztokղ=0-Xro֤9 Sw,|\'zBQJ':"~Fe^#A}+._Ť-w5?kCoa譳u)Fz.'^ƾFlޑ/cqUb;`ckq?p(6谷NZ8ټRJijả80g>+yM?%Zh gǧ|(Ok")(tԾ3qv:L+c(}??_^5ܭզ< %wko#ٷ@G0f  ht6 2},|Ho&j,WI^7 Nzj;2?J=A_)6g s+@E"*eh0-MTf2 Q .`l͐w[M&|%>@<,e<ªwH. k7J ~ s (@:v nmBǹ-o<ذ% \h,xeF d^$): }̊?xfC2u-Κdnn,'zF&hTC'~|^+$r+ϧHeF!K=n<|K@ZZ(7w;Wo,@~SVTI?d *8t&Ҿd*QXͽPM&ۃ:XԣO{qEe ;U䏍ưJa>慤ۺc$ %^ӁXe9;[:S؂׆CX<5c/vBa՟%rv1֦;2ڳuXs:b"A|*:r5ʫKgCSF=,>-pw7.:"ؔ$E "]WX̨H# Zt`/vՁ :Cu' 3;uF4E3n̴t%wb 66d3hO2D@Kt#,w^ۑU#|H}:E)KQ;r8R^|jo*a vA##Ij;fSyvU/;b;P1D'!L?[ 7⃭C5/DaCфt$?id4O!Z;cDd6(dmtP@+w8dNQ^'y齯tIDeg' Ȯ 5Dފ/B37wbofY%U\{(W^S' Q nPYԁbR[ #Zw=]{?k\!͉I"6b(4n"ugE+2 |Zvk hf.x?z* U)ڔ`ߙ>t)6 +Ӆ] qkDh"_ךCPNr*cy?QzI9S31r_rZ)]EԔ,(C.~2r# PudD}wTxsmV}jxm1'kgJwH}Ű|})BdB@'>&#]0{΃_Xh@ N24F# XRp0̊SUg[A:*iK@aJyc$aUZ3ܝfW,6BL *[I 06B#AI8f#hGDZ69Q Zw0~H,)L .swog=UԘvYIX+diBw丄YWEtd,L}ib˷519&8 )? LW Y9vT;VO.o7^[LXU&{&NX0L$Ζ]gX5q&8^Sѯ>Dݟ 83sI+`:TT0Z$A[g//PKc OE)Lz-YwfS֬Jc+3[̳E(ʹֺx[Q[ < O@a?г.q<=]BuM4^?Y]i5ě'"zJlOלYJڹ. M߆N~KPItozqG:tt1r1a"ۆ`g2oηh{CNL5{uPos@-:GHTCC堾Ax۩qЦh Dƶy| ե(Lތh`8,_Dp5}ýߞC#Z/O8,a}Jh2#|1i ~q-s ;im9vKVu&;yjTEb1)uqݿ7ټy.؛yj\*; 'NP:!96JVK-a_:q扲Tew,L>;F> Bl'# lޱ-a+8V,m.,IdpT°[H z I1%Vj(}oA}(jΏ +.oOñ` Ǟk1)v~]^^E$k,H;cR>.=V@hG2#eDeUѩJIӇ7aoTR6s'g4fw؞TRh]wF숓 kSGSOs=/w[.EpnN#jb}Pk" ܰA)e{mɕu)!*%uY dR#FfܝC$7GPr52KM-wptޖ4{lWzj:ڱK0>ebJYa|]q`ضo~yXG\Kd_p5Fe2E7r.uZ 3$*Dƒgw_E#ѶUd=|w)N .U>&E Wn(dӹ,d@uLGVGثޣ]DsC/*.GeA>0.r,|:>/3v@aPE#eCP3bK+6bVG D&s`KW`wiQ~E9_x3X&4*pV.3XB:Ÿߴʜhz$3N[gXfWʾx89iJ=rM, l}t{'#l:˺SM~%g@vV34 ty׺w@]: t*-hRK7;3/))dָwͤihN lJa Qi)w$Fpa)LDEaԤuΑ}Z#*wAXs8ڊ|oF# iJq{vD-wF'0._x D)G^,_URԝȼ,7M4 x;y]8ږ NcXfUKQ 0MmUM=ciTqW[v[LSƍWc_ i:("\YmE ~ Ty Uؑι]LZvR/[i=VqFL'e:NX $NCmY&;;%w!F1K3g^=~/bEcma6z8ķ84|tqs!Qd3! k׍WC}K'&|$iCQ_>hc.jzܼ֗=ckFem~^gP6ÈzywEn(bG[#d, L1#NΊ"/TC?\,& (E }@AP\zZqbI.$Lq}fąдuໜ[tZB!7zჼ~׋tdɊ+i? E\#r(=S~69Dpƺqk'҂WHؙ3$=/I?ix]&㖦>rd: PV$u#N:uss Qm m܁p*vI I\2rz=u}VrEV:HeFotM8&xU˵MHĸ)' A7 J@[oR'd^s6GP %d I8C+BI a$YaHDp)2H):*Q h-"ECq. 96%;&ztK:֋W 2|:%#D_ZMPʿòik,c׸(zHvv[b.e Jkoy}1+DZ9Y\Y'^ /Z$P|"!? Ԍ3m6*Uq* 9ZP\Q x> u zbj?478^3iw YqπB ^#/f2dl`HoҜD:b"AS-$yf5…Y+ݯ@#rE9$ (eǗ^9emęB[6d|5_w?I =+<yY1$am|d/[CJ*$Vۖ&/<#7D!о~'Ilq[uO"֍JKӴC;X~EC);Ch6Kx0*h"CVNϾV`6nr"'p| b^ƂzǬB96#!i{0L4J\\2{Qtr ߑ_b}r'il\ V,} \ӷV$ =J>އD+hpPIN ʷ^_>2R|M`j`0csi=42g 6#Yk?;Lmi7$%]zALF[ Yu!QVRr 6}M)s3{i޼!⦏>k_20ȹ͊F H&Z¶#zf>$R( F*G1 Cm^JTqѷ7gS)F}G>,eT9U=P@{K;>l:g>i>-$4yKfɻ^~tX#1GUy98?`8b)F'/8cp&PH>PX{_Xfp.xj,۵!*ZӋO]eB_$ܾ AAmPw";Sk=8dt?ZŃIY@ =EL;QJXr_ =?;? Z?(l!qԈM(&0y#ATHʘYyN]`Y(?Q:1ytwopGrDnr`u9˔E.颿Ll0o $Vੲn~r iXۈcgتJx|xz(5[ZB|31DZ*7 ^l呥#%Q~팇҈kD"wr&hnRf35wXti BtݛiyQx]\{5wo%O|$f'ڦ. Oy6g:qKò'f O,K7R9' : ~)#u1{_8Vτ 2]K  AϫoOhQ4fcLQO;FgɈUVm.Ģ/|L0&$x+!1*̚hU&oK99fnqEFB=?$nLn~EFX[}k]Fl:d=hC_s%֕Fwlo[; k8ר߀ VKBRiH@K\ޭUƄ'UK,.(ShY13gDf ABe\][:H\܆8e3G:W7t|8JHOm6U[yM1RX!!j1{;P=y({3\Nl0-.7CMt0 8>m7:jaOE98~9\@,E/~&)z#E#ou]9TO0Cl0XMGߠn^}vKHHC!uޤLZ^hޙ'hMfkM6ARq2`xh{CxJicWn 4zd oҳ"5CTZH>Ib讉!\S6fL'm1ݢ` ZEo.I,#OV0_bs%Wb$nX/Ix2{Hilگ> kE*%+UE9wyU5GA+ ey$6_YE`1nX Y +#}?45יl=;ZƁY'`%/'<VbGS0QI({))jOew#T)֟ AjeRhf&23:>4u644LR{R=JBG4N| :̆w"LB_'OVq\YӔ56ժ(W`m}ޥǰ/)z:i@O>G`g7hҌnj!/qTP`DYEi)CF*ىȾ\=gJq=O|zʁoZuP:y:Or!W>h|s+U@ Ƣ\zֶaV-S|xJjO.+eK[dѤ̧WR]FF>J;yzu"InKt_RKZ|u]#lù7UF .U^n~s.y]RD (-~Ci$U}hMqVl3N͆UyD@:̰;}> r2MݍBbo(90,E?Z&#}IAvO-ث. JJSx>#^ejx?UʚYH29 ADo߇֜Fv%3تs .>2휯x!> (j'F0d"{3awF%ԬaIкwWg"J1b]*O2E\}1)h0s&jt}s2butbÀMFi>4-Q}M%C5,]ѪCew~~bl,̈́+b[Ϩ"h-;n!t>{T}(7uDUOF^Qzɛګ|]~ ›_CeWJ$ Mϊ{NN1^{S›S3i0#@mcTtiUH1Y,{k^@.ݧ.Mؗ4w|Yi ~?3=RH _\v'knao(mDVH~St $m8}LJv %amR,mwpObVǜY+(o~h Mt1~Nc3ɲaļ͕A@ߐq^4-sBPܠqi^Im:g.uLn 7.|H[J)E9<-{28TM-E[S-ϺF:;DP+ /mljx H[4e*Oq o ;}%986WD.[,%?3dlƾ׌)&ȹ̧j]kwr4>OKGa0UԊ~N]6rd\:2웷qj'tibd. ,r@WM2#nʨ,A%~! :@q9g:4 lH OOpDx6 m>ϿOC ޔm#ϹaH ꞉rX X[#ʹ]L8-lZvg[)2|&b;9?WZ­C-M \ㅂI2/b2Xn/7 ?(=Ç Bv?#om)Ɋ F`${x\kK*vz{@'F>#XdX/8X@U u%ЍM ߌA:Ψ2XYTe@1O5o 81d3(x`QFCtDJ/2rHpbA/\E bx:Ht])sՏ-+Fu(ϼ.K ] {^UBtGOH-;z@Q{P9Ʒ}M}-51UXJ!<]!='4}^}Ujv _:U¢[l_9P sIc#M^nlhDbUim盧CILh`G7ooZBեyD4MWi9wL &|J1V|D$#a`}JZSO˴&XB -wQӲdU&%QyK _sz 瘡\?{%m;QbAmvv!>A6:y&@1T`(c?ܔ f%(PX<8legr|Lh0L `>G\~}ym čن勳vo7]zoP3 ]ḢW+%R/̲fCP߶yPhނm*u>T=8QEDn>DvzX$kClw=07;;)]IKssxp>saɝFe~OߕΚ/z" ulL`=fQ?>iPen{b~4*1c{`lnn- C*\ب 3l 'z* /ةILYl~~5&իZ",; \@Wj%ރ u!( ͳpNB]жo l'M11+7L/c'+tbKD8Ѱ2Od0y!si=޵OcN^ U66ķ)G`WW773-GӼ7-n$OS$ gJ_،;cUHa>[MaS86΁}b:AS?;V7jhipC9e4!\ŋ;H/&*lu<xb2BNE}=l~DW4 "pUnIߨ^Ssg}qDyY4Je<aC%~z=ݟ𗭸 5 xCUN`B#FL2<yĊva$}QdjnqԬkrDžbaKT$O$W#9;t@]yHAdX=%,Te:k)(؆1w{aJ8(LǤlf E^E)_o3o':cX0=mQxc5ڄO%u]ΡKnk-53[Kcg e>xfI-TU4^I~rʄ%ᯉ$72 jC Y ͛5eJ0ͺra(*OH'+S&bzE>}2kMΒM^kȺ{RI)v 'DPv8J hBk5t=kؖ(wY`^uo.њm@Æog&Uaz.?|2S% i{\:ݳʹ|;mx〔d;y N@FpO .HVϩDD Fܜx'n M.wxP,\:W]Cdl߀XD5-+߼XG,|C^1J(6'] }èWzӴmF^3=FߴvDIf,3R}:kE33_4jcŻ;tyy{‘([V l3 UB 2s-/3Xkt~hTzle.y;I)`c/ܕ{fid6opE G4'+L7JC$ s} qIL셖y}Kyqw;:4VDp8!JpbYW ]2yϸH~kX f>B2gN[COU:YZHR36_ b$tlUՑVs9x&͑Z,NqSɆH=Ondqш@)TlPwj`nEaq  \$!\(r7{f|3OyB[?5|0ۡpzC>gEt%u:'5\_.uw WR]OozK7F &zUNDL2وo5eXEӖ˒Eq+8{UsּFbڥcNCffJ'9];MFцQg+\s$2P!m6!q8S;<%t?ۯ=U ]wTeE)_g[b2-}}|sc{JX6VXWe`ރ*b0bPQv4bU,LʱlSTq&΄qwMqIM& MO CQsY7 6>$4(;W10Ӆ",0 '\$vPw/k|y uf3&m/Hs? So .@DHG?:m-<ʭT]9 ".m(hg3.tX!-+|@ʒ>*>;[*" 돯\7҈Wk  j!᧧IA+U0 58x8#V'DOD! ^_i'lm fE2۞j"PN{skڂw2>RC8: [s* ܤ^pns1YGT7601]=}9+=A6sn'~eA{: e yz94*5A(+9yix6P(Kw߇ `ϐ1,¢ѬL[ְi\I+.)טK7$eèYo {RCQA  ˱{C/v\lZI`yYGjMDtg)(NS t|g<5Q㤯]X8ꛩ;.ȍ420$l `,SG֡֩fL*D63uXI5h ~QswpLV c|60Gl i9SHGY"gZ}HcүPΟFA}GQ-4̋^^zz 潳-;|P萓I@)Q?e8'K"Qu'< l6g߲B3Fk1 ofyfXVij{_#ᑡ8^PN>bV̳N:FWZѕYaPvh hڷ[ mtCG t@M6cmw^mּ\ e gjP'`U״C[>-|CXe |*Ok_}x;F%exĵksZb 0#a{\"B\sBdCW2#Z5cQQ藗TXD Fq9`ֻN: X `(Le ɥ7cNMVy.뵖/`d]Lon .Xa3+Հ_/kb«^a[& 9 @!0yFgtg/gB;,`; [ՇػhZ=-hPGNL1B%;I %>}=L;U΀+tg.oY1ZN@ԩcbab!,?WӕYlsoƭL˰Ҟa/3Dhg:|‹HV qxFiʉ@$'s^ȗ'W-Uq`fh-45=aJ(?垧p] uaF57JV@TJogi,㙫47㹵%a7DڝK{UW}:/qvْM#"%F9E8+7A Yv' TH߲`_'x#b?O6 L8za幁 6!}æDRbT|E96. G6o ^#cv, \|i.UiʴC h`?IGxvh\f 4㽿eOߪ9ip=P/X#ZwPtοφ%"v:&Zgp {PF% 7n3 K0h WOH5|hxc87 N:~pN8fHys/񅲪Z`_[AI谔)n^y 9BAAEI93xbKKŠՆD@cTd+K͏b=ۉ^ܑ9W7sR˜IXF:jD/5T-dXvۃ@Wr h}D29wj?('OrI_!x̓^pcN`6:gÖFxPq+`E9+|-͌8>3#5E6ޱ{Χm|u㣎&Đ/s:[Ɖ?sqvOf%D!SVa8Z?tk; tI. )7d)GZ P- ̰i5T܇L"fjFU7n3?{EXքe{EXr%W.JP?llb#%p[t3^*!bs33x:5TX$}U;%0xCn{KB!>O}ϨSWm9i}l1*H [1k*R9ب3`Ih~f}iWk'0"&Ct >w GB' tZJ7sDl>ep&T&ɐ.ln=7; [z#5di:<}lx#Ѱ*k^n 6u4@;E:G.X<5Ňʩ>m[)0u"LgsBE.2|[n!j꾌UișEc8%&eb$>UbW h3#8.x@$-< UȠi2fHIŌ&Ͷ5#s5+YĭCoр]T+7 tIao|@{}yp baPRO;97Ѐ\ZOh;68Tbyu|p<$&ʳ~}a}R)~eBta  BuY9d'$eĿ4:l'j̎ʹ3m>ѫ+htU6gkٝiyٌl MY턺9,MzAeRfI}Rh͝o{_FCCheA[uPz԰D%Dm1 N~Cu&x(>bw_xr{8ͤ!V-}5^Ш6;6\ *;!sI"voVluC4cΦZdg2(+h:a<ۧt5xŜoFE2|4qu;e O_{n&E>Q]pJ!y 26 ܴ[0\PIλAS{@Y(<1,i8%Ǩ xҍzA ݬ~6;9`~͛?.9Ogb~9v͸ .r?Y'ȟto8%d`y5La ^B0係37{NM, |QM)[:set2)JgRBCzDlL72L*[Rԍda>ۼJ\ z&*Z5  B tM{죿iƚ\k2f+7 ;-]"Uǚ 5(DW|! B8<8bsEpJ=3Z^aga[8eH[bs8w"^R{^}z|3XW}_<'X 3Ofhu\G>,l p%?hl?k[Gjsz[L_ OfT.oHF[Mi,3|Tͅ˯ *Ք@YΓqZa7& _G$I-H0FG \E]%[4[N ܑQd9aDLMǾEJ"jk-5g@66tԋ[i&mkDV&T;+Ί_$2 tW1gpPN2+oSJtݣ4)UAJ8p_0䔻]g2ȁX/$iYH4HDۍS֧tF0,ZĂ|_ĵ8yMj}%xClo$qɤ&|2,V;谪dqsdi켙1ń\ov⓲Z8)<00?]' !d΢Ű-* -Wcz%e@[3\AuIC'GpYhJwIA ]/ &3L ȋJ(J3*=pBgUs+jk_:HXAO~QN]iMhJԢGB}8,+~dA1;ZkcK i&eL3, lΟhmRE, ԙ Ud (=KÑt0ŊpF;@U [ѤX::kf4ՅsQHnmRtzؼ|c<&.8ۺ9q ȅbxBF UE=|Xf%EIhY6i6>=fȵ͖%"A7H!+d&1 -4U戲Fe⩷! T (S^mvmRmL#DP1, I{z&D8j;5P[gRrzV 3'UjkFflpy[ 1!4IJTw[̧y&{ʁk4CB濂jv6b=3ܑܚĢSϤOi,vOHXW1vQo󸰍rPwѿ&wÀd5p|-0)gP^3.r*^1FRE;@w {"ƊUe~(β$EN xLjƝ2}oѧgl$F. `TEw"K0)Ȣʅqml"O8*cg)`y96VPJ ã'҈ruDA5XԲL 1;T\!F|Iߤ~(9_.POe{My ũbMd6[ݎ{cr8EDV!EF#AHG@P.Qζ񒸉x)^!oy F *q4SmJ 1hdxT&xհ&wfjOD/p[cf졳"E("CtX7J.cD Lq) %^ɀ7[,^jf.&X2\*V ^ii#hm\uAKvoHsg V<*Obs*$\˚#jC~&K Z_Y$CJ[_m\^*:`]]/o XDz!(s^VMv,%);oyp k mZRC6Cf8ʘspͪ j9ԉxQTd NMxD]hys2k &(Һ2ڕB㊇dұ$1psHz"6:h益_mN4o`hj{$LR'u0:.0X)3_Eź_Ɇ|\6$xbMZ℘sW@`lgQbb eD$*KD4>" D+%.CRڃfGYS!!9;Aj~dUk'ER>f>PM;òYҧp$Mu }SsqTo)*}. [*wFZc_ S$;'oehO-U6t^c~KltRV'՚WbhWCids+廠wC&$'2gaZh Κp}O}-kQBjģN(x}6$=P <Wrɢ~.r"= p޵]uP7L3=}.^ĭsS"$3 gZK"3ܱ,ޡtg-1Pa+!Rx)Ykh#JOZUFgZ3@wtUhݮ-ꋝHj5!ڄt΋4KJQWěHʄ8I!"0PWR@. .ؐp0~9O:T"g& |K>vAnhVw>.?}:]_FFVLݠÈQ'Ҕ߫s;S^ˮ;2I}* mʸ1-{F$.@^&Xobd{:ִƽJDc{Dd9*%3Όpi .xpBBOj؍$ ݰcI xi90@Î5jI*=A5BUzdjN>T>B$fGy)-*[4ՙjyT4Y,E'Rf)" KWH㦥 L[)ujЯ *~ ٺ84@!{S LϯYb͕- t#CBxxqUiP\WTڞG2HRrtY?#=Wphwm4h5ny&^E *Pxj AnFbA"ooQ|-Bɝ7 15")_42ZV }Vxmr=j*Fl 5HHR ֓1]kZڜ$v',>ak\;vn>Vӗ~ӯ<zd}.tî&j ס6ˎ9~PV ؁ nH3L]!+Uƙw97"Q-#o%ii:➺g6y]Z~2?HwuCC B1|yz)Tfo'?;mmτ^YΙh-|s|7q 1`/?޲jNNkkלh"{f2|%ܽ$i=D?;ZUpmos]s/;`VF״-) NZŠ.9H7p,1]/m4p+Q-! <,@i\{zBqw)_j줣E{ƇgNJ_-Xet@C?㍮_QS5v^Ld;6&'b>J*Bo y_g)Q{aS~2#-QFZ(ڨ5nW9-y<٬BUg1ڸOwGs5!xEęk{fyN±97L``;ʑ2K_9XLuC-;{ X'5_%W8s0bhk#2OL6B륧 Hr&Q-Ny-$D!Ǜ\ϝlWa}Ku+SdZA]Ƃ9Ә a_{]h±Cͭ(|0,)|GA-t=a ; f@ٻѥw*=߶5l7n,y\ 0HMBk i)L'^$֭?%2Of71}T\[GS׶I%T%3UOAz8+lǬ4 o+I eN s$,4d1`?MIAm* xLȲ8@B/Gm"vG)}R}JfJ(,L"fn61ل|KOpÀ99U.޵s]s-嗾Z]6Y lXK\*]v&_<`St^AYvUS]uz)5ϗuHڇi:M}+{Ty=] qvHO)鸕nHf IFq 4:3vY`rV5yGͤ,I괟V_hXi[3Ns1TX7@Eź*X_c ҽ׵$, jHmnN(6X!'LʩR4W};/[!'UeVk3۽pWSi!*4 |-&D/< . 5̈́i:gG)چz#kQBu2Xa?w,[&Khu8Ϳ׺ZE_zʚQx%pHyE|y-gre &9Yَa,Ք$ iͣgkh-Ңdw"ǟAY,fZHwlF1k_|M")LX6҉.}Tq(GYBɗlesB<0.D~CUKL9# C\b`&3&= `O451+;ɟ J@nڒs6ȓ饣:G6^S5h (Rb t62ԺA@BRh8ӭSؠpWܩdQMG!NyY!y wsOlX%ږ~ 8z״`IiCӿW)jrfxM/iw^MKxe!u|nU6B>K!י)>xf<c۠6Xs5j;Vz (dJ$k^ Zi<>/#-#o*'Ϛ&}]xEMKt؄7!] 5Ԥ^B!'fק:5q]T Ǿs%]eIǓ,gXtmm J b=>=/k+]Qг\jgꥉZZBػ[3`aB8\$С#$:+EDsRsdå1:'buP4redtX(g K47S'0:@)ѬD*+lIx9Qϛ͋SFw^lfu"Wm^A6͆"pud xF/qȪth )אM\b0[YEVtF2q< q{P<\5=ѹ8 ,PzYJp%_DCx2߳2O\8WrjMzm~4RpZUvR$Sd}+q)s M7,I *q^o|બx%yle/l:Kޏm!~^YS~*F{L ɝs2J{QmJ6 ϛ[]q]sDXMlFDPe_tTRzD5_hv}]1TF棰d8ĖN)mG*Ej9_n-BbLM&V Yt tM-]7H5Em Cvuυk>W"jTŶIa3nmL̬H]^#l%u[wkR? @aB6WWTxaXVz MݗKyfxyƣ1:F&KM6pʁ-bR|6< -տ ;*D*.MR,q#U}TyWN&x:7hɚCkR7 \cM-syIy &Z2 O,CRE~XVVw,WeqdcQ0!* g\A/UD-i~U]`hL2"_Xԇ4 9+5B3Ԣdo?02n|TUSScF,* 9^X玏OO `S\ʨDH.7g~@C!nD(µ@{o*rcp__(3Mmw3=Gl&T '`of$17 \rH>3)4 - PBל[-vv3b҆sc}$<{' }\ei"&-,9@&ɑs`c[[ѷva8q_mE!*kmP9j~\Jجh#gawM[=;H9)b'}t&u KVΞmA=ZDf[Hzn dz}_>þBS8c/'R2=/f ODD9ΗntW6Ɗ9RKb-fROGȭB,5`&*>O(spPp\Αoّ. kZgi)'co43W\,p`}m29{:zQs`JN'?=cۀla~ !YRi?o[PJH#5S|dȣp'S1l܉O Xٚ|y5cL%!) 1NCfvflbďNӭwei-ˢ S_\ea? +[q#*8[DrNAO&]ie'nrfg+˭Zٳ!^\j»\S\``@˺zVҁ=.s5es6z+{9?|Wdütb*:TdgRtJb,ACn]\3Ajn߰˧+FA}5r<LS >]C닃aYCY 8jS O.K. Ym6_t<5^B*z,V`%C`A'ܖh+=gHH6gJPiRG5kaҴ’ T*@ՋIA+6BGopݤ灥ZZ,, z%qwoA v<+x%웺}v*WHA渚pri(T)N`(JykrʗI"㣴J.5JĩQnI|ȖAL-34At< ?,+9f<`SvŞ_Xyq@=&MTd0f@L?j#'^ݭጆA"@"cɻΐi} Agߕ :mjͺ{sseQ̖ fBw(ɪ~!kv x,$OdXcB @kFzMXm* 1ז7vY Zyf_E$CۅuP6ɜt*_"#txZɮNWvQ9Py6w~*";*c$,`C3Ҽ.O[JY]DI]o&"z?&r>aG?k7&EA幚1VJwk(LN^#PF9% ȓlr=em#֎,GPߨ3tR2ҀU!uYŸ 01͋4,s…aX% g2^3@7a: $8i(#M܋2KpW{~MװQE'aJFvoRSذt;2(Ⳛe{at&X8E+` )c=baL1YZuÊ4zbyOHb(gCGٽJ<_];p9q a ʏWu]+3:Õe~*B cH!j* 5EƬ8EW>$ c(Z':hN,00za#4L'4 !G ";_ Eֱ x.6H؀K?O&Üo@M I #vF`+4Zq<G%Lmd[d2~[;'Iᇷ uB|ܱpRH 0t"7REhהtA^egԶ3gti75eXfUM,NQe,uP`b8JB_,T֞o/Ԃ2Xɤ\ ࿆ӏ]bvʹAt͎UU}KړS-`[7)83/fg+&+,<[[h] y.,akΡ%RD?t. E ;}2= lg#뛜; gFبBM}d*"dŎ}fcBIԓ'bL\V *U$I jk%R|o!Z֊{Jpw;#)vWa2}G6-Ŏux jo,E B5Ȅ\#Jn-K[h|:-u}sܱA'h!3R8 xM=m hWn$]?c^,'068/"?Q1u ˄g{NϟTeȕ~d;=Jڨ~ Ein㖳Sw& 樰¶ѽ!ST]쁾$z9X ]f oǑRqXB۶P ]UH)Ű=5|oFљC7G^k|$ ׹ 3s_Aյ|vSF[|9f&OUCu\z—jr$sbg=KcyUOv%uB,$^l\fh.'-J:K2TCLCġ9l򁄄,40^O'Έje-4pC7ap0;TЮ*;U&G4p34;Q3DnApYڗ|UHOڇ A_jjCrˌ%/Ї}#yNM_c|HwqM>~-t)FDV["1q~&Nl* `4jd69<EOVx$du}?ո4ZtV#*C2o͏"{@#Xi#PfM90[x8sxE`:]VMzصUWnx%{aeѯX0\! C ڶd ύ_`;SRk+纋Q᤽qP&2YaPIѦqYJI5R˴DC+KeeQF0 9E]{;HÓN$Nazw,9c?'5PkPPbnCE <$ԠQG" Ӻqx힕9=2_g&(F~ɛ4l|~¤C$% Y8KXՉ,~=:~)~:" dK 'rWiz8]4VgB>4QzuϏ_xOzyK{6t ![?R_i~H L1#ɱmٴXN# ]hyR+S#3}Y3AgFeS`7ڦlW% VeL+8ٍs3^H5H;xY&dM4'9˻cvr3#ȿrF7HEdu@"! URàe {A/=#@Tut= X2He> &q0<>ɂ^r.ltH5"4M.QFY"Rg[+aQ,4k/.D20e>$BԌD_JNh:h6?üY S(nQכ-m{e(5ٙ<=y8yv.]փ"8ڛ"1j"*,7>Vo/TB'{!vL+/VT8փؼS mG MgĖی ]6ȏOȰZ׵zԞ<'Op҉/Ȁ:g㺦 ߐ$B# hjCj3]tfz{y_XC eV@;jy=VG\E#R?{0B.;hvTljn-FDuvq6R=W=|1mPV2j~"&?|&ۭOTRE9clbK (TMf˕+,buFlpxi; aĉ[&:c\h|d0oTpN9v- I`藡c_ED',Ld:/;!/BNq`k x[Пki5@%1ƨVLz 1h: hYViԖUFNi sd̰"^)`bU?͕'b..YbDW[>nae fr !{ɨ xg,+mأZ٣Yqq"n*8\CLk}{yi>l }i;)-j"y@ɝ e1YQiu"8*P\s+n bp>Vl,j<ٕd>SfJ)b9z?kͦ3U?Ηu?踇LF@0Xׯ`n3JV#gVF0FW~=g奣̎ RyBΨKTAAE$2TiI-`$m%F g S((51`)1PLb[cK֘dK75]2߸zM{B[Uoѕ@1tDZc ')+ߴi[CR6ηD^v+`\S 9w4=4tݭ#`WI& G9|BIR5PEScEK53>>Q ydB$9jcU]hٴu 4 :ƖDcoh;uU J/"IJ #{_Losܙ;Q.v.'![!Ld@|B*Dl#afԻ?"63[IֹAƀ=S1H\湉 |GH8:~ hYYd>JZ5_zDqRF -UWmP?gw/]._yFKC܅DQ6t3aO y,0)ib #'DLVǐApA)]صźgg#Ejz֧D( ]_C\Ws(Ȕ_GYnpiT>,[Bi(m-ɨ;I?e(3jE_O ou{}ڒNu^ \J6Ķ;C4{vIqڷjhјg1:o(䟈竒S?j"t ?95eA$ʂqHuW3uaqQMHpNj1Y=UWl< ]'"Zc$vC?ܯѰuk!ׅ۬," h98@f T*|'!,|gJwX FqW\!Y d%̜`BiaJHf~-26Ѻ cָw>J.R. 7i࢒ jϓ[:c!Sw'޹a`L?G#_l ɭ49B(`5h"C Y|7w(ji"*۠'.ɦak[_Uzј9aɢwzneq,X65Lw|ŇzԿ3VCb$ɴLl0]VQ5%9c(Ǣ&* _c^+ԫ*Gg{W"Y :Uc擞fʜue9{Rt+o8m}Q,k{'`G5TpC/I3¶5c=N)'^gu=3s}G9HDz/1&76OL3H`ilʥ̽r)ƛ})Cp3_b#B>f|& ~(ϺيC?hv@@ckqJ춏3o5{sc\%z 8(]AqbJW}zd/f+ҹTlqa7o NO`F l[-?HS#`978Z#("F^i墴d/O棥T.O5 cY A/!"Wʴ~bo)0py6Pus?B֒pj ( )vNm)|^9Z5R8&du(pĽ<NXKvz>hZ Oj+PMK^ݬݑ$̅G+t9Y8}i\14 EM󀩙oakZtH|WnTc8)GqǼ|SW 6;jBxSog'E OBv{54x|[^T .QN!?t!< ^$W^|z|7vL^E:x^ֽKDX2v75Ҷ2afO>Sh?,qZ\F"c8l7l0s=˴9n(Ɯ%~OCc7m)XSW$%sLqW]Q.Uh)T\RDB׍l9 =7 /?u8 !S3e1,rޑ? H0Gr1iR!11UVGr'GE5fHG$]?X'b͕T <? HZgB5pQ 2[mspEZ'tt*třӧ!\_]dio`Ua?tޮCbWGKUB2wmþkVEأr%%{Bl,2F'MΜtz/";{S, 2A`iAp$(}tݫClN[i5sf4[x-x}B H X0+.ljwa@bU7g#`Y1 _;V) ޖ K*U]{,g) s}SOSs@w%LV mYh{ bMm .Vq X,EMm0zt{,(-ϻr_=WJc`t4:A,a&`~RSOW_; 8mẓ8h@oϏjgFSte_5FGg0 6 Ae#- sH2۸*? ۼ:Tzfӊ;:!xڇsWLT~.቗YDAۼu*;yz@ӊ]T@᜞2R[BwPs-!5U޶Ta&nݐF1*m@D d8xKR4@~owB)#qsfZ~_v-}2qgUȡ3Lnԓ4/b&_ɵu5q6nrÀ" rsRK(GD /zt_OGeS31/M?3fZVR|M2gu'VVK񰘥}4XX9o2:*C'9k}n X3ψF~Q̱gʙ6v0(J'a4, V jfX];)}bkaKpC$/TQ?5)RFOMv*$N'8k ^CX C%XR Je 1'[G)/n9ȯ"f_SG79'FjTI*aNK~>lzk#|@ {NKQtj]A s+DMO~%e/SG{XbAcG!w?w4.i/]8kEv@Rx6cG.g{KrTYԃlGaj!k?c`SBu-)#ӶgsTvAa5= eh!) .MMgc/V/w1{&/쫞=d-X΃x9q ,TtKhcl%?_2ਚ;zK&~/&MlA >o$ :$tTwV}gl;fBKKf0I0wi63dO[@-oL*7EwrsT~#s-RxAWQ44'5.>Zo[C)ciXS|ŁbvI O=|bpw>([*zAJ]bd ⑱jIM11JUߢۉ"yM6#yJR47TLv5tLo@e-*F4e.cYm(ѰBr_$R)Q:EH6R9nh(ڇVǵR4aWR]u8͖oRDx] NqiGh9(w_*)͡=̩k崁 @@ͬEBm̛/pyr`P!okƫ! y&>G5iP䌟˻b I9Cke?|Qm/mCu3]d3X}{USbv2+hԡD"\(\˨4t>\f^>Xߝr*7&t2#*3|vXsgTq6voZ]`Η7:ri?̨vifZ~O9 \3sHDfZM5ʕgDD]BuB'Y & ^|fvhm@ J#XޛQ 卽< lW>0CagĴf?ROG-ZCCiGk cH tcP!9gKɻ8<`Q.'M‡\CpO28 ɠXhoC|\w/Jn2!&]>l$`ơB?R8(uBBZq jޜH]< 4t_ӑG: _#po9C;wZ Y/{HZҩhɔ}L/V=:$F1:ϕ<_ ,,8h"Qw]RGl1nɌr@#Rf-R aىtJ ػ'k*Dl"hT_{[搯륔:q0AbL <ݸ1|5\z ,kI]}X#=%£AeD0IemATTĺbZ #Hh)IK~$!-{imhVڷd];KRb{ICb-g4_YRVXqD9tmһxRq8yf)kUB˳Qszg [>HrL = 7z"vaq$P" I'Kq &!ȣk7J_pJ#c}0"Aݪ 7{K$-Yٸl;E>hM97N?BgÊF+.Uqua޻}̠ck';F[h:]EN&>MFD,/,(kn "4OB9)q(QJ>8ʜj#/S(ꔠLaqn#K{-UM`xaeաT؟ENӮ}҉3ȎY^l*>K~C?  7 NGHB쥀)3Vk IVb v&&tn|\ٞpKo j4o>J6\ `k߹zޜFɩ*hΖ9x/-K*|y翄׫(ƥsil1GBѧA *QBb̨3?㭙@W\ _ 8Dg`,_#2׍_5fx^V1N 0k+ QS"bd>V?_YayЗ uPxط' 4W:(D,ufd9'{Y 4C]J*}!X%MYABQrSKB*!5iB ed=#xFU_ ?AJ3ǿE%"G(v%a/{(3zan7?rĥ-~3lR%Ooi3;B432'ޟx3ӧ)'؎P56 Q#nLVoO՟uW&dnv6jyPJ`~M(k}r9YKK(QG(~:*i(}gP-h[B1NOG5lq@an߰ SW㱃o:L?oHm)i׽avq9rP'-e F@s }A&P">rؼֿnGu|$N~L()6uC`?8vɊk )RESQl[ c!Zhf| _kM2ا @=0v ~_n4.U;#0\/f:g xpf.0 jࡋ/:9q M|h0(lLKW(+SݦDŮAsQw^^J){"|LL,' X::nz0gwHk()5qT4Y@gLoHm zڙBUaOUp OYB+}Bq| DζAv5~ؗQLg2ȳQ^cA/a&m5w980R+0 D$H]赓?7UA$3;Z̖uuL%/3)D4~ !2]牺q(63xuK\xyL1;"W@nooЖ;q[UP#Fp` qY;얯2<@x Za8.O P:o }c6wpŴ1z(bjs.&.\d&Ro3Ue ^R_e#Je|NAYA|AHz2d1_ԋɕ9CTp0RyNS7FվnNB@Ý֬TWa/4?3XJ63M*4!TbBFX%^+TN.!'O\6洿 |"J~%Z2  ;zedCrdbIq'b.$}H3fR\X5}lK)>PUuoYc+-WnuLm9H-Dk:b5eLFQK1-{]3V#{#Ӵyܲ?:aSfeY}Xj_L@D 4qnB0?1|gC}JH@Ȩ+[>>TxV^zd19%[;f&&8n$]4O1:%HjMK6@o̩03e͗6D(t/x3'cNrS!w?=5`=~(P rBX,u;E ׆4CP.dHq03e?` |IaH1=7?/=D`pynXGޤ~TRT*2me뽣Y2d/yj %˕FX986n;钧>oyT `q: Vc J3}: Q!zabg.;k MtDZQ4OßU.*bV@\KӵcP})L}~*)K 0$9/~ Ayjh~>˺p {(5uGԙ`ps2%JDKf9o WM.-lvg0U%j!i.eOqdJ -݅2`jkGԓFLFPuw":=2V1cTKzʼ)$lS4䷄01'tJ~` (5; /]']$O7om4f88I#Aic9h. I1U$1Uq(C8% b S؋wtY߁bbf[WSŕ8Vװggٵ 9_qC?O3'F4*iQ׶O@\{V"| `.jЇdM79p^(#!ЏU vE=CzŸsd*޹zHdùvs)? /6^;0!ѳ FCjt=ԫY1RńhGe߿u]ۺ5E 2=솺QX8R&usAs;xxXpVHnR )vyBТ[Z\܃/2r;vTǦ옴7Rw39L WC7;=0PbCs{BD6&[_>}M%_$}!ȪǤĚ񜭨ZgqH9y-=4nq/nh^m(Wr#,0k,dGBt0 rp5P\>FdiA>CْGCǦ*B1\Ĺ ^RgEfB#}ɽ~2P 4 INzB]*:oM7=Eltpn" WhX ;MDWgbnk3k6++,<wx%؏8q9rHt~GVk[׻Tߜv&U7`4??Wqui޸^qᷥZuAjzOK3˕BbR7O9дm]t>ǡ) Lxn/5m@}z9칶q-Ъa7GrZQ ](e㌒]3:|]jݡnLkV g]A%yp&*jkWzq(ʘw):~k* R91j<Oڱ武C&) ] ZLqgm$bi$P$]1gӲ3-@mq.(ol.g6h³9^{'tv>X'#nkA??]jfag`#_y$ERI߾qE-ՊA/yGFfhцANǫ)%HehvQL;V?>¿g,ԾΎ QO6&6l5Ά*qYJlVqTז1K9; Ο=ݞ*2\9YM}MKb9{ ]#`!e<0 4W 3[ 6!tbH-%|3G5_ډܑ!io:8 %ǥ0 eWxYIZ}eNd9%(+ąD3HtR1)nY&;Bj] A6@}ʋ? iQNHF@t5C} ( aF y4 BY)6JD9-<ճBÿ7pb6Db= (Q]tfor88H E$?ȫiź|yA FY eEu)'nDd@9 g™L(zT6IZ&dXk1!6 b'NyIui3C _T[(Zh#="5m`)hAImK2@T; 0I$>^nf!itg'~ؤp/dG-'+_׍= shRWzoB@(U Aq{f/8/b mdd#ʘ'ǩb$>Nc8}4ۋʴkm= UGV2oXF1*’b\x;pQǝl!}d*] odwK-\pXeFs(r[\yAϪ"aWc}wA"j0dҁc3"$6IsCK[kKΌRrkn`l1=9G:#-{)hD͏|̨q!0XLkh'F{'iաhJ2C;y__zX 88G _ݽ>&j\/3ǟkLGҼt"uҟRTw\r ی-_?WZAWP*yR u{Mo<+yͨlHGkSB3ӀUՏ Yl}`V;ysD䆂ͧQR2yʂDvw"!YTdrI.Sᯥ.>H-{S)Bf c#L$;0Z` %°{H棟j{0>RJ5R2^;lfpd,9#b_ݑLpV6'({#$bXXzAYNBl'c e 975hc1MZ\>֦z ?@7BxydY ]T)JKT b]姞>6P]X)ck=OKY嫸=㿑;G0[W=70#\LEeZ!@gX- ;2h)?Iⱘw=!I&24QMfKd;Me;YysyQK鸑= dG!>Uq<3 f*γGJDb+l8!FUqopvUPe 92A#>OmpkJ-".!`c_^(ʲyϹBŠQ$RxsBx& %k!p\I* ?5)ʾ4$nn0myyiv?28XSYQ5[#T<{G[l:Cág;_ǕEsA: J0$CiQ &O]u{b䪥~p!b r:D: nG=?>&uY35) OϊDK-Q hẀ!kOșG8FV:%AW &kzѡ|"͡\;s9j\C<Ԫe݀j[ e.i*ؓ,׸}ensSd;L{d]ޞν^oRs]gBl^ٰfYN*z!ѳ<V=3֫UՇ#ˢ nU. XP$I:ҡ]!lmn\N/> w#ff~-6 &s l#'4"F{dqE76"A SF12"(*-)EDx~g)"d&g qaB9kwDQ~$K[l |A`^L㚶<$%ŴA6z-~缠 7׷q|P 5&A7#N:xTS @6 _KL$`xڡ"$b1QJq=m5L5/ [~ áBP}nl`4;&Ae~rw9bC?~R?ߨsrxLVyi0I%ع"q:u#uwINY9,ENPnģ ([3ikJzW֑I@h5 :ֳ XKZ$8:R(.:4v-6cMYkvy;gxbO8ߏsIc>]!¹H}?6qGwa@&cT}np+@$+`4۴nqUX fBE^}q Gu "Uaӎa:%b\DB)æ/r:2k5)g5KCW}!Tq4 A[SᆈJE?Gz|:d]J`ho`[ph{2דxUf:Ӛ-n\  BpEaAY0 ?s羟cn,9 6e GJZ{9S(fݺHq dt6*-6lv35:"J9._z*1y=t47Q߅+ bj #YXH<ٴYuĘv.ٟ▦Nw?dƖ.JTIdA+Ɍ(`%H8@4BijsG3.29yI2Y²'3E1$e : 2vSCX]viq'#SVKAn?*d ZU,n~2:G>X#[P 4O!I3pIGp*e-_i}*j"m]EkH[$CxH`FSMj*|z?A(+(ilueUYk؜/Uv3Vtj[l 勤^7*~XJDb[պ@'[1m@r| ܊BǦ]࢔j;MѹK9¦Oa_QL5REO5~3_0Vz1,t^+'x$?֚Kec[?.Jt+i2jYoxQ>ܻ/5Tk3C傲hUYNY~uɆvH)THV;8St4#U|}/y)ʷl\{"3l->P kδ&vO?t4g#O.oUh7oYy;Q"Lew65%;2 InKT ͸bH*Ȃ̫~No ncVQD@sd5 A;`NcoRK^!3=2a, 9ehF2"n|8FIMI/GKY>dJ.euU4]Q8d̒,>ĩJ:nZd^PkD 4LS2(ZeYD 렞A/oMB(PzA^s17SmI"v/Zdؿvz gA4>=HE4K{[fZɧp%|i K^JB7@+9: ՚gecJ3X %\(ϲHEN0jR9{IznP>; Ij/؝$$,:VE~pOܧOGL]Uryh/ҰwU;K-xí#?m#+ c{suK\&<:i>Mv|X#bhd"ym9h#k7AS)UOmsJbص f ݏr93u[Y4VEp_ܨ,|!LUILjsr`LfZ%>X&UPn)$i]oչ0r*̐1ղ ' D1hÒ8v4 j=;Xߦ4)Gp(g!=Icul7=϶ >iGRI3xCeHS1X߈<'M-WcGX=/"ӵiN^P.PY+LDVNcќ'1;;h #>$oX`ہ($T/^~e{ -N~/YwQT/;+U 賳ҶL^Z+`J-L˓gp9~Nd2}.4ขDhIźW2?8⟓T<[7q%7 3cn_V̅|?R%[=!z'Nu&b;iGHWIS6gGJݜ=ˡ3+ 8m r@rD"Ӏ!RˬJS6yp:(jȎc/3V.3}Z7K}xg3NrBm);2IW*a;3ލ^el^ȁ`uHkt>BoΖme?8zucqjs[*.cykY+ug-MرiqPWkDC}<7Q9 @m\+1ebAڸ&EoJ #wK[R<_Jg]-J`夦¢_ s_|σnm:&wb@F̑LŅ[h\4_#$'ۨm.ٗ].1`%|`䟁[o#ݍB$K# U[3]`鋮hm-! Stt17keOw@"cxY-Lnҧ͍3 :ߋ1v$e0Ywtܳd751n)cHˀE,lXYjZ ҄ZyQF| "o}KK)BL`ObPJ8q$ C4LĭG>RAJs\O'Cg,~ER9 ӎkknCA ŌHbBO'A 4_>uY*v`S!⌻CI٨>?In4}hZ*$w@x0@I*W#Uh+qqJR;[@pᣰ4% |`-޻t7K' dR'F{G͹ޤೃ`)(~ґ`:@##$tbΈ,2݈/Y[Tx$-2ѹ3 OGV2m޼yNA .Z)55 It#_#_8 $Dcrh[]Ye_?,w09jg' 1!hHEP[zz侒X]h+q ꬰxwEߏWhU7V{FQ 9Tx;h߁s#HYjǧʖ]hLnK@%_8/O8,:1Fe)K^P}c|? U̬ q_,][a,k><(c5%\?894lw9{r(I^M"s9u g,z0;6UF(k Zz4{jt?7SØl.xy&k^Z.{~[~YM7FK 4ЩoσEqZ7{j݅c>M[S:eDT'p\?Qs7;7 _O+kZ>G;S'ejآIq#Vi3[],BQ[::yɏIq-G_x^: {2/R <_u0u^UF0\tt W1\KP.[l]2 fSȗ4=pS_De<▗ګrNq ӛr)HY\(``]K03oEz>Rc%Ӯ:%m]j1F*0kVa1Z QQ{x`b.GPmg쪄_ANue2/偏!w7@Hl&"7fFR Iu3d.D/`jU2ˀpYJ V їW"۷ii#DxPQ**!Eea`Z黼vR1JF_A~3Tb&M؄eUx O=ܰ'4xHZӋn%TC*YQ2Jϓr= N?)p/Q%Ti~dEJQGMLsC?,uyΩ2Cjic֍$0qXɟm.OimqR2 z AF V:_c瑑 8Z5i&,pȨr;+ں6V 1S!yw~BYKKpN,ektl7d=f.)w`SӴR{ b v}iy6pBMvpJ2߬7'Imkv_lw| ??9iQt*Be.W8}*e9VʰrIlbVg]˿egVh$wmh>4Qik3]PL~LWMj%̙X HΝ9Az[)xT?vKGC (_o b\^i+7-Axt;]q&ro>M3ޠusI=O/箻#(zy#oYy HPv[KM]'3Q%rA@5`3bzy֦yZz>^-W.ǝ:{ghz6gNp#X078nq+"{ZLڟ4 NZ۟pOMcxD]ī\!E. GK ܫ:qw cV1k D"in^dWo3_H)z`>uE{z!9GB;p;Snq2vW>ܻpm󖯔oͳR魉9qOxpXՕL~,Pn+xxaXAbe_Xg+48[2;n|#+0gyv^:a WiB:x~;Yl '*HZ+Qe.%Zkz0G{X\BNL6Kݔ8R}NF֗kQV= %8ѧ9 eu0{kHʫM7{IT4{O1zcɴ4`XI;i'_cAl7>Ԇ,ޛ!D{b hIf4.J\"{PD%R$JtK-23ފ|$3jK~PA.k]|EQbi಴e#E1Q8;By 5Bs,("O2CmMl687V/TZxAg 5oLӍٓ}TY=S`dvj,:(wh ~N{ { /jR {<MO.8DFƋo>nd^r6 ^yKin ;L?:Ѫ?{^cpT(VWhnA" s6TvMH0#LU_|VXgZ!mAsqO [#'D7 ed *da#mW8JɬMm1>0zLgys%CkB<,,M9 N%/I:by0U<(Zb{\#h1"-ɴMr?/D`2謙 /%LG!`<գO)^Zs&>n-:ܔ[o|8![ۂ< |qUmY= u{K * ݲk`cR$-0k47>t2W)ƹ_Hm :P5P (*Rrk.$RZO@˕5ˌoeY"oh [okr]kVd99/˝)X' ܮ+`q4I$̗PbZॴ dTjV U҉a9%-{H%:~ g[st:k7TO+Ȝ[ϠʵAX$n6B:'1Cq޵][˺C2x|A(ֿ_.W'/t!.|xe)ChTf7yyƱ_qI](U]m?'}Tm!r%Zrpf,Xzy;~B9~wcB// p>N/+NX9GZRR_En^sҔ%ZrQ-ge8K}[k0qpcՕ('( `>'I~$rTtmIC?ѷi_ [!;T^{udHq&o ws.aPGQ E`#;{m:b[@ 5 $Pޮz,K9!!A#5fe R^)j4Q#{>EXBrl%H f%i{Z-(Y) S@_҂o?*aCY]h)C]?X u$ZvA6mǖ_ܲK;F鵔c趈M/G$"[ѯ}e_"rV_\ v$B:+#gNva}ՊeHYW&:x};m  Cܪl 4C2I?\xta8M#xWJ42":{2BUVpj =~cႻ 2ځV%>y#8g_'w.m{+,7@WVΚ\L ~BV<‘VeEܿ^&U+?!~&U(@l4`tD-MI1 KtrEѭMoxPbb'0x콪yDִIZOU2 1Q>/bq8Z'o/=3Zy0[t<5B:5#e/VF6+;Lk.WTWV;oa'X/D:Jd=K)Vd P3,ϖ=tA[lY$RzTM>+9F; O\1S<[O8;0-Wa%nx<1",?Z^nhHǑ"Wn|>Ȧ\NAgݲNڛvnn UG39}{we{reLfl8e Rg_i79+T*[!DFn췪yuJ`2R*>q JfB4j* J/KBe Pⴴ_,E9ΰ[լQ4j+,eZ합Nƨ;lI3*]>6. grC-59Ypt ُ,ٔʆۂYL S`@+i]Qh'XzⱢ.9GAms^~׹{ATlpE߀j,՟k %dYĥ_L'%Q.Dwh0IGT xoL|%^Id7>@z,Ok%$qbcz3'moBe<}3̛ ph(~+J; hp4a~9V8$xeOZ |Q7)uN1W~}HН%s\Z䃴 &B+Lè 5>wNh7c<,ʺz,jO3k[]VDb $i{F^,7sKkduEo #|=7QGB{U斩iڀsBA.ncQ Jٞ1'4#Y}!^RR+3ctϯ=Myѽ7[%AWk7fZFt@drroE m(_V>h}okLN8]ePFj4D훣 ;!$?e$o2ݧ?̲ÔYWB!nN!5>c"VlT|Me.q%vDGtq̻@ïey5U=wl2ĥM1[dZ{XtWS\ Š3RU<  t{%opDC}S~QgC<^iٟ˶cj4&aΡ߅I$O_)h yEul3I*Z&%* iTQI|# WM1vgW `)p:)#'"cɣX`c~< f1iE}ET:}aYu5b0 3Z*ex.]6dPrSɺ}9R2dLcP ɽfC Ѡk OL@bS$iD4w`;Ŀ0Mair~2 ƨؖ'5~&uњf #D)2GmzRFcN@ʈZ̶F; ܥ)ַw|G!Qg‡&rNw~ݝL}>,b;bC47tsC(u5#T\bgS𑚚V6$HqF1q Ae1'euN'OE/wuZf[cYT7|?F9/pi 8 nim=wl9 }74${=E:(uwQ>񪐫eLZ:B^:3˦'>*O|nf@v 1𖎄qIRumqhZ)a*4g@p%0V byYj{3)c#JHlܕ_% @Ȫdg A=ER:5# B<}4Pڊ}]zx̝/G?b!eQsklT-ތqB'}{5 7siwkǁqJ2y.(U%'fMvl^gU>4L@&HP~A{rr:V}9lW.%oa)q[Ӛ-Z}0чKt C{sߧDyF;zt۝RB vJ_#΍cSbLnsG!gz99N"`4>D唹 ;/̅6׹LcSz]}l` N;Ojņvӡݠ~h- /d~V ?_j]υUdHD LfJ8p*k,k@oETiTEɅ2k b!ɟ@6ct rse!G^pR?ɢ%,b aF{ȇ㬗1h3 Х(kW^e*:tti mt * #(z{{> 4.؝akz|#]'M2I9/Ov8[~gH*aˤwgݮk>DPJd_mNeRd"V5aL3߰ ? Ց.g95TG@tS  T\ĖK>$rq).-ߡbZ\u:\lJ|r(@Dx)IPޝk틻p]E*u)/ہ)O4VҸjHpox^tD<b` <-ln&'v@1QQ 'u Ć|2i? \#~pJ+OI=?5դSӁwr}H;Xs|B{52$xW{~ٱm=|19xLĸQ׀(BBd|mqkX|?"#?ظ)鴯ǂ[i8Nҙ{^YNdB_5߽c3IXT4wQs7K{S A,,IjzTPbpز6Cn2޸ܭ Mgq_fXm̄ߝGՌpLRzaO!<2t9*BΎd$(J)>M2ftҋeM,NJ{JUF B ersuY+5i%3˂p`e_בn&J[ػ1RYs$ܯ"حBovVM_%k-Uʏb! 6ud`9m6x-8[rvd̊e;'@9g:QZ~E_ I-E` oc0Ü.;^}W{EAzM}fw֗XJ-#=Jnڲ&7]P$[X8HxC3|LE\eqث?KD\+#!ϊWi=iUCI<=Hyݰq"~K"ա1"SF c}:&>z1: )kd Q o ".gAV!zs?+'}S-3\aܨM_xTO^5@, 陣/aNmHs8H4q%$5I8p"+HHՒWaBg}{Љxa%Y};·`9l!p̸&i8wdn'~آt'lCF$UQO J){ffuC$'_㪒ltV@]6 a \`9Q_63γggak-ϹUQTFGʝ1HB {د0~c=N̋:e,}UmBlX#]%NQF'vn2RRqX2l BBi&NdW$<*\& ޿r,cԅ0銠=Dn"se5(SeuI0uҴЁoKI C.z}bzF ]^r%e^$?=pMXXZ"{^c(!O t2mxHJ\|K>V1}"j|o{u'pj$ &>&n̂䵤&}n=OTy;.??Z" w%9lRҺdl lH /_ELݨ81 wtc3\n?`U/my ؍'Y"sxwljxaxsV<:".L3a\tdO.*\N>RbIWP!1awԾuRsg`!(FO5J+QB֬v,PNg'cҞa`_eބ\MCO+F z;^ ג-t0NIyU$?R N.$m2C,cZo<#M$(N贼] Uq}P=f mTd'jEgf^Zp58F͋c^X o?`P8< Lcn q,;='zۍ kTN2'B&Zqvd#~M}^_Jŷ!=]kGV^HS /v3|$bvV$ yI9ZY/?`]χҐ >Lt>ܺ %Xdtgu_6cՌ }_}L5بLJF[6~"[C5 q9LY?9boIzt&,ŭRm"n N{͈4<};[԰J3Of\ Da!U=;Ʌw Niz/D{VxL\iB (q)Bo{tWC)R{^ )jд0Is YvH$rGZ_8gm&E'deӀ<5]ɬb5~l 辀'Yqu&;(|TX6ȣ6?hej.t׺{*$@0dcM T!+VpZAe-R%*m).D6dd1TB@FGyg~ɥ#qS<ĕ E͝[  k8UH])R*A`!62E2Fc@&!bBw#tJF` w3Z1qa,TbĪ2?Pׁr@ԑAW#W1kDjH{T\Z 6=OںsCU 7Ȳh&J w߯}uhYHi" oR ~x~<2B{!9IK9DcW⦙ß)L7 =/f%n. řZ]f֎{ɿ/* rg>d9Ś}Pڰ }(g[hƐLg*bt6EHsnڅ|@*L{BsD`:o0djgju^,{!,(a5bIc! 5 xl@ⷖשGqNv 'NaaHK" q`U~˳/nFZ.6(C OPwnq8&+^ ndn/>XtQP,SȋBO<ُkSRqYG7rvս̺3YtJ{8`8ѽ5#oQğP{K LO wMe\vK^0Kk5Nk.hHCOùR?dw(N֘ߝ19l Q e2~Qy~_S Y~>`sl܂{B蜻 ͒ jb)Sb߿Hr+c,N(a!4g$kqk때VsWGo^#,9 {:`uvw6b PTWK/R:Peڇ'&,X!oDk*$\\ \,*.ci}w~A! X|ټHx0#mayc+mRy&ddC>cN(YX"Xɾ?d6/-0+V*Pý|@‚;Sv|.$ +֖sM#'QfJwGݪkK?c`K\ xy iuz1D-2_>9LqCMU&HumbQ.Ȩ)'z0\]!څϙF [h,qXA˒V"1+@q{ n?XY}H ~i3޴ƚ#Dܔ)AvHޱÑJX_v\y&>+v o8[{}N M5%z"L1@òvak6ή_|!<^!L)f&up-5+םuTyS3e^*X$Auz}\V8 kՍ,W˒j^d'V~h3E]+mhXwvB(IW,j[R086|.$;*vPnYCUq F6py(Z-Iwݿ:5~ +أ߿͡%i&mF4nEfiB -h1x (UH w9;KIH/B ҚP?1`%T _snNus$~;NM)M>S*>1;S^'8Z-Xцo?DFR $dh\\eKHzޛ +(v̏j7X LQ¨UJ^ 0+bp`fG2z'Se 1:ڌj` b yÀ@ 3J%x65EUVnZV0K DuJ@JjSo`ݣP̙'a_x3q~FYC8ٗ[,ɽH\5vޜS}BN ,!d ""CCkA;ARӮ{S}HGgUdrNmKв9 -m=kΪћ߬>G惆~n(2IVJg.ov}ˀx;iae?X^&8S恽xnpq *H~t'Uk`< [ʝ<$_e 0I|Ǻt@'{9Lk &LH2'U\IZX |TDG0 NWb IrM (22CS+WW+do9dN8#ԇE-w!I+ńBS(C2ykc`tg”nJ|qb'Qҏ_t ":49lVK/s68ޏf l%Cgϰgšz,_ ^Tڢ)= v(/=c8#K~@L uQwe({Z= '06Vß\ {WK4}/>'m@},y| %&%12MnyM̕F2MK_iF]eKc> MTVONJVI qGoF9v/6k7d H#^ܚ0M 2Ѣyz *vL4*2#vL^4jjngun_\/*k7 ·?pM duDb "fx:9 D \S/PG3vT#7&@܉1c+4 ;%,B?殯Ze2ҟ -ΉIF]$ VVҨ>54etQkml+fu|ڑPWMK8BV%Ь*ޞң~8ctg| )=F %L|@ ZF6:ˤTl3[:>{:/E|K a+TѮѹR45+ l^V%\~l }BZ]mRO-LtαݔlX.nC `fui[4g<b;͏Ly[ygHbmw uH&2;nwRӭer_4H*@x)BĀC*H'~ <7g u:l[Ɣy(܍u`;[i|QKIoA&2=laĎ57 вylRtOF&Bh̫r nY_6XeBt۝T)vRttފT/`@בOFa5#5qQhT?aO^L~q` y#Y,Ҁ-\>ԥ.0/!U k-ѨB̙q$i}"*v,uh3FǛ ,NJm~xSQPC[wKh3!keW4λ%mģϮzHZU99>+buJ)4M&6t_6~ݜ<TQ0߾4dӽc҇"swZ.+=ɇCF6' K!kh,{i!dxxᆚs*mzB ,!"PmO?hx -[+UdIScc9hO| d cLn[8Ynʓf {2[yDy|ɤi=>8 M;k83yh6BMSE톧XΘZ56OXL]%4::v>h_IOљBɁ٪7EK-W`8sAdSxV we2ʕ^ {Eʲq…CB03py+Q&/@8]qEfwNdz*˿aWJNLO#SXƎ fT*9oef& Xbo[OZն!E_J0tkcކ8c2OK u MM ulGE.0wwcGC"0ud,Z?łJmuh0,.mCy.:Ca#kuz4'Cqkh.Ndj6DV]4s1B` mIDB&b-Ka+ .sk ̊58V:S( e$ 1Kx}gSW7G@p nH"`ZBOߺ*h1u,UUW:Vb!lO!J@){wT-Kej|ͼ?[F=K߇fKvq!՛ KFbɎS/t$S; QJ|$FhR9~ ݙ~̮63'G!eI{pT(˅zYOfd.DlRQhlS'"a"ϸ&Dx3*IF;'WOC:ӫtɒK,{%3 UoE [U 63sRFJXstF87izt~0 #%yf,k ۳E\2EoC3m-]"1ZH0ջ vqMu.dNdu?c^4ޱ|FODM~)}¡.Dԭ " [8|uv^zPojI8Pڍr/P Z{TM9@nΗ}-6Odo:wBK\Sx}r:!ΟM9 r.JlյF-wDG8au2o>LUꀾpO2Z!Z> 7|P+Ͽ5  Jz 'H3X \Q润 +$K${s].5<)GU@\one:j~wBX7zzQWaR'0C^DTODȂÝ;["I$(t@!n/Թ4 P;=쬝' ;ˢÎ;>bnDZ [zG@Q89 2EYxt1|wO'LUWb@rYfj|JX٥ԫ9xi:7E"|H́9B\n5񬏌")51nfm7'^0`m)kLTN)4{ƟGvIऀw0 s Ts^l;r>1؍4N'``E,yr;,[mTᤊqJ*;~\Fϟ}/4-l4 x2%SLTajyoꗬ>یQ4P7㿛HlàDņ\kg\=Y^ v+sY0Q*~]x/]aT=[ٺ`8ԝ$ġ7Nz^EvF|jΖHls>?F7XG릙wBH鏜fa!&REp!6w2M濫ƛ^ݳt͊YN"ܟ) i2܅/'mNxM2i* [C5Sh~"ͱ!x|n[@KBi,|%u|xZQҿk!np^Kx+{-s s=j<]3-לM\HE3j#F䠲@k׃G]-&iZfNLLSTGx"GDypC,K^޺Dg$h?"#WC?,ıd ?aӎ681>jKoarFVjq4^P fϭ\ }\@d)ϪY80fV ,x?y͒Dd"U{Ǚ 4l` igr+fփI5 {r?h @ 2r۪O]  e{F`)'_z3Z:bZD4 [Ss+:22&( y%i彌ѕW.z(O_*W.Hx,Zhm_v4n`HF-X8,>Co&ga]A)9wwG۱l09!; C O|F,јJtb߆`Zlqe>+ُTjEaE2ljWuU!%JnQr#Le::{ 6!py_8ɰ~~w27`h|U+5 C>B1u~`jz]]ڤS3n@6d _?JF7Hag^)?Ab RT(,%zmO~45nV >g#o٪ˠ7*т k|ƂU#knD? rRDrFfHAo-<[VP*:g[>Tf 34Ȟ,f\;4J(Y: tj}8F/5_!Q̓=>o ?IRE ߿O0M{E˥tLt厏om)&L NdMZ1]9C}˿ rdLNX,݃'UBߪ#ʉ/5n*L; cב)V}.>(U7N%m~6fA)u>)Fk-9151{AC!tamp'* "6 7?AXr 5j6 Eǡ i‡rfrpMfT x"rFBt#(< +րMnV}~3L&ä$ 7i┹8 Jdv6yj< 59B3DAƎJFB( HN-.="\kt!\e-OO%:ĠX]i~x x&] f!<$]ݨ 14eBkcSBq{ZgrSX6:7sn["}1tTvٕ6֗Dr ODTnA|KIqsUa^e0 HZ[~K.~Ib';,jjP6Z;D%ݿU6]\\+D:1},÷ c#O` w(o`3pOvjj$s#Gފyplr+g|\e^JӅ@ăDEНw^kˀ>;>'|*W؂F6bPdxև2܀_oѪێgy`DC! B3(aj9yU*ՖbN)ab4:o%]?LRyBsQ*88D(~#L_ǡl_i'JEZeV|!ƗZ?聞xb#:_o4ݰu7Mw3AwγA#htnv-w˸S <*k;o$Q a3d׊C6 jhUlE?_RX1F wy+[>=Ҡ쳝 &\_MR?'[{o_M8M[.z l< v{ƕJNƥlhh5,$OCH\jr۝WX?$qdDqIyc yl&?d=hж!xOA R>\@MYF'h-f \H \pzR\#QfߜR 1" 't \@8Ԗn87[`O؅Ik3|HXgTȫΘ(g.6t7}-gc(q a QXq-#ʵ^Bxug-8bܲM:2ۏü mEĜ&Z)dn-7\k>ͳe?-Ui# q+)-يjV*mT`]6yp'?1joҶ){T2@ejQYiq/lm6sE}8E+~ktؾEo ʉ`y~cCp'h-O@mɨzxP TLA>c&3 2t'獗F&X*k;S&ܚ0TFwX}G<[b鋰efE- 7'#jlL\]E0FpVD,ꙐU;dSX. x63!o`WkW@}Ic+E\J 8{F${=2?| G;v+=l'h]^㺟9 \ T5t!0ݲO#^}h$|XFarjof,λ#!e8#%|^/x:r7Aa&^&Bޙ (:ifk7.T=ЁB}Iw,t_Z@Ӊ"xIe 'wbi xhp,7X& @}MRTtUxو€ew ލT Tg.f2 W~{6$nSm1OȓG vER˲2if]1YaAʩ%uO)$VxUi\2im͆_KCyїNT*\;My8JPwgg e Hlz%] QMG+fa̞as,A'~9@aMFV}C!AFp+5(xO#᎓ߦrk$D(1-^):L96V'\ q%`8ΟsmSxWʊqbhڻCpx>W<"kAaf-<l\= D(y2%r=a@AG ",-r2\ <":vfBfl~yNk<IC}x1m2 ~G+)H,% DkkUY`J'S3n 3"|E5@WF} SL$M8f9 *E6d,%a|^"8":1D'om f4ˠ5;4:FqvrQEPyF2q^H\*LGJՏs$m|*.OtktI4$tPS$N3K3 UP^q6 /y,h$tkWSFvZqvjFʳ'+\aIP$4brbr>'xQH5>hLy5b;G@,Z?,X'x] Laʯ!\85!٧TNw֑\O.%eYutF91+aH*my`r+QWy 'RRH(\!X+Q o$c7`TI~( y}5K>Ev܆N$?3F]99^ﳏ˭Lfy=cLD.›:G s|(ZVJdV;Co{EV"Nߟ5_rE.D Rӡ?,i ]ҜP<ݨ}! ϋ *K)o1x5RB-)OCAwR;V|L_eOs 2i;)f22"b>חOi&*-pYv+ \ fT oېS@YxH^>SqDS צ% M;YK^G2ΧzԔ6ІZ]u.Xi:h"#h^/_Paip˧~O؋Gc;^vs˛Wc}x5G%ZĻER"kcCr܎0GwZ߼ĝb8)K$OSTL\RP.WX@c?en."gt$_7y=2i7>apqW J *E5;#nDbzۢ`[ԏ*l;h2b0X1MN:8z=oln g@/M|]%H݈;="е Oq:{}щו "Lq~!:J_};L,~DX_yw3.񸅮z@9 ([Z)̪j1[ٻ/.N^Oi(}|})('Eo*> #J7 x(3* tR(ʜzP_EE >맓,'PbfXP)ˣ_M0M3dx͍d> \sÁH9HW ndFlՕWY{_$scU/DL~\W,Pu޿ QJ(;/m@ !M@j0d}qz4͗umT ~*ιWۉ%lq|~ Uv Z{|)#NQYAYkY|3LWjC&l]l QS\iqxQ 'k9i$X7l=0ebз;\Vy JwQk: hR#^ ŻNna3`jw-7o Ĵب~hh?x`RT0U;M '&oڊ>i<]#P 3( 9E)Eʊ'>PN"({\n1NsZ{a0j׉(/7|gCy2^@POn:2p\=[kJd7 [Lu#`p௥xSUk;ň;]6m_?KjX [:, ķQEXCTbp}ctBoSgSqչ$Kl̴Ml&bȶq?w ,A4 `O8~:ڈX6^?ehZTJ|I8hN# qX%%INمyJXi4<$}__};."^x%[sã6l>m"Jz)Rs uB瑘G4s Ϥ _\$&(+}p\|(F.'<>"қ"KwMOft ~ 1ͻ w ˪x,҆dw v,H{D0%rvDCƸe@Nf%?QE5AO`a]8k: CgWzlg& v1W 5*W'pȘ3tdh4cjEe3on@\5;bha*"vGZ.b"<pT9cX"JiNi8#t enAz6`eY==Q^['v&M0Hc"k`nN肧$<.*ZVSN/ Y5uk_zҵkGb?,Hm$#هF>ui힜nR'ejhkmTG:8F'AQl/x0.*9X)??36:PVw30<+KCV)N C ˒.O/c0ىBcCܕhoc+<Qղ xj>|9WidD]4CX^pF;kk%/_9Z pkFLcE߇%P N*uv|JQE4J*c}~ݖw1 tȅ^'`&,-yM~&EYe-E~;«O[z?b6_AX! f9EHLw9hȶIV܈&QVqī'n$bZބwݞ#b#J΍A sZd/Onc%5(˕2l\E ~̤ ^\0 RN aU *rn-@ogne΋G-aqFZ٧Cv{(O\ߊcbXL2H/4[qNlw"_-G{C6?nmm|AiUħmNEm Ȼp_,Kh˟}1qScxH V.ib)S4b }ݟxdH\4{ T+ H,3`ֲ>}ZKݜP1i+jwb&k\F] kmjP6p!a¨wA#S)>OfdY=`N9`AYH_&+tQ:16I\A)(&0tzY.s{hvA$"`c[" `bz= !~5o#~kxlfI*Ӎ;,xLwe=+VsڳI\XT!v:k j-PzL2}d ӬMŹ?!~-F7Z0ub78KuB}CC?=R87IuEOg[vAb؈!Fzs}a,3"' +'q]rӵA~3+{4.i+aCiPشhgmP:i(d@v["*xrFf+8bvimzwŒդ*д2Geņ^ t ů^ fn=GݛFB)~kdRd8dip8.k tX šոJ-l,Rlrg]VS^Fݬ][PL1cF(kc [OߌgڧqAX5_ ԎdF->mPeu#@|'r SM">4A<%⿴(F[-zeHFlaAڊ9VPZYHcU@kD-'TvQAV^"K@|85ADI9BZˋ"/m^R2Wq+H|Fwԕ9g{Z  H#,}6@8c_ hn` ấO\5#߂M V)#avf&p+~wZ-,"uW{ybgpWz[k>qhgpa.n{+%4NbPdÊ$]RVUy(Z/F&ԋ+bߓ=<]"q'g`2Ӌ-0 p3("DǮ0D1u9NGPgw6zo}HmBׇ] ]d1.޺ 9O~`g2]n{dwN򛴲^m ثIǟ8qkT d3Wj4Us'- K5!o3=|~&d4kWs[7k@YHiC1.1$,)ZҖڌAQ 6}ERf c;RWo3989v+|9Q(.TB,JgsCD..BM:%9Gra|:D[:= T`$ZZ6 h&٤?/ sp^)\&fzu!+rlx0e#6BUDj%Q 5 7 ~5xmա`|v#B9bO%X._}DeؔT<Pe=oaUÈ?wXe.2(% k_,ӵ픊uuRQ J-Lg8$Rױ`YrpBF|("JEg0juEԠ~B3V Xa@.t: ^|:S T*b!(}ܝD%\ oMj,;\y}bQMRgrS)5TF19i)V;wX1l4ֆo d?MSW oAᶜ#dv(.J(硛w<,ͬƫUV;.,iUVzZESQC8 _ڟG=>kWrPL *Ik2 :0Mk /KO{&U!-iucy\͑b0B%"Bx+G-0smZ)IA#+sl.2? T+df3-WG=VP<ݣFP)zsYH1?ޭh p|L|] H^$Es6ƑCtx,FDӹKA;(DDٲyjt&E!!$a6 dr*/pҗ-ZOsU|YM/xfX.P b'C.o<6G 4 .--oSӽ_x9L̋cF:g1A rc9*tq2փ Z$1IQ徎) m}acaUN67d[/ыKE ™~(SGwLVDOѝk#rh@[3Ms@yFGSg8HGXhm XZ/ W ɟRt]:4KpK-ʢD{~7 7l kDӈrߘuO9n-b39JL^&?h%X)&8ypΧ?mt3#r8:r4V)Iɩة,gÖU2]u4^M62(wR#gs, HP&oύ~zWeZXroԄ5/Ea;؎'=s28Sf2Ő8#^5,Ya>Ӝ@-E2/A GmO3`<gnLD> O~}~Ηy/aYoia'vO@hځD4r3\Pe^MGxpX &fxJ1/O$#h6\~aTNblɶ;c=P^Q# @M,-Xeːp(>A/柺AKƻPbD][-}nSC~M8}rsCU! 4{E}THVso% R5FlZ G+HڿIG#6u覫1_ N[%ِ<[ 'N^NnbFtˆ〷H},vOgb@%!"K'K^R8;迶15AMG;y$BBݵ^B>壩e\ 8>ڶ)[JϫBeDٺL/Ws-ǪP֯} sxʇ@*!.ʹb GxTUކ *`h2|FiZqXT-.`UUD3d; oM!VGV(r9;0j_4 NjXjuGoĝj߭4ܓW*g[5Xpmwнm2)i9ICf=Pk K44cQR2'R8 #;nY65 z$q(^f /ȩžj`Q|v< C^;'(}>N.Vٷx`魰ܚO/&^MXM>£jIyVw;O#\d;"`E69e@:d*-1L='7?v%KJ&Nm͹ ,C~gf%soεvxsN4wbQ!R /(}k"7Pݽ\vzܽt)ia*Ģ(ƜiLvW׉=8>Sv /`L^Y&˳h!Y3̙N9͋BP>W+lqM,PUu%teԀFpݠ} B+rVI{ZT]uS/=^b3Lw'qk u/5lfWMοQtA=oޚB'ÂZ+2MJ+<-=cNQRX9+kG;\J.ȽV}S;ۦ ;w:*;x<sckOHmAV`FRM4ݧ6_|!y!FZ)&XE@SK١G,#!\8nGZج;E*])C-Z[;h '3D4ʪ~xPr#eB@"K¤Aӄ7Yh; $X$cgxo4[Iv@46Bʼn fƓ7.ov 2S϶q[P Фkv@)410Vd􍨾T*}.3uRqqkh3 ļ>]B \}(e o@K4KrSEr61.DDQ&=F=a7 yN}龟x-½{ڎmՄlZpx=Y=?"N/xƬَ, W) ~:$C)A BuP< Gi t׊Ooh@?VAҧ{H2ՀINWX8SbNK?l,DIaYwҷP|a,,Q}@Uf!Y`WrIdwt,`5[45),?7q}㕇\90MK74)ՌH\ ZF ЇL  c>)Dc}_X#uCqLZ 4 :ٙGՊ 2?l+Jx~%0= >+uRq76GQ_陸|tkίGO+֤Ӽk/kLE }NKT8_vU"tY ,|mat7g)ԯ,*[ahl~it餥>_`V@`AӔIYt0:SWQb 7BXrO(Z`ˊm'!P.yg!{it6;wԪT=kUr0]d7P^P7svh}g5arKLh{t~|*B#?Pyahbgf,0#*GC'xo=!.%^Ea^WRjH0FS j(s~+fxsqg bJ K< gpNfD,K#,yz@g2i#P2bn RLK~ U**Rz,l%sX 0op8bP4fr7'>#(tv&%LJ]!>@VQ QND.GK-Z).~D6gP)ubUmCnѭh9m]upZ=pC?ꨗBzvZzry@ "oUGg38 w5H‘<~css#'sw嫷t6Y0h5 7iͿLhŸ& Z& =0*ĵz7s֚7$XL[S+ֽÖ c/%9zz5x8FcGuu o. ۳K2ڍ⥡#ǐ9$L8Ϣ98%䟌[GV68 ;[EH,OAхVtSq.H%ZyE8 +*ާlD/`"1 w]!stVH;: wnl { uLΐq)9XUY5=za/Kr(͞X7;AB*N@H)ĀxtHR_hĠ6"[Y7I'XUr@u|ܦHZZ Ȥ]:8`Ƽ~ZlgPb['{gvf71uf6p卿EߩS܍6OTRI: S#,6h[f=! MPz!mZ;KE1H#@HIG_zBLӄ{FY'Mh=HV,3S5ݶٺYcyA𾈙xLZx6~‘H[͂03u-b4׭!.\'~5#ܦkd'v;ϪSeE劼jܵ-/ ,?yx|x O_>=gBўw-jEy޶qG/ ϔ*bhPV9L 2 /m")\uW'a'M͇<0xev8]2ףH,K K<;)+N][(uW+QR1SLCPB{rSxٛdBJLgM֕CR;c=NX=[ѹQFϿĘ V=)X.y}+հbKژ4OoN4 n i{,;a +vNs섑*_FՄ-.X!AH N2=uQP$knC_f%!=6&Sm20>zC q5Qrȍ4(/c~rbqC/G܏=NW3$áfOtr/Cne+B &b P*͍:D ?DxLI8xja3鵡ྏz.%0Hv϶"xf<̤#` U)w%)Lܔ2[ӷ,?$PD"{P% tct'2~֠BBlV|mR߼pK}շυ%O^mG3T2 :n.5ZOpf:X|ypK6$ĕ5@vT _wTC5$Ś RR0 jv5ňAA)Cau YY-獖nREܴ<87"S [uR5iNjs3ZDmxNhLEJr#I!@ƫx`;tRL25E Lƒ-Ǜ*t5Q*ZH ?0n-)h2'*. \Jm8TcIe$L@ ~E9gwG$RpR\Ҭj86삛:&~8c2xM\aȉw'6q\) +acݿ(Yi6x:]z5 Cˍ!U7ZRn,Q&f4Ei@Mx9/A!C%.@:\wLv0^n,Y&^@D7n.C + ޓ>˶pZ*\Ԍ xQS*>(52_\f&g OK ɳ"g(u@o.7Pr"&M:ZM6~2[8n6UQ<"֛Rn_euogncL#km(Wy 5"'m_aM %_r԰9U]w`DI䎶W@㝄6d8.= 'Z7q]s:h?D'?~ǔ4[):9:ԧfk @$؀aGG7/K"`ݜs.s/_-b,]m|f'sUކrYN[]h>{g% "vyxH,B )DkQ\D[<3~3&B[kQnH,]*6u]gb1>T̡qyUghS3ii٩fe&%>N*j5C\߉H*r?'{ fLR+HhE7&@,gw9 {I'Þk'{! V")E9pK;q͖D"%&;mk|A .?\$ORKۗqgfOwsU9~S b~We :9~?(ڤ!y.WVي+ɸuiQx1la,>Qk<& ݣCS|{6W%W]!3}*9NcN[2矝{ ĿG[ t[H:gPûUA٥{']-.8{#<턃! aiw} d/n6}STo 0nYfL w c2l?@zQէ4rZo'h7?QWk\!N?VG=rJx;mfD%vJ0kN@Yv!#!oy͜\k .Kxy/}i}A4IkwLk^ Cmy&9Dv5m f&nLU KiVF2lQ~ME\Vm&|?{:NN 6j\nn+~dƶ Mq͍l\lobĽ:TL8ZW]\,uM 7v?oHTS_?Sr.7ؚM4vNh3>w?( =HyB=rٚ0yӷ7yݩޕ`Ρ0;IsX?\2盟C5!?kD:Uw4SD'VAs)JF C}5Ԯ3?7]HD20^1MƤ2mD+C{OM^ J4n<| m*1PsX}A_bD0.b6 #Hl ؚ鉰 )ne'Z"VWu53+hZ=4v0l?,6LX$kY1~4hE'Qf9ˏ nS`A'r/gs;']S<:ʀ {ٷ|u]%] @Qd.2]>z> Ƈi)WG (͍@ %h^CQ),LMgQx$޿/Nm N7D֩l+&sD!;zE- 6l3DŽj` Vyg爷).iX T >z+Ts WLfuI6`QpyvƉPM+!4|.RZ?U\9`}эέk;'S xk2~tcpMVLQk_D.1H:/E`.LKa -Z3,kN@0E}:F8s2)+O?OMٜ O 'e!6 An$97j<BnfEݓ#myT~ G/H~Z*Js{n9`^ب$%CnPe\M&yZiJ:G_k(')-@6)v Qh[g`0#Vu!c_,5&uB0qK1`eLqnsZJvN/Xee!3< 8a(/DaI0\*b.݉Aе%;L>ckllK61z̦H(/󓵢_Ͽ?~j`B̛lZ3d&Y aB7V/'>O+/\vlz8qoAݝۃ:WIT^NH x|ެ⾪nRZQtOh1QIo/mT^ >W-`|ج4J2a4Z%jyxsL.Lx0cUcd};n-@c? אu0 |6pՄroTr1ڣ#ZfD(iF\&~AZ@L;q0߲?x!D׺YkIcb%[ҜSFWBAF?l x\Gp6*_D*p,\&qĂOwo3Bs.#ȨS ct9p3]T0{ֶ%7hCjifKR?^B+Uvk0@jR7ԭ t, c)F7EM! u'f5gy$ !֋w5FڨB_ Vʖz7B;3 }_#[f WU S/鐡pA{wsc҈X~$M̤;Taˡ&a>ŁyQ*"H0CR#A;T Xrig{ezasKnYg@} f(4 nDJ+:3+\ %<4ߝ|y&?' Gq;cPVCwaB 1'Bygp0-IvbAA(g be-D$p ^-W<$왒ؒv&,V%1&rvN|:hBYsrL>S8cp<> Wբ9".HDd)LKDjhNI o7}lSUGE?Ȱ'zƵtE}KtF7῔+x5[@>d2+`4G',TsTOto;[lԇ +){m/f$H?q4\M4TKE !t"c8` [q&qHNNX4X׵W5AQFXCHrɷ;e6'?ߕjɌ D~ vpg\XO9l K,TP z`dD5ZZ4 \ﮞ25aEKgxDG$D@lJ64I)zĮD<1y0Ѻ`<4ZOjcBa';w4tY6S؅lH@R[yjһM46d\r &X=ϪKV G *+2`@z^ Cq#Z#(ęUMH N"qm,3DV8!wLYX(8p-Y hP:=Av~Lt)sj`o>_`(:ww'~)-5OlYqa=ad^Qs $q 6\VVz hY"GrvkH(] 0d*)#3Q?؜Dlp]4a4؃8|t߳m|ډ>Lxc|EZGhQefa)Lۇ3Eo( ?cՏb5]p>4cn~U\8be6j>c+mY=Stk=F",a*y@%Pq|dɑ 򔵸ݟ9Cp9[^;~) #hxz0"O$#Mc@C>OVpOP Ii 0p#cL xDåUlIٚaLSd%e BR|oDϸ5,S 53$x"uwܼIʒwCh$s!}.ؿ$?y ͆1DADYt,n S;4_i U x}5/, `+e6)y;A4N{!/"ggδXz\] ?XʶiMis'pL}i{|Yғy'{o8M'\:mTr..v, CՁNz"=űфfs56(kԡ Jm1څ/gw^_n\8@}5-h?ͨ9wv[Ʉ[u}z?1\,.1"xd>+cɿz4"j`ve[b(A| ذݙ H~ (T${dL=:#ד)7ru9$ DBR0٪3o-a5+c"K.)d㰪7ou*ZhGlwB;̈́9f&Gp Xv?=ӉEU_?\9?+s*ɬs dUR[8@\I) ىy[t /YwP%|+aog\RNU~bҙg7&Sd$w\3-#'2=Z_GKvZxٴmj_vd-K#5G_ |]A6%: ;piN%&?r~!+5Kvfr2ɯբhouwQvO/9{ <wεR08~#l_cplO e`pg_YIP\%*ϫ{nJBjy&cOCAiZ@BeNn@ԩ6ܦ؉31܁&k}c ?BXTZCQ09#8|b; =s3׾⇒J+D7NtrN^yF>=8JlʅSt$2Thz\o- v@ }Tg7/i Ꝥ!\m1,~4P^`1# "ʖ0A(e4X9g-9l-_s8xvR fwK& ;`h{Q]fPL={G!a"}QcXPfej^<MQ,7P'bgXpGE= PW @ģs@ye@CL"mhPsQO(uرȂ?wEvJμ?WҳLf+#c/)EȓponJZ%h)!#ژ{ QO73ˬ0Ca&]qjBy\\׏az!}[($n D'#kɃ^JK&[<UXՕ# b63c %r\ٻ^q:HL΄t@y ĉ224AZj1qڨzVf MDَg 6ʋ|%C'2~Oه:c&p^KHß#  C OC~md.vx@f]cGK~ӯ8ep7 c 8<^slⲇ`#qV%:e4<,w14F@D;=B?YU7S~t-LB ^=QBd8N Op=qT$KgȘڳ]BȶM"¦Om^֛ͫJOyg@uiUŒPۯk jEda q!^-H)\81OgcVNM=dg!0v' eРhi*ӱr 1=U'C.TO ClN4:_B黿- x-{ 8ztiwx,PRUr a+Goz[`qU$wἊJSgYf6695~Oȕ-Zjn2n7͵8k>yVj^P#KGr9Ҭ;LG:%8ͅ %lLmy .F^Ș[]v}uG]BB{)&ka4i X"pLTweYh[s3Dr7P)w)z٨t"^yݍBOu;ӎåb"_YJZK+iBY1?-Ow)M9tWFC"jTf# T4*WYi+kXs\4INSg6|[0g-'T x,uG8̽rׯLl*$Y85HaSa;pZ~=1 *.v `BW">37aEij&_,_5!DV>*SUY}d п#cN 1քʷ$x67B5>ii-®.-<Ĩ]| +" u_Z2<$c޿β(tY Zg{1|<",)n^קʾW~FCcB3W9L +HC uku)b˸'|HŃo4ZUVLm˞_ヺ(>)hԦd<pp$"wjA IDjMM6kr;Dٴsb6Rj0&1&=Cep&: n=#}f̕] i/]yvU%===AdsgJݡkL6o{!L/_喍fHnWLg`_#šZ ;AL6m+TH{bP4:y1 ʹ_'mBˡ;y 1t㙙=GRU)|uױvksQ2&r"\\)OS9 y{s->{_gܟ76Z;TnmSb*D DLoJ;ĚȑC[6/WT;]< #ZFg&$$&U`0$ YTzSʪH>񬢁m[ v{4o U!Q_1Y~1+1Ei8T煉HUi>fk1&@;yɛT:YNi8NZ1?YÈ%@;l"Ns2a'OVHvyJ)~C`݈iw8;@~o-blGlH]FB!8θ1MrQ%>ZC!Tѐ6pn ?6n+uM1 yq~/ijvOj:V" mR>Ye(f)GzCeɍS*oakgHe*׻n>S&*#/r5K2S}.<̯((ex*afkϳ;A:#`h*h+^6]Vgw<ǽ[)3;@EѦ0m|5+s$3YJ1Jb󽬹w+Vc-Ƈϡ#!4&/Ny5~>X~4d(7\;-RD @  _{g>6[B`a8m)8\( a5eι| JJ9iTXV"HXElm{qz-O\hף1m738 ; TY C7>cG;YcF8g:UZŬbaAyd(0#'@"|1!j>~{Ӌg+m9QqF|74$o:*Y2 rv|Z}Xsv޷빜4:2,:[jtF:ӕƔ(+r m4,)b? A\q$U֘۲րz"둯 '_+lT̏96=v`_rM)0qM;B2eAiOΘDX%X߱=-BMܯiF-w͂S P}dkLCqx*ju;K>69Ȼ12p-acqDZϢ\dz\[7tݒoc0렬dO@-zʼ1-N ]w}2|𭵥uY% s'? %<b!'[<6ۋF.T-UvgtrFAQjL> 捔qCpU&& 2TM+= -qowT Y)5B-F R!]xp^De&$Hd*m&&̕`J]uc?h`ފ:B猐X^w[iW4 ]}Gۇ{3<{l}L+V_Z:x S$٨Ys%qA|sS$UFlQX YW!$o<Fjd-N=^6ief.٣Ϯ |0|ys*\R jTV#ٸy'B>cMZ0NTh{Inm3n\@&Wy2y6/ӂg60 SoZ^xAFew[.J),2rVUGkb L]nOu@rKwmymcCd\YïsjDB>,`\>~1if~LG@e|P%gvWW5 ]>s2熧\Y&vF *)ϰStj͉#{\6ݘv\7J()U oئL/o T9:BfKKʨdSsʸ0ryc5 i^X4r~T]H2HV:´roW ntѨܒ˒fgcj#N) ǣu/C~ž %klhd΂H!CUx^!^X DbuhgSw잧%7N>癇Ll!Bk|d"jc{D1e.G/p?Gs1πӢ3Ch2gݬv'0{1;?UcgZlWId8'Ç$PMX\ŶM,o9B$Қ R *'VXAŪCi)alJH:Gr'4he$#*W֧2AGOTi³*t}4M<׭`|ZD _WCQLH&ŴwcTi+eWDCݛkˍ0v#;V"7vvp]~Ypb #GS{j#@W; I$)DSc'yg vZVtq蛸H܊U^o}k#* V0$1ϻu * '";/6Z/v41 :gAKBU󵰩@Og#ݻ.g~C:L6U{U_N,k3[f?$fAZ7j,h˩1GE䷠wC^xߜP ;԰ܻ%5+#}COo%d13~gQZDw먅>mtGjNx?dn ?뵬Ψ87.`dD\/Iv ɥ"HDW=nI$rwi^Rt.ّ7 qxo0Ϡer(ŖF"cA*^&ﴋUM=^^ \})?jf+8|` M6l[#l#Qo;NNj-sLZAcK-GPh6m8p&ku}g` c_^&lB GUhB>uuwcq i]KcWi $0#׏kiU"?Q'$˚ܝzKL01Q胶8-,PS͡$/4;'553L$( MnlC G1i =uϲI2!%0apL(D JδX)YngAΉlcl lmQ'cZUpN$HeIT~nx 7!XI`92;P7T3!A2~̓"[wEQ6B'ӣ']Fi/=XIrw-w1Y HH@5H܊?ZTIxr="FHoKg6&>ꏬ21&M3apR4=‰+MxsAt*Z^0l;4)Ac@`EABΌ _Z"a*@2BJ7Q^fc6Qd'qT0( 3&pXM.sYWYTbvݜto7!tDO#Knt=|XK "/DI5V5T&m^t|W1mDWBlkȗS/@K5CV 5 &nAJ \)) E# RKxV@䟛od+${ʕ$2SS}Ֆɗ|Dvr/o-KBl֦6j,1iBL(l{))-htR^AO]Ѕ!0v1R7Lǜi`ؼ\*ZěՙXjL_X*}f<#cg-UU2ZJ6X`W0C31ui?;t-@@9}ZߍXmj%Q |Jf>?3 @Cyo@oֿG?st0ȤbD#Ftlɰ7Gnr0OY&N3R";}1LgA"5xc׈qkb~ y~EB0+H!H|ρ/a> (B2jo8-=OEoGipk㋳U1W~1cm^|=yǗ[W\HjoD xPse^4,eϩ˭W hl?Fin\V ;a`i*ztyeWµYN\W ZHr $HbtlۊGKؖS%x#e(' HCӈb`%+M_q>O 42S35K68z7.`JX(nɵư~#3*'[1_ɅP>RÏy!j%ڇ׬aR/dpy㱧S=M9vjԄ&xAX.<]hFɍGC1Mm$(%LwdHFR@s'bBx67*Q1遇fg-_jg%r&^TH'Cj rH9=ڸPlum̰Zc 䤄mشRW{Plـ ӊǩ0y*x~ؠe5=_`7h+I`bm#(mVsCނ2R9iu\<9@3{^ƉHM:N_[G}+;k#0Iw -jn𝮵\ʽ3pUF)̛4&lHtS""]Xi FAc6F1kCh|[Og:!R"Ȩ'Do5'}{dD\ח'NcMr-Oɶ66=ŗTp#*92WA݈`kc)8M':W6X(R@g'2Q=l)%[G-"bA-;I*%wP3uR¬LcpH`N}ݎf{CyA=-C%n+"Oxg-ɩ, ~q;#v1yyc*c|q$,k+A:#(#٨ f|D7ځd J5z&9-uH"Ɂ*7i7Nb(AD<1LgZYQw1̉TΊWϞ땝& 'h?h'hڮFBjP/s~C~h,_<10#2UU߲vǞ#MAO zR ÆDT?\ 鍞z rD'e#1"KOY`NPW J(Ym^LWڅ׻w7ȁP8H}u%K'D_C}-??Ns2b2Ecc1'LC,r}ؙ+/'Ķ |URE? +HASKI҃m_iO'zȔbCgm}o/;/0Q&hvD3̠hŚZӵAĄK!* UHf:y{`YI>H!lȀv@_[3q=T#u/P2KL}nj o5׹ݚ:9xRW7zXWBI|;sVˣ/kgT偏чlAӔzD Gr o3`OPt{8b,8r>, 3sl ,UTLwwdz>7 eЋL^u|UK& @gȦ?Cu)H=4-9|\|T16?p:]Դ9j^yx}SOň7 XZ4iQ0 pWJ.+v8>GX9*l1 %bdJ.ja2ᒁ Uj#w귢߻H/(V?3P-uBL>. %A.yI4_m# ;+xs,@b8FʀjRRrJ5p,E=ܷ_kV>0!7,YBx#_'K`ɗ @IMkHyٮi-l`UGmt!q%!=wg>b#`];s~}Sʦۙ\iiPq/ƑYDqi]w18f%-sߥ!R3\z0 /\b\FnZ]q%7`;}ax $>ߛ-<9^S)X>fҐQYDlǾ32٫ zę2 Y [EwhxbQaSvmdOmob /}O'^%Qj ~~련91zPxN[g ~ql8kҙ({ОYqJ!7Cl5@. 3Zh :LcVQIWsuqBIVdkAJZj-F JW4@3^{G`}sZ21g!o_m%$H8Hx]i{("UQphڜ%Č=K0TlsQ=T$=E\˭WCŨ0+`8 w\gҥ%ҺiEت/0e`ϖ߁x>؅ԏN`k(dAZnUURߗ%g53Lr'/<דoJNØ&au ! +I b; 7\a+RvP>BqZMi[^-~0/;&pj˿R`_L3mTEJ J !5tHUR4As,Qb׭Y׸Z=YM3}9Wpl/YMK 3LU%FGrYsLFޙx ;"QNNޏLJV!8'5 `c>O̰p"ᆣ*o]j7yk>-2}%+@Mm|Jz =\a۫+qqHl!˭zCo'ZQ2sDt(Tx׏щftd{)zSPCBW 8 r@",.i ј." r7:H%Ck([T;APL廊qߟaG wwʳ,dBc f욫^\ų=bU4GuXe=)FZ4fG@SGuן;B^0480j@t5V)D6LcGЄ, G]!X@3>  U5DΗ0oej} _Υd>! nP11 e7& $!o헶)]k?C^dBw!_ !>P cOQ1i#h5ã2,Y1^E!.٫j„0| fDncdJj =8Mhل X,-܍%q f ^4 ~ּ/ %1٥4k N:_5tdIM4aU}o8EF tܜvOoׯ[M[Y LTt$(JM97X]D0.C2w{`U^ߊ)VU ( +jGQI2yi3H@\.g(gX*d襯8qxlr9k8%R%JM<&dHgU.^?*&WlF+2zlՆalp dFL?d%;̯ 1za >zSI 'l; < d>\*}sJS@bVר~)`qFFdxGqrLxei]BUg߈1BH'-2{M+tzRWΞDUzmh BWw+üR O6!?My/c}P/E'.mkBDx,2KC~f?39ƠMP3nH-;Q}.LLvr Ļ[/To|y::p3_XNEhvM@$K2D|.1p kE"+Մ^iۯ݅30t dy:*.2ABʦ vE:kat?'u?mh]TcR%Q ;y4W2CGV? n.r2)PbVI }daZG2L5벴BBD9B,}T"w=i(=,QD&Qy% Da &klhQ݂Ҏdd/n Z{|!乊M!p/Gn?Q(Ywc|Ґ/|ITݔk| -GQm\*6&Hr]8OV5`8u9T ; ea ;:vىoNDMkƇ.L <%4œ;֍v_«4xrwk<ʐp/;~v5mMo"k )Ig5JN,>+ b+DBSqV5M 5m+l$np.F$n."dmζchelڕ_ h]~"c#+N8z0`<-[0*j*Y=Tp> |j큳ܳOQ`݂+†x1La Fw2!Dә:XJ;v!D:rfYTyjBu=1Tp0>ٹV}N% (%ilڢE|Lo4t=6%lgGrj ']?(b.LYftC,w"UJ-dr3>{ߗycdy_.)jj-TwiՇˀ%Sh'TJ3e:ĖumD5#Rs,E^Иh0ϏTjf]LV5t~{|.iLd.pUk!hQˡ}'@Mn^Eo")ի9? ;e7yxNvseh65FfI"p2 A c4DA_ps i5 bS,j5<&0Mv~ϯz$- S8F a-:pQNL- >_GG'u\M\xWAb&B w Es!J3/n@ jA'#p5RȻX PZr2ۥɓ}4V uavU:BHAG K"pV'^m#$UO4+"`G M?O4=Y1g'jj:ʗJ2&pN@@bњR_Q= Q^չb]iX.\&dA< P,`:|茐9fzL9"D^g5m;a%n=z3)ykm!n gl*lZxe^(.ֽR2;[ύ- i$T-;mgAJR _QxjЎf‡=_#\{ y?Ս3ITiN#xz}%!1}xbCQphb"~K곑Gkj^xT÷@k;Ԓ|C5۵.Aj@Ϋ6,e=UQ 7M.~@=pV#A&V\oUU2^`d)-8]s:M! |%ʥSƀ^B '&i[H?T!unz. }~Om/@ȍFeLYTo/ե(*:`##J*b zB>ܞx=jaXXfح߆~\A酔ز0}`\2 տn'RX$垄ijNJ2 "hy^-F+m ynjZ62m? ΁Pǫ7N_}} ˮmJ +>F[WW.Z JxAUZ,]!j(HSk..Z2JM: 9b񠬈b(K0;SE~HC>9, ײک+- 2;GOLjToR&LUI&͚[Ѽ3&@{ꃚn[m]JQeQ/=<L0]^Ϧw]VXY0]mnť& \.{%u+^vj;w 6PW{(U3\xl:&" D̓jG@m Fd{f[1pL}p!Azz=R/V8Il,yřx*iZ'FxrcFCӗ:s ΩG80~,JXۙr"66w>֓]T2Ul]vQAϯ&]QP^^'"tkRT:جy"887 X42G~cjj j aC 63o1njџZH8$@r,':d_Ƶz}>~CȜQ/Usa. 钚!]z?̴ҝ*n߲J4& &P&FcZ=?Qb~xcK$5򃆔īfZm ~2R+IH܆~*CPJEa?8U[Ž(Sr.`G0&N}B7?(q"(~QTz?L=FRi.Swex[sl&QcQ]^Loj޴FS۩Vt0MJ}dhB8WVe]ukG3y1be _2R( ]Fj=>> 73sT۲T!<8~5l LWxSw ڍ  ˊwz=%@$ch52_)hJ/OL6vfM pc|"1K{ * " hmk`R f s6:5o~g|G ONN6pI7t"OmНp8GS@In_B$)*joNBY4,/3ѣN'!zX)l rwD9ȿq@zsd]u=_< |Yb!gLg}xI~Q釙vvM8`9WM{'ZƯlH]5W\1dnųtjkxPΗh@# x퀙U-ڲ֭wK\DU\oOGmЃhllWXU L3b;Q! Uchekck3FhfO8 W]SJ.8ߺ"8QQVJ= 3uo>~UY箼YrN0 OMH~pV|ip)7\˖Yi<:e owwzz$?ե7PDUE},UF['R_!HSuu)7SÙf( 20CAT[\+}1 Oqa| ֫wK [F(&XmE銄 1/yGNXYJau?l#w]{I.(֎le]Ozֱ.bxiT#V Fisuڞ@S݆ܶ8~7eGrN5?[tI] ZެK$:'4k6Ps[*VIaDWZͪk|'ܾ=;2"Ul:gi³%R-(z6aY D=x(T%.O֚UwKw C%QNb ́B$vy֯9"/l1C ZW3t~UJ.ncH]o{*=C{Ew "2Vr7QݽcN^Kޫu`.)B#=8~nR8V6).Vk9Y0J\hAA,yZ+A[FI?w]tOXfqs[_.`}GU ys5>1B sZٵ"=S r ̇ lYҫJH2Eu KAr܇l;0!j%LP*f'`ǥ5noaH_|!!yCc&c̈́չ42Chꤊ%ɁK)W!f+mRx-6bhd]@4B.SW违B:Ks NE wDahnã{չEf.5oT4Q:^GD<8W#wAu1B%Ύ'?dF=ޑ30U5'/- r:\\ydư.] ɓv6֨iLQ!udˤ X| b[&5B_J->l=HNI-Ph1ۺ8ʦZ@N4MO{yFF,Y9G*L>7R8Kxl uczr} Jgt%oq5Ԉ/ 'D0[Q}?6wTߏVPn$*4h1?n~-Lrn9 |@zud@QȔ+HYL+{,n81Z?^D(;ϓ( h=&R% &HXei҆ۙXysEpqLW'det8pѠ [F"骰ȀA0iDwb:Z6J ?ۯfZnߩ-ݵu8gLX'4iDǧ5\%z:8Wv,m&$)Cc}zyIJEVYGXBHo$pP* ,Ό' JIi"+ gd_X5 \N嵡~?Yٱ]07P{ф r(^xy_a0>@ td^ h,!$Y⫌Qί8غ+_ćOqv(!&C<H2TM:O!K(􏙎}!o6 yBىf"a9 @qkD??t{/Bh¦)KfLB02}/TF2D d Q/iW-6W uTeX6T}F~Zu8{C3CCk:>߽JW;BD~l*p) HMc•(*Z;39< zQP8tupA~S UB +!*[q)}߉>wR)~i:)|7ۉJ5 \R.(J${ߨqHo_4?NL(nB6Uy]331atϪ_D#K "''dfgվ)#.:Ziʐ~Ǔ,>O}n5 =ÃN~U9U]-߹V1dN{CZmq+G(NDB*7!'9`QPP1AxM8 Hv[7c7>uiFdT:;Tznzgk;g{fS>!y QAڕc͚v+Rm]ip맷V൓9R 靸gA=]B79:) ;E\H4I+`FvXs*Vt5tr+0_F"pֱ 2tz~tv SM;3Ի65lOصW}EƃCo}"-hr#o߈<^ߤ&(I16=6 fci- ?DzT5܄rL  -Ԙ3{ijUMG=0s;KĴ_W+ {z [|[ "o+`cER*Fb\+H(l7 ػ_:c)^SE0 BDG9l=wOõ84MpHip`%z2?"XBc>CƚT҉_}RttU4Sl6q?Uß?[{ X`Ѕ@7z-Ȏu&D%jF2T">鑂hAOqwZC݁>ƹy5*ulʑK+INo5RC'iAq|"k:$¸O;ڬ`jc7Q2J'aj+XYyJ*E߇^axu%uP!E4@@FQoHZXɗ?bΚpɨѭ'qq{!ȿrDn^rLCO!r] h,jPkLgYuO4*8/t Ze)Z@Fؿzvb ^zO+}:oWeªyq:Ndrz~h$w Rǥ?e)i:f7C6_:$(6߲KSܳB[%ԁYk-|2Ne{&({ѷPEse GĀ&8L ;"24SeQ|.o .g)7qDXp(  ȍIA۴i?)'P95VD3À~ɩ5z,A8Ků] &jI[8);)ɶn Ya#Ǫ?Ki<* {Ӿm1&i[Nj,GaU\h?Klσe1Wd7.%XQԏu)`V 6n:gJL4"\c9>2G!J5[Py =&[ .B/QJbb:w`*b (5VPt]e{f"+i3%4J`2е|`հHK?1ix~}t's)pC-Xl6(3qauQ|\t1}6 œ&_{]\\R"'m1ϢksPh &#H0omN"o_A*0O73)ba7U6eqI(:up{_@=,A|!hή}8BX4XZ^WrWrSNMUZِZsT\UmHeSZ~LWXq$CwZy-t<"M/IOĩ8B .;ȸ9P;:Jl]6L%I(3,&{l[:qVV4{d/L|,"xkLtRLT5}4 ^yQ$Z f.궵=*-4jϒ f7|/XnH;rW0sF}VhR!\[ {,v\v82"(;K6h܋A_PWcifl /g x_C'\Q3hpnsV}e`ez{F :!DjE|ۻ+ucu)q2mYpl! KC 8poN}2TRgL׶OQk=s1z_(,Q Vob#n$\sH?NffR?o.erg&q͟C1!޻8҄8i_%IE Ēg s'^2ު?r_/30Tavُ$n࿶1WU[f9UzkLlKzNV̔*3yKC-&[*Ahy.[:.pA2'f'Mn+_}$#mESQY_߈*ţGh.4Eѽ#j̃Y8W.t~--@*#ahOy9 z 䋮_ѯ@XI 66,bmWx?cZ8_Z=D'#:02y$5' ƺc@{:5`$GK֞oes {z,B=pGhMGJCJ[+x+QbY?b`{^-UyF|Z럎qyT9[pQJPQpi{jX|)O z\,)ٸcBIB2,&RMM-]ݙ5oU;eٙBuR)H~Qe@3| _ObrԓX" 5W*|?GQe׬SIڜg_%~.J$ BX'4Z!;nCfcu_/ek"odg ޺kzC P0O&Rߝ2w^Ś-v1*Qa|wV&Gz{i 0F]K qoMae1l1BNBwXy[p",YCDYednz.F,AđU+mAk @v_A MwER]5^9p;3_k3miq]9c{,_<ô_ y+ ˮRѬ^HuT(}$L,e] ^ "Ủ2R,g𛆘At2BpS~ U.NLxjցKm+LвWwr7 /DuՏcړ(]QW>&4g tXH"iWP T>% FQw܊%^)S\ÕCw#hO'v|A;^0AH΅뻯1Fh7|ٗ1-39Mᷥ{!8ϩɓť:"4crP?)Hж$񞤬EG3̿|J6q;y!%|7O^kI]o rw{.RfJFD#4e4W:ufFXE$#C w۬2`Dȣ.}lU(@+`hzN= R: HЮץ"jd˳h#_+p`nps jn??C^D˦RKh>l|ϬgJ2`xMk9VprLDxU?CsL~m'J(XW^<: WPuN<8 *- W`UÎWY(B_ޡB!la/CiAO )5LYo6_ro+bt)9P, `ku0&D_46sP_y"E9-م8 QWr~OA3ֶML:V"cqh[7Uz] `# oMJ/̜ȴL]YP t('Y:X Ǵ9ܳCdXd!2Crx 0*S8L{[7<UJf o}af1cloupY,~|Ёgz#=&#פ%v9!.֡G_``6d> |GY8u7VJ4UE#Qhh5Y1whiҠɬSke [4PqPhحc0"Iۻgfuk?{g8gG>ނ/{Ft X%.[q%,kv]l7`mC[@53Le$#.AuȝttIG=I]^>>^m<[ msA(GPb='wV|,xFGSpJ30YFIO .*(7Z! ~AAWH;Bǐ ;= 2C1 ̫ -[}bYwM`s$熊Ps"_W^xs+PAQ5%Y_ 6 )0 7wG|RZa&)Ĕ7 Vu<8ҩIF fF`17tŚ(J4$WhB |Mݎ-u!+3ۣ^R+82Fj[]6 Z̟N 4J5F2X.pMj;Юo7>vݶ.t|A} vlK"V(7vD yccE zND6]7`8'j,w,{n/$IPܴ~,oKL  ݴnu}:[R* r{6J͢$)Ph'k.1ö5>PRxf O,=ԂkwpǰIcF GU漇Xl7 > j<L+A|ׁz@۵)ʯ 0>RM5(!Wv!^AA1ޗc30W4 <u\˜ess 1+Ԕ{P׿x_,o^4 fsROP1W t&swi:RNH:+A'v3)J/H(Js5 p0yʮG?? sBVv#!. "N,_]i&yPCmT'YGjy9tV{<$X*P޳t*f\] $x]{U9AN.24b (jpFoҔ>*6nt?ہ3сҏ۳sOm۫>{BN;q蹌9,Jc<qCV"$<h ; dh%ss?SGzg*p$9 [CFKiՍ[ 1kO Tҍ 7գ41C@(4zk>]vAzUf홤ġNYbaN9t:|P1s{Os׼cf#䡫y= X\6nxI8i!tB=7ӭ*D)y v[sWB"ꅽFy[fhE nT|.Vmh O:Y-V'8bNafN75GC/ H2hh:9&Ϊ93hĆT(Y2_ ䷡TQ&S}xVYRԕFqh3]8y$0U ȅ+ CUI}ÿy6HI"GYbXJT`X=f >nf>1 L̉lo&SPfl@A .?vm.?Szoql U"Ѕ%Q59a5OCUuc k>Xu" P)HEøluWٗq0`2R(*zr@iVԇ*H˂KP"4?\1ga{-po讂V{68#5_=}(Hy<[YT\ѯ Z-;f$/7n˩D;*ER9 11zWg:QʺgV2+a뺜RB0M3# ;Xk!m!$~r`scV~K^A^@m;4pp˚&<%('VwuB. z^NDEEQ c@247آ8 }j()X8e/ž#Uܪ (癍[}0f$PgIA }wL~x_8Li8BO,yL7%eRG&GSJP̵%| %_"azQMi)<YV2Xj>]G>ɑtIa)0ݥ+C%N9o)tF -m\6dEl`Fn S)ph .MNS gvCFsyfS#/_Gԡ}̈!(^v0c)RT0 M+xH!yq^"^E B#\M rQOL+,eO\?S溺[* [.fx۲ʷ-QvkTM\>7U Ⱥ% ԡs'3fO2iDuΠk~ zdL^ۧQIخWg@Ec둒2K_֜Bw#4W6$o*Bu#^Xm!eHt֒昱 Hc3F3dx&akIMpڶ <&$lڎ@$H\ܱLѯ?XXg= 5>(PJ 0M/=ۡ^JVTbtAGNEYS"~-4;,sI~'J[X>9#E7#W >JT#Q[} 0zVOs SE^a gkՌ50ܱ<i:ƍ-v_n+lޗ,gшRh6Ozce a.>Gġ}I9=NJ1Pt㙀(ΗISZNOuECx=(w--bv'6XoDFM| 5hF4yKŻj" iD+ u/f#\ZZ这F[,gi7 ^?K;RWekE9]h VAy?V@Oœxrv򒍗y;r{D 4vĘ:gL1;ϬOpCo8> }$-LY>AS{T~^DTnVK[<2.wh q^ d7AYЭbQ# 5Fxe1-JMuxC ;RrFJΉfH+~Ubفm,nGTaz˅~n(Vm+CPr*vv$6$#_w;{IT{8䥜5vӒ2#V٘!0ɘCLТ:NB/,eW(M7X4ţC8Hkk-кHO~nO}PܓȊ%cqdS|XU/2@{,?އtv:jDW$(xwz.NW=`iX; Mi 3Q҉b^;daPxwRՑxԟZS> wKi?]b fNTc\/z* %fxq0S5gN%gчEXsdIs2Ҋ^LX(T#SγNf$92 ak5N3k EI|~m9~Fuώ[9qz^"-ަ:NԐp59sB# AԽG!U_7j[c_+p'9{_~^=,(/j,J܉*:6䁆SIuTڅB`=ngWF|˅U!6MwU*ABr3 Mx 6'4.6_YHC.{j5 `(m3i2hʱ`fO+&Lގ}imW4'<: WQ-&}C MŝB]#?6`ly/PLmlBxc7*Jv;lIP.*1:}i1 )v?A< pBj_ٙ5Ȁd.ol9$A\ hETF)yzc_}sUsTF:7(@jBŪ8>v:.P~]WbE6RUxKhy4)dp$^_l|cJ_B P*1l=Dz;9XD$S\(J Kmy!Abc %\X[rBlXX%߯"8񱢛~10~4-!RPN.Ϗ{~y z;>Mϕw'ϿoZ6EaN({ͮӓR~QUl@,kpTc&[ i=u0w2ܣg=Y؂滚tUU6ЌPu)@duQ}R`C&;MDon\4Ǩ#0`#v5  aƝpv +>wSL\-PJu|^ٸ )_)ԪGa'(+odes e!H{[MRӡ'wY 鍶J%!v䑅"$J0^ع ~mQߥl.*oCƷ~aˈo[Nts(As^ƥ`>` Sb1-e&İd3˹۴Vڨ"J|(cx<)*}?5F9Ȍ1cKg^[Sڧ G/\=bG (bigcQ]4^RM0x0|bq5OпZ8{܉h@{H=R 3ID\Uv9(p %mBGHIWxE^N{\-0gfm<}*GfjצŚE~|\OѢ) G{q0-tD a{P4%pqbUT#*z%8\'<`/I(k?RtL\ ag_٦U\D7VoԽYӊ*KqS|EdF+`H(MG톸ۼi ?cdôR\xW dFcoɜ,` wכl:k5bmgL1nMOC QK/WMjhdꠘ%E(=6#fV/ł-u ;#+A經-聶Jt dd/8Qɢӆ#?j Qa?m[ ~}MZs>/G-2HQ X^BctVzTAcل?駷pbX0e|NP2uB9 Ii'j!|~y,ĉȖwZ&h%T*oF$?n@'8nakxO[L(DV4kѰ}@%~BO:Bsm㈩ۅrBSWaڅa/xxoM{,0psU!‹ 3kn)>鹹$GЭ]U6}e:{TMccnwR;'b1|t˿y: 1ɸcTyz#g})0# cy$&azAB}"59qݓZ4%7ŪzcV.d52d[ԙ!\f+ҫfqK ♗}X61L B; pjS[]+Koܟum[gO鐂7b[Π_M#owb#,V؞’e2ݼ0(Ejs1!R ?cYzT'PLRچ,jyH -}r( k]g炳/kAb6ۃ_'>Bd?\3fY2SnX2錂-uhaO\L!]\B c~pPOyh n y tV)1ԣVCՍt?Q&C NaoN ˮ4A(p?5a43Hm1:tl,"uTaNδ%:8rBs9u%±8=/oO֝>(vJ{i*U^b8,!H B@iތ;h̽$uH$tG*#_ Zx'GVmйS˹1#%QT}-whV (70b>/d޲|0X3H){q(vkPOD֝$fM Cː6ѬDM/~ 'Hsc)r )jE.7I\-Gاg NnEsTp3~>#h/O(PğEI e͆|+W؋R~YFlJ"k L]]#9PX0 ;9Xo1^i{]p@9 D n,gP-g̈9NΞsz׃7CY'8ɫ hyОj>۴P|y6izCv m)L5 fmVw?il)0lVit fmޱnqIWCѩ'"'M{-O#{1 =cFpYDQ\sLi]eJ=$nkbN>YT^O %!)?4ƤzlI$6YST9?^=bOi^xs{4"YaBQDoVR% $Vi4. Im4N}Ν`y81D+b#_[K@Ɏ 5$?ݐ}cyujd:^C)Wۆ=9@z8'+ w #IɎ<n In¨,/7]leOsRJX*)qIIUY2+!RWG=gRkDFSf>T6oq&Qh!z "YC=6YV5i < BmTDhyF3ނnZл)wʄ;gCPRhgP߱F(/JD:',if :brOc\ne?2]"_n MĽCx*w.B\~>X+ JpդuŢ!,z!C9D^3(4!US\ZJTJa"Y4΅a-Izx2X*O5}y.T*kI}!"]&Phk(YcT8^7jْ/e?$u˗cN&?RS)>UasV(̷b-ɂ W l8D]% ۈj.%ǚ G9XP>ܧ>]F|f'. 5Mx۶Ry D)$wliv pr~snAWI@Z9Dk#'*&-,;:Z ;! e @~GjU|RR 83aBy[Ħ~ 8]b# 0]1D Z0YՔgUT2tj 4Yā>v͋fЏpXȽ$kWz]0 '1+f#f b_>vʢ@5ҨC#oD}{7U2ܫqx"ʋ= ΋"nӽ[$i~|XC ln,MrRvB4  KO@.sL ~ɾ4T# v/Ձ91q%{T.9@[Iou+oq)2vS2X7l9Ox^Vs'S򁳨r_=׭GAG-W+{DsD{ƒ]7TSijKk]fxv0:ZLYuvTHYaq*Qk]{AgބHwlR3>@G5olQFZf]0Mɾ) -ҎSkR:-3֓ b=v| U>EĪ,倶P O{P9Q'N-eD ۽+qp1 m=m4ç }ͤ Y7#'A)\vrI03=6Û]gX*JiP2{20 fbH)ʬ;yuM*&К~Z`yI [c~)}b:p)a7L/YwMMSI)>>>TWՔ˒Q,r;ujB@P<2XL_dAQ/s;V <* .nA*0z"b! ]U8q ܎6[02?wU4KTO!pȚ  !WVlG٠?Kdt<*^N< baGHfUt]uFdPjn,pZ>I 䳶uU잧99᯻Dc)B=nONh \כrM|ES.h Ȟ=3 ;{)" yz=_h(x[{ef[W#$F$n4HB(_g&ya@ ģ]g ;"$dclzi Q_C;'Qfyb; 0IK1Qy*=t64hJQAg\%E 葏8мhH8'Wg)v8B9l%TnHP_3,Yz!ݡ b/" Lb&d27O WRg؛TJB}0tјlPJ =%9 ֐{ َԠϕo7 v(@M޲ծ.3Eży6 U *-˸+׼+p A+e*wla1cxpH~OW5-:ng0-q,:ssoO’tQW97v(ȋ)+ǒy poW$ K*.HWԹ!J X-` v màO&gѨ@+)- 6`;ԹuLL]Iֻعz@Zf׮te#]WDIG*jl+bVuo'u  ._8=f4kԜ~) ֒ <;aN  -l+lnrx]*AƁ)PrD ͣ=:5 d;<94Ê[5^:#յ'c&R քvpJfϾkm f*̓+ {K/0*o?&ټ;gIt~hXj]R7 wgn xҭէӶG4npkŁ_zHFO1w"i̇Xzz~ @yukr'q|טN9nm_ל bXpt;#Xqgdo=yJ홃Շf6=;ڛU_U(хS$L"">"Hwb_TZ FOɰvr8R_uF A+{^ScwDi*!U#oVgig!}ȴTۄE57e5&D.E5&2V䤯&nFVd*\ bf1N 's_^Q4zpi y+̳bWmĹ'm簧ɰm/:+Ij gS}"WbO1ٺQbb˘TEw0H=\-"ׄ;*s\g@I[EI$Xddvfh rۂ(8'Io@. ?^N5ߗbhBH0:3#"u,pmoSBu *ڶPrah #;Y+ g:"?+ Vgk0K$p8uĢȬC6gٰHpOZRuގC%dq5A9z+" ynR < NF%U'm_!h~d&}D)ί󢾱HקNխh,Z: xv!HGϬW崸Kt' =H]"x[J@Mrh'!-`](EZ|QVuVh="UJElTtm0ւv| D"h%uU喔iܨ^ |]ciBih:@Qe98W ;!=x0I+N[ @0!rLl?pAĞgEg@:NȻR#\1 A'n| D:9X1Ⱥ6#"%e#*L/h]$Jzۭ{?$&4~vW͗tՊ+oخf$rD/% m0e(FDByRbaf+ο,[ 1_?|?an} !&B_YÏौJ;l-l7%#&-"@mr#bzccD+:Zbޭ6K鋧zH0J."uN^B֢ۈVx{<ھr:K>4ݞzi"A<,C;ZkXq]1f-\֜~І@S ?dj]]<)obd3i6{]H}g2s.bYƔ wO(Siu(V ;$H-6*^o}|43jFK@p 9UHb¼}JsDyfº]#G=*N-wep[?S02I4|80 Oi5fU $H?1m.[ħHx>̦klpQiA%l>USGh+x:(֣Iqd𚺐865;6Xrpy΀vUM7?RDKzoQ͏ާR.^;jBBCmZ Yd(C|ě1ˊe!2eGt8 ApZ{C mĸhx&B^X.H[n#Lݏa(mًDzIcf !WkB ?GO@D^!oa _>Sd .%dU;Gw)AȈxB͗!)50\rkts\d6nΩ'Yʝ!GSJ%!o!7'?lOY1z0 cFEEj(Ze=:zLuE stE$1<Y"~iЩe`Lzy %㥊5M2K1U>:\+2[SL 7.V[z~'Xlz ܽ6%sbpL~s%<:#,7*=[ o^嬣nXHZHA-P[R\g` J Z/K9eޜd/gIako8m3|BK2~N@Hanw^TO9\XZ}ylĘ:GD@&Y5Z]4w&t5|p AXb^"tyh]3.O4cARe Ooq1(]Q+4_"_IG|ʉ^Mub609!UJ ^ 3>yDg{8Pں@0o4DxC7{YrdV:+"9q`y|wةC2t 8F`$Eѥ>!v6k8gS LzR^4IНo(NC+;9;HT@ k  G{z [')ʌ)Z{mu¨ճêɶ<#C5\@p/]{b4_DLHXXd{w@%n?ϑVU(ˌH ',ղ\Zyf _K95Q͛(N[䄾УdQrK&b_9mkCjʘoE# śdI$e Ƕ (WAL )kzpiS|FU6  -2t"eڪFI_5DláCNK[2Y+(4MLcKX.)ZU8 Qz5CzQ;:Io!T!_.o/*"W£k|y*9 2&>)!Lڞvum%$gaFX]_uLJ%G(E2mFW97et%S۳(dwLF\CG䵃U5MXDm}EM+;'log Ϥ+d4BJ)3y4􃹍oq u3Yky#*3aJ`U]|[3b9i 霅Hb* ?o׌-bmipW5>,cGe@1[ @1:g>[w>`A|t~j]\ԢΝ~_ ׷GuC!o5|H 1Rq}@gNGs NT6Ɓ]ll˶bPJ $EDVېP_Gbl'~ouu' a|!Wrb}?}CS_)$UHJ2ǻa5X0:K h=8OElVXDxoѝ\X^%[B}BX,Ǧ"EƆoǥ/ A,,~WԦgդ'X>ƶeDA1nI\nir|gAMXtdjI 7= 7P&goY.+vBݲle}4=#xJ(Zz׶ `)P&J'χN| e<s\AhK&A] FgNǚew{.lv]~:%Ո`9+0AbLoS/UcD@m&,oS8u'AWpԸFI &b^ _}RC}y$ Lc'%)AFڊ^ȅVS*a73 (v\$f`.}@<\t.IfB5ނr_BެW?dK|f¹}ޢK@0󫯣š{|7ߩj^o7r|]&m졮л9KdV[,CKFlᨽ.BنH/7?'IBAJ$yǙɨ{dqyہw.KW-wnGf3z3}l6}yq&vp )Hnx{bsl3VaCurmaT>O[5FYnOV^tg;Iw m :& cl0S~ 9qJo@=NJ!MP(m:o{P+!ʋR{Ag5"B|mZ 4Wx 7:qY#ec'$(G5'Fus $^nHXF&Y\J%!SfYّ%Mc1 O:Hq+jo0Ac6\;|ڍKTkDClz,n$ rq |N6agaDpDl8zFK"%b&+ϽƟ0~sm)T߿Gpw\޿mh1G.KP9WW'J.) =l˿L?q "D 1S;g b挐 |) W3s* K9&maÅBBP}Q,e}c )1YK ӎ6׃%`t|{\lfEd00$JCek >b0 'o DDTAaHIQbuwOyNwT;hatIFHQőf<,Q{\ 5+4p}lێz0ݾ!6nk#­ ,OAeK{u\7} mrh~[1o"5^қҟpvi|1>^#' Sz)UvXV;l9Cه\uAY=V O8Z. riINj7NN;6q8@M]ɦMZ ֢~y}C:#1}Nv`{;y3KNKr$ ijB'y:ب,_baɔ0$%_6`3*2dY,#mp v2Cـgqx_^P m;sw!J$.dSם߀N&(PN߰^fFrt6[(&y-tD6^_ًs]e.<1_ȵBnYHwϏ=ފ8ݠ|@j /]NY7()4I (4R%F[:~;!Kw7Dٮ?Q9N;h{Ƽ~yz]¶ VwN }S9GnZoESu25yv;H=;\QSIY_^ڀ>bE}ʐ}l !d,EMvD7ϓ|E?OK"k֩VM; SZCk@_c)4濙KPA46@ݛ zm7v4Wspo1Z8SbrU= pz__٦#7dpBXB Hf28⭭$ 48CG8]g0 ׃tqPl xw.5 )6̞ ɰ\;IG) ~ȳmneyjb,D.lzEE)rcv Bwg+m]]6s\fJ`J)~5f|/6u{1J4!0%跊%jF⁣p3')Xgbȋ" 3$XYx0\aqWӀZ$ivI5!+W MqeRr ಅD\ktK~bG"o%5w9)fDC-xozx 8U`!g?Z_}0S n:xyclf<Nڣl[;`R;+r xLHc'sv(>+ĉ׹`I"i=x&Y iNs/߆TN㱊k?irC*gѩ,T(/ KFI DiA]aqyxmPM7$ xIoVmnAD"NE#YKM[}|(NMDGv!*/V۷gD`i,8F݊]:qKR s/BLxuvnt!"P Sq5wT@-<=˭3+ ߬Ⱥ]c͛}mǝBkVFmguV~ޖ;EIx\Y z7͵HXRɿe_š^W6Gaz b/.G,A2/BPDffsڱ ]13%=}g. %EѠ_ԓl< |єӎ&fꐒLYjN!wQâ5?3vސ b\ZK:FR&6X#9bXw %] ?hV0MsƙSqMxwt5.wH8y6zg.U?)?,G&`q,aQ UK߬-797l3>Nv>Y^F|{V >t1md ᏍAC1 c >7u$u"p;'o i](vJ"/yJͬaM(IF-;тR?3Ǖr$ g}3ʤ3BA3=0@a}|wlyqbfG2*^bK=|wLT{F6s^kO!LQP-Gi@H~vhiϺF ]kߐȯQxB,{\yaИq#:O@6f{E.AKk_p܅>36ޢ=h,N#Yp~Af` |]  -fP E?SFnI;YPuudǧ5xV+hIҘi;P,-a݆72l#뷨zWp.%϶.m늆Brʞ?3y<:0-&"y|6aM~3=q$N\TK$KFʕչxe/м!})*zl<zKT׳Ob]m&$|Q Fsb+. 7c~U#cEKzhUP+(g~Tt:O!+3)b ,w+!yՑ .AP/DۺTuѡX( ol M>ZW )ryT/f  vOW 3vQgu t͉R;rw|#6t?|Q8b/ y%D`:>D1# ْ{pw0Jޭb/MRW!\*&!՛/9~_9"8 ( ΂!&p 3 6oB .28= "ⓕ fv+i[3גуԜ%mJe^j#xo~cN"hqv_nx3 Q6qZ֬ (m3fFCx]ť/~1)i:8fHɍbrɎ;Mp#;$ 5 '/PFJ&sGsݽdǸּ}_|5X1u'<($ T- vD054{HY1{`WL%'/\Þy匃ť gYk% wk[3Qm:" ԛ?^! ?)x_&ށnR:) 3MR!/+MzUzq"ygeS][5{$YM9 d~lQT={ːo<8iZgϯ u%pǴE@+)ڌEPiDqܥGzޏv_)MU5]u3QRyȝJrWң#lEY|59h'_-7i]a -"<3k/Q,Nl<[KJ%Ye8kK*L\cVDT3F~I=]mW BG}YLOJ^6P3Z ̷&uk&mcA+=;  FeY{JG dtBdi1Ibȱ琵_>ksT^&4/>2۷@\-4Q^gXW xV?;E9&ĂZ)Ϋnl*hh!sv亢3lQUi%NuFeؼH0cN \.| t75|i_k9N$rJf#!T+'N;2a9l0LL/X2`.&0,\@*K.lx+l:};F#VYb!vƯj!f)"kYRL#=/xb^nKaRY8=˼i x-G0Ε}`&Q,jd@i>@g:;ǀeDÔIDŽqsԖl"+@~w~f>(^/j|or߹Ko$SC_̜7#G1.9,A<#Gt"z0o+ Nu{pRQy*>Wv+:`*""䎩朇̷!^tv,y3 EԯFMXף*񓱧_| h]7EmqNal WiMo6tf3-qıIFy6y0bnxN="p;3u0uW(g+֍ u;@rCd჏O.+;<{_[|ìK?*Dw!G#Wga!ak6 JFa%2,)8Ɗv'oWF#ItK9lC0)IV- ~1Tbh~"#A9i0g`lή)#A'̷}sۙO;0 T8J1_8o X ڻE5SUǼĿ8,5J ?8kxQ1!wz c-_•b3Oy9~ Æ C q%c F%D K>Mb@dH3-Ź\/Zm - Hd]UMKXgɌ_Oi՚G"gMiwPJhqc(^"C /t }(RU"+`JT :MQl?'<)5{AtX*PPZNh܋$aQO7wvů[@OABoU KSp`cxVdY3" Po̬AOB(4+o} O080KV8x:cQ,w;0jBnZ]AfGAo<1,^f3lOy4M9%qM"Eјmls(ZRI=J볳X*Ғ О"Z6rdf6AGO zxB ٓeJMl0[V j܍5;|Bwqj Ra (+qX7>lX>ON67ܕc#=_)oX :a=omإ8DrF3ƈ{'d[9Sl1#j6f$u@v̮ á룐q^]A(GٶզJNEq!HᔙOݒ֨@xtPzTy?W) ͯoIMX\v@SO^VKʘ@F:EiZrUD*H.B h,[?N5K&|ћ62Ra=Wbn(*dz`dҖHmdwߪJkl&ʐUqʚDfϼ#qjI@)3l\~%ߘ}mdƽ3}‘~pj!/ڴSő ~8npM?(mNGȎx KUx JRqBXomTU ? )ǿA5Jϋ-uuښ\]rM|9\NG=7Q/4fln WbSK,P _(봐՞QSbKw'a}Y:ޜ7.jS?@%.lƅיVv[i7ALFIEZY kA^5Yj`vIݬ k`tkH|J"xO.;4LͶ%i N?W >6r<8DeYD4 f; Qk{)vD:2Yǐ]-=}iEc.b1+2K3(5.na3^1ZI 17t&x;'G$='ard}p@eªT.4n@aLHWxfi1  Xwl A1PfE{91g+AlgW+jND$%HCQ{piM"u{%e`3+pbt;WGuUyXI_Hj>8Z[k|~PTY~dY/D~C F`ݾi_P/`kd/ǰƒ m MR$ex.tk|ঝ/: $~b3h12BZJxeV!TJ/f{InCU'р><-(fpc~)Ke0!I0WR~L-a[&͡Yv9M%Unp]ŕ HAz7+M ?)5b_5@D~ߋa^+/f)^1Q XVৠWF/bhcc4 q [eOF'R~|ɉsJ7l0O;[(FUn!Oo9[HWUZVV?yj.}p4dHj"qΩn(Y",;GhBipS^|9!{W^DT4"^\y Gus#j8;7G&c|~bk֣N>i.4CFbAQ`Y2rFƾĠ]ȯ($'qlum ׮x:be+`]N#.@~N$8r}pE@YCC28;z+Vjo l!!UY_6a8o"AXk<N8!NG_JFZr#ɚVTzpmԍ.2\V:lq犁zuBᷔjT EdY(3_a{|4Jc67d vrh |v|HzΛx]lg6g|.|"c^ULp`aRIT }b ~ q2H;ܦR]'cבuŃk!"u1lȕA.-bQ~"l ˏc48> @+n5걨Qǔu弘6{q-?7[ <ռ{Z&/;a~b5>4; K[qn3], + [޲},A}+XR9:=El#oHC8-CΤ|0U>}S[3,Ѕ~tg,E2R"PÓO{woD' y_A]vZ-.ϵJ I|*=^E0=jtF69sJqtsxZT%T](NYk~ p4`"i] %|9|' Z3vxL 12Rp5(q/t,%>Q~PRO9YSǸ cSb|)铮M{ɇzQʮ< or ،|xlgҕV2//RRN/ʭI8x` }zre7, {D]])[A<9 @WnaOd轅XSh4Yb xW.. Al9 q (H㛵]m_M|S񇐿Jzr\厘C@GξFPI*IOhx T) hZ}ſA%E3wJV휫PO J>-ӄH@kk$mb uj<[ ICJ7[fZEWI f?e?skbhZ&Β1(И$=_ȽUM +vl>iߌ-%ʔ8C<^; B7s9 (!fժцCfcEvqr6IƄVg&2e1͔7XLE D MGS%_,(eГ G&F=Tf:_wwC"93ȃɿ+TJN^Y(CLOZb{M8gQXvlcQ{vM_~4t;NkX]ZKf 2#;꘤.S|)R,>U|2YE{){G ""詅^;J7H8&uJ. Rz1!!Zr#V Vqa-p"=bQt񝪖@3vZ1pwBHh;4xŊu0z/7`tVKcs( ^1E<.k~J6N9 :1C\yNx; iVS~zL|h&̉Z}O.HIq!\Jv:܍2W>gRqxRD_B_ta>951HEvK]N.]gizVҋXGWë܂ok,i7#fhzo ɀ4[-%VQVkb"N +?껳iF:\MtX`5^Rt{tRďZp =$ aB֡Upi%;`*7@lx}ĤA\!5mxn'c>ޮ&2›Wo4 a|8?q| iHqBY?)|1wBh\li%w]{;yBW̅B$J*q2Ը"`>e 2PdynZg}+/fKFIem526ֈ-MWfoz?do#m[?$HԖ";€j)$ߝ}f#R>REyj^Ll7K.QW3VҚ޵s0=3a.6r%%SI۠u(sjV?7\L 7>xp uDJԂ #Rˇc$0%>š: {_]1}b&s} dx& tErߙ".KLJma J^A(`{g0[Īb&{s/:Cj\x&M !г&}1=&!zgbaҙ?N,_\΃T{+\xb/l^B :"Im/sb F>lEt7SŽkR0Y5m60G8!gܩw.HrܭW҃9UU&R1'UN| OZOnvoCl:,A:kiQ3pZGL%VО+qonhx%6D?EdP%#Qí*[޼yD%ќ:}I+ \GX\2^eV*vOG&2d8mMp{ҨݦhpFmgL^{u0BxC4J[}n }ѴTsMcg֡oi%xPv%8r?>x(pFgWEl*|LUR{QȪlM!@#r;P(uֲ*keZ# ou&ϙgCQ_?wD3рgF7cC7|' wATlByGx7S4VvU=**VC|Ŭ0ޅ:*t&W 5DĈ×`IK/3c} 2g.QSrqܪ 0*HYA\; kT `cZ<,}_YUkD\~)J'}(0 JqЄSUnITP0B{RdJ|Y_Ia|PO\h򨼇I}LNbpNxWy7)EJ.8\uSǦpG-08[7EZkmc8p$k)u;[x0uۚ*[2 ,:/a[/>$UϜJYSpc3D6:~J\|nʯW0iԻ`Chk6Y'Jz\s!Q[2^mkEWҜnD@8^~r@. &ʙe5W AYz:P%P7S :YW/o5΂;j8[V΂CTdpY/6V/VJbt!,;gѪZ'#t:1~ڭ]nl6tܸ`HDHߧo !罽 Ը3<]gn>+fN5[[SYOYXOsl<:?|kB6fM$ 0n t%aS7S>0Q+rP,)+ZY==+U( b!mګ1_kL}ig3&kD(M ܊&VόhAwGC웂PIzL6||U1.3apQofxrE068D]wi`w=p&5(ӆ:/RF"-<*ꮮE2; QB&g!yԏc]Kz)^k9|~s,ێsO; 9{L_;%Y3qm7] 8'"PV1fVbQoK{2xJS2pwӅ έ ]olQ0T; 7B,`jBz BŜO:δ10cz\!qWt(VK$.4~韥X(W 2-Rgc)vm)dZ#wt?>yp#YG YQ_8?_ң켚b[M ߀/n8">K=ww]U=zy'I&G'3Ƃ@71Q8̽\%TFBf4 Y0REE 秖o-ypz8J;dh?'X6;nZSSTAek4G uyfp%fgX~wXc% ] xaZ,{MT^BСjF1@gLWwTnZqxdžDsbm eDT}bCgf2.4j 2ALj_}u%W`_a Hx&YŜlf ſ/“>ILjX pL%i a/Lyg*BŽ/ԉB)HAp`[KKYdRR+mCPKhP|`;]lM 0s|Xn5~F; H[?z6]-8DOS*Z)R=9wUXt. j)m)'ڛ{>m@P !e|&veMS$ LZ`5MzC3xΉw ݺPj-u3Hh"M5/Y&* 1yU= 3՘9Rk8`]|U3B[N|Fz/t9)3 %Yg#@|7v[#&T֫ZJdtO`EL![2#PIvWJ97L>}+ Z`@{=iJR!"gW?kD}^ϹtuԎB+LZmlfcEax3:N^b~7&i&6Qژ56R*Lj~WHṃd}O#U sJ`*#nq=OB#M Jvg sF'H)(%?Nki&VB~m SH yםw~-]+ Bz/ֆUO=t–B܈saӫxc!.**AH %,'d*>Ƨk֐S ;k:![{(sF 8<ߞtȷb$Ja]"N*ЬMI Ovbc[z_2xdM' 2SoimU㖷S qכ.jdw-"@3 q\ P@oȘ7&Y<)Kfr^ /j hG [k.[+>S_Z9kaE&'/G*v Je;k$H Q @_z)ɎuݐNbp! Kki>4wͲ[~W~h!d>)K՟&ns4Ώ>9wy>BO-Ϗd>4N,rRUݮp L5hn'QOL8n.hX>"j!gڐ4͉FkC:tw4:P#[e%" 7:UGfoK{Ie4CK{F:0Esti:S5$a&hS byiNjٿI% Q Pi>XjlY-o ?htE[H48. }ZHŹ[>S0 ӑq?yR@fXKө8n,/PEI 5ּTm"uoix-yt)1 ySԹRX~\}?*S"M`Dxy/c9FѴ5ͱ\ųbVI/{܌$;\DwpII9UFz@F"=Z N 7Y% .Qu*qpw`W[NcT|je߹xٿUh$lumb±QnQ BūzG%AG'aB6|| ~eP0maqytf/e٠:CYoMUsZ7Dr;>V*ǒ >Q qAv\n=`Mqr"„%H:r'^kid'DgupnSRGc 8L'lOg22%T㛍MݼB|2^U(* fȈ.計)%҉;jmp {M*)kittLl?檣 U!6n S] JZS@,G^l_r:gs C.NGxW{s̿7//k4[{Kho=!0٦q"BT0lt%[LaS7:^.qTX zr޶8Sd~?$"i:B!zT?HFy!wG+U@<׎h Ys0^Uƴ0s`R+*6}j;p2M$'.68#4A\&]ͤ=̬47G]{-Մ1/3m%;qчlnM 9W2ɥoM4 OС{awMmSˡZrEY(QDo3Gkz 癀sH~q% >B𔪍#Lâ&B(Y!hɾ33SMHHuB×`}ȨCJDjjYx}n(Ql*9g?-(\oӥcJPv~ŪvVATffKW3][_hEY pQMkdx lّHܥ8ZQb3 dTi@zJ e7O%Ln|)&}PTд#B:=Ї9|01!5,JJ83*Z-A ˣVO)>{!|^ϖ~$ ]xlG?oNtSu0,Kx+J0&~LXf7v3-co9+Y{o9qE;:218K kwĘڐnϏ2Z7%8%U(811ʿA;D%T*^4SXr= ٴn~gG7%@$Е$UD7%<Ϧ|H!E[ aMy.\ȟf&9IL}P`+' *ia Q!.ˁДܢd$!o蘍*nEҟK9ZJgX~*{˰@9+ӪXݹЖܷkʮmԩYϾ6(2'~ ){4;"&(niD&,H\]=q" Oz޲?ΰئ}(M A++5 >YG`]?|fHأ}Bњ`ܜ %peZ !['XZ9pc߅F<`qŮ@`eS#H,dE JX)_.>މid0\*#ߚIlϽcxrY7|FrPgov.8+ i-rBlS=T:2/pEA Z4Q ᦂ t5a6gBfw(t24e753PgM%6)UՏ%s~u Fl/9d Awmۀ^eN 6 Ejkmf듿EVeBȋ>:fxu."kEOH;̊L3պ6Ġ.d*D|i7al3 h/)k)NT<~z\HFǴ^JgL pDȠO+WxJ?dܯ{ܦ"> xf8Sn-Uɜ H<pCd'\Ea9{R6[ hN ݧ3 #RJz Zyc<%>/e/qA+ӱY2+;9`za&޲<' _V,X.b>o3Mycgu;ޕ[?Um"[I/Ȼ%B ;3әcvVvPXZ{ⅻ$Wby%(8 r Mf [+E.Wn!W}_ *zr`SSy7} ݍs`GUk$rQoPdl:XAu]Cˈj(q< x]j i-XZXۜhpн2EaN=*̋^h5;6C?4ijyAcw$i`ZaKsV.G,olOaO HNM# =Cn7a0=Fwٺm>#~ԖWTP3u]ŮK?vsZh{+If4,v&j0|{<Hk(l9{ 6y6Xm<NS=N)0( :ۀ YXY]@cs! jZ!S:TGTFTqW{Nx4م׀@}N],+18:)0zN[B]K#@c,5`[h  D YJq{,/3r[2 &S~IXC`Ե|[p@w;Qaj\ݥUt#;#ݓAN&3o3}L[y>by|C/]h1arpۻ4zro5ms\Z>׊6aS*){ ,5uxM6V֨%gVU,/JekuO!L1UoRCFb}D]zk/?}Ik0 0` W4Bu݁iu`Ra6P>x(*F~vj/:8wLgE@IC"H[+5L_k? =Aߩ؉α095puEN1zgiDy[2㛎bQVz_CN [>Ėnrb8X숍t}ư?-,+3ixYCMRLOUVN%xO'2ҋ;!DIhBH;Iyt8[БՌmnIAS^Ǝiei`~BIm"~b6a\`Ti?g,L-(7ʙo׿\luF>BRJ5CBCՒjz{g\09)a Hi-`c&飂}(h Vf˒VYb˴Uے&( WL;%'#Mp(DCcy| Tވ>tAő Pb̐d48i?_) Om\o$+{Nh'ւo5~[_}QJIf{[@޷u0~1T @敿v9g|Ӵ{ m˧7|Tc;:,hH3 _-=}8 yC`@x3A 搉!+hf4$Fxp9-X` {;{mk9Eu1^뒦c#snR١nϫ%ڃ g6:}sb[o@ҧ V1žP6lc(=ϊn˺99j `.H\<9SkIMX`S{V, nU*+(+AZLh~@~WSiBCcs?']RSrIQlzbo>k0jL@Ld;t-‚uꏤP"$】d#>SS CFI;4vDmZL9vS2̤@ ]*Q`NT_ yPכ/8cww.dufxFɄ^4s ă#pZ$S/bQ*kz9- @͛ro]ԫLQVqiڦ_ᐼW3. xς\,TvXK%CzK5f" (cvy5KM8#DY+idMN :aTf>sc(gPܡv ;$_f&yMu;\_Hbq&XGs݀3fB/42jsd ecv#7U(\Ҕi-29g@#%GJwLsW{;>sS\T90M&t@xc<`y,#a}0ۙ''*DIouTTCIiepb^h0q%I) =du?O,b:BufAt_#L6ptӁG_. }n } 0MRǷe15$ZRN A`e:U :Y=˸MksA,Z80j 'Du{;V d*KvXI0ڝR ϮNA;)KPt4)Zvy;G۾NEj;Gf}%xJl]J+e'\`!@jr,!FYEp;_mU_k~aE"\+hړ>c1`4\ rl@. \(GN+Yl? $:*s,i{#㱴HV`w!]¢c_P,()C͚9POѧY2o慴/}dL8 p5C^[X UFٌ2pfϕ94P/\M'VʄYRm!![]/Ќ &*p sZ. 3·6{[A7@]{J7.Fm7vGsdpt&sF0X#-_6.˞,;qLvDՖm,Ө'dX黳8n&%O/6Tje纉8H>'{<&+Vۖx :L8B!iR _S#bߓRѳQ(?}}7ˏ ;Ք l3AmB&yп H*Հ.2E‘+()fl*V m6.VW17I&tVcL{ =$H"&(Ƚ-  ;iymzQչwk SN|mV5Rjds`އ!ȁuhZ#PHVPGagwW_fr\h)$8l%Ss3X IU|nhEVD.VIG1r'7{D(ߥ@MWKL$ +p{w%T@2lU0gQfij0;F$=ν:~MU*^y]wP C3*8BIifeҍ͙*0 gU~E#7|I'l6/|7BhP98G %RwN/b1CSbs؋~;vc{ -ǯHelHXLp]n r6sQC7>+UQhGZ?3HۥXjQ29b%`C8ڈ`|w $iF$8Z;=QE*YJ(%](PC[AVAB)diY:x_P)Z,*T d#vReCr d(|+%Y!wEo]'  g^+ 1f㍚@/qVf3m`XmW/5܁KF>ܫ(ĸ8-&&/H|]5Ivy\3󈊶q[?7[SIjBh-!iK"ڸzQUAG_3cy/|w;83HWXB=jE!: , 6m2ܵ?p5Ϝ\̦N+O@T{R u;FAP?ܿ:dz?*Ay_Z궹!{(;en$Tϝ;ǪRq]bsLguI)P!Ѕ}5qpJWZiXO" GzrFD'Ye$]e\>PK(ӻИInz" fJf9tXbLkay{-Xۄ>8B:E2,g*=>1 ! w>[~G0v^t /1d6Z)vroM24yHKf8.;K@ߩz3<|@50ޗ]ɬ'x8rZ}L%CAo Tm*&gAѤdNv$-Fq{֪ [fBx&Ӧ⩅O9~q1BG_ԆyCh9G'SrZO4_i˝%4&[pWZNl+?RKt{Ca\@ BmbD\LBsc!)ɽT1 d_#CHߜ22,CHO {y:eosKMpjZ$+ݏ'ufi ;Ɣ 6[\\GQ+'s xB$%D'=FPag M2jYl)Fr\2:Es…ll+5V\Ý6:J!80(,ADsisUgu?+` CaYf>_uץ;uZ;3X`RFmqNOwUʍƤ\㞰u ֵBsOﶆy\vgty繾1xaUVD{/m;w,q΋/oC8e#_3|LK0 L@pf.'zk[BKZ]}ؼ<&őQ Њ݈9\Ds'4]ίwy` .ĬG] RQsgLǡ}[Zt1B/Cwl\B(,yX9`,Fә nqX'5!"̷t3^SUJPbEM h8ZeQ /nhO\3أA =Htz.bz/p`7(.:,f~&[PDXb^"9<_33o%Um''~wOd) \Ldj"v_ z[1>6.Q DƮ-]u7Ǒp+T8M&B~5ׄ:Vpn(` @C|5}yE2/{J>Gj˛DION kHO^_!2`1 l^ fG%{^ IJ[ngo ;sj9a\ @Ls ڨW`]ʮZ6?=(C|_?V˦WH޽B,1ve-r^D[!jXm8Gx_\#S $T0) kλ;G=]G_ae`96nenaNܐ&M1vF;';He~ 10q+Ze2ߡvәֆѧʴVTщ`MU"Ek}2|Xoh0[#KukY!D&$Cvㄿ .|p ,m6yV]NW.Be_͢t/=6#F DbVus׼/̀_y8¢ }.K*r@(icc R>&4ɮ% ;ytmC{`wо!D@EIOPǟT3&MRO}U2HBw0M+ c)ZC{2~h,,U=¶XJ8~mރ @䦎Q~C<#`7*쟧XѺ1 yU⬠Y0fچFI*szS"d\w`0BIiSv62~97.`e/ְGx:ס6SC NN ElyGiט(*T6=U UuKSHtO,6~GV ++࣠ Yfh~"lP n:4Ʋ u7ŌK](hRs9Ŏo5ջlGKG#NLwNQ ñ87a]fG7MQ DU$Spů`\zsׅǘ< |jxؔ PQ5P⩺By$f؈+ԫ4B_,VgUo@S4]XҝwS/8D#k^jV]6YjYƟoK4Rª}mJCm#6 ?^>dqrs馹`"9IeF'q֮JJ&&\EmxQ$,N#FYBnqX0F_r 9QԸ. ^K; y-1,Y &PɏlA ѳB{b@A+xчeQŅ͔Śf\c[$@U7$c7>h[eQ5f&L K4sҚq@=dׂ]eH|<)D=`pEi#͹3r#X}A{E~C; @4:h>+Z|F!h^}K.޶p~PWzey}u c@=ir>PGIfsnx؇}GJ״(kvhnex Muu}?BzZaKYq~.: Md3gG4S[ C%`wj.LIqZ%TvcdkSy9}l1Z 8N~ֆd٫zFzҤ$˭WV ++i>I?CpiJm#ob TͶ\{!cRWB%cZL`ÞD゙D*+yD p0w\K0E6!sXcU={ #ipɭd6, oh#ɧ7|ZԪ^! u7n$mGI\0lV_QG " Ƃ%+ '<,\KDr_d&-]n8B藓)"UtxAu7tS0sJ5.G]@(C,9Jw(8<qE\|dV>63O^R~,b>4%ak/INs$Ɋ^ Ј؉Å?PM(ӢzM'fEm2.P}5,*1&%z=A,bDg58h9j8pK1My3 Y?'VyPH!aG!]$WŠܧf@vx32K2te ]6+#~kE#c;nv_/E֦ S`E]sd"d%]b(M{ ~<o,1`Fm'8Bwm҄4ߚ=+Wlp/<<#-Q/~DTF@ 3̑engfBsXb[`d hϮ-f±4dYhC3ac{U"[ݾ&T{\ _Ͽ;xTcqL 6 R[Wꃉ BԳT YWD1[/FtqJbI( \o_mҹ_g^\mɃ];ɩӀHf3僕<<ݼ>bga2/vphL H %V}*7S۪jբqpqQTOy>,e{"Zow*Ď m/rh`E!m(|L jB[eTơ&L75Q 6zzocGDt):?4cðC%A Xù>caR- S#>fc¢0(؉@shKod$Y+~w`cȣ0AV.eyO;{װϔ1}M?7׮Wz*\m|гҝ%(gܔD:9kŦ˹[얙__hVZ^3b#࿗߱Ÿ}} 79j(,dkiKJæ8 [? [?iY ǁ5n4ܯ8AS=kq%G1/h 񖊮{XZe4(E56މv҇ &{ aƑmC#~n|V'֠coU<րٍ9~CW-y!g~ &ӣ5ď3<#,clލ)dqEyѐUNհU67|{[YY0Mu2y9(|&=xU$SA7{ m f4n|N7~.1:ʇAF<^۸_Wߛ¡Z3IGO׎¤0ʺ֜wυة c%"Jԋ!tFs6ݰ5DA\cHLE-vc]Q er| N@15KU fL` y!st;Gbث!7*V_<Wz8`[k `y@mԤ"bJ //h/mtOO;3Mr6並nF-“Vi5'R!,-^Ԇ#g$t|P06t#Aţ)`Rxa55 ey'W$TO}DaM8%ʊ[u$AOD2IR:6y]f5I8mY٥lXN0ӳ\q+0&oGd1+?y|HDW\DK="7uiVK!D jOF$[w"$,Zq RW>|VGD\ _@\\_"HCgMgíRC)RfeS]fSqRx!zC/{7 9A.9(~cU)t[SԶ.ؤ},`_:0@s߸S{PI)'<<%ςŊ/޺VNfGyZ_bYA a6[3t^cG@B ^+M,о˒sfvxfAf_9+1H(W9h۞SWxk.CGcŪ;>7j!`Yъr:҆H7hn=G\7&Ү"^iB bfmdy_bQP&<0'6gX7^xd^ mbVfѐOvޣsӮE=h:쩞Qk&Kqs b@*qt*%Ap5wdA#&ph>SkŔe#UfM+9DtFkkDY>}i00MQ&\Df`G=04p:ȑMGMfg1 u[ (FqUkN\Σ{1&{;XU@]$JkTF}{omTЋ2k{#5ʸ^C py|$sF+#Le~[( I˶YT+Bi1w܃?Ꜷ'gCg#' lrcwUU+$c ~¯-!| ȅ:7h_T@GD,@3q\nÓ Cp,J34ʾ5vhy?'&쨥RA0w\9߰f DvhJANI*ayx+AQym#&C)Jm7:8B#݉㭥MJ|F`.pȝv.n_3%۱맋Z 5il#n%#bB7Gyʝc68&G^;mM ƙf=&amJ־_=!_OyK' hb p=ɸf(Ƿ\}ə0eW ژilʍf? H-R('҇NhuXjM}Fm/8NMs7F!DD=>5FS[]ڪip:qg(mciUo*wF0IB׎3 4H?#@^ޖ!3hhGk7'0OV* eAq}dnCé]ɐW;{t[,%.&!pN;nZ[-Cx_ٟe- @7;i@"/9+#2ym4g:/BZ*"ؿ_htڎł7+IŎ͟ܤ6nub#y-n+.R{\ HI\=,W>x7B9"ĵB> ^YBk]l(c=8h}1\>oE1 z #k>c\SbơU.L?,NWz#!˧tYOt)Qp&nȍ KO˵M*/V@g1-_lrknc/j";W`o|\8xSړ䵃UILjZ*qVyx4 u&.~%Iwn$LKEKYa怲"900GJ},彜4ԂE -1lΕ{6 :'5wF!B&EN*kǗC7dwb! Lu c>ڰJUq*.;Һ!|u#SO+LQ '1[ch)9U"? endstream endobj 1 0 obj << /Type /Page /Parent 1063 0 R /Resources << /ColorSpace << /CS0 1074 0 R /CS1 1072 0 R >> /ExtGState << /GS0 1086 0 R /GS1 1085 0 R >> /Font << /TT0 1073 0 R /C2_0 159 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 2 0 R /Thumb 1002 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 1 >> endobj 2 0 obj << /Filter /FlateDecode /Length 3 0 R >> stream 0U#g{z7էe/ᶔ+U }c7lNcHcX1 SBu|r 8)j-cTlen+̗ʥ*M a~Ӡ_=\b\ Wԉ6KvÑ0Lt6\y crÌCE/`J7%m'.7{B,ZdD $2vx{ 6J˄Nݶ?rҧ-Ahp+k]?3+ϡ@$J1 W}>ZE2{R;S* l֊qE2uPwϕ;C/y5Q~% 4c*#kULsF+'DDxVͺƮxI0r͸En$|feߟiDf Xf E_y!~h9F XZƤd ,K$6B |{[)sg'c&>`G12޼g̎=iDt,oȥ DYד4Q[`HBr[\EQg>$⣚~gq7 WSX)louQ1t6"b8B2(Nlx«\!ŷfrz/taYAfqQB zՔh6pQfĮarr Ɣy;9,W0cb9f} eY!k}`lFKZt.jI,^B8hTG?nCᭅ_h'KR}mNjs5䈁5p|?ߘtUe[0*mhN &ᓽ wPu@Hn*Պ_ Q PBntŐ ,UۭK r99-Kx ܮByWE\[sRH42 bUpv)#j(]9zĿY - `mP0iwߡvSDy,O֩ 0ǪԖ'a9ҙǓEof !)zx!gX\23JJWw=\QkDsn۽[~+BvLx9 !DZN>u endstream endobj 3 0 obj 1467 endobj 4 0 obj << /Type /Page /Parent 1063 0 R /Resources << /ColorSpace << /CS2 1074 0 R /CS3 1072 0 R >> /ExtGState << /GS2 1086 0 R /GS3 1085 0 R >> /Font << /TT2 1073 0 R /TT3 160 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 31 0 R /Thumb 1004 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 2 /Annots 5 0 R >> endobj 5 0 obj [ 6 0 R 7 0 R 8 0 R 9 0 R 10 0 R 11 0 R 12 0 R 13 0 R 14 0 R 15 0 R 16 0 R 17 0 R 18 0 R 19 0 R 20 0 R 21 0 R 22 0 R 23 0 R 24 0 R 25 0 R 26 0 R 27 0 R 28 0 R 29 0 R 30 0 R ] endobj 6 0 obj << /Type /Annot /Subtype /Link /Rect [ 127.62 583.125 499.20001 597.94427 ] /Border [ 0 0 0 ] /H /I /A 33 0 R >> endobj 7 0 obj << /Type /Annot /Subtype /Link /Rect [ 156 564.76501 499.20001 579.58423 ] /Border [ 0 0 0 ] /H /I /A 34 0 R >> endobj 8 0 obj << /Type /Annot /Subtype /Link /Rect [ 127.62 538.18488 499.20001 553.00415 ] /Border [ 0 0 0 ] /H /I /A 35 0 R >> endobj 9 0 obj << /Type /Annot /Subtype /Link /Rect [ 156 519.88489 499.20001 534.70416 ] /Border [ 0 0 0 ] /H /I /A 36 0 R >> endobj 10 0 obj << /Type /Annot /Subtype /Link /Rect [ 184.32001 501.5249 499.20001 516.34418 ] /Border [ 0 0 0 ] /H /I /A 37 0 R >> endobj 11 0 obj << /Type /Annot /Subtype /Link /Rect [ 184.32001 483.16489 499.20001 497.98416 ] /Border [ 0 0 0 ] /H /I /A 38 0 R >> endobj 12 0 obj << /Type /Annot /Subtype /Link /Rect [ 184.32001 464.80487 499.20001 479.62415 ] /Border [ 0 0 0 ] /H /I /A 39 0 R >> endobj 13 0 obj << /Type /Annot /Subtype /Link /Rect [ 156 446.44489 499.20001 461.26416 ] /Border [ 0 0 0 ] /H /I /A 40 0 R >> endobj 14 0 obj << /Type /Annot /Subtype /Link /Rect [ 184.32001 428.0849 499.20001 442.90417 ] /Border [ 0 0 0 ] /H /I /A 41 0 R >> endobj 15 0 obj << /Type /Annot /Subtype /Link /Rect [ 184.32001 409.72488 499.20001 424.54416 ] /Border [ 0 0 0 ] /H /I /A 42 0 R >> endobj 16 0 obj << /Type /Annot /Subtype /Link /Rect [ 184.32001 391.36487 499.20001 406.18414 ] /Border [ 0 0 0 ] /H /I /A 43 0 R >> endobj 17 0 obj << /Type /Annot /Subtype /Link /Rect [ 156 373.00488 499.20001 387.82416 ] /Border [ 0 0 0 ] /H /I /A 44 0 R >> endobj 18 0 obj << /Type /Annot /Subtype /Link /Rect [ 184.32001 354.6449 499.20001 369.46417 ] /Border [ 0 0 0 ] /H /I /A 45 0 R >> endobj 19 0 obj << /Type /Annot /Subtype /Link /Rect [ 184.32001 336.28497 499.20001 351.10425 ] /Border [ 0 0 0 ] /H /I /A 46 0 R >> endobj 20 0 obj << /Type /Annot /Subtype /Link /Rect [ 184.32001 317.92487 499.20001 332.74414 ] /Border [ 0 0 0 ] /H /I /A 47 0 R >> endobj 21 0 obj << /Type /Annot /Subtype /Link /Rect [ 156 299.565 499.20001 314.38428 ] /Border [ 0 0 0 ] /H /I /A 48 0 R >> endobj 22 0 obj << /Type /Annot /Subtype /Link /Rect [ 184.32001 281.20499 499.20001 296.02426 ] /Border [ 0 0 0 ] /H /I /A 49 0 R >> endobj 23 0 obj << /Type /Annot /Subtype /Link /Rect [ 184.32001 262.84497 499.20001 277.66425 ] /Border [ 0 0 0 ] /H /I /A 50 0 R >> endobj 24 0 obj << /Type /Annot /Subtype /Link /Rect [ 184.32001 244.48499 499.20001 259.30426 ] /Border [ 0 0 0 ] /H /I /A 51 0 R >> endobj 25 0 obj << /Type /Annot /Subtype /Link /Rect [ 156 226.12489 499.20001 240.94417 ] /Border [ 0 0 0 ] /H /I /A 52 0 R >> endobj 26 0 obj << /Type /Annot /Subtype /Link /Rect [ 184.32001 207.76489 438.91437 222.58417 ] /Border [ 0 0 0 ] /H /I /A 53 0 R >> endobj 27 0 obj << /Type /Annot /Subtype /Link /Rect [ 184.32028 195.40517 499.20001 210.22417 ] /Border [ 0 0 0 ] /H /I /A 54 0 R >> endobj 28 0 obj << /Type /Annot /Subtype /Link /Rect [ 184.32001 177.04489 499.20001 191.86417 ] /Border [ 0 0 0 ] /H /I /A 55 0 R >> endobj 29 0 obj << /Type /Annot /Subtype /Link /Rect [ 184.32001 158.68489 499.20001 173.50417 ] /Border [ 0 0 0 ] /H /I /A 56 0 R >> endobj 30 0 obj << /Type /Annot /Subtype /Link /Rect [ 184.32001 140.32489 499.20001 155.14417 ] /Border [ 0 0 0 ] /H /I /A 57 0 R >> endobj 31 0 obj << /Filter /FlateDecode /Length 32 0 R >> stream TgݓD ~:xW=?R覷ougJ!D-o+O]Ϊ` l^ YRpvԉ^j|E8fyӹK2UmGT:qVa,7eN=56PkoٔM'1rOCSake6B7yGo,m$68@  ve0=sq[OI!KO7dG\c fg5˴'r:IV$-E)kFJWq_ < G^JB)&3ߤ, *F%r-~q tpdw?Ln٫gfUb#֯AzrC2T:y(Pu _ H_v"H3j+afn5g^I-+M((ݕ뀰$?Cy!-甯~گ  /UsSyxw㇜ m *VbhJTmwP\әDFެ^s# e)ߌ> V4.H>@_bfM*44OG(]GؓPٓ15>yg L* VUTLt_5t %(Ş{R"(xK>290> z-=Ʈ VzY,hY!VC*o:OY1be .PvV, I;]%DoKW1Ճ|Geu淐M^~='Ay x*lnj_<Ɯ.#XQq= (Ǣs:9͢[k["n]$,57||So竄Z)Q^ŊuCOR<W!kRMe.fVZU&s8x.dR;&>VfM@~^Gv牡K%(Ÿw|"WΎ2aa݊,lz2,}g;Nòk>W݄wf'W̳@(MaB8iژo7lzvZo^AoI^ƖdƩZq [ (yof7>(Gn񚙉 zx4@}Nn^#mS 6^xt0ڔ1sL>;JXNkTe1%db1rXmj% LA4BlcG˶KlR;P9Z xVMN{*ֺI.|0 CB9 ln'&7~x2Al!,\?D79.n,qQ2Q!hA}5L2b16^>~9bGMqwo5kw! M&y}L׾ҫ윌Yi.ј*i.CCU^ry]{prWsuཏK(B|b3Fˆ!ԢiףS;En}^YX=.WBf,wD5)6ڂ8kbZg$hN; m뀘e.kuc\\_[3_G?R)y=-3ڈ;_#) _' j%CvYwck0n)]ˣ*7S 3)hڵj4!#`8(ޫWAgZS%^ 1!x~K np,EM̎X/ƂW߾EkxSpqlD\ &Ԑ,RɹU@6 /CZ 3^nR6TXJ vA(cBpilj 'Yۛq.V} P}<{jэM)mm6jNLj"Fƿ!/u?Q2Rx5 DvAcά.w=_Pbtcy:0T%ًb|Gvc0@)mY S= 3,>-5l\iǷ,{mL 5:(4S?t߲D<.2" *J^ODA΢gn&c"cmOK\ᶾ[~S4 EM݌(X r2޽iGnE1fzec[^_jwWuGf~9òg?PHR~"c\F5rI  q$l)8ԩ,Q&wwɺ/%lh6_k Ѷt sbw* d*M~>7GD]NmY294r`XJGh3^ؿXv5NQ"368:`*^`r2W-0l/en"RދnWoNSP*ZSﲓlmK>pF~’T)67h`S<$ ya/#״ S|0 d8l=ȸfY;g/Qճ/!ʅ69À9N-UעG{4 ֯yܻ[d_!dɬc-G&ۅ4ՓU s{TvpG2)#[+_Ȍ/R|R3>PV[znv3+AsAW7˝Ԉ 5`7DC"Ӹaݍ-=ȼ!P7uJO[AC\L ~d=%0{]BzG!%>wz6t|r_Ak.J֓J>#'o1Z]I|ҟ2~nR0Cڳ^+J*XK5(_~N\ b%M*H< PKT3Z0NC_ ȏK}ךԢ]nCbG>S&6ز(+YpҮd¥"`"8stWB~o;ƒ&`eee=\Tm.S!QWBm;V#Y}?>JމlU^)<_wv !Y[@;,9#KSA!sVLXGk!oD.xWy9V'V]\rn971wiȊ㇅_YM,&OޖT`Csi*Y>oڑ׫$jv˧%re)&Kͼ2%Cbzaߒ_ ݁ k6$h*֨cnӏNM1 џ QZuA6w)>?'hܿYso49#L<)^@~NXD1HVw>=dG2)%kk4@bWDGq+:(3kwz!։1^LBx*l?Zm?3(_}k64[O 3yiIa U"Q\8f-3U)i endstream endobj 32 0 obj 4254 endobj 33 0 obj << /S /GoTo /D [ 78 0 R /XYZ 0 842 null ] >> endobj 34 0 obj << /S /GoTo /D [ 78 0 R /XYZ 0 842 null ] >> endobj 35 0 obj << /S /GoTo /D [ 83 0 R /XYZ 0 842 null ] >> endobj 36 0 obj << /S /GoTo /D [ 83 0 R /XYZ 0 842 null ] >> endobj 37 0 obj << /S /GoTo /D [ 86 0 R /XYZ 0 842 null ] >> endobj 38 0 obj << /S /GoTo /D [ 86 0 R /XYZ 0 842 null ] >> endobj 39 0 obj << /S /GoTo /D [ 95 0 R /XYZ 0 842 null ] >> endobj 40 0 obj << /S /GoTo /D [ 95 0 R /XYZ 0 842 null ] >> endobj 41 0 obj << /S /GoTo /D [ 98 0 R /XYZ 0 842 null ] >> endobj 42 0 obj << /S /GoTo /D [ 98 0 R /XYZ 0 842 null ] >> endobj 43 0 obj << /S /GoTo /D [ 101 0 R /XYZ 0 842 null ] >> endobj 44 0 obj << /S /GoTo /D [ 101 0 R /XYZ 0 842 null ] >> endobj 45 0 obj << /S /GoTo /D [ 101 0 R /XYZ 0 842 null ] >> endobj 46 0 obj << /S /GoTo /D [ 104 0 R /XYZ 0 842 null ] >> endobj 47 0 obj << /S /GoTo /D [ 110 0 R /XYZ 0 842 null ] >> endobj 48 0 obj << /S /GoTo /D [ 113 0 R /XYZ 0 842 null ] >> endobj 49 0 obj << /S /GoTo /D [ 113 0 R /XYZ 0 842 null ] >> endobj 50 0 obj << /S /GoTo /D [ 113 0 R /XYZ 0 842 null ] >> endobj 51 0 obj << /S /GoTo /D [ 116 0 R /XYZ 0 842 null ] >> endobj 52 0 obj << /S /GoTo /D [ 116 0 R /XYZ 0 842 null ] >> endobj 53 0 obj << /S /GoTo /D [ 116 0 R /XYZ 0 842 null ] >> endobj 54 0 obj << /S /GoTo /D [ 116 0 R /XYZ 0 842 null ] >> endobj 55 0 obj << /S /GoTo /D [ 119 0 R /XYZ 0 842 null ] >> endobj 56 0 obj << /S /GoTo /D [ 119 0 R /XYZ 0 842 null ] >> endobj 57 0 obj << /S /GoTo /D [ 119 0 R /XYZ 0 842 null ] >> endobj 58 0 obj << /Type /Page /Parent 1063 0 R /Resources << /ColorSpace << /CS2 1074 0 R /CS3 1072 0 R >> /ExtGState << /GS2 1086 0 R /GS3 1085 0 R >> /Font << /TT2 1073 0 R /TT3 160 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 68 0 R /Thumb 1006 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 3 /Annots 59 0 R >> endobj 59 0 obj [ 60 0 R 61 0 R 62 0 R 63 0 R 64 0 R 65 0 R 66 0 R 67 0 R ] endobj 60 0 obj << /Type /Annot /Subtype /Link /Rect [ 127.61972 702.10529 470.82001 716.92419 ] /Border [ 0 0 0 ] /H /I /A 70 0 R >> endobj 61 0 obj << /Type /Annot /Subtype /Link /Rect [ 127.62 683.74487 470.82001 698.56415 ] /Border [ 0 0 0 ] /H /I /A 71 0 R >> endobj 62 0 obj << /Type /Annot /Subtype /Link /Rect [ 99.24001 657.16492 470.82001 671.98413 ] /Border [ 0 0 0 ] /H /I /A 72 0 R >> endobj 63 0 obj << /Type /Annot /Subtype /Link /Rect [ 99.24001 630.6449 470.82001 645.46417 ] /Border [ 0 0 0 ] /H /I /A 73 0 R >> endobj 64 0 obj << /Type /Annot /Subtype /Link /Rect [ 99.24001 604.06488 470.82001 618.88416 ] /Border [ 0 0 0 ] /H /I /A 74 0 R >> endobj 65 0 obj << /Type /Annot /Subtype /Link /Rect [ 99.24001 577.48486 470.82001 592.3042 ] /Border [ 0 0 0 ] /H /I /A 75 0 R >> endobj 66 0 obj << /Type /Annot /Subtype /Link /Rect [ 99.24001 550.9649 470.82001 565.78418 ] /Border [ 0 0 0 ] /H /I /A 76 0 R >> endobj 67 0 obj << /Type /Annot /Subtype /Link /Rect [ 99.24001 524.38489 470.82001 539.20416 ] /Border [ 0 0 0 ] /H /I /A 77 0 R >> endobj 68 0 obj << /Filter /FlateDecode /Length 69 0 R >> stream o*sw-N E[b\x tzLSՔCU*hėѿ@{UB+ 5< )MESQ_S<7Sd~ƭzxUVdw;i@mgNm1ޜyexOW1SaNADA2"'a6?`e^Q+_ XX%wH:'$.@A }o?a0ckhu %pP4k!3Aw PcxR^߄MO8DYTXsJiOԢ~݋Cˣ@; 'H#_q{7^/pDĥ|4V9@n0GIaM0vP݈;ž8Mġ/=Z._y 9kn&YeA{7y MVe`7 rdWTZ󢛂Ko #(9)5'<,WAWkSΎYh!>Cl3eދ"@.B8\̈́FI-)gv ‚i< Mxtlit/\^30QޚQ^){WZHb xVқz8x'E"q'}1hKxk%ZjBB3u;5r縋4;k[(K endstream endobj 69 0 obj 1752 endobj 70 0 obj << /S /GoTo /D [ 126 0 R /XYZ 0 842 null ] >> endobj 71 0 obj << /S /GoTo /D [ 126 0 R /XYZ 0 842 null ] >> endobj 72 0 obj << /S /GoTo /D [ 129 0 R /XYZ 0 842 null ] >> endobj 73 0 obj << /S /GoTo /D [ 132 0 R /XYZ 0 842 null ] >> endobj 74 0 obj << /S /GoTo /D [ 135 0 R /XYZ 0 842 null ] >> endobj 75 0 obj << /S /GoTo /D [ 138 0 R /XYZ 0 842 null ] >> endobj 76 0 obj << /S /GoTo /D [ 141 0 R /XYZ 0 842 null ] >> endobj 77 0 obj << /S /GoTo /D [ 145 0 R /XYZ 0 842 null ] >> endobj 78 0 obj << /Type /Page /Parent 1063 0 R /Resources << /ColorSpace << /CS2 1074 0 R /CS3 1072 0 R >> /ExtGState << /GS2 1086 0 R /GS3 1085 0 R >> /Font << /TT3 1073 0 R /TT4 161 0 R /TT5 162 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 80 0 R /Thumb 1008 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 4 /Annots 79 0 R >> endobj 79 0 obj [ 173 0 R ] endobj 80 0 obj << /Filter /FlateDecode /Length 81 0 R >> stream (-`AIR=>VO^ /,9B΃k9Qe<ڌȃv8/55/\xY'/gyX u RaH*Tcy8J~6Ѝ-<45EG/eH(E#.vs^ڟ B)-e 1;ve1VÊ,twu7a1(V:FW7t[ IJn./*Mi2{:% `\u{AS1#;Ww.˜f3eQ}:8`7c6vAƻthw•qy5ۦtf:u@ՄPY hZZYSZ>)5]UO.ރ$b59;CRYz+Gߡ՞4-=}a\1F`Qo'Jock_SKGNGo / W}!g mmVˏ^Yb e%bz5N/x1yjGlm@.*!)D-ImQ IlY Me"XF(6B{1?JKY:# %48gun'u{v2Y8p`'ۆJ">,3QОc{1+L@LV Qm &%w(Tn mL2`S\9L;)s] \f< }HIy׎00'V~X?ͼȚm)KN'4~MCBFkfyu!)gtU۳TuH'?T>SQ,I;(wXi}gg"a~Ossn xeR'@5=KQ,3 ا\8eĚbbb,.G=k:f9,@7 l[)EۻG1.^+2KxÙo~eoi0a$"WVMV)Odb\[YvJw\!79T_+k)qEuxwm#Gf-Cyfu!*0"?+H?S7)=61t#a Y^Zf{`EKY:h)]O )/IkRnTtzIEd «;]c\Pw?-@,ӷnX,} CWկ؇hp_mzHVfV -@Yy|= ԑHdpbhl<_f3"T=~FC j߶Q1wNU0jQI8|r$OESNUFn}.&X7Ʀ@_y"sj߻1Īp>S|:UTșPh|"RJ 7q]F;SxYX{*I ͢R(MqUS*OcWF!nnOTAM*|`!pT&c#0zґ]*Bw!\T?RRFSu?i\_6rUw647n1$ͅ"-%ȫIʤO P'ej-v-->圁*/7ZLΑ'f;J*oR~DKm`\4F=olcR4Ҏ-J ah_>%=Fm:;$S\y*, yVCj޻ o]7W&oPz *DïbiQt֪AQ+O%)¥SN 6]7:BT! jy'XA']zRiuW%WF@ Vȗbpob@ @<鞀p&Ue|2q, wD(QU8VN4V+" ww7}3ڳ :s&ysd]kV&-4Bֶױz>;5MC=v Q|C52xA: ,Wb|l%qgmOYK8GH2?:Va@)5"}J%G^U\9S##"M(rwO@4ǂP Q]H-1bA=GlHP_ߋz|~;%CNJ7(ةffȥOuЂd0D39Wb ]E%16uv'<#xHzήY662:9a9;0:QKw'%.G<]3 +`Hue?pS(ۓ(Y x\{js,q) :;U3+:;Z3u!c͑ f!n%W)ݮd䱌 endstream endobj 81 0 obj 3503 endobj 82 0 obj << /S /URI /URI (O#kK;O P) >> endobj 83 0 obj << /Type /Page /Parent 1063 0 R /Resources << /ColorSpace << /CS2 1074 0 R /CS3 1072 0 R >> /ExtGState << /GS2 1086 0 R /GS3 1085 0 R >> /Font << /TT3 1073 0 R /TT4 161 0 R /TT5 162 0 R /C2_1 159 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 84 0 R /Thumb 1010 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 6 >> endobj 84 0 obj << /Filter /FlateDecode /Length 85 0 R >> stream m[+arQٜ+YۡՇçLlD\pZq݂YB4WZRXK  '7IK;xL7I϶J,OHrcw TY#.71U9?1(, /jB9) :@$ jy+d;;!kvC,}f9pR(UgMQ*uma߉‡@C8C]"ܕ whf^a*R'GcB|JRZ f.m%ߝ%_Ĭ7k@KmcNP *6`o{.zlVvXS&ǽҤ 5Aub8ѷkOoeG--\9cĞ_LсTw#$)mCeH rX=NMD<&u7\ Y? . 9YHTpGteźq&v׮)G6 k3eԜ/4$iiJ䴪X9hHtAH[-ΐ/4w%2}4aՅa'vBׁTMU`֮UET׹\:ݴ4 KK(]Ie U6xͮbHppGy|Hσ~MUl;A6ςݜuFudj1_7&en j@GCU{#]輼8"5AZw0u2o$%;Ȧ}Z8͌ ,~bA\,r.<KL 5獹U} ]Y:WiS1.U\׹}+ӦH?Bs!sl$}.oc^ݾDMT*l*C~'ILV} 0;~q۞V\B1MQK7t/cLI { ( V_TB?k.gVD"R2]HVW%9[jI\k |~*t>gza%] !`?ȳ#``J(J4`ѹ>d\Fk̰d>Sv^,/uP{]=UX(U93O/AU> "~D8$M0 IwfqT!o OyPsO#ȎVcna=Jn 3:$~4BԖm"3k ˆ9V_/ȭ)U,U<ڂ#ʿ1)&4@8IVUtJ:ӕ'54oNN-[>eLS4K!B4TWEw3 VB,}@:nX>&U i C{mdNu)cRyI7䷆q87GwAnMoBEg+zj楙f\WU2`Zms:相s:2 9B6 B3!UEF̷wِ&=&- {t%ȭ,'gAI;5:;&k~)RX V@e<& 1~H1\ϕ¬%q!*ߋͰ+P/-d>0%Dfp]5#W"ExeN~^ImiģCUk񇒉OoGKS rJ5=pB+)voA᫷Qnfu>az*Eo09,!@TO >OSBȯ$; vm%#GbXy)`|eÍ#Vmd#nw+EkLRTsAz-G쐲,}$Dv&'VUcJt:ښ+!BjMoΓnfqV%)]'GRL'ٽ kq%APa;3GPQg޳v5M~Z9+>*bA,เZȽHkJϨCU,x iqٟ}x ϚPL!ӮvP*߰U%Z]JѻS t'y]/&:VGsGDcTa8ǀ?Гщc|{\˟W*BG%C9Yz5 k⧳bW"ʪ!o#mܩtyЃ \~V3aoA7(PwLڢBgǘc^;XT|oOb&C" Ark./]=} 05Qi/7l6?!] ΝP'3@Ǿo~}x;lXItdɐ 6b?}p?n3DDs5oH__RajtǛDЙB:u[^a$rMO͍Jh-o\[~yLi|jǗDi{O翲MHߎv(BE{uWW}m+h.Gcson.r-| Dj۞ȊvN! 5Z9S+h~43fD_#,Fф;w]HV@g2V#̸6náX[~j#>ޮx";$2c:gsBeUN10[:$@G&(߸#su9wZapmjCh>$ _JCL=om{ʕBsݸj|>C:ΓXɽŶڇ3OÜ바^@ٍ@:K@03}{Ǐw<0>E-Μ0[֓ᇔ廱[J0iBM > /ExtGState << /GS2 1086 0 R /GS3 1085 0 R >> /Font << /TT2 1073 0 R /TT3 162 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 87 0 R /Thumb 1012 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 7 >> endobj 87 0 obj << /Filter /FlateDecode /Length 88 0 R >> stream dsrP_i9 S211(lmtrY[q>|AôQjf/1kfHs®F M?**u6SO\.Q['YD/A^o~j/}E_ P}2A 쨐G>^Hy 8UTdB*(xz Qn_4 {#z 䣸E8iĀ !{Nl:}@:f1{MϗTIdPƏQ}ehD>?*h*Z!ˀ0 Ѫy"(>0ZOC`C}#r_2k=ҹb1өO?GsN(f!idWn(E*8 ^ OAegu̽^jfIOUU#SMɎ_MN Q^z#{v~PgSaWi`< s9P{3_"] %jf9LtY7:y;f?yʵi0\ Rms#8'l"~,Ş=CQ'YE䉐HXW$۬:flRqưEa! i2o{^/&լOrh Y)r۫aYHkzûΡ~(R$z%,) "|;huxU6!3a'|FzMX}-/x4tøfҶ+@I9[a#b:-2wsUvt7=aH6!RVzwls,럣*rW}>K{ jQ(~HRǐ'3qPߢ)ZhJVz7.fp NzB,Ƨ8W)CiHR;{6$?o ՊjK$gs|x3b+Ku,۴ûaBuj{R5jŵb< 0E4!QnYSךQ {.ZqH}^<T k G!:4Zyoץ4{2Bt|]4GPn/9=2jNm`FPvH/>*fZzJ)n]۵5 H u 1Vpuv/U.t|2-,FE]4]se:HY#HRe.r<%6@#\0S7SئLg8UPӨDٕZk˪6H1 :uX*k6thϫm&N)MF28VuzN 1{6! ZX~xQi'ܙie.Ax8kW/E3ƃ2 #G4]p )YL|}3B>< ~4v4lr}ޤPp= K=ރ%1XR0Y%ɌFZPaqDG;PXZޒ%aNG8M!]d=Xʮ Ѳ8d̹*x~Sh b+ۻ;g۝ #H G`?{tww}2ef>C|_2ؤPUZp}pcw-S%2j`w<`MAfvk9|\*umk5gL n\h7C3PoWdd.L8*PUʼn#$u9G+wlICS#((06'30$?-̾c# Q:xʽs~Oq[pk]]j1P!ѳV~= 2ц9w *8ϸf#^٣r{Œ Q, 6?I;GPԿe)+Vo6Sϡ$fIEx(xmֽHw(ΣȺ'P~>6My) }Rԭ\ <ߔn;2 G~ 'iOy4[FI)?'z/}u' _lF>ԇV4Sf =HTp:GD*my<ؤRCI;M΂cE!GDy)6ظђolmc;G0UT:@`,S4fНi7o 0@_0/G /iN_E _:\zT˛DEȟ|h~$1*~ƉɅ[!7δ2;Cb'IO EkvoqHEvpf}3t{ 3#h+)cTf7p"9z4YG$MxW4rœlgIܗo"h@0}YږsD8I Eu9~6i^!}c/lap^9c/xKQp$h 2P &Ry8BBaf%)jh?/B"-iYK&'*,B᣾ l#\p?nx3@3XXlYf"alw( s!IIg?Wol8aG-]+iS-SzlBp;hT^s\ ƴ^ shgմHl[(Yj]jx&Z)kzen5^bdD <_sz9k`&Y8/Uj`[)\o^gT$rx:*㞱 o=1~ 6l 4- Ok+N+םj=mW=D_sJ_)”rHy566FJa݋m%PWdԟMJ'<_ ck8* ibE UFhS6Cπ␦IR}$gˠđvI\k(D_Eʐg-;Ut;cq? (blB Ba@fӳP٠8G@זsy='8R` 瞳cybfJ51\WқIH <4Sa~jyKc0S=Q;,hVX k&r9_| $0ʑ0ZǒW{HeF!Z|WtED( g EI2'5ۑgMEQ ٜdƨ3c7]` ;CfڢT6?Vj%)TB&ۿJZ聟q@}x?O#,ҳ 99^i1glҲ|N2U=VV,7&sv/@Ni"9:&yefVgkU+ۿ$/]R\,SCwZm` endstream endobj 88 0 obj 3793 endobj 89 0 obj << /Type /Page /Parent 1063 0 R /Resources << /ColorSpace << /CS2 1074 0 R /CS3 1072 0 R >> /ExtGState << /GS2 1086 0 R /GS3 1085 0 R >> /Font << /TT2 1073 0 R /TT3 162 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 90 0 R /Thumb 1014 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 8 >> endobj 90 0 obj << /Filter /FlateDecode /Length 91 0 R >> stream 0ű5ʱmvЍb֌spmհ`Pb ?`m|:Y.wIO{RVC*Űs0Q̦tvISkB÷M:Z/@Ep8 "Qϫ\aD]nMg4mtKͥ;U qMfDvq%ρ]`xaw}shܿa@y :M"Ѽ4㦪ʳC\cZ:9l{5 6I X*͉b#6""˂_@K9"~s^]IRo29@ )qY=!4N"ev{Mo[BFgdں]OU|-.]p qv,oLSAs MW} ;ub&}">YGgvHz$̛̣LXf_Y'Mcj g֓t¹1xboJJacJ1AmNɈun(UTdv>69f {_1lNNXbMOkd]/qxе׮p?yD;#^qGaUKCSxV9Gfls!|o;\:Kh[K9U?x_ت ka7wV)SDoGchen$znWA8v?IsJFYtV# "62 Ld2+!,!' khz$Fa;ӌ˕D 7DN!B:wBʷB{+SHX )F( ےrj2戚ʉjv@4B`W&\ft5 'wI9_ȜV[HsO[ފl&(S'2]Aو=BA?խB#GxF_o > ?ͿO.*pj(&YrR!)<fkk?q9CZa\[bp'l:UqHh7.a+oTql‡O;? Rod9J9mYõo1S[K%eCjHž䔧G(|b{cJX2)P[E"*p`WS=$m= HMN/B|JT׃bdC"V2SnKOTp7UdWD*ɱ>le#SО`z#҅@i?1tԆ;w`/7qx~>f >vr~G&:1¤}deLH+w4`e%cof)ӿ@}#2q%rG7_V:'ᤇ}G÷p:gł-ps;} Oqs)?@7q^^TW(ؐ@$_I&+3 ?Ԩa@֗iw9tb]PРɕת e)$R!fb``9Q@)֎:_`N¡-7J+G[5_h^[>#q~+l!'X0jXEŸB*eV47[שAOz P><WA|>l|R,4!/iOת@5h@]]"3tq3YU ({iXf;t&(K̓w=퇦Z`GnO[a.*ى*/ iCTo;(9蟆 urP+/hk ʫ늪ѴHCPo$}[NQZFqV3ok i_?h}i3OWW_Ooğ P3YE bdwlNlqvG&dv5;'핾JyXs+Q͒pzml,L+롯VxLҒ~taZBJ QC=ꀚ%q甶\Zǟ"0PK#p=&\>v_n" endstream endobj 91 0 obj 3225 endobj 92 0 obj << /Type /Page /Parent 1063 0 R /Resources << /ColorSpace << /CS2 1074 0 R /CS3 1072 0 R >> /ExtGState << /GS2 1086 0 R /GS3 1085 0 R >> /Font << /TT2 1073 0 R /TT3 162 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 93 0 R /Thumb 1016 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 9 >> endobj 93 0 obj << /Filter /FlateDecode /Length 94 0 R >> stream  =C(uHYņDieU(9%@?qS@x|qhzLVl4 .DPW5齅 &5.8~9X<(dn'`2}+9et[e?n#_"8}a7!Zrn*P=-Yـ8viYawLb-װ$ bA%/54/+.-`S\݇?y͊EĈWh6 ,Po׬m>%d@Ztv7C`r?Ƌ8MF'(!`U*&_Iv3^9E,1_8OOPȊZ3>k/mBbd{ob B˽G J ߖl^mw419V]+F 0KtJej Wf5p%Bu(o(kZ~vV r F0;Va GTϷjtzL ‡C&XT :ǣ!5\O~Eo,>ߗs,E3n$( e `QLVþ8*HT]_ n(CPdDdӾ(L~4sRۃE6eދoI!Vɉhsv"QI '?Tq4s~W!i$0k$-_ 6ςsJC/d0KS7 fbnd/:+j蛃5 xm,mLx 60G&I|u6t^zk!Iɨurſ6`{72[Xc|rWM*oݘ)ͷRNzFڪ `vfw>tKtv8Er5d-/a20FT6x QޝaKTtHCP-kˁfcc !OkϺ ~C'^!ZjyEpkynD"(ac~|Yt1ѫWL]7_6Bxx._ʚO?iQYA.bUh5ևZ'XμºyDa'670@Ⱦ/C;nx 㧉(#|c$wo\5^I0MA*+tg W.yC5⴩0&axQb.%9:/be)H>i,cz" ozx?]?;h57ᓬ@{gfYg:(y2wYJ/ĊG*Q A@3FTiŷGu0aZldQ} b[HAH@Zִ#0-xL^pfЎ*OTЄc߫ "F&,؝D#q"^0~(%!2'2!7y9|Ҝ6T*w%fay{e,t @w'Q{y.X;:鴑>3 /`ea-iP @+L3yyC衺y2dxX!u3׹gY&QQL{_[LgRTw/j#oF^by&a|+X,X"ќf^r31I^Yܣ 4i+&h<" F;NnW|LLWcs'hIr oIMnja+z5QNcE-ag=`nKۥJ;oADI1p9e|RFxB15D>ƴiL><|R΀ֈQ+[zhgP XK ^i22YY)k8D$&pLl&֒\ĈILÑ$"L Q̀r&! D,ԏNqe4*H3|{%? fnP̿ $f%Zˉ%Dge x endstream endobj 94 0 obj 2453 endobj 95 0 obj << /Type /Page /Parent 1063 0 R /Resources << /ColorSpace << /CS2 1074 0 R /CS3 1072 0 R >> /ExtGState << /GS2 1086 0 R /GS3 1085 0 R >> /Font << /TT2 1073 0 R /TT3 162 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 96 0 R /Thumb 1018 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 10 >> endobj 96 0 obj << /Filter /FlateDecode /Length 97 0 R >> stream u2;Od󔷱Qo-'z7]-C^˵ _#oES.SGy7ϕ/64yp-qw_3ٷBM$9VhEGI mmID=+-1B%o; fpA,#/XqHowUAf1 GZCEJ+>ECs!&x3PcǦw(ֲȳ/K% FA^8_Z-r:1?K4tb5bH(=cgM'Hu؟kvzYUV R^8sj:,zUrWō D0LJH-=v=pm %&fF*̵ci Ijk;~^X;0|d#`_kB)eIxbG<ޔ89)%+[1#Uқ-'h:-z>`D0҆DcW=73]thȘGD6p]V~Z"XϜƩcPP wNQRLwYe ^I\x\0qUձoTW^Y=g$-vJLTvKd0"4B,1*\sD0+#>H+"%)8 C` Z ~V Gz) &mhi(sӜ"K0d?MXza_پ989XCs/ |(^!VWX@k D!ޕnqC4}9 Z2aJN@RR= tg6bL牘&bB*P)HJR:pe5ea+Q10$;)JpόE2B//l?]|r/_|TqYp1GXvH? d< 6Dn%a&A;p@)*O:(7U-\pL˛+Jηw8QRa*Hfy QWJm{^fא~fђVEFlY*<[-hƕ l<&D!^W0*"~msT> EGlY!:Nz xJ8ҁiR˶5>nR V32m1f sh`RNUu_: !~L} b6'vhٍsV#IܬkYK U$kiB6LKf~7?|ttlJR ?b!_SdtйYXI3O,C ->0b+_&W>P3΁(Z0ZC5čP"uf$ b|*}CQʉv/hw`EHl0jdr0y&O=ns&6>yT<{P?jBhZѫ <2leLVr7/S1oFceȱM7MUw12k fhNuPFJVu<]*{Y< endstream endobj 97 0 obj 2606 endobj 98 0 obj << /Type /Page /Parent 1065 0 R /Resources << /ColorSpace << /CS2 1074 0 R /CS3 1072 0 R >> /ExtGState << /GS2 1086 0 R /GS3 1085 0 R >> /Font << /TT2 1073 0 R /TT3 162 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 99 0 R /Thumb 1020 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 11 >> endobj 99 0 obj << /Filter /FlateDecode /Length 100 0 R >> stream QdZVIַwS[ޅ"i.F[T衇WUxb0!&FK놞>hq^'%|oaP?9iݓQyTX'beޕb-t?w,93nxƀ͈Huʨ֤ / TJ'(_{R\h#͗:uhRSOHvp11hz淺qOPQz¥S}*V'Vb*tgT _Y,O,'hXM6&wٔ :\ MkUь[{ZD_k9}z#k?ŭnkPnumކ_#4' sCݛuˑ1wjfF4'׊*}`Ti^`ţAand8Ԭ|:ּrZ6ķ?RGyU6a!69嚳G57ԾEbbYmzw(2Ǥ9L+v#}[e 8}ln'Fk>Kx9) ̦V|hsQ@)ߕ0JE Yό;wpʥ1m(QaxK,Sw';iva,=yk9w@=|q8|`8֭wa;?QO;&Ԍ78|:S9#m`:ǵHP2"RS sr™B]bpj|Դe0V^&trIedT?I--~65S C^d|ni j+-6g$+,z l=jujxy *$~oK;fkL}_^|[fŢ5 M\&c.?xSX.=slQҩ Kze,oYK1qIѝWHT,d~mSطKq \m@Bʯ!@z퉛A)+Y0xn姺P}lL]Ą9fWe0[9>f"<)3/ZNV#X^u>tg9uR]N0$yVQ0t3 /ekc}ͣXq['Ū'K{&KU\ZRs<(5,cXB~( LJ| Ǿɽw/.*|gՒA`ibT̒: P w!ȭH(f`Z,WC5A{(W B[j Gz9S!SCx@,OXѣrqתH)Swo815\ MSS?(4"~l9RnEHb0CnHYN!Y Y*G! pP})> /ExtGState << /GS2 1086 0 R /GS3 1085 0 R >> /Font << /TT3 1073 0 R /TT4 161 0 R /TT5 162 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 102 0 R /Thumb 1022 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 12 >> endobj 102 0 obj << /Filter /FlateDecode /Length 103 0 R >> stream )h9hy-%XH(4=DʍP KU t#C72ŕ.?d7OC";>F{Uy7gdjp;9}[Oo(֙~ҲMW+,,LȊ#$dW>+nsEn8Щd!zT&HFfJ})puT|E ?=pI>l8ن|GVMOfh]kB)ȡOb!"z\Ob7K$G'Eє 6#uTªO6HY7w5OL=^Lev5J@RKР%TﯼB!!CܗdgA9t-;*Jرźk#ƮW˳g.m'L#qI~Mf{#l Vv [m`#4qZXDe;^Y}=mxDqT 9@v;;TʵAi1iDA~ɤ$C̾9msZ+ ~i"^5.{^"~ńtl%Tgr;֒zMFH?` P<TRj1)[^ҬUNayn}Ve. t`_.niTu`\(-Tchb#FO8Ҋ,:%K4ܘ\ sCi˫_lyЀܟ781^,*QM@L뗈^xW ݼY!0GsW4LMo :‚Ԉ`ں4a('P|z?l D`~#`-c(0|;}I1u:*TkbM -߷׻K׍Ty0oEl1?WckJ?4&1^(궒)1:opa>Qzqш/]/Dqgm^B,ŗZ=it !`Ɨ|h2}{` UR']=d=̹TSGcϴ,.sw?Nb3L݈~{)&pI#R܏O{қ!=/}1uP *@붪7{UBܡU,CM< !RTl8;vڑ߶}g+ iXiHNf?r5XkK˯?]Ɲr~IGdP#9 `.A |"WM NWHs&OhkZ#i 羁)`]ts::oڣGؤاS{/;%BzDK=/⾒ ?GRV-zb>0CL#<i.I?aWLWL#U`'_lYY;x۵%G6}ZD'uȴyOlL\݌OZYII [ .6Scjcnm(,>xf|גIJOtYƢ YGxIJ\LE~n%?ve9ZעsȊi9NBVB6hlY2O {ilK5tleg^ ?{1BkF Kb]~ߑU)/KPq0JvIq~ubޞѯ b95$MQj5n<[[ ywlkp>P)=Y96I 0NSМ-$iyDE zhkḌg]4PW)RQw< UۨaM,?i\&OQWGdna/UvZZģY{ dcD7D|m2L C]РU GGdVV& M8'r\z ֿ&`]˙nd\BWcXXxmA\ 6XG6y$V7Hs`@_`GS𮲡_&2|Tt=vjnuBTz\bn'lGΣ1MIVL6OY,*,t y`lȷUָA̼O^FfRYq{V[( .^K㙑~7poMǡeF-S2GU gvnM\MAL^Tݱ3Pmlܺf> 5> c}=6K6"-~ۻ>ʂcPD';dSޛA0T )kfkX!kݻ!2OX3/YD[RUǬ[*PhflnmU%lF'nqjB/|58[Tb endstream endobj 103 0 obj 4296 endobj 104 0 obj << /Type /Page /Parent 1065 0 R /Resources << /ColorSpace << /CS2 1074 0 R /CS3 1072 0 R >> /ExtGState << /GS2 1086 0 R /GS3 1085 0 R >> /Font << /TT2 1073 0 R /TT3 162 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 105 0 R /Thumb 1024 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 13 >> endobj 105 0 obj << /Filter /FlateDecode /Length 106 0 R >> stream @-ݚ˷rrT -|<9y`eoe^U=ŷiR6p"T )LaiR6sEc{Q~jY\_2eAdp_Jmbp`9+zD:^N`A^鑗q2^~6\rΤ(t1k]qhAZXtG{ۜR<!-j9xW)>8>Au ;/Ex @-L`5^1aV5Cp4֪B}LBVoyNE&}:_pJjMcSI%".n{y',E[|޽h⏠-ST:M89kaAau~%IGPYT?ǚ4vvssa^ - fjz8o6VF'5):\PxHLXZ*Y74ᬧ2a5!f_LXyK?8fz@AdT&Ҽn[J6}X9z=LOboܦ]v-çӬvy }>SEll)hTcb^(qc\vMҏ5)%&>:wT/j2}/gmk|Ʃ&:Ÿ-+23ڴ+ u m~bYљ-ߐ՘g%swj̢4nKyluBOEo^a= s`.9啜 freAeztν\8+f?XOV~z*R!8"]7I w@Y U]5՚~ G do8N jKD8-31«#czoJa[SK+?U{NP sf1jlQmƥ>VHe g= qwdZk_Ne%~PB32qZg,„*=VmkFwe`k& ڃ QEO'R SwY i8ճyjtŸPOcQ?ljn)^@BJ)VIkF<~+` W, SޱC* Jo m%pߐZ+ IKyaKo?*.ȣ#l4 ͙Dbb*k5+9н^u lT؛+_h*~_>vl=q؆-43?е7 1g`(vm=X!GAuc*\a)1 fI/W>W6! -q'llBO+ʦhtɧ!"6GjVFÆce:Qht0J)4_e# "pR^c ̋d|_Bi2 dĠCR.=Z?ZZzzM;]قTs^$G)TLeu87zꐮ.{ݺP{ ?|aѳz`Go싀颿RUbMܤg3cB5q%qhJ&Dtf7TBb3HYF^O^*"Uɓӟ29G8+ޢk)SF-:V;$` ]IC$F`14ɯ mfͥ?22va}Ko>KVSrȎ@Aݷ,@m#9Fp/ܜ43<ןH7LNJa{Aϓ+0%R5Rhⅅ20rApAꢇ[)4cl&&.X̌BU2ֽj/Xd7 XHBW3vǃQNhgb3z۪@3r!I:;yi(/eyNMa8BPAya) T"Pړ. !dB8mz+< `5@ r$\ ;>T\`ڵh}KMR׉}{B3crg\O4 endstream endobj 106 0 obj 3425 endobj 107 0 obj << /Type /Page /Parent 1065 0 R /Resources << /ColorSpace << /CS2 1074 0 R /CS3 1072 0 R >> /ExtGState << /GS2 1086 0 R /GS3 1085 0 R >> /Font << /TT2 1073 0 R /TT3 162 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 108 0 R /Thumb 1026 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 14 >> endobj 108 0 obj << /Filter /FlateDecode /Length 109 0 R >> stream *2c%;V ~wCe6sE3 0+做.607oZ7"U &G.~ye<lY21n2QŹٶs&(؈x#Qv T택"*"0jr7H<<)VQd-N񳙩!X}'/͓wK]h|@[i\yS-$>l)~axc0אq{ºEvzW$%҆)3 I7f#õ @TU\-Y 1[h/c,Zh=I|NI{UoTM]@s rYr .䇉;%~Oaoz62M\LkĹ}gk [?x‹$\Yce0!)}* 9H:" 40/@ !8%I`D~>D@V{9h׹SYwln:ljXR>3ڱt'#^t7}s0=0,ri !#^ob KmIݝ0 r K9@8O:5H':XSkLOG5P!Hh`Osp?mt6KЎ!͌HgbrQܦQC c![mTJt2E$ 0MJ,ma`xVݐhsWˇuihW{YqG3yL s={Cy # ӏY@aIZA~7혶Ma﫧wK!yʛ@;c$+gdf@ ?_O:u Oٯ,L3ٍ}t[=$]RȳF~z~(&lp>`rw7TjTA7.TuQߏ_XjZ15ȁi;J-uԧ44X#DTFi3 X[RtJV]ksi`g!דVJ/?|rY!୞W۪yH26q{Ҍab y.SRUk VehdAxlz]mhK u/*{`5ơr7%9ujy+K /}{\{hg'LGͯ Iya;(ϝ_aUcfH0g+<wx΁uOcز{iZq1,˟VV{iYۊ_SSAb+S:4h긥O^9N0UkMTM*GaN 7M `T۽ՊEH0=3DkGa<'SSRƸhm!>[M 1 n/ϐK/(6JD^L/o \ 6 L9i:GDn&, FKc{P ®;Yl#yd͂^%b%Uf<kaOcjӆA"Mi}eY:i?mffRohμ 6琖Oڑx]z .lBUZWiL 9z0 c[ڽBR kދspiUDE~檼":&5X,>N-BqKw2A fqޙU]C/@U}AGH{ByLNLA :LESQ6:gn2ۏu&(:)E(bңٽ;}MVfT٬h|=k±ʼirGeDkZ{ǘl:AyBXPu}:.UL~$T\aik7yѽLUσI@?pO euHQ<GoSe^=B>A@OV * a Y|kҁk @,rs\ Lp;4~? P ?`IBcMaT8^\|u)oYOhBzZÓPPb"o{VsqZ55`<% 5.92ϻ|58[oq\XDJGh;~Kb/T,V׾(UM=yK endstream endobj 109 0 obj 2888 endobj 110 0 obj << /Type /Page /Parent 1065 0 R /Resources << /ColorSpace << /CS2 1074 0 R /CS3 1072 0 R >> /ExtGState << /GS2 1086 0 R /GS3 1085 0 R >> /Font << /TT2 1073 0 R /TT3 162 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 111 0 R /Thumb 1028 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 15 >> endobj 111 0 obj << /Filter /FlateDecode /Length 112 0 R >> stream `ʭ&MK,0Cz PcNY*ZƠ|85y*hv1Ms}7"@WIl)R_r/S} cA;dML LbZ(e%0YK$[phRTX?5I?ޥFS{-Cfnu]{mT2ewoGv (zyNC/nTLL=s]7Ɇ1=8!֠XlPAc&l/:#J^v}9‘E 0Eh:i" /PbQy\!EK. _hKœz{@ /8NL+Np^PJ0[-/nQ 4SGw]Zi9X&=d9(W@?nrAZ_pʻ9/ M~{ .APgGwتj1`iNŊEeǷo2 ?>C|OpjsoEB`LzirҊ Ɔ>4 d$}L er4#ē!+K"1a%ӣ#݇m#.DKL[~3g*s[ʽG5q}Ω#V"qb'r3Oh@pN+Zp֍xޖfs.. kfM}ڒT44J",#Z"g6})͝QߺH*t:@TL#Kd)FV|M-t'ޥ %2>Sj͗ JAk;LLײ~lV_jtx,%ii[v U$Ӌ m#i"0ᕟ39fG~%gcǾ4X9Fkr",$xJ`zЧQK!ס~zE0\&e.òj!7Jh) 9kO ++w~0(]ZV}҅zΊN]g%tOe*t+aT8#m<-3|oͿ*r݌xfxV]o_ s+S0 kjop~s|U|r|]ai'O͎Cm5n+kj4~%Rp+L{}vB݁[|o|3h:{Z G;IJ)_ Fb}z0Q;YNMZIkt œM4 DǦUgYI-$z:##݋3E<oBNX/rs1#LF\a.Yu|0I+Z Q֘a^Pep;Ƭ(stM]y;o&S?#e%Qqێ endstream endobj 112 0 obj 2303 endobj 113 0 obj << /Type /Page /Parent 1065 0 R /Resources << /ColorSpace << /CS2 1074 0 R /CS3 1072 0 R >> /ExtGState << /GS2 1086 0 R /GS3 1085 0 R >> /Font << /TT2 1073 0 R /TT3 162 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 114 0 R /Thumb 1030 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 16 >> endobj 114 0 obj << /Filter /FlateDecode /Length 115 0 R >> stream +vCVY?Aݿ$*b7R;tTVVҶ-N_0ȸ=@ o|ZSfp"ɇL& !e^gG=JO%Lp`AG,+K#yĊѝz@ƯAKS[#ZZJm?ȗWxI%USY7EXÕ-M,`Y ᑒpw&(v53 TieVfR@,'R<6QFP0ŷTvu9=Xfw-/05(j{{U,%P׻p(gsG<+3W-L,ϞBlzJFaik|/Bн4]iWo~bd*%d1 c4>NԀ*;.߾țVT]gs W H‹ѐ1ϪFqbM'SX[ 9}iI4. 6ɔ˻+/H6 |2{Ha8s׎VUwϖIr 9Qې;Dti3H¡/"Y ࿅jknm'՝'<:ڢ[>& )-Oɪ?60\[Ȧot+q<$aJT1RwY&ql s\g6<uЂ@U͓SէfJm0l"f-U3}`eQtӵ5K d7bf MsI5넺({0V4Qʼnt&l`oFv|W|4N.Hjm'BTz3*:=AajOˋ{=\ U@y4ڟ=&44lwooׂr(UN-Pm"%hXy9 s>_f,LCu= dd(ЎKv_>cb=HZI;t`K6ur/!h3:~E[r.ҩ=lx([v{9ȯ9)KsHOiV(IK~r8n dʼn>q?h~]ZmS̈́ndGsd^+Ź5o,IFEcwGԶ#_KSvu4:I FfPAy;rr߷oD1d>r=MѐX:՟{Y.˰R -Q.#Øm|k wlƁm?yut`WAu{!M2_:vZ" $vE+N1$u!M+ofI͑Dzp}7ZHjHljA+Y1!/ !A mX跃F %ꡣ mx|*'Y3$>JAZc9$ڽuDW M\ns\(}xPLțTwE8fGrSnBXJHiMg%T 7xg=16ݤW[ةni23>"cîcl1PxV ׮3/wb5h'{ZZ3T\"4%{o0|lI%)b^YxTܶ}PNt}-3FU *9ifJjSH"~AajC3r; c&ߘ%]`v}5( 5[/Tt1 cQ% cg8[ECvm0ϑ%1n%CmcAAl' BM ke0l"?c_-jOOvtgF˗/\*8E/v/wM .jCg b"A4[BW.884IK/W9Bй _#YHtNM{c L>Uɳ-|G? *X)'[wU $A"l$T3H)#ɯN'lX K%khԓOQSI*&Vaw| ʿ-ѫ ݥιdoB^n( *`)[xZs i4"zjW&)*/pj7;n*E!Cp#¯aEiy6߻[Tkk͸ ~Wx1mڦ߅]ɼ˹<, ¡ a'k`Su _M }/&(9u(w}̌fm#+3T\y/<[SLh.~/Y{6'e`RYv8 ɚ HA*nTQbʊ@mruJ^K"jJChgCp- Wxu*DQ!@u)/eŻ&: u0x XBp.1=Eq#SPVb+0j:zۭeH+a{:rw7~_R'E XeIqXKhTr.Q@ ߝq*C[mZ"xł7b:x;X.$Bt~U-Т[f%]&_\`eꈪx~yرS HTZGxXwտG'JCTA@AɒZ pcU(H~Fsqghu뤶]W #?7۽B(RE޴a29tZ*Ed@ZFG䞙9ע=&}C.Ra 3,lۃć<s#uDfK~^W*u endstream endobj 115 0 obj 3078 endobj 116 0 obj << /Type /Page /Parent 1065 0 R /Resources << /ColorSpace << /CS2 1074 0 R /CS3 1072 0 R >> /ExtGState << /GS2 1086 0 R /GS3 1085 0 R >> /Font << /TT2 1073 0 R /TT3 162 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 117 0 R /Thumb 1032 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 17 >> endobj 117 0 obj << /Filter /FlateDecode /Length 118 0 R >> stream w3nix-Z#:WX謔xS5bjx$e2\`Z7` zZk',z/ 7o@zQD|AƐNĖ){m<' J&V74KfG 9>̾Jx:|1Nj@Cw nz pIg~2,L!x6"'UeHImfN6r%Qg]Ts lrLL_ _wB/Vdr3Չpqeɖ&n+1)fΚKx4Wu  :Ʊ^^ÃEXbJru]@atۓn҆ɖ+^Ѵ/U.Ҵ^'D>|ױ68'T/9p¹*Hoݸ3@Xܤǚ̳%\FMB)ma3~}S k ݣn/-g6gH_a1Y(]7'zZ߾$۳ )  o?VckE`Ѧ³UY0a;h,mZGrw/6!b|߀룆.&r2ߣ/{Qn>-h5F rұyr MSO+"q'= XF᪻s뒦'3:Y:& x|{W3QK(+%in揰[7&6w48p:#NHf<aejE. bjwgQƳb6i 2z26aCy:ӱbxއNdgfIƬ<Ͱ{!#cc.Q!|#;UzifS(Kgj&+=q`jMM'\$7D0Not̑4xsvG_ Q=}ebyʄHz3{i!24fG.k0%}1w4N̹ 6$RBenYc NHڭ :8H^:;R)#PRV3=&{b5ՍּT ef2t)ӇL/aY]AZ>UoΣ"U"}~mO =Zb}ɵ47CV M=Z$S1*C߃P ,aLp$3YL ܇׍_ ٙ:G>l+ݣhƴLu@T3|$Ź1b@wlYg+Ev,VSV *X/_Pcc:N5nFsHiƣA C5Pn)L\'X\ZMbEfrfAMnUw 1.=pˤ4"HV>)'qX銁h)]ҳXis "%&vO>+jxEN 7*"X39#`둁%]ܞ_/?((d=[ۢ虫i !N Gw.C6`>Ueމ2|)XZ,]k1@7ϭ[qXzKጰoHi|{ui{d&m5ೕ}'KIy%{<3U}8-d|U)w ۫4W tOݜyI"moH9:]Sζ᩟9é56jhڣŵ| Yy/E_=ЋVT[o'ǻ_WtR*SYHYWdϠf`薠Qu9!)LHq"*SeMIc7Ψ4ԧ@RbJRj;zAַw,Oo5Y6Sl Fn`ۚaқ[lm*oN>s媂fөz81@GiF0\[%B4ű`|lNAy1M9| Fkƨu#B@ԡa}.0ѓL>LjrbVKuBExy=l?…껅Np90#l _X#QǣZRL P%viaiFV\5^W6/["fGnH$EQ~z8 ,(qU_-O܎0qPg:|kq'T#pقyZx[jm"uZJTuw^0pd_(o%ov%XEY&-AmTqZ_c ?׵ZQydh.wBsX"KJ v cg9^GJEB+L3.tU:̘x`aP#J*c]Kt[ijwo2=+9Kkn?[dB&SҸlQ &3iի@/vH*/6Uj*;zftO xUl^ߪTԈXc4 endstream endobj 118 0 obj 3019 endobj 119 0 obj << /Type /Page /Parent 1065 0 R /Resources << /ColorSpace << /CS2 1074 0 R /CS3 1072 0 R >> /ExtGState << /GS2 1086 0 R /GS3 1085 0 R >> /Font << /TT2 1073 0 R /TT3 162 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 124 0 R /Annots [ 120 0 R 121 0 R 122 0 R 123 0 R ] /Thumb 1034 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 18 >> endobj 120 0 obj << /Dest [ 86 0 R /XYZ 170 272 null ] /Type /Annot /Subtype /Link /Rect [ 258 254 282 266 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /H /O >> endobj 121 0 obj << /Dest [ 86 0 R /XYZ 170 272 null ] /Type /Annot /Subtype /Link /Rect [ 283 254 391 266 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /H /O >> endobj 122 0 obj << /Dest [ 95 0 R /XYZ 142 715 null ] /Type /Annot /Subtype /Link /Rect [ 258 170 282 182 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /H /O >> endobj 123 0 obj << /Dest [ 95 0 R /XYZ 142 715 null ] /Type /Annot /Subtype /Link /Rect [ 283 170 394 182 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /H /O >> endobj 124 0 obj << /Filter /FlateDecode /Length 125 0 R >> stream QD>^#)@p7DH(UbtNky!YCl [taMxp2̤f*5qv%u{ޖ&TA䊹&;p/cYaec&Ӓf?jyaӋ޲l#wZ;櫠v.`f' ,`ϲL a58/d, $k=ُjA7`ԭm`O:עCP&)qsq<"F|)q{KE?݃ma!`kӽp[i+/{]3g\}aXT &U|z=8Iyeg#&Q@ȒMx [S*G22sK l(Z9A5F~W Iued'g CV9J+xL e>fфm#|Zr{#((cI@@m@gqxDW4ͨ;YGCf H\9ik`dRirW⺹^6[Q謗[pⱮL-O)K@)70c? od_ླ*vSϙ;f-ݕ*D~$w/ )J[^X;γZ fYnYCooV Y:PA#,MUY-F+zw l1-`lPQ7}ҢlOrKoRoƭ5ID M >q@=ZO@ z˃"ν-ƬWg+}Ӹ+LV % '<%6Jih prO]6_;s8 bRfr7ѡ k?<$|v[ڡ_L팯StCֈLVnk+k /yw4o >##M<ͳr B2!j#/$,PsliC :?TLIWtF!{} 4Qa9_ܮm3=)IKb1 EBA @:L؎9 c2Z58Y}צlt(;eg?̸a*޺/}{ol^]ySd7^"7NF1>47 MGZ(V(1Q"cܝS;㺘ax5B64dGZs[sۀAGuhJ0Zh`ilYh'xd# T<uAE lvfT w5}I"nZ2Z4;'P)qKaD&#ݑˉkqj %X 8R-!%zQ_}h-&*ߔcV0[ I:@2dLcjBD@P2xNr@|raDl ΄J?k_+4:Þ%hp<;" 5 5ZRp4._#^Nl {!_&|55E^Zb=yxsժx| ɿ! t@WMZevBnQq&5V(ñksjߍ擳QP=O:)[pɕr6֞TAJ;0#+r57`ba ּ~v.C5!kԱ[=BM=Rc{UZROymTVߘJh~~ۤxq_8u;e݊HICj2΄=zr#/vKOm%m16%k6sq)mN~1,V4|'gejK4>[J ]9F^;OgWQtPImǩPՃzTTe4!a@Kg_%B@`{F׌ϫ7Ctȗ*0ʋ&*R$ʘi7'_1NB0I>@W*̕;voN冊ߜL2ҐXyu5\,j(ROSR7"ERâ㢓 8/vn I~S`sN^N"3iqW4@DRjT[(pyE#ܩf&Ǐ*YP:Uc`S+3( sՇ[(nD<@\SOh^C| ώA8== cbzVЍ5}4HUתصܠȯ1?|eAb+Am0fBヷ{lD{Ƚ1XtH^\ٳD&stn A&?lF |Պ? >z7fFOܸwY\el/L8dԾ!NteQX&]@G9k6fRF@TznQϡ/֞W9-t)#o>ə VII L%y |TQ_2giYElI9a g>0[[~Ul-HmCbNV,JrLpB7 kh~{ig%>ѧ450ք"c!׊xW5W>{tFeN0U=+4GFC@S;5{'Ew!u\YPlev_LCGU <",\u*  ;%^ {f?6d=q?QaϽe[rM"ϳt/BȄ\xWgI^qeɅCV/sVJ_tE3ޯ(0Ⱦɔɥ}bΚpدZ~I0|/64͝}VaSn&w\]dJn^6("@s endstream endobj 125 0 obj 4192 endobj 126 0 obj << /Type /Page /Parent 1065 0 R /Resources << /ColorSpace << /CS2 1074 0 R /CS3 1072 0 R >> /ExtGState << /GS2 1086 0 R /GS3 1085 0 R >> /Font << /TT2 1073 0 R /TT3 162 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 127 0 R /Thumb 1036 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 19 >> endobj 127 0 obj << /Filter /FlateDecode /Length 128 0 R >> stream ,xm1xdzlnM/<D=8ns [2`eP'gmʵD5bv<%[@p !lkz23fQ e۝ڷ/ߕfq/IiAܻAP")M{WE%Y})m~*Bk a!wLm }J I=!m)^534 K[==4:0>mT+I*g?2Hml7@V)Z/G} oBvmS[a5zθ!7,US\נWst$/d6p(Da|Ytޤϒ-S$ÑjdЊ/3Wl+Q~_dz8'0^1JөJ5:_uSp^dpf]Cɡ)'l;'aےuՍ((8X:a%Wp_DžXR2D^mrJW65pi+ȤstiVH1Ğ$Og꠮9x񓜓WF j{thBAdǐ 4`NLUFs^aC_TMEQauWjWlV؄7k_[e󗥽+ ^ř]cLztJm^$Aicw"О!Z f~MJ  +"aKEHd~e¡ +>`ab؇t;x*}0$vOa;:ͅGW-zkW|y*!YX%XU{&Q>ua/Ԯx8Rưrƚ¡VˋBn#}@)D!ȿWbFt'&}8#ljtR > K9"CQ!1W >L2Fp7fFt?{E1u#hErI>i%ڤK8)` K^ؑ$Kߛ:,w3׷@ܡu`\BqR.}ptXEsm^KFMNKxjƏȭ+gC,:a QviR MOЫyvYWZ69K?;?U]źPoq%z" f ny.8o=h.VOQ? ޸'bOVb?XTThA`%֕1") y_wz QRzPUĻP3L,?*J^FZJ.O6D12}nOVl5ٲ(D 0Ȩ Oē1w퍓3A2[@Sq"hꂞ<ʌjv/g( Bpy58P6鈹 Kut3M@U1Y`9 e:W wJ?k+@k[ {?͇T/ηo49ytX@E]m6e-flA1Wc~Byo@_t@M#0y~ 5v T 4lJ!Ǭ5:~HźaKjvA'k>ʼm:hF qN+,$P}q j>{ug^A!)rM#w-|Y6?a (uF;Y:u ¯p<۽F3i TRG D#gpŨ gԧ[ > /ExtGState << /GS2 1086 0 R /GS3 1085 0 R >> /Font << /TT1 1073 0 R /C2_1 159 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 130 0 R /Thumb 1038 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 20 >> endobj 130 0 obj << /Filter /FlateDecode /Length 131 0 R >> stream 9Quv, TrKJמ~-R @$ :}<V9DS 9&8jZKkm ZEA>eTR'{=yfK騖 cэwTe-4ۉscS, R%j)à UYLh8ѻ3+͂\ d5X!@LIEm|lޙ= u}?^ݽf8JwVUvrUy3/ J uZL=_pc3rڦ!SU\3Y,PBd̳%-sͩ u4VܦpL0}+u5pҌڡl!s䡭aj۫6{+85}_y2R 1Pb(ncm)%993& =v4!!ihX@lD4ąa_WxףK훰-}E !v^ZHD`~loMU߈Kvn ryZ!,eY\9c&h0>Yy['`NŹmz$}ѓQ+/VHW;)fw!GW32mzHSGvn)@x5nE]RNi~P6S?Ip/p!IU SO9Gd.($ wQjԁYK٘V-`34c=G般@}am~.{qI5nLWx"[%P4&$Zmz'waT ~o-kqOP*ģDq/*ٓ5 8g2QyB й$?6A+|?E@^/~JV^HFNoEЩYcuj eܯ`Sy&|\WhO&sdD!hG cHiuYA7Y5Sw4K;aIw I$0u =riɴ(E),ӫ}C…+FDϏ-`扴*Ĥ:N귑F hK{z'hױ*R)6Gբ;7H(m[Q[6ܢVo>J8(F< 0.i&!>B<bmn.za=6@-?EltI Teʼn[.zWX9,qi?Ԯt㼄kML*7a -&kDΛr0\?*7v36;LJXzU޿MADɒ endstream endobj 131 0 obj 1316 endobj 132 0 obj << /Type /Page /Parent 1066 0 R /Resources << /ColorSpace << /CS2 1074 0 R /CS3 1072 0 R >> /ExtGState << /GS2 1086 0 R /GS3 1085 0 R >> /Font << /TT1 1073 0 R /C2_1 159 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 133 0 R /Thumb 1040 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 21 >> endobj 133 0 obj << /Filter /FlateDecode /Length 134 0 R >> stream x2?CIJ-q{oH^^`> cT(]&#.yblqjax؀!T34vֵU$YhtOb_&DtOr?$/E[M/_yrNAe;A.HFcX&%SdQ-XK2 /05o}&)C+;5}{;'{9H^Nv1F4w_Y;ˢqPݜiN@@+ 1ȇF8C'ȐKo[5g@'ыb|TY`y U#${$CїVa'u6J\BZ:yc++V*- TtG\\- ̴j=[ii:)u:{qD~Cxt[ɻ>ﳒǑ+^fJi)l*7~Wjqi@?eELxIxQ{l=mgODe[JE BKs+6QKg~{LS 3jR0SL{h+iXj}> T9<wLOOVX ZL^m[s9)-Ef%I /@pB=r5Z>`9*!b0VG)Bp¯x, ^bO Pf\Kݓl.=\=wc5f/6J` ehxS=MCL;foFHAy$64&!jOqz\cV nȔJϘd,"'utrJ!C o#cJd%^O^J,.CJt,}a6!>m$&oP=F2'39sSeT ^i"ϚYom]r_ɑd)mm.|I-R0DCxQbPĎe9(O.h0g;0dϽyeeid92% '%:LbVphekKX-_#p $yFѪ*pt~2kpG=hOmʏt^mn^Äd-Y$aäl'r}ލcl&#o_jYWN= cʅUipNS1_dDv]1Vfe`U+n"7Lن@u~Xw]C%6falw/eײR/i0@ʊvM?JmOfvSIf'O7z:߬ŒWC<$FKW ~!= endstream endobj 134 0 obj 1568 endobj 135 0 obj << /Type /Page /Parent 1066 0 R /Resources << /ColorSpace << /CS2 1074 0 R /CS3 1072 0 R >> /ExtGState << /GS2 1086 0 R /GS3 1085 0 R >> /Font << /TT2 1073 0 R /TT3 162 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 136 0 R /Thumb 1042 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 22 >> endobj 136 0 obj << /Filter /FlateDecode /Length 137 0 R >> stream c^(GVd)uqQ1/pU&Ȳ#wxŤ<'1tir!=LuHR0eMVIvD?f//s';7_#F [MeZ]DŽo^F_ܵ$6UB<'2 Tڡi%S m,*aDԇo"`bUK*!5`0%oN.?H, 1'"TŝS /kYL7$ R#p&N5?-"g1NS@C֢npoIiwsĖ^_ޡBsYxÇm]T="yY"so0)9-LVhKwq~X>s56&+.hQ;9Fߚm2K>!q.`-!,-dEUP4R,[mu}֨Kؽd>ƣHI;x+F\Uգ_b~* 4:L(Q1{ae??h6RUr9,$)}lѢuV+6ɞ>3QVU3NGFN%!7&mٴG^93B#m9Ɖ)m.ZvʝcrvH;Cv%n/VשZ$4dcYON} DξOl ψE~i?/KhCs;:!tY'80+ f,8>.zMcC2 endstream endobj 137 0 obj 1178 endobj 138 0 obj << /Type /Page /Parent 1066 0 R /Resources << /ColorSpace << /CS2 1074 0 R /CS3 1072 0 R >> /ExtGState << /GS2 1086 0 R /GS3 1085 0 R >> /Font << /TT2 1073 0 R /TT3 162 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 139 0 R /Thumb 1044 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 23 >> endobj 139 0 obj << /Filter /FlateDecode /Length 140 0 R >> stream Aq%OJ( >;y~4yl'7=n$[6ȝժUĽ KlnvB ~A4C|@[" `l< ¸@V>p#['f؉irbʻ[o8RX!r"!'\ق@+mϥmkqvs b"i e~n{f+,4ƦQԦn"ZVb9z0g>W?#͚][^8D4Ζ\QD3[aSywJ׃W#bݣҲQWZy®tk&>iTͿp_/X @mԒ]e7C^9N;0$ߒ>p=n)Oao]bo5`wASvr5]cbrVĐ1-0FFE&{IZ@ :}L0s:49w] ַ̹>ҧzWg#%ָv UA;O":+`}^FLB$f&>{2p|L2kׁ@pUQHcJC=Ӫ7ݿzlBoԟɻbv'BN9/ ~#s1c *aH{Tfv]PQ-q_8qX 3=wnVg$1riz4$P3IRX05'hiFF]zAwBFF(st?"}ͱ}Ƶ |ӹ=}A˟ז%Bx U\1؊uzku3 endstream endobj 140 0 obj 1364 endobj 141 0 obj << /Type /Page /Parent 1066 0 R /Resources << /ColorSpace << /CS2 1074 0 R /CS3 1072 0 R >> /ExtGState << /GS2 1086 0 R /GS3 1085 0 R >> /Font << /TT2 1073 0 R /TT3 161 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 143 0 R /Thumb 1046 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 24 /Annots 142 0 R >> endobj 142 0 obj [ 174 0 R ] endobj 143 0 obj << /Filter /FlateDecode /Length 144 0 R >> stream \_,ImgۿFxw+ }#ОP)[e,t^J yVyz13BP]@]sI e1YdnFzaa7-dߵ.Pڏ:6Wyڈ@("dtg][YM^S9gfRqNtz}uy>v3[Lڤd]jtVCEiKJwAЭ};sw1{G4\7c٭ʶ;Pdsߚ^L׌ZI.˱u.tTdYj2 "ޞ~iH4,engS"Լ`mԨf;`h)R u@l +eEl7+6JݿmBWrcVٍ!984#xBC5 p$T3 v}s] ؜z7@'8m @ S=G2}-ҹBZإʂkB;$9LN$~RBX*izdLj"/3(K~%klx}(>3򰮗hH0c>At첞3BT~u :1xs`0Լ;$yDUA w~er Lq=u703[r sŝR2Ļ> /ExtGState << /GS2 1086 0 R /GS3 1085 0 R >> /Font << /TT2 1073 0 R /TT3 161 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 147 0 R /Thumb 1048 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 26 /Annots 146 0 R >> endobj 146 0 obj [ 176 0 R 178 0 R 180 0 R ] endobj 147 0 obj << /Filter /FlateDecode /Length 148 0 R >> stream mƟ.+ 8f)TЛ7UVؐdZE9\=Z/Q+fG:![~նs`JM2Y鑯.?A(y~4TH#z|~: 0PeVѳFds0AEpE3v—fW3%~+t\9JLTWLo'2 kU9 +&v c[-_瀨X<y׎˒lO«F|)/o,NBz _uFN]u'H ї١ :Y:XAuH9 %my^s[IxcpgaV wX?,z3iƶaeLܸ_ߣ)-2Sù0Ued!iU6)a$IJ3.\%~ ɄBM|=1Vs0̽.) ֮juѐ Q l/&d<%d huˋwr5ea+t_xx%*[d {"E~96w;ɉ !79Ȇ+nK4duVыv,~{"izDI#ZWm1wu9VD uA(Pn&Vaq@MR>u}>6Ԗ T1>><؈U)Έ8C{vП8Fq|~$Գ߄qo@oAՊP'{ZDʀϝ`;^ N f(lGfhVlz.J_'ܞ>G} Yt {?PG[]v H|'U/:' u5$*BTB7ʻ f%Ed`iLh.%YԊ(/>lO}F$dnC5{E=^$[ڨT ` o:bb_KjoEX'6=Sc #=0+rN& h̴ߢS^XYa5YV¤J*y` Lf!FT Ֆ^T+0W~/"|RodUB%KHE&h9!@D!PNwppI6bѫ'|#p1U3ǏY]By2Ki+W, }3#XqwT.UB^D"-5׸A8qE+RMfᝦ%Nk<#u|^y<$qX"(Jrtڧ}t䶘 Y^#KU1\zaU j[%_kGRN'M%vp.ゾvMT*P3'+Z*YV4u3FS8yS$+/T2R6RݠQ-զ|vGNð|_xş`=Ƹ ͨXȞ1 5I#"V)CF(ib8~`;٭>ff룽pbVdպItf}xK ٚ^ف[>+WTc/1cLp  ;EifvaZѵBs{ȿf_wQ"Rr4wgc P;`i)s 6ڄ|x-Md.gAsDڇʓgfg(6"y)F{?l6emEtv8*r$|O€L%8B4"l:|b~Gd=C˞piDsmzv.@#64PS|/jh֚W1[][ uZGZPsS/R:T"bR3I091u (2DQxh>YqprgT_yw}Q`JK.s/1lwH$ei؄8 Mh 26 #AR;kȽs}Sa.~Ycd75G]rZMuEK?\Ⱦ&j%19@T ! :aWS%dhܺ@Zn2!@)Fnia\昬UpU$kFS2T~s(-aQˠrChHʐZ am֥EAޤ9ѝ0o:~-2+upulJ31!j܇B](%TNaL BuSeBC;N}6B4:zOh.(6şAQg '2 rA{) :Jr{smE tЄ H;q\ل$N(Q,Glo|OQsYх+5_$X˦Ao:_f)Lk@tiHXA[%[K Y2ZLW! IIG,xd1fccB(_ҳxcw +.*;0yCM]^}>/~ހИPV&fގ\kwux{/.!/d0xp `BEmE8H2kN317 eWnRrЛ{[f|8DlLRxGŤGz\,C Pe{#OP&T/ |ݦy:SpB=Z-m^xc6wY,pA u>rPZ\ TR'=E9S8 fG4!fE0!,r);dLDIDsΊxa6yDeԜpOyD[f˴󌟪  EH<_pt LۭE*j}bgu R-E\"Rpw,bJM b+PDț{IF"~Mp9CGGSee(}a@c}Ճ6Df>,H)tϻwQ B ϫ=> Ao N^Nn> /ExtGState << /GS2 1086 0 R /GS3 1085 0 R >> /Font << /TT3 1073 0 R /TT4 1078 0 R /TT5 161 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 151 0 R /Thumb 1050 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 30 /Annots 150 0 R >> endobj 150 0 obj [ 182 0 R ] endobj 151 0 obj << /Filter /FlateDecode /Length 152 0 R >> stream %P.SC[X:sm-8>5dz|uFo}Q@F?=$-ew.7}j{!$BAp\|$7)8DK9;=U\_@ (.t:e v/ֺHz{C/q#"iJAKUp&11ޡ2aNt#se7g0 qX0'Q{.abwwh0+b! 90(  ChoE})[UQGwQ~ob/A ͺj9`d=aԹȪ8n`՗}AHdZbfХ>r"tc&5ruh `Ce!¬%|2W;q0@< GEf:[@OnnIrRP2= ]WQ^6 <4'F?8k1 G[Z*!aT+ɮ}+F\U"G8TҐ:`_=7d~F{Rý/XZZynqã0> ?N9cQz&ep\Lʶl=(2l0j,V({z"n$p`R9#x` axnkU2RI'Y#$~ ҍa$rUc7y3T9bӚr9Qjo85&DtŝØC&G'J>'7E^̀U@ -1!8,࣮]u 2בpvР, Lcq[&o=אiz q$4Q5"4@=D1շНVdJF2F]\w9{<3~a;n1ΰ(FՎ%r~'LbcIrg5&WM%v!(|W>HXˡDhM͘) P$MVe{xFU6n^T%Zc1inְ' cV\ˌ`W d%k J/^`F7RX)mQ7{p X49xjƿIlkPBX␼XDH`3U-/7YL{_JZCpЗT9 vވ n2Z5qASٵeo׺3caq#i?%pmbNPtKz.׀H37KW%!Q~a#3N( X5MJoWit8kp_Y96+>sJa*P GU =v&*r7<)iӏ֡Vf"pri$ ="@:`S|ܑS2$ 9&8l%.zib0$A8?>Pr2c2RҋH%BsTyސfd eW@[ERt򤰙9FJ r7}z=r"XdLhy$pr:چD%mܓh: b!6.pg_@+" l%yX3,9ϓ { ,t'`no]v@OƵ_S04zLį7}[#* Ơp}!;Diq꩕;%HS6t6 CxItEȜ#^Ј=Gtbe@gu%6S ~b&飒m i;#gTߴIyߋ+IҁY2{(KGIx4On$pw1=A fRw CA'fڼeA1&xi~!OHͨpQ4+ǻ(}bqFKAե|,M|N:C}~s)9xz epE|TK}-POV mZ!:Bྉ#eSN'N~GuLɬpw::WYP%[Xvi?,چeةJ%ğbh;?Br?fΛ{qM-~Cͬmg:WI9EW2A^湯<2KA;l6(׭X2Rew;F2($'"xL`ݥ-ʏE™Q^Ae!|N9$2fHPe%ycړyyslPq3R 1Ob+HW'2: }N+8w~*Ȥ 1"l8 QSgo7ݯPUb[Yov2 6Ƿ||\g-~VzYPHj+%|".ә"cGKꗫc~:6 a۪0@y/ s%xtH$eң ϑ#pBeŃr5mX^hߔDIHK>&OdgmJ_tdhiׄĊ dIK\ ?1ӾEږצI,!# e3~t}[+;Qgf,r9pQIۉ(@vپjSPd`v~1ڥITFʓ)68wȦEG9os4R@ʟS ׷Tc~RnGx_ui{7GXܲje7(7"B9mſ 58EBƀM쩕+N@tyG\W3lp2 jf{cSu f,l.ڌ,: ׻ۺ03<Z0 $$W#|SۙİܪFdnM#9+62ujpEݚ8yPN鿣a<; Ju,ִ╳pf< Β$b?"zdܦh}/j$iP:Թ"ݠ4]-zo,%UTLd1Ʈ]78JoM4-DղYX_L0Ku_Kqaq$_&!c[ke[?t|6XR/zvYyE7?~MشezBA)dY$+ub^Т 6#;GC +"^y~s40ȫ"XR~iպn)q_b7*=}W"7%PXȰ XT~CC=T(R+dWSzt4*?l4CfWMi˟pOg3lqp[ͫX0oV˿BZc~. ,t8g\ endstream endobj 152 0 obj 5367 endobj 153 0 obj << /Type /Page /Parent 1066 0 R /Resources << /ColorSpace << /CS2 1074 0 R /CS3 1072 0 R >> /ExtGState << /GS2 1086 0 R /GS3 1085 0 R >> /Font << /TT2 1073 0 R /TT3 1078 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 154 0 R /Thumb 1052 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 32 >> endobj 154 0 obj << /Filter /FlateDecode /Length 155 0 R >> stream $440=W8S`,Y r#_G F-0[\:޺ ߚ<6I!YkF$(zI;z `Ih~Tȗ 0Ak3wl#ztJ1nMnn, ^'Uި 81R<*U)hjV F_ M-=l'S,i[QN>"KΖX7+eCIj %p=>l{]ZgcWcݏ>J_$4Gwk6ui]mLNK籓Qm3$RT3T95Qٗ40<]% /] Nذʸne3jW,s/9N}YwL8xJ E %w%>pr5yE{dmi|.7YF Ug9,DW`,ZB[l;}֠Ο\KlU;D1JHkv NJkJ|fY=C}u'M/N<BK5v,VJt hGƖjt },-P;U1UqM$CWmagiAvHM,Tn$yNHQVP5q•ceA|;Z 2],I~iS}weY~X y[&_( y4PHH˖ԃ^<} ԓЂMV{9td`B$ITARJ@wuzrE&FÆ<679e֚$<Fl"IN-dLF7u.W#0v fAEoyC)NS c cFw Lr2yJףenYn"SSڔ4d*D0> jή~xy>DBH+ o$;`2P#9a.%f9θۏm2&62jD݂E mʳ-;E[ W"T/i가ڝeȚgW:(H0d-\)WRϭ{H ꟵS$ 3A{sre @s1iO8@ӏ-[-:Kgg`sZT0 ! W}ޜ/iΰͣfp,՚>[ +-3xK,o5c[k3T7ʙDYZ*TƳ?ײE8_|p]F VT|[ϖʛ=6e+a 8qQzCH.WwN-&t_'KQ d'?|8tڑxrpCjcK.@ *<7 k^ eivE5@[6]TJ@³o>c#Nܝ ov*A_bdZۀ0rձʻSN9mjÀmXPA|jZ]~1}JjN{;$|5 c$bc(]|V^bp{;!,T[r=zeK1Wʍ,n4 QwZC }`Yۺ eQBsc;οz%V&+)3p2"aT.@64wKr5D@zȘp]}"&ݖ$\_%G݂=B-U`4,69@M\MZ\@O<0|8BqɊKPb?PQTŀ'n>, oT`+;髡}whg+ưYvOo+qQe#Nco0*d0D^'*[u<θXlh@v/iy|--thę 7컟eЛ w>y7a;[4ص]xEHD 9ېVzDI:#A3ZGa)?hT( ;a㱥V)Mȁ1yl Lk7WmӀ F$focD~o@0_Um9[uPz?IZvGf * *dõp/P/n-RޡRE mQRvd4)WQeg@U+G? iQ z/r%FaT<^1=&qzg3r)`skwjLΰݫv =,Sމ0aBo—?z?qG|,!;d?0Kz[k Lyn*'Fx ,mV~Pn[ȕ歄#e>ŝ\.QdwR`gMa.2TH-'wPm:xeo%~+'^<0mYw獪Bȹ(M#NH $.&SJ-!oa>x~St6llh AGi%yi*Omոt6"+~sEQkEj/REJ9)bAZK6`l_AQrqVb\_^x endstream endobj 155 0 obj 4206 endobj 156 0 obj << /Type /Page /Parent 1066 0 R /Resources << /ColorSpace << /CS0 1074 0 R /CS1 1072 0 R >> /ExtGState << /GS0 1086 0 R /GS1 1085 0 R >> /Font << /TT0 1073 0 R /TT1 1078 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 157 0 R /Thumb 1054 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 33 >> endobj 157 0 obj << /Filter /FlateDecode /Length 158 0 R >> stream YgBNq/oqǨG |@Ȋ s-Z7僨}']<:aO~Ÿ\W2LhFЦ"C!zؗp$/J= $_<,䃻>~`/G5; M)xY4^*359=hdcDy&\V{[8Fm-Uy0!wXOկu}S'I=q'ȴK$DSW&vS>A;Aʎ^n&V[U*0=gכD0A5G7s^95k}!O `_'ݑ\Jm ϱa:_\y:KfqVWz0gZL˕ .B*\5,[&hgKBIfPuK]CB6Ճob,^'|)oC[& endstream endobj 158 0 obj 926 endobj 159 0 obj << /Type /Font /Subtype /Type0 /BaseFont /MHADHL+SymbolMT /Encoding /Identity-H /DescendantFonts [ 171 0 R ] /ToUnicode 172 0 R >> endobj 160 0 obj << /Type /Font /Subtype /TrueType /FirstChar 32 /LastChar 32 /Widths [ 250 ] /Encoding /WinAnsiEncoding /BaseFont /MHADKL+TimesNewRoman /FontDescriptor 165 0 R >> endobj 161 0 obj << /Type /Font /Subtype /TrueType /FirstChar 32 /LastChar 121 /Widths [ 274 0 0 0 0 0 0 0 0 0 0 0 274 326 274 281 0 0 0 0 0 0 0 0 0 0 312 0 0 0 0 0 1000 593 557 641 741 0 454 720 0 0 0 0 440 0 734 0 521 0 0 479 491 0 0 0 0 0 0 0 0 0 0 0 0 470 560 458 560 486 280 468 560 245 0 0 248 877 560 558 560 0 331 387 317 560 0 743 450 444 ] /Encoding /WinAnsiEncoding /BaseFont /MHADNM+ZapfHumanist601BT-DemiItalic /FontDescriptor 167 0 R >> endobj 162 0 obj << /Type /Font /Subtype /TrueType /FirstChar 32 /LastChar 122 /Widths [ 600 0 0 600 0 0 0 600 600 600 600 0 600 0 600 600 600 600 0 0 0 0 0 0 0 0 600 600 0 600 0 0 0 600 600 600 600 600 600 0 600 600 0 600 600 600 600 0 600 0 600 600 600 0 0 0 600 0 600 600 0 600 0 600 0 600 600 600 600 600 600 600 600 600 0 600 600 600 600 600 600 0 600 600 600 600 600 600 600 600 600 ] /Encoding /WinAnsiEncoding /BaseFont /MHADOO+CourierNew /FontDescriptor 169 0 R >> endobj 163 0 obj << /Type /FontDescriptor /Ascent 1005 /CapHeight 0 /Descent -219 /Flags 4 /FontBBox [ 0 -220 1113 1005 ] /FontName /MHADHL+SymbolMT /ItalicAngle 0 /StemV 0 /FontFile2 164 0 R >> endobj 164 0 obj << /Filter /FlateDecode /Length 6921 /Length1 10652 >> stream %bU*?7Ynn} JZ3::Cy#'6'uW|n#7/rE.;PQ,yR<, 0OgDT~{L-"WT0X Gdc+_H!]f~ÏnUi}o{4Se3(7Z\$\,m=/Ey\ m^ҜIz渎f-*c2qD~!-;pn6loK ~*hAVf es26^TAء079L.E=*wc8ɪq:{yZ|bvbH'@9qN  {{<+-Bظj1!zDbPG}CˋzEN`o13}dGCNL?oy ?Fu)>*2\8 2Ψ]T>A?̊]Exo \ R%;|EDPR,`MxlJ4Md0t.8?fЁdgS;>FibY6]'&CXU} j6 UG 6nԍM?vAnq)%Z] ,|C /U?֓~ p]5PZm:i.I}Y6Yly]9Aً7zyؤ9;~cjᴜde8f0ekq/[H:a%4/{vB2HbjޏwP%W bg|J ʖ?*-RRJJp _a?_Dfч0e_/{F\Ȉ!񲃮L@ZPZK]sOpn:{bz%XNOJ*OCoD$isqbp+S=hKx4 Eymt_@ Խ7|s;(Yq"B(:;qeV1wCzj˽I68\a?BRHf GCU}TgdhS\ ? 7ԂrfqvHEIbu]rWH .j4V$;SI$eNHszԈj.c^"~ko1]$ ~|ИY0G1J@hJ6\x<3_GH#ͦΏLOpu孔 <#[-  ,~=y.Vq&+dPDDϊgIQ{x#A4졌:#@&e<sbxLZGga\w]S̍'"p;|j]xv_gꠋfmmݎ v|U>ACYFwboΛEu~֚C+VT*l28I)x0&t?]n2RM}#r~i"1c(hKuN!>6ha8;6&]虨8Auݑwʹ_:'GiKRk}:P2uQ jRi/>Q$@uz5iگxhiޗhr\2a H [) ŠS~8}1ϝ* ʫ3QZ5;rX (g-gbdъmFL3|m0tKk̡hXDqz7+1VfS5Chg~? {׃].$Wǖ".b)va-@g'q?we8]_^x=#Wؐlפ'WC4Jtw񴶈;jn81LgGkEQ:$iQ&ZGˏv=OG}mvK{1o+d6)а+ 2n'M>2&tA'\b=ew0=߷]^J8~RT!q((jęx[]Ύtj7|a62#ٿI< X'{lz6Ef8`zY>uh/IܗY}l繙X:󴐸jEf31 AI"&E]M}bF2>*E'˳)?PxXBm.i b.4QSzQݝTo~y7nj*l%-5T޾*~Ύ1El'2qF7{]u~QJs)? REX$V؅4tLW]ۙWE 273v}m#䫀 (Po |A`a+tE@TKS:+j2?Q'CеmM!޵1]y cIBtinP6(Q Z)R7zSOYU*ƄZH/ײַ"],^ܲE5WZ;l4xs!R[!:7OQiFߩS3?>TZi޲XjE"Q8-Io/Q'7!gGh:pXK8ȽI1' ĩ"gip987tA}6E┾HXfAVF4La6se'Iz-Anڴ94*> _GQm`ݜ&g’㷽OfJA4 )  pG2cx}YU[(< tAc~oc`;ƤVNn$2&q%L1V#Dewò_Tm`H#1)ɸWƇD IW]@t 81t׶х32f3xHL\_tf}H䶟Z>=$H}Z,oWZ$A(~syA=}T j=;;%@sx?s]='K|w jqln\ =@쯇0agKӛOzޮv'I¬( v .TR$ڞ^!|n[[^ƜۅZȁx!SyaX]zI/Tw*Gqh|O@yR4](^̫^a2$wB-S"ÊŻI)Ȁl1c \r3:GoMO蝀$f>ܫoztRiﰺň=XBѤ怚/"v1ρmS'0 yH۴OP>|72ǜ7_Wx`Ⱦ|/+=(qj eB\;BsF%xELGF Gf ~mA>+3%|FRHj3Sf6~E/Ʉں!))Llْj HA 1NϘ-bF`vhRC"3ҞyvIu&ﰀFUNʠC4 ?E57k4þ  ucQm,e g7?~+g KS֢( *ɀ,i*'jLAQ^b4@7o5`r57 C~-s\R^>"/GuhʕUVGyk;i@$#֦sF= jiSE +=S{̚ACnx$Qp'PD1y=`Y!j*8F`N2;w/q,s}qO:L6#. KV^CB$1/^d^IK`"XzNH͸9~dNiX XO9XT 26%Yrc&T}n~_We/prFjVPl2|g)sbwMt9Boh)F] k6_{ t&do׺o. !V&>|{մvQmbMbc 4]% vi߆)jgֻޠÞ96gpǪd*21 ,r5G4 jNcӃ143g:,5߰Z%}$u@s X*z PRW.00eq <u+%B-۞cW| a`e'!vTPF0*9S,dZ@'#*/t3_`p]K nL@žNau&DB$5ܩMPXecP"d9 {"'Z@[!@_)}ָ_6NpмʿlDD8l6w+ُ8=2~pqoÎDį ݦ$zfDZv@༒,QD qH{ydo|ËUM>;dLu6' N{2j,ҾEm+8sqULK P\X/ iG'23 dXIyQUbZyKmpWW!Hj|q0%Jα*ݪѷJ: N:7v^ XwY~CxvTe(J3)؉擞w^Cr@|Vhhkt!U2t^ *>FQ8KqAm#o:DWثnsdjdY;ܙ'%Lsv GrEtg4Jw9?*TƚD#m5UlOX'AMq-@ ,|J76Fͣf!-6>d+5sPr"@hlX9?fru( UB%!Q&U'x[pC>"LןESP|x*h EEhPtIJF '*G jϦ98(vRB@t懺b ş(Zsϣ>^[4U˪bV25v,{0M%vmLo޸/Jri_0 ^}iW38ۘI8r2xg®{Z;SXwF 1:Ύ)rPU €C-nȅ5eڥn50宒"l3ؤ1${!`2̓+Q>j#~ Y6vPf̂} 6 [f`tCz[c>Ÿ:3n[㍹8<~c?: }=-:PcmDA*@^ ebyW1(U.~:g6|ģ^ fMʾ(\TmAkK=zaJr5|eHg˰wY endstream endobj 165 0 obj << /Type /FontDescriptor /Ascent 891 /CapHeight 0 /Descent -216 /Flags 34 /FontBBox [ -568 -307 2000 1007 ] /FontName /MHADKL+TimesNewRoman /ItalicAngle 0 /StemV 0 /FontFile2 166 0 R >> endobj 166 0 obj << /Filter /FlateDecode /Length 8101 /Length1 22064 >> stream }q.ϩTCe$bǥѼΪ1.Eb"`A4-щyQ[I k\>H!Fc~ w_8W|x. R31to࿰iP!{dcsnXkfspwus0tU\t#$@gH0t[`HIL[IlF'0PcS[?AL)( ;mYƙCShH!=5d>KߟB~OQCߙF؈?c5T|GZ96s@-.P]нW! YU4c5y8U_@ϖП6WX<5s8P3ݸr$ ĸq^P솈ODU1!.>mg-bȨ!P&;!.8}OWo4y?RPxuC)ߴFS6g184x6c'K MI)Z륡I4N0o}*B}RV~";RQsj!">Q9ș]'),IX<As7wz"dy5(4/iOWƑvQ.[9^H8E%F%,84x٩V\4q>{en>Fu7p"8 9bf!ɠu@^h3\/d#qw/ICߪ ݳSt%RKHQE;QȟuשQjW7u70bC޳!{o?xXTg^R =Wq>=Mk*69C,_P|2MjsWSH +G¿~\ ~7Qk+BE4D G&IyTܼ0HAs_LGY'l墾Ĭ{C-xCQMt]6̮[Q2 ݈_5@/6T8N7 Nt4j' sXY@ ob_.nsSLYlϞ4z' bCӛtnJSh8%*FWisڰ}FTk~%>*RАxhovxoV ]˲U͹?Ӻ()NX RYVԜX pAU3Lanۄ M#QS1g8=e9FpK>Zjm'\K"M÷';GI*vi `G}R{H!^ yXa`/(hd7픷 db }TbL/C`#-fsIjDQ)ݓdodE!> )Я.BG(+uؤ W]Ju >"˃(L&$`h p59xe0qX g݀ =4Z,kH͉.UM:7+%FlI9`<)M \QDj#^ѕB>|^X&~j9.˶`n $P? 4h{yd{U!Z6]j+ ]BBF\#3VQf|{+霾 SSٜe6 Jy HSAjHıT8i_5nu,<ۻ*mY'yUܪ'NK+ ey](nK$ VٯT4hY|iPϡz`GU/al e9 4 u|fM{X* ,~pz.SA̹3GK#*q!bPOL ;^ 2ERmN\/k, Ї 4vFl Lʅ0*`RY{$ SSHm}.a~rԙ]'^OQ|NqZ0$nN4"YS: TdFN!BZrVHvr6}2B%m.|"9`"$m\H%dyz <f-JbzgPDx|ْ侄"F"`V>4+BF ۫>: - I$0?4@N{s/Dc̉P>OBX di 7z7{Ә``k竽tmLX&ԣfYx6m1UvsOU҃y߰]v{ `˺tDiT~a@D%HzmBhZAfU6ՅMضz?$9\h"aC*bU(9yg0KΜKpH$HZ>vSi#t(7w-͵n{W٘"Ȋbi\Ƥ3GG/9DԸ-|"ao(UoV|5K@ aD9KJk|gx|tH[<4sUشݻH zw §5ҝxT_` xeq HJʭnGW0w& ?hT8ǔ]@uՍ߸oV^5. uS_=ãmr{<}e`6@a0emJ_2iw:ʃv`R?:V K-z3\IjrBݏ$\&owgej8ryZU]tg'9Qe#.Eȝ 2PbV$]TZڢ>Gl"O[y}%F>1,1]MqdsyK{uk,)-< fqԢwF4,sx' T>][cnf}r\ KKk!+,_.';D' *LQsSZjK/ߴ CNto‰fzzYge0/Dr0:6D߫[*|B /uŔóbuztQf>ǧLmaRg̹\C`KIQ``!De:1 3yUߗs _7L@p DDFO[5<`ۉwXcE} c*;j?":5*+4WN x7#.5VS $Dnc7&VSLCu}O.ԫqFWtJ AW,@䶧Ɂp2A<y V>#ZZper ŏ᯾JCK^Ȫs魦D2&#cj|AVk[ ,{tj>Ǖn$З.7$j=GHaEc@\RF;ʌZt^4EM?4zuW};>ώr,Ǘ{Pz;72tr*Wp\jЄ|X :V5HmJj.4@B*j, 'T8 [l: kDtOo֓")9*Q^5HJNa+Mw[Z]dS 1(E4m so 1!Ȳ_px$hC/L0.ʷLoq"iK׏y}p|̷H9M XPNZ8t2A¤c5HtùƑQPRhzΛڎDL7Ȯr(Yy1<ٖI')r+9Wq}(B2FOHzY>d<"QU\U,+ - mO#\~m&m$vXa76) zE jþ]Շ\;\tADW\6+Cj$oZcY$}UDV`)Oä%B}[gP*rn{ھ4k`3V$+8ZwK)Dڠ)N 3kvwm dJy бg-ԏ䐫՝7@:hwUpE=;BTG %߅ڝw#vnHCnR(reuI= Ve'ALeVY>u0m=-L?_O'M8ci7cv%o@ϔ)G`V'5aS)?l;~*E (355:F]23!N,B}ày"|p/_q!'AzÝa 4_ԟq<:w{3"nշDu4z /cFlTIS.;w$$ BȄtGu_F?G+J$>'3f<L+:Iyt9{|uIo5tW<ޮr}XK{E@JꪻҰ knx>E0#~e+:^S!i1P! =nBrQUm"*'bh24 8o=6v {xL{m2Q~ĥT\iiM_6BZڮ?ّ:QODo_2J aWn`\]I4&#mXbБSik{ueSۚv "yy)RzB7swp%Q5Xx%~O~iB6ˬજ(uޗ_ Nx pLQIŅ먡.~> S9?@*`jr(,'Щ9{s(2 ÿlEP!H{c8d 7jj(q|"b1641٥HOX$.Ȯ!n:eNAr*3EvY1G_3BUzf$?=b^`Mj)5!FrJw mpUTa*(ck՗(:ćtTҺ = ֺ j=>I=NϏ'~gE"]VX~hdT[ұZ`&L8P\r&Ũ~·`Q^s8fpgLh}v9U MHx[ )x 5FS H0Eҕt ݷ7-Oe,`#z8 \ &0JZnӿʑ*bgW1 t n\G,x%,s)k:&@q  \^]Z|G>mM1 ꫲ3yŕֹx͑`Y$9qZ T6ԗM9ȢPch[\ޕKOOA/sĪYfvRGhÜ=@Mg;GǬ_k[2j eYP4(\B!WKM-B;9ڼ;:5 _UC DbY(Yl~LS(oRH1!Am4Օcj͑kBeqͤ%ob4N&Zƙ޺F< UFm@;8^ޟ㲹!&govn />Y }P3֟b|Ⳝ9^i2"Pp?O HaooD4wyac̕~ʲ (9@JЋ4*JFvƔK ^ }h#Pm ֭M[kL)rc]5k'qhWO"= yIAo SW8!י׆(΂ zz6۬rx̯ʇ%6#w GcQ* BYgUwiMQ),#̻)u[оKy?HoVg㊀1 44Wqaҋms}Ά#鯙>H溟vA"dKZ)p?h-C?^/}d]/#Cޱf&)B ^~6Zk$NWnʕ{W ?wvSz6(_3AgqPy-Q$s>Ee{` -ժa=*mƔMW \":X,:ČA ͨ+ 1yN$%*Tޅ T.q%or,^j@ .|;xJYp -,$H]oS6 %€ ʘϡ[q -w ZhNeZ+i!_+JvLŊGVh><3Ĕ>bd6(j5j7D2%MT4DSWzS_~py /EW2TikCQoqRfl*f!'匳Se]' ɳ&'H[Āz endstream endobj 167 0 obj << /Type /FontDescriptor /Ascent 962 /CapHeight 687 /Descent -274 /Flags 96 /FontBBox [ -218 -275 1112 963 ] /FontName /MHADNM+ZapfHumanist601BT-DemiItalic /ItalicAngle -15 /StemV 0 /XHeight 0 /FontFile2 168 0 R >> endobj 168 0 obj << /Filter /FlateDecode /Length 8934 /Length1 13636 >> stream I%}S9m <=׫JŰR"Q%xR4߷\$ϯjU '[&?lbYm,Z` YT(H02rc7b[CW֬"6Ű A :VD'BӀ=C{#%PA?~D^ ;B\Gl.6fZJ2l]VdYGCg߁s>:ُ.ut^Ts B0;ؼF\!ث2!D_j?}!Mt{Ew{C@.,cYso 7*1."td>l=_jTxO^s ?xo|!ti+&qOe&eCcjf02L6B X"G.c҇}re ,7C'*wf9X}~bh\hNn'ň}1^j`z4a;ٙv7wb06Ġ',gO3YŸa/Iw)+f{ZL9f]H{XAPIKCܴ^/i}Y;$ovl؛pyqZA+6ԥ#Jr4s\}\Z"Ṷ̋Q:}d32j%Y@:D*;跆 ! `ѫ [C`z!䐁&hK}݄6 )}M˩X[{G"WYaA4^`eB&_|10Tu)j?.gvдP cgWҬo 2zqXރ:faMXietaMt+M.|x   ^vhm60]A0;l v'cQv.GwMD< <.FV'n.ҟsnS e{簮l2G:=9nɞ `j<&qaa=|S/~Sqݳnnjwx YWQlN ~DrBߦ(ç1ӾM7#A ҅!4xtMcIO/y-`wBzieA@nġU2DV),1Az%C`peo,p.0nKt`0ܹatiJhuSJ|peQ_OIdx-(4]p, r[]%_|v&*t+O1z ^БLd6NX6>m8>A`TmIUŋ$Tjfo k:;ŏ265}[线KsoujZ,C̣z%H6 EJ5g1N)eF7uC9K6U7X`L "CWZ<{aʟoЮ Ctm2,2Cf[aDTU<rт^ot=Dp j7an3_~Ozs"Cզq @]Z#vv)VQ-$wSH<,mpFxB(Yw#0ol`r"u(z=lgCXXnЀɨ>жbfG~rEW*b n(eNz`R_ǎ:N't$-WJK|Zܽୗ0<.WÃCG:Vf %YwKf_~!jiS ɭ~elob"Q,Ub1PҺ ACatx淵G .>TtoوmmzE}`d%JI% cB;n9mjP sl(l'ǡunji~;\VtҐf7NCH%wbVPb&`"։q¸xn-.;ˋEnlCmm̬-'WZy|N$n_)Q ¢LL2iԲ|&$)r2VM٣W`FUC=5 赁߈}$R(EHL_;x3mi=SPq)sE5Π~'˙tv_"I~Ye+Vrj^{Z}|gF4D,(}$~K$)1e9.FP(QqkvQr9P]05R z߸m2sh+A=*wa9_9 C H!FNچA5˶h(ƄFNŗ{FfhGh-N64bi1NtjVMFcyl頀 Oz|awAEg?-[=X uB%>Vf斦Ӹ8Uh@|X`L5qZ3@Yr̐ V, %*դCʸv5kU>DZ W5J>sV c/X{nww[0ʣuԾmgyyym0c TJ Ezo3S%rQQWNٰ/8 Lq˚W\<+|ܶD!>Hb SQ'o1tqR̳B+"xd׎SLXM!!Z=5?o'@~t\Y ̾.N yk/-oON'$z06YpFK*~=[jqp8H?u7zsjs] W+7 Y i6wjseo۔v,q#.*Њ?$hdA0 HNf΂a˩)y|5>obEcĹ{L$\!2{#k:FEОsS fvfD>L C~V?ׅFp~nͦRhjp&t|A{2(;j!/(G"!ZtwlG?#GWwyq<,pM&y.P(;- ^`Za? M4wNOp'n ՝3L(fdstjXR,!ӽL7UeQm"GG`:ePޘ Mu`*!`qLCfY68$7G- B:)QuڕUsWoԎAIJ6 nU" c :S;yS'3- 5%Ǵ^f݄v9"dmˇ0>K~Z|ANocZ[Q\ۮks$`[ƍD,cKʷyjm^/ȻT-FfקC4:fNpXVZm @yX$cS0/H%b:oat ]!0v}eL`Jh" qI[4hBiu /r`tOSal sVI^_:RCw>2W\-'LclѬ~ ׫li}qmdMmky"$` iF!VRi6@vw&J 4؛P-a宕N:;$_$xj9ZGk\O J^ lbvi#5x~ө5&٭[D/0ap GgSpoġJewj\x}П,"xy\'c=9> ,Wh+yM > $*TLV@ 5oNW[݈ĠS|LKT!?c blKp`s 6K16\_H}cA5[*/٥=Kk50fkZH'kFeo9eoK~js^)6&jr.}} 7,zq{ةKv~CkGn0uj[hkTQ NEON iʝ\y"csgl?N' }t~ }Np4aB(;n?]~ wu$dʹQۜw1zk )B^%rQtͱU〽nͶ6wy5["Qu\ цשC 48ìJ(l2kZPW1GW}AuIڑ$0E_㱕cM[B 5ie\$mɦ5+DC]+57jDn%\"\F+5ɎMuMzk7zRSu?3K,8MpBk8y/ U\yJ>$!\r^M:ԍ a} OGPw6I"F%ʥzr\nNLY!Urb > MptN`_jcss#0VxR<iS,G,Sw!DH?97q|#x_$M.}[D5T3+&2Tu_:%@9gv&iLVtQdQQDBc՟M=ʐiGf5 9Й7U 6#d0V8]CY782Uu)ο\x<}]G@kD6_-OCr-5OI5W6Œ, l+X?g9Dž[۶Ix1`BS.@xZ#UBU$d5A~_BWc 'µaMdH1CtY7N:{%^ ΝwV:՝!LB};';V0! 0i" *q|=[|9r{XE!-X$oB)i$lag3,8Bq-bB4ڦ d.cI gowFqHnMa8'I' _ d۶lL[D]3|qȣcȬ:e5=e| e) Ml!̰2}./ip%"DhdL -b|&/B齡HibVc2\Zf-9QK=m'W/nH]"ƸE˱v#.u V}AsOejѱCV2I+\,$W㏺T2W\,"#X*UTŸH,mIm¤\|ߗkݒ>Ln ,8 aXC$U'%rUjR9$`Ua>jAF_Xʭu8֨ F ~ʍ6oǰdkLԏg}PnC^آޘPs6'(-N#*́sbwMYekވw#NAv r:ZWѾ&C1šT@p!^ī@ yD -q96+ꨒ#ԯ~Jtw8ſ"pZѺ35͋ݎfDbgmk <]'eN~F1:"qՌAFD )ڀХq9CC_4@s)V"xƍ} tmWxK(h,)*[A m˿_3G>{qz'W!kp#\wȼE{.q;쳋@dBXF>LpذlQfIꕗYq927o#cy ȟ˸$i 8w%Um :99r* PzT-Yzgrq b][dϏu*7:9aob:Mshr@nq[ݭq- Ըx:EyaurkXAE,{Ԃe[jvǣ&wuzϲ0MCct9]=ؤI^E~<HKhpJ…b ]7Z!^?lC}n N@!mqdu-@9Q5x*<MbmMؘmN?` UR= vQa:rw@Uq --(۾('FBHJ [8Z λ%ʕ&aEkצ&63M˓D8i"r][U{xqjEI &[Qf,vIxFiz\DPl 2koj$*ekk.z3l A ?> y%l_͊Ho2V{+ ai)aR",8_TUjo3.'x p:,oN*ۃs!ΕCkrs"]93-vk8ᇩK6o! -ht 8rx#D=^߄"+e܋Y,`A\ӈ̇43$2σ0A2!ӑ)솈{jхXz(N"]\IKH>cv>(YGo0hu֯OM\\◖~ |=`2o zS1(+,@3Cfj:eH@f-|W%SeQy!߳A61ms#-XuּC)j)vM$HeƑTۂzT-E, H;7a٩L1_-X뮹lAGNEOjRF:g&i6'c9]2Ɵ? 7krMɪ`8J K!J*= # endstream endobj 169 0 obj << /Type /FontDescriptor /Ascent 832 /CapHeight 578 /Descent -300 /Flags 34 /FontBBox [ -21 -680 638 1021 ] /FontName /MHADOO+CourierNew /ItalicAngle 0 /StemV 42 /XHeight 421 /FontFile2 170 0 R >> endobj 170 0 obj << /Filter /FlateDecode /Length 22485 /Length1 38960 >> stream V"uo8D"x~3(ɥ5yېqAs ]t/A3l"w6HƕuJKJܖ қ6AnToNX"gvJ|ET'gn07WNhH2Zy)QwgYKUڐ+k1*T/ާMw7!K Z%C}K#9ZK*GLGl'P T$ 8K Ky8fǰ~XGbY IBarp@')KH\(?zCuqoz'SɜR$/|N f>㷢_kd r'JL9a&0~i tKpv@=Pϸٮ5g]"GqR%?(w@SYJ x7ڡPKj`IfоddUmjNScD2"L1Z.!H~{>WhDډ #J0˚uΈ)t/FtT4̅Fj?HRT>^sPYs8# /c)ee͡+=ba4{܆"ے@Aל[a90@{:HMf@Q7oW.RYBR/A"ɺ;0T1ԉ!-$y~lF.`fBkO TC뾴ȇj{ž #i"#Df37}IWq7B8>,4QOLc @,RhisW(k45?~8Jc;>1٣2:jKpOK:!<ބy,|fy @&4~-Oq,(NW,RAkn98=ؑГNaU}o,6AVPE6M_/Y>l.q<^PSCh  cz[^lhЖ|nvd[ ESh.)hpw"Om y{Vj)d6ouXF<}b׏9s8>r3m7߫!{7\La %%خ>$Ww'a+>Y+^3AhlPNGr$X̣cddT׃ fT=0#GM&,O'P݋t(@@|]JW6vO| }V`˂3`Ş&?umv{ÑgDpy 7k,L|pEk)~{~C-6 5vRBY& .7ǝ1i!G&,KMimFz#%}]Ѿ q!J]dw߯diw!ڕ@ӘGdv K+Wţ [Y~%x+_PLD&8:(#XU9`;xp,YRXc懏Hzz:ǫ.A9lB'oR+i tSzh@!$ | +(o3Dku9nqRz@vW ة=SV)~3cx^w1w{| ;F<y@(M{œݡP3@N65!^ ±y^ bė"łt@L6˸>$=e~ziiy~nfV?}1w]ǜumze4o; '5 @cl#rvGuȴ} x _ {c>]%adC_hMgVȟh/HXiVXG'@X[Hs8>5r{d6;|Vٳ{B^@!V,q2D<9&tMQ;cBi STFab//H9Ҹ LͰ-Y!vXF FD ?ّn~^)5fQG_qgX"koU؂KysʏqyJ4. xؓyd2פc`w?ΐׯ1QˍZl34mIXTK:0CEB)ͅ5[J]n=_7Wkj̲R$4|h&(x2 SV0y-:Tž㋼ϼp iTbtG`t ihba>&DBϔ!'\0{;>xi)ŽZ(SFO~瀛2a<-TH;p& 2<,Z`fj#,F 8iבl5ep[R0DusfxFlF:,uWƠaedc'!p(/?\W-´bMSPڑ'o1Y칦玎K ͞HY }"H?J#x* i=CANo>ѕ-&l " }]ɀ2T/{,qnzE͚}VRzv!*K1-Ӗ/ bNv9ʗ x[Uy pҫg 3̛()WD'82qZlrJEO f851ScTx)x؅Si]y[xݷ_{aK*KܨXnnHxٯ=Қ#Uf35o,V}$0/&g>gڷ*wjcٱɪEϰ)Ӊ ?bA(7$~HtR5 3-d؀:t2_&jzĉϺXWa`+~ d4"fw oV{}Ja+%!D!F]wR@' 1㥙afY޺OGxގ: N#-J\Vm!*u cl~ϬJZ $ ŕhMG`yƿs1)ca(Pٻ`RmNc@sN:•)ү A j2-#C)]EY=jGtm z,MFYo޶?ORĻtJ4r¬-*IItt5Cf`Ųrxܡ՘K]*8p <+(7u'X:fmz*eVZghczq̔/Na %_$Ų:;7j5=>Zj8%8N <0:M0?Fz$YAZg }*RC{1;JUC>iWgyo^ /F"hc:· R6E2gK 閨C3̯=x.i{HFoKž=E#qP>m"* ð[ԥ[z)pME84Ahd8rZdJSjڒ~ZuNET3y?\ ?+HN)bc&"mlR+u0]?)#61wӰ;QHk#ꄦ{;u9Mi-S9|4l 8pH)z5<}CLPOh7[x1:IGװ`l?6usX~ܻ74)WtTX1D$'vf D|z6e+ysMjf!-+84.6W6o΁^ey;dcWH>Ƀ(3FNtnչ(^_=o^<{@̢J?Ep U/0OGGEٗ<O dz͇ǃG\ĂO(v[}U5ȃJZ7LX>Y&F SbM0|##˕w O]&Uba8mGoH`,䰍wתNm}AכQ\JɮX ğB{&WZ<ž&bY5^<-BILEiH N5&<8};"ٕo=Huba>NR$&ݪHHu \FxɠE[ %=Imk*X+'[z ԤP=XBky>P Od퇙~hVW -&G:pE|D!1h?bSY ܁>{*:3 UݽZv!0B_ ˛o#ANZ~Q(*J050%ɣoZ ?tҐ)XLs%a⮤u diRv=*oVT-M#hX*]遞h7PhRQ;wj@"3)~BC=zyve,R$,_k*nWrmCЗKKByAk?'J7y)y"45SznFVbݘ'L)+B?Fd9Bl#$8ÔIiA7b93_8iP uN,&%)z̶r/0,Az@w%q44=;׵\RbL%^:vi RFiU4`dk-/`z(]7>mJu4aQmyم/)uTy{7x!T#YߞF'@7 4Hf8Y'jO05?p u!XSay8En뾥 <ѐ %u*#,]&O ѩ-lHjUfQwsT2O^%,ݩ繻4~prIKHv>&Ap>L ztkbWcz)5T%ůG= =RZ$Mtqa#JxmiU'nE꽅AޭW&=D,fUDő: MJ^-_.YJ *J9+OJڿ3kΚ`2DOo=NMfABC%`xM j(Gk&/\5ƶ<+|ˌ`<@53P=EI RDA,dcE$.}LZi/.`p䲗U5+3Q7STk4%7AE$sʪ Q(蟕@hfA3ߓB@͉g@#JnJl(Vbf$-S=9wsqHT&uŒ%e|@B"m\{cw+sׁԬI X3lA:1sr,Ak]ea JBfoh:A+Z<0%Dޗ4';5cy|0w$S4H3J"zq~ppt h@ U3VrMs&On0i$Tn# xJƖ%¥ 4{ajKEjN5{O4)yxNԩy%Rw'ȳu$Ĺ I|W@Wx._O&i!1UĤ<ǷwTNe9H1O@ Ii{î2i]{L M-L\%+Lft RŲHǯ})Kkv)A1$QgG0TEVs8 Z]pr$[71w )0%3N\Ff'%Xբ ϫ}cr`Ii|^ǃS^Ok\ 0&*ѯܕ)H +<NT*Ժ}R?ꁠ +x<%ٟсot5t%瑒!5$4G˧?8¼ˀ-@ o,fUj1 7lHypgW';]R^$4<wƩæ-b;NY1ϙ d};|S%2b;* !~ٻ6ýM.WxN(pWK6w6e 3"Ktur4[p;Gh[51O`8-ƕao"BTͦ-_߮k}m¥fDUϦ9qwTJ J64>auhZedO]Q T`TBjue1YCIĻDhD%ĦK+b<< }xnggR3 qG=k,޴bXU!5@"&_q.3 An}mbR&yWqpVxmǞlcۖ7Oz aݣ8j61&[;!,Wⴑ[)T*Ĝ2Q%Uc=>T^e/=cq;!>z?p8j]+-#pPu}5 [$OVg?|F4⇋etjչ"p,<,^xfwًK0.G:j>};MGfD|eyoZYM ΀,=φ3F67Km&SBT7(U1bŦvȫkxk#6 a ο9h3.vo7H"UF}9|AѬ 6 7Q".һ?P;=>ԍ @O/VCYC3nɺ٤+#%%U8)k>Y2D78*hhWdIjS%g͎q_r<O/?qEOǤj0ޜL hX|׺,~i6}&|ՐD؂ }md{&#="#Mf򕻱3fFQs l#uX!7 j)Q}YIV4p?ZY5r6`p@aL&e38뿾`%wZ8G:jf@zbH ~T/!܀H֙p W|*rģ"x-~xŽr[]hBj0e!5Pҧ,C/I޽`3fTRi8gY~@Es ,kQ1Rb5.`1kFkR^h SڭeNKE3TMϋnatϱ(4gZ0YpOV?;BgiDKyy$E.$iCsMIZMNXi[cJGDa+h,W:M t,n^v K O%seUՏ|10h|셨b^~˦dLI[tR[ԾD+J')@$$KkG\.:̅UcgdסH~%Y#7Ŋ~Pa|SWy>`⅟8nؘu6pIO~LqLua;U}z$% vKoot ~ˬoJM p)ba' $;AlR4r4װ YdP>It기YZJp)<|dPuIP`'3M%j9s]16q#Ņ}B]?: -UP8l$6PS ğK'=0|GJPw*^%meVﳆt ND/xWi 8R#K2ئde GlÀ8wf<]WPs׎=K6sR5c &hqc\ #3-:#t*y:+I}U]m\K(wH)O]HqHJoHonYZlE&#?뽋ʰ[oY6f{l`Kge3i/E&PٹIY1u=|U$wC'!pXMU<\CoeBg@p6 ¸xSK ό\Z76cٕٛ2d/^N8atgX|P]vܧoűo` D$I)M钘3\@HPmHH" Qvq(v_Squc vGR1ߙ W?wR\Jr&E?gPGz㥸/Pv/W57`rtEa b nU&szH'X ɻ-]2'tD{2p闸|2[~d2 Qv%AxB2HA)!p܉ q6Zޖ,;NpS~SO2OZ} ":u_5 8quK7YHƛ}cc[#s >i\Vfpd@ ]g$ODQTԲb޴q f:9wZUBNLm)C@!Eo80Hl76Н-\ՒdJk#3 utS|ETW{,`EȽ3&hk`0;oD˧u!/[S w|mx Kiu_E]@~B#CT2Q~ D -:kJgozpaV}1?U!K[#ovYڧgb Uz1#\ Y;GWϦwsadUPFjkwRnEY ]I~ GQY?|+DE%58?z/yVu)%+7xE`䣖Pqo^{لIK=*ǰ!s&zmYj?+m" S>EXe}u펢M6%9yn}??8-F\ę3Edypgg1R3jRr#ن5n_q`+_W݄(Ծ;^.V*nU$hɄG\b-Kӊ{tj6jI%E ~b caBS0.4Ҩ+MWTyA &4ʎ躾E!Ѐ Bw^*I&6PN_C=zn_%HJ0<]f a*v̟3:YJ^ʡf=ܙ|1(EXC@rz>R7C~e_dz̳KQc5UtXO\n#mN 왹.EP.Ld#*nS`DV "ѳ/Ӝ-2EP`rNA?=ãבhMBpjC_A&*j]C|w@ߣ/=Sl .u%ZtZ2+=dX2z*)LkM.z& txQUvg[9]ZMZ8it[ž~hƷ(a9~@6?}|وVaVBO.In\nUgxYЦڭr޳A#-q,׼k754؉ Pu8 ;NY\Zh CS)|Lyepa]8 `$Y4|Ntd;/OV6K91M"t4 âa9(!1 !ut<k2f`rH.@N[id5K+%dܵdjI-"6BĂlVfHe"Sn%/r_ǧt+n碆UJ#;OCHoP(yQ ݑ8u5{ߎ&fDӂ<$_igbuu*-L-#p~ _(Q>(x`dV_Qjq@aH4v1|fڑ͚僷M)"y*p~QjRU긐r3y|.f |h lԤ<]f+3Ռ9pbV3ڟ)g*Br9a9"PsܹADY|@jOa䔅&t,E#c;Z9QI,d-)sM<1S:]Wo8U#2E0$)w8 J 5bC1;>΍\*pl0t oz~Vj/v|tmkE D^f=N/z`~ɭ v#<-tfNl̡ar*ҩ&-P oBJB Jνʖ+& |Qާ_]xo}N *S wXY <`;`uAN$5vP:j@ ̚bӘ~) 9ΜSԿIrs瘣*K_ 0~<@W4 =Ȕ#V{#,Ryù 0e 4z:H `|uDƂEOX,R}8H-roT^CvIdwU]iǗ `#n wA<-wV&Ekq]͵0ӕ)[Z8-O]0*v& T`9wlY`2z3Z,H N_IqpGJjj\ Ez󤿹0`w%U:^@ PQ5f.ŐnM@;UG Nᮁp&M3f.Yb&;="wIJ4= !jyؘ>Pmg1\Бm{DC"` l!}Y#sYg[Ѡ:9@̝sCK:Ra5TLYi T6=孃k zK'"Ft4A8hI?Gm ;U?߇(VY9Hq(N[ P#% *R.rH+̻dw'HNJx(1sM97Z4ֱJS|0D \U)Z8a/F"; A/ᙸ*5ٙΫ{_~&5=cGVGɍLnO$3 ws:| @8bjt8FNL/;1K  4}4?-xALr_3y @&#c؃*=JՌܰ}#xI+b7߻I3Aa{.Z. +sBb7$Kr/ o@IoŧssO2fjc8ӔOq]-m \1g-é!Ovo. }bTOgwNIaC@0g ɸFg4/ˇ;tH!!A>! 3 i82FX!Z{:Av* sX:J}Zs'5`sWhIܟ"'Im#7x^9I =N=Ց1p#JuNUpWy$\r3p1".ʋիk^0|h;Eod-SZŤO.qsX;Lu=M`s66{36M<<"gCwL^I]Gv*fZ10Y<Ó]E?k qBȰox4uW kFoƲ8>/OEZ$!A+ihw tE @SO䆜oUTMKhͱ3{U g}56gW >s BTAiP;FOTDKt3b<hON?cF1hOOz-?",WTtP:>$T="7r){/G h+:L`Tq,D,IR'KTE’ӻ8^rf!y8*1i~)B)02uy)ԥ LK

C:ą;"& I{GfAq:T!՜:AeOɶѱe v($͋W*~x QM1Xh|">C`z$h6 vltg1sR'IeYaſ)עf1IIϷNYVk82uw{!qCo)=B`u3>r@ZIE*RrXҥM4M=J)!Im5Xq-&We1 Q^Ȱ۹,DF.Y]*Fx!xJz!w̒2QR +Wv8^Ղ@7bA*˅R|Z".X}h6,+ ۛp2/r8 du)3PeIyQ}'hDkj>M9nc W{?m#~2{Utyr!R vnjG8HR֍}n@5wc7~lDMZcdcX, 7 .`}b]w+r-ӣNgGd c;# z-^_h{hRa#KĐ ,gB(U0 KGeO#NZۈSdiSaZjIi'_\ .}ݪ s{Vih+9ReH3b!-wńj2kbK,7"8Ǝ:]y A[pdt%M(vM߫%Գ1Q%ȍKBDg=mL^L{+hM#ϖ۩h!3cA:' ّ 6$-ؽr6_>3\b^^le)ȡ,ABZ>m%awzC YihcX̊sŴy"<8I5WQt+|Pp'k4RDf@+۸1C$r%GR;_ψaeBYvlM̕Z@j+Ğ|"i1©?\;7q^ǔ[p)57BXRDå@\.ǵϸg6g!Lyg*^a*KTy7F-X3)g31qL^ZK~糾vKa#kI琛"bhǝxGy+kAmf8FrCcbIy| _5?"hkJM$!,yFԁT&3:ЫC5\ X9 XIrLu9/ex6o Ʃ!U/ <bjysf+#Rw(e>K̉"g4a~gu?.ʤl,AhVrb7 }|B_xE&g|=~ rY7lDD(Gohna">-q0‰I|9ňWÕL/FǤdts O¢ez߃2(ކqYSک(x5pZ,I(fm&v`DTy\* {ؑ/ ]#=Ы]aZD! }Yiqa:y먳[v~RH0I|diG•BD6^+g?hKd$q` |ZɳvCH}qy˄=a/38e=O iv=i%sz7xOHpװd {Wq*I~=ܥ&` OUNÒ3bG&3*_, qFr#W= lfX#Ӕ~/ r⴯ 0 cGؖa{h߳ӷwV9ƽr`nxj"gU2T 'tń5 pa2!+i@"h gjȡn3e٥Re q&ywe\9Q\^P@ᎯgVcJ5 x! );E"!s5}! ;9/|U(Z5E$2յd߶dn's*:.'m2o!PwtW)5hVMsR0:~0\:ᣃkU  #k,iqg۴N<+`W)* " ='Z%Ld(E͟yᯱWF6?dm\uZ.6Euυu?OWp *sf: *ը6; Ov*"Cpn(cnjL:W?Ԓy.n'h:hIu6uV/Ѫlc=mmvٻs-Lvh|mK.EfIEmdG7?@T8XA* zZt% c\E ư)dA#.|6BMi j֐ nJ%p)% b ;kGΟŌR T}*vf ߾jqR4p1<ش _{I_gm|KJ0*KC9?J>cﵳ, ْ$佅BEԇad U 7 zsn4մ3a=O8en7ӋgW1ïĩ]y땰Қ%O tMI#/Vs i!JȱPx*k,%p%OFfR {!F"*e[z/+L>87 [” xXsj?GI9BZ! &r`߫WZ41;8>Fo=ԩC~7X ~iun!(^XiC18k 78jK"&^}GꝕȰx< +(ͨc5/XȗYO2NXaNP2ؿi\c<td"'É!o=*DѡG.w[ iHbwdAR"bzT+ʪP0,S\)zxMRPgT`}i[ mݡ5.Q?Vr{@|iwjO8lQiJ'S_,k#@!CïD,FF&RզPm4c_#NXyQl:qtB>2MOO.%Jö4ҋR`|_ܽ>SN[lLe:j h} ûX1:zjT@zI)iVY,35*kH8O6O,? 0u$^!5Y4֗88bN—R&4*ȓ_U>--7ݠ 0ˣu=r/+GBj5̮t2zCI8_ 4E-I@[zM䮆Vhz6khS<͇0]wMo>*3vgR{ Ђ@݉_U4\[  ̉x$9 G֒{*˜f]\>ϼ3WMmvc ʀWh!l>:[bnW /ZD|wW>+p1_|3F<̰8B$7 $N҇ x3| jp(C'OsWIm O57b|j_`ݧ]}*p8\*1D/szVܮ4l)1‡FgKoMtYpUoՂEݦӓEc8&wS}*:[q% G~P D-ċ0 ' BqB`ߓ]Y44E "|/j[b|&f I3 ?ڳvț Jr=77e7x =yZRR!nb(8ۿo;_DR.dͺ5Sz2Nc-*eb? qg8k+89s:&až,ZJVJ_Ͷ.ӱ".[ݵV% ?|ٍAZĺ6'C6\.̿AĜ{Z3%*mO]XbEڜb<< 8`JXU]/¶s#a똖h \jp% &vpc2q'Z 4d"~1HR값?-L}guZ^N% hS_4l%pgBi Ua8`D > %\@ymKE~Z ҔI1ڻ5@yD$L|;LlXu/6*:b|xdvejGN@9q}F?d'.s#k4Sʼ}UTuja$`gLޖiGTtOzwe9O~uK0pPvBX.qY꒩g+qEtDOK%oO@.4nO?Ai]D)GM !%E>\؇/&-S5{ 5=Li }XfHҢ}lOSš#sRy C{ȾicMbUq|9;kջ.Ž(d5qN|8N+kEv!ďOs?7ix/JLԢH9QT%x^X&m%N15_8=zճE~4j!r)d)`{"Zޱ-7{Jݗ:w߲dMUm7=zz|m\G`M7|Pnn<9[vjL⦵$[.8r"_T)Die-mQItv9SW#V>P:z4vm᲍T;f9uu.ΦjVvh9!amҪޑ \psR=^t־T ?j- i70=d$ācĿRKaQi0Pr;Ixju ':э5q_$9YO;!5^vY^#rG"[wfJ5Y{؝< | ~Nď/EG*?UI+r yjl,PZv![>9fJ+0/Y؎ƒˑE0|f20EC@/%.N?,wuI@U췈'%(uqɜMaЂJ?( |VWQU<Sn?O wiN)͜N`bR_g.qmyMICxn l^D۞Q*%<$d@h;wqƌ&G6CzU?txI}'D?4l$FUh`:Lvfa=SO ;E+6*a7 ֧ ~\pS3(;盭W}@7YLp[GA{{Kޔ UGcAHGb"1lIA]nTӸvҞ`/Bj-aᵧ2= LWE7~pLVJ2k.ΓLK-!ioD+p>{o@nY|&|>);~':(PU:䑽37a4{œa ]*0/kZ C6 <|95O$(~tGJԝBγ0@53#Hc JԠմA_B9[TbȀmw8KBЍ(Q8{Z=ͅ2(UE%;]/E[Dr@ZD۬Лmh Xu|wC`zytd&&Z."d\IDӭ)Z rWb7a>~)l%E,>Nᅢg-ei D̃{3 #M8" T,0t<51^$l> /DW 1000 /W [ 3 [ 250 ] 120 [ 459 ] 148 [ 790 ] ] >> endobj 172 0 obj << /Filter /FlateDecode /Length 238 >> stream -o٠o%Ç|#lAU b+ZX%QrG8\Vb F}1~! !vrūi݂u͍|] K&>ov `E!F\&?0׎kmWpNcր2{ t;(o5QtKDb  etkLWv^+ lB[c4nwSڙ2ާlV2Naލ endstream endobj 173 0 obj << /Type /Annot /Subtype /Link /Rect [ 234.00038 539.3667 309.50854 551.77136 ] /Border [ 0 0 0 ] /H /I /A 82 0 R /StructParent 5 >> endobj 174 0 obj << /Type /Annot /Subtype /Link /Rect [ 141.78 612.80554 278.47897 625.21021 ] /Border [ 0 0 0 ] /H /I /A 175 0 R /StructParent 25 >> endobj 175 0 obj << /S /URI /URI (aTgt}hgLhُ|R_}+𧬾w.`> endobj 176 0 obj << /Type /Annot /Subtype /Link /Rect [ 247.50038 625.16516 330.35486 637.56982 ] /Border [ 0 0 0 ] /H /I /A 177 0 R /StructParent 27 >> endobj 177 0 obj << /S /URI /URI (U2{Cԝ^-) >> endobj 178 0 obj << /Type /Annot /Subtype /Link /Rect [ 335.87988 588.80518 410.89264 601.20984 ] /Border [ 0 0 0 ] /H /I /A 179 0 R /StructParent 28 >> endobj 179 0 obj << /S /URI /URI (0>Ȓ6|n'u) >> endobj 180 0 obj << /Type /Annot /Subtype /Link /Rect [ 200.76111 370.88733 302.00177 383.29202 ] /Border [ 0 0 0 ] /H /I /A 181 0 R /StructParent 29 >> endobj 181 0 obj << /S /URI /URI (,kj:[ڴ8cY=#) >> endobj 182 0 obj << /Type /Annot /Subtype /Link /Rect [ 307.07996 654.28491 446.17291 666.66956 ] /Border [ 0 0 0 ] /H /I /A 183 0 R /StructParent 31 >> endobj 183 0 obj << /S /URI /URI (ދeF@Uvq9719`$1 =\rt) >> endobj 184 0 obj << /Count 32 /First 185 0 R /Last 186 0 R >> endobj 185 0 obj << /Title (2\)Օ\r) /Dest [ 78 0 R /XYZ 0 686 null ] /Parent 184 0 R /Next 192 0 R /First 216 0 R /Last 216 0 R /Count 1 >> endobj 186 0 obj << /Title (\\cGban!\)) /Dest [ 145 0 R /XYZ 0 686 null ] /Parent 184 0 R /Prev 187 0 R >> endobj 187 0 obj << /Title (Xjϊ) /Dest [ 141 0 R /XYZ 0 686 null ] /Parent 184 0 R /Prev 188 0 R /Next 186 0 R >> endobj 188 0 obj << /Title (JWpgTnߛ3) /Dest [ 138 0 R /XYZ 0 686 null ] /Parent 184 0 R /Prev 189 0 R /Next 187 0 R >> endobj 189 0 obj << /Title (VIGl>+) /Dest [ 135 0 R /XYZ 0 686 null ] /Parent 184 0 R /Prev 190 0 R /Next 188 0 R >> endobj 190 0 obj << /Title (@?\)f T둣Ɋ7< 0) /Dest [ 132 0 R /XYZ 0 686 null ] /Parent 184 0 R /Prev 191 0 R /Next 189 0 R >> endobj 191 0 obj << /Title (*vtɞk0I煂A`) /Dest [ 129 0 R /XYZ 0 686 null ] /Parent 184 0 R /Prev 192 0 R /Next 190 0 R >> endobj 192 0 obj << /Title (4p9r#f) /Dest [ 83 0 R /XYZ 0 686 null ] /Parent 184 0 R /Prev 185 0 R /Next 191 0 R /First 193 0 R /Last 194 0 R /Count 23 >> endobj 193 0 obj << /Title ( 봳8+FgaP) /Dest [ 83 0 R /XYZ 0 254 null ] /Parent 192 0 R /Next 206 0 R /First 213 0 R /Last 214 0 R /Count 3 >> endobj 194 0 obj << /Title (<zi`') /Dest [ 126 0 R /XYZ 0 553 null ] /Parent 192 0 R /Prev 195 0 R >> endobj 195 0 obj << /Title (D]') /Dest [ 126 0 R /XYZ 0 714 null ] /Parent 192 0 R /Prev 196 0 R /Next 194 0 R >> endobj 196 0 obj << /Title (jiUiORoecqD|`;7) /Dest [ 116 0 R /XYZ 0 443 null ] /Parent 192 0 R /Prev 197 0 R /Next 195 0 R /First 198 0 R /Last 199 0 R /Count 4 >> endobj 197 0 obj << /Title ( rh`IAL!0yoUy) /Dest [ 113 0 R /XYZ 0 714 null ] /Parent 192 0 R /Prev 202 0 R /Next 196 0 R /First 203 0 R /Last 204 0 R /Count 3 >> endobj 198 0 obj << /Title ({zNm4\)\)q &$M@o5nnE@i' 1U5> endobj 199 0 obj << /Title (q@<+x쵑\nm'5|NUFDQr) /Dest [ 119 0 R /XYZ 0 219 null ] /Parent 196 0 R /Prev 200 0 R >> endobj 200 0 obj << /Title (m-z1 g\)4[ќƷmK:!DzL") /Dest [ 119 0 R /XYZ 0 303 null ] /Parent 196 0 R /Prev 201 0 R /Next 199 0 R >> endobj 201 0 obj << /Title (Dh83=6\rcb.]Xww\n%n-) /Dest [ 119 0 R /XYZ 0 715 null ] /Parent 196 0 R /Prev 198 0 R /Next 200 0 R >> endobj 202 0 obj << /Title (sAtDhGJ.`x\() /Dest [ 101 0 R /XYZ 0 625 null ] /Parent 192 0 R /Prev 206 0 R /Next 197 0 R /First 207 0 R /Last 208 0 R /Count 3 >> endobj 203 0 obj << /Title (S=* UKŮ!,Ĵжg) /Dest [ 113 0 R /XYZ 0 543 null ] /Parent 197 0 R /Next 205 0 R >> endobj 204 0 obj << /Title (tRkS9m?Wdi[:JI6m,87f) /Dest [ 116 0 R /XYZ 0 559 null ] /Parent 197 0 R /Prev 205 0 R >> endobj 205 0 obj << /Title (-VքyԌI. B;z"QH) /Dest [ 113 0 R /XYZ 0 459 null ] /Parent 197 0 R /Prev 203 0 R /Next 204 0 R >> endobj 206 0 obj << /Title (t+V.cjC) /Dest [ 95 0 R /XYZ 0 366 null ] /Parent 192 0 R /Prev 193 0 R /Next 202 0 R /First 210 0 R /Last 211 0 R /Count 3 >> endobj 207 0 obj << /Title (> endobj 208 0 obj << /Title ( wN 7o#٬qO`Zn) /Dest [ 110 0 R /XYZ 0 504 null ] /Parent 202 0 R /Prev 209 0 R >> endobj 209 0 obj << /Title (9f0R[Nyҋkouk{3) /Dest [ 104 0 R /XYZ 0 643 null ] /Parent 202 0 R /Prev 207 0 R /Next 208 0 R >> endobj 210 0 obj << /Title (@ܲuKYg5+Q\(C@z;a) /Dest [ 98 0 R /XYZ 0 715 null ] /Parent 206 0 R /Next 212 0 R >> endobj 211 0 obj << /Title ( FR>Y0l9?6.H'BЩ) /Dest [ 101 0 R /XYZ 0 715 null ] /Parent 206 0 R /Prev 212 0 R >> endobj 212 0 obj << /Title (~k ŶZş> endobj 213 0 obj << /Title (Zǃ$z:r\) l{?) /Dest [ 86 0 R /XYZ 0 619 null ] /Parent 193 0 R /Next 215 0 R >> endobj 214 0 obj << /Title ("2 i\\& Ƹ>F\() /Dest [ 95 0 R /XYZ 0 715 null ] /Parent 193 0 R /Prev 215 0 R >> endobj 215 0 obj << /Title (r&/\\fYWѺ3JO) /Dest [ 86 0 R /XYZ 0 272 null ] /Parent 193 0 R /Prev 213 0 R /Next 214 0 R >> endobj 216 0 obj << /Title (016#ޟ ") /Dest [ 78 0 R /XYZ 0 438 null ] /Parent 185 0 R >> endobj 217 0 obj << /TextBox /Div /Frame /Div /Footnote /Note /Endnote /Note /Shape /Figure /InlineShape /Figure /TOA /TOC /TOAI /TOCI /TOF /TOC /TOFI /TOCI /Superscript /Span /Subscript /Span /Strikeout /Span /Underline /Span /DropCap /Figure /Copyright /P /Standard /P /Inhaltsverzeichnis#20#C3#9Cberschrift /P /Verzeichnis#201 /P /Verzeichnis#202 /P /Verzeichnis#203 /P /Textk#C3#B6rper /P /#C3#9Cberschrift#201 /P /Important#20Notice /P /#C3#9Cberschrift#202 /P /#C3#9Cberschrift#203 /P /API#20Function /P /API#20Description /P /API#20Method /P /API#20Attribute /P /Program#20Text /P /License#20Title /P /License#20Subtitle /P /License#20Text /P /License#20Section /P >> endobj 218 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 0 /P 799 0 R >> endobj 219 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 1 /P 799 0 R >> endobj 220 0 obj << /Copyright 221 0 R /Standard 254 0 R /Inhaltsverzeichnis#20#C3#9Cberschrift 261 0 R /Verzeichnis#201 263 0 R /Verzeichnis#202 267 0 R /Verzeichnis#203 277 0 R /Textk#C3#B6rper 362 0 R /#C3#9Cberschrift#201 365 0 R /Important#20Notice 371 0 R /#C3#9Cberschrift#202 373 0 R /#C3#9Cberschrift#203 394 0 R /API#20Function 397 0 R /API#20Description 399 0 R /API#20Method 409 0 R /API#20Attribute 421 0 R /Program#20Text 702 0 R /License#20Title 751 0 R /License#20Subtitle 753 0 R /License#20Text 754 0 R /License#20Section 759 0 R >> endobj 221 0 obj << /O /Layout /WritingMode /LrTb /StartIndent 0 /EndIndent 0 /TextAlign /Start /SpaceBefore 0 /SpaceAfter 0 /TextIndent 0 >> endobj 222 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 2 /P 799 0 R >> endobj 223 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 3 /P 799 0 R >> endobj 224 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 4 /P 799 0 R >> endobj 225 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 5 /P 799 0 R >> endobj 226 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 6 /P 799 0 R >> endobj 227 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 7 /P 799 0 R >> endobj 228 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 8 /P 799 0 R >> endobj 229 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 9 /P 799 0 R >> endobj 230 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 10 /P 799 0 R >> endobj 231 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 11 /P 799 0 R >> endobj 232 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 12 /P 799 0 R >> endobj 233 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 13 /P 799 0 R >> endobj 234 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 14 /P 799 0 R >> endobj 235 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 15 /P 799 0 R >> endobj 236 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 16 /P 799 0 R >> endobj 237 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 17 /P 799 0 R >> endobj 238 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 18 /P 799 0 R >> endobj 239 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 19 /P 799 0 R >> endobj 240 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 20 /P 799 0 R >> endobj 241 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 21 /P 799 0 R >> endobj 242 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 22 /P 799 0 R >> endobj 243 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 23 /P 799 0 R >> endobj 244 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 24 /P 799 0 R >> endobj 245 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 25 /P 799 0 R >> endobj 246 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 26 /P 799 0 R >> endobj 247 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 27 /P 799 0 R >> endobj 248 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 28 /P 799 0 R >> endobj 249 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 29 /P 799 0 R >> endobj 250 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 30 /P 799 0 R >> endobj 251 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 31 /P 799 0 R >> endobj 252 0 obj << /S /Standard /C /Standard /Pg 1 0 R /K 32 /P 799 0 R >> endobj 253 0 obj << /S /Standard /C /Standard /Pg 1 0 R /K 33 /P 799 0 R >> endobj 254 0 obj << /O /Layout /WritingMode /LrTb /StartIndent 0 /EndIndent 0 /TextAlign /Start /SpaceBefore 0 /SpaceAfter 0 /TextIndent 0 >> endobj 255 0 obj << /S /Standard /C /Standard /Pg 1 0 R /K 34 /P 799 0 R >> endobj 256 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 35 /P 799 0 R >> endobj 257 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 36 /P 799 0 R >> endobj 258 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 37 /P 799 0 R >> endobj 259 0 obj << /S /Inhaltsverzeichnis#20#C3#9Cberschrift /C /Inhaltsverzeichnis#20#C3#9Cberschrift /Pg 4 0 R /K 0 /P 800 0 R >> endobj 260 0 obj << /S /TOCI /C /Verzeichnis#201 /Pg 4 0 R /K [ 262 0 R 2 264 0 R 4 ] /P 802 0 R >> endobj 261 0 obj << /O /Layout /WritingMode /LrTb /StartIndent 0 /EndIndent 0 /TextAlign /Start /SpaceBefore 11.89999 /SpaceAfter 70.85001 /TextIndent 0 >> endobj 262 0 obj << /S /Underline /P 260 0 R /A 905 0 R /Pg 4 0 R /K 1 >> endobj 263 0 obj << /O /Layout /WritingMode /LrTb /StartIndent 0 /EndIndent 0 /TextAlign /Start /SpaceBefore 14.2 /SpaceAfter 0 /TextIndent 0 >> endobj 264 0 obj << /S /Underline /P 260 0 R /A 906 0 R /Pg 4 0 R /K 3 >> endobj 265 0 obj << /S /TOCI /C /Verzeichnis#202 /Pg 4 0 R /K [ 266 0 R 6 268 0 R 8 ] /P 802 0 R >> endobj 266 0 obj << /S /Underline /P 265 0 R /A 907 0 R /Pg 4 0 R /K 5 >> endobj 267 0 obj << /O /Layout /WritingMode /LrTb /StartIndent 28.35001 /EndIndent 0 /TextAlign /Start /SpaceBefore 6 /SpaceAfter 0 /TextIndent 0 >> endobj 268 0 obj << /S /Underline /P 265 0 R /A 908 0 R /Pg 4 0 R /K 7 >> endobj 269 0 obj << /S /TOCI /C /Verzeichnis#201 /Pg 4 0 R /K [ 270 0 R 10 271 0 R 12 ] /P 802 0 R >> endobj 270 0 obj << /S /Underline /P 269 0 R /A 909 0 R /Pg 4 0 R /K 9 >> endobj 271 0 obj << /S /Underline /P 269 0 R /A 910 0 R /Pg 4 0 R /K 11 >> endobj 272 0 obj << /S /TOCI /C /Verzeichnis#202 /Pg 4 0 R /K [ 273 0 R 14 274 0 R 16 ] /P 802 0 R >> endobj 273 0 obj << /S /Underline /P 272 0 R /A 911 0 R /Pg 4 0 R /K 13 >> endobj 274 0 obj << /S /Underline /P 272 0 R /A 912 0 R /Pg 4 0 R /K 15 >> endobj 275 0 obj << /S /TOCI /C /Verzeichnis#203 /Pg 4 0 R /K [ 276 0 R 18 278 0 R 20 ] /P 802 0 R >> endobj 276 0 obj << /S /Underline /P 275 0 R /A 913 0 R /Pg 4 0 R /K 17 >> endobj 277 0 obj << /O /Layout /WritingMode /LrTb /StartIndent 56.7 /EndIndent 0 /TextAlign /Start /SpaceBefore 6 /SpaceAfter 0 /TextIndent 0 >> endobj 278 0 obj << /S /Underline /P 275 0 R /A 914 0 R /Pg 4 0 R /K 19 >> endobj 279 0 obj << /S /TOCI /C /Verzeichnis#203 /Pg 4 0 R /K [ 280 0 R 22 281 0 R 24 ] /P 802 0 R >> endobj 280 0 obj << /S /Underline /P 279 0 R /A 915 0 R /Pg 4 0 R /K 21 >> endobj 281 0 obj << /S /Underline /P 279 0 R /A 916 0 R /Pg 4 0 R /K 23 >> endobj 282 0 obj << /S /TOCI /C /Verzeichnis#203 /Pg 4 0 R /K [ 283 0 R 26 284 0 R 28 ] /P 802 0 R >> endobj 283 0 obj << /S /Underline /P 282 0 R /A 917 0 R /Pg 4 0 R /K 25 >> endobj 284 0 obj << /S /Underline /P 282 0 R /A 918 0 R /Pg 4 0 R /K 27 >> endobj 285 0 obj << /S /TOCI /C /Verzeichnis#202 /Pg 4 0 R /K [ 286 0 R 30 287 0 R 32 ] /P 802 0 R >> endobj 286 0 obj << /S /Underline /P 285 0 R /A 919 0 R /Pg 4 0 R /K 29 >> endobj 287 0 obj << /S /Underline /P 285 0 R /A 920 0 R /Pg 4 0 R /K 31 >> endobj 288 0 obj << /S /TOCI /C /Verzeichnis#203 /Pg 4 0 R /K [ 289 0 R 34 290 0 R 36 ] /P 802 0 R >> endobj 289 0 obj << /S /Underline /P 288 0 R /A 921 0 R /Pg 4 0 R /K 33 >> endobj 290 0 obj << /S /Underline /P 288 0 R /A 922 0 R /Pg 4 0 R /K 35 >> endobj 291 0 obj << /S /TOCI /C /Verzeichnis#203 /Pg 4 0 R /K [ 292 0 R 38 293 0 R 40 ] /P 802 0 R >> endobj 292 0 obj << /S /Underline /P 291 0 R /A 923 0 R /Pg 4 0 R /K 37 >> endobj 293 0 obj << /S /Underline /P 291 0 R /A 924 0 R /Pg 4 0 R /K 39 >> endobj 294 0 obj << /S /TOCI /C /Verzeichnis#203 /Pg 4 0 R /K [ 295 0 R 42 296 0 R 44 ] /P 802 0 R >> endobj 295 0 obj << /S /Underline /P 294 0 R /A 925 0 R /Pg 4 0 R /K 41 >> endobj 296 0 obj << /S /Underline /P 294 0 R /A 926 0 R /Pg 4 0 R /K 43 >> endobj 297 0 obj << /S /TOCI /C /Verzeichnis#202 /Pg 4 0 R /K [ 298 0 R 46 299 0 R 48 ] /P 802 0 R >> endobj 298 0 obj << /S /Underline /P 297 0 R /A 927 0 R /Pg 4 0 R /K 45 >> endobj 299 0 obj << /S /Underline /P 297 0 R /A 928 0 R /Pg 4 0 R /K 47 >> endobj 300 0 obj << /S /TOCI /C /Verzeichnis#203 /Pg 4 0 R /K [ 301 0 R 50 302 0 R 52 ] /P 802 0 R >> endobj 301 0 obj << /S /Underline /P 300 0 R /A 929 0 R /Pg 4 0 R /K 49 >> endobj 302 0 obj << /S /Underline /P 300 0 R /A 930 0 R /Pg 4 0 R /K 51 >> endobj 303 0 obj << /S /TOCI /C /Verzeichnis#203 /Pg 4 0 R /K [ 304 0 R 54 305 0 R 56 ] /P 802 0 R >> endobj 304 0 obj << /S /Underline /P 303 0 R /A 931 0 R /Pg 4 0 R /K 53 >> endobj 305 0 obj << /S /Underline /P 303 0 R /A 932 0 R /Pg 4 0 R /K 55 >> endobj 306 0 obj << /S /TOCI /C /Verzeichnis#203 /Pg 4 0 R /K [ 307 0 R 58 308 0 R 60 ] /P 802 0 R >> endobj 307 0 obj << /S /Underline /P 306 0 R /A 933 0 R /Pg 4 0 R /K 57 >> endobj 308 0 obj << /S /Underline /P 306 0 R /A 934 0 R /Pg 4 0 R /K 59 >> endobj 309 0 obj << /S /TOCI /C /Verzeichnis#202 /Pg 4 0 R /K [ 310 0 R 62 311 0 R 64 ] /P 802 0 R >> endobj 310 0 obj << /S /Underline /P 309 0 R /A 935 0 R /Pg 4 0 R /K 61 >> endobj 311 0 obj << /S /Underline /P 309 0 R /A 936 0 R /Pg 4 0 R /K 63 >> endobj 312 0 obj << /S /TOCI /C /Verzeichnis#203 /Pg 4 0 R /K [ 313 0 R 66 314 0 R 68 ] /P 802 0 R >> endobj 313 0 obj << /S /Underline /P 312 0 R /A 937 0 R /Pg 4 0 R /K 65 >> endobj 314 0 obj << /S /Underline /P 312 0 R /A 938 0 R /Pg 4 0 R /K 67 >> endobj 315 0 obj << /S /TOCI /C /Verzeichnis#203 /Pg 4 0 R /K [ 316 0 R 70 317 0 R 72 ] /P 802 0 R >> endobj 316 0 obj << /S /Underline /P 315 0 R /A 939 0 R /Pg 4 0 R /K 69 >> endobj 317 0 obj << /S /Underline /P 315 0 R /A 940 0 R /Pg 4 0 R /K 71 >> endobj 318 0 obj << /S /TOCI /C /Verzeichnis#203 /Pg 4 0 R /K [ 319 0 R 74 320 0 R 76 ] /P 802 0 R >> endobj 319 0 obj << /S /Underline /P 318 0 R /A 941 0 R /Pg 4 0 R /K 73 >> endobj 320 0 obj << /S /Underline /P 318 0 R /A 942 0 R /Pg 4 0 R /K 75 >> endobj 321 0 obj << /S /TOCI /C /Verzeichnis#202 /Pg 4 0 R /K [ 322 0 R 78 323 0 R 80 ] /P 802 0 R >> endobj 322 0 obj << /S /Underline /P 321 0 R /A 943 0 R /Pg 4 0 R /K 77 >> endobj 323 0 obj << /S /Underline /P 321 0 R /A 944 0 R /Pg 4 0 R /K 79 >> endobj 324 0 obj << /S /TOCI /C /Verzeichnis#203 /Pg 4 0 R /K [ 325 0 R 82 326 0 R 84 ] /P 802 0 R >> endobj 325 0 obj << /S /Underline /P 324 0 R /A 945 0 R /Pg 4 0 R /K 81 >> endobj 326 0 obj << /S /Underline /P 324 0 R /A 946 0 R /Pg 4 0 R /K 83 >> endobj 327 0 obj << /S /TOCI /C /Verzeichnis#203 /Pg 4 0 R /K [ 328 0 R 86 329 0 R 88 ] /P 802 0 R >> endobj 328 0 obj << /S /Underline /P 327 0 R /A 947 0 R /Pg 4 0 R /K 85 >> endobj 329 0 obj << /S /Underline /P 327 0 R /A 948 0 R /Pg 4 0 R /K 87 >> endobj 330 0 obj << /S /TOCI /C /Verzeichnis#203 /Pg 4 0 R /K [ 331 0 R 90 332 0 R 92 ] /P 802 0 R >> endobj 331 0 obj << /S /Underline /P 330 0 R /A 949 0 R /Pg 4 0 R /K 89 >> endobj 332 0 obj << /S /Underline /P 330 0 R /A 950 0 R /Pg 4 0 R /K 91 >> endobj 333 0 obj << /S /TOCI /C /Verzeichnis#203 /Pg 4 0 R /K [ 334 0 R 94 335 0 R 96 ] /P 802 0 R >> endobj 334 0 obj << /S /Underline /P 333 0 R /A 951 0 R /Pg 4 0 R /K 93 >> endobj 335 0 obj << /S /Underline /P 333 0 R /A 952 0 R /Pg 4 0 R /K 95 >> endobj 336 0 obj << /S /TOCI /C /Verzeichnis#202 /Pg 58 0 R /K [ 337 0 R 1 338 0 R 3 ] /P 802 0 R >> endobj 337 0 obj << /S /Underline /P 336 0 R /A 953 0 R /Pg 58 0 R /K 0 >> endobj 338 0 obj << /S /Underline /P 336 0 R /A 955 0 R /Pg 58 0 R /K 2 >> endobj 339 0 obj << /S /TOCI /C /Verzeichnis#202 /Pg 58 0 R /K [ 340 0 R 5 341 0 R 7 ] /P 802 0 R >> endobj 340 0 obj << /S /Underline /P 339 0 R /A 956 0 R /Pg 58 0 R /K 4 >> endobj 341 0 obj << /S /Underline /P 339 0 R /A 957 0 R /Pg 58 0 R /K 6 >> endobj 342 0 obj << /S /TOCI /C /Verzeichnis#201 /Pg 58 0 R /K [ 343 0 R 9 344 0 R 11 ] /P 802 0 R >> endobj 343 0 obj << /S /Underline /P 342 0 R /A 958 0 R /Pg 58 0 R /K 8 >> endobj 344 0 obj << /S /Underline /P 342 0 R /A 959 0 R /Pg 58 0 R /K 10 >> endobj 345 0 obj << /S /TOCI /C /Verzeichnis#201 /Pg 58 0 R /K [ 346 0 R 13 347 0 R 15 ] /P 802 0 R >> endobj 346 0 obj << /S /Underline /P 345 0 R /A 960 0 R /Pg 58 0 R /K 12 >> endobj 347 0 obj << /S /Underline /P 345 0 R /A 961 0 R /Pg 58 0 R /K 14 >> endobj 348 0 obj << /S /TOCI /C /Verzeichnis#201 /Pg 58 0 R /K [ 349 0 R 17 350 0 R 19 ] /P 802 0 R >> endobj 349 0 obj << /S /Underline /P 348 0 R /A 962 0 R /Pg 58 0 R /K 16 >> endobj 350 0 obj << /S /Underline /P 348 0 R /A 963 0 R /Pg 58 0 R /K 18 >> endobj 351 0 obj << /S /TOCI /C /Verzeichnis#201 /Pg 58 0 R /K [ 352 0 R 21 353 0 R 23 ] /P 802 0 R >> endobj 352 0 obj << /S /Underline /P 351 0 R /A 964 0 R /Pg 58 0 R /K 20 >> endobj 353 0 obj << /S /Underline /P 351 0 R /A 965 0 R /Pg 58 0 R /K 22 >> endobj 354 0 obj << /S /TOCI /C /Verzeichnis#201 /Pg 58 0 R /K [ 355 0 R 25 356 0 R 27 ] /P 802 0 R >> endobj 355 0 obj << /S /Underline /P 354 0 R /A 966 0 R /Pg 58 0 R /K 24 >> endobj 356 0 obj << /S /Underline /P 354 0 R /A 967 0 R /Pg 58 0 R /K 26 >> endobj 357 0 obj << /S /TOCI /C /Verzeichnis#201 /Pg 58 0 R /K [ 358 0 R 29 359 0 R 31 ] /P 802 0 R >> endobj 358 0 obj << /S /Underline /P 357 0 R /A 968 0 R /Pg 58 0 R /K 28 >> endobj 359 0 obj << /S /Underline /P 357 0 R /A 969 0 R /Pg 58 0 R /K 30 >> endobj 360 0 obj << /S /TOCI /C /Textk#C3#B6rper /Pg 58 0 R /K 32 /P 802 0 R >> endobj 361 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 58 0 R /K 33 /P 800 0 R >> endobj 362 0 obj << /O /Layout /WritingMode /LrTb /StartIndent 42.55 /EndIndent 0 /TextAlign /Justify /SpaceBefore 5.64999 /SpaceAfter 5.95 /TextIndent 0 >> endobj 363 0 obj << /S /LBody /C /#C3#9Cberschrift#201 /Pg 78 0 R /K 0 /P 804 0 R >> endobj 364 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 78 0 R /K 1 /P 801 0 R >> endobj 365 0 obj << /O /Layout /WritingMode /LrTb /StartIndent 42.55 /EndIndent 0 /TextAlign /Start /SpaceBefore 28.35001 /SpaceAfter 8.5 /TextIndent -42.54999 >> endobj 366 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 78 0 R /K [ 2 367 0 R 4 ] /P 801 0 R >> endobj 367 0 obj << /S /Link /P 366 0 R /K [ 368 0 R << /Type /OBJR /Pg 78 0 R /Obj 173 0 R >> ] >> endobj 368 0 obj << /S /Underline /P 367 0 R /A 971 0 R /Pg 78 0 R /K 3 >> endobj 369 0 obj << /S /Important#20Notice /C /Important#20Notice /Pg 78 0 R /K [ 5 6 7 8 ] /P 801 0 R >> endobj 370 0 obj << /S /LBody /C /#C3#9Cberschrift#202 /Pg 78 0 R /K 9 /P 806 0 R >> endobj 371 0 obj << /O /Layout /WritingMode /LrTb /StartIndent 51.05 /EndIndent 0 /TextAlign /Justify /SpaceBefore 5.64999 /SpaceAfter 5.95 /TextIndent 0 >> endobj 372 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 78 0 R /K 10 /P 801 0 R >> endobj 373 0 obj << /O /Layout /WritingMode /LrTb /StartIndent 42.55 /EndIndent 0 /TextAlign /Start /SpaceBefore 34 /SpaceAfter 14.14999 /TextIndent -42.54999 >> endobj 374 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 78 0 R /K 11 /P 801 0 R >> endobj 375 0 obj << /S /Important#20Notice /C /Important#20Notice /Pg 78 0 R /K [ 12 13 14 15 ] /P 801 0 R >> endobj 376 0 obj << /S /LBody /C /#C3#9Cberschrift#201 /Pg 83 0 R /K 0 /P 808 0 R >> endobj 377 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 83 0 R /K 1 /P 801 0 R >> endobj 378 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 83 0 R /K 2 /P 801 0 R >> endobj 379 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 83 0 R /K 3 /P 801 0 R >> endobj 380 0 obj << /S /LBody /A [ 381 0 R ] /C /Textk#C3#B6rper /Pg 83 0 R /K 4 /P 810 0 R >> endobj 381 0 obj << /O /Layout /StartIndent 78.55 /TextIndent -17.99998 >> endobj 382 0 obj << /S /LBody /A [ 383 0 R ] /C /Textk#C3#B6rper /Pg 83 0 R /K 5 /P 811 0 R >> endobj 383 0 obj << /O /Layout /StartIndent 78.55 /TextIndent -17.99998 >> endobj 384 0 obj << /S /LBody /A [ 385 0 R ] /C /Textk#C3#B6rper /Pg 83 0 R /K 6 /P 812 0 R >> endobj 385 0 obj << /O /Layout /StartIndent 78.55 /TextIndent -17.99998 >> endobj 386 0 obj << /S /LBody /A [ 387 0 R ] /C /#C3#9Cberschrift#202 /Pg 83 0 R /K 7 /P 814 0 R >> endobj 387 0 obj << /O /Layout /StartIndent 36 /TextAlign /Justify >> endobj 388 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 83 0 R /K 8 /P 801 0 R >> endobj 389 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 83 0 R /K 9 /P 801 0 R >> endobj 390 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 86 0 R /K 0 /P 801 0 R >> endobj 391 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 86 0 R /K 1 /P 801 0 R >> endobj 392 0 obj << /S /LBody /C /#C3#9Cberschrift#203 /Pg 86 0 R /K 2 /P 816 0 R >> endobj 393 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 86 0 R /K 3 /P 801 0 R >> endobj 394 0 obj << /O /Layout /WritingMode /LrTb /StartIndent 42.55 /EndIndent 0 /TextAlign /Start /SpaceBefore 28.35001 /SpaceAfter 5.64999 /TextIndent -42.54999 >> endobj 395 0 obj << /S /API#20Function /C /API#20Function /Pg 86 0 R /K 4 /P 801 0 R >> endobj 396 0 obj << /S /API#20Description /C /API#20Description /Pg 86 0 R /K 5 /P 801 0 R >> endobj 397 0 obj << /O /Layout /WritingMode /LrTb /StartIndent 56.75 /EndIndent 0 /TextAlign /Start /SpaceBefore 5.64999 /SpaceAfter 5.95 /TextIndent -14.19998 >> endobj 398 0 obj << /S /API#20Description /C /API#20Description /Pg 86 0 R /K 6 /P 801 0 R >> endobj 399 0 obj << /O /Layout /WritingMode /LrTb /StartIndent 56.7 /EndIndent 0 /TextAlign /Start /SpaceBefore 0 /SpaceAfter 5.95 /TextIndent 0 >> endobj 400 0 obj << /S /API#20Description /C /API#20Description /Pg 86 0 R /K 7 /P 801 0 R >> endobj 401 0 obj << /S /API#20Description /C /API#20Description /Pg 86 0 R /K 8 /P 801 0 R >> endobj 402 0 obj << /S /API#20Description /C /API#20Description /Pg 86 0 R /K 9 /P 801 0 R >> endobj 403 0 obj << /S /API#20Description /C /API#20Description /Pg 86 0 R /K 10 /P 801 0 R >> endobj 404 0 obj << /S /LBody /A [ 405 0 R ] /C /#C3#9Cberschrift#203 /Pg 86 0 R /K 11 /P 818 0 R >> endobj 405 0 obj << /O /Layout /StartIndent 36 >> endobj 406 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 86 0 R /K 12 /P 801 0 R >> endobj 407 0 obj << /S /API#20Method /C /API#20Method /Pg 86 0 R /K 13 /P 801 0 R >> endobj 408 0 obj << /S /API#20Description /C /API#20Description /Pg 86 0 R /K 14 /P 801 0 R >> endobj 409 0 obj << /O /Layout /WritingMode /LrTb /StartIndent 56.75 /EndIndent 0 /TextAlign /Start /SpaceBefore 5.64999 /SpaceAfter 5.95 /TextIndent -14.19998 >> endobj 410 0 obj << /S /API#20Method /C /API#20Method /Pg 86 0 R /K 15 /P 801 0 R >> endobj 411 0 obj << /S /API#20Description /C /API#20Description /Pg 86 0 R /K 16 /P 801 0 R >> endobj 412 0 obj << /S /API#20Description /C /API#20Description /Pg 86 0 R /K 17 /P 801 0 R >> endobj 413 0 obj << /S /API#20Method /C /API#20Method /Pg 89 0 R /K 0 /P 801 0 R >> endobj 414 0 obj << /S /API#20Description /C /API#20Description /Pg 89 0 R /K 1 /P 801 0 R >> endobj 415 0 obj << /S /API#20Method /C /API#20Method /Pg 89 0 R /K 2 /P 801 0 R >> endobj 416 0 obj << /S /API#20Description /C /API#20Description /Pg 89 0 R /K 3 /P 801 0 R >> endobj 417 0 obj << /S /API#20Method /C /API#20Method /Pg 89 0 R /K 4 /P 801 0 R >> endobj 418 0 obj << /S /API#20Description /C /API#20Description /Pg 89 0 R /K 5 /P 801 0 R >> endobj 419 0 obj << /S /API#20Attribute /C /API#20Attribute /Pg 89 0 R /K 6 /P 801 0 R >> endobj 420 0 obj << /S /API#20Description /C /API#20Description /Pg 89 0 R /K 7 /P 801 0 R >> endobj 421 0 obj << /O /Layout /WritingMode /LrTb /StartIndent 56.75 /EndIndent 0 /TextAlign /Start /SpaceBefore 5.64999 /SpaceAfter 5.95 /TextIndent -14.19998 >> endobj 422 0 obj << /S /API#20Description /C /API#20Description /Pg 89 0 R /K 8 /P 801 0 R >> endobj 423 0 obj << /S /API#20Method /C /API#20Method /Pg 89 0 R /K 9 /P 801 0 R >> endobj 424 0 obj << /S /API#20Description /C /API#20Description /Pg 89 0 R /K 10 /P 801 0 R >> endobj 425 0 obj << /S /API#20Description /C /API#20Description /Pg 89 0 R /K 11 /P 801 0 R >> endobj 426 0 obj << /S /API#20Method /C /API#20Method /Pg 89 0 R /K 12 /P 801 0 R >> endobj 427 0 obj << /S /API#20Description /C /API#20Description /Pg 89 0 R /K 13 /P 801 0 R >> endobj 428 0 obj << /S /API#20Description /C /API#20Description /Pg 89 0 R /K 14 /P 801 0 R >> endobj 429 0 obj << /S /API#20Description /C /API#20Description /Pg 89 0 R /K 15 /P 801 0 R >> endobj 430 0 obj << /S /API#20Description /C /API#20Description /Pg 89 0 R /K 16 /P 801 0 R >> endobj 431 0 obj << /S /API#20Method /C /API#20Method /Pg 89 0 R /K 17 /P 801 0 R >> endobj 432 0 obj << /S /API#20Description /C /API#20Description /Pg 89 0 R /K 18 /P 801 0 R >> endobj 433 0 obj << /S /API#20Description /C /API#20Description /Pg 89 0 R /K 19 /P 801 0 R >> endobj 434 0 obj << /S /API#20Method /C /API#20Method /Pg 89 0 R /K 20 /P 801 0 R >> endobj 435 0 obj << /S /API#20Description /C /API#20Description /Pg 89 0 R /K 21 /P 801 0 R >> endobj 436 0 obj << /S /API#20Description /C /API#20Description /Pg 89 0 R /K 22 /P 801 0 R >> endobj 437 0 obj << /S /API#20Description /C /API#20Description /Pg 89 0 R /K 23 /P 801 0 R >> endobj 438 0 obj << /S /API#20Method /C /API#20Method /Pg 89 0 R /K 24 /P 801 0 R >> endobj 439 0 obj << /S /API#20Description /C /API#20Description /Pg 89 0 R /K 25 /P 801 0 R >> endobj 440 0 obj << /S /API#20Method /C /API#20Method /Pg 92 0 R /K 0 /P 801 0 R >> endobj 441 0 obj << /S /API#20Description /C /API#20Description /Pg 92 0 R /K 1 /P 801 0 R >> endobj 442 0 obj << /S /API#20Description /C /API#20Description /Pg 92 0 R /K 2 /P 801 0 R >> endobj 443 0 obj << /S /API#20Description /C /API#20Description /Pg 92 0 R /K 3 /P 801 0 R >> endobj 444 0 obj << /S /API#20Method /C /API#20Method /Pg 92 0 R /K 4 /P 801 0 R >> endobj 445 0 obj << /S /API#20Description /C /API#20Description /Pg 92 0 R /K 5 /P 801 0 R >> endobj 446 0 obj << /S /API#20Description /C /API#20Description /Pg 92 0 R /K 6 /P 801 0 R >> endobj 447 0 obj << /S /API#20Description /C /API#20Description /Pg 92 0 R /K 7 /P 801 0 R >> endobj 448 0 obj << /S /API#20Method /C /API#20Method /Pg 92 0 R /K 8 /P 801 0 R >> endobj 449 0 obj << /S /API#20Description /C /API#20Description /Pg 92 0 R /K 9 /P 801 0 R >> endobj 450 0 obj << /S /API#20Description /C /API#20Description /Pg 92 0 R /K 10 /P 801 0 R >> endobj 451 0 obj << /S /API#20Description /C /API#20Description /Pg 92 0 R /K 11 /P 801 0 R >> endobj 452 0 obj << /S /API#20Attribute /C /API#20Attribute /Pg 92 0 R /K 12 /P 801 0 R >> endobj 453 0 obj << /S /API#20Description /C /API#20Description /Pg 92 0 R /K 13 /P 801 0 R >> endobj 454 0 obj << /S /API#20Description /C /API#20Description /Pg 92 0 R /K 14 /P 801 0 R >> endobj 455 0 obj << /S /API#20Description /C /API#20Description /Pg 92 0 R /K 15 /P 801 0 R >> endobj 456 0 obj << /S /API#20Method /C /API#20Method /Pg 92 0 R /K 16 /P 801 0 R >> endobj 457 0 obj << /S /API#20Description /C /API#20Description /Pg 92 0 R /K 17 /P 801 0 R >> endobj 458 0 obj << /S /API#20Description /C /API#20Description /Pg 92 0 R /K 18 /P 801 0 R >> endobj 459 0 obj << /S /API#20Method /C /API#20Method /Pg 92 0 R /K 19 /P 801 0 R >> endobj 460 0 obj << /S /API#20Description /C /API#20Description /Pg 92 0 R /K 20 /P 801 0 R >> endobj 461 0 obj << /S /API#20Description /C /API#20Description /Pg 92 0 R /K 21 /P 801 0 R >> endobj 462 0 obj << /S /API#20Method /C /API#20Method /Pg 92 0 R /K 22 /P 801 0 R >> endobj 463 0 obj << /S /API#20Description /C /API#20Description /Pg 92 0 R /K 23 /P 801 0 R >> endobj 464 0 obj << /S /API#20Description /C /API#20Description /Pg 92 0 R /K 24 /P 801 0 R >> endobj 465 0 obj << /S /LBody /A [ 466 0 R ] /C /#C3#9Cberschrift#203 /Pg 95 0 R /K 0 /P 820 0 R >> endobj 466 0 obj << /O /Layout /StartIndent 36 >> endobj 467 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 95 0 R /K 1 /P 801 0 R >> endobj 468 0 obj << /S /API#20Attribute /C /API#20Attribute /Pg 95 0 R /K 2 /P 801 0 R >> endobj 469 0 obj << /S /API#20Description /C /API#20Description /Pg 95 0 R /K 3 /P 801 0 R >> endobj 470 0 obj << /S /API#20Attribute /C /API#20Attribute /Pg 95 0 R /K 4 /P 801 0 R >> endobj 471 0 obj << /S /API#20Description /C /API#20Description /Pg 95 0 R /K 5 /P 801 0 R >> endobj 472 0 obj << /S /API#20Attribute /C /API#20Attribute /Pg 95 0 R /K 6 /P 801 0 R >> endobj 473 0 obj << /S /API#20Description /C /API#20Description /Pg 95 0 R /K 7 /P 801 0 R >> endobj 474 0 obj << /S /API#20Attribute /C /API#20Attribute /Pg 95 0 R /K 8 /P 801 0 R >> endobj 475 0 obj << /S /API#20Description /C /API#20Description /Pg 95 0 R /K 9 /P 801 0 R >> endobj 476 0 obj << /S /API#20Attribute /C /API#20Attribute /Pg 95 0 R /K 10 /P 801 0 R >> endobj 477 0 obj << /S /API#20Description /C /API#20Description /Pg 95 0 R /K 11 /P 801 0 R >> endobj 478 0 obj << /S /API#20Attribute /C /API#20Attribute /Pg 95 0 R /K 12 /P 801 0 R >> endobj 479 0 obj << /S /API#20Description /C /API#20Description /Pg 95 0 R /K 13 /P 801 0 R >> endobj 480 0 obj << /S /LBody /A [ 481 0 R ] /C /#C3#9Cberschrift#202 /Pg 95 0 R /K 14 /P 822 0 R >> endobj 481 0 obj << /O /Layout /StartIndent 36 >> endobj 482 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 95 0 R /K 15 /P 801 0 R >> endobj 483 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 95 0 R /K 16 /P 801 0 R >> endobj 484 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 95 0 R /K 17 /P 801 0 R >> endobj 485 0 obj << /S /LBody /C /#C3#9Cberschrift#203 /Pg 98 0 R /K 0 /P 824 0 R >> endobj 486 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 98 0 R /K 1 /P 801 0 R >> endobj 487 0 obj << /S /LBody /C /#C3#9Cberschrift#203 /Pg 98 0 R /K 2 /P 826 0 R >> endobj 488 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 98 0 R /K 3 /P 801 0 R >> endobj 489 0 obj << /S /API#20Method /C /API#20Method /Pg 98 0 R /K 4 /P 801 0 R >> endobj 490 0 obj << /S /API#20Description /C /API#20Description /Pg 98 0 R /K 5 /P 801 0 R >> endobj 491 0 obj << /S /API#20Description /C /API#20Description /Pg 98 0 R /K 6 /P 801 0 R >> endobj 492 0 obj << /S /API#20Method /C /API#20Method /Pg 98 0 R /K 7 /P 801 0 R >> endobj 493 0 obj << /S /API#20Description /C /API#20Description /Pg 98 0 R /K 8 /P 801 0 R >> endobj 494 0 obj << /S /API#20Description /C /API#20Description /Pg 98 0 R /K 9 /P 801 0 R >> endobj 495 0 obj << /S /API#20Method /C /API#20Method /Pg 98 0 R /K 10 /P 801 0 R >> endobj 496 0 obj << /S /API#20Description /C /API#20Description /Pg 98 0 R /K 11 /P 801 0 R >> endobj 497 0 obj << /S /API#20Description /C /API#20Description /Pg 98 0 R /K 12 /P 801 0 R >> endobj 498 0 obj << /S /API#20Method /C /API#20Method /Pg 98 0 R /K 13 /P 801 0 R >> endobj 499 0 obj << /S /API#20Description /C /API#20Description /Pg 98 0 R /K 14 /P 801 0 R >> endobj 500 0 obj << /S /API#20Attribute /C /API#20Attribute /Pg 98 0 R /K 15 /P 801 0 R >> endobj 501 0 obj << /S /API#20Description /C /API#20Description /Pg 98 0 R /K 16 /P 801 0 R >> endobj 502 0 obj << /S /API#20Attribute /C /API#20Attribute /Pg 98 0 R /K 17 /P 801 0 R >> endobj 503 0 obj << /S /API#20Description /C /API#20Description /Pg 98 0 R /K 18 /P 801 0 R >> endobj 504 0 obj << /S /API#20Attribute /C /API#20Attribute /Pg 98 0 R /K 19 /P 801 0 R >> endobj 505 0 obj << /S /API#20Description /C /API#20Description /Pg 98 0 R /K 20 /P 801 0 R >> endobj 506 0 obj << /S /API#20Method /C /API#20Method /Pg 98 0 R /K 21 /P 801 0 R >> endobj 507 0 obj << /S /API#20Description /C /API#20Description /Pg 98 0 R /K 22 /P 801 0 R >> endobj 508 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 98 0 R /K 23 /P 801 0 R >> endobj 509 0 obj << /S /LBody /A [ 510 0 R ] /C /#C3#9Cberschrift#203 /Pg 101 0 R /K 0 /P 828 0 R >> endobj 510 0 obj << /O /Layout /StartIndent 36 >> endobj 511 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 101 0 R /K 1 /P 801 0 R >> endobj 512 0 obj << /S /LBody /A [ 513 0 R ] /C /#C3#9Cberschrift#202 /Pg 101 0 R /K 2 /P 830 0 R >> endobj 513 0 obj << /O /Layout /StartIndent 36 >> endobj 514 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 101 0 R /K 3 /P 801 0 R >> endobj 515 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 101 0 R /K 4 /P 801 0 R >> endobj 516 0 obj << /S /LBody /C /#C3#9Cberschrift#203 /Pg 101 0 R /K 5 /P 832 0 R >> endobj 517 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 101 0 R /K 6 /P 801 0 R >> endobj 518 0 obj << /S /API#20Function /C /API#20Function /Pg 101 0 R /K 7 /P 801 0 R >> endobj 519 0 obj << /S /API#20Description /C /API#20Description /Pg 101 0 R /K 8 /P 801 0 R >> endobj 520 0 obj << /S /API#20Description /C /API#20Description /Pg 101 0 R /K 9 /P 801 0 R >> endobj 521 0 obj << /S /API#20Description /C /API#20Description /Pg 101 0 R /K 10 /P 801 0 R >> endobj 522 0 obj << /S /API#20Description /C /API#20Description /Pg 101 0 R /K 11 /P 801 0 R >> endobj 523 0 obj << /S /API#20Description /C /API#20Description /Pg 101 0 R /K 12 /P 801 0 R >> endobj 524 0 obj << /S /API#20Description /C /API#20Description /Pg 101 0 R /K 13 /P 801 0 R >> endobj 525 0 obj << /S /API#20Description /C /API#20Description /Pg 104 0 R /K 0 /P 801 0 R >> endobj 526 0 obj << /S /LBody /A [ 527 0 R ] /C /#C3#9Cberschrift#203 /Pg 104 0 R /K 1 /P 834 0 R >> endobj 527 0 obj << /O /Layout /StartIndent 36 >> endobj 528 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 104 0 R /K 2 /P 801 0 R >> endobj 529 0 obj << /S /API#20Method /C /API#20Method /Pg 104 0 R /K 3 /P 801 0 R >> endobj 530 0 obj << /S /API#20Description /C /API#20Description /Pg 104 0 R /K 4 /P 801 0 R >> endobj 531 0 obj << /S /API#20Method /C /API#20Method /Pg 104 0 R /K 5 /P 801 0 R >> endobj 532 0 obj << /S /API#20Description /C /API#20Description /Pg 104 0 R /K 6 /P 801 0 R >> endobj 533 0 obj << /S /API#20Method /C /API#20Method /Pg 104 0 R /K 7 /P 801 0 R >> endobj 534 0 obj << /S /API#20Description /C /API#20Description /Pg 104 0 R /K 8 /P 801 0 R >> endobj 535 0 obj << /S /API#20Attribute /C /API#20Attribute /Pg 104 0 R /K 9 /P 801 0 R >> endobj 536 0 obj << /S /API#20Description /C /API#20Description /Pg 104 0 R /K 10 /P 801 0 R >> endobj 537 0 obj << /S /API#20Description /C /API#20Description /Pg 104 0 R /K 11 /P 801 0 R >> endobj 538 0 obj << /S /API#20Method /C /API#20Method /Pg 104 0 R /K 12 /P 801 0 R >> endobj 539 0 obj << /S /API#20Description /C /API#20Description /Pg 104 0 R /K 13 /P 801 0 R >> endobj 540 0 obj << /S /API#20Description /C /API#20Description /Pg 104 0 R /K 14 /P 801 0 R >> endobj 541 0 obj << /S /API#20Method /C /API#20Method /Pg 104 0 R /K 15 /P 801 0 R >> endobj 542 0 obj << /S /API#20Description /C /API#20Description /Pg 104 0 R /K 16 /P 801 0 R >> endobj 543 0 obj << /S /API#20Description /C /API#20Description /Pg 104 0 R /K 17 /P 801 0 R >> endobj 544 0 obj << /S /API#20Description /C /API#20Description /Pg 104 0 R /K 18 /P 801 0 R >> endobj 545 0 obj << /S /API#20Description /C /API#20Description /Pg 104 0 R /K 19 /P 801 0 R >> endobj 546 0 obj << /S /API#20Method /C /API#20Method /Pg 104 0 R /K 20 /P 801 0 R >> endobj 547 0 obj << /S /API#20Description /C /API#20Description /Pg 104 0 R /K 21 /P 801 0 R >> endobj 548 0 obj << /S /API#20Description /C /API#20Description /Pg 104 0 R /K 22 /P 801 0 R >> endobj 549 0 obj << /S /API#20Method /C /API#20Method /Pg 107 0 R /K 0 /P 801 0 R >> endobj 550 0 obj << /S /API#20Description /C /API#20Description /Pg 107 0 R /K 1 /P 801 0 R >> endobj 551 0 obj << /S /API#20Description /C /API#20Description /Pg 107 0 R /K 2 /P 801 0 R >> endobj 552 0 obj << /S /API#20Description /C /API#20Description /Pg 107 0 R /K 3 /P 801 0 R >> endobj 553 0 obj << /S /API#20Method /C /API#20Method /Pg 107 0 R /K 4 /P 801 0 R >> endobj 554 0 obj << /S /API#20Description /C /API#20Description /Pg 107 0 R /K 5 /P 801 0 R >> endobj 555 0 obj << /S /API#20Method /C /API#20Method /Pg 107 0 R /K 6 /P 801 0 R >> endobj 556 0 obj << /S /API#20Description /C /API#20Description /Pg 107 0 R /K 7 /P 801 0 R >> endobj 557 0 obj << /S /API#20Description /C /API#20Description /Pg 107 0 R /K 8 /P 801 0 R >> endobj 558 0 obj << /S /API#20Description /C /API#20Description /Pg 107 0 R /K 9 /P 801 0 R >> endobj 559 0 obj << /S /API#20Method /C /API#20Method /Pg 107 0 R /K 10 /P 801 0 R >> endobj 560 0 obj << /S /API#20Description /C /API#20Description /Pg 107 0 R /K 11 /P 801 0 R >> endobj 561 0 obj << /S /API#20Description /C /API#20Description /Pg 107 0 R /K 12 /P 801 0 R >> endobj 562 0 obj << /S /API#20Description /C /API#20Description /Pg 107 0 R /K 13 /P 801 0 R >> endobj 563 0 obj << /S /API#20Method /C /API#20Method /Pg 107 0 R /K 14 /P 801 0 R >> endobj 564 0 obj << /S /API#20Description /C /API#20Description /Pg 107 0 R /K 15 /P 801 0 R >> endobj 565 0 obj << /S /API#20Description /C /API#20Description /Pg 107 0 R /K 16 /P 801 0 R >> endobj 566 0 obj << /S /API#20Description /C /API#20Description /Pg 107 0 R /K 17 /P 801 0 R >> endobj 567 0 obj << /S /API#20Attribute /C /API#20Attribute /Pg 107 0 R /K 18 /P 801 0 R >> endobj 568 0 obj << /S /API#20Description /C /API#20Description /Pg 107 0 R /K 19 /P 801 0 R >> endobj 569 0 obj << /S /API#20Description /C /API#20Description /Pg 107 0 R /K 20 /P 801 0 R >> endobj 570 0 obj << /S /API#20Description /C /API#20Description /Pg 107 0 R /K 21 /P 801 0 R >> endobj 571 0 obj << /S /API#20Method /C /API#20Method /Pg 107 0 R /K 22 /P 801 0 R >> endobj 572 0 obj << /S /API#20Description /C /API#20Description /Pg 107 0 R /K 23 /P 801 0 R >> endobj 573 0 obj << /S /API#20Description /C /API#20Description /Pg 107 0 R /K 24 /P 801 0 R >> endobj 574 0 obj << /S /API#20Description /C /API#20Description /Pg 107 0 R /K 25 /P 801 0 R >> endobj 575 0 obj << /S /API#20Method /C /API#20Method /Pg 110 0 R /K 0 /P 801 0 R >> endobj 576 0 obj << /S /API#20Description /C /API#20Description /Pg 110 0 R /K 1 /P 801 0 R >> endobj 577 0 obj << /S /API#20Description /C /API#20Description /Pg 110 0 R /K 2 /P 801 0 R >> endobj 578 0 obj << /S /API#20Description /C /API#20Description /Pg 110 0 R /K 3 /P 801 0 R >> endobj 579 0 obj << /S /API#20Method /C /API#20Method /Pg 110 0 R /K 4 /P 801 0 R >> endobj 580 0 obj << /S /API#20Description /C /API#20Description /Pg 110 0 R /K 5 /P 801 0 R >> endobj 581 0 obj << /S /API#20Description /C /API#20Description /Pg 110 0 R /K 6 /P 801 0 R >> endobj 582 0 obj << /S /API#20Description /C /API#20Description /Pg 110 0 R /K 7 /P 801 0 R >> endobj 583 0 obj << /S /LBody /A [ 584 0 R ] /C /#C3#9Cberschrift#203 /Pg 110 0 R /K 8 /P 836 0 R >> endobj 584 0 obj << /O /Layout /StartIndent 36 >> endobj 585 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 110 0 R /K 9 /P 801 0 R >> endobj 586 0 obj << /S /API#20Attribute /C /API#20Attribute /Pg 110 0 R /K 10 /P 801 0 R >> endobj 587 0 obj << /S /API#20Description /C /API#20Description /Pg 110 0 R /K 11 /P 801 0 R >> endobj 588 0 obj << /S /API#20Attribute /C /API#20Attribute /Pg 110 0 R /K 12 /P 801 0 R >> endobj 589 0 obj << /S /API#20Description /C /API#20Description /Pg 110 0 R /K 13 /P 801 0 R >> endobj 590 0 obj << /S /API#20Attribute /C /API#20Attribute /Pg 110 0 R /K 14 /P 801 0 R >> endobj 591 0 obj << /S /API#20Description /C /API#20Description /Pg 110 0 R /K 15 /P 801 0 R >> endobj 592 0 obj << /S /API#20Attribute /C /API#20Attribute /Pg 110 0 R /K 16 /P 801 0 R >> endobj 593 0 obj << /S /API#20Description /C /API#20Description /Pg 110 0 R /K 17 /P 801 0 R >> endobj 594 0 obj << /S /API#20Attribute /C /API#20Attribute /Pg 110 0 R /K 18 /P 801 0 R >> endobj 595 0 obj << /S /API#20Description /C /API#20Description /Pg 110 0 R /K 19 /P 801 0 R >> endobj 596 0 obj << /S /API#20Attribute /C /API#20Attribute /Pg 110 0 R /K 20 /P 801 0 R >> endobj 597 0 obj << /S /API#20Description /C /API#20Description /Pg 110 0 R /K 21 /P 801 0 R >> endobj 598 0 obj << /S /LBody /A [ 599 0 R ] /C /#C3#9Cberschrift#202 /Pg 113 0 R /K 0 /P 838 0 R >> endobj 599 0 obj << /O /Layout /StartIndent 36 >> endobj 600 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 113 0 R /K 1 /P 801 0 R >> endobj 601 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 113 0 R /K 2 /P 801 0 R >> endobj 602 0 obj << /S /LBody /C /#C3#9Cberschrift#203 /Pg 113 0 R /K 3 /P 840 0 R >> endobj 603 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 113 0 R /K 4 /P 801 0 R >> endobj 604 0 obj << /S /LBody /A [ 605 0 R ] /C /#C3#9Cberschrift#203 /Pg 113 0 R /K 5 /P 842 0 R >> endobj 605 0 obj << /O /Layout /StartIndent 36 >> endobj 606 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 113 0 R /K 6 /P 801 0 R >> endobj 607 0 obj << /S /API#20Method /C /API#20Method /Pg 113 0 R /K 7 /P 801 0 R >> endobj 608 0 obj << /S /API#20Description /C /API#20Description /Pg 113 0 R /K 8 /P 801 0 R >> endobj 609 0 obj << /S /API#20Description /C /API#20Description /Pg 113 0 R /K 9 /P 801 0 R >> endobj 610 0 obj << /S /API#20Method /C /API#20Method /Pg 113 0 R /K 10 /P 801 0 R >> endobj 611 0 obj << /S /API#20Description /C /API#20Description /Pg 113 0 R /K 11 /P 801 0 R >> endobj 612 0 obj << /S /API#20Description /C /API#20Description /Pg 113 0 R /K 12 /P 801 0 R >> endobj 613 0 obj << /S /API#20Method /C /API#20Method /Pg 113 0 R /K 13 /P 801 0 R >> endobj 614 0 obj << /S /API#20Description /C /API#20Description /Pg 113 0 R /K 14 /P 801 0 R >> endobj 615 0 obj << /S /API#20Description /C /API#20Description /Pg 113 0 R /K 15 /P 801 0 R >> endobj 616 0 obj << /S /API#20Attribute /C /API#20Attribute /Pg 113 0 R /K 16 /P 801 0 R >> endobj 617 0 obj << /S /API#20Description /C /API#20Description /Pg 113 0 R /K 17 /P 801 0 R >> endobj 618 0 obj << /S /API#20Attribute /C /API#20Attribute /Pg 113 0 R /K 18 /P 801 0 R >> endobj 619 0 obj << /S /API#20Description /C /API#20Description /Pg 113 0 R /K 19 /P 801 0 R >> endobj 620 0 obj << /S /API#20Attribute /C /API#20Attribute /Pg 116 0 R /K 0 /P 801 0 R >> endobj 621 0 obj << /S /API#20Description /C /API#20Description /Pg 116 0 R /K 1 /P 801 0 R >> endobj 622 0 obj << /S /API#20Method /C /API#20Method /Pg 116 0 R /K 2 /P 801 0 R >> endobj 623 0 obj << /S /API#20Description /C /API#20Description /Pg 116 0 R /K 3 /P 801 0 R >> endobj 624 0 obj << /S /API#20Description /C /API#20Description /Pg 116 0 R /K 4 /P 801 0 R >> endobj 625 0 obj << /S /LBody /A [ 626 0 R ] /C /#C3#9Cberschrift#203 /Pg 116 0 R /K 5 /P 844 0 R >> endobj 626 0 obj << /O /Layout /StartIndent 36 >> endobj 627 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 116 0 R /K 6 /P 801 0 R >> endobj 628 0 obj << /S /API#20Attribute /C /API#20Attribute /Pg 116 0 R /K 7 /P 801 0 R >> endobj 629 0 obj << /S /API#20Description /C /API#20Description /Pg 116 0 R /K 8 /P 801 0 R >> endobj 630 0 obj << /S /LBody /A [ 631 0 R ] /C /#C3#9Cberschrift#202 /Pg 116 0 R /K 9 /P 846 0 R >> endobj 631 0 obj << /O /Layout /StartIndent 36 >> endobj 632 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 116 0 R /K 10 /P 801 0 R >> endobj 633 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 116 0 R /K 11 /P 801 0 R >> endobj 634 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 116 0 R /K 12 /P 801 0 R >> endobj 635 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 116 0 R /K 13 /P 801 0 R >> endobj 636 0 obj << /S /LBody /C /#C3#9Cberschrift#203 /Pg 116 0 R /K 14 /P 848 0 R >> endobj 637 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 116 0 R /K 15 /P 801 0 R >> endobj 638 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 116 0 R /K 16 /P 801 0 R >> endobj 639 0 obj << /S /LBody /C /#C3#9Cberschrift#203 /Pg 119 0 R /K 0 /P 850 0 R >> endobj 640 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 119 0 R /K 1 /P 801 0 R >> endobj 641 0 obj << /S /API#20Function /C /API#20Function /Pg 119 0 R /K 2 /P 801 0 R >> endobj 642 0 obj << /S /API#20Description /C /API#20Description /Pg 119 0 R /K 3 /P 801 0 R >> endobj 643 0 obj << /S /API#20Description /C /API#20Description /Pg 119 0 R /K 4 /P 801 0 R >> endobj 644 0 obj << /S /API#20Description /C /API#20Description /Pg 119 0 R /K 5 /P 801 0 R >> endobj 645 0 obj << /S /API#20Description /C /API#20Description /Pg 119 0 R /K 6 /P 801 0 R >> endobj 646 0 obj << /S /API#20Description /C /API#20Description /Pg 119 0 R /K 7 /P 801 0 R >> endobj 647 0 obj << /S /API#20Description /C /API#20Description /Pg 119 0 R /K 8 /P 801 0 R >> endobj 648 0 obj << /S /API#20Description /C /API#20Description /Pg 119 0 R /K 9 /P 801 0 R >> endobj 649 0 obj << /S /LBody /A [ 650 0 R ] /C /#C3#9Cberschrift#203 /Pg 119 0 R /K 10 /P 852 0 R >> endobj 650 0 obj << /O /Layout /StartIndent 36 >> endobj 651 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 119 0 R /K 11 /P 801 0 R >> endobj 652 0 obj << /S /LBody /A [ 653 0 R ] /C /#C3#9Cberschrift#203 /Pg 119 0 R /K 12 /P 854 0 R >> endobj 653 0 obj << /O /Layout /StartIndent 36 >> endobj 654 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 119 0 R /K 13 /P 801 0 R >> endobj 655 0 obj << /S /LBody /A [ 656 0 R ] /C /#C3#9Cberschrift#202 /Pg 126 0 R /K 0 /P 856 0 R >> endobj 656 0 obj << /O /Layout /StartIndent 36 >> endobj 657 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 126 0 R /K 1 /P 801 0 R >> endobj 658 0 obj << /S /API#20Function /C /API#20Function /Pg 126 0 R /K 2 /P 801 0 R >> endobj 659 0 obj << /S /API#20Description /C /API#20Description /Pg 126 0 R /K 3 /P 801 0 R >> endobj 660 0 obj << /S /API#20Description /C /API#20Description /Pg 126 0 R /K 4 /P 801 0 R >> endobj 661 0 obj << /S /LBody /A [ 662 0 R ] /C /#C3#9Cberschrift#202 /Pg 126 0 R /K 5 /P 858 0 R >> endobj 662 0 obj << /O /Layout /StartIndent 36 >> endobj 663 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 126 0 R /K 6 /P 801 0 R >> endobj 664 0 obj << /S /API#20Attribute /C /API#20Attribute /Pg 126 0 R /K 7 /P 801 0 R >> endobj 665 0 obj << /S /API#20Description /C /API#20Description /Pg 126 0 R /K 8 /P 801 0 R >> endobj 666 0 obj << /S /API#20Attribute /C /API#20Attribute /Pg 126 0 R /K 9 /P 801 0 R >> endobj 667 0 obj << /S /API#20Description /C /API#20Description /Pg 126 0 R /K 10 /P 801 0 R >> endobj 668 0 obj << /S /API#20Attribute /C /API#20Attribute /Pg 126 0 R /K 11 /P 801 0 R >> endobj 669 0 obj << /S /API#20Description /C /API#20Description /Pg 126 0 R /K 12 /P 801 0 R >> endobj 670 0 obj << /S /API#20Attribute /C /API#20Attribute /Pg 126 0 R /K 13 /P 801 0 R >> endobj 671 0 obj << /S /API#20Description /C /API#20Description /Pg 126 0 R /K 14 /P 801 0 R >> endobj 672 0 obj << /S /API#20Attribute /C /API#20Attribute /Pg 126 0 R /K 15 /P 801 0 R >> endobj 673 0 obj << /S /API#20Description /C /API#20Description /Pg 126 0 R /K 16 /P 801 0 R >> endobj 674 0 obj << /S /API#20Attribute /C /API#20Attribute /Pg 126 0 R /K 17 /P 801 0 R >> endobj 675 0 obj << /S /API#20Description /C /API#20Description /Pg 126 0 R /K 18 /P 801 0 R >> endobj 676 0 obj << /S /LBody /C /#C3#9Cberschrift#201 /Pg 129 0 R /K 0 /P 860 0 R >> endobj 677 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 129 0 R /K 1 /P 801 0 R >> endobj 678 0 obj << /S /LBody /A [ 679 0 R ] /C /Textk#C3#B6rper /Pg 129 0 R /K 2 /P 862 0 R >> endobj 679 0 obj << /O /Layout /StartIndent 78.55 /TextIndent -17.99998 >> endobj 680 0 obj << /S /LBody /A [ 681 0 R ] /C /Textk#C3#B6rper /Pg 129 0 R /K 3 /P 863 0 R >> endobj 681 0 obj << /O /Layout /StartIndent 78.55 /TextIndent -17.99998 >> endobj 682 0 obj << /S /LBody /A [ 683 0 R ] /C /Textk#C3#B6rper /Pg 129 0 R /K 4 /P 864 0 R >> endobj 683 0 obj << /O /Layout /StartIndent 78.55 /TextIndent -17.99998 >> endobj 684 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 129 0 R /K 5 /P 801 0 R >> endobj 685 0 obj << /S /Important#20Notice /C /Important#20Notice /Pg 129 0 R /K [ 6 7 8 ] /P 801 0 R >> endobj 686 0 obj << /S /LBody /C /#C3#9Cberschrift#201 /Pg 132 0 R /K 0 /P 866 0 R >> endobj 687 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 132 0 R /K 1 /P 801 0 R >> endobj 688 0 obj << /S /LBody /A [ 689 0 R ] /C /Textk#C3#B6rper /Pg 132 0 R /K 2 /P 868 0 R >> endobj 689 0 obj << /O /Layout /StartIndent 78.55 /TextIndent -17.99998 >> endobj 690 0 obj << /S /LBody /A [ 691 0 R ] /C /Textk#C3#B6rper /Pg 132 0 R /K 3 /P 869 0 R >> endobj 691 0 obj << /O /Layout /StartIndent 78.55 /TextIndent -17.99998 >> endobj 692 0 obj << /S /LBody /A [ 693 0 R ] /C /Textk#C3#B6rper /Pg 132 0 R /K 4 /P 870 0 R >> endobj 693 0 obj << /O /Layout /StartIndent 78.55 /TextIndent -17.99998 >> endobj 694 0 obj << /S /LBody /A [ 695 0 R ] /C /Textk#C3#B6rper /Pg 132 0 R /K 5 /P 871 0 R >> endobj 695 0 obj << /O /Layout /StartIndent 78.55 /TextIndent -17.99998 >> endobj 696 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 132 0 R /K 6 /P 801 0 R >> endobj 697 0 obj << /S /Important#20Notice /C /Important#20Notice /Pg 132 0 R /K [ 7 8 9 ] /P 801 0 R >> endobj 698 0 obj << /S /LBody /C /#C3#9Cberschrift#201 /Pg 135 0 R /K 0 /P 873 0 R >> endobj 699 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 135 0 R /K 1 /P 801 0 R >> endobj 700 0 obj << /S /Program#20Text /C /Program#20Text /Pg 135 0 R /K 2 /P 801 0 R >> endobj 701 0 obj << /S /Program#20Text /C /Program#20Text /Pg 135 0 R /K 3 /P 801 0 R >> endobj 702 0 obj << /O /Layout /WritingMode /LrTb /StartIndent 42.55 /EndIndent 0 /TextAlign /Start /SpaceBefore 0 /SpaceAfter 0 /TextIndent 0 >> endobj 703 0 obj << /S /Program#20Text /C /Program#20Text /Pg 135 0 R /K 4 /P 801 0 R >> endobj 704 0 obj << /S /Program#20Text /C /Program#20Text /Pg 135 0 R /K 5 /P 801 0 R >> endobj 705 0 obj << /S /Program#20Text /C /Program#20Text /Pg 135 0 R /K 6 /P 801 0 R >> endobj 706 0 obj << /S /Program#20Text /C /Program#20Text /Pg 135 0 R /K 7 /P 801 0 R >> endobj 707 0 obj << /S /Program#20Text /C /Program#20Text /Pg 135 0 R /K 8 /P 801 0 R >> endobj 708 0 obj << /S /Program#20Text /C /Program#20Text /Pg 135 0 R /K 9 /P 801 0 R >> endobj 709 0 obj << /S /Program#20Text /C /Program#20Text /Pg 135 0 R /K 10 /P 801 0 R >> endobj 710 0 obj << /S /Program#20Text /C /Program#20Text /Pg 135 0 R /K 11 /P 801 0 R >> endobj 711 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 135 0 R /K 12 /P 801 0 R >> endobj 712 0 obj << /S /LBody /C /#C3#9Cberschrift#201 /Pg 138 0 R /K 0 /P 875 0 R >> endobj 713 0 obj << /S /Program#20Text /C /Program#20Text /Pg 138 0 R /K 1 /P 801 0 R >> endobj 714 0 obj << /S /Program#20Text /C /Program#20Text /Pg 138 0 R /K 2 /P 801 0 R >> endobj 715 0 obj << /S /Program#20Text /C /Program#20Text /Pg 138 0 R /K 3 /P 801 0 R >> endobj 716 0 obj << /S /Program#20Text /C /Program#20Text /Pg 138 0 R /K 4 /P 801 0 R >> endobj 717 0 obj << /S /Program#20Text /C /Program#20Text /Pg 138 0 R /K 5 /P 801 0 R >> endobj 718 0 obj << /S /Program#20Text /C /Program#20Text /Pg 138 0 R /K 6 /P 801 0 R >> endobj 719 0 obj << /S /Program#20Text /C /Program#20Text /Pg 138 0 R /K 7 /P 801 0 R >> endobj 720 0 obj << /S /Program#20Text /C /Program#20Text /Pg 138 0 R /K 8 /P 801 0 R >> endobj 721 0 obj << /S /Program#20Text /C /Program#20Text /Pg 138 0 R /K 9 /P 801 0 R >> endobj 722 0 obj << /S /Program#20Text /C /Program#20Text /Pg 138 0 R /K 10 /P 801 0 R >> endobj 723 0 obj << /S /Program#20Text /C /Program#20Text /Pg 138 0 R /K 11 /P 801 0 R >> endobj 724 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 138 0 R /K 12 /P 801 0 R >> endobj 725 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 138 0 R /K 13 /P 801 0 R >> endobj 726 0 obj << /S /LBody /C /#C3#9Cberschrift#201 /Pg 141 0 R /K 0 /P 877 0 R >> endobj 727 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 141 0 R /K [ 1 728 0 R 3 ] /P 801 0 R >> endobj 728 0 obj << /S /Link /P 727 0 R /K [ 729 0 R << /Type /OBJR /Pg 141 0 R /Obj 174 0 R >> ] >> endobj 729 0 obj << /S /Underline /P 728 0 R /A 991 0 R /Pg 141 0 R /K 2 >> endobj 730 0 obj << /S /LBody /C /#C3#9Cberschrift#201 /Pg 145 0 R /K 0 /P 879 0 R >> endobj 731 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 145 0 R /K [ 1 732 0 R 3 ] /P 801 0 R >> endobj 732 0 obj << /S /Link /P 731 0 R /K [ 733 0 R << /Type /OBJR /Pg 145 0 R /Obj 176 0 R >> ] >> endobj 733 0 obj << /S /Underline /P 732 0 R /A 993 0 R /Pg 145 0 R /K 2 >> endobj 734 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 145 0 R /K [ 4 735 0 R 6 ] /P 801 0 R >> endobj 735 0 obj << /S /Link /P 734 0 R /K [ 736 0 R << /Type /OBJR /Pg 145 0 R /Obj 178 0 R >> ] >> endobj 736 0 obj << /S /Underline /P 735 0 R /A 994 0 R /Pg 145 0 R /K 5 >> endobj 737 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 145 0 R /K 7 /P 801 0 R >> endobj 738 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 145 0 R /K 8 /P 801 0 R >> endobj 739 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 145 0 R /K 9 /P 801 0 R >> endobj 740 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 145 0 R /K 10 /P 801 0 R >> endobj 741 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 145 0 R /K 11 /P 801 0 R >> endobj 742 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 145 0 R /K [ 12 743 0 R 14 ] /P 801 0 R >> endobj 743 0 obj << /S /Link /P 742 0 R /K [ 744 0 R << /Type /OBJR /Pg 145 0 R /Obj 180 0 R >> ] >> endobj 744 0 obj << /S /Underline /P 743 0 R /A 995 0 R /Pg 145 0 R /K 13 >> endobj 745 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 145 0 R /K 15 /P 801 0 R >> endobj 746 0 obj << /S /Textk#C3#B6rper /A [ 747 0 R ] /C /Textk#C3#B6rper /Pg 145 0 R /K 16 /P 801 0 R >> endobj 747 0 obj << /O /Layout /StartIndent 56.60001 >> endobj 748 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 145 0 R /K 17 /P 801 0 R >> endobj 749 0 obj << /S /License#20Title /C /License#20Title /Pg 149 0 R /K 0 /P 801 0 R >> endobj 750 0 obj << /S /License#20Subtitle /C /License#20Subtitle /Pg 149 0 R /K 1 /P 801 0 R >> endobj 751 0 obj << /O /Layout /WritingMode /LrTb /StartIndent 0 /EndIndent 0 /TextAlign /Center /SpaceBefore 0 /SpaceAfter 6 /TextIndent 0 >> endobj 752 0 obj << /S /License#20Text /C /License#20Text /Pg 149 0 R /K [ 2 755 0 R 4 ] /P 801 0 R >> endobj 753 0 obj << /O /Layout /WritingMode /LrTb /StartIndent 0 /EndIndent 0 /TextAlign /Center /SpaceBefore 0 /SpaceAfter 6 /TextIndent 0 >> endobj 754 0 obj << /O /Layout /WritingMode /LrTb /StartIndent 42.55 /EndIndent 0 /TextAlign /Start /SpaceBefore 6 /SpaceAfter 6 /TextIndent 0 >> endobj 755 0 obj << /S /Link /P 752 0 R /K [ 756 0 R << /Type /OBJR /Pg 149 0 R /Obj 182 0 R >> ] >> endobj 756 0 obj << /S /Underline /P 755 0 R /A 997 0 R /Pg 149 0 R /K 3 >> endobj 757 0 obj << /S /LBody /C /License#20Section /Pg 149 0 R /K 5 /P 881 0 R >> endobj 758 0 obj << /S /License#20Text /C /License#20Text /Pg 149 0 R /K 6 /P 801 0 R >> endobj 759 0 obj << /O /Layout /WritingMode /LrTb /StartIndent 85.10001 /EndIndent 0 /TextAlign /Start /SpaceBefore 12 /SpaceAfter 6 /TextIndent -85.09999 >> endobj 760 0 obj << /S /LBody /C /License#20Section /Pg 149 0 R /K 7 /P 883 0 R >> endobj 761 0 obj << /S /License#20Text /C /License#20Text /Pg 149 0 R /K 8 /P 801 0 R >> endobj 762 0 obj << /S /LBody /C /License#20Section /Pg 149 0 R /K 9 /P 885 0 R >> endobj 763 0 obj << /S /License#20Text /C /License#20Text /Pg 149 0 R /K 10 /P 801 0 R >> endobj 764 0 obj << /S /LBody /C /License#20Section /Pg 149 0 R /K 11 /P 887 0 R >> endobj 765 0 obj << /S /License#20Text /C /License#20Text /Pg 149 0 R /P 801 0 R /K [ 12 << /Type /MCR /Pg 153 0 R /MCID 0 >> ] >> endobj 766 0 obj << /S /License#20Text /C /License#20Text /Pg 153 0 R /K 1 /P 801 0 R >> endobj 767 0 obj << /S /LBody /C /License#20Section /Pg 153 0 R /K 2 /P 889 0 R >> endobj 768 0 obj << /S /License#20Text /C /License#20Text /Pg 153 0 R /K 3 /P 801 0 R >> endobj 769 0 obj << /S /LBody /C /License#20Section /Pg 153 0 R /K 4 /P 891 0 R >> endobj 770 0 obj << /S /License#20Text /C /License#20Text /Pg 153 0 R /K 5 /P 801 0 R >> endobj 771 0 obj << /S /LBody /C /License#20Section /Pg 153 0 R /K 6 /P 893 0 R >> endobj 772 0 obj << /S /License#20Text /C /License#20Text /Pg 153 0 R /K 7 /P 801 0 R >> endobj 773 0 obj << /S /License#20Text /C /License#20Text /Pg 153 0 R /K 8 /P 801 0 R >> endobj 774 0 obj << /S /License#20Text /C /License#20Text /Pg 153 0 R /K 9 /P 801 0 R >> endobj 775 0 obj << /S /License#20Text /C /License#20Text /Pg 153 0 R /K 10 /P 801 0 R >> endobj 776 0 obj << /S /License#20Text /C /License#20Text /Pg 153 0 R /K 11 /P 801 0 R >> endobj 777 0 obj << /S /License#20Text /C /License#20Text /Pg 156 0 R /K 0 /P 801 0 R >> endobj 778 0 obj << /S /LBody /C /License#20Section /Pg 156 0 R /K 1 /P 895 0 R >> endobj 779 0 obj << /S /License#20Text /C /License#20Text /Pg 156 0 R /K 2 /P 801 0 R >> endobj 780 0 obj << /S /License#20Text /C /License#20Text /Pg 156 0 R /K 3 /P 801 0 R >> endobj 781 0 obj << /S /License#20Text /A [ 782 0 R ] /C /License#20Text /Pg 156 0 R /K 4 /P 801 0 R >> endobj 782 0 obj << /O /Layout /StartIndent 81 >> endobj 783 0 obj << /S /License#20Text /A [ 784 0 R ] /C /License#20Text /Pg 156 0 R /K 5 /P 801 0 R >> endobj 784 0 obj << /O /Layout /StartIndent 81 >> endobj 785 0 obj << /S /License#20Text /A [ 786 0 R ] /C /License#20Text /Pg 156 0 R /K 6 /P 801 0 R >> endobj 786 0 obj << /O /Layout /StartIndent 81 >> endobj 787 0 obj << /S /License#20Text /A [ 788 0 R ] /C /License#20Text /Pg 156 0 R /K 7 /P 801 0 R >> endobj 788 0 obj << /O /Layout /StartIndent 81 >> endobj 789 0 obj << /S /License#20Text /C /License#20Text /Pg 156 0 R /K 8 /P 801 0 R >> endobj 790 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 156 0 R /K 9 /P 801 0 R >> endobj 791 0 obj << /S /Standard /A [ 792 0 R ] /C /Standard /Pg 1071 0 R /K 26 /P 899 0 R >> endobj 792 0 obj << /O /Layout /TextAlign /End /StartIndent -39.55 /EndIndent -24.2 >> endobj 793 0 obj << /S /Standard /A [ 794 0 R ] /C /Standard /Pg 1071 0 R /K 27 /P 899 0 R >> endobj 794 0 obj << /O /Layout /TextAlign /End /StartIndent -39.55 /EndIndent -24.2 >> endobj 795 0 obj << /S /Standard /A [ 796 0 R ] /C /Standard /Pg 1071 0 R /K [ 12 13 14 15 16 17 18 19 20 21 22 23 24 ] /P 898 0 R >> endobj 796 0 obj << /O /Layout /TextAlign /Center /StartIndent 54.45 /EndIndent 62.8 >> endobj 797 0 obj << /S /Standard /A [ 798 0 R ] /C /Standard /Pg 1071 0 R /K [ 1 2 3 4 5 6 7 8 9 10 11 ] /P 897 0 R >> endobj 798 0 obj << /O /Layout /StartIndent 8.45 /TextAlign /End /EndIndent -43.2 >> endobj 799 0 obj << /S /Sect /P 1070 0 R /K [ 899 0 R 898 0 R 897 0 R 896 0 R 218 0 R 219 0 R 222 0 R 223 0 R 224 0 R 225 0 R 226 0 R 227 0 R 228 0 R 229 0 R 230 0 R 231 0 R 232 0 R 233 0 R 234 0 R 235 0 R 236 0 R 237 0 R 238 0 R 239 0 R 240 0 R 241 0 R 242 0 R 243 0 R 244 0 R 245 0 R 246 0 R 247 0 R 248 0 R 249 0 R 250 0 R 251 0 R 252 0 R 253 0 R 255 0 R 256 0 R 257 0 R 258 0 R ] >> endobj 800 0 obj << /S /Sect /P 1070 0 R /K [ 259 0 R 802 0 R 361 0 R ] >> endobj 801 0 obj << /S /Sect /P 1070 0 R /K [ 803 0 R 364 0 R 366 0 R 369 0 R 805 0 R 372 0 R 374 0 R 375 0 R 807 0 R 377 0 R 378 0 R 379 0 R 809 0 R 388 0 R 389 0 R 390 0 R 391 0 R 815 0 R 393 0 R 395 0 R 396 0 R 398 0 R 400 0 R 401 0 R 402 0 R 403 0 R 817 0 R 406 0 R 407 0 R 408 0 R 410 0 R 411 0 R 412 0 R 413 0 R 414 0 R 415 0 R 416 0 R 417 0 R 418 0 R 419 0 R 420 0 R 422 0 R 423 0 R 424 0 R 425 0 R 426 0 R 427 0 R 428 0 R 429 0 R 430 0 R 431 0 R 432 0 R 433 0 R 434 0 R 435 0 R 436 0 R 437 0 R 438 0 R 439 0 R 440 0 R 441 0 R 442 0 R 443 0 R 444 0 R 445 0 R 446 0 R 447 0 R 448 0 R 449 0 R 450 0 R 451 0 R 452 0 R 453 0 R 454 0 R 455 0 R 456 0 R 457 0 R 458 0 R 459 0 R 460 0 R 461 0 R 462 0 R 463 0 R 464 0 R 819 0 R 467 0 R 468 0 R 469 0 R 470 0 R 471 0 R 472 0 R 473 0 R 474 0 R 475 0 R 476 0 R 477 0 R 478 0 R 479 0 R 821 0 R 482 0 R 483 0 R 484 0 R 823 0 R 486 0 R 825 0 R 488 0 R 489 0 R 490 0 R 491 0 R 492 0 R 493 0 R 494 0 R 495 0 R 496 0 R 497 0 R 498 0 R 499 0 R 500 0 R 501 0 R 502 0 R 503 0 R 504 0 R 505 0 R 506 0 R 507 0 R 508 0 R 827 0 R 511 0 R 829 0 R 514 0 R 515 0 R 831 0 R 517 0 R 518 0 R 519 0 R 520 0 R 521 0 R 522 0 R 523 0 R 524 0 R 525 0 R 833 0 R 528 0 R 529 0 R 530 0 R 531 0 R 532 0 R 533 0 R 534 0 R 535 0 R 536 0 R 537 0 R 538 0 R 539 0 R 540 0 R 541 0 R 542 0 R 543 0 R 544 0 R 545 0 R 546 0 R 547 0 R 548 0 R 549 0 R 550 0 R 551 0 R 552 0 R 553 0 R 554 0 R 555 0 R 556 0 R 557 0 R 558 0 R 559 0 R 560 0 R 561 0 R 562 0 R 563 0 R 564 0 R 565 0 R 566 0 R 567 0 R 568 0 R 569 0 R 570 0 R 571 0 R 572 0 R 573 0 R 574 0 R 575 0 R 576 0 R 577 0 R 578 0 R 579 0 R 580 0 R 581 0 R 582 0 R 835 0 R 585 0 R 586 0 R 587 0 R 588 0 R 589 0 R 590 0 R 591 0 R 592 0 R 593 0 R 594 0 R 595 0 R 596 0 R 597 0 R 837 0 R 600 0 R 601 0 R 839 0 R 603 0 R 841 0 R 606 0 R 607 0 R 608 0 R 609 0 R 610 0 R 611 0 R 612 0 R 613 0 R 614 0 R 615 0 R 616 0 R 617 0 R 618 0 R 619 0 R 620 0 R 621 0 R 622 0 R 623 0 R 624 0 R 843 0 R 627 0 R 628 0 R 629 0 R 845 0 R 632 0 R 633 0 R 634 0 R 635 0 R 847 0 R 637 0 R 638 0 R 849 0 R 640 0 R 641 0 R 642 0 R 643 0 R 644 0 R 645 0 R 646 0 R 647 0 R 648 0 R 851 0 R 651 0 R 853 0 R 654 0 R 855 0 R 657 0 R 658 0 R 659 0 R 660 0 R 857 0 R 663 0 R 664 0 R 665 0 R 666 0 R 667 0 R 668 0 R 669 0 R 670 0 R 671 0 R 672 0 R 673 0 R 674 0 R 675 0 R 859 0 R 677 0 R 861 0 R 684 0 R 685 0 R 865 0 R 687 0 R 867 0 R 696 0 R 697 0 R 872 0 R 699 0 R 700 0 R 701 0 R 703 0 R 704 0 R 705 0 R 706 0 R 707 0 R 708 0 R 709 0 R 710 0 R 711 0 R 874 0 R 713 0 R 714 0 R 715 0 R 716 0 R 717 0 R 718 0 R 719 0 R 720 0 R 721 0 R 722 0 R 723 0 R 724 0 R 725 0 R 876 0 R 727 0 R 878 0 R 731 0 R 734 0 R 737 0 R 738 0 R 739 0 R 740 0 R 741 0 R 742 0 R 745 0 R 746 0 R 748 0 R 749 0 R 750 0 R 752 0 R 880 0 R 758 0 R 882 0 R 761 0 R 884 0 R 763 0 R 886 0 R 765 0 R 766 0 R 888 0 R 768 0 R 890 0 R 770 0 R 892 0 R 772 0 R 773 0 R 774 0 R 775 0 R 776 0 R 777 0 R 894 0 R 779 0 R 780 0 R 781 0 R 783 0 R 785 0 R 787 0 R 789 0 R 790 0 R ] >> endobj 802 0 obj << /S /TOC /P 800 0 R /K [ 260 0 R 265 0 R 269 0 R 272 0 R 275 0 R 279 0 R 282 0 R 285 0 R 288 0 R 291 0 R 294 0 R 297 0 R 300 0 R 303 0 R 306 0 R 309 0 R 312 0 R 315 0 R 318 0 R 321 0 R 324 0 R 327 0 R 330 0 R 333 0 R 336 0 R 339 0 R 342 0 R 345 0 R 348 0 R 351 0 R 354 0 R 357 0 R 360 0 R ] >> endobj 803 0 obj << /S /L /K 804 0 R /P 801 0 R >> endobj 804 0 obj << /S /LI /P 803 0 R /K 363 0 R >> endobj 805 0 obj << /S /L /K 806 0 R /P 801 0 R >> endobj 806 0 obj << /S /LI /P 805 0 R /K 370 0 R >> endobj 807 0 obj << /S /L /K 808 0 R /P 801 0 R >> endobj 808 0 obj << /S /LI /P 807 0 R /K 376 0 R >> endobj 809 0 obj << /S /L /P 801 0 R /K [ 810 0 R 811 0 R 812 0 R 813 0 R ] >> endobj 810 0 obj << /S /LI /P 809 0 R /K 380 0 R >> endobj 811 0 obj << /S /LI /P 809 0 R /K 382 0 R >> endobj 812 0 obj << /S /LI /P 809 0 R /K 384 0 R >> endobj 813 0 obj << /S /L /K 814 0 R /P 809 0 R >> endobj 814 0 obj << /S /LI /P 813 0 R /K 386 0 R >> endobj 815 0 obj << /S /L /K 816 0 R /P 801 0 R >> endobj 816 0 obj << /S /LI /P 815 0 R /K 392 0 R >> endobj 817 0 obj << /S /L /K 818 0 R /P 801 0 R >> endobj 818 0 obj << /S /LI /P 817 0 R /K 404 0 R >> endobj 819 0 obj << /S /L /K 820 0 R /P 801 0 R >> endobj 820 0 obj << /S /LI /P 819 0 R /K 465 0 R >> endobj 821 0 obj << /S /L /K 822 0 R /P 801 0 R >> endobj 822 0 obj << /S /LI /P 821 0 R /K 480 0 R >> endobj 823 0 obj << /S /L /K 824 0 R /P 801 0 R >> endobj 824 0 obj << /S /LI /P 823 0 R /K 485 0 R >> endobj 825 0 obj << /S /L /K 826 0 R /P 801 0 R >> endobj 826 0 obj << /S /LI /P 825 0 R /K 487 0 R >> endobj 827 0 obj << /S /L /K 828 0 R /P 801 0 R >> endobj 828 0 obj << /S /LI /P 827 0 R /K 509 0 R >> endobj 829 0 obj << /S /L /K 830 0 R /P 801 0 R >> endobj 830 0 obj << /S /LI /P 829 0 R /K 512 0 R >> endobj 831 0 obj << /S /L /K 832 0 R /P 801 0 R >> endobj 832 0 obj << /S /LI /P 831 0 R /K 516 0 R >> endobj 833 0 obj << /S /L /K 834 0 R /P 801 0 R >> endobj 834 0 obj << /S /LI /P 833 0 R /K 526 0 R >> endobj 835 0 obj << /S /L /K 836 0 R /P 801 0 R >> endobj 836 0 obj << /S /LI /P 835 0 R /K 583 0 R >> endobj 837 0 obj << /S /L /K 838 0 R /P 801 0 R >> endobj 838 0 obj << /S /LI /P 837 0 R /K 598 0 R >> endobj 839 0 obj << /S /L /K 840 0 R /P 801 0 R >> endobj 840 0 obj << /S /LI /P 839 0 R /K 602 0 R >> endobj 841 0 obj << /S /L /K 842 0 R /P 801 0 R >> endobj 842 0 obj << /S /LI /P 841 0 R /K 604 0 R >> endobj 843 0 obj << /S /L /K 844 0 R /P 801 0 R >> endobj 844 0 obj << /S /LI /P 843 0 R /K 625 0 R >> endobj 845 0 obj << /S /L /K 846 0 R /P 801 0 R >> endobj 846 0 obj << /S /LI /P 845 0 R /K 630 0 R >> endobj 847 0 obj << /S /L /K 848 0 R /P 801 0 R >> endobj 848 0 obj << /S /LI /P 847 0 R /K 636 0 R >> endobj 849 0 obj << /S /L /K 850 0 R /P 801 0 R >> endobj 850 0 obj << /S /LI /P 849 0 R /K 639 0 R >> endobj 851 0 obj << /S /L /K 852 0 R /P 801 0 R >> endobj 852 0 obj << /S /LI /P 851 0 R /K 649 0 R >> endobj 853 0 obj << /S /L /K 854 0 R /P 801 0 R >> endobj 854 0 obj << /S /LI /P 853 0 R /K 652 0 R >> endobj 855 0 obj << /S /L /K 856 0 R /P 801 0 R >> endobj 856 0 obj << /S /LI /P 855 0 R /K 655 0 R >> endobj 857 0 obj << /S /L /K 858 0 R /P 801 0 R >> endobj 858 0 obj << /S /LI /P 857 0 R /K 661 0 R >> endobj 859 0 obj << /S /L /K 860 0 R /P 801 0 R >> endobj 860 0 obj << /S /LI /P 859 0 R /K 676 0 R >> endobj 861 0 obj << /S /L /P 801 0 R /K [ 862 0 R 863 0 R 864 0 R ] >> endobj 862 0 obj << /S /LI /P 861 0 R /K 678 0 R >> endobj 863 0 obj << /S /LI /P 861 0 R /K 680 0 R >> endobj 864 0 obj << /S /LI /P 861 0 R /K 682 0 R >> endobj 865 0 obj << /S /L /K 866 0 R /P 801 0 R >> endobj 866 0 obj << /S /LI /P 865 0 R /K 686 0 R >> endobj 867 0 obj << /S /L /P 801 0 R /K [ 868 0 R 869 0 R 870 0 R 871 0 R ] >> endobj 868 0 obj << /S /LI /P 867 0 R /K 688 0 R >> endobj 869 0 obj << /S /LI /P 867 0 R /K 690 0 R >> endobj 870 0 obj << /S /LI /P 867 0 R /K 692 0 R >> endobj 871 0 obj << /S /LI /P 867 0 R /K 694 0 R >> endobj 872 0 obj << /S /L /K 873 0 R /P 801 0 R >> endobj 873 0 obj << /S /LI /P 872 0 R /K 698 0 R >> endobj 874 0 obj << /S /L /K 875 0 R /P 801 0 R >> endobj 875 0 obj << /S /LI /P 874 0 R /K 712 0 R >> endobj 876 0 obj << /S /L /K 877 0 R /P 801 0 R >> endobj 877 0 obj << /S /LI /P 876 0 R /K 726 0 R >> endobj 878 0 obj << /S /L /K 879 0 R /P 801 0 R >> endobj 879 0 obj << /S /LI /P 878 0 R /K 730 0 R >> endobj 880 0 obj << /S /L /K 881 0 R /P 801 0 R >> endobj 881 0 obj << /S /LI /P 880 0 R /K 757 0 R >> endobj 882 0 obj << /S /L /K 883 0 R /P 801 0 R >> endobj 883 0 obj << /S /LI /P 882 0 R /K 760 0 R >> endobj 884 0 obj << /S /L /K 885 0 R /P 801 0 R >> endobj 885 0 obj << /S /LI /P 884 0 R /K 762 0 R >> endobj 886 0 obj << /S /L /K 887 0 R /P 801 0 R >> endobj 887 0 obj << /S /LI /P 886 0 R /K 764 0 R >> endobj 888 0 obj << /S /L /K 889 0 R /P 801 0 R >> endobj 889 0 obj << /S /LI /P 888 0 R /K 767 0 R >> endobj 890 0 obj << /S /L /K 891 0 R /P 801 0 R >> endobj 891 0 obj << /S /LI /P 890 0 R /K 769 0 R >> endobj 892 0 obj << /S /L /K 893 0 R /P 801 0 R >> endobj 893 0 obj << /S /LI /P 892 0 R /K 771 0 R >> endobj 894 0 obj << /S /L /K 895 0 R /P 801 0 R >> endobj 895 0 obj << /S /LI /P 894 0 R /K 778 0 R >> endobj 896 0 obj << /S /Shape /Alt () /Pg 1071 0 R /K [ 0 25 ] /P 799 0 R /A 902 0 R >> endobj 897 0 obj << /S /TextBox /Alt (_aoOMLE3) /P 799 0 R /K 797 0 R >> endobj 898 0 obj << /S /TextBox /Alt (tv2Wﯿ]o?-4F) /P 799 0 R /K 795 0 R >> endobj 899 0 obj << /S /TextBox /Alt (Qv59?z\):掯Tq>! H) /P 799 0 R /K [ 791 0 R 793 0 R ] >> endobj 900 0 obj << /Nums [ 0 901 0 R 1 903 0 R 2 904 0 R 3 954 0 R 4 970 0 R 5 367 0 R 6 972 0 R 7 973 0 R 8 974 0 R 9 975 0 R 10 976 0 R 11 977 0 R 12 978 0 R 13 979 0 R 14 980 0 R 15 981 0 R 16 982 0 R 17 983 0 R 18 984 0 R 19 985 0 R 20 986 0 R 21 987 0 R 22 988 0 R 23 989 0 R 24 990 0 R 25 728 0 R 26 992 0 R 27 732 0 R 28 735 0 R 29 743 0 R 30 996 0 R 31 755 0 R 32 998 0 R 33 999 0 R ] >> endobj 901 0 obj [ 896 0 R 797 0 R 797 0 R 797 0 R 797 0 R 797 0 R 797 0 R 797 0 R 797 0 R 797 0 R 797 0 R 797 0 R 795 0 R 795 0 R 795 0 R 795 0 R 795 0 R 795 0 R 795 0 R 795 0 R 795 0 R 795 0 R 795 0 R 795 0 R 795 0 R 896 0 R 791 0 R 793 0 R ] endobj 902 0 obj << /O /Layout /BBox [ 34 34 566 809 ] /Placement /Block /StartIndent -93.55 /EndIndent -70.2 >> endobj 903 0 obj [ 218 0 R 219 0 R 222 0 R 223 0 R 224 0 R 225 0 R 226 0 R 227 0 R 228 0 R 229 0 R 230 0 R 231 0 R 232 0 R 233 0 R 234 0 R 235 0 R 236 0 R 237 0 R 238 0 R 239 0 R 240 0 R 241 0 R 242 0 R 243 0 R 244 0 R 245 0 R 246 0 R 247 0 R 248 0 R 249 0 R 250 0 R 251 0 R 252 0 R 253 0 R 255 0 R 256 0 R 257 0 R 258 0 R ] endobj 904 0 obj [ 259 0 R 262 0 R 260 0 R 264 0 R 260 0 R 266 0 R 265 0 R 268 0 R 265 0 R 270 0 R 269 0 R 271 0 R 269 0 R 273 0 R 272 0 R 274 0 R 272 0 R 276 0 R 275 0 R 278 0 R 275 0 R 280 0 R 279 0 R 281 0 R 279 0 R 283 0 R 282 0 R 284 0 R 282 0 R 286 0 R 285 0 R 287 0 R 285 0 R 289 0 R 288 0 R 290 0 R 288 0 R 292 0 R 291 0 R 293 0 R 291 0 R 295 0 R 294 0 R 296 0 R 294 0 R 298 0 R 297 0 R 299 0 R 297 0 R 301 0 R 300 0 R 302 0 R 300 0 R 304 0 R 303 0 R 305 0 R 303 0 R 307 0 R 306 0 R 308 0 R 306 0 R 310 0 R 309 0 R 311 0 R 309 0 R 313 0 R 312 0 R 314 0 R 312 0 R 316 0 R 315 0 R 317 0 R 315 0 R 319 0 R 318 0 R 320 0 R 318 0 R 322 0 R 321 0 R 323 0 R 321 0 R 325 0 R 324 0 R 326 0 R 324 0 R 328 0 R 327 0 R 329 0 R 327 0 R 331 0 R 330 0 R 332 0 R 330 0 R 334 0 R 333 0 R 335 0 R 333 0 R ] endobj 905 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 906 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 907 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 908 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 909 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 910 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 911 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 912 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 913 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 914 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 915 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 916 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 917 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 918 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 919 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 920 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 921 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 922 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 923 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 924 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 925 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 926 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 927 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 928 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 929 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 930 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 931 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 932 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 933 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 934 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 935 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 936 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 937 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 938 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 939 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 940 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 941 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 942 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 943 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 944 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 945 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 946 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 947 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 948 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 949 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 950 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 951 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 952 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 953 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 954 0 obj [ 337 0 R 336 0 R 338 0 R 336 0 R 340 0 R 339 0 R 341 0 R 339 0 R 343 0 R 342 0 R 344 0 R 342 0 R 346 0 R 345 0 R 347 0 R 345 0 R 349 0 R 348 0 R 350 0 R 348 0 R 352 0 R 351 0 R 353 0 R 351 0 R 355 0 R 354 0 R 356 0 R 354 0 R 358 0 R 357 0 R 359 0 R 357 0 R 360 0 R 361 0 R ] endobj 955 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 956 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 957 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 958 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 959 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 960 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 961 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 962 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 963 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 964 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 965 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 966 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 967 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 968 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 969 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 970 0 obj [ 363 0 R 364 0 R 366 0 R 368 0 R 366 0 R 369 0 R 369 0 R 369 0 R 369 0 R 370 0 R 372 0 R 374 0 R 375 0 R 375 0 R 375 0 R 375 0 R ] endobj 971 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 972 0 obj [ 376 0 R 377 0 R 378 0 R 379 0 R 380 0 R 382 0 R 384 0 R 386 0 R 388 0 R 389 0 R ] endobj 973 0 obj [ 390 0 R 391 0 R 392 0 R 393 0 R 395 0 R 396 0 R 398 0 R 400 0 R 401 0 R 402 0 R 403 0 R 404 0 R 406 0 R 407 0 R 408 0 R 410 0 R 411 0 R 412 0 R ] endobj 974 0 obj [ 413 0 R 414 0 R 415 0 R 416 0 R 417 0 R 418 0 R 419 0 R 420 0 R 422 0 R 423 0 R 424 0 R 425 0 R 426 0 R 427 0 R 428 0 R 429 0 R 430 0 R 431 0 R 432 0 R 433 0 R 434 0 R 435 0 R 436 0 R 437 0 R 438 0 R 439 0 R ] endobj 975 0 obj [ 440 0 R 441 0 R 442 0 R 443 0 R 444 0 R 445 0 R 446 0 R 447 0 R 448 0 R 449 0 R 450 0 R 451 0 R 452 0 R 453 0 R 454 0 R 455 0 R 456 0 R 457 0 R 458 0 R 459 0 R 460 0 R 461 0 R 462 0 R 463 0 R 464 0 R ] endobj 976 0 obj [ 465 0 R 467 0 R 468 0 R 469 0 R 470 0 R 471 0 R 472 0 R 473 0 R 474 0 R 475 0 R 476 0 R 477 0 R 478 0 R 479 0 R 480 0 R 482 0 R 483 0 R 484 0 R ] endobj 977 0 obj [ 485 0 R 486 0 R 487 0 R 488 0 R 489 0 R 490 0 R 491 0 R 492 0 R 493 0 R 494 0 R 495 0 R 496 0 R 497 0 R 498 0 R 499 0 R 500 0 R 501 0 R 502 0 R 503 0 R 504 0 R 505 0 R 506 0 R 507 0 R 508 0 R ] endobj 978 0 obj [ 509 0 R 511 0 R 512 0 R 514 0 R 515 0 R 516 0 R 517 0 R 518 0 R 519 0 R 520 0 R 521 0 R 522 0 R 523 0 R 524 0 R ] endobj 979 0 obj [ 525 0 R 526 0 R 528 0 R 529 0 R 530 0 R 531 0 R 532 0 R 533 0 R 534 0 R 535 0 R 536 0 R 537 0 R 538 0 R 539 0 R 540 0 R 541 0 R 542 0 R 543 0 R 544 0 R 545 0 R 546 0 R 547 0 R 548 0 R ] endobj 980 0 obj [ 549 0 R 550 0 R 551 0 R 552 0 R 553 0 R 554 0 R 555 0 R 556 0 R 557 0 R 558 0 R 559 0 R 560 0 R 561 0 R 562 0 R 563 0 R 564 0 R 565 0 R 566 0 R 567 0 R 568 0 R 569 0 R 570 0 R 571 0 R 572 0 R 573 0 R 574 0 R ] endobj 981 0 obj [ 575 0 R 576 0 R 577 0 R 578 0 R 579 0 R 580 0 R 581 0 R 582 0 R 583 0 R 585 0 R 586 0 R 587 0 R 588 0 R 589 0 R 590 0 R 591 0 R 592 0 R 593 0 R 594 0 R 595 0 R 596 0 R 597 0 R ] endobj 982 0 obj [ 598 0 R 600 0 R 601 0 R 602 0 R 603 0 R 604 0 R 606 0 R 607 0 R 608 0 R 609 0 R 610 0 R 611 0 R 612 0 R 613 0 R 614 0 R 615 0 R 616 0 R 617 0 R 618 0 R 619 0 R ] endobj 983 0 obj [ 620 0 R 621 0 R 622 0 R 623 0 R 624 0 R 625 0 R 627 0 R 628 0 R 629 0 R 630 0 R 632 0 R 633 0 R 634 0 R 635 0 R 636 0 R 637 0 R 638 0 R ] endobj 984 0 obj [ 639 0 R 640 0 R 641 0 R 642 0 R 643 0 R 644 0 R 645 0 R 646 0 R 647 0 R 648 0 R 649 0 R 651 0 R 652 0 R 654 0 R ] endobj 985 0 obj [ 655 0 R 657 0 R 658 0 R 659 0 R 660 0 R 661 0 R 663 0 R 664 0 R 665 0 R 666 0 R 667 0 R 668 0 R 669 0 R 670 0 R 671 0 R 672 0 R 673 0 R 674 0 R 675 0 R ] endobj 986 0 obj [ 676 0 R 677 0 R 678 0 R 680 0 R 682 0 R 684 0 R 685 0 R 685 0 R 685 0 R ] endobj 987 0 obj [ 686 0 R 687 0 R 688 0 R 690 0 R 692 0 R 694 0 R 696 0 R 697 0 R 697 0 R 697 0 R ] endobj 988 0 obj [ 698 0 R 699 0 R 700 0 R 701 0 R 703 0 R 704 0 R 705 0 R 706 0 R 707 0 R 708 0 R 709 0 R 710 0 R 711 0 R ] endobj 989 0 obj [ 712 0 R 713 0 R 714 0 R 715 0 R 716 0 R 717 0 R 718 0 R 719 0 R 720 0 R 721 0 R 722 0 R 723 0 R 724 0 R 725 0 R ] endobj 990 0 obj [ 726 0 R 727 0 R 729 0 R 727 0 R ] endobj 991 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 992 0 obj [ 730 0 R 731 0 R 733 0 R 731 0 R 734 0 R 736 0 R 734 0 R 737 0 R 738 0 R 739 0 R 740 0 R 741 0 R 742 0 R 744 0 R 742 0 R 745 0 R 746 0 R 748 0 R ] endobj 993 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 994 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 995 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 996 0 obj [ 749 0 R 750 0 R 752 0 R 756 0 R 752 0 R 757 0 R 758 0 R 760 0 R 761 0 R 762 0 R 763 0 R 764 0 R 765 0 R ] endobj 997 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 998 0 obj [ 765 0 R 766 0 R 767 0 R 768 0 R 769 0 R 770 0 R 771 0 R 772 0 R 773 0 R 774 0 R 775 0 R 776 0 R ] endobj 999 0 obj [ 777 0 R 778 0 R 779 0 R 780 0 R 781 0 R 783 0 R 785 0 R 787 0 R 789 0 R 790 0 R ] endobj 1000 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 74 /Height 105 /ColorSpace 1058 0 R /BitsPerComponent 8 /Length 1001 0 R >> stream z:Th#E,:SSţJƖt%$2*S:|KNkb N޹DZQQ}?z᾿"0lh 쓔g ? wUbb?J$@G6ٟgPok }O{G]V'5S ;%!.}~N܅aB*pfv5e5N/AI HABs $ Ǘ] =L| ݜh, @z&qk8UۏOYsrhqR޾Zg>an| 6wsΐOc=! XQ]> 2W괘9XW2r&FTbͮ|3B"Ϲ'3=L*Fv8Urɺ&J#;jcn$ح D^NFq5C endstream endobj 1001 0 obj 466 endobj 1002 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 74 /Height 105 /ColorSpace 1058 0 R /BitsPerComponent 8 /Length 1003 0 R >> stream shjn&?wr!NSM B\\v*_H; ~g܍UF@aWBI(.q:bƣ 5wP+ЗpiVUX)ұ]Wb"DYR OECV+b"lT;6 R*HIWޣHF;N=M4S 7zc%O f߷cl f߯^3}> endstream endobj 1003 0 obj 221 endobj 1004 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 74 /Height 105 /ColorSpace 1058 0 R /BitsPerComponent 8 /Length 1005 0 R >> stream s$ tR gu; JзYlu]|T!b}uAr/,(WtΚ a*l59|(Sf2ѱSѨoxZ>b^14{_2U`\X yD rVn;&5H7 5,ۍz@15s3(+)p6q8mq=Vdž2dÔ0D->yT{k҆DB%Ŝb2 t endstream endobj 1005 0 obj 301 endobj 1006 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 74 /Height 105 /ColorSpace 1058 0 R /BitsPerComponent 8 /Length 1007 0 R >> stream WU3ơfA{@!!2PV[؝-&C ! n2BCF^&h \~:> stream "BLf WP?p~H 8Mi@?BKjUwAe\b`Ss In}| F*N69 j~Qf׉#l[!3+f@OM5ܬY>^B!?~ZݦG%R:2H!iOA ftt^7| ػg]/DU'$E<+/L,P ]p;ugFcѢrn0UV=kӠ\H.'2*!NrAq6O^ڠi1juEĺnAxAp]XCO3vOW)x"4`eJOV| ~W> stream P'ux?.69hj:y(;Rf0JZ +}3#/ap0|%Jc|Wy5F{*@MO."X5 0 X%%Eު"FoqnV7 o- @49̊Yk=ԟMZ3{ɬ"TQ61P0&XA~Ńt33i`Am2S8/#xg" J ITpZzNjڻţah敒JM?baɔn *z*]r{1 `O4*Ze̵Bh~]ׇ{. !%5]ENJHC)P0uT)$o6|%n~ endstream endobj 1011 0 obj 430 endobj 1012 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 74 /Height 105 /ColorSpace 1058 0 R /BitsPerComponent 8 /Length 1013 0 R >> stream 3^vy1#[ Ä{ơx<{mB^uY۳.{ ;iR$X[J(0jYsH0.u/*s;CA*"ͧq)[30mIP~ {+˙tPt==*m6}nn>>$X #` CeZ)u8<Z{0_xOHuHa?mocNKGgr19]⹹אcL`Q̐X[9qkYh>0>+$OLMx~4WN@zLv!GWkF [}~:zQZ2X &Q pn.} endstream endobj 1013 0 obj 381 endobj 1014 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 74 /Height 105 /ColorSpace 1058 0 R /BitsPerComponent 8 /Length 1015 0 R >> stream *4, N.VOk(8ViaXeNNaLud>R%et7Z6xN[\+aƙ b]~KEgC䫉"@oO,̃.\#I@ v\(ȍg𜜄7nAEY5h,(U%dv!`Hӱ%F")8ˋ|m HY7|並TՎ<8Vo'/⩕.| ̪^ ,m9eyIqʿ U ˾NAf*džFf%\;*wAڧ endstream endobj 1015 0 obj 339 endobj 1016 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 74 /Height 105 /ColorSpace 1058 0 R /BitsPerComponent 8 /Length 1017 0 R >> stream nhz@ C>ua7hJ#GntK~, ^<V@ɽO.b_ڟM֚  #IT*DYӍ0HYع//`\Ǘ][|PZ.;^خ|1@kw>.s\kOTrҥVN}+Ml$[nbx35Y jc wA+)ޗxAq3ߪ |Loe!x7L&#" endstream endobj 1017 0 obj 252 endobj 1018 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 74 /Height 105 /ColorSpace 1058 0 R /BitsPerComponent 8 /Length 1019 0 R >> stream O}GAB29S$ʫ³kâ8,JlA ܢϴ3kK%B2Y/ n䜄gj$Ktf6dg<"}'"V v\U)dj%#&EŸ{hX2d\g"wc!7K?RZ)gfFn-Pd5sH˲r *: S5|`Wzھ ve8SsHx;ΈS *?rȢ,}Kw)1K"N6.+ͷlQO#V!a} gJ+)=|v3 endstream endobj 1019 0 obj 324 endobj 1020 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 74 /Height 105 /ColorSpace 1058 0 R /BitsPerComponent 8 /Length 1021 0 R >> stream f;(tb@ `Сk[A)2g=ĀhžWAMO ^|"&%+:9OL4SsK8 7=3,Nc 8r-J*8&cw=|RXgɦJsܼu6r"V@JL={)UzI:K*ҪEvآ^!-#dM,eyP%~1'!w0r3ޯe4rKv]C =vJMX܆ endstream endobj 1021 0 obj 299 endobj 1022 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 74 /Height 105 /ColorSpace 1058 0 R /BitsPerComponent 8 /Length 1023 0 R >> stream qH?eCpoV؇ S*ZGd Hy# 3mM4i4AaAe_ !/2aOs(`ċ=A^XDbشgV<4'+αZ.u9#&^G򳛿7OՁg^^] OA[ȈЍ¬ Nv{ݧy ԆIǖ$źVejN|M!vqo߽wuut=}pyVr_T!eq8siT>FW&WGJ;.0`<@jznlFw:IΛkD }DڍX*w N1}(CNP7I!fU`ʺ[e"ӽN*v[ ={\/27!R endstream endobj 1023 0 obj 431 endobj 1024 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 74 /Height 105 /ColorSpace 1058 0 R /BitsPerComponent 8 /Length 1025 0 R >> stream ѧ:gvWPjL[a\nkXXPyhȳl.r]JRY55guVbPWqri99+։hxzlYz7JR_ә>SQsOl5}I)xQq nBP <YXg==G,2=]~GJ/ b`fJ 9S^kɂc $\N<3zxpHi:ۍ*ѫoGQ`[:[-r SFU*&|¤߭csUM9_nBSѩEi0"' endstream endobj 1025 0 obj 350 endobj 1026 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 74 /Height 105 /ColorSpace 1058 0 R /BitsPerComponent 8 /Length 1027 0 R >> stream )<ؤ@2|E-$$V5UX&sj#zҎw'ثhujwDTLDl~:Z1S3x6S]'OBZ8}s>܌|O-y~1\> stream ʮ3M]Z&?"3z¬U+ Q^[/,ZdBZLv&p$5ޡ,Sl ?.K8hx%J)' jN߫Q{h!w#|ج 赯bm*=ܨ2rQ/y>}C]xk_]ڍQ] c މĠu[̈́Cko?=&UJ^2edC endstream endobj 1029 0 obj 257 endobj 1030 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 74 /Height 105 /ColorSpace 1058 0 R /BitsPerComponent 8 /Length 1031 0 R >> stream 07*" 4!Ǡp {FPQ[#y]mZKK8޺I^{ЖCdb|RD1-wn Ѡ}滥G {@ۡGb}h,n <B|ą/F טB&'Ax vү8δtc+"W50Žc^ )ш$rs#h+kK4 Qئ m'B:ho=Hffqb|P3m+cCp6Wt缾jY.϶g[IT endstream endobj 1031 0 obj 346 endobj 1032 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 74 /Height 105 /ColorSpace 1058 0 R /BitsPerComponent 8 /Length 1033 0 R >> stream | )y9б-yESxCIҭ09+WL<4 aPr Y"SΦA5B)W}i+Θ"̳#_;4fa6!rk&,T̰ݕwK䶨3%7G?ֶX+3 ( K(FnP>^𛋄ԇ^Q).f{ e>:D7Q}ܠh>Ƒ1)m5__@w< O)yH endstream endobj 1033 0 obj 365 endobj 1034 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 74 /Height 105 /ColorSpace 1058 0 R /BitsPerComponent 8 /Length 1035 0 R >> stream FK) X ?< WA GᜩZ rmP 8 ^NwKK+cWҳٹЎ'rc{RT h緹L3ޯ<;-EFD&tyo|~ҕa F_f < ^LiƓqZ/+hLfS&`'b8Do+Yl> stream n~+шAXm"OJ 2φ说@7dW7p O_&'A/ȡtbz?a=Qٺx(251+Le*f %mmTęvHL!PsjKlù PlݱxNv:]΢-VsRu(l]_|zXCTi%,Vo_X7kaߵz _P*]X4wdr))tΞ׃ ES|Q4Fa߃۫SG$ endstream endobj 1037 0 obj 298 endobj 1038 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 74 /Height 105 /ColorSpace 1058 0 R /BitsPerComponent 8 /Length 1039 0 R >> stream DshQJ{5UYqͧq0V^2;dw&͖&)>")OK=7g3]afuRKXTN{5==υ_aRCd+)ݗ!rLz A0[VP8Z!3pޥIw]FX>!xmRi>'Ne(Q׽> stream tdҰ!Ӹ=oPIߏ.f0ٷU՚-|ظ[=4$x)lR&BdK}6d>|ѡE>ߣ,P*"AfK#Mv2 2&Q W%aJ'k w8ߣ]̣D0e@^5';%/ϻomXUZ̍Z D|EK 7+I!Xr\t8$ڴ]兩=Պ endstream endobj 1041 0 obj 228 endobj 1042 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 74 /Height 105 /ColorSpace 1058 0 R /BitsPerComponent 8 /Length 1043 0 R >> stream agkf<:f&"y A7]m7_;uQy+7pr)-U uԯӬ[xi k#}&W# <T'yr`E.Aކlz:q4BT1xEBJJM$dl;8 endstream endobj 1043 0 obj 172 endobj 1044 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 74 /Height 105 /ColorSpace 1058 0 R /BitsPerComponent 8 /Length 1045 0 R >> stream e]eaKgWV/S(yqxq1ED?Ͷ&SE>əc8tbҪ!DZ!VâՊ̯'lclJqWXSb(tJ92]5MS9 endstream endobj 1045 0 obj 163 endobj 1046 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 74 /Height 105 /ColorSpace 1058 0 R /BitsPerComponent 8 /Length 1047 0 R >> stream (4=mLb<= b5`|'ohd1/(YzEJ)4'-6Y=q%0k_5A}/ $ )zjv(FҘw5Bny(XA0/ endstream endobj 1047 0 obj 147 endobj 1048 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 74 /Height 105 /ColorSpace 1058 0 R /BitsPerComponent 8 /Length 1049 0 R >> stream h UA;mH LRo}d/杨^kpf@2Wi@ॡƱ:3W1jNl%Z4઺ \[R-7$-yS>Eص@љ+,' ~;Dvѯ$ T({5[%̫>_l tfa)vb] \~ћg;203Ro&Ϫc) BԎT,UFCp0U!z93M>4WlXKk %m@VNmbVbdhD|u΀#qX,^OkjThx^vNxXR7׃bg endstream endobj 1049 0 obj 381 endobj 1050 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 74 /Height 105 /ColorSpace 1058 0 R /BitsPerComponent 8 /Length 1051 0 R >> stream A> stream LmB-œ)J푁dA0z1smYnuLfmÏySc}]! +}Ckoä̚j\zĔ[Vc[Mj9Zb[>N} ۱?1MQp*7+TP~et]VjؓMQS~M絞]L qLƧ<~("$A>5c#!hDhժ<,ڸo[ɉ>I3w{,=䶡o),eZv4 A]s=du=94 س NE>WOuUprW64HX33ɮOW> stream x1NY !LpaHsh`<29ڠr؍֌_)g,CpڹA}4O{E֬Vp ᡳ+-7 #F[6}a'YM*eqE,_kx+qHā4t^(al!~:Td\׳ uܤ/mm endstream endobj 1055 0 obj 202 endobj 1056 0 obj 481 endobj 1057 0 obj << /Filter [ /ASCII85Decode /LZWDecode ] /Length 1056 0 R >> stream ׈ޡ2/ "b7$bWuy$vؿ|埄mx2uԀovV@[ũ 438 I5lv I0daqlxuox}WS6&$}7! endstream endobj 1058 0 obj [ /Indexed /DeviceRGB 255 1057 0 R ] endobj 1059 0 obj << /S /D >> endobj 1060 0 obj << /Nums [ 0 1059 0 R ] >> endobj 1061 0 obj << /Producer (a`#<X\\lftĸʄjM) /Author (m/xs &Pmf) /Creator (a`#3s\)/Y9?}) /Title (,kgo6Jzn}Ԑzo\\/CF-4~) /CreationDate (\\>3s\)/Y8?}) >> endobj 1062 0 obj << /Type /Metadata /Subtype /XML /Length 1227 >> stream qveט x }6Y#g"~6Ha%s56_N-P-0a7@܊\O)bּ#{\d+{›N:0ٛ|@@_t5(3Ӳ$!-+Oox `E ~k蔱ڜ9؞* cz4$0IW)z5 p޳°էh :Ji \} jჽ)/ )JA:3Um-jfYciwv;cBˌ&ݐqlhM~AApF4dKtr.lʵ Jt+Sn!Lok o S(Wǐ!Oo֗<w;rH9xJ8 n Z{6Crԗ !l ڞXho3;uU4A6Mf*xIL@OCu:͋݉ߍ`T%m/u.fV 3IRKS r,Gz+}^EF?JylῊB蟞 %8<RKR/-]P(R>e BH_]ց/ bEM͈^8ix̷$ɖatWS?E0= d]V?{> endobj 1064 0 obj << /Type /Pages /Kids [ 1063 0 R 1065 0 R 1066 0 R ] /Count 28 >> endobj 1065 0 obj << /Type /Pages /Kids [ 98 0 R 101 0 R 104 0 R 107 0 R 110 0 R 113 0 R 116 0 R 119 0 R 126 0 R 129 0 R ] /Count 10 /Parent 1064 0 R >> endobj 1066 0 obj << /Type /Pages /Kids [ 132 0 R 135 0 R 138 0 R 141 0 R 145 0 R 149 0 R 153 0 R 156 0 R ] /Count 8 /Parent 1064 0 R >> endobj xref 0 1067 0000000000 65535 f 0000278724 00000 n 0000279068 00000 n 0000280611 00000 n 0000280632 00000 n 0000280991 00000 n 0000281185 00000 n 0000281321 00000 n 0000281456 00000 n 0000281594 00000 n 0000281729 00000 n 0000281870 00000 n 0000282012 00000 n 0000282154 00000 n 0000282290 00000 n 0000282431 00000 n 0000282573 00000 n 0000282715 00000 n 0000282851 00000 n 0000282992 00000 n 0000283134 00000 n 0000283276 00000 n 0000283410 00000 n 0000283552 00000 n 0000283694 00000 n 0000283836 00000 n 0000283972 00000 n 0000284114 00000 n 0000284256 00000 n 0000284398 00000 n 0000284540 00000 n 0000284682 00000 n 0000289014 00000 n 0000289036 00000 n 0000289101 00000 n 0000289166 00000 n 0000289231 00000 n 0000289296 00000 n 0000289361 00000 n 0000289426 00000 n 0000289491 00000 n 0000289556 00000 n 0000289621 00000 n 0000289686 00000 n 0000289752 00000 n 0000289818 00000 n 0000289884 00000 n 0000289950 00000 n 0000290016 00000 n 0000290082 00000 n 0000290148 00000 n 0000290214 00000 n 0000290280 00000 n 0000290346 00000 n 0000290412 00000 n 0000290478 00000 n 0000290544 00000 n 0000290610 00000 n 0000290676 00000 n 0000291037 00000 n 0000291115 00000 n 0000291257 00000 n 0000291396 00000 n 0000291537 00000 n 0000291677 00000 n 0000291818 00000 n 0000291958 00000 n 0000292098 00000 n 0000292239 00000 n 0000294069 00000 n 0000294091 00000 n 0000294157 00000 n 0000294223 00000 n 0000294289 00000 n 0000294355 00000 n 0000294421 00000 n 0000294487 00000 n 0000294553 00000 n 0000294619 00000 n 0000294993 00000 n 0000295023 00000 n 0000298604 00000 n 0000298626 00000 n 0000298690 00000 n 0000299063 00000 n 0000303176 00000 n 0000303198 00000 n 0000303543 00000 n 0000307414 00000 n 0000307436 00000 n 0000307781 00000 n 0000311084 00000 n 0000311106 00000 n 0000311451 00000 n 0000313982 00000 n 0000314004 00000 n 0000314350 00000 n 0000317034 00000 n 0000317056 00000 n 0000317402 00000 n 0000320148 00000 n 0000320171 00000 n 0000320532 00000 n 0000324908 00000 n 0000324931 00000 n 0000325279 00000 n 0000328784 00000 n 0000328807 00000 n 0000329155 00000 n 0000332123 00000 n 0000332146 00000 n 0000332494 00000 n 0000334877 00000 n 0000334900 00000 n 0000335248 00000 n 0000338406 00000 n 0000338429 00000 n 0000338777 00000 n 0000341876 00000 n 0000341899 00000 n 0000342292 00000 n 0000342450 00000 n 0000342608 00000 n 0000342766 00000 n 0000342924 00000 n 0000347196 00000 n 0000347219 00000 n 0000347567 00000 n 0000349829 00000 n 0000349852 00000 n 0000350201 00000 n 0000351597 00000 n 0000351620 00000 n 0000351969 00000 n 0000353617 00000 n 0000353640 00000 n 0000353988 00000 n 0000355246 00000 n 0000355269 00000 n 0000355617 00000 n 0000357061 00000 n 0000357084 00000 n 0000357449 00000 n 0000357480 00000 n 0000358454 00000 n 0000358476 00000 n 0000358841 00000 n 0000358888 00000 n 0000363208 00000 n 0000363231 00000 n 0000363610 00000 n 0000363641 00000 n 0000369088 00000 n 0000369111 00000 n 0000369460 00000 n 0000373746 00000 n 0000373769 00000 n 0000374118 00000 n 0000375124 00000 n 0000375146 00000 n 0000375302 00000 n 0000375492 00000 n 0000375957 00000 n 0000376445 00000 n 0000376652 00000 n 0000383665 00000 n 0000383880 00000 n 0000392073 00000 n 0000392318 00000 n 0000401344 00000 n 0000401571 00000 n 0000424149 00000 n 0000424389 00000 n 0000424703 00000 n 0000424862 00000 n 0000425021 00000 n 0000425123 00000 n 0000425285 00000 n 0000425349 00000 n 0000425511 00000 n 0000425575 00000 n 0000425737 00000 n 0000425802 00000 n 0000425964 00000 n 0000426054 00000 n 0000426121 00000 n 0000426277 00000 n 0000426400 00000 n 0000426524 00000 n 0000426658 00000 n 0000426790 00000 n 0000426934 00000 n 0000427079 00000 n 0000427262 00000 n 0000427419 00000 n 0000427530 00000 n 0000427656 00000 n 0000427846 00000 n 0000428031 00000 n 0000428198 00000 n 0000428343 00000 n 0000428500 00000 n 0000428663 00000 n 0000428843 00000 n 0000428984 00000 n 0000429123 00000 n 0000429274 00000 n 0000429452 00000 n 0000429587 00000 n 0000429720 00000 n 0000429865 00000 n 0000430000 00000 n 0000430133 00000 n 0000430277 00000 n 0000430406 00000 n 0000430534 00000 n 0000430673 00000 n 0000430770 00000 n 0000431482 00000 n 0000431566 00000 n 0000431650 00000 n 0000432223 00000 n 0000432375 00000 n 0000432459 00000 n 0000432543 00000 n 0000432627 00000 n 0000432711 00000 n 0000432795 00000 n 0000432879 00000 n 0000432963 00000 n 0000433047 00000 n 0000433132 00000 n 0000433217 00000 n 0000433302 00000 n 0000433387 00000 n 0000433472 00000 n 0000433557 00000 n 0000433642 00000 n 0000433727 00000 n 0000433812 00000 n 0000433897 00000 n 0000433982 00000 n 0000434067 00000 n 0000434152 00000 n 0000434237 00000 n 0000434322 00000 n 0000434407 00000 n 0000434492 00000 n 0000434577 00000 n 0000434662 00000 n 0000434747 00000 n 0000434832 00000 n 0000434917 00000 n 0000435000 00000 n 0000435083 00000 n 0000435235 00000 n 0000435318 00000 n 0000435403 00000 n 0000435488 00000 n 0000435573 00000 n 0000435713 00000 n 0000435820 00000 n 0000435986 00000 n 0000436067 00000 n 0000436222 00000 n 0000436303 00000 n 0000436410 00000 n 0000436491 00000 n 0000436650 00000 n 0000436731 00000 n 0000436840 00000 n 0000436921 00000 n 0000437003 00000 n 0000437112 00000 n 0000437194 00000 n 0000437276 00000 n 0000437385 00000 n 0000437467 00000 n 0000437622 00000 n 0000437704 00000 n 0000437813 00000 n 0000437895 00000 n 0000437977 00000 n 0000438086 00000 n 0000438168 00000 n 0000438250 00000 n 0000438359 00000 n 0000438441 00000 n 0000438523 00000 n 0000438632 00000 n 0000438714 00000 n 0000438796 00000 n 0000438905 00000 n 0000438987 00000 n 0000439069 00000 n 0000439178 00000 n 0000439260 00000 n 0000439342 00000 n 0000439451 00000 n 0000439533 00000 n 0000439615 00000 n 0000439724 00000 n 0000439806 00000 n 0000439888 00000 n 0000439997 00000 n 0000440079 00000 n 0000440161 00000 n 0000440270 00000 n 0000440352 00000 n 0000440434 00000 n 0000440543 00000 n 0000440625 00000 n 0000440707 00000 n 0000440816 00000 n 0000440898 00000 n 0000440980 00000 n 0000441089 00000 n 0000441171 00000 n 0000441253 00000 n 0000441362 00000 n 0000441444 00000 n 0000441526 00000 n 0000441635 00000 n 0000441717 00000 n 0000441799 00000 n 0000441908 00000 n 0000441990 00000 n 0000442072 00000 n 0000442181 00000 n 0000442263 00000 n 0000442345 00000 n 0000442454 00000 n 0000442536 00000 n 0000442618 00000 n 0000442727 00000 n 0000442809 00000 n 0000442891 00000 n 0000442999 00000 n 0000443081 00000 n 0000443163 00000 n 0000443271 00000 n 0000443353 00000 n 0000443435 00000 n 0000443544 00000 n 0000443626 00000 n 0000443709 00000 n 0000443819 00000 n 0000443902 00000 n 0000443985 00000 n 0000444095 00000 n 0000444178 00000 n 0000444261 00000 n 0000444371 00000 n 0000444454 00000 n 0000444537 00000 n 0000444647 00000 n 0000444730 00000 n 0000444813 00000 n 0000444923 00000 n 0000445006 00000 n 0000445089 00000 n 0000445176 00000 n 0000445274 00000 n 0000445441 00000 n 0000445533 00000 n 0000445630 00000 n 0000445803 00000 n 0000445914 00000 n 0000446019 00000 n 0000446101 00000 n 0000446214 00000 n 0000446306 00000 n 0000446473 00000 n 0000446571 00000 n 0000446743 00000 n 0000446841 00000 n 0000446958 00000 n 0000447050 00000 n 0000447147 00000 n 0000447244 00000 n 0000447341 00000 n 0000447444 00000 n 0000447524 00000 n 0000447627 00000 n 0000447707 00000 n 0000447810 00000 n 0000447890 00000 n 0000447998 00000 n 0000448073 00000 n 0000448170 00000 n 0000448267 00000 n 0000448364 00000 n 0000448461 00000 n 0000448553 00000 n 0000448650 00000 n 0000448827 00000 n 0000448922 00000 n 0000449023 00000 n 0000449196 00000 n 0000449297 00000 n 0000449455 00000 n 0000449556 00000 n 0000449657 00000 n 0000449758 00000 n 0000449860 00000 n 0000449969 00000 n 0000450023 00000 n 0000450121 00000 n 0000450213 00000 n 0000450315 00000 n 0000450488 00000 n 0000450580 00000 n 0000450682 00000 n 0000450784 00000 n 0000450875 00000 n 0000450976 00000 n 0000451067 00000 n 0000451168 00000 n 0000451259 00000 n 0000451360 00000 n 0000451457 00000 n 0000451558 00000 n 0000451731 00000 n 0000451832 00000 n 0000451923 00000 n 0000452025 00000 n 0000452127 00000 n 0000452219 00000 n 0000452321 00000 n 0000452423 00000 n 0000452525 00000 n 0000452627 00000 n 0000452719 00000 n 0000452821 00000 n 0000452923 00000 n 0000453015 00000 n 0000453117 00000 n 0000453219 00000 n 0000453321 00000 n 0000453413 00000 n 0000453515 00000 n 0000453606 00000 n 0000453707 00000 n 0000453808 00000 n 0000453909 00000 n 0000454000 00000 n 0000454101 00000 n 0000454202 00000 n 0000454303 00000 n 0000454394 00000 n 0000454495 00000 n 0000454597 00000 n 0000454699 00000 n 0000454797 00000 n 0000454899 00000 n 0000455001 00000 n 0000455103 00000 n 0000455195 00000 n 0000455297 00000 n 0000455399 00000 n 0000455491 00000 n 0000455593 00000 n 0000455695 00000 n 0000455787 00000 n 0000455889 00000 n 0000455991 00000 n 0000456099 00000 n 0000456153 00000 n 0000456250 00000 n 0000456347 00000 n 0000456448 00000 n 0000456545 00000 n 0000456646 00000 n 0000456743 00000 n 0000456844 00000 n 0000456941 00000 n 0000457042 00000 n 0000457140 00000 n 0000457242 00000 n 0000457340 00000 n 0000457442 00000 n 0000457551 00000 n 0000457605 00000 n 0000457703 00000 n 0000457801 00000 n 0000457899 00000 n 0000457991 00000 n 0000458088 00000 n 0000458180 00000 n 0000458277 00000 n 0000458368 00000 n 0000458469 00000 n 0000458570 00000 n 0000458661 00000 n 0000458762 00000 n 0000458863 00000 n 0000458955 00000 n 0000459057 00000 n 0000459159 00000 n 0000459251 00000 n 0000459353 00000 n 0000459451 00000 n 0000459553 00000 n 0000459651 00000 n 0000459753 00000 n 0000459851 00000 n 0000459953 00000 n 0000460045 00000 n 0000460147 00000 n 0000460245 00000 n 0000460354 00000 n 0000460408 00000 n 0000460506 00000 n 0000460615 00000 n 0000460669 00000 n 0000460767 00000 n 0000460865 00000 n 0000460958 00000 n 0000461056 00000 n 0000461152 00000 n 0000461254 00000 n 0000461356 00000 n 0000461459 00000 n 0000461562 00000 n 0000461665 00000 n 0000461768 00000 n 0000461870 00000 n 0000461979 00000 n 0000462033 00000 n 0000462131 00000 n 0000462223 00000 n 0000462325 00000 n 0000462417 00000 n 0000462519 00000 n 0000462611 00000 n 0000462713 00000 n 0000462811 00000 n 0000462914 00000 n 0000463017 00000 n 0000463110 00000 n 0000463213 00000 n 0000463316 00000 n 0000463409 00000 n 0000463512 00000 n 0000463615 00000 n 0000463718 00000 n 0000463821 00000 n 0000463914 00000 n 0000464017 00000 n 0000464120 00000 n 0000464212 00000 n 0000464314 00000 n 0000464416 00000 n 0000464518 00000 n 0000464610 00000 n 0000464712 00000 n 0000464804 00000 n 0000464906 00000 n 0000465008 00000 n 0000465110 00000 n 0000465203 00000 n 0000465306 00000 n 0000465409 00000 n 0000465512 00000 n 0000465605 00000 n 0000465708 00000 n 0000465811 00000 n 0000465914 00000 n 0000466013 00000 n 0000466116 00000 n 0000466219 00000 n 0000466322 00000 n 0000466415 00000 n 0000466518 00000 n 0000466621 00000 n 0000466724 00000 n 0000466816 00000 n 0000466918 00000 n 0000467020 00000 n 0000467122 00000 n 0000467214 00000 n 0000467316 00000 n 0000467418 00000 n 0000467520 00000 n 0000467629 00000 n 0000467683 00000 n 0000467781 00000 n 0000467880 00000 n 0000467983 00000 n 0000468082 00000 n 0000468185 00000 n 0000468284 00000 n 0000468387 00000 n 0000468486 00000 n 0000468589 00000 n 0000468688 00000 n 0000468791 00000 n 0000468890 00000 n 0000468993 00000 n 0000469102 00000 n 0000469156 00000 n 0000469254 00000 n 0000469352 00000 n 0000469445 00000 n 0000469543 00000 n 0000469652 00000 n 0000469706 00000 n 0000469804 00000 n 0000469896 00000 n 0000469998 00000 n 0000470100 00000 n 0000470193 00000 n 0000470296 00000 n 0000470399 00000 n 0000470492 00000 n 0000470595 00000 n 0000470698 00000 n 0000470797 00000 n 0000470900 00000 n 0000470999 00000 n 0000471102 00000 n 0000471200 00000 n 0000471302 00000 n 0000471394 00000 n 0000471496 00000 n 0000471598 00000 n 0000471707 00000 n 0000471761 00000 n 0000471859 00000 n 0000471957 00000 n 0000472059 00000 n 0000472168 00000 n 0000472222 00000 n 0000472321 00000 n 0000472420 00000 n 0000472519 00000 n 0000472618 00000 n 0000472712 00000 n 0000472811 00000 n 0000472910 00000 n 0000473003 00000 n 0000473101 00000 n 0000473197 00000 n 0000473299 00000 n 0000473401 00000 n 0000473503 00000 n 0000473605 00000 n 0000473707 00000 n 0000473809 00000 n 0000473911 00000 n 0000474021 00000 n 0000474075 00000 n 0000474174 00000 n 0000474284 00000 n 0000474338 00000 n 0000474437 00000 n 0000474546 00000 n 0000474600 00000 n 0000474698 00000 n 0000474794 00000 n 0000474896 00000 n 0000474998 00000 n 0000475107 00000 n 0000475161 00000 n 0000475259 00000 n 0000475357 00000 n 0000475459 00000 n 0000475557 00000 n 0000475660 00000 n 0000475759 00000 n 0000475862 00000 n 0000475961 00000 n 0000476064 00000 n 0000476163 00000 n 0000476266 00000 n 0000476365 00000 n 0000476468 00000 n 0000476561 00000 n 0000476659 00000 n 0000476763 00000 n 0000476843 00000 n 0000476947 00000 n 0000477027 00000 n 0000477131 00000 n 0000477211 00000 n 0000477309 00000 n 0000477421 00000 n 0000477514 00000 n 0000477612 00000 n 0000477716 00000 n 0000477796 00000 n 0000477900 00000 n 0000477980 00000 n 0000478084 00000 n 0000478164 00000 n 0000478268 00000 n 0000478348 00000 n 0000478446 00000 n 0000478558 00000 n 0000478651 00000 n 0000478749 00000 n 0000478845 00000 n 0000478941 00000 n 0000479097 00000 n 0000479193 00000 n 0000479289 00000 n 0000479385 00000 n 0000479481 00000 n 0000479577 00000 n 0000479673 00000 n 0000479770 00000 n 0000479867 00000 n 0000479966 00000 n 0000480059 00000 n 0000480155 00000 n 0000480251 00000 n 0000480347 00000 n 0000480443 00000 n 0000480539 00000 n 0000480635 00000 n 0000480731 00000 n 0000480827 00000 n 0000480923 00000 n 0000481020 00000 n 0000481117 00000 n 0000481216 00000 n 0000481315 00000 n 0000481408 00000 n 0000481520 00000 n 0000481626 00000 n 0000481709 00000 n 0000481802 00000 n 0000481914 00000 n 0000482020 00000 n 0000482103 00000 n 0000482215 00000 n 0000482321 00000 n 0000482404 00000 n 0000482502 00000 n 0000482600 00000 n 0000482698 00000 n 0000482797 00000 n 0000482896 00000 n 0000483010 00000 n 0000483116 00000 n 0000483200 00000 n 0000483299 00000 n 0000483414 00000 n 0000483474 00000 n 0000483573 00000 n 0000483671 00000 n 0000483775 00000 n 0000483928 00000 n 0000484038 00000 n 0000484191 00000 n 0000484347 00000 n 0000484453 00000 n 0000484536 00000 n 0000484626 00000 n 0000484722 00000 n 0000484890 00000 n 0000484980 00000 n 0000485076 00000 n 0000485166 00000 n 0000485263 00000 n 0000485354 00000 n 0000485492 00000 n 0000485588 00000 n 0000485678 00000 n 0000485774 00000 n 0000485864 00000 n 0000485960 00000 n 0000486050 00000 n 0000486146 00000 n 0000486242 00000 n 0000486338 00000 n 0000486435 00000 n 0000486532 00000 n 0000486628 00000 n 0000486718 00000 n 0000486814 00000 n 0000486910 00000 n 0000487022 00000 n 0000487076 00000 n 0000487188 00000 n 0000487242 00000 n 0000487354 00000 n 0000487408 00000 n 0000487520 00000 n 0000487574 00000 n 0000487670 00000 n 0000487768 00000 n 0000487870 00000 n 0000487963 00000 n 0000488065 00000 n 0000488158 00000 n 0000488300 00000 n 0000488394 00000 n 0000488521 00000 n 0000488612 00000 n 0000489009 00000 n 0000489089 00000 n 0000492102 00000 n 0000492424 00000 n 0000492480 00000 n 0000492537 00000 n 0000492593 00000 n 0000492650 00000 n 0000492706 00000 n 0000492763 00000 n 0000492847 00000 n 0000492904 00000 n 0000492961 00000 n 0000493018 00000 n 0000493074 00000 n 0000493131 00000 n 0000493187 00000 n 0000493244 00000 n 0000493300 00000 n 0000493357 00000 n 0000493413 00000 n 0000493470 00000 n 0000493526 00000 n 0000493583 00000 n 0000493639 00000 n 0000493696 00000 n 0000493752 00000 n 0000493809 00000 n 0000493865 00000 n 0000493922 00000 n 0000493978 00000 n 0000494035 00000 n 0000494091 00000 n 0000494148 00000 n 0000494204 00000 n 0000494261 00000 n 0000494317 00000 n 0000494374 00000 n 0000494430 00000 n 0000494487 00000 n 0000494543 00000 n 0000494600 00000 n 0000494656 00000 n 0000494713 00000 n 0000494769 00000 n 0000494826 00000 n 0000494882 00000 n 0000494939 00000 n 0000494995 00000 n 0000495052 00000 n 0000495108 00000 n 0000495165 00000 n 0000495221 00000 n 0000495278 00000 n 0000495334 00000 n 0000495391 00000 n 0000495447 00000 n 0000495504 00000 n 0000495560 00000 n 0000495617 00000 n 0000495673 00000 n 0000495730 00000 n 0000495806 00000 n 0000495863 00000 n 0000495920 00000 n 0000495977 00000 n 0000496033 00000 n 0000496090 00000 n 0000496174 00000 n 0000496231 00000 n 0000496288 00000 n 0000496345 00000 n 0000496402 00000 n 0000496458 00000 n 0000496515 00000 n 0000496571 00000 n 0000496628 00000 n 0000496684 00000 n 0000496741 00000 n 0000496797 00000 n 0000496854 00000 n 0000496910 00000 n 0000496967 00000 n 0000497023 00000 n 0000497080 00000 n 0000497136 00000 n 0000497193 00000 n 0000497249 00000 n 0000497306 00000 n 0000497362 00000 n 0000497419 00000 n 0000497475 00000 n 0000497532 00000 n 0000497588 00000 n 0000497645 00000 n 0000497701 00000 n 0000497758 00000 n 0000497853 00000 n 0000497947 00000 n 0000498039 00000 n 0000498174 00000 n 0000498579 00000 n 0000498829 00000 n 0000498949 00000 n 0000499280 00000 n 0000500091 00000 n 0000500160 00000 n 0000500229 00000 n 0000500298 00000 n 0000500367 00000 n 0000500436 00000 n 0000500505 00000 n 0000500574 00000 n 0000500643 00000 n 0000500712 00000 n 0000500781 00000 n 0000500850 00000 n 0000500919 00000 n 0000500988 00000 n 0000501057 00000 n 0000501126 00000 n 0000501195 00000 n 0000501264 00000 n 0000501333 00000 n 0000501402 00000 n 0000501471 00000 n 0000501540 00000 n 0000501609 00000 n 0000501678 00000 n 0000501747 00000 n 0000501816 00000 n 0000501885 00000 n 0000501954 00000 n 0000502023 00000 n 0000502092 00000 n 0000502161 00000 n 0000502230 00000 n 0000502299 00000 n 0000502368 00000 n 0000502437 00000 n 0000502506 00000 n 0000502575 00000 n 0000502644 00000 n 0000502713 00000 n 0000502782 00000 n 0000502851 00000 n 0000502920 00000 n 0000502989 00000 n 0000503058 00000 n 0000503127 00000 n 0000503196 00000 n 0000503265 00000 n 0000503334 00000 n 0000503403 00000 n 0000503472 00000 n 0000503771 00000 n 0000503840 00000 n 0000503909 00000 n 0000503978 00000 n 0000504047 00000 n 0000504116 00000 n 0000504185 00000 n 0000504254 00000 n 0000504323 00000 n 0000504392 00000 n 0000504461 00000 n 0000504530 00000 n 0000504599 00000 n 0000504668 00000 n 0000504737 00000 n 0000504806 00000 n 0000504958 00000 n 0000505027 00000 n 0000505131 00000 n 0000505300 00000 n 0000505534 00000 n 0000505760 00000 n 0000505929 00000 n 0000506146 00000 n 0000506282 00000 n 0000506491 00000 n 0000506725 00000 n 0000506926 00000 n 0000507111 00000 n 0000507272 00000 n 0000507408 00000 n 0000507585 00000 n 0000507681 00000 n 0000507785 00000 n 0000507913 00000 n 0000508049 00000 n 0000508104 00000 n 0000508173 00000 n 0000508342 00000 n 0000508411 00000 n 0000508480 00000 n 0000508549 00000 n 0000508677 00000 n 0000508746 00000 n 0000508866 00000 n 0000508970 00000 n 0000509601 00000 n 0000509624 00000 n 0000510010 00000 n 0000510033 00000 n 0000510499 00000 n 0000510522 00000 n 0000510844 00000 n 0000510867 00000 n 0000511432 00000 n 0000511455 00000 n 0000512050 00000 n 0000512073 00000 n 0000512619 00000 n 0000512642 00000 n 0000513146 00000 n 0000513169 00000 n 0000513586 00000 n 0000513609 00000 n 0000514098 00000 n 0000514121 00000 n 0000514585 00000 n 0000514608 00000 n 0000515204 00000 n 0000515227 00000 n 0000515742 00000 n 0000515765 00000 n 0000516214 00000 n 0000516237 00000 n 0000516659 00000 n 0000516682 00000 n 0000517193 00000 n 0000517216 00000 n 0000517746 00000 n 0000517769 00000 n 0000518362 00000 n 0000518385 00000 n 0000518848 00000 n 0000518871 00000 n 0000519233 00000 n 0000519256 00000 n 0000519649 00000 n 0000519672 00000 n 0000520009 00000 n 0000520032 00000 n 0000520360 00000 n 0000520383 00000 n 0000520695 00000 n 0000520718 00000 n 0000521264 00000 n 0000521287 00000 n 0000521930 00000 n 0000521953 00000 n 0000522534 00000 n 0000522557 00000 n 0000522924 00000 n 0000522947 00000 n 0000522970 00000 n 0000523550 00000 n 0000523607 00000 n 0000523640 00000 n 0000523688 00000 n 0000523971 00000 n 0000525285 00000 n 0000525436 00000 n 0000525525 00000 n 0000525685 00000 n trailer << /Size 1067 /ID[] >> startxref 173 %%EOF egenix-mx-base-3.2.7/mx/BeeBase/mxBeeBase/0000755000175000017500000000000012251446113017754 5ustar lemburglemburgegenix-mx-base-3.2.7/mx/BeeBase/mxBeeBase/COPYRIGHT0000664000175000017500000000400107315370421021247 0ustar lemburglemburg --------------------------------------------------------------------- COPYRIGHT NOTICE --------------------------------------------------------------------- Copyright (c) 1997-2000, Marc-Andre Lemburg; mailto:mal@lemburg.com Copyright (c) 2000-2001, eGenix.com Software GmbH; mailto:info@egenix.com All Rights Reserved. This software is protected by copyright and other intellectual property laws and by international treaties. It may only be used under the conditions and terms of the eGenix.com Public License Agreement. You should have received a copy of the eGenix.com Public License Agreement with this software (usually in the file LICENSE located in the package's or software's main directory). Please write to licenses@egenix.com to obtain a copy in case you should not have received a copy. --------------------------------------------------------------------- Parts of this package are based on an ANSI C implementation of a B+Tree implementation written by Thomas Nieman, Portland, Oregon. The files in question are btr.c and btr.h which were heavily modified for the purpose of inclusion in this package by the above author. The original files were extracted from btr.c -- an ANSI C implementation included in the source code distribution of SORTING AND SEARCHING ALGORITHMS: A COOKBOOK by THOMAS NIEMANN Portland, Oregon email: thomasn@jps.net home: http://members.xoom.com/thomasn/s_man.htm From the cookbook: Permission to reproduce this document, in whole or in part, is given provided the original web site listed below is referenced, and no additional restrictions apply. Source code, when part of a software project, may be used freely without reference to the author. --------------------------------------------------------------------- egenix-mx-base-3.2.7/mx/BeeBase/mxBeeBase/LICENSE0000664000175000017500000001075307620177404021001 0ustar lemburglemburg________________________________________________________________________ EGENIX.COM PUBLIC LICENSE AGREEMENT VERSION 1.1.0 ________________________________________________________________________ 1. Introduction This "License Agreement" is between eGenix.com Software, Skills and Services GmbH ("eGenix.com"), having an office at Pastor-Loeh-Str. 48, D-40764 Langenfeld, Germany, and the Individual or Organization ("Licensee") accessing and otherwise using this software in source or binary form and its associated documentation ("the Software"). 2. License Subject to the terms and conditions of this eGenix.com Public License Agreement, eGenix.com hereby grants Licensee a non-exclusive, royalty-free, world-wide license to reproduce, analyze, test, perform and/or display publicly, prepare derivative works, distribute, and otherwise use the Software alone or in any derivative version, provided, however, that the eGenix.com Public License Agreement is retained in the Software, or in any derivative version of the Software prepared by Licensee. 3. NO WARRANTY eGenix.com is making the Software available to Licensee on an "AS IS" basis. SUBJECT TO ANY STATUTORY WARRANTIES WHICH CAN NOT BE EXCLUDED, EGENIX.COM MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, EGENIX.COM MAKES NO AND DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF THE SOFTWARE WILL NOT INFRINGE ANY THIRD PARTY RIGHTS. 4. LIMITATION OF LIABILITY EGENIX.COM SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF THE SOFTWARE FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS (INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF BUSINESS PROFITS, BUSINESS INTERRUPTION, LOSS OF BUSINESS INFORMATION, OR OTHER PECUNIARY LOSS) AS A RESULT OF USING, MODIFYING OR DISTRIBUTING THE SOFTWARE, OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO THE ABOVE EXCLUSION OR LIMITATION MAY NOT APPLY TO LICENSEE. 5. Termination This License Agreement will automatically terminate upon a material breach of its terms and conditions. 6. Third Party Rights Any software or documentation in source or binary form provided along with the Software that is associated with a separate license agreement is licensed to Licensee under the terms of that license agreement. This License Agreement does not apply to those portions of the Software. Copies of the third party licenses are included in the Software Distribution. 7. General Nothing in this License Agreement affects any statutory rights of consumers that cannot be waived or limited by contract. Nothing in this License Agreement shall be deemed to create any relationship of agency, partnership, or joint venture between eGenix.com and Licensee. If any provision of this License Agreement shall be unlawful, void, or for any reason unenforceable, such provision shall be modified to the extent necessary to render it enforceable without losing its intent, or, if no such modification is possible, be severed from this License Agreement and shall not affect the validity and enforceability of the remaining provisions of this License Agreement. This License Agreement shall be governed by and interpreted in all respects by the law of Germany, excluding conflict of law provisions. It shall not be governed by the United Nations Convention on Contracts for International Sale of Goods. This License Agreement does not grant permission to use eGenix.com trademarks or trade names in a trademark sense to endorse or promote products or services of Licensee, or any third party. The controlling language of this License Agreement is English. If Licensee has received a translation into another language, it has been provided for Licensee's convenience only. 8. Agreement By downloading, copying, installing or otherwise using the Software, Licensee agrees to be bound by the terms and conditions of this License Agreement. For question regarding this License Agreement, please write to: eGenix.com Software, Skills and Services GmbH Pastor-Loeh-Str. 48 D-40764 Langenfeld Germany egenix-mx-base-3.2.7/mx/BeeBase/mxBeeBase/Makefile.pre.in0000664000175000017500000002445111136427173022624 0ustar lemburglemburg# Universal Unix Makefile for Python extensions # ============================================= # Short Instructions # ------------------ # 1. Build and install Python (1.5 or newer). # 2. "make -f Makefile.pre.in boot" # 3. "make" # You should now have a shared library. # Long Instructions # ----------------- # Build *and install* the basic Python 1.5 distribution. See the # Python README for instructions. (This version of Makefile.pre.in # only withs with Python 1.5, alpha 3 or newer.) # Create a file Setup.in for your extension. This file follows the # format of the Modules/Setup.dist file; see the instructions there. # For a simple module called "spam" on file "spammodule.c", it can # contain a single line: # spam spammodule.c # You can build as many modules as you want in the same directory -- # just have a separate line for each of them in the Setup.in file. # If you want to build your extension as a shared library, insert a # line containing just the string # *shared* # at the top of your Setup.in file. # Note that the build process copies Setup.in to Setup, and then works # with Setup. It doesn't overwrite Setup when Setup.in is changed, so # while you're in the process of debugging your Setup.in file, you may # want to edit Setup instead, and copy it back to Setup.in later. # (All this is done so you can distribute your extension easily and # someone else can select the modules they actually want to build by # commenting out lines in the Setup file, without editing the # original. Editing Setup is also used to specify nonstandard # locations for include or library files.) # Copy this file (Misc/Makefile.pre.in) to the directory containing # your extension. # Run "make -f Makefile.pre.in boot". This creates Makefile # (producing Makefile.pre and sedscript as intermediate files) and # config.c, incorporating the values for sys.prefix, sys.exec_prefix # and sys.version from the installed Python binary. For this to work, # the python binary must be on your path. If this fails, try # make -f Makefile.pre.in Makefile VERSION=1.5 installdir= # where is the prefix used to install Python for installdir # (and possibly similar for exec_installdir=). # Note: "make boot" implies "make clobber" -- it assumes that when you # bootstrap you may have changed platforms so it removes all previous # output files. # If you are building your extension as a shared library (your # Setup.in file starts with *shared*), run "make" or "make sharedmods" # to build the shared library files. If you are building a statically # linked Python binary (the only solution of your platform doesn't # support shared libraries, and sometimes handy if you want to # distribute or install the resulting Python binary), run "make # python". # Note: Each time you edit Makefile.pre.in or Setup, you must run # "make Makefile" before running "make". # Hint: if you want to use VPATH, you can start in an empty # subdirectory and say (e.g.): # make -f ../Makefile.pre.in boot srcdir=.. VPATH=.. # === Bootstrap variables (edited through "make boot") === # The prefix used by "make inclinstall libainstall" of core python installdir= /usr/local # The exec_prefix used by the same exec_installdir=$(installdir) # Source directory and VPATH in case you want to use VPATH. # (You will have to edit these two lines yourself -- there is no # automatic support as the Makefile is not generated by # config.status.) srcdir= . VPATH= . # === Variables that you may want to customize (rarely) === # (Static) build target TARGET= python # Installed python binary (used only by boot target) PYTHON= python # Add more -I and -D options here CFLAGS= $(OPT) -I$(INCLUDEPY) -I$(EXECINCLUDEPY) $(DEFS) # These two variables can be set in Setup to merge extensions. # See example[23]. BASELIB= BASESETUP= # === Variables set by makesetup === MODOBJS= _MODOBJS_ MODLIBS= _MODLIBS_ # === Definitions added by makesetup === # === Variables from configure (through sedscript) === VERSION= @VERSION@ CC= @CC@ CXX= @CXX@ MAINCC= @MAINCC@ LINKCC= @LINKCC@ SGI_ABI= @SGI_ABI@ OPT= @OPT@ CPPFLAGS= @CPPFLAGS@ LDFLAGS= @LDFLAGS@ LDLAST= @LDLAST@ DEFS= LIBS= @LIBS@ LIBM= @LIBM@ LIBC= @LIBC@ RANLIB= @RANLIB@ MACHDEP= @MACHDEP@ SO= @SO@ LDSHARED= @LDSHARED@ BLDSHARED= @BLDSHARED@ CCSHARED= @CCSHARED@ LINKFORSHARED= @LINKFORSHARED@ CXX= @CXX@ # Install prefix for architecture-independent files prefix= /usr/local # Install prefix for architecture-dependent files exec_prefix= $(prefix) # Uncomment the following two lines for AIX #LINKCC= $(LIBPL)/makexp_aix $(LIBPL)/python.exp "" $(LIBRARY); $(PURIFY) $(CC) #LDSHARED= $(LIBPL)/ld_so_aix $(CC) -bI:$(LIBPL)/python.exp # === Fixed definitions === # Shell used by make (some versions default to the login shell, which is bad) SHELL= /bin/sh # Expanded directories BINDIR= $(exec_installdir)/bin LIBDIR= $(exec_prefix)/lib MANDIR= $(installdir)/man INCLUDEDIR= $(installdir)/include SCRIPTDIR= $(prefix)/lib # Detailed destination directories BINLIBDEST= $(LIBDIR)/python$(VERSION) LIBDEST= $(SCRIPTDIR)/python$(VERSION) INCLUDEPY= $(INCLUDEDIR)/python$(VERSION) EXECINCLUDEPY= $(exec_installdir)/include/python$(VERSION) LIBP= $(exec_installdir)/lib/python$(VERSION) DESTSHARED= $(BINLIBDEST)/site-packages LIBPL= $(LIBP)/config PYTHONLIBS= $(LIBPL)/libpython$(VERSION).a MAKESETUP= $(LIBPL)/makesetup MAKEFILE= $(LIBPL)/Makefile CONFIGC= $(LIBPL)/config.c CONFIGCIN= $(LIBPL)/config.c.in SETUP= $(LIBPL)/Setup.config $(LIBPL)/Setup.local $(LIBPL)/Setup SYSLIBS= $(LIBM) $(LIBC) ADDOBJS= $(LIBPL)/python.o config.o # Portable install script (configure doesn't always guess right) INSTALL= $(LIBPL)/install-sh -c # Shared libraries must be installed with executable mode on some systems; # rather than figuring out exactly which, we always give them executable mode. # Also, making them read-only seems to be a good idea... INSTALL_SHARED= ${INSTALL} -m 555 # === Fixed rules === # Default target. This builds shared libraries only default: sharedmods # Build everything all: static sharedmods # Build shared libraries from our extension modules sharedmods: $(SHAREDMODS) # Build a static Python binary containing our extension modules static: $(TARGET) $(TARGET): $(ADDOBJS) lib.a $(PYTHONLIBS) Makefile $(BASELIB) $(LINKCC) $(LDFLAGS) $(LINKFORSHARED) \ $(ADDOBJS) lib.a $(PYTHONLIBS) \ $(LINKPATH) $(BASELIB) $(MODLIBS) $(LIBS) $(SYSLIBS) \ -o $(TARGET) $(LDLAST) install: sharedmods if test ! -d $(DESTSHARED) ; then \ mkdir $(DESTSHARED) ; else true ; fi -for i in X $(SHAREDMODS); do \ if test $$i != X; \ then $(INSTALL_SHARED) $$i $(DESTSHARED)/$$i; \ fi; \ done # Build the library containing our extension modules lib.a: $(MODOBJS) -rm -f lib.a ar cr lib.a $(MODOBJS) -$(RANLIB) lib.a # This runs makesetup *twice* to use the BASESETUP definition from Setup config.c Makefile: Makefile.pre Setup $(BASESETUP) $(MAKESETUP) $(MAKESETUP) \ -m Makefile.pre -c $(CONFIGCIN) Setup -n $(BASESETUP) $(SETUP) $(MAKE) -f Makefile do-it-again # Internal target to run makesetup for the second time do-it-again: $(MAKESETUP) \ -m Makefile.pre -c $(CONFIGCIN) Setup -n $(BASESETUP) $(SETUP) # Make config.o from the config.c created by makesetup config.o: config.c $(CC) $(CFLAGS) -c config.c # Setup is copied from Setup.in *only* if it doesn't yet exist Setup: cp $(srcdir)/Setup.in Setup # Make the intermediate Makefile.pre from Makefile.pre.in Makefile.pre: Makefile.pre.in sedscript sed -f sedscript $(srcdir)/Makefile.pre.in >Makefile.pre # Shortcuts to make the sed arguments on one line P=prefix E=exec_prefix H=Generated automatically from Makefile.pre.in by sedscript. L=LINKFORSHARED # Make the sed script used to create Makefile.pre from Makefile.pre.in sedscript: $(MAKEFILE) sed -n \ -e '1s/.*/1i\\/p' \ -e '2s%.*%# $H%p' \ -e '/^VERSION=/s/^VERSION=[ ]*\(.*\)/s%@VERSION[@]%\1%/p' \ -e '/^CC=/s/^CC=[ ]*\(.*\)/s%@CC[@]%\1%/p' \ -e '/^CXX=/s/^CXX=[ ]*\(.*\)/s%@CXX[@]%\1%/p' \ -e '/^DEFS=/s/^DEFS=[ ]*\(.*\)/s%@DEFS[@]%\1%/p' \ -e '/^MAINCC=/s/^MAINCC=[ ]*\(.*\)/s%@MAINCC[@]%\1%/p' \ -e '/^LINKCC=/s/^LINKCC=[ ]*\(.*\)/s%@LINKCC[@]%\1%/p' \ -e '/^OPT=/s/^OPT=[ ]*\(.*\)/s%@OPT[@]%\1%/p' \ -e '/^CPPFLAGS=/s/^CPPFLAGS=[ ]*\(.*\)/s%@CPPFLAGS[@]%\1%/p' \ -e '/^LDFLAGS=/s/^LDFLAGS=[ ]*\(.*\)/s%@LDFLAGS[@]%\1%/p' \ -e '/^LDLAST=/s/^LDLAST=[ ]*\(.*\)/s%@LDLAST[@]%\1%/p' \ -e '/^DEFS=/s/^DEFS=[ ]*\(.*\)/s%@DEFS[@]%\1%/p' \ -e '/^LIBS=/s/^LIBS=[ ]*\(.*\)/s%@LIBS[@]%\1%/p' \ -e '/^LIBM=/s/^LIBM=[ ]*\(.*\)/s%@LIBM[@]%\1%/p' \ -e '/^LIBC=/s/^LIBC=[ ]*\(.*\)/s%@LIBC[@]%\1%/p' \ -e '/^RANLIB=/s/^RANLIB=[ ]*\(.*\)/s%@RANLIB[@]%\1%/p' \ -e '/^MACHDEP=/s/^MACHDEP=[ ]*\(.*\)/s%@MACHDEP[@]%\1%/p' \ -e '/^SO=/s/^SO=[ ]*\(.*\)/s%@SO[@]%\1%/p' \ -e '/^LDSHARED=/s/^LDSHARED=[ ]*\(.*\)/s%@LDSHARED[@]%\1%/p' \ -e '/^BLDSHARED=/s/^BLDSHARED=[ ]*\(.*\)/s%@BLDSHARED[@]%\1%/p' \ -e '/^CCSHARED=/s/^CCSHARED=[ ]*\(.*\)/s%@CCSHARED[@]%\1%/p' \ -e '/^SGI_ABI=/s/^SGI_ABI=[ ]*\(.*\)/s%@SGI_ABI[@]%\1%/p' \ -e '/^$L=/s/^$L=[ ]*\(.*\)/s%@$L[@]%\1%/p' \ -e '/^$P=/s/^$P=\(.*\)/s%^$P=.*%$P=\1%/p' \ -e '/^$E=/s/^$E=\(.*\)/s%^$E=.*%$E=\1%/p' \ $(MAKEFILE) >sedscript echo "/^#@SET_CCC@/d" >>sedscript echo "/^installdir=/s%=.*%= $(installdir)%" >>sedscript echo "/^exec_installdir=/s%=.*%=$(exec_installdir)%" >>sedscript echo "/^srcdir=/s%=.*%= $(srcdir)%" >>sedscript echo "/^VPATH=/s%=.*%= $(VPATH)%" >>sedscript echo "/^LINKPATH=/s%=.*%= $(LINKPATH)%" >>sedscript echo "/^BASELIB=/s%=.*%= $(BASELIB)%" >>sedscript echo "/^BASESETUP=/s%=.*%= $(BASESETUP)%" >>sedscript # Bootstrap target boot: clobber VERSION=`$(PYTHON) -c "import sys; print sys.version[:3]"`; \ installdir=`$(PYTHON) -c "import sys; print sys.prefix"`; \ exec_installdir=`$(PYTHON) -c "import sys; print sys.exec_prefix"`; \ $(MAKE) -f $(srcdir)/Makefile.pre.in VPATH=$(VPATH) srcdir=$(srcdir) \ VERSION=$$VERSION \ installdir=$$installdir \ exec_installdir=$$exec_installdir \ Makefile # Handy target to remove intermediate files and backups clean: -rm -f *.o *~ # Handy target to remove everything that is easily regenerated clobber: clean -rm -f *.a tags TAGS config.c Makefile.pre $(TARGET) sedscript -rm -f *.so *.sl so_locations # Handy target to remove everything you don't want to distribute distclean: clobber -rm -f Makefile Setup egenix-mx-base-3.2.7/mx/BeeBase/mxBeeBase/Setup.in0000664000175000017500000000056506757642705021437 0ustar lemburglemburg# Build extensions shared: *shared* # # # mxBeeBase module # mxBeeBase \ # # Enable the next lines to have debugging code compiled in. # -DMAL_DEBUG \ # -DMAL_DEBUG_WITH_PYTHON \ # # Enable this line to have the BTree implementation report # lots of useful low-level extra debugging information. # -DBTREE_DEBUG \ # # Always leave the next line enabled mxBeeBase.c btr.c egenix-mx-base-3.2.7/mx/BeeBase/mxBeeBase/__init__.py0000664000175000017500000000054312133021410022055 0ustar lemburglemburg""" mxBeeBase - C part of BeeBase Copyright (c) 2000, Marc-Andre Lemburg; mailto:mal@lemburg.com Copyright (c) 2000-2013, eGenix.com Software GmbH; mailto:info@egenix.com See the documentation for further information on copyrights, or contact the author. All Rights Reserved. """ from mxBeeBase import * from mxBeeBase import __version__ egenix-mx-base-3.2.7/mx/BeeBase/mxBeeBase/btr.c0000664000175000017500000012324010777737313020733 0ustar lemburglemburg/* Source file extracted from btr.c -- an ANSI C implementation included in the source code distribution of SORTING AND SEARCHING ALGORITHMS: A COOKBOOK by THOMAS NIEMANN Portland, Oregon email: thomasn@jps.net home: http://members.xoom.com/thomasn/s_man.htm From the cookbook: Permission to reproduce this document, in whole or in part, is given provided the original web site listed below is referenced, and no additional restrictions apply. Source code, when part of a software project, may be used freely without reference to the author. Includes modifications by Marc-Andre Lemburg, 1998, mal@lemburg.com. See btr.h for details. */ /* Logging file used by debugging facility */ #ifndef MAL_DEBUG_OUTPUTFILE # define MAL_DEBUG_OUTPUTFILE "mxBeeBase.log" #endif #include "mxstdlib.h" #include "btr.h" /* --- Globals ------------------------------------------------------------ */ /* line number for last IO or memory error */ int bErrLineNo; /* --- Internal APIs ------------------------------------------------------ */ /* * algorithm: * A B+tree implementation, with keys stored in internal nodes, * and keys/record addresses stored in leaf nodes. Each node is * one sector in length, except the root node whose length is * 3 sectors. When traversing the tree to insert a key, full * children are adjusted to make room for possible new entries. * Similarly, on deletion, half-full nodes are adjusted to allow for * possible deleted entries. Adjustments are first done by * examining 2 nearest neighbors at the same level, and redistibuting * the keys if possible. If redistribution won't solve the problem, * nodes are split/joined as needed. Typically, a node is 3/4 full. * On insertion, if 3 nodes are full, they are split into 4 nodes, * each 3/4 full. On deletion, if 3 nodes are 1/2 full, they are * joined to create 2 nodes 3/4 full. * * A LRR (least-recently-read) buffering scheme for nodes is used to * simplify storage management, and, assuming some locality of reference, * improve performance. * * To simplify matters, both internal nodes and leafs contain the * same fields. * */ /* macros for addressing fields */ /* primitives */ #define bAdr(p) *(bIdxAddr *)(p) #define eAdr(p) *(bRecAddr *)(p) /* based on k = &[key,rec,childGE] */ #define childLT(k) bAdr((char *)k - sizeof(bIdxAddr)) #define key(k) (k) #define rec(k) eAdr((char *)(k) + h->keySize) #define childGE(k) bAdr((char *)(k) + h->keySize + sizeof(bRecAddr)) /* based on b = &bBuffer */ #define leaf(b) b->p->leaf #define ct(b) b->p->ct #define next(b) b->p->next #define prev(b) b->p->prev #define fkey(b) &b->p->fkey #define lkey(b) (fkey(b) + ks((ct(b) - 1))) #define p(b) (char *)(b->p) /* shortcuts */ #define ks(ct) ((ct) * h->ks) #define error(rc) lineError(__LINE__, rc) static bError lineError(int lineno, bError rc) { if (rc == bErrIO || rc == bErrMemory) if (!bErrLineNo) bErrLineNo = lineno; return rc; } static bIdxAddr allocAdr(bHandle *h) { bIdxAddr adr; adr = h->nextFreeAdr; h->nextFreeAdr += h->sectorSize; return adr; } static bError flush(bHandle *h, bBuffer *buf) { int len; /* number of bytes to write */ /* flush buffer to disk */ len = h->sectorSize; if (buf->adr == 0) len *= 3; /* root */ if (fseek(h->fp, buf->adr, SEEK_SET)) return error(bErrIO); if (fwrite(buf->p, len, 1, h->fp) != 1) return error(bErrIO); buf->modified = false; h->nDiskWrites++; return bErrOk; } static bError flushAll(bHandle *h) { bError rc; /* return code */ bBuffer *buf; /* buffer */ if (h->root.modified) if ((rc = flush(h,&h->root)) != 0) return rc; buf = h->bufList.next; while (buf != &h->bufList) { if (buf->modified) if ((rc = flush(h,buf)) != 0) return rc; buf = buf->next; } /* Now make sure the data is really written to disk */ fflush(h->fp); return bErrOk; } static bError assignBuf(bHandle *h, bIdxAddr adr, bBuffer **b) { /* assign buf to adr */ bBuffer *buf; /* buffer */ bError rc; /* return code */ if (adr == 0) { *b = &h->root; return bErrOk; } /* search for buf with matching adr */ buf = h->bufList.next; while (buf->next != &h->bufList) { if (buf->valid && buf->adr == adr) break; buf = buf->next; } /* either buf points to a match, or it's last one in list (LRR) */ if (buf->valid) { if (buf->adr != adr) { if (buf->modified) { if ((rc = flush(h,buf)) != 0) return rc; } buf->adr = adr; buf->valid = false; } } else { buf->adr = adr; } /* remove from current position and place at front of list */ buf->next->prev = buf->prev; buf->prev->next = buf->next; buf->next = h->bufList.next; buf->prev = &h->bufList; buf->next->prev = buf; buf->prev->next = buf; *b = buf; return bErrOk; } static bError writeDisk(bHandle *h, bBuffer *buf) { /* write buf to disk */ buf->valid = true; buf->modified = true; return bErrOk; } static bError readDisk(bHandle *h, bIdxAddr adr, bBuffer **b) { /* read data into buf */ int len; bBuffer *buf; /* buffer */ bError rc; /* return code */ if ((rc = assignBuf(h, adr, &buf)) != 0) return rc; if (!buf->valid) { len = h->sectorSize; if (adr == 0) len *= 3; /* root */ if (fseek(h->fp, adr, SEEK_SET)) return error(bErrIO); if (fread(buf->p, len, 1, h->fp) != 1) return error(bErrIO); buf->modified = false; buf->valid = true; h->nDiskReads++; } *b = buf; return bErrOk; } static void dumpBuf(bHandle *h, char *msg, bBuffer *buf) { unsigned int i; bKey *k; if (!buf) { DPRINTF("\n%s: buf empty\n", msg); return; } k = key(fkey(buf)); DPRINTF("\n%s: buf[%04lx], ct=%d, leaf=%d", msg, (unsigned long)buf->adr, ct(buf), leaf(buf)); if (childLT(k)) DPRINTF(", LT(%04lx)", childLT(k)); if (leaf(buf)) DPRINTF(", prev(%04lx), next(%04lx)", (unsigned long)prev(buf), (unsigned long)next(buf)); DPRINTF("\n"); for (i = 0; i < ct(buf); i++) { DPRINTF(" key %3d: %08x rec(%08lx)", i, *(int *)key(k), rec(k)); if (childGE(k)) DPRINTF(" GE(%04lx)", (unsigned long)childGE(k)); DPRINTF("\n"); k += ks(1); } } #define report(rc) reportErr(__LINE__, rc) static void reportErr(int lineno, bError rc) { if (rc == bErrIO || rc == bErrMemory) { perror("aborting"); DPRINTF("line %d: error %d\n", bErrLineNo, rc); } else { DPRINTF("line %d: error %d\n", lineno, rc); } } static int dumpNode(bHandle *h, char *msg, bIdxAddr adr) { bBuffer *buf; /* buffer */ bError rc; /* return code */ bKey *k; unsigned int i; if ((rc = readDisk(h, adr, &buf)) != 0) { report(rc); return -1; } dumpBuf(h, msg, buf); k = fkey(buf); for (i = 0; i < ct(buf); i++) { if (childLT(k)) dumpNode(h, msg, childLT(k)); if (childGE(k)) dumpNode(h, msg, childGE(k)); k += ks(1); } return 0; } #if 0 static int dump(bHandle *h, char *msg) { return dumpNode(h, msg, h->root.adr); } #endif static int _validateTree(bHandle *h, bBuffer *b, char *visited, int level) { bKey *k; bError rc; unsigned int i; char p[3*MAX_SECTOR_SIZE]; bBuffer *cbuf, bufx; bBuffer *buf = &bufx; if (h->sectorSize > MAX_SECTOR_SIZE) { DPRINTF("sectorSize exceeds MAX_SECTOR_SIZE; aborting check\n"); return -1; } memcpy(buf, b, sizeof(bBuffer)); memcpy(p, b->p, 3*h->sectorSize); buf->p = (bNode *)p; dumpBuf(h,"validate", buf); if (visited[buf->adr >> 8]) { DPRINTF("previous visit, buf[%04lx]\n", (unsigned long)buf->adr); return -1; } visited[buf->adr >> 8] = 1; DPRINTF("\n"); if (ct(buf)) { if (!leaf(buf)) { DPRINTF("level %d: recursing on buf[%04lx] LT\n", level, childLT(fkey(buf))); if ((rc = readDisk(h, childLT(fkey(buf)), &cbuf)) != 0) { DPRINTF("unable to read buffer %04lx\n", childLT(fkey(buf))); return -1; } if (*(unsigned int *)key(lkey(cbuf)) > *(unsigned int *)key(fkey(buf))) { DPRINTF("last element in child buf[%04lx] LT " "> first element of parent buf[%04lx]\n", (unsigned long)cbuf->adr, (unsigned long)buf->adr); return -1; } _validateTree(h, cbuf, visited, level+1); k = fkey(buf); for (i = 0; i < ct(buf); i++) { DPRINTF("level %d: recursing on buf[%04lx] GE[%d]\n", level, key(childGE(k)), i); if ((rc = readDisk(h, childGE(k), &cbuf)) != 0) { DPRINTF("unable to read buffer %04lx\n", childGE(k)); return -1; } if (*(unsigned int *)key(fkey(cbuf)) < *(unsigned int *)key(k)) { DPRINTF("first element in child buf[%04lx] " "< parent buf[%04lx] GE (%08x < %08x)\n", (unsigned long)cbuf->adr, (unsigned long)buf->adr, *(int *)key(fkey(cbuf)), *(int *)key(k)); dumpBuf(h,"buf", buf); dumpBuf(h,"cbuf", cbuf); return -1; } if (!leaf(cbuf) && *(unsigned int *)key(fkey(cbuf)) == *(unsigned int *)key(k)) { DPRINTF("first element in child buf[%04lx] " "= parent buf[%04lx] GE (%08x < %08x)\n", (unsigned long)cbuf->adr, (unsigned long)buf->adr, *(int *)key(fkey(cbuf)), *(int *)key(k)); dumpBuf(h,"buf", buf); dumpBuf(h,"cbuf", cbuf); return -1; } _validateTree(h,cbuf,visited,level+1); k += ks(1); } } } return 0; } typedef enum { MODE_FIRST, MODE_MATCH } modeEnum; static int search(bHandle *h, bBuffer *buf, void *key, bRecAddr rec, bKey **mkey, modeEnum mode) { /* * input: * p pointer to node * key key to find * rec record address (dupkey only) * mode MODE_FIRST (find first), * MODE_MATCH (rec's must match too) [dupkey only] * output: * mkey pointer to bKey info * * returns: * CC_EQ key = mkey * CC_LT key < mkey * CC_GT key > mkey */ int cc = CC_LT; /* condition code */ int m; /* midpoint of search */ int lb; /* lower-bound of binary search */ int ub; /* upper-bound of binary search */ bool foundDup; /* true if found a duplicate key */ /* Test for empty buffer */ if (ct(buf) == 0) { *mkey = fkey(buf); return cc; } /* Scan current node for key using binary search */ foundDup = false; lb = 0; ub = ct(buf) - 1; while (lb <= ub) { m = (lb + ub) / 2; *mkey = fkey(buf) + ks(m); cc = h->comp(h->keySize, key, key(*mkey)); if (cc < 0) /* key less than key[m] */ ub = m - 1; else if (cc > 0) /* key greater than key[m] */ lb = m + 1; else { /* keys match */ if (h->dupKeys) { switch (mode) { case MODE_FIRST: /* backtrack to first key */ ub = m - 1; foundDup = true; break; case MODE_MATCH: /* rec's must also match */ if (rec < rec(*mkey)) { ub = m - 1; cc = CC_LT; } else if (rec > rec(*mkey)) { lb = m + 1; cc = CC_GT; } else { return CC_EQ; } break; } } else { return CC_EQ; } } } /* Handle set of duplicates */ if (h->dupKeys && (mode == MODE_FIRST) && foundDup) { #if 0 DPRINTF("found dups: cc=%i, lb=%i, ub=%i, key(*mkey)=%i next=%i\n", cc,lb,ub,*(int*)key(*mkey),*(int*)key((*mkey+ks(1)))); #endif if (cc == CC_GT) /* next key is first key */ *mkey += ks(1); return CC_EQ; } /* didn't find key */ return cc < 0 ? CC_LT : CC_GT; } static bError scatterRoot(bHandle *h) { bBuffer *gbuf; bBuffer *root; /* scatter gbuf to root */ root = &h->root; gbuf = &h->gbuf; memcpy(fkey(root), fkey(gbuf), ks(ct(gbuf))); childLT(fkey(root)) = childLT(fkey(gbuf)); ct(root) = ct(gbuf); leaf(root) = leaf(gbuf); return bErrOk; } static bError scatter(bHandle *h, bBuffer *pbuf, bKey *pkey, int is, bBuffer **tmp) { bBuffer *gbuf; /* gather buf */ bKey *gkey; /* gather buf key */ bError rc; /* return code */ int iu; /* number of tmp's used */ int k0Min; /* min #keys that can be mapped to tmp[0] */ int knMin; /* min #keys that can be mapped to tmp[1..3] */ int k0Max; /* max #keys that can be mapped to tmp[0] */ int knMax; /* max #keys that can be mapped to tmp[1..3] */ int sw; /* shift width */ int len; /* length of remainder of buf */ int base; /* base count distributed to tmps */ int extra; /* extra counts */ int ct; int i; /* * input: * pbuf parent buffer of gathered keys * pkey where we insert a key if needed in parent * is number of supplied tmps * tmp array of tmp's to be used for scattering * output: * tmp array of tmp's used for scattering */ /* scatter gbuf to tmps, placing 3/4 max in each tmp */ gbuf = &h->gbuf; gkey = fkey(gbuf); ct = ct(gbuf); /**************************************** * determine number of tmps to use (iu) * ****************************************/ iu = is; /* determine limits */ if (leaf(gbuf)) { /* minus 1 to allow for insertion */ k0Max= h->maxCt - 1; knMax= h->maxCt - 1; /* plus 1 to allow for deletion */ k0Min= (h->maxCt / 2) + 1; knMin= (h->maxCt / 2) + 1; } else { /* can hold an extra gbuf key as it's translated to a LT pointer */ k0Max = h->maxCt - 1; knMax = h->maxCt; k0Min = (h->maxCt / 2) + 1; knMin = ((h->maxCt+1) / 2) + 1; } /* calculate iu, number of tmps to use */ while(1) { if (iu == 0 || ct > (k0Max + (iu-1)*knMax)) { /* add a buffer */ if ((rc = assignBuf(h, allocAdr(h), &tmp[iu])) != 0) return rc; /* update sequential links */ if (leaf(gbuf)) { /* adjust sequential links */ if (iu == 0) { /* no tmps supplied when splitting root for first time */ prev(tmp[0]) = 0; next(tmp[0]) = 0; } else { prev(tmp[iu]) = tmp[iu-1]->adr; next(tmp[iu]) = next(tmp[iu-1]); next(tmp[iu-1]) = tmp[iu]->adr; } } iu++; h->nNodesIns++; } else if (iu > 1 && ct < (k0Min + (iu-1)*knMin)) { /* del a buffer */ iu--; /* adjust sequential links */ if (leaf(gbuf) && tmp[iu-1]->adr) { next(tmp[iu-1]) = next(tmp[iu]); } next(tmp[iu-1]) = next(tmp[iu]); h->nNodesDel++; } else { break; } } /* establish count for each tmp used */ base = ct / iu; extra = ct % iu; for (i = 0; i < iu; i++) { int n; n = base; /* distribute extras, one at a time */ /* don't do to 1st node, as it may be internal and can't hold it */ if (i && extra) { n++; extra--; } ct(tmp[i]) = n; } /************************************** * update sequential links and parent * **************************************/ if (iu != is) { /* link last node to next */ if (leaf(gbuf) && next(tmp[iu-1])) { bBuffer *buf; if ((rc = readDisk(h, next(tmp[iu-1]), &buf)) != 0) return rc; prev(buf) = tmp[iu-1]->adr; if ((rc = writeDisk(h, buf)) != 0) return rc; } /* shift keys in parent */ sw = ks(iu - is); if (sw < 0) { len = ks(ct(pbuf)) - (pkey - fkey(pbuf)) + sw; memmove(pkey, pkey - sw, len); } else { len = ks(ct(pbuf)) - (pkey - fkey(pbuf)); memmove(pkey + sw, pkey, len); } /* don't count LT buffer for empty parent */ if (ct(pbuf)) ct(pbuf) += iu - is; else ct(pbuf) += iu - is - 1; } /******************************* * distribute keys to children * *******************************/ for (i = 0; i < iu; i++) { /* update LT pointer and parent nodes */ if (leaf(gbuf)) { /* update LT, tmp[i] */ childLT(fkey(tmp[i])) = 0; /* update parent */ if (i == 0) { childLT(pkey) = tmp[i]->adr; } else { memcpy(pkey, gkey, ks(1)); childGE(pkey) = tmp[i]->adr; pkey += ks(1); } } else { if (i == 0) { /* update LT, tmp[0] */ childLT(fkey(tmp[i])) = childLT(gkey); /* update LT, parent */ childLT(pkey) = tmp[i]->adr; } else { /* update LT, tmp[i] */ childLT(fkey(tmp[i])) = childGE(gkey); /* update parent key */ memcpy(pkey, gkey, ks(1)); childGE(pkey) = tmp[i]->adr; gkey += ks(1); pkey += ks(1); ct(tmp[i])--; } } /* install keys, tmp[i] */ memcpy(fkey(tmp[i]), gkey, ks(ct(tmp[i]))); leaf(tmp[i]) = leaf(gbuf); gkey += ks(ct(tmp[i])); } leaf(pbuf) = false; /************************ * write modified nodes * ************************/ if ((rc = writeDisk(h, pbuf)) != 0) return rc; for (i = 0; i < iu; i++) if ((rc = writeDisk(h, tmp[i])) != 0) return rc; return bErrOk; } static bError gatherRoot(bHandle *h) { bBuffer *gbuf; bBuffer *root; /* gather root to gbuf */ root = &h->root; gbuf = &h->gbuf; memcpy(p(gbuf), root->p, 3 * h->sectorSize); leaf(gbuf) = leaf(root); ct(root) = 0; return bErrOk; } static bError gather(bHandle *h, bBuffer *pbuf, bKey **pkey, bBuffer **tmp) { bError rc; /* return code */ bBuffer *gbuf; bKey *gkey; /* * input: * pbuf parent buffer * pkey pointer to match key in parent * output: * tmp buffers to use for scatter * pkey pointer to match key in parent * returns: * bErrOk operation successful * notes: * Gather 3 buffers to gbuf. Setup for subsequent scatter by * doing the following: * - setup tmp buffer array for scattered buffers * - adjust pkey to point to first key of 3 buffers */ /* find 3 adjacent buffers */ if (*pkey == lkey(pbuf)) *pkey -= ks(1); if ((rc = readDisk(h, childLT(*pkey), &tmp[0])) != 0) return rc; if ((rc = readDisk(h, childGE(*pkey), &tmp[1])) != 0) return rc; if ((rc = readDisk(h, childGE(*pkey + ks(1)), &tmp[2])) != 0) return rc; /* gather nodes to gbuf */ gbuf = &h->gbuf; gkey = fkey(gbuf); /* tmp[0] */ childLT(gkey) = childLT(fkey(tmp[0])); memcpy(gkey, fkey(tmp[0]), ks(ct(tmp[0]))); gkey += ks(ct(tmp[0])); ct(gbuf) = ct(tmp[0]); /* tmp[1] */ if (!leaf(tmp[1])) { memcpy(gkey, *pkey, ks(1)); childGE(gkey) = childLT(fkey(tmp[1])); ct(gbuf)++; gkey += ks(1); } memcpy(gkey, fkey(tmp[1]), ks(ct(tmp[1]))); gkey += ks(ct(tmp[1])); ct(gbuf) += ct(tmp[1]); /* tmp[2] */ if (!leaf(tmp[2])) { memcpy(gkey, *pkey+ks(1), ks(1)); childGE(gkey) = childLT(fkey(tmp[2])); ct(gbuf)++; gkey += ks(1); } memcpy(gkey, fkey(tmp[2]), ks(ct(tmp[2]))); ct(gbuf) += ct(tmp[2]); leaf(gbuf) = leaf(tmp[0]); return bErrOk; } /* --- Interface --------------------------------------------------------- */ bError bOpen(bDescription info, bHandle **handle) { bError rc; /* return code */ int bufCt; /* number of tmp buffers */ bBuffer *buf; /* buffer */ int maxCt; /* maximum number of keys in a node */ bBuffer *root; int i; bNode *p; bHandle *h; if ((info.sectorSize < sizeof(bNode)) || (info.sectorSize % 4) || (info.sectorSize > MAX_SECTOR_SIZE)) return bErrSectorSize; /* determine sizes and offsets */ /* leaf/n, prev, next, [childLT,key,rec]... childGE */ /* ensure that there are at least 3 children/parent for gather/scatter */ maxCt = info.sectorSize - (sizeof(bNode) - sizeof(bKey)); maxCt /= sizeof(bIdxAddr) + info.keySize + sizeof(bRecAddr); if (maxCt < 6) return bErrSectorSize; /* copy parms to bHandle */ if ((h = calloc(sizeof(bHandle),1)) == NULL) return error(bErrMemory); h->keySize = info.keySize; h->dupKeys = info.dupKeys; h->sectorSize = info.sectorSize; h->comp = info.comp; /* childLT, key, rec */ h->ks = sizeof(bIdxAddr) + h->keySize + sizeof(bRecAddr); h->maxCt = maxCt; /* Allocate buflist. * During insert/delete, need simultaneous access to 7 buffers: * - 4 adjacent child bufs * - 1 parent buf * - 1 next sequential link * - 1 lastGE */ bufCt = 7 /*+ EXTRA_BUFFERS*/; if ((h->malloc1 = calloc(bufCt * sizeof(bBuffer),1)) == NULL) return error(bErrMemory); buf = h->malloc1; /* * Allocate bufs. * We need space for the following: * - bufCt buffers, of size sectorSize * - 1 buffer for root, of size 3*sectorSize * - 1 buffer for gbuf, size 3*sectorsize + 2 extra keys * to allow for LT pointers in last 2 nodes when gathering 3 full nodes */ if ((h->malloc2 = calloc((bufCt+6) * h->sectorSize + 2 * h->ks,1)) == NULL) return error(bErrMemory); p = h->malloc2; /* initialize buflist */ h->bufList.next = buf; h->bufList.prev = buf + (bufCt - 1); for (i = 0; i < bufCt; i++) { buf->next = buf + 1; buf->prev = buf - 1; buf->modified = false; buf->valid = false; buf->p = p; p = (bNode *)((char *)p + h->sectorSize); buf++; } h->bufList.next->prev = &h->bufList; h->bufList.prev->next = &h->bufList; /* initialize root */ root = &h->root; root->p = p; p = (bNode *)((char *)p + 3*h->sectorSize); h->gbuf.p = p; /* done last to include extra 2 keys */ /* Open the file */ switch (info.filemode) { case 1: /* Open in read-only mode */ if ((h->fp = fopen(info.iName, "rb")) != NULL) { /* open an existing database */ if ((rc = readDisk(h, 0, &root)) != 0) return rc; if (fseek(h->fp, 0, SEEK_END)) return error(bErrIO); if ((h->nextFreeAdr = ftell(h->fp)) == -1) return error(bErrIO); } else { free(h); return bErrFileNotOpen; } break; case 0: /* Open in update mode, revert to creating a new file */ case 3: /* Open an existing file in update mode, fail if non-existing */ if ((h->fp = fopen(info.iName, "r+b")) != NULL) { /* open an existing database */ if ((rc = readDisk(h, 0, &root)) != 0) return rc; if (fseek(h->fp, 0, SEEK_END)) return error(bErrIO); if ((h->nextFreeAdr = ftell(h->fp)) == -1) return error(bErrIO); break; } else if (info.filemode == 3) { free(h); return bErrFileNotOpen; } /* On error and filemode 0: fall through */ case 2: /* Create a new file */ if ((h->fp = fopen(info.iName, "w+b")) != NULL) { /* initialize root */ memset(root->p, 0, 3*h->sectorSize); leaf(root) = 1; root->modified = true; h->nextFreeAdr = 3 * h->sectorSize; /* flush buffers to create a valid file stub */ flushAll(h); break; } /* On error: fall through */ default: /* Something's wrong */ free(h); return bErrFileNotOpen; } *handle = h; return bErrOk; } bError bFlush(bHandle *h) { if (h == NULL) return bErrOk; /* flush idx */ if (h->fp) { flushAll(h); } return bErrOk; } bError bClose(bHandle *h) { if (h == NULL) return bErrOk; /* flush idx */ if (h->fp) { flushAll(h); fclose(h->fp); } if (h->malloc2) free(h->malloc2); if (h->malloc1) free(h->malloc1); free(h); return bErrOk; } bError bFindKey(bHandle *h, bCursor *c, void *key, bRecAddr *rec) { bKey *mkey = 0; /* matched key */ bBuffer *buf; /* buffer */ bError rc; /* return code */ buf = &h->root; /* find key, and return address */ while (1) { if (leaf(buf)) { int cc; if ((cc=search(h, buf, key, 0, &mkey, MODE_FIRST)) == CC_EQ) { if (rec) *rec = rec(mkey); c->buffer = buf; c->key = mkey; return bErrOk; } else { DPRINTF("not found; cc=%i\n", cc); return bErrKeyNotFound; } } else { if (search(h, buf, key, 0, &mkey, MODE_FIRST) == CC_LT) { if ((rc = readDisk(h, childLT(mkey), &buf)) != 0) return rc; } else { if ((rc = readDisk(h, childGE(mkey), &buf)) != 0) return rc; } } } } bError bInsertKey(bHandle *h, void *key, bRecAddr rec) { int rc; /* return code */ bKey *mkey; /* match key */ int len; /* length to shift */ int cc; /* condition code */ bBuffer *buf, *root; bBuffer *tmp[4]; unsigned int keyOff; bool lastGEvalid; /* true if GE branch taken */ bool lastLTvalid; /* true if LT branch taken after GE branch */ bIdxAddr lastGE = 0; /* last childGE traversed */ unsigned int lastGEkey = 0; /* last childGE key traversed */ int height; /* height of tree */ root = &h->root; lastGEvalid = false; lastLTvalid = false; /* check for full root */ if (ct(root) == 3 * h->maxCt) { /* gather root and scatter to 4 bufs */ /* this increases b-tree height by 1 */ if ((rc = gatherRoot(h)) != 0) return rc; if ((rc = scatter(h, root, fkey(root), 0, tmp)) != 0) return rc; } buf = root; height = 0; while(1) { if (leaf(buf)) { /* in leaf, and there' room guaranteed */ if (height > h->maxHeight) h->maxHeight = height; /* set mkey to point to insertion point */ switch (search(h, buf, key, rec, &mkey, MODE_MATCH)) { case CC_LT: /* key < mkey */ if (ct(buf) == 0) break; if (!h->dupKeys && h->comp(h->keySize, key, mkey) == CC_EQ) return bErrDupKeys; break; case CC_EQ: /* key = mkey */ return bErrDupKeys; break; case CC_GT: /* key > mkey */ if (!h->dupKeys && h->comp(h->keySize, key, mkey) == CC_EQ) return bErrDupKeys; mkey += ks(1); break; } /* shift items GE key to right */ keyOff = mkey - fkey(buf); len = ks(ct(buf)) - keyOff; if (len) memmove(mkey + ks(1), mkey, len); /* insert new key */ memcpy(key(mkey), key, h->keySize); rec(mkey) = rec; childGE(mkey) = 0; ct(buf)++; if ((rc = writeDisk(h, buf)) != 0) return rc; /* if new key is first key, then fixup lastGE key */ if (!keyOff && lastLTvalid) { bBuffer *tbuf; bKey *tkey; if ((rc = readDisk(h, lastGE, &tbuf)) != 0) return rc; tkey = fkey(tbuf) + lastGEkey; memcpy(key(tkey), key, h->keySize); rec(tkey) = rec; if ((rc = writeDisk(h, tbuf)) != 0) return rc; } h->nKeysIns++; break; } else { /* internal node, descend to child */ bBuffer *cbuf; /* child buf */ height++; /* read child */ if ((cc = search(h, buf, key, rec, &mkey, MODE_MATCH)) == CC_LT) { if ((rc = readDisk(h, childLT(mkey), &cbuf)) != 0) return rc; } else { if ((rc = readDisk(h, childGE(mkey), &cbuf)) != 0) return rc; } /* check for room in child */ if (ct(cbuf) == h->maxCt) { /* gather 3 bufs and scatter */ if ((rc = gather(h, buf, &mkey, tmp)) != 0) return rc; if ((rc = scatter(h, buf, mkey, 3, tmp)) != 0) return rc; /* read child */ if ((cc = search(h, buf, key, rec, &mkey, MODE_MATCH)) == CC_LT) { if ((rc = readDisk(h, childLT(mkey), &cbuf)) != 0) return rc; } else { if ((rc = readDisk(h, childGE(mkey), &cbuf)) != 0) return rc; } } if (cc >= 0 || mkey != fkey(buf)) { lastGEvalid = true; lastLTvalid = false; lastGE = buf->adr; lastGEkey = mkey - fkey(buf); if (cc < 0) lastGEkey -= ks(1); } else { if (lastGEvalid) lastLTvalid = true; } buf = cbuf; } } #if BTREE_DEBUG DPRINTF("I %i = 0x%08x -> %i = 0x%08x\n", *(long*)key,*(long*)key,(long)rec,(long)rec); #endif return bErrOk; } bError bUpdateKey(bHandle *h, void *key, bRecAddr rec) { int rc; /* return code */ bKey *mkey = 0; /* match key */ int cc; /* condition code */ bBuffer *buf, *root; if (h->dupKeys) return bErrNotWithDupKeys; root = &h->root; buf = root; while(1) { if (leaf(buf)) { if (search(h, buf, key, rec, &mkey, MODE_MATCH) != CC_EQ) return bErrKeyNotFound; /* update record */ rec(mkey) = rec; if ((rc = writeDisk(h, buf)) != 0) return rc; h->nKeysUpd++; break; } else { bBuffer *cbuf; /* child buf */ /* read child */ if ((cc = search(h, buf, key, rec, &mkey, MODE_MATCH)) == CC_LT) { if ((rc = readDisk(h, childLT(mkey), &cbuf)) != 0) return rc; } else { if ((rc = readDisk(h, childGE(mkey), &cbuf)) != 0) return rc; } if (cc == CC_EQ) { /* update internal key copy too */ rec(mkey) = rec; } buf = cbuf; } } #if BTREE_DEBUG DPRINTF("U %i = 0x%08x -> %i = 0x%08x\n", *(long*)key,*(long*)key,(long)rec,(long)rec); #endif return bErrOk; } bError bDeleteKey(bHandle *h, void *key, bRecAddr *rec) { int rc; /* return code */ bKey *mkey; /* match key */ int len; /* length to shift */ int cc; /* condition code */ bBuffer *buf; /* buffer */ bBuffer *tmp[4]; unsigned int keyOff; bool lastGEvalid = false; /* true if GE branch taken */ bool lastLTvalid = false; /* true if LT branch taken after GE branch */ bIdxAddr lastGE = 0; /* last childGE traversed */ unsigned int lastGEkey = 0; /* last childGE key traversed */ bBuffer *root; bBuffer *gbuf; root = &h->root; gbuf = &h->gbuf; lastGEvalid = false; lastLTvalid = false; buf = root; while(1) { if (leaf(buf)) { /* set mkey to point to deletion point */ if (search(h, buf, key, *rec, &mkey, MODE_MATCH) == CC_EQ) *rec = rec(mkey); else return bErrKeyNotFound; /* shift items GT key to left */ keyOff = mkey - fkey(buf); len = ks(ct(buf)-1) - keyOff; if (len) memmove(mkey, mkey + ks(1), len); ct(buf)--; if ((rc = writeDisk(h, buf)) != 0) return rc; /* if deleted key is first key, then fixup lastGE key */ if (!keyOff && lastLTvalid) { bBuffer *tbuf; bKey *tkey; if ((rc = readDisk(h, lastGE, &tbuf)) != 0) return rc; tkey = fkey(tbuf) + lastGEkey; memcpy(key(tkey), mkey, h->keySize); rec(tkey) = rec(mkey); if ((rc = writeDisk(h, tbuf)) != 0) return rc; } h->nKeysDel++; break; } else { /* internal node, descend to child */ bBuffer *cbuf; /* child buf */ /* read child */ if ((cc = search(h, buf, key, *rec, &mkey, MODE_MATCH)) == CC_LT) { if ((rc = readDisk(h, childLT(mkey), &cbuf)) != 0) return rc; } else { if ((rc = readDisk(h, childGE(mkey), &cbuf)) != 0) return rc; } /* check for room to delete */ if (ct(cbuf) == h->maxCt/2) { /* gather 3 bufs and scatter */ if ((rc = gather(h, buf, &mkey, tmp)) != 0) return rc; /* if last 3 bufs in root, and count is low enough... */ if (buf == root && ct(root) == 2 && ct(gbuf) < (3*(3*h->maxCt))/4) { /* collapse tree by one level */ scatterRoot(h); h->nNodesDel += 3; continue; } if ((rc = scatter(h, buf, mkey, 3, tmp)) != 0) return rc; /* read child */ if ((cc = search(h, buf, key, *rec, &mkey, MODE_MATCH)) == CC_LT) { if ((rc = readDisk(h, childLT(mkey), &cbuf)) != 0) return rc; } else { if ((rc = readDisk(h, childGE(mkey), &cbuf)) != 0) return rc; } } if (cc >= 0 || mkey != fkey(buf)) { lastGEvalid = true; lastLTvalid = false; lastGE = buf->adr; lastGEkey = mkey - fkey(buf); if (cc < 0) lastGEkey -= ks(1); } else { if (lastGEvalid) lastLTvalid = true; } buf = cbuf; } } #if BTREE_DEBUG DPRINTF("D %i = 0x%08x -> %i = 0x%08x\n", *(long*)key,*(long*)key,(long)rec,(long)rec); #endif return bErrOk; } bError bFindFirstKey(bHandle *h, bCursor *c, void *key, bRecAddr *rec) { bError rc; /* return code */ bBuffer *buf; /* buffer */ buf = &h->root; while (!leaf(buf)) { if ((rc = readDisk(h, childLT(fkey(buf)), &buf)) != 0) return rc; } if (ct(buf) == 0) return bErrKeyNotFound; if (key) memcpy(key, key(fkey(buf)), h->keySize); if (rec) *rec = rec(fkey(buf)); c->buffer = buf; c->key = fkey(buf); return bErrOk; } bError bFindLastKey(bHandle *h, bCursor *c, void *key, bRecAddr *rec) { bError rc; /* return code */ bBuffer *buf; /* buffer */ buf = &h->root; while (!leaf(buf)) { if ((rc = readDisk(h, childGE(lkey(buf)), &buf)) != 0) return rc; } if (ct(buf) == 0) return bErrKeyNotFound; if (key) memcpy(key, key(lkey(buf)), h->keySize); if (rec) *rec = rec(lkey(buf)); c->buffer = buf; c->key = lkey(buf); return bErrOk; } bError bFindNextKey(bHandle *h, bCursor *c, void *key, bRecAddr *rec) { bError rc; /* return code */ bKey *nkey; /* next key */ bBuffer *buf; /* buffer */ if ((buf = c->buffer) == NULL) return bErrKeyNotFound; if (c->key == lkey(buf)) { /* current key is last key in leaf node */ if (next(buf)) { /* fetch next set */ if ((rc = readDisk(h, next(buf), &buf)) != 0) return rc; nkey = fkey(buf); } else { /* no more sets */ return bErrKeyNotFound; } } else { /* bump to next key */ nkey = c->key + ks(1); } if (key) memcpy(key, key(nkey), h->keySize); if (rec) *rec = rec(nkey); c->buffer = buf; c->key = nkey; return bErrOk; } bError bFindPrevKey(bHandle *h, bCursor *c, void *key, bRecAddr *rec) { bError rc; /* return code */ bKey *pkey; /* previous key */ bKey *fkey; /* first key */ bBuffer *buf; /* buffer */ if ((buf = c->buffer) == NULL) return bErrKeyNotFound; fkey = fkey(buf); if (c->key == fkey) { /* current key is first key in leaf node */ if (prev(buf)) { /* fetch previous set */ if ((rc = readDisk(h, prev(buf), &buf)) != 0) return rc; pkey = fkey(buf) + ks((ct(buf) - 1)); } else { /* no more sets */ return bErrKeyNotFound; } } else { /* bump to previous key */ pkey = c->key - ks(1); } if (key) memcpy(key, key(pkey), h->keySize); if (rec) *rec = rec(pkey); c->buffer = buf; c->key = pkey; return bErrOk; } bError bCursorReadData(bHandle *h, bCursor *c, void *key, bRecAddr *rec) { if (c->buffer == NULL || !c->buffer->valid) return bErrBufferInvalid; if (key) memcpy(key, key(c->key), h->keySize); if (rec) *rec = rec(c->key); return bErrOk; } int bValidateTree(bHandle *h) { char *visited; visited = (char*)calloc(10240,1); if (!visited) return -1; flushAll(h); DPRINTF("Validating BTree with handle %0lx, root buffer at %0lx", (long)h,(long)&h->root); return _validateTree(h,&h->root,visited,1); } #if 0 static int comp(const void *key1, const void *key2) { unsigned int const *p1; unsigned int const *p2; p1 = key1; p2 = key2; return (*p1 == *p2) ? CC_EQ : (*p1 > *p2 ) ? CC_GT : CC_LT; } #define DO(xyz) \ if ((rc = xyz) != bErrOk) { \ DPRINTF("Error in line %d: rc = %d\n", __LINE__, rc); \ exit(0); \ } int main(void) { bDescription info; bHandle *handle; bCursor c; bError rc; long key; bRecAddr value; remove("t1.dat"); info.iName = "t1.dat"; info.keySize = sizeof(int); info.dupKeys = false; info.sectorSize = 256; info.comp = comp; DO (bOpen(info, &handle)); key = 0x123; value = 0x456; DO (bInsertKey(handle, &key, value)); DO (bFindKey(handle, &c, &key, &value)); DPRINTF("Found key %x with value %x\n",key,value); bFlush(handle); DPRINTF("Buffers flushed.\n"); key = 0x222; value = 0xbeef; DO (bInsertKey(handle, &key, value)); key = 0x123; DO (bFindKey(handle, &c, &key, &value)); DPRINTF("Found key %x with value %x\n",key,value); key = 0x222; DO (bFindKey(handle, &c, &key, &value)); DPRINTF("Found key %x with value %x\n",key,value); DPRINTF("statistics:\n"); DPRINTF(" maximum height: %8d\n", handle->maxHeight); DPRINTF(" nodes inserted: %8d\n", handle->nNodesIns); DPRINTF(" nodes deleted: %8d\n", handle->nNodesDel); DPRINTF(" keys inserted: %8d\n", handle->nKeysIns); DPRINTF(" keys deleted: %8d\n", handle->nKeysDel); DPRINTF(" disk reads: %8d\n", handle->nDiskReads); DPRINTF(" disk writes: %8d\n", handle->nDiskWrites); bClose(handle); /* Second time... */ DPRINTF("\nSecond time...\n\n"); DO (bOpen(info, &handle)); key = 0x123; DO (bFindKey(handle, &c, &key, &value)); DPRINTF("Found key %x with value %x\n",key,value); key = 0x222; DO (bFindKey(handle, &c, &key, &value)); DPRINTF("Found key %x with value %x\n",key,value); DPRINTF("statistics:\n"); DPRINTF(" maximum height: %8d\n", handle->maxHeight); DPRINTF(" nodes inserted: %8d\n", handle->nNodesIns); DPRINTF(" nodes deleted: %8d\n", handle->nNodesDel); DPRINTF(" keys inserted: %8d\n", handle->nKeysIns); DPRINTF(" keys deleted: %8d\n", handle->nKeysDel); DPRINTF(" disk reads: %8d\n", handle->nDiskReads); DPRINTF(" disk writes: %8d\n", handle->nDiskWrites); bClose(handle); return 0; } #endif egenix-mx-base-3.2.7/mx/BeeBase/mxBeeBase/btr.h0000664000175000017500000002752012251376776020745 0ustar lemburglemburg/* Header file extracted from btr.c -- an ANSI C implementation included in the source code distribution of SORTING AND SEARCHING ALGORITHMS: A COOKBOOK by THOMAS NIEMANN Portland, Oregon email: thomasn@jps.net home: http://members.xoom.com/thomasn/s_man.htm From the cookbook: Permission to reproduce this document, in whole or in part, is given provided the original web site listed below is referenced, and no additional restrictions apply. Source code, when part of a software project, may be used freely without reference to the author. Includes modifications by Marc-Andre Lemburg, 1998, mal@lemburg.com: * removed nearly all globals, namely the global pointer h * renamed many symbols * added cursor support * added bFlush() and bUpdateKey() * enhanced bFind*() functions to allow scanning the index without copying any data * removed some unnecessary stuff like hList * added EXTRA_BUFFERS * added bCursorReadData() * fixed a bug that caused a newly initialized root buffer not to written to disk (the modified flag was not set) * added external access to bErrLineNo in btr.h * fixed a bug in search(): when dealing with duplicates not the first but the second key was returned (at least sometimes) * added filemode support to bOpen() * added a fflush() to flushAll() to make sure the data is really written to disk and not just to the cache */ /* * this file is divided into sections: * stuff you'll probably want to place in a .h file... * implementation dependent * - you'll probably have to change something here * implementation independent * - types and function prototypes that typically go in a .h file * function prototypes * - prototypes for user functions */ /**************************** * implementation dependent * ****************************/ /* Maximal allowed sectorSize value */ #define MAX_SECTOR_SIZE 4096 typedef unsigned long bRecAddr; /* record address for external record */ typedef unsigned long bIdxAddr; /* record address for btree node */ #define CC_EQ 0 #define CC_GT 1 #define CC_LT -1 /* compare two keys and return: * CC_LT key1 < key2 * CC_GT key1 > key2 * CC_EQ key1 = key2 */ typedef int (*bCompFunc)(size_t keysize, const void *key1, const void *key2); /* Number of buffers to allocate in addition to the implementations minimum. This will enhance performance if you often read small sequences from the index or use many cursors. */ #define EXTRA_BUFFERS 10 /****************************** * implementation independent * ******************************/ typedef enum {false, true} bool; typedef enum { bErrOk, bErrKeyNotFound, bErrDupKeys, bErrSectorSize, bErrFileNotOpen, bErrFileExists, bErrNotWithDupKeys, bErrBufferInvalid, bErrIO, bErrMemory } bError; typedef struct { /* info for bOpen() */ char *iName; /* name of index file */ int filemode; /* Mode in which to open the file: 0 - try to open it in update mode, revert to creating a new file if that fails 1 - open the file in read-only mode, 2 - force creation of a new file */ int keySize; /* length, in bytes, of key */ bool dupKeys; /* true if duplicate keys allowed */ int sectorSize; /* size of sector on disk */ bCompFunc comp; /* pointer to compare function */ } bDescription; typedef char bKey; /* keys entries are treated as char arrays */ typedef struct { unsigned int leaf:1; /* first bit = 1 if leaf */ unsigned int ct:15; /* count of keys present */ bIdxAddr prev; /* prev node in sequence (leaf) */ bIdxAddr next; /* next node in sequence (leaf) */ bIdxAddr childLT; /* child LT first key */ /* ct occurrences of [key,rec,childGE] */ bKey fkey; /* first occurrence */ } bNode; typedef struct bBufferTag { /* location of node */ struct bBufferTag *next; /* next */ struct bBufferTag *prev; /* previous */ bIdxAddr adr; /* on disk */ bNode *p; /* in memory */ bool valid; /* true if buffer contents valid */ bool modified; /* true if buffer modified */ } bBuffer; typedef struct bHandle { FILE *fp; /* idx file */ int keySize; /* key length */ bool dupKeys; /* true if duplicate keys */ int sectorSize; /* block size for idx records */ bCompFunc comp; /* pointer to compare routine */ bBuffer root; /* root of b-tree, room for 3 sets */ bBuffer bufList; /* head of buf list */ void *malloc1; /* malloc'd resources */ void *malloc2; /* malloc'd resources */ bBuffer gbuf; /* gather buffer, room for 3 sets */ unsigned int maxCt; /* minimum # keys in node */ int ks; /* sizeof key entry */ bIdxAddr nextFreeAdr; /* next free b-tree record address */ /* statistics */ int maxHeight; /* maximum height attained */ int nNodesIns; /* number of nodes inserted */ int nNodesDel; /* number of nodes deleted */ int nKeysIns; /* number of keys inserted */ int nKeysDel; /* number of keys deleted */ int nKeysUpd; /* number of key updates */ int nDiskReads; /* number of disk reads */ int nDiskWrites; /* number of disk writes */ } bHandle; /* Note: Cursors are only valid if their buffer is. */ typedef struct bCursor { bBuffer *buffer; /* buffer in which the key is stored */ bKey *key; /* pointer to key (in buffer) */ } bCursor; /* Line number for last IO or memory error */ extern int bErrLineNo; /*********************** * function prototypes * ***********************/ bError bOpen(bDescription info, bHandle **handle); /* * input: * info info for open * output: * handle handle to btree, used in subsequent calls * returns: * bErrOk open was successful * bErrMemory insufficient memory * bErrSectorSize sector size too small or not 0 mod 4 * bErrFileNotOpen unable to open index file */ bError bFlush(bHandle *handle); /* * input: * handle handle returned by bOpen * returns: * bErrOk file closed, resources deleted * notes: * Flushes all buffers to disk */ bError bClose(bHandle *handle); /* * input: * handle handle returned by bOpen * returns: * bErrOk file closed, resources deleted */ bError bInsertKey(bHandle *handle, void *key, bRecAddr rec); /* * input: * handle handle returned by bOpen * key key to insert * rec record address * returns: * bErrOk operation successful * bErrDupKeys duplicate keys (and info.dupKeys = false) * notes: * If dupKeys is false, then all records inserted must have a * unique key. If dupkeys is true, then duplicate keys are * allowed, but they must all have unique record addresses. * In this case, record addresses are included in internal * nodes to generate a "unique" key. */ bError bUpdateKey(bHandle *handle, void *key, bRecAddr rec); /* * input: * handle handle returned by bOpen * key key to update * rec new record address * returns: * bErrOk operation successful * bErrNotFound key not found * bErrNotAllowed operation not allowed * notes: * This operation is only possible if dupKeys is false due to * the way duplicate keys are handled by the implementation. */ bError bDeleteKey(bHandle *handle, void *key, bRecAddr *rec); /* * input: * handle handle returned by bOpen * key key to delete * rec record address of key to delete * output: * rec record address deleted * returns: * bErrOk operation successful * bErrKeyNotFound key not found * notes: * If dupKeys is false, all keys are unique, and rec is not used * to determine which key to delete. If dupKeys is true, then * rec is used to determine which key to delete. */ bError bFindKey(bHandle *handle, bCursor *c, void *key, bRecAddr *rec); /* * input: * handle handle returned by bOpen * key key to find * output: * cursor cursor pointing to new position * rec record address (if != NULL) * returns: * bErrOk operation successful * bErrKeyNotFound key not found */ bError bFindFirstKey(bHandle *handle, bCursor *c, void *key, bRecAddr *rec); /* * input: * handle handle returned by bOpen * output: * cursor cursor pointing to new position * key first key in sequential set (if != NULL) * rec record address (if != NULL) * returns: * bErrOk operation successful * bErrKeyNotFound key not found */ bError bFindLastKey(bHandle *handle, bCursor *c, void *key, bRecAddr *rec); /* * input: * handle handle returned by bOpen * output: * cursor cursor pointing to new position * key last key in sequential set (if != NULL) * rec record address (if != NULL) * returns: * bErrOk operation successful * bErrKeyNotFound key not found */ bError bFindNextKey(bHandle *handle, bCursor *c, void *key, bRecAddr *rec); /* * input: * handle handle returned by bOpen * cursor cursor pointing to current position * output: * cursor cursor pointing to new position * key key found (if != NULL) * rec record address (if != NULL) * returns: * bErrOk operation successful * bErrKeyNotFound key not found */ bError bFindPrevKey(bHandle *handle, bCursor *c, void *key, bRecAddr *rec); /* * input: * handle handle returned by bOpen * cursor cursor pointing to current position * output: * cursor cursor pointing to new position * key key found (if != NULL) * rec record address (if != NULL) * returns: * bErrOk operation successful * bErrKeyNotFound key not found */ bError bCursorReadData(bHandle *handle, bCursor *c, void *key, bRecAddr *rec); /* * input: * handle handle returned by bOpen * cursor cursor pointing to current position * output: * key key found (if != NULL) * rec record address (if != NULL) * returns: * bErrOk operation successful * bErrBufferInvalid cursor buffer is invalid */ /* Debugging function which validates an open BTree pointed to by handle and returns 0 for a valid tree structure and a negative result for an invalid structure. */ int bValidateTree(bHandle *handle); egenix-mx-base-3.2.7/mx/BeeBase/mxBeeBase/calc-sectorsize.py0000664000175000017500000000552612251376776023453 0ustar lemburglemburg#!/usr/bin/env python """ Calculate the sectorsize for various keysizes. See the conditions in btr.c: if ((info.sectorSize < sizeof(bNode)) || (info.sectorSize % 4) || (info.sectorSize > MAX_SECTOR_SIZE)) return bErrSectorSize; /* ensure that there are at least 3 children/parent for gather/scatter */ maxCt = info.sectorSize - (sizeof(bNode) - sizeof(bKey)); maxCt /= sizeof(bIdxAddr) + info.keySize + sizeof(bRecAddr); if (maxCt < 6) return bErrSectorSize; MAX_SECTOR_SIZE is 1024. For keysize = 25 on a 64-bit platform: (gdb) print maxCt $4 = 5 (gdb) print info.sectorSize $5 = 256 (gdb) print sizeof(bNode) $6 = 40 (gdb) print sizeof(bKey) $7 = 1 (gdb) print sizeof(bIdxAddr) $8 = 8 (gdb) print info.keySize $9 = 26 (gdb) print sizeof(bRecAddr) $10 = 8 (gdb) print sizeof(bIdxAddr) + info.keySize + sizeof(bRecAddr) $11 = 42 (gdb) print info.sectorSize - (sizeof(bNode) - sizeof(bKey)) $12 = 217 """ from mx.BeeBase import BeeIndex ### Globals # Debug level _debug = 0 # Allowed sector sizes; these have to be == 0 mod 4 and should ideally # be multiples of disk sector sizes for better performance SECTOR_SIZES = ( 256, 512, 1024, 2048, 4096, ) ### def calc_maxCt(sectorSize, keySize, sizeof_bNode=BeeIndex.sizeof_bNode, sizeof_bKey=BeeIndex.sizeof_bKey, sizeof_bRecAddr=BeeIndex.sizeof_bRecAddr, sizeof_bIdxAddr=BeeIndex.sizeof_bIdxAddr): maxCt = sectorSize - (sizeof_bNode - sizeof_bKey) maxCt /= sizeof_bIdxAddr + keySize + sizeof_bRecAddr return maxCt def find_sectorsizes(): l = [] # Sanity check for sectorsize in SECTOR_SIZES: assert sectorsize % 4 == 0, 'invalid sectorsize %i' % sectorsize # Find keysizes for keysize in range(1, SECTOR_SIZES[-1]): # The keysize used in mxBeeBase's Python interface does # not include the terminating 0-byte, so add one to the # keysize bytesize = keysize + 1 for sectorsize in SECTOR_SIZES: maxct = calc_maxCt(sectorsize, bytesize) if maxct < 6: continue else: l.append((keysize, sectorsize)) break else: # Max. sectorsize reached, stop searching if _debug: print ('WARNING: no sectorsize found for keysize=%i' % keysize) break return l ### if __name__ == '__main__': print ('mxBeeBase BeeIndex - Valid sectorsizes for various keysizes') print ('') print ('keysize : sectorsize') print ('--------------------') for (keysize, sectorsize) in find_sectorsizes(): print ('%-8i: %i' % (keysize, sectorsize)) egenix-mx-base-3.2.7/mx/BeeBase/mxBeeBase/ld_so_aix0000775000175000017500000001351507057236756021674 0ustar lemburglemburg#!/bin/sh # # ======================================================================== # FILE: ld_so_aix # TYPE: executable, uses makexp_aix # SYSTEM: AIX # # DESCRIPTION: Creates a shareable .o from a set of pre-compiled # (unshared) .o files # # USAGE: ld_so_aix [CC] [arguments] # # ARGUMENTS: Same as for "ld". The following arguments are processed # or supplied by this script (those marked with an asterisk # can be overriden from command line): # # Argument Default value # (*) -o [OutputFileName] -o shr.o # (*) -e [EntryPointLabel] -e init[OutputBaseName] # (*) -bE:[ExportFile] -bE:[OutputBaseName].exp # (*) -bI:[ImportFile] -bI:./python.exp # -bM:[ModuleType] -bM:SRE # -bhalt:[Number] -bhalt:4 # -T[Number] -T512 # -H[Number] -H512 # -lm # # The compiler specific ("-lc" or "-lc_r", "-lpthreads",...) # arguments will be automatically passed to "ld" according # to the CC command provided as a first argument to this # script. Usually, the same CC command was used to produce # the pre-compiled .o file(s). # # NOTES: 1. Since "ld_so_aix" was originally written for building # shared modules for the Python interpreter, the -e and # -bI default values match Python's conventions. In # Python, the entry point for a shared module is based # on the module's name (e.g., the "mathmodule" will # expect an entry point of "initmath"). # 2. The script accepts multiple .o or .a input files and # creates a single (shared) output file. The export list # that is created is based on the output file's basename # with the suffix ".exp". # 3. The resulting shared object file is left in the # current directory. # 4. Uncommenting the "echo" lines gives detailed output # about the commands executed in the script. # # # HISTORY: Oct-1996 -- Support added for multiple .o files -- # -- and optional arguments processing. -- # Chris Myers (myers@tc.cornell.edu), Keith Kwok # (kkwok@tc.cornell.edu) and Vladimir Marangozov # # Aug-6-1996 -- Take care of the compiler specific -- # -- args by leaving CC to invoke "ld". -- # Vladimir Marangozov # # Jul-1-1996 -- Make sure to use /usr/ccs/bin/ld -- # -- Use makexp_aix for the export list. -- # Vladimir Marangozov (Vladimir.Marangozov@imag.fr) # # Manus Hand (mhand@csn.net) -- Initial code -- 6/24/96 # ======================================================================== # usage="Usage: ld_so_aix [CC command] [ld arguments]" if test ! -n "$*"; then echo $usage; exit 2 fi makexp=`dirname $0`/makexp_aix # Check for existence of compiler. CC=$1; shift whichcc=`which $CC` if test ! -x "$whichcc"; then echo "ld_so_aix: Compiler '$CC' not found; exiting." exit 2 fi if test ! -n "$*"; then echo $usage; exit 2 fi # Default import file for Python # Can be overriden by providing a -bI: argument. impfile="./python.exp" # Parse arguments while test -n "$1" do case "$1" in -e | -Wl,-e) if test -z "$2"; then echo "ld_so_aix: The -e flag needs a parameter; exiting."; exit 2 else shift; entry=$1 fi ;; -e* | -Wl,-e*) entry=`echo $1 | sed -e "s/-Wl,//" -e "s/-e//"` ;; -o) if test -z "$2"; then echo "ld_so_aix: The -o flag needs a parameter; exiting."; exit 2 else shift; objfile=$1 fi ;; -o*) objfile=`echo $1 | sed "s/-o//"` ;; -bI:* | -Wl,-bI:*) impfile=`echo $1 | sed -e "s/-Wl,//" -e "s/-bI://"` ;; -bE:* | -Wl,-bE:*) expfile=`echo $1 | sed -e "s/-Wl,//" -e "s/-bE://"` ;; *.o | *.a) objs="$objs $1" args="$args $1" ;; -bM:* | -Wl,-bM:* | -H* | -Wl,-H* | -T* | -Wl,-T* | -lm) ;; *) args="$args $1" ;; esac shift done if test -z "$objs"; then echo "ld_so_aix: No input files; exiting." exit 2 elif test ! -r "$impfile"; then echo "ld_so_aix: Import file '$impfile' not found or not readable; exiting." exit 2 fi # If -o wasn't specified, assume "-o shr.o" if test -z "$objfile"; then objfile=shr.o fi filename=`basename $objfile | sed "s/\.[^.]*$//"` # If -bE: wasn't specified, assume "-bE:$filename.exp" if test -z "$expfile"; then expfile="$filename.exp" fi # Default entry symbol for Python modules = init[modulename] # Can be overriden by providing a -e argument. if test -z "$entry"; then entry=init`echo $filename | sed "s/module.*//"` fi #echo "ld_so_aix: Debug info section" #echo " -> output file : $objfile" #echo " -> import file : $impfile" #echo " -> export file : $expfile" #echo " -> entry point : $entry" #echo " -> object files: $objs" #echo " -> CC arguments: $args" CCOPT="-Wl,-e$entry -Wl,-bE:$expfile -Wl,-bI:$impfile -Wl,-bhalt:4" CCOPT="$CCOPT -Wl,-bM:SRE -Wl,-T512 -Wl,-H512 -lm -o $objfile" CCARGS="$args" # Export list generation. #echo $makexp $expfile "$objfile" $objs $makexp $expfile "$objfile" $objs # Perform the link. #echo $CC $CCOPT $CCARGS $CC $CCOPT $CCARGS # Delete the module's export list file. # Comment this line if you need it. rm -f $expfile egenix-mx-base-3.2.7/mx/BeeBase/mxBeeBase/makexp_aix0000775000175000017500000000603507057236752022054 0ustar lemburglemburg#!/bin/sh # # =========================================================================== # FILE: makexp_aix # TYPE: standalone executable # SYSTEM: AIX 3.2.5 and AIX 4 # # DESCRIPTION: This script creates an export list of ALL global symbols # from a list of object or archive files. # # USAGE: makexp_aix "" ... # # where: # is the target export list filename. # is the path/file string to be appended # after the "#!" symbols in the first line of the # export file. Passing "" means deferred resolution. # is an object (.o) or an archive file (.a). # # HISTORY: # 3-Apr-1998 -- remove C++ entries of the form Class::method # Vladimir Marangozov # # 1-Jul-1996 -- added header information # Vladimir Marangozov # # 28-Jun-1996 -- initial code # Vladimir Marangozov (Vladimir.Marangozov@imag.fr) # ========================================================================== # Variables expFileName=$1 toAppendStr=$2 shift; shift; inputFiles=$* automsg="Generated automatically by makexp_aix" notemsg="NOTE: lists _all_ global symbols defined in the above file(s)." curwdir=`pwd` # Create the export file and setup the header info echo "#!"$toAppendStr > $expFileName echo "*" >> $expFileName echo "* $automsg (`date -u`)" >> $expFileName echo "*" >> $expFileName echo "* Base Directory: $curwdir" >> $expFileName echo "* Input File(s) : $inputFiles" >> $expFileName echo "*" >> $expFileName echo "* $notemsg" >> $expFileName echo "*" >> $expFileName # Extract the symbol list using 'nm' which produces quite # different output under AIX 4 than under AIX 3.2.5. # The following handles both versions by using a common flagset. # Here are some hidden tricks: # 1. Use /usr/ccs/bin/nm. Relevant to AIX 3.2.5 which has # another version under /usr/ucb/bin/nm. # 2. Use the -B flag to have a standard BSD representation # of the symbol list on both AIX 3.2.5 and AIX 4. The "-B" # flag is missing in the AIX 3.2.5 online usage help of 'nm'. # 3. Use the -x flag to have a hex representation of the symbol # values. This fills the leading whitespaces on AIX 4, # thus simplifying the sed statement. # 4. Eliminate all entries except those with either "B", "D" # or "T" key letters. We are interested only in the global # (extern) BSS, DATA and TEXT symbols. With the same statement # we eliminate object member lines relevant to AIX 4. # 5. Eliminate entries containing a dot. We can have a dot only # as a symbol prefix, but such symbols are undefined externs. # 6. Eliminate everything including the key letter, so that we're # left with just the symbol name. # 7. Eliminate all entries containing two colons, like Class::method # /usr/ccs/bin/nm -Bex $inputFiles \ | sed -e '/ [^BDT] /d' -e '/\./d' -e 's/.* [BDT] //' -e '/::/d' \ | sort | uniq >> $expFileName egenix-mx-base-3.2.7/mx/BeeBase/mxBeeBase/mx.h0000664000175000017500000005570412133300665020566 0ustar lemburglemburg#ifndef MX_H #define MX_H /* mx -- Marc's eXtension modules for Python: basic macros This file is only meant to be included by the extension modules. DO NOT include it in the extension module's header file, since it will definitely cause troubles then. To enable debugging ceratin things, define one of these before including this file: MAL_REF_DEBUG -- debug reference counts (Py_MY_xxx) [this file] MAL_DEBUG -- enable debug output (DPRINTF) [mxstdlib.h] MAL_MEM_DEBUG -- enable malloc output (new,cnew,free,...) [mxstdlib.h] Copyright (c) 2000, Marc-Andre Lemburg; mailto:mal@lemburg.com Copyright (c) 2000-2013, eGenix.com Software GmbH; mailto:info@egenix.com See the documentation for further copyright information or contact the author. XXX Most of these macros and defines should really use an mx prefix to avoid collisions with native Python macros and defines. So far this has not happened, which is why this hasn't been implemented yet. */ /* --- Platform or compiler specific tweaks ------------------------------- */ /* Add some platform specific symbols to enable work-arounds for the static forward declaration of type definitions; note that the GNU C compiler does not have this problem. Many thanks to all who have contributed to this list. */ #ifndef BAD_STATIC_FORWARD # if (!defined(__GNUC__)) # if (defined(NeXT) || defined(sgi) || defined(_AIX) || (defined(__osf__) && defined(__DECC)) || defined(TrueCompaq64) || defined(__VMS)) # define BAD_STATIC_FORWARD # endif # endif #endif /* Some more tweaks for various platforms. */ /* VMS needs this define. Thanks to Jean-Franois PIRONNE */ #if defined(__VMS) # define __SC__ #endif /* xlC on AIX doesn't like the Python work-around for static forwards in ANSI mode (default), so we switch on extended mode. Thanks to Albert Chin-A-Young */ #if defined(__xlC__) # pragma langlvl extended #endif /* --- Standard header files ---------------------------------------------- */ /* Include the generic mx header file */ #include "mxh.h" /* Include nearly all Python symbols & definitions */ #include "Python.h" /* Include other standard stuff */ #include "mxstdlib.h" /* Include Python backward compatibility stuff */ #include "mxpyapi.h" /* --- Compiler support --------------------------------------------------- */ /* Support for compilers which don't like static forward declarations of arrays; Python 2.3 removed the support for BAD_STATIC_FORWARD which is why we now use our own little helpers here. */ #undef staticforward #undef statichere #ifdef BAD_STATIC_FORWARD # define staticforward extern # define statichere static #else # define staticforward static # define statichere static #endif /* --- Declare macros ----------------------------------------------------- */ #define Py_NONE (Py_INCREF(Py_None),Py_None) #ifdef MAL_REF_DEBUG # define printref(x) printf("* refcount for "#x" = %i\n",(long) x->ob_refcnt); #else # define printref(x) #endif /* --- Error handling ----------------------------------------------------- */ #define Py_Do(x) {if (!(x)) goto onError;} #define Py_ReturnOnError(errortype,errorstr) {PyErr_SetString(errortype,errorstr);return NULL;} #define Py_Assert(x,errortype,errorstr) {if (!(x)) {PyErr_SetString(errortype,errorstr);goto onError;}} #define Py_AssertWithArg(x,errortype,errorstr,a1) {if (!(x)) {PyErr_Format(errortype,errorstr,a1);goto onError;}} #define Py_AssertWith2Args(x,errortype,errorstr,a1,a2) {if (!(x)) {PyErr_Format(errortype,errorstr,a1,a2);goto onError;}} #define Py_AssertWith3Args(x,errortype,errorstr,a1,a2,a3) {if (!(x)) {PyErr_Format(errortype,errorstr,a1,a2,a3);goto onError;}} #define Py_Error(errortype,errorstr) {PyErr_SetString(errortype,errorstr);goto onError;} #define Py_ErrorWithArg(errortype,errorstr,a1) {PyErr_Format(errortype,errorstr,a1);goto onError;} #define Py_ErrorWith2Args(errortype,errorstr,a1,a2) {PyErr_Format(errortype,errorstr,a1,a2);goto onError;} #define Py_ErrorWith3Args(errortype,errorstr,a1,a2,a3) {PyErr_Format(errortype,errorstr,a1,a2,a3);goto onError;} /* --- Reference counting ------------------------------------------------- */ #ifdef MAL_REF_DEBUG static void mx_Py_INCREF(PyObject *v, const char *name, const char *filename, int lineno) { if (!Py_DebugFlag) { Py_XINCREF(v); return; } if (!v) mxDebugPrintf("[%s:%5i] Py_XINCREF( %-8s == NULL );\n", filename,lineno,name); else { Py_INCREF(v);; mxDebugPrintf("[%s:%5i] Py_XINCREF( %-8s at 0x%lx [%s]); " "new refcount = %i\n", filename,lineno,name,(long)v,v->ob_type->tp_name, v->ob_refcnt); } } static void mx_Py_DECREF(PyObject *v, const char *name, const char *filename, int lineno) { if (!Py_DebugFlag) { Py_XDECREF(v); return; } if (!v) mxDebugPrintf("[%s:%5i] Py_XDECREF( %-8s == NULL );\n", filename,lineno,name); else { int refcnt = v->ob_refcnt; Py_DECREF(v); if (refcnt <= 1) mxDebugPrintf("[%s:%5i] Py_XDECREF( %-8s at 0x%lx [%s]); " "object deleted\n", filename,lineno,name,(long)v,v->ob_type->tp_name); else mxDebugPrintf("[%s:%5i] Py_XDECREF( %-8s at 0x%lx [%s]); " "new refcount = %i\n", filename,lineno,name,(long)v,v->ob_type->tp_name, v->ob_refcnt); } } static void mx_Py_PRINT_REFCOUNT(PyObject *v, const char *name, const char *filename, int lineno) { if (!Py_DebugFlag) return; if (!v) mxDebugPrintf("[%s:%5i] Py_PRINT_REFCOUNT( %-8s == NULL );\n", filename,lineno,name); else { mxDebugPrintf("[%s:%5i] Py_PRINT_REFCOUNT( %-8s at 0x%lx [%s]) = %i;\n", filename,lineno,name,(long)v,v->ob_type->tp_name, v->ob_refcnt); } } # undef Py_INCREF # define Py_INCREF(x) mx_Py_INCREF((PyObject *)x,#x,__FILE__,__LINE__) # undef Py_DECREF # define Py_DECREF(x) mx_Py_DECREF((PyObject *)x,#x,__FILE__,__LINE__) # undef Py_XINCREF # define Py_XINCREF(x) mx_Py_INCREF((PyObject *)x,#x,__FILE__,__LINE__) # undef Py_XDECREF # define Py_XDECREF(x) mx_Py_DECREF((PyObject *)x,#x,__FILE__,__LINE__) # undef Py_CLEAR # define Py_CLEAR(x) {Py_XDECREF(x); x=0;} # define Py_DELETE(x) {if (x->ob_refcnt > 1) mxDebugPrintf("[%s:%5i] Py_DELETE( "#x" ) WARNING: Refcount = %i > 1\n",__FILE__,__LINE__,(int)x->ob_refcnt);Py_DECREF(x);} # define Py_PRINT_REFCOUNT(x) mx_Py_PRINT_REFCOUNT((PyObject *)x,#x,__FILE__,__LINE__) #else # define Py_DELETE(x) Py_DECREF(x) # define Py_PRINT_REFCOUNT(x) #endif #define Py_DEC_REF(x) {Py_XDECREF(x); x=0;} /* doing this once too often doesn't hurt; same as Py_CLEAR() */ /* Unreference a Python object. This is only used in Python debug builds and needed to keep track of all allocated references. Use in object constructors or free list implementations. */ #ifndef _Py_DEC_REFTOTAL # ifdef Py_REF_DEBUG # define _Py_DEC_REFTOTAL _Py_RefTotal-- # else # define _Py_DEC_REFTOTAL # endif #endif #define mxPy_UNREF(x) _Py_DEC_REFTOTAL /* --- Debug logging ------------------------------------------------------ */ #ifdef MAL_DEBUG # define Py_PRINT_REPR(message, obj) \ if (Py_DebugFlag) { \ PyObject *_debug_repr = PyObject_Repr(obj); \ mxDebugPrintf(message, PyString_AsString(_debug_repr)); \ Py_XDECREF(_debug_repr); \ } #else # define Py_PRINT_REPR(message, obj) #endif /* --- Argument passing and checking -------------------------------------- */ /* No arguments expected; also use Py_MethodListEntryNoArgs() for this kind of fct; this check is no longer needed in Python 2.3 and later */ #if PY_VERSION_HEX >= 0x02030000 # define Py_NoArgsCheck() {if (0) goto onError;} #else # define Py_NoArgsCheck() {if (!PyArg_NoArgs(args)) goto onError;} #endif /* For functions with old style args (Py_MethodListEntrySingleArg) */ #define Py_GetArgObject(a) {a = args; if (!a) {PyErr_SetString(PyExc_TypeError,"function/method requires an argument"); goto onError;}} #define Py_GetSingleArg(format,a1) {if (!PyArg_Parse(args,format,&a1)) goto onError;} /* For functions with new style args: */ #define Py_GetArg(format,a1) {if (!PyArg_ParseTuple(args,format,&a1)) goto onError;} #define Py_Get2Args(format,a1,a2) {if (!PyArg_ParseTuple(args,format,&a1,&a2)) goto onError;} #define Py_Get3Args(format,a1,a2,a3) {if (!PyArg_ParseTuple(args,format,&a1,&a2,&a3)) goto onError;} #define Py_Get4Args(format,a1,a2,a3,a4) {if (!PyArg_ParseTuple(args,format,&a1,&a2,&a3,&a4)) goto onError;} #define Py_Get5Args(format,a1,a2,a3,a4,a5) {if (!PyArg_ParseTuple(args,format,&a1,&a2,&a3,&a4,&a5)) goto onError;} #define Py_Get6Args(format,a1,a2,a3,a4,a5,a6) {if (!PyArg_ParseTuple(args,format,&a1,&a2,&a3,&a4,&a5,&a6)) goto onError;} #define Py_Get7Args(format,a1,a2,a3,a4,a5,a6,a7) {if (!PyArg_ParseTuple(args,format,&a1,&a2,&a3,&a4,&a5,&a6,&a7)) goto onError;} #define Py_Get8Args(format,a1,a2,a3,a4,a5,a6,a7,a8) {if (!PyArg_ParseTuple(args,format,&a1,&a2,&a3,&a4,&a5,&a6,&a7,&a8)) goto onError;} /* The keywords array string type */ #define Py_KEYWORDS_STRING_TYPE char /* For functions with keywords -- the first macro parameter must be the keywords array given as e.g. static const char *keywords[] = {"first","second","third", 0}; with an entry for every argument (in the correct order). The functions must be included in the method list using Py_MethodWithKeywordsListEntry() and be declared as Py_C_Function_WithKeywords(). */ #define Py_KeywordGetArg(keywords,format,a1) {if (!PyArg_ParseTupleAndKeywords(args,kws,format,keywords,&a1)) goto onError;} #define Py_KeywordGet2Args(keywords,format,a1,a2) {if (!PyArg_ParseTupleAndKeywords(args,kws,format,keywords,&a1,&a2)) goto onError;} #define Py_KeywordGet3Args(keywords,format,a1,a2,a3) {if (!PyArg_ParseTupleAndKeywords(args,kws,format,keywords,&a1,&a2,&a3)) goto onError;} #define Py_KeywordGet4Args(keywords,format,a1,a2,a3,a4) {if (!PyArg_ParseTupleAndKeywords(args,kws,format,keywords,&a1,&a2,&a3,&a4)) goto onError;} #define Py_KeywordGet5Args(keywords,format,a1,a2,a3,a4,a5) {if (!PyArg_ParseTupleAndKeywords(args,kws,format,keywords,&a1,&a2,&a3,&a4,&a5)) goto onError;} #define Py_KeywordGet6Args(keywords,format,a1,a2,a3,a4,a5,a6) {if (!PyArg_ParseTupleAndKeywords(args,kws,format,keywords,&a1,&a2,&a3,&a4,&a5,&a6)) goto onError;} #define Py_KeywordGet7Args(keywords,format,a1,a2,a3,a4,a5,a6,a7) {if (!PyArg_ParseTupleAndKeywords(args,kws,format,keywords,&a1,&a2,&a3,&a4,&a5,&a6,&a7)) goto onError;} #define Py_KeywordGet8Args(keywords,format,a1,a2,a3,a4,a5,a6,a7,a8) {if (!PyArg_ParseTupleAndKeywords(args,kws,format,keywords,&a1,&a2,&a3,&a4,&a5,&a6,&a7,&a8)) goto onError;} /* New style macros fof functions supporting keywords -- the C variable names are used as template for the keyword list, i.e. they must match the Python keyword parameter names. Note that format strings with special parameters (e.g. "#s") are not allowed since they would cause the keyword list to be out of sync. The functions must be included in the method list using Py_MethodWithKeywordsListEntry() and be declared as Py_C_Function_WithKeywords(). Example: Py_C_Function_WithKeywords( myfunction, "myfunction(filename,dupkeys=0,filemode=0,sectorsize=512)\n\n" "Returns a myobject" ) { char *filename; int sectorsize = 512; int dupkeys = 0; int filemode = 0; Py_KeywordsGet4Args("s|iii", filename,dupkeys,filemode,sectorsize); return (PyObject *)myobject_New(filename, filemode, sectorsize, dupkeys); onError: return NULL; } */ #define Py_KeywordsGetArg(format,a1) {static Py_KEYWORDS_STRING_TYPE *kwslist[] = {#a1,NULL}; if (!PyArg_ParseTupleAndKeywords(args,kws,format,kwslist,&a1)) goto onError;} #define Py_KeywordsGet2Args(format,a1,a2) {static Py_KEYWORDS_STRING_TYPE *kwslist[] = {#a1,#a2,NULL}; if (!PyArg_ParseTupleAndKeywords(args,kws,format,kwslist,&a1,&a2)) goto onError;} #define Py_KeywordsGet3Args(format,a1,a2,a3) {static Py_KEYWORDS_STRING_TYPE *kwslist[] = {#a1,#a2,#a3,NULL}; if (!PyArg_ParseTupleAndKeywords(args,kws,format,kwslist,&a1,&a2,&a3)) goto onError;} #define Py_KeywordsGet4Args(format,a1,a2,a3,a4) {static Py_KEYWORDS_STRING_TYPE *kwslist[] = {#a1,#a2,#a3,#a4,NULL}; if (!PyArg_ParseTupleAndKeywords(args,kws,format,kwslist,&a1,&a2,&a3,&a4)) goto onError;} #define Py_KeywordsGet5Args(format,a1,a2,a3,a4,a5) {static Py_KEYWORDS_STRING_TYPE *kwslist[] = {#a1,#a2,#a3,#a4,#a5,NULL}; if (!PyArg_ParseTupleAndKeywords(args,kws,format,kwslist,&a1,&a2,&a3,&a4,&a5)) goto onError;} #define Py_KeywordsGet6Args(format,a1,a2,a3,a4,a5,a6) {static Py_KEYWORDS_STRING_TYPE *kwslist[] = {#a1,#a2,#a3,#a4,#a5,#a6,NULL}; if (!PyArg_ParseTupleAndKeywords(args,kws,format,kwslist,&a1,&a2,&a3,&a4,&a5,&a6)) goto onError;} #define Py_KeywordsGet7Args(format,a1,a2,a3,a4,a5,a6,a7) {static Py_KEYWORDS_STRING_TYPE *kwslist[] = {#a1,#a2,#a3,#a4,#a5,#a6,#a7,NULL}; if (!PyArg_ParseTupleAndKeywords(args,kws,format,kwslist,&a1,&a2,&a3,&a4,&a5,&a6,&a7)) goto onError;} #define Py_KeywordsGet8Args(format,a1,a2,a3,a4,a5,a6,a7,a8) {static Py_KEYWORDS_STRING_TYPE *kwslist[] = {#a1,#a2,#a3,#a4,#a5,#a6,#a7,#a8,NULL}; if (!PyArg_ParseTupleAndKeywords(args,kws,format,kwslist,&a1,&a2,&a3,&a4,&a5,&a6,&a7,&a8)) goto onError;} /* --- Returning values to Python ----------------------------------------- */ /* XXX Don't always work: every time you have an 'O' in the BuildValue format string, you need to DECREF the variable *after* the tuple has been built !!! */ #define Py_ReturnNone() {Py_INCREF(Py_None);return Py_None;} #define Py_ReturnTrue() {Py_INCREF(Py_True);return Py_True;} #define Py_ReturnFalse() {Py_INCREF(Py_False);return Py_False;} #define Py_ReturnArg(format,a1) return Py_BuildValue(format,a1); #define Py_Return Py_ReturnArg #define Py_Return2Args(format,a1,a2) return Py_BuildValue(format,a1,a2); #define Py_Return2 Py_Return2Args #define Py_Return3Args(format,a1,a2,a3) return Py_BuildValue(format,a1,a2,a3); #define Py_Return3 Py_Return3Args #define Py_Return4Args(format,a1,a2,a3) return Py_BuildValue(format,a1,a2,a3,a4); #define Py_Return5Args(format,a1,a2,a3) return Py_BuildValue(format,a1,a2,a3,a4,a5); #define Py_Return6Args(format,a1,a2,a3) return Py_BuildValue(format,a1,a2,a3,a4,a5,a6); #define Py_Return7Args(format,a1,a2,a3) return Py_BuildValue(format,a1,a2,a3,a4,a5,a6,a7); /* Build values */ #define Py_BuildNone() Py_NONE #define Py_Build(format,x) Py_BuildValue(format,x) #define Py_Build2(format,x,y) Py_BuildValue(format,x,y) #define Py_Build3(format,x,y,z) Py_BuildValue(format,x,y,z) /* --- Declaring Python builtin functions/methods ------------------------- */ /* The doc-string type changed to const char* in Python 2.5 */ #if PY_VERSION_HEX >= 0x02050000 # define Py_DOC_STRING_TYPE const char #else # define Py_DOC_STRING_TYPE char #endif /* Declare C function/method fct, having docstring docstr; may use vargargs */ #define Py_C_Function(fct,docstr) \ static Py_DOC_STRING_TYPE fct##_docstring[] = docstr;\ static PyObject *fct(PyObject *self, PyObject *args) /* Declare C function/method fct, having keywords keywordsarray and a docstring docstr; may use vargargs & keywords */ #define Py_C_Function_WithKeywords(fct,docstr) \ static Py_DOC_STRING_TYPE fct##_docstring[] = docstr;\ static PyObject *fct(PyObject *self, PyObject *args, PyObject *kws) /* These declare: self -- instance pointer for methods, NULL for functions args -- argument tuple kws -- keywords dict (if applicable) plus as statics: _docstring -- the docstring as given _keywords -- the keyword array as given Note: use the Py_GetArg macros for functions without keywords, and Py_KeywordGetArg macros for functions with keywords */ /* --- Method list entries for builtin functions/methods ------------------ */ /* Add a C function/method cname to the module dict as pyname; no doc-string */ #define Py_MethodListEntryAny(pyname,cname) {pyname,(PyCFunction)cname,METH_VARARGS} /* Add a C function/method cname to the module dict as pyname; the function can use varargs */ #define Py_MethodListEntry(pyname,cname) {pyname,(PyCFunction)cname,METH_VARARGS,cname##_docstring} /* Add a C function/method cname to the module dict as pyname; the function takes no args; in Python 2.3 a new flag was added for these which implements the no args check in the interpreter itself. */ #ifdef METH_NOARGS # define Py_MethodListEntryNoArgs(pyname,cname) {pyname,(PyCFunction)cname,METH_NOARGS,cname##_docstring} #else # define Py_MethodListEntryNoArgs(pyname,cname) {pyname,(PyCFunction)cname,0,cname##_docstring} #endif /* Add a C function/method cname to the module dict as pyname; the function takes one argument: the object is passed in directly (without wrapping it into a tuple first), i.e. don't use the Py_GetArg-macros or PyArg_ParseTuple(). */ #define Py_MethodListEntrySingleArg(pyname,cname) {pyname,(PyCFunction)cname,0,cname##_docstring} /* Add a C function/method that uses keywords to the module dict */ #define Py_MethodWithKeywordsListEntry(pyname,cname) {pyname,(PyCFunction)cname,METH_VARARGS | METH_KEYWORDS,cname##_docstring} /* --- Sequence slicing --------------------------------------------------- */ /* Check a given slice and apply the usual rules for negative indices */ #define Py_CheckSequenceSlice(len,start,stop) { \ if (stop > len) \ stop = len; \ else { \ if (stop < 0) \ stop += len; \ if (stop < 0) \ stop = 0; \ } \ if (start < 0) { \ start += len; \ if (start < 0) \ start = 0; \ } \ if (stop < start) \ start = stop; \ } /* --- Number macros ------------------------------------------------------ */ /* Test for PyFloat_AsDouble() compatible object */ #define PyFloat_Compatible(obj) \ (PyInstance_Check(obj) \ ? PyObject_HasAttrString(obj, "__float__") \ : (obj->ob_type->tp_as_number != NULL && \ obj->ob_type->tp_as_number->nb_float != NULL)) /* --- Text macros -------------------------------------------------------- */ /* Check a given text slice and apply the usual rules for negative indices */ #define Py_CheckBufferSlice(textlen,start,stop) \ Py_CheckSequenceSlice(textlen,start,stop) /* Dito for string objects */ #define Py_CheckStringSlice(textobj,start,stop) \ Py_CheckSequenceSlice(PyString_GET_SIZE(textobj),start,stop) /* For b/w compatibility */ #define Py_CheckSlice(textobj,start,stop) \ Py_CheckStringSlice(textobj,start,stop) /* Dito for Unicode objects */ #ifdef PyUnicode_GET_SIZE # define Py_CheckUnicodeSlice(unicode,start,stop) \ Py_CheckSequenceSlice(PyUnicode_GET_SIZE(unicode),start,stop) #endif /* This assumes that fixed is a constant char array; the strcmp function is only called in case the attribute name length exceeds 10 characters and the first 10 characters match; optimizing compilers should eliminate any unused parts of this comparison automatically. Note: The latest egcs compiler warns about the subscripts being out of range for shorter fixed strings; since no code is generated for those comparisons, these warning can safely be ignored. Still, they are annoying. See the Py_StringsCompareEqual() macro below for a way to work around this. */ #define Py_StringsCompareEqualEx(var,fixed,fixedsize) \ (var[0] == fixed[0] && \ (fixed[0] == 0 || \ (fixedsize >= 1 && (var[1] == fixed[1] && \ (fixed[1] == 0 || \ (fixedsize >= 2 && (var[2] == fixed[2] && \ (fixed[2] == 0 || \ (fixedsize >= 3 && (var[3] == fixed[3] && \ (fixed[3] == 0 || \ (fixedsize >= 4 && (var[4] == fixed[4] && \ (fixed[4] == 0 || \ (fixedsize >= 5 && (var[5] == fixed[5] && \ (fixed[5] == 0 || \ (fixedsize >= 6 && (var[6] == fixed[6] && \ (fixed[6] == 0 || \ (fixedsize >= 7 && (var[7] == fixed[7] && \ (fixed[7] == 0 || \ (fixedsize >= 8 && (var[8] == fixed[8] && \ (fixed[8] == 0 || \ (fixedsize >= 9 && (var[9] == fixed[9] && \ (fixed[9] == 0 || \ (fixedsize >= 10 && \ strcmp(&var[10],&fixed[10]) == 0 \ )))))))))))))))))))))))))))))) /* This assumes that fixed is a constant char array. The appended string snippet is to shut up the warnings produced by newer egcs/gcc compilers about offsets being outside bounds. Note that some compilers do the inlining by themselves or don't like the above trick (OpenVMS is one such platform). For these we simply use the standard way. */ #ifndef __VMS # define Py_StringsCompareEqual(var,fixed) \ Py_StringsCompareEqualEx(var,fixed"\0\0\0\0\0\0\0\0\0\0",sizeof(fixed)) #else # define Py_StringsCompareEqual(var,fixed) (strcmp(var, fixed) == 0) #endif /* Fast character set member check; set must be a "static unsigned *char set" array of exactly 32 bytes length generated with TextTools.set() */ #define Py_CharInSet(chr,set) \ (((unsigned char)(set)[(unsigned char)(chr) >> 3] & \ (1 << ((unsigned char)(chr) & 7))) != 0) /* --- Macros for getattr ------------------------------------------------- */ /* Compares var to name and returns 1 iff they match. This assumes that name is a constant char array. */ #define Py_WantAttr(var,name) Py_StringsCompareEqual(var,name) /* --- Module init helpers ------------------------------------------------ */ /* Helper for startup type object initialization */ #define PyType_Init(x) \ { \ x.ob_type = &PyType_Type; \ Py_Assert(x.tp_basicsize >= (int)sizeof(PyObject), \ PyExc_SystemError, \ "Internal error: tp_basicsize of "#x" too small");\ if (PyType_Ready(&x) < 0) \ goto onError; \ } /* Error reporting for module init functions */ #define Py_ReportModuleInitError(modname) { \ PyObject *exc_type, *exc_value, *exc_tb; \ PyObject *str_type, *str_value; \ \ /* Fetch error objects and convert them to strings */ \ PyErr_Fetch(&exc_type, &exc_value, &exc_tb); \ if (exc_type && exc_value) { \ str_type = PyObject_Str(exc_type); \ str_value = PyObject_Str(exc_value); \ } \ else { \ str_type = NULL; \ str_value = NULL; \ } \ /* Try to format a more informative error message using the \ original error */ \ if (str_type && str_value && \ PyString_Check(str_type) && PyString_Check(str_value)) \ PyErr_Format( \ PyExc_ImportError, \ "initialization of module "modname" failed " \ "(%s:%s)", \ PyString_AS_STRING(str_type), \ PyString_AS_STRING(str_value)); \ else \ PyErr_SetString( \ PyExc_ImportError, \ "initialization of module "modname" failed"); \ Py_XDECREF(str_type); \ Py_XDECREF(str_value); \ Py_XDECREF(exc_type); \ Py_XDECREF(exc_value); \ Py_XDECREF(exc_tb); \ } /* --- SWIG addons -------------------------------------------------------- */ /* Throw this error after having set the correct Python exception using e.g. PyErr_SetString(); */ #define mxSWIGError "mxSWIGError" /* EOF */ #endif egenix-mx-base-3.2.7/mx/BeeBase/mxBeeBase/mxBeeBase.c0000664000175000017500000012742112251400403021754 0ustar lemburglemburg/* mxBeeBase -- BeeBase C extension Copyright (c) 1998-2000, Marc-Andre Lemburg; mailto:mal@lemburg.com Copyright (c) 2000-2013, eGenix.com Software GmbH; mailto:info@egenix.com See the documentation for further copyright information or contact the author (mailto:mal@lemburg.com). */ /* Define this to aid in finding memory leaks */ /*#define MAL_MEM_DEBUG*/ /*#define MAL_DEBUG*/ /* Logging file used by debugging facility */ #ifndef MAL_DEBUG_OUTPUTFILE # define MAL_DEBUG_OUTPUTFILE "mxBeeBase.log" #endif /* We want all our symbols to be exported */ #define MX_BUILDING_MXBEEBASE /* Mark the module as Py_ssize_t clean. */ #define PY_SSIZE_T_CLEAN 1 /* Setup mxstdlib memory management */ #if 1 # define MAL_USE_PYMALLOC #else # define MAL_USE_C_MALLOC #endif #include "mx.h" #include "mxBeeBase.h" /* Version number: Major.Minor.Patchlevel */ #define MXBEEBASE_VERSION "3.2.7" /* Define these to have the module use free lists (saves malloc calls) */ /*#define MXBEEINDEX_FREELIST*/ #define MXBEECURSOR_FREELIST /* --- module doc-string -------------------------------------------------- */ static char *Module_docstring = MXBEEBASE_MODULE" -- BeeBase objects and functions. Version "MXBEEBASE_VERSION"\n\n" "Copyright (c) 1998-2000, Marc-Andre Lemburg; mailto:mal@lemburg.com\n" "Copyright (c) 2000-2013, eGenix.com Software GmbH; mailto:info@egenix.com\n\n" " All Rights Reserved\n\n" "See the documentation for further information on copyrights,\n" "or contact the author." ; /* --- module globals ----------------------------------------------------- */ static PyObject *mxBeeIndex_Error; /* Exception object */ static PyObject *mxBeeCursor_Error; /* Exception object */ /* Special keys */ static PyObject *mxBeeIndex_FirstKey; /* First key */ static PyObject *mxBeeIndex_LastKey; /* Last key */ /* Free lists for BeeIndex objects */ #ifdef MXBEEINDEX_FREELIST static mxBeeIndexObject *mxBeeIndex_FreeList = NULL; #endif /* Free lists for BeeCursor objects */ #ifdef MXBEECURSOR_FREELIST static mxBeeCursorObject *mxBeeCursor_FreeList = NULL; #endif /* Flag telling us whether the module was initialized or not. */ static int mxBeeBase_Initialized = 0; /* --- forward declarations ----------------------------------------------- */ staticforward PyTypeObject mxBeeIndex_Type; staticforward PyMethodDef mxBeeIndex_Methods[]; staticforward PyTypeObject mxBeeCursor_Type; staticforward PyMethodDef mxBeeCursor_Methods[]; staticforward mxBeeCursorObject *mxBeeCursor_New(mxBeeIndexObject *beeindex, /* Index object */ bCursor *c /* bCursor */ ); /* --- internal macros ---------------------------------------------------- */ #define _mxBeeIndex_Check(v) \ (((mxBeeIndexObject *)(v))->ob_type == &mxBeeIndex_Type) #define _mxBeeCursor_Check(v) \ (((mxBeeCursorObject *)(v))->ob_type == &mxBeeCursor_Type) /* --- module helpers ----------------------------------------------------- */ /* Create an exception object, insert it into the module dictionary under the given name and return the object pointer; this is NULL in case an error occurred. */ static PyObject *insexc(PyObject *moddict, char *name) { PyObject *v; char fullname[256]; char *modname; char *dot; v = PyDict_GetItemString(moddict, "__name__"); if (v == NULL) modname = NULL; else modname = PyString_AsString(v); if (modname == NULL) { PyErr_Clear(); modname = MXBEEBASE_MODULE; } /* The symbols from this extension are imported into mx.. We trim the name to not confuse the user with an overly long package path. */ strcpy(fullname, modname); dot = strchr(fullname, '.'); if (dot) dot = strchr(dot+1, '.'); if (dot) strcpy(dot+1, name); else sprintf(fullname, "%s.%s", modname, name); v = PyErr_NewException(fullname, NULL, NULL); if (v == NULL) return NULL; if (PyDict_SetItemString(moddict,name,v)) return NULL; return v; } #if 0 /* Helper for adding integer constants to a dictionary. Check for errors with PyErr_Occurred() */ static void insint(PyObject *dict, char *name, int value) { PyObject *v = PyInt_FromLong((long)value); PyDict_SetItemString(dict, name, v); Py_XDECREF(v); } #endif /* Helper for adding objects to dictionaries. Check for errors with PyErr_Occurred() */ static void insobj(PyObject *dict, char *name, PyObject *v) { PyDict_SetItemString(dict, name, v); Py_XDECREF(v); } /* Helper for adding objects to dictionaries. Check for errors with PyErr_Occurred() */ static PyObject *insstr(PyObject *dict, char *name, char *value) { PyObject *v; v = PyString_FromString(value); if (!v) return NULL; if (PyDict_SetItemString(dict, name, v)) return NULL; return v; } /* --- Internal functions --- */ void mxBeeBase_ReportError(bError rc) { switch (rc) { case bErrKeyNotFound: Py_Error(PyExc_KeyError, "key not found"); case bErrDupKeys: Py_Error(PyExc_KeyError, "duplicate key"); case bErrSectorSize: Py_Error(PyExc_ValueError, "illegal sector size (too small or not 0 mod 4)"); case bErrFileNotOpen: Py_ErrorWithArg(PyExc_IOError, "could not open file: '%s'",strerror(errno)); case bErrFileExists: Py_Error(PyExc_IOError, "file exists"); case bErrNotWithDupKeys: Py_Error(mxBeeIndex_Error, "not allowed with duplicate keys"); case bErrBufferInvalid: Py_Error(mxBeeCursor_Error, "buffer invalid - no data available"); case bErrIO: Py_ErrorWith2Args(PyExc_IOError, "in BeeIndex: '%s' (btr.c line %i)",strerror(errno), bErrLineNo); case bErrMemory: Py_ErrorWithArg(PyExc_MemoryError, "in BeeIndex (line %i)",bErrLineNo); default: Py_Error(PyExc_SystemError, "unknown error"); } onError: return; } /* --- BeeBase Index Object -------------------------------------------*/ /* --- Allocation --- */ static mxBeeIndexObject *mxBeeIndex_New(char *filename, /* name of beeindex file */ int filemode, /* how to open the file */ int keySize, /* length of key in bytes */ int sectorSize, /* size of sector on disk */ bCompFunc comp, /* key compare function */ mxObjectFromKeyFunc ofk, /* key conversion */ mxKeyFromObjectFunc kfo, /* functions */ int allow_dupkeys /* allow duplicate keys ? */ ) { mxBeeIndexObject *beeindex = 0; bDescription *info; bError rc; char *iName = strdup(filename); if (iName == NULL) Py_Error(PyExc_MemoryError, "Out of memory"); /* Allocate the object */ #ifdef MXBEEINDEX_FREELIST if (mxBeeIndex_FreeList) { beeindex = mxBeeIndex_FreeList; mxBeeIndex_FreeList = *(mxBeeIndexObject **)mxBeeIndex_FreeList; beeindex->ob_type = &mxBeeIndex_Type; _Py_NewReference(beeindex); } else #endif { beeindex = PyObject_NEW(mxBeeIndexObject,&mxBeeIndex_Type); if (beeindex == NULL) goto onError; } /* Init description */ info = &beeindex->info; info->iName = iName; info->keySize = keySize; info->dupKeys = (allow_dupkeys != 0); info->sectorSize = sectorSize; info->comp = comp; info->filemode = filemode; /* Conversion routines */ beeindex->ObjectFromKey = ofk; beeindex->KeyFromObject = kfo; /* Reset update count (also see mxBeeIndex_Clear()) */ beeindex->updates = 0; /* Invalidate length cache */ beeindex->length = -1; beeindex->length_state = -1; /* Open the beeindex */ rc = bOpen(beeindex->info, &(beeindex->handle)); if (rc != bErrOk) { beeindex->handle = 0; mxBeeBase_ReportError(rc); goto onError; } DPRINTF("mxBeeIndex_New: instance at %0lx\n",(long)beeindex); return beeindex; onError: Py_XDECREF(beeindex); return NULL; } /* --- Deallocation --- */ static void mxBeeIndex_Free(mxBeeIndexObject *beeindex) { DPRINTF("mxBeeIndex_Free: instance at %0lx\n",(long)beeindex); if (beeindex->handle) /* Close beeindex file, flushing any unsaved data */ bClose(beeindex->handle); /* Free filename */ free(beeindex->info.iName); beeindex->info.iName = NULL; #ifdef MXBEEINDEX_FREELIST /* Append to free list */ *(mxBeeIndexObject **)beeindex = mxBeeIndex_FreeList; mxBeeIndex_FreeList = beeindex; #else PyObject_Del(beeindex); #endif } /* --- Key management routines --- */ /* Use Python strings as keys (these may not contain embedded NULs) */ static void *mxBeeIndex_KeyFromString(mxBeeIndexObject *beeindex, PyObject *key) { Py_Assert(PyString_Check(key), PyExc_TypeError, "keys must be strings"); Py_AssertWithArg((int)PyString_GET_SIZE(key) < beeindex->info.keySize, PyExc_TypeError, "keys must not exceed length %li", (unsigned long)beeindex->info.keySize - 1); Py_Assert((unsigned int) PyString_GET_SIZE(key) == strlen(PyString_AS_STRING(key)), PyExc_TypeError, "keys may not have embedded null bytes"); return (void*)PyString_AS_STRING(key); onError: return NULL; } static PyObject *mxBeeIndex_StringFromKey(mxBeeIndexObject *beeindex, void *key) { return PyString_FromString((char*)key); } static int mxBeeIndex_CompareStrings(size_t keysize, const void *key1, const void *key2) { return strcmp((char*)key1, (char*)key2); } /* Use fixed length Python strings as keys (these may contain embedded NULs) */ static void *mxBeeIndex_KeyFromFixedLengthString(mxBeeIndexObject *beeindex, PyObject *key) { Py_Assert(PyString_Check(key), PyExc_TypeError, "keys must be strings"); Py_AssertWithArg((int)PyString_GET_SIZE(key) == beeindex->info.keySize - 1, PyExc_TypeError, "keys must have fixed length %li", (unsigned long)beeindex->info.keySize - 1); return (void*)PyString_AS_STRING(key); onError: return NULL; } static PyObject *mxBeeIndex_FixedLengthStringFromKey(mxBeeIndexObject *beeindex, void *key) { return PyString_FromStringAndSize((char*)key, (Py_ssize_t)(beeindex->info.keySize - 1)); } static int mxBeeIndex_CompareFixedLengthStrings(size_t keysize, const void *key1, const void *key2) { return memcmp((char*)key1, (char*)key2, keysize); } /* Use Python integer as keys */ static void *mxBeeIndex_KeyFromInteger(mxBeeIndexObject *beeindex, PyObject *key) { Py_Assert(PyInt_Check(key), PyExc_TypeError, "keys must be integers"); return (void*)&PyInt_AS_LONG(key); onError: return NULL; } static PyObject *mxBeeIndex_IntegerFromKey(mxBeeIndexObject *beeindex, void *key) { return PyInt_FromLong(*(long*)key); } static int mxBeeIndex_CompareLongs(size_t keysize, const void *key1, const void *key2) { unsigned long a = *(unsigned long *)key1; unsigned long b = *(unsigned long *)key2; return (a == b) ? CC_EQ : (a > b) ? CC_GT : CC_LT; } /* Use Python floats as keys */ static void *mxBeeIndex_KeyFromFloat(mxBeeIndexObject *beeindex, PyObject *key) { Py_Assert(PyFloat_Check(key), PyExc_TypeError, "keys must be floats"); return (void*)&PyFloat_AS_DOUBLE(key); onError: return NULL; } static PyObject *mxBeeIndex_FloatFromKey(mxBeeIndexObject *beeindex, void *key) { return PyFloat_FromDouble(*(double*)key); } static int mxBeeIndex_CompareDoubles(size_t keysize, const void *key1, const void *key2) { double a = *(double *)key1; double b = *(double *)key2; return (a == b) ? CC_EQ : (a > b) ? CC_GT : CC_LT; } /* Python object to record address conversion. Returns 0 and raises an exception in case of an error. */ static bRecAddr mxBeeIndex_RecordAddressFromObject(PyObject *address) { unsigned long value; if (!address) goto onError; /* Short cut */ if (PyInt_Check(address)) return (bRecAddr)PyInt_AS_LONG(address); /* file.tell() will return longs on platforms which have long file support */ if (PyLong_Check(address)) value = PyLong_AsUnsignedLong(address); else value = (unsigned long) PyInt_AsLong(address); if (value == (unsigned long) -1 && PyErr_Occurred()) goto onError; return (bRecAddr)value; onError: PyErr_SetString(PyExc_TypeError, "record address must be an integer or long"); return 0; } /* Record address to Python object conversion. If the value fits into an Python integer object, then an integer is returned. Otherwise, a Python long object is used. Returns NULL and raises an exception in case of an error. */ static PyObject *mxBeeIndex_ObjectFromRecordAddress(bRecAddr recaddr) { if ((unsigned long)recaddr > INT_MAX) return PyLong_FromUnsignedLong((unsigned long)recaddr); else return PyInt_FromLong((long)recaddr); } /* --- API functions --- */ static long mxBeeIndex_FindKey(mxBeeIndexObject *self, PyObject *obj) { bError rc; bCursor c; bRecAddr record = 0; void *key = self->KeyFromObject(self,obj); if (!key) goto onError; rc = bFindKey(self->handle,&c,key,&record); if (rc != bErrOk) { mxBeeBase_ReportError(rc); goto onError; } return (long)record; onError: return -1; } static int mxBeeIndex_DeleteKey(mxBeeIndexObject *self, PyObject *obj) { bError rc; bRecAddr record = 0; void *key = self->KeyFromObject(self,obj); if (!key) goto onError; rc = bDeleteKey(self->handle,key,&record); if (rc != bErrOk) { mxBeeBase_ReportError(rc); goto onError; } /* Increment update count */ self->updates++; return 0; onError: return -1; } static int mxBeeIndex_SetKey(mxBeeIndexObject *self, PyObject *obj, PyObject *recaddr) { bError rc; bRecAddr record; void *key = self->KeyFromObject(self,obj); if (!key) goto onError; record = mxBeeIndex_RecordAddressFromObject(recaddr); if (record == 0 && PyErr_Occurred()) goto onError; /* Either insert or update the key; if dupkeys are allowed, only inserts are possible */ if (!self->info.dupKeys) { rc = bUpdateKey(self->handle,key,record); if (rc == bErrKeyNotFound) rc = bInsertKey(self->handle,key,record); } else rc = bInsertKey(self->handle,key,record); if (rc != bErrOk) { mxBeeBase_ReportError(rc); goto onError; } /* Increment update count */ self->updates++; return 0; onError: return -1; } /* Clear the beeindex by reopening the file as new file. */ static int mxBeeIndex_Clear(mxBeeIndexObject *self) { bError rc; int filemode = self->info.filemode; Py_Assert(filemode != 1, PyExc_IOError, "beeindex is read-only"); /* Close the file */ if (self->handle) bClose(self->handle); /* Reopen the file as new file */ self->info.filemode = 2; /* Open the beeindex */ rc = bOpen(self->info,&(self->handle)); if (rc != bErrOk) { mxBeeBase_ReportError(rc); goto onError; } /* Increment the update count */ self->updates++; /* Invalidate length cache */ self->length = -1; self->length_state = -1; /* Restore filemode */ self->info.filemode = filemode; DPRINTF("mxBeeIndex_Clear: instance at %0lx\n",(long)self); return 0; onError: return -1; } /* --- Methods --- */ #define beeindex ((mxBeeIndexObject*)self) Py_C_Function( mxBeeIndex_flush, "flush()\n\n" "Flush all buffers" ) { bError rc; Py_NoArgsCheck(); Py_Assert(beeindex->handle != NULL, mxBeeIndex_Error, "index is closed"); rc = bFlush(beeindex->handle); if (rc != bErrOk) { mxBeeBase_ReportError(rc); goto onError; } Py_ReturnNone(); onError: return NULL; } Py_C_Function( mxBeeIndex_close, "close()\n\n" "Close the index and flush all buffers" ) { bError rc; Py_NoArgsCheck(); if (beeindex->handle) { rc = bClose(beeindex->handle); if (rc != bErrOk) { mxBeeBase_ReportError(rc); goto onError; } beeindex->handle = NULL; } Py_ReturnNone(); onError: return NULL; } Py_C_Function( mxBeeIndex_clear, "clear()\n\n" "Clear the index" ) { Py_NoArgsCheck(); if (mxBeeIndex_Clear(beeindex)) goto onError; Py_ReturnNone(); onError: return NULL; } Py_C_Function( mxBeeIndex_get, "get(key,default=None)\n\n" "Find the value for key. If key is not found, default is\n" "returned. With dupkeys enabled, the first matching key is\n" "used." ) { PyObject *obj,*def = Py_None; bCursor c; bError rc; void *key; bRecAddr record = 0; Py_Get2Args("O|O",obj,def); Py_Assert(beeindex->handle != NULL, mxBeeIndex_Error, "index is closed"); /* Find key */ key = beeindex->KeyFromObject(beeindex,obj); if (!key) goto onError; rc = bFindKey(beeindex->handle,&c,key,&record); if (rc == bErrKeyNotFound) { Py_INCREF(def); return def; } if (rc != bErrOk) { mxBeeBase_ReportError(rc); goto onError; } return mxBeeIndex_ObjectFromRecordAddress(record); onError: return NULL; } Py_C_Function( mxBeeIndex_has_key, "has_key(key)\n\n" "Returns 1/0 depending on whether the key is found or not." ) { PyObject *obj; bCursor c; bError rc; void *key; bRecAddr record = 0; Py_GetArg("O",obj); Py_Assert(beeindex->handle != NULL, mxBeeIndex_Error, "index is closed"); /* Find key */ key = beeindex->KeyFromObject(beeindex,obj); if (!key) goto onError; rc = bFindKey(beeindex->handle,&c,key,&record); if (rc == bErrKeyNotFound) { Py_INCREF(Py_False); return Py_False; } if (rc != bErrOk) { mxBeeBase_ReportError(rc); goto onError; } Py_INCREF(Py_True); return Py_True; onError: return NULL; } Py_C_Function( mxBeeIndex_cursor, "cursor(key[,default])\n\n" "Return a cursor pointing to key in the index. If dupkeys\n" "are enabled, the cursors will always point to the first\n" "of possibly multiple key entries found. In case no key\n" "is found, default is returned if given or a KeyError\n" "raised. Note that cursors only remain valid as long as\n" "the index does not change." ) { PyObject *obj,*v,*def = NULL; bCursor c; bError rc; Py_Get2Args("O|O",obj,def); Py_Assert(beeindex->handle != NULL, mxBeeIndex_Error, "index is closed"); /* Find key */ if (obj == mxBeeIndex_FirstKey) rc = bFindFirstKey(beeindex->handle,&c,NULL,NULL); else if (obj == mxBeeIndex_LastKey) rc = bFindLastKey(beeindex->handle,&c,NULL,NULL); else { void *key; key = beeindex->KeyFromObject(beeindex,obj); if (!key) goto onError; rc = bFindKey(beeindex->handle,&c,key,NULL); } if (rc == bErrKeyNotFound && def) { Py_INCREF(def); return def; } if (rc != bErrOk) { mxBeeBase_ReportError(rc); goto onError; } /* Create cursor */ v = (PyObject*)mxBeeCursor_New(beeindex,&c); if (!v) goto onError; return v; onError: return NULL; } Py_C_Function( mxBeeIndex_keys, "keys()\n\n" "Return a list of keys stored in the index. The list is\n" "sorted ascending." ) { bError rc; bCursor c; PyObject *v = 0; PyObject *w; Py_NoArgsCheck(); Py_Assert(beeindex->handle != NULL, mxBeeIndex_Error, "index is closed"); v = PyList_New(0); if (!v) goto onError; /* Find first */ rc = bFindFirstKey(beeindex->handle,&c,NULL,NULL); if (rc == bErrKeyNotFound) return v; if (rc != bErrOk) { mxBeeBase_ReportError(rc); goto onError; } while (1) { w = beeindex->ObjectFromKey(beeindex,c.key); if (!w) goto onError; PyList_Append(v,w); Py_DECREF(w); rc = bFindNextKey(beeindex->handle,&c,NULL,NULL); if (rc == bErrKeyNotFound) break; if (rc != bErrOk) { mxBeeBase_ReportError(rc); goto onError; } } return v; onError: Py_XDECREF(v); return NULL; } Py_C_Function( mxBeeIndex_values, "values()\n\n" "Return a list of values stored in the index. The list is\n" "sorted in ascending key order." ) { bError rc; bCursor c; PyObject *v = 0; PyObject *w; bRecAddr rec; Py_NoArgsCheck(); Py_Assert(beeindex->handle != NULL, mxBeeIndex_Error, "index is closed"); v = PyList_New(0); if (!v) goto onError; /* Find first */ rc = bFindFirstKey(beeindex->handle,&c,NULL,&rec); if (rc == bErrKeyNotFound) return v; if (rc != bErrOk) { mxBeeBase_ReportError(rc); goto onError; } while (1) { w = mxBeeIndex_ObjectFromRecordAddress(rec); if (!w) goto onError; PyList_Append(v,w); Py_DECREF(w); rc = bFindNextKey(beeindex->handle,&c,NULL,&rec); if (rc == bErrKeyNotFound) break; if (rc != bErrOk) { mxBeeBase_ReportError(rc); goto onError; } } return v; onError: Py_XDECREF(v); return NULL; } Py_C_Function( mxBeeIndex_items, "items()\n\n" "Return a list of (key,value) tuples of all items stored\n" "in the index. The list is sorted ascending by key." ) { bError rc; bCursor c; PyObject *v = 0; bRecAddr rec; Py_NoArgsCheck(); Py_Assert(beeindex->handle != NULL, mxBeeIndex_Error, "index is closed"); v = PyList_New(0); if (!v) goto onError; /* Find first */ rc = bFindFirstKey(beeindex->handle,&c,NULL,&rec); if (rc == bErrKeyNotFound) return v; if (rc != bErrOk) { mxBeeBase_ReportError(rc); goto onError; } while (1) { PyObject *key,*value,*t; key = beeindex->ObjectFromKey(beeindex,c.key); if (!key) goto onError; value = mxBeeIndex_ObjectFromRecordAddress(rec); if (!value) { Py_DECREF(key); goto onError; } t = PyTuple_New(2); if (!t) { Py_DECREF(key); Py_DECREF(value); goto onError; } PyTuple_SET_ITEM(t,0,key); PyTuple_SET_ITEM(t,1,value); PyList_Append(v,t); Py_DECREF(t); rc = bFindNextKey(beeindex->handle,&c,NULL,&rec); if (rc == bErrKeyNotFound) break; if (rc != bErrOk) { mxBeeBase_ReportError(rc); goto onError; } } return v; onError: Py_XDECREF(v); return NULL; } Py_C_Function( mxBeeIndex_delete, "delete(key[,record])\n\n" "Delete an entry. The record address is only needed in case\n" "the index allows dupkeys." ) { PyObject *obj; PyObject *recaddr = NULL; bError rc = bErrOk; bRecAddr record; void *key = NULL; Py_Get2Args("O|O",obj,recaddr); Py_Assert(beeindex->handle != NULL, mxBeeIndex_Error, "index is closed"); if (beeindex->info.dupKeys) Py_Assert(recaddr != NULL, PyExc_ValueError, "record address must be given if dupkeys are allowed"); key = beeindex->KeyFromObject(beeindex,obj); if (!key) goto onError; record = mxBeeIndex_RecordAddressFromObject(recaddr); if (record == 0 && PyErr_Occurred()) goto onError; /* Delete key using record address if dupkeys is enabled */ rc = bDeleteKey(beeindex->handle,key,&record); if (rc != bErrOk) { mxBeeBase_ReportError(rc); goto onError; } /* Increment update count */ beeindex->updates++; Py_ReturnNone(); onError: return NULL; } Py_C_Function( mxBeeIndex_update, "update(key,value[,oldvalue])\n\n" "Update an entry. The oldvalue is needed in case\n" "the index allows dupkeys." ) { PyObject *obj; bError rc = bErrOk; PyObject *value; PyObject *oldvalue = NULL; bRecAddr record, oldrecord; void *key = NULL; Py_Get3Args("OO|O",obj,value,oldvalue); Py_Assert(beeindex->handle != NULL, mxBeeIndex_Error, "index is closed"); if (beeindex->info.dupKeys) Py_Assert(oldvalue != NULL, PyExc_ValueError, "oldvalue must be given if dupkeys are allowed"); record = mxBeeIndex_RecordAddressFromObject(value); if (record == 0 && PyErr_Occurred()) goto onError; if (oldvalue) { oldrecord = mxBeeIndex_RecordAddressFromObject(oldvalue); if (record == 0 && PyErr_Occurred()) goto onError; } else oldrecord = 0; key = beeindex->KeyFromObject(beeindex,obj); if (!key) goto onError; /* Delete key using oldrecord address if dupkeys is enabled */ rc = bDeleteKey(beeindex->handle,key,&oldrecord); if (rc != bErrOk) { mxBeeBase_ReportError(rc); goto onError; } /* Insert the new key,value pair */ rc = bInsertKey(beeindex->handle,key,record); if (rc != bErrOk) { mxBeeBase_ReportError(rc); goto onError; } /* Increment update count */ beeindex->updates++; Py_ReturnNone(); onError: return NULL; } Py_C_Function( mxBeeIndex_validate, "validate()\n\n" "Validates the BTree and return 1 for success and 0 for\n" "failure. This is an internal debugging feature only." ) { Py_NoArgsCheck(); Py_Assert(beeindex->handle != NULL, mxBeeIndex_Error, "index is closed"); return PyInt_FromLong(bValidateTree(beeindex->handle) == 0); onError: return NULL; } #undef beeindex /* --- slots --- */ static PyObject *mxBeeIndex_Getattr(PyObject *obj, char *name) { mxBeeIndexObject *self = (mxBeeIndexObject *)obj; if (Py_WantAttr(name,"closed")) return PyInt_FromLong((self->handle == NULL)); else if (Py_WantAttr(name,"dupkeys")) return PyInt_FromLong(self->info.dupKeys); else if (Py_WantAttr(name,"filename")) return PyString_FromString(self->info.iName); else if (Py_WantAttr(name,"statistics")) { bHandle *handle = self->handle; Py_Assert(self->handle != NULL, mxBeeIndex_Error, "index is closed"); return Py_BuildValue("iiiiiiiii", self->updates, handle->maxHeight,handle->nNodesIns, handle->nNodesDel,handle->nKeysIns, handle->nKeysDel,handle->nKeysUpd, handle->nDiskReads,handle->nDiskWrites); } else if (Py_WantAttr(name,"__members__")) return Py_BuildValue("[ssss]", "closed","statistics","dupkeys", "filename"); return Py_FindMethod(mxBeeIndex_Methods, (PyObject *)self,name); onError: return NULL; } static Py_ssize_t mxBeeIndex_Length(PyObject *obj) { /* XXX Much too slow... */ mxBeeIndexObject *self = (mxBeeIndexObject *)obj; bError rc; bCursor c; int i; Py_Assert(self->handle != NULL, mxBeeIndex_Error, "index is closed"); if (self->length_state == self->updates) return self->length; /* Find first */ rc = bFindFirstKey(self->handle,&c,NULL,NULL); if (rc == bErrKeyNotFound) return 0; if (rc != bErrOk) { mxBeeBase_ReportError(rc); goto onError; } i = 1; /* Scan all others */ while (1) { rc = bFindNextKey(self->handle,&c,NULL,NULL); if (rc == bErrKeyNotFound) break; if (rc != bErrOk) { mxBeeBase_ReportError(rc); goto onError; } i++; } self->length = i; self->length_state = self->updates; return i; onError: return -1; } static PyObject *mxBeeIndex_Subscript(PyObject *obj, PyObject *key) { mxBeeIndexObject *self = (mxBeeIndexObject *)obj; bRecAddr record; Py_Assert(self->handle != NULL, mxBeeIndex_Error, "index is closed"); record = mxBeeIndex_FindKey(self, key); if (record == -1 && PyErr_Occurred()) goto onError; return mxBeeIndex_ObjectFromRecordAddress(record); onError: return NULL; } static int mxBeeIndex_AssignSubscript(PyObject *obj, PyObject *key, PyObject *recaddr) { mxBeeIndexObject *self = (mxBeeIndexObject *)obj; Py_Assert(self->handle != NULL, mxBeeIndex_Error, "index is closed"); if (recaddr) return mxBeeIndex_SetKey(self, key, recaddr); else return mxBeeIndex_DeleteKey(self, key); onError: return -1; } /* Python Type Tables */ static PyMappingMethods mxBeeIndex_TypeAsMapping = { mxBeeIndex_Length, /*mp_length*/ mxBeeIndex_Subscript, /*mp_subscript*/ mxBeeIndex_AssignSubscript, /*mp_ass_subscript*/ }; statichere PyTypeObject mxBeeIndex_Type = { PyObject_HEAD_INIT(0) /* init at startup ! */ 0, /*ob_size*/ "BeeIndex", /*tp_name*/ sizeof(mxBeeIndexObject), /*tp_basicsize*/ 0, /*tp_itemsize*/ /* slots */ (destructor)mxBeeIndex_Free, /*tp_dealloc*/ 0, /*tp_print*/ mxBeeIndex_Getattr, /*tp_getattr*/ 0, /*tp_setattr*/ 0, /*tp_compare*/ 0, /*tp_repr*/ 0, /*tp_as_number*/ 0, /*tp_as_sequence*/ &mxBeeIndex_TypeAsMapping, /*tp_as_mapping*/ 0, /*tp_hash*/ 0, /*tp_call*/ 0, /*tp_str*/ 0, /*tp_getattro*/ 0, /*tp_setattro*/ 0, /*tp_as_buffer*/ Py_TPFLAGS_DEFAULT, /*tp_flags*/ 0, /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ 0, /* tp_richcompare */ 0, /* tp_weaklistoffset */ 0, /* tp_iter */ 0, /* tp_iternext */ mxBeeIndex_Methods, /* tp_methods */ 0, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ 0, /* tp_init */ 0, /* tp_alloc */ 0, /* tp_new */ 0, /* tp_free */ }; /* Python Method Table */ statichere PyMethodDef mxBeeIndex_Methods[] = { Py_MethodListEntry("get",mxBeeIndex_get), Py_MethodListEntry("cursor",mxBeeIndex_cursor), Py_MethodListEntry("has_key",mxBeeIndex_has_key), Py_MethodListEntryNoArgs("flush",mxBeeIndex_flush), Py_MethodListEntryNoArgs("close",mxBeeIndex_close), Py_MethodListEntryNoArgs("keys",mxBeeIndex_keys), Py_MethodListEntryNoArgs("values",mxBeeIndex_values), Py_MethodListEntryNoArgs("items",mxBeeIndex_items), Py_MethodListEntry("delete",mxBeeIndex_delete), Py_MethodListEntry("update",mxBeeIndex_update), Py_MethodListEntryNoArgs("clear",mxBeeIndex_clear), Py_MethodListEntryNoArgs("validate",mxBeeIndex_validate), {NULL,NULL} /* end of list */ }; /* --- BeeBase Cursor Object ------------------------------------------- */ statichere mxBeeCursorObject *mxBeeCursor_New(mxBeeIndexObject *beeindex, /* Index object */ bCursor *c /* bCursor */ ) { mxBeeCursorObject *cursor = 0; Py_Assert(beeindex->handle, mxBeeCursor_Error, "creating cursor for closed index"); /* Allocate the object */ #ifdef MXBEEINDEX_FREELIST if (mxBeeCursor_FreeList) { cursor = mxBeeCursor_FreeList; mxBeeCursor_FreeList = *(mxBeeCursorObject **)mxBeeCursor_FreeList; cursor->ob_type = &mxBeeCursor_Type; _Py_NewReference(cursor); } else #endif { cursor = PyObject_NEW(mxBeeCursorObject,&mxBeeCursor_Type); if (cursor == NULL) goto onError; } /* Init vars */ Py_INCREF(beeindex); cursor->beeindex = beeindex; memcpy(&cursor->c,c,sizeof(bCursor)); cursor->adr = c->buffer->adr; cursor->updates = beeindex->updates; DPRINTF("mxBeeCursor_New: instance at %0lx\n",(long)cursor); return cursor; onError: Py_XDECREF(cursor); return NULL; } /* --- Deallocation --- */ static void mxBeeCursor_Free(mxBeeCursorObject *cursor) { DPRINTF("mxBeeCursor_Free: instance at %0lx\n",(long)cursor); /* Dereference beeindex object */ Py_DECREF(cursor->beeindex); #ifdef MXBEEINDEX_FREELIST /* Append to free list */ *(mxBeeCursorObject **)cursor = mxBeeCursor_FreeList; mxBeeCursor_FreeList = cursor; #else PyObject_Del(cursor); #endif } /* --- API functions --- */ static int mxBeeCursor_Invalid(mxBeeCursorObject *self) { Py_Assert(self->beeindex->handle != NULL, mxBeeCursor_Error, "index is closed - cursor is invalid"); Py_Assert(self->beeindex->updates == self->updates, mxBeeCursor_Error, "index was changed - cursor is invalid"); Py_Assert(self->c.buffer && self->c.buffer->valid, mxBeeCursor_Error, "buffer was invalidated - cursor is invalid"); Py_Assert(self->c.buffer->adr == self->adr, mxBeeCursor_Error, "buffer was overwritten - cursor is invalid"); return 0; onError: return -1; } /* Move the cursor to the next beeindex key. If there are no further keys, return 0 and leave the cursor where it is. Otherwise return 1. Returns -1 on error. */ static int mxBeeCursor_NextKey(mxBeeCursorObject *self) { bError rc; if (mxBeeCursor_Invalid(self)) goto onError; /* Find key (updates cursor only on success) */ rc = bFindNextKey(self->beeindex->handle,&self->c,NULL,NULL); if (rc == bErrKeyNotFound) return 0; if (rc != bErrOk) { mxBeeBase_ReportError(rc); goto onError; } /* Update cursor address */ self->adr = self->c.buffer->adr; return 1; onError: return -1; } /* Move the cursor to the prev beeindex key. If there are no further keys, return 0 and leave the cursor where it is. Otherwise return 1. Returns -1 on error. */ static int mxBeeCursor_PrevKey(mxBeeCursorObject *self) { bError rc; if (mxBeeCursor_Invalid(self)) goto onError; /* Find key (updates cursor only on success) */ rc = bFindPrevKey(self->beeindex->handle,&self->c,NULL,NULL); if (rc == bErrKeyNotFound) return 0; if (rc != bErrOk) { mxBeeBase_ReportError(rc); goto onError; } /* Update cursor address */ self->adr = self->c.buffer->adr; return 1; onError: return -1; } static PyObject *mxBeeCursor_GetKey(mxBeeCursorObject *self) { PyObject *v; if (mxBeeCursor_Invalid(self)) goto onError; /* Convert key to object */ v = self->beeindex->ObjectFromKey(self->beeindex,self->c.key); if (!v) goto onError; return v; onError: return NULL; } static PyObject *mxBeeCursor_GetValue(mxBeeCursorObject *self) { bError rc; PyObject *v; bRecAddr rec; if (mxBeeCursor_Invalid(self)) goto onError; /* Check that cursor is valid and read record address */ rc = bCursorReadData(self->beeindex->handle,&self->c,NULL,&rec); if (rc != bErrOk) { mxBeeBase_ReportError(rc); goto onError; } v = mxBeeIndex_ObjectFromRecordAddress(rec); if (!v) goto onError; return v; onError: return NULL; } /* --- Methods --- */ #define cursor ((mxBeeCursorObject*)self) Py_C_Function( mxBeeCursor_next, "next()\n\n" "Move to the next index entry. Returns 1 if there is another\n" "entry, 0 otherwise. The cursor is not moved in case no\n" "further entries exist." ) { int found; PyObject *v; Py_NoArgsCheck(); found = mxBeeCursor_NextKey(cursor); if (found < 0) goto onError; if (found) v = Py_True; else v = Py_False; Py_INCREF(v); return v; onError: return NULL; } Py_C_Function( mxBeeCursor_prev, "prev()\n\n" "Move to the previous index entry. Returns 1 if there is\n" "another entry, 0 otherwise. The cursor is not moved in\n" "case no further entries exist." ) { int found; PyObject *v; Py_NoArgsCheck(); found = mxBeeCursor_PrevKey(cursor); if (found < 0) goto onError; if (found) v = Py_True; else v = Py_False; Py_INCREF(v); return v; onError: return NULL; } Py_C_Function( mxBeeCursor_copy, "copy()\n\n" "Return a true copy of the cursor object. The copy can be\n" "used independently from the original." ) { Py_NoArgsCheck(); if (mxBeeCursor_Invalid(cursor)) goto onError; return (PyObject *)mxBeeCursor_New(cursor->beeindex,&cursor->c); onError: return NULL; } #undef cursor /* --- slots --- */ static PyObject *mxBeeCursor_Getattr(PyObject *obj, char *name) { mxBeeCursorObject *self = (mxBeeCursorObject *)obj; if (Py_WantAttr(name,"closed")) return PyInt_FromLong((self->beeindex->handle == NULL)); if (Py_WantAttr(name,"key")) return mxBeeCursor_GetKey(self); if (Py_WantAttr(name,"value")) return mxBeeCursor_GetValue(self); if (Py_WantAttr(name,"valid")) { if (mxBeeCursor_Invalid(self)) { PyErr_Clear(); Py_INCREF(Py_False); return Py_False; } Py_INCREF(Py_True); return Py_True; } else if (Py_WantAttr(name,"__members__")) return Py_BuildValue("[ssss]", "closed","key","value", "valid"); return Py_FindMethod(mxBeeCursor_Methods, (PyObject *)self,name); } /* Python Type Tables */ statichere PyTypeObject mxBeeCursor_Type = { PyObject_HEAD_INIT(0) /* init at startup ! */ 0, /*ob_size*/ "BeeCursor", /*tp_name*/ sizeof(mxBeeCursorObject), /*tp_basicsize*/ 0, /*tp_itemsize*/ /* slots */ (destructor)mxBeeCursor_Free, /*tp_dealloc*/ 0, /*tp_print*/ mxBeeCursor_Getattr, /*tp_getattr*/ 0, /*tp_setattr*/ 0, /*tp_compare*/ 0, /*tp_repr*/ 0, /*tp_as_number*/ 0, /*tp_as_sequence*/ 0, /*tp_as_mapping*/ 0, /*tp_hash*/ 0, /*tp_call*/ 0, /*tp_str*/ 0, /*tp_getattro*/ 0, /*tp_setattro*/ 0, /*tp_as_buffer*/ Py_TPFLAGS_DEFAULT, /*tp_flags*/ 0, /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ 0, /* tp_richcompare */ 0, /* tp_weaklistoffset */ 0, /* tp_iter */ 0, /* tp_iternext */ mxBeeCursor_Methods, /* tp_methods */ 0, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ 0, /* tp_init */ 0, /* tp_alloc */ 0, /* tp_new */ 0, /* tp_free */ }; /* Python Method Table */ statichere PyMethodDef mxBeeCursor_Methods[] = { Py_MethodListEntryNoArgs("next",mxBeeCursor_next), Py_MethodListEntryNoArgs("prev",mxBeeCursor_prev), Py_MethodListEntryNoArgs("copy",mxBeeCursor_copy), {NULL,NULL} /* end of list */ }; /* --- Module Interface ---------------------------------------------------- */ Py_C_Function_WithKeywords( mxBeeIndex_BeeStringIndex, "BeeStringIndex(filename,keysize,dupkeys=0,filemode=0,sectorsize=256)\n\n" ) { char *filename; int keysize; int sectorsize = 256; int dupkeys = 0; int filemode = 0; Py_KeywordsGet5Args("si|iii", filename,keysize,dupkeys,filemode,sectorsize); return (PyObject *)mxBeeIndex_New(filename, filemode, keysize + 1, sectorsize, mxBeeIndex_CompareStrings, mxBeeIndex_StringFromKey, mxBeeIndex_KeyFromString, dupkeys); onError: return NULL; } Py_C_Function_WithKeywords( mxBeeIndex_BeeFixedLengthStringIndex, "BeeFixedLengthStringIndex(filename,keysize,dupkeys=0,filemode=0,sectorsize=256)\n\n" ) { char *filename; int keysize; int sectorsize = 256; int dupkeys = 0; int filemode = 0; Py_KeywordsGet5Args("si|iii", filename,keysize,dupkeys,filemode,sectorsize); return (PyObject *)mxBeeIndex_New(filename, filemode, keysize + 1, sectorsize, mxBeeIndex_CompareFixedLengthStrings, mxBeeIndex_FixedLengthStringFromKey, mxBeeIndex_KeyFromFixedLengthString, dupkeys); onError: return NULL; } Py_C_Function_WithKeywords( mxBeeIndex_BeeIntegerIndex, "BeeIntegerIndex(filename,dupkeys=0,filemode=0,sectorsize=256)\n\n" ) { char *filename; int keysize = sizeof(long); int sectorsize = 256; int dupkeys = 0; int filemode = 0; Py_KeywordsGet4Args("s|iii", filename,dupkeys,filemode,sectorsize); return (PyObject *)mxBeeIndex_New(filename, filemode, keysize, sectorsize, mxBeeIndex_CompareLongs, mxBeeIndex_IntegerFromKey, mxBeeIndex_KeyFromInteger, dupkeys); onError: return NULL; } Py_C_Function_WithKeywords( mxBeeIndex_BeeFloatIndex, "BeeFloatIndex(filename,dupkeys=0,filemode=0,sectorsize=256)\n\n" ) { char *filename; int keysize = sizeof(double); int sectorsize = 256; int dupkeys = 0; int filemode = 0; Py_KeywordsGet4Args("s|iii", filename,dupkeys,filemode,sectorsize); return (PyObject *)mxBeeIndex_New(filename, filemode, keysize, sectorsize, mxBeeIndex_CompareDoubles, mxBeeIndex_FloatFromKey, mxBeeIndex_KeyFromFloat, dupkeys); onError: return NULL; } /* Python Method Table */ static PyMethodDef Module_methods[] = { Py_MethodWithKeywordsListEntry("BeeStringIndex", mxBeeIndex_BeeStringIndex), Py_MethodWithKeywordsListEntry("BeeFixedLengthStringIndex", mxBeeIndex_BeeFixedLengthStringIndex), Py_MethodWithKeywordsListEntry("BeeIntegerIndex", mxBeeIndex_BeeIntegerIndex), Py_MethodWithKeywordsListEntry("BeeFloatIndex", mxBeeIndex_BeeFloatIndex), {NULL,NULL} /* end of list */ }; /* Cleanup function */ static void mxBeeBaseModule_Cleanup(void) { #ifdef MXBEEINDEX_FREELIST { mxBeeIndexObject *d = mxBeeIndex_FreeList; while (d != NULL) { mxBeeIndexObject *v = d; d = *(mxBeeIndexObject **)d; PyObject_Del(v); } mxBeeIndex_FreeList = NULL; } #endif #ifdef MXBEECURSOR_FREELIST { mxBeeCursorObject *d = mxBeeCursor_FreeList; while (d != NULL) { mxBeeCursorObject *v = d; d = *(mxBeeCursorObject **)d; PyObject_Del(v); } mxBeeCursor_FreeList = NULL; } #endif /* Reset mxBeeBase_Initialized flag */ mxBeeBase_Initialized = 0; } /* Create PyMethodObjects and register them in the module's dict */ MX_EXPORT(void) initmxBeeBase(void) { PyObject *module, *moddict; if (mxBeeBase_Initialized) Py_Error(PyExc_SystemError, "can't initialize "MXBEEBASE_MODULE" more than once"); /* Init type objects */ PyType_Init(mxBeeIndex_Type); PyType_Init(mxBeeCursor_Type); /* Create module */ module = Py_InitModule4(MXBEEBASE_MODULE, /* Module name */ Module_methods, /* Method list */ Module_docstring, /* Module doc-string */ (PyObject *)NULL, /* always pass this as *self */ PYTHON_API_VERSION); /* API Version */ if (module == NULL) goto onError; /* Init globals */ #ifdef MXBEEINDEX_FREELIST mxBeeIndex_FreeList = NULL; #endif #ifdef MXBEECURSOR_FREELIST mxBeeCursor_FreeList = NULL; #endif /* Register cleanup function */ if (Py_AtExit(mxBeeBaseModule_Cleanup)) /* XXX what to do if we can't register that function ??? */; /* Add some constants to the module's dict */ moddict = PyModule_GetDict(module); if (moddict == NULL) goto onError; insobj(moddict,"__version__",PyString_FromString(MXBEEBASE_VERSION)); insobj(moddict,"sizeof_bNode",PyInt_FromLong(sizeof(bNode))); insobj(moddict,"sizeof_bKey",PyInt_FromLong(sizeof(bKey))); insobj(moddict,"sizeof_bRecAddr",PyInt_FromLong(sizeof(bRecAddr))); insobj(moddict,"sizeof_bIdxAddr",PyInt_FromLong(sizeof(bIdxAddr))); /* Errors */ if (!(mxBeeIndex_Error = insexc(moddict,"BeeIndexError"))) goto onError; if (!(mxBeeCursor_Error = insexc(moddict,"BeeCursorError"))) goto onError; /* Special keys */ mxBeeIndex_FirstKey = insstr(moddict,"FirstKey","FirstKey"); if (!mxBeeIndex_FirstKey) goto onError; mxBeeIndex_LastKey = insstr(moddict,"LastKey","LastKey"); if (!mxBeeIndex_LastKey) goto onError; /* Type objects */ Py_INCREF(&mxBeeIndex_Type); PyDict_SetItemString(moddict,"BeeIndexType", (PyObject *)&mxBeeIndex_Type); Py_INCREF(&mxBeeCursor_Type); PyDict_SetItemString(moddict,"BeeCursorType", (PyObject *)&mxBeeCursor_Type); /* We are now initialized */ mxBeeBase_Initialized = 1; onError: /* Check for errors and report them */ if (PyErr_Occurred()) Py_ReportModuleInitError(MXBEEBASE_MODULE); return; } egenix-mx-base-3.2.7/mx/BeeBase/mxBeeBase/mxBeeBase.def0000664000175000017500000000002706605740525022302 0ustar lemburglemburgEXPORTS initmxBeeBase egenix-mx-base-3.2.7/mx/BeeBase/mxBeeBase/mxBeeBase.h0000664000175000017500000000543612133021412021760 0ustar lemburglemburg#ifndef MXBEEBASE_H #define MXBEEBASE_H #ifdef __cplusplus extern "C" { #endif /* mxBeeBase -- B++-Tree implementation build on top of the free source code published in: SORTING AND SEARCHING ALGORITHMS: A COOKBOOK by THOMAS NIEMANN Portland, Oregon email: thomasn@jps.net home: http://members.xoom.com/thomasn/s_man.htm From the cookbook: Permission to reproduce this document, in whole or in part, is given provided the original web site listed below is referenced, and no additional restrictions apply. Source code, when part of a software project, may be used freely without reference to the author. The Python interface and the modifications to the above mentioned source code base are: Copyright (c) 2000, Marc-Andre Lemburg; mailto:mal@lemburg.com Copyright (c) 2000-2013, eGenix.com Software GmbH; mailto:info@egenix.com */ /* The extension's name; must be the same as the init function's suffix */ #define MXBEEBASE_MODULE "mxBeeBase" /* B++-Tree Header file */ #include "btr.h" /* --- No servicable parts below this line ----------------------*/ /* Include generic mx extension header file */ #include "mxh.h" #ifdef MX_BUILDING_MXBEEBASE # define MXBEEBASE_EXTERNALIZE MX_EXPORT #else # define MXBEEBASE_EXTERNALIZE MX_IMPORT #endif /* --- BeeBase Object ------------------------------------------*/ typedef struct mxBeeIndexObject { PyObject_HEAD /* BTree data */ bDescription info; /* Information structure */ bHandle *handle; /* Handle for the BTree Index */ long updates; /* Update count used to identify invalid cursors */ int length; /* Cache for current length; don't use directly */ long length_state; /* Update count of last length calculation */ /* Data conversion routines for key management */ PyObject *(*ObjectFromKey)(struct mxBeeIndexObject *beeindex, void *key); void *(*KeyFromObject)(struct mxBeeIndexObject *beeindex, PyObject *obj); } mxBeeIndexObject; typedef PyObject *(*mxObjectFromKeyFunc)(struct mxBeeIndexObject *beeindex, void *key); typedef void *(*mxKeyFromObjectFunc)(struct mxBeeIndexObject *beeindex, PyObject *obj); /* --- BeeBase Cursor Object -----------------------------------*/ typedef struct { PyObject_HEAD mxBeeIndexObject *beeindex; /* BeeIndex object */ bCursor c; /* Cursor */ bIdxAddr adr; /* Cursor's buffer address - needed to check whether the buffer pointed to by cursor is still containing the data we expect */ long updates; /* Copy of beeindex's updates value - needed to check whether the beeindex changed after the cursor was created. If it is, then the cursor is invalid. */ } mxBeeCursorObject; /* EOF */ #ifdef __cplusplus } #endif #endif egenix-mx-base-3.2.7/mx/BeeBase/mxBeeBase/mxBeeBase.i0000664000175000017500000000033506605742415021776 0ustar lemburglemburg/* SWIG interface for the mxBeeBase wrapper. */ %module mxBeeBase %{ #include "mx.h" #include "btr.h" %} /* My typemaps and the like... */ %include mxSWIG.i /* Now get the interface file... */ %include mxBeeBase.swig egenix-mx-base-3.2.7/mx/BeeBase/mxBeeBase/mxh.h0000664000175000017500000000320212133021412020706 0ustar lemburglemburg#ifndef MXH_H #define MXH_H /* mxh.h -- Generic header file for all mx Extenstions This file should be included by every mx Extension header file and the C file. Copyright (c) 2000, Marc-Andre Lemburg; mailto:mal@lemburg.com Copyright (c) 2000-2013, eGenix.com Software GmbH; mailto:info@egenix.com See the documentation for further copyright information or contact the author. */ /* Macros to control export and import of DLL symbols. We use our own definitions since Python's don't allow specifying both imported and exported symbols at the same time; these defines haven't been thoroughly tested yet, patches are most welcome :-) */ /* Macro to "mark" a symbol for DLL export */ #if (defined(_MSC_VER) && _MSC_VER > 850 \ || defined(__MINGW32__) || defined(__CYGWIN) || defined(__BEOS__)) # ifdef __cplusplus # define MX_EXPORT(type) extern "C" type __declspec(dllexport) # else # define MX_EXPORT(type) extern type __declspec(dllexport) # endif #elif defined(__WATCOMC__) # define MX_EXPORT(type) extern type __export #elif defined(__IBMC__) # define MX_EXPORT(type) extern type _Export #else # define MX_EXPORT(type) extern type #endif /* Macro to "mark" a symbol for DLL import */ #if defined(__BORLANDC__) # define MX_IMPORT(type) extern type __import #elif (defined(_MSC_VER) && _MSC_VER > 850 \ || defined(__MINGW32__) || defined(__CYGWIN) || defined(__BEOS__)) # ifdef __cplusplus # define MX_IMPORT(type) extern "C" type __declspec(dllimport) # else # define MX_IMPORT(type) extern type __declspec(dllimport) # endif #else # define MX_IMPORT(type) extern type #endif /* EOF */ #endif egenix-mx-base-3.2.7/mx/BeeBase/mxBeeBase/mxpyapi.h0000664000175000017500000003356612133300665021633 0ustar lemburglemburg#ifndef MXPYAPI_H #define MXPYAPI_H /* mxpyapi.h This header file includes some new APIs that are not available in older API versions, yet are used by the mx-Extensions. Copyright (c) 2000, Marc-Andre Lemburg; mailto:mal@lemburg.com Copyright (c) 2000-2013, eGenix.com Software GmbH; mailto:info@egenix.com */ /* Emulate PY_VERSION_HEX for older Python versions. */ #ifndef PY_VERSION_HEX # if PYTHON_API_VERSION == 1007 # define PY_VERSION_HEX 0x010500F0 # endif # if PYTHON_API_VERSION == 1006 # define PY_VERSION_HEX 0x010400F0 # endif # if PYTHON_API_VERSION < 1006 # define PY_VERSION_HEX 0 # endif #endif #ifdef __cplusplus extern "C" { #endif /* ---------------------------------------------------------------- Python 2.7.4 ---------------------------------------------------------------- */ #if PY_VERSION_HEX >= 0x02070400 && PY_VERSION_HEX < 0x02070500 /* Python 2.7.4 has a bug that causes Py_DECREF() to fail for dictionaries in module cleanup routines. See http://bugs.python.org/issue17703 */ #define mxPy_DECREF_Unsafe_AtExit() 1 #else /* Apply a runtime check */ #define mxPy_DECREF_Unsafe_AtExit() \ (strncmp(Py_GetVersion(), "2.7.4", 5) == 0) #endif /* ---------------------------------------------------------------- Python 2.7 and above: ---------------------------------------------------------------- */ #if PY_VERSION_HEX >= 0x02070000 /* Python 2.7 introduces the backported memoryview object */ #define HAVE_PYTHON_MEMORYVIEW #else #endif /* ---------------------------------------------------------------- Python 2.6 and above: ---------------------------------------------------------------- */ #if PY_VERSION_HEX >= 0x02060000 /* Python 2.6 introduces new buffer interface slots based on the Py_buffer interface. */ #define HAVE_PYTHON_PY_BUFFER #else #endif /* ---------------------------------------------------------------- Python 2.5 and above: ---------------------------------------------------------------- */ #if PY_VERSION_HEX >= 0x02050000 /* Parser marker */ #define Py_SSIZE_T_PARSERMARKER "n" #else /* Python 2.5 introduced a new type for index integers which is not available in earlier versions. Unfortunately, the new type has 64 bits on 64-bit architectures like AMD64, whereas integers still have 32 bits, which causes problems with output parameters. Along with the new type a few type slots were changed and a new parser marker introduced. */ #define Py_ssize_t int /* Parser marker */ #define Py_SSIZE_T_PARSERMARKER "i" /* Integer APIs */ #define PyInt_FromSize_t(x) PyInt_FromLong((long)(x)) #define PyInt_FromSsize_t(x) PyInt_FromLong((long)(x)) #define PyInt_AsSsize_t(x) ((Py_ssize_t)PyInt_AsLong(x)) #endif /* ---------------------------------------------------------------- Python 2.4 and above: ---------------------------------------------------------------- */ #if PY_VERSION_HEX >= 0x02040000 #else #endif /* ---------------------------------------------------------------- Python 2.3 and above: ---------------------------------------------------------------- */ #if PY_VERSION_HEX >= 0x02030000 #else /* These were introduced in Python 2.3: */ # define PY_LONG_LONG LONG_LONG /* Boolean APIs */ #define PyBool_FromLong(x) PyInt_FromLong((long)(x)?1:0) #endif /* ---------------------------------------------------------------- Python 2.2 and above: ---------------------------------------------------------------- */ #if PY_VERSION_HEX >= 0x02020000 # define HAVE_SUBCLASSABLE_TYPES 1 # define HAVE_INTERPRETER_DLOPENFLAGS 1 #else /* These were introduced in Python 2.2: */ # define PyString_CheckExact PyString_Check # define PyInt_CheckExact PyInt_Check # define PyFloat_CheckExact PyFloat_Check # define PyLong_CheckExact PyLong_Check # define PyExc_StopIteration PyExc_IndexError /* Not needed in Python 2.1 and below, so simply ignore the API */ # define PyType_Ready(x) #endif /* ---------------------------------------------------------------- Python 1.6 and 2.0 only: ---------------------------------------------------------------- */ /* Disabled: we don't support Python 1.6 and don't have a need for this API in any of the mx Tools (yet). */ #if 0 #if PY_VERSION_HEX >= 0x01060000 && PY_VERSION_HEX < 0x02010000 static PyObject * PyObject_Unicode(PyObject *v) { PyObject *res; if (v == NULL) res = PyString_FromString(""); else if (PyUnicode_Check(v)) { Py_INCREF(v); return v; } else if (PyString_Check(v)) res = v; else if (v->ob_type->tp_str != NULL) res = (*v->ob_type->tp_str)(v); else { PyObject *func; if (!PyInstance_Check(v) || (func = PyObject_GetAttrString(v, "__str__")) == NULL) { PyErr_Clear(); res = PyObject_Repr(v); } else { res = PyEval_CallObject(func, (PyObject *)NULL); Py_DECREF(func); } } if (res == NULL) return NULL; if (!PyUnicode_Check(res)) { PyObject* str; str = PyUnicode_FromObject(res); Py_DECREF(res); if (str) res = str; else return NULL; } return res; } #endif #endif /* ---------------------------------------------------------------- Python 2.0 alpha + betas: ---------------------------------------------------------------- */ #if PY_VERSION_HEX >= 0x02000000 && PY_VERSION_HEX < 0x020000F0 # if defined(PyBuffer_Check) && !defined(HAVE_PYTHON_BUFFEROBJECTS) # define HAVE_PYTHON_BUFFEROBJECTS # endif #ifndef Py_PROTO # define Py_PROTO(args) args #endif #endif /* ---------------------------------------------------------------- Python 1.6 and later: ---------------------------------------------------------------- */ #if PY_VERSION_HEX >= 0x01060000 #if defined(PyUnicode_Check) && !defined(HAVE_UNICODE) # define HAVE_UNICODE #endif #endif #if PY_VERSION_HEX >= 0x02020000 #if defined(HAVE_UNICODE) && !defined(Py_USING_UNICODE) # undef HAVE_UNICODE #endif #endif #ifndef HAVE_UNICODE # undef PyUnicode_Check # define PyUnicode_Check(obj) 0 #endif /* ---------------------------------------------------------------- Python < 1.6: ---------------------------------------------------------------- */ #if PY_VERSION_HEX < 0x01060000 #if !defined(PyObject_DEL) # define PyObject_DEL(x) free(x) # define PyObject_Del(x) free(x) #endif #endif /* ---------------------------------------------------------------- Python >= 1.5.2: ---------------------------------------------------------------- */ #if PY_VERSION_HEX >= 0x010502F0 # if defined(PyBuffer_Check) && !defined(HAVE_PYTHON_BUFFEROBJECTS) # define HAVE_PYTHON_BUFFEROBJECTS # endif #endif /* ---------------------------------------------------------------- Python >= 1.5.2 and prior to 2.0a1 ---------------------------------------------------------------- */ #if PY_VERSION_HEX >= 0x010502F0 && PY_VERSION_HEX < 0x02000000 /* Takes an arbitrary object which must support the (character, single segment) buffer interface and returns a pointer to a read-only memory location useable as character based input for subsequent processing. buffer and buffer_len are only set in case no error occurrs. Otherwise, -1 is returned and an exception set. */ static int PyObject_AsCharBuffer(PyObject *obj, const char **buffer, int *buffer_len) { PyBufferProcs *pb = obj->ob_type->tp_as_buffer; const char *pp; int len; if ( pb == NULL || pb->bf_getcharbuffer == NULL || pb->bf_getsegcount == NULL ) { PyErr_SetString(PyExc_TypeError, "expected a character buffer object"); goto onError; } if ( (*pb->bf_getsegcount)(obj,NULL) != 1 ) { PyErr_SetString(PyExc_TypeError, "expected a single-segment buffer object"); goto onError; } len = (*pb->bf_getcharbuffer)(obj,0,&pp); if (len < 0) goto onError; *buffer = pp; *buffer_len = len; return 0; onError: return -1; } /* Same as PyObject_AsCharBuffer() except that this API expects (readable, single segment) buffer interface and returns a pointer to a read-only memory location which can contain arbitrary data. buffer and buffer_len are only set in case no error occurrs. Otherwise, -1 is returned and an exception set. */ static int PyObject_AsReadBuffer(PyObject *obj, const void **buffer, int *buffer_len) { PyBufferProcs *pb = obj->ob_type->tp_as_buffer; void *pp; int len; if ( pb == NULL || pb->bf_getreadbuffer == NULL || pb->bf_getsegcount == NULL ) { PyErr_SetString(PyExc_TypeError, "expected a readable buffer object"); goto onError; } if ( (*pb->bf_getsegcount)(obj,NULL) != 1 ) { PyErr_SetString(PyExc_TypeError, "expected a single-segment buffer object"); goto onError; } len = (*pb->bf_getreadbuffer)(obj,0,&pp); if (len < 0) goto onError; *buffer = pp; *buffer_len = len; return 0; onError: return -1; } /* Takes an arbitrary object which must support the (writeable, single segment) buffer interface and returns a pointer to a writeable memory location in buffer of size buffer_len. buffer and buffer_len are only set in case no error occurrs. Otherwise, -1 is returned and an exception set. */ static int PyObject_AsWriteBuffer(PyObject *obj, void **buffer, int *buffer_len) { PyBufferProcs *pb = obj->ob_type->tp_as_buffer; void*pp; int len; if ( pb == NULL || pb->bf_getwritebuffer == NULL || pb->bf_getsegcount == NULL ) { PyErr_SetString(PyExc_TypeError, "expected a writeable buffer object"); goto onError; } if ( (*pb->bf_getsegcount)(obj,NULL) != 1 ) { PyErr_SetString(PyExc_TypeError, "expected a single-segment buffer object"); goto onError; } len = (*pb->bf_getwritebuffer)(obj,0,&pp); if (len < 0) goto onError; *buffer = pp; *buffer_len = len; return 0; onError: return -1; } #endif /* Python Version in [1.5.2b2, 2.0) */ /* ---------------------------------------------------------------- Python 1.5.2b1 and older: ---------------------------------------------------------------- */ #if PY_VERSION_HEX <= 0x010502B1 /* These are missing from PC/python_nt.def and thus didn't get included in python1.5.lib on Windows platforms. */ #ifdef MS_WIN32 # define PyString_InternInPlace(x) # define PyString_InternFromString(x) PyString_FromString(x) #endif #endif /* Python Version <= 1.5.2b1 */ /* ---------------------------------------------------------------- Python 1.5.2a2 and older: ---------------------------------------------------------------- */ #if PY_VERSION_HEX <= 0x010502A2 extern long PyOS_strtol Py_PROTO((const char *, char **, int)); #endif /* Python Version <= 1.5.2a2 */ /* ---------------------------------------------------------------- Python 1.5.2a1 and older: ---------------------------------------------------------------- */ #if PY_VERSION_HEX <= 0x010502A1 #ifndef PyList_SET_ITEM # define PyList_SET_ITEM(l,i,w) PyList_GET_ITEM(l,i) = w #endif #endif /* Python Version < 1.5.2a1 */ /* ---------------------------------------------------------------- Prior to Python 1.5: ---------------------------------------------------------------- */ #if PY_VERSION_HEX < 0x010500F0 /* New in Python1.5: */ # undef PyString_AS_STRING # define PyString_AS_STRING(op) (((PyStringObject *)(op))->ob_sval) # define PyString_GET_SIZE(op) (((PyStringObject *)(op))->ob_size) # define PyTuple_GET_SIZE(op) (((PyTupleObject *)(op))->ob_size) # define PyList_GET_SIZE(op) (((PyListObject *)(op))->ob_size) /* Changed since 1.4 */ # undef PyList_GET_ITEM # define PyList_GET_ITEM(op, i) (((PyListObject *)(op))->ob_item[i]) # undef PyInt_AS_LONG # define PyInt_AS_LONG(op) (((PyIntObject *)(op))->ob_ival) # undef PyFloat_AS_DOUBLE # define PyFloat_AS_DOUBLE(op) (((PyFloatObject *)(op))->ob_fval) /* This function is taken from error.c in Python 1.5... Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, The Netherlands. All Rights Reserved Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation, and that the names of Stichting Mathematisch Centrum or CWI or Corporation for National Research Initiatives or CNRI not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. While CWI is the initial source for this software, a modified version is made available by the Corporation for National Research Initiatives (CNRI) at the Internet address ftp://ftp.python.org. STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifdef HAVE_STDARG_PROTOTYPES PyObject * PyErr_Format(PyObject *exception, const char *format, ...) #else PyObject * PyErr_Format(exception, format, va_alist) PyObject *exception; const char *format; va_dcl #endif { va_list vargs; char buffer[500]; /* Caller is responsible for limiting the format */ #ifdef HAVE_STDARG_PROTOTYPES va_start(vargs, format); #else va_start(vargs); #endif vsprintf(buffer, format, vargs); PyErr_SetString(exception, buffer); return NULL; } /* Python 1.5 uses instances as exceptions, the 1.4 API only knows about strings. */ #define PyErr_NewException(name,base,dict) PyString_FromString(fullname); /* Missing from rename2.h in Python 1.4 */ #ifndef PyVarObject # define PyVarObject varobject #endif #endif /* Python Version < 1.5 */ #ifdef __cplusplus } #endif /* EOF */ #endif egenix-mx-base-3.2.7/mx/BeeBase/mxBeeBase/mxstdlib.h0000664000175000017500000002612712133021413021754 0ustar lemburglemburg#ifndef MXSTDLIB_H #define MXSTDLIB_H /* Standard stuff I use often -- not Python specific Copyright (c) 2000, Marc-Andre Lemburg; mailto:mal@lemburg.com Copyright (c) 2000-2013, eGenix.com Software GmbH; mailto:info@egenix.com See the documentation for further copyright information or contact the author. */ /* Standard includes */ #include #include #include #include #include #include /* Limits */ #ifdef HAVE_LIMITS_H # include #else # ifndef INT_MAX # define INT_MAX 2147483647 # endif # ifndef LONG_MAX # define LONG_MAX INT_MAX # endif #endif /* Disable a few MS VC++ warnings that were introduced in VS 2005, e.g. warning C4996: 'getenv': This function or variable may be unsafe. Consider using _dupenv_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. Note that #define _CRT_SECURE_NO_WARNINGS 1 does not work for some reason. You have to use the #pragma warning() to disable warnings inside a header file. */ #if defined(_MSC_VER) && (_MSC_VER >= 1400) # pragma warning(disable:4996) #endif /* --- My own macros for memory allocation... --------------------------- */ /* Define this macro if the code should use C malloc */ /* #define MAL_USE_C_MALLOC */ /* Define this macro if the code should use Python's pymalloc */ /* #define MAL_USE_PYMALLOC */ /* Define this macro if the code should use pymalloc and uses the cnew()/cnewstruct() macros. This is needed to only enable the helper functions when using those macros in pymalloc mode. */ /* #define MAL_USING_CNEW */ /* Decide which variant to use, if no explicit choice was made: C malloc or pymalloc */ #ifdef MAL_USE_C_MALLOC /* Force use of C malloc */ #elif !defined(MAL_USE_PYMALLOC) && defined (PYTHON_API_VERSION) /* Default to using the Python pymalloc in case we're compiling a Python extension */ # define MAL_USE_PYMALLOC #endif #ifndef MAL_USE_PYMALLOC /* --- Use C malloc for memory allocation --- */ # ifdef MAL_MEM_DEBUG /* Include debug information for tracing memory leaks */ # define newstruct(x) \ (mxDebugPrintf("* malloc for struct "#x" (%s:%i)\n",__FILE__,__LINE__),\ (x *)malloc(sizeof(x))) # define cnewstruct(x) \ (mxDebugPrintf("* calloc for struct "#x" (%s:%i)\n",c,__FILE__,__LINE__),\ (x *)calloc(sizeof(x),1)) # define new(x,c) \ (mxDebugPrintf("* malloc for "#c"=%i '"#x"'s (%s:%i)\n",c,__FILE__,__LINE__),\ (x *)malloc(sizeof(x)*(c))) # define cnew(x,c) \ (mxDebugPrintf("* calloc for "#c"=%i '"#x"'s (%s:%i)\n",c,__FILE__,__LINE__),\ (x *)calloc((c),sizeof(x))) # define resize(var,x,c) \ (mxDebugPrintf("* realloc array "#var" ("#x") at %X to size "#c"=%i (%s:%i)\n",var,c,__FILE__,__LINE__),\ (x *)realloc((void*)(var),sizeof(x)*(c))) # define varresize(var,x,bytes) \ (mxDebugPrintf("* realloc var "#var" ("#x") at %X to %i bytes (%s:%i)\n",var,bytes,__FILE__,__LINE__),\ (x *)realloc((void*)(var),(bytes))) # define free(x) \ (mxDebugPrintf("* freeing "#x" at %X (%s:%i)\n",x,__FILE__,__LINE__),\ free((void*)(x))) # else /* Non-debug versions of the macros */ # define newstruct(x) ((x *)malloc(sizeof(x))) # define cnewstruct(x) ((x *)calloc(sizeof(x),1)) # define new(x,c) ((x *)malloc(sizeof(x)*(c))) # define cnew(x,c) ((x *)calloc((c),sizeof(x))) # define resize(var,x,c) ((x *)realloc((void*)(var),sizeof(x)*(c))) # define varresize(var,x,bytes) ((x *)realloc((void*)(var),(bytes))) # define free(x) (free((void*)(x))) # endif #else /* --- Use Python pymalloc for memory allocation --- */ # ifdef MAL_USING_CNEW /* Helper needed since Python doesn't define a calloc() interface. */ static void *mx_PyObject_CALLOC(register size_t size) { register void *mem; if (size == 0) return NULL; mem = PyObject_MALLOC(size); if (mem) memset(mem, 0, size); return mem; } # endif # ifndef MAL_MEM_DEBUG /* Non-debug versions of the macros */ # define newstruct(x) ((x *)PyObject_MALLOC(sizeof(x))) # ifdef MAL_USING_CNEW # define cnewstruct(x) ((x *)mx_PyObject_CALLOC(sizeof(x))) # endif # define new(x,c) ((x *)PyObject_MALLOC(sizeof(x)*(c))) # ifdef MAL_USING_CNEW # define cnew(x,c) ((x *)mx_PyObject_CALLOC(sizeof(x)*(c))) # endif # define resize(var,x,c) ((x *)PyObject_REALLOC((void*)(var),sizeof(x)*(c))) # define varresize(var,x,bytes) ((x *)PyObject_REALLOC((void*)(var),(bytes))) # define free(x) (PyObject_FREE((void*)(x))) # else /* Debug versions of the macros */ # define newstruct(x) \ (mxDebugPrintf("* malloc for struct "#x" (%s:%i)\n",__FILE__,__LINE__), \ (x *)PyObject_MALLOC(sizeof(x))) # ifdef MAL_USING_CNEW # define cnewstruct(x) \ (mxDebugPrintf("* calloc for struct "#x" (%s:%i)\n",c,__FILE__,__LINE__), \ ((x *)mx_PyObject_CALLOC(sizeof(x)))) # endif # define new(x,c) \ (mxDebugPrintf("* malloc for "#c"=%i '"#x"'s (%s:%i)\n",c,__FILE__,__LINE__), \ ((x *)PyObject_MALLOC(sizeof(x)*(c)))) # ifdef MAL_USING_CNEW # define cnew(x,c) \ (mxDebugPrintf("* calloc for "#c"=%i '"#x"'s (%s:%i)\n",c,__FILE__,__LINE__), \ ((x *)mx_PyObject_CALLOC(sizeof(x)*(c)))) # endif # define resize(var,x,c) \ (mxDebugPrintf("* realloc array "#var" ("#x") at %X to size "#c"=%i (%s:%i)\n",var,c,__FILE__,__LINE__), \ ((x *)PyObject_REALLOC((void*)(var),sizeof(x)*(c)))) # define varresize(var,x,bytes) \ (mxDebugPrintf("* realloc var "#var" ("#x") at %X to %i bytes (%s:%i)\n",var,bytes,__FILE__,__LINE__), \ ((x *)PyObject_REALLOC((void*)(var),(bytes)))) # define free(x) \ (mxDebugPrintf("* freeing "#x" at %X (%s:%i)\n",x,__FILE__,__LINE__), \ (PyObject_FREE((void*)(x)))) # endif #endif /* --- Debugging output ------------------------------------------------- */ /* Use the flag MAL_DEBUG to enable debug processing. The flag MAL_DEBUG_WITH_PYTHON can be used to indicate that the object file will be linked with Python, so we can use Python APIs for the debug processing here. */ #ifdef MAL_DEBUG_WITH_PYTHON # ifndef PYTHON_API_VERSION # error "mx.h must be included when compiling with MAL_DEBUG_WITH_PYTHON" # endif # ifndef MAL_DEBUG # define MAL_DEBUG # endif #else # if defined(PYTHON_API_VERSION) && defined(MAL_DEBUG) # define MAL_DEBUG_WITH_PYTHON # endif #endif /* Indicator for the availability of these interfaces: */ #define HAVE_MAL_DEBUG /* Name of the environment variable defining the log file name to be used: */ #ifndef MAL_DEBUG_OUTPUTFILE_ENV_VARIABLE # define MAL_DEBUG_OUTPUTFILE_ENV_VARIABLE "mxLogFile" #endif /* File name to be used for debug logging (each object file using this facility may set its own logging file) if no environment variable is set: */ #ifndef MAL_DEBUG_OUTPUTFILE # define MAL_DEBUG_OUTPUTFILE "mx.log" #endif /* Name of the environment variable defining the log file prefix to be used (e.g. to direct all log files into a separate directory): */ #ifndef MAL_DEBUG_OUTPUTFILEPREFIX_ENV_VARIABLE # define MAL_DEBUG_OUTPUTFILEPREFIX_ENV_VARIABLE "mxLogFileDir" #endif /* File name prefix to be used for log files, if no environment variable is set: */ #ifndef MAL_DEBUG_OUTPUTFILEPREFIX # define MAL_DEBUG_OUTPUTFILEPREFIX "" #endif /* Log id to be used */ #ifndef MAL_DEBUG_LOGID # define MAL_DEBUG_LOGID "New Log Session" #endif /* Debug printf() API Output is written to a log file or stream. If the output file is not yet open, the function will try to open the file as defined by the environment or the program defines. The file remains open until the program terminates. Subsequent changes to the environment are not taken into account. The output file is deduced in the following way: 1. get the filename from the environment, revert to the predefined value 2. get the filename prefix from the environment, revert to the predefined value 3. if filename is one of "stderr" or "stdout" use the native streams for output; otherwise try to open fileprefix + filename reverting to stderr in case this fails. */ static int mxDebugPrintf(const char *format, ...) { va_list args; static FILE *mxDebugPrintf_file; if (!mxDebugPrintf_file) { time_t now; char *filename,*fileprefix; now = time(NULL); filename = getenv(MAL_DEBUG_OUTPUTFILE_ENV_VARIABLE); if (!filename) filename = MAL_DEBUG_OUTPUTFILE; fileprefix = getenv(MAL_DEBUG_OUTPUTFILEPREFIX_ENV_VARIABLE); if (!fileprefix) fileprefix = MAL_DEBUG_OUTPUTFILEPREFIX; if (strcmp(filename,"stdout") == 0) mxDebugPrintf_file = stdout; else if (strcmp(filename,"stderr") == 0) mxDebugPrintf_file = stderr; else { char logfile[512]; if (strlen(fileprefix) + strlen(filename) > sizeof(logfile) - 1) { /* Hack to shut up "cc -Wall" warning that this function is not used... */ static void *mxDebugPrintf_used; mxDebugPrintf_used = (void *)mxDebugPrintf; /* Default to stderr in case the log file name doesn't fit the available buffer */ mxDebugPrintf_file = stderr; fprintf(mxDebugPrintf_file, "\n*** Log file name too long: '%s%s'; " "using stderr\n", fileprefix, filename); } else { /* We made sure that there is enough room in logfile, so can use the unlimited APIs here */ strcpy(logfile, fileprefix); strcat(logfile, filename); mxDebugPrintf_file = fopen(logfile,"ab"); if (!mxDebugPrintf_file) { /* Default to stderr in case the log file cannot be opened */ mxDebugPrintf_file = stderr; fprintf(mxDebugPrintf_file, "\n*** Failed to open log file '%s'; " "using stderr\n",logfile); } } } fprintf(mxDebugPrintf_file, "\n--- "MAL_DEBUG_LOGID" --- %s\n", ctime(&now)); } va_start(args,format); vfprintf(mxDebugPrintf_file,format,args); fflush(mxDebugPrintf_file); va_end(args); return 1; } #ifdef MAL_DEBUG # ifdef MAL_DEBUG_WITH_PYTHON /* Use the Python debug flag to enable debugging output (python -d) */ # define DPRINTF if (Py_DebugFlag) mxDebugPrintf # define IF_DEBUGGING if (Py_DebugFlag) # define DEBUGGING (Py_DebugFlag > 0) # else /* Always output debugging information */ # define DPRINTF mxDebugPrintf # define IF_DEBUGGING # define DEBUGGING (1) # endif #else # ifndef _MSC_VER /* This assumes that you are using an optimizing compiler which eliminates the resulting debug code. */ # define DPRINTF if (0) mxDebugPrintf # define IF_DEBUGGING if (0) # define DEBUGGING (0) # else /* MSVC doesn't do a good job here, so we use a different approach. */ # define DPRINTF 0 && mxDebugPrintf # define IF_DEBUGGING if (0) # define DEBUGGING (0) # endif #endif /* --- Misc ------------------------------------------------------------- */ /* The usual bunch... */ #ifndef max # define max(a,b) ((a>b)?(a):(b)) #endif #ifndef min # define min(a,b) ((a= 671, 'BeeStringDict() should support all keysizes <=670' elif BeeIndex.sizeof_bRecAddr == 8: # 64-bit platforms assert keysize >= 660, 'BeeStringDict() should support all keysizes <=659' print 'done.' ### print 'Testing BeeFixedLengthStringDict with various keysizes ...', # Test various keysizes for keysize in range(1, 1024): try: s = BeeFixedLengthStringDict(testdict, autocommit=1, keysize=keysize) except IndexError: break for i in range(0, keysize): s['x' * keysize] = 1 for i in range(0, keysize): assert s['x' * keysize] == 1 s.close() s.remove_files() if BeeIndex.sizeof_bRecAddr == 4: # 32-bit platforms assert keysize >= 671, \ 'BeeFixedLengthStringDict() should support all keysizes <=670' elif BeeIndex.sizeof_bRecAddr == 8: # 64-bit platforms assert keysize >= 660, \ 'BeeFixedLengthStringDict() should support at least keysizes <=659' print 'done.' ### print 'Works.' egenix-mx-base-3.2.7/mx/BeeBase/mxBeeBase/testernesto.py0000664000175000017500000000135711312657451022723 0ustar lemburglemburg#!/usr/local/bin/python from mx.BeeBase import BeeStorage, BeeDict BeeStorage._debug = 1 BeeDict._debug = 1 def part1(): # Fill initial version of the dictionary d = BeeDict.BeeDict('testernesto', autocommit=1) for i in range(1000): d[i] = "A"*i d.commit() #d.free_cache() d.close() def part2(): # Update a few values d = BeeDict.BeeDict('testernesto', autocommit=1) for i in range(100,300): d[i] = "C" * i d.commit() import sys if sys.argv[1] == 'init': import os for filename in ('testernesto.dat', 'testernesto.idx', ): try: os.remove(filename) except: pass part1() else: part2() egenix-mx-base-3.2.7/mx/BeeBase/mxBeeBase/testjohn.py0000664000175000017500000000070207524711524022175 0ustar lemburglemburgimport mx.BeeBase.BeeDict def test(): d = mx.BeeBase.BeeDict.BeeDict('testjohn.dat') d['Marc9']='Sveta' d.commit() d.close() d = mx.BeeBase.BeeDict.BeeDict('testjohn.dat') print 'original',d['Marc9'] d['Marc9']='betty1' d.commit() print 'dict change\t',d.changed(),d['Marc9'] del(d['Marc9']) d.commit() d['Marc9']='betty2' print 'del dict change\t',d.changed(),d['Marc9'] d.close() test() egenix-mx-base-3.2.7/mx/BeeBase/BeeBase.py0000664000175000017500000000074612133021405017762 0ustar lemburglemburg""" BeeBase - A suite of building parts for databases. Copyright (c) 1998-2000, Marc-Andre Lemburg; mailto:mal@lemburg.com Copyright (c) 2000-2013, eGenix.com Software GmbH; mailto:info@egenix.com See the documentation for further information on copyrights, or contact the author. All Rights Reserved. HTML-Logo: BeeBase """#" # Import version from C extension from mxBeeBase import __version__ egenix-mx-base-3.2.7/mx/BeeBase/BeeDict.py0000664000175000017500000014700112251376776020020 0ustar lemburglemburg""" BeeDict - On-disk dictionary like databases """ import exceptions, os import BeeIndex,BeeStorage from mx import Tools freeze = Tools.freeze from mx.Log import * #import TraceCalls; TraceCalls.install() #log.setup(ignore_level=SYSTEM_LOG_EVERYTHING) ### Globals # Write debug info _debug = 0 ### Constants # Special keys FirstKey = BeeIndex.FirstKey LastKey = BeeIndex.LastKey # Maximal cache size default value ( == size of transaction log; kept in memory !) MAXCACHESIZE = 1000 ### Errors class Error(exceptions.StandardError): pass class IndexError(Error): """ This error is raised for index related errors. """ pass class RecreateIndexError(IndexError): """ This error is raised in case the index for a dictionary was not found and/or needs to be recreated by running recovery. """ pass class RecoverError(Error): """ This error is raised in case the storage for a dictionary was found to be in an inconsistent state. """ pass ### Base classes # State constants READ = 0 MODIFIED = 1 DELETED = 2 READKEYONLY = 3 # XXX Currently not used. class BeeBaseDict: """ Base class that collects some method that all dicts can usually share without modification. The base class implements a transaction based caching mechanism. The cache stores data in the form key:(state,value) where state is: * READ for read but not yet modified * MODIFIED for added/modified * DELETED for deleted * READKEYONLY for key read, value still on disk The .commit method has to implement the needed disk mechanism to write the cache data to disk storage. """ # Name of the dictionary name = 'NoName' # Name of the storage file; set in .__init__() storage_name = name + '.dat' # Name of the index file; set in .__init__() index_name = name + '.idx' # Bee*Index object index = None # Bee*Storage object storage = None # Is the dictionary closed ? closed = 0 # Cache dictionary cache = None # Is the dictionary read-only ? readonly = 0 # Run in auto-commit mode ? This will perform a commit whenever # the cache gets to full. autocommit = 0 # Max. cache size in number of items to store in the in-memory # transaction cache maxcachesize = MAXCACHESIZE # Special keys that can be used for .cursor() FirstKey = FirstKey LastKey = LastKey def __init__(self, name, keysize=8, min_recordsize=0, readonly=0, recover=0, autocommit=0, validate=0, index=BeeIndex.BeeIntegerIndex, maxcachesize=None): """ Create an instance using name as basename for the data and index files. Two files will be created: .dat and .idx. keysize gives the maximal size of the key strings used as index keys. This is only useful for string based keys. min_recordsize is passed to the BeeStorage as indicator of the minimum size for data records. readonly can be set to true to open the files in read-only mode, preventing any disk modifications. To open the dictionary in recovery mode, pass a keyword recover=1. Then run .recover() and reopen using the normal settings. If autocommit is true the cache control will do an automatic .commit() whenever the transaction log overflows. If validate is true, the dictionary will run a validation check after having successfully opened storage and index. RecreateIndexError or RecoverError exceptions could be raised in case inconsistencies are found. index gives the constructor to use for the .index. The constructors BeeIntegerIndex and BeeStringIndex from the BeeIndex module are supported. maxcachesize defines the maximum size of the in-memory transaction cache. It defaults to MAXCACHESIZE if not given. """ # Init instance vars self.name = name self.storage_name = name + '.dat' self.index_name = name + '.idx' self.cache = {} if maxcachesize is not None: self.maxcachesize = maxcachesize else: self.maxcachesize = self.maxcachesize # Open storage self.storage = BeeStorage.BeeKeyValueStorage( self.storage_name, lock= not readonly, cache=0, min_recordsize=min_recordsize, readonly=readonly, recover=recover) # Determine the filemode for the index if readonly: # Readonly mode filemode = 1 else: if self.storage.is_new or recover: # Create a new file (overwriting a possibly existing one) filemode = 2 else: # Open an existing file, recreate if non-existing filemode = 0 # Open the index try: # Special argument treatment for the indexes; we check # depending on the used constructor function if (index is BeeIndex.BeeStringIndex or index is BeeIndex.BeeFixedLengthStringIndex): # Calculate the right sectorsize sectorsize = self._calc_sectorsize(keysize) print ('Using keysize=%i with sectorsize=%i' % (keysize, sectorsize)) self.index = index(self.index_name, keysize, dupkeys=0, filemode=filemode, sectorsize=sectorsize) elif index is BeeIndex.BeeIntegerIndex: # keysize is sizeof(long) self.index = index(self.index_name, dupkeys=1, filemode=filemode, sectorsize=256) elif index is BeeIndex.BeeFloatIndex: # keysize is sizeof(double) self.index = index(self.index_name, dupkeys=1, filemode=filemode, sectorsize=256) else: raise IndexError, 'unknown index type: %s' % repr(index) except (IOError, IndexError), why: # Make sure the storage lock is freed self.close() raise RecreateIndexError,\ 'Index for %s "%s" could not be opened' % \ (index.__name__, name) self.readonly = readonly self.autocommit = autocommit if validate: self.validate_index() self.validate_storage() def _calc_sectorsize(self, keysize): """ Calculate the sectorsize given the keysize. """ # These values were determined using the helper # mxBeeBase/calc-sectorsize.py if BeeIndex.sizeof_bRecAddr == 4: # These figures are good for 32-bit platforms and were # used for mxBeeBase <= 3.2.6 for all platforms, failing # for some keysizes when used on 64-bit platforms. Tested # on Linux x86, Windows x86 and x64. if keysize <= 30: sectorsize = 256 elif keysize <= 73: sectorsize = 512 elif keysize <= 158: sectorsize = 1024 elif keysize <= 329: sectorsize = 2048 elif keysize <= 670: sectorsize = 4096 else: raise IndexError, 'keysize %i is too large' % keysize elif BeeIndex.sizeof_bRecAddr == 8: # 64-bit platforms need different sector sizes if keysize <= 19: sectorsize = 256 elif keysize <= 61: sectorsize = 512 elif keysize <= 147: sectorsize = 1024 elif keysize <= 317: sectorsize = 2048 elif keysize <= 659: sectorsize = 4096 else: raise IndexError, 'keysize %i is too large' % keysize else: raise IndexError('incompatible platform: sizeof_bRecAddr=%i' % BeeIndex.sizeof_bRecAddr) return sectorsize def remove_files(self): """ Deletes the storage and index files used for the instance. Closes the on-disk dictionary before proceeding with the removal. USE WITH CARE ! """ self.close() os.remove(self.storage_name) os.remove(self.index_name) def __len__(self): """ This only gives correct results if no modifications are pending. """ # Check for uncommitted changes if self.cache and self.changed(): raise Error, 'uncommitted data exists; can\'t calculate length' return len(self.index) def close(self): """ Flush buffers and close. This issues a .rollback(), so the current transaction is rolled back. It also frees the lock on the used index. """ if not self.closed: self.rollback() for obj in (self.index, self.storage): if obj is not None: # .rollback will have flushed the buffers obj.close() self.closed = 1 def __del__(self, AttributeError=AttributeError): """ Make sure the object is closed and locks are freed. """ #print '__del__ %s' % repr(self) if not self.closed: try: self.close() except AttributeError: # Could occur during interpreter cleanup pass def flush(self): """ Flush buffers to disk. """ if self.closed: # Nothing much to do return if self.storage is not None: self.storage.flush() if self.index is not None: self.index.flush() def __repr__(self): return '<%s instance for "%s" at 0x%x>' % (self.__class__.__name__, self.name, id(self)) def commit(self): """ Commit all changes and start a new transaction. This method does not implement any write operation, but takes care of managing the cache and flushing the storage and index buffers. You must override this method to have commit have any writing effect. The base method must be called after the cache has been processed. """ # Clear cache if self.cache is not None: self.cache.clear() # Flush storage and index self.flush() def rollback(self): """ Take back all changes and start a new transaction. Overriding is normally not needed. This method only takes care of managing the cache and flushing the storage and index buffers. """ # Clear cache if self.cache is not None: self.cache.clear() # Flush storage and index self.flush() def changed(self, modified=(MODIFIED,DELETED)): """ Return true in case the current transaction includes changes to the database, false otherwise. """ if self.cache: for key,(state,value) in self.cache.items(): if state in modified: return 1 return 0 def free_cache(self, len=len,unmodified=(READ,READKEYONLY)): """ Remove all unmodified entries from the cache. If self.autocommit and the cache cleanup did not reduce the size below the .maxcachesize limit, a .commit() will be executed automatically. Otherwise the processing continues. If the cache size hits 2 * .maxcachesize, a forced .rollback() is done and an error raised. """ cache = self.cache for key,(state,value) in cache.items(): if state in unmodified: del cache[key] size = len(cache) if size > self.maxcachesize: if self.autocommit: self.commit() return log(SYSTEM_ERROR, 'Cache overflow: %i modified items in cache',size) if size > 2 * self.maxcachesize: # Force .rollback() and raise an error log(SYSTEM_ERROR, 'Cache overflow: forced a .rollback()') self.rollback() raise Error,'cache overflow; last transaction rolled back' def read(self,key,checkonly=0): """ Read and return the value corresponding to key. If checkonly is true, only the availability of a value has to be checked. Override this method with an implementation that accesses the disk. """ raise KeyError,'key not found' def __setitem__(self,key,value, MODIFIED=MODIFIED): """ Save the item in the dictionary. Note that it is written to the cache first. Use .commit() to make sure it is written to disk. """ self.cache[key] = (MODIFIED, value) def __getitem__(self,key, validstates=(READ,MODIFIED),len=len,KeyError=KeyError, DELETED=DELETED,READ=READ): """ Get an item from the dictionary. This first tries to read the item from cache and reverts to the disk storage if it is not found. """ try: cache = self.cache state,value = cache[key] if state in validstates: return value except KeyError: pass else: if state == DELETED: raise KeyError,'key deleted' # Read from disk value = self.read(key) # Cache the item if len(cache) > self.maxcachesize: self.free_cache() cache[key] = (READ, value) return value def __delitem__(self, key, DELETED=DELETED): """ Delete an item. The item is only marked for deletion. The next .commit() will make the action permanent. """ cache = self.cache if not cache.has_key(key): self.read(key, 1) cache[key] = (DELETED, None) def has_key(self,key, len=len,KeyError=KeyError,DELETED=DELETED,READ=READ): """ Check if the dictionary has an item indexed by key. Successfully found items are put in the cache for fast subsequent access. """ try: cache = self.cache state,value = cache[key] if state == DELETED: return 0 return 1 except KeyError: pass # Read from disk try: value = self.read(key) except KeyError: return 0 # Cache the item if len(cache) > self.maxcachesize: self.free_cache() cache[key] = (READ, value) return 1 def get(self,key,default=None, len=len,KeyError=KeyError,DELETED=DELETED,READ=READ): """ Get item indexed by key from the dictionary or default if no such item exists. This first tries to read the item from cache and reverts to the disk storage if it is not found. """ try: cache = self.cache state,value = cache[key] if state == DELETED: return default return value except KeyError: pass # Read from disk try: value = self.read(key) except KeyError: return default # Cache the item if len(cache) > self.maxcachesize: self.free_cache() cache[key] = (READ, value) return value def cursor(self, key=FirstKey, default=None): """ Return a cursor instance for this kind of dictionary. If key is given, the cursor is positioned on that key in the dictionary. Otherwise, the first entry in the dictionary is used which guarantees that all entries are scanned. In case the key is not found, default is returned instead. Note that cursors operate with the data on disk meaning that any uncommitted changes will not be seen by the cursor. Has to be overridden to return a suitable cursor object. """ # Check for uncommitted changes if self.cache and self.changed(): raise Error,'uncommitted data exists' # Get the index cursor and create a dict cursor from it cursor = self.index.cursor(key,None) if cursor is None: return default return BeeBaseDictCursor(self,cursor) def garbage(self): """ Determine the amount of garbage in bytes that has accumulated in the storage file. This amount would be freed if .collect() were run. """ valid,old,invalid = self.storage.statistics() return old + invalid def collect(self): """ Run the storage garbage collector. Storage collection can only be done for writeable dictionaries and then only if the current transaction does not contain any pending changes. This can take a while depending on the size of the dictionary. """ if self.readonly: raise Error,'dict is read-only' # Check for uncommitted changes if self.cache and self.changed(): raise Error,'uncommitted data exists' self.flush() log(SYSTEM_INFO,'Collecting %s',self) # Run collector self.storage.collect(self.collect_callback) # End the storage transaction self.storage.end_transaction() def collect_callback(self,old_position,new_position,raw_data): """ Internal callback used to update the index when the storage garbage collector moves a record. This method must be overridden to account for the different indexing schemes. """ raise Error,'.collect_callback() not implemented' def recover(self): """ Recover all valid records and recreate the index. """ log(SYSTEM_INFO,'Recovering %s',self) # Clear the index self.index.clear() # Run recovery and recreate the index through the callback self.storage.recover(self.recover_callback) # End the storage transaction self.storage.end_transaction() def recover_callback(self,old_position,new_position,raw_data): """ Internal callback used to update the index when the storage recovery collector finds a record. old_position is only given as additional information, new_position contains the position of the found record. This method must be overridden to account for the different indexing schemes. """ raise Error,'.recover_callback() not implemented' def validate_index(self): """ Checks the consistency of the index and raises an RecreateIndexError in case the index is found to be inconsistent. Validation takes places for the data on disk. The in memory data is not checked. """ log(SYSTEM_INFO,'Validating index for %s',self) if not self.index.validate(): raise RecreateIndexError,'index is inconsistent' def validate_storage(self): """ Checks the consistency of the storage and raises an RecoverError in case it is found to be inconsistent. Validation takes places for the data on disk. The in memory data is not checked. XXX This currently does nothing since storages don't support validation yet. """ log(SYSTEM_INFO,'Validating storage for %s',self) return def backup(self,archive=None): """ Issues a backup request to the storage using archive which defaults to the storage filename + '.backup'. This causes an implicit .rollback() to be done. """ self.rollback() self.storage.backup(archive) def restore(self,archive): """ Restores the storage from an archive file. XXX Currently does NOT work. """ raise SystemError,'.restore() not implemented !' ### Iterator interface def __iter__(self, method='items'): """ Iterator interface. Creates an iterator which iterates over the items of the complete dictionary. Note that this only works if there are no uncommitted changes. """ cursor = self.cursor(FirstKey) if cursor is None: return EmptyIterator() if method == 'items': return BeeBaseIterator(cursor) elif method == 'keys': return BeeBaseIterator(cursor, cursor.read_key) elif method == 'values': return BeeBaseIterator(cursor, cursor.read_value) else: raise ValueError, 'unknown iterator method: %s' % method def iteritems(self): """ Returns an iterator to iterate over the items of the dictionary. """ return self.__iter__() def iterkeys(self): """ Returns an iterator to iterate over the keys of the dictionary. """ return self.__iter__('keys') def itervalues(self): """ Returns an iterator to iterate over the values of the dictionary. """ return self.__iter__('values') ### BeeBase iterators # To make iterators work in Python 2.1 and below try: StopIteration except NameError: class StopIteration(exceptions.IndexError): pass class EmptyIterator: """ Empty iterator. """ def next(self): raise StopIteration def __getitem__(self, index): raise StopIteration class BeeBaseIterator: """ Iterator for BeeBaseDict subclasses. """ def __init__(self, cursor, read_method=None): """ Iterate over cursor and return the values which the read_method function returns when called without arguments. If read_method is None, cursor.read_item is used. """ self.cursor = cursor if read_method is None: self.read_method = cursor.read_item else: self.read_method = read_method self.stop = 0 def next(self): if self.stop: raise StopIteration x = self.read_method() self.stop = not self.cursor.next() return x def __getitem__(self, index): return self.next() ### Cursor base class class BeeBaseDictCursor: """ Cursor for BeeBaseDict subclasses. The read/read_key/write methods assume that the dictionary uses a BeeKeyValueStorage instances as storage facility. Note that modifying the targetted dictionary while using a cursor can cause the cursor to skip new entries or fail due to deleted items. Especially deleting the key to which the cursor currently points can cause errors to be raised. In all other cases, the cursor will be repositioned. """ cursor = None def __init__(self,dict,cursor): self.dict = dict self.cursor = cursor self.key = cursor.key self.value = cursor.value # Alias self.read_value = self.read def position(self, key, value=None): """ Position the index cursor to index[key]. If value is given, index[key] == value is assured. key may also be FirstKey or LastKey (in which case value has to be None). """ # Create and position the cursor self.cursor = cursor = self.dict.index.cursor(key) if value and cursor.value != value: # assure that the cursor points to key,value while cursor.next(): if cursor.value == value: break if cursor.key != key: raise KeyError,'key not found' else: raise KeyError,'key not found' self.key = key self.value = value def next(self): """ Moves to the next entry in the dictionary. Returns true on success, false if the end-of-data has been reached. """ cursor = self.cursor if not cursor.valid: self.position(self.key,self.value) cursor = self.cursor rc = cursor.next() self.key = cursor.key self.value = cursor.value return rc def prev(self): """ Moves to the previous entry in the dictionary. Returns true on success, false if the end-of-data has been reached. """ cursor = self.cursor if not cursor.valid: self.position(self.key,self.value) cursor = self.cursor rc = cursor.prev() self.key = cursor.key self.value = cursor.value return rc def read(self): """ Reads the value object from the dict to which the cursor currently points. This method assumes a BeeKeyValueStorage instance in self.storage and an index that holds copies of the key objects. Override if this is not the case. """ return self.dict[self.key] def read_key(self): """ Reads the key object from the dict to which the cursor currently points. This method is intended for dictionaries that store hash values in the index. Normally, accessing the instance variable .key would give the current key object. This method assumes a BeeKeyValueStorage instance in self.storage. Override if this is not the case. """ return self.dict.storage.read_key(self.value) def read_item(self): """ Reads the (key, value) item object from the dict to which the cursor currently points. This method is intended for dictionaries that store hash values in the index. This method assumes a BeeKeyValueStorage instance in self.storage. Override if this is not the case. """ keyobj = self.dict.storage.read_key(self.value) return keyobj, self.dict[keyobj] def write(self,object): """ Writes the value object to the dict under the key to which the cursor currently points. The new data is not written to disk until the dictionaries current transaction is committed. This method assumes a BeeKeyValueStorage instance in self.storage and an index that holds copies of the key objects. Override if this is not the case. """ self.dict[self.key] = object ### Actual implementations class BeeDict(BeeBaseDict): """ On-disk dictionary that uses a "hash to address" index. Both Keys and values must be pickleable. Keys also have to be hashable. Both can have arbitrary size (keys shouldn't be too long though). Hash collisions are treated by sequential reads of all records with the same hash value and testing for equality of keys. This can be expensive ! """ # Count the number of hash collisions in writes collisions = 0 def __init__(self,name,min_recordsize=0,readonly=0,recover=0, autocommit=0,validate=0, maxcachesize=None, basemethod=BeeBaseDict.__init__): """ Create an instance using name as basename for the data and index files. Two files will be created: .dat and .idx. min_recordsize is passed to the BeeStorage as indicator of the minimum size for data records. readonly can be set to true to open the files in read-only mode, preventing any disk modifications. To open the dictionary in recovery mode, pass a keyword recover=1. Then run .recover() and reopen using the normal settings. If autocommit is true the cache control will do an automatic .commit() whenever the transaction log overflows. If validate is true, the dictionary will run a validation check after having successfully opened storage and index. RecreateIndexError or RecoverError exceptions could be raised in case inconsistencies are found. maxcachesize defines the maximum size of the in-memory transaction cache. It defaults to MAXCACHESIZE if not given. """ basemethod(self, name, min_recordsize=min_recordsize, readonly=readonly, recover=recover, autocommit=autocommit, validate=validate, index=BeeIndex.BeeIntegerIndex, maxcachesize=maxcachesize) def find_address(self,cursor,hashvalue,key): """ Find the address of a key by scanning the hash value set pointed to by the cursor. Returns the address of the found key or None. """ while cursor.next(): if cursor.key != hashvalue: # Left set of identical keys in index: not found return None if key == self.storage.read_key(cursor.value): # Found return cursor.value # EOF reached index: not found return None def index_cursor(self, key=FirstKey, default=None): """ Return an index cursor pointing to key. If key is not given, it defaults to FirstKey. In case the key is not found, default is returned. XXX Should use this method in more places... """ if key is FirstKey or key is LastKey: return self.index.cursor(key, default) hashvalue = hash(key) cursor = self.index.cursor(hashvalue,None) if cursor is None: return default # Check that we have really found the key address = cursor.value if key != self.storage.read_key(address): # Ah, a collision address = self.find_address(cursor,hashvalue,key) if address is None: return default return cursor def commit(self, basemethod=BeeBaseDict.commit,MODIFIED=MODIFIED,DELETED=DELETED): """ Commit all changes and start a new transaction. """ # Write all changed entries in the cache to disk index = self.index index_cursor = index.cursor index_update = index.update index_delete = index.delete storage = self.storage storage_read_key = storage.read_key storage_write = storage.write storage_delete = storage.delete readonly = self.readonly NotFound = None debug = _debug if debug: log(SYSTEM_DEBUG,'Committing all changes for "%s"...',self.name) for key,(state,value) in self.cache.items(): if state == MODIFIED: if debug: log.object(SYSTEM_DEBUG,' writing key %r:' % repr(key), value) if readonly: raise Error,'dict is read-only' hashvalue = hash(key) cursor = index_cursor(hashvalue, NotFound) if cursor is not NotFound: # Update an existing entry (or maybe add a new one if there # was a hash collision) address = cursor.value if key != storage_read_key(address): self.collisions = self.collisions + 1 address = self.find_address(cursor, hashvalue, key) # address may be None (== NotFound)... meaning # that we have to add a new record new_address = storage_write(key, value, address) if new_address == address: continue # Update index if address is not NotFound: index_update(hashvalue, new_address, address) else: index[hashvalue] = new_address else: # Add a new entry address = storage_write(key, value) # Update index index[hashvalue] = address elif state == DELETED: if debug: log(SYSTEM_DEBUG,' deleting key %r', repr(key)) if readonly: raise Error,'dict is read-only' hashvalue = hash(key) cursor = index_cursor(hashvalue) # Check that we have really found the key address = cursor.value if key != storage_read_key(address): # Ah, a collision address = self.find_address(cursor, hashvalue, key) if address is NotFound: raise KeyError,'key not found' storage_delete(address) # Update index index_delete(hashvalue, address) # End the storage transaction storage.end_transaction() # Call basemethod basemethod(self) def read(self,key,checkonly=0): # Load from disk hashvalue = hash(key) cursor = self.index.cursor(hashvalue) # Check that we have really found the key address = cursor.value if key != self.storage.read_key(address): # Ah, a collision address = self.find_address(cursor,hashvalue,key) if address is None: raise KeyError,'key not found' if checkonly: return else: return self.storage.read(address)[1] def keys(self, DELETED=DELETED): """ Return a list of keys. The method does not load any data into the cache, but does take notice of uncommitted changes. """ l = [] read_key = self.storage.read_key # First the cache entries that are not yet committed for key,(state,value) in self.cache.items(): if state != DELETED: l.append(key) # Next the remaining entries read from disk key_added = self.cache.has_key for address in self.index.values(): key = read_key(address) if not key_added(key): l.append(key) return l def values(self, DELETED=DELETED): """ Return a list of values. The method does not load any data into the cache, but does take notice of uncommitted changes. """ l = [] read = self.storage.read # First the cache entries that are not yet committed for key,(state,value) in self.cache.items(): if state != DELETED: l.append(value) # Next the remaining entries read from disk key_added = self.cache.has_key for address in self.index.values(): key,value = read(address) if not key_added(key): l.append(value) return l def items(self, DELETED=DELETED): """ Return a list of items. The method does not load any data into the cache, but does take notice of uncommitted changes. """ l = [] read = self.storage.read # First the cache entries that are not yet committed for key,(state,value) in self.cache.items(): if state != DELETED: l.append((key,value)) # Next the remaining entries read from disk key_added = self.cache.has_key for address in self.index.values(): key,value = read(address) if not key_added(key): l.append((key,value)) return l def cursor(self, key=FirstKey, default=None): """ Return a cursor instance for this kind of dictionary. If key is given, the cursor is positioned on that key in the dictionary. Otherwise, the first entry in the dictionary is used which guarantees that all entries are scanned. Note that cursors operate with the data on disk. The method will raise an error in case there are uncommitted changes pending. In case the key is not found, default is returned instead. """ # Check for uncommitted changes if self.cache and self.changed(): raise Error,'uncommitted data exists' # Get the index cursor and create a dict cursor from it cursor = self.index_cursor(key,None) if cursor is None: return default return BeeDictCursor(self,cursor) def collect_callback(self, old_position, new_position, raw_data): """ Internal callback used to update the index when the storage garbage collector moves a record. """ key = hash(self.storage.decode_key(raw_data)) try: self.index.update(key,new_position,old_position) except KeyError: # Ok, then we'll add the key as new entry log(SYSTEM_WARNING, 'Collect callback detected a missing key in ' 'index: %i; restoring it',old_position) self.index[key] = new_position def recover_callback(self, old_position, new_position, raw_data): """ Internal callback used to update the index when the storage recovery collector finds a record. old_position is only given as additional information. new_position contains the position of the found record. """ self.index[hash(self.storage.decode_key(raw_data))] = new_position ### class BeeDictCursor(BeeBaseDictCursor): """ Cursor for BeeDict instances. Since the keys are not kept directly in the index, .read_key() must be used to obtain the real key objects instead of querying the instance variable .key. """ def read(self): """ Reads the value object from the dict to which the cursor currently points. """ keyobj = self.dict.storage.read_key(self.value) return self.dict[keyobj] def read_key(self): """ Reads the key object from the dict to which the cursor currently points. """ return self.dict.storage.read_key(self.value) def read_item(self): """ Reads the (key, value) item object from the dict to which the cursor currently points. """ keyobj = self.dict.storage.read_key(self.value) return keyobj, self.dict[keyobj] def write(self,object): """ Writes the value object to the dict under the key to which the cursor currently points. The new data is not written to disk until the dictionary's current transaction is committed. """ keyobj = self.dict.storage.read_key(self.value) self.dict[keyobj] = object freeze(BeeDictCursor) ### class BeeStringDict(BeeBaseDict): """ A dictionary that is indexed by limited size strings. The key strings may *not* contain embedded \0 characters. Though the keys must be strings of limited size, the values can be any pickleable object. """ def __init__(self,name,keysize=10,min_recordsize=0,readonly=0,recover=0, autocommit=0,validate=0, maxcachesize=None, basemethod=BeeBaseDict.__init__): """ Create an instance using name as dictionary name. Two files will be created: .dat and .idx. keysize gives the maximal size of the strings used as index keys. min_recordsize gives a hint to the expected typical size of (key,value) pickles: all records will have at least this size. To open the dictionary in recovery mode, pass a keyword recover=1. Then run .recover() and reopen using the normal settings. If autocommit is true the cache control will do an automatic .commit() whenever the transaction log overflows. If validate is true, the dictionary will run a validation check after having successfully opened storage and index. RecreateIndexError or RecoverError exceptions could be raised in case inconsistencies are found. maxcachesize defines the maximum size of the in-memory transaction cache. It defaults to MAXCACHESIZE if not given. XXX Save keysize in storage file header. """ basemethod(self, name, keysize=keysize, min_recordsize=min_recordsize, readonly=readonly, recover=recover, autocommit=autocommit, validate=validate, index=BeeIndex.BeeStringIndex, maxcachesize=maxcachesize) def commit(self, basemethod=BeeBaseDict.commit,DELETED=DELETED,MODIFIED=MODIFIED): """ Commit all changes and start a new transaction. """ # Write all changed entries in the cache to disk index = self.index index_get = index.get storage = self.storage storage_write = storage.write storage_delete = storage.delete readonly = self.readonly NotFound = None debug = _debug if debug: log(SYSTEM_DEBUG,'Committing all changes for "%s"...',self.name) for key,(state,value) in self.cache.items(): if state == MODIFIED: if debug: log.object(SYSTEM_DEBUG,' writing key %s:' % repr(key), value) address = index_get(key,NotFound) if address is not NotFound: # Update storage new_addr = storage_write(key,value,address) if new_addr == address: continue # Update index index[key] = new_addr else: # Add to storage address = storage_write(key,value) # Add to the index index[key] = address elif state == DELETED: if debug: log(SYSTEM_DEBUG,' deleting key %s', repr(key)) if readonly: raise Error,'dict is read-only' address = index_get(key,NotFound) if address is not NotFound: # Delete record storage_delete(address) # Update Index del index[key] else: raise KeyError,'key not found' # End the storage transaction storage.end_transaction() # Call basemethod basemethod(self) def read(self,key,checkonly=0): address = self.index[key] if checkonly: return else: return self.storage.read(address)[1] def keys(self): """ Return a list of keys. The method will raise an error if there are uncommitted changes pending. Output is sorted ascending according to keys. """ if self.cache and self.changed(): raise Error,'uncommitted data exists' return self.index.keys() def values(self): """ Return a list of values. The method will raise an error if there are uncommitted changes pending. Output is sorted ascending according to keys. """ if self.cache and self.changed(): raise Error,'uncommitted data exists' l = [] read = self.storage.read for address in self.index.values(): l.append(read(address)[1]) return l def items(self): """ Return a list of items. The method will raise an error if there are uncommitted changes pending. Output is sorted ascending according to keys. """ if self.cache and self.changed(): raise Error,'uncommitted data exists' l = [] read = self.storage.read for address in self.index.values(): l.append(read(address)) return l def cursor(self, key=FirstKey, default=None): """ Return a cursor instance for this kind of dictionary. If key is given, the cursor is positioned on that key in the dictionary. Otherwise, the first entry in the dictionary is used which guarantees that all entries are scanned. Note that cursors operate with the data on disk meaning that any uncommitted changes will not be seen by the cursor. In case the key is not found, default is returned instead. """ # Check for uncommitted changes if self.cache and self.changed(): raise Error,'uncommitted data exists' # Get the index cursor and create a dict cursor from it cursor = self.index.cursor(key,None) if cursor is None: return default return BeeStringDictCursor(self,cursor) def collect_callback(self,old_position,new_position,raw_data): """ Internal callback used to update the index when the storage garbage collector moves a record. """ key = self.storage.decode_key(raw_data) try: self.index.update(key,new_position,old_position) except KeyError: # Ok, then we'll add the key as new entry log(SYSTEM_WARNING, 'Collect callback detected a missing key in ' 'index: %i; restoring it',old_position) self.index[key] = new_position def recover_callback(self,old_position,new_position,raw_data): """ Internal callback used to update the index when the storage recovery collector finds a record. old_position is only given as additional information. new_position contains the position of the found record. XXX What if the recovery collector find two records with the same key ? """ self.index[self.storage.decode_key(raw_data)] = new_position freeze(BeeStringDict) ### class BeeFixedLengthStringDict(BeeStringDict): """ A dictionary that is indexed by fixed length strings. The key strings may contain embedded \0 characters. Though the keys must be strings of limited size, the values can be any pickleable object. """ def __init__(self,name,keysize=10,min_recordsize=0,readonly=0,recover=0, autocommit=0,validate=0, maxcachesize=None, basemethod=BeeBaseDict.__init__): """ Create an instance using name as dictionary name. Two files will be created: .dat and .idx. keysize gives the maximal size of the strings used as index keys. min_recordsize gives a hint to the expected typical size of (key,value) pickles: all records will have at least this size. To open the dictionary in recovery mode, pass a keyword recover=1. Then run .recover() and reopen using the normal settings. If autocommit is true the cache control will do an automatic .commit() whenever the transaction log overflows. If validate is true, the dictionary will run a validation check after having successfully opened storage and index. RecreateIndexError or RecoverError exceptions could be raised in case inconsistencies are found. maxcachesize defines the maximum size of the in-memory transaction cache. It defaults to MAXCACHESIZE if not given. XXX Save keysize in storage file header. """ basemethod(self, name, keysize=keysize, min_recordsize=min_recordsize, readonly=readonly, recover=recover, autocommit=autocommit, validate=validate, index=BeeIndex.BeeFixedLengthStringIndex, maxcachesize=maxcachesize) freeze(BeeFixedLengthStringDict) ### class BeeStringDictCursor(BeeBaseDictCursor): """ Cursor for BeeStringDict and BeeFixedLengthStringDict instances. """ def read_key(self): """ Reads the key object from the dict to which the cursor currently points. """ return self.key def read_item(self): """ Reads the (key, value) item object from the dict to which the cursor currently points. """ return self.key, self.dict[self.key] freeze(BeeStringDictCursor) ### def AutoRecover(Class,*args,**kws): """ Wrapper that runs recovery whenever needed. This can still fail, but at least many "normal" failures can be handled this way automatically. """ try: d = apply(Class,args,kws) return d except BeeStorage.RunRecoveryError: pass except RecreateIndexError: pass except RecoverError: pass # Open in recovery mode log(SYSTEM_ERROR, 'Database "%s" is corrupt; trying recovery...',args[0]) new_kws = kws.copy() new_kws['readonly'] = 0 new_kws['validate'] = 0 #new_kws['lock'] = 1 new_kws['recover'] = 1 d = apply(Class,args,new_kws) # Run recover & close d.recover() del d # Reopen in original mode d = apply(Class,args,kws) log(SYSTEM_WARNING, 'Successfully recovered the database "%s"',args[0]) return d ### if __name__ == '__main__': import sys print 'Testing BeeStringDict...' s = BeeStringDict('test-BeeStringDict') s['Marc'] = 'Sveta' s['Thorsten'] = 'Petra' s['Christian'] = 'Leesa' s.commit() print 'Testing BeeDict...' d = BeeDict('test-BeeDict') d['Marc'] = 'Sveta' d['Thorsten'] = 'Petra' d['Christian'] = 'Leesa' d.commit() d['Marc'] = 'Sveta' * 100 d.commit() del d,s print 'Testing iteration...' d = BeeDict('test-BeeDict') d['Marc'] = 'Sveta' d['Thorsten'] = 'Petra' d['Christian'] = 'Leesa' d.commit() i = 0 for k,v in d.iteritems(): print '%s: %s' % (k,v) i = i + 1 assert i == 3 if sys.version[:3] >= '2.2': i = 0 for k,v in d: print '%s: %s' % (k,v) i = i + 1 assert i == 3 del d print 'Works.' egenix-mx-base-3.2.7/mx/BeeBase/BeeIndex.py0000664000175000017500000000116312133021405020151 0ustar lemburglemburg""" BeeIndex - A B++ Tree implementation. Based on source code published in: SORTING AND SEARCHING ALGORITHMS: A COOKBOOK by THOMAS NIEMANN Portland, Oregon email: thomasn@jps.net home: http://members.xoom.com/thomasn/s_man.htm Copyright (c) 1998-2000, Marc-Andre Lemburg; mailto:mal@lemburg.com Copyright (c) 2000-2013, eGenix.com Software GmbH; mailto:info@egenix.com See the documentation for further information on copyrights, or contact the author. All Rights Reserved. """ # Import the needed parts from the C extension from mxBeeBase import * from mxBeeBase import __version__ egenix-mx-base-3.2.7/mx/BeeBase/BeeStorage.py0000664000175000017500000010676512133021406020525 0ustar lemburglemburg# -*- coding: latin-1 -*- """ BeeStorage - Flatfile data storage facility. Definitions: block: minimal amount of storage allocated in the file record: Header + content + padding Copyright (c) 1998-2000, Marc-Andre Lemburg; mailto:mal@lemburg.com Copyright (c) 2000-2013, eGenix.com Software GmbH; mailto:info@egenix.com See the documentation for further information on copyrights, or contact the author. All Rights Reserved. """ import cPickle,cStringIO,struct,exceptions,types,sys,marshal,re import FileLock,Cache from mx import Tools freeze = Tools.freeze from mx.Log import * # Blocksize used to improve alignment of records (NOTE: Don't change this # parameter, or the implementation will corrupt any existing storage file # using a different block size !!! BLOCKSIZE = 32 # Default minimal record size (must be multiple of BLOCKSIZE) MINRECORDSIZE = BLOCKSIZE # File header size to allocate. This should be large enough to # hold data for future enhancements. FILEHEADERSIZE = 1024 # Start of data according to the storage layout STARTOFDATA = FILEHEADERSIZE + BLOCKSIZE # Cache management (only used if caches are enabled) MAXCACHESIZE = 1000 CACHELIMIT = 1000 # Codes ID = '\333' VALID = '\370' OLD = '\373' # Special markers; these are written to the first block after the # fileheader (position FILEHEADERSIZE) and must have equal size COLD_MARKER = '*cold***' HOT_MARKER = '*hot****' # States HOT = 1 COLD = 0 # Output debugging info _debug = 0 ### Errors class Error(exceptions.StandardError): """ Baseclass for Errors related to this module. """ pass class RunRecoveryError(Error): """ Error raised in case the storage file is damaged and recovery could be possible. """ pass ### Classes def dummy_callback(old_position,new_position,raw_data): """ This callback is used by the .collect() method to inform an object using the storage facility of a change in record layout. raw_data contains the raw data contents of the record. Use storage.decode() to decode it. """ return class BeeStorage: """ Baseclass for flatfile data storage facilities. This class implements a simple database which can store and restore objects. The database is designed to be easily reconstructable in case something goes terribly wrong. File layout: [Fileheader] (length FILEHEADERSIZE) [Marker block] (length BLOCKSIZE) STARTOFDATA: ...[datablock] (length mulitple of BLOCKSIZE)... Datablocks layout: [ID] (1 byte) [length of whole block] (4 bytes, little endian) [CODE] (1 bytes) [raw data] XXX Todo: * Implement write cache. * Add more recovery tools """ version = '1.2' # Version number; increase whenever # the internal layout changes filename = None # Filename of the file used file = None # Open file EOF = 0 # EOF address filelock = None # BeeStorageLock instance in case # locking is enabled min_recordsize = MINRECORDSIZE # Minimal record size caching = 0 # Is caching enabled ? readonly = 0 # Operate in read-only mode ? state = None # State in which the file is in is_new = 0 # Was the file created by the # constructor, or just reopened ? # Caches header_cache = None record_cache = None def __init__(self,filename,lock=0,cache=0,min_recordsize=MINRECORDSIZE, readonly=0,recover=0): """ Create an instance using filename as data file. If lock is true, a filelock will be enabled until the file is closed. cache controls whether to enable a cache or not (should only be used where OS level caches are not available). min_recordsize can be set to have all records be padded to at least this size (might reduce overhead due to reallocation of records that have become too small for updates). readonly can be set to true to have existing files opened in read-only mode. Writes will then cause an IOError, opening a non-existing file in read-only mode will too. Opening the storage file in recover mode will disable some of the checks normally done. This flag should only be used if a previous normal opening failed with a hint to run recovery. """#' self.readonly = readonly if _debug: log.call(SYSTEM_DEBUG) # Adjust min_recordsize if min_recordsize < MINRECORDSIZE: min_recordsize = MINRECORDSIZE if min_recordsize % BLOCKSIZE != 0: min_recordsize = (min_recordsize / BLOCKSIZE + 1) * BLOCKSIZE self.min_recordsize = min_recordsize # Lock the file if lock: self.filelock = filelock = FileLock.FileLock(filename) # This may raise a FileLock.Error if recover: try: filelock.lock() except FileLock.Error: filelock.remove_lock() filelock.lock() else: filelock.lock() # Open it: # first try for an existing file, then revert to creating a new one if readonly: mode = 'rb' else: mode = 'r+b' self.filename = filename try: # Existing file self.file = file = open(filename,mode) file.seek(0,2) self.EOF = EOF = file.tell() except IOError,why: if readonly: raise IOError,why # New file: write header and state marker if _debug: log(SYSTEM_INFO,'Creating a new storage file %s' % filename) self.file = file = open(filename,'w+b') self.write_fileheader(file) self.mark(COLD) EOF = file.tell() if EOF % BLOCKSIZE != 0: # pad to block boundary file.write(' '*(BLOCKSIZE - EOF % BLOCKSIZE)) EOF = file.tell() self.EOF = EOF self.is_new = 1 else: self.is_new = 0 # Create caches if cache: self.caching = 1 self.header_cache = header_cache = Cache.Cache(MAXCACHESIZE) self.record_cache = record_cache = Cache.Cache(MAXCACHESIZE, CACHELIMIT) self.caches = [header_cache,record_cache] # Sanity check if EOF % BLOCKSIZE != 0 and not recover: raise RunRecoveryError,\ 'storage file is damaged; run recovery ! (EOF=%i)' % EOF # Check mark file.seek(FILEHEADERSIZE) marker = file.read(len(COLD_MARKER)) if marker != COLD_MARKER and \ not (readonly and marker == HOT_MARKER) and \ not recover: raise RunRecoveryError,\ 'storage file is damaged; run recovery ! (marker=%s)' % \ repr(marker) # Set state to COLD self.state = COLD # Header check self.check_fileheader(file) def mark(self,state=HOT, HOT=HOT,HOT_MARKER=HOT_MARKER,COLD_MARKER=COLD_MARKER, FILEHEADERSIZE=FILEHEADERSIZE): """ Change the state of the storage file. The state indicates whether the file has changed in a way that needs proper shutdown (HOT). An unchanged or stable file should be marked COLD. This is an internal interface, use .start/end_transaction() for externally setting the state. """ if self.state == state: return if self.readonly: raise Error,'storage is read-only' if _debug: log(SYSTEM_DEBUG, 'Marking the file "%s": %s', self.filename,((state==HOT)*'HOT' or 'COLD')) self.file.seek(FILEHEADERSIZE) if state == HOT: self.file.write(HOT_MARKER) else: self.file.write(COLD_MARKER) self.state = state def recover(self,callback=dummy_callback): """ Run recovery. callback is a call back function that will be called for every valid record and has the same signature as the one used for .collect(). To open a storage file in recovery mode, pass the keyword 'recover=1' to the constructor. """ self.collect(callback,recover=1) def start_transaction(self, HOT=HOT): """ Start a sequence of storage manipulation commands. Note that every write/free command automatically starts a transaction sequence. """ self.mark(HOT) def end_transaction(self, COLD=COLD): """ End a sequence of storage manipulation commands. """ self.mark(COLD) def write_fileheader(self,file): """ Write a new header to the open file. Changes the file's position: moves the file's position to the start of the data area. """ # The fileheader (also see header_check below): fileheader = ('%s version %s\n' 'blocksize %i\n' % (self.__class__.__name__, self.version, BLOCKSIZE)) # Pad to FILEHEADERSIZE bytes length fileheader = fileheader + \ ' '*(FILEHEADERSIZE - len(fileheader) - 1) + '\n' # Make sure we start on a block boundary if FILEHEADERSIZE % BLOCKSIZE != 0: fileheader = fileheader + '\0' * \ ((FILEHEADERSIZE / BLOCKSIZE + 1) * BLOCKSIZE \ - FILEHEADERSIZE) file.seek(0) file.write(fileheader) header_check = re.compile(('(\w+) version ([\w.]+)\n' 'blocksize (\d+)\n')) def check_fileheader(self,file): """ Checks the file header and verifies that all parameters are the same. Changes the file's position. """ file.seek(0) fileheader = file.read(FILEHEADERSIZE) if len(fileheader) != FILEHEADERSIZE: raise Error,'header is damaged: "%s"' % fileheader m = self.header_check.match(fileheader) if m is None: raise Error,'wrong header format: "%s"' % fileheader name,version,blocksize = m.groups() if name != self.__class__.__name__: raise Error,'wrong storage class: %s (expected %s)' % \ (name,self.__class__.__name__) if version > self.version: raise Error,'wrong version: %s (expected %s)' % \ (version,self.version) if int(blocksize) != BLOCKSIZE: raise Error,'blocksize mismatch: %s (expected %i)' % \ (blocksize,BLOCKSIZE) def encode(self,object, StringType=types.StringType,type=type): """ Encode an object giving a string. Since the records are usually larger than the data size, it is important to store the string length or at least mark the end of data in some way. This method must be overloaded in order to implement an encoding schemes. """ raise Error,'.encode() needs to be overridden' def decode(self,data): """ Decode a string giving an object. The data string may well be larger than the string returned by the .encode method. This method will have to determine the true length on its own. This method must be overloaded in order to implement an encoding scheme. """ raise Error,'.decode() needs to be overridden' def clear_cache(self): """ Clears the caches used (flushing any data not yet written). """ if self.caching: #self.flush() Tools.method_mapply(self.caches,'clear',()) def close(self, COLD=COLD,method_mapply=Tools.method_mapply): """ Flush buffers and close the associated file. """ if self.caching: self.flush() method_mapply(self.caches,'clear',()) if self.file: # Mark COLD if not self.readonly and self.state != COLD: self.mark(COLD) del self.file if self.filelock: self.filelock.unlock() del self.filelock def __del__(self): if _debug: log(SYSTEM_DEBUG,'del %s',self) if self.file: self.close() def flush(self): """ Flush all buffers. """ return def __repr__(self): return '<%s instance for "%s" at 0x%x>' % (self.__class__.__name__, self.filename, id(self)) def read_header(self,position, unpack=struct.unpack,BLOCKSIZE=BLOCKSIZE, ID=ID,headertypes=(OLD,VALID)): """ Read the header located at position and return a tuple (record size, statebyte, data area size). statebyte is one of the state constants. record size is the total number of bytes reserved for the record, data area size the number of bytes in its data area. self.file is positioned to point to the records data area. May raise errors if the position is invalid. """ if self.caching: header = self.header_cache.get(position,None) if header is not None: self.file.seek(position+6) return header # Sanity check if position % BLOCKSIZE != 0 or \ position > self.EOF: raise Error,'invalid position: %i' % position # Read and check header file = self.file file.seek(position) header = file.read(6) if not header: raise EOFError,'position %i is beyond EOF' % position if header[0] != ID or header[5] not in headertypes: raise Error,'invalid header at %i: %s' % \ (position,repr(header)) recordsize = unpack(' EOF: raise ValueError('cannot write to position outside file: ' 'position=%r, EOF=%r' % (position, EOF)) # Calculate recordsize, if not available if recordsize is None: recordsize = datalen + 6 if recordsize < self.min_recordsize: recordsize = self.min_recordsize if recordsize % BLOCKSIZE != 0: recordsize = (recordsize / BLOCKSIZE + 1) * BLOCKSIZE datasize = recordsize - 6 # Write the header + data + padding file.seek(position) file.write(''.join( (ID,pack('= EOF: self.EOF = file.tell() if _debug: log(SYSTEM_DEBUG,'New EOF = %i',self.EOF) if _debug: log(SYSTEM_DEBUG,'Data written to position %i: %r', position, data) return position def read_record(self,position,rtype=VALID): """ Read the raw data from record position having the given rtype (defaults to VALID). An error is raised in case the record does not have the correct rtype or is not found. The data is not decoded; caches are not used. """ file = self.file recordsize,rt,datasize = self.read_header(position) if rtype != rt: raise Error( 'record has wrong type, expected %r, found %r' % (rtype, rt)) # Read the record return file.read(datasize) def free(self,position, OLD=OLD,HOT=HOT): """ Deletes an already written record by marking it OLD. The next garbage collection will make the change permanent and free the occupied space. """ if self.state != HOT: self.mark(HOT) file = self.file file.seek(position + 5) file.write(OLD) if self.caching: Tools.method_mapply(self.caches,'delete',(position,)) # Aliases delete = free __delitem__ = free def write(self,obj,position=None): """ Write the encoded object to the file and return the file address where the data was written. If position is given or None, the object is assumed to be replacing an old data record. The implementation tries to use the old record for writing the new data. In case it doesn't fit the old record is marked OLD and another record is used. The return value will be different from the passed position in the latter case. Note: Records that are marked OLD will be collected by the next run of the garbage collection. """ data = self.encode(obj) if position is None: position = self.EOF position = self.write_record(data,position) if self.caching: self.record_cache.put(position,data) return position # Aliases append = write add = write def __setitem__(self,position,obj): self.write(obj,position) def read(self,position, NotCached=Cache.NotCached): """ Load an object from the file at the given position. """ if self.caching: data = self.record_cache.get(position,NotCached) if data is not NotCached: return self.decode(data) file = self.file recordsize,rtype,datasize = self.read_header(position) data = file.read(datasize) if self.caching: self.record_cache.put(position,data) return self.decode(data) # Alias __getitem__ = read def find_records(self,start=STARTOFDATA,stop=sys.maxint): """ Scans the data file for valid, old and invalid records and returns a list of positions to these records. start and end can be given to narrow down the search space. """ EOF = self.EOF if start < STARTOFDATA: start = STARTOFDATA if stop > EOF: stop = EOF position = start valid = [] invalid = [] old = [] read_header = self.read_header old_append = old.append valid_append = valid.append invalid_append = invalid.append # Adjust position to next block boundary if position % BLOCKSIZE != 0: position = (position / BLOCKSIZE + 1) * BLOCKSIZE while position < stop: try: recordsize,rtype,datasize = read_header(position) except Error: # No record found at that position: try next block position = position + BLOCKSIZE invalid_append((position,BLOCKSIZE)) continue if rtype == VALID: valid_append((position,recordsize)) elif rtype == OLD: old_append((position,recordsize)) position = position + recordsize return valid,old,invalid def statistics(self): """ Scans the data file for valid, old and invalid records and returns a tuple valid, old, invalid indicating the number of bytes for each class of records/blocks. """ position = STARTOFDATA EOF = self.EOF valid = 0 invalid = 0 old = 0 read_header = self.read_header while position < EOF: try: recordsize,rtype,datasize = read_header(position) except Error: # No record found at that position: try next block position = position + BLOCKSIZE invalid = invalid + BLOCKSIZE continue if rtype == VALID: valid = valid + recordsize elif rtype == OLD: old = old + recordsize position = position + recordsize return valid,old,invalid def collect(self,callback=dummy_callback,recover=0): """ Collect garbage that accumulated since the last .collect() run. Garbage is collected by moving all VALID records to the beginning of the file and then truncating it to the new (reduced) size. Collecting will be done without using the cache. It also starts a new transaction (if not already marked HOT). For every move operation the callback is called with arguments (old_position,new_position,raw_data). raw_data is the raw data stored in the record that is being moved; use .decode[_key] to decode it. If recover is true, the callback is called for all valid records, not just the ones that are actually being moved. """ file = self.file if recover: # Don't trust self.EOF in recover mode file.seek(0,2) EOF = file.tell() if EOF % BLOCKSIZE != 0: # Pad file with \0 bytes padsize = BLOCKSIZE - EOF % BLOCKSIZE file.write('\0' * padsize) EOF = EOF + padsize else: EOF = self.EOF read_header = self.read_header source = dest = STARTOFDATA # Temporarily disable caching caching = self.caching if caching: self.clear_cache() self.caching = 0 # Mark HOT if self.state != HOT: self.mark(HOT) # First align all VALID records to the "left" while source < EOF: try: recordsize,rtype,datasize = read_header(source) except Error: # Unallocated space: skip source = source + BLOCKSIZE if not recover: log(SYSTEM_WARNING, 'Skipping unallocated/misaligned block at %i',source) continue if rtype == VALID: if source != dest: # Move record (informing caller via callback) file.seek(source) record = file.read(recordsize) file.seek(dest) file.write(record) callback(source,dest,record[6:]) elif recover: # Inform caller of all valid records found file.seek(source) record = file.read(recordsize) callback(source,dest,record[6:]) dest = dest + recordsize elif rtype == OLD: # Skip record pass # Process next record source = source + recordsize # Everything behind dest is now considered free space try: file.truncate(dest) except AttributeError: # Truncate is not supported: clear out the remaining # space to make it invalid and continue processing as if # the file were truncated. file.seek(dest) while dest < EOF: file.write('\0'*BLOCKSIZE) dest = dest + BLOCKSIZE EOF = dest if EOF % BLOCKSIZE != 0: if recover: # In recover mode we simply pad the file to align # the file's end to BLOCKSIZE file.seek(EOF) padsize = BLOCKSIZE - EOF % BLOCKSIZE file.write('\0' * padsize) EOF = EOF + padsize else: raise Error,'EOF malaligned after collect()' self.EOF = EOF # Reenable caching if caching: self.caching = 1 def backup(self,archive=None,buffersize=8192): """ Issues a backup request using archiveext as filename extension. The archive file is a simple copy of the current storage file. If no name is given self.filename + '.backup' is used. buffersize gives the size of the buffer used for copying the file. """ if not archive: archive = self.filename + '.backup' archfile = open(archive,'wb') # Mark HOT if self.state != HOT: self.mark(HOT) # Copy the file file = self.file file.seek(0) while 1: buffer = file.read(buffersize) if not buffer: break archfile.write(buffer) archfile.close() ### class PickleMixin: """ Pickle encoding. Uses binary pickles. """ def encode(self,object, dumps=cPickle.dumps): """ Encode an object giving a string. This method can be overloaded in order to implement other encoding schemes. """ return dumps(object,1) def decode(self,object, loads=cPickle.loads): """ Decode a string giving an object. This method can be overloaded in order to implement other encoding schemes. """ return loads(object) class BeePickleStorage(PickleMixin,BeeStorage): """ Flatfile data storage facility for pickleable objects. """ freeze(BeePickleStorage) ### class MarshalMixin: """ Marshal encoding. """ def encode(self,object, dumps=marshal.dumps): """ Encode an object giving a string. This method can be overloaded in order to implement other encoding schemes. """ return dumps(object) def decode(self,object, loads=marshal.loads): """ Decode a string giving an object. This method can be overloaded in order to implement other encoding schemes. """ return loads(object) class BeeMarshalStorage(MarshalMixin,BeeStorage): """ Flatfile data storage facility for marshallable objects. """ freeze(BeeMarshalStorage) ### class BeeKeyValueStorage(BeeStorage): """ Flatfile storage for key,value pairs. keys and values must be pickleable object. The main difference between this class and the base class is that keys are readable separately from the values, e.g. values can be multi-MB big and are only read if this is really requested. NOTE: The .en/decode methods are NOT used. Uses binary pickles. """ key_cache = None def __init__(self,*args,**kws): apply(BeeStorage.__init__,(self,)+args,kws) if self.caching: self.key_cache = key_cache = Cache.Cache(MAXCACHESIZE,CACHELIMIT) self.caches.append(key_cache) def write(self,key,value,position=None, dumps=cPickle.dumps): """ Write key and value to position. Returns the position under which the record was stored. If position is None, the implementation chooses a new one. """ # Pack key and value into two separate pickles data = dumps(key,1) + dumps(value,1) # Write the record if position is None: position = self.EOF position = self.write_record(data,position) if self.caching: self.record_cache.put(position,data) self.key_cache.put(position,key) return position # Aliases append = write add = write def decode_key(self,raw_data, loads=cPickle.loads): """ Decode the key part of a raw data record field. """ return loads(raw_data) def read_key(self,position, load=cPickle.load,NotCached=Cache.NotCached): """ Load the key part of an object from the file at the given position. """ if self.caching: key = self.key_cache.get(position,NotCached) if key is not NotCached: return key # Position file reader and only read the key part self.read_header(position) key = load(self.file) if self.caching: self.key_cache.put(position,key) return key def read(self,position, load=cPickle.load,StringIO=cStringIO.StringIO, NotCached=Cache.NotCached): """ Load an object from the file at the given position and return it as tuple (key,value). """ if self.caching: record = self.record_cache.get(position,NotCached) if record is not NotCached: file = StringIO(record) key = load(file) data = load(file) return key,data # Read the header and position the file over the data area recordsize,rtype,datasize = self.read_header(position) if self.caching: record = file.read(datasize) file = StringIO(record) key = load(file) data = load(file) self.record_cache.put(position,record) self.key_cache.put(position,key) else: file = self.file key = load(file) data = load(file) return key,data # Alias __getitem__ = read def read_value(self,position): """ Load the value part of an object from the file at the given position. """ return self.read(position)[1] freeze(BeeKeyValueStorage) ### tests if __name__ == '__main__': f = BeePickleStorage('test-BeePickleStorage.dat',cache=1,lock=1) l = [1,'blabla','Hi there',2.3434,4+7j] + range(1000) k = map(f.write,l) m = map(f.read,k) if l != m: print 'BeePickleStorage:\n' print 'Results differ:' print 'orig:',l print 'rest:',m else: print 'BeePickleStorage works.' valid,old,invalid = f.find_records() print ' %i valid records, %i old, %i invalid' % (len(valid),len(old),len(invalid)) print ' r cache hits:',f.record_cache.hits,' misses:',f.record_cache.misses print ' h cache hits:',f.header_cache.hits,' misses:',f.header_cache.misses print ' rewrite...' l = [1,'blabla','Hi there',2.3434,4+7j] + ['x'*100] * 1000 k = map(lambda value,oldpos: f.write(value,oldpos),l,k) m = map(f.read,k) if l != m: print ' Results differ:' print ' orig:',l print ' rest:',m valid,old,invalid = f.find_records() print ' %i valid records, %i old, %i invalid' % (len(valid),len(old),len(invalid)) print ' r cache hits:',f.record_cache.hits,' misses:',f.record_cache.misses print ' h cache hits:',f.header_cache.hits,' misses:',f.header_cache.misses print ' collect...' def callback(old,new,data,k=k): index = k.index(old) k[index] = new f.collect(callback) m = map(f.read,k) if l != m: print ' Results differ:' print ' orig:',l print ' rest:',m valid,old,invalid = f.find_records() print ' %i valid records, %i old, %i invalid' % (len(valid),len(old),len(invalid)) print ' r cache hits:',f.record_cache.hits,' misses:',f.record_cache.misses print ' h cache hits:',f.header_cache.hits,' misses:',f.header_cache.misses print g = BeeKeyValueStorage('test-BeeKeyValueStorage.dat',cache=1) d = {} for i in range(256): d[str(i)] = 'As char: %s, as number: %i, octal: %s' %\ (repr(chr(i)),i,oct(i)) l = [] for k,v in d.items(): l.append(g.write(k,v)) for addr in l: k,v = g.read(addr) if d[k] != v: print 'BeeKeyValueStorage:\n' print 'Mismatch for "%s": "%s"' % (k,v) print 'BeeKeyValueStorage works.' valid,old,invalid = g.find_records() print ' %i valid records, %i old, %i invalid' % (len(valid),len(old),len(invalid)) print ' r cache hits:',g.record_cache.hits,' misses:',g.record_cache.misses print ' h cache hits:',g.header_cache.hits,' misses:',g.header_cache.misses print del f,g egenix-mx-base-3.2.7/mx/BeeBase/COPYRIGHT0000664000175000017500000000400107315370421017414 0ustar lemburglemburg --------------------------------------------------------------------- COPYRIGHT NOTICE --------------------------------------------------------------------- Copyright (c) 1997-2000, Marc-Andre Lemburg; mailto:mal@lemburg.com Copyright (c) 2000-2001, eGenix.com Software GmbH; mailto:info@egenix.com All Rights Reserved. This software is protected by copyright and other intellectual property laws and by international treaties. It may only be used under the conditions and terms of the eGenix.com Public License Agreement. You should have received a copy of the eGenix.com Public License Agreement with this software (usually in the file LICENSE located in the package's or software's main directory). Please write to licenses@egenix.com to obtain a copy in case you should not have received a copy. --------------------------------------------------------------------- Parts of this package are based on an ANSI C implementation of a B+Tree implementation written by Thomas Nieman, Portland, Oregon. The files in question are btr.c and btr.h which were heavily modified for the purpose of inclusion in this package by the above author. The original files were extracted from btr.c -- an ANSI C implementation included in the source code distribution of SORTING AND SEARCHING ALGORITHMS: A COOKBOOK by THOMAS NIEMANN Portland, Oregon email: thomasn@jps.net home: http://members.xoom.com/thomasn/s_man.htm From the cookbook: Permission to reproduce this document, in whole or in part, is given provided the original web site listed below is referenced, and no additional restrictions apply. Source code, when part of a software project, may be used freely without reference to the author. --------------------------------------------------------------------- egenix-mx-base-3.2.7/mx/BeeBase/Cache.py0000664000175000017500000001515111564510674017515 0ustar lemburglemburg""" Cache - Generic cache implementation Copyright (c) 1998-2000, Marc-Andre Lemburg; mailto:mal@lemburg.com See the documentation for further information on copyrights, or contact the author. All Rights Reserved. """ import sys from mx import Tools # Weight table MAXLOCALITY = 256 _weights = [1] * MAXLOCALITY # maximal history size (must somewhat larger than MAXLOCALITY) HISTORYLIMIT = 2 * MAXLOCALITY # Cut goal that has to be reached (self.max_cachesize * float(DENOM / NOM)) DENOM = 3 NOM = 4 # Print debugging info ? _debug = 0 # Init globals class _modinit: import math l = Tools.frange(0,1,MAXLOCALITY) for i,factor in Tools.irange(l): _weights[i] = int((math.exp(factor) - 1.0) * 8192) if _debug: print i,'. weight =',_weights[i] del _modinit ### Classes class NotCached: """ A singleton that can be used in conjunction with the .get() method of Cache. It behaves like None. """ def __nonzero__(self): return 0 __len__ = __nonzero__ NotCached = NotCached() ### class Cache: """ Tunable cache implementation The following parameters influence the cache behaviour: - max_cachesize: the cache will be cut smaller when this limit is reached - max_elementsize: elements with size greate than this limit will not be cached - locality: these many elements will be looked at in the hit statistics to determine how important a specific entry is """ data = None # Dict. of id:value cache entries put_history = None # Reverse list of id puts; last is most # recent access; contains id for each access get_history = None # Reverse list of id gets; last is most # recent access; contains id for each access def __init__(self,max_cachesize=200, max_elementsize=4096, locality=50): self.max_cachesize = max_cachesize self.max_elementsize = max_elementsize if locality > MAXLOCALITY: raise ValueError,'locality must be <= %i' % MAXLOCALITY self.locality = locality self.cachesize = 0 self.cuts = 0 self.misses = 0 self.hits = 0 self.data = {} self.put_history = [] self.get_history = [] def cut(self, NOM=NOM,DENOM=DENOM): """ Force a cut of the cache's contents. This will make room for at least one new entry. """ if _debug: print ' Cutting down cache size...' cachesize = self.cachesize # Cut the cache down to the entries in recent get history newdata = {} known_key = newdata.has_key data = self.data for id in self.get_history[-self.locality:]: if known_key(id): continue try: newdata[id] = data[id] except KeyError: pass cachesize = len(newdata) if _debug: print ' Size after cut to recent history:',cachesize # Check if cachesize * NOM >= self.max_cachesize * DENOM: # Calculate weights d = {} weights = _weights d_get = d.get for i,id in Tools.irange(self.get_history[-self.locality:]): if not known_key(id): continue d[id] = d_get(id,0) + weights[i] # Delete all entries left from median ranking = Tools.sortedby(d.items(),1) if _debug: print ' Ranking:',ranking for id,weight in ranking[:len(d)/2]: if _debug: print ' Deleting',id,'with weight =',weight del newdata[id] # Check cachesize = len(newdata) if cachesize * NOM >= self.max_cachesize * DENOM: # Ok, so the smart way didn't work... if _debug: print ' Did not work, going the hard way...' newdata.clear() cachesize = 0 self.data = newdata self.cachesize = cachesize self.cuts = self.cuts + 1 def clear(self): """ Clear the cache. """ self.cachesize = 0 self.data = {} self.history = [] def get(self,id,default=NotCached, HISTORYLIMIT=HISTORYLIMIT): """ Get a value from the cache or return default if it is not cached. """ item = self.data.get(id,None) if item is None: self.misses = self.misses + 1 return default # Add "hit" self.get_history.append(id) if len(self.get_history) > HISTORYLIMIT: del self.get_history[-self.locality:] self.hits = self.hits + 1 return item def put(self,id,value,sizeof=Tools.sizeof, HISTORYLIMIT=HISTORYLIMIT): """ Add a value to the cache or update an existing one. """ size = sizeof(value) if size > self.max_elementsize: return # Adding a new entry: make sure there is room if not self.data.has_key(id): if _debug: print ' Adding',id self.cachesize = cachesize = self.cachesize + 1 if cachesize > self.max_cachesize: self.cut() self.data[id] = value self.put_history.append(id) if len(self.put_history) > HISTORYLIMIT: del self.put_history[-self.locality:] # Aliases add = put update = put def delete(self,id): """ Delete an entry from the cache. It is not an error, if the entry is not currently in the cache. """ try: del self.data[id] except KeyError: pass # Aliases remove = delete ### if __name__ == '__main__': c = Cache(10,100,locality=17) i = 1 while 1: print 'Round',i,c.cachesize,c.cuts,c.misses,c.data.keys(); i = i + 1 c.put(1,2) c.get(1) c.get(1) c.put(5,2) c.get(5) c.put(2,2) c.put(3,2) c.get(2) c.get(3) c.put(2,3) c.put(3,'x'*200) c.get(2) c.get(3) c.get(2) c.put(4,2) c.get(4,2) c.get(4,2) c.get(4,2) # Add noise c.put(i,'x') c.put(i * 2,'x') c.put(i * 3,'x') c.get(i) egenix-mx-base-3.2.7/mx/BeeBase/ExitFunctions.py0000664000175000017500000000440407234070452021305 0ustar lemburglemburg""" Central Registry for sys.exitfunc()-type functions Copyright (c) 1997-2000, Marc-Andre Lemburg; mailto:mal@lemburg.com See the documentation for further information on copyrights, or contact the author. All Rights Reserved. """ import sys,traceback __version__ = '0.1' class ExitFunctionDispatcher: """ Singleton that manages exit functions. These function will be called upon system exit in reverse order of their registering. """ def __init__(self): """ Install the dispatcher as sys.exitfunc() """ self.exitfunc_list = [] if hasattr(sys,'exitfunc'): self.old_exitfunc = sys.exitfunc else: self.old_exitfunc = None sys.exitfunc = self.exitfunc def exitfunc(self, write=sys.stderr.write,print_exc=traceback.print_exc, stderr=sys.stderr): """ This is the exitfunc that we install to dispatch the processing to the registered other functions """ for f in self.exitfunc_list: try: f() except: write('Error while executing Exitfunction %s:\n' % f.__name__) print_exc(10,stderr) # Now that we're finished, call the previously installed exitfunc() if self.old_exitfunc: self.old_exitfunc() def register(self,f,position=0): """ Register f as exit function. These functions must not take parameters. - position = 0: register the function at the beginning of the list; these functions get called before the functions already in the list (default) - position = -1: register the function at the end of the list; the function will get called after all other functions """ if position < 0: position = position + len(self.exitfunc_list) + 1 self.exitfunc_list.insert(position,f) def deregister(self,f): """ Remove the function f from the exitfunc list; if it is not found, the error is silently ignored. """ try: self.exitfunc_list.remove(f) except: pass # Create the singleton ExitFunctions = ExitFunctionDispatcher() egenix-mx-base-3.2.7/mx/BeeBase/FileLock.py0000664000175000017500000003032712251400174020167 0ustar lemburglemburg#!/usr/local/bin/python -u """ FileLock - Implements a file lock mechanism that does not depend on fcntl. Copyright (c) 1997-2000, Marc-Andre Lemburg; mailto:mal@lemburg.com Copyright (c) 2000-2013, eGenix.com Software GmbH; mailto:info@egenix.com See the documentation for further information on copyrights, or contact the author. All Rights Reserved. """ from mx.Misc.ExitFunctions import ExitFunctions import os,exceptions,time # Version __version__ = '1.0' # Get fully qualified hostname def _fqhostname(hostname=None,default=('localhost','127.0.0.1')): """ Returns fully qualified (hostname, ip) for the given hostname. If hostname is not given, the default name of the local host is chosen. Defaults to default in case an error occurs while trying to determine the data. """ try: import socket except ImportError: return default try: if hostname is None: hostname = socket.gethostname() ip = socket.gethostbyname(hostname) hostname = socket.gethostbyaddr(ip)[0] except socket.error: return default else: return hostname,ip hostname,ip = _fqhostname() ### Errors class Error(exceptions.StandardError): pass # Backward compatibility: FileLockError = Error ### File lock using symbolic links class SymbolicFileLock: """ Implements a file lock mechanism. The base class implements the locking mechanism using symbolic links. Note that since the mechanism does not use file system function calls this may not always work in the desired way. The lock is acquired per process, not per thread. Instancevariables: filename - file the lock applies to lockfilename - name of the lock file locked - indicator if the lock is in position (1) or not (0) """ # Do we hold the lock ? locked = 0 # Lock timeout in seconds (0 = never) locktimeout = 0 def __init__(self, filename): self.filename = filename self.lockfilename = filename + '.locked' self.locked = 0 # Avoid deadlocks ExitFunctions.register(self.unlock) def __del__(self): if self.locked: self.unlock(0) try: ExitFunctions.deregister(self.unlock) except: pass def lock(self,timeout=500,sleeptime=0.0001, sleep=time.sleep,Error=Error,time=time.time,error=os.error, hostname=hostname,ip=ip): """ Try to lock the file for this process, waiting timeout ms if necessary. Raises an exception if a timeout occurs. Multiple locking by the same process is not an error. Note that a non existent path to the file will also result in a timeout. If the lock is held by a process running on our host, a timeout will first invoke a check of the locking process. If it is not alive anymore, the lock is removed and granted to the current process. """ if self.locked: return lockfilename = self.lockfilename lockinfo = '%s:%i' % (hostname,os.getpid()) stop = time() + timeout * 0.001 # Localize these for speed islink=os.path.islink makelink=os.symlink readlink=os.readlink while 1: # These are rather time-critical if not islink(lockfilename): try: makelink(lockinfo,lockfilename) except error: # A non existent path will result in a time out. pass else: break sleep(sleeptime) if time() > stop: # Timeout... check whether it's a valid lock if not self.validate_lock(): continue host, locking_pid = self.lock_info() raise Error,\ 'file "%s" is locked by process %s:%i' % \ (self.filename, host, locking_pid) self.locked = 1 def unlock(self,sleeptime=0.0001, unlink=os.unlink,Error=Error,sleep=time.sleep,error=os.error): """ Release the lock, letting other processes using this mechanism access the file. Multiple unlocking is not an error. Raises an exception if the lock file was already deleted by another process. After having unlocked the file the process sleeps for sleeptime seconds to give other processes a chance to acquire the lock too. If the lock will only be used every once in a while by the process, it is safe to set it to 0. """ if not self.locked: return self.locked = 0 try: unlink(self.lockfilename) except error: raise Error,'file lock "%s" is already gone' % \ self.lockfilename # Give other processes a chance too if sleeptime: sleep(sleeptime) return 1 def has_lock(self): """ Returns the current state of the file lock: 1 - a lock exists, 0 - no lock exists. Note that in case a lock exists, this lock is not checked for being valid. """ if self.locked: return 1 if os.path.islink(self.lockfilename): return 1 return 0 def lock_info(self): """ Returns a tuple (hostname, PID integer) indicating the host and process id currently holding the lock. An Error is raised if no lock exists. """ try: host,locking_pid = os.readlink(self.lockfilename).split(':') except os.error,why: raise Error,\ 'file "%s" could not be locked: %s' % \ (self.filename,why) locking_pid = int(locking_pid) return (host, locking_pid) def validate_lock(self): """ Validates a lock on the file and return 1 for a valid lock, 0 for an invalid one. Note that it is only possible to check for valid locks which are owned by the same host. This method removes any invalid locks it may find. An Error is raised if no lock exists. """ # Check for lock timeouts if self.locktimeout: ctime = self.lock_time() if ctime < time.time() - self.locktimeout: # Timed out try: os.unlink(self.lockfilename) except os.error, why: # We probably don't have proper permissions. return 1 else: return 0 # Check process host, locking_pid = self.lock_info() if host != hostname: # Ok, then compare via IPs other_ip = _fqhostname(host, default=('???','???'))[1] samehost = (ip == other_ip) else: samehost = 1 if samehost: # Check whether the locking process is still alive try: os.kill(locking_pid, 0) except os.error, why: # It's gone without a trace... try: os.unlink(self.lockfilename) except os.error: # We probably don't have proper permissions. pass else: return 0 return 1 def lock_time(self): """ Returns a Unix time value indicating the time when the current lock was created. An Error is raised if no lock exists. """ try: ctime = os.lstat(self.lockfilename)[9] except os.error, why: raise Error,\ 'could not read file lock info for "%s": %s' % \ (self.filename, why) return ctime def remove_lock(self, unlink=os.unlink): """ Remove any existing lock on the file. """ self.locked = 0 try: unlink(self.lockfilename) except: pass def __repr__(self): return '<%s for "%s" at %x>' % (self.__class__.__name__, self.filename, id(self)) # Alias BaseFileLock = SymbolicFileLock ### File lock using directories class DirectoryFileLock(BaseFileLock): """ This class implements a file lock mechanism that uses temporary directories for locking. See FileLock for documentation of the various methods. Thanks to Thomas Heller for this idea ! """ def lock(self,timeout=500,sleeptime=0.0001, sleep=time.sleep,Error=Error,time=time.time,error=os.error, hostname=hostname,ip=ip,mkdir=os.mkdir): if self.locked: return lockfilename = self.lockfilename lockinfo = '%s:%i' % (hostname,os.getpid()) stop = time() + timeout * 0.001 while 1: # These are rather time-critical try: mkdir(lockfilename) except error: # A non existent path will result in a time out. pass else: break sleep(sleeptime) if time() > stop: # Timeout... check whether it's a valid lock if not self.validate_lock(): continue raise Error,\ 'file "%s" is currently locked' % self.filename self.locked = 1 def unlock(self,sleeptime=0.0001, rmdir=os.rmdir,Error=Error,sleep=time.sleep,error=os.error): if not self.locked: return self.locked = 0 try: rmdir(self.lockfilename) except error: raise Error,'file lock "%s" is already gone' % \ self.lockfilename # Give other processes a chance too if sleeptime: sleep(sleeptime) return 1 def has_lock(self): if self.locked: return 1 if os.path.isdir(self.lockfilename): return 1 return 0 def validate_lock(self): # Check for lock timeouts if self.locktimeout: ctime = self.lock_time() if ctime < time.time() - self.locktimeout: # Timed out try: os.rmdir(self.lockfilename) except os.error, why: # We probably don't have proper permissions. return 1 else: return 0 return 1 def lock_info(self): """ Locking info is not available for DirectoryFileLocks. A TypeError is raised in case this method is called. """ raise TypeError, \ '.lock_info() is not implemented for DirectoryFileLocks' def lock_time(self): try: ctime = os.stat(self.lockfilename)[9] except os.error, why: raise Error,\ 'could not read file lock info for "%s": %s' % \ (self.filename, why) return ctime def remove_lock(self, rmdir=os.rmdir): self.locked = 0 try: rmdir(self.lockfilename) except: pass # For b/w compatibility DirectyFileLock = DirectoryFileLock ### Generic file lock mechanism if hasattr(os, 'symlink'): FileLock = SymbolicFileLock else: FileLock = DirectoryFileLock def _test(): #lock = SymbolicFileLock('test-lock') #lock = DirectoryFileLock('test-lock') lock = FileLock('test-lock') starttime = time.time() try: for i in range(10000): print '%i\r'%i, lock.lock() time.sleep(i/100000.0) lock.unlock() #time.sleep(i/100000.0) except KeyboardInterrupt: lock.unlock() totaltime = time.time() - starttime print '%i lock/release cycles in %5.2f sec. = %i cycles/sec.' % \ (i, totaltime, i / totaltime) if __name__ == '__main__': _test() egenix-mx-base-3.2.7/mx/BeeBase/LICENSE0000664000175000017500000001075307620177404017146 0ustar lemburglemburg________________________________________________________________________ EGENIX.COM PUBLIC LICENSE AGREEMENT VERSION 1.1.0 ________________________________________________________________________ 1. Introduction This "License Agreement" is between eGenix.com Software, Skills and Services GmbH ("eGenix.com"), having an office at Pastor-Loeh-Str. 48, D-40764 Langenfeld, Germany, and the Individual or Organization ("Licensee") accessing and otherwise using this software in source or binary form and its associated documentation ("the Software"). 2. License Subject to the terms and conditions of this eGenix.com Public License Agreement, eGenix.com hereby grants Licensee a non-exclusive, royalty-free, world-wide license to reproduce, analyze, test, perform and/or display publicly, prepare derivative works, distribute, and otherwise use the Software alone or in any derivative version, provided, however, that the eGenix.com Public License Agreement is retained in the Software, or in any derivative version of the Software prepared by Licensee. 3. NO WARRANTY eGenix.com is making the Software available to Licensee on an "AS IS" basis. SUBJECT TO ANY STATUTORY WARRANTIES WHICH CAN NOT BE EXCLUDED, EGENIX.COM MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, EGENIX.COM MAKES NO AND DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF THE SOFTWARE WILL NOT INFRINGE ANY THIRD PARTY RIGHTS. 4. LIMITATION OF LIABILITY EGENIX.COM SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF THE SOFTWARE FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS (INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF BUSINESS PROFITS, BUSINESS INTERRUPTION, LOSS OF BUSINESS INFORMATION, OR OTHER PECUNIARY LOSS) AS A RESULT OF USING, MODIFYING OR DISTRIBUTING THE SOFTWARE, OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO THE ABOVE EXCLUSION OR LIMITATION MAY NOT APPLY TO LICENSEE. 5. Termination This License Agreement will automatically terminate upon a material breach of its terms and conditions. 6. Third Party Rights Any software or documentation in source or binary form provided along with the Software that is associated with a separate license agreement is licensed to Licensee under the terms of that license agreement. This License Agreement does not apply to those portions of the Software. Copies of the third party licenses are included in the Software Distribution. 7. General Nothing in this License Agreement affects any statutory rights of consumers that cannot be waived or limited by contract. Nothing in this License Agreement shall be deemed to create any relationship of agency, partnership, or joint venture between eGenix.com and Licensee. If any provision of this License Agreement shall be unlawful, void, or for any reason unenforceable, such provision shall be modified to the extent necessary to render it enforceable without losing its intent, or, if no such modification is possible, be severed from this License Agreement and shall not affect the validity and enforceability of the remaining provisions of this License Agreement. This License Agreement shall be governed by and interpreted in all respects by the law of Germany, excluding conflict of law provisions. It shall not be governed by the United Nations Convention on Contracts for International Sale of Goods. This License Agreement does not grant permission to use eGenix.com trademarks or trade names in a trademark sense to endorse or promote products or services of Licensee, or any third party. The controlling language of this License Agreement is English. If Licensee has received a translation into another language, it has been provided for Licensee's convenience only. 8. Agreement By downloading, copying, installing or otherwise using the Software, Licensee agrees to be bound by the terms and conditions of this License Agreement. For question regarding this License Agreement, please write to: eGenix.com Software, Skills and Services GmbH Pastor-Loeh-Str. 48 D-40764 Langenfeld Germany egenix-mx-base-3.2.7/mx/BeeBase/Makefile.pkg0000664000175000017500000000147707003370104020347 0ustar lemburglemburgall: compile install # Compile target. This should setup the package and compile it # into a state ready for installation. compile: cd mxBeeBase; \ if ! test -f Makefile; then $(MAKE) -f Makefile.pre.in boot; fi;\ $(MAKE) # Install target. This should do the install step. If the package # needs no further installation step (i.e. the extension is not # needed by other extension modules), then you can leave this target # blank. install: # ??? # Test target. Should do some testing of the extension. Writing # something like 'ok' or 'works' and the end of a successful run. test: cd mxBeeBase; \ python test.py # Documentation target. Use this to have the documentation for # an extension generated at the user. doc: # ??? # Cleanup before distributing the package # distclean: cd mxBeeBase; \ $(MAKE) distclean egenix-mx-base-3.2.7/mx/BeeBase/README0000664000175000017500000000021607315370421017005 0ustar lemburglemburgPlease see the documentation in the Doc/ subdirectory for further information on installation and usage. Marc-Andre Lemburg, mal@lemburg.com egenix-mx-base-3.2.7/mx/BeeBase/__init__.py0000664000175000017500000000061212133021407020225 0ustar lemburglemburg""" BeeBase - B++ Tree database construction kit Copyright (c) 2000, Marc-Andre Lemburg; mailto:mal@lemburg.com Copyright (c) 2000-2013, eGenix.com Software GmbH; mailto:info@egenix.com See the documentation for further information on copyrights, or contact the author. All Rights Reserved. """ # Import packge's base file from BeeBase import * from BeeBase import __version__ egenix-mx-base-3.2.7/mx/BeeBase/showBeeDict.py0000664000175000017500000000237607315370422020711 0ustar lemburglemburg#!/usr/local/bin/python -O """ Tool to show BeeDict data. """ import cPickle,sys,os from BeeDict import * import CommandLine from mx import Log def show(name,keys,all=0,levels=3): print 'Records from BeeDict "%s"' % name print d = BeeDict(name, readonly=1) if all: keys = d.keys() for key in keys: print_record(d,key,levels) print d.close() def print_record(d,key,levels=3): print 'Record for key "%s"' % str(key)[:50] try: data = d[key] except: print 'Failed to load.' return try: data = cPickle.loads(data) except: pass Log.print_obj(data,indent=' ',levels=levels) class ShowRecord(CommandLine.Application): header = 'Tool for displaying BeeDict records' synopsis = '%s [options] dictname keys...' options = [CommandLine.ArgumentOption('-d','Display depth',3), CommandLine.SwitchOption('-a','Show all records') ] def check_files(self,files): if len(files) < 1: self.help('Missing arguments') sys.exit(1) def main(self): show(self.files[0],self.files[1:],self.values['-a'],self.values['-d']) if __name__ == '__main__': ShowRecord() egenix-mx-base-3.2.7/mx/DateTime/0000755000175000017500000000000012251446113016327 5ustar lemburglemburgegenix-mx-base-3.2.7/mx/DateTime/Doc/0000755000175000017500000000000012251446113017034 5ustar lemburglemburgegenix-mx-base-3.2.7/mx/DateTime/Doc/mxDateTime.pdf0000640000175000017500000332711712133263264021605 0ustar lemburglemburg%PDF-1.4 % 2472 0 obj << /Linearized 1 /O 2476 /H [ 1539 1427 ] /L 896591 /E 278469 /N 63 /T 847031 >> endobj xref 2472 24 0000000016 00000 n 0000000854 00000 n 0000001218 00000 n 0000001373 00000 n 0000002966 00000 n 0000003368 00000 n 0000003399 00000 n 0000004183 00000 n 0000004226 00000 n 0000004470 00000 n 0000005683 00000 n 0000005707 00000 n 0000006184 00000 n 0000006430 00000 n 0000006664 00000 n 0000006872 00000 n 0000023213 00000 n 0000034965 00000 n 0000038057 00000 n 0000038265 00000 n 0000038345 00000 n 0000038731 00000 n 0000001539 00000 n 0000002942 00000 n trailer << /Size 2496 /Info 2462 0 R /Encrypt 2474 0 R /Root 2473 0 R /Prev 847019 /ID[<8855eb7537a4c644e860460f14b83278>] >> startxref 0 %%EOF 2473 0 obj << /Type /Catalog /Pages 2465 0 R /Metadata 2463 0 R /Outlines 395 0 R /OpenAction [ 2476 0 R /XYZ null null null ] /PageMode /UseNone /PageLabels 2461 0 R /StructTreeRoot 2475 0 R /PieceInfo << /MarkedPDF << /LastModified (DO0\)$)>> >> /LastModified (DO0\)$) /MarkInfo << /Marked true /LetterspaceFlags 0 >> >> endobj 2474 0 obj << /Filter /Standard /R 3 /O (WЏ X_7!_ֵb{J.4@K@) /U (^{-W$ra\\) /P -12 /V 2 /Length 128 >> endobj 2475 0 obj << /Type /StructTreeRoot /RoleMap 452 0 R /ClassMap 455 0 R /K [ 1862 0 R 1863 0 R 1864 0 R ] /ParentTree 2124 0 R /ParentTreeNextKey 93 >> endobj 2494 0 obj << /S 1566 /T 1757 /O 1870 /L 1886 /C 1902 /Filter /FlateDecode /Length 2495 0 R >> stream ¬Zpjhm J )V>N"P@0Q)9Zy͠esmMyQ# uΒ 1AFx|cq\:/&wnaƒen+pƍ_Xz^SA:&2ly^[`f`1dug >9ɮM]|.}_L63k 1 `$m9B=)t1crLbWʕGġ6+}`{~j>M:v,2͔\A.V3.&#{;K )u°[a=XITjy4c)H.z$JLYwtK2d疸6S*:# oFt)Ft[Pkbf=z4~oوړq?N=0?']T}F,1{h^fXeŽX_|#O;똯('F75̖'LEoCe?٤VN?}pÂ|tY]<Ԟaʫ}~hHYsѳ=pY jjQw To8I-ḥfCKݏ}woF;B2A|I|QDvbX@#;_h'!SFu<CmMM`>3dA᱒p~$01&Q0IЏG@ި$Q#{T0jvضer_DP#%*0 DDRAC~" W%?O ]_BȦUTqDq0~>g#dbmg6>%Q gw27pCb~ks~T.[-cݸ:Tyե-[uӨ}Q_Z^4nAէY)0+m*~ԧ-9jTQk h5_F[usʌHP4&EF%6~mPdq /Lr=c{BtGZB.QV޹D29[0AycK=3N̩c^܃btobVg R.H^tR B`;=PC -9d[雛YA$!2V$sKĶ(,In-6U3"cbփ[&ߎ$0F#GK&)gO8(DI E`8Q5 endstream endobj 2495 0 obj 1281 endobj 2476 0 obj << /Type /Page /Parent 2464 0 R /Resources << /ColorSpace << /CS2 2479 0 R /CS3 2477 0 R >> /XObject << /Im1 2493 0 R >> /ExtGState << /GS2 2491 0 R /GS3 2490 0 R >> /Font << /TT3 2478 0 R /TT4 2483 0 R /TT5 2486 0 R >> /ProcSet [ /PDF /Text /ImageC ] >> /Contents 2481 0 R /Thumb 2331 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 0 >> endobj 2477 0 obj /DeviceGray endobj 2478 0 obj << /Type /Font /Subtype /TrueType /FirstChar 32 /LastChar 233 /Widths [ 274 329 278 769 0 757 714 144 329 329 494 833 274 329 274 281 549 549 549 549 549 549 549 549 549 549 326 326 0 833 0 441 0 604 587 669 764 502 491 734 759 282 282 602 461 905 741 821 539 821 574 512 530 743 625 958 541 519 606 329 0 329 0 500 0 474 556 472 556 498 291 503 556 250 250 500 250 854 552 552 556 556 356 434 311 552 479 766 463 486 475 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 274 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 833 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 498 ] /Encoding /WinAnsiEncoding /BaseFont /HLMBDO+ZapfHumanist601BT-Demi /FontDescriptor 2480 0 R >> endobj 2479 0 obj [ /ICCBased 2492 0 R ] endobj 2480 0 obj << /Type /FontDescriptor /Ascent 962 /CapHeight 687 /Descent -272 /Flags 32 /FontBBox [ -167 -273 1106 963 ] /FontName /HLMBDO+ZapfHumanist601BT-Demi /ItalicAngle 0 /StemV 94.019 /XHeight 0 /FontFile2 2487 0 R >> endobj 2481 0 obj << /Filter /FlateDecode /Length 2482 0 R >> stream N1/jKfym`iō}ei‘DXP6DDŭ423X|WJtf+@$VePEkڂ>ŅkŚy4-<+?g_)rG Y%?3sWyNFx e1aGq#Y-^ }ި4ݕ"p'Faek B9־\jP*uv0\8oM2c endstream endobj 2482 0 obj 1131 endobj 2483 0 obj << /Type /Font /Subtype /TrueType /FirstChar 32 /LastChar 121 /Widths [ 274 0 0 0 0 0 0 0 0 0 0 0 0 0 274 0 0 549 549 549 549 549 549 549 549 0 0 0 0 0 0 0 0 608 597 660 757 515 502 743 0 329 0 0 476 891 740 828 587 0 613 544 549 731 0 971 573 547 0 0 0 0 0 0 0 516 0 484 604 535 0 514 593 291 0 0 299 891 593 567 0 0 382 427 338 592 0 0 472 478 ] /Encoding /WinAnsiEncoding /BaseFont /HLMBCL+ZapfHumanist601BT-Ultra /FontDescriptor 2484 0 R >> endobj 2484 0 obj << /Type /FontDescriptor /Ascent 961 /CapHeight 687 /Descent -284 /Flags 32 /FontBBox [ -167 -284 1186 962 ] /FontName /HLMBCL+ZapfHumanist601BT-Ultra /ItalicAngle 0 /StemV 166.043 /XHeight 0 /FontFile2 2488 0 R >> endobj 2485 0 obj << /Type /FontDescriptor /Ascent 951 /CapHeight 0 /Descent -273 /Flags 96 /FontBBox [ -220 -274 1143 951 ] /FontName /HLMBDM+ZapfHumanist601BT-UltraItalic /ItalicAngle -15 /StemV 0 /FontFile2 2489 0 R >> endobj 2486 0 obj << /Type /Font /Subtype /TrueType /FirstChar 32 /LastChar 32 /Widths [ 274 ] /Encoding /WinAnsiEncoding /BaseFont /HLMBDM+ZapfHumanist601BT-UltraItalic /FontDescriptor 2485 0 R >> endobj 2487 0 obj << /Filter /FlateDecode /Length 16247 /Length1 23600 >> stream 9zQO0Liƾen-āEoC#9y )Te~Umw+u(z)hcȍXu*aMŖr|V#p=3}`^]=E5$1t dg(.Àȕ?K-;m`羐}.;a% K(ߏb;[!"_ܤzv$8[OB/FNzPk0k$L$j--9y-oFŪ(!A08{ y6p>gD $!G"X^QL) r3hkiw:RT . u,~QɖtƤ!A 4sԖ T[%S],WQ%iH"1gӑڰvA6|~软/.}B\K++9'J F$3";3ȾTv+z F,T'UG9nŎjJXl[di\\~J}O9FK ו QEGPQjX,NH8@zGH ,mғ?-?]Ӻvgɷϳ"w`Gʧ[(Sl%Hޠ$[P,u"Lx-$]w|~Zo*tu]-(_yZkߊ88Q%8i2%h^}LEyYAH!K>0ew΁7zV]\of233+Q4-sD0ځ@hR9.7*}]ȶHK/xJϧW4jB>phьD 5t ęZaCgh)72ҫ?=Щ|q2QU8Jĝ{_/]DsU~+>ss$ S Cęe.W.>%[JE$_aN4mL\gf%I9m3LGXye4< /}?BrD`uۣ6ccPy L~blիvrQ&^ 2^@QkuKM$CO=QVδ/NeV`B~KR\jVCj5DZ@nrlzՁowny{ldQ8>&t2o iKi伇d_'qg[ b~\hɍ2xW&+,`>jzLЎ䫺cvIJIh=[浒Xkd@M lU@t\E۴tinܕ@!8dmFlk&C|4.5Og"JoR9-=%!QB: k-G"rbիjq-f =o ΈJ~H(lYqP6-%)1_i%I_7ij!uG {fE@eI/1b5|uxq^t=bB?K-c餀kǡ^RYQކhj+&RoYKlSFԟdSڎoE"[>g<!Tƍ{=h3[1"X Qnߐ19Jj\-yz{pb8$)7tIVe%h:X#Zcb q>T&ԪuYx8u`Z 铙4I>CY(2Cy&hLZH)E@[Kg6SgX4@f ~Qzֶ̞۟k<ȹsi˝ N1wF eu~RD;K-WEq hs ǒx m~Kia|RѶ;.xZ#T_6}hTX9h P=)o0q{u#Ȉߌp;6jIȵJ|oTLyd r @dvu1fQ\h]epuC_v/SnxPH D2G 谻7b-M@^Qc3gfA-Q8 XM`}cM ~'X !ܜT]5$̿?$Nc_` nR0GF)?wstZ=Iel*Fh˯܄rre O fNBMf!a8JCPxyF];x)?v"Wr*/DR-+ɾ;m̋3].x4-9<-qi[c.q 'Tzw䦸..Ìz{|N#,AOme޲[vMA{&i×2$ U&ApH2:!$F4jTa}jG(9+tzؤQ|V]=(U[^a¦DD&25B~qor@ye4~&L)"vۙ1)ʮ6cMN+щCI\nۦOΡ[1v<#dzlnahl~d~2k<8{ <5V /«dW,G;b}H*k."$ =C,U܀+tb62sU6C`Vgk5"lڊZS5EPUK9(|=:2"vNt X&+.(fC@wz#FI<=VkfYbAw^ui n M.Zw~铡_I3 7;{ Rr!EhWo-xL) {nkF̆}V 'WDHd۶$H7tH E o2e"OH|y Br(f",oʪ`q*ʝA9kkvueę?63(xȰI IN ]?ԩ^z<1dykzsܬ ݌uQk>r[@!|n6{.^מU)^BHLuC*.;q޽}!j?Dv䪬W{s72TW5TFkĞ"=U#K *-(Z!5"Hqs[2#HyT,K6*,ηD}Ll@r>]5! ^*E P#|Ov*#)աDl)EYn_SxZDWpecA(;<}+|\jl͊Ѿ(3\@0۱D.jM*x8vbfЦj>Xp@u웥3:"iV~S=8+̽f0KOBhOVoEzz Aϖ (\lƍ2 hvQC|}m=FuUo([В'XJymΪ(6fZ+zn*J8,]j`$,ZGmu.(gćl3NJ[h6xv{WL)ʲ^m"z2ʈx#iԋ'D4vhScY7KQJ. 6*Cq 1r ǯIsHjIqY~[^ňZݻ-@{oÓg0qð`fWkw;b3Iec& 9/*}bP3Yl@9i!3)uNSJ/`J55!zOYx0:-؆v5 &kiB s݆ơ·g;r,6tDf@9U@ƾf֮!n~n Zrbp $R sΟ]5 !$ NpHk+'d2 v9m]`9(7{2HЈDtcWY,%Ӭ#A>I-X>dxX&;Ӊ{:l ,pNAE#5u&9e6]ʁ-ٺRx.xÌz9z j]jM#⟡OyS.,(T"FONNɭ+~ orc7O<#oYqMNj[-8E6Xn˳`L 21sլѝ Fi/Tߥց*(!e§pcw= /bv@<RiEhRb~\93]:s? zKdɿ昡v3`wKǐ+]+ :v&+b G)_5d `Dt]:q[뻮8yhV(LJ̛TM!q2w!~1[mB&Yգ_A@` gVJ|zp  9Ci{,:Kh@1m3W 1V'Ld%*iNNT".hpZ^]yM+b'Qiv0e\v+Vh;5M>F=z}>.$nM kvҭdpsfz2 oo y>%FJ [ӂWwmʓ_FtKs ``_Av7 ΄V呐 c*`\L.@SE>o6i|=44I0&[NxofƮM :br9uL?1E4eXtvx!Խp×p,Xsfn(F"W,~M4GcdKwh }XuPgFS"WratQm^8j>8n(H S(Lwk~瀛8J@a)wt~ހJ7HE٬\UΪ_0v]p6;6n r ~lDW݈Nfm Fs8]v).i1Ϝ;Nn:h|Kn (=G?mRXr+5Ĕzp'C6e!+ʏtQ؃DuneVUN&0+i90'׆[BG셤nAwv,IVb3]Hɶ gm &$~Zݜ]jo±Fg/wnrV<@۰1PȍK:Im:s. d02ݚPR)ibD]p@?Gb {=LŭR6 jm6YY< iT>aǸkiׯ.ԋv/@(tG"-B`L;RJ&ؠ py7 8˪?nBf7&AygU1D -T\q"̌Kk|Iܰ_+eQ+y,A~o\axRT2˪%r"& IZF") ZZA2o!*)+3AɔJ_R*rh~ywӘ5(!zAK7p˃\/2R s7o˖~UE< ϟHʭsΠR: z~p%/qHFE0>*= bSgƈ_3[!DVb{^ {ʔM9}cD˸Px.0vln*4{vPX2N`\6:1/`Tm]q$'&li+rx)CN1gu e?C#X]l*G討mLM S{Ndu#: IvL-Sޝנq9B:vˍ Kւ+#ˠs ys{dŘ$saS5gts/l ˜ n2*7 EAh" >nu B5+26d`H #K$>ڬh+V+@^/4-/G⍳)_S;<(# .|$*)nQa2Sdմ7.ȏhJcl &v o_8f<(o IMtgGu&Z'_!1E%e[vAid}غᬉk>9Tӫ\VoGXρ-F+ifJJD?\GКD.Pl'nMPn-kvJUzس<9i_ |#0p[CC3۷9ڥ/zǤ'V*_z+߱z2 pRfVh} yRA|^'Y( R1)0xdbc 4n(Wo|Z:QޔpA)DbQl3JI{eߩ"HhI(C_U5$qDn ^Tߔx؀ к %&{21˵A?9v ;Zgo7hxX'l ծWFo@=tOoyr|pg#X&C,R_jDfçlF+ΰ'Դ>\WΏ@9NXC=n:Ph}]J2ITy[챊X9!Ƈ_3r?K]?iqqۀWOФ]bQv ݞB^TֵѬE3MMT 9wPJ%S+CURN& ōWm>Hx3z/RYvnªyNMoY%^vKE""y/mѲŎ=@3jij.g.+(ٗr?+"H٠c cK+rYiQ,MɚH=!q9ƴCce`bi| (,Rna/,sGQlE@W NruX^S+ʕEC"g'˹*s| ]vޘ<)UxI?{Q^Ѻj~ݴ^}iӯ*qܰͦ;YpEzMh;D͊U}1w.&8,C7ICA#b|=Prb-\^O"v\b n$".ۤ _G!Crde=+o5,ؼX ڹ,'O/5YZt>csxJa8 IV'~˗ɧArPJ4i_o:&݂麆`Q8A̧wEG\ϡIfcf@suj7_GCDuJ \5&$ݴXP{]`\67v5kAUjFè>4 ޻@iRh)װ:L'}jH,[ *}\b| +S\K/cu}Dz čwTg?EM”Oub#l N2lƄ0K!ޡ|ڔ;(aѨ'P Xd+fě hz]2 /-z2N$>6 AHN4rɅA_/ {,,e*MP̞4TCh]LT$A`o2XJi}H@j AAHoW&Tc/;_Hncqu(7LWLauWڨ|_-2͉#zi O֝~&k9#WزߍȽ'GO-L`/6DaJ$gP(Q4ϠhhzG3egПYϱC&pMփJ8EM+LgHpdrSn[\pAכ1k%mQܲ>(Q [l{" .\^ UdU6vQŗ!3ZUlUߡZQCa3+F΄O 0ksD(KͣSީBmvjn z[%.;VxC01."mid&lطt ўP2:IWS=L ~ QԿ\p|o&Hg|4oW5XD.GtO_xN~/8{$f§jp.Z)/3|zك#$Ḛ7LMޫxAm0>,؋vwڏvə_5f?c#)_ɋ%Az)Z 1fJ<-7~_҂Ÿ;'bhn T{A:ѫ Ȍ926VPÄ T=&G"Wy}=!nyQSjGfFh,+X刵AB+VCB"N/L䢜̔CLDKiJ\hY>FŊc||]t@ c~b+̙q P\ɝ щۅ: hq}Dμ10.9Ag ]ġ,L!GhKm>5 Pdbȧ~"SЁdyX7AhyoaZa  }%%nbqXm{Zo@qn/ڶ`ɚ cr3=0#<9ecx^J:2Fxu"UV2@^>(L8[ߒvZ1EhYky!R7. <U?Q3/%* y= ˊ&=)Jy.Nֲ<2ƈ0 0mHtA%,L]yPg>0Ӂs6`?Og_ v\}1h#Y+C5 3KNDj2 'hl&Wq^o-:h2 _~v q^AC{&ىx+pO p%(RaYrmI) uWo?Ԍ- >qfпZė:<8*CpTW0!V*R:^GzqW3;JqTDC\A_ ujf[j5=`/>ozqe\%Y/E1.'&}_zH%M&"RRsGGQJ  o9i~-J۬tPbTyb-+n`9'I ²Wƕ R5u{{iH*1t/^=NHWb4yz.Z/<K*0>e~ȼ3pf,h@M/T`R {"\ECVdp/e4erq"Fܰt^㢕u C"hz&zR˜ 3(hi٪pdnx#-kWR45cBXM3k@#~UdKKVvi. :OoWkdԈ%"I,3NԮΌ{ !(#'D֨ܮm8_ xSz#+|j -Y4;Y)Qrpj]Jg,u *=+C' *&\ 㾿 =*_ѽX8 -l54 )`kLiԍ>J,(~٩\Θݐ!gx,HjOuӤtyK˥U9E0&F5/h8zeD9w 9p,!1׼w7vY҅^5nD C/q;؁V L?U`ȑ l=kTiy[q\f|KT7|]MȢ?ZQ}S2C `b>rX!þ;0V>F@æo|\|'hZ'Ǔg0mg~")M`Hkʏ ;S}jƆȇGucUtO"*o`i|QS\%TdJ ~Hy `|YßL9Yn3gӉ {y= 5pXϴ2"׊ޔocuJE䵥wҌ8%UܽF1m#xICq`,™/zd1ReHyڭ[iR&9'<d֚OqGթV#e;g|yX-L9A;N9P&mG]kUq6oyh}a6_,] 5w(J*PÐ8:&\@f's-˨:gAm69d+mOc=Y2\<f- 6|x#zc;LT y +m?oدlƁj9bDݱ)TNͭz($vq FO1C$\Qp~hbV[$S U2SgENVZ˩tJu!'xJ@fC5ͳ5/&t yT,%̗} P~ cKqsR4șع5;Q5Ѹ2| W%4;?_9:+w^kG5;LfHSX!lCf;?zJ%a+dѽV%!l}л h7Qw \ԑ5H*lכިsfq)&Jx9I'4`*zjkpgӎތ`,)- ٯ;l og`_Ga$gZjUM (od% 4m2j%9+S5:+4h;?7[>$sL^8CE{=2m5DRç* Z8beD U}WyOavȡtC<|QPz"rn!vs6-ruzjH5]̴"U;CS&jpV7DM=r>6('OiN(> @,pfPY%rvFoRmy.{zLд+u}~*4GIn-!,Kn E*-Bn&fHȑyX/_;9~,?G>m{[5>"ՌP'YG=5A1-vQ9)*J@>j$Ŀ(%9WU8:J#uSg0 pGQϋwCwEyKO|\e$xWQG^L9yuxjmAH(3ݤ٘dw_ݡxFd!4 5B t^,e\3^'doA[t־[b> stream 2o#V.O P٠LPLR ӕbUgҿI9B^LQ'̇ga1bxEA",ms a~ug D98K<qX ګP0sgZ# $g? n5yYav 'OlV^Y}=[ӯsw~ y"֑ޞӌ^bm98gkz5aEdA[E HAP"{*<6G*bm1溇_R !b}= /ȉ|!GEm\zI"2`Fo:b~-',}>ko\n9Uڼ ̮R7Q`y?R6O**ן,aEsn~S0ek!O 錫hfZsOh⮒?PQ歩nL(tܲpmғnSI?.p%I@-HV#G"VZ LwDpgr*zje:gGRB݇wcFuoEܠ#$*Bh ݄mC ,;Mz|nPϢW$6hMSs|5SA~"=^xvX{I 7K7+C>8cMߑT#H—hqn )d5FA o#y=Ǡ>E]I&LDiopPz t/*F́<oDEJq\`U%2:E u-Nh۷*,j8"KPp1`W4 Ցm ^-]i#llY࢑дW@vGK}#7)f%-!җaLMlok-G94 _ѣlPEWĬG279w&wE% Q]HD*6?zidd_iA>A(E5s^"% ' *?[ |=*)SuM?{2-M f$ß+d&ejLaKD6[GFgXy|FIH:2gT NpQ4k u%T*'aXӷ59q\}¢ lcyHAR>. 8gI &NT/FD2=ET `?ُ5ВqUW861|3q$$@'ݪv(۫799w? k?'{+ EZ99&;alS8u#1aR]. W_)ಕ`w9@NfyQ/yQ aXP0غk1q sn0pLh!`KS? G(1ܯ7RDq;!@P l2ԵZ?W@l6-Z%vpc~mt"*-K+dEؗ6xq+و|p9/N @=M'm/L2r2Ela4i7F2-B}5n c\( 4g4a 1a2W(G$Pj o9 - Y[a$??^eAIrh.Nm8@!ж5q(LN'0̠\=[{P%ZH5:74܈±>=Ⱥ$>E7{ l vGku>L=>;-zТ2~Na]BAe†RW [HǐX$#mYxMP :+PTK*gb > ^|o7YR2pv쑉zyc" aa,Ks!]F_šgi2H 7-$dmy#%S7) *@k1k]!>+ )gg F_K$E@_A+M?¯:RҢi+pզ&oIYNfؚeSQ4jX}[Z0 ݇so}w`C47=n1ØiaB@)kP=af-e'Kz$1ʍj*k;p)! V?:([o@6;ɤ?4 X,Jt u%+8 #+BU| dq 5EQ#jeÊ3TnQVLYPTTv!!6Ѕ3hyV%‹a(EX+\TbEYk։%X%FY `c궽HJŵnr6]u];!bŠEAK@d}V1]Q4eh!V-?p #쌩j&H:s5S2L#H %= tnV8Rv $W9 g l+ ߈(tY.9"[> $hbBw_':$j>td/RlH{Q:fC vQh8r0b |(ݲKR" iӜC@ZSN#'e*]`BΆ%^B_T)gdK-{ vL=sۦ7J1ϝi#UxMD,&G@vRS䜣u1K,I]HRujeL M!yI#]P Hk-.tE9HA)JEUz7nc -%e#BʡZa>he MXfP0K^js[k|Yvt%6ʤzW{<X\\èHxE,&tUA϶ʄ\uGc[R5c|<ȜrCp8aL84?A:N6D*6-Gt ^g[ С{h,0TWH+#2ѭcE GRuSb:w" 2QeαzO;97϶7m:C15t[?OVEãT5]"EfnZtӨa{{ИG;TJ̸ 9UJ'R=+.6,*^_>϶: *w^a3ؾ|42=:¿ciS^gh~kxLAp,jK^x[Psq@2P1=HO&0H1 'r:Vrk< $́Hi^Ʈ~C]|#/X6eyyfR- l=i{4vu) 雪zjnjSisr q p>وҺ.1bOUZHɛKNBLv{ BxjtK;|5#:I5K+[`ڳξt= ?~+ L:8ִ @)7 GL^;"Js]oDvWK|o݋xhY16ғ[B@dzk] M!>bNWc?aFΔX1A`o{BE^7~\kUޞ3*|#}F)kRAp UcP1i][u*C pȚl0l=~%ٹ5'v“]+C. %˫ck)ǘY/G!3@Wn^5=쫼Gʗ@("*$T v `\ Jhr[96̾1\U^-Ʊ̘G=SMN&C[{']sSn^Ӈ*_9͢C]^lAA0K/v۽=zAC_t5_v3.c=5Jm!&^@'1"VV}Lo@I7W6o2iTR-NrǴ>TemD,h7AHL-ǂX‘Izz]~$+$ȺCI/#ayF;z2 %)Xԩ+ř 9æph!ӧÃ˗S3I eaPh75sԲr/ׅ ƹ+Q+5hA#e>{}R}‡$|9? YA؁"HjCz6[P r`kWv_Ь h?y$ cn}_D@@sP};m:=u)… 5KXJ`\8z[tw57݄-C{0Ng / T7&YՈ(8O Opoh2> Ävڠ:Wyb9VJ ]>jŠU',Qg/;lUNeRM-IwfΒ  hUytGȢ1$jHWycv6-nsMmix5ջ$Z"t)DjbXзckA ~RȠTAX*o8 t2BVlo Cfoh?Y(pfxB`qüGbB0_0 )őהgLaNN +=pZ}{Pf"=ܼ5j7Dc"۞l`j XF 1/XtzVlW٨LG#@MɭTk# #Ru[DcC7aIF!WdD1AAy1ˤmU+# nF`wٷɑf!Ah嘙߃TcCӻiCjP:a1iC.42VH* JT9'2~gyX%P$ҵ:ewy;8Ùa='夀\~J;yVKHcĊD7j!/м{Bmp6$Y-?'&fO# Fji=-bS#q4KL|rֺ?i0^;&pD]­ om#J>VAmn;ݞE>ܹT W`KxaXvcrY9ZI(QVO{ 몱,1^ƾwdE79;V&?*=i.V3J1hIf_&}{ ߵ~Sc%~Ӗq "@GVl:Cǂ;Fߌ_u _wP^1OK;odx9<ܯC=DcHW8coY]{s#'V%l_l΄bUQ8nH@u}Erё&( . HqbNaFݛ%ެWf6)93u+̾s0LGϹYg[:Bld`.v|1Q2T2-a McrnjU_?MM (Pmn`|]ܼ5y lZ8+4Hv(8(XCw8箸.wS&djC] DGx -t{`-mv} %M^Ͼ%v?/J>tۯg_{qOʎڀ-P,g'{DQOttʎ2тuBaԩw>EQLr !2CYꖓN(9殝GrtόxP*9~7#2Z+gB`YHMhȪˋ2;^LmCEF4՟І-O0%.}QgQgx1 P[g/WY@ZsL[|!?;,KH"aSͯeg@0[C]0lfh6j4D)S>(W₺</$/}Ww08*%&Rdw[ޣ>70[]%x.; z\ -K(ˈv٬8qN ͟J`,n;-7&JIS2=B:nɞ(ޮêZ]Z:Z9)zհTe%2&oѵzȦqq>D  䉦CfI{UL=2d''!J|VGǥ`)dxH U~k;['ypcQ?Ij×k5Z{`_& IY4_ $5hAɶ̃C-$PJfȢѲ]\Nx9YC3 nR#g Pn> ?ڤ0IqL;ݖJq稲an~9[wmK> vesqկH:7oO(ѱrM~Ê{xFwႬR31 hnD4cKFw_{v=S a&UZvN wە`+n`!G)#ˆ Y[49_jƄpfr+*@P\ӗ̛a$%a{wx E?ŃM{E"a'abqx7$eqGbZ6Ҭf#RhMn;L׋ݭ^%$YTf U9 6"'OZijd K{Tye,<8ٯӮ \ifZp9cmk'k ~^4j ;_N /'>J4+Bki#:y3ˍY.:-_B$dj5dNoiU1|1=Nɧz zn0_(~d/j WFgΰ3HYO]]u2{:}ZRB+o4lXimi5fM6_k|y6ey"3i~"析_-(ߢQ&zVj߃İɔJҥl~ڇs ^`|9q/*Ůo;{|Sb( r}1.% ί(W92_q50ҟ^a?CL'+y ɞd]yحxi#5"W4[F:rbRE}G3iޔXw[OlH7% hܵʲ&}(/K$. 3gzFSN]ڼu4hcGH=+`;&0+&wÊwZQEmY%C ot&q+ i6mhpc/pJDhUhb/44iVtw M& %uasPfg*jpfH quTrf,]"_'lmu[ )վ7H&LH=lQAv}FDưjHY eCF%RGM^8ih4 xj [ݗ&ȀP8Z4Ōﯾy#%:wZ4u'\ЖteKvֺ0G$$O@1 qLG2+c]ʣ/#uE2ݫl26'Y"zGٝDYQMs˭H^H9Ib1xj0p"j nxm t ۠AFB3GԻ1]@ )52Ðl B[+U.vk.~X b]Qb0Sˈ3ѡhdc@Egzr$0dR#PAb!QfH=eD?>kse}yN{; ٲUhkN55 Lk0! &Oھq-@j=; vU6 z9IZ]7^i+"0ZpHxUn2(@.$'qIAӓ*1|b̏V-=0??0jS;/FLD8H MwaJUR%')¿,-]eos:duA;B^U1z?ׁV`B8XsAG% +X& 3݂C]L_^;q~/izf'|l *лqZͰ2Bn_jg*BC9%^V:@l5PuaaqpW8q*Ƥ`<8|yGcw^vŻT:׷j Ѡj{/@ۘ{~8oS) T3xR9i KDh4:1V>ukCK&=bƤ e#4WJZp 7L-u> +@)N 0 )J!`1}ba{ss52rDF6cM#*_gj Ccv.jy塪R&F,qѬf6(37~z/BWL59*Z>`O I$O;~󁯶=Ϻ- ɗ _,UDӪzPHpG[6N],G(Nz'#em BSTx+AgL3CjgKHu}8m.(fԜHX d*+X H*Ymh T؁⭌|\0Kd9O>Id!M> stream t>IM7 dEN+%ԕc۪SBf~FS`0dAk0+x9d^RmAWRKҼuVm_?꾶e9O_yxwiLI "SU,@qd.|F^ PJߜgD4-`<֛/cXj>EJK ]rTk4-k|_&Sp NTib:7TU? /q.ma E; EtX8}h<+xj~0=UJE)˛G#IL9Xv망##;6x$r' u嫯#/c{p;MGL]h+͗(#vj׹ކRnۭ9R_W :8Ùg?_u4d%m^ ݠhoGvE~Rj8$f=EeGᚆVWuʰ(&>U$U*rDЕu%#A,: *mBUHQքkXH{+zqgžU69,J&VѢ R3VLx(s1_A]jƋTR9BN;:|*?֍90l'LΣ\، Id& lp&1#z5w+ 8ʋlhfsMGّ VR;\Bx\>!gkd^I$`= 1r5qgɨɒ<;1d[J:6JOyKlBHkZ`ydIV"-̣['!rdU 6cۙx!bUo/ɽU jCp9G` (A\4Xp|W]uۻ'%kd?#$qo_2gF$F)_;X'G{fp~vЊdMF[oJv}!kOP&ND/ x,)dK tF1F_ݼsIߪӿdTdBjԒ5r߫BlcC¯hp~O)Rq^Vӊ; 5k R$R&pi®uSTF\بM6 GoSq%U%Oia"3/N^TwHBE9ЪՏwcjp=x6h|QۭV.z' Mi7ᶟłhD/" " B4wPWo M1Xצy j*^/%N Pnwv:SGwfnj(Pk(~*TCh;mZ%" uQvCژAG v1`rk%^2|7$Gו~бݹKᱪ-vGpEn*pXOXQ^)qc=h2V9J\0w$YICˉ5^͔>0HJg~U&5IC'8qi4ql2˝ ~"I ;lk7Y:-챲n|h pĭ;vނŹ@fpfKc]3|lC) u^qhi&k%/* fbutGYɉy7d9{`մp4b\+pI&JQ}7[FsvWB; FZ|j,}%'BMGR{y7Zh~l3qت`e wuD`o=|*ۨb o&I_|Poc'0]4X _Ԕ׽_vH?Cxb?ؚM~^mi/[3r*iy,JҼbMO?`,ѽ||Ҹ;>YmC-8sb\RE^K_P yFgRf:g_` >zفѺ'8,}Q #_ yA endstream endobj 2490 0 obj << /Type /ExtGState /SA false /OP false /op false /OPM 0 /BG2 /Default /UCR2 /Default /TR2 /Default /HT /Default /CA 1 /ca 1 /SMask /None /AIS false /BM /Normal /TK true >> endobj 2491 0 obj << /Type /ExtGState /SA false /SM 0.02 /TR2 /Default >> endobj 2492 0 obj << /N 3 /Alternate /DeviceRGB /Length 282 /Filter /FlateDecode >> stream @k>2%!eF D=dYIW84Y@cw ^ZpE_f΄x+%>=gڻ/nM.딳4"^S Quus)@"Fbl %X&XBGJe.Rz; >Tb;z@ٶtoH endstream endobj 2493 0 obj << /Type /XObject /Subtype /Image /Width 2218 /Height 3227 /BitsPerComponent 8 /ColorSpace 2479 0 R /Length 239218 /Filter /DCTDecode >> stream I#:lI)-Be'!6.1_H] E &q]Lt«Ģ]=׏vȻ+ qᷫFA! /m1h*f "ކ'$UBXr\͖`uf%<.;t6ɨgByAphtVDߪM@AJGzUt1w9\,C 87N_v>+ek>Q,ncfTQj"Q^fF?POM }, adH*d {Z~g{"b#t8ګ#8+VkR8yiyqG͊DY\rDş Ms}(ZL]GIզLX6Drgik|([I<X9]a{tRTDQJ}þTC22Nyڥxr`%61~iMG dd+TjbGk#]FGW_K=rUԢՀxc ㊭ujiGTngctLƓHp~ͪɥ>4@̥x9deDw/4U!9Q8)ڌB?))MJ^vgË s8/}gMTކ'f4,h]pEԜQYCM&/$ BY1Jl{7`_j}wD eϙ785zry+qH+PO0nrw U{17asOGhucx*66BK"E=UŻ?`s>n=PD쮠{ǟ`N; ߆neLw~QoL"RrM-RͯyrEB>X>tQ۟r;S p ybI$P^vYH|lf &̞2 ;!QZ":B+vP(w'uYyfe*# 1')6媚t=s?3gMRȃi81#bL@@omIgNnH5AxZg?9?KSΪ {x= +d;`ϕާ7Uzrc*^΂X*5RW~Lt+K] dH)VhzaZNt y##_>[\Di]FHr[OU <ϙFZIbrlnU2l,L\h+ҝٳ$OjGF.5M%*w|Z$s~X"MmT;*S0ER:k^A_jι ~dwBbD k^9]_=1#i;0v v,}w:<}#uW^TZjK!8 ?P/Ksg[T:%*kuz̶.n۟׽*[2X:m7#KY}QopmC@ ΧT3~TW飵s5: Q{B8$$j,[ɢF5,?d@dΆx |xn:ņ#;Vw%Gۨqvo%vI5GEٸz1S*M{\?s0h՟٪DI~nA#ej߅Ijmm2ko't;9 $aa[FJQ EeE&鶐wG܍2r kK%'^R&7=٬hg>S2{pdG:.V^4p@~:9_.ޡfC6ᅐ&`WV<j4{S1XC+?10 }_dgWB >/p[ 05ޏ#ʋ@@1rh[Ӊ˅!a#%}x|礑 >Vav5`:&l؈Ιad%D^Hꁗ2 ]#tCzRRȰbңNmVQNM jBN  _ꏼ OHjJU`@ п3wBnc?S@NXT7vmvbye󦞟!H( g<>HApWF"+ڿLǵ(jH-@q /ue+jto>5Oioj{9qP)ʾԠKUBx/9s XDjBA$m˟͓~3`Ii Kv90Aٍ 2AM̨Nьux j.gL ~W?ʅ*b)7zˈ7#]UfJ2:Oχ>RQ)BGXIA9S C¾-ZFJA YM}l̠mޚ9w5G+V:uI sWU-xi_2b jxkuRjz &v:$nzl{g;o)g 1ܴ%c&μ|r(Gtj ۡM%;"f4 %Ӳ5ݯAe:nzio8K`#vLO?ŹDNĴk%b5ݟ*eHzVoJRY~9'*^.y$,zQcpC[9Ṭpa?387 votx=.>cAȅLiw,jOD(wq9 w%5dpFObШX'k=c%(klяpZzק>8~4P7e[ZgMdX^Ϫ=f#K}`T, QȰjDǣ%A:ۯG3T/!t`DqձG3^=Q1ІюA'c> -qMvwP8n&R˖Pl-_ ;pP/ai`3=f>@XiPph♎tcl?R"}L?rALzIE{wN\SԳ&tlwP31 8z>2  ˪7)z|Itٙ|9ei7N.W%1qG,0,u ̭2f%ju*7h|ZXP^[b|x@$NJL m\}c@tU\`'$t9ZUE-Hhm1g4٧GϦ-vℿMd(WH!Enᆹ$\YMGb"gh~]rlP Z((g w]R@Zt{(.5#m7%E*Nk4*^9m>z8s-OmZtq;de`Ti>?|hr'EݘKȔ/"< +¾l0֮OE iDm3H'-DBqj+pɖJvhI3¯m_(~?BVڅl8~ەv 0 o l :l_ "xhb]Zm8TT8l')!,ԙ4Tҿ.vԙ+q#Š>1o9P\Ph!9eV'tw"q N6=r`qEJ ʩW M'&^))\~/x!YO~ו_EKwN ȐkĐ\ iW`xh3oK`Jn0Ga鑧3$c)0rPOn] 4Si֤P[8fp< }Ep`"8@ȼS:1:/X"ԷWBNH1wJ l8,?<Ƈ+@OGW—|,,HF-*o͈och'|=N@wSX˪$"[i*r,86_ p‚m!oUf$"A ۥi˴G:!'bu/0\܆*/_uN5%%.ݔD`mL:dymu=ߡ2;P3#/k nW-+P[o5UĚL J]]R^K[t󌱝h܋ip0B ~lRSM_BZGOuΓ"J'edë"e_ئ.J'A~(y$c{ l9F56unZB ECƠw9'62Է(e$ nF\f^VXIZAuXt)~4!CK~ ǚQxcm^*HL3w' ijg-ND琰U,xj2Jg3&6Umlor)(+6G|,hּҬߖ|> gE Y%?-qDg_Mr3wܸ,"eSTt3E=Y8#=!_"%uD ]ȯH!Sgxk?夼Υ,c V;RJ Ѽ*& 't9w}1$ ѱn˲|VlXߋk941ϋt$t|6qj2wXM?@a?A߄[* 'Pp@FI[M#G!#}#nMg[d 16U~W-|' }7)t#_d ݅ 8mg4eolgۦGmeb΅M]LrܺI_ܛp ySk$^. M+N2E#/6E(y ̷A?7B* Wt$|9ݟWSa@},QRL4Sc߈?5N\PÐP2n`P3[ ̔ωlm*^Y\0g:6-P ;4h3Ah"ں֣2;Nt Iم \hX ف~Lh%k\PK[I/ɟ`,hruBA>2/gX]RU}R|k kfuL#` g5.P'dx?0͑[Q/wƔ^TNd=0;Yj)eeߝ!ZxJBx.*\eM"£}p-1{6_S"2JÔmz~)YI¥xKGp%yǖ+7q@?Gu eB6R xS1a%EN}8oM.SUFB9b!G1b'2Qdn]ߧfi# \mǙ04m:[)_Tɢ}a0緎ѵl@kzoGn &砣 fʾ [U=!aqBdo, U~ w0OLæ"&~C L(-KcLI`[EvBQ{S"B u2,=Lߌ5 ǂO .,,=G"& Ydi46lzs`pU/ٰ|cu9΄eͻeM ¶r#@ꪕN-ġƔȂ7@q;J@sBs;4"9߂W&$YUruB[K4qD _P!zh-¸GR䔩7/UOک2A[G'z<>b@R:]+ҿ}oU֪wЄG80 fj@Qz7`&@>r+Uxr=;@t ͇D.} j#U8-$F#'o'|-xtǀ g;ܷ V] 8NL/nU\wP;*v 4^A`δ$F,!83;0>&9&3MSrRwJQHL{~_͇FeL-L'.d7j[eg]ě$C3 8gkփ(j (t9\0PgZj$U^Nw!h%ި 䬺g߮cjՑvT9Ŝp/?Osù.K*RQ(#ڃؑqvInS12+au/c"S󦏁g]?fS7 ~. Xe% EgxoAwnւ,c>7o,W 831%fNCm¨U1{̕k~:AsޟJC,GfhQy I,LPC-Йܶ tqr@=8R!6f&^a@pT;]BaQ 3Mm"\y?t6{dLhgdw_~(syd`LlHg^MOY˹/w:M< 9 y&*ec`Ґb[Ga 1F{;~#erܜҁˠz?EbGS b~EZAګCȕjq's*Xl[51\hFY{7eFin̰X|$Yϸ| *!5nL)鸙 Z' ,W75 N3u&4UEN:vw~tJL0P^, gSXf&87FU^axA!diYuO&:~dkZY M\c DK2eL }|3iD$'LNeqyken|iKZ9zq `:L 3VƄd9a%HHu1k\TUQ$zz농5>FJxAvY^/33Y9%SiZ'Rt,Kt8Q@>UhK(? Yc_+[@FcIu G빖q5wAoKP x蔟Y"K7;iIERJսU)v%n]Ҭl RAҵ|ĭfxPrWOg>':r{'Z*G1uDFv1N}6^Y@i@&M"X""LsQL4zzYX=)'3lրLrYS.BPɨm_WI q: ,xKi@ -mtmsM@܁CUU6osFXMsU}:/)%j50|]687H5)8o^)r`+gŦȘeQqYdZu)?azq<dDMG] ~/>9umD?Uķ^ș:˔lZjQ% \"wk@m=3T;HHǓ 4BoD }iZ8;)96+89XMC5Cɫ}pB5v 6wef"<(wWQkzU?GȬ0긦k bPޕ=jQn!Ma/y> xjT} +?{ـ !oUp *P ?^U~A]g )8âD& 83[m8 j̥0FXiG'^'߮Z?aKћx=eo*d`'>}':o+*gG Nira w⑇ƽpX(gzQBʂx9G՞0ȗ]8Bl3uc3@tBbIȅNHB0&Ό[d5mth!WlĮQ(S pd}|k `6p a^z' 7 F_ Az` h»D T^JF#qoX֕vz{x?Pw.fW>u}Bᬙ[LK| ~U:Dth2n +'stt|V$Ye KH뫛Ѭ?+k<1HN"uD"4D=k'086kZY?r-Ԓ\Wk' ѵݝQ:f9/3+$-rm,`Y3cd ٍ \j\GsClhؾD;H({RxH@e_]UJ2<7˶_IdeHͿϰBur|CaB:t!G $J"6''N\j.\{ ! [,1 čuTvv5BP$8hLlYkBb jv$):)hMI5.P%_G-JC9I_w W08oQ@MASe;.‚Q7KM2cP[|h&bthrK*g^sVRC\!UzYZB&Ͳyɛ$@ '.K i&K57VT-IARaȈ2Cso {Ĵ[vU7vLj;,5^%]Wm@i6 :/ +  ͰSi[S`U(kxjm5[oZ OrE8 #W"0ӱ/`ܓOf=_Q諣YVUgx4ڄ{MiQX2_zy&7 M.cgѽ>P;sj[ہŁM q7'MДp<>֞ڑI~oi۠43W\*B)؈Yv$2>b \Glg#k]SR)`mXA382GJ:ʥjXSy+h%=PF3w8 0Tu uU7c%,fvi! 8Z"-4Ftױd#;5ʅK\bERHC-.Kl3ZΉ68θ7F#~s#] _\ϦljsCljRٯNJ062lT=ꍜ<\yd‹Ql 2]Ԑ=Y*X^ X[ U9;]Ai`#c&I!~6ن_ҁ$~?HbCgWKY[~.{)hh Uk͓ű~*̝~ZxbӅ-Š噰MzI=f65@B?CY9XBf́\Q;?+#iwE!n }\~B3a!mxӼM^n^eQˉ9N" q;6G%̺7)2x"{cr0؃_"ryeX%$, 훷~qC \qh*H,b8{scy)Ɛʒ$|Ij7?%~F4_YNhC|+&hX)%KμS_f* QGYpj3/M;.Jؕ4(W$g-iL<Zҩ'ws{9nn?rYGP5^ snts[)=CgXs ZP`C!MXi\lŽh +x_[qk}+$ 3S+ɢ&N*z̓o^w!bRD$ԼSY;MuI gl{Cbh\a9$͊RJ<Peȶ\wH kcߞ7DS JҶ"K84ᰣSO\ur  |ے#9(`g=&yϬ93]h'7tkNQ&+t a; eQ7V{8ِuCV䌐U0d,K('%-b3iͫ!i/X0l}iP+)ͫ (ÏٳFPǝmlhxYE=H_8k,) مy [=1sƁ \ɗ@"n8iHwQ-?ew[)$—FWkpDK{;%&/~C\ĩaqѹ(cqr)ͤSh$hء 1x2O${O'ʨ4IAFHV9{R%.-!S |g:,QBqwPhq)VkF]ෛVadiIfBg;w8 REIyUZ\#`a5cS~ى-倾@Y]}``Dm ]Be-p+󱼙[ޠ4i#n)4)"BZ۠}֮_VpcZ 4_ti^nJfr4W AJ'` -k1C&}AxV;>yTOv`0ݪ,4RP9PL` >tnkdpCH*Ʋʟ w,2*hpUi-6X񬬆/s䱵,:|K ,En)~q^.Js&ЭxgrM)__DِGei\\*0$! mR,Jrj!~,Y9A%4%Ԗ}"홋_rϳ>(|gJY{|h }6^}7p̢*c!zٍBu?(QHO6s]NUg7B &xx|aK+x0 r:1vWHM=,72&/ }'꿪% I.Uݗ)јxSlxDC0a6)I:ugN˔I{jc pm!#8;^d26AQ.b(jaP`9p ,4P0Ş2G\$&xJʣxpON Pʟti*:˄m׏DgHbGAkUTq6 &X?&6@mg#E`l{E*O4ج Gȑh3V-G]TMt|:O`ndEf/ UІ"y*6L*Œ7: R'bP QN`Y?2n t;D9w3]TW'4pqgp"s=D"FM:GxF/idD\.^vKhGK wU3Ys'e.f)gKGo6=o)LQgnyaܳ7 ⸍OyY2mԿh{y;~=*!5y~Mn`*'6rjc(k^WYr溓`R{ \C.! $U\9ߌN?K@81Uط$lHID8u))cu v={LS9`푐 |IT76H];xrHHy2RРo G ]_UD8Ɂ892G5%Y%?R5fǐom10@cueFIϼX KRƥQfc#'Sp an JMM]Z$տj B6/UN!R{[Fte ^]KR+h@O[teCrlQ9}ar Z(Jzv4^@ܦXTzn4X$U|Os}Кd@nA^ӴDWUiAfklo^9NI|#Öz^&#P8S#~/|Q«JCEi,K f+qKp9S@n` khǺNFr6~[ DOX#ILctDΙ.CE6_a!|Q|B+$*`SEdN{ќDOُ=$:+oHd\ӎ n b_/DkRϔK1!Z">A 7KFQ4ǫwnf48u JU/N\.2SbگkC& }Tm oN"C y1ȡp'_'k:{-"GƠ/4#U!YZRNf 4gi|e.QΡٕ$vo,Y bE'E'pkeZ&bބ׵c@g>l e|ˆS(%dHM&` f{ 2Q^C6i qd% RS/m'Zxsv~׺)BD1i{mZ `xIrpDyarfc04P3KCӜ)TW:ꩄ&Va14_[d-Ld`*l/hNqX .9R>y|ݟ^ST͛L4n8%Ѧ8^ԋv&]W<{=}PGЀ: 5d~R)B~ًCWNV|4O?6˕(sya g)#ٷ!i⯉- 2HM2K}GBC(5#e>k{7%w-.d{0'|/ 0J-^Tk7qaca]Z#EA푗Xo^Y_ McK冯O3Ʀ{͜*q!AYs0isXĀEP_[OqӍVXu=1-w8U{$=,C o uBUVM 4ܓQlMɾ~/l=^!̃LJ20f`d5`.P"LdNEPYRl>* aaY{ Z.rZ>U*G$$R:s2r^ݻ "@mi*x R- q' 5{0 <`"zl 2YMIc0,:t-_Кa}UD-SQ6}_n+ Hg!{eY(nw"TT2>=Ѥ zc(l&8\:I?u ' P@-(fyKu VlVR3(\Vmm1!.ԛ$xھ16ӌ.R,˯5g >M:c5F1*8tu8s{TR!@#],=H;eN,n`tMrº> RĶ& xQo ꂡ,/+}@/,&f%>+p-\hx j($tɢr)=^ +YtB-feLrunIӽVB I|C3_.--դd?~fȷ;j8tK$ 7n7r#ݘGADdCC&AҞ:.1#x[ &-3µϥd/ x'&{O[i^^$xEqr1zUY>׏g5x*kWݍoMuM,)gMɹ}F vz-@goSJ"]j=2f,dܚ[MĦC4zei=#p8o$[紓6#d? WCoyX Y Ko'k'<$@ k6x{&݅)/EmSr{߹3Ecjy:~ ŠЦcUynd7*39/kmbK.033~M Te6<ྈi `7J ý; F_iBVHMrpǽdrn p6(| N MQsci6ꥉ +Np1a>v*kMi+,upwAja) ze)>&kt>TIc;s]01qG DqDdz[ ,SL< rUM]~^4Z^id_쾬k?T]iEFk}o3>\hQfxBnG9t&ЄHT9@F!% /׀JG^%od FeW#GqQiߍMbQ+]'a\ vw==T@"tR k!\`R9M !TEHh˻ 7qyu5Nd֠X EeUkKI ڿtR5n*, I*9t@zh|lWSh`RuwqaTXo +‡Yv-ԨNS7s٦FET苊405 v֊[ ft}i81eE)Sp8;s]9U!wf4,#!NSKkUBGgr}-KWՎoNJmũuĘje:%,_腞<g#"**t !=ٷnPv97pQZ8۔ٻ"S,*C`h9ЪgQ;"9+Bpo d s2h}P]qj0bn=\: 'Ly=7!|=A'n(a8M kږwT9ٿZ/v,2!]Fo Xu)va7:ŬN'7 {zTɜ?؋"Sfw~qTPvu2ncHg$RzQ  /?b+X{-ped |<%K9"NWPu 1 @^Y R=&/9[VY !;'x@}Gbt9ݏg6F&tpHXS6`1[ Q&Tt4ELQǩCsDw(BQR)j=!T8wMvҿXDÁp^?z -`nZv=KyGGBhu+.EtLdKH,A{m0mG?}q_ 2ll3LK)t.?Xn;x~z;HkF&kg@iF~22Rn5fųcM|BB{"P%\H]mOPʟ+!,q%h#M?.ȼ1zƓf|"f#Z4N*!vpB?1DN\"]Ee5xmB* X9!C/1(5BJc_;mAH[X0ۜ~m>ٰX$(~&Xu4Qe Uffުw@0s{3]w=(Sb.xp R$bGPg=>!j[4<sKh/qaVJ5@cV-|pfC+M֤eCce/{ 00<=DX2Htq,7}E䑏m(:/m )0e=iJn]Dt$ZJ[||; y?xϔ \ZO=P]4 /uId4Zbe/m#PoC+uoo>TxէLnx> phj|˻G-rW_3E5Q 2ez%eHwT!]F7{7)U.*cClLbH))̕az:Cxs t?!czEmXKeB*5l8zix/ LQ G q7j7XH U?aNJ$d/>"&X r9:&+Ök1DI\?o+Ue]!_Gq0;spc!MY^4wQ \ZeQ܂ͩKMѦ%_ш7xX t\ە4!&ЉSm m?sv<.•u* ,zp!]P<‰I@r[> D%P'ΏDzlP._<~5r&;rg ҃PPS4=P7H"+SQQf7ˌ4`/˚?Z.1de$T a_zAP\qŻ=(Pj["">2 3]c_ +( 9l+p[̴Gɕ'/>\AzQ@B3v7xmC.S![6ZFKb ŀdIf+? U-2焯zQ~ɓ`leGgܭs*Yg84Sg+zJB86,>ۥ]V)kk,J5ڵw)e 9b]ꍨ t;.7Sx_tD(́a``'lrBeC'Lx#_R{iA%E^⢗3P|#ߪIx}zg ,󅴞WPЧ[삤N COkS⩴߷Q,Žs%-s܅,Ma}`40`(ʪ@B,?ҚP} %~l?$?x0,Sω)q#(.Ι~:?`Jc+.vd+!tͧ"l/c-ک\$//wh"qߜХ=hfG"%VeZ'*?0I`υ@]'18nkLpE,E=?.Eo)`g_F 7\M# N 4yxp\V]/장Ff19=Ik$fs{d'jUpa^v;Wq Éӡ#gIaUc_nB>jXϸ׋nJRl` @2J@L)ǭ5kpҎ?ό"z=yAy­ޖ33gzC;D;>RyNZ%ʕ]K-~I@ x-vlo^ږsxW[*n-дI- ("zL5JBzlдX %./5ksHe-?jK *ѾQ0x("a>%75B6bKbD= W7z*_u<2U44$?w>~ I.=(>Ƅ~pqD{iB4_Ι<Шi09-nW~}Y]fmC8wʙp/u>L OTM}?MxC$̍ 'mgw*Ewbi?F'^®=2dk:rT }Z.ELQVDme ܶDXʿ&fEYXẩO1h,cr5)fath'g 4G"h=kX *.iĒNUoG2Wny8>lSd'^)3$,pk9M3oz&j5VaP={QiE/*:$1BaL?Vb΋)q`jp8ӷnuxo85[{0U /kNQ"NؒMtϠ:t^ԁT6`gDyhqQuc1=~?C=vˍ - lĸe۬Bz4+< BOꅼ655dvO Vm6B[W}>I |L^Ӌ9 #Dzuk\,{۵ЋIjq17["4`FY1|A͡x ^R?2k|KZ@,n]J[@ fƶJF[\dҙ iGKn3?_%c>ݑg]W~藍/SM$=MW f&^^_:1zEvPٴUq`0 AC%!( :=Bc ,a*Tʣ^QmmX7zIyTҨڧEL,䖧ݕlC)Ա1É&T-49|5Dw;Vqk$_PlfPؿղi]'>Zxc?A龤yu{x$He O[z|Qn-$4cyE/j`2Ǚ' ]XbU% $,$FLOS}.Y,~لRt)PFl@&N!Z:)N透7ZώW&P!yg*n?t=+X!-?I@&,-~!/gv^nG@23_;4\⥯x pZz5c(tʑ(P 0 Q\Po+;]Fި_Q>.L.-$94b7u=>>lC5:_kOk&vEV1_ws_$-y0夜A2Ft!3m& 5`)sISDFqUdƻȪǎ VyuJq ʶFHMXh w%쑆{HfC2- O)6EL20=*S%t+cRdɟO|sp3NӃ#xZ/ۏ87=]EgjD>.2Wx_$/X4}@ڞAϯ^>(/C;/BH '9]]rߩ]pDXlB],B)uHca7U+ Xx{̂K 'f:}*RwL2CWa 3H…lNsbPEH5\074wL#k:4Z^N|U@ rV5O$pi)l,nNIYĕ)Az~wߦUaǦEڸUls۲z0.הYA/?1gTwn1e7.%VZ:ݿVOU_ߗ MHFM |(E^F5ϩ_atoYUǖ"&#IJ`pҫej\t[6vSgCմxҔ, x<tvdJl):F#θ8hMFzXE3abO+;Bj3L5uv6b ْkmloEݱwJdi>G)b AmZ;x+hD&}.Lb:1)n{|9dσ-A6IV#79"ja fcy5_w`@L8NB -e֫ܚ,`0P?ȴ-)<<~0BM/me#bX5@'u&{M!pQJ Erұժs05LxwnĒծ2A'bAws2F==j( ]U?3g뷯w&?^ onv-PDD?H $$dՠ}Vȑ-6Zx)iwPlMvH>k;f@#  缓H[CK~+.h1٩ťEqS#`Zno %2vƣ\퉼m\&ΊCtZ8HGAkUAsdP=EżIweg=4@)7 cK& ,H'YtR==7(;_ Gگ\Sݬ\@j #iI9!B)cu2gۘ$*mnRSKL3./9@ pNj+AZ!$$[T4 ց ?My+#d,YMqjP sW7A./ˆe;h'MbI9Պ3sZS5StI ,8eݤZc`XQ5+{(K@SW:aB @=3Wd\\,_#-q38Ha?W0quZs&) 0_s6)ܕpcrT+N۳c 2oc<s OVerTڋx'd ͿNKݺ'P>eQiugV}zgw5 >6Y:I%]^&OqѬLbOCO/(?j}/ ]GD1jt$7 Wsl€1ũ蓒2U Lîs͠vkuq'M=d`Ev\nNϒ<AO}fu: *-7!W_=U{+#_37TWG Hz5(5ıY{8?7AGn_PwLt p37R'O (-n8 V 4O8̩?!.xJkD9/B 2yLU, u.ЉPMMXR?VqIsfe!iӜr6x"\1s7ɏ' 畽tX L]Ue!q#_zmN2rٸ1tsxlsu469漒  }R ACK$++I{C` Ď+"Ռ;=Ϙ-dX] o|Â<Ư~;^xoo.C0P*RK{"j'aUuxAK,,ZpS:%Bެd'C 77kY%N"hOQ#]hZpe-]Jy_Eק@=AӐPߒ(b\"+X6Sb[pH9!03 wMb B4aנU]iradc:PIq++h/i0hpf-GqR=2V֛ff4/PCTb+vAT^4ɝMGyQn[&hr,O' "2 =Ȩ޺cb}l,:^(f~,) w/!n@EEi/_"ă FE=d߁ߒ>Up5Bzor(oWxuAIP o\*BX2B 󁫹ķJEOz 'yӇO.(h[bVO*m>D8WK©FXY-`~#'фC6/2Xǩ<Ԇ)9X#&KX&Wș& Z 9R \Kfuf;h-`5hyRx4߯ F׏ S|ĖF7J>smS ˥ "sb➖_hR' Pv2x'oV׈GR UdN./gTj=Tr6.]M: ` Er %ˉ4ع~6'"/JpدN|}'3g$YĠ rz gMc'- zWlܷ =# HV7nj-ŇK!WidDbQjX(U #uEnRKׁ0G)`:4 ,ܦА $4, ưW;xs8(yl?#:q/&|` gr@#|ZAu"/ǽK)irC1aWp,ͥưsrx`Y˵91yfHKW``=I ea qtjfxU44 k%+Q eY<!?{JQW f(j]_Tq SLɥD̚uQ7HFx(t}MZlfq6rʊ4{46`D_=a:ws5ssEt!P1вrG)UԚ$Kٜ m?g{eQo;T7" * ধ*u낽ri#LM˥Xn9c;o32t} Ӏڦ. ].6 "l:o''sլ2!sɳs{k[}T ʞ8U5R踛yPgŻ<&Lyʗ>.:0ľ4[uΎhQmqʠYNLXUҚ# GQ+C8Tm'Ǝ|vXubYzOsukO,2o/ێ79'ΆQ5ŪOLgQsH9˗$bQ3<-8Oم.yNhgJnmK{$bws(7LgEz瓻2I6YB Fڼ~1⺜0*q;hww[HjrZ$Be9Lѷ.gE l l2dA$=et 3.Q7Mܫ+~8i CCFXl? h0B,h敃1ђN>ԽI[8&H[) h kʾ&)T>]`001F} kl e^!}@+jx]l4Cyn2! 䝼n)e ]ƣ(xddL !\t%>H67-wh<0[ܝB]U\FG{^7O1r lFjcV+qAԪJ. L{fq{fx]S&1ѲWJG_n|Qo0,bϫA4 xZF{[נY@ڛ\U&Z=ȑi:2w{L%e^;E-XviTU|Ŗn.z-08\ J^x-<#4r?g"^)/).ܤY`TYcEN9dZ Lm#P!]DZDjeۏ@!%*o:!<Ĥ xhY#+=#! 9+VM* d&5c +>H\i6Ul߇CbI4^n05O^oߡyY;T$c7 6 uB땋#/d0 #E؋2_v㺪?-qɚpw|0tʨ|z 35+{ Uoij8H"yrYi吖h`, l,;Dxh4|9}R6ׁ\Yа_rßȮOWZ`x)A V] ''EEk:%eG$u$X&("NLz/3ݯ@ (H4|Y50ax!0}6{s,JH?iHAFZjρ c4PҠ$ptc4obR#1)IG`WLHpM:B/+lI"Þ\fP->.Ca~5Tv^0 )kR Uo*T%?.u:M1_-u0pPD5҄R2kG :+xDQ»ZCy_vbu;wOHSHgeOB4!1ȆbzLD'h]v{LACH/17\ X,D/ރd9 R(\ vYB(SSu{6㢗PDa%m'9׾#1KdnU_>5KnS[z3*& D"}QM1k ڇaKd$BWjU%9uO{͈\=STa3@ڧYax8FepiLnPPt}zFԺ#T3 %CIם@~ZQ+91S&WlXl_\@aZc0ՠKJouY7bHu7 w.m7r춤)($*@ 9 / 6.2 IȢI\RtWdTp6t4%;^vA?zz9&&W?W?&9Jtqx[sI&^5v(狱r.D\R-R}8cxB~X5\ ٍ>Y) .BѾHX# @ˋ]eq qE!CqoGB-٘T0xԊ`܁32))ŒD\܌;Alr->sAg1dYv*v HSǐn3J[;~Ռo׷W~$ys4#b^] AYpSؿҠ*7ɼx_lM3d.Z)z&y`Zqx"MJeewܚsBlo<5JC' ExE)3uLJ9a#՚jk;\1|qh/UyZGUEj ]3$=52s}3hiV3910A̕PcYMz% ?᪀orR 7vc1h<|v;=灮jPM"x' <|)l1vFx̆ȇkRM?C.]Jp&rY`qxC0(e /h'I#CxO"D^>2IjQ(uCհ.'WcSl{tƋ'}) כjbz2Ex/56W 4C.}p [p0W:덭-P;rXu.1O5pǩp˾\! n :\4sƓPwjzeŹbNy2٢fޮPȈ ODӷ7'Q~:פQ[xBBڍq#U j@,(f!c@!Z5<<3pҼKQ<"k:,fMJZO^t'6)Aa8?#qf3bGwdeCZi2*.W2Z%/,wy=|XŧBICd*gԓH >#N ѝw /1Լإ U. =}|P*VBY6|73ICWCm3`kr&;F h=IR7S(o4QFլ-l[bj6w|X\u籹\_4ͫ Efe$-itqvy f&,b7C>`~f]ÒT|HW-JܙfOosL)Y0:A˩S:03.,a"vZ+yULoN {Ox[\GsBf)ًʇyC*ݸS\ZrLy5ݓ /@_5bѺyNΛybPN#f ajA|kZ-Iب>kM>/q:YYZB*tYWy/#>7=5cN+OIfn̏sCFY ,a;"DVxΰ01~F0(MO->:"9F6LS "3m). ?l1c/ΩB1Ťïd;{{^P'vK"8Wzr6Z FWQ 0D cW&JV2(d~ BЎ'S.Nͫqd'YaDZ[!-'hظՄ! $U` csG2C 3\hnUD@lE*8 MB\p"]3ʩVR] )m*OF[?>@<] 9s{7xr[uXU pYMJpD?}J)Ic%wkEpQ /n=_\aBEmDXէA fV]k(IwЕIfvh)cxCUi%/O~ T2 C|`puj]-,tđ6űn-ᖳS$ϲG?@kE#/yՂ ΊM%u:d4`(`~`N p.e'`}"6t:!QOyʓO/Fi܃{J<{`<}EIb u)Z)u61ީvgd"aV@JKZJu!C` `;-4EOlwFYe'NXKoGO{T{%p<[/ k{7BwG֙ڙ‘/lAim=?^8hyhcN?.H87kфr4\ee[FU=xwYow=dW':Yك~H%g4RS$Ү?7tsz/͗\rq@]Oa=&7ow4w8BZ-g7ْI"͟E=|E=Q^z2?g[tLUHlv'm^M*@2ZUO(+l~zO3jroXbPтtyHl +\ȨT%_t9DHt^3ԗs5A$quz٬9_4YA}~ D:X}ukA-~"^.-{Y:BdwSmy R_X_|OP /8Cz&P~GAj,6QRl_Pj:C>uYܐC@n`}}VZ*Gk32:-*ۗESNL'V`=SDs)N@榋&)/`:^Րؾ hb~S_}㈂lHT*<ޭ#Hpiƭ%=<'v{@(; 7[9B -\)t;cQzD˿JsYp. 2 39 Xв˟7?`o1:Et篿Eͱ~T6[l v W5?8L;Z1(#Q+:Nv*sZd"^'mƛ/p53Sݳ(hEo]7NPHeG`I :dUX㬿>ݧw^Ug[7`!%Wʇ-|SQ:\xZ;/Z5¾1Î[Ⰱ5*(b=Š3ʟ>ײ3%^e?_:~QH0\L@ 5Cƽ @r>&&yky0](G˳x%g߅[LF҈"~bD^B\n,9",Ӛ*᷊a'+apvx9s=3H$ #9JknyYz% P\Vsb%0,tn.=5yVZ)iYW[ڵCrg&t*ɦ+[ R$Sڕ/ >;qX-_tW+A i-ùjLx:6reR&𣊚tF* 2^g$C- b\]:ϛZf ~(P맅5bG=deo-(!q7SůϮa##ǀ`2^%%22iw5 Jlꢤ%ٓ oW'YHlS~nC?n)b1L3?* }5lFM+-.ޕJii.&ծ6!}p~!a19UFH0X;ޚuA?:\ŐߨFW=CgO>Z,Nb`0Y3 u Zjub +cd3"Dx3T骨":3bq#u=15~|l%:Hie*JG' +M#4GK@ +ϔ\ǪmwF@t9q$-Kю|ob ۇz# "Qr)1 ԲmȖ7Z7 xA@8s Ln7HjTձͷ^=F%#% m)8R-fn6[DVpnq,:5;5wgHmg h=NGn/SG)0)`9niT.J흂ö%  &u ݇*;H(*0_֕p*yUd*:"]t_ $фYȴ-M*n.RB$,gpSAT.9Tq\5)~jy[7%Z{>md|"k-_`yǬ+Kezu&O-: "1P,[tR3| $caQPnZT$[j7i8HȊgzQ1Om?E'vb \X#0zpPLX=;ҽ%(ta:9$!w1>ܘSPoqwO>uF\c:zQH4*\pk`/$75N NpJ2w3X!\9ۿBu`R?NKTQMڏmB,E;$-wb 8ZK9o#|)nzv`[ʥ̭A$D}d$W.PRd4N [`;<=2vI'* ɶzTD=-9u{FY[D^ƫ*q"bEМL.W3^KIHO`6'lg?^7Q ܀#+ƼR<}F"qM8|Q\@狈O%Jݔ(Q kEKSR q%9ۀXZq-M۝CuʗKG![Q񝱾_<:ɒb*5ڧA5ib]bPo=M7s?';M=G|-@I~z䀱Y|!RWQh^@.ϫ qNch .Bq5sLoj$:1 jD/{6؀l,e<3?Uc4bT1J'?~$^LRm gF\4b W+x]lß'`fc-9;Q!]^8""k~lH6 Kp[?PCD(_5EοBom/r`D~{[;=.;G4Aݓx7LXMѷ##Dﱗl T(.R[:H&(JJmB^a=LיA-|'6ha*ڇ-t. QWo"6NΗE(߅|svZp#61:z^I{s3DCq@\^eXkG:dJP=jawb$_2‡dm|I=]ձ. t_E$b~H1úyx\pߙ-j`Ƥ:MfE5w 8-H\qgG_iQlut0NJ[9&NwFVEEk]a1J7HM*UFIW,ߋ]@9|3B*Nsj`^O2$SPBmvZp|Ytաvx5ZQ/է*h'z=M <-Ѩ!tuf3㏁Nz}6GOwC(6* l4ci]vtkNM87\d -3Tz"m(*2}du/' .D#b~Ff@: ` 0h21Z-Gapkb1,| cjMr4zU7/$H a&BMoT6&xGR9_ 腃B->)rQ4a=0 v8V4\LwL @`G29 O!4څta;/32|V–AԣA*  d, N[ʯiGk1 .ظzL9Gxȱ_qn i3&͞[RՔ3[_aN])VZz[Z'T' `;kvUV ~.tmT< -BϜkEMj'A6,6=cظ[^J$\v =+ DΉP1x܈R6 |(ߎF<Hhe^Gk@y,+T^e|3C 2QajТ&dt. ;mZL,bT:) h cMYLm h5?ErR:7p&PuњRz/%J9u{Fv+}#/o1=6!X L z^v&&cctu '},WD5$xwZcAf]EyI@.s 1YMs8j3օQ/#L@VW82`=P6<(OcY֭Cm`, |Λ2 l}E daYR47Vܺ}G20pל+_c?;'=O:iMgn6H/s6έ<ľɸ3oھp0O|#E'zrqu.vpކ<Uw$E7 ` hC"I|6(iwnujnHyBh{/cg#Lz!ʌZ+psXC{[m,dRh edm߸fLګk,Waÿ \}ΟمGDc`̀·J=:rNo/moMA]v ]`㷳]H@a|9C E T0Vd_dM9V%/ыBMl}Dm& aPv؂Lk9cxO&$}i\B]J_; ﷽ f+&SjR*؜ܯYAl";lZ%QޝkCEt)WD<Řh?.ЊhN 86zŽBA֧4)o35'Eh]ݹO#wڌV־]/J\# #: Kja11TYMbJ[D72UKiؽޠ6PLXmDrb/هdH/"Is,nj dlN5mM)-OݑC*Xl_.Ⱦ`"sDȉOl_YV+ V)ͥ=KrYl^(r`ْ{T1I9D i;.lg[3}fqtfbjjcE}6z:%­ W#jn .ED!7V,nmPz38KYC&Qv6ý6A>Kk lNK_Ki]+qD`ϔ׸;ֽxA5VJ[um͸(їkG#G4CWv[4S@_ըHs@{Loo: `ݿًa3,}9'p A jHƱɫ,aĨ?bE9hG42qFg#d(h2 yܐZfwDqXafSСy_h^+IWG'w:&1˭UoY0w ,Kob% rE's[h]\ (C]<|#Bv]${|frfVycz $uVRDAh祝[ӂ(:K.,nq{"GJt u'y7Ql-L]5w1|YfZo1>V'a ˴$N~Oj_UT5^X帋VpAj$3'@>6֢5:zT|S|!WfJEN2Y$])N :@'޸d}7IjT =j&O;|%zQ/5=B;l{>@po$-]`qK(_YIMwH#3pw)Q- #~E<;:S XDt}b`xOfO.qDSC~ƒM407O_Vрq3#tf2U):/rmP2LЫ̾7Qw^GsĽYKGcNk,ur I'?5RO˾;7Ίp;(ԵՉPP vD$**ۍђ$U;$`yT8Fg,kIy|ᲭD'vq Fsmdp]Q}!"iQ5dUYCsF+_S5zW_)R2?6kX616ɼHEKCE +dstԞ\ Ǝ0u\ܳHs jReVwO.`yO QXm_ 9UP+)G.8QY05gw34USx 44۪:o gy#֌&ps{'L ax&SWRP\W"@J]Iqe)u@t%o${OH=[ـ(|. 清d@/1Е+ă Rm7f v!F*6S>RXE k}qЭ.^r֬ץĻQ>QBnˬ0 % K}=r`+#b]3vxQE{Q5̓#y^EԲP CʖSұpwã(2Ѐ _9hܦd@ ϊtǚ'ryHc!㯱EчBN@O/YB0,2I,mҟ$@*-H8XɻS"y#|:61ꤒj$ToLJzX]Nf#R5Ó+2Y}'IpM"6LƃF(9!HBu#Oo?n\V*zm:ަ,8Y::#f4y5TRu]>zk`2gNÅE>#K}G>$GjZ͵”SS(G]la]3iwq@[\[+:!k9e'b嶸zsicBX1wƪ&,Te99'y ljX6}@o/gA^ą+{oP.1i66=(S[ REz\fK '$PNf&>?;–G-WKpcE}jy82-n)͉qh ${r L+H;#h<鳯x EGZ{UXwK G̸RbA`g~ CY8 ;MD/G;nT])?bO <X~[]%) =Hmpz[tO`'24|ܩޚ sz^5s:6$A64C̝اoI$𤡮Ha¥y~py {_M TƎۅO֑Yw@6]{0^6آk80s@(?~#Ar CvW>6@$5U[a P Gܺ԰-Q(YxGwV[|GW>}Wi9yk~iʆ T?i8 q4nw)T_5 .= ӨGrGt\STb3Eb| 2v0?Hlr=N噆چ/o| T*f/n2aptLRÿ4,I٧KI?F;S/EϽ BPj+( "FaX9?aI hڜbAx<=2Wo0F~ل?(b]f{x- E@ttu+AKn^[gӫQV۸)i &2 LX>G1;vEGl:Nɻ]Wmb O:'1}\2h yA9բ)b6ejS5rxM4y'R2j(RYPiVѰ-(Ps"kh_2Bݜ4RYDKř״_j1+ RL17#|;MmZe&b ,Pbhgב'Nr QʢG ` i-=Nǯ%)DЍєMGydJt=YQ:%rCWϫWMnVR"[p K4vj(r2 UD0'ck|r)m-ҢY⚵U>p}WpuL|. [i͚ǿ3)"s^x3w?`1ʶА}1'ULÆ* GAo{ȵB);#u4AG@UymrY+ǤkKN$੄jgdR3={9Ib<'֌`\*M<"JaFRfq4iO.^e-&W{}N~wәڻĮTM=ϗ"#lqun q:blS\E&GA,)7BMTḞ#&H*U!ShV8 -5{vd]6휢[s=~ݜ)/rxPǑ{ g?VέiH-5pG11L_Y_^Ԓ,EeH\B~ J$W3zFXIuG?y{3 CT)+jXӼ^KۀQ?QO$Ĕ0QH9q\#1rڱZYό!Dv3h9.)seHO"Eܪo] ɨm.҂SsJߔ 3ؓʶ *w8N4d5^'T= 5 nt~ZOl3^OAroGhKXV7XwM[>_s7-G dSI3pCo5+o3,$v]lS >K*+ѴuɩEloҗ/[1DP޸ڼ'**b%{N\2 Zew+>S ;_ͷdky+j% D_;,SzH4MƮZ 8xruy> "{UuGˆBLfOT&1+~@HȻ \{|gͷrS?st̃)1!L YSjp-Nՠ7^M-2fu-a8ӶGz`c !\]UJe#tp:[ttol ~ Pӓzd:~e#b\fE21|,^W9p J ͑`"lOs4G҉}+Le!F=ZY6WX%NT>r7=\mR![HYԀIFqaC!h{.AQ<؞oJ QuD!Է fhJ7!D U-S2K20=OoV:W}M\$ VΝ*'wyWP*Jgt g#OE#f* ʷd!gZw^m3()Yir#P$ Pw&fyDnjY{tu ^"[`OZѺ|\5dGC]A{rJOLT)g/8]yF[wۊkJN48Dq-0+; ev}rHW\0VӊՎ`}֯3۵B ,aYw ƿjd=*:~z\s2F*+~ɘSvّ[~~wL;/7){U %I S?IDM=ԒlR}lA"G;7M0wiVU43ގ ~ bHb/^5L_bhAy#ڐЯEuII 9iiK}o1pP 튝1&$Q•53UeX;6APnR^U@׸[j) rQ7.F @dcҒhX=Pl$ؤDxD_L06O*-F޺fIR]zܽSz'JZvZp% P4D,Ȑ})_6tzo8o )S$߬y؛VC0ȯ?ie qmɰ60C c+|cjƲJxn*C"\q|(!ybE9J 8Ct/t~t^߿gVJ?b [%x|1\ Q4(}G=m3Ww2lz3⍵֖#D?%m*0qƶ bI&.gɳxާzunIUmNrr/e'=$\yWn&/R{^Li1,$:2Ƕ_9jx=}fo`~*{n_D1Tk-Jnhs5:2|MwC WƁ3<7ZB4El\-H\0dgYd xQbJ)&F^$'ȉE&VO0k5\AV,R&[DbKȿJHe!?i- uӹAlԙ˯yD*D?7t'b*Q7QL jtshr: y25RT}pYDڥupj=L xdQ28*k'}^V7okd~Ơ]*"+v\BˍMǍ&@3n].pHM fM oO&a |wZ_2ځ'T " T_*au~ToE`w^'6QcW˪h7 0Hj8@UC<;PiJfE Z>POʬϔw'cְ0M8;sߞ`^~WuEU Rhoa*Dz)a,}ZbdJ|bABm!F8&5< rL\Iya94XJIX3Ē:P7\{5p*bAI\*"0 s,ŪHb,)XIu~gOC㮣Dځmv%m]TYt۔Kˍԉ)xxZ39̣xcy[G>j^헲Jb LJ 7ʝCȃY6.ހ'1IO- oofC"Ft{ت׆Z"[S Nk'NʅS[H㋏.G`&~Mxcĵ3~aݬkQPX}42rxEMlYficW!YTjЯ+ ߬ Ï.fBb$ m̅ zi]i;p}2Fd#4HuѱWfMѮ\n#4egSa7HO)^** "dM ɤ舣FR ms@7i xaU;w)yfr'aZbf,P"=u ^ q+rz!q P8 \`zGiw2{s(+K[1fB1% T'9#QǕ`P}BwScCTM`sS7^nx8wYQj$7K'1o=J AEd C D 5ַQo^c}PkP~mIz̚o}ٻ=]+WSځSOZ^Njϳz['"hs(@uv]ƶ˅2D?"X{a*dCZyysH O\.Km1ϕw VnO(u$%wRw/'&1Y3(]J]GU)AR6T2T&|5#TO"_l=ž #"5xmX| Z&_z}Rs g2DWG "5<h8N}1J67j)0.ڗ#yv=f_@Kq+v%Z=A3 O 2=__nӕA@Wɤ#cjf(rMԴHC҂ISm;I˲UvTi%ϰõ}?2S8봎]HwoGiP]|lgry o5di9ƪb,!A "s1K0˱\9I gYUu4ay]d1cFL/ 9 PsmUnpxwGZCp_Ry*1c\va ״lJ܅z3x:JH4v"Z7~,)מ]2U5͕o;>0'Q&*5ZM~-TF #Rý"8t9(qhoA!q$ߵ2v{ D$aAOE*7&nk .e+U%؜u jVбjactOB-C;=Y|VY΅0% fKÒZDqCX NBSR;q/OLkV Ozm!g$)VTyԶI (Ǔ6ށQXL P\Vmg7'@N|nMpܤivaj(D_%ڷ#jxOlh>0cψ!v ~f⥽."%żtS[ HT2!:H =L[VM)sa3_ {ci tu#P|2~d:\pO1H`E#8RR8|(Cb./6fRAYAZ<rrCK:/y(&%;-$0`r|[|$(l&fFL[+hb4f]֚r}IřD?Wg1$|t[!{H1k N}kxK|Z-2C)֍o燊E|m낝ROH(0+o%9$2ϖ|s?>XfvƭNRȧlt=ZÈ5jL@ r˔]c&稘FGHCUF-b>hbŌt`l7:"2ԗ՘KR=&RnY0DCZEH&=V(}+pTshT׺鍥%jm/H ̫tid ."lR)O|S#1"FӚUWj Gy+Mטeb=%)Xz m` }^x3:J}kIQ.U.AIIqAjL8ĸH`pX+ +zX8ՍY0uN%ܚXE{>4ٚgJ#Z ota#@G3s=<GpVSToy_Ȃ %å넮~'?Ade$%D~7B)* 0//wi`}43TBrr3)28͗m"8NJ]5w>,}V .dٽfb0RY "v Jdkko/jhU_CkXV'xqR;?}6Aa:~7"'g0' RiXdŝ'Me1~ZV EKdw7ۑZ0TÊ*pԌ QJBr3ʹC0 6 G.1ntlvR}RFUk" !-WsDF$lA+Cvs%{T#6E`B]uw*S @戽rZd+8SJ*`QN PzÜNݣ?2QhҸ>ySTD!4YY&Oh0⣖4<ȑ(Pk`S3 9 DNO \։(4k;*YNw BRAWC ^~!հ߾K]h~Dtmƽ,'dtn*Yy ?P. 7}qˋB.^9Dǡr$zpǽ3ήҡ*?)&95`߲a,GR>qk#6ILMCurjA+Иk&Cd  (/JKgn$ f!E^պ\,MҲ*މܪ[;Z31N {4UZJYn+Rq00m뺽NPNE.SS\qg ? X"n)Gue2wo0hz0Jc>5NҬsѱ<\M(AS0WvJ_-uV9\\46ĈDoԟh;%ܿm q>8%o)wnVHHV|8^Qvӕ f4epBD!"%|uh(CV#aݳў,]_f&Yh-dLG*dE[~C _szwX`&b:-B|;Ot/GԅHHID]1VOXm7.]N EHW!ON4f‘ _(`af;ݢCsh=@|/v''<5hrkmϾ/:WC@ Kk% OOܥ"6q >MAJ```^ %#L ?3dS_0:6{$| F`>]c\ ۯ[C7&Ѩc՚*L5h9ad _*w_|{A !̳:Rܬ+(z8g$ KEo9 "ӛ1^;vsn#E""h7;1H[qF|qm\D-Xocޥ@Ss'eU^\7*,G?Y9ٮ.r`QOvFFV Cd_cLПTǍ$Z"4RԽ^wdYl^71xċ~;ǽ9 LdP EK 3 l,ց~?؞s1s&.T9[0GipYM6 n؁̶0|uM$..hÔ"W (VI(Z%\rl`X]C +SV#0{(8ɇXb>*Y"ccYRNp LLEC#V4NZy~z66@"gmo=S8[ʯ(gcIgC  ,SB2s&Fʡy09W#A‚TioL_Y,wCtΆ>77}Ҵ;_Qyu w-RaRmh{n{ ]I;2 `?WTJ|'ltQFї+oK7Z0d*.Ҵ:aG8Tczz f2/I,0BQhz.RܓM( "|,h49sCzxj|#W(-<@\+2uW8_q|c3:l f;W^RjU[exNmAs0B'ex O<{5e*pk?Yo _V 0A1.CўzYQd~ֻ# 8@#NaoS߱nL%s,$s%nVYPՑy]禼`3(/Ϧ][\0AIQSBW*7>'Ug\JT%e5hF |Ğի]J1s!{D ðzC )hZl^ȷF J*e:&uR@CYmNѹW^y(튮q2cG_c*4r$*紵:baX"<\]߶&?;kŒC V]~o>a(R߱+*c}tW}>!lQiKKwewj*wH!(}Nޭ!1* gf(vp8V_HcX{zBwaƿ|0ݏ/ko]uዲ tu{B>$8A'f""tByI9(Ƀ]nfV4x9P?!]a( BW&1[?8}e0qb6RQn pI2uhOR+։̝H~B#OW zxJF^C˨<*Ne]V7e{%Nۢ@ Ff~ްp )2|dJK8LxrZ׼ދ'r|l4*5i>׶ۃr+'f6VOٸxԡMTa-DbU[F8..Wls ]O| :R/̎M `/xr0ڳsQwb_҃P 1_ 8pܞ3D[L9'_A*q%49݊DL{cxa4U>gxB^S3ydug0q/I!4T.F<Ƙ".Ӟ¤~"c>*-,+,;WItU#PP˪|Byf;;L*vcZ-ddSJ`{EYXoFlX'覞IaMލ[1_.px*HcG~#!1愚K׿\^%aOnX-$oro|+εykXDE =p # (M/6 *-!,f/̸Xb#Jصcng5D#T2`f!H$er\caK+$t@… 6!&#ȸ dUѻ;ʠ}eqmhgRrdvW TeVOUO"zX>+lE'>hqw;.w]1+haMUIxʁ} ~|F׸ӏy"S-/ufBٞpL>mj${=(v iQ;~% h;"Oqp/h5->xx"#r~n4u DQK,H56(6: wkU؝{[E Ei [4Xʨt9&mk67g V|bj<5ܓ#8 RT^S}"Q@#Yj^i4iAL𱬇#䟦زqY>{id|? ;00.8?2զxdgHPZћ+ טS Ii?&#@Ꞇr ։JڢqH`++ AӶ]ƘzZx+'>Fp?,y@ `ΕTc-4~FqsR$턃;}F!tԃa|rH^:1ͳOLJ'(9/?ә'`y+?9hU?*_QEX0` Hk/0:Ip|<ʧOl[oő9ffҮlsz%&`YS\RVpsU:60I6N +PbYH82Nۏ3m/;=ʝkiGӡ=s8b'Jw@s]щjQ 1򏠬G&ap_ɹ? h6i (- 2XPJU!N%L2ZWLW_/3'ϋyEu] M; ;IirǏYN1U22x[0vg5gCq84Lw_J]s|ӕ_nv'#G~ǹƪZ𼑖.t +?6TnP?:4ˤOA۵"SL|u| a꼆@bѤQ-폝˨-i§ i ._B뽬N?T3'"Ae6^WVCGwت !iue1qR'9h:yіڍl[YLoip; +(OhF=qTH=C4GbjD"k0 ~O"kéOK(T-볇ZI8[ L/\R)Վ2pn'`r 0I7#^Y:S) X99.]Hz7@HhrTGCԟ=8*Tdz*\L&c`w^2M(]qM$Ӱ UB]9NU 9/)JJ jj .sydFt=|?.*M>6*=siy0WFEx,;X%8y_"Rs~H u[2^\ɺN[!x"Sd0f+.Pznhk0j9ݸ6m *juZ 7;QN 1=E3$F o|w;2:M_pd9c0B+dШ/p]o6HKu_߄,0laP%NEh_l ʭ=' ya!y6J ߲FR"$x$ItwU5z_;*F[5oBK]ܿ%A;tue{Uy# z\VG?TPKwid b6Aݶcc<XF nC& } }ꪾe_fDor~:hTQQ$]1;/0~7S. i˔ץz:>~.8d8Tn#ah@\(DbXQ|fDz-A 0C%1>: .p6cC?Ugoڕ#Y0CJ3rXtX @\8pWYpSaӐ]ѝMCԴc]- b!rR?xx-= >)Ԏo$U|' xYM!8yUo?0.P耕uꂤ!f!:2}5CL=hbӃq, : xЦ)MryO_+EgXsQXm61^UWӯ{.De5\;M?Q|Dc EDCcZC= λC,w-&j TM;'ga5O@6EM`>&G[`B.ͮ5BEe\XM @gqu:e_ 1}b=WǃD1\'sXř}/9"&.v"5U Xx B{)",Ш˱cq"l؀s/ Yd0Rsr7v/W^n/y܏⏭]# d.C\KE\A:EݔDpLo,bդR*S߆zuZvU9e!Ypkf HV4!r0VXtVxgUoEb](^ ut}#p+h5  axz0En^Z|Ihi ڵj9Q w'ݫ=3Rr$8nzWswhf/b獈(Qo"!XYbiГKTp[;0[ѵ2}uRexl>"2l%e:PA2Pė#9V\3o[Y,e i|58Jr)f0C"bz0u*EKj{Cr9[8R]AL n^tDL4!lCf M:J)w'd$6') u9?ԡOBQ&|'<[L$dGppcrmΗ)d$jZ.IԽTX cU {dv!H/C&E5Cp.zp Qd?@` ׾f_hRmɣ@TseՉ,ι"A>csT9`1mC~z Gy9LСitucJܹ2f"*!ckP)rWSl']'_r@ش*\Ц~K.])&rxn(YX KI.?yw9%@A0[\j@حՙX$ Go HdzL=2wSDZ,K(i+vbTt~j >"y3w;t( ": ґbAs~ ,OJ*(\CjV!qhS:gc,֣6P"Z< t3 AWap o~)ȑ#ʐj[g@}O d(1'wu8U|=)5s{F>jЋz?~<ڳ8ڽBCOD&U NX$m !KTr M:iL -7nn3=xd37=| m\_c*W/bD]:k􇋛D9wbRw9z8ݪ]#m@;vj7nj>loC+p,,BV씋JFeYh$lpSξmwwaieȨ XZ'1̛(bā6 3V_8kH\TuBK-&zZ:fxhBAb#K}ozBe#p8. kܰK5ֽjwgG4KJD`-C^ 0ZƩΔNN6LyX}ߌ򔾁4U7y{nƣªW8)y0 q?.Ν=Ρl ,h3ExPbs,+xqhnpo.'$ ER'L,>wv+gVٶBmO 3i|7\ařd,H|wB`,lySEpm}B`RhP;ia㿛OK. ݋ oӾΜKaRH.+VZOX1$RcvF/!8ħm8_8.Gף(mP *gGb3f< EF}9PѬQF"M?0p+sD7@crJ-0.Mw25`WLkf+MA!1wH8hT]q.썹~6ý~9lZ {mSRgPX]e\@-}JBFY]=3}²e@ap=%©q2r͎e,):ɸFtrMI%>GQ)^ 5"DQz7Zb;-͇p\PsAID !F5.Z]\Z[KFgMtRcI٥QӞ=mpw,^[!38S9 xPA;;/Ke}gaОнˢaZS1tO֥rZiٸ Pl _MEr7Re8R~^\u'[_Z > {S56;w#F !F#Ua1Zu{QГv?Ow⓼s;,3D gFt`wklt/y .DKU$3 ͦ΅M6⾰$GxښH]nևiC=EgkZ׈JUr% בBX 5[Fst^Q86E׿t(D\:OO f;3*cyY?p#agFn3*o1Uֽ۫)ag~af:BUm#{Hǚ?WJs8x[#T8S7=lm|ff#hd7m47PJiGP6{jܸcH]D|ĉa܂ٓg"|^^hASۼ6vyW:7^A )6"}O(0v8̱[ (N2n_ҲpzM N_ucp;lj*e0*'2HVIFQ46F7m1i.Mue0j6>MV[; p%еk DoVȽ}Lcߡ .A60;ƾ{a~Чj׋j1b':Lzdחƌb:}&KÐ<)w XN"/v筙jX"ޫ~P+/,S})](M9Bdz;\B W QX)a.g$%/tf^a4LJ7'vK5;kɞF zWySыEQwMdIRG9=~9ݩztKc=?8+.)(@l,2{ #.l{E(};vj#+Mi=Gz @1qa>rx=6WqVZ=| :rvFT\(8 ^/w!{5=D*"`^p0ukүmܱ874x@nT`Z|!%[At !hN070H.N8=SMF_N>ar>LF]Ak]&hgCh5X6u IHs4|HcT8hcZKlr<&~e.7~"K{pqNρ qQ[B:U1fC.do!Mű`'ņa"Emlfp-FQcFφKs4-QӮҧ& #,Zvf(n&Ѷx|2QRjz@j{wɽIYGo%@uiޯ,po0q|5BL& kLiZ 9Sn"DK b'({@4$ǽηgx't}YO'؁<pU`bCvl1`h&Ҥ\1p{\$Y G 2WQ\Iʊlm3K6b.qϠqCd|K)蕓lG r*:*5Gs5)*;iy\:۾G_*\~ `p[>R<-+DgA +P?}~=d/wj姐.)* ) Y9˄Uxjr=!5yn3Eh8Dz)g w蟮 ˝c6g5q!M,; M [[mO:6GdN/q e a>^<}Mr%cjP7/77IJ8źc洢9,3PBף_3a W8"FjJdS~UȰGOrguق9g9B.7Mkq/_DU- 8s‹&v wv&cs$WkW˅J͙se xXl @rWPM{><ȫztK`Rv}ũ79vlڂ䓼c3U X!ADJ`_c V"/3Ɠ7{\X@}[I:I2Vx'QF=HBMvFj>КarӥbXt6sycZ1f'ODS", :BU;‡̮'nJԮwŬmƙ e=Tyx+lnV ؘ3b: q}(5YTudQaҚ :xQqS,x ^fZĔm ~?(!]ۢQ''„WkѳS_Sry'5 鴴> ӲObC)PelKG^CeOL z޹@.S6e@d3lO$Zq ]zl, :AmRWT/oWrR5^֐OֱR%4{ߜQ+[(iR%4|W Y`汳Gd@s3ݼf/m/Fd94=:746 6jE9Dbo|"}\ABL4{%" LG5v13F^glD[[@cMπr ҋbK8Q18=n.%Q;$Hf6L0,qYGF[sb=2-Q 9+`Db /|dq gzxc-_IB،.vR/9G<># kX}9X Ia`t`)p 8G_F޴W(Ґhe@ZA^RÐH8]~ H "t^&XNx2u r]>(#-q;*\[,_kPŔ"z_?mߒQTцDnK<^&o9fF`؁[!P&i*da}}Zg󆛔9zp#?p<|_mFR"Pb. E)``YPmx{n":bw nˎ 3h+>to@IqS[ۜ3?OpQIݏCnBCӧӠĞ?qؒ1Z ͐ݫ&N |C^CS4tPdS⁠-xxTnXs(vqw}lF#4c*~؋ٚ#lAB$#i#{ؽ𬆌HBOipkˠηF)\>U&UuOtq Zuə@dn/Xy^[cbKLr + ^6q< |K7/'V: S~n\6@d( f`=sn6ý؎[AY EOrL)hIzN2!W=.R`@:U&qu6,[RB[P@qSǕ_Cf=X91`90V[,mcg)%7CM:Ҕ ;oWɀ7X.5˫zPǵ P,*70vL*8?{fpPiE}y3:GF3=c&ߓo̓ yЂ*S3nuPFsM}F3>;h/w @W2]yyL*)ٗSph4^dՑw2}A.1 > _s.?dЅ#ƧlYYj1Տ:.o83ƔydܩFȒ(9~4*ꢋA\bS4װj˗p C1Ԃ楠Ob nzI4,dP^flvw]gE|oCZ>ph_kaϛK޶HKfIB:ZʾWkq3Yѯˬ Ы"Y=х*U|ۊ; R!nxaZ &#DLGܩ*cݤ@96_B$曰|}jTBtwǿ)DʔSz^5o c\[5xm] ]O Uv?@{ޜ ZZ O7tq :NzyveGDod2/zlc}li4 Y׉ظ$i!! I4nШ "ocv d]rQ ׅ޴rAՄt^yHBݡ[ywSIH帜pSΥ5z` =9_xD"1Dv?.N &UeǏf/&M*y ;S.XO^Q^3I BGB8+. $XD[U ?KIΆ8o8YTTD0& 0܎ϒV=={i % τ:iҿo鍓O@m#8izr3]G1k|'Th"vGU.?3ˑQ]t; ~NܞNK$qzXV$ <}'MFdX1DPvђxB_˙a믾 QadÐks7y ey!)8>N'ԟˑphZ"4H>T5%m,Sk©N]BҞ"'Oֽ.@[BGfa`xym(% ~>ׇ|;pP3vAk?]KYsHH52SR[)kpof2!7 IO|9ڟ%7ìD<@u|~a~Ο}:XS>3$xUaѓ?gv̚P $f!٘W@S8:er Qթpȱ85H\W-f{[9uxl8?OMG2GF֖/S٘0)͚EZme+<KFjJaGF,MģZ>rn!TC gde Ĵ~lڳwĵPX5S~g!˶NɮZb*/hGgry-R%Mw}x[9yb{D%\١Қ`r`)s [qݫȕa$s-U^K lrcB+ d:v=]"O]Nrc@Je`LؓbyDɜnWCuB@;c3;ojy;\dv1<1ُS?`bjgE|{ j|*o:OLIMX%v Wk:#VAҐ6 3ϋGKއ{vip['Njxz-܋ȁyj1au^p S^!sAa &jN;-Єd|T~ yg@Gc]d}dHӱ /i.ƿ2 a7P\TzO<]B*5}t2gWLB8D@L#gK;+|r4=FY( CJ|\_7m9Ҍw?н*|U ax_G^H‘-1aN/GnH`ȫ,֜x]-Zg{0`?E 聽?xf '6Uk;$rH,:VpJvrbh9d qFlv 3]jВɁɖ̑Xi;y͇*K(mOyL‰P`6M#@0_kM4/Uf 1 >2DS;)5(>~S~ yq>$:2C=TARA>; Nϰ6NT޼P\!9WےpNa{A$.|~;pp.M6X@Դ"›KЮ/걜 ];ː"*"t qBȗGoEcx oduP)z^ݜ?|55eF+0]jz>A<,o㝸"R,ׅ߈u]%Tpɺr:0 {Y912tzY'xO|C*^}1[NR&Xi #n??&E%sʪZD.K=^JnԣaT--j( RG]cg'T{ժD23iy`?lP00"5O ؏W3 /37F]`xHQcDK84~j5䇰jTe!VԈKjJBs4:pY!VbR3JiB9肺gge~Zahyy.J=p{uG.)VHK[moݟdRD "ZWd) ɹcWejr ?X=l^*D&>: V0ω{b`$Mc: Xא`ӂWMݒ"XC;=2㗶0>$ ? xI)cdۧL@yԆWwe9Ze?F JLu6iM#6e`xMz1֔j`eg܃G,ڀW1ԴfnQFR`|ڱ^T$‰廗<'~NR:3.P9IeL kr>*;#Je(,z CXSH\C+~o8mgfRogLof"i U 6@P5~G>pJwkșѓ2M_J8"ˊ^(irV.Mm,X;# ~dNe;+k gxЯ i3D?L\فBμ4xC/-`iZ d_~~;~58@x 4+򁨺rX[ï*}+Kz>ųv2M"",C-J&Xُ~KCn6"ËDe3RYuNQ`AV.G=n~xkj x̞݇4leuċܣӳq:jW4)K:kh_C `a*_V# i"8PޮLQ6F#7IRZ4'j ry#ThYM 5,G5"$q^16_َo CEEGu4pp%U5Т'Z ԋ]{*j`7cK2*n0cn@yrKdEP@=9XFé SF=lBꉩd>JEZ8G=C-,3 )xeK%4IT t`x4;<> gb+Ws!Пf#%*ƭw ,T䵖Y~8]nvJT~zc7e9͌[ j]Î<\/ɜF,-AR7q+?XxITʄaŰ,h'uR(O1r,_>kUf= t9'@2%Dؖ!Ҭx %F;C ڥd4?A t"HLgD~FҥC/~6of ,̎Re(sZ~bmICt%Y Rn0*mED %J~i'ϻyʲ S4q<7KB[I<ԂR6T-5!J jMA:d}&jΐKnrgk]D3^Ar<8`j5TG1gn CӲF$q)=Q&zdzvxb4O_f-YD v\wk!ޭ@|G[LI8{Jp1q*#r)/3oȔ6? olvia=w~l;P*92}PY[磕Qnc_ h_K {G3Pt'|o08pzZplow?ejG6@ ~L%4\ws4f h1&荕oi{I/Mls"\U|Nk&tMz⎴9E[.A'JU6J/ baI\ ҄JT9+@ۼIW^pejuyYMz439 b=d(e_o], UǣPBpm9&MO0軳N,Hf1bfEdN~WBZ38N-EӬ4{u֫M@Ƞ$EkSj1T~?x1-o9<71 P[+,bŚo O5q)\aR?3 U88FYӏEkAՀ6l-:fcM3 _pIΑgu xG/ 9Oj?\QID{x7`U=|›9T H;őرHW+$wQ{ȆרwgLq 7Fl`OlXHI؀ΊENuzZ ӿKUȕig@36MBҐ*֥0eQ7y[G{i AHr@!Fl Ҽץr4R<ցJgLS8 TQ_ !y5tQ}U1rHJQ7Ͻd*qH4EyʡW?[]2ͽzc$A}RpP(=& KG'r`]"#_{CU5=1zB^@*gP肛ugk|@aX5mףx2wE܉U $žBG>mznvȴw 椄)̔ETKYsSv=gYuqō0t_.Oc*R6eQOI[,}xt~QvXn SNtpA!p|'~_u@Sgt/TZ' ۫7]D } Zx QB) >h"ev _rlj`Z\:‡RfCuoO2`0>ݢ F+yz6a_;4D޾-9eҊ8;Sqhc zrqY.u:Y;u$9@soEuѷ4D;2iM͋_8yOY:xa wX Ja@\uQe&8C}(o?Xى]=S@Cz@چq'FA탤~f8'lcdЀ!7!CC)]Zb"rZ@ݰ s-)ejRO,GZ I/bZcr5?뀳jNT$ӻѲCv^-*J0mS$׍hVEfl\dHa>0g o!)|gG0~ B.Jc_Y?>w,YCKݜ6:E&j-TClO@QQH76a.6WLZWf.9>Q"T~ Al)Pw#jFݼ '4$n432S %&fOB-ۍE+ 9yq,|Sc()7eJR:~y+ vۙ z\0! h6x>kHp-9wukOhį|[8ECIH0KJ<%)\'f.*:Ra~lR >|;"7Wҳ76TU%%fQ׍,c´Ye6 ܣT, 2Jb8X | XbmX>K?1/HDY$ (!sSRdqKo8YSQ>/$O$]!5{4UƂ$y?LSBsrhg>Sec0E&TZ'JNJ€ZC~ݧ8*^ 2_f߹zG6vB}L#TN#'>^Ìna^p|h{J4R\G(f::^{h8uo#=VC+.(U9 x+_!^yyu;fL>R nw=[KoaL:`)9SU؎D­1~Fan"LtHW:*Fþy\hw@%oW0-"u<WyqLR]Ot-_0dCNjKA2,rs1E1A!\Imc]ГFN9~ac|XAy<߿ 3f>(ɹ}65B#ߏY oiNWe ;HYJ^6EZ Vւ\R HrsfAlvMý4YN)ULEƏ?V;o):>B9<3sj1$ 4kҋoV#Rw'!O*5D̦W2>kzM/H쟤GdЁ>5W6VΘܚnP d|>q4}R fKVgvU CXs.U{PT~ӫp|Nsen)S|lxEăiz'G,(p-SLo]PxΕzSPi'xMP- XjZsֻyAz_6NlBI ̸fӄ4 69<=K2C yMޯˮ401fy?j^E>*d7(6dKiB?$a$bE8-a7QvBt~ny o*]MV7` ?ꈀk`jL}NtqlanEg4Nт+ry5Փj-7PomohlnιeD)8 k¦<ͦD(= )4ZtJv<֍D` bュdLlM>yBƚ5T,WRKLJBea 覐0ڑU1ğCC5CYZt[W%vC۾ -|]M3W;숂xmZx!$ Wr2דJaI0sM` Pz0G'v]Wh!(6Dfj@yYT^jFmb݌OS-}?)KL䆛e﹡~l%]O9\)8a8ˆMAtj7OsJr)h,Z) Whq+\ H&FWd!'E֡P'S..ʚ<7srgFDy$pnKgM߱t W<8]8ZV.ڊ-} :ړ)۞uMjn>^bx&mS3'ELM#T(T`wXkO9}a;+_GnZlj~A37Xt_oCes(!iO((ۈ*2``*q~'/K?qE*[.qg'LI7=Ɲ1:c7W{}(] =0h/D\qI@6č;%'=ngvvmbӾ ,/MO'i S>{4,mu㤲93*UNd0!C 35rQ~(br7I W0G7  {؟uoG`2 }*yn*rd RhV(u w$a>O4hQpٛﹴ.pT.: (OEd!ܶbPtEI8tT;{vbթ0O~5Hî\U﵇Sf^G.PT Vgf&yFQ ׉opP0AGYS@EsDInD~7`0+)LKb}Lv -;E S"p:g\2M$>VFБ]He `Q#YC\QB]o l98EvY=]v8U5e93lLT[IãɺS 5L y>޷i%Q_(hisI pc޼/ϱld:h);UB!#o][,]NLvPg iNˁ,1 \`&p?r߬8/_đ{ u_lpMGm' FdWQ<cB4,GHc|D1*1qڀO\d 4n]9"TJA,qio3A ^Vh]ݐf3QxJiW cJӓʸ+?{B`AZo-G뤾[L"lc)xMiN,а&C5;>J]a"f3o`k^.Uak…uM b*aH&#uW;,hfz-Xa'JJBr7<*}b"!&uA)QE׽ΐ]6+X<^w- l Uԉų '&Īȍ >J_3|~]80֚p Ċ#d6W?kWtKNu M ջovTe:=~?捠(T3*Dyyz @0&:fqk0r)pn{M")!eP}I=߰*%Oi!տ>ab% ~i_'FDh ri=-Xۜ~Q!SO{??(AFjT T 㨟x`P”ES>)3VE)uZ.^Xx)?U~ELfl ~ZC`A>SDAg/%=i?sSLp@𝨝x4ytY!,&B1 a~*ܼFr\Q֙|"];ǚTGp*LLǹd>ł6` R`x Qmn[hVTw.̿L ! W2+c&B>P੕\vCVȆwE>{>}#b{A>/DPdE@w+3c^Y^nh!'} 2N8tt."e ,QeT{eHX9BP j z,)$NJz C<å(RZg\[hK0:BmAn35GVrk+cBG]^Fُ,&BGYO+s8J a:9{dj<T?GV<."==V51/&Y1Ղ;GHd7l:.7;BawHdf"+_~f+aaD2O & 2?DT|xtݴax=LT۾t.{Iq-|BbK|];#1mqUs'e-v2Ui=Q+H5CwkuT>A֜6=~_~֝q(ߛVUgr5#]5igN7\7 `B 0@ ?Y tWىR^BЕT{ A nK] z8:jޱ=BJIkXՋV@fRz8M/F {TRu!՜):pn k[(LLs){U!CجFZ8`w6 _ڽ4QhOn&ADri$61?ųaL<`x!iEVI@=@4\*ػ\l*PEU\E/xԧԵ;* rgͦm(tF^KL#Nș݇2_B @abzTr l:UÎl 1{/14PF!0DudSڅR֝z, +J=^cUT5HPPЯ\&Dy0Դưbd*Z\ WH O-jQM]Swݖ/>D,+\> TJdz>4ħ%)34逞;0i&D-Xco W .KpϗV.S6]k<{7*32FEmmB }4S9%`F$&eW!Y h`%D xr t4"$,#)x/LB\οֽW ~>jF6 p_rɛcZW ~ ~:壻ۦDBVYR# .io(9#NIFu$\ iH xfK^Ut%tu(ӣcgH+"M@?IT$FG=X]/"6J!o~pFVDwT<ZO;S atz\WȳO#@u2=ñ,~4;8_Rbc"3 8xȮسe;UA4T$AxL/U#. hRW@[*`Lq)-c:AM =}p5"\ l0>5Sw+84ҞOV93^_Gݏ{NdT6ۃq/lo%)Xu#aZ+`ӆ`C0}<٘W IƈN#~'24 K o8ҡ?n)ڷ`ةd=ǣW2-/a{p { (NN[,w?=zSSoc>1L-܍?V!2Q|^!C[`FMK0w$$AV G~<;޾ʍ5?,\11H59H7x&ƳuM+h1;_u:1In !/w* TV2pVc8wD6;/xSŽYyBl%>Jx*)*rWYL}Mr/nL ^iYz9\b(lF CXsBrU-=b.MD7xHvfޏ]fkt :^݀R^N8sa#SvUVMF4eFw_Ev: Uo3>6hi0'!]pSkLPQעR<5w7&ݤ3&~S0~7KJ?LPzR~\[$U:CzWxkg]],ӷelh-2?,A 'BZ?DZd bbp83g,"q vC#W 2!U  <$:L-پE\{Gj$BИwp ҝd-\ݱq=(5EPSLdK7ܯ"`]F.@\ں z.].KtY92Rx@ p.M|3B)z =&2:bw+,̓(V~p->=_-$E (3gV`8wlm}uOR#XV%>zmI]^VdTG4)aE79Y7BOT);$߁+!ɢjP42D=2D*y'M@\-uJv5f>u@7qr9(S8‚rl-5Lv㣷z0/Ej[ߎt90o^g-=!`6^I="\Gcui^e% ZB 'iUR#ǁcEX0ɀe)dׁC'$%+ӑemgl`@,~)'AR!-Xli`,G#'ҝ3kn3UM˙IA4ƒAZʴv nY`bIGeAa=AxHpw ^Ȩ~d)i)5U"fޟ$=}-2JzTZ)ge{{tl#|R|:ͨ5oʤJ,4K1uGW[zgZV5R0|e=_G5?O$##D41^$/S2W8<sۍ'/0.G*C5Ʉ,|X,&TJ\|%ysSf`ߩJ7*#PzMr7\ ІUY6&N[FW'6aۉft@:)j >z7uFQ&Zpz]ݚ 43r~ nLCYs >V+HeGvl%\^i  - ;4hWgӊ~au}i U'}tl{ߖ9:ٲA=R#Go${&eI*,6Vo5xXY5]Kr@1"i,*OcĠSo4̊N !b:T~^א:EY(aez?SJGђj}KD1[`sإ, HhL* &*dVf]u(C> aQBh fWjt"f}:ptH"hDe|ᣐ+|PQ 3Ex>$P^F8B(]H dH\Tw~4TU^H Sqioc(\۱@{:ض&&s9 .â`eef>ȗJCN+wь d蘄=DB%@spQ; :7i% grb^ C!= u/ݖ犇XW4uR]a~9p `Z&QQ؅A'ߺ*%N(; HI.QLz(}^gL[F18m r.m5bڦgwau˞Ȍ\FlKdH Fgsomd4 4p  `Ngz8qlcD_G'3PϠNsQʬ Iy0 P%myPCe~\ Z0AJhV1^5w;̒Ph7@# u.E?"(W1F0_JZxu>SVA+@2Q2@;SA^8hyľA)F6G F.'fb굖?J1E `Qq>1rAfqi1^,B5Mp oD(DN[Ha$߭0ky\rwhk!hAVuh<]"dҍIMhIv\VS>|FNy)\5Z"abD\MEG0ˈFjxSI˜N| 7I˷˟*E ͌uކ(ʞʣ]>O5pX:߱kYR a$;eޟL5`&wI !)R-Lw.ְR_E2y͛7E2ѿXc9̹ 6P| rx7a:[1 b"xpiFӠQCs?#Yv|vf|jENlAcaS[\xy[ִ0jJ!)&*+kg ްq9:G W\P~Cd{%xt98s5]/eS7;ͯ ى6ͣFB L[iGBm< bU!ek FxDҾFߜ992}W7x,9;cl9K $%dZ܁ P ''6̱p|sթNLx*XC&VVytYPWDxϸ,zh=xOД>V[zv=Yo5[P_7lC y L$ n{"QR93(qo$ZQoV*CDNb `(^9KTj@iW gut+SXsdQe_%FsY=T5yRmU3紏 濻}%`g~%ٵț}Zl{yBt9Ko&xB0$ ~m_'7lNihLRh} ێߏw,iT29Md4Y0k XJc܋~ -yW O}޶S֗^ ވf@PtZ% E.3G0@nସz^,TDžZ,"2UV*"](~b4cy+mk(HNUR~COz6;GW;sv^ ;c-üʙhhmf."ws*^'I@k۾*EDSIHfŷ&Ƥ ֶc*H;fo{QoLp֮J 7hcxEACJ;nMʩgMЌc"g>'žRyr@)S3 D/n楣VNޞQ%vRf tS,Vvlʄ+x@n\D xj;ajh0|{O2\X UGZ+C@Ek\pgJ@JTȺ ss,+ٻs0k6ZU ƭBؤ[Xe`7/V 1Wz&si9zM, ~?6jby nU|mw7'=2|dC}6DN7>r{O$iigN/ÅQM 4VY`D@C.^J١[~p^X4bC^[ :k6 ]֏DjqGO菏s D}드(BID^YIߌu;9l*0c*1eH1m ~+ˢDfʪ\} k%^1*x0 3E/jfvmx^Ϻc<*\Pq(!,zڹ!ܙzd@cG [l)g-qm] Xb%f4Qܧ*b+$V^E7 z7fEaR! c(i M@g=N?H+is,Q?e_W{:)(d8m?m̷I<%Y| 2QPOC*:V ^(B“lD<˺oa}Ѝo^S 0mV^d*:'OnG2.5GIY!S]h ul NYybI.q7~vm=ko?]Ё3sX2tZtBw"{XVZ f&-aP׶x`JT5ãvOENtTZO }R@hN))No~ߖ;Wd^q,!E^P7)UsCkՃjUwj!yk_0J藬Z<>ѹ[0ЌqˋK 1v]/~~Y;Yq 3ds=X rw5D4g,\1PKˉnG!>p3X#ms]n_;.K3dxOu6k8LM^ٞ=#w@GxMGk6R@,Ə|zSh߶w.lpgKd&~"xvr-/uw!@0Aw`?**~NFts7*{߶qUS-=׼o'|ӊKGDnHn$Ԯ%Jږ&գX[@[v'S 3wٰ 28W^;f$ubiEj{jLUXG@`Z ,V/`Kٺ.4 )z怡/iíhbӃ4Վw+] 3hl0jlLjY˭Hb#vݹ5@7px|-` 7;Re쮴}d(9p[6OD1e>׎F9t@ s#I&B9Dgd%M,?#'ȁN QnjwEݰ{ڃD8gLb$ i)f zbնK)c#'< >R<p1ksgH[g:Нyubd r͊?O>6^Kɡj^~?DͭdXA<仸&tn{kB*F?O'^ .GhA?u7 d2&vGV5f3붭HAws?5*$RhF&9,2*gEf *)©4e?3 HAM'U@(=_d=\vnCjeM7Tq7N츴Kk2>ˆ,\XL,꽮P" z f{㮢F*~/<_kvg F>NvZ"` m^E1X,kn:h8WDQ{[W,AIk tHyUPdn]J1kLé>RSI .v2к /)O1TCԣf?lՏiUdTb ~УZBaE$#+1oMs]S>>3wA^.Ve6n4T<@ ]s=Q^  ZEc9;7@Gb|Uk5{AF݆x%ݸ`&F_uG`쇗Q!+lœN5Wn~[p>{(TaIX=:.ڹsĶ(L3!S1䜃]/;4mst@$[KC= 1!T ]̵I Ցkg+1K LOԐR9S]f 9tQl"Q,her^c}Df;ֹɌn1ًM?Q9dW'#ne쉐b@T=Owy.Z?L9GI·e&َj1TXG0|%CǚA[n:Zk67YeTD2Pʐ=XވC+%z8@syYvUS+ć4j >1EHfKg vF5KhM/_E/pK=r,Ɣ/oBWd?:=+><1'Q}ٜؒ6,Pd2kg(k=ZVͤh@ f>PҔ)VR۪y]={8F!ʯDNXe1Gy `T.GeŵmI$RK٤Amvf@o ,GDF9džb $l~`^I o4<ʰtuO|Bf_l^ٺE ~'[n쌄4r//WzK][DPBT_ob\M$> syL< b:ԌKzV.nu@cp\?]{P^HzmP]/ZQkģOkqh,dфUr҃1E$2qϪJ<|G5!$WS|b ik#'Put]cj]}؝~ⰙiMDΝ2@; cg\'cݙ>U=ꐏ;Rď8f ,2<5i iAcKu1 BNn ousOj&ⓂR_3hymt-j;tpt){i@o:6f ELzܶ4+e9ȧr4.lFG |P ůs] zC`6/PR <ْ.L25 =pr`6 ,Mc@{)W*U1i_>jtJd^e9 OAGh\k̯ <?o8ߗB&Dv$tYieʭ$8 M1I'[cnoCUux^$!ks87DL)5B$- T !Y=ЖM0xP @}fϏdFSKD+3Nqq < "Nyh=4qM \֦Eb>f?YA͟Pja[QQ@FncpsA/Q($+h Syʣ|'򗶞/ ie԰;nu bH+RK-g?ˋ>0^hōh5ˀ0&5l|x8A2'nܾ"ֿB`G"¾3@,Щ؍0Fqj]:,dyWc&@I#7᳎Pɥs&جZmMŶNs TL'^-NG1a #u~)}<ܟo [r&Lt>GL2Eq@CXQdVvY &%` WR칁(DH7i+hŽ._̢L>b4j1BJx<uȺ{\k 囍}Zv= $>~đgh OX`sVE!6Vɿ4(;h"{QŦ)4 ,!:bUZE#:*nC+^v6 JSCLe '?;\Po+T?O+'Nobsah8b gԊwwXg>TƞsBD} Ȇp\{ʺ[22z-{\@w̸#g ZXc7(68#*U|1HS '耧 M!lsG :H}Ln52غ섛KkH+f66A0;9c]c]]Af캠ۻiL{v#ӹOQM=CPKjXԁ@g?K[W,m5{R-#{| ,V5ݔSuj jF~(mDؘEN8*۩:UMSɤ}"r=htɽJ̆x4W7b":0|VwY?]'o{Z|ӌt,Ԅo~/xΧ4X5mzXIn>Q0%VrmL}(2Hlg p T/q RnU]w|V)TZ ?s\HgWm5i+dr$ 6ݼ>q Qͬ%_׼x~q­xܼ; 6v6Ntij::POAW2-))Ј7OG<@"V rκȉu\9=I 2_z^n"{*_d18@g4AAs}},"rΏ }!3 {17 KݱZ.5^f.nuK XWq/J8 |`ם(>}2C^h$Q鐨3W5ar=pDJe  (o%f| Hfbaj&#p%=zl' Tp$TU޺#{k(]v?Z?T.9PCD6_iP\6Y~m5@ 䭁^p/v3_WX>N5i;[%t"R55< rՃF;ޒ@jo$4[/36mC9F3bd=ϕ[{e4úWQ8lRL!}E}AY8Z e|-6#,+n:_')NzVyGI=А8HYOɜlՑ;-3!C7kMܮ[*dU&˦y3!}?ԀcD8s1e R[F:KXOAK@BkPSׇk{ޡϧ%eȎVWsq5q1e:RFH7uUdo(:K-fN]uKt[Բ2͑!1aB22 <}q20?3s:Fy~*dU18ܤwUz~2I]?ls[[&L$}i݊mi|Vi ,K#="?E[ Ă A>9Z 'HZ9%48!Z4xC-1#Y&|a"2<2(v)Խj.QS!2kǏ4{\^׏o}߄r  vq$!8fxLAV)7ާO!̃<>Eu*%v\[!V-$RdBex $٤~+ރlV \ A]ؔwXClxK1ʶ܃]LKNۤFWڪ|baK%P8H ׃tGqcًDZA.q:KC!')O?K f4Wce2e5LQӮvOݿ /U˪yB:2US!Mϫ#] 0)9T{6N젥5E%ٖ|kw7zF%~$j'Y"Ǿz J=38ȋ%qTV]צaL;(()="[ 7g5pq#/,woeN#Z4rna$ S{Ծ2Xҷ;S9he7MkhYT"HKi1\THQ%`-#3!#Sv{ ]\qLDy/oe6.AE>bPaT_k,2p+U<Ȉ zrW۝>QRy㑇 ȇ$7`lt`02豝 j8 s H+iGٟ2 MT6mQy3ibt69L3?bQa\ B%`35e?_Y%qō⸑Re,ÅC #f@ G7r36;Zh0'85k Ek!N;T#C㝊(1Ѐ&SnŃ,Đl+zVQGJmF7=텈iޱ/̜y{VKvd= \ɷnZu!ba~0||қy6S ]?s1g`#jT.ҿ͞K+@iI+ Iכ!%8SCW%e^,ܡ_5#woWÒ)?t+w:{Ap  vUuD82_1+5T˰UЯ ŗ;HڲG[p# {h:AȓMNjΨ55LuM34&Hr c*Qĕo'SYoaU޶g Fg';(Gw7 ,K~qܶٮ[>O7mb+G f{]؁G8Kj zCBn 4T!|YP5UTt’5!  7QDh~]S8ݸ|h83f1i/@'/*Gţa8+ʓ\d*\@p?3S9,'gAw hOc %$q:P7=ib lC~)79I. >clR„ؾ85rU;vE Z4p!@%#_,kd)^ #jjX '0ED M~4AwV9%Sa!1}cm1rȋ{ÀnIVf1ڠ0%LXg3օHU1ZCܐҨs mbVP;:}p4_MYDK;UK9m~>Ľja[BLQw #,W8V˸)+ _Z_+~eܫ =z'r8CV ԫ2 $2Kk׸J8TYK$=/(&i cp#XlAlTsyι tMFRbhl7yC ƦNQ|o(Xco!zSҖR/$<*j%4&bTqB\? `+xl R/U<HF0JKX{,n:i~!zTB!Phnj~Roݿ%wВNG)9{m5v[/!qY#&?'|R82WFT\/H)EɲqJ95_oGKG4ɾ8mU? $%+® Jm{Cv}dީџ*UYI=V_*wJw U,Op% gߒW #mahl=KK&$ (cN %EP,xq8G"ᅖz;lE/mmB+_swb'DDhj6ѬC]_@n$Ű^ Rd|L|iiU% caѮ؏U6{mWSguPzwLȠپ!q2!O=_atd)۳_tY&!'e6ჴNs@3 ydQ:ũf ׉m cR &s# y$*KRN i}ej¯ۗkQg_;;&B[uWZِhq_Igk,j>g;?kcC.Ƥ${94-{*}nLP-I]<ʎJŘzFGj+MGM̈́bv!?IUƈ-NtZ( Bjecg (GxN a5RYYl)T/BsO" )|cYGGG$z·Ϡޜ#%d 0߲%65t\w{FeBbVC%. ~~~Uy`wlc%5d/¶ TH=EI D4"S3b$1 DCkި'?Sq}DYÁ? 9C ^?eL P5Lڲt4|"K4)U/=̎e&yyP!@,VtAbw?K$k"vԣbM(`8{}1gKO()Ka7ݝ`YyTq s$wKo }PKL"jrJL::/0{T'VyYtCi>n@M}`3W} Uc1}CIE Q0H uq_]%fOҝjMIA>68C' EզlA7- wUݾ]ͲZ>g)4.`וJɕmH@p;N.2ѧTnj,"Y%^*w;=|"|B2W@S?2_Gm|b ra'u@{ͤL901<ǐ V^mO$l CKH'M- Ŷk9]d~VmΖ t燍|m ¤-ÏTf*u6LÝFO'oxӇU.:0v\b4]nʽuK,&.Ǖk]ckgż$(h\>S/Djt^&8+L=-DkUcnEA6_ nN#td +>Ȁ x}:p@nPX^>g+Zle̎-}YziI3( ɔ<|_3o$ -'AJƣ#9ϼu7l$8kہ>v\( h̵4eL(uNڻVR -n L6UE60٨5I2;ÖĬvkCɡd c7nʩUZ+ x&хcWp sDJ{/zѡ|n,(eߖ=.1"=%L/tJ<`a|7oYxtUܘ.9 ]R$w_ K߃s H*pi> Qh]D$X'4Q6/ HfњL~ǓŹrKF3cq/0Ѭ9߆iKo \ht_;n[UkoՂ5-7c]lf]4HHo%B[d츗K `Þzʽoe3ĺ-x7kQmI ە؈;7ܔ c`4v+e;ʖ5uڏӮ{j(ACH G%⯐rfPba끓hC,\ȩ3ށ%9qm`OxZ9IRl#C שrk5QDmd3 57P΍{f{SnK&ju"v<z[%#G;A{&V!7 ;2*f1w= (/wm5`5ә$ԜnHW"l-wTfB)5cOpܑE> 'qW%xGƒIt=&?,?ё×|"2Mɿ9߉w+qsC歴/!-KX9d*0{۳Й,AeuHwm* nAYJ%)Yġǃ?H(3{5a5GnƄa#ajOiz:媞QSg˓ 31ϧ8![YZ,96wN]Raxcod`'v#H{֭s bMƮ]x",K Q ow@f[} eQSKNܐ+3&>]@XByF}.5{b5B h)k/E-NMo}O [y0qg@usq~|VaĆ){|dEN'1Q]9Jn "e;Y7C߇%|ͥd>fq^/+m:zOL3ʹfn"}r@H- 6Òz#J82@:m_.Y2&ot~u m 5^3h].Z-QgEp 9G=Xpi8yݖG.,*"~pk&;^ ԞOg}Ԝo۬)+]K2Ms"xOWaGNkw$K2R'j>kx;sbO ١_ŧYkuwC )[ FtSGhPx8m/3G0+(55SI!회q?Tw!q|^<6jY*@"Seh 7\Rl:g. f?QVtۭ"5APβ |hgz"!-ҿ3"y0sUG,HfE$'U &hLsMWO4;D[I2/K phIy藮j}p9+Ǚem =9B3 P'^rFа ༤Ȅ9gcD}aDڎuf0l$X7Cc>\+K*.tjQޱ~[9tozhtZg2pC|p^3'w? MxS/ {m^!7G"4W'̓ tsVLL8;Rϫp*AHi1*h&5MGc)nq=Dw>%Pi2jWyYj IJgwp xP>ެ^v3ٍgRm?W5{7-pzMdvH/rT06nqv%DSc:-r`r-z`%#`fJr9Wvi(X24(h-85QXG]|B^Ŝ*070Z@" ͹Q7[w0a:`ygǧԌf >vޟ]A !%5aз}7N'$9ύv>D^k؏~+CW0PFi7|.sYt"Ko3!}C),z'pDynlȮ>~X?vIx7d" a"F'D6 ]E qѧLW7ȹ+^ My(k>2яVotĭ*?.-9R\)Ͷ x R6ɕ t[Ty+Ͻk m^TdR@3F;>5B zmN$h֑ԩZO/DbmRbvyHImEv"Ru#ίaj&EUyPa?`h[ Ym?QFmqx ~kPh oK^|H@F"S`n̛<Դԇu@NNIDW ltDXK+z_U0ޠ`V|RNh=d@!ܱ N9r'7-%Rm+\Tz7 &HEJg4 bXm^<|ĀU,/gRS 6;Hǃ]ީ;}ffiN2Fr(EǬ He_|[(U0RT#3ܹVˆ\; ޶bY'-$;SufOZ'}#uQU5T#$[' bUoA:z r ͱ' ~Kc'$jFm=U-"aiP~W6>ԗy+%}uK4Y:_j2m-e0zdf/IM6#A [b/-c!h@0.EOFY%4R×X!MZ;nMb4L:몀bh&o{U!??q1,@1}L%H?QT:ϴ&)WVN2:U&M^A:Ҝtr9,j|G/u) tR{eCH iد5A_<=#.<"RAV:޹wgfypk-"'4[`P@UQI< %\;\ȼUO+he+ Gojͳ4.)Վ|걯0GH&t5 FQ=p7a` QtYw?1`xMmjHi<\'bM"W1j;溃nTa#ϾT*Y1ボ)6ϺnzZQ͍ٲێ=$QG9aB Ң>2OiBje6Fљ~Q(&:҃u/(9sc[:*A]Ȧĸv8Y7>T|8Ndr$SkjggdW2w;|$(<ĨZϪ7alkD7I sʓf=Y {\(R7q5Ґd+1jjVpt۟|DV?اh~ cD\=gWi7M˦uoP\1D*{.Um!71XBKҺ{܆Xc9K)X<=KVW_qpkj#bU>1Ȏq'c%ڂBoPw߹@3T>03th X1@g UΰKmO/H K}( vmn]6 > .q eVh\QC'O+ߢIvebx.Lއ *q0|jn#1m}w9 ]].)p'-ihiuj, 9#Hņhm 跏M6tBDSnc( 0 dh,4U82G$i.灁s)֎jWiĺ !Vd$>:t[߂ @"I*ñ .1ywR:DI6Xh7c:p|[ Ո% wBqV 3O yߕ ίC0dQibݏqg$m t_xl`oy,(5c.h)uc5?̐[YD[!`\iWdG!=P䏜O1 CjP [D!`|l{rg]~8Ӛg0htU[AӴ_,Lʜpa9*kwjIkE#O`R@(7[JeLDߋP6@z-c;)yBr)sez| י%/#m F 1y"ў|W Gx̡f-a!zDy~bEp_p巫_{U ڙޟpװ:=GgCxXvo?3s྅i}6g6sH [6s{VRk>q[ x"gn1p*[ftRRAb7XV qдTJQ2QߐSyMcҧМs+}5{M*˗vOy} <guZOzhAfv6z6KD8R;f.@S^;3@_V;R_,O`@0o )ƕ87-k8")s32ĉ1 v)@A:y.V(t"0?>tuzeݜՇ/5L`H 5JhˆafzyȯY`rfUPSu.hHaQX tşz 9H_f2*ec̻h #)y)L }<\'oE~hC S5 1ZˋBb +deJ#3KI^6xu=Svc&Oa?E\dk{ v!.tv8s!uD̡XvF灸g{G;T,6 Q閂zC#_3+Bdwҕis6S.x%J1۲`&5m! ]nXdZƢ^Y[bl3(أ ֈk m t9GA{xӤ%ު:3G2axe~8IO0F2 7b8FY4g^a[5oF YmΡ w7PatE-3j">mtE'ڠm+q$%E }h7w+w\7}I->%n1:T C@ȲD",|=hgAͿXHu-khKcD~9e3)+=BTgpxeW La#Sz\-)Oζq%i3sc54Ρ `PÞ+z3OPLKH },H;-D9X{4CY~cS$.o)?38g n1s3v_a@4Gv{"rJG҄[N;8v%QJV4Y*5};v,kf)Yi *^'*" "Ǹy^X"^3LBؾEL4+,Hzgecl}{y~\^f3\AcZFj\b/8",VvM <9jXLb'HZ˴\SfC摅fzj+}Z Oo pn;wT"QƗwhm%B"kM9 hyaiSD{;4zx--4@oL6)E% "TLJgKLas[F7cxu4̵+&n7(TݭӋהﶢFQ}G&؋@C rx!T؉4~}Ov(`e7N9Yʧ6ƽ2zUiLt"=^<~[ܽ;G>%^\N_+(11uŊR\3i3s㦔%@IE/vS@ s(+\@:.z J'C sru;ʁq`CbgN6mÈv}J $U*7Զv,2&]Sw}$<#+LB)1Ȍq hZ`S80g?Jۥ[v/^*Imx`zZ$$5nF݄)\v#uZ1-HFNj72ɇZL-CvS%|(t穗knBE9=fÁĻ T\Fxs)˻ts2$X:M|+7W\N)͖ 2"%gjPx5 ~{I^T(&;Ch|vPe {_r)7q$Zs_g D?cϼ#b+Մ^fKϬ/[НaXz''* sͫ:2FtLV"xS*q`.Kbv!!3')ܩO"y DBGIR$*ewWCu6koE}۳V{;l Ka=~ƅ~(!/yId=#/M4)]RDŽ |P?q4&"P ݂4:eH@l pfVjNqoɬӜTLm;m=Kug=r ͎7rn4t<L<*v l0Oq%B _H Ux@vpmXdԠlҮL]k'3{[n{%hDCEe8h,;3q~ ?3dJ# ZW㘉K>ɂ V FJc1ecx^v۝C̛L_!^[tߺ2=fm|=$"bxTKm9ـ` X)k>T #x/<";P5P΍$h,*TGNp'ma31mPpO) cҐųS๧"us{T/4jC2|BSU t1)Ŀa(PGi{lk?>0Ŏfmab<x?䥗0!\V<38 L԰@A,OLSw!jP!*ϙ'ZMbk9@wNW߀~8JUʷ 0 V E%#<Jj.42_|U ;!Mp\<̖`ĸ-5< {Vǔ0#lX=63 [ |WA ̟7O-8OsVHS#Mj0D+ 0LѦ/R]jLC/;{e٠U(4E(6&}4šB iww ςw>Ow*T.=wɰ' j"]eyr KD>MV?rH\$"gZ$ UY2e}>\$CG6L8UW9%;?t9U,|z'Awg:JS"'&ީ.d`R3#rAzF׬#nQk7FM(:Ncaw3xB`7x jK3~$rLٷ p*bA~%4&71+_RXFNAHf)5iLuY\o4 NBF}*֜n!}B!/ZI㤤[T_(YFuEKc)GLcZ p E۷^9= 1>pa8,VYa|{G"Qf`T~ sj$BUsP}M:ND@Q F TCfOS"+n.:KoF⏋ ujBfbvxMO}GnI;:Գǵ]]BzOH.'F߶sA6GYy6v>~wP ԵOa%㯣#?>#8J."!ͩ: 6Lyv } /f-Nj"̩E /"L~f.5lGU{4˴~ \\r>S,Q wSnvF&Rև˺} $g9-aTD{/rQ:붦]27'Zj"t9yY]PA#!ӠPΏgΆfX*xG=d)=BdĠ8ʛ Ndže LP,Z 'ܦcԗ(Bx~:YӉ}u* .to$hSJpld [?Xr@BGim00|ZDZҁmΘ8Cc(Nn:zd>eL+_sa[ }!L|u\wÇdd)|+=99;au=9C &NM6i Zp'ZU`v4;Wȫ<^٢uQ^u\SThCNz:ru%ɰ?;}fY SPf X|U3>_k&OOJXf.I cu8"C"U P ſ+g^Z9|[Mx#̝SyJnaڨ8lf-\5' }0-kGzXTk, këp-hNj{4uS?*+&?Hd$;J,^_gӷ3;5ƤޣBǭyoCلht"UrE~Ou&3WB +u}qUvmYxDymj6)#%!jPLR)tJXGP瘨+d \-a:}Pߘ[Cj$A@; Ï^hpq.͖H+'V)zQ($(mvBv?T9 B[ iq,Lgtрcn\b6=bRg5j؍U߆V3T׬8ݫ`ky#3Q/ox؁Ģ( |I\=6ֿ " QmRxo(ٮ7g3LF& j >ɫ&}Cq;_W9;"RiVԂۻvuMZ8QXx5m J2A +oeԷ{_1MjD%N \T$Ʌϳ')Pй?(u^là)ht 7@Z 䪡LRÕzS^$9N:)%} bAtO 'Z=2D\E>$٠STXm> H6/ӬfoE:?/L-IIMˢ?ms^3~ܮaP=]튇 iKXupIOYMAw2P(Hq_+iZxD;fۙND|Z,#3TzKU2Vć&8hV9_bn<|?L_lϜ2("y~햾cb2[Br|}`픫T jdM75?d7dU ý(I{Q4|Ow8(1Gw&9û\"W;v7)5Bo3!U2 0q@v\tXXFy 2IEєus˽A},KÅ_Rd]lJ\*&;Cu>0}lt~Tx&.7JRUE_I/T:MoWbxUt^K߼d]DՔT "x,Ni$fh%sg5Tc^]p?(k8DVlE9CZY9'pʣp=VA~J'uP,:Uje3U5JōCAC\Rnrl?$,+;_PUiV(]F9`<}&ŵU7 -@| Cw3pDјX[*4 o>YN&cwt3(9c T)O|cYy%`; L1@kѮ]n1' ]WhÞ^LJpO `W(xV61Aw' }9_j~J 1ϯǑVV_y}21!%\!VDy뗈L>.kw1Do02[bmJ :ZVկoz"wa6J67$Nx- :3D0}3|+Z$l]=fg7 f4:jEF" cw- h4DSp6 #ݎvsv"FP*8ZkɂArYȓ9e?^Q4B!466Hqsn.b Y`I^Ʒ([M Bҍ˱YS)oY(n^W<JCr},{=ʚW]-6ndƔFEK*3\i}zHZm LG a}ӿEPխ1+r?5ӮjzE+AEM\- H.Öl}Hb%OS\f;pu&+%Y Թ+g+peO5fmJ939RcdE s(ȳ"~O;2MЗF754'TG=NT%GUY΅ng{"b\g@af@-B~o[qnXnqO"yʏVxS6Zyf/%mʖ,`q.AqʸaaDx1F i|;G*-0f[u\Ee ?,GYxrk^ Bt`O&?zv0 ؿ5_PNRHbYAZ.Zo8nR9jawCc0wmz/>R RRfhI?*ȄB ֲRU ]YxM51iE@P~l929Ǖb\oDD x^؊gko#š=-*yj"RI}xd l}65orF^*rūbB1/NrjGIk.lL.UtK'kDs&07OP4?=߽}60-Hơ{9KOTV4~!I~nj}b bB{Y 5kE,fZ(.hLҌRp nf-i䛂e| xolS [ >A]:jhO6nnJ2Wq䈧 JM Ḻ,GwDl^2,Axfp*Y2z!U/i7E5HJqR؊'G9]Z ʿCtROۤƓόb?ǹO'KFR vnШlc!E>>|bX+?[ũ)VUA#h>pW ~OLRo/e"cou4ؿ9YҚOi[U_zhٸ;WIB<7_V4ToQLUFǮ&e\p礮k[e2Vij$he30 K"y~tU]+^M&=MBq]5_viP,97@)Q{VLz9q185\dr,seFogkz9v}:|{oC`po0R8(Np=n0#Ru̳}f%ҵ+83dPgBBaŢvsB_-訏rǺ]g||3u1`ȥ؆Qj_V髋Wpa>Gcf=cҽО7-hB,F.RvyjRȼYa &ɠ5* O^¯X &i?__m^1n $I!l'i$?cXPb^SByby]HhKT5jϪ}Q+* kV?/!݊Yz7A,7MdPSn$k MNugj"BIV:ZruyK KO-vO>-fh`oZON` dbM%L<77aBúIv*)?730S|q"X=(j``4WP M/{XH.L4D&Wn{KSaJ}CՁ' Un0}nGx~TubY6` BÔ'W!%ms!T@;+UfWE$|1Mo2dvDUd DKs& X` tOKJ/)2i &d"W:} 0D6J5>a:@s#+mLf:qR^3opjo?? <%lO2VܴL~deHe114#i'@Ҹ-hŻcR0fJdmtKf9o4M$+8MiO:,1&oTd :UXwԵDMJa /Z?Fx .DE+Dزds/ޕ>;z7T0}\,IR1On Dw>…5Qx~7>ƀ->YJSYP XgZ(KͰyX׌6 fVQ9ڲfhLF` ep0'jy֣L7azlPOx%i !\Q0Fe~f>E??pp,} <9;{D ΣHO_Ϥp"S}ɏ>i4 ^`[3 ja.a~]e/GMdlMsTz 0h)v.L~L7\dc-t KKML@g#;H1ͨ,pXuHz^r}:{El q5/BaZdiE"Yox׏ҟuAnJ!89f-RZ#V-j̧iGg?5.3fOB᠍;OݖqP\ۚ&5=ܮoSg;M? K;t(Ne#C 'Cݺݵc/j-n6iA}b- uh;-έ UQu4LBX1$ S<;i@Z5(6K+,1am9鬥"0Çy#QPLR`֦3O1ixJV~CW]i=_tAy L,>j. fs#hFZsF*Uy%6W1FiC|Hѹ(~Hbi=R^|-ƃ:M'[Y5?.}sH&6Mx(kቚkIa˶ӏyJ "q= 4 #&{ N].|!8R[kG!\="nW{^ h1:[ᡲC{ ~̎{<|xS> 5ዎcfؽ1rr/`/FP*IqfCY_BZ~,ҠLCCfm{ؒ39"Fsd#N==γ;oV/7J~a̳Я0Po. DiYIs>&`` !+i[k2֤ >{6L?^)GMJQ. tZ5A7K`8K_ctlsƫ,< >^6c֘/24!< >T:zw '@F$sI"[Q $\*9b,w׼G9zY|5FBR&u M"kVf5Jȯo{Z^%Os+; Iop㳥)qyES0RS ʏk҇eJHֳm\osc Sx9sZ_tp.zwD#q @]V"DHc_>n^Z1ubMvbKQV9KD8]fc|FBӢοgW ?S·K9WFA9bQ}KoѥJ\Kkh'HHYjy^_RNnN3YG.&zҒU0]|'U椻 5V`g{j7exCUu"E2sNcLr@>O&Di0 xAr~{P)f- o"iHi$Hǖ[[;5Q}}%"{ǡ%~&cPɛS:;A"{Ax_ 2+$h&KRG cC#.0XenGo/ٿylUq؀н.WNvq߯mʤ)?MbƮ`uy!PAkˆt/m=BV<@Aɭ':@6$(<Ĝ8#jӇ8(1O Cev*# 9,Pݞ"o {F`k+=_X_^Njm˺sKe%U<ɋL;rͯV4L>V]f%Oԓm{IIAMIZ^D:[\nfQ=QzYؑ-=Իn,Sik=WL 2HEIE/-i_>CdШd ll4A@i9C>["oZ6}217(g/Ga-.]|DD$z~13]rh  طk#`*r#80q2N*Oa/6]j[qHAb%h,~eM6B_RX!_le@5 $;YtsIh/4>pבN04'[KӞT  { {Ŭ7-Uqk$5PUL24 cd(d=Um0PbB`L.i cgA.Xxh"̱'qDi  {Z# yfJbjtUM-\rm6ٍH޶ S+?!$@JfYm H$m̴(rV/e ߝ0+\L *êl٭v92cn%-u/4h]s.8vX63|Ew*[X srOTA{1ZM8 nmy PEѩZ1>~7bǞm':gT /кx6m ?y6C`U֛-4@>"h޺}+чSذv%m,pug4r ;&Z|MxYez9?2rUm9fh< *I"[ƘR{^̳hi+#:Rٝ"u0; İ_Xz:6mf-Ho@`-<ʃpx#B*:_{G=J|}i>p KùNP/*Pʾ}ؖ~WAn/ޣ\ U>V9*4k0NhXq-=p I7iBG|ډT7,p B\"ݟW$ 8>3(Vԭbx]'6Ji2SU94C"sQ\å:aAwԽs;fF+͈ Dqv@܀WqVJMrW)Hoe"O/s0(VkSђwܩ-hx[DAt;Zأ{Pq#78W ox@tpzilp^y7E1o(k]!Lgf,7=id$ٰݕW٣g tn4H\%ȼXtZ; HznUg ,~cV^@l*Ѓ`79D~H-A?01r.TQæ dAS7682Brb,nl/H:J&(s#;\O7_`0^{<Jm` K@f*i=@\]ktfJgBh!W 㛹E218ޔwYڲφu~ZJoK bR~Hf@0Z9U |>;G.W44[Ra)xoa )""L8V+,1DK뗿.J:N&KpЏGg5dP㾕ee;?asm$w'mFWzݍȼ :+9bDJo|]C "JKװ-an$RO{:L >ω3C^HЫE(z"[z*<1c+' D1/p nȈ 3 cJQZl# ;d`L@jM ~v8|)!]`ZȔKG@GP\/iEڕ$Sh^pX?\^WH[LP8mI'?ׯ|>q76oĥñX.b7zfB;xKL_Ψ^U_+K)#Lc)2VXks:^meu)gK*3Qۛqt=r6!r=]%f"x bWSrIǾJ^:k_ydBk8n6C _R*x;<$Ir!#:ne7dcҬ7&3_#hd8dw}>G!'+ ]U.j;]ZDthĵaifFO~uT#sb c(p;&6 X2 E&sbD!ՠ [f2_nHAn֦IEv P:iɗT0| [73wѨG3)HZw9Fpk c W"`hSt$/j5=).m'e"R I5GOZ7T0ВY]6!19w]݌3{`U@lw˪gxDzZ(2~r5ػ! pum֎9l3b<҉+k00QkE\'Rm®l⾗~&xlYѱjaEK ^wXs~:AR[KyNÔK8nAxWw*_”µPi>z:*sOL0غIZq=p/]asqaHL eS q^4(᷄]83he $fB]zE*C֤{1҂- se\@trZy ]քk tsP⍪@*^.2.D"x]:[v#BOx۠ku`Oy&yzJ|V]6 A(t|ϯ$2(=&9?($W'c#BjQllXo::ek9q ]1teuPt㰩+= [4 NuE"N0Uʢn\4‡- zc0#-Gzǃx(:&ۄ9^*&GD'[WTjmVCih6Ӽ? 1P4:c|o" K+EҶF9wH{F?հ(|02e\j+&tq?W +ybA d@mUR폁-bFŊV%bЪ0 we!R^GrJ''}@6ɳe:ٺlr$ީdt7*Mk_ZS# @I;\Jʱ##5:ǡ{$(EKяr\ʞKc'$b{zB呪vpRA~}3܄T e#0 c źQMfvsۅc͗_8{Y#lf~٭u`8IBwXA7K`!fQXFP99!̀9|>G V5zr;1 #{UJ8x]m!+ͧ+^ڿH!;ƕxpViX Խk[7"q^0Ys1v opoD?$L=@֘SZW!@mMU Pɞɂ"-^^%\]ގ;uF MSU*N\(Bo(YΚ|"Ru79Q'@뜶a7xV11DJ5ud8|:e(qx0Gzk:fx S0lo`#"Lm=o<\, ێ Jgxq&7!.2sՙL7(&EjMfB:iEhVْyUQ34dH2ĔAR&`4v5eGGq'*[Fmr* p7zi1:G6H!rm|Z#G@tT9:QsR_"yu^/Jx]ioybg2o!,3eoa =WO=w]I4~𭝩FOyɇo>zQ:WaqMt#@Q:C̵ 0*w=Wȥ]zٟ:Vs?SyFV>1^jfr 0x]}Wu *g#nXKp$! v!y`< WJVIDzy-tOE 8'*Y8xX>`oM݊BJ,IhpT˄ں4<9FN+r6E}og;˭h4Vr zPu4YA*ۑ3LrsQ dY2yaY<(߭}KOFǭ܃b_v}`%s*&o;=Q'l:&n=2cj' \Iy\$ZY$U:3SYlk vܺ4Bp9ǃ՟~Rpp`jW.3R"Z?UjLb (W{#vy7ړ"1jPw;=$ 0D`DU~BCAr#=-a^7mȁ q{p[pzS1ɂϔvLE-dyRin31h>Զat08EΖ#ᅎ3&ׂwpd>QH!ye?RZӊVx)Q;a2zNbvԪ}/tzD+{O2wF],䀣:>+zXiU8 F7!P#X8vQ3d0_w9 qs$>_>G)%nZg UyBJ'@A('G 0&=aWP0!O2;p:g[#J.7˪B'abg 3DCҲ4{TT goqND 1Xg/njo:1Y KٺU7%uE&腈*Jm*YSt(ޯn8zfā~2&>8 1CЧzƛWCw]Ќ1)l^Mh8[T;(U|%:x #f;TdȭPEJt'. ~f $P1 _H,h{TLk"זo8toK&HzsU e^ZXf5nxvw%OzNE14^ipo,8/@2@1^C=ݥz r?L.Vf Kq + U|θrjF0p"1N5Q^fjRiv)wCeJ?Hp,{._'dᡌdajkw`ZmNa1{|w4`HhpS=pkŸǔ<f95ISq*J_ګPឫwHxT!7n'ts>9AESxՔG|75QY"dQ|W Czm0Qv*^=^1Κ>2c`A: 3KKZ9@ R;>p t54h]]ɉ1h {h rSݼh*yKpS1`xa(#u?#{a&F x8n->wHC΍OI紊h;#{foim6FcT&[}ꯪ 0S'@ +#ʔV܃08S*߱NZXٵoeg#P<A6"x :0z SJd, SPHҦMBUřfpQ {@h1졅<7kt[(+XBy.qm^"76.'^0rYǻ\ :e\rsUڅD^U@}eО1+P;zݔܔsND]*G4xآClH/<Y@P㸢O;MJX]:@eK4<2 k ؂CX C9,R3stLuMu5ҳ;ƺ@Ӈ [7(dG)3KQNISrؾՀRBב [rW:٨3c.mD"tuֲ|p`g ;*IS)z(Y:Z*f9#N-2p%k|fp7+ ZFQdw6p p0S+{'_q9RfxB+=㘀tB QϺT;{m+DU/s M۹5ax>"W["Q3d0HU1r h'z-/_|Lxnl{H(6RSp{c)3<aҮk!bdȅ˰;苙˸ :]558F [bo pOD1~J=oB=r\ϵEw%E] Z˕–ٓ( 1~|Ti*OD$!;)Ԭw뼤C=6T;iX+ ,kUZU{ضm̯lS_HJf 0@Xރ .,⏙Eߟ*_eKR,dKS`A‫VGbuSykQ8q70)Jнӣd[2~ml(̓D{|0qH-0&6Ev59ԋOuʘfF/׷2nj#.}ymOCV W,W]MJj0a>[MFO$4x!on6-y1 }FFavUYi @\m4m:~q ȻiERs-,׭ߣ;:Zɱ?sDקr(rAl(YE,b %ԩ5A3,b\Rzaas{Yͮ`W-VcjG۔qr|f}w0>(C#ww](3,옎 #' Ďj]a8LNU6sJ4A u7h:+A5GDp˨`,q.?Gw9s=IcO nyg^n/{\>8qRۗbC ioHQVˡ;,ݜohEEQ r$)Z(yel|43Pe.7n@i8DFֵmzNY+aHRyMs0rc=Xl 5X@UЄHIV Z 3%a}ݾLrMc0c~ۍY&є=AqPpC˩ it_D`$^1X0J qd"`{D>3ebB΂qE9|@ .V'm' 8}G"_F`Lǩkqg*s[j$@l%+AfHmٳtIڙK?"N+|cm<&X7/E%h#7o {R1O+1*Mzap3'&HFCz C?\C_مouT׈?/;V8'lTM@f6Վ4lVYx gP$ G$nzLJ?0_SR/a!rzZ(R30 TrdӒbm>/S0@dwoohȦ;ƥQFshdvkl͆ڹ$TGr$__͊B? d6XJ\5 m i@eѿ :}0 OM&HJC) %|oQBDBH%M~B!D'^ "+8p߲ibH@ 4r14( E/UPM ޲,[d`u fi(9G9EIdoa K/ H"w`F$E+t?]p>:kw$X1$E2 1PL /`I8Ubm3[M wn7z|c~'@6zAd&$.fBGV^%7 R:I |C]dwRꌨKRL[VbKp, լ|7'i3}sb_墓Aa~{Q0q?dTNM..ERh_wCQ<^:!o$Z4zb \p$à 5hSReU}uQ;Yw*>=L27.g^`4A7Q"JB>0_&wYQ7>=n|ED]c<фerO5H,:W1Eͻ2ADRz3_=v),rJKHoK{~W Ze c$s΢a4&X0%jʤߛKp7[#7,=f ejG >eR^ԚH[ %?T7 ׂ=&c8VKzp\E Kn-8^5-%⚀ĎXqcE?˺tWzF>fHd|hة'Hlg.r/Iz,ɔDM~bz2ͼ66([. E(72*:}tX(i d4S>cO~>틩jZbUE{<TCu '֟lڔ11)anԧbt8 nwTYN"JW_|[AF,&6Gdku7TESI=usP=#H,\% jap軁-y^;"gn>P, '<uuݍt&%/adPN{"U;|UpYRa@L!y5"6n[PHl63U 9H3F"esU4 ӭ)WӇR$T)> \' {޸G(yMepMiIٶ!-hFt%iZ QT#c{zjZ o27/6H𙦊io>ϢP3еEԸh`X]]vv$+Z5K]^J߁IX+\aEIeX'-N@7/1wWs/^DLȓhq?+j$umVT.nb‰k. ~QlG>(b'!Ag^GNHnu$3jfLpA$)*jY,L!w!BX6`믴pvD:[P>@IRl3tfZnn99Ў'#CW` f vA6>>]gH}Sy q+K?OIжgϓ;W Bj12ʌj%1c0]WhP)|s3m{+U4aFHr޾?gvPjN[b({#l?򑉋`8yRw: IZ:R5'pY SLԾtK]%n $98e ʏhݽԯuzPϦ3re4:]'`WFpZ{1k]NOiiZ*Sm'#r@v;El=4Y5eUzM4.Y7e7x'SA?D$rgո0 J^#/JHTK=O IM`*4iMsإlgqщ,Fj6~l/T]'㑇@E< 23.IMyuFWNg*XKה -\pr(ygj.]f JKw|wpbnxY >{d ~T2]Ms5E6$[xۨi4o?7稫>j]9gO#>WYnpnMQ<הS5EVI;tJ&4c2r%,.2?Z0, [FP@B6@ =woVtmbBч-Z 7LXNr AϑOlTÙg=%|!vU_k1:6\A*W'F]Dyrޯ|o-k(PjxЍ0:NpZێ!+4k8p%T8n} q xߛl ~ oY'1CH0)h8P;4.!!PT qz3=ר"hC'NԘK(#1{@DWiz&Nqu!:4j,r g2:%k_V5rʯcVgp%fHϗWIUƳ{NG}I-ȴ+PVBl`X<ԽO }o{8M=LUyWR۹hX׆%иc2SDSs[sm jjJ5}Ƽ vJkj}  `9}ip$%9gWҞ>~ ;p֧Rۧǔ'I_ ܮG.rma1,եe_^K`!H R_jswfMc+/$r#@&Kpwb!=P>@aRvJ]fÑs[u G^{#yL+| ?e\2}jh˸Z[֥Ș3 Rj "E=J&|GACU܋L|3XO zBQ1.&Aٸr#Zj==M/ܝX%2`t&Bœ(MmZ01ME)ZyaK8#8dKpS{$c :\jG$a.F?'A=%-U~SEs(st)m2{=>ú ʛBFzs2 EnǺuUeM SW\–l_3:]dJE5NegD˹=w\/ y Z>@qjKdD{~ ۈ4V@GKi u\(Lq4Ho`d^޶Є\e-{|`/PQ pGEx F՛u49cPGGf3)џ3k.ZoMQNя] SOZűzGm&PE/>X5SO@g1|_4ta@Òc-#TKrb-p͔=W`D#U1^ pޓv8&2C>q4E^`- do%KcBw1YfC:>5T3qIB=B/AbL#ފ=<$F^ow0̈i1:.\^%K3/(M㙏|e?##f?O`9He=n8f  %52ȟ.bD|\z6dg` >qc9-s#| *A导}yIZ@Z:7Ž#eBP |sRPk ƑhΔK}q!)ȤL{2j\{ \th~6F\Y3tOA"9Rv{}|Y>~>quY4*$;Y)~fYLPNAt+m e8sm`>O^Hk̫h72}| NBg!UL#i’ю(U=@tAZF \Pl0.#c/;繦_.@&-_ Chm04 [CK[Wu}68(ENc3Sen U?c'4j8m^xTMD)Ň&h]FrRR2Q"Iϥ~9@k`6p  zoPq˜(jB˘#M ^AF@sk\ͳZA N~ݶᚡcF;- 1C{5;\gf+D g!X1uI!^);i`6bX߃[nyH_9&8lA7}xŶPԉ1Ȗ.GY!{5W|S7!hC{Bw, P qkFBsϽ]TFu{'jB *#t6jA՞D{щU7c8%x܇Nu^[#QzpoPzTbӶDt(P%*{{0}.C,*s6v4sU!|hvZ룛ٖEdz ib) U0:UΣaq3x}Z9v=s"hV>\w_D+M2b {9f+Mǁ%}+#ez_Fjљz|Ӣq8]:\Bv J'&\"@U1 KS>j*эs#s֚LՌE.rv4ʄH~sۭ>փ,]FIL;0#RJP&BTqVl&OXz"N#^H %fEKwۭX' x`c}G0no$؈"~ޢ&Ŭ zbd1RS"/D7(d`Wn`Nm( g `uYtӴ" IW&'^*ebZGD pqjuPn%ۼϯh2裫ƢoL+"qd q–_p&W&KBB{P@=g/`2tv$x5ਯ۵$ygJnOu 4{g;{PT`?! DG2T81zW^pc;yݧS3{fG'TwA>em`|Op5;WTcgv^%\˘\rWU")T{5"g]bL#P^Vx7 <j|GlhuO\<`4dVG{J;jxuF4ڱ^Q*D Wd/~vGvE q.-SӃrݦЧKfVq)9 ghH?h?ZL9x@>{휢M~ICn CIV>K7rQt DQ:aML&ap}Hdq?SMCj;[jb3J?";Xr^D9{0ZbbM.ݼpF3v|)]{]ă-B7;[{_3=#n>߭eٸ_elн8rS Qɴ\l>3j+R0n RmV,YFظg 䓷& 1kcUҶagb=ʰus7J IWJIIҺdHn ã1 RߺU- >o_F(3O6+4:IQc_ SSoxsϐK[*yQ#;L|G5 a cϋۈ"{_"1nA0dUT'7Kku$r &@vSMۀ~d0E1khwkɟgI1c;|ޞ4x՛#sk*F ?Y(J$'H# l]y D+[ )T%_fuYTtsm_uIΩN2}s$K9v8v}z sUh :K+L+> QBʶ,#3ޝ׏*gɠWG+>{߷s4"Fk6/ґʆDGtђ/?E*kwfiZq=7 Ϲ"O?v5cxݹ0s0lxt6I!dFe$3jx߽p` IKP 7r؀}?p,R\ib~]Te^r 3nЉ+md?M[矏E?}>*yQu\Q=ǥ/}{XYCZX$C|GpPBː#7bvGqXh;`$sd\ءۖDsO,/K@C/;.&rXf褯">r'\.(+ߡ[:K,C?!@:O\W;v77A\lW֙[3(aٌwjnnnù,)rj)Hd_/pۗQ# hM=ZA[ 4|=| mӁM5 u9$֍Jl-!K8ڈ6" 0oy( j{Q [cOAÿ.ron}i@}jIya;MlqWWG[/vv̶NtE1/2Z{>#۩zN4xeHђ,ۉᖃwbg)- ۑkgITUx\iF*`%psdȺWh= ?,rف6Kě4\^s6V^-?`df8}7侣I/6}Fe7twOhO,sA;V82k/u[T[NOvۨ;EH/Dž+]3 O8 1}[T޿h y|B[-tta͠-N.iiV%h|OqF؏|-89dlt!5S7PhWDT5S)x ٟrfaPR:g1Jv{+ MߑPB=TqOFJv PEg%3z YYʓZ~_qg/^@Ͻv zx&zBo,KGΩBJN^N(&a@h)s+*c gzm˄8HI"6 b/a <趀u#nތAѷgȻEk1yCKSoW _. ]bf)~LHJG@;xL;TJcQ {r;H 쩅H5؄3Sr$q;O49BsYV.Niq4ƷGib?fȌchrw?'\{O,wb mN@g+ ;<xLRj2vB{FtxD+Kq53Y gL.AgA.ȇXa$^ash xWN"כ T1xgMDIZN6U*MC}B`@N7a5p^dś~y{vUdqDZ _7A/ĝycE.uG(.\FAs_Xg)i]˽2 k Jk Bz1?LRhcHff{-ի[* ]Hpg8ǵ뛋YBe3 R2噸zrl).t ۣr%S7UoSzlF6YR;h !op󼙎2/VZ]Lb^k1_WW@\"ׁ+]OuqRW7ͳיL3>b^qc 3Փv3E1Vgݽ.o~J2PFS.] 4!1 ͊B$[Z֔"X'ǣtRהmumsxhMcqΒw2̲;[SRڿ} b. n?NkK SAT(V o&_@tJgo,_1?8wc\iK]bo`,3¢ˠ@ 2Qc._¹s&Yj4jӡ+x.CДLSd?ڇ[qM Zeq Q^ETCzT}$q[0MޕϸHˏN!>ru :Bf!] t!\@M8uV)'|(RdsXx3k;^}k> x"h`vP^*06 /.~OTFx#K2E+ga_ϞC-HF/oK%? c Y}%@ 7o2,T.^B|4v ,5A_'Z畦gwB?ٿO6 o?ao+]W9{#lhȄYKoŽE8FgdP}%b?JubW o1Id4/*@Bg%^ۖfyRz%^ Om5_NĒq9wـɕK)Zc`vɆQ}$f ^EII-U}K\E=>x}eᵻ%){sf;KabywhQnJL*I=X tM[4B9)[.mh]G+ġҿ/X_q]Xva U\m1b}EyQ]6.U7_ݭi!*7բ V8S?%X %|~RB Q^ >jlBU h\(5lBYjmB$hh}3Z OM{:{ PLj &. \ohAxqmwF J8)ou* {Ij}9~VS.@j}Wn]^5&j)|O9z!hd| q}3?y ]za,%L6$hgBpnі{\ LJZڝWg݁\!aǜt*f7-z*^XYԒ_GXD~tg,;Ѿ%4'-86\ Q yy{P0]6S wR[d#9+E_;7tL'<İ@i} >/TyCe,<]b=Pׄ+@\iHߛn(5#^t2a賷SRWl7cq@U)# #,)EAv_OBZA1kCj@jQw~ ] Ns.Fyn_$|4?s>,&/u}gWu&Ė7{ŜÇ9+I~#=NA}zzB "Lt]Pe h1غo zsE1̮\Oy$RĀ<(gKfQS 7,| ڠV:v6FvWXIa^@<=*Ja+C#Uh{dܱ&3י8s]WIw@DdE΂a[/˟`x<X:r) FWAӮZ\3M`e.IyZV(ާClZ M̞`Sd^ P߼6mck4Ip~4U{ !2?熪 G4ޏ % ĵ-G#ߩs9S8ðxFHDV֢?]c fe,xHjM_ӆAm'CF^*f.]"3d/2!4[#6 GvCۈ5\- ~/9/E75s<}X]hZeۙj|- =Wj).2\#""B4}C(Oj?8X&ON0ZbUT78\ r$I0JT`3]ywl1)guLl,qp|=¹].Ty.EDH%/$pjw.som_kxt*[~Z|}Xz)m= JՂ mQYԛe o|IB>k.uϢتv=55I@AFU:$@e~s H*a ǹqħ],ί"Fth xva'LǹP}DiBvHiVb=n9n4mM!cDXzgcQ|dMDG]E3%waV sTmZP'5g B4`7UxMq.Apc\q`$C!:g$%-zAh~D'VD:&A ^ jC&BVQ.} EyŁsVƺcXǘa@ߴuV7cT43Kega3E:as(P^,2hf (R𛃔-_aj7W1&YC 6h(aRE>s@*].wgy^5s3?M\,6;}JUhEN.4N^̛-ϴ_ |:ǩB>T -.s؊^grLkB\_Ttia5Yj2X6%Uh[6%oPD:i"Wh>EН{f('/|! lڰM8Vk}\$W>epywĶI &䫈PpiˌկQp²xiYt@EFƁr~߮q%;6Qt\"ds/',x/FoW.JcԅG̓Q?Vnⶠ!g4!P bnq!먟Y\?]C.bZ`m(}(#O >Q M rnKsM3kQF/c6;yCΰez0 R?"XAES0WuID$b0uxںՎ?1,A|M#+1{DFC{-T#[Kp n+c0R82K. `ZGJ>"mPQd` } u_<ܶ v/={1UtBVk 0[(X[͐;)*42m%U Q I |d.mB\)O0K *2hk.H3)Hu7SO!åx0ܢu#Xo2gjfxۤhCb8Pȩ]Roq52!pʷSOQ3t偯teм%oDJʟL 8><+8+ &ZZT+kޤ}?L[8D@㫑Хu}{:@lu4Tv?K]}bf~ ESK%;G场ߕejըyC 4J5nrTZttem{e"t,U 2ו'|F>xş>X'/)"A v{#v|bUdx8a?X FٹJ[$sOG90Jz.sTV =sU[Q$}hfL2ŏU^l 0)sѿ㰑@=&Z֚ 1ym"-L\vgȔ!Uܴ-!DP%xڤ={-͑Wr.a>.ήx=C~jsxM s 4j2σR1@`OW#!>zq|L"AEґC{f(M8 ^mVMisa  녏Ƅ+=hÁ̧4|4 Q"9;Խ!uaPG DIQ^@xbU;_rQZs{4~\awԿO}ަ /))iVdB*76~d[UAbqȖ&,W01mc]kiAn$yELtQth]T"~r5,kP4TA:K|Nvqى~>h`T;lŶR#:vu^nJRcs%զLb/қ |Lշ!p:덠*uoN|fFV s[),eɐsMhACP+<vP?eHD>Lo =}ߓƪ⪻5+l/tqUpqr"A6ʟY]mGrcW⟀{aJ: C+t4lxA@uy[)YnŒ$j|iRfrz)g$b`N Nll3Nl }qܾD.X޵4Wu 8Ơi:tR h2,5 m6[E R: R{bh~ZUyW=9k=E-!>PzC<gEk]{<=/0A>$Ѓ6rˀHSy/ Y4?(4kM%C[N-wnCĽ2 ag6U4\O`KכVgY*&q%LjJUæbp~U):ZZKqX7"}.Y?0UPSTE*y~)ߤj;PUWpH2ɅN t(n' 3%T !Ar4Osm/drP:K𴗂c?zbK0WO[UG]ZN ԑV13~*{(Z]ɲ6TzCN?iI[,Q4Nk~Ca)4K? cZ*`w(mK.Wd ~t-)M0g6x^ˡGK/ɰMZpx?4:,,:tY[Q"S'52,)ptI`o .ڑ䝍Y]$_*R^*T}?f44F- Wɗ⤦EuԾG&1˷J}-ڢ#zReD,2u/Ս2n۵xw_Q)m/#/|.w\{RJ~5/o-cJ} B;KUp@?kON.FT-D>9,ƿ_6'gte8C9ڃϛ.R<KF}KR! 0PTNNY0;~[Lhr)착g7!Wt %iuʽ>dT RpYO-撏7yA N|R8ojWLnQ (IE>bIU$Z*o7?`1 KALI0l|<9g}? 9aX!'R{[KOLEb~XxdAl#t|*͂u~ /d܍&L,͈˙ -xm.w¹)#9}& Ns! 4vݘx8 !~<&d{/ePPG@6j:p+BzAJ36vUZhڙBzՃ N`9F*ǕBݞExXfXY0K 'q'4j!&ߊ|7*]s+<Ȫ/_z0 sgu.hg\[Į)HX.!,L4~ q!B~GU3!YYK"G^|]Fo jFQ0]!,κvha"rrrthtfI|O*{My vmY%U\/깕"iH7#Ͽ2.7Y`*ְʱ (%Wrᝤw`+qX>\΃ gfh ^F#Da\{2wfSv)Ñ cZpYnb6^ƠgV1ȂaAvG])z b&:j ꟔5wU%i,ߔjK"KJս-letƂ}$`!-@Jq(OMEۓy`㑞V8W\.FGmWǭ~8M˜yfw@UfMתITCʞ'/uazjϽYhM2?'@|kV Š~%me ĂΟj$ O!U\.~7 Iu)#- ݻ3*zJ(VJGbՄUALֺd$ B e f` $3@Gx ix%VhO\ٗUlb$kĸt (ԷL! @Z{GI@ BE骼Uϯoϙ}&$Y:YC.L~rw}_^b>[` 0;.o\}4 lz4zɾ|nt*})~s`~w=J>_8NwxR~E96̓ԉe '+g52y6:\%;gD`{&gv 遂=0r:x!L:+Dw$N1z{ |Ђ6_6xĈ]|!O)ZrV8aK4YLmlԳij\ qB`˥"rDB)?zm!%flbsL\eT+oSIwyˎBI| [bj ,6׬F*LP V/?[[QNhS2xWZR2-6 kI{]þ?ݬațśؕ qF®Z@lG;a0(ȳF![a:bMsdYN;t8 51m,WSEMOR] !ntyꤺpRj׿D;)%(I$#c͵~҉wD$*XZ`$#կ@"쒐 Gͥ!Kr5 |BjЮY^g)bql%d6qѐj'z;[P \5<Ū=g %Ġ(v9fy# r ,Uh(j9ULJ#՘tl>T-~izo|Ʀ}B36fL=ʼ1] XPXyc1e=376xp3-B&e$!))وAWIJE޴PG /pkNg8(FΕų˘V k@~".VR}:5V>ESr > +B#ׯeDLwB! W++bqK;^w42{oU2Ǥ.ʌTd4)jTcj,]بةP°)x0PzH8ˬeBD@J$q-|4Id)o>;J$8E.·0'˹:}@C HJv/RT~c^@2ْxBPyiiqpHjN^jўCT.q'=u0rHNg_fiB=о ?ͷwI((X(n /Z~ L'#Or 7ùiJ^PphmW &B^.27u {ڐNj2 ݱۧ΅ x/u%\?gbk/cX5jxߧ3M>cn{4-爆٤,<o< mZ՜.>51Uqu q̝Kf#TE&GDe^RgcWQr`ANUoA %/֞,2is`En+G־9{YK`\%*3d' 3@ziI>1{7Ƃ'fz>u T V^, U!a] zkU~+A d%x+f5%$IugAV7{}4 2 R&Ƀ僁;j?(HF廱5Wq+&RjңV6i"IcҪt#Д$JXljt&:HV6\j>߿Fz=uج"EQLxoޘ[DS+45H%BM$-r YT:/BXx:KqFc+|{#vff{NaMױGs$k*%fSSEOJ9\&|1t$9rh Otf 7Uq},`0'ڦ9\j£zY@5f kH6#+r og_q#I;o _W49$sx'Urh[5C1?|q;;MsB?]myϦP1cjt/H>9t:l'Ք…0ox6W{BL=fLX[f2anAީɄ~(Q7߳}3\ݔ2nhϠƻZ&WLIooQ =t Xt!#$=CozᑤnyQL4b"N,|NO-'`u{6ܸ>pbt$TKYU&~fP- ]ZsŐ}N Bz4-c}GH={7_݈ amQMkGB့CMpϣ61/H)x7+xS+GO\OYT_QJKc~[xy77)-4_NDR7{ܽ~}V~"Վ U7tb1p.ful-RhRh'O 6g:C>SGy%磌_O$tLHϿMK=+䝃ѳ_,iQ{Lw9JxI)ɎSR,TVr I݊@VuM}wN:dZA\DZ:%tMո$Kj$r i5dЦH V[Mڃh2vi`Λ~.q'c Kw[6؊&o>iUX=<>,uhk y_Ŀma?DaW@CY"T[G]TM.z\h;w9k盽|zE= QDE 3'ͼt~Ox$iƢv^փ&ͦډ !䳝+ z9YBb~1ZG5@q(N=dRî NG9TvK7Lb}!4텅2bJ}~wοXJNA.t\;<+8Xy_xo~+U`92 \E3du=#UP\G7>)؏ȁ>mw:C\ VT^xie1/4n%<6k_F,y:ZF7€78D1OI LLO mIYE2L?fMؽ&.g([2R֩1Uu&U97MԒ!'.0]o[i`O6;Ol E#7R5S-G=PrViKI2o/Wz^HY%9Z=CFoGF*;k+Wژoƭ59 A^U#޽AA`h?vz^OpLnGM3L/PZ3&UFXJޫ ]^V!pztY< laAיY3L7IY7|H=TpiJ u9NheAOMd7cRc>UNgM IEBъoN9i )z}"+ g!BŢZ`Wkx ba?yE'+e>ް;yC8n! Քez&b{^;~ PEc>;*$-jtde{H㔌Xjnỏ5-#Qoo);BmZbK}(2`+ޓ1‘O#^-B8|B'\Ƕ] vSJY@!JvXɁg$P_켓\\=g xb\;5Lao_bwۈ-Gݣn΂HJ͊(S`!:_@5Pϸ\,ڻcDe*eBMi3ƃ_o('eozNJ84#*|{PUs~"_$ֳr2;ocmyjbΈ(a7U@!ZCX~%Y' Dg˚a@w_Ėxڈ\fY7$&i!?WZ5ՙώQIӴ{o1e=LHwukq\ZDkx#,e;}8Oy/et=1x}5YT\%3$p"6@}|1/G&Ӹ;͖ez"ٓH:؊VźW68sN;TP>ѡ©U 3L!Tw)PMӍ-q ?@f. pRsw4]Ȱ2xP9YS;؝ڌVӔ!6Xn#{ehE" C·Kx־Bdi%H]MNݐ\3ݿ\C`}^@M'>mѦ{V7+y N`lwOz]-\R&Ջ Dqz6*Y j0LF'ʩϸcE f@i4V%>Hw0#iWG/Y @E!ɎuxzNҎtmjZ&MK+~VGUt#qCG^eZ~k I,Ft_,ADb"Ԭle=]55Lˎ$^,N >oSgd"˧ui,0hu[ǢU/@_$X<6\Vguq6saƥȎA+Qy/WHC ;TFk(x %@'^^c"{#fԅℜVxאi͗[a93m1h>UԂ!Z MC|8.M[#QmY<1tҭEƬz5o("p4='3W}ݎ0 8VƤ-xQ*-7m+511$8ج DnʂIfGC-N?\4G Ǚ iAQ mmr iPL>}ݮfЅ}.ﺶI(S:cyk)(%Pﮄc<5(:^0W,98A Ӭރ&R{d[Kaf,gz¢垟;( Cu[~ 8~ōA9UJHKˮaI!^MPkIwƹ.qvT„ģ:3alǗ\sd!<Evnl(/>R`@OdhR| cֻޗ>zWJ@;)ƶ n9-eE/}{>2T^׌d-F'~m>/o7f\!o+i{ :x =Gh1`Ufmu h<@ަ܀Z\rT(mާ&X_-H ,?v}c $ C>3w)?@ri_C38 \&++l \~g:BDGRVGTfCO yYUcƌD#.qTs.^f.NW=Qu{ܸivf0I]wA{1h,;0OL"_/hw9k! [%ԇ{6*6\IA%(MkR5 3esj~qÁ$azXtQU]2~F[,2K+F9炙*(2~ unkr.xڸ Sa_z%kMg (yD#zkoZ(<'ͭ:e4I-'yAmxpʄg|@?EJ J@]~BёJ4& B $.P7Y_g恼`Ex%AB;6eb<\M'==T:U1Iv-`G;БupU:â=6 vJR%y,sߎ8VoX–F^c67#C*?Fp$6-B$Bh%zb~`l6LS(=բDE$ ? L(OTGDxS3&)OPl@9¶TqTAFPst &~K*6ЋG-.& TX'Ҹ(%j;}io馢BQ5%Hkw!.T=t]+>>/Qk% GVe!&BYy -u'zI_̙ z)N FFXTBΧ]h-,7*U.2T<@/d<0i7Z_GF$k)EQۂs5QCt*QzrU Wh@hPdW)V_p:W/.uB` <݂P^ l!c袀h$4~\\H D,,%Qa &>ki_Wsp-5"p&3Op\clì<{h[`b$"|5 q[J?eqY|צB=\}R;wې,ϟ87 ef˵jX7b!Kс}Q- @#S#6b ɾ.SR
 %G OUT\ k:Vw zBYu[h*O_h,؁{IG cp##&YeҾ [)SKf ! >W 6 f鷺u>?ФlNpW8mL2eh3_5Bg)X>UxL>U+oRęۊ$Yq5N&m'-|PG-4*T4hû68A ȖOǻDZFmJb˅ jF6D0AAv m%UIntWƤU=42Cf\5lc[^.[hXm|^Z襦Ȗ9>z=RUZ%)o5,FYܳK9p,IJ+# ,C|KI7;a@ ڀneP4w P7{:TKa(e #FgKɎ$65&5@!gᇯTF q q( %ch  %2WPȱܣH$Jݚ*EbtہXYb`jk>վF|Rl,Chkf'ǐ-Bw{uctTSI[&Ltj2 ,^=03p\dۯ#Iיڈ 9O]b+9]eDq rJ(O8 RvvGԚ/peDh%d7;SĮlv[zv>uk"336}8S*cWhCkϻ4"-O.SM3w uʇsnkTp[wU[)p$uFI|aW/5@(BX.`X.?QgG~C҂NV8&AӃAZmڸby.>0h-cB318J_(_OzUm53#=A$w&z˘%\rn9ïxBK>~zLV;v-1e3"V 1QKALsFN<١J<+#_|Kl<Ķu3#k%M(Xmp'V {n2݂+-YMUGa~Q :flw0\MrujUx ;NΦzk3o~|kf}swi<vHu.G Ɯw0[HХȂTJK8W^dnj%0WHPM+yfX{&<*Yu2f`~U^7ĵgS1B&'dZZMqZFpxy@F޽fm=RAm~-NT a  $wY0[^8%gq QiqERY(ѯd~vfJ|ea`c3MI/hNE,_sC@*:=D >:#|y|I]83Tc#RK\fh#s`48A˂icT0 2P~M{YJp]ڵj)Z[>x]SR_#gOsx( at2]yuT-hYܮD 1+㏖ؐX+4]"n`&Qd,oA #5'dqvڨy9q 0d&"Z[aVelr ƣ%aVh biE$d~AB2@26|߉3 nDiXs9 .וӹRu@Uݞf9IB͎hև#msPگ֏|l q̎W߳l$ta[JMO-71Q qhū˂A"Ʌte)]QqTvZ8M60pΆ#@ X[83Pu44A 0Bw:]ֲ1p9Ӻĩ3@>ҿXВ=@!b؍ZH:̚dSv gz=Kn 9M8ߣ=ۚ3-ϸ/tz-*ʈlʮ o<~ BG[_OdTT6-4C"e/kcF.Ƥ)S]]G@LASB'ؑg/_Z~'v [Lh k lH:O;"yzh'[#vK>$'2PM 7%C(bFMiP6EA PEذھ5)~ۆ%زH izcu4 ÷Ps^B~UJX&+݉?²(Z%dsYŲƫ6rbiv Fr]$]rANlst =0r/mF{n\AnŸ免hoSjYed~\N`Oبݩ>4\>ϯ6~a}yN#H?r'?+@*7tƞ#p{[7"GHeB;?K"zV6wd@2#RD>w*D<_խ^ʾoG!(_7Z{塳_;$E{22RwOM%u'ӵ-m3e2?m=Eh;ϯt:;;2[4{$>U ˳K/nʝ1wj+-s&kr"{<"7h B=Wxm@;7Ios4?zZ'S~Z+]3[s9M>N}ߗ=0ɿMY[{IJh#AA=O_ e-Vhٍ2Y;7fS[6JnlRLDvvթ&8"ICe~"w_+A uTʗ}6S3E'GJ{5Z Oz~8}P-V3 Bz,GrsQHcfob)P]=yXwC~& Q{Y ߨF{qhn"]&qpFce oiCx.=l6 %!L٘e[5ai_k.LPl&0x/W*A iS Դei{,'y)/9K&?% ~.RhnB}/x?j$I'+|@"J~Yٌ= þzeB<(I9%vwCi*y`MUo8)--ϯ^_*IN^Aa$!Tssf6`e t*FNRosX>2,j|ci+ K|s(,1ak}b.~zt +CPH*XۻG1xoeU@́3>PF{e}j LRmEdϋ&kѮ˃66d5u:/ۛvKfHOQ·UWcD}fuU䶫%C[:Nu'X%}gmȲA6kw L ;Q<^ZF0 )R_e5nNxdTAO/}f\D}9g:(7ggiF2B)EŤF)Ş4TjsBdA܄๟?`cN 轫 2||.UN,M l>ȼzGu=Q6wN=_5kzj߿w4 F̎IE0nKHSˆ$l a,jZ %ɺD8[8u U1悃mxs&ĸs:~5.oC;qWD=^"YNîQg̬#.m_xW=2clUA@Ҫl5vC2|3z V(F@JRBi8"FX?23d \.[)n(NXuJŁnbFBa^OK'sg4, ~PiʧXA4Go qX=t9PK Bn1Zݼ_*M'%!-.^ ƙjE&!wEWZ$\ RfwȤ~U\PɟQnw˜]s«I2]L&X$Mפ--.~tr@o yNDW~fj15,1܂X+^F_?8sӧMZYL6(Oo6ZB\+LyJ_g;J_ƶ\~/RlT Wž.FPdGJS1Rhյ 8cpAW >#ɟxTv;.(~Xd[~7φ\։ I "ճ~idN=~o;KŠ^VVxd *۝@+Qt%ŅwExEMfmlcPF )x*GwNQ5׳R2}$t4P j!kZ৹Ws sј\_ŮXT7Ϛ1.axL}u~c]FlIaH_F. w;WiQI6RvFM'K6 z3T)^g'ªfPV?IQ>7qy@ǐ@},,4qde`"~Z! @\+$f wD.W쓁 s`$>lW!ɧk oOYM. g7nO-{ĀWhpE?~^ RѺDAYH`xXSIO/"D-KKV<c_6 )tzN|ގq%@99Fx ?nd=je]<zZY0S8hz.a9@ev#?(GDx֕ lnPp5tVB('zBaQ7wv.mw\M߱-!7K3_"j#5KO/PW =C0M ULa *arMtFGjmMVPC5^js*H,I#GBUzO;/3[Pٽp'*U *L;{yC>+vq;< tx$^-e~x>@v_T8x>̖w1V;aO $Mح+6m\n+ dΟvfa! nLM>B1 ^EM8%0ω"::R"d֧la=nqECf$MA<5 s$Ti.R%\F sU23D3 k=oЗ\:mKx*8VR~0ZfMiVObf +Br &Wn0 7?\ُ1 Ř*ф*}rm0L 4tt){9fHʋ@6Ѭ#d'f_ãg֓H[;/%1.t!yfm8V ~-dλچ#l([++w6ۺr ^.T>Tf@O8BNQ񴗗K?aW *=s YH h1Ǻ^S#ݣ1 Ek찅,on&F+l5ɪ/ܛ5)OB߰gl:0T1]E^ 3ByY!fgrqzuD+=Ƒ4fPS<D:o ݭ|"+CPA&݅g>sϜ{DA;!"vlaã]|*l<iOf? x-".3&u_H߅*MdĿ3Uz+79cnמJtwX__$@ɔ \o&^4G+e0 sIM<Hcv@m6wr  fmD{6\N ضS38Bp ׇ2i{^8*՛bܼ b[0v/$?od|<M,.!~ g'H&Q$'5ͪDA Y5&7.  i HP#K x,S">4񿐅yW˗I cAM,}Y5Ⴍ^N 3A N_(!+ ;K`nOW鞥 cfy>Z?ePd :z?vdqAz7r Z<ńoяS{'oBܺ?RԎ*=RB'J5hi8}36VO^߮jxʾp(^+n@sxI}hvv8@}9l \ENCg3NԇB.ehW41l&,c0Wpzک+6o} hf+k6 fXIyE*v΂*rќML(c(D#mEI*T('x&f?@}J'U_grFՖs-}qPzahΩU{}F8 -fveC^872RH,|S2 ;T)Eѡ ~OL찀eR|.sap)ە/C_e4?eo,d0W%2,A{6E y-cn|b>V>NQvVڨcvg:wJѠDib|\gb77p:[.ԨOkofL|\Y!agEJFgk:FrUzG,ATNTxss*)Kɴa Vq-96v;j`.Q&ixӢM4p0+^6vAW2pÙȈk0V[Ӏ 8/d1,9D+JϡnW" T) xZc`K}<mH^_gYmFϏC&|-qV́h!J(=f3Jyݍ[$R—0-?"#CF̌ȭ"%MM"TUCϽ`-aeo-owW,Ja:A›*ʐVxK YyQsiVGp/ˑL)&^xrT x`) $GzԿy߻awo,?,O=0i*eK`n\GK譸'%['Ə# (76-om|+ )Ck4i$~z'+[xo+  Q"bc+>FY21|y25әu3(`s7Y6nR*KɻZy=]E˩(#I3b&ު͗2$L[?K,tbaXo?Lj'<\3sjV9Qm'MwS(m tK\ч5< !UW3Zw$?JlA pkPcWh˗S/r7#|Vf@]攊Sst1kff (;k<[̮"a;%bpFvML<hCwn- Dȶ*@0񟝜.Nv_{H}Jp%rr>5=Kϊl`Cd 9Uj:? &kFg/EN%9&Bi\ZO97Ʋb1G:B|=Bub= (ŧ4@f4Kt.!5 l+q?o+4*nQY} Ae/QQhYVrB ` / 041;yQMmT]p4d#zz^AqT`x(xc`ó0hf "e˶ٔҾ3I4 Do[h?O2>|p{Asؚ ber?` G 2ʌv@{K5q}# ZI3 }ϚRǜ! !-tMoBFݫEpo^!2 dCQ!14egxt|ivb0*v۹Pˑw|I<ɯj8W];>L+L>10YKьF~V~k-|*{Pώ7t^pH3sM)f+GaqC~f zug<2j[?b}=`dr=R~Z)puVAQl=3{T WAeϢ-(IL?Yi,tqdA~ ,U߾-1~НVЭâTǐ'Z_A ڋ%QzW-'a"HuWmA/XD)ຩ* #SN̯ҟ49ZMz1ARV(\rQfc*yӄ\8(fQ쵆tT(Zv>p ]<'ѡ#nX,qyg R`؞ hSgεD n.룷AR߂s{i#˸?ơ`!T|^n1/5䣂 TqBn)%N7(hlc\juaÞԄy邈D$FJ2nY^Z1ˌ]pDvMer wJTHX޺`BvCJUL,m P0V6o EKCPpKR4J]$ z"t.@L~)fh!1W{dU|m C u|HD_DfX_3nڒG:Ddr51:Qw_ƼYGВ Mo٭^6%ca:[سv$t蝓/}P .z./T_ IQ7(h8P)[|=1meҿ;_Ts+r([4^l5ɐv_"45N 8\upOѶ}h+!aι7tzGHŪTi']NC]uO:r}j9n$ŏM  k@mupN8G=܌X唈7hvށ}t%=5@+CSPQ%UӒSc]'Dv㷚7e /fu_]kb5HJhjųXqTMI6౏ Qŕ@eSHߟ{6[TXvswVͯKYbRY)߳#ԡ,x tBbGGI8_Cr*Qwk$ B7uQ}%z{La.>$0l3ab~@uj^%o zŦd>`>/d5U~Z]&fQKP^rq'酄!VZv*4&"JHPVV+à|IH#&r xߤlX՝S DEW"Yå`gc!|=8VTP^Arq< E䠝Y3Tz~|%[2DYߠ,ŝ'Z-H0c^f336EJt$*Ubpo"_)nj3Q^zPsNj tCBǬۄSv75ƶYR']sDv] QG[.ۧK$@FGf3 ;Ժ$ZVG@@ޟi*~/- ?7E KqUq:]V;M}{l^[mikڻV,{!k46syo >d+R9_*VE+ȂJ p(P&gh%I|Xhʘ^~Ѽ=VhoH gu$Is 4P :IQ^Gh"zޏ@EO7'uo63vj4t+c,槌. WҙFeo_$}#DGΑgrF h<!,oxo_aoW* F7vȷ{Q2Y-nn~~v":B竟NtbکY/4IFw 'v} #JXIaClƻ?yF Z@쇳LsM2 CPylyli՗PoJ!s>C=s+`KF$5#;;Pg RFzlu:EgrzQwq'T_&nr|ä[Z#/7c MYw5.ʲaZoym[P?Q,E Cexr|whjr(wzX4N0{]U9wTiBT{Yf0 :%˗ڢ c.uU0o%Y-W-Hf5$yNΘƝ_'N>VB6:k3h9Z4Ȁ ,-hAMFI쎍)XqSFh7m\ySNtYsf2o1yh`U ?e$&v3cR)zݍ?pρRwJ>_XX9P7U= ݶnGU\E;m3 F^0rGw7.h`wSY |CXVikz. lj1w4[eM6Drm7To.ּ2&d2t&ѝ EC5]ERMFc"߹_7^!d~{Ӕ.H^?. :6g`?4-h1!uaZS&fہW?-N5ISH~ Z$RDaEtju>ue̅ʈ{1C[HQ]8f4c> xJ-0 @w .=rxtR=`RK^*Ox4^4i#J^&8\nr;T6>_G,&hQj h/˽I$M_Hdl<UlypTV4v\# nW~eODhv(''Na&g7⹫"M-%QU|N GB#:<2T#`Zl4Q8}c/u *7bpr)=*f_Pd N:LDIP5K &sD3U8|?H<%U񙌌Kʖ_A]7;7 (1K_ŏxN%+9qB%0w n@>Bio4GzUQHqCJVMEΠ"LB+YT|Ԍ+h&.y<"xu+\\. 8![`J`LM4_x! 핸B( g"Ft'ޛ̴ :1>,XQyK!(R-iY'.1 | h 9W5|ȴ\+;P^/&Fc@N$:`#.%B_4""w քim(D2 p+b`0Nv IYWI!6e3қ^ W`AN?n:=zFA qxb񷳴,+A[PzkB=ѶtZ/CbVeUުf~~~]ʽ:mќ0fԏն/Go UhG%m:)fm?O~$T F}V-t5JwqY f(T͇B[CuRlo^ҴOO&Ǘ62j~6S͏/#!9Eq,$ }7b>\T6908䙲 K($PM t׹N>W1b2ꋜŝjvDAE= E*`&D?Dbc=HAHē"֌c2:ze׆0mOj+K.=ʏp,uryidpP:#K(1h%#IƯŊ:+4>;c[X]Mcj//ہ`U7QY=>ыX)ظx,'0B0OQǷ!^g9t{FUƁZw4L{Og-hn;؟0}}X鱵U 46v͌: 9a*}If1b%$ )s^}R^.a~SRC̺ םrR)٢\_Vl mhAv&1 3KS$Thy`KWXD5 (KccN2WOX_|H\8Q6cǢnD kwst,B  bz=wQ@7Ň41" (Kvwʢ?`C/2vn~ 2+%}9ar厭{=|z>?>>6AmJ/SS ŠIRJmvE~|2Uf? Q ۝w7$ *Ԓ\|gjA RRWc&T܁:4BEPid?c /&  j*g6k!Sĉ"7p _xcpѱac^bYVDWa0;"F: Rj6cp|J`-`]І>,lXDp9ì⑙cWk}> {Ñ0@׀b)z21@ENgY?ZfX9'{n6I-O8֕X>V % (Aq:uw&ܾ#WO[ܓDV3 IA80&/Lw|tVK?qsT$aAi #H|]-2 „+l 5 }ӀÒ^xˉ^51OQP9Qŗ0`94­R7Y63(sS3BV) P@)_MTUCJ2pD2]Cb;-Q\vϵڎ:+ѐ 6GzߥZs gD)@P_k |#I~p%p<,+p<1 "ؓS46ML|M1\yE$M$ $}2u9wavf(p~M_h2`Ģ?CrN.Dvdq0m\iS{xYYw smP:혨^_R%ɽ|R73V kt7Ȩ2m*YԞ=կznk$gYipk8zkkvt6EzȦ?{LuԵ?XoxWXMzSʎIj|ܹ_ԑF}xYFto0G,*΋{R]_?Pu-za ]<+]xIw!OlrP4YTU͑%Mɑ }8? \%#w&q2ru/}qGDI 5_A^wp`f`2]eJ FBB%+6S}tdnP VsmX`0}ز̧<ޛ?H\L*IT>@dֳk'y2a:Bnt\$% EƜ+>U䔽ѳ"?ZNܓieE{E?;25;Fb H&̻[B"*XmX﫸l%z.7cN`&e 6w:pi+Z0R¤\]IeG!m\^RT*d&̺AD G}3ng<h:?0H8dÌ <^ j{N~g6dMn?*+'tF˰Sߙ^IW}l Shn?_M+ӡR< "E'ԋ qC3x==Pҍ_GV]0!6m703Y$C-viB78OP91.É eב0ag(l)n̅ۇ;[]Rd(}B[%!~pdj ڛ$,\t+J3Rۦqٖ%MX`=6 tX/&Q8٣6F[yQf&-Z($%][y0]v X?` K+ql( 6`8w dL0lUirGse8loZ v hN_;gq}`=sI4* T \285Hh i>g-Gاb#d%®KἮ)q.Ӌ<'&Ҵ^O2;!zk+} F`;̈́`y(|O$sg'ˑgI1˻z ;LJ$ۣH,Fk-08pGE-&룄FN&)N3<.aGVPaXߖ¶К.Y'ÉH(Fjq7 >N~-LjIYRL)8ٌ~p掟v\r&E!Ύ۵lz_'ڛ9fl"~,ޤigaq 40V5JM"Շ#Zs(pJȎ\q?q*M31e }*QX鯳ƒHrҠSڙUÅ󶚴}!mO\ 5k/|J~/o%{T˞'ra7ƹ2.Ն\ Pw"^:+b2bVѸCҋ$@TG nkJiXxgFݽp!(ɁJaBRRBІn&-y䳃}jQ{7y؝by5>;Zysx\J޲YIgnzޣ^`fD\$& =c%hQƅy7Eٸ-{JZTxE\(:4Id }xH0ZOۋgoSދI4Ljep=#E4:*$wݹaP}?rS[~S;2<4m!韃}U!L()}K?=ϗ <ֿ=QIU{z!V"/ W.'1`ghͱmr5oL:ʯ\[l~}{Ɯ"@.O]_X&^Ո-ͯe{81X Jpc} V[_˥9I@KW{3磙t4 #1la"N6سQ')Ra8:+2I>ZNo;ٳ/XF+Uub.1~~ Yw />肐g-hUek=UwLR0jQB49i&[lʟ>F*neI^n >,,{0 ao| I-1vqČP9ӄds L}SgFEOVRNW2H]\{ը.'@nFڴMْQCDөH~tΦ?2*n1anN;|.NC77ݭ< &̆^)%@@0dYg$D=6]Mwg'7@'f.pT`Ze?U"O!ܱ%.fo--_SBA>XMqIW],b.`\>eSB^ݣ*__Azb8O-j\cbmA*s.,H׺!'.._OVUdCj,;γ2]Җ ŹW3Q=In h a(1{ oU2ñ,J`=6Dioq6+fA?׿|Lw}ެ)&W!J{̙(|w+paPUˣ$,?hn? w! ȜI۩Y¡>yB֜wAW45pU xcAn+*k8?FfëJ2:?2w !/8E|~ˌ nL[8Jsdc.y3_I%ڱ|BU [9b-apZ)4n.+KʔV+ 6Љ{\6V7&v;µ7e3*}(C#638XwVPn~MҀF]fx`n43h+F턎'}UCLnB=3أck$;R vr>0($*\Jy3]ߝfn=\SF93:6ƻׇ1\AfYc&F٦c=#5lQGBR׵~rX4t-̅^w9o཈"sPV(لddL1s?0LK0ig~ Y,|L<'jQ)5$5ktcC몜 .5]3_d}@} a{5M3xz /_9s z߯( yE'u{>effkN~2;жJObOgg,1f)3 Y5bpXY@bD1li!ƊS[dL0ي:tA_z`/e ꞔ4]㧚5&E~em: rBym Ω®o(c=_HMce$ݧt&IZ>8{n Υ;> pX˭ysCH/bS 7֢Wz*CV1Nr V] }K47VAsY謟9e}H bMi:ҷ#a zlxRz~Ba>;(kN뽄XΊ+t]K#@M=l8wTx^{gZpx/!62d`crt$@䫦s#.>zM Y,өzF@I_gރp&B"P^u1pi5)fpyYa!LQD3sk%Y]ǒ}O uRP@Yu$tIx ,Al.Ī]ǁ I7dbDi{ (h|([pv㾸 DEIjtD>l2Q VmLTt6JP-0,=bxo̶̅>f]fHpFX@嗉XvZΏΡ(P_Ӈݭ94| qЯaPU0orAuqMDk:;"0&H^ ]I0 uѹ ergS`ےu49gnXs39RTkKΔ^ol퓴6aG1d|}kWj^m$,dtDvV|Q1(7kB1Nvc"_^K<-fiP>sU~8m\lmv7rDV.EKb+ HW1yr@τ3rP65i`araiuK[$ib*>!;otneLsU76UܩZE?M_ &XOdScHq|nU],)U8^*kyp"Fʗw<=܅C Gwzp6)}¬^@QVȍ_+7vNu9jEfG{\4m`wUvn/ybihٕ3WO9&7F@,$:⯈wyG'ŏJC> "=LV#/ܘ85ʕsSoj gߗ5K<@Us2TҒN56gK>K5OLB8)a<WR-9Z3E%,D N]-E3\=@Sai@oM0TIjOUs_RO&-~>{T|#G`a6N Oy ^xpLC̄G ]KJ=V{ yBI"\x$]-+}SٚfKxoDrFլ TtgeobH|\۟' WX;W'N]ډ=꟤u5!ΥBVdSdg+ɑ6# `X\x\AVr=73 b+b&o|՟6X9F)nrtR~Kwϯ&е`v/\kd-vx֨݇Ѭ)?Ȉjh@.Ǟ" @秥f,-!볫U1nf>PO~kdbWq}z ۾CyCzdOKqAK<ۙ4?YC7WA-p?R ަQ[|d&y<.@f5.߂JJ/+H"gOe o+w':O )T7.;ԡxT,M k,>h'wJp (⭚̹*s'oI`gE 61Aaw{{ {0`aymq;&_d n&b5!WK_fٲX8xV91oXNO)m J)v,ι У,;xЁ:B 9aZ/S%2kڑFHsUe5+`9v(/)w{WD?͐ىD Zt/'S8G^rئ{<b%_Ed˙_َKg; ٜט?lCw+P) D3#rĎsuWm߶#o{/bǍ~e,L58 aQ`&\`5f;[ټ@moQS79nBQaaт\-J{~+ˏKojFm_0!Xn!e>tt|~@V>7eָղ1PRŁ{G8UrE`04XXhZYu?R[gxZ Yf)gb'13хnPzuDk:߿T)^%ptލfb,k#B=S7;Y2Yx=̏îT|*ҵ*nyժL{CʭL#|Jg]M¢ze2F{L. #1 :A'C#$'~caPcK="]]mNT3V-2 mC^e> wg9<@};ݖwR'}W<"gj"mb]Im#)态\pDwv+fb' ,AYu`N4SqWM@D>^!;Co_^: Ou-2q5yYTↁ/l7V=ʔE^RV~ "e~ߍ `b6}q&>oETFԭ".-e) *K>!E`<`ԫWɤ0}w:ji p\#ƒ|rt\DFqLʲ"ãsNslJ[JUV5.Lᅗ vb,u 8+$k"/wU(%eCOV4eQeQ^5L Z;Ey?3x80F:foH h`s51k^Jb,J[dZ$d_=EE2 DbZyRsfG邪/>&ӏ^>e4c`h^#ɡY,S94 3o!l-Q \( !qKC$^Gf{]R+zvWFY}0<vPBjAvQ2ixF.V5RQiMR ~RO5aSɕkO':G(zKQ>oo kػ!r+ +A ` @D)̋[K{X)vTyCd+vNG OOͬ}ݿrpߕ.vPӕNgcD%{d|/VKӃq>P$" TH DFDvSWWϥ'9wf!'f;A,:ʞuQ>4}Ґuhihڎift'vAcSuQ,˟wsx2D_T!n٬L&BV؜Yjgs[ W|Y:5M 8p])mHN6^ ZsfͲKΙ 1 [Pbn{L1c.>G~Ma&,OUqTbMH5&cZ5]=B}px보y6A2OeK+wy~2z iJQ,/ ~ʠ1q/6^-Z{z ^r= V?e ~M\5^)62B"!`R l؏@8Q$Q}8@Jk#*8" }S(wKdAʉ"r᳀a?r( ٲT_|قOw[G9_10fB >jEbH0^=giFWۭC_Q@T2$b]דa}F fgu%tuG \ :[-{X9 Be{rC=4-M3^PT0NOtYTsgЄ{Ujs5% .GK@ka-UtM3v(~Nxd~|!ū;1BH2#'q7XW樎@ܢ%ϜzͧqDCuxva㙩&@U`d BϚ/ͶmDQ^f8rE!6B%9=+?CK-!)`~H Ar.5.|2BRecjm,q LJR1=#)33p=g1ExPIy荚xpdL1#N(hgWk:UyS>8mo{8-%ܯ8ZMnD % krnޯj#mDHš~q̾?R.o? Bh%5hk~seNoi\0E1 0(t:8؃)0F ,wlIzm"ܵTac h Wf١ E rb E56-l/.6a2lJuϬAn@Re*u1cW4$"WIf0]k/i A׭I䜓c 2:Rѡ"5P%i+9Eb Y%xTxG\-E-O9ܰĢvz mE& >8i> R1k_.]^W-=%ߧ./CsCDۭ7&Sx5heW6E~.,ZdOqRaX<3YؓR㐕']F38Vа'*SNy3q.U.a A`2JaI5Gi; S'MXCҩ\- -'šZ-m Y,dhr@E@ϰCxN# >(ƙbMk J4#g[f\(- $ :PX*&:7ni$ҼVLCyo5AI5Va'ϰ!P1~Ay)_PQM/ΊQQw'/4vk^QHLeP4' v*CYF$r67a0. +Sum902MĕZ\Cz9 ~H|OAHn>"ySfw|\ER+xZ\sY_ K9ǰf1˟8(,A2{0~׈ElrlA 3gzZ*}JV23 Fs-ӷ_!(x JNRdص ;?yi{. OjyM:c6\6skaЀreK^H'Ka^@Y$PEY7 aJ;+f!ͼ}t"DQ<8w[].jAcA/fP ^J#L~uԃ`7+w2'R!>?4DSU|r7݌VGyYFwR99HX;8ܒWb3 tM::dS4crZ}1Jvb9u7c$ :Sgw%I^dеtI,D][ndfQeRYzXt9J "5d.jҘl҇ұ6>ہiv`Hs{HMR:IߝOa뒁<%VΞ1F!d)P7` # xi3рYF ~0>"@")j?N-$l2^d `J;Wx0I|`K96BhPBMᤇyQ[˛ҏPq-aG܄q |M;fWsqp ֡Ndl8!MfAx]h٫W|1WXhatQz~(ydвL`"yD D̀>%_j ֙mƚ Mqq9:-VBp\w~* BH#U1J Y3OVy(yVGKNe]DzxSQ*d<_xO.HnN/TpLm9۾@sW6b-lO{7-6I Ѓɤe"ij%̝tqy6LG;I҉rEF(51.s$%tU)_I]Wn M9P5_!@doѸ\i<;Y8裥 4J^(X߃Lt5mS=U)NhhZګ}|L;w }М(o97b}лW3&o \n>6\4e*I* qC ՚S6<]dnh˙nbd+%$rm؈>7wO BƽKrܧ8~B.?~lEansO0m=rp+ý'-$QN<+Jm> ~"A/^)Z2 7NDDPTH>Uz'>lMhp mfzÜ?R8ӡJvrz5t!B ߺ2mn\+A`BbQřA5CsۭH;7p\ 0T?B6XQ>I\Ĭ0cKR2Ech֝;E3׽I.1|Hro#K]OJb9P-pNSB63H|Wb/ϿVd9F.z<1._g<@ 8I!*W^)M )}I>(zrC 1}^7+EzjL`YCwua.~\M}hr=C@btQm35|ިSEm+]v㱺EMu><#t19عֆ>8pB2'y,ҍ6LzRVSpRXMtNxu}C='꧃:PPW3DnV+לlf1,1WPDZP\,Es'mV c̕N #K*)F O8 n#ލB 2fu\_#>"lqvjcXYC,GJ>K=N!.RI_rpAKLkqjŀ j^~߅Eq{ȮTY7w~OB7-V6)fV_<5vQ!q#TBSњqP8؍p'N)̂*ߗw_y)7Υߔ=(apuC+ I 0aJN@{F|ɃjT.f^ Btdͽ&:ǧyz hf2q欘@+#?kI[ڻfx6}(".)FR=L]߈eBphiSUp\gVGT\Th_ױ6Ȋh*]+e(feT {-2m pdu>}a|!3.B);s_h[+ҿ[CB|6]s͕RAbK+u]OTS,`gg5RV޾Qk }' MeIrnXNM28# 0րr;dOR¶lo\0SY >d KHJKDV~E04"ZmB!)7? \)ҳoq=G^,ݚ$/6hð m*8Y(J>;A D({65,ߢ JWT+gܕQڜ>SJ^ru글q ̫7G! 3B9؞趜b$8 `;c#*?Jlᘛ14qۊ;ww.к~[eZY3^\%=^l0` ^:N}8nB緥KиP=)!q$eV 2|H>#{j.bU0Iq*M ۭHe<\_e]$M=cPQD[2X2?$Fu\u6 3 9wqde}I xH\&D/zz*5-< ZP7a, T,@&GDPn,EiA ]cAH%)j#-[jyyn Zn f7L8=(DsZ,Yj=y(a}U3Mes+…:m%ATlr:+O6 π$f.?em6ΥwN&Q $4})G&ԊOzF+tA~?F z<՗^vcUi>͸Q'X@$%¥S\]ct+e|d& :Yqٮz1(i{tq& 'Pݸ ;a{R]'4HY>M n{)kl 4ZǞr^.e+J jHAaj_Gm8 jY<I]@mZaR16`mkaC3B3hҐ l`{$ %Q.?Ra03i73q5dd@*x [&B_}Ԭ0'VқklďSԷ~}U0sdqA5.bRbVA{RLky{]YOK4;&r*Q#3Jh)N6,Nǚ6ޒewJ4/98s GBG|I3jYFܑ"B3k-'(Rk^Wv="xߐA%N ֩|Nq؁+HAź1cj5+HVuĵ[_N= Ǝ0x&649]@R^TK7Iy}:d%[< i~eN%sl7-29]\HL8 v&$8yeyhwGi;PVڶGSjD̐%0(AEOzuN[C+x(@{6L2/\kX[>K1kcv)_k(z=z;(F3XXR^9d]ߕ.#Wq,XLg~̞t& goUO^DTW<yȹ YL6+*\ U J犷B9Zʘרh/,*&̞s(ӷ=rbۖi VyKò½l7JEǃP" %d ["}zLY.}*V'i& S6j埇 vб2.EϿ5CJIjR/=FmEUH,ynm`F~A EI L`8 Hay *]\BhՈr<#'zȱ\_~<5? Jwo|.іBJ^x;՗Qf ̋x!sމ+AIj[JWnS*&RϠ1]Q|Tj|2)N"my=JDHmc6T(I AܴݜqQG[|Xф9CY`֡jhk{դ+vx9h0Ȣ9F%9f-F@>^^`^bNaZ_ CrㄒoKdlhgtLsc=8L:Fx-&A`tIa 0Ca~'}}\/~ˬ`Ԥ<) L3^+{.$7(`!_9)U(*7TO,AcrkhspEuR*uYBFMXqya+E0_w* pBK~C,3K`a T d|,e6JQ'|;PdzVi7 ]e.A/X{M)">0 !e:qO&F4#5e ^oC>`oHYoqGjDZtNFKk%{f#T:7r-dZ;bWc!/>O V ҀPj_װHF΀ﷲp ܇W%ܑ!QMq8U;hΣOM{D檢al{r n^X/UW +UWP.2bP:fH!k3'cҭ{Vp*Q+5[~)G§o4E9iMnA+zzT4ʼU5[*V8[X϶RG]"dUq#NO#S8s~BRfdO˛F8uCm)]^J[a%*ubn@֒YI`H)65t*x=X!_.O4oO)8Iq^vHrh-Nx 쟶VV֔1#eZ gm^_DA9kx2>}T~H]'&2ϛ"K{Q3U| ZżÃvHEh9F,fdSK3%+IfHh^sϜ8އTXk\Mz-lm[1, zu ,^oggy<LR--ITrpX]̷eU_C/"C+!`[@$\!'tE)^ u#,]_&ZL~oYҖM=^x|IIjwf6æLj kͧ|1KI,p?(ޗâe)ɳ[/x bFο&lP3zVRIt0I%sC@4py,e} ‰mwmlHhB9 cz0yA wPY[X[(hyqZmdTℋ~lJT 5*E^ekz ƕAy)ဝLʶMƝ՜i ?99 JYf>3/=m鉰`ńŵ0|Gi"@\)P8U!3Kr0On'oL9V)T:ovr^|[\րheTދ բru%H~Y+(A%ۇI${;ޤ$E2>+GL xaVh؟"x(m<eU-y!$2uQӾn2%Ap~K0L g=W;pJKxkwH^S*tx٠ {l(+R(+Uw-;@g~܎Uz.T<a޶<FizrS)ńo d"݂2nF YC~T8*YM|jO+a|q08S"4 pm1#P-~.}R\;mj:1i 0p1jb*OPg:F֍#g-SL0 *6TCZ ϸed WhCͥ*iW$Jyi~rIa+nPu8ߴs@b |c]t;+a RL-p z M5;y,9]M)%T 'nW&wѸS(bl+J OQ]Ale_f' 6@W]k!*Dc3*.EW[0t,JT[*+:;Q (F&)ڸ\ em'}98'DFzѪo#7j0' +RJ\ ׆.XcHG5__)c:Rhn ;M{OܖLjbU5ԃ&Ćpe Ml` I {lQ3W 5q/ttX*fPj2gpIM aT["@.To^X*{1(*XDde8R5iw3[z;,2N|5t*aub]*M#6KpNOHDvu1LpUR:|A~v)c#qGC8eu )7/lA?b,8..DIl|?zi_YC`Crɱ4`>6Zmv `l̯Z!fIX8fe+kRy_t4bc\\|؞N)#JRWAu)D(XGsH.\IKtu_L-ULߔD-ȥ՟ Ns{ެߦP|G5SZҾt|Ӛ b? 3 M 8n'?Z6a feA`3OBRS軛p^'8t= A!d684 kÂ)҄W#!E[|z;Pa$"03sY7zk"C+uBц.Mv Sj6H?_br<4PKADC2N{յaZل̖Z^]RNOX̔k;L͍ ^xy%h@9n oc<47Nfm;iX{ -Ei}8JGHfHKd{/u5@轍OZx]FQD1!濡ͿqDb 'l#whH{y yD 2~0l20QJm{"Sx<)1@s:x3&OUn3nf!1-x0L"L>kyʗfFQS| /\ Bfb bjhUI;ςFW9{D+h?4LJ$~|K;iޙB.h13;j>u2H݅ \#WPpMaޖ{'&\GƜd$Bd=![|FZIzHtG: T2XR!CL[ Fj^T?R#A\\Krg.W2˰Ǐ>8S9AKWG ~oַm+!q(Un^# d(6V7߅r4β2FøgAK/BOJ_O- eyӃ^/P ip.իX}1BȊYݡN}fT1yQHy/c{䓣*g FCNGPWq!̛=ʼn qd+ޱBĈ[AH;j% 7Ȧ`KuYods4~a;! `Ǯ0p{-5%} F-ńWDf'8n&T(R"gj0"7NQ~ZB~|2ja]QKԝiiM! ) ]lV7ۉuړ j&%4U!C Qdr?d}>zb]WS"lzC*~NhU[ "ުHuHz2}5rOTPsㅆy+=7ZA0 K4r }dꏶȂryrNTD}Taj嶴5$yJ"ٍ019RX\o Te8NՍr[1Ny'S,oى~~taήF=āIˏv:#ȉvͳ2z {NQ"I֛6Y3 *ASu܀s2 +|}1-[:tM`C?w׹K+ɭ}+ dN,ou^"fU?6 ==P"%g;8"ķ2X'?Rij n28J֌IQwX@3PI RT4e\g O~$-!Х'A:xӜC:ZU[>qv'`-@Xe28Ҧ@X7,ν޴by4T9}t*7o@Ҙ< lvr<{lK'e ɰ+ upg T)R.Ǝe15ݷ5x3P%`d0r\3$ME.1xLI7bMMg 5gG!;+2"MV" @b4,**unk-:?ݗ#u;2k8C`Qe8DЃ n+-%;bwcb7jc)^➋sA%+}p1IZP?i_ȵ;_Cܞ?s"Y\ݮUmA 2?"+h,yױ΋k d 6<ڪ!kzgbx:o{WDl(DA% ]c."c3Q$ s}I 4({Kc874;<_y9ߥ-+Ik%`Q;݋+DeI6h=wn.!y Iki8C$`pbwرlZ:# (Q (9[T|s_b8sKXed¡PtW臄6OC}lsd$yڪU{h^-&(H8@Uh@> Vy1+hK~ cb{nZw)ϐDaq~bvQkn($$.KaL@x\!4~so1&U wdЭ-&Tv4@< (3,RNy(qZ6@NWi6k5>^3EM m{|rC{;ph6ژ>G8*NǕb.RCَd.̟T8Zָ Sv^o +gE\@qڞ۬γNA0yG}BԂS;lXr5iZIdAl,K '^,yj  EeNQ9z~3k}( _'& qr&zQ*aNUʲ:?8 6J ֗ %9,mݍ Z2vy)mDh!v)P}Mm+Xs_:K PJcJluQvsk^h]qi@E.f2 N'ukex`{No3ƛ$B礈bKRЅE}4ۊx\: ]WH?n\%JftDԀ,g{?&lY -rˣiuYҔ-,w[ns|Ŷx`mXk@սA pnUijxJг!/F1<:VD#/F؅ h$8, <9{μ W0P*RUɶ;a5Ueepx:נ7ʸ>7vN۳oB'nuĈ&^Zž`Fh܁|fLޜeR.hG3J1R(roސ 5h1 +G:0Z9OSmA埇 = Ux~?1,+ ~v˦Ɛ}h qRt}Ow^Lb^ja!E] p"'okR&.C36^SRvj G:G4 G[h߆{,O} (~Oyic|YypvbfKp<ґjj.E +rQ?~ʼn` PRXW! YǠd )1^ ވ<'_7U"4X-׊వGm p|hXSa"!;lbS&8b\(1J+mrhMMxG 2sGMj CU{rJԍu'vsVm̧/هmyT8~Iog)?Fx?yR+Krdy4IT bpC2k:p&$8ϳLJR[j8/(\:w[Y$*aV*ǴFZTքAC蠊~/qš]c P8}.v wl.> XsvCZ4n />TMx'eHb Ӳ WstrIcKQe slNm駬9~c:oiϝ/S;@4Hȿ]p.2'D4:PI_ }Ĵ γǫV\ QI˥d.8pl79Q7FHRؗSHjIoD5q _?#jDC?#>tx΃"#e^"Ƌ+<&[C}L|*LmR'/EG)'LucY8:Kjo5L)!M-S#|9G;rGvQl/]?MU-uߚIg R2`Be#NĿ#&?yc<6qaigm9(i"MjAKp/2|-t$+ᐋ̂G*60:&1qc{;77)d|u"*F<-:|XM~xYܱmGy&7"Es57!Mim%|Y`Xд_JY[Yyְu -Tj=dO C 5dR /LR+k(088*EZ=K=|x:eb|>@R)K#q0&hwq[ȴȯv+`NXjSeNfK&M38lBPc5[O)8yqnEO+#Z܅H0=G$G+ -fsY/<6[UL$ypb&t"*{r ˢJ6'oCdg˪H_kd4FwGH޴sH&L<}wG%Ѡ25 DZtHVE\[I1'L)ov4fA;p` |1<זĜEzqxRR3wZ뵰Vl#;&I,);Lg!#༄a`y3ŒDFcQ7Ė"^uEٕRS@ĭZ &zyg2':Nyg^$`zl {ݡ(=Qj&h>sA驱ϟ.|"Cq>v 4fn!>Vl U۹^-Sm~ahWqL"GMViW6N3 Kj6f)|릃=85#f?HxI>Y>MpiS[:/()aFO[@/i4p85Gb6Bw((h힁EeNxx]w@(vڽ߾)A852*Rp.|nwq~3j,px{ ߲/x0TX)u?`^6ĵK#&\{ChԸ&!xP~pqbm) 1{7  hK .c(svw/\z,pK "YjݫFi;>8u %s3LF;H>֝맓 L̢)[`|gKrqtOQb4\:%:dMZD"&2Iݤ2-50j̼#X:3堔wL?_:.__|;?;F'+l.3{-T~K<#u3P/6(Q\W8[s$K,)1ƥ#ٴ1&4 Q}X6)I?}F>2M$.hB,tNR> /ExtGState << /GS0 2491 0 R /GS1 2490 0 R >> /Font << /TT0 2478 0 R /C2_0 343 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 2 0 R /Thumb 2333 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 1 >> endobj 2 0 obj << /Filter /FlateDecode /Length 3 0 R >> stream *f4cFkD7EpVhB6sns{LA[ L~^>"?Sw0)[,TĴVwlCr2~ Ƭ+h B YAuyզsE,|&`{q=aI !+7l([CN, xhڟgaQwA$"r<;eBך긷OY2,!h|EAZV}RleѦ;7w}pFhJak7HŕBlRf˂ɢRl⬿"TI/9O[2d‵q},1Bd!)Yh\X3M΋|[yQ%э4IJu8T\U3w5CxN0"(= ¿١!Y{M[i[BWU8jA< d<4rs`DS]^Xf3l!GY $/7mu6B CJy3,C vyMيƚ A* <, j̡VN?5#L\Q@elM&@Oun,!qt9"Qy]RKq8@֩S|5Vxcfp GTId ZZ IАJ-)S)9J#ham ssC3$/N mGck9^:K07yriXOAnR]p^)_ܪLc%Q0 ٳ1o j Vg)jA+/B` Q&©,g %96]ua̓ȈRAvMf}3+{%},큘yo\Z8aیX5W{gGsO2XTN'H;ik}KY"X;*(DyuA或zʔMPX(gMvyU\<׵9dF -ԒݺO:"8M{I'_:=bF\=2>0儜DUH]CQO@cVy%Nie#CDk&z //7Bo{9Qf pW#;2Al0Bs"Zn4{-^1@#0J#GjD^p<"pt|z@+ñKbBWCPwR$ .wvB(#s_q3n? ~5(&kZp sFB&$TF,ng[G!j!9ڥy *Z%sd2=oBEH_@"0j\XY~B:as`H.6p]"0y_kט2u.RS~M'\ endstream endobj 3 0 obj 1467 endobj 4 0 obj << /Type /Page /Parent 2464 0 R /Resources << /ColorSpace << /CS2 2479 0 R /CS3 2477 0 R >> /ExtGState << /GS2 2491 0 R /GS3 2490 0 R >> /Font << /TT2 2478 0 R /TT3 344 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 30 0 R /Thumb 2335 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 2 /Annots 5 0 R >> endobj 5 0 obj [ 6 0 R 7 0 R 8 0 R 9 0 R 10 0 R 11 0 R 12 0 R 13 0 R 14 0 R 15 0 R 16 0 R 17 0 R 18 0 R 19 0 R 20 0 R 21 0 R 22 0 R 23 0 R 24 0 R 25 0 R 26 0 R 27 0 R 28 0 R 29 0 R ] endobj 6 0 obj << /Type /Annot /Subtype /Link /Rect [ 127.62 583.125 499.20001 597.94427 ] /Border [ 0 0 0 ] /H /I /A 32 0 R >> endobj 7 0 obj << /Type /Annot /Subtype /Link /Rect [ 127.62 556.54492 499.20001 571.36414 ] /Border [ 0 0 0 ] /H /I /A 33 0 R >> endobj 8 0 obj << /Type /Annot /Subtype /Link /Rect [ 156 538.24487 499.20001 553.06415 ] /Border [ 0 0 0 ] /H /I /A 34 0 R >> endobj 9 0 obj << /Type /Annot /Subtype /Link /Rect [ 156 519.88489 499.20001 534.70416 ] /Border [ 0 0 0 ] /H /I /A 35 0 R >> endobj 10 0 obj << /Type /Annot /Subtype /Link /Rect [ 156 501.5249 499.20001 516.34418 ] /Border [ 0 0 0 ] /H /I /A 36 0 R >> endobj 11 0 obj << /Type /Annot /Subtype /Link /Rect [ 156 483.16489 499.20001 497.98416 ] /Border [ 0 0 0 ] /H /I /A 37 0 R >> endobj 12 0 obj << /Type /Annot /Subtype /Link /Rect [ 156 464.80487 499.20001 479.62415 ] /Border [ 0 0 0 ] /H /I /A 38 0 R >> endobj 13 0 obj << /Type /Annot /Subtype /Link /Rect [ 156 446.44489 499.20001 461.26416 ] /Border [ 0 0 0 ] /H /I /A 39 0 R >> endobj 14 0 obj << /Type /Annot /Subtype /Link /Rect [ 156 428.0849 499.20001 442.90417 ] /Border [ 0 0 0 ] /H /I /A 40 0 R >> endobj 15 0 obj << /Type /Annot /Subtype /Link /Rect [ 156 409.72488 499.20001 424.54416 ] /Border [ 0 0 0 ] /H /I /A 41 0 R >> endobj 16 0 obj << /Type /Annot /Subtype /Link /Rect [ 156 391.36487 499.20001 406.18414 ] /Border [ 0 0 0 ] /H /I /A 42 0 R >> endobj 17 0 obj << /Type /Annot /Subtype /Link /Rect [ 156 373.00488 499.20001 387.82416 ] /Border [ 0 0 0 ] /H /I /A 43 0 R >> endobj 18 0 obj << /Type /Annot /Subtype /Link /Rect [ 127.62 346.42487 499.20001 361.24414 ] /Border [ 0 0 0 ] /H /I /A 44 0 R >> endobj 19 0 obj << /Type /Annot /Subtype /Link /Rect [ 156 328.065 499.20001 342.88428 ] /Border [ 0 0 0 ] /H /I /A 45 0 R >> endobj 20 0 obj << /Type /Annot /Subtype /Link /Rect [ 156 309.7049 499.20001 324.52417 ] /Border [ 0 0 0 ] /H /I /A 46 0 R >> endobj 21 0 obj << /Type /Annot /Subtype /Link /Rect [ 156 291.40497 499.20001 306.22424 ] /Border [ 0 0 0 ] /H /I /A 47 0 R >> endobj 22 0 obj << /Type /Annot /Subtype /Link /Rect [ 127.62 264.82498 499.20001 279.64426 ] /Border [ 0 0 0 ] /H /I /A 48 0 R >> endobj 23 0 obj << /Type /Annot /Subtype /Link /Rect [ 156 246.46489 499.20001 261.28418 ] /Border [ 0 0 0 ] /H /I /A 49 0 R >> endobj 24 0 obj << /Type /Annot /Subtype /Link /Rect [ 156 228.10489 499.20001 242.92416 ] /Border [ 0 0 0 ] /H /I /A 50 0 R >> endobj 25 0 obj << /Type /Annot /Subtype /Link /Rect [ 156 209.74489 499.20001 224.56416 ] /Border [ 0 0 0 ] /H /I /A 51 0 R >> endobj 26 0 obj << /Type /Annot /Subtype /Link /Rect [ 127.62 183.16489 499.20001 197.98416 ] /Border [ 0 0 0 ] /H /I /A 52 0 R >> endobj 27 0 obj << /Type /Annot /Subtype /Link /Rect [ 156 164.80489 499.20001 179.62416 ] /Border [ 0 0 0 ] /H /I /A 53 0 R >> endobj 28 0 obj << /Type /Annot /Subtype /Link /Rect [ 156 146.44489 499.20001 161.26416 ] /Border [ 0 0 0 ] /H /I /A 54 0 R >> endobj 29 0 obj << /Type /Annot /Subtype /Link /Rect [ 156 128.08488 499.20001 142.90416 ] /Border [ 0 0 0 ] /H /I /A 55 0 R >> endobj 30 0 obj << /Filter /FlateDecode /Length 31 0 R >> stream /|bzNYEmLh%psPo hxXvv^Ȼ VE?5&=]}d+L9=2xb<)`1JMA/C޹3 /Se䇃=ݮm ҬD%|?Cnͻz$oc"x|ƭbxS8}18m7'4#kRܚQnJH*.{Dl(JPH Vxj;T/y)3||c ^nU3rLKo Zk~0 ҩbgP|JEi֦4mƕx*IcVU(*֨:ؿaލH {;xa NƅZ$LD F}["O@(Ԕ.QetËn5AU^뚷y779@y0ͮ !ՒZHAzE1>C[l~ GuՅ=aOm~{˚|Od.ҠmAU}}G ߢjgdžiuT~a?-צ}o8%ٱ.gCC8_<̥?7Te."0iHC!#uwŹw2׵Zcd7&+-Q5\E Q<ĵD@_ "*йY@|C7OKo gЄ0NǓhQT6Ġo[\JtK6@zxfݶBa^)T!}JLx 羅}t Ͱt^V;vOVc4TTZA503k,dœцX'Y ۹ARz~p㞊R.i1ui9Fe>f /|v4*|76I] #/֪ȍ;3ܷpz-^;)&u?IHEP.W{A.4HA.2 Lp=yb\Tlf|ݼ*](l9?EvMN|O'r2O).?ؿefn6#=uF/4R;?h*Y!07<7yPiJ6C fl+M[S4 b `^T>ESlmUnіWF,8?183P/9[280 *xp{W"e&w EV'6zw- xU];v\ڐ7>]#Lc)QϮLU:qY3|\{ $Ǘ\W&єZc6KqO;D3Ƹ?Yw,߻VEVw)A,͕3_;HRP03h-W7zE3G{j$spRa:Um)e8Q;f?1.ŲȍV7<EPP΍D=HLjb"X8e2f{PILu)mp&ZmƧ6j9'#0C+ۓf0hHnߤ:CX&pyl%dPY@]_y-f_p뉊^p#1 ͺaU_Sj@Ӧ+Ӌ#F+3ue3K5 Zb PE V!Na`K~ErufbJTK٩ˁ@uLly/#CƇRlB_l~dcl1"x}VciNbmy`c]{J-XͰ=hB.ha]H9zA6xv+cJ9d.5?>SNwD^67}II[Z_J#]m KVn[={1Ug1KKnΫ?S CW'4nuߛBA/i<Ujá?Hf<1㷂֕ 6̭E!{ =I%ޖ̣TM/o^gHv PPV(٬./=ޠ)5D+vTaIZפ ca}%};_2Q 0ϖ2[;k?C'⩯ee_NhZ?@7`߯վhΎ&U =#G  or"[Bilkk8s׮8&K?0kw? s]ЬJaɻBnM.1R2m CFBG,8,jb,]PRq QA#rXef oSEjH's"'^81QԒ1wF,~/7k J^]P|ғ4,?/B}3Owy9:[j!3ǿu9?d.> áy85',Bݠ _ͽbRFJ eTӿ9XŃ A.awdw4sRC2Òl`17?n?>FXc2b,~@ Y{rjq}yFqa~„y$@ױIXıH[Тy% ![B} Ns z+X1[YF~5V& ZSe+k̎6Ea$&Q,L#8_> endobj 33 0 obj << /S /GoTo /D [ 136 0 R /XYZ 0 842 null ] >> endobj 34 0 obj << /S /GoTo /D [ 139 0 R /XYZ 0 842 null ] >> endobj 35 0 obj << /S /GoTo /D [ 139 0 R /XYZ 0 842 null ] >> endobj 36 0 obj << /S /GoTo /D [ 142 0 R /XYZ 0 842 null ] >> endobj 37 0 obj << /S /GoTo /D [ 142 0 R /XYZ 0 842 null ] >> endobj 38 0 obj << /S /GoTo /D [ 142 0 R /XYZ 0 842 null ] >> endobj 39 0 obj << /S /GoTo /D [ 145 0 R /XYZ 0 842 null ] >> endobj 40 0 obj << /S /GoTo /D [ 145 0 R /XYZ 0 842 null ] >> endobj 41 0 obj << /S /GoTo /D [ 145 0 R /XYZ 0 842 null ] >> endobj 42 0 obj << /S /GoTo /D [ 150 0 R /XYZ 0 842 null ] >> endobj 43 0 obj << /S /GoTo /D [ 150 0 R /XYZ 0 842 null ] >> endobj 44 0 obj << /S /GoTo /D [ 162 0 R /XYZ 0 842 null ] >> endobj 45 0 obj << /S /GoTo /D [ 162 0 R /XYZ 0 842 null ] >> endobj 46 0 obj << /S /GoTo /D [ 178 0 R /XYZ 0 842 null ] >> endobj 47 0 obj << /S /GoTo /D [ 187 0 R /XYZ 0 842 null ] >> endobj 48 0 obj << /S /GoTo /D [ 203 0 R /XYZ 0 842 null ] >> endobj 49 0 obj << /S /GoTo /D [ 203 0 R /XYZ 0 842 null ] >> endobj 50 0 obj << /S /GoTo /D [ 206 0 R /XYZ 0 842 null ] >> endobj 51 0 obj << /S /GoTo /D [ 209 0 R /XYZ 0 842 null ] >> endobj 52 0 obj << /S /GoTo /D [ 215 0 R /XYZ 0 842 null ] >> endobj 53 0 obj << /S /GoTo /D [ 215 0 R /XYZ 0 842 null ] >> endobj 54 0 obj << /S /GoTo /D [ 221 0 R /XYZ 0 842 null ] >> endobj 55 0 obj << /S /GoTo /D [ 221 0 R /XYZ 0 842 null ] >> endobj 56 0 obj << /Type /Page /Parent 2464 0 R /Resources << /ColorSpace << /CS2 2479 0 R /CS3 2477 0 R >> /ExtGState << /GS2 2491 0 R /GS3 2490 0 R >> /Font << /TT2 2478 0 R /TT3 344 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 87 0 R /Thumb 2337 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 3 /Annots 57 0 R >> endobj 57 0 obj [ 58 0 R 59 0 R 60 0 R 61 0 R 62 0 R 63 0 R 64 0 R 65 0 R 66 0 R 67 0 R 68 0 R 69 0 R 70 0 R 71 0 R 72 0 R 73 0 R 74 0 R 75 0 R 76 0 R 77 0 R 78 0 R 79 0 R 80 0 R 81 0 R 82 0 R 83 0 R 84 0 R 85 0 R 86 0 R ] endobj 58 0 obj << /Type /Annot /Subtype /Link /Rect [ 127.61972 702.10529 470.82001 716.92419 ] /Border [ 0 0 0 ] /H /I /A 89 0 R >> endobj 59 0 obj << /Type /Annot /Subtype /Link /Rect [ 99.24001 675.5249 470.82001 690.34418 ] /Border [ 0 0 0 ] /H /I /A 90 0 R >> endobj 60 0 obj << /Type /Annot /Subtype /Link /Rect [ 99.24001 649.00488 470.82001 663.82416 ] /Border [ 0 0 0 ] /H /I /A 91 0 R >> endobj 61 0 obj << /Type /Annot /Subtype /Link /Rect [ 99.24001 622.42487 470.82001 637.24414 ] /Border [ 0 0 0 ] /H /I /A 92 0 R >> endobj 62 0 obj << /Type /Annot /Subtype /Link /Rect [ 127.62 604.06488 470.82001 618.88416 ] /Border [ 0 0 0 ] /H /I /A 93 0 R >> endobj 63 0 obj << /Type /Annot /Subtype /Link /Rect [ 99.24001 577.48486 470.82001 592.3042 ] /Border [ 0 0 0 ] /H /I /A 94 0 R >> endobj 64 0 obj << /Type /Annot /Subtype /Link /Rect [ 127.62 559.18488 470.82001 574.00415 ] /Border [ 0 0 0 ] /H /I /A 95 0 R >> endobj 65 0 obj << /Type /Annot /Subtype /Link /Rect [ 155.94 540.82489 470.82001 555.64417 ] /Border [ 0 0 0 ] /H /I /A 96 0 R >> endobj 66 0 obj << /Type /Annot /Subtype /Link /Rect [ 184.32001 522.4649 470.82001 537.28418 ] /Border [ 0 0 0 ] /H /I /A 97 0 R >> endobj 67 0 obj << /Type /Annot /Subtype /Link /Rect [ 155.94 504.10489 470.82001 518.92419 ] /Border [ 0 0 0 ] /H /I /A 98 0 R >> endobj 68 0 obj << /Type /Annot /Subtype /Link /Rect [ 127.62 485.74487 470.82001 500.56415 ] /Border [ 0 0 0 ] /H /I /A 99 0 R >> endobj 69 0 obj << /Type /Annot /Subtype /Link /Rect [ 155.94 467.38489 470.82001 482.20416 ] /Border [ 0 0 0 ] /H /I /A 100 0 R >> endobj 70 0 obj << /Type /Annot /Subtype /Link /Rect [ 184.32001 449.0249 470.82001 463.84418 ] /Border [ 0 0 0 ] /H /I /A 101 0 R >> endobj 71 0 obj << /Type /Annot /Subtype /Link /Rect [ 127.62 430.66489 470.82001 445.48416 ] /Border [ 0 0 0 ] /H /I /A 102 0 R >> endobj 72 0 obj << /Type /Annot /Subtype /Link /Rect [ 155.94 412.30487 470.82001 427.12415 ] /Border [ 0 0 0 ] /H /I /A 103 0 R >> endobj 73 0 obj << /Type /Annot /Subtype /Link /Rect [ 127.62 393.94489 470.82001 408.76416 ] /Border [ 0 0 0 ] /H /I /A 104 0 R >> endobj 74 0 obj << /Type /Annot /Subtype /Link /Rect [ 155.94 375.5849 470.82001 390.40417 ] /Border [ 0 0 0 ] /H /I /A 105 0 R >> endobj 75 0 obj << /Type /Annot /Subtype /Link /Rect [ 127.62 357.22488 470.82001 372.04416 ] /Border [ 0 0 0 ] /H /I /A 106 0 R >> endobj 76 0 obj << /Type /Annot /Subtype /Link /Rect [ 155.94 338.86487 470.82001 353.68414 ] /Border [ 0 0 0 ] /H /I /A 107 0 R >> endobj 77 0 obj << /Type /Annot /Subtype /Link /Rect [ 155.94 320.505 470.82001 335.32428 ] /Border [ 0 0 0 ] /H /I /A 108 0 R >> endobj 78 0 obj << /Type /Annot /Subtype /Link /Rect [ 155.94 302.1449 470.82001 316.96417 ] /Border [ 0 0 0 ] /H /I /A 109 0 R >> endobj 79 0 obj << /Type /Annot /Subtype /Link /Rect [ 99.24001 275.565 470.82001 290.38428 ] /Border [ 0 0 0 ] /H /I /A 110 0 R >> endobj 80 0 obj << /Type /Annot /Subtype /Link /Rect [ 99.24001 249.04489 470.82001 263.86417 ] /Border [ 0 0 0 ] /H /I /A 111 0 R >> endobj 81 0 obj << /Type /Annot /Subtype /Link /Rect [ 127.62 230.68489 470.82001 245.50417 ] /Border [ 0 0 0 ] /H /I /A 112 0 R >> endobj 82 0 obj << /Type /Annot /Subtype /Link /Rect [ 127.62 212.32489 470.82001 227.14417 ] /Border [ 0 0 0 ] /H /I /A 113 0 R >> endobj 83 0 obj << /Type /Annot /Subtype /Link /Rect [ 127.62 193.96489 470.82001 208.78416 ] /Border [ 0 0 0 ] /H /I /A 114 0 R >> endobj 84 0 obj << /Type /Annot /Subtype /Link /Rect [ 184.32001 175.60489 470.82001 190.42416 ] /Border [ 0 0 0 ] /H /I /A 115 0 R >> endobj 85 0 obj << /Type /Annot /Subtype /Link /Rect [ 184.32001 157.24489 470.82001 172.06416 ] /Border [ 0 0 0 ] /H /I /A 116 0 R >> endobj 86 0 obj << /Type /Annot /Subtype /Link /Rect [ 99.24001 130.66489 470.82001 145.48416 ] /Border [ 0 0 0 ] /H /I /A 117 0 R >> endobj 87 0 obj << /Filter /FlateDecode /Length 88 0 R >> stream fҔn%(M#~UgLQ:mJQIpyٴ1p7;]Rp=o*l\Z"͗3o] Foa`ܺ4IB VF@$/6k `wɜgLxpDI=q+5Y&jC։(wT8| e'j_땳g[){T+HVZSZ4j&\BǗdI?P;9YUͩH-gC:џ//n[ai^ YT3VK$G`oמ7B3#Co ѻFL7L&D LCƤP=z}:|1s*Ş޵jy=98pe6kK0ٌf(H&X\< T Q ە )\9GR5RJmث:&H7m/ wk2W5AƜ ‡pG@˰vH4M $Ӗ`鸞źr>\i Vf,ziG6cfG8tӃn0'2hM-#z޴.(5m3{= ! dntn끉X!hi E˂SCO쵗`ք/CiWsÎdUW d?"͍P .-Yx/ @>oz1J&+i +v-jހ$au ST E"*P3x;1h2'Hj'N»o21z_3`CE c$Hj]ϬcBΞxKq*5Llh:_9NaHKYi> Gj!J,Vd7ﲕNJ\^yjô#1C*r8%:_ \.& eZ˕`r^$.Vxeꏴ [!^e.ycQ \y?sAU&ٍ >E3yf93~Γ]Ba\/ѪФN^\Lcǝ&mр%F┙<#?Mq{!Ywsʧ|U>pEgHq!nCwD:0dY)>x@XAءnB/+{|"jH$$̍Ytfբxt6~V '{Wʤnlk4kFwe'b h?<ЕC [ I1L6ú?`,2 TS<h#xPZ~<.y #*(rp_;oEZ9e#< ߉!bF@qe>4"ZԽUa\7'LO@ 6q[LT%APQTWMN;J@EϚjHtآH=XZ/oU E㉱sq84fLwEbQ>jg:g SaqR'M#4 J!vݕo'矟h>D'xfNL+H [m9ІˤhbM6ETsQ{Ժ#~ospyZ+e{ɵd/ŒVV(gm5X)D9H"/)=K Cu fhYaRH+a"S(9`r5M jgB'+wT3HJqF^H42K_4n/UR Z}&Ĩwh1SÍt*eq9d% RM,(IoD$ N#D',,l*0f "$hSWѵ5|bq=>[vZQ+d.H=PbӐ4aج_ɟ -_(2ɘgcb( 2Jψ<ܠ)v8z|*Mía(XUY;3fmKUC"c ݖ:4"rܠ4Ǘ2?v}23EQ֮K[EȺp2; g|B4I156:$s,Cg2 XHzH̑ThI%Q iqP<<i'鲎[*uCiA|3`4'rKJT>HU d )#$˝F][ {PQDzAmw;BU{NHwkCW,)c:*FmB~֥ y0[Kl+G/zv2k-ǧ852^ez@vU^ΰ[<>mu/|ߧ[aczFz$w.d+ikU83 ~<{'u v(c*wH(5R)bۃ#',B)#=s@r2U}}gE,2MqM ӧҳ~Շ2,l򋅤 p@ s.鈕7:P-8[}Y yz%-͙GBo+ +TK'}ǡZ^!`5jGNcF ,\qG͡)Fn7Gj?g6rf Zk`̈UiiGA&pPUQNC}J5U\ZIWv r-ܰGo;jM]斋tVu j<g^$G%[XSL[+7hBP }a=c-lP'u[`. Ԉ͛ xv i M)s ̟ȶ\Vx,yV|3$VX$3s{;X_j#js:MjR4rX+[|0$mDAƬ`'K.ӡg+d)a~sK /+_Mb YR1h<7K"(6>DEil˛]9aLnPKw@'=;Xy݌J=T[lH1KWɊ@li,O[=_?*P\C;-|6<`߼Dn >!xՈ$RTqn D (h `>C|%rA=b$P&O 9;0U1Sx/Roew$![0˭R$5&+ۅ&C@u}ϯ~T8jJma>P7:;dJ'D2߄zt}9&'oSA[?d刦if➪ CjJK9wRG_XYOW;[8&N혨"e!6j \rMqM %qwH~;k52 9ޕ=ej5@Ȭ +0Pǥ m䋳߶K(|CGDL8IJd% \u]oĚLȀ'7"k֚7,6EKNhp}K#c5-$eKHa w AkyaQ fR98hIZV?w`\ {0z2BgYGcV[pI$O6TeDہ*b!q(,I}w <5ng24/|j!T' .@\ֺKZU)xA>Vk{&JkܒuhZ0AC-<,Kd\_^ endstream endobj 88 0 obj 5519 endobj 89 0 obj << /S /GoTo /D [ 221 0 R /XYZ 0 842 null ] >> endobj 90 0 obj << /S /GoTo /D [ 230 0 R /XYZ 0 842 null ] >> endobj 91 0 obj << /S /GoTo /D [ 233 0 R /XYZ 0 842 null ] >> endobj 92 0 obj << /S /GoTo /D [ 239 0 R /XYZ 0 842 null ] >> endobj 93 0 obj << /S /GoTo /D [ 251 0 R /XYZ 0 842 null ] >> endobj 94 0 obj << /S /GoTo /D [ 254 0 R /XYZ 0 842 null ] >> endobj 95 0 obj << /S /GoTo /D [ 254 0 R /XYZ 0 842 null ] >> endobj 96 0 obj << /S /GoTo /D [ 254 0 R /XYZ 0 842 null ] >> endobj 97 0 obj << /S /GoTo /D [ 264 0 R /XYZ 0 842 null ] >> endobj 98 0 obj << /S /GoTo /D [ 264 0 R /XYZ 0 842 null ] >> endobj 99 0 obj << /S /GoTo /D [ 269 0 R /XYZ 0 842 null ] >> endobj 100 0 obj << /S /GoTo /D [ 269 0 R /XYZ 0 842 null ] >> endobj 101 0 obj << /S /GoTo /D [ 274 0 R /XYZ 0 842 null ] >> endobj 102 0 obj << /S /GoTo /D [ 274 0 R /XYZ 0 842 null ] >> endobj 103 0 obj << /S /GoTo /D [ 274 0 R /XYZ 0 842 null ] >> endobj 104 0 obj << /S /GoTo /D [ 279 0 R /XYZ 0 842 null ] >> endobj 105 0 obj << /S /GoTo /D [ 284 0 R /XYZ 0 842 null ] >> endobj 106 0 obj << /S /GoTo /D [ 290 0 R /XYZ 0 842 null ] >> endobj 107 0 obj << /S /GoTo /D [ 290 0 R /XYZ 0 842 null ] >> endobj 108 0 obj << /S /GoTo /D [ 298 0 R /XYZ 0 842 null ] >> endobj 109 0 obj << /S /GoTo /D [ 301 0 R /XYZ 0 842 null ] >> endobj 110 0 obj << /S /GoTo /D [ 304 0 R /XYZ 0 842 null ] >> endobj 111 0 obj << /S /GoTo /D [ 307 0 R /XYZ 0 842 null ] >> endobj 112 0 obj << /S /GoTo /D [ 307 0 R /XYZ 0 842 null ] >> endobj 113 0 obj << /S /GoTo /D [ 307 0 R /XYZ 0 842 null ] >> endobj 114 0 obj << /S /GoTo /D [ 310 0 R /XYZ 0 842 null ] >> endobj 115 0 obj << /S /GoTo /D [ 319 0 R /XYZ 0 842 null ] >> endobj 116 0 obj << /S /GoTo /D [ 319 0 R /XYZ 0 842 null ] >> endobj 117 0 obj << /S /GoTo /D [ 322 0 R /XYZ 0 842 null ] >> endobj 118 0 obj << /Type /Page /Parent 2464 0 R /Resources << /ColorSpace << /CS2 2479 0 R /CS3 2477 0 R >> /ExtGState << /GS2 2491 0 R /GS3 2490 0 R >> /Font << /TT2 2478 0 R /TT3 344 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 122 0 R /Thumb 2339 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 4 /Annots 119 0 R >> endobj 119 0 obj [ 120 0 R 121 0 R ] endobj 120 0 obj << /Type /Annot /Subtype /Link /Rect [ 127.6198 702.10498 499.20001 716.92419 ] /Border [ 0 0 0 ] /H /I /A 124 0 R >> endobj 121 0 obj << /Type /Annot /Subtype /Link /Rect [ 127.62 675.5249 499.20001 690.34418 ] /Border [ 0 0 0 ] /H /I /A 125 0 R >> endobj 122 0 obj << /Filter /FlateDecode /Length 123 0 R >> stream y Jxc!<_*sP'C巬А+)ˇͺL./l GiHo D=f4GI.0g]a%Y7S `4$%(&l"$`ĝR{49T@0x8h,iɥ{P4O\Q1S_1zf}18S %ksFo~ jIxTߏ^8HDΐ+kT'/*hN NfQZsT@%>%4< Mcf׽D~8b]lʽYmiSCi/KC*\Y_+a3]u DVN@QCPf3dGYU(gﳁ#OS)Iqc.FWJ3%H~2eZ$AKXE TRs1#ñ_hZ*o}"@P7jq0tbjLh@Cc{:Ƨ':y?:~=hl2eewL"A/ep x& |>qw;LT73BvBWN)Bu[6o6`k7o3zv >h?(Oa8P X/j endstream endobj 123 0 obj 697 endobj 124 0 obj << /S /GoTo /D [ 325 0 R /XYZ 0 842 null ] >> endobj 125 0 obj << /S /GoTo /D [ 329 0 R /XYZ 0 842 null ] >> endobj 126 0 obj << /Type /Page /Parent 2464 0 R /Resources 127 0 R /Contents 128 0 R /Thumb 2341 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 >> endobj 127 0 obj << /ProcSet [ /PDF ] >> endobj 128 0 obj << /Length 9 /Filter /FlateDecode >> stream $`l#» endstream endobj 129 0 obj << /Type /Page /Parent 2464 0 R /Resources << /ColorSpace << /CS2 2479 0 R /CS3 2477 0 R >> /ExtGState << /GS2 2491 0 R /GS3 2490 0 R >> /Font << /TT3 2478 0 R /C2_1 343 0 R /TT4 345 0 R /TT5 346 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 131 0 R /Thumb 2343 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 5 /Annots 130 0 R >> endobj 130 0 obj [ 360 0 R 361 0 R 362 0 R ] endobj 131 0 obj << /Filter /FlateDecode /Length 132 0 R >> stream xr ^,آRMȶqy)j Jv4~ ڍ+@{AF,Vfl8}1Spʹ]%`= QFt}]$n%GIՌy*VwK5k92lgs8rjW=KT G d>Oc13g^ASd 1Y&!(#DB`bcB5NCO|aFW9<6r1_KLAT%1< $G(d@=VkGI:F# ]ڮ[PPr"J?_ٍv9Y|Vkm}+MInv8J=_=*pb(dqP B̝ulNX!,`%mO q~=Hv v}Q^ j?A P/?(q6[KaJ!Ee`s|}SQVG:_9MY|BMcmU4 PB鑟iߒߕ&y|'Ny.mw+'̥sO۱/Vz.A,Zh:ɗclAh_|"Xj4Lht* 1{zB Ç;eQfq69t<*N6UL3*&:]mnim%ـNFԻpJt[=*XDcyӶ~0](h +/k~_~|JaY 2^$Bt`,# ̤CzY-s:!׼r&b \o@ݘ 96n#iu&9hMYǑwǯݨ(PVàI%7I(X'N6*CeN(؉Eɠ 4!hplDOJAS;w4QvrD}0̖8S.;5vLC?r~F,/!{l<̮qr*U|MGaݞGpktVC$%%pkU!W/<kQ VRH,5p"Qm9I4 !yTz-k0|9d9ECab|Uqɯl=h(nK_} `cg<|\><.sM- &z-@߈lʰpDp%3}͇ nzA9%T&GֿHP9*wY=Lx1+~JWЙknqr|BO]8ށ+,zo:.X.+Ƭbٍ?ho>X&6Ř5z(ADk Z w:e-\{ & t}sS?5\.-'rOy񎁷gO4ijL;(MN%`l#[W+{ot7O[] C u9| 3͚6]u^J&D>,HiK Z@gm5 h>oo.ڏWw=_&a)z<oڳ%ᔅ6Sb] -8֝ VEGEo.˭ endstream endobj 132 0 obj 2220 endobj 133 0 obj << /S /GoTo /D [ 175 0 R /XYZ 0 842 null ] >> endobj 134 0 obj << /S /GoTo /D [ 215 0 R /XYZ 0 842 null ] >> endobj 135 0 obj << /S /GoTo /D [ 221 0 R /XYZ 0 842 null ] >> endobj 136 0 obj << /Type /Page /Parent 2464 0 R /Resources << /ColorSpace << /CS2 2479 0 R /CS3 2477 0 R >> /ExtGState << /GS2 2491 0 R /GS3 2490 0 R >> /Font << /TT3 2478 0 R /TT4 346 0 R /TT5 345 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 137 0 R /Thumb 2345 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 9 >> endobj 137 0 obj << /Filter /FlateDecode /Length 138 0 R >> stream 5OKq2yr"63F|yL 8e6tt5- cCDaA/ db).Y!9x w[Gꤋ:{I{[ΧARrv{vM"f UѬU&8:(>,&mIels !(,S hHR.7"ʼnvC^AD6K%&}Cn23˛Ԥ Y~,qwfE\5h9"l"X~'ou J^3\HfHȸ:q 3t-c.Qri.Z ('O:z*llx&`c4N;3yG(O3˿-OS"CZG!a n/Kf>6VE6f9sx;$vWU|>xD$"yW xt[w1✄$2 J[/KӃci4$c1Yy9Sdi\הjD_| 59ӕހ= .FL4if {O4}Èd]Sn1۬75{wѡ é\m >xrJ&6 M :IL9s DdiٮvE2g:|%HȶC} $d(7yTnKԵR+?w兯ĤJXZxĒhX \wmgV$[hs{cLl31%sl6C2I6Bɏ9ssP!@>w/P/c3}-t mƵ!*f٠Mw= F0u‘Yg쪑Xl =B `b$_m 7" ٕuF (2ȹ22$|7&s+``&V}e}G (8HXQ!/\ !tCT Rbx {4i㧬b2VO1@V&vʦgۛ-K̷`Ez6x_u#DqNs6뮞AXW" ﶅ}@J)dxo(5.[5\Ȩ >q9t]`E9 C}e/DF5[ѣ"tB4A ,Hm21Nrj? e$<`h]RS9-۠9^'IjȔtgCbD0`,c Ts5jJjSOCO⛼1Id jЄ%Oj;βG|AZvmgwɏAOib᥷}Djk逼\i@x9OVL+LL_AZnI4bKPK%]hPg.(0+gѢmvI9G`ε}Z[,,6~ܽK{塞do֥*I;B7 eMy2m(f)_vRAXSة.=#9͖E*aEKYEMhp|T4UNy6& &\]Y(tфq\l|N5AL31%~W* qkuyֶgVD΃~o`Q0 FP;+I(#oǣtԘw0ϙL(Je38XuERY`pT`'+&aIJ0A lxГ4*?dX.i <{Ru '.iliy#hUj<7?^c3N.62 K4&Kv-Ʉrup/%)Eh܉j"ex _x׹﫟f'dM,mdw{h@lUc]T:xz%)LN",olg'QU"? Ϊ摒qW0{|GorҜ)Ջla'愚um*?ç>PNkW|P7yWzuvl#zmA&o {Lj߶ɷ5+ĺeJLQ<+ýeNu?0S pxUEΞrA^ ՁI9 6$ D=TՎuL8BC9φHC}꾻3G4C B-DzYiq= endstream endobj 138 0 obj 3408 endobj 139 0 obj << /Type /Page /Parent 2464 0 R /Resources << /ColorSpace << /CS2 2479 0 R /CS3 2477 0 R >> /ExtGState << /GS2 2491 0 R /GS3 2490 0 R >> /Font << /TT3 2478 0 R /TT4 345 0 R /TT5 346 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 140 0 R /Thumb 2347 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 10 >> endobj 140 0 obj << /Filter /FlateDecode /Length 141 0 R >> stream ʉ1iMΥƵCC HFKN$̌9|USю;u6(Ѕ=屳>OzDS)w:Ugk?{ޛwj^#Fmִ!Z>p/) _< ubm M̆ >1}t^4i? \=;6%NUu禳_Tng!)}ɳMNt[ n3s @HC5rf\,-[IaJATF ˹bx.,ԭDr 1,K}??U怏Ը`_'E\i":[Z3'BG Œro;kyZ2xL֛\ ˆcj*DeƘF2ASO= -quf)c;vHDUio~ES! ʀmK;+AZ-ѹ91:!t72L8 41 56- 3>[W,uzʣy7_m׵?Հ5,fBO iOEZPf+P}b3K/,*NZm:BAk))$d%xTw#a T)O*]-;.j1_Ԯ KO'QPW(K [豄0~%JACxCf`sQ3Q 윋G΀ts  #(_ct_ s:gi=qFzYurƿj-6GcCG|=i{r׵F4J2nڮUE]4r q &ݳLѕhPխ޹fJ<+ iq1n%OLf]2(&tW8r Ocm2{0~ SX"&8RƲ}J Ic)P;NȔo[(L@c#S#YGշT[CmӤe / <8uGᄿb/D}k*!͟|vMYg'>4&' j=]}U`vLY+8u/yxWI\bhv b}[?J >;K:ˇBzcu:KVk.ѱoLqw b[ńL]%uax~Q[d +x܇OG~{ֹG9ڹ1B5}>Q6'iJmkz!ߟ"Jr>L/fq8QE?lc@XN1< S~ie 2bA-`I^8Ga {tSELzxwkI"ŀKT6Mq<]}n2FQ3-÷O"Lj_1aXq6rPt4i!P+<A,J% Mt;k~G[[oz,|u`VI`*OjIrll(` ,cp;c1$; g#brv x 9-K2lmۻp:>˨!fU*Cœ2L=4GSP6f1fS);Wf?l{&65*Z@BأN$N wenja-;ndŰ. Q=p4̧K;}mUCUSA+Zcm#_o> jQG$0+(Tt0fq$c =t5#T 3SpV{;U~B57 MM[&E_=I {@ ׌=SiUqz5܂qJ06FW&E4SQ#!ΟtҠҔC$㾯/oA%k [["I vMWҊPW${)NzJrl6-6mR)Zr'k R tL`*MڸL"̰j33JyYB?Lڽ~0ߓbU8k±[FvMRHt|?1oQŒ7Qdk1}˷+7XoLcJϻQ8?F,}pdӄ'1%a~-Q²?Q-Jyz\7({}poѓ-7W1]mu9|U*pD,ήvO0nڣp]xháL*uhi携Qq-+5h\/ZCJ:2 $'Ǟ!ֲ-mk\5+'ni.!ZS!Hy7<8+ßsՏ)4x>.U'02Ψ@S|b-g^ l7Jr{?1Ӱ#~Һ -.}kmJIe/[͍qlEY׹?8 @kiJ< ,)| ಹ׷o_r֫=^ҿuEdY ȳѰXznyf4%w) к*أ" |"/c< 1gS+|QWL8rd HՉ8YPp=b<\~NӇxD7jۈ^Ae0˒[E$O-R?5NnI N4s2,nr$򠲫U:|A)צg`{w~1-X?WH׻=*cB7yZ(YaHĖ$J&~U[/02G@U)1N䨣35mWuSzr˿F)lx]rˊj`?T뒰@~e+xM$A<Ƕܿ)̲ikhD{JЍ?CI""^+S*,3J8\B{(ۧ+L+'n凗R |<>7&WϮ-hN[i|~ Z'H sI`Y\K,Ζ/%Ƣ5ԭaJm$q<6ķёNCJ"Y迧F[ږ$ 뾍!h#vb &RNg%H,_FR+Pe,HՇ E8  f;@k;E -pq[e#gT%"ۓfɈ?恘J QIg# ^pʎza0< ΤtA;q:hkelh[F^{Rk{^}rXd3,49ٙQudy;VF60 cU&< ', U*Dvju0POkF2K>=ze9|p# Q6 / 8ϮsaPƤ8bi2l82n>q5NF>j|NC#[}=Bݐ!=:2EUX$Ol'qBAKVa~HLDD'49!k(᷊s@b"NUD endstream endobj 141 0 obj 4350 endobj 142 0 obj << /Type /Page /Parent 2464 0 R /Resources << /ColorSpace << /CS2 2479 0 R /CS3 2477 0 R >> /ExtGState << /GS2 2491 0 R /GS3 2490 0 R >> /Font << /TT3 2478 0 R /TT4 346 0 R /TT5 345 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 143 0 R /Thumb 2349 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 11 >> endobj 143 0 obj << /Filter /FlateDecode /Length 144 0 R >> stream |;|VuiY8<8_Kr. 6R _gk =fI/ Z-q[ VYȠ,Rzl퀋)#K ` ghŰ;Zxͧݖv ;rHL<[={7`0*]T†Ex F;jC.hJץy-ShgJ3:Z$:]a7>uy=s2uK z"ٕz҅{4 /Nbfֲ-3Dݛ?=geG숌3 >L92 2q5ƉDjW"G[}㷔ܼ;vύrXCä;s3 oxKQ'#LT3t5xǯcVS+)nx_.P}MXv86Z"E8+Hd|-dQIu qD*ҝ̽De* rS,Ì"D+."t"3C{o;lpEш~sluu֐p{YFJLYky7ZňpYk,}z|dV`C3; K{RؑfA0zR:`ѻw1{zJG-%-a0OGntY4JK:ގ.T`= yB>O0<1j9{>2fSdšTP4ij1Ul#4^]Q>4IQLiܣu.<+SUrt׸Spj7~d* hω_QַM/q8BHإkr8P{ |%a *xl]PFMcl0~p"2Ͽ,HRѫHf8X3}0"C ]1!4i?!u?O Oiʴ-w6)4m˰  c"kǘdNc1x]dohĊNxvXxIyv~JiG?].zj 64:cBյ#d$RY h ٶɌ@&Oԕ^ΛjˑcsJ$XGNd9=<~bluqbg<]nee{В"ȴbX/'#x[v lZ›+benH= ApHk>x hG4<=$Ѥ [` Q(&iCvr1Kpѵ=ҹ{5.U+N?#_m7('I̓TV䒆|E`(: 甇̽=(=)&4T[(Js:,yD-0PڜU)53D#`? jpB!4g,8(4 ؆rHINTn`жDޢs׍U=ɬZ{BT5glT_]oVGL-FNdTE#AA\gmB>^0-s %&Db6q|n@ҭK߂i PdmpEnH4ndڍ0Fg3BŮI(},pC X,!̆eI\c]=Npu˿H00")a= Gj櫽iEW Aڼ)2ju\q8ʻ+.h1Iܠ99#r^RWLaRh}>wf:nYn"nQ5TEa.1+=t=s{ZM^ [GojRh4b 6n2J?l{+or(UWvNzLjm1u%:%ġvs@U8XyNzІmX Vz F#1bо/rxѬcű Ϙ35+Ȩҧ? ʑzMs<*2ŹlBpN._+ù<7M&ְsz@$h oR( p Tt.=VeؓĚL*[c)=.js/#Fq7jCEx0sasR2+.hBuVXNX$V3z{70/rImD=\!S(\"rfR?r,nd*z(ˈF=VhͿ>8ʋhL5k=ajvDphNy.jvgkdF85_2-'I<0RB /C0psHLS=[nEu=[ΟQ z'A.~|l=)uI!dxqzG ډD,ޡH7E&~^hWuF4|ă#`.D\91݊hʮL#kD*zgtB_]9mkʏ 4HR9)uLbMV\ZG4I}>kI l~&"7tz~w:S8i%9whaH_]~EUs%AFTU퐆T{]zM4)WX]aqjh-{U~U>v拪o9W>|<+y=vʶ.Z߇!!I;c[LZr2պ vQuܽ\~_Gm8s?o"+JR3I7U0&TC:4HLOCfKrprsc}1@AQtOb:K^tkP:I7vސϦ Ϳ28P}Pwlw!< !MPJ91|U>4g,tFh>?r3:k^;O+ ?=3;/hV{*|X;[8tE_R|'5᪮<Հ:HC/JjP>#p=Ȥ;04.Z ][ذv r;;3@%S'9! bu}@1?ݮO ~5!4Ge$ &$%D{懡gXc_ε%TeJ4/kJj룶J63ߓsM3i GV體S"@M-c IBp )oQN؜Drszo`je ۼItVʺGb!:ų?& }?dXX뷹$g-M>4̙> /ExtGState << /GS2 2491 0 R /GS3 2490 0 R >> /Font << /TT3 2478 0 R /TT4 345 0 R /TT5 346 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 147 0 R /Thumb 2351 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 12 /Annots 146 0 R >> endobj 146 0 obj [ 363 0 R ] endobj 147 0 obj << /Filter /FlateDecode /Length 148 0 R >> stream swk_is<'}:BY4`*1f+C:(X)XsVF#Y`V$qtC7[l %յQDW0T,Q? 14}}82@VO2r> W"IkB$kTs"Qfo!gAE$L~:.L6], `bcR JcJmpx8lH^6T~)@Q jW~WT!6E)4OӮ#1z)|2?|`!)}&纼2 mMVb-T'g:/˨)6k^0{;@.);#?oٖ?fH WtfR|2MÖv~v ~ ֒QW=J(}vbYf깿0Qa~Ca9HB87-?(D@X!|r2z4{>@zC}=ڊaJY3$L+8KI رܷ~?FN\rHˌn)d]鷾wnX+ȋ*74gaoEѯJ(l. F[m}\1iWRDGDh3wmixv ʏf4a)J"'Ӆ[cDjQHdzmh?9/ZoG@5>ZhUuOz]rQc8\#$e܃~~>b7NVDӹyì]w7 vϓ$3J0hQKlZyu:LkK>_%isK9NȜhl3uǽ$ >Pe!.ָibnTi0X7fA@:BS]m^\/\ $2ʆYhC ڜFx"tq Ý\VxlT!<-%8yz$Oc.m{E 6Ƚa3 xiW5:Ջ84M Ȁi6v;@׈}dTT~^kduOz7BagAƉ AC&2ߒl gFH9i1z]!+e'2\5: 6g \¦YOJ9]i w )hSzH1ƺߒ*~2O^v-F>ZI؝ F)ݒ <|lԚ փtF!5y i{Վh2jړ~MzhJ-Ώ l=D!\״ȃJ#qvLBy_+y9me5qR4aG兎ޡ)ЋVQO^r{ce]`{r_<DAwrl)( lg4eYGNΚTv$8Lk64{Ծ}e/^ڭ<|$@JYKp: ړ ub-H:| L|b]l'F6"?5 )l'&dB 5-ӝdO2:' .;|.#WyqMO\\WYȝ (ڱ$&\zNJ)WNmS'9,i=PeA Bxe%q3:9 SJ6Oh%aK+ĮXD`j>(76xae%PkP';ChGZ(Zy/EZZ"(R}x+ls/W,Tմvf\8I70pJ l"s<|%it6WuN"&V[ %9X*OcNɼ ޢP%C3uF˧58uGs;rzɪ|XH dv!-_.*fA> endobj 150 0 obj << /Type /Page /Parent 2466 0 R /Resources << /ColorSpace << /CS2 2479 0 R /CS3 2477 0 R >> /ExtGState << /GS2 2491 0 R /GS3 2490 0 R >> /Font << /TT3 2478 0 R /TT4 346 0 R /TT5 345 0 R /C2_1 343 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 152 0 R /Thumb 2353 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 14 /Annots 151 0 R >> endobj 151 0 obj [ 364 0 R 365 0 R 366 0 R 367 0 R 368 0 R 369 0 R 370 0 R 371 0 R ] endobj 152 0 obj << /Filter /FlateDecode /Length 153 0 R >> stream Ro5ǮJd~5tMwlCض- EB-?7%m{3h? <߄B#&++fS+f>WZ'.hpز2$dtr݋9̴Yy>R9k"THzzQ#ad7I5'A$`DyXlim!"76Z< TFPEYounˏj8<<$:{!f$fVQv{ xa1%G:^h{wY@$kVRK;e#(!>V61y%S CW2EUz >:SnQ'gr<-IyJmn/u8 1:-,wDEHTYk!)ɺv&-9Fp5+b^ZmnQE4,.xvZʞ(6Y\F6 z>(ƫ@671XxaOЊdT&(ԒG1=+YTSTeT;93ٵ5QIlXz^o~%>P۔*gS۽$HC{8[Tsu, 4k:}i:gԶ߅:İ5e_1> iD61ǑPL=ڻIS`o 0IXᶘᘝKv]!loG(!xĬ:,mjS=S] ͡@`{x,zE#k'ױC].(!bV2ށ܄ya07cXbg}^*«^ N6jp=C?tPz咒pWRjZO|lK(2{w1"-[VTºN{*nia}3?&2ni8}r(Yzkp(>q?Ov{rM.pf$"<4;Lq/39]{k'HwgcWJU#AB\zFHw,?s|o1b)> 9vϯDo.7iմ%hn@0Kx̩Mt9=ǝ(b*ÁbѦ qD-9+ 'Cg%Y`ĸ@]Ƕ$1x3. O@6 M"ÓKJ$Jӥ U1/$/KH}䲾>L$K]v@,J?N»ٕIv}xYVhGðm=S+fNP4}Dh앛 SiH7y; vUA Բ$Un Oft%xť;|J3'Xj],9wy &Ui<ոEtkj0_×%o;PsDz'({{6eކhh\y*,ׂ4R]-5#G9vpxaSiTlWkkē8npVx X2Y U\S5 )<$"5U!1&댠WV9|`f O'%ǑoY:JٿhdJI{܂br [q&_. LB v=ccMf &i:,p{?3 C^DDMTWg+Y6: frh0$gcQNzh&{|#RKtK#&P._tZ]#.Yj+>٤~?wPR&uxwP5Hۼ'/Tv<-`;e$ph~<>ҭQn"Tf= >D;"Wzj#v>ʭȴ6_VLƪƠk;nJ]9᯷Fh;6Q{.E Xd楂d9giO^̱Eit7o]Mg[XcEOYa!zV SX2nG&G™E~ڭ`Eu[TAW722S>\w0" !j>\އ$.uej}-˝ʷ?xh.“ Py+Dy`.k+WZ.vC8%1:;1n80w]|r,;.8$[cLիDwX59kXtnx-Bk9}uzZ] qVg(ZsvSi9w9ßG/UЃl%Y~ltFpI_^~]dX?/$&vϮ.k_'<w ЂsB/HXFh-M֬ ri"ȊV%Zb^׻3{N&(2p盟m ᳖y53%9⶷5&-p]687/jSI}aW"*3!jUMwЭ5J7w)7:Z}U|oߞU޶*`h5 >^X8_@ޮ!7 /?CPI9Jܣ.E b|Sŧlz Mo'0 ZBxn3DcijZbbb(s ѹ#D]P'3#m endstream endobj 153 0 obj 4260 endobj 154 0 obj << /S /GoTo /D [ 254 0 R /XYZ 0 842 null ] >> endobj 155 0 obj << /S /GoTo /D [ 269 0 R /XYZ 0 842 null ] >> endobj 156 0 obj << /S /URI /URI (l/54 &'H;1׷&0m;6H0_) >> endobj 157 0 obj << /S /URI /URI (6t!\rmc/t%~04XӸ _"JZF~Y) >> endobj 158 0 obj << /S /URI /URI (p\nrYǣ4]4Cs. [ #A) >> endobj 159 0 obj << /S /URI /URI (U2~<iFu>"Ꮻ[U9\n\)) >> endobj 160 0 obj << /S /URI /URI (W{uxvr D_e>Z̥MR]|!Ç.H) >> endobj 161 0 obj << /S /URI /URI (-$8UaϕJAcƃh) >> endobj 162 0 obj << /Type /Page /Parent 2466 0 R /Resources << /ColorSpace << /CS2 2479 0 R /CS3 2477 0 R >> /ExtGState << /GS2 2491 0 R /GS3 2490 0 R >> /Font << /TT2 2478 0 R /TT3 346 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 163 0 R /Thumb 2355 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 23 >> endobj 163 0 obj << /Filter /FlateDecode /Length 164 0 R >> stream Ui5(3/ VSvmlRmIbxD򙙫; ӐXȕZ>S2?7v`x#=oƑ!q|O%pk(/='"0vqF+"4j&$B;'g#ȏb7]'s6l-io~! eP[v]%#g9}Yr.tO+lf\w:RNVCXf̆#=W`q[="J`g|E+yvPnЃCy;d'$n ܊oQxi m1~S}^=B!6Bպc}yT%*Sxˈ Ki'8h60K^&mJz Z/V!XÜN}:M"TadZ=bQmRn@rv`EsdFrV4PGYhIY4m{b{b<,3je)goRꈡI>!j5wm}K>i\F 3VwˊTntyi \O XB#P!_nm։b|;o-NP3x Ufz&cv3u ʊ !Om>*:WSIs̏;ocU!7sZTDjp/k6U[1d'""'-G.D3窕c+ENFLڜAf HeQ \bUa@#>!)aOLY#NSLÐTTa /N!+ xC>/NJ Nh<^U첾&5aoo5%c%)# %PfLJY8,EMu.3ckI_?]V|S;~,r8 9;!,6~vzaX:GEn .mA,k2lE۳Q364ALA2ib7$Ï R˦iC(F2-z:!;/h$;n;3Z5B@H+TZ~OeQT+FP}ljHOTw-zPƘR./;+ Q>#>(ݿU0"0 _)롆7d+aDɷE@x9D%(,3чjO=ym,i#=fOCp',8uAmt?s=JP?&VN,)`Qx(i/1m}HhbvTX dYƥp6n}H׃)S暢c@&t;D.Lɔ7p26sw8,=Mr#ޝktOTzi7:{f ʾl={y]"AU h 0Ҁ,`(ҝzs.TCf E,M/Ĕ}y#e?hv~^[5n eA):󔖯B56G^rœ5w.zzU+jJT$]Q& 5ovAϖgCW_لQXz`J݉mR'Wc^hbRRbPήCL-#;,Z"/|he㌒yБuz\3䞹AV<%/"T\~`>lF$g|/œ_¬>(U:n8ysբ`^}_?!3: p+`L.-~P)XcѮvvlۇFO^sR)%Zqc79W@b?IAW{e& s!tADEND\?POVLlK%z) VW.WZ3U:qٮ}Ly8OW"[eYW;6y-x7HTm6.W@JE;B֧IWƱzKb3*BC񛆋ShE,b2oFCT%" op-~3D>;k՟:_%]BJȨPq3tjTy&M")fZJr1yL?:7to᛿e|'d_Sc{1cAGQf<^v+9Ny:YBX\xzV-K%\3_cD*Zcٞ޻zӉQgnT1( dF4u`}:1Ls/(>|]?J_o8JfUa6$!\q#SQ-g%E7a4pqRry(>Kk_(/'Y!~th4lcw8*{7lIRtrYc,Йa0l NӇټBEh؎{+!a%h| ƥ#8`hlP!0C{͗i (iǦ{O/sWdWo:;Zio 䣄8%S9-s)ei,"φ=sD7a$+ZeNJ*+53_m w\Z<4&>2 T$ٶWÝD {KYt<2¼8mkA#a<品c3D!Fr@Y m&uoogFhBZI*"& mL(D[70 endstream endobj 164 0 obj 3568 endobj 165 0 obj << /Type /Page /Parent 2466 0 R /Resources << /ColorSpace << /CS2 2479 0 R /CS3 2477 0 R >> /ExtGState << /GS2 2491 0 R /GS3 2490 0 R >> /Font << /TT3 2478 0 R /TT4 346 0 R /TT5 345 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 167 0 R /Thumb 2357 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 24 /Annots 166 0 R >> endobj 166 0 obj [ 372 0 R ] endobj 167 0 obj << /Filter /FlateDecode /Length 168 0 R >> stream ƘG/"ωjW VɫPȄe<ܝa((z*Or@0oz:Tm\Ѳj%c|tu[s<}wk~TJc֒(pVn6?C4=`82p?r'NU~jrW;f2$;oa"zC;d]}i&\0a_4MWX mFtX V0dWMYo@vben]-ި;%I+pJFE>5re#}kdv }Sh7=E RXaC/C}"kfN N鷆n]ˁ~N<ץX>r%Gʷ{{y!5aH'tm&pX_0R|+w}Vn*y]%k X=h>JQ7*90pP݉!K 2zY/>'XrJ<Wل(~ਫ਼ ׊^fJ6q%+:]ox#vD6:AQ0Wb_/cݿu+jl4̵1jԯruKh zFv q2% q y܈nc)C|O,hb<ʠ!;wp1UCu.mh"E2^3Ѕl@8֏ϴnp/;ᆘLS,u.țݻ 97ɬ:RÚP to5m ;0 Ua}$h 6<7&D2f^4l.nu<ńeUO'F=Ԣ]s3GQf'`GBKC$ݥdo 6DqE~aOޖQgqKYHWOpz5&^t> E+ްݱ"'GuL?a}h|4;(D5eV1$*$,}:ˑi>^:% '|$obsfk_Iu~@ĉa"kf~(a ›Z*z߿y\ޘf9 tBc8L*HWYC@Xg攂lp~Uz 91eRÏhA+%7**QɁ Or?[R_ޥS7CJpd/G7Ql 6Λ;Uٳ+ קN;4EȲEfi鵡[p+ަLAޢ~D\!aH:5x i _E2 T6߳ڪ- !LYE'Mt#ϧ5#xwF^g O}xtRڒ?/U;KLF/0R48"&eNG?{0'w; $L[]SlN~&M+9rZ$0w|V bblB] PQբI܀!#jr}&(|W&<ė2m/*W _ATϷ} Vk~둺#;V͗\a@"L83@hQއB.ƿ8_.Y$YB&He݉t~Y鲍,"&VY+!.k&V$NnHJHX$Om6:?DTȾ3*%>`NqRc,ã>a>Qьq~ 71'F\:]ߎv$V`hυ k~Vp*~w6O ANNN;Q N66 UYJny2P@VCT/N|s[e0bH5xF[|x9"G) =g:I9)VLu֞+03s0H7sf^sˏ1 *FXЄ6j}h$%On5:7d /,~ σ D'A܌k2T*+tPՊӰ5WV7~^ラ u!zK(i)5ɉ@Æ1Uy0lZUc, j Jثaα)HkFJ/r@k6,ٱ֚rc£C|'K#wPΤ$8=LDи×*{ҭ P#D&_ncl,*9?RL}W~ΒF>&U'L;(e ˢNu!CJ md>}'4rX4ە5\DC:՗.*zi"}wdXBWMY fz02KİTcVfD#,)ES!r/xSdnJЃ"i7uCAJڗr6aÃ2†m*f|`5lEx3ѢYtЦǺBTpREEw^iۇTNZ#"xX']Q=饜`w*ytD7j6ZYA4Ӏ0J @;' oM/rx\\'MpAuG0֮ɒ?nФ }ZnVG6z}n.0, 퍬rGbNQ|#&!)w#JgacyfkBQKjO2̍Mt8 qW6~zpO~/X1j\.Uv>pS~S1B?l- j޲pαo^c~6db&o(1d "aq @Z.W7a }/E_OFH>o=ž@??H(YM[5m[w¶6H;%}==0jf:Jr,zKk@bB06µlqSy=&O`;!&dg,c*ɶAzMj&7-OK#'/y)mn )47흽Adh"k _n4H\QqPZ vWa&OaڲTē D3R`?Al~^qk$YFv`TT s~pMl1m)_f o ϊ_K܅>=I 6F[ZT߇$PJ{.vqݼ:!v;R]8K^o:>?]^X~a 󪇜[ͭO#0`lNv{&ΣUD@CZTݽ2 t、N9I P gp˄+r13 endstream endobj 168 0 obj 4188 endobj 169 0 obj << /S /URI /URI (iW-V&:rMg6{'?1+p7g) >> endobj 170 0 obj << /Type /Page /Parent 2466 0 R /Resources << /ColorSpace << /CS2 2479 0 R /CS3 2477 0 R >> /ExtGState << /GS2 2491 0 R /GS3 2490 0 R >> /Font << /TT3 2478 0 R /TT4 346 0 R /TT5 345 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 172 0 R /Thumb 2359 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 26 /Annots 171 0 R >> endobj 171 0 obj [ 373 0 R ] endobj 172 0 obj << /Filter /FlateDecode /Length 173 0 R >> stream %uݫH=M]]W;gj!-6N}#2`ޭ$V\u'r`=<j!X ڨW qgwa Jق4 g2\$TY۳g^lqnneKw^B5Mr$8J &pJz~KLFTs“eV.lE &aH?).qdzKBYE /N«ܝ*!{z8kS/9GֹN1Y@\kGĉn[ L8;T Ѹz5`U}&%}^+vB(#;$z_ KbySFhRIv~{"ftp'#luS%ҥ6xp;ꝲQk%hH,F}8&z@Ak?]"܍=nrv e.Zi&:YVh"hM=E oF27 6?EYusU1R$iMا˂݈c̖:%|Cyyy=跋.].bێYdpJ*(_HsrŁ|;@W lsvq}|cPB¾|.hUdE9X]/U'xrj`4ѮKrޤV ATf~/lQFjNdB^o ~:T5Mbnt?_ )H?P K,XބJ!<-C$)[$1;OM`c+qd]92vC7* /fr (#MVwFX&: HH"ef/ĤJEتw` R8lg63c.?zYY T^>S`z#o7hOUܱ_-u*9d^$K題79r5JR}F%b ])'氨\"_3{5΄-s뤸 > ;T:5 Uu"nٵ8qb8'\V_qT,6D\JwΉKjNsRhj7 4 4R'XBu\_f ~ƟiPOX0U>jkoڰ<2#K3/| TQ[cE Bo>_Sw$Vy{H7!8*} h\o,hu5TZlm :mRqq,99kԏs|g mbnrqd#±; 7nOɻhE]ԛgsW8`٣]U9 lk0lIyachi)5xOM! Zu=5 ^jP?FtW/͉vߨrn߭e*cfO-i]f/FH+n4t{}lI˓\;*H>0HؔBlrP3vT*HtQ{R2q^Ra\ ܚTȼ#a\|51j'珶/a(9.bi U(f>p_@/"qX>qd? #ϜDW)ޞal3d1O"T^"@ۿfx7O9zR~@802V#R@{dDt"Cͼ>l:'Kyg,cɂdKN!nN[kl}"#)/z͌0,K? qLVS1={XͥImT6nԅif be&@E?tc" N5[E3W&#&_Qs-ATyY[X&[r40;kǁ\<\?s9 2ug^py6ەE eRP!k _DyyvDi^vexNM6(M:s~byr=׮xʼn,|C?AOhr]#. \MBDk~8ޑ{i *{  mv+< atdr}xԹgĦ-{:pq6N.ti2} E|7樮(0GOΰfM9=U|Kرc!w S]HY8}s#G"V}; \WDP'4n|!g m$?rL qT=#Geзrԏwm򈼘v鴤zCcZ_V@*9#2Fzqlw0D';y`?Nde̬{YLn'-)` h] Kob!Y(/ܹaАf"4 B(Xm="cf;`>4E󃹎z36~<ԗēsl:TfDe!(Z817|Tl#>lo4j#2o_NGyf(XP`$@nq vÞ8zzfzfşe@MNE-#&QPV<xX0uPD_4m$n}CZGg'dgz {7 Erj+J?LFgHx v740ub3NI-%`5N]`Lmk-*I#~\vTkgX ^x3fQ%Y#)N@CQ D_OLt{o+;<7n'"~On.:;zd;'ۖOLh_.^3Egch3 5U}N1?(@S/bw76|G&oVw˝*3f[%+~d)]` 0Wre2_"CK/v*U?G9heK3j3D~I(ry\uI,.:3c=( <,K/O<-Nk-bV]sR QBlgel,-ٺuto4^ytSYsXw k.J%:J,eG\DXe{I8bbI2)Hh \=a  endstream endobj 173 0 obj 4537 endobj 174 0 obj << /S /URI /URI ( ;FPdMYSp^ɣ\rncg=5D) >> endobj 175 0 obj << /Type /Page /Parent 2466 0 R /Resources << /ColorSpace << /CS2 2479 0 R /CS3 2477 0 R >> /ExtGState << /GS2 2491 0 R /GS3 2490 0 R >> /Font << /TT2 2478 0 R /TT3 346 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 176 0 R /Thumb 2361 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 28 >> endobj 176 0 obj << /Filter /FlateDecode /Length 177 0 R >> stream glhl~y?.%9X[H2i5cXC YCi - (,=)pL00@#]]?mg֚=m۵ _RpНsljy?yȑtNY_*Py 89PDZo3ɷ~Ђ! R `{e|B6ɴ<1;pD1~YIi=ؽ{b6.-\xOH*r$շzc˛[= 5,]͌>>!b0Q)y͝erYV h<&?y o6֘^NȸJT T"z8`Są]IfRXp-%@D%iGI~0\NCc:rZ3n]P=^3@՟dRm1'Og(HiB1wD=v.$'sE랐87J<A;h6r*K$0NDX'͜(+9j=_ʕ)`L;>7y9Ӷl440L0tދn5,1T`7便 /=&mntCt-LCt:V׮q$;Ma k3~M9 LV&%n&ڴ3g' o22[JO2{z(+((3+ix횰Jǜ豷 R1Ds #+SbYP=i+Syi TT Va,kل&, Ɣ 6)P|nDV Q>$أ}F!ǶwX#23#qP8FbJ^ -hCEot}!]㗐Ew~4Ka{Xe nE$X)D}]{>G`VhFBsMV.wۂغFO{0ّcsjt,d[Ir8νPy ŷIIujAcO~ICGCH8&1[e< ЪMI Brn)" 5= ی$VXʽ[TW_<71A,yg{Ae[,@O}Jyt$j߇S>"P߲&}OOvSnk5QnjoAsQIHyǠAgUdΝCЛ"D|,& 9nFı̖Yx _lsVӰ)H#Gl6Nj@5([ qQD0/[acSJQrmV<4C] d=T1A _<ή-#_;vT81" T]f\A- 8ω\>c\q*&TDF&lsZ4'=/X#yX.Ф(CsEB I$T.zSwM֍vh>" C{6 R_\#@nO!0,3R&Vdk+B*_E{]aZYy'y!@b#{_VƐ^Zu!#-Π-nshVsNp밗 ̈́Ѝ`[aW:Fbgwm ĝA|mUG(|rd!^䋝 V(2&P I#*O[T1ָeKԠs;CvE.K 4D0qTQ͐YP, zWGZD,o E, e\iL{Y = 3$)SѴ@q[ܡ_=심]jВe&: %R"&4a+RlfX KnDFܰ@QPC{40a&Ȼئ3J7*܆R1 > >ư0ӸCbPg>@֬X"G8f|!:& =1jwQ9z6HzrON%+$HXՀ[K-%( f"VfZ&fr]dB~m1l0w'~,V(֢IqH3K4ýy˫bUp{۹LcY"Z?倦GF!z n}, yh:-XH1K' #ǡ&f~5)| iHnhF<1@gYWF"ʦMcQOlLK2h؄74֢JݜֻqGr\ /gMg"M;?Õ&~Q_&Ӻ vlr e` hrC'S$#2-²eRQ26[kZ endstream endobj 177 0 obj 3700 endobj 178 0 obj << /Type /Page /Parent 2466 0 R /Resources << /ColorSpace << /CS2 2479 0 R /CS3 2477 0 R >> /ExtGState << /GS2 2491 0 R /GS3 2490 0 R >> /Font << /TT2 2478 0 R /TT3 346 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 179 0 R /Thumb 2363 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 29 >> endobj 179 0 obj << /Filter /FlateDecode /Length 180 0 R >> stream Mzi*+@(RlEb]fB;3 , M#ꃡ{ɠ w8-,am[4"8a]q KdbwS^Z(2G fgk |@dBC]0;R0+ AErx#(c+wGd6J?{|c;sS~SM3%AaB_}df 3/]w?HcQU7PoTXfE":t;Q.(חjyU*9J>L/>4E7/h`5foKcz&Rgp@S1hܿltPAf.Z EQ&F`<ˎ!d#mvs My'h]*^-eɖ'E)L4C'Aߚ^X-PM?xfk, ӑ 'Y0&p>gNY4ASد6:%3FC/a.Dk Xr7L @uЃD{J tXW ѝv,3=GLFv3~r>^i4\^..˘WӜTј~B>BGkfd7WYr:>@Ph"̐ XuE^(J#3U 3(7^[Մϟhy]ɑ›$b΍,E5MvǍqXB'dIkşXHvSK "Ȓ&OkIVB^*FIԩ6G̲(<TxDk}swԙ&E Py2j'x&]rT2h:lȻ\2Ij5Dl@rLsܘTH@> Bzbtĸ'(]xjYdVm FESI ZB*4 +~2PZdEOhxp*ffdܣ;:J5UW2my;@#"_up8=DY0%UU@)5Zf0zͨYdԁMȄyNѪK?!jCO}k0f[ Zl^.#=j^E43ȼK'Дn"'Ty;]BD|@_gL_WUA\{Up<,y)|aS% .!A "֎eهށ$u8|p>ݕDy8N[G֣懂y]b ۣ9wj<-ZPuPiareQL}^lQZAeۛ,Ǥ/\AP",颡7,?/+/5o{?:9;1?xHn]s+ 0߮l,p"_t잔⤈ ydHf?qla1rGI|hTx'w ڵİm=f^{`ffRn׬vWfKLi5b\q5t h;(nDHPЯwmƈZ7:ƫbyqMEM)BfIKؓqу^|jzL &g2H:)9\r:d4F{*t mYv6~(=Z3GpکksADRe,D: 5eI`+[5`S.u±$h` )dsFYʘG<+,k.߳>CH';oe(Xt5F(D[CUxqTgZd4iH,蟥%x|wF-ubʜZ"oEF"7>l#% Ďe->rJe QY"Nbe;5A$x6Mv?}}oO)l,YU_ .f7e+8rK_N\}1=]L'EmI8ܹ5y(O(\[^@Q])o vFqw{|g-3 ͮ `MwW!ڳT3$Zo1QnDc2ⴁ`ۤΣbebİæT Cw -Т ¸ se |{ |TDH3\E+ qB-@I jr#X9p rP*p`Q[|-Z>m$Vx-sft]1QD= )+1 ԄosLuKn4B÷bRah(+M(CmI6``M&IwԲ||WyزFaҮD66qxyKl؎wp]uͧkMB"H54:KܒIvn;hL"O<|hi\&ZIj ;ڵ]'I !l-kDнI퓜39sHɊB^k۪[W-}}o 4:8 'W֪Vߪm< ;4OT=!(?_JZliBLl #'5Fj-5 2`1*m)G=h,aaٚj_z4s8uc[3}]A縑εnvvgo\ Xf`UDd?;Q/$"L#3V;]/B8d]n-VG|V m(Qp;-pXr{đ95qqOCF\e5p!H?رx NT]1݅ a A"&s4k:NzӲF| ϊ&rYlX8pLS Bo4@ziR5L=3*RڈHȷ5 CqWʤuzLj<y aI&*Ow{f)!VVx7NJsSPMrwK,L4iISgō|#9x˄*f=?扛\9k3'n*}Jǟ9`>bq(h̴ Pj[|0}dATG9 @؎V1|_Yna6{Ŗ9?5tNMk2 kFF]{vl[E:1H<6`ٙ0\L:VoP_$ɴL.撣0B%UQCƀ 3_w!5l9eylxGBAA GNj6z5HX `?Q2ȻKU]դZ8Yw^p"Nzjyt 8LF:5lF!QW F|zFDagBrX0-HWL'Ϊ c0}Pvgkd!YT۴Gĕ$DC"(j$ݳѻ1l!Ac/j^++>1 rrW 0ĘvpLl{wՔ !颷Z,\@i.F' ⤏3XCTc_=x=4 ፒ &\2֥UOpzie }yoT;"47䇡(,c.UH̔BFtHy%r" UXOCUSŦWAqσ S$0A*Dl&F;v<<3Q JlJ!ddm Lv9_`&b7w.hj Kqr:?6Y|y?ܾC./;ݰQiLnGEd>%?ٌqvᄐKc>&?(5.SuPf'  6(#f&)M-*{G F;l$H,1 P#/)+CR׉REn#FC5[EGGfE}e?5[2GPu4oܮVp,SRbNE"܃#K/~7'|jXbtk@·7/bVD"=EBlEN endstream endobj 180 0 obj 4314 endobj 181 0 obj << /Type /Page /Parent 2466 0 R /Resources << /ColorSpace << /CS2 2479 0 R /CS3 2477 0 R >> /ExtGState << /GS2 2491 0 R /GS3 2490 0 R >> /Font << /TT3 2478 0 R /TT4 346 0 R /TT5 345 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 182 0 R /Thumb 2365 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 30 >> endobj 182 0 obj << /Filter /FlateDecode /Length 183 0 R >> stream fiJ >T#)J>Tl'4[)zbeW$X` SXP#IVFj,M~8*tr:%*HQ6|M5xɏO,?>6#{0q TVp@shI:~5; z>;gp]℥m]T1oaMYC{nM1~ɜ|pIt( 칚:[4x١JD[Klq"P˥:Bd9̙OÈq0-Jc/`ca8*n(mL6x,`|oc}lnx`vK`VQz"GQ) e:2nRT!YBx3dr!%`L6ֈ튳˙&Y ]Za0y'FNyyϞj WFoD♂1;U/{7:EuLmܙcDˈ4ߥ>~х[1Tb5s-R =>ϩ H!|&E}KioJ77wٰ^3@"";#w!i={* GClLPrۅ ѬX0_nfc+g|ȴ]]dNaAccM]W=)´ЮX0`ī NeĬVvُ!8+>ͧ5TJ<_)'=?m'VNJࢺs.Z U*~}K?A;~I,tgt<$0 xhST*׳^)Y4H|#y^qm"ziG"a+½_m1iKzy9l 'u47{9U EvM8LAխ |Rϟl\W >k="_3c)sً*P,;DйH+D>k EIfLЇ: 3$Njyva33_*2KfU ov1OdJD>q*m7-,B3:m(zOH|XȚ}r(s=Qk̢=&* 3l#nujXȲE B _ec8Zݛ{LXЬgX>j$S+hW@F^Q \`hqҹLjgǁᅥXZ!4g@0T.h:ǥxԖ!R;`sŜOV-&ّ$N97L~w&v5gr8 aiow?_ r1\ľ= k*J {L̔<)+=+{j޾c0/t}d' W \"i' G䒲yWj1Ѵ6'9lݱaZ>ti8JY#_kl3Ȃ_ξ5q!gf} B;CWY!uabt>.6.ں(EA $t IiFNTx!O5 x/dYB\O벊 Y^Ԭ|b4t'*b)FqcxsdڐP9 l;UYn]״~@7B@&Ԯ|6]P?`(e'+؆Ȟ=\$xeMaPbChh v42Y;yOʊ]Ff_)77331&@ɼCèOߌq)U{ԙ-)DU5o%Z(wbP̎:lٍX9-V4/ӳQyk|Cqk(DMیXC,Giƪ>X#][Qxa~!YNX7~;.68b."84b:2j/$\N&,4,пq1ĞI~6,d"[vP6'\]qgAҾ.;J#ش{:6$JFr߳ YoޟC GUkA.*߮g4Uj "Q̅KYK2BVۘ_'7)R/#&,&b/>ꂅ:𳕆F+B+芣y>& R#%ٮT,֊>㗘FVbJ7| ,z\s59f{-5MM0H2;s3y2 SgU=@ cG;~B=bU8 NY(Jnf)fn}n!XcJ.?Hxr֯` c=Elm!bn5W9 (cxbك)3N]夠,i:".sIs˯gKZGNF%5aCI+ϊKCf+[^g0s-j (M|MޘSz42#ƐJkz1JĽ'\%{w%ŹɃ/PznUzV`(cBHs\$2(D@=0 _%\:` xQK~=ԒMwzJ~ endstream endobj 183 0 obj 3949 endobj 184 0 obj << /Type /Page /Parent 2466 0 R /Resources << /ColorSpace << /CS2 2479 0 R /CS3 2477 0 R >> /ExtGState << /GS2 2491 0 R /GS3 2490 0 R >> /Font << /TT3 2478 0 R /TT4 346 0 R /TT5 345 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 185 0 R /Thumb 2367 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 31 >> endobj 185 0 obj << /Filter /FlateDecode /Length 186 0 R >> stream _p;jt[xq#IOd 85BѢ~zzEXܪu\! U_lPN@MsC߽s&i\%b5s˞<|,&e#2I`&ũ:/7w/Wt)rr;Y"CM 'L().DʴCo4ʷra:Y0qsrg]}aODKs@~k'B7u X'\e`PZjQ`'v(#߼?prCk-\[SkzުW6e 9ɯwa37Y쑲=O`r'g 3n "|dcptqD}dcP۸U}Up*XgQ?<Ԗ0uxYg*2.RO |ص=a󸊽K`ol.mm~ 8[ӝPW"E Q')t:N6:EDav@VLy` {݄h6f6Oڮ|3"wG+x~|E]Í GYc ü aHPD {C-$Y[zCj)z) >: 8":?Pk֙cD1cN)+mVUFO1e8ǵi}g1=XGi0Yʪ[͓+yZz7FlH؄f4Q[{-s<݀xK0 ?bWv<{K }ukv^b7qH\a5S7/6Ëɯ9tJS<3c7FPZ.& I GO 50L|7sV2JݎPNн upG79;K^\=^Z(W<ߴ58pquN{9mf `v;^~ x'콓 0H}>,nT[wuWB -|^?30nx{S'{ 1z=6v4)6(*ayQAAJ?NSB)۸PT̕}U Zh߆1j kq:` LM }bbwqIEӽۀ %g̪oq9&|譚,Did<``@+ M ʚ]bؖeY Xj+<ElBpD%,w?~ڳj/6ӳf֚K0YxS O^sGJv27jN90%W`s h%SUA3tŖh6P(!;{s%M!j#f’ުHqWʨ3l_$N*W"Ax6rzȒB~`8Kf)D:6W}۴Dqtk Ov sf`/Bg any"Aܷ.h">mVwNHfim-.0ɐ pGmwVK]!zUx rETǒ*p;^XKh*>lr)LI{n ـ`&,ɝ Ӓr]Osr硤| nG>زsĵow"+ķg&wcf~*vA,u8B vS["pQ!nA*|IŵVlNJX[頺VU{|c39Rp3ʼn LXՔv؋dd"Y̾vV0H/'m5'}ð?ًN<[sAeHk%1#1QD8MK$.izF%zWحSkHPXyb$JWʰz"Tz.9$2ʌmW J}l].4"o {YY4rf@Ӈ;;䘻؛2:PZPl̏ v~K] gsqqu+  )<l1+Hxt x]avi,mӋ,*i}|7tw@b|QkJj$fu$Os][\"JFZe\ `4sev8t1Ywb`葩vH' APbo=5ҁq?i]ۨ ^-WRw^Jsཌ r9U΂@Sc 'YmMaqe?5o" 95l 寀 'o՘ <-h*V3,SUAi<V@rTF_!B^ #7m Ȫ3cq`JDq>c`|{! ^@):U!%>ڛSo2&è5"iRƜTiqmNN.@7iDkO DtCh1X[ Qk?Ygg+Cj64QOFZ#CGP1}f2!_[I_T b3@ X6`[Q+lt)"}lZNRJ sQbwhf]V[qu60H"~\f0v-]Ű-7 U+/T"竍4 ?Bny&EKAg #n9mtiVk2v!D*o39Ж p[=+]L#򕷕31&"qóB7ds`Fom|w jZLX&QFr^0(i>- FF6$4!dS~gt}H },YXwgp:j`6Q=& sE/ti;0s>G&eC%k9̰Za( 83n4 @4X֒G߬Y}X˫ _:6*fџ:7RٮhWK0W9.ƦPCK9? ~dGbS̟2np'A]=HO&Ju3GACfٳ+WנZ\m'Z55pm 5^ɓu,g޲bgVKFT䳨uk†_b=1g옉=hTdv=+ <,:]% :'ŒϘVʱG;h))0~- uFK + p `qKNJU8Pc&K %ZBg@eC>SM3cWE4鵾;r7/$68!UlTkC7"Lew~R.;b׈ ;`4`v;pmp/3ubEQ}۫ILpKe%" hI) G\ :\= 얘wP/}G> չTILiPX LaΨIO䱗uk#鬱 y$ endstream endobj 186 0 obj 4333 endobj 187 0 obj << /Type /Page /Parent 2466 0 R /Resources << /ColorSpace << /CS2 2479 0 R /CS3 2477 0 R >> /ExtGState << /GS2 2491 0 R /GS3 2490 0 R >> /Font << /TT2 2478 0 R /TT3 346 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 188 0 R /Thumb 2369 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 32 >> endobj 188 0 obj << /Filter /FlateDecode /Length 189 0 R >> stream -\pkSIrJ+W>t yZ"K2qnP ZEuzt{ IS8vX&CPoO؁ֳuA[IKYOMid7-DIw=EY<)[f: ox .#ӣ$EJRY\W;h(}ݍN--hR:4֑J4X-05-:q7&*:ɜX9-Yq-poZ@3F#6;8~鲃i??j0΂\@|NAQbJW!"vvd03O)- EVPU!=$rFAl VT"r^>l9NݢRA5 NJf'qr_E~9*Ĝ{ }lop%N̺XM)̮0-2矕rhypz~\=yVSx^ʩYzmGf$f|4+Nljb4/bwg?yS{YiMҽVBcwU5;k …;Ҹd zț,<ؘgnʟ*sa1£;}:0ؓ"zAcw K×/ŒRxR9֜U! rܗJx+yѬx 3~N1_=f_j|,^h+TW\6r.2˟&ha<<̚ݳKw)ќ&xOj8A;Apemz tc02GQjuCGb,ֈ{#r}4f_uQ-2šF̦J+B:Ir8ðn׾ -Li<L^梪?|^ҎGXoCBzmYxtkC c]$2 iRwݨZR՜Iا?4XcJnyKd+T "B+fqYk,o?K㻀7-n _9]8R}$װ_ӈvq,/Y&׺!ͪ$(r/Ҹ0 )]qfKaWF_q4nfɭf]<W`9Q, PR 00M a_>Jz70h 3.hbSťJSebv>1y[P5ia{ݐB%sIf<$K|UegQ "*XcXSH(ZGFF'߯ګ2qJDLC{Wh|8ҪԞJ7Nt0ZQ[YW6 CB:>"'kA}q;Vf8 'd-ax1nHxK(STm\7Q2|tea% ˉ h+tW#lǶZ|sT27q¹ 7#ZC1LNGprSaW7R ,%*:If%,!@_hua v~SwkiH ;l/ F#B&vzTQw#]O j~)/h%g/>1/z?29*ܸ}"sĻv>7/B*t2:l"s Di$Џk#OUv}`>j ZfbƩc;6ux_aK%" -*S.te]/J}z"Aݰ# t&,(Fkc4]_V q1u.4aawA%DЄA\Ɩ^M]^Em~8D/O̱UR4O0?} !mj)jgT/qtIM (* zQx{+(GTg5*ʚoR&X }|픮P'9Zf?)>vWo> /ExtGState << /GS2 2491 0 R /GS3 2490 0 R >> /Font << /TT3 2478 0 R /TT4 346 0 R /TT5 345 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 192 0 R /Thumb 2371 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 33 /Annots 191 0 R >> endobj 191 0 obj [ 374 0 R 375 0 R ] endobj 192 0 obj << /Filter /FlateDecode /Length 193 0 R >> stream q8 M(٢.>S[Et>84 Ͷ]Xdd`Ur!oY;y,uS< -  @ +(?ªTse(G3(Y "X*܇oP7I2#ncu-#2В鍹چva|lCQrie6#sF/Gh@_ 3ID] ""<%;uJac'9olN14E fcDīGEC!z xzݑw(5Ա*8~>:ű .+:~4&}:we*n)|tS@a{P4f9:f2~ J:~u*+R 3yo1 )*'xm'$ӼU/_bl1Ui))KK1lm`ېrŠ9 K|NWvCRswi `a n.\&AMy_?=bVh&Du!F%Tt$7'h Mϡ5j,u= NdžF(`HPۥמv:u{x[GL8Q\UӆR^Ƀ }y [Qfk8dU?rXH|M옑%fŧO'*E#Br>>hmkuN9.SDtB{PicBaYc"NJXa'e[uc9F `F\omj.򴔰2O}Ql51&?to*(?>8OrjId}]'h8+^59 |sB%k' JҺ&   jX=a h}K[{8vg°Pg[uM*!+C% N{ D;twga04@9oƦ]_{'Q.JlU <>Ù9'DO.MG@c.Y2=&˙l*L ]G >dNK ⿋9ko/;wP9+!5WrDH6v^hfC c_Kѷ*3+ ^ -Pu "8/jyqƝ6T e{u^;>HVڤ#E, (z-$rjOYP)\[ֻ1r5+D`c=qMKڂ5^3bC֍\`wfod;!^.ZǓ*AB@8vQs^ ꃅfXIF3#Kt2&ި];Gq0} 5(` ?H?]3Li*4_/ }/%&;Ҫ B#V`J>NB)>Z;+ xx5Pc&wc:RZ:Daz4ⓖZ^:|w>xev-C6t>Fگ$=f4Q:=F5@*D }>GQ`>Si,yIWiIu1ٿZOIB7OF⑛9),49o{1])EӳʊFшSH4H8r1wGni(`*:QTȂ? '](f)*[qKɝb p>?-NyjQю&ّyG)u0뾝Ihjsߨ^X}3E>2sR̗ e(pP7<qB<,W%/|yzL]VnF23c8m;A5"^lu"-a1y ߿lk\]UGDȚ [hǣ(qi|s}d}Ӷ\ 5|83j3Ln4lS֝eK2,&ng kbpɅ[WiH:4_[/kpw(i eI6Ѩi/2]: RZX* 7Ne߮0ݐ#+ endstream endobj 193 0 obj 3749 endobj 194 0 obj << /S /URI /URI (0%,TGq+\(5~=;J&˶ ) >> endobj 195 0 obj << /S /URI /URI (IUG፮=`}*X$BⱭ j*/) >> endobj 196 0 obj << /Type /Page /Parent 2467 0 R /Resources << /ColorSpace << /CS2 2479 0 R /CS3 2477 0 R >> /ExtGState << /GS2 2491 0 R /GS3 2490 0 R >> /Font << /TT3 2478 0 R /TT4 345 0 R /TT5 346 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 198 0 R /Thumb 2373 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 36 /Annots 197 0 R >> endobj 197 0 obj [ 376 0 R 377 0 R 378 0 R ] endobj 198 0 obj << /Filter /FlateDecode /Length 199 0 R >> stream :Mbq*"8xFđY\̀ sQn,G0vǒ|h*?l]I9h,: Pa{Q1 cs鼿k8XVJ-.61V=爚Wj%,%i|cI,>0WfMѻ>Gӹ:OV~QQ̘lwmȀ&4H+ujɴ܃ y\a?2SiʖS+_ˋ &/c-e0GjXSZAɇٴ>JYZwK~@t@ ޝ]{Xj~~ϧֹ1Oķ"4PJۉٖ Q 4RSx>WI Q=]y} %sɼm ڡsE' %g.@"F˨=Y)`'@/ зo8 1luj#Rܰh|(^zbB<82;E1tѲb(6oVl;Z(Fҥ~?˓td. nppkzrui&ϋxz) GcؘCz (_?t͹$ ζz_,MDG]O-AQ3x]r%` vSޠsi`F*/妾o 7C%@߱c!$h2Mr(ja/1!ZDlHg><+q~{}8=tAznxZ%qd??qrqЁ4oI)mb2ͦreXM*tXK/O0GjށdOi$c|G(?S+=e<(wͿj=j`h+d7if-QH|W_c= wW5V0X/ $)μ&zh7j#E8mk]ٵq5C f͹ُilR%0&LLuof_]_hUG;K3`qbc=q˟وe} * lj$t+^Ej ,=)P t{b󚱚W5ԋmi ,:eUlA :LkfɃ*)sLKb/}>;8=9_7 jYt%~O6HY<ɍ=?SiѶzv=||GATT<10I*z e r[%ư$ȝ=(6 va/ZL7~j^.O/y=v)p]/ k,Gsa= VysCݜ}D }٣ѷ$fJFdRe JKIc+z+7v8c $qeF hTg\X%;q3Kz^fq<UtL͑ſPy*V,پW iSEhcuZVk(*nbXK#eՠ;T{YRDM9ofa^5o_`/$T5'+b*LH]ջMP%@p믢aUQCuc+dxXQ#ET<tfص-i#a+g ' 'NT%kSuړ4k(BVq/( -Lv^_ 3t.B{񱓯fdǤP*Nɐsª;&xH.m}\C&f9%_mJ9R=n,Oz w*29/| ( o*x4Kg5dQv *C.:Yb a||\q`KM%/~7Ud(ٲ Ij#?Z΁-Z)8\CzI-A~1< ZRYV%X2/=ۉW>J Q/++,le ]Jh{*XPFƸс90n ^(ؓVz= ,QA0#0͓&gVԭv8}+Gz=c0 qF;2qTCp",$( c >iԻ!SI=% 0ӌԭlqaB4C1~Z*t` ڔUzӒ[fRˎ /{R#ܗ-(9QQ{T͒%p1`VWVg }952 jb{ EF ҇S}Et/G=~g({^EL8\*I˧^W^Y^qЋ\|'KٯF6N$@ ާs~.8pӫ?Wp^XjlBquwh㺭鎁9i pU2V v6ZtO-1إ4CD++L'e[ZyT?쫎Oy&$֘sⱉ+D<۷"N{:BiWGMYySJo#*-@nь)zaRbH3EYdeBOZÀ[0S/_CtǍH%hWu}W00fnB)D?4L O=颅4:9tTHf"^GSu'OU:x`i=Q]x8qho!2tL";-kͥRѢo,+D :2$ _#P+ACp+ABO $FK'}h>nX_zNbv !V誙kLf5Rxs럃r"yJj0|)oWeЅMєkH(% Th~{_&=L,)IO<ڒl>dpJ 1U ]ll ZA#MB6sfd9A w=cܴxV #n<#H7P|d!8/fMȰi͐q.8~`Y1`X{>n)$To)O0|tIEꗀ 1}iB7+н$쵥y*F/ʵN#C9[XVsX6ᝏ|:^QFGENF) >> endobj 201 0 obj << /S /URI /URI (CK86p"TGV-8>SJ) >> endobj 202 0 obj << /S /URI /URI (6~iu\r[LYhvX#z ) >> endobj 203 0 obj << /Type /Page /Parent 2467 0 R /Resources << /ColorSpace << /CS2 2479 0 R /CS3 2477 0 R >> /ExtGState << /GS2 2491 0 R /GS3 2490 0 R >> /Font << /TT2 2478 0 R /TT3 346 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 204 0 R /Thumb 2375 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 40 >> endobj 204 0 obj << /Filter /FlateDecode /Length 205 0 R >> stream &)LcO[ze60W=_l$%%ֻQsRdi-έeI.R1/t:pxăםZޮo}U`r6a/N *Zw'DlN*yDŽ\rƺ 8qMO6KN"1[}Amٖ-}5Cu]pv9umՂO߬EaC3mɥJb9%F@;ȋٿ< ^*Gxh_C>@Ͳ!x{3`c~NĿJu:Xk@"; 4 >ıe!7PA tx^Bʩ#;pRʊl,=8t1MYhfRqߩ'0>`OT { j[ Mxw#ل|!Y@ccW!wfK!hKӋQ鋳xJkXZ^tB>BV&\Nj9ua`iy0uڅ-/)ΗKƃ}=(ŕ٩Y[v:kJE-q#-r"l +Ǜ~cثajDOۄc QjLxa (3oI\(]KɳS40b<\ I-_=Ɔsȏd).^?]r[-eVEa53{ܭ c\Jal}gxwf( @0}6KU}^|GWn$#NwZӹ!,or+[^ @Uʃ5ܽ[R{wt_6ߏ213iU%WɸRHoAL,픋 ZVy[Ϸ\5&b8;?3<." i6B" b'QQS'U@-Bņޭf^Cpݛ$^i^ƹd /╘.+ 8VvD?&h6ތ`äۓAjHٸC@+b)TDjs[[Vf<]nyGr[FPl[+d=K9:L ף uy$OO2JKglW{GkC ]}ƞˈuuܖײWkJŤu??ŶAuvϻPxu0F-9D[wW?C{dQdLlε" &GlA j>DϺJA$` 2 x􄷨 Ut Z>IRؖAuHb euZnzɍ֟[beZaW^(Qָ ^@ɥNyS/4OӨb2Up>"G% Kډb"-ѯ&f,Ϩ]3Ec f?AP#ws=!(a؁E]Z,t:`sn^b<6Ϝ"|rvaI37- >XVP`zXP&Ax6Qԣ!7m-$|zv kPxObr̞4ptm>E]#ykWᒢEXޞ.u1Kb :MCl ɼꬎ>Qs3+Iv?CH}ekUJoA2VSf-0*ipB-F].ޭwOhunW =(AT񿙈80R귘d/1cO9V >X'W!(;Z>6ȸx hR߳2_{Ҫ^l+#[Jz)iIAZ  ?.09գ53#-6fcXr7~vM͸5kF?6`^`V=A54D-+OLY7Jqr2ƀcc2l+wjp>m֖D/[9{HZ@t4h$vpm^n#53cLg-&((>PxfhI]8 k{#4a!p/YktAruxpgvNd`3pT`٢ PPp^""i|}} HT5$;(\[bPML~Hp@/̡+ ⽧^⻢> /ExtGState << /GS2 2491 0 R /GS3 2490 0 R >> /Font << /TT2 2478 0 R /TT3 346 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 207 0 R /Thumb 2377 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 41 >> endobj 207 0 obj << /Filter /FlateDecode /Length 208 0 R >> stream ̨mR^KPgPbh)6^K:Z1мȅZ`,)} %w-,#?-b*eGDê~?18eAUE4SWǒZ$.}Cu~S44!1S7;,U ˊlTcըW 8Kdp۞(i"K UPqVK{zCrЕ|2m-6;L<-C\ ,@J}S/g΢M U;};e|>yf;V49nmBPl bbi# !}$\;Ifbn < " OD"m8 i|8?M1Hinп(rokט4]ay P6.16*'?HCMG$l .SCh> kvEA8hԫ7qk./rѥ e¡nfYM sL ^Ø`ߚ`~C#\ì8]d* JaRo)ޭdZ@Wa= \53YM ?gcDpy]-q)O!V$SMHu>A> 5pψ\ƨ7c蘊*\2|??=l#+}< 3G P[T5#~VVipLQ]mo4j0bxi6?JJ< +1R Z:=>q1*2 ׶Фh/`fB %ރ7T3H[&ʪ/+sϪӆ=F~OqDxΗmF T HSI;akeCЫSZۢE`)h2c7kx#|#:_\=]PUrlܠ% EpٝImtFgX_rd rEY=-+}mF!%-"M=P,xc,ꕼwm~~lFj}򭱕ݳhӚ^8.NR7Luؼ68 3BJf>, /¢~WGV:H]FW](Q#o0'ާ!=̹E3z7]>scŮ+e$9}yOYCLS@Ug;}\[|\M'e '.ga kUЩOe>Mݙ@W+ON}+1gȧLHG*e<2hMUr6vKjC6kI $'T"Y9kkg7pIƄ\{lLl<5[c5AQWIhE?(MmGby\d}=qz/s Θ{T5OU@dzG]2u,p8R(w=fw-⿄kRǪ&'#bzgG)ļŮn㌵Y&9 ]5Hu\w* ]qCFr,}PWw܊Ⱦ^ qʽ/Z_ю*NܸԌLx='0w/dӛ`VzDwM tOPBn4wX)YYuX%εbcGj%~R f˸xi}lsN\%#F1ׂ;EY-c Κ?cg%ijz#DkLdBϚ0nRdȧГD2MP85$Vc>@4@L;6 9SyDl@KjG[ٙCx`'Y*bY:`7p'1;"A wP>3,:ĝj@߫.yo=eObgnнl'fu6F)`*i̿I/|Y@׷n6ģgPeGb!\'jI`HQ@`w@ Vq%^T~>5XGL |BZ-=SP*_շ>kj㮀XlT&gVMb" R{_hA*KKMg2G{ <ʹ1lbYX]""ίoA0Pj2rkXq)DCL(YEFҳNt|PreN#2w 'U9V6_CTH@LzM|FS!Qa)Rzjgs7Hx!"c(UWXqW6Cv+N_#Ț𙫹<fXM8 :O b7x$^>HϊJbaPqFQeMSR4[y:31Gޓ:b_:}-qXpyYt@cj>㼁W!nj!g@z&W=Ctzk{"f۶'< endstream endobj 208 0 obj 3155 endobj 209 0 obj << /Type /Page /Parent 2467 0 R /Resources << /ColorSpace << /CS2 2479 0 R /CS3 2477 0 R >> /ExtGState << /GS2 2491 0 R /GS3 2490 0 R >> /Font << /TT3 2478 0 R /TT4 346 0 R /TT5 345 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 210 0 R /Thumb 2379 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 42 >> endobj 210 0 obj << /Filter /FlateDecode /Length 211 0 R >> stream &il3Ģ]MpK$XQR<g5ȲYMÔCx@wqMQGk g c0dk?w8L5d05K5\sB;RB^V_zP4m2;\|5d>.qm0'lXMtBRN'a̽%!Ι?9وVtyV|t{yZ FG/Zyt!7+*LS0 W_4W>VL%#fwEǑpsm+vDx? [ۿ*%jn*q ̂>w22<yjL /2WŪ|ë߉|W>7ȹmPre-b]e8T0  yXDW dV"|RRU+1-Jp IN3㢻Lgx%'{W/ c$nɋ%Un)-=R)Fcw(T "mW+/#=X͠E3{(ӓmIDs7N?]c_2f҃w iA#ߊdRsY7>'HPVXwЖSW\ݪq Bˆ|kSG_Q׿R~"=AU>Ԏɮ&M[8)΋ͰtipKj7#紡:ɞ ϸ,rǑvw %) 1z[$`?Y+i@ٿyu3N^2 ^_LzZf F ҺN *i8u8J2H?vʨoPJ1J`VZ ~ɂ'f) ]NO7YybQ~YxuU#q`+qѱIE? A2f/G-A)|:U@ma,Wkšucwc],rm2")M ڗ!ڡچ.tۖhSe5-kBQKp]^4I'Vwհ@1;`@7`r(8{')Z ΀+uqzqb PHiJ!7YLt}oy0_Y[-H MHd&Y59/>~o20( V.| %> .1Rt#.kr)eU * 35}22y7 p/A Fe/"ڴt1#*SPBm$t.|k0@!59'ʮ¥;~LÔ*yD߲"V/gWgT~'ok~:҂,ȳI1U aд!i+K F/6eC*]=I!OYZVrU.d}n3 L>>Ou7 'HG3*"K<,B:|kVIڟ$w5RZs']]EÛPE3IV0/&jO #MZ(޶ "S&H0`SeUMQA󫨝$ oKSGP] !ҾY{aM5ڻ솲9Z6a.˂m ĵhZ}|İJTm$C=Ua*Y6"^q@Z[7%;,Uj2Jʩ?X=\IsTϣūEIS.G-)%W$um #`rGPBꨈxa(iyޙ\S7qAL]aXkR ,7.*q ]]NKĠ ZM*TF.24dЌju;&׆>D ӄYQ8=o@ilDPC~UjQ[&6^Q_u s[!t^) TB@4 7ľ:9 N`&,ÝYpҝ olT޿qE\츓0ErHCHfZB@vZ wqèm+ξAa^<­fۗzH7vKޑ ¾pKrJQHQj$iJ*OZUuGMXݳXd((^̧ٳ<|#[3e[HZMV'PLY~%SD&3`v=T!7?+ejB~L$-_qh؈% 0kx]H #fC Zrp.ՉRƳW(Z7ᠸ3%OBmlD@gNG e5:!ZAzۛ>IxOe(=z7AFd$˾YSU`^S,m?(ѧmlw {:=3#Y=NV0nD`B$#w^TNYOE[A\\nnGxlnԈ& ڵnbn:b)\*׶o L[>;˫!OSJA}XD'a;wуPON+0{2ĸ?l}!^a!zi>N1'W1@@}Q-Hz~yll 㮘7,O- 0^J`*6H`R nRchjdQcgJDn4~+o[&-&?13,¤0+[Jm{{4iT@[g[,RٜU25B*ƩN9ޠs`K!M$iTKz,zo,o,]OMչjqln4-] :V.6x[j:_JЂ cğ&ȉq`Xp a endstream endobj 211 0 obj 3495 endobj 212 0 obj << /Type /Page /Parent 2467 0 R /Resources << /ColorSpace << /CS2 2479 0 R /CS3 2477 0 R >> /ExtGState << /GS2 2491 0 R /GS3 2490 0 R >> /Font << /TT2 2478 0 R /TT3 346 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 213 0 R /Thumb 2381 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 43 >> endobj 213 0 obj << /Filter /FlateDecode /Length 214 0 R >> stream 9Bk)ջw}aMԇI.0^%w! 5=[Iz/zZ>5 !t(D`ȣE*QvTzȄ:݅\B>S?[cʤ ȞAcSPn'ZHǁZ:%7*B['@oqWjS ㅈ5AaIRTeڿ.:2 H^7`Hb%40LKO f>Lp0TQ3 [DYH@.B؟ȴeVL?0+'ZXcJ1\6AQҼSOz(G'?-*^.a P{,'fZu xA|VbDt[^(\Gb9Ì somZ?CO[]]+f|NJhOcZ^%*^Ŝ~IF$OLs8GݤU(ų BAXPo3n㫠GP."_s'<P߱*1,-_I5?;Y(:?A>aݲ I9 ].k@p>ȼo+(+ +pl>04g~Yf=tG߁ > ɗiE$scI%,ف#ځ0sK-#+Ӕ1Ƞȥ*lIÊM^<U^"穒tA}F ^&!fc+Q8$b#cl>>]&.'T -DZ .D)kn=V|6D`8a 'd oxEYk3XD=MX7ȣv endstream endobj 214 0 obj 919 endobj 215 0 obj << /Type /Page /Parent 2467 0 R /Resources << /ColorSpace << /CS2 2479 0 R /CS3 2477 0 R >> /ExtGState << /GS2 2491 0 R /GS3 2490 0 R >> /Font << /TT2 2478 0 R /TT3 346 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 216 0 R /Thumb 2383 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 44 >> endobj 216 0 obj << /Filter /FlateDecode /Length 217 0 R >> stream |/A6K;THKL]w܆ ~!e0PT|Wa Sq'g,?F#QӦ2dM: H:"v{l]Yn+$چ1|d`.AC/VU,շSi7bGܺ}D^|8!՛)6 puUdVӟj }M7o'x}\\&aEQ*6^txR13hRXR}I¼C~!o~j>rRD !*٥.*"eYw3µjH~QXT$ahҀˤwY#p֦|wJaf'N ړ(~qp@ARѸr%Pnb\U{3 P p0VH vMd55ų'ܓ҅L Zq~nG5)G#wA*dXlo 6CDKƴ ю3Q@7aN! ̆4 q耊xQh/zli K5klrhn96"^ߍ{-}0{o!UnR-Iat]ACPd$ᩤ 6k-28| (T?RO( {P0%]ۉ+͂*[M`6$ z:Xu*4 Ώ|Aȕ4ÒƦ@U$C-8>< /~_oڣi5Rh~s `c-by J>>UҌ/nmd{d4Xcm Vǚ [|4֩@CZV%5 a"`J1@k vċː49 +~8%J%S!=:d9Lr+׎u<" 8w,W_H[Ye]wkr:yn^43ͤhz.+R`svDolko@\3:M5Oj9ئ@mOO WoBy2(>$:;ErHl&NXb hndp^`S쟼a&@gT4WwFOl "ђ=mOdL7- 1Ub4d6iIDo_42m|OE͏-,^ B:0Xd#P#ǘ(R!Sgq ߱0(N!jzC`^eѡ֨^B(PF22?eJvṡO:';J}͍̀U5FpM nlq3L|E. 6~G ٰ(J6u@F y m\:%†<MF{"awFi1)/q+p 3V >.x8,lId>"K1Yqc J6L3x5%jj9bQ@b3j0 #6t˷1K,cOm9(U\,CmL(i oȣ! ~-ZuޜW:mT?˂T7/^ (HdBmnC7mPjK1YMnZ9B#D3vn㔢?N\=Cxz.JMhàS+O[fyZ!Q65ֻ1=@ \a5a>`ً+|mq+=򇉸QV -v%cE?}Z8U(!Q2߿q9CLY+@}+3CaXFc/&s}u2(9m R@^{H\lQ$})XO_,10?]Q1K-_)~3zx=`$_yM?"Dx)5^K`f{+o@%v///ʪ+ԆqS!}%Q;j/s%I_3]Of_@͗PfKu)Ys&g } z1uĥOƇ$W:H",Bfb2lO+eeXA9JDv j# T_ZwIw+K qȐ+D;.Lmw&༬ \yj7$D!4>/jW{n>fд~?A_?CG{\VMD&$Hd3 Xt>d@w x Qq )S'ݬ*ToyCGv'D=:;jP>7tVfj(U{\_'SQL(;A ~\$%h/ECOMTF`vc7NԶCH{kt^zHPZaXpS78~}}JptF*x+ dDo#8J˂dOh) g.W%񚮛`^3rNzq:zҲ[.A+0!JD +Pt HpW%o;*c{04Y"%gж=%XRΓsaL]wmƜ?]B ׎ĢV*_\ @?SLYM[(i?o aEqIk!g/ F̂- s{gBLr3/$0f8wVxz $¢0T?SdA+ʔ30!IpO+U!Ojl*ʓY*ɠb[MLV6I-8=7>ƒ*m#YTrvL82u}뱣oڣInf"lRgL>keyߤ =&GcwžZ69J+p(ɓD@MVΉS}9xҚƓN*Wa0 ZvEwx(WBYЕوXywf[}YGvA,kqnLCNy0$2a6~ 06m<L >C_>5c){9jV9쿭mFύ~f8|~)g- تR'ZWt0o=[a@l⤧jɨozie%hhkKMf,.%1fO[: h}QDtM^2z.7׼& eLv~oؑSӳm4#GSWw;b7pHz*hDΈxQ5> /ExtGState << /GS2 2491 0 R /GS3 2490 0 R >> /Font << /TT3 2478 0 R /TT4 346 0 R /TT5 345 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 219 0 R /Thumb 2385 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 45 >> endobj 219 0 obj << /Filter /FlateDecode /Length 220 0 R >> stream v@a~VtRXCcns"m' ڜ-goKi܌m- J1*"KRl~@48'cQE_zTnq-j_yL}$!PĞU,qIfV7;|^V}:z^8}ޅ"Q̺H#&όo)#7O{ӪNQENu 9ءRItJ.Gdig]dyʴF5Àנ3m_17pUsD>x'a&TXA VPŸN<Ȳ:ۿpV anHÕxYY6!f*B1 ^] ..Ywt)<3SayRN1co)o?KU[[kl;uY>~ P 2'Pe@ׅYneuκ &SK* RGik`nXqDn"Յl=[LFU|vGqHr Ak?p-ܽ6c =@C@aGYNlC>M|BϕČ "ŕ'YCq^WgRxb8nK2(//Qޱ l,I1]-R]Zs9"'UÎ2Lg~[E']n0(HC;%¬9R\ QSf}N+ ]y}݉dqAK:n̈́; CL/1;=Fxh`#dpQ2*hR\i@,X͇A5 =TsѤ#M, -`j몗X tO"vII{{i&5_Usٸ0;F[<V^փ}%ЕIpecc}4*NqKI3enʧT"T^kpZ%|rڔ04Ķi,fYe:J45wgaRuEnu[%~SD|SSjM;ߒk=($P)M]^~sX|J-'Eqy.9r'6aͪdBw@eBt#ºQJ]1a02^U w:kY>&ZXsp^\ria޶j4ĀK$$|ӝCfs.W8J(a!{)( E0tO'F·(ϱU>tF3\!AY<4P7(Rb xsAdGQפ*Ikf 8YK i";n82Xn+Њص=Wۚ5 a((ފCH|YBJvޜ~Tb5A2f=^#!ƨNU ΣQEVxM@A}^@ݷYWId+O W(S djEJaW KLտW䣲 ~ ɺNWI/y-Oc7Sf%XQGd+-μo7)sN#󄕉.hx4 Y4vXEM,}ja[(*A EV0͖? R[LrC ~5#׸n\$g)O9339 ;uhS@j!h;ozxԏpV/"32/m~&C#sqHjn0RZxԚ8!:( CU컷J5,nM|CIRk/aB!|ZgMnWY?;E"#ZwSIx|%>ց+@j:y㼈R7_Vb"=eTe*h'f䫆E~bm`HbV"Dec 1_:a@q2ޣ(xg`@^ L$q"4֧94cOXQG w@' Ab^v\M\1rV#np]B~a-k7Z| tkVdoN:^.-Aa=oL+њzJsv y3(~܉xDRKn`I$ppREOPQRF7+N_CC\ /؜Zv`HZ+..yzAmt~#y梢ѻeU2qşǛ/Ίަm%,GhVDLFJoS~)YAz`Bw- i> /ExtGState << /GS2 2491 0 R /GS3 2490 0 R >> /Font << /TT2 2478 0 R /TT3 346 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 222 0 R /Thumb 2387 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 46 >> endobj 222 0 obj << /Filter /FlateDecode /Length 223 0 R >> stream [(3m߄E|In4Xrv拃_oWjjI;v9th>[jdu]Ī?PqNh[ ҃G?;%9Ʋi=f4>t9]}[.0ӎ`a_MV[gbwoԐ=wQr(~[3q9GP VBTГTjŽn3FUٕuUF)6Z9-b iMU^UqTep[%C`ϹZ"&.,尉7$= ~x?3P!5YHƧbCKѲTX~(ShUK[}x@|E lSU2$M0ہx@`bC! Eö<)Ԗv5} iA?CT-ω(V hZr8@z8n1mVSaڷjd*SI@B\SGarZhLrܧGJK\p0KĦx|'/~WVM .cV\K7+&jt7[Ql5134YV3IJŶ." J>GvƙqqUVNV=<7v5qaEc![@jv1sG :ْ5)H!J F*xWw7Z$r4 ӡj12HKĪGƣ{3aΦ 892R3phiQ@:uӜmT&R^Q]ɞ<AP^͈.M}[9/DO L4sByOu4 ,66![>n*%gɘD F{RxE`/tÎ ؼ#?‘S_|r3r˴y.|m,H@cᵹ NǀJ7i`7:]clnX˶ɦ{P<ˡ%XMFBF,N~\g;Obzf~jqP#Y1%h=ZT-'a"HZٍdrmgJgAN;<ڳUCClP8 e)g¿ LRs $){+E٬(r!BmĪI87*&MR8Lz(E|F(kGvr›+Ӭ^/^IjFF-"O%)3'Sgd,O3 ; b 8sl뚍 OQ(JAtѻrr*<_5:"Povō{^\B݂۳ _ࣳOWф3NQJp\Ђj< X>ђʤ3Kn 7xD}&~f>qhn|܃0Z *alơk/Aq&$kt#.b=nR88]N’g18% fٵU)ôc l*<< W[&n=@ J' &;|Jq GtB p#!>hI_`zo *fB߹;lпSJfSИq!+^^7urR65>6ϕ6LH q늳` I_6bDͥƈZ8HU׏[9} Ro>/^, Eq\Y 3Z@v <*êЦcoKa.!dmY呙4$/˛3dGcʰ [3 P?O.&`P![EKXjа:x9-JG4B絥"_Ykm G}Px4lvӁ( qHf>> 6 UU$iu`US^~xe#idI/2`WhWk~// 4#3}h䢾L%6Q,]*#8]O;zi/*Zt\x3]RL" gĿslmNQIk Ŷ A[0H #1x'>k2^%w*sq`@,]^t[m4.B'Z572ZZ6!]$7_P4AXK endstream endobj 223 0 obj 3310 endobj 224 0 obj << /Type /Page /Parent 2467 0 R /Resources << /ColorSpace << /CS2 2479 0 R /CS3 2477 0 R >> /ExtGState << /GS2 2491 0 R /GS3 2490 0 R >> /Font << /TT2 2478 0 R /TT3 346 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 225 0 R /Thumb 2389 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 47 >> endobj 225 0 obj << /Filter /FlateDecode /Length 226 0 R >> stream R bC\Edڮ)bƑCVv}bn `E ?c9pѷzזUW{X6 *KF)mTZF5_ PŶK5a (3SCuqIoǾ^68s̨Vh@ڟ˒QPsډ& †Aȫ[:|SNTᆆ9jꗘo" "2շ8M5™]rYb 6Ҍw8qӛkfDvf{7e/_dv3b M^`c5o?_Βj 4l^`RqU>tHZ`s$E(؄*'L~U>~@- =*gR8V1ctp] 0u~3)+2lIymy\]sIYͨ\קC!$7DU3kz3j}qԑ}GfNћ:W„J/PaP$e+B/]oMP r"\N@%n|)lb6@b rDA5$O (9f$Rջ w[wj;0,q"rɚ˥x>TQ%aϜNO2۶ߵ!tL%`Fr C"zʗ+:dhkQ )>*ƶa е /k1.KeS1vGiauG71t W11sCط >2Eȿ,풡ylKնz˕XVlF;%c9VQgw~iv#T׀t;QtR1 r(y?LRLߋ/8Fr1V}& .YU?=53*AĜ*IoZh( `e 0sZ/Un@鯭8a^q={͟-dbIDuz{mLO9 }ih-h)!ɯۼ%ѻlIDEB_RchM+ip-Oklxkq,A OӸCͪLk8ffGJp*agSrGz{K ub~p'b%%2ӬL^M !2f} N#9Cyڄ%Q;l˖(#Oxy !8϶6TbM$I_h^aV2!=8`S]L"% T05jJ2IKRofS(PYh FfzrpEo4⑉lvQhcw>΢ҹX۝ہf`^,Fx 7ɠ?|aG͎TtەTG"op73FC]|pE:D:R Hz<8!nu{ =``S݃ B+NPZM cO"y0ʑ=HHpEJʲRZ>-gp_8>> /ExtGState << /GS2 2491 0 R /GS3 2490 0 R >> /Font << /TT2 2478 0 R /TT3 346 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 228 0 R /Thumb 2391 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 48 >> endobj 228 0 obj << /Filter /FlateDecode /Length 229 0 R >> stream \84 |+zVyWi#U5%mpZ#LOq5Eyd߁hj?1(Ae6A8;yAEłnWĒ]+"oSQ:Z3X4rjA60dUh^z*.9-#ֶ^(,`T}@ң0H_7kރ^Ms 8 eS `ZEۧ3PV,p_h}z?///@)7  ov l>8=+ 'x*]p{w6,7<糛Da,uMn">,*=ٖN '1%Q#N4,Z6lԎ7Ә.y~Z|.s`;4ʂǸ,n:?7]$5;M{[ڊp;a)$dkܩj+AA .X bz{ˀat*#`~ 8g_dlQJ0ܔei5QC!^\X.y$A( cQ(D1w/>AB$X5dJTډx d]@K)8??\R=@6!72VgإYdv5qBa2E$qטpR Eֽ.O&)F$b^u4wgu5{r<@;h&у5JI!$386j̢gS(i(}NǢ/A3 endstream endobj 229 0 obj 779 endobj 230 0 obj << /Type /Page /Parent 2468 0 R /Resources << /ColorSpace << /CS2 2479 0 R /CS3 2477 0 R >> /ExtGState << /GS2 2491 0 R /GS3 2490 0 R >> /Font << /TT2 2478 0 R /TT3 346 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 231 0 R /Thumb 2393 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 49 >> endobj 231 0 obj << /Filter /FlateDecode /Length 232 0 R >> stream 3CTAuEg\:>>РMwiHi; dCۣ,)W唪̔Գ _s R1ѓLsinu*9D7oՃ gҬc9mBALZ+=,}Om7ZbFςν4y! x'#v&iER}\k7eL, S~x7LVp)14H@ŷ'%D8KtD6ւg]-9#`@yDҨ4錱ȳ6(A.@taɤ;zhcPC *aPQpz\R7/" :ѭ!PC nI^`mɁs }Yjע.?sXO; R;;>dΎ]];yy8䩬Ԯ~vyHm޻)H0E8O~IXEHr{*ѥZe p+Қ/q _S`@맕w T ;49@4|u!M1v ŴīxdҕWs5áO=%s=>{BDs'ŴhWnR_0 ;*KA2Q%O~hWMUVvW"ԌXh5< C9_GEu (l2[r`e9Y+ة"Prl`(>}\ɏe_H `Nն4|Ni2DDľsAKZ~# +΄:Abp@cW&r5xb*m7pv93'=uxS(ӂ 8mU*^јKzBW+Ŧ@sRc00 endstream endobj 232 0 obj 2667 endobj 233 0 obj << /Type /Page /Parent 2468 0 R /Resources << /ColorSpace << /CS2 2479 0 R /CS3 2477 0 R >> /ExtGState << /GS2 2491 0 R /GS3 2490 0 R >> /Font << /TT2 2478 0 R /TT3 346 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 234 0 R /Thumb 2395 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 50 >> endobj 234 0 obj << /Filter /FlateDecode /Length 235 0 R >> stream R 1~e I2|Be|kWgN0ʌ,M zQ,|ЙQ ZԾ(9z `3b]s8ʝoU+.D\DC}%Hg?%&_N-m&JJ F%$I *=s}W SKD0(~x&K1% O͚N#Gpمo&o%[ʪ^;fBD]34>3XD2)TV:xW"XAv@3Zo ~۞U"4D/4N8POXe}gi6 LD7 ;A蛡odЁ"湽\>1=l"4I̅vne60[䭂ePfzdBS- ﷉h[,WOvƋveŬ_KTE6ZѶ@_wECYj#Uʐ p3>ULJ#wsYi^(ب^m(t rӫ0F<Lیpge]3<cZ}Jjt1O"L\AT9-t#;)hfyi~ӤߣmK0ym0x؍0uطL LsFxA݂ oN,cD3#d8^+|և}M.UB`Xt?N%e*Jbۭ2;9ʀa r yY>%GB1Dw.}f5?iuo>R~`>a}а3)B}6f0RO-L ^yH}}%gR^__OO@ H) ~:e)(PM{D uk`nq}yI."Eaa,muCm8ÿkM3}8ʆ5SD&{tA$lAFyC@/L1&SRXL4X.ӆztkdG'\<+R¢ {`iYސ1dB< 2#E=*&ЪK:եpoaH)Nxo0DglmP\V>A=LpGFUK|dszQd '` y<>UѮLY*0m$DQ8Qg-W{$\0UL]x>[hɜ*sf?fAoI6m=l6¢Ojǚ51mnLB+nj͔ %+PhZ> E׏eVj)Lly=Va],|7T~gY_h1n|Iq<\v#1\t-2d`_<„NF~AZޟېg%-!cgSx9? 3ef[[&߲Q1Ӹj{"/-"͋ZXWtCK! >^9UzQ7cRk)C\tȞ̱#mfuu3[h_%Ԟ+-6U.uTڛQZ" jU񤜾8G@i ~F Ux`DMM_G&#]X,IMaPՇҁzI.CFV$rJoہv A܃!;;t.[^'gB]f^LBKi(B T\FK+]iϰnx'ռ:3_jkirź[2܏=|;tP^ʵ$ gj%fɁ(dދ}^ll+-ftl(<t#%0~$ Pxh[kbuܛOo|?vl*`/PWn?(^;!Xw)ωWS.3Y9Q l5}C =nS){,8|r(-zֻk[5 ʧo62"E^{ɗQ0lO%I徰ϟ5T0ܓ3Tn 7 ^4a"S2h` @0Mlg gNj៏\ ̋?m,'sV7U N.'6p lݻKi)n;֜L!LV -5ѳ6e~U92_c5~V+Xm*޻҆i-Ąt7&!6q&gbГܐh4@p5TJdw||@m<E~KRƈMf1WF£V# &\ ]6yOnF7p$1̧Ǎ0y,wF.pk$im;Ý\hԭzRa3PU +03+r> /ExtGState << /GS2 2491 0 R /GS3 2490 0 R >> /Font << /TT2 2478 0 R /TT3 346 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 237 0 R /Thumb 2397 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 51 >> endobj 237 0 obj << /Filter /FlateDecode /Length 238 0 R >> stream dV `@=} N6\VAiδΝ;)#<J<2&6?; ե<^P0﵋nz2$98 =p~Hn3MG[%osJƠ2L (&&@,Q?싧-AdJ4IIW;F3yi\eBXY1SMΖ(DH n $as Uyۣo(i?1o`k$!̴QM΅H8 2G/(pOrsKgaDu3FKY sHXI#hυ\Tq$bڛ){~~mjӏ}i)v/@ ,#+f ׽Btw Y|G^~%:~1 (IN $o o3ԭ=>r0h7~"jB]Qf(tq.Dtm1;SiiK17vB:OD  i~1K3J d%ٟ~ReZ^{[Љ?} QT75ӉڍKS&>a)ST~fl0xǠ,%[LK{YJΤbE)'Ӹ õ^M_fdÜ-T~Y 9W&'qYacQ$fI'{X6i*Hn;4.¨0]1wⶼ>\QHz)9mw#M `)+j UWsaz. F,mYZ\I|UQv?řxҧ"lj`t榈&|mCFr B?Axi3lV5mLq,J`7|!@6īiqTC'Qt34y P؂gO6U Gʫ!4oͺ gI:޷QUN|'e'0ނ$:i'HpD0ɵm@QS31{ZM`de9ώoxǤYNHwx]Gb1,g:cb56l;룪#%Ϣ%]%tuթg[U͕Yߤw~عӣC(Mb$,  8E%P~1it$%zͫq$AFliBV.$7l0OGAG ȋT -\$f 7C\_6u_N\bQ'6JPönxx ]C.ON IC>$80+ U],0y=¾DZx1yК𥠪cJ蚃uclOim^oH=/  )q4{B?pmLB LwL5\qbakSt qE( |@%Wd|AĕᥙIv_ 8-!<;~.)@v B@s`ނvڜq??2nSD> /ExtGState << /GS2 2491 0 R /GS3 2490 0 R >> /Font << /TT3 2478 0 R /TT4 345 0 R /TT5 346 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 240 0 R /Thumb 2399 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 52 >> endobj 240 0 obj << /Filter /FlateDecode /Length 241 0 R >> stream 9Qʓ$lZd^r̢SlJ̺% Zjbeyב-}lY$G W=e4ᵫ)P'Uc-…fQD-Uw,`lo(T7ŏk =y T{/4}eE85{KǸ%}-1_ObeBu@@0rb;N)(=ú҅9;%.>ڎ.ob]YPz}W]:L(L?o9e?;< 9'%J.o @@U ۈӂD:j[tHW. <̵!kdoU޻R0ݐh"xzzŋrSj TOjh"(TˡmL1kndi[B55c< X\<]N[#ajl-b\nEX)j޽ %uP~6 1k™LDN/ ug v`޹ز%^:WQYN꠿ڿҬŃ'&cH?h#džH9B<ѿF=%x%Kҋ` G$4zG P5tJ=R?#2dT9l~h{ aˡX:Vf0*x l+,)f(@N]>|Vݟ!i39rSh)c=˪UHv@ b_=ћQ6v K Y_t:B _v,}]=#bq*A)F~'Y'!`s|`2&B,1 v I:V`V * -['4 @i@:q/vp@DPuygˁ`6L[ ogKsw|R)Y$ݣft{hx='g>No̕;;>Cmio5mKbFv0XM_RlLPԂ6?cI UæhPk(5&P %ně_C:J  !UkOZt'CEֈq~%7RVirrs;OXIjl&Owq&kyq-oMRum*"!4<  p6::cQʐʸw.j[)MI}Ÿ+CJEm_r7{?rڍW-WMMzu"oqy뜮=xuE;`ߊ*Cg@<*;M{j_O`?uO lLk$᳥џ dBθ^> 'ՒCl[ݾVF$̪S')'Jkg;}^9|uF0QKPGGsݮNK @{󌺾 |*W6jJNap+t$s AU>mLӚÙ@рߊM eDqw r593QSja݂3v'1z9Xa[O|ϓCo(Vs[f+aMaOGv=3 E& 5+xyJ?7<7nj^3pOJMI6_F/c?lxSdUͰ]<^\3Um;þ{)+EC5ipWTbB _>ߧ4^OcvZ'K = }@FǞkLE*)yod!;xLeg9f]L %u't2G]@18ǔ׭! MBj7DfDgFk&8iQIw3s|P#!tv2DDLM:$b|̓KcwdO3sx(%eRIevJXH ?BϤVզ naMC,TRg-=!ȻQ8WA W8LVW: W1}y#쨷)7<}{hQ( +>S]o;3A$3黎Tdܬ%/r+JLׯ6'OO`2ᬗCp}I!f|m3KMM9 8I bj狡F*b+! {d*«rkZ^׻VJ_Iׂ,bVG<݄CYЂ/]{C x#Ʋkб@qO PuE(%k|ւ3]bS[L*3FyDg'FŚe c9vuΠ:'%XLH^|~݄դ[~9Cä%5, O#g0Qt ˭2?{qDJAb6Lck8>YRL* \9ZׂEO.'7}y H2A\B?>> E?-UV2GuMVR8=3@ԁϔ2S]3[0_Un.kLuMW8>6%R]¥=K=^Ƽט?^g;㙇pjI(Ze'0s܀Q0sʤUHm6Bp1#UpEʬ6=gs|SL{(JG&HR7lI16]a{G9n3Xʟ3sAL]/Iy3DѝCZ`(ޱ-ՏPY$?d)d&8!!sDs=852K`IH~@n$ܠ-Դ޻o(g]"h*/r课 ~ID5 c"ٟ]u&Fw!AޚY/WE uFXN2ymbnum.? L>iZGw+{ߨxbzwOK'ULX20͙7jp&sa*3}]sjHW6bp@k}C>sd E+g Haq=[rGͤ'G M~fccԞY\a#Xȼ\[wGI&_6>Prۧۿ2ѢAj:){b)-aCT# y&ZDx_33옪bnר'3w%%Uz7og&TCćDQlϨnF;Q#x U'CTJ:]v /E^'_a  m~IZ80t"<.ڡBtX1Șa ^1!)yy@IFW*cP3}7wЌFjf$KJriu] wImq^eAMTZ+x2RIKU܆iL(gtqVl)eDl- =7:3zz9hEo}^a+EfCs^Bq ߺȚJFi5ć(wv&J^XP< ݈4 뢞9n }LpNե2 endstream endobj 241 0 obj 3915 endobj 242 0 obj << /Type /Page /Parent 2468 0 R /Resources << /ColorSpace << /CS2 2479 0 R /CS3 2477 0 R >> /ExtGState << /GS2 2491 0 R /GS3 2490 0 R >> /Font << /TT3 2478 0 R /TT4 345 0 R /TT5 346 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 243 0 R /Thumb 2401 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 53 >> endobj 243 0 obj << /Filter /FlateDecode /Length 244 0 R >> stream #6'7{͋V5}*ý@ kKg,\1w\&nBw,T֯&U4.Ի+5-Eˡh[| 3_Yv6[``,xYڇ%*ӳ,;2/Ie*A3G0Pzo.6DRek/YDS _p]"ND;KHXJMQ*V'W;M}"y5lη?rh+Y vJ w<s!ruO1Ԉ5|"~˛1IOۃeuPaCS)iHG<J=si$6(˰XxZսe> Bz ֪"dBd\"#69OrwmjH- }bb|},M R Uoo{2bq' @}wz_S_i.ގD6>2+eR34RH*{\kmn٩.ң <đ;-U(l$;iO1bq8\>RNS cE 0fL,DZݴA21^܂QBCj`~GUoucп1',9=o$E|qsI,ifa=k$a{7%:@ Q`-q!BvU-X[N d*vm WQo#tۺ]rx?TƧkGT.*؂t z<ڂ!Yӟ/mtך ۑzW3?JФSNW)6 9},-e@#ްi`.V4}꽾pMo`/>&3X>jR@$pd;YYx󘈼8l.9JCqsWuK&@pok9...[Zb~b];RQIIB$ 2Z9l>P< /ԎaA DV/$t;Y/w=Fk"⿛,zT&.YfI?t|P]ްȸ# Xò" &瘮\yBf:yy`*1(ɧ EP;>N˹N1R3>O9'O{knj.В)Kp@$ƭ2//!nhYjb^BՉ٧euy_~%߅gwPl$F"wlVu2Dv,$@DZ*= 2{̬"^؞5mUp+9 o%}iIQjۣq`MQJ\4_d=*$b2 Wk[?}^+o<>`CCN5s4OAjV M3Os.쁯_{= V۸H}TS7صo6A5J$XӇNXv=k #9!Shv籈7 VA婣d.{kA2 Bߩ8s 3̈́|00P$O lvr"PVT /YE0_Xy  vj;`/`9I#cuИX믁"x'{ie(T f A1*ٷљFCMp!$mZͫńMRIRו.5\5q<_҆JP8EfX; =$rW띉r/v{ogWZz@xg+I- LD؛3743p#ZC|hHh0L f){G!)p _*L*jlRhLB_{1f&\`,+%E^b.C&-`," 1ڊ%!X&F7 PߠBL'wsPkfdx昇EttlGZLtJKisCw`'v!K`./0PV1G2 4:M(P_Fi=xhhy5!؊ WӢ_b~O"p$ݵo`*"f=@0L(jAT24R#L6Iߵ}O%Ѳq"0cv@ؐ]֙-ѵ:E̅@\~Rqiy5dH)H Y;&'OH,OT|$%~ȗ+AiAEyd(HÃrw$3VXьR5_Gb%֙b f<[Cjk L8ȡ"^-ݺ(kRϴ M?F1Y&n~N#SDhlvqJ2 8"|g^uK|:Ǜye@ke!7fMYZEsDkohJ@hg$h1_,&ћVߋ!7+/B<D*O crp| $]P3X|L$1oRY*,] ?DƗ/ZtF('`(%-%̸~nA0 䳼l2hJEw-cgA#'G]6hi|M*I,{@FEK&0+Eax«Q}NX@+i;v2RjAiv4@c< ;c PXqe6/љ?\>gvj:Yc][ [e ?6,Z"8IGeC;ZoqfR9s?צ޽8ODFMpICÈB.(!wZF*6eڸq"pi ޥimk;LJF7( 9̈́IDEraا%7.!qεY}[S;>EqtitAV )/a;P9HYx] 6i̮AFhMgLE @X穓bM Ke#*}c =V"Ǡ~0vE+^461mMdSbXyz+k bry}Ѫ~݀U?ϧ٭2U0 y+B{O5ʎv*=Nd}֞ ؋j!3@3vNIR8n \ǟ nKe h³R+oVŕUO0[EdRyg9 YojhF7z+w~/x`ۼNo, E e0f.0&\S5/۩Nͨv䋔Ja$9XmHvYِD8qd_˛T;X!J7~ %+)v74oMj) 7zl%;fA]{x`/'[OG<-P'e4P)k޴] p1?"BE\c&F1@^e)sGiZ&؝1'3pYYZK0G}p9WP3׳5tv~ch^R!=&P@bgnppeRIw&P#?>~-R㥭Dj7 OTߠwd {_ot@N\Z: byacEȝm˩ɏmO27sa ZR<{ W0wD צn+t˭Y4hl4ZTZay4CL΂`W Տx;GT_rkxF2zNz%OLS-Aeb t# n`< tdiԄc¿e=4O<͑R0k!jR ;o5cnQˬدߤd͹v[7N% Iu&O헅i9V7ZX1[Deca7E{rhGYp(ZiwQB A ˰.K1#@@gQڄ"AHSN/OTtK"À)-^V+!xL7煿 "Y[V17|~_Ƽ9Z2>0Osc[F/z×nZ^ݤ endstream endobj 244 0 obj 4453 endobj 245 0 obj << /Type /Page /Parent 2468 0 R /Resources << /ColorSpace << /CS2 2479 0 R /CS3 2477 0 R >> /ExtGState << /GS2 2491 0 R /GS3 2490 0 R >> /Font << /TT3 2478 0 R /TT4 345 0 R /TT5 346 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 246 0 R /Thumb 2403 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 54 >> endobj 246 0 obj << /Filter /FlateDecode /Length 247 0 R >> stream V($g.ˮ6sX=͟F#Bⷦؕ=b:mΨ@1.R^'H v`VFBfܢYkk^n<zWN*fE(m9kJ9&eu(=o7CK/_woA7硡a2 opɦ3IT\D1\'ڔE߼lh3u(=X*OIT{-䙽hZ WDhzp Q|:[3)Ly|DNY= 9KӴ9vI(! Fyj%T1jᆼN0t*yyV0Tbc4:g l7hkt~Tً7x~DJ5< b$1c?Lv7#R -=7e$=&=bNGö=uW–?8heIQ;T>餧9^%ז_l(9ϥ2`Σv(^*4})%/"soW[^=@Ui=y+R-{h!r/IL+BݠN"q|l=kzO']oc?#={`NU@ĐAr-`6DϐWC|c\.{ OܟVZ`a~%ugl?P?ۋ>N(<{I/x}7GMf彊a +="NU,V<֎[fqrΖ#9;^k.$IϏX| ݱ@Ш5zhr y lBLoĘ*7$='cߚՖ-xâ/lg($)ƅG"|F{jE(7Uaӵ2fv+nw⤡q32vRR(js'*v-d-]Q]`t_$k`%ع>]sk{ @oduxz#MpJw54fɪ~+)@oY+LY!*SWU\ |$⼁g"~7wX]yȄr^TFOw,pW xp(i"Y`?b>SW";ݟ^B2KcG*-9g Hǣ0BJSi$u'_fM4xpY~O~b屚Q;g٩pQ[ߠ tw]YX>[vrF]k<֊̀CTw+zEE>?j5&rVG9);  Y QnUx_߆@ʺxBU^@o&g p!&r\$U CC-X5.! 弦(nsTwӖ1df k}Q "tG]KxT Ur<4f$:~_"/& ]u"}GORxrǻÒ#<3i@/sFҲ+̣H 8P=#GBM@qFɣI*j]8zvAIQ7 OLA6,7ˑX+%!YYACo]Ulc@I|X#! lWSY,ּ rB~[a+(zfg %0Q͔Kg'爰c6$%ه (e< 1֖~ؒ};;oo)૱m琸m5F||D !afxBX'ɒ)rg:Kb~Tm"ۏn r t؂y.Q!ZK9js!VқpkNI D % S^hnXm%Èל(Lއqc~zw>sb2wքW uC5wK& VDZg?(/F{bA`"&V <')@W[*:{Bθ$S:Qu(n{.IeI[L-]zWNU[ [ r([{ˌ('<,OB(W'F-Bɣ[·+ۛrwr1i@U}Z+(fScal,l7ź7e[' &2{p\S$juTa?)j Kd GI؏Ƃ5w̓UY ^v.Lʦ'L[s_H{ɮ2&G~YE^е4h!δSNjzZ:]es*g%krSs*S*x1t*u=O9#G6J6]gHnFUBhwTZ ^Mtz^P9[*TiVLA|Fr D{ǬuAIoGˇ'&$BQ+Ɇް,Zvodl(,/l{29&ĞjQ)х+8UcDKTYH!V.nל&2_UK ے/0Q0ي޺(N髲K\Q|eMÿ gDY!vfh?b@Nr2`%7}ԔIܦ =#e1oC}z4wLެ<ݡS? endstream endobj 247 0 obj 4470 endobj 248 0 obj << /Type /Page /Parent 2468 0 R /Resources << /ColorSpace << /CS2 2479 0 R /CS3 2477 0 R >> /ExtGState << /GS2 2491 0 R /GS3 2490 0 R >> /Font << /TT3 2478 0 R /TT4 345 0 R /TT5 346 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 249 0 R /Thumb 2405 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 55 >> endobj 249 0 obj << /Filter /FlateDecode /Length 250 0 R >> stream BUEL vrsR*As%%So+7;Aw^ ]Q&C"!1.MVZ[%Њ k<9(wB匜_NctU_#sYo-`< u fTs-ϻee[[PUa${q! !0L  )r$jܟ`7q*͇`l*u>4gCkΌ!X8L06~Sl`[ : #zs 킾4ׄnd̓ݔudaߏD ,1ryx+YNL)vadH}mwh{H쵬'tC*%8ٚXɄytbSsvC!4z$C~\IY}eZ/xd: m p/qT"oc |9U: $Xe;MjBei0Sqj4[S]Lh4NeDHS1;`x (yԊQuCGg`"Qd]U8hLJ Z4y"ti,b!ynZXREhC2]Cqqi/`jԚ2 j ;y*8;Nros*L -y:ȗa[],S /t:$R7aJ ŪJB.c}yY[5AYB;CZϜ/GxȖw,fʊ\$'( ]a8R%p "1et7kYSa̚ ˶gJ(wfD=HfVfagr2Tވ+2NR_nJ?Q[G"LsILaBe3{qKilt: GE;7Ęݮ<\cj'}~`6M7t#4="#⩣tCȄj7keiFvA4+MQ_ocy^ׯJ,-L# ELq^}w6k[+]Ϥ5-|j|iEX \,HB헳P&]S"jo7PS\ۥ;JIWq3VdD1 ;2.稼 ؛1(WO=Zs!N&E^ta|zRڔ2WwM:!2nXMq5piZUZ]z^AjFv@ monJ|g 4jtW0'>ɍ%¤={ǡ}[2>.2 嘾w]?' lcW`LRq񝟡UNo@Wc;]7Ci#XY^wlڣֹYl J n kE[yg)vsN8W!iO}ۦ^ͿЍM,9*|qcpvs7W :4F6brO ^ts2v$z]}8e#NnbFEގ@, ͂5B(#E~.c9C;=rt5zGtaqseYB@oxມjВ~J;Ǫ-E}+ {_+gOذt%iq& 0snHQs͠]Ui@I]97eTبuLpˆ-3\D"cܤڬH xI=tr)Ԝ/p%5Q3 Lo4~o1]0#i47峽ف{ j]RLFFZ}cMB1MO@?x&3&5wVRUa.L~.um z|Z LQډeK7XsKGlD%" .ã#<1?Ӡ3c*TG I8\YkHi{ԋ?: '%p![܂/m@3(^{܃=&#q=|Xr4g{4 5}2))~ Fo, mmÂڿ!(l8;2abv A洡Bp*`Kb,l8 [@3 <]:μ+r~ zI4j+["* t f ]âZJ SFX';Q\%9#\<-"چ_GBaEvr2yzI*͆Ü- L ُ5l=/!c0-48x:^b6XںPt4o}>&Td@Jz#J\$)3WAA^nG\[@3"JHH%=7Dh,gí-Uv;C qDpHmxM=\P!5uYvWUQzcA31g"H efMێg2TsƓ2/|7s>SϨ-&gɊ%Hzp +!uAXUڢ8YJm[R&Nư. )L2kO0ZJÇoTôfd(FAhPn``q rffM P endstream endobj 250 0 obj 3811 endobj 251 0 obj << /Type /Page /Parent 2468 0 R /Resources << /ColorSpace << /CS2 2479 0 R /CS3 2477 0 R >> /ExtGState << /GS2 2491 0 R /GS3 2490 0 R >> /Font << /TT3 2478 0 R /TT4 345 0 R /TT5 346 0 R /C2_1 343 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 252 0 R /Thumb 2407 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 56 >> endobj 252 0 obj << /Filter /FlateDecode /Length 253 0 R >> stream gC5t5$"8|N"Ŗ'D[GJU揿 Ȳ}zȇ}W)I8Khlm1r,qߞg P7 &^oSBO%02UԓDY*p|"iB;gPC#잰hE(+Ռ.v2Cu}97i'J/DRnʼ +4vvUKs< @_kL T<Ã>}qYGF~J]Ɛd/<݁X}RW3j`hEB} ɩyzXtl7_~^m]#nbQhI ԍ@KOzP7 䣹/#:˵ބh%-%}/kn7w5F{i̒(>wMb'V3\@6$RMzRԣlVBKPhɩ\; XD1'34f}5J-r屼f*1|IPay0FMķ Xz uD<,/M+.0૤f]YuiRK-D4`Zg,N?$ O=nd$Wn񈾈c˳k kgc!,sELT P?4Er|xcl3 tVdYltnW EE#C { !!ڌ޶D2ߦ9&Iąp瀽RaFNiC:6g+iyȮ!9)ܥRricA;\ B@l?_O&%ӄu!}|ŨWԶLkѕ'w Q$mjddf5J3lc ]*3o}mz_0aoD͒A^򍫐8SsޕVbA)xy,I3`]raz{:'L@EL;H/ Ψ,k= d(+iu=-9-#qzx3G ;ogu?9@,z"-_P/} eV-~c\d҆N2|_@T8,4 5l͜wELȾO5"QO;"U%Cr:OWXK>r5Ÿ.›3L/%.ωEԛ:e S~;R Xn-=+9-xG qX$QmWJOn E"l2y^XYcMHhԓСH.(0Iħȇrb$4|)K؍. r9z9v8y/Oi1u HW2:?X{➲A1?_0]ؔ/A;~G*ɀ0ۉ-ł6&;_n. #0A=ʭy}1p fH\ x3w(-!,E8;PW [3gaB`ϰ;R2202~}U&# W(F.[mviLQA޷W5"I3o4= SL_U#I=U/xv =Of<-Bzzrj6P/m|)*~#w{` UiZ@NBdj{3b7R&F6UfтI`lS<+㕬!ɧ,u8|g ӡ[Ƣ+~L@O:9bi"ƽUS=@# Js"DK'~7jK8"K»ѝU×W0J?MҕdSVos+jތu',1 6V^Z3mg|`M/x{"Y?OzSj7)#pFܾK4KH=4ԭsq/)Np"49.5 IC]27Vc)MrB)zZSw%/j|yP" endstream endobj 253 0 obj 3328 endobj 254 0 obj << /Type /Page /Parent 2468 0 R /Resources << /ColorSpace << /CS2 2479 0 R /CS3 2477 0 R >> /ExtGState << /GS2 2491 0 R /GS3 2490 0 R >> /Font << /TT3 2478 0 R /TT4 346 0 R /TT5 345 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 256 0 R /Thumb 2409 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 57 /Annots 255 0 R >> endobj 255 0 obj [ 379 0 R 380 0 R 381 0 R ] endobj 256 0 obj << /Filter /FlateDecode /Length 257 0 R >> stream u v[X=- ^5 A]?rRrEa ZN}Su@N9l֐=uߩ]aK=Bx FD; MQ[mh#VfX@~X4kC)M!wo:ixv;>=ift)QŨ+c^On&yÝ*W'4%r2 z/yL|xF9m^{&_J? uscgaN}i+yЈ=2\xCn3Z+lʾc=v]vEC aM^JuQt[nH\"nyW5I)mũ)A%^FILfG3Wگ[0l b;TuIY|TIOKqBdLKªC2#][R2|g v'?[)6@96'S281S9&9˝G:c$ n0QOb}lF ܃X uS8lk ? x]딵I@UDېsT l,}!S3ۏ].r~"3pɅV&IbVQ_B9M$QFy YD>phrwwlc(0wˑZ/b hQa?ci&Ž1Abg߄ӆ h6^t:p酒riLE4Yax1c0H(z4qI} wȩFG۾`d xQ'fOT-ٲu3%P/>a.k}WL][4 iL: E&Xi!Z}D$>yN=hu% TZ@m9sÅ*kk^; ă08A*MȜZ8O,{ f+CΔFV Ç`r R9]r4X-ۣ%*!q Tq*P58;6u?hS<>-6WQZd>˜_M/28[Au{ !$5I(nFksj9x9٩jCRN&0\K/*y+2Sn2%$azME"\n@'D,s5*=Ugki:'Yr~UUQrh!K$AR8ar)*cIxl"8;'ޑajÀȍ|&s$o_s[gJ/QI$琳6΍. kpim Pʹ Qd!ZFM; c!]xԪ4c!!oF,i Mt޵fJ-ya;'ՀG%PwGa#mGԩ3H-@?~',R aE|Jy%iA*Ϗա o jP+L6 u7i%1-zrlzVAlcRb.7/Fhm[-EQvPpY(3@y6ː{jbvYKFhX%]5RC/ m`;C }pPVvѾ9C9 A7?f]g 矌Do4P+$kB.ΰ+ipvuzdF@Waj!+{O]iۄEo2' OrrƲakc}$W3.*98 ~z %xЁ9UHwD[S#qJ]$rtNRهx}\R ƨ$IuF wJ*#0^)A}س-r<'Hu*)O.@_LxaouDE+v%c@mqZTk/PkY{rE̍&/z{UE V);S@T?ޏO#AS,)aL{Z&B]?}J8pY?&k;wIQ%ap՚,u. 5%TSW2~הo=ʚftb ㄕ _l9y=3tǒE@k8zwyX*ZT0Lf-P.>!*G;d~'D?Ag!Kx3 y)LV-=lUӄ6Uo#p7p#^ m߉CJj]u]W΅ wDEoˡZm1oGwF <Y.42U_ Lnr|S`J9 ly!L",kT/Cu:|p~fSṚA8Qн۽υ(N!dx0?Rw!\;"岘mIϴ&;Paõ$Ӊ&GsQF]񎏠NBK5%K淡K\sWqVk'rLzE)% rj<ۥP*YVDW'4\ﷻ:ѓ̈́e 1!' d;7\%eSU@)aBS\?ωt0\St㺠1ac~}{ \ xb(m.1K gy}U̖Ng+9s'דw-q$4E Hx[_ن{$n|uAzThYZʂT'3H#0$NkD D7aזC(H;+W@ endstream endobj 257 0 obj 3031 endobj 258 0 obj << /S /URI /URI ([Z!iOw+cyZI[bY|:) >> endobj 259 0 obj << /S /URI /URI (B/R |BRh\nO1-,셢) >> endobj 260 0 obj << /S /URI /URI (ʉ'OI֏w4iX 2 HL§) >> endobj 261 0 obj << /Type /Page /Parent 2469 0 R /Resources << /ColorSpace << /CS2 2479 0 R /CS3 2477 0 R >> /ExtGState << /GS2 2491 0 R /GS3 2490 0 R >> /Font << /TT2 2478 0 R /TT3 346 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 262 0 R /Thumb 2411 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 61 >> endobj 262 0 obj << /Filter /FlateDecode /Length 263 0 R >> stream rh !d+ET>b-8y w"&v."ݿBB8]?[1|:03EV Jzq"RsxiSj̧F{OP,-'/}q Lju$.2 JT +P@%6.CtV K)- ՔG@ќ L1@im =Éh3T|O{ȝjvɎ-n/Htq !ϱXQ޵xﻟǰ ='w4igD=Կ%iF,e*,3[di`\kK+ WF6LmȀ7 ;!}Iu}لnay^6lQUp: 4kqpu?c"|"k!:ʍ\Tw K_|z/x[٭H.I-^HV&)H g'~,WwXJ1EW?w}忋UßHf{q#l3_;5"vp*uk&*l8LP0y9 Կ4˕i(@-屰lZ,&Vt)FDT*15$673fۮ6os>Jj}Ra$BȌ\6WRhRM2~JNB*a_i9, 7 ^ۣp01bhڠr99l {}m!G'a {Uzii>f_|3M+ ߲7C֕3II'=3tXY-Mq^9òO"q 2N\.ԑ#T6ljV^jyx-ϓ/B̝\#6GvuL0 s=M떲q9KP^CU CD\bJV-߇̫drTa %M -7 $p:=OJTT;TXՒ?4QM(mK]h_5~z" q2PgcS>dDRbQ[ .Z!u2unMOjtߕE]mE͍]i֞`:;XshA6g8ReXIRPsVtO)mb FrZe6t[DqĬQ}7[WL9aayC藀7"EM> ^*۔-1.6 z&'Ķ]i;[Fmt%Cmr 0v882N\*蜎6֠ OsշC*m7.ҞΘTgAcΧ}/zĿ:<ˣABBY={߈Api*ObZ/t(Ԛ~ A3/13nN_/q&o.-E"cSUe6$@*o暙7#Ix"KġV&]U>,TvkJg=C`S]V:qX lwpҚ.=&1˪|xmP8 i8,}|s] '¯MgS/̆puh|mx mG`NGNwJSR.8Egʕ]Z_Pj¿oNKYY FfdG1pt?*~(*1|W>P-Ln=tvh(&=ҔFBEQa',c!ũ'wbk^T}-_<#xC1.-JPtC.+%sEcjKiƮs(8r 3bwA@Q_qK4]8%Pml}q.P>|Hd=XܯN,kYrhߔ_F!ł12Khw ?QY= "B%Qu 6?+o9ty7ta}tn=rl,ަY) TUY-G&SxVE9?]RGu/7QFD>nbU۫|P^dHpMMñgL԰ kg Wc#P5iJ<<sAS@̯Bf!W6mK+պ"80EAM`4# Y7j_߫U6#"RM -1Gnk61;kQa@eGMX% d@Wg76mi[KY9Ղׅ$3/!W }U$)=p0u5[`cך#^d74 ~FzL5RP'9t#r1I!xKw$cO>P^BIuESm%SYDmc;)Ci\_)L>"`=p>m]65#l)B$bֵP Đ2~!*4HQ`ןٴwra8w{W/O~I6>@aqlGBH`-e4du3Y >HDs@2;K{l[YREf endstream endobj 263 0 obj 3952 endobj 264 0 obj << /Type /Page /Parent 2469 0 R /Resources << /ColorSpace << /CS2 2479 0 R /CS3 2477 0 R >> /ExtGState << /GS2 2491 0 R /GS3 2490 0 R >> /Font << /TT3 2478 0 R /TT4 346 0 R /TT5 345 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 266 0 R /Thumb 2413 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 62 /Annots 265 0 R >> endobj 265 0 obj [ 382 0 R ] endobj 266 0 obj << /Filter /FlateDecode /Length 267 0 R >> stream  X9 LF QzHPK3 :912OsԅDvߒ39wt1B@릊;cU} Y4rJCl7FBm:zI 7(VeM`b08Z1#R]ee^ dJ{:|1Ss-x}ρt%@]w? \Z7`x\N7!MhS?Ƒo@5y'hrCdrĥ9k3~A &(G51:{bhӥsVRvCiʀ &DEۜ!5I0^[u -&Ig9(OmTn[V3^\%ӘBxO*.MHx&Mo^=V/(3#*Ƿ΀$h6{#a6rB($A#楊`ltSJiC-)4{G_D֋y PWҠ֓r3{ũdϙ'br/jJ>xTk,>f#d1} >&|$E5|Tzer wkuZGA&ɽDh+ Et-|2M`SE>6*"aF|A8\~ c*{^<[fd+ HYp^; G1#9DpArwI dIݫ<I4^ezہ\+;4p.D)_`C؏~Mי85I0p(ukfJo٨d W=grfl!^ 6Ѿ9D_C%6_Fo5V{`!7²v#xVFoiy~Ϯ<'cNyR)VگEtGy-:)fE<2EuK C:]fCYIBZJ+ 6buFeY«0yR†vW9%Kxɧn ,N@3={rg̤/>%mL@Tf%v@혟P/q6Cz%mvo8֝9 pAb՞"OZWǦ2n #ЧpGs¥3u [yZ6ֽf bpL Bߗs19xީg] 3bzD Qp)C?k:PU8,-YqN XCjH މv빂J\S<_Ev6 Te̓m0_)heg]&h 4ƺHʙ&zrސ-QM1J=]^;݌U␈r1p=]Sa)ay4/V@]HPԄz L4+:Z0MT9y/8lYҔcٳ@]޸Yg+ⷺ9 -`e*=nwxȶs#š,7["ӧ7} nS-znHpCy=yO GPꐚfбĐJ1On=Or\ 3pkT2P< T'ur5q " " %a hDXs]s#@>g*/@(v\ )2tN8uade4.E͑ʨ'eԿ(nJiӗ>aC X &O}"I(fWS4܃#V< P$Z:DRm'U > \{j7abΈ= |W~14";[ˀŖ!T(_ľlrQWXލ5RF~/j6--Ty &FaC̟lKc"!{%O:p}Y (8+?,?elō-/)G_J#OFgER'rTF4xP50U+hXgV_zƟ34H!ۂm3)"<% য়8*jڕM ɕ+-(xfCcX9݌?k}lD5[ L{1"x@i#ocHԝ?~slTnIQq֒zhꆞ rgYFN(-<>nJ:d0F1M[^ fhr4Ôeyn=V#ufS܄Z=jƸ=>xH&CR}. D8~1Ĉh#Iu 3d- qgj^j'l9b)@_0; endstream endobj 267 0 obj 4494 endobj 268 0 obj << /S /URI /URI (V i%.ȑJH ƌlQȾP) >> endobj 269 0 obj << /Type /Page /Parent 2469 0 R /Resources << /ColorSpace << /CS2 2479 0 R /CS3 2477 0 R >> /ExtGState << /GS2 2491 0 R /GS3 2490 0 R >> /Font << /TT3 2478 0 R /TT4 346 0 R /TT5 345 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 271 0 R /Thumb 2415 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 64 /Annots 270 0 R >> endobj 270 0 obj [ 383 0 R ] endobj 271 0 obj << /Filter /FlateDecode /Length 272 0 R >> stream kzh(Yeix0xt/r)` ~?vɘpo~SFOorl$yx@ʮ>u¤۩$ LY µ?tuJV9`5hX~)L_2'beϫ,8-R#A2MqIVwas(1'C "e36O/R$~0"[:ŦӤS Z+RO Krfxv=1gi^5@_rݵ04B+Q9ɭI`8yӢْ= BWPa< 1ܬ29:cĉL GN7Z.pAL#Fjpp7qRoFhN/ҏ9<7!QبmJBPLʍXeXsT¢/ +G{6?7--eZ\$B)@~-Z'ʔ,t&e2<]{H j&yS8%2'귂QGxg>Ƴ eи BU_E)GLm<4+x5k8sQuh|-x.9M$pv^ Kc-4 evrCd20]3!(.y=g Q1=-xowgVg-mYSb(8DǮ }k hV> Ɵ6G۟;hq=ӴV2AL(sF/32ʾ? sŹ9~ ʷa㭕+|B!%~yy@Z: `#I]ʈ˟ '8*J6Pk(AX{ٞ_jy#ԅ~zH{ F\z.Em5S-ϬYtJy95CivԷ}1g`|;L;)g8N섮h$ANE,QWh+zj{m/2|ZKDdsG3\rFWHu0MDm8G&o~p0f"%mn.7ԝ77f0֫Ez_G0#64xљQ#ވ\8r_^řȖwf ,g^@q}.j7Amu>1aDN9| @S @Pk(gj%-3Tq:1cZ@UGWRCN}9x"zKw7R ML|-A6+U~Oi{qs6˝O݉"W=.tѤ_t , p+<>UeQv4{ *ڐ-XCTɬgjfsTu)w@dDC93#|R$]݇k#,EeFb*ׂA;FS(L|Z{}!(9Az[iT]7@X`"tvrOds9Pzy9A1ri bc'V JsPpOkIˌ@)|6PEl ׇ.o,4:.-3 $DT+~ 2؜d5?r5Rf2;f?h"iOʾ#SXgYmڕdO o]Uv=d"󤀾辙F,bz= -f5“]ձх EE%OD 9 Dqc^3ʿ$|}“벇+VdBjxk7&)=y'wp^dI*- ,/ڷL!N"o.}%7x!\)43V:qsx/9_+:sD@P?7&\GŨF[SlҼ&<xJ֍H5O6-xOC.3` h-@= yOL+!%s*z557!pe3ι ֘B察Fj X=Ks<]@o3W% zxKF}_X_*_N^yfobI!+c(CFtсGe~oŢySTC`spfQgfsVAR`lmOWQ=CdgcSR1\&~_k\\\n0DYM$zq\)> ssn:SWb) >> endobj 274 0 obj << /Type /Page /Parent 2469 0 R /Resources << /ColorSpace << /CS2 2479 0 R /CS3 2477 0 R >> /ExtGState << /GS2 2491 0 R /GS3 2490 0 R >> /Font << /TT3 2478 0 R /TT4 346 0 R /TT5 345 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 276 0 R /Thumb 2417 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 66 /Annots 275 0 R >> endobj 275 0 obj [ 384 0 R ] endobj 276 0 obj << /Filter /FlateDecode /Length 277 0 R >> stream R"-GH1qj%ֺF\^_%vB=w%ؗۿX5TkxSdspe䒖/Rߥ۵E7d:G١ T M94"_ u<)LoͿ:Q^M tk٭mO˘_͍vȁ*+-[sW?=6Fa7\jAHçOgq#Jj`Ӝ]y@~8D+*cvӬQ^WvrFGal/*bПND>'g8`2՗@>ǔNݠepiU`MZ+oЁ@XQ&Wd87Au`;*u\v=[١ة5&Vf!z`G2v%r!4qh"+%gnp=\q-_ b5)wn3>6#H 'exWmخSgL^eXd^%HF}QwIxԍbKˑ NBb@ÂjΊ¦eЩ4IBu?SU̻4s Zc |@dwmgrݥ EA-u2v Snl\O`_[O-Ų7(+DQ+vm4q3b-ehB;]`_ M#;QA~KI(;ϋIXd`А1t08 묭==JJ'B3CΤeȟMJDMv җ4 .&Z»&{;̌DRig 7lkjy# WQ)sm1?jkzc1ejpB6Uz:k + /qnp SNIT.U+YԆJ x͡*c8;"D9oH${4\ߗ*D#~o}Z- @_3.ME5|8- 5%֪kOCuWԑO4Z[z5I$XO~tAƋ:!D境 6l^v*5p7ֻ^1f A(O)f-$ qFvf;q0 j- ?Ódֳ-"ӎJ@[osvfy Al͍[1s]!<0Db/=\Ov1bA!l4EX:^g:4Q}Je5] / n WB9[ †Vk{"w|ɄMSNBp-Q LG尕ٿ Ɔ$i,YO6^Z2d7Cb^i?WG!ŭ.~D^S) ǘMX*i̟>/%, hs_3@phH0e_9}_@'Mul"kR9Qp岒9=+.I*9wF$CRgf)[dP>E+`mazP/wU0DiduB2Hq0tc#2&>W|Y okbjL}ODwGJ+'@Yl'6Iy;5PJZb.4 3c3AXxL} DrmP^hϧmH,q D.#i0uMGUzRj0D Ѥ _ +۰7 YֳZq\6K`O <]xZaMjVY zwN!/\GFaG1*D]*/?p[`3_,oağݮ*9vlFYg9@R{!ij y^@:/D[!qp fp24ԔPOha_5zsS^|S5>BʠUT"X8 eC $QnTS&)׈+*n[©+@0 ~/lH բaڛ3!s񔎗% C:o- 5W4`bL('Gh/xxZ5#]ٽk}zń'`oѯv ]LIO}FXaWTĩk%1KDCS^*ўq5vIR$>1Y%۽#j/Ó8AkYHvfu:nEv@=* _ncp>Pc@i_=~iMwWo'n^8;cڞ qTBg%ck<@ T;za,[j$]IJ.3[a\䎚z endstream endobj 277 0 obj 3396 endobj 278 0 obj << /S /URI /URI (;f:XM`9\(1i%mp" ) >> endobj 279 0 obj << /Type /Page /Parent 2469 0 R /Resources << /ColorSpace << /CS2 2479 0 R /CS3 2477 0 R >> /ExtGState << /GS2 2491 0 R /GS3 2490 0 R >> /Font << /TT3 2478 0 R /TT4 346 0 R /TT5 345 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 281 0 R /Thumb 2419 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 68 /Annots 280 0 R >> endobj 280 0 obj [ 385 0 R ] endobj 281 0 obj << /Filter /FlateDecode /Length 282 0 R >> stream ȷ 1PzxYsyHG~T/}elp<ު(ՠ[Cʔ:#`KtC> O1Uka:f(TyG8_JJeT6 uɍ["d*g Q~#Ӈ ItU~:/~92Q[QpITU?喫%^]r43dWSӺH@_Ԭ.ΙZNRDGqԙI7lt,N|>13 7@9Bj?ڧؽrk,Άj|Hun _ˈ3UK>S];Dዼkߙ$TYMf=w"E[<y%*b#:zV&@L?T}PjW"ȑSҒ܎͚`<8~p/Q֊.wD-z9q B$԰S&= 1$N1U=%!XhWƽaЎ\?s*' M 4Ma$ B#g]F4 E'?9G|M-6Iznե],ɼ4fɺqIdf䑤, '}Q%B-9JZagyڤT@-?Ƌ}eqHr\Tu|Z@c].bedĉTGtfmК'%(gp]Dଁ} < ,F&Xz#7= pv+a]C,v7$Qy nYj0rN=:Jnd澚+֬x35UsyO {(z<Η+s4vo!cnAii3E#/<{Q| ѫ.i^ ȹ4v:[E)V;yTS\lBnw*ݜ~Z */vUor5y)St1iBh ^Dv ky"C8UX 7Uee[9`$])2{:NNT2MT|}N= ƓWB>6DOJ1i[ꊠH6^yH3^6+y5"PUw鶂Hn,dp~qF[Z_  .ːiOZyqu9|>0(穿#0=\N^tzDx߄c"0Ww6Z=hԯ3M2*$R cIuWQ~z]%ɕ3'JvaGZF%z5q튫 ~?ߦ'>aPPԬ:!m̕ys*0f+0J "9S$=FԶfKx}@gő]cL¤si7X#ByUݫ4NҾтDR='r^DZ*ͩQCʼnml^Cқ\d!׆_+%Z&eb#RbrW2`4=M7>G]'y,!s n>d3bCF,ɧi\RrZCǡ-/;g;/#%"N~:s t~4[!Փ` HiM9"$%nMN/kKʀ|TYP w8[  ^jYK(I]&NzuӥܬQ)E}MTJKI .vN@/0`BA:5sS ٞ.&xTw 2uh9'^ CFDs M Fz-?ʝD?ӻEz>?[{_crhήj[[w efsD߇/YJe#E(@C9`Y<^4$P&zeqgLV4Uc$%)z?vn"Uc907Hd7rV 2-IN4[OM}9 wTi> :iY:4.nŒQc=-Yax`w cʩ6vo;w=Xް ADP; J_S\^ՊohoyJw LªQ]"ymʞ n1Ȫ3ڤ'H 4>| U6Oz_9T_|X[|dEFF1wJDp$xQd{,v!\9MLA*ha0R KFбWO ?ڸϷs} |\V+Z}ңI@n5LDwυgck5Xv3}#l@@߷p3`Z EEgƎ JIhwE^-w-A"Ruf~Z {ςӠL$>B(R֡U f Ssf B`׌ Jg(d\mA> >ptb3:Qqe"H ԗ$VC9d'm4KҖo+/\ ),DM&Ӄ䉏R@'ΰ]a7DAA`ՉvJċ%!~"~d2EӪu5[F'*6LKdZi{z}x/!c$͟9.v`nv7 yu|ǧv_wirÀ8 X{J갨sB>ѯtqӎ 9i1njN9y zP2 0~ D0y endstream endobj 282 0 obj 3436 endobj 283 0 obj << /S /URI /URI (vjs͎u.\)\)lBNHfVt2]!,h) >> endobj 284 0 obj << /Type /Page /Parent 2469 0 R /Resources << /ColorSpace << /CS2 2479 0 R /CS3 2477 0 R >> /ExtGState << /GS2 2491 0 R /GS3 2490 0 R >> /Font << /TT2 2478 0 R /TT3 346 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 285 0 R /Thumb 2421 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 70 >> endobj 285 0 obj << /Filter /FlateDecode /Length 286 0 R >> stream 6[s>)+.޶boQjX!%- \E^![ aX`CYtU(p87gf@q 6L]'\(=pi Y9qA^G#5l+<ϬBKwn%oͤe_^͠pA:V͋o :i8b୎]>q`zuUWLϧ);0w4Ǒ eWi+0GR^o`\W ]I<+y; 7\}6j0+wGqMh?J>2~>R#~W#A:h^4>0`rwrcj{c r`Y{ǐz7U3㑤%ӆK9wr`G:f|pdYR 0QBoB4: ;f^vF4B@:5J<^Y*f@00/ ԑis;)lkDAc(Ύ|fVG  EHyyu뚰/{zGzDڵa dXi "H=wg#pL־ 1H7zHmrvO0Ԛ&هZ,W|q.gx>Cz@5|UT{&a t_è|/_/{)E fD򬞇x|0PST0V踧#)S"T$&00P|D#[rMUޢK&_-qbSUgHnS㈤뽓$(u 73eLs,e+)V>EhcUSmg hʆd#MjwRJQv2-f"N`I6遠YVr6Grx??c6hD@~=~u3ZV)FԵ Ʀ2::\[0)՜[ϻt5]`]pabŞs o 1ê~X8p WyyPM4=69`K.,p{[' 5cخswbaG{@V v# YU!bX>K6%U,Vu| 6T6z:ݒ4Efd[C\hc<c-/8n bSf!%$ce=8K D~FUoCQKI~~5&}~sh_u 8-:NICZ~7B̽>$]mqrip&Zo|jx4 RxDCƧUx^p7Ѯ;ĠtiJ6@4ڒ/z^f"7~+Mlq 0NNž+Oik6y"Ja6t,=_iτ`EP3.1s\^y=sL#pڤ8IΓ*mmiV ' ll9,ѹisjN6eTƥ=`9G5ć;T->Փ<ќ}6īy$ rgm(ߊ;vjwR3Å㜬&}0ӽBVP3۲zz !V讁zORlkM&:YqC$k0Vka8VwvrәR3s#ѻI~Ui S)_;d/OzGo/4z3 _AE%\詣ԃe?ȝ4!s;6xV}71ӈ_ÉVgTw>^{cGWBV=/sL[5Ds<|`=f}6Rh4 ߍxɓ @RXNF zfjg”_" S\-;X}]vv?] >C$vxaclAl iCē1Mk~߰RKv+*"1KͿ/$؋NfF sϮ+^ +^L= X| &ZqJ~p#bSK 7̂ٮ 1:\N!O~dW)4do`Zxάw3ڦ?6cX,vz?ݪ@G8/yR/o/&mKNp#DQvAT ӈUl_-X14 c.:މutV+YL\p"&]/8 uK"Y+D+LȎ!֞ NB7l,*b=_łO?pgX `&a^VoB;Y#HytUo#l(J\"ax9ԏrbGIwSb:42lw]qx?meƋݗ|ӸRFJJLdW6T.p=GkVpAbO7CVR"pgoy%T|䎳C/\q\gHkK$Q`%p MWg-~ju~s]0 qxB.pag/C3K{E^̺|06XtR߻5B\tb]{qs~N8]dϗoF$or3ax+0 ?dOCZiB_^~j rJ. 9M1g2T"Vx)?2ɠ3pEtwڥ3v`tYkTN$7K0J^Iuy PQZhUg9y&@xu+v*,4-U +FCtkcKc7u@{^#| endstream endobj 286 0 obj 4016 endobj 287 0 obj << /Type /Page /Parent 2469 0 R /Resources << /ColorSpace << /CS2 2479 0 R /CS3 2477 0 R >> /ExtGState << /GS2 2491 0 R /GS3 2490 0 R >> /Font << /TT2 2478 0 R /TT3 346 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 288 0 R /Thumb 2423 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 71 >> endobj 288 0 obj << /Filter /FlateDecode /Length 289 0 R >> stream ||G4q%+Ħ~vݔzn+Gl8 9moȓ(K.w@vv#{䝍 By}f4?_mikYЙ킚`? jm$;yn pm;bi\9i;DЋ0OǸ`I;^־gTA6%ش[ӟk}NR6"}ANs[}Id:K2Oʗht sZoA0ly~Dic=Hʤ &nX[QΨ툟w!p䧅 0~)4R]*P/ {UvZ TRW>[Tv._^0xI+{ Iu0ݩu A!H#+xV+cs! BVKιzxwm,{N-zzWא͏rԆiBHd@GraV޺0*hpxD]e~F-,o L]z~DKKKؘ_xhFw˙iKfop 8S#o{*Ȩ!̜y'8D ]9"P^5;ʶ6#hrZia|p̶ޗ @SJ5?tE/bu{m]9.<%)!I:uC"w"-:* ~R?|ozyjCYBTh̾=o޼b |LyMdO6c%> 7\;x¬Z#s қWD](K 檷ʫ™+) Wflc3c|ur*Az\n3ˌ_dX`>@c8+$-Ig؍7ƺqj1O*p64 (EpOĘYqA=n~xPuẺ\zx<OqlIqEAH!opZﷷF {|*񠥡m,x[R_q| !eT7YC֣gan'+ JIry" F|Nt:?>vU'q\Vow۰V!V<>"؄ޙZ }MH4ˀ$* |qa8L߅eU[Y}&d@כՉ:|"+{J8DZ{A" i`vx[sW`YPV/܁kH'ͬp|튝/Uy"RKeM+8:Y([gئʹKh:#zwO~S.{D"F_[W ɬ3%ǔ4ȇ!OwӠI`}\p#NE%)RL t5 _3k\ڜXOb^+^džK}ioPJi2w Hd(Xb/6^ /3}T3ۢQ~Y j>HÊ6Զ a^"]5?@~1T`BS>T Cq sb҄k,d^T7X3r\n:nbq-^|/i/Kݙ-̯dt5"j{h1ks@,czAܫi:g [lդT8n.Td-d#fJ27%$2bjUW"2yX9k1JQ1wv 0[gY_kH{ [,B{%s(?~^1HJ|2R;׏ԦK|,i/g:J*96[rfPǺ-MkjN!s˨j τ(4īAmÙej!̅5CJk'JP` g/"w6K+Sƕ(g}(^+)CWJ.Hƿ_%=%@Z͓v4)@\0T"3x)/|L" b%EƟc.9 Oql `o$}%qa,F̩/G]W72ONո`[@T+82h}{J? iX52&%'>&V*(XjW-1tu UJ>/4K6syt6_{ݶ×\%ΕFy9?@.tA5V-%VR:,0C777A\yMZ2SAݍe_/E$<Ăp7l3,)MCCrWuq1Fxrzm;#)Z+faj-|eO3'|4&1__0ZW7yM`XN掾vOFqdT#)e:} O4HX0)҆kh事?CSZwWE2m1 T[AIO S׮_ +vh(AʠGׯ򑊈l)c%8*Ԉ漈HYwͷy2!qZWx[ a=^l_4AS*)TgTT8"g%+ycٯa=|؉2b5`iQI?>\'jDsE[#qNKTg`boϾ1,0zȋk+1i5>L$RBݢ͋^>{K$A#%E5D9n/Kr8O!X0l\ Z'6Ak-00e9L73BYww~ 3YiZ(0&o5 %i@׆h>)hOec>Cwmb#29͜TΓHظehc5$ b(c:!eͨE4tďهa bK[r{c|?< *TC&! y `t>FZЮ@ endstream endobj 289 0 obj 4142 endobj 290 0 obj << /Type /Page /Parent 2469 0 R /Resources << /ColorSpace << /CS2 2479 0 R /CS3 2477 0 R >> /ExtGState << /GS2 2491 0 R /GS3 2490 0 R >> /Font << /TT3 2478 0 R /TT4 346 0 R /TT5 345 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 292 0 R /Thumb 2425 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 72 /Annots 291 0 R >> endobj 291 0 obj [ 386 0 R ] endobj 292 0 obj << /Filter /FlateDecode /Length 293 0 R >> stream 扠]ǻ^bo @ȿZGfȎTQ.UgىY"sd1Ֆ'b`g_.- 0vrZ\ѕ`3c8Q/1`%imQ tY ۼ$}Y*Q\d%Fxg87'_wd0Iƚ9G}BtB(ZW%C_bk ^P@}i9Q>>Z>c4tϢ-wZu 1ao>[taLbxF =]3jɇZy⹹'tO^sRX)Y*5ncH<:t*%!6?eA߈ýq(r0Dul-nw)՗F6n4QZRWsDu!XHSAЃeލp~h0{%OD᷒p7Mդbcz6.:Bj= d?|+`S]N5:Sr<9Yjǜ-ɮӚF1$ Z^u<ېhC!%ጜ[mwy^ek<1s[""ƺTLj5QCҼo ɣJ"_S[[ r:;/S0_VFmɵ5dD`TnfeճǍV,EǬ|ROhUc:vJYXď0hhO 2 pr#kgD$Kd0&̈:bxoUIH/{삐ِ3Mހ v|sr+DB);(!jd&i03(dQ&% ͆ҠFX˾ =EtÒuHEiS>0!C39U~ҤX/h$$N_l;;Y5i'^w%v ;v%ut⚔#j~6w%F̪qj<.IXp`]OŦ=uJ$xVP(CK t?Rs>N;r2th2Cʖ|4Yi4vP{ؘ/o"YdHIRJB%j2cq= ډ#J!3D=WDWV2f _ dwًhfv9Hq|ŶZ;{lqmv1bi JˏfPNvt% 䅛@:C)-Bz -Ӈc)@EG#~j`AlN?%eU:ODiILYgpgg 9:O{s^ BhҜajl~~90b ߾pk( '@y~`}#:ET;_R8C׈XFɠ.A4a> endobj 295 0 obj << /Type /Page /Parent 2469 0 R /Resources << /ColorSpace << /CS2 2479 0 R /CS3 2477 0 R >> /ExtGState << /GS2 2491 0 R /GS3 2490 0 R >> /Font << /TT2 2478 0 R /TT3 346 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 296 0 R /Thumb 2427 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 74 >> endobj 296 0 obj << /Filter /FlateDecode /Length 297 0 R >> stream WȻZzm-eoVhjSd//6?t8YeHsT(-1&ƖJ&28^6*{ƥ ~pG/b+z|JolċM@ژ="SblX(.fVeL2#1~-} D=2aT9cCW$M:nq e4X`th$*fݿUrwMuUZ2SK8'l-aHh6)V^'4Pp̚Fb!Ti+`a%5xB5u*,d8b,&hI&deO?gEEn:(4ʥyRd.,n:KtN?Uij#?xG7"w0a?hiko7$p:-Zp *v/'hL){F;]b;[(gׂ P C6R -Ye~=ZCO}&seCAQ*5$1Դ*Burg1aom'yYV=7dwoG;If'[v o<6('Vj0N_Q{t [gb^hyWE%%6 Ff Lqc"zGc&v#SsݺvM HӒR|z7ʾd%~Z7>Y5> z<;tZ*XLR5`/9'4W'W8.7j 䤳YmQʇ$[jDV>g!2Sb韧םpb&+-ac`5SӍG7WIrx"K F_)5Վ6x`RX1e'InGŌUnJ쇜P)1NBJ{-p5ʔH$5 /9]E23DjhX^&-"҉)Ӆ$6)Z%Jq??K7IBĆ3T޵WM_OUP} ,ލ}t/Bccs: Z:)jJ3Z;|ǚ[Vkc~~m1\Zųڌ́,<q~ÐM( q_x"]32K<bKN-Q'zZ&у ֛|2դrk:46hzy׶̯4Ml k)l}^_1ɮ8 . THc!JriDX{ƳgZu+Q4)2 7=s MņRe4 %dfr ެˊS UMCI}=7qJ`Ǘ&ʸIx Y@}aVl>EYa,\ :נ;X vuW%۱HLlANޱ8vn@7'!=PoxBzYyX$N(7F'2hZl:f3 IړLph~u TZVkҌ>_ZVthI`64վ mZ^T## 0p>t6TUHC4ռՃS.z3PR_f@[Z| B$3\ ]zJHKQVQ=c|?%UMYbVŎYۃ8+GB2y$6c|9Q > ݲLEY5$wuADce8*xșPYޭbW@Vn& ŶYu_|8p"wziu+@tt#LJ_ɜ =h֞FAQ"ixߡ#-?uaқ=3Mu)+(z Bѹ -ۅӬxl=TH!MB5C y$@rj{%XNs,*ON^ٖVT t~ ȐtE^& [!=Aiy˛pսZt&fi`{{ˋFȈ%jdC"M]㞬_/7 7lտIy<ᕪKu{ =CEX8&~> /ExtGState << /GS2 2491 0 R /GS3 2490 0 R >> /Font << /TT2 2478 0 R /TT3 346 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 299 0 R /Thumb 2429 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 75 >> endobj 299 0 obj << /Filter /FlateDecode /Length 300 0 R >> stream TusBNt6Ii*32?龵bM'sFNUH Ж/P#}]QnQ 5`uࣿ!4"@dfuhח>,RԢZޚ+$h@U@tV-Όp'ڵ4@^>7z v'8L0 rgqSkY 'CE#zi!xI9_z5%a>[TÒIq>#%xsJ;C=,,;!g~ʕUj]ōl y$\1Q[605E/,-1xqol>N.!ksObWaK!Z96k׃ 9hcNx̘Vj5*ƉG6\d SGH,.VR`n0ڈL⯧i/()02њoyFqdi(sr(9d4iI]EIaS9O20 h^T7?q%vbR~#|d'9=ȒHkɝ3}Eh.8K(ٺ?U&I߀cjS$Nv!OxPH'XQje(U'E[3ډbo<dхs٧7{lH;b-ZfK|ݣMg#̹d0b(4/:@`d+C$%WM7QsPE(|}8}c7ҿ̧5jWi-'<~o%S0Ej:KLB{:1qշ3p>dJ4QB0]6"QY/XS@xHEr(5PԀF$L=$JWTD̕ X7 m4Xnq/`Fm)p+Vt]ᄚv= E@Tͳ,'!q\ ]1u>*mJDr[q*u?_զc9>AtaP=dYsfqIoT@7y|ٖhG4eH" ̉,OC4TVV!] {,"8r>AA6񿇰Д bL\U7_Ytr߳:*K)b9Q zٴ6nveǶ~;|PیTƗ48P] Mv7^z1:pvyo̘Bqc,y5yXz(b ^aL!/c5c |R ~@u]P Ā~Us9DY溓nյj;aB:`Rh~!2c撓*E1W_ JO*xv_[CBN҄Td=iS&KN@-`2j"/dd]vw+ZX$m1&, %al#V)NP{OƌMF=lwh(2+73[#A>7r-w|]V:ӊOu Hry`>[7o'ѡ,?;C4T}| \DK-HJQ7^[9Havr+,}e)#27|%G˝n}Jwtf{&ϋ Uf-A.30' &@җE1RG= FPJϞ 8o#'r\ʿ[# zʶ骝,r- ;bKC0բl;\o!~ԱFh&a=&?BYץ@8|xsmJg45gv :(d4ŔS ҧuaGՏMu!?s'8u_WI*1 v WWjڋMa9^x[ኈZ>~Dҧu%5mPD`P|RcA6PS|[7Cñv44׵4GT!b}wϲ9TZwxGPT RH ._LP#*e[7XYO]~V(ߵ%a,LZsyY-RW0ћ`g7@uV௙'6 Q^2p*?$>fŮyJ%g-/⠫[@,3PG+ y%~pl:4ZE(i3;f R5sob_|軎N`ogRZI+B*_p @,?*N*.vY`78{ '|Ǚ)wРPJ8.u_fs/D'S&JL컷3z?!\0y #E]: ,MڟI.QeP(1oQa62?C5҄"7~> /ExtGState << /GS2 2491 0 R /GS3 2490 0 R >> /Font << /TT2 2478 0 R /TT3 346 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 302 0 R /Thumb 2431 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 76 >> endobj 302 0 obj << /Filter /FlateDecode /Length 303 0 R >> stream ӛi0%x@dfk}Spڽ'给ءk8߻\^.&?]+?X ){YR\kgmȓ7=j}QYNPLդ@QiqzW-400o8КDZ+0 ߝ@BO-w޺#Jh»1f.z9Ϗd@TƆNk;ᔾ3׋IX=qINVT2)fX%(c6_p7~򣐅wsl/>:!2W3'=(Q~40?dAKrCP~HF"NkEGq†2y QLC<`$j*8(boj/OP+P8١kR|TngI3yO;ɪR\6%9rWލOr]\3VՄo~&~Ԏ)nZn L&%8q_Bsv-_UAچʤb>^+#vئz33 RkW% 1QҬlaQEt؏Fp7h:|W_ >C p7ۉXk3rdb,hH Yބo談ݨ1Iy֩d CfH>? 124Nl&%Ĩ{'6UڛeIt¤tp(`zR` :We5t|GiC.a.G , 0{?7Pup2#I-ޥN7߭ P޻ endstream endobj 303 0 obj 874 endobj 304 0 obj << /Type /Page /Parent 2470 0 R /Resources << /ColorSpace << /CS2 2479 0 R /CS3 2477 0 R >> /ExtGState << /GS2 2491 0 R /GS3 2490 0 R >> /Font << /TT2 2478 0 R /TT3 346 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 305 0 R /Thumb 2433 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 77 >> endobj 305 0 obj << /Filter /FlateDecode /Length 306 0 R >> stream ANgYl Xg%r2Uj@Wm@g6*yUS5´0C k,"[,Ô::""[Ԉ++`RtwݳSxwTbJFtr$EkWBZmPe3QG_b ,*O&wm`tL!o&4PnDsw оEL#—*uB-F_5yQ( N:GS;nz`BId/ѓ Ё`玪}--Sd>'+Gl؜I@ԴMу9. !84񹯋M& CNpxO |_KwmO|"[8[6@>3N[1 R\ Fc舞r}o |sFX' d {f H` ^Ԛ1$-BTfJ"J;(XN;4JڟZ/GkYa&~-ǺSpo7(:y͖C_=DE!ޫ<\vxfh~#ß*l*!2; I\kFs 0d 9W_yb% p[w )W_߉= ELιHsDS/X\L{9?!v7=lbɯS[jk=ڂR^èqY8YDtG]_*oΨ ? +goJ[mh;t(Scc?غS^}yT[ި鈑@ X0 pfd܏Z"`L Q@bBb7](+ #i>X` ~ ]9}CMwY|_-1\UWz$R!ɊBj<tt8YAqt!wu AUyщ,*{ReGM=Dr pr=^G:Wd6|8E k/2%$) 8ߦSF`^%:vh=P0V=_,u:p47QEv5 &gMvbo*JfE`7I0 ?0'Wʊ>L endstream endobj 306 0 obj 2174 endobj 307 0 obj << /Type /Page /Parent 2470 0 R /Resources << /ColorSpace << /CS2 2479 0 R /CS3 2477 0 R >> /ExtGState << /GS2 2491 0 R /GS3 2490 0 R >> /Font << /TT2 2478 0 R /TT3 346 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 308 0 R /Thumb 2435 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 78 >> endobj 308 0 obj << /Filter /FlateDecode /Length 309 0 R >> stream 0\yg8 &ٓ&-HSy&Uhç bՒeI %n~)y7Gnt -2$Vor'L*r+ 8]`/sqg1׋<{@ Wx@(&@w jc2A*%YEg#+.3ˮ/TclTU:4@c$kl@U{f!@}k7:'"JxW}d+.`azF\P#-"c-o`)=sw䠷I&Jl4vW1<ϥ(8qN=&q?)C5K.ɹۿ1`a&WS8Vs^M xFʧgEv_=`FT߂lwsR~?~$Fy3W[0p.4e4A008Q$p.&h3m$,! )$!ܫ5l<.rb6I(4`YqXI1Y!dh,aXfLyklI+Jϔ~^4OjcAOG3< C3SvC(5EQjzlU*#nqO+QECF 4p򣫐-K1LyE̛4A2!*?}y`|r*s m:A1T^4mq|>?bx]ȗmNn)kbrM `M4NsN `ղ գ Zeef&5 GSm[aJC[RZ*d`תS* Wo?e$kUcCV5g^G,ql74LS%Q# kX:E#I2`=OrtZoxTo4ܺ7{yRa޷3c<{ijhNn/P#eX@ϰ(SE[dQ&Ղ+Mmj@D+euGUy0:6ΩUQ89 gڰIwLTG(DKxYQ!VfhAƁ>lΛ =ϖC >kl_a`no0J'w &jxeZfU c=21p^lQw,/ϵWaJBC{uzєc$*_8w 7-8J7M7D`7OfG[_Z0Fe'Z1'ԉ~;](k} lL|2˦ȰU=\{UP7tυ(ވ!}9[PϟJ!ɾVr^}H.EҠ.V.O#5*:qt'Jx *<ߋ8|Sg{DlUx6Ajwt#`(Wd-$v;,bPafJ+65:` Hc-F)2sBWǥak)ROs^ e"<ҰӖeC*/_f3OٚSK.4en0o s6Hd"o)HSgn ߉/SL=lS->egĒeT^caE1hݤdCSbFk*:c@m,ϺgmbWjzy~%-v]_$ۋrfko7K ZQ?8sUu@,#־$z1rJD Չ;`L]-b-e:ɴ4{-VG{E/{g HH sn5jB"}oameC72Ȃ%-J0609{MA0[B {ۋ&C،pV{5he/ ?q2' J}lŹ#=~]MU>gz]oņ։~X{H맇sP3Ka,@0G>z{XӸNihgz+o}uFΊf4f ^;]~krǴ@sJUpp RVL&\~Ya~(7Ԃy)!Oe9t6SMKn+!0Z@BcEG `k9'i{ Ni5HڔnގY!IdiF[_ A;K%͊ f i9)u;RI6XgNDI܎K Ȋrk1cCw$ m_SoʥJh!SuREȧTp^a2f`X3E+WYz%z?PJ (Y( u[sߏg?r`a endstream endobj 309 0 obj 2481 endobj 310 0 obj << /Type /Page /Parent 2470 0 R /Resources << /ColorSpace << /CS2 2479 0 R /CS3 2477 0 R >> /ExtGState << /GS2 2491 0 R /GS3 2490 0 R >> /Font << /TT3 2478 0 R /TT4 346 0 R /TT5 347 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 311 0 R /Thumb 2437 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 79 >> endobj 311 0 obj << /Filter /FlateDecode /Length 312 0 R >> stream q V)Mgjq ^>`2 Tm0ӴW”(Q~4x׽?ٳ м]ȇ{:FY<ͺ:}a_ Qq3|1ړGtPk׵UCpbux dEx}#Mf,5Kx*]Uްd%,5ٜ f"ʳ:/I#3@ETwR!sEV&ɂ24 Y6q(F b |KBB'G9ӺsOh̯MxˎC>]o&I950;@/j4vgQ9= ՞&C̴ Avqp% r[;yrhs2rh|l_ V=JUp*#r%@F"4*E܄GX: +NɠXLIp*D9J2[O,Q7=FVƻf4$\뵌RbBmQWxCwqrX^5C@ zq2ҹ@둰?n5$[>9sP=1P#RY=@_YBh1.ҩNqitr23bpͷa7-QkVVm5U]DŞkSo7+0IC x`+/j;;i1 588C֧fKgٲ`}TP$I s&V5~Ϩ3yjArY +n81X)l)q F<,=m61$­ҌUdffO72teಆ 3[Jx裐)OiYUKj'm ߫Hfo|P6O}^yb͞jU.<#<@ODŽ_' a zqq (ğs0ES<=U\`% 1MAY©wzRw`g'wՋe .ƅvUMYջȋ_B`,JG;Ԕq=q$X>a lE}2Y)}HUW>dM\TsBO endstream endobj 312 0 obj 2681 endobj 313 0 obj << /Type /Page /Parent 2470 0 R /Resources << /ColorSpace << /CS2 2479 0 R /CS3 2477 0 R >> /ExtGState << /GS2 2491 0 R /GS3 2490 0 R >> /Font << /TT3 2478 0 R /TT4 346 0 R /TT5 347 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 314 0 R /Thumb 2439 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 80 >> endobj 314 0 obj << /Filter /FlateDecode /Length 315 0 R >> stream ڢkr;J•E{)\ә·d>m MهAkf}{xn`ꪙQ%%fFR`jW'V7GG@c^/u#ԭ'3#V9%Îd֘F4e&"2M:j!xCW` o 87j?Dܥ;XskdpDͭ˦<Y0GOd 9(vډTQ$SGMdP@`QknUg=+wi$n`J5 v;c# NoԀ;+'>1fmX7zx^23Q2Qxhgsx$oD$,q;ם|c< 5--{'( 6H62B)t \<85UQ7HpGuG,{ggw0kd6d*!<4#p(hik|[͊Ev?YEOCƣ@juA_C=6$G?I;=v2 aX}u7E;(+@gյMQ1m㸎/u$UtFaQ\ԋ ~?nl1_DhvAg '^L_5t4緐ؔf Mc"5\H:$VThGfCX j=I^ϝRtP*_ܢC ,Ԟc9^*Vd4DZ +ŨtQӂKQc y4yĨ< Du_k0Cg.#G,깙%2|,U厨Ͻj~5eEI JAI>mz'*&.ld-k^g滵xzu*]2ܪŒ(0ؠq#DL4 LjņBo6)&*(%I/lUeAFyCd|O;E{>"j;0骁̼4c]&el`8*qna EiS|'@ͦĺ-\@RDrvid ?`ej@I'f}bky RIˈњ @(o:/x6myRp\o!Q ^.~w km< pqV]f*Exŵ6nẍ́wzE֮ Vqg;#߭zS/#wI0!61bGƸqč#mi+*.}ZYamC2 ͚(sl4&[gsdy<Lp_ ޤA,:r[3sC.Iӎb.19;xz4fB&Yg IT. Z 55d.7Y$(k6PgX91%Ziu@q{>*~|kTt}YVp}U?-ñYQ8)$dw^SFZivT:;OB- P b) Wl$12(H&[ tNidM0F_0 UNwٯ(nDjF'cDbWJNJIbxȁ\ `Yxe ir"a;A| ɇYoϱy4k(~֘Up]6m\Wzqƞhℴ@F,8Hl1e(kBxz* ;N}d&x9C!%wu⏺`M\2/N`ĨtodNNCݱp@&x܍!y -gkM7}Q?pSVʵEkHzu}z™'ONWRGw̠fs*`1{|xl"5;ۥ : HB%?5UcFnM^YHんTw#&DAH$p UL= ~05㩦.+0G79+B>tlV+v|>?˖s;ecQb(E;>y_b5"R_!R=PT+'Kj#..׈$ a3F[4S K"*zeb3 :BJ(_Dʖwd"|bXO=Gw:C>).;B"ѣș]gjUXw݁ZsMtlhTd<3@MVZFfZx$b\R@K_ <fٹ†Sj*ܽSq>9i;/_e irS1}X- *Rq% Iꎦr,2#U|D 2j 40A1`9DOgN;k3YMy;MY, M*VF!jr9Z^lb|E̗NtYdt7Qr9Qd@; ?}{e:!@-ɶbUP^VF 0Pxwj& C=+E! b{k5ȷEvؽz endstream endobj 315 0 obj 3511 endobj 316 0 obj << /Type /Page /Parent 2470 0 R /Resources << /ColorSpace << /CS2 2479 0 R /CS3 2477 0 R >> /ExtGState << /GS2 2491 0 R /GS3 2490 0 R >> /Font << /TT3 2478 0 R /TT4 346 0 R /TT5 347 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 317 0 R /Thumb 2441 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 81 >> endobj 317 0 obj << /Filter /FlateDecode /Length 318 0 R >> stream n7arpԗfyW[cH?/:@#%H pI.q\^*Rww`EJclAqAm*WɈhKp]By۳zs˴fto>xEC#XNђ鿍s%N㾕ffJ\EtH!? beQLF@ ɽ0pGUY QEw1 5a@! :w 8@"˘Jb}~'))F }*F*̜(RO`$%=6{>/;7 |BqcIY̑Yp;vE^Vel9o<vZ2=`HqNf -XvȻ|zҁA7:/j}0D(}kƜp_Sg{>f0%}LX!uL xE~nai 8R-fʚV3 qr}T0#>0i%|}a{>%ن(wgRÔW Lʾ7)9 }Xyfg#7%%rZt ڣ6˚OHHZ.1EžJNXf(DgDόTCf|'luDspz7=?b?7^}c%0&+r1$^PYV*uKj ~?=GCLazپOC2 Μ*"dRN6WȿMa䱡4Ha&!kokCSZ.ǣ0NHcgZ]p>oHuKucnV| fKS-1ߝ[6: +ֲB0^>J.1 dMIic^ʃWX% x[TAVsG\ˎNYg&r'N ֚ӛ]Qo]m.;n+FۿVY Wt*K17J8 &q(iB"菾Ak;!p&wqMWHmv~K!DjXT7xJtF &cMC!-}1ѐAXȪִƤdYK"׫o$>+<۱EHWTMV $ &6iAIڮ앹%{*_<Fş`X2(Ȱds='jN!BT=;Qkw֙sD)X?޺^*gq^Q,500p!axa1,MB+祐O* $Pkk{o6rVh •Tn s3WFp\Gt%3N7Id'F V1 weWîvx07\"5i+boR"hmzdI-nhyuVzQ!s|%gP>+Vd!5M2h]淚s&'"ľ2$}:*p1p1D⋀<1 d+zMI@zLh%КPh(mo 5 %%GoM' kp׈ϋŲcNȹ2*G7ag1=Q]Q_ΘKė۹ fa JCƔ`5cM-߼[TF5Mڕ6YǠ*@/M d)fbSZeɠWzB ;t'z㷮}ԕ ̱Q&ZqR84I~0fLfV> tbg FY\kЍ5R Tb10{*dL7Doa/Fvx} cb5j$d(D"L\K[=ݙ`TLAGwj5nujwD]( DˤiDhK5E!::l VPpI NP$0wbJ!OJ1&ǛnZ* q%I'buߤi0aޥ(w$CY{CUyehv΍A{PcmPILĤ[cwl|Q=n-Ϣ8xO3VG"opDf{>>GFx\ݣhf)ー* #;KN !{0SahKŲю~ eN@UwPR|ƪF]!^fQ JrFƟ3${:D/:Y?.6U>K *,t&\*cgˊp]+r>f#|=yVY -NNg涸&%pW2e" KeÈD y~ƉVz `|tʆϜ ))1aYa4l"a )tuEI9`[ ʳ)"ay3ݴАȞ^, yo#qZ*GP_n|찞Vb0x0p^ŒP%2 endstream endobj 318 0 obj 3535 endobj 319 0 obj << /Type /Page /Parent 2470 0 R /Resources << /ColorSpace << /CS2 2479 0 R /CS3 2477 0 R >> /ExtGState << /GS2 2491 0 R /GS3 2490 0 R >> /Font << /TT4 2478 0 R /TT5 346 0 R /TT6 347 0 R /TT7 345 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 320 0 R /Thumb 2443 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 82 >> endobj 320 0 obj << /Filter /FlateDecode /Length 321 0 R >> stream q JlTEg'Rrd@Tky<07_2aCu-=:I>cgstWe0j;ay+z<$KJ7N|wWJ7v H9VI2FGɡ"cनgB?ti| iHP4<oa&|)Mte9Ѳyc89b%5nJQyVN ~33`ٱFuh*d;Ϳ.έRiKf1@ѭ y?e.ĉ Dݘof2H3kY6WUJ%jEɩ\tW3[TW=g])Ljb0]waԾaҜ(1N3,; tkZ*tJD9]3+(fgaeh#k%F$y ^oMx9"/+; 1Pd)t450e>mD2 Tk_woYT/Z~HpG׽&Z&+Ѹ룒Q;qwhc ,xSr1[ 9&4WWyGZڲM[!nFlG'C`=X*tbu<_=HG?gR4// uRX`L}ԒC}>F즎NS_=6|U?.r83ZMriwC R {~]/y. (x;~ WGixkΈ#qU Ox۩Ab>R|!T?o Ik_s$% j7ղ9Blmm Ogk/~wR袔t9-~Fq%ؒ# z԰U=O6"/BbTqywjpS8wdIi,~%d m"Gži q O#WM9CJtl 2.!T֥iֽ857ci }_ @@V4\G$`eRPDTT5Z2eQ]x=p[˻ΔK2dZ .kPv ,_X43tkϋȱT؄5;( vL-u0_@ɰ(ixP7 (ٲesTI%#fO!ۗNpx e~`7Xx-#wVߞ-]ʠe%?:<iY'Qs}aۤUKtI"QGμAf90g2 &VBX&Hy+7@g;İYWȏ)+ج1k\:Wч:myjM-}vb7CUbf$#7 @T N=(*D:y2{C},'>[̋:OPu ē&$EGĘƶ%fjp񱻔.D KtI=ÐSE(~\1v~A =mX!Th  $zz0@wC ÿ % ޭ+,||RX$~s6.{z#<oU3Ye/[m:ۊ\ųtue :a\"|hz'㡀K;yoGL;)|Ӽa|@Eo39Jy@.vTj` vc~ n ē8x|;DPmX{ys5> /4A Q<v/{<1WcYBr}67 3=2\,!m yƞhq%@NMIRULsF;& X1PUi(<9mKkh6]A.Њ;N N#vݛQMIom0{t&sY2v"E2cAQ[ KU3P4?^7(l͡ΨgPd2^=YTH'tNc݇NdYޫb?߈.c2O`\H*e~Q%^EB2^8 +7ܗG\1 NVpf endstream endobj 321 0 obj 2698 endobj 322 0 obj << /Type /Page /Parent 2470 0 R /Resources << /ColorSpace << /CS2 2479 0 R /CS3 2477 0 R >> /ExtGState << /GS2 2491 0 R /GS3 2490 0 R >> /Font << /TT2 2478 0 R /TT3 346 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 323 0 R /Thumb 2445 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 83 >> endobj 323 0 obj << /Filter /FlateDecode /Length 324 0 R >> stream =C[qT;V.Wqij@{03x3"oHdoS@_~l '@jGdӲ0rWP܄GM!ʞ<^Tdzl burh`2Ae:4GJxpIIWGɻ}OMG0LX5H:nLEOHzq#x"|mj AmXJԷlC.'ScE5҄jubIjr&`Z,<)KL>mm(@VyyF}uGwFs @ H7BGPXzWRbly>lzQnwlc.!ɗIώbQ3VfM)TʌwvAZ_ 8|͚4zm҉#$6c/ܓɵSr+x2"z^Kt/vʩ͞ip\sx?9Bʔ|$b)}?E=] $w9"lϠVQ)(60`jҍcc'cBQsK$w-)_V j]D9 # TVdWe n/e)ǜ2LWҟ'dփvB cr<௭7qc%_/C*kO.xA } 1FGM@PFMFE o[3_|^J:[2S>J69l!B_hZb3lA8JUz% KL}wAF TF%A5¶lۂO Z D"sO VFԅ*Ȳ&VF@Y6_DR\&A3WQ#c~\g> /ExtGState << /GS2 2491 0 R /GS3 2490 0 R >> /Font << /TT2 2478 0 R /TT3 345 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 327 0 R /Thumb 2447 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 84 /Annots 326 0 R >> endobj 326 0 obj [ 387 0 R ] endobj 327 0 obj << /Filter /FlateDecode /Length 328 0 R >> stream Py3l/-'S.qH/؍l=x;KҲ]1\ A[N Ng~" x65${ FbP TygC]߾d6Ic:0UI>t#FAF8%Yp1u}CC>$R=eFnx#ϣ)'v`J!JH7ńV왊SzÞ+'/QЉȨ.X.w~xmA$Z 'o"$yO ^ ܲ8) JsP 켼{DO OY\bS㏌mRHXb4殮ӏ,'Ksiz.4r# k"LQ(l(t$dc=&Cڙ`IioASFQ3do`nUB\9L܇IH/|Qs5yL*xjK9hcK]s=P8s+>5n.T3YU{[I!q?4J²"Vwbw] YBGjXuHDtH)Cim"Ð~۹ݾHB-}|ƤyD'=3͜r iTswyఫ#?,^{a/niޘ`Ü|6J#=Z^4Î".LB7~w-Kh)Շ%C;RuXp{it^+SZh<aV{Ό5a&73g7t0xFKu{ȚM,_4|c`Qk(T,qtu*wI+oAOvu qdl7J9_¾&z̖k-ŨŶMگt}=7; endstream endobj 328 0 obj 1017 endobj 329 0 obj << /Type /Page /Parent 2470 0 R /Resources << /ColorSpace << /CS2 2479 0 R /CS3 2477 0 R >> /ExtGState << /GS2 2491 0 R /GS3 2490 0 R >> /Font << /TT2 2478 0 R /TT3 345 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 331 0 R /Thumb 2449 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 86 /Annots 330 0 R >> endobj 330 0 obj [ 389 0 R 391 0 R ] endobj 331 0 obj << /Filter /FlateDecode /Length 332 0 R >> stream JPggW0 }if [̉7K Q' {שE7DFlqlJ΋,8^op2VET.V&0iE~srhܙ\Q rSڷMcyi蔪-qܓtb.| ] g̼Bm(Yw+j+hK;-{HwU 18Pi:r:.EuIɭW.Y7Yw y(7R6.Y`GI봃 s\?{ Kjw g`!Zw8j$5Gqy5D+ X"j X`#XB@B́Hm mV v=i&cŁyM Y&VID2"0F%Hzpf[qIdN>GUNͲ(,h`؃̶5~=\HjTq~4ۗ9[R\ z6ÚbĬ ~oTyKUd9+HSxg&K@L~7::kDhE9iܧMcx{4Pm}ZLVx>j%sf{@1V*-Hv]CV8Otq&}h"04\Jߥ0#L^V>[v'E|~é%@{9X@()>1aI(lu.ʱl9zk&y-<7i_U1?*l`znb.)5:qx[{RGśbjbざ5Tk^L8jH7I:\}=+>m%weU7Ex"dԏG>׋@]_J+L8Q&7l UG߱1YjYMr{&);1|)H㙶ܧ:Ƒ &SYxJ1[qZWk}P.o!V4fb=Zl Q\pdBL}۾z"p2-ڃs,38 9pP]qV>4w.n-#.D9%㉴P0R#)䃬C_ Q E[3|}PTsL}!aЕ endstream endobj 332 0 obj 2194 endobj 333 0 obj << /Type /Page /Parent 2471 0 R /Resources << /ColorSpace << /CS2 2479 0 R /CS3 2477 0 R >> /ExtGState << /GS2 2491 0 R /GS3 2490 0 R >> /Font << /TT3 2478 0 R /TT4 2483 0 R /TT5 345 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 335 0 R /Thumb 2451 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 89 /Annots 334 0 R >> endobj 334 0 obj [ 393 0 R ] endobj 335 0 obj << /Filter /FlateDecode /Length 336 0 R >> stream >.3_KwDZ!k57k9 xrNT+la "q98Qw_⼝^$ک _&QjӸDdwC}xӍ<䷙p٩1;nh\RA}Ma?9l K5GcZ-[]ߖ7>Dh"_,m>!f@gE"@}y}}>O5K}CmЋܯw* P,dLjHzqm2ּ~p9h@罚O`\Y3]YK<ǖ3߀M 'U5c f;*̋+z"i>y9}۳~=? 9?sUp&GyD'u;悡WWm^8ǰUV!YH&C 9IX TTޢ2A}.Gu1xe IxT&!.o.1)R (8a̤aRځ<{X,Y  \^f;V[g++sZЍfRHbQ~);&;\QS.#<IƎPM۸;I=&.hrS(y*UPQ Oc'=v7+ϔb/׬>pp|DA3- "Zm]XtY-`_/[ŰP۹ZK浇D;\ d@m9(". Ha2@9šC~246Y̓}\k!IgZ-n7hS(7V֬j;l| ;"[AL{p!K[6LMIO|.Ped(nfڈ4q;Y)X D]ַyV0iBv(Xp:\ud,(ڮa6+fNuUŒQpKF ~5] =zL.rzRTϚ!jEHu"@I}LYD"fP,d"LD :9$)bjũG+yn ̀s/7kasZ}E(038灏C8k=k>9>L*jdaE:,ޙXxt_\r}=n>jC)G+4DQ+hp<-? ahGT*Q֦"΃L+c [yS?%a!/]6͞5 %fT@'i62 L ȱ<[۵T/D=}a5%T_Ni4TeB Y-c+E&P4 V٘DUrfMi~J=tAc)ULz4d6q[t? @ZU%}l1b-uz^|m?B4 G*aO:/?(&pZ>[Gk/r2Ee~Cꠛ[%G<YIGE%g] <yd8U[ h|u1 toc^JF(J[xFo^L"m~,,߼I-աjfnOK՗f$qIdۇ)ϩZڰ`g(6.;:,:h 1CCD )r) s@Njy`^w yĻ{Id8i!`.Aݺ&̀4ikFOjzoǃ*ug@*D?i(⶘kz fӮG1Ұ% _VBQԂj΁@NT`aF 7M8yi; 6r:Ƃj}BNRHA>5-?GZ0$h?p BVYmXV+KM|Kgpϖ ;n#8[wTanH'[nBD|AK@brdA7fJν&;.h&G_S~h Zc~44{Jd(~Ot&#zL?kjE ;lHa /uk!W^ .v*MN^'xtMƗ$t-a!)"9}fө$H ic:wC ,8rvX vYjJ$|?ql oc-|fRkb'bj!Ft"rnJ\{-~2gaI ü$Kоm‚ׂ;6. CBmяq #MKLԬdMWcgHʃ9to&>m:q)Q]<Dm`TaklnGW!("|D woL^j嫾<ȴEa[+a؜~| }e-U&R!C~^%h-`栅'^S@uE;Q3 u^yŵO fLMRbLuh\]UCE RrH'YEḟ(hMh{;SZ鶬HGvs2(su;K>;2AI*|}6FT>6!ݶ88> /ExtGState << /GS2 2491 0 R /GS3 2490 0 R >> /Font << /TT2 2478 0 R /TT3 2483 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 338 0 R /Thumb 2453 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 91 >> endobj 338 0 obj << /Filter /FlateDecode /Length 339 0 R >> stream 28Ȣ@äu<$8I:)k-VFjT}Ce;h˟ˀP-IɤZH}5U>N,3IA"P2IhL$@W4xooOY.'+pU?pb_uk0xrߖqYĤiltT7C)9fݼ+A ]K1.x)/zkMEz%/e|9`ym*b}<4!\caJޥ%fФGl%#rk*Au5-%tO*SMķ0RbPHxd!~='"F^c +܂Z. Lc)&:LkXOԌyezt.}hS΀hV<K] ɔ[ݔ~qc;tzSx ;}ja-Zdu Iɱ ؝|.˛w#%DQ``"65\xͅ-J)C7l >,qtXf/)s>ϡ۝L<-( ap~:n` KcŐ+ZJxqa+|brፌR[K嶏{靺02R-D%iٞ0ʿfٶnOˆ;݀1Qmfqy5&ZCdBYEd?&͓wQlgYsFʠLb_]:}ߋc˨],Pj<\^ʟbk9Fyh{M#- )|3"~B́~@p$(^ d2Lv_2#8YVN:7XTV\;?QJ usl$ 'UlGFu9ffXxs4vTayj܁tT#Ɍ#.hL+YmĔm:rm" ^ 8 =1n8Ro>aŠ$G@Fbsm[1oO֘c`HP/#Q^ b#PYriʋg L2)"xID'LŀVļ;+WaoNW$bBVL @"Y&$,b? 4;&1 *Gjud`i Ny#(k&ʛ*6M[a %Kw,G>P,ç6xPtkOVL˜-];s&EF+ IZ朒!6Tk|>(7iuV:)JsJ#0qQ6R26?-C|PǞKFQ v@<7aq|cF0ەՐWa c:!>AwUsϼ 5bSk[{sc~Wޣ /LSq/Ri*?FƐ\s^dytwUJH.3!NdyE{b2S D">;v0Cg@9RgYM+_P?ZJ6c‡LRW AC<^ EVEel!Zt?ufsHo (:WCgMU yw.8}C!O~$9U+'i$=4T S1]Z7q_^Z.Ul`[b&bӴS Ep7Sy>>]~=5(~'Luu]b8 EV3]tR 7>CvEoz)Դ1k>f q#}а@Bq~@pC/,Z VӢo2:)rsw  - GnoJw - 5n|$}|Bʢ[Yӓ{+^>IItց˒VfKͮ++EL _]t\ $'Cߋ :S[േ~Ydbw%ڲ(gyݏI1-<}~&()m몹V4Xb?\ f~ 2,C' '9xIӔNgD*!PQk GK;aɐIʪ3kN}>'΅~@DF˙LX'LzK=iX*k"m6M"sp. m_ͺ,,5d+ׅQKK30/O`,-x  i%䚰˧+aA(3:FeKtեja" r !-N,3lW C߸Ws}$XmxL:ȚXNt/cy=gZ >EGQIݞոo9A!_˩}CuBpT<;ؔܿRQ GC- lQF-TG.6uIK(hLslڑ6`-02i[H, 70ypg^9QV,at0^'ja3  `"rԄT^wV{Y[weq)DZT#L1\'*r-k\Pڒ%" It #:u*2NLa@E_TCx&w=4 B74)sNdW*n3룐LBHIA?pQ 958,Ş_:zwԏ@oYNdSӤ+Sȴp)m}[`Lpz-n[4b 繿MZ;Gi4uwH-{z xTBmK{vrCmb}lubш~f:ce|hgDg[3p<mTjf"hmx]]X+2wVSe6`0Rq؛'c܈PMݪ!8B4zи OKF8%wڐ&\,쇞nECη CQ4K^"b}m^&h K@^WkN3ӽ233$Iȫ8[c{ endstream endobj 339 0 obj 4268 endobj 340 0 obj << /Type /Page /Parent 2471 0 R /Resources << /ColorSpace << /CS0 2479 0 R /CS1 2477 0 R >> /ExtGState << /GS0 2491 0 R /GS1 2490 0 R >> /Font << /TT0 2478 0 R /TT1 2483 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 341 0 R /Thumb 2455 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 92 >> endobj 341 0 obj << /Filter /FlateDecode /Length 342 0 R >> stream УtWMjxxma `P`*o5U44RBݫB ԝj}9+"iP!)fhE|vSA6WA%-Ù>}Me- '9FaKo,WKCI%$xPZ3oD\bvJ==4/o#N;_*ƏK?<7^O@Lx>N9X3zwJwT2{9}(>7t4xEr;wUAD6;vVl!rEbr~w]vpk~Œ')+[Gck?Ehj9aɀEi_޼>XmQQ69jOq4Mr-% Gvb>TS_X ˩'WZD[MΨîZ9aAHEp{ޙ99sد Y7 Ev;dT['X|j@tb`&~ үWZ5.T'*C?]D Vg*r),pᦵLF͸:8Xw3뉀u/!Bp[zH3T9r­P psA9Û=uw텚K%#TE!ȭJėqIZ'ǘOw](  o҄33Zc h$d]DŽ-AoÕF@C7,a+Mr413g0^~7z0pR8O$ro':RDOPn20-u_+;loCTga!nS,(Ag>X,?!O0۲-/R endstream endobj 342 0 obj 927 endobj 343 0 obj << /Type /Font /Subtype /Type0 /BaseFont /HLMBFO+SymbolMT /Encoding /Identity-H /DescendantFonts [ 358 0 R ] /ToUnicode 359 0 R >> endobj 344 0 obj << /Type /Font /Subtype /TrueType /FirstChar 32 /LastChar 32 /Widths [ 250 ] /Encoding /WinAnsiEncoding /BaseFont /HLMBIA+TimesNewRoman /FontDescriptor 350 0 R >> endobj 345 0 obj << /Type /Font /Subtype /TrueType /FirstChar 32 /LastChar 122 /Widths [ 274 0 0 0 0 0 0 0 0 0 0 0 274 326 274 0 549 549 549 549 0 0 549 0 549 0 0 0 0 0 0 0 1000 593 0 641 741 475 454 720 0 282 282 0 440 854 734 808 521 808 556 479 491 727 0 0 0 0 0 0 0 0 0 0 0 470 560 458 560 486 280 468 560 245 0 485 248 877 560 558 560 0 331 387 317 560 444 743 450 444 464 ] /Encoding /WinAnsiEncoding /BaseFont /HLMBNA+ZapfHumanist601BT-DemiItalic /FontDescriptor 352 0 R >> endobj 346 0 obj << /Type /Font /Subtype /TrueType /FirstChar 32 /LastChar 150 /Widths [ 600 600 600 600 0 600 0 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 0 600 0 600 600 600 600 600 600 600 600 600 600 600 600 600 600 0 600 600 600 600 600 600 600 600 600 600 600 600 0 600 0 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 0 600 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 600 ] /Encoding /WinAnsiEncoding /BaseFont /HLMBOB+CourierNew /FontDescriptor 354 0 R >> endobj 347 0 obj << /Type /Font /Subtype /TrueType /FirstChar 40 /LastChar 121 /Widths [ 600 600 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 600 600 600 600 0 600 0 0 0 0 0 0 600 0 600 0 0 0 600 600 0 0 0 0 0 0 0 0 0 0 600 0 600 600 600 600 600 0 0 0 600 0 600 600 600 600 600 600 0 600 600 600 600 0 600 0 600 ] /Encoding /WinAnsiEncoding /BaseFont /HLMGOF+CourierNewPS-BoldMT /FontDescriptor 356 0 R >> endobj 348 0 obj << /Type /FontDescriptor /Ascent 1005 /CapHeight 0 /Descent -219 /Flags 4 /FontBBox [ 0 -220 1113 1005 ] /FontName /HLMBFO+SymbolMT /ItalicAngle 0 /StemV 0 /FontFile2 349 0 R >> endobj 349 0 obj << /Filter /FlateDecode /Length 6921 /Length1 10652 >> stream 츁ApN[!BS4Orغ"^dЪ5 VRo) Rr瑩h-iFLir8 0uً:cCcnIHs'q <>6Iݧe}!z<(&~z$<ً@d(,Le%E𝶜+82d3F 5d- |U6Z(Bʓ5(r*tE~rs"u)uG zx3Ѩ\=˂0gs0DFK]#EL+ǿ-$PW=OdH4tv$k_bqx^0n_[iX@$GT z. d)ټf*7kÃ#g NbU=uև4ƉU9Ϥ2TS@h^O vyOML]1>fG6ANLq׮Aـ!~X~8INg n0*iUdMy0*)Bu]).@U<.XcP$Ѡ\)XЌXzL I#e4?\nוbԽJv?5iVX2b9p{?kmC9U 3mMm-%u#gI?[s:3ϥNF(Ù2 Yi஻|d⪷3ENJWFJL˱[1ˎp_[cGvV17&ma`on/7d:PS~l3j~o]f07lt[&p?vOLCB08XEweL6D1z `2'M1rU{#G5Qi5DŽX~1$nyerA"`E e9Y>A^,xR,@] h [EIdZdp.*Xu|b[j 92`AfCLQ;aqjMhlC@mQ1K1{:KvSw{S`j@;ÅjG1 ߵ+0.ڒ>w4 !}tcUj!E`uE#i_@Au*?|'#".zF@rbt8:y`3} C;.1{Ӊ }SQJg.|+O)6\v)+'|_V;{9"#1Ї|^tC.r!fiP¤U.1%"˩[)5 :[Arx2XuS倱vp,F 8Zqzf2NcxrK_e;[Wv[DQ_aGB|;d,]RzI>LcAPF-򘅤]!K/ěPқH"pI9Αg&~j[:^cƪHRѼ]LӾp2b<@ޟQM%LȚi Lˏwz/M4<'p5<)ɼ 5Oc[6MUhɯЭOg1vK*@lI?KEl0^S0/@-M I dh i,5Ks @jo^<2 q^4Y $g-}Z")-V7 Q8!sڡlAl' ߶kcg=16d.כK2""]TDxLV7N^*F 7UMܾJ\0 ި܌]棸#I.D)5! /ђwQ(Q@pU2%]#gt(^Ƒ?lj~DNBu6gT.A eͼqUƺpN-@XA-3LP-S<<^~˹MVlJ#zIaiPځFڴN,pp؂@ `c)Y-(7x:dVޖ+;,olSKյ2f/@" ֬,`ϗx`F3C 2ϕ<Ԟ}.-DcȒ7 g*k)T$ͣ{xrܹ`B%w^IrTY :`HV7]LF^[5铦gI7t8&U  @;nS,qCx*fA=; 1;^ sgl\C |Jc$`ߠP.ʕdGpFuDeFP (R^B-O8pk6v^'Pzz-DMNjlT7AA44] Jxpm q`=QOud+ s5 1zUK aeqh:^^7Hi2}\Uت]D!)GiRJؼ=~`wY'Vlӥs5}saR^mH- qF}X; t+:-A2}k#k 3:|o{bb?0d<2#}3R'X9㒷G=5Ѳ}tΉKlȡ9&\(g~GO6SCx|.T_}"5tGaXR^"{QqWJzwa%gPcj+ e|~dK2IbG98D@WW.Ac93f.vԻdT{ +˖|S= w 4)0/_]g;,7kAE7|w` .CDF>;Hi_9N'ngi+\HEmG2A$)/_r ~Gb؛yg!]J&zkr` bg&4['ID}.hDx:}ȍ%wm([˴FeRL¿\S ٕȶg9lsC Zƨcp˷' 'r%&/OoAvbo <0z<3Ⲷ#fjeb>Ľm+y2O@E3ccݭ;DГ]4ZGS'Hb8-L"4ϣߘR[ cIqsq͈7;6CL%+8s=C|2L1m,5Ku$=?K?~7 0z:@.3pBac$iUYl̘i7/y='#Vi7Edեve,I)'8>%MYC ˃,]7^슎XkζLίFL9N+j+i&|Ku ҬYvx/cI=b#, z|Sp"!\Mqכ-6jN&.UGɋ4cVJD5u{/Pt5h_JD궒@504lw믽Kg }BݺWͣK4s y2o{KAP"Q"itZ%DOHI;ҿ 6Sg l=q֭qp8ŧ8!Ҋ> endobj 351 0 obj << /Filter /FlateDecode /Length 8102 /Length1 22064 >> stream krRh9QVl'YOI~uam%FLF>[R`Zo4^_ ,zsGx]Q4SSܖ$lgbuۑt c t}ަ_US2luE|6Aѯ>SHsGC(2]=sefExv3J߹իĹVR0p/ʋ"8)A/ZfQuS18e |~"m2^9B)ܰfTEksrcəutg%)%s_# M;{j[= *]6){K`4h\GC]Tl't- 4ߤpQw< o[OѐNYxZ b2fGiGPE{Dr8Jm@*r`狻4^1 ]a ._?"\kqV&H e_}6w֍q'ޥ &m{S "R]]sE`dCd2=27R6qf@Î2rT0!+<9>NbZkXL/Y \Xnȍe"c> {zS3lޑf41?kq(4a8Qw (XYkޔP|۩ y5z$nMۑR[\}4;I#㨬]u1€YlpP@&9V5 BiK /g\_`S6 w G!V'\``(2eӧb~Rj5t~@{XRf{q?I:֠{` H :ٚ#iB(M݂X&E<ׄJ ƚq1)0~W 6- zArr5Ճ Q /ZN\: z/4)I> \/Qr{<]Pײтe\,5J-!bCB&7v<9\yN:>$KeW~Z5 ftA8(<6Aq p<֍\L?( ..-gvʍWzW 4+OUkpUGuG"@CQX\Lq d'J*`]&TOix $\7ʛ-r~a +ՙYW8!.es-U)8;q*w2b0wa{8#\s#!9!{[AE=IujSp>ɖA6b: C὎z8懏hOψ(C$jGS MoOy&dbZ1=x/Oeٺv"3PR8)}JUh]dhv /Ix?+F6yݬ2j1r) d[{ZM93bF}lLh']t)kgٞImTX3o ZQ-X7ygIy9]> a,BE^T;r&\^j${lTܼƤ=a2-t0 *#wݙg2eA㐋rO&PyBѳlbw6=w#þ7GAL}66Z":;QRC:myްEp䏯F޽dub-aJρoi?1S[ U~͎yڮ/a' =ފ~0&`z%C!Ԗ/(a4PuP җ·%gV9v߱Gl~g3vȻRm4eL_jI"b8ل2>OAZDZ }=!M6ܢڃ9hߥߝQuo{nfY;~Q&9(޺hf~K_ /kҾ@uo[E:h,m?Hl/'Ze@c0BŒG t5L37-pe4F5N MC@T+`zVpP%|S`)޼R/SNmCoId6܏j'5f4sAI(_e49~~^}9FOraR/Iakn"^Zz~oqm}ѺtkBc?D^iNbqP/kmfw?#VDJL% Y$ҡ)$_Y aA>OC>:a K)on@CPr!&H=GiηB5h+އ(FwG+ՆޓY4!el#TEMb`i>]L#$w_2z4xQm5 `n8{!= sL NIIJz)+/N_R1~H{BcLH1߷qi`2i# [W/ r+Z@ zi\Q Pi4)U"y_~L`K%yYC&Fk3 !s$"Wҵ] ƀl.|n%pDX$ <*[n|E,o*YҘGTfW7a8 Z9]Lɵ#M $&Ĭ![9?:61P*#5R媨j Id\#;vg&QV5)0c4P$8)"xKe ,`H)1O ץjJfuH FZ$SxV~eEҁ^i=NZa px`>𸪛jkYP j 'mvw(Ⱦ:V#&+WɈuB{9 ۹062ah )臶gb yTdHUr#;?[ŌofhWӊ RDW4C)?$,<̻ :&ëZ<)0jN4iT-B^/i/o*S:Zvːԧ_[ 46 <b_#0c|)6]+,X:_5ؚ%P^q UK"*%Jy/8Z~ ^ U0!8?JѬgF.Wlr׏7 v M?Z_ = lGDs/=D@nSmu#A4l@"&R1;;lh RQT}>]M2?ORTsbs}wS`GnCRaLxξM@js4!+Wj|WXyj(N9Y~@~' 8c[ xK@I[)ɟ8e(6i'qRa0W<$`%J%s< ɋpp2UVrqi^~+.c _SxL<\Z.uו1$•Ց4yĮ}00,> {yP4. a.M> >Ӹjv@}u<%:24(_ͅ@ú~.?W\Mj8('V?TT`x3Hp*_6u;pwF'?Ӟǩl`װز-C?p^(! m*^U9Vquܷ$8)Œ=-^ډ/vڌdz BRXlc=(]`h#VGh03[;H)Io@'T/ ۝@&T%Q2.X\uo@*Js+v1`zt5Ӵ>w&ǜϼYaRR|S~9)6 /hIR?cq8PEݹǢ]b?CHHÚ;lԹ4Xߎq"lQ"tuWκ٬BZw \hE zv:>yjN[J =s+zyRxhr/2, )yP^-ގ"zYw_`T?JKxQdŌC;#ڑ C0pdv sd*-@ԛLTBX5R1D|w+ ݆S5˽CZ=ήG"l~#HA2c] 涄:hr8Rp'HL8R(cv Ǩ+^*YGt(OnZ [D37Et8Ea{͝b+ZM?NҀ  `ːs+RmT&w$PͤA!t?!A]/Πx)n{M@NlpX5δ|v2K ,P(ut۠$'~铡ĝ`ޡbq/kI5NMvPb9?0 FFY,YS)ܥ a8o|]k[Bn.#icbHn+16ttYo*x%BqG><#E1.A'e%g˟y%rS/gics}6TƇˑ*ߥٹ/.W4xq™Lp =@wڥA# @6&bn[!d?{:|_~v9[4^Һ,8y^S9\A,Ē( c|C 4YzeQ"M١56WUk p:w/s^"K ̐M Dl/sz2nU*k~+!6/$ Dp9H~f"ݷ~ SvF9ߠaD*GN|KE8m4ǬqD&[pP&zZZ -a(_Nl@ '| HdH! %.]f!ϐ^ Ǧ~B0rq^58uJ^S' uY=-#WD3= ag%-D)8f6Ld?P68y M|+FhZK<Xe<,9DďjX#I]W/AGL=,#,g+T\qP)TUU/d%Jp?y_De7r7O˽V"sڒR/pEK: xgY?4v( tߢy쮄9F0u}9ƸRb!؜pxKװ>Y!)qpov.i=qŏ0W5o! ؃(1L@ʚg vV]In!xn[i: XCWxfXy\so*D*C:^L%ΕW$&ǟcs?_',ܲ7 ۣu3$]M]wN(qмvIw57 ]^a)Xд}ƴi%9N6zʸmz#*?[ X>BSsXNfϊm[ 'Omo eb`.d<2j YanRBA"pzh="!$N88r4}1c F2 9!.L԰L$8;_[ʴ4` *nusyTtDOn@{Vh #+NְʈS|Հ}i;F9WPW"]8: @Z#Xa˶J}3Plб"vt%J-#*X#BL>meE c!S%eO]+{O*b;Q{jOa@ŇtlJB V c r5ܠB7r#b*7\ |[m h(S%`K n AIz!Cq,C N?^co8W9kü1僬Ovxގ NUEoY/DظDw2ͯգTzZQlrpBe/X#݉ mݮMeo%Xb[;.E߱FԥFQہMI*#%])&]d&X R?bZ^ endstream endobj 352 0 obj << /Type /FontDescriptor /Ascent 962 /CapHeight 687 /Descent -274 /Flags 96 /FontBBox [ -218 -275 1112 963 ] /FontName /HLMBNA+ZapfHumanist601BT-DemiItalic /ItalicAngle -15 /StemV 85.39799 /XHeight 0 /FontFile2 353 0 R >> endobj 353 0 obj << /Filter /FlateDecode /Length 11244 /Length1 16520 >> stream 74k]I#6zQ Ez4\p蒴&\OpI6S̎ j^0X7˼Ifqie[͆< lҨL2n)!)) ĸr (|ÿ\<ͬn \+z72~xO=ڥ/D?Z??cS 9QT '[[%3<**`# "6tɯx أ v%Ÿ;ڌ4f(QܴڒlUL6X9r'l.nJ=+r7RQaI%{ /4{:)T5r]!e0a?=JthŬR2@\٣VYo[< sSSӠGJJBY g bl$;gHwͣv7Aok9] MdYv_mgg(9o3]y:qY߶P$oasCTaMiҧ}d"φӉ.OzgUH}^WihË\nfM:-XBtQ+D^t1ip \v65tyi(+ +jVD;uPb|al4=O1F) sH4-M&@sew3d|.=n8mӽ9(QEƩ֦Y v`*OJCKK@+4Lu^*zAXcUPK@W`/2M|6:r(Hw9>kGj2L;}yRh;J-)q?e=gm!AـW7b zc_շ 6 *i- 7nqM Obe}[A@BӅkeZldF`6 s` al<+QidE_=ȶs7OeEۻE0ѽV /!zvӗ^=g Lb(m łNai#6B38dسFͿ!=84 [ě׏.0PfF2NJuqclȍ3%A%Wl7@ɓbܹvXg_ @vR0IA]Da'DU׮L CcxHv-i|kM-w?]X.7: woP{ݳ>UG8b!c8g`spٸqJ<t%ׅd/K(]&4]'$bxMqOftm:0ּz-X@޽(ݤApy+Ҹ B@[D{(PUS=*yYZ&Wc _%Hsx=2:' k)q2^u:d`.ʃ.4 *=H-H%O ~9uD62`QF _^8ʐ"".%(<)ۛUv`2a~P ԊBe:$Z?9+2pۏt&@eD)AAWZHٓx} ZJ,c7D~pnĶ3r~s4K܄{VT]wkP͛Nӈ+ۨS3Tlgڌ=ӏBUMY:Uet-~ '!XGxwZ"r4סR_F~:}YT{_O;~%i1%P3qg ⑶.Q/{OӢHm,ˇagMiص8ER6j2ո(UvEPO~Jpdm?.$ 0f,3>XKlwdt3yxlW꼗>s mH u⧀s W29;j+Pvѩ3z@C"J|^`j|Q xQ vϤ8Za9NAP4] 즾̯ D7d /};k4aq  .s) SaRi'*"9*1DqI\40>2rprzn*oPJJ7pZ04[Q"ar^"^x;KNiyH&&t^mRo^ٚ4ԕma3M mA"7E.x_gho8>Gt} = N2ժ&FxE,{b ~Uҧ鞄H37jkSj0$ngۤkxr2.i]oL\W_ѼRkW"r y9=2i荣)y iePdr| fRm*2~N+W&IO,d-6TqeЯ7fJ`M+H)ﭷ_lpfAFzg۹,%K۴b<-SXr\}[M遼{Z!f_wuY);rq&PӬPQ\4RxRWȨH}S3ޗw# {q -,%Lunr\mVI͡=TO_f%E@@+L_ $%}hg'nrE:BuxJ&pF$%5ƙ1gڊ;C»P2C4Вb)PFMk:_9>hlI*jPf :޳ݵ]pENy|@/$v= ו2M4_tr2awQܒS]8گxZ9El|'GZ7/(RD_\( $ °;aE}(LDTέ-6"*& w2F#cS.[۪cϔm8 lłQ,啿SYs\i99LJnE,@"B" TWA9s#U3Bw8y<|%i&zĕU,VQN̑@cĵ~u!Xrmmʳ*j4z9XX+@D Z9LSm&= #!&^͍rc}`EL95=4W:`9"v)Gv,.7'{N1~'+ګ?k٪l`fƓ%&! n2 z"LR>CϦAk #CNzLݴlϾY ^š'*YCa*AV#K;zȷ(BF (3w$ z])OzȺX5aFV/mV_5Zx:Dq+!fLPn˪:֒l5^Je)9I19DJ1 TrIeR;𞥊C'M٭0J>hGyXCh:˴}GK\I_Gb_oףPz Cz({sC!D~u{w0UAoӴ(q f(婛bj~2|_6zВ<^]pwDoO`YsQ'HN Àh?:^$ YHbΘWKTUE, .-Q8'&ǻh|r\,_@OZZCyhWt >9;W!d]{kKK˰Z=!))2Zcrzʼj0{Zf$7o=K*qic!k2s"/6ڨ˟xvYlOZk2$ ]tlXaMwBy S j䥎t{k9m[8N-ZúCZ 2!x|bX=c4޼4+MI"u:A dfJs Jh#fǼ‰LU w _".Y|eB:4Bp#aR 2z9z_S5Xτ Ǧ/ Et&O 1Ǽ/[܉D5?Iq]ƀ^f?mNe?\/Hy&HuxB)C*sXisYQ7~ޢF_ kv2$ AYЃF!cHYꂆu\c.ؔVriIO8 [?cB`[S |}A[^il&o3/fcj堌cZ޾e_qY=97dW9?KwMwJ@vnIGZ5ZyRJ1~[lך&3tVCM6MnPNTݷ#SKtpJRK?KurP0O{i2/O| { 7Qib܁XE$Hh^huCCZ5GH^,@LOFn&EljNg U ӱV)Jv8sg9\ jddد6źdO rbb88<8"/+0Ss W!sl 72+!GX)1$T6'U`(n#;Kvd]Vf;|B8{ź1=cv7"51s({nX’&* #J`c" 8!GIi /VN+P`Ղp5Oʈw!&%f {E<.?KsH8X]hȠM96͈ |2ug>ؔGA"ղUJrRmjLۅ@]f/4jiU;Cɞh!(0dLha) 8?W L+kgT.h:\Nn, oyX5qҚK3i)k"y:+]* 6n&jyG{m E=Uq2atօٙh[0*f_|V_ [vfD| ?1\E]F8Y:{dv7*GL.smX\X;Q޵_Rc3L'9g0"?6=*3=0NN=%zUF:r @L־{:mI3B lսx7HjhҺ"Nw\?3?~iJ~DM-؏̀ +#DB#B#"r7a ,8Q{#\ߢ/4 ]kyN^6NҠ8ajgÈUSkϳ6<JB. i:TK1QݬӬ:葁@yPEf䋄& ůU*bE <_h.Ϡ/q1AԂy% ~JVR"pZ(#^OXN\/iOz~IOGNS50ݺ;W88LྔM߬]X+/cE%< ň",v+Q3|C1Pn5͵b=w  \d~U7A JF_lPH6I6FvC):  _fRuGM9aYy&:]< ; |@)znZR8B;萼[3Guzi }lFNL^G Z9xs0yuf6“+mVBG;gb7Lȗ$ $r]s;_9O71)wrLMxf;X"9 B(%Pt^"FR1rQ6Y;gev[\؆oӰ{V#Y>tzO m-B.JB6o/fM/!e"'J ĀIS/huvC{OCoˉ^\yhB8|6l C Y۸K S.EY+$SGt,Ѥg&܊Oq튪Jڗnu&ǽ!,#;|6scDˡ),i&!P*O AuO>~mďZh{5\9o)O=Ue㮞A0% w$lCl͆(E#Q0-[S{oE1~z؎YB;%hPB8pfa.dGRFCة:P1ߏ\$R^wֈ(]n%H*Ϭ`ם Wޫo#1#;I<%3f^=lV{ Ŕ,wkPڰŔ"%:jKtvƹ(r3z bb̺6{Qֳf.8H9(G=X]B@ +SY< cſ;ٞ.G|oJy.*І|څ;n,bS[55.ݝ$ lX8Fⷢ-Ef&gꩽ8s qͤozY#EFEtdŤEd<'v4@A f1]54zw}"L}ݓԁx} FЧL O#5^ {#ϋBK~3zOGpXY^q\4sEmlClʹv䈊e0Q]~Lw<9qT'㮗ebcȇDY{d0:mo(gŜEzSЌ^ozZ'M .'R^rz3ŊZ ByPN1V+gg=P%ܑ{j P-pF";x;^lyB>@,xhŏX.8~B㮮rE`Q5uL5*%⋋#j35X, t6>0pnpFpY̳D )\i>:p(UYT c=Ͼj!#5 9] j9A$(L& 7ѣ*`7")zyve[kS{Ye>oEf!3-54ySݳNQVY/[@\>dASn#:dOs)AMxI#s Q*mRH`"7O^-[6Nk&'p&vBw]v,}͘/\ H{rt5Ց]-6FMe| 8fB沌vեBrnA~zI۠D+K魖-)3%g o=R61A VXk"\W {넲u0KR(!}vG0XPX+@\+Jypf{sؗy h^4/G*ͽUg3eL/Z"wX\Z.-2tZ` ~m9Vk[yEcşl❦H-MX»RKK,r39w-x뿘5Ad ,nX ;M! endstream endobj 354 0 obj << /Type /FontDescriptor /Ascent 832 /CapHeight 578 /Descent -300 /Flags 34 /FontBBox [ -21 -680 638 1021 ] /FontName /HLMBOB+CourierNew /ItalicAngle 0 /StemV 42 /XHeight 421 /FontFile2 355 0 R >> endobj 355 0 obj << /Filter /FlateDecode /Length 29745 /Length1 48888 >> stream tƖ֋)sxuv8k?wji+uܐ$f zB2+QdWMXgI&`4U|Xk d:"HZ>OV ^ xu1`/DI¥"HW?i4*ʬjpGbZ]Y#M* a;m#NR%؛5`>iPB+®$\>W7lx")DAҨ;I8t?nʚKc2`5!ﺌN`_,ܒʂF|gϤՒrQbLx=TĊ$SKڄ&m^LT7^iI@BX8Qq"/31BLng*=RO{N_c{-Oe**3 x4lz]]YЗi*koͦ-p(& K?(T+bPε4Q qx߮{A{3|mЭˬӠF1g{-H%[} t:s\DΖMh:E>{޳y59*9IpQc,=qXf࢝rص_!cXPi1@htM9(QpʽDjAkbTGEggMC.5'}]u0Ƣb`v#Uj"QK=#\yw2W"h rn%H#ψ9L[>JiEgYr H 'oT+#2lwFDT""T>@-*z_T4Mvbd~.uG)XJxZ%@h=S="i. c9XP#50ć~ 7r?c XKdfwgi}}^^06:KQКvp̀[A7k"Խ7Wk=#% nmsnX6s0׈>V5xB(}Bs6Ww#R(hϋ(w>k&u|DWF(,yM#eOx DQRI ӄl"SA+ٺ`#V .if|C" s*w$*$q:q g';ա2Q=!#LK V1KV,#YoΛQd| sNk>߹ϗfL;^][0;[#']BXHw[HwqW>x"=HQ۵RM}{ H:H[Sf&Xo6%l%Ohz0ô!iR#1fF Tp»ӝ *#L3+A;\ FꆢA09=^,Ld]|Q4 e€<;yiX@ (OK4Ng^g/2,L0e¼x}LekipTa)nr"i> MM=9$9{>-8mZal3q(MnZ ע~T+yY,u\@9\L .ND|ՃQD(kl@8 t+/Fu{nrxC`I+xcrR 8\x [7PZqo_>CF6*|%Uv coA`ůo@U(i#g8n&B.ŨDc }H;򱌠)7яD#_eyYN4V$WQϠ<~ *ڛJQxLhI= IsͱG_}rM doFcM˛ujs e;?ryp| ?Rz2[^ZCF\,: f*YN`%#F6 O)UXF1<{:<ȅD]Pv SG6ڊ܉Tj$3:-^#X,x@$_JD^/;$lK@FYΊhUb {ƲX/'yV]u{-( .xG .Me6C<NY/ j'B|e{EV6!#훌15s-*'3ަ19wy$ƻPmܳ c2bR-l}ZoZk2b{#bH ?-$:ۧ+C e%,-F+8^ӽ*H7΃"Yirʗ}IDR jOzpԩZu(.I1Fy%ÌtYwF!y \EˁS,]qTy=)!a03$A=r)5}*AT:.ij%$0 "YfQ [M /uMCCVSLzl $0D)1Cĩza7wf8'$.ִCjȖL:b@ew WX591qRg:[/PwW3DneoGW4Z'sGml^"4G[7 ꮴAe !䟑K <C?yj}#WZ?Dž}TZWҌء*Dc!tԛX0:H-zDۣ}OPUtse;} sc&J)D'۶?Q,m"d*yjks[1] /idi WGv@y 0dizY*}gS P?v AL+[hiOtrZ~m+ .,wOpδLԎ+I)L)QM@K@dwKHdD ;Ʀal'TgO͍T1z+v8~v@IHZr[m[Ю(9p#@2ڋ,ң|3T;0a,1*zgWϜTbJ*qYj`'e&]!^0mFOE1&l- |r:&UfVˎ2%H+gpfAG՝0(w,)ILhOH.Na[&!Vd}abn'hQT#0+n =S~% w.@?0(ʹn: ASZU`;\yQ(nLtTҦtPoP&ߡb)|L#IGhp(T<̉ZS UG ` r""+4 E9L6@"֜p6A]ribaI{<!z*R1( Dj)no;׹aZP\>+yg8C.2c0#SR&f1M*Ipm< @h0WaHWM߉ nt3PiPƒyzB7FC1] 8Y:jHuLߺlf)uh(&~x)5?*?TsCWTBen=.֛sh5+P^\ ]:8A=RJu~qWvg.bmagJ'ëC~AG|[Һ#4]BaA ͝n44Ɓ ct޷2w jٷۊlc89H B'\ҖB`'/rsS;4JYyƺMɜC+DA;_t;teBZ|H {['|yp kSR}`Mpi2i[r]Kq#fE:[t2`UQB_d4zh_bH_@JBvts[&e  k>3q+뚊=!b2 LQ5?%_޹hy$_8]F|OP*o1xԏ~JBdG0e:],5nl@6*qZa*rY+Q  OJ Z+*˸[hDŽLȸǤhcQ>iEjqp(˝nᮄ \w|XD|,2;;:ej3#^2ISlђXjSaMhZ5y tn=8יŦKN49mF ]쟎&x&5َ&jv\G {¤:>Rxװ{4s\ =qx򭻋ڴ,:ps]OƇɤR}<*r:zorMz;rU&|\_{%e 7o9A#U.OfooOw< Z[Q*|!*xXκ+22/1b3^¿bZ& P \ŽpK>*^ѠPu PƯk6èd%4$*yݚHvQ}i$SM''# 5l &%|&XDE9>Cr wZ[a Ae{a0|0/+u 0q-Q:GOSoO.#ivv9Ci}~zw]HZ@jKvMIƁhOjK0LyO`@{v&i RMԚ]-vKM[rL ԶLîMuE눯v%闣$ ^f24;uASBF1zϕm04nymt2Rq囗i5 خL,bu? O"Kcti?KփY:JZ:' )Kgj*6?9<|U.4/񔈽udwJÎb Tly KqOn{TW6-a_|Ff|f!5yr M!QT a[5n2%psh>cGsM,N}6pW^ =L2["~GZI=ms#BsD&g> b5Vi T,vi_zuSK#߆Ҩl{,R\PDZU H)2m҃E *0FXpDA*okAe\{l,|!4T:Q8XÝy˖dsp\ ^(>M(5 c"\mg C?f [#_m38[rM3b=˦$èAoCKE)"0&-W:.W=zCyQ^K/nFLJH^H" f#j+ )p%|I$73%WwaMmۆyQJEXX,K )塦@5F$ՔCO+?r1H*^eE|ÁMTܽ@%" V 7wDR˝qB)LKq`(I0[Ȁ>Q+&AZZj0!ɏocM7^C-L /(]eV@A,s)LQޛGViASfC3nGiMY2y{ :f } >]08 gīmG"4";Y.a=3*B相~Re1@YKtέUIBh?LîQoD. z {PtW6| (IZyGWKa"w2J 5>plb]z \@XF7g4 Pd pwE ~`HђdhGb'Y #Cxʻ"鸧)hPӬ$bA2IZtXE ~Wu0`|yzXC̎[ 0i;?<jajr WTe teL㥁Gv4/|l%S!+R՗?L&/q[ {fY_.7pp)Y6Dkc14^OXAuZaG1v3OQD5 h~&V7d0F([WGRd KJ_3P!I!t1#.?DHt0cQ\ $÷bAZβY5 FZҢ-J}{5H8m &t~46xDă (iB<rl%WQ*3?NyYVt?J& )\Nfn޽s[v O9C0 SԀ]vяcD'Gl."C63+/m[NFiţe`1|r!{i1g0ƭRRanp)ċ=S8lj+@UCBQ'S,p?'UwJM .g92SϦ6<:~l/=jɮphn~mR~LDL3°Ѹv5?TB }1#F^7d54@f*Kv[+gDҷtl $һ6e1*OT혚,L/#G=h ,'9Eؕ6]oo%KV W V64lόPٞJ`-J hi 09);ok,=ڵleb/ NP.̶(. ohT=DTN.E\HT8ix~#JrD Dȁ!o A>N҅SOj5*~7  tw…hJKy&x+[=4/ Lg5ΧN 3ǫ)|[A], ƹ]3jk OҐnR~T+%VΗ;5^`XΚGhvK tu#'fuDbVbi0Y12zU?tRMp;-td D% 4% &Kɽ~MZtJ6jIqp-=[ i`!®Ē x.ƠRZf*?AO4c^l%^ؐ!Z 6"g?: |E,򧉊lɥu`m9ud& d:}6j,uV.!Ez4FP7_Rs[1r+T,g`ܯ«~S8RnSP Mb4ABT5j~NmPoA?!KgF.c~ξjR?Xc>3ʴk[*O$.c-'l˶fFx#-gڝ%lI40 zyl'Qmo (PDߙT~('IQɡC]*Y[_^-_~Ha#p΋ #UDVYv~*,lDA$LI$K&[9ǃYIֱƸJ[)t-Be9vOpĚ1Y|$pkiKK*~w]DSCЉf}OgqHT 䱪]y?L [|{X7-exJ% { ,nx@qdaܥ5Yه,C9o8DД.Q}%c#[E 8XNf-X̳_7\AXKH q5wbn˟ zTC9C1mEr|TF`"i?H Fͤ7:| W$VPh 驼զz}׶QOЖ.+-wd 8>mRE.H[#w9Zݚ*͆` 7*,nz_7yuT|^>!Φ5 j. ʎ LOf9B`Pؕ9J 1~G^@{0lf\[HW-#jk{25@ < hڛxC1mO6FKD1~otjcU~7h6͛$79/W{^Oj.?F8VX f{eVS _:Ni(C(B{Z.Bx\kZuɮZ˶>v+4'Y\y.$M]3g&jR#R9jpicW{rszW[afd'L\'6HZk=23޳o<|$ )0gT٣Z׵0xiXLcyHpٜ@2n>ŵٮs$jc̄YՑ)SI;5'ñVu}`/>솪\JsT[]b_޻p^[A9ow`Y.@I ʯ7{ʫM-kʞN歈w wG_o^d`\U;Og9@/a@YN&'jמ ,~6ސNvP* o}7OG&(#&V)q* Nn);$dk oUWFrө?AD"\彴W(`u$rפTq Kpg݂/NF3N" ! mzel06 fىQ?YY@phw(^C 4wK>ƵIzѹ,+8+"I$e X5)=AaN'QfkIQ%}`f ^~Y9g{&ɿRB6'^et?wRbq猷),{skHbreK׍,1 MxB><> 坠qf$ImWP?)(Nk7 9P1["1KV}TL/ ֆTmKsm;BN2ykW8DvfRK͈ip:+o'x\^2a$_.Ssӷ}{u6oSwЗyͽvJn!pE[Se}P '3朡N_f`!盧߈,${;|0me<Rk9yU2$K+G77>ݔ=:+WP;W{"[O#,+twsJwWa/T5m?'~|Pf֠(NABԜsUy8+}QfuBiF:y}[O[*,"jܜX4~l$w=SHFu}ne{F61:oo++%.wE[} =s˵գ4 qjG[WTķx=N"Dpez8C+C5KH|*yW MdƊo#{ʷA[ WdFyrxs<FkBتӍnE4+X/&DN`'f]ډRQ!.(ʍ^!p"mjOڞ蓃dh~7|/"W6;ux|$X:rR[:/L`9 V3/萁i4a E4I[0X<킓D?BaC?D'j8=JދUK,kst%aK8Mp|}~5߻~.1T]r#2Y ra8olw~(\ζ3tb4@TZсE!pVs^`/\m|s։qZɭzTW.^ǗEv,}9$PQxlyN$! L袇.*}mb,Љ KzUT) 6‚lr=j1h,}r%̂Ғ`41b~ s_8X+| *.Zf\ nkE߃;F=4Ì`3eR˚:0ymi'l~匜 cN(&cOiNb mcwb E>ĵW<r-]x]?uA1.TpiT}@çc,Te XK垃3#\H|D$AP7w~Թ_[~>jhۗs;V읩EMGR#3[n=b8?|OcV:,4⧛;7\.Ú:SIy#-eђx@j,N^!{E.q,W'C#{QR/js'4襘::R^|y?cS ;>w +f_sG  C[r;5ѫS!89W{GB4v'EĦE0\ Ht tx֐Kʧ(3ˡ)~ 6\Mj=Qݪ})wW{+7Z2R(/Uy $~R:`dxz{4w>a ^IEJ?,c6SO6{? *e,,Za?%IEYqѺ.t3~6r!ɇ1 |:A]S,]E{/Fʏ/2DMnLP˜ ղ`ښHMVhi>hx6ܚ8>#CN0;/5p7Sӫ~ScF=/,bme?]]2WAʌAXYn)饩h{|mJk8赽Q&mw"c{1&m `+ݽ3 n'4Ae#YeEF~BN pg4B<@]dJ0J{PKun3 k#c0wlo+E rdTtY_@GV4UqƆiBRSUgd9C:9̀SH4=#V`ӡ3:Y=,ڞ=.NU8ovfґZN|YQ͟$  X[6p?NST9 T,[܌g2Puy*$rvghg=-`\Iլٞ^bE'ˤo'3q_ =i_T}R8\t cQМ@%_$# zTD H=XUU1Ax02Ь2)LQ"'#$$Ej'HD?f*,AMPlftk r L?ЂIi*MF-HӝDo[ndL\hkWL ՊN~xgG׮ cd®oX~*wE9EQ7x^>vHh*g||!wfm=`$I+yLSb`. r΅6h„B{JW~?hny6y6lGߏULNmV6=k7ws}~h "I~XʳWgzL-f,aĘtcYd1"K%W?j@𜔚l/> B:uEt|R=pb^ov/㡩+h]G /7$Ֆ4PU}ҧF˸R@O(E,hҮ+{n[.XܫpSmp"hб]a&WˊlPܦ~!3ViʇX>N(L#~QuW|sM 5>v?ȯoX Kyȸ^@hO谏sx͎m_oU[ AOI# O{Kqۛ.͞LILX2MTxi!Hmyf؋t`!T•׸OFzq"-U׹~n~$KIiu7M yyqN[~t*DA0w>m Gv*y~5ԙRD&r6*)Zy4.Au mz5_Oԛ5YjEʹH9-o½ǻ*ȫfT94לP&_jG``]8##fri=Fe~  \ G[1a8JoڴаcsKl4 dWsȹ]椪4Hw}bsWTRKXԴ"d ["{az,{ Jډh3 z!QFsWrtPHб9d|` ¿*F T<L B $];ʩٹն7s Ӯ)BG ^*T7zxGfmzc$M}ox|I1Mwnճj- VCnp:"_eFx0xyYU{I)PnhT4~/}|xtm<]9~ @v`VQ L. 4ƒ%T7m2kq@Zח> ~+}:^@ʃ!kkjfFC En˺*-IK/<-J?O y4M"I*4~oiLl#M`r=`[E?)vx @G1*V:]u oݛ0vnr|Zht^ D{H5hUĩg'.kY\᩹+">JJ%w kיKp;wOJ,o)pYa6o_ɽsώ24k>۪FVJaւ:ZӔ2AWBQy& X0GGAE7L;:v %VX[ ' w0\7płGB٢ >2 ^pY+\eRW–~b1h@mH89; Njf:T|g\a%7"ՂG%YC;ܼьÙ~#}0;>X#.G2]$~eYTV2A%1z0-yjc5 3Q[dQ ->ԹH )\/vZ92?JDQ4lgP;,' wHb [61,Y԰=Xg4/+f$DA 2*tI^AkǕZAcH=(14-lp=P:Z<1нa%3YV#NN7O~;j+Ie*#1-H}ffhe&*dvfzjZRuݏê96ǂ5}L^ӭ(1Xhǒh=0ö_R똑S3>UlrHj56GTE2LzfnLl r1c6M߃|$JYOQ4j—A ( D?t^(?P~ّ-)GE6t [U@URIkCGOg=Y; Ƿp+o5i@6-5Hkv?B1HԑhgA{Q aeo]"s4Ƒ8(CH^8` Hp` g&WRcQb:F_FoiM ԏyxrz}{|UQ(o<7K[]-n _j'S@K>*@?qj,@^.áDu\:4V>8{ETdщŬ5#^kb8ez*ÃޤвAx?1A:DG. !&ۊlZQc&\ՄETrm*"&}#kSY`u59!;}Bm>2v^6o0eWf*(h XhUgjqbwc%|!GW6kW@%ԏ"ڟ .$' 8WѶuEӴ-ænRtLArGMM?nU&֏фgia=< kt-:=nߡs׹Px`݆K}gh4(E(Lɰ^ZRvJ6~k.S%g0S`37W;xd1-/܎]S'uݘx)dG|ݡw7 ^EK!ï9yD@f$ؽc`hm%cH/1([00El*f'GwMv_ F!WՏh1Nb}i6O M=M5'j]r[dEirkq{ǂV +U"8bN(#[юS5vh&3HwW|KRAiDW]^cm562ϱ?75g:H))/!_;gn7~!=hALroK3^ &iӖ0_b#"`* ܦir! Mhd2Z4E89TLvϙ5`ĺEER㧮Ōizt̾m/;5[/ -sÍYIq 9G]ڏxkhk ۥ/iy>]7Ζ6V9WG41nIHqrr8d8F:e ;C6EZRu!WW߽쫜ˬd%[t@N][䭆Աfu)]hٕ{rK8kל]/dcv8̿oDc8jq?`-1܀Hb<&r_U{ V]b!c:1{!'E0@'Ik#1 y-K4X9h D[{ g@-FP2quњг4QMnt|Ưx;m^wB;gkhbU.-ȒG;k~M5Q*ש j\ ɆB;vtDڊ mpq4^=HwPQK\;YE떃7;mB 'WHdsI՗OcǔLm#$4 mJoF "ӳ H|C<&,R0ZH;8Ly_jj_ߧZeuS1ĉ2ܟp8fYK<G ݣ|QMu)BN6r4EZ>?9H@ K7LTvԅ}~wYZy=ozLek"t̑'['PjR0Rh!C#yPPk7vU[XcHgq+O3yc԰|=J[̴BL;=lvRӔ 4I HX#z׹\>$g5UK(#ƱXvA\j`"Xn5)Iwsc9$ӸM) MJhَ(E g6F|كc/;?.",_=7G2f,#e&2-j OFHGSϐM *BQ bM=Q_S$ݷ=MC_βD/&us8Y*/B礎:*D,mQ^<&@$OSC6˦ H=Z󎐚qaj"qm#%J U˷;PF >T"qb<ޒ*Y WN3dÿׂF447[>UuնG)MdGJ T;Q oLŽә:YSmflaF R^˶%*rt#f28J?ڝ L=97mb(qf5H$5AҗS="n0blFH4 jywUBKUOڐqӛZ; v%_G*Ci7Wx%\WIl/` @#8{0s)KHύI_ը'_acmS*'k,5TRm!G'5u)}n9,liN58VWBxox&:>g-֑uvb\PDOb +d\=p|ySHat.iwd8m0G2VYBihĸgႳ'NWvm(),&_4=q YGyel 8C p viND A` \"M̱Ŭ<3~mX>cC%]Zc gpTKnINll'H+'j4C itP%k >7u Oȡ:aqտ霋 Ir#AR#dЮ,+~C6˯Y=-»8767Tƀa6XM/QZ6`J U:<+I+4oXV IvQb-F3d|S@D@sw€DHSNVuu)#S)$:F@)J 2O)j JpN3U- sZSX$@P{:1aNm,: uu[ɀMYTiZK-e1UZPa푟yYq [f;݀B_ʑ#4ez|A swM~y>Uuj(mA:咢R]2'u&ז6Z';r)p_ h(j3+1|xLGJD&;hgRmvs2qAvq/CGJ+=?i2zI@M=A:eJѮ}9%/hC3„.lǦGvWSHmVI{V^=bkLAxRMނ3Ƹ*J9x09o;`" {9S;[ K-_IwD;Z2!7KSPޣX2Lԓi}! cO3W+gxCwahb:6T1ϧ_EP"`?nśJr[\Y 4M&: u2噐.[I3&YyϑjgvrH}( ƺנ=񸶇4& HuN1*}D#a-Igw.fxl&N/{OgʮC=Yk6N [V:%K"1uOEDoC0jJ?˓g&wAfZ*R~| p7dׅ8X *..aHkRk'%iN',4蔙 Kܭ;Y!X۱BY/>*L{wIn1͢wͅI~'"px4Lp{n88ȔrݛIL b$DnpgU@;5@8 Q6,WuCcoSj;ݤ*7%Z5fX[rJ1oUgu?l.YB`.EY 4z;nOUzSHměBNX* ͽ|j5(h!ipMYZ<_ |i,[@TT.IC:{GB #m^%]\0ꧦ1a>;ȅP,T)}:חjHyTUeπq:/ hT3E-yZvUi3N % pyD• hbe /T0Xp tg _'iog^ }mSJ3g4< 6{B GDp ׀EZ2n>e C]!Ufe~H"q +w::)D)(X"hA [W%URl4ͽQ%Z\^tLLbk4 ڹ&|s/K;iyjZ,kDPže9w:1B~t\,4'|4 b8Hgĸ̋Wm,ӿBPwPVڇqĦytZ082P[E:ʵSO94)Ҫ1(]\.?e6a2X鈫c; úEْh@;kZţoQݰb7P+ t ,'YZFBW='aoŒ/Z72{#(Js}}RM^ ]u:l1%C uf*P7aJ~G]A4t"{}X\AU;*p"a=2n㿕/4$^F/>u?3XxHN/; ?4>׍:Dk╛HXG4Mjs=̡Ȟ1}OK;'ԶP^8'$'kvV36HbZo:I)Tb&y},Wq򟺤MhӿL\ohM+ܹ뺃\Hs"0qyα-vYŮ;Ol@K/6PH%O!$-kNo6&۝IWq$ nTٔ+jګ6h@[ꡯ;:6Lm*xE}4F^<>f#Z͙!@?4.b|y5 簶\r' @2yd4KPj5b'U"CRYWq5R.u q` 1Ԫ\Zّ2mLrt$zXiYF*4+Ƞ g>gb2bMSήAGe3ϮO \(A3^YDS "~Ԏθ8x{#;<\1-|J5"aGcl*eq5v-m@UYe[S%<,8^\SFS[&榞SXb$UQOOgy87 t|upbH"E]hH`Јk1B/gNwXe)bӋ\n[ *y> 28 P\l%t磾 jv`'Ib:x/D6Kqy{s/58"PQ ńO\Vg\E\" -MrDEgrMUJ1HW8uɦ Nj-D6_w::w{>6L?r :*ijw ~:Pd25M6\@*U|͐GD8n{h |"ڗ(Lz_[ŕ}A|ef%ُN鐱+TPlC.*4z~AJ9.AHeY-)j+iijbV:*W] xx^Ad{ jN))-O2t_2,x+WV)" gClXk+ OSfMv'cn HvԄodQa۹ #:;`Š %礦H@x2rt x7C$_Ɖ$XKKkߜLir(&屯$^xQ%\,;-?BA>Tr\&ѸV kaCa= 9GH́7Fa!DmRwMU:zFR9wF轳Fe~ hDf<xKgJ}DBIRvhMr / zN@@ð8+ *BTIȰahD.#zzutMK ʂ8O!]D'wQ ^룋Bz]UKǪu~ |d󿃺'#Z9u:=b2y%Aj!(^x; XLu#FBnJetNc" wSn V: gp?ENz*:qg%u3T%̍{JRES{+{QT[ʓ1(AU42/E…VZExQ"D}>V AD-&.SЉG=i>{Hs.OBY:1 x#Kn!V*nZ}1G54ړq ]M50T9[OYZtj30zZ_-d0j|"lM YDK Ϝ,Rpݗ24_K pstDTus1_<}M3WU= E}#E2=GU2a+*Ls M,$9[9Q,o>FR :x[Mm4)r' endstream endobj 356 0 obj << /Type /FontDescriptor /Ascent 832 /CapHeight 593 /Descent -300 /Flags 34 /FontBBox [ -46 -710 702 1221 ] /FontName /HLMGOF+CourierNewPS-BoldMT /ItalicAngle 0 /StemV 133 /FontFile2 357 0 R >> endobj 357 0 obj << /Filter /FlateDecode /Length 22712 /Length1 40300 >> stream ,SD!o}%?ь}VqUL ӼGӰI־_q/M"FIHjC,y0Kwi6uTqJ#rcHT${ erBjm?jmښy$@ A$h|x;o2`H>4ӈ{z.<9k mI.pHHX'4$wnzYB+6 `&.n?U둌e. n6vXhοfjKW\d}y\b֋d29ǚvf(Қͱщbd> nݺDfR' j- @nHV+"g;a yB^z`q\}cr6Lqcx/R+aB1NxlLiAI{E:Z2G;$R]%9FH's A")u@\>KUI4 'mJG qi5CqM]落jp_증PCB9ook,PxtO^ek؆} #>'p *S/w J{?, h&k;'/&UZ~嵭37?Z,BWE4ռU=' ,{ۯ>/iVc<~צf[hßT Zxԗ!U܆W=.i3?akaВvd&y ]WV*ЎU5fD:!HUia˂P=0*7I)G &w/` Ks(Jo !_"^AߢBwO K!s|Xd"QcŽhũ~ =GQlVuw\wٿ4&BОYhX~MdW+glb4xQzI#-Xa@D )6&>ձ0VCXjF,ӟ-GK 5z\W!MeO(@ZڋfheVHn! g\hi# kM˛ʘw-faūGbvdr4[#BL?v1fFjFE7e_+q Qc+Jب>*$zM.R0uzPi~ * ջ X&K9u d/,m1=kR?9z~#<}^svš(߷Fqp˩21y"BGxkAhsA{>0.X5jT塩k6΂iW]^xWU&bFQZ4!h8%X q$5qf:sӌ= MNR&xo S!]cs)"TOQgv M2r@AVZ'|Ixr(kv[fo㱶oi FB?OF͊W@zYv5FfJodO(yVAT.fOb &$RP@e5a{v/>fqHe^yKf+$b&Jb>K3%tI!TihDOI"Fn0U{d-c l%,Qb`3x|_gqn [ {k"_}I.X )bq0 c젥B0Q[䄁>I峈= $MTm~ز;MقKPs gO OJa)QH!u6؁E,,lUg\d߃6e+?t|vBu;hYpŞ_615~${y | Iӽ ʭ֮ms5!JBwǒzs?ϗ n2{ѕd}.D$7, 4DTql.g/RGwК+ f%-4;a{um`oih_3ĸߝZ.hLUqY?&c ޳"CXoDc#yىS8i:]Unt8ʬnSȵ'?uF{glh $ɏ '2[RoH>}c$­Mܬ*~bHC#~Y>=oC Ns$(j`pkwzBWڕqYzea #ۤvM~^\$̌m4$[o=O8)-fF T_`8Sv6` zI*jXt !yNQM"ۣٿ~2A<V53ܪWwb /,{_2\2%dq,xF q^uMv2 n//wB1 ]0gW,oeD!Inj"2,諧5ӃDk?IM2CR2K}È)([6ƤzC.>+FCFA2I{9y%+; :UbFB ڨr"oc*UE:<:Si\R³BPAЮݦ6Szkxk!qAɷ.Ù1,'Td`>{\zbP2v!ć D*1pU[bn`%2pyyE {V~ C A?ZC`w!B ~ k`.R99]58BqsŃa0 s%B,!އyٱكv+f"193L0.K엇g׶%/:m.K; Ye@ \vg!":ޣmSƲ ,KٱFe+O(Ͽ&= W&XxCJ+$wCNݖT h=\i=dH7tԂ wd@L7{k#i۶BM뉘^ FlwY jk8^R$!HیHɕ S`[Sf ?'k;hw|>_F^CT北ִtzCP0 [T\# kzэ]oNJI_Yx%MNu( [b,m2]sfOѸ/$J9TBod,$( 3K႗r__'J,MSi߬qžWE$ɨ)4Clf7!#Rf*D3uiwQ g?n6!I3Oo'!97IMmK˧C茰s6[pvȺd Pβ_]wWf(Ts>ԝi!>l?韯wL%M[LF!db7(o׺w6,ǿtֻ5g:ڟm'콲0}JsfkL`#gYݒ4tTN=E4MoP3,2]($l"AW;!g g_Hx3PPfV͆07)'w|?k.q!nFeJ)lۖ)tey#y=f2PT krs_JJ'2{x2m-Fcy( LjF ,ycYV, nH_(pfgb5fvБ0e|vv^Sت  vH}Nj~bG ;c CE׽"iNޑv XeRE˭CeoL^elKj4rM;-^uT#H+ ~>6f}`d<ɢ|&cDGc7F˓ٔg1oK ,woF yR>P"C]P'+oUZe=F+F_۲>i ˔S>c8W2cP.^9؞Ur _荒 qzfFrhVv֥.q6P| p]uB > a4%#Mf館ֆRZ4C o4u Nq^m6a $x6^>yvQ"X`(ՎJSl<[&ɺ@Lh`aVX k>Lfseg &mOYI<+ 9bq/ M+̽7FMb FMpxWa™pI-;(FA=E}2lV+b<R1ڗp 4J5ev?1cd#:G÷Ҁd sg:БwW'Rbkx&;`GAAeD,.jPB Rl>E&cpTc$@e#LE4Y?I tvs(oa R$ ̛զd2=_U.i P63vBH~3;-I4$F/ӹw犃h&t!%9ýE3 dkȋ} b͔2ZH\XJ.̦Ά=k9kʤ=67/$'}>ϳ뫪x UɂHx-ָruǘ avN};!d QAg tYYhA姡Ne-Lc㕏{)b)k=E2s,B$^Z|OFf"ha V&w+4r2Ws)?"MLC@ÛNRWNtP1׈i8s>LUg =?7%&Zja:9k ;=,<}UaR'ƀwUp z7?0el4-JLuYRi"`j[:+*1`Frdiڲ/<Ŀ`51"=Z'lZH C{ Jܿ2oE n;ѲgkPp6Aؐ{rmib=3$}q4l@ʓEn}3cUW<} ~o^3qyxL`'D BAÉc@}xN uX@)*su}6O@.pzĿ`4~ MnKh{v^m~϶ܓv%`^<x rWYBSÐP~SxJkv?tNxC {oPk 23{=jGB|`fqj'ACΘ*qK繢0>z"ybovh"OWԕ8!j}aB㜾@;^ag<[e Z؋kT\I uG@@%=d){.p4*;k^mPmMmE˿} e^[ 'sqO{iX Y@/} =i ܸ8^M];kXLyG~?k+`G]d|06xCK}` Xq ߷!MHLJ,3ti, n5&*3+}IF4$PP;T6d3y})ZjrKൕS Y=}ILnei_ vx/H^$Cy^_#9\qK׾ϵ%^1_7SԆgD7!4nާn\[ˈϖ3x3.DR41T{ 1x\8$0C{UBbXov!sA$!K-8o"Bángq婯· }Ĕ5Z8$c8 UU%{oM벡uMyW+H[ vKUԽ%0&:+Tu]r=& ^QT2mʭ9rO %~c:]Dp8EU2)#L%*@7B @xOB[+E_ͳ , q}PF),DK_  ٺi{e8íBEP&EiP.#3[#HJjEr)vѾ#˕ա1Ǝx#;z7b˘q@Y;u;A li/}+_Hh/y#ȹKgN]fc>I#,s|;e ؿ_8fq% 4L@\\vvcsk]-9Ouz^hq `^yOEG[X ڝCgLK.3Mjp]YHP , HX!\{lS&܉UP,p g2զ=M#Иi[er9$}n.ኒQv\ zAC|(-P^Là7_Pzo_lUեx^Y`;Ay³[}GxMw8T35/&sny7&-qgkb0\S3 p" 򩀪qzmlp$q*=l0AgHo;Y/%ȀWZ(MlvAx&$>):XpL9/"sl.V3,#ċCp*9MB镹7/ K`(Lx4 7#uS+g-Hd휊jZx`&?{}I"5soJ麩yH5Ѯhq\e ?דJ .>@yKS0Z SPDSt6j).>lO87O ~ e?Kg5GLfyX-Z1]/&=*oke oh3әVml.nS?QϦ>wY[.t6+GTA#K]Nrv;lj IL( O{̛KW]ؿ8=qOtt5wY}TBO:dj]x|/{k,JTddAߖ?c)L0LȪo 2P %1nř0WGK_(y@B 1uJ5g^}3kntZR.|\(o8.@KH]/[sYx77ũxQQ\:3NBȌfybvz!z JSJb]"oVlcū?=Fbju=|Ihf$Z H:|u_ݦ-}Es_#78Vt-"6,Qw{&.#0^&01DBc !A2걛 䨀36h  %`z[ᐻ4NyIEXz>hEge:܃[)eQ.EfpTz! );Ng4A_~YrLJ:nkM^LD,@Wxyj39$t9ќ0є OP esZkZ)8"'z˭$}۫~Qmd5f4%0#"w%=;sxOUÆd:Vx 8 >%5)_dB>m|c„/ c?y|572SNI}u#hbwVµ1] e `0)D{+~a?ձotg;1ꪜ(.PrOa(fm[E͢R_",'`6|wDؼvZJ~7I_^ I+~ahrkeLe" tf?G/6Z#Cc8KmyFLj"Lͣ_\Fk_F+qj KdE 2ÙhGKєyq7KMj"cr`^+dzP\DƋ-gSE4KR0_vwD}cG݋hjjvP N-jLI%&WPqڏ(%ŎnY=QR?_900I֘و)AEnF0 s:'M8^ RѾ@aqjs޹ [BA%`Tuij2EfKVTFztⲃi"fJq i]j|6nH[ay aȕ}j?!%[}K3>QddYYnTvXXWT#G=ƭkgֳ"7*35E N&tY tAdk)BwI+ҴDΌk<D TJ mD̊Ɇ.l.@Ua&a{<\NB-2JӘs"m"nvQ|ViAm@m {ʩ5} g_1entF/ 5 co0T mk ͠3GnI- u7=D4@<N32xd ! HE!R-r-n^{nvɇ\e6@܆Z6 V6'.jE:e8a2^QW$Gtj{]~r:5| Y>HQҕl&㰤0@$ vI]`1^P&iߜjî´Vl#v`AւOb*9%-0@Wj~a[8,vv3}ڧhNhsB]fZZ~Ǐ.}<, .;0<\9wܶBe]'yֵ ExB? [klO7 z0yHE(9aH '+$x:~*_K%0G @xkS9kR9q3/ vV>%uBmGZj1`dTHܛcZDwD$nýT< ]N9,}9A9G Et=s>z xˍٮSܕWi*8U)Su$ՂJ Aa>J`?"DdxEU 1IէQ\vN$3.JH҉wkYwҀAx*웨gd=~|ra}9ub#B2 KvD=} Èoq/=9-U T=SԂRalj4j(,%,|4UnV,Nt +A&]Ə5I 9sHfiq$[.I "}ZLxEo%#{QCEaWzoE69Hq̄47оPÈo*#,;;(ubc浉S"ʢS3I,6=,|X+qTOGԧzֆ[.jDsi{e_Ymp[İ_.Zq IEKF[YkX 0EsKdqE)g|t;+WV' Epgw&f]ؖ<@ߘ(~$qÐA ].gT11|a@#V`ОJӰvF=fflP}$ ʅPw+UXJ#";eKi=+@2£YԁC2t#t9-7/9,H<%\@$01Cm $Oa8^϶GG'~Mם5)Ibļ3;a&U\z`eH"ފ-hig;\Wkmε7b2Z@AQFv?r_{Yz(Ǘbf?ѿ+s"(>[kД肉~hM\ǁŲ;XZ^VM!]@KҮ\~{S5* Egk Z<4# %ϧL 8˻LnY=˲#L9|&[9Ҁљ a`J@ /V3똗bq1*L<$88m(Uߵau$JHL'0/f`3떑b2o`-Uc%lCfXhPm&a$*xXge`xh~ƿ)%#1I '{R 9JfWݍٻpg r? σ-TA̬hj텈#"U_iQjD_Vq!%$dS w^&'Ik.p.v=L_S?n/{4$kcy,ռ$-cbdĶOs#21 m_!!e4 H2EULLNI Vߝr\$@3,/Sێڢ$Df랄/ s-p1uì6pc#eH+ _bE!c@a nxB[{؄vkl2FL$AKN!jp堄9eq\WtA\Qad P}PS:GD nN:dc|FaVp ke0ܐԄI48kd]C( Lsd$F<ﻜrEaj`!˃+!ělUhܢV],';6Rw { Yub ZFk(5ZœS3RU0o}~ as5䅰V)/1Sf?W߯wWɩdck+Cg`M!͏*Ѱ1c$t|H_:,bBQ9[O_u! 0?pOo7P`qcc?_#t\C[zM1cwzD]H_]ZT2a]N,HNN5 u ~Q Ch̀Ф0.Z|Ig=0{Rhr`Cm~m4d 򤋂$7kB79*[U)%_^@(8)5*'fpIWzn|y&7#6~Og$qYEֵ@RwdjGXrRia?b!K*\.U_ާ:N#ǩcjTS w愾WOE>t!V#yf"Y7x#K0#=n@a4nf욪02kWȬܳs!N;b{Ӏ lje@G'֣֦KR){{#1]5yiPe˛mN9R jV}Aq¼ Oy* .Dl@;OAјhc67(3n}ӻ.hgVOA;%>[mWcFQLH|>$vfؘ~nygsY mmߧ?Vлi^b2B?"!p&w6W˝{v&(0hIP3e\üƒ. 1ݷʌLҩA_YN/caBNzڕB#s^3E`z!y5AG7ɇ^z_a $A N2Q$}:bW]~+ZGP * L'bj>u#FgJHHdq h~Z cjGu*ޤ#[! 듢[ ($s!b F'u|f F6Lz~.ɝs(|H^oϐ- R,]w~I}[6!dq+w\ҨLDۺ"We^8hbIJB[QϿs|= *DH܉QϨ9]R񟲞T:eZpKoTbB_`䤚z!dʨt7S@1o,/mĸ/V zEɊC[C%(PS|w>־xЎѻD{8ԍ0kH5rBů8&Rk mnXVUPE}voXY)>!g wOeS9j58pOST7^5A̖@:.n,{zC6;V#8ĜHpdvgnT8b B Gk.QBpBX }S[iU\ Ϛ "fGR{HA OƗe:Q`8 >A-R*4LEtXgh,KD(m9=w134d$fV t ׶G[o߶uΘg˘ T܀iew3-υa-%I8!>ܥ`W%wa2HmBّ D<ְdq/ k ?փJ}n/4{L7d|A l^V.mp_Q-[ * '݀m +ѣ n$*GzRA(hRX 3߉$'[ Y1ML]j{+v3* h)A,{ׇqbdn|l_M@JlW=^[pf(@ۤz&nqfo\;|bo r墨%*] R/B;Yhk~1} :vRE淰h *<о :NFҜB?S8 (;YW%u/FJא!1fB nNz޷wug@9-ʦ"C3Mʬ࠷S\#/|U#x#tk!X\˒$OE~ );rpۻj D":~EgO, 7x:׆i/CGmag5.RO8Vկ:3 XJ#ڇY--_zͶml-`[Yi._d e6^5j47Ѝ!&}BH<c|kg/p\ЬZP1Z=E,MoZkRU*ji•pWm~t&PB /Fy~j @bQ؁{GoQ/#umD돑J9!7* Vd]n}1B aq+2xMIuf A+@MMOYhJ-jju`G7-֒t7W~ODɁc8ވX-{8Huoĸ3xk:N .Ƴ3{K3IbYkV`'_is\2b0s4!q Huuhܣ)J5ny4KA {PEcv^8Vtc_w/r. u#H8\,qe_҆AL!䚜%tw0;~ZC3gYtH"!EsTI]}|P!s iD.<1|@~\Js Ȝ]ᩴ1%(jV$֎ ).Q}s}-e'G"bS2YM NX(̫ Urf56tHlej-l| t9loVo;5ߝ0Ckâpnf*=%ۃI3h4"h3J&Xװ`WiZPC7(դyg ߴ&l/,,݂J@+&[`@$['iaیQpJ;^q: 5V#5[sbf?+u-ҡg9h[uaJH8Y :A ؏Tz^+&OlZtA^Zd10p=U4A~c34hdlչBadwң&"|LUɚUg=DY;k711`|;l5Lg;`ߍj vMQU+J+t%IKOKGnFp=ޖWRʸ XDOhb~*dx:qP8DNNƖfVȜՀ4)&o4F $ C! , h)w??{&c $В(KPdxߥA.VB8RK*GTl ٢Zl40 iNmY:g|{kͭJt"UB u` "/b *|v7;~%k<9\I*9 E'TUF:YFsFI! aX(4cޡXz~JUw'a~O3q8Œ#6FBcp}fKzO$]_vp.&HM3ëy-=r *Abat?,E]˗_A`rU| &C%jFPgOk8~G\D[X꧖3h&{I! Iɳ5R@n45WX}Ap}#\՛? ;}9{ҋ|VRa s-3^(|osM?MϢkjԵbSҍx*)kW3p1x >eU'*3'D-X)lf.9zawQ[IUc^U9c-v]T4rRE313Y)6%k)BZ}E9c_ 5_;b "|S:}\_ǐ=oDEɈ jPS ~H@H7'$\>o@CTdbmx㼡0*!\H3̯ 3}j/r;AnĘh, L.q7%Dll7azؘ> ۆr~^,DD=/;w{2`iG:|rc|N]|Hv4pj9s@6ڶyƥQ0ϨLJd +w`,L/i;\L%[qrUЙ&57 b$}Lv )uO'`:?jH.L TƶssW]5$H=Es @J†&) g qHDUh[(Tٞ^Q?ٱE6C^#m~"!gL"Qaĭa!'h 3MGf_x?Ykxkhх9B ABߍ7K5{2O%+/5n쩌EGo"lh.ΝҀyշmb#3c%xCSuqAtМgm{cS3c[AUkMplIW(kF'*Hl:髵]_si-ן[s\ۅD AMЈ`7mCVH8! .Jϕgh*q,mA79ҍ)_"|E0D(JH)"xU߬u8TɁ]5 }ؾeysѺ8̺,?e!fP*:uoXo/셰`nETPq׳@WZ: 0nWMVXSx%h?#!8ht$'? g+ʧT=W7Z'9ٵ}wjMxFn,+!,y 28m1JrMz8Ęl0ѩreLQnI Oz %~9lV,澚w5N7IPuuo2v{ T.}{܄hO/̸? n;D= .0Gh3M^FKW\Uy;R~sKʓA8 Փ?UnNW!͗RTv8*\jLY9Mpoy|_ e+'|v†"Byb'l0FTBGgڇ˼] sgvKGMzt$~֠Db&ȶ*qpLQxTz+y(3\KLZ8'm8gtlàsc z.NĀl|죶w=]:GjI1t#jF,Dc;-Ay{j ǷPs[*߻A՞!MlEՐw~|%2@E%m?.#':PF8cH8NDlBv"Pn)0@>Y[ٻZ\8 z `T3[?A x4"P}N{ Ctnx{ؤ'C`m00l$hdm}$XrEH~Bb kا PX`ϫkY]0w&wpq: o}eKV_tNA,Dg; fd(VL⋽_{5kd6EܶfGR.aTlsSI<#V+KA;y?bNg2vDy:(N59woJA؈ JfM'*j;DNaQPN(::EN wj.ϿAsBmfy![p:L@5RP;=f ?7610/N*L##S2TOR{9P:^3 \>%/ULdT_[p|)_X;:ĴhJ ^Ѷt䧕h+=e:y:(|k3Ӭ࢑dHW7;?t2Φ;3Wn>GpG~bObN~4,@e4`2®#Z/q2Y6&m;vȼ *;u}v h@Hԩp*j_ˋ ";-0 |3]˓ĸ dMd }A>_NC&d~̀S2Q1ǹ')yӯFFQ-G4# o؞ղ`f2uԨ-?l1[)"cR';=Xˌm:F7Lz0@]|IyYBOW:O(9LA/!BjPWT]s޴F~rq'8iJ.ImX5(C)E&; VϸǭXnU^h Ge>pR6\S|Q򒕣U o<Ƌy9:Ce{$+U)Z4s@@qlKËw¾B:*B%jJ-dX],|A(OZQy/ GwPUR~ίSbH+HB'.$85x־HjQ endstream endobj 358 0 obj << /Type /Font /Subtype /CIDFontType2 /BaseFont /HLMBFO+SymbolMT /FontDescriptor 348 0 R /CIDSystemInfo << /Registry (Ax2)/Ordering (Ir#5A)/Supplement 0 >> /DW 1000 /W [ 3 [ 250 ] 120 [ 459 ] 148 [ 790 ] ] >> endobj 359 0 obj << /Filter /FlateDecode /Length 238 >> stream .i6_(]{N~rSOPnN /veah:[5ml%A#(j}d0W,O#诹Q3 w@ ((9v(1?#n܉%ꃆO\0ej{FZ._x YCsq^!xB)~}%4ů6w! K^~E-zqޮJ endstream endobj 360 0 obj << /Type /Annot /Subtype /Link /Rect [ 206.1619 479.48596 247.29768 491.89063 ] /Border [ 0 0 0 ] /H /I /A 133 0 R /StructParent 6 >> endobj 361 0 obj << /Type /Annot /Subtype /Link /Rect [ 206.15981 455.06506 269.88446 467.46973 ] /Border [ 0 0 0 ] /H /I /A 134 0 R /StructParent 7 >> endobj 362 0 obj << /Type /Annot /Subtype /Link /Rect [ 206.15971 430.70514 279.75916 443.10983 ] /Border [ 0 0 0 ] /H /I /A 135 0 R /StructParent 8 >> endobj 363 0 obj << /Type /Annot /Subtype /Link /Rect [ 436.62 512.5451 496.04434 524.94983 ] /Border [ 0 0 0 ] /H /I /A 149 0 R /StructParent 13 >> endobj 364 0 obj << /Type /Annot /Subtype /Link /Rect [ 141.77951 677.30554 157.48897 689.71021 ] /Border [ 0 0 0 ] /H /I /A 154 0 R /StructParent 15 >> endobj 365 0 obj << /Type /Annot /Subtype /Link /Rect [ 178.79955 677.30487 201.48276 689.70953 ] /Border [ 0 0 0 ] /H /I /A 155 0 R /StructParent 16 >> endobj 366 0 obj << /Type /Annot /Subtype /Link /Rect [ 196.37997 274.64545 255.3242 287.05011 ] /Border [ 0 0 0 ] /H /I /A 156 0 R /StructParent 17 >> endobj 367 0 obj << /Type /Annot /Subtype /Link /Rect [ 196.38025 250.28516 257.95203 262.68982 ] /Border [ 0 0 0 ] /H /I /A 157 0 R /StructParent 18 >> endobj 368 0 obj << /Type /Annot /Subtype /Link /Rect [ 196.37994 225.86507 290.36914 238.26974 ] /Border [ 0 0 0 ] /H /I /A 158 0 R /StructParent 19 >> endobj 369 0 obj << /Type /Annot /Subtype /Link /Rect [ 196.50061 201.44507 265.45157 213.84975 ] /Border [ 0 0 0 ] /H /I /A 159 0 R /StructParent 20 >> endobj 370 0 obj << /Type /Annot /Subtype /Link /Rect [ 196.38 164.66534 287.20392 177.07002 ] /Border [ 0 0 0 ] /H /I /A 160 0 R /StructParent 21 >> endobj 371 0 obj << /Type /Annot /Subtype /Link /Rect [ 371.69971 140.30516 473.61487 152.70984 ] /Border [ 0 0 0 ] /H /I /A 161 0 R /StructParent 22 >> endobj 372 0 obj << /Type /Annot /Subtype /Link /Rect [ 172.37984 142.28485 231.3031 154.68953 ] /Border [ 0 0 0 ] /H /I /A 169 0 R /StructParent 25 >> endobj 373 0 obj << /Type /Annot /Subtype /Link /Rect [ 200.75877 607.64587 259.68204 620.05054 ] /Border [ 0 0 0 ] /H /I /A 174 0 R /StructParent 27 >> endobj 374 0 obj << /Type /Annot /Subtype /Link /Rect [ 427.73993 276.38495 470.94476 288.78961 ] /Border [ 0 0 0 ] /H /I /A 194 0 R /StructParent 34 >> endobj 375 0 obj << /Type /Annot /Subtype /Link /Rect [ 184.32001 264.02484 220.21732 276.42953 ] /Border [ 0 0 0 ] /H /I /A 195 0 R /StructParent 35 >> endobj 376 0 obj << /Type /Annot /Subtype /Link /Rect [ 190.20071 702.02515 249.18344 714.42981 ] /Border [ 0 0 0 ] /H /I /A 200 0 R /StructParent 37 >> endobj 377 0 obj << /Type /Annot /Subtype /Link /Rect [ 190.20045 588.20557 249.18317 600.61023 ] /Border [ 0 0 0 ] /H /I /A 201 0 R /StructParent 38 >> endobj 378 0 obj << /Type /Annot /Subtype /Link /Rect [ 263.70004 588.20483 332.35413 600.6095 ] /Border [ 0 0 0 ] /H /I /A 202 0 R /StructParent 39 >> endobj 379 0 obj << /Type /Annot /Subtype /Link /Rect [ 452.04037 497.42487 470.38312 509.82953 ] /Border [ 0 0 0 ] /H /I /A 258 0 R /StructParent 58 >> endobj 380 0 obj << /Type /Annot /Subtype /Link /Rect [ 141.78 485.06485 299.82089 497.46954 ] /Border [ 0 0 0 ] /H /I /A 259 0 R /StructParent 59 >> endobj 381 0 obj << /Type /Annot /Subtype /Link /Rect [ 141.77965 472.70514 174.2971 485.1098 ] /Border [ 0 0 0 ] /H /I /A 260 0 R /StructParent 60 >> endobj 382 0 obj << /Type /Annot /Subtype /Link /Rect [ 372.96033 687.02484 449.54849 699.42957 ] /Border [ 0 0 0 ] /H /I /A 268 0 R /StructParent 63 >> endobj 383 0 obj << /Type /Annot /Subtype /Link /Rect [ 385.97986 490.70541 466.97275 503.11011 ] /Border [ 0 0 0 ] /H /I /A 273 0 R /StructParent 65 >> endobj 384 0 obj << /Type /Annot /Subtype /Link /Rect [ 250.37984 273.14581 309.49835 285.55051 ] /Border [ 0 0 0 ] /H /I /A 278 0 R /StructParent 67 >> endobj 385 0 obj << /Type /Annot /Subtype /Link /Rect [ 334.7395 519.38489 428.74307 531.78955 ] /Border [ 0 0 0 ] /H /I /A 283 0 R /StructParent 69 >> endobj 386 0 obj << /Type /Annot /Subtype /Link /Rect [ 246.72049 412.22528 307.23611 424.62994 ] /Border [ 0 0 0 ] /H /I /A 294 0 R /StructParent 73 >> endobj 387 0 obj << /Type /Annot /Subtype /Link /Rect [ 170.16 600.4458 306.85999 612.85052 ] /Border [ 0 0 0 ] /H /I /A 388 0 R /StructParent 85 >> endobj 388 0 obj << /S /URI /URI (As1ni*@%a0!VDͨs5^Z:1) >> endobj 389 0 obj << /Type /Annot /Subtype /Link /Rect [ 219.12038 625.16516 301.97485 637.56982 ] /Border [ 0 0 0 ] /H /I /A 390 0 R /StructParent 87 >> endobj 390 0 obj << /S /URI /URI (>Gv'u5/9R) >> endobj 391 0 obj << /Type /Annot /Subtype /Link /Rect [ 307.49988 588.80518 382.51263 601.20984 ] /Border [ 0 0 0 ] /H /I /A 392 0 R /StructParent 88 >> endobj 392 0 obj << /S /URI /URI (Rހ4tN"ؿǶڣ) >> endobj 393 0 obj << /Type /Annot /Subtype /Link /Rect [ 335.45996 654.28491 474.55292 666.66956 ] /Border [ 0 0 0 ] /H /I /A 394 0 R /StructParent 90 >> endobj 394 0 obj << /S /URI /URI (CN# +y#I^WI.],vMǏvW) >> endobj 395 0 obj << /Count 56 /First 396 0 R /Last 397 0 R >> endobj 396 0 obj << /Title (3e}IB:z) /Dest [ 129 0 R /XYZ 0 686 null ] /Parent 395 0 R /Next 438 0 R >> endobj 397 0 obj << /Title (tI}.#S) /Dest [ 329 0 R /XYZ 0 686 null ] /Parent 395 0 R /Prev 398 0 R >> endobj 398 0 obj << /Title (e7$[) /Dest [ 325 0 R /XYZ 0 686 null ] /Parent 395 0 R /Prev 399 0 R /Next 397 0 R >> endobj 399 0 obj << /Title (L]=zCyc"K) /Dest [ 322 0 R /XYZ 0 686 null ] /Parent 395 0 R /Prev 400 0 R /Next 398 0 R >> endobj 400 0 obj << /Title (|@I ZxvG5}H<) /Dest [ 307 0 R /XYZ 0 686 null ] /Parent 395 0 R /Prev 401 0 R /Next 399 0 R /First 402 0 R /Last 403 0 R /Count 6 >> endobj 401 0 obj << /Title (T!IUm[) /Dest [ 304 0 R /XYZ 0 686 null ] /Parent 395 0 R /Prev 408 0 R /Next 400 0 R >> endobj 402 0 obj << /Title (ErE) /Dest [ 307 0 R /XYZ 0 585 null ] /Parent 400 0 R /Next 404 0 R >> endobj 403 0 obj << /Title (KhP\)6䑌a) /Dest [ 310 0 R /XYZ 0 554 null ] /Parent 400 0 R /Prev 404 0 R /First 405 0 R /Last 405 0 R /Count 3 >> endobj 404 0 obj << /Title (6NG) /Dest [ 307 0 R /XYZ 0 242 null ] /Parent 400 0 R /Prev 402 0 R /Next 403 0 R >> endobj 405 0 obj << /Title () /Dest [ 319 0 R /XYZ 0 425 null ] /Parent 403 0 R /First 406 0 R /Last 407 0 R /Count 2 >> endobj 406 0 obj << /Title (Η\(v\rϋp-_*) /Dest [ 319 0 R /XYZ 0 425 null ] /Parent 405 0 R /Next 407 0 R >> endobj 407 0 obj << /Title (g*RG) /Dest [ 319 0 R /XYZ 0 362 null ] /Parent 405 0 R /Prev 406 0 R >> endobj 408 0 obj << /Title ([ov/aċڂ) /Dest [ 254 0 R /XYZ 0 686 null ] /Parent 395 0 R /Prev 409 0 R /Next 401 0 R /First 410 0 R /Last 411 0 R /Count 15 >> endobj 409 0 obj << /Title (޹1S#:) /Dest [ 239 0 R /XYZ 0 686 null ] /Parent 395 0 R /Prev 425 0 R /Next 408 0 R /First 426 0 R /Last 426 0 R /Count 1 >> endobj 410 0 obj << /Title (:ɛM<$$6\)&ql) /Dest [ 254 0 R /XYZ 0 549 null ] /Parent 408 0 R /Next 418 0 R /First 422 0 R /Last 423 0 R /Count 3 >> endobj 411 0 obj << /Title (oQOodHUu#-9) /Dest [ 290 0 R /XYZ 0 500 null ] /Parent 408 0 R /Prev 412 0 R /First 413 0 R /Last 414 0 R /Count 3 >> endobj 412 0 obj << /Title (HeK`qz~Će) /Dest [ 279 0 R /XYZ 0 317 null ] /Parent 408 0 R /Prev 416 0 R /Next 411 0 R /First 417 0 R /Last 417 0 R /Count 1 >> endobj 413 0 obj << /Title (rqYh4OCNcj?`) /Dest [ 290 0 R /XYZ 0 268 null ] /Parent 411 0 R /Next 415 0 R >> endobj 414 0 obj << /Title (Sqn) /Dest [ 301 0 R /XYZ 0 715 null ] /Parent 411 0 R /Prev 415 0 R >> endobj 415 0 obj << /Title (-#*X@) /Dest [ 298 0 R /XYZ 0 426 null ] /Parent 411 0 R /Prev 413 0 R /Next 414 0 R >> endobj 416 0 obj << /Title (2QziKh8vϜ%J) /Dest [ 274 0 R /XYZ 0 362 null ] /Parent 408 0 R /Prev 418 0 R /Next 412 0 R /First 419 0 R /Last 419 0 R /Count 1 >> endobj 417 0 obj << /Title (CR\rIVSz\rE'!) /Dest [ 284 0 R /XYZ 0 655 null ] /Parent 412 0 R >> endobj 418 0 obj << /Title (.WPSOi0 +I) /Dest [ 269 0 R /XYZ 0 637 null ] /Parent 408 0 R /Prev 410 0 R /Next 416 0 R /First 420 0 R /Last 420 0 R /Count 2 >> endobj 419 0 obj << /Title (Ҭ\\T]Xi-b[XvE) /Dest [ 274 0 R /XYZ 0 214 null ] /Parent 416 0 R >> endobj 420 0 obj << /Title (5|GO|eJF) /Dest [ 269 0 R /XYZ 0 359 null ] /Parent 418 0 R /First 421 0 R /Last 421 0 R /Count 1 >> endobj 421 0 obj << /Title (o) /Dest [ 274 0 R /XYZ 0 462 null ] /Parent 420 0 R >> endobj 422 0 obj << /Title (Wwc0!ȘmKS=) /Dest [ 254 0 R /XYZ 0 331 null ] /Parent 410 0 R /Next 423 0 R /First 424 0 R /Last 424 0 R /Count 1 >> endobj 423 0 obj << /Title (1A\n}`^ PDD3R|^WO\\\nHhk) /Dest [ 264 0 R /XYZ 0 264 null ] /Parent 410 0 R /Prev 422 0 R >> endobj 424 0 obj << /Title (RTT1) /Dest [ 264 0 R /XYZ 0 443 null ] /Parent 422 0 R >> endobj 425 0 obj << /Title (aV y=_@a) /Dest [ 233 0 R /XYZ 0 686 null ] /Parent 395 0 R /Prev 427 0 R /Next 409 0 R >> endobj 426 0 obj << /Title (ަR) /Dest [ 248 0 R /XYZ 0 455 null ] /Parent 409 0 R >> endobj 427 0 obj << /Title (A#\)\)冋:Go<) /Dest [ 230 0 R /XYZ 0 686 null ] /Parent 395 0 R /Prev 428 0 R /Next 425 0 R >> endobj 428 0 obj << /Title (< oD-$\)r=pyem0) /Dest [ 215 0 R /XYZ 0 686 null ] /Parent 395 0 R /Prev 429 0 R /Next 427 0 R /First 430 0 R /Last 431 0 R /Count 4 >> endobj 429 0 obj << /Title (gȋڑ]*nYJDj]7\)) /Dest [ 203 0 R /XYZ 0 686 null ] /Parent 395 0 R /Prev 434 0 R /Next 428 0 R /First 435 0 R /Last 436 0 R /Count 3 >> endobj 430 0 obj << /Title (stvWu^?E#) /Dest [ 215 0 R /XYZ 0 488 null ] /Parent 428 0 R /Next 433 0 R >> endobj 431 0 obj << /Title ("&Q\n㪒1{e.P) /Dest [ 221 0 R /XYZ 0 398 null ] /Parent 428 0 R /Prev 432 0 R >> endobj 432 0 obj << /Title ( *IJ\\5x^5BOfHGbM) /Dest [ 221 0 R /XYZ 0 623 null ] /Parent 428 0 R /Prev 433 0 R /Next 431 0 R >> endobj 433 0 obj << /Title (5cduekpVUu) /Dest [ 221 0 R /XYZ 0 714 null ] /Parent 428 0 R /Prev 430 0 R /Next 432 0 R >> endobj 434 0 obj << /Title (,e'!,\)͐ءF) /Dest [ 162 0 R /XYZ 0 686 null ] /Parent 395 0 R /Prev 438 0 R /Next 429 0 R /First 439 0 R /Last 440 0 R /Count 3 >> endobj 435 0 obj << /Title (|1dtz$πdپaJ@M9) /Dest [ 203 0 R /XYZ 0 536 null ] /Parent 429 0 R /Next 437 0 R >> endobj 436 0 obj << /Title (՚jK8n>&c&\(da) /Dest [ 209 0 R /XYZ 0 230 null ] /Parent 429 0 R /Prev 437 0 R >> endobj 437 0 obj << /Title (;sPS#ꋩKh݆l) /Dest [ 206 0 R /XYZ 0 311 null ] /Parent 429 0 R /Prev 435 0 R /Next 436 0 R >> endobj 438 0 obj << /Title (]kM) /Dest [ 136 0 R /XYZ 0 686 null ] /Parent 395 0 R /Prev 396 0 R /Next 434 0 R /First 442 0 R /Last 443 0 R /Count 10 >> endobj 439 0 obj << /Title (09nhP>,yoM C) /Dest [ 162 0 R /XYZ 0 585 null ] /Parent 434 0 R /Next 441 0 R >> endobj 440 0 obj << /Title (#h~tzu$<ݒk8) /Dest [ 187 0 R /XYZ 0 465 null ] /Parent 434 0 R /Prev 441 0 R >> endobj 441 0 obj << /Title (u5@sK`h{Z%q) /Dest [ 178 0 R /XYZ 0 315 null ] /Parent 434 0 R /Prev 439 0 R /Next 440 0 R >> endobj 442 0 obj << /Title (E`1R$'ӰrˈwT}◂IJ *l1`5) /Dest [ 139 0 R /XYZ 0 714 null ] /Parent 438 0 R /Next 451 0 R >> endobj 443 0 obj << /Title (v]ay6/%y:ep, .ȱq ) /Dest [ 150 0 R /XYZ 0 363 null ] /Parent 438 0 R /Prev 444 0 R >> endobj 444 0 obj << /Title ([\n-B"\)\n) /Dest [ 150 0 R /XYZ 0 638 null ] /Parent 438 0 R /Prev 445 0 R /Next 443 0 R >> endobj 445 0 obj << /Title (2q!K) /Dest [ 145 0 R /XYZ 0 283 null ] /Parent 438 0 R /Prev 446 0 R /Next 444 0 R >> endobj 446 0 obj << /Title (^#Me[u?'j}Dd;z) /Dest [ 145 0 R /XYZ 0 411 null ] /Parent 438 0 R /Prev 447 0 R /Next 445 0 R >> endobj 447 0 obj << /Title (QG\)l) /Dest [ 145 0 R /XYZ 0 614 null ] /Parent 438 0 R /Prev 448 0 R /Next 446 0 R >> endobj 448 0 obj << /Title (*lbϞD!) /Dest [ 142 0 R /XYZ 0 197 null ] /Parent 438 0 R /Prev 449 0 R /Next 447 0 R >> endobj 449 0 obj << /Title (]e:^\\qY]}m`"*K) /Dest [ 142 0 R /XYZ 0 411 null ] /Parent 438 0 R /Prev 450 0 R /Next 448 0 R >> endobj 450 0 obj << /Title (0 9W]1f>{`ݛdO:y) /Dest [ 142 0 R /XYZ 0 637 null ] /Parent 438 0 R /Prev 451 0 R /Next 449 0 R >> endobj 451 0 obj << /Title (ր[ag) /Dest [ 139 0 R /XYZ 0 422 null ] /Parent 438 0 R /Prev 442 0 R /Next 450 0 R >> endobj 452 0 obj << /TextBox /Div /Frame /Div /Footnote /Note /Endnote /Note /Shape /Figure /InlineShape /Figure /TOA /TOC /TOAI /TOCI /TOF /TOC /TOFI /TOCI /Superscript /Span /Subscript /Span /Strikeout /Span /Underline /Span /DropCap /Figure /Copyright /P /Standard /P /Inhaltsverzeichnis#20#C3#9Cberschrift /P /Verzeichnis#201 /P /Verzeichnis#202 /P /Verzeichnis#203 /P /Verzeichnis#204 /P /Textk#C3#B6rper /P /#C3#9Cberschrift#201 /P /#C3#9Cberschrift#202 /P /API#20Function /P /API#20Description /P /API#20Method /P /API#20Attribute /P /Program#20Text /P /HTML#20Vorformatiert /P /Tabellen#20#C3#9Cberschrift /P /Tabellen#20Inhalt /P /#C3#9Cberschrift#203 /P /#C3#9Cberschrift#204 /P /License#20Title /P /License#20Subtitle /P /License#20Text /P /License#20Section /P >> endobj 453 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 0 /P 1862 0 R >> endobj 454 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 1 /P 1862 0 R >> endobj 455 0 obj << /Copyright 456 0 R /Standard 489 0 R /Inhaltsverzeichnis#20#C3#9Cberschrift 496 0 R /Verzeichnis#201 498 0 R /Verzeichnis#202 505 0 R /Verzeichnis#203 593 0 R /Verzeichnis#204 597 0 R /Textk#C3#B6rper 663 0 R /#C3#9Cberschrift#201 666 0 R /#C3#9Cberschrift#202 697 0 R /API#20Function 766 0 R /API#20Description 768 0 R /API#20Method 883 0 R /API#20Attribute 917 0 R /Program#20Text 1093 0 R /HTML#20Vorformatiert 1137 0 R /Tabellen#20#C3#9Cberschrift 1195 0 R /Tabellen#20Inhalt 1199 0 R /#C3#9Cberschrift#203 1385 0 R /#C3#9Cberschrift#204 1424 0 R /License#20Title 1814 0 R /License#20Subtitle 1816 0 R /License#20Text 1817 0 R /License#20Section 1822 0 R >> endobj 456 0 obj << /O /Layout /WritingMode /LrTb /StartIndent 0 /EndIndent 0 /TextAlign /Start /SpaceBefore 0 /SpaceAfter 0 /TextIndent 0 >> endobj 457 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 2 /P 1862 0 R >> endobj 458 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 3 /P 1862 0 R >> endobj 459 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 4 /P 1862 0 R >> endobj 460 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 5 /P 1862 0 R >> endobj 461 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 6 /P 1862 0 R >> endobj 462 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 7 /P 1862 0 R >> endobj 463 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 8 /P 1862 0 R >> endobj 464 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 9 /P 1862 0 R >> endobj 465 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 10 /P 1862 0 R >> endobj 466 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 11 /P 1862 0 R >> endobj 467 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 12 /P 1862 0 R >> endobj 468 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 13 /P 1862 0 R >> endobj 469 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 14 /P 1862 0 R >> endobj 470 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 15 /P 1862 0 R >> endobj 471 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 16 /P 1862 0 R >> endobj 472 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 17 /P 1862 0 R >> endobj 473 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 18 /P 1862 0 R >> endobj 474 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 19 /P 1862 0 R >> endobj 475 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 20 /P 1862 0 R >> endobj 476 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 21 /P 1862 0 R >> endobj 477 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 22 /P 1862 0 R >> endobj 478 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 23 /P 1862 0 R >> endobj 479 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 24 /P 1862 0 R >> endobj 480 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 25 /P 1862 0 R >> endobj 481 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 26 /P 1862 0 R >> endobj 482 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 27 /P 1862 0 R >> endobj 483 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 28 /P 1862 0 R >> endobj 484 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 29 /P 1862 0 R >> endobj 485 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 30 /P 1862 0 R >> endobj 486 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 31 /P 1862 0 R >> endobj 487 0 obj << /S /Standard /C /Standard /Pg 1 0 R /K 32 /P 1862 0 R >> endobj 488 0 obj << /S /Standard /C /Standard /Pg 1 0 R /K 33 /P 1862 0 R >> endobj 489 0 obj << /O /Layout /WritingMode /LrTb /StartIndent 0 /EndIndent 0 /TextAlign /Start /SpaceBefore 0 /SpaceAfter 0 /TextIndent 0 >> endobj 490 0 obj << /S /Standard /C /Standard /Pg 1 0 R /K 34 /P 1862 0 R >> endobj 491 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 35 /P 1862 0 R >> endobj 492 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 36 /P 1862 0 R >> endobj 493 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 37 /P 1862 0 R >> endobj 494 0 obj << /S /Inhaltsverzeichnis#20#C3#9Cberschrift /C /Inhaltsverzeichnis#20#C3#9Cberschrift /Pg 4 0 R /K 0 /P 1863 0 R >> endobj 495 0 obj << /S /TOCI /C /Verzeichnis#201 /Pg 4 0 R /K [ 497 0 R 2 499 0 R 4 ] /P 1865 0 R >> endobj 496 0 obj << /O /Layout /WritingMode /LrTb /StartIndent 0 /EndIndent 0 /TextAlign /Start /SpaceBefore 11.89999 /SpaceAfter 70.85001 /TextIndent 0 >> endobj 497 0 obj << /S /Underline /P 495 0 R /A 2129 0 R /Pg 4 0 R /K 1 >> endobj 498 0 obj << /O /Layout /WritingMode /LrTb /StartIndent 0 /EndIndent 0 /TextAlign /Start /SpaceBefore 14.2 /SpaceAfter 0 /TextIndent 0 >> endobj 499 0 obj << /S /Underline /P 495 0 R /A 2130 0 R /Pg 4 0 R /K 3 >> endobj 500 0 obj << /S /TOCI /C /Verzeichnis#201 /Pg 4 0 R /K [ 501 0 R 6 502 0 R 8 ] /P 1865 0 R >> endobj 501 0 obj << /S /Underline /P 500 0 R /A 2131 0 R /Pg 4 0 R /K 5 >> endobj 502 0 obj << /S /Underline /P 500 0 R /A 2132 0 R /Pg 4 0 R /K 7 >> endobj 503 0 obj << /S /TOCI /C /Verzeichnis#202 /Pg 4 0 R /K [ 504 0 R 10 506 0 R 12 ] /P 1865 0 R >> endobj 504 0 obj << /S /Underline /P 503 0 R /A 2133 0 R /Pg 4 0 R /K 9 >> endobj 505 0 obj << /O /Layout /WritingMode /LrTb /StartIndent 28.35001 /EndIndent 0 /TextAlign /Start /SpaceBefore 6 /SpaceAfter 0 /TextIndent 0 >> endobj 506 0 obj << /S /Underline /P 503 0 R /A 2134 0 R /Pg 4 0 R /K 11 >> endobj 507 0 obj << /S /TOCI /C /Verzeichnis#202 /Pg 4 0 R /K [ 508 0 R 14 509 0 R 16 ] /P 1865 0 R >> endobj 508 0 obj << /S /Underline /P 507 0 R /A 2135 0 R /Pg 4 0 R /K 13 >> endobj 509 0 obj << /S /Underline /P 507 0 R /A 2136 0 R /Pg 4 0 R /K 15 >> endobj 510 0 obj << /S /TOCI /C /Verzeichnis#202 /Pg 4 0 R /K [ 511 0 R 18 512 0 R 20 ] /P 1865 0 R >> endobj 511 0 obj << /S /Underline /P 510 0 R /A 2137 0 R /Pg 4 0 R /K 17 >> endobj 512 0 obj << /S /Underline /P 510 0 R /A 2138 0 R /Pg 4 0 R /K 19 >> endobj 513 0 obj << /S /TOCI /C /Verzeichnis#202 /Pg 4 0 R /K [ 514 0 R 22 515 0 R 24 ] /P 1865 0 R >> endobj 514 0 obj << /S /Underline /P 513 0 R /A 2139 0 R /Pg 4 0 R /K 21 >> endobj 515 0 obj << /S /Underline /P 513 0 R /A 2140 0 R /Pg 4 0 R /K 23 >> endobj 516 0 obj << /S /TOCI /C /Verzeichnis#202 /Pg 4 0 R /K [ 517 0 R 26 518 0 R 28 ] /P 1865 0 R >> endobj 517 0 obj << /S /Underline /P 516 0 R /A 2141 0 R /Pg 4 0 R /K 25 >> endobj 518 0 obj << /S /Underline /P 516 0 R /A 2142 0 R /Pg 4 0 R /K 27 >> endobj 519 0 obj << /S /TOCI /C /Verzeichnis#202 /Pg 4 0 R /K [ 520 0 R 30 521 0 R 32 ] /P 1865 0 R >> endobj 520 0 obj << /S /Underline /P 519 0 R /A 2143 0 R /Pg 4 0 R /K 29 >> endobj 521 0 obj << /S /Underline /P 519 0 R /A 2144 0 R /Pg 4 0 R /K 31 >> endobj 522 0 obj << /S /TOCI /C /Verzeichnis#202 /Pg 4 0 R /K [ 523 0 R 34 524 0 R 36 ] /P 1865 0 R >> endobj 523 0 obj << /S /Underline /P 522 0 R /A 2145 0 R /Pg 4 0 R /K 33 >> endobj 524 0 obj << /S /Underline /P 522 0 R /A 2146 0 R /Pg 4 0 R /K 35 >> endobj 525 0 obj << /S /TOCI /C /Verzeichnis#202 /Pg 4 0 R /K [ 526 0 R 38 527 0 R 40 ] /P 1865 0 R >> endobj 526 0 obj << /S /Underline /P 525 0 R /A 2147 0 R /Pg 4 0 R /K 37 >> endobj 527 0 obj << /S /Underline /P 525 0 R /A 2148 0 R /Pg 4 0 R /K 39 >> endobj 528 0 obj << /S /TOCI /C /Verzeichnis#202 /Pg 4 0 R /K [ 529 0 R 42 530 0 R 44 ] /P 1865 0 R >> endobj 529 0 obj << /S /Underline /P 528 0 R /A 2149 0 R /Pg 4 0 R /K 41 >> endobj 530 0 obj << /S /Underline /P 528 0 R /A 2150 0 R /Pg 4 0 R /K 43 >> endobj 531 0 obj << /S /TOCI /C /Verzeichnis#202 /Pg 4 0 R /K [ 532 0 R 46 533 0 R 48 ] /P 1865 0 R >> endobj 532 0 obj << /S /Underline /P 531 0 R /A 2151 0 R /Pg 4 0 R /K 45 >> endobj 533 0 obj << /S /Underline /P 531 0 R /A 2152 0 R /Pg 4 0 R /K 47 >> endobj 534 0 obj << /S /TOCI /C /Verzeichnis#201 /Pg 4 0 R /K [ 535 0 R 50 536 0 R 52 ] /P 1865 0 R >> endobj 535 0 obj << /S /Underline /P 534 0 R /A 2153 0 R /Pg 4 0 R /K 49 >> endobj 536 0 obj << /S /Underline /P 534 0 R /A 2154 0 R /Pg 4 0 R /K 51 >> endobj 537 0 obj << /S /TOCI /C /Verzeichnis#202 /Pg 4 0 R /K [ 538 0 R 54 539 0 R 56 ] /P 1865 0 R >> endobj 538 0 obj << /S /Underline /P 537 0 R /A 2155 0 R /Pg 4 0 R /K 53 >> endobj 539 0 obj << /S /Underline /P 537 0 R /A 2156 0 R /Pg 4 0 R /K 55 >> endobj 540 0 obj << /S /TOCI /C /Verzeichnis#202 /Pg 4 0 R /K [ 541 0 R 58 542 0 R 60 ] /P 1865 0 R >> endobj 541 0 obj << /S /Underline /P 540 0 R /A 2157 0 R /Pg 4 0 R /K 57 >> endobj 542 0 obj << /S /Underline /P 540 0 R /A 2158 0 R /Pg 4 0 R /K 59 >> endobj 543 0 obj << /S /TOCI /C /Verzeichnis#202 /Pg 4 0 R /K [ 544 0 R 62 545 0 R 64 ] /P 1865 0 R >> endobj 544 0 obj << /S /Underline /P 543 0 R /A 2159 0 R /Pg 4 0 R /K 61 >> endobj 545 0 obj << /S /Underline /P 543 0 R /A 2160 0 R /Pg 4 0 R /K 63 >> endobj 546 0 obj << /S /TOCI /C /Verzeichnis#201 /Pg 4 0 R /K [ 547 0 R 66 548 0 R 68 ] /P 1865 0 R >> endobj 547 0 obj << /S /Underline /P 546 0 R /A 2161 0 R /Pg 4 0 R /K 65 >> endobj 548 0 obj << /S /Underline /P 546 0 R /A 2162 0 R /Pg 4 0 R /K 67 >> endobj 549 0 obj << /S /TOCI /C /Verzeichnis#202 /Pg 4 0 R /K [ 550 0 R 70 551 0 R 72 ] /P 1865 0 R >> endobj 550 0 obj << /S /Underline /P 549 0 R /A 2163 0 R /Pg 4 0 R /K 69 >> endobj 551 0 obj << /S /Underline /P 549 0 R /A 2164 0 R /Pg 4 0 R /K 71 >> endobj 552 0 obj << /S /TOCI /C /Verzeichnis#202 /Pg 4 0 R /K [ 553 0 R 74 554 0 R 76 ] /P 1865 0 R >> endobj 553 0 obj << /S /Underline /P 552 0 R /A 2165 0 R /Pg 4 0 R /K 73 >> endobj 554 0 obj << /S /Underline /P 552 0 R /A 2166 0 R /Pg 4 0 R /K 75 >> endobj 555 0 obj << /S /TOCI /C /Verzeichnis#202 /Pg 4 0 R /K [ 556 0 R 78 557 0 R 80 ] /P 1865 0 R >> endobj 556 0 obj << /S /Underline /P 555 0 R /A 2167 0 R /Pg 4 0 R /K 77 >> endobj 557 0 obj << /S /Underline /P 555 0 R /A 2168 0 R /Pg 4 0 R /K 79 >> endobj 558 0 obj << /S /TOCI /C /Verzeichnis#201 /Pg 4 0 R /K [ 559 0 R 82 560 0 R 84 ] /P 1865 0 R >> endobj 559 0 obj << /S /Underline /P 558 0 R /A 2169 0 R /Pg 4 0 R /K 81 >> endobj 560 0 obj << /S /Underline /P 558 0 R /A 2170 0 R /Pg 4 0 R /K 83 >> endobj 561 0 obj << /S /TOCI /C /Verzeichnis#202 /Pg 4 0 R /K [ 562 0 R 86 563 0 R 88 ] /P 1865 0 R >> endobj 562 0 obj << /S /Underline /P 561 0 R /A 2171 0 R /Pg 4 0 R /K 85 >> endobj 563 0 obj << /S /Underline /P 561 0 R /A 2172 0 R /Pg 4 0 R /K 87 >> endobj 564 0 obj << /S /TOCI /C /Verzeichnis#202 /Pg 4 0 R /K [ 565 0 R 90 566 0 R 92 ] /P 1865 0 R >> endobj 565 0 obj << /S /Underline /P 564 0 R /A 2173 0 R /Pg 4 0 R /K 89 >> endobj 566 0 obj << /S /Underline /P 564 0 R /A 2174 0 R /Pg 4 0 R /K 91 >> endobj 567 0 obj << /S /TOCI /C /Verzeichnis#202 /Pg 4 0 R /K [ 568 0 R 94 569 0 R 96 ] /P 1865 0 R >> endobj 568 0 obj << /S /Underline /P 567 0 R /A 2175 0 R /Pg 4 0 R /K 93 >> endobj 569 0 obj << /S /Underline /P 567 0 R /A 2176 0 R /Pg 4 0 R /K 95 >> endobj 570 0 obj << /S /TOCI /C /Verzeichnis#202 /Pg 56 0 R /K [ 571 0 R 1 572 0 R 3 ] /P 1865 0 R >> endobj 571 0 obj << /S /Underline /P 570 0 R /A 2177 0 R /Pg 56 0 R /K 0 >> endobj 572 0 obj << /S /Underline /P 570 0 R /A 2179 0 R /Pg 56 0 R /K 2 >> endobj 573 0 obj << /S /TOCI /C /Verzeichnis#201 /Pg 56 0 R /K [ 574 0 R 5 575 0 R 7 ] /P 1865 0 R >> endobj 574 0 obj << /S /Underline /P 573 0 R /A 2180 0 R /Pg 56 0 R /K 4 >> endobj 575 0 obj << /S /Underline /P 573 0 R /A 2181 0 R /Pg 56 0 R /K 6 >> endobj 576 0 obj << /S /TOCI /C /Verzeichnis#201 /Pg 56 0 R /K [ 577 0 R 9 578 0 R 11 ] /P 1865 0 R >> endobj 577 0 obj << /S /Underline /P 576 0 R /A 2182 0 R /Pg 56 0 R /K 8 >> endobj 578 0 obj << /S /Underline /P 576 0 R /A 2183 0 R /Pg 56 0 R /K 10 >> endobj 579 0 obj << /S /TOCI /C /Verzeichnis#201 /Pg 56 0 R /K [ 580 0 R 13 581 0 R 15 ] /P 1865 0 R >> endobj 580 0 obj << /S /Underline /P 579 0 R /A 2184 0 R /Pg 56 0 R /K 12 >> endobj 581 0 obj << /S /Underline /P 579 0 R /A 2185 0 R /Pg 56 0 R /K 14 >> endobj 582 0 obj << /S /TOCI /C /Verzeichnis#202 /Pg 56 0 R /K [ 583 0 R 17 584 0 R 19 ] /P 1865 0 R >> endobj 583 0 obj << /S /Underline /P 582 0 R /A 2186 0 R /Pg 56 0 R /K 16 >> endobj 584 0 obj << /S /Underline /P 582 0 R /A 2187 0 R /Pg 56 0 R /K 18 >> endobj 585 0 obj << /S /TOCI /C /Verzeichnis#201 /Pg 56 0 R /K [ 586 0 R 21 587 0 R 23 ] /P 1865 0 R >> endobj 586 0 obj << /S /Underline /P 585 0 R /A 2188 0 R /Pg 56 0 R /K 20 >> endobj 587 0 obj << /S /Underline /P 585 0 R /A 2189 0 R /Pg 56 0 R /K 22 >> endobj 588 0 obj << /S /TOCI /C /Verzeichnis#202 /Pg 56 0 R /K [ 589 0 R 25 590 0 R 27 ] /P 1865 0 R >> endobj 589 0 obj << /S /Underline /P 588 0 R /A 2190 0 R /Pg 56 0 R /K 24 >> endobj 590 0 obj << /S /Underline /P 588 0 R /A 2191 0 R /Pg 56 0 R /K 26 >> endobj 591 0 obj << /S /TOCI /C /Verzeichnis#203 /Pg 56 0 R /K [ 592 0 R 29 594 0 R 31 ] /P 1865 0 R >> endobj 592 0 obj << /S /Underline /P 591 0 R /A 2192 0 R /Pg 56 0 R /K 28 >> endobj 593 0 obj << /O /Layout /WritingMode /LrTb /StartIndent 56.7 /EndIndent 0 /TextAlign /Start /SpaceBefore 6 /SpaceAfter 0 /TextIndent 0 >> endobj 594 0 obj << /S /Underline /P 591 0 R /A 2193 0 R /Pg 56 0 R /K 30 >> endobj 595 0 obj << /S /TOCI /C /Verzeichnis#204 /Pg 56 0 R /K [ 596 0 R 33 ] /P 1865 0 R >> endobj 596 0 obj << /S /Underline /P 595 0 R /A 2194 0 R /Pg 56 0 R /K 32 >> endobj 597 0 obj << /O /Layout /WritingMode /LrTb /StartIndent 85.05 /EndIndent 0 /TextAlign /Start /SpaceBefore 6 /SpaceAfter 0 /TextIndent 0 >> endobj 598 0 obj << /S /TOCI /C /Verzeichnis#203 /Pg 56 0 R /K [ 599 0 R 35 600 0 R 37 ] /P 1865 0 R >> endobj 599 0 obj << /S /Underline /P 598 0 R /A 2195 0 R /Pg 56 0 R /K 34 >> endobj 600 0 obj << /S /Underline /P 598 0 R /A 2196 0 R /Pg 56 0 R /K 36 >> endobj 601 0 obj << /S /TOCI /C /Verzeichnis#202 /Pg 56 0 R /K [ 602 0 R 39 603 0 R 41 ] /P 1865 0 R >> endobj 602 0 obj << /S /Underline /P 601 0 R /A 2197 0 R /Pg 56 0 R /K 38 >> endobj 603 0 obj << /S /Underline /P 601 0 R /A 2198 0 R /Pg 56 0 R /K 40 >> endobj 604 0 obj << /S /TOCI /C /Verzeichnis#203 /Pg 56 0 R /K [ 605 0 R 43 606 0 R 45 ] /P 1865 0 R >> endobj 605 0 obj << /S /Underline /P 604 0 R /A 2199 0 R /Pg 56 0 R /K 42 >> endobj 606 0 obj << /S /Underline /P 604 0 R /A 2200 0 R /Pg 56 0 R /K 44 >> endobj 607 0 obj << /S /TOCI /C /Verzeichnis#204 /Pg 56 0 R /K [ 608 0 R 47 ] /P 1865 0 R >> endobj 608 0 obj << /S /Underline /P 607 0 R /A 2201 0 R /Pg 56 0 R /K 46 >> endobj 609 0 obj << /S /TOCI /C /Verzeichnis#202 /Pg 56 0 R /K [ 610 0 R 49 611 0 R 51 ] /P 1865 0 R >> endobj 610 0 obj << /S /Underline /P 609 0 R /A 2202 0 R /Pg 56 0 R /K 48 >> endobj 611 0 obj << /S /Underline /P 609 0 R /A 2203 0 R /Pg 56 0 R /K 50 >> endobj 612 0 obj << /S /TOCI /C /Verzeichnis#203 /Pg 56 0 R /K [ 613 0 R 53 614 0 R 55 ] /P 1865 0 R >> endobj 613 0 obj << /S /Underline /P 612 0 R /A 2204 0 R /Pg 56 0 R /K 52 >> endobj 614 0 obj << /S /Underline /P 612 0 R /A 2205 0 R /Pg 56 0 R /K 54 >> endobj 615 0 obj << /S /TOCI /C /Verzeichnis#202 /Pg 56 0 R /K [ 616 0 R 57 617 0 R 59 ] /P 1865 0 R >> endobj 616 0 obj << /S /Underline /P 615 0 R /A 2206 0 R /Pg 56 0 R /K 56 >> endobj 617 0 obj << /S /Underline /P 615 0 R /A 2207 0 R /Pg 56 0 R /K 58 >> endobj 618 0 obj << /S /TOCI /C /Verzeichnis#203 /Pg 56 0 R /K [ 619 0 R 61 620 0 R 63 ] /P 1865 0 R >> endobj 619 0 obj << /S /Underline /P 618 0 R /A 2208 0 R /Pg 56 0 R /K 60 >> endobj 620 0 obj << /S /Underline /P 618 0 R /A 2209 0 R /Pg 56 0 R /K 62 >> endobj 621 0 obj << /S /TOCI /C /Verzeichnis#202 /Pg 56 0 R /K [ 622 0 R 65 623 0 R 67 ] /P 1865 0 R >> endobj 622 0 obj << /S /Underline /P 621 0 R /A 2210 0 R /Pg 56 0 R /K 64 >> endobj 623 0 obj << /S /Underline /P 621 0 R /A 2211 0 R /Pg 56 0 R /K 66 >> endobj 624 0 obj << /S /TOCI /C /Verzeichnis#203 /Pg 56 0 R /K [ 625 0 R 69 626 0 R 71 ] /P 1865 0 R >> endobj 625 0 obj << /S /Underline /P 624 0 R /A 2212 0 R /Pg 56 0 R /K 68 >> endobj 626 0 obj << /S /Underline /P 624 0 R /A 2213 0 R /Pg 56 0 R /K 70 >> endobj 627 0 obj << /S /TOCI /C /Verzeichnis#203 /Pg 56 0 R /K [ 628 0 R 73 629 0 R 75 ] /P 1865 0 R >> endobj 628 0 obj << /S /Underline /P 627 0 R /A 2214 0 R /Pg 56 0 R /K 72 >> endobj 629 0 obj << /S /Underline /P 627 0 R /A 2215 0 R /Pg 56 0 R /K 74 >> endobj 630 0 obj << /S /TOCI /C /Verzeichnis#203 /Pg 56 0 R /K [ 631 0 R 77 632 0 R 79 ] /P 1865 0 R >> endobj 631 0 obj << /S /Underline /P 630 0 R /A 2216 0 R /Pg 56 0 R /K 76 >> endobj 632 0 obj << /S /Underline /P 630 0 R /A 2217 0 R /Pg 56 0 R /K 78 >> endobj 633 0 obj << /S /TOCI /C /Verzeichnis#201 /Pg 56 0 R /K [ 634 0 R 81 635 0 R 83 ] /P 1865 0 R >> endobj 634 0 obj << /S /Underline /P 633 0 R /A 2218 0 R /Pg 56 0 R /K 80 >> endobj 635 0 obj << /S /Underline /P 633 0 R /A 2219 0 R /Pg 56 0 R /K 82 >> endobj 636 0 obj << /S /TOCI /C /Verzeichnis#201 /Pg 56 0 R /K [ 637 0 R 85 638 0 R 87 ] /P 1865 0 R >> endobj 637 0 obj << /S /Underline /P 636 0 R /A 2220 0 R /Pg 56 0 R /K 84 >> endobj 638 0 obj << /S /Underline /P 636 0 R /A 2221 0 R /Pg 56 0 R /K 86 >> endobj 639 0 obj << /S /TOCI /C /Verzeichnis#202 /Pg 56 0 R /K [ 640 0 R 89 641 0 R 91 ] /P 1865 0 R >> endobj 640 0 obj << /S /Underline /P 639 0 R /A 2222 0 R /Pg 56 0 R /K 88 >> endobj 641 0 obj << /S /Underline /P 639 0 R /A 2223 0 R /Pg 56 0 R /K 90 >> endobj 642 0 obj << /S /TOCI /C /Verzeichnis#202 /Pg 56 0 R /K [ 643 0 R 93 644 0 R 95 ] /P 1865 0 R >> endobj 643 0 obj << /S /Underline /P 642 0 R /A 2224 0 R /Pg 56 0 R /K 92 >> endobj 644 0 obj << /S /Underline /P 642 0 R /A 2225 0 R /Pg 56 0 R /K 94 >> endobj 645 0 obj << /S /TOCI /C /Verzeichnis#202 /Pg 56 0 R /K [ 646 0 R 97 647 0 R 99 ] /P 1865 0 R >> endobj 646 0 obj << /S /Underline /P 645 0 R /A 2226 0 R /Pg 56 0 R /K 96 >> endobj 647 0 obj << /S /Underline /P 645 0 R /A 2227 0 R /Pg 56 0 R /K 98 >> endobj 648 0 obj << /S /TOCI /C /Verzeichnis#204 /Pg 56 0 R /K [ 649 0 R 101 ] /P 1865 0 R >> endobj 649 0 obj << /S /Underline /P 648 0 R /A 2228 0 R /Pg 56 0 R /K 100 >> endobj 650 0 obj << /S /TOCI /C /Verzeichnis#204 /Pg 56 0 R /K [ 651 0 R 103 ] /P 1865 0 R >> endobj 651 0 obj << /S /Underline /P 650 0 R /A 2229 0 R /Pg 56 0 R /K 102 >> endobj 652 0 obj << /S /TOCI /C /Verzeichnis#201 /Pg 56 0 R /K [ 653 0 R 105 654 0 R 107 ] /P 1865 0 R >> endobj 653 0 obj << /S /Underline /P 652 0 R /A 2230 0 R /Pg 56 0 R /K 104 >> endobj 654 0 obj << /S /Underline /P 652 0 R /A 2231 0 R /Pg 56 0 R /K 106 >> endobj 655 0 obj << /S /TOCI /C /Verzeichnis#201 /Pg 118 0 R /K [ 656 0 R 1 657 0 R 3 ] /P 1865 0 R >> endobj 656 0 obj << /S /Underline /P 655 0 R /A 2232 0 R /Pg 118 0 R /K 0 >> endobj 657 0 obj << /S /Underline /P 655 0 R /A 2234 0 R /Pg 118 0 R /K 2 >> endobj 658 0 obj << /S /TOCI /C /Verzeichnis#201 /Pg 118 0 R /K [ 659 0 R 5 660 0 R 7 ] /P 1865 0 R >> endobj 659 0 obj << /S /Underline /P 658 0 R /A 2235 0 R /Pg 118 0 R /K 4 >> endobj 660 0 obj << /S /Underline /P 658 0 R /A 2236 0 R /Pg 118 0 R /K 6 >> endobj 661 0 obj << /S /TOCI /C /Textk#C3#B6rper /Pg 118 0 R /K 8 /P 1865 0 R >> endobj 662 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 118 0 R /K 9 /P 1863 0 R >> endobj 663 0 obj << /O /Layout /WritingMode /LrTb /StartIndent 42.55 /EndIndent 0 /TextAlign /Justify /SpaceBefore 5.64999 /SpaceAfter 5.95 /TextIndent 0 >> endobj 664 0 obj << /S /LBody /C /#C3#9Cberschrift#201 /Pg 129 0 R /K 0 /P 1978 0 R >> endobj 665 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 129 0 R /K 1 /P 1864 0 R >> endobj 666 0 obj << /O /Layout /WritingMode /LrTb /StartIndent 42.55 /EndIndent 0 /TextAlign /Start /SpaceBefore 28.35001 /SpaceAfter 8.5 /TextIndent -42.54999 >> endobj 667 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 129 0 R /K 2 /P 1864 0 R >> endobj 668 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 129 0 R /K 3 /P 1864 0 R >> endobj 669 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 129 0 R /K 4 /P 1864 0 R >> endobj 670 0 obj << /S /LBody /A [ 671 0 R ] /C /Textk#C3#B6rper /Pg 129 0 R /K [ 5 672 0 R 7 ] /P 1980 0 R >> endobj 671 0 obj << /O /Layout /StartIndent 78.55 /TextIndent -17.99998 >> endobj 672 0 obj << /S /Link /P 670 0 R /K [ 673 0 R << /Type /OBJR /Pg 129 0 R /Obj 360 0 R >> ] >> endobj 673 0 obj << /S /Underline /P 672 0 R /A 2238 0 R /Pg 129 0 R /K 6 >> endobj 674 0 obj << /S /LBody /A [ 675 0 R ] /C /Textk#C3#B6rper /Pg 129 0 R /K [ 8 676 0 R 10 ] /P 1981 0 R >> endobj 675 0 obj << /O /Layout /StartIndent 78.55 /TextIndent -17.99998 >> endobj 676 0 obj << /S /Link /P 674 0 R /K [ 677 0 R << /Type /OBJR /Pg 129 0 R /Obj 361 0 R >> ] >> endobj 677 0 obj << /S /Underline /P 676 0 R /A 2239 0 R /Pg 129 0 R /K 9 >> endobj 678 0 obj << /S /LBody /A [ 679 0 R ] /C /Textk#C3#B6rper /Pg 129 0 R /K [ 11 680 0 R 13 ] /P 1982 0 R >> endobj 679 0 obj << /O /Layout /StartIndent 78.55 /TextIndent -17.99998 >> endobj 680 0 obj << /S /Link /P 678 0 R /K [ 681 0 R << /Type /OBJR /Pg 129 0 R /Obj 362 0 R >> ] >> endobj 681 0 obj << /S /Underline /P 680 0 R /A 2240 0 R /Pg 129 0 R /K 12 >> endobj 682 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 129 0 R /K 14 /P 1864 0 R >> endobj 683 0 obj << /S /LBody /C /#C3#9Cberschrift#201 /Pg 136 0 R /K 0 /P 1984 0 R >> endobj 684 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 136 0 R /K 1 /P 1864 0 R >> endobj 685 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 136 0 R /K 2 /P 1864 0 R >> endobj 686 0 obj << /S /Textk#C3#B6rper /A [ 687 0 R ] /C /Textk#C3#B6rper /Pg 136 0 R /K 3 /P 1864 0 R >> endobj 687 0 obj << /O /Layout /StartIndent 56.60001 >> endobj 688 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 136 0 R /K 4 /P 1864 0 R >> endobj 689 0 obj << /S /Textk#C3#B6rper /A [ 690 0 R ] /C /Textk#C3#B6rper /Pg 136 0 R /K 5 /P 1864 0 R >> endobj 690 0 obj << /O /Layout /StartIndent 56.60001 >> endobj 691 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 136 0 R /K 6 /P 1864 0 R >> endobj 692 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 136 0 R /K 7 /P 1864 0 R >> endobj 693 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 136 0 R /K 8 /P 1864 0 R >> endobj 694 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 136 0 R /K 9 /P 1864 0 R >> endobj 695 0 obj << /S /LBody /C /#C3#9Cberschrift#202 /Pg 139 0 R /K [ 0 1 ] /P 1986 0 R >> endobj 696 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 139 0 R /K 2 /P 1864 0 R >> endobj 697 0 obj << /O /Layout /WritingMode /LrTb /StartIndent 42.55 /EndIndent 0 /TextAlign /Start /SpaceBefore 34 /SpaceAfter 14.14999 /TextIndent -42.54999 >> endobj 698 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 139 0 R /K 3 /P 1864 0 R >> endobj 699 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 139 0 R /K 4 /P 1864 0 R >> endobj 700 0 obj << /S /LBody /C /#C3#9Cberschrift#202 /Pg 139 0 R /K 5 /P 1988 0 R >> endobj 701 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 139 0 R /K 6 /P 1864 0 R >> endobj 702 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 139 0 R /K 7 /P 1864 0 R >> endobj 703 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 139 0 R /K 8 /P 1864 0 R >> endobj 704 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 139 0 R /P 1864 0 R /K [ 9 << /Type /MCR /Pg 142 0 R /MCID 0 >> ] >> endobj 705 0 obj << /S /LBody /C /#C3#9Cberschrift#202 /Pg 142 0 R /K 1 /P 1990 0 R >> endobj 706 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 142 0 R /K 2 /P 1864 0 R >> endobj 707 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 142 0 R /K 3 /P 1864 0 R >> endobj 708 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 142 0 R /K 4 /P 1864 0 R >> endobj 709 0 obj << /S /LBody /C /#C3#9Cberschrift#202 /Pg 142 0 R /K 5 /P 1992 0 R >> endobj 710 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 142 0 R /K 6 /P 1864 0 R >> endobj 711 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 142 0 R /K 7 /P 1864 0 R >> endobj 712 0 obj << /S /LBody /C /#C3#9Cberschrift#202 /Pg 142 0 R /K 8 /P 1994 0 R >> endobj 713 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 142 0 R /P 1864 0 R /K [ 9 << /Type /MCR /Pg 145 0 R /MCID 0 >> ] >> endobj 714 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 145 0 R /K 1 /P 1864 0 R >> endobj 715 0 obj << /S /LBody /C /#C3#9Cberschrift#202 /Pg 145 0 R /K 2 /P 1996 0 R >> endobj 716 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 145 0 R /K [ 3 717 0 R 5 ] /P 1864 0 R >> endobj 717 0 obj << /S /Link /P 716 0 R /K [ 718 0 R << /Type /OBJR /Pg 145 0 R /Obj 363 0 R >> ] >> endobj 718 0 obj << /S /Underline /P 717 0 R /A 2245 0 R /Pg 145 0 R /K 4 >> endobj 719 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 145 0 R /K 6 /P 1864 0 R >> endobj 720 0 obj << /S /LBody /C /#C3#9Cberschrift#202 /Pg 145 0 R /K 7 /P 1998 0 R >> endobj 721 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 145 0 R /K 8 /P 1864 0 R >> endobj 722 0 obj << /S /LBody /C /#C3#9Cberschrift#202 /Pg 145 0 R /K 9 /P 2000 0 R >> endobj 723 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 145 0 R /K 10 /P 1864 0 R >> endobj 724 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 150 0 R /K [ 0 725 0 R 2 727 0 R 4 ] /P 1864 0 R >> endobj 725 0 obj << /S /Link /P 724 0 R /K [ 726 0 R << /Type /OBJR /Pg 150 0 R /Obj 364 0 R >> ] >> endobj 726 0 obj << /S /Underline /P 725 0 R /A 2247 0 R /Pg 150 0 R /K 1 >> endobj 727 0 obj << /S /Link /P 724 0 R /K [ 728 0 R << /Type /OBJR /Pg 150 0 R /Obj 365 0 R >> ] >> endobj 728 0 obj << /S /Underline /P 727 0 R /A 2248 0 R /Pg 150 0 R /K 3 >> endobj 729 0 obj << /S /LBody /C /#C3#9Cberschrift#202 /Pg 150 0 R /K 5 /P 2002 0 R >> endobj 730 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 150 0 R /K 6 /P 1864 0 R >> endobj 731 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 150 0 R /K 7 /P 1864 0 R >> endobj 732 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 150 0 R /K 8 /P 1864 0 R >> endobj 733 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 150 0 R /K 9 /P 1864 0 R >> endobj 734 0 obj << /S /LBody /C /#C3#9Cberschrift#202 /Pg 150 0 R /K 10 /P 2004 0 R >> endobj 735 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 150 0 R /K 11 /P 1864 0 R >> endobj 736 0 obj << /S /LBody /A [ 737 0 R ] /C /Textk#C3#B6rper /Pg 150 0 R /K [ 12 738 0 R 14 ] /P 2006 0 R >> endobj 737 0 obj << /O /Layout /StartIndent 78.55 /TextIndent -17.99998 >> endobj 738 0 obj << /S /Link /P 736 0 R /K [ 739 0 R << /Type /OBJR /Pg 150 0 R /Obj 366 0 R >> ] >> endobj 739 0 obj << /S /Underline /P 738 0 R /A 2249 0 R /Pg 150 0 R /K 13 >> endobj 740 0 obj << /S /LBody /A [ 741 0 R ] /C /Textk#C3#B6rper /Pg 150 0 R /K [ 15 742 0 R 17 ] /P 2007 0 R >> endobj 741 0 obj << /O /Layout /StartIndent 78.55 /TextIndent -17.99998 >> endobj 742 0 obj << /S /Link /P 740 0 R /K [ 743 0 R << /Type /OBJR /Pg 150 0 R /Obj 367 0 R >> ] >> endobj 743 0 obj << /S /Underline /P 742 0 R /A 2250 0 R /Pg 150 0 R /K 16 >> endobj 744 0 obj << /S /LBody /A [ 745 0 R ] /C /Textk#C3#B6rper /Pg 150 0 R /K [ 18 746 0 R 20 ] /P 2008 0 R >> endobj 745 0 obj << /O /Layout /StartIndent 78.55 /TextIndent -17.99998 >> endobj 746 0 obj << /S /Link /P 744 0 R /K [ 747 0 R << /Type /OBJR /Pg 150 0 R /Obj 368 0 R >> ] >> endobj 747 0 obj << /S /Underline /P 746 0 R /A 2251 0 R /Pg 150 0 R /K 19 >> endobj 748 0 obj << /S /LBody /A [ 749 0 R ] /C /Textk#C3#B6rper /Pg 150 0 R /K [ 21 750 0 R 23 ] /P 2009 0 R >> endobj 749 0 obj << /O /Layout /StartIndent 78.55 /TextIndent -17.99998 >> endobj 750 0 obj << /S /Link /P 748 0 R /K [ 751 0 R << /Type /OBJR /Pg 150 0 R /Obj 369 0 R >> ] >> endobj 751 0 obj << /S /Underline /P 750 0 R /A 2252 0 R /Pg 150 0 R /K 22 >> endobj 752 0 obj << /S /LBody /A [ 753 0 R ] /C /Textk#C3#B6rper /Pg 150 0 R /K [ 24 754 0 R 26 ] /P 2010 0 R >> endobj 753 0 obj << /O /Layout /StartIndent 78.55 /TextIndent -17.99998 >> endobj 754 0 obj << /S /Link /P 752 0 R /K [ 755 0 R << /Type /OBJR /Pg 150 0 R /Obj 370 0 R >> ] >> endobj 755 0 obj << /S /Underline /P 754 0 R /A 2253 0 R /Pg 150 0 R /K 25 >> endobj 756 0 obj << /S /LBody /A [ 757 0 R ] /C /Textk#C3#B6rper /Pg 150 0 R /K [ 27 758 0 R 29 ] /P 2011 0 R >> endobj 757 0 obj << /O /Layout /StartIndent 78.55 /TextIndent -17.99998 >> endobj 758 0 obj << /S /Link /P 756 0 R /K [ 759 0 R << /Type /OBJR /Pg 150 0 R /Obj 371 0 R >> ] >> endobj 759 0 obj << /S /Underline /P 758 0 R /A 2254 0 R /Pg 150 0 R /K 28 >> endobj 760 0 obj << /S /LBody /C /#C3#9Cberschrift#201 /Pg 162 0 R /K 0 /P 2013 0 R >> endobj 761 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 162 0 R /K 1 /P 1864 0 R >> endobj 762 0 obj << /S /LBody /C /#C3#9Cberschrift#202 /Pg 162 0 R /K 2 /P 2015 0 R >> endobj 763 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 162 0 R /K 3 /P 1864 0 R >> endobj 764 0 obj << /S /API#20Function /C /API#20Function /Pg 162 0 R /K 4 /P 1864 0 R >> endobj 765 0 obj << /S /API#20Description /C /API#20Description /Pg 162 0 R /K 5 /P 1864 0 R >> endobj 766 0 obj << /O /Layout /WritingMode /LrTb /StartIndent 56.75 /EndIndent 0 /TextAlign /Start /SpaceBefore 5.64999 /SpaceAfter 5.95 /TextIndent -14.19998 >> endobj 767 0 obj << /S /API#20Description /C /API#20Description /Pg 162 0 R /K 6 /P 1864 0 R >> endobj 768 0 obj << /O /Layout /WritingMode /LrTb /StartIndent 56.7 /EndIndent 0 /TextAlign /Start /SpaceBefore 0 /SpaceAfter 5.95 /TextIndent 0 >> endobj 769 0 obj << /S /API#20Description /C /API#20Description /Pg 162 0 R /K 7 /P 1864 0 R >> endobj 770 0 obj << /S /API#20Description /C /API#20Description /Pg 162 0 R /K 8 /P 1864 0 R >> endobj 771 0 obj << /S /API#20Description /C /API#20Description /Pg 162 0 R /K 9 /P 1864 0 R >> endobj 772 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 162 0 R /K 10 /P 1864 0 R >> endobj 773 0 obj << /S /API#20Function /C /API#20Function /Pg 162 0 R /K 11 /P 1864 0 R >> endobj 774 0 obj << /S /API#20Description /C /API#20Description /Pg 162 0 R /K 12 /P 1864 0 R >> endobj 775 0 obj << /S /API#20Function /C /API#20Function /Pg 162 0 R /K 13 /P 1864 0 R >> endobj 776 0 obj << /S /API#20Description /C /API#20Description /Pg 162 0 R /K 14 /P 1864 0 R >> endobj 777 0 obj << /S /API#20Description /C /API#20Description /Pg 162 0 R /K 15 /P 1864 0 R >> endobj 778 0 obj << /S /API#20Description /C /API#20Description /Pg 165 0 R /K 0 /P 1864 0 R >> endobj 779 0 obj << /S /API#20Function /C /API#20Function /Pg 165 0 R /K 1 /P 1864 0 R >> endobj 780 0 obj << /S /API#20Description /C /API#20Description /Pg 165 0 R /K 2 /P 1864 0 R >> endobj 781 0 obj << /S /API#20Function /C /API#20Function /Pg 165 0 R /K 3 /P 1864 0 R >> endobj 782 0 obj << /S /API#20Description /C /API#20Description /Pg 165 0 R /K 4 /P 1864 0 R >> endobj 783 0 obj << /S /API#20Description /C /API#20Description /Pg 165 0 R /K 5 /P 1864 0 R >> endobj 784 0 obj << /S /API#20Description /C /API#20Description /Pg 165 0 R /K 6 /P 1864 0 R >> endobj 785 0 obj << /S /API#20Function /C /API#20Function /Pg 165 0 R /K 7 /P 1864 0 R >> endobj 786 0 obj << /S /API#20Description /C /API#20Description /Pg 165 0 R /K 8 /P 1864 0 R >> endobj 787 0 obj << /S /API#20Description /C /API#20Description /Pg 165 0 R /K 9 /P 1864 0 R >> endobj 788 0 obj << /S /API#20Description /C /API#20Description /Pg 165 0 R /K 10 /P 1864 0 R >> endobj 789 0 obj << /S /API#20Function /C /API#20Function /Pg 165 0 R /K 11 /P 1864 0 R >> endobj 790 0 obj << /S /API#20Description /C /API#20Description /Pg 165 0 R /K 12 /P 1864 0 R >> endobj 791 0 obj << /S /API#20Function /C /API#20Function /Pg 165 0 R /K 13 /P 1864 0 R >> endobj 792 0 obj << /S /API#20Description /C /API#20Description /Pg 165 0 R /K 14 /P 1864 0 R >> endobj 793 0 obj << /S /API#20Description /C /API#20Description /Pg 165 0 R /K 15 /P 1864 0 R >> endobj 794 0 obj << /S /API#20Description /C /API#20Description /Pg 165 0 R /K 16 /P 1864 0 R >> endobj 795 0 obj << /S /API#20Function /C /API#20Function /Pg 165 0 R /K 17 /P 1864 0 R >> endobj 796 0 obj << /S /API#20Description /C /API#20Description /Pg 165 0 R /K 18 /P 1864 0 R >> endobj 797 0 obj << /S /API#20Description /C /API#20Description /Pg 165 0 R /K [ 19 798 0 R 21 ] /P 1864 0 R >> endobj 798 0 obj << /S /Link /P 797 0 R /K [ 799 0 R << /Type /OBJR /Pg 165 0 R /Obj 372 0 R >> ] >> endobj 799 0 obj << /S /Underline /P 798 0 R /A 2257 0 R /Pg 165 0 R /K 20 >> endobj 800 0 obj << /S /API#20Description /C /API#20Description /Pg 170 0 R /K [ 801 0 R 1 ] /P 1864 0 R >> endobj 801 0 obj << /S /Underline /P 800 0 R /A 2258 0 R /Pg 170 0 R /K 0 >> endobj 802 0 obj << /S /API#20Function /C /API#20Function /Pg 170 0 R /K 2 /P 1864 0 R >> endobj 803 0 obj << /S /API#20Description /C /API#20Description /Pg 170 0 R /K 3 /P 1864 0 R >> endobj 804 0 obj << /S /API#20Description /C /API#20Description /Pg 170 0 R /K [ 4 805 0 R 6 ] /P 1864 0 R >> endobj 805 0 obj << /S /Link /P 804 0 R /K [ 806 0 R << /Type /OBJR /Pg 170 0 R /Obj 373 0 R >> ] >> endobj 806 0 obj << /S /Underline /P 805 0 R /A 2260 0 R /Pg 170 0 R /K 5 >> endobj 807 0 obj << /S /API#20Function /C /API#20Function /Pg 170 0 R /K 7 /P 1864 0 R >> endobj 808 0 obj << /S /API#20Description /C /API#20Description /Pg 170 0 R /K 8 /P 1864 0 R >> endobj 809 0 obj << /S /API#20Function /C /API#20Function /Pg 170 0 R /K 9 /P 1864 0 R >> endobj 810 0 obj << /S /API#20Description /C /API#20Description /Pg 170 0 R /K 10 /P 1864 0 R >> endobj 811 0 obj << /S /API#20Description /C /API#20Description /Pg 170 0 R /K 11 /P 1864 0 R >> endobj 812 0 obj << /S /API#20Description /C /API#20Description /Pg 170 0 R /K 12 /P 1864 0 R >> endobj 813 0 obj << /S /API#20Description /C /API#20Description /Pg 170 0 R /K 13 /P 1864 0 R >> endobj 814 0 obj << /S /API#20Function /C /API#20Function /Pg 170 0 R /K 14 /P 1864 0 R >> endobj 815 0 obj << /S /API#20Description /C /API#20Description /Pg 170 0 R /K 15 /P 1864 0 R >> endobj 816 0 obj << /S /API#20Function /C /API#20Function /Pg 170 0 R /K 16 /P 1864 0 R >> endobj 817 0 obj << /S /API#20Description /C /API#20Description /Pg 170 0 R /K 17 /P 1864 0 R >> endobj 818 0 obj << /S /API#20Description /C /API#20Description /Pg 170 0 R /K 18 /P 1864 0 R >> endobj 819 0 obj << /S /API#20Description /C /API#20Description /Pg 170 0 R /K 19 /P 1864 0 R >> endobj 820 0 obj << /S /API#20Function /C /API#20Function /Pg 170 0 R /K 20 /P 1864 0 R >> endobj 821 0 obj << /S /API#20Description /C /API#20Description /Pg 170 0 R /K 21 /P 1864 0 R >> endobj 822 0 obj << /S /API#20Function /C /API#20Function /Pg 175 0 R /K 0 /P 1864 0 R >> endobj 823 0 obj << /S /API#20Description /C /API#20Description /Pg 175 0 R /K 1 /P 1864 0 R >> endobj 824 0 obj << /S /API#20Function /C /API#20Function /Pg 175 0 R /K 2 /P 1864 0 R >> endobj 825 0 obj << /S /API#20Description /C /API#20Description /Pg 175 0 R /K 3 /P 1864 0 R >> endobj 826 0 obj << /S /API#20Function /C /API#20Function /Pg 175 0 R /K 4 /P 1864 0 R >> endobj 827 0 obj << /S /API#20Description /C /API#20Description /Pg 175 0 R /K 5 /P 1864 0 R >> endobj 828 0 obj << /S /API#20Function /C /API#20Function /Pg 175 0 R /K 6 /P 1864 0 R >> endobj 829 0 obj << /S /API#20Description /C /API#20Description /Pg 175 0 R /K 7 /P 1864 0 R >> endobj 830 0 obj << /S /API#20Function /C /API#20Function /Pg 175 0 R /K 8 /P 1864 0 R >> endobj 831 0 obj << /S /API#20Description /C /API#20Description /Pg 175 0 R /K 9 /P 1864 0 R >> endobj 832 0 obj << /S /API#20Function /C /API#20Function /Pg 175 0 R /K 10 /P 1864 0 R >> endobj 833 0 obj << /S /API#20Description /C /API#20Description /Pg 175 0 R /K 11 /P 1864 0 R >> endobj 834 0 obj << /S /API#20Description /C /API#20Description /Pg 175 0 R /K 12 /P 1864 0 R >> endobj 835 0 obj << /S /API#20Function /C /API#20Function /Pg 175 0 R /K 13 /P 1864 0 R >> endobj 836 0 obj << /S /API#20Description /C /API#20Description /Pg 175 0 R /K 14 /P 1864 0 R >> endobj 837 0 obj << /S /API#20Description /C /API#20Description /Pg 175 0 R /K 15 /P 1864 0 R >> endobj 838 0 obj << /S /API#20Description /C /API#20Description /Pg 175 0 R /K 16 /P 1864 0 R >> endobj 839 0 obj << /S /API#20Description /C /API#20Description /Pg 175 0 R /K 17 /P 1864 0 R >> endobj 840 0 obj << /S /API#20Function /C /API#20Function /Pg 175 0 R /K 18 /P 1864 0 R >> endobj 841 0 obj << /S /API#20Description /C /API#20Description /Pg 175 0 R /K 19 /P 1864 0 R >> endobj 842 0 obj << /S /API#20Description /C /API#20Description /Pg 175 0 R /K 20 /P 1864 0 R >> endobj 843 0 obj << /S /API#20Function /C /API#20Function /Pg 175 0 R /K 21 /P 1864 0 R >> endobj 844 0 obj << /S /API#20Description /C /API#20Description /Pg 175 0 R /K 22 /P 1864 0 R >> endobj 845 0 obj << /S /API#20Description /C /API#20Description /Pg 175 0 R /K 23 /P 1864 0 R >> endobj 846 0 obj << /S /API#20Function /C /API#20Function /Pg 178 0 R /K 0 /P 1864 0 R >> endobj 847 0 obj << /S /API#20Description /C /API#20Description /Pg 178 0 R /K 1 /P 1864 0 R >> endobj 848 0 obj << /S /API#20Description /C /API#20Description /Pg 178 0 R /K 2 /P 1864 0 R >> endobj 849 0 obj << /S /API#20Description /C /API#20Description /Pg 178 0 R /K 3 /P 1864 0 R >> endobj 850 0 obj << /S /API#20Description /C /API#20Description /Pg 178 0 R /K 4 /P 1864 0 R >> endobj 851 0 obj << /S /API#20Function /C /API#20Function /Pg 178 0 R /K 5 /P 1864 0 R >> endobj 852 0 obj << /S /API#20Description /C /API#20Description /Pg 178 0 R /K 6 /P 1864 0 R >> endobj 853 0 obj << /S /API#20Function /C /API#20Function /Pg 178 0 R /K 7 /P 1864 0 R >> endobj 854 0 obj << /S /API#20Description /C /API#20Description /Pg 178 0 R /K 8 /P 1864 0 R >> endobj 855 0 obj << /S /API#20Function /C /API#20Function /Pg 178 0 R /K 9 /P 1864 0 R >> endobj 856 0 obj << /S /API#20Description /C /API#20Description /Pg 178 0 R /K 10 /P 1864 0 R >> endobj 857 0 obj << /S /LBody /C /#C3#9Cberschrift#202 /Pg 178 0 R /K 11 /P 2017 0 R >> endobj 858 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 178 0 R /K 12 /P 1864 0 R >> endobj 859 0 obj << /S /API#20Function /C /API#20Function /Pg 178 0 R /K 13 /P 1864 0 R >> endobj 860 0 obj << /S /API#20Description /C /API#20Description /Pg 178 0 R /K 14 /P 1864 0 R >> endobj 861 0 obj << /S /API#20Function /C /API#20Function /Pg 178 0 R /K 15 /P 1864 0 R >> endobj 862 0 obj << /S /API#20Description /C /API#20Description /Pg 178 0 R /K 16 /P 1864 0 R >> endobj 863 0 obj << /S /API#20Function /C /API#20Function /Pg 181 0 R /K 0 /P 1864 0 R >> endobj 864 0 obj << /S /API#20Description /C /API#20Description /Pg 181 0 R /K 1 /P 1864 0 R >> endobj 865 0 obj << /S /API#20Function /C /API#20Function /Pg 181 0 R /K 2 /P 1864 0 R >> endobj 866 0 obj << /S /API#20Description /C /API#20Description /Pg 181 0 R /K 3 /P 1864 0 R >> endobj 867 0 obj << /S /API#20Function /C /API#20Function /Pg 181 0 R /K 4 /P 1864 0 R >> endobj 868 0 obj << /S /API#20Description /C /API#20Description /Pg 181 0 R /K 5 /P 1864 0 R >> endobj 869 0 obj << /S /API#20Function /C /API#20Function /Pg 181 0 R /K 6 /P 1864 0 R >> endobj 870 0 obj << /S /API#20Description /C /API#20Description /Pg 181 0 R /K 7 /P 1864 0 R >> endobj 871 0 obj << /S /API#20Description /C /API#20Description /Pg 181 0 R /K 8 /P 1864 0 R >> endobj 872 0 obj << /S /API#20Description /C /API#20Description /Pg 181 0 R /K 9 /P 1864 0 R >> endobj 873 0 obj << /S /API#20Function /C /API#20Function /Pg 181 0 R /K 10 /P 1864 0 R >> endobj 874 0 obj << /S /API#20Description /C /API#20Description /Pg 181 0 R /K 11 /P 1864 0 R >> endobj 875 0 obj << /S /API#20Function /C /API#20Function /Pg 181 0 R /K 12 /P 1864 0 R >> endobj 876 0 obj << /S /API#20Description /C /API#20Description /Pg 181 0 R /K 13 /P 1864 0 R >> endobj 877 0 obj << /S /API#20Description /C /API#20Description /Pg 181 0 R /K 14 /P 1864 0 R >> endobj 878 0 obj << /S /API#20Description /C /API#20Description /Pg 181 0 R /K 15 /P 1864 0 R >> endobj 879 0 obj << /S /API#20Function /C /API#20Function /Pg 181 0 R /K 16 /P 1864 0 R >> endobj 880 0 obj << /S /API#20Description /C /API#20Description /Pg 181 0 R /K 17 /P 1864 0 R >> endobj 881 0 obj << /S /API#20Method /C /API#20Method /Pg 181 0 R /K 18 /P 1864 0 R >> endobj 882 0 obj << /S /API#20Description /C /API#20Description /Pg 181 0 R /K 19 /P 1864 0 R >> endobj 883 0 obj << /O /Layout /WritingMode /LrTb /StartIndent 56.75 /EndIndent 0 /TextAlign /Start /SpaceBefore 5.64999 /SpaceAfter 5.95 /TextIndent -14.19998 >> endobj 884 0 obj << /S /API#20Description /C /API#20Description /Pg 181 0 R /K 20 /P 1864 0 R >> endobj 885 0 obj << /S /API#20Method /C /API#20Method /Pg 184 0 R /K 0 /P 1864 0 R >> endobj 886 0 obj << /S /API#20Description /C /API#20Description /Pg 184 0 R /K 1 /P 1864 0 R >> endobj 887 0 obj << /S /API#20Description /C /API#20Description /Pg 184 0 R /K 2 /P 1864 0 R >> endobj 888 0 obj << /S /API#20Method /C /API#20Method /Pg 184 0 R /K 3 /P 1864 0 R >> endobj 889 0 obj << /S /API#20Description /C /API#20Description /Pg 184 0 R /K 4 /P 1864 0 R >> endobj 890 0 obj << /S /API#20Description /C /API#20Description /Pg 184 0 R /K 5 /P 1864 0 R >> endobj 891 0 obj << /S /API#20Function /C /API#20Function /Pg 184 0 R /K 6 /P 1864 0 R >> endobj 892 0 obj << /S /API#20Description /C /API#20Description /Pg 184 0 R /K 7 /P 1864 0 R >> endobj 893 0 obj << /S /API#20Description /C /API#20Description /Pg 184 0 R /K 8 /P 1864 0 R >> endobj 894 0 obj << /S /API#20Description /C /API#20Description /Pg 184 0 R /K 9 /P 1864 0 R >> endobj 895 0 obj << /S /API#20Description /C /API#20Description /Pg 184 0 R /K 10 /P 1864 0 R >> endobj 896 0 obj << /S /API#20Method /C /API#20Method /Pg 184 0 R /K 11 /P 1864 0 R >> endobj 897 0 obj << /S /API#20Description /C /API#20Description /Pg 184 0 R /K 12 /P 1864 0 R >> endobj 898 0 obj << /S /API#20Description /C /API#20Description /Pg 184 0 R /K 13 /P 1864 0 R >> endobj 899 0 obj << /S /API#20Function /C /API#20Function /Pg 184 0 R /K 14 /P 1864 0 R >> endobj 900 0 obj << /S /API#20Description /C /API#20Description /Pg 184 0 R /K 15 /P 1864 0 R >> endobj 901 0 obj << /S /API#20Description /C /API#20Description /Pg 184 0 R /K 16 /P 1864 0 R >> endobj 902 0 obj << /S /API#20Description /C /API#20Description /Pg 184 0 R /K 17 /P 1864 0 R >> endobj 903 0 obj << /S /API#20Description /C /API#20Description /Pg 184 0 R /K 18 /P 1864 0 R >> endobj 904 0 obj << /S /API#20Description /C /API#20Description /Pg 184 0 R /K [ 905 0 R 20 << /Type /MCR /Pg 187 0 R /MCID 0 >> ] /P 1864 0 R >> endobj 905 0 obj << /S /Underline /P 904 0 R /A 2265 0 R /Pg 184 0 R /K 19 >> endobj 906 0 obj << /S /API#20Function /C /API#20Function /Pg 187 0 R /K 1 /P 1864 0 R >> endobj 907 0 obj << /S /API#20Description /C /API#20Description /Pg 187 0 R /K 2 /P 1864 0 R >> endobj 908 0 obj << /S /API#20Function /C /API#20Function /Pg 187 0 R /K 3 /P 1864 0 R >> endobj 909 0 obj << /S /API#20Description /C /API#20Description /Pg 187 0 R /K 4 /P 1864 0 R >> endobj 910 0 obj << /S /API#20Description /C /API#20Description /Pg 187 0 R /K 5 /P 1864 0 R >> endobj 911 0 obj << /S /API#20Function /C /API#20Function /Pg 187 0 R /K 6 /P 1864 0 R >> endobj 912 0 obj << /S /API#20Description /C /API#20Description /Pg 187 0 R /K 7 /P 1864 0 R >> endobj 913 0 obj << /S /LBody /C /#C3#9Cberschrift#202 /Pg 187 0 R /K 8 /P 2019 0 R >> endobj 914 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 187 0 R /K 9 /P 1864 0 R >> endobj 915 0 obj << /S /API#20Attribute /C /API#20Attribute /Pg 187 0 R /K 10 /P 1864 0 R >> endobj 916 0 obj << /S /API#20Description /C /API#20Description /Pg 187 0 R /K 11 /P 1864 0 R >> endobj 917 0 obj << /O /Layout /WritingMode /LrTb /StartIndent 56.75 /EndIndent 0 /TextAlign /Start /SpaceBefore 5.64999 /SpaceAfter 5.95 /TextIndent -14.19998 >> endobj 918 0 obj << /S /API#20Description /C /API#20Description /Pg 187 0 R /K 12 /P 1864 0 R >> endobj 919 0 obj << /S /API#20Attribute /C /API#20Attribute /Pg 187 0 R /K 13 /P 1864 0 R >> endobj 920 0 obj << /S /API#20Description /C /API#20Description /Pg 187 0 R /K 14 /P 1864 0 R >> endobj 921 0 obj << /S /API#20Attribute /C /API#20Attribute /Pg 187 0 R /K 15 /P 1864 0 R >> endobj 922 0 obj << /S /API#20Description /C /API#20Description /Pg 187 0 R /K 16 /P 1864 0 R >> endobj 923 0 obj << /S /API#20Attribute /C /API#20Attribute /Pg 187 0 R /K 17 /P 1864 0 R >> endobj 924 0 obj << /S /API#20Description /C /API#20Description /Pg 187 0 R /K 18 /P 1864 0 R >> endobj 925 0 obj << /S /API#20Attribute /C /API#20Attribute /Pg 187 0 R /K 19 /P 1864 0 R >> endobj 926 0 obj << /S /API#20Description /C /API#20Description /Pg 187 0 R /K 20 /P 1864 0 R >> endobj 927 0 obj << /S /API#20Description /C /API#20Description /Pg 190 0 R /K 0 /P 1864 0 R >> endobj 928 0 obj << /S /API#20Attribute /C /API#20Attribute /Pg 190 0 R /K 1 /P 1864 0 R >> endobj 929 0 obj << /S /API#20Description /C /API#20Description /Pg 190 0 R /K 2 /P 1864 0 R >> endobj 930 0 obj << /S /API#20Attribute /C /API#20Attribute /Pg 190 0 R /K 3 /P 1864 0 R >> endobj 931 0 obj << /S /API#20Description /C /API#20Description /Pg 190 0 R /K 4 /P 1864 0 R >> endobj 932 0 obj << /S /API#20Attribute /C /API#20Attribute /Pg 190 0 R /K 5 /P 1864 0 R >> endobj 933 0 obj << /S /API#20Description /C /API#20Description /Pg 190 0 R /K 6 /P 1864 0 R >> endobj 934 0 obj << /S /API#20Attribute /C /API#20Attribute /Pg 190 0 R /K 7 /P 1864 0 R >> endobj 935 0 obj << /S /API#20Description /C /API#20Description /Pg 190 0 R /K 8 /P 1864 0 R >> endobj 936 0 obj << /S /API#20Attribute /C /API#20Attribute /Pg 190 0 R /K 9 /P 1864 0 R >> endobj 937 0 obj << /S /API#20Description /C /API#20Description /Pg 190 0 R /K 10 /P 1864 0 R >> endobj 938 0 obj << /S /API#20Description /C /API#20Description /Pg 190 0 R /K 11 /P 1864 0 R >> endobj 939 0 obj << /S /API#20Attribute /C /API#20Attribute /Pg 190 0 R /K 12 /P 1864 0 R >> endobj 940 0 obj << /S /API#20Description /C /API#20Description /Pg 190 0 R /K 13 /P 1864 0 R >> endobj 941 0 obj << /S /API#20Attribute /C /API#20Attribute /Pg 190 0 R /K 14 /P 1864 0 R >> endobj 942 0 obj << /S /API#20Description /C /API#20Description /Pg 190 0 R /K 15 /P 1864 0 R >> endobj 943 0 obj << /S /API#20Attribute /C /API#20Attribute /Pg 190 0 R /K 16 /P 1864 0 R >> endobj 944 0 obj << /S /API#20Description /C /API#20Description /Pg 190 0 R /K [ 17 945 0 R 20 ] /P 1864 0 R >> endobj 945 0 obj << /S /Link /P 944 0 R /K [ 946 0 R << /Type /OBJR /Pg 190 0 R /Obj 374 0 R >> << /Type /OBJR /Pg 190 0 R /Obj 375 0 R >> ] >> endobj 946 0 obj << /S /Underline /P 945 0 R /A 2268 0 R /Pg 190 0 R /K [ 18 19 ] >> endobj 947 0 obj << /S /API#20Description /C /API#20Description /Pg 190 0 R /K 21 /P 1864 0 R >> endobj 948 0 obj << /S /API#20Attribute /C /API#20Attribute /Pg 190 0 R /K 22 /P 1864 0 R >> endobj 949 0 obj << /S /API#20Description /C /API#20Description /Pg 190 0 R /K 23 /P 1864 0 R >> endobj 950 0 obj << /S /API#20Description /C /API#20Description /Pg 190 0 R /K 24 /P 1864 0 R >> endobj 951 0 obj << /S /API#20Description /C /API#20Description /Pg 196 0 R /K [ 0 952 0 R 2 ] /P 1864 0 R >> endobj 952 0 obj << /S /Link /P 951 0 R /K [ 953 0 R << /Type /OBJR /Pg 196 0 R /Obj 376 0 R >> ] >> endobj 953 0 obj << /S /Underline /P 952 0 R /A 2270 0 R /Pg 196 0 R /K 1 >> endobj 954 0 obj << /S /API#20Attribute /C /API#20Attribute /Pg 196 0 R /K 3 /P 1864 0 R >> endobj 955 0 obj << /S /API#20Description /C /API#20Description /Pg 196 0 R /K 4 /P 1864 0 R >> endobj 956 0 obj << /S /API#20Description /C /API#20Description /Pg 196 0 R /K 5 /P 1864 0 R >> endobj 957 0 obj << /S /API#20Description /C /API#20Description /Pg 196 0 R /K [ 6 958 0 R 8 960 0 R 10 ] /P 1864 0 R >> endobj 958 0 obj << /S /Link /P 957 0 R /K [ 959 0 R << /Type /OBJR /Pg 196 0 R /Obj 377 0 R >> ] >> endobj 959 0 obj << /S /Underline /P 958 0 R /A 2271 0 R /Pg 196 0 R /K 7 >> endobj 960 0 obj << /S /Link /P 957 0 R /K [ 961 0 R << /Type /OBJR /Pg 196 0 R /Obj 378 0 R >> ] >> endobj 961 0 obj << /S /Underline /P 960 0 R /A 2272 0 R /Pg 196 0 R /K 9 >> endobj 962 0 obj << /S /API#20Description /C /API#20Description /Pg 196 0 R /K [ 963 0 R 12 ] /P 1864 0 R >> endobj 963 0 obj << /S /Underline /P 962 0 R /A 2273 0 R /Pg 196 0 R /K 11 >> endobj 964 0 obj << /S /API#20Attribute /C /API#20Attribute /Pg 196 0 R /K 13 /P 1864 0 R >> endobj 965 0 obj << /S /API#20Description /C /API#20Description /Pg 196 0 R /K 14 /P 1864 0 R >> endobj 966 0 obj << /S /API#20Attribute /C /API#20Attribute /Pg 196 0 R /K 15 /P 1864 0 R >> endobj 967 0 obj << /S /API#20Description /C /API#20Description /Pg 196 0 R /K 16 /P 1864 0 R >> endobj 968 0 obj << /S /API#20Description /C /API#20Description /Pg 196 0 R /K 17 /P 1864 0 R >> endobj 969 0 obj << /S /API#20Description /C /API#20Description /Pg 196 0 R /K 18 /P 1864 0 R >> endobj 970 0 obj << /S /API#20Description /C /API#20Description /Pg 196 0 R /K 19 /P 1864 0 R >> endobj 971 0 obj << /S /API#20Attribute /C /API#20Attribute /Pg 196 0 R /K 20 /P 1864 0 R >> endobj 972 0 obj << /S /API#20Description /C /API#20Description /Pg 196 0 R /K 21 /P 1864 0 R >> endobj 973 0 obj << /S /API#20Attribute /C /API#20Attribute /Pg 196 0 R /K 22 /P 1864 0 R >> endobj 974 0 obj << /S /API#20Description /C /API#20Description /Pg 196 0 R /K 23 /P 1864 0 R >> endobj 975 0 obj << /S /API#20Attribute /C /API#20Attribute /Pg 196 0 R /K 24 /P 1864 0 R >> endobj 976 0 obj << /S /API#20Description /C /API#20Description /Pg 196 0 R /K 25 /P 1864 0 R >> endobj 977 0 obj << /S /LBody /C /#C3#9Cberschrift#201 /Pg 203 0 R /K 0 /P 2021 0 R >> endobj 978 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 203 0 R /K 1 /P 1864 0 R >> endobj 979 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 203 0 R /K 2 /P 1864 0 R >> endobj 980 0 obj << /S /LBody /C /#C3#9Cberschrift#202 /Pg 203 0 R /K 3 /P 2023 0 R >> endobj 981 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 203 0 R /K 4 /P 1864 0 R >> endobj 982 0 obj << /S /API#20Function /C /API#20Function /Pg 203 0 R /K 5 /P 1864 0 R >> endobj 983 0 obj << /S /API#20Description /C /API#20Description /Pg 203 0 R /K 6 /P 1864 0 R >> endobj 984 0 obj << /S /API#20Description /C /API#20Description /Pg 203 0 R /K 7 /P 1864 0 R >> endobj 985 0 obj << /S /API#20Description /C /API#20Description /Pg 203 0 R /K 8 /P 1864 0 R >> endobj 986 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 203 0 R /K 9 /P 1864 0 R >> endobj 987 0 obj << /S /API#20Function /C /API#20Function /Pg 203 0 R /K 10 /P 1864 0 R >> endobj 988 0 obj << /S /API#20Description /C /API#20Description /Pg 203 0 R /K 11 /P 1864 0 R >> endobj 989 0 obj << /S /API#20Description /C /API#20Description /Pg 203 0 R /K 12 /P 1864 0 R >> endobj 990 0 obj << /S /API#20Description /C /API#20Description /Pg 203 0 R /K 13 /P 1864 0 R >> endobj 991 0 obj << /S /API#20Function /C /API#20Function /Pg 203 0 R /K 14 /P 1864 0 R >> endobj 992 0 obj << /S /API#20Description /C /API#20Description /Pg 203 0 R /K 15 /P 1864 0 R >> endobj 993 0 obj << /S /API#20Description /C /API#20Description /Pg 203 0 R /K 16 /P 1864 0 R >> endobj 994 0 obj << /S /API#20Function /C /API#20Function /Pg 206 0 R /K 0 /P 1864 0 R >> endobj 995 0 obj << /S /API#20Description /C /API#20Description /Pg 206 0 R /K 1 /P 1864 0 R >> endobj 996 0 obj << /S /API#20Function /C /API#20Function /Pg 206 0 R /K 2 /P 1864 0 R >> endobj 997 0 obj << /S /API#20Description /C /API#20Description /Pg 206 0 R /K 3 /P 1864 0 R >> endobj 998 0 obj << /S /API#20Function /C /API#20Function /Pg 206 0 R /K 4 /P 1864 0 R >> endobj 999 0 obj << /S /API#20Description /C /API#20Description /Pg 206 0 R /K 5 /P 1864 0 R >> endobj 1000 0 obj << /S /API#20Description /C /API#20Description /Pg 206 0 R /K 6 /P 1864 0 R >> endobj 1001 0 obj << /S /API#20Description /C /API#20Description /Pg 206 0 R /K 7 /P 1864 0 R >> endobj 1002 0 obj << /S /API#20Function /C /API#20Function /Pg 206 0 R /K 8 /P 1864 0 R >> endobj 1003 0 obj << /S /API#20Description /C /API#20Description /Pg 206 0 R /K 9 /P 1864 0 R >> endobj 1004 0 obj << /S /API#20Description /C /API#20Description /Pg 206 0 R /K 10 /P 1864 0 R >> endobj 1005 0 obj << /S /API#20Function /C /API#20Function /Pg 206 0 R /K 11 /P 1864 0 R >> endobj 1006 0 obj << /S /API#20Description /C /API#20Description /Pg 206 0 R /K 12 /P 1864 0 R >> endobj 1007 0 obj << /S /API#20Function /C /API#20Function /Pg 206 0 R /K 13 /P 1864 0 R >> endobj 1008 0 obj << /S /API#20Description /C /API#20Description /Pg 206 0 R /K 14 /P 1864 0 R >> endobj 1009 0 obj << /S /LBody /C /#C3#9Cberschrift#202 /Pg 206 0 R /K 15 /P 2025 0 R >> endobj 1010 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 206 0 R /K 16 /P 1864 0 R >> endobj 1011 0 obj << /S /API#20Function /C /API#20Function /Pg 206 0 R /K 17 /P 1864 0 R >> endobj 1012 0 obj << /S /API#20Description /C /API#20Description /Pg 206 0 R /K 18 /P 1864 0 R >> endobj 1013 0 obj << /S /API#20Description /C /API#20Description /Pg 206 0 R /K 19 /P 1864 0 R >> endobj 1014 0 obj << /S /API#20Method /C /API#20Method /Pg 206 0 R /K 20 /P 1864 0 R >> endobj 1015 0 obj << /S /API#20Description /C /API#20Description /Pg 206 0 R /K 21 /P 1864 0 R >> endobj 1016 0 obj << /S /API#20Description /C /API#20Description /Pg 209 0 R /K 0 /P 1864 0 R >> endobj 1017 0 obj << /S /API#20Description /C /API#20Description /Pg 209 0 R /K 1 /P 1864 0 R >> endobj 1018 0 obj << /S /API#20Method /C /API#20Method /Pg 209 0 R /K 2 /P 1864 0 R >> endobj 1019 0 obj << /S /API#20Description /C /API#20Description /Pg 209 0 R /K 3 /P 1864 0 R >> endobj 1020 0 obj << /S /API#20Description /C /API#20Description /Pg 209 0 R /K 4 /P 1864 0 R >> endobj 1021 0 obj << /S /API#20Method /C /API#20Method /Pg 209 0 R /K 5 /P 1864 0 R >> endobj 1022 0 obj << /S /API#20Description /C /API#20Description /Pg 209 0 R /K 6 /P 1864 0 R >> endobj 1023 0 obj << /S /API#20Description /C /API#20Description /Pg 209 0 R /K 7 /P 1864 0 R >> endobj 1024 0 obj << /S /API#20Function /C /API#20Function /Pg 209 0 R /K 8 /P 1864 0 R >> endobj 1025 0 obj << /S /API#20Description /C /API#20Description /Pg 209 0 R /K 9 /P 1864 0 R >> endobj 1026 0 obj << /S /API#20Description /C /API#20Description /Pg 209 0 R /K 10 /P 1864 0 R >> endobj 1027 0 obj << /S /API#20Description /C /API#20Description /Pg 209 0 R /K 11 /P 1864 0 R >> endobj 1028 0 obj << /S /API#20Description /C /API#20Description /Pg 209 0 R /K 12 /P 1864 0 R >> endobj 1029 0 obj << /S /API#20Function /C /API#20Function /Pg 209 0 R /K 13 /P 1864 0 R >> endobj 1030 0 obj << /S /API#20Description /C /API#20Description /Pg 209 0 R /K 14 /P 1864 0 R >> endobj 1031 0 obj << /S /API#20Description /C /API#20Description /Pg 209 0 R /K 15 /P 1864 0 R >> endobj 1032 0 obj << /S /LBody /C /#C3#9Cberschrift#202 /Pg 209 0 R /K 16 /P 2027 0 R >> endobj 1033 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 209 0 R /K 17 /P 1864 0 R >> endobj 1034 0 obj << /S /API#20Attribute /C /API#20Attribute /Pg 212 0 R /K 0 /P 1864 0 R >> endobj 1035 0 obj << /S /API#20Description /C /API#20Description /Pg 212 0 R /K 1 /P 1864 0 R >> endobj 1036 0 obj << /S /API#20Attribute /C /API#20Attribute /Pg 212 0 R /K 2 /P 1864 0 R >> endobj 1037 0 obj << /S /API#20Description /C /API#20Description /Pg 212 0 R /K 3 /P 1864 0 R >> endobj 1038 0 obj << /S /LBody /C /#C3#9Cberschrift#201 /Pg 215 0 R /K 0 /P 2029 0 R >> endobj 1039 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 215 0 R /K 1 /P 1864 0 R >> endobj 1040 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 215 0 R /K 2 /P 1864 0 R >> endobj 1041 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 215 0 R /K 3 /P 1864 0 R >> endobj 1042 0 obj << /S /LBody /C /#C3#9Cberschrift#202 /Pg 215 0 R /K 4 /P 2031 0 R >> endobj 1043 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 215 0 R /K 5 /P 1864 0 R >> endobj 1044 0 obj << /S /API#20Function /C /API#20Function /Pg 215 0 R /K 6 /P 1864 0 R >> endobj 1045 0 obj << /S /API#20Description /C /API#20Description /Pg 215 0 R /K 7 /P 1864 0 R >> endobj 1046 0 obj << /S /API#20Description /C /API#20Description /Pg 215 0 R /K 8 /P 1864 0 R >> endobj 1047 0 obj << /S /API#20Description /C /API#20Description /Pg 215 0 R /K 9 /P 1864 0 R >> endobj 1048 0 obj << /S /API#20Description /C /API#20Description /Pg 215 0 R /K 10 /P 1864 0 R >> endobj 1049 0 obj << /S /API#20Description /C /API#20Description /Pg 215 0 R /K 11 /P 1864 0 R >> endobj 1050 0 obj << /S /API#20Description /C /API#20Description /Pg 215 0 R /K 12 /P 1864 0 R >> endobj 1051 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 218 0 R /K 0 /P 1864 0 R >> endobj 1052 0 obj << /S /API#20Function /C /API#20Function /Pg 218 0 R /K 1 /P 1864 0 R >> endobj 1053 0 obj << /S /API#20Description /C /API#20Description /Pg 218 0 R /K 2 /P 1864 0 R >> endobj 1054 0 obj << /S /API#20Function /C /API#20Function /Pg 218 0 R /K 3 /P 1864 0 R >> endobj 1055 0 obj << /S /API#20Description /C /API#20Description /Pg 218 0 R /K 4 /P 1864 0 R >> endobj 1056 0 obj << /S /API#20Function /C /API#20Function /Pg 218 0 R /K 5 /P 1864 0 R >> endobj 1057 0 obj << /S /API#20Description /C /API#20Description /Pg 218 0 R /K 6 /P 1864 0 R >> endobj 1058 0 obj << /S /API#20Function /C /API#20Function /Pg 218 0 R /K 7 /P 1864 0 R >> endobj 1059 0 obj << /S /API#20Description /C /API#20Description /Pg 218 0 R /K 8 /P 1864 0 R >> endobj 1060 0 obj << /S /API#20Description /C /API#20Description /Pg 218 0 R /K 9 /P 1864 0 R >> endobj 1061 0 obj << /S /API#20Function /C /API#20Function /Pg 218 0 R /K 10 /P 1864 0 R >> endobj 1062 0 obj << /S /API#20Description /C /API#20Description /Pg 218 0 R /K 11 /P 1864 0 R >> endobj 1063 0 obj << /S /API#20Description /C /API#20Description /Pg 218 0 R /K 12 /P 1864 0 R >> endobj 1064 0 obj << /S /API#20Description /C /API#20Description /Pg 218 0 R /K 13 /P 1864 0 R >> endobj 1065 0 obj << /S /API#20Function /C /API#20Function /Pg 218 0 R /K 14 /P 1864 0 R >> endobj 1066 0 obj << /S /API#20Description /C /API#20Description /Pg 218 0 R /K 15 /P 1864 0 R >> endobj 1067 0 obj << /S /API#20Description /C /API#20Description /Pg 218 0 R /K 16 /P 1864 0 R >> endobj 1068 0 obj << /S /API#20Description /C /API#20Description /Pg 218 0 R /K 17 /P 1864 0 R >> endobj 1069 0 obj << /S /API#20Function /C /API#20Function /Pg 218 0 R /K 18 /P 1864 0 R >> endobj 1070 0 obj << /S /API#20Description /C /API#20Description /Pg 218 0 R /K 19 /P 1864 0 R >> endobj 1071 0 obj << /S /API#20Description /C /API#20Description /Pg 218 0 R /K 20 /P 1864 0 R >> endobj 1072 0 obj << /S /LBody /C /#C3#9Cberschrift#202 /Pg 221 0 R /K 0 /P 2033 0 R >> endobj 1073 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 221 0 R /K 1 /P 1864 0 R >> endobj 1074 0 obj << /S /LBody /C /#C3#9Cberschrift#202 /Pg 221 0 R /K 2 /P 2035 0 R >> endobj 1075 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 221 0 R /K 3 /P 1864 0 R >> endobj 1076 0 obj << /S /API#20Attribute /C /API#20Attribute /Pg 221 0 R /K 4 /P 1864 0 R >> endobj 1077 0 obj << /S /API#20Description /C /API#20Description /Pg 221 0 R /K 5 /P 1864 0 R >> endobj 1078 0 obj << /S /API#20Attribute /C /API#20Attribute /Pg 221 0 R /K 6 /P 1864 0 R >> endobj 1079 0 obj << /S /API#20Description /C /API#20Description /Pg 221 0 R /K 7 /P 1864 0 R >> endobj 1080 0 obj << /S /API#20Description /C /API#20Description /Pg 221 0 R /K 8 /P 1864 0 R >> endobj 1081 0 obj << /S /LBody /C /#C3#9Cberschrift#202 /Pg 221 0 R /K 9 /P 2037 0 R >> endobj 1082 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 221 0 R /K 10 /P 1864 0 R >> endobj 1083 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 221 0 R /K 11 /P 1864 0 R >> endobj 1084 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 221 0 R /K 12 /P 1864 0 R >> endobj 1085 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 221 0 R /P 1864 0 R /K [ 13 << /Type /MCR /Pg 224 0 R /MCID 0 >> ] >> endobj 1086 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 224 0 R /K 1 /P 1864 0 R >> endobj 1087 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 224 0 R /K 2 /P 1864 0 R >> endobj 1088 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 224 0 R /K 3 /P 1864 0 R >> endobj 1089 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 224 0 R /K 4 /P 1864 0 R >> endobj 1090 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 224 0 R /K 5 /P 1864 0 R >> endobj 1091 0 obj << /S /Program#20Text /C /Program#20Text /Pg 224 0 R /K 6 /P 1864 0 R >> endobj 1092 0 obj << /S /Program#20Text /C /Program#20Text /Pg 224 0 R /K 7 /P 1864 0 R >> endobj 1093 0 obj << /O /Layout /WritingMode /LrTb /StartIndent 42.55 /EndIndent 0 /TextAlign /Start /SpaceBefore 0 /SpaceAfter 0 /TextIndent 0 >> endobj 1094 0 obj << /S /Program#20Text /C /Program#20Text /Pg 224 0 R /K 8 /P 1864 0 R >> endobj 1095 0 obj << /S /Program#20Text /C /Program#20Text /Pg 224 0 R /K 9 /P 1864 0 R >> endobj 1096 0 obj << /S /Program#20Text /C /Program#20Text /Pg 224 0 R /K 10 /P 1864 0 R >> endobj 1097 0 obj << /S /Program#20Text /C /Program#20Text /Pg 224 0 R /K 11 /P 1864 0 R >> endobj 1098 0 obj << /S /Program#20Text /C /Program#20Text /Pg 224 0 R /K 12 /P 1864 0 R >> endobj 1099 0 obj << /S /Program#20Text /C /Program#20Text /Pg 224 0 R /K 13 /P 1864 0 R >> endobj 1100 0 obj << /S /Program#20Text /C /Program#20Text /Pg 224 0 R /K 14 /P 1864 0 R >> endobj 1101 0 obj << /S /Program#20Text /C /Program#20Text /Pg 224 0 R /K 15 /P 1864 0 R >> endobj 1102 0 obj << /S /Program#20Text /C /Program#20Text /Pg 224 0 R /K 16 /P 1864 0 R >> endobj 1103 0 obj << /S /Program#20Text /C /Program#20Text /Pg 224 0 R /K 17 /P 1864 0 R >> endobj 1104 0 obj << /S /Program#20Text /C /Program#20Text /Pg 224 0 R /K 18 /P 1864 0 R >> endobj 1105 0 obj << /S /Program#20Text /C /Program#20Text /Pg 224 0 R /K 19 /P 1864 0 R >> endobj 1106 0 obj << /S /Program#20Text /C /Program#20Text /Pg 224 0 R /K 20 /P 1864 0 R >> endobj 1107 0 obj << /S /Program#20Text /C /Program#20Text /Pg 224 0 R /K 21 /P 1864 0 R >> endobj 1108 0 obj << /S /Program#20Text /C /Program#20Text /Pg 224 0 R /K 22 /P 1864 0 R >> endobj 1109 0 obj << /S /Program#20Text /C /Program#20Text /Pg 224 0 R /K 23 /P 1864 0 R >> endobj 1110 0 obj << /S /Program#20Text /C /Program#20Text /Pg 224 0 R /K 24 /P 1864 0 R >> endobj 1111 0 obj << /S /Program#20Text /C /Program#20Text /Pg 224 0 R /K 25 /P 1864 0 R >> endobj 1112 0 obj << /S /Program#20Text /C /Program#20Text /Pg 224 0 R /K 26 /P 1864 0 R >> endobj 1113 0 obj << /S /Program#20Text /C /Program#20Text /Pg 224 0 R /K 27 /P 1864 0 R >> endobj 1114 0 obj << /S /Program#20Text /C /Program#20Text /Pg 224 0 R /K 28 /P 1864 0 R >> endobj 1115 0 obj << /S /Program#20Text /C /Program#20Text /Pg 224 0 R /K 29 /P 1864 0 R >> endobj 1116 0 obj << /S /Program#20Text /C /Program#20Text /Pg 224 0 R /K 30 /P 1864 0 R >> endobj 1117 0 obj << /S /Program#20Text /C /Program#20Text /Pg 224 0 R /K 31 /P 1864 0 R >> endobj 1118 0 obj << /S /Program#20Text /C /Program#20Text /Pg 224 0 R /K 32 /P 1864 0 R >> endobj 1119 0 obj << /S /Program#20Text /C /Program#20Text /Pg 224 0 R /K 33 /P 1864 0 R >> endobj 1120 0 obj << /S /Program#20Text /C /Program#20Text /Pg 224 0 R /K 34 /P 1864 0 R >> endobj 1121 0 obj << /S /Program#20Text /C /Program#20Text /Pg 224 0 R /K 35 /P 1864 0 R >> endobj 1122 0 obj << /S /Program#20Text /C /Program#20Text /Pg 224 0 R /K 36 /P 1864 0 R >> endobj 1123 0 obj << /S /Program#20Text /C /Program#20Text /Pg 224 0 R /K 37 /P 1864 0 R >> endobj 1124 0 obj << /S /Program#20Text /C /Program#20Text /Pg 224 0 R /K 38 /P 1864 0 R >> endobj 1125 0 obj << /S /Program#20Text /C /Program#20Text /Pg 224 0 R /K 39 /P 1864 0 R >> endobj 1126 0 obj << /S /Program#20Text /C /Program#20Text /Pg 224 0 R /K 40 /P 1864 0 R >> endobj 1127 0 obj << /S /Program#20Text /C /Program#20Text /Pg 224 0 R /K 41 /P 1864 0 R >> endobj 1128 0 obj << /S /Program#20Text /C /Program#20Text /Pg 224 0 R /K 42 /P 1864 0 R >> endobj 1129 0 obj << /S /Program#20Text /C /Program#20Text /Pg 227 0 R /K 0 /P 1864 0 R >> endobj 1130 0 obj << /S /Program#20Text /C /Program#20Text /Pg 227 0 R /K 1 /P 1864 0 R >> endobj 1131 0 obj << /S /Program#20Text /C /Program#20Text /Pg 227 0 R /K 2 /P 1864 0 R >> endobj 1132 0 obj << /S /Program#20Text /C /Program#20Text /Pg 227 0 R /K 3 /P 1864 0 R >> endobj 1133 0 obj << /S /Program#20Text /C /Program#20Text /Pg 227 0 R /K 4 /P 1864 0 R >> endobj 1134 0 obj << /S /Program#20Text /C /Program#20Text /Pg 227 0 R /K 5 /P 1864 0 R >> endobj 1135 0 obj << /S /HTML#20Vorformatiert /A [ 1136 0 R ] /C /HTML#20Vorformatiert /Pg 227 0 R /K 6 /P 1864 0 R >> endobj 1136 0 obj << /O /Layout /StartIndent 72 >> endobj 1137 0 obj << /O /Layout /WritingMode /LrTb /StartIndent 0 /EndIndent 0 /TextAlign /Start /SpaceBefore 0 /SpaceAfter 0 /TextIndent 0 >> endobj 1138 0 obj << /S /LBody /C /#C3#9Cberschrift#201 /Pg 230 0 R /K 0 /P 2039 0 R >> endobj 1139 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 230 0 R /K 1 /P 1864 0 R >> endobj 1140 0 obj << /S /API#20Function /C /API#20Function /Pg 230 0 R /K 2 /P 1864 0 R >> endobj 1141 0 obj << /S /API#20Description /C /API#20Description /Pg 230 0 R /K 3 /P 1864 0 R >> endobj 1142 0 obj << /S /API#20Description /C /API#20Description /Pg 230 0 R /K 4 /P 1864 0 R >> endobj 1143 0 obj << /S /API#20Function /C /API#20Function /Pg 230 0 R /K 5 /P 1864 0 R >> endobj 1144 0 obj << /S /API#20Description /C /API#20Description /Pg 230 0 R /K 6 /P 1864 0 R >> endobj 1145 0 obj << /S /API#20Function /C /API#20Function /Pg 230 0 R /K 7 /P 1864 0 R >> endobj 1146 0 obj << /S /API#20Description /C /API#20Description /Pg 230 0 R /K 8 /P 1864 0 R >> endobj 1147 0 obj << /S /API#20Function /C /API#20Function /Pg 230 0 R /K 9 /P 1864 0 R >> endobj 1148 0 obj << /S /API#20Description /C /API#20Description /Pg 230 0 R /K 10 /P 1864 0 R >> endobj 1149 0 obj << /S /API#20Description /C /API#20Description /Pg 230 0 R /K 11 /P 1864 0 R >> endobj 1150 0 obj << /S /API#20Function /C /API#20Function /Pg 230 0 R /K 12 /P 1864 0 R >> endobj 1151 0 obj << /S /API#20Description /C /API#20Description /Pg 230 0 R /K 13 /P 1864 0 R >> endobj 1152 0 obj << /S /API#20Method /C /API#20Method /Pg 230 0 R /K 14 /P 1864 0 R >> endobj 1153 0 obj << /S /API#20Description /C /API#20Description /Pg 230 0 R /K 15 /P 1864 0 R >> endobj 1154 0 obj << /S /API#20Description /C /API#20Description /Pg 230 0 R /K 16 /P 1864 0 R >> endobj 1155 0 obj << /S /API#20Function /C /API#20Function /Pg 230 0 R /K 17 /P 1864 0 R >> endobj 1156 0 obj << /S /API#20Description /C /API#20Description /Pg 230 0 R /K 18 /P 1864 0 R >> endobj 1157 0 obj << /S /API#20Description /C /API#20Description /Pg 230 0 R /K 19 /P 1864 0 R >> endobj 1158 0 obj << /S /API#20Function /C /API#20Function /Pg 230 0 R /K 20 /P 1864 0 R >> endobj 1159 0 obj << /S /API#20Description /C /API#20Description /Pg 230 0 R /K 21 /P 1864 0 R >> endobj 1160 0 obj << /S /LBody /C /#C3#9Cberschrift#201 /Pg 233 0 R /K 0 /P 2041 0 R >> endobj 1161 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 233 0 R /K 1 /P 1864 0 R >> endobj 1162 0 obj << /S /API#20Attribute /C /API#20Attribute /Pg 233 0 R /K 2 /P 1864 0 R >> endobj 1163 0 obj << /S /API#20Description /C /API#20Description /Pg 233 0 R /K 3 /P 1864 0 R >> endobj 1164 0 obj << /S /API#20Attribute /C /API#20Attribute /Pg 233 0 R /K 4 /P 1864 0 R >> endobj 1165 0 obj << /S /API#20Description /C /API#20Description /Pg 233 0 R /K 5 /P 1864 0 R >> endobj 1166 0 obj << /S /API#20Attribute /C /API#20Attribute /Pg 233 0 R /K 6 /P 1864 0 R >> endobj 1167 0 obj << /S /API#20Description /C /API#20Description /Pg 233 0 R /K 7 /P 1864 0 R >> endobj 1168 0 obj << /S /API#20Attribute /C /API#20Attribute /Pg 233 0 R /K 8 /P 1864 0 R >> endobj 1169 0 obj << /S /API#20Description /C /API#20Description /Pg 233 0 R /K 9 /P 1864 0 R >> endobj 1170 0 obj << /S /API#20Attribute /C /API#20Attribute /Pg 233 0 R /K 10 /P 1864 0 R >> endobj 1171 0 obj << /S /API#20Description /C /API#20Description /Pg 233 0 R /K 11 /P 1864 0 R >> endobj 1172 0 obj << /S /API#20Attribute /C /API#20Attribute /Pg 233 0 R /K 12 /P 1864 0 R >> endobj 1173 0 obj << /S /API#20Description /C /API#20Description /Pg 233 0 R /K 13 /P 1864 0 R >> endobj 1174 0 obj << /S /API#20Attribute /C /API#20Attribute /Pg 233 0 R /K 14 /P 1864 0 R >> endobj 1175 0 obj << /S /API#20Description /C /API#20Description /Pg 233 0 R /K 15 /P 1864 0 R >> endobj 1176 0 obj << /S /API#20Attribute /C /API#20Attribute /Pg 233 0 R /K 16 /P 1864 0 R >> endobj 1177 0 obj << /S /API#20Description /C /API#20Description /Pg 233 0 R /K 17 /P 1864 0 R >> endobj 1178 0 obj << /S /API#20Attribute /C /API#20Attribute /Pg 233 0 R /K 18 /P 1864 0 R >> endobj 1179 0 obj << /S /API#20Description /C /API#20Description /Pg 233 0 R /K 19 /P 1864 0 R >> endobj 1180 0 obj << /S /API#20Description /C /API#20Description /Pg 236 0 R /K 0 /P 1864 0 R >> endobj 1181 0 obj << /S /API#20Attribute /C /API#20Attribute /Pg 236 0 R /K 1 /P 1864 0 R >> endobj 1182 0 obj << /S /API#20Description /C /API#20Description /Pg 236 0 R /K 2 /P 1864 0 R >> endobj 1183 0 obj << /S /API#20Attribute /C /API#20Attribute /Pg 236 0 R /K 3 /P 1864 0 R >> endobj 1184 0 obj << /S /API#20Description /C /API#20Description /Pg 236 0 R /K 4 /P 1864 0 R >> endobj 1185 0 obj << /S /API#20Method /C /API#20Method /Pg 236 0 R /K 5 /P 1864 0 R >> endobj 1186 0 obj << /S /API#20Description /C /API#20Description /Pg 236 0 R /K 6 /P 1864 0 R >> endobj 1187 0 obj << /S /API#20Attribute /C /API#20Attribute /Pg 236 0 R /K 7 /P 1864 0 R >> endobj 1188 0 obj << /S /API#20Description /C /API#20Description /Pg 236 0 R /K 8 /P 1864 0 R >> endobj 1189 0 obj << /S /LBody /C /#C3#9Cberschrift#201 /Pg 239 0 R /K 0 /P 2043 0 R >> endobj 1190 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 239 0 R /K 1 /P 1864 0 R >> endobj 1191 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 239 0 R /K 2 /P 1864 0 R >> endobj 1192 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 239 0 R /K 3 /P 1864 0 R >> endobj 1193 0 obj << /S /Tabellen#20#C3#9Cberschrift /C /Tabellen#20#C3#9Cberschrift /Pg 239 0 R /K 4 /P 1868 0 R >> endobj 1194 0 obj << /S /Tabellen#20#C3#9Cberschrift /C /Tabellen#20#C3#9Cberschrift /Pg 239 0 R /K 5 /P 1871 0 R >> endobj 1195 0 obj << /O /Layout /WritingMode /LrTb /StartIndent 0 /EndIndent 0 /TextAlign /Start /SpaceBefore 5 /SpaceAfter 5.64999 /TextIndent 0 >> endobj 1196 0 obj << /S /Tabellen#20#C3#9Cberschrift /C /Tabellen#20#C3#9Cberschrift /Pg 239 0 R /K 6 /P 1874 0 R >> endobj 1197 0 obj << /S /Tabellen#20Inhalt /A [ 1198 0 R ] /C /Tabellen#20Inhalt /Pg 239 0 R /K 7 /P 1878 0 R >> endobj 1198 0 obj << /O /Layout /TextAlign /Start >> endobj 1199 0 obj << /O /Layout /WritingMode /LrTb /StartIndent 0 /EndIndent 0 /TextAlign /Justify /SpaceBefore 5 /SpaceAfter 5.64999 /TextIndent 0 >> endobj 1200 0 obj << /S /Tabellen#20Inhalt /A [ 1201 0 R ] /C /Tabellen#20Inhalt /Pg 239 0 R /K 8 /P 1881 0 R >> endobj 1201 0 obj << /O /Layout /TextAlign /Start >> endobj 1202 0 obj << /S /Tabellen#20Inhalt /A [ 1203 0 R ] /C /Tabellen#20Inhalt /Pg 239 0 R /K 9 /P 1884 0 R >> endobj 1203 0 obj << /O /Layout /TextAlign /Start >> endobj 1204 0 obj << /S /Tabellen#20Inhalt /A [ 1205 0 R ] /C /Tabellen#20Inhalt /Pg 239 0 R /K 10 /P 1884 0 R >> endobj 1205 0 obj << /O /Layout /TextAlign /Start >> endobj 1206 0 obj << /S /Tabellen#20Inhalt /A [ 1207 0 R ] /C /Tabellen#20Inhalt /Pg 239 0 R /K 11 /P 1884 0 R >> endobj 1207 0 obj << /O /Layout /TextAlign /Start >> endobj 1208 0 obj << /S /Tabellen#20Inhalt /A [ 1209 0 R ] /C /Tabellen#20Inhalt /Pg 239 0 R /K 12 /P 1884 0 R >> endobj 1209 0 obj << /O /Layout /TextAlign /Start >> endobj 1210 0 obj << /S /Tabellen#20Inhalt /A [ 1211 0 R ] /C /Tabellen#20Inhalt /Pg 239 0 R /K 13 /P 1884 0 R >> endobj 1211 0 obj << /O /Layout /TextAlign /Start >> endobj 1212 0 obj << /S /Tabellen#20Inhalt /A [ 1213 0 R ] /C /Tabellen#20Inhalt /Pg 239 0 R /K 14 /P 1884 0 R >> endobj 1213 0 obj << /O /Layout /TextAlign /Start >> endobj 1214 0 obj << /S /Tabellen#20Inhalt /A [ 1215 0 R ] /C /Tabellen#20Inhalt /Pg 239 0 R /K 15 /P 1888 0 R >> endobj 1215 0 obj << /O /Layout /TextAlign /Start >> endobj 1216 0 obj << /S /Tabellen#20Inhalt /A [ 1217 0 R ] /C /Tabellen#20Inhalt /Pg 239 0 R /K 16 /P 1891 0 R >> endobj 1217 0 obj << /O /Layout /TextAlign /Start >> endobj 1218 0 obj << /S /Tabellen#20Inhalt /A [ 1219 0 R ] /C /Tabellen#20Inhalt /Pg 239 0 R /K 17 /P 1894 0 R >> endobj 1219 0 obj << /O /Layout /TextAlign /Start >> endobj 1220 0 obj << /S /Tabellen#20Inhalt /A [ 1221 0 R ] /C /Tabellen#20Inhalt /Pg 239 0 R /K 18 /P 1894 0 R >> endobj 1221 0 obj << /O /Layout /TextAlign /Start >> endobj 1222 0 obj << /S /Tabellen#20Inhalt /A [ 1223 0 R ] /C /Tabellen#20Inhalt /Pg 239 0 R /K 19 /P 1894 0 R >> endobj 1223 0 obj << /O /Layout /TextAlign /Start >> endobj 1224 0 obj << /S /Tabellen#20Inhalt /A [ 1225 0 R ] /C /Tabellen#20Inhalt /Pg 239 0 R /K 20 /P 1894 0 R >> endobj 1225 0 obj << /O /Layout /TextAlign /Start >> endobj 1226 0 obj << /S /Tabellen#20Inhalt /A [ 1227 0 R ] /C /Tabellen#20Inhalt /Pg 239 0 R /K 21 /P 1894 0 R >> endobj 1227 0 obj << /O /Layout /TextAlign /Start >> endobj 1228 0 obj << /S /Tabellen#20Inhalt /A [ 1229 0 R ] /C /Tabellen#20Inhalt /Pg 239 0 R /P 1894 0 R /K [ 22 << /Type /MCR /Pg 242 0 R /MCID 0 >> ] >> endobj 1229 0 obj << /O /Layout /TextAlign /Start >> endobj 1230 0 obj << /S /Tabellen#20Inhalt /A [ 1231 0 R ] /C /Tabellen#20Inhalt /Pg 242 0 R /K 1 /P 1894 0 R >> endobj 1231 0 obj << /O /Layout /TextAlign /Start >> endobj 1232 0 obj << /S /Tabellen#20Inhalt /A [ 1233 0 R ] /C /Tabellen#20Inhalt /Pg 242 0 R /K 2 /P 1894 0 R >> endobj 1233 0 obj << /O /Layout /TextAlign /Start >> endobj 1234 0 obj << /S /Tabellen#20Inhalt /A [ 1235 0 R ] /C /Tabellen#20Inhalt /Pg 242 0 R /K 3 /P 1894 0 R >> endobj 1235 0 obj << /O /Layout /TextAlign /Start >> endobj 1236 0 obj << /S /Tabellen#20Inhalt /A [ 1237 0 R ] /C /Tabellen#20Inhalt /Pg 242 0 R /K 4 /P 1894 0 R >> endobj 1237 0 obj << /O /Layout /TextAlign /Start >> endobj 1238 0 obj << /S /Tabellen#20Inhalt /A [ 1239 0 R ] /C /Tabellen#20Inhalt /Pg 242 0 R /K 5 /P 1898 0 R >> endobj 1239 0 obj << /O /Layout /TextAlign /Start >> endobj 1240 0 obj << /S /Tabellen#20Inhalt /A [ 1241 0 R ] /C /Tabellen#20Inhalt /Pg 242 0 R /K 6 /P 1901 0 R >> endobj 1241 0 obj << /O /Layout /TextAlign /Start >> endobj 1242 0 obj << /S /Tabellen#20Inhalt /A [ 1243 0 R ] /C /Tabellen#20Inhalt /Pg 242 0 R /K 7 /P 1904 0 R >> endobj 1243 0 obj << /O /Layout /TextAlign /Start >> endobj 1244 0 obj << /S /Tabellen#20Inhalt /A [ 1245 0 R ] /C /Tabellen#20Inhalt /Pg 242 0 R /K 8 /P 1904 0 R >> endobj 1245 0 obj << /O /Layout /TextAlign /Start >> endobj 1246 0 obj << /S /Tabellen#20Inhalt /A [ 1247 0 R ] /C /Tabellen#20Inhalt /Pg 242 0 R /K 9 /P 1904 0 R >> endobj 1247 0 obj << /O /Layout /TextAlign /Start >> endobj 1248 0 obj << /S /Tabellen#20Inhalt /A [ 1249 0 R ] /C /Tabellen#20Inhalt /Pg 242 0 R /K 10 /P 1904 0 R >> endobj 1249 0 obj << /O /Layout /TextAlign /Start >> endobj 1250 0 obj << /S /Tabellen#20Inhalt /A [ 1251 0 R ] /C /Tabellen#20Inhalt /Pg 242 0 R /K 11 /P 1904 0 R >> endobj 1251 0 obj << /O /Layout /TextAlign /Start >> endobj 1252 0 obj << /S /Tabellen#20Inhalt /A [ 1253 0 R ] /C /Tabellen#20Inhalt /Pg 242 0 R /K 12 /P 1904 0 R >> endobj 1253 0 obj << /O /Layout /TextAlign /Start >> endobj 1254 0 obj << /S /Tabellen#20Inhalt /A [ 1255 0 R ] /C /Tabellen#20Inhalt /Pg 242 0 R /K 13 /P 1908 0 R >> endobj 1255 0 obj << /O /Layout /TextAlign /Start >> endobj 1256 0 obj << /S /Tabellen#20Inhalt /A [ 1257 0 R ] /C /Tabellen#20Inhalt /Pg 242 0 R /K 14 /P 1911 0 R >> endobj 1257 0 obj << /O /Layout /TextAlign /Start >> endobj 1258 0 obj << /S /Tabellen#20Inhalt /A [ 1259 0 R ] /C /Tabellen#20Inhalt /Pg 242 0 R /K 15 /P 1914 0 R >> endobj 1259 0 obj << /O /Layout /TextAlign /Start >> endobj 1260 0 obj << /S /Tabellen#20Inhalt /A [ 1261 0 R ] /C /Tabellen#20Inhalt /Pg 242 0 R /K 16 /P 1914 0 R >> endobj 1261 0 obj << /O /Layout /TextAlign /Start >> endobj 1262 0 obj << /S /Tabellen#20Inhalt /A [ 1263 0 R ] /C /Tabellen#20Inhalt /Pg 242 0 R /K 17 /P 1914 0 R >> endobj 1263 0 obj << /O /Layout /TextAlign /Start >> endobj 1264 0 obj << /S /Tabellen#20Inhalt /A [ 1265 0 R ] /C /Tabellen#20Inhalt /Pg 242 0 R /K 18 /P 1914 0 R >> endobj 1265 0 obj << /O /Layout /TextAlign /Start >> endobj 1266 0 obj << /S /Tabellen#20Inhalt /A [ 1267 0 R ] /C /Tabellen#20Inhalt /Pg 242 0 R /K 19 /P 1918 0 R >> endobj 1267 0 obj << /O /Layout /TextAlign /Start >> endobj 1268 0 obj << /S /Tabellen#20Inhalt /A [ 1269 0 R ] /C /Tabellen#20Inhalt /Pg 242 0 R /K 20 /P 1921 0 R >> endobj 1269 0 obj << /O /Layout /TextAlign /Start >> endobj 1270 0 obj << /S /Tabellen#20Inhalt /A [ 1271 0 R ] /C /Tabellen#20Inhalt /Pg 242 0 R /K 21 /P 1924 0 R >> endobj 1271 0 obj << /O /Layout /TextAlign /Start >> endobj 1272 0 obj << /S /Tabellen#20Inhalt /A [ 1273 0 R ] /C /Tabellen#20Inhalt /Pg 245 0 R /K 0 /P 1924 0 R >> endobj 1273 0 obj << /O /Layout /TextAlign /Start >> endobj 1274 0 obj << /S /Tabellen#20Inhalt /A [ 1275 0 R ] /C /Tabellen#20Inhalt /Pg 245 0 R /K 1 /P 1924 0 R >> endobj 1275 0 obj << /O /Layout /TextAlign /Start >> endobj 1276 0 obj << /S /Tabellen#20Inhalt /A [ 1277 0 R ] /C /Tabellen#20Inhalt /Pg 245 0 R /K 2 /P 1924 0 R >> endobj 1277 0 obj << /O /Layout /TextAlign /Start >> endobj 1278 0 obj << /S /Tabellen#20Inhalt /A [ 1279 0 R ] /C /Tabellen#20Inhalt /Pg 245 0 R /K 3 /P 1928 0 R >> endobj 1279 0 obj << /O /Layout /TextAlign /Start >> endobj 1280 0 obj << /S /Tabellen#20Inhalt /A [ 1281 0 R ] /C /Tabellen#20Inhalt /Pg 245 0 R /K 4 /P 1931 0 R >> endobj 1281 0 obj << /O /Layout /TextAlign /Start >> endobj 1282 0 obj << /S /Tabellen#20Inhalt /A [ 1283 0 R ] /C /Tabellen#20Inhalt /Pg 245 0 R /K 5 /P 1934 0 R >> endobj 1283 0 obj << /O /Layout /TextAlign /Start >> endobj 1284 0 obj << /S /Tabellen#20Inhalt /A [ 1285 0 R ] /C /Tabellen#20Inhalt /Pg 245 0 R /K 6 /P 1934 0 R >> endobj 1285 0 obj << /O /Layout /TextAlign /Start >> endobj 1286 0 obj << /S /Tabellen#20Inhalt /A [ 1287 0 R ] /C /Tabellen#20Inhalt /Pg 245 0 R /K 7 /P 1934 0 R >> endobj 1287 0 obj << /O /Layout /TextAlign /Start >> endobj 1288 0 obj << /S /Tabellen#20Inhalt /A [ 1289 0 R ] /C /Tabellen#20Inhalt /Pg 245 0 R /K 8 /P 1934 0 R >> endobj 1289 0 obj << /O /Layout /TextAlign /Start >> endobj 1290 0 obj << /S /Tabellen#20Inhalt /A [ 1291 0 R ] /C /Tabellen#20Inhalt /Pg 245 0 R /K 9 /P 1938 0 R >> endobj 1291 0 obj << /O /Layout /TextAlign /Start >> endobj 1292 0 obj << /S /Tabellen#20Inhalt /A [ 1293 0 R ] /C /Tabellen#20Inhalt /Pg 245 0 R /K 10 /P 1941 0 R >> endobj 1293 0 obj << /O /Layout /TextAlign /Start >> endobj 1294 0 obj << /S /Tabellen#20Inhalt /A [ 1295 0 R ] /C /Tabellen#20Inhalt /Pg 245 0 R /K 11 /P 1944 0 R >> endobj 1295 0 obj << /O /Layout /TextAlign /Start >> endobj 1296 0 obj << /S /Tabellen#20Inhalt /A [ 1297 0 R ] /C /Tabellen#20Inhalt /Pg 245 0 R /K 12 /P 1944 0 R >> endobj 1297 0 obj << /O /Layout /TextAlign /Start >> endobj 1298 0 obj << /S /Tabellen#20Inhalt /A [ 1299 0 R ] /C /Tabellen#20Inhalt /Pg 245 0 R /K 13 /P 1944 0 R >> endobj 1299 0 obj << /O /Layout /TextAlign /Start >> endobj 1300 0 obj << /S /Tabellen#20Inhalt /A [ 1301 0 R ] /C /Tabellen#20Inhalt /Pg 245 0 R /K 14 /P 1944 0 R >> endobj 1301 0 obj << /O /Layout /TextAlign /Start >> endobj 1302 0 obj << /S /Tabellen#20Inhalt /A [ 1303 0 R ] /C /Tabellen#20Inhalt /Pg 245 0 R /K 15 /P 1948 0 R >> endobj 1303 0 obj << /O /Layout /TextAlign /Start >> endobj 1304 0 obj << /S /Tabellen#20Inhalt /A [ 1305 0 R ] /C /Tabellen#20Inhalt /Pg 245 0 R /K 16 /P 1951 0 R >> endobj 1305 0 obj << /O /Layout /TextAlign /Start >> endobj 1306 0 obj << /S /Tabellen#20Inhalt /A [ 1307 0 R ] /C /Tabellen#20Inhalt /Pg 245 0 R /K 17 /P 1954 0 R >> endobj 1307 0 obj << /O /Layout /TextAlign /Start >> endobj 1308 0 obj << /S /Tabellen#20Inhalt /A [ 1309 0 R ] /C /Tabellen#20Inhalt /Pg 245 0 R /K 18 /P 1954 0 R >> endobj 1309 0 obj << /O /Layout /TextAlign /Start >> endobj 1310 0 obj << /S /Tabellen#20Inhalt /A [ 1311 0 R ] /C /Tabellen#20Inhalt /Pg 245 0 R /K 19 /P 1954 0 R >> endobj 1311 0 obj << /O /Layout /TextAlign /Start >> endobj 1312 0 obj << /S /Tabellen#20Inhalt /A [ 1313 0 R ] /C /Tabellen#20Inhalt /Pg 245 0 R /P 1954 0 R /K [ 20 << /Type /MCR /Pg 248 0 R /MCID 0 >> ] >> endobj 1313 0 obj << /O /Layout /TextAlign /Start >> endobj 1314 0 obj << /S /Tabellen#20Inhalt /A [ 1315 0 R ] /C /Tabellen#20Inhalt /Pg 248 0 R /K 1 /P 1954 0 R >> endobj 1315 0 obj << /O /Layout /TextAlign /Start >> endobj 1316 0 obj << /S /Tabellen#20Inhalt /A [ 1317 0 R ] /C /Tabellen#20Inhalt /Pg 248 0 R /K 2 /P 1954 0 R >> endobj 1317 0 obj << /O /Layout /TextAlign /Start >> endobj 1318 0 obj << /S /Tabellen#20Inhalt /A [ 1319 0 R ] /C /Tabellen#20Inhalt /Pg 248 0 R /K 3 /P 1954 0 R >> endobj 1319 0 obj << /O /Layout /TextAlign /Start >> endobj 1320 0 obj << /S /Tabellen#20Inhalt /A [ 1321 0 R ] /C /Tabellen#20Inhalt /Pg 248 0 R /K 4 /P 1954 0 R >> endobj 1321 0 obj << /O /Layout /TextAlign /Start >> endobj 1322 0 obj << /S /Tabellen#20Inhalt /A [ 1323 0 R ] /C /Tabellen#20Inhalt /Pg 248 0 R /K 5 /P 1954 0 R >> endobj 1323 0 obj << /O /Layout /TextAlign /Start >> endobj 1324 0 obj << /S /Tabellen#20Inhalt /A [ 1325 0 R ] /C /Tabellen#20Inhalt /Pg 248 0 R /K 6 /P 1954 0 R >> endobj 1325 0 obj << /O /Layout /TextAlign /Start >> endobj 1326 0 obj << /S /Tabellen#20Inhalt /A [ 1327 0 R ] /C /Tabellen#20Inhalt /Pg 248 0 R /K 7 /P 1958 0 R >> endobj 1327 0 obj << /O /Layout /TextAlign /Start >> endobj 1328 0 obj << /S /Tabellen#20Inhalt /A [ 1329 0 R ] /C /Tabellen#20Inhalt /Pg 248 0 R /K 8 /P 1961 0 R >> endobj 1329 0 obj << /O /Layout /TextAlign /Start >> endobj 1330 0 obj << /S /Tabellen#20Inhalt /A [ 1331 0 R ] /C /Tabellen#20Inhalt /Pg 248 0 R /K 9 /P 1964 0 R >> endobj 1331 0 obj << /O /Layout /TextAlign /Start >> endobj 1332 0 obj << /S /Tabellen#20Inhalt /A [ 1333 0 R ] /C /Tabellen#20Inhalt /Pg 248 0 R /K 10 /P 1964 0 R >> endobj 1333 0 obj << /O /Layout /TextAlign /Start >> endobj 1334 0 obj << /S /Tabellen#20Inhalt /A [ 1335 0 R ] /C /Tabellen#20Inhalt /Pg 248 0 R /K 11 /P 1964 0 R >> endobj 1335 0 obj << /O /Layout /TextAlign /Start >> endobj 1336 0 obj << /S /Tabellen#20Inhalt /A [ 1337 0 R ] /C /Tabellen#20Inhalt /Pg 248 0 R /K 12 /P 1964 0 R >> endobj 1337 0 obj << /O /Layout /TextAlign /Start >> endobj 1338 0 obj << /S /Tabellen#20Inhalt /A [ 1339 0 R ] /C /Tabellen#20Inhalt /Pg 248 0 R /K 13 /P 1964 0 R >> endobj 1339 0 obj << /O /Layout /TextAlign /Start >> endobj 1340 0 obj << /S /Tabellen#20Inhalt /A [ 1341 0 R ] /C /Tabellen#20Inhalt /Pg 248 0 R /K 14 /P 1964 0 R >> endobj 1341 0 obj << /O /Layout /TextAlign /Start >> endobj 1342 0 obj << /S /Tabellen#20Inhalt /A [ 1343 0 R ] /C /Tabellen#20Inhalt /Pg 248 0 R /K 15 /P 1968 0 R >> endobj 1343 0 obj << /O /Layout /TextAlign /Start >> endobj 1344 0 obj << /S /Tabellen#20Inhalt /A [ 1345 0 R ] /C /Tabellen#20Inhalt /Pg 248 0 R /K 16 /P 1971 0 R >> endobj 1345 0 obj << /O /Layout /TextAlign /Start >> endobj 1346 0 obj << /S /Tabellen#20Inhalt /A [ 1347 0 R ] /C /Tabellen#20Inhalt /Pg 248 0 R /K 17 /P 1974 0 R >> endobj 1347 0 obj << /O /Layout /TextAlign /Start >> endobj 1348 0 obj << /S /Tabellen#20Inhalt /A [ 1349 0 R ] /C /Tabellen#20Inhalt /Pg 248 0 R /P 1974 0 R /K [ 18 << /Type /MCR /Pg 251 0 R /MCID 0 >> ] >> endobj 1349 0 obj << /O /Layout /TextAlign /Start >> endobj 1350 0 obj << /S /Tabellen#20Inhalt /A [ 1351 0 R ] /C /Tabellen#20Inhalt /Pg 251 0 R /K 1 /P 1974 0 R >> endobj 1351 0 obj << /O /Layout /TextAlign /Start >> endobj 1352 0 obj << /S /Tabellen#20Inhalt /A [ 1353 0 R ] /C /Tabellen#20Inhalt /Pg 251 0 R /K 2 /P 1974 0 R >> endobj 1353 0 obj << /O /Layout /TextAlign /Start >> endobj 1354 0 obj << /S /Tabellen#20Inhalt /A [ 1355 0 R ] /C /Tabellen#20Inhalt /Pg 251 0 R /K 3 /P 1974 0 R >> endobj 1355 0 obj << /O /Layout /TextAlign /Start >> endobj 1356 0 obj << /S /Tabellen#20Inhalt /A [ 1357 0 R ] /C /Tabellen#20Inhalt /Pg 251 0 R /K 4 /P 1974 0 R >> endobj 1357 0 obj << /O /Layout /TextAlign /Start >> endobj 1358 0 obj << /S /LBody /C /#C3#9Cberschrift#202 /Pg 251 0 R /K 5 /P 2045 0 R >> endobj 1359 0 obj << /S /LBody /A [ 1360 0 R ] /C /Textk#C3#B6rper /Pg 251 0 R /K 6 /P 2047 0 R >> endobj 1360 0 obj << /O /Layout /StartIndent 78.55 /TextIndent -17.99998 >> endobj 1361 0 obj << /S /LBody /A [ 1362 0 R ] /C /Textk#C3#B6rper /Pg 251 0 R /K 7 /P 2048 0 R >> endobj 1362 0 obj << /O /Layout /StartIndent 78.55 /TextIndent -17.99998 >> endobj 1363 0 obj << /S /LBody /A [ 1364 0 R ] /C /Textk#C3#B6rper /Pg 251 0 R /K 8 /P 2049 0 R >> endobj 1364 0 obj << /O /Layout /StartIndent 78.55 /TextIndent -17.99998 >> endobj 1365 0 obj << /S /LBody /A [ 1366 0 R ] /C /Textk#C3#B6rper /Pg 251 0 R /K 9 /P 2050 0 R >> endobj 1366 0 obj << /O /Layout /StartIndent 78.55 /TextIndent -17.99998 >> endobj 1367 0 obj << /S /LBody /A [ 1368 0 R ] /C /Textk#C3#B6rper /Pg 251 0 R /K 10 /P 2051 0 R >> endobj 1368 0 obj << /O /Layout /StartIndent 78.55 /TextIndent -17.99998 >> endobj 1369 0 obj << /S /LBody /C /#C3#9Cberschrift#201 /Pg 254 0 R /K 0 /P 2053 0 R >> endobj 1370 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 254 0 R /K 1 /P 1864 0 R >> endobj 1371 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 254 0 R /K 2 /P 1864 0 R >> endobj 1372 0 obj << /S /LBody /C /#C3#9Cberschrift#202 /Pg 254 0 R /K 3 /P 2055 0 R >> endobj 1373 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 254 0 R /K [ 4 1374 0 R 7 1376 0 R 9 ] /P 1864 0 R >> endobj 1374 0 obj << /S /Link /P 1373 0 R /K [ 1375 0 R << /Type /OBJR /Pg 254 0 R /Obj 379 0 R >> << /Type /OBJR /Pg 254 0 R /Obj 380 0 R >> ] >> endobj 1375 0 obj << /S /Underline /P 1374 0 R /A 2292 0 R /Pg 254 0 R /K [ 5 6 ] >> endobj 1376 0 obj << /S /Link /P 1373 0 R /K [ 1377 0 R << /Type /OBJR /Pg 254 0 R /Obj 381 0 R >> ] >> endobj 1377 0 obj << /S /Underline /P 1376 0 R /A 2293 0 R /Pg 254 0 R /K 8 >> endobj 1378 0 obj << /S /Textk#C3#B6rper /A [ 1379 0 R ] /C /Textk#C3#B6rper /Pg 254 0 R /K 10 /P 1864 0 R >> endobj 1379 0 obj << /O /Layout /StartIndent 56.60001 >> endobj 1380 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 254 0 R /K [ 1381 0 R 12 ] /P 1864 0 R >> endobj 1381 0 obj << /S /Underline /P 1380 0 R /A 2294 0 R /Pg 254 0 R /K 11 >> endobj 1382 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 254 0 R /K 13 /P 1864 0 R >> endobj 1383 0 obj << /S /LBody /C /#C3#9Cberschrift#203 /Pg 254 0 R /K 14 /P 2057 0 R >> endobj 1384 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 254 0 R /K 15 /P 1864 0 R >> endobj 1385 0 obj << /O /Layout /WritingMode /LrTb /StartIndent 42.55 /EndIndent 0 /TextAlign /Start /SpaceBefore 28.35001 /SpaceAfter 5.64999 /TextIndent -42.54999 >> endobj 1386 0 obj << /S /API#20Function /C /API#20Function /Pg 254 0 R /K 16 /P 1864 0 R >> endobj 1387 0 obj << /S /API#20Description /C /API#20Description /Pg 254 0 R /K 17 /P 1864 0 R >> endobj 1388 0 obj << /S /API#20Function /C /API#20Function /Pg 254 0 R /K 18 /P 1864 0 R >> endobj 1389 0 obj << /S /API#20Description /C /API#20Description /Pg 254 0 R /K 19 /P 1864 0 R >> endobj 1390 0 obj << /S /API#20Function /C /API#20Function /Pg 261 0 R /K 0 /P 1864 0 R >> endobj 1391 0 obj << /S /API#20Description /C /API#20Description /Pg 261 0 R /K 1 /P 1864 0 R >> endobj 1392 0 obj << /S /API#20Function /C /API#20Function /Pg 261 0 R /K 2 /P 1864 0 R >> endobj 1393 0 obj << /S /API#20Description /C /API#20Description /Pg 261 0 R /K 3 /P 1864 0 R >> endobj 1394 0 obj << /S /API#20Description /C /API#20Description /Pg 261 0 R /K 4 /P 1864 0 R >> endobj 1395 0 obj << /S /API#20Description /C /API#20Description /Pg 261 0 R /K 5 /P 1864 0 R >> endobj 1396 0 obj << /S /API#20Function /C /API#20Function /Pg 261 0 R /K 6 /P 1864 0 R >> endobj 1397 0 obj << /S /API#20Description /C /API#20Description /Pg 261 0 R /K 7 /P 1864 0 R >> endobj 1398 0 obj << /S /API#20Description /C /API#20Description /Pg 261 0 R /K 8 /P 1864 0 R >> endobj 1399 0 obj << /S /API#20Function /C /API#20Function /Pg 261 0 R /K 9 /P 1864 0 R >> endobj 1400 0 obj << /S /API#20Description /C /API#20Description /Pg 261 0 R /K 10 /P 1864 0 R >> endobj 1401 0 obj << /S /API#20Description /C /API#20Description /Pg 261 0 R /K 11 /P 1864 0 R >> endobj 1402 0 obj << /S /API#20Function /C /API#20Function /Pg 261 0 R /K 12 /P 1864 0 R >> endobj 1403 0 obj << /S /API#20Description /C /API#20Description /Pg 261 0 R /K 13 /P 1864 0 R >> endobj 1404 0 obj << /S /API#20Function /C /API#20Function /Pg 261 0 R /K 14 /P 1864 0 R >> endobj 1405 0 obj << /S /API#20Description /C /API#20Description /Pg 261 0 R /K 15 /P 1864 0 R >> endobj 1406 0 obj << /S /API#20Function /C /API#20Function /Pg 261 0 R /K 16 /P 1864 0 R >> endobj 1407 0 obj << /S /API#20Description /C /API#20Description /Pg 261 0 R /K 17 /P 1864 0 R >> endobj 1408 0 obj << /S /API#20Function /C /API#20Function /Pg 261 0 R /K 18 /P 1864 0 R >> endobj 1409 0 obj << /S /API#20Description /C /API#20Description /Pg 261 0 R /K 19 /P 1864 0 R >> endobj 1410 0 obj << /S /API#20Function /C /API#20Function /Pg 261 0 R /K 20 /P 1864 0 R >> endobj 1411 0 obj << /S /API#20Description /C /API#20Description /Pg 261 0 R /K 21 /P 1864 0 R >> endobj 1412 0 obj << /S /API#20Function /C /API#20Function /Pg 264 0 R /K 0 /P 1864 0 R >> endobj 1413 0 obj << /S /API#20Description /C /API#20Description /Pg 264 0 R /K [ 1 1414 0 R 3 ] /P 1864 0 R >> endobj 1414 0 obj << /S /Link /P 1413 0 R /K [ 1415 0 R << /Type /OBJR /Pg 264 0 R /Obj 382 0 R >> ] >> endobj 1415 0 obj << /S /Underline /P 1414 0 R /A 2297 0 R /Pg 264 0 R /K 2 >> endobj 1416 0 obj << /S /API#20Function /C /API#20Function /Pg 264 0 R /K 4 /P 1864 0 R >> endobj 1417 0 obj << /S /API#20Description /C /API#20Description /Pg 264 0 R /K 5 /P 1864 0 R >> endobj 1418 0 obj << /S /API#20Function /C /API#20Function /Pg 264 0 R /K 6 /P 1864 0 R >> endobj 1419 0 obj << /S /API#20Description /C /API#20Description /Pg 264 0 R /K 7 /P 1864 0 R >> endobj 1420 0 obj << /S /API#20Function /C /API#20Function /Pg 264 0 R /K 8 /P 1864 0 R >> endobj 1421 0 obj << /S /API#20Description /C /API#20Description /Pg 264 0 R /K 9 /P 1864 0 R >> endobj 1422 0 obj << /S /LBody /C /#C3#9Cberschrift#204 /Pg 264 0 R /K 10 /P 2059 0 R >> endobj 1423 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 264 0 R /K 11 /P 1864 0 R >> endobj 1424 0 obj << /O /Layout /WritingMode /LrTb /StartIndent 42.55 /EndIndent 0 /TextAlign /Start /SpaceBefore 10 /SpaceAfter 5 /TextIndent -42.54999 >> endobj 1425 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 264 0 R /K 12 /P 1864 0 R >> endobj 1426 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 264 0 R /K 13 /P 1864 0 R >> endobj 1427 0 obj << /S /LBody /C /#C3#9Cberschrift#203 /Pg 264 0 R /K 14 /P 2061 0 R >> endobj 1428 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 264 0 R /K 15 /P 1864 0 R >> endobj 1429 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 264 0 R /K 16 /P 1864 0 R >> endobj 1430 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 264 0 R /P 1864 0 R /K [ 17 << /Type /MCR /Pg 269 0 R /MCID 0 >> ] >> endobj 1431 0 obj << /S /LBody /C /#C3#9Cberschrift#202 /Pg 269 0 R /K 1 /P 2063 0 R >> endobj 1432 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 269 0 R /K 2 /P 1864 0 R >> endobj 1433 0 obj << /S /Textk#C3#B6rper /A [ 1434 0 R ] /C /Textk#C3#B6rper /Pg 269 0 R /K 3 /P 1864 0 R >> endobj 1434 0 obj << /O /Layout /StartIndent 56.60001 >> endobj 1435 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 269 0 R /K [ 4 1436 0 R 6 ] /P 1864 0 R >> endobj 1436 0 obj << /S /Link /P 1435 0 R /K [ 1437 0 R << /Type /OBJR /Pg 269 0 R /Obj 383 0 R >> ] >> endobj 1437 0 obj << /S /Underline /P 1436 0 R /A 2301 0 R /Pg 269 0 R /K 5 >> endobj 1438 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 269 0 R /K 7 /P 1864 0 R >> endobj 1439 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 269 0 R /K 8 /P 1864 0 R >> endobj 1440 0 obj << /S /LBody /C /#C3#9Cberschrift#203 /Pg 269 0 R /K 9 /P 2065 0 R >> endobj 1441 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 269 0 R /K 10 /P 1864 0 R >> endobj 1442 0 obj << /S /API#20Function /C /API#20Function /Pg 269 0 R /K 11 /P 1864 0 R >> endobj 1443 0 obj << /S /API#20Description /C /API#20Description /Pg 269 0 R /K 12 /P 1864 0 R >> endobj 1444 0 obj << /S /API#20Function /C /API#20Function /Pg 269 0 R /K 13 /P 1864 0 R >> endobj 1445 0 obj << /S /API#20Description /C /API#20Description /Pg 269 0 R /K 14 /P 1864 0 R >> endobj 1446 0 obj << /S /API#20Function /C /API#20Function /Pg 269 0 R /K 15 /P 1864 0 R >> endobj 1447 0 obj << /S /API#20Description /C /API#20Description /Pg 269 0 R /K 16 /P 1864 0 R >> endobj 1448 0 obj << /S /API#20Function /C /API#20Function /Pg 274 0 R /K 0 /P 1864 0 R >> endobj 1449 0 obj << /S /API#20Description /C /API#20Description /Pg 274 0 R /K 1 /P 1864 0 R >> endobj 1450 0 obj << /S /API#20Function /C /API#20Function /Pg 274 0 R /K 2 /P 1864 0 R >> endobj 1451 0 obj << /S /API#20Description /C /API#20Description /Pg 274 0 R /K 3 /P 1864 0 R >> endobj 1452 0 obj << /S /API#20Function /C /API#20Function /Pg 274 0 R /K 4 /P 1864 0 R >> endobj 1453 0 obj << /S /API#20Description /C /API#20Description /Pg 274 0 R /K 5 /P 1864 0 R >> endobj 1454 0 obj << /S /API#20Description /C /API#20Description /Pg 274 0 R /K [ 1455 0 R 7 ] /P 1864 0 R >> endobj 1455 0 obj << /S /Underline /P 1454 0 R /A 2303 0 R /Pg 274 0 R /K 6 >> endobj 1456 0 obj << /S /API#20Function /C /API#20Function /Pg 274 0 R /K 8 /P 1864 0 R >> endobj 1457 0 obj << /S /API#20Description /C /API#20Description /Pg 274 0 R /K 9 /P 1864 0 R >> endobj 1458 0 obj << /S /LBody /C /#C3#9Cberschrift#204 /Pg 274 0 R /K 10 /P 2067 0 R >> endobj 1459 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 274 0 R /K 11 /P 1864 0 R >> endobj 1460 0 obj << /S /LBody /C /#C3#9Cberschrift#202 /Pg 274 0 R /K 12 /P 2069 0 R >> endobj 1461 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 274 0 R /K [ 13 1462 0 R 15 ] /P 1864 0 R >> endobj 1462 0 obj << /S /Link /P 1461 0 R /K [ 1463 0 R << /Type /OBJR /Pg 274 0 R /Obj 384 0 R >> ] >> endobj 1463 0 obj << /S /Underline /P 1462 0 R /A 2304 0 R /Pg 274 0 R /K 14 >> endobj 1464 0 obj << /S /LBody /C /#C3#9Cberschrift#203 /Pg 274 0 R /K 16 /P 2071 0 R >> endobj 1465 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 274 0 R /K 17 /P 1864 0 R >> endobj 1466 0 obj << /S /API#20Function /C /API#20Function /Pg 279 0 R /K 0 /P 1864 0 R >> endobj 1467 0 obj << /S /API#20Description /C /API#20Description /Pg 279 0 R /K 1 /P 1864 0 R >> endobj 1468 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 279 0 R /K 2 /P 1864 0 R >> endobj 1469 0 obj << /S /API#20Function /C /API#20Function /Pg 279 0 R /K 3 /P 1864 0 R >> endobj 1470 0 obj << /S /API#20Function /C /API#20Function /Pg 279 0 R /K 4 /P 1864 0 R >> endobj 1471 0 obj << /S /API#20Function /C /API#20Function /Pg 279 0 R /K 5 /P 1864 0 R >> endobj 1472 0 obj << /S /API#20Function /C /API#20Function /Pg 279 0 R /K 6 /P 1864 0 R >> endobj 1473 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 279 0 R /K [ 7 1474 0 R 9 ] /P 1864 0 R >> endobj 1474 0 obj << /S /Link /P 1473 0 R /K [ 1475 0 R << /Type /OBJR /Pg 279 0 R /Obj 385 0 R >> ] >> endobj 1475 0 obj << /S /Underline /P 1474 0 R /A 2306 0 R /Pg 279 0 R /K 8 >> endobj 1476 0 obj << /S /API#20Function /C /API#20Function /Pg 279 0 R /K 10 /P 1864 0 R >> endobj 1477 0 obj << /S /API#20Function /C /API#20Function /Pg 279 0 R /K 11 /P 1864 0 R >> endobj 1478 0 obj << /S /API#20Function /C /API#20Function /Pg 279 0 R /K 12 /P 1864 0 R >> endobj 1479 0 obj << /S /API#20Function /C /API#20Function /Pg 279 0 R /K 13 /P 1864 0 R >> endobj 1480 0 obj << /S /API#20Function /C /API#20Function /Pg 279 0 R /K 14 /P 1864 0 R >> endobj 1481 0 obj << /S /API#20Function /C /API#20Function /Pg 279 0 R /K 15 /P 1864 0 R >> endobj 1482 0 obj << /S /API#20Function /C /API#20Function /Pg 279 0 R /K 16 /P 1864 0 R >> endobj 1483 0 obj << /S /LBody /C /#C3#9Cberschrift#202 /Pg 279 0 R /K 17 /P 2073 0 R >> endobj 1484 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 279 0 R /K 18 /P 1864 0 R >> endobj 1485 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 279 0 R /K 19 /P 1864 0 R >> endobj 1486 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 279 0 R /P 1864 0 R /K [ 20 << /Type /MCR /Pg 284 0 R /MCID 0 >> ] >> endobj 1487 0 obj << /S /LBody /C /#C3#9Cberschrift#203 /Pg 284 0 R /K 1 /P 2075 0 R >> endobj 1488 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 284 0 R /K 2 /P 1864 0 R >> endobj 1489 0 obj << /S /API#20Function /C /API#20Function /Pg 284 0 R /K 3 /P 1864 0 R >> endobj 1490 0 obj << /S /API#20Description /C /API#20Description /Pg 284 0 R /K 4 /P 1864 0 R >> endobj 1491 0 obj << /S /API#20Description /C /API#20Description /Pg 284 0 R /K 5 /P 1864 0 R >> endobj 1492 0 obj << /S /API#20Function /C /API#20Function /Pg 284 0 R /K 6 /P 1864 0 R >> endobj 1493 0 obj << /S /API#20Description /C /API#20Description /Pg 284 0 R /K 7 /P 1864 0 R >> endobj 1494 0 obj << /S /API#20Function /C /API#20Function /Pg 284 0 R /K 8 /P 1864 0 R >> endobj 1495 0 obj << /S /API#20Description /C /API#20Description /Pg 284 0 R /K 9 /P 1864 0 R >> endobj 1496 0 obj << /S /API#20Description /C /API#20Description /Pg 284 0 R /K 10 /P 1864 0 R >> endobj 1497 0 obj << /S /API#20Description /A [ 1498 0 R ] /C /API#20Description /Pg 284 0 R /K 11 /P 1864 0 R >> endobj 1498 0 obj << /O /Layout /StartIndent 113.2 >> endobj 1499 0 obj << /S /API#20Description /A [ 1500 0 R ] /C /API#20Description /Pg 284 0 R /K 12 /P 1864 0 R >> endobj 1500 0 obj << /O /Layout /StartIndent 113.2 >> endobj 1501 0 obj << /S /API#20Description /A [ 1502 0 R ] /C /API#20Description /Pg 284 0 R /K 13 /P 1864 0 R >> endobj 1502 0 obj << /O /Layout /StartIndent 113.2 >> endobj 1503 0 obj << /S /API#20Description /A [ 1504 0 R ] /C /API#20Description /Pg 284 0 R /K 14 /P 1864 0 R >> endobj 1504 0 obj << /O /Layout /StartIndent 113.2 >> endobj 1505 0 obj << /S /API#20Description /A [ 1506 0 R ] /C /API#20Description /Pg 284 0 R /K 15 /P 1864 0 R >> endobj 1506 0 obj << /O /Layout /StartIndent 113.2 >> endobj 1507 0 obj << /S /API#20Description /A [ 1508 0 R ] /C /API#20Description /Pg 284 0 R /K 16 /P 1864 0 R >> endobj 1508 0 obj << /O /Layout /StartIndent 113.2 >> endobj 1509 0 obj << /S /API#20Description /A [ 1510 0 R ] /C /API#20Description /Pg 284 0 R /K 17 /P 1864 0 R >> endobj 1510 0 obj << /O /Layout /StartIndent 113.2 >> endobj 1511 0 obj << /S /API#20Description /A [ 1512 0 R ] /C /API#20Description /Pg 284 0 R /K 18 /P 1864 0 R >> endobj 1512 0 obj << /O /Layout /StartIndent 113.2 >> endobj 1513 0 obj << /S /API#20Description /A [ 1514 0 R ] /C /API#20Description /Pg 284 0 R /K 19 /P 1864 0 R >> endobj 1514 0 obj << /O /Layout /StartIndent 113.2 >> endobj 1515 0 obj << /S /API#20Description /A [ 1516 0 R ] /C /API#20Description /Pg 284 0 R /K 20 /P 1864 0 R >> endobj 1516 0 obj << /O /Layout /StartIndent 113.2 >> endobj 1517 0 obj << /S /API#20Description /C /API#20Description /Pg 284 0 R /K 21 /P 1864 0 R >> endobj 1518 0 obj << /S /API#20Description /C /API#20Description /Pg 287 0 R /K 0 /P 1864 0 R >> endobj 1519 0 obj << /S /API#20Description /C /API#20Description /Pg 287 0 R /K 1 /P 1864 0 R >> endobj 1520 0 obj << /S /API#20Description /A [ 1521 0 R ] /C /API#20Description /Pg 287 0 R /K 2 /P 1864 0 R >> endobj 1521 0 obj << /O /Layout /StartIndent 113.2 >> endobj 1522 0 obj << /S /API#20Description /A [ 1523 0 R ] /C /API#20Description /Pg 287 0 R /K 3 /P 1864 0 R >> endobj 1523 0 obj << /O /Layout /StartIndent 113.2 >> endobj 1524 0 obj << /S /API#20Description /A [ 1525 0 R ] /C /API#20Description /Pg 287 0 R /K 4 /P 1864 0 R >> endobj 1525 0 obj << /O /Layout /StartIndent 113.2 >> endobj 1526 0 obj << /S /API#20Description /C /API#20Description /Pg 287 0 R /K 5 /P 1864 0 R >> endobj 1527 0 obj << /S /API#20Function /C /API#20Function /Pg 287 0 R /K 6 /P 1864 0 R >> endobj 1528 0 obj << /S /API#20Description /C /API#20Description /Pg 287 0 R /K 7 /P 1864 0 R >> endobj 1529 0 obj << /S /API#20Function /C /API#20Function /Pg 287 0 R /K 8 /P 1864 0 R >> endobj 1530 0 obj << /S /API#20Description /C /API#20Description /Pg 287 0 R /K 9 /P 1864 0 R >> endobj 1531 0 obj << /S /API#20Description /C /API#20Description /Pg 287 0 R /K 10 /P 1864 0 R >> endobj 1532 0 obj << /S /API#20Description /A [ 1533 0 R ] /C /API#20Description /Pg 287 0 R /K 11 /P 1864 0 R >> endobj 1533 0 obj << /O /Layout /StartIndent 113.2 >> endobj 1534 0 obj << /S /API#20Description /A [ 1535 0 R ] /C /API#20Description /Pg 287 0 R /K 12 /P 1864 0 R >> endobj 1535 0 obj << /O /Layout /StartIndent 113.2 >> endobj 1536 0 obj << /S /API#20Description /A [ 1537 0 R ] /C /API#20Description /Pg 287 0 R /K 13 /P 1864 0 R >> endobj 1537 0 obj << /O /Layout /StartIndent 113.2 >> endobj 1538 0 obj << /S /API#20Description /C /API#20Description /Pg 287 0 R /K 14 /P 1864 0 R >> endobj 1539 0 obj << /S /API#20Function /C /API#20Function /Pg 287 0 R /K 15 /P 1864 0 R >> endobj 1540 0 obj << /S /API#20Description /C /API#20Description /Pg 287 0 R /K 16 /P 1864 0 R >> endobj 1541 0 obj << /S /API#20Function /C /API#20Function /Pg 287 0 R /K 17 /P 1864 0 R >> endobj 1542 0 obj << /S /API#20Description /C /API#20Description /Pg 287 0 R /K 18 /P 1864 0 R >> endobj 1543 0 obj << /S /API#20Description /C /API#20Description /Pg 287 0 R /K 19 /P 1864 0 R >> endobj 1544 0 obj << /S /API#20Description /C /API#20Description /Pg 287 0 R /K 20 /P 1864 0 R >> endobj 1545 0 obj << /S /API#20Description /A [ 1546 0 R ] /C /API#20Description /Pg 287 0 R /K 21 /P 1864 0 R >> endobj 1546 0 obj << /O /Layout /TextIndent 56.5 >> endobj 1547 0 obj << /S /API#20Description /C /API#20Description /Pg 287 0 R /K 22 /P 1864 0 R >> endobj 1548 0 obj << /S /API#20Description /C /API#20Description /Pg 290 0 R /K 0 /P 1864 0 R >> endobj 1549 0 obj << /S /API#20Description /C /API#20Description /Pg 290 0 R /K 1 /P 1864 0 R >> endobj 1550 0 obj << /S /API#20Function /C /API#20Function /Pg 290 0 R /K 2 /P 1864 0 R >> endobj 1551 0 obj << /S /API#20Description /C /API#20Description /Pg 290 0 R /K 3 /P 1864 0 R >> endobj 1552 0 obj << /S /API#20Description /C /API#20Description /Pg 290 0 R /K 4 /P 1864 0 R >> endobj 1553 0 obj << /S /LBody /C /#C3#9Cberschrift#202 /Pg 290 0 R /K 5 /P 2077 0 R >> endobj 1554 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 290 0 R /K 6 /P 1864 0 R >> endobj 1555 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 290 0 R /K [ 7 1556 0 R 9 ] /P 1864 0 R >> endobj 1556 0 obj << /S /Link /P 1555 0 R /K [ 1557 0 R << /Type /OBJR /Pg 290 0 R /Obj 386 0 R >> ] >> endobj 1557 0 obj << /S /Underline /P 1556 0 R /A 2310 0 R /Pg 290 0 R /K 8 >> endobj 1558 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 290 0 R /K 10 /P 1864 0 R >> endobj 1559 0 obj << /S /LBody /C /#C3#9Cberschrift#203 /Pg 290 0 R /K 11 /P 2079 0 R >> endobj 1560 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 290 0 R /K 12 /P 1864 0 R >> endobj 1561 0 obj << /S /API#20Function /C /API#20Function /Pg 290 0 R /K 13 /P 1864 0 R >> endobj 1562 0 obj << /S /API#20Description /C /API#20Description /Pg 290 0 R /K 14 /P 1864 0 R >> endobj 1563 0 obj << /S /API#20Description /C /API#20Description /Pg 290 0 R /K 15 /P 1864 0 R >> endobj 1564 0 obj << /S /API#20Description /C /API#20Description /Pg 295 0 R /K 0 /P 1864 0 R >> endobj 1565 0 obj << /S /API#20Description /C /API#20Description /Pg 295 0 R /K 1 /P 1864 0 R >> endobj 1566 0 obj << /S /API#20Function /C /API#20Function /Pg 295 0 R /K 2 /P 1864 0 R >> endobj 1567 0 obj << /S /API#20Description /C /API#20Description /Pg 295 0 R /K 3 /P 1864 0 R >> endobj 1568 0 obj << /S /API#20Function /C /API#20Function /Pg 295 0 R /K 4 /P 1864 0 R >> endobj 1569 0 obj << /S /API#20Description /C /API#20Description /Pg 295 0 R /K 5 /P 1864 0 R >> endobj 1570 0 obj << /S /API#20Function /C /API#20Function /Pg 295 0 R /K 6 /P 1864 0 R >> endobj 1571 0 obj << /S /API#20Description /C /API#20Description /Pg 295 0 R /K 7 /P 1864 0 R >> endobj 1572 0 obj << /S /API#20Function /C /API#20Function /Pg 295 0 R /K 8 /P 1864 0 R >> endobj 1573 0 obj << /S /API#20Description /C /API#20Description /Pg 295 0 R /K 9 /P 1864 0 R >> endobj 1574 0 obj << /S /API#20Description /C /API#20Description /Pg 295 0 R /K 10 /P 1864 0 R >> endobj 1575 0 obj << /S /API#20Function /C /API#20Function /Pg 295 0 R /K 11 /P 1864 0 R >> endobj 1576 0 obj << /S /API#20Description /C /API#20Description /Pg 295 0 R /K 12 /P 1864 0 R >> endobj 1577 0 obj << /S /API#20Function /C /API#20Function /Pg 295 0 R /K 13 /P 1864 0 R >> endobj 1578 0 obj << /S /API#20Description /C /API#20Description /Pg 295 0 R /K 14 /P 1864 0 R >> endobj 1579 0 obj << /S /API#20Description /C /API#20Description /Pg 295 0 R /K 15 /P 1864 0 R >> endobj 1580 0 obj << /S /API#20Description /C /API#20Description /Pg 295 0 R /K 16 /P 1864 0 R >> endobj 1581 0 obj << /S /API#20Function /C /API#20Function /Pg 295 0 R /K 17 /P 1864 0 R >> endobj 1582 0 obj << /S /API#20Description /C /API#20Description /Pg 295 0 R /K 18 /P 1864 0 R >> endobj 1583 0 obj << /S /API#20Description /C /API#20Description /Pg 295 0 R /K 19 /P 1864 0 R >> endobj 1584 0 obj << /S /API#20Method /C /API#20Method /Pg 295 0 R /K 20 /P 1864 0 R >> endobj 1585 0 obj << /S /API#20Description /C /API#20Description /Pg 295 0 R /K 21 /P 1864 0 R >> endobj 1586 0 obj << /S /API#20Description /C /API#20Description /Pg 295 0 R /K 22 /P 1864 0 R >> endobj 1587 0 obj << /S /API#20Description /C /API#20Description /Pg 295 0 R /K 23 /P 1864 0 R >> endobj 1588 0 obj << /S /API#20Description /C /API#20Description /Pg 295 0 R /K 24 /P 1864 0 R >> endobj 1589 0 obj << /S /API#20Function /C /API#20Function /Pg 298 0 R /K 0 /P 1864 0 R >> endobj 1590 0 obj << /S /API#20Description /C /API#20Description /Pg 298 0 R /K 1 /P 1864 0 R >> endobj 1591 0 obj << /S /API#20Description /C /API#20Description /Pg 298 0 R /K 2 /P 1864 0 R >> endobj 1592 0 obj << /S /API#20Description /C /API#20Description /Pg 298 0 R /K 3 /P 1864 0 R >> endobj 1593 0 obj << /S /API#20Description /C /API#20Description /Pg 298 0 R /K 4 /P 1864 0 R >> endobj 1594 0 obj << /S /API#20Description /C /API#20Description /Pg 298 0 R /K 5 /P 1864 0 R >> endobj 1595 0 obj << /S /API#20Description /C /API#20Description /Pg 298 0 R /K 6 /P 1864 0 R >> endobj 1596 0 obj << /S /LBody /C /#C3#9Cberschrift#203 /Pg 298 0 R /K 7 /P 2081 0 R >> endobj 1597 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 298 0 R /K 8 /P 1864 0 R >> endobj 1598 0 obj << /S /API#20Attribute /C /API#20Attribute /Pg 298 0 R /K 9 /P 1864 0 R >> endobj 1599 0 obj << /S /API#20Description /C /API#20Description /Pg 298 0 R /K 10 /P 1864 0 R >> endobj 1600 0 obj << /S /API#20Attribute /C /API#20Attribute /Pg 298 0 R /K 11 /P 1864 0 R >> endobj 1601 0 obj << /S /API#20Description /C /API#20Description /Pg 298 0 R /K 12 /P 1864 0 R >> endobj 1602 0 obj << /S /API#20Attribute /C /API#20Attribute /Pg 298 0 R /K 13 /P 1864 0 R >> endobj 1603 0 obj << /S /API#20Description /C /API#20Description /Pg 298 0 R /K 14 /P 1864 0 R >> endobj 1604 0 obj << /S /API#20Attribute /C /API#20Attribute /Pg 298 0 R /K 15 /P 1864 0 R >> endobj 1605 0 obj << /S /API#20Description /C /API#20Description /Pg 298 0 R /K 16 /P 1864 0 R >> endobj 1606 0 obj << /S /LBody /C /#C3#9Cberschrift#203 /Pg 301 0 R /K 0 /P 2083 0 R >> endobj 1607 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 301 0 R /K 1 /P 1864 0 R >> endobj 1608 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 301 0 R /K 2 /P 1864 0 R >> endobj 1609 0 obj << /S /LBody /C /#C3#9Cberschrift#201 /Pg 304 0 R /K 0 /P 2085 0 R >> endobj 1610 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 304 0 R /K 1 /P 1864 0 R >> endobj 1611 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 304 0 R /K 2 /P 1864 0 R >> endobj 1612 0 obj << /S /Program#20Text /C /Program#20Text /Pg 304 0 R /K 3 /P 1864 0 R >> endobj 1613 0 obj << /S /Program#20Text /C /Program#20Text /Pg 304 0 R /K 4 /P 1864 0 R >> endobj 1614 0 obj << /S /Program#20Text /C /Program#20Text /Pg 304 0 R /K 5 /P 1864 0 R >> endobj 1615 0 obj << /S /Program#20Text /C /Program#20Text /Pg 304 0 R /K 6 /P 1864 0 R >> endobj 1616 0 obj << /S /Program#20Text /C /Program#20Text /Pg 304 0 R /K 7 /P 1864 0 R >> endobj 1617 0 obj << /S /Program#20Text /C /Program#20Text /Pg 304 0 R /K 8 /P 1864 0 R >> endobj 1618 0 obj << /S /Program#20Text /C /Program#20Text /Pg 304 0 R /K 9 /P 1864 0 R >> endobj 1619 0 obj << /S /Program#20Text /C /Program#20Text /Pg 304 0 R /K 10 /P 1864 0 R >> endobj 1620 0 obj << /S /Program#20Text /C /Program#20Text /Pg 304 0 R /K 11 /P 1864 0 R >> endobj 1621 0 obj << /S /Program#20Text /C /Program#20Text /Pg 304 0 R /K 12 /P 1864 0 R >> endobj 1622 0 obj << /S /Program#20Text /C /Program#20Text /Pg 304 0 R /K 13 /P 1864 0 R >> endobj 1623 0 obj << /S /Program#20Text /C /Program#20Text /Pg 304 0 R /K 14 /P 1864 0 R >> endobj 1624 0 obj << /S /Program#20Text /C /Program#20Text /Pg 304 0 R /K 15 /P 1864 0 R >> endobj 1625 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 304 0 R /K 16 /P 1864 0 R >> endobj 1626 0 obj << /S /Program#20Text /C /Program#20Text /Pg 304 0 R /K 17 /P 1864 0 R >> endobj 1627 0 obj << /S /Program#20Text /C /Program#20Text /Pg 304 0 R /K 18 /P 1864 0 R >> endobj 1628 0 obj << /S /Program#20Text /C /Program#20Text /Pg 304 0 R /K 19 /P 1864 0 R >> endobj 1629 0 obj << /S /Program#20Text /C /Program#20Text /Pg 304 0 R /K 20 /P 1864 0 R >> endobj 1630 0 obj << /S /Program#20Text /C /Program#20Text /Pg 304 0 R /K 21 /P 1864 0 R >> endobj 1631 0 obj << /S /Program#20Text /C /Program#20Text /Pg 304 0 R /K 22 /P 1864 0 R >> endobj 1632 0 obj << /S /Program#20Text /C /Program#20Text /Pg 304 0 R /K 23 /P 1864 0 R >> endobj 1633 0 obj << /S /Program#20Text /C /Program#20Text /Pg 304 0 R /K 24 /P 1864 0 R >> endobj 1634 0 obj << /S /Program#20Text /C /Program#20Text /Pg 304 0 R /K 25 /P 1864 0 R >> endobj 1635 0 obj << /S /Program#20Text /C /Program#20Text /Pg 304 0 R /K 26 /P 1864 0 R >> endobj 1636 0 obj << /S /Program#20Text /C /Program#20Text /Pg 304 0 R /K 27 /P 1864 0 R >> endobj 1637 0 obj << /S /Program#20Text /C /Program#20Text /Pg 304 0 R /K 28 /P 1864 0 R >> endobj 1638 0 obj << /S /Program#20Text /C /Program#20Text /Pg 304 0 R /K 29 /P 1864 0 R >> endobj 1639 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 304 0 R /K 30 /P 1864 0 R >> endobj 1640 0 obj << /S /LBody /C /#C3#9Cberschrift#201 /Pg 307 0 R /K 0 /P 2087 0 R >> endobj 1641 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 307 0 R /K 1 /P 1864 0 R >> endobj 1642 0 obj << /S /LBody /C /#C3#9Cberschrift#202 /Pg 307 0 R /K 2 /P 2089 0 R >> endobj 1643 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 307 0 R /K 3 /P 1864 0 R >> endobj 1644 0 obj << /S /HTML#20Vorformatiert /A [ 1645 0 R ] /C /HTML#20Vorformatiert /Pg 307 0 R /K 4 /P 1864 0 R >> endobj 1645 0 obj << /O /Layout /StartIndent 36 >> endobj 1646 0 obj << /S /Program#20Text /C /Program#20Text /Pg 307 0 R /K 5 /P 1864 0 R >> endobj 1647 0 obj << /S /Program#20Text /C /Program#20Text /Pg 307 0 R /K 6 /P 1864 0 R >> endobj 1648 0 obj << /S /Program#20Text /C /Program#20Text /Pg 307 0 R /K 7 /P 1864 0 R >> endobj 1649 0 obj << /S /Program#20Text /C /Program#20Text /Pg 307 0 R /K 8 /P 1864 0 R >> endobj 1650 0 obj << /S /Program#20Text /C /Program#20Text /Pg 307 0 R /K 9 /P 1864 0 R >> endobj 1651 0 obj << /S /Program#20Text /C /Program#20Text /Pg 307 0 R /K 10 /P 1864 0 R >> endobj 1652 0 obj << /S /Program#20Text /C /Program#20Text /Pg 307 0 R /K 11 /P 1864 0 R >> endobj 1653 0 obj << /S /Program#20Text /C /Program#20Text /Pg 307 0 R /K 12 /P 1864 0 R >> endobj 1654 0 obj << /S /Program#20Text /C /Program#20Text /Pg 307 0 R /K 13 /P 1864 0 R >> endobj 1655 0 obj << /S /Program#20Text /C /Program#20Text /Pg 307 0 R /K 14 /P 1864 0 R >> endobj 1656 0 obj << /S /Program#20Text /C /Program#20Text /Pg 307 0 R /K 15 /P 1864 0 R >> endobj 1657 0 obj << /S /Program#20Text /C /Program#20Text /Pg 307 0 R /K 16 /P 1864 0 R >> endobj 1658 0 obj << /S /Program#20Text /C /Program#20Text /Pg 307 0 R /K 17 /P 1864 0 R >> endobj 1659 0 obj << /S /Program#20Text /C /Program#20Text /Pg 307 0 R /K 18 /P 1864 0 R >> endobj 1660 0 obj << /S /Program#20Text /C /Program#20Text /Pg 307 0 R /K 19 /P 1864 0 R >> endobj 1661 0 obj << /S /Program#20Text /C /Program#20Text /Pg 307 0 R /K 20 /P 1864 0 R >> endobj 1662 0 obj << /S /Program#20Text /C /Program#20Text /Pg 307 0 R /K 21 /P 1864 0 R >> endobj 1663 0 obj << /S /Program#20Text /C /Program#20Text /Pg 307 0 R /K 22 /P 1864 0 R >> endobj 1664 0 obj << /S /Program#20Text /C /Program#20Text /Pg 307 0 R /K 23 /P 1864 0 R >> endobj 1665 0 obj << /S /Program#20Text /C /Program#20Text /Pg 307 0 R /K 24 /P 1864 0 R >> endobj 1666 0 obj << /S /Program#20Text /C /Program#20Text /Pg 307 0 R /K 25 /P 1864 0 R >> endobj 1667 0 obj << /S /LBody /C /#C3#9Cberschrift#202 /Pg 307 0 R /K 26 /P 2091 0 R >> endobj 1668 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 307 0 R /K 27 /P 1864 0 R >> endobj 1669 0 obj << /S /Program#20Text /C /Program#20Text /Pg 307 0 R /K 28 /P 1864 0 R >> endobj 1670 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 310 0 R /K 0 /P 1864 0 R >> endobj 1671 0 obj << /S /Program#20Text /C /Program#20Text /Pg 310 0 R /K 1 /P 1864 0 R >> endobj 1672 0 obj << /S /Program#20Text /C /Program#20Text /Pg 310 0 R /K 2 /P 1864 0 R >> endobj 1673 0 obj << /S /Program#20Text /C /Program#20Text /Pg 310 0 R /K 3 /P 1864 0 R >> endobj 1674 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 310 0 R /K 4 /P 1864 0 R >> endobj 1675 0 obj << /S /Program#20Text /C /Program#20Text /Pg 310 0 R /K 5 /P 1864 0 R >> endobj 1676 0 obj << /S /Program#20Text /C /Program#20Text /Pg 310 0 R /K 6 /P 1864 0 R >> endobj 1677 0 obj << /S /Program#20Text /C /Program#20Text /Pg 310 0 R /K 7 /P 1864 0 R >> endobj 1678 0 obj << /S /Program#20Text /C /Program#20Text /Pg 310 0 R /K 8 /P 1864 0 R >> endobj 1679 0 obj << /S /Program#20Text /C /Program#20Text /Pg 310 0 R /K 9 /P 1864 0 R >> endobj 1680 0 obj << /S /LBody /C /#C3#9Cberschrift#202 /Pg 310 0 R /K 10 /P 2093 0 R >> endobj 1681 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 310 0 R /K 11 /P 1864 0 R >> endobj 1682 0 obj << /S /Program#20Text /C /Program#20Text /Pg 310 0 R /K 12 /P 1864 0 R >> endobj 1683 0 obj << /S /API#20Function /C /API#20Function /Pg 310 0 R /K 13 /P 1864 0 R >> endobj 1684 0 obj << /S /API#20Description /C /API#20Description /Pg 310 0 R /K 14 /P 1864 0 R >> endobj 1685 0 obj << /S /API#20Function /C /API#20Function /Pg 310 0 R /K 15 /P 1864 0 R >> endobj 1686 0 obj << /S /API#20Description /C /API#20Description /Pg 310 0 R /K 16 /P 1864 0 R >> endobj 1687 0 obj << /S /API#20Description /C /API#20Description /Pg 310 0 R /K 17 /P 1864 0 R >> endobj 1688 0 obj << /S /API#20Function /C /API#20Function /Pg 310 0 R /K 18 /P 1864 0 R >> endobj 1689 0 obj << /S /API#20Description /C /API#20Description /Pg 310 0 R /K 19 /P 1864 0 R >> endobj 1690 0 obj << /S /API#20Description /C /API#20Description /Pg 310 0 R /K 20 /P 1864 0 R >> endobj 1691 0 obj << /S /API#20Function /C /API#20Function /Pg 310 0 R /K 21 /P 1864 0 R >> endobj 1692 0 obj << /S /API#20Description /C /API#20Description /Pg 310 0 R /K 22 /P 1864 0 R >> endobj 1693 0 obj << /S /API#20Description /C /API#20Description /Pg 310 0 R /K 23 /P 1864 0 R >> endobj 1694 0 obj << /S /API#20Function /C /API#20Function /Pg 310 0 R /K 24 /P 1864 0 R >> endobj 1695 0 obj << /S /API#20Description /C /API#20Description /Pg 310 0 R /K 25 /P 1864 0 R >> endobj 1696 0 obj << /S /API#20Description /C /API#20Description /Pg 310 0 R /K 26 /P 1864 0 R >> endobj 1697 0 obj << /S /API#20Function /C /API#20Function /Pg 310 0 R /K 27 /P 1864 0 R >> endobj 1698 0 obj << /S /API#20Description /C /API#20Description /Pg 310 0 R /K 28 /P 1864 0 R >> endobj 1699 0 obj << /S /API#20Description /C /API#20Description /Pg 313 0 R /K 0 /P 1864 0 R >> endobj 1700 0 obj << /S /API#20Description /C /API#20Description /Pg 313 0 R /K 1 /P 1864 0 R >> endobj 1701 0 obj << /S /API#20Function /C /API#20Function /Pg 313 0 R /K 2 /P 1864 0 R >> endobj 1702 0 obj << /S /API#20Description /C /API#20Description /Pg 313 0 R /K 3 /P 1864 0 R >> endobj 1703 0 obj << /S /API#20Description /C /API#20Description /Pg 313 0 R /K 4 /P 1864 0 R >> endobj 1704 0 obj << /S /API#20Function /C /API#20Function /Pg 313 0 R /K 5 /P 1864 0 R >> endobj 1705 0 obj << /S /API#20Description /C /API#20Description /Pg 313 0 R /K 6 /P 1864 0 R >> endobj 1706 0 obj << /S /API#20Description /C /API#20Description /Pg 313 0 R /K 7 /P 1864 0 R >> endobj 1707 0 obj << /S /API#20Description /C /API#20Description /Pg 313 0 R /K 8 /P 1864 0 R >> endobj 1708 0 obj << /S /API#20Function /C /API#20Function /Pg 313 0 R /K 9 /P 1864 0 R >> endobj 1709 0 obj << /S /API#20Description /C /API#20Description /Pg 313 0 R /K 10 /P 1864 0 R >> endobj 1710 0 obj << /S /API#20Description /C /API#20Description /Pg 313 0 R /K 11 /P 1864 0 R >> endobj 1711 0 obj << /S /API#20Description /C /API#20Description /Pg 313 0 R /K 12 /P 1864 0 R >> endobj 1712 0 obj << /S /API#20Description /C /API#20Description /Pg 313 0 R /K 13 /P 1864 0 R >> endobj 1713 0 obj << /S /API#20Function /C /API#20Function /Pg 313 0 R /K 14 /P 1864 0 R >> endobj 1714 0 obj << /S /API#20Description /C /API#20Description /Pg 313 0 R /K 15 /P 1864 0 R >> endobj 1715 0 obj << /S /API#20Description /C /API#20Description /Pg 313 0 R /K 16 /P 1864 0 R >> endobj 1716 0 obj << /S /API#20Function /C /API#20Function /Pg 313 0 R /K 17 /P 1864 0 R >> endobj 1717 0 obj << /S /API#20Description /C /API#20Description /Pg 313 0 R /K 18 /P 1864 0 R >> endobj 1718 0 obj << /S /API#20Function /C /API#20Function /Pg 313 0 R /K 19 /P 1864 0 R >> endobj 1719 0 obj << /S /API#20Description /C /API#20Description /Pg 313 0 R /K 20 /P 1864 0 R >> endobj 1720 0 obj << /S /API#20Description /C /API#20Description /Pg 313 0 R /K 21 /P 1864 0 R >> endobj 1721 0 obj << /S /API#20Description /C /API#20Description /Pg 313 0 R /K 22 /P 1864 0 R >> endobj 1722 0 obj << /S /Program#20Text /C /Program#20Text /Pg 313 0 R /K 23 /P 1864 0 R >> endobj 1723 0 obj << /S /API#20Description /C /API#20Description /Pg 316 0 R /K 0 /P 1864 0 R >> endobj 1724 0 obj << /S /API#20Description /C /API#20Description /Pg 316 0 R /K 1 /P 1864 0 R >> endobj 1725 0 obj << /S /API#20Function /C /API#20Function /Pg 316 0 R /K 2 /P 1864 0 R >> endobj 1726 0 obj << /S /API#20Description /C /API#20Description /Pg 316 0 R /K 3 /P 1864 0 R >> endobj 1727 0 obj << /S /API#20Description /C /API#20Description /Pg 316 0 R /K 4 /P 1864 0 R >> endobj 1728 0 obj << /S /API#20Function /C /API#20Function /Pg 316 0 R /K 5 /P 1864 0 R >> endobj 1729 0 obj << /S /API#20Description /C /API#20Description /Pg 316 0 R /K 6 /P 1864 0 R >> endobj 1730 0 obj << /S /API#20Description /C /API#20Description /Pg 316 0 R /K 7 /P 1864 0 R >> endobj 1731 0 obj << /S /API#20Function /C /API#20Function /Pg 316 0 R /K 8 /P 1864 0 R >> endobj 1732 0 obj << /S /API#20Description /C /API#20Description /Pg 316 0 R /K 9 /P 1864 0 R >> endobj 1733 0 obj << /S /API#20Description /C /API#20Description /Pg 316 0 R /K 10 /P 1864 0 R >> endobj 1734 0 obj << /S /API#20Function /C /API#20Function /Pg 316 0 R /K 11 /P 1864 0 R >> endobj 1735 0 obj << /S /API#20Description /C /API#20Description /Pg 316 0 R /K 12 /P 1864 0 R >> endobj 1736 0 obj << /S /API#20Description /C /API#20Description /Pg 316 0 R /K 13 /P 1864 0 R >> endobj 1737 0 obj << /S /API#20Description /C /API#20Description /Pg 316 0 R /K 14 /P 1864 0 R >> endobj 1738 0 obj << /S /API#20Function /C /API#20Function /Pg 316 0 R /K 15 /P 1864 0 R >> endobj 1739 0 obj << /S /API#20Description /C /API#20Description /Pg 316 0 R /K 16 /P 1864 0 R >> endobj 1740 0 obj << /S /API#20Description /C /API#20Description /Pg 316 0 R /K 17 /P 1864 0 R >> endobj 1741 0 obj << /S /API#20Function /C /API#20Function /Pg 316 0 R /K 18 /P 1864 0 R >> endobj 1742 0 obj << /S /API#20Description /C /API#20Description /Pg 316 0 R /K 19 /P 1864 0 R >> endobj 1743 0 obj << /S /API#20Description /C /API#20Description /Pg 316 0 R /K 20 /P 1864 0 R >> endobj 1744 0 obj << /S /API#20Description /C /API#20Description /Pg 316 0 R /K 21 /P 1864 0 R >> endobj 1745 0 obj << /S /API#20Function /C /API#20Function /Pg 316 0 R /K 22 /P 1864 0 R >> endobj 1746 0 obj << /S /API#20Description /C /API#20Description /Pg 316 0 R /K 23 /P 1864 0 R >> endobj 1747 0 obj << /S /API#20Description /C /API#20Description /Pg 316 0 R /K 24 /P 1864 0 R >> endobj 1748 0 obj << /S /API#20Function /C /API#20Function /Pg 319 0 R /K 0 /P 1864 0 R >> endobj 1749 0 obj << /S /API#20Description /C /API#20Description /Pg 319 0 R /K 1 /P 1864 0 R >> endobj 1750 0 obj << /S /API#20Description /C /API#20Description /Pg 319 0 R /K 2 /P 1864 0 R >> endobj 1751 0 obj << /S /API#20Description /C /API#20Description /Pg 319 0 R /K 3 /P 1864 0 R >> endobj 1752 0 obj << /S /API#20Function /C /API#20Function /Pg 319 0 R /K 4 /P 1864 0 R >> endobj 1753 0 obj << /S /API#20Description /C /API#20Description /Pg 319 0 R /K 5 /P 1864 0 R >> endobj 1754 0 obj << /S /API#20Description /C /API#20Description /Pg 319 0 R /K 6 /P 1864 0 R >> endobj 1755 0 obj << /S /API#20Description /C /API#20Description /Pg 319 0 R /K 7 /P 1864 0 R >> endobj 1756 0 obj << /S /Program#20Text /C /Program#20Text /Pg 319 0 R /K 8 /P 1864 0 R >> endobj 1757 0 obj << /S /API#20Description /C /API#20Description /Pg 319 0 R /K 9 /P 1864 0 R >> endobj 1758 0 obj << /S /API#20Description /C /API#20Description /Pg 319 0 R /K 10 /P 1864 0 R >> endobj 1759 0 obj << /S /API#20Description /C /API#20Description /Pg 319 0 R /K 11 /P 1864 0 R >> endobj 1760 0 obj << /S /Program#20Text /C /Program#20Text /Pg 319 0 R /K 12 /P 1864 0 R >> endobj 1761 0 obj << /S /Program#20Text /C /Program#20Text /Pg 319 0 R /K 13 /P 1864 0 R >> endobj 1762 0 obj << /S /LBody /C /#C3#9Cberschrift#204 /Pg 319 0 R /K 14 /P 2095 0 R >> endobj 1763 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 319 0 R /K 15 /P 1864 0 R >> endobj 1764 0 obj << /S /LBody /C /#C3#9Cberschrift#204 /Pg 319 0 R /K 16 /P 2097 0 R >> endobj 1765 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 319 0 R /K 17 /P 1864 0 R >> endobj 1766 0 obj << /S /API#20Function /C /API#20Function /Pg 319 0 R /K 18 /P 1864 0 R >> endobj 1767 0 obj << /S /API#20Description /C /API#20Description /Pg 319 0 R /K 19 /P 1864 0 R >> endobj 1768 0 obj << /S /API#20Function /C /API#20Function /Pg 319 0 R /K 20 /P 1864 0 R >> endobj 1769 0 obj << /S /API#20Description /C /API#20Description /Pg 319 0 R /K 21 /P 1864 0 R >> endobj 1770 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 319 0 R /K 22 /P 1864 0 R >> endobj 1771 0 obj << /S /LBody /C /#C3#9Cberschrift#201 /Pg 322 0 R /K 0 /P 2099 0 R >> endobj 1772 0 obj << /S /HTML#20Vorformatiert /A [ 1773 0 R ] /C /HTML#20Vorformatiert /Pg 322 0 R /K 1 /P 1864 0 R >> endobj 1773 0 obj << /O /Layout /StartIndent 36 >> endobj 1774 0 obj << /S /Program#20Text /C /Program#20Text /Pg 322 0 R /K 2 /P 1864 0 R >> endobj 1775 0 obj << /S /Program#20Text /C /Program#20Text /Pg 322 0 R /K 3 /P 1864 0 R >> endobj 1776 0 obj << /S /Program#20Text /C /Program#20Text /Pg 322 0 R /K 4 /P 1864 0 R >> endobj 1777 0 obj << /S /Program#20Text /C /Program#20Text /Pg 322 0 R /K 5 /P 1864 0 R >> endobj 1778 0 obj << /S /Program#20Text /C /Program#20Text /Pg 322 0 R /K 6 /P 1864 0 R >> endobj 1779 0 obj << /S /Program#20Text /C /Program#20Text /Pg 322 0 R /K 7 /P 1864 0 R >> endobj 1780 0 obj << /S /Program#20Text /C /Program#20Text /Pg 322 0 R /K 8 /P 1864 0 R >> endobj 1781 0 obj << /S /Program#20Text /C /Program#20Text /Pg 322 0 R /K 9 /P 1864 0 R >> endobj 1782 0 obj << /S /Program#20Text /C /Program#20Text /Pg 322 0 R /K 10 /P 1864 0 R >> endobj 1783 0 obj << /S /Program#20Text /C /Program#20Text /Pg 322 0 R /K 11 /P 1864 0 R >> endobj 1784 0 obj << /S /Program#20Text /C /Program#20Text /Pg 322 0 R /K 12 /P 1864 0 R >> endobj 1785 0 obj << /S /Program#20Text /C /Program#20Text /Pg 322 0 R /K 13 /P 1864 0 R >> endobj 1786 0 obj << /S /Program#20Text /C /Program#20Text /Pg 322 0 R /K 14 /P 1864 0 R >> endobj 1787 0 obj << /S /Program#20Text /C /Program#20Text /Pg 322 0 R /K 15 /P 1864 0 R >> endobj 1788 0 obj << /S /Program#20Text /C /Program#20Text /Pg 322 0 R /K 16 /P 1864 0 R >> endobj 1789 0 obj << /S /Program#20Text /C /Program#20Text /Pg 322 0 R /K 17 /P 1864 0 R >> endobj 1790 0 obj << /S /Program#20Text /C /Program#20Text /Pg 322 0 R /K 18 /P 1864 0 R >> endobj 1791 0 obj << /S /Program#20Text /C /Program#20Text /Pg 322 0 R /K 19 /P 1864 0 R >> endobj 1792 0 obj << /S /Program#20Text /C /Program#20Text /Pg 322 0 R /K 20 /P 1864 0 R >> endobj 1793 0 obj << /S /Program#20Text /C /Program#20Text /Pg 322 0 R /K 21 /P 1864 0 R >> endobj 1794 0 obj << /S /Program#20Text /C /Program#20Text /Pg 322 0 R /K 22 /P 1864 0 R >> endobj 1795 0 obj << /S /HTML#20Vorformatiert /A [ 1796 0 R ] /C /HTML#20Vorformatiert /Pg 322 0 R /K 23 /P 1864 0 R >> endobj 1796 0 obj << /O /Layout /StartIndent 36 >> endobj 1797 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 322 0 R /K 24 /P 1864 0 R >> endobj 1798 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 322 0 R /K 25 /P 1864 0 R >> endobj 1799 0 obj << /S /LBody /C /#C3#9Cberschrift#201 /Pg 325 0 R /K 0 /P 2101 0 R >> endobj 1800 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 325 0 R /K [ 1 1801 0 R 3 ] /P 1864 0 R >> endobj 1801 0 obj << /S /Link /P 1800 0 R /K [ 1802 0 R << /Type /OBJR /Pg 325 0 R /Obj 387 0 R >> ] >> endobj 1802 0 obj << /S /Underline /P 1801 0 R /A 2322 0 R /Pg 325 0 R /K 2 >> endobj 1803 0 obj << /S /LBody /C /#C3#9Cberschrift#201 /Pg 329 0 R /K 0 /P 2103 0 R >> endobj 1804 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 329 0 R /K [ 1 1805 0 R 3 ] /P 1864 0 R >> endobj 1805 0 obj << /S /Link /P 1804 0 R /K [ 1806 0 R << /Type /OBJR /Pg 329 0 R /Obj 389 0 R >> ] >> endobj 1806 0 obj << /S /Underline /P 1805 0 R /A 2324 0 R /Pg 329 0 R /K 2 >> endobj 1807 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 329 0 R /K [ 4 1808 0 R 6 ] /P 1864 0 R >> endobj 1808 0 obj << /S /Link /P 1807 0 R /K [ 1809 0 R << /Type /OBJR /Pg 329 0 R /Obj 391 0 R >> ] >> endobj 1809 0 obj << /S /Underline /P 1808 0 R /A 2325 0 R /Pg 329 0 R /K 5 >> endobj 1810 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 329 0 R /K 7 /P 1864 0 R >> endobj 1811 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 329 0 R /K 8 /P 1864 0 R >> endobj 1812 0 obj << /S /License#20Title /C /License#20Title /Pg 333 0 R /K 0 /P 1864 0 R >> endobj 1813 0 obj << /S /License#20Subtitle /C /License#20Subtitle /Pg 333 0 R /K 1 /P 1864 0 R >> endobj 1814 0 obj << /O /Layout /WritingMode /LrTb /StartIndent 0 /EndIndent 0 /TextAlign /Center /SpaceBefore 0 /SpaceAfter 6 /TextIndent 0 >> endobj 1815 0 obj << /S /License#20Text /C /License#20Text /Pg 333 0 R /K [ 2 1818 0 R 4 ] /P 1864 0 R >> endobj 1816 0 obj << /O /Layout /WritingMode /LrTb /StartIndent 0 /EndIndent 0 /TextAlign /Center /SpaceBefore 0 /SpaceAfter 6 /TextIndent 0 >> endobj 1817 0 obj << /O /Layout /WritingMode /LrTb /StartIndent 42.55 /EndIndent 0 /TextAlign /Start /SpaceBefore 6 /SpaceAfter 6 /TextIndent 0 >> endobj 1818 0 obj << /S /Link /P 1815 0 R /K [ 1819 0 R << /Type /OBJR /Pg 333 0 R /Obj 393 0 R >> ] >> endobj 1819 0 obj << /S /Underline /P 1818 0 R /A 2327 0 R /Pg 333 0 R /K 3 >> endobj 1820 0 obj << /S /LBody /C /License#20Section /Pg 333 0 R /K 5 /P 2105 0 R >> endobj 1821 0 obj << /S /License#20Text /C /License#20Text /Pg 333 0 R /K 6 /P 1864 0 R >> endobj 1822 0 obj << /O /Layout /WritingMode /LrTb /StartIndent 85.10001 /EndIndent 0 /TextAlign /Start /SpaceBefore 12 /SpaceAfter 6 /TextIndent -85.09999 >> endobj 1823 0 obj << /S /LBody /C /License#20Section /Pg 333 0 R /K 7 /P 2107 0 R >> endobj 1824 0 obj << /S /License#20Text /C /License#20Text /Pg 333 0 R /K 8 /P 1864 0 R >> endobj 1825 0 obj << /S /LBody /C /License#20Section /Pg 333 0 R /K 9 /P 2109 0 R >> endobj 1826 0 obj << /S /License#20Text /C /License#20Text /Pg 333 0 R /K 10 /P 1864 0 R >> endobj 1827 0 obj << /S /LBody /C /License#20Section /Pg 333 0 R /K 11 /P 2111 0 R >> endobj 1828 0 obj << /S /License#20Text /C /License#20Text /Pg 333 0 R /P 1864 0 R /K [ 12 << /Type /MCR /Pg 337 0 R /MCID 0 >> ] >> endobj 1829 0 obj << /S /License#20Text /C /License#20Text /Pg 337 0 R /K 1 /P 1864 0 R >> endobj 1830 0 obj << /S /LBody /C /License#20Section /Pg 337 0 R /K 2 /P 2113 0 R >> endobj 1831 0 obj << /S /License#20Text /C /License#20Text /Pg 337 0 R /K 3 /P 1864 0 R >> endobj 1832 0 obj << /S /LBody /C /License#20Section /Pg 337 0 R /K 4 /P 2115 0 R >> endobj 1833 0 obj << /S /License#20Text /C /License#20Text /Pg 337 0 R /K 5 /P 1864 0 R >> endobj 1834 0 obj << /S /LBody /C /License#20Section /Pg 337 0 R /K 6 /P 2117 0 R >> endobj 1835 0 obj << /S /License#20Text /C /License#20Text /Pg 337 0 R /K 7 /P 1864 0 R >> endobj 1836 0 obj << /S /License#20Text /C /License#20Text /Pg 337 0 R /K 8 /P 1864 0 R >> endobj 1837 0 obj << /S /License#20Text /C /License#20Text /Pg 337 0 R /K 9 /P 1864 0 R >> endobj 1838 0 obj << /S /License#20Text /C /License#20Text /Pg 337 0 R /K 10 /P 1864 0 R >> endobj 1839 0 obj << /S /License#20Text /C /License#20Text /Pg 337 0 R /K 11 /P 1864 0 R >> endobj 1840 0 obj << /S /License#20Text /C /License#20Text /Pg 340 0 R /K 0 /P 1864 0 R >> endobj 1841 0 obj << /S /LBody /C /License#20Section /Pg 340 0 R /K 1 /P 2119 0 R >> endobj 1842 0 obj << /S /License#20Text /C /License#20Text /Pg 340 0 R /K 2 /P 1864 0 R >> endobj 1843 0 obj << /S /License#20Text /C /License#20Text /Pg 340 0 R /K 3 /P 1864 0 R >> endobj 1844 0 obj << /S /License#20Text /A [ 1845 0 R ] /C /License#20Text /Pg 340 0 R /K 4 /P 1864 0 R >> endobj 1845 0 obj << /O /Layout /StartIndent 81 >> endobj 1846 0 obj << /S /License#20Text /A [ 1847 0 R ] /C /License#20Text /Pg 340 0 R /K 5 /P 1864 0 R >> endobj 1847 0 obj << /O /Layout /StartIndent 81 >> endobj 1848 0 obj << /S /License#20Text /A [ 1849 0 R ] /C /License#20Text /Pg 340 0 R /K 6 /P 1864 0 R >> endobj 1849 0 obj << /O /Layout /StartIndent 81 >> endobj 1850 0 obj << /S /License#20Text /A [ 1851 0 R ] /C /License#20Text /Pg 340 0 R /K 7 /P 1864 0 R >> endobj 1851 0 obj << /O /Layout /StartIndent 81 >> endobj 1852 0 obj << /S /License#20Text /C /License#20Text /Pg 340 0 R /K 8 /P 1864 0 R >> endobj 1853 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 340 0 R /K 9 /P 1864 0 R >> endobj 1854 0 obj << /S /Standard /A [ 1855 0 R ] /C /Standard /Pg 2476 0 R /K [ 27 28 ] /P 2123 0 R >> endobj 1855 0 obj << /O /Layout /TextAlign /End /StartIndent 54.45 /EndIndent -24.2 >> endobj 1856 0 obj << /S /Standard /A [ 1857 0 R ] /C /Standard /Pg 2476 0 R /K [ 29 30 31 ] /P 2123 0 R >> endobj 1857 0 obj << /O /Layout /TextAlign /End /StartIndent 54.45 /EndIndent -24.2 >> endobj 1858 0 obj << /S /Standard /A [ 1859 0 R ] /C /Standard /Pg 2476 0 R /K [ 13 14 15 16 17 18 19 20 21 22 23 24 25 ] /P 2122 0 R >> endobj 1859 0 obj << /O /Layout /TextAlign /Center /StartIndent 54.45 /EndIndent 62.8 >> endobj 1860 0 obj << /S /Standard /A [ 1861 0 R ] /C /Standard /Pg 2476 0 R /K [ 1 2 3 4 5 6 7 8 9 10 11 12 ] /P 2121 0 R >> endobj 1861 0 obj << /O /Layout /StartIndent -41.55 /TextAlign /End /EndIndent -43.2 >> endobj 1862 0 obj << /S /Sect /P 2475 0 R /K [ 2123 0 R 2122 0 R 2121 0 R 2120 0 R 453 0 R 454 0 R 457 0 R 458 0 R 459 0 R 460 0 R 461 0 R 462 0 R 463 0 R 464 0 R 465 0 R 466 0 R 467 0 R 468 0 R 469 0 R 470 0 R 471 0 R 472 0 R 473 0 R 474 0 R 475 0 R 476 0 R 477 0 R 478 0 R 479 0 R 480 0 R 481 0 R 482 0 R 483 0 R 484 0 R 485 0 R 486 0 R 487 0 R 488 0 R 490 0 R 491 0 R 492 0 R 493 0 R ] >> endobj 1863 0 obj << /S /Sect /P 2475 0 R /K [ 494 0 R 1865 0 R 662 0 R ] >> endobj 1864 0 obj << /S /Sect /P 2475 0 R /K [ 1977 0 R 665 0 R 667 0 R 668 0 R 669 0 R 1979 0 R 682 0 R 1983 0 R 684 0 R 685 0 R 686 0 R 688 0 R 689 0 R 691 0 R 692 0 R 693 0 R 694 0 R 1985 0 R 696 0 R 698 0 R 699 0 R 1987 0 R 701 0 R 702 0 R 703 0 R 704 0 R 1989 0 R 706 0 R 707 0 R 708 0 R 1991 0 R 710 0 R 711 0 R 1993 0 R 713 0 R 714 0 R 1995 0 R 716 0 R 719 0 R 1997 0 R 721 0 R 1999 0 R 723 0 R 724 0 R 2001 0 R 730 0 R 731 0 R 732 0 R 733 0 R 2003 0 R 735 0 R 2005 0 R 2012 0 R 761 0 R 2014 0 R 763 0 R 764 0 R 765 0 R 767 0 R 769 0 R 770 0 R 771 0 R 772 0 R 773 0 R 774 0 R 775 0 R 776 0 R 777 0 R 778 0 R 779 0 R 780 0 R 781 0 R 782 0 R 783 0 R 784 0 R 785 0 R 786 0 R 787 0 R 788 0 R 789 0 R 790 0 R 791 0 R 792 0 R 793 0 R 794 0 R 795 0 R 796 0 R 797 0 R 800 0 R 802 0 R 803 0 R 804 0 R 807 0 R 808 0 R 809 0 R 810 0 R 811 0 R 812 0 R 813 0 R 814 0 R 815 0 R 816 0 R 817 0 R 818 0 R 819 0 R 820 0 R 821 0 R 822 0 R 823 0 R 824 0 R 825 0 R 826 0 R 827 0 R 828 0 R 829 0 R 830 0 R 831 0 R 832 0 R 833 0 R 834 0 R 835 0 R 836 0 R 837 0 R 838 0 R 839 0 R 840 0 R 841 0 R 842 0 R 843 0 R 844 0 R 845 0 R 846 0 R 847 0 R 848 0 R 849 0 R 850 0 R 851 0 R 852 0 R 853 0 R 854 0 R 855 0 R 856 0 R 2016 0 R 858 0 R 859 0 R 860 0 R 861 0 R 862 0 R 863 0 R 864 0 R 865 0 R 866 0 R 867 0 R 868 0 R 869 0 R 870 0 R 871 0 R 872 0 R 873 0 R 874 0 R 875 0 R 876 0 R 877 0 R 878 0 R 879 0 R 880 0 R 881 0 R 882 0 R 884 0 R 885 0 R 886 0 R 887 0 R 888 0 R 889 0 R 890 0 R 891 0 R 892 0 R 893 0 R 894 0 R 895 0 R 896 0 R 897 0 R 898 0 R 899 0 R 900 0 R 901 0 R 902 0 R 903 0 R 904 0 R 906 0 R 907 0 R 908 0 R 909 0 R 910 0 R 911 0 R 912 0 R 2018 0 R 914 0 R 915 0 R 916 0 R 918 0 R 919 0 R 920 0 R 921 0 R 922 0 R 923 0 R 924 0 R 925 0 R 926 0 R 927 0 R 928 0 R 929 0 R 930 0 R 931 0 R 932 0 R 933 0 R 934 0 R 935 0 R 936 0 R 937 0 R 938 0 R 939 0 R 940 0 R 941 0 R 942 0 R 943 0 R 944 0 R 947 0 R 948 0 R 949 0 R 950 0 R 951 0 R 954 0 R 955 0 R 956 0 R 957 0 R 962 0 R 964 0 R 965 0 R 966 0 R 967 0 R 968 0 R 969 0 R 970 0 R 971 0 R 972 0 R 973 0 R 974 0 R 975 0 R 976 0 R 2020 0 R 978 0 R 979 0 R 2022 0 R 981 0 R 982 0 R 983 0 R 984 0 R 985 0 R 986 0 R 987 0 R 988 0 R 989 0 R 990 0 R 991 0 R 992 0 R 993 0 R 994 0 R 995 0 R 996 0 R 997 0 R 998 0 R 999 0 R 1000 0 R 1001 0 R 1002 0 R 1003 0 R 1004 0 R 1005 0 R 1006 0 R 1007 0 R 1008 0 R 2024 0 R 1010 0 R 1011 0 R 1012 0 R 1013 0 R 1014 0 R 1015 0 R 1016 0 R 1017 0 R 1018 0 R 1019 0 R 1020 0 R 1021 0 R 1022 0 R 1023 0 R 1024 0 R 1025 0 R 1026 0 R 1027 0 R 1028 0 R 1029 0 R 1030 0 R 1031 0 R 2026 0 R 1033 0 R 1034 0 R 1035 0 R 1036 0 R 1037 0 R 2028 0 R 1039 0 R 1040 0 R 1041 0 R 2030 0 R 1043 0 R 1044 0 R 1045 0 R 1046 0 R 1047 0 R 1048 0 R 1049 0 R 1050 0 R 1051 0 R 1052 0 R 1053 0 R 1054 0 R 1055 0 R 1056 0 R 1057 0 R 1058 0 R 1059 0 R 1060 0 R 1061 0 R 1062 0 R 1063 0 R 1064 0 R 1065 0 R 1066 0 R 1067 0 R 1068 0 R 1069 0 R 1070 0 R 1071 0 R 2032 0 R 1073 0 R 2034 0 R 1075 0 R 1076 0 R 1077 0 R 1078 0 R 1079 0 R 1080 0 R 2036 0 R 1082 0 R 1083 0 R 1084 0 R 1085 0 R 1086 0 R 1087 0 R 1088 0 R 1089 0 R 1090 0 R 1091 0 R 1092 0 R 1094 0 R 1095 0 R 1096 0 R 1097 0 R 1098 0 R 1099 0 R 1100 0 R 1101 0 R 1102 0 R 1103 0 R 1104 0 R 1105 0 R 1106 0 R 1107 0 R 1108 0 R 1109 0 R 1110 0 R 1111 0 R 1112 0 R 1113 0 R 1114 0 R 1115 0 R 1116 0 R 1117 0 R 1118 0 R 1119 0 R 1120 0 R 1121 0 R 1122 0 R 1123 0 R 1124 0 R 1125 0 R 1126 0 R 1127 0 R 1128 0 R 1129 0 R 1130 0 R 1131 0 R 1132 0 R 1133 0 R 1134 0 R 1135 0 R 2038 0 R 1139 0 R 1140 0 R 1141 0 R 1142 0 R 1143 0 R 1144 0 R 1145 0 R 1146 0 R 1147 0 R 1148 0 R 1149 0 R 1150 0 R 1151 0 R 1152 0 R 1153 0 R 1154 0 R 1155 0 R 1156 0 R 1157 0 R 1158 0 R 1159 0 R 2040 0 R 1161 0 R 1162 0 R 1163 0 R 1164 0 R 1165 0 R 1166 0 R 1167 0 R 1168 0 R 1169 0 R 1170 0 R 1171 0 R 1172 0 R 1173 0 R 1174 0 R 1175 0 R 1176 0 R 1177 0 R 1178 0 R 1179 0 R 1180 0 R 1181 0 R 1182 0 R 1183 0 R 1184 0 R 1185 0 R 1186 0 R 1187 0 R 1188 0 R 2042 0 R 1190 0 R 1191 0 R 1192 0 R 1866 0 R 2044 0 R 2046 0 R 2052 0 R 1370 0 R 1371 0 R 2054 0 R 1373 0 R 1378 0 R 1380 0 R 1382 0 R 2056 0 R 1384 0 R 1386 0 R 1387 0 R 1388 0 R 1389 0 R 1390 0 R 1391 0 R 1392 0 R 1393 0 R 1394 0 R 1395 0 R 1396 0 R 1397 0 R 1398 0 R 1399 0 R 1400 0 R 1401 0 R 1402 0 R 1403 0 R 1404 0 R 1405 0 R 1406 0 R 1407 0 R 1408 0 R 1409 0 R 1410 0 R 1411 0 R 1412 0 R 1413 0 R 1416 0 R 1417 0 R 1418 0 R 1419 0 R 1420 0 R 1421 0 R 2058 0 R 1423 0 R 1425 0 R 1426 0 R 2060 0 R 1428 0 R 1429 0 R 1430 0 R 2062 0 R 1432 0 R 1433 0 R 1435 0 R 1438 0 R 1439 0 R 2064 0 R 1441 0 R 1442 0 R 1443 0 R 1444 0 R 1445 0 R 1446 0 R 1447 0 R 1448 0 R 1449 0 R 1450 0 R 1451 0 R 1452 0 R 1453 0 R 1454 0 R 1456 0 R 1457 0 R 2066 0 R 1459 0 R 2068 0 R 1461 0 R 2070 0 R 1465 0 R 1466 0 R 1467 0 R 1468 0 R 1469 0 R 1470 0 R 1471 0 R 1472 0 R 1473 0 R 1476 0 R 1477 0 R 1478 0 R 1479 0 R 1480 0 R 1481 0 R 1482 0 R 2072 0 R 1484 0 R 1485 0 R 1486 0 R 2074 0 R 1488 0 R 1489 0 R 1490 0 R 1491 0 R 1492 0 R 1493 0 R 1494 0 R 1495 0 R 1496 0 R 1497 0 R 1499 0 R 1501 0 R 1503 0 R 1505 0 R 1507 0 R 1509 0 R 1511 0 R 1513 0 R 1515 0 R 1517 0 R 1518 0 R 1519 0 R 1520 0 R 1522 0 R 1524 0 R 1526 0 R 1527 0 R 1528 0 R 1529 0 R 1530 0 R 1531 0 R 1532 0 R 1534 0 R 1536 0 R 1538 0 R 1539 0 R 1540 0 R 1541 0 R 1542 0 R 1543 0 R 1544 0 R 1545 0 R 1547 0 R 1548 0 R 1549 0 R 1550 0 R 1551 0 R 1552 0 R 2076 0 R 1554 0 R 1555 0 R 1558 0 R 2078 0 R 1560 0 R 1561 0 R 1562 0 R 1563 0 R 1564 0 R 1565 0 R 1566 0 R 1567 0 R 1568 0 R 1569 0 R 1570 0 R 1571 0 R 1572 0 R 1573 0 R 1574 0 R 1575 0 R 1576 0 R 1577 0 R 1578 0 R 1579 0 R 1580 0 R 1581 0 R 1582 0 R 1583 0 R 1584 0 R 1585 0 R 1586 0 R 1587 0 R 1588 0 R 1589 0 R 1590 0 R 1591 0 R 1592 0 R 1593 0 R 1594 0 R 1595 0 R 2080 0 R 1597 0 R 1598 0 R 1599 0 R 1600 0 R 1601 0 R 1602 0 R 1603 0 R 1604 0 R 1605 0 R 2082 0 R 1607 0 R 1608 0 R 2084 0 R 1610 0 R 1611 0 R 1612 0 R 1613 0 R 1614 0 R 1615 0 R 1616 0 R 1617 0 R 1618 0 R 1619 0 R 1620 0 R 1621 0 R 1622 0 R 1623 0 R 1624 0 R 1625 0 R 1626 0 R 1627 0 R 1628 0 R 1629 0 R 1630 0 R 1631 0 R 1632 0 R 1633 0 R 1634 0 R 1635 0 R 1636 0 R 1637 0 R 1638 0 R 1639 0 R 2086 0 R 1641 0 R 2088 0 R 1643 0 R 1644 0 R 1646 0 R 1647 0 R 1648 0 R 1649 0 R 1650 0 R 1651 0 R 1652 0 R 1653 0 R 1654 0 R 1655 0 R 1656 0 R 1657 0 R 1658 0 R 1659 0 R 1660 0 R 1661 0 R 1662 0 R 1663 0 R 1664 0 R 1665 0 R 1666 0 R 2090 0 R 1668 0 R 1669 0 R 1670 0 R 1671 0 R 1672 0 R 1673 0 R 1674 0 R 1675 0 R 1676 0 R 1677 0 R 1678 0 R 1679 0 R 2092 0 R 1681 0 R 1682 0 R 1683 0 R 1684 0 R 1685 0 R 1686 0 R 1687 0 R 1688 0 R 1689 0 R 1690 0 R 1691 0 R 1692 0 R 1693 0 R 1694 0 R 1695 0 R 1696 0 R 1697 0 R 1698 0 R 1699 0 R 1700 0 R 1701 0 R 1702 0 R 1703 0 R 1704 0 R 1705 0 R 1706 0 R 1707 0 R 1708 0 R 1709 0 R 1710 0 R 1711 0 R 1712 0 R 1713 0 R 1714 0 R 1715 0 R 1716 0 R 1717 0 R 1718 0 R 1719 0 R 1720 0 R 1721 0 R 1722 0 R 1723 0 R 1724 0 R 1725 0 R 1726 0 R 1727 0 R 1728 0 R 1729 0 R 1730 0 R 1731 0 R 1732 0 R 1733 0 R 1734 0 R 1735 0 R 1736 0 R 1737 0 R 1738 0 R 1739 0 R 1740 0 R 1741 0 R 1742 0 R 1743 0 R 1744 0 R 1745 0 R 1746 0 R 1747 0 R 1748 0 R 1749 0 R 1750 0 R 1751 0 R 1752 0 R 1753 0 R 1754 0 R 1755 0 R 1756 0 R 1757 0 R 1758 0 R 1759 0 R 1760 0 R 1761 0 R 2094 0 R 1763 0 R 2096 0 R 1765 0 R 1766 0 R 1767 0 R 1768 0 R 1769 0 R 1770 0 R 2098 0 R 1772 0 R 1774 0 R 1775 0 R 1776 0 R 1777 0 R 1778 0 R 1779 0 R 1780 0 R 1781 0 R 1782 0 R 1783 0 R 1784 0 R 1785 0 R 1786 0 R 1787 0 R 1788 0 R 1789 0 R 1790 0 R 1791 0 R 1792 0 R 1793 0 R 1794 0 R 1795 0 R 1797 0 R 1798 0 R 2100 0 R 1800 0 R 2102 0 R 1804 0 R 1807 0 R 1810 0 R 1811 0 R 1812 0 R 1813 0 R 1815 0 R 2104 0 R 1821 0 R 2106 0 R 1824 0 R 2108 0 R 1826 0 R 2110 0 R 1828 0 R 1829 0 R 2112 0 R 1831 0 R 2114 0 R 1833 0 R 2116 0 R 1835 0 R 1836 0 R 1837 0 R 1838 0 R 1839 0 R 1840 0 R 2118 0 R 1842 0 R 1843 0 R 1844 0 R 1846 0 R 1848 0 R 1850 0 R 1852 0 R 1853 0 R ] >> endobj 1865 0 obj << /S /TOC /P 1863 0 R /K [ 495 0 R 500 0 R 503 0 R 507 0 R 510 0 R 513 0 R 516 0 R 519 0 R 522 0 R 525 0 R 528 0 R 531 0 R 534 0 R 537 0 R 540 0 R 543 0 R 546 0 R 549 0 R 552 0 R 555 0 R 558 0 R 561 0 R 564 0 R 567 0 R 570 0 R 573 0 R 576 0 R 579 0 R 582 0 R 585 0 R 588 0 R 591 0 R 595 0 R 598 0 R 601 0 R 604 0 R 607 0 R 609 0 R 612 0 R 615 0 R 618 0 R 621 0 R 624 0 R 627 0 R 630 0 R 633 0 R 636 0 R 639 0 R 642 0 R 645 0 R 648 0 R 650 0 R 652 0 R 655 0 R 658 0 R 661 0 R ] >> endobj 1866 0 obj << /S /Table /P 1864 0 R /K [ 1867 0 R 1877 0 R 1887 0 R 1897 0 R 1907 0 R 1917 0 R 1927 0 R 1937 0 R 1947 0 R 1957 0 R 1967 0 R ] /A [ 2330 0 R ] >> endobj 1867 0 obj << /S /TR /P 1866 0 R /K [ 1868 0 R 1871 0 R 1874 0 R ] >> endobj 1868 0 obj << /S /TD /A [ 1869 0 R 1870 0 R ] /P 1867 0 R /K 1193 0 R >> endobj 1869 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 1870 0 obj << /O /Layout /BlockAlign /Middle >> endobj 1871 0 obj << /S /TD /A [ 1872 0 R 1873 0 R ] /P 1867 0 R /K 1194 0 R >> endobj 1872 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 1873 0 obj << /O /Layout /BlockAlign /Middle >> endobj 1874 0 obj << /S /TD /A [ 1875 0 R 1876 0 R ] /P 1867 0 R /K 1196 0 R >> endobj 1875 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 1876 0 obj << /O /Layout /BlockAlign /Middle >> endobj 1877 0 obj << /S /TR /P 1866 0 R /K [ 1878 0 R 1881 0 R 1884 0 R ] >> endobj 1878 0 obj << /S /TD /A [ 1879 0 R 1880 0 R ] /P 1877 0 R /K 1197 0 R >> endobj 1879 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 1880 0 obj << /O /Layout /BlockAlign /Before >> endobj 1881 0 obj << /S /TD /A [ 1882 0 R 1883 0 R ] /P 1877 0 R /K 1200 0 R >> endobj 1882 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 1883 0 obj << /O /Layout /BlockAlign /Before >> endobj 1884 0 obj << /S /TD /A [ 1885 0 R 1886 0 R ] /P 1877 0 R /K [ 1202 0 R 1204 0 R 1206 0 R 1208 0 R 1210 0 R 1212 0 R ] >> endobj 1885 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 1886 0 obj << /O /Layout /BlockAlign /Before >> endobj 1887 0 obj << /S /TR /P 1866 0 R /K [ 1888 0 R 1891 0 R 1894 0 R ] >> endobj 1888 0 obj << /S /TD /A [ 1889 0 R 1890 0 R ] /P 1887 0 R /K 1214 0 R >> endobj 1889 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 1890 0 obj << /O /Layout /BlockAlign /Before >> endobj 1891 0 obj << /S /TD /A [ 1892 0 R 1893 0 R ] /P 1887 0 R /K 1216 0 R >> endobj 1892 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 1893 0 obj << /O /Layout /BlockAlign /Before >> endobj 1894 0 obj << /S /TD /A [ 1895 0 R 1896 0 R ] /P 1887 0 R /K [ 1218 0 R 1220 0 R 1222 0 R 1224 0 R 1226 0 R 1228 0 R 1230 0 R 1232 0 R 1234 0 R 1236 0 R ] >> endobj 1895 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 1896 0 obj << /O /Layout /BlockAlign /Before >> endobj 1897 0 obj << /S /TR /P 1866 0 R /K [ 1898 0 R 1901 0 R 1904 0 R ] >> endobj 1898 0 obj << /S /TD /A [ 1899 0 R 1900 0 R ] /P 1897 0 R /K 1238 0 R >> endobj 1899 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 1900 0 obj << /O /Layout /BlockAlign /Before >> endobj 1901 0 obj << /S /TD /A [ 1902 0 R 1903 0 R ] /P 1897 0 R /K 1240 0 R >> endobj 1902 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 1903 0 obj << /O /Layout /BlockAlign /Before >> endobj 1904 0 obj << /S /TD /A [ 1905 0 R 1906 0 R ] /P 1897 0 R /K [ 1242 0 R 1244 0 R 1246 0 R 1248 0 R 1250 0 R 1252 0 R ] >> endobj 1905 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 1906 0 obj << /O /Layout /BlockAlign /Before >> endobj 1907 0 obj << /S /TR /P 1866 0 R /K [ 1908 0 R 1911 0 R 1914 0 R ] >> endobj 1908 0 obj << /S /TD /A [ 1909 0 R 1910 0 R ] /P 1907 0 R /K 1254 0 R >> endobj 1909 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 1910 0 obj << /O /Layout /BlockAlign /Before >> endobj 1911 0 obj << /S /TD /A [ 1912 0 R 1913 0 R ] /P 1907 0 R /K 1256 0 R >> endobj 1912 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 1913 0 obj << /O /Layout /BlockAlign /Before >> endobj 1914 0 obj << /S /TD /A [ 1915 0 R 1916 0 R ] /P 1907 0 R /K [ 1258 0 R 1260 0 R 1262 0 R 1264 0 R ] >> endobj 1915 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 1916 0 obj << /O /Layout /BlockAlign /Before >> endobj 1917 0 obj << /S /TR /P 1866 0 R /K [ 1918 0 R 1921 0 R 1924 0 R ] >> endobj 1918 0 obj << /S /TD /A [ 1919 0 R 1920 0 R ] /P 1917 0 R /K 1266 0 R >> endobj 1919 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 1920 0 obj << /O /Layout /BlockAlign /Before >> endobj 1921 0 obj << /S /TD /A [ 1922 0 R 1923 0 R ] /P 1917 0 R /K 1268 0 R >> endobj 1922 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 1923 0 obj << /O /Layout /BlockAlign /Before >> endobj 1924 0 obj << /S /TD /A [ 1925 0 R 1926 0 R ] /P 1917 0 R /K [ 1270 0 R 1272 0 R 1274 0 R 1276 0 R ] >> endobj 1925 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 1926 0 obj << /O /Layout /BlockAlign /Before >> endobj 1927 0 obj << /S /TR /P 1866 0 R /K [ 1928 0 R 1931 0 R 1934 0 R ] >> endobj 1928 0 obj << /S /TD /A [ 1929 0 R 1930 0 R ] /P 1927 0 R /K 1278 0 R >> endobj 1929 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 1930 0 obj << /O /Layout /BlockAlign /Before >> endobj 1931 0 obj << /S /TD /A [ 1932 0 R 1933 0 R ] /P 1927 0 R /K 1280 0 R >> endobj 1932 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 1933 0 obj << /O /Layout /BlockAlign /Before >> endobj 1934 0 obj << /S /TD /A [ 1935 0 R 1936 0 R ] /P 1927 0 R /K [ 1282 0 R 1284 0 R 1286 0 R 1288 0 R ] >> endobj 1935 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 1936 0 obj << /O /Layout /BlockAlign /Before >> endobj 1937 0 obj << /S /TR /P 1866 0 R /K [ 1938 0 R 1941 0 R 1944 0 R ] >> endobj 1938 0 obj << /S /TD /A [ 1939 0 R 1940 0 R ] /P 1937 0 R /K 1290 0 R >> endobj 1939 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 1940 0 obj << /O /Layout /BlockAlign /Before >> endobj 1941 0 obj << /S /TD /A [ 1942 0 R 1943 0 R ] /P 1937 0 R /K 1292 0 R >> endobj 1942 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 1943 0 obj << /O /Layout /BlockAlign /Before >> endobj 1944 0 obj << /S /TD /A [ 1945 0 R 1946 0 R ] /P 1937 0 R /K [ 1294 0 R 1296 0 R 1298 0 R 1300 0 R ] >> endobj 1945 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 1946 0 obj << /O /Layout /BlockAlign /Before >> endobj 1947 0 obj << /S /TR /P 1866 0 R /K [ 1948 0 R 1951 0 R 1954 0 R ] >> endobj 1948 0 obj << /S /TD /A [ 1949 0 R 1950 0 R ] /P 1947 0 R /K 1302 0 R >> endobj 1949 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 1950 0 obj << /O /Layout /BlockAlign /Before >> endobj 1951 0 obj << /S /TD /A [ 1952 0 R 1953 0 R ] /P 1947 0 R /K 1304 0 R >> endobj 1952 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 1953 0 obj << /O /Layout /BlockAlign /Before >> endobj 1954 0 obj << /S /TD /A [ 1955 0 R 1956 0 R ] /P 1947 0 R /K [ 1306 0 R 1308 0 R 1310 0 R 1312 0 R 1314 0 R 1316 0 R 1318 0 R 1320 0 R 1322 0 R 1324 0 R ] >> endobj 1955 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 1956 0 obj << /O /Layout /BlockAlign /Before >> endobj 1957 0 obj << /S /TR /P 1866 0 R /K [ 1958 0 R 1961 0 R 1964 0 R ] >> endobj 1958 0 obj << /S /TD /A [ 1959 0 R 1960 0 R ] /P 1957 0 R /K 1326 0 R >> endobj 1959 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 1960 0 obj << /O /Layout /BlockAlign /Before >> endobj 1961 0 obj << /S /TD /A [ 1962 0 R 1963 0 R ] /P 1957 0 R /K 1328 0 R >> endobj 1962 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 1963 0 obj << /O /Layout /BlockAlign /Before >> endobj 1964 0 obj << /S /TD /A [ 1965 0 R 1966 0 R ] /P 1957 0 R /K [ 1330 0 R 1332 0 R 1334 0 R 1336 0 R 1338 0 R 1340 0 R ] >> endobj 1965 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 1966 0 obj << /O /Layout /BlockAlign /Before >> endobj 1967 0 obj << /S /TR /P 1866 0 R /K [ 1968 0 R 1971 0 R 1974 0 R ] >> endobj 1968 0 obj << /S /TD /A [ 1969 0 R 1970 0 R ] /P 1967 0 R /K 1342 0 R >> endobj 1969 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 1970 0 obj << /O /Layout /BlockAlign /Before >> endobj 1971 0 obj << /S /TD /A [ 1972 0 R 1973 0 R ] /P 1967 0 R /K 1344 0 R >> endobj 1972 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 1973 0 obj << /O /Layout /BlockAlign /Before >> endobj 1974 0 obj << /S /TD /A [ 1975 0 R 1976 0 R ] /P 1967 0 R /K [ 1346 0 R 1348 0 R 1350 0 R 1352 0 R 1354 0 R 1356 0 R ] >> endobj 1975 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 1976 0 obj << /O /Layout /BlockAlign /Before >> endobj 1977 0 obj << /S /L /K 1978 0 R /P 1864 0 R >> endobj 1978 0 obj << /S /LI /P 1977 0 R /K 664 0 R >> endobj 1979 0 obj << /S /L /P 1864 0 R /K [ 1980 0 R 1981 0 R 1982 0 R ] >> endobj 1980 0 obj << /S /LI /P 1979 0 R /K 670 0 R >> endobj 1981 0 obj << /S /LI /P 1979 0 R /K 674 0 R >> endobj 1982 0 obj << /S /LI /P 1979 0 R /K 678 0 R >> endobj 1983 0 obj << /S /L /K 1984 0 R /P 1864 0 R >> endobj 1984 0 obj << /S /LI /P 1983 0 R /K 683 0 R >> endobj 1985 0 obj << /S /L /K 1986 0 R /P 1864 0 R >> endobj 1986 0 obj << /S /LI /P 1985 0 R /K 695 0 R >> endobj 1987 0 obj << /S /L /K 1988 0 R /P 1864 0 R >> endobj 1988 0 obj << /S /LI /P 1987 0 R /K 700 0 R >> endobj 1989 0 obj << /S /L /K 1990 0 R /P 1864 0 R >> endobj 1990 0 obj << /S /LI /P 1989 0 R /K 705 0 R >> endobj 1991 0 obj << /S /L /K 1992 0 R /P 1864 0 R >> endobj 1992 0 obj << /S /LI /P 1991 0 R /K 709 0 R >> endobj 1993 0 obj << /S /L /K 1994 0 R /P 1864 0 R >> endobj 1994 0 obj << /S /LI /P 1993 0 R /K 712 0 R >> endobj 1995 0 obj << /S /L /K 1996 0 R /P 1864 0 R >> endobj 1996 0 obj << /S /LI /P 1995 0 R /K 715 0 R >> endobj 1997 0 obj << /S /L /K 1998 0 R /P 1864 0 R >> endobj 1998 0 obj << /S /LI /P 1997 0 R /K 720 0 R >> endobj 1999 0 obj << /S /L /K 2000 0 R /P 1864 0 R >> endobj 2000 0 obj << /S /LI /P 1999 0 R /K 722 0 R >> endobj 2001 0 obj << /S /L /K 2002 0 R /P 1864 0 R >> endobj 2002 0 obj << /S /LI /P 2001 0 R /K 729 0 R >> endobj 2003 0 obj << /S /L /K 2004 0 R /P 1864 0 R >> endobj 2004 0 obj << /S /LI /P 2003 0 R /K 734 0 R >> endobj 2005 0 obj << /S /L /P 1864 0 R /K [ 2006 0 R 2007 0 R 2008 0 R 2009 0 R 2010 0 R 2011 0 R ] >> endobj 2006 0 obj << /S /LI /P 2005 0 R /K 736 0 R >> endobj 2007 0 obj << /S /LI /P 2005 0 R /K 740 0 R >> endobj 2008 0 obj << /S /LI /P 2005 0 R /K 744 0 R >> endobj 2009 0 obj << /S /LI /P 2005 0 R /K 748 0 R >> endobj 2010 0 obj << /S /LI /P 2005 0 R /K 752 0 R >> endobj 2011 0 obj << /S /LI /P 2005 0 R /K 756 0 R >> endobj 2012 0 obj << /S /L /K 2013 0 R /P 1864 0 R >> endobj 2013 0 obj << /S /LI /P 2012 0 R /K 760 0 R >> endobj 2014 0 obj << /S /L /K 2015 0 R /P 1864 0 R >> endobj 2015 0 obj << /S /LI /P 2014 0 R /K 762 0 R >> endobj 2016 0 obj << /S /L /K 2017 0 R /P 1864 0 R >> endobj 2017 0 obj << /S /LI /P 2016 0 R /K 857 0 R >> endobj 2018 0 obj << /S /L /K 2019 0 R /P 1864 0 R >> endobj 2019 0 obj << /S /LI /P 2018 0 R /K 913 0 R >> endobj 2020 0 obj << /S /L /K 2021 0 R /P 1864 0 R >> endobj 2021 0 obj << /S /LI /P 2020 0 R /K 977 0 R >> endobj 2022 0 obj << /S /L /K 2023 0 R /P 1864 0 R >> endobj 2023 0 obj << /S /LI /P 2022 0 R /K 980 0 R >> endobj 2024 0 obj << /S /L /K 2025 0 R /P 1864 0 R >> endobj 2025 0 obj << /S /LI /P 2024 0 R /K 1009 0 R >> endobj 2026 0 obj << /S /L /K 2027 0 R /P 1864 0 R >> endobj 2027 0 obj << /S /LI /P 2026 0 R /K 1032 0 R >> endobj 2028 0 obj << /S /L /K 2029 0 R /P 1864 0 R >> endobj 2029 0 obj << /S /LI /P 2028 0 R /K 1038 0 R >> endobj 2030 0 obj << /S /L /K 2031 0 R /P 1864 0 R >> endobj 2031 0 obj << /S /LI /P 2030 0 R /K 1042 0 R >> endobj 2032 0 obj << /S /L /K 2033 0 R /P 1864 0 R >> endobj 2033 0 obj << /S /LI /P 2032 0 R /K 1072 0 R >> endobj 2034 0 obj << /S /L /K 2035 0 R /P 1864 0 R >> endobj 2035 0 obj << /S /LI /P 2034 0 R /K 1074 0 R >> endobj 2036 0 obj << /S /L /K 2037 0 R /P 1864 0 R >> endobj 2037 0 obj << /S /LI /P 2036 0 R /K 1081 0 R >> endobj 2038 0 obj << /S /L /K 2039 0 R /P 1864 0 R >> endobj 2039 0 obj << /S /LI /P 2038 0 R /K 1138 0 R >> endobj 2040 0 obj << /S /L /K 2041 0 R /P 1864 0 R >> endobj 2041 0 obj << /S /LI /P 2040 0 R /K 1160 0 R >> endobj 2042 0 obj << /S /L /K 2043 0 R /P 1864 0 R >> endobj 2043 0 obj << /S /LI /P 2042 0 R /K 1189 0 R >> endobj 2044 0 obj << /S /L /K 2045 0 R /P 1864 0 R >> endobj 2045 0 obj << /S /LI /P 2044 0 R /K 1358 0 R >> endobj 2046 0 obj << /S /L /P 1864 0 R /K [ 2047 0 R 2048 0 R 2049 0 R 2050 0 R 2051 0 R ] >> endobj 2047 0 obj << /S /LI /P 2046 0 R /K 1359 0 R >> endobj 2048 0 obj << /S /LI /P 2046 0 R /K 1361 0 R >> endobj 2049 0 obj << /S /LI /P 2046 0 R /K 1363 0 R >> endobj 2050 0 obj << /S /LI /P 2046 0 R /K 1365 0 R >> endobj 2051 0 obj << /S /LI /P 2046 0 R /K 1367 0 R >> endobj 2052 0 obj << /S /L /K 2053 0 R /P 1864 0 R >> endobj 2053 0 obj << /S /LI /P 2052 0 R /K 1369 0 R >> endobj 2054 0 obj << /S /L /K 2055 0 R /P 1864 0 R >> endobj 2055 0 obj << /S /LI /P 2054 0 R /K 1372 0 R >> endobj 2056 0 obj << /S /L /K 2057 0 R /P 1864 0 R >> endobj 2057 0 obj << /S /LI /P 2056 0 R /K 1383 0 R >> endobj 2058 0 obj << /S /L /K 2059 0 R /P 1864 0 R >> endobj 2059 0 obj << /S /LI /P 2058 0 R /K 1422 0 R >> endobj 2060 0 obj << /S /L /K 2061 0 R /P 1864 0 R >> endobj 2061 0 obj << /S /LI /P 2060 0 R /K 1427 0 R >> endobj 2062 0 obj << /S /L /K 2063 0 R /P 1864 0 R >> endobj 2063 0 obj << /S /LI /P 2062 0 R /K 1431 0 R >> endobj 2064 0 obj << /S /L /K 2065 0 R /P 1864 0 R >> endobj 2065 0 obj << /S /LI /P 2064 0 R /K 1440 0 R >> endobj 2066 0 obj << /S /L /K 2067 0 R /P 1864 0 R >> endobj 2067 0 obj << /S /LI /P 2066 0 R /K 1458 0 R >> endobj 2068 0 obj << /S /L /K 2069 0 R /P 1864 0 R >> endobj 2069 0 obj << /S /LI /P 2068 0 R /K 1460 0 R >> endobj 2070 0 obj << /S /L /K 2071 0 R /P 1864 0 R >> endobj 2071 0 obj << /S /LI /P 2070 0 R /K 1464 0 R >> endobj 2072 0 obj << /S /L /K 2073 0 R /P 1864 0 R >> endobj 2073 0 obj << /S /LI /P 2072 0 R /K 1483 0 R >> endobj 2074 0 obj << /S /L /K 2075 0 R /P 1864 0 R >> endobj 2075 0 obj << /S /LI /P 2074 0 R /K 1487 0 R >> endobj 2076 0 obj << /S /L /K 2077 0 R /P 1864 0 R >> endobj 2077 0 obj << /S /LI /P 2076 0 R /K 1553 0 R >> endobj 2078 0 obj << /S /L /K 2079 0 R /P 1864 0 R >> endobj 2079 0 obj << /S /LI /P 2078 0 R /K 1559 0 R >> endobj 2080 0 obj << /S /L /K 2081 0 R /P 1864 0 R >> endobj 2081 0 obj << /S /LI /P 2080 0 R /K 1596 0 R >> endobj 2082 0 obj << /S /L /K 2083 0 R /P 1864 0 R >> endobj 2083 0 obj << /S /LI /P 2082 0 R /K 1606 0 R >> endobj 2084 0 obj << /S /L /K 2085 0 R /P 1864 0 R >> endobj 2085 0 obj << /S /LI /P 2084 0 R /K 1609 0 R >> endobj 2086 0 obj << /S /L /K 2087 0 R /P 1864 0 R >> endobj 2087 0 obj << /S /LI /P 2086 0 R /K 1640 0 R >> endobj 2088 0 obj << /S /L /K 2089 0 R /P 1864 0 R >> endobj 2089 0 obj << /S /LI /P 2088 0 R /K 1642 0 R >> endobj 2090 0 obj << /S /L /K 2091 0 R /P 1864 0 R >> endobj 2091 0 obj << /S /LI /P 2090 0 R /K 1667 0 R >> endobj 2092 0 obj << /S /L /K 2093 0 R /P 1864 0 R >> endobj 2093 0 obj << /S /LI /P 2092 0 R /K 1680 0 R >> endobj 2094 0 obj << /S /L /K 2095 0 R /P 1864 0 R >> endobj 2095 0 obj << /S /LI /P 2094 0 R /K 1762 0 R >> endobj 2096 0 obj << /S /L /K 2097 0 R /P 1864 0 R >> endobj 2097 0 obj << /S /LI /P 2096 0 R /K 1764 0 R >> endobj 2098 0 obj << /S /L /K 2099 0 R /P 1864 0 R >> endobj 2099 0 obj << /S /LI /P 2098 0 R /K 1771 0 R >> endobj 2100 0 obj << /S /L /K 2101 0 R /P 1864 0 R >> endobj 2101 0 obj << /S /LI /P 2100 0 R /K 1799 0 R >> endobj 2102 0 obj << /S /L /K 2103 0 R /P 1864 0 R >> endobj 2103 0 obj << /S /LI /P 2102 0 R /K 1803 0 R >> endobj 2104 0 obj << /S /L /K 2105 0 R /P 1864 0 R >> endobj 2105 0 obj << /S /LI /P 2104 0 R /K 1820 0 R >> endobj 2106 0 obj << /S /L /K 2107 0 R /P 1864 0 R >> endobj 2107 0 obj << /S /LI /P 2106 0 R /K 1823 0 R >> endobj 2108 0 obj << /S /L /K 2109 0 R /P 1864 0 R >> endobj 2109 0 obj << /S /LI /P 2108 0 R /K 1825 0 R >> endobj 2110 0 obj << /S /L /K 2111 0 R /P 1864 0 R >> endobj 2111 0 obj << /S /LI /P 2110 0 R /K 1827 0 R >> endobj 2112 0 obj << /S /L /K 2113 0 R /P 1864 0 R >> endobj 2113 0 obj << /S /LI /P 2112 0 R /K 1830 0 R >> endobj 2114 0 obj << /S /L /K 2115 0 R /P 1864 0 R >> endobj 2115 0 obj << /S /LI /P 2114 0 R /K 1832 0 R >> endobj 2116 0 obj << /S /L /K 2117 0 R /P 1864 0 R >> endobj 2117 0 obj << /S /LI /P 2116 0 R /K 1834 0 R >> endobj 2118 0 obj << /S /L /K 2119 0 R /P 1864 0 R >> endobj 2119 0 obj << /S /LI /P 2118 0 R /K 1841 0 R >> endobj 2120 0 obj << /S /Shape /Alt () /Pg 2476 0 R /K [ 0 26 ] /P 1862 0 R /A 2126 0 R >> endobj 2121 0 obj << /S /TextBox /Alt (?~wz{"RuN") /P 1862 0 R /K 1860 0 R >> endobj 2122 0 obj << /S /TextBox /Alt (.ʪE ĘĀ C@) /P 1862 0 R /K 1858 0 R >> endobj 2123 0 obj << /S /TextBox /Alt (>`pŏH6'|p\rTx[L\r) /P 1862 0 R /K [ 1854 0 R 1856 0 R ] >> endobj 2124 0 obj << /Kids [ 2299 0 R 2300 0 R ] >> endobj 2125 0 obj [ 2120 0 R 1860 0 R 1860 0 R 1860 0 R 1860 0 R 1860 0 R 1860 0 R 1860 0 R 1860 0 R 1860 0 R 1860 0 R 1860 0 R 1860 0 R 1858 0 R 1858 0 R 1858 0 R 1858 0 R 1858 0 R 1858 0 R 1858 0 R 1858 0 R 1858 0 R 1858 0 R 1858 0 R 1858 0 R 1858 0 R 2120 0 R 1854 0 R 1854 0 R 1856 0 R 1856 0 R 1856 0 R ] endobj 2126 0 obj << /O /Layout /BBox [ 34 34 566 809 ] /Placement /Block /StartIndent -93.55 /EndIndent -70.2 >> endobj 2127 0 obj [ 453 0 R 454 0 R 457 0 R 458 0 R 459 0 R 460 0 R 461 0 R 462 0 R 463 0 R 464 0 R 465 0 R 466 0 R 467 0 R 468 0 R 469 0 R 470 0 R 471 0 R 472 0 R 473 0 R 474 0 R 475 0 R 476 0 R 477 0 R 478 0 R 479 0 R 480 0 R 481 0 R 482 0 R 483 0 R 484 0 R 485 0 R 486 0 R 487 0 R 488 0 R 490 0 R 491 0 R 492 0 R 493 0 R ] endobj 2128 0 obj [ 494 0 R 497 0 R 495 0 R 499 0 R 495 0 R 501 0 R 500 0 R 502 0 R 500 0 R 504 0 R 503 0 R 506 0 R 503 0 R 508 0 R 507 0 R 509 0 R 507 0 R 511 0 R 510 0 R 512 0 R 510 0 R 514 0 R 513 0 R 515 0 R 513 0 R 517 0 R 516 0 R 518 0 R 516 0 R 520 0 R 519 0 R 521 0 R 519 0 R 523 0 R 522 0 R 524 0 R 522 0 R 526 0 R 525 0 R 527 0 R 525 0 R 529 0 R 528 0 R 530 0 R 528 0 R 532 0 R 531 0 R 533 0 R 531 0 R 535 0 R 534 0 R 536 0 R 534 0 R 538 0 R 537 0 R 539 0 R 537 0 R 541 0 R 540 0 R 542 0 R 540 0 R 544 0 R 543 0 R 545 0 R 543 0 R 547 0 R 546 0 R 548 0 R 546 0 R 550 0 R 549 0 R 551 0 R 549 0 R 553 0 R 552 0 R 554 0 R 552 0 R 556 0 R 555 0 R 557 0 R 555 0 R 559 0 R 558 0 R 560 0 R 558 0 R 562 0 R 561 0 R 563 0 R 561 0 R 565 0 R 564 0 R 566 0 R 564 0 R 568 0 R 567 0 R 569 0 R 567 0 R ] endobj 2129 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 2130 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 2131 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 2132 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 2133 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 2134 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 2135 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 2136 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 2137 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 2138 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 2139 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 2140 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 2141 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 2142 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 2143 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 2144 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 2145 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 2146 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 2147 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 2148 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 2149 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 2150 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 2151 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 2152 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 2153 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 2154 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 2155 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 2156 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 2157 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 2158 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 2159 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 2160 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 2161 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 2162 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 2163 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 2164 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 2165 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 2166 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 2167 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 2168 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 2169 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 2170 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 2171 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 2172 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 2173 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 2174 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 2175 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 2176 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 2177 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 2178 0 obj [ 571 0 R 570 0 R 572 0 R 570 0 R 574 0 R 573 0 R 575 0 R 573 0 R 577 0 R 576 0 R 578 0 R 576 0 R 580 0 R 579 0 R 581 0 R 579 0 R 583 0 R 582 0 R 584 0 R 582 0 R 586 0 R 585 0 R 587 0 R 585 0 R 589 0 R 588 0 R 590 0 R 588 0 R 592 0 R 591 0 R 594 0 R 591 0 R 596 0 R 595 0 R 599 0 R 598 0 R 600 0 R 598 0 R 602 0 R 601 0 R 603 0 R 601 0 R 605 0 R 604 0 R 606 0 R 604 0 R 608 0 R 607 0 R 610 0 R 609 0 R 611 0 R 609 0 R 613 0 R 612 0 R 614 0 R 612 0 R 616 0 R 615 0 R 617 0 R 615 0 R 619 0 R 618 0 R 620 0 R 618 0 R 622 0 R 621 0 R 623 0 R 621 0 R 625 0 R 624 0 R 626 0 R 624 0 R 628 0 R 627 0 R 629 0 R 627 0 R 631 0 R 630 0 R 632 0 R 630 0 R 634 0 R 633 0 R 635 0 R 633 0 R 637 0 R 636 0 R 638 0 R 636 0 R 640 0 R 639 0 R 641 0 R 639 0 R 643 0 R 642 0 R 644 0 R 642 0 R 646 0 R 645 0 R 647 0 R 645 0 R 649 0 R 648 0 R 651 0 R 650 0 R 653 0 R 652 0 R 654 0 R 652 0 R ] endobj 2179 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 2180 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 2181 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 2182 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 2183 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 2184 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 2185 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 2186 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 2187 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 2188 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 2189 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 2190 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 2191 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 2192 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 2193 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 2194 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 2195 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 2196 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 2197 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 2198 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 2199 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 2200 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 2201 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 2202 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 2203 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 2204 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 2205 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 2206 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 2207 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 2208 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 2209 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 2210 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 2211 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 2212 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 2213 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 2214 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 2215 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 2216 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 2217 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 2218 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 2219 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 2220 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 2221 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 2222 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 2223 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 2224 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 2225 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 2226 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 2227 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 2228 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 2229 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 2230 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 2231 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 2232 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 2233 0 obj [ 656 0 R 655 0 R 657 0 R 655 0 R 659 0 R 658 0 R 660 0 R 658 0 R 661 0 R 662 0 R ] endobj 2234 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 2235 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 2236 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 2237 0 obj [ 664 0 R 665 0 R 667 0 R 668 0 R 669 0 R 670 0 R 673 0 R 670 0 R 674 0 R 677 0 R 674 0 R 678 0 R 681 0 R 678 0 R 682 0 R ] endobj 2238 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 2239 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 2240 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 2241 0 obj [ 683 0 R 684 0 R 685 0 R 686 0 R 688 0 R 689 0 R 691 0 R 692 0 R 693 0 R 694 0 R ] endobj 2242 0 obj [ 695 0 R 695 0 R 696 0 R 698 0 R 699 0 R 700 0 R 701 0 R 702 0 R 703 0 R 704 0 R ] endobj 2243 0 obj [ 704 0 R 705 0 R 706 0 R 707 0 R 708 0 R 709 0 R 710 0 R 711 0 R 712 0 R 713 0 R ] endobj 2244 0 obj [ 713 0 R 714 0 R 715 0 R 716 0 R 718 0 R 716 0 R 719 0 R 720 0 R 721 0 R 722 0 R 723 0 R ] endobj 2245 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 2246 0 obj [ 724 0 R 726 0 R 724 0 R 728 0 R 724 0 R 729 0 R 730 0 R 731 0 R 732 0 R 733 0 R 734 0 R 735 0 R 736 0 R 739 0 R 736 0 R 740 0 R 743 0 R 740 0 R 744 0 R 747 0 R 744 0 R 748 0 R 751 0 R 748 0 R 752 0 R 755 0 R 752 0 R 756 0 R 759 0 R 756 0 R ] endobj 2247 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 2248 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 2249 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 2250 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 2251 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 2252 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 2253 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 2254 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 2255 0 obj [ 760 0 R 761 0 R 762 0 R 763 0 R 764 0 R 765 0 R 767 0 R 769 0 R 770 0 R 771 0 R 772 0 R 773 0 R 774 0 R 775 0 R 776 0 R 777 0 R ] endobj 2256 0 obj [ 778 0 R 779 0 R 780 0 R 781 0 R 782 0 R 783 0 R 784 0 R 785 0 R 786 0 R 787 0 R 788 0 R 789 0 R 790 0 R 791 0 R 792 0 R 793 0 R 794 0 R 795 0 R 796 0 R 797 0 R 799 0 R 797 0 R ] endobj 2257 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 2258 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 2259 0 obj [ 801 0 R 800 0 R 802 0 R 803 0 R 804 0 R 806 0 R 804 0 R 807 0 R 808 0 R 809 0 R 810 0 R 811 0 R 812 0 R 813 0 R 814 0 R 815 0 R 816 0 R 817 0 R 818 0 R 819 0 R 820 0 R 821 0 R ] endobj 2260 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 2261 0 obj [ 822 0 R 823 0 R 824 0 R 825 0 R 826 0 R 827 0 R 828 0 R 829 0 R 830 0 R 831 0 R 832 0 R 833 0 R 834 0 R 835 0 R 836 0 R 837 0 R 838 0 R 839 0 R 840 0 R 841 0 R 842 0 R 843 0 R 844 0 R 845 0 R ] endobj 2262 0 obj [ 846 0 R 847 0 R 848 0 R 849 0 R 850 0 R 851 0 R 852 0 R 853 0 R 854 0 R 855 0 R 856 0 R 857 0 R 858 0 R 859 0 R 860 0 R 861 0 R 862 0 R ] endobj 2263 0 obj [ 863 0 R 864 0 R 865 0 R 866 0 R 867 0 R 868 0 R 869 0 R 870 0 R 871 0 R 872 0 R 873 0 R 874 0 R 875 0 R 876 0 R 877 0 R 878 0 R 879 0 R 880 0 R 881 0 R 882 0 R 884 0 R ] endobj 2264 0 obj [ 885 0 R 886 0 R 887 0 R 888 0 R 889 0 R 890 0 R 891 0 R 892 0 R 893 0 R 894 0 R 895 0 R 896 0 R 897 0 R 898 0 R 899 0 R 900 0 R 901 0 R 902 0 R 903 0 R 905 0 R 904 0 R ] endobj 2265 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 2266 0 obj [ 904 0 R 906 0 R 907 0 R 908 0 R 909 0 R 910 0 R 911 0 R 912 0 R 913 0 R 914 0 R 915 0 R 916 0 R 918 0 R 919 0 R 920 0 R 921 0 R 922 0 R 923 0 R 924 0 R 925 0 R 926 0 R ] endobj 2267 0 obj [ 927 0 R 928 0 R 929 0 R 930 0 R 931 0 R 932 0 R 933 0 R 934 0 R 935 0 R 936 0 R 937 0 R 938 0 R 939 0 R 940 0 R 941 0 R 942 0 R 943 0 R 944 0 R 946 0 R 946 0 R 944 0 R 947 0 R 948 0 R 949 0 R 950 0 R ] endobj 2268 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 2269 0 obj [ 951 0 R 953 0 R 951 0 R 954 0 R 955 0 R 956 0 R 957 0 R 959 0 R 957 0 R 961 0 R 957 0 R 963 0 R 962 0 R 964 0 R 965 0 R 966 0 R 967 0 R 968 0 R 969 0 R 970 0 R 971 0 R 972 0 R 973 0 R 974 0 R 975 0 R 976 0 R ] endobj 2270 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 2271 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 2272 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 2273 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 2274 0 obj [ 977 0 R 978 0 R 979 0 R 980 0 R 981 0 R 982 0 R 983 0 R 984 0 R 985 0 R 986 0 R 987 0 R 988 0 R 989 0 R 990 0 R 991 0 R 992 0 R 993 0 R ] endobj 2275 0 obj [ 994 0 R 995 0 R 996 0 R 997 0 R 998 0 R 999 0 R 1000 0 R 1001 0 R 1002 0 R 1003 0 R 1004 0 R 1005 0 R 1006 0 R 1007 0 R 1008 0 R 1009 0 R 1010 0 R 1011 0 R 1012 0 R 1013 0 R 1014 0 R 1015 0 R ] endobj 2276 0 obj [ 1016 0 R 1017 0 R 1018 0 R 1019 0 R 1020 0 R 1021 0 R 1022 0 R 1023 0 R 1024 0 R 1025 0 R 1026 0 R 1027 0 R 1028 0 R 1029 0 R 1030 0 R 1031 0 R 1032 0 R 1033 0 R ] endobj 2277 0 obj [ 1034 0 R 1035 0 R 1036 0 R 1037 0 R ] endobj 2278 0 obj [ 1038 0 R 1039 0 R 1040 0 R 1041 0 R 1042 0 R 1043 0 R 1044 0 R 1045 0 R 1046 0 R 1047 0 R 1048 0 R 1049 0 R 1050 0 R ] endobj 2279 0 obj [ 1051 0 R 1052 0 R 1053 0 R 1054 0 R 1055 0 R 1056 0 R 1057 0 R 1058 0 R 1059 0 R 1060 0 R 1061 0 R 1062 0 R 1063 0 R 1064 0 R 1065 0 R 1066 0 R 1067 0 R 1068 0 R 1069 0 R 1070 0 R 1071 0 R ] endobj 2280 0 obj [ 1072 0 R 1073 0 R 1074 0 R 1075 0 R 1076 0 R 1077 0 R 1078 0 R 1079 0 R 1080 0 R 1081 0 R 1082 0 R 1083 0 R 1084 0 R 1085 0 R ] endobj 2281 0 obj [ 1085 0 R 1086 0 R 1087 0 R 1088 0 R 1089 0 R 1090 0 R 1091 0 R 1092 0 R 1094 0 R 1095 0 R 1096 0 R 1097 0 R 1098 0 R 1099 0 R 1100 0 R 1101 0 R 1102 0 R 1103 0 R 1104 0 R 1105 0 R 1106 0 R 1107 0 R 1108 0 R 1109 0 R 1110 0 R 1111 0 R 1112 0 R 1113 0 R 1114 0 R 1115 0 R 1116 0 R 1117 0 R 1118 0 R 1119 0 R 1120 0 R 1121 0 R 1122 0 R 1123 0 R 1124 0 R 1125 0 R 1126 0 R 1127 0 R 1128 0 R ] endobj 2282 0 obj [ 1129 0 R 1130 0 R 1131 0 R 1132 0 R 1133 0 R 1134 0 R 1135 0 R ] endobj 2283 0 obj [ 1138 0 R 1139 0 R 1140 0 R 1141 0 R 1142 0 R 1143 0 R 1144 0 R 1145 0 R 1146 0 R 1147 0 R 1148 0 R 1149 0 R 1150 0 R 1151 0 R 1152 0 R 1153 0 R 1154 0 R 1155 0 R 1156 0 R 1157 0 R 1158 0 R 1159 0 R ] endobj 2284 0 obj [ 1160 0 R 1161 0 R 1162 0 R 1163 0 R 1164 0 R 1165 0 R 1166 0 R 1167 0 R 1168 0 R 1169 0 R 1170 0 R 1171 0 R 1172 0 R 1173 0 R 1174 0 R 1175 0 R 1176 0 R 1177 0 R 1178 0 R 1179 0 R ] endobj 2285 0 obj [ 1180 0 R 1181 0 R 1182 0 R 1183 0 R 1184 0 R 1185 0 R 1186 0 R 1187 0 R 1188 0 R ] endobj 2286 0 obj [ 1189 0 R 1190 0 R 1191 0 R 1192 0 R 1193 0 R 1194 0 R 1196 0 R 1197 0 R 1200 0 R 1202 0 R 1204 0 R 1206 0 R 1208 0 R 1210 0 R 1212 0 R 1214 0 R 1216 0 R 1218 0 R 1220 0 R 1222 0 R 1224 0 R 1226 0 R 1228 0 R ] endobj 2287 0 obj [ 1228 0 R 1230 0 R 1232 0 R 1234 0 R 1236 0 R 1238 0 R 1240 0 R 1242 0 R 1244 0 R 1246 0 R 1248 0 R 1250 0 R 1252 0 R 1254 0 R 1256 0 R 1258 0 R 1260 0 R 1262 0 R 1264 0 R 1266 0 R 1268 0 R 1270 0 R ] endobj 2288 0 obj [ 1272 0 R 1274 0 R 1276 0 R 1278 0 R 1280 0 R 1282 0 R 1284 0 R 1286 0 R 1288 0 R 1290 0 R 1292 0 R 1294 0 R 1296 0 R 1298 0 R 1300 0 R 1302 0 R 1304 0 R 1306 0 R 1308 0 R 1310 0 R 1312 0 R ] endobj 2289 0 obj [ 1312 0 R 1314 0 R 1316 0 R 1318 0 R 1320 0 R 1322 0 R 1324 0 R 1326 0 R 1328 0 R 1330 0 R 1332 0 R 1334 0 R 1336 0 R 1338 0 R 1340 0 R 1342 0 R 1344 0 R 1346 0 R 1348 0 R ] endobj 2290 0 obj [ 1348 0 R 1350 0 R 1352 0 R 1354 0 R 1356 0 R 1358 0 R 1359 0 R 1361 0 R 1363 0 R 1365 0 R 1367 0 R ] endobj 2291 0 obj [ 1369 0 R 1370 0 R 1371 0 R 1372 0 R 1373 0 R 1375 0 R 1375 0 R 1373 0 R 1377 0 R 1373 0 R 1378 0 R 1381 0 R 1380 0 R 1382 0 R 1383 0 R 1384 0 R 1386 0 R 1387 0 R 1388 0 R 1389 0 R ] endobj 2292 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 2293 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 2294 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 2295 0 obj [ 1390 0 R 1391 0 R 1392 0 R 1393 0 R 1394 0 R 1395 0 R 1396 0 R 1397 0 R 1398 0 R 1399 0 R 1400 0 R 1401 0 R 1402 0 R 1403 0 R 1404 0 R 1405 0 R 1406 0 R 1407 0 R 1408 0 R 1409 0 R 1410 0 R 1411 0 R ] endobj 2296 0 obj [ 1412 0 R 1413 0 R 1415 0 R 1413 0 R 1416 0 R 1417 0 R 1418 0 R 1419 0 R 1420 0 R 1421 0 R 1422 0 R 1423 0 R 1425 0 R 1426 0 R 1427 0 R 1428 0 R 1429 0 R 1430 0 R ] endobj 2297 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 2298 0 obj [ 1430 0 R 1431 0 R 1432 0 R 1433 0 R 1435 0 R 1437 0 R 1435 0 R 1438 0 R 1439 0 R 1440 0 R 1441 0 R 1442 0 R 1443 0 R 1444 0 R 1445 0 R 1446 0 R 1447 0 R ] endobj 2299 0 obj << /Nums [ 0 2125 0 R 1 2127 0 R 2 2128 0 R 3 2178 0 R 4 2233 0 R 5 2237 0 R 6 672 0 R 7 676 0 R 8 680 0 R 9 2241 0 R 10 2242 0 R 11 2243 0 R 12 2244 0 R 13 717 0 R 14 2246 0 R 15 725 0 R 16 727 0 R 17 738 0 R 18 742 0 R 19 746 0 R 20 750 0 R 21 754 0 R 22 758 0 R 23 2255 0 R 24 2256 0 R 25 798 0 R 26 2259 0 R 27 805 0 R 28 2261 0 R 29 2262 0 R 30 2263 0 R 31 2264 0 R ] /Limits [ 0 31 ] >> endobj 2300 0 obj << /Nums [ 32 2266 0 R 33 2267 0 R 34 945 0 R 35 945 0 R 36 2269 0 R 37 952 0 R 38 958 0 R 39 960 0 R 40 2274 0 R 41 2275 0 R 42 2276 0 R 43 2277 0 R 44 2278 0 R 45 2279 0 R 46 2280 0 R 47 2281 0 R 48 2282 0 R 49 2283 0 R 50 2284 0 R 51 2285 0 R 52 2286 0 R 53 2287 0 R 54 2288 0 R 55 2289 0 R 56 2290 0 R 57 2291 0 R 58 1374 0 R 59 1374 0 R 60 1376 0 R 61 2295 0 R 62 2296 0 R 63 1414 0 R 64 2298 0 R 65 1436 0 R 66 2302 0 R 67 1462 0 R 68 2305 0 R 69 1474 0 R 70 2307 0 R 71 2308 0 R 72 2309 0 R 73 1556 0 R 74 2311 0 R 75 2312 0 R 76 2313 0 R 77 2314 0 R 78 2315 0 R 79 2316 0 R 80 2317 0 R 81 2318 0 R 82 2319 0 R 83 2320 0 R 84 2321 0 R 85 1801 0 R 86 2323 0 R 87 1805 0 R 88 1808 0 R 89 2326 0 R 90 1818 0 R 91 2328 0 R 92 2329 0 R ] /Limits [ 32 92 ] >> endobj 2301 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 2302 0 obj [ 1448 0 R 1449 0 R 1450 0 R 1451 0 R 1452 0 R 1453 0 R 1455 0 R 1454 0 R 1456 0 R 1457 0 R 1458 0 R 1459 0 R 1460 0 R 1461 0 R 1463 0 R 1461 0 R 1464 0 R 1465 0 R ] endobj 2303 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 2304 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 2305 0 obj [ 1466 0 R 1467 0 R 1468 0 R 1469 0 R 1470 0 R 1471 0 R 1472 0 R 1473 0 R 1475 0 R 1473 0 R 1476 0 R 1477 0 R 1478 0 R 1479 0 R 1480 0 R 1481 0 R 1482 0 R 1483 0 R 1484 0 R 1485 0 R 1486 0 R ] endobj 2306 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 2307 0 obj [ 1486 0 R 1487 0 R 1488 0 R 1489 0 R 1490 0 R 1491 0 R 1492 0 R 1493 0 R 1494 0 R 1495 0 R 1496 0 R 1497 0 R 1499 0 R 1501 0 R 1503 0 R 1505 0 R 1507 0 R 1509 0 R 1511 0 R 1513 0 R 1515 0 R 1517 0 R ] endobj 2308 0 obj [ 1518 0 R 1519 0 R 1520 0 R 1522 0 R 1524 0 R 1526 0 R 1527 0 R 1528 0 R 1529 0 R 1530 0 R 1531 0 R 1532 0 R 1534 0 R 1536 0 R 1538 0 R 1539 0 R 1540 0 R 1541 0 R 1542 0 R 1543 0 R 1544 0 R 1545 0 R 1547 0 R ] endobj 2309 0 obj [ 1548 0 R 1549 0 R 1550 0 R 1551 0 R 1552 0 R 1553 0 R 1554 0 R 1555 0 R 1557 0 R 1555 0 R 1558 0 R 1559 0 R 1560 0 R 1561 0 R 1562 0 R 1563 0 R ] endobj 2310 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 2311 0 obj [ 1564 0 R 1565 0 R 1566 0 R 1567 0 R 1568 0 R 1569 0 R 1570 0 R 1571 0 R 1572 0 R 1573 0 R 1574 0 R 1575 0 R 1576 0 R 1577 0 R 1578 0 R 1579 0 R 1580 0 R 1581 0 R 1582 0 R 1583 0 R 1584 0 R 1585 0 R 1586 0 R 1587 0 R 1588 0 R ] endobj 2312 0 obj [ 1589 0 R 1590 0 R 1591 0 R 1592 0 R 1593 0 R 1594 0 R 1595 0 R 1596 0 R 1597 0 R 1598 0 R 1599 0 R 1600 0 R 1601 0 R 1602 0 R 1603 0 R 1604 0 R 1605 0 R ] endobj 2313 0 obj [ 1606 0 R 1607 0 R 1608 0 R ] endobj 2314 0 obj [ 1609 0 R 1610 0 R 1611 0 R 1612 0 R 1613 0 R 1614 0 R 1615 0 R 1616 0 R 1617 0 R 1618 0 R 1619 0 R 1620 0 R 1621 0 R 1622 0 R 1623 0 R 1624 0 R 1625 0 R 1626 0 R 1627 0 R 1628 0 R 1629 0 R 1630 0 R 1631 0 R 1632 0 R 1633 0 R 1634 0 R 1635 0 R 1636 0 R 1637 0 R 1638 0 R 1639 0 R ] endobj 2315 0 obj [ 1640 0 R 1641 0 R 1642 0 R 1643 0 R 1644 0 R 1646 0 R 1647 0 R 1648 0 R 1649 0 R 1650 0 R 1651 0 R 1652 0 R 1653 0 R 1654 0 R 1655 0 R 1656 0 R 1657 0 R 1658 0 R 1659 0 R 1660 0 R 1661 0 R 1662 0 R 1663 0 R 1664 0 R 1665 0 R 1666 0 R 1667 0 R 1668 0 R 1669 0 R ] endobj 2316 0 obj [ 1670 0 R 1671 0 R 1672 0 R 1673 0 R 1674 0 R 1675 0 R 1676 0 R 1677 0 R 1678 0 R 1679 0 R 1680 0 R 1681 0 R 1682 0 R 1683 0 R 1684 0 R 1685 0 R 1686 0 R 1687 0 R 1688 0 R 1689 0 R 1690 0 R 1691 0 R 1692 0 R 1693 0 R 1694 0 R 1695 0 R 1696 0 R 1697 0 R 1698 0 R ] endobj 2317 0 obj [ 1699 0 R 1700 0 R 1701 0 R 1702 0 R 1703 0 R 1704 0 R 1705 0 R 1706 0 R 1707 0 R 1708 0 R 1709 0 R 1710 0 R 1711 0 R 1712 0 R 1713 0 R 1714 0 R 1715 0 R 1716 0 R 1717 0 R 1718 0 R 1719 0 R 1720 0 R 1721 0 R 1722 0 R ] endobj 2318 0 obj [ 1723 0 R 1724 0 R 1725 0 R 1726 0 R 1727 0 R 1728 0 R 1729 0 R 1730 0 R 1731 0 R 1732 0 R 1733 0 R 1734 0 R 1735 0 R 1736 0 R 1737 0 R 1738 0 R 1739 0 R 1740 0 R 1741 0 R 1742 0 R 1743 0 R 1744 0 R 1745 0 R 1746 0 R 1747 0 R ] endobj 2319 0 obj [ 1748 0 R 1749 0 R 1750 0 R 1751 0 R 1752 0 R 1753 0 R 1754 0 R 1755 0 R 1756 0 R 1757 0 R 1758 0 R 1759 0 R 1760 0 R 1761 0 R 1762 0 R 1763 0 R 1764 0 R 1765 0 R 1766 0 R 1767 0 R 1768 0 R 1769 0 R 1770 0 R ] endobj 2320 0 obj [ 1771 0 R 1772 0 R 1774 0 R 1775 0 R 1776 0 R 1777 0 R 1778 0 R 1779 0 R 1780 0 R 1781 0 R 1782 0 R 1783 0 R 1784 0 R 1785 0 R 1786 0 R 1787 0 R 1788 0 R 1789 0 R 1790 0 R 1791 0 R 1792 0 R 1793 0 R 1794 0 R 1795 0 R 1797 0 R 1798 0 R ] endobj 2321 0 obj [ 1799 0 R 1800 0 R 1802 0 R 1800 0 R ] endobj 2322 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 2323 0 obj [ 1803 0 R 1804 0 R 1806 0 R 1804 0 R 1807 0 R 1809 0 R 1807 0 R 1810 0 R 1811 0 R ] endobj 2324 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 2325 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 2326 0 obj [ 1812 0 R 1813 0 R 1815 0 R 1819 0 R 1815 0 R 1820 0 R 1821 0 R 1823 0 R 1824 0 R 1825 0 R 1826 0 R 1827 0 R 1828 0 R ] endobj 2327 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 2328 0 obj [ 1828 0 R 1829 0 R 1830 0 R 1831 0 R 1832 0 R 1833 0 R 1834 0 R 1835 0 R 1836 0 R 1837 0 R 1838 0 R 1839 0 R ] endobj 2329 0 obj [ 1840 0 R 1841 0 R 1842 0 R 1843 0 R 1844 0 R 1846 0 R 1848 0 R 1850 0 R 1852 0 R 1853 0 R ] endobj 2330 0 obj << /O /Layout /Placement /Block /StartIndent 16.75999 /EndIndent -1.63374 >> endobj 2331 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 74 /Height 105 /ColorSpace 2459 0 R /BitsPerComponent 8 /Length 2332 0 R >> stream 6\+[_OSqΨh\p!՜j6UPޢ#!OQ bӼwS$r$׈`Koj˾ VT %j/wZR:r͎,T3( Kdvg<5C7=|8%sFtMIx^wFԩc% Ynr7!7#m1R6 ;:漛c\-`ZW$ Q'BZui) &pGEΫ͊BEmoVo7#7y`A+EP7r^i@r endstream endobj 2332 0 obj 507 endobj 2333 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 74 /Height 105 /ColorSpace 2459 0 R /BitsPerComponent 8 /Length 2334 0 R >> stream ` [8Fe^lS H%i%%1H3<);L%6b|v[6Z[^t] d698XH8`NS=|#7uK 7Y4@(l-> stream O2/:W[S};?_dG$E=V9__l,#tD7цIp>tl>q9Ҧ$2JLA 9#!o)UL1HRn#i\/CC#.ǹ4 @b f vDZڡߕ>jDZ1Aj^U]u\sZ8/a-8ƐH^}gHXwCR% c1"ï;07iʣA-O2!3.>%y(" >_^Z(U Q|3bH̅ endstream endobj 2336 0 obj 323 endobj 2337 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 74 /Height 105 /ColorSpace 2459 0 R /BitsPerComponent 8 /Length 2338 0 R >> stream 0$#m)Z-yBTX}|,G8/ @5"O`:A$dOWV+J"hg` >,|Ն ?%hגyt|*.qsȚĬv>쮨|YО֮,Vehslܒ}|D2qRݻ񞺅=B$(hw߸O wiD r a#:L[ TQ#5~֯ t7$u%^ -1_PWf2}=ML3Nx. #84X* endstream endobj 2338 0 obj 321 endobj 2339 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 74 /Height 105 /ColorSpace 2459 0 R /BitsPerComponent 8 /Length 2340 0 R >> stream Ll%0:ȉJP/ O岘Ij]Ž[s4hd\ ޏ 3~PwJ endstream endobj 2340 0 obj 76 endobj 2341 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 74 /Height 105 /ColorSpace 2459 0 R /BitsPerComponent 8 /Length 2342 0 R >> stream VY`Y:<'1q>^LF$r)%ŔUId endstream endobj 2342 0 obj 41 endobj 2343 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 74 /Height 105 /ColorSpace 2459 0 R /BitsPerComponent 8 /Length 2344 0 R >> stream 9ny3271XakfL79ZYmY`鋙 .i7AV. vy!)*;{y}8tfcEj r+qQV1yD˩'> stream G;uϸ]dnh$Yejivm Ezb^ƮJ눼g!悵jI#; S/1 SsD+^ppn4[j1z)&+졧 * O/₁1bRua'7JusoHt1Zy"h訚*@LnRUUÜ {DHJevEbO*2N&dYjFK*6^c9%vYP߈986i b2m?ZR@t=*R~|M=-CǩHo#m:5U 'nynfBX endstream endobj 2346 0 obj 395 endobj 2347 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 74 /Height 105 /ColorSpace 2459 0 R /BitsPerComponent 8 /Length 2348 0 R >> stream -B^Ǽx-XRmioeKPXXH\dH#eC)c)%l gcJf}~{v{b#o=s)Aګ0iHfԠsfJ`I  GԾy$M)Vu "Bl9&vPvY#?F0M?Z=uӀ8p~8ᕲ6R 䆣EJC TFؐ+eFt @"#DL{کQ39v>EI;c֠Ua%/.>I6XzjIF,=N׳?JGQVi-5dѭqݰEyN?ɛ:qU[Ӯ.֐ϻNsIo")!LFKưXleC\`~ 7UԚ$oon+ݝkgd4cǺJ endstream endobj 2348 0 obj 486 endobj 2349 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 74 /Height 105 /ColorSpace 2459 0 R /BitsPerComponent 8 /Length 2350 0 R >> stream ]qfg^Yl[n *j2^R6!JWo$Gq-@*Ո[:$.^L@ʱE6{yXWg=eEZkeЙZK즿'29[B^L`2J/0|3B%F(?Oi3qGDĠl م ۽܅"xY|Ob8."it4xZ&K̑ċGA+T{>!a봎g݅*td:;w܂8.rUǟhP78"$\3!WH/fV~W<ꃊTGՃd" pI TWQ9 VhaQOyl|*rw4-vN6bv͔' endstream endobj 2350 0 obj 442 endobj 2351 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 74 /Height 105 /ColorSpace 2459 0 R /BitsPerComponent 8 /Length 2352 0 R >> stream ;NlP, >fU8 *5/9PcG?czlJq&{=}Q ql9E~ÿE4i@~4a[T;W/%Y]\"eyN?f|ء}3k -Q?Ij嶈N9gb:=x? lF_XW](mX)#X0j/Ȉulfl@ ͻWGo*|՛3]oIcֱEǕ|t٬C\qʜ4^[obEN񃅚qf+y.DpvDBvyrkF*?|,f3_㯿˺{a f59+?aaѲ6* endstream endobj 2352 0 obj 418 endobj 2353 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 74 /Height 105 /ColorSpace 2459 0 R /BitsPerComponent 8 /Length 2354 0 R >> stream { [폌`* ֥N҅A9 >` ^ O+CxިH]KϨհB x: mz_eE`XSb a2RF.6?/υUw]:l0FQxr^;iw'+z!1XB[_^ cPm_GջYudZʈ >xWZnbFm4P]Bo.g ;U~|@l Áo6 =0׿V ,j דVw[H`eknjv55(哻AHp0Hd]y# ^%Cm+Ih_ i\Vjd%?i tC!.}Ȥ endstream endobj 2354 0 obj 430 endobj 2355 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 74 /Height 105 /ColorSpace 2459 0 R /BitsPerComponent 8 /Length 2356 0 R >> stream gq1/R"n:TAEo_j]&%Ã#e w'Aًq[!#RrhH Dqu$UiL婡U(aF3K7fwJRm<0o.@q;q!&k'8$cVJ`0(8KK-%w‘vzv}ujZݭ҆4E-9n-znĔUQjOO hrEUU@foeuH5m8UN;)Ν:xюLvhjVH> stream #q vYkh1ŷ`lbɽOBp]}$e9nnL6>D_x '{-3kʦ?;ۮ4i&O,$͜pߢv?x Y҉ V]x h ,"'"DNU1j=f!, cܜ!\/}0vReRbLĝ9zu=؎1GKK"!sE54ZnZaS`V^yv>+~\QQ9-;mkpFafqi=b=Ze%Co;WvbRCJ*yzUhY f]GaZ\*m endstream endobj 2358 0 obj 400 endobj 2359 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 74 /Height 105 /ColorSpace 2459 0 R /BitsPerComponent 8 /Length 2360 0 R >> stream y7̡&i W2U4 KdԲr~+PAo[$Ӿ8̭2*fI-\E 4e{6ŀ~*ׇ)?E&`|aI\V [_8Y{Qڲ>̡ыxFP+J%Z Mv!9HbW0+}XGzpY;t>O]> stream +V 97fsfO1 <3'~S9 mtcGCPdcl䣢>ϽsJsIHn ~~̵8ք_"s-%bdZ,Y@+ NHM7wo+,FNc(vF։n|=ul-@݄&rUh@c}+zא$sRO0x5-&/EB ).VhVE hb>1e\ ȱr5ץ˭_9ӓ Cr-pͦ""aI ).}~ułCevx{CLy"ff5)wAɈ` KrGNJf endstream endobj 2362 0 obj 344 endobj 2363 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 74 /Height 105 /ColorSpace 2459 0 R /BitsPerComponent 8 /Length 2364 0 R >> stream 5Ӷ/wB2_3YLjO [V4o&U Mpfae([ɻ)pSDɤɔ/d-舊v&:3dVW2Tה$'B&Y5?ͬ%}{JZJ7 BvAbJn endstream endobj 2364 0 obj 386 endobj 2365 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 74 /Height 105 /ColorSpace 2459 0 R /BitsPerComponent 8 /Length 2366 0 R >> stream 4ewI%/_'Fx֤YGﴡҨ#t~nݲ"mB= ei@1*妧$7xYh( gBOS G %F4mAY8>HݳU>aiX]r Jޗixq/U JG5n#x* k endstream endobj 2366 0 obj 354 endobj 2367 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 74 /Height 105 /ColorSpace 2459 0 R /BitsPerComponent 8 /Length 2368 0 R >> stream rǸ0fDi0iWqZ!F\]-F`,SdUPȂX޲g'Ndu-|4ͯY-+=w|d{+D9O9M+)u{a?źŹ~j9yXDa0Ο/h 1Lioy*2)WjY#6sS+Y(y̔K C VrM:Pn`zliW8yX)?QBx}@^X{ z؎k KzJBxVP^> f$H#k!mpXW endstream endobj 2368 0 obj 407 endobj 2369 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 74 /Height 105 /ColorSpace 2459 0 R /BitsPerComponent 8 /Length 2370 0 R >> stream iGl+߳*2( hUuaY&8%1I%.Eނ$bB*K>qf!KniAQ:[_%)Ehǐ c=󁀹#bU+gd 5Rƴy_u4sg~u$}@I }M=ysr8?ҭrD, bA<njas ~jbQPzz;7wo&U4U·FAJzhFBz^\ "޼@; endstream endobj 2370 0 obj 335 endobj 2371 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 74 /Height 105 /ColorSpace 2459 0 R /BitsPerComponent 8 /Length 2372 0 R >> stream 1s+H*?K\ $Τvj-<*xOC[ԧG`co<>$Q\F%khRI]6SCKݶ`fpoį%4 5vZ"۲7"eSLFkr|=F(3ax9Ia7zb;%D!I- j"2O8vBrZ}.,lC#%0ׁ/}Ut, B-e]] %\:ԏz̋Gj"j}2'Nji3C!=L5喡Ke|{_B'U\OjYg{ճ endstream endobj 2372 0 obj 359 endobj 2373 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 74 /Height 105 /ColorSpace 2459 0 R /BitsPerComponent 8 /Length 2374 0 R >> stream JO6Ual7 HdHQ Ŵn s*\ŋ]Qu?0h}ROu"_6@q5Rt7PD j9\$lP\ٿHoQU9+3[\m}$ pAQEg?!nMn 6,# hYiR_0G)؜gp%~W& 0GiM9SlSmZ D;N)bʎ&g':gxRxB:3G`S?vh} >b18=cAblO/HR1>*1>O.]p/h 2>nxt=O[˩d 27.a[X=w endstream endobj 2374 0 obj 380 endobj 2375 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 74 /Height 105 /ColorSpace 2459 0 R /BitsPerComponent 8 /Length 2376 0 R >> stream 5s3tm%[[[Q ] X#&Rl[+'037כݗԖ)92\2a{;Э7H} tN{qnIL%+ ()<w@ 4_I+JkUH8ܯpXLzګ՟ɒۦ,z@v'~# b,dsNh:r:"uVr9vˉ€$@@_و)!+.$SD{jJ`GARU 煻Hatm$v}'Hje,%,'c՘ah3d q`> stream 5vRK4N;$ݴGxzq^w6F޴: }.q)PFů":10 ?ӣBŽ6gAXChBև}{'o/gr3/[AWKGңlAqīO^x&t> stream jd>KRN;+Yð6鋾rUYy[,?I.EAͪR*1,51+"j<$FD2qRqƞ>\v; w^碅 z!ܗ6[^ְ :rU&^e00d!R >RiDmZvM pyqޯ1z Z@&beu)pEn(@b8>1=FtZ> stream ڮ7J\~%&. o[PZ>j: uA6xk!D]lzԋ7ފÁm7ﳳfjj@)mdhSz4J::P(uxa~&%Tm 7B. endstream endobj 2382 0 obj 128 endobj 2383 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 74 /Height 105 /ColorSpace 2459 0 R /BitsPerComponent 8 /Length 2384 0 R >> stream #)4!}η`*=̘: 詠uKkĦ rHyD!R_{HL#ovؿljp?zJTҞZ!TMwi1"ZvX2DGIb..Ķ_:;/ !5&,I|keJ@9?c1> stream 7a|M@X )bg/l~nL&][!1[V߂k<=xAQDỳԩΆUƧ8&^f[mp†;v2glu.dԮRj㣩%p)Vw=ZN9lH}x.f5ZG,ǥ;C`L>rQ籰6!VDk;q)( ǿm@q3`Z!zecaм}@c#h࠯o>,uͭ߮\# }<&BXj.[ GQnF&2'oYLT| endstream endobj 2386 0 obj 328 endobj 2387 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 74 /Height 105 /ColorSpace 2459 0 R /BitsPerComponent 8 /Length 2388 0 R >> stream SZWv9b81KEFgxifdJR竴IPLj9Ib̋| 1(z_p]= ֟:U0bU?v*I`ßF!5?ۂ߉u'fUCE yEPgfW5qcd_vs\Rv|m&f cn _ok,Τ]~V%b'd(4ܖ6sRkzјh߈ǒD8 er4 y]Q2 Qxp> stream 7jNP澠4}I.A=DTW;%4b6~ꯖӌ뿧X Ը,ZJ$PZx+}UU> stream d [\:޽:yw;ο1t5 `~S񖜽dgJKO<ʛުGh|Xm# ;C ScF} endstream endobj 2392 0 obj 106 endobj 2393 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 74 /Height 105 /ColorSpace 2459 0 R /BitsPerComponent 8 /Length 2394 0 R >> stream T)BGL/-o:JNsT`ct4`dB`QfR.sbe~,+aC {l_S#DCy\WVE;E_a\Lc`21#@\$RP AA#?F˔ѕ}\bB|jpr0-bnԌ{rI9@/`Z0Yd,4C8BubGa[襀-,WsEs.@ P@HlqFe;7ҽ{;zbB-x X}2F endstream endobj 2394 0 obj 290 endobj 2395 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 74 /Height 105 /ColorSpace 2459 0 R /BitsPerComponent 8 /Length 2396 0 R >> stream .J$:#nY|p.V`M_ 2ڍe ۈ_֏ކ _e4FqJFZ!Xz>z!Ïu4- endstream endobj 2396 0 obj 359 endobj 2397 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 74 /Height 105 /ColorSpace 2459 0 R /BitsPerComponent 8 /Length 2398 0 R >> stream L@W)06)mE|Jh 5( L)gBJɼ4.|{|yhNT:*"X eJ::3KYfD.TД\GK^\HHnC~e-1 (rL"!ך Y$yN[Ƌ11W,D5W௾1'Y:_nw&wbΘ=U{yB<+ $cŹKtt!̥eNEo| ,R#ө[d endstream endobj 2398 0 obj 250 endobj 2399 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 74 /Height 105 /ColorSpace 2459 0 R /BitsPerComponent 8 /Length 2400 0 R >> stream ea^Դ=LΜth@Z} 1)@f^I1 asxKz.ɰP?)2foUƼvI6,%Td.hͧo<ą¹z-)ohc\T .@A3<*_3  ?(0N)H;`khVY\kSVx,cFi _£}<];Z`IQ;("r- W endstream endobj 2400 0 obj 258 endobj 2401 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 74 /Height 105 /ColorSpace 2459 0 R /BitsPerComponent 8 /Length 2402 0 R >> stream #Ko?zlMR|T_pP9q5 \Z |bt]jB?xPi0Zrp@M-&Qͽ8c8]AXS]~(BrT$'q.naM):G]̍nUBj"7C<С.hE+6 endstream endobj 2402 0 obj 179 endobj 2403 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 74 /Height 105 /ColorSpace 2459 0 R /BitsPerComponent 8 /Length 2404 0 R >> stream JKŖS[F]"g#>ExbC57ηso!(5U _qQ;dz<͌w#6?:R{!*,t`eL&|y<_U[+s|%YWʽGD1C F8#35-Q[K endstream endobj 2404 0 obj 184 endobj 2405 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 74 /Height 105 /ColorSpace 2459 0 R /BitsPerComponent 8 /Length 2406 0 R >> stream sj&w^8x-4+mQ21BxRY\ wWb[[qxs3iߏSCܪtMt$0]p'ljKJS{W[+H/KT*6M W6S@?TĘ7yGoqy]'Tf>(J5ьtC [7D!P endstream endobj 2406 0 obj 188 endobj 2407 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 74 /Height 105 /ColorSpace 2459 0 R /BitsPerComponent 8 /Length 2408 0 R >> stream mf5;,76 ăBtE+qQZ=pW+8sbلт UnHkLxz>HRO,j'>R1ܸgA@ӝgQ>?H}Z(ٵ w)WA>ux]Ks5O L~ bhCad*=F4ȯyd), Nz]E P`HY$ pP ,|qh* ˠɔFɓ'rydAcBۿZ_Bܱ04pԄ 8{ff'H*}Ħ^ endstream endobj 2408 0 obj 331 endobj 2409 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 74 /Height 105 /ColorSpace 2459 0 R /BitsPerComponent 8 /Length 2410 0 R >> stream 6fփn{|@ƠUw|> stream !lPSZ2LǺ7"BJiܐXG-&z,}qz/C^6񈿄򋯽_gI~Yi )>t yOPF%aÑYJa97b 'b"*\m endstream endobj 2412 0 obj 364 endobj 2413 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 74 /Height 105 /ColorSpace 2459 0 R /BitsPerComponent 8 /Length 2414 0 R >> stream m8upzr86)#VŌP WSקꨛ߀(;05zQA AΐH20 ~.;~dXQw]OU;sQzhAr_Z|(a͡w25 Pw$Y", W\(-N]c6J#AkK/hWG;]F-LI\i~ޖuT4lۏ;Aڠ4o"=>3̏U|,g U95SxGbT]:B9QeٮVa9U#/ߛM9Ioô Kﭾ > stream q 0{_ŤV$nɴOr׃EhInZR3¤G!~V\qF4$#:MHȉ;zcI;:_޼9@i`yǍNp"xiX}^;ozP:8SC8t >Jq_7^Tj,;Z`W7=MH7WO"M#ƽ7u9""XWjǃ;71 ,*0I?1@?Q6ڜΡxN vzE]I!inT>p gEs> stream q3P)1y'ʕ[kZJQ _b9Ċ7;Z/ސKNJ'y79զ"71^ 3)6!Uv|=̠ɞJT 2EoC\eLt֢A+oօUʵn.{tZsgk8X2_{r*ڙ_6M?ه|)Y)O>🙾>4-n D}+$yj)w9ߖM݋g-XW+^?C(BCF$;*/IlNi@صBBT07/78N[fv%>4K8-oVW̠щL f$'.[ Ee2lD(x/h sprWGT>e٩0 endstream endobj 2418 0 obj 399 endobj 2419 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 74 /Height 105 /ColorSpace 2459 0 R /BitsPerComponent 8 /Length 2420 0 R >> stream J֢&n HUd= 9=/I2Vѕ-Gjf%(q H >M% eɼUϱdK"unw4I5A;֮?2<Ͳ0{zR6MUb8 ,^_*3sl͝fg8[XfXFh|J5]ɥ'UZ;@FwSG%߸jnc3Ģ1"$LEv> stream -ϿBYpt`%1ɬ_GG >4bo6~`O>+.\ce*2s%Dq%뾿8%ŨڒlvsyE0{F cMؤo,zeyĥ~7tϘ$q0H8 Aw`-JU| Ǟpuc_qE$;Dd-@Rwc 3qf&~i[^ a#g{mf^ 1v@ȅ)cEdpjTL}0qjCb:EIw`U=lpgbM-{fqsm-dA ?]z'3+~t4} o>nLդ endstream endobj 2422 0 obj 397 endobj 2423 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 74 /Height 105 /ColorSpace 2459 0 R /BitsPerComponent 8 /Length 2424 0 R >> stream 4D?$NlyZY썟~_#-˟9SMʋLM:FD٦.AǍh @?B լMs&v"oz%*nAm(׶\%QڠE~}c 7g-<ΦJ+˰SzOsp(-[.-PK.G}<kCpKN-)DLzohJz8e !RR K?Bj~K1o:%N wUtMtnf GŇͯ͡ A]G:#QȌ:r!T= s endstream endobj 2424 0 obj 351 endobj 2425 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 74 /Height 105 /ColorSpace 2459 0 R /BitsPerComponent 8 /Length 2426 0 R >> stream m6A'd]L>5֗HC^jЈB?vjbAywx:L[ov769!nN,Sϫ$;5f=Aġ(2Q/ r+[z=ڮs6WaVahcISNn@XM F+qthtFImӸk7Hwsa2VM1مP6JؿT+ E ׏ hJTG'$j,YJqSA#_(*І]ۮ*ԯERdm|=mVfr6,ق%EF>J./K2;8&R%1I1GDV-ko{4:3=E5jj L{ endstream endobj 2426 0 obj 435 endobj 2427 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 74 /Height 105 /ColorSpace 2459 0 R /BitsPerComponent 8 /Length 2428 0 R >> stream mdWIaqN|FF`;_C<\*}*R+:W rbzdVr,ڔf2iZ3Cx)!KHbڛmK{:t'%p5G+RȆt2!0* 8%> stream uv8bGM׎DنJA3];u릵C`'H@-┼-Se3Ub>E^[3\lAf*ۼ8`/3붰C?ad#>{v7]@QD{> stream b'M+@!̱0w- GL] |.lc?n.dBJ x )Dtk 5q>s:ð3Z/4`kxBWTy"/9CU endstream endobj 2432 0 obj 139 endobj 2433 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 74 /Height 105 /ColorSpace 2459 0 R /BitsPerComponent 8 /Length 2434 0 R >> stream p?+Oy>y˖D,uj8\I*|ygUZ}3`0 ;# N~p7!?ۭqS1c׌` *Puݦ:e@"뻢Lu)*?:pE|KAa^ҁ0җC$wsr/zo~p=hvq'd_|~`ǏyS) 9(Iɘk; W ͱɝ"v$龇!IpX endstream endobj 2434 0 obj 234 endobj 2435 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 74 /Height 105 /ColorSpace 2459 0 R /BitsPerComponent 8 /Length 2436 0 R >> stream  N-.PJB Z؆1QF{W+'3`Z4zc[EO&sӈ Z~mX:h3(*A<?" "(9P< |' "QG)֧O"M|~ea랠(y *bVʽ1Rh8ԼN،BDݡd&^\R.AaHEc8vWPRYE-a?%T7l^<#Zo{7Ɂɳc(:>mJ2o B9L^ի;xG endstream endobj 2436 0 obj 319 endobj 2437 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 74 /Height 105 /ColorSpace 2459 0 R /BitsPerComponent 8 /Length 2438 0 R >> stream I`Ϝ,zOXejyۢ:C (p?ܝYOgjh/3܍,6\=v3Ԥ}Yh&VwWZ4V;bD5b9, u{ v^],)kN ^/-ezJVCAIOA$Q\Ex_p:Z(䊹|o_ HSV M.[ɒ8$q.% Y@ U? endstream endobj 2438 0 obj 349 endobj 2439 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 74 /Height 105 /ColorSpace 2459 0 R /BitsPerComponent 8 /Length 2440 0 R >> stream M(sX[~<0_(U?%dŨb k_iS'4U`g} wd'UBu}Ut }&~̀XAW]snqo,javͳe,<([`aA FΊg&D=߳G_x9} ,Q}: H #5&7U/<bMzLv=C~Rn,A KsJބo!K~}:a]0zԢAܢ?g0hxn^248QnzEL,6Kow 2ꮷj!ȊML9f> stream T9EIeح? VDaHl~/Wt(^+Y/6lE^[SZ pJK6;Dܺ܎k4T 1ԭpY׽`U~ںPK6fiaN[j'D}@¦7^P!oy Tڋ^ŒZ#+ l8 z <ҋn (=3I?XMVhp7}-Z[2ohraZE(/gWS~>JcC$o-2C֑f`JlrLh} 8Gr8O\"gMݡ>&;B:Gq\<w*Uo GUJW endstream endobj 2442 0 obj 351 endobj 2443 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 74 /Height 105 /ColorSpace 2459 0 R /BitsPerComponent 8 /Length 2444 0 R >> stream Z|kHA# ł0A|$TQإ[)1sr7ky;C@?m$GyΔ4VGBԅ:-b~frŘjRdgx:?w`/GpBw| R.@ oˎ endstream endobj 2444 0 obj 310 endobj 2445 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 74 /Height 105 /ColorSpace 2459 0 R /BitsPerComponent 8 /Length 2446 0 R >> stream 2*ۨ #@]-3'ӛ A > CČEsTǥup*Ԗ>ӼGglKH|X)P{M}F-Ed?[X*j MS#0Rm&]l>Wvg${cN0S%}eЏVp./ Vpj wZفaܖQ[ endstream endobj 2446 0 obj 209 endobj 2447 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 74 /Height 105 /ColorSpace 2459 0 R /BitsPerComponent 8 /Length 2448 0 R >> stream Z2H '_+KіD.mQw)W Ha^M#2Մ  .|2m{g3 $@u-kOk̐˙@jB$FTg(>"@Zj9> stream xp˯Mn0Ö'yI rI{[;AH{>#zl*}}ZD?0,0*P-u0GNah^~nüMjHi +1Me=AD꘿W,ͺ.WykVPb[vwGM0R219d~qLGb{W|ʝ'*G endstream endobj 2450 0 obj 218 endobj 2451 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 74 /Height 105 /ColorSpace 2459 0 R /BitsPerComponent 8 /Length 2452 0 R >> stream d3d=Y Ch}3*j1=/@ %$ϫB& #Ґ#̇80 7^j`/4T_їMx|9T6]YsP;0w\b}!@6? (Ya݆JG;R ǽ򎼮#yN26\:zFxbT4lucw L:ߨ~(n?7ko8#lRKW*ѡqF}h-GÂ^uä`-)/܁gT#WD=em"pgK'Žj^5?H(ܛMMe_lcx>UgH]9BF&;+&U]Ybn>^xj^@Nv{*Y 5xGu endstream endobj 2452 0 obj 467 endobj 2453 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 74 /Height 105 /ColorSpace 2459 0 R /BitsPerComponent 8 /Length 2454 0 R >> stream U58tpoʀK'/B1s?<2W#t.$,R[$k_7 e@t9[sTǬ(˅۲EԂ} L,0[ PXu"gvяeDq2@LXVC#ͰMtz>Kz,Y<-;^EN @_ex$ߤu^0r0pӉd J(WwC#UGSs]G E>X^-i?, h 3e/t[0:1qzX;'1\u :" endstream endobj 2454 0 obj 423 endobj 2455 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 74 /Height 105 /ColorSpace 2459 0 R /BitsPerComponent 8 /Length 2456 0 R >> stream Q 6]~:?!'K͔oa2X]3):O 4i"UwL9vhwIV\B䫙bv} 35MQ`:Av3X5NA剹~h7޸g?6>d^\I|:7.qJ endstream endobj 2456 0 obj 193 endobj 2457 0 obj 481 endobj 2458 0 obj << /Filter [ /ASCII85Decode /LZWDecode ] /Length 2457 0 R >> stream w!Ԉamᯟ]KlpEHssypa_%؁g{W3?GaْR.\8(i}KO/+oH,F}6npe ]W<)7s'D^&ƐK"+_~FU锲g_IρEK!2קU^b*GvĘ;,A#1ߑyv?9s|7wp Q|yrצhdRBkr [J` ݟo*ڧ)ۿk>3#Lu%"$+u&-4o"m~PK!HlFd%Ib-U~g P&pBArl-Zk[[˭'&,rEȇܫC6V,]D%1<F[$1}y+ >gvĔaAU>(׼v&|A;>y30 endstream endobj 2459 0 obj [ /Indexed /DeviceRGB 255 2458 0 R ] endobj 2460 0 obj << /S /D >> endobj 2461 0 obj << /Nums [ 0 2460 0 R ] >> endobj 2462 0 obj << /Producer (k@9!#h_d7<8X$W) /Author (gLv9;gd) /Creator (k@9!#3]f6,,BjP$) /ModDate (njsgA*A=1<\n) /Title (GN/%;sVa\rT2B~"4) /CreationDate (njsgA*I=0<\n) >> endobj 2463 0 obj << /Type /Metadata /Subtype /XML /Length 1147 >> stream Ol ]X R쫙րHGK@>s< mƮԚM&iHpF$bǘUsU8:^d(DFLƙ'ȅ+Ƽl] %Q= ͼUMSUCLY:m!=r[̹BigѢ?W~Q> |cب#]#cMMkbԴɅQ Ǭsҡ(-x3 ǰlx4џ'h'QBBwL.ɂmA230Egnwd'd%VB7Ɨoo0t#Ru_\Jܧ9 $YS~l1ңRXu320+RT A,7\*.l=t^5QK5 ˳ޖl:ђYH/w^b-Yori(rܒ#j.*FŐbǵȅ/m(6Kf5߾oO{xPt-ٵU 4WT !Z3^'Ù!W?NMIu@mzj8qa|Ϡ=vԠ[7'%n;&Kp{sY?_2 ~gb\×K_%KierX z0=uj 0Yo/CXM=DIo%^x]ՙ_wJ(!: 0;DpTj <9<\U#C;/ͣsHYNhp=i6[)d"/_YW?EM ϟ5s_`> endobj 2465 0 obj << /Type /Pages /Kids [ 2464 0 R 2466 0 R 2467 0 R 2468 0 R 2469 0 R 2470 0 R 2471 0 R ] /Count 63 >> endobj 2466 0 obj << /Type /Pages /Kids [ 145 0 R 150 0 R 162 0 R 165 0 R 170 0 R 175 0 R 178 0 R 181 0 R 184 0 R 187 0 R ] /Count 10 /Parent 2465 0 R >> endobj 2467 0 obj << /Type /Pages /Kids [ 190 0 R 196 0 R 203 0 R 206 0 R 209 0 R 212 0 R 215 0 R 218 0 R 221 0 R 224 0 R ] /Count 10 /Parent 2465 0 R >> endobj 2468 0 obj << /Type /Pages /Kids [ 227 0 R 230 0 R 233 0 R 236 0 R 239 0 R 242 0 R 245 0 R 248 0 R 251 0 R 254 0 R ] /Count 10 /Parent 2465 0 R >> endobj 2469 0 obj << /Type /Pages /Kids [ 261 0 R 264 0 R 269 0 R 274 0 R 279 0 R 284 0 R 287 0 R 290 0 R 295 0 R 298 0 R ] /Count 10 /Parent 2465 0 R >> endobj 2470 0 obj << /Type /Pages /Kids [ 301 0 R 304 0 R 307 0 R 310 0 R 313 0 R 316 0 R 319 0 R 322 0 R 325 0 R 329 0 R ] /Count 10 /Parent 2465 0 R >> endobj 2471 0 obj << /Type /Pages /Kids [ 333 0 R 337 0 R 340 0 R ] /Count 3 /Parent 2465 0 R >> endobj xref 0 2472 0000000000 65535 f 0000278125 00000 n 0000278469 00000 n 0000280012 00000 n 0000280033 00000 n 0000280392 00000 n 0000280579 00000 n 0000280715 00000 n 0000280853 00000 n 0000280988 00000 n 0000281123 00000 n 0000281258 00000 n 0000281394 00000 n 0000281530 00000 n 0000281666 00000 n 0000281801 00000 n 0000281937 00000 n 0000282073 00000 n 0000282209 00000 n 0000282348 00000 n 0000282482 00000 n 0000282617 00000 n 0000282753 00000 n 0000282892 00000 n 0000283028 00000 n 0000283164 00000 n 0000283300 00000 n 0000283439 00000 n 0000283575 00000 n 0000283711 00000 n 0000283847 00000 n 0000287915 00000 n 0000287937 00000 n 0000288003 00000 n 0000288069 00000 n 0000288135 00000 n 0000288201 00000 n 0000288267 00000 n 0000288333 00000 n 0000288399 00000 n 0000288465 00000 n 0000288531 00000 n 0000288597 00000 n 0000288663 00000 n 0000288729 00000 n 0000288795 00000 n 0000288861 00000 n 0000288927 00000 n 0000288993 00000 n 0000289059 00000 n 0000289125 00000 n 0000289191 00000 n 0000289257 00000 n 0000289323 00000 n 0000289389 00000 n 0000289455 00000 n 0000289521 00000 n 0000289882 00000 n 0000290109 00000 n 0000290251 00000 n 0000290391 00000 n 0000290532 00000 n 0000290673 00000 n 0000290812 00000 n 0000290952 00000 n 0000291091 00000 n 0000291230 00000 n 0000291371 00000 n 0000291510 00000 n 0000291649 00000 n 0000291789 00000 n 0000291931 00000 n 0000292071 00000 n 0000292211 00000 n 0000292351 00000 n 0000292490 00000 n 0000292630 00000 n 0000292770 00000 n 0000292908 00000 n 0000293047 00000 n 0000293187 00000 n 0000293329 00000 n 0000293469 00000 n 0000293609 00000 n 0000293749 00000 n 0000293892 00000 n 0000294035 00000 n 0000294177 00000 n 0000299774 00000 n 0000299796 00000 n 0000299862 00000 n 0000299928 00000 n 0000299994 00000 n 0000300060 00000 n 0000300126 00000 n 0000300192 00000 n 0000300258 00000 n 0000300324 00000 n 0000300390 00000 n 0000300456 00000 n 0000300522 00000 n 0000300589 00000 n 0000300656 00000 n 0000300723 00000 n 0000300790 00000 n 0000300857 00000 n 0000300924 00000 n 0000300991 00000 n 0000301058 00000 n 0000301125 00000 n 0000301192 00000 n 0000301259 00000 n 0000301326 00000 n 0000301393 00000 n 0000301460 00000 n 0000301527 00000 n 0000301594 00000 n 0000301661 00000 n 0000301728 00000 n 0000302092 00000 n 0000302131 00000 n 0000302274 00000 n 0000302414 00000 n 0000303191 00000 n 0000303213 00000 n 0000303280 00000 n 0000303347 00000 n 0000303523 00000 n 0000303567 00000 n 0000303650 00000 n 0000304042 00000 n 0000304089 00000 n 0000306389 00000 n 0000306412 00000 n 0000306479 00000 n 0000306546 00000 n 0000306613 00000 n 0000306973 00000 n 0000310461 00000 n 0000310484 00000 n 0000310845 00000 n 0000315275 00000 n 0000315298 00000 n 0000315659 00000 n 0000319290 00000 n 0000319313 00000 n 0000319691 00000 n 0000319722 00000 n 0000323571 00000 n 0000323594 00000 n 0000323679 00000 n 0000324072 00000 n 0000324159 00000 n 0000328499 00000 n 0000328522 00000 n 0000328589 00000 n 0000328656 00000 n 0000328741 00000 n 0000328827 00000 n 0000328911 00000 n 0000328994 00000 n 0000329081 00000 n 0000329151 00000 n 0000329499 00000 n 0000333147 00000 n 0000333170 00000 n 0000333548 00000 n 0000333579 00000 n 0000337847 00000 n 0000337870 00000 n 0000337955 00000 n 0000338333 00000 n 0000338364 00000 n 0000342981 00000 n 0000343004 00000 n 0000343090 00000 n 0000343438 00000 n 0000347218 00000 n 0000347241 00000 n 0000347589 00000 n 0000351983 00000 n 0000352006 00000 n 0000352367 00000 n 0000356396 00000 n 0000356419 00000 n 0000356780 00000 n 0000361193 00000 n 0000361216 00000 n 0000361564 00000 n 0000365030 00000 n 0000365053 00000 n 0000365431 00000 n 0000365470 00000 n 0000369299 00000 n 0000369322 00000 n 0000369409 00000 n 0000369495 00000 n 0000369873 00000 n 0000369920 00000 n 0000374451 00000 n 0000374474 00000 n 0000374559 00000 n 0000374644 00000 n 0000374726 00000 n 0000375074 00000 n 0000378615 00000 n 0000378638 00000 n 0000378986 00000 n 0000382221 00000 n 0000382244 00000 n 0000382605 00000 n 0000386180 00000 n 0000386203 00000 n 0000386551 00000 n 0000387550 00000 n 0000387572 00000 n 0000387920 00000 n 0000392120 00000 n 0000392143 00000 n 0000392504 00000 n 0000395679 00000 n 0000395702 00000 n 0000396050 00000 n 0000399440 00000 n 0000399463 00000 n 0000399811 00000 n 0000402776 00000 n 0000402799 00000 n 0000403147 00000 n 0000404006 00000 n 0000404028 00000 n 0000404376 00000 n 0000407123 00000 n 0000407146 00000 n 0000407494 00000 n 0000410524 00000 n 0000410547 00000 n 0000410895 00000 n 0000413487 00000 n 0000413510 00000 n 0000413871 00000 n 0000417866 00000 n 0000417889 00000 n 0000418250 00000 n 0000422783 00000 n 0000422806 00000 n 0000423167 00000 n 0000427717 00000 n 0000427740 00000 n 0000428101 00000 n 0000431992 00000 n 0000432015 00000 n 0000432391 00000 n 0000435799 00000 n 0000435822 00000 n 0000436200 00000 n 0000436247 00000 n 0000439358 00000 n 0000439381 00000 n 0000439467 00000 n 0000439554 00000 n 0000439630 00000 n 0000439978 00000 n 0000444010 00000 n 0000444033 00000 n 0000444411 00000 n 0000444442 00000 n 0000449016 00000 n 0000449039 00000 n 0000449125 00000 n 0000449503 00000 n 0000449534 00000 n 0000453950 00000 n 0000453973 00000 n 0000454072 00000 n 0000454450 00000 n 0000454481 00000 n 0000457957 00000 n 0000457980 00000 n 0000458066 00000 n 0000458444 00000 n 0000458475 00000 n 0000461991 00000 n 0000462014 00000 n 0000462099 00000 n 0000462447 00000 n 0000466543 00000 n 0000466566 00000 n 0000466914 00000 n 0000471136 00000 n 0000471159 00000 n 0000471537 00000 n 0000471568 00000 n 0000475996 00000 n 0000476019 00000 n 0000476109 00000 n 0000476457 00000 n 0000480070 00000 n 0000480093 00000 n 0000480441 00000 n 0000484100 00000 n 0000484123 00000 n 0000484471 00000 n 0000485425 00000 n 0000485447 00000 n 0000485795 00000 n 0000488049 00000 n 0000488072 00000 n 0000488420 00000 n 0000490981 00000 n 0000491004 00000 n 0000491365 00000 n 0000494126 00000 n 0000494149 00000 n 0000494510 00000 n 0000498101 00000 n 0000498124 00000 n 0000498485 00000 n 0000502100 00000 n 0000502123 00000 n 0000502498 00000 n 0000505276 00000 n 0000505299 00000 n 0000505647 00000 n 0000507247 00000 n 0000507270 00000 n 0000507635 00000 n 0000507666 00000 n 0000508763 00000 n 0000508786 00000 n 0000509151 00000 n 0000509190 00000 n 0000511464 00000 n 0000511487 00000 n 0000511866 00000 n 0000511897 00000 n 0000517335 00000 n 0000517358 00000 n 0000517707 00000 n 0000522055 00000 n 0000522078 00000 n 0000522427 00000 n 0000523434 00000 n 0000523456 00000 n 0000523612 00000 n 0000523802 00000 n 0000524297 00000 n 0000524899 00000 n 0000525319 00000 n 0000525526 00000 n 0000532539 00000 n 0000532754 00000 n 0000540948 00000 n 0000541200 00000 n 0000552537 00000 n 0000552764 00000 n 0000582602 00000 n 0000582825 00000 n 0000605630 00000 n 0000605870 00000 n 0000606184 00000 n 0000606344 00000 n 0000606505 00000 n 0000606666 00000 n 0000606824 00000 n 0000606986 00000 n 0000607148 00000 n 0000607309 00000 n 0000607471 00000 n 0000607633 00000 n 0000607795 00000 n 0000607954 00000 n 0000608116 00000 n 0000608277 00000 n 0000608439 00000 n 0000608601 00000 n 0000608763 00000 n 0000608925 00000 n 0000609087 00000 n 0000609248 00000 n 0000609410 00000 n 0000609569 00000 n 0000609729 00000 n 0000609891 00000 n 0000610053 00000 n 0000610215 00000 n 0000610376 00000 n 0000610538 00000 n 0000610696 00000 n 0000610798 00000 n 0000610960 00000 n 0000611024 00000 n 0000611186 00000 n 0000611250 00000 n 0000611412 00000 n 0000611501 00000 n 0000611568 00000 n 0000611682 00000 n 0000611803 00000 n 0000611927 00000 n 0000612072 00000 n 0000612254 00000 n 0000612386 00000 n 0000612495 00000 n 0000612655 00000 n 0000612784 00000 n 0000612912 00000 n 0000613036 00000 n 0000613151 00000 n 0000613331 00000 n 0000613509 00000 n 0000613678 00000 n 0000613847 00000 n 0000614033 00000 n 0000614159 00000 n 0000614269 00000 n 0000614395 00000 n 0000614581 00000 n 0000614694 00000 n 0000614878 00000 n 0000614990 00000 n 0000615142 00000 n 0000615234 00000 n 0000615401 00000 n 0000615559 00000 n 0000615651 00000 n 0000615789 00000 n 0000615882 00000 n 0000616022 00000 n 0000616216 00000 n 0000616407 00000 n 0000616538 00000 n 0000616670 00000 n 0000616822 00000 n 0000616970 00000 n 0000617156 00000 n 0000617291 00000 n 0000617425 00000 n 0000617570 00000 n 0000617735 00000 n 0000617865 00000 n 0000617993 00000 n 0000618133 00000 n 0000618291 00000 n 0000618439 00000 n 0000618575 00000 n 0000618706 00000 n 0000618851 00000 n 0000618980 00000 n 0000619109 00000 n 0000619263 00000 n 0000619416 00000 n 0000619542 00000 n 0000620359 00000 n 0000620444 00000 n 0000620529 00000 n 0000621237 00000 n 0000621389 00000 n 0000621474 00000 n 0000621559 00000 n 0000621644 00000 n 0000621729 00000 n 0000621814 00000 n 0000621899 00000 n 0000621984 00000 n 0000622069 00000 n 0000622155 00000 n 0000622241 00000 n 0000622327 00000 n 0000622413 00000 n 0000622499 00000 n 0000622585 00000 n 0000622671 00000 n 0000622757 00000 n 0000622843 00000 n 0000622929 00000 n 0000623015 00000 n 0000623101 00000 n 0000623187 00000 n 0000623273 00000 n 0000623359 00000 n 0000623445 00000 n 0000623531 00000 n 0000623617 00000 n 0000623703 00000 n 0000623789 00000 n 0000623875 00000 n 0000623961 00000 n 0000624045 00000 n 0000624129 00000 n 0000624281 00000 n 0000624365 00000 n 0000624451 00000 n 0000624537 00000 n 0000624623 00000 n 0000624764 00000 n 0000624872 00000 n 0000625038 00000 n 0000625120 00000 n 0000625275 00000 n 0000625357 00000 n 0000625465 00000 n 0000625547 00000 n 0000625629 00000 n 0000625739 00000 n 0000625821 00000 n 0000625980 00000 n 0000626063 00000 n 0000626173 00000 n 0000626256 00000 n 0000626339 00000 n 0000626449 00000 n 0000626532 00000 n 0000626615 00000 n 0000626725 00000 n 0000626808 00000 n 0000626891 00000 n 0000627001 00000 n 0000627084 00000 n 0000627167 00000 n 0000627277 00000 n 0000627360 00000 n 0000627443 00000 n 0000627553 00000 n 0000627636 00000 n 0000627719 00000 n 0000627829 00000 n 0000627912 00000 n 0000627995 00000 n 0000628105 00000 n 0000628188 00000 n 0000628271 00000 n 0000628381 00000 n 0000628464 00000 n 0000628547 00000 n 0000628657 00000 n 0000628740 00000 n 0000628823 00000 n 0000628933 00000 n 0000629016 00000 n 0000629099 00000 n 0000629209 00000 n 0000629292 00000 n 0000629375 00000 n 0000629485 00000 n 0000629568 00000 n 0000629651 00000 n 0000629761 00000 n 0000629844 00000 n 0000629927 00000 n 0000630037 00000 n 0000630120 00000 n 0000630203 00000 n 0000630313 00000 n 0000630396 00000 n 0000630479 00000 n 0000630589 00000 n 0000630672 00000 n 0000630755 00000 n 0000630865 00000 n 0000630948 00000 n 0000631031 00000 n 0000631141 00000 n 0000631224 00000 n 0000631307 00000 n 0000631417 00000 n 0000631500 00000 n 0000631583 00000 n 0000631693 00000 n 0000631776 00000 n 0000631859 00000 n 0000631968 00000 n 0000632051 00000 n 0000632134 00000 n 0000632243 00000 n 0000632326 00000 n 0000632409 00000 n 0000632519 00000 n 0000632602 00000 n 0000632686 00000 n 0000632797 00000 n 0000632881 00000 n 0000632965 00000 n 0000633076 00000 n 0000633160 00000 n 0000633244 00000 n 0000633355 00000 n 0000633439 00000 n 0000633523 00000 n 0000633634 00000 n 0000633718 00000 n 0000633802 00000 n 0000633913 00000 n 0000633997 00000 n 0000634152 00000 n 0000634236 00000 n 0000634336 00000 n 0000634420 00000 n 0000634576 00000 n 0000634687 00000 n 0000634771 00000 n 0000634855 00000 n 0000634966 00000 n 0000635050 00000 n 0000635134 00000 n 0000635245 00000 n 0000635329 00000 n 0000635413 00000 n 0000635513 00000 n 0000635597 00000 n 0000635708 00000 n 0000635792 00000 n 0000635876 00000 n 0000635987 00000 n 0000636071 00000 n 0000636155 00000 n 0000636266 00000 n 0000636350 00000 n 0000636434 00000 n 0000636545 00000 n 0000636629 00000 n 0000636713 00000 n 0000636824 00000 n 0000636908 00000 n 0000636992 00000 n 0000637103 00000 n 0000637187 00000 n 0000637271 00000 n 0000637382 00000 n 0000637466 00000 n 0000637550 00000 n 0000637661 00000 n 0000637745 00000 n 0000637829 00000 n 0000637940 00000 n 0000638024 00000 n 0000638108 00000 n 0000638219 00000 n 0000638303 00000 n 0000638387 00000 n 0000638498 00000 n 0000638582 00000 n 0000638666 00000 n 0000638777 00000 n 0000638861 00000 n 0000638945 00000 n 0000639056 00000 n 0000639140 00000 n 0000639224 00000 n 0000639325 00000 n 0000639410 00000 n 0000639511 00000 n 0000639596 00000 n 0000639709 00000 n 0000639794 00000 n 0000639879 00000 n 0000639989 00000 n 0000640073 00000 n 0000640157 00000 n 0000640267 00000 n 0000640351 00000 n 0000640435 00000 n 0000640523 00000 n 0000640622 00000 n 0000640789 00000 n 0000640883 00000 n 0000640982 00000 n 0000641155 00000 n 0000641254 00000 n 0000641353 00000 n 0000641452 00000 n 0000641571 00000 n 0000641651 00000 n 0000641757 00000 n 0000641841 00000 n 0000641961 00000 n 0000642041 00000 n 0000642147 00000 n 0000642231 00000 n 0000642352 00000 n 0000642432 00000 n 0000642538 00000 n 0000642623 00000 n 0000642723 00000 n 0000642817 00000 n 0000642916 00000 n 0000643015 00000 n 0000643130 00000 n 0000643190 00000 n 0000643289 00000 n 0000643404 00000 n 0000643464 00000 n 0000643563 00000 n 0000643662 00000 n 0000643761 00000 n 0000643860 00000 n 0000643960 00000 n 0000644059 00000 n 0000644231 00000 n 0000644330 00000 n 0000644429 00000 n 0000644523 00000 n 0000644622 00000 n 0000644721 00000 n 0000644820 00000 n 0000644960 00000 n 0000645054 00000 n 0000645153 00000 n 0000645252 00000 n 0000645351 00000 n 0000645445 00000 n 0000645544 00000 n 0000645643 00000 n 0000645737 00000 n 0000645877 00000 n 0000645976 00000 n 0000646070 00000 n 0000646183 00000 n 0000646289 00000 n 0000646373 00000 n 0000646472 00000 n 0000646566 00000 n 0000646665 00000 n 0000646759 00000 n 0000646859 00000 n 0000646982 00000 n 0000647088 00000 n 0000647172 00000 n 0000647278 00000 n 0000647362 00000 n 0000647456 00000 n 0000647555 00000 n 0000647654 00000 n 0000647753 00000 n 0000647852 00000 n 0000647947 00000 n 0000648047 00000 n 0000648168 00000 n 0000648248 00000 n 0000648354 00000 n 0000648439 00000 n 0000648560 00000 n 0000648640 00000 n 0000648746 00000 n 0000648831 00000 n 0000648952 00000 n 0000649032 00000 n 0000649138 00000 n 0000649223 00000 n 0000649344 00000 n 0000649424 00000 n 0000649530 00000 n 0000649615 00000 n 0000649736 00000 n 0000649816 00000 n 0000649922 00000 n 0000650007 00000 n 0000650128 00000 n 0000650208 00000 n 0000650314 00000 n 0000650399 00000 n 0000650493 00000 n 0000650592 00000 n 0000650686 00000 n 0000650785 00000 n 0000650882 00000 n 0000650985 00000 n 0000651158 00000 n 0000651261 00000 n 0000651419 00000 n 0000651522 00000 n 0000651625 00000 n 0000651728 00000 n 0000651828 00000 n 0000651926 00000 n 0000652030 00000 n 0000652128 00000 n 0000652232 00000 n 0000652336 00000 n 0000652439 00000 n 0000652536 00000 n 0000652639 00000 n 0000652736 00000 n 0000652839 00000 n 0000652942 00000 n 0000653045 00000 n 0000653142 00000 n 0000653245 00000 n 0000653348 00000 n 0000653452 00000 n 0000653550 00000 n 0000653654 00000 n 0000653752 00000 n 0000653856 00000 n 0000653960 00000 n 0000654064 00000 n 0000654162 00000 n 0000654266 00000 n 0000654385 00000 n 0000654491 00000 n 0000654576 00000 n 0000654691 00000 n 0000654775 00000 n 0000654872 00000 n 0000654975 00000 n 0000655092 00000 n 0000655198 00000 n 0000655282 00000 n 0000655379 00000 n 0000655482 00000 n 0000655579 00000 n 0000655683 00000 n 0000655787 00000 n 0000655891 00000 n 0000655995 00000 n 0000656093 00000 n 0000656197 00000 n 0000656295 00000 n 0000656399 00000 n 0000656503 00000 n 0000656607 00000 n 0000656705 00000 n 0000656809 00000 n 0000656906 00000 n 0000657009 00000 n 0000657106 00000 n 0000657209 00000 n 0000657306 00000 n 0000657409 00000 n 0000657506 00000 n 0000657609 00000 n 0000657706 00000 n 0000657809 00000 n 0000657907 00000 n 0000658011 00000 n 0000658115 00000 n 0000658213 00000 n 0000658317 00000 n 0000658421 00000 n 0000658525 00000 n 0000658629 00000 n 0000658727 00000 n 0000658831 00000 n 0000658935 00000 n 0000659033 00000 n 0000659137 00000 n 0000659241 00000 n 0000659338 00000 n 0000659441 00000 n 0000659544 00000 n 0000659647 00000 n 0000659750 00000 n 0000659847 00000 n 0000659950 00000 n 0000660047 00000 n 0000660150 00000 n 0000660247 00000 n 0000660351 00000 n 0000660446 00000 n 0000660546 00000 n 0000660644 00000 n 0000660748 00000 n 0000660846 00000 n 0000660950 00000 n 0000661047 00000 n 0000661150 00000 n 0000661247 00000 n 0000661350 00000 n 0000661447 00000 n 0000661550 00000 n 0000661647 00000 n 0000661750 00000 n 0000661853 00000 n 0000661956 00000 n 0000662054 00000 n 0000662158 00000 n 0000662256 00000 n 0000662360 00000 n 0000662464 00000 n 0000662568 00000 n 0000662666 00000 n 0000662770 00000 n 0000662864 00000 n 0000662968 00000 n 0000663141 00000 n 0000663245 00000 n 0000663338 00000 n 0000663441 00000 n 0000663544 00000 n 0000663637 00000 n 0000663740 00000 n 0000663843 00000 n 0000663940 00000 n 0000664043 00000 n 0000664146 00000 n 0000664249 00000 n 0000664353 00000 n 0000664447 00000 n 0000664551 00000 n 0000664655 00000 n 0000664753 00000 n 0000664857 00000 n 0000664961 00000 n 0000665065 00000 n 0000665169 00000 n 0000665322 00000 n 0000665407 00000 n 0000665504 00000 n 0000665607 00000 n 0000665704 00000 n 0000665807 00000 n 0000665910 00000 n 0000666007 00000 n 0000666110 00000 n 0000666204 00000 n 0000666303 00000 n 0000666403 00000 n 0000666507 00000 n 0000666680 00000 n 0000666784 00000 n 0000666884 00000 n 0000666988 00000 n 0000667088 00000 n 0000667192 00000 n 0000667292 00000 n 0000667396 00000 n 0000667496 00000 n 0000667600 00000 n 0000667703 00000 n 0000667802 00000 n 0000667905 00000 n 0000668004 00000 n 0000668107 00000 n 0000668206 00000 n 0000668309 00000 n 0000668408 00000 n 0000668511 00000 n 0000668610 00000 n 0000668714 00000 n 0000668818 00000 n 0000668918 00000 n 0000669022 00000 n 0000669122 00000 n 0000669226 00000 n 0000669326 00000 n 0000669445 00000 n 0000669595 00000 n 0000669687 00000 n 0000669791 00000 n 0000669891 00000 n 0000669995 00000 n 0000670099 00000 n 0000670216 00000 n 0000670322 00000 n 0000670406 00000 n 0000670505 00000 n 0000670608 00000 n 0000670711 00000 n 0000670839 00000 n 0000670945 00000 n 0000671029 00000 n 0000671135 00000 n 0000671219 00000 n 0000671335 00000 n 0000671420 00000 n 0000671520 00000 n 0000671624 00000 n 0000671724 00000 n 0000671828 00000 n 0000671932 00000 n 0000672036 00000 n 0000672140 00000 n 0000672240 00000 n 0000672344 00000 n 0000672444 00000 n 0000672548 00000 n 0000672648 00000 n 0000672752 00000 n 0000672846 00000 n 0000672945 00000 n 0000673044 00000 n 0000673138 00000 n 0000673237 00000 n 0000673334 00000 n 0000673437 00000 n 0000673540 00000 n 0000673643 00000 n 0000673742 00000 n 0000673840 00000 n 0000673944 00000 n 0000674048 00000 n 0000674152 00000 n 0000674250 00000 n 0000674354 00000 n 0000674458 00000 n 0000674555 00000 n 0000674658 00000 n 0000674755 00000 n 0000674858 00000 n 0000674955 00000 n 0000675058 00000 n 0000675162 00000 n 0000675266 00000 n 0000675364 00000 n 0000675468 00000 n 0000675573 00000 n 0000675672 00000 n 0000675777 00000 n 0000675876 00000 n 0000675981 00000 n 0000676077 00000 n 0000676178 00000 n 0000676277 00000 n 0000676382 00000 n 0000676487 00000 n 0000676582 00000 n 0000676687 00000 n 0000676791 00000 n 0000676895 00000 n 0000676989 00000 n 0000677093 00000 n 0000677197 00000 n 0000677291 00000 n 0000677395 00000 n 0000677499 00000 n 0000677597 00000 n 0000677701 00000 n 0000677806 00000 n 0000677911 00000 n 0000678016 00000 n 0000678115 00000 n 0000678220 00000 n 0000678325 00000 n 0000678421 00000 n 0000678522 00000 n 0000678622 00000 n 0000678726 00000 n 0000678826 00000 n 0000678930 00000 n 0000679025 00000 n 0000679125 00000 n 0000679225 00000 n 0000679325 00000 n 0000679420 00000 n 0000679520 00000 n 0000679618 00000 n 0000679722 00000 n 0000679826 00000 n 0000679930 00000 n 0000680035 00000 n 0000680140 00000 n 0000680245 00000 n 0000680345 00000 n 0000680443 00000 n 0000680547 00000 n 0000680645 00000 n 0000680749 00000 n 0000680847 00000 n 0000680951 00000 n 0000681049 00000 n 0000681153 00000 n 0000681257 00000 n 0000681356 00000 n 0000681461 00000 n 0000681566 00000 n 0000681671 00000 n 0000681770 00000 n 0000681875 00000 n 0000681980 00000 n 0000682085 00000 n 0000682184 00000 n 0000682289 00000 n 0000682394 00000 n 0000682489 00000 n 0000682589 00000 n 0000682684 00000 n 0000682784 00000 n 0000682884 00000 n 0000682988 00000 n 0000683088 00000 n 0000683192 00000 n 0000683296 00000 n 0000683391 00000 n 0000683492 00000 n 0000683593 00000 n 0000683694 00000 n 0000683836 00000 n 0000683936 00000 n 0000684036 00000 n 0000684136 00000 n 0000684236 00000 n 0000684336 00000 n 0000684434 00000 n 0000684532 00000 n 0000684689 00000 n 0000684787 00000 n 0000684885 00000 n 0000684984 00000 n 0000685083 00000 n 0000685182 00000 n 0000685281 00000 n 0000685380 00000 n 0000685479 00000 n 0000685578 00000 n 0000685677 00000 n 0000685776 00000 n 0000685875 00000 n 0000685974 00000 n 0000686073 00000 n 0000686172 00000 n 0000686271 00000 n 0000686370 00000 n 0000686469 00000 n 0000686568 00000 n 0000686667 00000 n 0000686766 00000 n 0000686865 00000 n 0000686964 00000 n 0000687063 00000 n 0000687162 00000 n 0000687261 00000 n 0000687360 00000 n 0000687459 00000 n 0000687558 00000 n 0000687657 00000 n 0000687756 00000 n 0000687855 00000 n 0000687954 00000 n 0000688053 00000 n 0000688152 00000 n 0000688250 00000 n 0000688348 00000 n 0000688446 00000 n 0000688544 00000 n 0000688642 00000 n 0000688740 00000 n 0000688867 00000 n 0000688922 00000 n 0000689075 00000 n 0000689170 00000 n 0000689270 00000 n 0000689368 00000 n 0000689472 00000 n 0000689576 00000 n 0000689674 00000 n 0000689778 00000 n 0000689876 00000 n 0000689980 00000 n 0000690078 00000 n 0000690183 00000 n 0000690288 00000 n 0000690387 00000 n 0000690492 00000 n 0000690587 00000 n 0000690692 00000 n 0000690797 00000 n 0000690896 00000 n 0000691001 00000 n 0000691106 00000 n 0000691205 00000 n 0000691310 00000 n 0000691405 00000 n 0000691505 00000 n 0000691605 00000 n 0000691709 00000 n 0000691809 00000 n 0000691913 00000 n 0000692013 00000 n 0000692117 00000 n 0000692217 00000 n 0000692321 00000 n 0000692422 00000 n 0000692527 00000 n 0000692628 00000 n 0000692733 00000 n 0000692834 00000 n 0000692939 00000 n 0000693040 00000 n 0000693145 00000 n 0000693246 00000 n 0000693351 00000 n 0000693455 00000 n 0000693555 00000 n 0000693659 00000 n 0000693759 00000 n 0000693863 00000 n 0000693957 00000 n 0000694061 00000 n 0000694161 00000 n 0000694265 00000 n 0000694360 00000 n 0000694460 00000 n 0000694560 00000 n 0000694660 00000 n 0000694784 00000 n 0000694908 00000 n 0000695067 00000 n 0000695191 00000 n 0000695312 00000 n 0000695369 00000 n 0000695530 00000 n 0000695651 00000 n 0000695708 00000 n 0000695829 00000 n 0000695886 00000 n 0000696008 00000 n 0000696065 00000 n 0000696187 00000 n 0000696244 00000 n 0000696366 00000 n 0000696423 00000 n 0000696545 00000 n 0000696602 00000 n 0000696724 00000 n 0000696781 00000 n 0000696903 00000 n 0000696960 00000 n 0000697082 00000 n 0000697139 00000 n 0000697261 00000 n 0000697318 00000 n 0000697440 00000 n 0000697497 00000 n 0000697619 00000 n 0000697676 00000 n 0000697798 00000 n 0000697855 00000 n 0000697977 00000 n 0000698034 00000 n 0000698197 00000 n 0000698254 00000 n 0000698375 00000 n 0000698432 00000 n 0000698553 00000 n 0000698610 00000 n 0000698731 00000 n 0000698788 00000 n 0000698909 00000 n 0000698966 00000 n 0000699087 00000 n 0000699144 00000 n 0000699265 00000 n 0000699322 00000 n 0000699443 00000 n 0000699500 00000 n 0000699621 00000 n 0000699678 00000 n 0000699799 00000 n 0000699856 00000 n 0000699978 00000 n 0000700035 00000 n 0000700157 00000 n 0000700214 00000 n 0000700336 00000 n 0000700393 00000 n 0000700515 00000 n 0000700572 00000 n 0000700694 00000 n 0000700751 00000 n 0000700873 00000 n 0000700930 00000 n 0000701052 00000 n 0000701109 00000 n 0000701231 00000 n 0000701288 00000 n 0000701410 00000 n 0000701467 00000 n 0000701589 00000 n 0000701646 00000 n 0000701768 00000 n 0000701825 00000 n 0000701947 00000 n 0000702004 00000 n 0000702125 00000 n 0000702182 00000 n 0000702303 00000 n 0000702360 00000 n 0000702481 00000 n 0000702538 00000 n 0000702659 00000 n 0000702716 00000 n 0000702837 00000 n 0000702894 00000 n 0000703015 00000 n 0000703072 00000 n 0000703193 00000 n 0000703250 00000 n 0000703371 00000 n 0000703428 00000 n 0000703549 00000 n 0000703606 00000 n 0000703727 00000 n 0000703784 00000 n 0000703906 00000 n 0000703963 00000 n 0000704085 00000 n 0000704142 00000 n 0000704264 00000 n 0000704321 00000 n 0000704443 00000 n 0000704500 00000 n 0000704622 00000 n 0000704679 00000 n 0000704801 00000 n 0000704858 00000 n 0000704980 00000 n 0000705037 00000 n 0000705159 00000 n 0000705216 00000 n 0000705338 00000 n 0000705395 00000 n 0000705517 00000 n 0000705574 00000 n 0000705737 00000 n 0000705794 00000 n 0000705915 00000 n 0000705972 00000 n 0000706093 00000 n 0000706150 00000 n 0000706271 00000 n 0000706328 00000 n 0000706449 00000 n 0000706506 00000 n 0000706627 00000 n 0000706684 00000 n 0000706805 00000 n 0000706862 00000 n 0000706983 00000 n 0000707040 00000 n 0000707161 00000 n 0000707218 00000 n 0000707339 00000 n 0000707396 00000 n 0000707518 00000 n 0000707575 00000 n 0000707697 00000 n 0000707754 00000 n 0000707876 00000 n 0000707933 00000 n 0000708055 00000 n 0000708112 00000 n 0000708234 00000 n 0000708291 00000 n 0000708413 00000 n 0000708470 00000 n 0000708592 00000 n 0000708649 00000 n 0000708771 00000 n 0000708828 00000 n 0000708991 00000 n 0000709048 00000 n 0000709169 00000 n 0000709226 00000 n 0000709347 00000 n 0000709404 00000 n 0000709525 00000 n 0000709582 00000 n 0000709703 00000 n 0000709760 00000 n 0000709855 00000 n 0000709962 00000 n 0000710043 00000 n 0000710150 00000 n 0000710231 00000 n 0000710338 00000 n 0000710419 00000 n 0000710526 00000 n 0000710607 00000 n 0000710715 00000 n 0000710796 00000 n 0000710891 00000 n 0000710991 00000 n 0000711091 00000 n 0000711186 00000 n 0000711312 00000 n 0000711465 00000 n 0000711557 00000 n 0000711666 00000 n 0000711752 00000 n 0000711870 00000 n 0000711931 00000 n 0000712045 00000 n 0000712132 00000 n 0000712233 00000 n 0000712329 00000 n 0000712430 00000 n 0000712608 00000 n 0000712707 00000 n 0000712812 00000 n 0000712911 00000 n 0000713016 00000 n 0000713114 00000 n 0000713218 00000 n 0000713316 00000 n 0000713420 00000 n 0000713524 00000 n 0000713628 00000 n 0000713726 00000 n 0000713830 00000 n 0000713934 00000 n 0000714032 00000 n 0000714137 00000 n 0000714242 00000 n 0000714341 00000 n 0000714446 00000 n 0000714545 00000 n 0000714650 00000 n 0000714749 00000 n 0000714854 00000 n 0000714953 00000 n 0000715058 00000 n 0000715157 00000 n 0000715262 00000 n 0000715360 00000 n 0000715479 00000 n 0000715588 00000 n 0000715674 00000 n 0000715772 00000 n 0000715876 00000 n 0000715974 00000 n 0000716078 00000 n 0000716176 00000 n 0000716280 00000 n 0000716376 00000 n 0000716477 00000 n 0000716643 00000 n 0000716744 00000 n 0000716845 00000 n 0000716941 00000 n 0000717042 00000 n 0000717143 00000 n 0000717285 00000 n 0000717380 00000 n 0000717480 00000 n 0000717597 00000 n 0000717658 00000 n 0000717773 00000 n 0000717882 00000 n 0000717968 00000 n 0000718068 00000 n 0000718168 00000 n 0000718263 00000 n 0000718364 00000 n 0000718463 00000 n 0000718568 00000 n 0000718667 00000 n 0000718772 00000 n 0000718871 00000 n 0000718976 00000 n 0000719074 00000 n 0000719178 00000 n 0000719276 00000 n 0000719380 00000 n 0000719478 00000 n 0000719582 00000 n 0000719699 00000 n 0000719785 00000 n 0000719883 00000 n 0000719987 00000 n 0000720083 00000 n 0000720184 00000 n 0000720280 00000 n 0000720397 00000 n 0000720506 00000 n 0000720593 00000 n 0000720689 00000 n 0000720790 00000 n 0000720888 00000 n 0000720992 00000 n 0000721092 00000 n 0000721190 00000 n 0000721288 00000 n 0000721386 00000 n 0000721484 00000 n 0000721599 00000 n 0000721708 00000 n 0000721794 00000 n 0000721893 00000 n 0000721992 00000 n 0000722091 00000 n 0000722190 00000 n 0000722289 00000 n 0000722388 00000 n 0000722487 00000 n 0000722583 00000 n 0000722684 00000 n 0000722785 00000 n 0000722927 00000 n 0000723022 00000 n 0000723122 00000 n 0000723220 00000 n 0000723324 00000 n 0000723428 00000 n 0000723526 00000 n 0000723630 00000 n 0000723728 00000 n 0000723832 00000 n 0000723937 00000 n 0000724059 00000 n 0000724117 00000 n 0000724239 00000 n 0000724297 00000 n 0000724419 00000 n 0000724477 00000 n 0000724599 00000 n 0000724657 00000 n 0000724779 00000 n 0000724837 00000 n 0000724959 00000 n 0000725017 00000 n 0000725139 00000 n 0000725197 00000 n 0000725319 00000 n 0000725377 00000 n 0000725499 00000 n 0000725557 00000 n 0000725679 00000 n 0000725737 00000 n 0000725842 00000 n 0000725946 00000 n 0000726050 00000 n 0000726171 00000 n 0000726229 00000 n 0000726350 00000 n 0000726408 00000 n 0000726529 00000 n 0000726587 00000 n 0000726691 00000 n 0000726789 00000 n 0000726893 00000 n 0000726991 00000 n 0000727095 00000 n 0000727200 00000 n 0000727322 00000 n 0000727380 00000 n 0000727502 00000 n 0000727560 00000 n 0000727682 00000 n 0000727740 00000 n 0000727845 00000 n 0000727944 00000 n 0000728049 00000 n 0000728148 00000 n 0000728253 00000 n 0000728358 00000 n 0000728463 00000 n 0000728585 00000 n 0000728641 00000 n 0000728746 00000 n 0000728850 00000 n 0000728954 00000 n 0000729052 00000 n 0000729156 00000 n 0000729260 00000 n 0000729355 00000 n 0000729455 00000 n 0000729570 00000 n 0000729679 00000 n 0000729765 00000 n 0000729866 00000 n 0000729962 00000 n 0000730063 00000 n 0000730162 00000 n 0000730267 00000 n 0000730372 00000 n 0000730476 00000 n 0000730580 00000 n 0000730678 00000 n 0000730782 00000 n 0000730880 00000 n 0000730984 00000 n 0000731082 00000 n 0000731186 00000 n 0000731284 00000 n 0000731388 00000 n 0000731493 00000 n 0000731592 00000 n 0000731697 00000 n 0000731796 00000 n 0000731901 00000 n 0000732006 00000 n 0000732111 00000 n 0000732210 00000 n 0000732315 00000 n 0000732420 00000 n 0000732515 00000 n 0000732620 00000 n 0000732725 00000 n 0000732830 00000 n 0000732935 00000 n 0000733033 00000 n 0000733137 00000 n 0000733241 00000 n 0000733345 00000 n 0000733449 00000 n 0000733553 00000 n 0000733657 00000 n 0000733752 00000 n 0000733852 00000 n 0000733952 00000 n 0000734057 00000 n 0000734158 00000 n 0000734263 00000 n 0000734364 00000 n 0000734469 00000 n 0000734570 00000 n 0000734675 00000 n 0000734770 00000 n 0000734870 00000 n 0000734970 00000 n 0000735065 00000 n 0000735165 00000 n 0000735265 00000 n 0000735363 00000 n 0000735461 00000 n 0000735559 00000 n 0000735657 00000 n 0000735755 00000 n 0000735853 00000 n 0000735951 00000 n 0000736050 00000 n 0000736149 00000 n 0000736248 00000 n 0000736347 00000 n 0000736446 00000 n 0000736545 00000 n 0000736646 00000 n 0000736745 00000 n 0000736844 00000 n 0000736943 00000 n 0000737042 00000 n 0000737141 00000 n 0000737240 00000 n 0000737339 00000 n 0000737438 00000 n 0000737537 00000 n 0000737636 00000 n 0000737735 00000 n 0000737834 00000 n 0000737933 00000 n 0000738034 00000 n 0000738129 00000 n 0000738229 00000 n 0000738324 00000 n 0000738424 00000 n 0000738551 00000 n 0000738606 00000 n 0000738704 00000 n 0000738802 00000 n 0000738900 00000 n 0000738998 00000 n 0000739096 00000 n 0000739195 00000 n 0000739294 00000 n 0000739393 00000 n 0000739492 00000 n 0000739591 00000 n 0000739690 00000 n 0000739789 00000 n 0000739888 00000 n 0000739987 00000 n 0000740086 00000 n 0000740185 00000 n 0000740284 00000 n 0000740383 00000 n 0000740482 00000 n 0000740581 00000 n 0000740680 00000 n 0000740776 00000 n 0000740877 00000 n 0000740976 00000 n 0000741076 00000 n 0000741174 00000 n 0000741272 00000 n 0000741370 00000 n 0000741470 00000 n 0000741568 00000 n 0000741666 00000 n 0000741764 00000 n 0000741862 00000 n 0000741960 00000 n 0000742056 00000 n 0000742157 00000 n 0000742256 00000 n 0000742355 00000 n 0000742460 00000 n 0000742559 00000 n 0000742664 00000 n 0000742769 00000 n 0000742868 00000 n 0000742973 00000 n 0000743078 00000 n 0000743177 00000 n 0000743282 00000 n 0000743387 00000 n 0000743486 00000 n 0000743591 00000 n 0000743696 00000 n 0000743795 00000 n 0000743900 00000 n 0000744004 00000 n 0000744108 00000 n 0000744206 00000 n 0000744310 00000 n 0000744414 00000 n 0000744512 00000 n 0000744616 00000 n 0000744720 00000 n 0000744824 00000 n 0000744922 00000 n 0000745027 00000 n 0000745132 00000 n 0000745237 00000 n 0000745342 00000 n 0000745441 00000 n 0000745546 00000 n 0000745651 00000 n 0000745750 00000 n 0000745855 00000 n 0000745954 00000 n 0000746059 00000 n 0000746164 00000 n 0000746269 00000 n 0000746368 00000 n 0000746472 00000 n 0000746576 00000 n 0000746674 00000 n 0000746778 00000 n 0000746882 00000 n 0000746980 00000 n 0000747084 00000 n 0000747188 00000 n 0000747286 00000 n 0000747390 00000 n 0000747495 00000 n 0000747594 00000 n 0000747699 00000 n 0000747804 00000 n 0000747909 00000 n 0000748008 00000 n 0000748113 00000 n 0000748218 00000 n 0000748317 00000 n 0000748422 00000 n 0000748527 00000 n 0000748632 00000 n 0000748731 00000 n 0000748836 00000 n 0000748941 00000 n 0000749039 00000 n 0000749143 00000 n 0000749247 00000 n 0000749351 00000 n 0000749449 00000 n 0000749553 00000 n 0000749657 00000 n 0000749761 00000 n 0000749859 00000 n 0000749963 00000 n 0000750068 00000 n 0000750173 00000 n 0000750272 00000 n 0000750371 00000 n 0000750467 00000 n 0000750568 00000 n 0000750664 00000 n 0000750765 00000 n 0000750864 00000 n 0000750969 00000 n 0000751068 00000 n 0000751173 00000 n 0000751274 00000 n 0000751369 00000 n 0000751496 00000 n 0000751551 00000 n 0000751649 00000 n 0000751747 00000 n 0000751845 00000 n 0000751943 00000 n 0000752041 00000 n 0000752139 00000 n 0000752237 00000 n 0000752335 00000 n 0000752434 00000 n 0000752533 00000 n 0000752632 00000 n 0000752731 00000 n 0000752830 00000 n 0000752929 00000 n 0000753028 00000 n 0000753127 00000 n 0000753226 00000 n 0000753325 00000 n 0000753424 00000 n 0000753523 00000 n 0000753622 00000 n 0000753750 00000 n 0000753805 00000 n 0000753906 00000 n 0000754007 00000 n 0000754102 00000 n 0000754217 00000 n 0000754326 00000 n 0000754412 00000 n 0000754507 00000 n 0000754622 00000 n 0000754731 00000 n 0000754817 00000 n 0000754932 00000 n 0000755041 00000 n 0000755127 00000 n 0000755227 00000 n 0000755327 00000 n 0000755427 00000 n 0000755533 00000 n 0000755687 00000 n 0000755800 00000 n 0000755954 00000 n 0000756111 00000 n 0000756220 00000 n 0000756306 00000 n 0000756398 00000 n 0000756496 00000 n 0000756665 00000 n 0000756757 00000 n 0000756855 00000 n 0000756947 00000 n 0000757046 00000 n 0000757139 00000 n 0000757279 00000 n 0000757377 00000 n 0000757469 00000 n 0000757567 00000 n 0000757659 00000 n 0000757757 00000 n 0000757849 00000 n 0000757947 00000 n 0000758045 00000 n 0000758143 00000 n 0000758242 00000 n 0000758341 00000 n 0000758439 00000 n 0000758531 00000 n 0000758629 00000 n 0000758727 00000 n 0000758842 00000 n 0000758897 00000 n 0000759012 00000 n 0000759067 00000 n 0000759182 00000 n 0000759237 00000 n 0000759352 00000 n 0000759407 00000 n 0000759505 00000 n 0000759605 00000 n 0000759717 00000 n 0000759810 00000 n 0000759925 00000 n 0000760018 00000 n 0000760163 00000 n 0000760258 00000 n 0000760391 00000 n 0000760485 00000 n 0000760887 00000 n 0000760969 00000 n 0000768939 00000 n 0000769449 00000 n 0000769624 00000 n 0000769706 00000 n 0000769792 00000 n 0000769853 00000 n 0000769912 00000 n 0000769998 00000 n 0000770059 00000 n 0000770118 00000 n 0000770204 00000 n 0000770265 00000 n 0000770324 00000 n 0000770406 00000 n 0000770492 00000 n 0000770553 00000 n 0000770612 00000 n 0000770698 00000 n 0000770759 00000 n 0000770818 00000 n 0000770953 00000 n 0000771014 00000 n 0000771073 00000 n 0000771155 00000 n 0000771241 00000 n 0000771302 00000 n 0000771361 00000 n 0000771447 00000 n 0000771508 00000 n 0000771567 00000 n 0000771739 00000 n 0000771800 00000 n 0000771859 00000 n 0000771941 00000 n 0000772027 00000 n 0000772088 00000 n 0000772147 00000 n 0000772233 00000 n 0000772294 00000 n 0000772353 00000 n 0000772488 00000 n 0000772549 00000 n 0000772608 00000 n 0000772690 00000 n 0000772776 00000 n 0000772837 00000 n 0000772896 00000 n 0000772982 00000 n 0000773043 00000 n 0000773102 00000 n 0000773219 00000 n 0000773280 00000 n 0000773339 00000 n 0000773421 00000 n 0000773507 00000 n 0000773568 00000 n 0000773627 00000 n 0000773713 00000 n 0000773774 00000 n 0000773833 00000 n 0000773950 00000 n 0000774011 00000 n 0000774070 00000 n 0000774152 00000 n 0000774238 00000 n 0000774299 00000 n 0000774358 00000 n 0000774444 00000 n 0000774505 00000 n 0000774564 00000 n 0000774681 00000 n 0000774742 00000 n 0000774801 00000 n 0000774883 00000 n 0000774969 00000 n 0000775030 00000 n 0000775089 00000 n 0000775175 00000 n 0000775236 00000 n 0000775295 00000 n 0000775412 00000 n 0000775473 00000 n 0000775532 00000 n 0000775614 00000 n 0000775700 00000 n 0000775761 00000 n 0000775820 00000 n 0000775906 00000 n 0000775967 00000 n 0000776026 00000 n 0000776198 00000 n 0000776259 00000 n 0000776318 00000 n 0000776400 00000 n 0000776486 00000 n 0000776547 00000 n 0000776606 00000 n 0000776692 00000 n 0000776753 00000 n 0000776812 00000 n 0000776947 00000 n 0000777008 00000 n 0000777067 00000 n 0000777149 00000 n 0000777235 00000 n 0000777296 00000 n 0000777355 00000 n 0000777441 00000 n 0000777502 00000 n 0000777561 00000 n 0000777696 00000 n 0000777757 00000 n 0000777816 00000 n 0000777875 00000 n 0000777934 00000 n 0000778015 00000 n 0000778074 00000 n 0000778133 00000 n 0000778192 00000 n 0000778251 00000 n 0000778310 00000 n 0000778369 00000 n 0000778428 00000 n 0000778487 00000 n 0000778546 00000 n 0000778605 00000 n 0000778664 00000 n 0000778723 00000 n 0000778782 00000 n 0000778841 00000 n 0000778900 00000 n 0000778959 00000 n 0000779018 00000 n 0000779077 00000 n 0000779136 00000 n 0000779195 00000 n 0000779254 00000 n 0000779313 00000 n 0000779372 00000 n 0000779431 00000 n 0000779490 00000 n 0000779598 00000 n 0000779657 00000 n 0000779716 00000 n 0000779775 00000 n 0000779834 00000 n 0000779893 00000 n 0000779952 00000 n 0000780011 00000 n 0000780070 00000 n 0000780129 00000 n 0000780188 00000 n 0000780247 00000 n 0000780306 00000 n 0000780365 00000 n 0000780424 00000 n 0000780483 00000 n 0000780542 00000 n 0000780601 00000 n 0000780660 00000 n 0000780719 00000 n 0000780779 00000 n 0000780838 00000 n 0000780898 00000 n 0000780957 00000 n 0000781017 00000 n 0000781076 00000 n 0000781136 00000 n 0000781195 00000 n 0000781255 00000 n 0000781314 00000 n 0000781374 00000 n 0000781433 00000 n 0000781493 00000 n 0000781552 00000 n 0000781612 00000 n 0000781671 00000 n 0000781731 00000 n 0000781790 00000 n 0000781850 00000 n 0000781909 00000 n 0000781969 00000 n 0000782068 00000 n 0000782128 00000 n 0000782188 00000 n 0000782248 00000 n 0000782308 00000 n 0000782368 00000 n 0000782427 00000 n 0000782487 00000 n 0000782546 00000 n 0000782606 00000 n 0000782665 00000 n 0000782725 00000 n 0000782784 00000 n 0000782844 00000 n 0000782903 00000 n 0000782963 00000 n 0000783022 00000 n 0000783082 00000 n 0000783141 00000 n 0000783201 00000 n 0000783260 00000 n 0000783320 00000 n 0000783379 00000 n 0000783439 00000 n 0000783498 00000 n 0000783558 00000 n 0000783617 00000 n 0000783677 00000 n 0000783736 00000 n 0000783796 00000 n 0000783855 00000 n 0000783915 00000 n 0000783974 00000 n 0000784034 00000 n 0000784093 00000 n 0000784153 00000 n 0000784212 00000 n 0000784272 00000 n 0000784331 00000 n 0000784391 00000 n 0000784450 00000 n 0000784510 00000 n 0000784569 00000 n 0000784629 00000 n 0000784688 00000 n 0000784748 00000 n 0000784807 00000 n 0000784867 00000 n 0000784926 00000 n 0000784986 00000 n 0000785045 00000 n 0000785105 00000 n 0000785164 00000 n 0000785224 00000 n 0000785283 00000 n 0000785343 00000 n 0000785402 00000 n 0000785462 00000 n 0000785521 00000 n 0000785581 00000 n 0000785640 00000 n 0000785700 00000 n 0000785759 00000 n 0000785819 00000 n 0000785878 00000 n 0000785938 00000 n 0000785997 00000 n 0000786057 00000 n 0000786116 00000 n 0000786176 00000 n 0000786235 00000 n 0000786295 00000 n 0000786354 00000 n 0000786414 00000 n 0000786512 00000 n 0000786610 00000 n 0000786705 00000 n 0000786835 00000 n 0000786890 00000 n 0000787206 00000 n 0000787327 00000 n 0000787659 00000 n 0000788471 00000 n 0000788541 00000 n 0000788611 00000 n 0000788681 00000 n 0000788751 00000 n 0000788821 00000 n 0000788891 00000 n 0000788961 00000 n 0000789031 00000 n 0000789101 00000 n 0000789171 00000 n 0000789241 00000 n 0000789311 00000 n 0000789381 00000 n 0000789451 00000 n 0000789521 00000 n 0000789591 00000 n 0000789661 00000 n 0000789731 00000 n 0000789801 00000 n 0000789871 00000 n 0000789941 00000 n 0000790011 00000 n 0000790081 00000 n 0000790151 00000 n 0000790221 00000 n 0000790291 00000 n 0000790361 00000 n 0000790431 00000 n 0000790501 00000 n 0000790571 00000 n 0000790641 00000 n 0000790711 00000 n 0000790781 00000 n 0000790851 00000 n 0000790921 00000 n 0000790991 00000 n 0000791061 00000 n 0000791131 00000 n 0000791201 00000 n 0000791271 00000 n 0000791341 00000 n 0000791411 00000 n 0000791481 00000 n 0000791551 00000 n 0000791621 00000 n 0000791691 00000 n 0000791761 00000 n 0000791831 00000 n 0000791901 00000 n 0000792802 00000 n 0000792872 00000 n 0000792942 00000 n 0000793012 00000 n 0000793082 00000 n 0000793152 00000 n 0000793222 00000 n 0000793292 00000 n 0000793362 00000 n 0000793432 00000 n 0000793502 00000 n 0000793572 00000 n 0000793642 00000 n 0000793712 00000 n 0000793782 00000 n 0000793852 00000 n 0000793922 00000 n 0000793992 00000 n 0000794062 00000 n 0000794132 00000 n 0000794202 00000 n 0000794272 00000 n 0000794342 00000 n 0000794412 00000 n 0000794482 00000 n 0000794552 00000 n 0000794622 00000 n 0000794692 00000 n 0000794762 00000 n 0000794832 00000 n 0000794902 00000 n 0000794972 00000 n 0000795042 00000 n 0000795112 00000 n 0000795182 00000 n 0000795252 00000 n 0000795322 00000 n 0000795392 00000 n 0000795462 00000 n 0000795532 00000 n 0000795602 00000 n 0000795672 00000 n 0000795742 00000 n 0000795812 00000 n 0000795882 00000 n 0000795952 00000 n 0000796022 00000 n 0000796092 00000 n 0000796162 00000 n 0000796232 00000 n 0000796302 00000 n 0000796372 00000 n 0000796442 00000 n 0000796512 00000 n 0000796582 00000 n 0000796687 00000 n 0000796757 00000 n 0000796827 00000 n 0000796897 00000 n 0000797042 00000 n 0000797112 00000 n 0000797182 00000 n 0000797252 00000 n 0000797357 00000 n 0000797462 00000 n 0000797567 00000 n 0000797680 00000 n 0000797750 00000 n 0000798017 00000 n 0000798087 00000 n 0000798157 00000 n 0000798227 00000 n 0000798297 00000 n 0000798367 00000 n 0000798437 00000 n 0000798507 00000 n 0000798577 00000 n 0000798730 00000 n 0000798932 00000 n 0000799002 00000 n 0000799072 00000 n 0000799274 00000 n 0000799344 00000 n 0000799562 00000 n 0000799724 00000 n 0000799918 00000 n 0000800112 00000 n 0000800182 00000 n 0000800376 00000 n 0000800603 00000 n 0000800673 00000 n 0000800908 00000 n 0000800978 00000 n 0000801048 00000 n 0000801118 00000 n 0000801188 00000 n 0000801350 00000 n 0000801568 00000 n 0000801756 00000 n 0000801816 00000 n 0000801958 00000 n 0000802173 00000 n 0000802324 00000 n 0000802740 00000 n 0000802827 00000 n 0000803051 00000 n 0000803257 00000 n 0000803363 00000 n 0000803596 00000 n 0000803820 00000 n 0000804035 00000 n 0000804232 00000 n 0000804356 00000 n 0000804562 00000 n 0000804632 00000 n 0000804702 00000 n 0000804772 00000 n 0000804996 00000 n 0000805184 00000 n 0000805254 00000 n 0000805433 00000 n 0000805853 00000 n 0000806646 00000 n 0000806716 00000 n 0000806904 00000 n 0000806974 00000 n 0000807044 00000 n 0000807259 00000 n 0000807329 00000 n 0000807553 00000 n 0000807786 00000 n 0000807956 00000 n 0000808026 00000 n 0000808278 00000 n 0000808457 00000 n 0000808508 00000 n 0000808814 00000 n 0000809102 00000 n 0000809390 00000 n 0000809633 00000 n 0000809885 00000 n 0000810118 00000 n 0000810379 00000 n 0000810439 00000 n 0000810509 00000 n 0000810615 00000 n 0000810685 00000 n 0000810755 00000 n 0000810897 00000 n 0000810967 00000 n 0000811100 00000 n 0000811215 00000 n 0000811316 00000 n 0000811988 00000 n 0000812011 00000 n 0000812401 00000 n 0000812424 00000 n 0000812912 00000 n 0000812935 00000 n 0000813421 00000 n 0000813444 00000 n 0000813685 00000 n 0000813707 00000 n 0000813913 00000 n 0000813935 00000 n 0000814359 00000 n 0000814382 00000 n 0000814942 00000 n 0000814965 00000 n 0000815616 00000 n 0000815639 00000 n 0000816246 00000 n 0000816269 00000 n 0000816852 00000 n 0000816875 00000 n 0000817470 00000 n 0000817493 00000 n 0000818045 00000 n 0000818068 00000 n 0000818633 00000 n 0000818656 00000 n 0000819248 00000 n 0000819271 00000 n 0000819780 00000 n 0000819803 00000 n 0000820354 00000 n 0000820377 00000 n 0000820896 00000 n 0000820919 00000 n 0000821491 00000 n 0000821514 00000 n 0000822014 00000 n 0000822037 00000 n 0000822561 00000 n 0000822584 00000 n 0000823129 00000 n 0000823152 00000 n 0000823679 00000 n 0000823702 00000 n 0000824212 00000 n 0000824235 00000 n 0000824770 00000 n 0000824793 00000 n 0000825086 00000 n 0000825109 00000 n 0000825684 00000 n 0000825707 00000 n 0000826200 00000 n 0000826223 00000 n 0000826774 00000 n 0000826797 00000 n 0000827256 00000 n 0000827279 00000 n 0000827550 00000 n 0000827573 00000 n 0000828028 00000 n 0000828051 00000 n 0000828575 00000 n 0000828598 00000 n 0000829013 00000 n 0000829036 00000 n 0000829459 00000 n 0000829482 00000 n 0000829826 00000 n 0000829849 00000 n 0000830198 00000 n 0000830221 00000 n 0000830574 00000 n 0000830597 00000 n 0000831093 00000 n 0000831116 00000 n 0000831670 00000 n 0000831693 00000 n 0000832222 00000 n 0000832245 00000 n 0000832842 00000 n 0000832865 00000 n 0000833425 00000 n 0000833448 00000 n 0000834012 00000 n 0000834035 00000 n 0000834586 00000 n 0000834609 00000 n 0000835171 00000 n 0000835194 00000 n 0000835710 00000 n 0000835733 00000 n 0000836333 00000 n 0000836356 00000 n 0000836832 00000 n 0000836855 00000 n 0000837367 00000 n 0000837390 00000 n 0000837694 00000 n 0000837717 00000 n 0000838116 00000 n 0000838139 00000 n 0000838623 00000 n 0000838646 00000 n 0000839160 00000 n 0000839183 00000 n 0000839740 00000 n 0000839763 00000 n 0000840279 00000 n 0000840302 00000 n 0000840777 00000 n 0000840800 00000 n 0000841174 00000 n 0000841197 00000 n 0000841507 00000 n 0000841530 00000 n 0000841913 00000 n 0000841936 00000 n 0000842568 00000 n 0000842591 00000 n 0000843179 00000 n 0000843202 00000 n 0000843560 00000 n 0000843583 00000 n 0000843606 00000 n 0000844186 00000 n 0000844243 00000 n 0000844276 00000 n 0000844324 00000 n 0000844595 00000 n 0000845829 00000 n 0000845986 00000 n 0000846111 00000 n 0000846272 00000 n 0000846433 00000 n 0000846594 00000 n 0000846755 00000 n 0000846916 00000 n trailer << /Size 2472 /ID[<8855eb7537a4c644e860460f14b83278>] >> startxref 173 %%EOF egenix-mx-base-3.2.7/mx/DateTime/Examples/0000755000175000017500000000000012251446113020105 5ustar lemburglemburgegenix-mx-base-3.2.7/mx/DateTime/Examples/AtomicClock.py0000664000175000017500000000311011354420326022645 0ustar lemburglemburg#!/usr/local/bin/python -u """ AtomicClock.py - Access the NIST standard time service. The script will output the current time together with a marker indicating the source of information (NIST = genuine NIST signal, [NIST] = NIST calibrated CPU clock, CPU = uncalibrated CPU clock). You can call this script with a calibration float as parameter. It will then be set as calibration for the NIST module to use. """ import sys import mx.DateTime.NIST import mx.DateTime from time import sleep if len(sys.argv) == 2: try: mx.DateTime.NIST.set_calibration(float(sys.argv[1])) except ValueError: pass def run(): print 'Calibrating ...\r', while 1: if mx.DateTime.NIST.calibrating and mx.DateTime.NIST.online(): # Using the real thing marker = 'NIST' elif mx.DateTime.NIST.calibrated: # Using calibrated CPU clock marker = '[NIST]' else: # Using the uncalibrated CPU clock marker = 'CPU' # Get and show time utc = mx.DateTime.NIST.utctime() print ' %-6s Local: %s | UTC: %s | %+6.2fs\r' % \ (marker,mx.DateTime.utc2local(utc),utc, mx.DateTime.NIST.calibration), sys.stdout.flush() sleep(1) # Recalibrate every 10 minutes if utc.minute % 10 == 0: mx.DateTime.NIST.reset_auto_calibration() if __name__ == '__main__': try: run() except KeyboardInterrupt: print print 'Current CPU clock calibration:',mx.DateTime.NIST.calibration egenix-mx-base-3.2.7/mx/DateTime/Examples/CommandLine.py0000664000175000017500000005300311564465601022661 0ustar lemburglemburg""" CommandLine - Get and parse command line options NOTE: This still is very much work in progress !!! Different version are likely to be incompatible. TODO: * Incorporate the changes made by (see Inbox) * Add number range option using srange() """ __copyright__ = """\ Copyright (c), 1997-2000, IKDS Marc-Andre Lemburg (mal@lemburg.com) Copyright (c), 2000-2009, eGenix.com Software GmbH (info@egenix.com) See the documentation for further information on copyrights, or contact the author. All Rights Reserved. """ __version__ = '1.3' import sys, getopt, glob, os, re, exceptions, traceback # For Python < 2.2 compatibility: try: True except NameError: True = 1 False = 0 ### Helpers def _getopt_flags(options): """ Convert the option list to a getopt flag string and long opt list """ s = [] l = [] for o in options: if o.prefix == '-': # short option s.append(o.name) if o.takes_argument: s.append(':') else: # long option if o.takes_argument: l.append(o.name+'=') else: l.append(o.name) return ''.join(s),l def invisible_input(prompt='>>> '): """ Get raw input from a terminal without echoing the characters to the terminal, e.g. for password queries. """ import getpass entry = getpass.getpass(prompt) if entry is None: raise KeyboardInterrupt return entry def fileopen(name, mode='wb', encoding=None): """ Open a file using mode. Default mode is 'wb' meaning to open the file for writing in binary mode. If encoding is given, I/O to and from the file is transparently encoded using the given encoding. Files opened for writing are chmod()ed to 0600. """ if name == 'stdout': return sys.stdout elif name == 'stderr': return sys.stderr elif name == 'stdin': return sys.stdin else: if encoding is not None: import codecs f = codecs.open(name, mode, encoding) else: f = open(name, mode) if 'w' in mode: os.chmod(name, 0600) return f def option_dict(options): """ Return a dictionary mapping option names to Option instances. """ d = {} for option in options: d[option.name] = option return d def parse_optionstring(optionstring): """ Split the optionstring into a tuple (prefix, name). """ if not optionstring[:1] == '-': raise TypeError,'option strings must start with "-"' if optionstring[:2] == '--': prefix = '--' name = optionstring[2:] else: prefix = '-' name = optionstring[1:] return prefix, name # Alias getpasswd = invisible_input _integerRE = re.compile('\s*(-?\d+)\s*$') _integerRangeRE = re.compile('\s*(-?\d+)\s*-\s*(-?\d+)\s*$') def srange(s, integer=_integerRE, integerRange=_integerRangeRE): """ Converts a textual representation of integer numbers and ranges to a Python list. Supported formats: 2,3,4,2-10,-1 - -3, 5 - -2 Values are appended to the created list in the order specified in the string. """ l = [] append = l.append for entry in s.split(','): m = integer.match(entry) if m: append(int(m.groups()[0])) continue m = integerRange.match(entry) if m: start,end = map(int,m.groups()) l[len(l):] = range(start,end+1) return l def abspath(path, expandvars=os.path.expandvars,expanduser=os.path.expanduser, join=os.path.join,getcwd=os.getcwd): """ Return the corresponding absolute path for path. path is expanded in the usual shell ways before joining it with the current working directory. """ try: path = expandvars(path) except AttributeError: pass try: path = expanduser(path) except AttributeError: pass return join(getcwd(), path) ### Option classes class Option: """ Option base class. Takes no argument. """ default = None helptext = '' prefix = '-' takes_argument = 0 has_default = 0 tab = 15 def __init__(self, optionstring, help=None): self.prefix, self.name = parse_optionstring(optionstring) if help: self.help = help def __str__(self): o = self name = o.prefix + o.name if o.takes_argument: name = name + ' arg' if len(name) > self.tab: name = name + '\n' + ' ' * (self.tab + 1 + len(o.prefix)) else: name = '%-*s ' % (self.tab, name) description = o.help if o.has_default: description = description + ' (%s)' % o.default return '%s %s' % (name, description) def get_optionstring(self): return self.prefix + self.name class ArgumentOption(Option): """ Option that takes an argument. An optional default argument can be given. """ def __init__(self,name,help=None,default=None): # Basemethod Option.__init__(self,name,help) if default is not None: self.default = default self.has_default = 1 self.takes_argument = 1 class SwitchOption(Option): """ Options that can be on or off. Has an optional default value. """ def __init__(self,name,help=None,default=None): # Basemethod Option.__init__(self,name,help) if default is not None: self.default = default self.has_default = 1 ### Application baseclass class Application: """ Command line application interface with builtin argument parsing. """ # Options the program accepts (Option instances) options = [] # Standard settings; these are appended to options in __init__ preset_options = [SwitchOption('-v', 'generate verbose output'), SwitchOption('--verbose', 'generate verbose output'), SwitchOption('-h', 'show this help text'), SwitchOption('--help', 'show this help text'), SwitchOption('--yes', 'answer yes to all confirmations'), SwitchOption('--debug', 'enable debugging'), SwitchOption('--copyright', 'show copyright'), SwitchOption('--examples', 'show examples of usage')] # The help layout looks like this: # [header] - defaults to '' # # [synopsis] - formatted as ' %s' % self.synopsis # # options: # [options] - formatted from self.options # # [version] - formatted as 'Version:\n %s' % self.version, if given # # [about] - defaults to '' # # Note: all fields that do not behave as template are formatted # using the instances dictionary as substitution namespace, # e.g. %(name)s will be replaced by the applications name. # # Header (default to program name) header = '' # Name (defaults to program name) name = '' # Synopsis (%(name)s is replaced by the program name) synopsis = '%(name)s [option] files...' # Version (optional) version = '' # General information printed after the possible options (optional) about = '' # Examples of usage to show when the --examples option is given (optional) examples = '' # Copyright to show copyright = __copyright__ # Apply file globbing ? globbing = 1 # Generate debug output ? debug = 0 # Generate verbose output ? verbose = 0 # Internal errors to catch InternalError = exceptions.Exception # Text to display if the user has not provided an entry value for # a required field missing_entry_text = 'missing entry' # Text to display if the user has entered an unsupported value wrong_entry_text = 'please only use the shown values' # Answer yes to all questions ? answer_yes = False # Instance variables: values = None # Dictionary of passed options (or default values) # indexed by the options name, e.g. '-h' files = None # List of passed filenames optionlist = None # List of passed options optionmap = None # Dictionary mapping option name to Option instance def __init__(self,argv=None): # Setup application specs if argv is None: argv = sys.argv self.filename = os.path.split(argv[0])[1] if not self.name: self.name = os.path.split(self.filename)[1] else: self.name = self.name if not self.header: self.header = self.name else: self.header = self.header # Init .arguments list self.arguments = argv[1:] # Setup Option mapping self.optionmap = option_dict(self.options) # Append preset options for option in self.preset_options: if not self.optionmap.has_key(option.name): self.add_option(option) # Init .files list self.files = [] # Start Application try: try: # Process startup rc = self.startup() if rc is not None: raise SystemExit,rc # Parse command line rc = self.parse() if rc is not None: raise SystemExit,rc # Start application rc = self.main() if rc is None: rc = 0 except SystemExit,rc: pass except KeyboardInterrupt: print print '* User Break' print rc = 1 except self.InternalError: print print '* Internal Error:' if self.verbose or self.debug: print traceback.print_exc(20, sys.stdout) else: print print ' %s: %s' % sys.exc_info()[:2] print print ' (use --debug to see the traceback)' print rc = 1 finally: new_rc = self.finished(rc) if new_rc is not None: rc = new_rc raise SystemExit,rc def add_option(self, option): """ Add a new Option instance to the Application dynamically. Note that this has to be done *before* .parse() is being executed. """ self.options.append(option) self.optionmap[option.name] = option def startup(self): """ Set user defined instance variables. If this method returns anything other than None, the process is terminated with the return value as exit code. """ return None def finished(self, rc): """ The program has finished with exit code rc. This method is always called at the end of script execution. An exit code of 0 means: no problems. All other exit codes refer to error situations. If this method returns anything other than None, the process is terminated with the return value as exit code (replacing the original exit code). """ return None def exit(self, rc=0): """ Exit the program. rc is used as exit code and passed back to the calling program. It defaults to 0 which usually means: OK. """ raise SystemExit, rc def parse(self): """ Parse the command line and fill in self.values and self.files. After having parsed the options, the remaining command line arguments are interpreted as files and passed to .handle_files() for processing. As final step the option handlers are called in the order of the options given on the command line. """ # Parse arguments self.values = values = {} for o in self.options: if o.has_default: values[o.prefix+o.name] = o.default else: values[o.prefix+o.name] = 0 flags,lflags = _getopt_flags(self.options) try: optlist,files = getopt.getopt(self.arguments,flags,lflags) if self.globbing: l = [] for f in files: gf = glob.glob(f) if not gf: l.append(f) else: l[len(l):] = gf files = l self.optionlist = optlist self.files = files + self.files except getopt.error,why: self.help(why) sys.exit(1) # Call file handler rc = self.handle_files(self.files) if rc is not None: sys.exit(rc) # Call option handlers for optionstring, value in optlist: # Get Option instance optionprefix, optionname = parse_optionstring(optionstring) option = self.optionmap[optionname] # Try to convert value to integer try: value = int(value) except ValueError: pass # Find handler and call it (or count the number of option # instances on the command line) handlername = 'handle' + optionstring.replace('-', '_') try: handler = getattr(self, handlername) except AttributeError: if value == '': # count the number of occurances if values.has_key(optionstring): values[optionstring] = values[optionstring] + 1 else: values[optionstring] = 1 else: values[optionstring] = value if self.debug: print ('no option handler found for %r, ' 'recorded value %r' % (optionstring, values[optionstring])) else: if option.takes_argument: if self.debug: print ('calling option handler %s(%r)' % (handlername, value)) rc = handler(value) else: if self.debug: print ('calling option handler %s()' % (handlername,)) rc = handler() if rc is not None: raise SystemExit, rc # Apply final file check (for backward compatibility) rc = self.check_files(self.files) if rc is not None: sys.exit(rc) def check_files(self, filelist): """ Apply some user defined checks on the files given in filelist. This may modify filelist in place. A typical application is checking that at least n files are given. If this method returns anything other than None, the process is terminated with the return value as exit code. """ return None def help(self, note=''): self.print_header() if self.synopsis: print 'Synopsis:' # To remain backward compatible: try: synopsis = self.synopsis % self.name except (NameError, KeyError, TypeError): synopsis = self.synopsis % self.__dict__ print ' ' + synopsis print self.print_options() if self.version: print 'Version:' print ' %s' % self.version print if self.about: print (self.about % self.__dict__).strip() print if note: print '-'*72 print 'Note:',note print def notice(self, note): print '-'*72 print 'Note:',note print '-'*72 print def print_header(self): print '-'*72 print self.header % self.__dict__ print '-'*72 print def print_options(self): options = self.options print 'Options and default settings:' if not options: print ' None' return long = filter(lambda x: x.prefix == '--', options) short = filter(lambda x: x.prefix == '-', options) items = short + long for o in options: print ' ',o print def ask(self, prompt, default=None, hidden=False): """ Ask the user for a string data entry. prompt is shown to the user. If default is given as string, the user can accept the default value by hitting return. The default value is displayed to the user after the prompt string. If no default is given, a value must be entered by the user. If he doesn't enter a value, the prompt is redisplayed. If hidden is true (default is false), the data entry is not displayed on the terminal. This is useful for password entries. """ while True: # Show prompt and default value (if any) if default: print '%s [%s]' % (prompt, default), else: print '%s' % prompt, # Get entry if hidden: entry = invisible_input(' ') else: entry = raw_input() # Check entry if entry: break else: if default is None: print '%s ... %s' % (prompt, self.missing_entry_text) continue else: entry = default break return entry def confirm(self, prompt, default=False, answers=('no', 'yes')): """ Get user confirmation. The prompt is shown to the user and he is asked to enter one of the possible answers. Returns a boolean with the answer. True means: the user accepted, False: the user did not confirm. default defines the default value to use in case the user does not provide an answer and just hits enter. answers defines the answers to accept. It must be given as tuple (no_value, yes_value). Defaults to ('no', 'yes'). Case does not matter when entering the answer. """ if self.answer_yes: return True default_answer = answers[default] lower_cased_answers = [answer.lower() for answer in answers] while True: entry = self.ask(prompt + ' (%s/%s)' % answers, default_answer) entry = entry.strip().lower() if entry not in lower_cased_answers: print '%s ... %s' % (prompt, self.wrong_entry_text) continue return entry == lower_cased_answers[True] # # Example handlers: # # If a handler returns anything other than None, processing stops # and the return value is passed to sys.exit() as argument. # # File handler def handle_files(self, files): """ This may process the files list in place. """ return None # Short option handler def handle_h(self, arg=None): self.help() return 0 def handle_v(self, value=None): """ Turn on verbose output. """ self.verbose = 1 # Handlers for long options have two underscores in their name def handle__help(self, arg=None): self.help() return 0 def handle__verbose(self, value=None): """ Turn on verbose output. """ self.verbose = 1 def handle__debug(self, arg=None): self.debug = 1 # We don't want to catch internal errors: self.InternalError = None def handle__copyright(self, arg=None): self.print_header() print (self.copyright % self.__dict__).strip() print return 0 def handle__examples(self, arg=None): self.print_header() if self.examples: print 'Examples:' print print (self.examples % self.__dict__).strip() print else: print 'No examples available.' print return 0 def handle__yes(self, dummy=None): self.answer_yes = True def main(self): """ Override this method as program entry point. The return value is passed to sys.exit() as argument. If it is None, 0 is assumed (meaning OK). Unhandled exceptions are reported with exit status code 1 (see __init__ for further details). """ return None # Alias CommandLine = Application def _test(): class MyApplication(Application): header = 'Test Application' version = __version__ options = [Option('-v','verbose')] def handle_v(self,arg): print 'VERBOSE, Yeah !' cmd = MyApplication() if not cmd.values['-h']: cmd.help() print 'files:',cmd.files print 'Bye...' if __name__ == '__main__': _test() egenix-mx-base-3.2.7/mx/DateTime/Examples/Y2000.py0000664000175000017500000000061707315370424021205 0ustar lemburglemburg#!/usr/local/bin/python -u """ Y2000.py - The year 2000 countdown. """ from mx.DateTime import * from time import sleep import sys while 1: d = Date(2000,1,1) - now() if d.days < 0: print 'Y2000... made it !' break print 'Y2000... time left: %2i days %2i hours %2i minutes %2i seconds\r'%\ (d.day,d.hour,d.minute,d.second), sys.stdout.flush() sleep(1) egenix-mx-base-3.2.7/mx/DateTime/Examples/__init__.py0000664000175000017500000000000007315370424022214 0ustar lemburglemburgegenix-mx-base-3.2.7/mx/DateTime/Examples/alarm.py0000775000175000017500000000270110723776501021571 0ustar lemburglemburg#!/usr/local/bin/python -u """ Simple Forking Alarm Sample Application for DateTime types and CommandLine. Only works on OSes which support os.fork(). Author: Marc-Andre Lemburg, mailto:mal@lemburg.com """ import time,sys,os from mx.DateTime import * from mx.Misc.CommandLine import Application,ArgumentOption class Alarm(Application): header = "Simple Forking Alarm" options = [ArgumentOption('-s', 'set the alarm to now + arg seconds'), ArgumentOption('-m', 'set the alarm to now + arg minutes'), ArgumentOption('-a', 'set the alarm to ring at arg (hh:mm)'), ] version = '0.1' def main(self): atime = now() + (self.values['-s'] or self.values['-m'] * 60 or self.values['-h'] * 3600) * oneSecond abs = self.values['-a'] if abs: atime = strptime(abs,'%H:%M',today(second=0)) if atime < now(): print 'Alarm time has expired...' return print 'Alarm will ring at',atime if not os.fork(): time.sleep((atime - now()).seconds) alarm() os._exit(0) def alarm(): """ Ring alarm """ for i in range(10): sys.stdout.write('\007') sys.stdout.flush() time.sleep(0.2) if __name__ == '__main__': Alarm() egenix-mx-base-3.2.7/mx/DateTime/Examples/lifespan.py0000664000175000017500000000105511564465333022276 0ustar lemburglemburg""" Calculate some informations about lifespans. """ from mx.DateTime import * import sys # Get data from user print 'Please enter your birthday (year,month,day), e.g. 1969,12,1:' try: year,month,day = input('>>> ') except: print '* Sorry, wrong entry.' sys.exit() print # Output the lifespan in different formats birthday = Date(year,month,day) lifespan = now() - birthday print 'Lifespan:' print ' =',lifespan.days,'days' print ' =',int(lifespan / (29.53 * oneDay)),'moons (+/- 1)' print ' =',lifespan / (365.2422 * oneDay),'tropical years' egenix-mx-base-3.2.7/mx/DateTime/Examples/numdate.py0000664000175000017500000002255307471006440022130 0ustar lemburglemburg# numdate.py """ The functions in this module are useful for data entry or bulk data import, where dates are in an all-numeric format. Because of the possibility that the user might type the wrong thing in a numeric field, or a data file might contain other data or garbage where a date is expected, it is desirable to return None or raise an exception when an invalid expression is encountered. Dates can be in any of these formats: ymd, dmy, or mdy with any single-character nondigit separator, two- or four-digit year, and one- or two-digit month and day; or they can be in all-digits ymd format with no separator, four-digit year, and two-digit month and day (e.g. 20010803). In accordance with ISO 8601, two-digit years in all-numeric dates are interpreted as referring to the current century. Synopsis: DateTime = numericDateTime(datetimestring, formats='ymd mdy dmy')) Return value is based on date and (if any) time data in the string. DateTime = numericDate(datestring, formats='ymd mdy dmy')) Return value is based on date data in the string. DateTimeDelta = numericTime(timestring) Return value is based on time data in the string. 20010804 JJD Created, borrowing some regular expressions and ideas from mxDateTime's Parser module. 20020404 JJD Fixed _THIS_CENTURY to use 100-year century (not 1000). Donated to eGenix for mxDateTime """ from mx import DateTime import re # RE's can be simple if the dates are all-numeric # A year, month, or day is some number of digits not preceded by # or followed by a digit or a colon. _year = r'(?P(?(?(? group is used in a way to guarantee that the same # separator character is used twice in the date expression. _ymd = _year + r'(?P\D)' + _month + r'(?P=sep)' + _day + r'(?!\d)' _dmy = _day + r'(?P\D)' + _month + r'(?P=sep)' + _year + r'(?!\d)' _mdy = _month + r'(?P\D)' + _day + r'(?P=sep)' + _year + r'(?!\d)' _ymdRE = re.compile(_ymd, re.I) _dmyRE = re.compile(_dmy, re.I) _mdyRE = re.compile(_mdy, re.I) _formatdict = {'ymd':_ymdRE, 'dmy':_dmyRE, 'mdy':_mdyRE} _hour = r'(?P[012]?\d)' _minute = r'(?P[0-6]\d)' _second = r'(?P[0-6]\d(?:\.\d+)?)' _time = _hour + r':' + _minute + r'(?::' + _second + r')?' _timeRE = re.compile(_time, re.I) # Use divmod to avoid Guido's evil plot to break integer division _THIS_CENTURY = 100*divmod(DateTime.now().year, 100)[0] def _iso_add_century(year): """ According to ISO 8601, a two-digit year in an all-numeric date expression refers to the current century. If year has exactly two digits, add the century. Otherwise, return it unchanged. """ if 0 <= year < 100: result = year + _THIS_CENTURY else: result = year return result def numericDate(s, formats='ymd mdy dmy'): """ If the input string s is a valid numeric date expression according to one of the formats given, return a DateTime object with default time components. Date formats, separated by a single space character, are packed into a string. If only one date format is given, raise a ValueError if the string cannot be interpreted, and raise a DateTime RangeError if it can be interpreted but is not a valid date. If more than one date format is given, try each of them in order until a valid interpretation is found. If the string does not represent a valid date, return None. You can use one format twice (e.g. ['ymd', 'ymd']) to test only one format but suppress exceptions. """ if s is None: return None dt = None formatlist = formats.split() exceptions_ok = (len(formatlist) == 1) _s = str(s).strip() len_s = len(_s) if (len_s in (6, 8)) and s.isdigit(): # Accept yyyymmdd or yymmdd k0 = len_s - 4; k1 = k0 + 2; k2 = k1 + 2 yy = _iso_add_century(int(_s[0:k0])) mm = int(_s[k0:k1]) dd = int(_s[k1:k2]) try: dt = DateTime.DateTime(yy, mm, dd) except DateTime.RangeError, why: dt = None if exceptions_ok: raise DateTime.RangeError, "'%s' invalid: %s" % (_s, why) else: # Try the given formats in order for format in formatlist: format_re = _formatdict[format.lower()] match = format_re.search(_s) if match is None: continue year = match.group('year') month = match.group('month') day = match.group('day') yy = _iso_add_century(int(year)) mm = int(month) dd = int(day) try: dt = DateTime.DateTime(yy, mm, dd) except DateTime.RangeError, why: dt = None if exceptions_ok: raise DateTime.RangeError, "'%s' invalid: %s" % (_s, why) if dt is not None: break if dt is None and exceptions_ok: raise ValueError, "unrecognized date format: '%s'" % _s return dt def numericTime(s): """ If the input string s is a valid time expression of the form hh:mm:ss.sss or hh:mm:ss or hh:mm, return a corresponding DateTimeDelta object. Otherwise, return None. """ if s is None: return None dt = None match = _timeRE.search(s) if match is not None: hour = match.group('hour') minute = match.group('minute') second = match.group('second') hh = int(hour); mm = int(minute) if second: ss = float(second) else: ss = 0.0 try: dt = DateTime.DateTimeDelta(0, hh, mm, ss) except DateTime.RangeError: dt = None return dt def numericDateTime(s, formats='ymd mdy dmy'): # Return a DateTime object or None, incorporating time data # if included in the string. If only one format is given, # and if the string is not a valid date-time expression # according to that format, raise an exception. if s is None: return None # ISO date-time may have T separating date and time _s = str(s).strip().replace('T', ' ') date_time = _s.split() d = numericDate(date_time[0], formats) if d is not None and len(date_time) > 1: t = numericTime(date_time[1]) if t is not None: d = d + t return d def _test_it(testcase, formats, timeonly=0): result = None if timeonly: try: dtd0 = numericTime(testcase[0]) if dtd0 != testcase[1]: result = "Error: '%s' --> %s" % (testcase[0], repr(dtd0)) except Exception, e: result = "Error: '%s' -- %s" % (testcase[0], str(e)) else: try: dt0 = numericDateTime(testcase[0], formats) if dt0 != testcase[1]: result = "Error: '%s' --> %s" % (testcase[0], repr(dt0)) except Exception, e: result = "Error: '%s' -- %s" % (testcase[0], str(e)) return result def test(formats='ymd mdy dmy'): from time import clock testcases = [ \ # Time expressions ("12:13:14.56", DateTime.DateTimeDelta(0, 12, 13, 14.56)), ("12:13:14", DateTime.DateTimeDelta(0, 12, 13, 14)), ("12:13", DateTime.DateTimeDelta(0, 12, 13, 0)), # Date or date-time expressions (mostly) ("Ceci n'est pas une date", None), ("010803", DateTime.DateTime(2001, 8, 3)), ("20010803", DateTime.DateTime(2001, 8, 3)), ("20010803 12:13:14.56", DateTime.DateTime(2001, 8, 3, 12, 13, 14.56)), ("20010803T12:13:14.56", DateTime.DateTime(2001, 8, 3, 12, 13, 14.56)), ("01-08-03", DateTime.DateTime(2001, 8, 3)), ("2001-08-03", DateTime.DateTime(2001, 8, 3)), ("2001-8-3", DateTime.DateTime(2001, 8, 3)), ("2001-08-03 12:13:14.56", DateTime.DateTime(2001, 8, 3, 12, 13, 14.56)), ("2001-08-03T12:13:14.56", DateTime.DateTime(2001, 8, 3, 12, 13, 14.56)), # These should be correctly recognized if tested as mdy. ("08/03/2001", DateTime.DateTime(2001, 8, 3)), ("8/3/2001", DateTime.DateTime(2001, 8, 3)), ("08/03/2001 12:13:14.56", DateTime.DateTime(2001, 8, 3, 12, 13, 14.56)), ("08/03/2001T12:13:14.56", DateTime.DateTime(2001, 8, 3, 12, 13, 14.56)), # These can only be mdy ("08/23/2001", DateTime.DateTime(2001, 8, 23)), ("8/23/2001", DateTime.DateTime(2001, 8, 23)), ("08/23/2001 12:13:14.56", DateTime.DateTime(2001, 8, 23, 12, 13, 14.56)), # These can only be dmy ("23.08.2001", DateTime.DateTime(2001, 8, 23)), ("23.8.2001", DateTime.DateTime(2001, 8, 23)), ("23.08.2001 12:13:14.56", DateTime.DateTime(2001, 8, 23, 12, 13, 14.56)), ] print "\nTesting numdate.py with format(s) %s" % ", ".join(formats.split()) t0 = clock() cases = 0 for i in range(100): for testcase in testcases[0:3]: result = _test_it(testcase, formats, timeonly=1) cases = cases + 1 if result and i == 0: print result for testcase in testcases[3:]: result = _test_it(testcase, formats, timeonly=0) cases = cases + 1 if result and i == 0: print result t1 = clock() print "Done - %d cases tested in %1.5f sec." % (cases, t1 - t0) if __name__ == '__main__': test() egenix-mx-base-3.2.7/mx/DateTime/mxDateTime/0000755000175000017500000000000012251446113020370 5ustar lemburglemburgegenix-mx-base-3.2.7/mx/DateTime/mxDateTime/COPYRIGHT0000664000175000017500000000176211552064177021704 0ustar lemburglemburg --------------------------------------------------------------------- COPYRIGHT NOTICE --------------------------------------------------------------------- Copyright (c) 1997-2000, IKDS Marc-Andre Lemburg; mailto:mal@lemburg.com Copyright (c) 2000-2011, eGenix.com Software GmbH; mailto:info@egenix.com All Rights Reserved. This software is protected by copyright and other intellectual property laws and by international treaties. It may only be used under the conditions and terms of the eGenix.com Public License Agreement. You should have received a copy of the eGenix.com Public License Agreement with this software (usually in the file LICENSE located in the package's or software's main directory). Please write to licenses@egenix.com to obtain a copy in case you should not have received a copy. egenix-mx-base-3.2.7/mx/DateTime/mxDateTime/LICENSE0000664000175000017500000001075307620177404021415 0ustar lemburglemburg________________________________________________________________________ EGENIX.COM PUBLIC LICENSE AGREEMENT VERSION 1.1.0 ________________________________________________________________________ 1. Introduction This "License Agreement" is between eGenix.com Software, Skills and Services GmbH ("eGenix.com"), having an office at Pastor-Loeh-Str. 48, D-40764 Langenfeld, Germany, and the Individual or Organization ("Licensee") accessing and otherwise using this software in source or binary form and its associated documentation ("the Software"). 2. License Subject to the terms and conditions of this eGenix.com Public License Agreement, eGenix.com hereby grants Licensee a non-exclusive, royalty-free, world-wide license to reproduce, analyze, test, perform and/or display publicly, prepare derivative works, distribute, and otherwise use the Software alone or in any derivative version, provided, however, that the eGenix.com Public License Agreement is retained in the Software, or in any derivative version of the Software prepared by Licensee. 3. NO WARRANTY eGenix.com is making the Software available to Licensee on an "AS IS" basis. SUBJECT TO ANY STATUTORY WARRANTIES WHICH CAN NOT BE EXCLUDED, EGENIX.COM MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, EGENIX.COM MAKES NO AND DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF THE SOFTWARE WILL NOT INFRINGE ANY THIRD PARTY RIGHTS. 4. LIMITATION OF LIABILITY EGENIX.COM SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF THE SOFTWARE FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS (INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF BUSINESS PROFITS, BUSINESS INTERRUPTION, LOSS OF BUSINESS INFORMATION, OR OTHER PECUNIARY LOSS) AS A RESULT OF USING, MODIFYING OR DISTRIBUTING THE SOFTWARE, OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO THE ABOVE EXCLUSION OR LIMITATION MAY NOT APPLY TO LICENSEE. 5. Termination This License Agreement will automatically terminate upon a material breach of its terms and conditions. 6. Third Party Rights Any software or documentation in source or binary form provided along with the Software that is associated with a separate license agreement is licensed to Licensee under the terms of that license agreement. This License Agreement does not apply to those portions of the Software. Copies of the third party licenses are included in the Software Distribution. 7. General Nothing in this License Agreement affects any statutory rights of consumers that cannot be waived or limited by contract. Nothing in this License Agreement shall be deemed to create any relationship of agency, partnership, or joint venture between eGenix.com and Licensee. If any provision of this License Agreement shall be unlawful, void, or for any reason unenforceable, such provision shall be modified to the extent necessary to render it enforceable without losing its intent, or, if no such modification is possible, be severed from this License Agreement and shall not affect the validity and enforceability of the remaining provisions of this License Agreement. This License Agreement shall be governed by and interpreted in all respects by the law of Germany, excluding conflict of law provisions. It shall not be governed by the United Nations Convention on Contracts for International Sale of Goods. This License Agreement does not grant permission to use eGenix.com trademarks or trade names in a trademark sense to endorse or promote products or services of Licensee, or any third party. The controlling language of this License Agreement is English. If Licensee has received a translation into another language, it has been provided for Licensee's convenience only. 8. Agreement By downloading, copying, installing or otherwise using the Software, Licensee agrees to be bound by the terms and conditions of this License Agreement. For question regarding this License Agreement, please write to: eGenix.com Software, Skills and Services GmbH Pastor-Loeh-Str. 48 D-40764 Langenfeld Germany egenix-mx-base-3.2.7/mx/DateTime/mxDateTime/Makefile.pre.in0000664000175000017500000002445111136427173023240 0ustar lemburglemburg# Universal Unix Makefile for Python extensions # ============================================= # Short Instructions # ------------------ # 1. Build and install Python (1.5 or newer). # 2. "make -f Makefile.pre.in boot" # 3. "make" # You should now have a shared library. # Long Instructions # ----------------- # Build *and install* the basic Python 1.5 distribution. See the # Python README for instructions. (This version of Makefile.pre.in # only withs with Python 1.5, alpha 3 or newer.) # Create a file Setup.in for your extension. This file follows the # format of the Modules/Setup.dist file; see the instructions there. # For a simple module called "spam" on file "spammodule.c", it can # contain a single line: # spam spammodule.c # You can build as many modules as you want in the same directory -- # just have a separate line for each of them in the Setup.in file. # If you want to build your extension as a shared library, insert a # line containing just the string # *shared* # at the top of your Setup.in file. # Note that the build process copies Setup.in to Setup, and then works # with Setup. It doesn't overwrite Setup when Setup.in is changed, so # while you're in the process of debugging your Setup.in file, you may # want to edit Setup instead, and copy it back to Setup.in later. # (All this is done so you can distribute your extension easily and # someone else can select the modules they actually want to build by # commenting out lines in the Setup file, without editing the # original. Editing Setup is also used to specify nonstandard # locations for include or library files.) # Copy this file (Misc/Makefile.pre.in) to the directory containing # your extension. # Run "make -f Makefile.pre.in boot". This creates Makefile # (producing Makefile.pre and sedscript as intermediate files) and # config.c, incorporating the values for sys.prefix, sys.exec_prefix # and sys.version from the installed Python binary. For this to work, # the python binary must be on your path. If this fails, try # make -f Makefile.pre.in Makefile VERSION=1.5 installdir= # where is the prefix used to install Python for installdir # (and possibly similar for exec_installdir=). # Note: "make boot" implies "make clobber" -- it assumes that when you # bootstrap you may have changed platforms so it removes all previous # output files. # If you are building your extension as a shared library (your # Setup.in file starts with *shared*), run "make" or "make sharedmods" # to build the shared library files. If you are building a statically # linked Python binary (the only solution of your platform doesn't # support shared libraries, and sometimes handy if you want to # distribute or install the resulting Python binary), run "make # python". # Note: Each time you edit Makefile.pre.in or Setup, you must run # "make Makefile" before running "make". # Hint: if you want to use VPATH, you can start in an empty # subdirectory and say (e.g.): # make -f ../Makefile.pre.in boot srcdir=.. VPATH=.. # === Bootstrap variables (edited through "make boot") === # The prefix used by "make inclinstall libainstall" of core python installdir= /usr/local # The exec_prefix used by the same exec_installdir=$(installdir) # Source directory and VPATH in case you want to use VPATH. # (You will have to edit these two lines yourself -- there is no # automatic support as the Makefile is not generated by # config.status.) srcdir= . VPATH= . # === Variables that you may want to customize (rarely) === # (Static) build target TARGET= python # Installed python binary (used only by boot target) PYTHON= python # Add more -I and -D options here CFLAGS= $(OPT) -I$(INCLUDEPY) -I$(EXECINCLUDEPY) $(DEFS) # These two variables can be set in Setup to merge extensions. # See example[23]. BASELIB= BASESETUP= # === Variables set by makesetup === MODOBJS= _MODOBJS_ MODLIBS= _MODLIBS_ # === Definitions added by makesetup === # === Variables from configure (through sedscript) === VERSION= @VERSION@ CC= @CC@ CXX= @CXX@ MAINCC= @MAINCC@ LINKCC= @LINKCC@ SGI_ABI= @SGI_ABI@ OPT= @OPT@ CPPFLAGS= @CPPFLAGS@ LDFLAGS= @LDFLAGS@ LDLAST= @LDLAST@ DEFS= LIBS= @LIBS@ LIBM= @LIBM@ LIBC= @LIBC@ RANLIB= @RANLIB@ MACHDEP= @MACHDEP@ SO= @SO@ LDSHARED= @LDSHARED@ BLDSHARED= @BLDSHARED@ CCSHARED= @CCSHARED@ LINKFORSHARED= @LINKFORSHARED@ CXX= @CXX@ # Install prefix for architecture-independent files prefix= /usr/local # Install prefix for architecture-dependent files exec_prefix= $(prefix) # Uncomment the following two lines for AIX #LINKCC= $(LIBPL)/makexp_aix $(LIBPL)/python.exp "" $(LIBRARY); $(PURIFY) $(CC) #LDSHARED= $(LIBPL)/ld_so_aix $(CC) -bI:$(LIBPL)/python.exp # === Fixed definitions === # Shell used by make (some versions default to the login shell, which is bad) SHELL= /bin/sh # Expanded directories BINDIR= $(exec_installdir)/bin LIBDIR= $(exec_prefix)/lib MANDIR= $(installdir)/man INCLUDEDIR= $(installdir)/include SCRIPTDIR= $(prefix)/lib # Detailed destination directories BINLIBDEST= $(LIBDIR)/python$(VERSION) LIBDEST= $(SCRIPTDIR)/python$(VERSION) INCLUDEPY= $(INCLUDEDIR)/python$(VERSION) EXECINCLUDEPY= $(exec_installdir)/include/python$(VERSION) LIBP= $(exec_installdir)/lib/python$(VERSION) DESTSHARED= $(BINLIBDEST)/site-packages LIBPL= $(LIBP)/config PYTHONLIBS= $(LIBPL)/libpython$(VERSION).a MAKESETUP= $(LIBPL)/makesetup MAKEFILE= $(LIBPL)/Makefile CONFIGC= $(LIBPL)/config.c CONFIGCIN= $(LIBPL)/config.c.in SETUP= $(LIBPL)/Setup.config $(LIBPL)/Setup.local $(LIBPL)/Setup SYSLIBS= $(LIBM) $(LIBC) ADDOBJS= $(LIBPL)/python.o config.o # Portable install script (configure doesn't always guess right) INSTALL= $(LIBPL)/install-sh -c # Shared libraries must be installed with executable mode on some systems; # rather than figuring out exactly which, we always give them executable mode. # Also, making them read-only seems to be a good idea... INSTALL_SHARED= ${INSTALL} -m 555 # === Fixed rules === # Default target. This builds shared libraries only default: sharedmods # Build everything all: static sharedmods # Build shared libraries from our extension modules sharedmods: $(SHAREDMODS) # Build a static Python binary containing our extension modules static: $(TARGET) $(TARGET): $(ADDOBJS) lib.a $(PYTHONLIBS) Makefile $(BASELIB) $(LINKCC) $(LDFLAGS) $(LINKFORSHARED) \ $(ADDOBJS) lib.a $(PYTHONLIBS) \ $(LINKPATH) $(BASELIB) $(MODLIBS) $(LIBS) $(SYSLIBS) \ -o $(TARGET) $(LDLAST) install: sharedmods if test ! -d $(DESTSHARED) ; then \ mkdir $(DESTSHARED) ; else true ; fi -for i in X $(SHAREDMODS); do \ if test $$i != X; \ then $(INSTALL_SHARED) $$i $(DESTSHARED)/$$i; \ fi; \ done # Build the library containing our extension modules lib.a: $(MODOBJS) -rm -f lib.a ar cr lib.a $(MODOBJS) -$(RANLIB) lib.a # This runs makesetup *twice* to use the BASESETUP definition from Setup config.c Makefile: Makefile.pre Setup $(BASESETUP) $(MAKESETUP) $(MAKESETUP) \ -m Makefile.pre -c $(CONFIGCIN) Setup -n $(BASESETUP) $(SETUP) $(MAKE) -f Makefile do-it-again # Internal target to run makesetup for the second time do-it-again: $(MAKESETUP) \ -m Makefile.pre -c $(CONFIGCIN) Setup -n $(BASESETUP) $(SETUP) # Make config.o from the config.c created by makesetup config.o: config.c $(CC) $(CFLAGS) -c config.c # Setup is copied from Setup.in *only* if it doesn't yet exist Setup: cp $(srcdir)/Setup.in Setup # Make the intermediate Makefile.pre from Makefile.pre.in Makefile.pre: Makefile.pre.in sedscript sed -f sedscript $(srcdir)/Makefile.pre.in >Makefile.pre # Shortcuts to make the sed arguments on one line P=prefix E=exec_prefix H=Generated automatically from Makefile.pre.in by sedscript. L=LINKFORSHARED # Make the sed script used to create Makefile.pre from Makefile.pre.in sedscript: $(MAKEFILE) sed -n \ -e '1s/.*/1i\\/p' \ -e '2s%.*%# $H%p' \ -e '/^VERSION=/s/^VERSION=[ ]*\(.*\)/s%@VERSION[@]%\1%/p' \ -e '/^CC=/s/^CC=[ ]*\(.*\)/s%@CC[@]%\1%/p' \ -e '/^CXX=/s/^CXX=[ ]*\(.*\)/s%@CXX[@]%\1%/p' \ -e '/^DEFS=/s/^DEFS=[ ]*\(.*\)/s%@DEFS[@]%\1%/p' \ -e '/^MAINCC=/s/^MAINCC=[ ]*\(.*\)/s%@MAINCC[@]%\1%/p' \ -e '/^LINKCC=/s/^LINKCC=[ ]*\(.*\)/s%@LINKCC[@]%\1%/p' \ -e '/^OPT=/s/^OPT=[ ]*\(.*\)/s%@OPT[@]%\1%/p' \ -e '/^CPPFLAGS=/s/^CPPFLAGS=[ ]*\(.*\)/s%@CPPFLAGS[@]%\1%/p' \ -e '/^LDFLAGS=/s/^LDFLAGS=[ ]*\(.*\)/s%@LDFLAGS[@]%\1%/p' \ -e '/^LDLAST=/s/^LDLAST=[ ]*\(.*\)/s%@LDLAST[@]%\1%/p' \ -e '/^DEFS=/s/^DEFS=[ ]*\(.*\)/s%@DEFS[@]%\1%/p' \ -e '/^LIBS=/s/^LIBS=[ ]*\(.*\)/s%@LIBS[@]%\1%/p' \ -e '/^LIBM=/s/^LIBM=[ ]*\(.*\)/s%@LIBM[@]%\1%/p' \ -e '/^LIBC=/s/^LIBC=[ ]*\(.*\)/s%@LIBC[@]%\1%/p' \ -e '/^RANLIB=/s/^RANLIB=[ ]*\(.*\)/s%@RANLIB[@]%\1%/p' \ -e '/^MACHDEP=/s/^MACHDEP=[ ]*\(.*\)/s%@MACHDEP[@]%\1%/p' \ -e '/^SO=/s/^SO=[ ]*\(.*\)/s%@SO[@]%\1%/p' \ -e '/^LDSHARED=/s/^LDSHARED=[ ]*\(.*\)/s%@LDSHARED[@]%\1%/p' \ -e '/^BLDSHARED=/s/^BLDSHARED=[ ]*\(.*\)/s%@BLDSHARED[@]%\1%/p' \ -e '/^CCSHARED=/s/^CCSHARED=[ ]*\(.*\)/s%@CCSHARED[@]%\1%/p' \ -e '/^SGI_ABI=/s/^SGI_ABI=[ ]*\(.*\)/s%@SGI_ABI[@]%\1%/p' \ -e '/^$L=/s/^$L=[ ]*\(.*\)/s%@$L[@]%\1%/p' \ -e '/^$P=/s/^$P=\(.*\)/s%^$P=.*%$P=\1%/p' \ -e '/^$E=/s/^$E=\(.*\)/s%^$E=.*%$E=\1%/p' \ $(MAKEFILE) >sedscript echo "/^#@SET_CCC@/d" >>sedscript echo "/^installdir=/s%=.*%= $(installdir)%" >>sedscript echo "/^exec_installdir=/s%=.*%=$(exec_installdir)%" >>sedscript echo "/^srcdir=/s%=.*%= $(srcdir)%" >>sedscript echo "/^VPATH=/s%=.*%= $(VPATH)%" >>sedscript echo "/^LINKPATH=/s%=.*%= $(LINKPATH)%" >>sedscript echo "/^BASELIB=/s%=.*%= $(BASELIB)%" >>sedscript echo "/^BASESETUP=/s%=.*%= $(BASESETUP)%" >>sedscript # Bootstrap target boot: clobber VERSION=`$(PYTHON) -c "import sys; print sys.version[:3]"`; \ installdir=`$(PYTHON) -c "import sys; print sys.prefix"`; \ exec_installdir=`$(PYTHON) -c "import sys; print sys.exec_prefix"`; \ $(MAKE) -f $(srcdir)/Makefile.pre.in VPATH=$(VPATH) srcdir=$(srcdir) \ VERSION=$$VERSION \ installdir=$$installdir \ exec_installdir=$$exec_installdir \ Makefile # Handy target to remove intermediate files and backups clean: -rm -f *.o *~ # Handy target to remove everything that is easily regenerated clobber: clean -rm -f *.a tags TAGS config.c Makefile.pre $(TARGET) sedscript -rm -f *.so *.sl so_locations # Handy target to remove everything you don't want to distribute distclean: clobber -rm -f Makefile Setup egenix-mx-base-3.2.7/mx/DateTime/mxDateTime/Setup.in0000664000175000017500000000230711554035610022025 0ustar lemburglemburg# Build extensions shared: *shared* # # # mxDateTime module # mxDateTime \ # # NOTE: These defines are only necessary in case Python hasn't checked # for the specific C lib APIs during the ./configure step. All of them # are checked on Unix starting with Python 1.5.2. On other patforms # you may have to uncomment these by hand: # # Uncomment this line if you have the strftime() C lib API on your platform # -DHAVE_STRFTIME \ # # Uncomment this line if you have the strptime() C lib API on your platform # -DHAVE_STRPTIME \ # # Uncomment this line if you have the timegm() C lib API on your platform # -DHAVE_TIMEGM \ # # mxDateTime can use its own API for querying the current time from # the OS, or reuse the Python time.time() function. The latter is more # portable, but slower. Define the following symbol to use the faster # native API. # # -DUSE_FAST_GETCURRENTTIME \ # # mxDateTime can use real time APIs if the system provides them. # # -DHAVE_CLOCK_GETTIME -lrt \ # # mxDateTime has experimental support for subclassable types which # were introduced in Python 2.2a1. Enable the following symbol to # make the DateTimeType subclassable. # # -DWANT_SUBCLASSABLE_TYPES \ # mxDateTime.c egenix-mx-base-3.2.7/mx/DateTime/mxDateTime/W95.bat0000664000175000017500000000023306563077543021464 0ustar lemburglemburg@echo off @if exist release\NUL deltree/y release @set PYTHON_DIR=%1 @nmake mxdatetime.mak @if exist %1\dlls\NUL copy release\*.dll %1\dlls\*.pyd egenix-mx-base-3.2.7/mx/DateTime/mxDateTime/__init__.py0000664000175000017500000000207312133021421022473 0ustar lemburglemburg""" mxDateTime - Date and time handling routines and types Copyright (c) 2000, Marc-Andre Lemburg; mailto:mal@lemburg.com Copyright (c) 2000-2013, eGenix.com Software GmbH; mailto:info@egenix.com See the documentation for further information on copyrights, or contact the author. All Rights Reserved. """ try: from mxDateTime import * from mxDateTime import __version__ except ImportError, why: print "*** You don't have the (right) mxDateTime binaries installed !" raise ImportError, why #from mxDateTime_Python import * #from mxDateTime_Python import __version__ ### Python part of the intialization import time # Use the time.time() function as basis for now() try: setnowapi(time.time) except NameError: pass # If strptime() is not available, use the time.strptime() as # work-around, if that is available try: strptime except NameError: if hasattr(time, 'strptime'): def strptime(string, format, _time=time): return DateTime(*_time.strptime(string, format)[:6]) del time egenix-mx-base-3.2.7/mx/DateTime/mxDateTime/config_mxdatetime.txt0000664000175000017500000000224307121413024024615 0ustar lemburglemburg!++ ! CONFIG_MXDATETIME.TXT - 30-MAY-2000 - Jean-Franois Pironne ! ! configuration information ! - add/remove module 'mxDateTime' ! ! -- to register: ! $ @ PYTHON_VMS:SETUP ! $ python PYTHON_TOOLS:REGISTER_CONFIG.PY R CONFIG_MXDATETIME.TXT ! ! -- to unregister: ! $ @ PYTHON_VMS:SETUP ! $ python PYTHON_TOOLS:REGISTER_CONFIG.PY U CONFIG_MXDATETIME.TXT ! ! remember to re-run the following procedures after (de)registration: ! $ @ PYTHON_TOOLS:CVT_CONFIG_MODULES.COM ! $ @ PYTHON_TOOLS:CVT_CONFIG_OLB.COM ! $ @ PYTHON_VMS:CONFIG_INITTAB2MAR.COM "CONFIG.DAT" "D" ! $ @ PYTHON_VMS:BLDRUN VMS_MACRO CONFIG_INITTAB ! $ @ PYTHON_VMS:LINK_PY ! !-- ! $FORMAT_VERSION=1 ! $COMPONENT=PYTHON.MXDATETIME ! $CONFIG mxDateTime initmxDateTime D $ENDCONFIG ! ! $OLB ! module 'mxDateTime' goes into [.O_arch]MODULES_*.OLB together with the base software $ENDOLB ! ! $MODULES !OLB|module |o|d|t|e=c|alpha|vax |procedure || MODULES|MXDATETIME |1|C|-|D=D|05520|05520||| ! ---------------------------------------------------------------------------- $ENDMODULES ! ! ! EOF: CONFIG_MXDATETIME.TXT egenix-mx-base-3.2.7/mx/DateTime/mxDateTime/ld_so_aix0000775000175000017500000001351507057236756022310 0ustar lemburglemburg#!/bin/sh # # ======================================================================== # FILE: ld_so_aix # TYPE: executable, uses makexp_aix # SYSTEM: AIX # # DESCRIPTION: Creates a shareable .o from a set of pre-compiled # (unshared) .o files # # USAGE: ld_so_aix [CC] [arguments] # # ARGUMENTS: Same as for "ld". The following arguments are processed # or supplied by this script (those marked with an asterisk # can be overriden from command line): # # Argument Default value # (*) -o [OutputFileName] -o shr.o # (*) -e [EntryPointLabel] -e init[OutputBaseName] # (*) -bE:[ExportFile] -bE:[OutputBaseName].exp # (*) -bI:[ImportFile] -bI:./python.exp # -bM:[ModuleType] -bM:SRE # -bhalt:[Number] -bhalt:4 # -T[Number] -T512 # -H[Number] -H512 # -lm # # The compiler specific ("-lc" or "-lc_r", "-lpthreads",...) # arguments will be automatically passed to "ld" according # to the CC command provided as a first argument to this # script. Usually, the same CC command was used to produce # the pre-compiled .o file(s). # # NOTES: 1. Since "ld_so_aix" was originally written for building # shared modules for the Python interpreter, the -e and # -bI default values match Python's conventions. In # Python, the entry point for a shared module is based # on the module's name (e.g., the "mathmodule" will # expect an entry point of "initmath"). # 2. The script accepts multiple .o or .a input files and # creates a single (shared) output file. The export list # that is created is based on the output file's basename # with the suffix ".exp". # 3. The resulting shared object file is left in the # current directory. # 4. Uncommenting the "echo" lines gives detailed output # about the commands executed in the script. # # # HISTORY: Oct-1996 -- Support added for multiple .o files -- # -- and optional arguments processing. -- # Chris Myers (myers@tc.cornell.edu), Keith Kwok # (kkwok@tc.cornell.edu) and Vladimir Marangozov # # Aug-6-1996 -- Take care of the compiler specific -- # -- args by leaving CC to invoke "ld". -- # Vladimir Marangozov # # Jul-1-1996 -- Make sure to use /usr/ccs/bin/ld -- # -- Use makexp_aix for the export list. -- # Vladimir Marangozov (Vladimir.Marangozov@imag.fr) # # Manus Hand (mhand@csn.net) -- Initial code -- 6/24/96 # ======================================================================== # usage="Usage: ld_so_aix [CC command] [ld arguments]" if test ! -n "$*"; then echo $usage; exit 2 fi makexp=`dirname $0`/makexp_aix # Check for existence of compiler. CC=$1; shift whichcc=`which $CC` if test ! -x "$whichcc"; then echo "ld_so_aix: Compiler '$CC' not found; exiting." exit 2 fi if test ! -n "$*"; then echo $usage; exit 2 fi # Default import file for Python # Can be overriden by providing a -bI: argument. impfile="./python.exp" # Parse arguments while test -n "$1" do case "$1" in -e | -Wl,-e) if test -z "$2"; then echo "ld_so_aix: The -e flag needs a parameter; exiting."; exit 2 else shift; entry=$1 fi ;; -e* | -Wl,-e*) entry=`echo $1 | sed -e "s/-Wl,//" -e "s/-e//"` ;; -o) if test -z "$2"; then echo "ld_so_aix: The -o flag needs a parameter; exiting."; exit 2 else shift; objfile=$1 fi ;; -o*) objfile=`echo $1 | sed "s/-o//"` ;; -bI:* | -Wl,-bI:*) impfile=`echo $1 | sed -e "s/-Wl,//" -e "s/-bI://"` ;; -bE:* | -Wl,-bE:*) expfile=`echo $1 | sed -e "s/-Wl,//" -e "s/-bE://"` ;; *.o | *.a) objs="$objs $1" args="$args $1" ;; -bM:* | -Wl,-bM:* | -H* | -Wl,-H* | -T* | -Wl,-T* | -lm) ;; *) args="$args $1" ;; esac shift done if test -z "$objs"; then echo "ld_so_aix: No input files; exiting." exit 2 elif test ! -r "$impfile"; then echo "ld_so_aix: Import file '$impfile' not found or not readable; exiting." exit 2 fi # If -o wasn't specified, assume "-o shr.o" if test -z "$objfile"; then objfile=shr.o fi filename=`basename $objfile | sed "s/\.[^.]*$//"` # If -bE: wasn't specified, assume "-bE:$filename.exp" if test -z "$expfile"; then expfile="$filename.exp" fi # Default entry symbol for Python modules = init[modulename] # Can be overriden by providing a -e argument. if test -z "$entry"; then entry=init`echo $filename | sed "s/module.*//"` fi #echo "ld_so_aix: Debug info section" #echo " -> output file : $objfile" #echo " -> import file : $impfile" #echo " -> export file : $expfile" #echo " -> entry point : $entry" #echo " -> object files: $objs" #echo " -> CC arguments: $args" CCOPT="-Wl,-e$entry -Wl,-bE:$expfile -Wl,-bI:$impfile -Wl,-bhalt:4" CCOPT="$CCOPT -Wl,-bM:SRE -Wl,-T512 -Wl,-H512 -lm -o $objfile" CCARGS="$args" # Export list generation. #echo $makexp $expfile "$objfile" $objs $makexp $expfile "$objfile" $objs # Perform the link. #echo $CC $CCOPT $CCARGS $CC $CCOPT $CCARGS # Delete the module's export list file. # Comment this line if you need it. rm -f $expfile egenix-mx-base-3.2.7/mx/DateTime/mxDateTime/makexp_aix0000775000175000017500000000603507057236752022470 0ustar lemburglemburg#!/bin/sh # # =========================================================================== # FILE: makexp_aix # TYPE: standalone executable # SYSTEM: AIX 3.2.5 and AIX 4 # # DESCRIPTION: This script creates an export list of ALL global symbols # from a list of object or archive files. # # USAGE: makexp_aix "" ... # # where: # is the target export list filename. # is the path/file string to be appended # after the "#!" symbols in the first line of the # export file. Passing "" means deferred resolution. # is an object (.o) or an archive file (.a). # # HISTORY: # 3-Apr-1998 -- remove C++ entries of the form Class::method # Vladimir Marangozov # # 1-Jul-1996 -- added header information # Vladimir Marangozov # # 28-Jun-1996 -- initial code # Vladimir Marangozov (Vladimir.Marangozov@imag.fr) # ========================================================================== # Variables expFileName=$1 toAppendStr=$2 shift; shift; inputFiles=$* automsg="Generated automatically by makexp_aix" notemsg="NOTE: lists _all_ global symbols defined in the above file(s)." curwdir=`pwd` # Create the export file and setup the header info echo "#!"$toAppendStr > $expFileName echo "*" >> $expFileName echo "* $automsg (`date -u`)" >> $expFileName echo "*" >> $expFileName echo "* Base Directory: $curwdir" >> $expFileName echo "* Input File(s) : $inputFiles" >> $expFileName echo "*" >> $expFileName echo "* $notemsg" >> $expFileName echo "*" >> $expFileName # Extract the symbol list using 'nm' which produces quite # different output under AIX 4 than under AIX 3.2.5. # The following handles both versions by using a common flagset. # Here are some hidden tricks: # 1. Use /usr/ccs/bin/nm. Relevant to AIX 3.2.5 which has # another version under /usr/ucb/bin/nm. # 2. Use the -B flag to have a standard BSD representation # of the symbol list on both AIX 3.2.5 and AIX 4. The "-B" # flag is missing in the AIX 3.2.5 online usage help of 'nm'. # 3. Use the -x flag to have a hex representation of the symbol # values. This fills the leading whitespaces on AIX 4, # thus simplifying the sed statement. # 4. Eliminate all entries except those with either "B", "D" # or "T" key letters. We are interested only in the global # (extern) BSS, DATA and TEXT symbols. With the same statement # we eliminate object member lines relevant to AIX 4. # 5. Eliminate entries containing a dot. We can have a dot only # as a symbol prefix, but such symbols are undefined externs. # 6. Eliminate everything including the key letter, so that we're # left with just the symbol name. # 7. Eliminate all entries containing two colons, like Class::method # /usr/ccs/bin/nm -Bex $inputFiles \ | sed -e '/ [^BDT] /d' -e '/\./d' -e 's/.* [BDT] //' -e '/::/d' \ | sort | uniq >> $expFileName egenix-mx-base-3.2.7/mx/DateTime/mxDateTime/mx.h0000664000175000017500000005570412133300665021202 0ustar lemburglemburg#ifndef MX_H #define MX_H /* mx -- Marc's eXtension modules for Python: basic macros This file is only meant to be included by the extension modules. DO NOT include it in the extension module's header file, since it will definitely cause troubles then. To enable debugging ceratin things, define one of these before including this file: MAL_REF_DEBUG -- debug reference counts (Py_MY_xxx) [this file] MAL_DEBUG -- enable debug output (DPRINTF) [mxstdlib.h] MAL_MEM_DEBUG -- enable malloc output (new,cnew,free,...) [mxstdlib.h] Copyright (c) 2000, Marc-Andre Lemburg; mailto:mal@lemburg.com Copyright (c) 2000-2013, eGenix.com Software GmbH; mailto:info@egenix.com See the documentation for further copyright information or contact the author. XXX Most of these macros and defines should really use an mx prefix to avoid collisions with native Python macros and defines. So far this has not happened, which is why this hasn't been implemented yet. */ /* --- Platform or compiler specific tweaks ------------------------------- */ /* Add some platform specific symbols to enable work-arounds for the static forward declaration of type definitions; note that the GNU C compiler does not have this problem. Many thanks to all who have contributed to this list. */ #ifndef BAD_STATIC_FORWARD # if (!defined(__GNUC__)) # if (defined(NeXT) || defined(sgi) || defined(_AIX) || (defined(__osf__) && defined(__DECC)) || defined(TrueCompaq64) || defined(__VMS)) # define BAD_STATIC_FORWARD # endif # endif #endif /* Some more tweaks for various platforms. */ /* VMS needs this define. Thanks to Jean-Franois PIRONNE */ #if defined(__VMS) # define __SC__ #endif /* xlC on AIX doesn't like the Python work-around for static forwards in ANSI mode (default), so we switch on extended mode. Thanks to Albert Chin-A-Young */ #if defined(__xlC__) # pragma langlvl extended #endif /* --- Standard header files ---------------------------------------------- */ /* Include the generic mx header file */ #include "mxh.h" /* Include nearly all Python symbols & definitions */ #include "Python.h" /* Include other standard stuff */ #include "mxstdlib.h" /* Include Python backward compatibility stuff */ #include "mxpyapi.h" /* --- Compiler support --------------------------------------------------- */ /* Support for compilers which don't like static forward declarations of arrays; Python 2.3 removed the support for BAD_STATIC_FORWARD which is why we now use our own little helpers here. */ #undef staticforward #undef statichere #ifdef BAD_STATIC_FORWARD # define staticforward extern # define statichere static #else # define staticforward static # define statichere static #endif /* --- Declare macros ----------------------------------------------------- */ #define Py_NONE (Py_INCREF(Py_None),Py_None) #ifdef MAL_REF_DEBUG # define printref(x) printf("* refcount for "#x" = %i\n",(long) x->ob_refcnt); #else # define printref(x) #endif /* --- Error handling ----------------------------------------------------- */ #define Py_Do(x) {if (!(x)) goto onError;} #define Py_ReturnOnError(errortype,errorstr) {PyErr_SetString(errortype,errorstr);return NULL;} #define Py_Assert(x,errortype,errorstr) {if (!(x)) {PyErr_SetString(errortype,errorstr);goto onError;}} #define Py_AssertWithArg(x,errortype,errorstr,a1) {if (!(x)) {PyErr_Format(errortype,errorstr,a1);goto onError;}} #define Py_AssertWith2Args(x,errortype,errorstr,a1,a2) {if (!(x)) {PyErr_Format(errortype,errorstr,a1,a2);goto onError;}} #define Py_AssertWith3Args(x,errortype,errorstr,a1,a2,a3) {if (!(x)) {PyErr_Format(errortype,errorstr,a1,a2,a3);goto onError;}} #define Py_Error(errortype,errorstr) {PyErr_SetString(errortype,errorstr);goto onError;} #define Py_ErrorWithArg(errortype,errorstr,a1) {PyErr_Format(errortype,errorstr,a1);goto onError;} #define Py_ErrorWith2Args(errortype,errorstr,a1,a2) {PyErr_Format(errortype,errorstr,a1,a2);goto onError;} #define Py_ErrorWith3Args(errortype,errorstr,a1,a2,a3) {PyErr_Format(errortype,errorstr,a1,a2,a3);goto onError;} /* --- Reference counting ------------------------------------------------- */ #ifdef MAL_REF_DEBUG static void mx_Py_INCREF(PyObject *v, const char *name, const char *filename, int lineno) { if (!Py_DebugFlag) { Py_XINCREF(v); return; } if (!v) mxDebugPrintf("[%s:%5i] Py_XINCREF( %-8s == NULL );\n", filename,lineno,name); else { Py_INCREF(v);; mxDebugPrintf("[%s:%5i] Py_XINCREF( %-8s at 0x%lx [%s]); " "new refcount = %i\n", filename,lineno,name,(long)v,v->ob_type->tp_name, v->ob_refcnt); } } static void mx_Py_DECREF(PyObject *v, const char *name, const char *filename, int lineno) { if (!Py_DebugFlag) { Py_XDECREF(v); return; } if (!v) mxDebugPrintf("[%s:%5i] Py_XDECREF( %-8s == NULL );\n", filename,lineno,name); else { int refcnt = v->ob_refcnt; Py_DECREF(v); if (refcnt <= 1) mxDebugPrintf("[%s:%5i] Py_XDECREF( %-8s at 0x%lx [%s]); " "object deleted\n", filename,lineno,name,(long)v,v->ob_type->tp_name); else mxDebugPrintf("[%s:%5i] Py_XDECREF( %-8s at 0x%lx [%s]); " "new refcount = %i\n", filename,lineno,name,(long)v,v->ob_type->tp_name, v->ob_refcnt); } } static void mx_Py_PRINT_REFCOUNT(PyObject *v, const char *name, const char *filename, int lineno) { if (!Py_DebugFlag) return; if (!v) mxDebugPrintf("[%s:%5i] Py_PRINT_REFCOUNT( %-8s == NULL );\n", filename,lineno,name); else { mxDebugPrintf("[%s:%5i] Py_PRINT_REFCOUNT( %-8s at 0x%lx [%s]) = %i;\n", filename,lineno,name,(long)v,v->ob_type->tp_name, v->ob_refcnt); } } # undef Py_INCREF # define Py_INCREF(x) mx_Py_INCREF((PyObject *)x,#x,__FILE__,__LINE__) # undef Py_DECREF # define Py_DECREF(x) mx_Py_DECREF((PyObject *)x,#x,__FILE__,__LINE__) # undef Py_XINCREF # define Py_XINCREF(x) mx_Py_INCREF((PyObject *)x,#x,__FILE__,__LINE__) # undef Py_XDECREF # define Py_XDECREF(x) mx_Py_DECREF((PyObject *)x,#x,__FILE__,__LINE__) # undef Py_CLEAR # define Py_CLEAR(x) {Py_XDECREF(x); x=0;} # define Py_DELETE(x) {if (x->ob_refcnt > 1) mxDebugPrintf("[%s:%5i] Py_DELETE( "#x" ) WARNING: Refcount = %i > 1\n",__FILE__,__LINE__,(int)x->ob_refcnt);Py_DECREF(x);} # define Py_PRINT_REFCOUNT(x) mx_Py_PRINT_REFCOUNT((PyObject *)x,#x,__FILE__,__LINE__) #else # define Py_DELETE(x) Py_DECREF(x) # define Py_PRINT_REFCOUNT(x) #endif #define Py_DEC_REF(x) {Py_XDECREF(x); x=0;} /* doing this once too often doesn't hurt; same as Py_CLEAR() */ /* Unreference a Python object. This is only used in Python debug builds and needed to keep track of all allocated references. Use in object constructors or free list implementations. */ #ifndef _Py_DEC_REFTOTAL # ifdef Py_REF_DEBUG # define _Py_DEC_REFTOTAL _Py_RefTotal-- # else # define _Py_DEC_REFTOTAL # endif #endif #define mxPy_UNREF(x) _Py_DEC_REFTOTAL /* --- Debug logging ------------------------------------------------------ */ #ifdef MAL_DEBUG # define Py_PRINT_REPR(message, obj) \ if (Py_DebugFlag) { \ PyObject *_debug_repr = PyObject_Repr(obj); \ mxDebugPrintf(message, PyString_AsString(_debug_repr)); \ Py_XDECREF(_debug_repr); \ } #else # define Py_PRINT_REPR(message, obj) #endif /* --- Argument passing and checking -------------------------------------- */ /* No arguments expected; also use Py_MethodListEntryNoArgs() for this kind of fct; this check is no longer needed in Python 2.3 and later */ #if PY_VERSION_HEX >= 0x02030000 # define Py_NoArgsCheck() {if (0) goto onError;} #else # define Py_NoArgsCheck() {if (!PyArg_NoArgs(args)) goto onError;} #endif /* For functions with old style args (Py_MethodListEntrySingleArg) */ #define Py_GetArgObject(a) {a = args; if (!a) {PyErr_SetString(PyExc_TypeError,"function/method requires an argument"); goto onError;}} #define Py_GetSingleArg(format,a1) {if (!PyArg_Parse(args,format,&a1)) goto onError;} /* For functions with new style args: */ #define Py_GetArg(format,a1) {if (!PyArg_ParseTuple(args,format,&a1)) goto onError;} #define Py_Get2Args(format,a1,a2) {if (!PyArg_ParseTuple(args,format,&a1,&a2)) goto onError;} #define Py_Get3Args(format,a1,a2,a3) {if (!PyArg_ParseTuple(args,format,&a1,&a2,&a3)) goto onError;} #define Py_Get4Args(format,a1,a2,a3,a4) {if (!PyArg_ParseTuple(args,format,&a1,&a2,&a3,&a4)) goto onError;} #define Py_Get5Args(format,a1,a2,a3,a4,a5) {if (!PyArg_ParseTuple(args,format,&a1,&a2,&a3,&a4,&a5)) goto onError;} #define Py_Get6Args(format,a1,a2,a3,a4,a5,a6) {if (!PyArg_ParseTuple(args,format,&a1,&a2,&a3,&a4,&a5,&a6)) goto onError;} #define Py_Get7Args(format,a1,a2,a3,a4,a5,a6,a7) {if (!PyArg_ParseTuple(args,format,&a1,&a2,&a3,&a4,&a5,&a6,&a7)) goto onError;} #define Py_Get8Args(format,a1,a2,a3,a4,a5,a6,a7,a8) {if (!PyArg_ParseTuple(args,format,&a1,&a2,&a3,&a4,&a5,&a6,&a7,&a8)) goto onError;} /* The keywords array string type */ #define Py_KEYWORDS_STRING_TYPE char /* For functions with keywords -- the first macro parameter must be the keywords array given as e.g. static const char *keywords[] = {"first","second","third", 0}; with an entry for every argument (in the correct order). The functions must be included in the method list using Py_MethodWithKeywordsListEntry() and be declared as Py_C_Function_WithKeywords(). */ #define Py_KeywordGetArg(keywords,format,a1) {if (!PyArg_ParseTupleAndKeywords(args,kws,format,keywords,&a1)) goto onError;} #define Py_KeywordGet2Args(keywords,format,a1,a2) {if (!PyArg_ParseTupleAndKeywords(args,kws,format,keywords,&a1,&a2)) goto onError;} #define Py_KeywordGet3Args(keywords,format,a1,a2,a3) {if (!PyArg_ParseTupleAndKeywords(args,kws,format,keywords,&a1,&a2,&a3)) goto onError;} #define Py_KeywordGet4Args(keywords,format,a1,a2,a3,a4) {if (!PyArg_ParseTupleAndKeywords(args,kws,format,keywords,&a1,&a2,&a3,&a4)) goto onError;} #define Py_KeywordGet5Args(keywords,format,a1,a2,a3,a4,a5) {if (!PyArg_ParseTupleAndKeywords(args,kws,format,keywords,&a1,&a2,&a3,&a4,&a5)) goto onError;} #define Py_KeywordGet6Args(keywords,format,a1,a2,a3,a4,a5,a6) {if (!PyArg_ParseTupleAndKeywords(args,kws,format,keywords,&a1,&a2,&a3,&a4,&a5,&a6)) goto onError;} #define Py_KeywordGet7Args(keywords,format,a1,a2,a3,a4,a5,a6,a7) {if (!PyArg_ParseTupleAndKeywords(args,kws,format,keywords,&a1,&a2,&a3,&a4,&a5,&a6,&a7)) goto onError;} #define Py_KeywordGet8Args(keywords,format,a1,a2,a3,a4,a5,a6,a7,a8) {if (!PyArg_ParseTupleAndKeywords(args,kws,format,keywords,&a1,&a2,&a3,&a4,&a5,&a6,&a7,&a8)) goto onError;} /* New style macros fof functions supporting keywords -- the C variable names are used as template for the keyword list, i.e. they must match the Python keyword parameter names. Note that format strings with special parameters (e.g. "#s") are not allowed since they would cause the keyword list to be out of sync. The functions must be included in the method list using Py_MethodWithKeywordsListEntry() and be declared as Py_C_Function_WithKeywords(). Example: Py_C_Function_WithKeywords( myfunction, "myfunction(filename,dupkeys=0,filemode=0,sectorsize=512)\n\n" "Returns a myobject" ) { char *filename; int sectorsize = 512; int dupkeys = 0; int filemode = 0; Py_KeywordsGet4Args("s|iii", filename,dupkeys,filemode,sectorsize); return (PyObject *)myobject_New(filename, filemode, sectorsize, dupkeys); onError: return NULL; } */ #define Py_KeywordsGetArg(format,a1) {static Py_KEYWORDS_STRING_TYPE *kwslist[] = {#a1,NULL}; if (!PyArg_ParseTupleAndKeywords(args,kws,format,kwslist,&a1)) goto onError;} #define Py_KeywordsGet2Args(format,a1,a2) {static Py_KEYWORDS_STRING_TYPE *kwslist[] = {#a1,#a2,NULL}; if (!PyArg_ParseTupleAndKeywords(args,kws,format,kwslist,&a1,&a2)) goto onError;} #define Py_KeywordsGet3Args(format,a1,a2,a3) {static Py_KEYWORDS_STRING_TYPE *kwslist[] = {#a1,#a2,#a3,NULL}; if (!PyArg_ParseTupleAndKeywords(args,kws,format,kwslist,&a1,&a2,&a3)) goto onError;} #define Py_KeywordsGet4Args(format,a1,a2,a3,a4) {static Py_KEYWORDS_STRING_TYPE *kwslist[] = {#a1,#a2,#a3,#a4,NULL}; if (!PyArg_ParseTupleAndKeywords(args,kws,format,kwslist,&a1,&a2,&a3,&a4)) goto onError;} #define Py_KeywordsGet5Args(format,a1,a2,a3,a4,a5) {static Py_KEYWORDS_STRING_TYPE *kwslist[] = {#a1,#a2,#a3,#a4,#a5,NULL}; if (!PyArg_ParseTupleAndKeywords(args,kws,format,kwslist,&a1,&a2,&a3,&a4,&a5)) goto onError;} #define Py_KeywordsGet6Args(format,a1,a2,a3,a4,a5,a6) {static Py_KEYWORDS_STRING_TYPE *kwslist[] = {#a1,#a2,#a3,#a4,#a5,#a6,NULL}; if (!PyArg_ParseTupleAndKeywords(args,kws,format,kwslist,&a1,&a2,&a3,&a4,&a5,&a6)) goto onError;} #define Py_KeywordsGet7Args(format,a1,a2,a3,a4,a5,a6,a7) {static Py_KEYWORDS_STRING_TYPE *kwslist[] = {#a1,#a2,#a3,#a4,#a5,#a6,#a7,NULL}; if (!PyArg_ParseTupleAndKeywords(args,kws,format,kwslist,&a1,&a2,&a3,&a4,&a5,&a6,&a7)) goto onError;} #define Py_KeywordsGet8Args(format,a1,a2,a3,a4,a5,a6,a7,a8) {static Py_KEYWORDS_STRING_TYPE *kwslist[] = {#a1,#a2,#a3,#a4,#a5,#a6,#a7,#a8,NULL}; if (!PyArg_ParseTupleAndKeywords(args,kws,format,kwslist,&a1,&a2,&a3,&a4,&a5,&a6,&a7,&a8)) goto onError;} /* --- Returning values to Python ----------------------------------------- */ /* XXX Don't always work: every time you have an 'O' in the BuildValue format string, you need to DECREF the variable *after* the tuple has been built !!! */ #define Py_ReturnNone() {Py_INCREF(Py_None);return Py_None;} #define Py_ReturnTrue() {Py_INCREF(Py_True);return Py_True;} #define Py_ReturnFalse() {Py_INCREF(Py_False);return Py_False;} #define Py_ReturnArg(format,a1) return Py_BuildValue(format,a1); #define Py_Return Py_ReturnArg #define Py_Return2Args(format,a1,a2) return Py_BuildValue(format,a1,a2); #define Py_Return2 Py_Return2Args #define Py_Return3Args(format,a1,a2,a3) return Py_BuildValue(format,a1,a2,a3); #define Py_Return3 Py_Return3Args #define Py_Return4Args(format,a1,a2,a3) return Py_BuildValue(format,a1,a2,a3,a4); #define Py_Return5Args(format,a1,a2,a3) return Py_BuildValue(format,a1,a2,a3,a4,a5); #define Py_Return6Args(format,a1,a2,a3) return Py_BuildValue(format,a1,a2,a3,a4,a5,a6); #define Py_Return7Args(format,a1,a2,a3) return Py_BuildValue(format,a1,a2,a3,a4,a5,a6,a7); /* Build values */ #define Py_BuildNone() Py_NONE #define Py_Build(format,x) Py_BuildValue(format,x) #define Py_Build2(format,x,y) Py_BuildValue(format,x,y) #define Py_Build3(format,x,y,z) Py_BuildValue(format,x,y,z) /* --- Declaring Python builtin functions/methods ------------------------- */ /* The doc-string type changed to const char* in Python 2.5 */ #if PY_VERSION_HEX >= 0x02050000 # define Py_DOC_STRING_TYPE const char #else # define Py_DOC_STRING_TYPE char #endif /* Declare C function/method fct, having docstring docstr; may use vargargs */ #define Py_C_Function(fct,docstr) \ static Py_DOC_STRING_TYPE fct##_docstring[] = docstr;\ static PyObject *fct(PyObject *self, PyObject *args) /* Declare C function/method fct, having keywords keywordsarray and a docstring docstr; may use vargargs & keywords */ #define Py_C_Function_WithKeywords(fct,docstr) \ static Py_DOC_STRING_TYPE fct##_docstring[] = docstr;\ static PyObject *fct(PyObject *self, PyObject *args, PyObject *kws) /* These declare: self -- instance pointer for methods, NULL for functions args -- argument tuple kws -- keywords dict (if applicable) plus as statics: _docstring -- the docstring as given _keywords -- the keyword array as given Note: use the Py_GetArg macros for functions without keywords, and Py_KeywordGetArg macros for functions with keywords */ /* --- Method list entries for builtin functions/methods ------------------ */ /* Add a C function/method cname to the module dict as pyname; no doc-string */ #define Py_MethodListEntryAny(pyname,cname) {pyname,(PyCFunction)cname,METH_VARARGS} /* Add a C function/method cname to the module dict as pyname; the function can use varargs */ #define Py_MethodListEntry(pyname,cname) {pyname,(PyCFunction)cname,METH_VARARGS,cname##_docstring} /* Add a C function/method cname to the module dict as pyname; the function takes no args; in Python 2.3 a new flag was added for these which implements the no args check in the interpreter itself. */ #ifdef METH_NOARGS # define Py_MethodListEntryNoArgs(pyname,cname) {pyname,(PyCFunction)cname,METH_NOARGS,cname##_docstring} #else # define Py_MethodListEntryNoArgs(pyname,cname) {pyname,(PyCFunction)cname,0,cname##_docstring} #endif /* Add a C function/method cname to the module dict as pyname; the function takes one argument: the object is passed in directly (without wrapping it into a tuple first), i.e. don't use the Py_GetArg-macros or PyArg_ParseTuple(). */ #define Py_MethodListEntrySingleArg(pyname,cname) {pyname,(PyCFunction)cname,0,cname##_docstring} /* Add a C function/method that uses keywords to the module dict */ #define Py_MethodWithKeywordsListEntry(pyname,cname) {pyname,(PyCFunction)cname,METH_VARARGS | METH_KEYWORDS,cname##_docstring} /* --- Sequence slicing --------------------------------------------------- */ /* Check a given slice and apply the usual rules for negative indices */ #define Py_CheckSequenceSlice(len,start,stop) { \ if (stop > len) \ stop = len; \ else { \ if (stop < 0) \ stop += len; \ if (stop < 0) \ stop = 0; \ } \ if (start < 0) { \ start += len; \ if (start < 0) \ start = 0; \ } \ if (stop < start) \ start = stop; \ } /* --- Number macros ------------------------------------------------------ */ /* Test for PyFloat_AsDouble() compatible object */ #define PyFloat_Compatible(obj) \ (PyInstance_Check(obj) \ ? PyObject_HasAttrString(obj, "__float__") \ : (obj->ob_type->tp_as_number != NULL && \ obj->ob_type->tp_as_number->nb_float != NULL)) /* --- Text macros -------------------------------------------------------- */ /* Check a given text slice and apply the usual rules for negative indices */ #define Py_CheckBufferSlice(textlen,start,stop) \ Py_CheckSequenceSlice(textlen,start,stop) /* Dito for string objects */ #define Py_CheckStringSlice(textobj,start,stop) \ Py_CheckSequenceSlice(PyString_GET_SIZE(textobj),start,stop) /* For b/w compatibility */ #define Py_CheckSlice(textobj,start,stop) \ Py_CheckStringSlice(textobj,start,stop) /* Dito for Unicode objects */ #ifdef PyUnicode_GET_SIZE # define Py_CheckUnicodeSlice(unicode,start,stop) \ Py_CheckSequenceSlice(PyUnicode_GET_SIZE(unicode),start,stop) #endif /* This assumes that fixed is a constant char array; the strcmp function is only called in case the attribute name length exceeds 10 characters and the first 10 characters match; optimizing compilers should eliminate any unused parts of this comparison automatically. Note: The latest egcs compiler warns about the subscripts being out of range for shorter fixed strings; since no code is generated for those comparisons, these warning can safely be ignored. Still, they are annoying. See the Py_StringsCompareEqual() macro below for a way to work around this. */ #define Py_StringsCompareEqualEx(var,fixed,fixedsize) \ (var[0] == fixed[0] && \ (fixed[0] == 0 || \ (fixedsize >= 1 && (var[1] == fixed[1] && \ (fixed[1] == 0 || \ (fixedsize >= 2 && (var[2] == fixed[2] && \ (fixed[2] == 0 || \ (fixedsize >= 3 && (var[3] == fixed[3] && \ (fixed[3] == 0 || \ (fixedsize >= 4 && (var[4] == fixed[4] && \ (fixed[4] == 0 || \ (fixedsize >= 5 && (var[5] == fixed[5] && \ (fixed[5] == 0 || \ (fixedsize >= 6 && (var[6] == fixed[6] && \ (fixed[6] == 0 || \ (fixedsize >= 7 && (var[7] == fixed[7] && \ (fixed[7] == 0 || \ (fixedsize >= 8 && (var[8] == fixed[8] && \ (fixed[8] == 0 || \ (fixedsize >= 9 && (var[9] == fixed[9] && \ (fixed[9] == 0 || \ (fixedsize >= 10 && \ strcmp(&var[10],&fixed[10]) == 0 \ )))))))))))))))))))))))))))))) /* This assumes that fixed is a constant char array. The appended string snippet is to shut up the warnings produced by newer egcs/gcc compilers about offsets being outside bounds. Note that some compilers do the inlining by themselves or don't like the above trick (OpenVMS is one such platform). For these we simply use the standard way. */ #ifndef __VMS # define Py_StringsCompareEqual(var,fixed) \ Py_StringsCompareEqualEx(var,fixed"\0\0\0\0\0\0\0\0\0\0",sizeof(fixed)) #else # define Py_StringsCompareEqual(var,fixed) (strcmp(var, fixed) == 0) #endif /* Fast character set member check; set must be a "static unsigned *char set" array of exactly 32 bytes length generated with TextTools.set() */ #define Py_CharInSet(chr,set) \ (((unsigned char)(set)[(unsigned char)(chr) >> 3] & \ (1 << ((unsigned char)(chr) & 7))) != 0) /* --- Macros for getattr ------------------------------------------------- */ /* Compares var to name and returns 1 iff they match. This assumes that name is a constant char array. */ #define Py_WantAttr(var,name) Py_StringsCompareEqual(var,name) /* --- Module init helpers ------------------------------------------------ */ /* Helper for startup type object initialization */ #define PyType_Init(x) \ { \ x.ob_type = &PyType_Type; \ Py_Assert(x.tp_basicsize >= (int)sizeof(PyObject), \ PyExc_SystemError, \ "Internal error: tp_basicsize of "#x" too small");\ if (PyType_Ready(&x) < 0) \ goto onError; \ } /* Error reporting for module init functions */ #define Py_ReportModuleInitError(modname) { \ PyObject *exc_type, *exc_value, *exc_tb; \ PyObject *str_type, *str_value; \ \ /* Fetch error objects and convert them to strings */ \ PyErr_Fetch(&exc_type, &exc_value, &exc_tb); \ if (exc_type && exc_value) { \ str_type = PyObject_Str(exc_type); \ str_value = PyObject_Str(exc_value); \ } \ else { \ str_type = NULL; \ str_value = NULL; \ } \ /* Try to format a more informative error message using the \ original error */ \ if (str_type && str_value && \ PyString_Check(str_type) && PyString_Check(str_value)) \ PyErr_Format( \ PyExc_ImportError, \ "initialization of module "modname" failed " \ "(%s:%s)", \ PyString_AS_STRING(str_type), \ PyString_AS_STRING(str_value)); \ else \ PyErr_SetString( \ PyExc_ImportError, \ "initialization of module "modname" failed"); \ Py_XDECREF(str_type); \ Py_XDECREF(str_value); \ Py_XDECREF(exc_type); \ Py_XDECREF(exc_value); \ Py_XDECREF(exc_tb); \ } /* --- SWIG addons -------------------------------------------------------- */ /* Throw this error after having set the correct Python exception using e.g. PyErr_SetString(); */ #define mxSWIGError "mxSWIGError" /* EOF */ #endif egenix-mx-base-3.2.7/mx/DateTime/mxDateTime/mxDateTime.c0000664000175000017500000044704312251400405022605 0ustar lemburglemburg/* mxDateTime -- Generic date/time types Copyright (c) 1997-2000, Marc-Andre Lemburg; mailto:mal@lemburg.com Copyright (c) 2000-2013, eGenix.com Software GmbH; mailto:info@egenix.com See the documentation for further copyright information or contact the author (mailto:mal@lemburg.com). XXX Update the "mixed" coercion hack when the number protocol changes to introduce new binary&ternary functions. */ /* Version number: Major.Minor.Patchlevel */ #define MXDATETIME_VERSION "3.2.7" /* Define this to aid in finding memory leaks */ /*#define MAL_MEM_DEBUG*/ /*#define MAL_DEBUG*/ /* Logging file used by debugging facility */ #ifndef MAL_DEBUG_OUTPUTFILE # define MAL_DEBUG_OUTPUTFILE "mxDateTime.log" #endif /* We want all our symbols to be exported */ #define MX_BUILDING_MXDATETIME /* Uncomment this to make the old interfaces available too */ /*#define OLD_INTERFACE*/ /* mx.DateTime can use its own API for querying the current time from the OS, or reuse the Python time.time() function. The latter is more portable, but slower. Define the following symbol to use the faster native API. */ /*#define USE_FAST_GETCURRENTTIME*/ /* Mark the module as Py_ssize_t clean. */ #define PY_SSIZE_T_CLEAN 1 /* Setup mxstdlib memory management */ #if 1 # define MAL_USE_PYMALLOC #else # define MAL_USE_C_MALLOC #endif /* Some additional switches are needed on some platforms to make strptime() and timegm() available. */ #ifndef _GNU_SOURCE # define _GNU_SOURCE 1 #endif #include "mx.h" #include "mxDateTime.h" #ifdef USE_FAST_GETCURRENTTIME /* Additional includes needed for native mxDateTime_GetCurrentTime() API */ # if defined(HAVE_SYS_TIME_H) && defined(TIME_WITH_SYS_TIME) # include # include # else # include # endif # ifdef HAVE_UNISTD_H # include # endif # ifdef HAVE_FTIME # include # endif #endif /* We need floor() and ceil() for ticks conversions. */ #include /* The module makes use of two functions called strftime() and strptime() for the conversion between strings and date/time values. Since not all C compilers know about these functions, you can turn these features on/off be defining the following symbols (if you ran the Python configuration script then it will provide this information for you -- on other platforms than Unix you may have to define them manually). */ /*#define HAVE_STRFTIME*/ /*#define HAVE_STRPTIME*/ /*#define HAVE_TIMEGM*/ /* The start size for output from strftime. */ #define STRFTIME_OUTPUT_SIZE 1024 /* Define these to have the module use free lists (saves malloc calls) */ #define MXDATETIME_FREELIST #define MXDATETIMEDELTA_FREELIST /* Define this to enable the copy-protocol (__copy__, __deepcopy__) */ #define COPY_PROTOCOL /* Define to have the seconds part rounded when assigning to tm_sec in tm structs; note that rounding can result in the seconds part to be displayed as 60 instead of wrapping to the next minute, hour, etc. */ /*#define ROUND_SECONDS_IN_TM_STRUCT*/ /* Define to make type subclassable. Note that this only works in Python 2.2 and above. */ /*#define WANT_SUBCLASSABLE_TYPES*/ /* For interop with the datetime module that's available in Python 2.3 and above (the C API got added in Python 2.4): */ #if PY_VERSION_HEX >= 0x02040000 # include "datetime.h" /* These checks try to avoid having to load the datetime module. Once it is loaded, the pointer-based fast type checks are applied. */ # define mx_PyDate_Check(op) \ (mxDateTime_PyDateTimeAPI_Initialized ? \ PyDate_Check((op)) : \ Py_StringsCompareEqual((op)->ob_type->tp_name, "datetime.date")) # define mx_PyDateTime_Check(op) \ (mxDateTime_PyDateTimeAPI_Initialized ? \ PyDateTime_Check((op)) : \ Py_StringsCompareEqual((op)->ob_type->tp_name, "datetime.datetime")) # define mx_PyTime_Check(op) \ (mxDateTime_PyDateTimeAPI_Initialized ? \ PyTime_Check((op)) : \ Py_StringsCompareEqual((op)->ob_type->tp_name, "datetime.time")) # define mx_PyDelta_Check(op) \ (mxDateTime_PyDateTimeAPI_Initialized ? \ PyDelta_Check((op)) : \ Py_StringsCompareEqual((op)->ob_type->tp_name, "datetime.timedelta")) /* datetime.h doesn't provide a macro for this... */ # define mx_PyDeltaInSeconds(x) \ (((PyDateTime_Delta *)x)->days * SECONDS_PER_DAY \ + (double)((PyDateTime_Delta *)x)->seconds \ + (double)((PyDateTime_Delta *)x)->microseconds * 1e-6) /* This is a helper for working with time objects */ # define mx_PyTimeInSeconds(x) \ ((double)(PyDateTime_TIME_GET_HOUR(x) * 3600 \ + PyDateTime_TIME_GET_MINUTE(x) * 60 \ + PyDateTime_TIME_GET_SECOND(x)) \ + (double)PyDateTime_TIME_GET_MICROSECOND(x) * 1e-6) /* Flag telling us whether the datetime API struct was initialized or not. */ static int mxDateTime_PyDateTimeAPI_Initialized = 0; /* Helper to reset the PyDateTimeAPI (the global itself is defined in datetime.h) */ static int mx_Reset_PyDateTimeAPI(void) { mxDateTime_PyDateTimeAPI_Initialized = 0; return 0; } /* Helper to make sure the PyDateTimeAPI is loaded */ static int mx_Require_PyDateTimeAPI(void) { if (mxDateTime_PyDateTimeAPI_Initialized && PyDateTimeAPI) /* Already initialized */ return 0; /* Init the PyDateTimeAPI global */ PyDateTime_IMPORT; if (!PyDateTimeAPI) goto onError; mxDateTime_PyDateTimeAPI_Initialized = 1; return 0; onError: return -1; } /* Helper to lazily init the PyDateTimeAPI. */ static int mx_Init_PyDateTimeAPI(void) { PyObject *sys_modules, *datetime_module; /* Make sure that the pointer is reset when initializing the C API */ mx_Reset_PyDateTimeAPI(); /* Check sys.modules for the datetime module and load the API if the module is present */ sys_modules = PySys_GetObject("modules"); if (sys_modules) { DPRINTF("mx_Init_PyDateTimeAPI(): found sys.modules\n"); datetime_module = PyDict_GetItemString(sys_modules, "datetime"); if (datetime_module) { DPRINTF("mx_Init_PyDateTimeAPI(): datetime module loaded; " "loading the C API\n"); /* Init the PyDateTimeAPI global */ if (mx_Require_PyDateTimeAPI()) goto onError; } else { DPRINTF("mx_Init_PyDateTimeAPI(): " "datetime module not (yet) loaded"); PyErr_Clear(); } } else DPRINTF("mx_Init_PyDateTimeAPI(): could not find sys.modules\n"); return 0; onError: return -1; } # define HAVE_PYDATETIME 1 #endif /* --- configuration checks ----------------------------------------------- */ #if PY_VERSION_HEX < 0x02020000 # undef WANT_SUBCLASSABLE_TYPES #endif /* --- module helpers ----------------------------------------------------- */ /* Seconds in a day (as double) */ #define SECONDS_PER_DAY ((double) 86400.0) /* abstime value limit (as double). The limit itself does not belong to the range of accepted values. Includes one leap second per day. */ #define MAX_ABSTIME_VALUE ((double) 86401.0) /* Test for negativeness of doubles */ #define DOUBLE_IS_NEGATIVE(x) ((x) < (double) 0.0) /* Swap the comparison op to adjust for swapped arguments */ static int _swapped_args_richcompare_op[6] = { Py_GT, Py_GE, Py_EQ, Py_NE, Py_LT, Py_LE, }; #define SWAPPED_ARGS_RICHCOMPARE_OP(op) _swapped_args_richcompare_op[op] /* --- module doc-string -------------------------------------------------- */ static char *Module_docstring = MXDATETIME_MODULE" -- Generic date/time types. Version "MXDATETIME_VERSION"\n\n" "Copyright (c) 1997-2000, Marc-Andre Lemburg; mailto:mal@lemburg.com\n" "Copyright (c) 2000-2013, eGenix.com Software GmbH; mailto:info@egenix.com\n\n" " All Rights Reserved\n\n" "See the documentation for further information on copyrights,\n" "or contact the author." ; /* --- module globals ----------------------------------------------------- */ static PyObject *mxDateTime_Error; /* Error Exception object */ static PyObject *mxDateTime_RangeError; /* RangeError Exception object */ static PyObject *mxDateTime_GregorianCalendar; /* String 'Gregorian' */ static PyObject *mxDateTime_JulianCalendar; /* String 'Julian' */ static int mxDateTime_POSIXConform = 0; /* Does the system use POSIX time_t values ? */ static int mxDateTime_DoubleStackProblem = 0; /* Does the system have a problem passing doubles on the stack ? */ /* Table with day offsets for each month (0-based, without and with leap) */ static int month_offset[2][13] = { { 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365 }, { 0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335, 366 } }; /* Table of number of days in a month (0-based, without and with leap) */ static int days_in_month[2][12] = { { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }, { 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 } }; /* Free lists for DateTime and DateTimeDelta objects */ #ifdef MXDATETIME_FREELIST static mxDateTimeObject *mxDateTime_FreeList = NULL; #endif #ifdef MXDATETIMEDELTA_FREELIST static mxDateTimeDeltaObject *mxDateTimeDelta_FreeList = NULL; #endif /* This must be a callable function that returns the current local time in Unix ticks. It is set by the mxDateTime/__init__.py module to the standard Python time.time() function. */ static PyObject *mxDateTime_nowapi = NULL; /* Flag telling us whether the module was initialized or not. */ static int mxDateTime_Initialized = 0; /* --- forward declarations ----------------------------------------------- */ staticforward PyTypeObject mxDateTime_Type; staticforward PyMethodDef mxDateTime_Methods[]; staticforward PyTypeObject mxDateTimeDelta_Type; staticforward PyMethodDef mxDateTimeDelta_Methods[]; staticforward PyObject *mxDateTimeDelta_FromDaysEx(long days, double seconds); staticforward PyObject *mxDateTimeDelta_FromSeconds(double seconds); /* --- internal macros ---------------------------------------------------- */ #ifndef WANT_SUBCLASSABLE_TYPES #define _mxDateTime_Check(v) \ (((mxDateTimeObject *)(v))->ob_type == &mxDateTime_Type) #define _mxDateTimeDelta_Check(v) \ (((mxDateTimeDeltaObject *)(v))->ob_type == \ &mxDateTimeDelta_Type) #define _mxDateTime_CheckExact(v) _mxDateTime_Check(v) #define _mxDateTimeDelta_CheckExact(v) _mxDateTimeDelta_Check(v) #else #define _mxDateTime_Check(v) \ PyObject_TypeCheck(v, &mxDateTime_Type) #define _mxDateTimeDelta_Check(v) \ PyObject_TypeCheck(v, &mxDateTimeDelta_Type) #define _mxDateTime_CheckExact(v) \ (((mxDateTimeObject *)(v))->ob_type == &mxDateTime_Type) #define _mxDateTimeDelta_CheckExact(v) \ (((mxDateTimeDeltaObject *)(v))->ob_type == \ &mxDateTimeDelta_Type) #endif /* --- module helpers ----------------------------------------------------- */ /* Create an exception object, insert it into the module dictionary under the given name and return the object pointer; this is NULL in case an error occurred. base can be given to indicate the base object to be used by the exception object. It should be NULL otherwise */ static PyObject *insexc(PyObject *moddict, char *name, PyObject *base) { PyObject *v; char fullname[256]; char *modname; char *dot; v = PyDict_GetItemString(moddict, "__name__"); if (v == NULL) modname = NULL; else modname = PyString_AsString(v); if (modname == NULL) { PyErr_Clear(); modname = MXDATETIME_MODULE; } /* The symbols from this extension are imported into mx.. We trim the name to not confuse the user with an overly long package path. */ strcpy(fullname, modname); dot = strchr(fullname, '.'); if (dot) dot = strchr(dot+1, '.'); if (dot) strcpy(dot+1, name); else sprintf(fullname, "%s.%s", modname, name); v = PyErr_NewException(fullname, base, NULL); if (v == NULL) return NULL; if (PyDict_SetItemString(moddict,name,v)) return NULL; return v; } /* Helper for adding integer constants to a dictionary. Check for errors with PyErr_Occurred() */ static void insint(PyObject *dict, char *name, int value) { PyObject *v = PyInt_FromLong((long)value); PyDict_SetItemString(dict, name, v); Py_XDECREF(v); } #if 0 /* Helper for adding string constants to a dictionary. Check for errors with PyErr_Occurred() */ static void insstr(PyObject *dict, char *name, char *value) { PyObject *v = PyString_FromString(value); PyDict_SetItemString(dict, name, v); Py_XDECREF(v); } #endif /* Helper for adding objects to dictionaries. Check for errors with PyErr_Occurred() */ static void insobj(PyObject *dict, char *name, PyObject *v) { PyDict_SetItemString(dict, name, v); Py_XDECREF(v); } static PyObject *notimplemented1(PyObject *v) { Py_Error(PyExc_TypeError, "operation not implemented"); onError: return NULL; } static PyObject *notimplemented2(PyObject *v, PyObject *w) { Py_Error(PyExc_TypeError, "operation not implemented"); onError: return NULL; } static PyObject *notimplemented3(PyObject *u, PyObject *v, PyObject *w) { Py_Error(PyExc_TypeError, "operation not implemented"); onError: return NULL; } /* --- DateTime Object -------------------------------------------------*/ /* --- allocation --- */ static mxDateTimeObject *mxDateTime_New(void) { mxDateTimeObject *datetime; #ifdef MXDATETIME_FREELIST if (mxDateTime_FreeList) { datetime = mxDateTime_FreeList; mxDateTime_FreeList = *(mxDateTimeObject **)mxDateTime_FreeList; datetime->ob_type = &mxDateTime_Type; _Py_NewReference(datetime); } else #endif { datetime = PyObject_NEW(mxDateTimeObject,&mxDateTime_Type); if (datetime == NULL) return NULL; } return datetime; } /* --- deallocation --- */ static void mxDateTime_Free(mxDateTimeObject *datetime) { #ifdef MXDATETIME_FREELIST /* Append mxDateTime objects to free list */ # ifdef WANT_SUBCLASSABLE_TYPES if (_mxDateTime_CheckExact(datetime)) # endif { *(mxDateTimeObject **)datetime = mxDateTime_FreeList; mxDateTime_FreeList = datetime; } #else PyObject_Del(datetime); #endif } #ifdef WANT_SUBCLASSABLE_TYPES static void mxDateTime_Deallocate(mxDateTimeObject *datetime) { datetime->ob_type->tp_free((PyObject *)datetime); } #endif /* --- internal functions --- */ #ifdef USE_FAST_GETCURRENTTIME /* Returns the current time in Unix ticks. The function tries to use the most accurate API available on the system. -1.0 is returned in case of an error. */ static double mxDateTime_GetCurrentTime(void) { # if defined(HAVE_CLOCK_GETTIME) /* Use clock_gettime(), which has ns resolution */ struct timespec ts; if (!clock_gettime(CLOCK_REALTIME, &ts)) return ((double)ts.tv_sec + (double)ts.tv_nsec * 1e-9); else return -1.0; # elif defined(HAVE_GETTIMEOFDAY) /* Use gettimeofday(), which has us resolution */ struct timeval tv; # ifdef GETTIMEOFDAY_NO_TZ if (!gettimeofday(&tv)) # else if (!gettimeofday(&tv, 0)) # endif return ((double)tv.tv_sec + (double)tv.tv_usec * 1e-6); else return -1.0; # elif defined(HAVE_FTIME) /* Use ftime(), which provides ms resolution */ struct timeb tb; ftime(&tb); return ((double)tb.time + (double)tb.millitm * 1e-3); # else /* Use time(), which usually only has seconds resolution */ time_t ticks; time(&ticks); return (double) ticks; # endif } /* Try to determine the clock resolution. */ static double mxDateTime_GetClockResolution(void) { # if defined(HAVE_CLOCK_GETTIME) # if defined(HAVE_CLOCK_GETRES) /* clock_gettime() is supposed to have ns resolution, but apparently this is not true on all systems. */ struct timespec ts; if (!clock_getres(CLOCK_REALTIME, &ts)) return ((double)ts.tv_sec + (double)ts.tv_nsec * 1e-9); else return -1.0; # else /* We'll have to believe the man-page */ return 1e-9; # endif # elif defined(HAVE_GETTIMEOFDAY) /* gettimeofday() has us resolution according to the man-page */ return 1e-6; # elif defined(HAVE_FTIME) /* ftime() provides ms resolution according to the man-page*/ return 1e-3; # else /* time() usually only has seconds resolution */ return 1.0; # endif } #else /* Get the current time in Unix ticks. This function reuses the time.time() of the Python time module, which is more portable but is slower than the above implementation. */ static double mxDateTime_GetCurrentTime(void) { double fticks; PyObject *v; /* Call the mxDateTime_nowapi function and use its return value as basis for the DateTime instance's value. */ if (mxDateTime_nowapi == NULL) Py_Error(mxDateTime_Error, "no current time API set"); v = PyEval_CallObject(mxDateTime_nowapi, NULL); if (!v) goto onError; fticks = PyFloat_AsDouble(v); Py_DECREF(v); if (fticks == -1.0 && PyErr_Occurred()) goto onError; #if 0 /* Round to the nearest micro-second: we use the same approach taken in the builtin round(). */ fticks *= 1e6; if (DOUBLE_IS_NEGATIVE(fticks)) fticks = ceil(fticks - 0.5); else fticks = floor(fticks + 0.5); fticks /= 1e6; #endif return fticks; onError: return -1.0; } #endif /* Fix a second value for display as string. Seconds are rounded to the nearest microsecond in order to avoid cases where e.g. 3.42 gets displayed as 03.41 or 3.425 is diplayed as 03.42. Special care is taken for second values which would cause rounding to 60.00 -- these values are truncated to 59.99 to avoid the value of 60.00 due to rounding to show up even when the indictated time does not point to a leap second. The same is applied for rounding towards 61.00 (leap seconds). The second value returned by this function should be formatted using '%05.2f' (which rounds to 2 decimal places). */ static double mxDateTime_FixSecondDisplay(register double second) { /* Special case for rounding towards 60. */ if (second >= 59.995 && second < 60.0) return 59.99; /* Special case for rounding towards 61. */ if (second >= 60.995 && second < 61.0) return 60.99; /* Round to the nearest microsecond */ second = (second * 1e6 + 0.5) / 1e6; return second; } /* This function checks whether the system uses the POSIX time_t rules (which do not support leap seconds) or a time package with leap second support enabled. Return 1 if it uses POSIX time_t values, 0 otherwise. POSIX: 1986-12-31 23:59:59 UTC == 536457599 With leap seconds: == 536457612 (since there were 13 leapseconds in the years 1972-1985 according to the tz package available from ftp://elsie.nci.nih.gov/pub/) */ static int mxDateTime_POSIX(void) { time_t ticks = 536457599; struct tm *tm; memset(&tm,0,sizeof(tm)); tm = gmtime(&ticks); if (tm == NULL) return 0; if (tm->tm_hour == 23 && tm->tm_min == 59 && tm->tm_sec == 59 && tm->tm_mday == 31 && tm->tm_mon == 11 && tm->tm_year == 86) return 1; else return 0; } static int mxDateTime_CheckDoubleStackProblem(double value) { if (value == SECONDS_PER_DAY) return 1; else return 0; } #ifndef HAVE_TIMEGM /* Calculates the conversion of the datetime instance to Unix ticks. For instances pointing to localtime, localticks will hold the corresponding Unix ticks value. In case the instance points to GMT time, gmticks will hold the correct ticks value. In both cases, gmtoffset will hold the GMT offset (local-GMT). Returns -1 (and sets an exception) to indicate errors; 0 otherwise. Note: There's some integer rounding error in the mktime() function that triggers near MAXINT on Solaris. The error was reported by Joe Van Andel among others: Ooops: 2038-01-18 22:52:31.00 t = 2147467951 diff = -4294857600.0 On 64-bit Alphas running DEC OSF, Tony Ibbs reports: Ooops: 1901-12-13 21:57:57.00 t = 2147487973 diff = -4294967296.0 ...(the diffs stay the same)... Ooops: 1969-12-31 10:10:54.00 t = 4294917550 diff = -4294967296.0 Note the years ! Some rollover is happening near 2^31-1 even though Alphas happen to use 64-bits. This could be a bug in this function or in DEC's mktime() implementation. */ static int mxDateTime_CalcTicks(mxDateTimeObject *datetime, double *localticks, double *gmticks, double *gmtoffset) { struct tm tm; struct tm *gmt; time_t ticks; double offset; Py_Assert(datetime->calendar == MXDATETIME_GREGORIAN_CALENDAR, mxDateTime_Error, "can only convert the Gregorian calendar to ticks"); Py_Assert((long)((int)datetime->year) == datetime->year, mxDateTime_RangeError, "year out of range for ticks conversion"); /* Calculate floor()ed ticks value */ memset(&tm,0,sizeof(tm)); tm.tm_hour = (int)datetime->hour; tm.tm_min = (int)datetime->minute; tm.tm_sec = (int)datetime->second; tm.tm_mday = (int)datetime->day; tm.tm_mon = (int)datetime->month - 1; tm.tm_year = (int)datetime->year - 1900; tm.tm_wday = -1; tm.tm_yday = (int)datetime->day_of_year - 1; tm.tm_isdst = -1; /* unknown */ ticks = mktime(&tm); if (ticks == (time_t)-1 && tm.tm_wday == -1) { /* XXX Hack to allow conversion during DST switching. */ tm.tm_hour = 0; tm.tm_min = 0; tm.tm_sec = 0; ticks = mktime(&tm); if (ticks == (time_t)-1 && tm.tm_wday == -1) Py_Error(mxDateTime_Error, "cannot convert value to a Unix ticks value"); ticks += ((int)datetime->hour * 3600 + (int)datetime->minute * 60 + (int)datetime->second); } /* Add fraction for localticks */ *localticks = ((double)ticks + (datetime->abstime - floor(datetime->abstime))); /* Now compare local time and GMT time */ gmt = gmtime(&ticks); if (gmt == NULL) Py_Error(mxDateTime_Error, "cannot convert value to a Unix ticks value"); /* Check whether we have the same day and prepare offset */ if (gmt->tm_mday != tm.tm_mday) { double localdate = (tm.tm_year * 10000 + tm.tm_mon * 100 + tm.tm_mday); double gmdate = (gmt->tm_year * 10000 + gmt->tm_mon * 100 + gmt->tm_mday); if (localdate < gmdate) offset = -SECONDS_PER_DAY; else offset = SECONDS_PER_DAY; } else offset = 0.0; /* Calculate difference in seconds */ offset += ((datetime->hour - gmt->tm_hour) * 3600.0 + (datetime->minute - gmt->tm_min) * 60.0 + (floor(datetime->second) - (double)gmt->tm_sec)); *gmtoffset = offset; *gmticks = *localticks + offset; return 0; onError: return -1; } #endif /* These functions work for positive *and* negative years for compilers which round towards zero and ones that always round down to the nearest integer. */ /* Return 1/0 iff year points to a leap year in calendar. */ static int mxDateTime_Leapyear(register long year, int calendar) { if (calendar == MXDATETIME_GREGORIAN_CALENDAR) return (year % 4 == 0) && ((year % 100 != 0) || (year % 400 == 0)); else return (year % 4 == 0); } /* Return the day of the week for the given absolute date. */ static int mxDateTime_DayOfWeek(register long absdate) { int day_of_week; if (absdate >= 1) day_of_week = (absdate - 1) % 7; else day_of_week = 6 - ((-absdate) % 7); return day_of_week; } /* Return the year offset, that is the absolute date of the day 31.12.(year-1) in the given calendar. For the Julian calendar we shift the absdate (which is measured using the Gregorian Epoch) value by two days because the Epoch (0001-01-01) in the Julian calendar lies 2 days before the Epoch in the Gregorian calendar. Years around the Epoch (mathematical approach, not necessarily historically correct): Year 0005 (5 AD) - yearoffset: 1461,not a leap year Year 0004 (4 AD) - yearoffset: 1095,leap year Year 0003 (3 AD) - yearoffset: 730, not a leap year Year 0002 (2 AD) - yearoffset: 365, not a leap year Year 0001 (1 AD) - yearoffset: 0, not a leap year Year 0000 (1 BC) - yearoffset: -366, leap year Year -0001 (2 BC) - yearoffset: -731, not a leap year Year -0002 (3 BC) - yearoffset: -1096, not a leap year Year -0003 (4 BC) - yearoffset: -1461, not a leap year Year -0004 (5 BC) - yearoffset: -1827, leap year Year -0005 (6 BC) - yearoffset: -2192, not a leap year */ static long mxDateTime_YearOffset(register long year, int calendar) { if (year >= 1) { /* For years >= 1, we can simply count the number of days between the Epoch and the given year */ year--; if (calendar == MXDATETIME_GREGORIAN_CALENDAR) return year*365 + year/4 - year/100 + year/400; else if (calendar == MXDATETIME_JULIAN_CALENDAR) return year*365 + year/4 - 2; else { Py_Error(mxDateTime_Error, "unknown calendar"); } } else { /* For years <= 0, we need to reverse the sign of the year (to avoid integer rounding issues with negative numbers on some platforms) and compensate for the year 0 being a leap year */ year = -year; if (calendar == MXDATETIME_GREGORIAN_CALENDAR) return -(year*365 + year/4 - year/100 + year/400) - 366; else if (calendar == MXDATETIME_JULIAN_CALENDAR) return -(year*365 + year/4) - 366 - 2; else { Py_Error(mxDateTime_Error, "unknown calendar"); } } onError: return -1; } /* Normalize the data and calculate the absolute date, year offset and whether the year is a leap year or not. Returns -1 in case of an error, 0 otherwise. */ static int mxDateTime_NormalizedDate(long year, int month, int day, int calendar, long *absdate_output, long *yearoffset_output, int *leap_output, long *normalized_year, int *normalized_month, int *normalized_day) { int leap; long yearoffset, absdate; /* Range check */ Py_AssertWithArg(year > -(LONG_MAX / 366) && year < (LONG_MAX / 366), mxDateTime_RangeError, "year out of range: %ld", year); /* Is it a leap year ? */ leap = mxDateTime_Leapyear(year, calendar); /* Negative month values indicate months relative to the years end */ if (month < 0) month += 13; Py_AssertWithArg(month >= 1 && month <= 12, mxDateTime_RangeError, "month out of range (1-12): %i", month); /* Negative values indicate days relative to the months end */ if (day < 0) day += days_in_month[leap][month - 1] + 1; Py_AssertWithArg(day >= 1 && day <= days_in_month[leap][month - 1], mxDateTime_RangeError, "day out of range: %i", day); yearoffset = mxDateTime_YearOffset(year, calendar); if (yearoffset == -1 && PyErr_Occurred()) goto onError; absdate = day + month_offset[leap][month - 1] + yearoffset; DPRINTF("mxDateTime_NormalizedDate: " "year=%ld month=%i day=%i yearoffset=%ld leap=%i absdate=%ld\n", year, month, day, yearoffset, leap, absdate); if (absdate_output) *absdate_output = absdate; if (yearoffset_output) *yearoffset_output = yearoffset; if (leap_output) *leap_output = leap; if (normalized_year) *normalized_year = year; if (normalized_month) *normalized_month = month; if (normalized_day) *normalized_day = day; return 0; onError: return -1; } #ifdef HAVE_PYDATETIME /* Note: This API is currently only used to support datetime module interaction */ /* Return the absolute date of the given date in absdate. Returns -1 in case of an error, 0 otherwise. */ static int mxDateTime_AbsDate(register long year, register int month, register int day, int calendar, long *absdate) { return mxDateTime_NormalizedDate(year, month, day, calendar, absdate, NULL, NULL, NULL, NULL, NULL); } #endif /* Sets the date part of the DateTime object using the indicated calendar. XXX This could also be done using some integer arithmetics rather than with this iterative approach... */ static int mxDateTime_SetFromAbsDate(register mxDateTimeObject *datetime, long absdate, int calendar) { register long year; long yearoffset; int leap, dayoffset; int *monthoffset; DPRINTF("mxDateTime_SetFromAbsDate(datetime=%x,absdate=%ld,calendar=%i)\n", datetime,absdate,calendar); /* Approximate year */ if (calendar == MXDATETIME_GREGORIAN_CALENDAR) year = (long)(((double)absdate) / 365.2425); else if (calendar == MXDATETIME_JULIAN_CALENDAR) year = (long)(((double)absdate) / 365.25); else Py_Error(mxDateTime_Error, "unknown calendar"); if (absdate > 0) year++; /* Apply corrections to reach the correct year */ while (1) { /* Calculate the year offset */ yearoffset = mxDateTime_YearOffset(year, calendar); if (yearoffset == -1 && PyErr_Occurred()) goto onError; DPRINTF(" trying year = %ld yearoffset = %ld\n", year, yearoffset); /* Backward correction: absdate must be greater than the yearoffset */ if (yearoffset >= absdate) { year--; DPRINTF(" backward correction\n"); continue; } dayoffset = absdate - yearoffset; leap = mxDateTime_Leapyear(year, calendar); /* Forward correction: years only have 365/366 days */ if (dayoffset > 365) { if (leap && dayoffset > 366) { year++; DPRINTF(" forward correction (leap year)\n"); continue; } else if (!leap) { year++; DPRINTF(" forward correction (non-leap year)\n"); continue; } } /* Done */ DPRINTF(" using year = %ld leap = %i dayoffset = %i\n", year,leap,dayoffset); break; } datetime->year = year; datetime->calendar = calendar; /* Now iterate to find the month */ monthoffset = month_offset[leap]; { register int month; for (month = 1; month < 13; month++) if (monthoffset[month] >= dayoffset) break; datetime->month = month; datetime->day = dayoffset - month_offset[leap][month-1]; } datetime->day_of_week = mxDateTime_DayOfWeek(absdate); datetime->day_of_year = dayoffset; return 0; onError: return -1; } /* Sets the time part of the DateTime object. */ static int mxDateTime_SetFromAbsTime(mxDateTimeObject *datetime, double abstime) { int inttime; int hour,minute; double second; DPRINTF("mxDateTime_SetFromAbsTime(datetime=%x,abstime=%.20f)\n", (long)datetime,abstime); inttime = (int)abstime; if (inttime == 86400) { /* Special case for leap seconds */ hour = 23; minute = 59; second = 60.0 + abstime - (double)inttime; } else { hour = inttime / 3600; minute = (inttime % 3600) / 60; second = abstime - (double)(hour*3600 + minute*60); } datetime->hour = hour; datetime->minute = minute; datetime->second = second; return 0; } /* Set the instance's value using the given date and time. calendar may be set to the flags: MXDATETIME_GREGORIAN_CALENDAR, MXDATETIME_JULIAN_CALENDAR to indicate the calendar to be used. */ static int mxDateTime_SetFromDateAndTime(mxDateTimeObject *datetime, long year, int month, int day, int hour, int minute, double second, int calendar) { double comdate; if (datetime == NULL) { PyErr_BadInternalCall(); goto onError; } DPRINTF("mxDateTime_SetFromDateAndTime(" "datetime=%x year=%ld month=%i day=%i " "hour=%i minute=%i second=%f calendar=%i)\n", datetime,year,month,day,hour,minute,second,calendar); /* Calculate the absolute date */ { long yearoffset,absdate; if (mxDateTime_NormalizedDate(year, month, day, calendar, &absdate, &yearoffset, NULL, &year, &month, &day)) goto onError; DPRINTF("mxDateTime_SetFromDateAndTime: " "yearoffset=%ld absdate=%ld " "year=%ld month=%i day=%i (normalized)\n", yearoffset,absdate, year,month,day); datetime->absdate = absdate; datetime->year = year; datetime->month = month; datetime->day = day; datetime->day_of_week = mxDateTime_DayOfWeek(absdate); datetime->day_of_year = (short)(absdate - yearoffset); datetime->calendar = calendar; comdate = (double)absdate - 693594.0; } /* Calculate the absolute time */ { Py_AssertWithArg(hour >= 0 && hour <= 23, mxDateTime_RangeError, "hour out of range (0-23): %i", hour); Py_AssertWithArg(minute >= 0 && minute <= 59, mxDateTime_RangeError, "minute out of range (0-59): %i", minute); Py_AssertWithArg(second >= (double)0.0 && (second < (double)60.0 || (hour == 23 && minute == 59 && second < (double)61.0)), mxDateTime_RangeError, "second out of range (0.0 - <60.0; <61.0 for 23:59): %i", (int)second); datetime->abstime = (double)(hour*3600 + minute*60) + second; datetime->hour = hour; datetime->minute = minute; datetime->second = second; if (DOUBLE_IS_NEGATIVE(comdate)) comdate -= datetime->abstime / SECONDS_PER_DAY; else comdate += datetime->abstime / SECONDS_PER_DAY; datetime->comdate = comdate; } return 0; onError: return -1; } /* Set the instance's value using the given absolute date and time. The calendar used is the Gregorian. */ static int mxDateTime_SetFromAbsDateTime(mxDateTimeObject *datetime, long absdate, double abstime, int calendar) { if (datetime == NULL) { PyErr_BadInternalCall(); goto onError; } DPRINTF("mxDateTime_SetFromAbsDateTime(datetime=%x," "absdate=%ld,abstime=%.20f,calendar=%i)\n", datetime,absdate,abstime,calendar); DPRINTF("mxDateTime_SetFromAbsDateTime: " "abstime is %.20f, diff %.20f, as int %i\n", abstime, abstime - SECONDS_PER_DAY, (int)abstime); /* Bounds check */ Py_AssertWithArg(abstime >= 0.0 && abstime < MAX_ABSTIME_VALUE, mxDateTime_RangeError, "abstime out of range (0.0 - <86401.0): %i", (int)abstime); datetime->absdate = absdate; datetime->abstime = abstime; /* Calculate COM date */ { register double comdate; comdate = (double)(datetime->absdate - 693594); if (DOUBLE_IS_NEGATIVE(comdate)) comdate -= datetime->abstime / SECONDS_PER_DAY; else comdate += datetime->abstime / SECONDS_PER_DAY; datetime->comdate = comdate; } /* Calculate the date */ if (mxDateTime_SetFromAbsDate(datetime, datetime->absdate, calendar)) goto onError; /* Calculate the time */ if (mxDateTime_SetFromAbsTime(datetime, datetime->abstime)) goto onError; return 0; onError: return -1; } /* Set the instance's value using the given Windows COM date. The calendar used is the Gregorian. */ static int mxDateTime_SetFromCOMDate(mxDateTimeObject *datetime, double comdate) { long absdate; double abstime; if (datetime == NULL) { PyErr_BadInternalCall(); goto onError; } datetime->comdate = comdate; /* XXX should provide other means to calculate the broken down values for these huge values. */ Py_AssertWithArg(-(double)LONG_MAX <= comdate && comdate <= (double)LONG_MAX, mxDateTime_RangeError, "DateTime COM date out of range: %i", (int)comdate); absdate = (long)comdate; abstime = (comdate - (double)absdate) * SECONDS_PER_DAY; if (DOUBLE_IS_NEGATIVE(abstime)) abstime = -abstime; absdate += 693594; DPRINTF("mxDateTime_SetFromCOMDate: absdate=%ld abstime=%f\n", absdate,abstime); datetime->absdate = absdate; datetime->abstime = abstime; /* Calculate the date */ if (mxDateTime_SetFromAbsDate(datetime, absdate, MXDATETIME_GREGORIAN_CALENDAR)) goto onError; /* Calculate the time */ if (mxDateTime_SetFromAbsTime(datetime, abstime)) goto onError; return 0; onError: return -1; } /* --- API functions --- */ static PyObject *mxDateTime_FromDateAndTime(long year, int month, int day, int hour, int minute, double second) { mxDateTimeObject *datetime; datetime = mxDateTime_New(); if (datetime == NULL) return NULL; if (mxDateTime_SetFromDateAndTime(datetime, year,month,day, hour,minute,second, MXDATETIME_GREGORIAN_CALENDAR)) goto onError; return (PyObject *)datetime; onError: mxDateTime_Free(datetime); return NULL; } /* Alias */ #define mxDateTime_FromGregorianDateAndTime mxDateTime_FromDateAndTime static PyObject *mxDateTime_FromJulianDateAndTime(long year, int month, int day, int hour, int minute, double second) { mxDateTimeObject *datetime; datetime = mxDateTime_New(); if (datetime == NULL) return NULL; if (mxDateTime_SetFromDateAndTime(datetime, year,month,day, hour,minute,second, MXDATETIME_JULIAN_CALENDAR)) goto onError; return (PyObject *)datetime; onError: mxDateTime_Free(datetime); return NULL; } static PyObject *mxDateTime_FromAbsDateAndTime(long absdate, double abstime) { mxDateTimeObject *datetime; datetime = mxDateTime_New(); if (datetime == NULL) return NULL; if (mxDateTime_SetFromAbsDateTime(datetime, absdate, abstime, MXDATETIME_GREGORIAN_CALENDAR)) goto onError; return (PyObject *)datetime; onError: mxDateTime_Free(datetime); return NULL; } static PyObject *mxDateTime_FromAbsDateTime(long absdate, double abstime, int calendar) { mxDateTimeObject *datetime; datetime = mxDateTime_New(); if (datetime == NULL) return NULL; if (mxDateTime_SetFromAbsDateTime(datetime, absdate, abstime, calendar)) goto onError; return (PyObject *)datetime; onError: mxDateTime_Free(datetime); return NULL; } /* Creates a new DateTime instance using datetime as basis by adding the given offsets to the value of datetime and then re-normalizing them. The resulting DateTime instance will use the same calendar as datetime. */ static PyObject *mxDateTime_FromDateTimeAndOffset(mxDateTimeObject *datetime, long absdate_offset, double abstime_offset) { mxDateTimeObject *dt; long days; long absdate = datetime->absdate; double abstime = datetime->abstime; absdate += absdate_offset; abstime += abstime_offset; /* Normalize */ if (abstime < 0 && abstime >= -SECONDS_PER_DAY) { abstime += SECONDS_PER_DAY; absdate -= 1; } if (abstime >= SECONDS_PER_DAY && abstime < 2*SECONDS_PER_DAY) { abstime -= SECONDS_PER_DAY; absdate += 1; } /* Some compilers and/or processors (e.g. gcc 2.95.3 on Mandrake) have troubles with getting rounding right even though 86400.0 IS exactly representable using IEEE floats... that's why we are extra careful here. */ while (DOUBLE_IS_NEGATIVE(abstime)) { days = (long)(-abstime / SECONDS_PER_DAY); if (days == 0) days = 1; days++; abstime += days * SECONDS_PER_DAY; absdate -= days; } while (abstime >= SECONDS_PER_DAY) { days = (long)(abstime / SECONDS_PER_DAY); if (days == 0) days = 1; abstime -= days * SECONDS_PER_DAY; absdate += days; } if (mxDateTime_DoubleStackProblem && abstime >= (double)8.63999999999999854481e+04) { DPRINTF("mxDateTime_FromDateTimeAndOffset: " "triggered double work-around: " "abstime is %.20f, diff %.20e, as int %i\n", abstime, abstime - SECONDS_PER_DAY, (int)abstime); absdate += 1; abstime = 0.0; } dt = mxDateTime_New(); if (dt == NULL) return NULL; if (mxDateTime_SetFromAbsDateTime(dt, absdate, abstime, datetime->calendar)) goto onError; return (PyObject *)dt; onError: mxDateTime_Free(dt); return NULL; } static PyObject *mxDateTime_FromAbsDays(double absdays) { mxDateTimeObject *datetime; long absdate; double abstime,fabsdays; datetime = mxDateTime_New(); if (datetime == NULL) return NULL; fabsdays = floor(absdays); Py_AssertWithArg(fabsdays > -LONG_MAX && fabsdays < LONG_MAX, mxDateTime_RangeError, "absdays out of range: %i", (int)absdays); absdate = (long)fabsdays + 1; abstime = (absdays - fabsdays) * SECONDS_PER_DAY; if (mxDateTime_SetFromAbsDateTime(datetime, absdate, abstime, MXDATETIME_GREGORIAN_CALENDAR)) goto onError; return (PyObject *)datetime; onError: mxDateTime_Free(datetime); return NULL; } static PyObject *mxDateTime_FromTuple(PyObject *v) { mxDateTimeObject *datetime = 0; long year; int month,day,hour,minute; double second; if (!PyTuple_Check(v)) { PyErr_BadInternalCall(); return NULL; } if (!PyArg_ParseTuple(v, "liiiid;need a date/time 6-tuple (year,month,day,hour,minute,second)", &year,&month,&day,&hour,&minute,&second)) return NULL; datetime = mxDateTime_New(); if (datetime == NULL) return NULL; if (mxDateTime_SetFromDateAndTime(datetime, year,month,day, hour,minute,second, MXDATETIME_GREGORIAN_CALENDAR)) goto onError; return (PyObject *)datetime; onError: mxDateTime_Free(datetime); return NULL; } static PyObject *mxDateTime_FromTmStruct(struct tm *tm) { mxDateTimeObject *datetime = 0; datetime = mxDateTime_New(); if (datetime == NULL) return NULL; if (mxDateTime_SetFromDateAndTime(datetime, tm->tm_year + 1900, tm->tm_mon + 1, tm->tm_mday, tm->tm_hour, tm->tm_min, (double)tm->tm_sec, MXDATETIME_GREGORIAN_CALENDAR)) goto onError; return (PyObject *)datetime; onError: mxDateTime_Free(datetime); return NULL; } static PyObject *mxDateTime_FromTicks(double ticks) { mxDateTimeObject *datetime = 0; struct tm *tm; double seconds; time_t tticks = (time_t)ticks; datetime = mxDateTime_New(); if (datetime == NULL) return NULL; /* Conversion is done to local time */ tm = localtime(&tticks); if (tm == NULL) Py_Error(mxDateTime_Error, "could not convert ticks value to local time"); /* Add fraction */ seconds = floor((double)tm->tm_sec) + (ticks - floor(ticks)); if (mxDateTime_SetFromDateAndTime(datetime, tm->tm_year + 1900, tm->tm_mon + 1, tm->tm_mday, tm->tm_hour, tm->tm_min, seconds, MXDATETIME_GREGORIAN_CALENDAR)) goto onError; return (PyObject *)datetime; onError: mxDateTime_Free(datetime); return NULL; } static PyObject *mxDateTime_FromGMTicks(double ticks) { mxDateTimeObject *datetime = 0; struct tm *tm; double seconds; time_t tticks = (time_t)ticks; datetime = mxDateTime_New(); if (datetime == NULL) return NULL; /* Conversion is done to GMT time */ tm = gmtime(&tticks); /* Add fraction */ seconds = floor((double)tm->tm_sec) + (ticks - floor(ticks)); if (mxDateTime_SetFromDateAndTime(datetime, tm->tm_year + 1900, tm->tm_mon + 1, tm->tm_mday, tm->tm_hour, tm->tm_min, seconds, MXDATETIME_GREGORIAN_CALENDAR)) goto onError; return (PyObject *)datetime; onError: mxDateTime_Free(datetime); return NULL; } static PyObject *mxDateTime_FromCOMDate(double comdate) { mxDateTimeObject *datetime = 0; datetime = mxDateTime_New(); if (datetime == NULL) return NULL; if (mxDateTime_SetFromCOMDate(datetime,comdate)) goto onError; return (PyObject *)datetime; onError: mxDateTime_Free(datetime); return NULL; } static struct tm *mxDateTime_AsTmStruct(mxDateTimeObject *datetime, struct tm *tm) { Py_Assert((long)((int)datetime->year) == datetime->year, mxDateTime_RangeError, "year out of range for tm struct conversion"); memset(tm,0,sizeof(tm)); tm->tm_hour = (int)datetime->hour; tm->tm_min = (int)datetime->minute; #if ROUND_SECONDS_IN_TM_STRUCT tm->tm_sec = (int)(datetime->second + 0.5); /* Round the value */ #else tm->tm_sec = (int)datetime->second; #endif tm->tm_mday = (int)datetime->day; tm->tm_mon = (int)datetime->month - 1; tm->tm_year = (int)datetime->year - 1900; tm->tm_wday = ((int)datetime->day_of_week + 1) % 7; tm->tm_yday = (int)datetime->day_of_year - 1; tm->tm_isdst = -1; /* unknown */ return tm; onError: return NULL; } static double mxDateTime_AsCOMDate(mxDateTimeObject *datetime) { return datetime->comdate; } /* This global is set to -1 if mktime() auto-corrects the value of the DST flag to whatever the value should be for the given point in time (which is bad) 0 if the global has not yet been initialized 1 if mktime() does not correct the value and returns proper values */ static int mktime_works = 0; static int init_mktime_works(void) { struct tm tm; time_t a,b; /* Does mktime() in general and specifically DST = -1 work ? */ memset(&tm,0,sizeof(tm)); tm.tm_mday = 1; tm.tm_mon = 5; tm.tm_year = 98; tm.tm_isdst = -1; a = mktime(&tm); Py_Assert(a != (time_t)-1, PyExc_SystemError, "mktime() returned an error (June)"); memset(&tm,0,sizeof(tm)); tm.tm_mday = 1; tm.tm_mon = 0; tm.tm_year = 98; tm.tm_isdst = -1; a = mktime(&tm); Py_Assert(a != (time_t)-1, PyExc_SystemError, "mktime() returned an error (January)"); /* Some mktime() implementations return (time_t)-1 when setting DST to anything other than -1. Others adjust DST without looking at the given setting. */ /* a = (Summer, DST = 0) */ memset(&tm,0,sizeof(tm)); tm.tm_mday = 1; tm.tm_mon = 5; tm.tm_year = 98; tm.tm_isdst = 0; a = mktime(&tm); if (a == (time_t)-1) { mktime_works = -1; return 0; } /* b = (Summer, DST = 1) */ memset(&tm,0,sizeof(tm)); tm.tm_mday = 1; tm.tm_mon = 5; tm.tm_year = 98; tm.tm_isdst = 1; b = mktime(&tm); if (a == (time_t)-1 || a == b) { mktime_works = -1; return 0; } /* a = (Winter, DST = 0) */ memset(&tm,0,sizeof(tm)); tm.tm_mday = 1; tm.tm_mon = 0; tm.tm_year = 98; tm.tm_isdst = 0; a = mktime(&tm); if (a == (time_t)-1) { mktime_works = -1; return 0; } /* b = (Winter, DST = 1) */ memset(&tm,0,sizeof(tm)); tm.tm_mday = 1; tm.tm_mon = 0; tm.tm_year = 98; tm.tm_isdst = 1; b = mktime(&tm); if (a == (time_t)-1 || a == b) { mktime_works = -1; return 0; } mktime_works = 1; return 0; onError: return -1; } /* Returns the ticks value for datetime assuming it stores a datetime value in local time. offsets is subtracted from the resulting ticks value (this can be used to implement DST handling). dst is passed to the used mktime() C lib API and can influence the calculation: dst == 1 means that the datetime value should be interpreted with DST on, dst == 0 with DST off. Note that this doesn't work on all platforms. dst == -1 means: use the DST value in affect at the given point in time. */ static double mxDateTime_AsTicksWithOffset(mxDateTimeObject *datetime, double offset, int dst) { struct tm tm; time_t tticks; double ticks; Py_Assert(datetime->calendar == MXDATETIME_GREGORIAN_CALENDAR, mxDateTime_Error, "can only convert the Gregorian calendar to ticks"); Py_Assert((long)((int)datetime->year) == datetime->year, mxDateTime_RangeError, "year out of range for ticks conversion"); memset(&tm,0,sizeof(tm)); tm.tm_hour = (int)datetime->hour; tm.tm_min = (int)datetime->minute; tm.tm_sec = (int)datetime->second; tm.tm_mday = (int)datetime->day; tm.tm_mon = (int)datetime->month - 1; tm.tm_year = (int)datetime->year - 1900; tm.tm_wday = -1; tm.tm_yday = (int)datetime->day_of_year - 1; tm.tm_isdst = dst; /* mktime uses local time ! */ tticks = mktime(&tm); if (tticks == (time_t)-1 && tm.tm_wday == -1) Py_Error(mxDateTime_Error, "cannot convert value to a time value"); /* Check if mktime messes up DST */ if (dst >= 0 && mktime_works <= 0) { if (mktime_works == 0) { if (init_mktime_works() < 0) goto onError; } if (mktime_works < 0) Py_Error(PyExc_SystemError, "mktime() doesn't support setting DST to anything but -1"); } /* Add fraction and turn into a double and subtract offset */ ticks = (double)tticks + (datetime->abstime - floor(datetime->abstime)) - offset; return ticks; onError: return -1.0; } static double mxDateTime_AsTicks(mxDateTimeObject *datetime) { return mxDateTime_AsTicksWithOffset(datetime,0,-1); } /* Returns the ticks value for datetime assuming it stores a UTC datetime value. offsets is subtracted from the resulting ticks value before returning it. This is useful to implement time zone handling. */ static double mxDateTime_AsGMTicksWithOffset(mxDateTimeObject *datetime, double offset) { Py_Assert(datetime->calendar == MXDATETIME_GREGORIAN_CALENDAR, mxDateTime_Error, "can only convert the Gregorian calendar to ticks"); /* For POSIX style calculations there's nothing much to do... */ if (mxDateTime_POSIXConform) { return ((datetime->absdate - 719163) * SECONDS_PER_DAY + datetime->abstime - offset); } #ifdef HAVE_TIMEGM { /* Use timegm() API */ struct tm tm; time_t tticks; Py_Assert((long)((int)datetime->year) == datetime->year, mxDateTime_RangeError, "year out of range for ticks conversion"); /* Use timegm() if not POSIX conform: the time package knows about leap seconds so we use that information too. */ memset(&tm,0,sizeof(tm)); tm.tm_hour = (int)datetime->hour; tm.tm_min = (int)datetime->minute; tm.tm_sec = (int)datetime->second; tm.tm_mday = (int)datetime->day; tm.tm_mon = (int)datetime->month - 1; tm.tm_year = (int)datetime->year - 1900; tm.tm_wday = ((int)datetime->day_of_week + 1) % 7; tm.tm_yday = (int)datetime->day_of_year - 1; tm.tm_isdst = 0; /* timegm uses UTC ! */ tticks = timegm(&tm); Py_Assert(tticks != (time_t)-1, mxDateTime_Error, "cannot convert value to a time value"); /* Add fraction and turn into a double */ return ((double)tticks + (datetime->abstime - floor(datetime->abstime)) - offset); } #else { /* Work around with a trick... */ double localticks,gmticks,gmtoffset; if (mxDateTime_CalcTicks(datetime, &localticks,&gmticks,&gmtoffset)) goto onError; return gmticks - offset; } #endif onError: return -1.0; } static double mxDateTime_AsGMTicks(mxDateTimeObject *datetime) { return mxDateTime_AsGMTicksWithOffset(datetime,0); } /* Returns the UTC offset at the given time; assumes local time is stored in the instance. */ static double mxDateTime_GMTOffset(mxDateTimeObject *datetime) { double gmticks,ticks; gmticks = mxDateTime_AsGMTicks(datetime); if (gmticks == -1.0 && PyErr_Occurred()) goto onError; ticks = mxDateTime_AsTicksWithOffset(datetime,0,-1); if (ticks == -1.0 && PyErr_Occurred()) goto onError; return gmticks - ticks; onError: return -1.0; } /* Return the instance's value in absolute days: days since 0001-01-01 0:00:00 using fractions for parts of a day. */ static double mxDateTime_AsAbsDays(mxDateTimeObject *datetime) { return ((double)(datetime->absdate - 1) + datetime->abstime / SECONDS_PER_DAY); } /* Return broken down values of the instance. This call returns the values as stored in the instance regardeless of the used calendar. */ static int mxDateTime_BrokenDown(mxDateTimeObject *datetime, long *year, int *month, int *day, int *hour, int *minute, double *second) { if (year) *year = (long)datetime->year; if (month) *month = (int)datetime->month; if (day) *day = (int)datetime->day; if (hour) *hour = (int)datetime->hour; if (minute) *minute = (int)datetime->minute; if (second) *second = (double)datetime->second; return 0; } /* Return the instance's value as broken down values using the Julian calendar. */ static int mxDateTime_AsJulianDate(mxDateTimeObject *datetime, long *pyear, int *pmonth, int *pday, int *phour, int *pminute, double *psecond, int *pday_of_week, int *pday_of_year) { long absdate = datetime->absdate; long year; int month,day,dayoffset; /* Get the date in the Julian calendar */ if (datetime->calendar != MXDATETIME_JULIAN_CALENDAR) { mxDateTimeObject temp; /* Recalculate the date from the absdate value */ if (mxDateTime_SetFromAbsDate(&temp, absdate, MXDATETIME_JULIAN_CALENDAR)) goto onError; year = temp.year; month = temp.month; day = temp.day; dayoffset = temp.day_of_year; } else { year = datetime->year; month = datetime->month; day = datetime->day; dayoffset = datetime->day_of_year; } if (pyear) *pyear = (long)year; if (pmonth) *pmonth = (int)month; if (pday) *pday = (int)day; if (phour) *phour = (int)datetime->hour; if (pminute) *pminute = (int)datetime->minute; if (psecond) *psecond = (double)datetime->second; if (pday_of_week) *pday_of_week = mxDateTime_DayOfWeek(absdate); if (pday_of_year) *pday_of_year = (int)dayoffset; return 0; onError: return -1; } /* Return the instance's value as broken down values using the Gregorian calendar. */ static int mxDateTime_AsGregorianDate(mxDateTimeObject *datetime, long *pyear, int *pmonth, int *pday, int *phour, int *pminute, double *psecond, int *pday_of_week, int *pday_of_year) { long absdate = datetime->absdate; long year; int month,day,dayoffset; /* Recalculate the date in the Gregorian calendar */ if (datetime->calendar != MXDATETIME_GREGORIAN_CALENDAR) { mxDateTimeObject temp; /* Recalculate the date from the absdate value */ if (mxDateTime_SetFromAbsDate(&temp, absdate, MXDATETIME_GREGORIAN_CALENDAR)) goto onError; year = temp.year; month = temp.month; day = temp.day; dayoffset = temp.day_of_year; } else { year = datetime->year; month = datetime->month; day = datetime->day; dayoffset = datetime->day_of_year; } if (pyear) *pyear = (long)year; if (pmonth) *pmonth = (int)month; if (pday) *pday = (int)day; if (phour) *phour = (int)datetime->hour; if (pminute) *pminute = (int)datetime->minute; if (psecond) *psecond = (double)datetime->second; if (pday_of_week) *pday_of_week = mxDateTime_DayOfWeek(absdate); if (pday_of_year) *pday_of_year = (int)dayoffset; return 0; onError: return -1; } /* Returns the DST setting for the given DateTime instance assuming it refers to local time. -1 is returned in case it cannot be determined, 0 if it is not active, 1 if it is. For calendars other than the Gregorian the function always returns -1. XXX If mktime() returns -1 for isdst, try harder using the hack in timegm.py. */ static int mxDateTime_DST(mxDateTimeObject *datetime) { struct tm tm; time_t ticks; if (datetime->calendar != MXDATETIME_GREGORIAN_CALENDAR) return -1; if ((long)((int)datetime->year) != datetime->year) return -1; memset(&tm,0,sizeof(tm)); tm.tm_hour = (int)datetime->hour; tm.tm_min = (int)datetime->minute; tm.tm_sec = (int)datetime->second; tm.tm_mday = (int)datetime->day; tm.tm_mon = (int)datetime->month - 1; tm.tm_year = (int)datetime->year - 1900; tm.tm_wday = -1; tm.tm_isdst = -1; ticks = mktime(&tm); if (ticks == (time_t)-1 && tm.tm_wday == -1) return -1; return tm.tm_isdst; } /* Returns a Python string containing the locale's timezone name for the given DateTime instance (assuming it refers to local time). "???" is returned in case it cannot be determined. */ static PyObject *mxDateTime_TimezoneString(mxDateTimeObject *datetime) { struct tm tm; time_t ticks; char tz[255]; if (datetime->calendar != MXDATETIME_GREGORIAN_CALENDAR) return PyString_FromString("???"); if ((long)((int)datetime->year) != datetime->year) return PyString_FromString("???"); #ifndef HAVE_STRFTIME return PyString_FromString("???"); #else memset(&tm,0,sizeof(tm)); tm.tm_hour = (int)datetime->hour; tm.tm_min = (int)datetime->minute; tm.tm_sec = (int)datetime->second; tm.tm_mday = (int)datetime->day; tm.tm_mon = (int)datetime->month - 1; tm.tm_year = (int)datetime->year - 1900; tm.tm_wday = -1; tm.tm_isdst = mxDateTime_DST(datetime); ticks = mktime(&tm); if (ticks == (time_t)-1 && tm.tm_wday == -1) return PyString_FromString("???"); strftime(tz,sizeof(tm),"%Z",&tm); return PyString_FromString(tz); #endif } /* Returns the ISO week notation for the given DateTime instance as tuple (year,isoweek,isoday). The algorithm also Works for negative dates. XXX Check this algorithm for the Julian calendar. */ static PyObject *mxDateTime_ISOWeekTuple(mxDateTimeObject *datetime) { int week; long year = datetime->year; int day; /* Estimate */ week = (datetime->day_of_year-1) - datetime->day_of_week + 3; if (week >= 0) week = week / 7 + 1; day = datetime->day_of_week + 1; DPRINTF("mxDateTime_ISOWeekTuple: estimated year, week, day = %ld, %i, %i\n", year,week,day); /* Verify */ if (week < 0) { /* The day lies in last week of the previous year */ year--; if ((week > -2) || (week == -2 && mxDateTime_Leapyear(year,datetime->calendar))) week = 53; else week = 52; } else if (week == 53) { /* Check if the week belongs to year or year+1 */ if (31-datetime->day + datetime->day_of_week < 3) { week = 1; year++; } } DPRINTF("mxDateTime_ISOWeekTuple: corrected year, week, day = %ld, %i, %i\n", year,week,day); return Py_BuildValue("lii",year,week,day); } /* Return a string identifying the used calendar. */ static PyObject *mxDateTime_CalendarString(mxDateTimeObject *datetime) { PyObject *v = mxDateTime_GregorianCalendar; switch (datetime->calendar) { case MXDATETIME_GREGORIAN_CALENDAR: break; case MXDATETIME_JULIAN_CALENDAR: v = mxDateTime_JulianCalendar; break; default: Py_Error(PyExc_SystemError, "Internal error in mxDateTime: wrong calendar value"); } Py_INCREF(v); return v; onError: return NULL; } /* Writes a string representation to buffer. If the string does not fit the buffer, nothing is written. */ static void mxDateTime_AsString(mxDateTimeObject *self, char *buffer, int buffer_len) { double second; if (!buffer || buffer_len < 50) return; second = mxDateTime_FixSecondDisplay(self->second); if (self->year >= 0) sprintf(buffer,"%04li-%02i-%02i %02i:%02i:%05.2f", (long)self->year,(int)self->month,(int)self->day, (int)self->hour,(int)self->minute, (float)second); else sprintf(buffer,"-%04li-%02i-%02i %02i:%02i:%05.2f", (long)-self->year,(int)self->month,(int)self->day, (int)self->hour,(int)self->minute, (float)second); } /* Returns a string indicating the date in ISO format. */ static PyObject *mxDateTime_DateString(mxDateTimeObject *self) { char buffer[50]; if (self->year >= 0) sprintf(buffer,"%04li-%02i-%02i", (long)self->year,(int)self->month,(int)self->day); else sprintf(buffer,"-%04li-%02i-%02i", (long)-self->year,(int)self->month,(int)self->day); return PyString_FromString(buffer); } /* Returns a string indicating the time in ISO format. */ static PyObject *mxDateTime_TimeString(mxDateTimeObject *self) { char buffer[50]; double second; second = mxDateTime_FixSecondDisplay(self->second); sprintf(buffer,"%02i:%02i:%05.2f", (int)self->hour,(int)self->minute,(float)second); return PyString_FromString(buffer); } /* --- methods --- */ #define datetime ((mxDateTimeObject*)self) #ifdef HAVE_STRFTIME Py_C_Function( mxDateTime_strftime, "strftime(formatstr)") { PyObject *v; char *fmt = 0; char *output = 0; Py_ssize_t len_output,size_output = STRFTIME_OUTPUT_SIZE; struct tm tm; Py_GetArg("|s",fmt); if (!fmt) /* We default to the locale's standard date/time format */ fmt = "%c"; Py_Assert((long)((int)datetime->year) == datetime->year, mxDateTime_RangeError, "year out of range for strftime() formatting"); /* Init tm struct */ memset(&tm,0,sizeof(tm)); tm.tm_mday = (int)datetime->day; tm.tm_mon = (int)datetime->month - 1; tm.tm_year = (int)datetime->year - 1900; tm.tm_hour = (int)datetime->hour; tm.tm_min = (int)datetime->minute; #if ROUND_SECONDS_IN_TM_STRUCT tm.tm_sec = (int)(datetime->second + 0.5); /* Round the value */ #else tm.tm_sec = (int)datetime->second; #endif tm.tm_wday = ((int)datetime->day_of_week + 1) % 7; tm.tm_yday = (int)datetime->day_of_year - 1; tm.tm_isdst = mxDateTime_DST(datetime); output = new(char,size_output); while (1) { if (output == NULL) { PyErr_NoMemory(); goto onError; } len_output = strftime(output,size_output,fmt,&tm); if (len_output == size_output) { size_output *= 2; output = resize(output,char,size_output); } else break; } v = PyString_FromStringAndSize(output,len_output); if (v == NULL) goto onError; free(output); return v; onError: if (output) free(output); return NULL; } #endif Py_C_Function( mxDateTime_tuple, "tuple()\n" "Return a (year,month,day,hour,minute,second,day_of_week,\n" "day_of_year,dst) tuple.") { int dst; Py_NoArgsCheck(); dst = mxDateTime_DST(datetime); return Py_BuildValue("liiiiiiii", (long)datetime->year, (int)datetime->month, (int)datetime->day, (int)datetime->hour, (int)datetime->minute, (int)datetime->second, (int)datetime->day_of_week, (int)datetime->day_of_year, dst); onError: return NULL; } Py_C_Function( mxDateTime_Julian, "Julian()\n" "Return an instance pointing to the same date and time,\n" "but using the Julian calendar. If the instance already\n" "uses the Julian calendar, a new reference to it is returned." ) { long year; int month,day,hour,minute,day_of_week,day_of_year; double second; Py_NoArgsCheck(); if (datetime->calendar == MXDATETIME_JULIAN_CALENDAR) { Py_INCREF(datetime); return (PyObject *)datetime; } if (mxDateTime_AsJulianDate(datetime, &year, &month, &day, &hour, &minute, &second, &day_of_week, &day_of_year)) goto onError; return mxDateTime_FromJulianDateAndTime(year, month, day, hour, minute, second); onError: return NULL; } Py_C_Function( mxDateTime_Gregorian, "Gregorian()\n" "Return an instance pointing to the same date and time,\n" "but using the Gregorian calendar. If the instance already\n" "uses the Gregorian calendar, a new reference to it is returned." ) { long year; int month,day,hour,minute,day_of_week,day_of_year; double second; Py_NoArgsCheck(); if (datetime->calendar == MXDATETIME_GREGORIAN_CALENDAR) { Py_INCREF(datetime); return (PyObject *)datetime; } if (mxDateTime_AsGregorianDate(datetime, &year, &month, &day, &hour, &minute, &second, &day_of_week, &day_of_year)) goto onError; return mxDateTime_FromGregorianDateAndTime(year, month, day, hour, minute, second); onError: return NULL; } Py_C_Function_WithKeywords( mxDateTime_rebuild, "rebuild(year=None,month=None,day=None,hour=None,minute=None,second=None)\n\n" "Returns a DateTime-object with the given date/time values\n" "replaced by new values." ) { long year; int month,day,hour,minute; double second; /* Get the broken down values */ year = datetime->year; month = datetime->month; day = datetime->day; hour = datetime->hour; minute = datetime->minute; second = datetime->second; /* Override them with parameters */ Py_KeywordsGet6Args("|liiiid",year,month,day,hour,minute,second); /* Build new object */ if (datetime->calendar == MXDATETIME_GREGORIAN_CALENDAR) return mxDateTime_FromGregorianDateAndTime(year, month, day, hour, minute, second); else return mxDateTime_FromJulianDateAndTime(year, month, day, hour, minute, second); onError: return NULL; } #ifdef HAVE_PYDATETIME Py_C_Function_WithKeywords( mxDateTime_pydate, "pydate()\n\n" "Returns a datetime.date object with just the date values." ) { Py_NoArgsCheck(); /* Convert values */ Py_Assert(datetime->year > 0 && datetime->year <= 9999, PyExc_ValueError, "DateTime object values out of range for " "dateime.date objects"); /* Make sure the PyDateTimeAPI is loaded */ if (mx_Require_PyDateTimeAPI()) goto onError; /* Build new object */ return PyDate_FromDate((int)datetime->year, (int)datetime->month, (int)datetime->day); onError: return NULL; } Py_C_Function_WithKeywords( mxDateTime_pydatetime, "pydatetime()\n\n" "Returns a datetime.datetime object with the same values." ) { int second, microsecond; Py_NoArgsCheck(); /* Convert values */ Py_Assert(datetime->year > 0 && datetime->year <= 9999, PyExc_ValueError, "DateTime object values out of range for " "dateime.datetime objects"); second = (int)(datetime->second); microsecond = (int)((datetime->second - (double)second) * 1e6); /* Make sure the PyDateTimeAPI is loaded */ if (mx_Require_PyDateTimeAPI()) goto onError; /* Build new object */ return PyDateTime_FromDateAndTime((int)datetime->year, (int)datetime->month, (int)datetime->day, (int)datetime->hour, (int)datetime->minute, second, microsecond); onError: return NULL; } Py_C_Function_WithKeywords( mxDateTime_pytime, "pytime()\n\n" "Returns a datetime.time object with just the time values." ) { int second, microsecond; Py_NoArgsCheck(); /* Convert values */ second = (int)(datetime->second); microsecond = (int)((datetime->second - (double)second) * 1e6); /* Make sure the PyDateTimeAPI is loaded */ if (mx_Require_PyDateTimeAPI()) goto onError; /* Build new object */ return PyTime_FromTime((int)datetime->hour, (int)datetime->minute, second, microsecond); onError: return NULL; } #endif #ifdef COPY_PROTOCOL Py_C_Function( mxDateTime_copy, "copy([memo])\n\n" "Return a new reference for the instance. This function\n" "is used for the copy-protocol. Real copying doesn't take\n" "place, since the instances are immutable.") { PyObject *memo; Py_GetArg("|O",memo); Py_INCREF(datetime); return (PyObject *)datetime; onError: return NULL; } #endif Py_C_Function( mxDateTime_ticks, "ticks([offset=0.0,dst=-1])\n\n" "Return a time.time()-like value, representing the objects\n" "value assuming it is local time. The conversion is done\n" "using mktime() with the DST flag set to dst. offset is\n" "subtracted from the resulting ticks value.") { double ticks,offset = 0.0; int dst = -1; Py_Get2Args("|di",offset,dst); ticks = mxDateTime_AsTicksWithOffset(datetime,offset,dst); if (ticks == -1.0 && PyErr_Occurred()) goto onError; return PyFloat_FromDouble(ticks); onError: return NULL; } Py_C_Function( mxDateTime_gmticks, "gmticks(offset=0.0)\n\n" "Return a time.time()-like value, representing the objects\n" "value assuming it is UTC time. offset is subtracted from\n" "the resulting ticks value.") { double ticks,offset = 0.0; Py_GetArg("|d",offset) ticks = mxDateTime_AsGMTicksWithOffset(datetime,offset); if (ticks == -1.0 && PyErr_Occurred()) goto onError; return PyFloat_FromDouble(ticks); onError: return NULL; } Py_C_Function( mxDateTime_gmtoffset, "gmtoffset()\n\n" "Returns a DateTimeDelta instance representing the UTC offset\n" "for datetime assuming that the stored values refer to local\n" "time. If you subtract this value from datetime, you'll get\n" "UTC time." ) { double offset; Py_NoArgsCheck(); offset = mxDateTime_GMTOffset(datetime); if (offset == -1.0 && PyErr_Occurred()) goto onError; return mxDateTimeDelta_FromSeconds(offset); onError: return NULL; } Py_C_Function( mxDateTime_gmtime, "gmtime()\n\n" "Returns a DateTime instance representing datetime in UTC\n" "time assuming that the stored values refer to local time." ) { double offset; Py_NoArgsCheck(); offset = mxDateTime_GMTOffset(datetime); if (offset == -1.0 && PyErr_Occurred()) goto onError; return mxDateTime_FromDateTimeAndOffset(datetime, 0, -offset); onError: return NULL; } Py_C_Function( mxDateTime_localtime, "localtime()\n\n" "Returns a DateTime instance representing datetime in local\n" "time assuming that the stored values refer to UTC time." ) { double gmticks; Py_NoArgsCheck(); gmticks = mxDateTime_AsGMTicks(datetime); if (gmticks == -1.0 && PyErr_Occurred()) goto onError; return mxDateTime_FromTicks(gmticks); onError: return NULL; } Py_C_Function( mxDateTime_COMDate, "COMDate()\n\n" "Return a float where the whole part is the number of days\n" "in the Gregorian calendar since 30.12.1899 and the fraction\n" "part equals abstime/86400.0.") { double comdate; Py_NoArgsCheck(); comdate = mxDateTime_AsCOMDate(datetime); return PyFloat_FromDouble(comdate); onError: return NULL; } Py_C_Function( mxDateTime_absvalues, "absvalues()") { Py_NoArgsCheck(); Py_Return2("ld",datetime->absdate,datetime->abstime); onError: return NULL; } Py_C_Function( mxDateTime_weekday, "weekdday()\n" "Return the day of the week as integer; same as .day_of_week.\n" "This API is needed for datetime.date() compatibility.") { Py_NoArgsCheck(); Py_Return("i", datetime->day_of_week); onError: return NULL; } #undef datetime /* Python Method Table */ statichere PyMethodDef mxDateTime_Methods[] = { #ifdef HAVE_STRFTIME Py_MethodListEntry("strftime",mxDateTime_strftime), #endif Py_MethodListEntryNoArgs("tuple",mxDateTime_tuple), Py_MethodListEntryNoArgs("Julian",mxDateTime_Julian), Py_MethodListEntryNoArgs("Gregorian",mxDateTime_Gregorian), Py_MethodListEntryNoArgs("COMDate",mxDateTime_COMDate), Py_MethodListEntryNoArgs("absvalues",mxDateTime_absvalues), #ifdef HAVE_STRFTIME Py_MethodListEntry("Format",mxDateTime_strftime), #endif #ifdef COPY_PROTOCOL Py_MethodListEntry("__deepcopy__",mxDateTime_copy), Py_MethodListEntry("__copy__",mxDateTime_copy), #endif Py_MethodListEntry("ticks",mxDateTime_ticks), Py_MethodListEntry("gmticks",mxDateTime_gmticks), Py_MethodListEntryNoArgs("gmtoffset",mxDateTime_gmtoffset), Py_MethodListEntryNoArgs("gmtime",mxDateTime_gmtime), Py_MethodListEntryNoArgs("localtime",mxDateTime_localtime), Py_MethodWithKeywordsListEntry("rebuild",mxDateTime_rebuild), /* Interfaces needed for Python's datetime module compatibility */ Py_MethodListEntryNoArgs("timetuple",mxDateTime_tuple), Py_MethodListEntryNoArgs("weekday",mxDateTime_weekday), #ifdef HAVE_PYDATETIME Py_MethodListEntryNoArgs("pydate",mxDateTime_pydate), Py_MethodListEntryNoArgs("pydatetime",mxDateTime_pydatetime), Py_MethodListEntryNoArgs("pytime",mxDateTime_pytime), #endif #ifdef OLD_INTERFACE /* Old interface */ Py_MethodListEntryNoArgs("as_tuple",mxDateTime_tuple), Py_MethodListEntryNoArgs("as_COMDate",mxDateTime_COMDate), Py_MethodListEntryNoArgs("as_ticks",mxDateTime_ticks), #endif {NULL,NULL} /* end of list */ }; /* --- slots --- */ static PyObject *mxDateTime_AsFloat(PyObject *obj) { mxDateTimeObject *self = (mxDateTimeObject *)obj; double ticks; ticks = mxDateTime_AsTicksWithOffset(self,0,-1); if (ticks == -1.0 && PyErr_Occurred()) goto onError; return PyFloat_FromDouble(ticks); onError: return NULL; } static PyObject *mxDateTime_AsInt(PyObject *obj) { mxDateTimeObject *self = (mxDateTimeObject *)obj; double ticks; ticks = mxDateTime_AsTicksWithOffset(self,0,-1); if (ticks == -1.0 && PyErr_Occurred()) goto onError; return PyInt_FromLong((long)ticks); onError: return NULL; } static int mxDateTime_NonZero(PyObject *obj) { /* A mxDateTime instance can never be zero */ return 1; } static PyObject *mxDateTime_Str(PyObject *obj) { mxDateTimeObject *self = (mxDateTimeObject *)obj; char s[50]; mxDateTime_AsString(self,s,sizeof(s)); return PyString_FromString(s); } static PyObject *mxDateTime_Repr(PyObject *obj) { mxDateTimeObject *self = (mxDateTimeObject *)obj; char t[100]; char s[50]; mxDateTime_AsString(self, s, sizeof(s)); sprintf(t,"<%s object for '%s' at %lx>", self->ob_type->tp_name, s, (long)self); return PyString_FromString(t); } #ifdef WANT_SUBCLASSABLE_TYPES #define Py_GetMember_Function(object, attrname) \ static PyObject *object##_get_##attrname(object *self, void *closure) #define Py_SetMember_Function(object, attrname) \ static PyObject *object##_set_##attrname(object *self, PyObject *value, void *closure) #define Py_MemberListEntry(object, attrname) \ {#attrname, (getter)object##_get_##attrname, (setter)object##_set_##attrname, NULL} #define Py_MemberListEntryReadonly(object, attrname) \ {#attrname, (getter)object##_get_##attrname, NULL, NULL} #define mxDateTime_GetMember(attrname) \ Py_GetMember_Function(mxDateTimeObject, attrname) #define mxDateTime_MemberListEntryReadonly(attrname) \ Py_MemberListEntryReadonly(mxDateTimeObject, attrname) mxDateTime_GetMember(year) { return PyInt_FromLong(self->year); } mxDateTime_GetMember(month) { return PyInt_FromLong((long)self->month); } mxDateTime_GetMember(day) { return PyInt_FromLong((long)self->day); } mxDateTime_GetMember(hour) { return PyInt_FromLong((long)self->hour); } mxDateTime_GetMember(minute) { return PyInt_FromLong((long)self->minute); } mxDateTime_GetMember(second) { return PyFloat_FromDouble((double)self->second); } mxDateTime_GetMember(absdays) { return PyFloat_FromDouble((double)(self->absdate - 1) + self->abstime / SECONDS_PER_DAY); } mxDateTime_GetMember(absdate) { return PyInt_FromLong(self->absdate); } mxDateTime_GetMember(abstime) { return PyFloat_FromDouble((double)self->abstime); } mxDateTime_GetMember(date) { return mxDateTime_DateString(self); } mxDateTime_GetMember(time) { return mxDateTime_TimeString(self); } mxDateTime_GetMember(yearoffset) { long yearoffset = mxDateTime_YearOffset(self->year,self->calendar); if (yearoffset == -1 && PyErr_Occurred()) return NULL; return PyInt_FromLong(yearoffset); } mxDateTime_GetMember(is_leapyear) { return PyInt_FromLong(mxDateTime_Leapyear(self->year,self->calendar)); } mxDateTime_GetMember(day_of_week) { return PyInt_FromLong((long)self->day_of_week); } mxDateTime_GetMember(day_of_year) { return PyInt_FromLong((long)self->day_of_year); } mxDateTime_GetMember(days_in_month) { return PyInt_FromLong(days_in_month[mxDateTime_Leapyear(self->year, self->calendar)] [self->month - 1]); } mxDateTime_GetMember(iso_week) { return mxDateTime_ISOWeekTuple(self); } mxDateTime_GetMember(tz) { return mxDateTime_TimezoneString(self); } mxDateTime_GetMember(dst) { return PyInt_FromLong(mxDateTime_DST(self)); } mxDateTime_GetMember(mjd) { return PyFloat_FromDouble((double)(self->absdate - 678576) + self->abstime / SECONDS_PER_DAY); } mxDateTime_GetMember(tjd) { return PyFloat_FromDouble((double)((self->absdate - 678576) % 10000) + self->abstime / SECONDS_PER_DAY); } mxDateTime_GetMember(tjd_myriad) { return PyInt_FromLong((self->absdate - 678576) / 10000 + 240); } mxDateTime_GetMember(jdn) { return PyFloat_FromDouble((double)self->absdate + 1721424.5 + self->abstime / SECONDS_PER_DAY); } mxDateTime_GetMember(calendar) { return mxDateTime_CalendarString(self); } /* Member access function list */ struct PyGetSetDef mxDateTime_MemberAccess[] = { mxDateTime_MemberListEntryReadonly(year), mxDateTime_MemberListEntryReadonly(month), mxDateTime_MemberListEntryReadonly(day), mxDateTime_MemberListEntryReadonly(hour), mxDateTime_MemberListEntryReadonly(minute), mxDateTime_MemberListEntryReadonly(second), mxDateTime_MemberListEntryReadonly(absdays), mxDateTime_MemberListEntryReadonly(absdate), mxDateTime_MemberListEntryReadonly(abstime), mxDateTime_MemberListEntryReadonly(date), mxDateTime_MemberListEntryReadonly(time), mxDateTime_MemberListEntryReadonly(yearoffset), mxDateTime_MemberListEntryReadonly(is_leapyear), mxDateTime_MemberListEntryReadonly(day_of_week), mxDateTime_MemberListEntryReadonly(day_of_year), mxDateTime_MemberListEntryReadonly(days_in_month), mxDateTime_MemberListEntryReadonly(iso_week), mxDateTime_MemberListEntryReadonly(tz), mxDateTime_MemberListEntryReadonly(dst), mxDateTime_MemberListEntryReadonly(mjd), mxDateTime_MemberListEntryReadonly(tjd), mxDateTime_MemberListEntryReadonly(tjd_myriad), mxDateTime_MemberListEntryReadonly(jdn), mxDateTime_MemberListEntryReadonly(calendar), {0} /* sentinel */ }; #endif static PyObject *mxDateTime_Getattr(PyObject *obj, char *name) { mxDateTimeObject *self = (mxDateTimeObject *)obj; #ifdef WANT_SUBCLASSABLE_TYPES DPRINTF("mxDateTime_Getattr: looking for '%s'", name); #endif if (Py_WantAttr(name,"year")) return PyInt_FromLong(self->year); else if (Py_WantAttr(name,"month")) return PyInt_FromLong((long)self->month); else if (Py_WantAttr(name,"day")) return PyInt_FromLong((long)self->day); else if (Py_WantAttr(name,"hour")) return PyInt_FromLong((long)self->hour); else if (Py_WantAttr(name,"minute")) return PyInt_FromLong((long)self->minute); else if (Py_WantAttr(name,"second")) return PyFloat_FromDouble((double)self->second); else if (Py_WantAttr(name,"absdays")) return PyFloat_FromDouble( (double)(self->absdate - 1) + self->abstime / SECONDS_PER_DAY); else if (Py_WantAttr(name,"absdate")) return PyInt_FromLong(self->absdate); else if (Py_WantAttr(name,"abstime")) return PyFloat_FromDouble((double)self->abstime); else if (Py_WantAttr(name,"date")) return mxDateTime_DateString(self); else if (Py_WantAttr(name,"time")) return mxDateTime_TimeString(self); else if (Py_WantAttr(name,"yearoffset")) { long yearoffset = mxDateTime_YearOffset(self->year,self->calendar); if (yearoffset == -1 && PyErr_Occurred()) goto onError; return PyInt_FromLong(yearoffset); } else if (Py_WantAttr(name,"is_leapyear")) return PyInt_FromLong(mxDateTime_Leapyear(self->year,self->calendar)); else if (Py_WantAttr(name,"day_of_week")) return PyInt_FromLong((long)self->day_of_week); else if (Py_WantAttr(name,"day_of_year")) return PyInt_FromLong((long)self->day_of_year); else if (Py_WantAttr(name,"days_in_month")) return PyInt_FromLong( days_in_month[mxDateTime_Leapyear(self->year,self->calendar)]\ [self->month - 1]); else if (Py_WantAttr(name,"iso_week")) return mxDateTime_ISOWeekTuple(self); else if (Py_WantAttr(name,"tz")) return mxDateTime_TimezoneString(self); else if (Py_WantAttr(name,"dst")) return PyInt_FromLong(mxDateTime_DST(self)); else if (Py_WantAttr(name,"mjd")) return PyFloat_FromDouble((double)(self->absdate - 678576) + self->abstime / SECONDS_PER_DAY); else if (Py_WantAttr(name,"tjd")) return PyFloat_FromDouble((double)((self->absdate - 678576) % 10000) + self->abstime / SECONDS_PER_DAY); else if (Py_WantAttr(name,"tjd_myriad")) return PyInt_FromLong((self->absdate - 678576) / 10000 + 240); else if (Py_WantAttr(name,"jdn")) return PyFloat_FromDouble((double)self->absdate + 1721424.5 + self->abstime / SECONDS_PER_DAY); else if (Py_WantAttr(name,"calendar")) return mxDateTime_CalendarString(self); /* For Zope security */ else if (Py_WantAttr(name,"__roles__")) { Py_INCREF(Py_None); return Py_None; } else if (Py_WantAttr(name,"__allow_access_to_unprotected_subobjects__")) return PyInt_FromLong(1L); else if (Py_WantAttr(name,"__members__")) return Py_BuildValue("[" "sss" "sss" "sss" "sss" "sss" "sss" "ss" "ss" "]", "year","month","day", "hour","minute","second", "absdays","absdate","abstime", "yearoffset","is_leapyear","day_of_week", "day_of_year","days_in_month","tz", "dst","iso_week","mjd", "tjd","tjd_myriad", "jdn","calendar" ); return Py_FindMethod(mxDateTime_Methods, (PyObject *)self,name); onError: return NULL; } static long mxDateTime_Hash(PyObject *obj) { mxDateTimeObject *self = (mxDateTimeObject *)obj; long x = 0; long z[sizeof(double)/sizeof(long)+1]; register int i; /* Clear z */ for (i = sizeof(z) / sizeof(long) - 1; i >= 0; i--) z[i] = 0; /* Copy the double onto z */ *((double *)z) = self->absdate * SECONDS_PER_DAY + self->abstime; /* Hash the longs in z together using XOR */ for (i = sizeof(z) / sizeof(long) - 1; i >= 0; i--) x ^= z[i]; /* Errors are indicated by returning -1, so we have to fix that hash value by hand. */ if (x == -1) x = 19980427; return x; } static int mxDateTime_Compare(PyObject *left, PyObject *right) { mxDateTimeObject *self = (mxDateTimeObject *)left; mxDateTimeObject *other = (mxDateTimeObject *)right; DPRINTF("mxDateTime_Compare: " "%s op %s\n", left->ob_type->tp_name, right->ob_type->tp_name); if (self == other) return 0; /* Short-cut */ if (_mxDateTime_Check(left) && _mxDateTime_Check(right)) { long d0 = self->absdate, d1 = other->absdate; double t0 = self->abstime, t1 = other->abstime; return (d0 < d1) ? -1 : (d0 > d1) ? 1 : (t0 < t1) ? -1 : (t0 > t1) ? 1 : 0; } Py_Error(PyExc_TypeError, "can't compare types"); onError: return -1; } static PyObject *mxDateTime_RichCompare(PyObject *left, PyObject *right, int op) { mxDateTimeObject *self = (mxDateTimeObject *)left; mxDateTimeObject *other = (mxDateTimeObject *)right; int cmp; DPRINTF("mxDateTime_RichCompare: " "%s op %s (op=%i)\n", left->ob_type->tp_name, right->ob_type->tp_name, op); /* Same type comparison */ if (self == other) cmp = 0; else if (_mxDateTime_Check(left) && _mxDateTime_Check(right)) { long d0 = self->absdate, d1 = other->absdate; double t0 = self->abstime, t1 = other->abstime; cmp = (d0 < d1) ? -1 : (d0 > d1) ? 1 : (t0 < t1) ? -1 : (t0 > t1) ? 1 : 0; } /* Make sure that we only have to deal with DateTime op */ else if (_mxDateTime_Check(right)) { /* op DateTime */ return mxDateTime_RichCompare(right, left, SWAPPED_ARGS_RICHCOMPARE_OP(op)); } else if (!_mxDateTime_Check(left)) { Py_INCREF(Py_NotImplemented); return Py_NotImplemented; } else if (_mxDateTimeDelta_Check(right)) { /* DateTime op DateTimeDelta: not supported */ Py_INCREF(Py_NotImplemented); return Py_NotImplemented; } else if (PyFloat_Compatible(right)) { /* DateTime op Number -- compare ticks */ double t1 = PyFloat_AsDouble(right); double t0 = mxDateTime_AsTicksWithOffset(self,0,-1); if (t1 == -1.0 && PyErr_Occurred()) { /* Give up and let the right argument try to deal with the operation. */ PyErr_Clear(); Py_INCREF(Py_NotImplemented); return Py_NotImplemented; } if (t0 == -1.0 && PyErr_Occurred()) goto onError; cmp = (t0 < t1) ? -1 : (t0 > t1) ? 1 : 0; } #ifdef HAVE_PYDATETIME else if (mx_PyDateTime_Check(right)) { /* DateTime op PyDateTime Note: PyDateTime is a subclass of PyDate and mx_PyDate_Check() also matches PyDateTime objects ! */ double abstime; if (mx_Require_PyDateTimeAPI()) goto onError; abstime = ( (double)PyDateTime_DATE_GET_HOUR(right) * 3600.0 + (double)PyDateTime_DATE_GET_MINUTE(right) * 60.0 + (double)PyDateTime_DATE_GET_SECOND(right) + (double)PyDateTime_DATE_GET_MICROSECOND(right) * 1e-6); cmp = ( (self->year < PyDateTime_GET_YEAR(right)) ? -1 : (self->year > PyDateTime_GET_YEAR(right)) ? 1 : (self->month < PyDateTime_GET_MONTH(right)) ? -1 : (self->month > PyDateTime_GET_MONTH(right)) ? 1 : (self->day < PyDateTime_GET_DAY(right)) ? -1 : (self->day > PyDateTime_GET_DAY(right)) ? 1 : (self->abstime < abstime) ? -1 : (self->abstime > abstime) ? 1 : 0); } else if (mx_PyDate_Check(right)) { /* DateTime op PyDate */ if (mx_Require_PyDateTimeAPI()) goto onError; cmp = ( (self->year < PyDateTime_GET_YEAR(right)) ? -1 : (self->year > PyDateTime_GET_YEAR(right)) ? 1 : (self->month < PyDateTime_GET_MONTH(right)) ? -1 : (self->month > PyDateTime_GET_MONTH(right)) ? 1 : (self->day < PyDateTime_GET_DAY(right)) ? -1 : (self->day > PyDateTime_GET_DAY(right)) ? 1 : (self->abstime > 0.0) ? 1 : 0); } #endif else { Py_INCREF(Py_NotImplemented); return Py_NotImplemented; } /* Build result */ switch (op) { case Py_EQ: cmp = (cmp == 0); break; case Py_NE: cmp = (cmp != 0); break; case Py_LE: cmp = (cmp == -1) || (cmp == 0); break; case Py_GE: cmp = (cmp == 1) || (cmp == 0); break; case Py_LT: cmp = (cmp == -1); break; case Py_GT: cmp = (cmp == 1); break; } return PyBool_FromLong(cmp); onError: return NULL; } static PyObject *mxDateTime_Add(PyObject *left, PyObject *right) { long absdate_offset; double abstime_offset; DPRINTF("mxDateTime_Add: %s + %s\n", left->ob_type->tp_name, right->ob_type->tp_name); /* Make sure that we only have to deal with DateTime + */ if (!_mxDateTime_Check(left)) { if (!_mxDateTime_Check(right)) { Py_INCREF(Py_NotImplemented); return Py_NotImplemented; } return mxDateTime_Add(right, left); } if (_mxDateTimeDelta_Check(right)) { /* DateTime + DateTimeDelta */ abstime_offset = ((mxDateTimeDeltaObject *)right)->seconds; absdate_offset = 0; } else if (_mxDateTime_Check(right)) { /* DateTime + DateTime: not supported */ Py_INCREF(Py_NotImplemented); return Py_NotImplemented; } else { double value; if (PyFloat_Compatible(right)) { /* DateTime - Number (meaning days or fractions thereof) */ value = PyFloat_AsDouble(right) * SECONDS_PER_DAY; if (value < 0.0 && PyErr_Occurred()) { /* Give up and let the right argument try to deal with the operation. */ PyErr_Clear(); Py_INCREF(Py_NotImplemented); return Py_NotImplemented; } } #if HAVE_PYDATETIME else if (mx_PyDelta_Check(right)) { /* DateTime + PyDelta */ /* Make sure the PyDateTimeAPI is loaded */ if (mx_Require_PyDateTimeAPI()) goto onError; value = mx_PyDeltaInSeconds(right); } #endif else { Py_INCREF(Py_NotImplemented); return Py_NotImplemented; } if (value < 0.0 && PyErr_Occurred()) goto onError; DPRINTF("mxDateTime_Add: adding %f seconds\n", value); if (value == 0.0) { Py_INCREF(left); return left; } abstime_offset = value; absdate_offset = 0; } return mxDateTime_FromDateTimeAndOffset((mxDateTimeObject *)left, absdate_offset, abstime_offset); onError: return NULL; } static PyObject *mxDateTime_Sub(PyObject *left, PyObject *right) { mxDateTimeObject *self = (mxDateTimeObject *)left; mxDateTimeObject *other = (mxDateTimeObject *)right; DPRINTF("mxDateTime_Sub: %s - %s\n", left->ob_type->tp_name, right->ob_type->tp_name); if (_mxDateTime_Check(left)) { /* DateTime - */ long absdate_offset; double abstime_offset; if (_mxDateTime_Check(right)) { /* DateTime - DateTime */ return mxDateTimeDelta_FromDaysEx(self->absdate - other->absdate, self->abstime - other->abstime); } else if (_mxDateTimeDelta_Check(right)) { /* DateTime - DateTimeDelta */ abstime_offset = - ((mxDateTimeDeltaObject *)right)->seconds; absdate_offset = 0; } else { double value; if (PyFloat_Compatible(right)) { /* DateTime - Number (meaning days or fractions thereof) */ value = PyFloat_AsDouble(right) * SECONDS_PER_DAY; if (value < 0.0 && PyErr_Occurred()) { /* Give up and let the right argument try to deal with the operation. */ PyErr_Clear(); Py_INCREF(Py_NotImplemented); return Py_NotImplemented; } } #ifdef HAVE_PYDATETIME else if (mx_PyDelta_Check(right)) { /* DateTime - PyDelta */ /* Make sure the PyDateTimeAPI is loaded */ if (mx_Require_PyDateTimeAPI()) goto onError; value = mx_PyDeltaInSeconds(right); } else if (mx_PyDateTime_Check(right)) { /* DateTime - PyDateTime Note: PyDateTime is a subclass of PyDate and mx_PyDate_Check() also matches PyDateTime objects ! */ double abstime; long absdate; if (mx_Require_PyDateTimeAPI()) goto onError; abstime = ( (double)PyDateTime_DATE_GET_HOUR(right) * 3600.0 + (double)PyDateTime_DATE_GET_MINUTE(right) * 60.0 + (double)PyDateTime_DATE_GET_SECOND(right) + (double)PyDateTime_DATE_GET_MICROSECOND(right) * 1e-6); if (mxDateTime_AbsDate(PyDateTime_GET_YEAR(right), PyDateTime_GET_MONTH(right), PyDateTime_GET_DAY(right), MXDATETIME_GREGORIAN_CALENDAR, &absdate)) goto onError; return mxDateTimeDelta_FromDaysEx( self->absdate - absdate, self->abstime - abstime); } else if (mx_PyDate_Check(right)) { /* DateTime - PyDate */ long absdate; if (mx_Require_PyDateTimeAPI()) goto onError; if (mxDateTime_AbsDate(PyDateTime_GET_YEAR(right), PyDateTime_GET_MONTH(right), PyDateTime_GET_DAY(right), MXDATETIME_GREGORIAN_CALENDAR, &absdate)) goto onError; return mxDateTimeDelta_FromDaysEx( self->absdate - absdate, self->abstime); } #endif else { Py_INCREF(Py_NotImplemented); return Py_NotImplemented; } if (value < 0.0 && PyErr_Occurred()) goto onError; DPRINTF("mxDateTime_Sub: subtracting %f seconds\n", value); if (value == 0.0) { Py_INCREF(left); return left; } abstime_offset = -value; absdate_offset = 0; } return mxDateTime_FromDateTimeAndOffset(self, absdate_offset, abstime_offset); } else if (_mxDateTime_Check(right)) { /* - DateTime */ if (_mxDateTimeDelta_Check(left)) { /* DateTimeDelta - DateTime */ Py_INCREF(Py_NotImplemented); return Py_NotImplemented; } else { if (PyFloat_Compatible(left)) { /* Number (meaning days or fractions thereof) - DateTime: not supported */ Py_INCREF(Py_NotImplemented); return Py_NotImplemented; } #ifdef HAVE_PYDATETIME else if (mx_PyDelta_Check(left)) { /* PyDelta - DateTime: not supported */ Py_INCREF(Py_NotImplemented); return Py_NotImplemented; } else if (mx_PyDateTime_Check(left)) { /* PyDateTime - DateTime Note: PyDateTime is a subclass of PyDate and mx_PyDate_Check() also matches PyDateTime objects ! */ double abstime; long absdate; if (mx_Require_PyDateTimeAPI()) goto onError; abstime = ( (double)PyDateTime_DATE_GET_HOUR(left) * 3600.0 + (double)PyDateTime_DATE_GET_MINUTE(left) * 60.0 + (double)PyDateTime_DATE_GET_SECOND(left) + (double)PyDateTime_DATE_GET_MICROSECOND(left) * 1e-6); if (mxDateTime_AbsDate(PyDateTime_GET_YEAR(left), PyDateTime_GET_MONTH(left), PyDateTime_GET_DAY(left), MXDATETIME_GREGORIAN_CALENDAR, &absdate)) goto onError; return mxDateTimeDelta_FromDaysEx( absdate - other->absdate, abstime - other->abstime); } else if (mx_PyDate_Check(left)) { /* PyDate - DateTime */ long absdate; if (mx_Require_PyDateTimeAPI()) goto onError; if (mxDateTime_AbsDate(PyDateTime_GET_YEAR(left), PyDateTime_GET_MONTH(left), PyDateTime_GET_DAY(left), MXDATETIME_GREGORIAN_CALENDAR, &absdate)) goto onError; return mxDateTimeDelta_FromDaysEx( absdate - other->absdate, - other->abstime); } #endif else { Py_INCREF(Py_NotImplemented); return Py_NotImplemented; } } } else { Py_INCREF(Py_NotImplemented); return Py_NotImplemented; } onError: return NULL; } #ifdef WANT_SUBCLASSABLE_TYPES /* Allocate an object without initializing it */ static PyObject *mxDateTime_Allocate(PyTypeObject *type, int nitems) { Py_Assert(nitems == 0, PyExc_TypeError, "DateTime objects do not have items"); if (type == &mxDateTime_Type) return (PyObject *)mxDateTime_New(); else { PyObject *v; v = PyType_GenericAlloc(type, nitems); if (v == NULL) goto onError; return v; } onError: return NULL; } /* Initialize the object according to the args and keywords (__init__) */ static int mxDateTime_Initialize(PyObject *obj, PyObject *args, PyObject *kws) { mxDateTimeObject *self = (mxDateTimeObject *)obj; long year; int month = 1, day = 1; int hour = 0, minute = 0; double second = 0.0; Py_KeywordsGet6Args("l|iiiid",year,month,day,hour,minute,second); if (mxDateTime_SetFromDateAndTime(self, year,month,day, hour,minute,second, MXDATETIME_GREGORIAN_CALENDAR)) goto onError; return 0; onError: return -1; } #endif /* Python Type Tables */ static PyNumberMethods mxDateTime_TypeAsNumber = { /* These slots are not NULL-checked, so we must provide dummy functions */ mxDateTime_Add, /*nb_add*/ mxDateTime_Sub, /*nb_subtract*/ notimplemented2, /*nb_multiply*/ notimplemented2, /*nb_divide*/ notimplemented2, /*nb_remainder*/ notimplemented2, /*nb_divmod*/ notimplemented3, /*nb_power*/ notimplemented1, /*nb_negative*/ notimplemented1, /*nb_positive*/ /* Everything below this line EXCEPT nb_nonzero (!) is NULL checked */ 0, /*nb_absolute*/ mxDateTime_NonZero, /*nb_nonzero*/ 0, /*nb_invert*/ 0, /*nb_lshift*/ 0, /*nb_rshift*/ 0, /*nb_and*/ 0, /*nb_xor*/ 0, /*nb_or*/ 0, /*nb_coerce*/ mxDateTime_AsInt, /*nb_int*/ 0, /*nb_long*/ mxDateTime_AsFloat, /*nb_float*/ 0, /*nb_oct*/ 0, /*nb_hex*/ }; statichere PyTypeObject mxDateTime_Type = { PyObject_HEAD_INIT(0) /* init at startup ! */ 0, /*ob_size*/ "mx.DateTime.DateTime", /*tp_name*/ sizeof(mxDateTimeObject), /*tp_basicsize*/ 0, /*tp_itemsize*/ /* slots */ #ifndef WANT_SUBCLASSABLE_TYPES (destructor)mxDateTime_Free, /*tp_dealloc*/ 0, /*tp_print*/ mxDateTime_Getattr, /*tp_getattr*/ 0, /*tp_setattr*/ mxDateTime_Compare, /*tp_compare*/ mxDateTime_Repr, /*tp_repr*/ &mxDateTime_TypeAsNumber, /*tp_as_number*/ 0, /*tp_as_sequence*/ 0, /*tp_as_mapping*/ mxDateTime_Hash, /*tp_hash*/ 0, /*tp_call*/ mxDateTime_Str, /*tp_str*/ 0, /*tp_getattro*/ 0, /*tp_setattro*/ 0, /*tp_as_buffer*/ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_CHECKTYPES, /*tp_flags*/ 0, /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ mxDateTime_RichCompare, /* tp_richcompare */ 0, /* tp_weaklistoffset */ 0, /* tp_iter */ 0, /* tp_iternext */ mxDateTime_Methods, /* tp_methods */ 0, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ 0, /* tp_init */ 0, /* tp_alloc */ 0, /* tp_new */ 0, /* tp_free */ #else (destructor)mxDateTime_Deallocate, /*tp_dealloc*/ 0, /*tp_print*/ mxDateTime_Getattr, /*tp_getattr*/ 0, /*tp_setattr*/ mxDateTime_Compare, /*tp_compare*/ mxDateTime_Repr, /*tp_repr*/ &mxDateTime_TypeAsNumber, /*tp_as_number*/ 0, /*tp_as_sequence*/ 0, /*tp_as_mapping*/ mxDateTime_Hash, /*tp_hash*/ 0, /*tp_call*/ mxDateTime_Str, /*tp_str*/ PyObject_GenericGetAttr, /*tp_getattro*/ PyObject_GenericSetAttr, /*tp_setattro*/ 0, /*tp_as_buffer*/ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE | Py_TPFLAGS_CHECKTYPES, /* tp_flags */ 0, /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ mxDateTime_RichCompare, /* tp_richcompare */ 0, /* tp_weaklistoffset */ 0, /* tp_iter */ 0, /* tp_iternext */ mxDateTime_Methods, /* tp_methods */ 0, /* tp_members */ mxDateTime_MemberAccess, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ mxDateTime_Initialize, /* tp_init */ mxDateTime_Allocate, /* tp_alloc */ PyType_GenericNew, /* tp_new */ (destructor)mxDateTime_Free, /* tp_free */ 0, /* tp_is_gc */ 0, /* tp_bases */ 0, /* tp_mro */ 0, /* tp_cache */ 0, /* tp_subclasses */ 0, /* tp_weaklist */ #endif }; /* --- DateTimeDelta Object -----------------------------------------*/ /* --- allocation --- */ static mxDateTimeDeltaObject *mxDateTimeDelta_New(void) { mxDateTimeDeltaObject *delta; #ifdef MXDATETIMEDELTA_FREELIST if (mxDateTimeDelta_FreeList) { delta = mxDateTimeDelta_FreeList; mxDateTimeDelta_FreeList = \ *(mxDateTimeDeltaObject **)mxDateTimeDelta_FreeList; delta->ob_type = &mxDateTimeDelta_Type; _Py_NewReference(delta); } else #endif { delta = PyObject_NEW(mxDateTimeDeltaObject,&mxDateTimeDelta_Type); if (delta == NULL) return NULL; } return delta; } /* --- deallocation --- */ static void mxDateTimeDelta_Free(mxDateTimeDeltaObject *delta) { #ifdef MXDATETIMEDELTA_FREELIST # ifdef WANT_SUBCLASSABLE_TYPES if (_mxDateTimeDelta_CheckExact(delta)) # endif { /* Append to free list */ *(mxDateTimeDeltaObject **)delta = mxDateTimeDelta_FreeList; mxDateTimeDelta_FreeList = delta; } #else PyObject_Del(delta); #endif } /* --- internal functions --- */ /* We may have a need for this in the future: */ #define mxDateTimeDelta_SetFromDaysEx(delta,days,seconds) \ mxDateTimeDelta_SetFromSeconds(delta, SECONDS_PER_DAY*days + seconds) static int mxDateTimeDelta_SetFromSeconds(mxDateTimeDeltaObject *delta, double seconds) { if (delta == NULL) { PyErr_BadInternalCall(); goto onError; } /* Store the internal seconds value as-is */ delta->seconds = seconds; /* The broken down values are always positive: force seconds to be positive. */ if (DOUBLE_IS_NEGATIVE(seconds)) seconds = -seconds; /* Range check */ Py_AssertWithArg(seconds <= SECONDS_PER_DAY * (double)LONG_MAX, mxDateTime_RangeError, "DateTimeDelta value out of range: %i seconds", (int)seconds); /* Calculate the broken down time */ { register long wholeseconds; long day = 0; short hour,minute; double second; /* Calculate day part and then normalize seconds to be in the range 0 <= seconds < 86400.0 */ day += (long)(seconds / SECONDS_PER_DAY); seconds -= SECONDS_PER_DAY * (double)day; /* Some compilers (e.g. gcc 2.95.3 on Mandrake) have troubles with getting rounding right even though 86400.0 IS exactly representable using IEEE floats... */ if (seconds >= SECONDS_PER_DAY) { day++; seconds -= SECONDS_PER_DAY; } /* Calculate the other parts based on the normalized seconds value */ wholeseconds = (long)seconds; hour = (short)(wholeseconds / 3600); minute = (short)((wholeseconds % 3600) / 60); second = seconds - (double)(hour*3600 + minute*60); /* Fix a possible rounding error */ if (DOUBLE_IS_NEGATIVE(second)) second = 0.0; DPRINTF("mxDateTimeDelta_SetFromSeconds: " "seconds=%f day=%ld hour=%i minute=%i second=%f\n", delta->seconds,day,hour,minute,second); delta->day = day; delta->hour = (signed char)hour; delta->minute = (signed char)minute; delta->second = second; } return 0; onError: return -1; } /* --- API functions --- */ statichere PyObject *mxDateTimeDelta_FromDaysEx(long days, double seconds) { mxDateTimeDeltaObject *delta; delta = mxDateTimeDelta_New(); if (delta == NULL) return NULL; if (mxDateTimeDelta_SetFromDaysEx(delta,days,seconds)) goto onError; return (PyObject *)delta; onError: mxDateTimeDelta_Free(delta); return NULL; } statichere PyObject *mxDateTimeDelta_FromSeconds(double seconds) { mxDateTimeDeltaObject *delta; delta = mxDateTimeDelta_New(); if (delta == NULL) return NULL; if (mxDateTimeDelta_SetFromSeconds(delta,seconds)) goto onError; return (PyObject *)delta; onError: mxDateTimeDelta_Free(delta); return NULL; } static PyObject *mxDateTimeDelta_FromDays(double days) { mxDateTimeDeltaObject *delta; delta = mxDateTimeDelta_New(); if (delta == NULL) return NULL; if (mxDateTimeDelta_SetFromSeconds(delta,days * SECONDS_PER_DAY)) goto onError; return (PyObject *)delta; onError: mxDateTimeDelta_Free(delta); return NULL; } static PyObject *mxDateTimeDelta_FromTime(int hours, int minutes, double seconds) { mxDateTimeDeltaObject *delta; delta = mxDateTimeDelta_New(); if (delta == NULL) return NULL; seconds += (double)(hours * 3600 + minutes * 60); if (mxDateTimeDelta_SetFromSeconds(delta,seconds)) goto onError; return (PyObject *)delta; onError: mxDateTimeDelta_Free(delta); return NULL; } static PyObject *mxDateTimeDelta_FromTuple(PyObject *v) { mxDateTimeDeltaObject *delta = 0; int days; double seconds; if (!PyTuple_Check(v)) { PyErr_BadInternalCall(); return NULL; } if (!PyArg_ParseTuple(v, "id;need a 2-tuple (days,seconds)", &days,&seconds)) return NULL; delta = mxDateTimeDelta_New(); if (delta == NULL) return NULL; if (mxDateTimeDelta_SetFromDaysEx(delta,days,seconds)) goto onError; return (PyObject *)delta; onError: mxDateTimeDelta_Free(delta); return NULL; } static PyObject *mxDateTimeDelta_FromTimeTuple(PyObject *v) { mxDateTimeDeltaObject *delta = 0; double hours,minutes,seconds; if (!PyTuple_Check(v)) { PyErr_BadInternalCall(); return NULL; } if (!PyArg_ParseTuple(v, "ddd;need a 3-tuple (hours,minutes,seconds)", &hours,&minutes,&seconds)) return NULL; delta = mxDateTimeDelta_New(); if (delta == NULL) return NULL; if (mxDateTimeDelta_SetFromSeconds(delta, hours * 3600.0 + minutes * 60.0 + seconds)) goto onError; return (PyObject *)delta; onError: mxDateTimeDelta_Free(delta); return NULL; } static double mxDateTimeDelta_AsDouble(mxDateTimeDeltaObject *delta) { return delta->seconds; } static double mxDateTimeDelta_AsDays(mxDateTimeDeltaObject *delta) { return delta->seconds / SECONDS_PER_DAY; } static int mxDateTimeDelta_BrokenDown(mxDateTimeDeltaObject *delta, long *day, int *hour, int *minute, double *second) { if (day) *day = (long)delta->day; if (hour) *hour = (int)delta->hour; if (minute) *minute = (int)delta->minute; if (second) *second = (double)delta->second; return 0; } /* Writes a string representation to buffer. If the string does not fit the buffer, nothing is written. */ static void mxDateTimeDelta_AsString(mxDateTimeDeltaObject *self, char *buffer, int buffer_len) { double second; if (!buffer || buffer_len < 50) return; second = mxDateTime_FixSecondDisplay(self->second); if (self->day != 0) { if (self->seconds >= 0.0) sprintf(buffer,"%ld:%02i:%02i:%05.2f", (long)self->day,(int)self->hour, (int)self->minute,(float)second); else sprintf(buffer,"-%ld:%02i:%02i:%05.2f", (long)self->day,(int)self->hour, (int)self->minute,(float)second); } else { if (self->seconds >= 0.0) sprintf(buffer,"%02i:%02i:%05.2f", (int)self->hour,(int)self->minute,(float)second); else sprintf(buffer,"-%02i:%02i:%05.2f", (int)self->hour,(int)self->minute,(float)second); } } /* --- methods --- (should have lowercase extension) */ #define delta ((mxDateTimeDeltaObject*)self) #ifdef HAVE_STRFTIME Py_C_Function( mxDateTimeDelta_strftime, "strftime(formatstr)\n\n" "Returns a formatted string of the time (ignoring the sign).\n" "Of course, it only makes sense to use time related\n" "specifiers. The delta sign is not taken into account.\n" "All values are shown positive.") { PyObject *v; struct tm tm; char *fmt; char *output = 0; Py_ssize_t len_output,size_output = STRFTIME_OUTPUT_SIZE; Py_GetArg("s",fmt); Py_Assert((long)((int)delta->day) == delta->day, mxDateTime_RangeError, "days out of range for strftime() formatting"); /* Init to the epoch */ memset(&tm,0,sizeof(tm)); tm.tm_year = 0; /* Store the values in their appropriate places */ tm.tm_mday = (int)delta->day; tm.tm_hour = (int)delta->hour; tm.tm_min = (int)delta->minute; tm.tm_sec = (int)delta->second; output = new(char,size_output); while (1) { if (output == NULL) { PyErr_NoMemory(); goto onError; } len_output = strftime(output,size_output,fmt,&tm); if (len_output == size_output) { size_output *= 2; output = resize(output,char,size_output); } else break; } v = PyString_FromStringAndSize(output,len_output); if (v == NULL) goto onError; free(output); return v; onError: if (output) free(output); return NULL; } #endif Py_C_Function( mxDateTimeDelta_absvalues, "absvalues()\n\n" "Return a (absdays,absseconds) tuple. The absseconds part is\n" "normalized in such way that it is always < 86400.0. The\n" "values can be used to do date/time calculations.\n" "Both are signed.") { long days; double seconds; Py_NoArgsCheck(); seconds = delta->seconds; days = (long)(seconds / SECONDS_PER_DAY); seconds = seconds - SECONDS_PER_DAY * (double)days; return Py_BuildValue("ld", days, seconds); onError: return NULL; } Py_C_Function( mxDateTimeDelta_tuple, "tuple()\n\n" "Return a (day,hour,minute,second) tuple. The values are all\n" "signed and use the same conventions as the attributes of\n" "the same name.") { Py_NoArgsCheck(); if (!DOUBLE_IS_NEGATIVE(delta->seconds)) return Py_BuildValue("liii", (long)delta->day, (int)delta->hour, (int)delta->minute, (int)delta->second); else return Py_BuildValue("liii", -(long)delta->day, -(int)delta->hour, -(int)delta->minute, -(int)delta->second); onError: return NULL; } Py_C_Function_WithKeywords( mxDateTimeDelta_rebuild, "rebuild(day=None,hour=None,minute=None,second=None)\n\n" "Returns a DateTimeDelta object with the given time values\n" "replaced by new values." ) { double day, hour, minute, second; /* Get the broken down values */ day = (double) delta->day; hour = (double) delta->hour; minute = (double) delta->minute; second = delta->second; /* Override them with parameters */ Py_KeywordsGet4Args("|dddd",day,hour,minute,second); /* Build new object */ return mxDateTimeDelta_FromSeconds(day*SECONDS_PER_DAY + hour*3600.0 + minute*60.0 + second); onError: return NULL; } #ifdef HAVE_PYDATETIME Py_C_Function_WithKeywords( mxDateTimeDelta_pytime, "pytime()\n\n" "Returns a datetime.time object with the same values." ) { int second, microsecond; Py_NoArgsCheck(); /* Convert values */ Py_Assert(delta->day == 0, PyExc_ValueError, "cannot convert DateTimeDelta spanning days " "to a dateime.time object"); second = (int)(delta->second); microsecond = (int)((delta->second - (double)second) * 1e6); /* Make sure the PyDateTimeAPI is loaded */ if (mx_Require_PyDateTimeAPI()) goto onError; /* Build new object */ return PyTime_FromTime((int)delta->hour, (int)delta->minute, second, microsecond); onError: return NULL; } Py_C_Function_WithKeywords( mxDateTimeDelta_pytimedelta, "pytimedelta()\n\n" "Returns a datetime.timedelta object with the same values." ) { int days; double remaining_seconds; int seconds, microseconds; Py_NoArgsCheck(); /* Convert values */ days = (int)(delta->seconds / SECONDS_PER_DAY); remaining_seconds = delta->seconds - (double)days * SECONDS_PER_DAY; seconds = (int)remaining_seconds; microseconds = (int)((remaining_seconds - (double)seconds) * 1e6); /* Make sure the PyDateTimeAPI is loaded */ if (mx_Require_PyDateTimeAPI()) goto onError; /* Build new object */ return PyDelta_FromDSU(days, seconds, microseconds); onError: return NULL; } #endif #ifdef COPY_PROTOCOL Py_C_Function( mxDateTimeDelta_copy, "copy([memo])\n" "Return a new reference for the instance. This function\n" "is used for the copy-protocol. Real copying doesn't take\n" "place, since the instances are immutable.") { PyObject *memo; Py_GetArg("|O",memo); Py_INCREF(delta); return (PyObject *)delta; onError: return NULL; } #endif #ifdef OLD_INTERFACE /* Old interface */ Py_C_Function( mxDateTimeDelta_as_timetuple, "as_timetuple()\n\n" "Return a (hour,minute,second) tuple. The values are all\n" "signed.") { Py_NoArgsCheck(); if (!DOUBLE_IS_NEGATIVE(delta->seconds)) return Py_BuildValue("iid", (int)delta->hour, (int)delta->minute, delta->second); else return Py_BuildValue("iid", -(int)delta->hour, -(int)delta->minute, -delta->second); onError: return NULL; } Py_C_Function( mxDateTimeDelta_as_ticks, "as_ticks()\n\n" "Return the objects value in seconds. Days are converted\n" "using 86400.0 seconds. The returned value is signed.") { Py_NoArgsCheck(); return PyFloat_FromDouble(mxDateTimeDelta_AsDouble(delta)); onError: return NULL; } #endif #undef delta /* --- slots --- */ static PyObject *mxDateTimeDelta_AsFloat(PyObject *obj) { mxDateTimeDeltaObject *self = (mxDateTimeDeltaObject *)obj; return PyFloat_FromDouble(mxDateTimeDelta_AsDouble(self)); } static PyObject *mxDateTimeDelta_AsInt(PyObject *obj) { mxDateTimeDeltaObject *self = (mxDateTimeDeltaObject *)obj; return PyInt_FromLong((long)mxDateTimeDelta_AsDouble(self)); } static PyObject *mxDateTimeDelta_Str(PyObject *obj) { mxDateTimeDeltaObject *self = (mxDateTimeDeltaObject *)obj; char s[50]; mxDateTimeDelta_AsString(self,s,sizeof(s)); return PyString_FromString(s); } static PyObject *mxDateTimeDelta_Repr(PyObject *obj) { mxDateTimeDeltaObject *self = (mxDateTimeDeltaObject *)obj; char t[100]; char s[50]; mxDateTimeDelta_AsString(self, s, sizeof(s)); sprintf(t,"<%s object for '%s' at %lx>", self->ob_type->tp_name, s, (long)self); return PyString_FromString(t); } static PyObject *mxDateTimeDelta_Getattr(PyObject *obj, char *name) { mxDateTimeDeltaObject *self = (mxDateTimeDeltaObject *)obj; if (Py_WantAttr(name,"hour")) { if (!DOUBLE_IS_NEGATIVE(self->seconds)) return PyInt_FromLong((long)self->hour); else return PyInt_FromLong(-(long)self->hour); } else if (Py_WantAttr(name,"minute")) { if (!DOUBLE_IS_NEGATIVE(self->seconds)) return PyInt_FromLong((long)self->minute); else return PyInt_FromLong(-(long)self->minute); } else if (Py_WantAttr(name,"second")) { if (!DOUBLE_IS_NEGATIVE(self->seconds)) return PyFloat_FromDouble(self->second); else return PyFloat_FromDouble(-self->second); } else if (Py_WantAttr(name,"day")) { if (!DOUBLE_IS_NEGATIVE(self->seconds)) return PyInt_FromLong((long)self->day); else return PyInt_FromLong(-(long)self->day); } else if (Py_WantAttr(name,"seconds")) return PyFloat_FromDouble(self->seconds); else if (Py_WantAttr(name,"minutes")) return PyFloat_FromDouble(self->seconds / 60.0); else if (Py_WantAttr(name,"hours")) return PyFloat_FromDouble(self->seconds / 3600.0); else if (Py_WantAttr(name,"days")) return PyFloat_FromDouble(self->seconds / SECONDS_PER_DAY); /* For Zope security */ else if (Py_WantAttr(name,"__roles__")) { Py_INCREF(Py_None); return Py_None; } else if (Py_WantAttr(name,"__allow_access_to_unprotected_subobjects__")) return PyInt_FromLong(1L); else if (Py_WantAttr(name,"__members__")) return Py_BuildValue("[ssssssss]", "hour","minute","second", "day","seconds","minutes", "hours","days"); return Py_FindMethod(mxDateTimeDelta_Methods, (PyObject *)self,name); } static long mxDateTimeDelta_Hash(PyObject *obj) { mxDateTimeDeltaObject *self = (mxDateTimeDeltaObject *)obj; long x = 0; long z[sizeof(double)/sizeof(long)+1]; register int i; /* Clear z */ for (i = sizeof(z) / sizeof(long) - 1; i >= 0; i--) z[i] = 0; /* Copy the double onto z */ *((double *)z) = self->seconds; /* Hash the longs in z together using XOR */ for (i = sizeof(z) / sizeof(long) - 1; i >= 0; i--) x ^= z[i]; /* Errors are indicated by returning -1, so we have to fix that hash value by hand. */ if (x == -1) x = 19980428; return x; } static int mxDateTimeDelta_Compare(PyObject *left, PyObject *right) { mxDateTimeDeltaObject *self = (mxDateTimeDeltaObject *)left; mxDateTimeDeltaObject *other = (mxDateTimeDeltaObject *)right; DPRINTF("mxDateTimeDelta_Compare: " "%s op %s\n", left->ob_type->tp_name, right->ob_type->tp_name); if (self == other) return 0; /* Short-cut */ if (_mxDateTimeDelta_Check(left) && _mxDateTimeDelta_Check(right)) { double i = self->seconds; double j = other->seconds; return (i < j) ? -1 : (i > j) ? 1 : 0; } Py_Error(PyExc_TypeError, "can't compare types"); onError: return -1; } static PyObject *mxDateTimeDelta_RichCompare(PyObject *left, PyObject *right, int op) { mxDateTimeDeltaObject *self = (mxDateTimeDeltaObject *)left; mxDateTimeDeltaObject *other = (mxDateTimeDeltaObject *)right; int cmp; DPRINTF("mxDateTimeDelta_RichCompare: " "%s op %s (op=%i)\n", left->ob_type->tp_name, right->ob_type->tp_name, op); /* Same type comparison */ if (self == other) cmp = 0; else if (_mxDateTimeDelta_Check(left) && _mxDateTimeDelta_Check(right)) { double i = self->seconds; double j = other->seconds; cmp = (i < j) ? -1 : (i > j) ? 1 : 0; } /* Make sure that we only have to deal with DateTimeDelta op */ else if (_mxDateTimeDelta_Check(right)) { return mxDateTimeDelta_RichCompare(right, left, SWAPPED_ARGS_RICHCOMPARE_OP(op)); } else if (!_mxDateTimeDelta_Check(left)) { Py_INCREF(Py_NotImplemented); return Py_NotImplemented; } else if (_mxDateTime_Check(right)) { /* DateTimeDelta op DateTime: not supported */ Py_INCREF(Py_NotImplemented); return Py_NotImplemented; } else if (PyFloat_Compatible(right)) { /* DateTimeDelta op number -- compare seconds */ double t1 = PyFloat_AsDouble(right); double t0 = mxDateTimeDelta_AsDouble(self); if (t1 == -1.0 && PyErr_Occurred()) { /* Give up and let the right argument try to deal with the operation. */ PyErr_Clear(); Py_INCREF(Py_NotImplemented); return Py_NotImplemented; } if (t0 == -1.0 && PyErr_Occurred()) goto onError; cmp = (t0 < t1) ? -1 : (t0 > t1) ? 1 : 0; } #ifdef HAVE_PYDATETIME else if (mx_PyDelta_Check(right)) { /* DateTimeDelta op PyDelta */ double t0, t1; /* Make sure the PyDateTimeAPI is loaded */ if (mx_Require_PyDateTimeAPI()) goto onError; t0 = mxDateTimeDelta_AsDouble(self); t1 = mx_PyDeltaInSeconds(right); if ((t0 == -1.0 || t1 == -1.0) && PyErr_Occurred()) goto onError; cmp = (t0 < t1) ? -1 : (t0 > t1) ? 1 : 0; } else if (mx_PyTime_Check(right)) { /* DateTimeDelta op PyTime */ double t0, t1; /* Make sure the PyDateTimeAPI is loaded */ if (mx_Require_PyDateTimeAPI()) goto onError; t0 = mxDateTimeDelta_AsDouble(self); t1 = mx_PyTimeInSeconds(right); if ((t0 == -1.0 || t1 == -1.0) && PyErr_Occurred()) goto onError; cmp = (t0 < t1) ? -1 : (t0 > t1) ? 1 : 0; } #endif else { Py_INCREF(Py_NotImplemented); return Py_NotImplemented; } /* Build result */ switch (op) { case Py_EQ: cmp = (cmp == 0); break; case Py_NE: cmp = (cmp != 0); break; case Py_LE: cmp = (cmp == -1) || (cmp == 0); break; case Py_GE: cmp = (cmp == 1) || (cmp == 0); break; case Py_LT: cmp = (cmp == -1); break; case Py_GT: cmp = (cmp == 1); break; } return PyBool_FromLong(cmp); onError: return NULL; } static PyObject *mxDateTimeDelta_Negative(PyObject *obj) { mxDateTimeDeltaObject *self = (mxDateTimeDeltaObject *)obj; return mxDateTimeDelta_FromSeconds(-self->seconds); } static PyObject *mxDateTimeDelta_Positive(PyObject *obj) { mxDateTimeDeltaObject *self = (mxDateTimeDeltaObject *)obj; Py_INCREF(self); return (PyObject *)self; } static PyObject *mxDateTimeDelta_Abs(PyObject *obj) { mxDateTimeDeltaObject *self = (mxDateTimeDeltaObject *)obj; if (self->seconds >= 0) { Py_INCREF(self); return (PyObject *)self; } else return mxDateTimeDelta_FromSeconds(-self->seconds); } static int mxDateTimeDelta_NonZero(PyObject *obj) { mxDateTimeDeltaObject *self = (mxDateTimeDeltaObject *)obj; return (self->seconds != (double)0.0); } static PyObject *mxDateTimeDelta_Add(PyObject *left, PyObject *right) { mxDateTimeDeltaObject *self = (mxDateTimeDeltaObject *)left; mxDateTimeDeltaObject *other = (mxDateTimeDeltaObject *)right; DPRINTF("mxDateTimeDelta_Add: %s + %s\n", left->ob_type->tp_name, right->ob_type->tp_name); /* Make sure that we only have to deal with DateTimeDelta + */ if (!_mxDateTimeDelta_Check(left)) { if (!_mxDateTimeDelta_Check(right)) { Py_INCREF(Py_NotImplemented); return Py_NotImplemented; } return mxDateTimeDelta_Add(right, left); } if (_mxDateTimeDelta_Check(right)) { /* DateTimeDelta + DateTimeDelta */ return mxDateTimeDelta_FromSeconds(self->seconds + other->seconds); } else if (_mxDateTime_Check(right)) { /* DateTimeDelta + DateTime */ return mxDateTime_Add(right, left); } else { double value; if (PyFloat_Compatible(right)) { /* DateTimeDelta + Number (meaning seconds) */ value = PyFloat_AsDouble(right); if (value == -1.0 && PyErr_Occurred()) { /* Give up and let the right argument try to deal with the operation. */ PyErr_Clear(); Py_INCREF(Py_NotImplemented); return Py_NotImplemented; } } #ifdef HAVE_PYDATETIME else if (mx_PyDelta_Check(right)) { /* DateTimeDelta + PyDelta */ /* Make sure the PyDateTimeAPI is loaded */ if (mx_Require_PyDateTimeAPI()) goto onError; value = mx_PyDeltaInSeconds(right); } else if (mx_PyTime_Check(right)) { /* Make sure the PyDateTimeAPI is loaded */ if (mx_Require_PyDateTimeAPI()) goto onError; /* DateTimeDelta + PyTime */ value = mx_PyTimeInSeconds(right); } #endif else { Py_INCREF(Py_NotImplemented); return Py_NotImplemented; } if (value < 0.0 && PyErr_Occurred()) goto onError; DPRINTF("mxDateTimeDelta_Add: adding %f seconds\n", value); if (value == 0.0) { Py_INCREF(left); return left; } return mxDateTimeDelta_FromSeconds(self->seconds + value); } onError: return NULL; } static PyObject *mxDateTimeDelta_Sub(PyObject *left, PyObject *right) { mxDateTimeDeltaObject *self = (mxDateTimeDeltaObject *)left; mxDateTimeDeltaObject *other = (mxDateTimeDeltaObject *)right; DPRINTF("mxDateTimeDelta_Sub: %s - %s\n", left->ob_type->tp_name, right->ob_type->tp_name); if (_mxDateTimeDelta_Check(left)) { /* DateTimeDelta - */ if (_mxDateTimeDelta_Check(right)) { /* DateTimeDelta - DateTimeDelta */ return mxDateTimeDelta_FromSeconds(self->seconds - other->seconds); } else if (_mxDateTime_Check(right)) { /* DateTimeDelta - DateTime: not supported */ Py_INCREF(Py_NotImplemented); return Py_NotImplemented; } else { double value; if (PyFloat_Compatible(right)) { /* DateTimeDelta - Number (meaning seconds) */ value = PyFloat_AsDouble(right); if (value == -1.0 && PyErr_Occurred()) { /* Give up and let the right argument try to deal with the operation. */ PyErr_Clear(); Py_INCREF(Py_NotImplemented); return Py_NotImplemented; } } #ifdef HAVE_PYDATETIME else if (mx_PyDelta_Check(right)) { /* DateTimeDelta - PyDelta */ /* Make sure the PyDateTimeAPI is loaded */ if (mx_Require_PyDateTimeAPI()) goto onError; value = mx_PyDeltaInSeconds(right); } else if (mx_PyTime_Check(right)) { /* Make sure the PyDateTimeAPI is loaded */ if (mx_Require_PyDateTimeAPI()) goto onError; /* DateTimeDelta - PyTime */ value = mx_PyTimeInSeconds(right); } #endif else { Py_INCREF(Py_NotImplemented); return Py_NotImplemented; } if (value < 0.0 && PyErr_Occurred()) goto onError; DPRINTF("mxDateTimeDelta_Sub: subtracting %f seconds\n", value); if (value == 0.0) { Py_INCREF(left); return left; } return mxDateTimeDelta_FromSeconds(self->seconds - value); } } else if (_mxDateTimeDelta_Check(right)) { /* - DateTimeDelta */ if (_mxDateTime_Check(left)) { /* DateTime - DateTimeDelta */ return mxDateTime_Sub(left, right); } else { double value; if (PyFloat_Compatible(left)) { /* Number (meaning seconds) - DateTimeDelta: not supported */ Py_INCREF(Py_NotImplemented); return Py_NotImplemented; } #ifdef HAVE_PYDATETIME else if (mx_PyDelta_Check(left)) { /* PyDelta - DateTimeDelta */ /* Make sure the PyDateTimeAPI is loaded */ if (mx_Require_PyDateTimeAPI()) goto onError; value = mx_PyDeltaInSeconds(left); } else if (mx_PyTime_Check(left)) { /* Make sure the PyDateTimeAPI is loaded */ if (mx_Require_PyDateTimeAPI()) goto onError; /* PyTime - DateTimeDelta */ value = mx_PyTimeInSeconds(left); } #endif else { Py_INCREF(Py_NotImplemented); return Py_NotImplemented; } if (value < 0.0 && PyErr_Occurred()) goto onError; if (value == 0.0) { Py_INCREF(right); return right; } return mxDateTimeDelta_FromSeconds(value - other->seconds); } } else { Py_INCREF(Py_NotImplemented); return Py_NotImplemented; } onError: return NULL; } static PyObject *mxDateTimeDelta_Multiply(PyObject *left, PyObject *right) { mxDateTimeDeltaObject *self = (mxDateTimeDeltaObject *)left; DPRINTF("mxDateTimeDelta_Multiply: %s * %s\n", left->ob_type->tp_name, right->ob_type->tp_name); if (_mxDateTimeDelta_Check(left)) { /* DateTimeDelta * */ if (_mxDateTimeDelta_Check(right)) { /* DateTimeDelta * DateTimeDelta: not supported */ Py_INCREF(Py_NotImplemented); return Py_NotImplemented; } else if (_mxDateTime_Check(right)) { /* DateTimeDelta * DateTime: not supported */ Py_INCREF(Py_NotImplemented); return Py_NotImplemented; } else if (PyFloat_Compatible(right)) { /* DateTimeDelta * Number */ double value = PyFloat_AsDouble(right); if (value == -1.0 && PyErr_Occurred()) { /* Give up and let the right argument try to deal with the operation. */ PyErr_Clear(); Py_INCREF(Py_NotImplemented); return Py_NotImplemented; } if (value == 1.0) { Py_INCREF(self); return (PyObject *)self; } return mxDateTimeDelta_FromSeconds(self->seconds * value); } else { Py_INCREF(Py_NotImplemented); return Py_NotImplemented; } } else if (_mxDateTimeDelta_Check(right)) { /* * DateTimeDelta: same as DateTimeDelta * */ return mxDateTimeDelta_Multiply(right, left); } else { Py_INCREF(Py_NotImplemented); return Py_NotImplemented; } /* Silence compiler warning */ goto onError; onError: return NULL; } static PyObject *mxDateTimeDelta_Divide(PyObject *left, PyObject *right) { mxDateTimeDeltaObject *self = (mxDateTimeDeltaObject *)left; mxDateTimeDeltaObject *other = (mxDateTimeDeltaObject *)right; double value; DPRINTF("mxDateTimeDelta_Divide: %s / %s\n", left->ob_type->tp_name, right->ob_type->tp_name); if (_mxDateTimeDelta_Check(left)) { /* DateTimeDelta / */ if (_mxDateTimeDelta_Check(right)) { /* DateTimeDelta / DateTimeDelta */ value = other->seconds; } else if (_mxDateTime_Check(right)) { /* DateTimeDelta / DateTime: not supported */ Py_INCREF(Py_NotImplemented); return Py_NotImplemented; } #ifdef HAVE_PYDATETIME else if (mx_PyDelta_Check(right)) { /* DateTimeDelta / PyDelta */ /* Make sure the PyDateTimeAPI is loaded */ if (mx_Require_PyDateTimeAPI()) goto onError; value = mx_PyDeltaInSeconds(right); } else if (mx_PyTime_Check(right)) { /* Make sure the PyDateTimeAPI is loaded */ if (mx_Require_PyDateTimeAPI()) goto onError; /* DateTimeDelta / PyTime */ value = mx_PyTimeInSeconds(right); } #endif else if (PyFloat_Compatible(right)) { /* DateTimeDelta / Number */ value = PyFloat_AsDouble(right); if (value == -1.0 && PyErr_Occurred()) { /* Give up and let the right argument try to deal with the operation. */ PyErr_Clear(); Py_INCREF(Py_NotImplemented); return Py_NotImplemented; } Py_Assert(value != 0.0, PyExc_ZeroDivisionError, "DateTimeDelta zero division"); if (value == 1.0) { Py_INCREF(left); return left; } return mxDateTimeDelta_FromSeconds(self->seconds / value); } else { Py_INCREF(Py_NotImplemented); return Py_NotImplemented; } if (value < 0.0 && PyErr_Occurred()) goto onError; Py_Assert(value != 0.0, PyExc_ZeroDivisionError, "DateTimeDelta zero division"); return PyFloat_FromDouble(self->seconds / value); } else if (_mxDateTimeDelta_Check(right)) { /* / DateTimeDelta */ if (_mxDateTime_Check(left)) { /* DateTime / DateTimeDelta: not supported */ Py_INCREF(Py_NotImplemented); return Py_NotImplemented; } #ifdef HAVE_PYDATETIME else if (mx_PyDelta_Check(left)) { /* PyDelta / DateTimeDelta */ /* Make sure the PyDateTimeAPI is loaded */ if (mx_Require_PyDateTimeAPI()) goto onError; value = mx_PyDeltaInSeconds(left); } else if (mx_PyTime_Check(left)) { /* Make sure the PyDateTimeAPI is loaded */ if (mx_Require_PyDateTimeAPI()) goto onError; /* PyTime / DateTimeDelta */ value = mx_PyTimeInSeconds(left); } #endif else if (PyFloat_Compatible(left)) { /* Number / DateTimeDelta: not supported */ Py_INCREF(Py_NotImplemented); return Py_NotImplemented; } else { Py_INCREF(Py_NotImplemented); return Py_NotImplemented; } if (value < 0.0 && PyErr_Occurred()) goto onError; Py_Assert(other->seconds != 0.0, PyExc_ZeroDivisionError, "DateTimeDelta zero division"); return PyFloat_FromDouble(value / other->seconds); } else { Py_INCREF(Py_NotImplemented); return Py_NotImplemented; } onError: return NULL; } /* Python Type Tables */ static PyNumberMethods mxDateTimeDelta_TypeAsNumber = { /* These slots are not NULL-checked, so we must provide dummy functions */ mxDateTimeDelta_Add, /*nb_add*/ mxDateTimeDelta_Sub, /*nb_subtract*/ mxDateTimeDelta_Multiply, /*nb_multiply*/ mxDateTimeDelta_Divide, /*nb_divide*/ notimplemented2, /*nb_remainder*/ notimplemented2, /*nb_divmod*/ notimplemented3, /*nb_power*/ mxDateTimeDelta_Negative, /*nb_negative*/ mxDateTimeDelta_Positive, /*nb_positive*/ /* Everything below this line EXCEPT nb_nonzero (!) is NULL checked */ mxDateTimeDelta_Abs, /*nb_absolute*/ mxDateTimeDelta_NonZero, /*nb_nonzero*/ 0, /*nb_invert*/ 0, /*nb_lshift*/ 0, /*nb_rshift*/ 0, /*nb_and*/ 0, /*nb_xor*/ 0, /*nb_or*/ 0, /*nb_coerce*/ mxDateTimeDelta_AsInt, /*nb_int*/ 0, /*nb_long*/ mxDateTimeDelta_AsFloat, /*nb_float*/ 0, /*nb_oct*/ 0, /*nb_hex*/ }; statichere PyTypeObject mxDateTimeDelta_Type = { PyObject_HEAD_INIT(0) /* init at startup ! */ 0, /*ob_size*/ "mx.DateTime.DateTimeDelta", /*tp_name*/ sizeof(mxDateTimeDeltaObject), /*tp_basicsize*/ 0, /*tp_itemsize*/ /* slots */ (destructor)mxDateTimeDelta_Free, /*tp_dealloc*/ 0, /*tp_print*/ mxDateTimeDelta_Getattr, /*tp_getattr*/ 0, /*tp_setattr*/ mxDateTimeDelta_Compare, /*tp_compare*/ mxDateTimeDelta_Repr, /*tp_repr*/ &mxDateTimeDelta_TypeAsNumber, /*tp_as_number*/ 0, /*tp_as_sequence*/ 0, /*tp_as_mapping*/ mxDateTimeDelta_Hash, /*tp_hash*/ 0, /*tp_call*/ mxDateTimeDelta_Str, /*tp_str*/ 0, /*tp_getattro*/ 0, /*tp_setattro*/ 0, /*tp_as_buffer*/ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_CHECKTYPES, /*tp_flags*/ 0, /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ mxDateTimeDelta_RichCompare, /* tp_richcompare */ 0, /* tp_weaklistoffset */ 0, /* tp_iter */ 0, /* tp_iternext */ mxDateTimeDelta_Methods, /* tp_methods */ 0, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ 0, /* tp_init */ 0, /* tp_alloc */ 0, /* tp_new */ 0, /* tp_free */ }; /* Python Method Table */ statichere PyMethodDef mxDateTimeDelta_Methods[] = { Py_MethodListEntryNoArgs("absvalues",mxDateTimeDelta_absvalues), Py_MethodListEntryNoArgs("tuple",mxDateTimeDelta_tuple), #ifdef HAVE_STRFTIME Py_MethodListEntry("strftime",mxDateTimeDelta_strftime), #endif Py_MethodWithKeywordsListEntry("rebuild",mxDateTimeDelta_rebuild), #ifdef HAVE_PYDATETIME Py_MethodListEntryNoArgs("pytime",mxDateTimeDelta_pytime), Py_MethodListEntryNoArgs("pytimedelta",mxDateTimeDelta_pytimedelta), #endif #ifdef COPY_PROTOCOL Py_MethodListEntry("__deepcopy__",mxDateTimeDelta_copy), Py_MethodListEntry("__copy__",mxDateTimeDelta_copy), #endif #ifdef OLD_INTERFACE /* Old interface */ Py_MethodListEntryNoArgs("as_tuple",mxDateTimeDelta_absvalues), Py_MethodListEntryNoArgs("as_timetuple",mxDateTimeDelta_as_timetuple), Py_MethodListEntryNoArgs("as_ticks",mxDateTimeDelta_as_ticks), #endif {NULL,NULL} /* end of list */ }; /* --- Other functions ----------------------------------------------------- */ Py_C_Function( mxDateTime_DateTime, "DateTime(year,month=1,day=1,hour=0,minute=0,second=0.0)\n\n" "Returns a DateTime-object reflecting the given date\n" "and time. Seconds can be given as float to indicate\n" "fractions. Note that the function does not accept keyword args." ) { long year; int month = 1, day = 1; int hour = 0, minute = 0; double second = 0.0; Py_Get6Args("l|iiiid",year,month,day,hour,minute,second); return mxDateTime_FromDateAndTime(year,month,day,hour,minute,second); onError: return NULL; } Py_C_Function( mxDateTime_JulianDateTime, "JulianDateTime(year,month=1,day=1,hour=0,minute=0,second=0.0)\n\n" "Returns a DateTime-object reflecting the given Julian date\n" "and time. Seconds can be given as float to indicate\n" "fractions. Note that the function does not accept keyword args." ) { long year; int month = 1, day = 1; int hour = 0, minute = 0; double second = 0.0; Py_Get6Args("l|iiiid",year,month,day,hour,minute,second); return mxDateTime_FromJulianDateAndTime(year,month,day,hour,minute,second); onError: return NULL; } Py_C_Function( mxDateTime_DateTimeFromAbsDateTime, "DateTimeFromAbsDateTime(absdate[,abstime=0.0,calendar=Gregorian])\n\n" "Returns a DateTime-object for the given absolute values.\n" "Note that the function does not accept keyword args.") { long absdate; double abstime = 0.0; char *calendar_name = NULL; int calendar; Py_Get3Args("l|ds", absdate, abstime, calendar_name); /* Convert calendar name to calendar integer; XXX Should turn this into a helper function */ if (calendar_name) { if (Py_StringsCompareEqual(calendar_name, MXDATETIME_GREGORIAN_CALENDAR_STRING)) calendar = MXDATETIME_GREGORIAN_CALENDAR; else if (Py_StringsCompareEqual(calendar_name, MXDATETIME_JULIAN_CALENDAR_STRING)) calendar = MXDATETIME_JULIAN_CALENDAR; else { Py_ErrorWithArg(PyExc_ValueError, "unsupported calendar name: %s", calendar_name); } } else calendar = MXDATETIME_GREGORIAN_CALENDAR; return mxDateTime_FromAbsDateTime(absdate, abstime, calendar); onError: return NULL; } #ifdef HAVE_STRPTIME Py_C_Function( mxDateTime_strptime, "strptime(str,formatstr,default=None)\n\n" "Returns a DateTime-object reflecting the parsed\n" "date and time; default can be given to set default values\n" "for parts not given in the string. If not given,\n" "1.1.0001 0:00:00.00 is used instead." ) { char *str; char *fmt; char *lastchr; int len_str,pos; struct tm tm; PyObject *defvalue = NULL; Py_Get3Args("ss|O",str,fmt,defvalue); len_str = strlen(str); if (defvalue) { Py_Assert(_mxDateTime_Check(defvalue), PyExc_TypeError, "default must be a DateTime instance"); if (!mxDateTime_AsTmStruct((mxDateTimeObject *)defvalue, &tm)) goto onError; } else { /* Init to 1.1.0001 0:00:00.00 */ memset(&tm,0,sizeof(tm)); tm.tm_mday = 1; tm.tm_year = -1899; } /* Parse */ lastchr = strptime(str, fmt, &tm); Py_Assert(lastchr != NULL, mxDateTime_Error, "strptime() parsing error"); pos = (int)(lastchr - str); if (pos != len_str) Py_ErrorWith2Args(mxDateTime_Error, "strptime() parsing error at position %i: '%.200s'", pos, str); return mxDateTime_FromTmStruct(&tm); onError: return NULL; } #endif Py_C_Function( mxDateTime_DateTimeFromCOMDate, "DateTimeFromCOMDate(comdate)\n\n" "Returns a DateTime-object reflecting the given date\n" "and time.") { double comdate; Py_GetArg("d",comdate); return mxDateTime_FromCOMDate(comdate); onError: return NULL; } #ifdef OLD_INTERFACE Py_C_Function( mxDateTime_DateTimeFromTicks, "DateTimeFromTicks(ticks)\n\n" "Returns a DateTime-object reflecting the given time\n" "value. Conversion is done to local time (similar to\n" "time.localtime()).") { double ticks; Py_GetArg("d",ticks); return mxDateTime_FromTicks(ticks); onError: return NULL; } #endif Py_C_Function( mxDateTime_DateTimeFromAbsDays, "DateTimeFromAbsDays(absdays)\n\n" "Returns a DateTime-object reflecting the given time\n" "value (days since the epoch).") { double absdays; Py_GetArg("d",absdays); return mxDateTime_FromAbsDays(absdays); onError: return NULL; } Py_C_Function( mxDateTime_DateTimeDelta, "DateTimeDelta(days[,hours=0.0,minutes=0.0,seconds=0.0])\n\n" "Returns a DateTimeDelta-object reflecting the given\n" "day and time delta. Note that the function does not accept\n" "keyword args." ) { double days, hours = 0.0, minutes = 0.0, seconds = 0.0; Py_Get4Args("d|ddd",days,hours,minutes,seconds); return mxDateTimeDelta_FromSeconds(days*SECONDS_PER_DAY + hours*3600.0 + minutes*60.0 + seconds); onError: return NULL; } #if OLD_INTERFACE Py_C_Function( mxDateTime_TimeDelta, "TimeDelta(hours[,minutes=0,seconds=0.0])\n\n" "Returns a DateTimeDelta-object reflecting the given\n" "time delta. Seconds can be given as float to indicate\n" "fractions. Note that the function does not accept keyword args." ) { double hour, minute=0.0, second=0.0; Py_Get3Args("d|dd",hour,minute,second); return mxDateTimeDelta_FromSeconds(hour*3600.0 + minute*60.0 + second); onError: return NULL; } #endif Py_C_Function( mxDateTime_DateTimeDeltaFromSeconds, "DateTimeDeltaFromSeconds(seconds)\n\n" "Returns a DateTimeDelta-object reflecting the given time\n" "value.") { double seconds; Py_GetArg("d",seconds); return mxDateTimeDelta_FromSeconds(seconds); onError: return NULL; } Py_C_Function( mxDateTime_DateTimeDeltaFromDays, "DateTimeDeltaFromDays(days)\n\n" "Returns a DateTimeDelta-object reflecting the given time\n" "value given in days (fractions are allowed).") { double days; Py_GetArg("d",days); return mxDateTimeDelta_FromDays(days); onError: return NULL; } Py_C_Function( mxDateTime_now, "now()\n\n" "Returns a DateTime-object reflecting the current local time." ) { double fticks; Py_NoArgsCheck(); fticks = mxDateTime_GetCurrentTime(); if (fticks == -1 && PyErr_Occurred()) goto onError; return mxDateTime_FromTicks(fticks); onError: return NULL; } Py_C_Function( mxDateTime_utc, "utc()\n\n" "Returns a DateTime-object reflecting the current UTC time." ) { double fticks; Py_NoArgsCheck(); fticks = mxDateTime_GetCurrentTime(); if (fticks == -1 && PyErr_Occurred()) goto onError; return mxDateTime_FromGMTicks(fticks); onError: return NULL; } Py_C_Function( mxDateTime_cmp, "cmp(value1,value2[,accuracy=0.0])\n\n" "Compares two DateTime[Delta] objects. If accuracy is\n" "given, then equality will result in case the absolute\n" "difference between the two values is less than or equal\n" "to accuracy.") { PyObject *a,*b; double acc = 0.0; Py_Get3Args("OO|d",a,b,acc); if (_mxDateTime_Check(a) && _mxDateTime_Check(b)) { /* cmp(DateTime,DateTime) */ register long datediff = ((mxDateTimeObject *)b)->absdate - ((mxDateTimeObject *)a)->absdate; register double timediff = ((mxDateTimeObject *)b)->abstime - ((mxDateTimeObject *)a)->abstime; if ((datediff >= 0 && datediff <= (long)(acc / SECONDS_PER_DAY)) || (datediff < 0 && -datediff <= (long)(acc / SECONDS_PER_DAY))) { if ((!DOUBLE_IS_NEGATIVE(timediff) && timediff <= acc) || (DOUBLE_IS_NEGATIVE(timediff) && -timediff <= acc)) return PyInt_FromLong(0l); else if (DOUBLE_IS_NEGATIVE(timediff)) return PyInt_FromLong(1l); else return PyInt_FromLong(-1l); } else if (datediff < 0) return PyInt_FromLong(1l); else return PyInt_FromLong(-1l); } else if (_mxDateTimeDelta_Check(a) && _mxDateTimeDelta_Check(b)) { /* cmp(DateTimeDelta,DateTimeDelta) */ register double timediff = ((mxDateTimeDeltaObject *)b)->seconds - ((mxDateTimeDeltaObject *)a)->seconds; if ((!DOUBLE_IS_NEGATIVE(timediff) && timediff <= acc) || (DOUBLE_IS_NEGATIVE(timediff) && -timediff <= acc)) return PyInt_FromLong(0l); else if (DOUBLE_IS_NEGATIVE(timediff)) return PyInt_FromLong(1l); else return PyInt_FromLong(-1l); } else Py_Error(PyExc_TypeError, "objects must be DateTime[Delta] instances"); onError: return NULL; } Py_C_Function( mxDateTime_setnowapi, "setnowapi(fct)\n\n" "Sets the current time API used by now(). This must be\n" "a callable function which returns the current local time in\n" "Unix ticks." ) { PyObject *v; Py_GetArg("O",v); Py_Assert(PyCallable_Check(v), PyExc_TypeError, "argument must be callable"); Py_INCREF(v); mxDateTime_nowapi = v; Py_ReturnNone(); onError: return NULL; } /* --- module interface ---------------------------------------------------- */ /* Python Method Table */ static PyMethodDef Module_methods[] = { Py_MethodListEntryNoArgs("now",mxDateTime_now), Py_MethodListEntry("DateTime",mxDateTime_DateTime), Py_MethodListEntry("DateTimeDelta",mxDateTime_DateTimeDelta), #ifdef HAVE_STRPTIME Py_MethodListEntry("strptime",mxDateTime_strptime), #endif Py_MethodListEntry("DateTimeFromCOMDate",mxDateTime_DateTimeFromCOMDate), Py_MethodListEntry("DateTimeFromAbsDateTime",mxDateTime_DateTimeFromAbsDateTime), Py_MethodListEntry("DateTimeFromAbsDays",mxDateTime_DateTimeFromAbsDays), Py_MethodListEntry("DateTimeDeltaFromSeconds",mxDateTime_DateTimeDeltaFromSeconds), Py_MethodListEntry("DateTimeDeltaFromDays",mxDateTime_DateTimeDeltaFromDays), Py_MethodListEntry("cmp",mxDateTime_cmp), Py_MethodListEntryNoArgs("utc",mxDateTime_utc), Py_MethodListEntry("JulianDateTime",mxDateTime_JulianDateTime), Py_MethodListEntry("setnowapi",mxDateTime_setnowapi), #ifdef OLD_INTERFACE Py_MethodListEntry("Date",mxDateTime_DateTime), Py_MethodListEntry("Time",mxDateTime_TimeDelta), Py_MethodListEntry("Timestamp",mxDateTime_DateTime), Py_MethodListEntry("TimeDelta",mxDateTime_TimeDelta), Py_MethodListEntry("DateTimeFromTicks",mxDateTime_DateTimeFromTicks), Py_MethodListEntry("DateTimeDeltaFromTicks",mxDateTime_DateTimeDeltaFromSeconds), #endif {NULL,NULL} /* end of list */ }; /* C API table - always add new things to the end for binary compatibility. */ static mxDateTimeModule_APIObject mxDateTimeModuleAPI = { &mxDateTime_Type, mxDateTime_FromAbsDateAndTime, mxDateTime_FromTuple, mxDateTime_FromDateAndTime, mxDateTime_FromTmStruct, mxDateTime_FromTicks, mxDateTime_FromCOMDate, mxDateTime_AsTmStruct, mxDateTime_AsTicks, mxDateTime_AsCOMDate, &mxDateTimeDelta_Type, mxDateTimeDelta_FromDaysEx, mxDateTimeDelta_FromTime, mxDateTimeDelta_FromTuple, mxDateTimeDelta_FromTimeTuple, mxDateTimeDelta_AsDouble, mxDateTime_FromAbsDays, mxDateTime_AsAbsDays, mxDateTimeDelta_FromDays, mxDateTimeDelta_AsDays, mxDateTime_BrokenDown, mxDateTimeDelta_BrokenDown, mxDateTime_FromAbsDateTime, }; /* Cleanup function */ static void mxDateTimeModule_Cleanup(void) { #ifdef MXDATETIME_FREELIST { mxDateTimeObject *d = mxDateTime_FreeList; while (d != NULL) { mxDateTimeObject *v = d; d = *(mxDateTimeObject **)d; PyObject_Del(v); } mxDateTime_FreeList = NULL; } #endif #ifdef MXDATETIMEDELTA_FREELIST { mxDateTimeDeltaObject *d = mxDateTimeDelta_FreeList; while (d != NULL) { mxDateTimeDeltaObject *v = d; d = *(mxDateTimeDeltaObject **)d; PyObject_Del(v); } mxDateTimeDelta_FreeList = NULL; } #endif /* XXX Calling Py_DECREF() in a Py_AtExit() function is dangerous. */ #if 1 /* Drop reference to the now API callable. */ Py_XDECREF(mxDateTime_nowapi); mxDateTime_nowapi = NULL; #endif #ifdef HAVE_PYDATETIME mx_Reset_PyDateTimeAPI(); #endif /* Reset mxDateTime_Initialized flag */ mxDateTime_Initialized = 0; } /* Create PyMethodObjects and register them in the module's dict */ MX_EXPORT(void) initmxDateTime(void) { PyObject *module, *moddict; if (mxDateTime_Initialized) Py_Error(PyExc_SystemError, "can't initialize "MXDATETIME_MODULE" more than once"); /* Init type objects */ PyType_Init(mxDateTime_Type); PyType_Init(mxDateTimeDelta_Type); /* Init globals */ mxDateTime_POSIXConform = mxDateTime_POSIX(); #ifdef MXDATETIME_FREELIST mxDateTime_FreeList = NULL; #endif #ifdef MXDATETIMEDELTA_FREELIST mxDateTimeDelta_FreeList = NULL; #endif mxDateTime_DoubleStackProblem = mxDateTime_CheckDoubleStackProblem( SECONDS_PER_DAY - (double)7.27e-12); /* Create module */ module = Py_InitModule4(MXDATETIME_MODULE, /* Module name */ Module_methods, /* Method list */ Module_docstring, /* Module doc-string */ (PyObject *)NULL, /* always pass this as *self */ PYTHON_API_VERSION); /* API Version */ if (module == NULL) goto onError; /* Register cleanup function */ if (Py_AtExit(mxDateTimeModule_Cleanup)) { /* XXX what to do if we can't register that function ??? */ DPRINTF("* Failed to register mxDateTime cleanup function\n"); } /* Add some constants to the module's dict */ moddict = PyModule_GetDict(module); if (moddict == NULL) goto onError; insobj(moddict,"__version__",PyString_FromString(MXDATETIME_VERSION)); insint(moddict,"POSIX",mxDateTime_POSIXConform); #ifdef USE_FAST_GETCURRENTTIME /* Clock resolution */ insobj(moddict, "now_resolution", PyFloat_FromDouble(mxDateTime_GetClockResolution())); #endif /* Calendar string constants */ if (!(mxDateTime_GregorianCalendar = PyString_FromString( MXDATETIME_GREGORIAN_CALENDAR_STRING))) goto onError; PyString_InternInPlace(&mxDateTime_GregorianCalendar); PyDict_SetItemString(moddict, MXDATETIME_GREGORIAN_CALENDAR_STRING, mxDateTime_GregorianCalendar); if (!(mxDateTime_JulianCalendar = PyString_FromString( MXDATETIME_JULIAN_CALENDAR_STRING))) goto onError; PyString_InternInPlace(&mxDateTime_JulianCalendar); PyDict_SetItemString(moddict, MXDATETIME_JULIAN_CALENDAR_STRING, mxDateTime_JulianCalendar); /* Errors */ if (!(mxDateTime_Error = insexc(moddict,"Error",PyExc_ValueError))) goto onError; if (!(mxDateTime_RangeError = insexc(moddict,"RangeError", mxDateTime_Error))) goto onError; /* Type objects */ Py_INCREF(&mxDateTime_Type); PyDict_SetItemString(moddict,"DateTimeType", (PyObject *)&mxDateTime_Type); Py_INCREF(&mxDateTimeDelta_Type); PyDict_SetItemString(moddict,"DateTimeDeltaType", (PyObject *)&mxDateTimeDelta_Type); /* Export C API; many thanks to Jim Fulton for pointing this out to me */ insobj(moddict,MXDATETIME_CAPI_OBJECT, PyCObject_FromVoidPtr((void *)&mxDateTimeModuleAPI, NULL)); DPRINTF("* Loaded "MXDATETIME_MODULE" C extension at 0x%0lx.\n", (long)module); DPRINTF("Notes: " "sizeof(time_t) = %i, sizeof(int) = %i, sizeof(long) = %i\n", sizeof(time_t),sizeof(int), sizeof(long)); #ifdef HAVE_PYDATETIME /* Init the Python datetime module's API if already loaded */ if (mx_Init_PyDateTimeAPI()) goto onError; #endif /* We are now initialized */ mxDateTime_Initialized = 1; onError: /* Check for errors and report them */ if (PyErr_Occurred()) Py_ReportModuleInitError(MXDATETIME_MODULE); return; } egenix-mx-base-3.2.7/mx/DateTime/mxDateTime/mxDateTime.def0000664000175000017500000000003006443765072023122 0ustar lemburglemburgEXPORTS initmxDateTime egenix-mx-base-3.2.7/mx/DateTime/mxDateTime/mxDateTime.h0000664000175000017500000002634512133021423022606 0ustar lemburglemburg#ifndef MXDATETIME_H #define MXDATETIME_H /* mxDateTime -- A generic date/time type Copyright (c) 2000, Marc-Andre Lemburg; mailto:mal@lemburg.com Copyright (c) 2000-2013, eGenix.com Software GmbH; mailto:info@egenix.com See the documentation for further copyright information or contact the author (mailto:mal@lemburg.com). */ /* The extension's name; must be the same as the init function's suffix */ #define MXDATETIME_MODULE "mxDateTime" /* Name of the package or module that provides the extensions C API. If the extension is used inside a package, provide the complete import path. */ #define MXDATETIME_API_MODULE "mx.DateTime" /* Name of the mxDateTime C API object; this includes a version number to prevent use of incompatible C APIs */ #define MXDATETIME_CAPI_OBJECT MXDATETIME_MODULE"API2" /* --- No servicable parts below this line ----------------------*/ /* Include generic mx extension header file */ #include "mxh.h" #ifdef MX_BUILDING_MXDATETIME # define MXDATETIME_EXTERNALIZE MX_EXPORT #else # define MXDATETIME_EXTERNALIZE MX_IMPORT #endif #ifdef __cplusplus extern "C" { #endif /* Flags for the calendar ID: */ #define MXDATETIME_GREGORIAN_CALENDAR 0 #define MXDATETIME_JULIAN_CALENDAR 1 /* Strings for the calendars */ #define MXDATETIME_GREGORIAN_CALENDAR_STRING "Gregorian" #define MXDATETIME_JULIAN_CALENDAR_STRING "Julian" /* --- DateTime Object ------------------------------------------*/ /* Note: The objects internal values are only calculated once and are thereafter considered immutable ! */ typedef struct { PyObject_HEAD /* Representation used to do calculations */ long absdate; /* number of days since 31.12. in the year 1 BC calculated in the Gregorian calendar. */ double abstime; /* seconds since 0:00:00.00 (midnight) on the day pointed to by absdate */ /* COM Date representation */ double comdate; /* Broken down values (set at creation time and using the calendar specified in the calendar flag); depend on the calendar used. */ long year; /* starting from year 1 */ signed char month; /* 1-12 */ signed char day; /* 1-31 */ signed char hour; /* 0-24 */ signed char minute; /* 0-59 */ double second; /* 0-60.999... */ signed char day_of_week; /* 0 (Monday) - 6 (Sunday) */ short day_of_year; /* 1-366 */ unsigned char calendar; /* Calendar ID; for possible values see above. */ } mxDateTimeObject; /* Type checking macro */ #define mxDateTime_Check(v) \ (((mxDateTimeObject *)(v))->ob_type == mxDateTime.DateTime_Type) /* --- DateTimeDelta Object ----------------------------------*/ /* Note: The objects internal values are only calculated once and are thereafter considered immutable ! */ typedef struct { PyObject_HEAD double seconds; /* number of delta seconds */ /* Broken down values (set at creation time); the sign can be deduced from seconds' sign. */ long day; /* >=0 */ signed char hour; /* 0-23 */ signed char minute; /* 0-59 */ double second; /* 0-60.999 */ } mxDateTimeDeltaObject; /* Type checking macro */ #define mxDateTimeDelta_Check(v) \ (((mxDateTimeDeltaObject *)(v))->ob_type == \ mxDateTime.DateTimeDelta_Type) /* --- C API ----------------------------------------------------*/ /* C API for usage by other Python modules */ typedef struct { /* Type object for DateTime() */ PyTypeObject *DateTime_Type; /* Construct a new object from the given absolute date and time. Returns NULL in case of an error. */ PyObject *(*DateTime_FromAbsDateAndTime)(long absdate, double abstime); /* Construct new object from Python 6-tuple (year,month,day,hour,minute,second) Returns NULL in case of an error. */ PyObject *(*DateTime_FromTuple)(PyObject *v); /* Construct new object from year,month,day,hour,minute,second Returns NULL in case of an error. */ PyObject *(*DateTime_FromDateAndTime)(long year, int month, int day, int hour, int minute, double second); /* Construct new object from a given struct tm. DST, weekday and day of year are ignored. Returns NULL in case of an error. */ PyObject *(*DateTime_FromTmStruct)(struct tm *tm); /* Construct new object from the given ticks; these are first converted to a gmtime struct and this is then used as basis for the object value. Note that you have to pass in the ticks value as double and not as time_t value (see the note below on this). Returns NULL in case of an error. */ PyObject *(*DateTime_FromTicks)(double ticks); /* Construct new object from a given COM date double Returns NULL in case of an error. */ PyObject *(*DateTime_FromCOMDate)(double comdate); /* Fill the given struct tm with the object's value. Seconds are truncated before assigning them to the struct tm seconds integer slot (previous version rounded the seconds part which sometimes resulted in the value being 60). Returns a pointer to the changed struct or NULL in case of an error. */ struct tm *(*DateTime_AsTmStruct)(mxDateTimeObject *datetime, struct tm *tm); /* Return the objects value as time_t value. It is assumed that the object contains local time information, so time.localtime(object.as_ticks()) == object.tuple(). Note that this functions returns a double and not a time_t value -- this is because some systems define time_t to be a long which would cause the conversion to lose the fraction part. Returns -1.0 and sets an error in case of failure. */ double (*DateTime_AsTicks)(mxDateTimeObject *datetime); /* Return the objects value as COM date double Returns -1.0 and sets an error in case of failure. */ double (*DateTime_AsCOMDate)(mxDateTimeObject *datetime); /* Type object for DateTimeDelta() */ PyTypeObject *DateTimeDelta_Type; /* Construct a new object from the given days and seconds deltas. The internal value is calculated using a 86400.0 seconds/day basis. Returns NULL in case of an error. */ PyObject *(*DateTimeDelta_FromDaysAndSeconds)(long days, double seconds); /* Construct a new object from the given values repesenting time. The parameters are used to calculate a number-of-seconds since midnight value. Returns NULL in case of an error. */ PyObject *(*DateTimeDelta_FromTime)(int hours, int minutes, double seconds); /* Same as DateTimeDelta_FromDaysAndSeconds() except that you pass the two arguments in a Python tuple. Returns NULL in case of an error. */ PyObject *(*DateTimeDelta_FromTuple)(PyObject *v); /* Same as DateTimeDelta_FromTime() except that you pass the three arguments in a Python tuple. Returns NULL in case of an error. */ PyObject *(*DateTimeDelta_FromTimeTuple)(PyObject *v); /* Using 86400.0 seconds/day a seconds value is calculated from the days and seconds part of the passed object. Returns -1.0 and sets an error in case of failure. */ double (*DateTimeDelta_AsDouble)(mxDateTimeDeltaObject *delta); /* Construct a new DateTime object from the given days value which represents absolute days and the absolute time as fraction of a day. The internal value is calculated using a 86400.0 seconds/day basis. Returns NULL in case of an error. */ PyObject *(*DateTime_FromAbsDays)(double days); /* Using 86400.0 seconds/day a days value is calculated from the internal value of the passed object. Returns -1.0 and sets an error in case of failure. */ double (*DateTime_AsAbsDays)(mxDateTimeObject *datetime); /* Construct a new DateTimeDelta object from the given days value. The internal value is calculated using a 86400.0 seconds/day basis. Returns NULL in case of an error. */ PyObject *(*DateTimeDelta_FromDays)(double days); /* Using 86400.0 seconds/day a days value is calculated from the internal value of the passed object. Returns NULL in case of an error. */ double (*DateTimeDelta_AsDays)(mxDateTimeDeltaObject *delta); /* Sets the given variables to values corresponding to the given DateTime object. You can pass a NULL pointer if you don't want that variable to be set. Returns -1 and sets an error in case of failure. */ int (*DateTime_BrokenDown)(mxDateTimeObject *datetime, long *year, int *month, int *day, int *hour, int *minute, double *second); /* Sets the given variables to values corresponding to the given DateTimeDelta object. You can pass a NULL pointer if you don't want that variable to be set. Returns -1 and sets an error in case of failure. */ int (*DateTimeDelta_BrokenDown)(mxDateTimeDeltaObject *delta, long *day, int *hour, int *minute, double *second); /* Construct a new object from the given absolute date, time and calendar. Returns NULL in case of an error. New in mxDateTime 3.2. */ PyObject *(*DateTime_FromAbsDateTime)(long absdate, double abstime, int calendar); } mxDateTimeModule_APIObject; #ifndef MX_BUILDING_MXDATETIME /* --- C API ----------------------------------------------------*/ /* Interfacestructure to C API for other modules. Call mxDateTime_ImportModuleAPI() to initialize this structure. After that usage is simple: PyObject *v; v = mxDateTime.DateTime_FromAbsDateAndTime(1,1); if (!v) goto onError; ... */ static mxDateTimeModule_APIObject mxDateTime; /* You *must* call this before using any of the functions in mxDateTime and check its outcome; otherwise all accesses will result in a segfault. Returns 0 on success. */ #ifndef DPRINTF # define DPRINTF if (0) printf #endif static int mxDateTime_ImportModuleAndAPI(void) { PyObject *mod = 0, *v = 0; char *apimodule = MXDATETIME_API_MODULE; char *apiname = MXDATETIME_CAPI_OBJECT; void *api; DPRINTF("Importing the %s C API...\n",apimodule); mod = PyImport_ImportModule(apimodule); if (mod == NULL) { /* Fallback solution to remain backward compatible */ PyErr_Clear(); apimodule = "DateTime"; DPRINTF(" package not found, trying %s instead\n",apimodule); mod = PyImport_ImportModule(apimodule); if (mod == NULL) goto onError; } DPRINTF(" %s package found\n",apimodule); v = PyObject_GetAttrString(mod,apiname); if (v == NULL) goto onError; Py_CLEAR(mod); DPRINTF(" API object %s found\n",apiname); api = PyCObject_AsVoidPtr(v); if (api == NULL) goto onError; Py_CLEAR(v); memcpy(&mxDateTime,api,sizeof(mxDateTime)); DPRINTF(" API object loaded and initialized.\n"); return 0; onError: DPRINTF(" not found.\n"); Py_XDECREF(mod); Py_XDECREF(v); return -1; } #endif /* EOF */ #ifdef __cplusplus } #endif #endif egenix-mx-base-3.2.7/mx/DateTime/mxDateTime/mxDateTime.sit.hqx0000664000175000017500000006176007211224356023770 0ustar lemburglemburg(This file must be converted with BinHex 4.0) :''ei4'&dC94TE@8JCQpb)%eKBdp6,R0TG!"6593e8dP8)3%!N!0*V3#3"+pT8h4 eCQC*G#!SBbNa16Nh,6%j16JJ3@aKC'4TEL"6HA0dC@ec,#"*EQ-Z,#"SG(4`1Lm [Gj!$,Q&XB@4ND@jcHA-ZBfpY,e0dG@CQ5A3[$3SD!!83!!"*V3#3!h)!!3#3!h) QcJfPT9*PFf9bGQ9NTD8!TC!%!3!!4!"!YN01&EC&1c%!N!d8K-F!N!2D!!#p`J! !50-!"'ei4'&dC94TE@8JCQpb)%eKBdp6!!#dAJ"F!"X"6`*P!q$rN!3("rrirr$ '3!!!J!#3"!-i$U@3"!%!!$8!!,C$6K@f3di9!*!$FJ!!!Ni!N!0b!!AGT`#3$NP MEfi0!!(@X@PMEfj038063!#3$i!!N!N"jJ!!!3d!N!32!%,"e-qAT`L%T["l3Z- KC3Bq)G)63bUZbNS6eH64(m[#Y3T-)(*)U1ilJ(r5i+)+9QiQ(H2QL,(`m5`a)Dm HaND-Q"CIFTR5*pA9a`-JUaq5(i%"&D!65K#08F33H2q16r+fAIhV0XFKrJEVS44 jA5e(5MELiCZYZcEIX%2%Z'6$NJmi6f@50N`&+)j8f)SBGA1cr8bjD$qZii+V*q` qYC%d#TKN+p8p![feZ(L3!%"PQpf`Q6mp4DF4FafFKLE99cjLilRTDUhU2HE5mLJ ph&$NJpi)TDZ)$I[$hTlU5&qQdm!A&aN5aaU'(1KEH!'MUP3G`NYVEXhpb#MF&D" "PZKN+pZf[Pi$Cb"SmqZPJ+@3"!%!!%)!!,-+lp'f46K(!*!$fJ!!3@%!N!0b!") `9`!!UdX!!$hU!*!%$`"YH%4KG'98D@eP,R"`BbjcE')!!GfTFfKXBMq3"!%!rj! %!*!+J!#3#3'@!*!$Y3#3"!m!3X(8cjHR#C!!1A56G0h-lY6MqSTYG@T&i+JdCFr 3$REBAfPTlCSfpVCk34,DSQ9,jl(mBU'mm3Kq[paPjZbT0bfLL#)#$J,(2d63BH9 je[QcJQ5NT`C1m9*)+ZJS2*1*8A#p$3Klae@b55,Vc"X8)YA5BQqDjV&A*DH1Aa! -+8eQ3&@4)d09a'R2FfQE$0%SR6[IT+``cKQR$N@aAb$[2MCQfVj&IGQ1edpNljm V@k@dmjQ#B!"#`G69,NH$SY1h1aqIViH(SK$b)-f#Ae"B[#UUk)Na&bG%0NAd0$2 &LdBUpaS0-*--D"hq&J6e)`lSB+[$NERUPb%$%H!,iP0lXZ!N%kNB3RjImP,,jQB i9VU2TGPZpYT6mAm89MRf(jaG9@!VMfC5#I@ciVC$,*FKl-qM34b@F@d0p[6![m- q0RQ3!(dRk*B!NfXHl3BVG5%&q1Yq-p$E)'FNh%HKJh8CpUEl+iHdRR9`Z"CR&51 0mH38T&kfkJipSC!!XSp9)T1&GCM&+QX(-bjlF*VqJAqrFHVB95a5aB53!+j&q04 qQi2UTQ(Ri3bcS%D*NNV8i%1-&#Ua%E`,Ka*qAZD&Z)!qeAUDNH+i$+LkL2&`I(K R#S6qe4YNT1FEPQ(68Pi6BRr@X&*pj6B1(ZP`rcVbBc[,XUJ(beL*"rZN$R`!rT* Q!+fcH*a!@0'RL9+YY6C(X+N%prC(52#%KAdVhd&D5CHSFGbL)THVl*4r4$cd4rF (L'-b*Le+)T@+1G&B5C%UIE(BbBbeBiM2$GfcRXS-RESa@CL2F,2-JKX`QKe2e!S K"N#fbp6P'KGE3YDAf&VeYe8GS968&F1KF9@JKf4-q8V8UAh4MMX5Y'ApAQ[,SIS 9Dk"eaK&a*&l'TR"!)kq)+@J3'8!Y6T*GF[3i0UaNL),C4QErcHjUqU[YF0SflCH MYr4![MZ+@p#fjB`-aj!!@pRXq58b+'rI*[pGqEEhk1JBbB"'SPmrH2JD"XhSUim b6VqbKQE!rq*T,qEAFXEpk@4-Q+%IUidlj!Np3)`!QG)cPS5E[0aD!P+dlD[G6+4 2X+S0Bcer9bC[(D8!39kPDYCDGrE%KY54*GD0"a5[2P8Re+8pDdb"j+pfGZTd3KS UYrGq)KbUh20N2GU-!cGL*G4a+Te[L'*l#+N"L"%da2B5h0i$fK[il&B6ZKA0VZ1 20LplH,4$bSM)biTI2rQVcdM6MpbJXSe62k#F)eDJ"e!dD4DY50kF8c%U,fA5q(! $-h6)lM3f8SLf[[FAUYlfrBRk6Dm4@m)ZSj+%frH+EdDUjPi2iFaH(&[VaG#P2Ul 4-rdc(HQ'm)iBrK4C5,cQ[9fD5`l)miDdHL[d3[8rHND3!,rj1581BcEVHlhPidG b!q8[8klP[VKHlLSQ`%UcElkI2)CYA[fZ1EjmRdqS&cpJfABh1ILF@"f%pSl(flf m'k2,J'IdAb`ZL'MKmR[XYjA45pPapb5jUc[ACj2(,B"krah&G3F)aDq1!FkYm@k 0c)B6#b8(a%H2mA4*VLbVY-jMb@)1+*G3QX3j%10-H-1qTcr-,rN%NekeNJ0pVr[ hq2Jp1fJQHeie%mMfCGpL[XAl4i-'VLZAT"hD56ceUf8R"FA8YT[RakhQ$D&bc+K [HrE5H*,Q6&NLHEDS2ATUP+[MU,A'#+qLaa62,C[1UXK((U3RFSa+%fB+G#AJ`," 3Rk&b!pV,J&+5k[Ufq!56fAJ,a+iNPUD#Q[a5`CPM1mHI88R$5U5!dQk02mcrI,9 d4CNd,UlHH85"3%@KC9&fVfIlSV96+IM`NPPY*,cI#8F5'Z2SBkUmAF,(4"4CP[U (FK1h,Kk``f9*!9Sp)acB-Q1-1PF@VS!MQ@RCa`@5XRJ$+k$DN!"cA%836E62UcK e51[rI&Z89JF*re*EYe1a@[2UqkjQYc"Mj6G8GVfD)RYGET3CfbD!&H$TJr(YlA3 6dHPVSHYa(,M`e[[N"DC`MI`Y$f*+q@S!a#&ZkH*,TPkR0iF3RA@rJGF9fYjjkB1 Hi)eBD3!JK"#*`8FRE!aJJ9*Mh4[[eq'JFiNBIVQ-[N99`MQLH2Qm,,[Em#5(#D9 [+[p)pCA%Si`V-MrPNQY'#Ua5N@i(G+Nm"iHC+`%3&5SEFMdQeL[6r`1e(VHeLGa [2p$l!@r54Sq+A903cKS%89lrY#ANNJ`kHlS%Zk0bh0+Gck4P@8PX"%d$V#8i18A a9T)Ia$APmbAqbLV2D)IV+mNGjD$GVHB0UYJB5*i+*LP"dajT1`R$)R(Cpami04Y @bIi#-[4cCm4HE(,lNTIVRL94FqBhdY+i@jfQ3Fa4!`bkej*T#+L#2a[4+P@!#Kq MUCUJLCqXpHUq4+Ac(0PDEl8a"M"YG@qLl*&Pm)0Bp29N'8[02i4cX%cCp0$1)Dd 5-,)G@H[,[GQ4Cf6b5(IATP!`CS)5MYmd,XC'*lpTV)`G6&-KG"e6r!2F#TZ1HMF VYV(9S1Cb`R@P[Q#9-M+@1,D-&Cj"#U$GRdJl[)*S*bedZA6Cr'Nqr(HT3G4@Vaj 6V52*Lj(mXf-PPm3BE9BVPcha1VmiGGARf(#)Zq$Be9Ia(QE!2Nba4G*H6(ikG13 !6ipM38J&Ki"'G29R1$Hmj!E#Z%H`fFD'HbRpEM2D5153!#0RLDP!,$eD+X#1i!a %%)6LjM-F,be'**Mq-j!!qKc#*aNmMFQ[X#$rDK0)E@e-ZNjJ+MrF,Ti2PXqfXFX ()jbT&-YE'Y+j@"52cb1Bfj'A%%a1XJZD(j54MKB$rb'%3UT[Pm5%eE"3#"f@0-I UC,ZJTE0H+4+S!cQq`fKJ0dSA6Z[83@ch9dT%%Q-aU1"HiZ%cCLG-23d46$#11Eq (4$KZIAam*N(["k-PTbKHh$(,JjX'%Z!1V*d-5FHcI1DAHF&6YT&HID@@M&[Nl0m hH#KbaaB@a[Z$0jYJQE!@"dJEUB@!0lR5A$YVK,L$+k,bpkKb9Vqc+kiDH"pA1`D cm-d)(c4deKF!NKFIJh$&rZFPE%fdT[i2Ym,r(ZBE3A`eKB$93!ZF$X%VAEH[A60 kC#k@BElb3aHVj%EFL9k+Fdb5*UBMiVSb@YD5l%lScSC-5LJ4i3fP56*PGqQ(06D PYcbH$kajRc20-miLTPNXS%rVi53E1VHhh%kq1!q#B3L)jHLT%6)6lCJ'QbNlGP' Y@p0G!,$UFKKeEC2T!AZ@4!YpKV15$BfrVmlEr["2P)[3'k25)d#TS3EZ1Ed%h%F H(McP,FMl8KI+"HAeXLHVXbSBeR6Xf$pb'aMLH+E2,+$RB'YD`h1j4,NA``+!bhF S@3B6aHZ5@$LG,(jKrRNPT5Q*h"A-JB%VGkcmiFr+EbCIJVh8*)j)U*5e,mQ!'rJ c$1"p0Ae&R-hdMRPUpcbMa9CAIPhBlbMPe,86E`$@8KblcR1$0T&[1HdAY+rTiLP ,B1SdZ4,eR)Z'%,+iJZe8*CmcP'rre2bH%l$lb08[PGZArVfi''*)'hAMkY8`,X* $q(`lJVC0YF`aQQq3!'p-c,1"PTXf5*&92R9,KR5kQ*1dS$4+9pVKA#AZd@8,PlJ R[MBAAD*GVK[FFQ"S!cpQ'J"m""Dcr0r&[d-EF+iq4CXj"kPX+Z[VH#BT[M[X6SG @k@QNr%pbM'#BdT3HVBhc+!m$Hl@'ET0LNT8lhMM#La,1SMNjAYH*)ipXBp$bRD* Ice4&9@J#C5Y*NY-0!Z5k0q'*2'j&9cfZb(J9EPQ6hHmIaV-KhL"D896'iC0@Q$m Vd!kINqqjUG)GQL-XMj`9L[c2(jFL0Mle1('NdlK`CX2c13+$G3-9lDYrR0Yce0) GYZ&DlXT3RLi`L!9[p#'K%fF[CprlN!#)JQqf8X)Y)frp,L9Fp+,L([rJBiCl85@ )1@ALiF''C0VTj+ZR"`Y5&,TY'1ff0!KBi(`e%PeI8j!!IMVDY8[Fl4M-Ra6Xe3( J[%Ea$%`$1"mP`EqI)*!!DP!h9P"0eEJrhpXq"pI$MA5b"q8,m-MDS'Jb*C@p))j `PSrQR6'2rN5VX[#NCYD5APeU3iqj*ZaUA3dX,pl+)LUM(UMT50JTpiImcNrk&2M 2%cDfd9rF"+&HlAKX)XkR4#LB+QDY[8A,C*pAA"iPq#FMpdpQF`FmN!"c`fUZJ(3 &*D,&a5p3rVAY`CYPBf4bYC8AZEXq2)@MAFNkh"1#eM8aq!Kj-[MB#5ATRra%Se" 2eRj#2G`6XYrbRj`'T$P`A81`$Ph#A!R8hFPl)Qi)*I'$d9f$EN4b"&rV#FHlh`3 e(8a#MZ`cI(r4G'qkLISmSIM$cHT+*%Lm[b"cQApCCGir+c$))qiATP3fh+*Tj!" H-[J1R("I2*ij$')!CX4Ph!09kiK(re1L91$8K4Am#MYUK91RM4J*TXSMZIRSQ)U 2($06cX4Rj+bP$,lhd@DF&Z2(91Dq[SqD4@,'T$6e"br-IP1'N[pHS`e2KcIB$1V #JX3f@%5!Rc%48)Eh@3+0*iSpJ8&$'L,mUPKl9al(-252KX5qH9'8cN'al+heP+, PA568#FcceYI41(-#N!"c8R3kll)ql3Mjc+ZXh*dI)d(KpGXkSk%4ChF69S$mR`h DUP"YDmJ0(KM*URrpAE&l&iVK`pEB2NG8&Q2cifTVbDerl0dVkmL`Eq#54,rZ%FZ b`rcqr8`qYQ4Xib3,!jT%UVb,IIAjVB!`aLhb6AhKh-KD0faRG@Q(kq[LA5eT!6Y IDGI&$LN6%)hl!1akI@*@2llZYJd+U+(d'K"UlF9ZJUD$l*k@h`a1&ecQ)`mm4q[ l`Rcm@5C#)RRNH!M@3+6h&DAZ4bQh2Q8JpE"b9F'U9D#kpb#C2i9GZ4ZVAGfq@$l j3*H3!2&e'Mq)d$B+R@Alk(C@E`dkDm"I#bHX)3PHAr8S@@KG+bXA'EhmbqF*Jlq 4q#NRSARIK44(FVD"cPPRfUUULQ'(-($EeErH6a&ErCLlH!H(VbaRD-aBZHZalD) S(e4mc%N'HI(rSi0c"&BN5I"11krTf+G*(Hl*J[Gm*&iGrQ"bqHD"6aAAB4EZT'N cf`(B+Y)SIUMfcC0#k!IA3CJZN8[ICEVJrcGeU5pZMH'I4*FXX3i4f`F#C(h6J-M F0-P+bp!XCNU1JpdXebIHPfhkr$*UMrTZ!$GjH@f%eJ9l[rieik6HVN+bif!-Ik& ,G9B"Mcc+UCR(p&2a+'44Nlk5Vpk%DA)DpCrD$qpU1',&@QKrS5&dce%hEGFh[i8 U`NbNbf$FpRrlkNJ`A@R[ibrKC4dh`AULUpL@#U#9E*k4Na2q!)ekBDK[+FNPjFX N2'cE%m#V3cpHH9QQ8F-ji6aq5EX+!ET%2k5C1%Q@q'aBRJ-9k#idBe%HTR[GKil m!5@ma4Q%eh[`$G-GJRTipRKFAL)%MDH)M0RIc[l0B(KNL1%q([dM29VDaN6jiM' aF9Yj&[l6!UB6'HbH5YkJL"!cqf3`E&ppcb6JC&UG'iA$XF&%DclY4YGp%6ZQ'CC Sr9$F"K1YkFE5emX6E%P4FI[#8*RjS)j%B#fkh-!'F(DL2@MddrkbmPiQ8U#"&MK ,YbNk,,$'hmdDZAbScM,Q6X-[3HM-XHV@+!d!DK6BkEEKT(aUS$Ef+a2VSM@rUHQ Ep[a@f-bkV8Rb`VSRjq'N@I49@`MiV%h5&YF4`lhE&e(br%ZNaCf5`ij$*Xe%`A# +G1DM1Qc,#`j!4R-GJ')*F$`RH9hbcCH03rB5"aGQdb*)5)e%[MF!4!S!4&r@)!q M'SHT61DUNDBJ314$c`!3Z5cFBZRlP%)Srh6Fp[Q"--VKjjm(P2S$CdX1j(4b4NK IH5k#C%c65MaR0L%mN@pD6F0ZfS9Q,4dFD3XXM!9lIhFQP`U3!2IV0EYpBd+bVa( mc#8d5(@!*lLZdA@,P$M(4Xfl&UC$$Cp8EATmYF(UHKX(f14Ee1#&LJ1Z#Y-$19R Y$8LIB6a-KRU)'JeZ`N!fY1kGqh,JaJXIiDM)LfifCfKKE)U4'f9pS*FR)00jJ1I Sj59YAL5B*Nhlq!!9#HbR5l)NB$JHG,XQH[3@Z!2!pCQ2[5d00-k*Q#dGmhFBZ6` b2kDY,QTbMkU(QN8FBCP,Gpdp`R&RbGfc6$6M$#h@YPV'rp#3!0kiMLMG(+#MK9S 4kS,S#L4'MecX`c,JZ-+LqLIUh4dQqa2+YXc165M[rKVPe02fXbk!3G+IQi)5INH -PS0#Za8`b*0)Li@c$L)(Xdb1CIF%dKqS0Nq6bC!!ML2E#mS$fSFqr)M5V)-%FG* qdbA8V9bbEX'8E4qYC5b$4bkXEb$8e"%@[L1rYTKhEad+%Y#4HhpBc,HiVpAr)EM j9jIGa!GrrjE$E-BhURNqkrfE1BY650E2aG6epe%mF8m(KVJ(J,dQ+Vp,2#*YCi@ #&q5pkec!%hBq%S5Z6Y$$*!FE8%P4eMphqEDh$4IPR0a'QiCE1K&8V26&mbKK33f pfiI@YUddR#,"P2r#YXTSY2Zj6NAJi[m2+X8SNjdIAr5IkB`NrVc%41"(S(3'HZb rq&b+pcM-%2dfZk3%!Zi`pr#5b#%B)-ae,0pCX"U[KRr2a5T&V+dS0DX'4kTHPFK [1CedKq8VCQAB@SV0NHTiGG[c$QbjcXcSa$RQ@cKV(Z$-+%kAG,E!pk+&)3c*8$` KrJ,0FX[J(`F2dN6i90Mf233,MfJYA3p(A98iYfD[S4mMR#V6k93QDMH"lAYa8%4 [!'JRVpSMH6cS5+d0ZEd(m'F%'UN92&lCrUCP2,!5H'Gj#*26YIT'+)$Hq-mbjq$ F,JPBR'*Ml!Ec&ZK9@Ad6AR[c`FChEi*Q&3)9GDBQ4pb4Mp+&,k#eTpBH3L@ES9# JT'Aj1PQIpiXpA`NFr6l,!`hq&l5h)L+Z6Bc0*'dQq3JIr+`(M[+`cGa%-KqF-%3 9'Da'c'CeBVDZk4F@Ud[h"BLYY+Z2*K$['[N9llQJI5,C1@605G&C*L,9L$'c4I@ 2q2Ei,[f`SNQmHE-P@9RD8JQRLSF1+JpA[I6UihHH8&'(Zfdq[SS)0RbLm0I[L%N [pLbQRUR+dr1HHA3bpEVKS2B2Z9R$ek#0S$E8d9+YCPAYSk3LDfGSJlEXGaThkX% c5HXR*1"&YB%*eANlD)Eifr0"-[(6M4TrqBG)b+Sek3@e8p"R,5r4UhJ(8+rZr4e m6p3a)8fk#pEN544*XeIFhB*E`cp`4G"J1QZbY$B+2XD(p%'RAB(&#D%lKBi#(&f S)Ye9aYr`&NN'RSalCS4MNEriUXXI*8CLcfbXf8'%lNAPZAFjKld&*ZK#MRBK[Ri SRMl'-hh*@cSAZ[AD2P!re5F8$mG#k80qj#""d@pM"R95"'HQCddp30r,pTd-j2@ V$2q,CUI'M"L"PSK6NVcH@62cA(3QY41bQG$@+fj[B3&[AX'2dl6Y3al5#qhEEAC qLGP'%RM8RhD&PEp3A15DK'Fa`M60imJ`rLA#i%`'PHKIi0VQ,c5DXNE)EGJ'ZA[ @Y'YF8Zibl$KrDY!"3riJQC'ql"U&8*Z'&q2@4a36Pbd'4X09R2UPP&&jK%1GMLj ViQNicB[m$HAD,,8qQi!bDU(pJI'JM#aY!+)QLjd155IqKbaA+hjSk9c4bFk!%d9 pJcKZh@Hm(r(Bf[M(r,6e(3*1"@@e!G(J0UAdYr,Z38+J9L9fl'HN)6-Q(cTU`5h aH*Nbdl2--%Kkf3BE,5m$8Gj9#h3GLXGL5qb4m@E@42F2EDFQLp!f+lj86TRCbfT *Xj)R-Hj8cY"IXT1*X3eaZ65GpE,G(c0@jZBDqp*(ejA$6KP60$$PYAIm4,[jHiq @af2eVmBmUh2M6GH6'aGU0CL5---NdD[01K!be9GJ1aXYTfKVHNqX,5e@kLThl(E UZ3-2keD@,iCkAF@MI5$51Fbc@9j'1*[RFQHlIb"%FVX!8M*$q*3a),4H!l+Jj5M qV"[[FNPq(EX3pE@cJ9m&2M*5A&+@S%V!Z+$%LKH`PHV#*9EfGb*k(4(r%bT9XCd JSUXpFP5fDUVqVSdiYrj+**ZApl2R#Y(B'hJ0@eF-BRe+C[UZDM&e8+S4B-S#Z4h R9%'58!3DYG9#Y!FIp2cT0Hc1rCL)5J3'pXZKZ#YJKNf)5F`iqc(JqrIPJd0-QUE 62RXAYM@EdT2'QL4!Sf$djfPXXSj*92FkU"$F8Bl(+p4j&3'4`(I[%!CB`hU#'Q0 )p"58G(*'LBrPlV'YB%f13ci*((Y3e,90J%`S5,9'BkRZJXC*ccm&UpY`T(EceEp JYKa8E1JAf)@E3q6-hTVf"+hFaj[A(%"(NM`+rc1qSS(#8DB5bJ!A,8+"56243N& '*A9*EdaP)-JGN@kqCA`P)8&Ir6$P`@Z4ECQD$M,J"ZUEP091'+!1R)I3FeU#R3j 3c5d-UM1*[LJ36K3K!23dF9aBIaEM4dKAaL+$i)AVRdMX0+hU!$[qVm*lTP[mbGq p%j@)5Tp'0AQV@RkR-eVR%Lm%UMLE)YT#bF%qTiia%X30"`Iid#Ek6L,AEE@,,!q jl4h!$[NTFiEcjCh1h%*5-@*RJ@%NGCk5ii-EK,`GM2C-43Va@8UN!9+81Im*'$C kDH@"mZR+bEjX%@SP)@NciIVqFcj@Ph66*Sr0D1[h`"G!)6(r0Zd*IMIbSGK8#dY 5iC)*c%Li-21-KVS(8r&fM)M,iZCD3#Y88U&IGadbdNI*6Hq`%qNRFMc4Ge,[bLc 5p+Bc4&(")H0aM%-0MJm-8+)AN6344&rQ1!BE3ABl6@*pNE39ed@!0el+!VTYK`i e)UQ&pUaHh$(P4A#S%0VpFj&1,8LQ,b@IhLFDpCr%5JGr0'@8*L(bTh-mTb'e#b, #jh8+dd$Z4*e+6Aa""JEjaIQZ(Ap8YPdCUUD'R$%B%Rp-6J0LLB@iBIX(T,Nkpm- H0aTP0G'YmmLpTbD'rV*ERH(0@X'pqH,A(V65r-Mc55l1@2UMpdTiiM!9aZPHX@5 1ald3SC9YQp)iZhp0bN9Uq*dql&Zk2ii4RMd0cE*b+,(qI-6INIEJ3kP#Q$U1Jr2 mj)6b`)CeC(b$i%BaV)cjEMURTGJ`Zl,!`'i9AILmf[Y&$S#JEb3@DQXe+C(m3UL k#9Rmpf@cCk$+hM"H%jJ4#0I2j1)G)pKpA6lSj5Nh)-3P-B5a5G%-HFeZA2rFeml DTTQM$22$@iRU-,F&DB"LV54NF*f5pdJ!U%k!&cNZ`PeM9ZZc',kl#@ZUbGl+)Y3 [AY@5dh'8alG@ILhCieDa$G-ql@$SNVDYV94(`e1Fq1J)1(@#%@eMV&K&`Q%BEdT Ck`Ujkk`,fC1Fq$E9TchqkL!!ZXSVP@Cc!cC)iaFB(l8`8GJ2!#-6Li@NT+d3@T2 !U8c(J**08fM')4`D4&lA9IrQRpjEN!!ikG#ECa`6r@MedVr8YVU!dE2hK)6DQc" Q*$lI[Rmpm5(`X0LFM4AGNr%ZVjGah(I!*$abp#@dC!8!+V'2'Cf(55m("3qKK`S i@40i0PfUdHBJ9Y[(S2Hl'F2-bPj*1m8kKVcY*-&48i'FLX,+pZS8J*EQ4YZ3!$l f8Ll"IFKmGdTbYbcS,Mp(b4YA@FZ)-,h@chh,#F3D!mrH)De%fR*aL,JPpZ"3EUU Ea5)q-%#0q2ir,-DEC[pB(-+EAB-%R&[fflIE@#CBAZelFM3-VU3XDVMYlSNrDbT P+6KEB5'c,UDXkZL09c#A!jfl%(`KN`l%1S%,5DmD%jSU"iEKAAQ96-JUm&QDS(C bH!d#5Eaq[$@qQ'QF$*4`VVXEYifeiS90ZbAT`R8c5aL'A'R-#+V!qLNrb9)"'h8 (b#NDM831!j'"-hmVP0M5@[Ah,$LATN5*FNEAdlN,b5935p+f9[MrF)4Di(TfKT0 2(N-fcRq-dcF#22Te5Z8bMh,h%QCX*6`0*!2X0Z*d3'b(dP#QkkdFNIH0m8TCTKR ZDS!@PVFq6QM&GRQ'Ei-rAK[C,1#H,S-1XFD2YI+'lC`-NN'P4l[-VT(IGF!fd-i dB6F0UiUXR#HelTeK[EYT#%aa+%@QNN!Gq3-C21AE09a#aK-m)N+cH4*ZBY*2faM bCV"f'AaLEl$3('5&lQIQ8H,S8BSSlDCRaJ,pf$C(%meS$I&jA1J6Q5@Zf#'efej rP$ZV-A6G,S"TUTM@*hmQ"hmi5C`'IXpG98hePLpRlJQYLFr2*bc6d1%Fq-mk)Il 3VR6M3(e%$e*DZVb56i+4@df,!BX)#[Jc-Df6Dr[@"X5kDkjDU4&V3f#mD+dZ0Me "[!DLjmM@SD4SF%BUCBH(E[hCf0NQ[aY@F5R1EDNb)QF49&RGK4TXXm2bSF212h* m`jkp3K@'ar2Gfb#H0`JlFaMC9H&P@(22JQXN$@A!`Q%qhV!lV$Nj%KQprCBC6jV F1amrma%HNSd1`(CrL*mh*`q3!2AUQEAUH4HbS5XjkiXHD34If0#%ULrpCmFA,`, Cb5pZTL6%GEX0Nkb&'UC)j[8H6)1rJlIMEEA![[8mZ&L,jUAD5(Y$90K-a'k$NAB ZUj8P2IfYqE`MhL8GlNMF9XFb["j'&Vi`Jc)X`$ZXPbP4)lYYESfGeY!Ik22eDDh +#2IXU!H'29meLe(jP@L1GLQjN!#YK2#6BaGmPFfBl*3d9ZRYfKDTlB3UYLjrXi, )l"P$HfP4JpYDL4bThT@imhe4J-I"j8p4IV(M2+lEAThb1F49!`&&0*6m'$XS[NJ eji6Z58'+kV`,S0$m,+B%9)h604YL$QfRBXqih2XRieTbE!IjXU0*5CVE4pG[P"P --AY*#*jS1j`((FkTSS5[Rl'CS[D5IiHKJ@@16qK[AP&VlIeGKZpriF-EZNcI1r, c,,qaVa0%Q%d1Z60Ii3$rJ0c3T56Lrh39+8##5P#9&U"8FEd-cFFee*Xdc*ca*Z' p%TAR$1f88'GQ)%3IL()rUR#$dd)5G2CdMdhZZq5-I`jS)PYaX2r8aA*$A,-B`rR QKRrEq`0C@R(-kISh6Fe,&4b9bISYXQ6Q'8r@IcV!!JFKRR!pl6l3MkFjd!lYG@d H@iX+9#"ECH0$%UG!X4ZKe'NVMc3H"fTRlX'ikcCm+"1$LT-+05h13!(!EGlk8mf [D%XT28p&#b488H,4qp1l3YkP,cDh,p$#6VYSRP$YRJ`J5LL"AF16ebMq5"eXGAA e%`X@T!TrMjaSAj!!DD`jb6&1S5PZqkKJTj!!m56FM)mkp'"bY4aTbNK'1DE@`Me mHNbSNX$'-Eq@-YSTKE4XRZ+4lZkYfk,YlZ-"-99+-[!TTKSQ4c6$pVJfTp%8RZr T3e$R9$[%UdCGb!b5+AS-DfE(Xa90-`9r(8qB!a1"Pq!XQ5`9KKhZphXRXk$Bb8r c*Dlc5(#Q1,TM&`hPhr")35lhb8-@$%BiZ1-"k&lr8hM&H6YF(2*fDGc9ck,4*%E Vf,iTB("4+-Y@5d3h#)b9GH8"!T2V1l(,%8&TXK9d[RZkD#cih%1kf6raZ%0L(P, 'U1jiF64lV#ML+5G#!4m)2jNl!H'P@*Z[#U["UImAGLjKNPNE0bX+hZSkHTAM-4p E)JQRY1`G@10MC3X'b,d52%S+5Q@D&'SbB1Ib[php!R",N!$)52a(C[qqb0!C'Gm BJT(YAZlU,lDNq[!SIPeBf(BpQ8F'(GrI`I2lM&QH+`@2!'"VbK$l'SmmHq,r6B- `am3UdQLAm6I)NCCB1,BBB#f-*YiB&id$0,`(P9kKh'1T-&3i%KU4a9dRP!$YS'1 AHXS+j1&TlAe'Tc4RA@2,@R`+Xal-R8XME$JV2Q0Q%a69XFS#qY)#'6V1Ei-H&AM 8&ii@E%Z`q(ER9+)ba[0-Xf&#`3YPrZ"$4IL#frk5bllHL1j4H+h"0JJR[Tka#dK rX@#pGMdP*YkeMdhp[@a2iK*5l&KS&@,A2+rK)aFLcaK[)!TE&CT&dU#B1j493RT 8VI016SIfi[J8YDG,GheQDN6MIq3M#-&Jhe9'qJk@PeJd*@X)8'3%[2YD3@fl'iS cJK+Dmc0b31*dVI!(l0J$`)K&$bZcV6$GlI1UDV8iMTZ@3jD4h4!8H4eqG4lR2%r bDD$m-Pq6&il!&Qd5r(&H*bC)SYDR$AS+NPD0+pXImFP-1rer,MMRf1bH+hCG-,F ZZI!%l-1V1j!!'NaF$hXAP8UI#K!p#ZVcp$e&PbDqhc1c&6NY2qUb0CpcHSlfZ`4 [J1TL9'YqYGdFqK%Z!6b%#YLZkJ-leSl#)()'Ar8K%8b$JHqrjkJhC&CU$rP0bjQ 8,ir"lL)PmJ!Q`BS2)TM-BPm(,m&FpkecSX9ph8CAfF"l'0Aj%@'",PZ)26L5U+# Sqhd&hQIh*'XiD,*FZFSC69H,*l#lE@4+@IZ)l@#G(5!!5C0)JbPKHZ"hD3rh1[h mpRJ8QrBlDfdD2M2TE&#)$U"3qcR&KeK3cFBk"pN'ph@X6Xjie-kFIPI)CH,,Yc9 N`(+,GC`UlP[0iJkk'cRY+T`dr4BbP"L,@r*T0qkPjmFcX9rTb(UI!`HCKb[GGA6 bI,5(,"(!iBCl$KHPhLpY2C)IE!$,,`jdMh"MNXJMf$VkXG[LLQL%q6C+XqKkj** Gqf)c2ad1!#9Z4+-S2h`[@e`,LeqbL`+(&BM(Aa'H0i1&9IBVHZ(B)5NGcm3Ve)R TJfir#qc5""iK3QKqEh4Xr"NKI5hlPE@@*@9i,je**J3XcK9EkZ06QC5[`H5lkk, 2mN"Z@PTK9%AqDJEaM[1*#Uh'8m!8+DGb+9aHL'TNiZ#lafVZIF9m!-2l"F*eH[T -r3CIFdb!a`Q&`mhd%,X@6rVHCN5T)R'd*C+!H9E6mN@ZJRFF4[Pr'2#EZ3qm(Pl MbDdUZrYKN!$JbacC$2K19-SU``aApT-h$Gf"LMJ2e)%ZHQk"QrhHGFXB1Y1CH-h 0()ZRKP@8@kHbV3Q0AlIL+Q%&)%KNb#-f9(2m!N4dh,USrYCUCTcZ1M'9I6P5Mm* "%IQ6IZ6bPr%(F2YF9VMQL*P"T(UkLkVqS'CqLXf8Efk%19maR&&b2$E*A5I(rr& kG+d#I`m3--`T'A-#4)+mDKKU9RUPj[lFZ-9,GL+F'3HmDf6eS)VFGmFjRkR9KMZ 'Z)U#9k*a(ke`'"Alj4J#UX'ZVL'2cR&qfTXYk)C0'1H*6Kr,lRiPd-4+GD%``Q- `14-J-!Q@XJiSYTIN-VSDTmN[KAA6"85GG)#GC9G-U2"0l-MMQ@DDfeLJ8!rLD%i B6pDph3%SR#9iAmrT9ThU*'G3CT,mU(CL4!3iBlH8&SQT@qNrcqHV2m&8H*2rEB8 088Am3hj!"#(EaA0RDm)*b-AbLNM4'PeUJ4cZZd&6PIJ9PbHbCB@06e'!M2N3@hC @Tk)5p%bL*K2b5+hj#A%`3pUI&rb#T&RAGLle0,00KZ+`iQqUX1[HLq86NI@#CI3 C8R#-L!b2+30+HA6pNBkV,,B#J!-d8&G,4k$061S,3[YKPHJ5d5,cLeICMH'h,$G [PUPeP18Ycdi(Z**%m[V8[P6Ym&CmQc)$Ir(Sc3q#*01Q9f,2VfHh%D-j1KDX)#U JBQ+UCNVEE9j!@C2G8@qd%Z`X)5"F'L$()JEcJ0fBba,DhKcV1RefJeKd#`a!NS- G9HH$p*k8Z+jP&QPaX)2pqpI&SUTa8IK&!HMR9c)Td@V*M,*4lraj-5+IE4!U'pZ b&5NFNBDkQm$QeQ85'J+9D1`fF'pcSJMF2C,@D!@P92A,$[1RhB4l1f4MXpMqchR 0"8V1#JQaaQJid2R'bPJE*(E*h'-&HPe@`!`eJS`aUM8[TjJ#jERCpUBI`#r'L@T `l)2Dhh4[Ip6hYJ#HfjcH$,%b2ZR5*f`@3cCV9)ZN#$ildE9L$"'HBRI(+mZGKZG ZKJBVZ1a#`0X5iZfq#TiR@P[`#UpcNM1rmMTB+*!!&H!5f&mC)mbMGB8qc*0lPU( RF,CdUEpDK6A65AY&H0%6HPFCb"N$ebEkfG[3%)S$1U9fd(3KK[P8EPY3$Ad(i%k XijCQM,a)C5-[CDQE#cTaFc6GGM%+eY+Q1Hb1ALZ(h6mjl[KL$l1HYMeqcAKqC-i lC0h)fU*LbXjB*86-9cSUYQj,aLG"UIX+@-6phF4kEq%kXKhD`[Tb)[i2M'Tq5Ie FqlUEjE2a4l6m)'-Cb[D0RCP[K%C%-dDUjl2$*pC(AFX``lrKb@h,U,K0M#D&ACF !1c3A85NFd&,Rp91#+Rj)d&J25!00bCi0m8Z'!TR3c'3SpPNZc0rYNlrq%0Y+3Sj KPCYq5DSp-VQ-L-*,#(DLhf-RBlKYj1(5rpblcH`L+kaMM-%Z8FVB11Z'l'UAS## UmLdmNVL1'HMPpS-J8[kMS-RJUR``!kYlZ3-ikN(%qh2Z*6,3karGPjarNLCaccZ e!$SGC(Z%IGmpejaE+@Dd8pRe1Vpk4$T%@d#BaHTe)VmC+P5[bTUib1Y(!(mCq&& VY")epZ@EkP!!q&Ek%iUI"30PJFi"$e"[Sr)P$B9e,[FD%X'+i0mVNlq'Lcm$QR, )e`k$hAkKLbASS*f'02&3QjEpGhm"QkekkF3HkBAEcB(!YU4pD@M,QTh`NF"T(-A "fbG&r(CA9+C"FAq[[!IUph#Zf3D(UM4XD04f*T!!N`eUJXKCk[L2X$P#B5PBRf+ [d0d34fk#V3$[#ChD61hXH4Eh,%-lL%d9%j`"$bK*6cqD`X1N3,,[JP$%kY6-J*m Y!LlH3LZFUZq[(8aE3-$GP9dNXAc[$3D"d-)dAYdaB+cGR0-"82SRTp4R&05B'-X UEfFQ)'Qmi"r8[NcU+3NU9@Prrdj,XQN-*S2XD8MXN!#&hicAPf(!YjJRf1eCNAl p@YI3*le)'SGCJ6(CB4-CjfJB@*Q+PYfI%Z6FP2bR10&3(*+NFA5!Qh6(&f+aG6q TKDM!N`ADAk#f`Kb5T3jSYmL1heidcH8Sf)m8U%$0N!$2D)MH!cb4(kNk&l&l[pS 6QTpX)&h6[0YCkYfmRDZY`f(ERG(qUHG#)ijcFFN9+j1(NTHq!!dT*J6[kjjCKX0 eG"&P--aGheZ469j+eYl2d*9DJ0+ZNI-Ui25A1'EQ'H0mSbY5p@PB4afr5)`R9"l pNK[A(A$G[-i@YD-eFBbZ,0k6)X[9KId(05@J*Qi+-1Z+"Q&b!MC0[DXQ$0%Ii0" `aQ)NZ'QVSI9GD*6NcJZ1-mJKRbkJ),UG3GcZFRZIQI,2I(*rbd(*CXX1"qRNb&G J!9H9r+LH1@r!kN3![J)0&SJEK@qNl!3lmT6Hk)jK)&%Kj9c++*[GN!!5QbVD3D[ S[ZJcSchbkADN2KQ)BL3el5ACld0FbRP9+SK1,bi*2M!JapB"DI&1aAF4idSMldq e4l+N"L4*XG%''Hl!V5``ZZY(QeVL26U5&MR5KLj'(#--Y1cYIl3rM2IB(l$Kp)E heU@J'9[ISa`e&IJ9"Qb3!%#2`#[b`&iN8E!MX*MdG13(DDI@p`$6qfVfI-kR9el 5AYBL0"&B,S6Q*bR#eZj18#-BG,4c[TBe-fDZ-60J316HG*rDZiA)p6$QQ2MQqLb mL83b6A4fYh6PcGf0M90)*A0@AFEi4L(&AS2h%RE(%&*S`QBQGCp'G#E6KQ&")Ej e94TSK$3#ZG"X@p$JZlNJ23&[YCSbLrpHY'HZm5hhrESqZKM9Ha(8hR(-SNjkbir G%lC'rI'reMb"$YS'+L*M10k$1j&`96Q0$)PU'dk[m"0`ZU2el!JE9QH9*%QaK$- d5)jZpFif!ih4YU`%M%fN)TSi`H!j(d@f,DrF(QEfmdd"MPEacLdT6*LK-U1[Ir( '264EMHVlqNfkY)f%eTe`RJXBC84%PHd##elmGEKj,D+0Z#Zf9-ee0S(i0U1hS"+ '9I[d0L549&qGdX%4S2&k`T*N[+&b%pTUIF@+D$"jS[+mh(PMe5MBDpT%[pp"6EE HGX`*i!pe2*V`@A`Qd&4hBem#'KbbM9`FiDC&Qa5#d!3(VA!NB18K4'cXX`KAXDC &!F[Qj2ND$dRPEAd@AR8)#e1&MlE'H[LX+8keQE%&68G1X(c)[V9b#42eKrh%(,$ jiL0KXL#b0CHhPI*[Hcj6IhD`aG!Lk1L*mQ`'6(Vd%Ke84c4ChPrG4Za9(T[`A"m h4V4`LILa%hb!BC!!VqVa*Icq06DUAa4ACY8jMkTq)p`PLDK)fX0#rb,[qTPMrPS 6Nj5Mc@$bRT)2[0$%`KEE6e5ZVPV)ViMED!NF61)a-K!'Bc4CJVjNZprlNlYJ-"m Ym-#SHq#k83feNSl*KcM5@*D1K4d[*Bb5SN3@hFT&RFpFcAc%k4rfT[Nb+UK!TCU @C'2id0S4k5,%I-Pp`8ZrL``Z3FHI&I3MA1fYrT6Mi!XDFPp2eF0fEH48d4UU+-' BiNGBf11D`Y-P*2,k94LLeKEK8EkF[ANB"$3p%66'@N#`pXfLB[ZEiZ,ck1ed%"R LP5#(lZ4ZQ@da*YIPkGqCp*eiCbLQm#mM-rN+#jc2(aU[UGC!G(cViH1(&*L,p!L K&D1@PL*(PB5e5ISc%*R,Ib30*k*@368S0Ki3+N`20+G@1**Y$6IGpirNMAP9BHR TUU-@cKYUFR%MV+KU[`jbTTeYdMJMG4)UmHiHXkG6(S9XJeI`HL(epJiE1TLJ3h3 6X,QQZ`53!#TeFbLbcB%$QMFaE4qi9+dc6T0GZIQU9R%JGH`*-m9K$0NR9-KJ$Fi Nb$*'bKdrBa2Lf38HIkXRrX"58Sj+IV-`#FBC++Mhd(mY!M*SrkcmDlB0r&$%biP rHpUk8+!TViejZi2$(aDEAJ`)mCDFhb4AS5ACbLIR)PX8d-@b%Xc"DhpH%5Rhle# `YQ-MAhU62AXIHpVNF8H-,JiH+)"L[&)JX0"lhbhaX523fVTMi9-65KbETiS(M3T FVADJ0`-LV94fcfQHlKhqc0h6C-m$0pkpT%160Bi02,,$8VN%M3XR$H)[ePQ(2P' jLY*bZQ&MhF$MmlUqfecJBr@dk-NSDk2M0F"m@+`9Yp+LdheYN!"EEap#`3VjR+( c#m)jXIC-L0RC*D2E!i1DkS!V'f2B)P99YVE%-0JZl`AX4h"R3`XlSQlI9EDhT,p bGpLTFP9D%2&$`lCahN[iC5XiA4""[`Hl#L3q(#5J[Pfkr4+"eCJ&9XEfcj18U8M 'm6XlLFa(8T`@EbN(Zb4h,YAX,)IG2+V8FpQ2qSV(qS5BTYIqa$Ec6IEMX&CSp5+ -iqqK[Hl&lmaEkdem8("ZV*0mR8IT%iqjbmL+X'DeCmCm"DEhJNAX8)V@iXrF!`& 4BTAD,T[pNrp4Mi!Cda1XrNj)ILMRR#B"5cbf!Afh9l"P@SJ4EP6kJGA+YkrGbYK $64Kp'X0GD&+$I%h)E$%P2Kh"L)qi"0B"3I1e4&aGfdD4%`#aI4CLi"1ER5KBr8A 9T,(jZ33ARhrPphDFa!SR[6e-CmM&dCI4l%42TqpGc(iFK1"`#'Kd-+lqrUY4M5@ &Habk+hIEkX"+FfLLjDYMLE)9QH)CTJFR6b4Pc4l$DPPdhcI3&+F#KM"6cJGM22b I[kC[!S[A`4)lll#R-c!9!$%$'D%QVV`je'"MTjb0Yc3k(K$CT,6&IEifmB00!eN #NcU`I9`p8CAeF'M%%Nql4C5!(&AMS1G`I[HCjUJ8AqB(AaRL[rRM-3fGb(5E8Ld 0),Pi@6qkFJ(PQR'RMMk2Q@ET6VpXD@b1k,IeRlI"jG`-Mfd2#(@b*+KPmLb)(`' &-m2qT-JE8%HU*68-K1Rm(e[+5`aGNDE,4d6(,i+!,iqf$3[kQk0Af+@j``S0ei4 Y4"GP@lmkAU)'k@%&5NDK@(P@HJKF1-TlaYd1ffhN1$V)K[dmNT5UeVA'&f`Jp%, Dh580(JII6'M2eT6N!K'0k[['&[LF2qfT6&pjX%$r&,(e8-+QrNSGM,6lNr!HG-G N+Q8j[SEc80rN4DpN$1[130f%-Q!*TK#,0b&B'1QEli"+B@I-e1@bhl[3k,61S-0 0%5@hB)B$qJT5NZe`eE0dj+ka+3XBf!D[4l9EHX6#'Fj0$ND+HrSJ'C*h*!VUM3, p16JEZRfDYQ"(Ra@f!NlVUF[*F`pCLA$G,dGl**8c*%iK-9VS59G*HcLQ%c'mJHK bbH4qhG6f1KQ*m)&f'U"a#T8@+(k21,9@jU$NQAklKMbe!dir81PR-ae,QSbf92B 05MZ`Yj)AJYNf)493V0BS5p+-aFLkcfGYd)6DL3p",NMrYHKq-+kUbaH-YYM"[1P $)!ql#VKKp6!P2YRErk4Yr#U@4&pV#E*R4mZ[S%"YAT-VMV[h$Z&lVTba49KG9mD Sc#Ie3CYF)1%0F5TfkajlMF'`I*-MAPp[h[XUeBkH)-CRGllSEr!,+eQckE5BmdK ,H)2'(q2U9G3[eeiK!M,qk%G$SA$RXeHCePi"&YP,H+2SlMQ&&5l,'+k0rI59Hf4 lFSMha$Rh"(YTc2CK%b*VLBLY-(U2V'5953c!H+aD)D'@mTk"K%hUGT6*#p*@UjV &2"L9fDHq&UQ6TSmMm[qlHN8Xq6$FI5'0R5L6,b`!"far5c%,1rlXH1SIEK)YJ@0 J-GbB$kX8XmLV*V8b9Y+iRka`-ZE[T-3a@DRI1-FR1V4e5MAR"#H#H%@lZF+aMAH 8b'%"Rl#01,GkSk[I4(0Ij19U`61U'lM)pdpQSr-j5(j@N!!U#fp2+epHhbUIfpD )NZ!%PQMPmNJTDRVp[4q"+pBQ@VGmm[dCAblifbEm[1*A%8&i3Ef4@bm*H-894(1 dl6#)b4'beb"`(`rSCMYdS2+GcFXLm['SLHil")(3!+j0DqjF,"QB#`mRSj'KY#h FijfU4V+3!#YpMLGDHQ@qhhIk6@81c[N9+[FhZ')U&RCTe1Y1c6"6l"aV9hDPJqb XINmH*qRZ5$$R"*i&lGRFpIkpD#XXC@4ZFJjpr9P)@lQ`))Djf(L(K$H3!)@Bh`J Nj36-"YSK6Q6`8qc3hpPV6964QiNqB@V4+-2b!&AZ`JBRc`0#Z%e#bAj`9CdBSd( SrJ8p-GlEFBMkk+dkpZ"mG`RpSmeQ2@CpCV*NLUl#QN&J0+hY9aHflZ![C688X%G J5GX!mEm0S-EYTLJ!m8H@DQ)ZFCV0J)&Ee@'IeC)qcX88,V&qQiHQjE)G%f8N286 M32L`UB%jUJ'$rFlfP*!!&Bb&RVCXiP%(3V,Xc(dI#mDPeiUEd[[Q@(T@1m%[@SG aJjTc1&5'eDh)i9q6(PeNpDbFX*SmC,PK0(D4K!3VDIq)YIEQPA0(f-YSX8TM3Y( NiApelS-PT6AQrJlq`FXY!DXF[Qh%qDQpGrITK5"hmNNj2VaL%#Zd+[*(B&*epfb ZK5V`Sel3QS,bZ,mc3"RS6`c""r-B-CDb[LIkf'eKRN*NKEI$034@5@dXPd6Q"[* KXKPb@hDM5&JI$GAc9J4Y$VINc3--XN3XYCKl&MLSkZ5bh40))fGPNiJqCQMQ2rd cl`N-pbhZ`@I-Ek3GX2E)YR!Ij$ef3EIH9kcr3PLV8Nc'Tq8,rfj@SkM1CjF'MQd D@Kj%+dH,klNp(ZCb&e$#%)V4UI!%)i+q!N)6j%RNMPXri-1p6)CdJ`1SJ(MG)BG F65j#jC4mV&r0"MD"-'(JP!3l5$EpU5d,r-XMi!Gk-)Za56D"SXC5G41cc8K9B1d 5,jGF2KQ3!(&NeL0,G19C$pL-#8R-IJmL3,*dj)3!N!"`QU*3QH#ESGT,6fJR14( 0&8&D(2[Y"9&K4+&Pk,-%S)e#cMiTYIHP5aC($Gk2SX"p!QMr`KSl6#aCZcNGU$` )e1(5dM`fT6,fGmmZPEi3a'*VA#[+*"d-RU1HXhq%qXi%K'd'4G5UK2D9%h92pMk "+1G$@jNE@m*KBql0hTSm"cl*H1X)%[+qk'(2+YCNB9IMZCJG'5cPKpp%fAU9cJq CkpqNjCPZlIV$,r3GN!"K0SFKP80Jfhi2FbajN!"RkVC4())G8fE+$1CUESqbrKG 5FK4GUJTD"a+IcUpj&-lqFEL@#r-m!5*Uee*KRUp'F[4@KJHPK)U,h,0+Rd+dNTA a!(K#6dE5%Jl0199'#*rXI2rSCe9EmEXA!AcSN!#X5Re"#Rfb4U[Hmq-SMQq(!(a 2bk`*NN#aDQlr"r3"8kqB9QC-G,ChVc4b1)PI"3,4%)))#rS93MdUhB`aAT4bIC' a9CMELA(41f8)5reDVT[631G(+ZmN#RNYUKPIm#lel@UUXkmLip[Fm@%0+RXr'L0 !Uf,U1lp'NqhiES1Kc#2)"`3N%&('Y'VZE`A!GPmQhI5'H+qdT@JrEKV$J2l"DKd 63bpPL3'rmh#(BmQ`l$GH6"E&BYMk9`jVH3iU)Cjm-Jk!LcJ8a#,R([Pi#2U[A(% 0HY,%KE4j'8)"[h9A+EM&iG'ppZT@`J60AP`*XPdNb`!lN86fJ#0ZlHfDpeZ4012 apifUPRe@*0f6+%Ij!@$Yr*i'f6+1i0!fq!4QDlPS@BZj1'RhAY6T23)Y&Ufq'A# )2MTXpJ4`k+f2fE-VZD#GN35Mr%pfP5fE349H&U,G4K9RS(GqIM#YP-UQDH1X*#N j8YRPc4i[CFU*05ke6FMFeA4Bd2fC6,LUL4%GZ5G46)6"mmQ!hASkc)3A#'6$(-D "3iCk@`"5%#Y[QNq1ePBfK$d&FKldN!"$*9BRiFJ`mq&A0rb"G1#EjhYjPR#mf+R &DS*[f)LFlKBM*[$[+4"--Bc648KLYiN+$AXJ60VBXK2"jmd9$HU'rfq%RVkAQ[@ @RI4P1fRTJEMYBGJU%LUABi"[K*hFPdBMNRV1B9A#3VZUGe1ihZ3P-+L6L6i'-+l q,d@mRMLKjhE'`82AJraPJac3i"291jpj4YH!!Y)J2P@lHcr@(!IBpJV1[i+l2M* AAj1M*K1X"BVJ8JIFY`FUr9VLeT!!@,3HAbU*&*&)SE+d*kAX"1"M)d3(0f60&md @`b2hD'kBMpYf#DVlc5TS9EQ%AmB1X4SdFE2IEA+%B1'$9GJ%'#TE-IQU$F'bE'Y CS'+r@GqXlj3!L6l)SaDINl",*X-DC(hIl*8[h[58+14dE'*rdpDh1kU#*`1AE1d DY[60,hNpF&j'-HIerS!ja,HcJmk@[DmaklNTXG1dH&@TqD@h'j8RLZr(T6$k9A' 2G9Ga,45!`(K*8aSh'EcIPI[1jNb&PF3EHF%QjDBjm9M,3J4,@XV$JN9V)Ma(M3# #q,Q,R&a4p5K+0h8PIRF-X3ISfMc!9r($e6LQ1C!!MGj@dFV2I8HkqJIHlL#hJQ2 @XTM1mqIB`PE#LNI3lB+Fac5@#c&Y`caJReG"M5UGb0&VS`(lfM60PIjIBLD*S-# 4a"-pf(M+3IY[1U[rrYX))Dmp13hIZYFp"J,1+6@FD(PkC(Zpka%Lk)LJH6PfGl6 -f8Rm859"1[dI(VB1G!+*FaRG4`m!622Mc[%[+l3I66(Pl`U1)mLFST1#d5,VdLI )0K"YJ[hELSamESU6dBfj!A)QJ1(UATLP1f,b9%8bDXbIPPGP6b6H@[26)i`1B+p QTrZ)eS&F(DqkCaV6fm!$GcbJTC!%!3!!43!3YN00S,C&1`)!!!*1!!"%83#3!h) !&3NN!!!#b`!!!Cd!N!32!&*PB@40C5"YH%4KG'98D@eP)'aTBJ!"jS&849K838a '33%!rj!%!*!+J!#3#3&q!*!$h!#3"!m!3X(8XV(IV-kALf5G@(86`r9@Xi,HeA5 2IQS,#dIMMA[)iR,dG43a-cd(E+-988Q'R*XTTYZF%$SY@kE$1)kG-4!fV`fkQCi 6lj!!20DppYCY,32!(pq6M293P8%SlplDGGQSC)jX2,f624"eD-bp8hIBa52@"hG EL'@U,&p#N!$fDaZ5bM0#UP`r2Qdq#h9pYC[QT9R#A!CQ-@![0&4Y)R0*YAkr1C! !e@$b+pRQFK4ejhJ(N80&9ShrD$Pe9CX`0QlVJqfrXL$0pSjXKYA1h%mqq-'E'EX YAb4QQ`(N!%,"e-mG4qH81IJr@De*-m5i3kLh&[FQVq+94ja@[JUl4BjIpe&Mc[a C$[ZE`eNPJBemiHdp(81EDU4&,cHE3bF22%Y9JIB6I*ZNiIa3QI6[qjk0hCEV[9, Qk`Nc"HQjJ54q#e+jaERHIJ)qlP28ICdE@Qkc!rQij"%ML@4qPm#h2mRC8(j$chJ '`MI'LPSS2KI2*V'S4eSdC2TpM,icdUr@@f!U23&k#llU4h[*B,DRJ%ViHqA@!Uj `)mKfh)+$KAmX,$UG@2eRBjV$,IFH'Mh5Q8cp'[PH3kT9'DGCiHrGFDIq'kXFjPY C*Ljd8i&QIkfCpLrPYT81ZfhJh$r+Na%FV28H#2&k(P6,*K'pQ"P6mp5YZNi,RY0 8a*Ib%102(IJlTL+A1j%FDI@Ca#%j9DF5J8K+Jq9H,mX#,d51H-YHr`qQr)E,0#` Lap6T3J))"qbI93&EeEqf+Pqib1Y+[i`2`8dr!%JqXZ9jUeqE'Xh(R6pHeMajP@X bD@T)p1VGVfbiV@dZ*(UA2r2Y"Y(2m8-"h9ST[0f55pG+Z*B!TC!%!3!!23!3YN0 ,A,C$5e`!!%&K!!"*I3#3!h)!$GNe!!!*0!!!!r)!N!32!&4TBfYc)&GKFQjTEQF !!F',9%9B9%&-4N%"!2q3"!#3#S!!N!3$1!i!!!&q!*!$b`#3"!m!3X(8c5PAE!+ l#N3KU)4"D9i9aC,*D1JC"4-0[J@S9m!1YD20)cYT(Q8FFc%UNrb(,%m+2AM-e5- HaNdNmbc,jL3Dh5PNe`+%-UpC(TXe'P2VrSUqJl-L)2K(L,CHac+a"dC'Y[Y!h[K 20BjAK*&M+6$MNS$,lA#)pZZ-bH1hhfhHYM'(%i5dJ-ZJ!@a@0NGq!$@hVHGLPdG [KUFP9%,*ZTE2hH@$U!Ye(SMRH@Fi3`#[SM[J`h&EEVH0!e5k[rCImBIqVlcJC(c 4S!"#`G5`8BjH!&b-2@UYfrJ6)q#c`'"Q63-L16V13JZNi#6GYZHVS*G[(ir[dHl `44d6[em-8F(A$rB&(U&jIQhRc0F%8*hGj2U"6al@rVYB$`$eirY0TRM4NKJCpFe P`IRM$lmS#I&kS&LP6(dPP)i%H*d5KhM[Fd%9866pjX6A2qi!(d+m51H-h#lSb-M ,@!qJeE-&Q9T9k+5$d5#[)L#1HAYa0[lp2q@b5SDb%PcFl+f#G[rFl`PMD83hY6k fU!(a!bciNp%KPCM0f2p'e-X41Xp'bRp9Z*B62Jq"F1)eLF,"XhP%1dEiMGFfM"9 EKB@Y,2A1fJ"Brl%)S0ZGKK['Rr#RQLrm04,kb"lAqBTerQ[CB[DLfK2Y%H5irF* L2ZPIhb!(mV,R$"!AGJ&+Z)mbP6@Jc41[(QEm0P)84m*)!L54Yam(5L`8ES&TRY" p#caL*mX2,qYDQS)$Y*!!m`GqM8X5m05LpDFVh51A%Kk63Sc%`-22KSiGaXprK%f aUL(rLa,E5b#i2E1(m(6aQ%[aT53pE1M!%E1ScaV-CdVdN!!j6bUTH)D[2Z0[VX1 1[,ihKTTjCaRJaZFU(K)@i*aQ%jX@Zkh6b[rh$qZ3!+Te1F+')pGXjA8dHEUh66& +#Q!LZBrbk$qL6jPEG4@$*DHc02H-)FR-#L[mkC,l5S0*2HH0S2a`a8d0f(d8Y[f C06aSY!mh,5YQXCC5J!3&2c8Kq4aaLrd@8"MXfJ0NNR+lm(I(TEPM*f*a3G*9GPc f4B[FpH%VkjVBBLFLV%MQDqK1()Q16al3U424%%el3LPm8hTePJNh3fl3rY4PZqk $Z#qLTaXj@qr)NJVLKQK2%1f!NJd4B,q22TkXEFi)d!#JL`hdI'NPjdPPYMDLd)J Pk4["f!R8E!#L%349Zri'A58Z'&*![NSbjDK0k@*A@pT[FPa2(L"UF)DR!C+kf!$ c&(!19T%f3'3GSLqi0DhiQ,`6CTVki-EG"N*@ZZd&-3D(#R#,`99MMNZ$['Q,BUq )QZBVK@LFmkSCK2#&IH*1U%+Ehjm1#,(f83VEhA+EF*-XD5($jMDM5he[4+-iC28 qD+SDAq$kTI8E@'mjG-"6!$[T05@@3XNeA62I"P2k-6D@m6pkPSH)j8[(fTidi-3 0q56RAk#BG(#KqqRaB)MHe`$qp+,CSjJbp$I(L['4'6F`X#f0-l+*@cQbSBp8f'B b*UE$(Pfb2F3jiMqE3lCdqdjYlV%'ATG9D58Fa0RG`UFPN!#RN!"aeDTEr*SRKJR +D@%fC!)k$Cc(AIb&Q&#S)!1XYpCFbD,U+)d4+Ih2kY'#6qTr()QmQ+!8!4,*"D` G'HFCe$'laCQ+TC!%!3!!-!"!!*!+4&%!N!Gb!!#S@Iq3"!#3#XZJ!!!: egenix-mx-base-3.2.7/mx/DateTime/mxDateTime/mxDateTime_Python.py0000664000175000017500000004435211702620672024362 0ustar lemburglemburg""" Python implementation courtesy of Drew Csillag (StarMedia Network, Inc.) This version has been somewhat modified by MAL. It is still fairly rough though and not necessarily high performance... XXX Still needs testing and checkup !!! WARNING: Using this file is only recommended if you really must use it for some reason. It is not being actively maintained ! """ __version__ = '1.2.0 [Python]' import time,types,exceptions,math ### Errors class Error(exceptions.StandardError): pass class RangeError(Error): pass ### Constants (internal use only) month_offset=( (0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365), (0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335, 366), ) days_in_month=( (31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31), (31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31), ) ### Helpers def _IS_LEAPYEAR(d): return ((d.year % 4 == 0) and ( (d.year % 100 != 0) or (d.year % 400 == 0) ) ) def _YEAROFFSET(d): return ( (d.year - 1) * 365 + (d.year - 1) / 4 - (d.year - 1) / 100 + (d.year - 1) / 400 ) class _EmptyClass: pass def createEmptyObject(Class, _EmptyClass=_EmptyClass): o = _EmptyClass() o.__class__ = Class return o ### DateTime class class DateTime: def __init__(self, year, month=1, day=1, hour=0, minute=0, second=0.0): second=1.0 * second if month <= 0: raise RangeError("month out of range (>0): %s" % month) #calculate absolute date leap = (year % 4 == 0) and ((year % 100 != 0) or (year % 400 == 0)) #Negative values indicate days relative to the years end if month < 0: month = month + 13 if not (month >= 1 and month <= 12): raise RangeError("month out of range (1-12): %s" % month) #Negative values indicate days relative to the months end if (day < 0): day = day + days_in_month[leap][month - 1] + 1; if not (day >= 1 and day <= days_in_month[leap][month - 1]): raise RangeError("day out of range: %s" % day) year = year - 1 yearoffset = year * 365 + year / 4 - year / 100 + year / 400 year = year + 1 absdate = day + month_offset[leap][month - 1] + yearoffset; self.absdate = absdate self.year = year self.month = month self.day = day self.day_of_week = (absdate - 1) % 7 self.day_of_year = absdate - yearoffset self.days_in_month = days_in_month[leap][month - 1] comdate = absdate - 693594 if not (hour >=0 and hour <= 23): raise RangeError("hour out of range (0-23): %s" % hour) if not (minute >= 0 and minute <= 59): raise RangeError("minute out of range (0-59): %s" % minute) if not (second >= 0.0 and (second < 60.0 or (hour == 23 and minute == 59 and second < 61.0))): raise RangeError( "second out of range (0.0 - <60.0; <61.0 for 23:59): %s" % second) self.abstime = (hour * 3600 + minute * 60) + second self.hour = hour self.minute = minute self.second = second self.dst = -1 self.tz = "???" self.is_leapyear = leap self.yearoffset = yearoffset if comdate < 0.0: comdate = comdate - self.abstime / 86400.0 else: comdate = comdate + self.abstime / 86400.0 self.comdate = comdate def COMDate(self): return self.comdate def __str__(self): return "%04d-%02d-%02d %02d:%02d:%05.2f" % ( self.year, self.month, self.day, self.hour, self.minute, self.second) def __getattr__(self, attr): if attr == 'mjd': return (self - mjd0).days elif attr == 'jdn': return (self - jdn0).days elif attr == 'tjd': return (self - jdn0).days % 10000 elif attr == 'tjd_myriad': return int((self - jdn0).days) / 10000 + 240 elif attr == 'absdays': return self.absdate - 1 + self.abstime / 86400.0 else: try: return self.__dict__[attr] except: raise AttributeError, attr def __mul__(self, other): raise TypeError, "bad operand type(s) for *" def __div__(self, other): raise TypeError, "bad operand type(s) for /" def strftime(self, format_string="%c"): return time.strftime(format_string, self.tuple()) # Alias Format = strftime def tuple(self): return (self.year, self.month, self.day, self.hour, self.minute, self.second, self.day_of_week, 0, -1) #return time.localtime(self.ticks()) def absvalues(self): return self.absdate, self.abstime def __float__(self): return self.ticks() def __int__(self): return int(self.ticks) def ticks(self, offset=0.0, dst=-1): tticks=time.mktime(self.year, self.month, self.day, self.hour, self.minute, self.second, self.day_of_week, 0, dst) if tticks == -1: raise OverflowError, "cannot convert value to a time value" ticks = (1.0*tticks) + (self.abstime - int(self.abstime)) - offset return ticks def gmticks(self, offset=0.0): from mx.DateTime import tz_offset return (self-tz_offset(self)).ticks() def __repr__(self): return ""% ( self.year, self.month, self.day, self.hour, self.minute, self.second, id(self)) def __cmp__(self, other, cmp=cmp): if isinstance(other,DateTime): cmpdate = cmp(self.absdate,other.absdate) if cmpdate == 0: return cmp(self.abstime,other.abstime) else: return cmpdate elif type(other) == types.NoneType: return -1 elif type(other) == types.StringType: return -1 elif type(other) in (types.FloatType, types.LongType, types.IntType): return 1 return -1 def __add__(self, other): abstime=self.abstime absdate=self.absdate didadd=0 if type(other) == types.InstanceType: if other.__class__ == DateTimeDelta: abstime = abstime + other.seconds didadd=1 elif other.__class__ == DateTime: raise TypeError, "DateTime + DateTime is not supported" else: return other.__class__.__radd__(other, self) elif type(other) == types.IntType or type(other) == types.FloatType: abstime = abstime + other * 86400.0 didadd=1 if not didadd: raise TypeError, "cannot add these two types" if abstime >= 86400.0: days = abstime / 86400.0 absdate = absdate + days abstime = abstime - (86400.0 * int(days)) #print "absdate, abstime = ", absdate, abstime elif abstime < 0.0: days = int(((-abstime - 1) / 86400.0)) + 1 #days = int(-abstime / 86400.0) absdate = absdate - days abstime = abstime + 86400.0 * int(days) if absdate < 1: raise RangeError, "underflow while adding" return DateTimeFromAbsDateTime(absdate, abstime) def __radd__(self, other): return DateTime.__add__(other, self) def __sub__(self, other): abstime=self.abstime absdate=self.absdate didsub=0 if type(other) == types.InstanceType: if other.__class__ == DateTimeDelta: abstime = abstime - other.seconds didsub = 1 elif other.__class__ == DateTime: absdate = absdate - other.absdate abstime = abstime - other.abstime return DateTimeDelta(absdate,0.0,0.0,abstime) elif type(other) == types.IntType or type(other) == types.FloatType: abstime = abstime - other * 86400.0; didsub=1 if not didsub: raise TypeError, "cannot subtract these two types" if abstime >= 86400.0: days = abstime / 86400.0 absdate = absdate + days abstime = abstime - (86400.0 * days) #print "absdate, abstime = ", absdate, abstime elif abstime < 0.0: #print "abstime < 0" days = int( ((-abstime - 1) / 86400.0) + 1) #days = -abstime / 86400.0 absdate = absdate - int(days) abstime = (1.0*abstime) + (86400.0 * days) #print "absdate, abstime", absdate, abstime if absdate < 1: raise RangeError, "underflow while adding" return DateTimeFromAbsDateTime(absdate, abstime) # Constants mjd0 = DateTime(1858, 11, 17) jdn0 = DateTime(-4713, 1, 1, 12, 0, 0.0) # Other DateTime constructors def DateTimeFromCOMDate(comdate): absdate = int(comdate) abstime = (comdate - float(absdate)) * 86400.0 if abstime < 0.0: abstime = -abstime absdate = absdate + 693594; dt = DateTimeFromAbsDateTime(absdate, abstime) dt.comdate = comdate return dt def DateTimeFromAbsDateTime(absdate, abstime): # Create the object without calling its default constructor dt = createEmptyObject(DateTime) # Init. the object abstime=1.0 * abstime if abstime < 0 and abstime > -0.001: abstime = 0.0 if not (absdate > 0): raise RangeError("absdate out of range (>0): %s" % absdate) if not (abstime >= 0.0 and abstime <= 86401.0): raise RangeError( "abstime out of range (0.0 - <86401.0): %s" % abstime) dt.absdate=absdate dt.abstime=abstime #calculate com date comdate = 1.0 * (dt.absdate - 693594) if comdate < 0.0: comdate = comdate - dt.abstime / 86400.0 else: comdate = comdate + dt.abstime / 86400.0 dt.comdate = comdate #calculate the date #print "absdate=", absdate year = int((1.0 * absdate) / 365.2425) #newApproximation: while 1: #print "year=", year yearoffset = year * 365 + year / 4 - year / 100 + year / 400 #print "yearoffset=", yearoffset #print "absdate=", absdate if yearoffset >= absdate: year = year - 1 #print "year = ", year continue #goto newApproximation year = year + 1 leap = (year % 4 == 0) and ((year % 100 != 0) or (year % 400 == 0)) dayoffset = absdate - yearoffset #print "dayoffset=", dayoffset if dayoffset > 365 and leap == 0: #print "dayoffset=", dayoffset continue #goto newApproximation monthoffset = month_offset[leap] for month in range(1, 13): if monthoffset[month] >= dayoffset: break dt.year = year dt.month = month dt.day = dayoffset - month_offset[leap][month-1] dt.day_of_week = (dt.absdate - 1) % 7 dt.day_of_year = dayoffset break #calculate the time inttime = int(abstime) hour = inttime / 3600 minute = (inttime % 3600) / 60 second = abstime - 1.0 * (hour*3600 + minute*60) dt.hour = hour; dt.minute = minute; dt.second = second; dt.days_in_month = days_in_month[leap][month - 1] dt.dst = -1 dt.tz = "???" dt.is_leapyear = leap dt.yearoffset = yearoffset return dt def now( time=time.time,float=float,localtime=time.localtime, round=round,int=int,DateTime=DateTime,floor=math.floor): ticks = time() Y,M,D,h,m,s = localtime(ticks)[:6] s = s + (ticks - floor(ticks)) return DateTime(Y,M,D,h,m,s) def utc( time=time.time,float=float,gmtime=time.gmtime, round=round,int=int,DateTime=DateTime,floor=math.floor): ticks = time() Y,M,D,h,m,s = gmtime(ticks)[:6] s = s + (ticks - floor(ticks)) return DateTime(Y,M,D,h,m,s) # Aliases Date = Timestamp = DateTime # XXX Calendars are not supported: def notSupported(*args,**kws): raise Error,'calendars are not supported by the Python version of mxDateTime' JulianDateTime = notSupported ### DateTimeDelta class class DateTimeDelta: def __init__(self, days=0, hours=0, minutes=0, seconds=0): seconds = seconds + (days * 86400.0 + hours * 3600.0 + minutes * 60.0) self.seconds = seconds if seconds < 0.0: seconds = -seconds day = long(seconds / 86400.0) seconds = seconds - (86400.0 * day) wholeseconds = int(seconds) hour = wholeseconds / 3600 minute = (wholeseconds % 3600) / 60 second = seconds - (hour * 3600.0 + minute * 60.0) self.day = day self.hour = hour self.minute = minute self.second = second seconds=self.seconds self.minutes = seconds / 60.0 self.hours = seconds / 3600.0 self.days = seconds / 86400.0 def __str__(self): if self.day != 0: if self.seconds >= 0.0: r="%s:%02d:%02d:%05.2f" % ( self.day, self.hour, self.minute, self.second) else: r="-%s:%02d:%02d:%05.2f" % ( self.day, self.hour, self.minute, self.second) else: if self.seconds >= 0.0: r="%02d:%02d:%05.2f" % (self.hour, self.minute, self.second) else: r="-%02d:%02d:%05.2f" % (self.hour, self.minute, self.second) return r def absvalues(self): days=self.seconds / 86400 seconds=self.seconds - (days * 86400.0) return days, seconds def tuple(self): return (self.day, self.hour, self.minute, self.second) def strftime(self, format_string): raise NotImplementedError def __int__(self): return int(self.seconds) def __float__(self): return self.seconds def __cmp__(self, other, accuracy=0.0): if (type(other) == types.InstanceType and other.__class__ == DateTimeDelta): diff=self.seconds - other.seconds if abs(diff) > accuracy: if diff > 0: return 1 return -1 elif type(other) == types.FloatType: diff=self.seconds - other if abs(diff) > accuracy: if diff > 0: return 1 return -1 elif type(other) == types.IntType: diff=self.seconds - other if abs(diff) > accuracy: if diff > 0: return 1 return -1 return 0 def __getattr__(self, attr): seconds=self.__dict__['seconds'] if attr in ('hour', 'minute', 'second', 'day'): if seconds >= 0.0: return self.__dict__[attr] else: return -self.__dict__[attr] else: try: return self.__dict__[attr] except: raise AttributeError, attr def __div__(self, other): if type(other) in (types.IntType, types.FloatType): return DateTimeDelta(0.0,0.0,0.0,self.seconds / other) elif (type(other) == types.InstanceType and isinstance(other,DateTimeDelta)): return DateTimeDelta(0.0,0.0,0.0,self.seconds / other.seconds) raise TypeError, "bad operand types for /" def __mul__(self, other): if type(other) == types.IntType or type(other) == types.FloatType: return DateTimeDelta(0.0,0.0,0.0,self.seconds * other) else: #print "type", type(other) raise TypeError, "cannot multiply these two types" def __rmul__(self, other): return self.__mul__(other) def __neg__(self): return DateTimeDelta(0.0,0.0,0.0,-self.seconds) def __repr__(self): if self.day != 0: if self.seconds >= 0.0: strval="%s:%02d:%02d:%05.2f" % (self.day, self.hour, self.minute, self.second) else: strval="-%s:%02d:%02d:%05.2f" % (self.day, self.hour, self.minute, self.second) else: if self.seconds >= 0.0: strval="%02d:%02d:%05.2f" % (self.hour, self.minute, self.second) else: strval="-%02d:%02d:%05.2f" % (self.hour, self.minute, self.second) return "" % (strval, id(self)) def __abs__(self): if self.seconds < 0: return -self return self def __nonzero__(self): return self.seconds != 0.0 def __add__(self, other): if type(other) == types.InstanceType: if isinstance(other,DateTime): return other + self elif isinstance(other,DateTimeDelta): return DateTimeDelta(0.0,0.0,0.0,self.seconds + other.seconds) # What about __radd__ ? # Other DateTimeDelta constructors def TimeDelta(hour=0.0, minute=0.0, second=0.0): return DateTimeDelta(0.0, hours, minutes, seconds) Time=TimeDelta def DateTimeDeltaFromSeconds(seconds): return DateTimeDelta(0.0,0.0,0.0,seconds) def DateTimeDeltaFromDays(days): return DateTimeDelta(days) ### Types DateTimeType = DateTime DateTimeDeltaType = DateTimeDelta ### Functions def cmp(a,b,acc): if isinstance(a,DateTime) and isinstance(b,DateTime): diff = a.absdays - b.absdays if (diff >= 0 and diff <= acc) or (diff < 0 and -diff <= acc): return 0 elif diff < 0: return 1 else: return -1 elif isinstance(a,DateTimeDelta) and isinstance(b,DateTimeDelta): diff = a.days - b.days if (diff >= 0 and diff <= acc) or (diff < 0 and -diff <= acc): return 0 elif diff < 0: return 1 else: return -1 else: raise TypeError,"objects must be DateTime[Delta] instances" egenix-mx-base-3.2.7/mx/DateTime/mxDateTime/mxh.h0000664000175000017500000000320212133021412021322 0ustar lemburglemburg#ifndef MXH_H #define MXH_H /* mxh.h -- Generic header file for all mx Extenstions This file should be included by every mx Extension header file and the C file. Copyright (c) 2000, Marc-Andre Lemburg; mailto:mal@lemburg.com Copyright (c) 2000-2013, eGenix.com Software GmbH; mailto:info@egenix.com See the documentation for further copyright information or contact the author. */ /* Macros to control export and import of DLL symbols. We use our own definitions since Python's don't allow specifying both imported and exported symbols at the same time; these defines haven't been thoroughly tested yet, patches are most welcome :-) */ /* Macro to "mark" a symbol for DLL export */ #if (defined(_MSC_VER) && _MSC_VER > 850 \ || defined(__MINGW32__) || defined(__CYGWIN) || defined(__BEOS__)) # ifdef __cplusplus # define MX_EXPORT(type) extern "C" type __declspec(dllexport) # else # define MX_EXPORT(type) extern type __declspec(dllexport) # endif #elif defined(__WATCOMC__) # define MX_EXPORT(type) extern type __export #elif defined(__IBMC__) # define MX_EXPORT(type) extern type _Export #else # define MX_EXPORT(type) extern type #endif /* Macro to "mark" a symbol for DLL import */ #if defined(__BORLANDC__) # define MX_IMPORT(type) extern type __import #elif (defined(_MSC_VER) && _MSC_VER > 850 \ || defined(__MINGW32__) || defined(__CYGWIN) || defined(__BEOS__)) # ifdef __cplusplus # define MX_IMPORT(type) extern "C" type __declspec(dllimport) # else # define MX_IMPORT(type) extern type __declspec(dllimport) # endif #else # define MX_IMPORT(type) extern type #endif /* EOF */ #endif egenix-mx-base-3.2.7/mx/DateTime/mxDateTime/mxpyapi.h0000664000175000017500000003356612133300665022247 0ustar lemburglemburg#ifndef MXPYAPI_H #define MXPYAPI_H /* mxpyapi.h This header file includes some new APIs that are not available in older API versions, yet are used by the mx-Extensions. Copyright (c) 2000, Marc-Andre Lemburg; mailto:mal@lemburg.com Copyright (c) 2000-2013, eGenix.com Software GmbH; mailto:info@egenix.com */ /* Emulate PY_VERSION_HEX for older Python versions. */ #ifndef PY_VERSION_HEX # if PYTHON_API_VERSION == 1007 # define PY_VERSION_HEX 0x010500F0 # endif # if PYTHON_API_VERSION == 1006 # define PY_VERSION_HEX 0x010400F0 # endif # if PYTHON_API_VERSION < 1006 # define PY_VERSION_HEX 0 # endif #endif #ifdef __cplusplus extern "C" { #endif /* ---------------------------------------------------------------- Python 2.7.4 ---------------------------------------------------------------- */ #if PY_VERSION_HEX >= 0x02070400 && PY_VERSION_HEX < 0x02070500 /* Python 2.7.4 has a bug that causes Py_DECREF() to fail for dictionaries in module cleanup routines. See http://bugs.python.org/issue17703 */ #define mxPy_DECREF_Unsafe_AtExit() 1 #else /* Apply a runtime check */ #define mxPy_DECREF_Unsafe_AtExit() \ (strncmp(Py_GetVersion(), "2.7.4", 5) == 0) #endif /* ---------------------------------------------------------------- Python 2.7 and above: ---------------------------------------------------------------- */ #if PY_VERSION_HEX >= 0x02070000 /* Python 2.7 introduces the backported memoryview object */ #define HAVE_PYTHON_MEMORYVIEW #else #endif /* ---------------------------------------------------------------- Python 2.6 and above: ---------------------------------------------------------------- */ #if PY_VERSION_HEX >= 0x02060000 /* Python 2.6 introduces new buffer interface slots based on the Py_buffer interface. */ #define HAVE_PYTHON_PY_BUFFER #else #endif /* ---------------------------------------------------------------- Python 2.5 and above: ---------------------------------------------------------------- */ #if PY_VERSION_HEX >= 0x02050000 /* Parser marker */ #define Py_SSIZE_T_PARSERMARKER "n" #else /* Python 2.5 introduced a new type for index integers which is not available in earlier versions. Unfortunately, the new type has 64 bits on 64-bit architectures like AMD64, whereas integers still have 32 bits, which causes problems with output parameters. Along with the new type a few type slots were changed and a new parser marker introduced. */ #define Py_ssize_t int /* Parser marker */ #define Py_SSIZE_T_PARSERMARKER "i" /* Integer APIs */ #define PyInt_FromSize_t(x) PyInt_FromLong((long)(x)) #define PyInt_FromSsize_t(x) PyInt_FromLong((long)(x)) #define PyInt_AsSsize_t(x) ((Py_ssize_t)PyInt_AsLong(x)) #endif /* ---------------------------------------------------------------- Python 2.4 and above: ---------------------------------------------------------------- */ #if PY_VERSION_HEX >= 0x02040000 #else #endif /* ---------------------------------------------------------------- Python 2.3 and above: ---------------------------------------------------------------- */ #if PY_VERSION_HEX >= 0x02030000 #else /* These were introduced in Python 2.3: */ # define PY_LONG_LONG LONG_LONG /* Boolean APIs */ #define PyBool_FromLong(x) PyInt_FromLong((long)(x)?1:0) #endif /* ---------------------------------------------------------------- Python 2.2 and above: ---------------------------------------------------------------- */ #if PY_VERSION_HEX >= 0x02020000 # define HAVE_SUBCLASSABLE_TYPES 1 # define HAVE_INTERPRETER_DLOPENFLAGS 1 #else /* These were introduced in Python 2.2: */ # define PyString_CheckExact PyString_Check # define PyInt_CheckExact PyInt_Check # define PyFloat_CheckExact PyFloat_Check # define PyLong_CheckExact PyLong_Check # define PyExc_StopIteration PyExc_IndexError /* Not needed in Python 2.1 and below, so simply ignore the API */ # define PyType_Ready(x) #endif /* ---------------------------------------------------------------- Python 1.6 and 2.0 only: ---------------------------------------------------------------- */ /* Disabled: we don't support Python 1.6 and don't have a need for this API in any of the mx Tools (yet). */ #if 0 #if PY_VERSION_HEX >= 0x01060000 && PY_VERSION_HEX < 0x02010000 static PyObject * PyObject_Unicode(PyObject *v) { PyObject *res; if (v == NULL) res = PyString_FromString(""); else if (PyUnicode_Check(v)) { Py_INCREF(v); return v; } else if (PyString_Check(v)) res = v; else if (v->ob_type->tp_str != NULL) res = (*v->ob_type->tp_str)(v); else { PyObject *func; if (!PyInstance_Check(v) || (func = PyObject_GetAttrString(v, "__str__")) == NULL) { PyErr_Clear(); res = PyObject_Repr(v); } else { res = PyEval_CallObject(func, (PyObject *)NULL); Py_DECREF(func); } } if (res == NULL) return NULL; if (!PyUnicode_Check(res)) { PyObject* str; str = PyUnicode_FromObject(res); Py_DECREF(res); if (str) res = str; else return NULL; } return res; } #endif #endif /* ---------------------------------------------------------------- Python 2.0 alpha + betas: ---------------------------------------------------------------- */ #if PY_VERSION_HEX >= 0x02000000 && PY_VERSION_HEX < 0x020000F0 # if defined(PyBuffer_Check) && !defined(HAVE_PYTHON_BUFFEROBJECTS) # define HAVE_PYTHON_BUFFEROBJECTS # endif #ifndef Py_PROTO # define Py_PROTO(args) args #endif #endif /* ---------------------------------------------------------------- Python 1.6 and later: ---------------------------------------------------------------- */ #if PY_VERSION_HEX >= 0x01060000 #if defined(PyUnicode_Check) && !defined(HAVE_UNICODE) # define HAVE_UNICODE #endif #endif #if PY_VERSION_HEX >= 0x02020000 #if defined(HAVE_UNICODE) && !defined(Py_USING_UNICODE) # undef HAVE_UNICODE #endif #endif #ifndef HAVE_UNICODE # undef PyUnicode_Check # define PyUnicode_Check(obj) 0 #endif /* ---------------------------------------------------------------- Python < 1.6: ---------------------------------------------------------------- */ #if PY_VERSION_HEX < 0x01060000 #if !defined(PyObject_DEL) # define PyObject_DEL(x) free(x) # define PyObject_Del(x) free(x) #endif #endif /* ---------------------------------------------------------------- Python >= 1.5.2: ---------------------------------------------------------------- */ #if PY_VERSION_HEX >= 0x010502F0 # if defined(PyBuffer_Check) && !defined(HAVE_PYTHON_BUFFEROBJECTS) # define HAVE_PYTHON_BUFFEROBJECTS # endif #endif /* ---------------------------------------------------------------- Python >= 1.5.2 and prior to 2.0a1 ---------------------------------------------------------------- */ #if PY_VERSION_HEX >= 0x010502F0 && PY_VERSION_HEX < 0x02000000 /* Takes an arbitrary object which must support the (character, single segment) buffer interface and returns a pointer to a read-only memory location useable as character based input for subsequent processing. buffer and buffer_len are only set in case no error occurrs. Otherwise, -1 is returned and an exception set. */ static int PyObject_AsCharBuffer(PyObject *obj, const char **buffer, int *buffer_len) { PyBufferProcs *pb = obj->ob_type->tp_as_buffer; const char *pp; int len; if ( pb == NULL || pb->bf_getcharbuffer == NULL || pb->bf_getsegcount == NULL ) { PyErr_SetString(PyExc_TypeError, "expected a character buffer object"); goto onError; } if ( (*pb->bf_getsegcount)(obj,NULL) != 1 ) { PyErr_SetString(PyExc_TypeError, "expected a single-segment buffer object"); goto onError; } len = (*pb->bf_getcharbuffer)(obj,0,&pp); if (len < 0) goto onError; *buffer = pp; *buffer_len = len; return 0; onError: return -1; } /* Same as PyObject_AsCharBuffer() except that this API expects (readable, single segment) buffer interface and returns a pointer to a read-only memory location which can contain arbitrary data. buffer and buffer_len are only set in case no error occurrs. Otherwise, -1 is returned and an exception set. */ static int PyObject_AsReadBuffer(PyObject *obj, const void **buffer, int *buffer_len) { PyBufferProcs *pb = obj->ob_type->tp_as_buffer; void *pp; int len; if ( pb == NULL || pb->bf_getreadbuffer == NULL || pb->bf_getsegcount == NULL ) { PyErr_SetString(PyExc_TypeError, "expected a readable buffer object"); goto onError; } if ( (*pb->bf_getsegcount)(obj,NULL) != 1 ) { PyErr_SetString(PyExc_TypeError, "expected a single-segment buffer object"); goto onError; } len = (*pb->bf_getreadbuffer)(obj,0,&pp); if (len < 0) goto onError; *buffer = pp; *buffer_len = len; return 0; onError: return -1; } /* Takes an arbitrary object which must support the (writeable, single segment) buffer interface and returns a pointer to a writeable memory location in buffer of size buffer_len. buffer and buffer_len are only set in case no error occurrs. Otherwise, -1 is returned and an exception set. */ static int PyObject_AsWriteBuffer(PyObject *obj, void **buffer, int *buffer_len) { PyBufferProcs *pb = obj->ob_type->tp_as_buffer; void*pp; int len; if ( pb == NULL || pb->bf_getwritebuffer == NULL || pb->bf_getsegcount == NULL ) { PyErr_SetString(PyExc_TypeError, "expected a writeable buffer object"); goto onError; } if ( (*pb->bf_getsegcount)(obj,NULL) != 1 ) { PyErr_SetString(PyExc_TypeError, "expected a single-segment buffer object"); goto onError; } len = (*pb->bf_getwritebuffer)(obj,0,&pp); if (len < 0) goto onError; *buffer = pp; *buffer_len = len; return 0; onError: return -1; } #endif /* Python Version in [1.5.2b2, 2.0) */ /* ---------------------------------------------------------------- Python 1.5.2b1 and older: ---------------------------------------------------------------- */ #if PY_VERSION_HEX <= 0x010502B1 /* These are missing from PC/python_nt.def and thus didn't get included in python1.5.lib on Windows platforms. */ #ifdef MS_WIN32 # define PyString_InternInPlace(x) # define PyString_InternFromString(x) PyString_FromString(x) #endif #endif /* Python Version <= 1.5.2b1 */ /* ---------------------------------------------------------------- Python 1.5.2a2 and older: ---------------------------------------------------------------- */ #if PY_VERSION_HEX <= 0x010502A2 extern long PyOS_strtol Py_PROTO((const char *, char **, int)); #endif /* Python Version <= 1.5.2a2 */ /* ---------------------------------------------------------------- Python 1.5.2a1 and older: ---------------------------------------------------------------- */ #if PY_VERSION_HEX <= 0x010502A1 #ifndef PyList_SET_ITEM # define PyList_SET_ITEM(l,i,w) PyList_GET_ITEM(l,i) = w #endif #endif /* Python Version < 1.5.2a1 */ /* ---------------------------------------------------------------- Prior to Python 1.5: ---------------------------------------------------------------- */ #if PY_VERSION_HEX < 0x010500F0 /* New in Python1.5: */ # undef PyString_AS_STRING # define PyString_AS_STRING(op) (((PyStringObject *)(op))->ob_sval) # define PyString_GET_SIZE(op) (((PyStringObject *)(op))->ob_size) # define PyTuple_GET_SIZE(op) (((PyTupleObject *)(op))->ob_size) # define PyList_GET_SIZE(op) (((PyListObject *)(op))->ob_size) /* Changed since 1.4 */ # undef PyList_GET_ITEM # define PyList_GET_ITEM(op, i) (((PyListObject *)(op))->ob_item[i]) # undef PyInt_AS_LONG # define PyInt_AS_LONG(op) (((PyIntObject *)(op))->ob_ival) # undef PyFloat_AS_DOUBLE # define PyFloat_AS_DOUBLE(op) (((PyFloatObject *)(op))->ob_fval) /* This function is taken from error.c in Python 1.5... Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, The Netherlands. All Rights Reserved Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation, and that the names of Stichting Mathematisch Centrum or CWI or Corporation for National Research Initiatives or CNRI not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. While CWI is the initial source for this software, a modified version is made available by the Corporation for National Research Initiatives (CNRI) at the Internet address ftp://ftp.python.org. STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifdef HAVE_STDARG_PROTOTYPES PyObject * PyErr_Format(PyObject *exception, const char *format, ...) #else PyObject * PyErr_Format(exception, format, va_alist) PyObject *exception; const char *format; va_dcl #endif { va_list vargs; char buffer[500]; /* Caller is responsible for limiting the format */ #ifdef HAVE_STDARG_PROTOTYPES va_start(vargs, format); #else va_start(vargs); #endif vsprintf(buffer, format, vargs); PyErr_SetString(exception, buffer); return NULL; } /* Python 1.5 uses instances as exceptions, the 1.4 API only knows about strings. */ #define PyErr_NewException(name,base,dict) PyString_FromString(fullname); /* Missing from rename2.h in Python 1.4 */ #ifndef PyVarObject # define PyVarObject varobject #endif #endif /* Python Version < 1.5 */ #ifdef __cplusplus } #endif /* EOF */ #endif egenix-mx-base-3.2.7/mx/DateTime/mxDateTime/mxstdlib.h0000664000175000017500000002612712133021413022370 0ustar lemburglemburg#ifndef MXSTDLIB_H #define MXSTDLIB_H /* Standard stuff I use often -- not Python specific Copyright (c) 2000, Marc-Andre Lemburg; mailto:mal@lemburg.com Copyright (c) 2000-2013, eGenix.com Software GmbH; mailto:info@egenix.com See the documentation for further copyright information or contact the author. */ /* Standard includes */ #include #include #include #include #include #include /* Limits */ #ifdef HAVE_LIMITS_H # include #else # ifndef INT_MAX # define INT_MAX 2147483647 # endif # ifndef LONG_MAX # define LONG_MAX INT_MAX # endif #endif /* Disable a few MS VC++ warnings that were introduced in VS 2005, e.g. warning C4996: 'getenv': This function or variable may be unsafe. Consider using _dupenv_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. Note that #define _CRT_SECURE_NO_WARNINGS 1 does not work for some reason. You have to use the #pragma warning() to disable warnings inside a header file. */ #if defined(_MSC_VER) && (_MSC_VER >= 1400) # pragma warning(disable:4996) #endif /* --- My own macros for memory allocation... --------------------------- */ /* Define this macro if the code should use C malloc */ /* #define MAL_USE_C_MALLOC */ /* Define this macro if the code should use Python's pymalloc */ /* #define MAL_USE_PYMALLOC */ /* Define this macro if the code should use pymalloc and uses the cnew()/cnewstruct() macros. This is needed to only enable the helper functions when using those macros in pymalloc mode. */ /* #define MAL_USING_CNEW */ /* Decide which variant to use, if no explicit choice was made: C malloc or pymalloc */ #ifdef MAL_USE_C_MALLOC /* Force use of C malloc */ #elif !defined(MAL_USE_PYMALLOC) && defined (PYTHON_API_VERSION) /* Default to using the Python pymalloc in case we're compiling a Python extension */ # define MAL_USE_PYMALLOC #endif #ifndef MAL_USE_PYMALLOC /* --- Use C malloc for memory allocation --- */ # ifdef MAL_MEM_DEBUG /* Include debug information for tracing memory leaks */ # define newstruct(x) \ (mxDebugPrintf("* malloc for struct "#x" (%s:%i)\n",__FILE__,__LINE__),\ (x *)malloc(sizeof(x))) # define cnewstruct(x) \ (mxDebugPrintf("* calloc for struct "#x" (%s:%i)\n",c,__FILE__,__LINE__),\ (x *)calloc(sizeof(x),1)) # define new(x,c) \ (mxDebugPrintf("* malloc for "#c"=%i '"#x"'s (%s:%i)\n",c,__FILE__,__LINE__),\ (x *)malloc(sizeof(x)*(c))) # define cnew(x,c) \ (mxDebugPrintf("* calloc for "#c"=%i '"#x"'s (%s:%i)\n",c,__FILE__,__LINE__),\ (x *)calloc((c),sizeof(x))) # define resize(var,x,c) \ (mxDebugPrintf("* realloc array "#var" ("#x") at %X to size "#c"=%i (%s:%i)\n",var,c,__FILE__,__LINE__),\ (x *)realloc((void*)(var),sizeof(x)*(c))) # define varresize(var,x,bytes) \ (mxDebugPrintf("* realloc var "#var" ("#x") at %X to %i bytes (%s:%i)\n",var,bytes,__FILE__,__LINE__),\ (x *)realloc((void*)(var),(bytes))) # define free(x) \ (mxDebugPrintf("* freeing "#x" at %X (%s:%i)\n",x,__FILE__,__LINE__),\ free((void*)(x))) # else /* Non-debug versions of the macros */ # define newstruct(x) ((x *)malloc(sizeof(x))) # define cnewstruct(x) ((x *)calloc(sizeof(x),1)) # define new(x,c) ((x *)malloc(sizeof(x)*(c))) # define cnew(x,c) ((x *)calloc((c),sizeof(x))) # define resize(var,x,c) ((x *)realloc((void*)(var),sizeof(x)*(c))) # define varresize(var,x,bytes) ((x *)realloc((void*)(var),(bytes))) # define free(x) (free((void*)(x))) # endif #else /* --- Use Python pymalloc for memory allocation --- */ # ifdef MAL_USING_CNEW /* Helper needed since Python doesn't define a calloc() interface. */ static void *mx_PyObject_CALLOC(register size_t size) { register void *mem; if (size == 0) return NULL; mem = PyObject_MALLOC(size); if (mem) memset(mem, 0, size); return mem; } # endif # ifndef MAL_MEM_DEBUG /* Non-debug versions of the macros */ # define newstruct(x) ((x *)PyObject_MALLOC(sizeof(x))) # ifdef MAL_USING_CNEW # define cnewstruct(x) ((x *)mx_PyObject_CALLOC(sizeof(x))) # endif # define new(x,c) ((x *)PyObject_MALLOC(sizeof(x)*(c))) # ifdef MAL_USING_CNEW # define cnew(x,c) ((x *)mx_PyObject_CALLOC(sizeof(x)*(c))) # endif # define resize(var,x,c) ((x *)PyObject_REALLOC((void*)(var),sizeof(x)*(c))) # define varresize(var,x,bytes) ((x *)PyObject_REALLOC((void*)(var),(bytes))) # define free(x) (PyObject_FREE((void*)(x))) # else /* Debug versions of the macros */ # define newstruct(x) \ (mxDebugPrintf("* malloc for struct "#x" (%s:%i)\n",__FILE__,__LINE__), \ (x *)PyObject_MALLOC(sizeof(x))) # ifdef MAL_USING_CNEW # define cnewstruct(x) \ (mxDebugPrintf("* calloc for struct "#x" (%s:%i)\n",c,__FILE__,__LINE__), \ ((x *)mx_PyObject_CALLOC(sizeof(x)))) # endif # define new(x,c) \ (mxDebugPrintf("* malloc for "#c"=%i '"#x"'s (%s:%i)\n",c,__FILE__,__LINE__), \ ((x *)PyObject_MALLOC(sizeof(x)*(c)))) # ifdef MAL_USING_CNEW # define cnew(x,c) \ (mxDebugPrintf("* calloc for "#c"=%i '"#x"'s (%s:%i)\n",c,__FILE__,__LINE__), \ ((x *)mx_PyObject_CALLOC(sizeof(x)*(c)))) # endif # define resize(var,x,c) \ (mxDebugPrintf("* realloc array "#var" ("#x") at %X to size "#c"=%i (%s:%i)\n",var,c,__FILE__,__LINE__), \ ((x *)PyObject_REALLOC((void*)(var),sizeof(x)*(c)))) # define varresize(var,x,bytes) \ (mxDebugPrintf("* realloc var "#var" ("#x") at %X to %i bytes (%s:%i)\n",var,bytes,__FILE__,__LINE__), \ ((x *)PyObject_REALLOC((void*)(var),(bytes)))) # define free(x) \ (mxDebugPrintf("* freeing "#x" at %X (%s:%i)\n",x,__FILE__,__LINE__), \ (PyObject_FREE((void*)(x)))) # endif #endif /* --- Debugging output ------------------------------------------------- */ /* Use the flag MAL_DEBUG to enable debug processing. The flag MAL_DEBUG_WITH_PYTHON can be used to indicate that the object file will be linked with Python, so we can use Python APIs for the debug processing here. */ #ifdef MAL_DEBUG_WITH_PYTHON # ifndef PYTHON_API_VERSION # error "mx.h must be included when compiling with MAL_DEBUG_WITH_PYTHON" # endif # ifndef MAL_DEBUG # define MAL_DEBUG # endif #else # if defined(PYTHON_API_VERSION) && defined(MAL_DEBUG) # define MAL_DEBUG_WITH_PYTHON # endif #endif /* Indicator for the availability of these interfaces: */ #define HAVE_MAL_DEBUG /* Name of the environment variable defining the log file name to be used: */ #ifndef MAL_DEBUG_OUTPUTFILE_ENV_VARIABLE # define MAL_DEBUG_OUTPUTFILE_ENV_VARIABLE "mxLogFile" #endif /* File name to be used for debug logging (each object file using this facility may set its own logging file) if no environment variable is set: */ #ifndef MAL_DEBUG_OUTPUTFILE # define MAL_DEBUG_OUTPUTFILE "mx.log" #endif /* Name of the environment variable defining the log file prefix to be used (e.g. to direct all log files into a separate directory): */ #ifndef MAL_DEBUG_OUTPUTFILEPREFIX_ENV_VARIABLE # define MAL_DEBUG_OUTPUTFILEPREFIX_ENV_VARIABLE "mxLogFileDir" #endif /* File name prefix to be used for log files, if no environment variable is set: */ #ifndef MAL_DEBUG_OUTPUTFILEPREFIX # define MAL_DEBUG_OUTPUTFILEPREFIX "" #endif /* Log id to be used */ #ifndef MAL_DEBUG_LOGID # define MAL_DEBUG_LOGID "New Log Session" #endif /* Debug printf() API Output is written to a log file or stream. If the output file is not yet open, the function will try to open the file as defined by the environment or the program defines. The file remains open until the program terminates. Subsequent changes to the environment are not taken into account. The output file is deduced in the following way: 1. get the filename from the environment, revert to the predefined value 2. get the filename prefix from the environment, revert to the predefined value 3. if filename is one of "stderr" or "stdout" use the native streams for output; otherwise try to open fileprefix + filename reverting to stderr in case this fails. */ static int mxDebugPrintf(const char *format, ...) { va_list args; static FILE *mxDebugPrintf_file; if (!mxDebugPrintf_file) { time_t now; char *filename,*fileprefix; now = time(NULL); filename = getenv(MAL_DEBUG_OUTPUTFILE_ENV_VARIABLE); if (!filename) filename = MAL_DEBUG_OUTPUTFILE; fileprefix = getenv(MAL_DEBUG_OUTPUTFILEPREFIX_ENV_VARIABLE); if (!fileprefix) fileprefix = MAL_DEBUG_OUTPUTFILEPREFIX; if (strcmp(filename,"stdout") == 0) mxDebugPrintf_file = stdout; else if (strcmp(filename,"stderr") == 0) mxDebugPrintf_file = stderr; else { char logfile[512]; if (strlen(fileprefix) + strlen(filename) > sizeof(logfile) - 1) { /* Hack to shut up "cc -Wall" warning that this function is not used... */ static void *mxDebugPrintf_used; mxDebugPrintf_used = (void *)mxDebugPrintf; /* Default to stderr in case the log file name doesn't fit the available buffer */ mxDebugPrintf_file = stderr; fprintf(mxDebugPrintf_file, "\n*** Log file name too long: '%s%s'; " "using stderr\n", fileprefix, filename); } else { /* We made sure that there is enough room in logfile, so can use the unlimited APIs here */ strcpy(logfile, fileprefix); strcat(logfile, filename); mxDebugPrintf_file = fopen(logfile,"ab"); if (!mxDebugPrintf_file) { /* Default to stderr in case the log file cannot be opened */ mxDebugPrintf_file = stderr; fprintf(mxDebugPrintf_file, "\n*** Failed to open log file '%s'; " "using stderr\n",logfile); } } } fprintf(mxDebugPrintf_file, "\n--- "MAL_DEBUG_LOGID" --- %s\n", ctime(&now)); } va_start(args,format); vfprintf(mxDebugPrintf_file,format,args); fflush(mxDebugPrintf_file); va_end(args); return 1; } #ifdef MAL_DEBUG # ifdef MAL_DEBUG_WITH_PYTHON /* Use the Python debug flag to enable debugging output (python -d) */ # define DPRINTF if (Py_DebugFlag) mxDebugPrintf # define IF_DEBUGGING if (Py_DebugFlag) # define DEBUGGING (Py_DebugFlag > 0) # else /* Always output debugging information */ # define DPRINTF mxDebugPrintf # define IF_DEBUGGING # define DEBUGGING (1) # endif #else # ifndef _MSC_VER /* This assumes that you are using an optimizing compiler which eliminates the resulting debug code. */ # define DPRINTF if (0) mxDebugPrintf # define IF_DEBUGGING if (0) # define DEBUGGING (0) # else /* MSVC doesn't do a good job here, so we use a different approach. */ # define DPRINTF 0 && mxDebugPrintf # define IF_DEBUGGING if (0) # define DEBUGGING (0) # endif #endif /* --- Misc ------------------------------------------------------------- */ /* The usual bunch... */ #ifndef max # define max(a,b) ((a>b)?(a):(b)) #endif #ifndef min # define min(a,b) ((a 0: print ('now() resolution measured as < %f microseconds' % (min_t_diff * 1e6)) else: print 'now() resolution cannot be determined' print print 'Basic constructors ok.' ### String format # Negative years t = DateTime(-1,1,1,12,34,56.78) assert str(t) == '-0001-01-01 12:34:56.78' # Rounding t = DateTime(2007,1,1,12,34,56.78) assert str(t) == '2007-01-01 12:34:56.78' t = DateTime(2011,1,1,12,34,3.42) # Note: 3.42 is stored as 3.4199999999999999 assert str(t) == '2011-01-01 12:34:03.42', str(t) assert repr(t).find( '2011-01-01 12:34:03.42') > 0 assert t.date == '2011-01-01' assert t.time == '12:34:03.42' t = DateTime(2011,1,1,12,34,3.425) # Note: 3.425 is stored as 3.4249999999999998 assert str(t) == '2011-01-01 12:34:03.43', str(t) assert repr(t).find( '2011-01-01 12:34:03.43') > 0 assert t.date == '2011-01-01' assert t.time == '12:34:03.43' t = DateTime(2011,1,1,12,34,56.1147) # Note: 56.1147 is stored as 56.114699999999999 assert str(t) == '2011-01-01 12:34:56.11', str(t) assert repr(t).find( '2011-01-01 12:34:56.11') > 0 assert t.date == '2011-01-01' assert t.time == '12:34:56.11' t = DateTime(2011,1,1,12,34,56.124449) # Note: 56.124449 is stored as 56.124448999999998 assert str(t) == '2011-01-01 12:34:56.12', str(t) # Rounding at the end of a minute t = DateTimeFromAbsDateTime(733407, 86399) assert str(t) == '2008-12-31 23:59:59.00' t = DateTimeFromAbsDateTime(733407, 86399.9) assert str(t) == '2008-12-31 23:59:59.90' t = DateTimeFromAbsDateTime(733407, 86399.99) assert str(t) == '2008-12-31 23:59:59.99' assert repr(t).find('2008-12-31 23:59:59.99') > 0 t = DateTimeFromAbsDateTime(733407, 86399.995) assert str(t) == '2008-12-31 23:59:59.99' assert repr(t).find('2008-12-31 23:59:59.99') > 0 t = DateTimeFromAbsDateTime(733407, 86399.999) assert str(t) == '2008-12-31 23:59:59.99' assert repr(t).find('2008-12-31 23:59:59.99') > 0 print 'String format ok.' ### Python Number protocol: t1 = Date(1997,12,31) t2 = Date(1997,12,30) assert int(t1) == int(t1.ticks()) d1 = t1 - t2 assert int(d1) == 86400 d2 = t2 - t1 assert int(d2) == -86400 try: t1 + t2 except TypeError: pass else: raise TypeError('DateTime+DateTime should not work') try: t2 * t1 except TypeError: pass else: raise TypeError('DateTime*DateTime should not work') try: t2 / t1 except TypeError: pass else: raise TypeError('DateTime/DateTime should not work') print 'Number protocol ok.' ### Deltas # Constructors assert DateTimeDelta(2,1,-1,-3).tuple() == (2, 0, 58, 57.0) assert DateTimeDelta(2,0,-1,-3).tuple() == (1, 23, 58, 57.0) # .rebuild() t = DateTimeDelta(2, 12, 13, 14) assert id(t) != id(t.rebuild()) assert t.rebuild(day=2000) == DateTimeDelta(2000, 12,13,14) assert t.rebuild(hour=9) == DateTimeDelta(2, 9, 13, 14) assert t.rebuild(minute=20) == DateTimeDelta(2, 12, 20, 14) assert t.rebuild(second=33) == DateTimeDelta(2, 12, 13, 33) assert t.rebuild(second=35.5) == DateTimeDelta(2, 12, 13, 35.5) assert t.rebuild(hour=20, second=10) == DateTimeDelta(2, 20, 13, 10) # DateTime calculations assert DateTime(1998,1,9) + DateTimeDelta(-1) == DateTime(1998,1,8) assert DateTime(1998,1,9) - DateTimeDelta(1) == DateTime(1998,1,8) assert DateTime(1998,1,9) - DateTimeDelta(1.5) == DateTime(1998,1,7,12,0,0) assert DateTime(1998,1,9) - DateTime(1969,4,6) == DateTimeDelta(10505) assert DateTime(2000,12,31) + DateTimeDelta(1) == DateTime(2001, 1, 1) assert DateTime(2000,12,31) + DateTimeDelta(2) == DateTime(2001, 1, 2) # Integer calculations assert DateTime(2000,12,31) + 1 == DateTime(2001, 1, 1) assert DateTime(2000,12,31) + 2 == DateTime(2001, 1, 2) # DateTimeDelta calculations assert DateTimeDelta(10000) / (DateTimeDelta(10000) * 0.5) == 2.0 # Attributes a = Date(2000,11,9) b = Date(2000,11,10) d1 = b - a d2 = a - b assert d1.seconds == 86400.0 assert d1.day == 1 assert d1.hour == 0 assert d1.second == 0 assert d2.seconds == -86400.0 # Number protocol assert int(d1) == 86400 assert int(d2) == -86400 assert int(d1 * 3) == 86400 * 3 assert int(3 * d1) == 86400 * 3 assert int(d1 + d2) == 0 assert int(d2 + d1) == 0 assert int(d1 - d2) == 86400 * 2, d1 - d2 assert int(d2 - d1) == -86400 * 2, d2 - d1 try: d2 * d1 except TypeError: pass else: raise TypeError('DateTimeDelta*DateTimeDelta should not work') print 'Deltas ok.' print ### UTC vs. local time t = DateTime(2000,11,17) print 'UTC -> local time -> UTC' for i in range(24*365): x = t + 0.041666*i try: try: assert cmp(x.gmtime().localtime(), x, 0.001) == 0 except AssertionError: print ' Problem (local time) -- DST switching time ?:' print ' %s -> %s -> %s' % \ (x, x.gmtime(), x.gmtime().localtime()) try: assert cmp(x.localtime().gmtime(), x, 0.001) == 0 except AssertionError: print ' Problem (gmt time) -- DST switching time ?:' print ' %s -> %s -> %s' % \ (x, x.localtime(), x.localtime().gmtime()) except Error, why: print '*** Problem: %s' % x print 'ok.' ### Rounding problems with COM dates t = DateTime(1998, 2, 24, 12, 40, 11) c = DateTimeFromCOMDate(t.COMDate()) print 'DateTime->COM Date->DateTime rounding error:',(t == c) * 'no' or 'yes' print 'COM Dates compare:',(t.COMDate()==c.COMDate()) * 'equal' or 'not equal' print 'diff =',t-c,'in seconds:',t.second - c.second print 'using cmp(,,0.5):',(cmp(t,c,0.5) == 0) * 'equal' or 'not equal' print ### Julian calendar t = JulianDateTime(1752, 9, 2) assert t.tuple()[:3] == (1752, 9, 2) assert t.date == '1752-09-02' assert t.calendar == 'Julian' g = t.Gregorian() assert g.tuple()[:3] == (1752, 9, 13) assert g.date == '1752-09-13' assert g.calendar == 'Gregorian' ### Constructor tests def testjdn(year,month,day): # Reference taken from the Calendar FAQ (see docs for reference) a = (14-month)/12 y = year+4800-a m = month + 12*a - 3 # Gregorian gJDN = day + (306*m+5)/10 + y*365 + y/4 - y/100 + y/400 - 32045 # Julian jJDN = day + (306*m+5)/10 + y*365 + y/4 - 32083 return gJDN,jJDN print 'Running constructor test... (this can take up to a few minutes)' try: if __version__ >= '1.3.0': # New versions: for suite in (range(-100,100),range(1900,2101)): p = None for year in suite: print year,; sys.stdout.flush() for month in range(1,13): for day in range(1,32): try: t = DateTime(year,month,day,12) jt = JulianDateTime(year,month,day,12) ref_greg,ref_jul = testjdn(year,month,day) except RangeError: continue if p: try: assert p + 1 == t assert (p+1).tuple() == t.tuple() assert t.tuple()[:3] == (year,month,day) assert DateTimeFromAbsDateTime(t.absdate).tuple()[:3] \ == (year,month,day) assert t.jdn == ref_greg assert jt.jdn == ref_jul except AssertionError: print '*** Test failed for:' print ' p = %s, p+1 = %s and' % (p,p+1) print ' t = %s, jdn=%i; jdn reference = %i' % \ (t,t.jdn,ref_greg) print ' jt = %s, jdn=%i; jdn reference = %i' % \ (jt,jt.jdn,ref_jul) print traceback.print_exc() print sys.exit(1) p = t print else: # Old versions and experimental Python version: for suite in (range(1900,2101),): p = None for year in suite: print year,; sys.stdout.flush() for month in range(1,13): for day in range(1,32): try: t = DateTime(year,month,day,12) ref_greg,ref_jul = testjdn(year,month,day) except RangeError: continue if p: try: assert p + 1 == t assert (p+1).tuple() == t.tuple() assert t.tuple()[:3] == (year,month,day) assert DateTimeFromAbsDateTime(t.absdate).tuple()[:3] \ == (year,month,day) assert t.jdn == ref_greg except AssertionError: print '*** Test failed for:' print ' p = %s, p+1 = %s and' % (p,p+1) print ' t = %s, jdn=%i; jdn reference = %i' % \ (t,t.jdn,ref_greg) print traceback.print_exc() print sys.exit(1) p = t print except KeyboardInterrupt: print print 'Interrupted.' else: print 'Date construction works.' print # Non zero testing if t: print 'Non zero testing works.' # ticks and dst print 'Converting ticks and DST handling.' try: summer.ticks(0,0) winter.ticks(0,0) summer.ticks(0,1) winter.ticks(0,1) except SystemError: print print '-'*72 print 'WARNING:' print print 'The mktime() C API on your platform does not support' print 'setting the DST flag to anything other than -1. This' print 'will cause the datetime.ticks() method to raise an' print 'error in case you pass a DST flag other than -1.' print '-'*72 # Check for bug #707 epoch = DateTimeFromTicks(0) one_second_before_epoch = epoch - oneSecond two_seconds_before_epoch = epoch - 2*oneSecond try: assert two_seconds_before_epoch.ticks() == -2 except Error: print 'Negative ticks are not support by the C lib mktime().' else: assert one_second_before_epoch.ticks() == -1 print 'Negative ticks are supported by the C lib mktime().' # Sanity checks date1 = Date(2000,11,1) + \ RelativeDateTime(day=1,month=1,hour=0,minute=0,second=0) date2 = Date(2000,11,1) + \ RelativeDateTime(day=1,month=6,hour=0,minute=0,second=0) print '%.15f == %.15f ?' % (date1.ticks(), time.mktime(date1.tuple())) print '%.15f == %.15f ?' % (date2.ticks(), time.mktime(date2.tuple())) try: assert date1.ticks() == time.mktime(date1.tuple()) assert date2.ticks() == time.mktime(date2.tuple()) except AssertionError: print print '-'*72 print 'WARNING:' print print 'Conversion from mx.DateTime instances to ticks is not relyable' print 'on your platform. Please run "python testticks.py" and send' print 'the output to the author at mal@lemburg.com.' print print '-'*72 print '%s == %s ?' % \ (time.localtime(time.mktime(date1.tuple()))[:6], date1.tuple()[:6]) print '%s == %s ?' % \ (time.localtime(time.mktime(date2.tuple()))[:6], date2.tuple()[:6]) try: assert time.localtime(time.mktime(date1.tuple()))[:6] == \ date1.tuple()[:6] assert time.localtime(time.mktime(date2.tuple()))[:6] == \ date2.tuple()[:6] except AssertionError: print print '-'*72 print 'WARNING:' print print 'time.localtime() and time.mktime() are not inverse functions' print 'on your platform. This may lead to strange results in some' print 'applications. Please run "python testticks.py" and send' print 'the output to the author at mal@lemburg.com.' print print '-'*72 print # RelativeDateTime print 'RelativeDateTime...', assert hash(RelativeDateTime(year=2002)) == 135051564 assert hash(RelativeDateTime(year=2001)) == 135051567 assert hash(RelativeDateTime(year=2004)) == 135051562 assert RelativeDateTime(year=2004) == RelativeDateTime(year=2004) assert RelativeDateTime(year=2004) != RelativeDateTime(year=2002) assert str(RelativeDateTime(minutes=75)) == 'YYYY-MM-DD HH:(+75):SS' assert str(RelativeDateTime(minutes=-75)) == 'YYYY-MM-DD HH:(-75):SS' assert str(RelativeDateTime(hours=0.5)) == 'YYYY-MM-DD (+00):(+30):SS' assert str(RelativeDateTime(hours=-0.5)) == 'YYYY-MM-DD (+00):(-30):SS' print 'done.' # DateTimeFrom() print 'DateTimeFrom()...', assert (DateTimeFrom(hour=12, minute=3, defaultdate=today()-1) == today() - 1 + TimeDelta(12, 3)) assert (DateTimeFrom(month=12, day=1, defaultdate=DateTime(2009, 1, 1, 12)) == DateTime(2009, 12, 1, 12)) assert (DateTimeFrom("12:03", defaultdate=today()-1) == today() - 1 + TimeDelta(12, 3)) #assert (DateTimeFrom("Dec 1", defaultdate=DateTime(2009, 1, 1, 12)) == # DateTime(2009, 12, 1, 12)) assert (DateTimeFrom("Dec 1", defaultdate=DateTime(2009, 1, 13)) == DateTime(2009, 12, 1)) print 'done.' # gmtime() print print 'Testing gmtime()...', t = 2**31 - 100 for t, refdate in ((2**31, DateTime(2038, 1, 19, 3, 14, 8)), (2**32, DateTime(2106, 2, 7, 6, 28, 16)), (2**33, DateTime(2242, 3, 16, 12, 56, 32)), (2**34, DateTime(2514, 5, 30, 1, 53, 4)), ): for i in range(-100, 100): try: x = gmtime(t + i) assert x == refdate + i*oneSecond, (t, i, refdate) except ValueError, reason: print 'Failed for %s: %s + %i seconds' % (t + i, refdate, i) break print 'done.' # timegm() emulation print print 'Testing .gmticks()... (this can take up to a few minutes)' t = start = 920710000 stop = 2140240000 oops = 0 try: while 1: if t % 10000 < 20: print t, d = apply(DateTime,time.gmtime(t)[:6]) try: x = d.gmticks() except Error: break if x != t: print ' Ooops:',d,'t =',t,'diff =',x-t oops = oops + 1 try: t = t + 10011 except OverflowError: break else: if t > stop: break except KeyboardInterrupt: print print 'Interrupted.' else: print print ' Tested ticks range %i to %i.' % (start,t) assert oops == 0 print '...Works.' print # Test PyDateTime integration print 'Running Python datetime module integration tests.' from mx.DateTime.mxDateTime import testpydatetime print # Run slot operations tests print 'Running slot operation tests.' from mx.DateTime.mxDateTime import testslotops print # Try importing a subpackage print 'Importing subpackage Feasts.' print from mx.DateTime import Feasts try: Feasts._test() except SystemError: print '-'*72 print 'WARNING:' print print 'Subpackges ISO and ARPA will not work on your platform because' print 'mxDateTime found no working API to query the timezone' print 'for a given date/time. Please run "python testticks.py" and send' print 'the output to the author at mal@lemburg.com.' print print '-'*72 print # Run parser tests print 'Importing subpackage Parser.' print from mx.DateTime import Parser Parser._test() print print 'Works.' egenix-mx-base-3.2.7/mx/DateTime/mxDateTime/testabsdatetime.py0000664000175000017500000000133511562537734024146 0ustar lemburglemburgimport sys from mx.DateTime import * # Test for ticket #526 if sys.maxint > 2**32: print DateTimeFromAbsDateTime(-9580000000) # Test DateTimeFromAbsDateTime() for a whole range of values #RANGE = range(-5, 5) RANGE = range(-1000000, 1000000) INTERVAL = max(len(RANGE) / 1000, 1) print 'Gregorian calendar:' print for absdate in RANGE: d = DateTimeFromAbsDateTime(absdate) assert d.absdate == absdate if absdate % INTERVAL == 0: print '%-10s: %s' % (absdate, d) print print 'Julian calendar:' print for absdate in RANGE: d = DateTimeFromAbsDateTime(absdate,0,Julian) assert d.absdate == absdate if absdate % INTERVAL == 0: print '%-10s: %s' % (absdate, d) print egenix-mx-base-3.2.7/mx/DateTime/mxDateTime/testcmp.py0000664000175000017500000000065207315370425022435 0ustar lemburglemburgfrom mx.DateTime import * t = now() print 'Init...' l = [None] * 10000 for i in range(10000): l[i] = DateTimeFromAbsDateTime(t.absdate + i,0) print 'Sorting... plain' t = now() for i in range(100): l.sort() l.reverse() d = now() - t print ' elapsed time:',d print 'Sorting... with cmp()' t = now() for i in range(100): l.sort(cmp) l.reverse() d = now() - t print ' elapsed time:',d egenix-mx-base-3.2.7/mx/DateTime/mxDateTime/testcoerce.py0000664000175000017500000000031407470777252023124 0ustar lemburglemburgfrom mx.DateTime import ISO class AnyClass: pass date = ISO.ParseDateTime('2002-01-01 00:00:00') anyclass = AnyClass() if date == anyclass: print "Should not compare equal ?!" else: print "Works." egenix-mx-base-3.2.7/mx/DateTime/mxDateTime/testcomdates.py0000664000175000017500000000060107315370425023447 0ustar lemburglemburgfrom mx.DateTime import * c = 35000.0 error = 0 for i in range(1000000): t = DateTimeFromCOMDate(c) tc = t.COMDate() if not tc == c: print 'failed for: %s (%.16f != %.16f)' % (t,c,tc) error = 1 # Let's give IEEE floats a hard time... if i % 10 == 0: c = c - 0.009 else: c = c + 0.0099 if not error: print 'All went well !' egenix-mx-base-3.2.7/mx/DateTime/mxDateTime/testnow.py0000664000175000017500000000051507315370425022457 0ustar lemburglemburgfrom mx.DateTime import now from time import time, clock rounds = range(10000) # Warm-up for i in rounds: x = now() for i in rounds: x = time() c = clock() for i in rounds: x = now() print 'now(): %5.2f sec.' % (clock() - c) c = clock() for i in rounds: x = time() print 'time(): %5.2f sec.' % (clock() - c) egenix-mx-base-3.2.7/mx/DateTime/mxDateTime/testpydatetime.py0000664000175000017500000000401211745305324024013 0ustar lemburglemburgfrom mx.DateTime import * # Check compatibility with Python's datetime try: import datetime except ImportError: pass else: class GMT1(datetime.tzinfo): def utcoffset(self, dt): return datetime.timedelta(hours=1) # Test values pydt1 = datetime.datetime(2007, 1, 1, 12, 30, 13) pydt2 = datetime.datetime(2007, 1, 1, 12, 30, 13, tzinfo=GMT1()) pyd1 = datetime.date(2007, 1, 1) pyt1 = datetime.time(12, 30, 13) pyt2 = datetime.time(12, 30, 13, tzinfo=GMT1()) pytd1 = datetime.timedelta(0, 12*3600 + 30*60 + 13) mxdt1 = DateTime(2007, 1, 1, 12, 30, 13) mxdt2 = DateTime(2007, 1, 1) mxdt3 = DateTime(2007, 1, 1, 11, 30, 13) mxdtd1 = DateTimeDelta(0, 12, 30, 13) mxdtd2 = DateTimeDelta(0, 11, 30, 13) # Constructor methods assert mxdt1.pydate() == pyd1 assert mxdt1.pydatetime() == pydt1 assert mxdt1.pytime() == pyt1 assert mxdtd1.pytime() == pyt1 assert mxdtd1.pytimedelta() == pytd1 # Comparisons assert pydt1 == mxdt1 assert mxdt1 == pydt1, (mxdt1, pydt1) assert mxdt2 == pyd1 # Doesn't work, since datetime.time always compares false # against non-datetime.time types #assert pyt1 == mxdtd1 #assert mxdtd1 == pyt1 # Subtract assert mxdt1 - pydt1 == 0.0 assert mxdt2 - pyd1 == 0.0 assert mxdt1 - pyd1 == mxdtd1 # Add assert mxdt1 - pytd1 == mxdt2, (mxdt1 - pytd1, mxdt2) assert pydt1 - mxdt2 == mxdtd1, (pydt1 - mxdt2, -mxdtd1) assert mxdt2 + pytd1 == mxdt1 # Not supported by datetime module: #assert pydt1 - pyd1 == mxdtd1 # Not supported by datetime module: #assert pydt1 - mxdtd1 == mxdt2 # Constructor compatibility assert mxdt1 == DateTimeFrom(pydt1), (mxdt1, DateTimeFrom(pydt1)) assert mxdt2 == DateTimeFrom(pyd1) assert mxdt3 == DateTimeFrom(pydt2) assert mxdt2 == DateFrom(pyd1) assert mxdtd1 == TimeDeltaFrom(pytd1) assert mxdtd1 == TimeDeltaFrom(pyt1) assert mxdtd2 == TimeDeltaFrom(pyt2), (mxdtd2, TimeDeltaFrom(pyt2)) egenix-mx-base-3.2.7/mx/DateTime/mxDateTime/testpytimedelta.py0000664000175000017500000000037112055134717024174 0ustar lemburglemburgfrom mx.DateTime import now, TimeDelta if 0: # Force import of the datetime module d = now() d.pydate() td = TimeDelta(3) print td td1 = td.rebuild() print td1 pytime = td.pytime() print pytime pydelta = td.pytimedelta() print pydelta egenix-mx-base-3.2.7/mx/DateTime/mxDateTime/testrichard.py0000664000175000017500000000051707524711524023273 0ustar lemburglemburgfrom mx.DateTime import ISO class AnyClass: pass date = ISO.ParseDateTime('2002-01-01 00:00:00') rubish = AnyClass() if date == rubish: print "Oh Dear" else: print "hurrah!" class AnyClass: def __coerce__(self, other): print 'coerce %s and %s' % (repr(self), repr(other)) print date + rubish #print float(rubish) egenix-mx-base-3.2.7/mx/DateTime/mxDateTime/testroundoff.py0000664000175000017500000000026207573103233023472 0ustar lemburglemburgfrom mx.DateTime import * t = DateTimeFromAbsDateTime(730488,81317.647058823524) t = t + 1.0/17.0 print t print for attr in t.__members__: print attr, ':', getattr(t,attr) egenix-mx-base-3.2.7/mx/DateTime/mxDateTime/testslotops.py0000664000175000017500000002573711613502422023362 0ustar lemburglemburg""" Tests for mxDateTime type DateTime and DateTimeDelta: comparisons, arithmetic and mixed type operations. """ import sys from mx.DateTime import * from datetime import * # DateTime t1 = Date(2011,3,5) t1_ticks = t1.ticks() t2 = Date(2011,3,6) t2_ticks = t2.ticks() # DateTimeDelta td1 = t2 - t1 td1_seconds = td1.seconds td2 = 2 * td1 td2_seconds = td2.seconds td3 = Time(12,0,0) td4 = Time(13,0,0) # PyDate d1 = date(2011,3,5) d2 = date(2011,3,6) # PyTime pt1 = time(12,0,0) pt2 = time(13,0,0) # PyDateTime dt1 = datetime(2011,3,5) dt2 = datetime(2011,3,6) # PyDelta dtd1 = d2 - d1 dtd2 = 2 * dtd1 def run_tests(): ### DateTime comparison # DateTime assert t1 == t1 assert t2 == t2 assert t1 < t2 assert t1 <= t2 assert not (t1 > t2) assert not (t1 >= t2) # None assert not (t1 == None) assert not (None == t1) assert not (t2 == None) assert not (None == t2) # DateTime op DateTimeDelta assert t1 != td1 assert t2 != td1 assert t1 < td1 assert t2 < td1 assert not (t1 > td1) assert not (t2 > td1) # DateTime op floats assert t1 == t1_ticks assert t2 == t2_ticks assert t1 <= t1_ticks assert t2 <= t2_ticks assert t1 >= t1_ticks assert t2 >= t2_ticks assert t1 != t1_ticks + 1 assert t2 != t2_ticks + 1 assert t1 < t1_ticks + 1 assert t2 < t2_ticks + 1 assert t1 > t1_ticks - 1 assert t2 > t2_ticks - 1 assert t1_ticks == t1 assert t1_ticks >= t1 assert t2_ticks > t1 assert t1_ticks < t2 assert t2_ticks <= t2_ticks # DateTime op date assert t1 == d1 assert t2 == d2 assert t1 < d2 assert t1 <= d2 assert not (t1 > d2) assert not (t1 >= d2) assert t2 > d1 assert t2 >= d1 assert not (t2 < d1) assert not (t2 <= d1) assert d1 < t2 assert d1 <= t2 assert not (d1 > t2) assert not (d1 >= t2) # DateTime op datetime assert t1 == dt1 assert t2 == dt2 assert t1 < dt2 assert t1 <= dt2 assert not (t1 > dt2) assert not (t1 >= dt2) assert dt1 < t2 assert dt1 <= t2 assert not (dt1 > t2) assert not (dt1 >= t2) ### DateTime addition # DateTime + DateTimeDelta assert t1 + td1 == t2 assert td1 + t1 == t2 # DateTime + DateTime try: t1 + t2 except TypeError: pass else: raise TypeError('DateTime + DateTime should raise TypeError') # DateTime + None try: t1 + None except TypeError: pass else: raise TypeError('DateTime + None should raise TypeError') # DateTime + number assert t1 + 1 == t2 assert t1 + 1.0 == t2 assert 1 + t1 == t2 assert 1.0 + t1 == t2 # DateTime + PyDelta assert t1 + dtd1 == t2 assert dtd1 + t1 == t2 ### DateTime subtraction # DateTime - DateTime assert t2 - t1 == td1 # DateTime - DateTimeDelta assert t2 - td1 == t1 # DateTime - number assert t2 - 1 == t1 # DateTime - PyDelta assert t2 - dtd1 == t1 # DateTime - PyDate assert t2 - d1 == td1 # DateTime - PyDateTime assert t2 - dt1 == td1 # DateTimeDelta - DateTime try: td1 - t2 except TypeError: pass else: raise TypeError('DateTimeDelta - DateTime should raise TypeError') # DateTime - None try: t1 - None except TypeError: pass else: raise TypeError('DateTime - None should raise TypeError') # number - DateTime try: 10 - t2 except TypeError: pass else: raise TypeError('number - DateTime should raise TypeError') # PyDate - DateTime assert d2 - t1 == td1, repr(d2 - t1) # PyDateTime - DateTime assert dt2 - t1 == td1, repr(dt2 - t1) ### DateTime multiplication # DateTime * DateTimeDelta try: t1 * td2 except TypeError: pass else: raise TypeError('DateTime * DateTimeDelta should raise TypeError') # DateTime * None try: t1 * None except TypeError: pass else: raise TypeError('DateTime * None should raise TypeError') # DateTime * number try: t1 * 10 except TypeError: pass else: raise TypeError('DateTime * number should raise TypeError') ### DateTime division # DateTime / DateTimeDelta try: t1 / td2 except TypeError: pass else: raise TypeError('DateTime / DateTimeDelta should raise TypeError') # DateTime / None try: t1 / None except TypeError: pass else: raise TypeError('DateTime / None should raise TypeError') # DateTime / number try: t1 / 10 except TypeError: pass else: raise TypeError('DateTime / number should raise TypeError') ### DateTimeDelta comparison # DateTimeDelta assert td1 == td1 assert td2 == td2 assert td1 < td2 assert td1 <= td2 assert not (td1 > td2) assert not (td1 >= td2) # None assert not (td1 == None) assert not (None == td1) assert not (td2 == None) assert not (None == td2) # DateTimeDelta op DateTime assert td1 != t1 assert td2 != t1 assert td1 > t1 assert td2 > t1 assert not (td1 < t1) assert not (td2 < t1) # DateTimeDelta op floats assert td1 == td1_seconds assert td2 == td2_seconds assert td1 <= td1_seconds assert td2 <= td2_seconds assert td1 >= td1_seconds assert td2 >= td2_seconds assert td1 != td1_seconds + 1 assert td2 != td2_seconds + 1 assert td1 < td1_seconds + 1 assert td2 < td2_seconds + 1 assert td1 > td1_seconds - 1 assert td2 > td2_seconds - 1 # DateTimeDelta op PyDelta assert td1 == dtd1 assert td2 == dtd2 assert td1 < dtd2 assert td1 <= dtd2 assert not (td1 > dtd2) assert not (td1 >= dtd2) assert td2 > dtd1 assert td2 >= dtd1 assert not (td2 < dtd1) assert not (td2 <= dtd1) # XXX These don't work, due to the Python timedelta object's # broken rich comparisons slot method (it doesn't interoperate # with other types); using a coercion slot method in DateTimeDelta # doesn't help either, since this is not called at all. #assert dtd1 < td2 #assert dtd1 <= td2 #assert not (dtd1 > td2) #assert not (dtd1 >= td2) # DateTimeDelta op PyTime assert td3 == pt1 assert td4 == pt2 assert td3 < pt2 assert td4 > pt1 assert td3 >= pt1 assert td4 >= pt2 ### DateTimeDelta addition # DateTimeDelta + DateTimeDelta assert td1 + td2 == td1_seconds + td2_seconds # DateTimeDelta + DateTime assert td1 + t1 == t2 assert t1 + td1 == t2 # DateTimeDelta + None try: td1 + None except TypeError: pass else: raise TypeError('DateTimeDelta + None should raise TypeError') # DateTimeDelta + number assert td1 + 1 == td1_seconds + 1 assert td1 + 1.0 == td1_seconds + 1 assert 1 + td1 == td1_seconds + 1 assert 1.0 + td1 == td1_seconds + 1 # DateTimeDelta + PyDelta assert td1 + dtd1 == 2 * td1 assert dtd1 + td1 == 2 * td1 # DateTimeDelta + PyTime assert td1 + pt1 == td1 + td3 assert pt1 + td1 == td1 + td3 ### DateTimeDelta subtraction # DateTimeDelta - DateTimeDelta assert td2 - td1 == td1 # DateTimeDelta - DateTime try: td1 - t2 except TypeError: pass else: raise TypeError('DateTimeDelta - DateTime should raise TypeError') # DateTimeDelta - None try: td1 - None except TypeError: pass else: raise TypeError('DateTimeDelta - None should raise TypeError') # DateTimeDelta - number assert td2 - 86400 == td1 # DateTimeDelta - PyDelta assert td2 - dtd1 == td1 # DateTimeDelta - PyTime assert td4 - pt1 == td4 - td3 # DateTimeDelta - PyDateTime try: td1 - dt1 except TypeError: pass else: raise TypeError('DateTimeDelta - PyDateTime should raise TypeError') # DateTimeDelta - PyDate try: td1 - d1 except TypeError: pass else: raise TypeError('DateTimeDelta - PyDate should raise TypeError') # DateTime - DateTimeDelta assert t2 - td1 == t1 # number - DateTimeDelta try: 10 - td1 except TypeError: pass else: raise TypeError('number - DateTimeDelta should raise TypeError') # PyDelta - DateTimeDelta assert dtd2 - td1 == td1 # PyTime - DateTimeDelta assert pt2 - td3 == td4 - td3 # PyDateTime - DateTimeDelta try: dt1 - td1 except TypeError: pass else: raise TypeError('PyDateTime - DateTimeDelta should raise TypeError') # PyDate - DateTimeDelta try: d1 - td1 except TypeError: pass else: raise TypeError('PyDate - DateTimeDelta should raise TypeError') ### DateTimeDelta multiplication # DateTimeDelta * DateTimeDelta try: td1 * td1 except TypeError: pass else: raise TypeError('DateTimeDelta * DateTimeDelta should raise TypeError') # DateTimeDelta * DateTime try: td1 * t1 except TypeError: pass else: raise TypeError('DateTimeDelta * DateTime should raise TypeError') # DateTimeDelta * None try: td1 * None except TypeError: pass else: raise TypeError('DateTimeDelta * None should raise TypeError') # DateTimeDelta * number assert td1 * 2 == td2 assert td1 * 2.0 == td2 # DateTime * DateTimeDelta try: t1 * td1 except TypeError: pass else: raise TypeError('DateTime * DateTimeDelta should raise TypeError') # number * DateTimeDelta assert 2 * td1 == td2 assert 2.0 * td1 == td2 ### DateTimeDelta division # DateTimeDelta / DateTimeDelta assert td2 / td1 == 2.0 # DateTimeDelta / DateTime try: td1 / t1 except TypeError: pass else: raise TypeError('DateTimeDelta / DateTime should raise TypeError') # DateTimeDelta * None try: td1 / None except TypeError: pass else: raise TypeError('DateTimeDelta / None should raise TypeError') # DateTimeDelta / PyDelta assert td2 / dtd1 == 2.0 # DateTimeDelta / PyDelta assert td1 / pt1 == 2.0 # DateTimeDelta / number assert td2 / 2 == td1 assert td2 / 2.0 == td1 # DateTime / DateTimeDelta try: t1 / td1 except TypeError: pass else: raise TypeError('DateTime / DateTimeDelta should raise TypeError') # PyDelta / DateTimeDelta assert dtd2 / td1 == 2.0 # PyTime / DateTimeDelta assert pt1 / td1 == 0.5 # number / DateTimeDelta try: 1.0 / td1 except TypeError: pass else: raise TypeError('number / DateTimeDelta should raise TypeError') ### Default run run_tests() ### Memory leak test if '--memory-leaks' in sys.argv: while 1: run_tests() egenix-mx-base-3.2.7/mx/DateTime/mxDateTime/teststrftime.py0000664000175000017500000000022307315370425023505 0ustar lemburglemburgfrom mx.DateTime import * t = now() for i in range(10000): s = t.strftime('%D %T %Z') d = now() - t print 'elapsed time:',d,' output:',s egenix-mx-base-3.2.7/mx/DateTime/mxDateTime/testsubclassing.py0000664000175000017500000000016007333367777024205 0ustar lemburglemburgimport mxDateTime class D(mxDateTime.DateTimeType): def test(self): print '.test:', self.absdate egenix-mx-base-3.2.7/mx/DateTime/mxDateTime/testticks.py0000664000175000017500000000250111564465333022772 0ustar lemburglemburgfrom mx.DateTime import * import time,sys print 'Python',sys.version.split()[0],'on',sys.platform print x = time.time() print 'ticks:',x print 'time.localtime():',time.localtime(x) print 'time.gmtime():',time.gmtime(x) print 'time.mktime():',time.mktime(time.localtime(x)[:-1]+(-1,)) t = DateTimeFromTicks(x) print 't.ticks():',t.ticks() print 't.tuple():',t.tuple() print 't.absdate:',t.absdate print 't.abstime:',t.abstime print 't.tuple() -> time.mktime():',apply(time.mktime,t.tuple()) print ' -> time.localtime():',time.localtime(apply(time.mktime,t.tuple())) print "hasattr(Epoch,'gmticks'):",hasattr(Epoch,'gmticks') try: print 'tz_offset(t):',tz_offset(t) except: print 'tz_offset not working' print x = x - 15768000 print 'ticks:',x print 'time.localtime():',time.localtime(x) print 'time.gmtime():',time.gmtime(x) print 'time.mktime():',time.mktime(time.localtime(x)[:-1]+(-1,)) t = DateTimeFromTicks(x) print 't.ticks():',t.ticks() print 't.tuple():',t.tuple() print 't.absdate:',t.absdate print 't.abstime:',t.abstime print 't.tuple() -> time.mktime():',apply(time.mktime,t.tuple()) print ' -> time.localtime():',time.localtime(apply(time.mktime,t.tuple())) print "hasattr(Epoch,'gmticks'):",hasattr(Epoch,'gmticks') try: print 'tz_offset(t):',tz_offset(t) except: print 'tz_offset not working' egenix-mx-base-3.2.7/mx/DateTime/mxDateTime/vms_build_mxdatetime.com0000664000175000017500000000103207206522041025272 0ustar lemburglemburg$ cc/prefix=all/incl=(sys$disk:[], python_include) MXDATETIME.C $ @ PYTHON_VMS:SETUP $ dbg = f$trnlnm("PYTHON_CFG_DEBUG") $ thrd = f$trnlnm("PYTHON_CFG_THREADS") $ def lnk$library sys$library:sql$user $ libr/repl python_olb:MODULES_D'dbg''thrd'.OLB mxdatetime.obj $ python PYTHON_TOOLS:REGISTER_CONFIG.PY R VMS_CONFIG_MXDATETIME.TXT $ @ PYTHON_TOOLS:CVT_CONFIG_MODULES.COM $ @ PYTHON_TOOLS:CVT_CONFIG_OLB.COM $ @ PYTHON_VMS:CONFIG_INITTAB2MAR.COM "CONFIG.DAT" "D" $ @ PYTHON_VMS:BLDRUN VMS_MACRO CONFIG_INITTAB $ @ PYTHON_VMS:LINK_PY egenix-mx-base-3.2.7/mx/DateTime/mxDateTime/vms_config_mxdatetime.txt0000664000175000017500000000224307121413024025502 0ustar lemburglemburg!++ ! CONFIG_MXDATETIME.TXT - 30-MAY-2000 - Jean-Franois Pironne ! ! configuration information ! - add/remove module 'mxDateTime' ! ! -- to register: ! $ @ PYTHON_VMS:SETUP ! $ python PYTHON_TOOLS:REGISTER_CONFIG.PY R CONFIG_MXDATETIME.TXT ! ! -- to unregister: ! $ @ PYTHON_VMS:SETUP ! $ python PYTHON_TOOLS:REGISTER_CONFIG.PY U CONFIG_MXDATETIME.TXT ! ! remember to re-run the following procedures after (de)registration: ! $ @ PYTHON_TOOLS:CVT_CONFIG_MODULES.COM ! $ @ PYTHON_TOOLS:CVT_CONFIG_OLB.COM ! $ @ PYTHON_VMS:CONFIG_INITTAB2MAR.COM "CONFIG.DAT" "D" ! $ @ PYTHON_VMS:BLDRUN VMS_MACRO CONFIG_INITTAB ! $ @ PYTHON_VMS:LINK_PY ! !-- ! $FORMAT_VERSION=1 ! $COMPONENT=PYTHON.MXDATETIME ! $CONFIG mxDateTime initmxDateTime D $ENDCONFIG ! ! $OLB ! module 'mxDateTime' goes into [.O_arch]MODULES_*.OLB together with the base software $ENDOLB ! ! $MODULES !OLB|module |o|d|t|e=c|alpha|vax |procedure || MODULES|MXDATETIME |1|C|-|D=D|05520|05520||| ! ---------------------------------------------------------------------------- $ENDMODULES ! ! ! EOF: CONFIG_MXDATETIME.TXT egenix-mx-base-3.2.7/mx/DateTime/mxDateTime/win32mk.bat0000664000175000017500000000074006563077531022372 0ustar lemburglemburg@echo off @cls @echo. @echo. @if %1!==! echo Call win32mk (python directoty) as in: win32mk d:\programme\python @echo. @if %1!==! goto EndBat REM This was tested on Windows95 using VC50 and NMAKE @if %OS%!==Windows_NT! goto NTSet @goto Win95Set :NTSet @if exist .\release deltree/y .\release @set PYTHON_DIR=%1 @nmake mxdatetime.mak @if exist %1\dlls copy release\*.dll %1\dlls\*.pyd @goto EndBat :Win95Set @command /e:1024 /cW95.bat %1 :EndBat egenix-mx-base-3.2.7/mx/DateTime/ARPA.py0000664000175000017500000001625412133021414017426 0ustar lemburglemburg""" This module provides a set of constructors and routines to convert between DateTime[Delta] instances and ARPA representations of date and time. The format is specified by RFC822 + RFC1123. Note: Timezones are only interpreted by ParseDateTimeGMT(). All other constructors silently ignore the time zone information. Copyright (c) 1998-2000, Marc-Andre Lemburg; mailto:mal@lemburg.com Copyright (c) 2000-2013, eGenix.com Software GmbH; mailto:info@egenix.com See the documentation for further information on copyrights, or contact the author. All Rights Reserved. """ import DateTime,Timezone import re # Grammar: RFC822 + RFC1123 + depreciated RFC850 _litday = '(?PMon|Tue|Wed|Thu|Fri|Sat|Sun)[a-z]*' _litmonth = '(?PJan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)'\ '[a-z]*' _date = ('(?:(?P\d?\d)(?: +' + _litmonth + ' +|-(?P\d?\d)-)(?P(?:\d\d)?\d\d))') _zone = Timezone.zone _time = ('(?:(?P\d\d):(?P\d\d)' '(?::(?P\d\d))?(?: +'+_zone+')?)') # Timezone information is made optional because some mail apps # forget to add it (most of these seem to be spamming engines, btw). # It defaults to UTC. _arpadate = '(?:'+ _litday + ',? )? *' + _date _arpadatetime = '(?:'+ _litday + ',? )? *' + _date + ' +' + _time # We are not strict about the extra characters: some applications # add extra information to the date header field. Additional spaces # between the fields and extra characters in the literal day # and month fields are also silently ignored. arpadateRE = re.compile(_arpadate) arpadatetimeRE = re.compile(_arpadatetime) # Translation tables litdaytable = {'mon':0, 'tue':1, 'wed':2, 'thu':3, 'fri':4, 'sat':5, 'sun':6 } litmonthtable = {'jan':1, 'feb':2, 'mar':3, 'apr':4, 'may':5, 'jun':6, 'jul':7, 'aug':8, 'sep':9, 'oct':10, 'nov':11, 'dec':12 } _days = ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'] _months = [None, 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec' ] def ParseDate(arpastring,parse_arpadate=arpadateRE.match): """ ParseDate(arpastring) Returns a DateTime instance reflecting the given ARPA date. Only the date part is parsed, any time part will be ignored. The instance's time is set to 0:00:00. """ s = arpastring.strip() date = parse_arpadate(s) if not date: raise ValueError,'wrong format' litday,day,litmonth,month,year = date.groups() if len(year) == 2: year = DateTime.add_century(int(year)) else: year = int(year) if litmonth: litmonth = litmonth.lower() try: month = litmonthtable[litmonth] except KeyError: raise ValueError,'wrong month format' else: month = int(month) day = int(day) # litday and timezone are ignored return DateTime.DateTime(year,month,day) def ParseDateTime(arpastring,parse_arpadatetime=arpadatetimeRE.match): """ ParseDateTime(arpastring) Returns a DateTime instance reflecting the given ARPA date assuming it is local time (timezones are silently ignored). """ s = arpastring.strip() date = parse_arpadatetime(s) if not date: raise ValueError,'wrong format or unknown time zone' litday,day,litmonth,month,year,hour,minute,second,zone = date.groups() if len(year) == 2: year = DateTime.add_century(int(year)) else: year = int(year) if litmonth: litmonth = litmonth.lower() try: month = litmonthtable[litmonth] except KeyError: raise ValueError,'wrong month format' else: month = int(month) day = int(day) hour = int(hour) minute = int(minute) if second is None: second = 0.0 else: second = float(second) # litday and timezone are ignored return DateTime.DateTime(year,month,day,hour,minute,second) def ParseDateTimeGMT(arpastring,parse_arpadatetime=arpadatetimeRE.match): """ ParseDateTimeGMT(arpastring) Returns a DateTime instance reflecting the given ARPA date converting it to UTC (timezones are honored). """ s = arpastring.strip() date = parse_arpadatetime(s) if not date: raise ValueError,'wrong format or unknown time zone' litday,day,litmonth,month,year,hour,minute,second,zone = date.groups() if len(year) == 2: year = DateTime.add_century(int(year)) else: year = int(year) if litmonth: litmonth = litmonth.lower() try: month = litmonthtable[litmonth] except KeyError: raise ValueError,'wrong month format' else: month = int(month) day = int(day) hour = int(hour) minute = int(minute) if second is None: second = 0.0 else: second = float(second) offset = Timezone.utc_offset(zone) # litday is ignored return DateTime.DateTime(year,month,day,hour,minute,second) - offset # Alias ParseDateTimeUTC = ParseDateTimeGMT def str(datetime,tz=None): """ str(datetime,tz=DateTime.tz_offset(datetime)) Returns the datetime instance as ARPA date string. tz can be given as DateTimeDelta instance providing the time zone difference from datetime's zone to UTC. It defaults to DateTime.tz_offset(datetime) which assumes local time. """ if tz is None: tz = datetime.gmtoffset() return '%s, %02i %s %04i %02i:%02i:%02i %+03i%02i' % ( _days[datetime.day_of_week], datetime.day, _months[datetime.month], datetime.year, datetime.hour, datetime.minute, datetime.second, tz.hour,tz.minute) def strGMT(datetime): """ strGMT(datetime) Returns the datetime instance as ARPA date string assuming it is given in GMT. """ return '%s, %02i %s %04i %02i:%02i:%02i GMT' % ( _days[datetime.day_of_week], datetime.day, _months[datetime.month], datetime.year, datetime.hour, datetime.minute, datetime.second) def strUTC(datetime): """ strUTC(datetime) Returns the datetime instance as ARPA date string assuming it is given in UTC. """ return '%s, %02i %s %04i %02i:%02i:%02i UTC' % ( _days[datetime.day_of_week], datetime.day, _months[datetime.month], datetime.year, datetime.hour, datetime.minute, datetime.second) def _test(): import sys, os, rfc822 file = os.path.join(os.environ['HOME'], 'nsmail/Inbox') f = open(file, 'r') while 1: m = rfc822.Message(f) if not m: break print 'From:', m.getaddr('from') print 'To:', m.getaddrlist('to') print 'Subject:', m.getheader('subject') raw = m.getheader('date') try: date = ParseDateTimeUTC(raw) print 'Date:',strUTC(date) except ValueError,why: print 'PROBLEMS:',repr(raw),'-->',why raw_input('...hit return to continue') print # Netscape mail file while 1: line = f.readline() if line[:6] == 'From -': break if __name__ == '__main__': _test() egenix-mx-base-3.2.7/mx/DateTime/COPYRIGHT0000664000175000017500000000176211552064177017643 0ustar lemburglemburg --------------------------------------------------------------------- COPYRIGHT NOTICE --------------------------------------------------------------------- Copyright (c) 1997-2000, IKDS Marc-Andre Lemburg; mailto:mal@lemburg.com Copyright (c) 2000-2011, eGenix.com Software GmbH; mailto:info@egenix.com All Rights Reserved. This software is protected by copyright and other intellectual property laws and by international treaties. It may only be used under the conditions and terms of the eGenix.com Public License Agreement. You should have received a copy of the eGenix.com Public License Agreement with this software (usually in the file LICENSE located in the package's or software's main directory). Please write to licenses@egenix.com to obtain a copy in case you should not have received a copy. egenix-mx-base-3.2.7/mx/DateTime/DateTime.py0000664000175000017500000010623212133021414020373 0ustar lemburglemburg""" Python part of the low-level DateTime[Delta] type implementation. Copyright (c) 1998-2001, Marc-Andre Lemburg; mailto:mal@lemburg.com Copyright (c) 2000-2013, eGenix.com Software GmbH; mailto:info@egenix.com See the documentation for further information on copyrights, or contact the author. All Rights Reserved. """ # Import C extension module from mxDateTime import * from mxDateTime import __version__ # Singletons oneSecond = DateTimeDelta(0,0,0,1) oneMinute = DateTimeDelta(0,0,1) oneHour = DateTimeDelta(0,1) oneDay = DateTimeDelta(1) oneWeek = DateTimeDelta(7) Epoch = DateTimeFromAbsDateTime(1, 0) # Shortcuts for pickle; for backward compatibility only (they are now # defined in __init__.py to further reduce the pickles length) def _DT(absdate,abstime): return DateTimeFromAbsDateTime(absdate,abstime) def _DTD(seconds): return DateTimeDeltaFromSeconds(seconds) # Module init class modinit: global _time, _math, _types, _sys, _pydatetime, _pydate, _pytime, _pytimedelta import time, math, types, sys _time = time _math = math _types = types _sys = sys try: import datetime _pydatetime = datetime.datetime _pydate = datetime.date _pytime = datetime.time _pytimedelta = datetime.timedelta except ImportError: # Set them to (), so that isinstance() works with them _pydatetime = () _pydate = () _pytime = () _pytimedelta = () del modinit ### Helpers def _isstring(arg, isinstance=isinstance, types=_types): if isinstance(arg, types.StringType): return 1 try: if isinstance(arg, types.UnicodeType): return 1 except AttributeError: pass return 0 ### Compatibility APIs # Aliases and functions to make 'from mx.DateTime import *' work much # like 'from time import *' def localtime(ticks=None, # Locals: time=_time.time,float=float,localtime=_time.localtime, round=round,int=int,DateTime=DateTime,floor=_math.floor): """localtime(ticks=None) Construct a DateTime instance using local time from ticks. If ticks are not given, it defaults to the current time. The result is similar to time.localtime(). Fractions of a second are rounded to the nearest micro-second. """ if ticks is None: ticks = time() else: ticks = float(ticks) ticks = round(ticks, 6) fticks = floor(ticks) Y,M,D,h,m,s = localtime(fticks)[:6] s = s + (ticks - fticks) return DateTime(Y,M,D,h,m,s) def gmtime(ticks=None, # Locals: time=_time.time,float=float,gmtime=_time.gmtime, round=round,int=int,DateTime=DateTime,floor=_math.floor, DateTimeDeltaFromSeconds=DateTimeDeltaFromSeconds, Unix_Epoch=DateTime(1970, 1, 1)): """gmtime(ticks=None) Construct a DateTime instance using UTC time from ticks. If ticks are not given, it defaults to the current time. The result is similar to time.gmtime(). Fractions of a second are rounded to the nearest micro-second. """ if ticks is None: ticks = time() else: ticks = float(ticks) ticks = round(ticks, 6) if POSIX: # On POSIX platforms, the calulation is easy (and this also # makes the calulation safe against year 2038 wrap-arounds and # errors); see #421 return Unix_Epoch + DateTimeDeltaFromSeconds(float(ticks)) fticks = floor(ticks) Y,M,D,h,m,s = gmtime(ticks)[:6] s = s + (ticks - fticks) return DateTime(Y,M,D,h,m,s) def mktime((year,month,day,hour,minute,second,dow,doy,dst), # Locals: DateTime=DateTime): """mktime((year,month,day,hour,minute,second,dow,doy,dst)) Same as the DateTime() constructor accept that the interface used is compatible to the similar time.mktime() API. Note that the tuple elements dow, doy and dst are not used in any way. """ return DateTime(year,month,day,hour,minute,second) def ctime(datetime): """ctime(datetime) Returns a string representation of the given DateTime instance using the current locale's default settings. """ return datetime.strftime('%c') def today(hour=0,minute=0,second=0.0, # Locals: localtime=_time.localtime,time=_time.time,DateTime=DateTime): """today(hour=0,minute=0,second=0.0) Returns a DateTime instance for today (in local time) at the given time (defaults to midnight). """ Y,M,D = localtime(time())[:3] return DateTime(Y,M,D,hour,minute,second) def TimeDelta(hours=0.0,minutes=0.0,seconds=0.0, # Locals: DateTimeDelta=DateTimeDelta): """TimeDelta(hours=0.0,minutes=0.0,seconds=0.0) Returns a DateTimeDelta-object reflecting the given time delta. Seconds can be given as float to indicate fractions. """ return DateTimeDelta(0,hours,minutes,seconds) def gm2local(datetime): """ gm2local(datetime) Convert a DateTime instance holding UTC time to a DateTime instance using local time. """ return localtime(datetime.gmticks()) def local2gm(datetime): """ local2gm(datetime) Convert a DateTime instance holding local time to a DateTime instance using UTC time. """ return gmtime(datetime.ticks()) # Alias gmt = utc # Default value for DateTimeFromTJD's tjd_myriad parameter current_myriad = localtime().tjd_myriad def DateTimeFromTJD(tjd,tjd_myriad=current_myriad): """ DateTimeFromTJD(tjd[,myriad]) Return a DateTime instance for the given Truncated Julian Day. myriad defaults to the TJD myriad current at package import time. Note that this version of Truncated Julian Day number does real truncation of important information. It's use is discouraged and unsupported. """ return DateTimeFromAbsDays(tjd + tjd_myriad * 10000.0 - 1721425.0) def DateTimeFromJDN(jdn): """ DateTimeFromJDN(jdn) Return a DateTime instance for the given Julian Day Number. References: ----------- Gregorian 2000-01-01 12:00:00 corresponds to JDN 2451545.0. Gregorian 1858-11-17 00:00:00.00 corresponds to JDN 2400000.5; MJD 0.0. Julian -4712-01-01 12:00:00.00 corresponds to JDN 0.0. Gregorian -4713-11-24 12:00:00.00 corresponds to JDN 0.0. """ return DateTimeFromAbsDays(jdn - 1721425.5) def DateTimeFromMJD(mjd): """ DateTimeFromMJD(mjd) Return a DateTime instance for the given Modified Julian Day (MJD). The MJD is calculated the same way as the JDN except that 1858-11-17 00:00:00.00 is taken as origin of the scale. """ return DateTimeFromAbsDays(mjd + 678575.0) def DateTimeFrom(*args, **kws): """ DateTimeFrom(*args, **kws) Generic DateTime instance constructor. Can handle parsing strings, numbers and keywords. """ if len(args) == 1: # Single argument arg = args[0] argtype = type(arg) if _isstring(arg): import Parser return Parser.DateTimeFromString(*args, **kws) elif argtype is DateTimeType: return arg elif argtype is DateTimeDeltaType: raise TypeError,'cannot convert DateTimeDelta to DateTime' elif isinstance(arg, _pydatetime): if arg.tzinfo is not None: # Convert to UTC offset = arg.utcoffset() arg -= offset return DateTime( arg.year, arg.month, arg.day, arg.hour, arg.minute, arg.second + arg.microsecond * 1e-6) elif isinstance(arg, _pydate): # Note: _pydatetime are subclasses of _pydates ! return DateTime(arg.year, arg.month, arg.day) else: try: value = float(arg) except (TypeError, ValueError): value = int(arg) assert not kws return DateTimeFromTicks(value) elif len(args) > 1: # More than one argument if len(args) == 2 and _isstring(args[0]) and _isstring(args[1]): # interpret as date and time string import Parser return Parser.DateTimeFromString( args[0] + ' ' + args[1], **kws) # Assume the arguments are the same as for DateTime() if 'defaultdate' in kws: raise TypeError('defaultdate is only supported when parsing ' 'strings or using keyword arguments only') return DateTime(*args, **kws) elif len(kws) > 0: # Keyword arguments only; add defaults... today at 0:00:00 defaultdate = kws.get('defaultdate', None) if defaultdate is None: defaultdate = today() hour = kws.get('hour', defaultdate.hour) minute = kws.get('minute', defaultdate.minute) second = kws.get('second', defaultdate.second) day = kws.get('day', defaultdate.day) month = kws.get('month', defaultdate.month) year = kws.get('year', defaultdate.year) return DateTime(year,month,day,hour,minute,second) else: raise TypeError( 'cannot convert date/time arguments to DateTime: ' 'args=%r, kws=%r' % (args, kws)) def DateFrom(*args, **kws): """ DateFrom(*args, **kws) Generic DateTime instance constructor. Can handle parsing strings, numbers and keywords, but only works on the date part. """ if len(args) == 1: # Single argument arg = args[0] argtype = type(arg) if _isstring(arg): import Parser return Parser.DateFromString(*args, **kws) elif argtype is DateTimeType: return arg elif argtype is DateTimeDeltaType: raise TypeError,'cannot convert DateTimeDelta to DateTime' elif isinstance(arg, _pydate): # Note: _pydatetime are subclasses of _pydates ! return DateTime(arg.year, arg.month, arg.day) else: try: value = float(arg) except (TypeError, ValueError): value = int(arg) assert not kws return DateTimeFromTicks(value) elif len(args) > 1: # Assume the arguments are the same as for DateTime() return DateTime(*args, **kws) elif len(kws) > 0: # Keyword arguments; add defaults... today at 0:00:00 today = now() day = kws.get('day',today.day) month = kws.get('month',today.month) year = kws.get('year',today.year) return DateTime(year,month,day) else: raise TypeError( 'cannot convert date arguments to DateTime: args=%r, kws=%r' % (args, kws)) def DateTimeDeltaFrom(*args, **kws): """ DateTimeDeltaFrom(*args, **kws) Generic DateTimeDelta instance constructor. Can handle parsing strings, numbers and keywords. """ if len(args) == 1: # Single argument arg = args[0] if _isstring(arg): import Parser return Parser.DateTimeDeltaFromString(*args, **kws) elif type(arg) is DateTimeDeltaType: return arg elif type(arg) is DateTimeType: raise TypeError,'cannot convert DateTime to DateTimeDelta' elif isinstance(arg, _pytime): if arg.tzinfo is not None: # Convert to UTC offset = arg.utcoffset() # Another datetime module quirk: time - timedelta # doesn't work, so we have to use a different method # of adjusting the result return DateTimeDelta(0, arg.hour, arg.minute, arg.second + arg.microsecond * 1e-6 - offset.seconds) else: return DateTimeDelta(0, arg.hour, arg.minute, arg.second + arg.microsecond * 1e-6) elif isinstance(arg, _pytimedelta): return DateTimeDelta(arg.days, 0, 0, arg.seconds + arg.microseconds * 1e-6) else: try: value = float(arg) except TypeError: value = int(arg) assert not kws return DateTimeDeltaFromSeconds(value) elif len(args) > 1: # Assume the arguments are the same as for DateTimeDelta() return DateTimeDelta(*args, **kws) elif len(kws) > 0: # Keyword arguments; default: 00:00:00:00.00 hours = kws.get('hours',0) minutes = kws.get('minutes',0) seconds = kws.get('seconds',0.0) days = kws.get('days',0) return DateTimeDelta(days,hours,minutes,seconds) else: raise TypeError,'cannot convert arguments to DateTimeDelta' def TimeDeltaFrom(*args, **kws): """ TimeDeltaFrom(*args, **kws) Generic TimeDelta instance constructor. Can handle parsing strings, numbers and keywords. """ if len(args) > 1: # Assume the arguments are the same as for TimeDelta(): without # days part ! return DateTimeDelta(0, *args, **kws) else: # Otherwise treat the arguments just like for DateTimeDelta # instances. return DateTimeDeltaFrom(*args, **kws) def DateFromTicks(ticks, # Locals: DateTime=DateTime,localtime=_time.localtime): """ DateFromTicks(ticks) Constructs a DateTime instance pointing to the local time date at 00:00:00.00 (midnight) indicated by the given ticks value. The time part is ignored. """ return DateTime(*localtime(ticks)[:3]) def TimestampFromTicks(ticks, # Locals: DateTime=DateTime,localtime=_time.localtime): """ TimestampFromTicks(ticks) Constructs a DateTime instance pointing to the local date and time indicated by the given ticks value. """ return DateTime(*localtime(ticks)[:6]) def TimeFromTicks(ticks, # Locals: DateTimeDelta=DateTimeDelta,localtime=_time.localtime): """ TimeFromTicks(ticks) Constructs a DateTimeDelta instance pointing to the local time indicated by the given ticks value. The date part is ignored. """ return DateTimeDelta(0, *localtime(ticks)[3:6]) # Aliases utctime = gmtime utc2local = gm2local local2utc = local2gm DateTimeFromTicks = localtime Date = DateTime Time = TimeDelta Timestamp = DateTime TimeFrom = TimeDeltaFrom TimestampFrom = DateTimeFrom GregorianDateTime = DateTime GregorianDate = Date JulianDate = JulianDateTime ### For backward compatibility (these are depreciated): def gmticks(datetime): """gmticks(datetime) [DEPRECIATED: use the .gmticks() method] Returns a ticks value based on the values stored in datetime under the assumption that they are given in UTC, rather than local time. """ return datetime.gmticks() # Alias utcticks = gmticks def tz_offset(datetime, # Locals: oneSecond=oneSecond): """tz_offset(datetime) [DEPRECIATED: use the .gmtoffset() method] Returns a DateTimeDelta instance representing the UTC offset for datetime assuming that the stored values refer to local time. If you subtract this value from datetime, you'll get UTC time. """ return datetime.gmtoffset() ### Constants (only English; see Locale.py for other languages) # Weekdays Monday = 0 Tuesday = 1 Wednesday = 2 Thursday = 3 Friday = 4 Saturday = 5 Sunday = 6 # as mapping Weekday = {'Saturday': 5, 6: 'Sunday', 'Sunday': 6, 'Thursday': 3, 'Wednesday': 2, 'Friday': 4, 'Tuesday': 1, 'Monday': 0, 5: 'Saturday', 4: 'Friday', 3: 'Thursday', 2: 'Wednesday', 1: 'Tuesday', 0: 'Monday'} # Months January = 1 February = 2 March = 3 April = 4 May = 5 June = 6 July = 7 August = 8 September = 9 October = 10 November = 11 December = 12 # as mapping Month = {2: 'February', 3: 'March', None: 0, 'July': 7, 11: 'November', 'December': 12, 'June': 6, 'January': 1, 'September': 9, 'August': 8, 'March': 3, 'November': 11, 'April': 4, 12: 'December', 'May': 5, 10: 'October', 9: 'September', 8: 'August', 7: 'July', 6: 'June', 5: 'May', 4: 'April', 'October': 10, 'February': 2, 1: 'January', 0: None} # Limits (see also the range checks in mxDateTime.c) MaxDateTime = DateTime(_sys.maxint / 366 - 1, 12, 31) MinDateTime = DateTime(-_sys.maxint / 366 + 2, 1, 1) MaxDateTimeDelta = DateTimeDeltaFromSeconds(_sys.maxint * 86400.0) MinDateTimeDelta = -MaxDateTimeDelta ### class RelativeDateTime: """RelativeDateTime(years=0,months=0,days=0, hours=0,minutes=0,seconds=0, year=0,month=0,day=0, hour=None,minute=None,second=None, weekday=None,weeks=None) Returns a RelativeDateTime instance for the specified relative time. The constructor handles keywords, so you'll only have to give those parameters which should be changed when you add the relative to an absolute DateTime instance. Adding RelativeDateTime instances is supported with the following rules: deltas will be added together, right side absolute values override left side ones. Adding RelativeDateTime instances to DateTime instances will return DateTime instances with the appropriate calculations applied, e.g. to get a DateTime instance for the first of next month, you'd call now() + RelativeDateTime(months=+1,day=1). """ years = 0 months = 0 days = 0 year = None month = 0 day = 0 hours = 0 minutes = 0 seconds = 0 hour = None minute = None second = None weekday = None # cached hash value _hash = None # For Zope security: __roles__ = None __allow_access_to_unprotected_subobjects__ = 1 def __init__(self, years=0,months=0,days=0, hours=0,minutes=0,seconds=0, year=None,month=None,day=None, hour=None,minute=None,second=None, weekday=None,weeks=0): self.years = years self.months = months self.days = days + weeks*7 self.year = year self.month = month self.day = day self.hours = hours self.minutes = minutes self.seconds = seconds self.hour = hour self.minute = minute self.second = second if weekday is not None: # Make sure we've got a 2-tuple assert len(weekday) == 2 self.weekday = weekday def __add__(self,other, # Locals: isinstance=isinstance): if isinstance(other,RelativeDateTime): # RelativeDateTime (self) + RelativeDateTime (other) r = RelativeDateTime() # date deltas r.years = self.years + other.years r.months = self.months + other.months r.days = self.days + other.days # absolute entries of other override those in self, if given r.year = other.year or self.year r.month = other.month or self.month r.day = other.day or self.day r.weekday = other.weekday or self.weekday # time deltas r.hours = self.hours + other.hours r.minutes = self.minutes + other.minutes r.seconds = self.seconds + other.seconds # absolute entries of other override those in self, if given r.hour = other.hour or self.hour r.minute = other.minute or self.minute r.second = other.second or self.second return r else: raise TypeError,"can't add the two types" def __radd__(self,other, # Locals: isinstance=isinstance,DateTimeType=DateTimeType, DateTime=DateTime,DateTimeDelta=DateTimeDelta): if isinstance(other,DateTimeType): # DateTime (other) + RelativeDateTime (self) # date if self.year is None: year = other.year + self.years else: year = self.year + self.years if self.month is None: month = other.month + self.months else: month = self.month + self.months if self.day is None: day = other.day else: day = self.day if day < 0: # fix negative day values month = month + 1 day = day + 1 day = day + self.days # time if self.hour is None: hour = other.hour + self.hours else: hour = self.hour + self.hours if self.minute is None: minute = other.minute + self.minutes else: minute = self.minute + self.minutes if self.second is None: second = other.second + self.seconds else: second = self.second + self.seconds # Refit into proper ranges: if month < 1 or month > 12: month = month - 1 yeardelta, monthdelta = divmod(month, 12) year = year + yeardelta month = monthdelta + 1 # Make sure we have integers year = int(year) month = int(month) day = int(day) if self.weekday is None: return DateTime(year, month, 1) + \ DateTimeDelta(day-1,hour,minute,second) # Adjust to the correct weekday day_of_week,index = self.weekday d = DateTime(year, month, 1) + \ DateTimeDelta(day-1,hour,minute,second) if index == 0: # 0 index: next weekday if no match return d + (day_of_week - d.day_of_week) elif index > 0: # positive index (1 == first weekday of month) first = d - (d.day - 1) diff = day_of_week - first.day_of_week if diff >= 0: return first + (diff + (index-1) * 7) else: return first + (diff + index * 7) else: # negative index (-1 == last weekday of month) last = d + (d.days_in_month - d.day) diff = day_of_week - last.day_of_week if diff <= 0: return last + (diff + (index+1) * 7) else: return last + (diff + index * 7) else: raise TypeError,"can't add the two types" def __sub__(self,other): if isinstance(other,RelativeDateTime): # RelativeDateTime (self) - RelativeDateTime (other) r = RelativeDateTime() # date deltas r.years = self.years - other.years r.months = self.months - other.months r.days = self.days - other.days # absolute entries of other override those in self, if given r.year = other.year or self.year r.month = other.month or self.month r.day = other.day or self.day r.weekday = other.weekday or self.weekday # time deltas r.hours = self.hours - other.hours r.minutes = self.minutes - other.minutes r.seconds = self.seconds - other.seconds # absolute entries of other override those in self, if given r.hour = other.hour or self.hour r.minute = other.minute or self.minute r.second = other.second or self.second return r else: raise TypeError,"can't subtract the two types" def __rsub__(self,other, # Locals: isinstance=isinstance,DateTimeType=DateTimeType): if isinstance(other,DateTimeType): # DateTime (other) - RelativeDateTime (self) return other + self.__neg__() else: raise TypeError,"can't subtract the two types" def __neg__(self): # - RelativeDateTime(self) r = RelativeDateTime() # negate date deltas r.years = - self.years r.months = - self.months r.days = - self.days # absolute entries don't change r.year = self.year r.month = self.month r.day = self.day r.weekday = self.weekday # negate time deltas r.hours = - self.hours r.minutes = - self.minutes r.seconds = - self.seconds # absolute entries don't change r.hour = self.hour r.minute = self.minute r.second = self.second return r def __nonzero__(self): # RelativeDateTime instances are considered false in case # they do not define any alterations if (self.year is None and self.years == 0 and self.month is None and self.months == 0 and self.day is None and self.weekday is None and self.days == 0 and self.hour is None and self.hours == 0 and self.minute is None and self.minutes == 0 and self.second is None and self.seconds == 0): return 0 else: return 1 def __mul__(self,other): # RelativeDateTime (self) * Number (other) factor = float(other) r = RelativeDateTime() # date deltas r.years = factor * self.years r.months = factor * self.months r.days = factor * self.days # time deltas r.hours = factor * self.hours r.minutes = factor * self.minutes r.seconds = factor * self.seconds return r __rmul__ = __mul__ def __div__(self,other): # RelativeDateTime (self) / Number (other) return self.__mul__(1/float(other)) def __eq__(self, other): if isinstance(self, RelativeDateTime) and \ isinstance(other, RelativeDateTime): # RelativeDateTime (self) == RelativeDateTime (other) if (self.years == other.years and self.months == other.months and self.days == other.days and self.year == other.year and self.day == other.day and self.hours == other.hours and self.minutes == other.minutes and self.seconds == other.seconds and self.hour == other.hour and self.minute == other.minute and self.second == other.second and self.weekday == other.weekday): return 1 else: return 0 else: raise TypeError,"can't compare the two types" def __hash__(self): if self._hash is not None: return self._hash x = 1234 for value in (self.years, self.months, self.days, self.year, self.day, self.hours, self.minutes, self.seconds, self.hour, self.minute, self.second, self.weekday): if value is None: x = 135051820 ^ x else: x = hash(value) ^ x self._hash = x return x def __str__(self): l = [] append = l.append # Format date part if self.year is not None: append('%04i-' % self.year) elif self.years: append('(%0+5i)-' % self.years) else: append('YYYY-') if self.month is not None: append('%02i-' % self.month) elif self.months: append('(%0+3i)-' % self.months) else: append('MM-') if self.day is not None: append('%02i' % self.day) elif self.days: append('(%0+3i)' % self.days) else: append('DD') if self.weekday: append(' %s:%i' % (Weekday[self.weekday[0]][:3],self.weekday[1])) append(' ') # Normalize relative time values to avoid fractions hours = self.hours minutes = self.minutes seconds = self.seconds hours_fraction = hours - int(hours) minutes = minutes + hours_fraction * 60.0 minutes_fraction = minutes - int(minutes) seconds = seconds + minutes_fraction * 6.0 seconds_fraction = seconds - int(seconds) if 0: # Normalize to standard time ranges if seconds > 60.0: extra_minutes, seconds = divmod(seconds, 60.0) minutes = minutes + extra_minutes elif seconds < -60.0: extra_minutes, seconds = divmod(seconds, -60.0) minutes = minutes - extra_minutes if minutes >= 60.0: extra_hours, minutes = divmod(minutes, 60.0) hours = hours + extra_hours elif minutes <= -60.0: extra_hours, minutes = divmod(minutes, -60.0) hours = hours - extra_hours # Format time part if self.hour is not None: append('%02i:' % self.hour) elif hours: append('(%0+3i):' % hours) else: append('HH:') if self.minute is not None: append('%02i:' % self.minute) elif minutes: append('(%0+3i):' % minutes) else: append('MM:') if self.second is not None: append('%02i' % self.second) elif seconds: append('(%0+3i)' % seconds) else: append('SS') return ''.join(l) def __repr__(self): return "<%s instance for '%s' at 0x%x>" % ( self.__class__.__name__, self.__str__(), id(self)) # Alias RelativeDate = RelativeDateTime def RelativeDateTimeFrom(*args, **kws): """ RelativeDateTimeFrom(*args, **kws) Generic RelativeDateTime instance constructor. Can handle parsing strings and keywords. """ if len(args) == 1: # Single argument arg = args[0] if _isstring(arg): import Parser return Parser.RelativeDateTimeFromString(*args, **kws) elif isinstance(arg, RelativeDateTime): return arg else: raise TypeError,\ 'cannot convert argument to RelativeDateTime' else: return RelativeDateTime(*args, **kws) def RelativeDateTimeDiff(date1,date2, floor=_math.floor,int=int,divmod=divmod, RelativeDateTime=RelativeDateTime): """ RelativeDateTimeDiff(date1,date2) Returns a RelativeDateTime instance representing the difference between date1 and date2 in relative terms. The following should hold: date2 + RelativeDateDiff(date1,date2) == date1 for all dates date1 and date2. Note that due to the algorithm used by this function, not the whole range of DateTime instances is supported; there could also be a loss of precision. XXX There are still some problems left (thanks to Carel Fellinger for pointing these out): 29 1 1901 -> 1 3 1901 = 1 month 29 1 1901 -> 1 3 1900 = -10 month and -28 days, but 29 1 1901 -> 28 2 1900 = -11 month and -1 day and even worse: >>> print RelativeDateDiff(Date(1900,3,1),Date(1901,2,1)) YYYY-(-11)-DD HH:MM:SS with: >>> print Date(1901,1,29) + RelativeDateTime(months=-11) 1900-03-01 00:00:00.00 >>> print Date(1901,2,1) + RelativeDateTime(months=-11) 1900-03-01 00:00:00.00 """ diff = date1 - date2 if diff.days == 0: return RelativeDateTime() date1months = date1.year * 12 + (date1.month - 1) date2months = date2.year * 12 + (date2.month - 1) #print 'months',date1months,date2months # Calculate the months difference diffmonths = date1months - date2months #print 'diffmonths',diffmonths if diff.days > 0: years,months = divmod(diffmonths,12) else: years,months = divmod(diffmonths,-12) years = -years date3 = date2 + RelativeDateTime(years=years,months=months) diff3 = date1 - date3 days = date1.absdays - date3.absdays #print 'date3',date3,'diff3',diff3,'days',days # Correction to ensure that all relative parts have the same sign while days * diff.days < 0: if diff.days > 0: diffmonths = diffmonths - 1 years,months = divmod(diffmonths,12) else: diffmonths = diffmonths + 1 years,months = divmod(diffmonths,-12) years = -years #print 'diffmonths',diffmonths date3 = date2 + RelativeDateTime(years=years,months=months) diff3 = date1 - date3 days = date1.absdays - date3.absdays #print 'date3',date3,'diff3',diff3,'days',days # Drop the fraction part of days if days > 0: days = int(floor(days)) else: days = int(-floor(-days)) return RelativeDateTime(years=years, months=months, days=days, hours=diff3.hour, minutes=diff3.minute, seconds=diff3.second) # Aliases RelativeDateDiff = RelativeDateTimeDiff Age = RelativeDateTimeDiff ### _current_year = now().year _current_century, _current_year_in_century = divmod(_current_year, 100) _current_century = _current_century * 100 def add_century(year, current_year=_current_year, current_century=_current_century): """ Sliding window approach to the Y2K problem: adds a suitable century to the given year and returns it as integer. The window used depends on the current year (at import time). If adding the current century to the given year gives a year within the range current_year-70...current_year+30 [both inclusive], then the current century is added. Otherwise the century (current + 1 or - 1) producing the smallest difference is chosen. """ if year > 99: # Take it as-is return year year = year + current_century diff = year - current_year if diff >= -70 and diff <= 30: return year elif diff < -70: return year + 100 else: return year - 100 # Reference formulas for JDN taken from the Calendar FAQ: def gregorian_jdn(year,month,day): # XXX These require proper integer division. a = (14-month)/12 y = year+4800-a m = month + 12*a - 3 return day + (306*m+5)/10 + y*365 + y/4 - y/100 + y/400 - 32045 def julian_jdn(year,month,day): # XXX These require proper integer division. a = (14-month)/12 y = year+4800-a m = month + 12*a - 3 return day + (306*m+5)/10 + y*365 + y/4 - 32083 egenix-mx-base-3.2.7/mx/DateTime/Feasts.py0000664000175000017500000000545012133021415020125 0ustar lemburglemburg""" Calculate moveable feasts that depend on the date of Easter Sunday. Copyright (c) 1998-2000, Marc-Andre Lemburg; mailto:mal@lemburg.com Copyright (c) 2000-2013, eGenix.com Software GmbH; mailto:info@egenix.com See the documentation for further information on copyrights, or contact the author. All Rights Reserved. """ import DateTime _eastereggs = {} def EasterSunday(year): """EasterSunday(year) Return a DateTime instance pointing to Easter Sunday of the given year. Note: it must be given *with* century. Based on the algorithm presented in the Calendar FAQ by Claus Tondering (http://www.pip.dknet.dk/~pip10160/calendar.html), which in return is based on the algorithm of Oudin (1940) as quoted in "Explanatory Supplement to the Astronomical Almanac", P. Kenneth Seidelmann, editor.""" if _eastereggs.has_key(year): return _eastereggs[year] G = year % 19 C = year/100 H = (C - C/4 - (8*C+13)/25 + 19*G + 15) % 30 I = H - (H/28)*(1 - (H/28)*(29/(H + 1))*((21 - G)/11)) J = (year + year/4 + I + 2 - C + C/4) % 7 L = I - J month = 3 + (L + 40)/44 day = L + 28 - 31*(month/4) _eastereggs[year] = d = DateTime.DateTime(year,month,day) return d Ostersonntag = EasterSunday DimanchePaques = EasterSunday # Some common feasts derived from Easter Sunday def CarnivalMonday(year): return EasterSunday(year) - 48 Rosenmontag = CarnivalMonday def MardiGras(year): return EasterSunday(year) - 47 def AshWednesday(year): return EasterSunday(year) - 46 Aschermittwoch = AshWednesday MercrediCendres = AshWednesday def PalmSunday(year): return EasterSunday(year) - 7 Palmsonntag = PalmSunday DimancheRameaux = PalmSunday def EasterFriday(year): return EasterSunday(year) - 2 GoodFriday = EasterFriday Karfreitag = EasterFriday VendrediSaint = EasterFriday def EasterMonday(year): return EasterSunday(year) + 1 Ostermontag = EasterMonday LundiPaques = EasterMonday def Ascension(year): return EasterSunday(year) + 39 Himmelfahrt = Ascension def Pentecost(year): return EasterSunday(year) + 49 WhitSunday = Pentecost Pfingstsonntag = WhitSunday DimanchePentecote = WhitSunday def WhitMonday(year): return EasterSunday(year) + 50 Pfingstmontag = WhitMonday LundiPentecote = WhitMonday def TrinitySunday(year): return EasterSunday(year) + 56 def CorpusChristi(year): return EasterSunday(year) + 60 Fronleichnam = CorpusChristi FeteDieu = CorpusChristi def _test(): import ISO,ARPA print 'Easter Sunday for the next few years' for year in range(2000, 2038): easter = EasterSunday(year) mark = easter.month == 4 and easter.day == 6 print 'ISO:',ISO.str(easter),' ARPA:', ARPA.str(easter), ' *' * mark if __name__ == '__main__': _test() egenix-mx-base-3.2.7/mx/DateTime/ISO.py0000664000175000017500000002335612133021415017337 0ustar lemburglemburg""" This module provides a set of constructors and routines to convert between DateTime[Delta] instances and ISO representations of date and time. Note: Timezones are only interpreted by ParseDateTimeGMT(). All other constructors silently ignore the time zone information. Copyright (c) 1998-2000, Marc-Andre Lemburg; mailto:mal@lemburg.com Copyright (c) 2000-2013, eGenix.com Software GmbH; mailto:info@egenix.com See the documentation for further information on copyrights, or contact the author. """ import DateTime,Timezone import re # Grammar: ISO 8601 (not all, but what we need from it) _year = '(?P\d?\d\d\d)' _month = '(?P\d?\d)' _day = '(?P\d?\d)' _hour = '(?P\d?\d)' _minute = '(?P\d?\d)' _second = '(?P\d?\d(?:\.\d+)?)' _sign = '(?P[-+])' _week = 'W(?P\d?\d)' _zone = Timezone.isozone _weekdate = _year + '-?(?:' + _week + '-?' + _day + '?)?' _date = _year + '-?' + '(?:' + _month + '-?' + _day + '?)?' _time = _hour + ':?' + _minute + ':?' + _second + '?(?:' + _zone + ')?' isodatetimeRE = re.compile(_date + '(?:[ T]' + _time + ')?$') isodateRE = re.compile(_date + '$') isotimeRE = re.compile(_time + '$') isodeltaRE = re.compile(_sign + '?' + _time + '$') isoweekRE = re.compile(_weekdate + '$') isoweektimeRE = re.compile(_weekdate + '(?:[ T]' + _time + ')?$') def WeekTime(year,isoweek=1,isoday=1,hour=0,minute=0,second=0.0): """ Week(year,isoweek=1,isoday=1,hour=0,minute=0,second=0.0) Returns a DateTime instance pointing to the given ISO week and day. isoday defaults to 1, which corresponds to Monday in the ISO numbering. The time part is set as given. """ d = DateTime.DateTime(year,1,1,hour,minute,second) if d.iso_week[0] == year: # 1.1. belongs to year (backup to Monday) return d + (-d.day_of_week + 7 * (isoweek-1) + isoday-1) else: # 1.1. belongs to year-1 (advance to next Monday) return d + (7-d.day_of_week + 7 * (isoweek-1) + isoday-1) # Alias Week = WeekTime # Aliases for the other constructors (they all happen to already use # ISO format) Date = DateTime.Date Time = DateTime.Time TimeDelta = DateTime.TimeDelta def ParseDateTime(isostring,parse_isodatetime=isodatetimeRE.match): """ ParseDateTime(isostring) Returns a DateTime instance reflecting the given ISO date. A time part is optional and must be delimited from the date by a space or 'T'. Time zone information is parsed, but not evaluated. """ s = isostring.strip() date = parse_isodatetime(s) if not date: raise ValueError,'wrong format, use YYYY-MM-DD HH:MM:SS' year,month,day,hour,minute,second,zone = date.groups() year = int(year) if month is None: month = 1 else: month = int(month) if day is None: day = 1 else: day = int(day) if hour is None: hour = 0 else: hour = int(hour) if minute is None: minute = 0 else: minute = int(minute) if second is None: second = 0.0 else: second = float(second) return DateTime.DateTime(year,month,day,hour,minute,second) def ParseDateTimeGMT(isostring,parse_isodatetime=isodatetimeRE.match): """ ParseDateTimeGMT(isostring) Returns a DateTime instance in UTC reflecting the given ISO date. A time part is optional and must be delimited from the date by a space or 'T'. Timezones are honored. """ s = isostring.strip() date = parse_isodatetime(s) if not date: raise ValueError,'wrong format, use YYYY-MM-DD HH:MM:SS' year,month,day,hour,minute,second,zone = date.groups() year = int(year) if month is None: month = 1 else: month = int(month) if day is None: day = 1 else: day = int(day) if hour is None: hour = 0 else: hour = int(hour) if minute is None: minute = 0 else: minute = int(minute) if second is None: second = 0.0 else: second = float(second) offset = Timezone.utc_offset(zone) return DateTime.DateTime(year,month,day,hour,minute,second) - offset # Alias ParseDateTimeUTC = ParseDateTimeGMT def ParseDate(isostring,parse_isodate=isodateRE.match): """ ParseDate(isostring) Returns a DateTime instance reflecting the given ISO date. A time part may not be included. """ s = isostring.strip() date = parse_isodate(s) if not date: raise ValueError,'wrong format, use YYYY-MM-DD' year,month,day = date.groups() year = int(year) if month is None: month = 1 else: month = int(month) if day is None: day = 1 else: day = int(day) return DateTime.DateTime(year,month,day) def ParseWeek(isostring,parse_isoweek=isoweekRE.match): """ ParseWeek(isostring) Returns a DateTime instance reflecting the given ISO date. A time part may not be included. """ s = isostring.strip() date = parse_isoweek(s) if not date: raise ValueError,'wrong format, use yyyy-Www-d, e.g. 1998-W01-1' year,week,day = date.groups() year = int(year) if week is None: week = 1 else: week = int(week) if day is None: day = 1 else: day = int(day) return Week(year,week,day) def ParseWeekTime(isostring,parse_isoweektime=isoweektimeRE.match): """ ParseWeekTime(isostring) Returns a DateTime instance reflecting the given ISO date. A time part is optional and must be delimited from the date by a space or 'T'. """ s = isostring.strip() date = parse_isoweektime(s) if not date: raise ValueError,'wrong format, use e.g. "1998-W01-1 12:00:30"' year,week,day,hour,minute,second,zone = date.groups() year = int(year) if week is None: week = 1 else: week = int(week) if day is None: day = 1 else: day = int(day) if hour is None: hour = 0 else: hour = int(hour) if minute is None: minute = 0 else: minute = int(minute) if second is None: second = 0.0 else: second = float(second) return WeekTime(year,week,day,hour,minute,second) def ParseTime(isostring,parse_isotime=isotimeRE.match): """ ParseTime(isostring) Returns a DateTimeDelta instance reflecting the given ISO time. Hours and minutes must be given, seconds are optional. Fractions of a second may also be used, e.g. 12:23:12.34. """ s = isostring.strip() time = parse_isotime(s) if not time: raise ValueError,'wrong format, use HH:MM:SS' hour,minute,second,zone = time.groups() hour = int(hour) minute = int(minute) if second is not None: second = float(second) else: second = 0.0 return DateTime.TimeDelta(hour,minute,second) def ParseTimeDelta(isostring,parse_isodelta=isodeltaRE.match): """ ParseTimeDelta(isostring) Returns a DateTimeDelta instance reflecting the given ISO time as delta. Hours and minutes must be given, seconds are optional. Fractions of a second may also be used, e.g. 12:23:12.34. In addition to the ISO standard a sign may be prepended to the time, e.g. -12:34. """ s = isostring.strip() time = parse_isodelta(s) if not time: raise ValueError,'wrong format, use [-]HH:MM:SS' sign,hour,minute,second,zone = time.groups() hour = int(hour) minute = int(minute) if second is not None: second = float(second) else: second = 0.0 if sign and sign == '-': return -DateTime.TimeDelta(hour,minute,second) else: return DateTime.TimeDelta(hour,minute,second) def ParseAny(isostring): """ ParseAny(isostring) Parses the given string and tries to convert it to a DateTime[Delta] instance. """ try: return ParseDateTime(isostring) except ValueError: pass try: return ParseWeekTime(isostring) except ValueError: pass try: return ParseTimeDelta(isostring) except ValueError: raise ValueError,'unsupported format: "%s"' % isostring def str(datetime,tz=None): """ str(datetime,tz=DateTime.tz_offset(datetime)) Returns the datetime instance as ISO date string. tz can be given as DateTimeDelta instance providing the time zone difference from datetime's zone to UTC. It defaults to DateTime.tz_offset(datetime) which assumes local time. """ if tz is None: tz = datetime.gmtoffset() return '%04i-%02i-%02i %02i:%02i:%02i%+03i%02i' % ( datetime.year, datetime.month, datetime.day, datetime.hour, datetime.minute, datetime.second, tz.hour,tz.minute) def strGMT(datetime): """ strGMT(datetime) Returns the datetime instance as ISO date string assuming it is given in GMT. """ return '%04i-%02i-%02i %02i:%02i:%02i+0000' % ( datetime.year, datetime.month, datetime.day, datetime.hour, datetime.minute, datetime.second) def strUTC(datetime): """ strUTC(datetime) Returns the datetime instance as ISO date string assuming it is given in UTC. """ return '%04i-%02i-%02i %02i:%02i:%02i+0000' % ( datetime.year, datetime.month, datetime.day, datetime.hour, datetime.minute, datetime.second) # Testing if __name__ == '__main__': e = DateTime.Date(1900,1,1) for i in range(100000): d = e + i year,week,day = d.iso_week c = WeekTime(year,week,day) if d != c: print ' Check %s (given; %i) != %s (parsed)' % (d,d.day_of_week,c) elif i % 1000 == 0: print d,'ok' egenix-mx-base-3.2.7/mx/DateTime/LICENSE0000664000175000017500000001075307620177404017354 0ustar lemburglemburg________________________________________________________________________ EGENIX.COM PUBLIC LICENSE AGREEMENT VERSION 1.1.0 ________________________________________________________________________ 1. Introduction This "License Agreement" is between eGenix.com Software, Skills and Services GmbH ("eGenix.com"), having an office at Pastor-Loeh-Str. 48, D-40764 Langenfeld, Germany, and the Individual or Organization ("Licensee") accessing and otherwise using this software in source or binary form and its associated documentation ("the Software"). 2. License Subject to the terms and conditions of this eGenix.com Public License Agreement, eGenix.com hereby grants Licensee a non-exclusive, royalty-free, world-wide license to reproduce, analyze, test, perform and/or display publicly, prepare derivative works, distribute, and otherwise use the Software alone or in any derivative version, provided, however, that the eGenix.com Public License Agreement is retained in the Software, or in any derivative version of the Software prepared by Licensee. 3. NO WARRANTY eGenix.com is making the Software available to Licensee on an "AS IS" basis. SUBJECT TO ANY STATUTORY WARRANTIES WHICH CAN NOT BE EXCLUDED, EGENIX.COM MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, EGENIX.COM MAKES NO AND DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF THE SOFTWARE WILL NOT INFRINGE ANY THIRD PARTY RIGHTS. 4. LIMITATION OF LIABILITY EGENIX.COM SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF THE SOFTWARE FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS (INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF BUSINESS PROFITS, BUSINESS INTERRUPTION, LOSS OF BUSINESS INFORMATION, OR OTHER PECUNIARY LOSS) AS A RESULT OF USING, MODIFYING OR DISTRIBUTING THE SOFTWARE, OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO THE ABOVE EXCLUSION OR LIMITATION MAY NOT APPLY TO LICENSEE. 5. Termination This License Agreement will automatically terminate upon a material breach of its terms and conditions. 6. Third Party Rights Any software or documentation in source or binary form provided along with the Software that is associated with a separate license agreement is licensed to Licensee under the terms of that license agreement. This License Agreement does not apply to those portions of the Software. Copies of the third party licenses are included in the Software Distribution. 7. General Nothing in this License Agreement affects any statutory rights of consumers that cannot be waived or limited by contract. Nothing in this License Agreement shall be deemed to create any relationship of agency, partnership, or joint venture between eGenix.com and Licensee. If any provision of this License Agreement shall be unlawful, void, or for any reason unenforceable, such provision shall be modified to the extent necessary to render it enforceable without losing its intent, or, if no such modification is possible, be severed from this License Agreement and shall not affect the validity and enforceability of the remaining provisions of this License Agreement. This License Agreement shall be governed by and interpreted in all respects by the law of Germany, excluding conflict of law provisions. It shall not be governed by the United Nations Convention on Contracts for International Sale of Goods. This License Agreement does not grant permission to use eGenix.com trademarks or trade names in a trademark sense to endorse or promote products or services of Licensee, or any third party. The controlling language of this License Agreement is English. If Licensee has received a translation into another language, it has been provided for Licensee's convenience only. 8. Agreement By downloading, copying, installing or otherwise using the Software, Licensee agrees to be bound by the terms and conditions of this License Agreement. For question regarding this License Agreement, please write to: eGenix.com Software, Skills and Services GmbH Pastor-Loeh-Str. 48 D-40764 Langenfeld Germany egenix-mx-base-3.2.7/mx/DateTime/LazyModule.py0000664000175000017500000001046010522167402020771 0ustar lemburglemburg""" Helper to enable simple lazy module import. 'Lazy' means the actual import is deferred until an attribute is requested from the module's namespace. This has the advantage of allowing all imports to be done at the top of a script (in a prominent and visible place) without having a great impact on startup time. Copyright (c) 1999-2005, Marc-Andre Lemburg; mailto:mal@lemburg.com See the documentation for further information on copyrights, or contact the author. All Rights Reserved. """ ### Constants _debug = 0 ### class LazyModule: """ Lazy module class. Lazy modules are imported into the given namespaces whenever a non-special attribute (there are some attributes like __doc__ that class instances handle without calling __getattr__) is requested. The module is then registered under the given name in locals usually replacing the import wrapper instance. The import itself is done using globals as global namespace. Example of creating a lazy load module: ISO = LazyModule('ISO',locals(),globals()) Later, requesting an attribute from ISO will load the module automatically into the locals() namespace, overriding the LazyModule instance: t = ISO.Week(1998,1,1) """ # Flag which inidicates whether the LazyModule is initialized or not __lazymodule_init = 0 # Name of the module to load __lazymodule_name = '' # Flag which indicates whether the module was loaded or not __lazymodule_loaded = 0 # Locals dictionary where to register the module __lazymodule_locals = None # Globals dictionary to use for the module import __lazymodule_globals = None def __init__(self, name, locals, globals=None): """ Create a LazyModule instance wrapping module name. The module will later on be registered in locals under the given module name. globals is optional and defaults to locals. """ self.__lazymodule_locals = locals if globals is None: globals = locals self.__lazymodule_globals = globals mainname = globals.get('__name__', '') if mainname: self.__name__ = mainname + '.' + name self.__lazymodule_name = name else: self.__name__ = self.__lazymodule_name = name self.__lazymodule_init = 1 def __lazymodule_import(self): """ Import the module now. """ # Load and register module name = self.__lazymodule_name if self.__lazymodule_loaded: return self.__lazymodule_locals[name] if _debug: print 'LazyModule: Loading module %r' % name self.__lazymodule_locals[name] \ = module \ = __import__(name, self.__lazymodule_locals, self.__lazymodule_globals, '*') # Fill namespace with all symbols from original module to # provide faster access. self.__dict__.update(module.__dict__) # Set import flag self.__dict__['__lazymodule_loaded'] = 1 if _debug: print 'LazyModule: Module %r loaded' % name return module def __getattr__(self, name): """ Import the module on demand and get the attribute. """ if self.__lazymodule_loaded: raise AttributeError, name if _debug: print 'LazyModule: ' \ 'Module load triggered by attribute %r read access' % name module = self.__lazymodule_import() return getattr(module, name) def __setattr__(self, name, value): """ Import the module on demand and set the attribute. """ if not self.__lazymodule_init: self.__dict__[name] = value return if self.__lazymodule_loaded: self.__lazymodule_locals[self.__lazymodule_name] = value self.__dict__[name] = value return if _debug: print 'LazyModule: ' \ 'Module load triggered by attribute %r write access' % name module = self.__lazymodule_import() setattr(module, name, value) def __repr__(self): return "" % self.__name__ egenix-mx-base-3.2.7/mx/DateTime/Locale.py0000664000175000017500000001075012133021416020077 0ustar lemburglemburg# -*- coding: latin-1 -*- """ Locale dependant formatting and parsing. XXX This module still has prototype status and is undocumented. XXX Check the spelling. XXX Check the string format. Copyright (c) 1998-2000, Marc-Andre Lemburg; mailto:mal@lemburg.com Copyright (c) 2000-2013, eGenix.com Software GmbH; mailto:info@egenix.com See the documentation for further information on copyrights, or contact the author. All Rights Reserved. """ def _make_dict(*names): """ Helper to create a dictionary mapping indices to names and names to indices. """ d = {} for i in range(len(names)): d[names[i]] = i d[i] = names[i] return d class _TimeLocale: """ Base class for locale dependend formatting and parsing. """ # Examples: Weekday = _make_dict('Monday','Tuesday','Wednesday','Thursday','Friday', 'Saturday','Sunday') Month = _make_dict(None, 'January','February','March','April','May','June', 'July','August','September','October','November','December') # Instance variables MonthNames = () WeekdayNames = () # Format string; this will be formatted using a dictionary providing # the entries: weekday, day, month, year, hour, minute, second longformat = '%(weekday)s, %(day)02i %(month)s %(year)04i, '\ '%(hour)02i:%(minute)02i:%(second)02i' def __init__(self): """ Init. the instance variables. """ l = [] for i in range(1,13): l.append(self.Month[i]) self.MonthNames = tuple(l) l = [] for i in range(7): l.append(self.Weekday[i]) self.WeekdayNames = tuple(l) def str(self,d): """str(datetime) Return the given DateTime instance formatted according to the locale's convention. Timezone information is not presented. """ return self.longformat % { 'weekday': self.Weekday[d.day_of_week], 'day': d.day, 'month': self.Month[d.month], 'litmonth': self.Month[d.month], 'year': d.year, 'hour': d.hour, 'minute': d.minute, 'second': d.second } # Alias ctime = str # Singletons that implement the specific methods. class English(_TimeLocale): Weekday = _make_dict('Monday','Tuesday','Wednesday','Thursday','Friday', 'Saturday','Sunday') Month = _make_dict(None, 'January','February','March','April','May','June', 'July','August','September','October','November','December') longformat = '%(weekday)s, %(month)s %(day)02i %(year)04i, '\ '%(hour)02i:%(minute)02i:%(second)02i' English = English() class German(_TimeLocale): Weekday = _make_dict('Montag','Dienstag','Mittwoch','Donnerstag', 'Freitag','Samstag','Sonntag') Month = _make_dict(None, 'Januar','Februar','Mrz','April','Mai','Juni', 'Juli','August','September','Oktober','November','Dezember') longformat = '%(weekday)s, %(day)02i. %(month)s %(year)04i, '\ '%(hour)02i:%(minute)02i:%(second)02i' German = German() class French(_TimeLocale): Weekday = _make_dict('lundi','mardi','mercredi','jeudi', 'vendredi','samedi','dimanche') Month = _make_dict(None, 'janvier','fvrier','mars','avril','mai','juin', 'juillet','aot','septembre','octobre','novembre','dcembre') French = French() class Spanish(_TimeLocale): Weekday = _make_dict('lunes','martes','miercoles','jueves','viernes', 'sabado','domingo') Month = _make_dict(None, 'enero','febrero','marzo','abril','mayo','junio', 'julio','agosto','septiembre','octubre','noviembre','diciembre') Spanish = Spanish() class Portuguese(_TimeLocale): Weekday = _make_dict('primeira feira', 'segunda feira','terceira feira', 'cuarta feira','quinta feira','sabado','domingo') Month = _make_dict(None, 'janeiro','fevereiro','mar','abril','maio','junho', 'julho','agosto','septembro','outubro','novembro','dezembro') Portuguese = Portuguese() ### def _test(): import DateTime d = DateTime.now() for lang in (English,German,French,Spanish,Portuguese): print lang.__class__.__name__,':',lang.ctime(d) if __name__ == '__main__': _test() egenix-mx-base-3.2.7/mx/DateTime/Makefile.pkg0000664000175000017500000000153707003370253020557 0ustar lemburglemburgall: compile install # Compile target. This should setup the package and compile it # into a state ready for installation. compile: cd mxDateTime; \ if ! test -f Makefile; then $(MAKE) -f Makefile.pre.in boot; fi; \ $(MAKE) # Install target. This should do the install step. If the package # needs no further installation step (i.e. the extension is not # needed by other extension modules), then you can leave this target # blank. install: cd mxDateTime; \ $(MAKE) install # Test target. Should do some testing of the extension. Writing # something like 'ok' or 'works' and the end of a successful run. test: cd mxDateTime; \ python test.py # Documentation target. Use this to have the documentation for # an extension generated at the user. doc: # ??? # Cleanup before distributing the package # distclean: cd mxDateTime; \ $(MAKE) distclean egenix-mx-base-3.2.7/mx/DateTime/NIST.py0000664000175000017500000003453312133021417017463 0ustar lemburglemburg""" Access routines to the NIST Network Time Services. This module allows you to access the UTC standard time bases via the Internet. The two functions localtime() and gmtime() will return accurate DateTime instances based on the NIST services. Since access through the Internet can be slow, the module also provides a way to calibrate the computer's clock and then have localtime() and gmtime() use the calibrated clock instead of the NIST services. To calibrate the two functions, call calibrate() with the number of calibration rounds you wish to apply. Copyright (c) 2000, Marc-Andre Lemburg; mailto:mal@lemburg.com Copyright (c) 2000-2013, eGenix.com Software GmbH; mailto:info@egenix.com See the documentation for further information on copyrights, or contact the author. All Rights Reserved. """ import socket # This module needs access to sockets ! import select # This module needs access to select ! import DateTime import re,errno,exceptions,time # Enable to produce debugging output _debug = 0 # Timeout waiting for a daytime server to respond in seconds TIMEOUT = 4.0 # Port numbers try: DAYTIME_PORT = socket.getservbyname('daytime','tcp') except socket.error: DAYTIME_PORT = 13 try: TIME_PORT = socket.getservbyname('time','tcp') except socket.error: TIME_PORT = 37 # Known servers: daytime_servers = ('time.nist.gov', 'time-a.nist.gov', 'time-b.nist.gov', 'time-nw.nist.gov', 'time-a.timefreq.bldrdoc.gov', 'time-b.timefreq.bldrdoc.gov', 'time-c.timefreq.bldrdoc.gov', 'utcnist.colorado.edu', 'utcnist1.reston.mci.net', 'nist1.datum.com', ) # IP cache (XXX update these every now and then): ip_cache = {'utcnist1.reston.mci.net': '204.70.131.13', 'time-a.nist.gov': '129.6.16.35', 'time-c.timefreq.bldrdoc.gov': '132.163.135.132', 'time-a.timefreq.bldrdoc.gov': '132.163.135.130', 'nist1.datum.com': '209.0.72.7', 'time-nw.nist.gov': '131.107.1.10', 'time-b.timefreq.bldrdoc.gov': '132.163.135.131', 'time-b.nist.gov': '129.6.16.36', 'time.nist.gov': '192.43.244.18', 'utcnist.colorado.edu': '128.138.140.44'} # XXX Not yet implemented... # Use as fallback alternative for people behind firewalls: daytime_http_servers = ('http://time-a.timefreq.bldrdoc.gov:14/', ) ### Errors class Error(exceptions.StandardError): pass ### Parsers # NIST daytime signal (JJJJ YR-MO-DA HH:MM:SS TT L H msADV UTC(NIST) OTM); # see http://www.bldrdoc.gov/timefreq/service/nts.htm for details. _daytime = ('(?P\d+) ' '(?P\d+-\d\d-\d\d) ' '(?P\d?\d):(?P\d\d):(?P\d\d) ' '(?P\d\d) ' '(?P\d) ' '(?P\d) ' '(?P\d+(?:\.\d+)?) ' '(?P[q=|LG޲`95b}&7ݵ0 oΉmiD2ؚ`Egzx~uHp^1Lk24mr=<=?/zc4UIjb+p<{x SKCB%yK4\✵BH;UդU[D}ѯO|iD P6#\5ϳ }n}, ӆD^@m~hց<Ĺ&fGʊi{~<&.ʪXw'Š/D\lBHEV~YqY9u~> 8Q@]ئ!h\5wOM,cG'_MЉKh my{Do]:@Kf \`⨬9&k4H&v+L bMtHF'.2.rb%l䔀pVXQUOʟzQ[GA쩹$7&Ql+LĊJLCMҊۿN[ ^pMҪ|m8NFv$irѓ\)z^~AdPf3 JJpe6á)[7k_4fP/5Qⷪv, s-? !QԀڛT/k[9ZD@O k`D[W|ab ~Ɵ| 8 ? XGF|8ih(vq'}"Y9sSe|݇Y)C^"ҹ 1zR-b[0sȖWUmD+B{ƃ7QxA1u(|(,8 h@G-J}"\^P0wpWժd[ n.(F?z^ZwP͏LτA֧~w'"{0Cb5۶Sg~1壽 %CD~=\̒ֆ[b~ PnjP˗8n&%ͻ+C*\z#,2FURBHpLɗwlK~A{cx*cVvgN<'^@j8ag !`|ܗVwB"mlՕ%t ӟ}Fci&9Mc}(`6Ȇ%,gAZhw'x]MKIM|4\p0ߛE< RWF S"gH89 ->=[W̖=6>0i{)賊B琢RD 3 3=)]/>YCsLc6'Gi^Wa)HAM!C9<o )7Y!7 ifę;/ۈDѢbsI{ȇaUm3xƗlrt_tLD"B=Jjm=L9H@vS=GCRDV3 mЇN?pTlV]e$DeȕSnOu׊Ti0ha.,im @iha/ȅ Jz@]Hif*`<&|Pܗ;Z>yF&D;9Bl?qdfAtff!艮cLӷ>4lw|ϛ±J–5mQ-!n*wM^–JgHK:Yfy"{Qn{5 k@erkaVImɲy)Â2#C@/#VDe-RʒB#ҬGBxb,Ss-ϧY\[q% Gɧ>|ɛ8tm161>5-zl)_K$4C0+K d^4 QV)?f6>6&b-7ELk+M"=ҍ߲zkskLWW@EM0a`-؏En_"lpI(ٍ vLGLmpHNWګSH%!2~/y<߾_Ca6AZ܋1 vw6ʆLŽz j8?I_Qla~Η`q횃yp~'_ei;$Q<hgWO0e#cG% heFxkխ=Vb``q}Ho3F7ǒ6cZ&x^>@@q ؾpcPGjz"#Eu'( YiD9e{has+i][DdRfc.2PQo8)tsu ah:+%o61\dMd4<4|ִ:/,W) 31.n i|t9rsd1Θ|zjzW4~agXb51GFB6Qo7 Go5[Bi<4,h{>})X|> ^e%8c xu/Hqrʒ3Ƅ0_D_N6Kjn,]!)69FJF-e.MK5Xl݀ܯ^ qՇAؖ25oNkbǣ61(v @ὲvP^3 8!%gM3G ]~3y- e%O4"rƁ W9",4Msj :ay 86_*S| l)V/?A^;z~`#\M'xEۄ9_0Ҋl+ݘ脞p1>fRNQ %5W6/_H$4rE*>ނum)vnQF-V($Tfkooݮ/R$17Yc pMٽ_SS}Un(H:w"+9,POoo:uq jiP}-"a uIՎXF NGfX-(=lAЬT.`Un(]G5[82\g&R_+8hu ,t̟v! *"x^pU;4nv"SGi6$YJcq@e3C H('g~4XNh %i,*K;FĜ--"7^dh -œY*Ns},,秗 +2GĤmiH$ۃ ?SзwF!aO <$Kʉ5/V8Vuu%)& ;aZ 6t D Y!vbcPT3H!}8,GP,ËIyv>uX>IFE{;Z9YлiWRP`ǡiXb3=zf, gr7@ # EP/ּ-/*N.dZy;oUF e9QsF`rWT HVJsWe$wf+WeJpQBT83Z Pb(,7wd Q U4ʣ%äRs)lY,w={[EΏÅvUlɃ3'ұ.ErLI((ʓwm 龋RC1u)zk*A\LȌy3V{W8*d(%٦6LPJxdR/r|u!NsxpL{_;eXCк ul.:}\E߁f|X57p@jZ!_tY8SP ~7|4C?X`6a %0_"#PE`G [Vyܞߨ߯h\ e×Yz;zmnH,q1ˤs4/1qUI9HByf]#0/WSxp9PO gR<#=]$0 k ^dv}!掓k%S1Hu=>w~;N"̉4yoդsZo7-:XrPzVK~^k'r5@mi;H ɛMjNbβmXI@YO4LQorMR[=^#xrC\,㡢{O!Ňw]\DaT=Gy 1ÁCiRgZ qRJ3.X:(ic!T$(do;!L T^"ı.J> )OKUN&䞛QGWH$7i`jT ˺}]*l{SUB2LZr_E3A7qٱ Wadc!{얲 H&'vZ%Y!YI9iKԳp;j5IkF)5_EӬ%i2meW@ = n,-A0%q CG_S~-us$_pQk5N&c%Z;``a0eL ҏCXo i2:Zf2yf1UO᱂ ژȜUE$V5^`[Lx3rLd[5ͼ Sx[U>^reYɤ6yVm_-Qi>}Y"59؛)[I Ϸ@3;wG'%wB:GM0 Z-x=glz T cT8-chS-Eխݬg0P>*"4s!&Ui,Q^d6gӳ""(챀8d-s9u}Z}b6;?%3( e~=~Mx Reh㖹lcxZHzXxnI{JEP(KODr]L7k#L!JejXڢ{ M+lxlU.pu,wmXplBzu0ϴj yXYٛ/NhcdS[-g @b)M$*_d:t,_n|egn?zۛԄIx a΀Jmo}nj|jp-*n'"^*%|M%4l'K`hrAl|;deGwx$) HªQrNr:q5>? C+Zs+)-CxSvrwZRV$$4)Gm>:tDQJ?V{%wZs^mbBCe\it2zoK|1H>҃^a5W)Zn˲X{eϮoN2cǽXwhRU^m;( WvCuߏeWIGA"N~GQ1KZ W" 8In;1w z`s%Y +sm:ZR@cwגR#EI!Gm&Lw5[k\Q AW☐.%5.<7%C ݥq=,.‚:`G R+[!4b̈́ (A͔+Btњw+ ~F?arNcNE4cAYwhJ/&ѥ&:ҹ5nyY'2G%[l{n396A@s/_lSmԸfv"DE=q3Í`H0Yިvi9lf:R[jF.%@DsiYfȽ_ 70 z֋8a ¤qF.*qP%5]Mg;^Qλ[6 W<$غaa# (XgP)ART~xhLCCm%g6O6l I"aTV`FRCo#?f}S[ ܬLc&nH݆`+q{vjj9ox8FʊaP_F =, {uOpSzhT^lK/~%\dD2/`w޸KpŪ!=)!*X^FNՎb#XZy(;W;Gj!XlԶz=V)IRWG@4,h_l?m*! < 6938$P''Іzyو_]+,κY-:s܁ƏS}x$QbN@Gfg Zr4&n8,ysPor=\;Xy!%xtcڮ1#.I-m#J6|$*3XN . hj,w%/wL*`~U8tYkɯ&K4a抠T'gw2Hg0I]iã".f g`7_I \E3̠ cWжFW8ȩ(\y\mtRT{I9/)CS"tÑh?qZױs nWH^xHMKը);&`x5X9p#pX_?C2|AJ96e-F }/g'?o2+d3X\-`Xe;3HGn|>: E7oYMuX5=.,TO#ÚM`.(EC&و^ @y_TB?Tu|]6dFHzA< d*D`WOѢn&h͇^C-|E\v2jhvg- Q)pL?ff#\iu>mCC.z"A>Ƴzv쓅m(, d"_ue)<ϒzr1.'7m!K"Ӗњu?/F)\e:NA1`Ddχlk "O3CL0Ko endstream endobj 515 0 obj << /Filter /FlateDecode /Length 11623 /Length1 17932 >> stream z,>3}xݓvIH d:8GT'4t%ܴNSJU'҄L-T4W5?;|ɱ-= _>U{ᔌ6շOؾ?WV|K9F#pdM].v^޶$B7(S.^gG|M$"mmRGWOqS V""{12`4c͊Z1`;qiBJG PhN$\Y~"C㊾ +4ň8r˽))[!xZvm|S=7xZ wX(γV?UdaEQ -bJ_BzbH&,T>g~ })cvepeHsWz} (}%Mޑ- J<|͉/~:a6'uIkYS` 8P76L5Xy^?9xOBX}cPs"[z ZFo Z|{7p9.CNJۏf1iYdŝߘ}2!=a^ 4"Et)_]< $4KrbcY,„v0I4/ =@YE]r?e  gPgJф|M*B΅RG)JW'o&E6cӺ3@gDnles 6RQtu' gA |=a\JB-^^k"qZ4/SA N{ZP9%G4 4Oઃ$?Q "Rn W5esE 4waPb76E?)nZ,AEBe˩)%?,jfXHR&yDK, ɼ>ۯ3Mb#L] ^{t {_a=v!ݍ%yL^:1h8I'ßz.#6!:jyK--)?䁵hoówuqZԎbE%͙"N԰}hCR;X6,$)ĖY5UFM෭^='aُ}NBb;;j+IR'!-U=Ywd=*_aOjZNH:#q~'0q._= &g䵡e[ 1񮜅a( +7IϦ?0)Cw: ,ū'5sS#6ol q 7Pf#Y4*Q3~x"|j.!bJRRpۦw6gJ/{W,piF[TvX?MC"u[#Q{֐BHҲU:+:ڈQ˹ xՆ9x2wT Ѹ vv:1v@`.RYI7t.2})gWgvzjEL!]܅,o瞸r-<{ {䢠,NY"Dvo(ݺlrppD`|iYso9.i(-{?- ,S܂+hA|)x Z^̎F:ㅼmŜ0#SX2%5#ұRvОG1kab[9TŤνJ nO.N6hVuYkYa۵u*LLhxqt!N[':1HsJ3'DW*ØC4~ГW:o8O&_g!-n5WHsPFҰH_`|lAKIߎiC%DbpIfW-OINyBA*u?-9 OUȎ& P ;R7,S SmWws\R`av$>7%@` |!kT1&]>FߚIPsYtHl',kh >h9Pn]rO]Ub>ͺ#d}m.aRPcZl)[ՈDK 8=IX6ԖV% 2a\D 0!jc<[]M]܏ˤ6! Y᜽fשVY^ PX "' 9qNIXyq@%/YY{^iNPiOf@'e7f Y~ϋTTӬKQ0O?ZHj]r΅ n~ ;MF?4'kqoͰG b۟]ac (!gHPs/3V*#2+D*'NܹWrVV!D|%|n@L;&xۿ XitG!T)]8Y6 ,98aw0E}Cޖ_^$`Q1Q0 fEmj7fǼ;!TLANoLPsTNwpɪ (xԫ k?(gbN< KIד^E5` (-:teMr%ZzP( NRlB~-"#IFvIGZć(,6=77zd HڵsoJSu->\~Հ*#0{4')Du!6. zC:Snŕ(P,rh_IUA&l;*f5W'*=7R_vlW`]_3@ד  A>BإO">a0/TY_|ٷm} Қ8(Pv* jR"z #sFϪZӿ-A>|{UZz8ɞ9Uվ=%}EQYt h\wsbX\)3@*>qsGE&{).てLkFoÉNtowO]]G K&%B* MފAђL{u҄|^F\np7="[gL= OAv¥~@aDw\Z֗FRK\p}2`6a5wF(}l ۪%w-Sj&_[ď=yӺx|Y? VX UP\cYgm>D=~ֿ.96sf鍚5BkE jiK+u36IH}uA["_: P%}?у҄)tk+sz0jBBjij 0%u߲'$:KrZO( QhmJ?!޿8kQxK13A4Z]g.`k6A <)"XI" EVٟ[gap5RA˾imT]'PĮjZr4+A0à;3%^a8@]#o`bC*NuSn"X95#&w=ĺ/5ҭz d9 |):s|FLyk pJÁW9nS;3ekl1Q q;D\bɛ}YQƚzN{(Z[?\ot$ٶA?6i2? E3RH}xMI[ĿM}iуAjch SXh`Ǖ/R|&) `9l],Ĺ^(@ VsMmo9D}lÿE=>DJrux-Jr!3r3%(p-j:ѲŸ\զuᔠ>]$>h!tN|7NU $q&%pGZu/4i^IZ=\aYl\Jd,`v\n.ؐ^ÀA$_Gl #$[fg%~hUiwd?`(@ɇ<-~|!-"p3&XGxŦ{POeMt5E%Ș*"jX `:>ub43eJ 1IDO=oioDD*7=znڜ&~= ^49 B?u.(6!2A-ðhcBH\B3@:9'J*,oSXߧGQ mG9kB$EFj /f6hd}xyZwb?#Ϙe߁]aG1H( Lα .mlSVg]q1!W0rgV挣~F=>ivk.Adn{L<5kj7ivr@VY/ DK)H횓#ZK)%tEu?f[d."]t_ :q%ݏ]Qd)*l=>ψ&jŜQ)9KkuΠ+jCYBp꧟UGY_+Q7E̱%v"QtC*{iZ UE>:f%dm%8pZjNx&kVD3J@,z+S"}EJ׵6&>;_ ?iNd0 `=ڲ0Y2 t..cHc |s Vq=tXWMjvy R~ahxߝFG)'Mz i7qWY>BN#H -^ZObNCt7Z& <)~|+I>قEts he>jʈDT$`Q  m~{ԡZ Lj .!74Y\dU'аEƯs/-DȍJPB[ 95n=ȓSj.ΔߛG;My (PFϢDJGb t{l'OͥAZ8L So +F^L+YTg9ܭiM'tâB0Ojfʫye@'a kva'GĪ~s$}LCg &SM]ZQ`u˔=Ch$^E kNgK|8"ep"Iq[8R( 1O t_ʑp~܉'InK*.5q-GgJgN̅:.s1"N*KO:O \9p_}c*CóHh73{6a5ĪT@Mjy|R/֢lX_#<U skYIV-깕QLCpfU"[VwP& :cvw!}ZIv`4)E#zx"{߬>ֆ ^,Ln;1\I]h&m&Ssd^ hmyN*W4}V2~sվ8—.5Ue'\ <|awBKG%kx PigR_@;.rmrZڛv`%j[*-X( '東)˰yNB|'~$DSr>,R9]QvAއyڪ3m,Ahhz B<#=f>x'xsÃ4DL9҉C} 7ԅj:/A Pf +͘<29s &5@ /)rA㟬 E~i[GyF_Cuý0?,F5F`R2qȲZ 7U> j8cnы 7@*/KFbYϥBϣ Q2o>w z8T?x o,HMJ+|;l#9y|Wnռ"?3sb'o @ RpbPױ˕$P`/ރZG "۶G=&8hKh[\N2Wn}ˍj'!Eq'8P)m_]خB>'6JeSL6 Y lfIwX&b O©|KІ^OAm$oKS^>2R̯PpEw hVEj[i3 #x|=׋p3}|Q uu8s*nnZw@_`ـz7Ů|42vGWҿTN%.JY$hWn2dSK, YPWAt 3iB]{GA-*o_z1O7Rd+ t4ܽVW7;zӋ `4Y Azxfu_GM̝W Zw7h[c5U$oa0ء7rIl/q=vPfaw)ei1 v[Y&pDR`ҭꂾ \KrЋed1,CAVM!)+> PW5'a{Kit_8(t2st|EQ1u w1!gk[ï"GSw VĨ:wEJ6υE[#qMd|jSeۍA D0,HEUTk~P_'/tI/5Nߒ3ɮ5Smpa=ȸs'fRtm 7(ϒVRls܁qAŨb `ML&fuӌqǾd9&|$lN0Ntӣ8F=!e qn0DZ rf뀆`ŷ$L.31m!{OOp6|& %JJE :5ɗw] `:8Zw=\F,@;QP[Qk}sR=8wF]cE;FEo Abq,sڲfwM`U y8QB,KQƾ'-ns,I,{Ǥ|椇qK,_jܗ%8M$ QKLPHg$Hdq(eFdVV_51#yNA=G=/C'FҬSl\0 G.d>E;q8QM!JTvƈSz@DTZd{r WHOāe?*`!jIC:!GS6~+# hqWĒh?Wju`0BΠYkKH!5j'Ke^7-5S^㲼K {^&~YY ^ #n<01bŲjawG5(=~ss/5XI Hnʟ")yx.郜I6Å֔YO+*#!isjsoRzlь2exaH oGpDR%v6C횅\orTʖTR}N/Dks2ТhN]^RGCݶ^F (cݢܲ]mȦZk33`QipÂ5ʚXU_P'P|iaˑrtZ<&j0/ߢ|{8yp׮^}} py,a$bX Т\jy}IH}ƞn^A 7 '`#f3ׄ? d@$UBƬgv>߅"<7SZ&ؙ:Tà6y|aS+E`sZ4?T-dYG۹/%~a ">O,4k ]ࡾN~PoIje'/AzrY%5-9_{t϶k(D|A显kl<3}iOr^J 6IGXߙp9lLҿ&ߑڡF(LX`V)-uNz'9;I%9 ]hE#%/ 3fy:k33n)jʡDnpP2EE OծQC"8V9L6cU6ēAM|]TzM|}IjNYn~~e\Ef5_2| &}cFÀܱ*cg1extla1s$a g=eKͭ ExzBW*_dv|`H 2To6=wj[͑&s+cmle뚛"yD&M!m/h)EGa4Z &-2$ E=G]wi~Sm AY"am9Ԫ{%XR=NN*eH? `p*@WtK&wmGvъ\D* @>)%o:ܙwٳcVpsZ$1#{vx|6b)ꍆ݈jنEIKl@+JkX]]8ܷNF-2צv2j=bhz&Ρ^nOF]A Z?(ggt] J2F4+XLkl#]\ wvˡA6PO*3o*"6Y\P( YlN*ady- 3< Nj*&6dh (i;t*pN[녲&Ϝ0sؙtB5| ~g@+ vbm"4țj5]:n5ǧpIJs(Ho:}u#0ΏLzm>br`0Pj@e<[^2Iw gb(I{K8g\"8G=^) |}f?m%5n3;e MCFis՟̭2e簖 Gɣ8pk@[:05U{= 9 ]R{|S҆G>@ `14 )t[z~b~SxnIXb0P)_:^0w= endstream endobj 516 0 obj << /Filter /FlateDecode /Length 3003 /Length1 6364 >> stream [)f#z;'Abm*͵o`>7P`|w6%:erSާ0sH7,wPzޏdޞN5*x$$6Aempe˨^}J3Jm>|s*sBwQu4uWm]eteVJa2& ☉-B.2CF0EzL_M7eD(0xvZ{bX|Q@ p|BS2BߞKT=! =HqO z'nT#k^̩MBm,-FS z\nXż4%S` CLU BnnN:^G[EW͂#ƞk{RލJ$xAW*ٳP!Fp24_$՘/LK|l"W=nV:B>2w |ץV.]XFZfE.P9֤Xu=L,RywhDx)Ĺ>Hv&#\iINCZBڵ VI`TI٣Œ rCx<}0]L[$LO[$ū }`(XyXY{;0o\UydN%\-[k¤)fv^z'^zJ]JDHȓuLʛEPn+.\&g nRJ%W_]~q[-ڟ]6ve 4, oF-2,6R^+'7z_|uo4y _0b3eIs*Xp\o" ܒ'D}2ԃ_8BtпķM(AlN_mk -τmQӉSfY'/f@$ng&ro YܘٷMDs Dl*e2sޡ qM*IN<'պs&/|j?&(UtWeSߓp8Mtc7|q^FDgiO;6BIjsqmޢprzj5 ->ewҰxPz{<;_6VO^8L.549ljGĠ=\{Ղ4,#eakR!M@9Rȹqv4E0֠듳hS9kJw0Pcm`-jq@灂ozf}hiMڈB"?1m?r<PL*"JiC$do]&/]Q-T</&cD E+O( 0?8Đ֝Y>h:)o ECP .-'7e4D%emZ9 CN/*Y[ǀ cfQzKV{mĤ |VٌfC|ٸﺔF5ЈGF~ ^{-.OsI`+a  .N@&ی!hᇈ| u{4 .FxN50Y&2IS^^TMlK&bQp4yL7zdOII"e#"N¤E֕V 5+v̒57แgѦr:L5Op;f >ȵm zC¿;Y%uMTaW32%ɰrvos]H rY5+MsuN2#̸཭0yEfx#acܲ52'7-&:RK%fZdpLcto>$4ќ<}ofM0, ^HP"K#?E/bQۼrD u]{IꦰCZyACMx'OUXiV0%CzU$.&nx`8zhHQmlF,,_ϧzS[k^ޝˆ8RIuC|9f늝]NpM > #=]-HqGx>,C[T&6`K$+z=W08Z:R~ L{Pmm!YD s%~I-xC 9 ;D;JAtq-[i^0Q4mŧ/ nKKp2̛@.n8Į+H.F(;JxǸaC j"i)WbY=N endstream endobj 517 0 obj << /Type /ExtGState /SA false /OP false /op false /OPM 0 /BG2 /Default /UCR2 /Default /TR2 /Default /HT /Default /CA 1 /ca 1 /SMask /None /AIS false /BM /Normal /TK true >> endobj 518 0 obj << /Type /ExtGState /SA false /SM 0.02 /TR2 /Default >> endobj 519 0 obj << /N 3 /Alternate /DeviceRGB /Length 2575 /Filter /FlateDecode >> stream ?*tbB;dlpfexm7ېc.d#*Slbu((Mld< ,y ._{#T+*rp{yl3-5ehT?@ߨ3& 5#{O~v puǂ4M׌YdGrsc/cm=ty\(Ꮕ ®uMA>6zߢi8z ZJYY>™8&adB)ldYSeM $^'/3#gycmк7k:R!4=}p@?3,IPP:Xy|70^ᆲ] CjZx##Gi:9|(פssm:hK"E.F!6-G֤?)svJcP(rPYwuЧpฃ$|q~|Kwe;C5%B`c7D0yjn݊NfK.$h\3 dṩ1]Djh2z-WVm yWǖJiu]=l)CB" E(QIvu"*Xwq:ǥO37܊JMX p3T0i,p$;g ^֞TÛRN Z\t_;䨰 lvAJ;A5kQUI g Z%qOI@xX.v_L*a1=N]K!Ѳv2͂UlS'vڨE"lGA[%996lf֤*I.Ii$l蘫bNp`R_B>KO3"D!R;KJ|zѮ$jTxr6[#;vyT||5zdg[$G`aN3d: PԩHŞ4'+xYD{j5!II:$~}ځNU9j}4avrdcED3IG|YjQI|&Œ6jbZ;jgx=` 9ZǼ3E`aY{q)o\!Z܍Ye=)=NKK:. Mq 931u).W\U8zx|;w-k,jTj/Rs3f-6ljEp5LD Q槨e endstream endobj 520 0 obj << /Type /XObject /Subtype /Image /Width 2218 /Height 3227 /BitsPerComponent 8 /ColorSpace 506 0 R /Length 239218 /Filter /DCTDecode >> stream \͈3+J@ȧhZ}&&<|k2 Ǖבm`vҿ>")_0V(7]yhTB=n !%K HzݟuxE{_hbuͫnFT>FXB ؊O< fKVE#SdW&J8׾IC=6#5\8Zj‰pM cA͆:qPe_ǨWĆqA>dK՞ x*H{pP]I[+&ag>u9)a&<(A+T=d$M=Yh0Z.xlT ı`O< #^"|\abvh||Kr yxdJŮ8ei&'rBe>W ,1A"!7awK{xp}qsӀ}ɍ#bڶ9(MCKꗆ|}ڸD]E>&j\#lpDl^)w2\FŠn:־ˬ[pv&cxLN|,PzT{z1-d9gdW69E(=_FȲ~ JlQUEk"}76'YS5'a\FsgmGl7;&*P7bEZIG fP,#D}Aׁ5K̴nas\xj,eˠ4hFR GAf9 ]a4wgQ 76$?Ė( G&F,Yp{0 &1́\d̡GȲDIZy̚܃r4CQɓdY9"vy.9q L,;`2buhOh[>€+覵HDjKقc.XێF0 ]~еaј_F]ۦqM?8\]pt, 0iX$UC8?61 P]H+%iԣC^艾*=?$5/|_0pE So]|Sl-w0Ӕՠ9;/Ns6K]? tΒmЃR ѯ] d+MH*>Mٷ|G"*1oޤPs).P@2JXyg^+Iqr S߄EcX*n=+9:.h u>-U,6]z~mZ=GxÙ?* |HKz]\(pɾcy`e#JK/ 7tm]b&r q)RwbdQȨ,zA=@Z/JU\9q̷l;LN7%2  nPGM^} +ow vrGxPJ 4-t)Cx=j~HRЏ? SGA vf xQ(Ƒ:ce?mP-:pl ~yJ&6$y^L$%-3h_#mL;k ñ=n+[aIwvIAByߝA7e'xÐ P0KH (…LsGM%:`0Fb:/ ܼy !y. JH>q.F`=NQ*t8$2R5ޠ+sLݹe1g ͓CVWPTc^˙X%%j/ #XOveV9bn@lk c@ f;*@tF*/[e`Ȉnds=p,Ξߔz!#یOΚQUγ(st! anwpXmlIP`^]uh>W.j /$erP#"H?n,N:S*1i|5>bR+xZP ~DV5a٪v5@,-ï -7NS}nUш~o-r\@qAHͰ^<\@zd5r_25m$ncޫ(򖝡\/TK=t(5ܮ HE@d4r.fLX6NJ rlt@O_ƲF}:82J`S .m.8Mr'j w1s3B @_9~6]KO$=rxwbGxA/\].@*l>o A7Nq@0%V}}p}B=[V9 #ВN*CUeLߦrh+`*ߖu/RĤ8W݊2-g[nKLlu6 .߭ˌH!bzQseRܦMReL l ɘ>-#`Djgϓ*Xy:}q ),Vs=CI{ BҎvZX 70tjk/9[Z+O"w/a']x@y: P/В)@RL2pPJq|+,5D !r!(@(' >s.5_S?s`<Z4 Pj>*iV鶚1g(ѳyngf*F8 4dFsKGieh?7Q-7r8Сsճ:=K}ŚPD2I\*K^; `HD$l ݝWOzF%f6"qXRlۆ565D [8b( gl3>9>r:~(6?] dCD,/ 0N@gJН-r7=9Q.yYzlg*vnr 1Q}8!n>#P~>C5UɄaoA4N!L0K3V .R.8r:< Ń0? ǰu з p=r$oc T볝Ӈ9<vTI-Pè;Z="v xoUV}EHJ`Ԭ$Ufh|[mɨZ)5,mTZ3u+]zg\6Q8;W}CN@BO#E$n۰}XY0 wp͘YB`XSE<ς0m)JC QSG%=U^<H$ (HJj/wjV焥hPVX=dR6#3̓}9Fw)^m.*$?C$wf}6Ƹf& NG8j;0`өv9sC9pT@bT}>@/'Q=FF)ʸn`ZLXn5_"+,&_=?2<=\LY@mt*Z4+LȷT ʕ 4zkB]LS6j#+&p ب: VyLqM7!!&灝{@RD@7O(gOse9?Ns$=6^!@ zfJߊNonjQkޕKxbm%f'(.V ~̍IGg!Ym:&u26h>pH,eaX/b'}+svc7v,|L<_-x`XNK}*OüsC7{cP9't7+qX3AD6GttAΌu9%rv˜9Rc)Ɛ7@ !4v zDe="X S^M Ԧ,8 uq|N$t@Ǧ YRĜ}yg:[8-A-R.X>nm u;h=]`G,>=e#(}inas)D&nX{0;b؍1?f(LyD,C6 '"-5N>}.9%`2 K7'Hf@~>g^K\$q]ZGq}Db0Wi*ox4x+A\$YZ%' )vˤmkyk1H"tNn:w@pQ-ۍM85󫊝(vȁ ڦ,Gl1Md +^)勷+A:`pGY/;Y2=行隡ka`a:WY bZhuO+AF% b!wJQTĝd =!lA\!`I_= V@buy%{5 ҭХ mg <~EPHY92'uneiK)|#.U> p js92NI:tXQgF9+H]]̎"vj&c^ȪzS(ҋ".ta r99OwoCGN=;Yڄĺ &7zYtl Y瘠]!!d{|yP #[LMv]}k*RT`ݿK4=ѡn!pd<^˘SD|]R(FZQczW15=",z%5a㋧iނ-\JмfT(5j=e,Av&R\qP=NʬW:&dPi& b t{V=HdO,"(QS,IX1 Q=õ zQ0f;N(#D}hM:yFj@x\ _R zqmUD). \K\H_p Ze#g=^ _(cҊסPjgC!νK*~]0T2jk}9Y2 ׊WCj9>MNНo:ݣ9 b~1jKi&1Xd x>myGr&1g0gz봝A Be+Ħ+SX!=?I?q.XU(,Lxg18U`tu'mk~+!6yďane!7+ךpO@޽:YdS/}/+{Sxdm%j, TeR~ՋŸ`39J}oYkG)6O͝}GkA1(P4=M&= 5mk%g 肇d e!rl\ Q 9jjOH=iMwJElA4+ʓzL俈f 됸5 FI 1+ExZ`̚634@G':"<ЕtQ6ަ/ ~[ZsP$Ol<%S|1"5@ rZ52m KW G̑xtR,kfxs IOYWqrgL#%ԟR\)(@eָ g#KA)$`&aX}abG@oZx+^Ѩ6x,r}4 ;5?ksp^&'|TOp:E=y$L|z{@ +^cf8) ]٦nwX _ EoE/{;|%E7nwOVkCzAk+?gɍDKLBPSW {sgw5*䉝O fL8)/w' l4 lq0&LbPI! 0ok7^ߺF!|!6w;2Ho+wtݨIธRi DNyExNSy nx;8Kp:I}ALggfR5¡W*Ҍ @)&Կ"dX Dlȷq rP9uZ;o*Hr6Yp8wc]@ zE^f:zFIELQ!yP>Ȧ ӈQd ~B@@4񏲂#L/0,ywZ7bڜgb/RÉHi/R~fQbCg%k7B}.l|p涏9 7QMgnbw X{32҅T0K^UR;nods={jFu"4)ɶ :jmc/zqLG-yulqPC_ۄ|I;? f<|u—k>pN_bPSEoȖo]֛Pg- >^ n/xYnҟSf[Fҧ%(F?lH g][|S뵺F)8rIu|bGȊڸjV->>LԿsJ ]BJs%rUQ !@j>K冶ʶ6kn4Oč(b ߞЖ͓Kd(g!ΓPy*nj. btQ1*Ul^@rHHLJ7tJ{ܭY9*JVۮN=~kKI֕#&IC(x $'r:~40:ZDyHLb%B٣Zw|n,xr`jbn19'E弳8?)~ޞ^qzd׊tgGBbvS|8xS/qOT3,;W;"> ְ.nɮ11y 'їg|:Ȅ,ӹF[9ߪFiUsث52Z! QY #%zAaeel#f MC)@z3X=7qoBa#S7)"3fyۮSxaĝ 4@?VڄQY`DYég/pȁdWvoӳU1Z-i15D^vқ-p6D|6BdK)nlu/M|p8K@aWuo0dd8L}{H@Nh՟l Z@1 #UB㎑Vh~ ~E~UEv:5ug/Lt%Rho=L bh̍QƧBPMXXǩGQg29Z@Fǡpu:WUSʀW.tGH: 3k3ƌ+']3q1#?`])5b"7,ghzpV1jMT n{Di6@嬅ԘKa<\vKGem1cSD`8Iy4&HpyQwMs=׷3}V!`\ _\܉"xxgę=SfT )1n f,eɤXzܛE\ <9UBʤ=oʲ(8,p&KTI/5Ŷy_ͨO[;8.+ *<%VLи3*n*=3%Wo8/0 L:Ói_ rkK'Hw%p &R64 Eà$I:Dx6Q=ҞKfDyO!jҌǎ8O;gZ}.]N7;x!uNlUUQ髡/Rb5.kלB#ˮ4HT~X4&w tvm/UECyCwbD^*BBys ՑS3ɼ- 4żѦXw=^,/>"1n:,@CrIV9b R۵9M a#!Q4[q$ ܘW0J%ϕ iBe C\ah*'B~7ewkIOt`GF$Auͭ‡ue|3;gr( #Xrk沏37Sc]7vDxk'5*ɋ ZOކS"g!sTu=ڛ-o Az ^9aaCx{ niqXgqL|>`LdT$ELzytPT>GeԵ33-ъ@MΨnߥtXO/o8KSW2VMѧ2$;De3KIY7Lm{Fy-LEubCpO+ӏϭw];1 N $EuD)"Ljw 5{X?6c zS\S36?0͇he8kst^9Lhq̯**m 7C#kkl4Oi)q>$1F?<_bV}'fw3gEnwL2ZXyY~t] Ee? ǘ,}}`U;k7>oIYL6 bUn7)gJMh/h:xŶw-e6ߟQ;?IIF7SMK )#h~( .ZC@GzE߭ں{RI8rHkFzj'&  |U\|%d'' s>Tcsma\7,ÝT9]%PAͶ5#+]N=騀m[$`M]%i!0at)E5qD^Ÿh`= z LX\)k${&+`*#u5j<AliSԜu-pyz]NЬ|c"c혴m#ΉvG2//+h<6k` -Fm}U5W 7Dtҡ伔yq)ɖ@&hԫ/|'>.T/Ve!yZg ey!cD?)̑ X*b ש9ˢa8 OʚYdP6!G= >&Ƀs›58b7pxKnb0#ND6Hfu ";MfC&#H_}dfũ0ۚ nLCt}һ^ t!]ɗ磼#iCԎ<I`Ht^ypAc ;83Nrp\ , H :UA4ܑP#PC޹6"5Bt_'ͫ'ʩ%{.UB"I|v3SFΧJ>A ڎn446_/DmpYAn|.i,i 䧒~$DU& )ӈ;x`%\q[vU.doGdnI3G~ }M[q 7Gt&H4hVߞ)D2=>?*_\z"oj)pΏg߿9V: Cz[9f%7j(}*C2 "\o?"#-~O|pΘKT2;X-5eɱbG1rfmHM1<9:$E4XW0'㠣:MWj=:dpP +σEz3@^I-bx=.R=]ȭ.A>>>[ueep6= V#,PM^,k?Z'ne:B^mMbBF2R=+KC xkhoQBF j4& bjƽP(6ejԝ6BⰪ`K G7nU2qrҔ v9WNOb9z{ H|yX|&XsHn,7%A-1\S`tQ]V<}`:ZF}}38`Ίx;B?Y6LjBEx}. fp`O$8I" ‘1VOnmaB<Cxn1n^|gͪCKWprvݲJ37&." :x}37\]ߣ|+x*wG`6vj݄qbnΨGLӔr_+ֲ vU<׃j;YZ0{W՘.Ä!]as`Nv=b[Ȍ=chv.r庩T̯U* ԿKrqEk =,^#V| m9գ)4=8t\~^UA0uк*P# *} {R[)ȫw^a~dC[CAӁ-7%͉iJٷm Qz @sV\ry7mmQ"bZ>;=٢5Jʿ3iwR*딬jo . D%u|Q\-j0D6Ϡ|Q$ds*M;:NaP(a]hk PԮv pS>C~+4at@if t}6:`u?nGşi$lDIIKi؜z,lu13ۮ赒7?7MqV RîLCE"'UI뺎WbnIy7BU-=տ~-7q>6Kӻ?5-4S.@{32'yp-u8R-k(RtQu1xKpY=*~3~Rb҂7^Z WSk?ɪ"+D4Ekq :Oy.=L4ԁq+"]G{&_[8;~rMqx>`Ҵ<+Sri-(@2N뿍`d05LlfJr unKE95;+b28uw$jr8_MW|2 z\/"v3K4Tԡczv%Ro721UjDi$S}a& b60q ' Aݼ43F2$$j@d.ԷnS4FpKsaI9xylx^j, y6j~%iEMwCjU;i^[%ؽ-s{G9V/S_[r*iRD3HϘg77ѧlJGf3D@9JŸ|(h}_ZcWL}_W۷jaߎ@Ɍwe~6 M^6ޥ}dfU,MLBHHqQ-fşjvM2;x(~Sx볟Pd)N,+*MA5p1ڢ5&edX(Q- A RIz4Dc^X a00sC/ a&Y'dsPjoN9Lv24]Ej'@]2]uaQ+^_</&Smp|OoVjn7:mP:3wJ6 (k(D'KP7b([N6^mm INb?"_J1S kFf!2TRQfeH0jLgUt yqLkYFRN_-xLjY竂nL)=T. w5aN9ZlQYEtq+I(w0j^ZXJ"xiKq0zs7F T?kbb}g0U^v/Ox6{\^YRsXC灿^"8Y\|.} ޽b}Ơ+$bpJ#P͹.r?LE>ģQ;=G|l HYz" a5vqgF:6ιtױ`ȬFb luxS9}hJNS5.y¤Y2v9]ila; `74!SqoH&UCU QmܥޟZr*mV%hLI*ЮxZ|m`>묮=oG<^ k GPN5Q^f~|ijf◔s0M#_ıe-.DI0Y(rzjcdCQmF ?JhgR"/ MqǠT'JuI1ggc39+ejD_).xa%~ Vz5,{<-!;ot.osUzt߾TQz h'sSR.YM9tTJ5EQ$l.OcP|. ~2m]AQFLJc"k4oo)rhHY}i'SCcR*>+|)Mm,\}HlXTe)d>R7Sv0&$ٟyGB3^$ 42@rd \ Fؿ~%?6*~_Nن 903,-+KqJKOa]Xj2Ǹys^WXUx$ ,YHqGS*Hi.n=ʟGz3ԤPI<[k )9W~ZH~҄,/}޵tJz5iq-gl5aJxoXo1QgU4"DFX@t+ .1)|[lYE;Ly\P$uҪI( <3i  RY_@K(ޤߠr60g:OY L-/ւ&AqȢy9D sݕ]Cְ"sp1Uۄr 5A,Z-y-Kd'.۱"R!4v׸ GhGa1~:11 |+MTl.JJlvK85y,GįC23e;4DڝW'U+%,n տT%iDq6|Hnw?Uj6e2,v=Oi_&(`Qj'6 >w2=*(hpVyvETP:Ǡn 1;2rI,onρҮx`jqQǂC7bD\V3Q ^iyG̴#˂X:3s)ЉL/iZaz9k="NDs/l)q0:{cP ,-e|?JB8ZcPVQkm*PÜ8%)?޾ܗǟmcol5+'Q6mIܶA]"Ҁ1Gym>3?WgobD݄/ӍM, %ϦmKv*||Nk 31R2DbںW!@NՇԦiǁyQצ \hE[ۻ&S`,?aDo {B1Uۥ X٣LXvRp85A.֟0Wx졗Q"F8ɗנ&&Jp*m9!6-#^~:YqX3~'n,-UZB?&9Z9Mq_X5ZG\}Z-*܂ol!<u0 iյ X-rWwd]0'6;(TklRh:ejg0T_L0!ۙ[8QVU]m@ T iDs $eH3bNhP"k=Dh cCv:)5^ uEo 2y;uyr t\dfo~ s|BOgMH??‚Ab*e OStM->$Jw/ve5Amt ;"TIۚ8\>W} Snlc <R mwi#UKVZZɬŅj$Jsv ݀l lv;4>xһ@On[91𚲄a@F\'h6to)Z&gc#2a$bb:ݥ2KoM0ۈ䐷o[r.k3/\sQ}6@"Ft%< !ADD_&JV5jkMJl+s=f?lv&&23X^5d5BT+sYe9HBi.ڰ_=nD& 2r [<?5U'0(#C _d[NG߬ΑkJ7/MFo{SpHC6W:>G~sk)Tz"E[/);٨iI7J'Ȟik{#t`˵q^^lk~kܝO2K3> Ž4Aty%|W$4"]-m9`3y q6w[fnn+IO)/b>H8c3DvȑW4r<%&2^~{t|d5;d myM={S"kHrv`IhuF'$l4-l2.u^U! ׵/ ջJF"^)GkEK^lQ*zhluPh+]RKa\=g)+;5" 5v(`V=7?l5-9޸´2-gcr۰:kRiPCF*(0,( **ҔN`欯 ~чî掍â-""j`V%2U W*0 `QrjM{*xI:~bkdOq\4V|ݙEaLZ,H9ѤU Ru'ƽE1~`^!r{Uf ( Khg&p9W|SE糆~+ zh :D>P[vBnh^_hzt}mw6c>MM؁l MYJ)Z=L { !\!lU..38'/yI>P@J'Y6UaA*Em\>\ 9g=>I"4YDpk.ާ[2\ ٮk+9zp,R<"͝E(3gmDnkc^e*one06r`# =omv`_G i8I/3;qgI %XPE\t XCٞʨU>@/XVWDLcfkD{ *7;4SqCT3\oS| w5 d@ʤHVi-S[{ˆ*3aks,~#O <ݘnfXvJS)蚯Q /ynjM}b:>DR@ u2lJ<؈Tnkd&ڈ#Fm+O'鲰s(!ks9/Dpy F&t/z젮\f${P_L..f#LjɟTi^{Ddz3iV b0>9:L EJ&m%W WFJEXʂ#0qD>pRCsD-,ߥ2#| 391$ow#N KbFU 'H7PUGTr.Ml a/nn蘳1FȥG Em^igF??M :WD/ɚg!mb 4a%JQ-ϥ|6*%YUa:USy`c]>u3Qĵ%c_#=[/=8C',[8C9O@Gtà:Omr9rc߅uy* N eϜo-bDWU^ 767%atwjȬBAg $A`; Ir)$s%|G9;apf)/<}mbP)wNZCҋ^InWD([Kk0GQgBCqVJ.LSYF֣6ԣuқ> 9Lx1؉gVR>YKVmC8'[/mf/=\&,7n3~"6DwH׍ּդ594}fn:g$yfR˟g >Dr4 >w;W)w8)U{0^6 w ;^;H"bB6> X[~IȻysШXgrQZ#,b-AzlͧZxHL-'۰`bتj0ӓ`Ь<6SPmhki9HQNߖ) 5HsYGuB^PXB֪ Y`\ߢhAoU&]2t)@ !CQMPWp8{_bǏ`8"k }3W^6]E~:Q(Q=D́+]!bA%Ht}pT3Pto){Mn#c5lA6X2 K>9*h\`c24[!W5%.*ja)d~.Ř77kaDgԽI%؍s>S }[Z8\$WD2=Ÿ_Ѵ͋$Tͭ$ku$rhbPKw1໢4=[5c70*J~!;pYk]kÝ$q6Wq^=0ΏDUƵ8HS:0>"8sHM<@ɖJـuQ<魟q 0L̕7v3-6 z?VA+ BqE2S5oE=@QJp-~6_C4n C<}ZJ92yzG+5wU$Č ~S\!%ϖܞ(G-iH{)G/䟋,>%@8z#{.J#׬5TtrK;Y914U|#T`kRJ <"qQU|ko\&jאpGU*=,J2"Ơdjuf,7y Kk,ܕgh7񁄹w[ݬs+Pl75+)` z+*gMaӪ<™ j@ _3O>~U>ΧK&6]جyS /7uٝTz+镺r08"fmGlt P 4ϡԴ9 @(eH+dFV NUbtao6_SH悤 sKTxnq?h4ڠz@9ms!g9D-/E;|[/cz.Sn!RXNhvH0OP|&ZEL䇥Eư%~O%Uo?A&v`,]exf'Z9y[X\xahhZ 5AMoZ\k!&ToAl<Dhna#huZ   !Yc~ǽaV/peJJ-eu89"\JyxxqJ^yGVJ{ >Us|ՓceM[Mr(E`ӎvi|v3+ wX4-\h$kynE Tq蔾w4*\n"Oc\gIX/ާx$?o<}jʛ&<)Z!s,Uw[#O/}D}~]mP۠vgkK}hoj71%u%p+o+seyOU'SHY4A^S%¾)RZ!X?sU^9`ցl4_-vlޙbc^لgҁA>Sc!AO[~ 4S=ۗm`$4d\Z>?[-x8 #̥P(A/L3j͋ޖdfD2k6o%dPG>#B0 g{T$ʈ"fdyyiH5 NW̿B<@I{FqIzB3X 5B&JZM?0 z\ix\\`x(b' XjʺƸXF(7s<3 ye mXl`= wvĚC7~lѻ+z< âs ٚB3mw_{r'o]c`xI7WMc6h)<ص;Y8& #lIWpQ0$g%:mBŘ43ܞU3^Ŋ PooѷYo Qδ1WKQ- .aU8zb2˰-{hED;,M֣ł"t%%v<;z'Kk?+Fh vIjwd7$6 `Jb`\=4%&KmiJ|QHvK)8h4]V /bI秔U#06`}(;~e>946v"E_1^ք7g ICQ<tr{K |Np!,|,4/VIrԔ~fɿ=͆%xa#wlFw$馌`D V-Af=ߗuƤ]եS:q8Lǎ{}4Es>]X'z>>8.|s[׏]S eK"=i& 6\z-U҇>hZaS1Œ{kCoE<\-*OƮfDpwd]\hYmrZ SXd= yx`ޭbx`O \p59h>? +u^gU-Lcݪ~An15g9TgXbfNň!9bW=X|g*L޺B ,;0Ѥ}M\1ck-ódL-۔~خT돲0cl40"qKsI(Tu=IWPQ B<W%q&RMv/\ hĤa!'s&ZA3mNi B4I{s/IZd4ԴwqPd,(#t#S!L;m|~:J}*Dմ$>KF;τKUp-CJjj VZ׷CoXu:/8z PB4I/|u  R;h(yA8>c#Ee+SKwzپ^ ;PLu_jrh݀C~UQY9G Ve7 NpGOXY]`S30* @md;DkSg🂈pul!/zJxf[Hjnruo SxVG0ޮ }<6"44o @x,ZYMf}`6U u?^a\=h^G +هԻu)؈`.nMoW1WOpK߆ywpt#i/p98WYYϘ.C{낵:j }uEDL  .X}>Z1<4"=&P[<{_8ScIJW#P.&7b ے8ܑQrxFv/m[p7sRZ0T^tr՚EJ"L/ץs/;ۊDEo ,S48)-WHu> j}@ˏIu 7+:yʪ<+i߷2v,ɸjj>w .ng6bŷ}?kqdsSȡrG^F JcC8ܐHcԂ!pdÜRХ Nz7Pe={3(I>Co &Y):syȧ绂P.1Ab1K3NzJHZm_Yļ 釟C =Y@v5E"NjdC7Z Ưځ!0䊪U76օ1f0#)FC9KyAն2Ӱ^a] Oc48+YO<4H`'|U#?%-8Th4VMem`aCl']յ-@;ofM~aò~Ʊ؛h|H>&~lgM& \pHFu$%;\!DP;OTVi7 Mv ;3%MmM72 ,h.YL W>y:@WFJ%p6j#DΦP`WZFOazn Es3D prR0h %4{(OӜAbA8ϩ^Iq~'$ʕř^(fd||_l"͔LA^&\n[CNVH%e2T07YW 4OӤgCbY ʡqD!дH9Vҩt\Ԁ[/Sap6*ց>[a9䣬V^ mGv~-Ye!~ 4xyȊ5X_r$\oGu?wUQ?"|sd&H sT:ww :I^xX1Cdާ2Y` FǺ"]gEgxb3|-̊?CsV H>+ A@@D6 _zw3_$$4}I(QJNlXFu`F Dž&5 {M:_ls,T{DŽ*AY߰(Iu,x):<ёxh g'CF@d%sx+Buq3M#Bd7pd Pޫ?\3 gӖΫPnVPnKcxM xΰEgj|gIcOb;ûPMUs pl#9`!+ǞUVVW('YF0'{^ . YS&M{/De|`笒au//"%- u\)9%zw\džGsTݍJnX?ckA⭁-nHIT8_|l]˻#оE[Xu,Y dZ08lcgw/͸9>{MZGIN>5aowwtBZ g0tێM5A'9҃ܫd ެB4^"' I>KT@ " ޮ+u/MF<>*K*ł$k"#zDx@BKF/Kgf6Gws x vA_s2NZ/"Vqa:$)&dX>zd ~hސKH +EU+/q@>l~Ё}L! +'憠cLZVB2x}vuvi tPV_>աŵ=v'(\Q"~?dlZoG>a Ai0րB{"XݎPdB^sMq`7Y9nS; h3(kp7ir Onj;(;2Wyu2㱬9S t~RrP1 j{D8m]($mOHqO[3:wUڑfw ˕g27Ȕ{Gs̈́DqF5rRDL϶D׺BLzK)*'[Xmbk=*W c8`4=0g$eQh#>Tp h"K= l>sFv%`C INGaPc VqplPCW$'0xveD729'yWE",%Vor!eLk~Ӈ6o=]bi3DܶUV(_TL2J;ygIiG5G8|yc޳~8kLbՓa)9~;vBZ:1dt *6#Aw,&kQrY~Ǟ`Ɉ [L ..H'n&BOX}Ϙt==57!5WWIf)BL#DzQYcleLyK"bHChhAx5vθ4¯a`(zRTs1;l&2@mrjd\5ʇy)2-i= Y$m65\[Q{KBǞEE,`AxB*Dc]f~/2ٌXT-8uKkZN?>ԊdvaKT)S.X;riȾZ갼c5%zǴnڊKlq~/-aˣ;&~QLk=\Pl= Wl 0bl9/mʁx / W&2XJH1WߎYаPh& vY %a b@y&lnic(i>kh6 (?\dž&Ȏ| [nE Bsp@!9GppUdf>i1VmM ܼW*|} Tj)L.>@vǖEm0i+``xQťz)ZHrp͚N#76&&-UzX$N 593=lٛ*Fϓ狼sra"àZȏK)LkU)lW=-]6\2Nξ7qΎRw |;\<\x,ɏX2G D_#;k[.ёnģq%6mڒ R_ c*њ>x+BȎK|< ޣ/0 gY=}h֯A6^3>VV2 P4eQxXJOd`t X+3 N ўсʢ\4}^6w两\r%0 cBRn$*N2$ثFwGcpTsBGwPF`!:PZ+%E4פ@$B.Vt:-v|B6*dUKҞA+ȊKΜF`c3?MϕK C0Y.%Ӛ&Й0M>;!miƾ*dnG7s 0m)nۡGsFOG[t#Z! Rvfזomrt^+1(n0Ղg1_XjN761h7#8S zTb!Q!(x:0oxuɡɋt"4 3m 82[/tbF' 2SQش$"jj]T3H=8h|`g|}l^?nsYjuk9]CmI@!`sAY +W%/VO}#d6vK3sێLЧ FSڃͻaN؋j5׈Z#x}|hBp[ܝ" [FPan"mh%O|aRc hgWyff rJ(3$A%N>>-q?f-]4WX-@ٺfY9ܽH{t$<#2 z L?+4YǮL_A)gVZ"Ϯ-?T}~ 7?a7G( ~_ t,p=SV-p r>"Zm7nM]I k3'>1`PT=(,6Қ(umֿq3#xlEHUP,?RwfDkHm(A#k<6i2iO ZA9dI$!Oۮ1Uebo\jZu7ݻ? yw[]؎߳u>` "(l)qO%1)nB4++q`5-' ;u:SGh."fnۆOoLi]P;oUCd伔:SsĊ7y 䢴"b~VS& pn3F_\*_4`&kZs~LOŃƣJI~( 6:|KHgؖJ&y3K:az[: z- -jo?J12)Zk 4^#N#3 ZPH!=vwF=Q [I'6f_y{4y(BLdE5:5m&S"cD#p#с:%K6 x`Oނ XReyU}27І{pX\(y"a 5#Q}T$ĵqdE~HӐ^ȒVx:u6PWWǚ@&FAnx'z]RxWBA?.'fGr6{Ή2$Cq7=`wC-R)lu:K㨄JdPp!$eh We9bcMn"75ʙRT=;06GXr9n9\]P=+aZXNKZiXfgb㇄2W_̹gGTxNPX&jk 3Yς9&|X貜BnG(w|NGsM)$.rK\޸ B> 9"zJ")ah ],:  Xlޫ@,  䧲X2Ypڹy0R$@j/0~fGGHsh`^ձ4Mϻ%@+e=W.Ǘn llF$ΐ ɒ$gOaHje+cT˩WDgH9(s7fyHݱi ߟtc:fŢ5#$29*z>R;3~gq^aId Q*@ؙ-uGodEnj g?=nDlSrN+_\ϋ?@]_<ᙔ"ʬ,Hܟs^$]r7'޺丗ZV|}gmEV`dz2M}+J@DsNm2gcD ! }Oxݡ< ڵ#JN,WƘ-q==SD2}&Eb){?˜8475Nw^H|Ut$< u{uTT!q[8P)g?|!JҶ'$>^L jԩ~~׀Lmf0Oٟ$UsbC ߼qNR$r?-BNg~FAA1crWhړp-sk~iאuT=!S,r IL.vʼn|V=\6ANlde͙g4AJ;Do]˚EkhG3DyRnlblR~.*S7L0}W;6 RQKW§%x4`˦-ozR ð#C? :MjEf`A~#1xId{P& b?KU=ŗE~KY~m1p+xfQRͩ`⻕&-7EmⰷΧ(oxI.\g:7 9ɃN O񡹮rV+g0Zeuz>8>Y5kZ+OVEZEX]]4b4iW,9f~bɼGq]5_LVSġJ1\cP%J:l2UV.oͽ>%G-!YhXTӖυ$fglMKk.2Ib@.n(2.tOC,U*x%D*)e:WwFhC=(^$j"zGz]태I&Q`{'bC(Y5㛌'f%ĒfsUc"ꢊƵ?7 ,t|~WBNmEhw6+xM sl wkhbL꫈jI$hԚס.ڎ6Or ;L7BIXG/2{xlev jf|%YEPǻ<_|y>aBeSzdXY=Z{rnj#eq6nM/m@ H2c5|&zKG.e1yxA%J qei#VNp2X=R"7-]j24UVA̖z9f{`霯S9nrb,`ܬV(V>Έ03bӷE4;D6h$$ "EA{j+%̽igȴWc78m۵2M@0[qR̗0NH5cRh\)b< ;E7NNᨪc‹e Y =9_x {g)g<.=HfLO ydwR'cPrEBzKDy7A n&fA0*{o2VgOpKoBi\[~~p1ՋMW"Wwz>:%5Īrg7.ʰ~jك` .GV^D Apw/x@@jI 0y3d֟R.gB* =isokhtzr6KMs2Eh _f݆!>@$7A' hIyCHt ~3ay#H)Xdc/@8p6=1jM"0j+ ·e__Gw?'f^L۳@ݠe ԫlJ= aLtLVUQ;[Jhw8%NxFQ:> Q#7H],[.@&$_paVvsK4W[AZs~2Z(x*`Wm>{,]J B\bh\# N_: &_i;Oq8y}b &;nLs L!!z˻;w[٦rޞ@:w#xƕzͥZ4mf<Dy-j,j8 "m:z3X7ͫV(EœjdQ^n:ǀzq4@@"V72O3k$Aߚ }vG[V1ͨfd@um6X A]/q Osx4W>kVb.}@v**D7q,Y$W13mfj`wgaM}q%UfVIYOԞY}!Exs[ i#<2^* $;c?TBIIlUd;qF/8z#(P]n<#9Q6.(@Ӏ .G\jVIjAy*9s7tg偖F3yT:r|_"P@~)>r73 n6v_KNgkw೉+8 vglSH["/|J` rF-y- I: m Z-VL0E6hؖT5ݕv^,sx8>|R&4ke,\*!PAldGKAQ3{K]DZe!H`Ӡ熍NTTPfzt|r,,@]U1y-}ހ`qotȒFe}]t@ㄡP8X%"3T,&;u@S|MhfC|C^YOm䢬@ hB)K`] >O%ΔNuʣҭ5lhMiSs16w&|>nF֢Y̷|" >C#`)n~Iyi|+8|/ ?אn8oӌ}^ڪFyK2MjQ4k?h%y0V@#':# W\g`\Ғt~;U6L{|tc;-^6͌_Blo@h&_ FGF†5>T*Zi w5m WڽJ8?+4'^~D!=lLt݁l{#F=iE.9) O]FXb=(FoK@:óя`9O>*l-xAi*J2QL~#5ԺV:; RO qNw ' YDRj- E0nT98t9UdC)/~GpxYc+W4[=IG+!#Cps~{ȧ+7xƱm"E23SnRHhEKeeޣ7pfuLґ5v1\WKl+ָi`j,ѮLy heΑQ <12cd>vƷ<0yLUz: ߗ S iDHR0#z˸Yo7,jP5A1ɱd}FU<(`=hbKwƉwTxf]ƕ#*_xxRUs-g9%:,|ڛWʈD#"j"-`x,҈ۙ*mE CKURyr>ʬCĜr~0e@T-nMlO5*s:ܴ2CA7FN6\8EqE]LUvOMA\b"H }((aNE9Yэ h-c\v~DXkZ8J 9U=l.D1uy? ~1Wh w&Lu]*HC\_Fu5ֿ pD,/; vS&d) ڃ@q[]8v'l#@gDž_'Ś u-RP0!Պ^9q6xoL.:iQ|y:&-0 DQxڝels߉O6<л=Em^6bqU>=z綯Ts;]uv3:(fAD?O+fgWɝ&,f@龝cոC`r2h߹5vn1vHRߑZ檌L|?H߄<4&|?;`=YF n8Q DişvU<ь~D,Z9&G]wtl dOeiH3V+ˆO1[R[YI$̷GCr&00>Gy2=8]ar>ŠVDB P%d7T )h=n֧"Ld e( S wgl+˾ B+A;zwPcQba JaOi0/]/@pyN=̟G _p0vl+v3Te;Lj<41Q(1^(=2 ur_BA]T2d@gA#؈<@+q{FVj DgTF'  r+S=4.$9ed#vr LcB4j1V-W4\×}M@"x|'Bl=rQWUSCtaYB)Sa%a>knW)x֯apwMἮ`a)FmDȸqQK! #hZ,h|)u ?Mg+Eisq$[VݳZ mw4Rr(wpL03pգJ6} 1V0/;1_ -jРeLAjֿ[A4RS8qX>: dYc!J5J]jYYCЙ@3JDJUg :@5Hۺ6RoCDys域;$Ţ1|sY΁kڇNPٴg&lŚ95d2:ugJp.eI DPI9pVŀHma`΁nxLI7K~:5űr򠴌E (߷Mq .0aʂ+` a~valfM5X%r}˲ m.d4vT$*h8bpi}PEw=<"f‹ēVSaѫ"̣G|{l?}%ZpCUdLPti50?Z#zᝣ?ۆ+OV[h&AnCquJY'Xc#m37WVB1=@To:q™lT 2.vvLZݒY/L*RI m&Wf ŢG-3N^(2u^#,.L~qʮ'@\foGBXP\$g~[Ja݉[ha"h.K 3wLG*pr&Ɲ~4RMH\hdfdLa`Qd|KFVW<ݻۜw64 -CtqDN?#9N՝{U 𫜮yo>&`>%>98p^4*"h aN/HS52BqQX" r_ŲѬ{t[z!s\4=/41)?XO95GOX/oUiy&Z<<ٶf3ARfkL߶l韄X*ƭtט-ے ʡA#9~,>UFܔ(YJGvd\3MrS&gv\?_KZwyslmu>0 SuCFlav},O&17nFMyEx ( }{4!w`gC[Ι#JΌ]Ey}#jhw f>*P|+d~=Q0y!&m1.>ib8TVl.t+\w_\[v 4U%t.Y䯊\[P ?l]J$PqH| jMÀ鍦HO"YU!Q)lz wXo/x6mXR0KT?N-!Q@L JWQie,i'zE1?ߛ5H+]M~VmO!<~؆A"B V`anG\[a 1С @43gU/_lKƼqEhqn#fxokW<c{4N5a%!VMƓbs6! l͚xJV1+fy `.g,$ dW6Cwl&"fZ}k2~s@5u;S/gh1YY/1S 6Bxk57PsCOrxbӐ\@UY Ũw^qr]z24knH-H71ct9 bĹ?V W0TXu55k:p- cFD&7p:9 ӡs f|E뺦{:iaIA+̷RN5EkǿOH"aТ²n}Eؘv9A+ߎe ;Y]f;Ns6/Xۓ(u*䭪 HUgSӦ+wo5ЊIJ$wgor}9hnt܇Ƨv8ڼ/0\XSРƢ&a"|nINfONid_{KOW4^bڕnty)F@[_֭Bp2[/GAVdI w4AO. M{,DϢԉ`o+ٌ^?X+!<-t*ts\n%^!afkok{|Bܖ$Vf-OKrҖbL+~OKd&9=(KZUea$Rߊ7iMęr?0.7D2q[vY.SJEzIȘErD,ڠVbubX5HւjTѯ.yr4}qe24 O*@ujR="J[UHP_#A&glW|Kɢ͐Z#AmeTY׹MPN/~6gBgTwYVu\~dHUs7\XڤB8\ұÃ'.iU#9#e1uhIfw[JytQ+i}B+sHa*ö@e١[eT1=ClPvF6 &eFDׇD[iI$i3 Q%|I5b ]N/Jm`3/'8E*83g48/gݟ`6 A+xk|I.zg(2ŏ%aZtvدC/a Z\_<7k:5soX 13Cz~5í]&\6>|ltu)6fUX(y㟐VkVx ~ {GDoJ:z!]**x+/ @ohu!/?lXb) :RkZgJ#?;}HQYP٪!~*djCB>cq k,VЊLE67pn9 L]\!6crŮ1zr4.1#䰑AaɁO5@" @+P_VVƝkD<F_bA7z}KL= c\"Bc慤h B=q2 ˱!ڝ;z3^gkTNAWxЖM5- -=K ڂ8ʾퟬ@S"^6.{:zT]6q&Q:mȇ~sO4UxɄ;N][uq)O&hS`V0BV?LolΛG^%r!".یZGxȶ괄5 rl9GíD_ud `lW:ZܨD+@I8$Go͜ EF)|":S8=7>鑕`I.։G)ߩ3nm Dg~y=%n\E#M$rݗE Lğ<;Z2&(ބ'lxL;BYHC3`H3 }C }'  VR|{O!y{*p\}z\ .#-G"`=Plu\K{_˹) vf3p30SI3ɋ~3oܯoW-P3uodCq<_Dߎkp`&p+DJK'G| ]{7*q80?UՎ{17)eq?yÏoA\j^dgZ@8VH/!:wrh ="c@VM?MV%elԍ~Ն9QTo# ydzňჾCX ICOpR]98HH-[$?Nj~yχ]&GhDV5Qѱ=N36 C@F/0%C|ѶgXB^A'jGe;,KGjtcƩ9( d\iƯy׆`,ԟ^^. 0Yrffj2l_ /r/ոDrhC:6l`8Xǯ0hګ/W4qC"3IrX+ híUhە\:ڔ(rn&h~5IS#,Fx 41TZl.=Y"`C!zy$7̀\<`wdcRm#pʤ:򑒆izMJ8KKv{Q Z @g%9Q ܣA.L,/mb-ZRk6bK\Px+uW(IF`y.ΰAk#y[;I.;012Ücqi,Ro!j2gbmQA :ꚥsYQ^r%:՛dC$ove>;TBκJB1eE{?+Pds=ܭ.k (CC(~L7]iPR!{.ؑŠhWz\w+٣yz.tf3N% H-L=8OB>[OQ+Q,M<$֪.6Iv i9}Ԯ7uQN'<aLi\(Pmq%͡B+\&O,Pdl_庯?/zʊma[[cҹ󎸥'-p3G) CFmeZ:qDutns%"[Woees#>NƓ1 FǺsc ּd'yƴ%BbԪ433G3_4=v,BP l0SYIaߞyF)E Y ؿEC[ xc= O\ߥXU`EZ/Orr^®G6elkVDrY08 DgXJA]3X 'w_<{Dyu@DPQI\Wϭ!$ ĊxٜKꮠ~}*aiV, n Ɵb?ijnܱ xdpoXaK~q2xk[obFk`Pfj n0`M-e1T83.:{Ow~Fӛm5oݼ5@\ y}ݿhdxzo8AoSw)ױ;0EƷPM,w:d^mFM@$q)W6m'Ձ]Nr7h X]Qa{` ;HpsI\̾hxVձ;-n@,yzb6}GrsYndaP9LwL#F5Ȑ³C> ]߽0)o'W$xQg[cl#GC<pŵ%J~rHϛ!wB~Auڑ!<͂"4"S1RwW~pFl9u$%H?#,.'hEUA9Ra~iRNxٿwIPo| ?Miɉ|"Hr^^U g)bMRVwS{4t.fЉ@̊?[f'~ln8G4{%;Ag0IU/ i!nb_XZrZ25"Y=u@<d -|[I*Jh7Q9+Zp| (X*g+b#wO8?GU!%%Qhzʷ͸ C tGg%ya"SlIŃc$8B/&Z2q ʑi[耼a+:m9H#~e"6}dHkdz"T(=&~\ [ a>IqVځ)n|5<< qZH8*rs>`O^v۵T|#Y&,K[yٍ2d#D11+7QLfk=|k`Z#4'hS@***TsiEbS8ܔtuat"Cc8+gtFS9Q7H]Íɷ;!EC5 y7yQ/A 29w =l2xEjBER*53z2P5a`_ari- }*G϶LdQFMXmZ"UXBxz_cj1EqgE#a*ޅKp 8Z`ivNvNG5"k?x2n% IZU2lաGxQ_hA^<e{aj:+d&D0=Mjg2G眿`RI0'I]}FL~ie!b肯MI4e;b騮W׆Z?~%$K&~4N..#"rފ& KBRWȐcr'!k4B)֐Θ#%ݩ"೽Mu퇭ܕj8rm:m 4w4IH}Scm*Ԁf Au1@z؅|#MI=MhFYoE~ߓ4Sf#gI^C)۟:3HǁA4 嫧zKe`LGK?=Cԁ釭s"~Sx7zrMN>CL~^GgC0[~϶l,&{˗qHWtz4Әgl*V! &iIe]",3z%Sd2@ăDv'< TQP5P @, x [ 1>5_%CSZ44\)MRugۻȴ ~%_"E)0Ÿt}4$/hѣ0GY3N7Ƀ3]Å9ֱ~<9`HPodj0©|O~i \VcJ1.쳌X <;QuCidUow-dҜERog" $~ec.kQG2[){ݙhuK%ru~U,4{8%g'~!3$gU_76[?؋ ;+٣FK2c9:l03/ Ư8RG&G2=QWTp?aw{&SL @8NĐ%q &p_΍,zyPK-7$1n7z9mU螇E3(. uO|Rs+eIJm) L1u "(84ʬ Gp)o 2?C& [tQvu%S߁ZQkBer*k5C.hkݝpk~&M RK..XZg-/L=lzyөB8V0"@#}\E$nJ[tyh1Kۀ*JoL {u@xI{((6R^aMIadEt4`N'I<)jw.@dB@,hɐV'+hQ$f ~PJ L Zidn?fP;&1 yawȚD4k &iKW0x8&?W9I5^4c1"T*a}hglҗ/8r=%?)vAV$хtWv3Ga0KtkAN0@ 2ab/Fg`!zAxւl 4h"+hi̿G!Hq1Aa*ɮ1L;}|RV740w yDmoT]N)fA<1cq=raBm=X>ħf6yӪ~?O~|K 9*x( ~2KMg)dwH6-CQSǘ[P:$W]6 Lny0#^'bp6vJum xj3L$ OFBF]սPQ{ӏ>4Ey]"X&;@)w}tDhbib9yױ/&g$Q[tQ6mEڭr\cM&ImV#k׬gZN0xRNg_]\=#(0I| 7+c&@ث%,Q=,95+@*~\Q CqRS?~ȣQ [k90tz ڂ*8JS$b>^tK7C|kweP]"`$ ssU}6=JU׺+ި}~mqD& 0LAi_4,N5XEs}<gNS!8\(="z=c擽8vy!4(LGvLg:}W0;, bՊ\lltzۏiq1V1l`vuݐ.]m7Y *ho\(@s.b]Dt]/5W :]sE./\n$s{{b!BCfv @uS/Ԭףc҃>ߥa ;Y.>$ QZ-v,i#)g0{ğaYB\0ouy%[NB^̉n8RVo5EH\pB^3s s 45}}LQV|4>fvM#'͞[fڞz;M j3;>%<Ģy];5xFœK`#!G(zVuE v਒sifL8p؇`0O3LЋr@X'R1>n(IN4YzͤZ[|%ZNyĝo#|fifsZѡSʳ/a2;ZƠj$@@{fpƌmY*Rӷ%3`|Fdr;ڐLJiO=H2a?  (8b{=A\vY.ILo4rgVYgD=/ D},3+#25%vi{"ǯ3Ir FZN@$Ga;*\T ؀ԥ蛽fq Vp?I *z+0$AF9랻0 lC3&u"1@̈/aZȒZEH. n&Ǻ8t%N1١"\M:" 3"-'?:-SKߢl{/&3ߪ)^|S!--́tdҔ6}ζBK2ȏZH&;qW":(&WQGtJui=Zfyb \"݇z y[Jث7oĦ3>a&Rf  7laG_H+:]oI|JG|R;+k[Uo%n-Óo/B M2<37s\/Zn +u[". A&)A棃@yAIM3:L)1ܘW4\}͟#w; &a^֛~Nu}VMe0KPւ~ d%R!'"H̘ώ ?{IXh&HQv"-4&AroWG!'aڟuN!/ 4 gel"Љ޷Ҙp>CAXhҞ`hWi+?E-=, y*ȊTXhXx -%v0O%HXLZN,B+ ݬtӼB_m0T#3xhlޯ7k{ns'=p]xZXl_Guv3U;W߁p1)Z?f!\?̝7laVf*1<Ձ2؎$/IWO#)bgW;2K M^ޭ :3L,)5.8νu [P]*En) P$H"R^Ӡ'% q,7d4E/ $Cy}~q[j@>IiNjP,}k&kov6nO%NK}mpYWP1ޅVɫ@8<.{kDօAF / z@P?V|`<Ɏjvt խ.1K&A2dt% p? 8']Te!Ur˿%l6"8pip}?܋}@n. ٔg@>Qjow s&4 έRoZCTXAWg__1YrG<}XWO謗5ĥ|XVZ^fͶ.{ ]$7Uk.ef[]Pd0Z@.YZLo_/J &&qā=xCQWCS"~d~ӏjL6V0` cqn2kȊ\UN%= ZSu v;PZQ+'*ӢWʕ,ڃ"mar^ vFh"7# bМ8dWSLjpVh@2phlDBXQWp?B1}0Y&Yt;bĻZ0Wy֘2|>)fȐr!drԟ̽ )gf#88bX6*3XtS1dx#M!~eK52kf*gXGؚ6c~r@xvpMϗ({n-u}4kl4avnq(45sU)(4@gA9^ِ]_][[T[B2;Ɋ1As̍,,i;~8pN](ۙj)89d[L7~)6a|':얐?U@*RDe\}X$kXq 8Gצgϱ&aR4x~X~I~zmm=+3|=PH0X0cD,iMjoWa(gNU:.2R2d'%Qo%蕘26z:T^ HA1-;wLH{  $^IڮG 7f2fRGI9wWNYߦT4!07u]s})$"v6tqnkC)ԹHϾLw̙Ls@<Z+|!Դ*Ѷ w@m*uYejC7V&}G,GvGwSs9&| ޮ R?IDNu`c ,TR -#L mpr/M|pk!uer=+Ϣuo'{QXgQdž <fΝOkP:I88/"A=qpK6UAf4B#ts2_z.sJձ}2V@-0"5#F\Nwу IM3d02r4*\S>5+ʸe~bmng9 Q $|tX6 aɣ. x"#+|D+6Kc YkTd `Ojiǧɴ?ȭtqFrܠvt\ _"'3DsRh\UE|/#Z;Sa9>/_ԬrAoIo3]Kip#y9*mӋdȻ n@0a$v4v Ph Kc:pmtl'#P=5)k@_^V=R:¯j[uE@yZy[э{kt̓ONj#t8senfU p%˖tr/=k!{+ɋjmGPl$M-fT1rݳSJ76i2+K3Io&.?n!!\,}47/V/:$Q~܁;38pҾญ Gx\,[dq"VUG͹JӠ"xcgOb,MjңeB+%xCB#@ĜBG9`WYYd$#I")jCH-|5C7ˑ֜Dy)ѴHY$5V2m9?t+4@ =`ƶfˣ  otK|rM-xG-W0[{G;?v'b՞{7| $<3[JR0 <ꕙ-{N@Y(`eh&z?tҡnG0j.nm_ epOP_d/ccX9nšD!C3{u7l8{W:\jn] (IPJȉRslkQMF7;yY3wAQ󟋑fHGeg 7WX-DB ILtG_}abL2#  tfX*9dmlgA{bŷIaM[@7@YN|NdiG=l|  TyP:Vǧ Po:i= I²oO? }д%$o|CKmVyT2Ez*oC B_~U"Ǿq\eti][E\APt27y%h:YOͿZYrg4=YkWJ2oK賤h;mUS:rU`̋;L5,6W/е]6>ѭs_v9;y.oZi&6 ~VeuCEPj&9:Q6}bTaKtYU)2 ^d3-K(`ѴϕOT-(wl|j ~Hx'x^H'ҡ,x9JX%1R[N n|:&$fk$nT:0ᖠk[^y Oxz@PI&q0ܪPkT:2\nZzߑ:qH#HEkQI5>UAV*XG.7멭ydP1VF-G^?x-:nf<ͽ){y1V<I`EyuJf}Uw*wOΘ6K,/}QG$֊/> 7y!!:6t};zr!`++ FdE4%z뉫:DJ3 DL:7KZ#oEy[gLL1 Ӧ `@f΍Cχrih6 Ř1oPPe[S rvkocX8,^&('7 5DY&5⧯xؽ.'e74d4N%4d-eZ9!(;ͪJ )2'˯9Ce\8Ze*'$S-,FY^K6C]?Eykz6fyQt]AZ*'V-h0Y$=< GIH#r<"CZaDGFPdZo2ަ7S}"(!bk(ɸ>9I kE@ zaCBgOhu-3D&o.ۛBC %lRٕj%*ܤn 1'LM#1tFE~tqG1ؘv]MɁ)"f ⳃIʨ(M}Al1s8|.2XvF1Y(ά7=(7r,tk.vT"cK AJvR:d>鄆?U;ltk-K)?GF(xܠO)KM1j8p!ż~KKqI{7]%xLT1.^TVmO6&fZ‰8@V=7wٳ%jh<͔I_`BYz7d*Q%cގy?jJ@5Y<ЃhR+2!BDhRfܼ!&Gr, \dgiHGm88UIz|AB4E|4 |g\Ep[ɿv@I4'O5ހ .ͬ7N WKK. ?1•Wlru~ݣn)z'ʃoczXNשs3VaArwݯB L4VC3OK'v/z`(\!DZh^mkb@Pp{^_ =ke6mͼbi4uLfek `ed=&/P | =xIE $Hs*` Ć=M_xQ`=v#U>0P>S^$*z:4SE"mCܩJqEspFYIOu`X<Ȱhl`MtRu`Ye+qzЅ4 QgIyo$ܘϳT03GB9j`Bo/},SFu#_cŧYGzC?]FzaiO`,ULGt^rhzz6.r-m}^GMQ}L":x )U ,";"ͪ)<=l K?Woo /4a |-ze)ALVۿڭrWvJ\Lm= &]k]iY#XۂjDp05s-[0z4~'R\}ws8P4]:rIYgd^ LLTb. ~08"7OO96*ߕ^Es)-{ {*NpA\kb\Mw\/uZ|vihZIAЙ\`s i#@Ҙ =`S ޫo}D'uqeBgYYaDgcjU>7_%gj)c dz-@7}2rɬ}^-1 Dv)p( ciŚ\ MA>/=#y ^JWOߺ8#,^|AHD2'Vj,wsZ4 eR`#`q*;d@J9v/OP< o_FVӳw_w2t_*ğ@w6d"[Idror&$x _-}yOVzHbR{$u(>)4vR(ݘ7u\opG^`=4+:?8x3%NieE^xuxz)$fgB퍃n7td]w-Q9`>9  S.h6SىaZiiCaifqOiILrWU-B=d[Gr9_{$._Ιw̷I`x6 TInS„gwKi3^D(E+Z&艔qcAyiy#E&ٳ cima&ex$iQ)ȴf٣qh߭e,^'DN?^i\ߏF- 1GuvK8Tf6XS){DxCpC'*7z =td"vb 6v pPg \Y\ȸ]^`doЉoezZFWYÔ/b G oivL!8 ܐIc[n`Kh Ps2KZڐ~C|6DUGM)t}S3jeH8]>6TXbͧ|dbT?n hmI]GkUW|bvPlCݢ4%e%1j5IzD~SFP&)Б>s}?#Mgկ4{m9n&F~TZ>U) `;RFL ^$Kfng>Q?~-Pm8t8MiN>?s }ٯM1!XQ)bU_tN?<8Sa4 E?<` rx=\A.60 4#QBKԑŻ+ 4᝻,]p hU_'Dre*Z+l* @3Ϥ eG4Y˳b~S ZTSm>飑"PWpDWŬ=_d0|X@A3@\ a~b+"¡ÆCQgӠ\4eR*7w_yڽ@uGd)͜('&DEHߩ&QU:q"\`V).Ӂ6[>kIek8|ǔC[XEf#]J;hja`b(yur*Z캁hdE%xB>(3][uсSi,= +_fҩm2~:x\0* "$`Wݡf_0n=TpX3"/Q"?u2.OAt 2F+ʹ Xkޝ0<7P_LgI ] lGEma4{ t8[>7yf}w".R@{mxTĺ䞪gA0,Eɱ' X[1n7ك\\>mKw5\mxѢ;(U?JZr>qAuqsx[Ux 2snk0I(gPK3$ħGԘsˊҊbg:kش|X,aAJ5g76MQ_[4L r{W۸9>Kd~vtl fԲ5m`:xsd2/-LڜēPWWCCgQ]=*1q0FԷ3n-5OݾetƒuTp<+UXv0åZWz9˹fcNrű-s# e=1xvTIp7YM*B*ͩE@1 B_噴-0u=" Rm̜dNa(U|ب%$j,T尧 >t!6M8"B;1]8}a5?%ҿ32gI P@ޚ:Hs-iOϹLG5Iq O7pKს`4rDWC4nF?v1LAџe ]jQXb%z\^%dL\^H-+@ AZV^@oBAl DֿB WH#ooTȾ~]Ɯbm0 "& *`_-bōYV埩UܐY\/OUa?H}GBr;V =1= !*wqj(U&6L>v'KflN93~7GWia m-rO [{"yPv&}kS}bBV\L~wAU $eeED҃$_aw=K`\$ K$&NL|8PX B6q~pn5U;4`fKýddT,{`JPI.ΩXRRe BJ{p7UbpH9BX:q̖P +FUҳxU:'#\W~#ZMܫ'ɎG5"[Py3 %,,p6Z-V_6Clt1cWz<-`Iܸ'g=,gat`g;Q2g%3fv-񻠔Fc Yƚqy.>Bqh;k "c4+xSr}Ndq S%<5@փx㐓!axXNzljg'qXZ~.8l*g2e,̼fyByzm ^YզFr"̑`8|o-2Ak+ ;B~Y:Gۢ`h|7Q,f[*1jck_DdpZ+Xѓ\Hw߯pP3Ҁ9 ]^⥵3BQu) QB[[zpַ u)>Y8gY"mPkn!,j A˺Ww.b*2=֌vh?|g*YAѕ։fF^(=GJ=ŇYjUHRN¼F`|3ΚJ G4t딚G~}Wk#4Y)vgv_fShz9/xB+сGֆdxo}  ֚JWΩڅOGMaa6n\6 B;σ)Y#B͎-)*;iN$ ybl='ukڱ,g;A@1J% !oQɲoVEWENF,63-ks{__|'Meg@.#E#SvɽE[GV̒iU2i,@C 0?¹ zX&(oS х{ml^SFw`ZQaсͰ^)tQH&5 O-p`V`G*KZ}R&&Bu,4}Sr=PWL?뾹ηB]K K3C}f9Zau8*Z%KʉRվ {(0[ϠVLaW6a%XR?p[LbZ4-ʷq̀^ѯXm y,mE&=n*^wia}uv1nl4v0n!;'C**@w`F{Oo-)f0` RBƑlȉ+Nv rL :q3  b?Б (P^E ^ސ{"м! }y8]ߦe-xQ g9?4= ˊ}'/)lPrdjej&]$TQIc E1Gy/`}[a #Rt<‚7Mבd93E&gԦv9JZ~t^7r3ޢ 33gcȱ-\"Ccy u1xKKbe9%Cx~˛?&Qǫ۬϶b)kjOɎ+^]1{ l"e0[MUpwnZFBP*wD훂9\9w}A4VO1CKszuCOrsƱj>[b\My1a鏖4ޛn'5USDzv=o@BJx,ҢHv)V;kрgxNPJ%ɣٜ_{.H'gy[T9y}D=ntp?tKHVbi L&ܯ0Y]zOf/{j{,Rm?wy˄DWվ`>wU$IaM>ݽZyPSllj!5My\_Xj"8L4VC+JRR(,Ư2*h|GZg*[P& FY_e`Dla_=mPP(Z!ʔ lgwbT <5,֌K78,4'h۶e9! I۩£Y@[ԞpD:szV;F~\:,3> t"]t| Q„CLOf+J5+5^׈n @ -׿|GSrז B"ˍuTP MW{aRqz-x:XJȪKF劆!P#1.}61ճ FBX4"C;hqvzic#s2C]zL"5#Ӗldh~gLj!UsgJQb:-W4C=ُk-B ==N2tQ$CrTÊTlZ,(tC?dosaw8Z.q֚`]ݙ=gmv4ΫN^E(͟pP oK̙9jaIYfRNA#Uo|oz<ށF6Rhm40F{#Hk`ތW 3B}. 1xdfɄȔmz-534#Nzh89Q5S9>H 1S2o(Itp3ļ5'i-dRv?҉ ȧt(plκ CS7T$X>oJyzwk",áLޖ7H P=A/թHKh)*,9dnF M{qCؘs+ {'q-B_uRvp1PȒ= *F "Xُ[|h0A9zpϡyUC\Ÿal9OZFSD8`5rJbTRj=OF!-+ !9C]tBG9B[Ai='CL]A߾18$q?w)MSTv#)M=Nyŕw,q wmDI8yWѓJZG\cpUd ɾj=e.-8ɡ{ X 6=-˂yp̓ O̿2@>}:R=v1qwZ-oIoX}A "'T2cwM0l`ҋm(7T4Їňd_9kHo M9=My *8jly[K)Sī̛h\q#ۑYwp(cvonZ1(m %^.^L5M%bcttD/;#}47Idv3mbRoV{ ؃\G[&gcNz125 5D[)sjmqq%+?|~*c˨}g9?J 棷%3[17/6cr |n…,dO6BXכvC ƒa g|;JXW>=5,!b_Yi\koD 4L4Ɔ -B8GgEL{V% pcw%Z0BD7Jκ%`qX_Ra*šw0ɜ9y=pPf 0KyU@v3pX)ƘF5܌M`N\xs#^QïR[N JC]b%LR~ ʰqj"\ښtx;7Q2[X'f~df9:J@VWʙ"[bh"ۇkÇsă҉jeBq9-"L&mL=i_J,2 v^<{6h Wr/2λ&#FɝdK&$}-mxu zCUiI)g?48lQa3[!r>:42ڼUHQcMV(6A%h*$J=zG4!ӚsUgGsՍr ߧˀB ne3 =49j-{؞oZ@F\ݒKhh[FX3aG páq껏p.%L"zf_~ԆdQdӓ|#7f6Oyoe=?>SgC'lꯇ3\8>*eEzjX5u2$7=t޸r7i^σ HT(8ne _=^]HbUE>(lcb@ALqꍌ%CK Sxd`vAc$eɲb4[YѴ\ +"gLz01}|Ã*rxnb/i4s`6#UђDb7HEx"SUʢ[i%ClzT`Je+:w Cl wX7VyǛZK*F((7p @@[c|W)z< QwiMvAS4@NоIt[jMG8Fm:6o&/?oOχu&1>h2bj8ݺBd"Diݼ}@Z}4 ר|34O|EZeAW;6gCJt.*Yc-+f - ~ 2ǡ&mZI\ qӆ{!d]1^#b>&@* V,vH\ q]* 9ߎ'P!JE>Ij/oM;0qO}-_λ0~ +\W:u/iggnN}!9AFhh, V:}|^Ȍo I)=H^Cf@af)B(1)U yaQa{F }c^Ib>ٹ,:\7e'(bC,{f=Y0%>DzIG0_$lxhǿlҐ19GY;]}f:dU( W>FQMTL[>anB᎔X3 (b1U`TƘ֡!bN}jCq<-MLB.VKZ\5]ꅂ<@G٢+55&ޓ4[1޴dF" 7E!nj*<-. t9E(6 :AXd.5P6t0bIEWJG4Z ŗjI0s\VखO |eKSG#w!ao;~)4g¶R[jΠ`Ve3BU'I3kl vE(.+rRdi?Rٖbn1N4r+9F%Y3'Czf޲$AW,tDϹ4`{u5z(OA%+WP<,56su"b$]zswWۧX*p0BTw eLw-Ğ]滑Q=wg>ܳaG?M2NѐUƣl+ &Jr҅D8-oGm}2k_blR&L02Df6S<t\ϪhhN(\F7B69dG+Ь&}0b"V2k 4B:nԫn?@3yzt&C1Q*;>U&.,(- &A`Mja]|635d J̼_f|~ӑ5v3:o^=V%<n$m^y(mCkgQ|HNpd[3]t85y9Z!gl|*Q핦0J4"K ` [y vHvD`~Ǹ\q)RBq5Xڨv⭕rߖcek⟄@J ࣓ W3GUe?`kUiJ~:QTY޺onS=xvVСeƳAG?nd`e(X씡C,_=x~!92l b9e/ DT@KC?Խ`SUD% .|SID.jv$q5Z.Y@[z; qhg|(PdTZOWC'/ԷF׻L8@ߖ:w*@=vO??e9Yp5cڟ`YxrVމXC;Lax~Mc.cBeP _LHY[7k ^>uCzĪeT@3۾eWn@=Ɩږpc`ي#8>?z 8L.IpqqֽIi[Vr\|۴ /¯u?:w ax.&<"]ED8~[;3(J*|kCADJ!YWM Eм)dLPu&ʎjʎOSח:Rg4}z6h#5-@46@FjXFDU9x|nTk@ʵ%e%Z`%N-l^b@L?{ML c4Hq)uFYq)k+,uT4Q=P*wlu~B< Wȉ *kբlY7L#AVR9Le2{UfZ" g-mYu hߤ+J]x~Ib9xh~DQ|.^QT|~LB t"1Mv% 涜oQ_ܱv=/:ѓ@V<đ6ld+ebqmܭ5 2"\s4Kfq3޶\a4*2+eaiV%V0K#XצՃ讬bXJ%P _ 0#R?C<0ʋ"!Zs"!_@,"u:C-Ў/xĕvkb`}`)דC) Z@~Wi㭥^7k- TΑ ȦO1, :{[B5}L8Ce =1-7te{NЅȤ9XxD)WR1 =S)6qBr8+[$vJUVh]B'Mb3%2٪*b Y%tÒYwV4n-*k^PC?\  SK/a8 papMEo|V%!fq)k+XL3ο0o2+%8 T`S=~uXnM1đIp7Ybj둘6m!S\5n,"^nVN%J q{L:WOi y/Fr\&hg"mUgq6#kN Qeu&&:Db\L,oX BfZC˘KK +Ael{cёM/&{ӄt)UN .R|SSYiB]/`lnsg^yrtLIlcM3Ճ܀So7ɇg})ggU9--\wV|z F2;ha/Vɋ``e}a#o%}>Tډ时v_V/IQƳcE[E(`%Xフl:S0Tr#{n ]_SC"yXé$f8kڋUwGXuʂ{=X[=CZlX&Ntؚ͘'8BR /YF K4<AAZDŽmk&I+[B1es|bo"џ:Cp2褉5@17(\(-!/h3\T6]X15dLø4>K;$χ?ptm|A)<@X[`VUr2RyWEYک}BpL2,5 uOб׿v`.G/+Xe_1cc 4:M&5Lil4czkAgd+_}& T }26c4eVl6]n:•a9JE?O|K?`N@4 #)afB3 =BRD xxR:,!x<գaí-dţIJU93mG@ɗDDl3iC}}0Ch<'k!m2ۣO?WP?.-]کKk&U2\8me(n :љ9Duu! {"DBNd!ҭIt\|7):kx1pb}R]䡓Q%-?&+Uh>N6cDBeif!y7,s|2 o@ !jEEb"ةs֢֚J.X([CL )˺PI5H)k# j8+ 1mP> ΋i+l8{S8~$\ˏaB){T[s^#dD&{ϰϡ.%uxUiu\["Sr^ۃ|JHe|Ma7 bs HޭUcTlKj#S::21 xwq:/;0.!Q;cdL-['pp7*ĕqahBXeA @ᰎ.|[lv10/WI=(65lsxu_Y$&%2Xy&_u} \ًR*']cDLs2]( ~x eOڷpMfA WJXbܵ`զag>cÌtcWD/7A@^;]ă3㪞ݚu탆6)Q5H!Jl5f/w 6Y/ %CMy}D r 4wݣeZqXxR≒F5TݦWk )7VA  }P c~d4(\}4dN9lpRdwFRV?Pow 0뀾\#Uج7hNJ *uV3oMwN3(4T䞁 (7LńE!}Ya>9(yk+elok;oGoxQ|P@Vd;f*6;Tk /i5ƞbMmD1iQţϱAC!*J>f&¹`ΕiV *? %p DAh5Th1BnwuL^ _xQutsQ1$sQ(6پSx?<IV7 ވYw)g oؤd_Il]ɠn.:b) -8a [Rf^jR><`llrJ2"&#;I=[:KOݹO'd!IC`,ՉDW8;Y1OJ`0NGxr,*7G wvJB2ţ4(12sWjΜfՋ@D &yX.#\b7mT[)#%#J2']bvniFV{Q0K"MT_5v`QIy傦]ꤚ6aCF]ylF?nݍ#AA6r}ˏb#B)V0( >GBLexJ~gD0vUCn6T\FQV.PbHU3^{NyR߭$YT$KY !|:mR*U_z޼wabs,}2žUEő*C#+:kj9 u >=>:U&"Fjٗ*ĥzjVxP:ak,[ڎjV!VY'^]JY⮵-ybsRK6L*~c,m>IH_*WZ&-O>8|oȕ$jq QKL猄EУF Y=a.A[c7Wfϱ,v-PɀStbf-;YHEX?IO.6w1%vJVy>99V-/$m +ZqPnۛ+(3(. tJ YI܀\{V;6 9@_, \zc1;.QL Zab̄#&LYAy6,o1Xc rVcIӿMFO`xl)ab%_1{~H%Z%DS` }D6aۙi,iOi7`_eB0c-ޡK/@F6#GCcwXMedoQɴ7N6) ̓Ob7=(c2Y]V/tnVWg[_4J|bpы[.eqeO}mLSGi B+M{Vʳ,OMˢNP15H =4i!YsH aT}xZ3'uF s y[WD%6UwGپ(f۫ɓx Ј&I|#d=N(jF|bt:x,[$ $H[o.^Q;㐪>4{ Ge?ͨcA [A/ӤsDg~v{Zy=z68M[N?Y/=]&P MMVLhLLIiJ 1'g "kh$٘8i!9zqAU׌f@g8h3ԁ8 Og嫭./|7(3/ȴٚO ( X=eF^ qEyi`iœgFm`:/ZC(Ox`ش(fUW|^uF JhT#B 6VD?rd]f)Y39OTGqY"v3f^Uq4ʶ+Քp %Q'CaX ۓ􂌊icM},sj'RِH'lEvԀvnM-vώksvȂ꾑DY )6 CP&L0FAۙ,*̓pf;>h_1EM㜰lyK;.p8&ȟ*H$\5zOp~x٧ؙ|6  K"62M61^VjC$Ltk7a <#+ZlA87QLeHd.$Q[uCDMUJ5w8[EfO.(H}ImcYߴ =FGŲrK)8h5HZ{Ol?!Zۜ게[y^rܟ*aʫizu}|Gb茿_**K(s۪ؓtJnF#\T/E=^ҐdIl!\!4C w{XVIAE*ZƥZ`hFn.TyXZ,@ZxBϲF=rH77(C9}6kT O'Z Ź9,>m7௵jz;ޏ(: ȜF,2hY%4paIP(V*؜=il`ZǡD64Eďo9Oh=ׁUdrdc%>T;RᓦW:'v.q8ia&c@đYK*%7=^9x7 $A^O "[EW!jGǗ  9V^,6OiC UFBltJ57.6}7!p1ž S+D!h [G 2u ؝jX2Zh؈)Rұhx|%N.jiMbU.HYK.wG|&*@[][NrȒ(jok殥lt#'vzBU|ިpǞEkNo,(YਕɱYzgt^S6|u4w 7p>5a8Ŧ(>z|&CI<T_RE~dfU khgɬ/xv>vy!K}h}, x墊+ 6>|}^qw=dY٦H;>TjY 0*sU*PETXѓlqazGL<!0)kG艍\^Z7\8cm)@Æ$L h_[^SR^&QHN?;mI0ELM׆)*C]Wd՗Q#U-&AجD] zV>Zuss# f;J*ԍ4MKIC.wqUbY6qz9nɊ~1))|]r{@yM}` (*ج,Pj CU^*WCVEbnv!P5S7r}Y,P@xw$ 7~r.Peήa=Oؔ毬B!۠C.4e"L7]3͒eza3cIn*dqbglwNjCC~# j8܁^S1}>v~;2B 'CKS$͔t[;U Ytx"~l9UE\bp90$t}}TF81sGmܟA Fu HwBU)0a^.7:XFoPġ,sӧ.ZQk ;rx-gi?B-B7!ʅ't1MNF_(Q#φ#4˜^՞ 8-.5pT4$ UO['$a. z+i@%0.?X;VkN[j}ش]VXzd~PC MfOirfРY$OQ!ȹQrK\UDVP $(b6vG&^w]X7)X8Wp앀Z$ϼ@udcO(O`G寧~H[&(jM3!,@HvRHRD/_$ fTwrS P38,tWMpfAB^PxM=AQPHKv4vhޡg, +>k;#_ .F.NvL>;[a&|D;Ê?l91FK*5fV-5Dc\c2t?D5~Rv/Įi+mruGι{1>WsE\fi$Vţr5_t.sl_SǮ6qFυPbTһ@=l"":6ث9p!zz,9 IKHde8Y;K \2Uv=1Z&zl ʇN)})1Un> U!ܫMY.ߺJ 1Р X"*>lIpe:Fw%_+o-.StXiORΩ7]gݒl.v'E 3)9Mġ.{xï|}e]eCrvL-aT5=k wAAEqȗ9Cn*wUCj;ehwuY\bˆԝ̢#'dOԥxDBFc> HTR6L$a8d\9vFH9 %C0$w|`5&a@79z Q2G5\>5&Sa锱L!?oB 39)NxnwDJQfIC]0^+O\VJdWܘgЍwhu&0ogx_=w'io1①)[μߖg| 9hlC`p46 i~4c@wlIHu4f "Xa{(`mzNh76VF*(Bc;NZZҝ۴$D#mf$~\IDŽ;8]_ǃȭY/O ]M4$=(И6ԥF%$'h OT4F^17yڛr%fmPi+R:>;ZnJAkv(!][XAKI,,|9 C/QIi/o %ADas%ġzH^|FAS{9䮜K^k&T̓܍yKu&vHJ;VvT메wJ蘌|KS:d2eP#Qeن%ջՒʷ_H-">21.ʔi ,u ^'uv0IxNn'Kpf1!~B g?z"<)VXCoW|L?Qp i塭ˋS^|BtRo̼?(ͽ9mf,Cy̐3EbQ,aŒ{U4mW4|a'DySt!wQVÉōU֒]y!SLHA] U)f|<~Vdx>1Oك&pL"֞uN!}p|;X?!604IoZBr/ HyY[w6;\Q(mSn#&f{ Wy8ٸ IO,Z +{N?p .';]h`ΥDRrh>\ TG.@.r~D+ju;> kmǨ%lP;ߋW[,Hm,|Wq7ru%W- YϮNXb|R V+ ]"NJPe/KTD/E`9p.Ov$dG ʆV0*Yv@ |T]:|Nf-sfQpy>}|pO-ve+[MT-Uذ3*QS¡/hDkUsDIy4ZG*Xb<lumjeI9C].Wl`I-z OuPOe۱z]HiLo!A _h ̙),:cG_Z5#HK'2N-R?C-f" Ҹ*5ֲuk('&o}" C^n.cnǃ%>=J", c0\T{d', +wf:"׼ gEt, mmjOgyqxG W8&*jH,cwMݤ¦-)q[_pb%8\Xckӊgz@f7_맯]բo1bUژ]#<8Ƙ"d?t"a<ˎ$J;†d6>w^B8.Joz{?Srt锱J_)UN%\&zpڦʌncepW 3 9Fu*2yVxnBD߄ݯ6Q#;qJžB]I's ۈ)ay#L6b -hmI.Qrz,[AIEz۾xX71; EpAدPĒVo$1KwUbΚ{o؊})հAM4Ϯ‚A /En%+տ,&l!3ف ikWp* :6=⓻c|gAGvN|C)eIVG/l'YiU KJ ^඄ISDAB7th/ۀb!3KJ(;ŕ*izWf_dt8<cvz :bd%ܮ/%h1e Cb68[=Fڑ5Kb$Y/j\gEJ2ٹ碡2XvmM3)G,A7K2͠heT(zK%P.[Ҏc7ɾzL3 F5ヰbIweL/.2vXlw*x2 NfTzr<*dF̊Ԓ9 q=STYboH|)*휎H w&󠹢JMw )1/IV nXڇs.eۓJ>XVSd6WZ=`ГIciY٠Tܻ2M"c~̶ܯK'Y=dthQy}~F!]KJ^i2Wz# T76v?rI{ƯzN=VPήAj{j{ys1L;gȚPOxwPy FdaB[LCZ8PMt{uhsXIz1C)W:]/&3^I>;3`e[g^,aVdTWͻ|['7>7px?M,vIkx}3ejaW\*.&Z`bLcf0h䢚Twd]tb[0aFZ 'A^V0/=wn::;E :0/T֓( i @2.Ւzt9^ùqD/iqkLIN d_kR*&~|@7`qPU!2CuQK Z$ hX%X$:0unzN.bgMWgWfpNeb$noਮG*1ӓŸ,1K5Ed0;t:VAUFٍL>u3+I2J|f6AGc_vigΥ qmEhY2]Rd׫Z!&j*;` uDC8\T_ YOqb .7O?Kz< ޹+j-=>AG?Y,KK. JdkVSZ6l?UAU$@0YnI O8T -̻`>k8׹\,cu`^^a,[TKOZ䔸{<_fS0f׾^g" {¥N䂑+ ϨΎ8EDj hlHrQX+Ug>蘾&!wC:ya>تy% %_cbrӱ~!ߌ0?q`7p|ӷM1OWhm;[؍;l4k0YGZzMQ*nqhax,Z9ZXO;@ىʹS;1Wpu(n-0$Y2-$&(xRPH閃 sr<% At& m2 P=Jx.aꞲ3ar8QL~oE =F1(力hvݔbϵdo.^B9i66?$K6 |M`ٌ3NHy#f;C~ LvU5,+q/Ɖjٺgv&ñ4bgJ҇/Oðs˳ š|mG .\Duln97(KR>*$Ng!MBܣJ} IQ5^*J(ş3O>=Ȝ?a!N$5N6]|mO;Xm笹<,UtekU}EC`v@U? ݕ I>)|QBdWSw=?1z> o@OX$?|je tjFq𡐥X nUqI Sj>tt+U+^7c_&X!}eanB(-56>J"@ fZ<3-Pav'eEL'ê5:΄356̨>!֌RUE-ٕCnYEJ*)pGA|4aYub*Q]Ws=\] !2;3&Z?fr9PIRȒ%B:IێK©!pS|6!ի&Ej90tS"&hФT!GdLsUM`b4ze[\ d?yΟgTt[}?OW0Zˀ76SdEڄ[Ze@Nz($e`x3u&&&:^f^dӲQ lpX4qcT-4zS6@PX 5R*ӽFK٨]{WVʇb!écŅ:ipolcX?dnap7c}r4<|Iser;d{.ai>ʄ[ ?]#6d$ׄZ ƴ`mfr zl6cn?}nsݖ2Jrqt3!bG(<Ή|+Zun[jG!JK0lQC䋠=/8.T0YwNjLd N ZN%d"[/sZ49a#~p'˕>Fv$ ~0ڳ?8 Y5>-aHb-NرCwB~Zj|'_MφL6y}/z5.vv~1_wJxB޼3^6 aӓϱŃ3 >2 'F9)ext7C(qzSR4㎋ T&qop/l( (IX4N_RR0\7%)ܻErBHf{uS,1IXa/i1.k~Dم;k46'8B, b VxLzVL.=S : +sx #=N 6uKH2hj2uY :9:D0U}yFa&U 0QIwfO  0vx/զ">&F /Z< W:DMb #(t*H/Š#@՞cHϽ{zR`љQ"MsLM7d(䙵9ѷÀKu栻A(@|V|TtΨ ę XOQqBs}A[""lNjJJQO[Ij|~:?r. D%9g;"W?jKub ̛ /`ʕ=I6nR6ԕȡP"e8a D*vda^5$ 1K7:V|!ZIf ZJ,"fT\J(>,&X&c#k(?Unζ\k,F˄pA J{)Y_ Vzf frEۧutj͡-'̺Z^C/Ɲ=Y9zot#]`'JQx45ަ[TW9dnEa !H%o? r9<41.._櫻t`dZ>So:{dmfN=%奾P-4[a;$ngٿ#mt-J׭〠)s1 ɦ?mL[[đܧ1#$ L4tyA멳/HE̋"l@Z-s̓ITyT8 72.e@0pz&ꓓ^ы,(*|S}|>,R3 "/FzvZoP2AR2Lr)Ftݝ4e7aW2#8nFkT[-^/~b͢Wa "Q$MaSI<3z]փF_VxwgQ+!眥wU5gt"Df0C4UxJF:DCzE”.fWLR;Ʒp>9 Tk*fgŀ3}'c[6Xh:8pMG5.ۑ| Q9/0#nDty SV'L6wRsGoB #dn07n<"mqʏ}bBbFpHe;oSG4ĭRm=sA5a nlMڞ.٫<;r8 +FydO&O6ۏ.0xH`U-""1jd:rZ7$Pa)i*LGѳNݽ?c{*ɲzG60J1B։i[uQFE^<,¶1;ӂfİ{j8*5|*AȪad!Tn7/5_#5^6sTFOa\syGɅ=cRZ8oi^@%}n )䮼0v.I0`S-v"{ R؛0CÙ#v`$:8AZֳB~ܖov i>,=X=ys5#2_=ϒ7FkYC;N=iH[]EI6;nËVY{G%kᬥvU5uL-Io$_ec*xE;НDDZLT5T$5R_ 37gFlT $H.'&fD!b8&*h'Ou C9+oTm7VU_Þ8pB vh-ݡbLۥ#c& ᷁oWc9U*IW" O̻4;޲H; NsM8(ua'SW, bjΆL3rc+).PE4 8=zN6zRM.#a`ub @c%C fz.8`]5JAh/  {J"@|GP?_H XQb ;D2C!_ #j( V^um67,'PApg~Ng+˄A[bқV@ѷcYֶv; ;A{Яb;b>ZNۜ4 , lO%YаN:z\44>̝J#;Wd?WCP阼`PP?hK<@sAkɞLJmMDeOz0r# wאOp!frÌ!nxilJ[5y$rw};wʂwDE %J*jG,oab-=t-i~pf],p4YsA6~q ^"wcjoEvP2=) D -WH?I s0d`%Ռ3Bgua~mjNDf=uKCj(7qN5] Dw$@P3Xنu_3rzDJƿC`6Qi*n&h nP>TLaW pJ.LRA%ZKl% ߚ]ɏ9*ڂ -L߸f޾,KiaYC)+9']bp>h?{̌ m2Š?x}U(B`* KB=Z]%LAJ~ Ŷ}Pz1-lˈ][-4}jTWܚ\RphebؙyAs*ʜWǕ̂@U?}ĐOkx6 <8{͂&2uaۡS&!w*dE1? ˄HPvF,@OvF 1%+E)ZElХ9%<ʰأu.`8[ݐ}γADg1sXEit#æI쵏D>ޡ`FT4zyϡ߼DIN>Wy>QC*͖qy08cQ]qkOv=#q( vD`zr\]v)?$ ]g~:dn,D보rQqKp:2]P&lű2iQJ7K˵U_#^ƕNI}yFmڠ*4Xv|jJ]*02<٣FIJf0۹?z_!]AmN iKbyw|q]>B]K[`w^9gknz1/! r(DzP2.n yʼWR, `oj+|N2ːF!H1_O6Oqr3(CÔzUpq_u4c+E,B(Oj_ ]@u{&e‡)PǴ`kjEe=w?r߅Ͱ=E$Nj! QHc_MĠZQ_R~F墅 svE>6Pu:zZ{̽G1S^cq֑SmCCf{f3.xGZ%YU1i 1Ab!T|L30u'<8=`HGz U ,8g{OUmOϊL\!Fp a;0&3kQIHif.Cui d Ҏ+,͝f|yDAصCP%x(zƉ/ZQ3)3L)-23&kv;wr^A*d+ -7u2y K-S ,E SMSy?q;Qe@JNfG(; l':8ϱ=J6^x)Ir2_ltj6ڊk*R}9rQiuH1*ށ3⭞r- zmĻie)#zgzk33$,{ Ɲ5FPl BbMΙ:?*C5{"icA %cŦ~,|@]4AҲ[u-b:'B8R;ʊIcȩr<(QSaz[`vY& a;Vx\W57-55Gu *{@p=3pˢPhA懢MCI־gAW(E!,+{ R*J`YJB𪩡5X38~J<0Fnrs73+Q"FOy@U(h߆vWxKP@kh>d )NT%dێf ŽPJ8U|_I;m~$$VLPhjޓո _>Tׅ )QӃΤjH[a-L A7y.ՇUS1,un a,Ziw( ݭy/sT*EtHU;Ig gGl䔢Mh &AywQh !g{B钡麶!=x3Ԭ w;@pG-=PoB<>GYZI|MNmp{ߡ.jufzUk/)jG?*I@a`/},X DXc#x+r |/Ul{AL+3`&h'd?PUa~.ڸW2n6_.Se 8IŹ;hcja^ytBcui+^^']"GU8:yZw|%ܔ8Up a E10nqΉ`4$=_~5 3Ssw^#҃ 1-u>-bK}OyN{Jd\d0@e4(KVWdė9T #| dIQ$sǃƉ| =ywJd5 (sVՂ2SsD-)nn4J|ӉN:!=<^)=b(Ps Axii%}CbHʻ09xӺJuZ`IwЖI3-+:njpq05qyHCk cTw!k]m) ԦouZ׬ڥ)BGMޏ'A_-s \(uEVp:B6TKL_m~1ḩXJ Dsvk(Vmk7ƱaMug֏8ri _C83i7\B3[(+;R\kr[;KBXy(&קT0QCw; Q]m<#W 22eW.ܥ-FnǙ0}q@G)*}\B&X0:m%hZrM_О2\D=3<ݪ r_T$l5h!% |(2Egc{T,xz,5R];7%(9cl<.Ҏ!^X3L]r=3x7Չ?VJ0=v5xtIyCZ[S)YkDW bD39SGN=; ĺF[@Pg8C\Q"LS08RHz#|u٢nXHXZ1y//(s῝6Z챻5Mi 9t aZ~/3?k(wb {Gi "e&Y J9؂CȄ孤2; $^kX"Mn&) @IѣЎ#6ףǿAI,ie,*UCLýC0%+GճzyV ^LV_Py8j_q,55b4p6"+6xB60u:0ܣ8HAfig8pƶׂ0sjR ĵ kH0y<\OIEHRn^|3e ),0om?k#NH^"8GH-_⑃⣬B`Wcgfb0ćW%ҤZx  0b `š%48/CZС-g=vE՜&͞LE Oj՝F##RNe!F+FĆ 39yeMd$v>D-{,ۥ !ll%0vY~U$``]H/z ƷJz.ˣѼ:)Gb8a]Cќ u4恬?#qFGQӸnxW䫿B{ze&@,|*6i 4"%JA>8FpI˦xJuvu@4,I9 Tz䄍 9 Z tˇq͡3n̐D"Ց:Jl?v޴ GȬh dTS,\&Ul5(0md26ˁ؎d'zVu-ͶrZ@gmYg$J8r#ViWGwM-4y%LA auXY4GT3fnʆКEǡyBpQk4Uwi̻`;"BB {M2Tȱbx9'v}C;' ~dSLXϮ~#yk/n׍N.'K@hYJi佱vY~[`&,zmC}v3~kڸ{VEߥ m:"D\.(u"[@mbk 8.TqbqJ[=C Æm )F4OtnL^fW5: h;p,!د2Cʿ>zwsLx|^&^= +,;Y -8{J4K4qKC;SYy73 TmZ}b=TXu<: 0]0T35A4|Y/vX3WAjx_f#ȂsI΋ ^z5Wh%dM%kpde︓ Ĩǻv 1I6!n@`X\$^V8\#? jMqė>ņRULMsbty(Pn )}T.$4ۍeޝS t弗R#F&dػ'9zwXX=~~ ný\4ӱ%7;J H*#(Z\fs7L[wƩAFKU(tcq1 !s >J>8uV#z_󛙁 *19*ԝvl;LXR~[3O͠|fy(@ozhuRmKl<|nG"Ϸ-݀Kf;\Y>N=;>߲Rc>]AbiH؅`o:Eqy4"ڳs*#a)r8(gv DKe:鄣V86yn307 bi oU"r2 \;daqV75eVgH%ă4X JYrh uFI#PFE5gE3hs|Mu(T9z@;; Hq5=2O"3@US=g"՟9 ďH?$oZerwnbU)g藊 5!NMfBKul$V9ӝ݋ -{V'mX/31𜫻,ZZM˝#w屝.Rcfj+N{+ P> &%O§cgq+Bt:w\7db۾c#a^=JOKB%؍+ln 'Q2kj)279b-c!e<`ۼPCڟAM呂~;=6}FL/nf1B?zAɔ-Rw͕X{pCޣy׃G=DTWO=}-9Naf,-W6'SP<~s70Z\1.+QAt+>FdF:^4]#L`ᇔeQɧ̠h;ḯʑu>,R9B8) ީ)^U\WBDLyWĐ|Z.tm~޹N'^;GH 2kc9 Tcc9C İ/5{WMgY5tabww}"h ˣ,f9-ɐr4A^1#>BGQ < 45=jÓE)L2~? }GhMb +O7}Ӣ,'$NbD9Y#|%la2Ƹ s#Pbx4 }SSt-YV܎?zD. 䫿3Ex4~l&CD^DΧiv:TxwǙvQffF `\X֟,(9CJs:~#{$̧•}ʘDk ΗN "3jY$o t{le̟wO_&`_{ .َoDv7b;&:+uc|Q}-hz1<.쉇䣷o'`߸Q ܣd^JG-%G !ܱHuEd2}֎6Eb#ZvyhJw=e8(7ӛ >ФRu-fMXGJwĒ-zcE}<6>*<㹝q<+ l6(p,y5ո{˦o|biᾱCn,6|af,ZQўrf?>%A+$U^_FfVe%xg2qKLV%j=N9Ku˸=Dk &_O-QpMkρ&>TJPtOWSF~rlNwN~3Na6CָDkfZozh_݋n~+A.ABJۥ6oNvXjB瀪zEoMVzvpM!ei Q,?B19LCuq(46qe?Q2=ZWtvbb94l6\&9NS#)MUmFlDqr?QT^$-ל[}^$BSiYK|̀׿o/<; /4lr <AVfcCA;nNVo&2n?tO2U I[\3Gq]i*=CA0U:Gy9Akf \ 7Χe8f&H"d4i `ơ-k~>GRYgРwyM)wqٝHv @p :Ep?~an~6awףFP2NE=5TZ3:Z D欚et@L* cB$J*[<qV3ߥUV. 19!a~bnQ~pӊt*-4ZʚnIGKDĄ-W F])6h#>CKfY|qv\3MYV^K!dj[$a~U9ҥ3׌U^@9QR'ɤ !45G6t/8J9bqFx뀤0GvQ}q2Qvˊ:cVaxzJQr_9vaK?DB6 :NI#LaT GD!H y_[w%n/¶/v ޜf<IzfNbZNUocbp!wT-Dь!Sc^h'Й=DA8;BHVC`Cjuak8mlkI͠y*- iPJ 2`:Q2+/rr T++di_Jv<|fB\4W۬(%mo~l \Z O@Y@+|02q_P+\ w B!<9uoB'ͣF@6댧ZuX#u#Nw0wk(dDА!/Zja>6hO 1ӧ1hqmgds-[{,-QHI`6i0!e$k ]aNwHN统Jx.6XiP:*Nn)|u`UM Kn.Bu(\kyh:[eUud͠'NJs5Q.TR$p7*pH::&cLrIq<Q`zin@|#`] ShX617t hU.byq`dW76=UG"N/[`AEkV#ЋPn;l~2gzOҹR~=ҥ0X`s}TUK\y S0A DQvČa#qkH5RSҮiyj SN _cC$hqdQDVl-#tu+1B\%7 Gٔ >eK8xwè*\&.#Ɖz}Ẹk FfN3(WBeܒW?38Dw ߌ5L.`w _!C9HҁA֋Yele/ iѐ:7^8fyEǼwxA ُZSҘ6y]!-_+K_Pzn(uŔh籉V)|>PLu|Ovme6e Lɢ]¼'_q~gg-wҵ-0J8pPtܾH mRnJz,m }gXSvgr÷Y!aĴӣIϥ6:tjR"Q97QkT;s~ZXDn.(;9aHUGMzd>)fTr™[d)j}#U@SIԷds_$Y=L!haW8EHh+?; }D+ZBE:δ:?"gD wP[E-zfKl[o|ܟ[(Jؗ{h$BD&a6 D8T{> myE m# "V^DXlI@?.W̯zF`*^jc S= D oB8W v{is+-LcQ5核n:;:ʄH.,J1Tin|s7 JrNx[xZ\Qy]H5+KKDDX6wehlʆFn+QH@3R\ @ J]g-E_apdϦY-0ႌ+<%NPhS"YT`V{84C$Fae FVhE&> :ԢWF[Rd KX耥@ʋ1eAV38L]֧yn1vy%?:… Xg,YJ!i5s07.;B;4*#Sk&n^߼LC% !_PZ>(>X+^m#{"*+0qA> (tU +i_J,)g@ej.7FXl2'w^zke wqa`z.aV nzJ*oљ2 |h)3 ϩ]$2371^5)E!3fj͗ G6XR\ZLUfEJEF%}SVܒ^쪴n6}DF{ o d06< p3- xja) ѓ/:/d1ԴUtS n Q5 ݞI=eDpS4u++;HbQ AR4" QOlsZ-v#| k9]LFusQHϖd_IۇՖ|U)d FޢNxg}TɹԦ_N`T<9!sעdY TUinq.{aд'8:e | j3:ܿ&,tֿScS(M阒-?ab%nLǙL~7G%KltS}X2iz\b܊KƜد]*{9Yv#`*#rߚ`ug~+s7_8#90*@H}&+Cأ"Lxؗ# u6=*9DGnmԄ LգY:Wsg' 8ཹM5k@8[ZF*"2G%/06q~9v6WYFn2.`_4q?G!ʑ$0B@N@a¼$Jc1&}psN[VjAĆܙQ 05yN}'sĥ)śh1% ̃G ze7UG21Zd>C8_UۖOmpw*j#6jnIS #z3Iā5Ty@Hs1d=$.lvߨ ȉKhn 1uFmddR*\}-jUƠ@LĘvb?Ay6R%z IBw57[Χ=Cͤ@X 9 gnI\n.*BzEJ[SKTHOa݈ȓ/{ T;bI[i<Ƨd_ASڌaa'mNŽR!T#= bezn`q*놊p,boXgI{Yh8jFؤ;5\6Mw; }Ƨ V(]pL7}i{5>KYj8u^]bdKRFncoҐf4!G )&%9 vW4pc**ʷA, bZ)'bu~iHW닫ENNJٻrEM=BrѝpdeeE>I$ ꁥl\3.%뻽#x̱ylEw(Jd4õ"JTcqo'.fZEl^kI7FibʷhԢU+dQ>.Xy1 ۲w/*ao%"WTA=ER?Foť^أ*DYbc1(Eu 9QEEs'&z;ptwZN(>;k/blҡe|_ TV*k d9 ,q€E=hJw7pI_ZTFa[|8%GKi 8at`"Av^A&\06I8\,t-t_nuxԩoqaP%XrWmkx`#iY&l7MWzF '"ޣ,\@ +ݡUT(]Ntn~^9"\kHN]x*q3A'`mZt;IFw:=oҊK:h$gz͗e>Fmk mh"-ڙ݈FGQpiL-eMRK!Ι#TF )ӺRfc5m1ܠR|VGMUUij#D/+{N .2(})~ ʰ}U[%е k`h?C7\;՟[M !1I0xnʑ*@{cQxI"Oeyax?)x.7Fr^OFY}JZřU4oqD~&%gх::7H4 c UJvUUSAAŬUy$MƟ~6z|F)١,"hFudK=5;iҳmzsIh?iEsZYgdiloUS]Xݨ @'6^Npa8{Lnz 4/M=7Xbp(cKlJ]*ncUG,c !&xՓc /aNP^k{y'.(Cf&  Wm{ޠ 1Nc3QgI\sIqEh]9-]pޑ\aWw11vAoNAck#M=E2z]M CY{ݧ4V;6 Ey'ST+`VBZLhIJ+^fxSĕ=[C\fʐnqIk}h,t+\7\&m\IR8OK#g~ 26NA;d=j7:Bŧ^Yv_od7/=>K5%E^BǍZykbwŝp:5Z+hn+.Rnv6eobV "bgv:hS(D?a@ȱa'$ߌ u&7"+^n-ho ~չMN"e>M.pbci/L*2;b/tg b_ŁӋwR_3:% M kr>b %mN*Ԟ/jʰ˩.ʠwaTru,.L^ML;71p8ܒF``>$,P=s5/O@ -;w9 Tm`bf~nطrW&iYӅ` ^̦Y6h ˅`7Tm09;<, k,!d}D×kX#WѾk)}H"&:NI׻ձ PNT|nGj95"ZD.W~75jG@%^ux_&J]G8]#}&5{I;kNm(^wN# vY634p`jgS饾(8nx/Z$)=~lȿS (lxc:UY 4tfH`5ܱ_0=SCu#2 :oHWrmGt^ݪ3|+$?s֪)˂ypM8lÚZ!&ifzTiѠ􎨣: 7O=) ; %MGNْRz sZY]׳Ngn6Ѻ̢;: phtr1I(CAl Pn =rTI-o1)(&ǫ^%ls|#:&NGY=U"5.f+ɒY>h/ǰ=#y4,?% TF3tXrDQip<q~.Plhe{|/WR_c]r! #ή˅鎺RY&L\ND[N "pIY-EI Mz+L̖Tm>W3ks#4b { u`fv}SI"UF2j5~ɗK.Gؤ/ "eoQv1ѷj"R^@Dxet㜋ߜc;߇㨺Y4{IfYԭJˮ ^RXIy?U;㏰~y܃5~>ȴ \p1>!Q($hp)a{ Y LLc:oۄKM{0v\~ؑ ېV{`k)EnJP}Xmy[ Dx뀏1M׊|[eqIJGy*bBPbFìDS8+-TOx!ox_CYUrKւF.Ok"`nPVWX5{rlP9tʵظɩFiᩮc4RQo)5P PxK@Z :"A͖kQhV<0ysd6@w0E*}Jo?TZQ>j:Mk^dzhєkinFq,HzY Kɶ.OƁ&p݄̊OaުM)!~gEVRSlNǚ? ŧ51%'`q;YJDM~̜0!([4t;Z \[RRw?M\(匍;խc̊"CO '2qobVŲD̂3IH^MM9@02:d>||Eȿ6-^ 5vԝTd6x$px2h~.m}5>΢ |(y11M9= y݀XK={#~d'c`$rt+8 9և"f|E7frIH{ӝ~_Ap$mQ̋3} u'mq¢7S{.>hTAYrg66E7z:virxHpϛT.z` ښвHYZ`-PޮUCk@&H?c' H-4$g,8xl\ U~⍍k9.M$Ge'.Pc38ki\>x+NrnꐘXK#4hM/=-r:e ]X<ҒsRHI͙]mBcJQ*gḎ@JhNcs?pnw7$*n,ņ:+c&5u#Y|CZ#]g@j62's|_&7CRr)9x{,ҋ/rr5 -Km0u Py#;I4Ǫr/x_Wb(v OzyT!7usFZDRz2w^MY x kM ]6na';BeEha jeYϰiĀg$,-4ePd^,A/ ' |48h}uz.vW`$XJ"򁽦`v8 uG0a$+0V0^ruuM_j $06c=(|b1j+yu_ ԛtUQYeH1/R:z[ypyuE/xtw2!皎+uo)P Gi.Uw`ert]t\UQppdkIm r#jK`C~&pЈw{A);Վ7'S=F3GGw;#RAΊřJE"Gń[* d_A/(ZzB'gwY1Fs0%Ea+\WG@wIQg|ԧ]s$c:em写 =׊g Yn< P7^hC'Aj`w.p|PXD+vL&*SXsy2n)h&d  yYɸViV+=RM;Dy4G |⊹eP$ X,$*% g -Cz'P~ЀZ0ⅎ-6`2C()+-ťA::8#VtA05I&Bdn'9Y/6]LiXQ] fe0v[ScٗQRVDS.̻_%]YiK`tbw]8Z5tL/dvU ? V]W~&Bt[I- yꠂ>xG{`(iL75߮0]4 cY@Sm3 á ת7+هl@yB/_Vf KB8\ TF4j)bZ!G1j 0l]t4YCQse+)&!ADfژ4cyO.H^7\t ! IeKv߳ HuB=nMr ?ky{y}̢P03I _ X8T<ҵ՝R =Xh년KRnp+b;mnQ 6i6э/m3XΙНAXev+豦D`ej NI"8P][»cg VqLg/1lA 0i$_iccLp_ ~H6nno̬BqͅN_޺1*xêˏZH-w5.Ȏvv,S+u!JLj<ip@1ajt.{ hԭp[{dhG"~Z#p e WQ@p`-]֧iXZ3!E#zL+zx|z.12)]LPtmR&bPnm|q]#oPWzUbBSE4Hү-[Q%6pq^7~mAA18yc QR@ߝϨ#f6k*cEFSpM س6oWq])L;]g2]4Y~OK_9ો#%CKp(Z=|<\?Ϳ)EeQj+-!LokPWN#>Ewnɼ)ey7Q ( 5%Ɵ +Ձt xEyחyf&CaD"^:ȄVc<>62@?f2ֱ NZ+*VJ*GUwvD3yڌԁJ [C=~%CfSA؅K ؕUI4dо(ouI9Yo16 2%ku\) o.`%xߣ _LpEZa=G0ւNSSվI ?/ؑ4# .iguDy6eRxfԔلT[-:Wز*۳g*%ك%U;Ö:nus{ onv+1~ZeafuL=2AE)V5GՆ YEl>CaPn= T@pk`6Tٽ,bو1,346Zˑj4*>N \:' zb{t.k.BgdfCVl21i o=F<ەLԛuLUm} :?Ҭh,Lnh]:pzPhqxRb0\Ṁౖ._ibat8(9@#Ռ@T҅JB aT'C]Nc/kI$C\Di" LMV|UY ^^̬|ūA 3xOUlaz.aoCRh q,:}J˺7,˷djfNW-*v&XpӦ"e;V͛kv/00z!As\ҿfjw7ԟguDqh_ug"0c!n5Η9댨Ĥ$~ ̽ݜF$dv1,Cr/ .jjAn\ҵsG*(6ޘVZKuYhऎ?PYG.IlLMjͬlJ5yB5'U:`6O2?^a䚧tBaMG'VT=5Q{r"-`2I{1-y$dy#f I˂kljXα7L1N S@QK'4{pC#~1m N<(NHQNic*=n$#m;Q6*~< @wS[M//GJSUbY4Ьb:,ݖxYs[eQ2jB#|Ś <-n[\^<ț !9DaAYqPB}v]lԌwW-6EEMu+ph>6)[g_vP𒒽3yVΝ]㫖EhtЊiĀ/dͮyŊR"XHo1"aZUtlYts+VI /$XW2~v/`F JF"SԁvE).q&w22fy>@l$4!J͸\a@PwY-|k*C8$jyE)Yv:KySN*e'9=z[t:5X`>uƣ!AeR$VϐW냷 m/|pxMOjf ?CSFiāN͸PK^ԘzY> Xo~Lv _nK4^ yB3xzr%{q|#W }|Fp,d_pN>vr)4R0u{d*u Ꮅ8՗&,n&vV.p ?jTpE2(۩BpϤlY+Jhi"&v҆I8*ۃUﰝ)-1V()ll]DUp0ړ$chU-c'mpCcQNٖ?̮\͎8FR4E{wNF*Zb"`|dMUռ2:u4t`+QX'$ @mzR/$6݄\Hda>W/- vo.B 2믺*lKrC]*\#qul܁:D$ݸiO5rt|f DS;Fp#6^ZudwO %e2on=\f(9,hP}yÍ `I 'eo5 Z<}݃E#F"!!C/qcM$;sy&1:̆z%c#qD& F>EZRlX"b{_'[TJ܍%ʾ2(ofR-ɮ93kʮVAUD%pQ]wx:xahCz!gf='/[fR!{ ^(^ƃȔiS 4F|CflLLks!{ɦ!x>M`QsrҾ gkWpeBwLyPLQ ٙ[kt)4NLt b:/(@hFܿ"Z`*(=LխXợq+:yV@\H_B%"Am"%p{)Y%z^t\!îM*r*(  gs*a`YJ7XmJ",ogo[fȬXn*&|`HZ5mc7Z@A߆%( ]fЅZA.W0Qڟol+>RZIj\N[@kQYs5 )RZ#;\Dȴ@o! əWɑzcٳud#u~S,o0(X#,f]`h L0b?~ lf`V WQ#MO#r!镒jݐ_!oT<\s] W6L4>6@yZPK[՗0y_/5*G]ՙoq}LΥM#;wfvWl1(j,_-Y}5tZ]=*7EMe" )@B{e[|F}n|t +GN?cy3̡ fd9O un<4dTjU:M4%w=?vi{%r=] `^škH.ab={p+(1p,=뽬^64H]9c`R`_C!=Iü`vRScSΩ69U:PC_J>)<Z׸!0TK|>slܖpyhA7Ά@o'`z}&3@5f?ʰfˢ8cuw%1nB()ąe' _L(|+` ;NJHhR>9P[Iwu`/"OJ;q-q;OmJ;ѓSseQdùf}VVޏȚ( zFEj!dI/gzZjJ1 2%C˺f$f*ݸ!דHƕRi }(O:)='#$"4NVn(+fmt!Gϙ/p}o( Ok!4 pCMI zЏT]?Z4LӾtΞm~9ZΰՖ̾O~tJ_n84O%neܾprKlv]hذRq. 5y. -8.5Z$!MWU (~rj1aLTP_rR}L2Frt~l?Z}9Lhjz5猪W3=]g6l: cr}* r2(a;rکڔt9}C($4UH(1Afm$]t I9Qu e\e>=H%![~ĕGy8uә @'L7ZŹW l umŏauY.]\xšFc:m0:`Qwi7|jjk|ޭK~#zO uxu0(K1[srNCc|3ZP:9 Iy*%Lqt 42"{g%-S"K#;^v{nR$$H2pfU$ir,w,wAvX7Rd#{x;.C3Zp8Ąئt~yF+vp٦T߽ %Zn;2R1ef ݲx%C\1D:ҫ{Í^$(TQXq+~VQBi"C5MRX-b8K}Q_Уe_5h *J|4)҄-rZZvqU7Z4Y_c?r΅>jOQ#GnXɆ 'xEOk]CoBSsZ8mMl0޿@@<7/(Av}i#ϝ|^n:kM!I4n/ cV-&(p|e^$蠟V< p-U{mHY ye}$lN ?-͵Q@i_ DΣaO OiTM+HBz+2m"',Mlܤ=;$bP&C7O4kZmXK1R -tw[ȯr ̱Pn |N{|(ꯗr9N}ǿe?k}_(V!_%a d80"\+XBm%y^[e.,o tqn): &ЌGcZa=)21b2sЎ}聺FGƯYyjgf񞿾 YT(f5c:'Lȋr~iIA-zXژ .;n6rdL_i ooz > bZ7VΜ+j--u[_e ,x S ;2»d|W^&Wo(m5xf+L`TzcGHY!R؁,8fHt ltwkz"hB@+O"Auj5&0F5j!e@Rݒ=P%z慑ڒ2ǂy0 ۴Jv 0)v\Ⱥj!l^;-p`T~e.imj0b@/`΋Lm M+, ;kl! qx1}Z6{%=7fU[8O|P1N Dџ"6tU%0 eMl_0ڐu̧E8+Jeii }JNsiI,Q4/bAd9[a؃]\Nj!)*<Ҙ!yjKEVQN x0,]- Jt\?N1ӳ ; {/loݜ҇KLE.,{>ݜ(bf"Gb1ˑGE~<\%nHwX8*{<(RNJr^ '[G(={p 3iJJ:%&Yx-AHtsK|BzǞǬ8)FC/q!Gjw%2SRAjDlsToriNlNiN4-km$w,TpP7AJ UԨפ 녌hj}d*AЭ[&wbɧ* c NW7N'xTh.c6{WtA+7\R[l5ru9b?k3 /)s C7AǤݱ݊*0&I&7Zc[纭>V.:)c rUvDg +^A'3t!QyXkN+#݂ aёe:/߳cULu+HV,ux/Ki u-T 3&r`bh !,I;—G~7jseroEn }^rn4$/\"('Ę3+dNOcr Lq]h]}\֞2@{uV\L`BfH=1ͼG]WV?|58&,{aw+*-Njne{%&nmf]ɵvQIU8xȒ* ? jpvXHU*K"^LҲɝ:v`lm-i BEK5jĐ c gkm]nbC{KâfY6ػjt2(m> :g <ʩ|It6l, 2b5lX~9}fӁ[a ;*s͊OZR8jc%x i6d :<Ķj'TI!~K1 YYp,>k8b#vbZoq,,b@->F$ 'y ϟո{@{t\V=J_L0 #ӭ{4}#TtqYPP4c:L9w$DMteG.!dɍx&_3ϢFRҶԺIEX&|{5OT*JvynJS e1X)a`:kL t^LeQt[]n3ס#7]e">6ao0MQ;X?fraL#%*m_ ӏ>J09B 8;VǙgQ{"5?$fLv!{WEJE8~j"cN.Jt׻41.$Dc$B>C rf]t!NxD56`CkK;/ l1tCԀŞc^`mMu}hYezyp7;gx 0vdS\2jB܄ukJUw*?|hOM;Hazп NԌ0B J wW[@nord-%)켷a5ӼP6WV)ה{XL`B[ϳ@P4 obwN\W8V xD $2fWvp(L+[);QATDCMRrbd7*s[iDLCLwu*I)A="|; 7K3Y0\- j]B:׀>*%,"&REi A#< #r{.P t0!gT wq_ Z 2,uXTŁx}0Bж3 Z6zpV1gKQ LQ=.Nf&d~:i04Ukt/f'ZXɹXݲX 8+}댉pgYcE;RD)+ֵ7-G6#\ʉͼ8!mSyiK4⑨-t\jۻXnǼrlƋ17MbLF1)-ʑBIG K(_ys(2Tqc>`z&Q1ކ9?Pӗ)ԳxbS-KH-+9/ր:#*hG1fZ+=/`^dvʗ)l7EQeB-.{i9]/W CfITMA֎A/8EI;KunIJvVv٘1ՖX'8?^e^;rGFqEƨ}iK%@{TU~iC%x=HM-$W(_»&Q1B+X=}Z{K]Hb.-L!{(Hft_73n A=Kzcm߂ ,LpJ*^[Me1?BEcO*d"υ*{l\ /֐!w&h|p hł)ݹWE4Qq+2LO&+ҵ4~p# Po]BoddĿ:ԁpO ݲAj9$ vku{NZ'xWeEΐuv9=ERUAE \rZ}>jD !C޴VsvuNuX|S1w/3}~ {.{ ?WIP2^߃ͨ7$/ΐ\,~>w*Sr6o >ط4CPWXNx!W]Z=ƴ(> Hɰ=𨂍\]q 3`p|?]Fc*)DĞ-G{G9td&ܸ cuT)%ϟ |D+{ehǒ]Oĝ<:0Ҭų=֓¨/Va@?g@قIw9y_Z+$+F I=؊僼|ZX) f-l-x潛<{YaNb"@M@G#ٛPv;s%!n[џ1 I %aEhR=tdJkflmAMXHsge8C?OyxS?QrbG.zSeo%!B:޴JJ猂a$qcȚ%rhXgy #THUDIk0ܹaJX[XKNߔ'?&#hހ}׮9KX8sr̡ĔOf_j0+ƕ)E6U!|'Bsώ!¥w9On|Ԣ5!*Ǝ[C[&u% @U~1L"]D4i5MAY(~6*0n #Csz>4$fSD<\xqWO06dGY5bSVU#BIr6 l| a=nIIcd}ò2Ԥ^[?62 6t #%4tw9¨(SD%}'"G]$~w!;#/!fM[J@20?b5,BE=|hF )r[h ] ?U5Ux6W` 3{N'pv9zcE^l*"Pu l`N&{w;xehou$E5QpbR/ $S5ck*1ѡ0 yNM+f4 _؆m ƹ/(a@+0Hh3B c3q۔D-5Mv@o"*$'h1>k r]gJy1: F?=H,̽#׊ۏw5 6Ce ӈ)C港3G @2+=$B:OHS'$L(J*@k>99Fm]̠|c"j+ nRNrv28#$-tVНDn6 ")!1yU ['Ac.Ygt:lFhD^BH8]ťi̥ԟ[$@LN2C:թ(糷-^Q1rA/J6ݜ֦u&%sJ^ Qkf7iO\ 9z-yZU( ͷ} ^;w=3QxWxK@3%u$(#C֛m)OR+\ GN3ij 8qierQBu2Vpwsi ?l>lgEc>'$CPؽlS1SbAmh%ؖ ғGU k%4L En^)-gDp8{9Iǧr' 88H\ʔ8D6( l hz4G-cb„hՠk\ D!B6@с b z(xbJl{0X)Y_`+LGC:imuU^71tWu3 2Xw\ s̭(V3 m󼂅cmqWe!eSdA\hJe Nq؍]{-ddacl,[-|.rժ:)1 {b4Sz;8i0ez_` x~xƾIjIuwYUq9-^)X$FESS07;I9/'GٙfÿWȬq6w :9V|Di )zz^ɰEUtA^wnpHuP4FOrx  @ҝMZA<-r`\bVSfKM%ĎKScv ,y|GNb~3h?>ռmij^_D] NѭZu { u3 9KmHl2LEd\"< 3wT}gW8ϒ'xzg_p8|B֘^Ͽ P誠xd]]#EM>H~^ҧt6ʄ%>$ LAs;*a6{UM*PkkطZzIWFaU9 vr͠oQy" "+|o4"Rx5}4 ˎ?nq)PEځc8֜ dI=e { zok>͙7|fE4- bKVlֻ$rFNh;LS㊺:oU>18L~S-mX1y f2\{ 7*(@o4@h^gD7 9nBzJ."L4#> a7xW^mÍn@Anr*{V9dY;c̝&< AJ!;EK,0^!b^[&'=2/aS".aq^L9@0*6!/? '~0hJ^ti2~x/[9@k4By .:b] Fp, %* aÐT;|!_(a?5e9n$ *./{_h5HªR;ӱ^2M(gFbJȄ8[jhuVx@>wd܉# J/ rk-cqey$7y|`}~i^$P3Q;7ٻ{5tZ_tc0n5혯߰̌:ĥjz3z4ptĎ#::8ZߕGUXP0 JeVVCiz:Vr|%aa+'0ӌ[nQKM)(÷~vՑ R߸ (R&,sZmۖ8K.:Tk7.fⶩq |R$'b5% )X5mFd.wuqLIj$ .:&v0\:e7aG+RkcMGC9ڂ`mÃq#@b~ڪeh)2v!-I6M))һ0Gm8Į$B+!3q͂CQg@ Izh`jFyK6s+ќZ}/Ep|}\m+ـs,~ҋr J"$׮C >z=ZAq h@ñ PRQ%~_Ԛ`XrjNWM EY[d:cCФP:Fm1)ŹeS:(u]8)xri&ߧLhg>$i).+{[M)\hMS,JK)kHն @czCDYPxV b2b#].aj)\ӡN4}4Gh%4\N',= &ݜZGv (iCcegoVzlOhp}(D)v.XTeI_+l i"\q&_d1b2k<$>\W5w 4Sl1 |Ī4ov ۰+OzGz1dbCWdy#E6`sT0tq42dfK/po2w?p5oj)I8™.?瑺^@DZ0uQRl`)3}YLK]o1TTKt2-̋UR1~0$,KPY4Ġ^ƏB4FM<\8ƜJ\2/yzfe Kh;"xy `i`5ę|߉lx> 'ݣ^q;14"VߊJY<16Mt+bP[,"='Dy0:ʅ/ڧ,W G3Cc]\o%ú4D[3m NĎCV#|  _n.,Tu:O.>=ms0s"D1*fDŮ0X_L2٠ m7f`|l={O\>¦9QJ2>ݙ?  oW^h3Q%yMQeMњj.m"nVU"ޅCe6O!@W0TG(k V[H3s3D;C#~Y? I/^vQt.=IO+KhR{;& LQZu2HUWwVyT`w>7(Ɵʯ,Њi'hKI_cҬz^枠&y9G@%WLD~Kh:xpA$ dd|:T 齿b#RdWUiڱʒJG .pWOInvC\Po.Yiy@RD'^w8tCwKyɸ=iP9ẹA-A.ާJp($~ "df[*{h.X)M1r,ӝ!W/L@U\\zlz(Ffz#ʹ,B 9wY_mB r V@c)ƑrdZ崋4t+eg`^Gj*V-vbOAޜ܅?L|,U 4MxWg'ko*'xa[hSВ)_S qk,r̚#$if;"[ڣmjZ.d2ܭ_(h0.FviF0T0ٞSDHVxC,%2Z p<%Rh4IQŮOZQ;Ǩg~*?T2s硕 j9*FwlNx纐>b ~GUOd|c[ڈłѰa҄P؉;T_AiA>3TDpY蟵w~`\ԃ @EA1O4U"GhC;=TKbMj&T !O?upRˢ Ąa_h'hZ499j9UA>v>ݗrؿ B88[i0tB"<c!UhŖA{ rYװ̌ax&D{_-i֘o$H&d{߄>0 +c0Ӏ(oN40) t/f{VVSVOe+*t#_M3slҬMF'0;9,[Ld$kfPb=sz_qA羭D&WW2 ̑,ۈ$f"hDt@Qu}o!Јn ++n)QHx'PNɿW$m}[^bOQPat5KgLw&u 6\4_dw.^g>/B2[ʲ{WSi+7ZcB!Ŧq|2k܋c@jr ھ8Γ}hsGWwЦk '45&>ma^a$D&W9iw 8'm`ډ;7e/\zmH3CU$4(W'iۮlslq.AGd01lyE:C|y6Z}p- 1YDz3*\޵fq۹yg Ht7Mgʽ"HX9ִݰtpb[^i[Dn H ہ5]T+CƇep I0zȆ >ob"KxuH*y~X$t)iχd$\쇷t2ؖ)+٣1IQׅRwyp3?B=AEem}'b"+(>]뽒"oV%NK?w+6_# Poy8~+8hӅx29ffjy+A9 C&Fh?O#BP PV)5u3M$d^%P `$?7L:MM&?[-Y N:>4TdT>@ܥ^F )W"؊Rxsy:#̜`" Ke%vmv3T[5,Y>Ju>f)u5"XaER;\B+dW] Sw 1>78I &N[%x!JHOy'a_c~Pk'20jM-OJ[MIJ%x;b"߹FT> %_pq:ob&m$ .oi:coY?l«\@%!cdS?qw) u׿-k0p. ʶ1éO@C(>b/4O۱W #n y5vٗtzXm@Ek80OXȅ kأE~5 $4"i>c9*\l d[{^LDF.+Vݰ|iy(PEL S'ޢkXzvX[\g2z.\*h֝ Bk{Jpɚ|S"ܮIgqKfғs]+ /S6jJr*LiFvGG k|83O|XY/l#t |X$tʩq+ߵl1R=cZā=t+>ZnNg2 O3-((VT8<1dHďlzJO+L5.@ϝZ-ns ~5oq78iXÿGٕë_{LΓlBmQ+P%l(gU%wKLۙe @+ДTZo;S )>ťBlpЇFniy7cqx9R.Zܰ~mH$?cNo7P6uyNi }Koe4POx%d9_%7\b+݈(:=Ndnq!Jg jļap8:2蒍#Z,Hd'% q{Qp{`є. 2FWVZ|Y?{[@iENxnW!GH`GCA};UnFya S|pp?b ԩ/N|båTXTpp}bx n&c=R-G"_ Xҍo!&X 򅇘Jnj8u,b).k#SZK!!L a ]0p>5$>;zs_)2PpW9v/:ƻ.^Cj~aXylu%9j ?QT!Ѐ0¸yE)#qO0#xIgqBs 5^E15S6O~V<';P?t/'pNwǚ\He]0|]VDǬg[G_q++7~7jvԮ@X"tvvzs\:)Rݹ&L70Q.kY$ =#CelO2@)_$.ct@HYFc@֭LaiHR9\6JGeEĝ\/0~ybt/|!Yph:/^,sַ0SČU]{QyId:ݛ9秮`69%u똨&wvl(c\JD,oЮAn"9ހ`i4Gb1ؾKYvԢ1Q/O6C@׺h1pMGA#es!u)~G: jpY`EuaQ)v4 ke{U Z)Z"V?~' &89#?sX,0q͐Ƀ ezd`>dkZ2)KqJM #hM$ m&/(I=֚H7vJ-zIY8v#LN@5lEQŎ1k舵NE7,}ѭƴI>`ɺ'qT ;U ms:\>>)۷|Z8/۳ܱǦT.Q>֋Y!7JdN䍵w? \]:isD KUۛ8`{h]=O`?Ddκ#_d!Aj3U1ٞp|ێqOػN r(YD\Pd?x-~:'g X8mFAӁUVg,]xx$٘6$7x3FDtB$ťwyB91i@'8A!WC#*h] %vDIl^2E%1 v4^_wVrGIL5@A:YM4TUge0OR96v6)<&YWqOTP.#o/ jjb7`X#h'Gͨ5RK㏨)Jj@ɑu<#鬝U mE~&Тu\Z*;\$jZ$ӂLnB/Q9z=PY Լ ooƵK<vx?|ueh;\V:<]%e WxmkV{-H;O޶2IIb]ʗj{A5eO8rJ]+E ^7{.hh$%P|\˶6]Kpmrt hEJ ^ې> =.>8tx(`=N1yHBZ*ɻp >ӊxC12C(nv231amwC7BY8JҜ)21%- i^0Hb/ u'm4Pm 3#Ϩ .Ea?N)uĵ玈4ʫx3} = Ιm)lJ _Ȏr4mȉ"=ϋ'+#ZE%&ᏇJO !3X7&vYsIiJN;30!B)zKD6Me.Gnk8Ԣ!~ez!*0W0x,(8$X3s7˞[1AI4Ү/Am}ZՅ=|A8L'_󉍔R9OCb0:UC-,* ߧJ׫|b .S w.op9]6% 7RnOtĞZ6hÝ[ȏm(ĉ}ؒ:딑Nh^꛴tJڡV/՛:]L|~.W3s)cRF4 DYI*_BBJ싨<xR%@s=&.t)U!YMi;ɮo* n) dzO>uNL5E軴Xpǃ.6%Ffps 1;E3eDWy~`7m}uyBZ}Cf~4`> xݨ. %k۰kո+ߖ.y([y,^D+H4QEQ&.}B3,J\ɏ01N`=~;->pI#m?1P.9DN  ?L"Ԛ/WT,{( R}YۡRtiBWu$Ua ;6BEA5;-X#jV..wa/@dR _m|B}%ÅcSDI`êv Qջ%Pq׸fK즜F-$iw?MZJ+C}eTYLE 1b4:}-tFY?wz3 $>ZijoL`܏G&/3,Zq$tw ~Wƪ :,%fw72'O:)?\ZȔxbr}~'/$f|3I+yG7K[%3i]Bh>Eߧ5)~g9X[ʑcKe[(@4k^vpCxYa0Q_2C2#y0̝bbQl|zx2yMjJ6t ڠ'v I[1AFW WRFvpZre?8X(ψ2fRfB+&ŖB.Դ?+nfBDɾ@SiArܝYG%X/]@Ⱥ8gS*m$d7xջqe~mmƄ}ض&ڰ9Mxfs$}X6=W <¯f{ݖP._#AJ6Q;_^~Sۭ!#NpKfG%L0:/m;"HPG˓̭60Qu6xj=G3=E.}A{,t˨)f& %}A~{)<@߆b%"/eGS!<1uZ6c{ x*'NW+bXf}C@DJyCp{Z?䆝ؽu)&u(8X,wGܯBS 5ܟтR|0/I@>uZ)s볍8l}]uqeT|]|9b!~)ex_FN\B۲h-h˷u=o)B6EwW1+[;nzF%_uk_2D.:ėۦ=ƒ#E.D{\?h=?%=&.$(vN1TUt2Is5 Vi ~kCt0= ,i6bТkwl  akprn`ţsx&(+zboy*]׵dF hBRhD7Mgbh!|0-][nό?ٟCK @ z_ɾ:/w.= qM>s vX)^Z}͍ dzRSIDXSEGEV@ʒ@n) !2Hc5 Qo oߨ`DH[39k1&?7r{~o5`KbFppT3tܯՑPݮY<QpsZ41dX^aH?wјyR3xkd# xbHc@I"#Sψ~328h<@>Zkus*1"24'> M U?ΈR\ubD Nd VNC@8_0`g/v=< @ M.7Ujr:^O:J6ͬ߬DHbԐЋ$7>H6 F16nE.+u c`BR~wse^NozD=C>*ĸ%t$&wLV}g'II,oP%9z=4$+ `+գmy;D׷ 2wJ:]#eP Rm_u~Śñ1&ÊOmsmvxrX(A`´8o$kmoZ 33[&0-4˥1@m/ôe ~ZġO5Yی"G*;/m) 7h_}=%K2,ZR|FGݘú#cߜz$6kV0/kvUdFw<6b#a+|Giz窼P)UJΏe4Is4GyLz'{F~nJCJE G\ګd1 `vݣZj߮1UuAӵU|$EO,ž^vYն[c1չ[(Bf%?F=8)/h& =#{g=Ak!,!ѩpsYʼn3xCUaf7Ц$!9TylYi0XnK&n1p߭kP~CU(#YG$ 46n^1>(n|6΢ilh]UѺ74œ6}CzI j2?r%ŹmuHJ@;*ļ)lk1vӶ P~]&QjǢ9zOIwWӞхQD![ʼn!])ǘMȮI s ȇuڀy&1$(Ax!/fZ7o=jFj9*3QݳEdםM WT@/ ^QRL@6btLk$*f*Ò# `ҵg* cċf TZu25ӌ5Ei"rʼ1JvF ,U~+R&}72SI%b&e.d7}GڊQ7bz' FNS˼X0z;g*xK8РU;V}Cb[yĶ?ZA:.ּZ ?saQLAtƃ#Grb%rLL}%wlr*wѧĘhOBka0/HCY杗I TWJL^YM擢Vݼg7!1r.RǘK/[_ꁞ\KlL"Iys>%".h~](#u#)kAP~vsE/8Դf%'6Z 6(77zV"|^FB^#- X8VQz׷pZJ>_ z1duݽv&5V= ֆ%yd?]ouIYu;ϥXל6c9#2 t):B[xB1( =`v,α dZ&Ou!>NSrOOQVIJ;Au^B >e5&2*#6T t|ʂ;U,;j^}' d8m;qb#k$ޞmm LzuQg ETAͰޖ]XF*$_nq br/]3C³c%t*l]6ZL8Ft<ęMt KQ$.l4WU/49S31;"f4@Vr vHn7?JƽNs/DBjiMù_fw Յ"%1k^w͆0.1 ߊDpDpH7%B1'X~`.A);.ۣH^s`&VZ+I6 a{ 9زIP"hyMT}Ii^S/?fe֚?49+̕VBо?"S9 ~ySHf0qHt'*\Z=3K? -|-ul/Ɔ;ἐ c^(+-arӤh'Zp1c¨ҺkEDߊ6<8_ɬ&TX@\~괶]< ݊$GNq^FZ h(FE߻L/#+SB_&k'$I -@#%9WUL.A'QoMn E3%jtdd](TIĿq:>sϾ/>No 4h=OdpE鰋\*?:U09hQ;H6N?g=DPGjLiPfptˈځ:">_丹NJe\HkwNҫOouzc!ENթdF -qc ?}%hR)ܫD&jqZqmFC%"ځ%ﴣDZ.4~: U6I<,j3a؋eQ)um\g i+ F9B`gl'nly>q?*|pDf,)DD>v5y 2 {S^jll??& ^MYDr\fBV?CԴ)ma>8Ot wyZ,rH vn|ane D5_KQoX9zb-QԽ@n':iW>6HP KG(QDk|qpLkayN_3p"l0`P "@(4C'_mon.[ZO0w#{K,vFZnQ(l8F!/v6$ߘ9[yQ'yUjw`ĄULbj0 k8![FqT˶uA )A^V]톖?7CHbvΘ=z\8}ȉ~,?R@N_81>L*MLٮ`]++tOIHzq*C5KG#~-8=7.?ȿϷRut'³HxًcYPQKסz|}/:HȹUa$(<*+z]IvkO/M\mi .>1 lvՕbu)o*}H*lZ/!xYi:>T+a2IM"Rc!LTe5oJvMJOꟃpnWGVA{gIYY,i^ϱ(Pҡ`ވ JGح竛%c6θB ty!UKk5.it\Q-u%*dquM "\hc+Q4{XTxѠ:Os fX̳ oE;_bΧISWM.nvOwt ৶!c,b"G8*.c% F{sjq 4C,YǣQL ADXX|Wۋ&gz1 %]+|0 㼣!Y~ K%%mx?ڰcb NdKjO#U2=R3Uf7"T<%OUtVֽ0S-\t 1Kֺ{ԼBEb}_ mlDy XTy1$I>* pl2cꍌ<*,? > >N<)ixv9XH]֊Q?!_c!'F/i< 3>sXhm$!HA n*\-dMd#ۇZ4Νۿn ̾#!x('mR]"xu2O-1PXOL̢&A9Сf/].^u 3stcd+RڵSҴ|оLP2ڜ<gƼׯ##EZ B4^ >!9{(=dzϤ#VmqDgЊ8 %sXN˛yCXUDuH#@"÷:u=a Jm*ե C@/ yU(C=~! 6k뀐?@H;?kxG ݃bӽV|ʿ5:: dFOYF*6:/?1B!Seq>eu9!*;X~5Pfv MEbp `R&#Ak (\7kz2`T*UP Vv榢g]N?!ω:[AnIOt+DĖ'>(_.~l|XzYirWJ(pڍ?6(qx9`RlFq3"G͂4ӈ9gt>񾙠J&H^g$*G`F[Ĥf9 LqH+r?B01RI$z18gK;6Sa=_C3?}͚XS!w&RUYmClA nƓvf{/dp{kug4sn̓EV&VG.=lΓT'8"!"kt[XBZaF8?c<=s/ ̶{ 2Ld^\B\(/Ǟn/v3%jt} Q<K9?<"`"B`T+Ό`qK#i͉>DunDS4-&^kwףOd{3vn1^l7a'O3}Q4S~@GvZ>R !ŋ_A[?t޼֑nStxy'RYA4N4Dn+Gf֘-j◿4|? me^P(3RݻY+rQ3Pg-7N+T!9{,:Co a1 YozLs{=~ZT lClSݷ5a1z>OM[NxtAv };gU;s(rBˡ6F@{P5>?zN Bޔ+j+Gp. ,Q+e՘B;[ԋvcw^Q"(47HiԍFrsZN) (O{BeFKvtpbJ]ƾ\rMy3A]iQߗGkN&/aKl&T36ߧyxыeȬt,ʳ/>tݥq=ΝwEjH929u '紻2<|[L!(mTCl|#pѳ wPs}/wswЍI*Tl*&to(W_#~RvnChu2) =iSg^P.)E 1@쯛r-Mrq0r^ 1=z7Pr}BÎ `?{!̊v+8lPy$SQ9_-f`kQم~ "aHI&<9,i@X?wP7xdU^fO qX*f>AϪbkp- 9FÃ_OԪf*d3k.oPX ;Y:Cv>"X MR4J(iҽ dZxsHo C^M;li`=7]YF>@߮$}t'%$!";8Yϻ=l˟a$vrR \I8`cY`Y^ lJQQAstZF֌ #P2 jEEXOKk$9k?DN*"ܐ!$LYůgbaa&h눍z*rZ@~/N|y`[S^d9Y q$Z Ujq쀧vFYCiUƟ&P*H%G[D*Ԟ8Vq06:zj $8Uha[sD<FaBzŻm:7KKP5yVF\1OgV t[o]㠡Hjfq FGu=wH4@Ho"tp&3P)8~[e.sVA:xJaY^&Hx;,gFIn<˵Xt#dKI!4z)i`}Ztu 'f߉Fu,VkY|;i}"6);KuF74-x C}ބlLwgU_wk{`-޺p~}>@}zDL5 Kxo\u iyPgARnWFGjڍN@XΝ dz!{7#FPC#*ʡhU ]gqkFd;hZϸtYis@z@0*!uXt6bIP3!}swJbF9a1fO` 3TV,7U?sWH:AuWe\=rK2Ps~WVe) zø]9\"JJ-bff*G >B!'[EI:ɍv*O| 1 !E9^:cf\;|k4٢֒i$ay/Ahv3}ޖd@noex_9 o(&6Vqv`ɴKP®P4B~W2[p?CRngW,g\8`ME}.s yp=rFAV}HriŁS*J6ނg"|彈A0*=лN&lF %d%+e&֒N-/ 9 Wn]P39u`շN,:Ow92oA C7)rg&A!?l1 uO-4gN. ١D1؟z:y!&t,lHX`\7>d=T(~ Vlf:pgga eL͌^ysP0whd 3L3/SG3U(O͍ύ Y GcN1}Y gL[GM/$b)5b$֘R8`A Ά>(mOprx(}qrT^4mWna}ցe 9 ͌h? sޝn#%pV+ UwQ^v-<א t*xL: j?7ȥTN*]Y|W&ŗ P%6+)e߯-= tT8{la+Na+*wg`B9#hz XcF%+_N S]*K5(|Ӎ>MW 938n!tTϢZt3 Hv'ۭhK ?0 ep[']/]z@1pm Mا2꜒j`k \]F 8`)z0 @WD6=Z :`ȡs&BflFP9H0tA(FcgR"zT>@t@ӕ.MD@y{rei9TIwLB* 'ҒJNۄo ͎ͧqPbrz}~bfg__R-vc`آ-WO+ċbw̼i&(y 蹏ӯҞ@+n^+G1΄7cz@C" |ưL!tTin<77.,`Di*oм8ân9NFҀ(,Ycdh ,ynɀ{v-<.j[+{j4<$T[vE)pǭBgq T{0Gd-H86-%U9EqFSrDߤ9 f gP'~JCg\jz|Q Ў v*e9Kg%X̤mcZl αxVN-7o8\ oٽb9?rwG=uuLA &a,覞!x=b)456\o 1)LH^^|q]g+hDH1W1=m3Ay4tTZ=ҁz, i"LH$4}tyBAj}N#Ƴ7Y&W;qdq|'O K*a  QwA;5Yu WZ֕X5u Mdjc(Vԃ|{?+U;>e>::q {X/F{ףn>/B.͎{: $_J WܷDI7=]b&e@CR!$+ mŕj(Zn < p&=/CF$Jb/Uy2Bh^[G[XbBjm&b2ͥCyUG,"@eQbl`ގ{v*B*T65QHI4kZ?M,[#kܲȴ#OSs~f-&Q k~l@ҕec wdg r;/<^uN|Ҙ 55 _&2R٧ーdZZ.d8XXquP_=`V-~֗x8oqcML.jA[ݐ$ůsp?+T/0[ g'Ekߓ!PN'rƓ? w{{>XHLljD&%8C (c2U0p&F1rJVTEf~`Oi&Iw+:sBqØ^+Y.,/G7aCjY{YWV]N1S5.TD/ϵR>C[ׁ (lu+"]z2),8Ϳ^Ao׉Rc:A1mKD?6S+lǮd"~}z=ƒ;D95R׃wsK} 3%"H XOۿ±6bȀʛ7QߋE+UE&9 +O#ʰU,umh[a6ZuÖ GTƞfGVKZ*.WN{JT-f,כ߹JZI/\K|aOQS{[F c(U=rDf8E:O;P6F= :m ,<jE *@d(3W-w@ 礤<& ){fŨCct@1:?h90:(/,|68|ΣdlYi3&xmÔt,8++ʂ?S=\( UU9 puWpMƊ=v_x{2iv,E;lqv/ܱO"ʴ?HtK ?鯅ՙq"N ##×7`̂r.:@f\>hR>\];wx !/l֊YE_{wۮ( R$ÿk#i5L~{uIV R'8 ˋ-*҉!yq teczvVD]&Rל4}l.i-o){<ᜧ8dܵM5huwZi  g7jh4ԭu=YڹF$QWg9 Gc۪'J|)RzgNdTA%GyM'Tt}})>sBV K~,,ɈxhpBMx`dR ;&Yq[֯ZeҧW0DE? enatf]jEճFn="_rBs7@Af)+mlҿ5_^0K/)uP8?_9!Rc>AoWicYy7dSyCz)U M[|A y>׹s`xJ_ ųzܼH+#a)nRۋ  ݙy[ynQl7%Y~I بI&kҁ8MkJػOcPȁp*x&j;nAm MϔGz5HpO.Y,¯Q6_`*Z/D ̾C,4%YOǮe,DͫGVOxY_Rgvv/}݉3~k&xsoy(f mNM<Y3(Bm>w>< uPWOrQ ?_Xak MG;)Sp>)39+CPv8Sq-wtnܫ͑Y%@) oY/fE1*:)4<י}siG~f,eΞ+.-4)[;{aWAܮDa֍Π>ֺ8yS6"иNqjxthd4BsC>yzq 'He>Gqb;e/bc@Yi/G }%+ZiE֧F oYhoz>*~}8B(O2E^ga!M2/:Ekʝ-Yd-5k0S=>FR< v-BޯȢ5EaxէaQ q{h粟I,1:dӐ#:Vޮd~@fU楮rΜk0K`-IUݯ :SQqõ]ki`Ptf!:"$NRy$:$o^4(VP|Zx/&2IMmW6|B ˞5nV/!ۄyʡ?BT~k'R=7蘥WDci'1̀H2Hais}z&[ -SeH>lBgN%ϴo[cH7⡸dvR҃nN=VѕYd=uqfm.:c9/hЈKfc7,+'^SV{6 x\@bGcɼE'W&sl:Mjd-\K`A#^+ĩخdV`p&xq=Y4r)jCe`^[.)^{?vlHH/b8RHG%݌fdn|Om~0Dl2C\qeZ)N򌇲`cvR:}ˉ-CE#Et-m3KFo, `ԅElC+MwU w8D)2xqT©> &q"ܬ-M$7"λnjm"P]8Oqed en,v/ wF i 5e!eQ--sL7pjTTʅE.@Ȧ{֛lW8aunۺ6@e|x˵Y*XEgLr{$t}mUtUjo5dKaEۓ5oXY.BJ?̵_]j x7|gԈV%]XLdu'1|80}&mzփеEc7Z!!.wܓvC_t ^zo3Sgq=`߆Ԯ rkC39Z]fp=-d@X[|P/|Ҁ\[\S m2ipuFyg.cC)0[Gs 6J{IetUv|unR;\6곩AqS:}>Sx8WV·~8I%h :M5'zxۇuLzG]LVL'zVkzxd2X 5zsVJf 7E7բG'kK0\3A!,OAh[\ɝD5 L_gQagF+ɯf\m+̍d% +:(9yd~M37 <u)"8m%MΩd7i{ YII]< л GAG3b]_,fk_J>@q#ڴBּOjmo&PIrI[>@K:$ژۅt"tؾKc+94~ gCc2?5XV]>.!HN\XzƩA/X\=F$I o0s #M5qF_*MQ(ț }X}UE5ې$5HliͥDgV9IyxeJUٰ+J-nfD)DWt}c@mh渃ICQ]:H Ta+$2 izl#yvȘ~5pK.\bS@.ViD8l*!7 jO fIV7F̓ytJ\7K kRb\ކ– !:p}(:j/O$()ِܰ]3w)f9\j8(҇jGY ᠎5>"C x1s ՞h4Q6I2CǾ<M逖e+ ʸJ7`FwwM62xO/"qp~fda,Ǘ_?=f>;NQpPZÆŖ$>t !*4(3 'wYeú~э"roy]Eҏy "^n8G8 䥼dk2k=Ep^ WQ޵ntM|By)X*|CH~:O E&qKu: 0#8py(c\ U>ˡ \G8:I#[ шP)U-D,X)~e h/R19bH5c)i~yk`Z=ܾP%8 aێp] M?>mEO 3H/Avt=^|]n:?;i0?VI&A 7 chEAo\s\ A66fdNדaŐDG$``痤אf&EB:ei%fS.gў Mqmμg+ .J{p\ȏHj /1䅋\DS讀oőۻaI~u{K-5=\UqIAYK<~n)d'6#qH>1w1cp;+AXoѹ:\ _MCar.o@WnL1&?raVqI(@\ bEyh3إ@’E’P[lŭJZ6WlyJZ '1 @]ףn)Q<#=dU pz2Ο:#]1uh`[ hXTJ1 Ukw6O$[Ǡ5G1|s&JL'ثq ۅwS+00\gT|̝%w1IjnME[X~Ggr 0uH15 ܰc0me!<ꢦޤLIOwD %^pb+]度NG5Ѵ!q)#(P_0u+KPO9@ 0?K + OF#&>ݔ|X 4@=f;,+5pWWN *gy-gqKS"3N>oMe}x.2Cr'2"WL97h1%bnۍ@(ݜKX@ְN]㇩(7!=x+dبљcN5v?m ;cLpԜ;@ CՁ! 7o5RAr]I e:x*'\&4;959 \te B}&q+۶Xmk}H)84(mz.E>_2׮I q$ٞ,`[o٫)'8Ó͹OA؏r|ov.@|r^,e^clz$ЫX#% {>LDίX'^4N<;ˋ=KC\Ljc:y N}\S]82'l %y_,BӇ0mo* v1H\ O8Ώc[ ٓ~=ےt}Wٳz#̂y•8ivڗ%SXwFy TˌnD9҈m6,yAb{]fD\ DUu/T 'Ϋ߷UX/3;:[ S5w|VabK462búʾwGSzɄA )0Ţ-y?&@6.thJ i}g۪7l~5e=Y@WM NQ|/vlzu31eHrT]q>D~1T<)mVX;Yu0E)R_=}QKIףm*Fs$NͲ]ƴ/|tk.5*Z, \Oktue?I|h|˼d|*;_OY:_EW7D;`kuz+Ȣ% CJ`K~8]:ԌבTVdj; f&0BXj4Tl h[X<;U 3ZqzgpHPT*۫vu(H"*G$d !~ bsdLfBNH(gYW"\1ZQ\6&Uu>C%2}a ah/UǬ弒WV()`<0bX,pˀA21?<.pTHx;JM=V_jE[l)FlswAr}iҿ(zуzbb2Z-u3Uv9V,5}u(w G1l5ӊYO?mxm'{˵"'RoJI1ŀ$mj bar"3?9fF2V jE7b.%8K b2(bKk[ ܻ/-kˊN;? ~C/^l+E#0UUW`n_ Ox"V { WX+/r?FQVC*.4e(yKv )ȆKˉ0AQ"`@cUP~TEyIm*|A8yFx5I-@Y{2T/ 78y~:F>jŏk*$_ t&j6@>W0v9m WJvNZzas8 ̮k&s# &5BBI&18؃rP] j '*y/a߼.@a|R)";Np&Pn'xig \+ggsOZ)ݺdn^͡d SB:\mu%}Br5}F"Ft55w)^SB}fYN'jmo?-KT.oVZ~t ~#gNff1TNH̖*3;9vp`m8#}# |A@ٽX0ݛ <އݎM:j{k {fsVa~OgٓPhOWz>Rl Su O92Yb&AOq.[شtxjMJ(i&z&,PsI UwQsUX{(]yjw潞5ۡ^%}=t~&B\W3"6jcVFAël}Av=JcʹS@)B`+ RgpЀ=SK]7fxki|! >AI3'_o^8Bsz%\e`*$Z+T4GZd `)!Jhd( 6$fRp_}Ve)5QIKTCpS~x̓Lv~c& &6GնM4$%$2Hsq@ȶW*O$A grIzC Jojr[Y},Vp`$;T lQ8ƔhР8 Or.'ʚP|/ojo7?iCvxo4ktҏ{1ϓ 쎗=Mf%`m^5A dz J[¬E4Fju{_ f9kH[MFW6zZ9Lf5(`WT!BkkOad7q0':>jR¹ Df.ό(>ln2UkY]/Ƀʝ*ژ]I.տݟp(STT;n{7.J'?#a`KC]5y-M|;W,<3U>CH|}<_@p>,?zGܫupFa_p{e"8jS 3NsTBROD@Pt#(Md%Hdع~HBeɱpVI erY/ǔryM.ub37nK$xir9Bl@G =.$nnx~Lf >qMH9%X:"9,% cnX49!p>\?נ 6Q_o$t,8+[ňC#Qr%}(qDO7ٷkG^F1Նdc$v,*F(vvД ȭDp#lNi`(fhqRͪg(hIEœc^TS٢5"#}4ռvo2dO _p͒7:TƗ"YZ n5YFi⺐rB6_YqZ1`Z R\]RL]TJC͇fG!E2P(/oe!] `Ԉhtn|% Q1:ì$ G,<>Uvv +§^XEO̕TF]tۈ gGۨ$]<EbQ!rM~r-7,AAkWz;䃰:GHo^6;Fue2 [n1;.2@ggt3k 4P+>yjq;o5MK!Tޟǂ}S;TѲZP1tgxVRsPnTz%RMҚ#:d!1G157l ׾rB/^wc{LOQy(JAo寗ϤYmu{iTؙ9^@'B>jұ!\3n>D8[|.Gώ`wV:]1]OG"!?WD*DygZ= j#B'Xi8lu $_nɷمLW -׿$ c[+A';qЗuEW3Wxg^$6ٹF8N NeCMy;bL.^S``nFG'GdHƐt47:@A} "rVypH Is@D\6qGIG14‹SR ܶc%D%d3=zbL0jW `Hwu۽~IF?cYӲuN|$ o-ϣTe!s=|2 aƺ%l, =t8 =Wkx IJXw hX” ,dLT CEGm-HXhEg4^Rq Nz8Hf!{s%")# '/GA,$ҥeJ,-xD.a\ +x8hHC/!}VJ/Ph{%%:l,gtMYXxVT ;7y^imh鵯$d0f03_Ouďy*uw`EAAn9ȥ^8F9SyxJ&4md#嚇Si=&A2c95ŜGφf*3<3ݟ52fq=Zp3ZHk'M^UB yvFaW.d6+S!^_6tr /) ]PWTO'jc|V$nl-FzM%g{C 0I ,(}YF{f}YlnmaVY13O,*"i[mЯ eGLe= !7bxc=9.|gQÁ.搆$D}pa׷Q<3s@ShJ =|xޜ_vɒ/' G3x¸jK3] ]6 As+Lv_E}*!7nVw!aH`Ah0s[Ϗj#EjI_Y T]gYD}JWp@y{/cT eH5܂`F@Fn&0u# =\tDMvb\,*滠C$r.7[ӳ*D‹hr,WwJ@WM1̏3!\=B o|' 9.] v\؛yN[Rc%?D_~7f-pG^?;IK)ywU eqj#Ld]9\ /xaƶ)MUXq"Bk`JJܝwYۙOaƪ'3vY8$DC=O?^mݠɰ""5Ksѹcg#ɋUFj^9E=u-IY7wۥJsw굤h+nMkK r3D^!2O.R`ym!LO"1~AWI{zhedG'-nH X 8P0ODhN?\I,j(QnZk:i~ЌzL|M;I~VQ'"yG!Fybr#4Z^e7 /f^pC$b>M켬:3]mT0& kSKw|TiUi |wK#/\;.[]C8e8%ĝeZzVe#N`CG#ɯ/XdбRÈdY5#άLZ{s ;LPc^Jy=|+tY8o_ ##f;˔!] $f73)8 cD!iZ^li&y&{ʴKDlE#i^w}W߱~f[vĀ {MܵH ~睐@7X&RK^tr!\ԃB2aאʭmW@d55l%/Y?!aOD@#h`:=8&g]pC|xv\aIJ# .-9e#ML&G\SM2}[/^ Wn8N'kͅ-gaTW j-=]~kkcL&-nC0/wWrdRo֤Lcj)D=GK Vm0>m &_Lz$Wn:E879!vH'$}XUbɫ1>3N *B+ F)Tx7ZvBKS7{4&2Z#.߽+BާՁrr.|$ĕ՟wt1f8x;궜{WMUf$}8 Uc|gz&\%0ccc~SH]Fo l^axDf 6NNI{Y'9W sz O{FW;3nM[ͥz{rOOm1e7cHyߙYa8츘`G; PO \vh{8d6HXGD8^-^d5 ?lq;5K.Ld_X2>`TSJ&gP6 N ? Τ<28{;,XP9Nr5%zRI@\+b*/>Jx9IބEcgLSZBz[oDDYTRmpאeo%TǾ0F| sk@g 4/5'ҜtR־v|\ _zUt1|{Gt!f(=/2sC,&TܻۡD)H^ w3b;g9Ah@Jʅ'SMBR!A7FlNuӔ5\lP(|Rņ;cӉ䰝< 5 3J%X}ƢC>᜹~l^zB#/T(A Ua2 ŧ6e@źJhH2;Uʟ,91fkj\4w0~'`"Y!R_jpt}埯I0-yLu6xN=. f4V9#ZkcI4u:V~l)KAyN8WG xlP\?~姙!Ȁ>V@F) `v'( ^oAqO|ф(nᭂ ,ih~OA5#G_Ͱ(+TKYPFh[n!uO)"ʇ 'A7@ b*88SBSqJrb>Mrs>%^4?)ItDѧ ҇B(ܺ-|>d <̪@#\ҲԞc>6{#]1:z6 ySXd(RBT]z%1 V9 əPO5ÕDtYzFfٹ}j?'IƠ?t<Zy448hΡFUg*k`!5դtB]i8ic:TǀҍӀ箰vu ɛt.{niQ{XT%F,,B_YUvqW2PGIO q7Is(&9 OV0V w-)fg#ԙE;àUEؖ%Y9ɴ6'LJ&@97_ ȓqrv3܏+HC+{! 5"_6VS{7ۣP)w1X#-ƽ2E8p A2/"wYNJ  *|DmPcoxmYЁuE+[o47i-D7sjP5#6֥wNZm" g,$tq&6Hs#$%7pJrBW_I#rUmJnw,{XbkAuH` h/su欁4;)A0)Y:H*P oM?-x곜ٔ(>#'S*!7pS">'hm%lF\4DlnqHzPlMXJ-zK'U:T +aoU cPV%Z@y50g[-8*؂ s$W K?E*ɀRm.{A6MuZ1ek`Nd#wK J*qqU8ݍv]1+89f㐸(G6G;R1yfFpݶKZE7=/;{ UMa+oU\X  ѥ]mҜx~AD!QBcKf0V+}up?J//z}kwJ-ȼoR8OIÛv0"l*)D1n0}oSz}j g ZxB't5l)ZəA9-A-J&0-"߽'ZW+ble8\@7fbwOD:TŽw{ps*#8ދguH#F!ě !',{\.N?:ZS;Uk>v"bnWǷkZؕƖMOu/ {N\ME=Fo]&c}zD 9xB:?6>b]ݽ޺DO/A$ J%&Wx}S}qnBy ^A6J@thHҷ=-[}'l8w ;i{&#e4]zϘYJ\] v_ȋSMk+ٟ`9b-d z f7S\aeso`Nst'1v=3Elt7BNǚt…4t~CDe^&WF9iiFN+C )8Tmo|^V5$** [hG%<ñ$Y ԙ,=~]QnDKEk9Ϡ V`}X0Ҙ㲩KKwJPpkSOۈnBG7Q̯ aĀF,R@x+C5mZڙݘlkiC3ψDqk'=x}Yx>  Lmb3"s0HCl'0Fy(Tv 6Bmګf, E& a+˜`6Ѕ = mCȆ?QYApjץ [nk1'ty`wkޚyEEKqiA]:5N:1$?e-Ơ128۝*=½ ƫ2f鳈ʄ$^QTyH6ĤKkS;V~gȸ?~Uئgw )72{=ցdY wJcRW:M=N,AsZXp!:^Z6D' GЅ_O,*]|˜+G-gJ4De !?pLp٧Zoc-hςy䫍Z"6j ?z%i*M"joduP@o¨tW"$|hJsͻ>bg{9Q+ǒ?sa 83ѭ|3@j.㑮89#=|+2ԝ?͠e\5mN)_vMXRNտ1M^܌QL|쉊M9ymlG_9M}#i7%~t-`4 e哬97-+w=ysޘsz,I/`{ f.SiŞV:fvAJ~E 9"}qPB8,ɂБQ(f}:K =.>`LX8ċNEzڧsQW?is>kM@{p:#Q`-vTX}Ρ+.$+R]Zzǃ{n{3A 5Ϗ5?wIK+.0gu ݷxy<$/W3tI*ܜִ #"WDVR{t8 ܀:uI/h3:JT\e.}6n3e@e$6ڤ>h[{v(7L1P/&o3Qm4!1BVV!Շ0_FH {/8^i'{Hؐ9 bzEL|; VȭPVsH An}OHZI)bg3݋05c'7Fe&DT&ԶR),4&d܇%OEc:n4wM8[4)р%?+YlC%:ZdeaI 5[gVNM7ɶp{?XaX^jZr|oN‘MwupEVv/-|  !C-@[)MsItr+h%5YAÚ5#4je5grYRвDVq)|X)+ߔ: ckQv#&ӬiMt[URzTH3^R Fݯ!1LN`8NETen-$7D[|At9UFJ xz7n"ڸkXtAD$$~)췆%=ߌDW.Y,nYSk'kV]xb+8QwנHkRL$~}&`/ 5}bj/Mk]8Ylઞ[N0"A0V(5D~A{K\Ȯ`<]-etkժ^r~AoxMD 970D3Z49~Nivi^kmc}E܇K?GFqQ^<̏i(FU1l`yݤH,*v\tf:OSDZ33.^UIxR_%s={ yNcuFnYPm! ,>}~etK8i|='oPbS3Vi,i#w,p vZ`͘/$xnԜ-DL&>R-^A}:յж_h+c\ ~dB,)K1gUMao]<]<)ǐ<}h@Vx_cL%CYɍ1{ٷ", KLR)6R 㩻IJ:O4O.18b,zwM1m>8n[W#MXb&:֤rh Uٵ-i؋ KfL#(Bˆ4QÕ9J *crDvN#4cwXR~Ï VXI&I@`5A-N=JdⰘ'EKi /ڪ|^Ev+-pSq vבD|3WgȲMFɈӳ߮$%[^ g N 6PQ$Zd*r3O+$A9)s뀤 ʐA(29 X~ܼhy8'rH ěUDc5yQחv,j,??`sҾkG8ڰ,Hnn$ }-{[k_՗H5t@rU6޶U:|qc/%bjnD[epY׿^/'얟?ʲg턡sH%%߷] 5x9V)u`ja5|?63izh$0i.UM! }}|*:wG yjĠ*0)`S[E f_ċPt^u!Ӛa?\Ÿ}쵇^Ns* 15`+V&T^Xl?C((\c*(rr_ _I}j3JѶD/D֞Pm$d. j?TAq p+I N* ,;CȱCJ).0{ۏ~{ sJpز[ͅmQ}T<ʃOJA!Dv{C0LМ&y@r煳.w}}#r)ڻ,C/RE~,q>xR6dAuo*5:N{lWz9)PyN]keƩu8ӜtLى֢r2"ծt1&F $E5.՗x ֺb7V}_eNƳG n:1M ͐EIHpsdKܳp$I0yG8醙E{[NBtxH\t na()lA u_88Vr'u,*%AVpBLfت :sf+/i>vMdLp|1Au>%}"L>#x囍4[?4%}u AQamSӫI?m,9tG9'od0Neҩw3y{f"];i]5ꛧnJW֒-mk|-wbwd'8gWWO`{ .Q%&+`r' r8$EͯЂw64kt/G:ݰd35Dq-Pz' *fHM_ldB= U{b~G&.7͜l欠hǫ̴Hѹګ vbI%*$`1A'iQtDqxq ."{{z=U${fa0#QRWB, Wdd ;gwAFXeַ͐};k} ԏn}Gk~ ՊXD%~+Z:FM9GjKxMxN07T.(ದ(CvL@$ēiz7\njkK]]z$UʖK RIڡl6Fy4.l#*Kg*qcÙ>YUAeJNrIUz5%Ix@7ԟt`WųiLim%y*U>97@G5hAqV>R7RP: 󊞄I%82ۣsuIr] p ;L#6e 6Y^+ϒp9ΙL՚ ?m1a)[̢I[t{B/B}T \ڬei-jyb;ژxSr5)#3/C/kBegjsjq_mAD["so l˶t{ s,L\f?#Ƒ`l9s, 8ׄ Ciq(^d7(S}NGY Q? aj9{=2e]8|w̹(ײ]`Ҫ<mp ŰhS纎 tTB%ņ+$A['S0U >ZQڰ+uim*{LxetD;+'u\⻱Xى4 }}{3BR\d+UwC'*U7cVmSA'j&PÐ/ X^x' ߞ 01mEb]??Ϸ6m&,U`7$UlD~xyᒂLO^xJP51`t$F2ߥjiXZ+[L4 79p|)ô1ʡضo`mF /#W9%0Ʌfb龗nq<2C Il'o5Yc ג%Q/Hx{_h4kyɶ1S>H>a^ȁk'e[ ϻ/1Z4?M?rJQYPD:P#{LiXA?G &7pXF"qGqY/ ,){x ݌6=3@(^NVX#B|,]wF[ ћFWڼh6yowWd+o[Z@ߙi]D)M:=}Iskk`κ&yH<@ /DZ?Go?v_۱@sR|!*XEtRdU 2\+[q?WL'KPȳ^դ!ԣݱAAqgJI(W8e_ 1[e)KxQI4uJB'Y(L./!?Icc?$mK?ܹDS%vlIy򛱄O|)D<brz s ɇׁ:3pd;T"|ݒOj/-T\ڧ(ϡ_8IW3$?JC.= BN؁#\*偓Q˵8~Pyprܵⱪ])V^mTYnᄣbӱuwB]]僛{/ĺ`r}߯Dp[*Ds:#?Ny{eKbɄ;p$/\<4huGRH}Mw/tslgDVrKKt9𬂽in{q?-TN-2۲ R69;tIau`$nƴ V*I,FXS+ݏ(Čp8b唡'Fq2) U? U b\-c,N #r '|u9CHd8 At8%@<+LD֠3kU|/ns򄻍/x<5ih@aDJZ&^)u.8@ P{8լB;flE髦_#n JUk!5X+kw&pT욉 eł [+nЦB(XɅ2Nk$~oXɀ"w]ۥc9}ZY|6ӀXU5-qgzY,ˇtVVfR`L.8˚Tq\u$":&-KXN8V?ޤ_چ3.B`LBwW9űzEx#xYE#7,L'^j/:!'$Ґ%l@Y PO}Q][h'IڍjPGUK7g?e5I#7_} /]K!$qڒNH~n)~iuS'/9+D6KgcUpx1npBɑ.`CLڡSBP6[}NwRF@^_A2`OGEņ>0HyƉn-*Lm6'wE;"@S,} $OJҨ^OiTq^1>]** nh_(0ё+4ncG@Zll%&ЅnMKZ#YjWK#x~MƫO[TXݽdq#daЃn~=v@oE}wUiIu+ٛg}mlhg{>Q4& dV zÞugmNbDof4Iߓp#!Pp; F+s᧻,{)^+[53!DnYc62/qd}B'h^ec#4L|+ g\ WX!{鬲&o _!%LOxu*}1Be,i+O7Bub PvJu)̹ c 6F3KZu?(< Bt^Eǝۂ#ǁ]HM);Cz3 ],蕃X|H?oGbhਡk~io uͱL9͹Y.4wϾ 0GeA`qPXNļ &$liS3AenW<7rAw zo"Fwܪ (OruXmD:pn -E-D$= E$ q>)+ux.YalO[4P2y M"`5WbYJT甍]>έ8̲CL)oV!;7Nzm)|: d:arWAܵd0(+_ۨ籅şncxQd>;ל`l}Pۉ8C [LJ<=m͚EJ%8:4xvr z*3<&mzWIXphCH5ȸbPYFp+ IȀNa7K$^LWqA$]wD!eO]JD@5p-=Dn{gRv%36.U\Ħgν3Iư=7 VC1_;~ȋ2Γy]Ӻq]?g)W(NBm;;cslGG6lXĂ0@5]qNº1lI\T*(Zi=.6uߐ͌EnKqNzF [T4Ko,'/|Z[}pN5(逘e(r֧.#!Cck=п=,8CD82~fQZP/H > L&\$&"N+%ZK& Tgd#b T4؇j?AbWC穚Tjo=ЙUXHw ]E%+.:73W# \iP:"I(#Vv䫛- u9kḲ|H(U[sƠl;qg9ΧNX*HsOc/BH]h^Zsr@e-(_j^%L:XC8rAXTM3Ҷƾ^}!)˻<—PĚ}z-ނzTg>Iz'xA-C0QpnXr/a ;~FDUZ+9vVQOVQ%(XG0&Ԡ* vw̶yKЗ]![tlAuwxn,kkRHJ;iêfp~a~mY9l4q)03)y4ԋU ${O:Je4=ex-KƶcRUlс 9^1fuXY< R=eog}p̞%.񕨊UQ,w[6GNOs 0׋Ԩ:8"_)RzńH(`eOf/6ٝ!f2OA-j -WFX{.ŔTLbnیdc{66:AF8`j0EڮasaOjSE97á=x"|N+X&w^:ي->uxiB2q876 g=. ]Ck'kGKlB_C?,p!HQ;!F31p,J=8h> T0++rd##/)2H{ӹBpxewehM*e) t\&{OO#=N90zTj;rм>ޗT vB>YTK#֨$Zr1^b黲`K!7zl䤐gKQ:׉{ H~H@NyγwyX66յF|p&]W60kYP}y u:Ô' :#k/JKށV0Ñ}iKY˶5HmMu}Aa*f^1"B}z Nt=0صBnc#Q{q֍b+V]ZIz~P\(pI .&/XcqAbAʎ\/wHGf-13(MB9r #(7}4Q>*S~+9+< %Keڒ'_JW04%3zP.q~SX7\D4+ ? .<Nvr™zJFl1nW)≠to_MkBZtFT![D5P,CR"~WwB/COgoV#c62;y0%Z$`O,|/'ۃN;T؀/Noi 7_/#?"!-jin/Nه) !G*}xٽI)Sw?xpٸ{B8K/.RU'9-{"= /W m]4xb_S*|V$ؠ`k1WG0?G[oKDzkxvK{54f,`iHc:M+lb{p| ,.WW̑u| ܿՆ@7WA~r(ik>"slەüTuD/=@YΡֈBhY;)%]Zy`j* u-IZkVimgU*zїTOXWY[6*f3sn(>V%5#qK`B؍'~pblm9?)*e]_cK)*j3.ƣTpXIµ<nz4BQ*3Xv= ;êa[Q-L -k`^5yh;)o]W 7 PǼ}4H8㈬.ӌxgXᦺ/o/ &f#PȧXy T0o~K;NH;EYp|Ɏ.yLǀ~v"9|oXw=#༔gpF7BjiA󡪤KSx;YTک=jJ HDe][[ƣְy]P`ⓔu;F6"ZwwbfIr~ʰ@YqO؍œVP97G]caaK3SL-+pqM&XF tn5vA*lKww9q&\=0ϯ#cD;*NTH?._)FOV"Ӆ&j}Ezn%S\ւ?bcHE Ia z9\_> <gY~/Wx/B?FiP?``\S4HܛVL8-D\p7kN+a4 ?=GU-P!4 ]Ywy1 ml6QD0F$T'<G3jGFo:z%Y LYlm`}$d%߿>]u#{ȂjUhKv+,sKASSwLFvȒaˑ6gU=_(IF[噬qpfo8}rPXqKژx2YH0] !A'4lsZX7JÂ8 QRYΙ\g4 `Xϝ-q;Eƪ& Q SQzpm|E!ԃp#NjɰDCW<[#h(? .~.AElIMY'Y*33P|T #!J\-t6NF[-<ȳ)QV/٥?g!Źl 1t0x6 ;3];1*Er hZ9%_fbkzx4$B_dqP ":|VTʫ)/T%B&D; cmyu\YP0|>"/M+@` ؠ=eF$㯎_6kG,uұM[a`/|8Gw}|k:30x0sf]T &o~]:k{r>0 i?]%0l6ȋ)\$& cvݿF.E ٖq' /T( 7)< 8c*NYB'" ]VܕB)S|_;D6{p[G?3?e 6fnʞv~ |OK: =CPZ )f  'E.$3'%U^Re s&AM.&dP~qWM\gbpS+CAH,!a0NvݵY<؈J Ou><9\Gc#`[DR(*7bU|7Ҝj:S6klTL '䤯1$lNߴLp'ᛐOfCF񋵼w~AhZ&ij"aFwc+D,mdx2N. .G t,XǸ!kz nm*(KO4Hy<8]L}Eg[C\7ov>yتkY^b}@Y[8} %nKY7간؆€ЋW2vѧL6Ü5G@ 7=6v̑kĺ[AXMw=j S~2h\Ck38*^$}~væ߀٨\LM̛#TNx _Nr]) -r({iں;1-NSr5)AQ Q"8lCT$[<7fFa@sQ!9smXEwۍ(V%nK[)k ׯG!pe.k^6K&*D G/h]ddk4>Iz&&^ 4qD!Ri1 n4ȳ9t:a36a;CH[rJÀŜp8':j#!.& frka#XIwt;Q3jFZMX;Kkr0Le̷#@_ fRZQxc3<ւui!EoiZd~cz3ZL44`ǣE]*`"M~Oݜ`}[OZXWp)4NE?z}%*r `dC( *ɧz"H',rxDe}HrXPy jxF_ҵdA >86oS{h=`=qݤYar 8{ji Mb/ے[u1ZjVQA"_Z&&.yuY z3ҋbq } l|z&妅gJF@$!wo0NgM1ag~-+9ox.< H&|CaYeizk"dVh@t9Qa5VNT] U@4 0u "5Nz)-H*\͢ $"QemT+z Oܗ UH&syGZ\x^mx+̶d۝BgVA?Q {n tKjA "ɦ9QlkW\~4"[zK MXc&rn="+ELSPj K£~k$`KH~lٝn:kHrSk$u7_\9q&eAԆu]-] X5ߩ_ZcՕyNHJ 9:ꯌ` "ݥD$ԕ2hLt9 j 2(&Zj>Nr3A]<,$ZP aXO)my\a҆hQA5lpO/~Q9B@Q%3wfx8ho5)jpLГe)\֔prj`[2g}cvm9c5 I%37TrW h$&|?HZ}ZFKkrd""U,Qi<"$7_HgQ 9d0 v)[a]o>` c@K?O{UrQ?S{_FZz(A T ڇyy,a#e e,(oFN7 ySZ#6۶D& LS3gz{ Ձ'a0 U+G *~e{GTo%3!NL[މ@Y:{94r]JooJ\rx ޏj*o:T ?R]Xv. E5ܞ) 6穩ٴ+=XZ=a|׋5#uϛͮQ(DbYfHfz'^Utpdx'4KM<恥%FVgyC 2zfњ_w2W ˸IndBF"pR$Ed F e*lW0(.ܜ3fWa,0YzČ}p[~ID=G}?%E❣dX:V"C9|9< MԲïxC°в Qx1@~`@5"iPNO:?Of+J~ZcUx]@D֖ɨȠa8 ?+ilRhq~KgvfP6N!U.3vAfCҨO(<]X9Bb`o.R!e b| e" X'_%a3k'6>%1Q~T|cpHّc$ф<oΡ1T&Vb*@h `zCcwxZGJqa*ҫsO_WC~-ٚvlԝ)W-Z-|9Ɣ}s1&"İTJwJ)Uѫ_#-75+;0XJO;#ۅTPhF',LrG/?n&vqO~(  [H7w (IoHeT\K Es|W(>Τʻ[TRN7J[7{D{O۹PLD  KZr:G%c# 1ًQgiq3ԥP0xhhS $ǶG5[ K$S򬁌 +He,eblD /ɸxD/h۽{Nz#sYNE9*>KS%lle*POY;~TWXV*-P4KLj8[ׅ^ _1.J&e 7愍^ڐ҄gt?(*\Vfnfr.oKM@lP7V7 kU v2\r4XMkϱi};V:꒼Xٍl^)y5QzBoɋ@cT|T@JVYX9/9ƛ0;lJ̭8lK&֝l?шKLcFNh*&RSZ]u=ڡPBqJ~]Fh=']lgxACQU4fx2:rǛ<j܃T tzӥFHĹي~@o x/ze%5rGƒ*lWG bޏl'']Ĥg kCvf4A2/>X6BIT {:vu`-Kr)h-gRX|% 20SC*EOGD"z{&/rEj#M'29,n:cvg;PoNh;TgY"}<`U_Qjdžs%|Ts|n 'cOl\[@93-Aq矺r<78F,qh #@sU$l6xus*פ-'AsNڿdetN8VZ□eo}הwQ0[Đ$!T͛cVj& L _ST=Hf^!F{a TP8K/Y|V:GSf/*?ui¯jqѤCd<;Qm[)LDҙc}$P:/x=N$܁jy! V(m"8ۦT)+.׆Q޻2}u% *a,w|-o͍)3To+)W vWŨ#&=Grdj^g&fCTSd܂MTȶ?M;) _&5x₧D\[o{Ijz]~t 6ZyUkTSUq]϶l!zO[EX|;HOۗwH[px#Z,γ}hّˁ ,mik>jQ^zˡ?Tz ҅Y_pRcKV8)z`U:wTy&BMt@De/.=\>ƖXp\jK- [<J5/J>Fh uK'$x7ggkFNZS ] /2r[%}[(7=qV*n!.vgG/rU?NvXYZ4b0hwUq. q~ߠڕYߚB eGWS۝xش-–n`v/ {)k)pp(9Y}ѓ!ӹ8H[PU _.x[sTι=Ɨ'Go#,y0?[N-˃ۯ IF?4BSxSXA \YrU'VTᨹ9;TYu@`l'I>¬w1RP&.X J8Z}; sS*o,e7D}(:p9տg0Wk_a5Xp" 7Q_O_NصkG;VHUvBEY6YmMCV&BRY+ fd\/[~My<ퟦ|\.xdu5 5`{ {5W4QŽ5jL.<@.NWx[w^37hw`M9/+[4dn[XeQ wF^-K9A3{ ;KZ_h/BqPIP[`=K-1'3;-⾤>J e8eyȸi9^k -Ƀ-!qj!R B~eװYkS JXb cVv/i;Q{=>0m̍273 aHkdOS6WYfj 10rg)tR_ 1DF<˲^ fZ<_gZ)i?aY-HLW٦ٽ:E?vWSԊ~ 7= /_J:NE~F)Mf6Uk;b/n}6smuS"/FsLlKM:ΓX<<ޛz%2(?!kIﻭj&;TY㌫9!o' iTdD`KuymZU 79)jNRŊ~㮯M8ۨoI 4,F G٤KT@8 yd\y2<~Ms~ ωiC~V֮Җ,V"g ٜǖ=dyc@v$m?x/8n3t,G<ʽъ,OuR`oW5{Ob0ϊ+{3qy;5ݢ^D{qI{<)Gt,c&FxmVrY|.慊~8:}ٍ٦50vǾ0U =dN_$qPaILײm%M厗iI gT(4]15i;sƐ. ;xK ߳,[aJ~)-T~Eo3J I8xqi`,`qwnfdCZOF"syD~D{] JDD~! ˞βˑκvmU,~KLTkMkS9Lx/QgPꡗ!$k60*yDKjE3.LjUծz[;h8[{$jD1c̴UDS;)qQ?l-2Pl:LUXR9I}qcq%́m2Bm1nAZB抚|wrd=:˴YbEeţ2+$ulIْc;| ÈffG m#HaQLJvb*Wܿxoj (+l\l],tO7K)#?:(yQ%2kdZ T5odjUlOQذ=ѥO`M.E\|=}}䆴zKDuo}]anS-ck-<䋊 .U\=%4H-W(T ת{++vntɝt @@ߐ+zHH@2By]h;m/c]5O.YǕ\dV to@VCbrU'w2)=k40FvE G8W^fa(usNaFSNVi68񆃨uJ[T~\,CO?X!6(WALDS6뭘/v.gob~$z2zb $?w\>yykw\X'- @EH7켫lL80&#p%$1G% v7#G}*dž/F=ΥoFCaj/`Ԛ;l^xaC஁4E.tDCn`ҏNQW2ĝpLK)]o'tC=^Uy~-h"zRοXkF'Bg :&?_N5t'%""ɲZI9*Ϟ%|XΆOQ VeޡE\80skM0pMIZ`MXBӁ2xG~ 0rxjf^ 7p=o7TeL7Ô|ŸFE2Act\"f]-VZIk 2o\d,Kyމ%RPdy*3Pfb>t*dqSGVRfUPe9<ϊ[#Lg7BN9ΚT:ygo|"C}|+Rzr4/`rmB?YDġfnt*5S,m_frS;p_[3R']f?rYk3ӡhoH~}G&K|!cc:lL7>/%7cS$0}]V4yR ̦2 ykH\چI]Oh.ը텏zB)qƒ6$+uqE ?|җ Ɩi=ƛ׵}4{؇Ӑ/zGKzS|mxKRޑgIQj[BW6'x!3Ǒ CƂ5-x\ ^  X ; a!aBQgP$@yN`Q5-.Yvq&&m+X4F'2Vy1Z;X*D]e(3NKݸ;+΅mA' b HFuǯ!oVtt[~k(s֐elȤ1\pT.wak?{2eʟdgI«HpԈ*2=lw-C Xq/sx{XO ǧ1$;xE=Ww:%~ ӑ.z ^ʷpf #.eqO 9g+Tμ邽gv\P6) oEۣt$wv{; }hwޅRb7SZ?CӶJ9,_f(fzSB}fsgXB¥𤴿*G/ۋ}cfGpǼәѤHPjD3+X%ENm[c<ŁϏP,GE˜[+p{yNZ“lP4leo~`I %|ZPJU0ʛ_$DBwoWe@Hc0OXRK0|p`ГbpɾA f=F> KBD5H\m\+b1i>_j 4ks<&lTiWoZ'XIpxSw_H]֦=wB\a߲DZlUyf&NDjAU6j厕5O.ki/0BA>d+\OL;\bO- r6w&x{z>s_శnqy!cnԨƎq{DO m`{WBMBxi駝\z-a'AϿ Ws%z ^#Rճˇ뵗zUQMn(}tgԓ<Skر0!9IKëaTh:FJECmطl(H94 d)a`p/L{jcvF.mõ2YDx_ٲlH4j%N ۜzKIT0˺QA"0ALK;;'Za|DCSq3o2"f٠d+19lUeC0ȿ"Ob8A{Iaan6(3Gec%(x-fɽn!]rX݃2@V;Y@{ jJ#V3ثepYwĠ+ I*q^@HQlvk_[ 2ke%%Os }i$v5qx${we<}]Ϲͳ!78@}\ErN36+r(oL*Wg{ʿQs^~Qn©#țbegvss0/O'C>E՜J4ϊjI#K_zcwf#՗?D cnZ=3>#Jk,&FT {sNvb́ML |%t.Âa-(. ]N PZi@,NC7Q}s=0tW˅d?{A!!k\Z'[?^Nﮪ":=\0P˩ƩPķ B}~ "|kKO'Rm Ov&BsWCw+}^2%iX%C(:>DȪ@ksUuF[|F875.|FnU19Zғ /u=:<ʧq%K)HnQX&4zt~c/ G/8F>wS6>pJ%*ﲧYbT)Pyb3/˱TiB>ܥPץ-i!%ybq%WBI &˃5ohȲANfڎݵ}bҪ< k;ũi+@ϲ`XWoZ|א8+!]_Yr 5CG]k#쭳jҥV2Yy7O8JIԅÜ{#A-n瀬bF.XN]IIWl bI_B˘n jZLu_/a#u^a* O-ßN-8A#"w;[TIu-kWH`A~H:ptQ*Cɢv[lsʭt,ΒCm!d>-cL5%]`l57?}DxʾSeHjDdz=UJwQfqa4o`ٹ b;;:dԪל=w"uD2ЦW 8l f:_'[(I#XTB 7#{^L;3y۟#AÄϏ|e.N6|dz, A&h՟G%My$lntI7f2bj`BsgnOJ|z@%) ꭅ9o[U±Ϩj,3e4@7vwOi÷Pժ GИnBvǻb?2ep1Z1ܼ OڈjL U\1 J.%knr]K ZMiEL d>%4"2y L"N8#06H yiXqnOQ& 'Q=F֊5>ƣ2K$g?M:a )^y3fql^:5P6_xsd|'0?g82܈Ci³MON>&y ao?I|pFgtZM *#/EIhdk^1 Dg//hԹzB'i9h xXٯtE"56r斶s\:TsӁG\ <JuP&w"4Z撑,4RXlG͎Ȇ% d;~d yB |.L!Ϥ8nm"r1gޜh"LB.avM:+9޾7S)|@ P_gL02 *u8^a}¢ 7TŚ0qQeKGMdV\KCTj)r>o$$x C]>Oګ4ň4S, #h5BOV+r4Y .|чQ0&!SܛaȃW(7l*+O1Q>g7qӏ,,>:mV{>=sSw1bc'p8YxgNsbfqne:e5dyԖ7۹`s|ٴ *'B9Ҷ^, ϤW0 ~Bjdz/ )Qc%|XlΒR2!j\WrRJBP5?Τnݧ uj׫ʮC\O$A4!rBNf-j#ZҹbjvQa /ŻoOZ/ @Mx d z*K\| y6pnFȎfB(3TIALDN29"5 a"=ѥr š nͷx%Gl5r+ȸ8UAHČh&Ӵ!h'rp4n' ASx˓[&3ÖQ#!^ Mu^蚳YmSB!cjf~wÈ F`FT6Py 9Db(elSV_@;sXYG[?Ѱ@x uVgȚ .vjCaƙJ^>Y ?ėQf&2\T8kF< nU晣AL/ԘweXgBvڐ*&%xbD7kdZ$syX8U?a>d{vt{/т.Rݸ,/0!XA4dMO\*FĜ!܉gk|q$ 0mdXdcxfu-35ikn=*&֙K:>(Ǫ/s{ g9vln-F+m2!y)Wj흋d֘39D{Asd0=j>lFg;׷'Nc3< | <%R+0%eptah)÷iLd%( zVl@d_ zqSC$|ڻ%ÝJB K'4PJ~v?O-ܿZi8<`1w秮zg8{ \6_~xOR>i4(WǛjᰉK%JZRS¨̌ߚ C,9Ƌ½86v.Cb407PcOZtV U HAq@Eŵ͙UcJmIM*̗g rGͳoKNvk VL|qqq#Sq'O_;q] ~bs;s_JNN -dZ1{*:1Nd @ֲJ}U?9HКNW~H!"1r ^s(>= H HS݁Ɨx{͹[-}8u.b jj2Z#&څDGHC@Y)aFe?7|ri3$X֐ׁZ=E#kwe`&h +@h<#:3h;(2T:r[=rΫ= K2D DsLkN{~Y2!be@CJwDNZ0\N 8z g2dT+ .<Q(Y,[gIq D7C6ǪRnR3ƧPeL圲ً3}F|D^tiTHDK eS:0z= -8x="o!5329>w9s} :gcO'D} `wS]Ex:͋oFsI 2 1yunSڭW=Ov=sCoILSjHjZ3='fqc@@peޝQWk&iI3qeϦ6V&5ON#LI\%Jв%Jt;;f'pSΩШ_K{|KيH9*ԇ(TYDWC" r5%\eFsԕ\ṰN\Fp:m\Lk/́>%uC G-EV`ɥ1>L :{ԂZW4 yl_) \ ICa#ᣉm7@|, K1HGpo0sfѧ!;<>/4ci%@{9>+3($[:v`V{2ئ420 (g88+96zi_}w`RE!&š&Dd:Iܲ1\jxP ZK|g|(o,H0z$?SI^q( ήhҔe=2ـ_t6&R;jV27ֵ%UIwsxd\)qB5T/ mm%-NdcES(p~i*#āS$X' V^v |[@V{Oa_jKA9 h2 ̀pQ QQp׹iIOGJ;[wbR:% 0 !9 ّ-zR|+ԿϭiT"CC)*#6H姗En5,Viq\!,lGCS b:T}>i2&gDr5ȣuTpHK(O[Jq%P39("MBQ!dN+Uۧ=vlvgyEdE;ٿ%-yL!Yĵ](g)Q>Be-y%.E'.Y^ds>s.B|Եlq8%𣐇0g.h .9p1a_Kt${J{=z6Hu"rf\B=yUȳ<&m ȑ%H {U!qtRÈ-6qq4b`/=ΆgE[ H>ml2B\3Q(_fQ-R݇@0֖ ݢM,0yBa rEjK&+N&}綅O1ڪ :)&ע#1,|x+{&*\pVZ>n2lE, lp \"oyGQ0v$!!${֣\NVMbXpez T2KisAۙ\b@ ?Gȹ"X$ʂOfbg̅6;?X$Sc TcĈ pR=2oRkV^y[9 AzxF'ޣl.:^i<CBEONʺ:?ϷitGkOƬ[΁+ ҵ/7߲ W2QSM L}2յIRYreJr]ɪXa"~;W"PW9{m# ޢ t&.,#8xϭgk*ݸ.2L@Z @Dcb"c᰿,3 ,t4E>NNb.;Y4^rU7N,+e)Ř&?NDO*/J t  NsAPG/,wMw(-KTmRXRi6m4qaNg5HTQg=Ћ~@X>t6QOsٽϪXX ؛1]%:lpY-E#H2~,}͇7ڕ*' %0tE)T@Rl͟Fv2*3vbB"\A{' [[GEr@r%D~9rN='GBH \f6Ec*JjHVe3ܟaO5Kո mܒ! ;x5WZrA#;$G08ѕsJ;u4%~Y91rѭz-ԺSJS\>{zVK>?gɇfgnדU%9CνSƞ%O-5¯MnB*9u҂E(0 J%&D :ZQ'HP_Ѭ@$<ţ< ⫟1w'/T^Y"fl2,ó` /%UDOi'$WU|H)gOE[wHದR&uD? @g+E2Xa%"dBANL7_D v/+y`4&ILGg_C3FGt|8:J_EDA ,F"=.--VV[:PT CUKVŻ5׵ A4JBM4f%/Az3ם+ ÄQ2/*0XxGnۺ.vPϯwPQ^kt)vO#ShuJ]6le$9D)G5)52ln\UFl82k%oEHA=HڣZdPp1#CvM`C6ǒ7Jyb%*y} b38cB+)ʍr,tЉFߴC*$@'GPov:SnZrU4WRה5"NfLcoIΉܩwrGX!4)+\x¤=y]NC\s|Xl,"OF\oJPir#=Dg"2JAJGALȡ궹|a>kz l=/#GRRlUh~Y_lC}?ߟHLe 5І,qy!<PApbͺvƒ^-?vZri!PCf'*R*p^km]5ԇNq%UeʑD,KA8u_6·C9Jy!9&0@Y/1P(?W&n t17EܲS}JH v[S݌Ĕz]c2so<5Ii15.=uLV@D0X"Gvze~BKtĬ2 qHFi}]i{gv.)k<5r텀Խ> Bbv< E6#M)G>T;öMwQT_)zdnb1;ܗ)ߣ6FyooxSU z\HB'0">>.;O &G \Wr)xzP Wb? MU)L,7ѯ ^s^CFV~E)rӜ7oػILhH5nA8Yb7Rd8 ƅ1a[!Vo#{vrb $_:9zl'9WvE%*ss4bzy=$+! +D~ԃLN{>G46Bjó̍?O {7A&^TP{PdK9טG<;f4AMмD gflrTGXCż,;J~`=XNJnJp Eakhٴz.q).nKjAjPfOC̝[ƻOZI*%_MbzFh֞e8;;tt|$igU <7 R<^o-ct44iԘ3FF% 4>l[a 򔍰Q;Rsp;ⶌWC+1#.ɠḦhPWS؍+FMp5<b/t^~5ƊLe*""in7Yz{ͤ*i_&xU e iy[RJbUrBXN2~K?<$ /6.0/MD^gn"}ZWc@d>k-tAKx=v4sJξr4ktgr„wԱ#G}r+vXI|hud+&w,¹͛`gblڈ#L.}ވIf olC0kd`/ox_[-Znʷ~e璭\B_BLo#V}0O5mk 5IU +ZUW[I l Zz%Nt1y?c8}q$Eݲ_/Ԯc}3黽ej%RVnj\q}0Ux=ֻV=@pA**uibY7x V}[r$6˦U^ܓWQ'hcHh3!~'lQ1f2V5#$g\_}LFAm"5tϹ@QTf\{i9mq8 ~ڜ~H%yaWEj^4.VoUގ ֣Zڀ=ր79p'(^-5B- o7QU?d YkVH(:Iz/ pSjVǵEF 3qzBȨ'eב' \cS1;UZ)5 >O؋I߮CY8\fQgEyvf2Ӈq(0=7P9ѣN8jG$<\% e|P',r=?.5OO+N`r<&8~bN["[7JsK [ ntD{]7i(̖- 5װ*@f41A #Ò(}/ =,,5w*V0:,' 6Xqy`CU|Es{F`LAr8i%AVIf) 3^X]hƐUBJ Rrߣƫ""F?~(o"aX[hɋY?=*z4"x?%*(pP-,rII.D(~fZ QoTYgOϏ+zH݄'Ԇg5 7}e*Ve :}/G!x0yGfǢH + ݨÈO(=uA7T"3AJe Z 5:e2$k#B Ed|kOA]K/hYsb {RJC:2cY%j7S䙐6@K'BwQ'7M / M|Br7@}wL/.M qd$9B{2Nrn>aXqP~,E,($F})~]CV3׍%•۸VS_&fo4;HcLw_h"X[?/|+?B!RtR:LYB1nͲeN ˵(K\Ӹ0cLnvBiMexϼA]D(jwǡV uTL ZnW )~i:^"ZTӗ/"c0 s 6>4ǻgAT. ʖ6[!HwI݌Ƌ|&DwFJMՉSYKS4s&'<]A᧒єVEF96\A*:+f̢ !=e^wN R~eY'{c ̠w<'nw5/GcJR^169s nų;KB LP;'3` ]ϗ t B⫔iڂukFeD ՎQ^/ƮhGI!`2wN;DJaLBM2%U:f6C]k'Po^Ԩy0PgL`;G^ݙtRlXFZ HS188E֌(c\gPSnz ]rG7#ؠ9xAc3Rzt vmRN9T\F2M{->23H1Z4hIDp}ʆmw0NѭO: ,a״,ϮON7qH)miSxaBE4UoE?IK[>%gdz"So;Fr r#TJ:[K,c2X6T{i^B2V-B"tm[` Ze5q\kåtf.$Ps-hr@?Bw);KCUJxm'`K]vvܶK&c&Kƚ+:Tj+XJ95 I[%k=%.4 .`bB.^u9/׺2;u=.k=i؂*~C ٗv [cwݺ [JUq|\(Anڒ`^[{Ac_?D:|5bMir罆|C_PTP?c=tCmsqzҬ9&$iS1_x7-9̑+n<:ɿ&v&4Y~{Ǐr>趢 UObK> &[6#6e!6x+~Gk(jWC/QjUo"uvk\p,C_Y~bzjhr#$dWFA_E߽z/mY Y! 4͊3%F_hpB )=LLYw噟 "<ׯwyd(.  c֨3F ?NW9Uԋu7v~=GI㝯@7gK/|I$&JZРCمӒ a quqQ^+@I!6{3f8e=3P1p8oR@Β>Q8;# ~DJeN?2m%)<2Q|n(HqRRXPf 4 ~|r(u+4`/׏rbB`,upf^:0ey 2Ob rv (5SSQʟCH}sI ̌!J#Ư&#/f@u2ޞ;k3UzeZ4LU W|.i7òqtWµ'c_Ţ #Q3О~mӸ?<51%s ⒙(LAnxVھ~90@'qgM9zm5%Ŧ>O'랢ס`-ˎdϏߴnY3x$'hݴQŬ%\T/ 7n"}>~C? q*c֚;='̀gFc'3QI A$0ű>qS {o9ց Cix43SD4(ؙt&,rhd=>+߉VxynmE!%^x9}Cw}6@GǬ!i<)$xN}&'_dN;ɰ~;zo^(,JVD*хe\3XQ@r9I[Wa:?puEF7ۨ]ɇi:MG(ԟ0 5*dH0p0`Oy޴[:଎e*|WBu5\"zdBԫH ᓵ(0˒zԑFJ(^zf8, iP$o@@ݸ2cW*UfCWr9+~J)כpW+F 4_0WJF4tB5oufhe=`8 8F4 f\;aW$m{|A vF`M8Cx 9+VSdxRx嫃 3~SE^ԁ #cLPu}Fc.4;? p/Å0m0aSW}b4N3BA҇l-TMk]n:w*bh~v\I腶3ү 8X\6MhIPY3X==Nbn S>gԢ>@ˎ1ϭVzᬡcD\RAOt:lBL 9 jb(٪P5 avWfJ6H3Y-HCBcaku(ζt*|S:zg޽L\UB$(1*÷F̏8um75G^.ZGgUXG b7?A 2F\'rW((p^0h}G]$`wF1mBؖP*3eo>Vϩ =R]j%c`yĪ;apCDTsPvuP!YO>23 4bCF;!2w*G{ p;Тx]?l@J\9 ǓU2NR { ?p7ʻ`Ѐ'+!TZ94iqں>㼢AJ읨yT@ʌ52ML0=9+u^PY1u!zp>3~ Z|RV1~kl^bƀdrTb 2J! mbm |590 l,g`]&^LMCuŗH݃5o$za\y neh|\|Flv씰Y(-)H-*ym8s̷Ny7°B@8M*HS)2h߲ (TJ`]~HcLP:}~1/%knrRsՍ LXu2EEݵzeK1D$h[Tr9lxW]=G3wL tHʍK6 ؆1)OdY)9u]>Kq[Q2*nnVf::DKVɄl/c3o` >6C䉊Q= NLHe"/eVbBwkD^uë[&٩!&5B]mF8~Zw\i\;I)X.IE*A`)hX[_ /JgUGn_l|X;("4??G%%$>巋r6lҠHO0 ?]=CiEP=?4UKoqk! FNQ[yiKlQ׫>'2+8Hti 6Өw(7Y`o䈤sqIU/opRJmS_Rvf9 qiѺ+`;;fIoKZv\HJ+ TG&;hmoF:P'F_̥)3=8B0_ċ2uٰj mMU-Z^;f߈W >pΖ9QQhk轉Lϲ05:rKj}LBVxq0JDz.wuH+޼L acv ͙9]>yjPPKU} vt.}Ӟ9i]Ex %=V0.P kdv3^ŘޫpŹNGDyDHRe]KmOK$Ԋd\4"MbB`xy$'w4] IN]m4=N9{wD*1Lj M~ߚ/fF=៥Ydė16ɶwOӜlW]t>5:ǟyT0ՠYB:-F6YV1Au#jNNٔ2Tp -@NDϫ+hmR>\̥0&K1HZMxem ;N~?X` FY< Cv#R/$w"IŒR;2T_:߬7N JvA+V%9hU0pzPn8UIj$\z.PdnvͰ4郖%@sQ$qL5ҧg,U8rrZ^ݫ|%KL 4(Mg `Xc5u.mF5 w3ɸ-rizIP/]cI5H)vg7Y׆"U_ h"ϢFdӅtY}>wD)ZOl4oTMJ<h Kcæ{b:7?quS%.$ TCE-K՚yo|lD c-53?'E(􇬠DGlg#`)߾fX5ĵZ^ ^wAk gh],5hUܰO\y0Wh{e%nLPp0 Jc)tΑ endstream endobj 1 0 obj << /Type /Page /Parent 496 0 R /Resources << /ColorSpace << /CS0 506 0 R /CS1 504 0 R >> /ExtGState << /GS0 518 0 R /GS1 517 0 R >> /Font << /TT0 505 0 R /C2_0 74 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 2 0 R /Thumb 459 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 1 >> endobj 2 0 obj << /Filter /FlateDecode /Length 3 0 R >> stream ~(LGS@yr4[ҿVzy 7ǵ؋@lg*||[:AӁQ>KgE ȭ^11"}>LbIھ[7es+jܵ4={T4xn^XA绨-pJTϓӊ@Yn"{J4Z~!nRYk ܨ N2cLts|?GHY587BR$ב?Dus@τhm^bշ %J|֣mԽ~i(La/ԡG}o,f *̣ شp!YуG u$MH,8[c~͇;]c}#`hlKM4jzxƕ4èFrmP\ tN{GN?quES_ÖWLMjzvJՁAD{+x:cg+ |*{=މG<:^cx#~y{7mD4‹][t&I@k/'B)Vqmpև ɺkN+mݰ8õsҚ8Lh7DvGXˋ#D?n!FVDE"n绁#'tc%}GN Y-:NNCZvt^LW>H]4WQq;f7 "T#~u.`"dyE;eK7VTd`X];{\4u)NBP[ד+N\ 2|{̈́(aVy[ sK0pzerzzņY }ȧ 'FNu.c :#8(}μDCvÎۇ~kݤ0)/l.oIY?VWІ7M/qJK 5J@1|veܲ-|7_7` n}"nTPusAQL7["Ui1SUbwTZ͐ =xK7 )7+YعKBb^#ݤ'-r:3z5By,.Z(-s-tak7%>?: nՖj;ݦ/ ɗV$Z zW@It9)mGbO)Xs$X6`bƾګxF7ZJǶ9:A-",#| VIfSG>8$vznT_GS^> /ExtGState << /GS2 518 0 R /GS3 517 0 R >> /Font << /TT2 505 0 R /TT3 75 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 18 0 R /Thumb 461 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 2 /Annots 5 0 R >> endobj 5 0 obj [ 6 0 R 7 0 R 8 0 R 9 0 R 10 0 R 11 0 R 12 0 R 13 0 R 14 0 R 15 0 R 16 0 R 17 0 R ] endobj 6 0 obj << /Type /Annot /Subtype /Link /Rect [ 127.62 583.125 499.20001 597.94427 ] /Border [ 0 0 0 ] /H /I /A 20 0 R >> endobj 7 0 obj << /Type /Annot /Subtype /Link /Rect [ 156 564.76501 499.20001 579.58423 ] /Border [ 0 0 0 ] /H /I /A 21 0 R >> endobj 8 0 obj << /Type /Annot /Subtype /Link /Rect [ 156 546.40491 499.20001 561.22418 ] /Border [ 0 0 0 ] /H /I /A 22 0 R >> endobj 9 0 obj << /Type /Annot /Subtype /Link /Rect [ 127.62 519.88489 499.20001 534.70416 ] /Border [ 0 0 0 ] /H /I /A 23 0 R >> endobj 10 0 obj << /Type /Annot /Subtype /Link /Rect [ 156 501.5249 499.20001 516.34418 ] /Border [ 0 0 0 ] /H /I /A 24 0 R >> endobj 11 0 obj << /Type /Annot /Subtype /Link /Rect [ 156 483.16489 499.20001 497.98416 ] /Border [ 0 0 0 ] /H /I /A 25 0 R >> endobj 12 0 obj << /Type /Annot /Subtype /Link /Rect [ 127.62 456.5849 499.20001 471.40417 ] /Border [ 0 0 0 ] /H /I /A 26 0 R >> endobj 13 0 obj << /Type /Annot /Subtype /Link /Rect [ 127.62 430.00488 499.20001 444.82416 ] /Border [ 0 0 0 ] /H /I /A 27 0 R >> endobj 14 0 obj << /Type /Annot /Subtype /Link /Rect [ 127.62 403.48489 499.20001 418.30417 ] /Border [ 0 0 0 ] /H /I /A 28 0 R >> endobj 15 0 obj << /Type /Annot /Subtype /Link /Rect [ 127.62 376.90491 499.20001 391.72418 ] /Border [ 0 0 0 ] /H /I /A 29 0 R >> endobj 16 0 obj << /Type /Annot /Subtype /Link /Rect [ 127.62 350.32489 499.20001 365.14417 ] /Border [ 0 0 0 ] /H /I /A 30 0 R >> endobj 17 0 obj << /Type /Annot /Subtype /Link /Rect [ 127.62 323.80487 499.20001 338.62415 ] /Border [ 0 0 0 ] /H /I /A 31 0 R >> endobj 18 0 obj << /Filter /FlateDecode /Length 19 0 R >> stream j2#sI7 MB;Y;yg.|gѓILK Z&!QJd=%|߿QTf-wvP f_Ie`w^7J:< S:=Xje x4窘$" ͺqqqK4&^Rrg1ixyk&~Uk+jfw] =kkj8d7,A+}ΨEEPP6<u}nw,u$R3/}Ӑ.b@Yӯ8D,&;wUXvlaLMG,N.P y!yqx-w*IH$3PC'_X`lo ' i 5QO^ C^;1EN&sf&' ­ȵN rXًX^ZWm"ugoz"j@;C5C~, d 'Ih럲"ܲRwCoyZamFșxy2ٺ3@%quDPl{W[w/yg&G>]R%1Φ4M!n}@ -r)E[4<>Ht_$:BӍ*LfƊyڞsx?џC;ER.s;/RZY)l6Ep\ZL̀tmU3 XmX9O Մ?U}{e3tba(4eU*EU %ҠDi"= q5ش\x6Ǔ Cn?6Y9$h=:`̺Ycƭ[L8C=w56'>8`jN=L/^"jyDtH5ER(gV?>30Fg.!Pa 9Օ%Bv}:>P矎R09iV-$_NyMUbWa 1M2={YVڣ¬P5Cp=, 2cIevН_dwIR2X &эxJfn;y$-:Es|("iƇ bH;0(x'WFZ aC7hКPG}64KiWTKĩL2 8-wjvx?{g&&l{@`XwRH791b$m sB8=~ (6ĒO;(2gtFru`4P%M2WСr)ղ%vд &㉽'YrShl$!9O5+~~&hg)Aߵu @ uW6ISiF1^ǗS^Tձb<*9JjK1;C]eADEZ4ZaP}r`ZUM^JK5FTlcիΐMFH(߆R Z4k4$Q4~Aǻ\ABMRFt+$_Fu!xKR68]ZZ''p*Q6FV62j )R/%O T?`$rZQ" z؟P!-LEՀ+n%a/2жp"߳fJ&] G endstream endobj 19 0 obj 2224 endobj 20 0 obj << /S /GoTo /D [ 35 0 R /XYZ 0 842 null ] >> endobj 21 0 obj << /S /GoTo /D [ 35 0 R /XYZ 0 842 null ] >> endobj 22 0 obj << /S /GoTo /D [ 35 0 R /XYZ 0 842 null ] >> endobj 23 0 obj << /S /GoTo /D [ 41 0 R /XYZ 0 842 null ] >> endobj 24 0 obj << /S /GoTo /D [ 41 0 R /XYZ 0 842 null ] >> endobj 25 0 obj << /S /GoTo /D [ 41 0 R /XYZ 0 842 null ] >> endobj 26 0 obj << /S /GoTo /D [ 44 0 R /XYZ 0 842 null ] >> endobj 27 0 obj << /S /GoTo /D [ 47 0 R /XYZ 0 842 null ] >> endobj 28 0 obj << /S /GoTo /D [ 50 0 R /XYZ 0 842 null ] >> endobj 29 0 obj << /S /GoTo /D [ 53 0 R /XYZ 0 842 null ] >> endobj 30 0 obj << /S /GoTo /D [ 56 0 R /XYZ 0 842 null ] >> endobj 31 0 obj << /S /GoTo /D [ 60 0 R /XYZ 0 842 null ] >> endobj 32 0 obj << /Type /Page /Parent 496 0 R /Resources 33 0 R /Contents 34 0 R /Thumb 463 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 >> endobj 33 0 obj << /ProcSet [ /PDF ] >> endobj 34 0 obj << /Length 9 /Filter /FlateDecode >> stream @.(fr endstream endobj 35 0 obj << /Type /Page /Parent 496 0 R /Resources << /ColorSpace << /CS2 506 0 R /CS3 504 0 R >> /ExtGState << /GS2 518 0 R /GS3 517 0 R >> /Font << /TT2 505 0 R /TT3 76 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 36 0 R /Thumb 465 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 3 >> endobj 36 0 obj << /Filter /FlateDecode /Length 37 0 R >> stream |G:  \ 6p _dg~?apVqy'<MHXSQ,3MBOU^сhJæln t_DҡY ,44Qt_L=:M9P|# XX\C`^s4%G,SOjiP 3)3L /ȷDNRN"zYogx9B`'3dYZ*chB` p6I=BT4=5 ? r?G"⬰s#2KiPa÷jiDEQEB}O@7R`:,}Jоo ,5{U7fҬ2bO_,?pL g}NFK^CczXXmXO=WD"sYQֽLrr%|Ǒyڊc5+c&H@sc :NXḝD0=X3,c2+n&uHzdBT;dK RM9uC*BtjG7RĮ<}+#ڷ?Ky K, o醎8a]̼%glz[QV n=G+u՜Dž8RQ4=t3 +g9,h֮ l(B" }ZhN iVU*J5G߈R3 A G3I .;T#Ȑ cH8ꁍ*#mxh* I<27p#C}롧qxD1+ V;6h0yv2mN~UW"*jɸkC<3Ipڔ{C* q΍/3DBew~sDK5Ħ \~b(2N?`Aa @1A_Q 8k.i"R?AYx׎㜅1Go vŨc9Y[槎c>L0v/y?$žQKqMC-Ĺx +瑈P^t}kL@[Epc [ת/8qhuZ-x[|cV=.;>gS1Ŷs72ek<O1qP<{vM1`$ bjE f]0Oy7b8J:H>Îco, VZj5g?/~J'T\;q2|KQ9/;> p$.)3!zѳw97j"<)اo7CL4hצ\H_:ȅ!TdO@ʈDYY/ I@* Jqg ~^p1fJ1>8s|$6LMqq_)y)(cC $rgӞr q5%y!-R !`$LFQR'B `#C&%| Y oB;_)|U!S&<\q /;8藺`k*7cm3ۉsO!pmd GÝ\ ǹ玸'6' XM2yE\@.>FY"-RLPb̄Sn?"Ά /y:ER ?SAׂ;y'FRNgbRl"[e9QP.5|2k71ud'_<:M;4^?"[-[!˹١}c'-{|&8D0hŔAΣڛ:W"ګ0wVL݆Baa QA`A.-F??!܊KL n06 )Јi5я-{0p^rdɎ~ cC<* /w*ۜQ=!'- Dn5[H9bnʪ_XM9>d6=bPZ"usZ?&8r/e8B%k {A!}5,#\6G 4vS{YI(qYm u#7(Ğ޹A0qt"IKaPbh94lB4}Bo1s1RiV@ۛ(F7uMXCKq.n |\9K%+i;Џ{s-RwE{ô#|&~_jG DZGr);hRVj3*8Fsx=Ÿ&c3ԝ6~Z}v.cS}LSbQ7u;T'FVp2{:Tƙfc@!YaҬEsxVoeQ^޼X9F5(8h+]A PGJA츓mim>b!aWrي):dB2GxE|0=)HB61I^TMu$\jt n5麩gRM[' &$n)+r4wNVդ?)*Xh{yZN%L%\KkC NsOn/ Jvfv #(Ѭ~'K¬j;B<0#~+# endstream endobj 37 0 obj 3476 endobj 38 0 obj << /Type /Page /Parent 496 0 R /Resources << /ColorSpace << /CS2 506 0 R /CS3 504 0 R >> /ExtGState << /GS2 518 0 R /GS3 517 0 R >> /Font << /TT1 505 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 39 0 R /Thumb 467 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 4 >> endobj 39 0 obj << /Filter /FlateDecode /Length 40 0 R >> stream ~;B{/I!p_z/˖TWuy`&F#i wBk$G32,9 MgGbȕ$uY!ٗHxn^qx?JD;#IA@|78!y8ׇ%Pg"mPɾskİ1"2%" xޣy# J4݆2Bz=v?FN7W7,n3svS5pwOX "NCM*J5'Jf*g-Taq®b0sbD^̓@["tG 3 [2NHbV҆Dd|a=*'==;¾eAΖLh80"8HńGPZk 5ZX|TT;<("ް%`/; endstream endobj 40 0 obj 563 endobj 41 0 obj << /Type /Page /Parent 496 0 R /Resources << /ColorSpace << /CS2 506 0 R /CS3 504 0 R >> /ExtGState << /GS2 518 0 R /GS3 517 0 R >> /Font << /TT2 505 0 R /TT3 76 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 42 0 R /Thumb 469 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 5 >> endobj 42 0 obj << /Filter /FlateDecode /Length 43 0 R >> stream b l)]c8_]'t u ¥ l?avZҗ'^S}tD_:m#AM'ƃBXg6]ot$DiQz u>m2giU5~[+2%,' EBNV GCnkNK׏ |v9j\+R7E@& &Hʥ>c[=sDA6GҲ$sNG&7Í;3Ѽ9xAV9vSޭ)D}lnpOX,ZWJ505R!#ni$ݔf4zt&:4lWuyrRŵO0]WwvFz4LË 1*Ely,H7Ll4t j~Oyw7 ?ôgvsmj,jћf彅;̴#>nU@GN_mwc jf@S@& 0>QEΌjIU֓0ybI.D?Ț?ږڨ~Ύt ,Pq"5ٳQl ne2Ys3B<8͘d-ylSpCUaԛwS3F^h  6D|ԺܢζLKoY%ej`C;4UrGō9f {E``{Mup $ ꔍ>~jRnLSuY;"ts@ > 6K=5wMȸY{຺"Qx!1e4U|6{Um, ڜ+A4sL[FTr_X;륢HߠD<[>qj[~ 3],:ˢx[ߖ[5^fb >]؃'h5:LRؽË(-`_Q;U & [ܞ<3i0:L5DR71P`ǾhqGل ~A[lz0YXı.Ho%ۜ'$sUkZy o@$k3ClNvgFq?G rA~)Q0h՝B|mI$i,YUwM@M{JFOOr[#h7Hp6(\İEhqN ~|l?D/J*Xj_[&1;[B##E7 ΍C&2GF~0"vZ4c6ؤ=֟ iO)c{[~w qjOO%CS d;<ȴ@ίJh1\9„+26FE,xr_p7_ƱlVz7`s֖%lq{id/~wL` GEzSهNBMG,?f~sge`[Q6eVx%tAz*͆Ez6`iJl҅ qCG1rH6G[B03y|tR\^4uxAS,)bYU52eokB!X\),V٬IB=@"oU@|-|@cHق=sU2SȽV2a1:iȜGʟ2{qKk,/0u+73׃y]" WNâ0jDAh5v3۾p 8~<Wà B:Lyt@ P7|YJ<7BfbHʄOز~&(v+PqջF~#M"/~Àv.\+SQp0'k/E3=^Tt-EO'm;0(̄T`Z 9޲ߐAüm+EK<d6`xDOݾ~X5^i'ւmݸe :f|[$qxrnE)EՒhՄe "b#pziq&s@Vc+J;1-q҆N5.'^6wyG m<x͖9̹X]M dy uѮ  k}KV|>җW7Z1=@n&D_Yb endstream endobj 43 0 obj 2402 endobj 44 0 obj << /Type /Page /Parent 496 0 R /Resources << /ColorSpace << /CS2 506 0 R /CS3 504 0 R >> /ExtGState << /GS2 518 0 R /GS3 517 0 R >> /Font << /TT2 505 0 R /TT3 76 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 45 0 R /Thumb 471 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 6 >> endobj 45 0 obj << /Filter /FlateDecode /Length 46 0 R >> stream AM 4D׍m1d2MR)> t RH`FTb(ulq_6 %:1S7Fz2nS!aL:$9/#5dmp9б]Rh'0g+b4M{9O^m$͹ķi5SK)m .,%Z_V`Q?v❘VF'D)93OeÆ C Y\{ƪ^7dx]ġQ+6{#vhoJA@x9 }d"?x> 6M ^70)@Qmll3]COA J^ K|8 n1[zTH^ŔLG4;Ť]bI,S8 F |Lz]c^o4DIŀ;h;Փ\eFtE$[wKgi#.W<y!$Ej8ϑ(W)5ޑ,~b΢=A.<36iҷ:{3k$VG u s3Q$sV/ C(` /~uF-`YI@͜(Ma.rtt\ui<$9TD-ooGa LHb:}hZwILt''\@cPsj"tfP'۾FiP endstream endobj 46 0 obj 738 endobj 47 0 obj << /Type /Page /Parent 496 0 R /Resources << /ColorSpace << /CS2 506 0 R /CS3 504 0 R >> /ExtGState << /GS2 518 0 R /GS3 517 0 R >> /Font << /TT2 505 0 R /TT3 76 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 48 0 R /Thumb 473 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 7 >> endobj 48 0 obj << /Filter /FlateDecode /Length 49 0 R >> stream ЁcA~\ETb#b+mk_!? pP8L}6VS,b'[CґmAzvjDNNAs_@x]Aŕ + !cK:/=l7p,)S &c¬Bу=@[¶d ҥI"8$5qX ٳ0EvQ e65'&ߴ,}bbp_N||Ց1zfRw$kL+m +0R:=-YˀךXٜf^Xd 1 tUk*S0:,#'cFč#]kD*/E ҽb}ke_避;=wi]1%#3$Jk21xέ4>hS4[&x5B`E2|n&7y1_UZ}tvSͳvG&PtVN]@FI_ܿ#ğ1^hM)G'qFcKY`N!=(j[k: [>R 㗗$"%"L_lř9;zDxDjӍ R1.ð;_ ,c5%ݓU X غnsNWĽ"-P!"v^-zҘ/`=DG3쉔,YBb,Nm ّ2ڕwٞBjG/bΟ]G@e{)@׃P?>|fe%Yp9M ix]^c!o=u9m- ܚ{xfog`Pmȋ`'8`}AwdF oMhAl"˅mZR-n R+P󌸨\>-4t9L]:Ź/ A*z%2ޣ9r * Hf8Dh?PVU{.B*>BZ˚Sb ZY#&>Hp&a-.;:`&h~P%[wa^jlu[z}6~/@# gr?kwTG }'6=SMAPngv|"DsUZlR Nk;*/A54jO?ox@{L*٭\unw)xdrfhm SN r3gX ]B9YAver:E{upJ5k3-# bۛ;X]S~}SStXkϴݮtõu-X=,P'2f!K3sx"s+^!y| dh[FiFSQ?Ho@nR\dk/J 6kZP )k-\x-qnF=o8Ѓ*`,VNS>!_^nӸ]Z9@V7<i>TA_'La&8kJR#և}Y#xq?bl\*kEGVL@ gO䐬9T>dDA%nd®Y pbΑ"d M endstream endobj 49 0 obj 1736 endobj 50 0 obj << /Type /Page /Parent 496 0 R /Resources << /ColorSpace << /CS2 506 0 R /CS3 504 0 R >> /ExtGState << /GS2 518 0 R /GS3 517 0 R >> /Font << /TT2 505 0 R /TT3 76 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 51 0 R /Thumb 475 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 8 >> endobj 51 0 obj << /Filter /FlateDecode /Length 52 0 R >> stream BYO`'BcWBRU֓}#Ԓg)A6h%J *)ptAUӳBD8}֍Js..X mٵW* ɡq5k"!o c-Tmo74(2C&j(Sw.9UP 74CBB%ucbMx~Ev/tp jq3zQ% hzr5s!\9f?9œN0Bɀ:8)j\Dr&+970sCUia읝tj`v5W|֔\E@#zۣ?]?^bg;Ǝ&Ze9S Ƭ%sw:D$Q}fΑ)@ [-R/M%ofاۥ×2_Uxwoa;RڴٙK'_n1g pF@WCjPi=5Y<=9 ?`s@9憠x\RM= ˱_S˘RX>jِbg{>Rvpe(x?ZGfpW Q &NL`׺_!~Sy٨ $#Te 2g-3gLlٙj2 4x1Dⲣ5c0*YO(aL n&!Rm׆re.̮)ueӿi8-+cɎ}EzUDP "kƵ endstream endobj 52 0 obj 819 endobj 53 0 obj << /Type /Page /Parent 498 0 R /Resources << /ColorSpace << /CS2 506 0 R /CS3 504 0 R >> /ExtGState << /GS2 518 0 R /GS3 517 0 R >> /Font << /TT2 505 0 R /TT3 76 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 54 0 R /Thumb 477 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 9 >> endobj 54 0 obj << /Filter /FlateDecode /Length 55 0 R >> stream IMޞ3d-suRM藋di(/%8,L c'%9j:?\я{a!CZn]qކ?>p]^r` ܆*\t/@G_TAs8<ҍ(]-QL{yM{fM5_Wnѱ7.{vt(O&vZa y5zj%mWFPH6{am<ѤM[zɏG6l]Qs2yzMZ@ $ƻPȎyR›.p] t`t-eC$@Tjv>B|ّ28 U~yOhޢʈ-d;XfE|N8 4[1!,D_bL|i,UTv ǴnUi$M\_bn痪*7KX]Pq &CgTXto vV@++5ryfkBuuPŜ;VaŞQct^oHZ M}US{TumjZ/wϤyNH4ՏF I P{ )lC\ɇ#ˍP言{3@zŔ~;VGaOG"n㕻کƫ&? TێFe,6w/ZFX@W#d%c|lddҹm~*KLjjljXcBcEMJ.iƾ2/yBzP@DY/h>sf_)Kg߭8UwGlR[A`TF𪡮gK [ Pv5gq\Ka Y%thzFՌKg}%J sBd02VPx8/e|jgaƟS?M  ^͡Hk~_N(7ʨOT;wj!F6!1j mdBQ(αޣ=9ۛ1n":c0\9d t:La*uacyK9>@jo)Wsx_ӊf)&pҚ2/^56hWτ,e4N\2F6JЛ^ 졐8X1)5j֘_ȬCIEp]9(~&+6dOY3lRi{ƍZvH۫5/ )ddZ .Tװazx3k*6aݤJ*gM_Qs7/Bkw m.ǁUZ|F$t煭4?zEc4'(6*v]0w1/fà{Pyo,Sgyiʲ[Z҃O/0>CNYx >H[[ݚ4Tl"0M=<2xk29(bcsJ[q\,ma']Ʀl܉ endstream endobj 55 0 obj 1675 endobj 56 0 obj << /Type /Page /Parent 498 0 R /Resources << /ColorSpace << /CS2 506 0 R /CS3 504 0 R >> /ExtGState << /GS2 518 0 R /GS3 517 0 R >> /Font << /TT2 505 0 R /TT3 77 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 58 0 R /Thumb 479 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 10 /Annots 57 0 R >> endobj 57 0 obj [ 88 0 R ] endobj 58 0 obj << /Filter /FlateDecode /Length 59 0 R >> stream =@`"i/J0#BB  (KT#㝈vJc;wZ~6up@tͷĕbKAU s(g.8BWQT A h G4ST{F l/^D==n H<%;u:GhvTXF/"Ծ/V˶'wY&MЗ^*OU =iȔ4\J-P0[Oy|@6"Lͷ$IbP*R0 ^h4'ս?%,_eE*(4T@.ce5gRɲCŒ]ұmZfk3T!1靃 婏|GD=qG<+ P"^:tP1wH-ts.X$kfy%G<, ({VP4CEHr,P]mSl I#n=Zͼ ~6*;o`B1m}HWo٬#s7a1C4,D([rԖɰy/Qb@8ub:n9ejǩL״t1Frz8EB._sgn+:k ӊXStR 8h_}A%sP3RlL-0prb/Z^t?GmP-?NN|X𞇀!կ?/W!)GV-,z?e>Xh`xorG&^ K%mt܀ANޗI 8r-&XT#5mx endstream endobj 59 0 obj 876 endobj 60 0 obj << /Type /Page /Parent 498 0 R /Resources << /ColorSpace << /CS2 506 0 R /CS3 504 0 R >> /ExtGState << /GS2 518 0 R /GS3 517 0 R >> /Font << /TT2 505 0 R /TT3 77 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 62 0 R /Thumb 481 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 12 /Annots 61 0 R >> endobj 61 0 obj [ 90 0 R 92 0 R ] endobj 62 0 obj << /Filter /FlateDecode /Length 63 0 R >> stream 5 W-Y_ 2TSD D؜}_${.WuܠP Dd02~U аp򑣱ZY@#(Z`5d^\%|DAky'$ѣ2zܐ<ߩ:)WhR '`-[惤kKTphsK/w۪J8Ya+}_tZtOsȯRsaǟ՚gBJWU,kE Z>O}5 F1AQ(Uͬqp M &LdY^XlTә-v%ՙFj5< 3>,u%hvbSE"9v9_jDb{  jHQ+Za_C<()KP$?Z{gȏuUvm O6eYKZwai(!֝'( &Y݌۽YXa(i[xVuRHBawk Z=u5Pzq&? |!#ʉbf.H/&Jֈ:*Q͙3=UMRYǟdB}6Pݶ"J`~&òrj;Oiu6G  ~Gü{^TDNFf&! *D!)EV[>+GWOQ.wgV'; jN罷I݉NMMn+08lc q <lPq3W ELG JvA@&Du"I̐ xj>ILx`PHI0s=ZAIW!g R0J Ed{$kGjr=Ŝ(&c#Z~#"u=/b# ,jHWqkjG4D나R_ g3>_e*|djP:P6lʙ+35EP 7dƘE+>_Ԡ/26~9JV?1!;RCi*롹e!"wCUR83gI1ߐ$ C] 5yq먾'*28e!JAj(-A丵zћ|] IOM~ĵ{l)lmbB/nՐ-_ ,îq"J QX&w'dCrĐA&c ϏS'VW٥9%yjxSptnyy6J~QA,DYl)k\WQن\@#; Xm)S}od!14.!BO/m6f>u!$4yz`޳er*b(Q[2 aMq"񍬛RDZe9w G@G+8=DZiE%Q9xS)6ڧHH[wGN:İȱ(^uGtΨEW$Pj #gϏ2 F~kU;Z!!S!zt3Ŕs nguT8l3Un5 }YI=0<tf޲Q2p%Zr?~;1$,CeyYc endstream endobj 63 0 obj 2130 endobj 64 0 obj << /Type /Page /Parent 498 0 R /Resources << /ColorSpace << /CS2 506 0 R /CS3 504 0 R >> /ExtGState << /GS2 518 0 R /GS3 517 0 R >> /Font << /TT3 505 0 R /TT4 510 0 R /TT5 77 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 66 0 R /Thumb 483 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 15 /Annots 65 0 R >> endobj 65 0 obj [ 94 0 R ] endobj 66 0 obj << /Filter /FlateDecode /Length 67 0 R >> stream + ZCs n9`#93sH&.ȤWR }/] tQw`{6ȯm:_Pޫjh]7Dd 466KiA ^i/  b&!m\qZ&ã\Aà܈_jr ھ Ϲp q*հ\/C/ "3ڛ=oT9(H[F,X8 [! '> qo&GQ;beppG% s9S&E\+8.¥J>Gr j?% 3JQhCC5 FV-1k:v +ܟ!3; 1-&$܀pBb3TR1i_ E 4'co٫)iJ&L%R)xL{[9,JzԤk=o[-9K ey 񓵢L7G,( *_E@?,Lm%ڔslcy@nIxs;fT`gh MŮxw\3r8O_|V?= 3+kZC'F,YN0@HЕCS%êsVqlՂZnL96FJSn9jSJixÊQ}_N;sUR[PfcUz3xhfcy|k<^@T"Z-%7DC~U k~ M߅YoeTl3@Փ~딸oS`[WXG^ 32u!"Km잏 OQpz2B\:LOM""aH2^Bo^"~sS:U( ]>Θ'- #@B>2G9r8cٷ.bF78]^Hp@k'/76xmftnvYOUxTƥx`Kibh:;cdS| xrE _+UV,g>kςU-T{罹KC^fw:NU#I5F?_@&g,b }G oy٤sVKEi~fhDԦTw[8 Vr յ3^Kp!it&Kنe_? i %v),s9 1s Ki˩}">Aѡ[9%L݂T<4 F`=W?XbuS>f Åb-p<r)-z+7 Qc?S@C.EukϷ,XnRn9J쥬ӔsV>6XM'IuX<Ҹ^E9E<; 1 ׹8y Sc?bS}$1b掛ٟ }S` v ,agk7J}  WlL"{& pP.xߏt9WiˤcO8U(UUՆ.dXNEo`EWWjw1mqa%x}bj+mfÁ?z]w(@H=NU99qw֪QU_z]8dž.i$їUC?!ږ0XwӼ(|v構ARKs{"`*pRָH4+q",:m)%{to]JQ)h'N,E:V9p[Z[1do%Y.h1F=ݙǽ~,T[,Wm9,i,\}]Qi$v="?}uZLJKz{<*u;~ "ƥWOP|y [fCبZ^CuҭC؋t;^vMљP#632˜Čթ+u =ayߏ>NGF@pT4c~Xr\do=~H F:gE>TSBa^-Ӥ`k ?&R%{ w`*ؾήa/Rh0o_as,o0~zuepJpɀ,%iDlI:"Q;\U |,0%y!JeiJ؈YjN8=(.r  6/qOZ56L棐2`/⾻t )e ۺ6m{zE"9=$'EjG1[Ⱦ̍;՝r O{Sch cTJ; T,PẒZTV(PG~0hmME $rOJ)2ꎤ-S *c2tAG'PQs]+3KlW/jU$>p-4VlYTB_h:SMN۫:'ڡ >K'X mN5+ع!y,Wj7PiC͙jK3Q_{ٺ]PyMrhBF4W^3F0ݣN*L]YVw.mz/ .&('I]$[>~z!J٨ sP4oB,On#DBd_ݶuIr .vkxWiP,5#-Ňؤ];)ТA~4MI.:7,p*Qsa> [qb߃z$/mxGOPKi11 |Q^& M,r6:[;Sǎ(](ha c&oZ›r7;/e1l+Ry%qaɂed Vog+V%Ư >[D-Q nf-9OZJc21EU6DGWߪӱG"fA.Qp(P|-cTLM;[G4 ];Y#DK-M=\zW #Np~$9Ap?WQzؙ8P 2 X3t/!8h (1hhT)tӴ,btK~e?v8;:v*JIݡ!5ק<(6oEhgӈzRGܔѯ&p.dT._`F'?vOALiii@<}k%Ha񮤬׿w<ZLL#@Ϫ4sA>/Vm>SN&9\w|՜L|k\c%VQg( *ӔS'w6pTˆvҦF9PlĵBuAFkZr%YSp~Ϣ%ee;<O7 A_Mh:iU JCMrtG̕nz%^TT~c^b \ԕG&A*- };,=:<ҨnU/{ :IYy7xנ龉\>9Sb$IA۶uUF_[B:ib{H3/|ƊN|1+G\.8HZӨNпAwthۋK)}I$Fo—SH "-_M+L[zkV&q p8ҳ,-*; Yb*$Qo 7Y/iBVu')eWB㺝&*K[OSJX2@/;xoOD%r`G%w^+!eθHs#X/DN=ulV+*bgЎa( y"fcA*T)6:7*v7=F] ]4z !ՆБ,!8n– $YwB"xA/ qؑƪ|&7,Ջt0PateȒ@g4ZfU@NXry8A6Tk`}VYduwC3_:=M}AB` 鈅'}ID%ޠ;Q,z'j 3ϸR …ds8MuHlrQ)H1/7:P-s+Ƿ!(̚˾P3i ϧ!Q_ J B`̜nQ9m`/oOOmkS2HLkA(嗯A 愤$ TU}_퉆!'s3Kh uFq ;;i{EaܹF%@e"$}.0ѢzAWpCOiJͣc`0Pü+wȲ~b#0A<*&11o}avm]Kl˳ endstream endobj 67 0 obj 5352 endobj 68 0 obj << /Type /Page /Parent 498 0 R /Resources << /ColorSpace << /CS2 506 0 R /CS3 504 0 R >> /ExtGState << /GS2 518 0 R /GS3 517 0 R >> /Font << /TT2 505 0 R /TT3 510 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 69 0 R /Thumb 485 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 17 >> endobj 69 0 obj << /Filter /FlateDecode /Length 70 0 R >> stream t"4j9>K & Dx(:ũ ۗm 4 *8%XU{l [;AuQD4UE>`ȥ3*\ŷ!z'O#8Ixp49mѿP Pm4]%8@No&LU3$qNT]#`%Q&B/[9F7;99zlg;2yGܡ&6/PQ3[PGtSS۰"Ó$!~ItHpӏýh-@Ye!m>+яI*eQt^ݤK=נ9ݤ8} 3kNNy{e yЖD^;鉡]ެNN-#gCG'*|ܳf8{5a #u:7ޖ-UvX| s*!v2F?k?t0?y Tf5y%v= d̓n͎Eȫe_jwwaI柨\ 0o *K39m}و>9V׺d/H8s]f7rg?NCP5\⑔$)f2#c:y8÷ϼW39 㟅/l̔ qa9S w"")F^H[NiZ`eIJGz*)#t<7Ebr^HBօhVx?9C ˘`Ґl9J9i r(6iUTP Hh c *-7{Z?UPE+19,^1ţ{M2'U4MM<-.l?K{67x^WVqIbN`֙lwAH(OUMJqBZol DH@U-,#і1$ة)YDI[RԝQ+ɮ6&bՃT*ߢͻρdLPcof _3Z UkEϵxfV_'K7 Y#'Q̫aǔ⛬x03!f?^v’3hÒ+䡋uԯ(^ԟ4h޻vV$}.5hm̾3 -9b4Thr爄N&i/mB[i QHu!DI{/wxۯ;r׼P[OSdO*pE?5\O=l,@a!K?a*8 [,"j&5' cn5̲?_j[ʚ &贱ۇʌfU֊yfօS>ވΩzDՁ`޸ēl ob)y/:Xr A1ً9D5WMV6'oP7IN-!% igM:w>dYPA_9%w!V(d Ic*XA8Vw"`8&%HF.(,s؅J j|{wFroDh _:F8K0(0 M?rxMilv]+WbNq!d {PJdN4R"=oɕxY>V`=l<8"s!eU>L2pṟ5SDMPp8tPm^j)@ N(fǚ`ƀl©*-"wCT0XZ(y,?# c~^ !ނQ"hبOPQVlUՋArqV=d2pƝQk&lZ4z+`|z,˔j=BD ӳmVJ Cx%/pTvh! ]bH-P$? Ņ(~چpaF?gSDh믣gi=0f1A{g}} Ȯ`^{"Z2ϐM}1>K>KQ5Eos-%ح\G/_%]V 0ub vyQ 1lg,M9pm/20<2Sk>Ե(~x"䳧C٦J0IODBt 1{ݤ"8+i *9 ϓ!+6On=h EP VoPNiD&e!js]VLJ䗠VF 8 YX6 +IU(jQtޕg2oB.pD b*TDM>)% d]IۡV"^;g܇ufvL(̙gVzHvg5'V>>bT"]VKM'*x' 9)| ُT[4^ X>lV"]~c"_G1ʧ~0wqSfJIe8y;;@jLH$gmIXn'[p>M{lO@:8kGI/$bIq=$sU^Lf|8'}au6 <xJ\ fg{}aas aKIt\H_ၥ2n.8w^.vģ8׼*tP*/Vb$cTs(K;R\ڼۯ^!16`[{x,7P>NHO4?+eTwTaR+ǟ%%Ԍll=&봫Cz=n]GlT_^W t.ѮV`NaS> /ExtGState << /GS0 518 0 R /GS1 517 0 R >> /Font << /TT0 505 0 R /TT1 510 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 72 0 R /Thumb 487 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 18 >> endobj 72 0 obj << /Filter /FlateDecode /Length 73 0 R >> stream B5#Ln>KEQ/9\iN)[Ab1FAiNbZPC'"H Ya3B+i{ N}l3aeLHhSqyނ ZxV]Pv)a QPԪ*_pyT8G~2it&|)삥۝ϕ2a;^{ ddܤ=|뾴B]\Q_}oB˜B@ݏ-#=7pŋL2 ,~qSs03}I7yPxi;Us\uelNK&?/1[2EeNp` \ ZnPǘ#D)%cܜx&$!îG2NJ+Ҟ̥)5d޻I:G<9}zOtZ]f`_16Nn*V {Yq%+j6RA kvGB*ȹF$2/=.;s5SQKpc 1Tп-38IM1UD>YB``[9vJEzw$`Hp Ԥib0TЫ,,^ kb-XSӖrrHTS)2}4jfT7^na>~@ endstream endobj 73 0 obj 913 endobj 74 0 obj << /Type /Font /Subtype /Type0 /BaseFont /MICLLE+SymbolMT /Encoding /Identity-H /DescendantFonts [ 86 0 R ] /ToUnicode 87 0 R >> endobj 75 0 obj << /Type /Font /Subtype /TrueType /FirstChar 32 /LastChar 32 /Widths [ 250 ] /Encoding /WinAnsiEncoding /BaseFont /MICLMF+TimesNewRoman /FontDescriptor 80 0 R >> endobj 76 0 obj << /Type /Font /Subtype /TrueType /FirstChar 32 /LastChar 122 /Widths [ 600 600 600 600 0 0 0 0 600 600 600 600 0 600 600 600 600 600 600 600 600 0 0 0 600 0 600 600 600 600 600 0 0 600 0 600 600 600 600 0 0 600 0 0 0 600 0 600 600 600 600 0 600 600 0 600 0 0 0 600 600 600 0 600 0 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 ] /Encoding /WinAnsiEncoding /BaseFont /MICLPG+CourierNew /FontDescriptor 82 0 R >> endobj 77 0 obj << /Type /Font /Subtype /TrueType /FirstChar 32 /LastChar 121 /Widths [ 274 0 0 0 0 0 0 0 0 0 0 0 274 326 274 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1000 593 0 641 0 0 0 720 0 0 0 0 440 0 0 0 521 0 0 479 491 0 0 0 0 0 0 0 0 0 0 0 0 470 560 458 560 486 280 468 560 245 0 0 248 877 560 558 560 0 331 387 317 560 0 743 450 444 ] /Encoding /WinAnsiEncoding /BaseFont /MICMHF+ZapfHumanist601BT-DemiItalic /FontDescriptor 84 0 R >> endobj 78 0 obj << /Type /FontDescriptor /Ascent 1005 /CapHeight 0 /Descent -219 /Flags 4 /FontBBox [ 0 -220 1113 1005 ] /FontName /MICLLE+SymbolMT /ItalicAngle 0 /StemV 0 /FontFile2 79 0 R >> endobj 79 0 obj << /Filter /FlateDecode /Length 6856 /Length1 10572 >> stream vVǻ_De@!0qaP8yn]"]D|N,-by 6vN)Լ4)jƵQi~_ykm `~#PػɍLC``03_ poˡ6SJ/p)[IyAgN$"`!)`m .KӣsbqK!v N:.eJ)^٥O9zIeU1Q=>mch&gSbᤉ.}%\դ=\O(Zb<83I-']HGML[7 #VS @X `S>aw8N^] WE'9ҹq'X ;9BԑAA>%хqkA7UhVeAZD($ac@iLˬUS_|_ ` '?|y0BM%dgJ^<%E1}Wz"殠ή!lZ;wh9:^;נ)|3~#{Z6GIv%sܛ#  /HE1!]tx*sG 'gS-o%p1߇7M9}{Vc'oAt&LK[FuHBp29Tr-^Ĵ\HN%9oka{\{:]^ q%ډP<0O;g82F{32֏T8ͣ\󣧾5RC$(~SêvG0b8,gw\DͰroTvbF=-XqɓU<zfz&OZKo@I7sbg̤TDCQj^j^oHb98= _b)bwQ^ HYb^0`s.ŽfP Mk$MRƽ{4,8t{ء)UA)cDOV+.C\hm\Ev_n^sO94%(7`n<]0`G[~|r|KXvVr@'I.i:1!e9lE*'694!Y @!-nQIŒ6:*]_XXOiA)=[r u%~y7?%7P;m3"KT`':Ƀm,+wǚ}3S'K/ˇޅx߶n)ged5"L4xhǖʓ}.3V`Dr_7&bkC LBQ!O&+`8#^EG=nX_XoƷ4X9tG=DP< |wH춫2<{Uy>Ќ1 d\yd*{4,;eYkc6yixSo:0W\ O*g׎\G񖸵P >vEŵWWjПsMY'h3OE~@`PtdL6#"u'FDBJjD=0 V0ʶe;P=ΆXqiyVTV=--9N튺~,LpgYьc5, -M>d IA5ce饞Wi zFkZny8s8+㟽c,BR$'$n7hŊ]0iSw,Ac`6pďMYī^ }83p&Myp"޸fY mc|SfBw>@QTT9_ІΚ_ISߍOSyFeY_El8b~eE-ǭV @s+g[_ W'Zh0# {50툷4RJ1M^'*5|Sq`zO{TtfXWpۭ :I˓/ʟQ, U>Se(&@3kz>r:L㠉|"x]*Gq\Ch;>( <2;= tptMR?f&Qc#5C5gP邤8R˵b!7>dP/NnhNr5sNLΤP?>g _=&4̜S&"Z_.&7!&cE: FUԆå51l&k}A;`{dnc/=T5{ I+B; >@096R͠(bVfђ\nȈ2b2lFn ~o4gs7ޖKSʠ(l\e̞'6,xB0xi6RscG$qxݔqߌ;&E 2&z)it0N>IG V+kNk2HYQ@#ҧ{ǸG.Fʷ)Lt|F"v͛~{ y"eJ wЍ/r~ڂ +u"_fԹ0VO!^r?/?xg{̻W[k0H ±R)? +AIPǺD(]4S* GN`2c0Bwsȱd%!+?Sm<"6JHKB) ) +hydc5PmFG=t k\ն,~NƬ yhLtfɴ ʖAzb]eHpdҝq KƟ _ ={wpV=)D⇸MJ!曘)? (W֜k0mx^'= «32Yֈ$}@H٪S*\6MxxoY"r@ɚ?0 gWC7Ķ||bm%.[ U)`)L-$_6Ymwv}ȋ JIiC.F6=i+o~K"&33mj|e6 |C @d?O&1-GSSéE!IsLxױZ̓|&0XjeٍkՒo9ǔ{u|e.K!M HY -w/2wq~\,+ˆc;A65YX=sr륫wLSz~։4z~$zG@7 _Qdm͆K6_`#Ued#^NVF*$ ުu|PL&#- <ɀQ >`*jCW%Ebm;EmU!!.':4[wv}+2 i1{̅(+p8ȲBg>O ]Vv7YAU;Ig ΙU 8T=w8~)cJ#*\ύDUSzg!O^r}w?"S''bL1ܛp_gRXy R`X`rUq?ϴ:L ,:ԆY- 5E:)O D?PkjnYa!EcHx} NM96WE7Q rBڬ M0WFl{| -PEUY6Մ*.Aү (<֒ Zg #KDECZolVuSp~@s4T#U\iǂ%,c[ ABNY ;M*~ ҄;eCߋZav6`M7 3!qw]}Rj>I=Ja lCXܩ< s TPJi9/ 6kZ:Q"2.=q3=d!<@kFWvdĘ:L06 bu`+xZƗ  2\O3<&|~vA"2lFUx"^0̀;펯~>oLg͂@ZU^fF64I@Nv-e9hIR_/:Hki2@*jKM/FMAWCr0ҥLnw3ӧOjc2fgPdzVWv6{ʗ-tǧe든ШF&6x(BjGYO]X47F2!,E#ܤˏ)43*Kʄ(|~b2n bCstG=R̮%~*|-w1UE+)M;ƯALnYBߦȼ_k:NR2 )hGTOv0'_@N}m2H7(6ACLFq3nJпgUhpg,tSnn$QOU>_5{甖7ĈÑiS^ .MH)"wlڢeGV=:OH7hYtμ >ڣrTl0L!'c2gk 8YzMUtʍઌ=x(1qCx _~,99VXMޔ6_A8&۩I} _!&¢]G+6?sFK#r2ii ֪Wa']D3(zIT)L? ݽp<#/A5Bh:8t7c5P˛ ߊz4Dz5ėiCۨ`?kn5=o;wwȥ31R6Q.]!M(vyhGڠ :"h0`wя/.^sz?ԇJ/2QyG#,ڀs-^|_Px$X@1׊Pr3 <(D,M"ÓjyǼ/bʹױ@+ Ǖ"iztG1NW7S=Յc}Xn/E2/>TW7\gKrёf߳}(th伙0= endstream endobj 80 0 obj << /Type /FontDescriptor /Ascent 891 /CapHeight 0 /Descent -216 /Flags 34 /FontBBox [ -568 -307 2000 1007 ] /FontName /MICLMF+TimesNewRoman /ItalicAngle 0 /StemV 0 /FontFile2 81 0 R >> endobj 81 0 obj << /Filter /FlateDecode /Length 8100 /Length1 22064 >> stream ZV•:b k%r7f)ߙ](6x?*־uؤ%*͸ro=2b4qb9,PB31:g*Ȕ-^Yxbz$@w<UzG;="A`_vƢr Atbt0H: ^?CMwO~7L/ t-k݃@αgL0\ϵhڞb55YefL+0DJRK㨭+WX3/3ܤ}mҭ XbQlmes~(HKm u7q3M' |̂2}=8 ߢd&EW[%eBJ=\&8WK4QD7ƛUdkΊM8uZdTj[#& Ŕٹk°J|{iPMyuA;`ho~ҐCy:!jcԊe ;]%jT@esW=l$e)%fEDQ?S߿C ߺM M!QyR/|k=yf?G_89PdY|s}C(nv-Q~c{08̲I+2Āssl$Q OIMuk @ Wﷄ0[7sVxQsg]F×/)&Cm9"uR7;l;-ъ?_Xhڌ JWeѸTޭPT uILA Vw JH(inoX"uDڧ.] 9ۀgC.e&qJX3x"PkN(꒥90Z~Ii )?KO\5 D"^k0 BkKr;Q30"*])aĝLC×+wZm)5~q w f)bAuqS/5a=:Jv=c9X4Mv#YJQ}CC;3FpRk{N')5`St8Cϰ'ArY->iIU] ^#|i[wo3~1h*VBo˱{+JaLû S59[jRhfkFy:~wwKք4i LwP|R:X@"WX7-\KyO0Lc#g|^aE(HK |6Wj4il='x'sW@tdv"mAM^~u6o܃)Jn>HA -uXyI @o9$+i_v`q3! _S񝙅Qkh* ^{ u@ZbNpq@)ٮg 0uܧ1jF-Ct8-8yzr3J\0ΆWviM{bGCé\zO>͈w*yRn}V8̂'|r.ulAcc1;2v CoӜi"[<Ka8Oz^$Ly(_w8җvOvNsyjE93*Q/#dף«3b-^ 7FɘcîA3qڜj@z&p}n[+VP.,W+>9zeP+:kJ~V?)b_@ ֡jFJ$_\D@ČӍqJ[؟L<* k@;M~-ͪS}5F7 G52Ń~.TB [/cGH;L֨Π1B*xx% [Ieϴ5JY4 2ᔝLqM"] k]7E@9~:we%Z! oܢ4ՂoipyPZ]dU1;E;7o<{:'Sm7[cFlǺwl$9ֶY2McZ9&~G<9{̑/Q/41T?q'fG&Ba%3O%0isYDu%.V8g`(DQY#G؞@urAS1n]Y[Ymk1B۴kuaTo]Rmu%/R;k̓ӳϪcBAx֚i3>zI9AX -,37B3i#/wUp ƚ]P 0֝E=v}~>kEHwERe=u-KO|:ōqRD8jBnEfq0[ߝ`=YM`QV,:MU(LE]7Nw\~fPiwƼ`4AڤjR2KɌU^Pe>j'T\ b%ɍIskS1\З.tQZaI H b 3O7~R>`&< ק# SG`Q/,LaD ^/Pw㫶F"*hS=1&sYn;PbeV.cX!Ra*gv"7"7  woRnYP9ICIvnV&m‰(LcϤ9CLOxriG+X6;@غtM*U%Z}1IN;A3k_lZ]2 B]&e9\CoH VaP[9ٰ9M+:~iܓo4ǀe+H ieI7Q%/Ds9!ގ&wtu(\B }K2+k6QvuC80)'F92IHl5bЦC 7̥M^%M?Q~ַD#ۿ(qA4oRUFOemff}j8T!^ET}$Mo=qfnuGieKzU]Blm+r'1dOyYFIAfF@HJMﴭ|R*fIdc[@>>WfT7ԇX,}Bc/I[#:d|ZsŜJk]kH I8ae R_D\+OHEY{l9dsү+ <3eĿiH'8B)G3IoL )sG7i0%Wa'Wuc%OM|%K8~|iw9dn=$܌{xkOHm*"K%+|n5O'4:] ui3)LTTьfQ5׫r}W!?=Z#ϳO!jMw$ya&zS>P)rg[vekb^* #s1aK!D$iKo}ȏ_vET{En Y be1^!S57z%G-0$a2lU T[vNd6@8U3˟d(!Η %'9&g{I2=+o 8q" *ڛfu06/7F:TӀM65EA>.l6Ϯ3qws(jE} muHۇTyC(CcVrfZE]fS3=2%bTl't.e BooĶĻ6+h0a@{\M"dY ?cѼd\A)#grhds+ 5Ѻhj/ʋHH%WI…xljK3LGޑEiNsO< O #&fZ w|].(Sh }G"i5vW$P%"_x˅C>z}!Z B{xM#[7Ut:Z*ڑTA V$acԳPq(nte8 P{ (Bfi=\C=p1xt%=cj#U#ZbjΔ?aLXK ^"nO'5mohEϦ EwRy) w#$vb<'SKJe&[S$qgaϮ2H`Fd߮s",tGAlk<6 #9/I8vqpccZ*KW&vFÛbcf\36ae3r^߆ qAթ`9a:.'IHgE?d(1 t$^O>G(Gƶ\Ŋx3z{8yǐCOKB; g[KpqȣrM9z&82̸xmSlʣmJL&ʔBmc3\*_vQ )ғʴ_zhƓzbBa\Wݚ$QN#D4U\t'G68G*qAb|8B6}PЗE CX@4!q#O) 9_M6*Ƒ$u=2]#bK g;_$&M3u&{gK ([5^ލbC=e&sĔ \v- nb8F`ߧf*Q: 7+y #CxN[ ? Wk9xBŒ6sV,̜64ܫ3g\i I;G% jǬ`? :i/PaGKv bkNX<"&<\xNfă([T%zFDED"QB-nTI 'TmLͽ(lûI.;Ud vrumǔU#K@3Tmw: %!⬪p$ir[(y?!O l(0s5XK\D4v W{iY9 @)ϿF8<=yٚFR,/(gf"!% 68Zas@i{"֬sEC|G_~M gyhA(<^MȖ0qR\dp,~neñʊg#sޙ}IvEٌjn#yd7|lh'o9%wuWr`CjJ)C=_y+6ʃۑT9x!Y?NИw#!:?[ q+M6IQ#o]&Xyy؃58C`&U荧``wBq88cVTJgwKVK=,k2x]Ewƪ!dYоC ""ny#СNZ ymHҼSp)4EX0e9f,o=0^9`2<@+~^msYZ|$ xEon50Gy$saA w1D3qTI>?W1?e [ch`_f#3u X ׬e^L<_ȌAc[lVHƔN鴫 {^$ i>(6VZ *u.񞀹=f{> ~3UR*QlhRdSRlRbTɲ endstream endobj 82 0 obj << /Type /FontDescriptor /Ascent 832 /CapHeight 578 /Descent -300 /Flags 34 /FontBBox [ -21 -680 638 1021 ] /FontName /MICLPG+CourierNew /ItalicAngle 0 /StemV 42 /XHeight 421 /FontFile2 83 0 R >> endobj 83 0 obj << /Filter /FlateDecode /Length 24114 /Length1 40664 >> stream 9FfiSA'֑w9ڰ&fap; -V"nujĭ.xrE~N6W4hzt\kE]O hګ0.dd34TM};*[ceW!V;u dД%J դǷiWQi^m BSGM[SyPyDאI^Wȝ~'xҁÖ!ך%.͡r c>QKS=84j WONd:TԻv\SKipK&3*,.uLhkhݡ )9u#"7:_Hb zPŲk v+֑\B<&'3,!3 ׳Gi5zQSLfW| VH[) M躏Nw:4#C!Ƨ<*9p˺JpL, & ~ I4(jruԽώ2:I6X }i'("Ci ^/CD^}c<eǼՠQ͈1Y e4ެ1QJ5yGR1'[; ^`,K ?ߪٕ}O nd̬!ÿ_k4z1>? 0|"OyI|^ҔObLcb`2I=ZmmU5r$WrV { ZvUOD'<>[#f!w7:d)?|3? wRdd֪C:Sԧ:i*9+ ib,{(_@qpyHn&.9:abhWbw1W';1bjhLWZhM'zZXgKwhdl(kRp+$ToѤrЬn4)oiX#|~-9q<5U\Is 5?5#x ʊ/;rBO]u^C 4XG뺝.4jkKfp&aCN(M}s1㝷 k˰z'fλO*8p&ο, grq^A|?}Gz IzZpT?5u(0Ƭ(5Ϸ3EnF}њ\M)U@== Ax~5- \m.)EQ8Tn&+g#R:H)MCqgL mѴB3¥c+$An}n2r!ZZ ` #|>!of<A<u@޻R^$ŒcMCj9vX#и<4Kz1s/1rm7s5'wuІ3ɅAtW jR7yW'.YO?E%yxMCěCݝYKTS,@7-7`i.aaa- e TL3"jWf}>3H'1k?d0!nL2؜jZ jK0~g:wғg2y:tLDL In%ÍY?\B>?OҖ}b Jm KW4*6Ÿ:"*M /@גs/C̶Y$Sze ;;(;DɲLm1.+^u I$U&j h7BF[,P(#P u%B?,7pdC MH!Njژ8z '݄ 殓\М&MٿkE$/g!7P)f L{z _"EǤZHU,LC><0iqm՘\^== 7]1VЎs.*zIQޱ2sH"YU/wrpt4jsH#ҋu0 /\`$\I@s _w5ܷ<(m Ɡb;! ;/b/ ?HEF?VaiR( 0B⡴2/R1I @7FY!2нvW+~nZdpv j +އ)0dtfKR\+}oDi]ѷ<  'C/@gT/ DX #B#:~Tp{`rxh8BzM( |x`{މq77j>'F-UM9F Cq*k{&Crl3dVc{zl\[$H&dB\IԸ+"`>Yb,G]"o]5kf:cI4PGv@%@v| `bͳ~C/=\C-@١+|s8Y4ȣ)/wI+7CKYEo| I#'rW&r*&SG6M/Y3ў&ÏDz)i5Gob* I'' KCx() FN=j,2E5k}$u)LT.%K"K:R5?q#Ü nd ITagY,KC6 #{혿046V-S:䩧^^FF~n|#1)߸zmGOɴ}g.0lS d ~V9\k"CVq&M%b䫁 l9.~Ux4ս(-L x8'b "!> U8yܩT1|ڜQ2?,?4a2mǸ5熙:ϴ֑{V˯_!aw|Ry>]"㗜wPii ˖HPzx ׄ2sPf*SR\iG;ٽwrrRE3-sM aȱ}J @ +6/ozz4P`}6g4 ݺ $T6V 轀 8yF9(m? ԺSKV?gql}*x`$ԓq%A.Y u3Iڞ9%20"- (ь򎖶<7Zehl*w?Fu6HV2ԦYPF! 8 J%#5K ]TVYqy#kBv݁B\"}` D.4@4dc>U  _.o(ijR;PSis=>E b :g"rBRtelMnQǸ4t%}yA숗: ݠ16%'^%oTN)~h[#a^\xeQwCWKxwcUR;Z]V9!g\hl&}[*F_RK]X^>b r G$~z@F|K$[)UW 7n%""zʤ$FF'{ >bsP$P O9ZIlO-V;sn۾#}{L0R.C(iJJT3PPX0r5 HH&o_O\.mG &<|5˂m`4aDt*eA'! -n+/^f'i^ɫ)>.Z _%F-;k5/P&|υ`%Rg1ESQ휖 P'1zQ$CR?'g:]qe&)C϶,^VXF+W)G&LX-a}_La\;M7%d%gLRPKzS+? \ϣpV *VI2邭nL@W{3-|qQd엷||Wi,*ܓ#Kg BYX8AupK]+WJ8<$X=7ÿ;J'h{'끅|N}| 2aDfj/šhQHFݧi,䔠t.'D"K"2x$B5%0S4`}̪V7BYx|B=4,PLM9gFn3fuTx)c4ͪS FYx*_dp~Ǐ~"DKlCjf|(ɋl>z!@R<U7}'zlnI:xrPP&.2n rs&uHm(6JzrReH薒7~~P}|+|M3MP(oj~*IbC,cV2t]#RJ7>4y˕S[Aֆd+Ҏq#4 \y1LDf9AbD#FBYB)d]AWS"bCo&԰U8a606S [f#&Myd[Vbx&;rHp`NX!nQ}=x/邻"Wz}Hy|e5fCMcmKh~ctD솝Skz9 ȟE7I?CP>Fl1[`ҥ7'g\CΪ:"*Ydܭק__B)C~pih{-'qFv﷠y!R*?F@Q$hs;Oś:j<5-dAU,nw,\å drRkr\DrlS;vRu}pc?c'Ae'_LEi):2OL/Di=c` 'ˮ `iBzF[VbbPy,yEn*8bӇ0q[N |JH)ٯ>vHW$%6ګpllifqfUщowFs4T♍^dhwi;̢ov./d Tit;Bi: 6l^dj4Ѓ"/]7BɬYabA\y 6k;_Ѫ5 \y)S/5%E$(!Ii0jύ+s@j`t6>oE_Y: %f&OޟbE C{x!W8SFSGOK~5:MޘN} _e"X)=DDSJs:.lh5]pe,Bh}p:C5Ox0<`#:8I}UˋL_?6Vz)d/G=AIOGu.&lF<`2zTBS9hcXG1CE^ Pm3Jر'6%= 1pw-@^^>`qw$ATcuLo@x >IH@5k{aKbDW ѢqvfA,ݏwD=M_'4o᷋)6âVvcmnQ_QŔ ϳ*\ S5xڟ:eJ&ICyo4O2eMnH89)}?(G[psHZ0_Oj38zRp2~IU562^1_{ުYOzp_ȍ:= zCyzɬ)$ZY:G/dN)1&')>д CVTM\<UٍvSQ*?@2H"7orD .)颭-)HzaE)Jx <f- @k :@\X޵Dfm~1IEV,~+G2]u}=A?^ޤdB\e~{c.<ٰI+kVH[pQ=YMa xՙY@ It\$R٣byR%XM2EįU%a1N}, IA,Ldb?'.Y`XIi|s%X _0UFbY>E4@R򽖂:KVXK٥Ek}~KݭZf.߸>;ϠDVs1qUN 7C8ƁH!H )1UlG?bqn,| #& pe`=a ep #.Ch@z7Otp'SZ+o#Bm6F.1Ac[ xVK:.noL(G3up!=PŨW<_ypas_V]z6SW`,Nmpυ hժyLϮiuŹ3]bARyW+Ү``8c# _d=5~3 j"H%,bտMh;N .0-W~.njxJjyP#V@(D$C )Bg;9y qar:wPŤbc宔>JPG2H{[?Q>*8}QJ&uF8nQt.Eg fZ=b:viXNw>?ݡ::N_d lkLa[G2cƺ[ѢjEExg0/A`vT+e**F(e*|֐b \ƨ~S~ , 65U3ܙ W~ &21ʲɵ!WMa[i(V$GPTTȯ-ӉneG#Zd2*mZmu7_Ưc3?..LrII?B8JZezws[#z4=Nj fjFڜy ?fĉT/ -"B]غis-*nkuL+M|YzK d68iԬO&X9[}$ن[RQ6]woZs3{ھͺ`8}[@M׀8"Dmd=u4 #3Rbٴ=ev_|n?dqe}"-m9XI=7hr蟘rPMJ 7Gaŗ]κ s^JD<|:+~pxյϙ9b@m~Ye&Ǧd7Yz#&[+)1t/D'#`:%'u<椼ɛ r GmI]ⅴcA.cx{t|L XP"FCo Cog5EW䳠<砘9|(י'7 \\$S#M:Wx蚔Ab E0}H<qNt|s#GGpU&W>Lyⵓ"35I, }բE2%Ql&/MD}]R'x!Y>p~2;Sea7YT[0quV6=8^jX?P@?G41cvDn,q)ݢ~7p'8uK5ee+ݤp\u8QE:ދ:ZԓkψL/k~א1KȌN+j-EV/ngn3n=W"#YbO> weYŗ9=Q0~HJb|3fbO濵ݱnbM{!L2+`'yp!V?'?>DyI^lÒ>ǴE@z=Zg19$}Dl({r oIYBk2FN2Χufe}zIQOQA!B>0$($kRvw)ICQvo 'L&8DByՕ=G}O5@mj:]'v̭P y81 8vwΑbЩl-NcJ@@d!+*9(jxLu *kTaE7Ta=Vw!h˺`;$@%,.Z ׫.qFIDS>]{U9pqK,΄ŗ\tOƏiz \xEMaĮBJ"J0 Ƴ8Qmq"D\, 2?)@B m\]3̿$F#~Jc Vݲ>(SGK)i4D;k`hϠHs(,͆pb,ybEYOo^y,ꇛ7hǙ:wVXxb]/kȽj D9U=?gZTp} nQWr@y 4+Se`%*{V٭YSQZ}@uS."^i b۳+38G1V=7f(`CӴ:y1u LHur RfSL267͉ <"ۻfL{ܫ|y><_2wn' vʧ$0jf *{0/Vn"X¼)w &'ZA+QY¼uBl@lŠC| AI RޛEn ?8^lI8*AMg^d# 4 .F+,JS+|.= 3}Jgi UQ@E$s8 6QLV|JcI09$I.f@šEwpPeBwzEuUݟc9%DYޯWA0&F)iX0$m;QAA{Гj:s#f!ai[X)˨W"]RE!ҡъVrҥȃ!4 ׷ay搩_2w/ՔP<XD@V%V5M9v8 jH~^̵Ee$`% 35'CqF,/k<'@YBg϶pFWu[APd!F2_ !a&[-Dƙ=NWCBUb#p>ASz7{ܔsLux'Vn$$ѯ)ue|o&+5ScYaҬp<ZGfKkN+rsu_lf8:g29KH'XϷ"GX XR(ltM PᵳhD.*cYѥ:dwۇ@ke 7$|M;Ŗ2ъ@rM!ge֥FqD{Z7pcdN ^OhB~q}D.M ~a1]:F29άhs i6< е+w^haj (ytwڷV8G }bAm-v[wfh P@;Px>P=ODu1RgX'*V|-CYDrL[վ҇2Nu5/kA&\0LG.Mþ):4º-mQrѽU#.JOBkiDŒ)Jn} {,I h9 hzǑUFx'S73tmX}_hx1{DWo19Psb{SRZں8 rB*%Rdo}նP 6YFͿr*^-xVDޠu! jc i{\^nM~,,L]H%Xpoè52XdNa3HL'ldutt|Nս ,nE{HdJs,QrPNԙ*CoX@nE7o\mSANav#;(- >-0H4 }R鹢5,*g<@iJDH>AE},>#һ$;t!vc3gR~fD>3((DEZcn"`N} >e૆>ފ!k;oJ8QxF%=Dh~+*?23MGy 6$}C_ɼA]j7$6[]B޽;oYPJ2x}{wWuD!ۤbX揣)o.Ʀ;GSp(=I?y-?6[0 ne9h楹?"1c->9˞sH.H)0K"X)al'7ѴCDPc4C?Zfžh?)Cq%J:\ fyZ`#ùHC|u)i)sVq/+b1/?OQK& ?4~0[ǚܖ!(IGzSR<~Kܻh3+BsŦ@ĉ> bx[ 9 go[aljrޯ\aC PN1A(T0T8x4R=D,,⠄?)a'hsxvccϟ]PlU7<0[Q s!*hڤivBiAưBq*4Y7T Mqӝ{M  .'7l{#xPdnd/}犒>ُЍj=]z}e?Y(D *a>d)V홖nWVU'.$' }Q[@(^۵zi@QE 1ZW,*?l'JwBh~U!c8 }=f \N/i\Dsğ0[cR _[KFfNn@l06zH`x_ҁ?X*3%|p0M:{W߃h6Pt<6 &hUu)K݂GAFDd27$;ʾo=haqJ?˺-JZ+8cm o;B9U H·mLZ(J!V=}ӥ)#1%[$F  ^{kx͗̊peR+qsvOqNlOmhDXſa>i.ljQlV=)x޽^@N)JCe>~ֳqNHf8eRp ۝J lx^F݂͒:书F9^uGïF :E"]1OKBC\ {D&ao1JaNdeSLNўK{j*Q|S?( r4B0;rA)zTV*":J~jF aCBm~k:֖mz1`_9r0l*CN k^>ldx:] 7G|93t9-dWeFrވpLFzYI GsZȤ%5M0vykB\W˥ bSI_V3ȶ`Qز .kk e:5n@HAwn_ w񗎻~mbHqQ Uɖa6ܫpm#`k}bȨᚅ=ǤsY fRΰٛͼnZ!f6WUyLźUِ'S+>vfGvx!>_7DrU9z.[694f<%x: V =@89[φ\xQɆD F@4z@6WLF~9@z*\G|XS BѨ4N!쫤"ڱMi=|e!>nHD Fs>A UVu·җ}2.F* =*Р>5ο<6'еռdn?/= 'H%RCB(s42Ljע9kɤnm^$!,G$O^emagcR93ٙSKBfoy#Zz4_$C>i~ EyϗEu(P@(תH䉳c)Lbj7_zEb{VU@5{6P|ajD@.5Yśwj7ddߣIzY1d3m)oPljm︯;wx8)AJ"vٺYJ1cőv2C1s9҇9;|ht.98A`ҴMAފ@$-R Ƨ C/Sb}!M.!JIs_6 q7'q?n4IG%ڡ3 OǸIi~}06/!q4.m = LGZy^ʹ/m*H7TK0/d`^D<ԗvi _7LcnؿXMF\ҋ vmYh0H#h&Z,kdU=1^ tIw*mD%Y/i9Pف.+F46?Qv0#m+^s<[6[Bk -J_q s?fI#=X&pʡwW:H>${AImwz܄X!+T沅̰B#+?hOm34vuht:/M6ʆeM9q.KTŬyiH_EV7p(sŕWq2UуHeSZ peL6)1eYV]NN P #xng۰S.Fb/4vjĆG.bO±߫C%5C_nȜ1l̚7?NObtJGOK5݄Tu`%boD?;H5aJx9/΋n˾ :ҙ]q(Ϫ(n'!c[4Ϝnm$!zX(ON ul3zȣ1p\HNO-Khc΢3V9gfIO䦴)NBg FT }TMϿ ArsuRЙj0#5JgkBP#U_oqț^ 7;lI?[|{#@.8iG m55]v"() rƔ\X !>xOM&1*zGy>L(&mG %\ k.r|0-C8at>zSִ܀;yG/)SzgtY /g,\QUollύ}~g):%ಞ0(s1Ar qJ$Ť u敜+6sR_a:dz}3oMȼW jq#`t|9"ŌEX:7̝ |EJI͓jl+ztxcrߜoza¨]4<~/j^PRu$8C oAcf(Pr=䄟ļZbNҽ;#7KS93rfs{x{NdM#9P̻c@{&ȶD^.ݖԌw£ K墒W6{0l]q椋+FX2@c:1϶Hˬ3Wa49cW"zt +gG7詂{UwcXk:F@x[5MsKGI{DƎ S>!6;]pڕڍI<WȺĶ-0 $/fIOni*MjfH=#Y; }*8 tt[ ]їk) Wi "o=M/'Yg B%wԒ6d L|I9nI1'QF&gml3P9RR4lbaJ S@usq)ѴW^=q#QznG:e]ߡϣ"*U*S12[p.Ş1~ŊA0#Ō3y+!e|:1W$OY^4׺k"drE7(%UNJڞX^̄^n$U#bcc XO8#5x4_G}/h'K5}=OJ j8YbYܷl]*ȴfGنZ%g`%P8LEb&Rp;F4?iQKͯӟ/&w#B}кtnˤ񮏫8EFjYu61cy< C0tGƐ\^GJ)A#sЁ7 YV747Bkț8jwx+=@+;ȮDŽ` 6sV:C+R#|v i+{Lzۻcޖ8b^`_Mn&ez®H} r.A±Fa6?B>yGڱ=r4go^q{/A&w3DE_FEot8˼g3~*3R% ʕ|㉀ zߛhB*2 }5D4duxO"2 LbPʢHb"qD7Zh1ad' U=\E=9YsK? Qw=R2שɼ4zmzΔ^kxwSA,ԇJ`npD&!|uCԸO{7%WfP?P5'-u{>R= ]F a8wՒSbNNymNNI؋\-(Ps=jGGf3)'xY2H˚8k, G<_Z'\M]S'tZSdGcxvphZ* W9R)_j6 v3g/T;VJO墇hp>8&xoA8h{ɘ=oA5X)d?vxCxv s-(. HHJo\KV*iPKM-Fkh"= '4c7$P+VӐ0mC^c@w0ؘ̰$"N)\JgcPf$GꈳKt-SIb:e[?6ߝ#n*ՀiWTL'D*)+-- P Qj\jWpC|Z}#Ԋ]u&`#3QQ&fs?N;~H -xDP2R˾ֹ" $E~yy^S~п>U- :{ywT O]|xv\\ZU%`LrCi3_W";t42{4f5"\ub&H Nki% ARG:g^C.B `DrCL(.R30W+ A}̦43)]J_R.JXBK7#J Q44t_7;Q$U>_ʖNgs}1Ac޴>acᙩȸ=e%0>IO(b .@O^H"֤־m*IICSwi#O:`}+X**]4;LKi"e]k endstream endobj 84 0 obj << /Type /FontDescriptor /Ascent 962 /CapHeight 687 /Descent -274 /Flags 96 /FontBBox [ -218 -275 1112 963 ] /FontName /MICMHF+ZapfHumanist601BT-DemiItalic /ItalicAngle -15 /StemV 0 /XHeight 0 /FontFile2 85 0 R >> endobj 85 0 obj << /Filter /FlateDecode /Length 8123 /Length1 12576 >> stream [LG/Iw5Y8i?&paOUіD 1ҙ/T~S2=vYLr>7CCWN*נň륳PCmeFl|>ƠϓHxM%-֔T2 RM ӵrweiմL .OY*YҺA#3R `o/ZXAB$|H(?7G_X[_<Yp d{:RFOƌ`u+?;~3_ RpTi%1Dp`Ň!M7ce&oL V!* x;PjV 7s?5Η /C?GI yt٬6 k9Vhaq\wlzUD\3/Hu*"./R/-*+6`ӫs}jZIw_7+1T:D =),Ch^".&y^cI?)xF鴽*a%? .ao,Ja։~o<*ڊdmŬ(28<Panڥ8 K,LPV6 *Hz{( ?%+\(RAj;l,vH}K$@P@ ol3bedLKQy$L<Ĥ%0[LԊSuW@=^I^?aT݁ D8 \mWNzs@* u@K6fmI7̎ |kJ%(<_/)_Ҥglxz>rbU'#^*ojB F|UډFprca^-Cp[5J)T3[ [GWC)ǡm>UCv?` Y|_FA"wEX1Gy#Xٙ{I#mƘr( †0 Ґ0~j Xe<k_ؔ?ǐvG`"=S xcLdc~uw܋p&tE. D"B}Ef?nU6Mi~~q jOIsE!{\Q^c{eFyRO81PYRZl[ 誣; Tׇ|v WP6Qb:; #]k^X{O(Y,ى };ՊAD +%V?m?,z&9"(%t8 vO0:剘*r&pIi08KDm@pǚ^LmF:,1SɆaLB%sI`sHbdjFa!X\!/@8!$$žokXU+>K ,&#Qԗk t~fbY=hk%<iH{kVD=@ψu^䩹4V4c֨ 3Mw8XxsGua.yh %;32 u%0*ҫaznϓ6S4;#6ϝ8DȦFcDBFKf)O;7Dgs-ypէJ@uBhEIjǾJg{B6Aݝ͊~C1Uϯ m2’@0 !BdPZFk&xR~W#ʼn,M3' iyaI[tÛ`RxȇnxwhP(P-M Φ ܵ*5"漊I 3p@KCr쑫'˲p`t{rOoE,42VBzyLCɗ I֭9a}|u#u: 2_`Lk8P^Xrzں%ZuL>O!^2u\^uZ St+B"J,׫9i53 2wa.`EE,0POĂ 1T)?ߖS'T+>%ڤST0NiڱW <LZɈ޶6˳95b g\\oqV.эCqC#b,4#TDjo)|]Q'涠)8'bgMD>d+ԬwP(Yd 55.U|] kJhAwUxO޶!'A;BK^MܐGaObAծ"M!IdU Zv2 ;Zja3ߏJDDEլۘIί.1z:ei࣍٦[boqZxБRqdɹBMt u`PqT<ұ~ ݹ@ փ\6$`l;90%}Y4ђA|[Lw;"\kBŒ2HM CVSF+\ݡQP|hJ$`Z#us"eJL8Ӂar|4oҕN-Zc.D3n3$Mt$oس>joJ _]p2F1B@`hJUu> 9r0qe,7;4._=ǘer+$YdrĂt1W6 K)Eᗥ|Xiθ7oHK<.;_ʙ2g^rMШv QJߞl bmpM#3W^&|R$Cl&G$ Q4))@&y x?j\k).u qޒ"jo|B ^]^ȚBc@Id@T+[YPWƬ@1wWt> (N]*3 ߃ӹjOH,|I؛CnI[B^=mY;kt144~]|7h"G!e &3y}eygL^HO٥!(C IL)Q۪~&wfSMQ:41M`\n -жϋu*^?կWbBhF=ǮP`ܡ jwsD 4$y\ʏkuʃ:ކoɒw1 h.pc=rj&^x=Tx*f.H)ՅqNi5}* }oWB垷xQ#׆޽O:vH0,[xSZGۜi6qٓ[@*oa1t_`e|ވ#)H /pa/(#I"TluD lTo!qO;Woh$3OM5kgi!Y_ (\T$ɛŀwHV$(dPhZ<\ x?|kfq9y#N'hwId[;Ģi`(3e6ָj-;eoؓVDܩYVjU+BSwYW] k;5MVדQ&zB)Dt 8+h6BRE4L߶|49]Ͼ&8={3d9zTE]]Olh z :BN~YVT <[q)Jb'ByoE(KŔSVmND8$HC8eh+Q*^%Ce<|LCU4rⶹ W )d]0* e۴ӼW@Q`f\px"g%q7^;=܁{=?Ioni\'p>f{hWSPҏmJ7\C&o5rT3 _w9nơs. ϶]ߕ?/ 9/K9Gj1>ӦlGgCVMnzM|>ʧKp2B+P=! r#r8?G4ŮMɀB{+H0` ZI<40.6aB^ qFЉZ)ANuGfr#JkcyLD>D*l nƧ#iF+Jh,tt=;%7^x//S0vrkYN';[?N4DLmnr\P&1<%6;܆٦;z#Xn`MGF)iUE'~x.##6EH]PR*ɠg 4"碙5cidVm8n8hϕn Yd'Dȵ/A+x>m(ܐ9tcvChZwvQ܁W"^|Xr$)@ tZ=iGͦ1>fk| Ma%PurgqUR>WniN֚3eÝ}悋%C@7H|>Q+a μ[!MFh |$By(kD$m[Rcp(@y)iOg\pl s*+@?RUZ+U:*X̿z]6L'^/(?t(ޣR_E:k)VAaPj[p\3έHu]Ka& 9 ^WFxjN7nL%9NX++ۋtu=Wn=fԍ!8En=j:Jɜ h(ƬC;Gv.좐ͮ8tՏ{z>usbk3L95*-N;o]ߙX Piɍ)L*|c.G /L+ ɦյ;#Snx4cDF =fbC->ݺU:CnaStWZ/'gSTz2*"G|Wc+_yS4@~,Yn: a-. |5 (!7wݏ[Fj #qHr&ZL$ {z3#(6nƃ{Qi&z|=˘I_3'y%ZCM UdS2I9~^%P5t`i +oOҭkVcaF+Q&?#[SζYrd( S=򪲈@}B=j&V+.HFc~ϊC-R%˖1|uɞ . ;^qRR7L(+pVUGpǍ6Rj¢h zJD P bǟ]T~LMOUĔlb2zϽ׹Q[Li* `OLM,CTQʎaZsw&X7>λ7S{󦯶a*UնI^W%qn.=) ?ٛgG)q-`,џL6-pn-> /DW 1000 /W [ 148 [ 790 ] ] >> endobj 87 0 obj << /Filter /FlateDecode /Length 220 >> stream ^V~!uSbfqJHr/)>CUm]w UB:Ev lm1Ip%lh3z_ǹ Ry(z`RF98'q>3QۯM\'ޔ6ہ6lͥ"Y`}JY_rb"JB%eԦp!b\c5c-Q}A endstream endobj 88 0 obj << /Type /Annot /Subtype /Link /Rect [ 141.78 612.80554 278.47897 625.21021 ] /Border [ 0 0 0 ] /H /I /A 89 0 R /StructParent 11 >> endobj 89 0 obj << /S /URI /URI (jJͯ]J^ Y>Usd$ldžysYˏ) >> endobj 90 0 obj << /Type /Annot /Subtype /Link /Rect [ 247.50038 625.16516 330.35486 637.56982 ] /Border [ 0 0 0 ] /H /I /A 91 0 R /StructParent 13 >> endobj 91 0 obj << /S /URI /URI ( =?M;;l) >> endobj 92 0 obj << /Type /Annot /Subtype /Link /Rect [ 335.87988 588.80518 410.89264 601.20984 ] /Border [ 0 0 0 ] /H /I /A 93 0 R /StructParent 14 >> endobj 93 0 obj << /S /URI /URI (tt 6$U*.\\Ik) >> endobj 94 0 obj << /Type /Annot /Subtype /Link /Rect [ 307.07996 654.28491 446.17291 666.66956 ] /Border [ 0 0 0 ] /H /I /A 95 0 R /StructParent 16 >> endobj 95 0 obj << /S /URI /URI (--fe @x\(j`-X qޠ1a]) >> endobj 96 0 obj << /Count 12 /First 97 0 R /Last 98 0 R >> endobj 97 0 obj << /Title (?7h՜r) /Dest [ 35 0 R /XYZ 0 686 null ] /Parent 96 0 R /Next 104 0 R /First 107 0 R /Last 108 0 R /Count 2 >> endobj 98 0 obj << /Title (ߪz\)nJ40ª) /Dest [ 60 0 R /XYZ 0 686 null ] /Parent 96 0 R /Prev 99 0 R >> endobj 99 0 obj << /Title (۬_Nl) /Dest [ 56 0 R /XYZ 0 686 null ] /Parent 96 0 R /Prev 100 0 R /Next 98 0 R >> endobj 100 0 obj << /Title (\r}/\)?) /Dest [ 53 0 R /XYZ 0 686 null ] /Parent 96 0 R /Prev 101 0 R /Next 99 0 R >> endobj 101 0 obj << /Title (Duݚ #s6?$) /Dest [ 50 0 R /XYZ 0 686 null ] /Parent 96 0 R /Prev 102 0 R /Next 100 0 R >> endobj 102 0 obj << /Title (}EP^keQ7Ϊ) /Dest [ 47 0 R /XYZ 0 686 null ] /Parent 96 0 R /Prev 103 0 R /Next 101 0 R >> endobj 103 0 obj << /Title (jHͅ6`c&) /Dest [ 44 0 R /XYZ 0 686 null ] /Parent 96 0 R /Prev 104 0 R /Next 102 0 R >> endobj 104 0 obj << /Title ($i>EZ砖c) /Dest [ 41 0 R /XYZ 0 686 null ] /Parent 96 0 R /Prev 97 0 R /Next 103 0 R /First 105 0 R /Last 106 0 R /Count 2 >> endobj 105 0 obj << /Title (ux]1x$v) /Dest [ 41 0 R /XYZ 0 597 null ] /Parent 104 0 R /Next 106 0 R >> endobj 106 0 obj << /Title (%t#8M$\\`jiL) /Dest [ 41 0 R /XYZ 0 467 null ] /Parent 104 0 R /Prev 105 0 R >> endobj 107 0 obj << /Title (ȃ9g-MZq) /Dest [ 35 0 R /XYZ 0 536 null ] /Parent 97 0 R /Next 108 0 R >> endobj 108 0 obj << /Title (P, WfJ[R) /Dest [ 35 0 R /XYZ 0 206 null ] /Parent 97 0 R /Prev 107 0 R >> endobj 109 0 obj << /TextBox /Div /Frame /Div /Footnote /Note /Endnote /Note /Shape /Figure /InlineShape /Figure /TOA /TOC /TOAI /TOCI /TOF /TOC /TOFI /TOCI /Superscript /Span /Subscript /Span /Strikeout /Span /Underline /Span /DropCap /Figure /Copyright /P /Standard /P /Inhaltsverzeichnis#20#C3#9Cberschrift /P /Verzeichnis#201 /P /Verzeichnis#202 /P /Textk#C3#B6rper /P /#C3#9Cberschrift#201 /P /Important#20Notice /P /#C3#9Cberschrift#202 /P /HTML#20Vorformatiert /P /Program#20Text /P /API#20Function /P /API#20Description /P /API#20Attribute /P /API#20Method /P /License#20Title /P /License#20Subtitle /P /License#20Text /P /License#20Section /P >> endobj 110 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 0 /P 364 0 R >> endobj 111 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 1 /P 364 0 R >> endobj 112 0 obj << /Copyright 113 0 R /Standard 146 0 R /Inhaltsverzeichnis#20#C3#9Cberschrift 153 0 R /Verzeichnis#201 155 0 R /Verzeichnis#202 159 0 R /Textk#C3#B6rper 193 0 R /#C3#9Cberschrift#201 196 0 R /Important#20Notice 199 0 R /#C3#9Cberschrift#202 201 0 R /HTML#20Vorformatiert 204 0 R /Program#20Text 207 0 R /API#20Function 223 0 R /API#20Description 225 0 R /API#20Attribute 230 0 R /API#20Method 235 0 R /License#20Title 318 0 R /License#20Subtitle 320 0 R /License#20Text 321 0 R /License#20Section 326 0 R >> endobj 113 0 obj << /O /Layout /WritingMode /LrTb /StartIndent 0 /EndIndent 0 /TextAlign /Start /SpaceBefore 0 /SpaceAfter 0 /TextIndent 0 >> endobj 114 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 2 /P 364 0 R >> endobj 115 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 3 /P 364 0 R >> endobj 116 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 4 /P 364 0 R >> endobj 117 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 5 /P 364 0 R >> endobj 118 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 6 /P 364 0 R >> endobj 119 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 7 /P 364 0 R >> endobj 120 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 8 /P 364 0 R >> endobj 121 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 9 /P 364 0 R >> endobj 122 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 10 /P 364 0 R >> endobj 123 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 11 /P 364 0 R >> endobj 124 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 12 /P 364 0 R >> endobj 125 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 13 /P 364 0 R >> endobj 126 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 14 /P 364 0 R >> endobj 127 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 15 /P 364 0 R >> endobj 128 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 16 /P 364 0 R >> endobj 129 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 17 /P 364 0 R >> endobj 130 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 18 /P 364 0 R >> endobj 131 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 19 /P 364 0 R >> endobj 132 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 20 /P 364 0 R >> endobj 133 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 21 /P 364 0 R >> endobj 134 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 22 /P 364 0 R >> endobj 135 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 23 /P 364 0 R >> endobj 136 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 24 /P 364 0 R >> endobj 137 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 25 /P 364 0 R >> endobj 138 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 26 /P 364 0 R >> endobj 139 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 27 /P 364 0 R >> endobj 140 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 28 /P 364 0 R >> endobj 141 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 29 /P 364 0 R >> endobj 142 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 30 /P 364 0 R >> endobj 143 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 31 /P 364 0 R >> endobj 144 0 obj << /S /Standard /C /Standard /Pg 1 0 R /K 32 /P 364 0 R >> endobj 145 0 obj << /S /Standard /C /Standard /Pg 1 0 R /K 33 /P 364 0 R >> endobj 146 0 obj << /O /Layout /WritingMode /LrTb /StartIndent 0 /EndIndent 0 /TextAlign /Start /SpaceBefore 0 /SpaceAfter 0 /TextIndent 0 >> endobj 147 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 34 /P 364 0 R >> endobj 148 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 35 /P 364 0 R >> endobj 149 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 36 /P 364 0 R >> endobj 150 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 37 /P 364 0 R >> endobj 151 0 obj << /S /Inhaltsverzeichnis#20#C3#9Cberschrift /C /Inhaltsverzeichnis#20#C3#9Cberschrift /Pg 4 0 R /K 0 /P 365 0 R >> endobj 152 0 obj << /S /TOCI /C /Verzeichnis#201 /Pg 4 0 R /K [ 154 0 R 2 156 0 R 4 ] /P 367 0 R >> endobj 153 0 obj << /O /Layout /WritingMode /LrTb /StartIndent 0 /EndIndent 0 /TextAlign /Start /SpaceBefore 11.89999 /SpaceAfter 70.85001 /TextIndent 0 >> endobj 154 0 obj << /S /Underline /P 152 0 R /A 417 0 R /Pg 4 0 R /K 1 >> endobj 155 0 obj << /O /Layout /WritingMode /LrTb /StartIndent 0 /EndIndent 0 /TextAlign /Start /SpaceBefore 14.2 /SpaceAfter 0 /TextIndent 0 >> endobj 156 0 obj << /S /Underline /P 152 0 R /A 418 0 R /Pg 4 0 R /K 3 >> endobj 157 0 obj << /S /TOCI /C /Verzeichnis#202 /Pg 4 0 R /K [ 158 0 R 6 160 0 R 8 ] /P 367 0 R >> endobj 158 0 obj << /S /Underline /P 157 0 R /A 419 0 R /Pg 4 0 R /K 5 >> endobj 159 0 obj << /O /Layout /WritingMode /LrTb /StartIndent 28.35001 /EndIndent 0 /TextAlign /Start /SpaceBefore 6 /SpaceAfter 0 /TextIndent 0 >> endobj 160 0 obj << /S /Underline /P 157 0 R /A 420 0 R /Pg 4 0 R /K 7 >> endobj 161 0 obj << /S /TOCI /C /Verzeichnis#202 /Pg 4 0 R /K [ 162 0 R 10 163 0 R 12 ] /P 367 0 R >> endobj 162 0 obj << /S /Underline /P 161 0 R /A 421 0 R /Pg 4 0 R /K 9 >> endobj 163 0 obj << /S /Underline /P 161 0 R /A 422 0 R /Pg 4 0 R /K 11 >> endobj 164 0 obj << /S /TOCI /C /Verzeichnis#201 /Pg 4 0 R /K [ 165 0 R 14 166 0 R 16 ] /P 367 0 R >> endobj 165 0 obj << /S /Underline /P 164 0 R /A 423 0 R /Pg 4 0 R /K 13 >> endobj 166 0 obj << /S /Underline /P 164 0 R /A 424 0 R /Pg 4 0 R /K 15 >> endobj 167 0 obj << /S /TOCI /C /Verzeichnis#202 /Pg 4 0 R /K [ 168 0 R 18 169 0 R 20 ] /P 367 0 R >> endobj 168 0 obj << /S /Underline /P 167 0 R /A 425 0 R /Pg 4 0 R /K 17 >> endobj 169 0 obj << /S /Underline /P 167 0 R /A 426 0 R /Pg 4 0 R /K 19 >> endobj 170 0 obj << /S /TOCI /C /Verzeichnis#202 /Pg 4 0 R /K [ 171 0 R 22 172 0 R 24 ] /P 367 0 R >> endobj 171 0 obj << /S /Underline /P 170 0 R /A 427 0 R /Pg 4 0 R /K 21 >> endobj 172 0 obj << /S /Underline /P 170 0 R /A 428 0 R /Pg 4 0 R /K 23 >> endobj 173 0 obj << /S /TOCI /C /Verzeichnis#201 /Pg 4 0 R /K [ 174 0 R 26 175 0 R 28 ] /P 367 0 R >> endobj 174 0 obj << /S /Underline /P 173 0 R /A 429 0 R /Pg 4 0 R /K 25 >> endobj 175 0 obj << /S /Underline /P 173 0 R /A 430 0 R /Pg 4 0 R /K 27 >> endobj 176 0 obj << /S /TOCI /C /Verzeichnis#201 /Pg 4 0 R /K [ 177 0 R 30 178 0 R 32 ] /P 367 0 R >> endobj 177 0 obj << /S /Underline /P 176 0 R /A 431 0 R /Pg 4 0 R /K 29 >> endobj 178 0 obj << /S /Underline /P 176 0 R /A 432 0 R /Pg 4 0 R /K 31 >> endobj 179 0 obj << /S /TOCI /C /Verzeichnis#201 /Pg 4 0 R /K [ 180 0 R 34 181 0 R 36 ] /P 367 0 R >> endobj 180 0 obj << /S /Underline /P 179 0 R /A 433 0 R /Pg 4 0 R /K 33 >> endobj 181 0 obj << /S /Underline /P 179 0 R /A 434 0 R /Pg 4 0 R /K 35 >> endobj 182 0 obj << /S /TOCI /C /Verzeichnis#201 /Pg 4 0 R /K [ 183 0 R 38 184 0 R 40 ] /P 367 0 R >> endobj 183 0 obj << /S /Underline /P 182 0 R /A 435 0 R /Pg 4 0 R /K 37 >> endobj 184 0 obj << /S /Underline /P 182 0 R /A 436 0 R /Pg 4 0 R /K 39 >> endobj 185 0 obj << /S /TOCI /C /Verzeichnis#201 /Pg 4 0 R /K [ 186 0 R 42 187 0 R 44 ] /P 367 0 R >> endobj 186 0 obj << /S /Underline /P 185 0 R /A 437 0 R /Pg 4 0 R /K 41 >> endobj 187 0 obj << /S /Underline /P 185 0 R /A 438 0 R /Pg 4 0 R /K 43 >> endobj 188 0 obj << /S /TOCI /C /Verzeichnis#201 /Pg 4 0 R /K [ 189 0 R 46 190 0 R 48 ] /P 367 0 R >> endobj 189 0 obj << /S /Underline /P 188 0 R /A 439 0 R /Pg 4 0 R /K 45 >> endobj 190 0 obj << /S /Underline /P 188 0 R /A 440 0 R /Pg 4 0 R /K 47 >> endobj 191 0 obj << /S /TOCI /C /Textk#C3#B6rper /Pg 4 0 R /K 49 /P 367 0 R >> endobj 192 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 4 0 R /K 50 /P 365 0 R >> endobj 193 0 obj << /O /Layout /WritingMode /LrTb /StartIndent 42.55 /EndIndent 0 /TextAlign /Justify /SpaceBefore 5.64999 /SpaceAfter 5.95 /TextIndent 0 >> endobj 194 0 obj << /S /LBody /C /#C3#9Cberschrift#201 /Pg 35 0 R /K 0 /P 369 0 R >> endobj 195 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 35 0 R /K 1 /P 366 0 R >> endobj 196 0 obj << /O /Layout /WritingMode /LrTb /StartIndent 42.55 /EndIndent 0 /TextAlign /Start /SpaceBefore 28.35001 /SpaceAfter 8.5 /TextIndent -42.54999 >> endobj 197 0 obj << /S /Important#20Notice /C /Important#20Notice /Pg 35 0 R /K [ 2 3 4 ] /P 366 0 R >> endobj 198 0 obj << /S /LBody /C /#C3#9Cberschrift#202 /Pg 35 0 R /K 5 /P 371 0 R >> endobj 199 0 obj << /O /Layout /WritingMode /LrTb /StartIndent 51.05 /EndIndent 0 /TextAlign /Justify /SpaceBefore 5.64999 /SpaceAfter 5.95 /TextIndent 0 >> endobj 200 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 35 0 R /K 6 /P 366 0 R >> endobj 201 0 obj << /O /Layout /WritingMode /LrTb /StartIndent 42.55 /EndIndent 0 /TextAlign /Start /SpaceBefore 34 /SpaceAfter 14.14999 /TextIndent -42.54999 >> endobj 202 0 obj << /S /HTML#20Vorformatiert /A [ 203 0 R ] /C /HTML#20Vorformatiert /Pg 35 0 R /K 7 /P 366 0 R >> endobj 203 0 obj << /O /Layout /StartIndent 36 >> endobj 204 0 obj << /O /Layout /WritingMode /LrTb /StartIndent 0 /EndIndent 0 /TextAlign /Start /SpaceBefore 0 /SpaceAfter 0 /TextIndent 0 >> endobj 205 0 obj << /S /Program#20Text /C /Program#20Text /Pg 35 0 R /K 8 /P 366 0 R >> endobj 206 0 obj << /S /Program#20Text /C /Program#20Text /Pg 35 0 R /K 9 /P 366 0 R >> endobj 207 0 obj << /O /Layout /WritingMode /LrTb /StartIndent 42.55 /EndIndent 0 /TextAlign /Start /SpaceBefore 0 /SpaceAfter 0 /TextIndent 0 >> endobj 208 0 obj << /S /Program#20Text /C /Program#20Text /Pg 35 0 R /K 10 /P 366 0 R >> endobj 209 0 obj << /S /Program#20Text /C /Program#20Text /Pg 35 0 R /K 11 /P 366 0 R >> endobj 210 0 obj << /S /Program#20Text /C /Program#20Text /Pg 35 0 R /K 12 /P 366 0 R >> endobj 211 0 obj << /S /HTML#20Vorformatiert /A [ 212 0 R ] /C /HTML#20Vorformatiert /Pg 35 0 R /K 13 /P 366 0 R >> endobj 212 0 obj << /O /Layout /StartIndent 36 >> endobj 213 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 35 0 R /K 14 /P 366 0 R >> endobj 214 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 35 0 R /K 15 /P 366 0 R >> endobj 215 0 obj << /S /LBody /C /#C3#9Cberschrift#202 /Pg 35 0 R /K 16 /P 373 0 R >> endobj 216 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 35 0 R /P 366 0 R /K [ 17 << /Type /MCR /Pg 38 0 R /MCID 0 >> ] >> endobj 217 0 obj << /S /LBody /C /#C3#9Cberschrift#201 /Pg 41 0 R /K 0 /P 375 0 R >> endobj 218 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 41 0 R /K 1 /P 366 0 R >> endobj 219 0 obj << /S /LBody /A [ 220 0 R ] /C /#C3#9Cberschrift#202 /Pg 41 0 R /K 2 /P 377 0 R >> endobj 220 0 obj << /O /Layout /StartIndent 36 >> endobj 221 0 obj << /S /API#20Function /C /API#20Function /Pg 41 0 R /K 3 /P 366 0 R >> endobj 222 0 obj << /S /API#20Description /C /API#20Description /Pg 41 0 R /K 4 /P 366 0 R >> endobj 223 0 obj << /O /Layout /WritingMode /LrTb /StartIndent 56.75 /EndIndent 0 /TextAlign /Start /SpaceBefore 5.64999 /SpaceAfter 5.95 /TextIndent -14.19998 >> endobj 224 0 obj << /S /LBody /A [ 226 0 R ] /C /#C3#9Cberschrift#202 /Pg 41 0 R /K 5 /P 379 0 R >> endobj 225 0 obj << /O /Layout /WritingMode /LrTb /StartIndent 56.7 /EndIndent 0 /TextAlign /Start /SpaceBefore 0 /SpaceAfter 5.95 /TextIndent 0 >> endobj 226 0 obj << /O /Layout /StartIndent 36 >> endobj 227 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 41 0 R /K 6 /P 366 0 R >> endobj 228 0 obj << /S /API#20Attribute /C /API#20Attribute /Pg 41 0 R /K 7 /P 366 0 R >> endobj 229 0 obj << /S /API#20Description /C /API#20Description /Pg 41 0 R /K 8 /P 366 0 R >> endobj 230 0 obj << /O /Layout /WritingMode /LrTb /StartIndent 56.75 /EndIndent 0 /TextAlign /Start /SpaceBefore 5.64999 /SpaceAfter 5.95 /TextIndent -14.19998 >> endobj 231 0 obj << /S /API#20Attribute /C /API#20Attribute /Pg 41 0 R /K 9 /P 366 0 R >> endobj 232 0 obj << /S /API#20Description /C /API#20Description /Pg 41 0 R /K 10 /P 366 0 R >> endobj 233 0 obj << /S /API#20Method /C /API#20Method /Pg 41 0 R /K 11 /P 366 0 R >> endobj 234 0 obj << /S /API#20Description /C /API#20Description /Pg 41 0 R /K 12 /P 366 0 R >> endobj 235 0 obj << /O /Layout /WritingMode /LrTb /StartIndent 56.75 /EndIndent 0 /TextAlign /Start /SpaceBefore 5.64999 /SpaceAfter 5.95 /TextIndent -14.19998 >> endobj 236 0 obj << /S /API#20Method /C /API#20Method /Pg 41 0 R /K 13 /P 366 0 R >> endobj 237 0 obj << /S /API#20Description /C /API#20Description /Pg 41 0 R /K 14 /P 366 0 R >> endobj 238 0 obj << /S /API#20Method /C /API#20Method /Pg 41 0 R /K 15 /P 366 0 R >> endobj 239 0 obj << /S /API#20Description /C /API#20Description /Pg 41 0 R /K 16 /P 366 0 R >> endobj 240 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 41 0 R /K 17 /P 366 0 R >> endobj 241 0 obj << /S /LBody /C /#C3#9Cberschrift#201 /Pg 44 0 R /K 0 /P 381 0 R >> endobj 242 0 obj << /S /API#20Attribute /C /API#20Attribute /Pg 44 0 R /K 1 /P 366 0 R >> endobj 243 0 obj << /S /API#20Description /C /API#20Description /Pg 44 0 R /K 2 /P 366 0 R >> endobj 244 0 obj << /S /API#20Attribute /C /API#20Attribute /Pg 44 0 R /K 3 /P 366 0 R >> endobj 245 0 obj << /S /API#20Description /C /API#20Description /Pg 44 0 R /K 4 /P 366 0 R >> endobj 246 0 obj << /S /LBody /C /#C3#9Cberschrift#201 /Pg 47 0 R /K 0 /P 383 0 R >> endobj 247 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 47 0 R /K 1 /P 366 0 R >> endobj 248 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 47 0 R /K 2 /P 366 0 R >> endobj 249 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 47 0 R /K 3 /P 366 0 R >> endobj 250 0 obj << /S /HTML#20Vorformatiert /A [ 251 0 R ] /C /HTML#20Vorformatiert /Pg 47 0 R /K 4 /P 366 0 R >> endobj 251 0 obj << /O /Layout /StartIndent 36 >> endobj 252 0 obj << /S /Program#20Text /C /Program#20Text /Pg 47 0 R /K 5 /P 366 0 R >> endobj 253 0 obj << /S /Program#20Text /C /Program#20Text /Pg 47 0 R /K 6 /P 366 0 R >> endobj 254 0 obj << /S /Program#20Text /C /Program#20Text /Pg 47 0 R /K 7 /P 366 0 R >> endobj 255 0 obj << /S /Program#20Text /C /Program#20Text /Pg 47 0 R /K 8 /P 366 0 R >> endobj 256 0 obj << /S /Program#20Text /C /Program#20Text /Pg 47 0 R /K 9 /P 366 0 R >> endobj 257 0 obj << /S /Program#20Text /C /Program#20Text /Pg 47 0 R /K 10 /P 366 0 R >> endobj 258 0 obj << /S /Program#20Text /C /Program#20Text /Pg 47 0 R /K 11 /P 366 0 R >> endobj 259 0 obj << /S /Program#20Text /C /Program#20Text /Pg 47 0 R /K 12 /P 366 0 R >> endobj 260 0 obj << /S /Program#20Text /C /Program#20Text /Pg 47 0 R /K 13 /P 366 0 R >> endobj 261 0 obj << /S /Program#20Text /C /Program#20Text /Pg 47 0 R /K 14 /P 366 0 R >> endobj 262 0 obj << /S /Program#20Text /C /Program#20Text /Pg 47 0 R /K 15 /P 366 0 R >> endobj 263 0 obj << /S /Program#20Text /C /Program#20Text /Pg 47 0 R /K 16 /P 366 0 R >> endobj 264 0 obj << /S /Program#20Text /C /Program#20Text /Pg 47 0 R /K 17 /P 366 0 R >> endobj 265 0 obj << /S /Program#20Text /C /Program#20Text /Pg 47 0 R /K 18 /P 366 0 R >> endobj 266 0 obj << /S /Program#20Text /C /Program#20Text /Pg 47 0 R /K 19 /P 366 0 R >> endobj 267 0 obj << /S /Program#20Text /C /Program#20Text /Pg 47 0 R /K 20 /P 366 0 R >> endobj 268 0 obj << /S /Program#20Text /C /Program#20Text /Pg 47 0 R /K 21 /P 366 0 R >> endobj 269 0 obj << /S /Program#20Text /C /Program#20Text /Pg 47 0 R /K 22 /P 366 0 R >> endobj 270 0 obj << /S /Program#20Text /C /Program#20Text /Pg 47 0 R /K 23 /P 366 0 R >> endobj 271 0 obj << /S /Program#20Text /C /Program#20Text /Pg 47 0 R /K 24 /P 366 0 R >> endobj 272 0 obj << /S /HTML#20Vorformatiert /A [ 273 0 R ] /C /HTML#20Vorformatiert /Pg 47 0 R /K 25 /P 366 0 R >> endobj 273 0 obj << /O /Layout /StartIndent 36 >> endobj 274 0 obj << /S /LBody /C /#C3#9Cberschrift#201 /Pg 50 0 R /K 0 /P 385 0 R >> endobj 275 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 50 0 R /K 1 /P 366 0 R >> endobj 276 0 obj << /S /HTML#20Vorformatiert /A [ 277 0 R ] /C /HTML#20Vorformatiert /Pg 50 0 R /K 2 /P 366 0 R >> endobj 277 0 obj << /O /Layout /StartIndent 36 >> endobj 278 0 obj << /S /Program#20Text /C /Program#20Text /Pg 50 0 R /K 3 /P 366 0 R >> endobj 279 0 obj << /S /Program#20Text /C /Program#20Text /Pg 50 0 R /K 4 /P 366 0 R >> endobj 280 0 obj << /S /Program#20Text /C /Program#20Text /Pg 50 0 R /K 5 /P 366 0 R >> endobj 281 0 obj << /S /Program#20Text /C /Program#20Text /Pg 50 0 R /K 6 /P 366 0 R >> endobj 282 0 obj << /S /Program#20Text /C /Program#20Text /Pg 50 0 R /K 7 /P 366 0 R >> endobj 283 0 obj << /S /Program#20Text /C /Program#20Text /Pg 50 0 R /K 8 /P 366 0 R >> endobj 284 0 obj << /S /Program#20Text /C /Program#20Text /Pg 50 0 R /K 9 /P 366 0 R >> endobj 285 0 obj << /S /Program#20Text /C /Program#20Text /Pg 50 0 R /K 10 /P 366 0 R >> endobj 286 0 obj << /S /Program#20Text /C /Program#20Text /Pg 50 0 R /K 11 /P 366 0 R >> endobj 287 0 obj << /S /Program#20Text /C /Program#20Text /Pg 50 0 R /K 12 /P 366 0 R >> endobj 288 0 obj << /S /HTML#20Vorformatiert /A [ 289 0 R ] /C /HTML#20Vorformatiert /Pg 50 0 R /K 13 /P 366 0 R >> endobj 289 0 obj << /O /Layout /StartIndent 36 >> endobj 290 0 obj << /S /LBody /C /#C3#9Cberschrift#201 /Pg 53 0 R /K 0 /P 387 0 R >> endobj 291 0 obj << /S /HTML#20Vorformatiert /A [ 292 0 R ] /C /HTML#20Vorformatiert /Pg 53 0 R /K 1 /P 366 0 R >> endobj 292 0 obj << /O /Layout /StartIndent 36 >> endobj 293 0 obj << /S /Program#20Text /C /Program#20Text /Pg 53 0 R /K 2 /P 366 0 R >> endobj 294 0 obj << /S /Program#20Text /C /Program#20Text /Pg 53 0 R /K 3 /P 366 0 R >> endobj 295 0 obj << /S /Program#20Text /C /Program#20Text /Pg 53 0 R /K 4 /P 366 0 R >> endobj 296 0 obj << /S /Program#20Text /C /Program#20Text /Pg 53 0 R /K 5 /P 366 0 R >> endobj 297 0 obj << /S /Program#20Text /C /Program#20Text /Pg 53 0 R /K 6 /P 366 0 R >> endobj 298 0 obj << /S /Program#20Text /C /Program#20Text /Pg 53 0 R /K 7 /P 366 0 R >> endobj 299 0 obj << /S /HTML#20Vorformatiert /A [ 300 0 R ] /C /HTML#20Vorformatiert /Pg 53 0 R /K 8 /P 366 0 R >> endobj 300 0 obj << /O /Layout /StartIndent 36 >> endobj 301 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 53 0 R /K 9 /P 366 0 R >> endobj 302 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 53 0 R /K 10 /P 366 0 R >> endobj 303 0 obj << /S /LBody /C /#C3#9Cberschrift#201 /Pg 56 0 R /K 0 /P 389 0 R >> endobj 304 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 56 0 R /K [ 1 305 0 R 3 ] /P 366 0 R >> endobj 305 0 obj << /S /Link /P 304 0 R /K [ 306 0 R << /Type /OBJR /Pg 56 0 R /Obj 88 0 R >> ] >> endobj 306 0 obj << /S /Underline /P 305 0 R /A 449 0 R /Pg 56 0 R /K 2 >> endobj 307 0 obj << /S /LBody /C /#C3#9Cberschrift#201 /Pg 60 0 R /K 0 /P 391 0 R >> endobj 308 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 60 0 R /K [ 1 309 0 R 3 ] /P 366 0 R >> endobj 309 0 obj << /S /Link /P 308 0 R /K [ 310 0 R << /Type /OBJR /Pg 60 0 R /Obj 90 0 R >> ] >> endobj 310 0 obj << /S /Underline /P 309 0 R /A 451 0 R /Pg 60 0 R /K 2 >> endobj 311 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 60 0 R /K [ 4 312 0 R 6 ] /P 366 0 R >> endobj 312 0 obj << /S /Link /P 311 0 R /K [ 313 0 R << /Type /OBJR /Pg 60 0 R /Obj 92 0 R >> ] >> endobj 313 0 obj << /S /Underline /P 312 0 R /A 452 0 R /Pg 60 0 R /K 5 >> endobj 314 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 60 0 R /K 7 /P 366 0 R >> endobj 315 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 60 0 R /K 8 /P 366 0 R >> endobj 316 0 obj << /S /License#20Title /C /License#20Title /Pg 64 0 R /K 0 /P 366 0 R >> endobj 317 0 obj << /S /License#20Subtitle /C /License#20Subtitle /Pg 64 0 R /K 1 /P 366 0 R >> endobj 318 0 obj << /O /Layout /WritingMode /LrTb /StartIndent 0 /EndIndent 0 /TextAlign /Center /SpaceBefore 0 /SpaceAfter 6 /TextIndent 0 >> endobj 319 0 obj << /S /License#20Text /C /License#20Text /Pg 64 0 R /K [ 2 322 0 R 4 ] /P 366 0 R >> endobj 320 0 obj << /O /Layout /WritingMode /LrTb /StartIndent 0 /EndIndent 0 /TextAlign /Center /SpaceBefore 0 /SpaceAfter 6 /TextIndent 0 >> endobj 321 0 obj << /O /Layout /WritingMode /LrTb /StartIndent 42.55 /EndIndent 0 /TextAlign /Start /SpaceBefore 6 /SpaceAfter 6 /TextIndent 0 >> endobj 322 0 obj << /S /Link /P 319 0 R /K [ 323 0 R << /Type /OBJR /Pg 64 0 R /Obj 94 0 R >> ] >> endobj 323 0 obj << /S /Underline /P 322 0 R /A 454 0 R /Pg 64 0 R /K 3 >> endobj 324 0 obj << /S /LBody /C /License#20Section /Pg 64 0 R /K 5 /P 393 0 R >> endobj 325 0 obj << /S /License#20Text /C /License#20Text /Pg 64 0 R /K 6 /P 366 0 R >> endobj 326 0 obj << /O /Layout /WritingMode /LrTb /StartIndent 85.10001 /EndIndent 0 /TextAlign /Start /SpaceBefore 12 /SpaceAfter 6 /TextIndent -85.09999 >> endobj 327 0 obj << /S /LBody /C /License#20Section /Pg 64 0 R /K 7 /P 395 0 R >> endobj 328 0 obj << /S /License#20Text /C /License#20Text /Pg 64 0 R /K 8 /P 366 0 R >> endobj 329 0 obj << /S /LBody /C /License#20Section /Pg 64 0 R /K 9 /P 397 0 R >> endobj 330 0 obj << /S /License#20Text /C /License#20Text /Pg 64 0 R /K 10 /P 366 0 R >> endobj 331 0 obj << /S /LBody /C /License#20Section /Pg 64 0 R /K 11 /P 399 0 R >> endobj 332 0 obj << /S /License#20Text /C /License#20Text /Pg 64 0 R /P 366 0 R /K [ 12 << /Type /MCR /Pg 68 0 R /MCID 0 >> ] >> endobj 333 0 obj << /S /License#20Text /C /License#20Text /Pg 68 0 R /K 1 /P 366 0 R >> endobj 334 0 obj << /S /LBody /C /License#20Section /Pg 68 0 R /K 2 /P 401 0 R >> endobj 335 0 obj << /S /License#20Text /C /License#20Text /Pg 68 0 R /K 3 /P 366 0 R >> endobj 336 0 obj << /S /LBody /C /License#20Section /Pg 68 0 R /K 4 /P 403 0 R >> endobj 337 0 obj << /S /License#20Text /C /License#20Text /Pg 68 0 R /K 5 /P 366 0 R >> endobj 338 0 obj << /S /LBody /C /License#20Section /Pg 68 0 R /K 6 /P 405 0 R >> endobj 339 0 obj << /S /License#20Text /C /License#20Text /Pg 68 0 R /K 7 /P 366 0 R >> endobj 340 0 obj << /S /License#20Text /C /License#20Text /Pg 68 0 R /K 8 /P 366 0 R >> endobj 341 0 obj << /S /License#20Text /C /License#20Text /Pg 68 0 R /K 9 /P 366 0 R >> endobj 342 0 obj << /S /License#20Text /C /License#20Text /Pg 68 0 R /K 10 /P 366 0 R >> endobj 343 0 obj << /S /License#20Text /C /License#20Text /Pg 68 0 R /K 11 /P 366 0 R >> endobj 344 0 obj << /S /License#20Text /C /License#20Text /Pg 71 0 R /K 0 /P 366 0 R >> endobj 345 0 obj << /S /LBody /C /License#20Section /Pg 71 0 R /K 1 /P 407 0 R >> endobj 346 0 obj << /S /License#20Text /C /License#20Text /Pg 71 0 R /K 2 /P 366 0 R >> endobj 347 0 obj << /S /License#20Text /C /License#20Text /Pg 71 0 R /K 3 /P 366 0 R >> endobj 348 0 obj << /S /License#20Text /A [ 349 0 R ] /C /License#20Text /Pg 71 0 R /K 4 /P 366 0 R >> endobj 349 0 obj << /O /Layout /StartIndent 81 >> endobj 350 0 obj << /S /License#20Text /A [ 351 0 R ] /C /License#20Text /Pg 71 0 R /K 5 /P 366 0 R >> endobj 351 0 obj << /O /Layout /StartIndent 81 >> endobj 352 0 obj << /S /License#20Text /A [ 353 0 R ] /C /License#20Text /Pg 71 0 R /K 6 /P 366 0 R >> endobj 353 0 obj << /O /Layout /StartIndent 81 >> endobj 354 0 obj << /S /License#20Text /A [ 355 0 R ] /C /License#20Text /Pg 71 0 R /K 7 /P 366 0 R >> endobj 355 0 obj << /O /Layout /StartIndent 81 >> endobj 356 0 obj << /S /License#20Text /C /License#20Text /Pg 71 0 R /K 8 /P 366 0 R >> endobj 357 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 71 0 R /K 9 /P 366 0 R >> endobj 358 0 obj << /S /Standard /A [ 359 0 R ] /C /Standard /Pg 503 0 R /K [ 23 24 25 26 27 ] /P 411 0 R >> endobj 359 0 obj << /O /Layout /TextAlign /End /StartIndent -30.55 /EndIndent -24.2 >> endobj 360 0 obj << /S /Standard /A [ 361 0 R ] /C /Standard /Pg 503 0 R /K [ 9 10 11 12 13 14 15 16 17 18 19 20 21 ] /P 410 0 R >> endobj 361 0 obj << /O /Layout /TextAlign /Center /StartIndent 54.45 /EndIndent 62.8 >> endobj 362 0 obj << /S /Standard /A [ 363 0 R ] /C /Standard /Pg 503 0 R /K [ 1 2 3 4 5 6 7 8 ] /P 409 0 R >> endobj 363 0 obj << /O /Layout /StartIndent -25.55 /TextAlign /End /EndIndent -46.2 >> endobj 364 0 obj << /S /Sect /P 502 0 R /K [ 411 0 R 410 0 R 409 0 R 408 0 R 110 0 R 111 0 R 114 0 R 115 0 R 116 0 R 117 0 R 118 0 R 119 0 R 120 0 R 121 0 R 122 0 R 123 0 R 124 0 R 125 0 R 126 0 R 127 0 R 128 0 R 129 0 R 130 0 R 131 0 R 132 0 R 133 0 R 134 0 R 135 0 R 136 0 R 137 0 R 138 0 R 139 0 R 140 0 R 141 0 R 142 0 R 143 0 R 144 0 R 145 0 R 147 0 R 148 0 R 149 0 R 150 0 R ] >> endobj 365 0 obj << /S /Sect /P 502 0 R /K [ 151 0 R 367 0 R 192 0 R ] >> endobj 366 0 obj << /S /Sect /P 502 0 R /K [ 368 0 R 195 0 R 197 0 R 370 0 R 200 0 R 202 0 R 205 0 R 206 0 R 208 0 R 209 0 R 210 0 R 211 0 R 213 0 R 214 0 R 372 0 R 216 0 R 374 0 R 218 0 R 376 0 R 221 0 R 222 0 R 378 0 R 227 0 R 228 0 R 229 0 R 231 0 R 232 0 R 233 0 R 234 0 R 236 0 R 237 0 R 238 0 R 239 0 R 240 0 R 380 0 R 242 0 R 243 0 R 244 0 R 245 0 R 382 0 R 247 0 R 248 0 R 249 0 R 250 0 R 252 0 R 253 0 R 254 0 R 255 0 R 256 0 R 257 0 R 258 0 R 259 0 R 260 0 R 261 0 R 262 0 R 263 0 R 264 0 R 265 0 R 266 0 R 267 0 R 268 0 R 269 0 R 270 0 R 271 0 R 272 0 R 384 0 R 275 0 R 276 0 R 278 0 R 279 0 R 280 0 R 281 0 R 282 0 R 283 0 R 284 0 R 285 0 R 286 0 R 287 0 R 288 0 R 386 0 R 291 0 R 293 0 R 294 0 R 295 0 R 296 0 R 297 0 R 298 0 R 299 0 R 301 0 R 302 0 R 388 0 R 304 0 R 390 0 R 308 0 R 311 0 R 314 0 R 315 0 R 316 0 R 317 0 R 319 0 R 392 0 R 325 0 R 394 0 R 328 0 R 396 0 R 330 0 R 398 0 R 332 0 R 333 0 R 400 0 R 335 0 R 402 0 R 337 0 R 404 0 R 339 0 R 340 0 R 341 0 R 342 0 R 343 0 R 344 0 R 406 0 R 346 0 R 347 0 R 348 0 R 350 0 R 352 0 R 354 0 R 356 0 R 357 0 R ] >> endobj 367 0 obj << /S /TOC /P 365 0 R /K [ 152 0 R 157 0 R 161 0 R 164 0 R 167 0 R 170 0 R 173 0 R 176 0 R 179 0 R 182 0 R 185 0 R 188 0 R 191 0 R ] >> endobj 368 0 obj << /S /L /K 369 0 R /P 366 0 R >> endobj 369 0 obj << /S /LI /P 368 0 R /K 194 0 R >> endobj 370 0 obj << /S /L /K 371 0 R /P 366 0 R >> endobj 371 0 obj << /S /LI /P 370 0 R /K 198 0 R >> endobj 372 0 obj << /S /L /K 373 0 R /P 366 0 R >> endobj 373 0 obj << /S /LI /P 372 0 R /K 215 0 R >> endobj 374 0 obj << /S /L /K 375 0 R /P 366 0 R >> endobj 375 0 obj << /S /LI /P 374 0 R /K 217 0 R >> endobj 376 0 obj << /S /L /K 377 0 R /P 366 0 R >> endobj 377 0 obj << /S /LI /P 376 0 R /K 219 0 R >> endobj 378 0 obj << /S /L /K 379 0 R /P 366 0 R >> endobj 379 0 obj << /S /LI /P 378 0 R /K 224 0 R >> endobj 380 0 obj << /S /L /K 381 0 R /P 366 0 R >> endobj 381 0 obj << /S /LI /P 380 0 R /K 241 0 R >> endobj 382 0 obj << /S /L /K 383 0 R /P 366 0 R >> endobj 383 0 obj << /S /LI /P 382 0 R /K 246 0 R >> endobj 384 0 obj << /S /L /K 385 0 R /P 366 0 R >> endobj 385 0 obj << /S /LI /P 384 0 R /K 274 0 R >> endobj 386 0 obj << /S /L /K 387 0 R /P 366 0 R >> endobj 387 0 obj << /S /LI /P 386 0 R /K 290 0 R >> endobj 388 0 obj << /S /L /K 389 0 R /P 366 0 R >> endobj 389 0 obj << /S /LI /P 388 0 R /K 303 0 R >> endobj 390 0 obj << /S /L /K 391 0 R /P 366 0 R >> endobj 391 0 obj << /S /LI /P 390 0 R /K 307 0 R >> endobj 392 0 obj << /S /L /K 393 0 R /P 366 0 R >> endobj 393 0 obj << /S /LI /P 392 0 R /K 324 0 R >> endobj 394 0 obj << /S /L /K 395 0 R /P 366 0 R >> endobj 395 0 obj << /S /LI /P 394 0 R /K 327 0 R >> endobj 396 0 obj << /S /L /K 397 0 R /P 366 0 R >> endobj 397 0 obj << /S /LI /P 396 0 R /K 329 0 R >> endobj 398 0 obj << /S /L /K 399 0 R /P 366 0 R >> endobj 399 0 obj << /S /LI /P 398 0 R /K 331 0 R >> endobj 400 0 obj << /S /L /K 401 0 R /P 366 0 R >> endobj 401 0 obj << /S /LI /P 400 0 R /K 334 0 R >> endobj 402 0 obj << /S /L /K 403 0 R /P 366 0 R >> endobj 403 0 obj << /S /LI /P 402 0 R /K 336 0 R >> endobj 404 0 obj << /S /L /K 405 0 R /P 366 0 R >> endobj 405 0 obj << /S /LI /P 404 0 R /K 338 0 R >> endobj 406 0 obj << /S /L /K 407 0 R /P 366 0 R >> endobj 407 0 obj << /S /LI /P 406 0 R /K 345 0 R >> endobj 408 0 obj << /S /Shape /Alt () /Pg 503 0 R /K [ 0 22 ] /P 364 0 R /A 414 0 R >> endobj 409 0 obj << /S /TextBox /Alt (-3\)}tF D#) /P 364 0 R /K 362 0 R >> endobj 410 0 obj << /S /TextBox /Alt (I5-o\(q@t) /P 364 0 R /K 360 0 R >> endobj 411 0 obj << /S /TextBox /Alt (0$sHӠc56*S0$\)grH\\́) /P 364 0 R /K 358 0 R >> endobj 412 0 obj << /Nums [ 0 413 0 R 1 415 0 R 2 416 0 R 3 441 0 R 4 442 0 R 5 443 0 R 6 444 0 R 7 445 0 R 8 446 0 R 9 447 0 R 10 448 0 R 11 305 0 R 12 450 0 R 13 309 0 R 14 312 0 R 15 453 0 R 16 322 0 R 17 455 0 R 18 456 0 R ] >> endobj 413 0 obj [ 408 0 R 362 0 R 362 0 R 362 0 R 362 0 R 362 0 R 362 0 R 362 0 R 362 0 R 360 0 R 360 0 R 360 0 R 360 0 R 360 0 R 360 0 R 360 0 R 360 0 R 360 0 R 360 0 R 360 0 R 360 0 R 360 0 R 408 0 R 358 0 R 358 0 R 358 0 R 358 0 R 358 0 R ] endobj 414 0 obj << /O /Layout /BBox [ 34 34 566 809 ] /Placement /Block /StartIndent -93.55 /EndIndent -70.2 >> endobj 415 0 obj [ 110 0 R 111 0 R 114 0 R 115 0 R 116 0 R 117 0 R 118 0 R 119 0 R 120 0 R 121 0 R 122 0 R 123 0 R 124 0 R 125 0 R 126 0 R 127 0 R 128 0 R 129 0 R 130 0 R 131 0 R 132 0 R 133 0 R 134 0 R 135 0 R 136 0 R 137 0 R 138 0 R 139 0 R 140 0 R 141 0 R 142 0 R 143 0 R 144 0 R 145 0 R 147 0 R 148 0 R 149 0 R 150 0 R ] endobj 416 0 obj [ 151 0 R 154 0 R 152 0 R 156 0 R 152 0 R 158 0 R 157 0 R 160 0 R 157 0 R 162 0 R 161 0 R 163 0 R 161 0 R 165 0 R 164 0 R 166 0 R 164 0 R 168 0 R 167 0 R 169 0 R 167 0 R 171 0 R 170 0 R 172 0 R 170 0 R 174 0 R 173 0 R 175 0 R 173 0 R 177 0 R 176 0 R 178 0 R 176 0 R 180 0 R 179 0 R 181 0 R 179 0 R 183 0 R 182 0 R 184 0 R 182 0 R 186 0 R 185 0 R 187 0 R 185 0 R 189 0 R 188 0 R 190 0 R 188 0 R 191 0 R 192 0 R ] endobj 417 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 418 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 419 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 420 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 421 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 422 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 423 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 424 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 425 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 426 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 427 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 428 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 429 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 430 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 431 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 432 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 433 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 434 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 435 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 436 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 437 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 438 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 439 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 440 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 441 0 obj [ 194 0 R 195 0 R 197 0 R 197 0 R 197 0 R 198 0 R 200 0 R 202 0 R 205 0 R 206 0 R 208 0 R 209 0 R 210 0 R 211 0 R 213 0 R 214 0 R 215 0 R 216 0 R ] endobj 442 0 obj [ 216 0 R ] endobj 443 0 obj [ 217 0 R 218 0 R 219 0 R 221 0 R 222 0 R 224 0 R 227 0 R 228 0 R 229 0 R 231 0 R 232 0 R 233 0 R 234 0 R 236 0 R 237 0 R 238 0 R 239 0 R 240 0 R ] endobj 444 0 obj [ 241 0 R 242 0 R 243 0 R 244 0 R 245 0 R ] endobj 445 0 obj [ 246 0 R 247 0 R 248 0 R 249 0 R 250 0 R 252 0 R 253 0 R 254 0 R 255 0 R 256 0 R 257 0 R 258 0 R 259 0 R 260 0 R 261 0 R 262 0 R 263 0 R 264 0 R 265 0 R 266 0 R 267 0 R 268 0 R 269 0 R 270 0 R 271 0 R 272 0 R ] endobj 446 0 obj [ 274 0 R 275 0 R 276 0 R 278 0 R 279 0 R 280 0 R 281 0 R 282 0 R 283 0 R 284 0 R 285 0 R 286 0 R 287 0 R 288 0 R ] endobj 447 0 obj [ 290 0 R 291 0 R 293 0 R 294 0 R 295 0 R 296 0 R 297 0 R 298 0 R 299 0 R 301 0 R 302 0 R ] endobj 448 0 obj [ 303 0 R 304 0 R 306 0 R 304 0 R ] endobj 449 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 450 0 obj [ 307 0 R 308 0 R 310 0 R 308 0 R 311 0 R 313 0 R 311 0 R 314 0 R 315 0 R ] endobj 451 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 452 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 453 0 obj [ 316 0 R 317 0 R 319 0 R 323 0 R 319 0 R 324 0 R 325 0 R 327 0 R 328 0 R 329 0 R 330 0 R 331 0 R 332 0 R ] endobj 454 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 455 0 obj [ 332 0 R 333 0 R 334 0 R 335 0 R 336 0 R 337 0 R 338 0 R 339 0 R 340 0 R 341 0 R 342 0 R 343 0 R ] endobj 456 0 obj [ 344 0 R 345 0 R 346 0 R 347 0 R 348 0 R 350 0 R 352 0 R 354 0 R 356 0 R 357 0 R ] endobj 457 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 74 /Height 105 /ColorSpace 491 0 R /BitsPerComponent 8 /Length 458 0 R >> stream jk@בzs7ŒGw-CV 8O6ة'[J_V0f8CM+EqP:8Yϣix 1oDSk}ؿU@Na;jk_wSo9_j`@`Qioaf{UKzsnթpTIveO>9ßl֙%ċ#,n{hюGIO3Qoo n)nRB^n0ڐv {{uif됷*]-&=\Sq^ Y-#׏Hȓ^\ځҀ)Ue̟lueIʖb0Ё{w.Tû[}iGR2gE\ h8Uخ2 $)'Ը)R7>K;H9 ;n\~b)By84CB}lg$öbժ endstream endobj 458 0 obj 496 endobj 459 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 74 /Height 105 /ColorSpace 491 0 R /BitsPerComponent 8 /Length 460 0 R >> stream %sy[ݰbܳ-OFy0,q. v;lƕ)5l%Zͨj(Ɏ M<4#q`ߓC@ 4UfRKY*wss(FynƓqϧ~^:2㧑lVT `=H+GYѥXg "˺[+)3-48<GMS*> stream [}|u?,)"M^!v)d* zK:}6x0YN˽K_ >:Em\XN#/IEK7v ]¦g)\Cޣnjh=mEpIد!bWU銒gKZ+oḊc{Q) 5Y;1"&͵2> stream l#?1*.V O]Atc endstream endobj 464 0 obj 41 endobj 465 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 74 /Height 105 /ColorSpace 491 0 R /BitsPerComponent 8 /Length 466 0 R >> stream 5y0=ΗFqmi+|rm# >n,&)Ez!goEY-dP䭄7ܢ,>+DQսUqvSyPckH#PT@Wn 0&<{l@t BbFE<¾J +]xޭ*&+W|nغ<%}/# +, NaB3v;01 ôhcWlb>f".͖`#-)jN[ہ!p-~nܶa\n4¹9gSWjCYz ws4 AJZέ""Lir+Z夅01>Gm%C+?#TO2k> stream d@.TG)^"PX8:RԢA> stream  m2%:Le.O3/m!*sm鈴"즾@U"xTݎGx_2ɐn}M3HP# {0ҝObF\O*ϱPKɤP/:T*IMbչi_moޡI5`",iסBbu9?}VׁIg^%ͨ6E t=<{ZVY[7Ddr,7=>*iVQ=d`ޱPFƷx%7c_ 5 endstream endobj 470 0 obj 303 endobj 471 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 74 /Height 105 /ColorSpace 491 0 R /BitsPerComponent 8 /Length 472 0 R >> stream ^+<v66*I01M"kn]X |$_.gHUBB7vgot@C;Y5Wʒ(r!mɨ^O'콬[g> stream X1k?7c?M(?7'a/Abt5ÿ^w}r8<?&ֹoA Cm{N9!(-\3o3$Aj_>OԦY~\§ۄgibAD*B:u]NQg<}ڱVme? e!LnR@ oBr|]@ endstream endobj 474 0 obj 208 endobj 475 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 74 /Height 105 /ColorSpace 491 0 R /BitsPerComponent 8 /Length 476 0 R >> stream dw:Gi }6k8]lU=M/~mo]c4wc3 q Ӑ50&߰{?4 $'V3n,gVY` endstream endobj 476 0 obj 96 endobj 477 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 74 /Height 105 /ColorSpace 491 0 R /BitsPerComponent 8 /Length 478 0 R >> stream [wLd(vX=#% 졦C6WE~7]xd~u Mu0ؼ5a, g&K _IrwQ2&ƞNK_OS12Ob:l}L-W* ƥeDG49xcf2wu 銾SV s `{G^3'2m}&6v endstream endobj 478 0 obj 198 endobj 479 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 74 /Height 105 /ColorSpace 491 0 R /BitsPerComponent 8 /Length 480 0 R >> stream L'lfy8_o>,7Jَ6,Ι@,'&qε mS*u!N7!=KŠbĴ @u1 䣓`2Y-]ArYஈ[][oZ endstream endobj 480 0 obj 144 endobj 481 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 74 /Height 105 /ColorSpace 491 0 R /BitsPerComponent 8 /Length 482 0 R >> stream INq] m^1úgNd}RimvRgt@XC{nn$wQ G\n3/]刪HU}4ä*llL%}ό,pE^?W9YIbe2; ad[whаCƱᢳ6+%\S"&\Vk-b1H@B`uĵn' $: endstream endobj 482 0 obj 216 endobj 483 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 74 /Height 105 /ColorSpace 491 0 R /BitsPerComponent 8 /Length 484 0 R >> stream ' s '@NսmvL8#aY݋@Kޘrod 3Ws&_i;F.ّQ_5QӒ kbu`8[!w2G,B0:lΖK\a>"w@'m70F뀊Z2l$7#FfPUxy%I ~%{| ;r6LrB@0~<> stream dV/φ@8Iym_%Wn"t Vw%Ȩ1RrUU}W Y*u !$uc:{,:0b~3TKzލr.تIjzTGV& "o˩bm_)yP}shqD=Z7;}ȃ~ [Rb%L/t8T>.](Uƿs^X_T衪ʢ2GF(vv^UerzȓGQga" k~)3{\sTX q OYt/^ÅG9xVf^Q:dsϑ2ݹh#Of&yvz{q3D]P"p4*+v"8oJ endstream endobj 486 0 obj 413 endobj 487 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 74 /Height 105 /ColorSpace 491 0 R /BitsPerComponent 8 /Length 488 0 R >> stream _4c QN= rk->\K1;Gd-+G+N\9Џ|H x*KX 4~RuIw([RH2Q vgu1 Lf<0`ْ7 >=OKoM^]+!pcL+չJ[+T endstream endobj 488 0 obj 198 endobj 489 0 obj 481 endobj 490 0 obj << /Filter [ /ASCII85Decode /LZWDecode ] /Length 489 0 R >> stream Dm3040v4&lZFؙuCj0|%bK9oG3NX 1zXa؇th${{(P9Wry<+>7!O]޽)VHasRb[aGIfНu 2YUx=Q:4@1TK!=i5+ endstream endobj 491 0 obj [ /Indexed /DeviceRGB 255 490 0 R ] endobj 492 0 obj << /S /D >> endobj 493 0 obj << /Nums [ 0 492 0 R ] >> endobj 494 0 obj << /Producer (M3LW0lV++i\r) /Author (A1Lw*?Ч) /Creator (M3LW0YM5cFEa\r) /ModDate (Hj t-XȺP"5) /Title (a\(oC!Yץ`AHC ȦHNB4 ) /CreationDate (Hj t-X˹Q"5) >> endobj 495 0 obj << /Type /Metadata /Subtype /XML /Length 1147 >> stream A]&q]+]7̥Z`m5 9 9Lɴ-+)[Y/'YjrYc}lXɐr}Q@p:ű~}AnE>I}MD-M!3yӤcqW |`>v3jCTGztS #) =]'y Aj37" EX~>hjDa昩qnO&+4$\r5 M \(=N|hϷ/̪vx7b%Sx ("uQϭH^?qK#X"rTjG\Iu`{k"d>)E/#+62qNL`j}^a.h}p]Tr-<Y=V 9E䄘;kq/7c$3?f~VN#ݫ)ҪC9ь\& LDqMP3H3 m> g7{3G0HT7C=Rn_)$D0)yw p=Vpm`o0wN} !C|(3rؠh>]CP_.ID",e TB$c*4_JIJ8'D.uVqEX-vf+dhRI6{l;lnrpD"CZdQLJ9!Z+u8G_-xӿb}x.;0se/-QskouE=q ɒzޖ(ZVIDI%_<ϝ?Y|pvL1l /P$%(|2_>OYH&^sq 9ߵpi>Pf|" jgK{*z~)%*nD^;}6ogW 6rR1H`r >CXQhJ\Ke*/ZGe/4Y+Y )T'@E  > endobj 497 0 obj << /Type /Pages /Kids [ 496 0 R 498 0 R ] /Count 16 >> endobj 498 0 obj << /Type /Pages /Kids [ 53 0 R 56 0 R 60 0 R 64 0 R 68 0 R 71 0 R ] /Count 6 /Parent 497 0 R >> endobj xref 0 499 0000000000 65535 f 0000277980 00000 n 0000278316 00000 n 0000279859 00000 n 0000279880 00000 n 0000280231 00000 n 0000280333 00000 n 0000280469 00000 n 0000280604 00000 n 0000280739 00000 n 0000280877 00000 n 0000281012 00000 n 0000281148 00000 n 0000281286 00000 n 0000281425 00000 n 0000281564 00000 n 0000281703 00000 n 0000281842 00000 n 0000281981 00000 n 0000284283 00000 n 0000284305 00000 n 0000284370 00000 n 0000284435 00000 n 0000284500 00000 n 0000284565 00000 n 0000284630 00000 n 0000284695 00000 n 0000284760 00000 n 0000284825 00000 n 0000284890 00000 n 0000284955 00000 n 0000285020 00000 n 0000285085 00000 n 0000285256 00000 n 0000285299 00000 n 0000285381 00000 n 0000285718 00000 n 0000289272 00000 n 0000289294 00000 n 0000289619 00000 n 0000290260 00000 n 0000290281 00000 n 0000290618 00000 n 0000293098 00000 n 0000293120 00000 n 0000293457 00000 n 0000294273 00000 n 0000294294 00000 n 0000294631 00000 n 0000296445 00000 n 0000296467 00000 n 0000296804 00000 n 0000297701 00000 n 0000297722 00000 n 0000298059 00000 n 0000299812 00000 n 0000299834 00000 n 0000300188 00000 n 0000300217 00000 n 0000301171 00000 n 0000301192 00000 n 0000301546 00000 n 0000301582 00000 n 0000303790 00000 n 0000303812 00000 n 0000304179 00000 n 0000304208 00000 n 0000309638 00000 n 0000309660 00000 n 0000309999 00000 n 0000314284 00000 n 0000314306 00000 n 0000314645 00000 n 0000315636 00000 n 0000315657 00000 n 0000315810 00000 n 0000315998 00000 n 0000316498 00000 n 0000316948 00000 n 0000317153 00000 n 0000324100 00000 n 0000324313 00000 n 0000332504 00000 n 0000332729 00000 n 0000356935 00000 n 0000357178 00000 n 0000365392 00000 n 0000365608 00000 n 0000365903 00000 n 0000366060 00000 n 0000366161 00000 n 0000366321 00000 n 0000366384 00000 n 0000366544 00000 n 0000366608 00000 n 0000366768 00000 n 0000366857 00000 n 0000366921 00000 n 0000367073 00000 n 0000367191 00000 n 0000367311 00000 n 0000367444 00000 n 0000367574 00000 n 0000367710 00000 n 0000367843 00000 n 0000368019 00000 n 0000368138 00000 n 0000368269 00000 n 0000368391 00000 n 0000368508 00000 n 0000369199 00000 n 0000369283 00000 n 0000369367 00000 n 0000369914 00000 n 0000370066 00000 n 0000370150 00000 n 0000370234 00000 n 0000370318 00000 n 0000370402 00000 n 0000370486 00000 n 0000370570 00000 n 0000370654 00000 n 0000370738 00000 n 0000370823 00000 n 0000370908 00000 n 0000370993 00000 n 0000371078 00000 n 0000371163 00000 n 0000371248 00000 n 0000371333 00000 n 0000371418 00000 n 0000371503 00000 n 0000371588 00000 n 0000371673 00000 n 0000371758 00000 n 0000371843 00000 n 0000371928 00000 n 0000372013 00000 n 0000372098 00000 n 0000372183 00000 n 0000372268 00000 n 0000372353 00000 n 0000372438 00000 n 0000372523 00000 n 0000372608 00000 n 0000372691 00000 n 0000372774 00000 n 0000372926 00000 n 0000373011 00000 n 0000373096 00000 n 0000373181 00000 n 0000373266 00000 n 0000373406 00000 n 0000373513 00000 n 0000373679 00000 n 0000373760 00000 n 0000373915 00000 n 0000373996 00000 n 0000374103 00000 n 0000374184 00000 n 0000374343 00000 n 0000374424 00000 n 0000374533 00000 n 0000374614 00000 n 0000374696 00000 n 0000374805 00000 n 0000374887 00000 n 0000374969 00000 n 0000375078 00000 n 0000375160 00000 n 0000375242 00000 n 0000375351 00000 n 0000375433 00000 n 0000375515 00000 n 0000375624 00000 n 0000375706 00000 n 0000375788 00000 n 0000375897 00000 n 0000375979 00000 n 0000376061 00000 n 0000376170 00000 n 0000376252 00000 n 0000376334 00000 n 0000376443 00000 n 0000376525 00000 n 0000376607 00000 n 0000376716 00000 n 0000376798 00000 n 0000376880 00000 n 0000376989 00000 n 0000377071 00000 n 0000377153 00000 n 0000377239 00000 n 0000377336 00000 n 0000377503 00000 n 0000377595 00000 n 0000377692 00000 n 0000377865 00000 n 0000377976 00000 n 0000378068 00000 n 0000378235 00000 n 0000378332 00000 n 0000378504 00000 n 0000378627 00000 n 0000378681 00000 n 0000378833 00000 n 0000378928 00000 n 0000379023 00000 n 0000379179 00000 n 0000379275 00000 n 0000379371 00000 n 0000379467 00000 n 0000379591 00000 n 0000379645 00000 n 0000379743 00000 n 0000379841 00000 n 0000379934 00000 n 0000380072 00000 n 0000380164 00000 n 0000380261 00000 n 0000380369 00000 n 0000380423 00000 n 0000380518 00000 n 0000380619 00000 n 0000380792 00000 n 0000380900 00000 n 0000381058 00000 n 0000381112 00000 n 0000381209 00000 n 0000381306 00000 n 0000381407 00000 n 0000381580 00000 n 0000381677 00000 n 0000381779 00000 n 0000381871 00000 n 0000381973 00000 n 0000382146 00000 n 0000382238 00000 n 0000382340 00000 n 0000382432 00000 n 0000382534 00000 n 0000382632 00000 n 0000382724 00000 n 0000382821 00000 n 0000382922 00000 n 0000383019 00000 n 0000383120 00000 n 0000383212 00000 n 0000383309 00000 n 0000383406 00000 n 0000383503 00000 n 0000383626 00000 n 0000383680 00000 n 0000383775 00000 n 0000383870 00000 n 0000383965 00000 n 0000384060 00000 n 0000384155 00000 n 0000384251 00000 n 0000384347 00000 n 0000384443 00000 n 0000384539 00000 n 0000384635 00000 n 0000384731 00000 n 0000384827 00000 n 0000384923 00000 n 0000385019 00000 n 0000385115 00000 n 0000385211 00000 n 0000385307 00000 n 0000385403 00000 n 0000385499 00000 n 0000385595 00000 n 0000385719 00000 n 0000385773 00000 n 0000385865 00000 n 0000385962 00000 n 0000386085 00000 n 0000386139 00000 n 0000386234 00000 n 0000386329 00000 n 0000386424 00000 n 0000386519 00000 n 0000386614 00000 n 0000386709 00000 n 0000386804 00000 n 0000386900 00000 n 0000386996 00000 n 0000387092 00000 n 0000387216 00000 n 0000387270 00000 n 0000387362 00000 n 0000387485 00000 n 0000387539 00000 n 0000387634 00000 n 0000387729 00000 n 0000387824 00000 n 0000387919 00000 n 0000388014 00000 n 0000388109 00000 n 0000388232 00000 n 0000388286 00000 n 0000388383 00000 n 0000388481 00000 n 0000388573 00000 n 0000388684 00000 n 0000388788 00000 n 0000388870 00000 n 0000388962 00000 n 0000389073 00000 n 0000389177 00000 n 0000389259 00000 n 0000389370 00000 n 0000389474 00000 n 0000389556 00000 n 0000389653 00000 n 0000389750 00000 n 0000389847 00000 n 0000389950 00000 n 0000390103 00000 n 0000390212 00000 n 0000390365 00000 n 0000390521 00000 n 0000390625 00000 n 0000390707 00000 n 0000390796 00000 n 0000390891 00000 n 0000391059 00000 n 0000391148 00000 n 0000391243 00000 n 0000391332 00000 n 0000391428 00000 n 0000391518 00000 n 0000391654 00000 n 0000391749 00000 n 0000391838 00000 n 0000391933 00000 n 0000392022 00000 n 0000392117 00000 n 0000392206 00000 n 0000392301 00000 n 0000392396 00000 n 0000392491 00000 n 0000392587 00000 n 0000392683 00000 n 0000392778 00000 n 0000392867 00000 n 0000392962 00000 n 0000393057 00000 n 0000393168 00000 n 0000393222 00000 n 0000393333 00000 n 0000393387 00000 n 0000393498 00000 n 0000393552 00000 n 0000393663 00000 n 0000393717 00000 n 0000393812 00000 n 0000393909 00000 n 0000394026 00000 n 0000394119 00000 n 0000394259 00000 n 0000394353 00000 n 0000394471 00000 n 0000394564 00000 n 0000394960 00000 n 0000395039 00000 n 0000396142 00000 n 0000396301 00000 n 0000396357 00000 n 0000396414 00000 n 0000396470 00000 n 0000396527 00000 n 0000396583 00000 n 0000396640 00000 n 0000396696 00000 n 0000396753 00000 n 0000396809 00000 n 0000396866 00000 n 0000396922 00000 n 0000396979 00000 n 0000397035 00000 n 0000397092 00000 n 0000397148 00000 n 0000397205 00000 n 0000397261 00000 n 0000397318 00000 n 0000397374 00000 n 0000397431 00000 n 0000397487 00000 n 0000397544 00000 n 0000397600 00000 n 0000397657 00000 n 0000397713 00000 n 0000397770 00000 n 0000397826 00000 n 0000397883 00000 n 0000397939 00000 n 0000397996 00000 n 0000398052 00000 n 0000398109 00000 n 0000398165 00000 n 0000398222 00000 n 0000398278 00000 n 0000398335 00000 n 0000398391 00000 n 0000398448 00000 n 0000398504 00000 n 0000398561 00000 n 0000398655 00000 n 0000398748 00000 n 0000398841 00000 n 0000398955 00000 n 0000399192 00000 n 0000399442 00000 n 0000399562 00000 n 0000399893 00000 n 0000400330 00000 n 0000400399 00000 n 0000400468 00000 n 0000400537 00000 n 0000400606 00000 n 0000400675 00000 n 0000400744 00000 n 0000400813 00000 n 0000400882 00000 n 0000400951 00000 n 0000401020 00000 n 0000401089 00000 n 0000401158 00000 n 0000401227 00000 n 0000401296 00000 n 0000401365 00000 n 0000401434 00000 n 0000401503 00000 n 0000401572 00000 n 0000401641 00000 n 0000401710 00000 n 0000401779 00000 n 0000401848 00000 n 0000401917 00000 n 0000401986 00000 n 0000402155 00000 n 0000402186 00000 n 0000402355 00000 n 0000402418 00000 n 0000402652 00000 n 0000402788 00000 n 0000402900 00000 n 0000402955 00000 n 0000403024 00000 n 0000403120 00000 n 0000403189 00000 n 0000403258 00000 n 0000403386 00000 n 0000403455 00000 n 0000403575 00000 n 0000403679 00000 n 0000404337 00000 n 0000404359 00000 n 0000404746 00000 n 0000404768 00000 n 0000405135 00000 n 0000405157 00000 n 0000405360 00000 n 0000405381 00000 n 0000405959 00000 n 0000405981 00000 n 0000406234 00000 n 0000406255 00000 n 0000406720 00000 n 0000406742 00000 n 0000407040 00000 n 0000407062 00000 n 0000407432 00000 n 0000407454 00000 n 0000407712 00000 n 0000407733 00000 n 0000408093 00000 n 0000408115 00000 n 0000408421 00000 n 0000408443 00000 n 0000408821 00000 n 0000408843 00000 n 0000409486 00000 n 0000409508 00000 n 0000410083 00000 n 0000410105 00000 n 0000410465 00000 n 0000410487 00000 n 0000410509 00000 n 0000411087 00000 n 0000411142 00000 n 0000411174 00000 n 0000411220 00000 n 0000411490 00000 n 0000412723 00000 n 0000412871 00000 n 0000412948 00000 n trailer << /Size 499 /ID[<68e5c9632ad017238afecab3498e0f57><25851e90904604d154267128cb19b4e3>] >> startxref 173 %%EOF egenix-mx-base-3.2.7/mx/Queue/mxQueue/0000755000175000017500000000000012251446113017350 5ustar lemburglemburgegenix-mx-base-3.2.7/mx/Queue/mxQueue/COPYRIGHT0000664000175000017500000000176211552064177020664 0ustar lemburglemburg --------------------------------------------------------------------- COPYRIGHT NOTICE --------------------------------------------------------------------- Copyright (c) 1997-2000, IKDS Marc-Andre Lemburg; mailto:mal@lemburg.com Copyright (c) 2000-2011, eGenix.com Software GmbH; mailto:info@egenix.com All Rights Reserved. This software is protected by copyright and other intellectual property laws and by international treaties. It may only be used under the conditions and terms of the eGenix.com Public License Agreement. You should have received a copy of the eGenix.com Public License Agreement with this software (usually in the file LICENSE located in the package's or software's main directory). Please write to licenses@egenix.com to obtain a copy in case you should not have received a copy. egenix-mx-base-3.2.7/mx/Queue/mxQueue/LICENSE0000664000175000017500000001075307620177404020375 0ustar lemburglemburg________________________________________________________________________ EGENIX.COM PUBLIC LICENSE AGREEMENT VERSION 1.1.0 ________________________________________________________________________ 1. Introduction This "License Agreement" is between eGenix.com Software, Skills and Services GmbH ("eGenix.com"), having an office at Pastor-Loeh-Str. 48, D-40764 Langenfeld, Germany, and the Individual or Organization ("Licensee") accessing and otherwise using this software in source or binary form and its associated documentation ("the Software"). 2. License Subject to the terms and conditions of this eGenix.com Public License Agreement, eGenix.com hereby grants Licensee a non-exclusive, royalty-free, world-wide license to reproduce, analyze, test, perform and/or display publicly, prepare derivative works, distribute, and otherwise use the Software alone or in any derivative version, provided, however, that the eGenix.com Public License Agreement is retained in the Software, or in any derivative version of the Software prepared by Licensee. 3. NO WARRANTY eGenix.com is making the Software available to Licensee on an "AS IS" basis. SUBJECT TO ANY STATUTORY WARRANTIES WHICH CAN NOT BE EXCLUDED, EGENIX.COM MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, EGENIX.COM MAKES NO AND DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF THE SOFTWARE WILL NOT INFRINGE ANY THIRD PARTY RIGHTS. 4. LIMITATION OF LIABILITY EGENIX.COM SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF THE SOFTWARE FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS (INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF BUSINESS PROFITS, BUSINESS INTERRUPTION, LOSS OF BUSINESS INFORMATION, OR OTHER PECUNIARY LOSS) AS A RESULT OF USING, MODIFYING OR DISTRIBUTING THE SOFTWARE, OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO THE ABOVE EXCLUSION OR LIMITATION MAY NOT APPLY TO LICENSEE. 5. Termination This License Agreement will automatically terminate upon a material breach of its terms and conditions. 6. Third Party Rights Any software or documentation in source or binary form provided along with the Software that is associated with a separate license agreement is licensed to Licensee under the terms of that license agreement. This License Agreement does not apply to those portions of the Software. Copies of the third party licenses are included in the Software Distribution. 7. General Nothing in this License Agreement affects any statutory rights of consumers that cannot be waived or limited by contract. Nothing in this License Agreement shall be deemed to create any relationship of agency, partnership, or joint venture between eGenix.com and Licensee. If any provision of this License Agreement shall be unlawful, void, or for any reason unenforceable, such provision shall be modified to the extent necessary to render it enforceable without losing its intent, or, if no such modification is possible, be severed from this License Agreement and shall not affect the validity and enforceability of the remaining provisions of this License Agreement. This License Agreement shall be governed by and interpreted in all respects by the law of Germany, excluding conflict of law provisions. It shall not be governed by the United Nations Convention on Contracts for International Sale of Goods. This License Agreement does not grant permission to use eGenix.com trademarks or trade names in a trademark sense to endorse or promote products or services of Licensee, or any third party. The controlling language of this License Agreement is English. If Licensee has received a translation into another language, it has been provided for Licensee's convenience only. 8. Agreement By downloading, copying, installing or otherwise using the Software, Licensee agrees to be bound by the terms and conditions of this License Agreement. For question regarding this License Agreement, please write to: eGenix.com Software, Skills and Services GmbH Pastor-Loeh-Str. 48 D-40764 Langenfeld Germany egenix-mx-base-3.2.7/mx/Queue/mxQueue/Makefile.pre.in0000664000175000017500000002445111136427173022220 0ustar lemburglemburg# Universal Unix Makefile for Python extensions # ============================================= # Short Instructions # ------------------ # 1. Build and install Python (1.5 or newer). # 2. "make -f Makefile.pre.in boot" # 3. "make" # You should now have a shared library. # Long Instructions # ----------------- # Build *and install* the basic Python 1.5 distribution. See the # Python README for instructions. (This version of Makefile.pre.in # only withs with Python 1.5, alpha 3 or newer.) # Create a file Setup.in for your extension. This file follows the # format of the Modules/Setup.dist file; see the instructions there. # For a simple module called "spam" on file "spammodule.c", it can # contain a single line: # spam spammodule.c # You can build as many modules as you want in the same directory -- # just have a separate line for each of them in the Setup.in file. # If you want to build your extension as a shared library, insert a # line containing just the string # *shared* # at the top of your Setup.in file. # Note that the build process copies Setup.in to Setup, and then works # with Setup. It doesn't overwrite Setup when Setup.in is changed, so # while you're in the process of debugging your Setup.in file, you may # want to edit Setup instead, and copy it back to Setup.in later. # (All this is done so you can distribute your extension easily and # someone else can select the modules they actually want to build by # commenting out lines in the Setup file, without editing the # original. Editing Setup is also used to specify nonstandard # locations for include or library files.) # Copy this file (Misc/Makefile.pre.in) to the directory containing # your extension. # Run "make -f Makefile.pre.in boot". This creates Makefile # (producing Makefile.pre and sedscript as intermediate files) and # config.c, incorporating the values for sys.prefix, sys.exec_prefix # and sys.version from the installed Python binary. For this to work, # the python binary must be on your path. If this fails, try # make -f Makefile.pre.in Makefile VERSION=1.5 installdir= # where is the prefix used to install Python for installdir # (and possibly similar for exec_installdir=). # Note: "make boot" implies "make clobber" -- it assumes that when you # bootstrap you may have changed platforms so it removes all previous # output files. # If you are building your extension as a shared library (your # Setup.in file starts with *shared*), run "make" or "make sharedmods" # to build the shared library files. If you are building a statically # linked Python binary (the only solution of your platform doesn't # support shared libraries, and sometimes handy if you want to # distribute or install the resulting Python binary), run "make # python". # Note: Each time you edit Makefile.pre.in or Setup, you must run # "make Makefile" before running "make". # Hint: if you want to use VPATH, you can start in an empty # subdirectory and say (e.g.): # make -f ../Makefile.pre.in boot srcdir=.. VPATH=.. # === Bootstrap variables (edited through "make boot") === # The prefix used by "make inclinstall libainstall" of core python installdir= /usr/local # The exec_prefix used by the same exec_installdir=$(installdir) # Source directory and VPATH in case you want to use VPATH. # (You will have to edit these two lines yourself -- there is no # automatic support as the Makefile is not generated by # config.status.) srcdir= . VPATH= . # === Variables that you may want to customize (rarely) === # (Static) build target TARGET= python # Installed python binary (used only by boot target) PYTHON= python # Add more -I and -D options here CFLAGS= $(OPT) -I$(INCLUDEPY) -I$(EXECINCLUDEPY) $(DEFS) # These two variables can be set in Setup to merge extensions. # See example[23]. BASELIB= BASESETUP= # === Variables set by makesetup === MODOBJS= _MODOBJS_ MODLIBS= _MODLIBS_ # === Definitions added by makesetup === # === Variables from configure (through sedscript) === VERSION= @VERSION@ CC= @CC@ CXX= @CXX@ MAINCC= @MAINCC@ LINKCC= @LINKCC@ SGI_ABI= @SGI_ABI@ OPT= @OPT@ CPPFLAGS= @CPPFLAGS@ LDFLAGS= @LDFLAGS@ LDLAST= @LDLAST@ DEFS= LIBS= @LIBS@ LIBM= @LIBM@ LIBC= @LIBC@ RANLIB= @RANLIB@ MACHDEP= @MACHDEP@ SO= @SO@ LDSHARED= @LDSHARED@ BLDSHARED= @BLDSHARED@ CCSHARED= @CCSHARED@ LINKFORSHARED= @LINKFORSHARED@ CXX= @CXX@ # Install prefix for architecture-independent files prefix= /usr/local # Install prefix for architecture-dependent files exec_prefix= $(prefix) # Uncomment the following two lines for AIX #LINKCC= $(LIBPL)/makexp_aix $(LIBPL)/python.exp "" $(LIBRARY); $(PURIFY) $(CC) #LDSHARED= $(LIBPL)/ld_so_aix $(CC) -bI:$(LIBPL)/python.exp # === Fixed definitions === # Shell used by make (some versions default to the login shell, which is bad) SHELL= /bin/sh # Expanded directories BINDIR= $(exec_installdir)/bin LIBDIR= $(exec_prefix)/lib MANDIR= $(installdir)/man INCLUDEDIR= $(installdir)/include SCRIPTDIR= $(prefix)/lib # Detailed destination directories BINLIBDEST= $(LIBDIR)/python$(VERSION) LIBDEST= $(SCRIPTDIR)/python$(VERSION) INCLUDEPY= $(INCLUDEDIR)/python$(VERSION) EXECINCLUDEPY= $(exec_installdir)/include/python$(VERSION) LIBP= $(exec_installdir)/lib/python$(VERSION) DESTSHARED= $(BINLIBDEST)/site-packages LIBPL= $(LIBP)/config PYTHONLIBS= $(LIBPL)/libpython$(VERSION).a MAKESETUP= $(LIBPL)/makesetup MAKEFILE= $(LIBPL)/Makefile CONFIGC= $(LIBPL)/config.c CONFIGCIN= $(LIBPL)/config.c.in SETUP= $(LIBPL)/Setup.config $(LIBPL)/Setup.local $(LIBPL)/Setup SYSLIBS= $(LIBM) $(LIBC) ADDOBJS= $(LIBPL)/python.o config.o # Portable install script (configure doesn't always guess right) INSTALL= $(LIBPL)/install-sh -c # Shared libraries must be installed with executable mode on some systems; # rather than figuring out exactly which, we always give them executable mode. # Also, making them read-only seems to be a good idea... INSTALL_SHARED= ${INSTALL} -m 555 # === Fixed rules === # Default target. This builds shared libraries only default: sharedmods # Build everything all: static sharedmods # Build shared libraries from our extension modules sharedmods: $(SHAREDMODS) # Build a static Python binary containing our extension modules static: $(TARGET) $(TARGET): $(ADDOBJS) lib.a $(PYTHONLIBS) Makefile $(BASELIB) $(LINKCC) $(LDFLAGS) $(LINKFORSHARED) \ $(ADDOBJS) lib.a $(PYTHONLIBS) \ $(LINKPATH) $(BASELIB) $(MODLIBS) $(LIBS) $(SYSLIBS) \ -o $(TARGET) $(LDLAST) install: sharedmods if test ! -d $(DESTSHARED) ; then \ mkdir $(DESTSHARED) ; else true ; fi -for i in X $(SHAREDMODS); do \ if test $$i != X; \ then $(INSTALL_SHARED) $$i $(DESTSHARED)/$$i; \ fi; \ done # Build the library containing our extension modules lib.a: $(MODOBJS) -rm -f lib.a ar cr lib.a $(MODOBJS) -$(RANLIB) lib.a # This runs makesetup *twice* to use the BASESETUP definition from Setup config.c Makefile: Makefile.pre Setup $(BASESETUP) $(MAKESETUP) $(MAKESETUP) \ -m Makefile.pre -c $(CONFIGCIN) Setup -n $(BASESETUP) $(SETUP) $(MAKE) -f Makefile do-it-again # Internal target to run makesetup for the second time do-it-again: $(MAKESETUP) \ -m Makefile.pre -c $(CONFIGCIN) Setup -n $(BASESETUP) $(SETUP) # Make config.o from the config.c created by makesetup config.o: config.c $(CC) $(CFLAGS) -c config.c # Setup is copied from Setup.in *only* if it doesn't yet exist Setup: cp $(srcdir)/Setup.in Setup # Make the intermediate Makefile.pre from Makefile.pre.in Makefile.pre: Makefile.pre.in sedscript sed -f sedscript $(srcdir)/Makefile.pre.in >Makefile.pre # Shortcuts to make the sed arguments on one line P=prefix E=exec_prefix H=Generated automatically from Makefile.pre.in by sedscript. L=LINKFORSHARED # Make the sed script used to create Makefile.pre from Makefile.pre.in sedscript: $(MAKEFILE) sed -n \ -e '1s/.*/1i\\/p' \ -e '2s%.*%# $H%p' \ -e '/^VERSION=/s/^VERSION=[ ]*\(.*\)/s%@VERSION[@]%\1%/p' \ -e '/^CC=/s/^CC=[ ]*\(.*\)/s%@CC[@]%\1%/p' \ -e '/^CXX=/s/^CXX=[ ]*\(.*\)/s%@CXX[@]%\1%/p' \ -e '/^DEFS=/s/^DEFS=[ ]*\(.*\)/s%@DEFS[@]%\1%/p' \ -e '/^MAINCC=/s/^MAINCC=[ ]*\(.*\)/s%@MAINCC[@]%\1%/p' \ -e '/^LINKCC=/s/^LINKCC=[ ]*\(.*\)/s%@LINKCC[@]%\1%/p' \ -e '/^OPT=/s/^OPT=[ ]*\(.*\)/s%@OPT[@]%\1%/p' \ -e '/^CPPFLAGS=/s/^CPPFLAGS=[ ]*\(.*\)/s%@CPPFLAGS[@]%\1%/p' \ -e '/^LDFLAGS=/s/^LDFLAGS=[ ]*\(.*\)/s%@LDFLAGS[@]%\1%/p' \ -e '/^LDLAST=/s/^LDLAST=[ ]*\(.*\)/s%@LDLAST[@]%\1%/p' \ -e '/^DEFS=/s/^DEFS=[ ]*\(.*\)/s%@DEFS[@]%\1%/p' \ -e '/^LIBS=/s/^LIBS=[ ]*\(.*\)/s%@LIBS[@]%\1%/p' \ -e '/^LIBM=/s/^LIBM=[ ]*\(.*\)/s%@LIBM[@]%\1%/p' \ -e '/^LIBC=/s/^LIBC=[ ]*\(.*\)/s%@LIBC[@]%\1%/p' \ -e '/^RANLIB=/s/^RANLIB=[ ]*\(.*\)/s%@RANLIB[@]%\1%/p' \ -e '/^MACHDEP=/s/^MACHDEP=[ ]*\(.*\)/s%@MACHDEP[@]%\1%/p' \ -e '/^SO=/s/^SO=[ ]*\(.*\)/s%@SO[@]%\1%/p' \ -e '/^LDSHARED=/s/^LDSHARED=[ ]*\(.*\)/s%@LDSHARED[@]%\1%/p' \ -e '/^BLDSHARED=/s/^BLDSHARED=[ ]*\(.*\)/s%@BLDSHARED[@]%\1%/p' \ -e '/^CCSHARED=/s/^CCSHARED=[ ]*\(.*\)/s%@CCSHARED[@]%\1%/p' \ -e '/^SGI_ABI=/s/^SGI_ABI=[ ]*\(.*\)/s%@SGI_ABI[@]%\1%/p' \ -e '/^$L=/s/^$L=[ ]*\(.*\)/s%@$L[@]%\1%/p' \ -e '/^$P=/s/^$P=\(.*\)/s%^$P=.*%$P=\1%/p' \ -e '/^$E=/s/^$E=\(.*\)/s%^$E=.*%$E=\1%/p' \ $(MAKEFILE) >sedscript echo "/^#@SET_CCC@/d" >>sedscript echo "/^installdir=/s%=.*%= $(installdir)%" >>sedscript echo "/^exec_installdir=/s%=.*%=$(exec_installdir)%" >>sedscript echo "/^srcdir=/s%=.*%= $(srcdir)%" >>sedscript echo "/^VPATH=/s%=.*%= $(VPATH)%" >>sedscript echo "/^LINKPATH=/s%=.*%= $(LINKPATH)%" >>sedscript echo "/^BASELIB=/s%=.*%= $(BASELIB)%" >>sedscript echo "/^BASESETUP=/s%=.*%= $(BASESETUP)%" >>sedscript # Bootstrap target boot: clobber VERSION=`$(PYTHON) -c "import sys; print sys.version[:3]"`; \ installdir=`$(PYTHON) -c "import sys; print sys.prefix"`; \ exec_installdir=`$(PYTHON) -c "import sys; print sys.exec_prefix"`; \ $(MAKE) -f $(srcdir)/Makefile.pre.in VPATH=$(VPATH) srcdir=$(srcdir) \ VERSION=$$VERSION \ installdir=$$installdir \ exec_installdir=$$exec_installdir \ Makefile # Handy target to remove intermediate files and backups clean: -rm -f *.o *~ # Handy target to remove everything that is easily regenerated clobber: clean -rm -f *.a tags TAGS config.c Makefile.pre $(TARGET) sedscript -rm -f *.so *.sl so_locations # Handy target to remove everything you don't want to distribute distclean: clobber -rm -f Makefile Setup egenix-mx-base-3.2.7/mx/Queue/mxQueue/Setup.in0000664000175000017500000000011606746336463021022 0ustar lemburglemburg# Build extensions shared: *shared* # # # mxQueue module # mxQueue mxQueue.c egenix-mx-base-3.2.7/mx/Queue/mxQueue/__init__.py0000664000175000017500000000006607315370436021476 0ustar lemburglemburgfrom mxQueue import * from mxQueue import __version__ egenix-mx-base-3.2.7/mx/Queue/mxQueue/ld_so_aix0000775000175000017500000001351507057236756021270 0ustar lemburglemburg#!/bin/sh # # ======================================================================== # FILE: ld_so_aix # TYPE: executable, uses makexp_aix # SYSTEM: AIX # # DESCRIPTION: Creates a shareable .o from a set of pre-compiled # (unshared) .o files # # USAGE: ld_so_aix [CC] [arguments] # # ARGUMENTS: Same as for "ld". The following arguments are processed # or supplied by this script (those marked with an asterisk # can be overriden from command line): # # Argument Default value # (*) -o [OutputFileName] -o shr.o # (*) -e [EntryPointLabel] -e init[OutputBaseName] # (*) -bE:[ExportFile] -bE:[OutputBaseName].exp # (*) -bI:[ImportFile] -bI:./python.exp # -bM:[ModuleType] -bM:SRE # -bhalt:[Number] -bhalt:4 # -T[Number] -T512 # -H[Number] -H512 # -lm # # The compiler specific ("-lc" or "-lc_r", "-lpthreads",...) # arguments will be automatically passed to "ld" according # to the CC command provided as a first argument to this # script. Usually, the same CC command was used to produce # the pre-compiled .o file(s). # # NOTES: 1. Since "ld_so_aix" was originally written for building # shared modules for the Python interpreter, the -e and # -bI default values match Python's conventions. In # Python, the entry point for a shared module is based # on the module's name (e.g., the "mathmodule" will # expect an entry point of "initmath"). # 2. The script accepts multiple .o or .a input files and # creates a single (shared) output file. The export list # that is created is based on the output file's basename # with the suffix ".exp". # 3. The resulting shared object file is left in the # current directory. # 4. Uncommenting the "echo" lines gives detailed output # about the commands executed in the script. # # # HISTORY: Oct-1996 -- Support added for multiple .o files -- # -- and optional arguments processing. -- # Chris Myers (myers@tc.cornell.edu), Keith Kwok # (kkwok@tc.cornell.edu) and Vladimir Marangozov # # Aug-6-1996 -- Take care of the compiler specific -- # -- args by leaving CC to invoke "ld". -- # Vladimir Marangozov # # Jul-1-1996 -- Make sure to use /usr/ccs/bin/ld -- # -- Use makexp_aix for the export list. -- # Vladimir Marangozov (Vladimir.Marangozov@imag.fr) # # Manus Hand (mhand@csn.net) -- Initial code -- 6/24/96 # ======================================================================== # usage="Usage: ld_so_aix [CC command] [ld arguments]" if test ! -n "$*"; then echo $usage; exit 2 fi makexp=`dirname $0`/makexp_aix # Check for existence of compiler. CC=$1; shift whichcc=`which $CC` if test ! -x "$whichcc"; then echo "ld_so_aix: Compiler '$CC' not found; exiting." exit 2 fi if test ! -n "$*"; then echo $usage; exit 2 fi # Default import file for Python # Can be overriden by providing a -bI: argument. impfile="./python.exp" # Parse arguments while test -n "$1" do case "$1" in -e | -Wl,-e) if test -z "$2"; then echo "ld_so_aix: The -e flag needs a parameter; exiting."; exit 2 else shift; entry=$1 fi ;; -e* | -Wl,-e*) entry=`echo $1 | sed -e "s/-Wl,//" -e "s/-e//"` ;; -o) if test -z "$2"; then echo "ld_so_aix: The -o flag needs a parameter; exiting."; exit 2 else shift; objfile=$1 fi ;; -o*) objfile=`echo $1 | sed "s/-o//"` ;; -bI:* | -Wl,-bI:*) impfile=`echo $1 | sed -e "s/-Wl,//" -e "s/-bI://"` ;; -bE:* | -Wl,-bE:*) expfile=`echo $1 | sed -e "s/-Wl,//" -e "s/-bE://"` ;; *.o | *.a) objs="$objs $1" args="$args $1" ;; -bM:* | -Wl,-bM:* | -H* | -Wl,-H* | -T* | -Wl,-T* | -lm) ;; *) args="$args $1" ;; esac shift done if test -z "$objs"; then echo "ld_so_aix: No input files; exiting." exit 2 elif test ! -r "$impfile"; then echo "ld_so_aix: Import file '$impfile' not found or not readable; exiting." exit 2 fi # If -o wasn't specified, assume "-o shr.o" if test -z "$objfile"; then objfile=shr.o fi filename=`basename $objfile | sed "s/\.[^.]*$//"` # If -bE: wasn't specified, assume "-bE:$filename.exp" if test -z "$expfile"; then expfile="$filename.exp" fi # Default entry symbol for Python modules = init[modulename] # Can be overriden by providing a -e argument. if test -z "$entry"; then entry=init`echo $filename | sed "s/module.*//"` fi #echo "ld_so_aix: Debug info section" #echo " -> output file : $objfile" #echo " -> import file : $impfile" #echo " -> export file : $expfile" #echo " -> entry point : $entry" #echo " -> object files: $objs" #echo " -> CC arguments: $args" CCOPT="-Wl,-e$entry -Wl,-bE:$expfile -Wl,-bI:$impfile -Wl,-bhalt:4" CCOPT="$CCOPT -Wl,-bM:SRE -Wl,-T512 -Wl,-H512 -lm -o $objfile" CCARGS="$args" # Export list generation. #echo $makexp $expfile "$objfile" $objs $makexp $expfile "$objfile" $objs # Perform the link. #echo $CC $CCOPT $CCARGS $CC $CCOPT $CCARGS # Delete the module's export list file. # Comment this line if you need it. rm -f $expfile egenix-mx-base-3.2.7/mx/Queue/mxQueue/makexp_aix0000775000175000017500000000603507057236752021450 0ustar lemburglemburg#!/bin/sh # # =========================================================================== # FILE: makexp_aix # TYPE: standalone executable # SYSTEM: AIX 3.2.5 and AIX 4 # # DESCRIPTION: This script creates an export list of ALL global symbols # from a list of object or archive files. # # USAGE: makexp_aix "" ... # # where: # is the target export list filename. # is the path/file string to be appended # after the "#!" symbols in the first line of the # export file. Passing "" means deferred resolution. # is an object (.o) or an archive file (.a). # # HISTORY: # 3-Apr-1998 -- remove C++ entries of the form Class::method # Vladimir Marangozov # # 1-Jul-1996 -- added header information # Vladimir Marangozov # # 28-Jun-1996 -- initial code # Vladimir Marangozov (Vladimir.Marangozov@imag.fr) # ========================================================================== # Variables expFileName=$1 toAppendStr=$2 shift; shift; inputFiles=$* automsg="Generated automatically by makexp_aix" notemsg="NOTE: lists _all_ global symbols defined in the above file(s)." curwdir=`pwd` # Create the export file and setup the header info echo "#!"$toAppendStr > $expFileName echo "*" >> $expFileName echo "* $automsg (`date -u`)" >> $expFileName echo "*" >> $expFileName echo "* Base Directory: $curwdir" >> $expFileName echo "* Input File(s) : $inputFiles" >> $expFileName echo "*" >> $expFileName echo "* $notemsg" >> $expFileName echo "*" >> $expFileName # Extract the symbol list using 'nm' which produces quite # different output under AIX 4 than under AIX 3.2.5. # The following handles both versions by using a common flagset. # Here are some hidden tricks: # 1. Use /usr/ccs/bin/nm. Relevant to AIX 3.2.5 which has # another version under /usr/ucb/bin/nm. # 2. Use the -B flag to have a standard BSD representation # of the symbol list on both AIX 3.2.5 and AIX 4. The "-B" # flag is missing in the AIX 3.2.5 online usage help of 'nm'. # 3. Use the -x flag to have a hex representation of the symbol # values. This fills the leading whitespaces on AIX 4, # thus simplifying the sed statement. # 4. Eliminate all entries except those with either "B", "D" # or "T" key letters. We are interested only in the global # (extern) BSS, DATA and TEXT symbols. With the same statement # we eliminate object member lines relevant to AIX 4. # 5. Eliminate entries containing a dot. We can have a dot only # as a symbol prefix, but such symbols are undefined externs. # 6. Eliminate everything including the key letter, so that we're # left with just the symbol name. # 7. Eliminate all entries containing two colons, like Class::method # /usr/ccs/bin/nm -Bex $inputFiles \ | sed -e '/ [^BDT] /d' -e '/\./d' -e 's/.* [BDT] //' -e '/::/d' \ | sort | uniq >> $expFileName egenix-mx-base-3.2.7/mx/Queue/mxQueue/mx.h0000664000175000017500000005570412133300665020162 0ustar lemburglemburg#ifndef MX_H #define MX_H /* mx -- Marc's eXtension modules for Python: basic macros This file is only meant to be included by the extension modules. DO NOT include it in the extension module's header file, since it will definitely cause troubles then. To enable debugging ceratin things, define one of these before including this file: MAL_REF_DEBUG -- debug reference counts (Py_MY_xxx) [this file] MAL_DEBUG -- enable debug output (DPRINTF) [mxstdlib.h] MAL_MEM_DEBUG -- enable malloc output (new,cnew,free,...) [mxstdlib.h] Copyright (c) 2000, Marc-Andre Lemburg; mailto:mal@lemburg.com Copyright (c) 2000-2013, eGenix.com Software GmbH; mailto:info@egenix.com See the documentation for further copyright information or contact the author. XXX Most of these macros and defines should really use an mx prefix to avoid collisions with native Python macros and defines. So far this has not happened, which is why this hasn't been implemented yet. */ /* --- Platform or compiler specific tweaks ------------------------------- */ /* Add some platform specific symbols to enable work-arounds for the static forward declaration of type definitions; note that the GNU C compiler does not have this problem. Many thanks to all who have contributed to this list. */ #ifndef BAD_STATIC_FORWARD # if (!defined(__GNUC__)) # if (defined(NeXT) || defined(sgi) || defined(_AIX) || (defined(__osf__) && defined(__DECC)) || defined(TrueCompaq64) || defined(__VMS)) # define BAD_STATIC_FORWARD # endif # endif #endif /* Some more tweaks for various platforms. */ /* VMS needs this define. Thanks to Jean-Franois PIRONNE */ #if defined(__VMS) # define __SC__ #endif /* xlC on AIX doesn't like the Python work-around for static forwards in ANSI mode (default), so we switch on extended mode. Thanks to Albert Chin-A-Young */ #if defined(__xlC__) # pragma langlvl extended #endif /* --- Standard header files ---------------------------------------------- */ /* Include the generic mx header file */ #include "mxh.h" /* Include nearly all Python symbols & definitions */ #include "Python.h" /* Include other standard stuff */ #include "mxstdlib.h" /* Include Python backward compatibility stuff */ #include "mxpyapi.h" /* --- Compiler support --------------------------------------------------- */ /* Support for compilers which don't like static forward declarations of arrays; Python 2.3 removed the support for BAD_STATIC_FORWARD which is why we now use our own little helpers here. */ #undef staticforward #undef statichere #ifdef BAD_STATIC_FORWARD # define staticforward extern # define statichere static #else # define staticforward static # define statichere static #endif /* --- Declare macros ----------------------------------------------------- */ #define Py_NONE (Py_INCREF(Py_None),Py_None) #ifdef MAL_REF_DEBUG # define printref(x) printf("* refcount for "#x" = %i\n",(long) x->ob_refcnt); #else # define printref(x) #endif /* --- Error handling ----------------------------------------------------- */ #define Py_Do(x) {if (!(x)) goto onError;} #define Py_ReturnOnError(errortype,errorstr) {PyErr_SetString(errortype,errorstr);return NULL;} #define Py_Assert(x,errortype,errorstr) {if (!(x)) {PyErr_SetString(errortype,errorstr);goto onError;}} #define Py_AssertWithArg(x,errortype,errorstr,a1) {if (!(x)) {PyErr_Format(errortype,errorstr,a1);goto onError;}} #define Py_AssertWith2Args(x,errortype,errorstr,a1,a2) {if (!(x)) {PyErr_Format(errortype,errorstr,a1,a2);goto onError;}} #define Py_AssertWith3Args(x,errortype,errorstr,a1,a2,a3) {if (!(x)) {PyErr_Format(errortype,errorstr,a1,a2,a3);goto onError;}} #define Py_Error(errortype,errorstr) {PyErr_SetString(errortype,errorstr);goto onError;} #define Py_ErrorWithArg(errortype,errorstr,a1) {PyErr_Format(errortype,errorstr,a1);goto onError;} #define Py_ErrorWith2Args(errortype,errorstr,a1,a2) {PyErr_Format(errortype,errorstr,a1,a2);goto onError;} #define Py_ErrorWith3Args(errortype,errorstr,a1,a2,a3) {PyErr_Format(errortype,errorstr,a1,a2,a3);goto onError;} /* --- Reference counting ------------------------------------------------- */ #ifdef MAL_REF_DEBUG static void mx_Py_INCREF(PyObject *v, const char *name, const char *filename, int lineno) { if (!Py_DebugFlag) { Py_XINCREF(v); return; } if (!v) mxDebugPrintf("[%s:%5i] Py_XINCREF( %-8s == NULL );\n", filename,lineno,name); else { Py_INCREF(v);; mxDebugPrintf("[%s:%5i] Py_XINCREF( %-8s at 0x%lx [%s]); " "new refcount = %i\n", filename,lineno,name,(long)v,v->ob_type->tp_name, v->ob_refcnt); } } static void mx_Py_DECREF(PyObject *v, const char *name, const char *filename, int lineno) { if (!Py_DebugFlag) { Py_XDECREF(v); return; } if (!v) mxDebugPrintf("[%s:%5i] Py_XDECREF( %-8s == NULL );\n", filename,lineno,name); else { int refcnt = v->ob_refcnt; Py_DECREF(v); if (refcnt <= 1) mxDebugPrintf("[%s:%5i] Py_XDECREF( %-8s at 0x%lx [%s]); " "object deleted\n", filename,lineno,name,(long)v,v->ob_type->tp_name); else mxDebugPrintf("[%s:%5i] Py_XDECREF( %-8s at 0x%lx [%s]); " "new refcount = %i\n", filename,lineno,name,(long)v,v->ob_type->tp_name, v->ob_refcnt); } } static void mx_Py_PRINT_REFCOUNT(PyObject *v, const char *name, const char *filename, int lineno) { if (!Py_DebugFlag) return; if (!v) mxDebugPrintf("[%s:%5i] Py_PRINT_REFCOUNT( %-8s == NULL );\n", filename,lineno,name); else { mxDebugPrintf("[%s:%5i] Py_PRINT_REFCOUNT( %-8s at 0x%lx [%s]) = %i;\n", filename,lineno,name,(long)v,v->ob_type->tp_name, v->ob_refcnt); } } # undef Py_INCREF # define Py_INCREF(x) mx_Py_INCREF((PyObject *)x,#x,__FILE__,__LINE__) # undef Py_DECREF # define Py_DECREF(x) mx_Py_DECREF((PyObject *)x,#x,__FILE__,__LINE__) # undef Py_XINCREF # define Py_XINCREF(x) mx_Py_INCREF((PyObject *)x,#x,__FILE__,__LINE__) # undef Py_XDECREF # define Py_XDECREF(x) mx_Py_DECREF((PyObject *)x,#x,__FILE__,__LINE__) # undef Py_CLEAR # define Py_CLEAR(x) {Py_XDECREF(x); x=0;} # define Py_DELETE(x) {if (x->ob_refcnt > 1) mxDebugPrintf("[%s:%5i] Py_DELETE( "#x" ) WARNING: Refcount = %i > 1\n",__FILE__,__LINE__,(int)x->ob_refcnt);Py_DECREF(x);} # define Py_PRINT_REFCOUNT(x) mx_Py_PRINT_REFCOUNT((PyObject *)x,#x,__FILE__,__LINE__) #else # define Py_DELETE(x) Py_DECREF(x) # define Py_PRINT_REFCOUNT(x) #endif #define Py_DEC_REF(x) {Py_XDECREF(x); x=0;} /* doing this once too often doesn't hurt; same as Py_CLEAR() */ /* Unreference a Python object. This is only used in Python debug builds and needed to keep track of all allocated references. Use in object constructors or free list implementations. */ #ifndef _Py_DEC_REFTOTAL # ifdef Py_REF_DEBUG # define _Py_DEC_REFTOTAL _Py_RefTotal-- # else # define _Py_DEC_REFTOTAL # endif #endif #define mxPy_UNREF(x) _Py_DEC_REFTOTAL /* --- Debug logging ------------------------------------------------------ */ #ifdef MAL_DEBUG # define Py_PRINT_REPR(message, obj) \ if (Py_DebugFlag) { \ PyObject *_debug_repr = PyObject_Repr(obj); \ mxDebugPrintf(message, PyString_AsString(_debug_repr)); \ Py_XDECREF(_debug_repr); \ } #else # define Py_PRINT_REPR(message, obj) #endif /* --- Argument passing and checking -------------------------------------- */ /* No arguments expected; also use Py_MethodListEntryNoArgs() for this kind of fct; this check is no longer needed in Python 2.3 and later */ #if PY_VERSION_HEX >= 0x02030000 # define Py_NoArgsCheck() {if (0) goto onError;} #else # define Py_NoArgsCheck() {if (!PyArg_NoArgs(args)) goto onError;} #endif /* For functions with old style args (Py_MethodListEntrySingleArg) */ #define Py_GetArgObject(a) {a = args; if (!a) {PyErr_SetString(PyExc_TypeError,"function/method requires an argument"); goto onError;}} #define Py_GetSingleArg(format,a1) {if (!PyArg_Parse(args,format,&a1)) goto onError;} /* For functions with new style args: */ #define Py_GetArg(format,a1) {if (!PyArg_ParseTuple(args,format,&a1)) goto onError;} #define Py_Get2Args(format,a1,a2) {if (!PyArg_ParseTuple(args,format,&a1,&a2)) goto onError;} #define Py_Get3Args(format,a1,a2,a3) {if (!PyArg_ParseTuple(args,format,&a1,&a2,&a3)) goto onError;} #define Py_Get4Args(format,a1,a2,a3,a4) {if (!PyArg_ParseTuple(args,format,&a1,&a2,&a3,&a4)) goto onError;} #define Py_Get5Args(format,a1,a2,a3,a4,a5) {if (!PyArg_ParseTuple(args,format,&a1,&a2,&a3,&a4,&a5)) goto onError;} #define Py_Get6Args(format,a1,a2,a3,a4,a5,a6) {if (!PyArg_ParseTuple(args,format,&a1,&a2,&a3,&a4,&a5,&a6)) goto onError;} #define Py_Get7Args(format,a1,a2,a3,a4,a5,a6,a7) {if (!PyArg_ParseTuple(args,format,&a1,&a2,&a3,&a4,&a5,&a6,&a7)) goto onError;} #define Py_Get8Args(format,a1,a2,a3,a4,a5,a6,a7,a8) {if (!PyArg_ParseTuple(args,format,&a1,&a2,&a3,&a4,&a5,&a6,&a7,&a8)) goto onError;} /* The keywords array string type */ #define Py_KEYWORDS_STRING_TYPE char /* For functions with keywords -- the first macro parameter must be the keywords array given as e.g. static const char *keywords[] = {"first","second","third", 0}; with an entry for every argument (in the correct order). The functions must be included in the method list using Py_MethodWithKeywordsListEntry() and be declared as Py_C_Function_WithKeywords(). */ #define Py_KeywordGetArg(keywords,format,a1) {if (!PyArg_ParseTupleAndKeywords(args,kws,format,keywords,&a1)) goto onError;} #define Py_KeywordGet2Args(keywords,format,a1,a2) {if (!PyArg_ParseTupleAndKeywords(args,kws,format,keywords,&a1,&a2)) goto onError;} #define Py_KeywordGet3Args(keywords,format,a1,a2,a3) {if (!PyArg_ParseTupleAndKeywords(args,kws,format,keywords,&a1,&a2,&a3)) goto onError;} #define Py_KeywordGet4Args(keywords,format,a1,a2,a3,a4) {if (!PyArg_ParseTupleAndKeywords(args,kws,format,keywords,&a1,&a2,&a3,&a4)) goto onError;} #define Py_KeywordGet5Args(keywords,format,a1,a2,a3,a4,a5) {if (!PyArg_ParseTupleAndKeywords(args,kws,format,keywords,&a1,&a2,&a3,&a4,&a5)) goto onError;} #define Py_KeywordGet6Args(keywords,format,a1,a2,a3,a4,a5,a6) {if (!PyArg_ParseTupleAndKeywords(args,kws,format,keywords,&a1,&a2,&a3,&a4,&a5,&a6)) goto onError;} #define Py_KeywordGet7Args(keywords,format,a1,a2,a3,a4,a5,a6,a7) {if (!PyArg_ParseTupleAndKeywords(args,kws,format,keywords,&a1,&a2,&a3,&a4,&a5,&a6,&a7)) goto onError;} #define Py_KeywordGet8Args(keywords,format,a1,a2,a3,a4,a5,a6,a7,a8) {if (!PyArg_ParseTupleAndKeywords(args,kws,format,keywords,&a1,&a2,&a3,&a4,&a5,&a6,&a7,&a8)) goto onError;} /* New style macros fof functions supporting keywords -- the C variable names are used as template for the keyword list, i.e. they must match the Python keyword parameter names. Note that format strings with special parameters (e.g. "#s") are not allowed since they would cause the keyword list to be out of sync. The functions must be included in the method list using Py_MethodWithKeywordsListEntry() and be declared as Py_C_Function_WithKeywords(). Example: Py_C_Function_WithKeywords( myfunction, "myfunction(filename,dupkeys=0,filemode=0,sectorsize=512)\n\n" "Returns a myobject" ) { char *filename; int sectorsize = 512; int dupkeys = 0; int filemode = 0; Py_KeywordsGet4Args("s|iii", filename,dupkeys,filemode,sectorsize); return (PyObject *)myobject_New(filename, filemode, sectorsize, dupkeys); onError: return NULL; } */ #define Py_KeywordsGetArg(format,a1) {static Py_KEYWORDS_STRING_TYPE *kwslist[] = {#a1,NULL}; if (!PyArg_ParseTupleAndKeywords(args,kws,format,kwslist,&a1)) goto onError;} #define Py_KeywordsGet2Args(format,a1,a2) {static Py_KEYWORDS_STRING_TYPE *kwslist[] = {#a1,#a2,NULL}; if (!PyArg_ParseTupleAndKeywords(args,kws,format,kwslist,&a1,&a2)) goto onError;} #define Py_KeywordsGet3Args(format,a1,a2,a3) {static Py_KEYWORDS_STRING_TYPE *kwslist[] = {#a1,#a2,#a3,NULL}; if (!PyArg_ParseTupleAndKeywords(args,kws,format,kwslist,&a1,&a2,&a3)) goto onError;} #define Py_KeywordsGet4Args(format,a1,a2,a3,a4) {static Py_KEYWORDS_STRING_TYPE *kwslist[] = {#a1,#a2,#a3,#a4,NULL}; if (!PyArg_ParseTupleAndKeywords(args,kws,format,kwslist,&a1,&a2,&a3,&a4)) goto onError;} #define Py_KeywordsGet5Args(format,a1,a2,a3,a4,a5) {static Py_KEYWORDS_STRING_TYPE *kwslist[] = {#a1,#a2,#a3,#a4,#a5,NULL}; if (!PyArg_ParseTupleAndKeywords(args,kws,format,kwslist,&a1,&a2,&a3,&a4,&a5)) goto onError;} #define Py_KeywordsGet6Args(format,a1,a2,a3,a4,a5,a6) {static Py_KEYWORDS_STRING_TYPE *kwslist[] = {#a1,#a2,#a3,#a4,#a5,#a6,NULL}; if (!PyArg_ParseTupleAndKeywords(args,kws,format,kwslist,&a1,&a2,&a3,&a4,&a5,&a6)) goto onError;} #define Py_KeywordsGet7Args(format,a1,a2,a3,a4,a5,a6,a7) {static Py_KEYWORDS_STRING_TYPE *kwslist[] = {#a1,#a2,#a3,#a4,#a5,#a6,#a7,NULL}; if (!PyArg_ParseTupleAndKeywords(args,kws,format,kwslist,&a1,&a2,&a3,&a4,&a5,&a6,&a7)) goto onError;} #define Py_KeywordsGet8Args(format,a1,a2,a3,a4,a5,a6,a7,a8) {static Py_KEYWORDS_STRING_TYPE *kwslist[] = {#a1,#a2,#a3,#a4,#a5,#a6,#a7,#a8,NULL}; if (!PyArg_ParseTupleAndKeywords(args,kws,format,kwslist,&a1,&a2,&a3,&a4,&a5,&a6,&a7,&a8)) goto onError;} /* --- Returning values to Python ----------------------------------------- */ /* XXX Don't always work: every time you have an 'O' in the BuildValue format string, you need to DECREF the variable *after* the tuple has been built !!! */ #define Py_ReturnNone() {Py_INCREF(Py_None);return Py_None;} #define Py_ReturnTrue() {Py_INCREF(Py_True);return Py_True;} #define Py_ReturnFalse() {Py_INCREF(Py_False);return Py_False;} #define Py_ReturnArg(format,a1) return Py_BuildValue(format,a1); #define Py_Return Py_ReturnArg #define Py_Return2Args(format,a1,a2) return Py_BuildValue(format,a1,a2); #define Py_Return2 Py_Return2Args #define Py_Return3Args(format,a1,a2,a3) return Py_BuildValue(format,a1,a2,a3); #define Py_Return3 Py_Return3Args #define Py_Return4Args(format,a1,a2,a3) return Py_BuildValue(format,a1,a2,a3,a4); #define Py_Return5Args(format,a1,a2,a3) return Py_BuildValue(format,a1,a2,a3,a4,a5); #define Py_Return6Args(format,a1,a2,a3) return Py_BuildValue(format,a1,a2,a3,a4,a5,a6); #define Py_Return7Args(format,a1,a2,a3) return Py_BuildValue(format,a1,a2,a3,a4,a5,a6,a7); /* Build values */ #define Py_BuildNone() Py_NONE #define Py_Build(format,x) Py_BuildValue(format,x) #define Py_Build2(format,x,y) Py_BuildValue(format,x,y) #define Py_Build3(format,x,y,z) Py_BuildValue(format,x,y,z) /* --- Declaring Python builtin functions/methods ------------------------- */ /* The doc-string type changed to const char* in Python 2.5 */ #if PY_VERSION_HEX >= 0x02050000 # define Py_DOC_STRING_TYPE const char #else # define Py_DOC_STRING_TYPE char #endif /* Declare C function/method fct, having docstring docstr; may use vargargs */ #define Py_C_Function(fct,docstr) \ static Py_DOC_STRING_TYPE fct##_docstring[] = docstr;\ static PyObject *fct(PyObject *self, PyObject *args) /* Declare C function/method fct, having keywords keywordsarray and a docstring docstr; may use vargargs & keywords */ #define Py_C_Function_WithKeywords(fct,docstr) \ static Py_DOC_STRING_TYPE fct##_docstring[] = docstr;\ static PyObject *fct(PyObject *self, PyObject *args, PyObject *kws) /* These declare: self -- instance pointer for methods, NULL for functions args -- argument tuple kws -- keywords dict (if applicable) plus as statics: _docstring -- the docstring as given _keywords -- the keyword array as given Note: use the Py_GetArg macros for functions without keywords, and Py_KeywordGetArg macros for functions with keywords */ /* --- Method list entries for builtin functions/methods ------------------ */ /* Add a C function/method cname to the module dict as pyname; no doc-string */ #define Py_MethodListEntryAny(pyname,cname) {pyname,(PyCFunction)cname,METH_VARARGS} /* Add a C function/method cname to the module dict as pyname; the function can use varargs */ #define Py_MethodListEntry(pyname,cname) {pyname,(PyCFunction)cname,METH_VARARGS,cname##_docstring} /* Add a C function/method cname to the module dict as pyname; the function takes no args; in Python 2.3 a new flag was added for these which implements the no args check in the interpreter itself. */ #ifdef METH_NOARGS # define Py_MethodListEntryNoArgs(pyname,cname) {pyname,(PyCFunction)cname,METH_NOARGS,cname##_docstring} #else # define Py_MethodListEntryNoArgs(pyname,cname) {pyname,(PyCFunction)cname,0,cname##_docstring} #endif /* Add a C function/method cname to the module dict as pyname; the function takes one argument: the object is passed in directly (without wrapping it into a tuple first), i.e. don't use the Py_GetArg-macros or PyArg_ParseTuple(). */ #define Py_MethodListEntrySingleArg(pyname,cname) {pyname,(PyCFunction)cname,0,cname##_docstring} /* Add a C function/method that uses keywords to the module dict */ #define Py_MethodWithKeywordsListEntry(pyname,cname) {pyname,(PyCFunction)cname,METH_VARARGS | METH_KEYWORDS,cname##_docstring} /* --- Sequence slicing --------------------------------------------------- */ /* Check a given slice and apply the usual rules for negative indices */ #define Py_CheckSequenceSlice(len,start,stop) { \ if (stop > len) \ stop = len; \ else { \ if (stop < 0) \ stop += len; \ if (stop < 0) \ stop = 0; \ } \ if (start < 0) { \ start += len; \ if (start < 0) \ start = 0; \ } \ if (stop < start) \ start = stop; \ } /* --- Number macros ------------------------------------------------------ */ /* Test for PyFloat_AsDouble() compatible object */ #define PyFloat_Compatible(obj) \ (PyInstance_Check(obj) \ ? PyObject_HasAttrString(obj, "__float__") \ : (obj->ob_type->tp_as_number != NULL && \ obj->ob_type->tp_as_number->nb_float != NULL)) /* --- Text macros -------------------------------------------------------- */ /* Check a given text slice and apply the usual rules for negative indices */ #define Py_CheckBufferSlice(textlen,start,stop) \ Py_CheckSequenceSlice(textlen,start,stop) /* Dito for string objects */ #define Py_CheckStringSlice(textobj,start,stop) \ Py_CheckSequenceSlice(PyString_GET_SIZE(textobj),start,stop) /* For b/w compatibility */ #define Py_CheckSlice(textobj,start,stop) \ Py_CheckStringSlice(textobj,start,stop) /* Dito for Unicode objects */ #ifdef PyUnicode_GET_SIZE # define Py_CheckUnicodeSlice(unicode,start,stop) \ Py_CheckSequenceSlice(PyUnicode_GET_SIZE(unicode),start,stop) #endif /* This assumes that fixed is a constant char array; the strcmp function is only called in case the attribute name length exceeds 10 characters and the first 10 characters match; optimizing compilers should eliminate any unused parts of this comparison automatically. Note: The latest egcs compiler warns about the subscripts being out of range for shorter fixed strings; since no code is generated for those comparisons, these warning can safely be ignored. Still, they are annoying. See the Py_StringsCompareEqual() macro below for a way to work around this. */ #define Py_StringsCompareEqualEx(var,fixed,fixedsize) \ (var[0] == fixed[0] && \ (fixed[0] == 0 || \ (fixedsize >= 1 && (var[1] == fixed[1] && \ (fixed[1] == 0 || \ (fixedsize >= 2 && (var[2] == fixed[2] && \ (fixed[2] == 0 || \ (fixedsize >= 3 && (var[3] == fixed[3] && \ (fixed[3] == 0 || \ (fixedsize >= 4 && (var[4] == fixed[4] && \ (fixed[4] == 0 || \ (fixedsize >= 5 && (var[5] == fixed[5] && \ (fixed[5] == 0 || \ (fixedsize >= 6 && (var[6] == fixed[6] && \ (fixed[6] == 0 || \ (fixedsize >= 7 && (var[7] == fixed[7] && \ (fixed[7] == 0 || \ (fixedsize >= 8 && (var[8] == fixed[8] && \ (fixed[8] == 0 || \ (fixedsize >= 9 && (var[9] == fixed[9] && \ (fixed[9] == 0 || \ (fixedsize >= 10 && \ strcmp(&var[10],&fixed[10]) == 0 \ )))))))))))))))))))))))))))))) /* This assumes that fixed is a constant char array. The appended string snippet is to shut up the warnings produced by newer egcs/gcc compilers about offsets being outside bounds. Note that some compilers do the inlining by themselves or don't like the above trick (OpenVMS is one such platform). For these we simply use the standard way. */ #ifndef __VMS # define Py_StringsCompareEqual(var,fixed) \ Py_StringsCompareEqualEx(var,fixed"\0\0\0\0\0\0\0\0\0\0",sizeof(fixed)) #else # define Py_StringsCompareEqual(var,fixed) (strcmp(var, fixed) == 0) #endif /* Fast character set member check; set must be a "static unsigned *char set" array of exactly 32 bytes length generated with TextTools.set() */ #define Py_CharInSet(chr,set) \ (((unsigned char)(set)[(unsigned char)(chr) >> 3] & \ (1 << ((unsigned char)(chr) & 7))) != 0) /* --- Macros for getattr ------------------------------------------------- */ /* Compares var to name and returns 1 iff they match. This assumes that name is a constant char array. */ #define Py_WantAttr(var,name) Py_StringsCompareEqual(var,name) /* --- Module init helpers ------------------------------------------------ */ /* Helper for startup type object initialization */ #define PyType_Init(x) \ { \ x.ob_type = &PyType_Type; \ Py_Assert(x.tp_basicsize >= (int)sizeof(PyObject), \ PyExc_SystemError, \ "Internal error: tp_basicsize of "#x" too small");\ if (PyType_Ready(&x) < 0) \ goto onError; \ } /* Error reporting for module init functions */ #define Py_ReportModuleInitError(modname) { \ PyObject *exc_type, *exc_value, *exc_tb; \ PyObject *str_type, *str_value; \ \ /* Fetch error objects and convert them to strings */ \ PyErr_Fetch(&exc_type, &exc_value, &exc_tb); \ if (exc_type && exc_value) { \ str_type = PyObject_Str(exc_type); \ str_value = PyObject_Str(exc_value); \ } \ else { \ str_type = NULL; \ str_value = NULL; \ } \ /* Try to format a more informative error message using the \ original error */ \ if (str_type && str_value && \ PyString_Check(str_type) && PyString_Check(str_value)) \ PyErr_Format( \ PyExc_ImportError, \ "initialization of module "modname" failed " \ "(%s:%s)", \ PyString_AS_STRING(str_type), \ PyString_AS_STRING(str_value)); \ else \ PyErr_SetString( \ PyExc_ImportError, \ "initialization of module "modname" failed"); \ Py_XDECREF(str_type); \ Py_XDECREF(str_value); \ Py_XDECREF(exc_type); \ Py_XDECREF(exc_value); \ Py_XDECREF(exc_tb); \ } /* --- SWIG addons -------------------------------------------------------- */ /* Throw this error after having set the correct Python exception using e.g. PyErr_SetString(); */ #define mxSWIGError "mxSWIGError" /* EOF */ #endif egenix-mx-base-3.2.7/mx/Queue/mxQueue/mxQueue.c0000664000175000017500000005510212251400407021146 0ustar lemburglemburg/* mxQueue -- A queue implementation Copyright (c) 1999-2000, Marc-Andre Lemburg; mailto:mal@lemburg.com Copyright (c) 2000-2013, eGenix.com Software GmbH; mailto:info@egenix.com See the documentation for further copyright information or contact the author (mailto:mal@lemburg.com). */ /* Define this to aid in finding memory leaks */ /*#define MAL_MEM_DEBUG*/ /*#define MAL_DEBUG*/ /* Logging file used by debugging facility */ #ifndef MAL_DEBUG_OUTPUTFILE # define MAL_DEBUG_OUTPUTFILE "mxQueue.log" #endif /* We want all our symbols to be exported */ #define MX_BUILDING_MXQUEUE /* Mark the module as Py_ssize_t clean. */ #define PY_SSIZE_T_CLEAN 1 /* Setup mxstdlib memory management */ #if 1 # define MAL_USE_PYMALLOC #else # define MAL_USE_C_MALLOC #endif #include "mx.h" #include "mxQueue.h" #define MXQUEUE_VERSION "3.2.7" /* The minimal size of queues; must be > 1 */ #define MINIMAL_QUEUESIZE 4 /* Grow strategy to be used: */ #if 1 /* Fibonacci-like */ # define GROW(size) size += size >> 1 #else /* Double */ # define GROW(size) size <<= 1 #endif /* --- module doc-string -------------------------------------------------- */ static char *Module_docstring = MXQUEUE_MODULE" -- A queue implementation. Version "MXQUEUE_VERSION"\n\n" "Copyright (c) 1999-2000, Marc-Andre Lemburg; mailto:mal@lemburg.com\n" "Copyright (c) 2000-2013, eGenix.com Software GmbH; mailto:info@egenix.com\n\n" " All Rights Reserved\n\n" "See the documentation for further information on copyrights,\n" "or contact the author." ; /* --- module globals ----------------------------------------------------- */ static PyObject *mxQueue_Error; /* Error Exception object */ static PyObject *mxQueue_EmptyError; /* EmptyError Exception object */ /* Flag telling us whether the module was initialized or not. */ static int mxQueue_Initialized = 0; /* --- forward declarations ----------------------------------------------- */ staticforward PyTypeObject mxQueue_Type; staticforward PyMethodDef mxQueue_Methods[]; /* --- internal macros ---------------------------------------------------- */ #define _mxQueue_Check(v) \ (((mxQueueObject *)(v))->ob_type == &mxQueue_Type) /* --- module helpers ----------------------------------------------------- */ /* Create an exception object, insert it into the module dictionary under the given name and return the object pointer; this is NULL in case an error occurred. base can be given to indicate the base object to be used by the exception object. It should be NULL otherwise */ static PyObject *insexc(PyObject *moddict, char *name, PyObject *base) { PyObject *v; char fullname[256]; char *modname; char *dot; v = PyDict_GetItemString(moddict, "__name__"); if (v == NULL) modname = NULL; else modname = PyString_AsString(v); if (modname == NULL) { PyErr_Clear(); modname = MXQUEUE_MODULE; } /* The symbols from this extension are imported into mx.. We trim the name to not confuse the user with an overly long package path. */ strcpy(fullname, modname); dot = strchr(fullname, '.'); if (dot) dot = strchr(dot+1, '.'); if (dot) strcpy(dot+1, name); else sprintf(fullname, "%s.%s", modname, name); v = PyErr_NewException(fullname, base, NULL); if (v == NULL) return NULL; if (PyDict_SetItemString(moddict,name,v)) return NULL; return v; } #if 0 /* Helper for adding integer constants. Check for errors with PyErr_Occurred() */ static void insint(PyObject *dict, char *name, int value) { PyObject *v = PyInt_FromLong((long)value); PyDict_SetItemString(dict, name, v); Py_XDECREF(v); } #endif static PyObject *notimplemented1(PyObject *v) { Py_Error(PyExc_TypeError, "operation not implemented"); onError: return NULL; } static PyObject *notimplemented2(PyObject *v, PyObject *w) { Py_Error(PyExc_TypeError, "operation not implemented"); onError: return NULL; } static PyObject *notimplemented3(PyObject *u, PyObject *v, PyObject *w) { Py_Error(PyExc_TypeError, "operation not implemented"); onError: return NULL; } /* --- Queue Object -------------------------------------------------*/ /* --- allocation --- */ static mxQueueObject *mxQueue_New(Py_ssize_t size) { mxQueueObject *queue; PyObject **w; queue = PyObject_NEW(mxQueueObject,&mxQueue_Type); if (queue == NULL) return NULL; /* Init vars */ if (size < MINIMAL_QUEUESIZE) size = MINIMAL_QUEUESIZE; w = new(PyObject*,size); if (w == NULL) { PyErr_NoMemory(); return NULL; } queue->array = w; queue->size = size; queue->tail = queue->head = size - 1; DPRINTF("Created Queue object at 0x%0lx with size %i\n", (long)queue,size); return queue; } /* --- deallocation --- */ static void mxQueue_Free(register mxQueueObject *queue) { if (queue->array) { register Py_ssize_t i; Py_ssize_t head = queue->head, size = queue->size; for (i = queue->tail; i != head; i = (i+1) % size) Py_DECREF(queue->array[i]); free(queue->array); } PyObject_Del(queue); } /* --- internal functions --- */ /* --- API functions --- */ static Py_ssize_t _mxQueue_Length(register mxQueueObject *queue) { register Py_ssize_t len = queue->head - queue->tail; if (len < 0) len += queue->size; return len; } static Py_ssize_t mxQueue_Length(register PyObject *queue) { return _mxQueue_Length((mxQueueObject *)queue); } static int mxQueue_Push(register mxQueueObject *queue, PyObject *v) { Py_ssize_t tail,size = queue->size; if (queue == NULL) { PyErr_BadInternalCall(); goto onError; } tail = queue->tail - 1; if (tail < 0) tail += size; DPRINTF("Old tail=%i, New tail=%i\n",queue->tail,tail); /* Grow the queue first, if we have touching ends */ if (queue->head == tail) { PyObject **w; Py_ssize_t oldsize,oldtail; oldsize = size; oldtail = queue->tail; GROW(size); w = resize(queue->array,PyObject*,size); if (w == NULL) { PyErr_NoMemory(); goto onError; } queue->array = w; queue->size = size; /* Adjust the pointers and copy the right part of the queue to the end of the array */ queue->tail += size - oldsize; if (oldtail < queue->head) queue->head += size - oldsize; memmove(&w[queue->tail], &w[oldtail], (oldsize - oldtail) * sizeof(PyObject *)); /* Recalculate the new tail position */ tail = queue->tail - 1; } Py_INCREF(v); queue->array[tail] = v; queue->tail = tail; return 0; onError: return -1; } #if 0 static int mxQueue_PushMany(register mxQueueObject *queue, PyObject *seq) { Py_ssize_t tail; register Py_ssize_t i; Py_ssize_t length; if (queue == NULL) { PyErr_BadInternalCall(); goto onError; } length = PySequence_Length(seq); if (length < 0) goto onError; tail = queue->tail; /* Grow the queue, if we hit the array boundary */ if (tail + length >= queue->size) { register PyObject **w; register Py_ssize_t size; size = queue->size; while (tail + length >= size) GROW(size); w = resize(queue->array,PyObject*,size); if (w == NULL) { PyErr_NoMemory(); goto onError; } queue->array = w; queue->size = size; } /* Push the entries from left to right onto the queue */ for (i = 0; i < length; i++) { register PyObject *v; if (PyTuple_Check(seq)) { v = PyTuple_GET_ITEM(seq,i); Py_INCREF(v); } else if (PyList_Check(seq)) { v = PyList_GET_ITEM(seq,i); Py_INCREF(v); } else { v = PySequence_GetItem(seq,i); if (!v) { /* Rollback */ while (i > 0) { Py_DECREF(queue->array[tail--]); i--; } queue->tail = tail; goto onError; } } queue->array[++tail] = v; } queue->tail = tail; return 0; onError: return -1; } #endif static PyObject *mxQueue_Pop(register mxQueueObject *queue) { PyObject *v; Py_ssize_t head = queue->head; if (queue == NULL) { PyErr_BadInternalCall(); goto onError; } Py_Assert(head != queue->tail, mxQueue_EmptyError, "queue is empty"); head--; if (head < 0) head += queue->size; v = queue->array[head]; queue->head = head; return v; onError: return NULL; } #if 0 /* Pop up to n entries into a Python tuple from the tail of the queue; order is tail to bottom. */ static PyObject *mxQueue_PopMany(register mxQueueObject *queue, Py_ssize_t n) { PyObject *t; register Py_ssize_t i; if (queue == NULL) { PyErr_BadInternalCall(); goto onError; } n = min(queue->tail + 1, n); t = PyTuple_New(n); if (!t) goto onError; for (i = 0; i < n; i++) PyTuple_SET_ITEM(t,i,queue->array[queue->tail--]); return t; onError: return NULL; } #endif static int mxQueue_Clear(register mxQueueObject *queue) { register Py_ssize_t i; Py_ssize_t size = queue->size, head = queue->head; if (head != queue->tail) for (i = queue->tail;; i = (i+1) % size) { Py_DECREF(queue->array[i]); if (i == head) break; } queue->tail = queue->head = queue->size - 1; return 0; } #if 0 static mxQueueObject *mxQueue_FromSequence(PyObject *seq) { mxQueueObject *queue = 0; /* Create an "empty" queue */ queue = mxQueue_New(0); if (queue == NULL) goto onError; /* Insert items */ if (mxQueue_PushMany(queue,seq)) goto onError; return queue; onError: if (queue) mxQueue_Free(queue); return NULL; } static PyObject *mxQueue_AsTuple(register mxQueueObject *queue) { PyObject *t = 0; Py_ssize_t i,len; if (queue == NULL) { PyErr_BadInternalCall(); goto onError; } len = queue->tail + 1; t = PyTuple_New(len); if (t == NULL) goto onError; for (i = 0; i < len; i++) { PyObject *v; v = queue->array[i]; Py_INCREF(v); PyTuple_SET_ITEM(t,i,v); } return t; onError: if (t) { Py_DECREF(t); } return NULL; } static PyObject *mxQueue_AsList(register mxQueueObject *queue) { PyObject *l = 0; Py_ssize_t i,len; if (queue == NULL) { PyErr_BadInternalCall(); goto onError; } len = queue->tail + 1; l = PyList_New(len); if (l == NULL) goto onError; for (i = 0; i < len; i++) { PyObject *v; v = queue->array[i]; Py_INCREF(v); PyList_SET_ITEM(l,i,v); } return l; onError: if (l) { Py_DECREF(l); } return NULL; } #endif #if 0 static int mxQueue_Resize(register mxQueueObject *self, Py_ssize_t size) { register PyObject **w; if (self == NULL) { PyErr_BadInternalCall(); goto onError; } if (size < self->tail) size = self->tail + 1; if (size < MINIMAL_QUEUESIZE) size = MINIMAL_QUEUESIZE; GROW(size); w = resize(self->array,PyObject*,size); if (w == NULL) { PyErr_NoMemory(); goto onError; } self->array = w; self->size = size; return 0; onError: return -1; } #endif /* --- methods --- (should have lowercase extension) */ #define queue ((mxQueueObject*)self) Py_C_Function( mxQueue_new, "Queue([intialsize])") { PyObject *v; Py_ssize_t size = 0; Py_GetArg("|"Py_SSIZE_T_PARSERMARKER, size); v = (PyObject *)mxQueue_New(size); if (v == NULL) goto onError; return v; onError: return NULL; } Py_C_Function( mxQueue_push, "push(o)") { PyObject *v; Py_GetArgObject(v); if (mxQueue_Push(queue,v)) goto onError; Py_ReturnNone(); onError: return NULL; } #if 0 Py_C_Function( mxQueue_push_many, "push_many(sequence)") { PyObject *seq; Py_GetSingleArg("O",seq); if (mxQueue_PushMany(queue,seq)) goto onError; Py_ReturnNone(); onError: return NULL; } #endif Py_C_Function( mxQueue_pop, "pop()") { register PyObject *v; Py_NoArgsCheck(); v = mxQueue_Pop(queue); if (v == NULL) goto onError; return v; onError: return NULL; } #if 0 Py_C_Function( mxQueue_pop_many, "pop_many(n)") { register PyObject *v; Py_ssize_t n; Py_GetSingleArg(Py_SSIZE_T_PARSERMARKER, n); v = mxQueue_PopMany(queue,n); if (v == NULL) goto onError; return v; onError: return NULL; } #endif Py_C_Function( mxQueue_clear, "clear()") { Py_NoArgsCheck(); if (mxQueue_Clear(queue)) goto onError; Py_ReturnNone(); onError: return NULL; } #if 0 Py_C_Function( mxQueue_as_tuple, "as_tuple()") { register PyObject *v; Py_NoArgsCheck(); v = mxQueue_AsTuple(queue); if (v == NULL) goto onError; return v; onError: return NULL; } Py_C_Function( mxQueue_as_list, "as_list()") { register PyObject *v; Py_NoArgsCheck(); v = mxQueue_AsList(queue); if (v == NULL) goto onError; return v; onError: return NULL; } Py_C_Function( mxQueue_resize, "resize([size=len(queue)])") { Py_ssize_t size = mxQueue_Length(queue); Py_GetArg("|"Py_SSIZE_T_PARSERMARKER,size); if (mxQueue_Resize(queue,size)) goto onError; Py_ReturnNone(); onError: return NULL; } #endif #undef queue /* --- slots --- */ static int mxQueue_Print(PyObject *obj, FILE *fp, int flags) { mxQueueObject *self = (mxQueueObject *)obj; Py_ssize_t i, head = self->head, tail = self->tail, size = self->size; fprintf(fp, "Queue["); #if 1 for (i = tail; i != head; i = (i+1) % size) { if (i != tail) fprintf(fp, ", "); if (PyObject_Print(self->array[i], fp, flags)) goto onError; } #else /* To ease debugging... */ for (i = 0; i < size; i++) { if (i > 0) fprintf(fp, ", "); fprintf(fp, "0x%lx", (long)self->array[i]); } #endif fprintf(fp, "]"); return 0; onError: return -1; } static PyObject *mxQueue_Repr(PyObject *obj) { mxQueueObject *self = (mxQueueObject *)obj; char s[256]; #if 1 sprintf(s,"", (long)self); #else /* To ease debugging... */ sprintf(s,"", (long)self, self->head,self->tail,self->size,mxQueue_Length(self)); #endif return PyString_FromString(s); } static int mxQueue_Compare(PyObject *left, PyObject *right) { mxQueueObject *v = (mxQueueObject *)left; mxQueueObject *w = (mxQueueObject *)right; Py_ssize_t v_len = _mxQueue_Length(v); Py_ssize_t w_len = _mxQueue_Length(w); Py_ssize_t len = min(v_len,w_len); Py_ssize_t i,j,k; for (i = v->tail, j = w->tail, k = 0; k < len; k++, i = (i+1) % v->size, j = (j+1) % w->size) { int cmp = PyObject_Compare(v->array[i],w->array[j]); if (cmp != 0) return cmp; } if (v_len < w_len) return -1; else if (v_len == w_len) return 0; else return 1; } static PyObject *mxQueue_Getattr(PyObject *obj, char *name) { return Py_FindMethod(mxQueue_Methods, obj, name); } static int mxQueue_NonZero(PyObject *obj) { mxQueueObject *self = (mxQueueObject *)obj; return self->head != self->tail; } /* Undocumented feature: queue << x does queue.push(x) and returns queue queue >> 1 return queue.pop() queue >> n returns queue.pop_many(n) To make this work, we need a few hacks... :-( We make anything coerce and then check the arguments to the number slot functions. Unfortunately this only works if the left hand argument is a Queue. If the left hand argument is something else, you better press your thumbs and duck cover... (Na, it's not that dangerous, but the results are pretty much undefined.) */ static int mxQueue_Coerce(PyObject **pv, PyObject **pw) { if (_mxQueue_Check(*pv)) { /* Anything goes... */ Py_INCREF(*pv); Py_INCREF(*pw); DPRINTF("Queue coerced ok\n"); return 0; } DPRINTF("Queue coerce failed\n"); return 1; } static PyObject *mxQueue_LeftShift(PyObject *left, PyObject *right) { mxQueueObject *self = (mxQueueObject *)left; /* Queue << Object -> (Queue.push(Object),Queue) */ mxQueue_Push(self, right); Py_INCREF(self); return left; } static PyObject *mxQueue_RightShift(PyObject *left, PyObject *right) { mxQueueObject *self = (mxQueueObject *)left; long n; /* Queue >> Integer -> Queue.pop_many(Integer) */ if (!PyInt_Check(right)) Py_Error(PyExc_TypeError, "right side of >> must an integer"); n = PyInt_AS_LONG(right); /* XXX Doesn't work yet... */ n = 1; #if 0 Py_Assert(n > 0, PyExc_TypeError, "you can only pop 1 or more entries"); if (n == 1) return mxQueue_Pop(self); else return mxQueue_PopMany(self, n); #else return mxQueue_Pop(self); #endif onError: return NULL; } /* Python Type Tables */ static PySequenceMethods mxQueue_TypeAsSequence = { mxQueue_Length, /*sq_length*/ 0, /*sq_concat*/ 0, /*sq_repeat*/ 0, /*sq_item*/ 0, /*sq_slice*/ 0, /*sq_ass_item*/ 0, /*sq_ass_slice*/ }; static PyNumberMethods mxQueue_TypeAsNumber = { /* These slots are not NULL-checked, so we must provide dummy functions */ notimplemented2, /*nb_add*/ notimplemented2, /*nb_subtract*/ notimplemented2, /*nb_multiply*/ notimplemented2, /*nb_divide*/ notimplemented2, /*nb_remainder*/ notimplemented2, /*nb_divmod*/ notimplemented3, /*nb_power*/ notimplemented1, /*nb_negative*/ notimplemented1, /*nb_positive*/ /* Everything below this line EXCEPT nb_nonzero (!) is NULL checked */ 0, /*nb_absolute*/ mxQueue_NonZero, /*nb_nonzero*/ 0, /*nb_invert*/ mxQueue_LeftShift, /*nb_lshift*/ mxQueue_RightShift, /*nb_rshift*/ notimplemented2, /*nb_and*/ notimplemented2, /*nb_xor*/ notimplemented2, /*nb_or*/ mxQueue_Coerce, /*nb_coerce*/ 0, /*nb_int*/ 0, /*nb_long*/ 0, /*nb_float*/ 0, /*nb_oct*/ 0, /*nb_hex*/ }; statichere PyTypeObject mxQueue_Type = { PyObject_HEAD_INIT(0) /* init at startup ! */ 0, /*ob_size*/ "Queue", /*tp_name*/ sizeof(mxQueueObject), /*tp_basicsize*/ 0, /*tp_itemsize*/ /* slots */ (destructor)mxQueue_Free, /*tp_dealloc*/ mxQueue_Print, /*tp_print*/ mxQueue_Getattr, /*tp_getattr*/ 0, /*tp_setattr*/ mxQueue_Compare, /*tp_compare*/ mxQueue_Repr, /*tp_repr*/ &mxQueue_TypeAsNumber, /*tp_as_number*/ &mxQueue_TypeAsSequence, /*tp_as_sequence*/ 0, /*tp_as_mapping*/ 0, /*tp_hash*/ 0, /*tp_call*/ 0, /*tp_str*/ 0, /*tp_getattro*/ 0, /*tp_setattro*/ 0, /*tp_as_buffer*/ Py_TPFLAGS_DEFAULT, /*tp_flags*/ 0, /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ 0, /* tp_richcompare */ 0, /* tp_weaklistoffset */ 0, /* tp_iter */ 0, /* tp_iternext */ mxQueue_Methods, /* tp_methods */ 0, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ 0, /* tp_init */ 0, /* tp_alloc */ 0, /* tp_new */ 0, /* tp_free */ }; /* Python Method Table */ statichere PyMethodDef mxQueue_Methods[] = { Py_MethodListEntrySingleArg("push",mxQueue_push), Py_MethodListEntryNoArgs("pop",mxQueue_pop), Py_MethodListEntryNoArgs("clear",mxQueue_clear), #if 0 Py_MethodListEntrySingleArg("push_many",mxQueue_push_many), Py_MethodListEntrySingleArg("pop_many",mxQueue_pop_many), Py_MethodListEntryNoArgs("as_tuple",mxQueue_as_tuple), Py_MethodListEntryNoArgs("as_list",mxQueue_as_list), Py_MethodListEntry("resize",mxQueue_resize), #endif {NULL,NULL} /* end of list */ }; /* --- Other functions ----------------------------------------------------- */ #if 0 Py_C_Function( mxQueue_QueueFromSequence, "QueueFromSequence(seq)") { PyObject *v; PyObject *queue; Py_GetArg("O",v); Py_Assert(PySequence_Check(v), PyExc_TypeError, "argument must be a sequence"); queue = (PyObject *)mxQueue_FromSequence(v); if (queue == NULL) goto onError; return queue; onError: return NULL; } #endif /* --- module init --------------------------------------------------------- */ /* Python Method Table */ static PyMethodDef Module_methods[] = { Py_MethodListEntry("Queue",mxQueue_new), #if 0 Py_MethodListEntry("QueueFromSequence",mxQueue_QueueFromSequence), #endif {NULL,NULL} /* end of list */ }; /* C API table */ static mxQueueModule_APIObject mxQueueModuleAPI = { &mxQueue_Type, mxQueue_New, mxQueue_Push, mxQueue_Pop, mxQueue_Clear, _mxQueue_Length #if 0 ,mxQueue_FromSequence, mxQueue_AsTuple, mxQueue_AsList, mxQueue_PopMany, mxQueue_PushMany #endif }; /* Cleanup function */ static void mxQueueModule_Cleanup(void) { /* Reset mxQueue_Initialized flag */ mxQueue_Initialized = 0; } /* create PyMethodObjects and register them in the module's dict */ MX_EXPORT(void) initmxQueue(void) { PyObject *module, *moddict, *api; if (mxQueue_Initialized) Py_Error(PyExc_SystemError, "can't initialize "MXQUEUE_MODULE" more than once"); /* Init type objects */ PyType_Init(mxQueue_Type); /* create module */ module = Py_InitModule4(MXQUEUE_MODULE, /* Module name */ Module_methods, /* Method list */ Module_docstring, /* Module doc-string */ (PyObject *)NULL, /* always pass this as *self */ PYTHON_API_VERSION); /* API Version */ if (module == NULL) goto onError; /* Register cleanup function */ if (Py_AtExit(mxQueueModule_Cleanup)) { /* XXX what to do if we can't register that function ??? */ DPRINTF("* Failed to register mxQueue cleanup function\n"); } /* Add some constants to the module's dict */ moddict = PyModule_GetDict(module); PyDict_SetItemString(moddict, "__version__", PyString_FromString(MXQUEUE_VERSION)); /* Errors */ if (!(mxQueue_Error = insexc(moddict,"Error",PyExc_IndexError))) goto onError; if (!(mxQueue_EmptyError = insexc(moddict,"EmptyError",mxQueue_Error))) goto onError; /* Type objects */ Py_INCREF(&mxQueue_Type); PyDict_SetItemString(moddict, "QueueType", (PyObject *)&mxQueue_Type); /* Export C API */ api = PyCObject_FromVoidPtr((void *)&mxQueueModuleAPI, NULL); if (api == NULL) goto onError; PyDict_SetItemString(moddict,MXQUEUE_MODULE"API",api); Py_DECREF(api); /* We are now initialized */ mxQueue_Initialized = 1; onError: /* Check for errors and report them */ if (PyErr_Occurred()) Py_ReportModuleInitError(MXQUEUE_MODULE); return; } egenix-mx-base-3.2.7/mx/Queue/mxQueue/mxQueue.def0000664000175000017500000000002506746336463021502 0ustar lemburglemburgEXPORTS initmxQueue egenix-mx-base-3.2.7/mx/Queue/mxQueue/mxQueue.h0000664000175000017500000001112112133021442021141 0ustar lemburglemburg#ifndef MXQUEUE_H #define MXQUEUE_H /* mxQueue -- A queue implementation Copyright (c) 1998-2000, Marc-Andre Lemburg; mailto:mal@lemburg.com Copyright (c) 2000-2013, eGenix.com Software GmbH; mailto:info@egenix.com See the documentation for further copyright information or contact the author (mailto:mal@lemburg.com). */ /* The extension's name; must be the same as the init function's suffix */ #define MXQUEUE_MODULE "mxQueue" /* Name of the package or module that provides the extensions C API. If the extension is used inside a package, provide the complete import path. */ #define MXQUEUE_API_MODULE "mx.Queue" /* --- No servicable parts below this line ----------------------*/ /* Include generic mx extension header file */ #include "mxh.h" /* Include Python compatibility header file */ #include "mxpyapi.h" #ifdef MX_BUILDING_MXQUEUE # define MXQUEUE_EXTERNALIZE MX_EXPORT #else # define MXQUEUE_EXTERNALIZE MX_IMPORT #endif #ifdef __cplusplus extern "C" { #endif /* --- Queue Object ------------------------------------------*/ typedef struct { PyObject_HEAD Py_ssize_t size; /* Number of items allocated */ Py_ssize_t head; /* Index of head element */ Py_ssize_t tail; /* Index of tail element */ PyObject **array; /* Pointer to the queue array */ } mxQueueObject; /* Fast access */ #define mxQueue_GET_SIZE(v) \ ((((mxQueueObject *)(v))->head - ((mxQueueObject *)(v))->tail) \ % ((mxQueueObject *)(v))->size) #define mxQueue_EMPTY(v) \ (((((mxQueueObject *)(v))->head - ((mxQueueObject *)(v))->tail)) == 0) /* Type checking macro */ #define mxQueue_Check(v) \ (((mxQueueObject *)(v))->ob_type == mxQueue.Queue_Type) /* --- C API ----------------------------------------------------*/ /* C API for usage by other Python modules */ typedef struct { /* Type object for Queue() */ PyTypeObject *Queue_Type; /* Create a new empty queue object with at least size entries alredy allocated. */ mxQueueObject *(*mxQueue_New)(Py_ssize_t size); /* Push a Python object onto the queue. The reference count is increased by one. Queues only grow, they never shrink again. */ int (*mxQueue_Push)(mxQueueObject *queue, PyObject *v); /* Pop an object from the queue. Ownership is passed to the caller. Note: This doesn't cause the allocated queue size to change. */ PyObject *(*mxQueue_Pop)(mxQueueObject *queue); /* Clear the queue. */ int (*mxQueue_Clear)(mxQueueObject *queue); /* Get the number of entries in the queue. */ Py_ssize_t (*mxQueue_Length)(mxQueueObject *queue); /* Create a new empty queue object from the sequence v */ mxQueueObject *(*mxQueue_FromSequence)(PyObject *v); /* Return a the queues content as tuple. */ PyObject *(*mxQueue_AsTuple)(mxQueueObject *queue); /* Return a the queues content as list. */ PyObject *(*mxQueue_AsList)(mxQueueObject *queue); /* Pop the topmost n entries from the queue and return them as tuple. If there are not enough entries only the available ones are returned. */ PyObject *(*mxQueue_PopMany)(mxQueueObject *queue, Py_ssize_t n); /* Push the entries from sequence onto the queue. */ int (*mxQueue_PushMany)(mxQueueObject *queue, PyObject *sequence); } mxQueueModule_APIObject; #ifndef MX_BUILDING_MXQUEUE /* Interfacestructure to C API for other modules. Call mxQueue_ImportModuleAPI() to initialize this structure. After that usage is simple: PyObject *v; v = mxQueue.Queue_New(0); if (!v) goto onError; ... */ static mxQueueModule_APIObject mxQueue; /* You *must* call this before using any of the functions in mxQueue and check its outcome; otherwise all accesses will result in a segfault. Returns 0 on success. */ #ifndef DPRINTF # define DPRINTF if (0) printf #endif static int mxQueue_ImportModuleAndAPI(void) { PyObject *mod, *v = 0; void *api; DPRINTF("Importing the %s C API...\n",MXQUEUE_API_MODULE); mod = PyImport_ImportModule(MXQUEUE_API_MODULE); if (mod == NULL) goto onError; DPRINTF(" module found\n"); v = PyObject_GetAttrString(mod,MXQUEUE_MODULE"API"); if (v == NULL) goto onError; Py_CLEAR(mod); DPRINTF(" API object found\n"); api = PyCObject_AsVoidPtr(v); if (api == NULL) goto onError; Py_CLEAR(v); memcpy(&mxQueue,api,sizeof(mxQueue)); DPRINTF(" API object initialized.\n"); return 0; onError: DPRINTF(" not found.\n"); Py_XDECREF(mod); Py_XDECREF(v); return -1; } #endif /* EOF */ #ifdef __cplusplus } #endif #endif egenix-mx-base-3.2.7/mx/Queue/mxQueue/mxh.h0000664000175000017500000000320212133021412020302 0ustar lemburglemburg#ifndef MXH_H #define MXH_H /* mxh.h -- Generic header file for all mx Extenstions This file should be included by every mx Extension header file and the C file. Copyright (c) 2000, Marc-Andre Lemburg; mailto:mal@lemburg.com Copyright (c) 2000-2013, eGenix.com Software GmbH; mailto:info@egenix.com See the documentation for further copyright information or contact the author. */ /* Macros to control export and import of DLL symbols. We use our own definitions since Python's don't allow specifying both imported and exported symbols at the same time; these defines haven't been thoroughly tested yet, patches are most welcome :-) */ /* Macro to "mark" a symbol for DLL export */ #if (defined(_MSC_VER) && _MSC_VER > 850 \ || defined(__MINGW32__) || defined(__CYGWIN) || defined(__BEOS__)) # ifdef __cplusplus # define MX_EXPORT(type) extern "C" type __declspec(dllexport) # else # define MX_EXPORT(type) extern type __declspec(dllexport) # endif #elif defined(__WATCOMC__) # define MX_EXPORT(type) extern type __export #elif defined(__IBMC__) # define MX_EXPORT(type) extern type _Export #else # define MX_EXPORT(type) extern type #endif /* Macro to "mark" a symbol for DLL import */ #if defined(__BORLANDC__) # define MX_IMPORT(type) extern type __import #elif (defined(_MSC_VER) && _MSC_VER > 850 \ || defined(__MINGW32__) || defined(__CYGWIN) || defined(__BEOS__)) # ifdef __cplusplus # define MX_IMPORT(type) extern "C" type __declspec(dllimport) # else # define MX_IMPORT(type) extern type __declspec(dllimport) # endif #else # define MX_IMPORT(type) extern type #endif /* EOF */ #endif egenix-mx-base-3.2.7/mx/Queue/mxQueue/mxpyapi.h0000664000175000017500000003356612133300665021227 0ustar lemburglemburg#ifndef MXPYAPI_H #define MXPYAPI_H /* mxpyapi.h This header file includes some new APIs that are not available in older API versions, yet are used by the mx-Extensions. Copyright (c) 2000, Marc-Andre Lemburg; mailto:mal@lemburg.com Copyright (c) 2000-2013, eGenix.com Software GmbH; mailto:info@egenix.com */ /* Emulate PY_VERSION_HEX for older Python versions. */ #ifndef PY_VERSION_HEX # if PYTHON_API_VERSION == 1007 # define PY_VERSION_HEX 0x010500F0 # endif # if PYTHON_API_VERSION == 1006 # define PY_VERSION_HEX 0x010400F0 # endif # if PYTHON_API_VERSION < 1006 # define PY_VERSION_HEX 0 # endif #endif #ifdef __cplusplus extern "C" { #endif /* ---------------------------------------------------------------- Python 2.7.4 ---------------------------------------------------------------- */ #if PY_VERSION_HEX >= 0x02070400 && PY_VERSION_HEX < 0x02070500 /* Python 2.7.4 has a bug that causes Py_DECREF() to fail for dictionaries in module cleanup routines. See http://bugs.python.org/issue17703 */ #define mxPy_DECREF_Unsafe_AtExit() 1 #else /* Apply a runtime check */ #define mxPy_DECREF_Unsafe_AtExit() \ (strncmp(Py_GetVersion(), "2.7.4", 5) == 0) #endif /* ---------------------------------------------------------------- Python 2.7 and above: ---------------------------------------------------------------- */ #if PY_VERSION_HEX >= 0x02070000 /* Python 2.7 introduces the backported memoryview object */ #define HAVE_PYTHON_MEMORYVIEW #else #endif /* ---------------------------------------------------------------- Python 2.6 and above: ---------------------------------------------------------------- */ #if PY_VERSION_HEX >= 0x02060000 /* Python 2.6 introduces new buffer interface slots based on the Py_buffer interface. */ #define HAVE_PYTHON_PY_BUFFER #else #endif /* ---------------------------------------------------------------- Python 2.5 and above: ---------------------------------------------------------------- */ #if PY_VERSION_HEX >= 0x02050000 /* Parser marker */ #define Py_SSIZE_T_PARSERMARKER "n" #else /* Python 2.5 introduced a new type for index integers which is not available in earlier versions. Unfortunately, the new type has 64 bits on 64-bit architectures like AMD64, whereas integers still have 32 bits, which causes problems with output parameters. Along with the new type a few type slots were changed and a new parser marker introduced. */ #define Py_ssize_t int /* Parser marker */ #define Py_SSIZE_T_PARSERMARKER "i" /* Integer APIs */ #define PyInt_FromSize_t(x) PyInt_FromLong((long)(x)) #define PyInt_FromSsize_t(x) PyInt_FromLong((long)(x)) #define PyInt_AsSsize_t(x) ((Py_ssize_t)PyInt_AsLong(x)) #endif /* ---------------------------------------------------------------- Python 2.4 and above: ---------------------------------------------------------------- */ #if PY_VERSION_HEX >= 0x02040000 #else #endif /* ---------------------------------------------------------------- Python 2.3 and above: ---------------------------------------------------------------- */ #if PY_VERSION_HEX >= 0x02030000 #else /* These were introduced in Python 2.3: */ # define PY_LONG_LONG LONG_LONG /* Boolean APIs */ #define PyBool_FromLong(x) PyInt_FromLong((long)(x)?1:0) #endif /* ---------------------------------------------------------------- Python 2.2 and above: ---------------------------------------------------------------- */ #if PY_VERSION_HEX >= 0x02020000 # define HAVE_SUBCLASSABLE_TYPES 1 # define HAVE_INTERPRETER_DLOPENFLAGS 1 #else /* These were introduced in Python 2.2: */ # define PyString_CheckExact PyString_Check # define PyInt_CheckExact PyInt_Check # define PyFloat_CheckExact PyFloat_Check # define PyLong_CheckExact PyLong_Check # define PyExc_StopIteration PyExc_IndexError /* Not needed in Python 2.1 and below, so simply ignore the API */ # define PyType_Ready(x) #endif /* ---------------------------------------------------------------- Python 1.6 and 2.0 only: ---------------------------------------------------------------- */ /* Disabled: we don't support Python 1.6 and don't have a need for this API in any of the mx Tools (yet). */ #if 0 #if PY_VERSION_HEX >= 0x01060000 && PY_VERSION_HEX < 0x02010000 static PyObject * PyObject_Unicode(PyObject *v) { PyObject *res; if (v == NULL) res = PyString_FromString(""); else if (PyUnicode_Check(v)) { Py_INCREF(v); return v; } else if (PyString_Check(v)) res = v; else if (v->ob_type->tp_str != NULL) res = (*v->ob_type->tp_str)(v); else { PyObject *func; if (!PyInstance_Check(v) || (func = PyObject_GetAttrString(v, "__str__")) == NULL) { PyErr_Clear(); res = PyObject_Repr(v); } else { res = PyEval_CallObject(func, (PyObject *)NULL); Py_DECREF(func); } } if (res == NULL) return NULL; if (!PyUnicode_Check(res)) { PyObject* str; str = PyUnicode_FromObject(res); Py_DECREF(res); if (str) res = str; else return NULL; } return res; } #endif #endif /* ---------------------------------------------------------------- Python 2.0 alpha + betas: ---------------------------------------------------------------- */ #if PY_VERSION_HEX >= 0x02000000 && PY_VERSION_HEX < 0x020000F0 # if defined(PyBuffer_Check) && !defined(HAVE_PYTHON_BUFFEROBJECTS) # define HAVE_PYTHON_BUFFEROBJECTS # endif #ifndef Py_PROTO # define Py_PROTO(args) args #endif #endif /* ---------------------------------------------------------------- Python 1.6 and later: ---------------------------------------------------------------- */ #if PY_VERSION_HEX >= 0x01060000 #if defined(PyUnicode_Check) && !defined(HAVE_UNICODE) # define HAVE_UNICODE #endif #endif #if PY_VERSION_HEX >= 0x02020000 #if defined(HAVE_UNICODE) && !defined(Py_USING_UNICODE) # undef HAVE_UNICODE #endif #endif #ifndef HAVE_UNICODE # undef PyUnicode_Check # define PyUnicode_Check(obj) 0 #endif /* ---------------------------------------------------------------- Python < 1.6: ---------------------------------------------------------------- */ #if PY_VERSION_HEX < 0x01060000 #if !defined(PyObject_DEL) # define PyObject_DEL(x) free(x) # define PyObject_Del(x) free(x) #endif #endif /* ---------------------------------------------------------------- Python >= 1.5.2: ---------------------------------------------------------------- */ #if PY_VERSION_HEX >= 0x010502F0 # if defined(PyBuffer_Check) && !defined(HAVE_PYTHON_BUFFEROBJECTS) # define HAVE_PYTHON_BUFFEROBJECTS # endif #endif /* ---------------------------------------------------------------- Python >= 1.5.2 and prior to 2.0a1 ---------------------------------------------------------------- */ #if PY_VERSION_HEX >= 0x010502F0 && PY_VERSION_HEX < 0x02000000 /* Takes an arbitrary object which must support the (character, single segment) buffer interface and returns a pointer to a read-only memory location useable as character based input for subsequent processing. buffer and buffer_len are only set in case no error occurrs. Otherwise, -1 is returned and an exception set. */ static int PyObject_AsCharBuffer(PyObject *obj, const char **buffer, int *buffer_len) { PyBufferProcs *pb = obj->ob_type->tp_as_buffer; const char *pp; int len; if ( pb == NULL || pb->bf_getcharbuffer == NULL || pb->bf_getsegcount == NULL ) { PyErr_SetString(PyExc_TypeError, "expected a character buffer object"); goto onError; } if ( (*pb->bf_getsegcount)(obj,NULL) != 1 ) { PyErr_SetString(PyExc_TypeError, "expected a single-segment buffer object"); goto onError; } len = (*pb->bf_getcharbuffer)(obj,0,&pp); if (len < 0) goto onError; *buffer = pp; *buffer_len = len; return 0; onError: return -1; } /* Same as PyObject_AsCharBuffer() except that this API expects (readable, single segment) buffer interface and returns a pointer to a read-only memory location which can contain arbitrary data. buffer and buffer_len are only set in case no error occurrs. Otherwise, -1 is returned and an exception set. */ static int PyObject_AsReadBuffer(PyObject *obj, const void **buffer, int *buffer_len) { PyBufferProcs *pb = obj->ob_type->tp_as_buffer; void *pp; int len; if ( pb == NULL || pb->bf_getreadbuffer == NULL || pb->bf_getsegcount == NULL ) { PyErr_SetString(PyExc_TypeError, "expected a readable buffer object"); goto onError; } if ( (*pb->bf_getsegcount)(obj,NULL) != 1 ) { PyErr_SetString(PyExc_TypeError, "expected a single-segment buffer object"); goto onError; } len = (*pb->bf_getreadbuffer)(obj,0,&pp); if (len < 0) goto onError; *buffer = pp; *buffer_len = len; return 0; onError: return -1; } /* Takes an arbitrary object which must support the (writeable, single segment) buffer interface and returns a pointer to a writeable memory location in buffer of size buffer_len. buffer and buffer_len are only set in case no error occurrs. Otherwise, -1 is returned and an exception set. */ static int PyObject_AsWriteBuffer(PyObject *obj, void **buffer, int *buffer_len) { PyBufferProcs *pb = obj->ob_type->tp_as_buffer; void*pp; int len; if ( pb == NULL || pb->bf_getwritebuffer == NULL || pb->bf_getsegcount == NULL ) { PyErr_SetString(PyExc_TypeError, "expected a writeable buffer object"); goto onError; } if ( (*pb->bf_getsegcount)(obj,NULL) != 1 ) { PyErr_SetString(PyExc_TypeError, "expected a single-segment buffer object"); goto onError; } len = (*pb->bf_getwritebuffer)(obj,0,&pp); if (len < 0) goto onError; *buffer = pp; *buffer_len = len; return 0; onError: return -1; } #endif /* Python Version in [1.5.2b2, 2.0) */ /* ---------------------------------------------------------------- Python 1.5.2b1 and older: ---------------------------------------------------------------- */ #if PY_VERSION_HEX <= 0x010502B1 /* These are missing from PC/python_nt.def and thus didn't get included in python1.5.lib on Windows platforms. */ #ifdef MS_WIN32 # define PyString_InternInPlace(x) # define PyString_InternFromString(x) PyString_FromString(x) #endif #endif /* Python Version <= 1.5.2b1 */ /* ---------------------------------------------------------------- Python 1.5.2a2 and older: ---------------------------------------------------------------- */ #if PY_VERSION_HEX <= 0x010502A2 extern long PyOS_strtol Py_PROTO((const char *, char **, int)); #endif /* Python Version <= 1.5.2a2 */ /* ---------------------------------------------------------------- Python 1.5.2a1 and older: ---------------------------------------------------------------- */ #if PY_VERSION_HEX <= 0x010502A1 #ifndef PyList_SET_ITEM # define PyList_SET_ITEM(l,i,w) PyList_GET_ITEM(l,i) = w #endif #endif /* Python Version < 1.5.2a1 */ /* ---------------------------------------------------------------- Prior to Python 1.5: ---------------------------------------------------------------- */ #if PY_VERSION_HEX < 0x010500F0 /* New in Python1.5: */ # undef PyString_AS_STRING # define PyString_AS_STRING(op) (((PyStringObject *)(op))->ob_sval) # define PyString_GET_SIZE(op) (((PyStringObject *)(op))->ob_size) # define PyTuple_GET_SIZE(op) (((PyTupleObject *)(op))->ob_size) # define PyList_GET_SIZE(op) (((PyListObject *)(op))->ob_size) /* Changed since 1.4 */ # undef PyList_GET_ITEM # define PyList_GET_ITEM(op, i) (((PyListObject *)(op))->ob_item[i]) # undef PyInt_AS_LONG # define PyInt_AS_LONG(op) (((PyIntObject *)(op))->ob_ival) # undef PyFloat_AS_DOUBLE # define PyFloat_AS_DOUBLE(op) (((PyFloatObject *)(op))->ob_fval) /* This function is taken from error.c in Python 1.5... Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, The Netherlands. All Rights Reserved Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation, and that the names of Stichting Mathematisch Centrum or CWI or Corporation for National Research Initiatives or CNRI not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. While CWI is the initial source for this software, a modified version is made available by the Corporation for National Research Initiatives (CNRI) at the Internet address ftp://ftp.python.org. STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifdef HAVE_STDARG_PROTOTYPES PyObject * PyErr_Format(PyObject *exception, const char *format, ...) #else PyObject * PyErr_Format(exception, format, va_alist) PyObject *exception; const char *format; va_dcl #endif { va_list vargs; char buffer[500]; /* Caller is responsible for limiting the format */ #ifdef HAVE_STDARG_PROTOTYPES va_start(vargs, format); #else va_start(vargs); #endif vsprintf(buffer, format, vargs); PyErr_SetString(exception, buffer); return NULL; } /* Python 1.5 uses instances as exceptions, the 1.4 API only knows about strings. */ #define PyErr_NewException(name,base,dict) PyString_FromString(fullname); /* Missing from rename2.h in Python 1.4 */ #ifndef PyVarObject # define PyVarObject varobject #endif #endif /* Python Version < 1.5 */ #ifdef __cplusplus } #endif /* EOF */ #endif egenix-mx-base-3.2.7/mx/Queue/mxQueue/mxstdlib.h0000664000175000017500000002612712133021413021350 0ustar lemburglemburg#ifndef MXSTDLIB_H #define MXSTDLIB_H /* Standard stuff I use often -- not Python specific Copyright (c) 2000, Marc-Andre Lemburg; mailto:mal@lemburg.com Copyright (c) 2000-2013, eGenix.com Software GmbH; mailto:info@egenix.com See the documentation for further copyright information or contact the author. */ /* Standard includes */ #include #include #include #include #include #include /* Limits */ #ifdef HAVE_LIMITS_H # include #else # ifndef INT_MAX # define INT_MAX 2147483647 # endif # ifndef LONG_MAX # define LONG_MAX INT_MAX # endif #endif /* Disable a few MS VC++ warnings that were introduced in VS 2005, e.g. warning C4996: 'getenv': This function or variable may be unsafe. Consider using _dupenv_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. Note that #define _CRT_SECURE_NO_WARNINGS 1 does not work for some reason. You have to use the #pragma warning() to disable warnings inside a header file. */ #if defined(_MSC_VER) && (_MSC_VER >= 1400) # pragma warning(disable:4996) #endif /* --- My own macros for memory allocation... --------------------------- */ /* Define this macro if the code should use C malloc */ /* #define MAL_USE_C_MALLOC */ /* Define this macro if the code should use Python's pymalloc */ /* #define MAL_USE_PYMALLOC */ /* Define this macro if the code should use pymalloc and uses the cnew()/cnewstruct() macros. This is needed to only enable the helper functions when using those macros in pymalloc mode. */ /* #define MAL_USING_CNEW */ /* Decide which variant to use, if no explicit choice was made: C malloc or pymalloc */ #ifdef MAL_USE_C_MALLOC /* Force use of C malloc */ #elif !defined(MAL_USE_PYMALLOC) && defined (PYTHON_API_VERSION) /* Default to using the Python pymalloc in case we're compiling a Python extension */ # define MAL_USE_PYMALLOC #endif #ifndef MAL_USE_PYMALLOC /* --- Use C malloc for memory allocation --- */ # ifdef MAL_MEM_DEBUG /* Include debug information for tracing memory leaks */ # define newstruct(x) \ (mxDebugPrintf("* malloc for struct "#x" (%s:%i)\n",__FILE__,__LINE__),\ (x *)malloc(sizeof(x))) # define cnewstruct(x) \ (mxDebugPrintf("* calloc for struct "#x" (%s:%i)\n",c,__FILE__,__LINE__),\ (x *)calloc(sizeof(x),1)) # define new(x,c) \ (mxDebugPrintf("* malloc for "#c"=%i '"#x"'s (%s:%i)\n",c,__FILE__,__LINE__),\ (x *)malloc(sizeof(x)*(c))) # define cnew(x,c) \ (mxDebugPrintf("* calloc for "#c"=%i '"#x"'s (%s:%i)\n",c,__FILE__,__LINE__),\ (x *)calloc((c),sizeof(x))) # define resize(var,x,c) \ (mxDebugPrintf("* realloc array "#var" ("#x") at %X to size "#c"=%i (%s:%i)\n",var,c,__FILE__,__LINE__),\ (x *)realloc((void*)(var),sizeof(x)*(c))) # define varresize(var,x,bytes) \ (mxDebugPrintf("* realloc var "#var" ("#x") at %X to %i bytes (%s:%i)\n",var,bytes,__FILE__,__LINE__),\ (x *)realloc((void*)(var),(bytes))) # define free(x) \ (mxDebugPrintf("* freeing "#x" at %X (%s:%i)\n",x,__FILE__,__LINE__),\ free((void*)(x))) # else /* Non-debug versions of the macros */ # define newstruct(x) ((x *)malloc(sizeof(x))) # define cnewstruct(x) ((x *)calloc(sizeof(x),1)) # define new(x,c) ((x *)malloc(sizeof(x)*(c))) # define cnew(x,c) ((x *)calloc((c),sizeof(x))) # define resize(var,x,c) ((x *)realloc((void*)(var),sizeof(x)*(c))) # define varresize(var,x,bytes) ((x *)realloc((void*)(var),(bytes))) # define free(x) (free((void*)(x))) # endif #else /* --- Use Python pymalloc for memory allocation --- */ # ifdef MAL_USING_CNEW /* Helper needed since Python doesn't define a calloc() interface. */ static void *mx_PyObject_CALLOC(register size_t size) { register void *mem; if (size == 0) return NULL; mem = PyObject_MALLOC(size); if (mem) memset(mem, 0, size); return mem; } # endif # ifndef MAL_MEM_DEBUG /* Non-debug versions of the macros */ # define newstruct(x) ((x *)PyObject_MALLOC(sizeof(x))) # ifdef MAL_USING_CNEW # define cnewstruct(x) ((x *)mx_PyObject_CALLOC(sizeof(x))) # endif # define new(x,c) ((x *)PyObject_MALLOC(sizeof(x)*(c))) # ifdef MAL_USING_CNEW # define cnew(x,c) ((x *)mx_PyObject_CALLOC(sizeof(x)*(c))) # endif # define resize(var,x,c) ((x *)PyObject_REALLOC((void*)(var),sizeof(x)*(c))) # define varresize(var,x,bytes) ((x *)PyObject_REALLOC((void*)(var),(bytes))) # define free(x) (PyObject_FREE((void*)(x))) # else /* Debug versions of the macros */ # define newstruct(x) \ (mxDebugPrintf("* malloc for struct "#x" (%s:%i)\n",__FILE__,__LINE__), \ (x *)PyObject_MALLOC(sizeof(x))) # ifdef MAL_USING_CNEW # define cnewstruct(x) \ (mxDebugPrintf("* calloc for struct "#x" (%s:%i)\n",c,__FILE__,__LINE__), \ ((x *)mx_PyObject_CALLOC(sizeof(x)))) # endif # define new(x,c) \ (mxDebugPrintf("* malloc for "#c"=%i '"#x"'s (%s:%i)\n",c,__FILE__,__LINE__), \ ((x *)PyObject_MALLOC(sizeof(x)*(c)))) # ifdef MAL_USING_CNEW # define cnew(x,c) \ (mxDebugPrintf("* calloc for "#c"=%i '"#x"'s (%s:%i)\n",c,__FILE__,__LINE__), \ ((x *)mx_PyObject_CALLOC(sizeof(x)*(c)))) # endif # define resize(var,x,c) \ (mxDebugPrintf("* realloc array "#var" ("#x") at %X to size "#c"=%i (%s:%i)\n",var,c,__FILE__,__LINE__), \ ((x *)PyObject_REALLOC((void*)(var),sizeof(x)*(c)))) # define varresize(var,x,bytes) \ (mxDebugPrintf("* realloc var "#var" ("#x") at %X to %i bytes (%s:%i)\n",var,bytes,__FILE__,__LINE__), \ ((x *)PyObject_REALLOC((void*)(var),(bytes)))) # define free(x) \ (mxDebugPrintf("* freeing "#x" at %X (%s:%i)\n",x,__FILE__,__LINE__), \ (PyObject_FREE((void*)(x)))) # endif #endif /* --- Debugging output ------------------------------------------------- */ /* Use the flag MAL_DEBUG to enable debug processing. The flag MAL_DEBUG_WITH_PYTHON can be used to indicate that the object file will be linked with Python, so we can use Python APIs for the debug processing here. */ #ifdef MAL_DEBUG_WITH_PYTHON # ifndef PYTHON_API_VERSION # error "mx.h must be included when compiling with MAL_DEBUG_WITH_PYTHON" # endif # ifndef MAL_DEBUG # define MAL_DEBUG # endif #else # if defined(PYTHON_API_VERSION) && defined(MAL_DEBUG) # define MAL_DEBUG_WITH_PYTHON # endif #endif /* Indicator for the availability of these interfaces: */ #define HAVE_MAL_DEBUG /* Name of the environment variable defining the log file name to be used: */ #ifndef MAL_DEBUG_OUTPUTFILE_ENV_VARIABLE # define MAL_DEBUG_OUTPUTFILE_ENV_VARIABLE "mxLogFile" #endif /* File name to be used for debug logging (each object file using this facility may set its own logging file) if no environment variable is set: */ #ifndef MAL_DEBUG_OUTPUTFILE # define MAL_DEBUG_OUTPUTFILE "mx.log" #endif /* Name of the environment variable defining the log file prefix to be used (e.g. to direct all log files into a separate directory): */ #ifndef MAL_DEBUG_OUTPUTFILEPREFIX_ENV_VARIABLE # define MAL_DEBUG_OUTPUTFILEPREFIX_ENV_VARIABLE "mxLogFileDir" #endif /* File name prefix to be used for log files, if no environment variable is set: */ #ifndef MAL_DEBUG_OUTPUTFILEPREFIX # define MAL_DEBUG_OUTPUTFILEPREFIX "" #endif /* Log id to be used */ #ifndef MAL_DEBUG_LOGID # define MAL_DEBUG_LOGID "New Log Session" #endif /* Debug printf() API Output is written to a log file or stream. If the output file is not yet open, the function will try to open the file as defined by the environment or the program defines. The file remains open until the program terminates. Subsequent changes to the environment are not taken into account. The output file is deduced in the following way: 1. get the filename from the environment, revert to the predefined value 2. get the filename prefix from the environment, revert to the predefined value 3. if filename is one of "stderr" or "stdout" use the native streams for output; otherwise try to open fileprefix + filename reverting to stderr in case this fails. */ static int mxDebugPrintf(const char *format, ...) { va_list args; static FILE *mxDebugPrintf_file; if (!mxDebugPrintf_file) { time_t now; char *filename,*fileprefix; now = time(NULL); filename = getenv(MAL_DEBUG_OUTPUTFILE_ENV_VARIABLE); if (!filename) filename = MAL_DEBUG_OUTPUTFILE; fileprefix = getenv(MAL_DEBUG_OUTPUTFILEPREFIX_ENV_VARIABLE); if (!fileprefix) fileprefix = MAL_DEBUG_OUTPUTFILEPREFIX; if (strcmp(filename,"stdout") == 0) mxDebugPrintf_file = stdout; else if (strcmp(filename,"stderr") == 0) mxDebugPrintf_file = stderr; else { char logfile[512]; if (strlen(fileprefix) + strlen(filename) > sizeof(logfile) - 1) { /* Hack to shut up "cc -Wall" warning that this function is not used... */ static void *mxDebugPrintf_used; mxDebugPrintf_used = (void *)mxDebugPrintf; /* Default to stderr in case the log file name doesn't fit the available buffer */ mxDebugPrintf_file = stderr; fprintf(mxDebugPrintf_file, "\n*** Log file name too long: '%s%s'; " "using stderr\n", fileprefix, filename); } else { /* We made sure that there is enough room in logfile, so can use the unlimited APIs here */ strcpy(logfile, fileprefix); strcat(logfile, filename); mxDebugPrintf_file = fopen(logfile,"ab"); if (!mxDebugPrintf_file) { /* Default to stderr in case the log file cannot be opened */ mxDebugPrintf_file = stderr; fprintf(mxDebugPrintf_file, "\n*** Failed to open log file '%s'; " "using stderr\n",logfile); } } } fprintf(mxDebugPrintf_file, "\n--- "MAL_DEBUG_LOGID" --- %s\n", ctime(&now)); } va_start(args,format); vfprintf(mxDebugPrintf_file,format,args); fflush(mxDebugPrintf_file); va_end(args); return 1; } #ifdef MAL_DEBUG # ifdef MAL_DEBUG_WITH_PYTHON /* Use the Python debug flag to enable debugging output (python -d) */ # define DPRINTF if (Py_DebugFlag) mxDebugPrintf # define IF_DEBUGGING if (Py_DebugFlag) # define DEBUGGING (Py_DebugFlag > 0) # else /* Always output debugging information */ # define DPRINTF mxDebugPrintf # define IF_DEBUGGING # define DEBUGGING (1) # endif #else # ifndef _MSC_VER /* This assumes that you are using an optimizing compiler which eliminates the resulting debug code. */ # define DPRINTF if (0) mxDebugPrintf # define IF_DEBUGGING if (0) # define DEBUGGING (0) # else /* MSVC doesn't do a good job here, so we use a different approach. */ # define DPRINTF 0 && mxDebugPrintf # define IF_DEBUGGING if (0) # define DEBUGGING (0) # endif #endif /* --- Misc ------------------------------------------------------------- */ /* The usual bunch... */ #ifndef max # define max(a,b) ((a>b)?(a):(b)) #endif #ifndef min # define min(a,b) ((a 0 s.resize() print 'Clear.' s.clear() assert len(s) == 0 if 0: print 'Non-zero testing.' s.push_many(range(100)) i = 0 while s: s.pop() i = i + 1 assert i == 100 # push many + exceptions print 'Push many and exceptions.' class C: def __getitem__(self,i): if i < 50: return i + 1 else: raise IndexError def __len__(self): return 100 l = C() try: s.push_many(l) except IndexError: pass else: raise AssertionError,'push_many() does not handle errors correctly' assert len(s) == 0 del s # Implementation deleaked up to this line. print print 'Works.' if '-m' in sys.argv: while 1: test() else: test() egenix-mx-base-3.2.7/mx/Queue/COPYRIGHT0000664000175000017500000000176211552064177017233 0ustar lemburglemburg --------------------------------------------------------------------- COPYRIGHT NOTICE --------------------------------------------------------------------- Copyright (c) 1997-2000, IKDS Marc-Andre Lemburg; mailto:mal@lemburg.com Copyright (c) 2000-2011, eGenix.com Software GmbH; mailto:info@egenix.com All Rights Reserved. This software is protected by copyright and other intellectual property laws and by international treaties. It may only be used under the conditions and terms of the eGenix.com Public License Agreement. You should have received a copy of the eGenix.com Public License Agreement with this software (usually in the file LICENSE located in the package's or software's main directory). Please write to licenses@egenix.com to obtain a copy in case you should not have received a copy. egenix-mx-base-3.2.7/mx/Queue/LICENSE0000664000175000017500000001075307620177404016744 0ustar lemburglemburg________________________________________________________________________ EGENIX.COM PUBLIC LICENSE AGREEMENT VERSION 1.1.0 ________________________________________________________________________ 1. Introduction This "License Agreement" is between eGenix.com Software, Skills and Services GmbH ("eGenix.com"), having an office at Pastor-Loeh-Str. 48, D-40764 Langenfeld, Germany, and the Individual or Organization ("Licensee") accessing and otherwise using this software in source or binary form and its associated documentation ("the Software"). 2. License Subject to the terms and conditions of this eGenix.com Public License Agreement, eGenix.com hereby grants Licensee a non-exclusive, royalty-free, world-wide license to reproduce, analyze, test, perform and/or display publicly, prepare derivative works, distribute, and otherwise use the Software alone or in any derivative version, provided, however, that the eGenix.com Public License Agreement is retained in the Software, or in any derivative version of the Software prepared by Licensee. 3. NO WARRANTY eGenix.com is making the Software available to Licensee on an "AS IS" basis. SUBJECT TO ANY STATUTORY WARRANTIES WHICH CAN NOT BE EXCLUDED, EGENIX.COM MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, EGENIX.COM MAKES NO AND DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF THE SOFTWARE WILL NOT INFRINGE ANY THIRD PARTY RIGHTS. 4. LIMITATION OF LIABILITY EGENIX.COM SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF THE SOFTWARE FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS (INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF BUSINESS PROFITS, BUSINESS INTERRUPTION, LOSS OF BUSINESS INFORMATION, OR OTHER PECUNIARY LOSS) AS A RESULT OF USING, MODIFYING OR DISTRIBUTING THE SOFTWARE, OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO THE ABOVE EXCLUSION OR LIMITATION MAY NOT APPLY TO LICENSEE. 5. Termination This License Agreement will automatically terminate upon a material breach of its terms and conditions. 6. Third Party Rights Any software or documentation in source or binary form provided along with the Software that is associated with a separate license agreement is licensed to Licensee under the terms of that license agreement. This License Agreement does not apply to those portions of the Software. Copies of the third party licenses are included in the Software Distribution. 7. General Nothing in this License Agreement affects any statutory rights of consumers that cannot be waived or limited by contract. Nothing in this License Agreement shall be deemed to create any relationship of agency, partnership, or joint venture between eGenix.com and Licensee. If any provision of this License Agreement shall be unlawful, void, or for any reason unenforceable, such provision shall be modified to the extent necessary to render it enforceable without losing its intent, or, if no such modification is possible, be severed from this License Agreement and shall not affect the validity and enforceability of the remaining provisions of this License Agreement. This License Agreement shall be governed by and interpreted in all respects by the law of Germany, excluding conflict of law provisions. It shall not be governed by the United Nations Convention on Contracts for International Sale of Goods. This License Agreement does not grant permission to use eGenix.com trademarks or trade names in a trademark sense to endorse or promote products or services of Licensee, or any third party. The controlling language of this License Agreement is English. If Licensee has received a translation into another language, it has been provided for Licensee's convenience only. 8. Agreement By downloading, copying, installing or otherwise using the Software, Licensee agrees to be bound by the terms and conditions of this License Agreement. For question regarding this License Agreement, please write to: eGenix.com Software, Skills and Services GmbH Pastor-Loeh-Str. 48 D-40764 Langenfeld Germany egenix-mx-base-3.2.7/mx/Queue/Makefile.pkg0000664000175000017500000000046307003370417020146 0ustar lemburglemburgall: compile install compile: cd mxQueue; \ if ! test -f Makefile; then $(MAKE) -f Makefile.pre.in boot; fi; \ $(MAKE) install: cd mxQueue; \ $(MAKE) install test: cd mxQueue; \ python test.py doc: -true # Cleanup before distributing the package # distclean: cd mxQueue; \ $(MAKE) distclean egenix-mx-base-3.2.7/mx/Queue/README0000664000175000017500000000021607315370436016611 0ustar lemburglemburgPlease see the documentation in the Doc/ subdirectory for further information on installation and usage. Marc-Andre Lemburg, mal@lemburg.com egenix-mx-base-3.2.7/mx/Queue/UserQueue.py0000664000175000017500000000263712133021440020215 0ustar lemburglemburg""" A pure Python Queue implementation modelled after mxQueue. Copyright (c) 2000, Marc-Andre Lemburg; mailto:mal@lemburg.com Copyright (c) 2000-2013, eGenix.com Software GmbH; mailto:info@egenix.com See the documentation for further information on copyrights, or contact the author. All Rights Reserved. """ __version__ = '0.1' class UserQueue: def __init__(self): self.queue = [] self.headindex = 0 def push(self,x): self.queue.append(x) def pop(self): headindex = self.headindex queue = self.queue x = queue[headindex] queue[headindex] = None # del. reference headindex = headindex + 1 if headindex > 100 and headindex > len(queue) / 2: # compactify self.queue = self.queue[headindex:] self.headindex = 0 else: self.headindex = headindex return x def not_empty(self): return self.headindex != len(self.queue) def head(self): return self.queue[self.headindex] def tail(self): return self.queue[-1] def __len__(self): return len(self.queue) - self.headindex def __repr__(self): l = self.queue[self.headindex:] l.reverse() return '' % repr(l)[1:-1] def __str__(self): l = self.queue[self.headindex:] l.reverse() return 'q' + repr(l) egenix-mx-base-3.2.7/mx/Queue/__init__.py0000664000175000017500000000054212133021440020022 0ustar lemburglemburg""" mxQueue - A queue implementation Copyright (c) 2000, Marc-Andre Lemburg; mailto:mal@lemburg.com Copyright (c) 2000-2013, eGenix.com Software GmbH; mailto:info@egenix.com See the documentation for further information on copyrights, or contact the author. All Rights Reserved. """ from mxQueue import * from mxQueue import __version__ egenix-mx-base-3.2.7/mx/Queue/queuebench.py0000664000175000017500000000446412133021442020420 0ustar lemburglemburg#!/usr/local/bin/python -O """ queuebench - queue implementation benchmark Copyright (c) 2000, Marc-Andre Lemburg; mailto:mal@lemburg.com Copyright (c) 2000-2013, eGenix.com Software GmbH; mailto:info@egenix.com See the documentation for further information on copyrights, or contact the author. All Rights Reserved. """ import time from mx import Queue import UserQueue from sys import argv, exit try: numtests, pushes, pops = eval(argv[1]), eval(argv[2]), eval(argv[3]) assert pushes >= pops except: print 'usage: queuebench.py , where >= ' exit(1) def test(reps, func): start_cpu = time.clock() for i in xrange(reps): x = func() return time.clock() - start_cpu def method1(): x = [] # built-in list push = x.append for i in range(pushes): push('spam'+'i') for i in range(pops): top = x[0]; del x[0] def method3(): s = Queue.Queue() # Queue push = s.push pop = s.pop for i in range(pushes): push('spam'+'i') for i in range(pops): top = pop() if 0: def method3a(): s = Queue.Queue() # Queue push = s.push for i in range(pushes): push('spam'+'i') t = s.pop_many(pops) # pop all at once def method3b(): s = Queue.Queue() # Queue push = s.push for i in range(pushes): s << ('spam'+'i') for i in range(pops): top = s >> 1 if 0: def method3c(): s = Queue.Queue() # Queue l = [''] * pushes for i in range(pushes): l[i] = ('spam'+'i') s.push_many(l) s.pop_many(pops) def method4(): s = UserQueue.UserQueue() # UserQueue push = s.push pop = s.pop for i in range(pushes): push('spam'+'i') for i in range(pops): top = pop() print 'list: ', test(numtests, method1) # run func 20 tests print 'Queue (with push + pop):', test(numtests, method3) #print 'Queue (with push + pop_many):', test(numtests, method3a) print 'Queue (with << + >>):', test(numtests, method3b) #print 'Queue (with push_many + pop_many):', test(numtests, method3c) print 'UserQueue:', test(numtests, method4) egenix-mx-base-3.2.7/mx/Stack/0000755000175000017500000000000012251446113015700 5ustar lemburglemburgegenix-mx-base-3.2.7/mx/Stack/Doc/0000755000175000017500000000000012251446113016405 5ustar lemburglemburgegenix-mx-base-3.2.7/mx/Stack/Doc/mxStack.html0000664000175000017500000003104410024204107020700 0ustar lemburglemburg Stack - A Stack Implementation for Python

mxStack - A Stack Implementation for Python


Interface : Constants : Examples : C API : Structure : Support : Download : Copyright & License : History : Home Version 2.1.0

Introduction

    Though stacks can be emulated with Python lists, this type provides a simple interface to the data structure, both in Python and in C. Because of the function call overhead calling the methods from Python it is only a tad faster than a corresponding list emulation. Called from within an C extension shows a more significant performance increase. The included stackbench.py gives an impression of how the different methods relate w/r to speed:

    mx/Stack> python stackbench.py 1000 100 10
    list:  0.24
    tuples: 0.15
    Stack (with push + pop): 0.17
    Stack (with push + pop_many): 0.17
    Stack (with << + >>): 0.19
    Stack (with push_many + pop_many): 0.17
    UserStack: 0.33
    	

    Note that the tuple version has a few disadvantages when used for big stacks: for one it uses lots of memory (20 bytes per entry slot; Stack uses 20 bytes + 4 bytes per entry slot) and deallocation can become a problem -- this is done using recursion with one level per stack element. For small stacks it still is unbeatable, though (it has no function call overhead). BTW, the UserStack implementation uses the same technique: the figures shown mainly result from Python method call overhead.

    Because stacks are normally used only temporarily, the Stack implementation only grows the memory buffer used for holding the entry slots. It never shrinks it. This has an advantage of reducing malloc overhead when doing e.g. depth first search, but also the disadvantage of using more memory in degenerate cases. To compensate for this, simply call the .resize() method every now and then. It forces the used buffer to be resized.

Interface

Examples of Use

    Well, there's not much to show:

    from mx.Stack import *
    s = Stack()
    for i in range(1000):
        s.push(i)
    while s:
        print s.pop()
    # which could also be done as:
    s = StackFromSequence(range(1000))
    while s:
        print s.pop()
    # or a little different
    s = StackFromSequence(range(1000))
    print s.as_tuple()
    print s.as_list()
    	

Supported Data Types in the C-API

    Please have look at the file mxStack.h for details. Basically all of the above Python interfaces are also available in the C API.

    To access the module, do the following (note the similarities with Python's way of accessing functions from a module):

    #include "mxStack.h"
    
    ...
        PyObject *v;
    
        /* Import the mxStack module */
        if (mxStack_ImportModuleAndAPI())
    	goto onError;
    
        /* Access functions from the exported C API through mxStack */
        v = mxStack.Stack(0);
        if (!v)
    	goto onError;
    
        /* Type checking */
        if (mxStack_Check(v))
            printf("Works.\n");
    
        Py_DECREF(v);
    ...
    	

Package Structure

    [Stack]
    	mxStack
    	

    Entries enclosed in brackets are packages (i.e. they are directories that include a __init__.py file). Ones without brackets are just simple subdirectories that are not accessible via import. These are used for compiling the C extension modules which will get installed in the same place where all your other site specific extensions live (e.g. /usr/local/lib/python-x.xx/site-packages).

    The package Stack imports all symbols from the extension mxStack, so import Stack; s = Stack.Stack() gives you a Stack instance in s.

Support

Copyright & License

History & Future


© 1998-2000, Copyright by Marc-André Lemburg; All Rights Reserved. mailto: mal@lemburg.com

© 2000-2004, Copyright by eGenix.com Software GmbH; All Rights Reserved. mailto: info@egenix.com

egenix-mx-base-3.2.7/mx/Stack/Doc/mxStack.pdf0000664000175000017500000151237612133273272020536 0ustar lemburglemburg%PDF-1.4 % 528 0 obj << /Linearized 1 /O 532 /H [ 1518 597 ] /L 431358 /E 278437 /N 17 /T 420679 >> endobj xref 528 24 0000000016 00000 n 0000000849 00000 n 0000001204 00000 n 0000001357 00000 n 0000002115 00000 n 0000002505 00000 n 0000002535 00000 n 0000003297 00000 n 0000003338 00000 n 0000003580 00000 n 0000004768 00000 n 0000004791 00000 n 0000005266 00000 n 0000005510 00000 n 0000005742 00000 n 0000005948 00000 n 0000020853 00000 n 0000032649 00000 n 0000035744 00000 n 0000035951 00000 n 0000036030 00000 n 0000038709 00000 n 0000001518 00000 n 0000002093 00000 n trailer << /Size 552 /Info 523 0 R /Encrypt 530 0 R /Root 529 0 R /Prev 420668 /ID[<5b1ba29f2e13045ff84e8bffdff3158e><5c9b3f93499fd287c51c66fab88c06be>] >> startxref 0 %%EOF 529 0 obj << /Type /Catalog /Pages 526 0 R /Metadata 524 0 R /Outlines 99 0 R /OpenAction [ 532 0 R /XYZ null null null ] /PageMode /UseNone /PageLabels 522 0 R /StructTreeRoot 531 0 R /PieceInfo << /MarkedPDF << /LastModified (>hѷy)>> >> /LastModified (>hѷy) /MarkInfo << /Marked true /LetterspaceFlags 0 >> >> endobj 530 0 obj << /Filter /Standard /R 3 /O (WЏ X_7!_ֵb{J.4@K@) /U (zQwǭ<) /P -12 /V 2 /Length 128 >> endobj 531 0 obj << /Type /StructTreeRoot /RoleMap 112 0 R /ClassMap 115 0 R /K [ 390 0 R 391 0 R 392 0 R ] /ParentTree 438 0 R /ParentTreeNextKey 20 >> endobj 550 0 obj << /S 380 /T 499 /O 561 /L 577 /C 593 /Filter /FlateDecode /Length 551 0 R >> stream %osqZeena6{O05w\O,y+%-oN"kFeBܸ%&laL^f!cOv MG)|M&k(˛q<O< mhyRjv_!dHDK6L,ulQ ϩ"];.vcYi-BPFSTe %H2+.?H=Y@]hE@ρxG^XI8FǸeo2;*iї٘q i'.%6Ns>4z7#%?B汇8*7n^i+ދ]x37f"/\Qɚk:Hvދ#EREɨM`1\3X )}8tghp& endstream endobj 551 0 obj 460 endobj 532 0 obj << /Type /Page /Parent 525 0 R /Resources << /ColorSpace << /CS2 535 0 R /CS3 533 0 R >> /XObject << /Im1 549 0 R >> /ExtGState << /GS2 547 0 R /GS3 546 0 R >> /Font << /TT3 534 0 R /TT4 539 0 R /TT5 542 0 R >> /ProcSet [ /PDF /Text /ImageC ] >> /Contents 537 0 R /Thumb 484 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 0 >> endobj 533 0 obj /DeviceGray endobj 534 0 obj << /Type /Font /Subtype /TrueType /FirstChar 32 /LastChar 233 /Widths [ 274 0 278 0 0 0 714 144 329 329 0 833 274 329 274 281 549 549 549 549 549 549 549 549 549 549 326 326 0 0 0 0 0 604 587 669 764 502 491 734 759 282 282 602 461 905 741 821 539 821 574 512 530 743 625 958 541 519 606 0 0 0 0 0 0 474 556 472 556 498 291 503 556 250 250 500 250 854 552 552 556 556 356 434 311 552 479 766 463 486 475 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 833 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 498 ] /Encoding /WinAnsiEncoding /BaseFont /MIKJCL+ZapfHumanist601BT-Demi /FontDescriptor 536 0 R >> endobj 535 0 obj [ /ICCBased 548 0 R ] endobj 536 0 obj << /Type /FontDescriptor /Ascent 962 /CapHeight 687 /Descent -272 /Flags 32 /FontBBox [ -167 -273 1106 963 ] /FontName /MIKJCL+ZapfHumanist601BT-Demi /ItalicAngle 0 /StemV 94.019 /XHeight 0 /FontFile2 543 0 R >> endobj 537 0 obj << /Filter /FlateDecode /Length 538 0 R >> stream |Aԯ8󂾉f}u?AW/!2yhCi%uv >= *}6^6ďc4ON3S33QXA3uId45 j|l鰚= H0غK Q:M)Olb\}P H.٥LQ^ e& SǓͲڑ v/jx8naN-\nqMƣ7)?كw/J~p]N?#:fѸٴG+597Ӹ_e?2 ogҾ倀 q}+kC,ԇ爕7We*}_HZ"ޘP YCw% Ekmڷj_dEZ>mA1Lh2a=z1j wҞpURHRIfL$}qhV;luIsT* :|htE0XUo1jH?o֫鋗cQײڀlqCLNDU =eCs ;J=P-N@K%#YE5;c_%CdcQ!7 xeg@y#*Bє endstream endobj 538 0 obj 1108 endobj 539 0 obj << /Type /Font /Subtype /TrueType /FirstChar 32 /LastChar 121 /Widths [ 274 0 0 0 0 0 0 0 0 0 0 0 0 0 274 0 0 549 549 549 549 549 549 549 549 0 0 0 0 0 0 0 0 608 597 660 0 515 502 743 0 329 0 0 476 891 740 828 587 0 613 544 549 731 0 971 573 547 0 0 0 0 0 0 0 516 0 484 604 535 0 514 593 291 0 554 299 891 593 567 0 0 382 427 338 592 0 0 472 478 ] /Encoding /WinAnsiEncoding /BaseFont /MIKJCH+ZapfHumanist601BT-Ultra /FontDescriptor 540 0 R >> endobj 540 0 obj << /Type /FontDescriptor /Ascent 961 /CapHeight 687 /Descent -284 /Flags 32 /FontBBox [ -167 -284 1186 962 ] /FontName /MIKJCH+ZapfHumanist601BT-Ultra /ItalicAngle 0 /StemV 166.043 /XHeight 0 /FontFile2 544 0 R >> endobj 541 0 obj << /Type /FontDescriptor /Ascent 951 /CapHeight 0 /Descent -273 /Flags 96 /FontBBox [ -220 -274 1143 951 ] /FontName /MIKJCJ+ZapfHumanist601BT-UltraItalic /ItalicAngle -15 /StemV 0 /FontFile2 545 0 R >> endobj 542 0 obj << /Type /Font /Subtype /TrueType /FirstChar 32 /LastChar 32 /Widths [ 274 ] /Encoding /WinAnsiEncoding /BaseFont /MIKJCJ+ZapfHumanist601BT-UltraItalic /FontDescriptor 541 0 R >> endobj 543 0 obj << /Filter /FlateDecode /Length 14812 /Length1 21700 >> stream *WDu 1}  }˱\CM$ðx SRqa'W;sъ1GJ7A$O|dPN'Ղ A7fo3om4xVix3.zcrE~-,>RPa&{p|֜+"8Njx![ OU|`Oq ReLeXr~Mk;/o`I-D򜵧wο!Iƿt,-THw.{ k-)CC׶`8ٻ3\E҇y-}ۤ"S8Zcx+$-0ȉ˼L*l \`o+DsN4BP6EcɀFk[ߵG!Ɔ_:i"j <D g{ E}MAJ"H.;-a lasM`OBjK{ r޲n"{S? w#҃RX|賮G|,>>퓾ig+LʫD>YSdgTX:uEďVpwUJ[mK`qD0 ?T>)dcl0e~G=Dt3jL+x}8fF?B59J?$\a"n[n%\R@F!:kl\ll<◌H' FwMs>W*ĈxGzU1ѝ4HYFycd֌ c'iRhi/q吠W'&MS5=h s-H ڙoh:J 8RƮZIBhe*1:Ayc'@ Gԋ~'xzj 4^!4X%䃒\axs9hRxe}=QJ7>x4>d8n;-t #ZńKcMHoI~\WBF. !GRI=psC [vV(#GxƇ 5 MChՉ/U%3!,6#3ѸkuSL ^ӳua2dd 1R6qz~eSgl7X(aGO-]dSM%ì`t8d,>ȥZ=6V/vT9n* Αl^Ȝzn]ۑ[E]c#Q*yv6 (p||S똒i9(Vb *H˃S8xWGc033ErR\I7߀X5'굘DfKXlЮ:ohnv_@͆ b~s _ PUl_X_hD+b4 Y_?' ƑI<&w:a*1po,U΂IYW>dt9GG^5~׳;@;r|I;5ӳtB;xeIr`}7ڗ(V9H7I3b!d(kFZ1^`Ǣ3jFnvTfm(j_r ù7S̬7̊)H'625PzNAGw#ī#oa}3J@>V8RWi%%9X*D|1m\4V6Q}n#y6F QEBI* =R_ɺmpLtskU}co&i cx}5}[ĝP ;/h ÜPZAr/UFbpm{-t'šJ(aU`8_4a@*4pŸd IpFym m%NLN_p1n/_{&>cGKf?4iNޣU]z)=1 '2?`n 1t20R?fK?IQ$a$9)܇J1a񢢐5x+ B5R|R-' 6bY[>\YOH^c8<ѐ_YM(|rk]_ n`C`r%V+U?"m~qI⧁ȻuCq0fKպH&_}+K<-`{hyx1|ƦNa8cF &4ujn {+!aMRN-lk 5&L.OMDzBַ8-lMP:*?6툘a~c=֤#5kv&^@y,))xgv ^6tBڮwԸ: 'NufO)>nI\Ȩ={Iв}"S bQ^\x*Wdr-q C >E'Y9uŬ’eθ?&kg ƿ ۍ8XpQA<{O3k:jY rX"X3io刱PQ2MQfH37Y4{+\!m%-ix}US߸"gm?j? mNw@ jv+t%91vOZltrqOa-|X~hr(~ ̥Pn$< QE/U}M]Q b#=2 rX7 e![yaԼ&R.7 ZCmK-pmb(=9]ę݁) [r Rf&`rU5 ~dt36UN}bIKȢyCdhR'*a`M).5aF…!<<=NC&!ׂJ7oh L @XiK^ >3> 3?[z۬}4v,=jέy暣:RͥeifsOY֖!^GKcq=0ZGp񦰁:}hc7{'r+/G3E)tieH"1;o2mh{T4yX]D͇6uH k(Z d|Uorlbu9\Khv<6q@tR ]Ōt-ؿעR lJ&RrՐ費N>"Nrns.9 Tj|{ڰANs<`2fcR}e A_)T4]|]XwjW$sd-댹./l_ƥXd}#%ڛL;(;a}oseAV߲)Dg3ŔJ7 ʖSV;m]ͬVYYPzwnXC*xNQoP^,]a~SJ h]S_Gq[4u>m6{(v q#$mN7٠/~l]~[~Z.{#_TxHam[m;NCr" -Ȑ,}gek[I`5>a広TC5y=EQd$ {U*m82qRU.?}p|w54 ޽+rEhDXv6LR/\d9t;^j=h-dzMʥS/>2>݂. ^lk,o5)A z)k8/U(H$_M;~w5$aawPq]%ۃ 'ʋ t$彭ӌn1:/@ \ !G4~hE ׌fM {tA TJzQAgM B=f0:F3;}Hu?Ѣ??GY* L>yi~+U7 P a7ݦ\L\1WVL $mTϵ;5$q)Lt":+!C@Drag. ]qHAtk".*ҞHuppS7ϭ.ie]=gHk.WϜw >(JMVk:d4UCŋꈾRgiQc&uBCҦ]kSB$~5MbVQp6C4~$e,t0.#!v^ ̍6iG ȃ_B|whi;+~x4)qHTpA_sc]ڵpQWe-Gs3^6ZDHb?pPݸmJD A6K2& $I"كg*`ybj$fCkTt n]8[ڒBa..PL߅/adI:3Ăn_ǩӍG=?#1='7jy *7 FWo%bGy%z;+IFYA4lII侞ƼgY=I`ư_zo[50ZH`*R)skeb\a` %*׶S=WSu,0#7Do "=96NHڍ>\X1qJ]4L]ԧ}@Sv1I`5&ritXW nPtɣ :KU;CQ]j r(U$&D4w+ E&/LKL4T`#R-$Q"TC- l,àu&QCĻ(pٻEsCauc4&?$9^{ rB bqrlbV I" :U Ȍfi kE 02 o0o0D}hpڟa!Rt0(q\ q&)c7tl` (>=IudD> TxHEԄErj6JΆ L X,-j!Aݨÿc*迸( U*8@T.sa~EP S(6yfYw~cCY cnPbb昝m]'oucI=Y&oF)s)AvԍMH@%*)^J Ǚ$Ril%Rmb`9\*ݹSA@K,(ai{o-gVio4W>˼~lw^blO`!~i.ҥ \R]~nwYuRjpcM{9Y:Hh~h p6KA7ߞn^ /ޤpOW8?sKv`tڹ!|b Ua>N↉{N=Ht{3',fv̑u\HOLG|;~Z,VR8{ #3Ye|4i;,8g"ϸd?6Txmg8 P t ״r@Zbvu+30@9 RAs]DE#c$7oC]QcL4DL*OUlišG ,t͑guU{TԺLQxz\NU2 'ʞ~*v=eT@˽Zz17oVc c%3y1El\9ؔQ^H7ӿEP~?`*Dc>EZaY`9y%Fo:‹;XCH T4m{(,#4Og9 7^΁h·LYy3RSElϪ ght~bjMXF^Qf*{X 9_VxԼ5Tu( fsel" GPWeܦ0i [8T!tU#C=Ns@'=AlޣW@W[f$ئź%aN~H;!-]gkg/XtI~?SU[OsUPK(){`lA]CǬN7=k)>A4k?;fD"U1 #kg9bCZ8+*aƙmcQY /}WX- jEd-2fkNm,X٣yUAw-_!"mjȴ݋%ٌ0>pUXC]U a9Aؔ=>98 rly=hhk]G0~ѫkS8u]3vد$ed}BH[HLwܣ>xiq(*kԊW kg82&z4~^4Ifг;<'ޗNO_3CtT(A< H w7ߦ وf0pL4 fo+t{jWgpp{gEP$?Ó[I— aTJ9֖w9Tp1 jԠ\|=%g&[y^HU5PZYb\BX.2O84 ƨb ! WG1P]KW'b|TQQTS$y_'PFpHeBwGYI/Ka$iwb U"*,002֮i!*M4w%0) wfі19̿Z$:Em&LFvCݥ]xIW#֋s{?}$fu}keuHc Ɛx(r\zr.nhI sP8O)m3w [Ȭ 싆\^QD>1*[^ C^!odֆ+TێI<~L֋jwMˉlJ0-Յ0>>+E5t_cDZLnсk1-eڹk Wpn^ /m_dOxxabat`J渻e WՏѨ>h1X|͌2)7mp?йS[?D7UTpLb%Lj˖ \=QWbxC#|@u֖;wtov!,GDb:_'0b1gGؿs9B @k (mZ,=Zi> c?=+o,Jǂ' ǠNJq7h0cP.QAE/#h5} xZq:tKLUs ׽o@LO0@Ws>zXx5EqLz0𑓼j3m3!tɬ(ťw27>'___Yp׿zAv}|L6x{rQQ% D&.@HGRlUqPT`0_N{n^JꁰC5U?ᜭT/{WL|"G!Td{27أ,ƾ7:~Q"~*xz$Zգ ϴNטm,Taafb`A8BAkI_Fڸxˡ׏RD,}#缺琪=ȩAATњ_(R+dt12vD 2ֻBF63js9 j?Y"Kv˵1ixX&SZ H =GHC!C/B61ͻP?b݀uFXyBKvo)aBoUG-ݾցBcAX ZdΔ-zK9cB}ٷB}6:c=~OzwÈC\W8E̗?7wċ[^yTk M'jn!jkB (pA+K4Tp4a႟~P421J;L2E\G,f~'). mpQwXHߺ߂Ӵ•vƹ[~.N(CRB8FE-H XC6CҴyp/3qCy!1WM]ek|0J w9| v`^ɖW5 ;-G43NC|vMu)},/讵[c#0T = ͒dAEj CX:i9["|'(".y F Τ"/'cE6ګ\UIrI:kfAr^nL$)!l9H -=Qk):uP޸뿵Gyi3XBT%c*2^1 qTMO~ꪒ(׀nU!JBbugYh@/s؂1z%G0IӬOD庣K,o|4[#̫X%)*757džD2bG ` Qi] Y ~@L7>L5q$ՅNu ˽mYĨVM=תxɴi:58 U{z&akC"^t }`~h3<% Ӡm^\٩'aazlt4"*dg{Rc;Q/ l <#Ur;rA/̛̐cl _/`,M:tu'P>6H2V"Z)N̂SΣi9l {I؉~RpWS`B迵ܓXc",eA8ٸu% jl5?YYL>CJж y2E&WnB2!3-iq&^elLr3ܮHbK\؄NBz'8=)κ59?'=06G3fN@aUP^ ehW>B5(߳S$(Dd$q.*9H#r;%̓J;K#ryyD!2;x~0Y8Gմ|PM X${Ɣ>?ݵkFʠq+$`ʞs{e:LFԫMMyӥzu4[ɞ>0&?xSw!q#?umݹaEq[y?EH?g Aɂi4?ܪh.ImkG6_-KZƤ ~5mlgYR<3,;dy. D7=a׿**!$uX9Mxy:RA7Y4\гҩ'b#*f˭CoWe5<+_ oغң?epKIZVӮThw9ءƴ]dyK|/I}((|fBy@H` `o!tVYb#Vh~%t,VB_o+N@v sFd Ht1myH(#[̋6;5BݳF\/I* 6 I%@fzC cA˕(Yc|:fA^&Rt.DqNjG.wIJ{Ǡbb3~SD 4a^;/_=*eD`l>pfڢ.$>BE>X ȩ"EQ 9kh'-$Œwź7^œ$V vכTQ760:^lX"v!8#|Hc"YG|ƅJ׶⣸c/O;&_yuM@͠'~vRL]>g\$e2 C)2Pö*dW͌A2uq6#4ʠǷ` }UYuw9u#D=ivM6N*yE'Kod&O!NqDP•Q\L/1=0p+5-qKv&g%Lփ<|,q ZU4{ؓ3U;]햗ڭ{o JSa_&BEe-fj2>QE@ ;o ~n3 /4v%Hɠ\ !4h@')& jIbH%LUrxBimq/!\"5ƉdP[ sᳺ?pPz,REXdW9Vٚ?X,?;~" yϵ({Vl|M(Kq7XN~kZ)H's+ylԃ7cTB%kX# 絽fci=,}e59 Jƭ)%j= 9+bG}$Fcz}ÖqqdVU* %u@s x0ԓ~C ,yϯ3+cT %AP f{6gONy# > UhdѲ=L%Myy e:9Xہo,O:ӾB=\qW~3sxXO:Wz?X=?= wIYh;27nt-sJ͢ۊp/Q J7a)^<ț]Km&]]ѹ<?+D#4Hܯ MS P|okc羏Ft17\e1Y ;m;@)mB'c: -su7K~pbXݼ,8!L=uej jUMʮVn|t?RμROP8dj@vb{~b Ov"dum]xRJ%;ֽ|Gv^:@*͊.L}N|~Ns-/z%0 1Aј`ϯ^lP8E93G/)kfRJ/؁VLcepVLϩ˰u_ע>5={uv9%sJ*9#^JѸ7c"%M.kxJCo\j3vUG|GVqfTrs'pˢ}5hk޹Ĩa!6~X(`֬@YFf ¹.dBd0,F"43~/p$ PE!^mnb/\x K,u 4}EH,Ӱ0U|,)Z'eq8XJ~ ZMb&y^qg)j;f.sHMO"|C흺/BU1#y5kK|^tM%2z'[*}McѴ0.21R@ط clOx55Ac4ǣV==PeB1>ޔ.y5%lϠ P5i7dak() 3;^%ɿ$oKS)h)3EPa,3q[ӎGk) Wúe1FϾV &R c&zPTVx1Ipd9,غ_3Z~6ā2e OSs9Z:D5^uɔ`ȥiteQ(۽vD=$Dmm (wU,J甋HZYɤH0N`E-)\9 D3W=:Vi_"E &˜m1pQu]46OۏPd> stream Ԉ~Ih/pa`]ß 1#LhHÊvb$;5>s,&$cWc&;H>_`&G=w,K `3Xg)̬6NzB`uQ@aJp@ӮYC+4!(V]618w^pqQc.pԐ=߷ v}ͳ[`8x14ZY6Oqc\% כ"O0ٟpVSjE ?A,kS#{CS( " aKh3w 2.,! J#kqAyZaj3eW?%f?;G;8u38휔R5D G0\O76ErFD|.#.ܡ;J }sT<@5PD^]^< J #0 #H,Hh']w /OWE2bN@Ty&Kmpr ?Tt(E1~g_osOS[Dx+~ W扂;e}W;ۘ%nd8u)3j4a~S"sv?X {mlk1Ha٧qX8vf=ڻ-ᅳz3&h\5(Jkjq91>W/VMmc}ѣ6$CFI0OЏ9!SbԫeIr-q{,ݔxAr˸K-T/b.8.v ){/iN18UQU$m= Γ 9-]lQ'2$f^N^C?vǼ#9&Ճ~ɴUCZ.9˭B`ԞYh'/[Cd2wR/o@}(XAgb^ٰ ]}ݍJiQvB&CnyXZWΕP;*DyM I%vgB}عw{[d s@ƲXKɡ{Ƈ= :ţ|myn% ;R- Je WZ*󺠥Ї;mvT^TkI2;ޟӺ3T|)P3<<՝f-14(==rP 򋕖. 3Y9e 2πJ3}X{84lC235Upi^낑_ ༡g<{ԭ0DVԷN553o֜E%x u\>3zW2Vx; n8f}ܖ"dړ*hOG)*(ӏa>6;.w+7yI-$2 R;i MY)T2'G ոA/kj嫺5;b>,,ƴrtj ޵Wj0W٣>ֱ-ktyu0\N8ؔJ5qiNkɵ8ݤs344.u_kT[$e+ŋ@e-at,HB<>E=YZtSygJt}X"xI/5wgG^?{]Ҫ?yiU3آq2QfL,Ƒph1ҖN֡ k!:ìf` >MNidBzp]DTC(Ʈ`O5blYIO/ޟeGʐFT9es& Za1ܖ@GC* V|xJ7\Efiۡ)/Xb#IK/u4n۷mP띶qaE;Xjc'h$V C,@,^LeGg+Sn-"c{P" 93#E[WA,1aBZNn:0uP޵L¦yYI3.`0aW!WLivOe6P2R.BFU=̐M5V_T*?ߦ^X뫠D`}W %ϫ>PCNh]E ncPZwΰ/|9IF xBL: ɱSt%oX٤Pȸg) (Ġ9ΌnI0-Ps:%Vf+HS6\\Eg Ó{ i`1ɢo &jɨV0XպpîQ,u(?8~غNfk;a zPچ׏Wx:() J>u~[ BʭlT&@UpXݡYnSPXVuKH&y>ں-B+)=ص:ETm1 FHl7s1l2qUcfKck>@Jć 1M<;| #^'X2֧EV+5ۼC&םk8|Qм$d毃.p3=PBpvС\Fh/,#w9o/O9 J0h5TƵ`Ow"{q poC\A`ؿ~,]<#vzhQ \%X%]3g9@ *Zo#yCL10g#'1Ч~>.UP{F km@YFw>HJ"`gϳOcS+žIB>Ahv.fl׌n7u0ΔIYLEo K%,m#n[#Zd] ? zs?;s_p2]o 33%78!sbLd:Vu- #'o063x 3!xBת?&2GcM>a <':Y.#5,$xG^3_:Lu4Q~זWGI)LA3Ԏb#V_3vC #6Vgp( !L ~AT* lqDз#4/$g{CgüZX𕈩2uE3?=x@K,R\uq{ք׀DPlUb޷Dڀ& Ȩp0v= =w?U_-j@QGN(s#)wI)81+U- nIDK*Un}k(>:)~0[;%hw>"ը3y)&?pW4nA[ZOh"|*e֎ j smUZUl.A7 +}=+b{௠w$Bl̶a[:k /̀J*oo/?êTI24:l$1Y \^d]ȑku9l*b֣R뱂n²a#؍K\scpDl2&z|à\b=qhkB`}I2eda ~RJ KW^C?G?lEoEe^rVDt*R(=w9@aOۥȕMEi\N1`pef>t%SR΁NMGZ ͔T!kc5RR}f%K^;\bWZ*9AtշY$l:Ug60}|56ZomqD~8H *K \byD,[>f[}`ݗK)=CA3"g[(+j&/х8}V.>+YO.*ܱuF1꣓۞ qc]( ::ԽVr/P%q0E a]\)X6exm\ѷl'qxlr>Fhf!=Rd0zВK^ hӟ(J Bj:ޕ-уV ߯>29)7 [ğ+x5M; $UehCq5I);< {SzCJ(fz[y|?lX,dڵvi /w`vEF!&ωREѺ(ozS+ƁyFpNU-X8.j'ʯp$݊[eT`>⏞ JA] Ng%Nx/*qrAAW5с10t[)-  ZWIYM$)}>6 5v nM*DRvږzA L#];*y5prƍlVx]sX/͉4B]Qny e)/Q~N{mB-<*,I}r h /K7ʭsf9V-ji4ȯMQ~([0*Td/6b$YdDu>=I:A[`3ZT2.I>/ZHSY!/>n3}s2zTߞ( M .@e˿JHgaݙG>&3p=y;`J_~՞"--¼C ޞS5̿a^Lfj.VF a)E.(Y[oRv6\ȹ Y8\Sր=m#'>;' оy7a)rdrz_L%2ȷBӅ0MLjB?h HVkTD1 l+ֻ3б_ls}! D|fsK|Y ['Fp6B3߰R)j8fӾCb# Z-P3^y|aC`Ymb*#rV_yW9TsjVb%.O/@w:3G]f֖ 8Rc6fs:^Rr j2'5̈13ҭ ZV*&hQmjBlN1hվr2Pk*lᔔF ;?v>(ٯe-Hj>a9|Yc+PdH<xV|tM5zWadVrhhyUX0 L) v/ӒYhzgi+_"f/*nj|_z#+R3btp;JkK6AH>k~9SOjWR UunLDKm5X./Rf^_Fp8j+eSĞ&J92n^/̘h~ FMØk!;QFʺs<S>d 2QQkM:5/%򖀿~Xfm_~/~(bq+ZH7r^j-QAnγoa|O ya6Ѝ%)UFϨ|9/I5 7ofɶjmdcCɉs":@ǥ\m9Eu{vn+ǘ 5-D[ubw й8f`z!mmIhRv07-u 2 buMovH!z@{&`SEH}0՗Y#HVjD]j[Ma}?CVx+\(Efqb@$bvTƠZ>ش,J]blf/#Oؙnv0C>9}^zYt}Tm W-!6 <]$ʡkۯ?k)H4r;pXa( ?,vZfWl}\GıX+ '7_ۣxȁmR🻫\1ecm7#L{ ,Uy LRUJ%fÚ7U&FtMH"VRg:3YLFAafg ºi~h"~"PFZl4uN$>F]hMןs&J늆]!~>m;:j < iT7)MT&3Bfv1Bq9ﴯĬ ;H,iIBeqHX]g9;d K^#P!ͭcUlN+wZ\Bm?c?iw[ȀkI\ZENO0 qn΂Ipә. owUwl+M(R@-{KэL+!U[8(hLFv8-'_b[Z^ TKZmߓ$a!NxlԀJD?c_Gu -Cb+^2Y֚]򭧬w%7b: M9۵Diش:hE] N>=zMrqݏvcT1ZC7ZbYg_dzR@~{gu۩<}|I<-0C'[ɫNtgL '8b%K͒{oCNFK2 vrsקCݞ endstream endobj 545 0 obj << /Filter /FlateDecode /Length 3004 /Length1 6364 >> stream X՜tw4 Yߣ7g`G(A liUr2}C)U)&Te`CQi^8\lOܭkG>A &(ȗyӮ0n5f7>%6!ԕvw)w~swJ1'Ϲm_n!Y</kY'}y}%mQO*TOMsFd[Jߠu!ld`Ģ8FU1KUfh׻3"C v !P񲇫*{x:ڡz`5|zzkZ'V'`XW8.Aڜ)*bZ^i/TV31`$v^ 67ƃ3qhҗcka\ԡPP_R\@4il=y@0eF Ekq¹o:LfWkra>܎ցOiYe0e ge>3I;@zk×qde[+T]dvQcrl 56o|VZ# h(ehljޗdS82ܰ$TlsFo'@$. _iJ:uDJ7a֞8D'AGLD2,lݪl8OӸgO} SXeyONȚUs e8k=g&u(J@hnj1UʡvkX)1uܪhl=%5K v¦PBRI$('кPң d3' J_m&& @h:I2Qیr^7b6)öP 7ej:Lj<:I2NU*.Єxo{t=Um10b.L;Aol w_69ya^)ݏO-V#艵Cb$6?`Fg);yJ% q&%Z#[0yqnAsd#%}j{r۸iOD(a&[Q /[:cq|'DA͕\ⴉ}Y) /%&~KW|<Pr*-X:w2l釗:VЈEs^15A^if 7甐!߫JWcѩZ *E'6 ~7؆D=!Ł*?}-;`Esȏ~xT.n>?Z 5^S#n/>;ߨ@K\)ĘfCPM0 ku9RX z9k9)ׇAF/`Jj k$27}Z"9rє _eA'u=˗ޢt.ԯ啤l*XAkz ,4f8#aVKP*G86䥶w x]Pk3Й[G5oE+J{#RYt 9/Ճ h;F487#k(%Ydb9ҝϟL #e)3$5k kq)ydgXx_i[趮~Q)?g302KzL%4?!E vu&Y!2M-\[r9E}SU!&Y)Dia)M&<`;#!U`}'eفtwEUP# 44߯|CK-~kO>Bek>*2jAĎ}$ lW[Nm70/YբYӨȔGTUky0Nk@cA[vx=Q[QYKq 4#yGq9zw]&#uL-T1A4z*Ӟ;1KΛ'dx l%!jcEWqf0.+ hi^^P䚼hcysጲ DB $pr5rqɅ␖/#)%Own Ot`z|6o0j(%#hy.wTOh(S=;BR `w2 |ARx#S];C;@.J'm }C{`26a8h%>bNbb`lmw%aN2P$eR܇h=4y8[z ?s OzM=t'tN>1$ fMY=5o8REfB@\8d99ywP#('˷iNRA 4<6uCVv3JEUPg^T8P{AmetԀB"1IR5A(b` endstream endobj 546 0 obj << /Type /ExtGState /SA false /OP false /op false /OPM 0 /BG2 /Default /UCR2 /Default /TR2 /Default /HT /Default /CA 1 /ca 1 /SMask /None /AIS false /BM /Normal /TK true >> endobj 547 0 obj << /Type /ExtGState /SA false /SM 0.02 /TR2 /Default >> endobj 548 0 obj << /N 3 /Alternate /DeviceRGB /Length 2575 /Filter /FlateDecode >> stream <*\= 2K tzW!*:qMR$YD[lL=FVB9C#L $T˪3SQVҭTb\Ɩjt%J*H8 å2 Bsgw!#)# N{f6TV=>&mG+ω;ZW[ol7mL&IWa rI8KcJ4 ǝ>~+<94ĎҴkB8{YVdRE}+Gs4qP5DqX(*p #C,*/"|YMfI8=Cl`w>J\d8W[ʑ@Yba$" Ē;ZV?9qpEW'Q =WJ3@KL.Dk2DtڀWm˷"\O!>w.XԶɈp+ަX}7;z\/wX~k@5pR^a״7i~iZ,^mp]٦tg^2Bavn/ J%w4aDz?`i"4Lɩ.-'QoraMU/x5)B r>2 xl<K8Ň"̳ǿ42ҥqw~vx-3s57fξ{-4Z>fm.xSKֆmϏFElAQX|:ٝq%>DC(ImQ@ \';%=SJHF!k>7|1 tPdySueKVFr]P[v >M?r-za+1L"=)<êBmbU[=ȵ]`1PU}VN0,"NFvG y"atrl)^4O %֥kK 1yʼn8dP:3O_A|A1I( BJN@#ZBٙ6L k̸ endstream endobj 549 0 obj << /Type /XObject /Subtype /Image /Width 2218 /Height 3227 /BitsPerComponent 8 /ColorSpace 535 0 R /Length 239218 /Filter /DCTDecode >> stream A$S4wd~qM$4T2Zn/:u搊~܄Fwv 㫁It?P͆.Xlh{F-_ZER3ԇk(;8II R^JC@+ץC%紬_ؔQCycS˕s vLؾf`(7A0N08S[AU]ٮכ8Lm3E^_eoӷo=9 #O8zuMZJdڦzEE:/H!R[2~Wg:` _5fXp>ef֖6/m$wK4 Q01F7|wBc^(EyB?IJ)pת8K7%\&FHuxkw#S6V@kͷmxw%/9C8l/oz|R#[›c?V٥4,cGOucA,6 ^h=뻙LJoC# (>O6j@=ŷkrEޮ{X1$@MR#X+&x.nɔ@bazXJ ,}G |[bdM.h1AiDnmnjYj `yߍஞU$%ȢwG&/PvO-&,/rNk`soQcM9mc Pt: no/AV REΜS:s6̴pCwht |9nia~AScsX{x[cI.f;lxk*1y^qWi,#YD8'TTr^ϣX4n]t lBH+Ѷpa"Dfr(x<B1OHFD^NaBC{ROЁ.aYq@,f.쇓n|M%j0efС$5NTNÙlP0jcw`UY/\nCLϑf5n6p?Bgk qI(Pb9{OQbq8I Kކ ?t*_~l\<,9]][F 4En+Xͳo!Cu)vv<"C+oAy,3FdZ^{\1ӚӸŜ"}tZSM ׎GK}鹱M1\zC;]Ѡ886 h?s*;~~UrAM. û>$*"tifxkbfknxq0~Fգyܵ.0mnosگ}bAi֎n~ya;S8(QQ;n9ePнX-Mm]Y97f2\뙘Xڐ+f45qde ǘySetR*TUbl'B+p) ,|nΟLhs yp*cLoHT׹xߜ5X$EG('+#s~h6g0 :-d p Z]:28NRNѳzk_:ŃS{ޔ 2!74ХDVNi#v.)0l5 c`)2NMď0Bz`h!gZ-hi'[-bsPw#!үs X~g ٤՜s,;Dyj'Mʵ-kffz {O hqƀ= 1s~ J|΄r%xa0pj=>?Z PN1>.Lk9>i- }`n{Pk%[r s߆'S LUE بX=%*cFNsHإ']}Gby!m)Dx߮ xJpς)wڇ0&,$s\9̔b;1+o ϛe[f[g>E.lMF؅)ulgk '븠xv?e<1'X{Z:&Y1+B9η7,}20z1N\iݔFxBHʤ9*k7H YE薫Ilu>RA75qCWe>4L@Ȱݬ;15M!x !w1n;ƿG.Ha?T8#Qk\ X$؇u_|U*0ԝ_$2* P$*QDPPJ9ޯ1 rS0SC/w̄A @䮌}7J50@/2q&7\<œYK6͌U*}tMҳ)zHyx lhB[z{w @s#c#͹5@eljFn^Î\tuŕ_8nq**!$k?JARODFO/:e좠0~c3OVy8<֨E)Qc 6b#qv]0s1n݇*_ `Q[/c&NCc6ô%ǫY]x{x/% zY~R_V, AY6i7 d 6eJcuBދ?*d$]ni'vfq%@XQ%i[0h"o$>p;%Lz6a~mC,+F;=C/ mh.?6a s78`шåQJ#.AP9 r[$.2WTErFbټIAbRM3 qvW )c 8xQ]34fj5;uPEX%U34\xjjQd@ Rox)p\ϐ0 ~ܕd`C-K>9m&6B 8#AC\)b'&4_IELeenVpC F n֭܆& j;(Xm ɊVNt 4{}o\^+߉W)"ѯ܌T5QCU]k Md`e_-Džnu`P jO\ҫ& "wf%,Iʗᆹ 0Seek3ұ=7To?۫:r._N}.qyN?I&"F ԟ@FsX}%}F;%+_ @@]y@] VA^H1\ۢ˵0ʺS$%8фqh۬_0AxòM컢BhOS\ di_13`!x7EjXR9O:y*b4Pz!sQKKaF6g ৙d# T(C*F+slT>xmg 75<'[B;c"4|hP5|,Żr-J5B=ZF,-a'i=aTWvCL׬NŌ'stRՖQ}:EQbccR<A$$urk A>,UM8>qۀOiHPzU16}Ь5zY ;%A/ L=1M$;}6N`{hIIy{df=B0wZݵK Uuof"!n v&؇P~-sAJ5)Ȋ qBi=t1S/$j^3?-dLhg7Ρ X.dVd.fPAH n5. /, a$/5\['Yζ` Q܈wZduɎ:P䧕(bG} $? ckx*ƸwBƘcI(~tS,kI*5DKk.״>xzW 3 ާFٲF[n5hQh }WsAߩr~:w٦(5yxGp§R!p:iM#zMR~fNV=Mԛd (-B"J^Y1?ט@;eKOȰ;5{,#Tbş;Y\t_>7٬Θp_F դU]6sxY?Ҙ >h/Aמ,_ꇵHt!ˇJ:{[uZE,4KEQQ'Ͽ>wzB)Ԇ- M faUGUҡJr@'lU6֚MHǫl=f:,Ixx1]W؎:%,D!uugE)lqB5~BdQ0t Q>;OT[J,0Yc fx*;s@ce6LvP˒O71d!$M?5"S<>eFq`R6!^U\_ 9?7%ڰצ[1}P+ 9 ^17ֽŻ nK lS?uPpfRb}КfwxCJJl>2+lS gMR깲$㬏@ _?q;D0 PS4aVFeA^\1  hMx4.ۻCЬT}| Mu? mGchQTMFrdž_f ;=D|#|D gFBZr7t(HuC104SܑuEy?S}>數?>P' Oz'XR0=mjǛk%*tUOqTҾ["˷btW`qG1ƳUW'Hb\})%x.XYZ!X.:҈/]=p9$c_\U>`r` ;9ב1%!+Qk7j,spR Ċ5s$&+Qs zUխO^Ϩ;gvY [fY 1\,GSoG}g۠ކ~  A;1seV¾MWw#,!ʰY_.Β:>rHR>]]N2M[7Gfn5EKmd2±ۈ322~?J\Z"SJ]IŖ ɬ\kЭAOa M {j| {xbkJP?\cy=nw=vܼ8 Uwk%2S*;2WǦ^lp+h#y4xaW:U H=h쫻J!l=_* ۻ~}kt<J܂CYAs,S'[/ zp<牃wFVmWO="q@^\#"s5JG _cT(@pF;֟Gqjb=z \BM1a-Щ5E*T LJ.ݽ˨7Bz24J3"R97I6̱V+1iK4uTʩOxI!iaɳF_:CY%7CŤ5Ӓ1!u 1@}o^B4c.G{2!?k4P٪Z1e`C0Z;]*vz2E~#y(Lrjc d ߊ u k`Z9Ҝn#溠USO^ Fh& Q#Y)}w7$'(/}VUWAmJA* 0q_@(,ཫ N@Eh.tK>30hy7dZ)X Z'DE1Ly# eDž}Ao`Y=a:1pwfsSc$4m?L ."r^ ^ȴLJs*S$cLNqpeK=H)vTW9Ͻ$cyWB14O##o'r'/F%IYQ<_yk~TX4koU[LO$3KdGd6s, E.b4h(dYp{G )w,FaD(.J /, kj yPnf?8u- QL5A&oZ1~p6L i:->5Tyj( ~>n'!ό y3 tm( Rf=)+,Û9I B8mL  XR $Xs=O/-f Zn(2X_Z"G_>E2C&V/c:ok^܂p>{WѴsm4?W֚ɺm &7ťBcbZM6D#64ޛi43!NvQ?{fY?.i|O w=uyϔ$\JC'O]CVdH9XCtL2d`AcFRZCԉRWFk& E2mIR`QϿoگe|9)yECcI!zb :ҍc'TIyG Zk3]8'o*i7?*gS<(R,d2Iw*N9@/$ NH1zDzc$!޻dA/ok'kQ -rC-zn)@qNz8xŠK2K% B2Ïba^3[8y+Z̈WQB= r.NUOZs:QarSraCqYQt\$-).T`8bc(;Catv&55+wtp-1daٌ!bPn߂;k)J7(7 R[{W4!-cgZv,x}8})CJ!c~r' y@j"$ sFË?KAPui8B>Me9ȿrr[6gװik.}#&.`J_  39(GB0FXְ6I]7R+j /̢w@eToeP 'MrCC %nQ |(ubEK QW9kﴵN?;T8/bFKqy$׮Z`!q. |l6;Z0n)dKL9QKv9C~ ߪ_:wa;DH̼G_ȜsYQG/ 6Қr'‘ Ey6b6@iKbDy*~ԝj8O]1SygJf*<>lK6|8O5~,Xƾ*aQ&MZwn[ baT&|$-[ C4ER".4֔a͢8Xa"'KPf yD\g͵D`REkV~/E  Ư 1}"Jঽ6(jhWgF3Cp@ggб`3!rleCU` El9+S cUg4,o+B> WNxvGhItQ|`љ~;&.QC;J R#oPpbܹrGAx] =+3y<[*k:ߜg>>2C~T#=Bc5, >$"2a GwsW~GeMy2}q'|Kx>FjDrp DG`PQjh_fA j$AiaҦ}No~&@~ց( Vwʝiٳ x\dMRxЇ3J~ {\bj|Ia}Org 6r"n9˥[D~$o>*E6$s]R^> tgs|'FuC _qX0"C<_UJ S`6k5K_\lu.GҤ*JX8zϳ9Ybwi]ڍz']vܐGf8{\g 15Dv&$ =b^|t.yЈ0IG# n-buU퍦XI "Jȡ ^`P0J?VnT]/_Yǩ"׉6_OV M?ХqѶ_>3 '//ٓ>\4Dwt.q7vdl!$aQ ji2]Mgpc]C,ظ $;(!7fY٧@G̃{0N0E#Rb5<L/ja s\'V'1^7'h Q麞iyʼnUNDt`D$?ayM B£FbqC'K+ ^2U7[}3$0k9LyƏZ#L|ོ>VS:BA$Ctzr#.)/ 4c3#'4}ڠԟfG!BL*1, yBc.z,aF}VNBBh~0>?E:qyw$DIE TȊ"w]7B$;gq&ܹȤkIHmHصw΀Ԕ/[|4| {Y"پ 8q5Mڠ V[+U~oБ+۱n/\uKM|-saZu77DWV 5bsR J?e~#Ye'>RC.Cm&򞛜BzJʌwPC,gLnJx5uW),iY &+qz7%|y@ylXv&8` K}k>G h@S]}^$RoQY`y2pu)jrV@-fezcV6n_qHM,C Axrt/PdegXzXX= 3h6R@9-z?VBlܬEMQS~Tɱ,!E gBYpHۍ"rT+nMY5ǙA!54[gLXf;Pb7qrLÁOu*p_‘YmHzF"® @#!q)Hra>r!TT뜕I=ț #qhmd7&HEtHcR ~o(nj$rZ^Q%ȇ +*i(=L>Ht], *94aH/7}MEy{1$|)c`._sf\S1 bЃ`Z_0V.[1y@񧨀 v9 6ΊN'@"%y9?\#MYq5JS_R1qޕE$+_YzlJv>{F d@s̯RG!'1Ō!e׬l#M~P\20!:RNSI J g\EiVSΈNיZرLFM'i@^!t;Y|J\ra .r Ys\֗yb]8IX*MjQ0JTֺer|ݺGqv#TLZk,@AU/@KpSJ_a ʝ`3n++_vٳZl{}˕T3 ʎam\-'iN}FN\I"GP4fu%XE0,/Kj }=j%׵jOgsnY5d`_!Z>:0eM80هJ͢b|⬃eq*>5$ʝU>qWi8qڥClCJ" M}]Jo s۪Þ1=fNg}W/|>'`~SJ+LҁC^14f^4_9^t(2pև'y?dլE{YH4L8qZx B8pEhĪLLV#~pbKyN(rwW XzͺNUTf-,Wk?5?_6 4\,f}33MߐS-iiV۷40ƶM""wmw6WkwF2j“iu  A#*KiP: ҋ;? NcAUo{6R԰2zOŕ+3aDuV$hHu9g"WÅ-+F2]ZTo%^'EPaȕ쟔TB"qe#F^J13;cXpaHy{ X=KnKrG88zIju6$'* @Mp#1ua|eUoi[@ovQK^4h (PT83[b+b0ag:3[<-$^{pݙ%DC#4&Zy,eϑE+2?oDݔA>J ]#I2¿ PĞ޻9لEV V^LNpF)vCGʩG_ku'Sm5ښ CÂa6fֆja \Vcq)"6 NBDi8 1mFzHʧ**7h6޸,RѓeN7B#fnHn\dXi|M&}L#-spϲ|{DkO搟u<P K!2}FˏY KRS480hF-:ru :lYG}HƻC3 l)qצ~0K8 nerOďí|8PD"mQ CUԪLBQ5ER/jpw:N*& t&7 5Em4ߊ4c_)e$e!"/)%6OA֑p:Լb|2!<[1`X|ϙUΠ,)+C "s*E4U%'C{ bI4rE"D x-hR$gWx{kR.dLZ5* ktF ߤ7"c^W ,GuR 8 ?|LװeogيW əEz?G0IQM!#`v{ȾM"~eߛ𳖍Vo%TEjƫBD M9:m]_d[̮T[(* )~gW%]0feqor6+A_Ԍ۶A">#kG[%aZ5~<7zr? }/^1 mAؾ+a蔁9wַ@fޝ'I3om< ^]i*5w}w~3&&'/HV%%B%̩<14iЌ{lpI4l 6*_ﶻ%g[6Iv!BaV72W_h(tiUxtbtDeRK hiU=rrv-IbfrNGÚ5-ejFjV0= k>+Z.&t,}otE op(.;p—/Oi^5)],#cV8Fϴf \@u _31Ex^zQާ=rlQ_FRȑ0eFQI㣻ǜ ^GɱvW$q~-f7=7LmSiq=6f$#˱M}΅L0'*/̻5r? URQvQ~ h~뒃R $iSJYdAr?K5־%͛EZYzX*DSQmX oKFIJտn )fgcym[Auts&T95ĥ`NM|Sة& &[.:,.(ojCmo}6.T<{=[[T}o[3k|=$*Z=k*+!DH޶n6 uc8+zssxdc99],9Q阄ŞZ K05 yr)@瘨cuϵDT}%!b/xIgѶ$ZEs._z+ D\aO/B%04rɎ8I&άTRJ Z`sה'ߜ^ј|[?vL1TLȒp8$şTL\DyI@XE@ sͫcbo,1V+"Q4A6L?mN#Y5݉lW͐~no}k7X5 ,} g!bzCDF(E5}k1fw!9 dH MJKJua0Ab 㷟 cj4$)L8 &ߋrC0.O7YՁ>3#h|:۠ci HY[!FMeQspm6F?$Dݿ)|Y̬]OA& ߪn5_NV*2r*~8ޔǸ,H0ƴhZDSB7 n5sJ0Sj*5K \n ޡS>Ӝ/ Y<4<}FF= ISKE1qF[>ϿP""UV! ]ƂDy@'p@c)R)B'3n|e=lBpEQX# `WZ*o뾰qVƪg;'2A~$3G,{Λ>[lUc^OaJӞՊb&R fIPD+= Vi `u>@0A(w2S+gxOE@+ VuKTʎu=DGnQ K'`yi-(c!K~8 [9`E7S%d{L݃1G;CF;;Ԫb%uj8( Y ;IGfGq#p,!I*&Md`í[`-O0F><)`]%<>|v>O{wK}2 GFsH/m?Gޱ`yJbjΊȇs^tF h~}0+`@^ ɛ"SI9ӯf~Bvؚ ~k*.ع467E]#K># &àRXjNڶ`V).mb20oNFsdRq,.#!:ҭɛbtgՇՙ|:yMg&|-yV/]?cV]%3sI,1+=\@ r%yT⑪aNtDLQzrhQJLo"᪻/guO۲O.\~uԕIӏ#|"A (ް΅fOJ;j":w..kJICa'TlצP͡ob q2thH\uMcr~Y?BDFІ5&[h,My SܹAsiDpc7U̸ĆNv3i\-+_57M?ɇ|d癆Ip&^%E_e# ׵╈F EvVPF¥ ҅t<,H22#LM@H4u&].H9ɂndh/G׼8M7#;'v}΁2) RyB]xiqNee](i\?[.:JXzfȪze6WJTTӄCQ21f:od i/s*x`,`B&|)vO!it4A7yŚO7}hmW Ƶpu^7yFox(՚uc#IEwV{~\Avc{1]R>LÐP:.M}iP_Ѭ  W>CJ;Z#ekfȇO'[I[?Un`+NBzã M"y,Ě'q|96Z*}Q3e5)h=tighBRP<ˢ.uI~f9ʓ;DSȴpUԻ2b\|Exұõ8IَEī2 NP1$Z)59B[FSS~ԈoH Rtަov)eة=h"nY2֣!K}KVcc;~0$]Z4 E_Fj#e `3ȩk {nWflh x&[,;T4庎8O օgb|^A n{ kP XCY=13ԹMdP(vtq&%yܶJ0wk*ZMrG*`IvHu{hON~[g;vǮDt~?2]?sHZ2'hma'n[ J˦JAiX>}ZQ] ^? 'W̧V뻟ٍHYݠʹ~hgnۑ#f,:Gb/k5`z.7{ifeѦ2ax'TwqA[ Rb*d;վ9߅i}Sŗ 6Um^% %[MyΉ4M[Ug ީfH z]Axu `mᤫ/W:$(B-ZQEn1E,ӆ"+R6Y>~ -K!XƊ>vv)2>\Y[(]" |N+#yLOD:\k#KA)O(Z73eY^@ϧ >-eny.Ed?|<+J~,uRbyXhozvPeYK~ ”8B?B"{AZA:Y~X0~7Kmq@A+=|⽌Sަ'jesr4IQ1 Oo -M E x\jW C* ' i,,)F7=353auC@æCC8P `,$R4Sփ`6KR߃s((w00k i@WU\67ZrhoUBWH΅gf ^ll3=NlMqVOnuǸ`Ƒ q/!3@cG Ve]VIVՓs8)M,B$h6,_ !9+8dEY:?aurPSLػzv%% 94DH2A%zw3F4K qӤB9|"x”NhYj%&}MJ5,S'd{Zo}* ` UXF%tw.7\^eRś9b k?6k&,(M/{]4g%ޝo=yahg^] 2Nqt b-_dFN18w22 ({ν$]EHe/'u[ڨRsY+I0xD #+뱴(85M]5gu# _9ME/`= Q@dR?wr.Ng@#&c~{V+{Sc/k1d 'wQI_;`I:hyIhk|$?@))S6 _ɲdHLCH;S/>1 mF 9Ѡ2}6{S_=PcIMͷ?I^D@g;Pz@|:jogoIeZhйButQeY&D%Nzz}}=/ Ȟ;+1L⋞K;1PmrqQRFl'hu%?U1DDh(:$nkY4Fxl?7Sњ)?S\Tg켡hѱZX_whvf8s텗3Sه0zȩ*F'i!g8m(ZVURR4>P_PTN9Ǖ.(j@,'Onl>('P9!G39LW|'iA#HjCrۭ2, ,Q%C&QTxyWEiއJ`i^1Pl Y0صgKD=<s9=Xj\죔ankimm cn^7q Kċ4jY T8{J)wx83`/8z6^Pve8f燯*ONWص [_]vjV?^9iăe&W@LTYdU|~:PZiBF&!;a.8:,cBPpigןY"ui%޺ n}u;T!'w͂4dY49G?1/L& J/&ro(R$?׏Gv$!ݛrDtPz|[-@s[&zOvnOF% _>02Be:]t^%&?=Y;e)&*EyR8YWHi4dc4=gb+ Dd l74dik') W_j6$+*Sw-z(Z(0=[sNݫ jGY1p<8njN&VBE55Ś~Z9kX&gh}bľl{a`0'NgO~=ThkfXKU*'ɦ  O'bJy2%pe"`C% vKaqO\u.\ӷ1_ѪP p弛ơXÁAλvSѐ4/0}{j2fT=D۵}y3r߱ ^p,`}/VP Xgr--MLֹ:%m4),k%ރ.wX_F.MQ8B|vhNTh&JiNj A)y |NElX~+Qv%YSQ`oi6@-u$a҆_HdZcON1Fok:7fzy^c5NCTuSv?+9jvR|X!w}6ڲ-\*j "vgH,\ &GEzI @Rϳϊnİ%%`y2Ʋ"qtB(Dy<| T2!7bѧ&&f'{%pԇFBf(!%a0ӑfr\l{{`нGfmf5e4:!$&{=K","PRW#!ɢAR;_ +*KF'&q*ᐹ\H$Sŝ跚kTVAQe+aQ(J7$Džkm JS _/[_-Nɦ?8yZϲT@Fa׵W }'tGɚ43"!L%5;+ }bێ05TM8VYY# V,꤉2LuGHAц%pz'qwK$Y;#杌p \u%IY)V”7"ܨ[0&Pu<62dy6Id(E`,D{Uk` bO)wݽq~ mQ)Om4 hTRwx \ᔐXh&O IJ+&W5yr<0;AmhI\[W-zN+[O@/Fb|$4l[f4ȿ!O1$r6| {Rz gE{ց% %dǹR%<_rM'%V/]VjD"52<ޑ}eBN@畤uc#9 _DOB1?g~%&" 'XͤZChpm#j4̂͡G,Ayv0X81l1nfv,W{Sa3[{ ]͐yF?o>)Өfө4iڢ9'E6dFBhi+}." FϜ"~K"Mw{&TyPnSÚKba9Wo.+jQMzc' x5Mxp(TeEt/ g#aff"ח {O|BJT[:`1o.ϡ&h653_lH^E5=?&$b>Ns.n(JJ5T@TVH1j Jtjq(j[`';u:۶hÓ򍕰%;6UB 5o~c:93rEM#baf a*5(,ƱbmXmF6 qԃp/ d>=s{H`"Z ]t3K:A"b{MBOLOu%X90J#)^:V%I؄EE,WG$֔s65ׂ._a7Aۮeo\1_9vXoe Jo$xAiM`?DBk]'^j8\\auYpeW瀴Xn?*|141*Rm;B7_ݻ\ pЯ- g]&vKbİcMv䜾1 .F؝Ý8#*;V{&l68cn|cQ> !gLė\^PВ!|KQѧл=*hY֠2×Iàp Y't=Um_H6x.{hrW'{OYyx4~Z]-܈3k|| $ayౢgtƐQri G{թՁ5ʲ>fdIQ K l!YuD^4'/zrd6 3%BEl>鼀t7)֩}|4O^P;% |0,5rFs+:h9kOI_-sbc8zBMIm ]s5A:r_ ﺟiI*#׻+ī? $ENJ2d?xݶב*;1jr.b㒽^DJtD&N *ޞ\ɌoDWdGnH<[;-tWc MbFMi:azBF)ɃIFRM߀7PGIn"ͨPO sO"ٚVS K3wbE4,)>k1nIk[cyŤ e+^Q60EӌV^W5J7KQ8 bџPqW't% ^=yfB;pR.Xݸ8:y,\e9KK%#+r888t=4ՉSGO˘ 6M% Eڧe2\CKrh?м>Ra~U/ )dt aH;a&~Bm-pqޞMVgBC{ I+ʭguNTUdӍUhK(\sĠo%_1d.y $61.|B]r̖c5Ev BFI裻{Bo|G8 N,7c (-q9xn];KCV$ &S -JxܼH]I5ZqNF(AT xFz1hCK).KyOJ,j][#M(j 'ba9!D#6H?ۥ87kӚL4Y-WQkVQz4$4B'%XQBVjr4TS6N1Cٓۿ fЇTIǦn2[s฽u~ Y1jvUf]#〖\P/*+YC(bWCX5s11)j!;*U H(qP_hƢ% ZzVwV &#zh8KJgeq&hC=^zCpKɋTT*#<Rlm~;AOy8R=i!~wxC ?TxjXڈvDvӿh 4SYeGBKovݜl3pnW1,ο-@.@Z٪ƀW ׎WPxwC4@E8p>KZüH-٥1(cU>P9\H9Yi;[`v[_ǃ1OL+j+|*yNݮy\u9~aÀEiRV-ٓ\<ȝֿhSmUZ= Wr§7jXh8cWҤ/W <$EjQ]rR~*}>ru9>< Ȅ$I.}jgI3W 7;nR_xhHZ,xKB8歯_ AΆTk4NEtr+I,l&i%5bAᆋ+T8ϴC$ z}}r *ʡ?>8?%ػ=!z#fلw3 P]u_F.M+ ۂ㰧#fp\fᙿiUsV(b#jK:67\2ˑVU^_:FMjs |yLQUٯml;ڊz:%O0b䗮]@޽<^h9t1lRaWWicd5:'2#k6bY ]^־'M'5-Q^q0KGͺX/i"p[¡yWf-ڂjN&?(P(n!-F)}H[pGiWWP3dKZn4ԏcsL<+kyْg fm4F"l6%8_+B6 iZWbf!Zl5̌ UC'z<]7f]aeH=i@^H aK2`kUGw:{qڄ>nT > djph K֡֜m: ß '~Oa ( l5\/ U}9'w4J+0^&GwN깥Tc \wF Xmܚ1yr,6-'SeaКį_J7ԇ)=БKD`85u]8L6]bgȦtv0؇{a8ۛ>O&|iiu^}( u2C>bQ 8 z9c,VF.HBV;{?Lj{ 1GvE绳ѐ. RI07?$;t\lQB&Q۠TkCq]Gr(/S :{[*ObKêz38¡ݦSɎd!\No"@F5:`Ö?XNX_2ܾ=##Pof) ,0$ Y/eWL: 83JiSo 6^A9ixd4GV?4@@/!/<2iu'(].{rrPN'(pj-(Kg~hl~/ļ Za|Cꔗdbi1,F/ 7@JH(^%i{=o8 )j-S{$N^63JѿcI65<%g̔69-"AH VV nYoÁ UƬaܻq8m-4Smۚ(>!4x1ˈ)*g`Y4-~D*pkŝ;Br(Ļ*-Eռ'Xwjwa[D%uvV=kAiva%g7$~t:Ww.G9w#8"FG+v%u4mƭ;˜y8/FV_6>ǭmlS1]دMdG ?z-y>G'\Di3h3z#M:R<AC&وK Y'>#}Ye*I#hDa=Hk&u\0īT|i)ץ7-  =uQ@ٓ؏hY1J͉I *GHR(P#i2~/@rPnGًtS'X_=n`jH+v0ca&J|Ksª2{$az⊧RQ:6JA*7Š+ i$v.'9nbXx7rMh >% ZE; x9M'ɓ!LqPezGkK_7k%!F͊r/F'ʿ՝&>İ~իKMX iD*bp 1",]sƥGƺśߧ?@)Gy=<b6` ,Ae_D3s QHiXԓHA^ L Lj\\K\ow Y_n#6uO9 H""v kx- |Gh@6ηd!ʦEw9`R0|K,5p[_.ݤV$.xAlwyn+2U/Dйya%(>@ %Hhu`.iD{#JJoeT><1y$5{v1CwkV RVuKFxdoas6#9&Y/Ҵ@)v],5cZȝ^GBwSбEć|'Nd@w ^,HV`q0әN( _{G~|ǟ1XĶ n&$gTTDED\A2{i'ߊfȩ>K4t) 6-vy,`o>tXA[~bI,d:6$$D5IFm{L߂_8䱡Bf8%6=VQ­;{EJ0El) 08:O7hw]hƳh,N=#[aYE ~#0k̮ DdLSJ WRȜ Yc& O'șC:T2 K y8WaIBoߥkب{I"M| 4$kqV~ؐPB(‘Nhdi]#*nNz-df\l?B|h4bJVX3A%d@8){N X3H)zw'hZ ܐtVjLkZ8zNj}hfPҐ1Ǟj|;^&;B(4%9҃l WoZ: /`GW>x Sɂ~28x{{7ZdCBuۺ-Uep3PgownrVkkuN¶miOx ˠ`Uk^#, +蕵8ƃP:Y~eV~6GѦ yP9ƆgO=g/=Ma {iĄax[-횓~*%fcms,,Ͽ,|&RȞ[.cK|MHmE4ŅjKQŶx-`6)u-˜@y~\j&4!ÝNeklf5M:d@\iWSFc8%aF*MwX iN= pQ+tfe=:f*i[lϹ1`"Yue"򚅜x0z5jtP&@~MGh#ʌ+՝ÂR aeҟ;~lX$5nE=.(/xizZ-WK w/qfSq4Ś~Y\3|~{Q|_I _MӶe3Ub}ݝ\3DJ6Pyjc)f|н5r- &TKfa(MrL4{>2a Cp~9?ݾH1n#Nn+|q%"N 5)~)1V{O"Q9]8)a7-~ՎFP6xpICO3m6r۠y%茒;mm JVat9mX?]g$&$\3@AJ3F'}?29{׾"dJ!|Xn)+ϒ: "~nѿcq1?p)LluMt'[LLwX~hćڟrC ګ5$ Bf\P+RڦkpKt'BrێݢYE-a-EؐIdPxgxo= kvsa9dƞ5`!b bakj|-B` Y>^SmZg4[CǸ)Cr\&U`WRrR:#cỐ~s{kd2nkfriJ''-p7]HL|vMMaD{j/v[]@liVߒtWQi\Rq+̌!Is]Msv,dņ)H { aQ2{&iqG,?,φ[U+Mvn+PFf^SW !+ CI $~WR!="k2jp;ZLpٰ#}`Bvz^JkkHcH{0k hc C7ƇR :8MdϳLbX,p.-K`'QTtDF#Lp}i/,Ɨqږo\jAq#He_ӄֿ^۫Oٰhh> ޛ9{$˴3F;KO9kJ9Lox4h61k1KY_e H t06! ("j{pE4x  pJd"F<-űnl#FCu$]֘@Qԛg݅\G O ,lCt Te`U[ lZ MpbG&|fZ+h9 Z]SF O{>Mgvom ݁nv1H`30jMշw#x<''X29mWޜr,;XZyҊ^;&'+*\X >6-(rFvsVGoSv>4d1·v؟j\z?п L1~)RIvoFj;t껋$k#;c; [{N%:,n LbB/yK:v.,=3""nav#orަmN$ܛ]@]+H4FyPw% xPM,I'T@,B:MSz iF& w){@1ц:nf>y $S\/߯ dM4\AVr\^̒k`/|ngtFթ6i9 J 8}U[Fiazdqvy~_8Cz<_w B-RSlt&J.ُ͋A+$!Z`_,Y~g?#&ZV= 0(;=$ $Z'TkZs/O25w>?'pGB jch֏ 0aUiWs6S$r\NL Ew5=mA{CWEbɕ6pEHkY(:O΋`EG+҅Ct0SqYG_%U"3MC8θZ'}f>nrLﳽ6]NHڿlRx Zo)[rRJ[- "#sL=:O~,wbKoj L9p7́= PI@sd1n(_5^EՏe$x+0! lu\R>+vJ#doʗSا'Cʣ3\t6PmaP5QN?Ӝ\F8>4m{q Idt4} g#Oty<#lw-ܪQ\4IEgcsy b#;ܙgxtB ,'jy첫!̣  $S'=I'U'SZ.+k|E4ڦʳ[X)b r>U4flB~?zWeqqx!:EE?l)@vlZĔI5 Ua"حaUw# ɋQh8x)"|֕Lɤ֎s7jϝ=Δ\5{n2=UyaJ,2~>QaRXxG)6*nD5-VQ[$1yiao֞96I2y2mQ*յ؇'{Mz,~'TQ$HގC?/M}Syљ0)*\u%\pȶO>u~}UN%} ~dn2-ܼϊM|ϷQBN팭BiLHSOK&VmצpN  FCJy2jղ$"_IV&>j9ROܸԺ/2`* dI4~L{?[5Pyg J/gǂBMLix^h9Ep83yΓE?*gq};98|%s_Xha 21 exAvv(d- 79ͨrnv {cXMg؝ѩUb$YHD;Wu; ݂"SrU'*/9EY.bOI9}?Pcf-Pِfd#@%MDKDUNnIa0eQ J_bmoVb!]?Ů7~!N[ĵذ.#oc ^T #UXB$ǡ(N) q8D*͖]).EH W}NPV4N679z9hmd_Bj1Pjg%:Xa~.2/ϋ7^ ^ri z,U˹&+FWa#j SBXC8iQ0Iڭ-B_ y}kTe7*̮+60E/r?T4p ؖd(fG0bj^ѻ[T/!Bּ?'T~MDJA7[)'I'!cAA:C@v$p [#^B?@c*"9"3'e*ܗY(:MllasGXHljHwܡ=$CM8y/CJ@4+!Pd\yѢgc^`O0a@ß·E[ hpwuަ7-NK1g5B-ZVWzܸ9^I'|VT'avp朗i3 2h)Z=hT%(&lXH8m5Ф eKYI92(@?V]`_Kg1ȡcT_V;?=uW:!N1ծĔP3Pu_y։m~_j&T=k.Ird=f`fsid`LN[3oˌ`uJ{P:w.i2YiX ?ˤ<=Ҧ@bM_޳֛J&D*WRM:c.Pw\Bw/k<"S2\їu hw`.H,R}ԻEC h~;~ q$Y:tON `qWˎt+޿g}#Hж!z4U@(ЈI{WTa!]02p D`xǸ|Y=UmBYų+ T)(!Xgh>sP yPi9#`ʜf#Z^NL/W|Z > 6‰ƅ m[7n۰[TKA%"˅J+ i?Y| 4O-D7J3gٛܭM al0:h2 ښgfS[ 0:侳Y?18hI+%f9}o)}V%b} VM0L@% pLR} ;}Hn[$qj(濇w2'~] r:[mB0u=\P]6d\z$F֟dk-|ƫ!}j;Fu#wRcoDOؔb.?5IC?ݓ靘 Hj!@KM=JͲ2{?w#t>舮Q&՗=^=[^] g 7R!r Uq0ϧif=[p^WôAq<0"Εq:Ju(Lv*saGOC*4->QnކtLd^ТP8FG2P6GNH]AoPr_?ײq(p 9:zS[jFٟ 8~%L 0|e?/.$cgۮwI{l7[:ɿQ?Հ0d>t7 ԸSX-zN[ [<&H1i {~%`e&]0\*.^!9ٺ'EBvB` &݇A?L!ظ; S&o̚.(F7h޳tWwQ6Yɍ3>=)m;kmgztȱqV) }TA(/:HT[4aCpI@G]>M]7.2z^6$m#&] ԥD.ƒ)%/6)Y wUrn"0iiC2s'e5Ϫ)d A_Jɏ(pWzNY9RV M~Cߌ=߼ FQCx{,Ge4; @磀|f(Ԛ}6s#g$&Yy6v0M ۞5ʛIx elPܛ;ym_^ŐCAM­/k$;''\~&m H=;n|R xN!4$`yL'm@(|*1yzL1s(\˷2*<>jc(~N,:bM:G 3pҦGZÉOu+8|w,!!KV+Іܞ|[lBto,+m$(ymc:a2;be]qS3t_L1Dk?!YpElDıN$1q8l.Y0Q#BHFA5.,oz&I~,Q>?o<^ϷOGy@Se\D"SCyy͵0&6fX.;_ I8WF ~ylRDw=Ȑ.V+Q[JQK8uh91Ԃ^M˜ښ}BrgSV9APH hj2*f(_~(!RlKvsH>?gx i7F=>/lޟt`x]#/T{;>\ٙ]h"ko1stXѹ)Kҋҳ{ay/ZApިdɑ7W`)k2޹o1-i ۣ WMm2@})y?)7O#  Uc ]P;2/3lBd/Fpb6?^y\rn(GF] VP 1_UpfRHKHdHQ7Pڳ}[oFg+1$eL! X!uUiMy;Mg hb̿S˛$M3ScYC/p*ՉGzp@t[.|'( 7Ӂ82dv6샪j|Iը0*壹Yp|wjlVf"cf/Y 0hvK ƄshjdЈ9å@/} Ƙ0^;a0ܑDz(%40ꈊE/g]òdxB(QtHPT 3yҭ]؄ޠw5YaFӐ< .ӘT?N}qajUZj!|ԣ3V@kG >~k~7uO^r$0%5wsk8k}:"_Jp?n ,6$~Qr⺨2]4|I3(~Q7^|2WZ2М1 >xks[#Uy|6WA ^9\). uSPAmwI&MhM,k]l oQ1y/jQq]ֳɎEQpzA}) Pْ<螪Wh`0De65f58PR谛[S+(sNo4 gj69=qjqyK ~ ew;iL; }=&h]ytG&jzRPYW5E"2\rPyCQ]t _Yp-t&*j7C P̟+5/ս= m_iz;TN/>Yb!7 $oKro5 !$[z`vc"\Jخ 0a^ fxcDսKmח9< #%TT hm44Ij<,TP~J{7|z/1}YhSEM6䥢6WSCWTuv[|"C),nHXYwYWG-3UWףLmM^pKm?0uELF|yLVm]>ZD{Uv~mܼjVlDj SFver:HN _f<驸1INwxw[To[lpړ+.O ߕ58W5D1ҬÒBFye۳ą.Nͦp`Կ,ÎhavKԀc!u{7/&ǛoUB*/޺T90,j] +2*HCw@A҄7O'PxePOޝ^Cxȅ7 完UrB}4 pيNQZ ƫQьc1܄Կuj9W)=o Ĺ,E4z-Cd/ 0Dt Zxwͭ ьa[aoǏe:b0+뺙!Ԭ3i*߮TC8[pHmܞ]/9} qԒs&E> fnX6s w^ _ r:pU>j 1ytG|U4>R:5 I_6m bCr4s+ a, )X<=u0[Q0>4sp[fgS9 ]z --o)Ej5'jNʟC%UsFuFKi-,<ՄM!M;J!)\^ĥ07~^:;>x ҁ:U_FЙX=ڜ Mf`5Ff6Mf&8NdcM |cU L۹J6mv1rWipHsy7 _xd;n:zr$, ޕ;h#V;NVj˿B~F _c%Rj^ݙbX:f}F$~CPd_rhTwj>/a/YB9b)'VJtShʩk%| ܓl,h?c2.ove0 Qg|J zK rkHn!BM+>^|;8gG/;:5s&mTኁ-=c?% t oCU`Yjm=Y4!G!G.n ʼn9Jvx1 Q\I?ޏdǯZ,{gJrj ٺ1pՁ>XgΊ<"}piw ?C$}BV)+=š+TnAEXB> 2 Ƽ8 x׳lAcNBSpEUy%.Ee {:t2YaރyN=KIv%cà -̡)NC94 LsB@&il{z|˻_H8^_9x8'e9 E̷mOǁ mo6n7-i T0s}qyM#`})^2n9t}a~!uvi%_k@c Vm3#K1^ë#l'ڍI^t|էLF;o:\P,g+xj]-mW';'6Wk %(ǦֺVW쁮g;}P`t5D^Q FX`AR?!mq* +-ōJm8^d~&wuqz%g<)8ɯ$ĠX3Rt!cQrpz?'Gdj5cφ C]S槣q r}EbʭaOt9fJOX1v QX!(FXx!,|Jk}+.E.M$ \jB?h,+|Tn+K3|Z _QhL)B& T9=f)vЄܧi[jH#\jh,RBzxWA F;wYz&E{X7vGQ ?9)u7"6%i!F`H|'x Z GF &_eB;sJ~VꈄZz=~3sxScH!ۀgOD Y9m)$J:SJQ*OD>dMgŲINAVT VІfBfw;2R^P% D#€5mn&Axlğ@g7.i(~xO=>ck55ۑ5h1MH%$_\6)۶JL2W%rI(~ƛr=iDhI֐Զ}Sz D j&m9 qyg t2"$tzfk>tqĈfԉy=u <Ph`lco`@'GGxUslNLJib1{ DHS~Ib_x#jw2K}e6Wj+G+&iuLu$N [/MFYOE 3phu셢PP%d3Yn_Q أ8h(W%,;bJG+ZS.TZ6kj,JVv!>+)khImʽӬ$ [2DV(m=g#J:`\Bs3!t%s@|$+j##6CŨܼA;+;C~n:b@.mv2ڸ4ƒXa'Y`eR7&u< XĞPWoao1;$E_v =mlnuG 4*ꤰ_. W:K+|ΦֶmFzJ'OawmRYZp%azDhDZ#q,ʊ]ݳϹ6ѯiFx !|j[r]n<}pxϵ{Mɽ׵Aw9x9-+#aZK8" \^ ;|_L~DCv0\ь 0X K#v5~. "ҵH짉[~iEkojt{zaJN:i( wqz[[.th,y pvai/j&a]VaKBYOʞdlPN_\pg"9iظEI)X!L(w 8@Ȕ\d$Jo =~`PHPUREX%lN 0{A$;j:- dPԓ ~Y?@"*P JU*oNJ kZE*f꽶.US_)lΏkʛX_Ct\XՑ*w0gg=S{Y&-B+ar;g2?K~~f(t<(nW쉨B)no$@r7M+^aRU,9SED9g @&Th_KK7(T@>9I`j)ѥSd .ޥv$$rxFFDS<@-. 6w%YBN,]CsឩLkb<FÜnYdզ5&~@L WM"9*]A°@,?E8Puckje/HXpvFbw/h3["`uѡ=#re)HJ=!qqI~bf]i&nl"hUo)ǎ<(;2+BrP1= 0t́;.=qE>J{][{o|z‘49]y$q﯈XR!J|үbR!}9}lgrQ-Ab亝Gd:Q/SG0U d^c:ES-!P4XQ{1zQ!*CcPDzoܶ]5*eyCV3iH1Xd\< 7AM[ۮB^ ťYåa!^)o:y뚣Ӕ{rKf0F9}_ |XEu !<G}Y7ͮA".fR.Cl^Z'pFaZ{X|RUwFY4!<]Km*LmS,NAiKӿ4R|G"pj_vD?LTW{bZRue[e'9& ܨ?O uk;1<:InQF*[AW͛yeOi f }wIJ2mq2-F7?NSz%ؾ] 3;-?e "ryO|=uм'n‰(K=mbdp%w^D"LzD/ǣpoSfoAxZ!uK;8 /=׵$2MI*AkθkQ,Bԁڃ(Phjc7omQsr5<#k: J},bڻȴ_!ꌺ+R9!CD:~ۡwQʂf`:  <..vRig̳׉1)(UcY^nE!6'[)2GA@1"tkw[LAI-M~HnYxd .5a8ytI \"UzxsP{K .Rn,&4v3$$AN'@&U=a[FCZdY=mпvPtYrEuglf,@?C@tN㮆pXЙ% gKS;92"Q >AՑZQ]h*aJݡbOI;@:F| 2LI4="}x5W q5te1n2mkp%zQr(Xj !NdSL6_ckJF1qHNYǪT`܍ޢ=M`}$zȆ4`V/AxB_Y@ي)Eaa{u_jRYP]@m|I8Z1Zd!|'&) Q6I$dL*9 AwĬjV  {!;he4ElzYh8s5ɑ&cBb;d`_9Kkxѿ0ѣ}cEt#0c~56✅(G$()o1/0{}/\ 4Hkj8 A؈RƵH(;fۉByQtaG7j5A)DR?RƣO+z( ӡI{B;0h S@&80M$1[Hyu%m;Dgdӻ}m) UNy5_^0#xIX8 PP/ɻf'^Ƹ.Dj29mƾ²vh'5[n(qqyܻJd p;dRt<9)Йfc/zķ2^ `6LzuGy0s A[)G`m;g"轳 /͖#ViAuiJrpWp;]-썗H)‹|E@RhMBl#EX;V|h}F^3?)ɘS)` %,}_u^/.Sՠ_yIb5wcD|R0o /R5R<*1=&:yصx*Ń&t1.pX*.7c24,wĺtg _䨍ɹBD*ah dVoGV`}j`40֛JEp|)A2 5"1ÇO) o%5;ê\lws&fvwn%֗wI6uhC)4N?rA-03,mQb\Uörlij7fV#]BeHw)a61K&kLAQ;Ƀy\݉sCArf'4N#r٪v]RPV>P:BӡܙR1Tmp]kT 2J*K4k@`z~V0m˿^mGt O.InNwbF(%?`8~;@0 K#[+ZStdi˰0faHEL8p8cJ˖%I:0e<6@dۋ BAq7R-|ANJ?TJ/[{;I^!X!!nz18@Cݯ `P5N4S_wBCKPLSAz Բyͳj=ՈU8[\^Yi~G #2ŗ~r3D׬5x>FkRKw&9} ~AMeO{_H(7QU{x:=F 9Vdgh#uk޽bj# iCP ?rHцsӪB |C"RST 0* _iRN¡NYqLiz⦛waQp)cƄt9BˁGV!fQ &ߊYOEuj\IZóK??̓;ω!Q͖# =`-f#k/QZo/-0ZޕBrșkKCg ?^ʤqGj:'"w׳p%Z{Ek-_i4|O,VZ1@nP)aGq!5J0T,|&O1r))}cdA*GKMݏ%Qc5Lh*MÖ;V MqusAJ3Q0A]iZk9 ՆH+9Od{T h0sXM{`T_}Jqaߧ]UwҝXB&!6 :F\-tݵOW ynD%ŵM O14%M>bh-+0ŗAY{GSK2`ԍqw%\>m$vP;"a8^bMaH`upV:- 2%buJ:'<*07%|NxMpGe_h>~Hm=63D}P駖u& N*9?^%E :RԺAt(k1Wv/\nJx+C1iY|7]HWSM=ƠZ4XެݩF92C]XP]1皶 dkC%bD-w~?d=2`K-A]U(8#zwݧ,PG߉z@UI`OԜbQm5􆺣_[,b$TK:~};ry8!.ӱe6 w[ϣyqf.%]NV-euW{ 5\,:Ab6gRHB#ЇXH]l b&uc~mrIBX }H{ID-6._/.~1?ϩT@2gĕ. :RR0#2AmW'b܋˾ՀR&\5 " G<&́Ӟil~j<&;f@"J.| A3 Muп&HLI$Ռn|߄sz2IqZ\mu( >Eܻƙ"tj7WFdeuf8UEq 1y # ᰎQ1͒xFh@4vd=:)}vE- ?A%_omrJ8F]5G^OtzUʚ6Y*4t NU~exg/Wis(;W-Xm{s[7K}V㡇T`TT'xL p>[Z=.2Ei;B_[ SXe! wi05"'HMFc|&۹D iocK}\gDF^5"3? Xwz8F]#c77 j݄FNvmSd?["t}fE"a:>j7v0XdT{$xɂ~}7{ˤ ɨ= tpI!>  Ps(`ԁ`yDt BgDnHv Ճ6EM!g#Q:"(ekĨҾY7ýrBqfN-=~aqo8!Cð}0[h v%WJ0֦\J2 rH4V*~P/is%#Y u9#<9pr\ѬLT`I͍ Yl˘.>@p(4ΜjIO)ULe3ݐ:ǫ;'ph|nT8*Mm8pujq^X![||, % f^z#X <@o9lmςT85k `Z{v>Ep[mA81* hD/њB@n-{K!m.}T'I2.ȝ`Hjm(H)~ڭ*ƏT%nl R9qX^mf Mv']e)T94 p6As @(.z"\[Gwlm\AV)+W@@zD&VʫY[1FĢ&qTz-DbN6~B<!3W+&z^vO[?j ՘=1(.d(`K"<'u.ו؊:%iBiepZf=J3W(wڑ봵v M*.#7$OYȶOYz '}MH3n}FO`P=%t*o2f&dj2O44u@(2KLX!JԟB?||%m3':cKu:/8(ɭ8.NHB'x2\L%-kE `Z5ck{E;a8oF1CҶra-tD)q\ @ww%DձdcFTB:?cػz+ܣo8|u bKD2vT``{>%WKAM_UpHfK>j21PZ uAP P;'bܶox̉ҥorY԰.*kLĦ-O$L!W\` F`ܡi(j8!Xl=OIlS y:.()pO;qUw񣑃K Q i6|?K u=A9ӏl.^.*)!5z8$]My)H(;@g *b9{֓l7__g`(8PggKu+8 ng +ç"Wm pc^Wcw`&䆪ti,=ܻrdR'+"btJ@f=jl j#jA^4)k: }m-k+wX{)kع'8|LMn<~W4[Jx7qOSݶʍ%ӵ1S]cu?YL{H klpr}Jb{ˎ̊Lo~ #2դ?ۛUS {};p {YrܜвDl%UF*|r.F+*:GBq(7#`␣'BpR z8`K $qkAy .UhW~}[MilEk~JU,c ҅ϟ-ঌaH9. &uRvрkQE&N- |j6?H?+fs˸ukڎGD\Zyh WB8Fz$/:Y?'o>P ɕ>)zE@?(%klSWAzzp$#3.5'@FrZ~ϑA}&sf8^hcڇ $k'TUc. =+_@ѝ'~ ?& Z =_SF}s: ")kw0N,*$Wv[LXilrht""2k,Q@gz/ݞJu]_5У3Qe9LLSz|m~rC=o~nN jO 0iqk v<Ƒ)I7t8J uM7ߵY;yebofTJ(`5V b˅徦"ErL I> NS:" kx ⏝72pB4R2MSCFqwJ*].Ngzpzk_d\n, {&% \'hLnl/_J65nx80NcdkqM}\nȵ#Ƹ43؜5u~w= (^'|P&S1#iiW EK"3ܓ/GϹ3G^926@*(%KgvURa +(oGʘE;8*JUI(,,²}'EU'{҇g_+jf.FF:0?Gdj)Equ nT;vr27y zrCW:> FtŎj*2Yl%'@M Sicqz%{Dǿd='OӈGhOPY)Gk3Q;vPk埭:ixWIۆxFԨzǦk>%AfPv8TVFY" y&7[+{1y˼ٽu6x拽,gy:#DL>s'p;HCXijЈBq+>DPcn۵U>YuUҷҜr"}3MiekHC]fG-~]Z[|]cK8Ň-&䅃-QYW:;Ɖ0d"Dmo~# ;[#l8&в)^ {DVJ`J.:^7c 2͞:Ϙﻒ߻5@l;>ab-3&/Yh8mC"Nʜuu9סG!7U-K}T̼jM0AWFNLAhm6@ C'T\O8" DUY ѤPKh3GPLEdĹM.wO'wifRv)0gbNCG'j,t*IT)XV,mx 1&[1G bjW&x{8JzQI6KPRW`y!`WٯToVZu[|\UղےぽcÊ0 =F{P.4]Z_}GjdD$?61mhO ; o?8_;y.˖fFB@$WuZŗp^Q#ˎkG6xCc?(Mw]]):O:Sӕ ZncNcazr <̚hvޘ[ڪryY҇wbd}xݬeq!LB0w_zߒzC|0 N3sTw3-Ct4oC2;.4{>"`oX;?|$^k13·M##\9̻]Zy%|QͻR uX1_ ڒ8L [:jWc$zu.һ >7n?@F聮] Ӝ R{qG.~E-!70`R꿏p"" wz}SGm G2RW&}Qnt lIv5Foh7 T.ص n,k] x&Ps,ܕ1g>2C\,;.{Vh捲bDo:n+ kؖߣoX̢l|P|#F w9KfsW:y?ЉuC8 1hR7p:ӴNye DWkr6BKd '#_ ?P8ȥX)n&%9Iq Js cgJMmf@b30 `o9M4>];Y}\[|Z/K\spCYWu>ZɴŠn_MGW`q`gkI᳿lDRT"YyU_ZP{סf(OrN32p L;<xQGj0Ѵ@Vbv}'X[ .'FVpRǀj?n0~AΖ4Pl L&tQ!mPvdfS9L~.Oݲ0/T_7ŮUPd텇M詻+4ȁ!}rI9Cʮ[v7^rG 5zK?cvE0Sg.4w~!>t5 |d6J NIB3R´W!60 ׷Jr>vq=НN?GS=>"yC@Ӯ׏Pӝ.פc@93! o,Cjݒ)ZGKi3 V[owƓ*$W!O)~&(O7GzjJ#3nqh_TyKA ۭ|<1( n`)OOS ^@5/_Q~m{PЂڎ"Zpz1iDoQą̽X,ԙ.D'Cf-b˳lKB^G:@.J[s*-bA $g+T 93`>sERKh\ݒ-p%voOYsFkt,oe|=XFrGN\0 ?}m3Bc{iJi"idkNU ^8\>YFʄ@].Ŗuގ%FρlLˍ s4KI#oKAkz2AyW/9,A9kWV蟊@jE9=_z e/:\mLYAFb:?}ⵞ˷}M@ 4I\^ . Xܾ>i:(Wr*W ]@:CvȆ$CfA@o҃\**U4gȃi}۱CC2ߎ7Mr_!X^mB~{|Ǽxp1䏟l2>dZv\M!U+CS$3P҄HX>fMv%My [EAJ:)rP[+JM^5<4;`N`qI9,ewXٗJ`q-"6s8CDPZ۵졈s{FL m{oyebD;|\iV[Cu@'}(w3Y,;Vv=Iuy=$q];haZ:] oV7+ hs9L_["eB(qk4'='OE\69>uג>(0Zˡ`eHc*#'`c(\Kv3e}rJZ /I0AEКEDs?t+Do\mw#A<QLQUQ;o!1GBڊ.|kec ~ӇX{!paO MJl~ >$r='k\VݧUqsiP|NAO+d*sf#n9. 긍L*4ҩ .'WYCj|;t/Cns\6g sMy:Gn-iq-7Dqe=Ew'e"FDNïeC[-] ׏2R%FMlR@&޽=Wϭ-gG| opnyb RHV΅[R%u&[5h4_uპZv :衪YDs}n;]mjf/k DTr%8E^<9AezWDq_s ;x*#)i8K@z83G1KKk¢FArK+bN}n贰> k]un#]ĶBV,c|ԶyQUA66T`o wrK˚*N o+9x J9QsBMT30 3 V{IAP-귁'$FCCmS;-U- {f{DuPJ^pʕBl\*WT䝚K 8VWLx!'[Ο?H]o$z &Rj)Imzz >rr+y~W6Q_n)%gI10tr8F*t]CnhB|ʜfmA xF[߷RC#C+jwa(:ݡlvRLdm;з.MD6B0KP-{CVlp=#3A8ź<'m v\/u BݜLBលC6Eۣfd AW)?.⒐"|!(;M0^i"Ff 04Mi o?ns]7]$8NzQV"z-`潰qEc'nĉc u}؞2Hd d' .,􊃨,;i5qFk p\IBqQzm9)_tMۙ#SO;%E'F5/i9m;gny1'?tp!2튜VǢՁ50, ٞtc5=hОPgQ,c,u=3B %NxB;"P[j_)PP ,ƒzc\nxfL+aPN#jFl[=*}m/ lf^*!KCOKՊi\IG>K8NÈwxOIMz%&y2&8K&N;i}\W?~>*$BF ]g{A7+Q\<ج;k=ȰZ> }fێiD4|K+6ԨGú(9<:Ȕ2GJ~j&?R iZZYd7ŴFyKȆXr=PaъP,o"4kJO Π/kR4WsDR,Xg8z8֦gK9􉭁p}&wسQJ᭏QF΢JDV"5 fO|ً;&TM0"/B $юzob3qi^2%Bslq>B㏻_׻yl[Pb묣.(zN'9{-V$dc}ln*C2@P%g8W1HntYjЊ3].[qu|6: &U"e&M*M̬x{t'C7U2 qsApo#{9a>6җ]^dH-P]C̫W.}Ģ[#OЙ x\ohBWrQJ/cܧ-/݂%;Jqtj§/q$sp$lV?Qp鱪\)sL&t$:c%?I`tԺp #4]"gmot-enoMlwid8>|ꔖEV*>S|NCz^H8 h^Oy0@~qR4A445ǯ͢G/t#`\o9[!I'a[aiT + sWHLcZH*4LwH^Fn\)xҏ)u[i#W a~UY&^e tvgez `gJ &q/r+ǂA >:'nÞZbAţK2z7iŝYȆA5$3}ļ'ƛTdWُo1.XB)_x\OoҼ|JrܸPDL+n, ]!Oh:j FbX,' poGMJ cN0:`0d5 |_-Bُ%xG/*J-m ))6,Ңk~N?o狔[4b:.^ ð=J`?k(Ed@/`J= +<ꄩ盭${$a4nBHX_F8 D4N`{}+ɹ6Lzwu\_&\++>H*J%*Zk lIq^`-LPPdU7UFhӨ|$S7o9LJl_gGlvBh{P^e` ?ʊf/]f|pea`Geb%WbPCX*:V(9)zDBq&.<# F` ?(lvn5zi97M7!/s(`}D+Fw]:†za;#l\OT@n2*Uk&OXgvv! =[Q1 lgǪ<1kT |As^gUcJ|kR|g9`BN05ELh忒@M pGŤOp0`u)($q]<$kŤR|;`Ȋ(̊Ziؐ x}bpܥ͉t 6&XdZl5+sHM. b(y5~m XDjK̶GOO7 X !H${tKi+q^9'$0DƖ9߿|eSH]SFu0K#[3f\ga*ZS<+ֶggݧP8^1nC˩E ELj_)g#?nv=\K,5w=6buO{S'w;SA"n(`̺g`S2͞PtK>^vYL$,ʯ)% %:B=*WށAp@J1}TNwY3Ż5+hdp qEQo)W/PP+.Sn' mӟ"Zi0zMwh+cGZÓXz52dK?"fDyc~z "mkj1_ə흘F(L@bGLغasdAoVFXiaeŶ0aYwR7hZ<[ 3Cp@v>Z!=]!;lȺ # j'ԗkh_^4}[O[:O{uԮtetdoլLɂzۺ=ıdi5*%$VFV bWRh"b UՑ&?O+ |q;U_f_^̈>Iߡ* +h 8bwbhNu̺G_ay=HSGe;oofc``[Dcx=+Y3_9EK#垵6~Y: ݾil&e)c>EVVi6y6? d3 V!.k }[& ^/׽]; 4xNצow;crejċq3 pi 0oUk%J$Y1O2:)^S ث/(TKو^?M|n\] ELQ,. ZR*=?9Js%mcJv64r<6E,Y/ZRڃގ8w$~x*΍&1Zؕ|?ʅ?Lohl\VcyYƆƻej[м6j'mֱ] vILf.Z  .3o $ /x nT>mBΣ8%֛viV cKDhW2@adi6%_|Pȶ,vV`cI2 b9.֝k /x71bm=TAeV2{ ΊrjjÄH˟LqL쮌etLBV|31#*F ?9S@3qI(A,JDbBY؀b%P.Ѡ)#F_1+gOR\Юg~pE>8_`Jr}ex\l5Ȣ$ {K42#$';#A{mEF?/륷t)9E/tP'Jk,V1|/\~Qޗ(҃GͱĐ=!b vda"y A*2۝nQ >TW{MQ_{I{'"$50 uy]=ms18~<$YީB(_ O`zУ5 /],8>DdGOt{BOdۍgp~!$kMeD5D }y?89:0 #&΁< M#Ս5u^?6q.kfL+XZXԙPv<`u+4#ANDѴ=Q7Nqum0zre^l#|{MVħ+h*@G`u8 +rw=|SOYaǕ"Guv %=dϲA%/%sUb'S:lYڠ WÇ h#xkkO3nO-V eQo s+i\O ^m[ j63Yp4PIlu-9\aUV{n\GF]iQAӂ:1؛JIsZw:@ta`4WvHy{ 2,ÿU!mY%i}A4P>Qmԃ X.릦-=+dl#:YW/u}xi!A+=޸,rKıwݬ\0Bw?/bгu4!n,F F\CT]ӫ E6ejm.f< LA'7~rb-2dǫ=Ϳ0 \RzuZML/iZW/uG=ⲇ~MMo4 .Vx¾%2v2vMǻL!1T_ jɊJ;&WԄn~#zOHȺZ5]Ɉ# D)i1#_&0ndS_ ![3xZUs: ˗7ϙ[-,<N[w;- #|/V|!T9fYšW7 k}ͪ}0LJ?@/`>F09bC,ɒ8Ji1k_&T#3 je8Ö(*J%^!Ɓ/9*?"Etؖa/Kr(Rq ѓMWIƒ==uodrbn# AI=oX1ۮ=1l%Gsj:LdioE!Ux+x PGP\4rZWg~^ӼbjGȁ,)ĺwn^L#MԞ)q6r@SbgJbe:ǯ~ԵPRPwJZ椥9l'/ x eh4<RbQeLՍڶGI[OڃuPq0$-m?K',πJ7 T!&z/gW36+Up8<;*hj[髹(T7`0^>7b;cxd6/-q1ޡRDL2V (yaoU#:Jnpu?X0yаY@A^[-ۭS_]t k=H{Qhp#ufoY,ʞBU۩ Ů%0MnV:ފ\w̌‡3F)2B,m>5[(͌+s%X: 05$S9¥[xW$ҿkP=k/#gufE2M@"=\=iU2O7\~kk_Q(A;T9LwTaYйKhkB:{c'`rE lo^R`}d=׸TtoQ}ݳLe6!)e%^MwU.YHAi^Q4>R9ѥje۟R>vlK-O|vȜXURxilɆ7僜Rh%₾ X._^.gFӵ[(+qkg?B o`a.V?*ȁu`2I8Ф[. ѵC|㣃CQd(/ZJ.p{d?mP7Tȕ'I+'[S^h+f҅Ox}A)}Z- 'Q[ ;k aWtH#Yl1TmHm+cqu9P'8IPDg饄)8 -/1)K§|i(RPc;Eqdhe< fCA 3Y 8JZBtYlI Tn7E{2 ~Q\r}"$M G6񉘲%GIKZ 49>7f~#}>1ȳ ! )"*!YR2B9?潩\)V.q$zRWD#}twJ5Q QEwW{4!{I8V* h&QQin-s!pE VZCeG+E 4'a!7*ļ-OEg o I,gq C gr,W aN]7!HGӔ+"f\B>9w("P{3aJClAD[1~{H᠒ wdK ﮞBkr=DH+V '2>"Oӵ`j_#T5Ӓ~9m0H!]|_mZg_>15/`ͷ934ppDž" f:j|hgAv: eEpAɉnaP55 mMΛ^R;4S:@>jDbBIO(=;f3'鳪GAE}e#3ɵusځʮ;kI#>llR/zdejSxHDL ED\luh>.l*ǘLcGbpg3їG)PSY9BCaTOEXtXJ7y͈eZuP.kʰkoJǤO%WFx(DR8y"cg]]֢?bdPNZp7V0Q+ B+LdaɃ/bY-*B{D 0B]zg4R37I[$r,1豕Ƌ^$蚁PpA#rU0;Ԕ*Bo%Y9\wI!CZ$آӲ7ݘ%b~ ) ߲??&µOpwѠͿ~h^6Q]>3 /ܧX. h ؠxWQ062\w{jl~!TJz1m15=0L/[M@T–dCr|v"eex2&O W0 bX#DByW**l4>B"Te\9R,IR6lw /h^4x _PTY4ŝ x[SzgOLIk&\$9_ip-8%5UN2fSm|4Jiea_L_xǃ(Vd dR!?lեO\CdImeL1HH"hql/TM<%ϩ` Ri<[#f|fuNk,fzblut/#mbģr}khGp'q=-U bjBG7_ry_FRM "dnUIv;c+'PQY9LJ$IWRt&/=%Oy {~B\uZzQWF5ۈ >GY2"{sujM?u t/oߌĽʸEIzFzUx&YE|7S88%NK F|a펭 N\%܇AamѻbF- qi$YX@Q91Od̽+AhވSvv TCNfO>!$26eyR`& !0@c˝dCC6T&%Ic)o,+rSI$Q4Co)#~mRTPeXw8XlOkǚ iu.;q4GZA[0ŧ}"u ,z-{ G” qx(<,Hۊyˎ6NqZPnn^<қ m/Hnr-"{\W Bnޜ4B]a6l^|z~EfҭMGǦD}b/<m~V3c 0}S$C¼I`Ta6[h#$Dkbw Zc' dO&vLU{ey!"brM, ZPYw.XWNxo]K;e" ۤ_w\slC8ң? 8?txTQ 6ôUVHni ]ЀA LGc:0JiSrQX7xU9]@yetf˜2sMq'=QtSJs%U1>G.vvk$B>N2ʬ5[6eIGӫ^h 9uFyV퉧оjxjИDO%mj;lSʹ>Tˈ0 K HTIL9 yjL-Bk0$p4Qj*6˒YbS8ԾPTڮh])Eȗӹ1j9VSbk`絘mi/pLFHA FL uu]Ď<'>k[O 9 'iY| #F,"RԹۊNKzW,Zȇ=x ّO2Xs$Bje%JM.Ӡxϭ xLmXkow5 Y^tE&6g%: zeUJ748Xj.'5)kk$af6j|`+!o]ĵ+UOxt**m9ᣞo di.Fq 5oD;Dg(G -[5A;}ЛU009ܿI|hWU|[jډƖ uP䇴P2WIU0ەZ=|RWuQ'[3.mNjL >w+HE*;Ϛ% wHNL"eO/#N% ,b9^`1g $ u`x_wOH ^ʟ|n jW_q,4{Δ #ކoMĘK2,q %M@'+ds]r^;ǚjXN!93ٿr[E#9qP$RrXcvyg?T'? ?ZКs')U?>b /n}Xs?ꯧ4 w1dd,|ZiʼnzmJA`ғ^XX3ٞJA@>C&;t!7D Rޟ@!4c#>J5EqˀbװQM`-16i?O<~ sJێҷ𜕝%ғ͎m ?m <*̜g⾤K=RK|O0nff"a(Rd¶*GFz$R8ؑ3vM+3 SgԺ% ޹qTO^TдX:zs[bI[. H:47Dw`|n !Lgo,g:7>h%%vry1J_52҈8D+9wEz׭5 y 8gیA ;~8e?X_x`P3J+w0`I0&O;j+7{ LSJD@ V;&6xl>ʵtrAJ/KW/wF؞Knz@ÍO="/c%ٍG$x .R5etw|X*/Nϴwx ͱ@>wdV6ŽbU8pTHE`h3(zۿ a̡{Y0@I2 duԐnOjްͮWM&K)+HܱS[@dIE4e'Ib-|9-ҫ7 b3\UnFFef̚Z7O#6pvFYʰϸxfɵ,9 a HcoUqSO ,?u䴉wGrSv9XZ:'p*Wh a֯,)#[cyxحR&w5RďҎ2 aG Cw-Έ m+ }c␈鉳9Drw(q4W2SIHZ t}ϫQo 掱 gţZ#L=AMB~LoE/U?¦-?E49^ux$S/%d@z|nXZ楷5o&> Ro(*שg}ClqhɒY-{y"E`~P7aA.|~ŋ^.P"S8pag|3BzABD(3bB.A+w,O:L<C)3-g5Vm!C?EEs ]cYvv4pC˷ n,!kk@ěfJ5dc 9y[ FK>EbjUlhk9%Rv+p b:^ AårQȌ jqgEy&V݁ ):0z!@'b Zl7" s+z 5 1ר>ߺ5MjFdxJ9k4O(z_kkaUA1ZX1rRPpp8;ʶݜ9?S~{yPis,]-P%ѡqf]Te%n9A?p@ˤ);V#"ֽP"^ъᲭHgf#J`vb,yc)V8𷛏g=WeXw%ipWǷU̱@Ez/sEVl*+tRdbM nW)-yCi\CG W\LxUS63c\e@l2}×\w0gwO_G- ²NL]2-ߢ*jT¼o87tzṀrA/HfanA:l3ľi' EN=eM~9jVq1ө S)d7̓TV_8JdAẫ1-/>dt(RL o\*>.$͏mGv{0]cP}kսcW(Cd[,Z)Uc2k re`h=^a&iX'Nt`CNZmdZ11Ϡg 9*ңݝ+>Ti7<\:K)*mvR `ð&N95VJN9O!u#kKh>һxG C5/cK_tQ,ɒi{PqTNڽ A >6Z; 8q V-Ɩ$o$~k+:@wlR-gt?g9 H#yf|tkji+&"BLEx XUunh) м*@;>s53m$2N/$HUT.H8CV0& sVY՟lA,1+x,<ѐnQP5!@E0tjYp aH}hY? ̕deyjҝb;Q-\oh4N6(Vp G.;#1iZGt[ѵJ7a4Uo\8W)Y/pЉe[nrmOdlQIרKCwՙu}Dv?~!"ʬ8{7Ǻu4\ ]>mbxsY޿Z w"9&sq~^ M9.4WhM*^vԁ%O<+h^F;Я7|_x*i%kP羳T#qMRpc8*l1{4xTi! d%W/J. OYWO<>89tѾHHǭ$GV<_%U$e|bWN6Ɵ"nժ[=䐢ES-?0ݺS |%GݹG}KԪ &] ױ;LX+V&qP tB<ݣ z4fEƶT%O"HwR5,SaT,fݒXd֯ xƩtD ԲؽPOVTe_oqYߐYP=0OH1q NB<~f1D] U{ `D_'*'Fp͚J sd15Vzq|M&[*&[p[stsW])To&%>,GemVxfN4$C5كI)-ctp lYCdG~o'\ϔeʾ% &65,jx'1߱E~-᤼62e,F^[rfVex~pD$Ƨʤ=VkQ~Bn@kJ,erFk0puᯯy/9r@4i_g+ ."ӿvhZ^$<6YcN8ysPӣCWx`,NUǣ`(E ] dP `%= ^n>˶{;ku }ђ-}xp|&;S@S0r|^ h3@+pCY x9xfڲHnsY H-d=Ь@J˳#.ud9!elg.ZNG?\&^»f+~?.8yoip4!!Pf"=qyQ;eseˀJvHqۘOClqgy'CP(?ȝ}FxTv6kVي㜋)ށBKc~ma^^g 7B=n gNti&%N[^i1FFtshd04Tk(VOD[9BBxpԹ{E2}]1#ymB*~P3Ww'wtoBWCtJ -^±wTڛtIc9_=ɨF"TdpD>+22{MDSld,Hy!u=)m7$ nDaً٪ )K+R4ŵjFc%PdzL&K$_~v~ҝ!bĺ l']3EȃP= z"D r|' ,'Q`ޱg\"Bz4X-I|q{% ^?WX0%?r"gbc~>eJ7#R+8nfs`ɮvUCJ5g{TBO:YMDyF$TAi-Ö*1dfnsz}!({+NƠx-&FYG6uy/Qy֚Q6MZPahX~P GP),~Υ]tYyhi9""#b~s\V %K):P2~P^8M3; }ۖy ',gLĊB? [fQٴ2Suky_' n`7ԫ2A\ƉJTE,'=F .W~#~pvB`_ \ IpvREvξW,+(Yx+ ܱ5a<3<39Ë ȔǻEWtɥ08f^JlL%Jԕ^P͜3Nww]u)nfjĻ%@E?"ЌwslJ% #z%e|pg]q59re:ƻHLb;R,Y_:0739^3c67 ٤R;m׏"cIz4%^3J1Wt/4y 8h Eȴ#$t%UQ[qg(X-Y%6M>a5&2I0gP䦺}$a&\6‹K$VQt mW`@5fl zZ+Z5FM *8C7U D&)= 3bx}i}[$'d^8; oUk?_XYN0fQgӝwk!3Yc>c˶gg`93NH Wig $EvPNʥh ,i NyL>9;஌!GP. 4:'vتOƔju1%1K JeZ-a VUAzCގgōA.:riG5YQW(՗ 0MIFt( Ip}@%1}'p11ky5Bqs#&:X[7وUzy+Pt'<ߣ_*/MӈanDt#4h0$8N]a3 }q"v_QI.m Ɇ1"J= pV7GuN`m[ȋf*t0*5lZ>+*_˗\ sVVG + n)+EtLX^{?BH*w' >$ޟ3F.(m 󅇁צV^عO]|KE7̩ÔLI]OڇOPx |XG > "@oYK?B~30eN! QY&HUF[ЫC*gOL Ñ?<$oLC-YX.;.xئs,:s@/h AIwp CEgV1R~e7F]Jw .CP7={Gt01X/O8 5XInc$XmU hY Q}hhUӧ6>N3jx\TӭB*M$W$a8cki($>Uqtٳ,T /I\JS3 9lf1rg[nNvSv#ϙSPVT%ƒ{oKvƾЩ̓JnwGJ'!ThpO(dDb GAF~^q9hʏWbTm+\eҐUwVlJŽY/!E|E[EoOo].hWL2 m2(ninC:'uݴ!8~ߏT릮bvWe .< Ո/AMMkXgϼNOw?í~b~}M:LzU6N -bqE&z dB{`[J|CAҨURcz>|?yP^Yj~0|xp ^'DrVfSE/Rwbr~Zbk7sA^1W#6A@045hfO-0-|TU_Jրz1;N:iH8T)pBMGCT͌]V',9Y΁Ev4 3ʣie])uN7拂)[ܤ\3p]~[ e>}K4]HdJQ {u.4H0Ī} u& {ڪj^Z ωs{iT;c״O]EYǒx<^^~L6mp9c!BBBYwC1W[Z P.k]j N@eV W%JeM6K<7MX)Ix߆*|IH_X¬6*huHPS8·5-; XcgM$@zr -#=7EV9THLՋJpvD;KfSB] 3t.ielAom[7Q%`- nDF,-lD#P4q_# Q-/Azd; Nt˩ и x9譔޾HqxGਖ਼5=sw8|5c+͏[BdbX<]zzإ&&7$qWWF́% i'`N0 j{A0 Mjtg}s^Q੧JNHofwYȔ"5?1Z: e]3VX<4+xb)*ccu%=C-EU+YUnuٟȮ%J{DQIH}g[: &]"eRԇ=+D<_; s pȔVlxiz0f=f G`";Ⴈ4[X,nj9F3-;PolxǑjrubU? f\?&g9]f/0=r'ZK8&ᒖ6-T.qM[)}ǭD:Ń$v/Bt|T/C&6f<M]oY5.\?2ɩ-7 0ko_!_~yʍ.8J0Ȫ+}xWpn{ g@t{JrYg2|!$X䮊e]lisK1 5S $A?˶!J;A+calV=@ߐUGuV~uj)fC`>G y= XV-bPOI)QxyDSTS Z9k;OJj=O'O  6/kuAرQCX3VJby`[)U뀫 iNt g%dhb(2;A?~znK5B{N<X>dZ $h.&sdbSm]CJH rЦkAtvEAV_rcR] (C *27q%1w9 Voe4;zKz'4( vFP gU1\r6:uFx+ĝx0$x9bP zV&-8f ]g.y)=Zp\@#`ruBYA;OEyaNi#a>v$ڨ˻gC.܋| ֍U \&6K] 7T 9n͐Nߤt°M2BDؓ{\#IJJdu閨k$?#rũO*u/nP3Gbo;fv?@}Q&*Ĥd^,x?Th^`oC:xoihbX(;o^$}̸EiCcYCCl;79Z1{8hBQzz=dI;{md͍XLQ_9v ТSM{@:a8󞒇0'pvR0`.K@™~?o,n./fs(20Y/(hr%tp]䯚!֝]]6P| 敿i=!NxV[N~Z08{0/̅8t̏Ԫ ti}왱qn_3&`it~k낂ރ O@* 3G)]4hZM]bcdϺf 4R81L3|NQ(&FF'+~%bek!q2@MFG`p!aŒ\NiFtCuMswG-T^OD[)ʔ?zU|oa F:_[$\r;rY>/Xe3Imu4^u lNtF'H=CJs$<>hRJ !hߛl>1y1\>~f'\BJtkᶵT]* ?Iʣ^;HK:+f6ӞO"Z7|W;?V|Ԁa}DɁc@@ pXdBB9Z]HST?`gԤ0tOWۄ6ǗMVϔiig9˒$Udv?0 3Ju*>١}"iaj~]|20CT;u[;Y 2&W@7SVLd_tܦoOn1d:h7LbL?tp7;ڄO\|?FSoUq +UYslozMWOG ?Fz/p kZO. tJo@] ϯqMM,ϱ=NVW橊7k~*4s|xRyRq9ߎG{ }#ص^-rφNvV%{f|X"%аϧ /UkL0'H:l)-^&C#'{h?{OթPY;T11(%QG0?*n OTio#,1|5PW)*ɏAw`^2zy &j<\In! Ft5g\퉓R%p !s*%}Y#O (]8ȂlO*]V9I  a^%Fu'\$ؙRU=Jʷ#xir4Q~}/G :@Fw{^14x&nvUsS?қ:QNuz*mb駱5t4_E/… U>چ5t;!C+ lt%tҔ17r52`(;1TwdepxZ^杌2NF-/IB9XpmF Z՝t1ZbtքVN{4EeiLJH;s\ͳ1U&R#Qz6淐仂V8q(i;0ʁ}R5XLg;24W}G_r{8rJ0+QF Nߔ6S1s9U <$D,=* 5RC@X2e#Ue/*82U|DI|= Htێ@4S]tscC=$=`",߂v~8sp@8k h񈔫U0hS"݇|NP 3h+ҴI7LX(Q-N8vI2v> ~}/bcu K9G JGSBruah(8 dƮ)tÓϽS_i:ZI$nXԁIBX,֌Āco 2,@yr@/]0nxA{?wza ~͉rerMq$ 8 wDX(͢g NXCߪ?󩦴B|nf9E҆Z.fN]ji^xikV`R-4*EWttbhC/>Tͬ#!9{+A1p7Y+<\àT1"DT0| ?{o14GK4|0q~|>Uלw D.l!n)}b [c<6@~MX[ 7׹CaNr2~ڪ(vԽVemr!fkbVwKP'?=6fu{`BMh×8Y|@]XYIl|wX=Q;Β+?!=_10AR;B-oNqax 2)+TOƾ|P/Bޞl1܇-嵕)n捭Le\ nmg3:9+4+D@='ܣؿ!wb葒1Ai5!z|Zp5pG0F9F,D1)F8%K/ F .2R!)'ktiX׻?1Τ7%8$zvGUwz7(^ USQnSZщ|%8X  V,\L~cz!)ۥ Wi6[#+6+3cIǟ20•^Du+_+޸r"ha %GZLlXW3S2pH_皗||  x+J ֡=ްXiO" W홾C`l#f~N(G=B61/T0w m5 b6h0xEgy#=equ q~$Ĭ`\\+1kĦ )QBy< Դ ysભP}n#!5}i .y٭jXqax)P=ٞt$g 4']kN͂$.AWYU?xG5VuFQ}$. d/%t`%;6^kUd\qErC)=;"wƩ 8$lvB}ȡTՓ+3x%T> ];՜:\񑖟S>A2s;ex 7zNos[Z%l&g`N7\ZM59#b\po@bs[O5R@rGO9DۨBn Х&^i^*edf&^vҁ1X ҫz]/UKIWj_Z@6*F9AeP`4:!BAR.UF!iU;cG:'+ 6F&Ɋ,c%Za=1*hv)"!6JMOJ;@7e) $!:!ueQK`b|zV? JƫDKӾv9RmFNXo=xr@` ,ʔCW\D+iz\00wkTExFj>XMH ҘHu73 B2=hޗ3t\ ͛YӉz'qQOl/tH9ή %D }8]|`.XWL$LZj1F~G/Iq`j\W`|QvSf,{݋/KŶӗLȪljT3sZ>tp/KCVA|XӜ*3E2nL>ls/ z@)>ֿ|˾eCcB Ԥa p%Et?R]"~㽓9->~-%Iv3Íe `h< D%fZSIl svFV1 ³ ;ƄurW[߶?)O ='L )wtG`3p[TEa8rNyT<6= m*B2s*[X&.(n/:pȏo?=ڸ-\4VyL=ݔJI2g3mPOWTc%nWP&+fcG#BF9UegNa2dszg."&K6Umth^?OL眥z2gLmX Y^@]>{H6AJx E$ -%S 7#Mˁ ǏMftC!# \ lZD}S ZԢ~"*=VXq{v\@0ĮJ^FzfWhG Z@m̼8?֤{57x]U3Y뤗nL6/8)@0bf=nyo@i&e//8oƢD+O me>`)ӿԻ*3bN%D?ڂAs).ׁ%qA>b0awV]5h,{OqDڀ UNicI3?rcP7ǭvM Iі3n)@AFsJUrMR@?TJ n2Ga /WOPn,V/ {5!ޛe01$qRl'n[}rmcB9K.CoK@Ao!E3Imh17dBwqnV}bVy|Zk-DS2rCuf*%yZ:v*_IXdRA$Y}x6K^'X؇V=࿪t.# p9q=#[kd 2ՇH;zibB;Vr+wrSz5Fč<||LrP8hO,lDOzo=ř 4G|1]|#3o.gGJDit6C ,D@XOh}"fRFeA+-V)**kw/:54HzMҷhFEw[H^1`jumP\}]N3 M=d6bԶYS{eSz߹?u;Hw1n@n@)I\_agvU&?NFWs1iSI_Tw֟H/ $wS{Ùꑖ?P# {5WLjJ~yR(+G~ezqMQ9}OL#SXݔrnum\M]y5tNv9Bz6/)S0|V,l{1KG:lޕDW4PoB?D IAo\z+lĖ$Ak{Tv3 3M.]1r.5U yK.D '/F|bdlK|`>9 JM1bT>S.JNMW$+%\S#{x_tnM;kMn΀K'?˨XaJ|y,B TZ#c!тWE$j\eWSQXBE;d'ҮviP{g@ Ky1w<+_of؇Awv\$i4{9tK,I0N+ 4'\cilƦP4zo'c F/C21M=   [Y Iq|qN4CD˗hWCR $Jd#B;B҉ :#K|G"g /$c>SXCR]Rrv\Mi|u~*nyg½X@A}c!ЌK@.ٹvbO|P<Գ"gluP59օ1dʒ[} L~} X{ b5lA+xB,i%s@G)C&Yt=s*1.=E5|"c,2BX+If]nux. D^LavT;p3ۊNl)_椑k/mQica&/97.W"m0\~`S<-`W%`xg n^e̠[oVP~$t_gWܢ gѼvb} / =>lQsLrl'&$cS>Ql麔DfoH?\qqAe!#_mx/Xt5x3cetf-eù|N8l"[PAUoȁ]}ʧt~Ztv[Ñ2yA5ϓJEX$UįCF=Igv:op,H~/P11N7e>f2k`P5h^:ͦtە&>}WY܆/ڧ;rޝ2[mkanhh 2D/vL4۟i'Mp8m]Yȶ*.,^#ɬv36Fr,5MGt0$f] ;NɻջKҰxx!<"F㐜*.}oʊj.JrfXr4 hvjrw'sHS1*6 O:\_%EP@K]~GzdQb_io%;Ưfp6(DҌ;` G)ʨB3G *R2xS5YVQZϋ ~5DWR0>AL6d@3qcI&q$Ov}vGz喅`XMFj[]tg6nrpXHg;X{=U{sx ^s齳doMhuMMMio> ?n~Aa{4XC߭V;LB﫣}vN0`I#?pt }CM=4|ԩ{syVG&3!*C#m 68?4+N%#jcM[c'EZo@Z?r;~$ Jl _+b RuS0}.2|ezԝ%XkVٷ ul~R*o[A6+!+#d>]DeJ?5ǏaFwL*޹ DXL՟b50,%3ijqxFUQfԐC>w_l <Ͳii,3B(@k'Y"ɶ\<@u 8A?am_cu풻h79&Q5B.[p#jB*>!θb=FOD#Ye&Z_6>3i:/h@{z\ùg8rR:TSFQ\bYޅ/sv2$:qm39K}ixXO㉦GۥTӊ^2V˺Sm?-.r?}LS%LUls"fO: M5G@er'GpMVAvyB*nN&nu#'87+GsuʸD&Β~~$ڏ[TC. ZTyg9]k.a?&xsACQAQJNslz\>LsMn%@IΟ_Kzt|[qZye:\Tv 3jai Ԙw½lN͟Q-;2 qgR&-6ϛ# "g)O@t?_Tr4.sWԡD7*!gye]`@}.0ӹo] [xMJ+G^5#oAHAz(}!;M#hηWpN}đ4*ǎ뇂ZI! >{\Jy:ZȰ$Bq0Av x^bO E_WˏL)3T0"ˆyqVXE[7IYJUmG3cwF a?Q,r"(> %b_k&n+u$4S4(RΣFm|o]`ODuAU6'?/ +.0˛bsK.vcX ; gGy܍j_N5iq A^lp,zՖc;Wk?L?+@9.߶ 98,D =FQD홒Xz.`Z$<,n.C#$"Y0Bx$Đy" B*q.Նp>qCAg`sZHRm^z1Z~ [a: g4QT$ߟB\4oXЀ=}T{?)`&{C\(є!&@k/b.`бo_5^[X2T H_@;彩 \Cok#)H鷆M} ƧڋCOճYOQ%D}|M_xTjZL,Y#uexTٳ"18sFNєւRH <-4Kl'$6>cRJe[0@nɒQ*M[x33Oޙ{o02f vDc,z.lt?D-5AtQY/>Eۆ #3?D3}\Ỷ;8Te;dIm%9m"bzPP~7.]92I J/e9%Y[fPD͖ӖVفRd>{t bh) {ˏr'.H֦}j˪<_*dBJ b(BHzʙ aUn9{s<8ztBD{6y6 -QSlkm$8m\A!1 QD=c>Y!@LaȖR{#pZ$? !hI@ >^~:X D>l?${Wjqw9R`hs,u}wzI<\ɗ fR1a6xĵ'IPo<{®L| H.C"s;ɩXA^Hi:.7вST#(L's@iG /uiΰTYaZkSV66֖+VU+3 j&5Ek?q,#gs VRؾ.X%?#Ř훤>^-N`zB`T ! F1 ߛ5ĝ,u&ά~.? }VBFCbOj GȗMAB R0.gf?E!"d̏ڹwg xwRv~K9|אȃA>0aЅ A c.aM!|9<J!7S=4L⁒Z5.L'Hꗕ`S po>[nˊndC#0Y.~'-@dKbgOUe64ٶ]bՙtsfBI3ŃY-$)HŠ]k@iH [wJ[u6{YIk w (`x27/"I,gEW\iWb0mRm 4y_rZb 9['X2E~p!eI|[;F@07SfG$/,MOM c$FDӮnNd 5uMv;[Z/* LFUo%:*v<B kR +wMnU/20I^ayUBŋDm JN& $8]l`ѡI}RV9{j#nm)^ĖH}]]M+ ߷&+@TߩQ(# [xn?k_ D_Ş6_(W>$@B񷯾qrx?OzNfj#Ad6x(!֝W^3lOebylǮņ% fAȲ GRKFՋ2r ڜ A7w51[/ϣÞ[&qz!0^`05o)T)/24.6<{Lӝ%M9xIET5FšJٔ5e{^DXqKS5 Eh;=W\KMc)X+>#bG?!诀}\sgWcol|tƽ8{^6)el9ۡ[1ં4K=YF)Jor`Agn"\/"hp3.qRNJ&@-etl"ß(sags)]C\t-+oos9JR& gCD vR ׳5U辡2r a2Ŝ+͖ ʹ,5;Q9;Y݁Y]b4_ þA~:|`fipqQܸuh qڡr3&U*ֵ xmb] |CjZ-䧛(Wjg y &լ1pURw2^g59jF8S$X!!.$鑱Ν\֨Ld1'? (DX3QYQ0eJ0#{i=.@ʯUYVRr?GC~58ZڔЄ%{啖!Ja=" %rFI5ĴT@Ag #[|2M2n8獪8=j5l:XT\IF}6.  64Uǐ>HBEpג1ýJ.j]K=,Ť_wR ᖠ:tp-p2w59[xccX~)lWA9g\*X-v5SX{GuI[[3GZE?AdH"ah|v>;zh).Q9J :dd0J@dPmcp~W1O+N14^菃nX,k nHV}T>+ϹĖ33=),V 4 o5/'P{8aMSwC$5#D\Tj/k}# z7[A31z+Y7FO*Pu7/7֗[Q{uf&C<ف 'ָjt,Z=-"H#4-:TQ8bh,=ІjgBNN,cܞ!2lhVK }䠋K ΥBMt))1>I02ԍ$sOM пIڝ$8m"p<nh<]|K?Z,5y]75$T^wɷ8THg}EL9Ȯ<"ro(gjL6 6_)iD]xU??30*,Ķ1^TC9Ģq;AI 4c̣{UEvDz_`,>A)z/]C c[iکgE} =//Rj-#)$KY 9KFI+=_κdNG\&)3 @p>y]m*l屝-r4냅qF{!B//"[=YVI%pN2Ńģ]X geQz\ƹgdyoWp#fVUoҘp"}.^q `8/!:$LJJ@ @Lq(§LB9|CHrLe+JWp4V22 kStGCAZ[DL׆D>1j`ϤGYKi0\gt`U^wr2Y- f-WjM̞1gzq ʐmA@@R:i~$%z$ι̰ -pDV5G[&UkX(1Әb6_n5-ZHqĝaNT5!wΟyӿZxeLrA@ݸ;dőT_}^]}ĵ O4d`u"^%1QBV˸ŏEY>m)m NBb3쉐UR;49Z3}ڧ_yH!^Kw5gE"so % PD z!MZY CՏ'dyPfh Bu}l Q-VjpYPL+:ϭR%E [0䉩d= ]"94M4p9s6m斻LriAx_D=l|ĉ`ahV)>il^?7(&B-ӕp/m/_ )vTE]dq7%t0*|٠[* yq>1K;zWWJ ˉ'x |=D#2r_|S\!նyjZ" n00WFIޛREGx;+ͧ")W6tR/c0zlf-‰S^q(X04 kFK: »I,A25|Ȱ?!e y){WGTes'z/܃wQN3bm2Mp.WJ0_sL, EZߨº*dO?8)ױ{=ܣё|tN߰tЃ.BmWMSlYf jᢵlBDaZJq몭ދ "ã7ʚZ.W̡g Xkq\4WO_4OT(3pHjbvgZ@p9b6G/j,f'wK8<1 tmNDjvo#}K/ܪUJi)]ᇜg/gݖ/ o03p&Bb5qcoPfԇ!V,~.Va:ze k4]ovoxjh.$Tyt0AZTzm, r(¸ATViqH9_)G474C. M!奄%D_ ?Rfj+]+˪W2>Pa^ΰb 7%Xc(Z*$ff2AFP{}3[) zYva`SaOl+Mlk! F(ܜd*)h*6f$G b\6͡C?5~] s7A%U6;mHO\Q`份އCFڜ&*ע,.>nc\)\ViT ]5 VD㸭dt&AW*E؜:917={C+TiL1#5Qn \ʪyK0.'S{e@ȹaW $ AW( qӜ~c I;*?ˀ4\Im\U8n7R{w}1OpGjVc.ft Tڬa`9a;0jf_>,\7խnokiR0?K\W |eqR𩪣Žn& 4HY5WΧ 6"!*b GdEΝ x5TA:Lg| d2*?LtQ" = X 7i2WH:ll8?sF2V?f!/x!o'm=T$/ejv H3YG*]CSc[: -°-ЫQ[5Xc$>J!.ƘV^'g( mK1AEI&kS1W*QׯNǒgKDb-4~gb{5̆QK2 t\(;9U[i{ L)XV{!6HY)BENlf |:d[?Emaove?sEB9>z Gi#|S%Bx~I@mry`pYEHP|&S8șrcv yA0O1W//=GGKBV脔8,QCAc-xٗ]i1T'1K7*ݩ$^<:tۣq.<؋.+馋:gW ҰtRc{#~Y _ڽXs;,_>G7* G) 4+MaQJQ[RԦ = <7"M3Tɤ dsk :9XgK( o.Cf&VwYO8w|$w_n Cwg]2"!V M{Ɉ|8=j |&pg(@MKu"_m!%7(vPS(}u$ kVj[: kv^qYAF~YdwP;o ZmYcIru)Nhhˆp,gmvsaP]~t'3#z>׍vE "un1rMhK^$h;zi7cnq JЀ0P.{")3tNpf9Ʃ A9k_Pvn]1)eҝy/bX)$wy([n&Ow8V:,pBxDt/l7eѪG,&)dY_T j&ڒbļ<5mY=׹5g=G_>ljXjq0Ǒ6į )v6Rl8`vm _9r@T)kbeoYbMrAQȧs,y,UCYdž ۀZ`>"so|[65 V Hc|TXzp7QM6D|fݥDZ {"su;}>mnH)j2p/Dyr@}GO^ |5B7c4w*TIJQJYX+W4d%wia5}`&S:ۛnHƥLV\qނJJgyg5,]ر!"xD^9љ"Jvjo+,k:DDD\gkx"E]F#$|"r֭"%"Z>S qyR(Mnh8P3qրìZ QG!ζЏ)Se8j?i|uh L;7t5/D24fȂby@7)*",C3pWyk 6T͐Κ҃`K%mnUHD؟=|-*,[Fh3�l]\5Y(AA۩}y(YQW6vᏍ)݊i*^0YUSrL!lckC }$lhB'L# M~i)xM'cQ.+!vm~!6LbfF=UʀKCR!/4[@Lɬ< 1W !gՏcQ9Wfy^ʺMUȭwa+t|0KLZ?}'G<:gAUICjNR(iPBmfu`S).2(tk?秔Vky;rE֯o)ɝ F(O3m|Y aV-n`r%BQ5rph(w'ÒYO60'/ǹ3 L6(iښjq* "bB aWGi .y`шړim+M-yP{Ǔ8DkY/3y4JS(p= %6]=RC4&ohGror/thT9uy8Z}`jj HX{NO3 bjخ@a5=A%HOt9=/:mElX[B9If/iX\TLMI>э.x80s5\`* k0>bY.6(L r X FR~_#$#29 Ӂٹii^G>/΀_N'Ϸll"\Y!i&pXXz^?pқFzSoӦ:Cz{g6~j-;$p WM*"T7eL9KW-3,3l䐳E0F^2@]`1%ΪV(!EIջZuuN^ƎZE"{w3Pl'7ܤj;5o&"q N{XS-~F("R|(SGƚ7t"0@"l4"m a|=aNK\P-#"i+XPMcac>OJE$~$YYia?ܙ3nWŦWau V$Gs!J~NC3'  'C5S'a!3Fд>ȻX0J0FɎǷ9UO4ّfOȃI~^BnfJ*%7N}wcOj̓ހ7S4ӈ ˊ E e{tL9Jj6Xu-ئ0 ^}"?6˓[ĚEB|f㣥'JQx?w?/Q3*ƤФ%7h4ia/Fys?nw)}A"Co얺Gh?3=5 PR?ft2),1sbW S g=cT6pZnM>Bi% (eߎ8wt^@jyPyC&W"L -ݕ'6t/{ BȅkQ!/p]ujJ'lX86i@C=Pu|[Bkf 7af^ +MpkOPs.62lZpϞƤ[2.'Η->/pCux껤S\@<s_Q|B/\憷"MZkY(F;FK{$xL[':5 4BA9@)b=Xn<#)TJZ WsCT=5QxM^I"ODۍ3Nvzbձ#ՄVG/,CޢcT#~dϗZp H/)s.x^Ȋn֏4i}_h;6-z'{i:b8+@A{'&SY8&1TO'B9ђ׸_q07a^BB,ޡ,OP`j{hh b$c@ ֨+n].`_8 F]B{cu]œR]@jQ& '1ҋxxrE4x^>)BFEfi޷`۱a54-Q_C[;їb>zQ+` s,-DJ`ݼ! ^Uh|YF{Cq.wz{A @eZFF|=LoU2 a9]Afq/,HZ[U\#5t۱7whÓhB餉Eyr4}Ž9-e^-7-O=6%\59&H|B:˅|ybU'(Aȕ:[Hy 1CUwx$ YuD`: ˄i-XW"d8T̀nS?_ug&C͝.!su;t@mLJ+x3 xF7o;v~*ui?.:NBwMK4(~!bʰ0ARD,Θ;˫ꪽG?߉l}SfW&nKezT=7=J^0 b#;~9փݷQ,E%F!md."ئ[:NIIpᜓk9[=ӪCC:/ITuQLe?M-Zk+L{#AcȀP@$x;Jk7V"ƴ::^'urҀE4!!kyAMyQ/Q\~wYߜˀvx_{H: ARikd7-zY Rk2t7)5J*MʌiEƱ7eKyOm!. Z+h铬0Cv:OK*&:W+T,"y[."|uM7y^ RjatfR]VM5Ӯ:v>8--2GBMG_kCqa& O Gf`fw}gZcLØv@Qտs(BQJ N.*FO@M"Jeaþ9aVin_/mcmm^-vi:mrՖw 輿uԮYqfLȄX<v-v;SNt,Ԙň}CC3B s1{pDh yA+Q9q{ZP}z\Axg|OZ>J/d S GDkTZ`-2GZNA3!07rVֲu\W'u H-2y~nx[b0 y?d*dI~ENބ "*jc,Y;cG7Bu2 ) :G{J4ۂCDAѿ`Qgh՞h^ L1}KXbM4A!֞yG.Ђ+ %awYQh9Sf>uWsW>cGlq\Sw=R+P-sqh#P=l c!OwAc>Ga697(D lC;lIi Q"h0+IBҖ$tM,0#}y277w[WGVf jTV2m۵P9R @=d/\8#5[ΙfqR^/ hNa[zBAwssk`Κ #ʘZ_t䧪'ohS3H%N, `ǩ'*lDeV1zX`*[׉;l<ތ:TwcU,#o-.#> H廁ʐu֙[}uӭ(³utGϛ {3$/̓=j=qZ0DfSg!革 3ίDŽa9Uǡh FxUkL 62"bql&Ij4~Kytz'8 zW1z[l8I^7[y!pFm/o4:kLog)ҐSwM)淙['p;"XDTt71Sk.cz t0Ūn;"rcHhxwT@wؓ 8^S&˖`C+`8pxkyQ"p;U4ngf<Rר!2MlLڐ*,8=n(aGkCm#*ʦߡX+]ǹ_`s\͍Y3M\'hMҤ+0ݿ$FX vlXsKE}4aQ?iDqU gM2ԡ * 7l9'yDE&;9b^3batZ7pM*`xqR?J@p^-Ih QE&i{斁(RّUoƺ[a=Q*tH/Th7T$7;!3r W|q5DnZNo=H4Zm} m2<_OQvRR8Nxq b%$=qûŪ55:2 wg@.[MZ 4]0A0PK'Š62OƩ٫F}amBpN=\owq`40Ɯ +h yJ쟃[nYRKCö=+$iRj^3]El2Xy}`27?Q(YeGi)"O:L34z*FtJ&!E>^8C46Cscx0Y$K=Roc\Ne碇>C ]/J}l-#exv[ !P1-9WhAt2<Q|7< #9 v5KH.[t]*32EFY9j?ӭ6[csz.,g1֖W,w?j,]0t i* J0>bdaab0fg2c^5")qDX(AQnkCEˌpؑIV9%@o7毴`,ub}:Mgzʲ m:%NGo*F{Ъ(UO=j–ɡe%>}I j$(SR4-z~17$ֶl9Lu*{Ol'QbA3X7hwߒ+S tJ^-F9 -~L;j1Dž22P bu;Ba%cNr8 $Z4H!^ERb,%S_4дuf&^/Y֔yxncacҊYhysjsb#fZlj!ʘ$y}ovRn [9sTfo_R|_tSDިdi[6R0͜5*+ͥ>U9jH7L:.@5m9F6ϲmg>%e.t=8rFТH4sߝDٶV3r(Y|)Ez/ȟ6S{|-t{5b|1D?)La8;vs8fZL![ŝ@kw."rJpUq&T3d~9ez,hߥqN$gu΅@#vt^3‡)r-sv3@NA=̙3Ǝf+cfar$9i:jNgWC6NpUpSڰ{2ΥG2R#S ,^G?5\N+PBPʛx^r!K]Js:Jr@:*%܀ϘBv`=J;)Oc4&F_"aj [Fo2*:u6ɬNv^=MûxB])J.2`d",5]SG97fWp]:b Xmf>,0{_(AȄ; 5ޢKy6)^AGr٦`kQ.T { Fؿ2ndްv}%t8ށKN吱`h 4Sm-xq,ybYzkiY{didig49HM &5y{ k stYhLxBKF *@ vUGbؼfCk347ɢy6qj)MGBVrv g|^fѼ}y]jPr>!W?콚!>oijTu_qn#Ok&%e2^Ȥ!I`~'Y -)J^1chwhJe΋l?r-QkgC u3?,{vLrI t %~O6e=&@sKHǜbZ"V ]ciᔥ` <?f7ˀ.w{8VeqȊחf? >^!ʶnް#5>rh:)RP ce/.ʕ^M@@ !O}˔f˽\bO(3]8tJXA%szi2XA#}HnY,l֏%LsO6r;_6k 4 \K? =^}A{gH3l۲g"Th*v'pћs,N_/uV,~'P^:I7%?/ҋGkPK~R"_Co&3ayw>#fz퓏ҙ4pݹ254\ƗoGM55 oQq"* []*$^#+2 f2HU_g 0"WTC6P#Zΰ D:[x R"~Bv: +6uuox4xCʷ<$aoz!nFg"׉9" SȄ:5.tpƜs03 G1!c ckԴ7 4`!PİIZ+hs7YpcPM~OLeM&z.Jh4BZ"_R0C-OTLk9qgAsFB`e h$շ3-k]Jt"FHEbyf91yf_lRFv{~պ$88&✴yJ4Xi71?@87o.ͯbRFm93A )XfmD!Ƞ G5l`yutlqJgz.\ZH0Btn 2" Ud[9imDgFucʼn4a*Hg׌БUw'JF"cH]M<0҈RA7{z@ "Fe733sI eKhmaC1SSvE#C:_hSa|3z1HNE Xy KݫS dQgꪡl۷2{ oԠ`/2ܓcÙ>UDKyHk T 6XNBBf3 ec[JK xnT$Bkz@2)ΰHd}cLe~[]qHy-T~iݾ"جfpI;t[gqqZ"8`:6f$06l`}'MG0D[H2T';Lm5L >ϧh bzހNFN }YF}8hcBtw"Ԣ%mzWG:EzF ^^PNuPCT=r3ى'-ޭ1j7 \]տ^wymv;d}D.x.8QklWJBzseXD/K^:Z_=aة|TQ )!cmiVW9 AjykյoNN}go ]6lA8"K"i&iDpkcJ?٤vBUaJ mdOc?ݧmαCE&Ts󒶞aҁ؆q:^834g=ڰʆDcpV㝝pCJ݊K|6 .J1>\ W\80 E=t{L6ZT{jeoI6 qs`cRݠv_L_\§o&V-U.̣}Pxj]u:r c{"#U\Z"tp1a^_/1^~dk}ߖ# f}ՏZ!9Wyȕߨq]/PPv+T T]GvW84j:a?Dp3aAӿG +ɏbSl3܂~x=c02sM`ˏաf3cFGzI+}N"<yfBwsY~/m-_O\(igY$g ӵ.ކ #dLe**o6FaD re.gѯ1M_c0DJ8EbPg @Zl,|')w΍鵓AmT6L` ހ Hdڛ2Mlu27eŮі$*l'hgԯJ? r3ֽYRJycZbƌt `Y=U{kߓ'+^H RkѲ*1|MV ~~CLjwWܱm1sPI6"|`u1N>A'e{5P0TEC;#!m_ˉoy5l]pYWqC30QAU0^)_eT(:#c̷QO|C6#j0UU$ү܅c+0K*7?f~y_@P+lxCy[_fetc(X W; a0ۆvh#[}Z lɍ>yg̳V-NnZJi=f2>+'lȝ{TZ4ꎙ:D}A84FoKi됱D֝=q!0ODJ)$sH1Ȗ#5بLQ\8D1n@>% 13R5gBQ mхx׵!}wݣLW:Q.nY!026DGe똥 3)@9"/nŭIX:n/0k=WNy V2{q(1Ǔ#Vo V3GB W*.^.'z-޶ o(q֥}c34;[BŸZE-AfL2\PiG8F%&Ib6ӫ7s~ɂ視?g3Cfp(٦(ݐubHЄY n̎Jgj$LWUCKIUpN؇i;_CTَOF9d$l; ^Ik[)vQgr}ϸݢjȔw0ݺWHCmG)H}4Xvi7x3KbU/ NI $B3˜Rg ;-l\ѷ|$ EԀ :6ߌPq1⭃g^EoOboE!^̬/nakIsWnga0(+צc^ZBڒ;n24 M֎Du=7+7mcEkBu>ٝW3RGjtV4`S2*I=zD6$.dnxV<#L_释ۏ$aMUe 56_'Sd, kENXOUʾMw ;প]/OrTRxD1(ƤU- 3o8ĆZ`Ɩ S -9Pp<9;~9p=cI檧w۟C mܤa؎/ZFB@xȃvz+hn岹3CeDY/iroSQ(,}]OىKZ?o̪+k>&u\k ^={S~UqCÎI5ug֕K,u@sEsƧ$CsA 'gtXԯW~g/{[o4lKuɇe{ ԳfT s E&;FDs%pJH<ש2{{Uu418MAt.IzF%aZ1ϓ8\Awbh[SmJ< 5ϩ r3 BQ&b3aP-?8"vJK}= ZA 9G]EŭԦyy?Ã]~T42sua=Q_$  @FT~MEf[T qr fbVJ~g6khkO rK&}*Nb K fY/hwYtaILPș1Xαpn {SJ%hzI9tr$Ogo&hN"kA\UǕD1N`НY93g# W\F;aE ~__rۼlvOIqƖѶ1PlucYU<\wMKIvPél-(ѕY(5R&҈B $'LS4 ~zNr34I QbTqr]vg|%0]'Е.-zq>r43_=/bJPK$qr^A n%Htidl=$\[ZXۿߢe4NoHڦ䎞4xWgSecw tLѥTJE 4&4BR]RϩZOum2_uQ&)uv(:hK>i'`-) F5jPAT'.ׯ(XKHI x=='Nsp;0ُVPW_A2şH`+8`z"uQc$m2ZU:6^\8xǛjw+cH) nE~I_Xj=Hyjسtx_Q}񫁺ʈ #2Љ̕L"8鶗4۫m=ÌF5(ងmO$Gvh˳>[xvB;2`؀T9^MoZ&b˥4`TGI8gzA\ܗ9$BEVex%)O\w,JzVkX88э{D`LjtEa2['+eIأ]@$S% 3)Kjl0 d2 b1UL"U,=cqWX}i1Ao=|d q(j] E14)~_:|5lb@Oh9`'a#V.@Á<,x4WfDL,aa<1Pm S@_tStdT*dA3~zh읙 7M5_FJ iMKk (*;~!)B乵Xtк<]w֗?@_rg2nYE!^ܽI(Mw3%Ȯ)Xʝz(a˥J2ܯ}ͺ{=}LObݐ-G7N)H8܇zeGŽuXEYJNYUŒkpouox sg@q>4p|5*ݪ#/ 3c# qD/ +E-) N/(iFMdk N6"@%w %ɡ`MUAI/N$d)}(LFaKu$_Ŗo;ūX`,s 4Y[FajMOgŢ^9=u@gJ*("h= $ >u7awmA R<"lmqM@u8.W =ɐ  b3Ⱥ/A=5 M{D4wʮ:s{blwB8KWK>54ONcjWz;5oN*5=|`ϻ{ՐW'*Ytpm1kB؊&2˗'$4?6jYBBCJCT'77[QHeN1F8Y&VZ݁+}-kuB(JBZKl[xcpw8y-hX2**@{L\['6$?ʨ bx" nI ԗ51Cj.7#:ltU EƇ?xVTԬIB _a/,!ϩ%E!9NFCN9Ր'6[G 4$W*b.+M>szL')pcT|p8Bͺ-9=㇚fn .F}bɖ mm.s*Uoz@G-;gHF6L[S L# 侉u' R >;2iV˜#B+#"3'&tVd߸)k S4N=*vEZ3d0&2[%IJLjG;6asz:O-Cul%80̓^NwwU9HO`tUxUx'A'yً]B@L>>Lth]jA봣'A/\W'r)/j6/(T/`JAꤘ)%\ rqrt.''o6hw$j 񺘜QEBs4`p5 Ah9qVK3d#GTvi )8Õk`BPsJR Aob]|~Da° UI[}#^g\ή 3,/z! hDY m?,@|aљd 2VDko)ERx"ȡPLM`Ґ ܚaߤ됦uemAC4u}^sz[DfS4 %cؗ'^JӃeψ@Ģ&>^ X; ,/.Ta'heH 4675d!gKn9e?X̱:2u-5hZH(%;i p꿑P"H`lO[nC;ٸBx9)tTo*:30 qr L%5`\3{ꓠ\IRTIV~4vK;K,y\Bw'Z򝱝o`UQdYt8ha*aj ʸةPԂrBJ$@1;';uWqgz򟦬 #Eq7l7c6#?"'8PIqӧ0V4UNnM^)= ' $lX`NL na"ۻV?*\|HPJA,C ꑧ|)'oh-2v `Jʶ ekvnKH)TCNxHGrq~o .T/Vp_Ĥ`}0H J3gخaָnvB0(gC |.PzPZVdMV8}"ӭ- ד%̺DHK{h]Ojt3*w#x^)kPt.ޑgM+u9RxInמK9mB m6N2WF霍/4V`5yΓ<%.R+]ŤhQ;l`e=5VlMtx_!CpYAx˜!5ȥօ\p&s "B&RKBWc^Pao.p1ֺBb2s933i/CW Kj -os Aڀ-ca!bQ 07 9HAm{>ksNۦe(L/ -^i%LB{Ap鎇yC֕{a\uk?8L0/`ƯV!r-ؽ6X ʅVhO?- 1UkėlUcJ?Q9`N?F>2[ą顈7xGcpXxgD7دp*7"A氙xVsFY,>sHq OFd+!ӭu mSFA3d kxHiO ~>O\] /VnUysQ cI0Kߓ3aLhAg `cp‘VoneSvE2>u7{~K p2sl=7N&ͿGH]Us6&+P$;MJXdL}d/dF.g{dt,"3MKjV[$jd`(K98H(Xs"(|8ֲ!WQe[|T/˝e'?#ݝ!bgR /tͶ)| {#SϻhMi)mT#%=ۻ+W*WO'Sܩe FӯZ?4SA+! $:]BfM=7enϘA'wk^ݡ->u263$O` - _zb-IMvbw/n$ff5?Y,@v²_•dY3EZª :'svO9}[޽~8Ug87BS h%t{8NNHW-E:y[)ؼߚht3p9_dgP/yx1I!(Z  i0Xf5GeL55ILOI*o3# Fr 7m;Da؛OapkU&Z%~00Ë=O?hx붃T 4uA1=S*ŮReZIfSğ|p!:5ːחY VmdԶ|ٓ܏DSRx$OMC^3d*s=Zi+-χ!Z3TiZ.Xm\h޷5+Up 3M:#0,ڻ&}km2)$4-Т }EU㱗>&ɴ\X !dXUu{EQcLWUƴqXqNhGrTď 9  Þ̩0[8!5_˜BЮCFa#h, QC1_&y;@]:,n3#fWmBVݵWWr+W+î?dI8[0M}gS]gO0x91i֕1&7V dz{:QExfid )mnt3b3s MZՐCY#o \o$( ɞbXʼn o!+fx˫6q)K z f9Rj-7s؜ .0c'eLVS%\|~t9>}]ȭN{H?E~c`tU$ud{n6 5%΃́\#]UW!PKyp{ cRiRӪS)wj *C*T8Al5bmHAl6/x[v[7 D?U *oXR{0!:k>V1p1 f-[rDYќB_P=fg/CB8F4(/>eoqQؚ:S=OjҿF.$\U|TZۑ/Y2z1 xØ-9kcڥVK,d!X !)f&y%7Bܡ#z8^*rX srDʛ0Lc\D S𠄗nHe]!,JL1ADp͛a޼T{:x w~vMuz`@W?t!uAtN=0vpźh,tT+"lRaӪg Z'tQOF R6,a@65Цs?|P܋t7u*O~+N` Cnu4EvB 'R:A׶ƹ UpZ\(P Xq:}7ESdc!< =}}K&SyĪrĵYNnx걤BkVVVئKgA'6q.[M2"m-nXplV.e&@y}mE=r@oB(Ex辇]uI4 Ɏě%`@V懛+Rv.9_d5lbfm\{ xTGt1GЯB8 >Ǘ{}B}rDvIc=c;C G]396P>s^}u%_^M. \lF_#}pj OEWYs8Kuua0+4n&u,~ĭlEb1S?M; ,{ybXxٝUП @52@!ZqQB>%\qHJ|#[tcHL#Of^WN>&]p|cQi3pHQ97js+m7 wWBx.d1N}>Z> "@3XUVB~BZA$Ju?wp\+/ _Ź|q5(Q[i(0cq< L1Ru͐fwbn+g5м۟T$ gLoq-1 渼0am mS Ew]M6 Ovzq 2ASe)^yH@\dG"3w:7j&}\kRrK䨎O~=g/W3KW{$$H 66׿Z_.+ϑFǖUv{ .fb+Iۣo"{Pf`:y.{zb7CU. Oqw"tR@p3@*R{ǂs >u;MCRi>LY#r^5OIS)7)S޾0 і?d t9դ]h Lw'bcF ϢRT<@UwJS{H[zU['0G^`f2 )y}Q1 .Wa>kf;8(\GO-o5i׌%>f?ɮxeΎ0HuPn[DzAe"ch9WT)zdۈ4[8fNY=^Nȯs0V-78zquыb ;t;TƒnXW|Mw%ؗ^X:'ܗ#e sNh-Fmxݫeԛ-L^}.:R39a| hD1lI=\?U/eDqT`޶51{u# }{O<?4dF 8O,eoS.B<0(ukfC$q.t~_@#Ev%y}f.L'=dF2gud0d;kb}HvH^QW.nh9D٢4_y {ؿ1n8miSnN1$d/fZbř[zkX~yNLc9veQOeJ\-T_eAZ!hdt b+'u=:7Ļ-C+‘To"cJ z!UfMhJN p+˷aiìh:oV(t|^9[@"(jGץZ2v\7]>??៨6 gti=s R)Ēw.=N2)eD|piŷkFVA{+1cx;뒂.,ɖn! k $Lfx%,1i( /pd=,~ZfhM&a@νJfGJaϤbwi"Tiʍb_Yn*^'xwuǚ8|뮍؍"a[5%k4Y(9x<~ZyjsJ˶Ij][o=F! $lirc펗2Д>!Ƽ9oi~1hܿjѹG BS/GMfb ]8"8t)7^=* /LaoYS` {cŁGqa'7j6~ߪ4:$cj3y)O!l5l k0$σ4F~`;Wdv|{uª?^ dJ`vizXPujYߍb0ڴG:Ce::-MX|F\+0g7"+򢑏pP~@J)Q 2wEN3Zv?ӝD9p6bdrE"=(YCQql1)'=լ݃hj ?)i4ZR%߱ XʍUWa(TA>!5Xc `H8Ƽ7 :ڇK1VuhFz;%MkDU}r2;m<^2E_H<6qLrٖt[4Z';^|‡B.팅l͙;%8ɽ3@sTz*! Gj\Mސc-̚מ΃M֩M{R R=QgO0-!A]yBJ%zD޻00JR[봨E r?IË+("gmvYqe\-XHkZ]ÓC] |ڞǞjGq;cyYKvQ>qf湚ѿW]mb)"7CNMƉ?;a"n6,n+ nV%c"$7pJO%r'w*0%[~x._ϟ>`-0ϤaPPr 誳uf5Wx+Ԩ0` pEb̗P-ڍF5?*iY%I=i[ITYdm\ 0*^yfP#Uj. Fyxr?윻'J" g!jKH(nuhozy5 EB}QV1uz?xtڲ%̨S1qp lTaMNá9]wYV!jÓc-ʓ|:,ɥ2jtMo81rWLpsq*OU8 - W)ۉDSx4-/.ōKja0PˊBq2+r%~1_6Il‚-踓|ʳipwX!6]ʼ ews&:uteKm(c#p8K"](v/"#I@mԒʇ)e40,j>" $:|(D8;Sҫb pi,űzUU;5-weEb 2vd1ےV*|a~u(9 ĎY7gbMbZZ~[iv}աcX ~$jXeD5W> 8:lxP{=x|hVLiտmwAkz*z']Ue%GC~+Ix`y2l]TLx gOq-ԃ+cq}:M-ߞG~lt`G P@@޽1%nE r;^H](Aڽ@!?f bА˄kvKݨhJaA#60[-BKL+o-9k]lYhZ꒖!/|CYǀ`d#,Iv 3h]ڷ<8TeN`1=b۾6Pah1i-Lc{xm?jct e!Q% YkEE3 Y M),y.%ދ(,9+_hB7-8x|'σUYM#Lszm$-hll16婒MiP q#دZY;+@E{Q@D "pndBG+Ry[44; P"|8ˠ~CZ=IR̦7c Ci;/$d#JV XULbw`xNc]s!t`G1k]%;)d,jĕ XD(Cewʓ4ÔAP6P/XmSXNσEYqz&Ke8 4;_qt0c 7Mo Cd?Zs|h)i>0*eI<~9 pDRRi{8mXyZ[ bQ,M& ?ڎυ!=v$B*qTT.Fb:V9jRC9VxȽT罽OqFNDƩc2p xW(D0j8\:Q %w~J " O\Jj)b+gXX3KٚS.._*ύ0 Tx'g2@sP glޒ, \B!Ɂnͻ Pkq32# {cxO ST}e;C,(9L|ߎ oCæ8 FK1fƍ"AQ3{!H]Z9UOgUZq00?Y5A5Kc|K%q)UKÕ٫$X9zAr }]!ӄD~K B$P[^i aDpR[?. )bR7vۃF Vj}_DJ&iw0%lMz'}ni3gluHfj9wůGk~q׍㑡/D)? 9%z;m?qWUK&6:5hPW“P)>domXQ:_qKaV p)bcǐg.#>,&I`H+j9#_%ۣ4׍X|Gtb,J*Z,}(M$ z8NA'G`%'jXr̯$r0)}Ԕ-.Ct_IU{嬖ƀ}]9dhXQ_Uq!N0 1NV$>h$\צR21n{X唃 P؃0ַJZH_#8g4ˉڂbgj=,U"X Й0 ׀rX=M_]NK9EG3v ƙBf88a+vd%pJXT"E\Ѹ~.U 6V?Tףo3folUY~7W-W}1b9Z)N8,u-}='bf9m>wx}bB3|[5H6CR`c<: !X(qփZ&jaB< /4;U˓y;HϷ!d)"YCVzs V;*VC}r?;&߁)J3IԘ~}" _ K V%۟i@2DE!V;<j3N2psiw. &HPL.g8kqpkbRd/dmN'GB}rd`w`{߯~%%1A:kݪG]G/ G> \0 Xg>idTaJ.f*[LӚ8Z LN t۰ jk'Ngj&d@<9kߗ[E74;m>%nft?T1>m夻pC6[ o ]}),ϼW[]8/zcCGAcu[ճ} t((w,[Ǣp*uƒϽn:BWܰ QVqTy/fjgsY49>lQPQV\CeNSpJٕުMãR4bNPCGE\kn; ^[u9af5w0J埬oIu.ӌm%Ek9m-Ȃ.ysb O Cs(wVPil)TQw^Gjf>9В$+W|oBFyOooJ[)C[ֵ%᳾֭hBi.ctpdن0L"ęyA%[5Χëݖ`I ɇ͘Opl9v }ϧ?QuI<rP~,K{%lvtEnZZA//^ U}'Z->KL߶ dJ͡xt)}bIK2y ^’TXM>QDodp0: mǎF  SvZ?]cr8'Oҏ7s?1$;ZW!?lTm^ggmf.s~黑:pݯhB" ܵъ, )#4 Qʘݑ0Yub t"k没1hz ;w{^ ajAuSUBƳY ?ܸټqS0s͘n$?D )J݆}Zp<֑ R $B<76MobC:2`+  6rѧ\z0N@bN!mkEۂv:/QA ̙f" 0F)BBv\Qɰhse;Ǧ; {$m8!.XG`aA uKg#fxTt>{ JBx3Dȧ)]ωdXS71oZJ \6Ő9!_ztt{וawԹ8ഏ o\Lsu08' ʳ!&Bâ|?nȇ6qh#q"7Qp2<&4&ghlFw9aRCho7) YݭMi$9$dZ6|-mn֏ODTsM5ύv|4W SL'bz'^BW{Sp0#|V$'^o#yƒݵU(vXPޗcգhjk;YU$mgb C"-[>jǣAQ^NE;a[-*8 hƬ/Zg@f餚p_y`:"nJq?7zNHʴxr;[Z}{rޣx d[u8#u#ͧcR#ʗ<ۨ VGtF 6$;J)v\ƒEZ4UY|I虀7w&g 4MLDBԴx؄C9uhc%j,O.Pm<<1.? "~yGj8RK°V:"EBx:9yHtctI*sгpnoa.l@fCS{KrƋLN[rէ$)th۰*hv_V*!,lr!Rv퐸f q@pcYniٕNP8H*ٞU`5m;v09I"vZu6r$Vh2jAG&8ojy[WKQpb 1=mB-.×=mT)t*\FӁ Z''Rûq^ͥHjRB_TTc:UVr_sqtQlSEnCbP+}W/r? JnHW L ^g&G.``~3Dܩ$ϭ9 ݣ2cͭvE!r_4;ܹu[!Xz3Y[,1۳i?(S-nq&wg8ĎR!ƾPB`?$Oa^:>SM'4KS }Gcot(q@_2]K2NKU;agEqPD,+>oHFYDoX~nqX(]QYY&y%k xKVF\BigfYb|,.}i ӭ)X4Zny gZoРR9:A*2}HY4~EIH3tx]N Nsj:{eBnA@:2lI }Ybb`zl96ԡϙ<͘;1"]X%l3*ZNP/R'(bTۆ*CwX,pOla ARO/} o0Rh\o/x4 J1ASĝ]2cݐL=O FĻlV2ѕ)n$O_v;]i}e }׊6_&(oliPHTvyNh&&a+Pj4dAfC(h["}C'mXrp HMYp4F:c.YJ'wG`iT4n0qIϕ!>zV1v "GN=LO[ІH;0,RYz1>ծ CQȂ=@t#PSt \؊'"sHQ$ so-Pf V-\F(|<:=z_uy慃AdVF#vD OnƟQ @oTpcTuݸk5!1ZB! )O9zD٣M{[R&qu6|̡G†g%~NmЊd]U_~y\snDks1PiIm=NmuQ̬ Q9'lBLoGnya2ؒ+ +\Ժ!TA,R{WD]dD)FK0Y]H:fc߭:}t*.x+=]΁PmKfo }G˸+7OLiľZ;*!ZR'ɲ4Zb?QvMۼ,#:QZSJLpZT~pkǘgS|P=] e!4?P,X& 5Z *=󄩪{G!F< zULC-| r5A4bUq rg}Rʵjw5P+6a ]{>;Xj$'j2@-oN8}0X1Xt :,-@[ޓPe nЀI9̍>_q0A &MiƻȈ'~N #*&p1Ws{FvVl~WYdY94rGszjC}A2MZJC\ڹ9g9jT !)(6lwhq9h[~;ƛ}k65{[6 u uK 3j&]/-Bv\1A^{nw엞2ĢڷwϭE#c4@GjѬY BWfLާ)XwK]j˂<@0=H5y w=C=bY0@* UË@XD}cvv{mD@bL ?Sn1N$Fc)/:LɁ]D5:-nuMg=L5CuCMF7dlTu'1lU]Isu`,Qr%VqOdBU}K# uMˁg^b2RJj[玧d/4ZZ`?vE֗=PP*qrzg,_uu>҆ŃE ţ؜$|qc\"=R27 ACubԯLVEn2"W8z9{oN{LR<Ђ9,Xr Bl,ڟ_-Wżs +MMb2ozġicd7E$z+n>BqE>Pw@/6Diken/]b#Dv}=1 c?QvimA5z:1aqJK2c|~- Qg,En,d?$jV]!=?L`RO;wS)5j!Ayg_U9pBAT\yonWdV0{e.vj)Yhl{Acr?Eq>U}0 )zWi5N߀C<:Z/GOC_Wq*C9wV!]H8_\![[ߋPZ@0J?MnoW8ҩ)s߁߸8 ѦƘmXFVCVWvePLs2 @63AZ.2 hm|[%#wMr3Ai HSЁbPYp=h>~w0:4_:| lI(4 (/3p|,a֩GDq䤷2\-ߛ@QU9QقcvKg8ykp"`@~1lϹ|62Rv6hQ~vflO4z`*cȻsgnU8u7*"AW[ڭ]414._C0 ˤUU6b!NCyg2wB=S*9G$>>po6x|s<:)2 "SBs,ؽH/7ug΃ =L1ъF1z:l[f* hfÏi,5efN\ Ӑt+o6 _*),IY;~8zE ~{nj&-Tc"7.g:*U$3p_m,IiCIv3)4ź|,BI"q !/+E6@loy]pJt"6~rnK߆ɫ2#pE`ͬ>J{SSeM .vOb  6v RGYT~RsFVKݜU2OY:-d׻Tj~]@Ǝ Pj ,N/e͝ c>zġYԢe_~} Kt;`l!'pq~Y^GeM.OU#^Y~~$ 䟨-M`)ҧ;dNh-\A?.pWU87Nwmu'U?xG4v Ļ[`fdp|iw%Ou%ZȌ]_G 2Y^6 GuvmͶY- pC~Qan^Ț@3@ߣ6bC߻R̮s.J&{4{.¿DL+g3Y]|L0"&dn0$R+uS.K1y5'K50<%8ZVg7}IPuCCJ 3nؿxVov ?gdqs]RdȽL|6 ~'Ja ݮCEEo7gץv 76Fa` :IT_Vuv{Q`P]웒d }xw%" 8YSA]oJwd0dI2 _,:<νK42Ti\M$Vw72icEܴ?}WE?f )ԿuCqT]T"S;Hۭ:(,@:Pq5$͚Lu݁֫Rzx[R+!$)ŷZ9_VTNLNSCT )-dRgS_=? zVZTd˪"8l׼ii O-_e/pn?q#׈#pv`&qA޴2;$2zY{()+ ƈ9f=Ҍ 4]:(ȅ,GX=ʔ5~7d,}3q~%$pvD҃`Y@-!=1<:H Q|/sTJO\2$E(AYxIMީ1L<2Զm/Qf:4&k"6}\ϧDU]5D,,$i̐ͻZfSt冫OL'ghTJXZ?d7$yYVI@w36K5iBCCԎ~Djփ%Y N &(}j72&LB~4|*F=v퇲mM-^yRTݖy 690 ']j?@4=]wEj MBw [(s<Ю:]$^ 2۞d&Ԍ;{8X-&),cYw8>kڡzJ6Awaom8fAQ>oD1CZWT]n.1/&ޤ!rz=ش<6C;Hmo3X:6.^FUo*xk0Y]&@5I zrw/qGPhdrD1H<^VE ;8I[54SwkO kQ|{8`/f쉲'GFnwRԦ s¨GuqĶJpn0% G*s {6h6&%Gzk?tkzb"njH}Go3RcP-b߈%bܯ f8ko%GY/ШN_%9^we|V21d w,,P)BRRմI9i2 A;&G,m:=?"LN-So\1V3FO*do.8̓h3שİ&@xU~poh]a2b뤅T i߃k.DO/~Yl/ ȂҢ z8yݐ&9L~x3ӕ<:v07PT.Ycp(%K]z8m3;FnϮƱ$(?_ؿ3Vn(y(&!Wh@ phGi^Kp"G3{ Nb^lЩB(::^aUQY ~~˜b14xm Bg.Ŵ^B_2,nKޒ tNօR^\6{rS1O- S& -?(l,:ޓKاr˾n2@xO'gHg㙏Gx, R4B1T"~i\y s!5"C`Z+rL|BDbq'rhTv7_V5H\Вm)s;^P/vөc ^lH@i0#!2@4JQZwPÕ <}_UGݠZioPS~g-ۚ}U&J 2=,'Z6 mhKu//Ngh;=_(^w#$J7Mků^`n9rZʍ"9/@+|ŖPF;MXV Kgo0Lm$3oQ>"x*{f=Ͱ>]77`_I7|/S;4X6%nf[ER {VFGd*lzծpӭ3`1uᖁYI=ônt醝FCXS.dI2)?>_WS~WIʿ9m^o$[qyPi.Y}h <~3[,s}/ܨ琨mMEL !$y2QĴ}ҝ2nh݁yܮOJ! ^ ^OVŔD6ѬM+K0t1S锕ǖa) "ε/FqL(p+=:f<4ig*#3ZN wc7oAnf3.?&Aa.o )&|g[mx w-2*&;;ٯ~w1˄m0sg}N&ͥ$lpY'ު^tI@Db}yкGPyv% 0@뵴jz bz QpH ClʤTѡP61YH=IPђdIMs…?cqI4W,Ё4dB[9s=YРjSbaо.Yӌxx{;7,~-)a 5ZT5X7lVΝ20+r':zP No+.O8Gj#hg7-`(X~ v~D9#5_vᄚ~S)0`9\ВECR et$>jٞc}(LitgqLeMbF“FSKTl{p$m FrsxS 14sb>vʤ̮oAb p #l9#{MmL VK*/?qRlZ (w }(`ؘ:>^>}+O$W&3\5$4oէA5YKeJ"I ( ')2wՆҾͽ!c3^ْ KqI͍#1zG˭JuA%Ew9J"t7q7dGqKhs>OW1=p̾oKer_?,VU6 Mz-Fp0N BRKF0H.&6Bă4Ǣ̴XedWfGښgPၲ<7ksS62+=T䐟k` ^ u~K/mޭp¶^ 6Oa7[6Β, W`MIXمJj'D/1!*su]l]Z/Rc 0W|{f!EH5[jw}((Q~CcicR[ [^{k|H8\tȆln!V y蜰 M01[ *QOk{g CnY,ƙgj=Z8Fx,6 H0忴+A(ҝ1(; ^HSnˆij 6c6pSٶ2ig ⓯->VT͹Qqi=b$ /FS8:ߥ1LG 6ps} F<9ԉĭaoOS ۚj}a.oDBzN.im' `,MŧQgvi. 5 p0?I.А2*O=";6sV6cJ+q /kfUt$ŞJ)įoxU5bZ{8Ro#ouuhM vartn B@TGE(q3"QX"*3O,k,ŜTrrqM'}}U4~e6\ Y5,PfT*TB/Rm]$)bJ}B^Ȑ @pQ,EC?ꢟ=o#i>Ji:+g #G}/WN,U4 f B2fڛ!q8ďt{tRlXxyT>VG/,|H&\)~ˊ/[GKE=Rc>J/нI p~o7 IΦ=cmityKM :ҌS!8, rRW*lsm)@K TsBj:6 b)Iow#bm=PsRaXl+BՂ FÓvAm*,1Nr6gh-G[D4j"Vv# HpRFpAq-ާ ^ ׸6-q.,e olhB{IKID/8Dx?Y|رƂptBu K%DHp,LARnnMG#`9}/ IEgs(pP=V[9fWXlUa7Ơ%a|'+?˺G03+GV8z<*Rl#!ArDi){tLg39 4OfWE{wlSxl k*ZKfo. =]sř`] 'X.;"fDwДXcLsITڃ-xNUP>exCYZq }-Twwx-YG݁Lk]Aޢ3(|P,/b'6N6)edd2)7q q gʽƬe_fP}.Kf{PH 郘YnAGREorђљxO9TmbH\j➊f3)гp?Vy^AݫSXK?xb- aiƠl"𠊺NӺ 1<+*ћzq2 3,WLbXnpTaT /ÞsCMH:1o)s#.wӅUoXa6Ꮿ-,ϳ|suY"&zjA볟 r޾ QZWȕV׳n)Տ7[0 D*Hu|$^RD Y[q0 ۾)wLס>ď- vYgyo;[^A/o:`{)Nf|4ϦLn $2QﵠGK*)@8s& 4lIj`roTZ.ƍx -#) =xilg0/R?'ׁԚO_ `ki6cvuFܷϑC>ˏޤ{py˗nspMP !> )RlTX|1@F ,6Ёhs+lų&P@s@UHq+MRm6{M(:UG SRpjQJ^(Fb1㧰dp>B93GʃUB7N# ]d7ݝv B坧f>="7wr,hIŐ$ IH\ytwx1EDIBZEeD,OG<0KgX. $wt6JX9iM;2fa @vwt&\-k:!R0GL8ՍKNs69)HևjsW o;u(0h,v^̂{9@`C}~P9J),d@ە\'fXzQ m!et!◻ D`#-^3OwɹuG#H~ qEMHZw-ޖG6E*uj$#{wFBtO-wR-*zGtG2gǹ؆ok dӗΜO%ټт<v%i옩F_1lXJ^ 8IF%>Rؒ Z U>BqCFmf?q<:7&0GLD`#`Rkިk`g 3b+_.U?zzKҳj~R:or9dYg$Z7n DjC/& Z5,iCP%5# 8_k0P ;t<C@+u|M䷻8 E ;X|ֱXTC9𬿳:֚ `~WosOS ǠJ\(IH_'ѿ/o,>*6Y\UN0bNbi:NYTR+ b`2k3Gy7)sZ1y*#zbu;uwu'crꑚ6 q3K]iM3g!73{=ƣ&tDHH0c+By,-ȏѣ2_wygbv͌M,ѓ"L+[|6Ve>#Ke683u7Ó.l R$\DX S'%< r&P5Q{"LVw &:76UMT0%)4xGA2r C h%R68{iw)?kIθ/ ·CCigl cĊӕ~Zx{`s/7Ƹ=M ͞k -OBw=Fյ(^$wѝ C.#A.˃+޶ph;~vlj zuhLZMYP".m T sƷHCYrN4_@PI98oC4!P̘̆ixZB] 8Ya,:xzE&"$UՋ{A ]z (x!vgܮ)eWwgo3HL)LdYYŀd1^, WvzNcQB-G7 r:z[Neg|mBVzA^18wָI.Qnw6kGqeO.[8,* PO $dm\>'*m|ЁP#XmJiRG647b{Wk}n i}ӈ l`N(c5B]MrK+;mͬ@A}{4puV+L5$܅ekڨL9|Or(]FJ.>|;oVomݛ9WǻM(UӋÕg~c4  8Avvɿ\2EU&ɶΰDITTTvR>Uֺ%q0csԽI!Oi2rW\fcźj:9Σkm HMI>nDӋ>E4p{P{nTr|ŗ;EW0~fY8val}d :s6jGUWg{٫#JVΊ|cP`) B[lw͗].n:_Y~WσW+&8T$P啊 >B!|MQ͈8 rB kNZ?dnDW6ryJovNĀĤZ^ tO8ZpP+tj| b8pfmwi:D?(T/tsFMoY ih@ȔƼb#iP?49 $F5 2U6rDeٳALVQYqlM?tcI Ƚ ܷ3xlHș ϕ_XFC`&⚑)!lJRka٣9cjN1)"S>Dt4dɶγ@.)FZMԔ!641im'rA&1g%h H7hLxHX`Ze6MqhCJ}e-ҵ5B%g W$k$}O@AuL4.I`) #ەNЂ舛(jc(^bͦMA3a[P?껩p.(( DDKđGKN F<nL@/n~E1{1-y&fA.k;qI0O-4b'LZW+Uf g#3$z-2]I=$[.;j)ϜZ {Y/W 0!@5h^ Fɑ,[T{h9c͙IH\؞NlE/Lys= 9Hp뛚 gg޲tlcY)xЛd1t{"c UҔh|o:Q_DiF?^ pLQv„th8:W&>ɯ1hCY-(S3}StF0/DQ]Eۚm jL[)~YټOWZQd= |mÍUBDiLk#w䀘vvfSӏẃ(i^e㔟&56|?$v 9p!5O\vQ5ΊV5ħ/1[1Vu#N?o~ڰ<νGsַLS/'r,%30LDU98UMΎĬq:*JTd1!4ƒOU\AK~'vaXp4 7!+lY Q/x 9M>z|V5+ĄjCZGs`rguQWvj"!OJ^ˆ>lE#= $#Z*ЦB{6u,BQٴ>DOe\'#e5+A4uu//1DX^Ps7o) ttTbTˬgL /מ(D3|z"Q13%-/8D#u6d#O-{`Ti{ˆ6YO~_"b$FOo`wܝӀx:Ό +bX/ms7e% XSsa{WV)Z0}rߐfWbt<^}uWN2Ojcą:Yo>@KŠydǟ~l#nXXxM QoPGкD!Juam?Rl N`ˉ_e5ICņ3@o`8 m2$pϢftOSvyKPOA pY4Zv);BJ#SKXՐ8pyl0u5gwW,5$=E?aW,"MK B9t8O 3 {?-ĄsnW\1q*&<._S _v@kTu24F !I=||=s5~*Xi-C(wuR]VWvAm>6sŶ-"nT ܤ8UZAAhKk++HS+qԓs! ,yoR=WĊbd_ᚇt<ƥNHeHkdOf1'cT.b>YmEaWz$xEBPӮ/r6jr:"/T7-nrwٺZCvk q}+:q1Ex>Ǩn;H)z l. fh,zh2 MQ\otVw%~BCfr^աфtɈp-u`kXw4d2}iy;nW9ǎ|c>E$hOSMk k4Y7E:4ƞT^1 HֈsySUbb?~)hCrSkt;NK8DHfIf& "1z")p5Y+9phRDV2˺ŵ]|:M}.[ ރbyq|6؜Z*HoA,<'Cվ[!>`9qkf`W ٖ)Yѐ֛vV/!.҈$*>O6OruX%`V<^i4)މRc0XG :SFY YW]ev[gqƹJ20_kqzP 0eAcepF1~Efh0(0V"^ӅZՙ~I(Gp|􄙟o-Bkx5&#پ\M<@L͈A`E4C`TkŚ;?QtŽֹ<l(pKӒT  -ǯTխABxPsXq/űQ}yěz ,bmjxdr# =xUɝղj,!86\҃D&DJ]8G}oWﭵFGQY9χ7C8KpMA;B0N7|²Ċ''16R<ʴ.4hN\W p1w:]$fpg25M? s o%"ڍ`k4!+ڟgftf_^4]doP;>8vdw5fO;EZ֮d4 ZpvpoI|D4uU+2littwZ$x%.᪶{a[Źi]uN>4J|9HWBm{~viG[~-,s+3_Ӝ|HkԏMHD|#-6ҘNcUﳸ|mݜ=\#7jȜtlأT$Dw7;f^ #oƬ1)fTXYdZwL{TN[Z< zBI L IBM R#lÄ'~vM *qƜ,cզ5cvw6 jXr?; cGQ7Hâɹ%3S5--*yN{&H=oH >eX^56gH""&4BS_ 5Ep}H$nd񸣣zZ.|r5H|~h8t2.m *ᅪh)&yzX)kQҹ|e8Qc kL@M`DbmS'}|扰lbd6<@7ༀߙJSC~k$-GHjWXY 0QD'~ʢ6~niabo.]-]&PNNFHLmP~ .[&%] WE^|>D2Ra@5Np{@45 Hw+5X€m3Lhlg]ïO%/0]vU1~t. lBQxӸ6Ln-Y"*ojVx3BAr?=I*u)STuJ.:D#Ǭu~bp b&Ltj0ipu6*[}KUO:u$"EevOҨ[ ?m-짊d[?){{!s7Q2yX.ΞV!>= 4|"6yGS6q\ d3.k:ȼߊ燸"u+'r#L!ZmJ4 Il N3KuF!/hʩ.A+/pS];ht[<)j.icՈb>F,U"?sF."*`(Gmգd&JxGȊUOnV-[#hvKMlY>tj2ʾڒmecM&ၞr tEٞiA!%Z3bܴW8"c9H4a` XH(b(3vO>o/ q@5u2chz"Aʒ 95l3&u[ (9P *k5S{GVl/d^4Q:{pS4%nD/FN|֙4!3t-@>y8tHny5D(>JO6 ;`_JגR}2Fi_q;H%1T۹˖ɿ6Vﲇر)V*oQ1ZhZ%Kyd3!: FVԁLNo*៍bULf;G86`JU }_Y*R9a& &^#yDdSя֛UJ~nso>$l3l(r =[A3AI$Jz y#NHUU?b^48yR1V?DvkWvӅ#:-3DM^*!gh?\넾A3 t"'Qk6į;j8a8q^d4fAjpe/d:i*}*2iA߀LX-0;m̗}JzSMAb#=ȇBΤKԈ~$ ɘ6=>P`e] \OHGҹ>e}lEx uҦ ;`.á&)LrXU"r*VΪF Bj6 !RkгQ<78QiYK+Vb-;ɍ01Bb74 $3pʗP8RXWmÈZɓ\{Uӭ[hD.To}Рp.MS{Si3ձ;T\+Z W/>@1rfP08%(Gkr1S(|9ӖdJA$/1= 4g^yO{5 o}uU:70S /xK 1#)x^ 3Ҿm; C|Px+ީ9|]IؑbnwQZH I;&}FIRz0j=E̸4ؐ[Z* K#b%@x CDǞ4 #`v$g>%J[I{{no8]G(h~rk: NGṛJݩ/xB|n|n֍JU={Z@p2{ҋojvMcăրS%jbjSe4АK;PQ*0-o]F|=eԯ[|1rĒtK5WXYٲ232h+E$߉6!^LHjޠ (;-?w_Zt\ H{Qֳ@\1: -T1J.PZ|K-0gLU_0z݌Џ4@PL@sJbPTk}<oo'Cn%X$yK q63MIؐ8=#CBpǪ@ {]^_ٱq~W,֜Y"H3GZ@sRr)a/^V)c6fCZ,L0bz!Gλi.j1}.V+`7a^*t@%9tS sH$(&jkI=ގKPوzi]Q@F`<Wo%!>y&=BLA)Pߑ :iK17WbV.:8D&>!W1oLa.`_-CYH8jA.LPkS `.Gӹ9_|&*,1w1Wb+g5qkF\v 4EPdPBUx5]& x hSxV\Q0urp! ;}[KLˍSi-GeāWH,C.牧'9@ĥ8$Du9nxԉiiėI5Plǡ,9f P"Y)*J"U2!SYb5}}'٢l%TwR:!'0q`/U4ax8qNs5ȶvT,]tn?9rueӬl}>%0' y^xsnEOؙ׈1֓e3'EQ(bFNL2E@IHo9u?Ӻ1#c´Qϸ,ivS)'+>A['}&ƕz}4V[e%)skPZMF{b2ktρC ^,d+%-6/"!#B[O *RQ!D.VqnC?0zcT`œըLaL.'wUP/AIWj[iN`6PF$vZlz s=i]h _U3u2?r.+++&>9KBUD_a͙uDEX:> EL Ϗԑ/Wr9R>[&1hPp3ΠR30x//%ta F,+mY b2 j[Q(u;`FD LpqE|rw\?A8 `30y4{';`Z/aCR 4,{?ek09MK}tVwբ2U0Җ |GVRA:ձ 3 "5zNp4 rؽ{EI% WVŏ^3W_K^(I֒}L>tJ+׺D ܢbD@UZbNe_;M;NTxY!y1msS}^>MDrWct$0ƚ4 =4%c2dwxObC }x>lř^o Ԝޞ#oUkd:hX /cI<3\+O1MA"~f ֚ƨYBؠ!zo Ih1p&N|d7s`IhsA]f?47sbon;~]߽q1ڗR@)6IG6I 0xX]EɘfR1# =YGMΆK{sC>l-9]YC*;JP)ro2Ķ#`mS5Mq6$)a}3T7;@ 1:S5USmVrQӇ4<ٿ: &# %@L-rE`]0 'mNj:ɘ[]=;4c:ErkP " ~Ac\ELb *q2yTV-C{b~GmCZNGHpL|E6x7c7("Oٶug4>)*5UkFZbf¥ǻ֋w/L21bdn!9L<2P|@E.F5UT~AZRfA7n]叶<7 O"HM 8$5gn`yIzb 6< X#&`{xQ{_3)"~IdWH{qo+Ca{ԡ v"ÄخUž PP"KȄ! [<_e1j@ ZX'rq%҈p(Swѫ/~`G(9*& t)}t$M@9BZ.594}3!Q,/7MG`$̀`J٬_PwƋ0M#k `Br:3orG~Η0)-a!OX`8,*pQT,Rt`t]f~ӹI^3vMvĂyZQסYBcW <Ѥ2-5]Rkm/5"C&JoXe>'Jav~׫Lݺiɍ6+I̘&f9h\]9idi k81L5+;0T?|&#r_d&;0&<֒zbyQ r)>UhLJO|Cpjg|s'ՃTZ;x." G)4Fūؑ1:i,>ZG>j/B93`HilJZX" cJ1W #vh]8ŸYП*ʙ+O.``LXS63@'m&~8S\]k>&d :FN(- >W0nV/]`M, F]С1^m!}yB,7ۡ=b"%XfDn`Kd`Y#(E&.]ŕzxX% Sgt^Q^ޜ%*jWX#!GUJ_ʿd=.qs N#\X)EpNVS֢my .8Jgi(w@oH=l@ܯqdAf6?5 3hBS{9*nX*6!C{r$t})r"w1X 'M>$RXi IvmxfzpTtR6a-; <{XV wSIEdǍ)cy| +T_%jR|y*/ Iۛ +IY^P!5chofٙ{ f3*T#̔1 A=z< է *P&@ßkt -H@A?fEkGa$ f, ĀeHiқX"}/C 8+bMSUUrKmBѣPɳRXS()}\ 븆M'̉;jxmLy'4Jkm[PL:R݃=?tnŊxu fK0LKZ0NAGmMHy;{i"CO/8yss^{KEoN)$$.w/EؓsԨQ҃,ܞzlŵnCl=_UBS0|5O>K$*Y?nN!uݧ jBuGm69m+ܳ95㘶~'ʼnUF*޿r*Fzq&okwp}2!ҬB0p仭|r#\@ jϱc C 6TmxI8$"T$Oىӷ6Co@۔yV2Ƞ@ !E ikIDq3C"|{B4b?jڛ̬r_R+ͻAl5ITM!h9+r`Zv.=޼ccxtkIݻՀ2VQNnj~1s9~qtc`٨ o-z "&S;[CYQ5EO0pNtIuVxI7&Ha{7ua xw?TZYR mk-aׁ)wbwn;P6 Lh%.g hÆi8=#a=:8uy[t X7g}nƛH>a>h G3 sLvl:Z*BdO@?tr?isUU׆ >i[S'.}O3PZ'W\5"CSc9; bu!Mtv Qʀ,U]P.L6udBcgSQ $UG|}kqh̲'%@#f-mr9 0S[e!m!w<}ӗ"ۼ; HV1 8[pwmf]"s„Xu`PŅ;ݷ1*Z̢@#%^sTv<=z4k7;a~ųQ,P)Xc֬ IE"\/-\,Y̧3=#QD^ct0>(gH}]'LM||:?߄l2X3E>pTr,.,wgaKرw<6kԡWJoIMA{?&<'lf4j JiKU6l3FBC'1"Ci'hK~i F}Ⱔ&RN !-}C Cگix9V͡wbT xwo G hW-ѯ ˦ , J5jF,#YAb c?p:нE@ $Zx1ܨmfh:LXL;4V};YPaGCx@`k%YChC';*C_nQnpBBPekhgiA| b<>{ N]EߋX[xM2,6™_9sri°=NZ:;|L*ҴecXĪ|r*,uY(80l5R#Xz/~bVܻTi I$%gT97W/' S~.z zJlDZ;y6{U.124y=%G*54OL߃ .* Mf=,,5CџZ XMCYO.0hݴG^A" = JaH{5`n5܎JMjB6tA=SڰwtXo9d  ً۟+"&*1f@Tz{ rsFJ =NaͅV0B J" )3lļSN S єA{K/8uGv*ۇg= 4ۀ/Ma.?UMe{})ʼnX i(E[?lޔ{,4Ok۷@,J:6?%]RT~&9B%#e%v\D$4\Ww62vӾZ6G51#*|b  F7ʝf֟-iY<P[/a4mkOB~>/ IUshPL"PJuiZ%?=k!:9'8a?@<ݴoWj Ͽ ,gZ6:ǃٹ9r74 |.rG"i29{;05 À@"xZג)>ñlc1?MqWbxhKipбmL"TnbfM4yHc g2?NnzEi="~؜{0&OF2K6yrԀgpf) ΞjÓg[yÌ=~wuYN-HFJ_Kƌ~S8.<@]2˙jۢ8w Qv:~ >QPḍ5H{=oiFdS 7,lb}y+"нϼ#gns`b ^(хݫx +ǻ$ӮC\ 9o-hҴ` 1r (Z9`UV8Ixϩ< E9kRW7a~`\nyvj4=`z{fiy%ĉu)0:e)BE8<3.'BȾ,CeUE (B}UC#YC`_yg8ߌ L2ޝڼ e{eu8|g|P|bRVDY<1?ao^Ӷ6Kݳp|"Cu RQ|%>huoZ1[THYH1 Obq "tY;}iG{w¿ň9~ юz+΃Q9f_FiDiD#Dcl+XJܬl[jC}n>ޞX'mEG\TJ/e.YO߀b 6 } )?z2QvvcHh"NWNjٟH$@7b)PҚ8 s T6>J?Ю +Zgb..+g1r7MrR2>YW썾d8(1^ű6.;Oʺj0)_5Ќu94|VjjBv̿ Zb M=[|R+A;4Uꨚztx&р=qߐA[k ȁ S} <Ѽm3Wѹp*ٙNwWjBLi5_wJCG42+t֡nb_ c*5{'˭r2Ԓ׍B;Cx8Jh7W?lkϙCV_-̝8q=Ug>]9VrI\q;}"4\yEdtR$A sx]ߋӶvWZ51bےx'o&H卼mm)#&,M߭~K'q 3'1>í3+ŘpKy֣6lкb=007%x@P7!?tbWx bFy듣3P t٭4 ig2-ĽegH`#$VKyQz1JzFa{JMxtĢ.yh$DZƺ}s{.vEK_z=NBEvX\qt].Ȼ_+W&R)%kru<'bWVk ]DZ_vyuDϷMuhTGHYv tFVOwHl&%;Z` *zA̝ziP/q\#98jhhIocpI˃w;]K廡@k9E5DmB9$A=DQ %7 yC*gxt{LXOf`wރh$ vŚCKB+>ëuz0!o*m箘WH`̈a3Uv6S1bݘ,mhT.z@KmlvVM;E,Xc+'Ysy $Yk˻1T0[@{_TqQqw؛x*DviMrhZ8+$stY,39Cb+eΑ6[m'G,}\3_*W˃v ^}bsv^;{V ZT%eGhǚQc>鑐OYFVǭk͔ۀ>5"l繙5/\I:cL`5KGL6@bƊIg$*'Q[|4L }@I:Mf n,Ud[~ֶ {E]}*U pFm/i:6YhaI^8!BFA";6Itsd$^K@."blHͰX8\V[%IҠW̪*aAHﮡFCXnAJzZ!y 1?EY'&2;8H:n<+P&<*Xj\q2Bq냿of4-90=eZF&uU*% )LL"~Qwntz<T^{h Nӊ64iQbuz=@fAӑ2| AokVE2dWˌU_uxW[xX@X32qvK;?~#E|LCr΄>I1I z|phARonPNҐTSeܒKX <6N؎,ra*eF[rD(Qn-)!ph( htdzaVO6u&)ذ i6-R @fxcݨ떛ϴy@Oj\Q{'d#Mw|:NՅ4{b&ZeuIلҀ\=,rȢFH)l=DGiYˆN z˥6A$,v$C%| Q^i, D5fM]y.9ѩx; m(P6Ș/s(^)ܷqb;EIX^^$=WY,~4(ʚ`ve+*?}/͸Gp&5бYAJ@khVOeJ1/Z.Zh$)㭄nj/NKP Z(&\4t*{{HCo+3D̠8>qd\ENM[[=A*YDwjۛ6`Gt@ x*{|uy뛋p2qCIDv݀kyʣq{X!*8 P@ksP}r>,E>:ʦk,U؃#{_"f&[K)fը8hy̮Uqfm}>NK"[֋ u<}vȄCAЇ{"p22 D=I]}K251z}1x Fx2@ǘ;dⰡҚBr>јX{] T.9KȩmBQg lUde9>1˶>* 4UlՔ6߭Ac݄۸W4T Èc|PC|4' wmV=h\Db@z@n mh6 S!Ajr{e^{r~},GAibX-w ?y5`oՏmE-~feLSQ EAT{MaIK<-,41Qv#Sj.j 桩'G+?FQ:R ' 6=':"b̈́MD|TS'+͕ Cf7`йM_勔MjB&"=B>َj(n!ɔ3ew sh菉Wrmg&>X ڐcć,-|0}S SK^WLs~yE(ASLzPDu܎<2"#N|?780T,QUfФ(mcpTyȣ戵<|uD=_ r3 MK׫2/ :\JQg3dzWQg}m3d*T۝07Mbuh#|m6&B,G 1 X U@ d&ܹo1󲿍p C2G&-CvT_Fy_;0@0X6/k14pzB!M6SK0 X[c厳{@7,Ud 'f~{Y\-}C=:WfoU]j' #p V8Cr\JeyEq?;ѣp+?0 5viD~Z@~zMR@sF'7E U tQ<j|3y4X}#s8.񏕞is3$Ҝ|~+PJPw_~fX*鳮ǃߧQ(j ^RM`k.٢2Eb|E !b*d aQbQ~zEuyǖz%Bt1=qؒ`y:^:2h`fzsk@GXR33)q%Xwrǡx JJi:D&NzDǝE-,%:94\R De%y2[xm A}%ZNHBk; B>7]\`!U+;cqU^4q'Aޑ594ۙ8yt,; 6u.@ (L۲GH͊²vXQIcT#,iEٷo.¡Δ1/=@zTs6'~JVgvJa% | HdZ%i.)cv4S;s乏;/ΖAeWksu 9:O5BDPY.j?}%{yfj呍O¦b wQZgyVU(Τq9<ɘz=r*5TOYh)>s#ުy˛fyi+w+^%2I|Dh't1k"n.Pv$q3G`>5*k!ŅV2!Ƚ+Eôd&鰸KE*F<>Uc* 6>2ۦg.$Ō,#<1ک~Qqc.iƉUU=:sTvK.ʟꖮ9jPe"Pzpx~z3wytJh}+>y꺙scװ-״)7h|BRM5 bdeӝG"":w`qi(:*mk$YGH8h^<(F*]sCجUDL;1NtdTgGP*դ"& %Q:97Ƽi֮H!h4~T :@]5Ke] k`}ajk=(ɳ!(V[CI_"# aC^ĕ7,aUrxsŻ /hޔ1i|K ;Χ,NeɅe,H+ .(~UXo_ &k}3w1݃c e `Yǽ5SM; ddۻ{| +2AYLOI+AMxѷTEτν;QC_ˬJ Tbl8 aƒd+w Ll)_3ǁgd nit* gNW|[qRv'iUDV+}S V6hyHg HzRz&>ݨ}ދ&a5LWNYD4skCRXs>d-B =t;X;V vBq81Л0+`Gz*'Zʀ` ">]Iӆ z,#^Bՙɬ)rͅULX=zsz%;CTzxdF eTJH6(>4u%v!p"-HlZ5@t'+'(p9o`-)?A?ja3;Zcإ;Lct ϳgaIOo]J𨓘hHꜧ>ιX40׳r\lTo~' 0,4Qp9YZRIb6*N̙fd™K}pʛijMk+*P BV> MSYEh/ngQ>YƹX*e/M>yQ '3O}y=XY6 {n/m3*$Ù$Fx!1aѪl_8jjdu&Ȃ RvkկN= x%|q]k=xαf ozq7 ;c@~.E!B@?6m;Ab6 'W T9}0$8 Hag@w!{jv$TρYv)>fa. 7I5vgYf#5 ?eʆ$O=lg Mp0>d ]ɳ#fi3<> Hf\xtr|io$Eο6PoZ `BK>8bL!R+T)%NZDS,9nd(lR[ظ^[$ӻW+$W/쟨O9{ d\Xo0{gR+̧uȿٞ3^(EN-jÇk~`8F5I8\)k@cL_ '\:В PSsbB<>v nBMoI*#bkBHqJ7&40}!k5/hťn{*V*Av>)$UhE or($@Rv!;\138J.PN=Ea;sr2{09K(*YX K} .$QV @pqY{wca#G t FlT]8BGZ(7dg;dyD.MX#WGY>> yi)x?Z\н}df vSCԞN!Ejϴ>Oz}&pY2)\!g]}&&X.. b#Vpd^x_ +TLj6ȅR(9'=v*rOݛܪ|~$.Dy^dP_VY0 Ϧ '%.KElΙ 2^K+4RIcjn UεYuʸgd1\^zlTsՉf?xOMK8!N^,arWA-`D/d1@w/%l rdN6{MuEW31Z@)@I7^Z Vkv뇥[=FئT.޹vXJHٕ)'ňUa|b9˟?`Ա/W`( v1c|=ɩS;ؙ'lۨ^l!Hym|G  Q.֠X8V@4GI 1qCӮe6C*nC/Kmp*7i3/x=W~:~b!u$Zk"c{U;S¯bKYo&y0`R>sTdLB-3j?*?@nI3u69% c#r_8ؘ5lSȝ%G+'vES $|<:ř׋aW2vܫFy48oG0r,EW8P.;]mIEo-]v[(ΫKT,Q1:R!]DHrՇՠ #~ M6ŽͬBжW}` k>bmTI;նjfO:-Z 5O7ڪR3Pՠ/(EK vP\ Ǡ?[)]AQ XĿyZyb="-IN|96:$r&]l#Ew ?m]ӚxuHfY:Ի V 1K|AfQt:;9PDRWg +~Y,V"CYq2XBTj ˃0RnLXyc5O*8o#8r_osoיLA\=Cj Y. MJ!9]MuԚlK=nNlitUeV=2K:dSӚИM@.3b_z:1ҫ< :[ d 6=:[Մ eй)XQ~&̧^VR\ɨD~_/CyαS[kufv I-RM }SNta141>")f&*}"}fU&°-E[h>`<`NJ`ȵ/R |&R M0?쭊KrFp{)#EѵjhC_^iKTǒ@[ W0|4}}\a@Vױ+4UX9)K iDE2bLX a㕩RMB#!4"TA8ac4%ŘI$>S:U`_:nu ߴS#].j4ӱoW. }A6 zPA- d%9e+Sbhq5z"!c4? &G'~zʼn߮w<4# y2; +]f$d -'Gui2tJ6 "yŬ^Ð6W`<фSjizƘ<6c~[ ,K`y"]VLkl☓˲7oήb6M YFwʷS}Ho^f~Ч U{5֟VQ k$nS_d1"Ms"'cF)L\{}! ,~HCt~/t(d sTLaj(/X\ /"Y/m煫?є1Sqg ?Bח.^+.S]p y5^GSBW ])y(8Ρ)RA.++J@Nd]KגѴ*+%n8-S<.EIQ?K"P7OVJdSy@ʭXprQ`d1&/vȅoynubYv%Pv~7R;vIOLw;K&$%¨qz`oSOEqDȧBI HmNJ鬑[ω۞j#bȶk.aa|3`VVQ xBB9xɋga zhJ?'&0Z4$h,E뮾*9 _[\FdW/÷ + 4(w+ԇ'|`AU 3c9\szyh,Ӳ A]?}[H/,mmnTe;^#BWqm[F1I( SOb}Dhy1*rSԝQh>armH,\efTNP6 *rSdۡnUN}aeG-7r3i) O)G2No*(9QUxSM EϞPt3[0A4pPGD ~V[!Kv㽠_AL-<\<ehu6z|=t/*F"YMD!B>4JO^@!qa i;]Dmq@܍P4T riߟHpFO( 79!N1l-D:N*1׉[uwqǠ~֨_9\"_2SθR7sv1 د Aio]e:B~"Jڃ(, iQA$o 0 %hxoc@_MX djA˖h3! l5@5J5WbGjS5$G*+[4ymJg#&l5^Q"x@;fYz]EPy\hR\t;R} UHUK}]uEߏyܨ4Ŧ*_D~ҁ\ak 5 }V9r©;2fA2E2 1w. Ja"m:ˢj.{L!E ?sQu|kzp/ :oVYވ0_$ ٷ#dfIOG~胷Hzi#7^z oqv2r <8"14կl3vsx7oABAOIsA9NĐS4hAmSpe3"5'Ik6KX(r`;gE9 {=LdLSU8,/?^mgA_G^+?0 y?QLkϰ01h4OJ+~ +)F`Zi_̭enf 3(o> ̐hh#}b_TkC<3);%ERL]F€N]fq\yI;t+vTMn[eCUI10e0UŚ_zJ Sɟ8{ `v.)ys(]TGq&R)u׿Y* )Ctm,"Tw6M2r{{#jџ !jjG!=ֲNSX{[~nϽ?ٞ7ְ S0F} )FPwc{}t Im׮=`-j74q8ȵa?yw!pq gwTc@\\cOM] q7OOzWI ک/+hXO9L/{ xɟ(v/A2 ^3tVGK(E}E׵ ?>[>:,-@&8N $rzA,oӣL_A5tm:bѭ"*Hƿ{Xt`Q0mnۺze"O#lѝ{?a,%67hvkU=gbCI ;CHS|f<0Sٹ,xrg I,eL\4Yc?d<0u0ˠQ*T$ah[{ Dm {H$|D$c{&u<`d;׫!= e2Tqz;8ogw#`#r/,ҵ$YfL7m.аSe,Yk0{Fk]&ΎDL "ipp20ljkVxubw?g˫EkL0< }rNj|kLϮH!={F01-%b0O5K#1JҠW vTQ(7 vڬ)>|[I^W7?oh OmKm/rbbkҵ8!YT2MwҦ6] {1(Hx֞wج? lSoB!@T~(·pU~lwbE"sl.q W#D@ҤfC'Bq#͚5MѸEYhYǠy]#9?L 8\ati+ 0M҄;>Wf+2.vl"q;}"2BcHc Udh i4ΙAuهzzh]Jzg.-*g _RK;2v-7`߆u4&kX.'acvGC [TٳDG0`Pt'.bٯMc,[.8}xXU!:GCU"\;Ϸ3)G}>2Vvؒ&ڼua0í۩x!¦Hg`LM?О%9x;0j/N1rBn[1 =2igv7â8~?/Bq@N0ι \H^fIzQ@BaRi`D:yB."24p[L)㤫(D vtf(oLہzv%BQB[A~ϙU ԑfA/ PrG7<@n) O27F1jT/;^H%~dgЮKQ'}$DgOqHZ'yVh^)|dzU60O}n"P^j7rptApJ; 70}C#e*V=&® Epd.Uǣ#L]:+J2n . L:sROUݧ7^yC|B?n1DD78a@s'Utj1fmII"4V@ħiEጜ/>27֑>_P+ '$2^zԒ}OAV 'ߤ :ijd@XUOR:g?͑LTp&9^+͜#w.xJ(Vd%Jr=}?ķ˵`.XH]Ej ?z:FP\<rۆR+o+Yk>ɷax #ej3=-n0Ճthdy|nV嵝ϷJj0dݏpV>w ;Yu NԦ!vI8it.L7bV WN@R^uY"uy)I1YFcP/73#&~lE2y|m|_-tQii!A |^DoKMUPaLB($UkU=Ŵs9f8 ;b' )0,!/2I^:jH.r*c1omA^IeHbB/ =+y*XdiH6hzb:rMJvYX::} }E3IDZYZ. ~FG&E Qzr.DuJf>023hm #93f0/LpX S"NB G|]tċ[ A T 0$Σ1&{(-d_,Z]mk%Q9kgct0S7K,}ɖ¼{1Zzeˎ~28wp?rlT7iay}tW2PM4 }!ZJ?*Za?錒C%}fD ZK Qeڍz~H8\r0׫? kQz4RԱ;یwΎןC?`(42_Ht"AɿOfx^BSK{is)?i_v4S4w\|#=MSp" 51{Qg~ n!h52!) deZLJg#NK"Z$f?&gk\ n/aCûNi5/8zfSՐPz4yZ]zխ}e$©Gtw${m.pWER/܃~Rz%.eU][@>8m$R$ ysL(eի nѬj}K x\/#`d s<+\ x8j$OkUkn`ABsQw1'&Xfh|8la(ydGt[5ĭ+zP6Pe^os3܄4uoJ]RHg X}3&kjNHFk-}1`Wj|FX<va}ZWޭPJ/4wzɯpP|G)\,dQ'yx7ۯ^F(yWV Y@ Y#EW}DϕH|cڄ4]O;{E..* ||8]gQ9x$ x.nU ! (Z-Ek&l6Jd‡5!+`n֥Et# ~c:0 Gm0i#?#gg0xmjm}βclg`~RI|!_BKBա+"]AP\k2BqYn 88`dOKU)eN"սNv48fd71DI^qbCK *q) 83YOmGZ}nԫI"T#v/Q*?c N>`a?+VڵC΢3sKcXFD t*LM-pm194{ %4e^> Ly@%T1*Z9* zTif}:Q&mmF4maL<,Ai]w=Dh;&5 {ktw=-)M|(t?S31}ޡЉ_VأH2  I<4[bA$DnsAlSG9MnN#QWj9N߲N[\N讓>xI53s,nl# bխ03.#g=R3$CPueEK'q, Y#1Epe?>,p'A1rێJ1Mn% +%krnS\4IGW|Ux7;f`t*mHZy|/Ajea(ogWn>WlV7˛`7^S?yn],>3C3b]m<>r;etΏr\0{WBFl"lM_c>]}3|W>n<^;]JckNt @'%VwYN&J!NN0LumBܮ]?үda2O=*>o2%.}tKq ߞ/`b.}˜ݣZ.iv♓C˪)EpNXSTlCq!VhTV N/V2LOJo?Wt1^31P?[:ȶ}<~ڨY$~s>Q +9鼫uA`5~'z6UˍեbCЇSXi!q@BFXk3ftoh>֮V6JdF5x[H4kpM`>-ϱpaF7?e-_2X0Mo0wN5z_9M9XF1[i{>>PozN@-V9uĕ"jneL:N)ǥJ;}sr{b5j>_٤%3Jϐ^2 Trg0]YHyd"ԧ`S){;^ .T6ᚚۻX5v1<\zS ?jlf4V޻Y\'6B3tbjz\SkμUmPvrQ^P]ƟMq8Ź<UVNIsGr*ҙӒʀ# Xv+Tnd+ҮNQf OteQWlc1Va;*آR\aW&|# 3js! |9~) '͏ʎ@qsĩUjf7zLMU{Tl1vq'aDZqW 'fGj~Xtn87$I@m+#s[f+ET)' ʕLj u3WO¼0 ro\!m+0@п'XaW:6yk}4Z&LCu~{ˇ#vhʷbۑa@^N|vg7H;\ d x5H(.,sTX,29(V'v)J/eA^i8U@uwdG|eA78E~%ࣄN຀|G3o(Z]P=mOVwa8yO) up% X޳;Fw>#ۅڑCB$N]6vGw/rƬrzF)+BO!c?!9ID8I& u4u ,0q=c,GȢ0 U3 qMUH>cKq&QB"BnvcPjD(o+(6ܱd3NBN@oXI. SPUAf8C:85<"qC߷]Y9S<ݟuLC]"c| n8H:UFQw V8Pj+T[4<L2h_szvOHm6~r\ ssWm} VqN|A[RBMnh]A^)vRJkԃ~IxmOC7ĊSYV,fcd]rO F,rsbX':" R|R@ +QM6Ox7 dN6&?6a:H;FRGHm:THA-Y>+ .-:x(BSWAr$` $4I,:BD psRl(eFTj3 ǟ&7T!AyօF? /  :( *~pǷ3ڂ}SGڦ ߻smsbRkr>dʐHYCx_w$ƻ1ǂ"xL*zdW'aΦw9M:Yxߕ@tpꐖߨ0@5:$ĴeFd(Fhu<߽#xqK/(!<~q{Th j/;9yo 4 A5?Y-L4PlX/#'F`x}|So&N JDE柔(%F'Z"2fGw C.bh!,-͏ְrWb_*ʈ5ւLg% .|X@MAFgpmumѧMZptZswnh4qcz'0cW̃7;>ۂ䯚OkGWKH:V5=}[B{1"F\@3rً7/0L cqBD VK\!>eCpm۟IUgÈa۸~IKgĈ+CGx)b^ȑT6Ы&Me>NJpT(5ոu#3˱gE\ğFq+!#VLrljmN!4vvĥxW׻P :]ePf:#7BEL׸}&t?Pvk&,ᆢ3S`dX7bOwsq::-v_h?;'飑yLCK ]ɏOwf& +~a1<ܘ$0m[k4 Ɠ/.1KFu83A2C3 ݀|&9'z C‚hݷ.{X%NEGxЖ2%ރzӪ/na!m bְm1>S$qBKV]d_H*D0vedYHyg0YOW`<'a!Y2`7ߥr6f&19800, Aʊ+܁ gETWks TK8'~ع8?}a'P4(3rB"߻GV኷19MjtKQZ(x0Mij`xIT=0BnHjrrhBMk,b73{s3&ZػS1‰Wc#l/fL.}B59Ôv.BuzL4*UN)-&τkG.CT)lM)0<csaQ:!NVwEScH骑iEG29] &۹!迕 mci]{c[oFm|EWjvrRFh@?0 _ !D,w[Vo>n?NsKMW>4Zuoإ0ntw<1#h^ο^GB 'P޺ɶKL}_p:m`QP<,YpҝTH^$TlyCZ/I5X{'[0KşQhn\Eَ@ZĂFlIĸx zU#w-*++xKѰm۽zZ~cأób # @fF8kS1LEfۨ *0hOgH8~pW|أ < ,V? w18v|lOKn ɉ[~Z _`pTDa`jXҧcJU}#Lp t:961*76s:}:7jOVȚ%W;K/IA^lh'#!8 ζSX)M~/ ? ({6H`71٢ffS]&gțeܾ0hIT"ts'?gK=@!<_a;f$ߪrSf`dUD펠3^>$=ᕨi^cݎ3j|qqkѳsg0|,4кf9nۂ8v}(3X,G6f.3oJn}RLO\JxɱY ,_ޒ|SΠȹ-BIgPz*0a/bW@D3 ɫ%lsoZ D TH!U^z&V['P& D,֍¢;gNPa,n[Jlr%#"Ai19`s#udW]@, i7ƙsuMi5 2S.o3" >` `7}tK6 3 f- 7yo!YFx [ ~"Yx7%wt g9~TV w!( 3 VՔ'uM֕=&=Y<#Tz'?GMjHÒ7?^*:KzSZ|!}/}>wm]dž\LQ vr1b!>&,Me}KCczV+0=(̈mwoٸcF)렷)=* 2$4?j<ɴOivڻR#[%SqxӺAd bYv)]}xu\efLAB(.%Ta.nFƲ6=".h% Chv ou9?̈́c7k1T:E}C(&SEdž'*_{iz5F[ {~N$)*(eU !6L!}4M2\ڛ>#++-t4e3.LPKc b6'\WhA.Mnxx.F FQfva2MA.Y)5{,3Øh$.[_/b'3qB_.Ӻ)M|09Cyu 5U= ܙ5hdSWb1;{&x,n:<Nce*ܥQb~11jKPAuOॷ゙#lWw wV59D~]# aAC:X{?Jt68\ƌ\C6Ԝj:$g!cTCAϲst:2Э^vgwh&[S-m=9i)fn1~tVrR /IRTM]m*F†xZTS_zW$Ku "Hg'7 >`DL|*i iLl1@XS+mqb zhҶ_/M@Y9'{~?6MB7~qȡV.W! 4WFmSd }e:/\gWd! 4a}ډ0^;t/&Q3jRV6-ϜL腋dAn5}u[Tlq.*Pcr;i`QHf/r<tg%zwHy?T}AHp5ƛ0]>&EՕ2j9O`OĜ-Guك0Ͱ&"Lxe5P.e0HwL o!n(fܼ 38 U*K&nRBUruܐzڏZ6' #Uuer \@j3RYl?W }*c͉hD+B]0e&sn lr)zW ~kc)ӱce0?X߉Tc_AoZ)<f85 K_PI@!]m:3LC7mcwkVH!5!28? @lDhhnQ׊MS|avR X{i3yq%ije}  v%J\6mŦt;b({BVyگ6L*d F 'ΆJ@t?wj$|n{CsNFSALM{t)O6ETmw~C+8;O?jQCv` g]wzZ=yӹjLJA黻 )t=|u>Y]1.PsI!Z' "*Wg~G{{ B]PZE˹&hY9k=[|s-ڕ瞌V&![{N>g)8& +I^TqME{x ! Եz&oo6S^NAJ-=>1& _/2 }2یKS^.+͚'KmH7#( u~%Գ!,v5ˉp/򆙚 2.:hMƋ`ir犠F m xFgճza;{+3U%R;%6ВVrf7]!9j!; [H/HX>Van .j='cJ5w:s: lT4!n!4K XnVH\aO?AC'>0ڜ |c^zc9;8+cvycEHycz@Eǻ{.bQs) +}봹CvWV[ G섛(u.LΈ}N6ɺѨQ,(@,7)2i>1e`>hAQ{ W;$%͹tUB׌-*ɢ#+5%5? 6Z]،А4&A"}ZM#P :  L63O&S`JB+mabFrxqß8=Fc R5*gp+UVHjC~Rv/74-lJb2¹5Vf$̅k nwvgSw"qTȫ z3x8MFY|РvZ)X|"9Z<-A, ٱP :ĵkfw[qVa ^֦GYS80ԥ%aD,Cq`U118r ̀-e[NL&"GbCsU.%w|?al>@'Ț|^Ұ6{g/3IƵji_3eW_k' 94647_@&xڵሰ.ŷseDWsHI}E* sIؕ $DGȸ +RE0?7S^{Ĺ5H΃M1B [i\Rw :9 1ui0fVfq"le5(3]LyKCQ#WC΍ʝ cv^B E$:Ƨ;[4ŗC` DZAxl҄͠l3GBPHYܕ?77 zyf6ж͊J#<37p|J^ !piU|ǎumR_i ?ǫ1+:ϧ:hj tA ow(لx@1'#b*Tuz f9TkzPC0]˥*T" F՛ 9DޟpI8u":BM>+rzղJF 5+/sc&-*^1Hz-Z_»R؀*AOrC[2_}(dn)?rԋ DU! ٭~u6Vm{ qu|@-;baХfE, %)%a(jҴR}sx]=j4~˞;\l]2D+^3%"IW`R\G=piQRI*3 &!$S:_۳p:ֿЎ8 ' g/[7kQ6OUVE<YX8wh\^Mrcֵ>ܰ[LilV~JSc(jeuiJ?S,]Q$.˫Ak^Dkg-l5_?m7[R3D;`sTLnA:X*$wvrhzbq!m8A!zm0x t+h58}Wf-hituMxMW-fu1uӯ/KIRnλO1 n #܋HX-O t [Vl`Q+EőZm{i +@wObաd%3OX]vӈ6(f 8ͽA^Cg&sXsH2jO>hf9ڱ@`>XJ2\H-)of:v0\A^ 0Rx$ztnjB(re6tj:}C_갊1]A IP:?x$|_\SshP у䳛daZ)Ż m%3RPuGT{)bU.' ԾG2Aֈ^cY͂~%\V3̑,MD#c{1GPʛ4G[̰h,6=ΉWʣiEœJhpepu2W5Z DzG1>DGdEd =QJ?.Z` 4V]*\SRF)W\V9h<ĉQvFFYqsBS`tjo"#;vnN@20N7z# ޮ{gٗwQë6 `ޱ^3nWj;Vt;Y |FeP;޲@[.쾚\ytЦ9lf"!znwъ f4kG$Q(c㪓䓩>f=7֝Z{qIkp|;OэSEWEiSxC~AwJ-%|zĠĉ` B(zu׷Ms1D-"~[f82'ߵ,Ka3G[60!Br<̭Z*(i9Dѡ9. A`^x5N`V}Y ӼNwN"7 e ^|rjd)Zz8^Ziy;QKZxG~:c &b{?#Z= U긿W@.f4b`/Y!}AgšUL ֤&Z]ڲWn/+bCLmjZLX˘1Ʈ~;k"1Bq} b`I 6};ox}GQqg:ervP^((Ư'L"zZJ eZzRutϓ3r}5f˨.> 6Pc55AGM)8߉#g/S3^:Ba:vɟr86|axse-al2Т0"?lV]8۹@Yöfͷ3F2@?)$ yQoCip1~Aχqm[Po X;QKoy@V#l1~U1TX_i֭?%)0FIf|ɓ|Xa7+pd:k+"5?&|A5Ѽt(ʹfa%M{8YFkܙ#"e Dμa}} ;&@^&kZqgg$ *',kxX[wz: "sYnA\5Ojl=Y!hx'-AnN*p(*VGrTX?s1u:J;t~ S*5sf"_!#єOlz7~--g4X $F 3Fl,kU/vjo5Zvn/LgQet6][:\WŌ2(]v߯E2P,ʼE*ۻ?'n,4ײVIA^`}fPɪ@12&JvLОS?RQ 1-LA/XFqlMƋxܗ>xB|#Cce859{W ܩ誏72țH]T5AȋeC} DofvV(%ʑE~h$ڂ?LEּ; )xPWV$䆪oEsMsU!MeIs?TtGL"xa+(4+$^iWiRց<3"c❀#z:8RJ}z\)e' ٸR\dڪpUuڰ:F7֕d D jݢmC<> *ŪP_A\\oW9LsեAFZ ۺ~ [ʁE` p\cOKjX):r^Ns` 2{)zzFG6Yaoڠ(c7kcBԭl8,CvB̡mlk[-{-6ꬲחXU=A Aߥp-L<rρkE@MTID 3s+$!xeCSxXU P :1 h0|1ü =wuZݡ? : " \Kܤ3I*QpƔ;eoeF޺3(ڼ3 .-t~ ÏV_ʒ2xʮ$2E 'uI*|˿hc lYm]DFUqk\nZؽP8c`HtoU[nOX&02!tpFQO~.5w .2j ErQ]r1L4^~GkāKe+7 c1i"2QZ:5%gW˔+$08Swʴz|@_ KW&@>_NG-+0PgтG~XRVQ-BZVMζ$wnႺ?|E{(FW- >uѣǑe- #~Ie &Bd?<8d@-uSrsC+, ӽF:;5gn̵oKtqFkM8䚹P_?⁉3@/V2=CJ7ҘpE6zV&#Se$6,U.Y7[\ކш4UIۉ1%jEH˒,w0?i).& Jy%`?k&E}&!1L5<1-MN[)-1bJ;pX@gr{*h67yC4Fs+FKk2ƛ,s҉"p"?[h>ģ=tሢ-,.0$B"$ѳ*,0,Po֕Nw*- Ŗӝdhejdž9$;@?STY)}ԬkEp'@ zsvgkX a{_ނ* RKf}h95S 7X&k ?8K9t$%$KDDȄ>ԡ)a򌽖̊XhlG)b dh1ت}{Ygy;ޫ0rG G+xAE[h7\܎f17K0U ޟ0C|Wrوd_g'Ҽ8 90'07iߧRv4P b?b_hPIb\:7}(}E\n5 ;)<*/V,E VZtA`<0KΉm#D=WON?F:}_Ր w f7[@4|Y rȊc~SisO২ue諱H,hLrW}BncQ&$Dk+t]JO\=8Ss (*hty0]cjzy՘X6bug~OT42,Ԩ=q@aY #U f ZŨz9{Iz?1B-9|rK{?Q(]8JJ \XM: ̈)ad՚lʥ4nd5(w,}蝄?F}Eg.`G6r|9ƵaSqO?^Sb$i@o5Tl 7>Ź2XWĵ-{ }_9D j"+w]8HEBDMn 27/WSvĸf){ {O&\[zLW.K[ 7'ԥWQ[@0>4Q@xQ:vax1MGeH%kLi. .IA,-  욉dي)zq!^ -/ZȢP$QH!(+@CbHYXl!z]~IX|/]VP-;Ǡ?4oXq)l/AɜXo>xPO/wL\8a,f2D}CIn>OCy#fWSFo|I)EK;5s 钭07׵0VW ) eU2~,rzS@_tvY?l8@X <xyJQM:Fwy ŔI5aC/WDx태(mokdW\WvZQ6<\ jRl~of }DNj GͶ>HplSuΡ1(fLŠm_G.HxxS{6yXM~:?wR|(F&~oIU%eVȀxz8M#+MlʄN>ɒVwj}uqxL%)3]dD)ca Z&ͿVpHD#tV!n`%@gp&Sz􁳿8_ ]reBW#ER(L&Jń?W̻2@FZÏ:X4IXCE6yQ6K#~eq)> J'L%탞82eЍ57Q`&CWj`Hy!XVϤxGdi 6ta)M%Z?,75<(_׽Uވk|f+ȾneSu=s[-"o-5 Xt$$fZ3V-v{n#j\PxV_nsfn5`m"nq\\# p&plDqZcdF(%?4ZxlƚZB@] ra 3]+]Gojv~o>Z^qA(%[ _hi{yHG8H܋f !@eZG & D;^5wq5&ȿad1;{PS+OȻ'`^l"# FA؞wJԻ(X,CԵs2z$z:UmᒙP<k/|I*JpH'j:bDRَ5ֈ_a"4[2!n-=1xXWMgպMŚ^`lY6Z"!(iJ( +FςM u]_ >-3OGr֏D)l~^y& x ?ē./J0Q"xc"+Ll}XXI,OT͊NJ,T( vZYu?hv}L&V9݈tz( my;M%x42}\OiVpceXrjv_Wzb3t6|׃ֿ/wdX '$ Ʃ%f@j7ef䭬\TvK>ۏr$QDހ## G [Ә Yu ï"74O,?gOx dVZ3oU&Mv87Mia! 'Xt^n僡;\1f>:5i\xnK}/m"ۇXL.(W z!w~5FNZ^/>O\+mU `"(߸SI!+t?n-TB$h]ʧtʱ9$JgwSvji aù"ADĮ!ܧthbF[g,NalGIAd!x_Ǩp;!^a*XQxh'lɸ;1uqYÌ 8fiɤfZp7U= f^ o6^"Lb2 %<ƈN|` δJ؄2 CFt""^KEHUⓊ yjؼ_9}QmqE н:TsI+`F xP{s,w{`&Py3[ 8oGDWTG ǀ^FhbI% #i,pXɣ=&BL'8uE#bB۴SJ7l <@/(+%BҀC]HF|$v@ӋK9kr̹߮G_Ɋg6+zV'iy/c@IfbD~d-7ÝS' |R ;.}H6}KG [! ј7h6(ʰZJ؏F5~ Xk 3*897i*)q1D^v'Yɷe`jA[ ]㱐W)Du'Y'k؅汀e8,mY0}kM$q/뗸2/yIJ" )Wq;RC?tfƻ`maT3 5)q/Ja>Kb.K@̺k O[q/`KfֲS6V3(#ѩHHԯkwa AzТjNY\}Vd)gnz1z+m6"K16ȃ øV{\QV" ɢK-ш* ΣvF_G҈)v8>?Cw-NP6 R)u,[Cr竍(͟1#&\Dn..|Y私<Y*NI .Ao2!rڰ,d& c*|cu;KmJ=aiBl$)Eiv2DpS 8L۹YD!n PK$jWa]Gu),gTW~MAfSE vW/l*'M ,o T UN 7Tct;o^`\WO jx:%CGmN=>(nE; 0>?EKYY4*\K^,*ӈ8Snؙa66q)^À$\KU.t0ҜFzïe*HQ&.)}2<PH՝Fy3~m;r1Sw x  Gڄ Ym#A?iՉ?T8"y_pLiNjSN3Fn!vQmn/ُ-GKU2usncΣ>&JlZ&s3C`h}/;cUe>ǻ=PFu7Vs+(Cm/% -Wf~eyAI8߬,+;qBdwc>xk9{@sVl:xtK`sOJgIR%f.vR$&.TMjS z ~6|I?k?p8#Qkm!Sw @K:sa> 10A<_K.#69F|[Kj\b 54c.Wz#*!o*@ >y!+pâ{wƋz,@w^GJd{ϞJIa~z&s>~W6֏| xHd "rF(hkzY358Lvڀ"5oOq%s oL%aC;R1vAJje=%Wiv' o<fe(7~Zg~ @KtuR}_l~ ovO|LCx,0P1C }y4M0s&I= vi^*I~[}tDKCblv)oxR'ר_14(ofu`aBͰhhcP4x7>$k"2A Ar ޲m -aPf0lFԘ'NmFټo48 [N9ykhJ%ΓcB-]Vn;l_ gJUYT!Od% G@mxҜXتp[}܄Sf jR4SaITh" D A%#WGHj5=9E 1nM¶gSufQ<m, Ԧ`@KŨ:}{K3J 5cvQ(YoIf:F5-ъˣ% R#p> 1>LŞ~SOQZ7- _ mby~sJyWKWy҂Ai#]"׊+>R)8"#73($}6)Y;Dd.g@:7cB=3$_֫(cFOY k:BBij3c>Y xP^f3KϠP'Q) u(/!8 endstream endobj 1 0 obj << /Type /Page /Parent 525 0 R /Resources << /ColorSpace << /CS0 535 0 R /CS1 533 0 R >> /ExtGState << /GS0 547 0 R /GS1 546 0 R >> /Font << /TT0 534 0 R /C2_0 77 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 2 0 R /Thumb 486 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 1 >> endobj 2 0 obj << /Filter /FlateDecode /Length 3 0 R >> stream ,KpHy c`'R7|wiKpGPjb~Kc&pdy[c]~SR7ޝM$.,s<[2yR7s9aAXUI,e@:r~?|?ګ OW1|dUeJfL 'h~cQKrcdɳ* HiА$tL/Jr Ý=f\(7hڣȜhm믇h*4/)g ._p'04Y29|HIǥYq#[_G”(!s0(GLdOkG.| i0]8t*iU)I8l>c͈@;Z0^[ 8DbCN?'T͟Tm9mGasG2Vl碖F<1Pe kð))o Ƹ(Z}-<؂px `[8 UKy/psW-BeDbŏB&Si9Sk\E6,q41}YSd`脑N^8D3l^NX򂮽ji^ME!x(z>9v[O۶T@#62&Kh56RWY= x_qc0c},lO}7Via& 0+ޔz4LCil7 GV^/!*tv’y'r{R|WbzYqFA{6fJJ굫 OYzX9Ze 9S1Nd64Gߠ5F{g&E E~5 2otv9s%\!;9 Ԩ6}xrq>go endstream endobj 3 0 obj 1467 endobj 4 0 obj << /Type /Page /Parent 525 0 R /Resources << /ColorSpace << /CS2 535 0 R /CS3 533 0 R >> /ExtGState << /GS2 547 0 R /GS3 546 0 R >> /Font << /TT2 534 0 R /TT3 78 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 18 0 R /Thumb 488 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 2 /Annots 5 0 R >> endobj 5 0 obj [ 6 0 R 7 0 R 8 0 R 9 0 R 10 0 R 11 0 R 12 0 R 13 0 R 14 0 R 15 0 R 16 0 R 17 0 R ] endobj 6 0 obj << /Type /Annot /Subtype /Link /Rect [ 127.62 583.125 499.20001 597.94427 ] /Border [ 0 0 0 ] /H /I /A 20 0 R >> endobj 7 0 obj << /Type /Annot /Subtype /Link /Rect [ 156 564.76501 499.20001 579.58423 ] /Border [ 0 0 0 ] /H /I /A 21 0 R >> endobj 8 0 obj << /Type /Annot /Subtype /Link /Rect [ 156 546.40491 499.20001 561.22418 ] /Border [ 0 0 0 ] /H /I /A 22 0 R >> endobj 9 0 obj << /Type /Annot /Subtype /Link /Rect [ 127.62 519.88489 499.20001 534.70416 ] /Border [ 0 0 0 ] /H /I /A 23 0 R >> endobj 10 0 obj << /Type /Annot /Subtype /Link /Rect [ 156 501.5249 499.20001 516.34418 ] /Border [ 0 0 0 ] /H /I /A 24 0 R >> endobj 11 0 obj << /Type /Annot /Subtype /Link /Rect [ 156 483.16489 499.20001 497.98416 ] /Border [ 0 0 0 ] /H /I /A 25 0 R >> endobj 12 0 obj << /Type /Annot /Subtype /Link /Rect [ 127.62 456.5849 499.20001 471.40417 ] /Border [ 0 0 0 ] /H /I /A 26 0 R >> endobj 13 0 obj << /Type /Annot /Subtype /Link /Rect [ 127.62 430.00488 499.20001 444.82416 ] /Border [ 0 0 0 ] /H /I /A 27 0 R >> endobj 14 0 obj << /Type /Annot /Subtype /Link /Rect [ 127.62 403.48489 499.20001 418.30417 ] /Border [ 0 0 0 ] /H /I /A 28 0 R >> endobj 15 0 obj << /Type /Annot /Subtype /Link /Rect [ 127.62 376.90491 499.20001 391.72418 ] /Border [ 0 0 0 ] /H /I /A 29 0 R >> endobj 16 0 obj << /Type /Annot /Subtype /Link /Rect [ 127.62 350.32489 499.20001 365.14417 ] /Border [ 0 0 0 ] /H /I /A 30 0 R >> endobj 17 0 obj << /Type /Annot /Subtype /Link /Rect [ 127.62 323.80487 499.20001 338.62415 ] /Border [ 0 0 0 ] /H /I /A 31 0 R >> endobj 18 0 obj << /Filter /FlateDecode /Length 19 0 R >> stream d:!kq{^ I <rx"I1P)i- HXO3U9e".ɛaaW1u\K-$iNmh 3^TP퇲[lGɜXL*tIbtb&`z?:i(%9!٢O(`L0V:n+/6joqtc>HщB H4]U[CW8,;jJBUsI\k3 V҇-N҂[r졃f6?ޜ|PK)㜫?cp 4}P ,(;m,l0dsx_gAJ/;ϔ$?7c+y3UnJNU}3-M/u"sBz11=/>wѩxB]t0O{]!+`>1 ɜZUl'Vx^' .TQj2j `+^xI0)>aT`a{ew)'"1`B L̢126ɿ.g3S;wW5<3uMz&fI?r*#N I^Kv'TxK ɕ'u7=s题SYM>&pv3w$ Y +lLA(*RU~Hí>Ok2GαqL3\;<>)iR#f WF]may+hJU#A,T؀&F@!T4FAXEcq e['2"€vu( ,ahe1!)u-҆ x\b1}Gm1˭Gcv0ʢSEl`,fx[BpIF/s:@h[xexdS_gY4יҴ{Ֆ~YP\)&~|I@݈łUA7n h(!?,99ЧC9{+)=|m`:A63%%M68{\Atù˼r{L1~cǺԃ'V\xVX+ү4f ̝PG;uzݝ&j UR=,\xӈlo* ȃ3LjBGaA% bbZ9f85%j'Ho7$ l0XRYHud,#m.O9w%1p!tlJop`Ԑ2f D:ш` uq!j(S^V=.{9ZgMGP@j{zeVDъl)HmkБ bg2*+J: XuilќX]z B=Z~ry :S+'K*u=${CYMI:P~,a9&RJEggSǍ9RYSV7v8":A\fx;{]bۓC5To:Z ;Du曝෧Zߗ{;OMT".)r]CZmf\=<ԇf{qlI {p%qOh[r4 xC},y']&6 ҄8eԨ N\[%87,[{^a[A4ou|j?/NP@リ:{j`HMFGXy4p*"3(PnL~ʏD`O~8C3̌N-:Ɂ3s>=#h= q%Ftlu8r@l x?vQD)Dd&T @Lo+V5O쌽`ߐ%yw|J9<yWy׿M0<٠Vm@ w~O'Sm/>:M1ԣh )Iy,-FQ# YXaK\[vL?ReY| MDnM)}˝o}Fɤ3%Os v-GO* bHsz d8quNmv; endstream endobj 19 0 obj 2302 endobj 20 0 obj << /S /GoTo /D [ 35 0 R /XYZ 0 842 null ] >> endobj 21 0 obj << /S /GoTo /D [ 35 0 R /XYZ 0 842 null ] >> endobj 22 0 obj << /S /GoTo /D [ 35 0 R /XYZ 0 842 null ] >> endobj 23 0 obj << /S /GoTo /D [ 41 0 R /XYZ 0 842 null ] >> endobj 24 0 obj << /S /GoTo /D [ 41 0 R /XYZ 0 842 null ] >> endobj 25 0 obj << /S /GoTo /D [ 41 0 R /XYZ 0 842 null ] >> endobj 26 0 obj << /S /GoTo /D [ 47 0 R /XYZ 0 842 null ] >> endobj 27 0 obj << /S /GoTo /D [ 50 0 R /XYZ 0 842 null ] >> endobj 28 0 obj << /S /GoTo /D [ 53 0 R /XYZ 0 842 null ] >> endobj 29 0 obj << /S /GoTo /D [ 56 0 R /XYZ 0 842 null ] >> endobj 30 0 obj << /S /GoTo /D [ 59 0 R /XYZ 0 842 null ] >> endobj 31 0 obj << /S /GoTo /D [ 63 0 R /XYZ 0 842 null ] >> endobj 32 0 obj << /Type /Page /Parent 525 0 R /Resources 33 0 R /Contents 34 0 R /Thumb 490 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 >> endobj 33 0 obj << /ProcSet [ /PDF ] >> endobj 34 0 obj << /Length 9 /Filter /FlateDecode >> stream "o`R endstream endobj 35 0 obj << /Type /Page /Parent 525 0 R /Resources << /ColorSpace << /CS2 535 0 R /CS3 533 0 R >> /ExtGState << /GS2 547 0 R /GS3 546 0 R >> /Font << /TT2 534 0 R /TT3 79 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 36 0 R /Thumb 492 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 3 >> endobj 36 0 obj << /Filter /FlateDecode /Length 37 0 R >> stream {uƉpelK¬~Pk ^C!Y9F_@.NϪ"+y{k#)".Dm@'^w,74U<#)a ᅾgOxKi T] lwsL0To3=i|(/ʄ%4Oϲ-Uwfj!, * Be< BN JS}l32{ɗ] n1^PȘ{2#@h13cim1 \gnQr77JRBM=/̓L{VOͦ'|br.8)~U GAA3P0I#EyKdZ'#.M^#ijb|>ׇKI[%d9w!* CuTߑ7t媈=ߚ`jXenFCIţ0$0Meͥϭ {'n-`MC m&wud Uh8((BP`l1H)˪bjdNTs᩟]@:<Tσ,m%;%t+.^+"0^ja]j3VIi 1I)!H#-(E^l [ē}a%,1ar;X4FȻ6+o7bx!@%EO^;clά7hx 5d9ӂ: ܓOQrdٷzqWEq'ȲtTV{V@ qj[ذPX4Q['NJx.Cʘy?/xd;޴ĵO/Ŷ؛K[R> ơ[LwV=j71^pXya%B;pt ^MFGßBEmեWe t xk(7 n,voيq(R>i’T x)tɄh#OD74+7QڑӜ{* 9xn+o[H`נT䌞TQ~oR,DfӖy %z5o [t9EҮsh# ", \s^ b7nJG?vE;B+jIWrh&SSOKFInl5C5J5e05ĭ̈;7sMcl(ϓLdPCŷ4$qSw4s̏H/y5_ḧ^7M\@_1{zK8Jq0TDhp ֈ$ ]qZTtpTn|g[K>[O @?מ:l c }~We2:Xsyik"}8+HA3|΢3Js&ռNicWp5le?$0|BliB>pBs\H'\)swAD"g~ AU8鋸4`emxx9}h'XXݶ4|\⌜RC᝘e: lHX5x#O[NT[ʶ)Q7'Nk.0"+upundhhK(g}paA]壜_+9fˀ:D5N0lUޱsyM1 u'1F!N}Nop~N]dxs*Ehmt_[˓j`MrF#7v 3e&"wL W,'e+QLAqA%:0MbTv^}sS9y…sF4蹨sEV*YON1CEBl]i+റ,9?$7rCQRHQ}]8|!u>C-J6'7owDLod|ķR)=ۦ\AxE6qvO?(l hQ 4|"ړթJx;l_^`ӭEq**U}TJsGngf$H*@*- m3M:t `~ endstream endobj 37 0 obj 3287 endobj 38 0 obj << /Type /Page /Parent 525 0 R /Resources << /ColorSpace << /CS2 535 0 R /CS3 533 0 R >> /ExtGState << /GS2 547 0 R /GS3 546 0 R >> /Font << /TT2 534 0 R /TT3 79 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 39 0 R /Thumb 494 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 4 >> endobj 39 0 obj << /Filter /FlateDecode /Length 40 0 R >> stream o'BIcKyr5(`ojh.{nY:-Qkc,oL+8(sd< `$dCHVz%z2)|qi BvjYx}˲>LT9ak#>/[1Doc\Ig\M%ٷ}(!CBm6j3%:>}e\c5).*9G eҨH7 o SDMɡgpʆhX#8rmK3M ɳRA T9ƪlxz[LY'[ k3$ަwűZ"P2hvzE,BGΦj$dQ4~V^,ZC endstream endobj 40 0 obj 823 endobj 41 0 obj << /Type /Page /Parent 525 0 R /Resources << /ColorSpace << /CS2 535 0 R /CS3 533 0 R >> /ExtGState << /GS2 547 0 R /GS3 546 0 R >> /Font << /TT2 534 0 R /TT3 79 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 42 0 R /Thumb 496 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 5 >> endobj 42 0 obj << /Filter /FlateDecode /Length 43 0 R >> stream %?zp;Z| PNRg|hʡ>Q&0ŽC4b] S KS D7:|(;nQ2mvdy6|Iie1IДδ%}3'`ZikD|T37L-(+%QBfAHTM>攜ubBKH$^BNepVg(ڜ7}J"AؔMb,N :n)NVGnn0\Zٿc|(J\l~{{x5-6`gCIt1 nᕮᛜ&މ(AI+5@Sw–u H44( 7bsdRg<oB-ndV<MhLz%$?:N@E:Sp佦e;ךhZT5i(o@mfLV$!kIX=eY+)V$K q>sTVz%h"sp4KSTqpA!M]V=ZTy2 !X45|q,a M5N~S4yh gdT_tK*^EZ+4uJ *-o0w,(HX/x,X&f7T*q+ؒCH׎nItJ=]wGU5jڪk;:a:76hXyWEQI+>a:g,XJ5lA| Y CHO$'ɎiI~ FCEj2 02UeV,"1M`;9SRt#5x WeotH4/Op(t;C?DiLV@/[x[.RHWj1&`)͆ >AרT ~M1T!9?6\|29_ސU-IDoUUEz%UCʛy wLB% >)^S(ېhly=?dO; 5 rӨ oDF Uf,UUqڠh*"ۑ.j=4bjD[H @^=RsaZĺ3y#.$1,mZWPtu|I ɃVI=6:l Qh;96Ihw}H%cKԒH|W8j|9>|_Hjш,pj5jD8#jգj-|p2lgAy)f=p-9 wy0 VJOaǜ`hn\07jh[x0E<9baLHX2+nzUx)d<9SKGa:xƢE -v}> /ExtGState << /GS2 547 0 R /GS3 546 0 R >> /Font << /TT2 534 0 R /TT3 79 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 45 0 R /Thumb 498 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 6 >> endobj 45 0 obj << /Filter /FlateDecode /Length 46 0 R >> stream ,^Y=?FR;^b&8 Pק~֢SB]zT7 JodA*性@6 ߟG7fB$8>(6 >qֻ.~<‘2m>?4>;Ձ sk/{m+nR>%{HO?<8O 5%ҏbr'}-33 y ʞC@߷Sm^9l^PBt4if, B(i置h83e{E#렃f3!ϊa\^1믝9픚,ƁAh 셸I qhJ.Y%Gnk4 3Iޮ{4I9D,v<;EW|\=pv}-ƒqRt̕* z2 ;td7J1%jO`w měHA:3_mRk *?'\8$ﲑUӖ6ڌZoVl~/9f{I(:ٔ=@$iB IMKj W1z.»{:ro0-+AIbЖOp|4{Ʋ3MmLM>Nc5aEh EHFnƟN E q\4L{ h&'-"T' 1=Dҹ>ntW2WQѭ'Ɩ`9{qc,;s&$ut<ZU QjlM(' \ػ!-M4p8uJA'H$9Bdܬ'`= Ԥݻp6Iw*.G׻S=B 4<;i*yeY$: r6trEYb'ziD"cjLbǛpU ´$yK7餁Z"Z3E. R wuEJ92xt[,/VPu!2q=U Gۘy1N!JulC޲e ǬGWfWcrbB|2gʷqpWc Qʲ?UreM:G''z#cduO G8/ֹmcQ->7u=.;pP7mZE~$ϙ`1ή?:O`'c9hX2+h+@ WkTE,Ȑ)SX'Ie#hM(1AP*мҪ3- >eCvܢym(9E%p E=tτQN؏qxx5:NUS(ge?)'>6Y/yfZrhI;D=+CG >bA!(Ꜳ;FcLݳӳWv!Zk_.@Mi\&-0W?q2Wk[L]ZIE~YS<,SOL/١v"#I"}bz t47ًA6 XR)ʍօYI@ꎌnh[CGxK ,wܴC\dp|t8Qû޵{D&UlBMy~hu|Γ "7T+ӚR^zFS4N\ iqe.t0NMgjFASN-zzgAw|Rm\CEIWvXD49l49Bgt!50D{n*H$]>,a0(1Ri _5}B 0'>H4 .(vZG:*dӎ֨c{(_OBrՒzd.FSje74z.W", ٔ%AW&+W\$-빔W7An"!n̼,W?1(5l4 ACU糺yũt|T,Woo} PiwBN fB׸\{_Q1|CxwFԉ~[f)=k_SL.UZ׌A^F FHEoT !5YXOs4Q&xR]6ٹqf^4`@MM4߷,ѱ.]4%fS6=rc#zwg3@Su6Tr˰\aUĎ;swV`  ʘ5 :),'+LF}'+zFM?@ ,t}tskrͬvfIR0fOnf)C<7]-fDB̀WPti/KRr%kuyu]+rov<{(=X,ٯK@M glϜVb]b>:1s’nzǵIevߑnQ90D$#p@J&@=*1QV9)}ma#>ғ/ɆY 8ȵ^Ec7^#ZDU &Sw 7O 5?ԭ:}Zj^J!(˴(JON!mwd!ܚa Teu>j RRY3lZ0iDN);?|d8_ @K:}aj yhT <((s{,I\gw|xO?í_PÞq:aRh-Fhg4 aK !, U#ln1g;=J]X,ٕ/ endstream endobj 46 0 obj 3652 endobj 47 0 obj << /Type /Page /Parent 525 0 R /Resources << /ColorSpace << /CS2 535 0 R /CS3 533 0 R >> /ExtGState << /GS2 547 0 R /GS3 546 0 R >> /Font << /TT2 534 0 R /TT3 79 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 48 0 R /Thumb 500 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 7 >> endobj 48 0 obj << /Filter /FlateDecode /Length 49 0 R >> stream h> E:#Š#~rtl*$yL` p/Fy.x"[ :={1@.>Qiy'XTBE>Lr1ɓ*W k24aS't{F{8 V?- Wj2C^ y"p\.ۙ{43uʤ)c8B*hEo'ثga2,aikyZ鰫b1<k}+='#1|,ϮvڻOXDBnhf$mC~4LΉymd1ѷ1CNjSE4O\$XGjAr;y û/V_jV_ä{$<=v`AnX|Q䛰y72V K9 X?:_I4r+7F-yz('_}! c%YC%ώżoXLS쐘 ;Ɇ~;hH0k+m};Nb7Ǧ+L0Kh<2dk /59-,O,ȉ!yj V"98+M/3)g7P*>B'e(|zK@&): eo endstream endobj 49 0 obj 717 endobj 50 0 obj << /Type /Page /Parent 525 0 R /Resources << /ColorSpace << /CS2 535 0 R /CS3 533 0 R >> /ExtGState << /GS2 547 0 R /GS3 546 0 R >> /Font << /TT2 534 0 R /TT3 79 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 51 0 R /Thumb 502 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 8 >> endobj 51 0 obj << /Filter /FlateDecode /Length 52 0 R >> stream ͦWvM*LaiDɎ[(3"#)3a|5t LI,^vVyI1`#Nq .BXG;"qؓB*5FNt4}tc[-"=r9e/3njȦ8%}dԖ>Wr!MQGHm0L+VA3y(}J>Y͖ihYp7xy'4O&xm44%) ƒZZCAFY~v7qk_;URDF~(I^"t$ nr9QVtE]cl5"R^|!TfM-msϕů5XvS螲u)vPRi_(~sZ&ִ tB85PLDB\_Ii&>k6'(@8o_!ZhO#D] `ڦMZ]D[^&/*N])6&e5͟Yw 9zUؘ|>#f:e04p J4A|`P5H|M ( vϐ87pvN$BNӱSR~?/%q @Ӳ]'D~<uLp[Y&Z] `K6 jcư)AּIZ{sd- 8e*S>^ЗTeOX4oYJRVEY4Ix ݋ıg =8e@}zhtm_z#$f\ft6~izobw!X 9(! ,_0EmuBIYLWUĔvx^\s`ԋ ~lfK,gXw2'HЂb5;5O][VUvNrƞ[]␶֛@gC[X8t.Q #lo〼`IX1Ue: 2$XeQ,_ ViLrV%W}ӭ+?RxRYY.sEp> /ExtGState << /GS2 547 0 R /GS3 546 0 R >> /Font << /TT2 534 0 R /TT3 79 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 54 0 R /Thumb 504 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 9 >> endobj 54 0 obj << /Filter /FlateDecode /Length 55 0 R >> stream YW)Zj)0~yJ XОq*6}ZqcD~^:\KG.o%I3IWw܈9Q,h'_E)ݎ=CMt pvGB?EZs$˕cPmLŁȬO3<y!Ys0*'яLg=b_?^eȯWxn-ǰȯ\N8j}AALPyDQ6ksAIH 4h%*OJɠ /6]oìlzgַQr}JNf-/-bg-]㿼Y$7-c ,?bIKs > /ExtGState << /GS2 547 0 R /GS3 546 0 R >> /Font << /TT2 534 0 R /TT3 79 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 57 0 R /Thumb 506 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 10 >> endobj 57 0 obj << /Filter /FlateDecode /Length 58 0 R >> stream @%bvq0'(<<6ZfJ_E\-I8.&DF~'@CBEciK곾.N'>;in8Dh'Qų 8:QF+Ժj4/x abOgIHo@ fgCBݳlg4Ź2a`5"1k @<^Nux|3f24zBO#:ʗΐt7vRQdPjmN7i-@N&8BK fuhp]3Sw׺UE>AcZ $tBHs`4Cgʛ8}WV>y$)P˼Q $|7;R:25JH]q8F2H=$%[Cj^9"34Ӱ;`9*@tby7UqFkswliMw֘,ojS :lCo\<=7FMa+=lnBTwx~vxQxMBt(.(vuf^M5ʈS'( t$WT,.=Y*>G}M' #+7##]Xs#qAK7܌z߯jS|pP|_Z.dQwrG;L%LTρYWuV}H֘o ]ܫTV~>i(ilbrbT28n\yvt@wnUkQ 'm!n&ֹA+aڦ<3([Xa!^Yzo_+\kS ں €Fh G&Jh|rGB`[tEU/I gLkq| ;̝*٧6ijO؉6*BS52=K-KXr|=vh7TwZ3umR|qc=_m!$OQFBqv=P47|Hֈ=-c8H +"6poyʳugYyƟ~ rg]M#FG^v9[DI+ 9u9w)®*oT730<> /ExtGState << /GS2 547 0 R /GS3 546 0 R >> /Font << /TT2 534 0 R /TT3 80 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 61 0 R /Thumb 508 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 11 /Annots 60 0 R >> endobj 60 0 obj [ 91 0 R ] endobj 61 0 obj << /Filter /FlateDecode /Length 62 0 R >> stream 4 B.D۳^6>-3F{~eUu$־M* 5'ya"U̔L+}E :&~nYy*˃5'0J ,X܂WufK? g*;l Ycc,OSl\~S=t'q喲EM(2/ ETઘٳ6A69=HA"78=HkT (5xO_0 ZR۱Im[Œi_&ps FTi[+bB&|αxזcNMnf !(7Iڪ!q^ a,ͥ.j $ R/VUȑWǃHԿ02Є6 TM$#d.@N(|=wճ'2u!,<:㪒# $9V=xn[ʆ3 aJ 'p -x C{0bTk]p8MVFтQaI.q9 ʇH4b'(oX ès <͜R"]lcOɔ_np z!w_WzXJyACdJ}gjt=ʣZakQB;5S.'$Uܡ-Iy.}1 {U~6 ʁe,9FF_m@\YGN %B]{f>f2VAw`>UO7d,R:k"5Iklg S h ^(>t6/1zgD &*U`aJ{}Ys>"54l<@g޿Yj endstream endobj 62 0 obj 873 endobj 63 0 obj << /Type /Page /Parent 527 0 R /Resources << /ColorSpace << /CS2 535 0 R /CS3 533 0 R >> /ExtGState << /GS2 547 0 R /GS3 546 0 R >> /Font << /TT2 534 0 R /TT3 80 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 65 0 R /Thumb 510 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 13 /Annots 64 0 R >> endobj 64 0 obj [ 93 0 R 95 0 R ] endobj 65 0 obj << /Filter /FlateDecode /Length 66 0 R >> stream ݍ4nRꔺpITLM8byB IM6zS SxR:\|NGtr`jBY݌kuf1D!.LUe:bۍzK*c\7R-eCdh 細=Wvy 62jRBQb'H>SPc*,l*YS7+J"/ WC&IΆ'LZ3vJs)Bk)gQ7nf9d~&vYeBr)^>.ydhۏ'^Co1}O[u vz%<1C+*K iBpapt$ذӢ7$HP~[O^A86Zy}1IğXdU zJGVK"\?6] ﻈ ;x-v"4%dGrmdҽfz؏ >vNgfکxJiISYg4@9 FQ^W[<Ltg1?!0\#acK_K{ʔ:h'I'tR;~b` T ?7dDb\eoqy)D PBJLe#uNbm`%2&^I1Dv~j9g֪$Cz/7.f8L`:R[ψh#Ԅ(% ${1`1?5kC*Dva3 &|bl @K?} PT@ɤ%AJ #[Mw;]U0tDnu|_V6#Ё {;~0vcXr+<^&4Pl 8Pm221jB}5Q$W$c-d-j-rog$IkKШ٨] Fj)6f}j]%"@bezv#@:֎?/)GT |\Ql~9:IM1{-Qo={`e0752`0R&g(lF`+ldUݜ]q1zl gfI|7ہ֫d9S`㖙q Sp8~w.OOczHq5[f*Q%2q](2lo .<:qCv`ee(^ã<;\ry̿j;gbh ,/Su$՛AAH| 4"t,&ԅatN No<ݤkw9L#7?Лk/u{&v4BASXn"7[t?& O:*)Zi y#x&Q9!!_P;Y[] Wt}#I'm\f /wc\m77aW)FV>r?. L2_qUrcт@x/t34{ay y%%}DTTcUxjmKLt=t3ya矪u:$x( b4;\k3LkaDEj7emrr@L7TR E[P]G {'&GtVCupU{D;=~C2ak> /ExtGState << /GS2 547 0 R /GS3 546 0 R >> /Font << /TT3 534 0 R /TT4 539 0 R /TT5 80 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 69 0 R /Thumb 512 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 16 /Annots 68 0 R >> endobj 68 0 obj [ 97 0 R ] endobj 69 0 obj << /Filter /FlateDecode /Length 70 0 R >> stream SSgS߬dg0j@HXzNOu-E&q8s hYPźN+ckK FCb}x3uV|u<@y@׶\_}LHjP$њ KMV8 V}͝q80e q^}Ʒ E6WQu $r q]@k5bpRRyyكGw\1:iիjj%ŃRi֗IlPP+̴hjt7%liϤ.̅):`| ݯ; Fl"U;p &]aꬼ L c ~Fa )K)arj~.|u *428zjdLG<.9Z)%t쎞pٱWϹ !qh*v߿<0+:}gGvPx(lϙ?:Io؅o76jMY vnd5y) ZdҮKnmNQrtb2J*f3ƿY8D? {kaE?397vC: -Z'zD?j~`͉6pJ;iɴ ?JLO?BhW|@!Q4GB:'OHߍև,c諰9Orޱjܲۜ!hE = $NvX f3դxb?86p{_#]Jw`0H_-߳vf +a۪|~hWEV~SPMejX{$`>"327o_ )%+7u"mj983ḃT`xȩKI۶Ǖj.ѰmdQ?mn)Bj۷$(8ڐH]7t̀]Ө|}/(yRMI%3ݱT}o:M0vpmHc{t[BAcd8@4e0KhZ`CD+8jBwCA<yb* +𾧺 4"MDq#N*LF8YoN(гά΢^Ӑm  걦\K h <f﫠Nf%MZY҄h8%aCh؇ϙd%Jמf` Ho8֍Q!S3%f0&[L3(kmZ-"*=agAqwڠ9V~n} +d5*Lv,%D{;YWʭ(n+甽{0WZ]I=F ZyԔ B!Ɩ1x|C,U 6 >"+ʚ;FqHm 3ceȚwr<@gN,s|JF6^/e](a"5!)DI@|h{u=v8ڢiNa*(n@kyO`5V0gxǙtYpvL Bnj`8!$2U ST hػ)%pD Ԯc Tp v庬]f<Kbt̽d?D HjaΥX`#H[ rsB"#`5DaA܅k-s]=\'V cra>Mc,k*>MåJ*Kvy=xgկ}`v)Uہ? 2JYυP@b=Yq޸5'b| ?'O= Mhv{B91wQQ9Fڼ3&!RٳDQ(A+Hz- RR3a"DI `O?Ŷ_eB{z}a'ÅjŹ'=z-3Vc% mowiTg2%) eC<*{eROND#9-hxCR ;>F>hӨ#ҋ;4mB~@RF3xl|S\?Gji|thzҲGmRE4"twg7kRR. FA4>)eNiDNKGgdf=i`$>8M98MlT5=з %Ҏ'P0ۡnШl$$sa!XØ"Z`EG DZqsz|j,E P؛d67?p$ތ%5DB3hW+^ca.Pӓv(Ū=߯׾?Kzk [NGSX n8$6 80]@ =a G>AH6a4>7d-fW4Rh7j[8sJ/>Jv!bOЮBvkFM p<ׅ S+ǚΏqQ^G('S[3٤pactfb >Cc2&PQîR پH]zo-,TQ*:?C"fEr|oЇ^o\Yuzt[ayJ/oYבnkMiLoUlvvj .=ۄ k/ 1OIy>U#8oFAC bQ,kzRE$W݅w-qlď hLxe*?sI/71 Z9g Zp4Y<.Sez8X 4c5n3n |cLԉ]@m #kI$N.YҐ{8 NjK"ۺҖ& o Ѣ'`HNJ!;->Hw_+o)cc.MZ0WkX0U[daFoX4?]slo` ǃxps.BTT4 {ysd-/_Q %Wy] }tEXÎ7drxtӠ`c(,,<󨋎l ÈO{έC5`Az6-}!g{ 9QƎd;KK<~O=r:Ht}9Bt"oD(W=",\s{&KAvnZ]Nb| \{h#3LTAv՜E=lA兔O =5JO't "h9 5ߦ85e1ՄǽEK:?hrFykbٵ&P՜F{Xj9awo՜ixIapS}f.&=i?.ȇqz^i\~L45;.!tUoz3c@ڷIR`ߑ#{Fa5lY8wq`Zx8Y%ဋZ+RLr8V4F]0:RѮu++b}%uތ ^X%ovY摌@xX\2h|SϰgRk~B @y-_a2ݟ$ńIa Ҡz"Bni"P{ɞ*0Df/jNt-&v2ilEɽ:qeۇo;څƊHvM&ӳ&U7a^V}_ Bj$T())T!2 | ,+ *&` eGCt>E"Ԍ3b6"д"Snc@^7$epԅplVپ KR qM]&n/iΗp!)+.٘<,F8hB̨=}?-Q7vkeƫoӉ}E%bщ&q?.CĀՁI}BQm35?A вM8ZT4S> /ExtGState << /GS2 547 0 R /GS3 546 0 R >> /Font << /TT2 534 0 R /TT3 539 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 72 0 R /Thumb 514 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 18 >> endobj 72 0 obj << /Filter /FlateDecode /Length 73 0 R >> stream }Ho6($rEr -DO\U&ÛYcH//t[nxgJ=@B;ܦɑoAF^^Qx;Q*w9#nY{?jUJ%)m}bXaF璊% _ŋ,7&c=C_y&6}hEq610p#(6vu’3oPJ:xgf.}[ V5uOO@3juBCyEf/pU@$gTrO_ glR0j/W![>׫kn*.htq1Rj[!{e!-eĦ&=KF+:v@s߀ff^+MG R"\"Y< j/v >1_)\3jwt-zjwv)G ;,+$C}R5;؈.sSJ7pj߆ KGT1]nY[n֧pbC T(u'r G9Ͼ-6\,Nt-z%PC"%: أ]I)&wSdpl@V& !k1#llv-SR-2; 67.EL~zBnp{&OHcNg@!'NMgo\D5Mn +6Hn6Mh.EDe|/\@νh$ԋy W7d6erDuKi/ݩܶ2/) ޠ+t{T.!3,un(^!Zө7 JϒcN9QDC8qpYqK, P3gb]>8k|pϴ6D14VY-FT̒E>5vԪ$wmC,@"1^De$J'pfL>h@nPG{lJAu[l՞.<1l'4|ǩt*X%d{~$#X-N  /GyLdR}E=tۺ^uj«H|Ϩ}sS9xXz4q>hY\n[6yBnpnNs ա4, LZy4Rk_wFU'ӅY,C$O1| ջ_ ]ɀ5rv8uɃ=c-5EG8~0_4 9|8ѩyN8UݠJ{NV{nY zŰҚYۮUeɝLộޱ8q΀9%@V!ؼy@frj/=F9hĐr;u59jXN>CY9ڦWӗI~ QFPӎ80g}d$o'.!-Ƹ ]񛓇KCƺ,J=ԲƏ ӼՖy:ܦ0eQ2!ζnBVd&>j+I k2T5a%pnqc:2sB֒qin!tQ\bs~yLPw;vc Cgs1T@{tg{ jA\u9ޖZ*:$ЩS\G /f_Wl]pȂ&{C9:[̋Amnͭ%McAh>7Vѵ%x S~](/ɢ:RڳycTD&!5*YmNZ6V{;f%[D$&G tF j7!=A.={>.e2[ ȣTxJR$LcH]puhiG=uzc,_rN;_ÝN\G ^^ѩN^H$)\}}Rʦ1϶ ׭ꥭӗ CJ$* i >kjPGۻ[XS}FߢȦ_> hIZv 3_uKQq'U+NiK8xiU !7RWBGtkNY?s>|;Džziu9ÑpFk  h#ߩ . va r1l2(p35My(Gr]0e~F)Oǭ|vnSݽ|K嚬p~ռ68 6T80:uܻ7!_ւ[\TC<>_ygQ؇-9OǣvlHk"pl$"ʎDGnhl(}ML Ӏ\V-f*ކV g'>Mau_3`ϟbif׍"|V=:Oާ?s^CHx""EtD5_m3qq*[q̲pZٮG ]F9fMk_a,I7O; yCW&ơrWc_}NFOOw qc>CMJSY5V=kG$\k꾢p$^! *QSsln;7ĥLR4ժbvJJ_[݀jrK:-uͥ.!:wᏍ`SODM\|3݈PdUo}a27ܽ1ݓJ" )گιCyrj^&+V6YE}n6-k[ZZ9RIw gf xh:]nƎ$0 E!_Be 쩕e_e 639\^CTr Bگ&֌ޛ$ z,vG|<Mg)3uz=ג\y9C}Ýuɖ$kC5paPVPzoKJjw" <]3ǁ^GY>kTw\QF;_.t.+|q9H+4td>lapcJ.@`8%u@VFÝ(QBݪ5H ,T;,fqp&?R8K07ͨS:ܯCu ˾aJ|z7e#tn;7n`JP>[rB@İcN7=ٔO,%뫆2P\t[, <$?{'4YWǞ'Lꕙ(E b>(wAtc(ڱ(ńz .ӎ$5f>Xv~շsr𖲥VO_%(TP4S%,2sJ/.ԅdt.k9x'O7sAu?z:j. vksTu6 pO%\Q2"B9ԯ;tCQ`8\&YLQjE.wk endstream endobj 73 0 obj 4292 endobj 74 0 obj << /Type /Page /Parent 527 0 R /Resources << /ColorSpace << /CS0 535 0 R /CS1 533 0 R >> /ExtGState << /GS0 547 0 R /GS1 546 0 R >> /Font << /TT0 534 0 R /TT1 539 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 75 0 R /Thumb 516 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 19 >> endobj 75 0 obj << /Filter /FlateDecode /Length 76 0 R >> stream bc`¡ڢ9䘟,!|/.n$/~izӺt4Yi%6[Ec/p02̿'j "/LBbGȣ; YrEWg,?6=4 }if%IkA>z_9Ufl,s[14ͱ9]T%O(Ë~eZXΫE%(IYا?!tFM \UA~8b_t\6 LMG]g|qeo5C&Y7 gҾq-opciT0lI#2`c_*`%SbvtFX$Q ERON./q G!]o5[$ggoz|WJj/sDu5ZB":[QLu;]_ps5!W8X+Pwg$;ɻpF'J[ݓ9WlrQ!AX`|H;B /s"x&qMe$( j Gy4V"d<Aff[tyXgLoI*lF-i]#1!sV1L媘dִ{a}#P3NQظرxZa#;<ܷTnd׷P8( F .p\Рe9"E̸j^~W iUůG#jVoWR1a65O؉k'l ˨?ihP?k+O89*;RR.VOKW2vN^Ӛx!RWgfi>§*K35\A j!v V"3*(.W <@^4t> endobj 78 0 obj << /Type /Font /Subtype /TrueType /FirstChar 32 /LastChar 32 /Widths [ 250 ] /Encoding /WinAnsiEncoding /BaseFont /MIKJFM+TimesNewRoman /FontDescriptor 83 0 R >> endobj 79 0 obj << /Type /Font /Subtype /TrueType /FirstChar 32 /LastChar 122 /Widths [ 600 600 600 600 0 0 0 0 600 600 600 600 600 600 600 600 600 600 600 600 0 0 0 600 0 600 600 600 600 600 600 0 0 600 0 600 600 600 600 0 0 600 0 0 0 600 0 600 600 0 600 600 600 600 0 600 0 0 0 600 600 600 0 600 0 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 ] /Encoding /WinAnsiEncoding /BaseFont /MIKJIN+CourierNew /FontDescriptor 85 0 R >> endobj 80 0 obj << /Type /Font /Subtype /TrueType /FirstChar 32 /LastChar 121 /Widths [ 274 0 0 0 0 0 0 0 0 0 0 0 274 326 274 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1000 593 0 641 0 0 0 720 0 0 0 0 440 0 0 0 521 0 0 479 491 0 0 0 0 0 0 0 0 0 0 0 0 470 560 458 560 486 280 468 560 245 0 0 248 877 560 558 560 0 331 387 317 560 0 743 450 444 ] /Encoding /WinAnsiEncoding /BaseFont /MIKKAM+ZapfHumanist601BT-DemiItalic /FontDescriptor 87 0 R >> endobj 81 0 obj << /Type /FontDescriptor /Ascent 1005 /CapHeight 0 /Descent -219 /Flags 4 /FontBBox [ 0 -220 1113 1005 ] /FontName /MIKJDL+SymbolMT /ItalicAngle 0 /StemV 0 /FontFile2 82 0 R >> endobj 82 0 obj << /Filter /FlateDecode /Length 6856 /Length1 10572 >> stream Mti#~zbaĽ}Z Ht3s"ֱ߈u4RQsx;tL=qbG(:`,%LA-s7n`jިR nUT<<#:;-Y~F)?yܵE7jJZ^:+ɞDG8SK=2oR8x eZGq6cnq Uxh ،Fؐ?9L?Oϲ`ҩ;(*J뺶 E:#:U9hPT k鬗5+"<G@O" Q;xPMЊ{*(@ qlBlf [_f}?ؕ@7)7d{baڑDΠ|te_\q }ώf6tlt =<؜LF0c^][]C6o<0Y vn\i[!|hJY :qiCV`6ث*p5=^&TF>5JTt70}UAFZAĊa;-:f|#?IݐXJ-!՚蹜8 4TP[ в_ ͱ"w`V"f{4( &F~`aՃaZgBxt-Mt{3nZFSL!·(/D!{}*(_ōC[ɜԚM?gnp9V5Dq3 Ÿs._ߤ;Sm?q#!^>eYNBvDI|22)g^3A[Ut @"'MrWS4"$m0 r 9pގCᯧ$9O[ϧG_&SܤE9Cv(^J݈`ƃцt~/`o˝N-'dyn^ixةF(K #!uఘF9trՑ7kHJTԼS<5VN#&G`oP uq9̛Tf"txul!MmeFa<m_k4B/Miv}4s܋%f(%{?X0Z.48is.GzsR%6U阨xC2"l0PRvjOzt':WM._̱?ѯAY*߳Ⱛ"Z7ң@>=%OH#H҉GK%rSPH-C!:05^ÞsQvԞNbu[ z6u)́_MeL. --}sb(0{e=y&ȝ++t. 8y?ZygaRAɽ.KZǚQD\#h `ɲxv7X-I4')o-ӁTG8d 7P𾒧i2Q8Y'C:='@3lĒg n?HbAb%0As Z';<X,m 8gPX}NBwOrpP3i<L*ӐSso񺋝qZ鿵IST*r92j ^¡r ˢ3׍ L:rQ('7uAc_}WS+v+X97Re|A﷜)ǻ%8?[=ێ}0zYnZZZg 8ri*Ё*H>U+~F@[A,O1mTh7;iCY ,?]E|&p:1Vp@^w6˅ʣYgx̬]/ ߢ>MEP*B#vnqBȇPW~-]aY XGFe LUeݭ />a&Պy9p]'pG70~$ĨֽAS.꒥Dl9Ŋtt%,^/h[ %)AՋi7 MCQU""FY5:<g2ۋd&<ſ[V )[(A]a [tAjJ -woY_獧 ^WJUsݎ+LM,< =Orm3-a';2ohH)mNb㣐0,3=}OUL59yM<(\%.{S;y$OB_F5~N2n JfDp镔V_wc8<ͱ61RvXhI.D)YV݈1]nτay϶R:bENQՑ$Ti<3;L|7-o+ x-ObuxiK6'(9QJJ4- ?KܠXKVGv9q@s-`崨Fb=׊"K'\7v1?˜h, ivRcK(Xδjb@\$|V/1Z0g) _Xƹf~^~R=FM3=1k. WR-rͼ5]%@'jӂϼb,ψBdz=!n 3aֿ`[ 7j͔j/vPN]/鰈 ]LGf0p^SCoAH)En>ՈW/uH%=0>Aoh YVen2H`"bO;?f,=/J:~StETc'7]'}m6ːБlefWtP{d+>퀠0h']Aj&ŅձR"C`Ӌ@kS  =aҋvg. ,e @w00ώש2ybuUE{}@nJa:uU#%ܘo?뫄!L;nJS1p#}0@ZEm&笽KE68D-8!y`cDxv o,Ig "jxN0X`3mII!Q<4: Ĕ>aPi[5@̍A2>=.J<$aStqvܝ78=^ԤH#200 ]bƨ0IOL10UΪ Hf+ dxd eFǹ͛imk"xI{4Gs]lJ^nVARI[ j6ѰcwzTe? 9&*٦פ+\?zmygs#ůYh\]33Ѽ;|O"{0% (jJ8 |.ux-ˊ8)rJ7(/J{itQc0D&sJgWLwii 6*(^DZq+苞DVI XF΀t +E2tϑ\RXj#G>Hg!Z{)ccm8)zƠzfS-3mlAL =ȉJ=7,~J7\YWrH"LWe":QmvP?"Hru'slK!Zy"f :k ]:r8f 匟cryh$mwDG2%8 ( |hް:7tm?B\gѲc\rɌc]- &yX#W9t 7b9ht79%ɵe {&k#يvOTJ'D7tq 2VoqElC l'3yplʐaV8-Ix'hKG;he6w?tY oo`T Z 7MVyc}B5a s} \%Ҧ:Ъ2<3JUsP#qFeC lM,"|*OwjHcpC+X0 ?@;J0 ;,n]~?r&useob09a̟/ 7be7!Uafhеb z2\c{?Ǝ<6P Wpv(`%^z‰0*\Re!Zd?zQ=wU`aj~֑Q$1f1PAŏ֒r Uؒ~W) qH2g}$ED3%^ /ːLP=9j[o/o]fcgwJ_ZU)JD9N-Ɣ2f,D\[?8'<颥o)a/nfK1;'̪Qd&TJq*sm$,xa:^(J%dd,ɡV g q)|7uT]f(wz/c]S$A; {ifDS8BW2Q\ !r. k")U,3 &1gO"m6Q pIȌ%45b !z Rn_r/a:Dъ=ּ[g/\azcz$, 1VYA6=F4_rቶ;ddAaԒT#sm/3 !+ţʊ:ЈXڜP6zO,J~D Vlw6q\ܓ2DNyEȁ. LU8i91/)GIP"bK@pQwNx'S+F ~7i}k1-|P:-:4OL0ZR[u9R >( T6ks=ލ"؄1RW:@ȂH"x?QGaweͷ s (s<~)pr9Y-{HK ĝ*M^lm +&NYqij8$j!!a%hp 4ĦL/]A8X[H P]ZZVS;A$Npqv> X @X&* hG3SIQ=%5Q4-q.ͨٝ3,}*d#7HeRf9@'Mr.ND<{8vWLިJ}v M<ˬ| `뻣ŠD8n*eeڧtkdPlmхٺj rc!坄B,."P6F?> nr۷b4 7?f&;&ȱqு1u:#TY'8D* .8ʲ:cn|tQXVa˼ur,F_=x&Nd,5U /R/-%C dcS傠k endstream endobj 83 0 obj << /Type /FontDescriptor /Ascent 891 /CapHeight 0 /Descent -216 /Flags 34 /FontBBox [ -568 -307 2000 1007 ] /FontName /MIKJFM+TimesNewRoman /ItalicAngle 0 /StemV 0 /FontFile2 84 0 R >> endobj 84 0 obj << /Filter /FlateDecode /Length 8102 /Length1 22064 >> stream b[ﵮ"}P1wT?ϹS q3&<1=Yi[zOX#ޑ?-yn OIVzF8h||#&lڎ!mar%r@f6o-bЇ2 gD(M3]Uk v#/=_DhE"l{Lq7g6#@jWگph~(O,BR?ŜudÅLH+(&aL`-| 2c)8BP_9Ƀ{/f, `$ʂ[EHvURus;GC j/]0ƀ+߽3i8.uz"y.{ 1>T}erE5/~=]^~QI@♺~_)i8(ol9Vҳr[!0a):cy[@һ:NH nӉP{RҶħH7}?cNu ^h@h_!+ä?hYpwXOVPe3Y{VBA2ߪ[;QCn)Rͻt,H[VݘlbYv[KmܳrVƐH$=ݹg)W1VɵX;XCw{6\E3и=NQ.-c,Ť$'9_ktӧQk,QwHL/88Ӹ"Hvixlqz~> ;|VZ x)M^io@I3+,9lOìdYIxabIh  SA(Xk&$:@ R,;cQ~-NDe ^2R󕰻>rq.du^J\?Wa,t=ޭ|kE 7+e aWx1}?Zy,0"0l3BwOnlc%(.F;H&)b!,B`=@Pm1r)FiPft]#?Ҍ!#J059`D!fJ/PIF h doJFjVW3GIwmr#Cfu]7l?tTU/Ƕ}=S~\ؕ={O|qk`@tAU s+PMrbbܲ V1jj6tYMᢣY']Q 'Jw*ó1;y9Y*l4Rh ؒ}^9zN4穈'h'^*E,Cyy",2K2DRKG% 궹kTt!nWÀa븻Zp :04ǽ (!qP!2$^AʁN Oit9uaNu,Kgr)VcR`"AY\g͈/-*JD+f | (Fd¨<<ΟLo8K :u`͌8Ŀ=k`pS";bB~ghaP d8Q&Ϧ2s%RV7 7Iec-Ԑ0\~LL '?wY&2 =Qwy<)W҆5 &Dt$_j!#F .rI}o=V),] .b5 ʯ}o-'$-g?"5KM$ЌBl@kȥ>om"fFNHNoFyaI~+rnk_& P EwX?{*\+S~A@MMUfLDy+j $F|pa 1v w1vdooߥ&q4ɓٗ&?I"}wD͏ݰ-'l/򭫺Y: D;^G"#2v&Ϟqr0v/~ au{$J" ȟ{K @)0yi:G'Kߣ/(.I$:Y+Dizٳ2qkz0Ϫ.*K9 ^TF̃ Ie'(+{A o}Zf> db-q &2Z p"ښBd s9e5u~XxQdJ F8T@\{F%;9iT Ru K썈Em8l\fVGZNQ7(Jwu&(d\PEsMx~1lW^ոŚ9+qi ;"l*Y0j *|&"qD` V**JBay!m,Zksn8 ) fhΒUnq rUC>7t4Ytj3o=pUH |˫;ƄrG}C p|L3nШUe^)I:]V%n^rWe݊3G{7z3wXIv{G[x 9-Q-[D~M[) f(Kw(TaRXm %%4]2bv1M!on{,HJ9y B@thmwFheo\*đ mU@{* Vq);MHDE$aMuVp6 heZY'$ vh͔zﭨE#i <;p{Y'6\p:'H^ztdRP%^ty#7׹ԥqa!V)M]ܱSܙ-설b@Z]8𒪨5SbG_ 6 6$0Ie2GT#3lEy2ۂXsi?rVGRpD>̐,ܗI$_#4J^mff0q PY䆼Z%F:آhE.ǴՄ>"ɡQ=pg?1P3@zoqWML#+S:;16m{rfC zG P{ƖP[v*w7ŤMyo45Ch Q eRzE]Kzc&1nr;h. L𧌜^ͼkXdFِL&̽lWCKSf=H! QwUrIn=nf| ؘj(LJ1/q u(!NU5Q3VBO9>Idf+8D^€ Ij]q+ţvCz)-d=_{ [AJ~ yqb#Z%s}{m_7@xXO0B3 `P=W}" X5e͕D:q'd|+d=ϐ^ ;,O DB(D1TYT(74<.G+d fyxfW]:MGk9"AݯzJj5: v_ nހjw%<ì6|K{-cȃǾ$N{VaS^RY%X5U_k`W2SbR|h`bSb(E{i$g(jeۡl!GivS؅I3|# tlMi@";OVfASb?=x4K4&Sh,܀w 4bpWLYbvc~.$}v\}pE=@Zխ*`}AC T|{S>Ҧ,THyA?P)] }[Vc`!lMI7흂Sd`9 XScF3<#sK>n< _P ,O(Pxnk @?">x&?uܧnQ C/@QW6G1g_񕙥ϳ*SV n$F`N f-7f?b BTqyoL*첤=BF59 y CAq%^ON$vw]XnWyJJh^3(- yiNu2Ҥn_Wz% .(^Upk3*.dr$oԈ=" /{`̠ $7/WnE9n >V[qe:gΤ,冦OHZ=t+(hi!\b) /Σdo )˫ k9Į~:t0: z2{C~K=)\Y(R)aC&E;Dѡ e2s=s-nЀvd7 (N:#NBѝ|fllKQi:LE$I}wsoFJUU$:I,,F_׷~Q-(XKJ|ƣŸFy$`WꤗM`aӖ?v.syOQbF}vc<ǰ{`pB嗚GU5:&(@8Ϧ[л3/F^j-FyZm*gRtπ*JMI]*.vJC!MSW6u2 UBl-_["1 o*Hs';v䕦|\ O 82_fy^dCAúC/qkEC F 45<"(CU_8y!G$È$Xƨp"BCcl5[U'%t,=t;K wW'bB^|ߛ3.6/l&5~(/B y:'/@"a`/!WZ(ɹIِ<Ƈ4:XS?V_uwn=@de ۧUZUq[8Q?5/=0)ݜ17B i\Rt`lWI0/^MR~>0>w%ݷqpWG>uf@ĂZ8B_eETrZȆ Xgx7[#O D,8PRuE "[Eb_m7 endstream endobj 85 0 obj << /Type /FontDescriptor /Ascent 832 /CapHeight 578 /Descent -300 /Flags 34 /FontBBox [ -21 -680 638 1021 ] /FontName /MIKJIN+CourierNew /ItalicAngle 0 /StemV 42 /XHeight 421 /FontFile2 86 0 R >> endobj 86 0 obj << /Filter /FlateDecode /Length 23877 /Length1 40360 >> stream ^wc6"k;w.4JW tHŒ^o6FrӆOK xwK\ѥ@!S4qE~ݕH)̡Ϡ6#k@! M6[IʺQpJ Lh$BnߍwMLqIWO@q/MEZ1Kun|l2x)\z0"/z@f} i&rD r @hШ' m@7JkaƢyidk*)Nj 9O WrELŽODj@i%RԠ{-EItsԸ9-l񲸜jh(4!&d:>Ԇ |/߫>]Gf1nO*lYRa(;/ѐ, [֥9ҘGcBfFWJN!&kFG)nƣ|sVTo}4V4'5ZJ{!{#&;1dDuvKq`VVFEpi/+l785%بT)ݽ*]8՝Vڿ7+В+:ĔX Iݫ E2ƼJϠDًpf[ g$dOf}):׮cs`(ԽS:t(K)A>h &!e+S), kֺ^zR^!26\ lJL-R0NaJv\luU=ؚ-b*;n gyImCݥ>쌧s@]dNߤ NTmfpXBSEh4a~=ur!8,1{k3&k˷l1BRysl4#^B.ӕI+aݘqt='7#ai6 8rf@ԎI~U]ZqP5FUaErq}œ|"smVBt\(Խ&$ᵗO.[&5ߦ\6azNBs ̅fl)AY,ӈB0t\ӄE7X>j>\ϣSPbva|pK|j!1Mab2.baj!΁Z96` Eič"ֵ>4Jq}ڰHAH{C.ghGtky!"^H_|T@;]RA5F~/ Q[KZt512F?Ri'H hM=^yU;ʵW CNY;xw[0>Mg 5T!»[fT{Gи?&Be-$ N,3Cc_(iU`ѢBNv+cQ]栋+l_LL\5k$r*ZE8kEz>A;aMY8Uml ) 970ux~՞36'N,a8)H5VlxIqaMR0J4X[O^ֱ\/'TgQ2;,ӚH8 #Ebk?6=Vbڐd*bBoW\4idQtq3^.?(Z:gdmWdexMHL{gU ԟ=)IJ7@.L-86?Cs=c2kBm2nwD^< ~cQ]GGJep<ô1CM V_ʞ\;dW I:R}<xeDpm|ZyLΞ r/D/>;|sRbH-n:jA?s3Xl?`C:sQw-P[{ӷH )ƗF~0P kɝUoA- [S3?Zؐ{ uj\ ݛƐ/ ₌% .p|743Vou$RGrzP%7!@Y2G5U*L):V oꝝ-yD!5o87$Ӽڧ$ Ȃ~vwo"ȋ=k$a[{ ^gAs.jATdOHd8+G|jZ9`5ؾ,V~Y#Krp5{:a믳]x'RD[v"Z7QeHs %(ݍ&TTVXrx4GΎ(yxb-17H Psn6VeU^p@Z/Jx(S5)q,T{=DzێőL^3x{ U`I%4˯<\Qq HOT8&|Gn[L^9};!FQNmO:ԓ&_rX 7{3PijOje)TJ] k{"0i1\́{N/? /%5wIb.3LXi>9+nR;YEk~P+oN=c@~GWAnuS|f 'ih"u|Ed z@\NܩJCm*1ާ3" `oj>+pZ/B2,XjwB^\٨v́p)=aWilȁжGEVs 񽁧XH[ݙk{ _;?Vg?s;1z0S&7.wG\6 Պ+MnYU´E}r5,-7wv㹦o,@C 1xmyWsZ~C _&Di&[ONY˔c]ٗHt[<¹]eYVYT7PLYڮxIQWK1d[YGCuD%5.x=`ΉԤ%h0qqK,E]ojxNqC>wr١ sf#+h-<$s@Z{aKX#+Ӯ)0+Ș- 鑠GTj]TW*E\Xʭt2CNfOvTg.-p^cL/P+4Y,?‹f?dΘv:>n:A=cFz,\[(bS&W'ChNZA"F}h.:9[2h|^P=6J :ݑkXh/$[ufE xR(XP<:u$owvz%=P.A|]\[ap_nx DރOyXϷvF~+KĶ`Uu < ٚ5vt3sI`t?~voA?@押|>Ѹ'ཚ.ƝknWCQnv s| 5#d]UvF,q:,ȞI'K]vrvP-c7$TFkS1wը'tp0O2V8PQ҄deygjpC M y8P^=JWmot>Լ$*ӭif|B jHm ?H+>8Y|lqTq31uE۹j#u[T(.*:|d`hag~Ѥ }:Vֆ9GKs>\2+zRBf4WWޚ]v c]2& NnT /Q=B1ۧ;hP8{$kzm0'q|9ZsDR7@MiD:8pFf}pԨ,lE0v1;=,7я ?)YQm94&Nn.CfדV{⯁*'A{[6'KQ2~:"# 9/*⡰?ɬE,ٹQA?j7?>ʆ[ DA*D}v5\1D## TPvhF괩=+h^er۠ʑt| A%"ޗ=.`o%lKon[V& Vg%M/A = |p'$䁑Ngp=> Ut] Dܫ op}'<r7!°$h7 0RgWhH=m TH5*~8MЃ_^bC)b#y^JdmX,9m5̆sda;GHuڰ LbIf{ T MƪkNetzfpcCN02 &Zl'FxN~ˊkI#aL6}l o{82Vʫ8ϦKRDҲU9uu@g(G»3Rk]<`TP.-'Rhu|h=\ laۋq8 HzP\'d&.qMaBvoPV F{+[`sBaj STPu֮Y]T `j3 |h$Zwq(G+&$v4fXdڙ[`\HAս. ­N1K;E D.,iקG=?gU57)^:;jҺlN?[ ٭<՟elmY 1R!JN&X,x A̵h͟Q {f1o#F~6Pz2~5梨OOV'b|=wTswo % 7y^򓓧1EfF5I->ʛ',q'D[QD1rʔvxYNs$_l6LxW<6Q:ϙ*9HH;_A?8/1-Y ! g@>1[ȍF6Bo7?4"R c/^~/k'6:Z*A6kIW*#oVA ^<+M^Xz=O[)\? Bew@th0o;DW3կnHfdal3/dd __hOF^rq8x mٗgV7g~-:BGomWIeImR=kVIQFS L|+)ɘw DW; 6N\8~[Oþm[YL}(/ ~ lBU17JO9"#B27^+U'+q `|mexϩ⪊&%á,(_eB3PYo:x-w!W(7[2ԤҀ8ǛǕL KNrdt.QTc8-/}K z BYҷ!/U 1ۇ/:P4{HYHRYh i60DKN"GM^a,;6Epػ=%X!_Bq4O\:4Z^=npf=!Eu#И^/ GbOx/F6Tkť0,"UN=Аm3-WbD/~X{K8 fY ,Z"G"Š}&zDnqX$Q{/xٙb=q`6epR?a]9nxwOx6aXu!Aq355s D?Ap 5zZw=;0B7*U $ 皿:N`W+8E,f{moJ;eHkZ+ڷYU6ssC "xN9P)4bI Ee2 A,D{H.d!( >IZgƪG0Fħن1q<3mэAwqIoXZuL vBn/9c ģH;u#{u{` Y3 `Q6x~vSҬt>fW\$gi(j˞0'Tr*7|mJ\x=I{}]e+դv[FIKj@yMsK8,orJ('42$zn= Fåtc B/3Q욎VwcbaNFRn4nmQ@Rt%LK b^s>r4;L]Q.&NËuDt4?,vBKͺ$yx6t;.Rq[-yS>l :&+Kŗ1~s}*YMGE݂ 6śA1+L R *Xc ni<\]$6KH[9N Zh2}pdFN+XӖzx٣^=I7$Rjs9_ځ] a=ͯXȴ(XJ|`s|7S9Z@iz/vCb0+SɆ=nkcgqOcNU1њf?J۴-ޅ/F_WB?,Uy5\ uUߔ܊C|Ww9BLFTY)lU~ ۶F5i/AG.eRfӦw4e4rk߹ /IxW:Z+w܌8>R Myҵė/\͐tDev&R'뮇)b#t0%W99ta"Gzn't+ȒxS.!$:Θv"`a?_q8j:q|+Tc UNvdݹyۉ;bxXXBl ^* `5RWh p{y@OJ9Qic/nZ\sɲԢR^ L׆g-\j݌-bӆ׽IǗ tκbKbb u8B ô=")TξF`;u:ܖ7?i%AlR};.pݫ_s M/uq$ R롑VT5^WFj>Pl|"q "8 J\s?B 3Pj0 zd1~=#݌ Sʠ e ȓ fȲr&Sq*,Ma]okWf".m-X.)}"}-R^Z G;X6f^,m= #Ɉ?e1M_r?d4LK]CsͣpYl˼+/$;S"&GhU9 V3@'ix9q|1?eFIY_ _"Y LS!9[AʸR|ψM(Hbm>'+3B*9maisՠ^Hԧ4#}ױSud''m2p޼EÊrkN; {a3Tɭ-tVH5rz^N^|io ȶMb,=1Q%)G fQjFlZ߁! Wۉ49|:؞!]+ ]VKt1|<e{OVہ2!p9VltlLr-#~+.Ϭ]$5=j+0ƽry|//lz>@D$Ef䒞qXoL8I\x!x5&UGNF%gC(t6@&uu31);%iAdn/(@zzTL&yYl#,U]& Psg0:)Ϡt{g Iάᄪ2Rn`V !|齻-Ȋ41Γ;g/FxO4G\Ţ%{V<"33T EJfċ޼RNkQ I[m~ܢjQ W^-g a>۹QoWfE JR~ Jʨ:#Y?P1 V7:Z2*4iL6݉}w 6!n?k >`G\~"N-Y`z˖ $UAPd*J(R"akDH%`I4WИbû"h*gLpsqW[$ufa_AtcQr;zJo֐_A^AAfO20JM"Ҹl\_bfZ&Ōp:X? +tXv89i(vy#$X] kI!7`2n)->Gn[vyKsSYKS1@wmc D :R5M'ɟl`]"D07YQbӛh~_K ʨ iېQzw:=L9W t DmWͳ$_/>sKZ6_<ș *NNXj[`s(/1,"&u\A!ٸ k5C!|O 퍭WL<@tʫ\f@0 $%V.=Ct3A͐܂a!:Ļ ̾ i(e'.m`,HXDA& I-+pt> Ŷ]~nݽg``p.`66U|qd`Qvw2&c]QƊN]ڐyG'y!־ZG6 D۷DV y)d x-Ke"qGQp@'M>:o?W[ 0_|q槬JZe8l!Ϝ=&OO~.֊,ns/gT@FJ^?2Nd^y \h| q>*X 2$A;ļ0#K&V¥LP=-sF{V2=ؗvI >Ft-ޙDLF06T Vg:%,Ȝȴs>V^fƼT$ԸR;o󪢎4"0HyYPD5n܋DѹK)d) ۮPfnV h%cv¤u,~53sRD~Q~>`"oaކ d<( %2S]Q 5NBE c[G+٥@zORfCgFDF ;ܣU|Z?ma8^Rl q8U FФ%S w%L[JRSQ,6|ڤ@v%y#mP |J 1byFa(Q>v.S}B1[:B Fո2f6ӗGD]U(e2XpP0>ߚi?[6dqW~ygbjh~Ҳd&UOG|LP2{w q4̷c%cJ6Du+axDF. RB|܅s}֮uwp\C{S})> 0Ǚ ɣ̇D XPZg^c"I!-[{U1F[nvJ8 aFs4iT MY;R6JPk/^Q/~wq'n t(!_iEDAOi螆YaƷl@q$i C >h]ڞ7\l `48꼻Շݮ 1ԢRCGs`}VSh<$@^:<uO+2'Mm 3_7| & 3XՐ/ v ilgB`obA@iTC'H2bBNw6_u65RhtYT5GIx%Dؖԏ*b~074pJ=q}8 TRCg49,0r|W eYA?$SN?2>{S3/oܸSa^Z/VfD6;su)}1jgG^a@sԷ( ԩ157:[=3qpu \;Rjͫ0Jq ew3<ݖГ(LlnQ N6j.ɿY#q:̖Vuy|1?s?*q֧ܝ-&u Xq~FaӦE<-A(^#tzIw`+*%,%p&(w`WzV3q70:ryVwػߎ(S; ԋQSLAsfw eq'wj+.|f QhePK(];/ryj *j1M &os$f騞|"d:_8i%!Luk:,;>W88?Z<=7Gnp뽉 ,ϔ >eOcM*B.i tZl4s9l ņT Rͯv 'EZ6-$ ][rdQ:R2]ҙ6B65ĩS hi_B*˿o ݕ7NR5R'=OP~.₧yZʊ 6R%X1,eQ9{)fC3B:F4]ueQ]]X:ϭ{ϔ1.ٖq}Fr(Zi 9̿M.AFb ؗSEn Q*N5dvOi$$DLi^sʧ*' 3ߋ? Ҭe]*sCۂyN fx^OZag+ Ws-x*trt&26mڳc2"-c'!ke't)ocxu1:#B`L 8%1~qCh2z([ĒK]ĕ\@aWc:GcͪB3-AD-iDi=h1hcj],匛ǑQ|Kg]s4\`ev4E{kL*Yv!>h954}_[7:3;oo'+BZ Hje 0%S|j)6`4P''YiS |dwNm ̎3n/>' H#= :3$ g[r[\yG>=Jx=Ѥ4Iw>P7R*pEkiZ zMN'tK v J.ѭKwV5E>Zqթ<,+*P]ߜJ,0bŬg]6`@ 9'﷐h/cvtD.؃3 (d{?F8.%8O6I|3UQiaQ(ç7 ) *;rP#fAT~^ $ܽa>CFy|3/fGxs+>H? /m,uE{/E6nr wdЧµaUJel/̤Aq@ܷ v@}Bl<+O֢FӞ)YGd|&bX3CO psro%// ϑVS Q>Q;0cGoqaQT[{lmTK"8S` jY큥9-eGwok4?  .ԺIF\nH;E>0FӹOƊjNfw jFMN+-N1qk"7AWTZ5oZcU8nA;09ЩJWT}-_`ϬCsҥŘ}KGzD6h(sƮa?ja3X%*MDY$(A21t:)'#C*-D\;)p9QZFtԠW@s^nuqQ-GQmVisMD2mct f/` Vˈ#2ij`u1l]:& Բv~437 =vmfѹK1nѹaze%e= /j}.Sj6ʞ#4!jH/k׵q*d+SnuU$M*}F=$uP:0+AIprkU`|pnɴ7Xi ١P1a߷ m_Ggqdsj?4Ed)D휈gߵ*rb\ڼUf<8΅fDgLSFaOn돹KiU{ O `@ne"Voܳ,Yў-+8pt(ѥ jM4/{̎>h^p|ǎ-20խ͡~79LijӹUC:$=H q`DKe&{|s#SYt:y+m62!DDjH+= }n ZѮ3Uz{KmF !u(ḾA(/W{&Ľ0@H7)+N]KI,Yȏ0 @B6WNk{tʵe>.zxmڗ}jH9,A r-)4Zs LoVֆ0?v&%BbkÏ+nwDgagW2fHҧnW-yi=ϡXV.~`y79Uo\&sg?8==X29> ]%EaZ❹AtQonyrv 5tz2KR)w! v:J絈/Zqo3?w6jUZ1SafS2y )8Iw,,Mr;WAm*InϷ)DX9.-R[L|9ęК= qN-|&ol]UW0OqXmdF34-r[&h5GI\9T)9tYsH)E3RcjG\}7?*!t 3DB @)ك6i .U!S@j*3Ghn`iz ,Oո-0&UV#7j.5XW1NA\SN0r!t~:2{ 0?}lo֟ѴgPw]3$7lဩ e{>Q4ñYvn?by~%8:v`wrmDP a _s>mxgR"( Q6.L],ew#HD۸g*w_:t@ OF9tnKڱo8(JQKJg̪_%H%fp{"hXـIxDW`pV.{:m; V>OƉVxh %,4 dPCjUK.9@!IaT29A=QAwʸc;TtmHji8höͭulMqIgE@Ke?2|0 .}Y=p,!.VV?h5{$m٠Ad`3 22/`_p魕hK@~ 㖉V!3F_[ZgƫO> Dηsa*̔m}Z PR)uSJ\V>UchvYVqEf[놙R`g:7Uqli^݃wfn_Զ! kXTLQx$v~H ő qm%l~JYQ \yq?$o̳UH =S?8جCl8;( KSɲqoW}(x,p\)҅%-&+&@zthcەs;;qE?!dsH++s&wIE5)WM`m}J邃4뫪U-]z{jOydYU͘{kF,|:m]P&m+Pܮ43' ی+ _ qVYXuXۜX"7 +sճ3e U>2vO T$y7kc8#y:]D4dCaVZ'%?R<|VNtt+A-'IHo~1.ÒéwZOH.s&g(R$˧M H0'8mA.jGڮz:1Xmz÷o̻= owma3ݹfl<)g[\%w*rG\+~|`7z^>AkRq}ν!iTs~ݷ|3&rȵ$=fKyW@G?Q>rMJb#Z⿗M&[|*mwWBjbOdq*KIx0z[CC0mB):#T-yv;<na?awCɜYm1`fv.@#|7~c ^I2/6%o-X=@5jqwKoP=u]o @bGƌۺʾܷS%͗rC=]h ˛O;`4NJXX$>TBd&QLږKD}tnB)-a;"ULcF7RǛ Z X3U˿s$|!91I E\X?C-l_Wz(/zH4}QEy!$Ѫ>$6"과r;fQJ@/ʯjAD~jMRIn9}>a8~ "_ %*.ިz;}&@^A s"㌖-Fw&%`10svl/gb_au>5'R "o(3KX{RLDXՄ}S{pmhtTFx%"{IGr9 V7o0COpJlA׵C'tiPROU5>\=72_*G[+=2xS* ^ΪL߼Kc|HAҰ cIqwƶ|Z*', p7[ks7IN"Ft_z۽PB8)T;A{Zҏz"`&rD" $Nn7Cmp3C?0aY3V8rbߠvUz:0 ] nVjAaa_1cO;S+UMBR-Ҋ0{vh+#פ~>0՗&~skر'ibh}]2e~Т.0}FEGe]0G=0lo +bxKAEY;V4xf ^/-OLwR7u =h'0))rz"wn u23: /yf>_0/V%'6.n&a/GeިFo #!i9/{s08 :A2^m& ®dA*?)$KbnpԸ+.yzSs +)doBdv810{fJDSb0=8sFOs endstream endobj 87 0 obj << /Type /FontDescriptor /Ascent 962 /CapHeight 687 /Descent -274 /Flags 96 /FontBBox [ -218 -275 1112 963 ] /FontName /MIKKAM+ZapfHumanist601BT-DemiItalic /ItalicAngle -15 /StemV 0 /XHeight 0 /FontFile2 88 0 R >> endobj 88 0 obj << /Filter /FlateDecode /Length 8119 /Length1 12576 >> stream G<;!{dtw\My`IrW|ޜ q2FkQ¯(KrMc3kQd@m~^u8ZGV+`ޣc $ G˖ƶ,՜ Ne >0X(o NDXuKR c AqONpyЎ $,A|m5$兂,yh'tsT;wmQ~wS>3lweSil[:&6U4'vRt 2+}cceot3 z%HJPB9Ǻq)Hz"q@ѫԏh"M7t:-uJl|وxixle{Q1B]2>%O|| !抡8(HOMXԐŚhk·>m'3ǝYiXs=%׌m.|;`3C< %h|PD=-$(H v\/Ea+ݺ#%2Vd0﾿A\pEWy-Pcw5n&'{_vR8l;4^4h2:dyhmT(] ;Dp͙Z(.|hQ%>,Qk{i"~p!xU&#< Gʤ$Y>ItlIa@g<bݲjo d >!F őpbvS 'W5hFY#Y_ Ȭ+<()֔\Fmv& +sq1mvs]!b}͛uHq^!џΣ&"w]rM!0.9B Ƶ|ټA&"&[Q}+CW<{!8{ +6_`4${鬺XLe5{a5r򭝭yOvbk(,07;"bOԱV.PŗB]:S#MBKA'H`ADoWv{,.t|uҺ f+:Xƾ {vls:뽚`XzZ@ݣL8v/Lef13(>4 yI|W_Ց!{`!:o/و&cLoB .o@.eR;XƪUb :^ehvGk8{QT:ܧS8 )Gg" D'Lw H zH0|94H &ZZhRcEb*싓Ώ#&HK&ʝ0tR.EL^3nq/]?mY D9om&mVM̜f 5&Aa$θi`RZG͞D^}W m0W>^?u^swER[)~T~ P#5MK<lk: Io3]ܢi)0ֲJ޾!QoͶvNoL[j>ˀ W:zWR U.A ]w咾y #ȔPw*n9e0-VO%^^o]?O6v4C \j/5,fA<`afw(98zC;?j ʍ<8&~VZ:j )BW/.Yq 'TA*VO;Ss,(#lE7=rW7?dT`Huff¤7&"$.THRrOR罡 vA<ɢLM,%'GYapa!sxINyTeANtRo `y Y'<p**-DJ{qv`g+K$SENFApNHw q쳑:~W/w>QkA Z78jK8?ٳSXΧ<ڭ'N)HBTFWKcwL$%AY*OVbz?J#,|vAYV4 :={ {cfi)KG6o`m q*/xylMj ]v"~#mO $j8n]!G02z1yvaފOӱK2UZ˫TC_cʠR2 )Dc+?&E ~EP0K`w,AE'š^n^g0Pza+2IWLAv@4ߩv-jp1}0v繏!{iduH/.pk6!}RDA-,, HX0>|fvk43h,\[/ }2wxc5X IPN, 'tC0+k ؠ2R$jp)r ta MFO"tIMY<6єR@ m!:Ne(-Q٥J4dFA:j䅒?*`t9U H/(+%Q2穫~j=vP˃c޵=Ioz'fIMz go; `',r< |4)@XW|iWq6XEa*H\%_=;k&%@f!i]A\F yOK-b9fnXoɘc9O^yE-^ Ғ|'@%cUR,1+Vo /Po$PnD2#\綴h}{-ok@Ҏ}{ww67dׂPo(6{+7RxxԔјWX|{t?׌ud :"ۆn7-tpj="Ո ɪl➅`3.a9%*2Ňs3 gZ"q@ K\g>=`V+א/#1 ڼEpń~$1ȧ|s),0 =3ZDKm0gxw4߄*{\ܣ/UEjO=uu"-vj9qs=F&4b7o~Tҽ011S1^+IDͯx~<)2 s\='yh@m>9>`ۘQ n=w.jl}UAwXcRٹe:e ;ԈKPg->wTM/0-<疈(L-6\VJuOL7[` o}IM0 UnPA$lf2-`\JNNE5w%H c }\k;> t8qC{I%8"!fo1F5{o%Q&$r\t?KX97a6#-*|Dzϼ뫿.ؘ[AZǵTnJL@3 Y)/f`8)q'+y8i0N[qi~E)JPYcJR#ErME"ҬeL#RC(\8Fh-G< 0wBQiSiУUN eRf~a^ *yP- yn*82%O-:3'_T$0Nm JWbMs- }F(Jg@|8%^3\q ?;rkZ4!ɆvGAOȤEZSR,t J(Q0?CMbM5h&ݴy ]׼ӄSDwkbZxNjƈlqd\@#g ny*_f&MQAIf] E@N߄4˵Y{liƺ-mjNbkQŞLz.`(r(|Imv(Znlzr1 %4T\vYXukcߣXE^G7aAZǟM)oB_[a.# i6|+!ӥ wUF:zq:Icyr ӿ\V$a6EG(r`l!Iȳֆ)ayڑ]Iq[FGv%! Xj2R /yzD3i ΍v@_J oM8f L(k=646z $6p+q >SXjGہizjR/YJE8ՇڎB6*{WXh걲!ڋ=;Pꔮe.2!+PstB'9zD qK' pcbl-L `\_sȵ{ Bl@jճŹp̷P@=zbe˓]>l!1+~;)xOo;jq#5]-O={p6a w O _1ػ w dN:T٢I#4w3LE^L^[}$ vc3]Ǣ=}ɞb+Œ)6pڐm1/. Ҥ'0漵*]2ۡx/yfd[4Xm(".Y:7U^+}"e)X]~uJC'4k+ hJ.*_Q4\(wX!3 yoC7Ci vkev]:5jdRAdxP !C W5 Yꉒ: |H_q=˽kGE`Ea%gȠC)aո%Ma4%ݞ=n6s&\e~E kă$.*~; [1")eZw-$-WK]v$ 8wR@)Q"g8;[T>'3-M 6y֐@(rECMr JO(zEf )0:=1iG&6<ރq+A!S6# tΆ꒏ d_HMׂ"8RܩP(l ڍ endstream endobj 89 0 obj << /Type /Font /Subtype /CIDFontType2 /BaseFont /MIKJDL+SymbolMT /FontDescriptor 81 0 R /CIDSystemInfo << /Registry ()/Ordering (8)/Supplement 0 >> /DW 1000 /W [ 148 [ 790 ] ] >> endobj 90 0 obj << /Filter /FlateDecode /Length 220 >> stream V#a6ae"j"*d%sI͟n~CAx=/U&OxL)q˱ޏNBHwKSNrG6P@ONZ@P Z#QSKkTd0%I wu^[d7|CPsfT`gt,h"n:Zj5@ endstream endobj 91 0 obj << /Type /Annot /Subtype /Link /Rect [ 170.16 612.80554 306.85999 625.21021 ] /Border [ 0 0 0 ] /H /I /A 92 0 R /StructParent 12 >> endobj 92 0 obj << /S /URI /URI (h",."5UPΞCJg&e+fKNuHw`HD 膯) >> endobj 93 0 obj << /Type /Annot /Subtype /Link /Rect [ 219.12038 625.16516 301.97485 637.56982 ] /Border [ 0 0 0 ] /H /I /A 94 0 R /StructParent 14 >> endobj 94 0 obj << /S /URI /URI (R<]1` _`ȇ;) >> endobj 95 0 obj << /Type /Annot /Subtype /Link /Rect [ 307.49988 588.80518 382.51263 601.20984 ] /Border [ 0 0 0 ] /H /I /A 96 0 R /StructParent 15 >> endobj 96 0 obj << /S /URI /URI (Ue*ఢgj򛡀[) >> endobj 97 0 obj << /Type /Annot /Subtype /Link /Rect [ 335.45996 654.28491 474.55292 666.66956 ] /Border [ 0 0 0 ] /H /I /A 98 0 R /StructParent 17 >> endobj 98 0 obj << /S /URI /URI (}o_q" |@/z1&) >> endobj 99 0 obj << /Count 12 /First 100 0 R /Last 101 0 R >> endobj 100 0 obj << /Title (. Y4) /Dest [ 35 0 R /XYZ 0 686 null ] /Parent 99 0 R /Next 107 0 R /First 110 0 R /Last 111 0 R /Count 2 >> endobj 101 0 obj << /Title (x- R6mic) /Dest [ 63 0 R /XYZ 0 686 null ] /Parent 99 0 R /Prev 102 0 R >> endobj 102 0 obj << /Title (Jrw) /Dest [ 59 0 R /XYZ 0 686 null ] /Parent 99 0 R /Prev 103 0 R /Next 101 0 R >> endobj 103 0 obj << /Title (b\n<1A#) /Dest [ 56 0 R /XYZ 0 686 null ] /Parent 99 0 R /Prev 104 0 R /Next 102 0 R >> endobj 104 0 obj << /Title ( 6/슸Ð+) /Dest [ 53 0 R /XYZ 0 686 null ] /Parent 99 0 R /Prev 105 0 R /Next 103 0 R >> endobj 105 0 obj << /Title (zvrN]A\\9a) /Dest [ 50 0 R /XYZ 0 686 null ] /Parent 99 0 R /Prev 106 0 R /Next 104 0 R >> endobj 106 0 obj << /Title (g "3N$+lH) /Dest [ 47 0 R /XYZ 0 686 null ] /Parent 99 0 R /Prev 107 0 R /Next 105 0 R >> endobj 107 0 obj << /Title (H0,"ֹ|5\(v) /Dest [ 41 0 R /XYZ 0 686 null ] /Parent 99 0 R /Prev 100 0 R /Next 106 0 R /First 108 0 R /Last 109 0 R /Count 2 >> endobj 108 0 obj << /Title (/k\r>aoh) /Dest [ 41 0 R /XYZ 0 597 null ] /Parent 107 0 R /Next 109 0 R >> endobj 109 0 obj << /Title (XB>\(8Q?q7PѲR) /Dest [ 41 0 R /XYZ 0 366 null ] /Parent 107 0 R /Prev 108 0 R >> endobj 110 0 obj << /Title (yƨtsYs0E1TPA;/) /Dest [ 35 0 R /XYZ 0 585 null ] /Parent 100 0 R /Next 111 0 R >> endobj 111 0 obj << /Title (k\r8n%oa') /Dest [ 35 0 R /XYZ 0 215 null ] /Parent 100 0 R /Prev 110 0 R >> endobj 112 0 obj << /TextBox /Div /Frame /Div /Footnote /Note /Endnote /Note /Shape /Figure /InlineShape /Figure /TOA /TOC /TOAI /TOCI /TOF /TOC /TOFI /TOCI /Superscript /Span /Subscript /Span /Strikeout /Span /Underline /Span /DropCap /Figure /Copyright /P /Standard /P /Inhaltsverzeichnis#20#C3#9Cberschrift /P /Verzeichnis#201 /P /Verzeichnis#202 /P /Textk#C3#B6rper /P /#C3#9Cberschrift#201 /P /#C3#9Cberschrift#202 /P /HTML#20Vorformatiert /P /Program#20Text /P /API#20Function /P /API#20Description /P /API#20Attribute /P /API#20Method /P /License#20Title /P /License#20Subtitle /P /License#20Text /P /License#20Section /P >> endobj 113 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 0 /P 390 0 R >> endobj 114 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 1 /P 390 0 R >> endobj 115 0 obj << /Copyright 116 0 R /Standard 149 0 R /Inhaltsverzeichnis#20#C3#9Cberschrift 156 0 R /Verzeichnis#201 158 0 R /Verzeichnis#202 162 0 R /Textk#C3#B6rper 196 0 R /#C3#9Cberschrift#201 199 0 R /#C3#9Cberschrift#202 202 0 R /HTML#20Vorformatiert 206 0 R /Program#20Text 209 0 R /API#20Function 229 0 R /API#20Description 231 0 R /API#20Attribute 238 0 R /API#20Method 243 0 R /License#20Title 342 0 R /License#20Subtitle 344 0 R /License#20Text 345 0 R /License#20Section 350 0 R >> endobj 116 0 obj << /O /Layout /WritingMode /LrTb /StartIndent 0 /EndIndent 0 /TextAlign /Start /SpaceBefore 0 /SpaceAfter 0 /TextIndent 0 >> endobj 117 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 2 /P 390 0 R >> endobj 118 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 3 /P 390 0 R >> endobj 119 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 4 /P 390 0 R >> endobj 120 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 5 /P 390 0 R >> endobj 121 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 6 /P 390 0 R >> endobj 122 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 7 /P 390 0 R >> endobj 123 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 8 /P 390 0 R >> endobj 124 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 9 /P 390 0 R >> endobj 125 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 10 /P 390 0 R >> endobj 126 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 11 /P 390 0 R >> endobj 127 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 12 /P 390 0 R >> endobj 128 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 13 /P 390 0 R >> endobj 129 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 14 /P 390 0 R >> endobj 130 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 15 /P 390 0 R >> endobj 131 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 16 /P 390 0 R >> endobj 132 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 17 /P 390 0 R >> endobj 133 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 18 /P 390 0 R >> endobj 134 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 19 /P 390 0 R >> endobj 135 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 20 /P 390 0 R >> endobj 136 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 21 /P 390 0 R >> endobj 137 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 22 /P 390 0 R >> endobj 138 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 23 /P 390 0 R >> endobj 139 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 24 /P 390 0 R >> endobj 140 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 25 /P 390 0 R >> endobj 141 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 26 /P 390 0 R >> endobj 142 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 27 /P 390 0 R >> endobj 143 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 28 /P 390 0 R >> endobj 144 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 29 /P 390 0 R >> endobj 145 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 30 /P 390 0 R >> endobj 146 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 31 /P 390 0 R >> endobj 147 0 obj << /S /Standard /C /Standard /Pg 1 0 R /K 32 /P 390 0 R >> endobj 148 0 obj << /S /Standard /C /Standard /Pg 1 0 R /K 33 /P 390 0 R >> endobj 149 0 obj << /O /Layout /WritingMode /LrTb /StartIndent 0 /EndIndent 0 /TextAlign /Start /SpaceBefore 0 /SpaceAfter 0 /TextIndent 0 >> endobj 150 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 34 /P 390 0 R >> endobj 151 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 35 /P 390 0 R >> endobj 152 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 36 /P 390 0 R >> endobj 153 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 37 /P 390 0 R >> endobj 154 0 obj << /S /Inhaltsverzeichnis#20#C3#9Cberschrift /C /Inhaltsverzeichnis#20#C3#9Cberschrift /Pg 4 0 R /K 0 /P 391 0 R >> endobj 155 0 obj << /S /TOCI /C /Verzeichnis#201 /Pg 4 0 R /K [ 157 0 R 2 159 0 R 4 ] /P 393 0 R >> endobj 156 0 obj << /O /Layout /WritingMode /LrTb /StartIndent 0 /EndIndent 0 /TextAlign /Start /SpaceBefore 11.89999 /SpaceAfter 70.85001 /TextIndent 0 >> endobj 157 0 obj << /S /Underline /P 155 0 R /A 443 0 R /Pg 4 0 R /K 1 >> endobj 158 0 obj << /O /Layout /WritingMode /LrTb /StartIndent 0 /EndIndent 0 /TextAlign /Start /SpaceBefore 14.2 /SpaceAfter 0 /TextIndent 0 >> endobj 159 0 obj << /S /Underline /P 155 0 R /A 444 0 R /Pg 4 0 R /K 3 >> endobj 160 0 obj << /S /TOCI /C /Verzeichnis#202 /Pg 4 0 R /K [ 161 0 R 6 163 0 R 8 ] /P 393 0 R >> endobj 161 0 obj << /S /Underline /P 160 0 R /A 445 0 R /Pg 4 0 R /K 5 >> endobj 162 0 obj << /O /Layout /WritingMode /LrTb /StartIndent 28.35001 /EndIndent 0 /TextAlign /Start /SpaceBefore 6 /SpaceAfter 0 /TextIndent 0 >> endobj 163 0 obj << /S /Underline /P 160 0 R /A 446 0 R /Pg 4 0 R /K 7 >> endobj 164 0 obj << /S /TOCI /C /Verzeichnis#202 /Pg 4 0 R /K [ 165 0 R 10 166 0 R 12 ] /P 393 0 R >> endobj 165 0 obj << /S /Underline /P 164 0 R /A 447 0 R /Pg 4 0 R /K 9 >> endobj 166 0 obj << /S /Underline /P 164 0 R /A 448 0 R /Pg 4 0 R /K 11 >> endobj 167 0 obj << /S /TOCI /C /Verzeichnis#201 /Pg 4 0 R /K [ 168 0 R 14 169 0 R 16 ] /P 393 0 R >> endobj 168 0 obj << /S /Underline /P 167 0 R /A 449 0 R /Pg 4 0 R /K 13 >> endobj 169 0 obj << /S /Underline /P 167 0 R /A 450 0 R /Pg 4 0 R /K 15 >> endobj 170 0 obj << /S /TOCI /C /Verzeichnis#202 /Pg 4 0 R /K [ 171 0 R 18 172 0 R 20 ] /P 393 0 R >> endobj 171 0 obj << /S /Underline /P 170 0 R /A 451 0 R /Pg 4 0 R /K 17 >> endobj 172 0 obj << /S /Underline /P 170 0 R /A 452 0 R /Pg 4 0 R /K 19 >> endobj 173 0 obj << /S /TOCI /C /Verzeichnis#202 /Pg 4 0 R /K [ 174 0 R 22 175 0 R 24 ] /P 393 0 R >> endobj 174 0 obj << /S /Underline /P 173 0 R /A 453 0 R /Pg 4 0 R /K 21 >> endobj 175 0 obj << /S /Underline /P 173 0 R /A 454 0 R /Pg 4 0 R /K 23 >> endobj 176 0 obj << /S /TOCI /C /Verzeichnis#201 /Pg 4 0 R /K [ 177 0 R 26 178 0 R 28 ] /P 393 0 R >> endobj 177 0 obj << /S /Underline /P 176 0 R /A 455 0 R /Pg 4 0 R /K 25 >> endobj 178 0 obj << /S /Underline /P 176 0 R /A 456 0 R /Pg 4 0 R /K 27 >> endobj 179 0 obj << /S /TOCI /C /Verzeichnis#201 /Pg 4 0 R /K [ 180 0 R 30 181 0 R 32 ] /P 393 0 R >> endobj 180 0 obj << /S /Underline /P 179 0 R /A 457 0 R /Pg 4 0 R /K 29 >> endobj 181 0 obj << /S /Underline /P 179 0 R /A 458 0 R /Pg 4 0 R /K 31 >> endobj 182 0 obj << /S /TOCI /C /Verzeichnis#201 /Pg 4 0 R /K [ 183 0 R 34 184 0 R 36 ] /P 393 0 R >> endobj 183 0 obj << /S /Underline /P 182 0 R /A 459 0 R /Pg 4 0 R /K 33 >> endobj 184 0 obj << /S /Underline /P 182 0 R /A 460 0 R /Pg 4 0 R /K 35 >> endobj 185 0 obj << /S /TOCI /C /Verzeichnis#201 /Pg 4 0 R /K [ 186 0 R 38 187 0 R 40 ] /P 393 0 R >> endobj 186 0 obj << /S /Underline /P 185 0 R /A 461 0 R /Pg 4 0 R /K 37 >> endobj 187 0 obj << /S /Underline /P 185 0 R /A 462 0 R /Pg 4 0 R /K 39 >> endobj 188 0 obj << /S /TOCI /C /Verzeichnis#201 /Pg 4 0 R /K [ 189 0 R 42 190 0 R 44 ] /P 393 0 R >> endobj 189 0 obj << /S /Underline /P 188 0 R /A 463 0 R /Pg 4 0 R /K 41 >> endobj 190 0 obj << /S /Underline /P 188 0 R /A 464 0 R /Pg 4 0 R /K 43 >> endobj 191 0 obj << /S /TOCI /C /Verzeichnis#201 /Pg 4 0 R /K [ 192 0 R 46 193 0 R 48 ] /P 393 0 R >> endobj 192 0 obj << /S /Underline /P 191 0 R /A 465 0 R /Pg 4 0 R /K 45 >> endobj 193 0 obj << /S /Underline /P 191 0 R /A 466 0 R /Pg 4 0 R /K 47 >> endobj 194 0 obj << /S /TOCI /C /Textk#C3#B6rper /Pg 4 0 R /K 49 /P 393 0 R >> endobj 195 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 4 0 R /K 50 /P 391 0 R >> endobj 196 0 obj << /O /Layout /WritingMode /LrTb /StartIndent 42.55 /EndIndent 0 /TextAlign /Justify /SpaceBefore 5.64999 /SpaceAfter 5.95 /TextIndent 0 >> endobj 197 0 obj << /S /LBody /C /#C3#9Cberschrift#201 /Pg 35 0 R /K 0 /P 395 0 R >> endobj 198 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 35 0 R /K 1 /P 392 0 R >> endobj 199 0 obj << /O /Layout /WritingMode /LrTb /StartIndent 42.55 /EndIndent 0 /TextAlign /Start /SpaceBefore 28.35001 /SpaceAfter 8.5 /TextIndent -42.54999 >> endobj 200 0 obj << /S /LBody /C /#C3#9Cberschrift#202 /Pg 35 0 R /K 2 /P 397 0 R >> endobj 201 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 35 0 R /K 3 /P 392 0 R >> endobj 202 0 obj << /O /Layout /WritingMode /LrTb /StartIndent 42.55 /EndIndent 0 /TextAlign /Start /SpaceBefore 34 /SpaceAfter 14.14999 /TextIndent -42.54999 >> endobj 203 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 35 0 R /K 4 /P 392 0 R >> endobj 204 0 obj << /S /HTML#20Vorformatiert /A [ 205 0 R ] /C /HTML#20Vorformatiert /Pg 35 0 R /K 5 /P 392 0 R >> endobj 205 0 obj << /O /Layout /StartIndent 36 >> endobj 206 0 obj << /O /Layout /WritingMode /LrTb /StartIndent 0 /EndIndent 0 /TextAlign /Start /SpaceBefore 0 /SpaceAfter 0 /TextIndent 0 >> endobj 207 0 obj << /S /Program#20Text /C /Program#20Text /Pg 35 0 R /K 6 /P 392 0 R >> endobj 208 0 obj << /S /Program#20Text /C /Program#20Text /Pg 35 0 R /K 7 /P 392 0 R >> endobj 209 0 obj << /O /Layout /WritingMode /LrTb /StartIndent 42.55 /EndIndent 0 /TextAlign /Start /SpaceBefore 0 /SpaceAfter 0 /TextIndent 0 >> endobj 210 0 obj << /S /Program#20Text /C /Program#20Text /Pg 35 0 R /K 8 /P 392 0 R >> endobj 211 0 obj << /S /Program#20Text /C /Program#20Text /Pg 35 0 R /K 9 /P 392 0 R >> endobj 212 0 obj << /S /Program#20Text /C /Program#20Text /Pg 35 0 R /K 10 /P 392 0 R >> endobj 213 0 obj << /S /Program#20Text /C /Program#20Text /Pg 35 0 R /K 11 /P 392 0 R >> endobj 214 0 obj << /S /Program#20Text /C /Program#20Text /Pg 35 0 R /K 12 /P 392 0 R >> endobj 215 0 obj << /S /Program#20Text /C /Program#20Text /Pg 35 0 R /K 13 /P 392 0 R >> endobj 216 0 obj << /S /HTML#20Vorformatiert /A [ 217 0 R ] /C /HTML#20Vorformatiert /Pg 35 0 R /K 14 /P 392 0 R >> endobj 217 0 obj << /O /Layout /StartIndent 36 >> endobj 218 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 35 0 R /K 15 /P 392 0 R >> endobj 219 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 35 0 R /K 16 /P 392 0 R >> endobj 220 0 obj << /S /LBody /C /#C3#9Cberschrift#202 /Pg 35 0 R /K 17 /P 399 0 R >> endobj 221 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 35 0 R /P 392 0 R /K [ 18 << /Type /MCR /Pg 38 0 R /MCID 0 >> ] >> endobj 222 0 obj << /S /LBody /C /#C3#9Cberschrift#201 /Pg 41 0 R /K 0 /P 401 0 R >> endobj 223 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 41 0 R /K 1 /P 392 0 R >> endobj 224 0 obj << /S /LBody /A [ 225 0 R ] /C /#C3#9Cberschrift#202 /Pg 41 0 R /K 2 /P 403 0 R >> endobj 225 0 obj << /O /Layout /StartIndent 36 >> endobj 226 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 41 0 R /K 3 /P 392 0 R >> endobj 227 0 obj << /S /API#20Function /C /API#20Function /Pg 41 0 R /K 4 /P 392 0 R >> endobj 228 0 obj << /S /API#20Description /C /API#20Description /Pg 41 0 R /K 5 /P 392 0 R >> endobj 229 0 obj << /O /Layout /WritingMode /LrTb /StartIndent 56.75 /EndIndent 0 /TextAlign /Start /SpaceBefore 5.64999 /SpaceAfter 5.95 /TextIndent -14.19998 >> endobj 230 0 obj << /S /API#20Function /C /API#20Function /Pg 41 0 R /K 6 /P 392 0 R >> endobj 231 0 obj << /O /Layout /WritingMode /LrTb /StartIndent 56.7 /EndIndent 0 /TextAlign /Start /SpaceBefore 0 /SpaceAfter 5.95 /TextIndent 0 >> endobj 232 0 obj << /S /API#20Description /C /API#20Description /Pg 41 0 R /K 7 /P 392 0 R >> endobj 233 0 obj << /S /LBody /A [ 234 0 R ] /C /#C3#9Cberschrift#202 /Pg 41 0 R /K 8 /P 405 0 R >> endobj 234 0 obj << /O /Layout /StartIndent 36 >> endobj 235 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 41 0 R /K 9 /P 392 0 R >> endobj 236 0 obj << /S /API#20Attribute /C /API#20Attribute /Pg 41 0 R /K 10 /P 392 0 R >> endobj 237 0 obj << /S /API#20Description /C /API#20Description /Pg 41 0 R /K 11 /P 392 0 R >> endobj 238 0 obj << /O /Layout /WritingMode /LrTb /StartIndent 56.75 /EndIndent 0 /TextAlign /Start /SpaceBefore 5.64999 /SpaceAfter 5.95 /TextIndent -14.19998 >> endobj 239 0 obj << /S /API#20Attribute /C /API#20Attribute /Pg 41 0 R /K 12 /P 392 0 R >> endobj 240 0 obj << /S /API#20Description /C /API#20Description /Pg 41 0 R /K 13 /P 392 0 R >> endobj 241 0 obj << /S /API#20Method /C /API#20Method /Pg 41 0 R /K 14 /P 392 0 R >> endobj 242 0 obj << /S /API#20Description /C /API#20Description /Pg 41 0 R /K 15 /P 392 0 R >> endobj 243 0 obj << /O /Layout /WritingMode /LrTb /StartIndent 56.75 /EndIndent 0 /TextAlign /Start /SpaceBefore 5.64999 /SpaceAfter 5.95 /TextIndent -14.19998 >> endobj 244 0 obj << /S /API#20Method /C /API#20Method /Pg 41 0 R /K 16 /P 392 0 R >> endobj 245 0 obj << /S /API#20Description /C /API#20Description /Pg 41 0 R /K 17 /P 392 0 R >> endobj 246 0 obj << /S /API#20Attribute /C /API#20Attribute /Pg 44 0 R /K 0 /P 392 0 R >> endobj 247 0 obj << /S /API#20Description /C /API#20Description /Pg 44 0 R /K 1 /P 392 0 R >> endobj 248 0 obj << /S /API#20Method /C /API#20Method /Pg 44 0 R /K 2 /P 392 0 R >> endobj 249 0 obj << /S /API#20Description /C /API#20Description /Pg 44 0 R /K 3 /P 392 0 R >> endobj 250 0 obj << /S /API#20Attribute /C /API#20Attribute /Pg 44 0 R /K 4 /P 392 0 R >> endobj 251 0 obj << /S /API#20Description /C /API#20Description /Pg 44 0 R /K 5 /P 392 0 R >> endobj 252 0 obj << /S /API#20Method /C /API#20Method /Pg 44 0 R /K 6 /P 392 0 R >> endobj 253 0 obj << /S /API#20Description /C /API#20Description /Pg 44 0 R /K 7 /P 392 0 R >> endobj 254 0 obj << /S /API#20Description /C /API#20Description /Pg 44 0 R /K 8 /P 392 0 R >> endobj 255 0 obj << /S /API#20Method /C /API#20Method /Pg 44 0 R /K 9 /P 392 0 R >> endobj 256 0 obj << /S /API#20Description /C /API#20Description /Pg 44 0 R /K 10 /P 392 0 R >> endobj 257 0 obj << /S /API#20Description /C /API#20Description /Pg 44 0 R /K 11 /P 392 0 R >> endobj 258 0 obj << /S /API#20Description /C /API#20Description /Pg 44 0 R /K 12 /P 392 0 R >> endobj 259 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 44 0 R /K 13 /P 392 0 R >> endobj 260 0 obj << /S /LBody /A [ 261 0 R ] /C /#C3#9Cberschrift#201 /Pg 47 0 R /K 0 /P 407 0 R >> endobj 261 0 obj << /O /Layout /StartIndent 36 >> endobj 262 0 obj << /S /API#20Attribute /C /API#20Attribute /Pg 47 0 R /K 1 /P 392 0 R >> endobj 263 0 obj << /S /API#20Description /C /API#20Description /Pg 47 0 R /K 2 /P 392 0 R >> endobj 264 0 obj << /S /API#20Attribute /C /API#20Attribute /Pg 47 0 R /K 3 /P 392 0 R >> endobj 265 0 obj << /S /API#20Description /C /API#20Description /Pg 47 0 R /K 4 /P 392 0 R >> endobj 266 0 obj << /S /LBody /C /#C3#9Cberschrift#201 /Pg 50 0 R /K 0 /P 409 0 R >> endobj 267 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 50 0 R /K 1 /P 392 0 R >> endobj 268 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 50 0 R /K 2 /P 392 0 R >> endobj 269 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 50 0 R /K 3 /P 392 0 R >> endobj 270 0 obj << /S /HTML#20Vorformatiert /A [ 271 0 R ] /C /HTML#20Vorformatiert /Pg 50 0 R /K 4 /P 392 0 R >> endobj 271 0 obj << /O /Layout /StartIndent 36 >> endobj 272 0 obj << /S /Program#20Text /C /Program#20Text /Pg 50 0 R /K 5 /P 392 0 R >> endobj 273 0 obj << /S /Program#20Text /C /Program#20Text /Pg 50 0 R /K 6 /P 392 0 R >> endobj 274 0 obj << /S /Program#20Text /C /Program#20Text /Pg 50 0 R /K 7 /P 392 0 R >> endobj 275 0 obj << /S /Program#20Text /C /Program#20Text /Pg 50 0 R /K 8 /P 392 0 R >> endobj 276 0 obj << /S /Program#20Text /C /Program#20Text /Pg 50 0 R /K 9 /P 392 0 R >> endobj 277 0 obj << /S /Program#20Text /C /Program#20Text /Pg 50 0 R /K 10 /P 392 0 R >> endobj 278 0 obj << /S /Program#20Text /C /Program#20Text /Pg 50 0 R /K 11 /P 392 0 R >> endobj 279 0 obj << /S /Program#20Text /C /Program#20Text /Pg 50 0 R /K 12 /P 392 0 R >> endobj 280 0 obj << /S /Program#20Text /C /Program#20Text /Pg 50 0 R /K 13 /P 392 0 R >> endobj 281 0 obj << /S /Program#20Text /C /Program#20Text /Pg 50 0 R /K 14 /P 392 0 R >> endobj 282 0 obj << /S /Program#20Text /C /Program#20Text /Pg 50 0 R /K 15 /P 392 0 R >> endobj 283 0 obj << /S /Program#20Text /C /Program#20Text /Pg 50 0 R /K 16 /P 392 0 R >> endobj 284 0 obj << /S /Program#20Text /C /Program#20Text /Pg 50 0 R /K 17 /P 392 0 R >> endobj 285 0 obj << /S /Program#20Text /C /Program#20Text /Pg 50 0 R /K 18 /P 392 0 R >> endobj 286 0 obj << /S /Program#20Text /C /Program#20Text /Pg 50 0 R /K 19 /P 392 0 R >> endobj 287 0 obj << /S /Program#20Text /C /Program#20Text /Pg 50 0 R /K 20 /P 392 0 R >> endobj 288 0 obj << /S /Program#20Text /C /Program#20Text /Pg 50 0 R /K 21 /P 392 0 R >> endobj 289 0 obj << /S /Program#20Text /C /Program#20Text /Pg 50 0 R /K 22 /P 392 0 R >> endobj 290 0 obj << /S /Program#20Text /C /Program#20Text /Pg 50 0 R /K 23 /P 392 0 R >> endobj 291 0 obj << /S /Program#20Text /C /Program#20Text /Pg 50 0 R /K 24 /P 392 0 R >> endobj 292 0 obj << /S /HTML#20Vorformatiert /A [ 293 0 R ] /C /HTML#20Vorformatiert /Pg 50 0 R /K 25 /P 392 0 R >> endobj 293 0 obj << /O /Layout /StartIndent 36 >> endobj 294 0 obj << /S /LBody /C /#C3#9Cberschrift#201 /Pg 53 0 R /K 0 /P 411 0 R >> endobj 295 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 53 0 R /K 1 /P 392 0 R >> endobj 296 0 obj << /S /HTML#20Vorformatiert /A [ 297 0 R ] /C /HTML#20Vorformatiert /Pg 53 0 R /K 2 /P 392 0 R >> endobj 297 0 obj << /O /Layout /StartIndent 36 >> endobj 298 0 obj << /S /Program#20Text /C /Program#20Text /Pg 53 0 R /K 3 /P 392 0 R >> endobj 299 0 obj << /S /Program#20Text /C /Program#20Text /Pg 53 0 R /K 4 /P 392 0 R >> endobj 300 0 obj << /S /Program#20Text /C /Program#20Text /Pg 53 0 R /K 5 /P 392 0 R >> endobj 301 0 obj << /S /Program#20Text /C /Program#20Text /Pg 53 0 R /K 6 /P 392 0 R >> endobj 302 0 obj << /S /Program#20Text /C /Program#20Text /Pg 53 0 R /K 7 /P 392 0 R >> endobj 303 0 obj << /S /Program#20Text /C /Program#20Text /Pg 53 0 R /K 8 /P 392 0 R >> endobj 304 0 obj << /S /Program#20Text /C /Program#20Text /Pg 53 0 R /K 9 /P 392 0 R >> endobj 305 0 obj << /S /Program#20Text /C /Program#20Text /Pg 53 0 R /K 10 /P 392 0 R >> endobj 306 0 obj << /S /Program#20Text /C /Program#20Text /Pg 53 0 R /K 11 /P 392 0 R >> endobj 307 0 obj << /S /Program#20Text /C /Program#20Text /Pg 53 0 R /K 12 /P 392 0 R >> endobj 308 0 obj << /S /Program#20Text /C /Program#20Text /Pg 53 0 R /K 13 /P 392 0 R >> endobj 309 0 obj << /S /Program#20Text /C /Program#20Text /Pg 53 0 R /K 14 /P 392 0 R >> endobj 310 0 obj << /S /Program#20Text /C /Program#20Text /Pg 53 0 R /K 15 /P 392 0 R >> endobj 311 0 obj << /S /Program#20Text /C /Program#20Text /Pg 53 0 R /K 16 /P 392 0 R >> endobj 312 0 obj << /S /HTML#20Vorformatiert /A [ 313 0 R ] /C /HTML#20Vorformatiert /Pg 53 0 R /K 17 /P 392 0 R >> endobj 313 0 obj << /O /Layout /StartIndent 36 >> endobj 314 0 obj << /S /LBody /C /#C3#9Cberschrift#201 /Pg 56 0 R /K 0 /P 413 0 R >> endobj 315 0 obj << /S /HTML#20Vorformatiert /A [ 316 0 R ] /C /HTML#20Vorformatiert /Pg 56 0 R /K 1 /P 392 0 R >> endobj 316 0 obj << /O /Layout /StartIndent 36 >> endobj 317 0 obj << /S /Program#20Text /C /Program#20Text /Pg 56 0 R /K 2 /P 392 0 R >> endobj 318 0 obj << /S /Program#20Text /C /Program#20Text /Pg 56 0 R /K 3 /P 392 0 R >> endobj 319 0 obj << /S /Program#20Text /C /Program#20Text /Pg 56 0 R /K 4 /P 392 0 R >> endobj 320 0 obj << /S /Program#20Text /C /Program#20Text /Pg 56 0 R /K 5 /P 392 0 R >> endobj 321 0 obj << /S /Program#20Text /C /Program#20Text /Pg 56 0 R /K 6 /P 392 0 R >> endobj 322 0 obj << /S /Program#20Text /C /Program#20Text /Pg 56 0 R /K 7 /P 392 0 R >> endobj 323 0 obj << /S /HTML#20Vorformatiert /A [ 324 0 R ] /C /HTML#20Vorformatiert /Pg 56 0 R /K 8 /P 392 0 R >> endobj 324 0 obj << /O /Layout /StartIndent 36 >> endobj 325 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 56 0 R /K 9 /P 392 0 R >> endobj 326 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 56 0 R /K 10 /P 392 0 R >> endobj 327 0 obj << /S /LBody /C /#C3#9Cberschrift#201 /Pg 59 0 R /K 0 /P 415 0 R >> endobj 328 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 59 0 R /K [ 1 329 0 R 3 ] /P 392 0 R >> endobj 329 0 obj << /S /Link /P 328 0 R /K [ 330 0 R << /Type /OBJR /Pg 59 0 R /Obj 91 0 R >> ] >> endobj 330 0 obj << /S /Underline /P 329 0 R /A 476 0 R /Pg 59 0 R /K 2 >> endobj 331 0 obj << /S /LBody /C /#C3#9Cberschrift#201 /Pg 63 0 R /K 0 /P 417 0 R >> endobj 332 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 63 0 R /K [ 1 333 0 R 3 ] /P 392 0 R >> endobj 333 0 obj << /S /Link /P 332 0 R /K [ 334 0 R << /Type /OBJR /Pg 63 0 R /Obj 93 0 R >> ] >> endobj 334 0 obj << /S /Underline /P 333 0 R /A 478 0 R /Pg 63 0 R /K 2 >> endobj 335 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 63 0 R /K [ 4 336 0 R 6 ] /P 392 0 R >> endobj 336 0 obj << /S /Link /P 335 0 R /K [ 337 0 R << /Type /OBJR /Pg 63 0 R /Obj 95 0 R >> ] >> endobj 337 0 obj << /S /Underline /P 336 0 R /A 479 0 R /Pg 63 0 R /K 5 >> endobj 338 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 63 0 R /K 7 /P 392 0 R >> endobj 339 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 63 0 R /K 8 /P 392 0 R >> endobj 340 0 obj << /S /License#20Title /C /License#20Title /Pg 67 0 R /K 0 /P 392 0 R >> endobj 341 0 obj << /S /License#20Subtitle /C /License#20Subtitle /Pg 67 0 R /K 1 /P 392 0 R >> endobj 342 0 obj << /O /Layout /WritingMode /LrTb /StartIndent 0 /EndIndent 0 /TextAlign /Center /SpaceBefore 0 /SpaceAfter 6 /TextIndent 0 >> endobj 343 0 obj << /S /License#20Text /C /License#20Text /Pg 67 0 R /K [ 2 346 0 R 4 ] /P 392 0 R >> endobj 344 0 obj << /O /Layout /WritingMode /LrTb /StartIndent 0 /EndIndent 0 /TextAlign /Center /SpaceBefore 0 /SpaceAfter 6 /TextIndent 0 >> endobj 345 0 obj << /O /Layout /WritingMode /LrTb /StartIndent 42.55 /EndIndent 0 /TextAlign /Start /SpaceBefore 6 /SpaceAfter 6 /TextIndent 0 >> endobj 346 0 obj << /S /Link /P 343 0 R /K [ 347 0 R << /Type /OBJR /Pg 67 0 R /Obj 97 0 R >> ] >> endobj 347 0 obj << /S /Underline /P 346 0 R /A 481 0 R /Pg 67 0 R /K 3 >> endobj 348 0 obj << /S /LBody /C /License#20Section /Pg 67 0 R /K 5 /P 419 0 R >> endobj 349 0 obj << /S /License#20Text /C /License#20Text /Pg 67 0 R /K 6 /P 392 0 R >> endobj 350 0 obj << /O /Layout /WritingMode /LrTb /StartIndent 85.10001 /EndIndent 0 /TextAlign /Start /SpaceBefore 12 /SpaceAfter 6 /TextIndent -85.09999 >> endobj 351 0 obj << /S /LBody /C /License#20Section /Pg 67 0 R /K 7 /P 421 0 R >> endobj 352 0 obj << /S /License#20Text /C /License#20Text /Pg 67 0 R /K 8 /P 392 0 R >> endobj 353 0 obj << /S /LBody /C /License#20Section /Pg 67 0 R /K 9 /P 423 0 R >> endobj 354 0 obj << /S /License#20Text /C /License#20Text /Pg 67 0 R /K 10 /P 392 0 R >> endobj 355 0 obj << /S /LBody /C /License#20Section /Pg 67 0 R /K 11 /P 425 0 R >> endobj 356 0 obj << /S /License#20Text /C /License#20Text /Pg 67 0 R /P 392 0 R /K [ 12 << /Type /MCR /Pg 71 0 R /MCID 0 >> ] >> endobj 357 0 obj << /S /License#20Text /C /License#20Text /Pg 71 0 R /K 1 /P 392 0 R >> endobj 358 0 obj << /S /LBody /C /License#20Section /Pg 71 0 R /K 2 /P 427 0 R >> endobj 359 0 obj << /S /License#20Text /C /License#20Text /Pg 71 0 R /K 3 /P 392 0 R >> endobj 360 0 obj << /S /LBody /C /License#20Section /Pg 71 0 R /K 4 /P 429 0 R >> endobj 361 0 obj << /S /License#20Text /C /License#20Text /Pg 71 0 R /K 5 /P 392 0 R >> endobj 362 0 obj << /S /LBody /C /License#20Section /Pg 71 0 R /K 6 /P 431 0 R >> endobj 363 0 obj << /S /License#20Text /C /License#20Text /Pg 71 0 R /K 7 /P 392 0 R >> endobj 364 0 obj << /S /License#20Text /C /License#20Text /Pg 71 0 R /K 8 /P 392 0 R >> endobj 365 0 obj << /S /License#20Text /C /License#20Text /Pg 71 0 R /K 9 /P 392 0 R >> endobj 366 0 obj << /S /License#20Text /C /License#20Text /Pg 71 0 R /K 10 /P 392 0 R >> endobj 367 0 obj << /S /License#20Text /C /License#20Text /Pg 71 0 R /K 11 /P 392 0 R >> endobj 368 0 obj << /S /License#20Text /C /License#20Text /Pg 74 0 R /K 0 /P 392 0 R >> endobj 369 0 obj << /S /LBody /C /License#20Section /Pg 74 0 R /K 1 /P 433 0 R >> endobj 370 0 obj << /S /License#20Text /C /License#20Text /Pg 74 0 R /K 2 /P 392 0 R >> endobj 371 0 obj << /S /License#20Text /C /License#20Text /Pg 74 0 R /K 3 /P 392 0 R >> endobj 372 0 obj << /S /License#20Text /A [ 373 0 R ] /C /License#20Text /Pg 74 0 R /K 4 /P 392 0 R >> endobj 373 0 obj << /O /Layout /StartIndent 81 >> endobj 374 0 obj << /S /License#20Text /A [ 375 0 R ] /C /License#20Text /Pg 74 0 R /K 5 /P 392 0 R >> endobj 375 0 obj << /O /Layout /StartIndent 81 >> endobj 376 0 obj << /S /License#20Text /A [ 377 0 R ] /C /License#20Text /Pg 74 0 R /K 6 /P 392 0 R >> endobj 377 0 obj << /O /Layout /StartIndent 81 >> endobj 378 0 obj << /S /License#20Text /A [ 379 0 R ] /C /License#20Text /Pg 74 0 R /K 7 /P 392 0 R >> endobj 379 0 obj << /O /Layout /StartIndent 81 >> endobj 380 0 obj << /S /License#20Text /C /License#20Text /Pg 74 0 R /K 8 /P 392 0 R >> endobj 381 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 74 0 R /K 9 /P 392 0 R >> endobj 382 0 obj << /S /Standard /A [ 383 0 R ] /C /Standard /Pg 532 0 R /K [ 25 26 27 ] /P 437 0 R >> endobj 383 0 obj << /O /Layout /TextAlign /End /StartIndent -1.55 /EndIndent -24.2 >> endobj 384 0 obj << /S /Standard /A [ 385 0 R ] /C /Standard /Pg 532 0 R /K [ 28 29 30 ] /P 437 0 R >> endobj 385 0 obj << /O /Layout /TextAlign /End /StartIndent -1.55 /EndIndent -24.2 >> endobj 386 0 obj << /S /Standard /A [ 387 0 R ] /C /Standard /Pg 532 0 R /K [ 11 12 13 14 15 16 17 18 19 20 21 22 23 ] /P 436 0 R >> endobj 387 0 obj << /O /Layout /TextAlign /Center /StartIndent 54.45 /EndIndent 62.8 >> endobj 388 0 obj << /S /Standard /A [ 389 0 R ] /C /Standard /Pg 532 0 R /K [ 1 2 3 4 5 6 7 8 9 10 ] /P 435 0 R >> endobj 389 0 obj << /O /Layout /StartIndent 12.45 /TextAlign /End /EndIndent -47.2 >> endobj 390 0 obj << /S /Sect /P 531 0 R /K [ 437 0 R 436 0 R 435 0 R 434 0 R 113 0 R 114 0 R 117 0 R 118 0 R 119 0 R 120 0 R 121 0 R 122 0 R 123 0 R 124 0 R 125 0 R 126 0 R 127 0 R 128 0 R 129 0 R 130 0 R 131 0 R 132 0 R 133 0 R 134 0 R 135 0 R 136 0 R 137 0 R 138 0 R 139 0 R 140 0 R 141 0 R 142 0 R 143 0 R 144 0 R 145 0 R 146 0 R 147 0 R 148 0 R 150 0 R 151 0 R 152 0 R 153 0 R ] >> endobj 391 0 obj << /S /Sect /P 531 0 R /K [ 154 0 R 393 0 R 195 0 R ] >> endobj 392 0 obj << /S /Sect /P 531 0 R /K [ 394 0 R 198 0 R 396 0 R 201 0 R 203 0 R 204 0 R 207 0 R 208 0 R 210 0 R 211 0 R 212 0 R 213 0 R 214 0 R 215 0 R 216 0 R 218 0 R 219 0 R 398 0 R 221 0 R 400 0 R 223 0 R 402 0 R 226 0 R 227 0 R 228 0 R 230 0 R 232 0 R 404 0 R 235 0 R 236 0 R 237 0 R 239 0 R 240 0 R 241 0 R 242 0 R 244 0 R 245 0 R 246 0 R 247 0 R 248 0 R 249 0 R 250 0 R 251 0 R 252 0 R 253 0 R 254 0 R 255 0 R 256 0 R 257 0 R 258 0 R 259 0 R 406 0 R 262 0 R 263 0 R 264 0 R 265 0 R 408 0 R 267 0 R 268 0 R 269 0 R 270 0 R 272 0 R 273 0 R 274 0 R 275 0 R 276 0 R 277 0 R 278 0 R 279 0 R 280 0 R 281 0 R 282 0 R 283 0 R 284 0 R 285 0 R 286 0 R 287 0 R 288 0 R 289 0 R 290 0 R 291 0 R 292 0 R 410 0 R 295 0 R 296 0 R 298 0 R 299 0 R 300 0 R 301 0 R 302 0 R 303 0 R 304 0 R 305 0 R 306 0 R 307 0 R 308 0 R 309 0 R 310 0 R 311 0 R 312 0 R 412 0 R 315 0 R 317 0 R 318 0 R 319 0 R 320 0 R 321 0 R 322 0 R 323 0 R 325 0 R 326 0 R 414 0 R 328 0 R 416 0 R 332 0 R 335 0 R 338 0 R 339 0 R 340 0 R 341 0 R 343 0 R 418 0 R 349 0 R 420 0 R 352 0 R 422 0 R 354 0 R 424 0 R 356 0 R 357 0 R 426 0 R 359 0 R 428 0 R 361 0 R 430 0 R 363 0 R 364 0 R 365 0 R 366 0 R 367 0 R 368 0 R 432 0 R 370 0 R 371 0 R 372 0 R 374 0 R 376 0 R 378 0 R 380 0 R 381 0 R ] >> endobj 393 0 obj << /S /TOC /P 391 0 R /K [ 155 0 R 160 0 R 164 0 R 167 0 R 170 0 R 173 0 R 176 0 R 179 0 R 182 0 R 185 0 R 188 0 R 191 0 R 194 0 R ] >> endobj 394 0 obj << /S /L /K 395 0 R /P 392 0 R >> endobj 395 0 obj << /S /LI /P 394 0 R /K 197 0 R >> endobj 396 0 obj << /S /L /K 397 0 R /P 392 0 R >> endobj 397 0 obj << /S /LI /P 396 0 R /K 200 0 R >> endobj 398 0 obj << /S /L /K 399 0 R /P 392 0 R >> endobj 399 0 obj << /S /LI /P 398 0 R /K 220 0 R >> endobj 400 0 obj << /S /L /K 401 0 R /P 392 0 R >> endobj 401 0 obj << /S /LI /P 400 0 R /K 222 0 R >> endobj 402 0 obj << /S /L /K 403 0 R /P 392 0 R >> endobj 403 0 obj << /S /LI /P 402 0 R /K 224 0 R >> endobj 404 0 obj << /S /L /K 405 0 R /P 392 0 R >> endobj 405 0 obj << /S /LI /P 404 0 R /K 233 0 R >> endobj 406 0 obj << /S /L /K 407 0 R /P 392 0 R >> endobj 407 0 obj << /S /LI /P 406 0 R /K 260 0 R >> endobj 408 0 obj << /S /L /K 409 0 R /P 392 0 R >> endobj 409 0 obj << /S /LI /P 408 0 R /K 266 0 R >> endobj 410 0 obj << /S /L /K 411 0 R /P 392 0 R >> endobj 411 0 obj << /S /LI /P 410 0 R /K 294 0 R >> endobj 412 0 obj << /S /L /K 413 0 R /P 392 0 R >> endobj 413 0 obj << /S /LI /P 412 0 R /K 314 0 R >> endobj 414 0 obj << /S /L /K 415 0 R /P 392 0 R >> endobj 415 0 obj << /S /LI /P 414 0 R /K 327 0 R >> endobj 416 0 obj << /S /L /K 417 0 R /P 392 0 R >> endobj 417 0 obj << /S /LI /P 416 0 R /K 331 0 R >> endobj 418 0 obj << /S /L /K 419 0 R /P 392 0 R >> endobj 419 0 obj << /S /LI /P 418 0 R /K 348 0 R >> endobj 420 0 obj << /S /L /K 421 0 R /P 392 0 R >> endobj 421 0 obj << /S /LI /P 420 0 R /K 351 0 R >> endobj 422 0 obj << /S /L /K 423 0 R /P 392 0 R >> endobj 423 0 obj << /S /LI /P 422 0 R /K 353 0 R >> endobj 424 0 obj << /S /L /K 425 0 R /P 392 0 R >> endobj 425 0 obj << /S /LI /P 424 0 R /K 355 0 R >> endobj 426 0 obj << /S /L /K 427 0 R /P 392 0 R >> endobj 427 0 obj << /S /LI /P 426 0 R /K 358 0 R >> endobj 428 0 obj << /S /L /K 429 0 R /P 392 0 R >> endobj 429 0 obj << /S /LI /P 428 0 R /K 360 0 R >> endobj 430 0 obj << /S /L /K 431 0 R /P 392 0 R >> endobj 431 0 obj << /S /LI /P 430 0 R /K 362 0 R >> endobj 432 0 obj << /S /L /K 433 0 R /P 392 0 R >> endobj 433 0 obj << /S /LI /P 432 0 R /K 369 0 R >> endobj 434 0 obj << /S /Shape /Alt () /Pg 532 0 R /K [ 0 24 ] /P 390 0 R /A 440 0 R >> endobj 435 0 obj << /S /TextBox /Alt (m d&}la5z) /P 390 0 R /K 388 0 R >> endobj 436 0 obj << /S /TextBox /Alt (rn$ $$lZw) /P 390 0 R /K 386 0 R >> endobj 437 0 obj << /S /TextBox /Alt (d>8 [S ,!%c93.2IhRz=CH) /P 390 0 R /K [ 382 0 R 384 0 R ] >> endobj 438 0 obj << /Nums [ 0 439 0 R 1 441 0 R 2 442 0 R 3 467 0 R 4 468 0 R 5 469 0 R 6 470 0 R 7 471 0 R 8 472 0 R 9 473 0 R 10 474 0 R 11 475 0 R 12 329 0 R 13 477 0 R 14 333 0 R 15 336 0 R 16 480 0 R 17 346 0 R 18 482 0 R 19 483 0 R ] >> endobj 439 0 obj [ 434 0 R 388 0 R 388 0 R 388 0 R 388 0 R 388 0 R 388 0 R 388 0 R 388 0 R 388 0 R 388 0 R 386 0 R 386 0 R 386 0 R 386 0 R 386 0 R 386 0 R 386 0 R 386 0 R 386 0 R 386 0 R 386 0 R 386 0 R 386 0 R 434 0 R 382 0 R 382 0 R 382 0 R 384 0 R 384 0 R 384 0 R ] endobj 440 0 obj << /O /Layout /BBox [ 34 34 566 809 ] /Placement /Block /StartIndent -93.55 /EndIndent -70.2 >> endobj 441 0 obj [ 113 0 R 114 0 R 117 0 R 118 0 R 119 0 R 120 0 R 121 0 R 122 0 R 123 0 R 124 0 R 125 0 R 126 0 R 127 0 R 128 0 R 129 0 R 130 0 R 131 0 R 132 0 R 133 0 R 134 0 R 135 0 R 136 0 R 137 0 R 138 0 R 139 0 R 140 0 R 141 0 R 142 0 R 143 0 R 144 0 R 145 0 R 146 0 R 147 0 R 148 0 R 150 0 R 151 0 R 152 0 R 153 0 R ] endobj 442 0 obj [ 154 0 R 157 0 R 155 0 R 159 0 R 155 0 R 161 0 R 160 0 R 163 0 R 160 0 R 165 0 R 164 0 R 166 0 R 164 0 R 168 0 R 167 0 R 169 0 R 167 0 R 171 0 R 170 0 R 172 0 R 170 0 R 174 0 R 173 0 R 175 0 R 173 0 R 177 0 R 176 0 R 178 0 R 176 0 R 180 0 R 179 0 R 181 0 R 179 0 R 183 0 R 182 0 R 184 0 R 182 0 R 186 0 R 185 0 R 187 0 R 185 0 R 189 0 R 188 0 R 190 0 R 188 0 R 192 0 R 191 0 R 193 0 R 191 0 R 194 0 R 195 0 R ] endobj 443 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 444 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 445 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 446 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 447 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 448 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 449 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 450 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 451 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 452 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 453 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 454 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 455 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 456 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 457 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 458 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 459 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 460 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 461 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 462 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 463 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 464 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 465 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 466 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 467 0 obj [ 197 0 R 198 0 R 200 0 R 201 0 R 203 0 R 204 0 R 207 0 R 208 0 R 210 0 R 211 0 R 212 0 R 213 0 R 214 0 R 215 0 R 216 0 R 218 0 R 219 0 R 220 0 R 221 0 R ] endobj 468 0 obj [ 221 0 R ] endobj 469 0 obj [ 222 0 R 223 0 R 224 0 R 226 0 R 227 0 R 228 0 R 230 0 R 232 0 R 233 0 R 235 0 R 236 0 R 237 0 R 239 0 R 240 0 R 241 0 R 242 0 R 244 0 R 245 0 R ] endobj 470 0 obj [ 246 0 R 247 0 R 248 0 R 249 0 R 250 0 R 251 0 R 252 0 R 253 0 R 254 0 R 255 0 R 256 0 R 257 0 R 258 0 R 259 0 R ] endobj 471 0 obj [ 260 0 R 262 0 R 263 0 R 264 0 R 265 0 R ] endobj 472 0 obj [ 266 0 R 267 0 R 268 0 R 269 0 R 270 0 R 272 0 R 273 0 R 274 0 R 275 0 R 276 0 R 277 0 R 278 0 R 279 0 R 280 0 R 281 0 R 282 0 R 283 0 R 284 0 R 285 0 R 286 0 R 287 0 R 288 0 R 289 0 R 290 0 R 291 0 R 292 0 R ] endobj 473 0 obj [ 294 0 R 295 0 R 296 0 R 298 0 R 299 0 R 300 0 R 301 0 R 302 0 R 303 0 R 304 0 R 305 0 R 306 0 R 307 0 R 308 0 R 309 0 R 310 0 R 311 0 R 312 0 R ] endobj 474 0 obj [ 314 0 R 315 0 R 317 0 R 318 0 R 319 0 R 320 0 R 321 0 R 322 0 R 323 0 R 325 0 R 326 0 R ] endobj 475 0 obj [ 327 0 R 328 0 R 330 0 R 328 0 R ] endobj 476 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 477 0 obj [ 331 0 R 332 0 R 334 0 R 332 0 R 335 0 R 337 0 R 335 0 R 338 0 R 339 0 R ] endobj 478 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 479 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 480 0 obj [ 340 0 R 341 0 R 343 0 R 347 0 R 343 0 R 348 0 R 349 0 R 351 0 R 352 0 R 353 0 R 354 0 R 355 0 R 356 0 R ] endobj 481 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 482 0 obj [ 356 0 R 357 0 R 358 0 R 359 0 R 360 0 R 361 0 R 362 0 R 363 0 R 364 0 R 365 0 R 366 0 R 367 0 R ] endobj 483 0 obj [ 368 0 R 369 0 R 370 0 R 371 0 R 372 0 R 374 0 R 376 0 R 378 0 R 380 0 R 381 0 R ] endobj 484 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 74 /Height 105 /ColorSpace 520 0 R /BitsPerComponent 8 /Length 485 0 R >> stream ;M@ρ;\k.ڝc M8ݺfV~@\۶ iǪfEv) PKCrpFE9+|@>zPںlw'o7[jM{M,>DmZi`ʒ$[xd)ȥNТCFEiÿ׳A܂#E)89-ə•hW apUOtٻh8R~#XI65UX]ð.4 %W stjs-bTmh ND$q܊P0wk&y%.Kǰq+/?QE>*'Yeb.mD,>98`r۔ELyRm [&'&g֪1W} M|:QN&*[c$y [\m7M^j0b;%W푝N^%[SwRקq endstream endobj 485 0 obj 519 endobj 486 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 74 /Height 105 /ColorSpace 520 0 R /BitsPerComponent 8 /Length 487 0 R >> stream @+w+ 3 F2ؾ/X#X9M],/gcXS(pvR*ĂG mnA6/ @Ùkp@~zaz3>|:cF`$j{ A*3Gv3L+n2 ʼCkSUNqڼ́_=[ qN endstream endobj 487 0 obj 225 endobj 488 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 74 /Height 105 /ColorSpace 520 0 R /BitsPerComponent 8 /Length 489 0 R >> stream Z1U !l hsFX&> stream -= Ku}OWeגLO^(ḻ)v4 endstream endobj 491 0 obj 41 endobj 492 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 74 /Height 105 /ColorSpace 520 0 R /BitsPerComponent 8 /Length 493 0 R >> stream qR|4!<$M ]x`ɰD:+ &loA> _Hi(qjp_z7ΞAWڃ <`3az ya(a-8JJZWۣkdM2{^- $A> endstream endobj 493 0 obj 369 endobj 494 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 74 /Height 105 /ColorSpace 520 0 R /BitsPerComponent 8 /Length 495 0 R >> stream EȺi\ctȢf i@IK#p`呮b#@Y0yblP VNj2V(78TOzN endstream endobj 495 0 obj 110 endobj 496 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 74 /Height 105 /ColorSpace 520 0 R /BitsPerComponent 8 /Length 497 0 R >> stream }u0 ԕPٽ܆<}"TkeȷOpYp805BMlGIx\4shRwaIehrgk6:O$9֠Kp*;~㉵aZc# p5[(Ru`ysh|!xS"Ky\ } iS e n,9:FԈ};6gw.ղY=އaY`WcsVqj> stream _H#K8f rQ1m<> stream q.+BhBLE$geLZoI77rk808I`> stream ^6<7&϶^Ț'VvJ>S7MԷ ĎHW zʺm;\یlkLKv45F"CC3^@ j40+> stream  !֫4(K,p t6odr4} @0}-߇f&@ n2wI0vxn~0S^R<p Bf%H3Z2 endstream endobj 509 0 obj 137 endobj 510 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 74 /Height 105 /ColorSpace 520 0 R /BitsPerComponent 8 /Length 511 0 R >> stream $4(Md _10Eo䌊א<^[T1?{8s8Fs3',S^Jjj=%UWaj!c}_!Vx>ȍR cevFOJ"%&+g|a%o~`e| hQ(]\Ʉv'62 n `Zc0 _"zZdxO[. endstream endobj 511 0 obj 218 endobj 512 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 74 /Height 105 /ColorSpace 520 0 R /BitsPerComponent 8 /Length 513 0 R >> stream ICD4X7T粴c`iKtAe4m9~NVJmd`O+\ul$Xa.!.b`\ ^8VJ-y}i+GXCm oDNF'RyjxPW$ rB1ʮa}4#_n?w98Oکd2KSb1HeBL#D3 gj;26_"M$A Tnaj:.=eIrxs62iH F*t&?zU'>4drܓmy IZY' Lǂ"wn |m;[T;H\ZŠIҁMY_Ro(5F]jli8#_ٽҶXNmNۧS` endstream endobj 513 0 obj 467 endobj 514 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 74 /Height 105 /ColorSpace 520 0 R /BitsPerComponent 8 /Length 515 0 R >> stream ;Ko5tAum!9Az+ybtj.Qc)Y$e0rf=T+ IY=EՂ#j>LUB`̮'fBXȀ'Djfjy|o.-a)iv4Ơ$)HZ9#+qH#Sn4?ųݴّbFGfyn >vԻ iu=]irGsMPKߛwA`iҐQ)?M.hV{(ʏHH嫴gr9 HS=+e CY|:Fҳ746xŃS7z(pϕF'7Bh 65B,[6mL܁_yHa<.q' endstream endobj 515 0 obj 426 endobj 516 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 74 /Height 105 /ColorSpace 520 0 R /BitsPerComponent 8 /Length 517 0 R >> stream S4ϖJBO m&l}#'v J%[. O ֮1[`˩M2+uOBY`Ժ]AzV\ pW|qta6+Azm2!Ň\<&hQ0?sQf7g0ryTw͸=(# pS endstream endobj 517 0 obj 193 endobj 518 0 obj 481 endobj 519 0 obj << /Filter [ /ASCII85Decode /LZWDecode ] /Length 518 0 R >> stream pĔk-zL,a!y :N5KRQ.!etDB/۽^AQ {UNd}'Cyv1}::ROZxCN7>/v̭kparHuhYeaW>h\|'gkc]Jh3Q*z-\^A]fЩ[]u_=w:* ?`bin y8 <ǒ !6G3rZ= s}4jE;XgῘFLjBy\'lFYU"vy^~FtyБQybE lhȋOEܼ^KEΣ wᰑ^2@٪7AKX>GxEZc5*A,&is]GzȤ[ b ~qUܙ o[j@ƤFA-sPs*W|E ' endstream endobj 520 0 obj [ /Indexed /DeviceRGB 255 519 0 R ] endobj 521 0 obj << /S /D >> endobj 522 0 obj << /Nums [ 0 521 0 R ] >> endobj 523 0 obj << /Producer (Y*:uss b2s\nV) /Author ([&~# &Ks) /Creator (Y*:-@J!8`s) /ModDate (uЭP/`P44ٸ* p) /Title (B1 :|I@fu6f \\ҏ҂૴) /CreationDate (uЭP/`P44ٹ* p) >> endobj 524 0 obj << /Type /Metadata /Subtype /XML /Length 1147 >> stream 8?+uǙGfG0Vlh5LaE6]7 # >H/਼\޺r\(Qk^%`|Tn<萃]fHTL:KH'&a~bt28 ?Z@,vѪd _F-Q7Y,p/ tLZeB蓼?H"2iGyJ3𔙂%:fX]@˛g0_F\|T˻ @*wwJ&b(nгn6$(A1d_IW,P+]Z KmjSu!8!FlL#|+A`pk6 7t玏ݕis  + iM`r&IbvtGXl ej ?ifIw=0n\fPk@1 3!5~lU:Lx{>t~VzO{DPVopB܆'h1ypV S1Lw9܏aTr<7$jת%VRcry]YX܊AWgUNdLn}L5hgVV3S8,Lh[5-HlZ#h "P"O}!3OL"NLEF{j]׎DVWǬ]f0;Bus҂(^~4 um<İ(Z3>*wu23D^rt~d V,*11zH<P| y*y$v:(p\*(i'J0^T&_q}*eYΫ5.#g q{&* .DlpoWW@KsmqvJ~cDWz{~ Ƿ/V3*cfdiG ]zʧ3 ԓ9P4=zO8'[5xe .~j)[}:撸-i=ֆ/qQY(n:b3o3H.Қ܋ðX/]QB,d<(p endstream endobj 525 0 obj << /Type /Pages /Kids [ 532 0 R 1 0 R 4 0 R 32 0 R 35 0 R 38 0 R 41 0 R 44 0 R 47 0 R 50 0 R ] /Count 10 /Parent 526 0 R >> endobj 526 0 obj << /Type /Pages /Kids [ 525 0 R 527 0 R ] /Count 17 >> endobj 527 0 obj << /Type /Pages /Kids [ 53 0 R 56 0 R 59 0 R 63 0 R 67 0 R 71 0 R 74 0 R ] /Count 7 /Parent 526 0 R >> endobj xref 0 528 0000000000 65535 f 0000278101 00000 n 0000278437 00000 n 0000279980 00000 n 0000280001 00000 n 0000280352 00000 n 0000280454 00000 n 0000280590 00000 n 0000280725 00000 n 0000280860 00000 n 0000280998 00000 n 0000281133 00000 n 0000281269 00000 n 0000281407 00000 n 0000281546 00000 n 0000281685 00000 n 0000281824 00000 n 0000281963 00000 n 0000282102 00000 n 0000284482 00000 n 0000284504 00000 n 0000284569 00000 n 0000284634 00000 n 0000284699 00000 n 0000284764 00000 n 0000284829 00000 n 0000284894 00000 n 0000284959 00000 n 0000285024 00000 n 0000285089 00000 n 0000285154 00000 n 0000285219 00000 n 0000285284 00000 n 0000285455 00000 n 0000285498 00000 n 0000285580 00000 n 0000285917 00000 n 0000289282 00000 n 0000289304 00000 n 0000289641 00000 n 0000290542 00000 n 0000290563 00000 n 0000290900 00000 n 0000293466 00000 n 0000293488 00000 n 0000293825 00000 n 0000297555 00000 n 0000297577 00000 n 0000297914 00000 n 0000298709 00000 n 0000298730 00000 n 0000299067 00000 n 0000300881 00000 n 0000300903 00000 n 0000301240 00000 n 0000302253 00000 n 0000302274 00000 n 0000302612 00000 n 0000304443 00000 n 0000304465 00000 n 0000304819 00000 n 0000304848 00000 n 0000305799 00000 n 0000305820 00000 n 0000306174 00000 n 0000306210 00000 n 0000308505 00000 n 0000308527 00000 n 0000308894 00000 n 0000308923 00000 n 0000314366 00000 n 0000314388 00000 n 0000314727 00000 n 0000319097 00000 n 0000319119 00000 n 0000319458 00000 n 0000320467 00000 n 0000320488 00000 n 0000320641 00000 n 0000320829 00000 n 0000321331 00000 n 0000321781 00000 n 0000321986 00000 n 0000328933 00000 n 0000329146 00000 n 0000337339 00000 n 0000337564 00000 n 0000361533 00000 n 0000361776 00000 n 0000369986 00000 n 0000370202 00000 n 0000370497 00000 n 0000370654 00000 n 0000370755 00000 n 0000370915 00000 n 0000370978 00000 n 0000371138 00000 n 0000371201 00000 n 0000371361 00000 n 0000371449 00000 n 0000371515 00000 n 0000371668 00000 n 0000371787 00000 n 0000371909 00000 n 0000372042 00000 n 0000372172 00000 n 0000372309 00000 n 0000372442 00000 n 0000372620 00000 n 0000372747 00000 n 0000372878 00000 n 0000373001 00000 n 0000373120 00000 n 0000373787 00000 n 0000373871 00000 n 0000373955 00000 n 0000374473 00000 n 0000374625 00000 n 0000374709 00000 n 0000374793 00000 n 0000374877 00000 n 0000374961 00000 n 0000375045 00000 n 0000375129 00000 n 0000375213 00000 n 0000375297 00000 n 0000375382 00000 n 0000375467 00000 n 0000375552 00000 n 0000375637 00000 n 0000375722 00000 n 0000375807 00000 n 0000375892 00000 n 0000375977 00000 n 0000376062 00000 n 0000376147 00000 n 0000376232 00000 n 0000376317 00000 n 0000376402 00000 n 0000376487 00000 n 0000376572 00000 n 0000376657 00000 n 0000376742 00000 n 0000376827 00000 n 0000376912 00000 n 0000376997 00000 n 0000377082 00000 n 0000377167 00000 n 0000377250 00000 n 0000377333 00000 n 0000377485 00000 n 0000377570 00000 n 0000377655 00000 n 0000377740 00000 n 0000377825 00000 n 0000377965 00000 n 0000378072 00000 n 0000378238 00000 n 0000378319 00000 n 0000378474 00000 n 0000378555 00000 n 0000378662 00000 n 0000378743 00000 n 0000378902 00000 n 0000378983 00000 n 0000379092 00000 n 0000379173 00000 n 0000379255 00000 n 0000379364 00000 n 0000379446 00000 n 0000379528 00000 n 0000379637 00000 n 0000379719 00000 n 0000379801 00000 n 0000379910 00000 n 0000379992 00000 n 0000380074 00000 n 0000380183 00000 n 0000380265 00000 n 0000380347 00000 n 0000380456 00000 n 0000380538 00000 n 0000380620 00000 n 0000380729 00000 n 0000380811 00000 n 0000380893 00000 n 0000381002 00000 n 0000381084 00000 n 0000381166 00000 n 0000381275 00000 n 0000381357 00000 n 0000381439 00000 n 0000381548 00000 n 0000381630 00000 n 0000381712 00000 n 0000381798 00000 n 0000381895 00000 n 0000382062 00000 n 0000382154 00000 n 0000382251 00000 n 0000382424 00000 n 0000382516 00000 n 0000382613 00000 n 0000382785 00000 n 0000382882 00000 n 0000383005 00000 n 0000383059 00000 n 0000383211 00000 n 0000383306 00000 n 0000383401 00000 n 0000383557 00000 n 0000383652 00000 n 0000383747 00000 n 0000383843 00000 n 0000383939 00000 n 0000384035 00000 n 0000384131 00000 n 0000384255 00000 n 0000384309 00000 n 0000384407 00000 n 0000384505 00000 n 0000384598 00000 n 0000384736 00000 n 0000384828 00000 n 0000384925 00000 n 0000385033 00000 n 0000385087 00000 n 0000385184 00000 n 0000385279 00000 n 0000385380 00000 n 0000385553 00000 n 0000385648 00000 n 0000385806 00000 n 0000385907 00000 n 0000386015 00000 n 0000386069 00000 n 0000386166 00000 n 0000386264 00000 n 0000386366 00000 n 0000386539 00000 n 0000386637 00000 n 0000386739 00000 n 0000386831 00000 n 0000386933 00000 n 0000387106 00000 n 0000387198 00000 n 0000387300 00000 n 0000387397 00000 n 0000387498 00000 n 0000387589 00000 n 0000387690 00000 n 0000387787 00000 n 0000387888 00000 n 0000387979 00000 n 0000388080 00000 n 0000388181 00000 n 0000388272 00000 n 0000388374 00000 n 0000388476 00000 n 0000388578 00000 n 0000388676 00000 n 0000388784 00000 n 0000388838 00000 n 0000388935 00000 n 0000389036 00000 n 0000389133 00000 n 0000389234 00000 n 0000389326 00000 n 0000389423 00000 n 0000389520 00000 n 0000389617 00000 n 0000389740 00000 n 0000389794 00000 n 0000389889 00000 n 0000389984 00000 n 0000390079 00000 n 0000390174 00000 n 0000390269 00000 n 0000390365 00000 n 0000390461 00000 n 0000390557 00000 n 0000390653 00000 n 0000390749 00000 n 0000390845 00000 n 0000390941 00000 n 0000391037 00000 n 0000391133 00000 n 0000391229 00000 n 0000391325 00000 n 0000391421 00000 n 0000391517 00000 n 0000391613 00000 n 0000391709 00000 n 0000391833 00000 n 0000391887 00000 n 0000391979 00000 n 0000392076 00000 n 0000392199 00000 n 0000392253 00000 n 0000392348 00000 n 0000392443 00000 n 0000392538 00000 n 0000392633 00000 n 0000392728 00000 n 0000392823 00000 n 0000392918 00000 n 0000393014 00000 n 0000393110 00000 n 0000393206 00000 n 0000393302 00000 n 0000393398 00000 n 0000393494 00000 n 0000393590 00000 n 0000393714 00000 n 0000393768 00000 n 0000393860 00000 n 0000393983 00000 n 0000394037 00000 n 0000394132 00000 n 0000394227 00000 n 0000394322 00000 n 0000394417 00000 n 0000394512 00000 n 0000394607 00000 n 0000394730 00000 n 0000394784 00000 n 0000394881 00000 n 0000394979 00000 n 0000395071 00000 n 0000395182 00000 n 0000395286 00000 n 0000395368 00000 n 0000395460 00000 n 0000395571 00000 n 0000395675 00000 n 0000395757 00000 n 0000395868 00000 n 0000395972 00000 n 0000396054 00000 n 0000396151 00000 n 0000396248 00000 n 0000396345 00000 n 0000396448 00000 n 0000396601 00000 n 0000396710 00000 n 0000396863 00000 n 0000397019 00000 n 0000397123 00000 n 0000397205 00000 n 0000397294 00000 n 0000397389 00000 n 0000397557 00000 n 0000397646 00000 n 0000397741 00000 n 0000397830 00000 n 0000397926 00000 n 0000398016 00000 n 0000398152 00000 n 0000398247 00000 n 0000398336 00000 n 0000398431 00000 n 0000398520 00000 n 0000398615 00000 n 0000398704 00000 n 0000398799 00000 n 0000398894 00000 n 0000398989 00000 n 0000399085 00000 n 0000399181 00000 n 0000399276 00000 n 0000399365 00000 n 0000399460 00000 n 0000399555 00000 n 0000399666 00000 n 0000399720 00000 n 0000399831 00000 n 0000399885 00000 n 0000399996 00000 n 0000400050 00000 n 0000400161 00000 n 0000400215 00000 n 0000400310 00000 n 0000400407 00000 n 0000400518 00000 n 0000400610 00000 n 0000400721 00000 n 0000400813 00000 n 0000400954 00000 n 0000401048 00000 n 0000401171 00000 n 0000401263 00000 n 0000401659 00000 n 0000401738 00000 n 0000403011 00000 n 0000403170 00000 n 0000403226 00000 n 0000403283 00000 n 0000403339 00000 n 0000403396 00000 n 0000403452 00000 n 0000403509 00000 n 0000403565 00000 n 0000403622 00000 n 0000403678 00000 n 0000403735 00000 n 0000403791 00000 n 0000403848 00000 n 0000403904 00000 n 0000403961 00000 n 0000404017 00000 n 0000404074 00000 n 0000404130 00000 n 0000404187 00000 n 0000404243 00000 n 0000404300 00000 n 0000404356 00000 n 0000404413 00000 n 0000404469 00000 n 0000404526 00000 n 0000404582 00000 n 0000404639 00000 n 0000404695 00000 n 0000404752 00000 n 0000404808 00000 n 0000404865 00000 n 0000404921 00000 n 0000404978 00000 n 0000405034 00000 n 0000405091 00000 n 0000405147 00000 n 0000405204 00000 n 0000405260 00000 n 0000405317 00000 n 0000405373 00000 n 0000405430 00000 n 0000405524 00000 n 0000405616 00000 n 0000405708 00000 n 0000405835 00000 n 0000406084 00000 n 0000406358 00000 n 0000406478 00000 n 0000406809 00000 n 0000407246 00000 n 0000407315 00000 n 0000407384 00000 n 0000407453 00000 n 0000407522 00000 n 0000407591 00000 n 0000407660 00000 n 0000407729 00000 n 0000407798 00000 n 0000407867 00000 n 0000407936 00000 n 0000408005 00000 n 0000408074 00000 n 0000408143 00000 n 0000408212 00000 n 0000408281 00000 n 0000408350 00000 n 0000408419 00000 n 0000408488 00000 n 0000408557 00000 n 0000408626 00000 n 0000408695 00000 n 0000408764 00000 n 0000408833 00000 n 0000408902 00000 n 0000409079 00000 n 0000409110 00000 n 0000409279 00000 n 0000409415 00000 n 0000409478 00000 n 0000409712 00000 n 0000409881 00000 n 0000409993 00000 n 0000410048 00000 n 0000410117 00000 n 0000410213 00000 n 0000410282 00000 n 0000410351 00000 n 0000410479 00000 n 0000410548 00000 n 0000410668 00000 n 0000410772 00000 n 0000411453 00000 n 0000411475 00000 n 0000411862 00000 n 0000411884 00000 n 0000412243 00000 n 0000412265 00000 n 0000412468 00000 n 0000412489 00000 n 0000413020 00000 n 0000413042 00000 n 0000413314 00000 n 0000413336 00000 n 0000413784 00000 n 0000413806 00000 n 0000414310 00000 n 0000414332 00000 n 0000414620 00000 n 0000414642 00000 n 0000415023 00000 n 0000415045 00000 n 0000415306 00000 n 0000415327 00000 n 0000415699 00000 n 0000415721 00000 n 0000416020 00000 n 0000416042 00000 n 0000416422 00000 n 0000416444 00000 n 0000417073 00000 n 0000417095 00000 n 0000417683 00000 n 0000417705 00000 n 0000418060 00000 n 0000418082 00000 n 0000418104 00000 n 0000418682 00000 n 0000418737 00000 n 0000418769 00000 n 0000418815 00000 n 0000419084 00000 n 0000420317 00000 n 0000420465 00000 n 0000420542 00000 n trailer << /Size 528 /ID[<5b1ba29f2e13045ff84e8bffdff3158e><5c9b3f93499fd287c51c66fab88c06be>] >> startxref 173 %%EOF egenix-mx-base-3.2.7/mx/Stack/mxStack/0000755000175000017500000000000012251446113017312 5ustar lemburglemburgegenix-mx-base-3.2.7/mx/Stack/mxStack/COPYRIGHT0000664000175000017500000000176211552064177020626 0ustar lemburglemburg --------------------------------------------------------------------- COPYRIGHT NOTICE --------------------------------------------------------------------- Copyright (c) 1997-2000, IKDS Marc-Andre Lemburg; mailto:mal@lemburg.com Copyright (c) 2000-2011, eGenix.com Software GmbH; mailto:info@egenix.com All Rights Reserved. This software is protected by copyright and other intellectual property laws and by international treaties. It may only be used under the conditions and terms of the eGenix.com Public License Agreement. You should have received a copy of the eGenix.com Public License Agreement with this software (usually in the file LICENSE located in the package's or software's main directory). Please write to licenses@egenix.com to obtain a copy in case you should not have received a copy. egenix-mx-base-3.2.7/mx/Stack/mxStack/LICENSE0000664000175000017500000001075307620177404020337 0ustar lemburglemburg________________________________________________________________________ EGENIX.COM PUBLIC LICENSE AGREEMENT VERSION 1.1.0 ________________________________________________________________________ 1. Introduction This "License Agreement" is between eGenix.com Software, Skills and Services GmbH ("eGenix.com"), having an office at Pastor-Loeh-Str. 48, D-40764 Langenfeld, Germany, and the Individual or Organization ("Licensee") accessing and otherwise using this software in source or binary form and its associated documentation ("the Software"). 2. License Subject to the terms and conditions of this eGenix.com Public License Agreement, eGenix.com hereby grants Licensee a non-exclusive, royalty-free, world-wide license to reproduce, analyze, test, perform and/or display publicly, prepare derivative works, distribute, and otherwise use the Software alone or in any derivative version, provided, however, that the eGenix.com Public License Agreement is retained in the Software, or in any derivative version of the Software prepared by Licensee. 3. NO WARRANTY eGenix.com is making the Software available to Licensee on an "AS IS" basis. SUBJECT TO ANY STATUTORY WARRANTIES WHICH CAN NOT BE EXCLUDED, EGENIX.COM MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, EGENIX.COM MAKES NO AND DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF THE SOFTWARE WILL NOT INFRINGE ANY THIRD PARTY RIGHTS. 4. LIMITATION OF LIABILITY EGENIX.COM SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF THE SOFTWARE FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS (INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF BUSINESS PROFITS, BUSINESS INTERRUPTION, LOSS OF BUSINESS INFORMATION, OR OTHER PECUNIARY LOSS) AS A RESULT OF USING, MODIFYING OR DISTRIBUTING THE SOFTWARE, OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO THE ABOVE EXCLUSION OR LIMITATION MAY NOT APPLY TO LICENSEE. 5. Termination This License Agreement will automatically terminate upon a material breach of its terms and conditions. 6. Third Party Rights Any software or documentation in source or binary form provided along with the Software that is associated with a separate license agreement is licensed to Licensee under the terms of that license agreement. This License Agreement does not apply to those portions of the Software. Copies of the third party licenses are included in the Software Distribution. 7. General Nothing in this License Agreement affects any statutory rights of consumers that cannot be waived or limited by contract. Nothing in this License Agreement shall be deemed to create any relationship of agency, partnership, or joint venture between eGenix.com and Licensee. If any provision of this License Agreement shall be unlawful, void, or for any reason unenforceable, such provision shall be modified to the extent necessary to render it enforceable without losing its intent, or, if no such modification is possible, be severed from this License Agreement and shall not affect the validity and enforceability of the remaining provisions of this License Agreement. This License Agreement shall be governed by and interpreted in all respects by the law of Germany, excluding conflict of law provisions. It shall not be governed by the United Nations Convention on Contracts for International Sale of Goods. This License Agreement does not grant permission to use eGenix.com trademarks or trade names in a trademark sense to endorse or promote products or services of Licensee, or any third party. The controlling language of this License Agreement is English. If Licensee has received a translation into another language, it has been provided for Licensee's convenience only. 8. Agreement By downloading, copying, installing or otherwise using the Software, Licensee agrees to be bound by the terms and conditions of this License Agreement. For question regarding this License Agreement, please write to: eGenix.com Software, Skills and Services GmbH Pastor-Loeh-Str. 48 D-40764 Langenfeld Germany egenix-mx-base-3.2.7/mx/Stack/mxStack/Makefile.pre.in0000664000175000017500000002445111136427173022162 0ustar lemburglemburg# Universal Unix Makefile for Python extensions # ============================================= # Short Instructions # ------------------ # 1. Build and install Python (1.5 or newer). # 2. "make -f Makefile.pre.in boot" # 3. "make" # You should now have a shared library. # Long Instructions # ----------------- # Build *and install* the basic Python 1.5 distribution. See the # Python README for instructions. (This version of Makefile.pre.in # only withs with Python 1.5, alpha 3 or newer.) # Create a file Setup.in for your extension. This file follows the # format of the Modules/Setup.dist file; see the instructions there. # For a simple module called "spam" on file "spammodule.c", it can # contain a single line: # spam spammodule.c # You can build as many modules as you want in the same directory -- # just have a separate line for each of them in the Setup.in file. # If you want to build your extension as a shared library, insert a # line containing just the string # *shared* # at the top of your Setup.in file. # Note that the build process copies Setup.in to Setup, and then works # with Setup. It doesn't overwrite Setup when Setup.in is changed, so # while you're in the process of debugging your Setup.in file, you may # want to edit Setup instead, and copy it back to Setup.in later. # (All this is done so you can distribute your extension easily and # someone else can select the modules they actually want to build by # commenting out lines in the Setup file, without editing the # original. Editing Setup is also used to specify nonstandard # locations for include or library files.) # Copy this file (Misc/Makefile.pre.in) to the directory containing # your extension. # Run "make -f Makefile.pre.in boot". This creates Makefile # (producing Makefile.pre and sedscript as intermediate files) and # config.c, incorporating the values for sys.prefix, sys.exec_prefix # and sys.version from the installed Python binary. For this to work, # the python binary must be on your path. If this fails, try # make -f Makefile.pre.in Makefile VERSION=1.5 installdir= # where is the prefix used to install Python for installdir # (and possibly similar for exec_installdir=). # Note: "make boot" implies "make clobber" -- it assumes that when you # bootstrap you may have changed platforms so it removes all previous # output files. # If you are building your extension as a shared library (your # Setup.in file starts with *shared*), run "make" or "make sharedmods" # to build the shared library files. If you are building a statically # linked Python binary (the only solution of your platform doesn't # support shared libraries, and sometimes handy if you want to # distribute or install the resulting Python binary), run "make # python". # Note: Each time you edit Makefile.pre.in or Setup, you must run # "make Makefile" before running "make". # Hint: if you want to use VPATH, you can start in an empty # subdirectory and say (e.g.): # make -f ../Makefile.pre.in boot srcdir=.. VPATH=.. # === Bootstrap variables (edited through "make boot") === # The prefix used by "make inclinstall libainstall" of core python installdir= /usr/local # The exec_prefix used by the same exec_installdir=$(installdir) # Source directory and VPATH in case you want to use VPATH. # (You will have to edit these two lines yourself -- there is no # automatic support as the Makefile is not generated by # config.status.) srcdir= . VPATH= . # === Variables that you may want to customize (rarely) === # (Static) build target TARGET= python # Installed python binary (used only by boot target) PYTHON= python # Add more -I and -D options here CFLAGS= $(OPT) -I$(INCLUDEPY) -I$(EXECINCLUDEPY) $(DEFS) # These two variables can be set in Setup to merge extensions. # See example[23]. BASELIB= BASESETUP= # === Variables set by makesetup === MODOBJS= _MODOBJS_ MODLIBS= _MODLIBS_ # === Definitions added by makesetup === # === Variables from configure (through sedscript) === VERSION= @VERSION@ CC= @CC@ CXX= @CXX@ MAINCC= @MAINCC@ LINKCC= @LINKCC@ SGI_ABI= @SGI_ABI@ OPT= @OPT@ CPPFLAGS= @CPPFLAGS@ LDFLAGS= @LDFLAGS@ LDLAST= @LDLAST@ DEFS= LIBS= @LIBS@ LIBM= @LIBM@ LIBC= @LIBC@ RANLIB= @RANLIB@ MACHDEP= @MACHDEP@ SO= @SO@ LDSHARED= @LDSHARED@ BLDSHARED= @BLDSHARED@ CCSHARED= @CCSHARED@ LINKFORSHARED= @LINKFORSHARED@ CXX= @CXX@ # Install prefix for architecture-independent files prefix= /usr/local # Install prefix for architecture-dependent files exec_prefix= $(prefix) # Uncomment the following two lines for AIX #LINKCC= $(LIBPL)/makexp_aix $(LIBPL)/python.exp "" $(LIBRARY); $(PURIFY) $(CC) #LDSHARED= $(LIBPL)/ld_so_aix $(CC) -bI:$(LIBPL)/python.exp # === Fixed definitions === # Shell used by make (some versions default to the login shell, which is bad) SHELL= /bin/sh # Expanded directories BINDIR= $(exec_installdir)/bin LIBDIR= $(exec_prefix)/lib MANDIR= $(installdir)/man INCLUDEDIR= $(installdir)/include SCRIPTDIR= $(prefix)/lib # Detailed destination directories BINLIBDEST= $(LIBDIR)/python$(VERSION) LIBDEST= $(SCRIPTDIR)/python$(VERSION) INCLUDEPY= $(INCLUDEDIR)/python$(VERSION) EXECINCLUDEPY= $(exec_installdir)/include/python$(VERSION) LIBP= $(exec_installdir)/lib/python$(VERSION) DESTSHARED= $(BINLIBDEST)/site-packages LIBPL= $(LIBP)/config PYTHONLIBS= $(LIBPL)/libpython$(VERSION).a MAKESETUP= $(LIBPL)/makesetup MAKEFILE= $(LIBPL)/Makefile CONFIGC= $(LIBPL)/config.c CONFIGCIN= $(LIBPL)/config.c.in SETUP= $(LIBPL)/Setup.config $(LIBPL)/Setup.local $(LIBPL)/Setup SYSLIBS= $(LIBM) $(LIBC) ADDOBJS= $(LIBPL)/python.o config.o # Portable install script (configure doesn't always guess right) INSTALL= $(LIBPL)/install-sh -c # Shared libraries must be installed with executable mode on some systems; # rather than figuring out exactly which, we always give them executable mode. # Also, making them read-only seems to be a good idea... INSTALL_SHARED= ${INSTALL} -m 555 # === Fixed rules === # Default target. This builds shared libraries only default: sharedmods # Build everything all: static sharedmods # Build shared libraries from our extension modules sharedmods: $(SHAREDMODS) # Build a static Python binary containing our extension modules static: $(TARGET) $(TARGET): $(ADDOBJS) lib.a $(PYTHONLIBS) Makefile $(BASELIB) $(LINKCC) $(LDFLAGS) $(LINKFORSHARED) \ $(ADDOBJS) lib.a $(PYTHONLIBS) \ $(LINKPATH) $(BASELIB) $(MODLIBS) $(LIBS) $(SYSLIBS) \ -o $(TARGET) $(LDLAST) install: sharedmods if test ! -d $(DESTSHARED) ; then \ mkdir $(DESTSHARED) ; else true ; fi -for i in X $(SHAREDMODS); do \ if test $$i != X; \ then $(INSTALL_SHARED) $$i $(DESTSHARED)/$$i; \ fi; \ done # Build the library containing our extension modules lib.a: $(MODOBJS) -rm -f lib.a ar cr lib.a $(MODOBJS) -$(RANLIB) lib.a # This runs makesetup *twice* to use the BASESETUP definition from Setup config.c Makefile: Makefile.pre Setup $(BASESETUP) $(MAKESETUP) $(MAKESETUP) \ -m Makefile.pre -c $(CONFIGCIN) Setup -n $(BASESETUP) $(SETUP) $(MAKE) -f Makefile do-it-again # Internal target to run makesetup for the second time do-it-again: $(MAKESETUP) \ -m Makefile.pre -c $(CONFIGCIN) Setup -n $(BASESETUP) $(SETUP) # Make config.o from the config.c created by makesetup config.o: config.c $(CC) $(CFLAGS) -c config.c # Setup is copied from Setup.in *only* if it doesn't yet exist Setup: cp $(srcdir)/Setup.in Setup # Make the intermediate Makefile.pre from Makefile.pre.in Makefile.pre: Makefile.pre.in sedscript sed -f sedscript $(srcdir)/Makefile.pre.in >Makefile.pre # Shortcuts to make the sed arguments on one line P=prefix E=exec_prefix H=Generated automatically from Makefile.pre.in by sedscript. L=LINKFORSHARED # Make the sed script used to create Makefile.pre from Makefile.pre.in sedscript: $(MAKEFILE) sed -n \ -e '1s/.*/1i\\/p' \ -e '2s%.*%# $H%p' \ -e '/^VERSION=/s/^VERSION=[ ]*\(.*\)/s%@VERSION[@]%\1%/p' \ -e '/^CC=/s/^CC=[ ]*\(.*\)/s%@CC[@]%\1%/p' \ -e '/^CXX=/s/^CXX=[ ]*\(.*\)/s%@CXX[@]%\1%/p' \ -e '/^DEFS=/s/^DEFS=[ ]*\(.*\)/s%@DEFS[@]%\1%/p' \ -e '/^MAINCC=/s/^MAINCC=[ ]*\(.*\)/s%@MAINCC[@]%\1%/p' \ -e '/^LINKCC=/s/^LINKCC=[ ]*\(.*\)/s%@LINKCC[@]%\1%/p' \ -e '/^OPT=/s/^OPT=[ ]*\(.*\)/s%@OPT[@]%\1%/p' \ -e '/^CPPFLAGS=/s/^CPPFLAGS=[ ]*\(.*\)/s%@CPPFLAGS[@]%\1%/p' \ -e '/^LDFLAGS=/s/^LDFLAGS=[ ]*\(.*\)/s%@LDFLAGS[@]%\1%/p' \ -e '/^LDLAST=/s/^LDLAST=[ ]*\(.*\)/s%@LDLAST[@]%\1%/p' \ -e '/^DEFS=/s/^DEFS=[ ]*\(.*\)/s%@DEFS[@]%\1%/p' \ -e '/^LIBS=/s/^LIBS=[ ]*\(.*\)/s%@LIBS[@]%\1%/p' \ -e '/^LIBM=/s/^LIBM=[ ]*\(.*\)/s%@LIBM[@]%\1%/p' \ -e '/^LIBC=/s/^LIBC=[ ]*\(.*\)/s%@LIBC[@]%\1%/p' \ -e '/^RANLIB=/s/^RANLIB=[ ]*\(.*\)/s%@RANLIB[@]%\1%/p' \ -e '/^MACHDEP=/s/^MACHDEP=[ ]*\(.*\)/s%@MACHDEP[@]%\1%/p' \ -e '/^SO=/s/^SO=[ ]*\(.*\)/s%@SO[@]%\1%/p' \ -e '/^LDSHARED=/s/^LDSHARED=[ ]*\(.*\)/s%@LDSHARED[@]%\1%/p' \ -e '/^BLDSHARED=/s/^BLDSHARED=[ ]*\(.*\)/s%@BLDSHARED[@]%\1%/p' \ -e '/^CCSHARED=/s/^CCSHARED=[ ]*\(.*\)/s%@CCSHARED[@]%\1%/p' \ -e '/^SGI_ABI=/s/^SGI_ABI=[ ]*\(.*\)/s%@SGI_ABI[@]%\1%/p' \ -e '/^$L=/s/^$L=[ ]*\(.*\)/s%@$L[@]%\1%/p' \ -e '/^$P=/s/^$P=\(.*\)/s%^$P=.*%$P=\1%/p' \ -e '/^$E=/s/^$E=\(.*\)/s%^$E=.*%$E=\1%/p' \ $(MAKEFILE) >sedscript echo "/^#@SET_CCC@/d" >>sedscript echo "/^installdir=/s%=.*%= $(installdir)%" >>sedscript echo "/^exec_installdir=/s%=.*%=$(exec_installdir)%" >>sedscript echo "/^srcdir=/s%=.*%= $(srcdir)%" >>sedscript echo "/^VPATH=/s%=.*%= $(VPATH)%" >>sedscript echo "/^LINKPATH=/s%=.*%= $(LINKPATH)%" >>sedscript echo "/^BASELIB=/s%=.*%= $(BASELIB)%" >>sedscript echo "/^BASESETUP=/s%=.*%= $(BASESETUP)%" >>sedscript # Bootstrap target boot: clobber VERSION=`$(PYTHON) -c "import sys; print sys.version[:3]"`; \ installdir=`$(PYTHON) -c "import sys; print sys.prefix"`; \ exec_installdir=`$(PYTHON) -c "import sys; print sys.exec_prefix"`; \ $(MAKE) -f $(srcdir)/Makefile.pre.in VPATH=$(VPATH) srcdir=$(srcdir) \ VERSION=$$VERSION \ installdir=$$installdir \ exec_installdir=$$exec_installdir \ Makefile # Handy target to remove intermediate files and backups clean: -rm -f *.o *~ # Handy target to remove everything that is easily regenerated clobber: clean -rm -f *.a tags TAGS config.c Makefile.pre $(TARGET) sedscript -rm -f *.so *.sl so_locations # Handy target to remove everything you don't want to distribute distclean: clobber -rm -f Makefile Setup egenix-mx-base-3.2.7/mx/Stack/mxStack/Setup.in0000664000175000017500000000011606451226051020744 0ustar lemburglemburg# Build extensions shared: *shared* # # # mxStack module # mxStack mxStack.c egenix-mx-base-3.2.7/mx/Stack/mxStack/__init__.py0000664000175000017500000000006607315370436021440 0ustar lemburglemburgfrom mxStack import * from mxStack import __version__ egenix-mx-base-3.2.7/mx/Stack/mxStack/ld_so_aix0000775000175000017500000001351507057236756021232 0ustar lemburglemburg#!/bin/sh # # ======================================================================== # FILE: ld_so_aix # TYPE: executable, uses makexp_aix # SYSTEM: AIX # # DESCRIPTION: Creates a shareable .o from a set of pre-compiled # (unshared) .o files # # USAGE: ld_so_aix [CC] [arguments] # # ARGUMENTS: Same as for "ld". The following arguments are processed # or supplied by this script (those marked with an asterisk # can be overriden from command line): # # Argument Default value # (*) -o [OutputFileName] -o shr.o # (*) -e [EntryPointLabel] -e init[OutputBaseName] # (*) -bE:[ExportFile] -bE:[OutputBaseName].exp # (*) -bI:[ImportFile] -bI:./python.exp # -bM:[ModuleType] -bM:SRE # -bhalt:[Number] -bhalt:4 # -T[Number] -T512 # -H[Number] -H512 # -lm # # The compiler specific ("-lc" or "-lc_r", "-lpthreads",...) # arguments will be automatically passed to "ld" according # to the CC command provided as a first argument to this # script. Usually, the same CC command was used to produce # the pre-compiled .o file(s). # # NOTES: 1. Since "ld_so_aix" was originally written for building # shared modules for the Python interpreter, the -e and # -bI default values match Python's conventions. In # Python, the entry point for a shared module is based # on the module's name (e.g., the "mathmodule" will # expect an entry point of "initmath"). # 2. The script accepts multiple .o or .a input files and # creates a single (shared) output file. The export list # that is created is based on the output file's basename # with the suffix ".exp". # 3. The resulting shared object file is left in the # current directory. # 4. Uncommenting the "echo" lines gives detailed output # about the commands executed in the script. # # # HISTORY: Oct-1996 -- Support added for multiple .o files -- # -- and optional arguments processing. -- # Chris Myers (myers@tc.cornell.edu), Keith Kwok # (kkwok@tc.cornell.edu) and Vladimir Marangozov # # Aug-6-1996 -- Take care of the compiler specific -- # -- args by leaving CC to invoke "ld". -- # Vladimir Marangozov # # Jul-1-1996 -- Make sure to use /usr/ccs/bin/ld -- # -- Use makexp_aix for the export list. -- # Vladimir Marangozov (Vladimir.Marangozov@imag.fr) # # Manus Hand (mhand@csn.net) -- Initial code -- 6/24/96 # ======================================================================== # usage="Usage: ld_so_aix [CC command] [ld arguments]" if test ! -n "$*"; then echo $usage; exit 2 fi makexp=`dirname $0`/makexp_aix # Check for existence of compiler. CC=$1; shift whichcc=`which $CC` if test ! -x "$whichcc"; then echo "ld_so_aix: Compiler '$CC' not found; exiting." exit 2 fi if test ! -n "$*"; then echo $usage; exit 2 fi # Default import file for Python # Can be overriden by providing a -bI: argument. impfile="./python.exp" # Parse arguments while test -n "$1" do case "$1" in -e | -Wl,-e) if test -z "$2"; then echo "ld_so_aix: The -e flag needs a parameter; exiting."; exit 2 else shift; entry=$1 fi ;; -e* | -Wl,-e*) entry=`echo $1 | sed -e "s/-Wl,//" -e "s/-e//"` ;; -o) if test -z "$2"; then echo "ld_so_aix: The -o flag needs a parameter; exiting."; exit 2 else shift; objfile=$1 fi ;; -o*) objfile=`echo $1 | sed "s/-o//"` ;; -bI:* | -Wl,-bI:*) impfile=`echo $1 | sed -e "s/-Wl,//" -e "s/-bI://"` ;; -bE:* | -Wl,-bE:*) expfile=`echo $1 | sed -e "s/-Wl,//" -e "s/-bE://"` ;; *.o | *.a) objs="$objs $1" args="$args $1" ;; -bM:* | -Wl,-bM:* | -H* | -Wl,-H* | -T* | -Wl,-T* | -lm) ;; *) args="$args $1" ;; esac shift done if test -z "$objs"; then echo "ld_so_aix: No input files; exiting." exit 2 elif test ! -r "$impfile"; then echo "ld_so_aix: Import file '$impfile' not found or not readable; exiting." exit 2 fi # If -o wasn't specified, assume "-o shr.o" if test -z "$objfile"; then objfile=shr.o fi filename=`basename $objfile | sed "s/\.[^.]*$//"` # If -bE: wasn't specified, assume "-bE:$filename.exp" if test -z "$expfile"; then expfile="$filename.exp" fi # Default entry symbol for Python modules = init[modulename] # Can be overriden by providing a -e argument. if test -z "$entry"; then entry=init`echo $filename | sed "s/module.*//"` fi #echo "ld_so_aix: Debug info section" #echo " -> output file : $objfile" #echo " -> import file : $impfile" #echo " -> export file : $expfile" #echo " -> entry point : $entry" #echo " -> object files: $objs" #echo " -> CC arguments: $args" CCOPT="-Wl,-e$entry -Wl,-bE:$expfile -Wl,-bI:$impfile -Wl,-bhalt:4" CCOPT="$CCOPT -Wl,-bM:SRE -Wl,-T512 -Wl,-H512 -lm -o $objfile" CCARGS="$args" # Export list generation. #echo $makexp $expfile "$objfile" $objs $makexp $expfile "$objfile" $objs # Perform the link. #echo $CC $CCOPT $CCARGS $CC $CCOPT $CCARGS # Delete the module's export list file. # Comment this line if you need it. rm -f $expfile egenix-mx-base-3.2.7/mx/Stack/mxStack/makexp_aix0000775000175000017500000000603507057236752021412 0ustar lemburglemburg#!/bin/sh # # =========================================================================== # FILE: makexp_aix # TYPE: standalone executable # SYSTEM: AIX 3.2.5 and AIX 4 # # DESCRIPTION: This script creates an export list of ALL global symbols # from a list of object or archive files. # # USAGE: makexp_aix "" ... # # where: # is the target export list filename. # is the path/file string to be appended # after the "#!" symbols in the first line of the # export file. Passing "" means deferred resolution. # is an object (.o) or an archive file (.a). # # HISTORY: # 3-Apr-1998 -- remove C++ entries of the form Class::method # Vladimir Marangozov # # 1-Jul-1996 -- added header information # Vladimir Marangozov # # 28-Jun-1996 -- initial code # Vladimir Marangozov (Vladimir.Marangozov@imag.fr) # ========================================================================== # Variables expFileName=$1 toAppendStr=$2 shift; shift; inputFiles=$* automsg="Generated automatically by makexp_aix" notemsg="NOTE: lists _all_ global symbols defined in the above file(s)." curwdir=`pwd` # Create the export file and setup the header info echo "#!"$toAppendStr > $expFileName echo "*" >> $expFileName echo "* $automsg (`date -u`)" >> $expFileName echo "*" >> $expFileName echo "* Base Directory: $curwdir" >> $expFileName echo "* Input File(s) : $inputFiles" >> $expFileName echo "*" >> $expFileName echo "* $notemsg" >> $expFileName echo "*" >> $expFileName # Extract the symbol list using 'nm' which produces quite # different output under AIX 4 than under AIX 3.2.5. # The following handles both versions by using a common flagset. # Here are some hidden tricks: # 1. Use /usr/ccs/bin/nm. Relevant to AIX 3.2.5 which has # another version under /usr/ucb/bin/nm. # 2. Use the -B flag to have a standard BSD representation # of the symbol list on both AIX 3.2.5 and AIX 4. The "-B" # flag is missing in the AIX 3.2.5 online usage help of 'nm'. # 3. Use the -x flag to have a hex representation of the symbol # values. This fills the leading whitespaces on AIX 4, # thus simplifying the sed statement. # 4. Eliminate all entries except those with either "B", "D" # or "T" key letters. We are interested only in the global # (extern) BSS, DATA and TEXT symbols. With the same statement # we eliminate object member lines relevant to AIX 4. # 5. Eliminate entries containing a dot. We can have a dot only # as a symbol prefix, but such symbols are undefined externs. # 6. Eliminate everything including the key letter, so that we're # left with just the symbol name. # 7. Eliminate all entries containing two colons, like Class::method # /usr/ccs/bin/nm -Bex $inputFiles \ | sed -e '/ [^BDT] /d' -e '/\./d' -e 's/.* [BDT] //' -e '/::/d' \ | sort | uniq >> $expFileName egenix-mx-base-3.2.7/mx/Stack/mxStack/mx.h0000664000175000017500000005570412133300665020124 0ustar lemburglemburg#ifndef MX_H #define MX_H /* mx -- Marc's eXtension modules for Python: basic macros This file is only meant to be included by the extension modules. DO NOT include it in the extension module's header file, since it will definitely cause troubles then. To enable debugging ceratin things, define one of these before including this file: MAL_REF_DEBUG -- debug reference counts (Py_MY_xxx) [this file] MAL_DEBUG -- enable debug output (DPRINTF) [mxstdlib.h] MAL_MEM_DEBUG -- enable malloc output (new,cnew,free,...) [mxstdlib.h] Copyright (c) 2000, Marc-Andre Lemburg; mailto:mal@lemburg.com Copyright (c) 2000-2013, eGenix.com Software GmbH; mailto:info@egenix.com See the documentation for further copyright information or contact the author. XXX Most of these macros and defines should really use an mx prefix to avoid collisions with native Python macros and defines. So far this has not happened, which is why this hasn't been implemented yet. */ /* --- Platform or compiler specific tweaks ------------------------------- */ /* Add some platform specific symbols to enable work-arounds for the static forward declaration of type definitions; note that the GNU C compiler does not have this problem. Many thanks to all who have contributed to this list. */ #ifndef BAD_STATIC_FORWARD # if (!defined(__GNUC__)) # if (defined(NeXT) || defined(sgi) || defined(_AIX) || (defined(__osf__) && defined(__DECC)) || defined(TrueCompaq64) || defined(__VMS)) # define BAD_STATIC_FORWARD # endif # endif #endif /* Some more tweaks for various platforms. */ /* VMS needs this define. Thanks to Jean-Franois PIRONNE */ #if defined(__VMS) # define __SC__ #endif /* xlC on AIX doesn't like the Python work-around for static forwards in ANSI mode (default), so we switch on extended mode. Thanks to Albert Chin-A-Young */ #if defined(__xlC__) # pragma langlvl extended #endif /* --- Standard header files ---------------------------------------------- */ /* Include the generic mx header file */ #include "mxh.h" /* Include nearly all Python symbols & definitions */ #include "Python.h" /* Include other standard stuff */ #include "mxstdlib.h" /* Include Python backward compatibility stuff */ #include "mxpyapi.h" /* --- Compiler support --------------------------------------------------- */ /* Support for compilers which don't like static forward declarations of arrays; Python 2.3 removed the support for BAD_STATIC_FORWARD which is why we now use our own little helpers here. */ #undef staticforward #undef statichere #ifdef BAD_STATIC_FORWARD # define staticforward extern # define statichere static #else # define staticforward static # define statichere static #endif /* --- Declare macros ----------------------------------------------------- */ #define Py_NONE (Py_INCREF(Py_None),Py_None) #ifdef MAL_REF_DEBUG # define printref(x) printf("* refcount for "#x" = %i\n",(long) x->ob_refcnt); #else # define printref(x) #endif /* --- Error handling ----------------------------------------------------- */ #define Py_Do(x) {if (!(x)) goto onError;} #define Py_ReturnOnError(errortype,errorstr) {PyErr_SetString(errortype,errorstr);return NULL;} #define Py_Assert(x,errortype,errorstr) {if (!(x)) {PyErr_SetString(errortype,errorstr);goto onError;}} #define Py_AssertWithArg(x,errortype,errorstr,a1) {if (!(x)) {PyErr_Format(errortype,errorstr,a1);goto onError;}} #define Py_AssertWith2Args(x,errortype,errorstr,a1,a2) {if (!(x)) {PyErr_Format(errortype,errorstr,a1,a2);goto onError;}} #define Py_AssertWith3Args(x,errortype,errorstr,a1,a2,a3) {if (!(x)) {PyErr_Format(errortype,errorstr,a1,a2,a3);goto onError;}} #define Py_Error(errortype,errorstr) {PyErr_SetString(errortype,errorstr);goto onError;} #define Py_ErrorWithArg(errortype,errorstr,a1) {PyErr_Format(errortype,errorstr,a1);goto onError;} #define Py_ErrorWith2Args(errortype,errorstr,a1,a2) {PyErr_Format(errortype,errorstr,a1,a2);goto onError;} #define Py_ErrorWith3Args(errortype,errorstr,a1,a2,a3) {PyErr_Format(errortype,errorstr,a1,a2,a3);goto onError;} /* --- Reference counting ------------------------------------------------- */ #ifdef MAL_REF_DEBUG static void mx_Py_INCREF(PyObject *v, const char *name, const char *filename, int lineno) { if (!Py_DebugFlag) { Py_XINCREF(v); return; } if (!v) mxDebugPrintf("[%s:%5i] Py_XINCREF( %-8s == NULL );\n", filename,lineno,name); else { Py_INCREF(v);; mxDebugPrintf("[%s:%5i] Py_XINCREF( %-8s at 0x%lx [%s]); " "new refcount = %i\n", filename,lineno,name,(long)v,v->ob_type->tp_name, v->ob_refcnt); } } static void mx_Py_DECREF(PyObject *v, const char *name, const char *filename, int lineno) { if (!Py_DebugFlag) { Py_XDECREF(v); return; } if (!v) mxDebugPrintf("[%s:%5i] Py_XDECREF( %-8s == NULL );\n", filename,lineno,name); else { int refcnt = v->ob_refcnt; Py_DECREF(v); if (refcnt <= 1) mxDebugPrintf("[%s:%5i] Py_XDECREF( %-8s at 0x%lx [%s]); " "object deleted\n", filename,lineno,name,(long)v,v->ob_type->tp_name); else mxDebugPrintf("[%s:%5i] Py_XDECREF( %-8s at 0x%lx [%s]); " "new refcount = %i\n", filename,lineno,name,(long)v,v->ob_type->tp_name, v->ob_refcnt); } } static void mx_Py_PRINT_REFCOUNT(PyObject *v, const char *name, const char *filename, int lineno) { if (!Py_DebugFlag) return; if (!v) mxDebugPrintf("[%s:%5i] Py_PRINT_REFCOUNT( %-8s == NULL );\n", filename,lineno,name); else { mxDebugPrintf("[%s:%5i] Py_PRINT_REFCOUNT( %-8s at 0x%lx [%s]) = %i;\n", filename,lineno,name,(long)v,v->ob_type->tp_name, v->ob_refcnt); } } # undef Py_INCREF # define Py_INCREF(x) mx_Py_INCREF((PyObject *)x,#x,__FILE__,__LINE__) # undef Py_DECREF # define Py_DECREF(x) mx_Py_DECREF((PyObject *)x,#x,__FILE__,__LINE__) # undef Py_XINCREF # define Py_XINCREF(x) mx_Py_INCREF((PyObject *)x,#x,__FILE__,__LINE__) # undef Py_XDECREF # define Py_XDECREF(x) mx_Py_DECREF((PyObject *)x,#x,__FILE__,__LINE__) # undef Py_CLEAR # define Py_CLEAR(x) {Py_XDECREF(x); x=0;} # define Py_DELETE(x) {if (x->ob_refcnt > 1) mxDebugPrintf("[%s:%5i] Py_DELETE( "#x" ) WARNING: Refcount = %i > 1\n",__FILE__,__LINE__,(int)x->ob_refcnt);Py_DECREF(x);} # define Py_PRINT_REFCOUNT(x) mx_Py_PRINT_REFCOUNT((PyObject *)x,#x,__FILE__,__LINE__) #else # define Py_DELETE(x) Py_DECREF(x) # define Py_PRINT_REFCOUNT(x) #endif #define Py_DEC_REF(x) {Py_XDECREF(x); x=0;} /* doing this once too often doesn't hurt; same as Py_CLEAR() */ /* Unreference a Python object. This is only used in Python debug builds and needed to keep track of all allocated references. Use in object constructors or free list implementations. */ #ifndef _Py_DEC_REFTOTAL # ifdef Py_REF_DEBUG # define _Py_DEC_REFTOTAL _Py_RefTotal-- # else # define _Py_DEC_REFTOTAL # endif #endif #define mxPy_UNREF(x) _Py_DEC_REFTOTAL /* --- Debug logging ------------------------------------------------------ */ #ifdef MAL_DEBUG # define Py_PRINT_REPR(message, obj) \ if (Py_DebugFlag) { \ PyObject *_debug_repr = PyObject_Repr(obj); \ mxDebugPrintf(message, PyString_AsString(_debug_repr)); \ Py_XDECREF(_debug_repr); \ } #else # define Py_PRINT_REPR(message, obj) #endif /* --- Argument passing and checking -------------------------------------- */ /* No arguments expected; also use Py_MethodListEntryNoArgs() for this kind of fct; this check is no longer needed in Python 2.3 and later */ #if PY_VERSION_HEX >= 0x02030000 # define Py_NoArgsCheck() {if (0) goto onError;} #else # define Py_NoArgsCheck() {if (!PyArg_NoArgs(args)) goto onError;} #endif /* For functions with old style args (Py_MethodListEntrySingleArg) */ #define Py_GetArgObject(a) {a = args; if (!a) {PyErr_SetString(PyExc_TypeError,"function/method requires an argument"); goto onError;}} #define Py_GetSingleArg(format,a1) {if (!PyArg_Parse(args,format,&a1)) goto onError;} /* For functions with new style args: */ #define Py_GetArg(format,a1) {if (!PyArg_ParseTuple(args,format,&a1)) goto onError;} #define Py_Get2Args(format,a1,a2) {if (!PyArg_ParseTuple(args,format,&a1,&a2)) goto onError;} #define Py_Get3Args(format,a1,a2,a3) {if (!PyArg_ParseTuple(args,format,&a1,&a2,&a3)) goto onError;} #define Py_Get4Args(format,a1,a2,a3,a4) {if (!PyArg_ParseTuple(args,format,&a1,&a2,&a3,&a4)) goto onError;} #define Py_Get5Args(format,a1,a2,a3,a4,a5) {if (!PyArg_ParseTuple(args,format,&a1,&a2,&a3,&a4,&a5)) goto onError;} #define Py_Get6Args(format,a1,a2,a3,a4,a5,a6) {if (!PyArg_ParseTuple(args,format,&a1,&a2,&a3,&a4,&a5,&a6)) goto onError;} #define Py_Get7Args(format,a1,a2,a3,a4,a5,a6,a7) {if (!PyArg_ParseTuple(args,format,&a1,&a2,&a3,&a4,&a5,&a6,&a7)) goto onError;} #define Py_Get8Args(format,a1,a2,a3,a4,a5,a6,a7,a8) {if (!PyArg_ParseTuple(args,format,&a1,&a2,&a3,&a4,&a5,&a6,&a7,&a8)) goto onError;} /* The keywords array string type */ #define Py_KEYWORDS_STRING_TYPE char /* For functions with keywords -- the first macro parameter must be the keywords array given as e.g. static const char *keywords[] = {"first","second","third", 0}; with an entry for every argument (in the correct order). The functions must be included in the method list using Py_MethodWithKeywordsListEntry() and be declared as Py_C_Function_WithKeywords(). */ #define Py_KeywordGetArg(keywords,format,a1) {if (!PyArg_ParseTupleAndKeywords(args,kws,format,keywords,&a1)) goto onError;} #define Py_KeywordGet2Args(keywords,format,a1,a2) {if (!PyArg_ParseTupleAndKeywords(args,kws,format,keywords,&a1,&a2)) goto onError;} #define Py_KeywordGet3Args(keywords,format,a1,a2,a3) {if (!PyArg_ParseTupleAndKeywords(args,kws,format,keywords,&a1,&a2,&a3)) goto onError;} #define Py_KeywordGet4Args(keywords,format,a1,a2,a3,a4) {if (!PyArg_ParseTupleAndKeywords(args,kws,format,keywords,&a1,&a2,&a3,&a4)) goto onError;} #define Py_KeywordGet5Args(keywords,format,a1,a2,a3,a4,a5) {if (!PyArg_ParseTupleAndKeywords(args,kws,format,keywords,&a1,&a2,&a3,&a4,&a5)) goto onError;} #define Py_KeywordGet6Args(keywords,format,a1,a2,a3,a4,a5,a6) {if (!PyArg_ParseTupleAndKeywords(args,kws,format,keywords,&a1,&a2,&a3,&a4,&a5,&a6)) goto onError;} #define Py_KeywordGet7Args(keywords,format,a1,a2,a3,a4,a5,a6,a7) {if (!PyArg_ParseTupleAndKeywords(args,kws,format,keywords,&a1,&a2,&a3,&a4,&a5,&a6,&a7)) goto onError;} #define Py_KeywordGet8Args(keywords,format,a1,a2,a3,a4,a5,a6,a7,a8) {if (!PyArg_ParseTupleAndKeywords(args,kws,format,keywords,&a1,&a2,&a3,&a4,&a5,&a6,&a7,&a8)) goto onError;} /* New style macros fof functions supporting keywords -- the C variable names are used as template for the keyword list, i.e. they must match the Python keyword parameter names. Note that format strings with special parameters (e.g. "#s") are not allowed since they would cause the keyword list to be out of sync. The functions must be included in the method list using Py_MethodWithKeywordsListEntry() and be declared as Py_C_Function_WithKeywords(). Example: Py_C_Function_WithKeywords( myfunction, "myfunction(filename,dupkeys=0,filemode=0,sectorsize=512)\n\n" "Returns a myobject" ) { char *filename; int sectorsize = 512; int dupkeys = 0; int filemode = 0; Py_KeywordsGet4Args("s|iii", filename,dupkeys,filemode,sectorsize); return (PyObject *)myobject_New(filename, filemode, sectorsize, dupkeys); onError: return NULL; } */ #define Py_KeywordsGetArg(format,a1) {static Py_KEYWORDS_STRING_TYPE *kwslist[] = {#a1,NULL}; if (!PyArg_ParseTupleAndKeywords(args,kws,format,kwslist,&a1)) goto onError;} #define Py_KeywordsGet2Args(format,a1,a2) {static Py_KEYWORDS_STRING_TYPE *kwslist[] = {#a1,#a2,NULL}; if (!PyArg_ParseTupleAndKeywords(args,kws,format,kwslist,&a1,&a2)) goto onError;} #define Py_KeywordsGet3Args(format,a1,a2,a3) {static Py_KEYWORDS_STRING_TYPE *kwslist[] = {#a1,#a2,#a3,NULL}; if (!PyArg_ParseTupleAndKeywords(args,kws,format,kwslist,&a1,&a2,&a3)) goto onError;} #define Py_KeywordsGet4Args(format,a1,a2,a3,a4) {static Py_KEYWORDS_STRING_TYPE *kwslist[] = {#a1,#a2,#a3,#a4,NULL}; if (!PyArg_ParseTupleAndKeywords(args,kws,format,kwslist,&a1,&a2,&a3,&a4)) goto onError;} #define Py_KeywordsGet5Args(format,a1,a2,a3,a4,a5) {static Py_KEYWORDS_STRING_TYPE *kwslist[] = {#a1,#a2,#a3,#a4,#a5,NULL}; if (!PyArg_ParseTupleAndKeywords(args,kws,format,kwslist,&a1,&a2,&a3,&a4,&a5)) goto onError;} #define Py_KeywordsGet6Args(format,a1,a2,a3,a4,a5,a6) {static Py_KEYWORDS_STRING_TYPE *kwslist[] = {#a1,#a2,#a3,#a4,#a5,#a6,NULL}; if (!PyArg_ParseTupleAndKeywords(args,kws,format,kwslist,&a1,&a2,&a3,&a4,&a5,&a6)) goto onError;} #define Py_KeywordsGet7Args(format,a1,a2,a3,a4,a5,a6,a7) {static Py_KEYWORDS_STRING_TYPE *kwslist[] = {#a1,#a2,#a3,#a4,#a5,#a6,#a7,NULL}; if (!PyArg_ParseTupleAndKeywords(args,kws,format,kwslist,&a1,&a2,&a3,&a4,&a5,&a6,&a7)) goto onError;} #define Py_KeywordsGet8Args(format,a1,a2,a3,a4,a5,a6,a7,a8) {static Py_KEYWORDS_STRING_TYPE *kwslist[] = {#a1,#a2,#a3,#a4,#a5,#a6,#a7,#a8,NULL}; if (!PyArg_ParseTupleAndKeywords(args,kws,format,kwslist,&a1,&a2,&a3,&a4,&a5,&a6,&a7,&a8)) goto onError;} /* --- Returning values to Python ----------------------------------------- */ /* XXX Don't always work: every time you have an 'O' in the BuildValue format string, you need to DECREF the variable *after* the tuple has been built !!! */ #define Py_ReturnNone() {Py_INCREF(Py_None);return Py_None;} #define Py_ReturnTrue() {Py_INCREF(Py_True);return Py_True;} #define Py_ReturnFalse() {Py_INCREF(Py_False);return Py_False;} #define Py_ReturnArg(format,a1) return Py_BuildValue(format,a1); #define Py_Return Py_ReturnArg #define Py_Return2Args(format,a1,a2) return Py_BuildValue(format,a1,a2); #define Py_Return2 Py_Return2Args #define Py_Return3Args(format,a1,a2,a3) return Py_BuildValue(format,a1,a2,a3); #define Py_Return3 Py_Return3Args #define Py_Return4Args(format,a1,a2,a3) return Py_BuildValue(format,a1,a2,a3,a4); #define Py_Return5Args(format,a1,a2,a3) return Py_BuildValue(format,a1,a2,a3,a4,a5); #define Py_Return6Args(format,a1,a2,a3) return Py_BuildValue(format,a1,a2,a3,a4,a5,a6); #define Py_Return7Args(format,a1,a2,a3) return Py_BuildValue(format,a1,a2,a3,a4,a5,a6,a7); /* Build values */ #define Py_BuildNone() Py_NONE #define Py_Build(format,x) Py_BuildValue(format,x) #define Py_Build2(format,x,y) Py_BuildValue(format,x,y) #define Py_Build3(format,x,y,z) Py_BuildValue(format,x,y,z) /* --- Declaring Python builtin functions/methods ------------------------- */ /* The doc-string type changed to const char* in Python 2.5 */ #if PY_VERSION_HEX >= 0x02050000 # define Py_DOC_STRING_TYPE const char #else # define Py_DOC_STRING_TYPE char #endif /* Declare C function/method fct, having docstring docstr; may use vargargs */ #define Py_C_Function(fct,docstr) \ static Py_DOC_STRING_TYPE fct##_docstring[] = docstr;\ static PyObject *fct(PyObject *self, PyObject *args) /* Declare C function/method fct, having keywords keywordsarray and a docstring docstr; may use vargargs & keywords */ #define Py_C_Function_WithKeywords(fct,docstr) \ static Py_DOC_STRING_TYPE fct##_docstring[] = docstr;\ static PyObject *fct(PyObject *self, PyObject *args, PyObject *kws) /* These declare: self -- instance pointer for methods, NULL for functions args -- argument tuple kws -- keywords dict (if applicable) plus as statics: _docstring -- the docstring as given _keywords -- the keyword array as given Note: use the Py_GetArg macros for functions without keywords, and Py_KeywordGetArg macros for functions with keywords */ /* --- Method list entries for builtin functions/methods ------------------ */ /* Add a C function/method cname to the module dict as pyname; no doc-string */ #define Py_MethodListEntryAny(pyname,cname) {pyname,(PyCFunction)cname,METH_VARARGS} /* Add a C function/method cname to the module dict as pyname; the function can use varargs */ #define Py_MethodListEntry(pyname,cname) {pyname,(PyCFunction)cname,METH_VARARGS,cname##_docstring} /* Add a C function/method cname to the module dict as pyname; the function takes no args; in Python 2.3 a new flag was added for these which implements the no args check in the interpreter itself. */ #ifdef METH_NOARGS # define Py_MethodListEntryNoArgs(pyname,cname) {pyname,(PyCFunction)cname,METH_NOARGS,cname##_docstring} #else # define Py_MethodListEntryNoArgs(pyname,cname) {pyname,(PyCFunction)cname,0,cname##_docstring} #endif /* Add a C function/method cname to the module dict as pyname; the function takes one argument: the object is passed in directly (without wrapping it into a tuple first), i.e. don't use the Py_GetArg-macros or PyArg_ParseTuple(). */ #define Py_MethodListEntrySingleArg(pyname,cname) {pyname,(PyCFunction)cname,0,cname##_docstring} /* Add a C function/method that uses keywords to the module dict */ #define Py_MethodWithKeywordsListEntry(pyname,cname) {pyname,(PyCFunction)cname,METH_VARARGS | METH_KEYWORDS,cname##_docstring} /* --- Sequence slicing --------------------------------------------------- */ /* Check a given slice and apply the usual rules for negative indices */ #define Py_CheckSequenceSlice(len,start,stop) { \ if (stop > len) \ stop = len; \ else { \ if (stop < 0) \ stop += len; \ if (stop < 0) \ stop = 0; \ } \ if (start < 0) { \ start += len; \ if (start < 0) \ start = 0; \ } \ if (stop < start) \ start = stop; \ } /* --- Number macros ------------------------------------------------------ */ /* Test for PyFloat_AsDouble() compatible object */ #define PyFloat_Compatible(obj) \ (PyInstance_Check(obj) \ ? PyObject_HasAttrString(obj, "__float__") \ : (obj->ob_type->tp_as_number != NULL && \ obj->ob_type->tp_as_number->nb_float != NULL)) /* --- Text macros -------------------------------------------------------- */ /* Check a given text slice and apply the usual rules for negative indices */ #define Py_CheckBufferSlice(textlen,start,stop) \ Py_CheckSequenceSlice(textlen,start,stop) /* Dito for string objects */ #define Py_CheckStringSlice(textobj,start,stop) \ Py_CheckSequenceSlice(PyString_GET_SIZE(textobj),start,stop) /* For b/w compatibility */ #define Py_CheckSlice(textobj,start,stop) \ Py_CheckStringSlice(textobj,start,stop) /* Dito for Unicode objects */ #ifdef PyUnicode_GET_SIZE # define Py_CheckUnicodeSlice(unicode,start,stop) \ Py_CheckSequenceSlice(PyUnicode_GET_SIZE(unicode),start,stop) #endif /* This assumes that fixed is a constant char array; the strcmp function is only called in case the attribute name length exceeds 10 characters and the first 10 characters match; optimizing compilers should eliminate any unused parts of this comparison automatically. Note: The latest egcs compiler warns about the subscripts being out of range for shorter fixed strings; since no code is generated for those comparisons, these warning can safely be ignored. Still, they are annoying. See the Py_StringsCompareEqual() macro below for a way to work around this. */ #define Py_StringsCompareEqualEx(var,fixed,fixedsize) \ (var[0] == fixed[0] && \ (fixed[0] == 0 || \ (fixedsize >= 1 && (var[1] == fixed[1] && \ (fixed[1] == 0 || \ (fixedsize >= 2 && (var[2] == fixed[2] && \ (fixed[2] == 0 || \ (fixedsize >= 3 && (var[3] == fixed[3] && \ (fixed[3] == 0 || \ (fixedsize >= 4 && (var[4] == fixed[4] && \ (fixed[4] == 0 || \ (fixedsize >= 5 && (var[5] == fixed[5] && \ (fixed[5] == 0 || \ (fixedsize >= 6 && (var[6] == fixed[6] && \ (fixed[6] == 0 || \ (fixedsize >= 7 && (var[7] == fixed[7] && \ (fixed[7] == 0 || \ (fixedsize >= 8 && (var[8] == fixed[8] && \ (fixed[8] == 0 || \ (fixedsize >= 9 && (var[9] == fixed[9] && \ (fixed[9] == 0 || \ (fixedsize >= 10 && \ strcmp(&var[10],&fixed[10]) == 0 \ )))))))))))))))))))))))))))))) /* This assumes that fixed is a constant char array. The appended string snippet is to shut up the warnings produced by newer egcs/gcc compilers about offsets being outside bounds. Note that some compilers do the inlining by themselves or don't like the above trick (OpenVMS is one such platform). For these we simply use the standard way. */ #ifndef __VMS # define Py_StringsCompareEqual(var,fixed) \ Py_StringsCompareEqualEx(var,fixed"\0\0\0\0\0\0\0\0\0\0",sizeof(fixed)) #else # define Py_StringsCompareEqual(var,fixed) (strcmp(var, fixed) == 0) #endif /* Fast character set member check; set must be a "static unsigned *char set" array of exactly 32 bytes length generated with TextTools.set() */ #define Py_CharInSet(chr,set) \ (((unsigned char)(set)[(unsigned char)(chr) >> 3] & \ (1 << ((unsigned char)(chr) & 7))) != 0) /* --- Macros for getattr ------------------------------------------------- */ /* Compares var to name and returns 1 iff they match. This assumes that name is a constant char array. */ #define Py_WantAttr(var,name) Py_StringsCompareEqual(var,name) /* --- Module init helpers ------------------------------------------------ */ /* Helper for startup type object initialization */ #define PyType_Init(x) \ { \ x.ob_type = &PyType_Type; \ Py_Assert(x.tp_basicsize >= (int)sizeof(PyObject), \ PyExc_SystemError, \ "Internal error: tp_basicsize of "#x" too small");\ if (PyType_Ready(&x) < 0) \ goto onError; \ } /* Error reporting for module init functions */ #define Py_ReportModuleInitError(modname) { \ PyObject *exc_type, *exc_value, *exc_tb; \ PyObject *str_type, *str_value; \ \ /* Fetch error objects and convert them to strings */ \ PyErr_Fetch(&exc_type, &exc_value, &exc_tb); \ if (exc_type && exc_value) { \ str_type = PyObject_Str(exc_type); \ str_value = PyObject_Str(exc_value); \ } \ else { \ str_type = NULL; \ str_value = NULL; \ } \ /* Try to format a more informative error message using the \ original error */ \ if (str_type && str_value && \ PyString_Check(str_type) && PyString_Check(str_value)) \ PyErr_Format( \ PyExc_ImportError, \ "initialization of module "modname" failed " \ "(%s:%s)", \ PyString_AS_STRING(str_type), \ PyString_AS_STRING(str_value)); \ else \ PyErr_SetString( \ PyExc_ImportError, \ "initialization of module "modname" failed"); \ Py_XDECREF(str_type); \ Py_XDECREF(str_value); \ Py_XDECREF(exc_type); \ Py_XDECREF(exc_value); \ Py_XDECREF(exc_tb); \ } /* --- SWIG addons -------------------------------------------------------- */ /* Throw this error after having set the correct Python exception using e.g. PyErr_SetString(); */ #define mxSWIGError "mxSWIGError" /* EOF */ #endif egenix-mx-base-3.2.7/mx/Stack/mxStack/mxStack.c0000664000175000017500000005257612251400410021077 0ustar lemburglemburg/* mxStack -- A stack implementation Copyright (c) 1997-2000, Marc-Andre Lemburg; mailto:mal@lemburg.com Copyright (c) 2000-2013, eGenix.com Software GmbH; mailto:info@egenix.com See the documentation for further copyright information or contact the author (mailto:mal@lemburg.com). */ /* Define this to aid in finding memory leaks */ /*#define MAL_MEM_DEBUG*/ /*#define MAL_DEBUG*/ /* Logging file used by debugging facility */ #ifndef MAL_DEBUG_OUTPUTFILE # define MAL_DEBUG_OUTPUTFILE "mxStack.log" #endif /* We want all our symbols to be exported */ #define MX_BUILDING_MXSTACK /* Mark the module as Py_ssize_t clean. */ #define PY_SSIZE_T_CLEAN 1 /* Setup mxstdlib memory management */ #if 1 # define MAL_USE_PYMALLOC #else # define MAL_USE_C_MALLOC #endif #include "mx.h" #include "mxStack.h" #define MXSTACK_VERSION "3.2.7" /* The minimal size of stacks; must be > 1 */ #define MINIMAL_STACKSIZE 4 /* Grow strategy to be used: */ #if 1 /* Fibonacci-like */ # define GROW(size) size += size >> 1 #else /* Double */ # define GROW(size) size <<= 1 #endif /* --- module doc-string -------------------------------------------------- */ static char *Module_docstring = MXSTACK_MODULE" -- A stack implementation. Version "MXSTACK_VERSION"\n\n" "Copyright (c) 1997-2000, Marc-Andre Lemburg; mailto:mal@lemburg.com\n" "Copyright (c) 2000-2013, eGenix.com Software GmbH; mailto:info@egenix.com\n\n" " All Rights Reserved\n\n" "See the documentation for further information on copyrights,\n" "or contact the author." ; /* --- module globals ----------------------------------------------------- */ static PyObject *mxStack_Error; /* Error Exception object */ static PyObject *mxStack_EmptyError; /* EmptyError Exception object */ /* Flag telling us whether the module was initialized or not. */ static int mxStack_Initialized = 0; /* --- forward declarations ----------------------------------------------- */ staticforward PyTypeObject mxStack_Type; staticforward PyMethodDef mxStack_Methods[]; /* --- internal macros ---------------------------------------------------- */ #define _mxStack_Check(v) \ (((mxStackObject *)(v))->ob_type == &mxStack_Type) /* --- module helpers ----------------------------------------------------- */ /* Create an exception object, insert it into the module dictionary under the given name and return the object pointer; this is NULL in case an error occurred. base can be given to indicate the base object to be used by the exception object. It should be NULL otherwise */ static PyObject *insexc(PyObject *moddict, char *name, PyObject *base) { PyObject *v; char fullname[256]; char *modname; char *dot; v = PyDict_GetItemString(moddict, "__name__"); if (v == NULL) modname = NULL; else modname = PyString_AsString(v); if (modname == NULL) { PyErr_Clear(); modname = MXSTACK_MODULE; } /* The symbols from this extension are imported into mx.. We trim the name to not confuse the user with an overly long package path. */ strcpy(fullname, modname); dot = strchr(fullname, '.'); if (dot) dot = strchr(dot+1, '.'); if (dot) strcpy(dot+1, name); else sprintf(fullname, "%s.%s", modname, name); v = PyErr_NewException(fullname, base, NULL); if (v == NULL) return NULL; if (PyDict_SetItemString(moddict,name,v)) return NULL; return v; } #if 0 /* Helper for adding integer constants. Check for errors with PyErr_Occurred() */ static void insint(PyObject *dict, char *name, int value) { PyObject *v = PyInt_FromLong((long)value); PyDict_SetItemString(dict, name, v); Py_XDECREF(v); } #endif static PyObject *notimplemented1(PyObject *v) { Py_Error(PyExc_TypeError, "operation not implemented"); onError: return NULL; } static PyObject *notimplemented2(PyObject *v, PyObject *w) { Py_Error(PyExc_TypeError, "operation not implemented"); onError: return NULL; } static PyObject *notimplemented3(PyObject *u, PyObject *v, PyObject *w) { Py_Error(PyExc_TypeError, "operation not implemented"); onError: return NULL; } /* --- Stack Object -------------------------------------------------*/ /* --- allocation --- */ static mxStackObject *mxStack_New(Py_ssize_t size) { mxStackObject *stack; PyObject **w; stack = PyObject_NEW(mxStackObject,&mxStack_Type); if (stack == NULL) return NULL; /* Init vars */ if (size < MINIMAL_STACKSIZE) size = MINIMAL_STACKSIZE; w = new(PyObject*,size); if (w == NULL) { PyErr_NoMemory(); return NULL; } stack->array = w; stack->size = size; stack->top = -1; return stack; } /* --- deallocation --- */ static void mxStack_Free(register mxStackObject *stack) { if (stack->array) { Py_ssize_t i; for (i = 0; i <= stack->top; i++) Py_DECREF(stack->array[i]); free(stack->array); } PyObject_Del(stack); } /* --- internal functions --- */ /* --- API functions --- */ static int mxStack_Push(register mxStackObject *stack, PyObject *v) { Py_ssize_t top; if (stack == NULL) { PyErr_BadInternalCall(); goto onError; } top = stack->top + 1; /* Grow the stack, if we hit the array boundary */ if (top == stack->size) { register PyObject **w; register Py_ssize_t size; size = stack->size; GROW(size); w = resize(stack->array,PyObject*,size); if (w == NULL) { PyErr_NoMemory(); goto onError; } stack->array = w; stack->size = size; } Py_INCREF(v); stack->array[top] = v; stack->top = top; return 0; onError: return -1; } static int mxStack_PushMany(register mxStackObject *stack, PyObject *seq) { Py_ssize_t top; register Py_ssize_t i; Py_ssize_t length; if (stack == NULL) { PyErr_BadInternalCall(); goto onError; } length = PySequence_Length(seq); if (length < 0) goto onError; top = stack->top; /* Grow the stack, if we hit the array boundary */ if (top + length >= stack->size) { register PyObject **w; register Py_ssize_t size; size = stack->size; while (top + length >= size) GROW(size); w = resize(stack->array,PyObject*,size); if (w == NULL) { PyErr_NoMemory(); goto onError; } stack->array = w; stack->size = size; } /* Push the entries from left to right onto the stack */ for (i = 0; i < length; i++) { register PyObject *v; if (PyTuple_Check(seq)) { v = PyTuple_GET_ITEM(seq,i); Py_INCREF(v); } else if (PyList_Check(seq)) { v = PyList_GET_ITEM(seq,i); Py_INCREF(v); } else { v = PySequence_GetItem(seq,i); if (!v) { /* Rollback */ while (i > 0) { Py_DECREF(stack->array[top]); top--; i--; } stack->top = top; goto onError; } } stack->array[++top] = v; } stack->top = top; return 0; onError: return -1; } static PyObject *mxStack_Pop(register mxStackObject *stack) { if (stack == NULL) { PyErr_BadInternalCall(); goto onError; } Py_Assert(stack->top >= 0, mxStack_EmptyError, "stack is empty"); return stack->array[stack->top--]; onError: return NULL; } /* Pop up to n entries into a Python tuple from the top of the stack; order is top to bottom. */ static PyObject *mxStack_PopMany(register mxStackObject *stack, Py_ssize_t n) { PyObject *t; register Py_ssize_t i; if (stack == NULL) { PyErr_BadInternalCall(); goto onError; } n = min(stack->top + 1, n); t = PyTuple_New(n); if (!t) goto onError; for (i = 0; i < n; i++) PyTuple_SET_ITEM(t,i,stack->array[stack->top--]); return t; onError: return NULL; } static int mxStack_Clear(register mxStackObject *stack) { register Py_ssize_t i; for (i = 0; i <= stack->top; i++) Py_DECREF(stack->array[i]); stack->top = -1; return 0; } static mxStackObject *mxStack_FromSequence(PyObject *seq) { mxStackObject *stack = 0; /* Create an "empty" stack */ stack = mxStack_New(0); if (stack == NULL) goto onError; /* Insert items */ if (mxStack_PushMany(stack,seq)) goto onError; return stack; onError: if (stack) mxStack_Free(stack); return NULL; } static PyObject *mxStack_AsTuple(register mxStackObject *stack) { PyObject *t = 0; Py_ssize_t i,len; if (stack == NULL) { PyErr_BadInternalCall(); goto onError; } len = stack->top + 1; t = PyTuple_New(len); if (t == NULL) goto onError; for (i = 0; i < len; i++) { PyObject *v; v = stack->array[i]; Py_INCREF(v); PyTuple_SET_ITEM(t,i,v); } return t; onError: if (t) { Py_DECREF(t); } return NULL; } static PyObject *mxStack_AsList(register mxStackObject *stack) { PyObject *l = 0; Py_ssize_t i,len; if (stack == NULL) { PyErr_BadInternalCall(); goto onError; } len = stack->top + 1; l = PyList_New(len); if (l == NULL) goto onError; for (i = 0; i < len; i++) { PyObject *v; v = stack->array[i]; Py_INCREF(v); PyList_SET_ITEM(l,i,v); } return l; onError: if (l) { Py_DECREF(l); } return NULL; } static Py_ssize_t _mxStack_Length(register mxStackObject *self) { return self->top + 1; } static Py_ssize_t mxStack_Length(register PyObject *self) { return _mxStack_Length((mxStackObject *)self); } static int mxStack_Resize(register mxStackObject *self, Py_ssize_t size) { register PyObject **w; if (self == NULL) { PyErr_BadInternalCall(); goto onError; } if (size < self->top) size = self->top + 1; if (size < MINIMAL_STACKSIZE) size = MINIMAL_STACKSIZE; GROW(size); w = resize(self->array,PyObject*,size); if (w == NULL) { PyErr_NoMemory(); goto onError; } self->array = w; self->size = size; return 0; onError: return -1; } static PyObject *_mxStack_GetItem(register mxStackObject *self, Py_ssize_t index) { PyObject *v; Py_ssize_t len = self->top + 1; if (index < 0) index += len; Py_Assert((index >= 0) && (index < len), PyExc_IndexError, "index out of range"); v = self->array[index]; Py_INCREF(v); return v; onError: return NULL; } static PyObject *mxStack_GetItem(register PyObject *obj, Py_ssize_t index) { return _mxStack_GetItem((mxStackObject *)obj, index); } /* --- methods --- (should have lowercase extension) */ #define stack ((mxStackObject*)self) Py_C_Function( mxStack_new, "Stack([intialsize])") { PyObject *v; Py_ssize_t size = 0; Py_GetArg("|"Py_SSIZE_T_PARSERMARKER, size); v = (PyObject *)mxStack_New(size); if (v == NULL) goto onError; return v; onError: return NULL; } Py_C_Function( mxStack_push, "push(o)") { PyObject *v; Py_GetArgObject(v); if (mxStack_Push(stack,v)) goto onError; Py_ReturnNone(); onError: return NULL; } Py_C_Function( mxStack_push_many, "push_many(sequence)") { PyObject *seq; Py_GetSingleArg("O",seq); if (mxStack_PushMany(stack,seq)) goto onError; Py_ReturnNone(); onError: return NULL; } Py_C_Function( mxStack_pop, "pop()") { register PyObject *v; Py_NoArgsCheck(); v = mxStack_Pop(stack); if (v == NULL) goto onError; return v; onError: return NULL; } Py_C_Function( mxStack_pop_many, "pop_many(n)") { register PyObject *v; Py_ssize_t n; Py_GetSingleArg(Py_SSIZE_T_PARSERMARKER, n); v = mxStack_PopMany(stack,n); if (v == NULL) goto onError; return v; onError: return NULL; } Py_C_Function( mxStack_clear, "clear()") { Py_NoArgsCheck(); if (mxStack_Clear(stack)) goto onError; Py_ReturnNone(); onError: return NULL; } Py_C_Function( mxStack_as_tuple, "as_tuple()") { register PyObject *v; Py_NoArgsCheck(); v = mxStack_AsTuple(stack); if (v == NULL) goto onError; return v; onError: return NULL; } Py_C_Function( mxStack_as_list, "as_list()") { register PyObject *v; Py_NoArgsCheck(); v = mxStack_AsList(stack); if (v == NULL) goto onError; return v; onError: return NULL; } Py_C_Function( mxStack_resize, "resize([size=len(stack)])") { Py_ssize_t size = _mxStack_Length(stack); Py_GetArg("|"Py_SSIZE_T_PARSERMARKER, size); if (mxStack_Resize(stack,size)) goto onError; Py_ReturnNone(); onError: return NULL; } #undef stack /* --- slots --- */ static int mxStack_Print(PyObject *obj, FILE *fp, int flags) { mxStackObject *self = (mxStackObject *)obj; Py_ssize_t i,top; top = self->top; fprintf(fp, "Stack["); for (i = 0; i <= top; i++) { if (i > 0) fprintf(fp, ", "); if (PyObject_Print(self->array[i], fp, flags)) goto onError; } fprintf(fp, "]"); return 0; onError: return -1; } static PyObject *mxStack_Repr(PyObject *obj) { mxStackObject *self = (mxStackObject *)obj; char s[256]; sprintf(s,"",(long)self); return PyString_FromString(s); } static int mxStack_Compare(PyObject *left, PyObject *right) { mxStackObject *v = (mxStackObject *)left; mxStackObject *w = (mxStackObject *)right; Py_ssize_t len = min(v->top,w->top) + 1; Py_ssize_t i; for (i = 0; i < len; i++) { int cmp = PyObject_Compare(v->array[i],w->array[i]); if (cmp != 0) return cmp; } if (v->top < w->top) return -1; else if (v->top == w->top) return 0; else return 1; } static PyObject *mxStack_Getattr(PyObject *obj, char *name) { return Py_FindMethod(mxStack_Methods, obj, name); } static int mxStack_NonZero(PyObject *obj) { mxStackObject *self = (mxStackObject *)obj; return self->top >= 0; } /* Undocumented feature: stack << x does stack.push(x) and returns stack stack >> 1 return stack.pop() stack >> n returns stack.pop_many(n) To make this work, we need a few hacks... :-( We make anything coerce and then check the arguments to the number slot functions. Unfortunately this only works if the left hand argument is a Stack. If the left hand argument is something else, you better press your thumbs and duck cover... (Na, it's not that dangerous, but the results are pretty much undefined.) */ static int mxStack_Coerce(PyObject **pv, PyObject **pw) { if (_mxStack_Check(*pv)) { /* Anything goes... */ Py_INCREF(*pv); Py_INCREF(*pw); DPRINTF("Stack coerced ok\n"); return 0; } DPRINTF("Stack coerce failed\n"); return 1; } static PyObject *mxStack_LeftShift(PyObject *left, PyObject *right) { mxStackObject *self = (mxStackObject *)left; /* Stack << Object -> (Stack.push(Object),Stack) */ if (!_mxStack_Check(left)) { PyErr_BadInternalCall(); return NULL; } mxStack_Push(self, right); Py_INCREF(self); return left; } static PyObject *mxStack_RightShift(PyObject *left, PyObject *right) { mxStackObject *self = (mxStackObject *)left; long n; /* Stack >> Integer -> Stack.pop_many(Integer) */ if (!_mxStack_Check(left)) { PyErr_BadInternalCall(); return NULL; } if (!PyInt_Check(right)) Py_Error(PyExc_TypeError, "right side of >> must an integer"); n = PyInt_AS_LONG(right); Py_Assert(n > 0, PyExc_TypeError, "you can only pop 1 or more entries"); if (n == 1) return mxStack_Pop(self); else return mxStack_PopMany(self, n); onError: return NULL; } /* Python Type Tables */ static PySequenceMethods mxStack_TypeAsSequence = { mxStack_Length, /*sq_length*/ 0, /*sq_concat*/ 0, /*sq_repeat*/ mxStack_GetItem, /*sq_item*/ 0, /*sq_slice*/ 0, /*sq_ass_item*/ 0, /*sq_ass_slice*/ }; static PyNumberMethods mxStack_TypeAsNumber = { /* These slots are not NULL-checked, so we must provide dummy functions */ notimplemented2, /*nb_add*/ notimplemented2, /*nb_subtract*/ notimplemented2, /*nb_multiply*/ notimplemented2, /*nb_divide*/ notimplemented2, /*nb_remainder*/ notimplemented2, /*nb_divmod*/ notimplemented3, /*nb_power*/ notimplemented1, /*nb_negative*/ notimplemented1, /*nb_positive*/ /* Everything below this line EXCEPT nb_nonzero (!) is NULL checked */ 0, /*nb_absolute*/ mxStack_NonZero, /*nb_nonzero*/ 0, /*nb_invert*/ mxStack_LeftShift, /*nb_lshift*/ mxStack_RightShift, /*nb_rshift*/ notimplemented2, /*nb_and*/ notimplemented2, /*nb_xor*/ notimplemented2, /*nb_or*/ mxStack_Coerce, /*nb_coerce*/ 0, /*nb_int*/ 0, /*nb_long*/ 0, /*nb_float*/ 0, /*nb_oct*/ 0, /*nb_hex*/ }; statichere PyTypeObject mxStack_Type = { PyObject_HEAD_INIT(0) /* init at startup ! */ 0, /*ob_size*/ "Stack", /*tp_name*/ sizeof(mxStackObject), /*tp_basicsize*/ 0, /*tp_itemsize*/ /* slots */ (destructor)mxStack_Free, /*tp_dealloc*/ mxStack_Print, /*tp_print*/ mxStack_Getattr, /*tp_getattr*/ 0, /*tp_setattr*/ mxStack_Compare, /*tp_compare*/ mxStack_Repr, /*tp_repr*/ &mxStack_TypeAsNumber, /*tp_as_number*/ &mxStack_TypeAsSequence, /*tp_as_sequence*/ 0, /*tp_as_mapping*/ 0, /*tp_hash*/ 0, /*tp_call*/ 0, /*tp_str*/ 0, /*tp_getattro*/ 0, /*tp_setattro*/ 0, /*tp_as_buffer*/ Py_TPFLAGS_DEFAULT, /*tp_flags*/ 0, /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ 0, /* tp_richcompare */ 0, /* tp_weaklistoffset */ 0, /* tp_iter */ 0, /* tp_iternext */ mxStack_Methods, /* tp_methods */ 0, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ 0, /* tp_init */ 0, /* tp_alloc */ 0, /* tp_new */ 0, /* tp_free */ }; /* Python Method Table */ statichere PyMethodDef mxStack_Methods[] = { Py_MethodListEntrySingleArg("push",mxStack_push), Py_MethodListEntryNoArgs("pop",mxStack_pop), Py_MethodListEntrySingleArg("push_many",mxStack_push_many), Py_MethodListEntrySingleArg("pop_many",mxStack_pop_many), Py_MethodListEntryNoArgs("as_tuple",mxStack_as_tuple), Py_MethodListEntryNoArgs("as_list",mxStack_as_list), Py_MethodListEntryNoArgs("clear",mxStack_clear), Py_MethodListEntry("resize",mxStack_resize), {NULL,NULL} /* end of list */ }; /* --- Other functions ----------------------------------------------------- */ Py_C_Function( mxStack_StackFromSequence, "StackFromSequence(seq)") { PyObject *v; PyObject *stack; Py_GetArg("O",v); Py_Assert(PySequence_Check(v), PyExc_TypeError, "argument must be a sequence"); stack = (PyObject *)mxStack_FromSequence(v); if (stack == NULL) goto onError; return stack; onError: return NULL; } /* --- module init --------------------------------------------------------- */ /* Python Method Table */ static PyMethodDef Module_methods[] = { Py_MethodListEntry("Stack",mxStack_new), Py_MethodListEntry("StackFromSequence",mxStack_StackFromSequence), {NULL,NULL} /* end of list */ }; /* Cleanup function */ static void mxStackModule_Cleanup(void) { /* Reset mxStack_Initialized flag */ mxStack_Initialized = 0; } /* C API table */ static mxStackModule_APIObject mxStackModuleAPI = { &mxStack_Type, mxStack_New, mxStack_FromSequence, mxStack_Push, mxStack_Pop, mxStack_AsTuple, mxStack_AsList, mxStack_PopMany, mxStack_PushMany, mxStack_Clear, _mxStack_Length, _mxStack_GetItem }; /* create PyMethodObjects and register them in the module's dict */ MX_EXPORT(void) initmxStack(void) { PyObject *module, *moddict, *api; if (mxStack_Initialized) Py_Error(PyExc_SystemError, "can't initialize "MXSTACK_MODULE" more than once"); /* Init type objects */ PyType_Init(mxStack_Type); /* create module */ module = Py_InitModule4(MXSTACK_MODULE, /* Module name */ Module_methods, /* Method list */ Module_docstring, /* Module doc-string */ (PyObject *)NULL, /* always pass this as *self */ PYTHON_API_VERSION); /* API Version */ if (module == NULL) goto onError; /* Register cleanup function */ if (Py_AtExit(mxStackModule_Cleanup)) { /* XXX what to do if we can't register that function ??? */ DPRINTF("* Failed to register mxStack cleanup function\n"); } /* Add some constants to the module's dict */ moddict = PyModule_GetDict(module); PyDict_SetItemString(moddict, "__version__", PyString_FromString(MXSTACK_VERSION)); /* Errors */ if (!(mxStack_Error = insexc(moddict,"Error",PyExc_IndexError))) goto onError; if (!(mxStack_EmptyError = insexc(moddict,"EmptyError",mxStack_Error))) goto onError; /* Type objects */ Py_INCREF(&mxStack_Type); PyDict_SetItemString(moddict, "StackType", (PyObject *)&mxStack_Type); /* Export C API */ api = PyCObject_FromVoidPtr((void *)&mxStackModuleAPI, NULL); if (api == NULL) goto onError; PyDict_SetItemString(moddict,MXSTACK_MODULE"API",api); Py_DECREF(api); /* We are now initialized */ mxStack_Initialized = 1; onError: /* Check for errors and report them */ if (PyErr_Occurred()) Py_ReportModuleInitError(MXSTACK_MODULE); return; } egenix-mx-base-3.2.7/mx/Stack/mxStack/mxStack.def0000664000175000017500000000002506451226114021405 0ustar lemburglemburgEXPORTS initmxStack egenix-mx-base-3.2.7/mx/Stack/mxStack/mxStack.h0000664000175000017500000001133612133021445021077 0ustar lemburglemburg#ifndef MXSTACK_H #define MXSTACK_H /* mxStack -- A stack implemenation Copyright (c) 1998-2000, Marc-Andre Lemburg; mailto:mal@lemburg.com Copyright (c) 2000-2013, eGenix.com Software GmbH; mailto:info@egenix.com See the documentation for further copyright information or contact the author (mailto:mal@lemburg.com). */ /* The extension's name; must be the same as the init function's suffix */ #define MXSTACK_MODULE "mxStack" /* Name of the package or module that provides the extensions C API. If the extension is used inside a package, provide the complete import path. */ #define MXSTACK_API_MODULE "mx.Stack" /* --- No servicable parts below this line ----------------------*/ /* Include generic mx extension header file */ #include "mxh.h" /* Include Python compatibility header file */ #include "mxpyapi.h" #ifdef MX_BUILDING_MXSTACK # define MXSTACK_EXTERNALIZE MX_EXPORT #else # define MXSTACK_EXTERNALIZE MX_IMPORT #endif #ifdef __cplusplus extern "C" { #endif /* --- Stack Object ------------------------------------------*/ typedef struct { PyObject_HEAD Py_ssize_t size; /* Number of items allocated */ Py_ssize_t top; /* Index of top element */ PyObject **array; /* Pointer to the stack array */ } mxStackObject; /* Type checking macro */ #define mxStack_Check(v) \ (((mxStackObject *)(v))->ob_type == mxStack.Stack_Type) /* Some (unsafe) macros to access the most important parts */ #define mxStack_GET_SIZE(v) (((mxStackObject *)v)->top+1) #define mxStack_GET_ITEM(v,i) (((mxStackObject *)v)->stack[i]) /* --- C API ----------------------------------------------------*/ /* C API for usage by other Python modules */ typedef struct { /* Type object for Stack() */ PyTypeObject *Stack_Type; /* Create a new empty stack object with at least size entries alredy allocated. */ mxStackObject *(*mxStack_New)(Py_ssize_t size); /* Create a new empty stack object from the sequence v */ mxStackObject *(*mxStack_FromSequence)(PyObject *v); /* Push a Python object onto the stack. The reference count is increased by one. Stacks only grow, they never shrink again. */ int (*mxStack_Push)(mxStackObject *stack, PyObject *v); /* Pop an object from the stack. Ownership is passed to the caller. Note: This doesn't cause the allocated stack size to change. */ PyObject *(*mxStack_Pop)(mxStackObject *stack); /* Return a the stacks content as tuple. */ PyObject *(*mxStack_AsTuple)(mxStackObject *stack); /* Return a the stacks content as list. */ PyObject *(*mxStack_AsList)(mxStackObject *stack); /* Pop the topmost n entries from the stack and return them as tuple. If there are not enough entries only the available ones are returned. */ PyObject *(*mxStack_PopMany)(mxStackObject *stack, Py_ssize_t n); /* Push the entries from sequence onto the stack. */ int (*mxStack_PushMany)(mxStackObject *stack, PyObject *sequence); /* Clear the stack. */ int (*mxStack_Clear)(mxStackObject *stack); /* Get the number of entries in the stack. */ Py_ssize_t (*mxStack_Length)(mxStackObject *stack); /* Gets the item index from the stack without popping it off the stack. Negative indices work just like for Python lists. Entry 0 is the bottom most entry, -1 the top most. */ PyObject *(*mxStack_GetItem)(mxStackObject *stack, Py_ssize_t index); } mxStackModule_APIObject; #ifndef MX_BUILDING_MXSTACK /* Interfacestructure to C API for other modules. Call mxStack_ImportModuleAPI() to initialize this structure. After that usage is simple: PyObject *v; v = mxStack.Stack_New(0); if (!v) goto onError; ... */ static mxStackModule_APIObject mxStack; /* You *must* call this before using any of the functions in mxStack and check its outcome; otherwise all accesses will result in a segfault. Returns 0 on success. */ #ifndef DPRINTF # define DPRINTF if (0) printf #endif static int mxStack_ImportModuleAndAPI(void) { PyObject *mod, *v = 0; void *api; DPRINTF("Importing the %s C API...\n",MXSTACK_API_MODULE); mod = PyImport_ImportModule(MXSTACK_API_MODULE); if (mod == NULL) goto onError; DPRINTF(" module found\n"); v = PyObject_GetAttrString(mod,MXSTACK_MODULE"API"); if (v == NULL) goto onError; Py_CLEAR(mod); DPRINTF(" API object found\n"); api = PyCObject_AsVoidPtr(v); if (api == NULL) goto onError; Py_CLEAR(v); memcpy(&mxStack,api,sizeof(mxStack)); DPRINTF(" API object initialized.\n"); return 0; onError: DPRINTF(" not found.\n"); Py_XDECREF(mod); Py_XDECREF(v); return -1; } #endif /* EOF */ #ifdef __cplusplus } #endif #endif egenix-mx-base-3.2.7/mx/Stack/mxStack/mxh.h0000664000175000017500000000320212133021412020244 0ustar lemburglemburg#ifndef MXH_H #define MXH_H /* mxh.h -- Generic header file for all mx Extenstions This file should be included by every mx Extension header file and the C file. Copyright (c) 2000, Marc-Andre Lemburg; mailto:mal@lemburg.com Copyright (c) 2000-2013, eGenix.com Software GmbH; mailto:info@egenix.com See the documentation for further copyright information or contact the author. */ /* Macros to control export and import of DLL symbols. We use our own definitions since Python's don't allow specifying both imported and exported symbols at the same time; these defines haven't been thoroughly tested yet, patches are most welcome :-) */ /* Macro to "mark" a symbol for DLL export */ #if (defined(_MSC_VER) && _MSC_VER > 850 \ || defined(__MINGW32__) || defined(__CYGWIN) || defined(__BEOS__)) # ifdef __cplusplus # define MX_EXPORT(type) extern "C" type __declspec(dllexport) # else # define MX_EXPORT(type) extern type __declspec(dllexport) # endif #elif defined(__WATCOMC__) # define MX_EXPORT(type) extern type __export #elif defined(__IBMC__) # define MX_EXPORT(type) extern type _Export #else # define MX_EXPORT(type) extern type #endif /* Macro to "mark" a symbol for DLL import */ #if defined(__BORLANDC__) # define MX_IMPORT(type) extern type __import #elif (defined(_MSC_VER) && _MSC_VER > 850 \ || defined(__MINGW32__) || defined(__CYGWIN) || defined(__BEOS__)) # ifdef __cplusplus # define MX_IMPORT(type) extern "C" type __declspec(dllimport) # else # define MX_IMPORT(type) extern type __declspec(dllimport) # endif #else # define MX_IMPORT(type) extern type #endif /* EOF */ #endif egenix-mx-base-3.2.7/mx/Stack/mxStack/mxpyapi.h0000664000175000017500000003356612133300665021171 0ustar lemburglemburg#ifndef MXPYAPI_H #define MXPYAPI_H /* mxpyapi.h This header file includes some new APIs that are not available in older API versions, yet are used by the mx-Extensions. Copyright (c) 2000, Marc-Andre Lemburg; mailto:mal@lemburg.com Copyright (c) 2000-2013, eGenix.com Software GmbH; mailto:info@egenix.com */ /* Emulate PY_VERSION_HEX for older Python versions. */ #ifndef PY_VERSION_HEX # if PYTHON_API_VERSION == 1007 # define PY_VERSION_HEX 0x010500F0 # endif # if PYTHON_API_VERSION == 1006 # define PY_VERSION_HEX 0x010400F0 # endif # if PYTHON_API_VERSION < 1006 # define PY_VERSION_HEX 0 # endif #endif #ifdef __cplusplus extern "C" { #endif /* ---------------------------------------------------------------- Python 2.7.4 ---------------------------------------------------------------- */ #if PY_VERSION_HEX >= 0x02070400 && PY_VERSION_HEX < 0x02070500 /* Python 2.7.4 has a bug that causes Py_DECREF() to fail for dictionaries in module cleanup routines. See http://bugs.python.org/issue17703 */ #define mxPy_DECREF_Unsafe_AtExit() 1 #else /* Apply a runtime check */ #define mxPy_DECREF_Unsafe_AtExit() \ (strncmp(Py_GetVersion(), "2.7.4", 5) == 0) #endif /* ---------------------------------------------------------------- Python 2.7 and above: ---------------------------------------------------------------- */ #if PY_VERSION_HEX >= 0x02070000 /* Python 2.7 introduces the backported memoryview object */ #define HAVE_PYTHON_MEMORYVIEW #else #endif /* ---------------------------------------------------------------- Python 2.6 and above: ---------------------------------------------------------------- */ #if PY_VERSION_HEX >= 0x02060000 /* Python 2.6 introduces new buffer interface slots based on the Py_buffer interface. */ #define HAVE_PYTHON_PY_BUFFER #else #endif /* ---------------------------------------------------------------- Python 2.5 and above: ---------------------------------------------------------------- */ #if PY_VERSION_HEX >= 0x02050000 /* Parser marker */ #define Py_SSIZE_T_PARSERMARKER "n" #else /* Python 2.5 introduced a new type for index integers which is not available in earlier versions. Unfortunately, the new type has 64 bits on 64-bit architectures like AMD64, whereas integers still have 32 bits, which causes problems with output parameters. Along with the new type a few type slots were changed and a new parser marker introduced. */ #define Py_ssize_t int /* Parser marker */ #define Py_SSIZE_T_PARSERMARKER "i" /* Integer APIs */ #define PyInt_FromSize_t(x) PyInt_FromLong((long)(x)) #define PyInt_FromSsize_t(x) PyInt_FromLong((long)(x)) #define PyInt_AsSsize_t(x) ((Py_ssize_t)PyInt_AsLong(x)) #endif /* ---------------------------------------------------------------- Python 2.4 and above: ---------------------------------------------------------------- */ #if PY_VERSION_HEX >= 0x02040000 #else #endif /* ---------------------------------------------------------------- Python 2.3 and above: ---------------------------------------------------------------- */ #if PY_VERSION_HEX >= 0x02030000 #else /* These were introduced in Python 2.3: */ # define PY_LONG_LONG LONG_LONG /* Boolean APIs */ #define PyBool_FromLong(x) PyInt_FromLong((long)(x)?1:0) #endif /* ---------------------------------------------------------------- Python 2.2 and above: ---------------------------------------------------------------- */ #if PY_VERSION_HEX >= 0x02020000 # define HAVE_SUBCLASSABLE_TYPES 1 # define HAVE_INTERPRETER_DLOPENFLAGS 1 #else /* These were introduced in Python 2.2: */ # define PyString_CheckExact PyString_Check # define PyInt_CheckExact PyInt_Check # define PyFloat_CheckExact PyFloat_Check # define PyLong_CheckExact PyLong_Check # define PyExc_StopIteration PyExc_IndexError /* Not needed in Python 2.1 and below, so simply ignore the API */ # define PyType_Ready(x) #endif /* ---------------------------------------------------------------- Python 1.6 and 2.0 only: ---------------------------------------------------------------- */ /* Disabled: we don't support Python 1.6 and don't have a need for this API in any of the mx Tools (yet). */ #if 0 #if PY_VERSION_HEX >= 0x01060000 && PY_VERSION_HEX < 0x02010000 static PyObject * PyObject_Unicode(PyObject *v) { PyObject *res; if (v == NULL) res = PyString_FromString(""); else if (PyUnicode_Check(v)) { Py_INCREF(v); return v; } else if (PyString_Check(v)) res = v; else if (v->ob_type->tp_str != NULL) res = (*v->ob_type->tp_str)(v); else { PyObject *func; if (!PyInstance_Check(v) || (func = PyObject_GetAttrString(v, "__str__")) == NULL) { PyErr_Clear(); res = PyObject_Repr(v); } else { res = PyEval_CallObject(func, (PyObject *)NULL); Py_DECREF(func); } } if (res == NULL) return NULL; if (!PyUnicode_Check(res)) { PyObject* str; str = PyUnicode_FromObject(res); Py_DECREF(res); if (str) res = str; else return NULL; } return res; } #endif #endif /* ---------------------------------------------------------------- Python 2.0 alpha + betas: ---------------------------------------------------------------- */ #if PY_VERSION_HEX >= 0x02000000 && PY_VERSION_HEX < 0x020000F0 # if defined(PyBuffer_Check) && !defined(HAVE_PYTHON_BUFFEROBJECTS) # define HAVE_PYTHON_BUFFEROBJECTS # endif #ifndef Py_PROTO # define Py_PROTO(args) args #endif #endif /* ---------------------------------------------------------------- Python 1.6 and later: ---------------------------------------------------------------- */ #if PY_VERSION_HEX >= 0x01060000 #if defined(PyUnicode_Check) && !defined(HAVE_UNICODE) # define HAVE_UNICODE #endif #endif #if PY_VERSION_HEX >= 0x02020000 #if defined(HAVE_UNICODE) && !defined(Py_USING_UNICODE) # undef HAVE_UNICODE #endif #endif #ifndef HAVE_UNICODE # undef PyUnicode_Check # define PyUnicode_Check(obj) 0 #endif /* ---------------------------------------------------------------- Python < 1.6: ---------------------------------------------------------------- */ #if PY_VERSION_HEX < 0x01060000 #if !defined(PyObject_DEL) # define PyObject_DEL(x) free(x) # define PyObject_Del(x) free(x) #endif #endif /* ---------------------------------------------------------------- Python >= 1.5.2: ---------------------------------------------------------------- */ #if PY_VERSION_HEX >= 0x010502F0 # if defined(PyBuffer_Check) && !defined(HAVE_PYTHON_BUFFEROBJECTS) # define HAVE_PYTHON_BUFFEROBJECTS # endif #endif /* ---------------------------------------------------------------- Python >= 1.5.2 and prior to 2.0a1 ---------------------------------------------------------------- */ #if PY_VERSION_HEX >= 0x010502F0 && PY_VERSION_HEX < 0x02000000 /* Takes an arbitrary object which must support the (character, single segment) buffer interface and returns a pointer to a read-only memory location useable as character based input for subsequent processing. buffer and buffer_len are only set in case no error occurrs. Otherwise, -1 is returned and an exception set. */ static int PyObject_AsCharBuffer(PyObject *obj, const char **buffer, int *buffer_len) { PyBufferProcs *pb = obj->ob_type->tp_as_buffer; const char *pp; int len; if ( pb == NULL || pb->bf_getcharbuffer == NULL || pb->bf_getsegcount == NULL ) { PyErr_SetString(PyExc_TypeError, "expected a character buffer object"); goto onError; } if ( (*pb->bf_getsegcount)(obj,NULL) != 1 ) { PyErr_SetString(PyExc_TypeError, "expected a single-segment buffer object"); goto onError; } len = (*pb->bf_getcharbuffer)(obj,0,&pp); if (len < 0) goto onError; *buffer = pp; *buffer_len = len; return 0; onError: return -1; } /* Same as PyObject_AsCharBuffer() except that this API expects (readable, single segment) buffer interface and returns a pointer to a read-only memory location which can contain arbitrary data. buffer and buffer_len are only set in case no error occurrs. Otherwise, -1 is returned and an exception set. */ static int PyObject_AsReadBuffer(PyObject *obj, const void **buffer, int *buffer_len) { PyBufferProcs *pb = obj->ob_type->tp_as_buffer; void *pp; int len; if ( pb == NULL || pb->bf_getreadbuffer == NULL || pb->bf_getsegcount == NULL ) { PyErr_SetString(PyExc_TypeError, "expected a readable buffer object"); goto onError; } if ( (*pb->bf_getsegcount)(obj,NULL) != 1 ) { PyErr_SetString(PyExc_TypeError, "expected a single-segment buffer object"); goto onError; } len = (*pb->bf_getreadbuffer)(obj,0,&pp); if (len < 0) goto onError; *buffer = pp; *buffer_len = len; return 0; onError: return -1; } /* Takes an arbitrary object which must support the (writeable, single segment) buffer interface and returns a pointer to a writeable memory location in buffer of size buffer_len. buffer and buffer_len are only set in case no error occurrs. Otherwise, -1 is returned and an exception set. */ static int PyObject_AsWriteBuffer(PyObject *obj, void **buffer, int *buffer_len) { PyBufferProcs *pb = obj->ob_type->tp_as_buffer; void*pp; int len; if ( pb == NULL || pb->bf_getwritebuffer == NULL || pb->bf_getsegcount == NULL ) { PyErr_SetString(PyExc_TypeError, "expected a writeable buffer object"); goto onError; } if ( (*pb->bf_getsegcount)(obj,NULL) != 1 ) { PyErr_SetString(PyExc_TypeError, "expected a single-segment buffer object"); goto onError; } len = (*pb->bf_getwritebuffer)(obj,0,&pp); if (len < 0) goto onError; *buffer = pp; *buffer_len = len; return 0; onError: return -1; } #endif /* Python Version in [1.5.2b2, 2.0) */ /* ---------------------------------------------------------------- Python 1.5.2b1 and older: ---------------------------------------------------------------- */ #if PY_VERSION_HEX <= 0x010502B1 /* These are missing from PC/python_nt.def and thus didn't get included in python1.5.lib on Windows platforms. */ #ifdef MS_WIN32 # define PyString_InternInPlace(x) # define PyString_InternFromString(x) PyString_FromString(x) #endif #endif /* Python Version <= 1.5.2b1 */ /* ---------------------------------------------------------------- Python 1.5.2a2 and older: ---------------------------------------------------------------- */ #if PY_VERSION_HEX <= 0x010502A2 extern long PyOS_strtol Py_PROTO((const char *, char **, int)); #endif /* Python Version <= 1.5.2a2 */ /* ---------------------------------------------------------------- Python 1.5.2a1 and older: ---------------------------------------------------------------- */ #if PY_VERSION_HEX <= 0x010502A1 #ifndef PyList_SET_ITEM # define PyList_SET_ITEM(l,i,w) PyList_GET_ITEM(l,i) = w #endif #endif /* Python Version < 1.5.2a1 */ /* ---------------------------------------------------------------- Prior to Python 1.5: ---------------------------------------------------------------- */ #if PY_VERSION_HEX < 0x010500F0 /* New in Python1.5: */ # undef PyString_AS_STRING # define PyString_AS_STRING(op) (((PyStringObject *)(op))->ob_sval) # define PyString_GET_SIZE(op) (((PyStringObject *)(op))->ob_size) # define PyTuple_GET_SIZE(op) (((PyTupleObject *)(op))->ob_size) # define PyList_GET_SIZE(op) (((PyListObject *)(op))->ob_size) /* Changed since 1.4 */ # undef PyList_GET_ITEM # define PyList_GET_ITEM(op, i) (((PyListObject *)(op))->ob_item[i]) # undef PyInt_AS_LONG # define PyInt_AS_LONG(op) (((PyIntObject *)(op))->ob_ival) # undef PyFloat_AS_DOUBLE # define PyFloat_AS_DOUBLE(op) (((PyFloatObject *)(op))->ob_fval) /* This function is taken from error.c in Python 1.5... Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, The Netherlands. All Rights Reserved Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation, and that the names of Stichting Mathematisch Centrum or CWI or Corporation for National Research Initiatives or CNRI not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. While CWI is the initial source for this software, a modified version is made available by the Corporation for National Research Initiatives (CNRI) at the Internet address ftp://ftp.python.org. STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifdef HAVE_STDARG_PROTOTYPES PyObject * PyErr_Format(PyObject *exception, const char *format, ...) #else PyObject * PyErr_Format(exception, format, va_alist) PyObject *exception; const char *format; va_dcl #endif { va_list vargs; char buffer[500]; /* Caller is responsible for limiting the format */ #ifdef HAVE_STDARG_PROTOTYPES va_start(vargs, format); #else va_start(vargs); #endif vsprintf(buffer, format, vargs); PyErr_SetString(exception, buffer); return NULL; } /* Python 1.5 uses instances as exceptions, the 1.4 API only knows about strings. */ #define PyErr_NewException(name,base,dict) PyString_FromString(fullname); /* Missing from rename2.h in Python 1.4 */ #ifndef PyVarObject # define PyVarObject varobject #endif #endif /* Python Version < 1.5 */ #ifdef __cplusplus } #endif /* EOF */ #endif egenix-mx-base-3.2.7/mx/Stack/mxStack/mxstdlib.h0000664000175000017500000002612712133021413021312 0ustar lemburglemburg#ifndef MXSTDLIB_H #define MXSTDLIB_H /* Standard stuff I use often -- not Python specific Copyright (c) 2000, Marc-Andre Lemburg; mailto:mal@lemburg.com Copyright (c) 2000-2013, eGenix.com Software GmbH; mailto:info@egenix.com See the documentation for further copyright information or contact the author. */ /* Standard includes */ #include #include #include #include #include #include /* Limits */ #ifdef HAVE_LIMITS_H # include #else # ifndef INT_MAX # define INT_MAX 2147483647 # endif # ifndef LONG_MAX # define LONG_MAX INT_MAX # endif #endif /* Disable a few MS VC++ warnings that were introduced in VS 2005, e.g. warning C4996: 'getenv': This function or variable may be unsafe. Consider using _dupenv_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. Note that #define _CRT_SECURE_NO_WARNINGS 1 does not work for some reason. You have to use the #pragma warning() to disable warnings inside a header file. */ #if defined(_MSC_VER) && (_MSC_VER >= 1400) # pragma warning(disable:4996) #endif /* --- My own macros for memory allocation... --------------------------- */ /* Define this macro if the code should use C malloc */ /* #define MAL_USE_C_MALLOC */ /* Define this macro if the code should use Python's pymalloc */ /* #define MAL_USE_PYMALLOC */ /* Define this macro if the code should use pymalloc and uses the cnew()/cnewstruct() macros. This is needed to only enable the helper functions when using those macros in pymalloc mode. */ /* #define MAL_USING_CNEW */ /* Decide which variant to use, if no explicit choice was made: C malloc or pymalloc */ #ifdef MAL_USE_C_MALLOC /* Force use of C malloc */ #elif !defined(MAL_USE_PYMALLOC) && defined (PYTHON_API_VERSION) /* Default to using the Python pymalloc in case we're compiling a Python extension */ # define MAL_USE_PYMALLOC #endif #ifndef MAL_USE_PYMALLOC /* --- Use C malloc for memory allocation --- */ # ifdef MAL_MEM_DEBUG /* Include debug information for tracing memory leaks */ # define newstruct(x) \ (mxDebugPrintf("* malloc for struct "#x" (%s:%i)\n",__FILE__,__LINE__),\ (x *)malloc(sizeof(x))) # define cnewstruct(x) \ (mxDebugPrintf("* calloc for struct "#x" (%s:%i)\n",c,__FILE__,__LINE__),\ (x *)calloc(sizeof(x),1)) # define new(x,c) \ (mxDebugPrintf("* malloc for "#c"=%i '"#x"'s (%s:%i)\n",c,__FILE__,__LINE__),\ (x *)malloc(sizeof(x)*(c))) # define cnew(x,c) \ (mxDebugPrintf("* calloc for "#c"=%i '"#x"'s (%s:%i)\n",c,__FILE__,__LINE__),\ (x *)calloc((c),sizeof(x))) # define resize(var,x,c) \ (mxDebugPrintf("* realloc array "#var" ("#x") at %X to size "#c"=%i (%s:%i)\n",var,c,__FILE__,__LINE__),\ (x *)realloc((void*)(var),sizeof(x)*(c))) # define varresize(var,x,bytes) \ (mxDebugPrintf("* realloc var "#var" ("#x") at %X to %i bytes (%s:%i)\n",var,bytes,__FILE__,__LINE__),\ (x *)realloc((void*)(var),(bytes))) # define free(x) \ (mxDebugPrintf("* freeing "#x" at %X (%s:%i)\n",x,__FILE__,__LINE__),\ free((void*)(x))) # else /* Non-debug versions of the macros */ # define newstruct(x) ((x *)malloc(sizeof(x))) # define cnewstruct(x) ((x *)calloc(sizeof(x),1)) # define new(x,c) ((x *)malloc(sizeof(x)*(c))) # define cnew(x,c) ((x *)calloc((c),sizeof(x))) # define resize(var,x,c) ((x *)realloc((void*)(var),sizeof(x)*(c))) # define varresize(var,x,bytes) ((x *)realloc((void*)(var),(bytes))) # define free(x) (free((void*)(x))) # endif #else /* --- Use Python pymalloc for memory allocation --- */ # ifdef MAL_USING_CNEW /* Helper needed since Python doesn't define a calloc() interface. */ static void *mx_PyObject_CALLOC(register size_t size) { register void *mem; if (size == 0) return NULL; mem = PyObject_MALLOC(size); if (mem) memset(mem, 0, size); return mem; } # endif # ifndef MAL_MEM_DEBUG /* Non-debug versions of the macros */ # define newstruct(x) ((x *)PyObject_MALLOC(sizeof(x))) # ifdef MAL_USING_CNEW # define cnewstruct(x) ((x *)mx_PyObject_CALLOC(sizeof(x))) # endif # define new(x,c) ((x *)PyObject_MALLOC(sizeof(x)*(c))) # ifdef MAL_USING_CNEW # define cnew(x,c) ((x *)mx_PyObject_CALLOC(sizeof(x)*(c))) # endif # define resize(var,x,c) ((x *)PyObject_REALLOC((void*)(var),sizeof(x)*(c))) # define varresize(var,x,bytes) ((x *)PyObject_REALLOC((void*)(var),(bytes))) # define free(x) (PyObject_FREE((void*)(x))) # else /* Debug versions of the macros */ # define newstruct(x) \ (mxDebugPrintf("* malloc for struct "#x" (%s:%i)\n",__FILE__,__LINE__), \ (x *)PyObject_MALLOC(sizeof(x))) # ifdef MAL_USING_CNEW # define cnewstruct(x) \ (mxDebugPrintf("* calloc for struct "#x" (%s:%i)\n",c,__FILE__,__LINE__), \ ((x *)mx_PyObject_CALLOC(sizeof(x)))) # endif # define new(x,c) \ (mxDebugPrintf("* malloc for "#c"=%i '"#x"'s (%s:%i)\n",c,__FILE__,__LINE__), \ ((x *)PyObject_MALLOC(sizeof(x)*(c)))) # ifdef MAL_USING_CNEW # define cnew(x,c) \ (mxDebugPrintf("* calloc for "#c"=%i '"#x"'s (%s:%i)\n",c,__FILE__,__LINE__), \ ((x *)mx_PyObject_CALLOC(sizeof(x)*(c)))) # endif # define resize(var,x,c) \ (mxDebugPrintf("* realloc array "#var" ("#x") at %X to size "#c"=%i (%s:%i)\n",var,c,__FILE__,__LINE__), \ ((x *)PyObject_REALLOC((void*)(var),sizeof(x)*(c)))) # define varresize(var,x,bytes) \ (mxDebugPrintf("* realloc var "#var" ("#x") at %X to %i bytes (%s:%i)\n",var,bytes,__FILE__,__LINE__), \ ((x *)PyObject_REALLOC((void*)(var),(bytes)))) # define free(x) \ (mxDebugPrintf("* freeing "#x" at %X (%s:%i)\n",x,__FILE__,__LINE__), \ (PyObject_FREE((void*)(x)))) # endif #endif /* --- Debugging output ------------------------------------------------- */ /* Use the flag MAL_DEBUG to enable debug processing. The flag MAL_DEBUG_WITH_PYTHON can be used to indicate that the object file will be linked with Python, so we can use Python APIs for the debug processing here. */ #ifdef MAL_DEBUG_WITH_PYTHON # ifndef PYTHON_API_VERSION # error "mx.h must be included when compiling with MAL_DEBUG_WITH_PYTHON" # endif # ifndef MAL_DEBUG # define MAL_DEBUG # endif #else # if defined(PYTHON_API_VERSION) && defined(MAL_DEBUG) # define MAL_DEBUG_WITH_PYTHON # endif #endif /* Indicator for the availability of these interfaces: */ #define HAVE_MAL_DEBUG /* Name of the environment variable defining the log file name to be used: */ #ifndef MAL_DEBUG_OUTPUTFILE_ENV_VARIABLE # define MAL_DEBUG_OUTPUTFILE_ENV_VARIABLE "mxLogFile" #endif /* File name to be used for debug logging (each object file using this facility may set its own logging file) if no environment variable is set: */ #ifndef MAL_DEBUG_OUTPUTFILE # define MAL_DEBUG_OUTPUTFILE "mx.log" #endif /* Name of the environment variable defining the log file prefix to be used (e.g. to direct all log files into a separate directory): */ #ifndef MAL_DEBUG_OUTPUTFILEPREFIX_ENV_VARIABLE # define MAL_DEBUG_OUTPUTFILEPREFIX_ENV_VARIABLE "mxLogFileDir" #endif /* File name prefix to be used for log files, if no environment variable is set: */ #ifndef MAL_DEBUG_OUTPUTFILEPREFIX # define MAL_DEBUG_OUTPUTFILEPREFIX "" #endif /* Log id to be used */ #ifndef MAL_DEBUG_LOGID # define MAL_DEBUG_LOGID "New Log Session" #endif /* Debug printf() API Output is written to a log file or stream. If the output file is not yet open, the function will try to open the file as defined by the environment or the program defines. The file remains open until the program terminates. Subsequent changes to the environment are not taken into account. The output file is deduced in the following way: 1. get the filename from the environment, revert to the predefined value 2. get the filename prefix from the environment, revert to the predefined value 3. if filename is one of "stderr" or "stdout" use the native streams for output; otherwise try to open fileprefix + filename reverting to stderr in case this fails. */ static int mxDebugPrintf(const char *format, ...) { va_list args; static FILE *mxDebugPrintf_file; if (!mxDebugPrintf_file) { time_t now; char *filename,*fileprefix; now = time(NULL); filename = getenv(MAL_DEBUG_OUTPUTFILE_ENV_VARIABLE); if (!filename) filename = MAL_DEBUG_OUTPUTFILE; fileprefix = getenv(MAL_DEBUG_OUTPUTFILEPREFIX_ENV_VARIABLE); if (!fileprefix) fileprefix = MAL_DEBUG_OUTPUTFILEPREFIX; if (strcmp(filename,"stdout") == 0) mxDebugPrintf_file = stdout; else if (strcmp(filename,"stderr") == 0) mxDebugPrintf_file = stderr; else { char logfile[512]; if (strlen(fileprefix) + strlen(filename) > sizeof(logfile) - 1) { /* Hack to shut up "cc -Wall" warning that this function is not used... */ static void *mxDebugPrintf_used; mxDebugPrintf_used = (void *)mxDebugPrintf; /* Default to stderr in case the log file name doesn't fit the available buffer */ mxDebugPrintf_file = stderr; fprintf(mxDebugPrintf_file, "\n*** Log file name too long: '%s%s'; " "using stderr\n", fileprefix, filename); } else { /* We made sure that there is enough room in logfile, so can use the unlimited APIs here */ strcpy(logfile, fileprefix); strcat(logfile, filename); mxDebugPrintf_file = fopen(logfile,"ab"); if (!mxDebugPrintf_file) { /* Default to stderr in case the log file cannot be opened */ mxDebugPrintf_file = stderr; fprintf(mxDebugPrintf_file, "\n*** Failed to open log file '%s'; " "using stderr\n",logfile); } } } fprintf(mxDebugPrintf_file, "\n--- "MAL_DEBUG_LOGID" --- %s\n", ctime(&now)); } va_start(args,format); vfprintf(mxDebugPrintf_file,format,args); fflush(mxDebugPrintf_file); va_end(args); return 1; } #ifdef MAL_DEBUG # ifdef MAL_DEBUG_WITH_PYTHON /* Use the Python debug flag to enable debugging output (python -d) */ # define DPRINTF if (Py_DebugFlag) mxDebugPrintf # define IF_DEBUGGING if (Py_DebugFlag) # define DEBUGGING (Py_DebugFlag > 0) # else /* Always output debugging information */ # define DPRINTF mxDebugPrintf # define IF_DEBUGGING # define DEBUGGING (1) # endif #else # ifndef _MSC_VER /* This assumes that you are using an optimizing compiler which eliminates the resulting debug code. */ # define DPRINTF if (0) mxDebugPrintf # define IF_DEBUGGING if (0) # define DEBUGGING (0) # else /* MSVC doesn't do a good job here, so we use a different approach. */ # define DPRINTF 0 && mxDebugPrintf # define IF_DEBUGGING if (0) # define DEBUGGING (0) # endif #endif /* --- Misc ------------------------------------------------------------- */ /* The usual bunch... */ #ifndef max # define max(a,b) ((a>b)?(a):(b)) #endif #ifndef min # define min(a,b) ((a 0 s.resize() print 'Clear.' s.clear() assert len(s) == 0 print 'Non-zero testing.' s.push_many(range(100)) i = 0 while s: s.pop() i = i + 1 assert i == 100 # push many + exceptions print 'Push many and exceptions.' class C: def __getitem__(self,i): if i < 50: return i + 1 else: raise IndexError def __len__(self): return 100 l = C() try: s.push_many(l) except IndexError: pass else: raise AssertionError,'push_many() does not handle errors correctly' assert len(s) == 0 del s # Index access print 'Index access.' s = StackFromSequence(range(1000)) for i in range(1000): assert s[i] == i for i in range(1000): assert s[-i-1] == 999-i i = 0 for x in s: assert x == i i = i + 1 del s # Implementation deleaked up to this line. print print 'Works.' if '-m' in sys.argv: while 1: test() else: test() egenix-mx-base-3.2.7/mx/Stack/COPYRIGHT0000664000175000017500000000176211552064177017214 0ustar lemburglemburg --------------------------------------------------------------------- COPYRIGHT NOTICE --------------------------------------------------------------------- Copyright (c) 1997-2000, IKDS Marc-Andre Lemburg; mailto:mal@lemburg.com Copyright (c) 2000-2011, eGenix.com Software GmbH; mailto:info@egenix.com All Rights Reserved. This software is protected by copyright and other intellectual property laws and by international treaties. It may only be used under the conditions and terms of the eGenix.com Public License Agreement. You should have received a copy of the eGenix.com Public License Agreement with this software (usually in the file LICENSE located in the package's or software's main directory). Please write to licenses@egenix.com to obtain a copy in case you should not have received a copy. egenix-mx-base-3.2.7/mx/Stack/LICENSE0000664000175000017500000001075307620177404016725 0ustar lemburglemburg________________________________________________________________________ EGENIX.COM PUBLIC LICENSE AGREEMENT VERSION 1.1.0 ________________________________________________________________________ 1. Introduction This "License Agreement" is between eGenix.com Software, Skills and Services GmbH ("eGenix.com"), having an office at Pastor-Loeh-Str. 48, D-40764 Langenfeld, Germany, and the Individual or Organization ("Licensee") accessing and otherwise using this software in source or binary form and its associated documentation ("the Software"). 2. License Subject to the terms and conditions of this eGenix.com Public License Agreement, eGenix.com hereby grants Licensee a non-exclusive, royalty-free, world-wide license to reproduce, analyze, test, perform and/or display publicly, prepare derivative works, distribute, and otherwise use the Software alone or in any derivative version, provided, however, that the eGenix.com Public License Agreement is retained in the Software, or in any derivative version of the Software prepared by Licensee. 3. NO WARRANTY eGenix.com is making the Software available to Licensee on an "AS IS" basis. SUBJECT TO ANY STATUTORY WARRANTIES WHICH CAN NOT BE EXCLUDED, EGENIX.COM MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, EGENIX.COM MAKES NO AND DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF THE SOFTWARE WILL NOT INFRINGE ANY THIRD PARTY RIGHTS. 4. LIMITATION OF LIABILITY EGENIX.COM SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF THE SOFTWARE FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS (INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF BUSINESS PROFITS, BUSINESS INTERRUPTION, LOSS OF BUSINESS INFORMATION, OR OTHER PECUNIARY LOSS) AS A RESULT OF USING, MODIFYING OR DISTRIBUTING THE SOFTWARE, OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO THE ABOVE EXCLUSION OR LIMITATION MAY NOT APPLY TO LICENSEE. 5. Termination This License Agreement will automatically terminate upon a material breach of its terms and conditions. 6. Third Party Rights Any software or documentation in source or binary form provided along with the Software that is associated with a separate license agreement is licensed to Licensee under the terms of that license agreement. This License Agreement does not apply to those portions of the Software. Copies of the third party licenses are included in the Software Distribution. 7. General Nothing in this License Agreement affects any statutory rights of consumers that cannot be waived or limited by contract. Nothing in this License Agreement shall be deemed to create any relationship of agency, partnership, or joint venture between eGenix.com and Licensee. If any provision of this License Agreement shall be unlawful, void, or for any reason unenforceable, such provision shall be modified to the extent necessary to render it enforceable without losing its intent, or, if no such modification is possible, be severed from this License Agreement and shall not affect the validity and enforceability of the remaining provisions of this License Agreement. This License Agreement shall be governed by and interpreted in all respects by the law of Germany, excluding conflict of law provisions. It shall not be governed by the United Nations Convention on Contracts for International Sale of Goods. This License Agreement does not grant permission to use eGenix.com trademarks or trade names in a trademark sense to endorse or promote products or services of Licensee, or any third party. The controlling language of this License Agreement is English. If Licensee has received a translation into another language, it has been provided for Licensee's convenience only. 8. Agreement By downloading, copying, installing or otherwise using the Software, Licensee agrees to be bound by the terms and conditions of this License Agreement. For question regarding this License Agreement, please write to: eGenix.com Software, Skills and Services GmbH Pastor-Loeh-Str. 48 D-40764 Langenfeld Germany egenix-mx-base-3.2.7/mx/Stack/Makefile.pkg0000664000175000017500000000046307003370435020127 0ustar lemburglemburgall: compile install compile: cd mxStack; \ if ! test -f Makefile; then $(MAKE) -f Makefile.pre.in boot; fi; \ $(MAKE) install: cd mxStack; \ $(MAKE) install test: cd mxStack; \ python test.py doc: -true # Cleanup before distributing the package # distclean: cd mxStack; \ $(MAKE) distclean egenix-mx-base-3.2.7/mx/Stack/README0000664000175000017500000000021607315370436016572 0ustar lemburglemburgPlease see the documentation in the Doc/ subdirectory for further information on installation and usage. Marc-Andre Lemburg, mal@lemburg.com egenix-mx-base-3.2.7/mx/Stack/UserStack.py0000664000175000017500000000217612133021443020160 0ustar lemburglemburg""" A pure Python Stack implementation modelled after mxStack. Copyright (c) 2000, Marc-Andre Lemburg; mailto:mal@lemburg.com Copyright (c) 2000-2013, eGenix.com Software GmbH; mailto:info@egenix.com See the documentation for further information on copyrights, or contact the author. All Rights Reserved. """ class UserStack: def __init__(self): self.stack = () def push(self,x): self.stack = (x,self.stack) def pop(self): x, self.stack = self.stack return x def not_empty(self): return len(self.stack) != 0 def top(self): return self.stack[0] def __len__(self): i = 0 s = self.stack while len(s) != 0: s = s[1] i = i + 1 return i def __repr__(self): l = [] s = self.stack while len(s) != 0: l.append(repr(s[0])) s = s[1] return '' % ', '.join(l) def __str__(self): l = [] s = self.stack while len(s) != 0: l.append(s[0]) s = s[1] return 's' + repr(l) egenix-mx-base-3.2.7/mx/Stack/__init__.py0000664000175000017500000000054212133021444020007 0ustar lemburglemburg""" mxStack - A stack implementation Copyright (c) 2000, Marc-Andre Lemburg; mailto:mal@lemburg.com Copyright (c) 2000-2013, eGenix.com Software GmbH; mailto:info@egenix.com See the documentation for further information on copyrights, or contact the author. All Rights Reserved. """ from mxStack import * from mxStack import __version__ egenix-mx-base-3.2.7/mx/Stack/stackbench.py0000664000175000017500000000526012133021446020361 0ustar lemburglemburg#!/usr/local/bin/python -O """ stackbench - stack implementation benchmark Copyright (c) 2000, Marc-Andre Lemburg; mailto:mal@lemburg.com Copyright (c) 2000-2013, eGenix.com Software GmbH; mailto:info@egenix.com See the documentation for further information on copyrights, or contact the author. All Rights Reserved. """ import time from mx import Stack import UserStack from sys import argv, exit try: numtests, pushes, pops = eval(argv[1]), eval(argv[2]), eval(argv[3]) assert pushes >= pops except: print 'usage: stackbench.py , where >= ' exit(1) def test(reps, func): start_cpu = time.clock() for i in xrange(reps): x = func() return time.clock() - start_cpu def method1(): x = [] # built-in list push = x.append for i in range(pushes): push('spam'+'i') for i in range(pops): top = x[-1]; del x[-1] if 0: def method1a(): x = [] # built-in list push = x.append for i in range(pushes): push('spam'+'i') for i in range(pops): top = x.pop() def method2(): x = None # built-in tuples for i in range(pushes): x = ('spam'+'i',x) for i in range(pops): (top, x) = x def method3(): s = Stack.Stack() # Stack push = s.push pop = s.pop for i in range(pushes): push('spam'+'i') for i in range(pops): top = pop() def method3a(): s = Stack.Stack() # Stack push = s.push for i in range(pushes): push('spam'+'i') t = s.pop_many(pops) # pop all at once def method3b(): s = Stack.Stack() # Stack push = s.push for i in range(pushes): s << ('spam'+'i') for i in range(pops): top = s >> 1 def method3c(): s = Stack.Stack() # Stack l = [''] * pushes for i in range(pushes): l[i] = ('spam'+'i') s.push_many(l) s.pop_many(pops) def method4(): s = UserStack.UserStack() # UserStack push = s.push pop = s.pop for i in range(pushes): push('spam'+'i') for i in range(pops): top = pop() print 'list: ', test(numtests, method1) # run func 20 tests print 'tuples:', test(numtests, method2) print 'Stack (with push + pop):', test(numtests, method3) print 'Stack (with push + pop_many):', test(numtests, method3a) print 'Stack (with << + >>):', test(numtests, method3b) print 'Stack (with push_many + pop_many):', test(numtests, method3c) print 'UserStack:', test(numtests, method4) egenix-mx-base-3.2.7/mx/TextTools/0000755000175000017500000000000012251446113016600 5ustar lemburglemburgegenix-mx-base-3.2.7/mx/TextTools/Constants/0000755000175000017500000000000012251446113020554 5ustar lemburglemburgegenix-mx-base-3.2.7/mx/TextTools/Constants/Sets.py0000664000175000017500000000717412133021446022054 0ustar lemburglemburg# -*- coding: latin-1 -*- """ Constants for sets (of characters) Copyright (c) 2000, Marc-Andre Lemburg; mailto:mal@lemburg.com Copyright (c) 2000-2013, eGenix.com Software GmbH; mailto:info@egenix.com See the documentation for further information on copyrights, or contact the author. All Rights Reserved. """ from mx.TextTools.mxTextTools import CharSet # Simple character strings a2z = 'abcdefghijklmnopqrstuvwxyz' A2Z = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' umlaute = '' Umlaute = '' alpha = A2Z + a2z german_alpha = A2Z + a2z + umlaute + Umlaute number = '0123456789' alphanumeric = alpha + number white = ' \t\v' newline = '\r\n' formfeed = '\f' whitespace = white + newline + formfeed any = '\000\001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037 !"#$%&\'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\177\200\201\202\203\204\205\206\207\210\211\212\213\214\215\216\217\220\221\222\223\224\225\226\227\230\231\232\233\234\235\236\237\240\241\242\243\244\245\246\247\250\251\252\253\254\255\256\257\260\261\262\263\264\265\266\267\270\271\272\273\274\275\276\277\300\301\302\303\304\305\306\307\310\311\312\313\314\315\316\317\320\321\322\323\324\325\326\327\330\331\332\333\334\335\336\337\340\341\342\343\344\345\346\347\350\351\352\353\354\355\356\357\360\361\362\363\364\365\366\367\370\371\372\373\374\375\376\377' # Precompiled as sets, e.g. a2z_set = set(a2z) a2z_set = '\000\000\000\000\000\000\000\000\000\000\000\000\376\377\377\007\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000' A2Z_set = '\000\000\000\000\000\000\000\000\376\377\377\007\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000' alpha_set = '\000\000\000\000\000\000\000\000\376\377\377\007\376\377\377\007\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000' german_alpha_set = '\000\000\000\000\000\000\000\000\376\377\377\007\376\377\377\007\000\000\000\000\000\000\000\000\020\000@\220\020\000@\020' number_set = '\000\000\000\000\000\000\377\003\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000' alphanumeric_set = '\000\000\000\000\000\000\377\003\376\377\377\007\376\377\377\007\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000' white_set = '\000\002\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000' newline_set = '\000$\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000' whitespace_set = '\000&\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000' nonwhitespace_set = '\377\301\377\377\376\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377' any_set = '\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377' # Compiled as CharSet instances a2z_charset = CharSet('a-z') A2Z_charset = CharSet('A-Z') umlaute_charset = CharSet('') Umlaute_charset = CharSet('') alpha_charset = CharSet(A2Z + a2z) german_alpha_charset = CharSet(A2Z + a2z + umlaute + Umlaute) number_charset = CharSet('0-9') alphanumeric_charset = CharSet(alpha + number) white_charset = CharSet(' \t\v') newline_charset = CharSet('\r\n') formfeed_charset = CharSet('\f') whitespace_charset = CharSet(white + newline + formfeed) nonwhitespace_charset = CharSet('^' + white + newline + formfeed) any_charset = CharSet('\000-\377') # Clean up del CharSet egenix-mx-base-3.2.7/mx/TextTools/Constants/TagTables.py0000664000175000017500000000164412133021447023001 0ustar lemburglemburg""" Constants for writing tag tables These are defined in mxte.h and imported here via the C extension. See the documentation for details about the various constants. Copyright (c) 2000, Marc-Andre Lemburg; mailto:mal@lemburg.com Copyright (c) 2000-2013, eGenix.com Software GmbH; mailto:info@egenix.com See the documentation for further information on copyrights, or contact the author. All Rights Reserved. """ ### Module init. def _module_init(): from mx.TextTools.mxTextTools import mxTextTools global id2cmd id2cmd = {} # Fetch symbols from the C extension and add them to this module ns = globals() for name, value in vars(mxTextTools).items(): if name[:7] == '_const_': cmd = name[7:] ns[cmd] = value if value == 0: id2cmd[0] = 'Fail/Jump' else: id2cmd[value] = cmd _module_init() egenix-mx-base-3.2.7/mx/TextTools/Constants/__init__.py0000664000175000017500000000000007413120663022660 0ustar lemburglemburgegenix-mx-base-3.2.7/mx/TextTools/Doc/0000755000175000017500000000000012251446113017305 5ustar lemburglemburgegenix-mx-base-3.2.7/mx/TextTools/Doc/mxTextTools.pdf0000664000175000017500000256617312133273271022342 0ustar lemburglemburg%PDF-1.4 % 1920 0 obj << /Linearized 1 /O 1924 /H [ 1539 1035 ] /L 715899 /E 280553 /N 42 /T 677379 >> endobj xref 1920 24 0000000016 00000 n 0000000854 00000 n 0000001218 00000 n 0000001373 00000 n 0000002574 00000 n 0000002976 00000 n 0000003007 00000 n 0000003847 00000 n 0000003890 00000 n 0000004134 00000 n 0000005406 00000 n 0000005430 00000 n 0000005905 00000 n 0000006151 00000 n 0000006385 00000 n 0000006593 00000 n 0000023174 00000 n 0000034753 00000 n 0000037847 00000 n 0000038055 00000 n 0000038135 00000 n 0000040815 00000 n 0000001539 00000 n 0000002551 00000 n trailer << /Size 1944 /Info 1912 0 R /Encrypt 1922 0 R /Root 1921 0 R /Prev 677367 /ID[<969a3c361132669e6b7b3978508cfc7a>] >> startxref 0 %%EOF 1921 0 obj << /Type /Catalog /Pages 1915 0 R /Metadata 1913 0 R /Outlines 240 0 R /OpenAction [ 1924 0 R /XYZ null null null ] /PageMode /UseNone /PageLabels 1911 0 R /StructTreeRoot 1923 0 R /PieceInfo << /MarkedPDF << /LastModified (RO37\\fb`)>> >> /LastModified (RO37\\fb`) /MarkInfo << /Marked true /LetterspaceFlags 0 >> >> endobj 1922 0 obj << /Filter /Standard /R 3 /O (WЏ X_7!_ֵb{J.4@K@) /U (\(Oh0g,#) /P -12 /V 2 /Length 128 >> endobj 1923 0 obj << /Type /StructTreeRoot /RoleMap 272 0 R /ClassMap 275 0 R /K [ 1278 0 R 1279 0 R 1280 0 R ] /ParentTree 1700 0 R /ParentTreeNextKey 54 >> endobj 1942 0 obj << /S 995 /T 1150 /O 1240 /L 1256 /C 1272 /Filter /FlateDecode /Length 1943 0 R >> stream @"}O}m+Q[m[`t@l'j-j,m9dDcA _NgXZuOxE0"EhրY gX/v+  ;5;a-iK΂tT*p]wb.iG}9StsE0R+$눁=Ch~Kh'~`swj[Iuni1H R^@vLߩ`^Aۍ_-Kd Ac\h6Q*bHTt=zMaPpx=#U!-Y"65F ~nJ XG%XdvzuRw6opUp%&Y'^B/ endstream endobj 1943 0 obj 891 endobj 1924 0 obj << /Type /Page /Parent 1914 0 R /Resources << /ColorSpace << /CS2 1927 0 R /CS3 1925 0 R >> /XObject << /Im1 1941 0 R >> /ExtGState << /GS2 1939 0 R /GS3 1938 0 R >> /Font << /TT3 1926 0 R /TT4 1931 0 R /TT5 1934 0 R >> /ProcSet [ /PDF /Text /ImageC ] >> /Contents 1929 0 R /Thumb 1823 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 0 >> endobj 1925 0 obj /DeviceGray endobj 1926 0 obj << /Type /Font /Subtype /TrueType /FirstChar 32 /LastChar 252 /Widths [ 274 329 278 0 0 757 714 144 329 329 494 833 274 329 274 281 549 549 549 549 549 549 549 549 549 549 326 326 833 833 833 0 0 604 587 669 764 502 491 734 759 282 282 602 461 905 741 821 539 821 574 512 530 743 625 958 541 519 606 329 281 329 1000 500 0 474 556 472 556 498 291 503 556 250 250 500 250 854 552 552 556 556 356 434 311 552 479 766 463 486 475 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 833 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 604 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 821 0 0 0 0 0 743 0 0 560 0 0 0 0 474 0 0 0 0 498 0 0 0 0 0 0 0 0 0 0 0 0 552 0 0 0 0 0 552 ] /Encoding /WinAnsiEncoding /BaseFont /MJGMHF+ZapfHumanist601BT-Demi /FontDescriptor 1928 0 R >> endobj 1927 0 obj [ /ICCBased 1940 0 R ] endobj 1928 0 obj << /Type /FontDescriptor /Ascent 962 /CapHeight 687 /Descent -272 /Flags 32 /FontBBox [ -167 -273 1106 963 ] /FontName /MJGMHF+ZapfHumanist601BT-Demi /ItalicAngle 0 /StemV 94.019 /XHeight 0 /FontFile2 1935 0 R >> endobj 1929 0 obj << /Filter /FlateDecode /Length 1930 0 R >> stream LQIiX8HԆձ7A뛕9msnٵwl|s:'7UKc0uK:YZ/T|m~s"pzy{51nRYE Awy{D8D4PF.5Ζ/ϼt\S81K:kI^a]) 5~n:"׽4%ZqSoAS~j̆ ϼI@XSXyC5Ρd="IHO$~ o,Z (7qxn>RvEAƦYMR|>e=U"Г)+n4/g۬*(0 %fdìx^RNEAc!2ai}&QӔH_ PU[xu$*Nki0Lʎd"\J3[[i1푡WM'#@8"|@7iS}j5:ǤL Nahr$ 7a묩6y1ݶA?OPH"i!qeuQ歵m%<' [rɨy To /S5/8Kp ̐gxD^jeZv :fa^:oh IZu1ꣲЮN?>9n5~<6iP76PZZhͿwPS2nF~)2NF'Uwl!{I QoY{ZXLצ H{t . uӥrDbř &n ]s|mbF>B`op Q(SϧLo4Cw$ʟ%bEIh5 ]4DdvE u+{2@5]+Kd$>-Wg"n;ҞB!o6-fN) pn]{ m.^E-@U֣sPHcԆNRpe4!Pl endstream endobj 1930 0 obj 1190 endobj 1931 0 obj << /Type /Font /Subtype /TrueType /FirstChar 32 /LastChar 121 /Widths [ 274 0 0 0 0 0 0 0 0 0 0 0 0 0 274 0 0 549 549 549 549 549 549 549 549 0 0 0 0 0 0 0 0 608 597 660 0 515 502 743 0 329 0 0 476 891 740 828 587 0 613 544 549 731 0 971 573 547 0 0 0 0 0 0 0 516 0 484 604 535 0 514 593 291 0 0 299 891 593 567 0 0 382 427 338 592 0 0 472 478 ] /Encoding /WinAnsiEncoding /BaseFont /MJGMGC+ZapfHumanist601BT-Ultra /FontDescriptor 1932 0 R >> endobj 1932 0 obj << /Type /FontDescriptor /Ascent 961 /CapHeight 687 /Descent -284 /Flags 32 /FontBBox [ -167 -284 1186 962 ] /FontName /MJGMGC+ZapfHumanist601BT-Ultra /ItalicAngle 0 /StemV 166.043 /XHeight 0 /FontFile2 1936 0 R >> endobj 1933 0 obj << /Type /FontDescriptor /Ascent 951 /CapHeight 0 /Descent -273 /Flags 96 /FontBBox [ -220 -274 1143 951 ] /FontName /MJGMGE+ZapfHumanist601BT-UltraItalic /ItalicAngle -15 /StemV 0 /FontFile2 1937 0 R >> endobj 1934 0 obj << /Type /Font /Subtype /TrueType /FirstChar 32 /LastChar 32 /Widths [ 274 ] /Encoding /WinAnsiEncoding /BaseFont /MJGMGE+ZapfHumanist601BT-UltraItalic /FontDescriptor 1933 0 R >> endobj 1935 0 obj << /Filter /FlateDecode /Length 16487 /Length1 23908 >> stream OĆ.C&`%V `KJX3zd8m,3ЂGL 9nĥ3":ĽO,m{cR'qO8 \L(s69O݁d/dIA?%3\L̡;Ck-ugif0Im{E& ؐɒ z#y.踜歼NZ}VXP, #`>(TPCF { ?>Af8̦VQ n@PZƆ |0c|rh)5o5ڕk`0n@L-H$qh6C&(0ܲ|q/NiL%8'YEd!^,0y?>@^|ջQL&{j.GIU`4rkۘ"7` c'wGd7:aڪ+qJ`q鐞ڶ޾L1fF&XyF j@"ŭ96|1S&avqrX5ώ E=r5s' m#-" ܍lY,D[0=*>K$ԯXL!|$Bj[#FM61nMg-t*[zbS5NNj5gPWIV\|ȑgw]ԉ0u@1!T]$Ɗ&F`d_prD$6;P08_`[S$J)vpxu E|HE0K'h,ZZ:Ub 5*w 2Ow.0=D~A T[1ܪuluK| qNEQ<-W>\8q5P._f q4= {* EyZ'fuMZ7_Av6v99wRFoߜOڋ _qGi\Bi1 aSИQ` ث{ *ࠠ?* ]x(|8􇤏v1ƾO%6q:Ka4"Qre9C$Ыc⋎*NtAmjD!ͦxO X4ȖyoQtkcOϟ/piӏuDڌ:"]sU]BMȕCO_,OptO;THĔtVl Xǝd9vA8M+;6rk9,:.9UN?ˆ@tXIRL98Gj.\[/şVs,+~T 1/AMUM:p2 7YUϽ!9 &#. ;eBW!FFPop;zV/kL3.M920:Ms֛cOBw9&BC?[AG()x5ܯi (׆*PxA]Ok|9Bj&3_)C}&h?@Lxgtv˧BARGd2+-:RW߮aݛW4`53Xr”ғ7mP,{u~C]S&\ L _u .knI1 n4}"kNkZ"|YHH@,M`|gS? LvDڂswӎ.W'y|5dj*V+u :=cXJ]0-8с[geDQFשa~H٦RpJ^I\CRqTXMx!XB).ܿ/O$B'j/ޟW_u7S LRJǣNҸ0WByq1O=NT?zLZbv m8Lhe/5 ͡ Zd |{UT[e WB@*x|آRV.o*#LJMX UG2N l,QrY{G:uHdfJ?ޫa:0zƻhdίv«+@J^OJߎڄ{r0αgad2rw^bYAr0%$5ݪؑ9O8V8Y3Ln#*Ўǃ<`%lFb7@=mG&ӏ 9^>q9][OW xq!hL( Y]%5]MuO q8 { Kފ2NNXKH[L}-ZEs$fABwwđsU omC8ՋQP1Xژ ovlJI\v re Z:EW<:Ю4JX(A!. zĴ EE% 0Uaq{:qiS!u3bh>t;4¿&4n`!"i+UN` (443`Tk >Ү[ ZZ,}|:-śY˹FNE6:^iB*Ru_,ng}5)@UG,hZ8Ow编dJ59V/QAz t&>;' b^ʹI2^jѕ ll xe˂AP\mh'IUܦNd']xN'> pKpPaDb!W^k='i͔оY:@ThE ~ڄ6|ZrpFxs6DfWXciU41+跡#[jĂϬq\b}:!W ɀ9YPdCi/Mmv-eDbcö0׬>5 u(cCA˨41ad8|_9Q+ t%pEiBy泹K"n&`U:sUaoڛO1Jנъ.'Of. ^ ,j>pKr4=GgZ9n:$VQR9[]:cU1{g"{ż$E<2CP=ube'|_'}$!KE&Fj' ;?gs^YAxLوJOU9Dx -sgX8\tϙQCf>'ȓl-@P>p |E]‹qWFMHaX)@45}ȱ,:6&>^TTo B˺Jy9S,ƞY5gUгDy#yW5JNs߷JHYYxlu ɕn'^LzvEFÌ*|nԺmLhPZXl&g%[ȳz&䇬~:#ã{FZCWS4qqD J>::>vRП$Swcu&# Z&Πr+Ke YaHѲ!<){0Y 8^SX9A,&IɁ0 ͢#gN0nlӗ lJ\t˳ ;qU>CCxEÌ' [J%ż_j@<$c3'7La )_y!~C&/w4:Gʎ{\)4g2ʟx_Z{~t(ȑjXEu|B75pխv؀eh[ۨ8CS o~Z_^w)~:\ Yē=lLr{ż.y"X9u6KJ,Bׇ-X"%X]r.,{ƥS9~}D.(+mJk]B}Xo:OY1 ώGlx$U:!՞\{>17FLͦ|Nl}#. RHֈzEʼn <绶 5f0O%VHwQ'1l gVR?y"]6)*gMmrnJvV4G@}W}K҅}蛣F=TsD ɏЎ!Cd?Ưe72uE!i֧l}=^W4y5Sf=' bM9o&`Q zpxqye#zMysY cC;pb41[:UZ2_+7Fոꀋ|R=<N51\WUNt۱u0|z=>k n\ȩjOV]N/m20=Q଻m"rEU''sF T#l*;\FKJL 9Jac6eb=+~MG&uiӽ&ה/":xs[m)MS>"Bmw}A5%C[UӥBTCunGnC)W!T/}G$Hu"20aSVz]9'P ekSG'+ed;y 凒xOwyطs_^c <OBt,q#R{rUcsÊ>0D'tМirրMŻ`HXmhAw '8qDm #NlӪ5v%n i@Q{0;L3mdpF_VZmpd( p 9L)Wo?R>EGؤ(^BaQChLJ f>}jxdpvy'Sճ~]l?kem\H#d9GbqKqխ{&F A;WK?VKJS>?(cww:0 (OP".w2mvE-}osCECϏ9aJu8;$&X "y+]DԾ>ggH6zPHxϦi/fZJqʪgm@ZyF\F@-U5JmGE*<دжՠdB]KnQ5_a4V׼|¾PMk~k*f2P:CvH5UUm!?@.'~mA(>A&3HKv)TZJr I(]/*wվm4D A(8Ș! T~9Q? QуU o{S#Yoa=\5RoGp2f:swZDz!hŔ}-bu-֑O["bȡ(rLyj>'r,6SN)-z)xĮ ?EKI#5>ļߜ'c E }d+<A=Hsu7&UYEkh .4HUyqZ8 @I#p"毺tDDϸ$Ok݆ j<7$x@ A\@ɹcl2\+ʨC΄+`!?[e ϴjM@qm$/8sbk|TZw @-;/pWd"$9' E|dxZwE͌ SO]q_f[swK~ES*lkA/XwgM: Y>N^ȋU 4^zc'$PDZv_A8 H5OI;rG|IA\0`3 .}q<:H ɡk3G$4¨ψ"֢?ׂ2-!ǃt`^'pYmL u{I*3Dj'e=Oy05-syjG>V'!\s`J.: XfA Bi%T^ [ y4U[BA"kr0՝crTE?] d*U0Ѕ\p.PV~mE[AxP,V|M|)x"׸wY$DV sZ;vaWυ&J7`י5tf4k؃fv́3Nl8x_'xqwo oS)qxGD Hxc3OS|Lg0q4r0`"|ڠ/)ߖ$v ߧ:6ۧ :0Or`Xx4&xn !V8͚sI24FoU1Bځ:e=*@Yo:h` c*IHБ0dC[fN.A Ϸǫ(6R tZq2kPj ). w#\e9\9ʙ঎ʱ)A,Tm_V͍#,ePhM6N?lC$:<;:_;#(zΑyê1ɡјV6]%Xڏ[xBo~tO>餲<](#wpbzbiԚiSf̉3VIF\;]wӯ*yJ~;ޚ _4i >;h |ɭN?{%pxnBI jz˧,?XsK5MA w45dH/&uj?@2Cް]V$AlnxOSxV# bԞ^kq\ԣz:‹؃" Ғi+\M:&Y+J<_U7'hwiA`K׈;lF>BD?giƆikΏ57s,sOK)C= M u@PY<#7"qN'ODbw +7_mm J)vMBjFΦ ݣMf|FD544G'}B?!ݡVeD$m*zC8%K*w6D09QI # 揊h`ӱ}>dd#ER0Q5"&$s3o|*99M}X(ϑ'4`kiM972|F@uO$ ]aǻp ʼ '\uxAMQE(Wq;jmFADP8tb TXiVw!%[|&lh&?Y@΄XL^%/?zlEg6x$4DdǕ \ބaBd?2^CnJ.,a*AQBq62iޏ j^d˙e;۬aSB:D wqdj*SǭqKa>ߛzA鶹-v@ʂr7|bp숃5}n8>ClfrYmHҝ/1lg< <f?];T'}HVj6ԥ0kȞD0-^m6PN>*Ox֠ e {y4 MzaWzO+;/vJhZs}TBfɐdhl]c{F}L,sצz?Qk  Yٗpo\80p\)[lB1h2`8c:/J:~T܎V$݄UՀ';8XPv0dyV5Q7Ua4æF*yu(LOQu:ۀ5ЉN~UI բw#F[ !#yŋ!%c jaH} 7Z2!xh?NA8l_ꭊ]g5Puك"@A9tOgEO-j(>*W7Ќ77P聪 y#㺄Og{""i+wVxNM* M kB~;/~sά,gjg= Q+7Mzu VF⋬fmd|Er2 Md[ƉZ oa&pTn0]@ ӼY\ _Wper\Te@2_P;!,[rP8"4X\\xvQ~l6v|u1_t8 ԏDB'X7DX_Crgى;&èߏ#9$57:4k+ñ߯hdKGs(/lg:FDNE'eT잚w"!k L]мg>= \҂XS_/W@Y@{Pa S*rQMljnz0ts(Ss'^.`;Վ:/pWG>rG+<$" | rx*  &FwA^t (LxLrBsFYrdK i˚vU 70ayDE8ynMR+bf옠A)qT0R6INՍ)mLNNojmnW^ OXHeu5 EH <щ 9<}`Rͧ2F Y`޾KƷxhc@~UqʑkhVCXp4c%@/{bq4Is+uF7ZT _Zh4 <"T6 >ҊsVpX8T9_c) Ӱ9d޿Wt\U༮\e:ʱтh}6ualv_=#FL2GTWZsRmN2T':;T!065YdgR5n3@B.< ֓I^dZit+ׇ,uNt8ه}b{1eù0Y?Yhb-niuWD7{'*1Co 5n<&E7I"Vw1GMImrć2E]n;YZF s% &2w jiŮ`w8e1-hx$d1Wȩ+,t(ϛI=3 -kaz8+LF)^lęp؈t4s ]-ζ5HPT ~-sgs-ɮQ޽YalNSi+!U7:3[Le)+~r6dB:|ĩG4[J YF]DY0Ȍ&ިo]:` q9'm|H@OP@>v~5<AfV0 'S '34qA 6 ", j >?1Yx*#*0DJ_=Vtc:7)*R{ORpk씰)?+]ov$e\,ǩ1u* 9|!jO[rN5tOͅBBKIV]L^\~k<Ҫ7^U w#HV\|o<1:+<=Κ Gzh[c-i($3ڊ0rc ,}T!߈w4H{D(U[oLj"x4>f6,j$CZ=jW:>UgO>_wi35hP&M? 4bKC\ܜр .SJ |)edasz cEl+Z9J endstream endobj 1936 0 obj << /Filter /FlateDecode /Length 11485 /Length1 17744 >> stream cgNVx舡?DZ}tmvb$hR2Exh, @I"wc*씒bDZK#e<< yjH5ntx_8A;<-$j؎Xh tvLw_ר5t¯q=BJ'ڊymF%]Y t!-5٫ؿGqm4uQC3$>/L{gtGiu10s䀑Nl2*W3\t xcuK0vC)2a[oͼ{~YnKF%pӜ`R ;-*ӘpE 5 WV;.c6gt5\})F)%*zUF{6mzIHRpDYxF@\e@:O96F .K%FW,.<, o-̘2#g.[Ű!6-c֫Ę*΃biw=&*덩I@<ʛW]@?˙mMƿGe-1H9 Avvh{B(*.C5 [O{/UjrTj7n+j !CI6JלB0A8)͛S\3$_Z*ǶH޻%w>0Z|.,mHS[9kͅ*'&RTNA=eقHlte_u]U Da٘*BRN)OՒ/Y)AĘB'9iMȫ,$<2MC.V& {؊fAm:Y"FN2Y qaw[**Z^p_xyW_¶B#ɉ`%tI7S'KշCQኣG0>9oݡnUzi~[syBm [,ۧXg[ul) bra4!Ϡ3 9gLHᡜF_zQ{UٯR(2zoڕym{>zqHr-`GO4D~XedϤI!Up`!'bX @xP7#n//'"VZ$jl:DHWG콭%uce@J٣ pOe\2IU^VL2*cygu7gN}hZGZX;ޟV}"|'{sT%ŕ¢?uKm斕o '8GCKЕ7|^)7 q(Sdr^q+%p|D7s|xpFeq__`SPkN+`rʊT74HU+m<)ەE7:3~J} 3qX͆Ԙt((TnڨF7OjB7pLjLr{cG:[GYW0G(wqHQ`#uBsy "f2v|SߢXLb`}*VM"KvDIKR^R#v902!Gxr;&nt鏲PmI$,}vYTzj,j〩טwjูC RZ  RqE,h/ۄ1:JHd3Z~1$ACVTrzK<=KO4 {ꂜKE;7DP~Fnkr&Sv_rƩ6_؋؂8,p3!x*Ʈys>$0cŒ*NhW`hUcw qTYPQoMVRAJ$:{hN'Er;ʆY"/z]Y:m.}f4J+tr͵~w?rau楡U. q Ը,~CO[OŒJޢ2.xU;"򋼨H[\n6::J+Zt☚ﳓ.{%eK "<^؞-<¸Q7Q֢ kcGŅ<"hlr9lsL\`C2~Ǣ8r$5VzXmPE H2tZEˈiKT*guC,ѨsXV,ZA`#_@Kޓ::NXq34sow%DQ5؄/ka N 2$ S饍Bn)>VH*:d AeTS`2Q\OpW$*=yW.h1/rtpaPK\f5t G|g1o-p,y"=|ljK^Ox$n0L rWu:uHQ>ջ!4Mzˊ`}tD"Nӿ[+, Bo\sС9޺E%,ӼkSnR+pa;׮dI=I'6 lm`wD 1i9Q։MȊٱH&_ODtP ,,D_$(cץ;XoGТ{S-iKwDzu.ҏ>݋}Šfܔ+Tzg@$W{A;Ejё Gb DWT(h,]y!+Qf ;6ۣ2$y$}LU Y]@i%u|3>uXު{pIux,*P+OK7q8.9@e'w%,`4pU-ՂI8zfARGȨb\^C wݡ@lR=0>{Q$@Fi:!V}6-Go_ }'}n>JL@cIc&JZ|iuW ]_E&ߣ$/bІ `p%itx"\N[x >* g\g{m3qzHFr.Wbh?W?`UoN]fz;rIŌNKxe/794"}?7{vm;1%BOZ`1,.0l_-/A\gk _ t[B^G *'HUU0;%Y=*"Ğ(!0nh&gS@ǜ<.R^ٗiҮpzɑ px~ٔn]SW ѻf=m }b9lZO6p#'#G' Y/W~+,uIl:_H,Ogt64Yl!]_s_G[fa($t~+FG,9 #X?NG$t^DѻY3#P5b[Yg֍>qN-.Qh4),yXt%@X#|LaXvݒ_n$FCvvhP6 va"ǿ6n}q$gVtDߺ%p>WB6–nZz]Nt\uD^' χeQV`f+0ݯ_`miXIψsTfiq:@Uw! "};ٜ$Hv;I+&152vT6s["yXm^Q :1v&pPDŽ|vK/7jn!cykׄQicEA$^]̲ĕg4z~ay N #݇<1᫓{x\pGyc⑗"RrX) +gCwѱm dz[ѕ5ӂfNdez.fIY;?7k YBKmvni{qyDY wDPJx dqb 8;~*uՊS:K<HjӞMYIJU.FՓ~in̮.KFAB޿vSSb %L*}Bzё(e/c(N"-*`-X9 p<vUަRgŇz%o"_pJg e_Y[jd<^>L;Blxڶ_\b@ȘvJ ?!#;6y\0gV3rCv_]2qI03_/WcdP[+L^^b*/ve`/Ο}z%؄Xe|bZ!{>% t{qҤYa= z=\9%Z: @6CPL?r +0U= }zºH]Wxa5I.3>$'x^.AN\)M*3V(wwZ8b^#Ľj6l\!$߄:[VN( z+yX&S[Eb?^4_RpX/)X3mBL4:D ~iΌz0lj'ßhоq3HM`.9=7>0|Z7'U$:GkH$.(u+W3Ǘ4b.??MӗJGXFS㨣$.( maf>0Y1se??"1۲e.gimGgK W+8"w 2QD(1m H%=0xdtOJ-eـ.ςO\Fog3"PTc=4)8Ҧ6?$Q0 w,hzCܾ`od$p(Iy\34|hpFHBhqޛ=.}< GbeSܕ#ʒBlLN[N,_Κ\fGc_zD+E?dIp1 vسC»18[(. 9edet+a bpE35omd;   Jl KơfU+N~>CD5=R6}hSĘ1qLFb5T>QzUc+>,}@=Z@i T2x l'ex>~ y[ݒ1۲&C.F>=6J@~ӲRpc Yugvp@I AHZ4bqO.T2Er^)#W< b'nhMKmșЮ DJbrѮursR|i:l *zd$=R혪rMӽcSi}+А`ګ8#6n/4!G{zXc"s!UiNG&NgfϮ%/ī{4;;PP{DI))Z}5 83thjlFC:J TuBai#csʶQ {UGyH#i8 @uP+#tf>(nViCE#I1R*Szj+YAq'Iؘ߯W.L$ZC|"VmY-{# n@v>ہ mc+fHlt\ۄ9.(-jݹ$4CAD9iq#>=d Vĩ_CjW D qj ssBxIuGd)rB[0m1E+D=w2~Q}bX =<=cPlJ7pL򬘞V ٘ l >`LVA1/tVAxv|x\]gE``̑KfLsU :%>@*CqmRwΪ|p,3~!vBij6C%~wDŽw̔4`iwѤe|=gMol? _?E އ iu`i 0g>zCGuD@9/bՔD8f$H&Ӫuɩdں oTſ_$KeU'+s(1Fɠ'd0=,m99K_0i"R V Am^E 'ȖjɏG:a-L-+IF"t [j̊Gr"cth]Z!eG_sM7wnEL]X.]7p>?azLbC]^ֺ2E!umbޣBo?첻ta7hnh϶E.Z<}[~п/4w,zwj&z*9B) "Tjj?cC; (B(Cȗ7*15ƣiɬu*2)lL@P9$4XO zw\U0<ĀO!P7r,G.KA#u3)2ZzoH G$]0]v8شPAܬ?S)oHX`(jCǭFS=O*bF/ P/F2s-e `䲰GyM!ψI,W[MV;Tҟd@i R V :ov! 7WMȰGžrR(q{wE?Y[ ~n>&+ktŸ~ !._ 1"!,w?ZzNXGQ_^ogbqF c=_kP&-4STyS.s+weh\2k<6YZ5͖0N7 _5o(íi˷2`ϼE5D=[C{ז\>|Wy #.V/ЬE=E~czRL z#2/grC%lVFEKW,9xDeӆu @; Qs'<=p[b3\oC.W~ZMTVN^:^,B߆[ܫv'Tv?I ,%c'ا{u~?2s\ wmN gGɟ缕.ح +m-)e´5:!J-l\/X >7{C۸iE)/uxO9@Si_Y&,Аd>.(ՇELuEY&sxҚ2RUh]GhDlԅwarr܊&(]c %iɀ唆yb90ƌ=$=F@oD6:1 w/(ԓY~XIXAy' l:xB>;0&2f+,}q/qU$I41O&: Mԋ5P3+lPj\iRܮ6(>JBe(Br~sk#2"(E9K1+!z_YԂbnx1# R<_c5:>ffԿjSC ŒzZSpQ> stream (n2׵6v>SXȿƥsjV0Z`.ѢP$'ыbXM>:%hzD˰;owޡJ4k(40RZHk~0GbcSiRM:I/;pٖJ6N%,a (nE'pɾpSzz# &?JqiU"HZ~!5 /CUdͅ"H~-X4ʚs>,tNI2ݰ9|g9gZ1CBx{>GЪ[Nz8Ll=-Db;dJa t*~"wPMxX o#lhͤw)Q}kՏIc'uĦ WM|_p4rAVң+Zl/HSwB[{8!×-ϐfL|1pw$g>33"Ӕ VQC!rKcl}rQ=)>4QZ;^ٹ4 umV<N pJpAY8€HpĿfT\vuYl8;LyyiqMO#ƖEXR7556">HZpR/|g;`.j89a3т 31 %h^|zKqq{6$]n;@\j>GEրA`fh~Xzd<迱^x+ޏڒ+1`]^ZWMRulfiݢwM?P8T:,d9/1Ebm,:!PƭͫiGȧOHkc7 f:#]tbl@hyI?쎧,٥}G-'_'4b|CH&-DS 9$H'q(P| H+#Y{w*ePɡ(Zl)HgWZ+6{A].qlI)߇qJ>b&HRVT#%xQg㵼h\M-{*E:CkK334ױ@]Ld5#uROHl(޶!ELՍBUTtL6CDpL!܉vt%#MM/&^¨N٨gkT}ik2ao]:zVG\ʼ#=(cqM8TDZ^=%Z*jFm{PhrRHч.ވ\⩳:pb^'wTJ1RSâJEVBL!ȎMfkNS>ِD| +ʗwW5nB"[]A7IU!VK;v^(rЗM &۪EO gOi,,MpOH3XEk(Xc,`4#džB%$uE2M} x BsݟZvth0}Tsƫ} [,<99^2`q;}~XE"bC"U:pѥiiQVmaz's':70I&Y 9?OsKDcX܃seڡE791ݝp7xl? Ϣ(Ӌ0fI9"Pd7d0E Z/~~7Ӄ݈\IrxhQI ggݻ?C bdOƂNN*B^>d33 +d;AIxPNJ 4{heq $G / 1UrJ;Z3fͮm ]3y=UG\I5dܐ8Vd8F]qݢ(52gͻ3*M_a{sivAVp #kGLrECGm`ɸ챥E(LWĺ7 %*_aOosLDʂp⠙=[E`#g)p\Ϣ|s/Ox0&ILmPnl::Orv.9BTOL)wanLmToA雬C1dEAMqt6~A=2*+F Ć2]no\yh^JFdo=[90|qʍA8TD1 ^#,DWTuÌ@翃E endstream endobj 1938 0 obj << /Type /ExtGState /SA false /OP false /op false /OPM 0 /BG2 /Default /UCR2 /Default /TR2 /Default /HT /Default /CA 1 /ca 1 /SMask /None /AIS false /BM /Normal /TK true >> endobj 1939 0 obj << /Type /ExtGState /SA false /SM 0.02 /TR2 /Default >> endobj 1940 0 obj << /N 3 /Alternate /DeviceRGB /Length 2575 /Filter /FlateDecode >> stream 暤Ax&kT%~zLư^C!U1-Qb\0Jm)|؞-#1ֳޑ itẼ®fpNv䖊%r1tX^r6?T97dyvAObkL d`x$ifڜol3\bf\wMItzaLxf2Ƿ_*" SZ&E]V7(dq>#T^t3Pn2s9V"1LL0/*P!`wS(ўhC.f UNa*}Jw>H\$L ZAN6?C~BֶV@u!4Luk.nOÄ83;mw/?Ç Z%J,l(#loBҞ&FiQDž3hu?Fnl>kѪNGu!~[s|R"Gܭ)ee .hZqeÌ3h/*CABΊژ"M4NK^d̷gx zFe낰Щ"ͻ S'2Rt%Mi*2Z,Ybl*uz$U^P-o5_b>ktkB[S$'l Cܚ+kuOcly8VzS_my,ߞ3Y'H[ch]X"q `ky,9Eyfb crfFc=qBKuϚxvRYKf/dblc,eiF.sss*:1$!贘=,ЎC=Py'QHXjI5'wkK9uyf]9/ P$Ca<Ď5.<۠'R`KD9&z֞$^M*tDudj-,<6P4)Yutc{CeѺ!fF0bFjID#ѨQ}*leeᩓm7k5jNB8٫#T^n0bM`|DT+YAdP&l鎿 qv;1JĐ Az`cCFǼ=kw&ݍDW4l2ײ=" Ca""4jH7i# s F:mƏqϑá"Zs'm18$AN ȷΘhNi{(#5&PIcS;[C&!rfǏ$m' n{]J%;>]&.hnd}OZO>|E7i-h;3Bwfb^کaޙCmaGuDHIP$UO=YPPٌ-BlI ZB*LR'܄㵦xlG["bgAkom0"gС/v '#,])14̌cMRB喣?c6hmzBQAQVJ!D hyu%P;l>%rF8[[g9D!IwwPk8JxnH%*;/ 0%n>ىŴ:دڋT+j4S t-pCLMezp~tuߛLȴ'+hx]_y9-2P?Ynؕ{2f*n:MqwB”JMeδpzŠj6p 7P;stߪ> stream O_(ZE_[]mS( ;]YF,fԯՙ^Lw64Z-ƈA5f^<7c_mg }O+5 >{}|#H:SOhcf@f:<3%?Ll呴/VGh>]ގ #pq̭PnN-ʄ?ؚ.kM_u`⪱?%M;2OgO!3)<+j.B,X}-ꎚ}d|ΑI"4v f FOPv J(o.l؇ۗ+Džh1r U.U|fI7k @41^BdωdO͒CwMoGkcP4aI`dzLmJ@ fbv"r9.A1(m^U|R> !ZehLpJx!ٿCz]=e };TmsL_{6' /h ЊVx6}1RLy@MTЁv8 /Z}^/Aq9hhs.`ܝh>xÁjnWDu? Fܲ<׿R,Bs2/axuǺ% bxxX1)ֺ }LmjޡN8O1|AstrQY ʶj.D5A,= 5eQXw^ `5}+FG}@(խ{Nr֧^y{jN8hȧRu_"0#PTܶWqGoƋ{532 v,t}5'w[*B+4Nߥ']G^3unh_4w0dfK n5! Gj`gʶ;+ax[IBR}mU쉬Wj?vGR-| fs;&60J^[.`}vT"9+Z'bR6f.^\' hwI1'UR/[W^%y3woHGx[Tռ8!{ MjJBK=T8So-QhK6VuBr-h`?I2jrυ)N^8R"eLՁ\sa.^g-CvBD _2n(fgV;]O/A)^a6z]cڳ Y y͢*,y5@@'W>~fiafmH62wqd$OBQ.N?<֒b'/xv4=g8D{ EUNǠz**-(%>MYHOXY?U0Jf`܈4YZG%, !-F|TیFhTD[ ٕõ&U;5]?Y 5hAŴ?Q%R K}bSFNQBv\ ^`s훜;P9;5޺BMGiqSߡ`BBzJ WIêT^k^3]D)X3 c4YLߤꅒ)\SR-' ܀QT%6o:Kof&s1^n1 vʾ*aӔܶ#qVx:'xsɔHN+?ߢ\ 툥~Yނ4wu.wv[R)iMFǢDa qq$Yw xl!,!F]AX덌@4B4kRp+0ocҥc6DT `vX+#0iﶖP67M{M*. rj;hl+@7T(-P38qR/Mu7r(Fί 0i{ ]1s'L~ifqf.% m 7 OiRNЍib#eXrޞQ07R)p\0`RhF106F+kӥDw aF0y/H4(ťD ~%JEފȣ+oo1%,I'iq,#h9"T{+o&#d 7Q{XI s_OБvO(դG"$*>8iN)3oM5Y^t>g,7i@bt *4+F30̧4!-hǕmOlٶy&&_ UHdTk:J2,&+ Qښs[ _G9 HY$?ApFB+$Nh.cR[$wI9IhiB%ʅra1+&1+rZ{]kZ4דּ BO*GKLo}c8;Rg¼_/hYB̯53i/i{nҰ=t̙qw7vSIKp))+5w@p q}os)P+)$#R=rnZw2{!޽ 4qg܂ *b kHC=&j{_Z|o}rBRH L6=mCdB;:mśe/, ̌!IӔX]qJOeL)QEs4E;+,I~keMpE3?+B>Ey k+G4וȷ<%3K P\MOHN{Yq$QL.5Kέ#ɐ&spfdZ{EvUr ]e1pO)Xc@)2tFg|ENP`cuXF-$](GdXHgp Oy&IPKϒ冔mَmڦ񥠶YŗgR-lgO"uLAjBK{P,gD)!Zw ZtmbU*k8gjFz<]u|$u\ez`hy  d.E`RVJ->I{D;rRȳkBvϿ&|vkp+_aD@CiBh]ϋ%2lp^790G/ͅiACD4N`DbO'_oppDh]dprNc3_j#7~(~ok t͌:'@vi JqE9i;[6 J ,X_}5'j>`۔n S -쮻S𾩊 ;+&P%Ic׹95h绢Ds^4І2S??߹.+&*+6$FRGSD:MKF# ZX±Ϣww6]R2q^m{@*&?#OT*̊LV2a*"F˲r}CQG}YBյQ_*[2KrlU!*os [֕ql"4?qc[Ce cn,5"ɵff"wzS~lK8=෉]JjdAA7IQꌡww aV7k n 5VVIɾ% ry|ԴOXׇLW5oɕ1Z];A#LuS`#`\,&7JOlsl SS\N:z^ě|hR'0[9nY`B7rxtT=Ufv.PXmSSv\t\3q6?&b9(xT 1_OLZo]I)RX0/ ۠s4)_ЁRQWq :Y2Gf;jwQX|g,dŕ+6^8ʺԅz㯒`܂Nu_]y=͗3?y/ǀLBx픋6]wQ;_EL1m 08xKŶAkUAŔRSVw2_r+Bpp}нn'ww}P"큩sC%=q]*Ğ={!D}W|6p|#$ʿZ R:KQ6s S)ξҒ+5!\^8ig[4Hwiݺ5>^\"h3M1{ ~?.$^G6?m;l}xܳ/Y &4K6/஦{s$%X ?6Ea׆4kCIa +oVfFΔRyꩉ4`Fvb^Wd͌ `'96߼@V[OwkZ W}5".7):P &ܾc 2_1,|h\J, 2 o2D߄YJ.<_3a0H8a*\MƬ~(o{WK bycVStspM !50ͺpc~m>;V+1F{EhN{\-PR zwq!|ҧU[z5C-bN˘ C((TO_SkW9| T| rlD+dXkpk3qpU۔U eQIk_p0b TUEuԔUӄ9G÷jO4o>+jPӯ(+SZzNos +{ z@ffLK0vn;: lQ:K4"V ѥfߩ^Dt9l l{/QÎN\^==O15֏%Kvoeڬ";RK|5A/sb:?V8MsvwjZb0sCq>h̽GvG #i?[$Z~"XVW{H_Et IV) 9>oJ|kg4Uɵ4C@>I8 /߮l/2s%(4X48 _8h8m*?AY%6FjMrf(`m8ʌ}SCC p 03:`40LxCs%zG 35O|rv Vx׹2@11l)EuhrtfuIsq㝼i">еrvX,=cҷ.TSB⮎d#\>L>4ݏn: aj? ,a9˦3=V-< tw6P>F0jz[wVBL?05Dq9o2^RDEIosugvF7exɡ1H) jiGo5YXlwzO4erL;%v1Tbϓ كza0 daMk-PdH EE:M ̬vlOCH?G<]Ptkށy>c= i~X ߆喾/"T0}P<1F fo5>N[uEcf%L[mۡz[۪9yo|X4a hC+ yf5w8TaX Q+ǵcAִZK^:0) zklkû%bZ`E5Ւ4ȱރ.@1g{'Q>Yៅ3U}ez{^Pv>wM2~=@%(3:yVl)*G5 *=w K}aڻ*t&ؕ~\ ʦ^Wр/:,Kuw13NSJDHj7PGuxX]1?QbZ߱dw1%ⰈFӫg 1yZBYS.UƦaKvQgIQ'oKQ@~NQ<.\16Ο!T:P_zzu/JȐ[=rW'Ona#0ElxRS1;GY6׳VVމxk x}РO*THsDp((Zz-ݮU%w<۲.Η߯ ;k1v O\f6x\_ޢQa!8/6Nd gJKCQ pFn'6MǨ74jAq4O:n%s6WGBY(Ը4}fȮF'@1@vP20¸LY"{x 5ѐbnoK-JVD Ƅy"FӺrEɊ3̶BܒZU,mmsZ>kA7!Mۑn^HOtP_]j_{0 N 5Ikѩo-Jݶ;v$(q/faXtuIض =ꊷH (冮^YI'Zu糩uJ碱WBX  ;75*NMg!0K/4:?q`\}Q/y 'X暺R&`BC99FCȴ- \4h? o/f);҃()9"C XGmLGi;u'MUE"L~eqEmtGO os ÅN ĴEIMG!(X١P:jJ[ t^v9bsuGWW@1P@CIIm?)fи&LԇV^\rKޫrk$sTq.?vA"!m/_sG(@$Sk4꾕5Q`Vzx1SԏUU)LVrb1=AmCJȏhLGBxUϱz0v,?6$)1ǥISގL D% ;VVᤞ.Őr^ u Cs7NwO(7?K@H hlI? mڳ(%0{ت-J^Ja6m"F#`AKݬ+TrDG<%_R9cZ 8H[E\r<)qڳc_? χ4hnyd1 V"\Kw(1"!8 ߻*Sqx\F( %,8Mot"qnpB%85F : 6xO.]!n,-yVá4%bRƌqU%<s\U|v]/%û"an]̮Ԭ_WyL >~,'J9 oПϙbG+yJqp'r|Q8HzbdU:eŽSdY7âU)W f/;3 MĤ͢˗҈uWJ uE8Gw9[+"|W-0AXлA@=~p澬Um_dEa~o<$xh;gz;3B5~e}PiR*^bP}TjGD6F`3쭮 #?{0ux y~M~^R^\,)PC\ʼDQOq QJl!u1)27P p}ӂ#+& &bE[fmKN20):T2 \vW 5`cKUt.S \bB\<7,8$ן=NIwe Z%=Q0mT<1f`E \{4;$> I-0wN3՘pN.~&0WtF)tyu5AگȆOlȵl<)iOR,*yR 6J]N@'§28+桘/X?Ѫ}[+<֪)4ӊPZ[R ᚾWȺd Ae|Ѭ<I^e+8\ ئ?Z(wC(͆>G{`{n6Kg.@]a_Ǯ!qvQv2Qo0&&SWK9a4},IA";umm4 ?+ōlr{Q)9C΢;şq'v' #i#3e8p*YH*4W sd@WY-.Uq Lq 07ߨ8Kd+|V<'@B$H/wNޥ5?_n(MUph^HI}\ew/ @=IG%{-*FuaES̼qt\1^Svc`\M]wdkh*b='b$pSZ%iIOP^cӢ韩;sľءM+A8No 29yOjڐiCyNcy /@m{=ZFq߭cgb]k-̦ |l+? gX16/3_cbPt~ب3WAoT\]C. cO1R,%"hdӝ\RLYDwnl,'aV8~;B"fR)Ŭ3kn(f3Y.3P=y$Jk_=KMp 0Ga3V▕塊/.fX/%$ޭ]QgNRЂ5L|-#HӁӑ'?fn!fQmãPeÔ͵_N GAUhl옫W ? f- wJ/6~dC 3w'bYBuz):'V"P8b4.GM y\kXDmWHG}"xi^ nLjXO|e.[΂F#Aw񋫵Y;λ8Gzd-"14xP7O9Dk $pftOP;Imjg&+$ã[U~!{-EH_&];VmtHo^F19D7ZRtLT~+y7VS}G{ (0Gh"F>庸[=68ڇ!TD]m8h-ŗЊzx :ؓXj8](Zu:rCM;VxTٷ@.K^detAnHqo;3S*WҶ}}_hJö0i\p l d:WSҢwSP24bz7vwl:c z 96n T|9.\\yx7$֗]l%))s8麵ְ0_L>S@mGH)4 }~v]^N]G/ ~FN^Sx1[Ԯ@뎢hQn qyOx}dͦ11Q}vͻu,\_D *?5NxFF&cʿ0'A'8Dp )Uo,f"}ܚLtMg7lq#Y,F1+gIPJDF=ߧ(OH4lڐD3f @;66R>]\F4teR? v &jaIZ闫٭ p$iWhGinaOVTet;,TT#xQD5' MY\?с;5'SYxKRȾRryQ,3]BQ]HmUgE}2z[ZEɽ(l/NoIr%xCb#+TSaz7Rvܾ{ ֱbl½(chnQ\unSiqs#c sjOlߝ[r/ CͯLSVffu/7ᦧ:ۈ=:Ȼ!X;߹Y_u) ́tr{Z?LjrG=X`y#[HNsNLjXl5G#7mLmyѹN*fg|GuɐFR^]<ō~}5X% (Y4~Ya62OT"̊^O);Ku"N`q pi@z^[?!ƍT1:~3 :t`Wi%CN/ ZX}jr3]jQS*:BFzG@(=Qu=/n?Y n`T<jDטW4tajz.#$nӻ)v] :,ObA-f0cXHɣVpߠv، }CC3$0C$P4f;FΜ!ϳ x*L]21ϖ.4 dz@GPc^z G ϕOȬT׏E"Xa?K0󇤳IGku HM "NQNNn)skN ` c?jhI ۀΘy܈y(-(s6d)i&d$J|Ng@v'Xb IUכ"kE,/ 'J3 Bx`duE%1L1o ϡ)9 \[WY zj:ȖMw?H ;9#\ލ֯w[yRA>G ev@o {0T񥊫XP7ULl(؂i6Ϡ e?-CSOגhx9ɒ'n>4~h; N'B WO8#[,Wt*RzWGM4k:Wq!BHȳ(Bo*ِ(snGFqKž1؞6ίxk,My$g+Sֵ$X0"57Jp`dS^E~0QnlkٱhU nLUiG`YRSrYA?UN~sZC|c@|HTP=`lqoI>&㱺*NWHwx*[$7tKCCX1]qI F'op{o8qF*H/M(mZUMO Rd;pRv6Њrʦ :|@zML-_JSaFdno} V<=) L%_.fĝW1j&?/'hmgm(0P,1ZBIyk2V26uF~({;o\BYoFs! f80<|3X}bױb(nStl7/T2Gt7Ay}ƥǟV6L~ ]q#<{½IWaa7x?X׽hZأS_JPF%aKkB`1ۘqTƶR- (k+tSdcӃJ:#/R"*9mG[{G]/<_{YQmYכq6l|3TgW 1dK>JBDPi3F<6fڅ 6b€w "I^ҧ ˾0^{ %JSc9.v}ʛ,FmHmmu{dmBoP.挿&6(#\INK#wM>Mx@\!jMqJge% 4ddumV8Cjڗ,/K.ȎWϟ^~gBqYCA(|j}AOĕ́ÍXk(XsDxR~U-1Ly_trOM*;j4}ְch㭺p4⻖dY: )?qR[JƏRz{gYM|Is|u_UUAm7"0S`^:{ &gEFcGgJE *șh: Q?GE6j^za#Wf5GVddSg }&)$(cUZoe==Gּ"e-C v̀EOfGuR</yGKi &Y˵a-wVƌT|AI>Cx?sv9FSJ0PFyK#mS0x]vgJNd_ۦ[- )s²ϫȠ@fW]i%͑ /{ -)).=w BD,iw.Qsu5.T =Wi'Bd;7,XZ-i42.e lyYٺ6 9,Q0 w˾yi CF_]AY}U=[4,F$\@DۨUykG?ZȸoØUa܍A vt)2VB}9XjJg.Sg+ޔ&hhoҫ—&&JՔ8KT`DS63 ,3u0W]Pnߩj k24Ibgay ޼ϑ&kfCK m"(=.MEc9otOUSha?#`xqv{ sjN>Lm]4R<ψfQRO-iXo`EJ_:5 σp2Y}cYrQVRE @g)v z֋` ōVe 5cEgCK 9i,1h&1D1LN e>["7փ̛2Q h})Y {$M@'<t\W{1 Ypo?Yy*?rH%oOJzk $# |%!>}UK$OSy2!NP{\6([vsʃ>ZwLӉ(d4,>b!Rm @bHt?mjLhDfRKgέF@q36;(ݩuoK@iK,gNʊx,S{1GtğDҦ`.VGN %zsbMQxII3.̐U>W`钥{+\<cJiF)h#tÕ8% ^ގy60b;:6j$ϫQ\_ C^KȒcDK QX0-FȩwCG@Qf44bΒ +IÐ whco3=*<^ru|8ʌ-U@+,6+b'Ǚ$N⓿Onti_w abxI0([/s)H]#2"ω 7.?CB2I|BZQѢ#hzX.E 4p"H. m9r9sdmbU}~q*"Tѹ쏇Nj}7MbЃkDt /ol+xȸ6'D.;:y>wuQI"y]9 gQ-2B됈iR^-:)GKf%|Ql7`ݫ3dh-X?f>]ny,Fs6)9ڸ&k ۟@5VRkԦ*戢nWbR2S샶rQ]j=ըX{=x\DXKxɃNI(%$A8Q4o-`=m҉dhat.ݏq&FTVbzfqiO1H(5,d0 浱l*sa7UZV4 2vkܘ|l k+X~fs%(kG^5piox!̱ $۠DGت_Vs%fMfǐk6@X`o='j1cSu5XXe~0'COC^6Z]Z1VW\SFJH㐫JF(ZD ]kJCz -YGkMG{1#N9(&c6yKxyؙݟ2- Xy\J| {>EJqߘ8 藝-n61`bI=)~8@J-VOV-Ur66dh6Q~`Dр„9-̈́FSi( ts!C˖+J*Qj,1քқi:6q߳CAd }q:ȁr8 ߖTnV"I4PLn+=[HJ;«U(szpR\=vBJP4K. Pu22O{^3T,Yg6IomdI ɘ3Ѿ,:[- 5կi>If` Ъ{Ȥ(uAs`h 0(&c&f컚/kּ s7)#fdV[.ƛ4[21er,vFQ!{:#I#S1^Ͱظ/?˅R@gW粢_`TU׌Lc1m^^{h]Lc%ofp<OCJ77(6JXt¹WEx>R-PCWphIɾyGYC,u>N_{]9 n*몖a uUZf~\xjΖ9# p8bpG>Q#2$1Qދ{ئd`G\۔Ҡw^sW(gEVr(/7JTDqE`ID$"7iv 'Kܑ5B[gxت>"眎.⬨u fk|I,AIH9t?0&M `d#鸷k$h[|g{Ft q"%,%ڱ##x}x iw]pdԥnOSXLK2]$20dQOgS4`VXe=*ir"j GKhۺ1npPz`=L%(((MlSR"H΀UI~\~j.a6r+jfCpדRN}Wrmo,cm>MY"LLa D'A:\|H{2<ȪP})X}U0^(㦖`3 <Ňd;.'w:qeD8C37iѣvTCP&֜#۵< Z9MF ͷFyÈ\c 9HC %pQRLP@cR?cc3MC.>z(A>Sxf|@t*Rc*ܝUi\ԉwA^_aY`#)ʻ[6N>ȑԦeEl0B3'H(x)˷l*hi4(2Ijo^>b]Ix-誳j)La'XԒWnrz֜rh)%O X!* '/a%YPu_" j$ڳGE'hEOz҈\5XC#pMeڴf.&+ 2ܻ2^|儰6ey 1;H\݆uUIi)EۖZd/1SX$fVIV^%p~Kz?@V^O+n^nzFRI1I#nk4"wu`ӽwy9CdjjX"n$'`_U}K7⚩c.}gY :~+Jl8BQsLQ~2zj7fD+IU :w8#LDIP׵>Aew 0v~3BRVo8PN*`ޡ*7J-#L5Qo֜cĭ_y^;A''LbPqgkFmg\Q#,==.|hrY܁bn_5 2Sj6~yuS{Cš.ѰSϨl_LC:AqBht ,m\Rl궖-Q1e"Ի/zzc{{r (SSg-#Z# 9l2Ð[j\$ ;_c礢T{˰ێOS%Z$6%pQ H(' QT@cn=Ivx6}ȑV'bIAlBϑ_%v$:w*ZN['pRrJs]tcIG9{vbYUy* ѱgLߎE0vGmof͝O(1@;fC[2,4YZvF8j[峚Χ8q0IvA;g·Au[cf6Π} H 4~؛BaRF- A (q>BU#VTeD VoXz muqcJ޸z=%A5ſ[RJkvΧĭ'޾A[& )Wn#7؎ ?b[=&I6VFπ`d~뼺j헠/#t;9Å V*Xa!z?>V;43 d҈B zf2]Nʾb߼s5*NHPV{{'{_=pjaɑSw |. G[؝fDָPMe)VZ.#fڎ,ϞgH:wO_ݚSqhUf!{%ֲ߶ ZjE<]w\M4TDxF\e dtdo[Tp:MpNTn͞ʢ-6v\ ֹ>flhY炃LO.gyGkx7Z-95.(#7?-"UDԆT/4UfKFtutU<.Vos;5DGՍ++4D-n$&@?DN*y ޲D[cMoOچ_*VIreP2HBt]iHk+x_a!$RqŃ|V?݉3\ӊXb:-zas׊߱ۧGf?ݥt!u)VKz?W} y igha}HX5.:OS+o#el(ʹ{a2 җ=1J)Ja 0"y `?ARfNp  lR6Z@b+Q[w˗U#gLͭ;Utl.ؕMŇ0Іyn[dt5 pE%'9KxjIZO~-}:(oo{GID3 WfNcĒ*4- K ԰oW[Vbt}RT'VYﮉHeV0}h5uՄ6방:;ii|٪k3o ۼ|,'5d2UW}=Lj oݿ('&.1X֜[{vgݳB<؜yU oCJ,HK=6GT ol2.+f#+JȆ6 ms&KtŴ4j:,N ࣫v@ I?~ 89}AlR ;a]N- P#;\קeOA f o/"^pE[؍d Ksg#r8{hQbw6dZ=?=Wcov}:^_QYx3._|`2_v\{L-#_ ǩBUқ҄*|̂. 3\i Uv Nʻayd] i4u3MD؀J݃WoLz1x)b$l+caXCvxx7. :0BikvS52+',W?^ 1nߠ|I9MG= ­|{iik8[)>'dqiIUq'LJ"f?dY8uU|?8Ch4]&g1[IrShىpCE}n.|i?-Qb Ŀu$43vɛ((gOE} CY x&}1o2pkvAjE9/% xϽyߦtks< *}ׅӻ] } =2j7#ݺs3GM% <2^_Ma`a'e\'q,$' C:`w4^N RqJ40A֣lL.DBm~g=#V^י}|(rze(T#B^T*4On{_zPd9RiKlqa8W8!m" Pz5L Yt!?x;r:3Z*۝V۳@5-ͣ%h%vKh(׺Ҋ&d$#Ͱ֮GS *sKV w-F >$Ƴ 03*H( ٳPMøn*BҊ>1W\ہLA0Wm9$H K;cl4WPrɡq";vu ŞSCLeziW}*@A ;|ye4}y57uZkcqƴ.SrC= !RiVh0w`PHCo;ø)gf} ) ~p r% ^>_fxN:**Qo#Q.4\|qs~%\]BΪL]x1Z\H K5;q o44Au` `wGY9YKOjXәwJWc4hܱƮZF"߸IHC*1aMzmK T'Y@O}\ZyP[a:Ҙ{j6HBW%OQRE\n`6+Zj .hCUq%opT~0\ˀWLP`T f6?='Zg/jhN+/ a )ZEqk$|T0w`JyMftf+At_A RyOAkVDԹ l6aGwR:}i4ꉚ=f9d8͏X0 F hw^^oe:+fCӶe& 0خgWF4+ %Gzv8RDf}yQ{^+[qlJvtcsQǹmҐ++_Au٥^ Nhdgaq/)Ja$8u||Dӓn̹s;/U[~TX\7P9aςu'}kv+-ն7_<^3ƹ3J s nnP*ixbIړQE$8/)t깚D_) tJeߵ 5r0!B,|"\r!.v]6u ģOA#0z%<ܓ< ;v+n=՟EU$njMK =JIBɗyIG9S`u.Йѓ =ϯd;ܘHψm+ơTd# rzbtӇ]8#7 +pIIIzb{(A BǒiN`!6-}2lB=TyAi!ׇ,[ea,d?IO 8}膍6N?h4ܒu\"Tox@ 譀$}o$tefPu\ck^4759U7I٠*XUSӊM bz4n;t4L}U!HFo4N->5uV`w*΁#F!2·۶Ya\ eQ׵y4Cih: 횬lz]Q@5Ñ. {)~7n/46R+Lgx 9KmJCsh Ucp2i@zH˸NB&5EZ8>OlPRG Yߞj0L w O0*fJ]ꊃN\G! vt@Ó.c˒9+4êE˚IcM6U+fj>s#R p,S)&e1su MhśqfdvyPTzea:UE Zj9u|#b)ܡ5Lixu#so9H[)3AvB.kcS,IԚAJ9:|2.JYvAuTY ("V,\j-*ij |p db 8iЙBHz$}q}R:$j ߜ|vlZR .*tѸ\ZC2b2GܠO`Fws$s9A~?Hq%T(sBrE |;Jg AJB7twLU.EXF3P{)k e[@qlUHH?=h#6kPT;ΕqS֭Sq4@wf:h ot@<.A;%]|& rS/7>F0cLQU$_ogs4@E%Mx]_pڃ ˙LzH&=:}«Q}_Nޏ{17P&^yOXS*::KMx)j jT90AQHB-&f\rwJ=}1)Yaz3|&l%דmڂa ͚0OU6f yXN1'AjsXY>tL.Ƿmv`(H&2nŤerr/`X O^ aw#r8՚RDlۤjXX?h;G+^s_?Zќ} 1{B] ǸvA"Dq[ϻp<`uF@'Fnf$>O/|si kԷ@aV7e7g a̩#}`)_E`6L(DC!x&ɋmʗcUDgh_^vkojFUcK>0&Xa{),0d mB6D]I]²LK/+cUԟ6"s 0DĜk;KAKඝK,33^CQ`)E Hjʉ 9ѹ5X']#TyG[6+qVT櫥ey~ʥO贈ʺA< =O&_qQ"P_Y2AG[o T wZ`5W-z\Ȭ!e oj>5 Zug辸hlW u,OrkiQ>/<M Kިf5TH& 7ŏyy;ghr:4T2jB *6[ۏvzGo~t_8+4=՟J"5!iz/H],]- <\&طUKhq1S#'줦L_4H~8dVj 1N@7 ]Š1u+!1p o3 -d8 !_Kf_;aF ~>v4xPsN,MzkXuǢ)SՆ^< b\ůU AA:!bA^98cZ|4;|:;xik{\U6"l^|sۀ Yfcg[7s (F?(7Vh,/4WL!o#&:]3 򧥪LjK@XanQ (4FL6CC^{OĴdR|dp箤2FbUcjFp4|/c^@@(%4i8p?UOZJȘ$C;#bܧY`sp)tp4gDs!dvٵv=bƔ}&Řd [|O ;!~|Or r6 7aMγm( #,ms\ڳ?= 92p舞pz[YݰL Ŀ52q'-rMxS1\{z$9[)Qy&dSFq%-wtc(^lH-wk⠘mqiS7#B,klaxEWω`,]T } ʞ˜ElGwz gԮW"ZU15&c {5tGyܳ; NoϻSE8њ'I.bǐ@H"s?X清,)v: _r OEگa.>0߆;lonEj품f~})EulխU@칞ffЌ\Z쫡bY{u!00K⻛Y5%/ i1WLn-i"R%bGoT[9ZzX jNzhOXRI&l^L\M&q !ӬOB;o,zz)Rkl=\Mr)7n* mu+&˱&`$2LmJȻ{RW3U* O! yXǯMbe& \ CɈMU?L`x&L%B.l;sQ/F5kr= 0VwF̊v'Iws E48v25 {TVUvȭM]߄Tq\S U؏?J';Yۤ2$J]B7$W>d;3_+2aǀ8(l3RaXQ)2%d1OAfPmLhEbKC^ >OZIO{_^?kL칦ssy體YoL~>zmԃn/ L&F1QODӏrKWN}BGlFlp,σnpN.T >ʃrtu԰ CɋIӬ6!^PXOk>cY0 h6p+BJ֔s3W0)γH#Љ{|"S]}QWy>o vO'BPmh)럵 gR=~ _y–a- uFx wֹVKMH@cn~\P?c?q ڿb  ׎hT[+[;FrEk RJ@X_$Ę%{SXkao(y+o Y4RC+wuj(;^Ȣ)EC|J?_j*zn̄)$wMlL<#Z`):@Tf<|FSekA5\i c-T.nJ)Cp9ÃH0c9*YUc4-(` ֍7,5xlzT3ΦSreZV.Cdr9 E%)"t%~ 8d6a"-f:uŬc}sj}Q h%qĴ<],4~}"EL!'KNm:4ENJ |m;Rog2^-XvHWe %*=V"A-XHavGz4<]a2t݉ccA?G{Psoɾw%y(!#m#rbƳuVQUS36Op}HW/8c3=R] ,GRqn=^ڕji-!AGvkƉm^6/]hN !8; ^_H1E?Rs ;.{*= `ߺ /<& '"cH#lI,AF)Mʀ$~|f--/OExHp̤,|G˯ /oj3Bo7A: yhXiJЩ\CGubSM7ZmXRUhM3B7T4h򒄴Ʉ${1E7Љ ?Й؟:(hrzϔ:T#=Ei"ư(f#uǝЃDϋ*3Kb;ݮɓy,Ye60 Jcf `Ɵ"fZN|O& >=hijr{98-|f"r.)jH[iFK+%dak` *f_tU{).=wjAUL<. DT׳Tm/z:3#(=BTINS&"i[6+ *OpjHX2@:c:1\ /^SY!kU&D0^Kq3+K/ $m{gd15@z3? 9m>xPtkwΎhUzYP=XW6E" !UJZ%w,\%9_n %FIhezbg/n7;xjUފxCa> R/vn"_lkrR}`ֈX8$%U{zNO֍^L0pa=s>Ny-z;Q[p{NHW- <&f%T<~p)O=NrϴM U٥;c~ ˭C&O&^Ĥ0w0> $6PccOK!sO1\ ҅F+r7W9٢%!Ya?;<<efӋm.\JCaNoE L]2H2zc>VPZw7,n¡r4oM=,q'AᙂV$9[dJw/@'bhҙ `<ϢQxv!""Sƣ0I<Qeӡ6_}0 ,o 0b{pz7*+s8=#~8- 4ڴ7w 4_b^Ogy.#n05f~9|~Upҋ/=Za_ꆷ9&g uG()يP9 5nHa B=B|1?z~حU#K9AtN$a N{؜Rk\U[S2c\OZ ځԅʊ0lEĿtU)Wwj;O#*fI]mYhh'&ˡ*Fqy*`#ź-U&ZZu}.-eߡx&:<ڋQl\!/VvGffDoȑ}.6Yj$O7X, km!PŞD0БN)ɲp<}89:N [ߊ4h1 YcP?[kqyefeJ{&l9&#]: ̏_Ν@$μ.__Jv@VJ㽵@|`h b1x3)z&:{=*R{[xS?܆TsHͭ}(khhW[z,b|ĠvGE@̈VAVO.֧#uDi\s}kaZ}h)>iz :wtp+}+V_.+C|܅=!=X֛ݬYp@o *zqp ع>}b B%8'NϺSn^q𻒍5~ +Y29nST'0˦ yzOUgZK~ad>y{!"k'0C0s$Sq= Gʈ\<ϡTu> 'CY8TXeͽj|_YJpJue'G.R XAPLNpȮK?!!+2#I#(Xʍ+kt`?A#Nnso=8WnsmCPgc_$ tQ7 ßlK*&dr6џ:֟*a.)C"y]':9L%W7Gx (MA0+0Ý.ҥEvECK)8-ƿ DU $a V3_YwҶ/@K@/F|E)O ^),j@׎hm "SޘqJ͘;t(,9K:( ll88LD?;qSi:ci9+i9F`^STX-jKy@JW䌂VFMXyTsՄJcMP>Vh9֧b/4S6{Լ|>Q;:/+}_N@qϕV#RB*!` _GE?Ƽd(U@~x`>|QiR&s|0vc- j\5qFԬ KN ~b v&x4TlP{T-]Z7Ă(~2jDO}\cO$M1 63C]sr&"vEd n)ʊV*dM>ʷ0Ƀ>\SyS~E4{?Kj%ƠY:7H;"E<-c,xK2HGF%NGXLEf͑ul:Uł}ː bҦJ@LkeCi4$?VOFgƪ],~}P\H$3rZ[zǼSEl!7zVj*$NrܤA֥ I&7V/.eO?,x'kZ Cjis#`xv4\d\D8Q}V dK8W ݰYF)?!06i)cv>4xP˅f! 36a&. "Y xEĦ-1&*u"+m+>6/PR|{*o-6R< _)Q#A(R/aRuy>R<=>yw꽹lM+u\+JsKaD C<J{$0" :a.,#݀T7]役"o)X<~ְAӲ%ˁ]z-&o?XO+G0-?\)ck\(1! ,Ȝ\fvϟ?3*eu9RGe=:EWeZs?p|<_Sd2APKA}g9@zfҖ+v'24~wxwvL"#hC;XA|:2J:1#/G,ǫ0 lg͵z4PL=vQt‚+fpDYa3kP02P-4=Xx!?5kJE7,"S_C6ܞFC̾.Nv"RrFzS#es\~ʎ``.Fx;JVpFQ?r4AIHE /{5Aw8"?ޗՅlCe7st"5{ zBhvF*"z1}$ 'V;Zia7lB4]RUݘn E$|F41mWlP$d5٧neH ࡄ < '^1s$coG7cˇ)L ǛE:l /^5rըM/XWTR1u@X8zAFe;|3{̍m'_Zhwi3 q 4*G&prQW҃ngxC*v66܂nJ5JN)M/~׹PVZ ?#R_d iⷑhM5!sYfs;Sĥf=3Y-HGS }^6;-IzxE1a_;-aS)W,<#^m1c߆΅~慲0|NVqꪛ;}yj 3Yի`*p`q2D?n("" H'_+^ˠ\NxZu!EA4jNTlӘy)\vUT?a$)':E0{<rUnhS,XJD;g=gKVemE0,syzΓXZ*_v$U;.G$@CFx #.nEe! 5S0f xmLA1+;Mqgu!ͭ]Z(M/w{G)j%7^qLh +U8LX⫧[ⱄo^)F5\rU( P@K@ wS^; 6Jx`1jh{"o75rqVG{'ҫ?-H]m5aTa3XEO7\2yoȂ2igl}?HҮ𔚹hS شuIյ~cƊ=1ZH$XcB4^gaŮf;L@9_dz+#6#+ zu7%HK2퐬H Y ЃiPU7RBǞj- *DL8r'gmb,dY}\}Av՟BI 򁜚CciTGq^xaeߥ' &7c~~Wo*fsxeA mk9grr.6#I3ͅ0t֑/u1K\&\iy]1xX]i}w6ii fvP(^ic&{[E0`cR*S$#eE/A:(>E;+b̔w7c朅焈^bL}ԲWZ&]ooCzuF!ú}Mc *d( P'ia` BPBk(E蹫&S"ܼ޺nvqQ[A!H?ܽtuV*&/+]ȆZ{BMgm-QnmCL^o\beǖa'D0R`i^DxCt5Ha86\ւ . HSzNQex5 jjq4rF2' vS)ƣ& ^#[%gNuNBIUd)%Z'aoE܇HՒUxG D9n*;v=0N#_ǭ9_ $}!{6) `=Ljǵ?F2eI nu\+IfC@qXiI{*nSxp:B+||yR{b=:knE1QN He 4M,^gw.&GxMɠV[DwpN0 *u]HDqzM g@Ol4!xI_95K3)93y7 `FjǍ&:݂b$9fFUe R$ON<"ЙLeկ#6 жcbϨVwz-3kyHu]马pWC\fX+` cۗ6Zk蛮z?x2Τ5|PٺyiQW9URh 1m3S"InHʷGx[qOxn!/Ivt׼`\Qv2Z4ӟ`JMCK>G3 NvDWI0ݟH@XcGQV@ '>jd ~ؤ(6ߕF<09v څg~w1؀5p Yd2PrO1Z@&s )!m9fM< p^M;Y "Ae78C6WSAHӀJ1133%N\ 5oyinds]5%龔* kt.{VUjl6sz+A,sF+XU Rh>ib42e u̼!Ȍ NNKc S;M6DiboFO r}XyъXU5Xje* mAUcyNOz,K4r@c3[d$S9Z3YP;!(Å1e}d>)=~6Ktjy'E$N 䪠x 7qzD龡4d~^$CYҔ?*pvD}ZqXsFMx1>  :I~RtY]~wcAON=XY`"*)HvRe ^[Ǒ!GjwtC+Y$ɍC6*p"my]ΟM fgA\yo)tʗ ]}mPZ(}dBw]/ qZ~ꔧii1?4pC&)a a![qj-@U؏؛&tfEQa%t-7ϓ+,F}$F0emU$˜]S\yV-A Qxr Lft.H]+]:\}B/3 U+,mH٭<"UQPuzWIz=,fr]䇉n|5C?Â";t67RXG`Kֺ.L+Z]LɊug-V"7m^P=7yתVg Dtw^\Wp>, u[Y hE8LGhnի͸"#;ڞz}s#kAT/4y,>(x8 LEj醻E2,y;D{Wr`X =W )ʷ8SOQ>۲ Y ,pԸY9c,hXy%x&%HQv.rߴ/mԫHp{,|eeyRZXjƣiѸGV\% ZeuDWy|OIc5EC~iDDԤi|WӪ}c& x8C304q9__Ï^ }~L:b kd`*ѐ;m:)!Q9B#X[桘Uq&ݺ;.8 _ 2*̇.030O]uʰ^w [<";LsNp\c4:.hX8fDwz C~mm^\ _^]ͦUh초1z1,vW#n^L6C^-Uw3,<:=:e%?=7%Nc2ԛ:܏AQ@$1myEֶIu<(tNSFyGj kd=*$&*6زU,GZ*>YҊ gqsWscۏZdv~5D ċ &\3NrgRJ:>:}d(ig}7&Mg!B#\i@X+d?oP}UnH} ʐ&\҄An҆ wF,$9s[j/$xMRBÿSꁹIbO|Žƌw,>-@vx5x=.s!Z<`+2s@9J:탌F{֨بՆ5Re`3n˴—>R5}XğSYar?X>{bp7 XffTQY: *rqGg:Q}a7L}'3 xwx¥~TFRbmVfyxZ2~/upu!&YYL UިQzOm%/z Y8GEܑ妺bêd$!c>jq5I G!9֘ry%b4y]H=sf@E;`q !UF!6px=udae5RcnmLPG'뺧]u0 8 ]F o*0'W҉#K `J1nf&ڢUQ͸^!ywr@K먻Nί޹bi b7.UfL`暺ΨjԔB<>xA *9$`^_pøLǣj-T>[P胳хPId(la=&GV6~CU2J,"r[>J6z ^P xAZ\![SAYy[C4VsiK Q NuM@hlTrinc+^v8}@zk o+# 1C npBٓu@H2F5rL*M0`p2fl@fnےdĝczs5Eo 2E&YY?k*nfL K}4p;CsGrmy'}:Z-H 9,eEjW}q])r|*J*dzϸ~ l:^ yDm еW$:(krCO 'i.;9; >7+c{=r@EۚMW}ɗ߮ln[4Cms*dYBtl\$wPt²Z[Okһ4Fލ64DDEg \c,̧\50CRnuƈR-8ʫ# bU,t]Π$M ,ď(ag]|% l/>DZ ksϠf[T>jabDoBnEº5x|VⰯe˂t(wD]:~Q#79 ͩe\߈i ~t'E!AGs iȜ4pE GOhHXp`BmSE8owhɔiu <{#@ZfǺ R沟[1~)c YgYDe!49zc`DE{]o^v#[}R(?wnjx4q)q uZlͿvr]u. ovFכ5 ЄAS2vDgY|@YkTU 4œzދ␱nf]'kYC~1L!H4d? Vg|1)sff8j\&7$n 凳fMq@I僣<%O}#d$/l+ibA7}\]J?]5$Y&W* I0A; E"Hw|A 0_PP_xMdzc}_14BҢ7Z uW`{.jk}WeKqk{`zu#5X- ꭵ˸W˅" q !uHw63Z>(xZ_cS۠ȕ\c'|49QU1Lc@+g*ۍi%L)^lS 3S*X _jbu,ѯJ&SDaeHC(>˺3)Jo3RfR2~2ظ@Ƅo*U9 2{@P{["9] o.N4yʼng85B <%KGWVJLivc~IVy5pt@Z,eNuXiڝUS>1}ҩ܃Q?1Y /xiFdO1"lE"He&e~A?ߔS~+D KaebF,-!/Q(ncEaR/wG~F].& j^k=Qm(\R])}/yܔT>-*ֲBQC;2~q%ѯeyXV_eZcg9)xWTC~aoRڒJNBA 1G-&GNB_-D&^I/d2c5hO$`Td{qgzxg䑌Υ8PJGg.I 9/Mk 9;̳Oڴ!o67 Xz@ 1,"aK*_ yV;ʲj)U2a}M ~W%tv(eAsJ4*{0|C*k6Xzm¿m1g6Л EPc K}T׺vk~¼G$j3uL VK=H-})9.uw2"y?|]#Ntw'5L4k2󹊨nTNl4L&̸!-yr.oGܔPp'ablDμ5oز9k%11*џrTIʱ!M'yte'ƨYZSzVgouZi}.`Vv(2|rÏ*e䈈߉sYegtMJ^lU'2Ja>.񐎶G l~v^*Jʅ4gi8gC0{ a-z([5jT-6{{|CH_Ԑ;o6;EYxu~Tc>z䍰20y|\@`H[[{r(ñoիLm `X˕a%n7_ĈqΖ̎ۃ+̺mjic :Ʌ"](,Jm\e[lӎpmfZ5Ngi\le 1-C㲖 >ԍ8F cf+y9\b>m;qKb "05koݍ(<ֽU9* T'nTΏ/`fkDsv\#NyNwBMgYajIgHLA 7绊t$8o7|1){33Y6#H2yC?51♊!% 6;z|sK]$Gaq& Fw#r50|݀ ,8Dv@c/E6ٽ-›=(AQ@ER_:z^aw}3!e)Iv|" x:uU?r_f]nPHmg A*t6X%sx%v݆ھ,6 nAfbU]p:5>E6& x92s4T(T\5## Q6EH3It 1.u{Vh6cj28 L3Xhz۰;=y96HA- :axphSۢ۽r cF/yEZcV9Hb"Dž@U(fOζa1T!9"lX2ITbOa[@N&T!7"@{ 1 */z.)+z\{v ,eFj8KӜbِ IZ. d&v< e_e"d8?q3~ϑ (EJ'YB6'uNT$S rs}Z|n2a^*BG@ #4렊-d¢xqN3?x69kjϮb;˞4P&(ʔkh2! ͈'}q:>|.Td$v:tv?ҭȭUhGqO%$+S<Z;GUTrT6BPulه;Flz TiL"+.-cP'cv Aɠj [ vkW͐hy`!dU ^H6YHd,<aP`>jZ ڌ烢D_ )Kl,``D+k(twʺ-cW;xGB)*QX &BECpWG.Xj۲׺m>ONvJ+/ӇNV{0ǫ0?CՎB/W~ R#*dZa} D8ǗQ8_I5Q8Y\+V# u{_2ER!#|MqT1pi׉DK̅CQ>:1&.5_3e{1uab{E=LLGcUWr#90xO/\tD[Wu'Fp5O}j}~p]‡SzJ,;pQˉ x.qcnTU6ut GsGL5ƍRUrg.;C| uUWm:"` ˆ pYD)\ $Op JEYtw&REX9x}ui#,4Y j2dzOm\ k4H5P~ʨ4$W݆C} 57^l`6b2`mj(F)SjYgL! >l_&q!ZF1Tcep: &xG"IJ2GW5)(Vih3DFr0Qo=kUqi{T4aQTr#>^w[}N>7-#$LL G &ч²wMzKt@\S<)-=ll C\gḍ 01!e`*I>Z 8a߇*0?qL0An͘HgVyև "&B/ ;sKO^/\}Fymrg*xl&쮺n=/+YHpckaTaxC"*_F"'i?ooONr lGwS{bZXx+;,wpfIG1o E]>z@kčl-K#ΌDCuX?{ |43M%@- &zdAWzN#WF(c> ?7f[-WMFsAk]e{1_X8,stي2k #cOWⲻ@kg1#o.f"y9Cބ z_"W*wQ`4?gl#ޗXDm Rl 7f֠感XK ne9*%;J0%LV^jB5?E+'qwx #0)|μвJ(VT˺:WW1ʥ^ n׃:|yWnMTJ"]~Y(sv(*3䗶 $N#M+'6K4zyN\"'Y:X*{SJFp]|k׻xԝ<7DUjxDoS25_,Xj~ TUGI~9;q1yV`! R.PuIgmmB ۊ03 j$fJM"QW/\|}ߓB Vθw\TPI%Y@ I%>W>:TxAqw#Ī@O~qυ*0lm?iFH=Cp%dvAJQ%02^az?R1~6RJ$}!\ wbP4ywXXjZyKճJy\ˋK>e> 탶K`1߼n2sN'VD9X~3AcWv\4$^R EkCгGH soE{xݜC,z|Ohr*|*\-Ӏ aVn{ v}aucܙyQ[{X frF8Bs˻)x|1Lxd @B>*ZTic}S=cє8 F=˨-]+Ig:QM3П3RY#/G>!'n\@܃Ou*yF^xL4'f%T> _(k]77-pV 7cy ˣA od`nZAJM>Jr>$֏R^ԛ(Yd˶{ 3QywV}lV(=naơ7)7zf?ޮ& (暇-:8+,.L$6W+ %E;=ЭZbkLo $bqkf ^e!dz(9p8ʩ0Ũº3=w{ I6qpWH+X%`LFK:!PqQԓ:)Ervގu$]l^PwN^oFa"s|Bj_ߺ'(pf/8ښD9MJ2@ .EVWwb$K'D2A7cXjasB= w[Kmfm^up=xͻlnۿr|/k(jdVؘS43O8+SߧPRxj-T%pJayC 82F kōe-Ħecm7uC"Θf"=.nUc|M@ҡRZ_)!P~ +> b^pH6+I丰pE{R{!p]dCd,3rM%qpI ٫\AJ>LIL@7k{Uz^Ew[d &w%wGݫOvt=(qB K4y'qU- i.xhlaJ$ǥ.^ +,qi-A+;dK9୻l pZ,\VX^*!L#_he=߸`*ޥԉ;ܯ筠sgG5 ݪ,2L}ޢU'S >Cw:D J;,;SVfJQ=rR𽎲29א`Z)Rׅ_Dr7pxbdg֌0 kג.|?8P9B1[ B:KJ*[[ֲ+&n`rzC钇rE`^}}JF3ٷhq".7{ixĐ*#DIR_)[>V|#'(w"6q|1 uThs.h밻+>|G֩71-h&>qHML23V`]5Oz5SR5EQV߸ٜ"@zlJAUZsb/wgJfx>f 5?\h1nۼ`#W*Ѥg˸NnM sBҺK\2%CۛEFJZ,mMdܗ#'LEeDwʒ uyuR~}g /%x=*U$ `V=69@ :ŧ-6[o;s ;';fG F#p(-t<F!"F.z&eH1Wdց( V~(^V 93_.]`Gi̞1w,q;G;towGJфu#c&h`R>--_G18sEyq;֞4_3𶑠`ߎoǛUK8bW=ҠᾂCo:ͫWST,r l_tߣ$w9BvH3B|q G*_ s8.sE qԙÍԑ,\C- bT>KvT2FСrṣ˫aGhRV,}R驱.RIhZr#UEfvO ~[OMQKK/{[Z [Q->Q#X32%6zp*ShZʒ y2bt@uƝ#λ\OPkT"Rlj|';>gD#?,GzyEAbQy<ϞPgrҝRЅ(Aȡa!Wj KO4v,JXIQU1Eۻ;U,@OŔFIH7!zsbJNvę%ND_Ia{]Z?eR;Hyf=7sE꓾ZRgQT %|؎=k1c|gU2B7o5%A~pTePCrԒsAdzNJEsmJx`be:R` P٭d2^!_Gt䩙q7NSfIի6MQp9&ņA,4au Ie}5N6SFi}*\խ/ppG2Li qh32 sT씉ga |q9qV=XTv]T|LFZ?.<1pHn[!NR "S 5KqJp.5J $M*gВ\؂}a(zɞI %$mdtGjT"pt3츟E]tـ'U)G" N#ηJS%2)?"7LHDŽ8Cב< tF3,+͍~kuXe-y"56 ;%Fx++dUk5e2QYZL)v1ePX e*S7 y?WLCҤBnV@MBi0+K}V*D(qNc]ְsw+ 6m8Djh*q_M*c՝oiB,'ݴ)h_ISkgE!%221N^3Y!oFFq[$6ā7 Qsԯ ezqżc[țjׅ/] lzڷ2$v{aǵRF^A|i p%󇤯[6nTu֣@LY xnY#~R5Yǖ e~?)0)1 >'+a(q0e1Z}ːGfjgl4 Z.{>"eXVm[MIq} %X̵閏S`qP)']ǞFgjOsۤ:51$;w*ڒt-;@x ʐqxY/|oycΈeDO徧P >ᡩ=Qaͅ2;Hm`foO(B*ΤcȒ&H0uM8f`s, jDQ2Xh\q"a1Hbwe ~оR:WRF&8NNc)7mZ+rb"+FNEj>W( !Cy52b~aWO]KiHZ^otlB}m`cЈnAٖy{wn6e՞ng>Pplx7{XC@<'ӗOUgZ7>bWu cZ uphqY6fy7OQ`jhPA7oX˚C$68vWO鲟aPP5*T J :k/[}@}I༾R)Tk$t/ΝU.e$Ef%^,%E7=(\ ^o?㣒/ݛodzdzrE.f)|ߋ"گT xyH*s# ?ۀ5Ky|W29L.ɠvK- χ ^fgAgixhJly O?4ja<=\^^߯HI&i?y.H`zQB|!72&g+$TI]-}x)mÆʹT)WygpHeͫT̪r7ph*HrBh9?t&ld&h)aBXa5f֕w01Psj>b:3TWx\@M !/Wd9M36Ȣ`Dd[p?М5b!0 q O7>t:#Z>#p3&d%+,܇Iy0_>WuLjйj|OG 'oü)kˆ, /? ͶUi2߉`WmBa R,!iLW |yPzp@ #Ha8, ]yLgVmO@W-nT$)*wi&[pQD)Q is1][VA| % ʠj!9ؿe~k„iwrթ0!;3/xwe |3g!W w%9kiPp'Fcem7_ćЅk1CöEWW3.2= ~w]6)-чڐPPdBxrVBěCI cyarTk󹭻rcOр$\+i>7b#U(@46%!u~;Vw~]P2:F}|?0䘟ĕ!eP: 0g//^e+jހ*k@lY 3{kd. (%T s7a{ԟ%wg!h\MG,^ұ꯫j{“9o@̊ȎlsiC{LgIŽ\8D IhX5;]ġŲq'<4mpDC?ja"pbIHdnWB]~r~l+(NI+{!bbάǹI;O.0Ϭ@|$ȃ,H'kxh>ڲI QN }糿oM~)ɎfMrQ6{w#q^2Nw TOZ8R{Ю̉:/_pIYH:(y`f#x;[vx.%xP9@gCR [Moh/;#㿣.eqCp\F*R(K/ixd,_]=œsKvNk+K^x[@O{(CHF?DJ7<-XxV>vL㉵n2E?m 0YnYԖD>-.bxkk!nO1oJ l"}:s簼Ϡ L8FZtҮ,ѰnX '8M+Ͻ>/ˇܭԼ70僦0d$M_O \4a :oGr3궫ϰDZI_C+XϸorA_/Pk;A34=Q'nݻ=9'.eV"܁,'E2%ճV#&^1tL4dGbu%:a^]M*.P2T~ŚQ &E-_*ތ1Y3tน@b|3 fEK sMwȝb8tG8>ؕ6gtPX ~ScNkIV`b6jWkj^ZwхW!u6Uns߁okrl\Fs*;BL:rjP W4.h8Ԭtw3c *؇λ % Ӊk\&h~CSzGO*qjʕG1J],9O8jN ذPH@0\X$iV_70J7h1á<iFIjO(ۃ;AQ$uΎ#;l\q 6UK.xBtEuLk/Ѝ}uӕbhp;6J H{`H-;# fKupdrM 9$|LɜIvmdm`H='Kpƶ-4S432CL"A ~$VG,XIHrE%unف2 jq?lBvX3[,)@RH+qQ@NHV97q+pZy8)H'Ϛr@|]ěd mRU i5F#YE"WJsihǶ&6f-D;%f^5,޵QG5팧wUƅd9Ch,&쁃'<c:rW)tKϖ B?"X۴Qi(اi0w1iT>KrɪCYy1uz!L+FՠkC^cff>Uȭu 2kp7s)m[3[- "T`+X!^}ǨA ˄ Gא.ҞqAl ]ld>y}_p2| khݦlGĢDkG" cL0RΩsV꧇a4.58)' /cL#N#ѶvC%^Yf(U8.T Ldl^#k̡Q{L6^?H,$uLU*RPލ*ń#;%BI 錗p!h ~q4 , RjcqpX0?9r& UR*Mfh qw |Tn@{Q#fk%ߜZvJQr!M=#|IpnFJ41wZ%3Rݾ)dL;w;P=oЁ?qaS: U0ZV(^MyF"sIɎz@6pZ5=dm&Hy"J ! fM3Ka ]%kho2=T:%鐾%>Q{᩼q Ɠm>?W낰Gڔ%i  { \o훀XO8DZ^*M;?* 2ve &@0IV'&<{gMRiS0>@CSm(~PJ$iAi ĘX ~0kO&0׃%Hq"TW0b Ո$/jy6uyj߀':Lmq͉/Ic#8o?[FȩvP\ d ̋/#0Ǯ@W1$ۈ@ƃz-BQO@i A8zs暞ݺNA"t,`4 {U>\ Lἷ@RA]oI~^/ VUHfp[vn),k~oG-rJ8ܥ懭:]X5`E@w5xϹI]Y<#)yw{<ZHM1:\ hq:4e_巬Oh?pO#]mMmRRqY6m4HYH#Fn[2)xNL|I`?H$.[(%rIJ.*rmeM'MkDL%H Ho:UdOeJ 嗶=$Z@!|O6]1ӿ{ 4.k2V r`p8'<(ʰdá?TtnGN 3q?o~MhOA'%Ph ]12{ ŦTy蘲 (tYLy4DL¥^ȺsM^C"6S%":u MkYVV6ޟPx88 PK߻I5ar }^UuyU!CŐO^L=p(ELH,`[b")IH~U`Z3Ֆ}anTYoy-_|W0I*s A3uc0VaZ*JN9I(I>1p4(9}Sol|EuͼH?xa)vdH4xnhv| ֎}oϊU슁`a /QUwg`.H FJBթYuΧA>5ݺw'{u_y#5̥S) \g" kKnd`2sYxo/M=FOmNA9}z6Qx:05Q/Y/7fK~HLlfIk>p٤%wMOxAAq=%Ǥ̓ ~u vVg{*&h/ޣ /GwRCRFIHjʠ&~&S8<^;Ey[ߨ˪2|{6\A@?]K~(*tPV1̽(0l픳uxL/R"aB]Mi4h?ÍxWVk+y%ܼ?AIzEp!Ok uHx|6gr]+YޝFSSLOE*enAMLUe_$NYooiA"b.ȏJ=U_]J`ӭYUi!:ϒVT9DrX3<:r|1WG#;U e|]\N) >Xq c`I,.# ZϏl#ev_n6"Ȉ X}g2fQ>AB0dkԮ"9IKϥ|ەoL{F"B>pcriEi6rsXͲ7\(U%L Z6Dix2\~Q%knK>v1%>e^C{jV.a-K_PbS:0a)8! *RL]xP\7vO j_Dk~]737d.뷈Rɭ䑫~ϘO6p1y{A/YY%5u݄D)mx> 4kbMegzߊns2.@P1ahWIꯖ3sBUή)b@ wsnf>]'|Bv2^Gxfjzq4mh7Na* ˑU%2MtoqA4H@o‡Ξ(җ9rI4m!VOQOY_5nOBwP| )/iGl ͌[~kbv(P:j4 2("I ; O]Y8cYP5RMl'G ؜2s#OAsҨi5>Bq;2qYq14i!1oR:uE#Ov64&a$Y Q0Y}4$ U/0%8#Z^RW/'Ra w֞w!K!cvTӅFrP1c6YxZoJcu2n2KL9l؜3D mVL!0H9 O Yr` 8GN\{הK Z1K9hLU1ȸULK)x#BP"Ql_h `JBEΩ@ V{;E7];lÙ\l{+e$턈n*: '2j;Qt.m *)G;z4L@[m( }@!ߟaQ۠Z7H~rBX_j%!S?Wk)O~IϧA|*A^y(~H=44120*]9O,hy]JZzmVx|fyyYx9;DU*N~$\?]oghaEW)P)\c@RX4Fsy18o?,:̓Fi$+OT FA̩_DruuFp b"/Oλc2y_ɂ%޻kA=\3( vټoYXBE^ 6;.Se#ٓXf\ IƘSfx>)qQ̭5J1 ic rDgliFHp eQE(8.Bq9^Ão`wiy-"BrX} Z{k-oϲ(-AkP ~XP/s HpR{i\zI/%BVRszN17T?t{MCa)։Z;%&wrV< ڛkȜ+"DDqw"cT;V=c" C/cJ:k6δ:v?RqӃhpy^IiU6L;覓0 KOc3궶C jb9Oeаrw ,w-5#inq'PЧ@o+%SQ;g7Q]Gi O=[o0SuE5Uۯ(痍ԴbAz{Fx܆HvՍXҾqX99%cys2<JRMu s M=wL*}LNʾ\X#v|&tycGOvG uB~ͽ磳F!)=n ͖x iZuF!iٺpqa$'[w jUFYTZi!*6BgV|>kʓ[& PЊs0BfQf/ 2GArQ`u?9qÎcnA35{LM'V F 3;K#[(\?%! LW[,(:?磒7 d/yQ"& % ~εA)`}.2gglmlfԕйibK}|52ʰ{@3/6Cڵۿeܤw5z@orVA]]h~a!@}`$6ՙ0&ĀuLLa9SO | H5qK#i-u:ʲժdAlܟX)Ie~ P?sFzVtKFhv%E}IDl?s-G3 i§X(6:Dv:ux|ܒvkUvx-nMO5OG=B{O=2RBBT QBD=:Nyl2h?N74dG}UD3bOAJvDtK!OOUˇ7]n[r#qo %4 jc90A* @PW|hmWL4wuW0 Y :y`QZ]iYG#,՛4@QZ3>~ˍӀ9ē}5킂W.Z녿oad8vѱ8G{垰e%ns|k tH1c0 Vkݞ0G!6]ǻ|U|7HL-ڀva=6WY2PUP"q$[i7 ']P+or/6'|{D*T>7VT; !6zuGh-< ͦ*:|0 ɥ'^t+DG'Sfni3d96k):Lm `~Y(Ѧs_T1}|C!K^D)Bsm[}F.ޫZGtd"1E.>+'ѐIg7(Y\q ڔWVSrusg0?N\i7Jm]zj>ɳꚅă%ȷ`᎝{usPԛ/Q)sh!u51p`bT?-m<۸JX r"VF6⩐^WnF+bT|Oq@~ ۭT T$|KQ!0|P3ϻÁ޶ -?%Bš`ο9B|;i4I%-MZ,5{1Al-kƾ\'uf: ? ЗT[lY k[¬ Qb8F_"~.j qLac4XФV)qSjq eJ !P\SKTL:lHux_׊蒚2Ƣ!s†9B9`D& 5J- g!SM6w+Z7f^}v^UIBţ[tBus. 0l~ ӾI-%fT"PفXȆ0@'U .9Uv0{i8YjΞhy|>9?ͭDpS DV<οQO$|؈=2JΟ,H!Κ}CEϨh#\B۞jʞ;Cj1bp[r*;JXGduaISrzȯDi!oG.d;|Pꁯ,byP'4A_CҌX4/eZ)8r{Qy΃i*|qsKq@@d[ayv LCݏ4^ ӧF$`M h?]t,;<4Ϙ  /Cƕ@I_ڳgꬳItDШ/5gJQG9U&T2B>5`[ w\?VADz5rW?\gD3\-BXu۴:9pف>3ɼ*y .(?LGۏE:/`Q]Uц"9WZٸf/#uoS$oߧ iO|&$S֣JhUx:_``TwG[@!GefJ'E}2dĥLf H%}Ux7'Z=tקJ)"GthF4DrNJWP t6ՃOEj;]<ҭ@ yj.l̂v{ieD4r z0)HM&lЊ.T:s/@ ~\Q@̊P4T U2|Wn*CIAl`rZC=0[/9|S/9WV$1=Is&p &OœC8xf|&|Ft@~Y8}}s%{wfb+f \ߵ߬cj^wɳ]!p晵q-3Ѫ^Ĩ4?t%ӯKVȏ2^.ncm3L=>҅WQ|P'Qq̽d_5?Y!p>]}N0+$EHq7.ӛ+V| %r3TH,%K}Mޥi&Mm"I(cݪӐ}jlpN&C)oUAo?Ewm۸İ׈h ^VUCNQc*d'9P3!* 662c㙥f=!0/CﱇdVk\I__#,5$ͦ++jcMY%(80zc_$x6DG7T>иq_kGiQPc" '8t<"Hr/lC%SH]Dvn g鐕]84h:5F XS05OBރi}h)) ې߿T-[𪯈yCPkZ0_1U#M+$tr6(֤o}ϖᴊX& REM>@hdOpSOϏ xzOZ{.j i~XR>q+;%J[ Ѽf? M h'+;L.ȉj/tж 7dn缢[&Mԇ<\Ԣz)PH#PYT\ מʏl*!(F>3xyNY7~őKQp?ho'SЍtsL Vm+֚̈́OQCyС9`nBzkT0 syfк=3^\$*xhE9Nu oT_:2h?7^NCC7QF.ㄭyЛ3O;iƒ gt lUV$hbX ?QZ.GR9`LBZ<^V-!_dQaBTIUkmnʞyRd&Tq\=MOQ&u>.JP y% AGm-Wʋw MP(;8YEg1ޛ^C=~ăl%H4tkA[X 4ovd &9'7Ui 8cit]Fb@p+8*)ѭO)jBX'*LnܔMZɐKإl.BǸ1.v9}BmR/J3:Q;7cwdN~zoSC9x6I\>j!81T;Bav:Zh-ڛ>gxۭBr`oz20`p\7iZO G" L`r1*%>Z= žj FpD#vX)%\ì+kxT|z8JNZLR|b 0A]_SvdmՠYyJ+' d}w nD8:hC*s WPbV [L Y-7{&JƅK/nB%<v48E /VyxѹR\"E'v!Pq Q({PFQD|$`~p$Tuj0}AG$T1?!QY `=O.%kS#m۱yA߾-KhJ`"cDv7u#3w-ZtmeD!<&jsM* '*8V7 dҦOҌY,z 3-{fC6geW6#E1;QWز_2/[ܿb̸G7`=f6*UF- ;={ |  ccdMNX,A/Vgcv:UChy*(Nu(sS=aO><)@T]W>i[/LB=23 _Rǥ^ю/.$!'mLjpQaZq])H_)"_`-!I)`CC/C$R5#pץkYt1UVEa*pPpE^$ե *k$E~j;WO*Dtkni g%wa4^d ~Φ) (`8a Nei]3EQ,K[izo$Q6?wQ#ߜFɛM)嵫 [K 3w|X&sÇ +I  =>0+C)_+L[c2DՈpSi3+?3:Aΐ30g f14tlZKlV1ѯ"GC]J<0?GnLfpN A{&{B<֭BBp"rUы{6ttk|#&EP2O@(C-sA_v G633 }M 78GB5#OYK']t91y3g+6 5$܉݌cU1#G/>D}fX)0\">z+Cxz3=-Z9n8 to Y('{{oYxETs2*y8nP =1(DKYRV"gvя@w&.umfB(?pLoT͐VopPOlWkJI#yϩB7bFZ#IgC; ݢo w?&WaBj{T|Z g^. d)rHxuS7]lT^,lJ,Ҳ'W 6\N`֧,)t4C8-9U=_Uvd ڱs}XҐ:1!uC?(3?.0?VK^?(L׌ei)@B e] P%UTB}g V`-G xy.+ ܞg+@>Q)FnZ0l8~. 7抹߹)3s$.[#ӸFSۉ{1ltwI)ꎽtZNu"Ttwf=ReF#6޴]Qv᮲}pJ3T,+Ʋ·YpބĄZ׆SߋI"bXk# 4L+IF'18$Q d0OWxh'"_ -J=c4.#x2;-?U&]-Ad)"g1wt9obO>:7xsvu/F./sUz}FbܘVC~ S4ͨwdCbko]5[W2Kh: U7rꕪn#ߖ֏HbLkand:P@/Aat :+z4wQHNp3 }$ Mʅ(!qw&qw)m@봬qDNy 95-5 l 6GsGbH`M1UvQ Vbv2A P QNΖc~Dv*\s"iY'n11d% 2(i*|F~繧UXld۬^K*}Zt*7m%eRrx < QP)eP_R\]҉p?'2]6P47.밍 bٍ%svOفJz<܏a  M<2 A32 :%H.UAٷCvZxuäU *l(u:!{N_2Qu{#W@cJ0^ ]F7A^@Json T!83ϖ ~ۧ/@3IJC1˜捪ӹ ([,BGjDh&KvcZ]cJ0+%3":omqo2a[OH&M!̳D>En\w[EߣL39˫Mt(3*{M#-JVD֌VaԇJ=PIfoV^q昕V yǽ^Bd/ 6\D~4R 4Jc|8%51 ɿR uAgO9T=/}O7p7Z `LghHQDs( A$l{i)\Xg5= |A=ԅ>9jN2ˁD9v3a*H!Cs=x?6qW,:?J4ٽQ"HDZ Xazr*G f\6>?T8)* טyǼTfLZ#J䖊: ~g~6 Z,CEvv?wV5YʓH-O=KSuU5 g;>*pp e<.6(-9Ԫ.SF@퇲Cم;b:K{xy%I|@EC sgXY 5t5\5&DE-ٯqX 0K Ȓ!+7~_s2:% qcY󕴀Z;/q\PV~܁VW 8K٭q.7akԌ;7<03Ԩ9t/ii- WRˆrFB M쁻9\1k{y | v]K?Xى+OwwQ5& BcJt^BWVI)/MBeEEm& DO_TH$7ƺvK-4fǃpzt^2V;kO<00woy{1j*c{ =ʭT3x FExy>^ aו.Syѥ0x|-l9/ 'd**tUwOBs0s!0 t 01s֬ዢɑ9Gw)Ry^cui^ ʙx|p[޹'ӣaE }ɐ\i#ѰVW-A.@u@5h~12?xԷ)q\3_Nbto|Hy}ps'sǓ>dzL»d5b҃A#co)SԳp93e$Ww6EEfT nFϡ WѠ>O1s5K/#tQw~{?SJF5OVq@;L35{bgEM0䮷bY4US#Xo?sIgiH/)vi״L7 =WF%f@!Eo[oY"i>ۯdip3^zpZN5iUX $ڣ!ڏ&9(4Bk[$n'(K'EC`\q;q4?sl1([SB_ TNr ,w'ھ Wwr=6tKr-`c)'֛v'y?ךᅲ"]N"abs{k7dGv<VjR˵*MyGw#M@D&R bTXv8 {?hl36c;`WHrɦk;>.鮿+61HZ| qCGsFiYu`cWG!85k(ߦT S֞Vlf1tt|Qt* ꥉHpbOuЋ~ 6ͳ Ac8RhIGxlBŮisuKô7Av|؀\X1sA>o_PoEBiuLA-*O7fW>Њ,&ng=~ DAF5Ep}0,!*&}øx,a$4kGN*3@k"?,23J|8].0}>"L 2NUpwv#*^:jU48dГ D8no)Ew,}QB "]`r,?bˍ6 klgE[cx9BMSSc՜؞L]]>8j(X^O'S Ibxo?pGaPNEEL CJeaO MNݖϑ ]}?G{*hų5@oZ{_Ze`SJ RBLh퍞$h. 73~bx9_hɒ~9 F@[~;QW-M}{450찔1rvgݺ!+z[E~ ;xJK{8'%Py0OXx%VE/Ė/kMwH"=RϺӨSArWI#ia9bFR +xc7~qW,z>r_e1'v铟S(3GΙ qwC xDf'ưEjhYbϷ~ja%J!֕bdkUiUiK_;Hũ3׾D|'kBկm縬-D[iTP(0f4ШspZ >t8qc/ R,==Qv#jj6Ҵ/.O{k_Hy&=]V\> dRqz\02H O1[ ˁxˬy,_ +'RB8Y8gȓ/+3@YZ拕賧**Q]nCu !y1?҈(Oa6s)0mP>xQ¶]@SJ><9pcQ,s}c.Nײ@Kqh3MZ<ԥ0j/a%%9ݦ|L,} Eg# }]lv[̞ ZF\Ɖuˀ`HFW/L7GWk>Zn Т2 tIA31; yz)օ:GPMܵh/Oy]\E=FEP3LuR\+yqI(E9Kvvi=+òx٬mX*<`\᥽;m^N^.b\7Ss3тVX>Єy<7?ovs/d;4Кg+ֳwg/Y]r]39C4Je`ӑU8"Age oO!i<Jȓ4y$%}\64`ĦU5咇o6]6 B|mJpcmh/}  IC$#o9 [Z퐾QMyeMDzeybJWul9C' %Tzh>ڰU)OVcU) ̠CfQ׉vlv^}̒BыA&.X&muŖ{!cYHp!# 9}?vPǓZyhVwRv;0b<+٬;g$Ƈs@B^y;ϊ1A_Q9ɕoce)5&Nnu[Ip-G&cB@^0ǣӷ"V_ ã@OHhQ-GrmdǪ_qFT'z0.\l@Mkac˂B;뾅:zu \<4<0([l$VVx[(qDSAp~s*̒Od)? ]|tto$dzf߀*I/n̤ISO)mETo o>4(`qWh%Ce}|$s8_r?YG˭4 r|P%*8=l(_i"y9&Uh.Jfƀ]ʵɽm 4UC5"g=,p hsIʰ`M/jH}2'v,^lí7ɹV\r]wE_)+4Q Tb|/n}!g>^ct~{zhyHo6v׎(i_t[u CelHŢ^Fc-HT`boVZ^+k" [ȭUDO}l`Y`JV {cqz_!~u>+.ykgO1" o9m*ygϜ^T sAN/D4;^%*}4 q#RfՇ^Dգ)˴%TBOV/ \HDNVL?T\yM\GP}HO%^ :Hvy2^Noh 3&hVzFQG햮C7A80ldiwQm{Iz%t٠3ޒk(;%To? /ue}_nTGŸQ1Kkk5gv- =ʓ .6Ɗ';?\*,032Cm4i&gdp;M]dd9 I9W5J5>Բ =8W̲VN%Vߊ.b4%χ}XQжB ugŚp$A8fKɢFNw TӠNze;A̍Ǥ,0TΜ5[ Gm㊞@Ah~1OjS*`M֌Wq[PN"DFvRJ_LAs-CڢZcJ~;*-b fg`*R&a$Sh[f)@Hs9!w[#5nM8y)vbXd$AE8iI(UVcx2Q$mM+e4(džu Ex4ThPD<_\:ȀJ^)nE0oWT`(0[ǿۯ-ٜ=ӡ[+L8mOMS5@TA@u7XL~_' jk`۰. DPgp$ûR{s{B괮uXT]?l) ~?dʍ|C>IEfD7ډ2D|D ?'rOK2#MI< _~W-lf59a! cl˳'*tHƿ*j I-|HC*Rk16AՀދo#$=|d91ޱ;ʴFm%)XUd߷4xh[ÝЯ>׿?hD#E_I؄V2Zze‡8  ts!чi|)۞.fWVRT` LZ>x ֛N^tHD4g?`' x7.B]i}&DWA0#1JeSp ѭ`uv/%ΥӞ $BP@fX@ 9NMy+Yy"PaA>@,*;^R6uVD%*r7VLW"ψ<#~J qE":> .F"vdk~ >`q Y+ m&0&4Oz.2Ao `HD[$JT6Y☇2&TH"B jXJF.8@RNyYٙT|1CJ*x9܊Üǁ;9݀L>z*Y%l [jph Nrs|4cŬaFL'8Fh ?~V|I+jWv׳yHGY%2A66rNO咽7s^hTՆ2ހoھn-%g'cK;]IPar{:6?$sdȂrrsIf"Zvv wHI'n>Z*4ߪt'ubD5Gv~w\My]jN,(Ez@ 0&$Z{@ GkvTq(:pҺM2傶OYZVō[/G~/p#$W[ ̺yc"?Uw2|:ekSYJ{3}H=ײn{^ap8h\|=*~5W9лNI"0,ǵ VF2sK B1ԢCo2+a1E͘" CK\7f Ma""P3,祝gU <') gT@dL~M=. %=P=X4@v:=`tι Tv Hmh $n^ᙳ#u*;3a!% h"5S)vX-+1ԗyEjB53ٴƭ,#ssLGu:qYx%7$x,OkPWpI mF8c­fNtCݨR/(lH2+k ʣzKh`>ɽ$Фإy0A\LEkXyF#@N{zY%yEpB]-꺲x)z""},]p}*l4 H. @Ԏrmý8had[7hZr"'x>a~Blm+;VU5zWt3f :$!': M|ϴvrN\5NRt2 &ƀiȰ?%Jخi M-u1ݒ 5hb%_*/şvǨM/I @ b鈝te _%נA-q6y0u kNhrV$C.Z?YD]YZ} - p=<1 Bxk\,*?!$87ޥY^V49@1[NI*"Fv/!P la#<€D[n}ɧ,&vC>קeL?|_Jek`sSˈnUYN9&AJK gg[gmϘr1FH͠QVHi,")+kт--'eQ9.Lny[G;r{%G+@k$"U0TnWTA꥝ob6DMq$P8mSlK3Ğ*BewG$3UeoqlEhq邧|Қ]? ͉r}%B(~LԒaV{~ ㍀^hMd Z}Z8hSg[w :tX^~s FzBٿ#]s76R P37jiS@_[I&g^P&_pC<|l-8Z69ρ`y{ظ wݎ +kI(~빠zt>w+gh%F7XKwpi/ܟkå`fӶWfd_Su~Gd) .e$g%!f UBSz:#_N7\pY>Os/::IIã?Y dfLuTR!I^H/]c#8ee:̓'ηJK&$b)5gN+|Td8oxdx _n|[": iȤ6jMb7j)}rF=JlcدDZֱ%p'%d(V4Yݔؚk j(Ld:M癨0 yYjqY V~kp܊'w2P.c A(}}5!l^YkG; sFF8NɃ=ҏgesw WA+O^&sZzn)%i1 S[`KLA'9Cg.ubIH<-6 #.MyElS@j6N#ob W<Z@Բ$Q(`k%@c`Ym@qe$ RN%m:$*rux]g~*`9n TĘ{RsS"ux[oKҟ嗿wн0if1gD0}a[5URps\dkʌ>W3MtoMC'->PqJBtbbJ; =y$Mgw=Ѹ8KtR Rwg&l^/7KUb%̎ f >|P{^k὾Ta&K?ɗ?8 @(>" Yj;~f.O_ =sa G/hQ`Jo2SNv]ɷh_ony ҡKqÿ@ӥ!B>(p*@x>kMZ^$gz8@aӋ;-az.ijD|1<$>(dhD}Gl[,뾗 &Pὁ9z "4k(׊*-?k~ QFKGRPRHIg>&,𫲙gy"\Ca^c<BDHaݰh>*,''Эvu?^aN uj[F_xZ]DaAIn1Go#NnF_ yh[5](6h>-y>p[<֜TƆMd,2 0cNP\KWiҺV("UGAuͫaN~f[".PhfqtyѸ&MMܮby/%L!grgQ%V!4t0'AUdJk\+K U8}5?Bm1Jl@\؁ltiWv=eM`<-\@z/xzc^#NQ kwȆtkD_Vd+M3AMs(rZ~ &s$M77gWP#JDIJ(^L"2_z#2=yulf9ˆ$!Wv]_Ӛ~m3 BaRS0x#Oɴ^R;a,OPaܡ/9/Ԇ9Ns>&w~pe#5"pcg]"ɫ?sPtTZTR-+?:}b$1`K'|#d$p`o`Tqf8ca&v2R*_4(X!YGelK(@[ث鈧r\FuSs1Z9k>0M t($De8ZT`Pd*JR0okPv8=RW{#zGQ$kXz7uo;a”0 e݃xQvqҎP+o8d`y\ћ ՑaaC%uv*4z[}eA0"/zlKl,+2he(-+d5-J&4"5ktOQkIK@ij T/ Seչ UasNB PJ,A, o|yql'YVG:f( X]>̧tuxZ{?z E?TjvvJtJM=n SuE6]#I8pyڵmְ1k,n Czkc|jwΦ-!w-)@;}3WѓÎcPM$E͍ZmB@fY^lBLCNW}gc\!;[׈aRPnht,_FZ'ӕrv'""[=}'vK-"Ի3v!)W)| ZB3:be2OS/ꂘI#m)m3!!Y\gXͷ@L |gy(YH/muWHǠ?ĎdÇp!XʶwɌ[q -D M]^&| g#b;1{©:ơ>G2[ 7 t!D Ԩ+1 ; mOR^D&Howޙs g|(.~T.0aIupz5@$X 7glG'D6d)]-YDN-+ʾV`E#Ut{=ڴ/FGɴXAC^FQwIEMF"_8Sk7b;mS=3atE*hg}OϗzG{Rdvʼn6S;*AjhH:ـ쏿KXV&rdwJj%3&Z1dHA y ;2m` 7 G9҆ڠINo?? GMO١b]n^u:|61ZqU0Er#=9Yd0W9fWo꿗3a0ⰭZruOy@8ZUG$2޶_ٷfvpi戱{ӕU]IęDY5DYl:*:^iϱ$hfB!QZs%x%ąܧ.x 5Q> +L8%m{?v_܁łn yB>RSs<ǭ"<1;9sK6&P4j"˕ fudaBaC#xr{Qo< ڠ0I4H\{^M@Beu.FHb_S;ڑ8#0@T×.ddmTzUdFC 6ewiBh֝ۖ'.?0TˣadW4, IQbՙsZ~ 12EgTɋSee}c$M[Xb̬6z#?]g$0 r0: aϒtjM/$zA s+'0&GMsǢxg0|@K1hğKF µCmMc| Y27wK.nx;(ePnׇZX!xuQde8s-ߙ b\i$l sڛq1 d `G<_Nmo_ lr<EpjAE0Նh촅mN` EF=98 m9Nқt{6e]gW,bw[z# ^&AjZ} rTw$%@2{(ws%F6Dӟ 1T?uQ1/\hDr 5}wLA\oJy/yYȖ+ 0 7M\`C2V×]yD_Y"ǵh!G> ={١}?r3 >4$OO38]w¾9zxAFc Qe 8#;4V86ØqْS 5l_*,[7InvK"۝Ưb*l38_f:7k@mSd|z2}v/lU*[ ۰4A "cuh-O'&#*8b(RRnêj~{~Ŀ%^t^rm4w ^9UVAS$ytXn1b{{ hEsSWja|$rn kQG.k8G>m0Kwl7^7: !Os whLRu%rt+d {ԓXD!gQ"@چnE=We.:ZYLlK++M=.*' HIPGqݪ;Z>:=_FtdA#4ȄPN4Hi |mA؜ާ UiD!qفeFiHftN7tP9eu'Cjtn& =,9A/n@KPʧ$͟ ҿ8IĽJ/w[5/"\B@PO9{F [fr5`/%hքÝmuLŲr(G=}2_gbbA{Rec%_1􈇭Tgl; "|m s."Q&%JgVHǚq LϥiǺ$!Mⱬ 7těF`׿!%IbgGƦSVt??,}*maQ1-zV ;HP=!~dRhd&נep3 ͇ЮUƣu,,Ǒí1];]1x/ܢ+?Wݘ] Cd}3gPQ}4-,>XP9ƱKbȗr"϶ ]_(JDO<~+T g`ك[ȓmA*~.Aα|o 1ey;|0$ \ҵX XeQ?Rw(L=: H$5+[|P*i_Al))A.${o{"/?#× ΂y@/Ue(x.n鿓i)݇Z~9,M)b xs#=q[*9B( c vYE>&l8Q={RTNoR&A__[%{{_O3u ȗKT'*PO_砙@ʢک;SEj Rl6F;9=o3fZJ@,YTɉYg]O>?@i@6?]lwb$u6PFvU04]݈M ,PWNCiV*9U ܸATd+#Bք/\lO#B] 2 (~d 4?Sԇ3Q℁K e 2T%.n@1O|K#ihvzI\7fĚdb2kv]ѕI2\ R ʿ v$4 H-H%{) bLUX[3T%x~>$%Atѣ(kc6b$ A5sjI%ٖo9u5x̼`I(lKL -Hz~|q7CQZ cw븭 ^˅fZ=mZ*~æK|z=8e@ch h&q\w+cDIg0t;C/Bu1;jv B]h _6-D;2z-BJ_ E2kӺz"^آ@vYUۋS(\n/R#]\̯zC~$PW' fNژNe.ĤiY/ (q=55vBK&>]tQV!U{W.WV67~P̻1rD_]U 9nEmA&%叹Y&Wí6[Mr쀠јY9NRܧuXf]Jp)A}?H* +!v hOg)?ҾZnB#-;~׬e˟|,B\O/u-:4ןio = E Ǡ@@+Iimn$u1'υPsDH9ÐW1QLwN+xH+o.= B-Zߥ3b.xj1aF*QN٤~H4Y/:?m.~xO&]*umuɩ&]!@Q; @ o2>"tSaNNn,eǷ7z=( GP(>)]mr=)1 ˺x0D n5MM)pq^VufbY;I`'ȇC)}XҢ\'gǐ=P1Tցʠjކ)Lz\) `7LIV"M3?mVy4ЀhD_FK}u @jҍYw[?e.j$"B OSѠ5#̿rW I%v|!}XdY <HVW P]@W~s&Bep*|wnL Oo _Ky< oXun1A$nL{UuFΚ+s tyh GM]xh 8'CF?SV<PnR3&Aaw å=n46mDSpT~* Grےb >4JHŸROqZ<9ے6M\_f;/ Ď( C)F8xUX>-ll&GswewՠơWtZồxA]Y1stT޴9CoLVT U^\@pRwivCE6L/56p+l#;n9;]1Wlwʐ3Iy{<^6'i1g_~W*hW/z'e9yo"Ja fS(=UIdlo XHFw+p{f5o+&ۮl)֡=\sAiR(vy1gTkV9Zl9(7#M_iHFE^!NxFJ*=\=P٠:ei]"p OW6GRA<훈`X4( t[ b{\A1ӎ勧eZ 5$In 2N" c+{AZ)h'57M<ڲrҾHxDW0g\4 6o-^T6Ar[[3HᵲEJ5i9J gepfo)%r!ך灳:@,*o_v{T50.0]iŗZlu;ێW͛>⾾7zX,£2v,yW_|p+7M  5fٲy )ûh,Qs]CPAA&MH8Wh<`$q%u(Z E}_2zDrkUg5V#fg-ksG1uf aPhpd)nP0ӬJ5aSǵeJl/QA}n>$jExgE.؉@Kފc荒 P9v1b[S7n7te"N.u (qJ7H/RUT5O&qzҨ>kf3`:XK ŀ23(ʢ }d-wPHD-dTE~@/lv.D0ʥIe3:3H 8(dTn2K.ZАrط]8Imj +,)r&FM2e’Wq5|%FỎxHOZ[`zYo*dbbd~l^ϐQZ,?/VQ_oe~d1˄ŶiY*vUX4yna.g@?IՔkQX ]RI-O;x0 Jì&1zԍ{<ތ6,vN5E$nKή (?`ͱJwQ񶳷^ %~88/LlN:QT+\WWYFB$(Fvqi? Yۺ 4Xй_b׋T<2 ͣFsCiUmTEyV;B0alT\ƶ?Ieck#`w(.8Mu Y? :/)MlpRc&ѓ\9)#]$Ά#‚mu=RW!i[耞s(E͎;Ʈ_ld\@wå{IpeAD2 UƖ34~0B_@7Hy暂8ԛOߣ`&Kc2ֵby֪oisEP}u%m24w&"V1Ξ.E/ۨXibucr!]R:S Kڀ̱A5qF1y$8TBxW|LMˆwPdqa3SR>+,b]VRjV+^@Y K%eP>ȹ#_q!TEp#׈gE5UxD-}OuXλIEJqh; ]v&)e3{6&y-Z2UJaJ @T{'Vw wfSmK Y6T!b Q" V+̔Z]Gaʞ3J \Ot+ё~SĠhI&Yv?pi]G alH7$d;+g+ic,a;c%9Ta1*w|%C,?vnY?>}!,HL:zX82qpok {;{CW"֯ ](+HH]i-uWL淯yv3?a0Ĉ pj6r!P JYA{bbx b[b1jSsZA-K4z_{-ʒ\DMdE67Z](8&vڭajpmtlQ-; 1T(!pOSojZ71iCγ"&c?.gRдYaǔf4'FaoO[*u>7ľ#(9alR5p(Ve0Sp ~Ha!5.vkG jV]#ӍSq&5mJa0UP{zɨ};S)@3GR] ̼`ֈ OK+:1A<Ʀ:3qܰŅ/NR)J#%@\)FSypnRoepٟ;a~c0~{+ښS8V6YUffpt8xQ,E= ?gN1>(l{6]L9GTo *%4/d;ftN9e~V Eܟdi ]t8"N$/ b9 bKrP7@6"/WWwu~i=qAϿ#H6ϼ~CxV~m^"B@4آ@= EA{)2] n̟wJ'YRʉ>s}͖g3X01TKFnv&F,/? OF. ̊)?m*nl+았9T%@q;fK3E"3O/G1e ozNS QcH~کLXvv Q%C]4t[dQ#۱}Hs J"`% J$[8"_^8.:fc#V2?{.`V"g5NZXWDDOD܀t-kQqX>2s S:?VgZpZC|FATNB(,{BĆqt4(-_73)Oa"Jc2%F%;1 &^L.e%XrL@0G^i?d-1j TA~&uO"_~HT@dinTQJ.ޒ?&OH8viz5[a2e=X4Ew!"G1]dcCaGf(zkbl']LAxKJ0k~7L&P)7⼙U3}Dː_6Bz$c@Z֌:4#JBd(aI24\76[gmK/>w~ꛁx&"D9_|_-Z\^$Pe>Qp}vHi(euG?G1gѴ < 7,M7[Nbi*xSGtPx0{m1%7ħv9v8K~BP喞LW]jx>_,Ri.|>)_FܵG6m]n#zcqcBn%GP00зԂ5%c $GԜe,Gmj&̘Ԙ2C Έ1FaF3\pG6DOpf&!'%, }vKۛžM0٩Wvv@'ֳ o.49=ʷqȉXzdz, rB!@9ݻ4'ˬg5r(E뎄C.Wif~pd&ؾ{8+E9,/vN|%C1aU!NS xep P8?so,ř-Ggh7~ РAz$ kaF#nMh`ٜC!&v/>=ߥֿȴKH0HӴJ;Dez\@,Rr9ҩX*vN1x`}pDb(>(gV'6d}kI'Ty a֘@r k]\©Ji^>KWՑA#"r\V&wJ D$r"bKi9ZhYc :+i[#؀+f8u!F"V< ʴ+8kv{/(uGS=PX@8\N&HjNw1pHV-A$Qvy9u¬fsŃlG{SN XYO&"W6MFewKNSbbh R6n"$jC%D PݭHOwܚa(P$ْix㲒&ƪm@ůSݎub,)R; rǯa;PUXlJ{tIga~SrfDd>r&Xx3H`Յ4#6vyfLcb%#LNa+ZZ呢(twy0YWր>"Kf&69 *W)~ebwOOqn0W< `w޽Vztt _0q6@볆9˅şQ lXUeG}X\:#_KtS#zrgGNEV@8uNx5d4K򵊢eH'xT'0XŽ{v,9D%ŽSuZ\0s61i`'r|v**fn:19حEh;hš%}!2]`aJWs6AH5 ŴO^ jLLuxBVY,9t׻?*#|q`$.=bm,F R)($xFxwƔz&7j~E/N4^9ؿ5H#҇e* CB鰆F Y󤆣)؈Y?fònjpEe'ðlTq:rwDW:ldRyxHUzh1Jp4KFrRo&6n+T )j̉ st.B,bq51 Pdj桉ʲ_QWrA6_4 Ĉ8:R E^_jzlG0{O~h'|-^ Qԏ3(!w9*jSL0?g`l-&蒥Bw - ݃S)Xc3kG8>v,aAVnՁptaƏV^s+ِݿ>{LҤR"/?R1]zW&R%1 X\>bp뒪;%fT^S~Idm|sBo휍>f(%clsxxl#|GDibea5N, =-Dv5Y3VQl+644VSC 6L14KU+.!H9k[T\rG xVR|?-ښmU \`zs= g19HUy䡞1 XeP}9`oGc(& U-p;z2iD0lo#ӦWBsu/n],vNKߑDFYJ;kGO| MUTN'f qg޺39PT2d6v2IM~m{i2v9h\q>so-O# ;v`C9[qyx׷KSfy;mC~IBlكh9`@*Ѻ']bLx>e88Ut!}T^7c%|=q#IvQ,Oa_hbR*\MUuor`yR{a$+U!yCdiW]H ڎ>sHǀqKĻ:;9zE6'MMcU'q6'ƿu+Op{ߢl|:\PMN^mdQ,; oSB`47gs㵕uUBKr8kGFߗuBB),v! Oe9r(x: L14N Jlh|W+gF8 -<=2v|GYBU>3E8mRcXr~맳VJ$6z /X =# Y~ G-mad_ `GF$vy93MG-@U%CXXs\ht E[|gMAM׻`U,]z=B2Z֧!ZʼnP*l\QՖ LՌ|dOH=?!'Tcd0*⹠ _Y2YIr}$g#gg .МZCn:Qq^?2 &rcv>~qчV\5<-ȄžiP5x-Ff$rWDIBߙ76G|";$V^V(·gV-d^T<-1S4>V|p|UIE`R70\e͔ tfM=۶i6c"4 t5%í 6UGLe冓F"=3[i{Q(&!:ו!q//X@5V.9 SVZ0@O"s7v}s2pV6)oxgt`Pբh\,}sX95 Wk['tNj +?ʟxi<`N7?nϣL )ӣ79-4WV^\wXyy[mZh_CC7LP@P*9=6P?Og_[\H?W40`䅃/i7;)!n{=ʠCsI s~`IC Ȱptk@dv851. <{6vq!hD!FM6J/-tjme'f(,QߣgRp+MޥBŊ s6ҥl[]V4g_HfkyT$`qQz|znL:&hOW-*dyszm31tl>$r%F*t-&C/"eFǛWjGajbh.lgD[;n¸s A 4TyBʻ}%Yg-ҎCiaesk;tA̛x $״D E>U$fi->T[äե-'츶ٴ**5Z<nڬ7NοLg zGXvR1 l5])p3D?3 o6Y*G|+Kk R]h4pL[Փ[5J 줆IٽcbXUz[DdMGVN;0Z[U%/E tlEG_v1yis3 0c=MAM|_fҭL'e3yL ̌IJPfp#p֘HݐdZ)LX !(|Z}svM[g,AƏ{ zcD> ns|W@Lw %C3>PZn>2-/5%Pu٪*}~1%!+K9B]cr? n^a{?`y{K 4(u 2gt@r0B)32%?*F5i{I>qOq 6`JS*gp@Fm%ĺTҥv?7!yPC\10Zb๯]\"E!3fToZ<3@!lFq4R+ͫA'j@d7+^e ' bQ ]SlCMȝiWp?yhz%r'LuwuČdWqؼ8q146Co`3 o*`62jߜgQ&/CQG= t-νQ `}:D8,eMpes'YnW .U5YT(Ь25] ;C 愀y݃c>S !)kdgKQC d%`O,fu{=iJd " ?SM_\-PR#F\jzIa$:t(-4 w928~{;Pj7BSstV(6xW$e'8Bl|t]ړ "c gBYDG<a; Q>H3j^V-֫ͧs@_~۷Of](\4 }#| \Ћsww}mKBh׵U E?x'Ya9tIfzy;G39K`S8Lt~} |Q~8z (m2dw?Cx/Jr/Y<ԴEɠ1 a˘㌁bIk"AHsdIl9HD'µnQaIhyE&:hPMG?rd]UUg+5%z~r M%}bVޟy6aXD8]ز"L@TX!\ $Jh`"nͿXv˹IR m313 Ě|@({sJ ~Tո9Z;q9&" 67u$Ƽ(Y(w$[j,LYN]*9/qKFa&vAqiaHpj2v8zDx0xn*0nQ_n7G^0>>(_Ee!%;2[۵N&7TLU뷈}Ņ p@ZRN0Q׮PkbXt'0rYl<1+,:KNe)Gpqe㖢>D',6"U͹DNᄊh\hgz'-:*/!ģxw$<^Uɵɇ/_ߕ8U [ 5h "<9m(WF4z[^Q U>KGiobq.hٹYG[Kuyf࿶[3Q 7fjg}#:VPf|{cѳc n> X@Upy/'ⵌK< OY?Zɞ@[>\ ď ŪrU(EM'DWVߌ aqBlȞ**I vB>쮛 { @Ydlm7w菏+ nT=r$s/y:VQ6*², y2I=eH0/znOLa}'Nq G8oh]`"=R  cLI: zn\\7a1"<^&qe 5!Z<3$2ۅq)>$:rF9DnވjKFSr,(2$C%;{R kN2jZCb/1TDvTKҋ(oqv{љ(qr5&-5 YېKZ˪3m-Ka ԵzaDBvWJ#4 ݴpMIB;ڦesj'`("C?@_jT|_~i*9y1c-'Xf2ןaQ]EZ7o`Q*3ҩ>X[c3Ǚϫ5WiP64 Jsx!3wN ѤY߀%qx=Ti=`%yNAK w̿jEnQWMX_?Ǯ̖;AkX;=)dD&%ҡc&C:>e'ϸ]vF(`uxσ!R(<~dx|X,7*Ǜ! p} TDo= MLtbd)^?0ܙ ͤq7{AU@xѲ<s8G8ݮl;iK} hPbܟt[ l}Js_4WV͌,5NOW%$&|f TL$ym:ŅmY?DSx0#$**1kziE+9Y OyMZ,v 9=igңXC ѩH&J&rw= LTo4g:n"|ܸJ%cqINa fXr;޲4[)v ηpn_#/!G>[;[[oՋeìD*5Z)ٲxUHxU cΥcnlCgijS,'m5!\z帠wGͶhgi~9%NPk) 8$nڣ|hlb+Aa+Jzw @gu[ "4:5XizNJM)1h{#iԚ%G,>t3J?f%/t ~0^ݺʬy ..xl0rAA"/_~{KY !ݫOszY7+'=YR>Nڢtk;ZZbEf4pZ U@)` #{f5=eĎݩY BwpYAWa?A4r<3݊%9j{:!hzr![NإyK/*λ?p-EzFn[vl1ğoo U/MͭЂu}~pFM\{ z&6J[hj=U? }L,8/|#n}S2\`7Ze)o}5M?~)G,q9]o=T7Cѥc꺩}!ȏdB80Gf/NT)'"Swn]j JnP.Ƕ\WTyj:t6r4Z7 Z@qc M;@#7,(`}5b9hksQ]few{sވEQqrk'aE`XT!Pb'woX@9c >,g vS a%1a8ަOn-z|5\ v+cwڣl V ߜ>0u{#(PCu`՜ENR($J.^J3l݈>I i#Hb=K2VZvML9|+Ǽc! fgiH?oGeʝs-I+šo.(`,`>39yMx [ߜIM"<+Slթg%ξMF޹>>^,|zX:lvg^) 3FXA@Y`pP,4(m6)腬AM1c>5ٜ]N4_ĸ#v̬O"fJmlX!I%&J—ez>K3.1:Ŗ owRVtuVV-͖%0URP5CgZ4z[M̮DI>'LiµrZ<-ǚ3B'^2`vNFy.:U >.CzwH|y_ǯnn=':͍flt޸0MQk`,׮Et)íq Z{uk|D:t́q nU/X-xvMKY]V\e*{yF`fǧb>YB|nPȸ0\D?K|n Ef~'*)x~IfPJb!X%D:K` žxr?JT]Vi-hq"hB_,&|Sze-cBjG'I`޸n[:wT%mg_ cTɷtZT+p;R-//j~ipBrAʤ"ԙǑp0m ͩJA!LvlE& 1\B *1ooeeŷ୊m =m&靱%fXw8u'&ă3I$ڒy6 _vLQ˙H+Gg0YݜR@S+n̓μIz#V*]tfOWSI,+e5826=F-p *=X ''ƅ i( N |S5xأKQ` g:.nԮE_Z4{p~T,&_f`犾Ccmڄ4cWL968^aEuek^сy \V3zuwTOPo֏Ew:;Wܹ:ʢ-_U:j-n!ToFwt;Y큞){hIDր'Yߞ]6M@6 ͮ(Եh$gMNΩhֳEYCx@nY(Y:PR>ʝ -b>Rָ^&OOL;ٔsEґcԣmcUzS7r#p4o쟷 oV=hbjcΤ#t )?)!URbQU0N~R_g:'Z]zZĄwmq!XuR@bd2cE"B9|#0_UX ih͗sBc%ktߐ+ _96Z+K1PW.µ[Cǔ:$?e84M eۛh _\1;̆1mC_v2C@ ECP"a\F| Qc1$yQMV5eFo6TBnn di^rf3ct]MS 0{C$& {u)CSޯ8MTkR &5!f DDd'oy[b_3GdnOgHcp㨢NciЮh(I>;"Gq U>e+NN΅O1v]YyDg曗y喝jMl{䍇ܳ묢YKy3̖KVCOi!r,қjNg=2<63!(9rYsK9F;RLAp1}TM>;*<&s\(:yc/||oobQn`d̍땲ʈe,%k?<,F[} 9@c%J;kPG{¦cq$Ѩ$E57GP2|0ϬT;|Ǭ IӞk nD?v+9z.\;ŰZUOzn  =Gһa ?sqH?2AaAZ%yF񁞖>{w@!$YEN8}5C\D X NcwH{;zJ'U&~$~ip Uv>E^fs)y򋊍oHfW6 oӟͅ 1LP9-hvAU#晶R6/{AKlht!sE=p?[qт4(뛭:DM6&oY?qXYSՂNo09{΃tW0`7"(3.E\8{u|{q:2C("ARz${(m?SglXzCCfN:UY3HdFI_'\zz4g=g}l$b7=dC.B)u9C<v~tI>w\¨Qamtrw9 s4c8DaP3P,K4W^t-}e[he@*5]I 9`|=ZSO! @s"Q1zr)kgH&S5W3F ZCS'3̴~(AՇe/m8dlWЖ/e_;C{La2#/kNys ír= jڀ|99Opj;e2Zi, E}`]Z%M^ o횽?+:EeSڒІb ɽy<^lX̌sέbJu%KQh=@/K^>j5PZ>BsbHS4JpKO <rg8 ݧ5[jKy( Ko ōSJ1i^Kͬe'`P b{ۦkWa S= э} ϊEv;c0"9NPNbXْ</sv*=l_xѷ4m~Z%+3"Vmnf$G j U`e5jaUwңntɪ9bleҢazQ\#頗219<-Ӻ҈ao&ZrW, KQщ'voˎ:@)u##w^rîr5+;$ mW̉cbj_>u :4\T&d'f*wk~#hkJul;‡ékJAgnw梸:0Jl>~ ݜ3Oŷ-ƚ@b9XACɨN`MZP%c^E-ɒoW8 n QH,?;f46E{'f씫nď\Qɕ'%{5oug@Di7eBpӢ*|kq Ƅ,쓴~yW"ngEy A{I-~ Mf|~;,. *#?$![6 /D~9j,1Wb8j嘁 bv9WR`ҍHs(@_# %P,tUL:>25(߈"}R3{q(P@dgYσp4J_eS04fuC&pȪAK WEY&.OkIN0.ǫW^OWڅ\GP4%(OOe0b3i˨K*Iە~c`y:e<45"HR`Bi2VP ~\g2T֟N<XLN0Y~eҾ+БM8W *sBPLG6Zc 5K,_S턆qK@[`5| T @Z9 l9 BC>UrLn=p3T=>)uYOmJdis kq**[Ȏ' 0 EDBեp  5%ҌG(X|TC$f#7'T1q$ }KےΩ-#bTm5CPXJ7jH.ZS於'#K g?N33 a2;:*'>V蟳>Uo_%!@ku"q\N + N5BkQI>Zl&49~U۴8ﰶ:Ŝk)flf_&r(9 T(qT*APNa09S_*eUC@5#NP ԔUI{Q yoF{btǶjyʯN^q%48bT9hQ槶DŽDДzuw&k['+kYpIBꧢs г4)?Ê-1pHؕapIqFbX&<Ckm7=Lsd޲l`ri?V9Lܽt7>#i,Cf#nFhwCKTxSXT\\.td\C g΅khKM)ߌl̄rr.4;+&2ۚ,:J驖^Ƶ-.˜@~@xJiQw­Z;K>73\GJ:q4N1<ƐJٝLX6u[ƖF6$ۗA\tSڗw2\TB/' uRjH"떅C9Dz#*E4c3o] ăoiw2~ۋ}Ybakbҧ6>y%%gܗwQ@nF|x+]n_a#Ug/.pȺ1J;*E7 lX89^}A~릕c7f(x..BF mexb*xLBٖQ~UridWS)>*'vJc7EuQ+ e)1%&hguy zM?э]'n)Y#.hb3uq($ YheӌRcDQx}5xjNwZjW(srW8y#u X4tAؘlW]HB\`]/' -@׸Q?zDs"^rV%KJ'h]Nt1ʒďMCηMF'ATɐC#"/|EEn©)QГm/+mΐzHYdc A`~i@cV}^2O_z{, ܉"Է62뚻?/7zz R%L;;bHU%]opw߮+մKrDt@kZ$=m4^!^dis8 q LF O*x+/o37?qDt{mb^َ4w'EmM8bn*y[]BV1KՑ=UwMAOޢ5 6r&=O !qZ/]-+{W@k{tJ=31#3P6ޢ=P`ncܓL6/-ݒP ! l 6VXȒe#  K]Y'Q0e\ǧGOO%K|22h/ aX5[{Y.B(ν󵄊q}i5L00 Hx›.unRr(5ƨн񈭄A RI LLA=kJcL'Z,쾄2ŇՖ؟Ț?99 S =;+Bze @ .NJ2lRKҊU ͨvߡc6? ױ`qLCejȻi! :B Ħa[Ú,z'k-z1N,*=)vrc+$ Or?X9=[@CՇStuOe8DA`KJ9f'{,g?hv~U⃧#<-RR'e/ЇV0T@9`bb FX1_%)ߧ><)u,+v=io.Րs(u"NXy0 *&2(+seD4d_S!l҆/F_жophfT(E4"Jяe/ߖ_j! Wr ؅7Ґ&QP NY"QKJm Y 6BQY MA ~Cʦ%R?D)?߫ז?g.J%y{HԸ!׻xpKsԞ{2}4{I؃.CF"ܰQF Ke݆G#J?ؾk҇HϻJV <1^WX2eSs{Byo]|wDb(h[O-(,(ȅqF0 dc^dg43GΐE;R'(Sέ!EX0+1 h]-ͨȷ*"(^Вk$9H&1&11!͠<Ҝ.0 +!kTlvO\23ܒ5ȁIfۅ{C#Z9vgH=)*@ XM|yԨ0eX/x95Ewf)n݌fCvZȄۏTY*4lKV+Pn1:~h^,SiSogO L^CsCTJ 7P g7pfoS\.,swq&ރ{%1_+ۇM"<˱):4QN}ҷ՚;{bJ$?[CXl>#Ocm&);Urd~rT]_%]:Qs'fEu;mO0ce87A%/!1s=Jcڟgg3_ ծlxm2ˎ'wTX,)X>;VʛP"')AUHB09ǢNC4oy#~j's6%B:_BNOW]؊|U<<̯`~#A5 &b UˠY8p~.2& rly Urc9<=I%xI`kL ?sb)'$>.}J9yD=|e3w/%$Zfu?Bn½4 +xr?F֤Tq2%X%CxﮁLjSB~<"7HN.Ҵ|VWw: *&7}]zq=i;`%0}m9V1 mZm93oW6& ƄVQ:۵ }?qcل1ʽ-0OQ2*= ઘK?9o tXns#؁#rMlNXqF6B l|8 o>xY>2L>h-j~|7Ɉ;_Y.#puĔkkE*na/&}D( ZM`q‰W}7*­AnN=kxMyKMz{.}\H۽l.wR䣗|"`+&ڌT wE70S=2FIJ/zED4VpnwggYЊr 8(Jc`'g}?ׅSJi "]PO\\">jOu:K\,pxw|BdppvCu y s39`3>M)Z\0'a5l>FAe:&ܟGwbjݡ]f|:b>`a)H мn5[?YRSLO"V`L=܂ɗRCb3dBC|KTB"6Y2gF8`q^㣛zSy[NIrj% /j(%[ߛXZFsv*Zgr:k閔FsFٶ؆pgWBEz?W,'R8ǺkxkE d亵tă20p`îL*tX?Bci8`HEDi Ϗz`h|$8yX3=yҰ#/hCc(uXu/:BXms$W [ зP %M#blbj,SeXbFI4?xrR߁po%m:iG#L;!x]gwD_$El7¬m9g…ԝ$SfփB@rJ6l,7BNsr*|B6jO^zYܰq8ia0z{{8\:p}d"*ڽv[(a. b6亢1{SJ(CηXiӹGxQnKS9)= 047j` wx9_ejH|ʰ.͍0 4@yMMOqd΀, C :δmݰ4UQ3{d2jّ{'>.Y$Ĉ\ B6 Hs.$ ImϮGd2A,_WC N~cG>dYg[an󙖛!TT/0t/H2.Pw}of hNGFSLՑ\=Tc8@Z08@`R3\!/vр(=TG%ixV:`?y2H?2 U7Ni.5jO C0;=UL_á,X2ʟX''6L٪ji%Ed\ڤ4#_+4a-'Y}.nn\?׎fCkNi҆e$szUM嗍0>'DvY'8{YMU~E V @cÝA+WꤺߟDgݤ fpd' 5-ޝCmȉn2/=)I\:i?Ai5= $i‡~O7My_8Q5^еň ټhc)-z&*[ܕ NBzt vx3tk,{I,8t[\J)5!>V8_jBM#K6U2RՍc8Kk _\ ],2u$%?p=q~"mz"bigf>k(dαlm9<jl 6m ~az$B1 rwpҘtxщBƔG 6jauA.ߧ.Q$VDR GL7JX#MwLiYahל7zĉH{5m.}acBvh4,[˗G>t9 * k)ǭjpپڅsqA!Ĉe &ڿS:N\9^EkE=ZD#Jتl3%رOmi3cc핔s #>{C_ 7Bt Wi&jNޡe$7%#mdǒp(-}\s2+`ugwt̀W4S;8 U)z0CʢCv8F~7 :K82=ZQ(@r]#:L6qX8LkQ[j*K88)'جz`acsbsKݯ=q}fy[9$r`i>T)XkO.~HGĐSir[j[ew_P";h`SOyUt%C8bq57a\"2ssW1U-P9"wVya!tFɅ8ߤ%o찱leb$;V m~lo:UQ66U2#3Vi7H)FVxu,ϫ^}f&v׺B7{/.:qU:\~SG!,$rl63ERJѴBcȾ޶EΉZF ^.[xH{̍R.8akrev%ţC->OĚ0yI AvC;Wyd']ig.ղ^@ʂF,?S S?A.8UnWޥp5ȣcxbu'D%*Nϓ^SyWD=|y$w|q:jz F{m)]f7ݏ) F1 ~ Qe\QH,X|(Y\cݺJovh3͚(WZ#9k`f(4bnIh"6ƈ5 4KsbOR %MzۗA;Gq@ 9@0h?X8ܜC;x{H'vT'̇+o)3LTe@ʅ|)? /+`[ewZDҔy Q1MCMM ZZ]8CGSKWX~b2(x+\Dt$%ڜ0W_bV ‚W}AyhGa_9ow}EC:d@tl-W>$*n#(h~:Kr:{خN +/0]w撽J:dd>vO.uM1:q7lX;o*&.oj6|lOKBr{(یHvl`oW 6;DuyYz> I|ǣh0%tsN"f-z WJՄ@2m&ϏsJ3sF '1^ xU#3 2)_rf7E##z-8FO_ǵM&|Jբ/n#)>g'HO^9k['ͼuk\cC=CbTe?s4 {{zUuօʝ 95Db A"YB}Ee0qT^>02V6EԽ\GFV 8 e# _ 3MGaEU#m9=^uu“819y1{|́!8N>o< #jQ@4ŪU/CHkJJ`V/)}9b6pdc%X /է!sʅ(DI}zr=7qUQAmA ּKqoߏlGffmŒD]ɷ 6gIrFߗ_,B4Q+`` ARxbH̗" 1Ng!,b.ώύRF ,FJ>N=hb$Ga7?~I<6' =OoST0A:_6&3=*7IѣUi Ugpfαw 㩭>H ]/^bҠ{i X@'ofmx]=۫x%!Qi%90E0i >Kb[W?,^z%bzjw51ЊSÙCFŜL5xPs2B[[I &8h%oN"\;pӶɱ !"Kѭ7C4V2]݇KY|>M vc({NXޛϊEX4#'\-EVڴn/}3\Y%Ԍ= Ѩ( -< mk殺t 6$)K~QLjg,8Q8xy[YcTT鬦vrA]$`,2N3RQ$̓jdkq1}A%b_r݊g|| '>fV7oRO2wU,m.y[ganWز&U'B),eƏz¯EQk_ǔ_+څ]lu]4lX% aЕbND6{bb;FŅKE0>-8I_/u lU"&+zpSd{ D/d4 k mop3}Mgځ"BTCSVFT8݊摗ƥdhaPRޝw=X)6HIB9dkwDoje^(waĢuKgBV.ʛٍPB9i.rSM.ssuT38kIK V\|#@,k=@,5dSN-#7zӿz@ kGnUZ|jݙ's(g;$?b|^RUZ8 \z֝\{!U؏Mi ш=bys\K&q 7vM9DpBXrx{ %h+\_tT3@&cAx",5dVȳbJZ*r1[5>!i&@ö_@b54T kJ@^iy00Q 7iEnm;MУlEV{=vfϺKԾCut&K p-;treUMlnWWE7$,6NJdyB |jd̨Hz!A>Q *AjVˉj1T-"\m&F9zM0Wo<zYO Ec6˘$ǮV/\qE`gdJrB-ғqJ. c8!T̨jc7I]s!d7pUs nyQ'0 _Ѣ+Ɠhf%7M >Hp˻_&0@\Qa,9յӌ8Ms1T4zpA#Ce>[V3Z(hB=i&' ;`Q6%ql@{~d!>P`a2mG H;AŜDF%KS(nYHx\dV$,ĺS'Xbeں.'f9m?6gdSeT؊h8fi#M=#BW=l: 8O1˿KQTZ^hg Ȭ_"u9һUPkXU!DSvM=B.0/'b2cu5H hČ뚤|]g&]F_y\'m䊸Lh- [Fta *`jB@m`;rTjw829]4ɪS$4 ]gZO*DC(ds'9OF& c/NڬcI TiS7" ޷+VXzō5_ER-T4F81x,8¿9 w3>"R-d՜w:&:R}pPk?QE9g]4o?"AWc |LǝJc\IC(+&d2 E&/_\F$}X%WN?Ӏڇ8#lG#eSl 0cPRJYIuu/1m.RF@J<;m1*Aa mX[$N$Xn-DΎdXkZ2ʦ7;[sÌ[` ,@,42a.w4ˆCSgM{T M$;a=%A1tR5"l`RɅr:K;YJm};ǟioK'4ؚٰJ3U=nKy%VF$ʈs'r/NcaU@՟_i+Ti.urb4q2yz,?mx"<יfV6ck{ai-M0' LJ0 e'}1@k͵{?ue VaS 9\w&o3`R7& ){c3Sg@ # U+'$Ifm$t0&O)jpJP|ӈC&@9O>ag?KFOw q3@pc nSvg9*,CK<0"j*E)_܍WM%B3= n#ZL/f% g͟*nk4gٗգ H9UWJc"M3vfWԬ]ۑHFK)ʭ,~ K[SPi85REh_+,vۆD%FxSTSD "]OR2<[^}irRNY Qw' 畭h4|KhY,CyɁܪ04V/o3Y47:.Rq2~w"mIG8&FHOyo9Ѵ<.0 *P\evXd%(@Xآ$7K0$(Hh]=` 0O-ߐ aȌhSx15D›; p3gt)#kH_ 0y}ƽ*}w#$=Q{K=./y[P{=NZJnnm^K܈+𼩸?te,Qڲv;z />K 2X+}2. KP1QQg.N*EpYPrs/3(,x^uAڨzS/ 5 Q9 v3N8SkիM4pQ1J@Vk+ljvHi~ѧ&k}XSn=Vw~&h |*74;5sG7 ! @ICau?s~D4qp!dD{G|! I2׮ v ⽽w`i,V>Ii 7Z bN#?ǜ%:ױ֒T ͂ 3}T6"F }Bo7ΒDn(\ՃxbI>e,l@{AIV\@K?~r9P9Tch]x{{K'ĉhS '.Bg{{8L!M7.*%aF[:-`Z>YU>./:P4 Ѷt&Vao~mdY[f1>>du*|k! !S8p>q3a*i e?nVqҴ.j0$7v6qBaŬ}@gkٝP""a;av3|.2oSon;;'yJ1P[s/)xzc!ԤJDxdν?1 }2`wmF3~uM6^!wJ${Rݛ3a@*`R[J\@Zc0g%j~};' ٧D[h}m?`򢻓wyR0j{NgZK! Pų_4cLUW^%ғ1`Nib8iw@N V;]8`:D]qKkZP9dWどC 5kQwPw|Y n}}cB vqDA|+h5$w0d3{Qx/$}#,':c|p$ m?WRڈJbY,?ݘ츒~\Y ?;dvSa:@IO F r ,CY.9h_O)'X5pi5\zz]G 崐O+|V{dI@8r|8E,[ɝ[nJ@Նt-i.?*p7CνףٰJ:50f'ő|J[w}\\a\eNjZq8ոY 8C9> c\k($/.(%f@V`:eDj]gY9 cq&ڡ8Sm^!g[VH4"kvlT/"ɞrՂHHoyגg7f8WAfUKs$I {淘MoaN zxg\<PtCq|,f9i 3RUi%Z2ݓ`Swı~SnV U@[sŌneV%!iD7ӵo@$,Xɖ,_Kc&Tn<:AZSJyq7ówiʏEruT 7bNͲN Y׆3%D[mV_Y_~JznE@Yܕ8-Qoa p  ~oEmaw? E:M4jgU280{mANӦhwh:)Ⱦ!)˧X& ]bAtpCcN[@#;>FO2y+ȁ}Odǟ7,s=Qa[_\݂*1{V=CC8*2@ƣmqQDGg䎨 -fM*qy*bIm3K6FGS/V3帋 φNo ݞ-> 4)qfe4OǮm܅g/۴e*ȗvLhC?“T1K^UgW#鱃J)z'CAkLEigGMSDCZ&ՉTpə)N-^`FxQhLd}f5hS_FjGn4q庎ϩϑ~zddѣQošXQ*:yomۜFܧ"9N2PȜ#"FJm.]=Ba7DTFg $0pɥ !?V& 5$@Vϛ/a~sM= q(T Yi#DkY 㯤{Ed85J3W¨A8(FXy^XE4b6;92X")/ r1 UFpOuc`/]BgvViLKIATgG?(frX; p) O/+^Ca]џ çGB* >Ŝ%fpG#8'Im~ɭ)պW/YAsppiL[ja!DF1Kqsc<>Ar*2鐴.˦qto4HfR*0l1pKxXM6$1{BtTWҍ}1k>dۯ HvqY B<7g;z|D+M> JH}Aopq91W.DCtu(ʺ3raTS,jY^ N]` M!uMp4s/e[5]G)"JZпN˳S.wC}*[S_[źՎeJWiJWy"Ap,dm5wmbtB[IqTXK43 CʥZz0wms]nN%i(ңEͧ %]wDPbb)Ps>j\>b5o"$@vBa+QτqPQVA"e2#$@9H]D ӕV9:ѳzjvbKAUx!g"Dz,fH|4aGD|2PŠ!t[(xo}{KP2vN iTyTiv~Ԟ1=D`N[wK7i1nxŒy\;_q%bG3dõfV&i vکJMAp[4 Ky#8vʹX q^; P!Q@:l<- ߾:)M+DdEG4jM yMSf(,.BJ≡y&YVO!}6"ALܘ=RFأ^{y NivGY9Ta:F(0>5dYۦSM`q]K) 7%!`54 b7S~ ,HIw;ZōtLESs]^@Rt0ˇ-ǬuQY"S-O{/%zoYQV'-:; xIJSGfy%>e,8ʥg1>}ot_9g]̷x+&t2pUQE}f퇡Nj"Y1ufbZz9 YO7OI[?(iJ+Q|` f ut4 |Zя[0M+v`qL|H~V?anZtD/װ@Ʋ|9zDg\Μcv&:Fz(" !$QG[d<[H x_Z9Nr7+ns`kWo4sB#m2y~'6N&:  r7 7"1eTϏҏ*p|v/vM {А&n䜞x"#/^BYBwvWh]P I{ey$ՒI$.b)y,Zvte,Zo Avmvޛ 'B]֗}S'(k9E57ð^/ BBlP餕O׀OK)pA17p_;LJsm&ȞT i\x9f̄qOnZN  5Ĭf+:Bޫ{q-?ZVZA׬LOM`w%"-~yj-H(B:s .>L,,壧a۾w2+hhωN~0n᩻;:.5=Esۧ% +x ([W VB"p<|chZG$ʄ/0\̓&ywm[n^u+8aL㺎sC!zHOwB}pFxGʥ5 GTQng`р{8;fIk/Bz @M.bLQ@KV_+ˠc]l-|뀫Ws ŪP ԤV!&u HA`>i.ӳeWԟc VO#A 0 ?WE)u6_he -IU+໼*\aemNn^CWfvwwfI "E8Ӿpt)k%$·qzJߚ~.gթ~̝5gDWᨩAKnNaC5AkA2-0^rc弈I/.DON=6LfN1x>.{ tEBr`.f9nI{; IElr.PD)tr7zv znܠJ9ԥ{112g/?:5B[0Cvx D0h3pd绢+6!f,>,6"I:E Q3"#kyGqg 6vLZ={Xs:o)2>^E QZbf+az97cW*h<#L&fbWjEX*7xT\i%ɕlmX| 8;a׾%4tZƞIRAC*V2zAtew)5Y#M9E]54ʹ1m m#!uĒ.@jz~Lyܪ3!MԍO?]%`U03m8)oXq^(By'k#{opkDz3IO9"R5O 9 &ζ?V)ߪ+mw([+{sT:[ZWA#3{y> z c {  pSqL*b$؜-dp}4hOo)|>h~81fIh%J(yv7,Jӫs/O^ȇ|%csDqp :җI5$}z@ҝ MrIXLtJaH ΚT4NlS +8?({+Gm#Eܒ!,{GQ*Pb^|k(_C>C{ ?>g`܁Iy]J) RbyfZoӸΩ|]RYf~_f{Jf/N5gCIi}YO=qroը qwk9[og2kOTQW"e| BBN2ǚzAl:QxK O*&.F,[ _*v3p 9&wmO6gB&> Y)%Ԭd\͢R@\t)GtopAJ&?noZo+jǜ)v&o}'BSfz;v$gzl'55'yۮ>-೒ Y_8>^GT^]XF—dwByZ'e%§P\C$dIQtzmۺev0:olޜDU)yX考xGolYj`VWh%1)n0gN$R87@9pY#%cmuV+ ooÚYtW7ip( &r; >ϸ>.'Q ūcGEH' \e]<Ť:ntWv4,h8e ="#C*pmb^q@`?vk#)q7너lZ|Y=Pb02 1R_"˅RlK6/ΓsKSKit <ư!! 8 I5a$_ EՎ_\3faqaCӋ鰳HMTM0"U* fH~3'1\* M^ OpzJJxAE8ZtؒI@O E!V0cbkWBM@:\-Q)Mp[_7$^ȉLA؁ktmyw\Y@X-kN63&^La(WͫO4um sZw!}YI^o> ߧDjxfh pтJg#喺Xj(Rpq=LK6ߍF)V87ry;c;1a 7$[GvֽBzbJo-V=+ P !g;j< $;j˳7&d6e{'ìTO=kə\sAcklB\TMUÜ {-J~. y M}on7߇[}L ob#\fenaVQ#M졚’zNN]~ݜdІe7@>U_} s)9" c懌AcBF]_ekKƾ'}{'l4,eILnUo*Ҧ EK)n+PdKoR$N/Im!c\`/y)wJ \(c{t J8;&\ k\7;(*3K7>>)" mCZ=Dl"S_z `9մH4hѓSNXp}Rs 1 v)5K?'ٔ.\J 8?D~9ƥA&#lg&6hLlc-"*{CDr-X87^ef;}[Q'JNgbQy~856O %ULccAjuFH)JO2PvRDcT쿊 ^_)DHPyRyTi^n`y6B˞T,k(âtrNeƫ&]496  ϻSTC2҄JN!xn.$|oXЖù^jhD'Â5 OiE,*+==JgfA`DQ9i1dsO;F+*F/0RTr+V]r+և~,D4 "BOWIklF{$bC5ˀ%#'ijޙeDBi59qPf/'RݵnG}3ؽ4yHwn{a椟+ 05 @ËH_I-#BHPS }ҡ7 5ʦ^`HUN@B ~,#Pe]m\ot$/8LsE7w _}BTND]j!ʌVz/C`6=4L}̈́CSh58wہ+c(6_1&>NH|ҝCRCC10RJI2IѕruaIPM+(5m~YP9CwCuWSTb2?ȧ>;k [nx  Z_3af5[ά '忱[ү*bR0Z_?)[wсM2s:POE$׀[Ì ̩7aG/#h䰫w rAmU=RJ>0M5ݼ8N,(yBF 1w\G4>$JR rv>Aٲb׃Cڠ>NYoSLZ f+ҳ>ze~\X߱u 7ؓѾlNK!Pu H-hLVYnY7ҷtPMrJ 'ZL%wҝ_(l9da ?~v00 uoIST#7s9ڋȁ=N[>ۯ@zeؾG g9|ߗEr:ar& ,/+~Z7pCsxA|D;%՘jc8³4fvOBkͣSr }<;r[G d!KUm_:knkc,}`-hOBRx͡`h9;䊲iζqHTOGB)u]l{}LD݁ɥ2 `8퀥bڀv)7>+ j~? `JiJ$sD[z Z]j|G-So|]3]@s=J7&+ j$~MpR-c<, - <=?s+;/q͊3أV_vStX _IxbD{-f}n$M9\ffJ`+0L7L(3zTl2}0vOu :Q<&p ^%h~*Pc O4t;~9@-r:`u}9?-IzD(@Ad(sdDXR2 2D9w{lT3>'}/.rIVT=@W7p=k)&iUVyxʠ.#d`"@Yh"R~-19"fǦS4aXE7.mO|qoUQl?;Wuv葽Eb1c۝{D |w;'vHh^Z/$QBt-i<ӭ CycL[߸4Y UFeGSѷXF?wZ7T(^&3Qq# gCJv"L56ӄ]9ZbE}}:=5dgؖV֢&D6C:ŧZBJ ` n|`!3bUE BLRñ @x8 i-4bP˴͇nk1F2XF9@훐a P!]SwGSU{.]#VpWf ko}ejbv&@?cÐ2W;Kn7D@+^/Hw}`C]zGTc{_zqdfmd<5D SJᯍ9=}>Jk}mo?G,Pz+VLo*41=lf~v!D?S1122qp_ߋ 3@4y%e j4{>s@Cw)Nj=u64}o𲦓&C~%P;ݱ6ɮR b#xe 뱌;g\AOBd=M>6*/cM\_d2xg\n[O ͂}13ڨ8kWdY'cKjGHћRyJm}- )nxܣ3N֍vZrcf7\ :rM1?V3V cp1?TslV8cd^s=GUukAMA ~1N a`qV C+IV,ƦJb1 6C:RƮ/pMyZ8B.UH LyɟV H((N1{ݖ9O~r<Bt Ćשu/\_^%Tto1xq|jX3T5 a-펐1{߫9{<~Uu~ドomW 4zdIKb Rq=n?^08߿[!;k1DKQ_:>eguXȌ.c؄ hFzXfGDhwIj9CDiQ {yLf=|_~fPu!TP_l3>p` ,wM6@B҅K6u_|UN]|kYJ L%h=%~mU"7ՁKqys"aAek{،C!m0 @̇W␽~FH%Y'V-T#Z$a G0<WˢeK^ ) SRKpH2VqEh lŷYйXhPߜ+5=SqBXܫ7-|Z0gg8 r#(RpY%UvfL~ڎ[I,Y Uyױ;g/tB~N2KM?B#+N\ftbna g(*5@ 6 i(nV}zw7o!X59>d[ !>Y.L/?υT&6˹43&q68h.aK#(|9&ĺFT F1tPcpJ>y9<+OF - H +zӲ(e]K*. 9Bѳ';[db-y ObumUc־I2Dsc, "Ea0yV\mbOR- .0~Y 0҅Eg2gbIdnUumӥk:s4NC^D NM˃ED fUXh<*d8VE^Vc*Ջ"gl%"fq i S#u\ ; &LpD)=L;wDl;Yr$c!'_ցT]ha; ϙ304p O8<VFU!tv'td\{q` ;TP ;'=3WOor (2xx%c鎛Ǿ161T,"u ҉eyPoTGS('#z(E3{!)H0ЯnjQwFF?N V̽tHl~d^MAɰ k^cI#/܆dBi> >uwU "{4Dk)'@h>QxЊY6CH]Zw[#rwzN7mJ=[Q۲_k&?.|E^@+JX^&EZP+63{| EvmXa- 1 @zc'G\>ڳe"mTI1Ɇz@^=%ʝFSԜ)օOc C騹}.@[Mw$ XG|nY{S,͎eMUٛ!<:@Vl]%9OG܆5A֭%HIE͂O_k|h~k s(ʅttl ݇j\K-b/3E t Jԣsq75LbZ횯' = r¡)?X**P/45p j|2jmzs6\ X  #^FZ>\1Kwn@r hR|쓣^9Yz> ">(SQQHOv/gFj ką[3=%dB▟ еf #W)½ P*kuY]cI8<= ۗ*Igzv|Pt~1b-R 5s+oAp Dha9vF|8wꢪKG @*BqF$a<m>6dʅ>1DWoLn.#s3ZWUNlYNC۱,hX'/ӑЊ !P@BLXx;Yu[jEx<٪:cV_z}?<&6>ˊ0bxKEG<.$Pj<)b/}Ww{7Ur0V/D݄|37RN yt&MyK+=k?_ܥPVɻ-:K2194Yw^\΄ofT]ՉlĹ DWA;ǻyY/ l;Y~O${J#l:Cuݱ;CɝP|(02Ԋ眆HL7d2 F:TD^9ē9z RHuRKk' Ewdշઞͺc1koKT_}|bu J5eGcx gzX^ASU-b79 ia:divlHm)IŸ6Lp_kS4uqvT[',^N^r# 5o1]j$C&\m3kft/oZ* pk[H8|;Oŀ2eL)OQS9Uح۹iѩX2 IRx,/^#Nk݆84x K)Z}I| 3L?,`ڴ|MmAT Ħir9F)WnT]$oKʙJ挽Z;>^jn=:/5 &o8JK )$ä9)ۣq߻}t!1fV%xy JnU=򮧡!H `:7 C_yԦ ;ԅrUK?{4jugB|g}9V;oZ=X>j$D:` -^esF]ô CڄAę\++P*wLÃrmй6׉~ǡ r!z*}I)Ðg e(fpοl'xK-؇5XϿaQ]e*Y"pQ((? {~7V U3{~J(MaB^jN*Mok/BNgYFriǫPI3 蹗6#rv+ #Gm΁5z^~I ֎f0Id8A0\ylZB$,-[lXK&mD=S#GE/#AIFh޸5l䐐nbVˏPT%iD=$H,}YGIM/klO|.0%H`>Xn*θBRǒ_XVVYs\C|\:Ӻh}u]{MKH}GgNsDuǕ`H'ƭsP߸`Esz[䉇W|N ԉ(Tuu'u":h3bT)K #b5dCHo8,,Z}r\5W␹pe6E?wG+E08WV4 &&IUAcH2lpzSԾdQN̑xkR{-:/ٜ[]K*ybBT'=N= ` i%&YLjG=E~$X rUzQUFCDʗmHB*WwESxR8 V-2>dQuYVE_YO~cܓ?WZ{W\o~# y:o(,JGz*~LY/@I:ƃ͠%G^*OCb`ŧX{"(Iee u8c%b7\Y%9;R[eF(mTDLf=JH,af̢3Xh\lR^1oo=';(btp܉^`*9uPt гraFB=9Eo0^ޭ"{bЧ VĹ~x<,[ "~`,SRPx/rpPpeMb聳 HP]&==݅ *5_][6G -G$AQg2u![U6r 7@#P] 1mF{̥o2MJmjrAIO) 䦅 v\ˁ|ibg|j|Io7)\P'u2n0+@'DYN5׉XD98 ]8e?uoa)`{¨;6c'bkMX|6be+Mx !kW_Ҹya@z @6ᵍV5Vah^PSq|g]ގWpMe7UY dSϱ d.^&niEMu}f + eJ@{q/1&Yn|UO R7B29J(n]+gqmEB۳}˰iԠnaP̦eWo sЦx%sf :Wu .d*v)9Yy?~Hkz#<}I0{ī$=WZ:qdN2.#WPޖ88 pgPwH4}a+R[1yA貯mrf$=d(K63ZԈzDa]ML VWQE*~<-Opm_n|DN:?4-N:詇`S) BJ.TƊ SX;-Q fu>iٱ( oS7d[8eFA3dR453֘B\Ay&Y(g^ m[ݹnL&pq ѮѠ:knú{*)[ @\D[T09J9)vF( 緧h"\5O_R`AEA Vڥ,.i.RkaV(S aYErFPףn w3틥,Ή$U%fF,)d`B}e|AcAf_Eޝ*ܑb6a'+ruiǟ>ĴQcj#CCBO<"+yK7s2hBN*ҼomiExGC,n+@; nCfrSܛp͑:x'GOÇf\}8Q86k9~p7[&(TlLccPj'*8"ւ{s;p'QiBW *|1mĖ#A+`b9PE`qbUzte*w6N λfE*8Ea%B* ~^U/J 98 r"BxBJARg:u'f]=(iBRcEQ\=,>? ɪNw?LM2;h/IcIe2q_) (@."$U&"@3"΍@FsCm1. X/ᰞp18l*ta¿btUi=DrEB,U▃5^KPud:Yep@g!ɓ'|Uy5'{mE"-UvZWuY?tmZO;o8jzJK XA7P\Y1_"?I`7N4*76h.-4E\_MSBz i+u\0# vA;רb,N%ys$9/1=N3ڼ$k+wN~iΞd5w$_=H8hRZ?hF%}pv[%N׼@V#t kDw{W4ƨ4+xN@"J4r*2w-w?ع;׀aH#45cpBajf\I0=U #O(y37Ͷ6@k%?}j7.؁L ZhN8zWMiDLm,,'ʟ/FLf -;)35¶_mH"exuW=t!f-[I@38jewS?ⶢ\ߵ8^l֞Te趸Q(23hEqNL<+6̫Ǥ3 ]'[]): Huv)bZB T=Cve%U{]]W5h[xf:@oA[UG BLMZR5w7@˟]•i^| ఽ0Ҍ4Gƀ?$(rtQp[pAYFAtkϿ+~kY/ MR\ yτ -DO(sJ[ߞ`1xoope6 j&/LS^9,ܽƓzWFhxEnԸ~*2ۖjL`D)iR6PqWrO{ η_0 EkV TPQ6kp..q |TQ6n1[ ~\j)y8}IS0LNVjȼ)4BZxV<77kHՎ~1E25bݚ@( ^YjZ㇁u[ *t-e ( te3IlNܠ񴦌ﴨJl/ĨʑA5K(¬ހH6r1UaC",~3p\T ;2fuYsmt,Jq8D&Tu``}ahsԋa}nb){^o2 ߆* P8Cvdr̥CCb%bՔDq5WQn[@~OW:VB_'t`iJ[3F).(|m& ۜ0'pI')_1K :OE@]?y@oGY (NM8c0Ł뵲">Ҵ(Wy~h#(BBaCf9)Sq뚯~07ed{ yuB#qJհbUJ֢`y J'gLY76he!ɘ T2ܓE"kOs FF/x82+Øe‚"IFҢ`3\{S$&"&$R_%;d ˘lЂ wĎV`1:o@D`ʻ:V'pYq)kq3h𓪨+`2c}9`}%W.Uĉa0mXI{V,(,\r^r1zv~)Ӟo J;LЄAo]ALaO@ȅ`cFwouVfV7;c/qJqdO_H <7'y GÎdm3MuA"m>X gKԘ@1*,7+gX>z"`rV~A#8J zHuLcf4E8~9ocsH,pkrKP{G=G^zԨ ]Y<|hЗ˺i3x@D笴4< RMlz'؛Z%=P2OC 62m/u ##ֺ5S=ẁ=F=ѸGĊpɶ/ٰ$(oyU/j~9̩mr]nUDIZbhrfâ؏Q[eB"h6{9a-6vaâuS }\Kͻy22x |}~\MYM-k1*44cø8s]N 3s FKN-.ACJmY(ጻ75P7 wpF%Ƣ1[ 4'a LhuK9$_x][u㇚|`H62#r-\?۞Ϝ7;ah6OM?o {ǹ InM=.HV%ťn~1IР]p+S WA@prޱbkyS :36Ti%yl%Aƹ]SpNDJ .( 9!G YlǕuzѱ,2c6 Ip-'㰡!H,ΞzG!bCf502uSޕ'6Áy<ىDD&RChVIQ GvD2.tN{eG i uTg_~$ vp_4Z|9=$oH0DE+|V#3jARjzhv\9j&ズCo2M =Ҥ=b>i#3*_Bc4K;N:(]BX"!20yzczήL:`f$*)f$r~oKR:)*r7$U.`N6yM\飪1^,GZĔ_iEЎ {ff6o !Ke RYLTZ}1vܘM}KƵ{cgab▥Wy"jJ亮M-wqr$MZĭx`v(֍KH.)$&7%lɯ L߉;{/F{ N0դM+-}!6{dSb`[-}'t `${Ԣ;F\!7u׭fnS d=(HTwXf e+Nq)]uIZ.ˁS[Z@PSl)ڑGP'A˦͌X:/E#3 +FD`:eeʧīy+._q~޶4>X y\dmda rgywg^u]:£5޺}\P_ jˏ:k]? yintK 2;h벂W'F^*wnZy hZ k8d5!7k@CcgԀnM 8j#+,<+Xn?Ohtl0]\-ͰO⧪k̺pTml[Wu'5{F]?43 pxZ']5;ZY~ZS#ĖCreY *K᠗P›1Sjz= |%E>}(4~)RT~`rjxzةQGPfqJEYVO/!5z7̍VZ3Oiz귩Woׂ&1&Ų`9=e*$ࣀw?H#w.Z."u bx̎kX* 7\A9T{h}szĥ5hۮ|}(-oיW?H,ǩ3n}[7Wآ%5H t? x9BO4&jC.91üڔœ:4b o<(Y)#`yD;81#M+ Yxm0.^-=l6:6B+QJ`QV+gthhňv3w&68oH}֚-(xSIMR:ljA(0֌MmғM1(bຐ8f/xRjǬ(wy ;\SJ?yL}?.B,v Bp3J|b >XX(ħ ߩլoI9&Ԟ]Zm6f{BZIG ɨg店}??{Oe#(qlekSR;nRJ^ 9[.=a2c 2x^cE3uIOV\CUUR@QԃGt{]emfs][EDd++Gpyt()GUs1D3T^PkPZbyҦ`/HHM7Gmv~1vr; Q!LA])ĪN{W <#[C@!x9J:pmuĶN-m&;vc FjcΛ~k"g%Jdb7i_cosxh h)ԬD(ȑGq 5%S _>2>`?PxXpOyB!`+(2ݳx1jX)E5zԫr?dx3:g+nNdO'6|2^10SySDx:69 =B_7h2֊HobwÄttov)DitwZG0n lefsMĖ䋰f mc-2.|J-pE % CݴB1fV7R:d}[:TUw\ JDg>^'<$]Ydf"V"uCCBwɐ#A'1ߺ)g;A7 isDԁ1'kWfKcE 0&q5P~edUuDI؏KVs8[ Ӽ ȃ vQ|30p^L0,xkl_BW5iH&6Jg:Av[-&W7qd!Ƈr q՝Z8#|ZM2Srz6S/lv78dc1DNF[[ $X;OBKQ[]S=EKK4ydG=# LGȮ {(ɰ?h|:H| #҃u$Ċ+mF%;K4ޚS R10|eMd냗ْT޵Q3(FKb[B' MR\ާ8#7ka{τxŗ;%o6o" U 1"yD^~6g^/ mE*{6{荳*7M\QTQḄNYЕ,ԧF[#4_bl fҞH~50Woliܪ98U֯("S$0x% HF{|pV1Jab\Nr1mI( ~3E@yV/^| 4rv$mڭŐ}:T•C!w(sSIzΈKE~y|\ p|-v1Ox v;oY3T5?azu{0]DzAN 0gD+*0` r2=d<\v@k# "qn Q6 h I]JNz@ E\.9cE]#݊jW-Ni²Fnxc hxCpARۼ<=pbg!NTܹ,d3Z9H!uMF~ɗe iWص]!{ORhnNS\cr${V u/brV;ҡ%N?sLBrn I xyV ٔ^ OiY,$ ٵ|Ց`P SKeVQW8?֛ ~zǁT]D)G-ņ![؛ ⨘m,olV1nG6~{cHl%%7*<  A/:ZKDȗ^#|Jf,GΏ VI&/1@#WTK=*h|'O~QقxJsBT\}".'R۱ꤩHiSU:Ci2WI=k`' >iCed6q!Z"zP"@F:m5z "ܑ\9/Ɇ|99"MilխOҴ^N(ÓZGw>*%cڪͺuوT1S oXƜ\SIvegLSɰ6זbpDuH%%,LJrm3>]0D)0ac .A,F;w!_>|jڝ (,G=,T.Ze{\h*""\fGN^pk J7o\j卮L[PkVR5GSXlw p)]ʟ.E 3]T"L/Eng3fz 95'KԇA<vݿд"3lĕIm[}4uitfX)#8S~+`د1 MyYb )b̯e!ov˞@a9]d e y* ed)$"+"Wϰ97O k}Kn=Y]Y q1:eؿ@38}07ZZ?@1p5ns>+.v8RzRѽjROU9rA;" w= m}&RGi^D:Y:L+Sb;Hz^jeUF9v.p:9vxK~Eg7!;+\.^ѝ;b~0.AB MkS+U})D8i3zvФI(&ڂo$:UB0 HEq ʰw9ADTVCFb#]=aL0u$"*5oj/jqsC ` &G8Upx nՎ\X,x`3JE ;-,%8^maAXҦ W+ڄŅ? L4ab>|{50V9\gT̰^qoUY),cp,*dJ]/]4+ J SgzQG5Nr۪G#R1r 7{( Y,.mV,6P~<pDSk:#@ VXO%i@ģfcO Pȯ$h 8VJ6EESL* Kz3 owwSPL6K KY0ս9YVZubrbTbZ{K6B: k.7,^pI;b?IVc1~`O|<-qW!ҒmUb-Q^I뵙HMT,ݔ0#}-I5Ec׉ ru)::,Gb金j. 6 ɓ#;WLk'IW6 3uu M5/8Z³:Hyc,Kv5 LȜ `Hh+"4%sYUrU+#Yp_ޭ @N~<;r(\mrErʟ5){2ED{{Fa8gVnlSKDT ʩ0̴E &Gv'aj9yz~JczkzK#r 'ynBf>80)%?3fz[X;;NL-ZX<5zX`yiEXvb%,'LqWa ȩp&|U;JЏn G@7q (̑GcMÒ@ؔE$5eS͊x4*+}ۻػ/̞@zrP =~>6FbݗGTF u\m7vh9o;8HT*сN%hQ>6Gkz.:=)+,q:5xu4]P #璠&7ęZظ\'6JIr/bu͒Spy|5՜,ȨhDsQ9og'UԿ|erySuykt'!`2|~ҫ},} Κp{vnx_NAKMx-F.N_xuם t5T>U=y:fu gAW( & :tuà,txE hekUB?"3vk@f#)V_ޙI: ྛS4٠ /ҽƁ*_F8j+?zUC%@^9d}kB|,2`_ ag~6*ﴨ~ b(M0ɩ2j$]Fe/$TEUK dpžD ]eWXIBBL,H 6W6Lj~F2rN[62+kF_ &OHߛ>AYXh+הg՝`ǖL$C71!6;-w*)5` 6fgzMIT= $+v)>A孬{x^}FMcuhe>AA5dmd{Xlฯf/]=Xʼh}oqZυIw[jOE6h|טŇ'b1.tK$¨dt'Ư}wu|:?^2/LDr>"囚L{ ] F3Vǐ!sJP,nsByS+=@ wK=ݞX.x(TNjsXsju-?+@Uk*d?>f(z`lKbL Cߎ=i$yR[}:j"rP?\9 Zspr,2ZIDHsfb8ѣ~dlgAQלKFۃ3E5} %khchh鯽3zwneiTDJ%<Akac9QBo. Y`+aˬap dkA9U_y OxH(^R?QvxᠾGwz%oTji=oI_|er=p26d!Rjj O_JC^z2蹣[VDO`d$aQ?+킠 T=feaDl܍$7vdD{n?VcΥ%sPW!߲Z)k bz$vb+X̡PZ!z:c1Ry-:hδ­"l0KeaiEN$cv'T ]к_aip.)Y&Oѡ Xa I\ӭka#.r@8 RǙgtLDԼx)hA& 1^=Ɇq_^5.52cD?thu *%d% c4!4Ԯ^ B?o)]mltKX2h/30\6St# ~c)ĐO1 2 n\Í@)I)IonY9]?XP%7?k܍Nnyp+ijb RH"oA/|=j0t^F NaDG+]Rq5 찹}#bտyO+#͘gYl=z1ɳGy 4&R(y}4U@ހ M<)B8?gH d<ٰͽ+:fZw%kqgog(NRpLcsubo֜S#Dbw1<ϗ)|+ra1QxY٭͍X} <$*햊}O\SbT^85zP_X~GxFY`_nsk 6B`YLA jFYgvy݌Eƛnu)(:J;k9o$,ܑ/ .{폹MIqmqQ=]^=\ѯHӺ.ojW.QFf {Qm$zw7{05c98w, <gW+D-Kb!赡_BKH\3ɶ!^#~=][aNOM{:,4]zC"ZX<|b/4^ 8~YüQEO LGnGM5vy:B?,en9D-l=sLICHZk{BM[ .sYBs-c<] + a4EilW/0~޴c ]Io _em>pՀNL6Qݲ5q^6E 9k-مt4W+I8)Jla$,j3N]gul Z)Ywp=;bMcE(ezzq#FR%݇Yvk@#kEar?E {Gs%־չ@ =O4Lˀm`@XGH')t+4&W|:ᬚY=fbNB :\XWe27g$ј>幷DJA&I CΡ?dId1@vH#?8ΩCm>*^j'*](AYP β/芑KzPUb0Q8Ѿ/JmOBKebWGtٛf H:~KIf,<َ˅Cn.Rlܮhۘ~مJ*9ޓ=MNeAmn \ ˁ~pN}X[(bT$%4@zڙrc ixp湮 Y#ym2ჟS|53 Y+$AHo7#x\4T ˅@Sɩp#r}EtE~xnQf9ߣ}rAII $]t<p; 嘠̭-Gz#?Z0)j'1<Y';Hqɳlk .K'R R#1CCxu4los}dkSp k!V9yI>jMbbSvA͍Nd}h F?`#K>M[D%>Eh4Z"-%oo՝:[Y,gA‚Oy̤5% 6ٸ,pi"wbZNzLIv5,/xѧ"XJfԖD\ڈdJY|EM/2lplCW/7U -^1U_{W+fދ|D$K6 HlHj 0UV(a rbDVHNFF뎹C mXv`#eKUĀht&vEkMT}7/aA3E'~qfCZoM]hTؙi&chRn!( C/QMkv',<A.P󣭋&{X{Ǿdc/ 2 VK*6m_]WVW=/gI˔5mqUdݧx;0b8ю8uY`\3 v ==cG+*D"2S'S=Z͉YzvYl0j|ϧU 9J7lP~%vwc4_&'Cp9$L9&H#scnxPbAZ] LT4tȦ[tWLHy|+O~tT9Oi6 s$?dFHzs;v`|nk2U/e@wSTjT"mĆ-{w673s~hʉYJC}-C ٗ(P\L0&.$}hO/ŻaqM " j>hK\ emS{Z-N jǮ4#o8~5o̚Wa+ E%.0^_ ysY/0+Z I+#;#I2~GB!Q4j?|_NjbYq:/ 8@)(u"%T VݛZbvV/R{Xsv:#?VyAs"/%w406WxFNUo[޶Ԇ>ۂo>|<KÐ5V  {ֺS la̽҇ۿ04!S ką座d|4Ovޛȕs<V+@KtHSnlu7^c 4f8>>8} l)\kP&X5[FDk{qLMiL%f_Ϭ$fa+PZB۟*{Eç@-cT^Vn4w` ">UWܖP=;8XcaBQudX5AbnR]r- zTp>=c'rZXRP[Ok$#|d"jZQ&j ҧ>hM_1nNRȗ RS+?GXfmRC:Fyvٿ8J7yX~᰿ue=-+|CjqGk(%ǪvO"3+:1HmT_y>*uãcѨHtSXjٝGBBWj|c|1sJDg9oAv_֫e{U!ØӮuG@V ;N:>s~J dri(g**=Ntu!쏿ؤcÉ<*Bh\@UR{?By)PmvW?IMPf;^ lM qS E/K/6me`@6|oU)m;Om[]¿̓nxx3E*\/: z!*a TMhxne/@I;` \x0U,el+]lҽ+Zp5?pvwc?8+r^R/))$ vRkϽ X&3 bx1,w{]טy]* (əǑ^ց}e[k4ԇm]Y1XkZ@RBß< 'd?~V5\TH*p(_a@_q9 D`Z?Jɠ З_.1z,XXiCpadAr h k}?"yuR%{ iIx"9tm*g3+Cexd& A6Wxar7|Xm"Ԙ8HRNoƘ\S4x̓|]<`p9"`Z{Q-" a [l9/WV#q4K05AٴI- $ :AH\GV͔%d{ϚHޚl5cϳ[Ȧ7X_t+V"/(dlP_l 6s{ͽY9Zc ɛ&.ojbj\~e|/#]kuJƴ~]Ԍ @"vAx/ob54>z>9Ďĺ%qއ3,Ύs\E?̔wEp0ނSMlxo]ԟicO+%7*ͧP4l:{Ր&Icފ`QBG8 `Se^|y$jƨY >,8WUA7*:v[0K>Qn_LBe&+ qDogiGOBć/D=#Y-~t&),} To~63 K&h?F<ȜY_MT̡=Ldݸ'yXsuqW{T?7 Rj$7 a]8aʴ*X3$X&?,6QC"*5J:8@8=BL#DA nۦ}J.VZi-$m _1_b#"X'Y󩗯\yP"`gp:Kd\!4RES>M YHFCqJ:L&UkD=utG.e%*@elSW wbw=P {}S(wn~Y]]KXkDB0[A6Hif;kgrb/l- wy Wi/hT66H, Y'St8v$=(kR@HBΙOkSG*[LJ(W+fu>!S@4VR2 AJ_cջ7FӲ]*P(Eripw ^1c~q!~QrYcczpiցpmU x(oSY ^scYb`iu!yKoRϦ8e Q R0J2 VYxrGDC7e ű`1 I<TSIKJyCIcKzV"K0|QZ g.X7B>z$mT8b\rmsӏŽn+Wc}:w[ yiٞf&M:ڱ#d)^;&Q M5@#N lx UJw]KeH< {=8L;Pb ̶c?GeAIiiʉuݘm‘)7"ɪ8I 9y+nyYuX,OK?$63Vw{>L'Q*<0ᬡ0vs)pؒT=o0SAx HXZkł9r M$ MΚQZFEë% +ڄws" nHWU g=kzD"yn)/Msq Z%Sn,S%ibTF&#ֹ3BJAvcGP9o~ERt$J[bQ>6s>ѡ1xC(OBpӂ}z7y]s [kh˒Ȃ("9UD2s4{9)D>9W%2u?'Ƶ儞=-@fnNB/vv}\9+0{ZWˆUM{~bGQe$f*o`j {9٠r&OsŻX5|w.Eyv$_w@[BCe>Qȓ1T陟5'R}}y4#hXB$$CnUY 㬹PTC`T{XI裊g_-ԄρLM`&`{2hWׅ}8݆7#  O1 .e6b єp>0\,/AUGuc EETQg}~vςL 1pAb_c.\3E"LΔ2T~vG^$_LsLdNewԂQCaC>!% tNAH9>=iK#R/Tp,dx<;ӍSEKkwb8ă|^W DYF T5#_>%5ꝋitTT|aƂ IApn.! g5]j6 ^( :19#pNѓ5$̦Gu_ W6aNL"+j %=bE&S<(q4_[?Ԇ8AHĺj;c،A{X#H5#kؘcP#2 tx: 2Gg ꘈc+a#Q1'S -7+&),Z όg "5|vemIYoӂ:`"#+9-&a"p8,qwt^"|x1 IF8^(}}:vou"$w{B Zq.KHqӊq(zDK. a-%t,έERGX9lpG"Wkb] N3 aw*fabL2\wE<~D`X+]wU SNC#K)Bq0[!Y߷i_ʨ~@IHO|P& -%$Jruøb$Br#ӌ}r{pknkԕ ,D8("lh1UĵGNy`PN'-l\Uڧ:q$.kƱJ {owCD{$|%Cdƍhڳ2׬K_A9A)v%J|=\HOP^UG4 vӤbvN?9`RHdd~|iyM.RbIJ):*Of ǼwP?WbdP.S^, u[j0d7K6 .`QTMI81AFR͊pD\r4OjS^ڿy w^qN =|c$SL"8 C"V hw-B@e(u[ hC~q0$ȐOTp;lA%$qXEkJBϪ3a?th_:0e_ B9ڸ]/a/ʡki%M7aI٭CB>3Q؁琝 &½fB:H}*?l]U@3/y*+ il4th[NMsgp٢@` e?n%IOS@ԏ8ROֳܳ|騭sEPs]}%=DFG*!5p GF`Žf 0ɧv-'k! Ob#_ºT=J̿&U*=ϣac]ybOkqJjR[0*0|H^ȽK\H籨j-2j $,%RRm6}Ϫ v]ww;DnE&}`igtD;Ѭ7m#ђyic<{a&OlN"ӮgU [ieac3#gD 8 he&z d&qwhBm BtTY{TS(xc {N4ךaؽVt@l^ |OR7pSA8Sle֑0\j? lp`'鍊ft5Li_jǽ/Ɋel=`367_s:}o5ZB2ɴd0KPXa*d({DTb|MϑP+d &O6 cy{ƍ-)qVs|'(Joem[&Lp=M6ύ[LO?_ })#53Ӄ a K7iU MfW~)KFkki ک&\#HUCiH ^VHF\?o&[z _u-`>x).t^w ͵ ξC-~x}W(ٚ\==ʡGN9tk J$(qG0:rqUZ7Jc"Un{fr%v.ȑ>O/X mxg9ֲWcD\DPYY<HdK,T{bꛗ3頼6e9XCMkҷ$Bu2) <ń% q;Ġ*g{˄$3zj@^ },{fCCswaӁV~ Q+M2=? RoB\~*̗[{q($ Vo3Xca*}k*vV2&%gXfX8^?}I [6 @u2+;Lr (;e[ (ws~,vӚW"ӑAy/ $G|2AE'[4aR6rxu1,?JKK'5Zgvu~ K!QtpI;Nvi9xi3"e]s>?DJO V2):Ӑ"2JА~c+#+#Q7N5U%7 8@$@]ۂI^_|}oJcQTaqMc2TwT-['2Đ9Ʒ 2!_?-'Ȕw؜6hJ8Ld55]%38-״CEGg.RnptuC2 S GAlY^r{QOrZ^S #3$(^'1L }6fp?,m.EI@P?Q.{;aPm7 rhr4JQ{"H5РK$;wVoֺE.CQ .L㗏Kڮ eyr"_ÆUzE(P 9qSymevqzXiO6jC@b>h4d UyͩS3O+{酫uϳ0Q-5% qa&Qy;;=Jw\S >Fy޷ {'PWx)5 Im&<NlS9q99T(62̪%\CF`f-+b6R{ ZhiqRΘ՟ۜӅ ,IDH迨yqf.fЫ),;53aCͳgL1f9IJ¥4'Y2\Zj)|*,n%lN]~-] T*),LwEP>y!~U*"Tۓ -GvvK#QsUq[t&ʀ:|H"c{k EC!4ݴ)ru$G$U@crç@8?-C1+R;8)'؃ &}k1D<  9Th{t-Hןheh;oE)D*DļlU_8d HzeсUgNgl ɆBIG0Yu%vjn3Wf^b?!l:%\ jvϖ\Ub.` gTnX,dKl.5=y8^z;?^ 23/1l$0$bR$U XNVcTl6l{$5nBx6X\+"_ L&kwov0.rr$׹M^¨z>(@q8 $Ҡb\.&cUGҦn-m )"'Vi! &:0_/FT T48;LNAͼ@,ITFlSRMO!B:wFiw42O7ۼT{!>9D_~"2%4Z2+|pyWS4E Z5ڥF$pVNͮl-UI:㓽mW r\7Me4-p3YxOdgdEk w,h@6crZqice}/垽w72$1dpiuPr⼏:# QBxy_Rkb0D*̆a}뙍OAʘ70|"wmvѣ ܏VSf,`sp=4(hQ5#%ꓠ@PCUKUhLŀmCY,@k:Z&/;"@c{ :C}V0yi}?ng/.2Kg`GZ4]*vڪL+jZk盏#M5gk ShBd/?fIZgRϘD3 n6Fz,8>>;u4z>8N8]'6Gj뫦) ;Z*QxD(aHxYQEK֍./4PUH+{^ x[0Ev7FC+05tm*q `Dkܢn#lٛuk]XMԚ$xwv4,+H5 q0HVSZT5Gc2~CrJ'ԢV 5!Hؙ =%0~O`c FUўڋـTLr&Kʃ["l'h4Ŗ2-O^ ƤHZ`ŗ?fErjs%5,tYs)K)u cu5G`G^>Z1e5yFNcy(K]7Y+ݮ+BNۯ1@H25’t#zFւ75FzǗֿ/ )/b%8v;G;Zbo&cź8\/ީ=O!4D`7)v$Q2*U]\ f~4 ]3 kgZWfP1 }j/x"Jiq>]c.VE!Z2 5IVYMg.-7Qm,ԛ%rYXh9\L'ђ S|'Q(YAxR0v.mQg:J(٫WJr8.+ުѧXiv*/. vsƵ hHuJ<;Y2W\ƛpIG`$Ť)MPǭiI=n~|wKGɠS{}0 ~%/#XxACu>LDZ!0#VUCK]',<"L *"Snc6Т\6\)4<:V|g/F5/"d9Ơ!?NP J%OfRSLiߏbJVpjZZ)&(\FLT?,+# }bhpڞ]ᶘ9 1_l!U*iL>fCҫH \KpƷnLW #Ͷ(zm sKzҽ,msϵ>pl[]c;a,A"WVupl!#6AkIeղW=ST"29-M[=/*Azퟯv2[?<N 8&}@ vݸى^5t3O!?˖ zG+(l?,A:X{hOF˿i8Ul_ZVeG:ߞ6ɪ3ahwP8eq`Y}?2n~pƍhA޹nHbrNxO#>)%gwJddgO"Ev?c㨶b`}cmג/LilUv&x:Y'z;*)wp܏^Q zPMF1Y >H*ɞp^=;FWq4Ɏ.2T$2VjfDRW*>i%Q7ޙ4d\ UXXhkou`A QQ:97׃~:ޮ;"Ẓ.zFA4' 42mDbn' ,69 S\n,PWgKFN$`zܭf-: Znd^6S]yq:wtxGG깃.hn ;v.~sD3X-5+0.`*}%V d7{Ÿ(^a$%3$eFUBXOnjзJjK1Zdgg \&V.ּ@W8z NWxW5 Ji2ڧr`i!:[@҂2ؘ@v~(2T%3'RE #`㩝.Gh:"'6d4#N=WR $\BHŒ]_R/N +ò?wv3]eWLZ-#'>z֔3 `rN%|i58\d2`>i=# Ϋ]?#Yx@MЯ/6 U|w4N<ڜcf;N-Su``\yOˣ[2]q1;Fc˃{䢛< ϯ e SӨI=_eyƹf&{.t3:+ha_Y'`ݼ(GI}8B (-^#;q JqRD>G&ɋi_ Qq{wI;$É^Ֆd)ECWU _p{|f4& 8q0^ 'S{UXμ@f_qb|I`4# ȦאMPyc%3&k<; Hݿ=o=xCj-aN Q%nБ1HV y]IcB:mU6tʞGjY#t);7)Q܈BwtI%PWy rh8^T:SC7օf@Ӟ0jva`ĤPj4uqKS `d'h)CUV><%7eq*L'~`7 T5}qYhW v\7lZKxOs(9&3D{6C5>P1 dR暝yHVihAy[ qXV 4dkUK`8!ђ_~FG3AGuJV6&oopXW8%"(1MȰnpg]"Kl6Se) gH$#s_CH>e/ri<̀o{Rb9[W\cm`狅kːŒ;ϒPz?rJM`\2'>ںv@F]?7 |9!HV ֭4 yNb/(5DZA͔9~n\<(#E[e-W {:qo3li[ѫ tƩ6rUW:#2xj+Pm/=Z]WjGYƔ76hS9o6tT1-~ɑ4v/X"å)*f,q<[;# *Ob)q*)rضzBn3J9zU8 _/'bT.z ^L}3ҳYUYڪ[7%҃0vH= v4֢]~ -,1(1B 18^nQ@&)5!O`vCxvQx=~˄aMh'v~ v~y =nkAH&gq@ce2" |׶B:5piS[P.^YSM1kբ\EtM$ir轈LڰV_(OQm(mрƾArGɏKkujJ 8L/?]\bП7XTxwzv8멞hf9 Iɯx.#4Z'N #>os *!!^,Dyy> 2!]V?$cvP oբ=Ypf`|5oHJ@OQ5#U VHKraҹ_4ߎK}$?A(%0/ Yj7=3M7vyп&#R oP1/=􊈞&0:Aab̺h]k0\US^ Pxa>%g|kO*!_!,*|-औOUփj# ,@zPNj UXlq*Bg (b$#uR TֳhtZEϢ9nHiz}F#ٻq2],_K?tfU9ncUɊ{aGxQGsI'I9Nc9x^k4[zZ"BgH@W_W z_ى?z2;YmxTAMOrʔĝYJxwYk\x7*oAqqrm:7IDc;ȕ]ym}VaGch"ZB2Cd7,vkJKrhD~a9M+{v^2F7y&sW6av77:TdkE΂ rO^ yv5p]WE; /mJ@۩3ʛٍ'>ŴyZ#ņoBLWEǗ(GOT6t]jntl/#,O~E8t' o"Wa,Z8%՞Nc>: C:5P_UoW?@#ȔXOrgnJBgzsY;J Mf{X?o}V|o0mK-\N-̩OL&Ѱw3]?:ww)DƤSIYtb32yX4~{,k#_*#!F//h>*T |U`1_4I*NyCص0 eaCnAnr_F'V.Y=bTeiH~+yHƄoSz0t-nڑ_ԐaNG"M>H5hND85Og_:P@F#}=)8mI@ZG ۛ{Y%U{ -HSE8%`?@N䀶3JQDf1Ó2.'{l!vޫ0겛 Q7d|c4ɋS1KX>ń ZH^[ц-j<'C-_06 l*ǐ`gON},lʽ7S8* RHQSF1slp4IԉTЊZm*U|$# q*UCk ǓjWM2zڹBt=1ڿQY0/O^-ʙzTߊa|u֕-A, CW/TҁdIH .M7df{hf)(ٲ~Cep(U"t]_9>aϒ}єY&^mG5 nXܬx0%3<_F(*Te)}#IKJ+ȫho?OJXm ma+SEYhNs%yxZ0TFP7S8)byP,{nuR6Ct;M 2^J~cD Г-@5XӫreiV%n'0ɹE!7QG֤ nɃ*혢TIxXK_͒߻ D m ʙ78{-T==:knD*>sJ: ԣ+AikXpQ[{ċrmcz=ߤċ[JGh64Q 73.ލ,MШ5Oeh܃ծnL̄HTExJyV̧Ɏ9&[j~Eu]Ků" D극聘+ͣE@)5 ^'m˩22puа=^4H 0aF%ZB Udt{WC]t<:`K˲^8/!ysjE@%E(hܕiM g(<VAǦj"h2IInz:JZwyϯéLG"R5Tv˯6*]&ø-FnF+aMiByvvR/2Tı@FAkܪQ,84h 9`]Y%g1V}NWD)I.QjΐgR䮎ubk+SfꂊH\LLތ3Vˬ 6%E\.x = s~'W˃aafu1j!(8/u0Ly4t{/=)c شy#ISP䣺ڳ+:@V?OT5X'5ǀ5; i-sqUlb34!n9ȱcXp"ar|H1uw>Vs(+>BR=6?.IlC9]|cݡN z0¯{Tp Fs}< 0k$myANLD<`0 ,pJCi"o-R`p}Gpǀ|n{e~W)qR#UA)o+e_w_IqAd/^Mܿ6# kHh 1N ma\6-w.~ $< ԛLNO,B]YrCfRáЬS6Z[H)m\du1BfK964N٠dc E\ZB#NBMu6U8ϝQ-N3ӫEZ̟jv2L\ܓ% Bh3m@\}QKtd&VO9Dk%"4v!a6BSЂ[~(joDdĠԸkDmsd(3`|30m^tKӒ$S5ZP. ޺')!e$~S?z=\$^/6* aL8MZ̆qn*#\V`^?r"GFH@_~E$$zgM];6H$Ck`rzEËұ v\_TT,1̆" fk5̨JG麰K|0⿚MmmaBjW'xLt.)S濅u]i 6ms^ujSi7 B3GAo*. Lɮ $x_g|$hQ |ռz#^ -=jXEޥGih/u .hy݄\mG*Nmޅ2/Z"3Ǻ iSp4ݝEZD"@Fz@H?4oO[V!YƀPmi2ӕH]9 ؅19v WYd5̓R4n{0/7W%@2/*ӳPwsO墖IXcZϊV%>3M_VU]m9=r'bhjg.[5L S ;kRE=¸LP{ҍh{0/'jgacWk0ƝMQ}hR H3G-$Q ;⾑Q(B@{ȞqkIq7GZh9sA9oMfJ-5(ޚfKU}-)LҲ.s]Js&HԹс&ȝL8z6[ywaj$}s~^"lՓF!ܤg;UӎN1m9WsI4'SC˾c-E38P@̝꿲s!gQ+V4}.հL3d_5hDwۂswd| HwgǪ`a,RrNɛHf!f-Rhw$5&$Q{ms:mKqzwPC~lH(d/~Du&}, xX<9W,І̴W~<ڵ~sgd7v']H^cZ½Z3Q0Y;FcOVߤzjD QOj8dq?AmbiAC.ģq)V7ȋٔԼ1]ߑe~k8!URYcvd"U?VcDsCUp0n35\CHΒuPSZR+L,U% S×!a\:zw@Ʊ2e9yul(0xl|H \Mm ܉=1CAZM`վc)81MMvUI7߁$zh-R*SEș\c`}ĈU5f“ š)@ҝM!ՔԻGhe8/}0,۪ggf9^ MN'N (xFi8ƹ##z Oe`9, ;B*s5j\zpAN SCQU#v<jO]G5[>6Mmiw/9PAG!9 93[MrnQ9~7~%p jM/B w32xL2;Ne6bj酥;A #>5ߗ$?z[kAV5%GJP:`(kgNDC K4 -} Y67gl+zC(K!D~ a '4mD]A_]7tۓBAqӵP&i֡3?Ъ *7yCLwy$x` d09LmZMe~qWɺ2RƶeI݁3ux&'}3v˪:zIaUs%|a\w $cYeFmzdu-/ߝ~Xm5 ԺްG+%L[mi*AΜXQU?ʠc|ƮX{.勮ـLfV-|7PEkpg T7SL'fnbRRF B!\U cU3t%2V2GaC8+.f K[Sx?9Ѝ;ILFsŹYCT9yc@vN;r,xV={\<|e;sTkgڲARaWr$zqdԲ!4o?xn"Jvƪ<NjvN7ϼu a78SZj',(kԖfI ˔yHϫ5I{7?zn?3~&>̑SX?Xjj#BY~Dg1i*eX&Lӛ&̩=wqPc`lsEu!j>),Pr*e2 z=G;c!V-8&4Gʸ{h.m'ln<$~DyYiC {j--}̫"Ll{aSޏ* nx]=R"<RАt܄1&iZt3#r<5F3hu pO(9mwwE $D'+3Ou!Ag~M<*Y.SSN^#+vŢ1ZݛT1QƼNsd f˖J9ypngv)܀&>Ln#*i칃CGu~59ޙД+]ML|/-rtɳgoA{SJ|6'u;Yf xA5n wnʣ uj0#˾`B vEUN| ٔ[Vf^ZgiKU:-k~K&ua#,lȂ #CMͣ1U'7w|i[ꡣOgF(r&ӮxPMd̶wN8SNo]ם4}t@UA%7ҞxI%1ʼXTo1)-{X#I8n;Xu}O7r('ٱP\7:G͜:Eo)mX܃\Zc|·$1V1; gZonNVd|[Jg{"at@8L1MovZw|-lQQ~ j^3>s6mGsoƘ0!r^xU@S!6{OlVmu U.sP/z( [Kt/~h;q%QK.%z Gׁb X+S;O9=*=9m҇iFuAmAZ*;|t[]MFd|SN rpsA'(W-f>2}'ѱM97Dc}adLd8nYB)@xø6+}L'Y2:iOp)]8L"DGUVv7H}\r#+'ٙoh>%1V>S'j[}pXN8M:^x\%P>".?~( {4M2t[R.L N4,Lpqjљbb2&x,)~lhwO,ٱV5%wx>ɏBoL$۰ԗ\B etE|X,2IS( VWxs١?0Dmɂ2r#exul=pIٛ0_C ~-KthhF03GC&{{e%vo jVD-ܬy. 7^ql9\xUtE+p$hB˔ҥ8@EsLpg #0Ri lJeѥT5WP\"|HAdpˑeb禴ZE !R`89)՜^Q}w- :֮}쫺Yŗ֭c]{xu_Ws>GDtqN[&K VY;b&\N4ac6ҫYqͩ5C1VψW!sG_T @wɹE?Q{2&U&#z:S8uZ6!pNsth 2 dr%_}ģ}5/<< ^]=hVkIn>n按-Q3Ua5w6"a- BShI]]hnQct WX(̊$_ă Ps[i8w|bj2N8qˡJL0%kmxklޫâDrnS<M /0 V-C8v&"΃~^x%+L?6B:jeN)W2)ɔ=Rn},ƥj ]a֒D# {amSgYxY@,xWrs1T$4Gc ,`kpbΌ.,Jo8KwSQA 5y,+Hڪ_tE =.KngXNӨ66Mҗ1}Cz똭S=zB&ymO绞N3O߀VwPhdy{ eR>}K#"< "]DlZAR >B9i̦g7H ̦p9Ma\QhbaK ~?[w5}" ?a0yLߒarM t)kBlsTL=Jd ˦cVC`\ҏw nrr6[DjC]&uiNcHa̕ZPp.{bJ|@'Z[!C:mZ='},޴Sp +kG3c- w v?O~tRuuMZ:feGG?7Poɑ1] k=:A6vsF땈(,6Ry^j``!Q`{ $=Vv^ٞh`!+\3*]7;=i:z' Ci>ﻯH7lv :hGkQ'S-@ CE$sO/J"y[GSh "Wudům"QVwYI)G{1Ķ|Syi $Z'{! %*<2qˆ?V5x *ulVĢW ĥ$Vq>%y( 2yy;KiiM$]do37):T5w?WJ>Nx04 yJq}Fr~L Oh(,XXned" Wc;J1hs k8:K.MPjJ"+yJxsP\EnW_#ȝ*[kE-״&{4Z^r63 7<=+R{3TU-i\Qt/.1:fj-_Q9?{-yԝwD>>?Q;AaDlix/W#GPxjj*"~`_KE/2wE]?.O.We[h78ތ?  *]﹦d}e`}ӽ:.3liGs>x`Mj-e s;?EjN8#܊p.bYu2XԤtrZv6]2HH}=脔ȁ}gӵՃ1 F`;2aV!@rFɣR~ұrގ4qw|J.8^uVo3k޴L"NKg?J.\{}A% _Zͩ/v^V2 Jg=P|ըeLЈ |T,]])?j"SD ݭW|ZBT!+< A'Yju8&= ߇34/]hˣݖK!i|hm>];ui("YVsf7Dlm}ٛҙ=r2+ρְWvu&hC6t]߭at?:*J*wN j0cJg;[V&n.+R;&G0?(F񶵄uU]')i>{LiyLaVbQ ~@'WyjɮÑ5N Hۡ̕ޖF˟5'QVǼl/GŒG140XkAɂf '\$Pکs(€mpW\1o9V>ˇǛAl9ږcy`#8Z_y IW.Nh *Euكn;|IN#jʃ[jr{*" :$#w\:[Mk{m5>{(ʆgr13:I~]R S&)?TkYSXaCFcLd鞄GMǤ~F&YK $L?6тA\|2Q쌬CڲMk%ba[PAMXh7ֹt5&Q*W󔙲WpFv:xLÁ:yګۓR#˄g9\RLi6!P/:|9"F#Yj,)Z'[&f &22Y e*tSg8g*W2H:W]︴a`V-Y[0Ttnz92E,[lWY}ퟴrࢰ 3J5CU(^7i"?_Be){[2ewTo ͘.ۣEr%ŜR7AInaviwQ}lSb)'҄#gk[^);DPG4=TPA0~R*dIRT+uU;d=/CmXG-9&.vیI6‹4صexpt_䎼(asbB݆C0ِX`m9@ Bn}'c>M΀y1[1K{F#MbS֜qQ7N2 up$kfN-aܝZ' 1mS3~kv j5jqݻ?r;$LkІEQѶ8"#^5C 4z[ZC\ r T/ Crl*MOl4FUv䝑Úp<=9 3Ƴ>5晟]a"߂b.P /reگXk1ޓ7MTGϕHeQnvp3uAUʊ8"BL#.s15 O+gJ5z_<~x3gkb;Wբz(ybȣAY/ޏYalmo\!zcVrݮ`Qd&]#ޜ]vmiJՀ=u:@8k9JAX"|.Rsnt5 9[N\X1F,Z\+LijaCi#i;Ο>.~M,iJGdOacP7«w}4 ͤW/l[M& $$:J!3Q#tWp}~IKF'ͳeT۹@SC9!H T ݙEd1ժD+$ }eǟuURNP"u&e+e i>$dRryt!TJ]kWAf6Ģ=Y,F3&۫š WLhZ'vJ\򁦷k`pȡ`aeI2(փ3aѥ.DT!|Yǖ÷"ܝ)gh6Ro0 ;2}ۣZyE.zTX"<'4\jK3V;UZ'cA#_',m02-ݟK`]40b% [pX?jPlqXX ]aƺ.+V0^Ҵ| !m@Ct4M|}d1ۓRIqt`60p0q9zp&3SxcM MBP[ .&t]MНX -X_pq5"e42?#nkq =:&ƖjD- ,JK,syw&5!3W6_Djֲd۸t>Yj \|ܿ\xH.^]s6-~WB:+fwX5a^& 2ĺ95Qs-ByL.?" >;ћ~57:c=d L2s%t8wB{ZXJ4賩eTAu抻!.rxPZ>,eVHƺBUГ/̓@*V7x)h)p4a$+l\U)zSqA=? 2:L9Οry> S=M{0a߫ljha{y.`M`n> x4l$ViVt`8j33, C,ֲ fT|2%e-T#Fjz[ @0OU 5Lb!#UdT3P$ZyQ'L/E;0oqwOaTxh{3aX̥8:Ph(sL}ɽ٤Yzj@=*a'6$]!)&7iɧgju#H pb !5C%I~Ά<2ŝ I7jc(67|(_&c⼁0Ȍp}pB4%ђ-f!^ ? >yS.j0/eC9N&  SgC~T ]c[5[=W0Ad|E 6!3pv=`Sek3β?;~M>Q6qVkF'i`;8g7#@$Y )ddڤ,@[l/oHf7-$x ݗqqoMz]Nː^Px3ii!npw8Ԣ+ A=ɆCZ*[TX|z,}#&xکwZܮ>%-i(/]jȋ'Pa<ŖD M Ψe^a [/3@bzzU=2VAopw4q`>'ԉUCg\{kLNpbֱ2.z-߀D`b뜢1[%xW:K3?T\oXwǁ1 L't=gm5ZC(YRA^ҦC %y`MY1\ PjfΚZh{X <;Kgt|)w'Jl ˆ2JˬQTrW+뱐U,+vt$* it'rL}2vhê(0DRc~ׅGJ dU 569wt㓙D!椒<Xneȡ\wgLsz|3@KƑxcH0~v7b)j 94*_|`{>Iz<-vyVB913K*dզ70t[ :^434\tns2,%f6軆NeV>a+1Sh?$́鷀2SJ ΃k  eҾVsEepS@ih>]ջv^ȤV?;gn4w`h8:FaV"Ay-s(zDg{SG46 F: GCgazk6uDΒ倱)9=CMKu(c+Iܰn :g(Go4Tx9Hi^l!|M<_}8*Mߙ!"k>u=䁚F ~V?^g`$$%[ItcpeU@.R6 `Q0K^_j*SDb28FtvCi Kj ?zG[I88zl ,Fe;) F(r/&Oe\̘B ~^LgIwDFi@̉k=b]+x!r=mdQ{zl*p!5xb$(۟*طDE,拝G46ԼZDŗW,"g+jcw Of_Pv(B_i$I]"GtyI^{\9RCX1QH7:% yo/+[|vdh7ˆcS.U+C>BKy ]ۀ3;#=+sI:Mb=Mt<]!iom6GDVU?_rf: a_QvLn\C;2WRCn5 uT\-"1E48x:Ut+Ü|l9Xs,f{IWSjvmlPc:LS%AxսІ9iK:EnW%Zs64\H3~H C'g܁52{[g"7S .72(%S:(xR#Ε-žnS״&IK"X7*(IRS^OA 2 1v񗺰4>aȠa(jь"1V+|!&Zem?Pw O릮]$ "4#\> !H/v-!X^U& 9(Q 9ϰ(0sm񼣄ЪYfn*եeTTd$qhb-&IZus? ޾k μ dUƑB,yY2?928jt8u^ CtjeM\$r#esXi͒L~5,GiIͭ5Ղ70.g,‥z UG=>eGlT(0*GHDu*ę?P瘻 0.y]"=w`óO{}rh1K& d:P,5OO㡮(>_%ƃJJFеn9gSZa 02sN1UWWY eYfkdFߦG; [} ,mFgVtf6͚Q}%-2pml` {\G[C -CM6pYB7GʬRJbdAQE2@yg>,;4=FjuvV찻iV a<,B]v~]c&c#fB((}>D9';NT9L&ډ}ǍW2,D"^+V͊{|l 춲7"&aN  *m|v+<_D](AJD1tDvBTW0M o$Âczj6æS>7;iz7O3sY{'w7/uᣐꏕa?-{ј2chhۄ9Bڋp{3u捸JqA_+ۊnоXD9"ofXspmeJ+Cof+GL/@;RʜH_SZ1]`/OUZUd ա 68'27~(Kt+#M>poRzH՗h)P,usP*``1v1bA=`Ѕ涨G'.q_Y G!) X, j~ŋayxw$ڏfmuͩLL.X--0אtSR>!S)UŕK}ҲKs{P/|⩁q۬fMOȸV}T+,M-Ꝏyx8|>MPT,pX.$ԾEN1"Оm^|0XhH G.d1dB7W}V\^?#YRevݝ;PyZɂCh<|`W-3n*sچC]>$c=sWq`;IQ*+U*SJVFjblvXZ!kT->7ZKg4qb_V22*P]K8c?ck@ǛIK'!E G DzkNz>vhzpi_biYA T.V'ѨTMB Ƌ]M3;N;t2G9襹W=xžSd<ַnӺ[Vz2nЫN:Û? xEp]j\(ADMxYHX?Uy3s^ZQ'DѦ5esC>f2Ã"FZ|)}\?d7x*<׋~zf-S/^c ǟnG.ok+I! m|^<k\=Z!:R3%Εʃ|ٖ@tplpʪ +}30G\\Jvp)D) Y.\hw o<8)%ۛZJ7\4޾jY` 1NzzՑ=toϾE5cQpNsl`wKzء Yp,.aBֽmʼn{ 8/K&h$/W+<鍄2 6Vs UaihCfݘesJ z,1˩Eb1+$.wΤ S- y |\n' Xm%O(Q‹ոf&nL17<0VjNWN6Bp"=e7(7ƤUɕc0GOɢydzdbe0y"i1LsBBOP!h+rPLXZW:oLl }o F!p8TL x!KͲ{6&g!۰c,BCXr.U]-nK2t/"yeuyrg7v|$^? [>% ]<$~EfXvgH.ioD]twEw)Hn 㸸Fj5Ld2]4 5`eyyfSմR@9Ny= |AǓK ` VV滈 Q73ؑas־8m160QvKhaAl%u#*_-a HYSudnP7c@d7.h=+дQr | :7wd9'*%j]Q 0rh@ )`17[DZb-sW%lh-Y̢ ڌP+qթ ec7#Zho\.>Sb^{h1 SMtS&{3SÔ?sp_Hˆ3i<8C|$Cq.KJv yeʥ214\еIcctvfIn5k*WJa@GrJeN&DvȢD>leE^sQU|8amB"a R\xXuuKc= HX0s#VqY i 󉓛7\6;i]Ř4Tw#+u=kTĆ0L(qb%$]ZYvp7d/jX]Q3 rDGKL%Qzž_НxCpc8lԼZD1*ni\R'X`(tŻ "kFOoRVߛBksBt"(n7IʅmpVPyYTs.mO3e2ZJgВӥ  ;HSQC5RrY#Fژ|NpT!qáBS F_߇'/lbxH:Z-$?ig߄9S0/cFKOYABO2Yۚ(-4=ǚL"JJ7bCaRD1CNz0]^˪gwsw; ]6f>FߴsYvӃ5`EcZD'AXoz"a o5o:?~7Ox꟬U6vʌ,D=YEưn p#^4R6'Z튵 a{fbKE8"=NF[ bFx8a ߭Iezk`UU)~u`Lz3| "BFSLOs)4NI7}mlTMg2UL Jk+q!yYbilZq+A(=ۻ[uM!{U, Y.(M-K/ U>I戕M'l ǯVZgeK$YB͕+!e0QE3(W5*. O%eBf֮(VYp{)^@>(d"DxQPp{7]ӽfBңn9&o o3 dށh[}Dnn+\_p]U[g9r@A[0n~=l]j4D5-{ !i%S.ɾY/$t*N| bhТV`PT ̜[y-2@sop11'z%y XrőSfl~ Џs]re5ge7Fҏq(OWz 0P=UJֻ<Xg\kͼSқuo-2KR_@G>f^Mm਼eg3@[~Uo[h©?SH5FpC*>Q)&׉Q0Kfn?8va;x2"@w}SRB;|WӔ&`$y) \K̹~hĚCn4#.CU4l7: ٠Q]]f15&C D?o.Em"ޠ*M/'Z;[0r̢siv 5槧ŘJ29BF *L(Cb媁oLV|`ԋw`\e8?+#q tü4&f rKP߱P?"$pݹa&&G,j BQƹd۽bʞvjEE~u 'jOԶQ4g :SQC0Af~(tUF3d7tO\#-0; vGr*Iמ V_pECСe]i4ݎeTo;ԎUe9"k}2Dgp>qnF%=29,{Y/mNB ]#טGP] 6.: sm4̸wF3HC yL2lozB_@غԞ7D}r 䆖n 2WVlܝ9Uq安T+$L9!JX$(%-\]5~|Hf =_ Ʌb#gJpCr,?7CԐ~J Q;8H@'[_9]+!tV D%F%ʐM 9O8of g"[d_C7;`!` `$wﵝ0jTH Re$YoEVg+ |'7aE'?Rx`fW&b7 ms9FQ=0eneliޑ64~ق*@eRwV,膀jQC}@Yw(~aDs^Xl]TVh0Ga.wnǜ2?zuytpL⎛ im[&Y<%݊%G>JRy^_}pBKRGoy~]Cv}kW@/Gژ~AɟQUs!D `2u uHR~PX}9mkjEOCh!#oFtѝ} j~qmQڰ;y* >9^Vnfm8_Uo[ B7|άzq7747_մ_u} c[j_lH-?AmISx4p1N {5,Zc i)/ؿvNSsbqA$W:&Џ(@xP,I|cC_9/v4^\T k[>y1Sƭ25!vAT GO~y&F3^C (oEA%!9,ߗ+j|Iauh+tRI(g,|:֊|e&ifڟP1Y\8NBtbm MF[~QovɴE B(m%jw;pjJg93FрYqL&؏k"_w#@$6倳ۉ]H2E"#_׍ 8RbHTD9"Շ_`%@I4Iuսꖄ֣ aקyx H:*֚de(qR(Ac]QO]=ٺ Q}Y 1~2fw5P殶E\F¥9z0{RȬxoO <${޺׀tvWrqA_a[^{B=t]W Sf[W<l]51)y5׆~pu!3s;&Kl)H;Rlw1n Tɡ/ivh~dl@IG"DMH'YG~WtbKAgpnmbA8S!yhF4{hFKyaY\@m9@X[eSG)~q]TCDxO,4]dbh֌-(}Ï ѫca]E#^ᣗZ/^\Af{)R=)N|rp`LĔ LݹՀHi4pvvq-[tGmX4fN,f@ja{p[л:cWO*ڱNy~g>Β6%EQ!(K&F*y^p˪EX+/k+cԜG'(1'Lu w>ڗ>ODa~` R&ؗ "f1.ߔK' .:~$Mem0P"ͦ9rU[[dx˸t`JSpD]P}m{셳2u:D"VhKkN9Liߔk|WWnUc$9 A c^(7@".E VlJg& 72̈́tSCǬF,fH<:*r.On-m=߄ӻm<['ʤMݸ-$ y DlкS1k읋gBo7j]v* R4CȨ~ _QQ"jt-0kQF h^;Wh.ZE#юfߊ$?VZXSwUg ~k8+E#鱗9Zed:I$4 n~R= o0"b zś) -ʂXj!K'}0Fyi(TX4'Ȑ&cO%W")7HX:{pI8jSN)6b$c $wRi7@@~GaIX Z -†YT30oIr /k?ۀI|ur4>VVd̕#Ҭ!ć$cGvUz^ñPΥH`ɵWax{G BC%&=qR_3ܸ<=ˈEYSEndxLUNm L1,-$~ѠJNlA 7r2mnd`vMGAlnr?Qt%k( zXϼ4yS<eJv͘l5$6ti_,]LUc*;Q[ 7 1vUвݿS;MvRbɍ%>dhdLܥmx&a)EK`w!iPu'.G03*?ihpGbn>MskD"? W^Ѥ0ڊa, 91ũhޫ }+QrmEvi6ִ?|`z(An:Ngz/MTˏS<s u ):HKx^%4 ؙۅ =xh[L!]~&Ylq|zVkUR78`9yd}Km6T]CV#(Egf3nz*3bT/'5oKSEM9a[e|n?Nk*Ԝ?}K3LS9v% FkV~XLCFChB"ߌK =bT̟HE# '3`h@&Ӊ0 >x9 w mwkӉ;NJ]h7SS3j芣#dы,ehv\D'hjZ#&#=: B8Dm%`c-qe6T~X:S.Xp+5 8B'JxO,+B]m5UicOѿJrJR =fNSb:WnX@q@!$Tqug$J?'zE i8171GYp;WvWoߦpÇ>W vb/c9K!CbQs\to XJ϶͂ŵX n h(Uv:%Is`JOl; !&Qαowy!58#}7m > NTcĪ8b=j@YAT.Zհ`߱%^G{/3 Oq1& ($:G@ бxBqy)I_+RJTtPԦx0X^~1\!jԫ"}p7Ѐ6ps;sE_[оQ5 cjUbQ4 VŤ2l$&Pyl$BI',ok%IS[|'TNrLj X.'Nm26X6wzLg/%6w*2ュ@J۾rqnP*:DW. ^KhvP"gмו 1BQ@}?H ^Q90j]Y&GLTaRuA sTL9o:w( 'DEqaA.tUܤ*쀕" *')llwUՖԥL53 *mIY~;Y9>صhku,?.GZ1gޠ4"{V3{3Q<2a)SұSb%*l!%϶JK]ńX$pƃI9/ڼ66PQNOdd6|m ж"=1+_k'+)avobNSW/`~WwYURTHr7^v2Nߎ ,`*p5_PTmng]V<2tͨ@y{4MK-'5Y"hhq2٤ WץY$My8dC !j 9;#x`}rl5S=ݹ1x۶`]\f$8`lGi:4v2$v54@`ϓ:ysb]r*K[QOF>r댷mwF̞qτ 04XOl[c{3jّAst#n1\ǹMJXB<Gn踉;=Kkh.ȨU9Ӑjvj] 6t*TSBh=/>/Ur"͘s^Q.!Tݖav^AP?<,-\ȸ0Jj&."Bg ~FzQSsw8'gklj#"]ۨG:WALH/_z7G/@(.e=i퓧1q̭;}TXH+yo8m~raɛW?1Jdb8焔aߨ%DqD*7"J@_ 5Ѕ>D]@|گph@vRXu7VFoZSCPM5A~-^3=hϞ1C暖"L"{M ?6/Lq ԽMfKtGHDx[ U]C :PdM%閲sygoi稐 gT5=tX % ۨ)ү=NU^Ղ-+"q,U#lS6F~J~u T~'3`919!&䗲U\/m^,w0%u ^L2ַ:ҌQ}( *‚XI @m-ԛ :c5W7xB邈yտ5aDe;q"-W1ZY|&>`\gͺ{y5QRd+Ҧ}Pr*z5U(`c. x 3)ܞ/dЬ)|zQw䯺!3F#WC nJ_CFzu4p?:,X/[NMWP|"=7wWGS(`mpv 'xFv$+bSG]x^?2{as]wJk󘢶{8wQ )Vˋ?A=I;?؜9,aZ1hxOq*VE <ۻTAdnFBhB$껣| l}e$4n_[D_Hξ73Fw.%BipSi[0(zd̜]}VFncNUT90,F{ dhۆ~)VGjI\dT-.| X_;V@:PfN_8,boxr]r<-<lgpiq`g.{1 2 k,^i*F G[ޞoA@!ϳk 18Nptg endstream endobj 1 0 obj << /Type /Page /Parent 1914 0 R /Resources << /ColorSpace << /CS0 1927 0 R /CS1 1925 0 R >> /ExtGState << /GS0 1939 0 R /GS1 1938 0 R >> /Font << /TT0 1926 0 R /C2_0 203 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 2 0 R /Thumb 1825 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 1 >> endobj 2 0 obj << /Filter /FlateDecode /Length 3 0 R >> stream RCr_٘F][iZƁQe2NlS?){1<2۞:MF\Du /D`GeSs~|yPF ʝQ>l/\1,vJ@j 4DQ5K(`_ wsܤڱ}.K:x coYOmJwt`&vWnM?t OoLRJ%@@sA"r5-8cr,A,E M`drA2ޛI{ g;/ t0ڙq'%SC0f gӽ Շ,BWWHC"C, - ߍֵ[LA9Nr&j|k|+dh/An g; ] |J&Ǚ+I#HJ8[^~iアAiyQ b\6EG` @r CVV^}Q9J4|7K\{#: E05#U>ۨQѿ~w>S&on5i5ewјwn %e|<Ī$X !> /ExtGState << /GS2 1939 0 R /GS3 1938 0 R >> /Font << /TT2 1926 0 R /TT3 204 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 30 0 R /Thumb 1827 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 2 /Annots 5 0 R >> endobj 5 0 obj [ 6 0 R 7 0 R 8 0 R 9 0 R 10 0 R 11 0 R 12 0 R 13 0 R 14 0 R 15 0 R 16 0 R 17 0 R 18 0 R 19 0 R 20 0 R 21 0 R 22 0 R 23 0 R 24 0 R 25 0 R 26 0 R 27 0 R 28 0 R 29 0 R ] endobj 6 0 obj << /Type /Annot /Subtype /Link /Rect [ 127.62 583.125 499.20001 597.94427 ] /Border [ 0 0 0 ] /H /I /A 32 0 R >> endobj 7 0 obj << /Type /Annot /Subtype /Link /Rect [ 127.62 556.54492 499.20001 571.36414 ] /Border [ 0 0 0 ] /H /I /A 33 0 R >> endobj 8 0 obj << /Type /Annot /Subtype /Link /Rect [ 156 538.24487 499.20001 553.06415 ] /Border [ 0 0 0 ] /H /I /A 34 0 R >> endobj 9 0 obj << /Type /Annot /Subtype /Link /Rect [ 156 519.88489 499.20001 534.70416 ] /Border [ 0 0 0 ] /H /I /A 35 0 R >> endobj 10 0 obj << /Type /Annot /Subtype /Link /Rect [ 184.32001 501.5249 499.20001 516.34418 ] /Border [ 0 0 0 ] /H /I /A 36 0 R >> endobj 11 0 obj << /Type /Annot /Subtype /Link /Rect [ 184.32001 483.16489 499.20001 497.98416 ] /Border [ 0 0 0 ] /H /I /A 37 0 R >> endobj 12 0 obj << /Type /Annot /Subtype /Link /Rect [ 184.32001 464.80487 499.20001 479.62415 ] /Border [ 0 0 0 ] /H /I /A 38 0 R >> endobj 13 0 obj << /Type /Annot /Subtype /Link /Rect [ 184.32001 446.44489 499.20001 461.26416 ] /Border [ 0 0 0 ] /H /I /A 39 0 R >> endobj 14 0 obj << /Type /Annot /Subtype /Link /Rect [ 156 428.0849 499.20001 442.90417 ] /Border [ 0 0 0 ] /H /I /A 40 0 R >> endobj 15 0 obj << /Type /Annot /Subtype /Link /Rect [ 156 409.72488 499.20001 424.54416 ] /Border [ 0 0 0 ] /H /I /A 41 0 R >> endobj 16 0 obj << /Type /Annot /Subtype /Link /Rect [ 156 391.36487 499.20001 406.18414 ] /Border [ 0 0 0 ] /H /I /A 42 0 R >> endobj 17 0 obj << /Type /Annot /Subtype /Link /Rect [ 156 373.00488 499.20001 387.82416 ] /Border [ 0 0 0 ] /H /I /A 43 0 R >> endobj 18 0 obj << /Type /Annot /Subtype /Link /Rect [ 156 354.6449 499.20001 369.46417 ] /Border [ 0 0 0 ] /H /I /A 44 0 R >> endobj 19 0 obj << /Type /Annot /Subtype /Link /Rect [ 156 336.28497 499.20001 351.10425 ] /Border [ 0 0 0 ] /H /I /A 45 0 R >> endobj 20 0 obj << /Type /Annot /Subtype /Link /Rect [ 127.62 309.7049 499.20001 324.52417 ] /Border [ 0 0 0 ] /H /I /A 46 0 R >> endobj 21 0 obj << /Type /Annot /Subtype /Link /Rect [ 156 291.40497 499.20001 306.22424 ] /Border [ 0 0 0 ] /H /I /A 47 0 R >> endobj 22 0 obj << /Type /Annot /Subtype /Link /Rect [ 156 273.04489 499.20001 287.86417 ] /Border [ 0 0 0 ] /H /I /A 48 0 R >> endobj 23 0 obj << /Type /Annot /Subtype /Link /Rect [ 156 254.68489 499.20001 269.50415 ] /Border [ 0 0 0 ] /H /I /A 49 0 R >> endobj 24 0 obj << /Type /Annot /Subtype /Link /Rect [ 127.62 228.10489 499.20001 242.92416 ] /Border [ 0 0 0 ] /H /I /A 50 0 R >> endobj 25 0 obj << /Type /Annot /Subtype /Link /Rect [ 156 209.74489 499.20001 224.56416 ] /Border [ 0 0 0 ] /H /I /A 51 0 R >> endobj 26 0 obj << /Type /Annot /Subtype /Link /Rect [ 156 191.38489 499.20001 206.20416 ] /Border [ 0 0 0 ] /H /I /A 52 0 R >> endobj 27 0 obj << /Type /Annot /Subtype /Link /Rect [ 156 173.02489 499.20001 187.84416 ] /Border [ 0 0 0 ] /H /I /A 53 0 R >> endobj 28 0 obj << /Type /Annot /Subtype /Link /Rect [ 127.62 146.44489 499.20001 161.26416 ] /Border [ 0 0 0 ] /H /I /A 54 0 R >> endobj 29 0 obj << /Type /Annot /Subtype /Link /Rect [ 156 128.08488 499.20001 142.90416 ] /Border [ 0 0 0 ] /H /I /A 55 0 R >> endobj 30 0 obj << /Filter /FlateDecode /Length 31 0 R >> stream 1.RǵnQN#|2]| 9]xX3g;@߅;TBm& i MG﹩$AIaog ZV:+bPzENT~6ԈMj}{@vMg; +0J3Ǟ|mR<`$MuyEw hye8PO´6VOBw' 8YPW[Tٺ`6`[Vc$.![)^DPq7wG8aPg*|bOVѨͺ@RF3;(vFo @er>dzoVaBI Acc'9ʐ/3sW; D՞jwd%[WLʉ2@ZIDA7LCC)2?QHmPٮYPw2zeȓ2 4⿎nٖ$ǿD$6DRZhj/ eTAj+#g~o?sBP&Gmԝ5 )[mp -L7;#o ëz0W+PԱ^Y0jzRmߚ<(^3d&n P /}fChJb6[d%K+P"e2޵db_HKRPX9,qx6eW)(v_~PBβq(=!R~OS^,2k4'㜿p8X97J]QHHLX{W_=$tq1pN"ʦwl΁HЍt{m\/b(2T=G"wsh/ycYYGa[Inmt_չ$)+2$6 ;p8r //;[g5]qp4ȳ5 V> j0Asi\@a |,7e%e繩Du"^/i۹0;osnj{1|/DuQMMo[wԞd`b8Ϧџ.>]ڑ2NP>,yw hVCwWnh !a⒩{z夣D0S֪K:f uutv| {h^ ^si'ݎr෈:*gςkC&0#An?d&0% $'3!K=^´  Vj3?tzxK͒,`OpR_%!Rt6InUA#O&X{::@8 s/4ZB^ÓciSM{<&dT!cp_2@g6ħ)K(El6qJ|2vl*fXu\ϵ&O m+5"Qg8%ۂcl״tp dg_G5WJ UӾ9RE3cͿ4ȣ@|GG564 bI}ۂ;~e,b]ћ@|9;B=ժyH9x8x.v=WDmT,Z"ş:T \:LqfNuGa0.ksH<~9i#?IIsFD[Ϻe:n9˨*.Y\AG%zj6M]iH9 \'L.6q5'ΛaRI_ \ kV\qFa 5?lU^_FE1HcaM`x ^ϲκэu/ghߔ.Z ¢l@Y]%m%R;cQC2E k=oZaj;F!E+ IQ ,n/Q1Ra]x^ }m lXUGWǂXFE)@߬Iþ{!b-쀫#aLDւ'['\.kkǩd#veOc;8tfSEȈ`kfhׁdtm>HRY~Zkv/R#a5ҷEmzMeIg&EgԴ%Z:n(mh*ڝ!^%^}2F_M w0bҟ_/k O۱K/8@&[we·Ws{2feʍ&0.8vEe[ה#jZ1Q$۫4';:)ﯶ}]N~!ߨCJptv~S1Nn-!3%y^DG >RwV.vbyK${if~XZ Uoju;=: 2vܩD$;X}UU?gmIJ~Mh 2kYTTesi+!Sc50m!s8S@} c]ש)N >szh=ۭ,~Dp-ubNO&Eaam&Q:SρT(«&J= `1w3}H &uW؊ՠ= d⹣%#w! V`R˱ƅnJ.*ihUݟuXs;m2\cYne8|H܄$P{I 6F>CM7!꤬.#mm9!n6̦2f?kA(N4弁Zs}DuH*\5- `0ض䒅nI>'nS/E%$fcisN?%'@ht#3D鈸;%8)Zu^87U0[p^aC(nr+vS٫s`TT;p6/Rkڙ3WZqmE^CxJISP]<%^3(R-;:LW": !fZ-Uh28mR%+'A'[!*ы5V YC;@}SwŬx&S5NmMwMw_pĹt 25֨mU=ߍR̜ Ùh揔Z^ɈC${QRixP=q3|kjy.З 3̙jp52Ŵ42(^Vpvr#pav"^qtSά$ ۑY^ŮtzyE?y(b1jPDkN98 endstream endobj 31 0 obj 4203 endobj 32 0 obj << /S /GoTo /D [ 74 0 R /XYZ 0 842 null ] >> endobj 33 0 obj << /S /GoTo /D [ 79 0 R /XYZ 0 842 null ] >> endobj 34 0 obj << /S /GoTo /D [ 79 0 R /XYZ 0 842 null ] >> endobj 35 0 obj << /S /GoTo /D [ 82 0 R /XYZ 0 842 null ] >> endobj 36 0 obj << /S /GoTo /D [ 87 0 R /XYZ 0 842 null ] >> endobj 37 0 obj << /S /GoTo /D [ 87 0 R /XYZ 0 842 null ] >> endobj 38 0 obj << /S /GoTo /D [ 90 0 R /XYZ 0 842 null ] >> endobj 39 0 obj << /S /GoTo /D [ 90 0 R /XYZ 0 842 null ] >> endobj 40 0 obj << /S /GoTo /D [ 90 0 R /XYZ 0 842 null ] >> endobj 41 0 obj << /S /GoTo /D [ 93 0 R /XYZ 0 842 null ] >> endobj 42 0 obj << /S /GoTo /D [ 96 0 R /XYZ 0 842 null ] >> endobj 43 0 obj << /S /GoTo /D [ 105 0 R /XYZ 0 842 null ] >> endobj 44 0 obj << /S /GoTo /D [ 111 0 R /XYZ 0 842 null ] >> endobj 45 0 obj << /S /GoTo /D [ 111 0 R /XYZ 0 842 null ] >> endobj 46 0 obj << /S /GoTo /D [ 122 0 R /XYZ 0 842 null ] >> endobj 47 0 obj << /S /GoTo /D [ 122 0 R /XYZ 0 842 null ] >> endobj 48 0 obj << /S /GoTo /D [ 125 0 R /XYZ 0 842 null ] >> endobj 49 0 obj << /S /GoTo /D [ 128 0 R /XYZ 0 842 null ] >> endobj 50 0 obj << /S /GoTo /D [ 131 0 R /XYZ 0 842 null ] >> endobj 51 0 obj << /S /GoTo /D [ 131 0 R /XYZ 0 842 null ] >> endobj 52 0 obj << /S /GoTo /D [ 134 0 R /XYZ 0 842 null ] >> endobj 53 0 obj << /S /GoTo /D [ 134 0 R /XYZ 0 842 null ] >> endobj 54 0 obj << /S /GoTo /D [ 140 0 R /XYZ 0 842 null ] >> endobj 55 0 obj << /S /GoTo /D [ 152 0 R /XYZ 0 842 null ] >> endobj 56 0 obj << /Type /Page /Parent 1914 0 R /Resources << /ColorSpace << /CS2 1927 0 R /CS3 1925 0 R >> /ExtGState << /GS2 1939 0 R /GS3 1938 0 R >> /Font << /TT2 1926 0 R /TT3 204 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 65 0 R /Thumb 1829 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 3 /Annots 57 0 R >> endobj 57 0 obj [ 58 0 R 59 0 R 60 0 R 61 0 R 62 0 R 63 0 R 64 0 R ] endobj 58 0 obj << /Type /Annot /Subtype /Link /Rect [ 127.61972 702.10529 470.82001 716.92419 ] /Border [ 0 0 0 ] /H /I /A 67 0 R >> endobj 59 0 obj << /Type /Annot /Subtype /Link /Rect [ 99.24001 675.5249 470.82001 690.34418 ] /Border [ 0 0 0 ] /H /I /A 68 0 R >> endobj 60 0 obj << /Type /Annot /Subtype /Link /Rect [ 99.24001 649.00488 470.82001 663.82416 ] /Border [ 0 0 0 ] /H /I /A 69 0 R >> endobj 61 0 obj << /Type /Annot /Subtype /Link /Rect [ 99.24001 622.42487 470.82001 637.24414 ] /Border [ 0 0 0 ] /H /I /A 70 0 R >> endobj 62 0 obj << /Type /Annot /Subtype /Link /Rect [ 99.24001 595.84491 470.82001 610.66418 ] /Border [ 0 0 0 ] /H /I /A 71 0 R >> endobj 63 0 obj << /Type /Annot /Subtype /Link /Rect [ 99.24001 569.32489 470.82001 584.14417 ] /Border [ 0 0 0 ] /H /I /A 72 0 R >> endobj 64 0 obj << /Type /Annot /Subtype /Link /Rect [ 99.24001 542.74487 470.82001 557.56415 ] /Border [ 0 0 0 ] /H /I /A 73 0 R >> endobj 65 0 obj << /Filter /FlateDecode /Length 66 0 R >> stream l%. g0LnUH_oXy5GCb;T,5KG\vogz\bԞD5}\a֡HgĴop'b+ɐwU4@EfB+pWԚ}2XIۯQ@ h7Iv3эq5*F(YX)WZ>V-,<΀_jVqz4;vJOg}! 3OѐˇypUnޛL L5Y3ƯL5>6$ Dj Mn"TOb0Id87jy*+˜ٓZa8pI9R^M35a{G7M~Ωݗ;H=f]Zo,VZVWGĢY>^<"TLvzdjtt;P8,SEqO "$yTR# 3^O[$Vo_G?78>MyK{"i.m:Qp DvέH]׏Ghɡ%&#&+BatTLjfd;C,λK$DXIEϓ+Sm'y$Zw9IG=E(p'x֮MYhp> endobj 68 0 obj << /S /GoTo /D [ 163 0 R /XYZ 0 842 null ] >> endobj 69 0 obj << /S /GoTo /D [ 169 0 R /XYZ 0 842 null ] >> endobj 70 0 obj << /S /GoTo /D [ 178 0 R /XYZ 0 842 null ] >> endobj 71 0 obj << /S /GoTo /D [ 182 0 R /XYZ 0 842 null ] >> endobj 72 0 obj << /S /GoTo /D [ 185 0 R /XYZ 0 842 null ] >> endobj 73 0 obj << /S /GoTo /D [ 189 0 R /XYZ 0 842 null ] >> endobj 74 0 obj << /Type /Page /Parent 1914 0 R /Resources << /ColorSpace << /CS2 1927 0 R /CS3 1925 0 R >> /ExtGState << /GS2 1939 0 R /GS3 1938 0 R >> /Font << /TT2 1926 0 R /TT3 205 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 76 0 R /Thumb 1831 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 4 /Annots 75 0 R >> endobj 75 0 obj [ 222 0 R ] endobj 76 0 obj << /Filter /FlateDecode /Length 77 0 R >> stream OT ?UH=5yC\M614\(C EnȾ$]r[- AH_ |S@tYRɊ~ԓ_ќI ₍W] rI8` &n$wx1bآ:p8܅A)d^q^\N /#?D->,q$BVT5k@v\zwy3Hh;jn<́% IK^楼%jzp ^ڱXlr ބKjUr##68\f-奆[w•E]2E4=cvR]ׂ*|ag мq}tԤ0y͇@ sUBnՅ;~'׊֭dCV_^n5jH< _Τgu?[GJ_AV }|ձr%jMHNZYEPkЏ]RaVSi1'˹Ez>=g3^FEs7 hzqs>KǟO\昚.bЍ:xA9p6}b<2`p~sn~ר5wH;&B5w:!<Ȃ>g+]P8K Ǩ  O}T17Dl!υ6!$3])sn,͙'&@)!`uN~&WN*IB7a+ȯvzpj%wUcy3& ԿU뢡lCPpfy73>[oq%܍H|(u6I<*sgil@!%/Yv\̕ `Dc^z`ts$ Xcww2YqF~L{T\aR~=`,*KY4pxܿz~5BAD }Fl- +6iB3k{z ׹V[&R6 *v};%g4&/ڳV%?X*Er\K'-r(O tB}emȣ~YxúTĄ%!Gx8HqnI&~'UTnlu1 K\mdDvQ> >9XFޗ0jqjyE"cv○22%{"aQ  q̌;irԂ $qH(B%.;F"WbZ.U bA- %v:w|f> u`^X8҄` ixrp9&+yx3Pt܄~FП̡ g3чyo[ɛ$ A;Nk/(: Y |̰qSː} KzG8w}>QQhZ-\1,h!+^| W}m ?#gJdԀT11fZ+R۔.KFIqsr%9]~5PPP|b䜚P-v`DOdk*vD[QPv.'kG -xUY̛*+6-M5z҄ D&$\)=Bhu $35 vhx`~a(Z(q.BWY;67QŪVR'ý\J O=,*Ʈ#uʂ0Z|:lcq8|gղ3_9g3dRZr=҃zd7W.n͚*؉ }nZZBa旄doJ6eeٮ L6%7TP,?XRi0Kg$,lGywJg y ֿ_D!4h,sLҘ F'" #^#ɩhm!̥:&JNʔ33K'rJÂWlCtԔ``"}{3o 's4|@Q!Y̜uUTJUB}BIsl!h0!8 _$Y`Ue2@ξ; endstream endobj 77 0 obj 3224 endobj 78 0 obj << /S /URI /URI (2' xr՗]o`m) >> endobj 79 0 obj << /Type /Page /Parent 1914 0 R /Resources << /ColorSpace << /CS2 1927 0 R /CS3 1925 0 R >> /ExtGState << /GS2 1939 0 R /GS3 1938 0 R >> /Font << /TT3 1926 0 R /TT4 205 0 R /TT5 206 0 R /C2_1 203 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 80 0 R /Thumb 1833 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 6 >> endobj 80 0 obj << /Filter /FlateDecode /Length 81 0 R >> stream ts:qN]Xvh=㣺3l(&﹥}jRj)0^ ,bmMx%D"Jΐs`pH~N<5 Lz챕E:lɁb}9r6Q))d]|̴I;FG;)Hi2H4G""vY`+ @9W /}d3kWbXv$_Mrϐ xdiGlZerH)T 8h N P&dY~G;̬e4choݢJgCg>.ceD6 ϝ@q!rK[ : a|JA["!.ڿe k!Gu+P&~E)X4 E\foE1[4$9]"`H P V%@]G0*M7<_5m~zm3n X:v[xqk΅fV е v[kW7wr̰(y4k7%DƲ~W ;ảIC&PC얽-ࣤ>`fiIM ETE>iFd:K2gp0'ߗy>wqA=.96l`Ntӹ*vmނ'yU1!ـyAXEF"Mئ+V'CqF# 7Q{oYfn ~7lo8C L4HWC"eJ>Z1MKaawȨ"m$*qÕkN.i!CgO3\j՘mzU5;#[F #'Π˞\ZQt0g4àoN(ǨYBC{.ؠ㥈a,?z?A8kQ r(.RoxJ [/&-f~%ξrT?9clV?LAF5N4D-_^ nb <4fARЧ]F_g8t+l`Smw܃%[n!/cуV[^t!J&S|!v.IZ| Eĺr%B]Y-rB)m627j ћf"dc@Qd{O9+FVRK'wWg1Re ] ^"f4QdˋNF.; ū>cڴ%ghƞVaNDcñ %\n|]ph>~7O(X}yq:'Nwc Ej(/CI|L?㸱QoB "Ւ1řYO4#D/X܅#(ka!>cdДt,zV3c1HmT|R:@6bv@?|T;12+:`Gęˇw9@_pi#05{ F 2;T)_-eP6'vϐف*e[h10:x&0Rl'"bgxɭ$>o]d)Ʒ$JQJO\t f`y 7.m8@jhK(1ӝ#Yf0^pZ]r jے,*TbrӮض"Bp}1`-Ri7Ӫ T/y:;% #r58nZ8E󾔍EjhENj`IS+pl|&K~cuL~0!';KOxc6t6iW{ojxh|(N* X3_GB]GDhKDg"I=&̇稭WN[4 10i8%U.&-N/tE-GsF p0uEYcRPGM*eR ISa?Γ3N1~A[a49s<),!^!҂?N!pWgt^A]̗> /ExtGState << /GS2 1939 0 R /GS3 1938 0 R >> /Font << /TT3 1926 0 R /TT4 205 0 R /TT5 206 0 R /C2_1 203 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 85 0 R /Annots [ 83 0 R 84 0 R ] /Thumb 1835 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 7 >> endobj 83 0 obj << /Dest [ 96 0 R /XYZ 170 714 null ] /Type /Annot /Subtype /Link /Rect [ 302 335 317 347 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /H /O >> endobj 84 0 obj << /Dest [ 96 0 R /XYZ 170 714 null ] /Type /Annot /Subtype /Link /Rect [ 318 335 436 347 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /H /O >> endobj 85 0 obj << /Filter /FlateDecode /Length 86 0 R >> stream ҦΏ) fo:| 6IST=駝m9?2f.n[Vhw|t9Do0|>zo$ ќ|3<#izyȔ ] O{*W_@ң\c\a?VN׃򸑤/pnjQUnj*QApɥ+4G9Me9 _n!;[ "%*^go@9JU8㐄]7?($K0$L )^D48\̄~TiXZ9@It|6: $81Զ]-yX.n=b6^|H9߷{2P]vB:tt 7ks+nR&V>j1u Z_TB~y.Pi2a@-Soa;KBca[`@'":Oq%_*4\sAN8Tpy:P1fwQğfhA(∖ҁV}pG5+䈆zRxĊ}xci VQ.lV\WQEb3<HEcN_ŕO6c6i1XHJ(YL^x)^=oދ 2|^$A)d8_Btj˓_?^ XJ_V1Ijjpb͏Jj4!/n2Xo&?צ}*CՕH:e(%Hbz4ytq8|gnNjL@eԾQZ0Ɉό"ipa`8 3ÈPZ2(e'\u'KU'|3C8q h*K޹G~ 3Is_#.IAT!N{\ 20$ jan/cL?s:\bO}X7]6gg:]n:C*݋sSu\h5kK"qQ*OE$އ jt=aPVλ(0K =QBOLv]N5ÎB0н2![&# _+mmdEw3],_Eڭ#DK- ɱT}ńhd풨oyvaB7~$fUw]';],b~ca81pzx'?%ڳ*{-mгݧ ޟWF5Ml? o&j `sh6pHQ2r:&.O&q)qE_J8Don̮ ,v>7Mg^B[f0ن=ܘu)Ξ>;xnEی Gxh7Yڟ$hd/e U^-d#Y<ˇZ# RZ{[.wFlK2 aȊ9+?ٶJ,dƿAUʟ# L>@DF6NEwxzizN0ɴԗeHW׹,k]ꋫ =;С~y{z@a Kpnκ1QCf/i!$@f/"0~33nV4PTJ Ae#Pm@Yެ1GA7@"`fj·"[C]8j~ZbTV5l'ޮJUUՑ$[|3.=;'oF,I0ĉ.tfJ^Sp[LhN,vK+_c10M )6&jG';.}컟[O^(,I*'q3z0goæ?~#L [VԛaQ{;mD0@ëoP1WaEO $[j'؆"q7(DpP Ti[Dm-+MQ0@ ڲ-sC=dQڏ30pg՞OzlQvI]O]wAwyW7q!u`5J岯ά ߆mB}x&EOe>|"9DXE61*fK\pm=]SZt 8|?amckok+sdafl<8e6&8Bl@TAFc/iթzZfz=fT!"HV)C*\3Jb%Zee?kϮn1/sqfF!q鰥vf]2 endstream endobj 86 0 obj 2841 endobj 87 0 obj << /Type /Page /Parent 1914 0 R /Resources << /ColorSpace << /CS2 1927 0 R /CS3 1925 0 R >> /ExtGState << /GS2 1939 0 R /GS3 1938 0 R >> /Font << /TT3 1926 0 R /TT4 206 0 R /TT5 205 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 88 0 R /Thumb 1837 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 8 >> endobj 88 0 obj << /Filter /FlateDecode /Length 89 0 R >> stream ?>-{q&=ĝ? #Ch {;uGPc佷ЄUS8l.s}ӗhvO(<''9Sl[NTT\U:^lWTes:J֔%S k`uH.#b`9@_xCW%9{T%Xpx;e͜NUqֻ!?F+vaKQq,>F3Iq.2TXfث/^b ){v%>|~=Cdc$بM6уgdgy?b*gQU] >@S.lc;h9- 5Pگ j|␶67 cqF^?nô%s_:<^[ڲ?pxZj<sL%6է_JK[\+T5hqrsx_b>ǿf۟`GB>~=GNlrp4X죿 p0B&b,pHQ~Ѯ!u78TB9pn ,2?׆ SD9.߼"0/bP]=*wUl饝/&0j +LϿ c-=q A%e]/E7̺,fR~C^ <0+y ϓ))>L<R-9f3R]S`T 1=I3 /<]KFƂ>/@D6۷<YS~\8}FFs>_?gGo֎ʟ:yvc 뼯. r@]#utP8=M~8ejU'C,ąUtA j_ƭ / 5C7ZdMbk'[elp, )T SA qi|HjI V J<³hPQePyṢ̌'Cc1e 1( d p چ+r Lw␤yN7|&ʹ"+*|^odt4g{z0pY6kxm \pJR e)orܓ M1ZQs-xoKɀkx3ޢC 糢NT{|ѱ$ rWu4Zy xVfmփ'{  ,C鐚bn6)&z lvв^ 8X+;7V9*QU6pf:h>Id$E!x6D/ r>_{~O{7q@, S.wAVmiK+JUS=v5t PǤ>Te`nu+X` y?SohQt _ *ڭ>2c BuN䨷5`~h[π6KBO_p{lh$+yqv7}_δL0&J\H)bSӭ ~mxN4Ym:|%*y~y㷇/9}Zz'dLPk6{§e&}{HwH@TVp ֱqD?[&ݫ]# ۟_I1lẄb{6&ʒrﶾd:fR-#%CX^Ȭ8brJ@gVPr}h"{Y"QtZgi>[1Ŋ#;oZ#Yl*^\0Jty@cӁp;@Tґ֠ nOt{/ſ:3΀SِD[,}FmH &Q[Ӭp2`)мxz/_sk4/QшpEob0ް9R5KkbXuתcr@C£2Q;E–%`+=u;v\Ox#iI~2*:5۟ IWıyune6o ~tA!=6yHZy'4B2#)|h2A4D΁iX{[r_9}|~ǩދ1|DmE6hlYsa%rIBg\t1t3O3$5#H#-=yɴDa|6dPc$la0|2NZE2[ OÅ_ endstream endobj 89 0 obj 3095 endobj 90 0 obj << /Type /Page /Parent 1914 0 R /Resources << /ColorSpace << /CS2 1927 0 R /CS3 1925 0 R >> /ExtGState << /GS2 1939 0 R /GS3 1938 0 R >> /Font << /TT2 1926 0 R /TT3 206 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 91 0 R /Thumb 1839 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 9 >> endobj 91 0 obj << /Filter /FlateDecode /Length 92 0 R >> stream v Z{KwQwH4߽l!(V_&Q.))n/ ,ƚ:Zv8owUsK{wI$曝ɛS Q v/ۨ beCwًqhr`̀ Ž[! oX6 hW&RVP;\cT$\Ԯ"-=鸂K.먗QnOH&J_Z̀]n!F_Q?R̨1U) 6~ɢ" PY+ xgܗY~偖50_P,!l[҉>ꃟJ_tʢ0m%( #;|#Wt&SCx@HcK߰*A9ZSsV*K5;k$ZRG*# _SLE;F}qO{랱8u 1r>s+-w$'J($mQ I+)*g9>2|ٴM gFqmXjQ)!C%'f4` R6ݡx'o;! "^)SlL"H^?Hɍ;'͍ ޼#,*r*:+8th !Qr_*ώdM1!?8l%B헂[ PZv6+LޫliLKU1hy4 /BiFUJsFGY֪ 7^t>wi)an>Q-ݩO3-*yd/u/vT=8[07X,j(u̐+ʀ p\*F֤pl7*kl'w^Cw+9yFΤ7zf/r4Ed'[)L#kJdaJ[1Zahhu2=ҩI-bQ[*ެp9j . l͸X (xN}\ߌo4P/O͗THAF!}E'1|F}W ];*gr|8iJ,~9_~;֓/QB\hzjw$9@4 4$tA{ U3≒Uk({ًyn}M M:,_DdtCӐEc#pQ92ITWB= 1{gjXؙh;9\U}ϊvfxD;8gT1/&VZƯ-7} dt~u^ 1]Y65Iߞ_Eb>ʑ`K"pzسn!ϽDI{''jO3%rC0PdeEd=ญeCz5EQ*˞s27n:gyĴ%~3nJ$rA5g7B%7mPAPqgd7n'$fȕ;|]7yKW=\rڋHΩ#ђ Lv:0BmQ;, i[c%5,[A畴/s8"dYVp= DcGȺ,[!bL>ɜD>wT+l vԤo !ǪΖ_d>e^w*iٮ-/~<.bUJ+9] ِhj٨X<,o]?l.粉p{>,g|ébkp!L (QQhۂs)^3˱ZFc(EkuJ"ԃ0}9D*O]'+K,GbMX*S % OV{'Ѡ+7io1S; 2.ކ$HEMzM>VC!)]9B> {J0_J+ӊ6Gm: &7[l1y']v;Q Ml_@s6ꗁqanu*g^̗G)`U$)msұv˻hF{fYĨwc fWνQ/CC| V=t^%U]P&_A6&U"mIs.E?i0*+T{m ЄV穼™<7o\{]Onڎ%E?JS ADvho Mº6%`hKLߕֆs"4cT ,˙iĚb' endstream endobj 92 0 obj 4076 endobj 93 0 obj << /Type /Page /Parent 1914 0 R /Resources << /ColorSpace << /CS2 1927 0 R /CS3 1925 0 R >> /ExtGState << /GS2 1939 0 R /GS3 1938 0 R >> /Font << /TT3 1926 0 R /TT4 206 0 R /TT5 205 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 94 0 R /Thumb 1841 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 10 >> endobj 94 0 obj << /Filter /FlateDecode /Length 95 0 R >> stream p,+yLjCc@ҡaZ(xyB&OMjt fuTG>VKfǀ\eu?3&QaϣLlHRtcOSQoءKEO^ YQH墨'$$GK1^=݅&Zao\%L$+y8T; nziԗUDY&ٟ>p) yÁqw7(zHxoƬXubbѠټi!@<;5d]OX ۴]°=,C5 A^oF"kT-|њ(UT8@ <~ Y;%5輶~=;*vT0v.ky&B#4A@foIjYtJHJwYhIn4|Z_[LLYk>[M[geOdoDCH&|n_DI|JS3SgHM^lܗz.x]*!ڕmPø|iM>D:Q%!3#47(\#;mPc-suOe17O&ɗd74.j,nmFx8EN(f7.54& ~gdkN%Fh1IoMB\*kr&՛R1j1~^#UEK:V%^GbdhQۯhOobu̷ cj[RF!\_5_ih/R?Jὢt?e#MZQ^T{֊MUDd)45t]2F,+(_ž'}hڑ,~~0UTPOiD` Ii:J@ L->tSx>o18gptL։n-x M>lJ %›h)Tm)O8!y4"%jR&@9fF9|4t5h8q#npco_Q) Ϧ\B/V-ÚuY紃E`I|v6NXǙtO^U XxW+c$a Dto͕+o6a{@`/%(UKD,Fʗ^3|]/ou+)Dٸd?md=[[kBMn c@BY6,N$SzO%B%q(&yYbBt^`5K_J} "W5eŌPMh6|%R(] >$EH8R~}IH(g; x3L@5d#w-ŕ=2Yn|9,Epz =DYs1:Ϣu1xc6gX/RVf+,8'A Lkbe#r/hZI$#C$) R΢G*9r )PMm{=b$i5u#WA%&Ysy,$s[vP%d1a= C?Ҭ_qnդ %dW'8I+f3>ތ(Aʤc1;K=٭bЕac`>so0[_G v,[8:øD/ z#&Ғ1}sTÃbEOw]GyJz B;5Ҕ^v+aFW \QǴJ[ዷyړN6 ʎg$]r3$|>usk!(#. d`liGfqMT+nBÆ*(s|ҟ ;i GtX'u4peJqZ7;d_c{nãCg~ޥm@[ꐱ 1F#_"JRi~]23oU%|dmCs" Ʌ9 KUݡ9 ]8d(c{}ә鷓d1-52Zm]CW@!4%hw[T.KOu*AC(. ^zmuAF\ !nV%?jq7b{- _apSWD08჉\KdP$Z]IB 4 |_^]? #v})jRN .>0)* :n8y%ٕzH/I:CYt:q?< Aa0c]h{h86nŘ'QRyy2.sVm <'׹v6Pq"щ'Q'r_x-4sA}]f,նkv :#;lza k^K])=y908س{#&=iܫ:j8Μ20| ]gB<(=W̩h~J!M:x7Wd`q\ zv/.#!`WuƪɠfhP~ ЁzOy7Kf{? /L>Y?`]1Rn$I=yfPmpP!WTIʀ_sR7-di% ߉.r;."&@Ia|-.\',=k? Oi]{8{g'ZKܳKzǣC+ͺHV} >:\NE Cy  T5 QL{r|pR`0GՀI.Q34j$F9@|W!uꪔ 0#A_>dGYb-F> /ExtGState << /GS2 1939 0 R /GS3 1938 0 R >> /Font << /TT3 1926 0 R /TT4 206 0 R /TT5 205 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 97 0 R /Thumb 1843 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 11 >> endobj 97 0 obj << /Filter /FlateDecode /Length 98 0 R >> stream ~d 8?DFF>f0W&TdC{o2/+ zj,%*Y;hib<cs[iQn41 G.;j8)\Fgu:ϭͱQi~:ڹiX;)(d M{Ȩo5Ln&W/Sp?Ue({%ge?ɱ͆€)oB 'M~ aREh#`s 9%W><}Y棖5:V[K]֭䡨z}zܜ,޿BXEf4XmEh⅚Acbl xZ#7dlp41x*W0i;sQF-|4B]L{71IB~7/\;ox2%L) ZipvV҈n+ B҃V򂘏(on.sHFg#!PR&)'{`qF]S_9>t`{Oat,8gv:uq 5LM%lct+CuaOv#̥"-onha˙`=i{_0^1dSL\EI!f) FҭF JJ,K-=spC1`{GZ׻)zrщ bI3R&T 4; +M\uxe^%S!h_li{ òlpU}6^ri抣w;~Bx/ių<. ">~S_#Pm^G)1MhĎӎq#9;L=h[ c?6SY`BKB²qJZ)m':  <${{3 4M&=ڨ'5=ݨJSˇ"S$ zX^wt2d *]ϥ^'E=4f1鐱y19hgLpj^ ߭v{=9b8 ^4bl)Sr[[ 6<7Yĝ8j8N$z8{rBk\JRlȨ}_n\D颷 :{tA'YKgDXJdH Al5׭yi ΁b23PtN¸v%^VS"~)Ft=Cc½F';:M*uNJqw  2R7F"VP'I~5]DodȨ=_qo9ʾ}(ڗ 3 ^F)ܰG,&mv\R?hvrxdZxMpdAa]yY<Gu;?ԡ~9ŐءY_YϔhZI9S-@i'.²d4Px*dv8-ںyJ l;M*B8רDTW2";&%2\c0ЪI@`3vlC2*  THI-CǀHT2PC8r }x+EO@8]e8,:0Z`YL%;A;φ[,!mL 1qqltPⵇ0?e46-n\ _Ӱ)+i7bh\0&yRG01Ӕk]@c;9r6ŷ 4{MJ@щw O Aֲ l숩yкL{<+3&+vL+MDE[k.f5^7^矧p uõfz}6£p\NQ<زkB_FwHiQ y~<ۗ(R^r] 4XERISSHL] rTȪ T 'kV>  ^I}8IvQIfamCЄ5_zL&fcZ_:JePGq-`Gm6IT%3DO{(JY(,g ^G1z,VdN# k㤹6d"z@:u"%-λV`+Q.f;NĕS~[$0ARS,.H\^t@[x77eKst:6ĕCJnS<h߲Б:RAzٷxm,v8`$E1)!X".83Fx.-0]7X}3= f۹ w#V1^%wyOeMU!~"׭b`b=_ؒKs_MS{7Eʍ*ªSp7 2gmY XXTR4{Q%l<|lO!0};,P`,isb) rDy48hz_|hqT6"t*@`hե8U89qIǹKHM (z}I%, oP6EP"G0]f&ʔm-9n ,1,%(9ǑVN,TW%vUشAL)zXY=!lkdE~֧h=ɰMVװ74'yD,6x+s:4;ep xEB* &ʹ q;B7NDZ+'3E!:aIkbɊ >Y͕9fȠ[Ì{ (3j9w2Ip?81P.peLeQIגUӦ,/HFDO.aWg?nZ8q/~4[D79q1}kIEAFAp{INoN? 7+ofr6إFLiC YZ}Lb/NKzD%BȎ&eLҖў.ՐלIH$Ok5s͍Ե8&*!N©G@ gus13"lQ[eL5 ~{FNz"~]YCh3IyE |*T<+xYD @ -QWcLN;l?wZ==hl`x? rd^YU`Fp{P s%v u)2kpecWh#bNw.ұLS=#%m[̫\O0f_<~'zd&"|)SekS;c%';-p(X'EѼ` R F']02^$p'%۽ QŏóӼ6"bv͘t*E/sΒG7 U_p>0G#3 K*hK hk({;^˻6S:蜔":l*z `SG\Z5kZz;4_?z 3Q)*v &`M`hm\( cwRʫ]洖5PTC 2Pb.xG QRLB^lhHxabiWNzK"gXV͉#y0 V;Yr{%8P41ւ}R?oA" H[^a*1H[ODGKx- Lć09WtZ=S']x? ~oWkRذ93`HxeJ"Vq;KKv(lQTK Y.Aߋd~2d!UzE!Y4V3z{Il;> /ExtGState << /GS2 1939 0 R /GS3 1938 0 R >> /Font << /TT3 1926 0 R /TT4 205 0 R /TT5 206 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 100 0 R /Thumb 1845 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 12 >> endobj 100 0 obj << /Filter /FlateDecode /Length 101 0 R >> stream E3QFj =q[g8ACw_k<;a G`~YjCG;0wkh" \p v߶25OhZۇ^8 u' F | q" [_rITue\y_mw.noEܫ2>vϾSyg[wJ^ TگC).pu;xS29_$#?[B;pC9 w|Qh UOak`̦շW .R 8|8V]a2n LB^ѬJ98}Ahh8dȬLRi!8=qw *&4Ogl&i9+M}vdG_BĜ;(վ!")}ɔ鍇|9O~.&űF FHwp bτ%Y@>`PooOCd ]=\u͟d&6Fi7滺UJtn_*8 1.<gi Su^}7ر!E3nK˚טy}VmX~2*$Ճu{yc]g?[ /!q$ȿ }b/({nPRj@ N OAߦ1m@FRpl1n!0g.ftF;R(s~DnDC=K,šc˜z5!'N3UHEf^ jcHJ膿y5-ь+VzAwg:*NBQZqzS=G,+='vITMK-8V“0mc,(C$6(yn;0 /#ʦX/D#Rurp;'xhЙ:>A+\W/r~]}vPsv,]J+φD\^2)%N֡rȽ&"k@e U"% S+w/v>6i=[rЎr`1ٯ* ՚f5N/KVT#i_Sfz07T-0_ z4j1":6;,tK2I:ZÀJ͸骩+,zzL$ w!8G;RC C@i~H Aȓ0Xˈwٴr^"(ZD 03joS3+<%ܴuŘ0@#KOۈ?+5[^xQSsTPB1>y@a?j?@>ƙ_RGW! [l: FmT2EG!E<|6Z$(ErBd$txv ÕCs8,0/8 2E"\WQW21tő$3%y)!cy*((=x _ Ci#4B%ԉ@]nUqXV0֍E(xZA|"㗥k853l>tUpVOO&S``b7dy=yq-ŕ9>*t{eF8kH}Ynŵ&פ_Х'kb8^DW'2~eiGr2U]3-+n4"-MzჁ&bOtb܊g*~ ua @w%fC߂))=kok+!\NˏR8phsJ9*+v|۴絆9 [Qǃ4L&>M>!nѹ.>&]zؽrf &Cű텶JM/w{2|Xb* QhjERw€)f+WEJłup9miO ް=*ꖭ^<&R\.%5gwD'i/ a cg#ˌaYۥ фSiU7rH2_Af =t_xdY%0nwm~;x\5 ̴$VRKl"+-J-5yX^rF d&F qxS0aTMа@.SID}-HMLgJfL68jAJu5i]1YR^x=:Vm9RWD i[q4u-XVnł܌LҬkEݟ@wEn3y©oJU099g/X*|U<{ranzX.'쯤_yiE,0%gaOOoY_9 %:LMʏW\}dcxcS_@|\ӳu#TRjB$4z8m驓hLfMk([lPND`ã "COA Nؖ |Ԛرt%N>-]S"_!sGjW@a3JNVQ ~]S=zBeWGX9 LT¿2PPcގos*` 9GT;͇lJa+u? o7Gqi^EXcM]g%nw`Y0pa-AhU$ɪec2 Ǽ"!ӗ7=pP?}睬9_b(/:N9-e.^L"IiE{[Ե;\}-&cNTL\ɛw]=C`ކǴtƦ;z% 5 j=½}Rb+jWxo,UjĒ|%͂sP]\IՖJ.#-hYލ?%myI!1|r3ݫgޢ ^ftŕ Z®!;lmz~LAtisJz1Z7=Wnlg?>XT;YD.)W绩;GoEC{\j#3̡)vƙ$qmӈ1GU=38RzVoVB[*f)mG:45?6,8 w珂x >U|n$:݇;H>!3jE6ݓnokǠehveDf u"1:#OIt{Ц7L%A(D[-D1A4BGzaIe2Snjm w&i}օ ƀ)mV1򷡞s-ϻ$&=x8Aeb#ns7aOTȟ侎2WGA#:kYt8ʴR$\o6zY~v?IFJp!*l-#UG#BHȂ &bqK~x("ϡkq',V8\3cjZYD' ^gX[5T<:_Cv>g<}ŇUV-Bl#C2 ~8BY2K#|,JfF5^Б8` -QutkkzM3>o/W-r Fa6;o{eԛ84@-ߡFEN(ƸPQ &˲dxΩ@meśtWy@F+f,&PWE`ۈ}$ e!>;PF&,?S@ү#yށ^Қ>d]^2+cӶ](ˡ3eL;+ s寃Y&LpTT.N$`hyȹu:5ZqԖw )hDtoSJMcNA$ =L54,FT2oÔҕmr^#2SѳgውH"2o1{'MumzK,!W)bUӣ2)e6矖3O<է6}Ks3kK~LXbwFy4kvTvdNt)|'lD<␍SJ-p'7uTLg7Zh!hM"EFwq{ å΂; >?qJȑ"tmx'~fLC RKx{Bnj)wb=fǩD؇4_OFhYk$vO]:n3t̄hi֏FIOI 18aZrjb~QjYO{ş~m^wQ*/`j fЀ$;"BPXbI(+6TN?G@'a P竖D+ 6l}"KPl6%+ƛ٫>#q\/Xv hM]pgGK3 2W3s6L (jfMH̃ ˯T?W7PbuEnzҵ4Ƃ4 ,jKY^1۟܋wm)#q[f,Uy.BJkdDuL`S5C,"]Ό+@?l%(){q԰G9ȑbgwp6/x) {]PBgIo0C[Ъ+A>-M^4GKYNmN ^YDZﯠ_'9,@zoq@g6!1ubu.'1-N0 кDb+/>hPFmK%cou3-7A'w<D~^*Rb^:$Kl'OGԂCwu8KeO)"AGOAqN˹JCt&nU\ _RYfJ~f)|X/g-jwʞ̖PJ[鴲 rZ;]uwM0 R-pBT}^9HCE(IRgr;W$Y)U݄.ɒ/%nWS8)(mnxgQGؖ[hl}xWdj ۡYҵc@(8>ˡzZW0k__ '[+FE;?'"@0ڞղy߼SNUPG<᠓ zY C K{]B8wSFֆ uy#Vhw]ɗ$O*ҥVoiMce]di%ScDM0R;aB&.v&v~ "z; DՐ geE=xTcNc͢`ǁ 8jk/@V(J :+9i> /ExtGState << /GS2 1939 0 R /GS3 1938 0 R >> /Font << /TT3 1926 0 R /TT4 205 0 R /TT5 206 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 103 0 R /Thumb 1847 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 13 >> endobj 103 0 obj << /Filter /FlateDecode /Length 104 0 R >> stream LfIa=rDᇐG=aw!opL_9nWYBs?t&l&:4;ȈŵΈmPݡoڂ^PkKӄy ^(yHngdVMx O?F6^JFe\>jAy/*b/σ2LSհѶs&s Vy(ZaX9Ξi6uh0~*TХ ڽ n+? '?q0Ju୛(1eS5M [9 _.%O, K?yL+hQq)uHX_6g[#@6 G)C}o"*: c7ۏ5ә<&uth.|rį>|0t'{xM͎$ C$Ow{ c+ T!jtud܎6ݜc;O8|P_л0E+gRzޱxT]I]+q;}(d ܥ,7VBPEA۪T4Lt5:p #.U\ӔubM?|k?J0xJ12Ow81X^AW҃N?iG#=!eTmځAhc"Tt,`qN JG z: tExhܩ6^PDDh 5|Q\H~-D2*j $َeI+sJYiJ.r֍g|u eooV̱L>!KLΛm3=Ƹ弬ΟZRUT {tBpU_ӫ֫F c&LAcbFsQ:+R-h "u%0Rl<Ǖ„]*iuGDj@7 *B8-X Bq]r׉TNg*~o_E ʺi?iE= Vګǜ<{}>OӑV tWsѥmrurrC2#i.Dk^F9nѠdLI36'wlz"UW;\X 8CMVE95rsG[#v!IWx ϋF"D8o/w|G *QDE}||f[vOK@a QζWgxfհ&?p0^ h!SWTy?4o;S3+h׹C ݹAPwƺΣ"i$NM[yVÿ9O<ЏG6a#O+Q G?O!~p'Q cΤ͉ok/NFݘ-tJ) סHA (W_:g[G.* qd(="`L0c5D+_Q|bu{tN{V +k!~2%z͢Wip7 WbM2wmN~"N a@]:cpEd2xW/1T ղehF< gQO_ |=]۠71p p^r؋Km ("ꑩrYՐn{=Ĭ/I27c%$RrڿgMo[+|7NR~2vQI0ۧr7[vcҽɪz)p-XHS=:E}@ 7ѭ9s!Y8y6z{ NLndEGḊ[8mD럛 ߓ_UqZH,3QIKQ3N{NEZ]NjMH#AV3[_/0BO%x"mi_OoI[# t2^^`K,ED?GJq[3;5ip#Q &i/q^MW3/y9HTrz^{߸p3C3W fRxf|bl=Xb|LmcU$$#~!paY98V*},UG@b~Fa= z<= )Oᣫ뢈ValJ2@;nUIڙM!m#_o Mm炑2[4/aNFZhzhgRK_|CT?ݸjni›z8 P<,/ +Ԟh$,XˡS'\kz*ĺ<-*& i[L֚47ef)~h3`0Az۟2>b ՠaq]r f8`f[,O~s" ָrgw "H}3#ke$Sy ^FQ۔`krصb]p6V8 ޠ 0z55z.o3.|t] =V\b<]dazLY_;O0ku#|X! {Ё3\U:b1.(ȉPuVݒ[#ʻ!M|PAKER|O@!P~Dfɜ|NFNP-paSY3㔨ed@Z`l˿T0J;iD-lzS@u&Lչ).RA\5WPg=äHt&Terx}JHysH'Ka+~oH"fwNJY d:uJ(>cJ/%("5^|~VOӍNR8DrR-VQwy+da#:߻+U)h㾔CEN[?OyT/b^.k 8_SBvJk9jj[;DvG iŒq;}]E,-1.IL5Bّ\kIlI)%䍓L"0uWQnkf"E ^ a.K`V+)߇#v"gE@{OB̂%ؔ MJ`є/ Z$+m+P(K*ΊҞ)Giݻu'3QS}]rhpTJSaD }ɲNX?yrR+EaZ_wU. ̨)6;e׳?}&AA4P!@mAUwӿڱ. OJjV &]P2 m$btyKEÏkwk^_bpGՐ&1٦=_UŸTm*w/ O%, mCYOh8=X_7vef=GDc,G/aFC|U8չ ީ÷u8tswlAK<|fm1*'J({6>`Q -sy_5@F%6y1W}d|&Q( 2H:ڪh > ~*.%YɼPV܀+)m2A\+!w!pe08ˆl\4G1U\qܢHc_6 K:&1Hbzs@c8+& 1F#΁-ۯs!J3;G,$/u۽#KxPO`eWʇDc.j- @TZc4=|%psMa(S`sv_rYׁM [h(]25ۺ맺bB^_GVY6 칞.qg_xҬ(|Pme m\v/;2 1\R!40@ðb6B \.K?(KMm&רD"SFǨ꺼]Moǹ{`!ٔ8Yotk4 .fdNU[5bE֖5h |nh̄y =Abڈ (FT(ri%sO6*};(wOUn\d{/Ȇ9r? `$Lqic2%J^2Z;iI eEz81@6%d(ൕʖJJZ084# *Z<2spO՛FM]+S w@zit#cƻ#E#\aR0KTVMKpy$bWfCP(F0s۪ѣ !Gˈӧ-Y3~|m5rDIscPb?M-Y;[IuXzn|b/;8@ :1Y* ҟJ'̐b)uHP#C)eό\<86:j*.}4/Ly$&)Mc-R:G"f3-y^]]zf~D\F/({iP?g"o@3z6rgui!jyИΐ2h֗_~9K0K(Vd'UR߻g^x -.qT *W"W& $vGJPe^4^~A+2RTЅD3(J`dʯv3ԬqC~N?n;w0xtI`}#:4}[JADN#As_l쮆BJ8ӎ)H%6{5 ɫ.N&DdVۀ(JCJ~ ~ļ`AwM'%H5L*f~mՙ7"Bgy[s".u֫Rfϐ>9~CF]R`:fAa-ݯn CkP|w N5C!/bj0)n GWkSrQR}jk%5}&Z&$/=_b8!Ot=58,դ jfZaP´6[Phc.-tvJ:ԬlSJ7L߮]#i6fkk-޽7){1j4i\- 9:l+OphT# 0jVlo褐gڢ洇 q!wKhUCH Ozw G8Ѝ26%"L>A]UU`zi_e/Ôg^Tb{#NH{ZCYXKWGKE@#۷ Zڽ qZQwii<ٞ-_nڰ9x*PP,HD :Àkretg@\*p;BE i.Bnz!gdqqve9a~`(vI:GQ=+@Cyu}N^wj,eGo,G}.ɽ(g<еO#en3k#ɽ$#6T,-F>hjl2}3>r-8č!>-O">_h#Z=>ͻjҥLd`(01$SQ6 ;*~&[rNA)M&ƴ)YjuCϰZL W4Ϧ <*ZÆ~BoMS39\y¯e´+BiW*me2KK{)ВUaV&ԫe&nc%f>bпNP lV yAqk{;=U#!)ԞgB9shSJ/EϜn ݘhPZk"g6>;x\STJ'hFꠖ~ËnA-m+a.fn=4Ssh̲0]]\+2}p 0)xpR'ag^DQ!xK KL6w8)#dvNAcז[zRnzz4f:"~&X+G7Y(6U}jCwX.Gfp F^ջˍz}NΖx oh  $4xloxsMwcPs4[*l,U쯵XP{i֔{JUB YVuq!keBʪ{rE 痏x#7. endstream endobj 104 0 obj 8528 endobj 105 0 obj << /Type /Page /Parent 1916 0 R /Resources << /ColorSpace << /CS2 1927 0 R /CS3 1925 0 R >> /ExtGState << /GS2 1939 0 R /GS3 1938 0 R >> /Font << /TT3 1926 0 R /TT4 205 0 R /TT5 206 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 106 0 R /Thumb 1849 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 14 >> endobj 106 0 obj << /Filter /FlateDecode /Length 107 0 R >> stream 2rf_\]䀑^p|JZ ֘?ГtPGTi6}gDl@ݓl 1c:i #x$1RCGҞ>>Vz\ #6ZZS]E|ј9uD ~F"[BkF!d : q1 !=3 "@iѲCif$`s+)?E4f} <(9w`~ݢDBRQbi);}¯ĽxHђ+e\as04 A2/WX5j,Q vK,֩}}!ڇRB~6-+$y_]̺h>aחw `?\IY A|TZG*:1EUe5d{J|HF$.qdG#HDzK/ZA@t|w6;l J:[%iuD*tHuj  E3ܛ_5rq n_,}ehY_Q'7͠B / a~gaJN4XFS*5apO8}MtvQׄ+$=b }Έyz}5btLoÓDi0679pYSq@x\h5EpZ?BX1 #}MRC`y\AZzVND"2mW:%=d[fD`fk,h (LF0WL;^un1##ի\cPzFϔ%t[DnLT'wD*YPp40@=&C󉒙 \tZ)Tf07hJ+|z$ feq.0E"'R bSZォjM'&I+͗(/}"t c-gGcjGe]ݘoLBb?&E^4 ny7YIo}/S5vIN~LɶM nZWVt9A뒋Hdݧ\nS2//C[r3I8=n g<v1w2ۿfepG\Za;ۅ?l SkMq21\ޝT@y&?Z,.oUP,Ȧ#&OIR̓<*T&RN7;Ugj:2Pn8.>֯.P2<ŧu|eq\[>P+}'%rQry޷ZЊ>NbJrN)2Ey0;PgbYJa+"i/Evy 0 c4W1:G} w Ԍ lnax.78nbL ̥Wߤ1% ٧<KwuV}9D$Z$!1TbD2d?CBX]?' ]Sռx3nyzTTu_[ZAS/;ƾSj?vm~w=嘥XCAMZKi0rP_:45.zhb[o4^$B3M ``7>:i7]q^gjQKoǘ G%s+o" I/V2*w vaDmRk.^躭 2e)J8KͿ^ -Kv;9{.@6أHꓽ`*PRDbn?0 |Bzz 67 "H0˟[mؗF7ѯQ"3@iI6ΖZc҉`wȈQ)&O/kʲg*TQu᜼eEKYϩf;zՀeR.*W{yd aKUzB vhK Vb0}czUEh{}7v8SYCb9D%[cl\k;C(F(;43hSDWu$:mR D^]Գ Zy;*0Tl̴-/Z9iv7]yGM[wZ7Uz`Y^ ę{ ]g{Tu` cRݔ!4% LZ.eq͊| )"@);Ϣ䣯-`"ΐX1*:Yz)rǣȿT\3w_膮D 4\ ńۧ˟8,-ٛ=%$RBƕٗ!@\fMd;TO שhR|ds歫" +@;KVUEo.mSA_gk I_%"qWe/]wI-~e F{y^IJ,=3ݴSmjOdv<_;*o4AT@Ch*qHgl,б SE,F+ry: ?xXd5h~iL̆FM0hHs9oi]Tb{'k^hDZ]5~PO_\UP+4&m ʼn ^yײq|XfH{Os()M$U/Tn/=:h+*~hcpm`UB`>#OlLޠ7@zOyHj:[պ)tP:3щ?D|ےT"d T!x6b+vܨڬI]\D[u"Č-PE[Sq wV e50j; /j?Z푬$dA×  Fjn-(ʈ2ӯ9o^ g|51v#І?xq߸mL.9@~F2 _au=cnV2潨⦔30nf5K5IXR(< guoN +I>I[cc}m\NZ\o3Y!χO@Z>fʖ5K h/Ζ2,eʺ|Ԯ?v3TAJƖ/|bs7se'(&8dn}.e:2b` zρgIf[Υ>]IHv)xQ{Fd-(z+H4Z+&X@hYpLPb$tzZ \RPg[pN}؆,$IzO;ӝxWE8;|B_ _z*ZIs8jVEjSF}GhmXyGyNn3Y_jzXd# vߏp/N+ 6)cW'.C:VQ%_E]jXJǻJe em=o/Н?,=.n/$3MsZxոuZH9?6;Q*|q Ooxv[T;,Tw6ա%TFſ6Hv;[|EV.Qn85S/C}Cm) ,>XOE6v]z]:3Ɋ~qjH݄= [/cn%ˍr͏wF ny`uo4'jZ5od ]x˜24՚ۏ_B$v jf<PݠԜ}h k7y|798~x뉵|uȧ[tFw[ڙAj]z0H|Uێ\*J pI[ vhޟ-!+L ƫnFP2q#/,F AN ;6 MY߳`nגԱe @rD)| ]L|P|Y#HknD$m0OG[sb6(}[JD B$"ۻ3—F\WN#,pP,ükD,tPH3='ׁN2wjUI⦘V<0HI2% =.)S<ýBr،i 3,4T'`sxfG:|[%MPN Ud/'30*[CWKIMvȮl![=.-"VH* ɴW11X*`73 endstream endobj 107 0 obj 4568 endobj 108 0 obj << /Type /Page /Parent 1916 0 R /Resources << /ColorSpace << /CS2 1927 0 R /CS3 1925 0 R >> /ExtGState << /GS2 1939 0 R /GS3 1938 0 R >> /Font << /TT3 1926 0 R /TT4 206 0 R /TT5 205 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 109 0 R /Thumb 1851 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 15 >> endobj 109 0 obj << /Filter /FlateDecode /Length 110 0 R >> stream Žu1|M|Vq24H\Z.` Ѹ;1f,$w3@h$DG];_P5f})"Ϯ.EG"1R;_:n:wgwꈐr|'y/ wqV #"SUӓqo̕4' jdPLxJo_3B81P6]W>kV}̫r?TTϣCrm|n%tl=?#Nj^Ő]#\Zu{,<r|9s< wb jԊ&=׏wAhF˺y~*q DžU)D+f?s]gM8B[] ǚo[Ϭ0L'έӑo4HZ8e>吓VɣݒQ "u[Y4(PA*$IVVߚO e YaO8x4#oDR~PHvS` ٷI\ҪB % 9O"R6LZxn3Vn?fn(o;eR4ɡ;di DI\挍PJ= i_Ԗ-()oM$Tb-)݅*Y'ˊ`gBGݱAng̡[^Sʊ Wp6pKzE8A4_:v̭sR7KW9OFk ZeOfkCu̲`(FU$(ـEG~gCqQFAJkޜl6XQv:%jWE|;hHΣW@zS-\\b ]Iz0KS=ͯF8+t]?oɳl#Ğkyn nݭ b`t^i3$L@8|špAz|(`-<͞QQBkIn< 8g{YPh!ؙ}2^߫ 3 73b 6)|\ge "E+ 3KMA^xB}^O2JSxMꪉ0&`_7Fva!q=oz ~\AL#fvÈey'f˓a=ઐ>B@,Ԡ`8NtE Iߋq dF}jDd`P种-:v(u]Ա~0{I/I:m _>C/v2P+TzJ r̽*He pf!,b6yk&Ƌq WR\JQfj0_w縛e:>|S߃xu 7.d~ ӑxٻhZ9A2'E|bn|TB`%Xj"pq3%Q-ŸWS$X_a|,%ЙXhw͒Xxj3}leU5  Y%Rʀ':s2tqnZ |G{A#A=Z/gx!c4%Ti` A_o\Wp@p[=UugmYm1V9A('xPkSDN <0Hq8 FtNh@l.j"A#KE,#CSGhiCȐH춇*w*u&Xg嚄vfpdҎ_*t%#_͠ߓW$ hm%DՃp{Ŝ4KO21pq:#CowIp4/cEѪXrah,13>fD= |.9}ߕx߁m?#Rxs8H%&LʋE*WkGnęvoe}c3pdX D=Hjy`I&O0PN9 V~65T sٺxir)B Ec=1%65kͰ)ĒK,)`$9>*L[Whk5K-" u?X;mVHǰߜĩ`kEAT"zC$f%RʻqjQFm(^Xϯ# (RA5oza O`xOŶ0#S!#88d(#A"&6ԮS,M_>]`Z16uH &$~ifzOK])Bhn}~x36|cW9vk+(ݥq5㟊T;+۲4 'XLdIb\~ɵ7eHͰ+M?;_\g꒽>7Lo5w8vOk?5D PkX¼m/D3e @ ,v&DͲ>vjA |chS+(%+cwA0sA@"T}+BI\O^nX>}Ӗ4wf4ρEQUiܸu2ewڧR鳪V4ČE'/5FGzw7]rk`:Bڛ_(#F)~:b5ZqVi,x;g04D!RDc=#|G-ː %`Kkh TY%a&t 8.I4B.n@Geo\}T uiFL a&mf4$3dXڊO q~T&Md\ɷf eV-tjKn`cڻs],706;~2_g -[(R1C5J[] ז,Qd򬥕<D: v[g;آrT6d-R"v͎h{wё9L>C_!l‡`t}'490)C>+u &r7 k.,t*okU`(:FO-."?pMp`ZkLW2!w)d nja%ݘMĩgcvuD+\6LhS"ƑJ:^*j-V"yЇѹU66xէv(wP.vY-v8t؉D5WN g[9qB=ȉ&Mj͊r7و#tq䚨ײ 8Us Щ+sCqRFA.A endstream endobj 110 0 obj 3903 endobj 111 0 obj << /Type /Page /Parent 1916 0 R /Resources << /ColorSpace << /CS2 1927 0 R /CS3 1925 0 R >> /ExtGState << /GS2 1939 0 R /GS3 1938 0 R >> /Font << /TT3 1926 0 R /TT4 206 0 R /C2_1 203 0 R /TT5 205 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 113 0 R /Thumb 1853 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 16 /Annots 112 0 R >> endobj 112 0 obj [ 223 0 R 224 0 R 225 0 R 226 0 R ] endobj 113 0 obj << /Filter /FlateDecode /Length 114 0 R >> stream 4-~8@Xnݢj&bBJbn#Y NG`/]4]9MƻMcsV0h nl󰝍j3MMr)6fHqiۃ0G{=`!)`0HƑn^, G+̘>'N`=To1:"*7SBAD(0dS-1&h1˂W Nu?~tҎl4T/2qCRVͭސ+ZtF$KyE}:\wФ:Oz1"iQ%fv W ЫtSSD~u `Eۼ~  \ GL D=/E&-ZI~ϗ VMCR/? 6bh}x_ф|K-_*2AJ϶;dv5 \`!|_fHcJydh\FC|LK/ Bj[̥ 'Ԩђ p-hdR~~lI ?0 INZb( b̩ުq:ntɽa}cD|Hzfz"lXL."_AܖQI\-;{ 9HXU_Vף<`*f%O)1Kcy.'YGD^2/rgj(4o[GCGFQk[Ú <5#Yb }x,?gx a$97J"زBNߍaۖi-\ZdS,[G$c- 0G݁c~{+ $y4'6 S gId d?Hjoy &{@y37*t{g aP>!.݄2cbKᑥC?ςEdPAM9_&¿{1Wh#%]CZϞ Xk^]E^kmPVoEREsd;p3gcok=vu#}9IycBѥr-cyddggQmzwIK⭱)!Lao筯{06^DovSݰBh!XaN8~q|wHX;]7-~A}{8ΒsW5LAᑦ5.Wj8aS !" SVSOFo?3Ĉ!m~;z'l-r`j^[hyo)c#یr}x6/ӾATo"v`U` xRƲY֢/|)_tTuk::'1fL9ecvQ hh3̈!NʈNB7ac[^d!N _1熀v1E:,y#k1,?x{Cc(fȐ3̻':|u64 KKtz\9sd/)uTWC:v ޿еvKۍJ9zknd<گ nϓ/,y L]Nl/FcPWpA BX/OڻV.Wr Ǘ }\ޟĹ[ƼkeYa˚)4zD^'\Tkۯllś'N !(~O|zh1,}cޱ,sGs淕ljU <%[(;k_8ݜ`/i}΁:ÜÂVr6 ` C]_>:;9'9 }}ǽpLJK $ӜsM÷)]qRN՛2>-rP+bޛ7\E'+uy62"~v?_K,'տxYE V*V_o{+".3xqZAI g?ѥVERp*ݻЅEjlfa(&HF@FH:>[Vt+XXmz^_]0k]U8(Zr X@( qc޷&bj&xy^8U j#QC7xOk{ G$sqƙڽϙbU|keӃ3W 5P__M*{V֊[н[=I0I8D3\/9\ZU_uRײ~ItL~ErO%7y*Q2:ȢQ#5h 'd$ԃqw]wyL9ҧ Hߕ貙W ?GүQJfkg_ns^:Z܂(>ge~ o2`b[ ?mP@~h%VR/' 'r>wp aو, #/nΨ&tm }.ԇ^"Iݧ9߯%|IE0Ӛ7/YM\L?:|>.?X*3{Ú`ܛ d?^~,Ӻr 8I*sp涓eLdO6x֐fԲiM܄/uw'Hx^G.ʞ _˟_mzP Ǘӹ-/͟8S{ud_Dy`'S7-Oq0ϗCK/ j%#q>IX_:]net̵XVQ as.=ƁJOV[n75B!XZݖ>'Bk8v}]Vs!tܺf2G5ȸH!%ȫ6?KJ$&LoU# v>QePD-BA{oCmIYd/b3=h;w8WAi#<J&E6kv$(/nTe)(DkmSƯ:D { !jkˬ@9B܃j]5OuZ>\|5MCҼ,c@`BѲ- ʫI=h˦;JԘMbBpEz刽(e@r~syg Nѳ?QħqI)) ľ6#n:BB2gI6\8ew&Iʚ(k ucuvYsx0o"SYH Ջ\t6B9DUҘUF_f5 IS`nxw_G9{\Ӟ'&>U`S B9ݢ\~L/UIJJ޴Q! ^B"hH?l*4UH1/nƭn)ͺl&F|pr{Q::&xhn-KіW~@ont+rC͹tO,C2/8Y< #V,,rY RDnH!l.aC%~".SќH&HpC6xćD@s$5- ‚qQɚ؃TVݼ-Gl6{81PlWxO8+P@NFr7h³p/-_Rc [aʁ,}h=^M7z.^ S6 >(kRqFQ,"b(ERs-pvmmR'O("k RCm(燯B)Ӓ1Di: endstream endobj 114 0 obj 4342 endobj 115 0 obj << /S /URI /URI ([N6W> endobj 116 0 obj << /S /URI /URI (_v"Gy᪜S^\\Kۨ" XѶh\)|Ƹ=>ժ>) >> endobj 117 0 obj << /S /URI /URI ($2C}^Q^̚LТ{Xu\n t3R\(b UIQy) >> endobj 118 0 obj << /S /GoTo /D [ 178 0 R /XYZ 0 842 null ] >> endobj 119 0 obj << /Type /Page /Parent 1916 0 R /Resources << /ColorSpace << /CS2 1927 0 R /CS3 1925 0 R >> /ExtGState << /GS2 1939 0 R /GS3 1938 0 R >> /Font << /TT2 1926 0 R /TT3 206 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 120 0 R /Thumb 1855 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 21 >> endobj 120 0 obj << /Filter /FlateDecode /Length 121 0 R >> stream B Raץ^.$2o>){< _S6O4,,Ws2m\((k-ޑ;U3G HLB+Ey<~w.H3عXgӈSt?kCi{cd].b9J_YuUHRGwV9GǕPCJk(ЏUAGC6 q 'fWٱdrvph74 `~}}2?V`M^:0es#V%stNzg]͗=q$YÏ.ݧ8b:H krN')(pAsypkc( rHֽl%d:*-#f)&8r)Qw#q 971(AFPzZK?31؆/V}|1*brq}*~2Ե0NRm H5Rx0yi\5a_ +8[-x[C֏_x%I SPa$2DN̡*2Aؿ0*Me(P$GO>+_Uc%{ kMZ:ZUa!t6HtؘJ]QrR٠1[T;_Z'g(*ߵL ,շ7o3'lWezsi2 gl8'.EAQ04?Nr㤥T8]m@-hHރ#rLĵS~f^/ } ҋ M ~- 2HV>RteMXf*UC=m"w2TtJ'^.ޞB@8(S+'}/D=_\]N>OЃYhfՑ9 ԍ8m`^5ܠDT ^SScZD@[WmLnø/3K{-ƌ?R\%mL*8DĚ<-jbR`#vji|SXx˾ϫ>&Z\n0yAw5p&XTOlLVO]'+VtBTQ0 LCB{LK)3 -\xX*!Vz i ֊z#ߝc<{^tK#Xح~2HAK+F@A?v ^A[紑H7@L[ZmgŐe-TC2<+y2H\*s)"es?,qg`dVAB0.+ Ez}+y]N˪UQPy-#l$uӾcjRHnN*G" # e|!S*B"ޜC吵( !дPzڒ/yXϕs,Nr n"~Ey 20|N%cp vQ>rf+Vы'`_ռޡA (gqm) kM,]K8z?r \&nD7b-M8FK5OHARLcWDcFMfiRye\Py}:^dN[udh sx$tXҶl0,pEȽhei)WSJu$eE(}=-|#uj1>ZM[(ziHq}nZf|4lf;/j5K9W*۽m?&XXϿX>1ƥ;*P܆gMn_>8㗺\s5ټfoNiom7i#ΚgLm endstream endobj 121 0 obj 2117 endobj 122 0 obj << /Type /Page /Parent 1916 0 R /Resources << /ColorSpace << /CS2 1927 0 R /CS3 1925 0 R >> /ExtGState << /GS2 1939 0 R /GS3 1938 0 R >> /Font << /TT2 1926 0 R /TT3 206 0 R /C2_1 207 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 123 0 R /Thumb 1857 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 22 >> endobj 123 0 obj << /Filter /FlateDecode /Length 124 0 R >> stream 5'"$w,}>73QUxS$rJ0imI ¶c_@C z y~: 4ߡ5+`q?Cޓښo:2ဇ*51UĊ|vl,7<r=8C[5=g?9| X^="Gp&Wt'f1+CWם.ƣHF%k\6~<4u@*zsv3\ .eGR ] >rlKEK º pOHO(6=BySjgK\["r%֠^)ٞ6]y/NQPS|#~EIu 03~hhmn̟@2!Xɜfrz(PVnj0Pޅ6uPZ8888p7Vݵ(Bg {,-O ? QNrK\]3xo$r3W*& \w6cYcKd9KI#wuxWiLffu}44[cTazDnyׇZ.habKբzUSjez&g˜1QshbR 7R|[%0_ܩV:-q^ÏGr4F4 x}QF*q_,4@039UuJ\ޮWvjsnN7~k5ˎEa9 iL:ߣ'T%#asR0%j p1(qa !׊]T; Ybmq,6ڰ @0-X_5;)&$l;<Ӷ.[kY0譈"6jr֝ S @Hʉ^L!ӎwr?f޳1d6wdEY0T2ƀybF.cy=R224X*[j&mQ(%-2zhndh^g'(L0EN" {)yLbrl yi( ^=zяб"c]:7LE#7odٷQJyH94"Ñm){Z2w{.Ɗ5N U%B!z4׷ht?Tւ ,GK]/|\Jw ٫aK_֔g[(S7ƍˉLc0+p)SnqxLdv*=XQI]>FIUGԨ{E:fj!I\d30~CȬCZ-A{dķ蹝)ǚL5]pUW.-Tfs~v^/bmK2/I]YǛ*O,/1H] t>!Y*pIˡX&M5S9qqg/o<R/$3@ WjAkWODM>cz1u#䲛Ra16uVpX子nTtY[W _)lv$uY jˡ , ,"ɡMAư)=GmW`5UweOR-XS^ghX,Kǵi|\$mޢ[jzbi7ȍ#disj!UUZř9'gM/ʗY\IlDa1 .7>GPW>_ IUpwLqdd?F, k؅ %ͅӴ+aea~lqÄԃHʙ啇%éBZԶJvZ5^Ve$DI۞ u>υa5^mhcpV[k3:E-ΆzoVȋڪg&?K=6#XۄA endstream endobj 124 0 obj 3702 endobj 125 0 obj << /Type /Page /Parent 1916 0 R /Resources << /ColorSpace << /CS2 1927 0 R /CS3 1925 0 R >> /ExtGState << /GS2 1939 0 R /GS3 1938 0 R >> /Font << /TT2 1926 0 R /C2_1 203 0 R /TT3 206 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 126 0 R /Thumb 1859 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 23 >> endobj 126 0 obj << /Filter /FlateDecode /Length 127 0 R >> stream Q"&@0K"oWƖ`Zbz;9xRrBz[m,o[8?QSh psJei?X7o˼\(lFZO~̽+t@r^0~*vXF?G[eUw3R1_?)IUJIR+jq 0\dUA*!ZoMUY/jCgII]t 5ŮvaӾ 1ԃAΌHfA!r}%}VAK|N&з- Ԉ6^xi|KbBJ waj7o_Gmb\f,a ALukgd@H$ J s?\ S?w"_D}:ɓ"՞O-t0q+׊vev&َ&?_AyEձ^O)urPΟPLr]*Q?ٙ :qj'R B Tv;-#cAc&+ Ft~@,CDY sYJi2HE4`q)}`N JZU?Ó8C^}4&R[=橃#YQ"d[{71jYuYV;(FeBU8 j ZZӑrvHV#"e}* WܒA#HZPB CoT42!A-="BWUi Ê6j{Q{8%?4H\2}ͨ9 ^Yo!S 4.7wN{8;bJ4Ewֳ4τ'1HhG=pne5%yyئ[ Uy/qԛ5xD進M$$J22 ̊X(v/L.uwewIrJ\H\mP|P!Z -tH3N,.D8}glрŷR-w K1S﷫E%kwLމR_Zuh9r`}I3ܤv.š";U}8n[P̫}z1gS8&IF{= Ti%{+`;");̼Qv@ve8#fE^"_96DϾX\i&Y7#¢#E~eݹYo&T\OB/-ֵ0&xyf2/ ,lß'v(rgIvF6()b kVnolp[#7.Չ@S 1؎ ./xEkXYq$`n} ^XOWf2~̧L.s%߂pb^q jrVi3կcD&!ڽfIZݻGM?jaӘ,껅{hP&MYHIݯa:ʙb˺>t\İƪl=]a3jȒ|)Yk۱}%O*EDys4:? !!#rH7Ojj%剃V?n0wEB\⌐$->h(ϸ?'Qmt54|ycj{bmm1 <=)sȜvdQVL,~G++-N3W-P؋5ge嘎nx7AdV< +8Sd LD<A Ȋ:{c-廳+9+ $[Z78ebpA-ꚥ  DTw[>c 0_[|%4YwZ/ AF4EԷQ >LM`K"MLErm.@J ML'+"$ 1/_W#UڿrUysB7}vD#z@m#6D?H7 kF!3F;7u~4TFݙˉIy*crH5BiGf  Al$-U/W[%h@ 2fgF0%j6hNFn0nW㳨I-giƗ b|ʼwb,@.፜M]hdb dT7LK endstream endobj 127 0 obj 3607 endobj 128 0 obj << /Type /Page /Parent 1916 0 R /Resources << /ColorSpace << /CS2 1927 0 R /CS3 1925 0 R >> /ExtGState << /GS2 1939 0 R /GS3 1938 0 R >> /Font << /TT2 1926 0 R /TT3 206 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 129 0 R /Thumb 1861 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 24 >> endobj 129 0 obj << /Filter /FlateDecode /Length 130 0 R >> stream JLr! 0EX-^} TC`ߟkz !tkHX~L> '/ >IoP^̢X)_&~/oPo^'\#X_x-  wQ_q6Gz/9c֏"zR0TW`3`g(zeHS^#㧦M,mTߟ#V}|&1pQj%g?&{TO cش&@9ߗY\^P++5ڠ=;GO,KLw;4ylWvۮ19ebV +k7kP.\9fʤ`b3έb1ؗ>/eeyu^84@5́B.mǻC9eD45 ptf4wҸaɦ0qs"ZxP +^֐Y'g*t"}WX,XVKWtfѓu~ R /wjwhR:ա9SJ5kSŚ@2 ۑ= endstream endobj 130 0 obj 1653 endobj 131 0 obj << /Type /Page /Parent 1917 0 R /Resources << /ColorSpace << /CS2 1927 0 R /CS3 1925 0 R >> /ExtGState << /GS2 1939 0 R /GS3 1938 0 R >> /Font << /TT2 1926 0 R /TT3 206 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 132 0 R /Thumb 1863 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 25 >> endobj 132 0 obj << /Filter /FlateDecode /Length 133 0 R >> stream /KÉϻ+!;PnWl|{\jva`v;Ҹ DsGA;ܽY\d.}`(y.6?CGlgŚD|Ҭ|31SE2i3ƎQ5p ɂ.εLR8BؙT,ҕ/䮽Xċx"@s& ʲCkb,%\;|lQW:'qVkb"LI?NBƲ!z8X? 1Ud;ڣo/ː4;w"4i@b.?& 0cmr*3aT!yzm!1}Yʆjj%ȶ#s QHW|9 ʡOի^^w3;^a#NǓQ%.ԉc#Lˬ͟\/9Ԭ&vIpe #!oqR-/J.;X#K. -ybhn/۔CLX}5~׉v?ȽhAh&6oe#ҳ'Ҳ 8{F%!.E񧬠0 =Vb$|oÒN汭]L%xl[{S08gE(.r2.R);VNpFSUY]ZztKCuf=0<]bsR sg QCCZsX4њ[% m,dK)6l1O@FrsV1%0ߐ-ʾ|9egnք>"c}GY]tSBKR$!2Y6*jT%zZ&MB|Qs!Ϙz^Oya y0$BOg'odc[_]WCd2l RJgLR2^ bX'NESI!|ejSNE$me3`TN?kT#_KA㜾8[\:"D2o@;Ғ_oU.1pMI[,\2YWW#fJ""* )/jo7j'n $R/I Wtݷ*E1V)P24Sxͥna&B˷iĝ^L) ev$3j+3B jc Q+3"I @-g˼1xab2.,3};d*)Ƞ쥨W]W֭1vr':刉)Ho8Ϥޙ$@^[x` F()KJ}j6ʆ_ǰq`;&M껍3.y4&E],g&jFsw[V>9q62?nqۇR3EMA @O¶Ԍqr| XTMfz^a|+v:Y%N|u>`BATf$Aܿa-f0Pn L8y9?֊fW L)߽$) O' ]uNsItؒ{)"3̰f%&$Q<#-P6(ٖytz\k*K9pAG$\;~1V Â݄uݍ伝2s±y(娇0VMm!骣>Ic'5 *G_jCb{ɬ]p5&OKs> )*Qf98r8x`{7iѕDiIur {;Ek[?o{Cw8FeVog?dн 6Dh?ִB?i^}:+aEG"$Si2ϕ@}8HRz,;"N19^E/,oHz"|k q [2|89jC")]kr<'8mMP:P\,jw~ ˱znNx0,>q0y9OiJ~HK{+IZ5-&KL)u2Nv(8'4 TfDƧ(u^c1) endstream endobj 133 0 obj 3512 endobj 134 0 obj << /Type /Page /Parent 1917 0 R /Resources << /ColorSpace << /CS2 1927 0 R /CS3 1925 0 R >> /ExtGState << /GS2 1939 0 R /GS3 1938 0 R >> /Font << /TT2 1926 0 R /TT3 206 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 135 0 R /Thumb 1865 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 26 >> endobj 135 0 obj << /Filter /FlateDecode /Length 136 0 R >> stream %2v{"3ְ']LGOy 2-'|{D5HZAk&ι&ȓ^ Δyqjk%s'˲of,:EJeluq=+vs n)& ZaX8˩PÊ}f<Z-V1w}L" O6E r{|3XFW Ȧ1 jQl*3>- Y"钠o`YC x\) 6d~0p9"Sc(j$uʖH!B zvܝMF,CdO1#ED9 Dn&0Ufӗ< 㑛~;( Eۙ0dJB^\S?i#fͺ*oC#X m gߘU{JV{]ޮ+t id0%3 𺧺Bn!h:m%ͩDGŹaL^qVtyqvIw>/32xGl0 j+|3c޴Ęv0;1fsP_5%E%/H[Z,1p}<3 ?2kT#7J/6qݣ08q1Ν |SԅuH7Ba|9U &~4 ".v9N48ɼg@K{۸rB#4NQ#}0ͫ clZ :>'&@fRqD|}ԀsC9:p Bt9%Tw*J Ѣ '4 :{$4UPA:Vp/Rӳ'wi`}~,!F8.P{jA{61]¢{cia,S`*0]="늸\3w65Z(?b\%Sge1Px|Zp|sk2qYaYK’bZZ1H}MDi9ȆPڃ"33pMk.dE`[pg+Wǵ h z (&ƫE DLY%ψ6JfYU@ `j[k(HIhǩ"=Y0Hr5T?c]ߨ6]A[*%Tg,|>KC.F$ک.&aۅ۬Jv("3u@vحUC(&5 L >5$?L^| ıc2uWY B-[H\T t˵T ]9pZE 7LB5&4bJ9.R9v=LYs#aۇ4=w^Ko]hXR`QI2 2'5ts֒',U!9\ӛӣM~|OMѡjO4YDDLhw޶8loln=N˵M"%q`8B^2|xYAkL0m¢#C?VSg_+"m]p?cƆ4#}J s|0d3j9$ZKG%O\FbQYum RYP ;!' 93mB;0hJ\=BfBn0,3.0"Yx{{r8&Kؔ͂*y5 Č _XmaOD~6>\ˣa\|"Qk_-| $s  /wa+1|s5+@/Xe#NA2f|De_gK z44+藃 Df# ՠ!niM1&Ȫ LF8~;\n R?rbAAOAIЀ~Z!Ex9 WTo{ǴKjJ1gř!I %U%o)X!o!hjlԤy~ =lZ "؅XU50҈A%p qnS䨋ˁIdV3Nj]PxJ+`@7,$5&ݞMIlHFF9hjdP/ʱRFzVdYD[e;.mtE'k!L ߹u2Yi˝4ls_5:;g :mg'lvG/};pP TYcǩstuu;'-d"#?U[~si/JKqmxOh#b$w)-`VnX#:yݪltK2 Ees~ј5?P㪏/e"$qSKyA%w7slk=J{*&@P;w8H^  endstream endobj 136 0 obj 3396 endobj 137 0 obj << /Type /Page /Parent 1917 0 R /Resources << /ColorSpace << /CS2 1927 0 R /CS3 1925 0 R >> /ExtGState << /GS2 1939 0 R /GS3 1938 0 R >> /Font << /TT2 1926 0 R /TT3 206 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 138 0 R /Thumb 1867 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 27 >> endobj 138 0 obj << /Filter /FlateDecode /Length 139 0 R >> stream 5rT [@|؋- !p v)Sb>KbFu,]p ̊4?XFnQlZΫy~C>[,ʰhדF(T> /ExtGState << /GS2 1939 0 R /GS3 1938 0 R >> /Font << /TT3 1926 0 R /TT4 206 0 R /TT5 205 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 141 0 R /Thumb 1869 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 28 >> endobj 141 0 obj << /Filter /FlateDecode /Length 142 0 R >> stream ֢^vLFc &58" d?l`3 O##JhI6GIn$U>A֭x!) *X#"KÖڨ,_Gqcv;FBw`2#j!d.yBsBf 4RRl7ny,--y$lt6/wN=TDI~El|dӨ5&&-,AW?bN̻X[Rd,YI! H4yg8P i}w#jAъjd#r)|=VB0|ޮ19wɍJ[IכtjjՎRv|E[c;CZ*,(h)C<0djҵQݼ^7TTѤ|Y/]%)  rKvyJ`K@*Y( Z3Zz? %j>_^M&jb0}gINCDtsC PSEO6dJʕce4(?4EUR›2j{k NtLYy/=\{PҔORatj 0zi\Uec#ƩntC2 mEA7y`ḷ?:'œF^,59R4oci%K0;nu5oCUX^YM54mGqqGs 9(iI:0Y|k_CE2$4*+ L%[ ->0e[ʮW?^f@e‹C~q3!vM'!9GI@íJʢ+Uѵ5rCd&0~LU~vKp`$*w?WN uA@9f4P \W.@R!nXbWοfv Fs+Zm%Gޘ6 +6s2K'"|{č=WekتSV !oo1 F8W y XzDy*o}ʦ+T-N9\?sO_/+OY>P$qӤ4<=FQl|^IA1"m9/HAje"dlMK"#Dq2 V?-זuI\bBB%, {{{􊖸cL)R,"4􀁰>d]66l əi>e ywDg̴E!(yW?k)<_=YT_sl;@aSl#Uc )n*bU>;)%V}Fɐ9o=Ճ7&@?^RvlD{z1YyqꮤLaf;y"Τ_{j߆[R7N+:[aS|?!om[tÆ?&6;7cs͸>{wWwȌȪet@k'CӺ".K<(84OR"C@넜b3{ x @KZJ bF1]'#J_;x͓nˣaw&-dۦ:֗8F_\l~o~M5u?IO2< _-bk&&oH\Fr#̀^Sq,E!ϣ`d^dl2_)h ZH,'_NEw7eZZs?z=䭧0U$6:*^(VeN@>OԠ@> 'Iݱ57Ttq !-[ %1<2.h)F`6/^e0"W ̴Gsi=>6 HwDTAy6f_ÍSgKj:nPrw(%a6'|yIb]̱(UO5J;@ 9+i+6&"3R-,Bzdu/3B18,\Lyt\,7b%(e2)ۍEٶE IsnRQc-]-6+޺zh}_L;q/5rQL/^s4򥺍~xcߡݗbű%=YZ.:&fzEsP$n|ޜ/7t %ˌϕGʝ/S>̟ZoaSɍ9cAKU%m(j٘./_*ĸKfPzZǮZ2g%\:y }#_։>(h;5# 9IPy?#?[=5;w31JJirnw֎C~ ZN&%*VDI/Mi~g sJu i䝗`$6'YÂ֬lHSM _e5>JׁX:`tX`@_鲌(:c0lU+C-Ȼp!IhXOEAXŴۂ9ׂ*en;VG!?2OU15>bX˽nc8 [u.{8!F@.AsKr&nW +Z2>R`dJ3Ja4xȽǖh ]t-‹&ށP%mҾ@Ӧ-B1i#|b fu`prG+.T +ͯtt@[yJ~BHrKu__ԕ LQѰcLᖈ>Щiund foUA_Dy8S=xIM-j<{FY ֪fB((*uF-$"f;;FON^ͿVF2]X:vK-T)"c7$و.S½ƦJ0+:68C7'"DlZPSD.M3SO<,4ZF/ IGLY&N"jͳoPܚ/x.[H7#h\0Z1L2<‚1i>%BzDb{0cg''# 8ĩ?,snѫP!n ?(~=  Ȍ'b^!ѥiRjGp߳*G,N,I/Kpډ.'5z0J@0g<^~^h}#b5˾A=k ur>CzeV.'D[低=8ks:Oaqw/(VSE׋GLNچX 7@AVDeek_bJN5HH D :0ߕggovCZg -Y6Wvuʠ?=uO =BU oMݩ LΘxK,~jGF>AX>Ԩsȣ6'OF&?\3'|.OUXS0YclRU&Hn7RjGƮ C!a]#rzD^UVM~Q{_,AR!euNk~Cm"ǹeG}6^}mأ+1ـ&fﮆ]g/dpv? İ }2R5/ȵ1 2wF-pu4 K7bYtW91qoM^bR:0 DK2OZ>zh] lVT3E}; 5>hۼN)~Д b;_^d|gAHXhjLz ]2ۛEifn.1޹ȷ^Y~KasnC % 33)@nБU;)V/)vmNYVTLf6Ord ei5F'}'F :@yLl#$~ϧv աaǸ,jbMc6pGuI;H8i endstream endobj 142 0 obj 4879 endobj 143 0 obj << /Type /Page /Parent 1917 0 R /Resources << /ColorSpace << /CS2 1927 0 R /CS3 1925 0 R >> /ExtGState << /GS2 1939 0 R /GS3 1938 0 R >> /Font << /TT2 1926 0 R /TT3 206 0 R /C2_1 203 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 144 0 R /Thumb 1871 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 29 >> endobj 144 0 obj << /Filter /FlateDecode /Length 145 0 R >> stream E~i+3*h#Ց_K`!c̴B8@:O`JQ`*֗u Ǒ$j㼊nfe֚QʍCmcC+gnG)Dϔy ڗPNXU&l{(W)Ro]7ܡ/qbDVd0sv $Y* ]@Uw F5.|))Ϣ츰~eT ~_! ܘ7GounsRxB){d̟RtАӪ*ɱd+(9vSU#э{&hk jnNhq,…ׇg,;B :Y~6wPrsq>54K OŁ R _: &d?ILSw F "+V[פp-'752-* Cs_ژ>vmvk7A"2?:Rΐ {H ]H Dz;ß1Oαa&2ݫM\;F"ԯI;?qh ~Chy\֝qsKbfΤPh( fs]uӵ\'zÑ$,6Kd!Vn!{;y d0-1Q9=2WC!BòfWR!<|VGɛq~"a |:拏}1ApAK{D\Mj&5yty^Bnw}JH n?obA0Ԇd[DI*קbch3I4@'P:+Ysa0A{5?Ggn׳ÒI'k ^o*: Fx3a1],b덡U &µI"e[(f v.!s%(DQOl'b4fvņfȺq4/_ܗyް2N޵Ts?rOg~)06*=Ρ&=-te"fu'D?mfeͨo$l4qӎ~뙲(3[0NǺB~㈸lT~c&[,B:\r{W< c,j)i8xQ?lgTK5_d8GuqHaA~pXP:leCdϦ ۫LJsYOp%Q9 <1^36%%Aĉ}'i-q Au##NrUvQgzp*E^9 ?*|j7yew2Qڠda6g̭PU;ͩnK,5ϧ贡=vFC&Z:͚si]eiTUy|^ PclU4eJI^hr{>q8nY<Zپ;E _mϽdy*tV(I(5"uᵱnIEA9O:ev3bZWw_,-YY:m\Słoh!GT$NiެJBzF2)djK9޶H^?QB([F+"cfD:6XU_Sֲer0a_@H +T(@զ;]\5?[7.BlYuؾl+кw H"Hu2IGNxf0E\ Yn  ))VPK+ n畤>?6/5B3`]*HSoO-C;uIsmuȄD4 A3z"I nʟP_b>{yvP;%p%I.jZ,Ͷ4[ٕmHȁAoLّEP3LsN>KXK$xm>ة(Jtz ,B( A>^ީX>Eyc_"In"ʝ(,8 5G'9ҁ.'= N /(yXsln/=R2t>3WHQse݀кgl|O2( qDZhq 0&Nt ne~k cIm8Ώ-hgȅ `!% Om.fbW(8.uZW- _? $ѓ䔼%u'8c:[8fH-oni9iXQ@RW.g),%7|pL 凛˝`A~ԩzu #~fP]60ëD) aʊ>m:@՗軖gFpҩރ9jvk>@jU0t􋀼nϏ9!2ɰݢ2)[dX}.-?B ˙_WYoT8Bd;?6'yx vbfppnR1PFS{D1;7|)@yn`&1Ӡww؝ӻbQz F&bUbd!VFL/&D~icm hӰlpc)ܢry.WRkBț(9`K26Urin /a25Lj/nU%a[0GH 4a,b8ߗ fjȀnħfJI_i#3ʜ y`ZD8jb+v M l7c;땂~Nj-!:kEm7>xx\0'z67NIX?uvPӨf,O Fb&ӿ$d?J'tfR'򶶔Hmf'zksgqfֽAa|#Uk*:DS[پ/|J*¾/nX,CKEx^L3GfW)X;RxAD-NlxNiCF"L?fZ7m3=kܜi?&s9Նn&c#(^2!+; .yj'һ$KSuID+irG8u{9!胄*#WQXS2˦8 lHjM].訧ЇF[f'\ӌJ7a;P+^g&mew^zhǸLD' $0x.d\0R-gEљI#&?]|;It&86|}sJ?-8oa&{2`H\ܻ70#T|+d'+T1f8"\u.E0 #LVe9ΫDNfTvHȠ$aJK*2 mPǕd$(%P xә滎>/aZ[=VO:9>jZlC2&,06W*i7k|JL3랃k 2Dc/Z-5ɣci6k:@oo(j9  Q֞hLKilpj'u?øRu1OFnFYN7'5cy o"Px2j.'39ѥ5B`2;-A[UmasBk@ɹng{-wFP fX. $B endstream endobj 145 0 obj 3879 endobj 146 0 obj << /Type /Page /Parent 1917 0 R /Resources << /ColorSpace << /CS2 1927 0 R /CS3 1925 0 R >> /ExtGState << /GS2 1939 0 R /GS3 1938 0 R >> /Font << /TT2 1926 0 R /TT3 206 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 147 0 R /Thumb 1873 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 30 >> endobj 147 0 obj << /Filter /FlateDecode /Length 148 0 R >> stream SOUݯ/3rW`BnZ\JQypQmFtvs˵4.ߟ98ՠJv-"mѴB>ҁ !Έavs "35'і1iT$ AgY s1WVBJ[*Ai n҃a%#oO >-sZ%3ew.pJ>BMfN,ۑSFT2Iz IۙK|$PlYY_.`D޼*Mj+π\`a8!aGͧYjeēv׳GEd۪'>C3DM7"J`ܼй^֎8jFF叺.'KӚU 7'v–t7ހF-e޳f2İ)O,/8_DІ qYKlc,ϵ3aÑfSPtjm(/MMd%i#hl|uط[F/zHk؎x:ڣʦ!Et9ߕ)ûIxb~;EN?S!30wvCdoKD2~M@9j鰄i$9fbs0lk2=!ϴ7kBàV.lӗvsOoB %Q7~Qh݀-T rKh0{̉ݪK(8ABr% d}Ie>KoJn * ÔʜfĶ\Y"u]f=BAd[\\ ĝ;:xo@aj%RyJ҄x"IcDŽTD2.}\Ø04)Kg'k ENfW DbӴF"{zyh/w$ʁN;7=(cg[ajp ԯP x鎎d& t OF/afa4S% ~ט̬Di/~-2 x G!s,,֭kDsܲqH>B56䬨/ݍu(PHf!@7AD1LfհBz=~6rB)׵qv? 8μJ0ixZl%i KRjGMcBdO5a:3raăӐG_>?|S"MZ&`bsg{@!i l@쀝ϙ-ed)#@BA\\DH+gy9'u] R|ea+vXPڬ id~x\-/(A] b[?=q^u=(, oV4 0[ )8>za򲁄hK;i_\O GsfB^=j!RarB@vJGܷ#)譗kFٜɶZjOR02rCТy&E~QO8שӠZtf23>yZ Ef.+9ͨ;%օXdT>\uaq'\ءIBlKdV1{gZa.vg+>*e{/U D_XFx4kjT3l bXSS0~g's1O !ŋoDt֋F"sPGq6$[js7mU%QE Lg\/AiNCI'+DJ$=K,Ϧ79+Mz4ΙTy :aÁ`ö[؏Xgs7 Blq}DU5+҄CΝ*GLp`MTO+}믽9l}vj& fQYefeaVࢋbBهw.>){'o|Sw6~us-kN+b{j",U Z ]0.ۧ轱YfI"*hZ"+}$6m;S4X{e*oy!"B&ֽzz؆ @&gQ,"rnsZRhyz+\0:qt ,]> )nXPk$b (#U~4T / TxQ%oq=X/9g,T*^"J.@e~mGT絥I<0=9F5HKe~8j^gD*f,_\x-6[. nె6Q~ D] 5Le?4'AҜLlĴ C 4r^4~ +$k07څ愝 #Qr (d4ċ^XWH\ptKiA[ d#PwLg5DG5zڹ3K?Lqp)IFlG> =6YN4'7M^Fls.QZl\e-^#lbۨR+=^aɰ-~B*g7 ]@bas m;pz$#)iMFQkgbSD+n m;Nй> /ExtGState << /GS2 1939 0 R /GS3 1938 0 R >> /Font << /TT2 1926 0 R /TT3 206 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 150 0 R /Thumb 1875 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 31 >> endobj 150 0 obj << /Filter /FlateDecode /Length 151 0 R >> stream #"5PAP>̘z3^17$ Q eZ$sj'F$lHJ~Jl͝šb^˻!3G|R'0^dRRl!T - E(S-;XHt\zPҹg#΂C&'J9.B~*q!{/%m-jK^=4[0Ut…Z*wwt* %Ǚ~+&FCM.S5C ?4696M@Ga8Þ:~x.>(ZusD4eU3խ*#Ơ}n]:Nv7--#@XsU$IUq>3Hʝ t!1^pϽ*ZF_QC`@?z{ޜ6 }<\&-gOw_U!-kz[]ҞMGPoWCP8nk Q_keבD z۪թ[pֺn"eSB)P9 lq٨<@=ƽQS:}U!QoLF#!-*gӟ*Q _/d$6tt]rOw&W/c9cfFp07D9MLV6"((RCݮ˓p<1m9ӷ%@\dfjF|?DI`t0$LzHN.j21)! k !Ϙ0yqvh&B#kE{+='4ȗ1?%D^vӑbL<=}#DHw3f*ڡs0w[ZʯKrvy4@5ˑ `8r%xW6S NWps>I_ 9TH_@cw1:)jX4>։XxE&yN3 c;uG+V,΋i)$#8#g6#ml9 hj2#G#ܷ Ɉe2/eTQ4݉ny])jB k7{Ԉ(\]lz[k1Ij@vG[CE+`Od}znA9ugG?vfҁ똄֣.ʐX#&|ٸ%9QX9_? _^4 L:K %  O!()%A?ޛhq#X}_'ި-|F`h)dϽNL7NjFxb6JN+qx Б)5\b&l$'Y#=u(e?<1jjxqid2kXW%}6:wFjN29V=MWqpqdBp [^\$[`㍑P%D iu'5!gZFJM% l(Wu~%4fHj& #f3Dc,;sxJm)ՉkοrBZPZAR^-u]򏯅vƞL j jbƸ7<2~!]K31DⒿ:H}5,Oʩ]W>jbTAN%d6*%: ͗PB)nhT2#jo*q%㔐Eeu[J E%(6A:;ݑ͌TkUj%!9Tٺd\odyTNDG\%h0Y-"\GW 7iGAd|ԑ9^|~3G - b),F2Tle 3w/6pq5:&nbO9(%Q5~f~*-Py}?DbNώGB)]Ҏ!\)lh7Nq(I6UfMQQU tKsMVZF-=TT(m62靅a,HѨ;ϑw2K52nqs70VvoU 2ULxl=CNUsu}v뙲bGF*emDZ軙SGT !€o$TzŻ{wiQ=5Dhn,ᛜ_AMt#7>r=q!aϊrDnPҾw,/p#^G=x@t$ҌZػB809'>]/ ă2 j9;Gv{ܻ=ot?Zσ6Y~yubi;vK|E.W-rQZS̬vW_}><ץg H;DC7JBMc ,ZqyuI9ŝuo:VN5m"N ًX3Pbk5+fuBOx5h1 endstream endobj 151 0 obj 4510 endobj 152 0 obj << /Type /Page /Parent 1917 0 R /Resources << /ColorSpace << /CS2 1927 0 R /CS3 1925 0 R >> /ExtGState << /GS2 1939 0 R /GS3 1938 0 R >> /Font << /TT3 1926 0 R /TT4 206 0 R /TT5 205 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 154 0 R /Thumb 1877 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 32 /Annots 153 0 R >> endobj 153 0 obj [ 227 0 R ] endobj 154 0 obj << /Filter /FlateDecode /Length 155 0 R >> stream Ank^ag AUs{xV(`ݓj{=D>UI 60&O?p&G54m̢jRǸ#3r;Uh\7W:*ώ;17E§ǼBXfr9 !w׸O0#x^4'4Bǘ\K"ᅡ+F4ظOU]ߏKWJ*)cQa.'*PpEGhּaKLMW݃3Qɒ0l˜w\R"{x ~0AjX ji@NJ% <gjV["G=v/<,lUn6>\L]f4:Rwm sanHJaFKd_]*2 ˃i#8l\Ib J2P~PvVaURNYw# U k}śh]b%`hujH[oȇ,gV+<9Y;'.*&-`U0t pap_%>' {XF,8$#{wI0JqHoT~FqtLfAT(pu={44%0[_8,dC0򊃓RFuj]M~jL)xUSc98Urg0vŝ-X"c 6s6mBFnJ\-Pry˞פ^J|A^R ruGg,W<=.Μ?rGVdcpǬ ۘz+uWG@lel9ޏ\^OFD^a 7<\c:?a>iE6T!{:+]0*dr|B@b|S. )KӪ3=(I|yD8v'bHUByEۂo 4DP.:qVn;YZ*R-̐J9{\F.=ԂG,sfPѮ࠯Xc_YCxe^yXo$ 6n PwM9mZ7~Zu:$e;ֿsT\D3emJI9-K =C'}j6sF{<]3\WH~e{}ƍC}źTy ^%&}|GViۻ3LWZlshDy,:m!rBK7 rh=tÊ{"g=Q,D6[ZJP8нK$&2WLTwsrOێh!rIv|T21PIVff XWc3b\ őce vM%cNL|jN,C3pIrǔݾ ɾy!$u%crZ؂}+[%Sf endstream endobj 155 0 obj 3614 endobj 156 0 obj << /S /GoTo /D [ 169 0 R /XYZ 0 842 null ] >> endobj 157 0 obj << /Type /Page /Parent 1917 0 R /Resources << /ColorSpace << /CS2 1927 0 R /CS3 1925 0 R >> /ExtGState << /GS2 1939 0 R /GS3 1938 0 R >> /Font << /TT3 1926 0 R /TT4 206 0 R /TT5 205 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 158 0 R /Thumb 1879 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 34 >> endobj 158 0 obj << /Filter /FlateDecode /Length 159 0 R >> stream +Z}$>;b˪s/+hɭSu{&g!3 %!)Rޅ 1 XZt:"Q VK"}|=U/>Z;W]cI;(p6z8#'8֮ܩPf V4iYioB*]"+M^7?KxmBMo#Vܟ:]'Nku֡lת"& =jx3(5?O]d;?`u[f)WC=N:qze7u`cE} )2IM3][\Zi|Rw P2*Sڑ CTm_jz8Bs_*52C Y&)K=fVGT;ϨU&$AC8+MlD&U~Go%:L[ l1XX- CWޠ7yOjuנ!\ |[6.C7K=m8Qiyqcоm M?]k,G:&kXՁҝCp&}|z~v0ˎmo[ %B^FKp0P{RbnX/HASyެc:ˏ|f3YT7&A2RSЋŪ:rיW!CcymwYiHkS#Or_ |.'E4Dž+]y6iu?GOi/+~͖(s m|bUxS/%2֗FR WrMCE]vki+Q39wq˴pq0X/>J|DYϴ)Y%L kD^t\83a`4GEйlqyÚmoioue>#rLiYJuy r+ۥxL=ΘVt%G`K?;&Η^<5C~(5rwY.VRs="0w`8v^`hs9s@YP>Sngދ6ar÷%2*ߌ>c=C&]p|0i;SS^AϸvA_zȭuUWQs,wix$'4(5Yhߢx`w5D`֬Y! #?1~T|'[ځ?C& > Q#; r }.u2!C8ie 8I&JP<)x;rWŪ%-OI`C ˡHTW.$`F^^Ȃ[%/L춅w]Jy[N^pTR9MsY -]p7O M6'UQ18RK_3bW@Aq.f<6m%MjBj|[.JƂ+y*4UT/Cn}KvœNj7=IXL;h 0Cw)ep OE'!zW5j]I*B{uS;q)]_:nť-yc `o)9hhDېW?]\3SH>OL9; 8 LwjGq L,M+ćkq$AS ]VFqn"滊4-tKEd^@W5ôk+2hmfD\{g9Rh2MwCUta#/O]s|0 lndT$&کОi> /ExtGState << /GS2 1939 0 R /GS3 1938 0 R >> /Font << /TT2 1926 0 R /TT3 206 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 161 0 R /Thumb 1881 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 35 >> endobj 161 0 obj << /Filter /FlateDecode /Length 162 0 R >> stream p@+YN;J=fE wL~T%W,Cv7Ppbޜ-!!2+)꫄MÕT>Q>%7 Da l%R{Rd3Y.>2Q:;`J$Z*ײ{|+=(iZ{Nhd84UAt4/5=AJCev#HPT -G~SzTHw=С#.uQ}PҦK;T i64(8gq)=5Zsx"5ݲ0XiX~OqCLNHe\`R&i2+A NyA{4̡JUҺuRІq٨n7\upS}Ϥ'Tr+`&ZД:@X}E54Xm0(M> /ExtGState << /GS2 1939 0 R /GS3 1938 0 R >> /Font << /TT2 1926 0 R /TT3 206 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 164 0 R /Thumb 1883 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 36 >> endobj 164 0 obj << /Filter /FlateDecode /Length 165 0 R >> stream ~L>W72|XЋ uOe$JvwkLA`!U?zD渤KٖD@YY:(glsrPv.b7)@j-EWS7JHxWX-d8=3xponCK|ރC[V7!iձd j zϘ[x$ *ŵS{D'U݇Mie<`^HOĕͽ*G-ֹ=%H8WG*t%SЇJ-;_x9JV޿m+228ae=FiE~dsO|}Λ"(:5Uma¡cg{y 7pIЋ= ;7&#腭`Նĥy2jHK<$$E1؇8.M^ f7vp3M Cm~#jҬ`xT(L i6ɼkMa*}z%MqyrY\o@;Cz q sw4B' sP\(b{DA|N':Uor&f/ۋN4j_% c*[ %XEF!v)p3y{۾8 f .tp_hsbjA9L'łX \6;GWM8Hbx8ᇍFQ^" .Ʊiw0pV ?j'7of74u%&gGN՜5+ [uSF$Kb< ³,߉pxg3N?P 4/ Reu&6-+zFëTY9gEjƾ,!Vqwwk&JQ+wG^T?9Ş[ w'(^+i1ɋx<O/681;%MeMO'Hv,ftc$os 9rZ'I9AU*=\MmCZ;mэi묶N%" ƹ'иe2ͣi$.7FAۈ$ Ch6hPg6ZSCvgj$Qt4Ha>dp#-\'xZRL?G2(u"x/bds'DQR\-DfYTO+t'd9$KBXtR-/9KOP +(@Rf fCV'~;^ZdiZ!s3Ir] !F/_lc‰"K}Gʾsg[D%2"Ygq*^cMy]a2/V5D?Zcb(÷`+vitǧ,T 쭊vBwΑTAl͜*mL $iL[O endstream endobj 165 0 obj 1608 endobj 166 0 obj << /Type /Page /Parent 1918 0 R /Resources << /ColorSpace << /CS2 1927 0 R /CS3 1925 0 R >> /ExtGState << /GS2 1939 0 R /GS3 1938 0 R >> /Font << /TT2 1926 0 R /TT3 206 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 167 0 R /Thumb 1885 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 37 >> endobj 167 0 obj << /Filter /FlateDecode /Length 168 0 R >> stream hX^.vOwڌ>B {F]vxVJ:;,9Yl-w^ӛGpa@.umˈI)XDܾ`7ӱh,~B{h!(ZrcX{~ T(*~NrN No<3d:NHn!o'C`&t3cb7,S#,9(e :ݱXdl`h`к-xȗ'quޔf]:Ź| }?;[4~װJ A(TX>. &jU ɆSk<xS-LM%@ζ?bv0%%!G~#3IC=mp hZ2:xmQ V$yN`(z֧"bkIe]"? F ̾9 Ϫ0 ۪J=PKOw2\TYK ŰJP-6˷>Ӿ5nZK#xI'ط'd]7DSn!c3YaB KqFOGU{F;kou .a,HMAu,uc%XH^2c+z N*wsSFE,E]E .]qV)yC>J/!Dx%@Xix(p/Vd& qQ 9L꬏_ ڜ.PQö]T[RX2g:c-J&)@N^?ɸc}"r./ Vx"4:de]k&}ecUQS4ăi nJ`b); Z0R?_SA@&&ӜuOҕ*~5> /ExtGState << /GS2 1939 0 R /GS3 1938 0 R >> /Font << /TT2 1926 0 R /TT3 206 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 170 0 R /Thumb 1887 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 38 >> endobj 170 0 obj << /Filter /FlateDecode /Length 171 0 R >> stream [ Sw)d ߀Խh&F ?yo  -+[Ʌ\2ʻ۞gdz9BeEgܣG]{R5g֧9R< /"Y6daZO?5d9u~yZRԇi1"'C, XTL0>' ~x Jsm$ Fоcj站0.wжx@qiaExNz-p:2.^G . (ol!J|\EO,[~ׂ et`02<)h7"uSJUy [1y: ˈyf_rE_ ipiam;~\ʊڍT* d0חV(>WQ(g"Q`娸0%ǺڶTQiA@*3lP!ĪpHʫ֡͌8ZY![hPhD)N;d$lؠn &Mp֒yfDe]Kx,)aVbQk;+$2ȥ] c +4tLx+.Ku/^צ)Qhb}Cqң߉s) ieփ,HSPz6غ=,Fq"۠.AWY#)Is6, °i!__5fRE}&dQ<|C*nP_!=~>@E_ҕH_mXK3c-;cciĹ#5rJ%')bΟ&.TpFBYZ]rQ<+j3:廏9,(9vh <Q١HƎ0xDxD:O`k;>F4*KӤ.@0t:?S(Ε~T0nJKf̈́[g(GF`5$ 5/GV#8j .zzU!:"&/ |׭ѓE̯DcF~wX[Ig/9qxܱOeWZtojYkOJ*`ICNǵݪc&HM+caUT)12/Z4Ό?sj,3)ۃ'UI #WIï߽px 61[pXcRq$zS+E*4wGS3J6o85vI+$g endstream endobj 171 0 obj 1836 endobj 172 0 obj << /Type /Page /Parent 1918 0 R /Resources << /ColorSpace << /CS2 1927 0 R /CS3 1925 0 R >> /ExtGState << /GS2 1939 0 R /GS3 1938 0 R >> /Font << /TT2 1926 0 R /TT3 206 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 173 0 R /Thumb 1889 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 39 >> endobj 173 0 obj << /Filter /FlateDecode /Length 174 0 R >> stream ՏP}MK?/Q7 p](ԘXY[\?2:vI R](=IhpW/,.%)4RFrF!y `v O|1RhfA0HH51fsnIS,CYW\`g*\^>#n~H8-Oa O/hacnߔm-3IzmYM|EBk1rۏX K Q@]< +~c"4lCIH-r#ʚ&0Z:6M"N[&mӡg*Rَi)JzZJ= 06ZW%-֎?j~hwYa1J3<&\is*aN` )[81@ %`z.m(w<zN>);yqmhtǕ44T]n}#@8g`K[4:*O DtR:ƪn53I#4 k^ˏԤ3<r6ڔ XmՄ2nRDp[Yݼ!Ւ[<]K:(HbOFTk,mhNu>*hމ]/`D fJ-'Q>g%\W! i N?m筹̷cl<zce0w=;S&TgX |]yliU.Y ~blN1R>n(.u|g2.#t|_cUBpUЦ`uͱ}=E12~t>`5q*YpތMt8_2׮V :V_׀FOifch2 JB[_{FŴV5H04$ r]ͭUxt0}Hȳ W4usji#9 Ǿ: E=IY}f4h}V?("Ƕl.#ٔKC2b7/p|ze%a2,Z'2ؠA{e azjC^;N \bw%JE F՞Y)~)ƌez4B6,HpP 2cRq=p9~;E).vAؒt:nwTh?:5+L=Cڡ)n-𳱀8qf~m$GY^+eל8HOe`GnKcD<ߕ+΄ #s>-6rx:#Kz Ld5  R<Ș%P6\W@Y#l'3@.!iLIP},)@wŌKm&gbcqVj`V%K3 xel}@j9۽[1&K?Ip8t~0|`4냷Nn1]Eq48.H2cxOF endstream endobj 174 0 obj 1751 endobj 175 0 obj << /Type /Page /Parent 1918 0 R /Resources << /ColorSpace << /CS2 1927 0 R /CS3 1925 0 R >> /ExtGState << /GS2 1939 0 R /GS3 1938 0 R >> /Font << /TT2 1926 0 R /TT3 206 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 176 0 R /Thumb 1891 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 40 >> endobj 176 0 obj << /Filter /FlateDecode /Length 177 0 R >> stream k'm\\|Zl.'ߢXtNQzQЛ5bAwrwp8үw¤ARe>vMpԖ@,GI] M j>zt<=;~<ȓ@d[*1ۥyX7B/԰ {f_/  ^Rk>[z[璟kk2KY1dd:jxDJEEӺ-ذ-Y-lwf<}Gh a'5SMr29.*sTo3.[H[rỽxR: &>},*W] !锁F#S-XXmzK<тI#:Q5luzTs9#<' 6Nb̟`Z ^9cvݣ̘_>y^ }\5x7 *Küw6|W\g%' &~^+oh=^gz% YmH ^H @}D? gчo8*֭=/;RNg C`+ fx -/a׾> YYs endstream endobj 177 0 obj 737 endobj 178 0 obj << /Type /Page /Parent 1918 0 R /Resources << /ColorSpace << /CS2 1927 0 R /CS3 1925 0 R >> /ExtGState << /GS2 1939 0 R /GS3 1938 0 R >> /Font << /TT3 1926 0 R /TT4 205 0 R /TT5 206 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 180 0 R /Thumb 1893 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 41 /Annots 179 0 R >> endobj 179 0 obj [ 228 0 R 230 0 R ] endobj 180 0 obj << /Filter /FlateDecode /Length 181 0 R >> stream P쳦bJK7OOktAg>/P1e$6C 1ԖJ^n)4~Y@jiDX?]ċJ> H$NZ*+joq͛|_?%*؂GVEl}Ԭ3 hb4iE>kf- A9lDz*[#2 ϭ%A Z481W&|_&.?4r`p6 9M Do/p::) w,&ON ,;KL+M4//w~9o {'ֺLU[C@וj{ ?J;_`Hds;+; -q@r;=9$MY±/6(rWJoR%;')RfLT 2Wվ:!GF VBk!˴69\䚰ܢc&*9_},Ll 9Jc'H@+z&>U2B\lp1l4(#骋}O~D v% K 4p(r*KϺ"q'DYI 5G?zbE4fEhK43I$!}4Y(d6 @InJj{jU(QCxoaCV!ljSmq3 g^WFqV"h[qR@k&RBT5&$?Xy}x:J΀8X.?0|Vs;:ɶ>:^x$]&S3Ţ j}AoIe_PC (4gۤU׹r1;XdۗҟeEʌYb!~y,E< NԴWqLjowmX:˵Ҧ5o+z,ŋvq֠Hܟp,;یdTx&Ԝwl;4X0lN{b!gМ؃?ph:]3F"8R(obrI3>ЕSXQ`7oO}%.%0CN}=S`HaW*AØ` S9qq7w}QlKЭAFӞ4Z x\XWa 55âkH M:+ ~k`\k`jk=9șۇ/֌K:nݨ) '*~1 #rmb{cD$jk` bZNJꬭ+8n4-aQHV.P)L֥a݋-y1d endstream endobj 181 0 obj 1384 endobj 182 0 obj << /Type /Page /Parent 1918 0 R /Resources << /ColorSpace << /CS2 1927 0 R /CS3 1925 0 R >> /ExtGState << /GS2 1939 0 R /GS3 1938 0 R >> /Font << /TT2 1926 0 R /TT3 206 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 183 0 R /Thumb 1895 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 44 >> endobj 183 0 obj << /Filter /FlateDecode /Length 184 0 R >> stream B?/yf^ۚ^RDtK8DD0]}},Dvҙ re"j |>XSԁE=7u5]2́Zw %߷څʓy'WiJM>6Bu (V T%b$W`޴*"Y#qe5Z]LDc9f,%s6lq~]@آZ j9Ħ4pL늇[Ad~S<> C:6 {} WQ:Gmnz)˗uG]Jo$Vx WʩO,7ƃ#hy{ >qaBTEfJ!bbF=BluIw#nS/'et|;O܃Z9>Q +G':O ڠ+0*WR?PW5l$tdBTҞBt&_ Pf`0T~mW&OF Źb& 颩 r)C]S/JxE5EmX?y.r2Q:uN5-TAhx[&@DgI5v^NZO>+v]i9c&.%ϒ$(ǁKGo_%+R#n Y07ȷ L` zZY endstream endobj 184 0 obj 1663 endobj 185 0 obj << /Type /Page /Parent 1918 0 R /Resources << /ColorSpace << /CS2 1927 0 R /CS3 1925 0 R >> /ExtGState << /GS2 1939 0 R /GS3 1938 0 R >> /Font << /TT2 1926 0 R /TT3 205 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 187 0 R /Thumb 1897 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 45 /Annots 186 0 R >> endobj 186 0 obj [ 232 0 R ] endobj 187 0 obj << /Filter /FlateDecode /Length 188 0 R >> stream τhF)U@ߚ-;Ɗ<LPՌ;YoTfo'Dfm&i%:ARSZض\is_C-U@0qt،HtȦmnoK=wb/ƹ1;XGyb?4\J<%#gD3~G4YkOb 8epR&[Ъv!.-eRxW@R;06Njd|"qt~[!2(N 2J#~$b ?9l@ρxpSa:T=H <W):N?SϨ hȒ81h{DŇ(zYp -WVrJn-h8c]ALrwt*'8xDCvK~Lz.*i&+ L: X1_LJ#/W%||>b$oH~x5p MǠWKy,ԃ5wKXGv\QtDߧ7w~,ęZ:3 "r\A̶))n=\?>h13}?޾eVl f.JcΫMކ+qTZfG]1tb)&3`**qVތ:Y_ F ]kIvr\VxUCЏ=( >DefO dK|{= ]debů?J HʤqU>)9x.P`U;uaӽw)e"!}t_/o K>`z?'aw β`KX,-h$emSrP_l*ys8ƭrP endstream endobj 188 0 obj 895 endobj 189 0 obj << /Type /Page /Parent 1918 0 R /Resources << /ColorSpace << /CS2 1927 0 R /CS3 1925 0 R >> /ExtGState << /GS2 1939 0 R /GS3 1938 0 R >> /Font << /TT2 1926 0 R /TT3 205 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 191 0 R /Thumb 1899 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 47 /Annots 190 0 R >> endobj 190 0 obj [ 234 0 R 236 0 R ] endobj 191 0 obj << /Filter /FlateDecode /Length 192 0 R >> stream eid޾hËGv 26h3t+,&2z@(0ɼ ZOV5yJ)HJ&3z>|#&o:s3P^NXt8@?i1:ggTsNR 3[x̂k_ |3k}r^ݕR.]҂0# 5pI)n +(F PrRg3R\,*Cg"c栳.Z8RW1qUT{=졔[X6-n˫>Hgi~Y,u0奟-L8/P'1rn$?--\>T ab 8Wn{Wv`^?zO.@7gT1bB{kP]?ȳb]Ϭ :n0bV/Fh>OzMl)rѕ줙f$@o~n8)=Ź{e L Q"Ud)MH `ݜ?LZJ@鱸͛pLhO0)u⪚}B6Ό d_3ל*'u/h[k11Tn- E~%RļT}o oדQUZ:SH*ʈ&0xPpz 1axd6} Rny9 M}'7u5id$=QwֈU8bE􌍹fN[nɠDg8%}NZe=.tT{Cr0ne:Bδ @T,řcmpL޻WdEb\C342ܢaQ%@* MF@KN~2z9ۉu^ ?7z^f^ts-N/./5ÁdeEs!fge6 űW*ܩ [PYBW ,Mu۵m{z+ءIB' ևfUg&+/^DD4*`+r Hwn`?n>ED.*AT|21@xm4}X Kn"!{0pJjea51tFB`nm]G~rT"4x?9f,5(qQ<ҀV.slcעׅBq)xuR_~R"d=N.5ًMnc> V ?|d5?;r~sda2>,%]fwtSPrʦ\UBAKZ`[G} ԫ`*:u`J B:=Vhu ȪŻ/cXdՌT=w@%HXUY^Tb0i^d@A9OC gLK':FFsΊ/^sB:mNwp4-Uw8̉-?qAZަM7z|ounԊ44@*= {<"L|Dc4*-ջh0C~eg ~w>/BPN!f]F=Eb!lь7noÅM7[@9;Ln[~2zy''BTQv$[`_TfOi޺ZY>9fٱ^1׋ߙ:x9^8dxl.t|dmrz?*::g6ɸA¢֦u?W f(wclXps@]zrg9UZ4xb/dOiBfm endstream endobj 192 0 obj 2122 endobj 193 0 obj << /Type /Page /Parent 1918 0 R /Resources << /ColorSpace << /CS2 1927 0 R /CS3 1925 0 R >> /ExtGState << /GS2 1939 0 R /GS3 1938 0 R >> /Font << /TT3 1926 0 R /TT4 1931 0 R /TT5 205 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 195 0 R /Thumb 1901 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 50 /Annots 194 0 R >> endobj 194 0 obj [ 238 0 R ] endobj 195 0 obj << /Filter /FlateDecode /Length 196 0 R >> stream E/sQNKdix Q;m,kswiJyca]  ɒH0ٞ/2*8#Q2T]WO+nż~_}jgDcuj30 cpiCd?N/cH͓.U}'l!@ Yښ%ٷs] A/-G-\BQBp$'8̷ |3l$TD9/?ljq¹X`&})EKs W|7.DCqVNN`!YD5%́"YC&m[kTA*pg)HCH+D_K|)wZ_EK Km铲J:Z*h^෈hZAR%W{ҧw !ĩ۩3ѻU_uj@a%},)2C['H< dfrξ]{ViyCCMAT6w/Wg3`x7yĥ4AֈusghR'`_&GX4eè\j g7 L%+=M3V"JM1|T1u%f~T޳/+y` tR.]LH8 EOt>v ۵G8NJ5A&Lp@CD[p&"#?Sp0: ngvk~Դj LG@tq_Ҭ6?T6fvig }.nwc2mٙWOӽ^|<pȂ_aF87i %_.f(/{}BVK̯eӛ9Iʄ y'/lڽӆYcq̲ˑ@ʝ'I~tz˽,&IDiM'S@$mu߾iF&p /ɄHsN.-eaFl,˫Ff(uRLXˎ Y+Ԃ 866lh%ɭIJG qz&a Pշmgmdx1 h-X'EvC#=) # eM|hW#b9'[%⻍bes,]%dSuy`[C6 .oj%@ :4}pGK>GGe<>K:8 Gs < hsHS[+_75"a^uVv$9~>8+&]sxJ?\S׼[tEvg4y+!u}/Q Yy ?:a=XVZt(g4i#,NN}\0MvM2kS`>*ϢL`YCĴPj:mzr&wF4A7. k9>j6acx&FWbdوQ/]fQ.Ul Q}VIwHTV ,4,b`:ŏN諤&` -q8Lޑ7z2-knrf%2 j rrʃx4fYʖj+OpaPgƯOO(%@N44D`=-2 mBQJǩD=[A|| 1&ʼ{DSqmB°?34I᧝,Z$3EVyDn@?u&} s%櫝@A%} uj_􇪇J^aa&{/pAP3O#Y%31q@HPL7^|NS2@"u|#f>%R@}AРF$1D~tzҢ`9*sxe3Ms`;Ԑ_VϕD*B?#%2FX.U/bBA},VmJ>rF֣Db@hidm2qy5o$H+Egïi[#2zSJYa~߅>!r)(MRZ#58c3$̸  C H 1;>:mo0qhОgG'W6,KiQB8 %i9C4.[=0 n)LQbEw z8R?[o[j[k&W@u^8YDg]/<_U4_U!n}V\616 \cSI[ wkc2s ~yw BHx^?C5,X1~iC/10 EZ(jF&.vjqbO$K/J8q|̬FwO2&X_C6(+pl4cz9pHU"24W6 nT!F۴gPS.}o멻j=J/DU\h JKq^?A<1+HwU1nSe,jbqJgtpu.U<@hr,PiҊʴ3e4xlgm(1iXq sLցfsc^XHI7YJo NXHx@H}@ @@xֱjC' *VEb/}]=,3g9q⁃/}Lr6ΘnlP/2XZ%@jD$oqOxf(ՔZ ԶZ#nL3rPgb6)S3T4_eJ^ .ys5Ĭp+?@ڕ+l;E#ž lL+W.J]9 endstream endobj 196 0 obj 5360 endobj 197 0 obj << /Type /Page /Parent 1919 0 R /Resources << /ColorSpace << /CS2 1927 0 R /CS3 1925 0 R >> /ExtGState << /GS2 1939 0 R /GS3 1938 0 R >> /Font << /TT2 1926 0 R /TT3 1931 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 198 0 R /Thumb 1903 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 52 >> endobj 198 0 obj << /Filter /FlateDecode /Length 199 0 R >> stream EeݐaP$OBՍN0VZ b"0 YAMs_gAi72tI!`j^{- .#p2!* {ń1hF~7Zۏ0_Z*F'L?L)l'G&C >gNuƟ36ie;192r8П Y<Ϛ P y|^1w(%q;ѭ6{>W'Џ'ݚqcF'[ڥ~t)ٵ Y3,PRX.|f:0;nj6LE;qC_]!ѩ}~9ܝT3'4dɱ~ˊ;n 1Aǝ=C 4.zj1OVSO9aͫp 0&8?O藓EW)~l1VDnhPPG=. ļ32Bɜ >lv@NI`/ ci(  ώөN(i@ʄD71e*.Jֿ ʖƖLSf#H׽!EţLW-GU!P-#c[r|zW8X( .q?FҭFu\^\ g_;5)z_)8ZF!ddԆiEzq'\摆; 7x r};1&@ ֊nj%e%d^^Rޖ2:af}=Qx<ƑiGz͟-;CXs޼^U"_&a_`[dAt^?mN3|NX~r1.ʚX0ݢ΂94)g)'@+>hcמxJ& qjeAք'5 뫕mEr3}-j7r8{58K۞H6\ =.nrZ[ gm,Ia=RڞaRmYP`!'}$\P@u}%yA&J>GȝXƬHDPo(~JEniWpuF~:2@lƜ.QXPON>nj8B`udQ?>:b3N { }+NX[ J=bqӊ )l*J@\ћdG12Nf{;^cy'h<3*ӏ #7z}o„Dea/ݿOZ hE ^QF ØIŇ*4qh vM{E^Ei,{OZN&aCF$vdw3fn5'ϫH0GUn~Cȃ}S^+ Tuմ!ᬍ;[` v7 [:^Ķ]&FRɰKwK{1<[9t>r;7%\K &KGfLydt"m9,+fq?o`\e/Sh@0*?ڈ[&/7J@V9'E "@~DʆW¿Dk=F)Um֢QНbsRbdśϻ*EfE([qsH7&X+py[$frp.9 ]WqT^J)l1~B;I@"Qc eȗ۱.x3fnjQ"TVlY^(7ڜҲ]dy㮝T>˒Ƃ_|KM]ncw + !(*l؊6)=_!C仵1$`dӸ\",k1P@5lFA3 A G7ôʸnTb-g7 zfv[uT;wLJ@_BtܬUPb+ ,Y [)8{iw_fLI7J*r_"6r͙|nVl2,)2v.sH> E2 B <TcM\E0wx|-[ꝥ&:!;v8qaEfF #Pd$w W3R/1'$i?|'8P"{!ӱ"c1f~ME0;x0f]SYǚkv endstream endobj 199 0 obj 4191 endobj 200 0 obj << /Type /Page /Parent 1919 0 R /Resources << /ColorSpace << /CS0 1927 0 R /CS1 1925 0 R >> /ExtGState << /GS0 1939 0 R /GS1 1938 0 R >> /Font << /TT0 1926 0 R /TT1 1931 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 201 0 R /Thumb 1905 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 53 >> endobj 201 0 obj << /Filter /FlateDecode /Length 202 0 R >> stream K4;ZYǀcJ%o<72&\c[%7sѠ$~ٵբ e^u2tW5t{)i!: Giz hM5k-OwI? nPqmN8t nANξٜ˞8za0oM3f~2 1 |^~YxMDȌo%l1B5[m\}X9@?9Ld"_c2[&A&!0qx^&)`39EWz& uyWaIK妇gH 49lg8duxqK?ˌu/mX$K@)`¥3bIȮEQ3OqdX.\PØol&W >DfzQ8;W^B BԋΙm.fM^&??CW!K.D|u΢j$RVwH̾jR/?8Lo-U+Q,PwƠpΰj[@2uVRIύrUށM6 fPW 7q1nCY{%wT8ߏ]юx.Df"^6#cX` =j/.Dم>rLo}T*Ytl0LtLgx׃9adEw`O4GQr$/$pXp|I mvա,⻁3fR_ěvuwDG[ BX\bR_\Y=G?Px|m%NKn^0`& endstream endobj 202 0 obj 926 endobj 203 0 obj << /Type /Font /Subtype /Type0 /BaseFont /MJGMKF+SymbolMT /Encoding /Identity-H /DescendantFonts [ 218 0 R ] /ToUnicode 219 0 R >> endobj 204 0 obj << /Type /Font /Subtype /TrueType /FirstChar 32 /LastChar 32 /Widths [ 250 ] /Encoding /WinAnsiEncoding /BaseFont /MJGMMG+TimesNewRoman /FontDescriptor 210 0 R >> endobj 205 0 obj << /Type /Font /Subtype /TrueType /FirstChar 32 /LastChar 121 /Widths [ 274 0 0 0 0 0 0 0 0 0 0 0 274 326 274 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1000 593 0 641 0 475 0 720 0 0 0 0 440 854 0 0 521 0 0 479 491 0 0 0 0 0 0 0 0 0 0 0 0 470 560 458 560 486 280 468 560 245 248 485 248 877 560 558 560 0 331 387 317 560 0 743 450 444 ] /Encoding /WinAnsiEncoding /BaseFont /MJGMPH+ZapfHumanist601BT-DemiItalic /FontDescriptor 212 0 R >> endobj 206 0 obj << /Type /Font /Subtype /TrueType /FirstChar 32 /LastChar 150 /Widths [ 600 600 600 600 0 0 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 0 600 0 600 0 600 600 600 600 0 600 600 600 600 600 600 600 600 600 600 0 600 600 600 600 600 0 600 600 600 600 600 600 600 600 600 600 600 600 600 600 0 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 600 ] /Encoding /WinAnsiEncoding /BaseFont /MJGNBJ+CourierNew /FontDescriptor 214 0 R >> endobj 207 0 obj << /Type /Font /Subtype /Type0 /BaseFont /MJGOJB+Wingdings-Regular /Encoding /Identity-H /DescendantFonts [ 220 0 R ] /ToUnicode 221 0 R >> endobj 208 0 obj << /Type /FontDescriptor /Ascent 1005 /CapHeight 0 /Descent -219 /Flags 4 /FontBBox [ 0 -220 1113 1005 ] /FontName /MJGMKF+SymbolMT /ItalicAngle 0 /StemV 0 /FontFile2 209 0 R >> endobj 209 0 obj << /Filter /FlateDecode /Length 6921 /Length1 10652 >> stream  ڒ`2NvJ#o$cnm2w+'{ *Ɨ8f,mX#Ky cδ?NOͭ*]~J)dW3b5z,Ue; P.KQ%hSHam5٪Wg'9~ Y|tO ay0SXw]MG3yFN'$9#(OBBgjL/@*Y=dC"G$Gw׺^!">S}{B;mVpS}̄NH0W/3 \.ի I%np"-_Q 좔&Ꝕ$#xu3@h|3[\h3Bjp\>'*j;@CPuE[&AK߭@AXoLz$DK:rዂ."a0ԋ|،:+!0}h5햹.{8+9XoQ pXHU-=߇㎥Whp ]΍EmNϑ@uϩioaD#H W)Yk }36kʉW 1[!ra٤I&5D CVN([*:e%R5|J"=&Bi5% XNY֓}G-*ZGX(]e}?S&gi鄆5X Q'4¼Q2jgCM~/5U$gӢPaY6k1ΝN/rw^dxjn|f,57Ŵ6afQcei 3 6YKZD~P/Z TuK.y-bvdt#!xw<)0aXΓ\ai|_*OTU4P"yJp+f#tOW2FwESoq|bvj`󙳌UD{y*\D??ߣMw?p)uGmuT=Au<{1 ma9lON?ĭjen]>9W<` (j|rUi#z_[bf]OG|3a%7&qқ^Fmgyn "iY;w]=Lbvٻoco GX8SŨC F1碚8B?+ʩ +Yծvy4*YqU?2V}K9A뛩HeL\BZiUԮ&A ` T+K:V"Ӧ ,O({r 7H$ O!O Cv>,%? ق';XXŬ(apk/'hgҁfe[15Y.~~}<苠#Y'RP-?@lroί?yߪć) ]]'o[wGR|=T%LBmGܦN-r2^/WQl1WZQ#X^s$fChIGcV!?$,~:yA5閜09e5HlQ-ЦDUIM2T*Y<ijD9N\}>jw)\ 7Y^\@Q[)FY|GW~~!&U_96?"yxy*8jO2(YkK0oّ)Wæ'EQ)B g7# pE ĺEpaW>՛P2BI.|[|5~wp,V.& !C`[7Rzv G^PEV4P;NH%5 9RxlFMuM+*t4Eij!D ku g7A?oe9 1FSrN~XiZ0UCF /B*>Vy+94>Fx=M" { pا8RIf7lbnwнLqU-%E0zzSE'=έlf#f GJ-|f?JÛ.*IQF,{ךzEGRT 1&;e y{e`'%͕xm7bQ2[1K,dN`PJk"(5±I)UN0{)4,VM*  xȧbܽ+@v[2JG_I_ 7ɵ_}|2,ӥ[$"v4AˆVKJQ@BC IdL h$1Hlsg|x] rOȠg[_7kn$J.ʣzeڲj& Dhx?ִ>e)٪޼g8P<|@38rHJ\bIjSUIR٧ETk$s/x ,|q7kM~Wx`$HxǒV 7R~O|)cߚ,g\'#,){/`":)bfPUUltgb\-IVY vj/a0l0iU]b}S)[FBUG&G9oPe *,+i84xa k]ޜ:6Ɓa@ڜ4a4Sܲ'Q'NPo\Y!Ry2w~ ;^m05b#L]jF-+fcMj拭DD?Rgȣ'By7j.C j3i 62$σ x෌^P, Ʋc\ttMtl]#4uKHfc!ޚoZNLdJ&H^ >8paR+qΉ~gӢC ԀY _*ŠЀs m1JQmZshyыPV)'̴O83^)Gh2ꫡ,$%t>ƛj7 H@Z-pJ^,m.TdG=&S6 R,1=fxXH`Ai3^MRF2 De8 E;?xӬʫxD^_oϬꔦ>^d37R𡊻 8 (Tj *jOf6OI`6 nFunV).UȻ;4~hj=+¢ܛ{"#n#g2x RTLzL)8O^={AqMvOn!$ֱ -#Q}Ws JQ@0Gj9'ӌ/W8*v" xSXc mlPَ>Ӆ_g0u $mnX׮֒B qs]}- RB蝲F 2JAjԊJ"3w# ̔AΪ&YphqƏ`qcd(5ޓ:ņ4hCP+GTlqy'$9˚!=<ճ^7 G:I~[N|U$V LPF)Xy xA|.* }Uu5k`VY;39,m"^Slf0;4cwOnb#n0dRjlԛ7ω=X^ Cγ~S5i*3XalnN^`!0.? DsS穈#`#lqd>w3gALzwd8?ogd r.@X"Uy&Ƃ,gy\ #C;Pt3'sKȡPV}Kd)sOu6`[$Po TiB*@cRhm!6$3U!SōǸ(GiL !M`X#> (~-, endstream endobj 210 0 obj << /Type /FontDescriptor /Ascent 891 /CapHeight 0 /Descent -216 /Flags 34 /FontBBox [ -568 -307 2000 1007 ] /FontName /MJGMMG+TimesNewRoman /ItalicAngle 0 /StemV 0 /FontFile2 211 0 R >> endobj 211 0 obj << /Filter /FlateDecode /Length 8101 /Length1 22064 >> stream ZqܵL2 J9@i;3Ã.EGSPEAr8IH;5@P݆"g!cԱJ>߁?L$+_BS.a?|y. 1uVy\60Ҙ|)r0ZqPүqdI\OFnz"rCqRohCf .Y' kEk+VvWAgZފ5KHr: yԳL]'zݿ\JlhɉG1EpM2 %T=@O# E 4ZUhB##0sy0n9rd^rYqI6|]t'W*[LXFx6dgb7z|./&QF˅(.rU4_w6bMyդ H^xL[XBKiH*8L򂈟2\%4YYpjA I7)+!5c{qAA 1̍R\S-JT۞ vpŚ|EL+ mOKo%ro㘊7`<jK.5KSC +R!EO2&. idpuiX.XTؼ]2hN,y,|ͳqEzBڐ :߈ M {0M>_nje},(d?{@1q*~"&E!(Z!+ Οߚ [$Zq-Z?zv}R!ؠ9K`}!9ЦVPR9x a]R<=A3F)=](JdT/ӧ;?s2'|22tY;OQ?7Z? Sy}o(.7]#x9/+d>4hW&4 1edDu2B #l]Xw f9,jy̹VcՐ;wdB!Tψ( BGL}Et0]heJDu~r056^/1TOPD _㜙kۏ6<ؠz4dZN;~A TA؋5p ,v:AU(O, +H?'C/X:,܍hx|X^KʮĤ55i$P/7Vqh&釄_0YOwEj+?G0ZuQ2ӬbH<_Ɲ` }7"\BTUB\)(5fA`M4`SAd6ムQw_o"4UeMTxq n,@@*"#>y( [O'7*nhH!Y:݋k= z8a H!N s9W u}01DiS20E/'"۸M Zi?f~ޜ)+Ó]6#0_+?;9uMEۃh*;-4ޑXu`sEOke#IAmjIq SGs(1fo8}#<8|XT )ׯ:>y0δ~ >Ehz }xn$rbO?cݒƁSÝZJ'?jF.F^&u` ˊdp/_,P밃"WrC9'U d]sm(e R8JFՄDGtcTSWhnHD9Qao1D}Y+F2VEfUy8NKo:K#:lkn棍Snvi9ۂD }aL(d+;ċW%AZ(xV6enwb{s:+0c =vյqkQ~/Ol[7ۼER'i| 0âڤ?i}A_SvG~Jd$J62ǨЪ_$.k X`Z:Փ0~vt;Q4Rc,3%"5&m5u+'ÄV;B:"UEu#HUZ`Zt㙠`tmR?*a!orW'yFNLE$? ڥ0Tl, E9|h]ú4)Lwcwujɜ;ƥ8XL| ꛣp8WM K."(-,&_}H}l~TH."(}ʌ]T ,u @Q?N(~WޞXðtOE|*'tLZ^ҐzN0$o ]. ,qԚTZۯ_hѺBaP'\-In-+ cU\6+}'pQ•ɜӑznMî=JvKKI]&/Ї8"vBG.(KʟNH\c<[x8=5}ik$rf`M=P|=͇K>xJNF ktG@/Q&y 42I)ABա&0]po\6C/ ax[Gv0;&)\67,e,ݳ8oء+DZc]՟5;j׃+[;ӝ;1RQYǩΆLֈw%6iu•seሆ9Ka!,-[0F'b?4|#hcSzi\jµyH%z)X%@MX6Xaخ*7%e־:t9Th_^ I(Vk]$ U֋dW9pMU !9PM^J4Js%q\lD=šʵN96G|2VG-olk9fY0;N ~ޭCm{hsM )6~|Y!q,'a+FUR٥i=v7όĦW1%{"V.)BSZ VWYZFpB_|SPG9:g"Q#8 ^ZMg>XtJ1YWg^#~I8&ψQ67#aujr:&uظ1ffJ$ґrIJJ8H(;kH%&[`K 4wzb3ta 2WFkV#p7Ay>'_jۖHsL3wU6 \6O1&P"\H"Q:ӒbȸYy:tiM=M_֓5~JLYU3F2q\2 B(D2,z6d'7J xSwdXCy$,ۧ8/6vl]1WV#O(~#)\E׸E0挌ߋ/ML ȵ6,!}R檌Dq1jfm9FG.YPqj&oŀ4^TA9Ŭt˙pF"a{TYNjz?jj9;YW\"arhWr}БjB;NQol%>T4vߌZ$\9L.Æ@)ȧ鎲3[ @'N֨@𱮂)RT@xJJ*1R]*Q 8/yw!Ŝ/7T\to|] {;PE4}15X iSK_̮Dhcg)L}PnCPU˻߰9DI!xA?zLW<4md TFfZ/S/l`=Ȩ([5]m>LZAYa2"X0F;'W>ΡԇGhį(rQ?_uCYzP툒o|.aF+O$m-0kF)9\` 9ڀV(a%Pi^łf0Keu gw#owf~&啿BٸDtOu,{wrOGۉ5QV.G S7gIlr4?CP <.rwrm{IE+Ro4VJn"p37QAٿ,/b u4#vfd&9$us-W1Wi=,LUN""94_6 mPfk0!A|AWu215j*LAP_1>i*g"v\8sH\ɱXAnstHta&$7٣Evo!S!>$(F5f<P {_Sk] Gi7j ԗ99kW J(hYJxm^BJz Y!rn32/<)t<١nEJ2= [ ^|yhȖ"&YT F멳C8@EO39\f@T\>o/=4)Ƃ?oW焑6Zp¹j^j,1 whl*_ՆPtzgYSNIJ҂ *+=ax&WJܦXW L|rA0]U=:-3i8T/>+g=ugHd8Ye>Y&ָ FEWIOȳN7@n𧢵d},q~KMdc z)F0D(a?^t*sw[ߩ-Kk:ySbّ)G ^Lsm킷Q&CKʹHsid3zIv4RO6фW3&/0Zh*$<1:I"SՃ4b,ӆgK 7:e Mf&\-<^a{4QۂFzv6Qr{W~f͡O~1,?-} շ13i?X&|CV}L ,>Oq!:.<8~_XLSrH}Ik\)ݍ$F|^[n8wd_Y he&n时@U؇А&и؄e n{?OKD8:}F&]6;|8s_jnƼb-}Q3.R1m$b’9_f. Uu< 䔑Xc6 .0= ڝ$gdb{4C*FeS](f νVQ.K&TTPȶr. endstream endobj 212 0 obj << /Type /FontDescriptor /Ascent 962 /CapHeight 687 /Descent -274 /Flags 96 /FontBBox [ -218 -275 1112 963 ] /FontName /MJGMPH+ZapfHumanist601BT-DemiItalic /ItalicAngle -15 /StemV 0 /XHeight 0 /FontFile2 213 0 R >> endobj 213 0 obj << /Filter /FlateDecode /Length 8854 /Length1 13524 >> stream L4[6?>HJo~g8x:s7m/E\lB r뾼B$q?p+R,(QBފS db}voqϪI|b#" Fy`c1ãsaq- =:53/S⚌QN`Y A8BaSk™,3z!' vet+RoeZ4stf=g6|^FzVUmzonu:EYK#q39 vfQR[ LwmF pb_7hvKi˼-8?~r Rcmiې"@S9žsNϏx0֍ijSy-H#BQv^c=!@Y#+vELqUa)`` ѵ+XR'Ԟ;O\N;!<$Ѻ=52ХI‹lY]W4> A i 2{,d0όYJ&0~,XJ/K_tcw}):qޏWc4vtii7Hriэ1+fȠʃ`L:FSnn8R/-PglAQ;)-RZs7Ok&, *2l|reߑS;yW G]hSNJ!FiQm=EB{1ƷXwHyAЇc&GHzi gՙmhKXh[#iԁ^R St﹜eokpmr TN 9x!Joi;K o_Tu5eEy6яĉM8 @#l-h t$%_/; { _IEBYyVXHju?Fto>&aZ:6Y&2s u "sd/)(WGu aQ1>^Xi{N}d5]l"( Ƭ;G;:y_ 3n׻(WcNXNm0 0Bn4`Ҟ{ O%#G5$zy. Q 0 5iG0p=բ#PE*M * F$ #5aVXZ6[ x=!k] = ;[&mŘO"N6{`X܅F~ H9 '*j`P.~+75<s(3q{Xi%,! ]όJZ 줃T kB7UQ ]R{ |v:Z8(HΠkub1zoAsǮw|ɰ{LV =蒏AhJ@OVA||2QOy>}yui w@AV g^ɢQ6.0 XRTFW9,4$խϺ7]0\'fHb0ι e{0(.q~,XBp`[US%!xT%x(*eXU4_lyͭbmeӑs7',;B ,'D诠[ 5K `h77a(!j φb7N t1qi<z%#.]R*.%{Vk#g]~>q" *rZ._` \v~q%=ԷꔰzȄAOyR!0޻9Oy~@IWQN0O+.f| qKl#]Q3$g{t,GbqH s7].kiVdyɚbM Vp"܏X\9r<)'M(_&`v̏7MA7'gy<L!*<weYHN}Jg>kZ)1snKA͈Gh_o?7ɬL ka q Gj 6P!{0f3E5{҄x|^>w X.p?c`#-֜_AqZ燓/=cW` URQo xg:)K[Lգ0p[\0V5b,:oQ+#w -xCR2eDYĀݹ/dmqƝVUރ?U%${uJ%3eLV $ZǐƫoJ,he:ߚC!2[ Kq2$DhMeW0}.|fȨg5*YgfY(tĕ]w t\''EvGCڝa.r,v=MY8u:y@ g7CBc$c6.qm 1H=Gfv+UѱX_:^̽#'f"7"k-E\O?G 4!|jU ^rD߽v<]>K6|,wa`Ah?:<SsD2NS'ƴ&׹t-B=[(YKyu wh>=x%fʉӫ/56p܏Ѷ) C簹sDAjk7sٿ&.0, 6IeWVgh"MyUdV- l%?eeWz$T)N?a""Q:b?bF|z+;J{yW>dUދ"/SJ˟~,t%l2!aP̣晨&Wp2l=k: *Itl*׊#yWE7#>DĿto#@E2 dt%ل\/8j@Cdcr`^H|3W2{BLz^KuA 1 tTEVUb8-<*Qoe2;@-UuO%Ar 4vD!m2mvs^%y&$CfyT+\ iШ>EI:2~}AW 1C7Cfܬ08= =H}&xTfBC 1ӏ2Jz$;HG(b,XĊ"k~M`CV&>Ǘb ̐`xNXF,$[.VQһ_*]km!b#/=o' Dp߃XdD}*H̳hYz'j8 (ڹ@T n[DeBs$4!PP6?fL)&669 ōl\gK>#sr\wlgzº쩻*1j^Qts"1ϸ;8lk4*wBÊjEcsXRbd#rHG JƷu)¬ 7*aKǡ6 :>lIĀj׫Nd}>?"a/]TU лj m4MYWao2/yZ_ yH5R=T8o3!vg6bMqx)f3EPWS#/kƾŻtz*m/Av6 c+Y[ Acm(q>hk#rQ.lg,ȫ|T@>~?餦^7'#2Ɏz|5]L/b ~y~ +beS)[3J?MK E]T x̖pӯ!CG@M&8+|!aWdtEY0@W <$ tK0 l.nNQy3'V)& +g_mNc z mje{MUCb*87xԨ 2xquTS3^wFv6HlYGj M'MaZ h>Yk%t| ]Y7@:<()2)).g7`$$A}vMWe<4C 4U”2A\9( .oPouŖ~m?$.p)CRelLY|"ڏs\FwȄ Im/r3j\ z A>CSPͩ]%Rn(V0L} [.T(24eD,zlC=lH#F鿓1!5 HxaPp[[9U_P>||4X?f&.y}܀]Rq_ʍ|Άm8 KqYIz h6>\7xUөȊ4ϼ;ν3?r[ AlCTb6-ì6eD94} )_؅' -bL>*-HU|t"Qyh5䣾|FogB IePzXrBPYI1\.r7\x$ \@% ֫TIW˅"(vYZSL;{U@9|lXR,#5S;qo_U(GȍWCؐvocT{L:Fa"#YIyo_WŐwxҕ i^g{0{HXgG1!V(&3gFh: x@Y_Fv@c*ZM"#fӷȮc|mbG%gKl^iI~64y3A:pCؾiӔ"%{GBڈTP A8tZ ɃEӯD%;GoTh=HYźkwƉFC":VFqV)t=,(+oMhVŝ 884ʂ%5_f 6-u0)čoE0k MWÉk&=}Js9 ; \‰5d=vۋLay|&]/#{2V%S~0cO<9FѣV-g%MK2Er홪=.oT%DcjLABfs9Sf[T II?H!3YMIv_q}q4p~d0QSfm퐟I詿:4o'}gNF nFoz}iU|ޯE P+K sґ헺Qdp}Y׏ aoj&mWj.l|9 j!@Ś%vLL)=QPJic#&ջ5rW.c.io؟6Sn@AQhU_8nDaeJ=.rJQwGyJMOlP\Ooڤ8<\Nky_׋ M5ZxM7|[cƇl*>,~[-<ɾ;7"u_4@&rk۵ڡGȱԖhE'hkr@jKOS]mT| ?CM=Ul(F@OBFsB,@UBX}]P@ 8i7eGr`#1}u[$kΦ$$6N2Ψ&j[( QKx2ukFMoe&M98Qe' :å'rYh~~2rk "UrMvI=O׊ZA=_=4p"[ږZ;bdMova YޑGuۻf<:BT1)S @kkMvx͢P$C.}p~€Ho,F%|v}xED=zxK<3T/Jvm ߂L1}Pi{!'/!e=UߞN&*9fDBHq4,VG78]:6qtMo@۳+RGEUw^m$q2P endstream endobj 214 0 obj << /Type /FontDescriptor /Ascent 832 /CapHeight 578 /Descent -300 /Flags 34 /FontBBox [ -21 -680 638 1021 ] /FontName /MJGNBJ+CourierNew /ItalicAngle 0 /StemV 42 /XHeight 421 /FontFile2 215 0 R >> endobj 215 0 obj << /Filter /FlateDecode /Length 28647 /Length1 47192 >> stream ܓv"nL0 Ң#uNJVi+||_i%rԌ,/@Qa'.yfeLҦb'ܼd4:;J!ॳb>d XǕ U6~Z[*sRTs'Ð;PvvީI%Ӆhk''KzT v  _7x߽Iy" :]a悘z\klr_RNGDϿ8ʞaD Jj#"i RkH6sNDn=YIiJ:M4B|IĿe~Nu=m};[PV( Vrba_^Befߧ3ZVՒ|wͨ!TdϿ8iC.4Kx%)I_e ڿaĔfrf|{!PO'uCxG:A"AZ흢"c\6E T $EfR~ڮ jd~袜pAWfw U+Q5IPlw-JJjئQ:RF]J{t|Ԃ1LG  GbNY[\0wrɫ?sp|K'^}<|^Mr iqԮj}?>n!yšiCj>/W|h8 ֛}0OD~")o(繖 iPb?3 g SH8$]IhyUc JšKWΩ-SӇڜi_ޔt=G~Y9r7b'r[5B͒p\t̎:͑\_igXw;*%T6;$snU$ӻ ^h97㐑 i &}=i1v9tMV' fzdG'\xӲײ:;PN ;I/I̧XXƶo fT䇭cEr[r}nžzst.Ҳ$<ܬؠ rp_8SȈ -Ɗ;61yz+aaƕNOg,)Z?6PI]̺T,i,}ZD~;y@ˤ͂;c{js70 RVs[Z?z Pr,3%"@mPVSDۦ(J"gvr| Z roؚ^\8Y/HH`?£J?O[| [r7Ub̨c>*?.Izznc45/T Ft{f A]'6YXO)iȫ0}uM`~ݶCh͂Ԏ tm>32),# }Jā;M hRקZ_Q…ClQ͜)&+7pz _&cE^vc͑hV Fnuh- ;k3PxM4rwaT㣒 |b@}XX_}= 5ka4 ||!GN,=DR {l܅ЇZv"2ʍ6urwB#4*8+3'qXNa[|8{dceqCQ+h?PqA$b0_ڄ4sc2Mqb&R`KN?`%ᷡ4Aά Sp=9*V֙$DQ~%g E -X0TSѵ^jfrlE= 0]B |7 /jzUArR; Dr_&. 6O䄧zyY;g{Q{)1Ժ1.]3>,v$^c(ڷasܬvE:s 3Jm?/(k:W \hC!r06xL5 t|*Mj"d{؛ۋ e5QT1lS?.b%;:h'Uf:)ʾgahMϥ3dۭ#yQ@AN 󟇺Vl_G(KÝ+4u)KGpFhG &U4_g“\OMMPEVv?\1'LѴC+GĔ}Qp6]N? -{4 lR njVZY°*i/RFs4izc=-*k|v=M31bsNit/$dz^t! '귐];K((ܾ= [WF?r̸R 7vV3*eM;WxvԕeY>y=&hDPv}O}r'A-q:9J,SH-4?KHèf# !eT_'0&1F EbnuQߴa_^ۼwxsUfOGqWKaU 4[DdE-g-u{;Y8bz_NԯUu dLԉAsq wFk6WUV 5dž-!]-׺P^fxQ'u}WX.K5Z6 JSØ+>ލ U$*Okdn_3:}ֽqFŊnnlu2Tf̘ϟ{}m)6¬^W%_s|=b{=?f/4? D̬[W[3n0U߫(h u9W 3ƄB4m8i|L3HM{]xN7-}lۨr$wqp'LnNo(&T0RڼD&@XirBÑLM\G`аeZK~=&}XD8խB#I/VnVk54! -#qLwUGT԰'> C)5Re0ž~e/F'2<#!13\O3(⵶lhiy)^r rz>ݑNw{aFgw$,|_r}tu Fe <{!Q@W{ ǁ^\9u(nڭ>f0.ozTo~}Ih=%eR$) ȟ c#V@&^dU#K=8HƎ-堢TzH3  K*ois]a턊'i3ͷ81 'v k(HKJ+qKrZm/ĔUZۘW%{;̯01`$ \Ay YA/,h/ fC&L@ $ zd}I6ac}M7/ke7MR\^e~ |H;6xzm%">5۫V#L$j5z̏$橅]o(0<yNX [VT߱d\e*|T0h\8.S:~\i0 n֨~Uj߶iC8lH+%I0ㅎ+@̳@@|OBa$?92!^dx +eE_^lJVW5hI$WxdFicINGL%2[{wG^xmIz 3-t9#>Ѡ~]sgՌ`e )iftpXJDG%, ނBc J}kYaFmk7<4O$.!<ۡG@U{:єA,D'q }GaI Ga_[&[X-*0~R^kRQ0%z8qc8( ;}jAw/c%99^IJ`ŖUN$a$m{OV{İ.>N R R6mKXUZT ep>[AAq$D^;w"3;!{}՘Lz^PW._rn.ߒѧ\yˈϴ_a;O~1nC2а-DlE'&c2I'i!Q )Ank+Ծ}&]1űM'2қ`:B[#ZZPo9nOr`5;$) øF9(1^t)5u+Y>$(qhc12Y&JdVW*@=p X_3UKrgT dZ9sa,Em#jɟfkWP|U濉fq'Nw@ki\WZysf0&kZ+b ꡎFo`zR}½c`vF/;/[]K!J%2>;xEMƣ=gsZ;}x%> zjvvJ/3юLFd֚n;K^ZwϐTp5?LnMn {)A9s)RRCEtuo̱N@Z%xiFQ29Pz.Է\W4psNDۗÛ2ZgL剑V]=coh9Y2.SQBySe91LYLȃF8Ms *"7uڕb*+[բZ98f,@Eόoy5.:7y-&RRM٭_DNDIk'ɹzK9SSWM"#hh; 4ZN gQwwz,8/0_T<#%;LvԲlLEAkESՓ)\7{A1_֯) Mܯ V 1Ju6 3+z"rA6} ڋ4$9M&p~3ΟeEzY$_cOx-!)øTʧ驒.2yx?ɩF0lKp!Q1&|<7̃g5*VzN6p.+Ng+wm&lVD]M7PuH=.]_CZa4T=$yL NӊWy鶔 ʵ*0(xJۃHܛ$Gs+2\d/ u{= #@NТCb Hw*~I$* RdDϱ6,skV=>)$Fjiu53!$@ZX 8!qD]p,5$a Иʜ]\5û?pX^AmM"y}K)S&K9w\`=lx[M dtY(7/y-+rrSۢ}4,I%7E7#N+{T'fQk(O lhCqš+E(;UWvAP⁖вǁ/U`WP} j}^+_ԛPG>.DuCq7j˼p[;ϵ3J莘5u'uBF*x3F»ו+4ص] dPFOBڒ3)u]ZSf*,[}gaNSM\Qv|b2PfVWdz%]KDJ])*Fnj)]J`0sj=c<ƥs[+_#? H⒟dRlqƱlE*vabS Y;X w)/y(j| ԌA`)p!Wɦ$܏GV ş4FsXs}or_{')(YU>ݫ'A(ĜzL%qv 8rXTg c $ 4s!QvȒ;(y(3 s)8'[LHޗ]ےۋ3JϭY ecR׊0茭o&q@<|&xS}./p$$pJ ,%B1dH|,% nl3ipj)UZZpqh ^cCisD͐ 6V_b~KنNO KpZX%uY 1p, ji7ifNf;p2f8| ʯ%\b{ʅ: 7C2neT9W<=%R[.$Ah7RN~X~Y 3'.ĉpO $z\7-_ LOKPv8#d+K]g,A-s ;{*?w+@gf ,VR"IYT-jEt+& E8Fzh?.cdIQ#yuFZܰ4!JYyЏT@@^=%p*-זR0fF%wJNqolN` $\v{![J l JO[N&_-ZwvIox[ʭb=s4g[Vw-AIupVx`@ɥ($]h{mBV 2u!;n0wVZd:ۺ21f sbYqB)Gaƪ7L|f@ ęY+Q=N8lRĽIѳ! jș/?AO=P4'"'OC)e ur:';2!ev9Ζ_{mHeȤKSE:G|Լyn&'N[dAXA4^ j3 α/̈!AazQ/#1u=sC U)Ad/XG]q]p"yejJ8w)wp  !u$x>^Ctn5d= lYJO 69޸4xhwI%|ArXk(ΩҒ4^/3\;s| 'i1/!]" / |գ9dThb9A63L6vE;$wм5T=Po߰Q g% jY̬~w XD<ƭ5-XE3)lkqk,Q4VM?j/ʭmSzkU>-_䫬)EL{| $|J74BTb^˛b*oi>6hOeEFAd &U>6*F,eH̨ [wγcN> cFR"|܁3ggt+;Rvȵ5ą>BI,OύKﵛl6]K{4'R:).ٹ6U AR^ ]s p`OgS[`=#"=CCGOR|2b?6DdRYl{ O*#vzDtK X xgHpjdoy-(}+Ve<1E#]ۼ׽\J'/[l;mTSǤWeLD`@kշv+x,rBp!y0u9 ]U$TA aÂQ_> Y3R3+E,j]mCL_xpuw3Yt iٍ甫\>VūJb0CR6\+{`%&[;?dMgJPMDT+5)e6=[Z~1{Z|@ .:et!4d!;­s3#tMެ)^J?- NI"5AU.od;W'0[s~O0d tz -EZ'Ʃx3Pڂ8NKssN- ~%c'0#c+$uQ_ҔGlD4u4ΐ&t!mJ\v?G:_s%"ǜ Q? N 8h`ȧD7M$QHM|LiM5* #àLe[Z# zvEֱ,(S l \a@lWq3FV{ь/1.8:{O@眤ߊR&~Db._!O% JG!a՗x-s[ 姁 3% wUun {lG#νU^Z4Y JVG#28zKmc4R@'Q#Jn_ٽ!s|e0 GM=]ÚXOme¹W./|R eNk|{EaFH1}="L ?B/wF?p' _} |q`^c;Ca'> J+)5q4F7(fH:,vG0`sJqUK)+GEƢaI`wB4A**lhъVFwBuB jNnWaEEuӐF !(!ǓE6vI0舜{gۍ~_sx4hHȋ fL{Gg$a4 5URp'~̙ʄEsk&X\z>+cY>Ώؗ6o؄L 0&npjeEf9y>Bȉ8c'%lHR?kw&[r ?ȊP0Ӓix{Ż0"jl6>GJ,qbGP@xkX:oI3H(i<܁@u1,db=͂iT{P> ]CzXGHh!m{~H:|6ݤLBYhG0],9oG@)aX4l+>S*gd߽@+D<&mk;1@֔_x^³yY~VZv^P![ʂüDW}p% < )h/߸-ZBhY0RY7hs-TV^=/7[v- мh+`73Ě&[bQP$;:j$zuL5 'o8V5 ,4e7bMe9cc}&na.r!8Sܩ>^.&*[8Q>_!~/d$؉1>zP"'{5yh4` KK~3EyO:*E|EvIQm0n^-z!nN=B̘9&;uqmx*9L](ԍ5h sMk(W"t7&A. s.| {cX?;ng' 5l4 Ps/._ʍ&A[/i.ڟ6 !fVui)iTf*_P)cGtA.N-z3b r8EeۘBvl `O{EIx 82!PTsJ(b-߁( ckk+lM-Z+饼WH{ ޤa3OY*x,Y2/MCd.>%2tmRİ2>e꯬ GT+J:86FCՙkf>T,dm?IZlNtDgb50ա^VzC/З:ͫbE=a(_TQfB_fXi5xhqZ4Oh^Fw~3$O+u]Y*g80PLG,=,Ug}I0 ɣA7~^e _Hڬ]QvZO kk"jļSnOWEWt&V2aɣ}v-L)H}u tk{|CɦWpSk4~kƦ]jk͔q}Mpj|haP.~_c &~E++v{[ t"#@,7cEeф̩KIȸ *?Mh7lY.J\2Έ5zjI0wF]L8㈞ɟ<Ҋ{H.5_rWJ}] s=(Ϊѹ3:MnY&pa-@,dZBqd`U`wK]3x|-r |ff񾼗v[Y~J۾v qy^W<*n|H\d}b۪lܮkI5P'tJ%WG| oI>UJ?q%(%i-fj{{>qd˓UɊ( 4$?%{| R6C{Nto%P.oY_r\+ IR<={+ws[5fy_ȹXe,Ъ)1ÈP]%˸tUڍC-pֲV-7F]7{3x3Z7&itZ;Snl_ MРReFL@ fV F?*t_M^hX:m%SΤQ^5?pR S}Rh9_ peDC]/ا) !1G{}H?.>rsńx̷*+T%)Tfxk>opwz54OeZ2BVzo&<G|SF0q)Z#ޓ,z1"{RꮅU jֵ?|X1Ű7v :90:M=l3ۛ6Y^ȪDz(8;i_D@6QE#)ץ/MHTI&2Dd|X n6 ⪱XO&O!];qjlfȉt2/Qnɕ "vkK]H"xMEtV9q%y͜,ny}cE|-w\-^5W Fgc)3kCЃ ==iDNQ-96(1!z7~o#:kx* SpmMD6irM"r,Wr-(Ț0aKTDPqCjPٿÁ';Nm<`QpoNe$}a") i%C3a?Ś~ꣻRRm<ɪVSތ.ö泶FU^o: l@)' z01Á4d|f9h,(`5({8H5M+hi*-\+lvXE\# ZFLN%]s=CIC,A4g/s.H ȿ?#Ώqy9sE">v`9pkZjӖ *Z[Z ѹ<5B V <diwR쐋@_ާKX]& l^({%C#աճ1DyU|P;f [*,+['sm~oG}T}?AXzӽ|o3okCT3-J*qWê&xR.9U02sWz*sNoPѷ=p+K3ڥWHE5D6 9Mnrfͪ=Xt(?vcHeYj7_:1>? Iι Y']\_7c[X_ g<0E;#81y|=V`QJB5 4B;Nh̾\yͺl *~^QmGRmr*iYF[i V3 斕rDdM$p+7sID1~' ۸XDy<\a ZE.o+.l9Yw'k(}:_(+.[..^\%?XpũX0HoM8\[0bZ!@-h,/18}៊r{nY\]oa-$=^fMPKXZ1P $PObL?ev{@u4Ҽѻ&?*h[=f4hUB0%>!P;׊r}/*@Emͷ(7PGi$ybC'Q0SKS%%%z@ ΄<oƑ81@ 9nU{FPM[`!sa7 T3 {}nΒo{mLg[~mE "&.6pcIHKuRQLYbRMQG ϙVe63PAN*KcWU@#'bX>!*#:ʍ_d7}!"%*^)`fZB:]+s,6JƜDRl/ <uM13^ (&EDbG`"dn(ZI 廩 <)FdBE{/ޱE$PgWyE{UW?0RdZ")~o^ dSŵ.3A#RI5`F{;e-u`yA[wx"U`BR;uDrOx(*%J4yQ3m]DL |RZb:>L[%90I$"2YB8 [L|VND#@hU3`,Lj6<,!Už#[}P&RHF]}#u)@$z %U3ޠ#FKZF/wI 0i3!"+4#,3w۪L:ŇAi5 ?yEaMQ#x1SCa|{>V? UR˺'<"/~;LI?솨mCw[Niuo~Z~tZ i ~+ ҿ 3fr[2L]'"o '~×~f[,>dNofk~P' FLvBgj%g#~{(DW 4l]Ʒ~>48r2 x"g/*9;n2/:b`h hBk[W*ӞɋNŻ!bLY0,MJ{UJ0ʖJPڕ*RαC+M<Gh(7;%k|'Nd4E..n]0GϖWt.z m8+-]zs*˙9s=zD]o鎄`%{,m .dqꠋz _y;W 2sZi@YN8_Nϖ)__ k-"j7<~)sm8X0WᩐEkĒodt=g3 1f zGV9Ni|N!P^ѱiy8ۏj%uED{s\kFZyuJ1E>('h5Կ8yILҜ@נ$a)~c^pJ-I-%pD@mAEe!]$2eY5 kovg[pIK).U<7d&vq[Z8IhNqgk]"?wj$92i$$NH5gr2&z(D&x]x>C XM쉰tX(;FGBa#ti/mU}´,`$qOloYiPX /qq_)iB\XO5 ^F~B~u_Ʉ|7%&=op!ŰsH]B/YnRrjBR"a>]mHH0RЛ&}e_J!܌YQ $?.ӆGu79rVrLGx1pO6K" c|ʹ;uxNb;݋tMƱ*,/%5bC,:2LI'FA:EA1& pϸP`"23yJR-ևvr.O(IL?퉪c1_9&R vrP_1ok}BkF)z>bǫT}o]R'co2Ď~Mv&; "*~MA !Ca -~qȄi@%UHFk\SJL]9ra/97jݦ|}&@2?nZJsj82'z[[`ήM:UFX& h/3C$:IB؊qػ O z#"q: &F#Y' CuX٠41#vM425(\TUnY=W%z>ggWSxe'CgL =K(deex]y3< 4dkS*N.WA 6H ~K=KJ 4|QVEoh(tHW:3ͶU%~;5JxV6AQrDR$sn=)%Z_c3&4O+Z )8TE1u&9^@[gl BFƈZha\nO=hyxYG̗[.}`ks7 xlL/*|:{d훍m nǝ_F@5$0浟潤?h*׮GL\-!4IZ]7Ƈ\g?I7uJXy23NgT|.;*F.=4ϽŦ#08 nlHMH uBB)(CnV~BpiW^n>R:a%?WZ `4G|xZ6$=Lѹݴ rPV[PZ! qg`H:hW8hH+k(eS9MkE*ju|d {q-5s6q!`EW^Y9i.- Ht#n6 YYZ;JJB Rvl~5 iNq 6TjSDh ; z]9Ɵ7xJ •SZ5l*Wedt|QPQNDU;jy|x.hfHWIFO:.3{WyUZ`Nm3J,+!}!'f<ӗAWA!4-T21= \[pޟ։juT !O# \A3rG괶Mc{߂@`&(!mOqHrLP0|rɮjXT4YQts83232l-ڙ9HvC]lpUà /1$욾;;]S)@p%0e~ B2dG{NW!y70KsUwѯĊ@3͟: ,E ;IڒbV( ôCwf+*iS D-c埱jʕ`TV^%>o9w'ǚRNz%v&>KJp D%9O-i~t22#H.u*U'lxd)azYˁaVIhVu] ZqCQx00ͭS:=='}fCm$-7 @ }(ƒEnO4t(I<|>k.ڶ_%IC _ x+Ss`_Ypkh_zƶ ΂'ȥ<47bn8;KM`Cׇ^WIGX ~ >c=r6j nCV_&>}OӢun9^kƩu\MQOa.O YQlx /+q Y $4jEҵS5%]Ir4}VT1?֭ m2R#}hJ: )RJ fWekg/rG`v-Cr۽6 AS{"`5g79jHKzoIAYK̀m 4eC~r4uȈ?&4I~ (Z!J4A#Ȑ;S:d?P dw\NQ "6}]beݳoQQ sՇ~T&2x"|\Yׂ,O" y|:u9OjѠp*:( e9X,I.+]MsKtJ8j"0z|D"a'n_)"1[oM5 ]eLߗ&+2cLmtͩS; ̣3v{,dСB{41 !57%^y|2vξ8wʁ$QGX\zcR(tDL–66 i8T?/\i4vҽ$I:_ahr?J' o0T4y>9ڞӷoykRNQpO7MMNJ#UR9 GT_Tqs>&KBϱT7(rբ\hayP-wEZ[WB'D`P 0 xjd#(q?̈́#I Na/.+``wو(`<j\N߱ q(\NKY[CJ^[v'jja*:|1t^ڕ4N%Y=.Ƅamx~搴DA9ME++Ɗ}Sej◻ 'Of׋Ilg؃cyJ@2L31g`HXD| Z_q1s);Ax#);>#gdY?m|, i(8775 "?t!@6ׁ_2ƨmZȊ=vJ(i\`5&c m(!>hq1j0g&H0G)7 R:qb G.M/D9Iϑ#jmzޟ-.v{"sM,%''st:K%`lFrRh!DfXe~7tIi֯+ijՏ%ɇn㮙zB.gM GyJLwi L7wh+D׆#/Y [ѐ˫cz.ʘtEgiTBZƔ/oDO"<"yXdFR+vM*U:`Fn$ KϤb7 e%VUՏN;kl,GbA`])io-B`3G2݆Gm |o՛f/8K!| fE+E' Ue[s˻*_{Kή48tyVTCQ E[1ᅤ 5kAA** [m]8 õ@6;~/[% WgMKY͇y̏K8c&tDL͖3 GoL){~@pNDe|uscA7w6'>@ZKO^\wR#sF{ ".GWv* |Jso ҊrhRA[Gc] ¯Ta*)9&GqB/@nJ2~C& O-Q{Y(D8x3}<?R@ОNLW^ tN&SL"t7k,c3- Dacw冽ߛA #ݨ5. UK1kCQ"}hf$3g*֖EfOK -&Pۯg3W[`Ѡ,!tRLfF4@"arMIMJ\"(<?gDQc;K޼w a+t) Q86HB`DGVN9 *%&̆($. Wb P*[ᤚT"G75ϟCˏEEVdhɄ `p^Tm͢9|v9Sb$3dh "ORqjM"y/Uʼn&B=xPO߯YtdD#LQI4wY ފ5`lSp} ?^e"msQ#^BعC0J{wPk^T51wncqN7=CvOЈ-'k}D=pz +؏&YW"NzTB p8g`*Wh@v]IXb)smF?6Kl WdC)OX6A&AI[uq1xF ]#J}܁|jʋ G8R~XuZ$jubFWa$Myp06 VCmCQ;s9I<]u`1~gVc2'(aUL%ԜtN&zV_.{(4r*U po?ʘwBVI+T٢onvjş8 O7}WϨLZoG_ [m>Epu鹦4ڑ3hލ J*R!~enY=fu8 | an$QSK|'|51C981ѹzG+YJ)vڨźՇBq|H# =7lM1U*ضF"XXpɹ.4R̨CJ =t,u^jGa!k)\K(Y͊VS75%po\2/1}8 Ҷ)=yNGK2]A,=UjrыHk/=k.%E8W!Z 6bz_q,qb#AQ|w?%dPp/T/5IxHfWfVz4}b]zf*oqX^C,߶bQvJ[ׅ B 38|<g; tb!8HXV<6 Ջ0 "\2JL? H2= itB4TL+5?gEaaPhbt-Y>Es(̅\q.hc誉[ײCnZ#XY>2Pp=s&(=F55NkgfU$ 2F x'7470\!yt+ K_05,")j(r7xj!#k= R1'83( R| j(QO)581]aJx!754b,S7ֱx;Դ^ u`>N06s(hDg 7σ3'/U!9.ĽRucF*!T+m-^h 0'v>d E1)A}~{ bie30ڋ\OkMa3* NͰWɲ էa\Xewᇰ\(yp4 gq'̯SoIǀ—ki[ӹG`GZ5n|j΢Sթ-U|AQb:4 X?^"ԲIGdQ>-=I:*ȣoIϩkCYox`([J(ԓdq-ve*pk_}v1 Kk+Y_x5{'="fѥ2W8;3mcl]|s .N@ DzNj(6iG#c"Nj SZn#9.yvSoꁚ,B+UIDy0W{^*?)g,p7])jk7>MU߶.(`v: Q7j;K{ۓc?L{s/ Rb5z2 JK#*IUCEh>]U #9?r?4a_6I`mF*b@) ej՝ݻ> 5)P*ݵ?B:iAuƕZ}u,0e+WQWKiS< jV)@{@}>!+F^ġ~}8 B5m>IrP{vA|TSLD̈EҊ%fͽ%^"a}BÌLXeeI)`tNHݵ! fCE[ `w/5?'"/4LWJhpRI7(~=- l}z(̂\ƔU;k8Nx B4Ͽ;$7)lf5k /m/܀ܸæ8b>@Bݭ~Az㣳f pfU3Rx72" z4B3ї1+65ͭ5hlXv~>K2޼6ڢHض>V%J3Ixiɽ_wBOct2GSn /N_:EA^~Ϙ='1 6,!u} }~ l?m.Ӫ\ʛˇݑ]2ՇWnNe*WVEoOW_Jta)Pbt“ͅs8pmE|q>K(}k#=cm'bB|Y2ۺ)LL[%[!k[ߣRFUFMÝĶ H{Z@&̈7S7bF`#d*3m^QӜ҉oۮYPXbjA1XR'qoLe{®eS`rvLTL;jsVۆ.alEB ˍlI})w.iө2e^ )_wkjmF+>M݌wnQCsEO[%jԸE`tPDr ~i />~UY8.=5h*tm&{NI+f/-P]#8uo (dI6#W1vظZy+}_1o?}#Αj.SI_DˈU8d&s&w@'Exm_P]N^m%<(V|p)a,b~M&ΣvK2q tEHRqƅ"&":C"E17S=݊yEnx@ݓ~F>ڜtQP`S҂ pG3񬡶K endstream endobj 216 0 obj << /Type /FontDescriptor /Ascent 898 /CapHeight 0 /Descent -210 /Flags 4 /FontBBox [ 0 -211 1359 899 ] /FontName /MJGOJB+Wingdings-Regular /ItalicAngle 0 /StemV 0 /FontFile2 217 0 R >> endobj 217 0 obj << /Filter /FlateDecode /Length 2780 /Length1 5060 >> stream px 6ղVľ}0`a!& H,*Pl[ R)>S0+}e0GdUĄPݐh> H,d^7pɆ wqwI,N %-%)]r^j i9枭>)萯#P)ARwhho%L&Z͵Ȇ|L9\|T.Fn.e à]fR/mMKFa޴_H$YrLS\)b-4V .PFh%Mrw6lvfPxaq>? |$4g1=Qo 0k7tXDB@`0$gU0E; ^ ~As9ѳ 3bD7xr^w} խd~=Myxީxe&D8FN$ a7.b)>m Q<2vH ==j|ݥVԵb48sp4iI֬ԡpkXy>u|WV [dx#b:^!wEpbG8QT}ro7 '1 -D5|ʬCغ lhnu_eEuyfZȁ#u-m^AkBE\o ]TTݺ oZ&sfy8Jn>eN(#6EO<6ӗmk߫&v')싞P.sFҩtn I(M=oM\jx*zoE) G-?]z,R+XGZMSb>i(nwk{-y%BC{O\B#Y=HW/n:w,LJ9 bSJ  zKTߙLTr@|/my.7[s`#.>~TczwExYm2 FZ7)!Y~~Fw/X.d^⁖ F] @*, Y@Uu hO7.m&9loə1Y@,FS JQ53.CkȨl*k x 2r{uƮ3n+}f3S[(I9Jx"^ ~7 w<k cH;6KϺhHZ"!/6Ƙ "ǮalHUiC7gz!4?ەN# ]nU=(<dA]kĚOL~^4.5|DA?} BO!oHpTQ{,8MQ.llleQn㳲Zˋ#/ OUDAn#Oonc/{/Ov#&M+LZ`ׄG|26X&g4|:D{!cnِSMzBk1JF{V͍G|[R-> /DW 1000 /W [ 3 [ 250 ] 120 [ 459 ] 148 [ 790 ] ] >> endobj 219 0 obj << /Filter /FlateDecode /Length 238 >> stream neU]} !$O`qEx TeLTMh9xk|NwGߑv4^J2S==k9SgQ$ͯTcM dq(3sdNJ f~{MkN Di}~Ҝs:5R$P8* P9ݫg?y-I13lJA|qh> /DW 1000 /W [ 131 [ 457 ] ] >> endobj 221 0 obj << /Filter /FlateDecode /Length 216 >> stream suOo͗mI0y@DUr$\6>Ïs#hdt\c΀9SZ֙[5+o=ynù\B >eo3q,/n"%3έ l2ѕoB9W{_[=%f9^|/l_#vTQ\,p3]uƢD d= endstream endobj 222 0 obj << /Type /Annot /Subtype /Link /Rect [ 370.5 307.59052 496.0498 319.99518 ] /Border [ 0 0 0 ] /H /I /A 78 0 R /StructParent 5 >> endobj 223 0 obj << /Type /Annot /Subtype /Link /Rect [ 177.77991 426.32657 228.72453 438.73126 ] /Border [ 0 0 0 ] /H /I /A 115 0 R /StructParent 17 >> endobj 224 0 obj << /Type /Annot /Subtype /Link /Rect [ 442.92068 401.96515 467.7345 414.36984 ] /Border [ 0 0 0 ] /H /I /A 116 0 R /StructParent 18 >> endobj 225 0 obj << /Type /Annot /Subtype /Link /Rect [ 177.78 389.54486 285.68384 401.94952 ] /Border [ 0 0 0 ] /H /I /A 117 0 R /StructParent 19 >> endobj 226 0 obj << /Type /Annot /Subtype /Link /Rect [ 284.87924 340.88556 354.04327 353.29022 ] /Border [ 0 0 0 ] /H /I /A 118 0 R /StructParent 20 >> endobj 227 0 obj << /Type /Annot /Subtype /Link /Rect [ 205.26042 458.42511 247.22876 470.8298 ] /Border [ 0 0 0 ] /H /I /A 156 0 R /StructParent 33 >> endobj 228 0 obj << /Type /Annot /Subtype /Link /Rect [ 403.92032 637.52484 454.8624 649.92957 ] /Border [ 0 0 0 ] /H /I /A 229 0 R /StructParent 42 >> endobj 229 0 obj << /S /URI /URI (Lj!ʷCLY6l/ۭy9J) >> endobj 230 0 obj << /Type /Annot /Subtype /Link /Rect [ 387.96072 576.50519 415.01813 588.90985 ] /Border [ 0 0 0 ] /H /I /A 231 0 R /StructParent 43 >> endobj 231 0 obj << /S /URI /URI (U[QwH2_1@T-8uirwp) >> endobj 232 0 obj << /Type /Annot /Subtype /Link /Rect [ 141.78 612.80554 278.47897 625.21021 ] /Border [ 0 0 0 ] /H /I /A 233 0 R /StructParent 46 >> endobj 233 0 obj << /S /URI /URI ([{W+ςj&\ngݿ}eW`FvHaVVwagadc) >> endobj 234 0 obj << /Type /Annot /Subtype /Link /Rect [ 247.50038 625.16516 330.35486 637.56982 ] /Border [ 0 0 0 ] /H /I /A 235 0 R /StructParent 48 >> endobj 235 0 obj << /S /URI /URI (_T}30H߯u@ƕLz) >> endobj 236 0 obj << /Type /Annot /Subtype /Link /Rect [ 335.87988 588.80518 410.89264 601.20984 ] /Border [ 0 0 0 ] /H /I /A 237 0 R /StructParent 49 >> endobj 237 0 obj << /S /URI /URI (?35Ý}eZmjH-C) >> endobj 238 0 obj << /Type /Annot /Subtype /Link /Rect [ 307.07996 654.28491 446.17291 666.66956 ] /Border [ 0 0 0 ] /H /I /A 239 0 R /StructParent 51 >> endobj 239 0 obj << /S /URI /URI (N5SH0Zē8B&\\ԔvW⚼\rA&ZU\)P\r) >> endobj 240 0 obj << /Count 31 /First 241 0 R /Last 242 0 R >> endobj 241 0 obj << /Title (ˈ<իkP) /Dest [ 74 0 R /XYZ 0 686 null ] /Parent 240 0 R /Next 256 0 R >> endobj 242 0 obj << /Title (\rgcywD&ZC\n) /Dest [ 189 0 R /XYZ 0 686 null ] /Parent 240 0 R /Prev 243 0 R >> endobj 243 0 obj << /Title (@;nF) /Dest [ 185 0 R /XYZ 0 686 null ] /Parent 240 0 R /Prev 244 0 R /Next 242 0 R >> endobj 244 0 obj << /Title (h$"iW;-Eb) /Dest [ 182 0 R /XYZ 0 686 null ] /Parent 240 0 R /Prev 245 0 R /Next 243 0 R >> endobj 245 0 obj << /Title (Gށk\rqo!-xG) /Dest [ 178 0 R /XYZ 0 686 null ] /Parent 240 0 R /Prev 246 0 R /Next 244 0 R >> endobj 246 0 obj << /Title (/Omk!GZ) /Dest [ 169 0 R /XYZ 0 686 null ] /Parent 240 0 R /Prev 247 0 R /Next 245 0 R >> endobj 247 0 obj << /Title (&"32k߲E}pLJ9) /Dest [ 163 0 R /XYZ 0 686 null ] /Parent 240 0 R /Prev 248 0 R /Next 246 0 R >> endobj 248 0 obj << /Title (cY7X QF) /Dest [ 140 0 R /XYZ 0 686 null ] /Parent 240 0 R /Prev 249 0 R /Next 247 0 R /First 250 0 R /Last 251 0 R /Count 2 >> endobj 249 0 obj << /Title (=U"?&s?u8`) /Dest [ 131 0 R /XYZ 0 686 null ] /Parent 240 0 R /Prev 252 0 R /Next 248 0 R /First 253 0 R /Last 254 0 R /Count 3 >> endobj 250 0 obj << /Title (ݡ Ax.?1B]) /Dest [ 152 0 R /XYZ 0 185 null ] /Parent 248 0 R /Next 251 0 R >> endobj 251 0 obj << /Title (XP`>q@) /Dest [ 160 0 R /XYZ 0 714 null ] /Parent 248 0 R /Prev 250 0 R >> endobj 252 0 obj << /Title (bòA,>TfF-~0k1-) /Dest [ 122 0 R /XYZ 0 686 null ] /Parent 240 0 R /Prev 256 0 R /Next 249 0 R /First 257 0 R /Last 258 0 R /Count 3 >> endobj 253 0 obj << /Title (ׯxxp[*NtS_ާ\\BM) /Dest [ 131 0 R /XYZ 0 476 null ] /Parent 249 0 R /Next 255 0 R >> endobj 254 0 obj << /Title (݌h]j8i3dh) /Dest [ 134 0 R /XYZ 0 198 null ] /Parent 249 0 R /Prev 255 0 R >> endobj 255 0 obj << /Title ([F.QX:\nQ,A4) /Dest [ 134 0 R /XYZ 0 714 null ] /Parent 249 0 R /Prev 253 0 R /Next 254 0 R >> endobj 256 0 obj << /Title (+_2@' \)mʨƥ\)Ӗ+}6) /Dest [ 79 0 R /XYZ 0 686 null ] /Parent 240 0 R /Prev 241 0 R /Next 252 0 R /First 260 0 R /Last 261 0 R /Count 12 >> endobj 257 0 obj << /Title (-5"ՙRɹw$SDYLOZ) /Dest [ 122 0 R /XYZ 0 402 null ] /Parent 252 0 R /Next 259 0 R >> endobj 258 0 obj << /Title (Q Wr\(^'}IZ]JDl) /Dest [ 128 0 R /XYZ 0 650 null ] /Parent 252 0 R /Prev 259 0 R >> endobj 259 0 obj << /Title (@ڹa`Bl#L) /Dest [ 125 0 R /XYZ 0 389 null ] /Parent 252 0 R /Prev 257 0 R /Next 258 0 R >> endobj 260 0 obj << /Title (xz~uz) /Dest [ 79 0 R /XYZ 0 500 null ] /Parent 256 0 R /Next 267 0 R >> endobj 261 0 obj << /Title (Q;dZ0) /Dest [ 111 0 R /XYZ 0 301 null ] /Parent 256 0 R /Prev 262 0 R >> endobj 262 0 obj << /Title (,A![VjQB\rJP%%vol|@uFy{\)) /Dest [ 111 0 R /XYZ 0 564 null ] /Parent 256 0 R /Prev 263 0 R /Next 261 0 R >> endobj 263 0 obj << /Title (rx{"@]6v t) /Dest [ 102 0 R /XYZ 0 459 null ] /Parent 256 0 R /Prev 264 0 R /Next 262 0 R >> endobj 264 0 obj << /Title (-.|K nl28 ;nu5s^) /Dest [ 96 0 R /XYZ 0 714 null ] /Parent 256 0 R /Prev 265 0 R /Next 263 0 R >> endobj 265 0 obj << /Title (Wo2Ɔ`_~d{\nx) /Dest [ 93 0 R /XYZ 0 405 null ] /Parent 256 0 R /Prev 266 0 R /Next 264 0 R >> endobj 266 0 obj << /Title (=saJJy) /Dest [ 90 0 R /XYZ 0 284 null ] /Parent 256 0 R /Prev 267 0 R /Next 265 0 R >> endobj 267 0 obj << /Title (dH`PWY) /Dest [ 82 0 R /XYZ 0 714 null ] /Parent 256 0 R /Prev 260 0 R /Next 266 0 R /First 268 0 R /Last 269 0 R /Count 4 >> endobj 268 0 obj << /Title (.,~U.m8dM!GEF) /Dest [ 87 0 R /XYZ 0 715 null ] /Parent 267 0 R /Next 271 0 R >> endobj 269 0 obj << /Title (2ݯ8f!B{ DH`|e) /Dest [ 90 0 R /XYZ 0 435 null ] /Parent 267 0 R /Prev 270 0 R >> endobj 270 0 obj << /Title (2E- ,v>T) /Dest [ 90 0 R /XYZ 0 715 null ] /Parent 267 0 R /Prev 271 0 R /Next 269 0 R >> endobj 271 0 obj << /Title (I1I6*9<) /Dest [ 87 0 R /XYZ 0 322 null ] /Parent 267 0 R /Prev 268 0 R /Next 270 0 R >> endobj 272 0 obj << /TextBox /Div /Frame /Div /Footnote /Note /Endnote /Note /Shape /Figure /InlineShape /Figure /TOA /TOC /TOAI /TOCI /TOF /TOC /TOFI /TOCI /Superscript /Span /Subscript /Span /Strikeout /Span /Underline /Span /DropCap /Figure /Copyright /P /Standard /P /Inhaltsverzeichnis#20#C3#9Cberschrift /P /Verzeichnis#201 /P /Verzeichnis#202 /P /Verzeichnis#203 /P /Textk#C3#B6rper /P /#C3#9Cberschrift#201 /P /#C3#9Cberschrift#202 /P /Program#20Text /P /#C3#9Cberschrift#203 /P /Tabellen#20#C3#9Cberschrift /P /Tabellen#20Inhalt /P /API#20Attribute /P /API#20Description /P /Important#20Notice /P /API#20Function /P /API#20Method /P /HTML#20Vorformatiert /P /License#20Title /P /License#20Subtitle /P /License#20Text /P /License#20Section /P >> endobj 273 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 0 /P 1278 0 R >> endobj 274 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 1 /P 1278 0 R >> endobj 275 0 obj << /Copyright 276 0 R /Standard 309 0 R /Inhaltsverzeichnis#20#C3#9Cberschrift 316 0 R /Verzeichnis#201 318 0 R /Verzeichnis#202 325 0 R /Verzeichnis#203 332 0 R /Textk#C3#B6rper 414 0 R /#C3#9Cberschrift#201 417 0 R /#C3#9Cberschrift#202 430 0 R /Program#20Text 434 0 R /#C3#9Cberschrift#203 473 0 R /Tabellen#20#C3#9Cberschrift 520 0 R /Tabellen#20Inhalt 524 0 R /API#20Attribute 740 0 R /API#20Description 742 0 R /Important#20Notice 772 0 R /API#20Function 806 0 R /API#20Method 833 0 R /HTML#20Vorformatiert 1190 0 R /License#20Title 1228 0 R /License#20Subtitle 1230 0 R /License#20Text 1231 0 R /License#20Section 1236 0 R >> endobj 276 0 obj << /O /Layout /WritingMode /LrTb /StartIndent 0 /EndIndent 0 /TextAlign /Start /SpaceBefore 0 /SpaceAfter 0 /TextIndent 0 >> endobj 277 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 2 /P 1278 0 R >> endobj 278 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 3 /P 1278 0 R >> endobj 279 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 4 /P 1278 0 R >> endobj 280 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 5 /P 1278 0 R >> endobj 281 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 6 /P 1278 0 R >> endobj 282 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 7 /P 1278 0 R >> endobj 283 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 8 /P 1278 0 R >> endobj 284 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 9 /P 1278 0 R >> endobj 285 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 10 /P 1278 0 R >> endobj 286 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 11 /P 1278 0 R >> endobj 287 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 12 /P 1278 0 R >> endobj 288 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 13 /P 1278 0 R >> endobj 289 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 14 /P 1278 0 R >> endobj 290 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 15 /P 1278 0 R >> endobj 291 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 16 /P 1278 0 R >> endobj 292 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 17 /P 1278 0 R >> endobj 293 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 18 /P 1278 0 R >> endobj 294 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 19 /P 1278 0 R >> endobj 295 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 20 /P 1278 0 R >> endobj 296 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 21 /P 1278 0 R >> endobj 297 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 22 /P 1278 0 R >> endobj 298 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 23 /P 1278 0 R >> endobj 299 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 24 /P 1278 0 R >> endobj 300 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 25 /P 1278 0 R >> endobj 301 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 26 /P 1278 0 R >> endobj 302 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 27 /P 1278 0 R >> endobj 303 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 28 /P 1278 0 R >> endobj 304 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 29 /P 1278 0 R >> endobj 305 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 30 /P 1278 0 R >> endobj 306 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 31 /P 1278 0 R >> endobj 307 0 obj << /S /Standard /C /Standard /Pg 1 0 R /K 32 /P 1278 0 R >> endobj 308 0 obj << /S /Standard /C /Standard /Pg 1 0 R /K 33 /P 1278 0 R >> endobj 309 0 obj << /O /Layout /WritingMode /LrTb /StartIndent 0 /EndIndent 0 /TextAlign /Start /SpaceBefore 0 /SpaceAfter 0 /TextIndent 0 >> endobj 310 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 34 /P 1278 0 R >> endobj 311 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 35 /P 1278 0 R >> endobj 312 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 36 /P 1278 0 R >> endobj 313 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 37 /P 1278 0 R >> endobj 314 0 obj << /S /Inhaltsverzeichnis#20#C3#9Cberschrift /C /Inhaltsverzeichnis#20#C3#9Cberschrift /Pg 4 0 R /K 0 /P 1279 0 R >> endobj 315 0 obj << /S /TOCI /C /Verzeichnis#201 /Pg 4 0 R /K [ 317 0 R 2 319 0 R 4 ] /P 1281 0 R >> endobj 316 0 obj << /O /Layout /WritingMode /LrTb /StartIndent 0 /EndIndent 0 /TextAlign /Start /SpaceBefore 11.89999 /SpaceAfter 70.85001 /TextIndent 0 >> endobj 317 0 obj << /S /Underline /P 315 0 R /A 1705 0 R /Pg 4 0 R /K 1 >> endobj 318 0 obj << /O /Layout /WritingMode /LrTb /StartIndent 0 /EndIndent 0 /TextAlign /Start /SpaceBefore 14.2 /SpaceAfter 0 /TextIndent 0 >> endobj 319 0 obj << /S /Underline /P 315 0 R /A 1706 0 R /Pg 4 0 R /K 3 >> endobj 320 0 obj << /S /TOCI /C /Verzeichnis#201 /Pg 4 0 R /K [ 321 0 R 6 322 0 R 8 ] /P 1281 0 R >> endobj 321 0 obj << /S /Underline /P 320 0 R /A 1707 0 R /Pg 4 0 R /K 5 >> endobj 322 0 obj << /S /Underline /P 320 0 R /A 1708 0 R /Pg 4 0 R /K 7 >> endobj 323 0 obj << /S /TOCI /C /Verzeichnis#202 /Pg 4 0 R /K [ 324 0 R 10 326 0 R 12 ] /P 1281 0 R >> endobj 324 0 obj << /S /Underline /P 323 0 R /A 1709 0 R /Pg 4 0 R /K 9 >> endobj 325 0 obj << /O /Layout /WritingMode /LrTb /StartIndent 28.35001 /EndIndent 0 /TextAlign /Start /SpaceBefore 6 /SpaceAfter 0 /TextIndent 0 >> endobj 326 0 obj << /S /Underline /P 323 0 R /A 1710 0 R /Pg 4 0 R /K 11 >> endobj 327 0 obj << /S /TOCI /C /Verzeichnis#202 /Pg 4 0 R /K [ 328 0 R 14 329 0 R 16 ] /P 1281 0 R >> endobj 328 0 obj << /S /Underline /P 327 0 R /A 1711 0 R /Pg 4 0 R /K 13 >> endobj 329 0 obj << /S /Underline /P 327 0 R /A 1712 0 R /Pg 4 0 R /K 15 >> endobj 330 0 obj << /S /TOCI /C /Verzeichnis#203 /Pg 4 0 R /K [ 331 0 R 18 333 0 R 20 ] /P 1281 0 R >> endobj 331 0 obj << /S /Underline /P 330 0 R /A 1713 0 R /Pg 4 0 R /K 17 >> endobj 332 0 obj << /O /Layout /WritingMode /LrTb /StartIndent 56.7 /EndIndent 0 /TextAlign /Start /SpaceBefore 6 /SpaceAfter 0 /TextIndent 0 >> endobj 333 0 obj << /S /Underline /P 330 0 R /A 1714 0 R /Pg 4 0 R /K 19 >> endobj 334 0 obj << /S /TOCI /C /Verzeichnis#203 /Pg 4 0 R /K [ 335 0 R 22 336 0 R 24 ] /P 1281 0 R >> endobj 335 0 obj << /S /Underline /P 334 0 R /A 1715 0 R /Pg 4 0 R /K 21 >> endobj 336 0 obj << /S /Underline /P 334 0 R /A 1716 0 R /Pg 4 0 R /K 23 >> endobj 337 0 obj << /S /TOCI /C /Verzeichnis#203 /Pg 4 0 R /K [ 338 0 R 26 339 0 R 28 ] /P 1281 0 R >> endobj 338 0 obj << /S /Underline /P 337 0 R /A 1717 0 R /Pg 4 0 R /K 25 >> endobj 339 0 obj << /S /Underline /P 337 0 R /A 1718 0 R /Pg 4 0 R /K 27 >> endobj 340 0 obj << /S /TOCI /C /Verzeichnis#203 /Pg 4 0 R /K [ 341 0 R 30 342 0 R 32 ] /P 1281 0 R >> endobj 341 0 obj << /S /Underline /P 340 0 R /A 1719 0 R /Pg 4 0 R /K 29 >> endobj 342 0 obj << /S /Underline /P 340 0 R /A 1720 0 R /Pg 4 0 R /K 31 >> endobj 343 0 obj << /S /TOCI /C /Verzeichnis#202 /Pg 4 0 R /K [ 344 0 R 34 345 0 R 36 ] /P 1281 0 R >> endobj 344 0 obj << /S /Underline /P 343 0 R /A 1721 0 R /Pg 4 0 R /K 33 >> endobj 345 0 obj << /S /Underline /P 343 0 R /A 1722 0 R /Pg 4 0 R /K 35 >> endobj 346 0 obj << /S /TOCI /C /Verzeichnis#202 /Pg 4 0 R /K [ 347 0 R 38 348 0 R 40 ] /P 1281 0 R >> endobj 347 0 obj << /S /Underline /P 346 0 R /A 1723 0 R /Pg 4 0 R /K 37 >> endobj 348 0 obj << /S /Underline /P 346 0 R /A 1724 0 R /Pg 4 0 R /K 39 >> endobj 349 0 obj << /S /TOCI /C /Verzeichnis#202 /Pg 4 0 R /K [ 350 0 R 42 351 0 R 44 ] /P 1281 0 R >> endobj 350 0 obj << /S /Underline /P 349 0 R /A 1725 0 R /Pg 4 0 R /K 41 >> endobj 351 0 obj << /S /Underline /P 349 0 R /A 1726 0 R /Pg 4 0 R /K 43 >> endobj 352 0 obj << /S /TOCI /C /Verzeichnis#202 /Pg 4 0 R /K [ 353 0 R 46 354 0 R 48 ] /P 1281 0 R >> endobj 353 0 obj << /S /Underline /P 352 0 R /A 1727 0 R /Pg 4 0 R /K 45 >> endobj 354 0 obj << /S /Underline /P 352 0 R /A 1728 0 R /Pg 4 0 R /K 47 >> endobj 355 0 obj << /S /TOCI /C /Verzeichnis#202 /Pg 4 0 R /K [ 356 0 R 50 357 0 R 52 ] /P 1281 0 R >> endobj 356 0 obj << /S /Underline /P 355 0 R /A 1729 0 R /Pg 4 0 R /K 49 >> endobj 357 0 obj << /S /Underline /P 355 0 R /A 1730 0 R /Pg 4 0 R /K 51 >> endobj 358 0 obj << /S /TOCI /C /Verzeichnis#202 /Pg 4 0 R /K [ 359 0 R 54 360 0 R 56 ] /P 1281 0 R >> endobj 359 0 obj << /S /Underline /P 358 0 R /A 1731 0 R /Pg 4 0 R /K 53 >> endobj 360 0 obj << /S /Underline /P 358 0 R /A 1732 0 R /Pg 4 0 R /K 55 >> endobj 361 0 obj << /S /TOCI /C /Verzeichnis#201 /Pg 4 0 R /K [ 362 0 R 58 363 0 R 60 ] /P 1281 0 R >> endobj 362 0 obj << /S /Underline /P 361 0 R /A 1733 0 R /Pg 4 0 R /K 57 >> endobj 363 0 obj << /S /Underline /P 361 0 R /A 1734 0 R /Pg 4 0 R /K 59 >> endobj 364 0 obj << /S /TOCI /C /Verzeichnis#202 /Pg 4 0 R /K [ 365 0 R 62 366 0 R 64 ] /P 1281 0 R >> endobj 365 0 obj << /S /Underline /P 364 0 R /A 1735 0 R /Pg 4 0 R /K 61 >> endobj 366 0 obj << /S /Underline /P 364 0 R /A 1736 0 R /Pg 4 0 R /K 63 >> endobj 367 0 obj << /S /TOCI /C /Verzeichnis#202 /Pg 4 0 R /K [ 368 0 R 66 369 0 R 68 ] /P 1281 0 R >> endobj 368 0 obj << /S /Underline /P 367 0 R /A 1737 0 R /Pg 4 0 R /K 65 >> endobj 369 0 obj << /S /Underline /P 367 0 R /A 1738 0 R /Pg 4 0 R /K 67 >> endobj 370 0 obj << /S /TOCI /C /Verzeichnis#202 /Pg 4 0 R /K [ 371 0 R 70 372 0 R 72 ] /P 1281 0 R >> endobj 371 0 obj << /S /Underline /P 370 0 R /A 1739 0 R /Pg 4 0 R /K 69 >> endobj 372 0 obj << /S /Underline /P 370 0 R /A 1740 0 R /Pg 4 0 R /K 71 >> endobj 373 0 obj << /S /TOCI /C /Verzeichnis#201 /Pg 4 0 R /K [ 374 0 R 74 375 0 R 76 ] /P 1281 0 R >> endobj 374 0 obj << /S /Underline /P 373 0 R /A 1741 0 R /Pg 4 0 R /K 73 >> endobj 375 0 obj << /S /Underline /P 373 0 R /A 1742 0 R /Pg 4 0 R /K 75 >> endobj 376 0 obj << /S /TOCI /C /Verzeichnis#202 /Pg 4 0 R /K [ 377 0 R 78 378 0 R 80 ] /P 1281 0 R >> endobj 377 0 obj << /S /Underline /P 376 0 R /A 1743 0 R /Pg 4 0 R /K 77 >> endobj 378 0 obj << /S /Underline /P 376 0 R /A 1744 0 R /Pg 4 0 R /K 79 >> endobj 379 0 obj << /S /TOCI /C /Verzeichnis#202 /Pg 4 0 R /K [ 380 0 R 82 381 0 R 84 ] /P 1281 0 R >> endobj 380 0 obj << /S /Underline /P 379 0 R /A 1745 0 R /Pg 4 0 R /K 81 >> endobj 381 0 obj << /S /Underline /P 379 0 R /A 1746 0 R /Pg 4 0 R /K 83 >> endobj 382 0 obj << /S /TOCI /C /Verzeichnis#202 /Pg 4 0 R /K [ 383 0 R 86 384 0 R 88 ] /P 1281 0 R >> endobj 383 0 obj << /S /Underline /P 382 0 R /A 1747 0 R /Pg 4 0 R /K 85 >> endobj 384 0 obj << /S /Underline /P 382 0 R /A 1748 0 R /Pg 4 0 R /K 87 >> endobj 385 0 obj << /S /TOCI /C /Verzeichnis#201 /Pg 4 0 R /K [ 386 0 R 90 387 0 R 92 ] /P 1281 0 R >> endobj 386 0 obj << /S /Underline /P 385 0 R /A 1749 0 R /Pg 4 0 R /K 89 >> endobj 387 0 obj << /S /Underline /P 385 0 R /A 1750 0 R /Pg 4 0 R /K 91 >> endobj 388 0 obj << /S /TOCI /C /Verzeichnis#202 /Pg 4 0 R /K [ 389 0 R 94 390 0 R 96 ] /P 1281 0 R >> endobj 389 0 obj << /S /Underline /P 388 0 R /A 1751 0 R /Pg 4 0 R /K 93 >> endobj 390 0 obj << /S /Underline /P 388 0 R /A 1752 0 R /Pg 4 0 R /K 95 >> endobj 391 0 obj << /S /TOCI /C /Verzeichnis#202 /Pg 56 0 R /K [ 392 0 R 1 393 0 R 3 ] /P 1281 0 R >> endobj 392 0 obj << /S /Underline /P 391 0 R /A 1753 0 R /Pg 56 0 R /K 0 >> endobj 393 0 obj << /S /Underline /P 391 0 R /A 1755 0 R /Pg 56 0 R /K 2 >> endobj 394 0 obj << /S /TOCI /C /Verzeichnis#201 /Pg 56 0 R /K [ 395 0 R 5 396 0 R 7 ] /P 1281 0 R >> endobj 395 0 obj << /S /Underline /P 394 0 R /A 1756 0 R /Pg 56 0 R /K 4 >> endobj 396 0 obj << /S /Underline /P 394 0 R /A 1757 0 R /Pg 56 0 R /K 6 >> endobj 397 0 obj << /S /TOCI /C /Verzeichnis#201 /Pg 56 0 R /K [ 398 0 R 9 399 0 R 11 ] /P 1281 0 R >> endobj 398 0 obj << /S /Underline /P 397 0 R /A 1758 0 R /Pg 56 0 R /K 8 >> endobj 399 0 obj << /S /Underline /P 397 0 R /A 1759 0 R /Pg 56 0 R /K 10 >> endobj 400 0 obj << /S /TOCI /C /Verzeichnis#201 /Pg 56 0 R /K [ 401 0 R 13 402 0 R 15 ] /P 1281 0 R >> endobj 401 0 obj << /S /Underline /P 400 0 R /A 1760 0 R /Pg 56 0 R /K 12 >> endobj 402 0 obj << /S /Underline /P 400 0 R /A 1761 0 R /Pg 56 0 R /K 14 >> endobj 403 0 obj << /S /TOCI /C /Verzeichnis#201 /Pg 56 0 R /K [ 404 0 R 17 405 0 R 19 ] /P 1281 0 R >> endobj 404 0 obj << /S /Underline /P 403 0 R /A 1762 0 R /Pg 56 0 R /K 16 >> endobj 405 0 obj << /S /Underline /P 403 0 R /A 1763 0 R /Pg 56 0 R /K 18 >> endobj 406 0 obj << /S /TOCI /C /Verzeichnis#201 /Pg 56 0 R /K [ 407 0 R 21 408 0 R 23 ] /P 1281 0 R >> endobj 407 0 obj << /S /Underline /P 406 0 R /A 1764 0 R /Pg 56 0 R /K 20 >> endobj 408 0 obj << /S /Underline /P 406 0 R /A 1765 0 R /Pg 56 0 R /K 22 >> endobj 409 0 obj << /S /TOCI /C /Verzeichnis#201 /Pg 56 0 R /K [ 410 0 R 25 411 0 R 27 ] /P 1281 0 R >> endobj 410 0 obj << /S /Underline /P 409 0 R /A 1766 0 R /Pg 56 0 R /K 24 >> endobj 411 0 obj << /S /Underline /P 409 0 R /A 1767 0 R /Pg 56 0 R /K 26 >> endobj 412 0 obj << /S /TOCI /C /Textk#C3#B6rper /Pg 56 0 R /K 28 /P 1281 0 R >> endobj 413 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 56 0 R /K 29 /P 1279 0 R >> endobj 414 0 obj << /O /Layout /WritingMode /LrTb /StartIndent 42.55 /EndIndent 0 /TextAlign /Justify /SpaceBefore 5.64999 /SpaceAfter 5.95 /TextIndent 0 >> endobj 415 0 obj << /S /LBody /C /#C3#9Cberschrift#201 /Pg 74 0 R /K 0 /P 1594 0 R >> endobj 416 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 74 0 R /K 1 /P 1280 0 R >> endobj 417 0 obj << /O /Layout /WritingMode /LrTb /StartIndent 42.55 /EndIndent 0 /TextAlign /Start /SpaceBefore 28.35001 /SpaceAfter 8.5 /TextIndent -42.54999 >> endobj 418 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 74 0 R /K 2 /P 1280 0 R >> endobj 419 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 74 0 R /K 3 /P 1280 0 R >> endobj 420 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 74 0 R /K 4 /P 1280 0 R >> endobj 421 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 74 0 R /K 5 /P 1280 0 R >> endobj 422 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 74 0 R /K [ 6 423 0 R 8 ] /P 1280 0 R >> endobj 423 0 obj << /S /Link /P 422 0 R /K [ 424 0 R << /Type /OBJR /Pg 74 0 R /Obj 222 0 R >> ] >> endobj 424 0 obj << /S /Underline /P 423 0 R /A 1769 0 R /Pg 74 0 R /K 7 >> endobj 425 0 obj << /S /LBody /C /#C3#9Cberschrift#201 /Pg 79 0 R /K 0 /P 1596 0 R >> endobj 426 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 79 0 R /K 1 /P 1280 0 R >> endobj 427 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 79 0 R /K 2 /P 1280 0 R >> endobj 428 0 obj << /S /LBody /C /#C3#9Cberschrift#202 /Pg 79 0 R /K 3 /P 1598 0 R >> endobj 429 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 79 0 R /K 4 /P 1280 0 R >> endobj 430 0 obj << /O /Layout /WritingMode /LrTb /StartIndent 42.55 /EndIndent 0 /TextAlign /Start /SpaceBefore 34 /SpaceAfter 14.14999 /TextIndent -42.54999 >> endobj 431 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 79 0 R /K 5 /P 1280 0 R >> endobj 432 0 obj << /S /Program#20Text /C /Program#20Text /Pg 79 0 R /K 6 /P 1280 0 R >> endobj 433 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 79 0 R /K 7 /P 1280 0 R >> endobj 434 0 obj << /O /Layout /WritingMode /LrTb /StartIndent 42.55 /EndIndent 0 /TextAlign /Start /SpaceBefore 0 /SpaceAfter 0 /TextIndent 0 >> endobj 435 0 obj << /S /LBody /A [ 436 0 R ] /C /Textk#C3#B6rper /Pg 79 0 R /K 8 /P 1600 0 R >> endobj 436 0 obj << /O /Layout /StartIndent 78.55 /TextIndent -17.99998 >> endobj 437 0 obj << /S /LBody /A [ 438 0 R ] /C /Textk#C3#B6rper /Pg 79 0 R /K 9 /P 1601 0 R >> endobj 438 0 obj << /O /Layout /StartIndent 78.55 /TextIndent -17.99998 >> endobj 439 0 obj << /S /LBody /A [ 440 0 R ] /C /Textk#C3#B6rper /Pg 79 0 R /K 10 /P 1602 0 R >> endobj 440 0 obj << /O /Layout /StartIndent 78.55 /TextIndent -17.99998 >> endobj 441 0 obj << /S /Textk#C3#B6rper /A [ 442 0 R ] /C /Textk#C3#B6rper /Pg 79 0 R /K [ 443 0 R 12 ] /P 1280 0 R >> endobj 442 0 obj << /O /Layout /StartIndent 78.55 >> endobj 443 0 obj << /S /Underline /P 441 0 R /A 1771 0 R /Pg 79 0 R /K 11 >> endobj 444 0 obj << /S /LBody /C /#C3#9Cberschrift#202 /Pg 82 0 R /K 0 /P 1604 0 R >> endobj 445 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 82 0 R /K 1 /P 1280 0 R >> endobj 446 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 82 0 R /K 2 /P 1280 0 R >> endobj 447 0 obj << /S /Program#20Text /C /Program#20Text /Pg 82 0 R /K 3 /P 1280 0 R >> endobj 448 0 obj << /S /Program#20Text /C /Program#20Text /Pg 82 0 R /K 4 /P 1280 0 R >> endobj 449 0 obj << /S /Program#20Text /C /Program#20Text /Pg 82 0 R /K 5 /P 1280 0 R >> endobj 450 0 obj << /S /Program#20Text /C /Program#20Text /Pg 82 0 R /K 6 /P 1280 0 R >> endobj 451 0 obj << /S /Program#20Text /C /Program#20Text /Pg 82 0 R /K 7 /P 1280 0 R >> endobj 452 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 82 0 R /K 8 /P 1280 0 R >> endobj 453 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 82 0 R /K 9 /P 1280 0 R >> endobj 454 0 obj << /S /Program#20Text /C /Program#20Text /Pg 82 0 R /K 10 /P 1280 0 R >> endobj 455 0 obj << /S /Program#20Text /C /Program#20Text /Pg 82 0 R /K 11 /P 1280 0 R >> endobj 456 0 obj << /S /Program#20Text /C /Program#20Text /Pg 82 0 R /K 12 /P 1280 0 R >> endobj 457 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 82 0 R /K 13 /P 1280 0 R >> endobj 458 0 obj << /S /LBody /A [ 459 0 R ] /C /Textk#C3#B6rper /Pg 82 0 R /K 14 /P 1606 0 R >> endobj 459 0 obj << /O /Layout /StartIndent 78.55 /TextIndent -17.99998 >> endobj 460 0 obj << /S /LBody /A [ 461 0 R ] /C /Textk#C3#B6rper /Pg 82 0 R /K 15 /P 1607 0 R >> endobj 461 0 obj << /O /Layout /StartIndent 78.55 /TextIndent -17.99998 >> endobj 462 0 obj << /S /LBody /A [ 463 0 R ] /C /Textk#C3#B6rper /Pg 82 0 R /K 16 /P 1608 0 R >> endobj 463 0 obj << /O /Layout /StartIndent 78.55 /TextIndent -17.99998 >> endobj 464 0 obj << /S /LBody /A [ 465 0 R ] /C /Textk#C3#B6rper /Pg 82 0 R /K 17 /P 1609 0 R >> endobj 465 0 obj << /O /Layout /StartIndent 78.55 /TextIndent -17.99998 >> endobj 466 0 obj << /S /LBody /A [ 467 0 R ] /C /Textk#C3#B6rper /Pg 82 0 R /K 18 /P 1610 0 R >> endobj 467 0 obj << /O /Layout /StartIndent 78.55 /TextIndent -17.99998 >> endobj 468 0 obj << /S /LBody /A [ 469 0 R ] /C /Textk#C3#B6rper /Pg 82 0 R /K 19 /P 1611 0 R >> endobj 469 0 obj << /O /Layout /StartIndent 78.55 /TextIndent -17.99998 >> endobj 470 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 82 0 R /K 20 /P 1280 0 R >> endobj 471 0 obj << /S /LBody /C /#C3#9Cberschrift#203 /Pg 87 0 R /K 0 /P 1613 0 R >> endobj 472 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 87 0 R /K 1 /P 1280 0 R >> endobj 473 0 obj << /O /Layout /WritingMode /LrTb /StartIndent 42.55 /EndIndent 0 /TextAlign /Start /SpaceBefore 28.35001 /SpaceAfter 5.64999 /TextIndent -42.54999 >> endobj 474 0 obj << /S /Program#20Text /C /Program#20Text /Pg 87 0 R /K 2 /P 1280 0 R >> endobj 475 0 obj << /S /Program#20Text /C /Program#20Text /Pg 87 0 R /K 3 /P 1280 0 R >> endobj 476 0 obj << /S /Program#20Text /C /Program#20Text /Pg 87 0 R /K 4 /P 1280 0 R >> endobj 477 0 obj << /S /Program#20Text /C /Program#20Text /Pg 87 0 R /K 5 /P 1280 0 R >> endobj 478 0 obj << /S /Program#20Text /C /Program#20Text /Pg 87 0 R /K 6 /P 1280 0 R >> endobj 479 0 obj << /S /Program#20Text /C /Program#20Text /Pg 87 0 R /K 7 /P 1280 0 R >> endobj 480 0 obj << /S /Program#20Text /C /Program#20Text /Pg 87 0 R /K 8 /P 1280 0 R >> endobj 481 0 obj << /S /Program#20Text /C /Program#20Text /Pg 87 0 R /K 9 /P 1280 0 R >> endobj 482 0 obj << /S /Program#20Text /C /Program#20Text /Pg 87 0 R /K 10 /P 1280 0 R >> endobj 483 0 obj << /S /Program#20Text /C /Program#20Text /Pg 87 0 R /K 11 /P 1280 0 R >> endobj 484 0 obj << /S /Program#20Text /C /Program#20Text /Pg 87 0 R /K 12 /P 1280 0 R >> endobj 485 0 obj << /S /Program#20Text /C /Program#20Text /Pg 87 0 R /K 13 /P 1280 0 R >> endobj 486 0 obj << /S /Program#20Text /C /Program#20Text /Pg 87 0 R /K 14 /P 1280 0 R >> endobj 487 0 obj << /S /Program#20Text /C /Program#20Text /Pg 87 0 R /K 15 /P 1280 0 R >> endobj 488 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 87 0 R /K 16 /P 1280 0 R >> endobj 489 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 87 0 R /K 17 /P 1280 0 R >> endobj 490 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 87 0 R /K 18 /P 1280 0 R >> endobj 491 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 87 0 R /K 19 /P 1280 0 R >> endobj 492 0 obj << /S /LBody /C /#C3#9Cberschrift#203 /Pg 87 0 R /K 20 /P 1615 0 R >> endobj 493 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 87 0 R /K 21 /P 1280 0 R >> endobj 494 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 87 0 R /K 22 /P 1280 0 R >> endobj 495 0 obj << /S /LBody /C /#C3#9Cberschrift#203 /Pg 90 0 R /K 0 /P 1617 0 R >> endobj 496 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 90 0 R /K 1 /P 1280 0 R >> endobj 497 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 90 0 R /K 2 /P 1280 0 R >> endobj 498 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 90 0 R /K 3 /P 1280 0 R >> endobj 499 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 90 0 R /K 4 /P 1280 0 R >> endobj 500 0 obj << /S /LBody /C /#C3#9Cberschrift#203 /Pg 90 0 R /K 5 /P 1619 0 R >> endobj 501 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 90 0 R /K 6 /P 1280 0 R >> endobj 502 0 obj << /S /LBody /C /#C3#9Cberschrift#202 /Pg 90 0 R /K 7 /P 1621 0 R >> endobj 503 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 90 0 R /K 8 /P 1280 0 R >> endobj 504 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 90 0 R /K 9 /P 1280 0 R >> endobj 505 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 93 0 R /K 0 /P 1280 0 R >> endobj 506 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 93 0 R /K 1 /P 1280 0 R >> endobj 507 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 93 0 R /K 2 /P 1280 0 R >> endobj 508 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 93 0 R /K 3 /P 1280 0 R >> endobj 509 0 obj << /S /LBody /C /#C3#9Cberschrift#202 /Pg 93 0 R /K 4 /P 1623 0 R >> endobj 510 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 93 0 R /K 5 /P 1280 0 R >> endobj 511 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 93 0 R /K 6 /P 1280 0 R >> endobj 512 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 93 0 R /K 7 /P 1280 0 R >> endobj 513 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 93 0 R /K 8 /P 1280 0 R >> endobj 514 0 obj << /S /LBody /C /#C3#9Cberschrift#202 /Pg 96 0 R /K 0 /P 1625 0 R >> endobj 515 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 96 0 R /K 1 /P 1280 0 R >> endobj 516 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 96 0 R /K 2 /P 1280 0 R >> endobj 517 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 96 0 R /K 3 /P 1280 0 R >> endobj 518 0 obj << /S /Tabellen#20#C3#9Cberschrift /C /Tabellen#20#C3#9Cberschrift /Pg 96 0 R /K 4 /P 1284 0 R >> endobj 519 0 obj << /S /Tabellen#20#C3#9Cberschrift /C /Tabellen#20#C3#9Cberschrift /Pg 96 0 R /K 5 /P 1287 0 R >> endobj 520 0 obj << /O /Layout /WritingMode /LrTb /StartIndent 0 /EndIndent 0 /TextAlign /Start /SpaceBefore 5 /SpaceAfter 5.64999 /TextIndent 0 >> endobj 521 0 obj << /S /Tabellen#20#C3#9Cberschrift /C /Tabellen#20#C3#9Cberschrift /Pg 96 0 R /K 6 /P 1290 0 R >> endobj 522 0 obj << /S /Tabellen#20Inhalt /A [ 523 0 R ] /C /Tabellen#20Inhalt /Pg 96 0 R /K 7 /P 1294 0 R >> endobj 523 0 obj << /O /Layout /TextAlign /Start >> endobj 524 0 obj << /O /Layout /WritingMode /LrTb /StartIndent 0 /EndIndent 0 /TextAlign /Justify /SpaceBefore 5 /SpaceAfter 5.64999 /TextIndent 0 >> endobj 525 0 obj << /S /Tabellen#20Inhalt /A [ 526 0 R ] /C /Tabellen#20Inhalt /Pg 96 0 R /K 8 /P 1297 0 R >> endobj 526 0 obj << /O /Layout /TextAlign /Start >> endobj 527 0 obj << /S /Tabellen#20Inhalt /A [ 528 0 R ] /C /Tabellen#20Inhalt /Pg 96 0 R /K 9 /P 1300 0 R >> endobj 528 0 obj << /O /Layout /TextAlign /Start >> endobj 529 0 obj << /S /Tabellen#20Inhalt /A [ 530 0 R ] /C /Tabellen#20Inhalt /Pg 96 0 R /K 10 /P 1304 0 R >> endobj 530 0 obj << /O /Layout /TextAlign /Start >> endobj 531 0 obj << /S /Tabellen#20Inhalt /A [ 532 0 R ] /C /Tabellen#20Inhalt /Pg 96 0 R /K 11 /P 1307 0 R >> endobj 532 0 obj << /O /Layout /TextAlign /Start >> endobj 533 0 obj << /S /Tabellen#20Inhalt /A [ 534 0 R ] /C /Tabellen#20Inhalt /Pg 96 0 R /K 12 /P 1310 0 R >> endobj 534 0 obj << /O /Layout /TextAlign /Start >> endobj 535 0 obj << /S /Tabellen#20Inhalt /A [ 536 0 R ] /C /Tabellen#20Inhalt /Pg 96 0 R /K 13 /P 1314 0 R >> endobj 536 0 obj << /O /Layout /TextAlign /Start >> endobj 537 0 obj << /S /Tabellen#20Inhalt /A [ 538 0 R ] /C /Tabellen#20Inhalt /Pg 96 0 R /K 14 /P 1317 0 R >> endobj 538 0 obj << /O /Layout /TextAlign /Start >> endobj 539 0 obj << /S /Tabellen#20Inhalt /A [ 540 0 R ] /C /Tabellen#20Inhalt /Pg 96 0 R /K 15 /P 1320 0 R >> endobj 540 0 obj << /O /Layout /TextAlign /Start >> endobj 541 0 obj << /S /Tabellen#20Inhalt /A [ 542 0 R ] /C /Tabellen#20Inhalt /Pg 96 0 R /K 16 /P 1324 0 R >> endobj 542 0 obj << /O /Layout /TextAlign /Start >> endobj 543 0 obj << /S /Tabellen#20Inhalt /A [ 544 0 R ] /C /Tabellen#20Inhalt /Pg 96 0 R /K 17 /P 1327 0 R >> endobj 544 0 obj << /O /Layout /TextAlign /Start >> endobj 545 0 obj << /S /Tabellen#20Inhalt /A [ 546 0 R ] /C /Tabellen#20Inhalt /Pg 96 0 R /K 18 /P 1330 0 R >> endobj 546 0 obj << /O /Layout /TextAlign /Start >> endobj 547 0 obj << /S /Tabellen#20Inhalt /A [ 548 0 R ] /C /Tabellen#20Inhalt /Pg 96 0 R /K 19 /P 1334 0 R >> endobj 548 0 obj << /O /Layout /TextAlign /Start >> endobj 549 0 obj << /S /Tabellen#20Inhalt /A [ 550 0 R ] /C /Tabellen#20Inhalt /Pg 96 0 R /K 20 /P 1337 0 R >> endobj 550 0 obj << /O /Layout /TextAlign /Start >> endobj 551 0 obj << /S /Tabellen#20Inhalt /A [ 552 0 R ] /C /Tabellen#20Inhalt /Pg 96 0 R /K [ 21 553 0 R 23 ] /P 1340 0 R >> endobj 552 0 obj << /O /Layout /TextAlign /Start >> endobj 553 0 obj << /S /Underline /P 551 0 R /A 1777 0 R /Pg 96 0 R /K 22 >> endobj 554 0 obj << /S /Tabellen#20Inhalt /A [ 555 0 R ] /C /Tabellen#20Inhalt /Pg 96 0 R /K 24 /P 1344 0 R >> endobj 555 0 obj << /O /Layout /TextAlign /Start >> endobj 556 0 obj << /S /Tabellen#20Inhalt /A [ 557 0 R ] /C /Tabellen#20Inhalt /Pg 96 0 R /K 25 /P 1347 0 R >> endobj 557 0 obj << /O /Layout /TextAlign /Start >> endobj 558 0 obj << /S /Tabellen#20Inhalt /A [ 559 0 R ] /C /Tabellen#20Inhalt /Pg 96 0 R /K 26 /P 1350 0 R >> endobj 559 0 obj << /O /Layout /TextAlign /Start >> endobj 560 0 obj << /S /Tabellen#20Inhalt /A [ 561 0 R ] /C /Tabellen#20Inhalt /Pg 96 0 R /K 27 /P 1354 0 R >> endobj 561 0 obj << /O /Layout /TextAlign /Start >> endobj 562 0 obj << /S /Tabellen#20Inhalt /A [ 563 0 R ] /C /Tabellen#20Inhalt /Pg 96 0 R /K 28 /P 1357 0 R >> endobj 563 0 obj << /O /Layout /TextAlign /Start >> endobj 564 0 obj << /S /Tabellen#20Inhalt /A [ 565 0 R ] /C /Tabellen#20Inhalt /Pg 96 0 R /K 29 /P 1360 0 R >> endobj 565 0 obj << /O /Layout /TextAlign /Start >> endobj 566 0 obj << /S /Tabellen#20Inhalt /A [ 567 0 R ] /C /Tabellen#20Inhalt /Pg 96 0 R /K 30 /P 1364 0 R >> endobj 567 0 obj << /O /Layout /TextAlign /Start >> endobj 568 0 obj << /S /Tabellen#20Inhalt /A [ 569 0 R ] /C /Tabellen#20Inhalt /Pg 96 0 R /K 31 /P 1367 0 R >> endobj 569 0 obj << /O /Layout /TextAlign /Start >> endobj 570 0 obj << /S /Tabellen#20Inhalt /A [ 571 0 R ] /C /Tabellen#20Inhalt /Pg 96 0 R /K 32 /P 1370 0 R >> endobj 571 0 obj << /O /Layout /TextAlign /Start >> endobj 572 0 obj << /S /Tabellen#20Inhalt /A [ 573 0 R ] /C /Tabellen#20Inhalt /Pg 96 0 R /K 33 /P 1374 0 R >> endobj 573 0 obj << /O /Layout /TextAlign /Start >> endobj 574 0 obj << /S /Tabellen#20Inhalt /A [ 575 0 R ] /C /Tabellen#20Inhalt /Pg 96 0 R /K 34 /P 1377 0 R >> endobj 575 0 obj << /O /Layout /TextAlign /Start >> endobj 576 0 obj << /S /Tabellen#20Inhalt /A [ 577 0 R ] /C /Tabellen#20Inhalt /Pg 96 0 R /K 35 /P 1380 0 R >> endobj 577 0 obj << /O /Layout /TextAlign /Start >> endobj 578 0 obj << /S /Tabellen#20Inhalt /A [ 579 0 R ] /C /Tabellen#20Inhalt /Pg 96 0 R /K 36 /P 1384 0 R >> endobj 579 0 obj << /O /Layout /TextAlign /Start >> endobj 580 0 obj << /S /Tabellen#20Inhalt /A [ 581 0 R ] /C /Tabellen#20Inhalt /Pg 96 0 R /K 37 /P 1387 0 R >> endobj 581 0 obj << /O /Layout /TextAlign /Start >> endobj 582 0 obj << /S /Tabellen#20Inhalt /A [ 583 0 R ] /C /Tabellen#20Inhalt /Pg 96 0 R /K 38 /P 1390 0 R >> endobj 583 0 obj << /O /Layout /TextAlign /Start >> endobj 584 0 obj << /S /Tabellen#20Inhalt /A [ 585 0 R ] /C /Tabellen#20Inhalt /Pg 99 0 R /K 0 /P 1394 0 R >> endobj 585 0 obj << /O /Layout /TextAlign /Start >> endobj 586 0 obj << /S /Tabellen#20Inhalt /A [ 587 0 R ] /C /Tabellen#20Inhalt /Pg 99 0 R /K 1 /P 1397 0 R >> endobj 587 0 obj << /O /Layout /TextAlign /Start >> endobj 588 0 obj << /S /Tabellen#20Inhalt /A [ 589 0 R ] /C /Tabellen#20Inhalt /Pg 99 0 R /K [ 2 590 0 R 4 ] /P 1400 0 R >> endobj 589 0 obj << /O /Layout /TextAlign /Start >> endobj 590 0 obj << /S /Underline /P 588 0 R /A 1779 0 R /Pg 99 0 R /K 3 >> endobj 591 0 obj << /S /Tabellen#20Inhalt /A [ 592 0 R ] /C /Tabellen#20Inhalt /Pg 99 0 R /K 5 /P 1404 0 R >> endobj 592 0 obj << /O /Layout /TextAlign /Start >> endobj 593 0 obj << /S /Tabellen#20Inhalt /A [ 594 0 R ] /C /Tabellen#20Inhalt /Pg 99 0 R /K 6 /P 1407 0 R >> endobj 594 0 obj << /O /Layout /TextAlign /Start >> endobj 595 0 obj << /S /Tabellen#20Inhalt /A [ 596 0 R ] /C /Tabellen#20Inhalt /Pg 99 0 R /K 7 /P 1410 0 R >> endobj 596 0 obj << /O /Layout /TextAlign /Start >> endobj 597 0 obj << /S /Tabellen#20Inhalt /A [ 598 0 R ] /C /Tabellen#20Inhalt /Pg 99 0 R /K 8 /P 1414 0 R >> endobj 598 0 obj << /O /Layout /TextAlign /Start >> endobj 599 0 obj << /S /Tabellen#20Inhalt /A [ 600 0 R ] /C /Tabellen#20Inhalt /Pg 99 0 R /K 9 /P 1417 0 R >> endobj 600 0 obj << /O /Layout /TextAlign /Start >> endobj 601 0 obj << /S /Tabellen#20Inhalt /A [ 602 0 R ] /C /Tabellen#20Inhalt /Pg 99 0 R /K 10 /P 1420 0 R >> endobj 602 0 obj << /O /Layout /TextAlign /Start >> endobj 603 0 obj << /S /Tabellen#20Inhalt /A [ 604 0 R ] /C /Tabellen#20Inhalt /Pg 99 0 R /K 11 /P 1424 0 R >> endobj 604 0 obj << /O /Layout /TextAlign /Start >> endobj 605 0 obj << /S /Tabellen#20Inhalt /A [ 606 0 R ] /C /Tabellen#20Inhalt /Pg 99 0 R /K 12 /P 1427 0 R >> endobj 606 0 obj << /O /Layout /TextAlign /Start >> endobj 607 0 obj << /S /Tabellen#20Inhalt /A [ 608 0 R ] /C /Tabellen#20Inhalt /Pg 99 0 R /K 13 /P 1430 0 R >> endobj 608 0 obj << /O /Layout /TextAlign /Start >> endobj 609 0 obj << /S /Tabellen#20Inhalt /A [ 610 0 R ] /C /Tabellen#20Inhalt /Pg 99 0 R /K 14 /P 1430 0 R >> endobj 610 0 obj << /O /Layout /TextAlign /Start >> endobj 611 0 obj << /S /Tabellen#20Inhalt /A [ 612 0 R ] /C /Tabellen#20Inhalt /Pg 99 0 R /K 15 /P 1430 0 R >> endobj 612 0 obj << /O /Layout /TextAlign /Start >> endobj 613 0 obj << /S /Tabellen#20Inhalt /A [ 614 0 R ] /C /Tabellen#20Inhalt /Pg 99 0 R /K 16 /P 1434 0 R >> endobj 614 0 obj << /O /Layout /TextAlign /Start >> endobj 615 0 obj << /S /Tabellen#20Inhalt /A [ 616 0 R ] /C /Tabellen#20Inhalt /Pg 99 0 R /K 17 /P 1437 0 R >> endobj 616 0 obj << /O /Layout /TextAlign /Start >> endobj 617 0 obj << /S /Tabellen#20Inhalt /A [ 618 0 R ] /C /Tabellen#20Inhalt /Pg 99 0 R /K 18 /P 1440 0 R >> endobj 618 0 obj << /O /Layout /TextAlign /Start >> endobj 619 0 obj << /S /Tabellen#20Inhalt /A [ 620 0 R ] /C /Tabellen#20Inhalt /Pg 99 0 R /K 19 /P 1440 0 R >> endobj 620 0 obj << /O /Layout /TextAlign /Start >> endobj 621 0 obj << /S /Tabellen#20Inhalt /A [ 622 0 R ] /C /Tabellen#20Inhalt /Pg 99 0 R /K 20 /P 1444 0 R >> endobj 622 0 obj << /O /Layout /TextAlign /Start >> endobj 623 0 obj << /S /Tabellen#20Inhalt /A [ 624 0 R ] /C /Tabellen#20Inhalt /Pg 99 0 R /K 21 /P 1447 0 R >> endobj 624 0 obj << /O /Layout /TextAlign /Start >> endobj 625 0 obj << /S /Tabellen#20Inhalt /A [ 626 0 R ] /C /Tabellen#20Inhalt /Pg 99 0 R /K 22 /P 1450 0 R >> endobj 626 0 obj << /O /Layout /TextAlign /Start >> endobj 627 0 obj << /S /Tabellen#20Inhalt /A [ 628 0 R ] /C /Tabellen#20Inhalt /Pg 99 0 R /K 23 /P 1454 0 R >> endobj 628 0 obj << /O /Layout /TextAlign /Start >> endobj 629 0 obj << /S /Tabellen#20Inhalt /A [ 630 0 R ] /C /Tabellen#20Inhalt /Pg 99 0 R /K 24 /P 1457 0 R >> endobj 630 0 obj << /O /Layout /TextAlign /Start >> endobj 631 0 obj << /S /Tabellen#20Inhalt /A [ 632 0 R ] /C /Tabellen#20Inhalt /Pg 99 0 R /K 25 /P 1460 0 R >> endobj 632 0 obj << /O /Layout /TextAlign /Start >> endobj 633 0 obj << /S /Tabellen#20Inhalt /A [ 634 0 R ] /C /Tabellen#20Inhalt /Pg 99 0 R /K 26 /P 1464 0 R >> endobj 634 0 obj << /O /Layout /TextAlign /Start >> endobj 635 0 obj << /S /Tabellen#20Inhalt /A [ 636 0 R ] /C /Tabellen#20Inhalt /Pg 99 0 R /K 27 /P 1467 0 R >> endobj 636 0 obj << /O /Layout /TextAlign /Start >> endobj 637 0 obj << /S /Tabellen#20Inhalt /A [ 638 0 R ] /C /Tabellen#20Inhalt /Pg 99 0 R /K 28 /P 1470 0 R >> endobj 638 0 obj << /O /Layout /TextAlign /Start >> endobj 639 0 obj << /S /Tabellen#20Inhalt /A [ 640 0 R ] /C /Tabellen#20Inhalt /Pg 99 0 R /K 29 /P 1470 0 R >> endobj 640 0 obj << /O /Layout /TextAlign /Start >> endobj 641 0 obj << /S /Tabellen#20Inhalt /A [ 642 0 R ] /C /Tabellen#20Inhalt /Pg 99 0 R /K 30 /P 1470 0 R >> endobj 642 0 obj << /O /Layout /TextAlign /Start >> endobj 643 0 obj << /S /Tabellen#20Inhalt /A [ 644 0 R ] /C /Tabellen#20Inhalt /Pg 99 0 R /K 31 /P 1474 0 R >> endobj 644 0 obj << /O /Layout /TextAlign /Start >> endobj 645 0 obj << /S /Tabellen#20Inhalt /A [ 646 0 R ] /C /Tabellen#20Inhalt /Pg 99 0 R /K 32 /P 1477 0 R >> endobj 646 0 obj << /O /Layout /TextAlign /Start >> endobj 647 0 obj << /S /Tabellen#20Inhalt /A [ 648 0 R ] /C /Tabellen#20Inhalt /Pg 99 0 R /K 33 /P 1480 0 R >> endobj 648 0 obj << /O /Layout /TextAlign /Start >> endobj 649 0 obj << /S /Tabellen#20Inhalt /A [ 650 0 R ] /C /Tabellen#20Inhalt /Pg 99 0 R /K 34 /P 1480 0 R >> endobj 650 0 obj << /O /Layout /TextAlign /Start >> endobj 651 0 obj << /S /Tabellen#20Inhalt /A [ 652 0 R ] /C /Tabellen#20Inhalt /Pg 99 0 R /P 1480 0 R /K [ 35 << /Type /MCR /Pg 102 0 R /MCID 0 >> ] >> endobj 652 0 obj << /O /Layout /TextAlign /Start >> endobj 653 0 obj << /S /Tabellen#20Inhalt /A [ 654 0 R ] /C /Tabellen#20Inhalt /Pg 102 0 R /K 1 /P 1484 0 R >> endobj 654 0 obj << /O /Layout /TextAlign /Start >> endobj 655 0 obj << /S /Tabellen#20Inhalt /A [ 656 0 R ] /C /Tabellen#20Inhalt /Pg 102 0 R /K 2 /P 1487 0 R >> endobj 656 0 obj << /O /Layout /TextAlign /Start >> endobj 657 0 obj << /S /Tabellen#20Inhalt /A [ 658 0 R ] /C /Tabellen#20Inhalt /Pg 102 0 R /K 3 /P 1490 0 R >> endobj 658 0 obj << /O /Layout /TextAlign /Start >> endobj 659 0 obj << /S /Tabellen#20Inhalt /A [ 660 0 R ] /C /Tabellen#20Inhalt /Pg 102 0 R /K 4 /P 1490 0 R >> endobj 660 0 obj << /O /Layout /TextAlign /Start >> endobj 661 0 obj << /S /Tabellen#20Inhalt /A [ 662 0 R ] /C /Tabellen#20Inhalt /Pg 102 0 R /K 5 /P 1494 0 R >> endobj 662 0 obj << /O /Layout /TextAlign /Start >> endobj 663 0 obj << /S /Tabellen#20Inhalt /A [ 664 0 R ] /C /Tabellen#20Inhalt /Pg 102 0 R /K 6 /P 1497 0 R >> endobj 664 0 obj << /O /Layout /TextAlign /Start >> endobj 665 0 obj << /S /Tabellen#20Inhalt /A [ 666 0 R ] /C /Tabellen#20Inhalt /Pg 102 0 R /K 7 /P 1500 0 R >> endobj 666 0 obj << /O /Layout /TextAlign /Start >> endobj 667 0 obj << /S /Tabellen#20Inhalt /A [ 668 0 R ] /C /Tabellen#20Inhalt /Pg 102 0 R /K 8 /P 1500 0 R >> endobj 668 0 obj << /O /Layout /TextAlign /Start >> endobj 669 0 obj << /S /Tabellen#20Inhalt /A [ 670 0 R ] /C /Tabellen#20Inhalt /Pg 102 0 R /K 9 /P 1500 0 R >> endobj 670 0 obj << /O /Layout /TextAlign /Start >> endobj 671 0 obj << /S /Tabellen#20Inhalt /A [ 672 0 R ] /C /Tabellen#20Inhalt /Pg 102 0 R /K 10 /P 1500 0 R >> endobj 672 0 obj << /O /Layout /TextAlign /Start >> endobj 673 0 obj << /S /Tabellen#20Inhalt /A [ 674 0 R ] /C /Tabellen#20Inhalt /Pg 102 0 R /K 11 /P 1504 0 R >> endobj 674 0 obj << /O /Layout /TextAlign /Start >> endobj 675 0 obj << /S /Tabellen#20Inhalt /A [ 676 0 R ] /C /Tabellen#20Inhalt /Pg 102 0 R /K 12 /P 1507 0 R >> endobj 676 0 obj << /O /Layout /TextAlign /Start >> endobj 677 0 obj << /S /Tabellen#20Inhalt /A [ 678 0 R ] /C /Tabellen#20Inhalt /Pg 102 0 R /K 13 /P 1510 0 R >> endobj 678 0 obj << /O /Layout /TextAlign /Start >> endobj 679 0 obj << /S /Tabellen#20Inhalt /A [ 680 0 R ] /C /Tabellen#20Inhalt /Pg 102 0 R /K 14 /P 1510 0 R >> endobj 680 0 obj << /O /Layout /TextAlign /Start >> endobj 681 0 obj << /S /Tabellen#20Inhalt /A [ 682 0 R ] /C /Tabellen#20Inhalt /Pg 102 0 R /K 15 /P 1514 0 R >> endobj 682 0 obj << /O /Layout /TextAlign /Start >> endobj 683 0 obj << /S /Tabellen#20Inhalt /A [ 684 0 R ] /C /Tabellen#20Inhalt /Pg 102 0 R /K 16 /P 1517 0 R >> endobj 684 0 obj << /O /Layout /TextAlign /Start >> endobj 685 0 obj << /S /Tabellen#20Inhalt /A [ 686 0 R ] /C /Tabellen#20Inhalt /Pg 102 0 R /K 17 /P 1520 0 R >> endobj 686 0 obj << /O /Layout /TextAlign /Start >> endobj 687 0 obj << /S /Tabellen#20Inhalt /A [ 688 0 R ] /C /Tabellen#20Inhalt /Pg 102 0 R /K 18 /P 1520 0 R >> endobj 688 0 obj << /O /Layout /TextAlign /Start >> endobj 689 0 obj << /S /Tabellen#20Inhalt /A [ 690 0 R ] /C /Tabellen#20Inhalt /Pg 102 0 R /K 19 /P 1520 0 R >> endobj 690 0 obj << /O /Layout /TextAlign /Start >> endobj 691 0 obj << /S /Tabellen#20Inhalt /A [ 692 0 R ] /C /Tabellen#20Inhalt /Pg 102 0 R /K 20 /P 1524 0 R >> endobj 692 0 obj << /O /Layout /TextAlign /Start >> endobj 693 0 obj << /S /Tabellen#20Inhalt /A [ 694 0 R ] /C /Tabellen#20Inhalt /Pg 102 0 R /K 21 /P 1527 0 R >> endobj 694 0 obj << /O /Layout /TextAlign /Start >> endobj 695 0 obj << /S /Tabellen#20Inhalt /A [ 696 0 R ] /C /Tabellen#20Inhalt /Pg 102 0 R /K 22 /P 1530 0 R >> endobj 696 0 obj << /O /Layout /TextAlign /Start >> endobj 697 0 obj << /S /Tabellen#20Inhalt /A [ 698 0 R ] /C /Tabellen#20Inhalt /Pg 102 0 R /K 23 /P 1534 0 R >> endobj 698 0 obj << /O /Layout /TextAlign /Start >> endobj 699 0 obj << /S /Tabellen#20Inhalt /A [ 700 0 R ] /C /Tabellen#20Inhalt /Pg 102 0 R /K 24 /P 1537 0 R >> endobj 700 0 obj << /O /Layout /TextAlign /Start >> endobj 701 0 obj << /S /Tabellen#20Inhalt /A [ 702 0 R ] /C /Tabellen#20Inhalt /Pg 102 0 R /K 25 /P 1540 0 R >> endobj 702 0 obj << /O /Layout /TextAlign /Start >> endobj 703 0 obj << /S /Tabellen#20Inhalt /A [ 704 0 R ] /C /Tabellen#20Inhalt /Pg 102 0 R /K 26 /P 1544 0 R >> endobj 704 0 obj << /O /Layout /TextAlign /Start >> endobj 705 0 obj << /S /Tabellen#20Inhalt /A [ 706 0 R ] /C /Tabellen#20Inhalt /Pg 102 0 R /K 27 /P 1547 0 R >> endobj 706 0 obj << /O /Layout /TextAlign /Start >> endobj 707 0 obj << /S /Tabellen#20Inhalt /A [ 708 0 R ] /C /Tabellen#20Inhalt /Pg 102 0 R /K 28 /P 1550 0 R >> endobj 708 0 obj << /O /Layout /TextAlign /Start >> endobj 709 0 obj << /S /Tabellen#20Inhalt /A [ 710 0 R ] /C /Tabellen#20Inhalt /Pg 102 0 R /K 29 /P 1554 0 R >> endobj 710 0 obj << /O /Layout /TextAlign /Start >> endobj 711 0 obj << /S /Tabellen#20Inhalt /A [ 712 0 R ] /C /Tabellen#20Inhalt /Pg 102 0 R /K 30 /P 1557 0 R >> endobj 712 0 obj << /O /Layout /TextAlign /Start >> endobj 713 0 obj << /S /Tabellen#20Inhalt /A [ 714 0 R ] /C /Tabellen#20Inhalt /Pg 102 0 R /P 1560 0 R /K [ 31 << /Type /MCR /Pg 105 0 R /MCID 0 >> ] >> endobj 714 0 obj << /O /Layout /TextAlign /Start >> endobj 715 0 obj << /S /Tabellen#20Inhalt /A [ 716 0 R ] /C /Tabellen#20Inhalt /Pg 105 0 R /K 1 /P 1564 0 R >> endobj 716 0 obj << /O /Layout /TextAlign /Start >> endobj 717 0 obj << /S /Tabellen#20Inhalt /A [ 718 0 R ] /C /Tabellen#20Inhalt /Pg 105 0 R /K 2 /P 1567 0 R >> endobj 718 0 obj << /O /Layout /TextAlign /Start >> endobj 719 0 obj << /S /Tabellen#20Inhalt /A [ 720 0 R ] /C /Tabellen#20Inhalt /Pg 105 0 R /K 3 /P 1570 0 R >> endobj 720 0 obj << /O /Layout /TextAlign /Start >> endobj 721 0 obj << /S /Tabellen#20Inhalt /A [ 722 0 R ] /C /Tabellen#20Inhalt /Pg 105 0 R /K 4 /P 1570 0 R >> endobj 722 0 obj << /O /Layout /TextAlign /Start >> endobj 723 0 obj << /S /Tabellen#20Inhalt /A [ 724 0 R ] /C /Tabellen#20Inhalt /Pg 105 0 R /K 5 /P 1574 0 R >> endobj 724 0 obj << /O /Layout /TextAlign /Start >> endobj 725 0 obj << /S /Tabellen#20Inhalt /A [ 726 0 R ] /C /Tabellen#20Inhalt /Pg 105 0 R /K 6 /P 1577 0 R >> endobj 726 0 obj << /O /Layout /TextAlign /Start >> endobj 727 0 obj << /S /Tabellen#20Inhalt /A [ 728 0 R ] /C /Tabellen#20Inhalt /Pg 105 0 R /K 7 /P 1580 0 R >> endobj 728 0 obj << /O /Layout /TextAlign /Start >> endobj 729 0 obj << /S /Tabellen#20Inhalt /A [ 730 0 R ] /C /Tabellen#20Inhalt /Pg 105 0 R /K 8 /P 1584 0 R >> endobj 730 0 obj << /O /Layout /TextAlign /Start >> endobj 731 0 obj << /S /Tabellen#20Inhalt /A [ 732 0 R ] /C /Tabellen#20Inhalt /Pg 105 0 R /K 9 /P 1587 0 R >> endobj 732 0 obj << /O /Layout /TextAlign /Start >> endobj 733 0 obj << /S /Tabellen#20Inhalt /A [ 734 0 R ] /C /Tabellen#20Inhalt /Pg 105 0 R /K 10 /P 1590 0 R >> endobj 734 0 obj << /O /Layout /TextAlign /Start >> endobj 735 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 105 0 R /K 11 /P 1280 0 R >> endobj 736 0 obj << /S /LBody /C /#C3#9Cberschrift#202 /Pg 105 0 R /K 12 /P 1627 0 R >> endobj 737 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 105 0 R /K 13 /P 1280 0 R >> endobj 738 0 obj << /S /API#20Attribute /C /API#20Attribute /Pg 105 0 R /K 14 /P 1280 0 R >> endobj 739 0 obj << /S /API#20Description /C /API#20Description /Pg 105 0 R /K 15 /P 1280 0 R >> endobj 740 0 obj << /O /Layout /WritingMode /LrTb /StartIndent 56.75 /EndIndent 0 /TextAlign /Start /SpaceBefore 5.64999 /SpaceAfter 5.95 /TextIndent -14.19998 >> endobj 741 0 obj << /S /API#20Attribute /C /API#20Attribute /Pg 105 0 R /K 16 /P 1280 0 R >> endobj 742 0 obj << /O /Layout /WritingMode /LrTb /StartIndent 56.7 /EndIndent 0 /TextAlign /Start /SpaceBefore 0 /SpaceAfter 5.95 /TextIndent 0 >> endobj 743 0 obj << /S /API#20Description /C /API#20Description /Pg 105 0 R /K 17 /P 1280 0 R >> endobj 744 0 obj << /S /API#20Description /C /API#20Description /Pg 105 0 R /K 18 /P 1280 0 R >> endobj 745 0 obj << /S /API#20Attribute /C /API#20Attribute /Pg 105 0 R /K 19 /P 1280 0 R >> endobj 746 0 obj << /S /API#20Description /C /API#20Description /Pg 105 0 R /K 20 /P 1280 0 R >> endobj 747 0 obj << /S /API#20Attribute /C /API#20Attribute /Pg 108 0 R /K 0 /P 1280 0 R >> endobj 748 0 obj << /S /API#20Description /C /API#20Description /Pg 108 0 R /K 1 /P 1280 0 R >> endobj 749 0 obj << /S /API#20Description /C /API#20Description /Pg 108 0 R /K 2 /P 1280 0 R >> endobj 750 0 obj << /S /API#20Description /C /API#20Description /Pg 108 0 R /K 3 /P 1280 0 R >> endobj 751 0 obj << /S /API#20Attribute /C /API#20Attribute /Pg 108 0 R /K 4 /P 1280 0 R >> endobj 752 0 obj << /S /API#20Description /C /API#20Description /Pg 108 0 R /K 5 /P 1280 0 R >> endobj 753 0 obj << /S /API#20Description /C /API#20Description /Pg 108 0 R /K 6 /P 1280 0 R >> endobj 754 0 obj << /S /API#20Description /C /API#20Description /Pg 108 0 R /K 7 /P 1280 0 R >> endobj 755 0 obj << /S /API#20Description /C /API#20Description /Pg 108 0 R /K 8 /P 1280 0 R >> endobj 756 0 obj << /S /API#20Attribute /C /API#20Attribute /Pg 108 0 R /K 9 /P 1280 0 R >> endobj 757 0 obj << /S /API#20Description /C /API#20Description /Pg 108 0 R /K 10 /P 1280 0 R >> endobj 758 0 obj << /S /API#20Attribute /C /API#20Attribute /Pg 108 0 R /K 11 /P 1280 0 R >> endobj 759 0 obj << /S /API#20Description /C /API#20Description /Pg 108 0 R /K 12 /P 1280 0 R >> endobj 760 0 obj << /S /API#20Attribute /C /API#20Attribute /Pg 108 0 R /K 13 /P 1280 0 R >> endobj 761 0 obj << /S /API#20Description /C /API#20Description /Pg 108 0 R /K 14 /P 1280 0 R >> endobj 762 0 obj << /S /API#20Attribute /C /API#20Attribute /Pg 108 0 R /K 15 /P 1280 0 R >> endobj 763 0 obj << /S /API#20Description /C /API#20Description /Pg 108 0 R /K 16 /P 1280 0 R >> endobj 764 0 obj << /S /API#20Attribute /C /API#20Attribute /Pg 108 0 R /K 17 /P 1280 0 R >> endobj 765 0 obj << /S /API#20Description /C /API#20Description /Pg 108 0 R /K 18 /P 1280 0 R >> endobj 766 0 obj << /S /API#20Attribute /C /API#20Attribute /Pg 108 0 R /K 19 /P 1280 0 R >> endobj 767 0 obj << /S /API#20Description /C /API#20Description /Pg 108 0 R /K 20 /P 1280 0 R >> endobj 768 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 108 0 R /K 21 /P 1280 0 R >> endobj 769 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 111 0 R /K 0 /P 1280 0 R >> endobj 770 0 obj << /S /Important#20Notice /C /Important#20Notice /Pg 111 0 R /K [ 771 0 R 2 3 4 ] /P 1280 0 R >> endobj 771 0 obj << /S /Underline /P 770 0 R /A 1784 0 R /Pg 111 0 R /K 1 >> endobj 772 0 obj << /O /Layout /WritingMode /LrTb /StartIndent 51.05 /EndIndent 0 /TextAlign /Justify /SpaceBefore 5.64999 /SpaceAfter 5.95 /TextIndent 0 >> endobj 773 0 obj << /S /LBody /C /#C3#9Cberschrift#202 /Pg 111 0 R /K 5 /P 1629 0 R >> endobj 774 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 111 0 R /K 6 /P 1280 0 R >> endobj 775 0 obj << /S /LBody /A [ 776 0 R ] /C /Textk#C3#B6rper /Pg 111 0 R /K [ 7 777 0 R 9 ] /P 1631 0 R >> endobj 776 0 obj << /O /Layout /StartIndent 78.55 /TextIndent -17.99998 >> endobj 777 0 obj << /S /Link /P 775 0 R /K [ 778 0 R << /Type /OBJR /Pg 111 0 R /Obj 223 0 R >> ] >> endobj 778 0 obj << /S /Underline /P 777 0 R /A 1785 0 R /Pg 111 0 R /K 8 >> endobj 779 0 obj << /S /LBody /A [ 780 0 R ] /C /Textk#C3#B6rper /Pg 111 0 R /K [ 10 781 0 R 13 ] /P 1632 0 R >> endobj 780 0 obj << /O /Layout /StartIndent 78.55 /TextIndent -17.99998 >> endobj 781 0 obj << /S /Link /P 779 0 R /K [ 782 0 R << /Type /OBJR /Pg 111 0 R /Obj 224 0 R >> << /Type /OBJR /Pg 111 0 R /Obj 225 0 R >> ] >> endobj 782 0 obj << /S /Underline /P 781 0 R /A 1786 0 R /Pg 111 0 R /K [ 11 12 ] >> endobj 783 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 111 0 R /K [ 14 784 0 R 16 ] /P 1280 0 R >> endobj 784 0 obj << /S /Link /P 783 0 R /K [ 785 0 R << /Type /OBJR /Pg 111 0 R /Obj 226 0 R >> ] >> endobj 785 0 obj << /S /Underline /P 784 0 R /A 1787 0 R /Pg 111 0 R /K 15 >> endobj 786 0 obj << /S /LBody /C /#C3#9Cberschrift#202 /Pg 111 0 R /K 17 /P 1634 0 R >> endobj 787 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 111 0 R /K 18 /P 1280 0 R >> endobj 788 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 111 0 R /K 19 /P 1280 0 R >> endobj 789 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 119 0 R /K 0 /P 1280 0 R >> endobj 790 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 119 0 R /K 1 /P 1280 0 R >> endobj 791 0 obj << /S /Program#20Text /A [ 792 0 R ] /C /Program#20Text /Pg 119 0 R /K 2 /P 1280 0 R >> endobj 792 0 obj << /O /Layout /StartIndent 56.60001 >> endobj 793 0 obj << /S /Program#20Text /A [ 794 0 R ] /C /Program#20Text /Pg 119 0 R /K 3 /P 1280 0 R >> endobj 794 0 obj << /O /Layout /StartIndent 56.60001 >> endobj 795 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 119 0 R /K 4 /P 1280 0 R >> endobj 796 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 119 0 R /K 5 /P 1280 0 R >> endobj 797 0 obj << /S /LBody /C /#C3#9Cberschrift#201 /Pg 122 0 R /K 0 /P 1636 0 R >> endobj 798 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 122 0 R /K 1 /P 1280 0 R >> endobj 799 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 122 0 R /K 2 /P 1280 0 R >> endobj 800 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 122 0 R /K 3 /P 1280 0 R >> endobj 801 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 122 0 R /K 4 /P 1280 0 R >> endobj 802 0 obj << /S /LBody /C /#C3#9Cberschrift#202 /Pg 122 0 R /K 5 /P 1638 0 R >> endobj 803 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 122 0 R /K 6 /P 1280 0 R >> endobj 804 0 obj << /S /API#20Function /C /API#20Function /Pg 122 0 R /K 7 /P 1280 0 R >> endobj 805 0 obj << /S /API#20Description /C /API#20Description /Pg 122 0 R /K 8 /P 1280 0 R >> endobj 806 0 obj << /O /Layout /WritingMode /LrTb /StartIndent 56.75 /EndIndent 0 /TextAlign /Start /SpaceBefore 5.64999 /SpaceAfter 5.95 /TextIndent -14.19998 >> endobj 807 0 obj << /S /API#20Description /C /API#20Description /Pg 122 0 R /K 9 /P 1280 0 R >> endobj 808 0 obj << /S /LBody /A [ 809 0 R ] /C /API#20Description /Pg 122 0 R /K 10 /P 1640 0 R >> endobj 809 0 obj << /O /Layout /StartIndent 74.7 /TextIndent -17.99998 >> endobj 810 0 obj << /S /API#20Description /A [ 811 0 R ] /C /API#20Description /Pg 122 0 R /K 11 /P 1280 0 R >> endobj 811 0 obj << /O /Layout /StartIndent 74.7 >> endobj 812 0 obj << /S /LBody /A [ 813 0 R ] /C /API#20Description /Pg 122 0 R /K 12 /P 1642 0 R >> endobj 813 0 obj << /O /Layout /StartIndent 74.7 /TextIndent -17.99998 >> endobj 814 0 obj << /S /API#20Description /A [ 815 0 R ] /C /API#20Description /Pg 122 0 R /P 1280 0 R /K [ 13 << /Type /MCR /Pg 125 0 R /MCID 0 >> ] >> endobj 815 0 obj << /O /Layout /StartIndent 74.7 >> endobj 816 0 obj << /S /API#20Description /A [ 817 0 R ] /C /API#20Description /Pg 125 0 R /K 1 /P 1280 0 R >> endobj 817 0 obj << /O /Layout /StartIndent 74.7 >> endobj 818 0 obj << /S /LBody /A [ 819 0 R ] /C /API#20Description /Pg 125 0 R /K 2 /P 1644 0 R >> endobj 819 0 obj << /O /Layout /StartIndent 74.60001 /TextIndent -17.99998 >> endobj 820 0 obj << /S /API#20Description /A [ 821 0 R ] /C /API#20Description /Pg 125 0 R /K 3 /P 1280 0 R >> endobj 821 0 obj << /O /Layout /StartIndent 74.7 >> endobj 822 0 obj << /S /API#20Description /C /API#20Description /Pg 125 0 R /K 4 /P 1280 0 R >> endobj 823 0 obj << /S /API#20Description /C /API#20Description /Pg 125 0 R /K 5 /P 1280 0 R >> endobj 824 0 obj << /S /API#20Description /C /API#20Description /Pg 125 0 R /K 6 /P 1280 0 R >> endobj 825 0 obj << /S /API#20Function /C /API#20Function /Pg 125 0 R /K 7 /P 1280 0 R >> endobj 826 0 obj << /S /API#20Description /C /API#20Description /Pg 125 0 R /K 8 /P 1280 0 R >> endobj 827 0 obj << /S /API#20Function /C /API#20Function /Pg 125 0 R /K 9 /P 1280 0 R >> endobj 828 0 obj << /S /API#20Description /C /API#20Description /Pg 125 0 R /K 10 /P 1280 0 R >> endobj 829 0 obj << /S /LBody /C /#C3#9Cberschrift#202 /Pg 125 0 R /K 11 /P 1646 0 R >> endobj 830 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 125 0 R /K 12 /P 1280 0 R >> endobj 831 0 obj << /S /API#20Method /C /API#20Method /Pg 125 0 R /K 13 /P 1280 0 R >> endobj 832 0 obj << /S /API#20Description /C /API#20Description /Pg 125 0 R /K 14 /P 1280 0 R >> endobj 833 0 obj << /O /Layout /WritingMode /LrTb /StartIndent 56.75 /EndIndent 0 /TextAlign /Start /SpaceBefore 5.64999 /SpaceAfter 5.95 /TextIndent -14.19998 >> endobj 834 0 obj << /S /API#20Method /C /API#20Method /Pg 125 0 R /K 15 /P 1280 0 R >> endobj 835 0 obj << /S /API#20Description /C /API#20Description /Pg 125 0 R /K 16 /P 1280 0 R >> endobj 836 0 obj << /S /API#20Method /C /API#20Method /Pg 125 0 R /K 17 /P 1280 0 R >> endobj 837 0 obj << /S /API#20Description /C /API#20Description /Pg 125 0 R /K 18 /P 1280 0 R >> endobj 838 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 128 0 R /K 0 /P 1280 0 R >> endobj 839 0 obj << /S /LBody /C /#C3#9Cberschrift#202 /Pg 128 0 R /K 1 /P 1648 0 R >> endobj 840 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 128 0 R /K 2 /P 1280 0 R >> endobj 841 0 obj << /S /API#20Attribute /C /API#20Attribute /Pg 128 0 R /K 3 /P 1280 0 R >> endobj 842 0 obj << /S /API#20Description /C /API#20Description /Pg 128 0 R /K 4 /P 1280 0 R >> endobj 843 0 obj << /S /API#20Attribute /C /API#20Attribute /Pg 128 0 R /K 5 /P 1280 0 R >> endobj 844 0 obj << /S /API#20Description /C /API#20Description /Pg 128 0 R /K 6 /P 1280 0 R >> endobj 845 0 obj << /S /API#20Attribute /C /API#20Attribute /Pg 128 0 R /K 7 /P 1280 0 R >> endobj 846 0 obj << /S /API#20Description /C /API#20Description /Pg 128 0 R /K 8 /P 1280 0 R >> endobj 847 0 obj << /S /LBody /C /#C3#9Cberschrift#201 /Pg 131 0 R /K 0 /P 1650 0 R >> endobj 848 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 131 0 R /K 1 /P 1280 0 R >> endobj 849 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 131 0 R /K 2 /P 1280 0 R >> endobj 850 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 131 0 R /K 3 /P 1280 0 R >> endobj 851 0 obj << /S /LBody /C /#C3#9Cberschrift#202 /Pg 131 0 R /K 4 /P 1652 0 R >> endobj 852 0 obj << /S /API#20Function /C /API#20Function /Pg 131 0 R /K 5 /P 1280 0 R >> endobj 853 0 obj << /S /API#20Description /C /API#20Description /Pg 131 0 R /K 6 /P 1280 0 R >> endobj 854 0 obj << /S /API#20Description /C /API#20Description /Pg 131 0 R /K 7 /P 1280 0 R >> endobj 855 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 131 0 R /K 8 /P 1280 0 R >> endobj 856 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 131 0 R /K 9 /P 1280 0 R >> endobj 857 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 131 0 R /K 10 /P 1280 0 R >> endobj 858 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 131 0 R /K 11 /P 1280 0 R >> endobj 859 0 obj << /S /LBody /C /#C3#9Cberschrift#202 /Pg 134 0 R /K 0 /P 1654 0 R >> endobj 860 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 134 0 R /K 1 /P 1280 0 R >> endobj 861 0 obj << /S /API#20Method /C /API#20Method /Pg 134 0 R /K 2 /P 1280 0 R >> endobj 862 0 obj << /S /API#20Description /C /API#20Description /Pg 134 0 R /K 3 /P 1280 0 R >> endobj 863 0 obj << /S /API#20Method /C /API#20Method /Pg 134 0 R /K 4 /P 1280 0 R >> endobj 864 0 obj << /S /API#20Description /C /API#20Description /Pg 134 0 R /K 5 /P 1280 0 R >> endobj 865 0 obj << /S /API#20Description /C /API#20Description /Pg 134 0 R /K 6 /P 1280 0 R >> endobj 866 0 obj << /S /API#20Method /C /API#20Method /Pg 134 0 R /K 7 /P 1280 0 R >> endobj 867 0 obj << /S /API#20Description /C /API#20Description /Pg 134 0 R /K 8 /P 1280 0 R >> endobj 868 0 obj << /S /API#20Description /C /API#20Description /Pg 134 0 R /K 9 /P 1280 0 R >> endobj 869 0 obj << /S /API#20Method /C /API#20Method /Pg 134 0 R /K 10 /P 1280 0 R >> endobj 870 0 obj << /S /API#20Description /C /API#20Description /Pg 134 0 R /K 11 /P 1280 0 R >> endobj 871 0 obj << /S /API#20Method /C /API#20Method /Pg 134 0 R /K 12 /P 1280 0 R >> endobj 872 0 obj << /S /API#20Description /C /API#20Description /Pg 134 0 R /K 13 /P 1280 0 R >> endobj 873 0 obj << /S /API#20Method /C /API#20Method /Pg 134 0 R /K 14 /P 1280 0 R >> endobj 874 0 obj << /S /API#20Description /C /API#20Description /Pg 134 0 R /K 15 /P 1280 0 R >> endobj 875 0 obj << /S /API#20Description /C /API#20Description /Pg 134 0 R /K 16 /P 1280 0 R >> endobj 876 0 obj << /S /LBody /C /#C3#9Cberschrift#202 /Pg 134 0 R /K 17 /P 1656 0 R >> endobj 877 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 134 0 R /K 18 /P 1280 0 R >> endobj 878 0 obj << /S /API#20Attribute /C /API#20Attribute /Pg 137 0 R /K 0 /P 1280 0 R >> endobj 879 0 obj << /S /API#20Description /C /API#20Description /Pg 137 0 R /K 1 /P 1280 0 R >> endobj 880 0 obj << /S /LBody /C /#C3#9Cberschrift#201 /Pg 140 0 R /K 0 /P 1658 0 R >> endobj 881 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 140 0 R /K 1 /P 1280 0 R >> endobj 882 0 obj << /S /API#20Function /C /API#20Function /Pg 140 0 R /K 2 /P 1280 0 R >> endobj 883 0 obj << /S /API#20Description /C /API#20Description /Pg 140 0 R /K 3 /P 1280 0 R >> endobj 884 0 obj << /S /API#20Description /C /API#20Description /Pg 140 0 R /K 4 /P 1280 0 R >> endobj 885 0 obj << /S /API#20Description /C /API#20Description /Pg 140 0 R /K 5 /P 1280 0 R >> endobj 886 0 obj << /S /API#20Description /C /API#20Description /Pg 140 0 R /K 6 /P 1280 0 R >> endobj 887 0 obj << /S /API#20Description /C /API#20Description /Pg 140 0 R /K 7 /P 1280 0 R >> endobj 888 0 obj << /S /API#20Description /C /API#20Description /Pg 140 0 R /K 8 /P 1280 0 R >> endobj 889 0 obj << /S /API#20Description /C /API#20Description /Pg 140 0 R /K 9 /P 1280 0 R >> endobj 890 0 obj << /S /API#20Function /C /API#20Function /Pg 140 0 R /K 10 /P 1280 0 R >> endobj 891 0 obj << /S /API#20Description /C /API#20Description /Pg 140 0 R /K 11 /P 1280 0 R >> endobj 892 0 obj << /S /API#20Description /C /API#20Description /Pg 140 0 R /K 12 /P 1280 0 R >> endobj 893 0 obj << /S /API#20Description /C /API#20Description /Pg 140 0 R /K 13 /P 1280 0 R >> endobj 894 0 obj << /S /Important#20Notice /A [ 895 0 R ] /C /Important#20Notice /Pg 140 0 R /K [ 896 0 R 15 16 17 18 ] /P 1280 0 R >> endobj 895 0 obj << /O /Layout /StartIndent 56.60001 >> endobj 896 0 obj << /S /Underline /P 894 0 R /A 1796 0 R /Pg 140 0 R /K 14 >> endobj 897 0 obj << /S /API#20Description /C /API#20Description /Pg 140 0 R /K 19 /P 1280 0 R >> endobj 898 0 obj << /S /API#20Function /C /API#20Function /Pg 143 0 R /K 0 /P 1280 0 R >> endobj 899 0 obj << /S /API#20Description /C /API#20Description /Pg 143 0 R /K 1 /P 1280 0 R >> endobj 900 0 obj << /S /API#20Function /C /API#20Function /Pg 143 0 R /K 2 /P 1280 0 R >> endobj 901 0 obj << /S /API#20Description /C /API#20Description /Pg 143 0 R /K 3 /P 1280 0 R >> endobj 902 0 obj << /S /API#20Description /C /API#20Description /Pg 143 0 R /K 4 /P 1280 0 R >> endobj 903 0 obj << /S /LBody /A [ 904 0 R ] /C /API#20Description /Pg 143 0 R /K 5 /P 1660 0 R >> endobj 904 0 obj << /O /Layout /StartIndent 74.60001 /TextIndent -17.99998 >> endobj 905 0 obj << /S /LBody /A [ 906 0 R ] /C /API#20Description /Pg 143 0 R /K 6 /P 1661 0 R >> endobj 906 0 obj << /O /Layout /StartIndent 74.60001 /TextIndent -17.99998 >> endobj 907 0 obj << /S /LBody /A [ 908 0 R ] /C /API#20Description /Pg 143 0 R /K 7 /P 1662 0 R >> endobj 908 0 obj << /O /Layout /StartIndent 74.60001 /TextIndent -17.99998 >> endobj 909 0 obj << /S /LBody /A [ 910 0 R ] /C /API#20Description /Pg 143 0 R /K 8 /P 1663 0 R >> endobj 910 0 obj << /O /Layout /StartIndent 74.60001 /TextIndent -17.99998 >> endobj 911 0 obj << /S /API#20Description /C /API#20Description /Pg 143 0 R /K 9 /P 1280 0 R >> endobj 912 0 obj << /S /API#20Description /C /API#20Description /Pg 143 0 R /K 10 /P 1280 0 R >> endobj 913 0 obj << /S /API#20Function /C /API#20Function /Pg 143 0 R /K 11 /P 1280 0 R >> endobj 914 0 obj << /S /API#20Description /C /API#20Description /Pg 143 0 R /K 12 /P 1280 0 R >> endobj 915 0 obj << /S /API#20Description /C /API#20Description /Pg 143 0 R /K 13 /P 1280 0 R >> endobj 916 0 obj << /S /API#20Description /C /API#20Description /Pg 143 0 R /K 14 /P 1280 0 R >> endobj 917 0 obj << /S /API#20Description /C /API#20Description /Pg 143 0 R /K 15 /P 1280 0 R >> endobj 918 0 obj << /S /API#20Function /C /API#20Function /Pg 143 0 R /K 16 /P 1280 0 R >> endobj 919 0 obj << /S /API#20Description /C /API#20Description /Pg 143 0 R /K 17 /P 1280 0 R >> endobj 920 0 obj << /S /API#20Description /C /API#20Description /Pg 143 0 R /K 18 /P 1280 0 R >> endobj 921 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 143 0 R /K 19 /P 1280 0 R >> endobj 922 0 obj << /S /API#20Description /C /API#20Description /Pg 143 0 R /K 20 /P 1280 0 R >> endobj 923 0 obj << /S /API#20Description /C /API#20Description /Pg 143 0 R /K 21 /P 1280 0 R >> endobj 924 0 obj << /S /API#20Function /C /API#20Function /Pg 146 0 R /K 0 /P 1280 0 R >> endobj 925 0 obj << /S /API#20Description /C /API#20Description /Pg 146 0 R /K 1 /P 1280 0 R >> endobj 926 0 obj << /S /API#20Description /C /API#20Description /Pg 146 0 R /K 2 /P 1280 0 R >> endobj 927 0 obj << /S /API#20Function /C /API#20Function /Pg 146 0 R /K 3 /P 1280 0 R >> endobj 928 0 obj << /S /API#20Description /C /API#20Description /Pg 146 0 R /K 4 /P 1280 0 R >> endobj 929 0 obj << /S /API#20Description /C /API#20Description /Pg 146 0 R /K 5 /P 1280 0 R >> endobj 930 0 obj << /S /API#20Description /C /API#20Description /Pg 146 0 R /K 6 /P 1280 0 R >> endobj 931 0 obj << /S /API#20Description /C /API#20Description /Pg 146 0 R /K 7 /P 1280 0 R >> endobj 932 0 obj << /S /API#20Description /C /API#20Description /Pg 146 0 R /K 8 /P 1280 0 R >> endobj 933 0 obj << /S /API#20Function /C /API#20Function /Pg 146 0 R /K 9 /P 1280 0 R >> endobj 934 0 obj << /S /API#20Description /C /API#20Description /Pg 146 0 R /K 10 /P 1280 0 R >> endobj 935 0 obj << /S /API#20Description /C /API#20Description /Pg 146 0 R /K 11 /P 1280 0 R >> endobj 936 0 obj << /S /API#20Function /C /API#20Function /Pg 146 0 R /K 12 /P 1280 0 R >> endobj 937 0 obj << /S /API#20Description /C /API#20Description /Pg 146 0 R /K 13 /P 1280 0 R >> endobj 938 0 obj << /S /API#20Description /C /API#20Description /Pg 146 0 R /K 14 /P 1280 0 R >> endobj 939 0 obj << /S /API#20Function /C /API#20Function /Pg 146 0 R /K 15 /P 1280 0 R >> endobj 940 0 obj << /S /API#20Description /C /API#20Description /Pg 146 0 R /K 16 /P 1280 0 R >> endobj 941 0 obj << /S /API#20Description /C /API#20Description /Pg 146 0 R /K 17 /P 1280 0 R >> endobj 942 0 obj << /S /API#20Function /C /API#20Function /Pg 146 0 R /K 18 /P 1280 0 R >> endobj 943 0 obj << /S /API#20Description /C /API#20Description /Pg 146 0 R /K 19 /P 1280 0 R >> endobj 944 0 obj << /S /API#20Description /C /API#20Description /Pg 146 0 R /K 20 /P 1280 0 R >> endobj 945 0 obj << /S /API#20Description /C /API#20Description /Pg 149 0 R /K 0 /P 1280 0 R >> endobj 946 0 obj << /S /API#20Function /C /API#20Function /Pg 149 0 R /K 1 /P 1280 0 R >> endobj 947 0 obj << /S /API#20Description /C /API#20Description /Pg 149 0 R /K 2 /P 1280 0 R >> endobj 948 0 obj << /S /API#20Description /C /API#20Description /Pg 149 0 R /K 3 /P 1280 0 R >> endobj 949 0 obj << /S /API#20Description /C /API#20Description /Pg 149 0 R /K 4 /P 1280 0 R >> endobj 950 0 obj << /S /API#20Description /C /API#20Description /Pg 149 0 R /K 5 /P 1280 0 R >> endobj 951 0 obj << /S /API#20Function /C /API#20Function /Pg 149 0 R /K 6 /P 1280 0 R >> endobj 952 0 obj << /S /API#20Description /C /API#20Description /Pg 149 0 R /K 7 /P 1280 0 R >> endobj 953 0 obj << /S /API#20Description /C /API#20Description /Pg 149 0 R /K 8 /P 1280 0 R >> endobj 954 0 obj << /S /API#20Description /C /API#20Description /Pg 149 0 R /K 9 /P 1280 0 R >> endobj 955 0 obj << /S /API#20Description /C /API#20Description /Pg 149 0 R /K 10 /P 1280 0 R >> endobj 956 0 obj << /S /API#20Function /C /API#20Function /Pg 149 0 R /K 11 /P 1280 0 R >> endobj 957 0 obj << /S /API#20Description /C /API#20Description /Pg 149 0 R /K 12 /P 1280 0 R >> endobj 958 0 obj << /S /API#20Description /C /API#20Description /Pg 149 0 R /K 13 /P 1280 0 R >> endobj 959 0 obj << /S /API#20Description /C /API#20Description /Pg 149 0 R /K 14 /P 1280 0 R >> endobj 960 0 obj << /S /API#20Description /C /API#20Description /Pg 149 0 R /K 15 /P 1280 0 R >> endobj 961 0 obj << /S /API#20Function /C /API#20Function /Pg 149 0 R /K 16 /P 1280 0 R >> endobj 962 0 obj << /S /API#20Description /C /API#20Description /Pg 149 0 R /K 17 /P 1280 0 R >> endobj 963 0 obj << /S /API#20Description /C /API#20Description /Pg 152 0 R /K 0 /P 1280 0 R >> endobj 964 0 obj << /S /API#20Description /C /API#20Description /Pg 152 0 R /K 1 /P 1280 0 R >> endobj 965 0 obj << /S /API#20Description /C /API#20Description /Pg 152 0 R /K 2 /P 1280 0 R >> endobj 966 0 obj << /S /API#20Function /C /API#20Function /Pg 152 0 R /K 3 /P 1280 0 R >> endobj 967 0 obj << /S /API#20Description /C /API#20Description /Pg 152 0 R /K 4 /P 1280 0 R >> endobj 968 0 obj << /S /API#20Description /C /API#20Description /Pg 152 0 R /K 5 /P 1280 0 R >> endobj 969 0 obj << /S /API#20Description /C /API#20Description /Pg 152 0 R /K 6 /P 1280 0 R >> endobj 970 0 obj << /S /API#20Function /C /API#20Function /Pg 152 0 R /K 7 /P 1280 0 R >> endobj 971 0 obj << /S /API#20Description /C /API#20Description /Pg 152 0 R /K 8 /P 1280 0 R >> endobj 972 0 obj << /S /API#20Description /C /API#20Description /Pg 152 0 R /K [ 9 973 0 R 11 ] /P 1280 0 R >> endobj 973 0 obj << /S /Link /P 972 0 R /K [ 974 0 R << /Type /OBJR /Pg 152 0 R /Obj 227 0 R >> ] >> endobj 974 0 obj << /S /Underline /P 973 0 R /A 1801 0 R /Pg 152 0 R /K 10 >> endobj 975 0 obj << /S /API#20Description /C /API#20Description /Pg 152 0 R /K 12 /P 1280 0 R >> endobj 976 0 obj << /S /API#20Function /C /API#20Function /Pg 152 0 R /K 13 /P 1280 0 R >> endobj 977 0 obj << /S /API#20Description /C /API#20Description /Pg 152 0 R /K 14 /P 1280 0 R >> endobj 978 0 obj << /S /API#20Description /C /API#20Description /Pg 152 0 R /K 15 /P 1280 0 R >> endobj 979 0 obj << /S /API#20Function /C /API#20Function /Pg 152 0 R /K 16 /P 1280 0 R >> endobj 980 0 obj << /S /API#20Description /C /API#20Description /Pg 152 0 R /K 17 /P 1280 0 R >> endobj 981 0 obj << /S /API#20Description /C /API#20Description /Pg 152 0 R /K 18 /P 1280 0 R >> endobj 982 0 obj << /S /API#20Function /C /API#20Function /Pg 152 0 R /K 19 /P 1280 0 R >> endobj 983 0 obj << /S /API#20Description /C /API#20Description /Pg 152 0 R /K 20 /P 1280 0 R >> endobj 984 0 obj << /S /LBody /C /#C3#9Cberschrift#202 /Pg 152 0 R /K 21 /P 1665 0 R >> endobj 985 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 152 0 R /K 22 /P 1280 0 R >> endobj 986 0 obj << /S /API#20Function /C /API#20Function /Pg 157 0 R /K 0 /P 1280 0 R >> endobj 987 0 obj << /S /API#20Description /C /API#20Description /Pg 157 0 R /K 1 /P 1280 0 R >> endobj 988 0 obj << /S /API#20Description /C /API#20Description /Pg 157 0 R /K 2 /P 1280 0 R >> endobj 989 0 obj << /S /API#20Description /C /API#20Description /Pg 157 0 R /K 3 /P 1280 0 R >> endobj 990 0 obj << /S /API#20Description /C /API#20Description /Pg 157 0 R /K 4 /P 1280 0 R >> endobj 991 0 obj << /S /API#20Function /C /API#20Function /Pg 157 0 R /K 5 /P 1280 0 R >> endobj 992 0 obj << /S /API#20Description /C /API#20Description /Pg 157 0 R /K 6 /P 1280 0 R >> endobj 993 0 obj << /S /API#20Description /C /API#20Description /Pg 157 0 R /K 7 /P 1280 0 R >> endobj 994 0 obj << /S /API#20Description /C /API#20Description /Pg 157 0 R /K 8 /P 1280 0 R >> endobj 995 0 obj << /S /API#20Function /C /API#20Function /Pg 157 0 R /K 9 /P 1280 0 R >> endobj 996 0 obj << /S /API#20Description /C /API#20Description /Pg 157 0 R /K 10 /P 1280 0 R >> endobj 997 0 obj << /S /API#20Description /C /API#20Description /Pg 157 0 R /K 11 /P 1280 0 R >> endobj 998 0 obj << /S /API#20Description /C /API#20Description /Pg 157 0 R /K 12 /P 1280 0 R >> endobj 999 0 obj << /S /API#20Function /C /API#20Function /Pg 157 0 R /K 13 /P 1280 0 R >> endobj 1000 0 obj << /S /API#20Description /C /API#20Description /Pg 157 0 R /K 14 /P 1280 0 R >> endobj 1001 0 obj << /S /API#20Description /C /API#20Description /Pg 157 0 R /K 15 /P 1280 0 R >> endobj 1002 0 obj << /S /API#20Description /C /API#20Description /Pg 157 0 R /K 16 /P 1280 0 R >> endobj 1003 0 obj << /S /API#20Function /C /API#20Function /Pg 157 0 R /K 17 /P 1280 0 R >> endobj 1004 0 obj << /S /API#20Description /C /API#20Description /Pg 157 0 R /K 18 /P 1280 0 R >> endobj 1005 0 obj << /S /API#20Description /C /API#20Description /Pg 157 0 R /K 19 /P 1280 0 R >> endobj 1006 0 obj << /S /API#20Description /C /API#20Description /Pg 157 0 R /K 20 /P 1280 0 R >> endobj 1007 0 obj << /S /API#20Function /C /API#20Function /Pg 157 0 R /K 21 /P 1280 0 R >> endobj 1008 0 obj << /S /API#20Description /C /API#20Description /Pg 157 0 R /K 22 /P 1280 0 R >> endobj 1009 0 obj << /S /API#20Description /C /API#20Description /Pg 157 0 R /K 23 /P 1280 0 R >> endobj 1010 0 obj << /S /API#20Description /C /API#20Description /Pg 157 0 R /K 24 /P 1280 0 R >> endobj 1011 0 obj << /S /LBody /C /#C3#9Cberschrift#202 /Pg 160 0 R /K 0 /P 1667 0 R >> endobj 1012 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 160 0 R /K 1 /P 1280 0 R >> endobj 1013 0 obj << /S /LBody /C /#C3#9Cberschrift#201 /Pg 163 0 R /K 0 /P 1669 0 R >> endobj 1014 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 163 0 R /K 1 /P 1280 0 R >> endobj 1015 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 163 0 R /K 2 /P 1280 0 R >> endobj 1016 0 obj << /S /API#20Attribute /C /API#20Attribute /Pg 163 0 R /K 3 /P 1280 0 R >> endobj 1017 0 obj << /S /API#20Description /C /API#20Description /Pg 163 0 R /K 4 /P 1280 0 R >> endobj 1018 0 obj << /S /API#20Attribute /C /API#20Attribute /Pg 163 0 R /K 5 /P 1280 0 R >> endobj 1019 0 obj << /S /API#20Description /C /API#20Description /Pg 163 0 R /K 6 /P 1280 0 R >> endobj 1020 0 obj << /S /API#20Attribute /C /API#20Attribute /Pg 163 0 R /K 7 /P 1280 0 R >> endobj 1021 0 obj << /S /API#20Description /C /API#20Description /Pg 163 0 R /K 8 /P 1280 0 R >> endobj 1022 0 obj << /S /API#20Attribute /C /API#20Attribute /Pg 163 0 R /K 9 /P 1280 0 R >> endobj 1023 0 obj << /S /API#20Description /C /API#20Description /Pg 163 0 R /K 10 /P 1280 0 R >> endobj 1024 0 obj << /S /API#20Attribute /C /API#20Attribute /Pg 163 0 R /K 11 /P 1280 0 R >> endobj 1025 0 obj << /S /API#20Description /C /API#20Description /Pg 163 0 R /K 12 /P 1280 0 R >> endobj 1026 0 obj << /S /API#20Attribute /C /API#20Attribute /Pg 163 0 R /K 13 /P 1280 0 R >> endobj 1027 0 obj << /S /API#20Description /C /API#20Description /Pg 163 0 R /K 14 /P 1280 0 R >> endobj 1028 0 obj << /S /API#20Attribute /C /API#20Attribute /Pg 163 0 R /K 15 /P 1280 0 R >> endobj 1029 0 obj << /S /API#20Description /C /API#20Description /Pg 163 0 R /K 16 /P 1280 0 R >> endobj 1030 0 obj << /S /API#20Attribute /C /API#20Attribute /Pg 163 0 R /K 17 /P 1280 0 R >> endobj 1031 0 obj << /S /API#20Description /C /API#20Description /Pg 163 0 R /K 18 /P 1280 0 R >> endobj 1032 0 obj << /S /API#20Attribute /C /API#20Attribute /Pg 163 0 R /K 19 /P 1280 0 R >> endobj 1033 0 obj << /S /API#20Description /C /API#20Description /Pg 163 0 R /K 20 /P 1280 0 R >> endobj 1034 0 obj << /S /API#20Attribute /C /API#20Attribute /Pg 163 0 R /K 21 /P 1280 0 R >> endobj 1035 0 obj << /S /API#20Description /C /API#20Description /Pg 163 0 R /K 22 /P 1280 0 R >> endobj 1036 0 obj << /S /API#20Attribute /C /API#20Attribute /Pg 163 0 R /K 23 /P 1280 0 R >> endobj 1037 0 obj << /S /API#20Description /C /API#20Description /Pg 163 0 R /K 24 /P 1280 0 R >> endobj 1038 0 obj << /S /API#20Attribute /C /API#20Attribute /Pg 166 0 R /K 0 /P 1280 0 R >> endobj 1039 0 obj << /S /API#20Description /C /API#20Description /Pg 166 0 R /K 1 /P 1280 0 R >> endobj 1040 0 obj << /S /API#20Attribute /C /API#20Attribute /Pg 166 0 R /K 2 /P 1280 0 R >> endobj 1041 0 obj << /S /API#20Description /C /API#20Description /Pg 166 0 R /K 3 /P 1280 0 R >> endobj 1042 0 obj << /S /API#20Attribute /C /API#20Attribute /Pg 166 0 R /K 4 /P 1280 0 R >> endobj 1043 0 obj << /S /API#20Description /C /API#20Description /Pg 166 0 R /K 5 /P 1280 0 R >> endobj 1044 0 obj << /S /API#20Attribute /C /API#20Attribute /Pg 166 0 R /K 6 /P 1280 0 R >> endobj 1045 0 obj << /S /API#20Description /C /API#20Description /Pg 166 0 R /K 7 /P 1280 0 R >> endobj 1046 0 obj << /S /API#20Attribute /C /API#20Attribute /Pg 166 0 R /K 8 /P 1280 0 R >> endobj 1047 0 obj << /S /API#20Description /C /API#20Description /Pg 166 0 R /K 9 /P 1280 0 R >> endobj 1048 0 obj << /S /API#20Attribute /C /API#20Attribute /Pg 166 0 R /K 10 /P 1280 0 R >> endobj 1049 0 obj << /S /API#20Description /C /API#20Description /Pg 166 0 R /K 11 /P 1280 0 R >> endobj 1050 0 obj << /S /API#20Attribute /C /API#20Attribute /Pg 166 0 R /K 12 /P 1280 0 R >> endobj 1051 0 obj << /S /API#20Description /C /API#20Description /Pg 166 0 R /K 13 /P 1280 0 R >> endobj 1052 0 obj << /S /API#20Attribute /C /API#20Attribute /Pg 166 0 R /K 14 /P 1280 0 R >> endobj 1053 0 obj << /S /API#20Function /C /API#20Function /Pg 166 0 R /K 15 /P 1280 0 R >> endobj 1054 0 obj << /S /LBody /C /#C3#9Cberschrift#201 /Pg 169 0 R /K 0 /P 1671 0 R >> endobj 1055 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 169 0 R /K 1 /P 1280 0 R >> endobj 1056 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 169 0 R /K 2 /P 1280 0 R >> endobj 1057 0 obj << /S /Program#20Text /C /Program#20Text /Pg 169 0 R /K 3 /P 1280 0 R >> endobj 1058 0 obj << /S /Program#20Text /C /Program#20Text /Pg 169 0 R /K 4 /P 1280 0 R >> endobj 1059 0 obj << /S /Program#20Text /C /Program#20Text /Pg 169 0 R /K 5 /P 1280 0 R >> endobj 1060 0 obj << /S /Program#20Text /C /Program#20Text /Pg 169 0 R /K 6 /P 1280 0 R >> endobj 1061 0 obj << /S /Program#20Text /C /Program#20Text /Pg 169 0 R /K 7 /P 1280 0 R >> endobj 1062 0 obj << /S /Program#20Text /C /Program#20Text /Pg 169 0 R /K 8 /P 1280 0 R >> endobj 1063 0 obj << /S /Program#20Text /C /Program#20Text /Pg 169 0 R /K 9 /P 1280 0 R >> endobj 1064 0 obj << /S /Program#20Text /C /Program#20Text /Pg 169 0 R /K 10 /P 1280 0 R >> endobj 1065 0 obj << /S /Program#20Text /C /Program#20Text /Pg 169 0 R /K 11 /P 1280 0 R >> endobj 1066 0 obj << /S /Program#20Text /C /Program#20Text /Pg 169 0 R /K 12 /P 1280 0 R >> endobj 1067 0 obj << /S /Program#20Text /C /Program#20Text /Pg 169 0 R /K 13 /P 1280 0 R >> endobj 1068 0 obj << /S /Program#20Text /C /Program#20Text /Pg 169 0 R /K 14 /P 1280 0 R >> endobj 1069 0 obj << /S /Program#20Text /C /Program#20Text /Pg 169 0 R /K 15 /P 1280 0 R >> endobj 1070 0 obj << /S /Program#20Text /C /Program#20Text /Pg 169 0 R /K 16 /P 1280 0 R >> endobj 1071 0 obj << /S /Program#20Text /C /Program#20Text /Pg 169 0 R /K 17 /P 1280 0 R >> endobj 1072 0 obj << /S /Program#20Text /C /Program#20Text /Pg 169 0 R /K 18 /P 1280 0 R >> endobj 1073 0 obj << /S /Program#20Text /C /Program#20Text /Pg 169 0 R /K 19 /P 1280 0 R >> endobj 1074 0 obj << /S /Program#20Text /C /Program#20Text /Pg 169 0 R /K 20 /P 1280 0 R >> endobj 1075 0 obj << /S /Program#20Text /C /Program#20Text /Pg 169 0 R /K 21 /P 1280 0 R >> endobj 1076 0 obj << /S /Program#20Text /C /Program#20Text /Pg 169 0 R /K 22 /P 1280 0 R >> endobj 1077 0 obj << /S /Program#20Text /C /Program#20Text /Pg 169 0 R /K 23 /P 1280 0 R >> endobj 1078 0 obj << /S /Program#20Text /C /Program#20Text /Pg 169 0 R /K 24 /P 1280 0 R >> endobj 1079 0 obj << /S /Program#20Text /C /Program#20Text /Pg 169 0 R /K 25 /P 1280 0 R >> endobj 1080 0 obj << /S /Program#20Text /C /Program#20Text /Pg 169 0 R /K 26 /P 1280 0 R >> endobj 1081 0 obj << /S /Program#20Text /C /Program#20Text /Pg 169 0 R /K 27 /P 1280 0 R >> endobj 1082 0 obj << /S /Program#20Text /C /Program#20Text /Pg 169 0 R /K 28 /P 1280 0 R >> endobj 1083 0 obj << /S /Program#20Text /C /Program#20Text /Pg 169 0 R /K 29 /P 1280 0 R >> endobj 1084 0 obj << /S /Program#20Text /C /Program#20Text /Pg 169 0 R /K 30 /P 1280 0 R >> endobj 1085 0 obj << /S /Program#20Text /C /Program#20Text /Pg 169 0 R /K 31 /P 1280 0 R >> endobj 1086 0 obj << /S /Program#20Text /C /Program#20Text /Pg 169 0 R /K 32 /P 1280 0 R >> endobj 1087 0 obj << /S /Program#20Text /C /Program#20Text /Pg 169 0 R /K 33 /P 1280 0 R >> endobj 1088 0 obj << /S /Program#20Text /C /Program#20Text /Pg 169 0 R /K 34 /P 1280 0 R >> endobj 1089 0 obj << /S /Program#20Text /C /Program#20Text /Pg 169 0 R /K 35 /P 1280 0 R >> endobj 1090 0 obj << /S /Program#20Text /C /Program#20Text /Pg 169 0 R /K 36 /P 1280 0 R >> endobj 1091 0 obj << /S /Program#20Text /C /Program#20Text /Pg 169 0 R /K 37 /P 1280 0 R >> endobj 1092 0 obj << /S /Program#20Text /C /Program#20Text /Pg 169 0 R /K 38 /P 1280 0 R >> endobj 1093 0 obj << /S /Program#20Text /C /Program#20Text /Pg 169 0 R /K 39 /P 1280 0 R >> endobj 1094 0 obj << /S /Program#20Text /C /Program#20Text /Pg 169 0 R /K 40 /P 1280 0 R >> endobj 1095 0 obj << /S /Program#20Text /C /Program#20Text /Pg 169 0 R /K 41 /P 1280 0 R >> endobj 1096 0 obj << /S /Program#20Text /C /Program#20Text /Pg 169 0 R /K 42 /P 1280 0 R >> endobj 1097 0 obj << /S /Program#20Text /C /Program#20Text /Pg 169 0 R /K 43 /P 1280 0 R >> endobj 1098 0 obj << /S /Program#20Text /C /Program#20Text /Pg 169 0 R /K 44 /P 1280 0 R >> endobj 1099 0 obj << /S /Program#20Text /C /Program#20Text /Pg 169 0 R /K 45 /P 1280 0 R >> endobj 1100 0 obj << /S /Program#20Text /C /Program#20Text /Pg 169 0 R /K 46 /P 1280 0 R >> endobj 1101 0 obj << /S /Program#20Text /C /Program#20Text /Pg 169 0 R /K 47 /P 1280 0 R >> endobj 1102 0 obj << /S /Program#20Text /C /Program#20Text /Pg 169 0 R /K 48 /P 1280 0 R >> endobj 1103 0 obj << /S /Program#20Text /C /Program#20Text /Pg 169 0 R /K 49 /P 1280 0 R >> endobj 1104 0 obj << /S /Program#20Text /C /Program#20Text /Pg 169 0 R /K 50 /P 1280 0 R >> endobj 1105 0 obj << /S /Program#20Text /C /Program#20Text /Pg 169 0 R /K 51 /P 1280 0 R >> endobj 1106 0 obj << /S /Program#20Text /C /Program#20Text /Pg 169 0 R /K 52 /P 1280 0 R >> endobj 1107 0 obj << /S /Program#20Text /C /Program#20Text /Pg 169 0 R /K 53 /P 1280 0 R >> endobj 1108 0 obj << /S /Program#20Text /C /Program#20Text /Pg 172 0 R /K 0 /P 1280 0 R >> endobj 1109 0 obj << /S /Program#20Text /C /Program#20Text /Pg 172 0 R /K 1 /P 1280 0 R >> endobj 1110 0 obj << /S /Program#20Text /C /Program#20Text /Pg 172 0 R /K 2 /P 1280 0 R >> endobj 1111 0 obj << /S /Program#20Text /C /Program#20Text /Pg 172 0 R /K 3 /P 1280 0 R >> endobj 1112 0 obj << /S /Program#20Text /C /Program#20Text /Pg 172 0 R /K 4 /P 1280 0 R >> endobj 1113 0 obj << /S /Program#20Text /C /Program#20Text /Pg 172 0 R /K 5 /P 1280 0 R >> endobj 1114 0 obj << /S /Program#20Text /C /Program#20Text /Pg 172 0 R /K 6 /P 1280 0 R >> endobj 1115 0 obj << /S /Program#20Text /C /Program#20Text /Pg 172 0 R /K 7 /P 1280 0 R >> endobj 1116 0 obj << /S /Program#20Text /C /Program#20Text /Pg 172 0 R /K 8 /P 1280 0 R >> endobj 1117 0 obj << /S /Program#20Text /C /Program#20Text /Pg 172 0 R /K 9 /P 1280 0 R >> endobj 1118 0 obj << /S /Program#20Text /C /Program#20Text /Pg 172 0 R /K 10 /P 1280 0 R >> endobj 1119 0 obj << /S /Program#20Text /C /Program#20Text /Pg 172 0 R /K 11 /P 1280 0 R >> endobj 1120 0 obj << /S /Program#20Text /C /Program#20Text /Pg 172 0 R /K 12 /P 1280 0 R >> endobj 1121 0 obj << /S /Program#20Text /C /Program#20Text /Pg 172 0 R /K 13 /P 1280 0 R >> endobj 1122 0 obj << /S /Program#20Text /C /Program#20Text /Pg 172 0 R /K 14 /P 1280 0 R >> endobj 1123 0 obj << /S /Program#20Text /C /Program#20Text /Pg 172 0 R /K 15 /P 1280 0 R >> endobj 1124 0 obj << /S /Program#20Text /C /Program#20Text /Pg 172 0 R /K 16 /P 1280 0 R >> endobj 1125 0 obj << /S /Program#20Text /C /Program#20Text /Pg 172 0 R /K 17 /P 1280 0 R >> endobj 1126 0 obj << /S /Program#20Text /C /Program#20Text /Pg 172 0 R /K 18 /P 1280 0 R >> endobj 1127 0 obj << /S /Program#20Text /C /Program#20Text /Pg 172 0 R /K 19 /P 1280 0 R >> endobj 1128 0 obj << /S /Program#20Text /C /Program#20Text /Pg 172 0 R /K 20 /P 1280 0 R >> endobj 1129 0 obj << /S /Program#20Text /C /Program#20Text /Pg 172 0 R /K 21 /P 1280 0 R >> endobj 1130 0 obj << /S /Program#20Text /C /Program#20Text /Pg 172 0 R /K 22 /P 1280 0 R >> endobj 1131 0 obj << /S /Program#20Text /C /Program#20Text /Pg 172 0 R /K 23 /P 1280 0 R >> endobj 1132 0 obj << /S /Program#20Text /C /Program#20Text /Pg 172 0 R /K 24 /P 1280 0 R >> endobj 1133 0 obj << /S /Program#20Text /C /Program#20Text /Pg 172 0 R /K 25 /P 1280 0 R >> endobj 1134 0 obj << /S /Program#20Text /C /Program#20Text /Pg 172 0 R /K 26 /P 1280 0 R >> endobj 1135 0 obj << /S /Program#20Text /C /Program#20Text /Pg 172 0 R /K 27 /P 1280 0 R >> endobj 1136 0 obj << /S /Program#20Text /C /Program#20Text /Pg 172 0 R /K 28 /P 1280 0 R >> endobj 1137 0 obj << /S /Program#20Text /C /Program#20Text /Pg 172 0 R /K 29 /P 1280 0 R >> endobj 1138 0 obj << /S /Program#20Text /C /Program#20Text /Pg 172 0 R /K 30 /P 1280 0 R >> endobj 1139 0 obj << /S /Program#20Text /C /Program#20Text /Pg 172 0 R /K 31 /P 1280 0 R >> endobj 1140 0 obj << /S /Program#20Text /C /Program#20Text /Pg 172 0 R /K 32 /P 1280 0 R >> endobj 1141 0 obj << /S /Program#20Text /C /Program#20Text /Pg 172 0 R /K 33 /P 1280 0 R >> endobj 1142 0 obj << /S /Program#20Text /C /Program#20Text /Pg 172 0 R /K 34 /P 1280 0 R >> endobj 1143 0 obj << /S /Program#20Text /C /Program#20Text /Pg 172 0 R /K 35 /P 1280 0 R >> endobj 1144 0 obj << /S /Program#20Text /C /Program#20Text /Pg 172 0 R /K 36 /P 1280 0 R >> endobj 1145 0 obj << /S /Program#20Text /C /Program#20Text /Pg 172 0 R /K 37 /P 1280 0 R >> endobj 1146 0 obj << /S /Program#20Text /C /Program#20Text /Pg 172 0 R /K 38 /P 1280 0 R >> endobj 1147 0 obj << /S /Program#20Text /C /Program#20Text /Pg 172 0 R /K 39 /P 1280 0 R >> endobj 1148 0 obj << /S /Program#20Text /C /Program#20Text /Pg 172 0 R /K 40 /P 1280 0 R >> endobj 1149 0 obj << /S /Program#20Text /C /Program#20Text /Pg 172 0 R /K 41 /P 1280 0 R >> endobj 1150 0 obj << /S /Program#20Text /C /Program#20Text /Pg 172 0 R /K 42 /P 1280 0 R >> endobj 1151 0 obj << /S /Program#20Text /C /Program#20Text /Pg 172 0 R /K 43 /P 1280 0 R >> endobj 1152 0 obj << /S /Program#20Text /C /Program#20Text /Pg 172 0 R /K 44 /P 1280 0 R >> endobj 1153 0 obj << /S /Program#20Text /C /Program#20Text /Pg 172 0 R /K 45 /P 1280 0 R >> endobj 1154 0 obj << /S /Program#20Text /C /Program#20Text /Pg 172 0 R /K 46 /P 1280 0 R >> endobj 1155 0 obj << /S /Program#20Text /C /Program#20Text /Pg 172 0 R /K 47 /P 1280 0 R >> endobj 1156 0 obj << /S /Program#20Text /C /Program#20Text /Pg 172 0 R /K 48 /P 1280 0 R >> endobj 1157 0 obj << /S /Program#20Text /C /Program#20Text /Pg 172 0 R /K 49 /P 1280 0 R >> endobj 1158 0 obj << /S /Program#20Text /C /Program#20Text /Pg 172 0 R /K 50 /P 1280 0 R >> endobj 1159 0 obj << /S /Program#20Text /C /Program#20Text /Pg 172 0 R /K 51 /P 1280 0 R >> endobj 1160 0 obj << /S /Program#20Text /C /Program#20Text /Pg 172 0 R /K 52 /P 1280 0 R >> endobj 1161 0 obj << /S /Program#20Text /C /Program#20Text /Pg 172 0 R /K 53 /P 1280 0 R >> endobj 1162 0 obj << /S /Program#20Text /C /Program#20Text /Pg 172 0 R /K 54 /P 1280 0 R >> endobj 1163 0 obj << /S /Program#20Text /C /Program#20Text /Pg 172 0 R /K 55 /P 1280 0 R >> endobj 1164 0 obj << /S /Program#20Text /C /Program#20Text /Pg 172 0 R /K 56 /P 1280 0 R >> endobj 1165 0 obj << /S /Program#20Text /C /Program#20Text /Pg 172 0 R /K 57 /P 1280 0 R >> endobj 1166 0 obj << /S /Program#20Text /C /Program#20Text /Pg 172 0 R /K 58 /P 1280 0 R >> endobj 1167 0 obj << /S /Program#20Text /C /Program#20Text /Pg 172 0 R /K 59 /P 1280 0 R >> endobj 1168 0 obj << /S /Program#20Text /C /Program#20Text /Pg 172 0 R /K 60 /P 1280 0 R >> endobj 1169 0 obj << /S /Program#20Text /C /Program#20Text /Pg 172 0 R /K 61 /P 1280 0 R >> endobj 1170 0 obj << /S /Program#20Text /C /Program#20Text /Pg 172 0 R /K 62 /P 1280 0 R >> endobj 1171 0 obj << /S /Program#20Text /C /Program#20Text /Pg 172 0 R /K 63 /P 1280 0 R >> endobj 1172 0 obj << /S /Program#20Text /C /Program#20Text /Pg 175 0 R /K 0 /P 1280 0 R >> endobj 1173 0 obj << /S /Program#20Text /C /Program#20Text /Pg 175 0 R /K 1 /P 1280 0 R >> endobj 1174 0 obj << /S /Program#20Text /C /Program#20Text /Pg 175 0 R /K 2 /P 1280 0 R >> endobj 1175 0 obj << /S /Program#20Text /C /Program#20Text /Pg 175 0 R /K 3 /P 1280 0 R >> endobj 1176 0 obj << /S /Program#20Text /C /Program#20Text /Pg 175 0 R /K 4 /P 1280 0 R >> endobj 1177 0 obj << /S /Program#20Text /C /Program#20Text /Pg 175 0 R /K 5 /P 1280 0 R >> endobj 1178 0 obj << /S /Program#20Text /C /Program#20Text /Pg 175 0 R /K 6 /P 1280 0 R >> endobj 1179 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 175 0 R /K 7 /P 1280 0 R >> endobj 1180 0 obj << /S /LBody /C /#C3#9Cberschrift#201 /Pg 178 0 R /K 0 /P 1673 0 R >> endobj 1181 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 178 0 R /K [ 1 1182 0 R 3 ] /P 1280 0 R >> endobj 1182 0 obj << /S /Link /P 1181 0 R /K [ 1183 0 R << /Type /OBJR /Pg 178 0 R /Obj 228 0 R >> ] >> endobj 1183 0 obj << /S /Underline /P 1182 0 R /A 1810 0 R /Pg 178 0 R /K 2 >> endobj 1184 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 178 0 R /K [ 4 1185 0 R 6 ] /P 1280 0 R >> endobj 1185 0 obj << /S /Link /P 1184 0 R /K [ 1186 0 R << /Type /OBJR /Pg 178 0 R /Obj 230 0 R >> ] >> endobj 1186 0 obj << /S /Underline /P 1185 0 R /A 1811 0 R /Pg 178 0 R /K 5 >> endobj 1187 0 obj << /S /LBody /C /#C3#9Cberschrift#201 /Pg 182 0 R /K 0 /P 1675 0 R >> endobj 1188 0 obj << /S /HTML#20Vorformatiert /A [ 1189 0 R ] /C /HTML#20Vorformatiert /Pg 182 0 R /K 1 /P 1280 0 R >> endobj 1189 0 obj << /O /Layout /StartIndent 36 >> endobj 1190 0 obj << /O /Layout /WritingMode /LrTb /StartIndent 0 /EndIndent 0 /TextAlign /Start /SpaceBefore 0 /SpaceAfter 0 /TextIndent 0 >> endobj 1191 0 obj << /S /Program#20Text /C /Program#20Text /Pg 182 0 R /K 2 /P 1280 0 R >> endobj 1192 0 obj << /S /Program#20Text /C /Program#20Text /Pg 182 0 R /K 3 /P 1280 0 R >> endobj 1193 0 obj << /S /Program#20Text /C /Program#20Text /Pg 182 0 R /K 4 /P 1280 0 R >> endobj 1194 0 obj << /S /Program#20Text /C /Program#20Text /Pg 182 0 R /K 5 /P 1280 0 R >> endobj 1195 0 obj << /S /Program#20Text /C /Program#20Text /Pg 182 0 R /K 6 /P 1280 0 R >> endobj 1196 0 obj << /S /Program#20Text /C /Program#20Text /Pg 182 0 R /K 7 /P 1280 0 R >> endobj 1197 0 obj << /S /Program#20Text /C /Program#20Text /Pg 182 0 R /K 8 /P 1280 0 R >> endobj 1198 0 obj << /S /Program#20Text /C /Program#20Text /Pg 182 0 R /K 9 /P 1280 0 R >> endobj 1199 0 obj << /S /Program#20Text /C /Program#20Text /Pg 182 0 R /K 10 /P 1280 0 R >> endobj 1200 0 obj << /S /Program#20Text /C /Program#20Text /Pg 182 0 R /K 11 /P 1280 0 R >> endobj 1201 0 obj << /S /Program#20Text /C /Program#20Text /Pg 182 0 R /K 12 /P 1280 0 R >> endobj 1202 0 obj << /S /Program#20Text /C /Program#20Text /Pg 182 0 R /K 13 /P 1280 0 R >> endobj 1203 0 obj << /S /Program#20Text /C /Program#20Text /Pg 182 0 R /K 14 /P 1280 0 R >> endobj 1204 0 obj << /S /Program#20Text /C /Program#20Text /Pg 182 0 R /K 15 /P 1280 0 R >> endobj 1205 0 obj << /S /Program#20Text /C /Program#20Text /Pg 182 0 R /K 16 /P 1280 0 R >> endobj 1206 0 obj << /S /Program#20Text /C /Program#20Text /Pg 182 0 R /K 17 /P 1280 0 R >> endobj 1207 0 obj << /S /Program#20Text /C /Program#20Text /Pg 182 0 R /K 18 /P 1280 0 R >> endobj 1208 0 obj << /S /Program#20Text /C /Program#20Text /Pg 182 0 R /K 19 /P 1280 0 R >> endobj 1209 0 obj << /S /Program#20Text /C /Program#20Text /Pg 182 0 R /K 20 /P 1280 0 R >> endobj 1210 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 182 0 R /K 21 /P 1280 0 R >> endobj 1211 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 182 0 R /K 22 /P 1280 0 R >> endobj 1212 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 182 0 R /K 23 /P 1280 0 R >> endobj 1213 0 obj << /S /LBody /C /#C3#9Cberschrift#201 /Pg 185 0 R /K 0 /P 1677 0 R >> endobj 1214 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 185 0 R /K [ 1 1215 0 R 3 ] /P 1280 0 R >> endobj 1215 0 obj << /S /Link /P 1214 0 R /K [ 1216 0 R << /Type /OBJR /Pg 185 0 R /Obj 232 0 R >> ] >> endobj 1216 0 obj << /S /Underline /P 1215 0 R /A 1814 0 R /Pg 185 0 R /K 2 >> endobj 1217 0 obj << /S /LBody /C /#C3#9Cberschrift#201 /Pg 189 0 R /K 0 /P 1679 0 R >> endobj 1218 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 189 0 R /K [ 1 1219 0 R 3 ] /P 1280 0 R >> endobj 1219 0 obj << /S /Link /P 1218 0 R /K [ 1220 0 R << /Type /OBJR /Pg 189 0 R /Obj 234 0 R >> ] >> endobj 1220 0 obj << /S /Underline /P 1219 0 R /A 1816 0 R /Pg 189 0 R /K 2 >> endobj 1221 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 189 0 R /K [ 4 1222 0 R 6 ] /P 1280 0 R >> endobj 1222 0 obj << /S /Link /P 1221 0 R /K [ 1223 0 R << /Type /OBJR /Pg 189 0 R /Obj 236 0 R >> ] >> endobj 1223 0 obj << /S /Underline /P 1222 0 R /A 1817 0 R /Pg 189 0 R /K 5 >> endobj 1224 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 189 0 R /K 7 /P 1280 0 R >> endobj 1225 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 189 0 R /K 8 /P 1280 0 R >> endobj 1226 0 obj << /S /License#20Title /C /License#20Title /Pg 193 0 R /K 0 /P 1280 0 R >> endobj 1227 0 obj << /S /License#20Subtitle /C /License#20Subtitle /Pg 193 0 R /K 1 /P 1280 0 R >> endobj 1228 0 obj << /O /Layout /WritingMode /LrTb /StartIndent 0 /EndIndent 0 /TextAlign /Center /SpaceBefore 0 /SpaceAfter 6 /TextIndent 0 >> endobj 1229 0 obj << /S /License#20Text /C /License#20Text /Pg 193 0 R /K [ 2 1232 0 R 4 ] /P 1280 0 R >> endobj 1230 0 obj << /O /Layout /WritingMode /LrTb /StartIndent 0 /EndIndent 0 /TextAlign /Center /SpaceBefore 0 /SpaceAfter 6 /TextIndent 0 >> endobj 1231 0 obj << /O /Layout /WritingMode /LrTb /StartIndent 42.55 /EndIndent 0 /TextAlign /Start /SpaceBefore 6 /SpaceAfter 6 /TextIndent 0 >> endobj 1232 0 obj << /S /Link /P 1229 0 R /K [ 1233 0 R << /Type /OBJR /Pg 193 0 R /Obj 238 0 R >> ] >> endobj 1233 0 obj << /S /Underline /P 1232 0 R /A 1819 0 R /Pg 193 0 R /K 3 >> endobj 1234 0 obj << /S /LBody /C /License#20Section /Pg 193 0 R /K 5 /P 1681 0 R >> endobj 1235 0 obj << /S /License#20Text /C /License#20Text /Pg 193 0 R /K 6 /P 1280 0 R >> endobj 1236 0 obj << /O /Layout /WritingMode /LrTb /StartIndent 85.10001 /EndIndent 0 /TextAlign /Start /SpaceBefore 12 /SpaceAfter 6 /TextIndent -85.09999 >> endobj 1237 0 obj << /S /LBody /C /License#20Section /Pg 193 0 R /K 7 /P 1683 0 R >> endobj 1238 0 obj << /S /License#20Text /C /License#20Text /Pg 193 0 R /K 8 /P 1280 0 R >> endobj 1239 0 obj << /S /LBody /C /License#20Section /Pg 193 0 R /K 9 /P 1685 0 R >> endobj 1240 0 obj << /S /License#20Text /C /License#20Text /Pg 193 0 R /K 10 /P 1280 0 R >> endobj 1241 0 obj << /S /LBody /C /License#20Section /Pg 193 0 R /K 11 /P 1687 0 R >> endobj 1242 0 obj << /S /License#20Text /C /License#20Text /Pg 193 0 R /P 1280 0 R /K [ 12 << /Type /MCR /Pg 197 0 R /MCID 0 >> ] >> endobj 1243 0 obj << /S /License#20Text /C /License#20Text /Pg 197 0 R /K 1 /P 1280 0 R >> endobj 1244 0 obj << /S /LBody /C /License#20Section /Pg 197 0 R /K 2 /P 1689 0 R >> endobj 1245 0 obj << /S /License#20Text /C /License#20Text /Pg 197 0 R /K 3 /P 1280 0 R >> endobj 1246 0 obj << /S /LBody /C /License#20Section /Pg 197 0 R /K 4 /P 1691 0 R >> endobj 1247 0 obj << /S /License#20Text /C /License#20Text /Pg 197 0 R /K 5 /P 1280 0 R >> endobj 1248 0 obj << /S /LBody /C /License#20Section /Pg 197 0 R /K 6 /P 1693 0 R >> endobj 1249 0 obj << /S /License#20Text /C /License#20Text /Pg 197 0 R /K 7 /P 1280 0 R >> endobj 1250 0 obj << /S /License#20Text /C /License#20Text /Pg 197 0 R /K 8 /P 1280 0 R >> endobj 1251 0 obj << /S /License#20Text /C /License#20Text /Pg 197 0 R /K 9 /P 1280 0 R >> endobj 1252 0 obj << /S /License#20Text /C /License#20Text /Pg 197 0 R /K 10 /P 1280 0 R >> endobj 1253 0 obj << /S /License#20Text /C /License#20Text /Pg 197 0 R /K 11 /P 1280 0 R >> endobj 1254 0 obj << /S /License#20Text /C /License#20Text /Pg 200 0 R /K 0 /P 1280 0 R >> endobj 1255 0 obj << /S /LBody /C /License#20Section /Pg 200 0 R /K 1 /P 1695 0 R >> endobj 1256 0 obj << /S /License#20Text /C /License#20Text /Pg 200 0 R /K 2 /P 1280 0 R >> endobj 1257 0 obj << /S /License#20Text /C /License#20Text /Pg 200 0 R /K 3 /P 1280 0 R >> endobj 1258 0 obj << /S /License#20Text /A [ 1259 0 R ] /C /License#20Text /Pg 200 0 R /K 4 /P 1280 0 R >> endobj 1259 0 obj << /O /Layout /StartIndent 81 >> endobj 1260 0 obj << /S /License#20Text /A [ 1261 0 R ] /C /License#20Text /Pg 200 0 R /K 5 /P 1280 0 R >> endobj 1261 0 obj << /O /Layout /StartIndent 81 >> endobj 1262 0 obj << /S /License#20Text /A [ 1263 0 R ] /C /License#20Text /Pg 200 0 R /K 6 /P 1280 0 R >> endobj 1263 0 obj << /O /Layout /StartIndent 81 >> endobj 1264 0 obj << /S /License#20Text /A [ 1265 0 R ] /C /License#20Text /Pg 200 0 R /K 7 /P 1280 0 R >> endobj 1265 0 obj << /O /Layout /StartIndent 81 >> endobj 1266 0 obj << /S /License#20Text /C /License#20Text /Pg 200 0 R /K 8 /P 1280 0 R >> endobj 1267 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 200 0 R /K 9 /P 1280 0 R >> endobj 1268 0 obj << /S /Standard /A [ 1269 0 R ] /C /Standard /Pg 1924 0 R /K [ 28 29 ] /P 1699 0 R >> endobj 1269 0 obj << /O /Layout /TextAlign /End /StartIndent 76.45 /EndIndent -24.2 >> endobj 1270 0 obj << /S /Standard /A [ 1271 0 R ] /C /Standard /Pg 1924 0 R /K [ 30 31 ] /P 1699 0 R >> endobj 1271 0 obj << /O /Layout /TextAlign /End /StartIndent 76.45 /EndIndent -24.2 >> endobj 1272 0 obj << /S /Standard /A [ 1273 0 R ] /C /Standard /Pg 1924 0 R /K [ 32 33 34 ] /P 1699 0 R >> endobj 1273 0 obj << /O /Layout /TextAlign /End /StartIndent 76.45 /EndIndent -24.2 >> endobj 1274 0 obj << /S /Standard /A [ 1275 0 R ] /C /Standard /Pg 1924 0 R /K [ 14 15 16 17 18 19 20 21 22 23 24 25 26 ] /P 1698 0 R >> endobj 1275 0 obj << /O /Layout /TextAlign /Center /StartIndent 54.45 /EndIndent 62.8 >> endobj 1276 0 obj << /S /Standard /A [ 1277 0 R ] /C /Standard /Pg 1924 0 R /K [ 1 2 3 4 5 6 7 8 9 10 11 12 13 ] /P 1697 0 R >> endobj 1277 0 obj << /O /Layout /StartIndent -33.55 /TextAlign /End /EndIndent -43.2 >> endobj 1278 0 obj << /S /Sect /P 1923 0 R /K [ 1699 0 R 1698 0 R 1697 0 R 1696 0 R 273 0 R 274 0 R 277 0 R 278 0 R 279 0 R 280 0 R 281 0 R 282 0 R 283 0 R 284 0 R 285 0 R 286 0 R 287 0 R 288 0 R 289 0 R 290 0 R 291 0 R 292 0 R 293 0 R 294 0 R 295 0 R 296 0 R 297 0 R 298 0 R 299 0 R 300 0 R 301 0 R 302 0 R 303 0 R 304 0 R 305 0 R 306 0 R 307 0 R 308 0 R 310 0 R 311 0 R 312 0 R 313 0 R ] >> endobj 1279 0 obj << /S /Sect /P 1923 0 R /K [ 314 0 R 1281 0 R 413 0 R ] >> endobj 1280 0 obj << /S /Sect /P 1923 0 R /K [ 1593 0 R 416 0 R 418 0 R 419 0 R 420 0 R 421 0 R 422 0 R 1595 0 R 426 0 R 427 0 R 1597 0 R 429 0 R 431 0 R 432 0 R 433 0 R 1599 0 R 441 0 R 1603 0 R 445 0 R 446 0 R 447 0 R 448 0 R 449 0 R 450 0 R 451 0 R 452 0 R 453 0 R 454 0 R 455 0 R 456 0 R 457 0 R 1605 0 R 470 0 R 472 0 R 474 0 R 475 0 R 476 0 R 477 0 R 478 0 R 479 0 R 480 0 R 481 0 R 482 0 R 483 0 R 484 0 R 485 0 R 486 0 R 487 0 R 488 0 R 489 0 R 490 0 R 491 0 R 1614 0 R 493 0 R 494 0 R 1616 0 R 496 0 R 497 0 R 498 0 R 499 0 R 1618 0 R 501 0 R 1620 0 R 503 0 R 504 0 R 505 0 R 506 0 R 507 0 R 508 0 R 1622 0 R 510 0 R 511 0 R 512 0 R 513 0 R 1624 0 R 515 0 R 516 0 R 517 0 R 1282 0 R 735 0 R 1626 0 R 737 0 R 738 0 R 739 0 R 741 0 R 743 0 R 744 0 R 745 0 R 746 0 R 747 0 R 748 0 R 749 0 R 750 0 R 751 0 R 752 0 R 753 0 R 754 0 R 755 0 R 756 0 R 757 0 R 758 0 R 759 0 R 760 0 R 761 0 R 762 0 R 763 0 R 764 0 R 765 0 R 766 0 R 767 0 R 768 0 R 769 0 R 770 0 R 1628 0 R 774 0 R 1630 0 R 783 0 R 1633 0 R 787 0 R 788 0 R 789 0 R 790 0 R 791 0 R 793 0 R 795 0 R 796 0 R 1635 0 R 798 0 R 799 0 R 800 0 R 801 0 R 1637 0 R 803 0 R 804 0 R 805 0 R 807 0 R 1639 0 R 810 0 R 1641 0 R 814 0 R 816 0 R 1643 0 R 820 0 R 822 0 R 823 0 R 824 0 R 825 0 R 826 0 R 827 0 R 828 0 R 1645 0 R 830 0 R 831 0 R 832 0 R 834 0 R 835 0 R 836 0 R 837 0 R 838 0 R 1647 0 R 840 0 R 841 0 R 842 0 R 843 0 R 844 0 R 845 0 R 846 0 R 1649 0 R 848 0 R 849 0 R 850 0 R 1651 0 R 852 0 R 853 0 R 854 0 R 855 0 R 856 0 R 857 0 R 858 0 R 1653 0 R 860 0 R 861 0 R 862 0 R 863 0 R 864 0 R 865 0 R 866 0 R 867 0 R 868 0 R 869 0 R 870 0 R 871 0 R 872 0 R 873 0 R 874 0 R 875 0 R 1655 0 R 877 0 R 878 0 R 879 0 R 1657 0 R 881 0 R 882 0 R 883 0 R 884 0 R 885 0 R 886 0 R 887 0 R 888 0 R 889 0 R 890 0 R 891 0 R 892 0 R 893 0 R 894 0 R 897 0 R 898 0 R 899 0 R 900 0 R 901 0 R 902 0 R 1659 0 R 911 0 R 912 0 R 913 0 R 914 0 R 915 0 R 916 0 R 917 0 R 918 0 R 919 0 R 920 0 R 921 0 R 922 0 R 923 0 R 924 0 R 925 0 R 926 0 R 927 0 R 928 0 R 929 0 R 930 0 R 931 0 R 932 0 R 933 0 R 934 0 R 935 0 R 936 0 R 937 0 R 938 0 R 939 0 R 940 0 R 941 0 R 942 0 R 943 0 R 944 0 R 945 0 R 946 0 R 947 0 R 948 0 R 949 0 R 950 0 R 951 0 R 952 0 R 953 0 R 954 0 R 955 0 R 956 0 R 957 0 R 958 0 R 959 0 R 960 0 R 961 0 R 962 0 R 963 0 R 964 0 R 965 0 R 966 0 R 967 0 R 968 0 R 969 0 R 970 0 R 971 0 R 972 0 R 975 0 R 976 0 R 977 0 R 978 0 R 979 0 R 980 0 R 981 0 R 982 0 R 983 0 R 1664 0 R 985 0 R 986 0 R 987 0 R 988 0 R 989 0 R 990 0 R 991 0 R 992 0 R 993 0 R 994 0 R 995 0 R 996 0 R 997 0 R 998 0 R 999 0 R 1000 0 R 1001 0 R 1002 0 R 1003 0 R 1004 0 R 1005 0 R 1006 0 R 1007 0 R 1008 0 R 1009 0 R 1010 0 R 1666 0 R 1012 0 R 1668 0 R 1014 0 R 1015 0 R 1016 0 R 1017 0 R 1018 0 R 1019 0 R 1020 0 R 1021 0 R 1022 0 R 1023 0 R 1024 0 R 1025 0 R 1026 0 R 1027 0 R 1028 0 R 1029 0 R 1030 0 R 1031 0 R 1032 0 R 1033 0 R 1034 0 R 1035 0 R 1036 0 R 1037 0 R 1038 0 R 1039 0 R 1040 0 R 1041 0 R 1042 0 R 1043 0 R 1044 0 R 1045 0 R 1046 0 R 1047 0 R 1048 0 R 1049 0 R 1050 0 R 1051 0 R 1052 0 R 1053 0 R 1670 0 R 1055 0 R 1056 0 R 1057 0 R 1058 0 R 1059 0 R 1060 0 R 1061 0 R 1062 0 R 1063 0 R 1064 0 R 1065 0 R 1066 0 R 1067 0 R 1068 0 R 1069 0 R 1070 0 R 1071 0 R 1072 0 R 1073 0 R 1074 0 R 1075 0 R 1076 0 R 1077 0 R 1078 0 R 1079 0 R 1080 0 R 1081 0 R 1082 0 R 1083 0 R 1084 0 R 1085 0 R 1086 0 R 1087 0 R 1088 0 R 1089 0 R 1090 0 R 1091 0 R 1092 0 R 1093 0 R 1094 0 R 1095 0 R 1096 0 R 1097 0 R 1098 0 R 1099 0 R 1100 0 R 1101 0 R 1102 0 R 1103 0 R 1104 0 R 1105 0 R 1106 0 R 1107 0 R 1108 0 R 1109 0 R 1110 0 R 1111 0 R 1112 0 R 1113 0 R 1114 0 R 1115 0 R 1116 0 R 1117 0 R 1118 0 R 1119 0 R 1120 0 R 1121 0 R 1122 0 R 1123 0 R 1124 0 R 1125 0 R 1126 0 R 1127 0 R 1128 0 R 1129 0 R 1130 0 R 1131 0 R 1132 0 R 1133 0 R 1134 0 R 1135 0 R 1136 0 R 1137 0 R 1138 0 R 1139 0 R 1140 0 R 1141 0 R 1142 0 R 1143 0 R 1144 0 R 1145 0 R 1146 0 R 1147 0 R 1148 0 R 1149 0 R 1150 0 R 1151 0 R 1152 0 R 1153 0 R 1154 0 R 1155 0 R 1156 0 R 1157 0 R 1158 0 R 1159 0 R 1160 0 R 1161 0 R 1162 0 R 1163 0 R 1164 0 R 1165 0 R 1166 0 R 1167 0 R 1168 0 R 1169 0 R 1170 0 R 1171 0 R 1172 0 R 1173 0 R 1174 0 R 1175 0 R 1176 0 R 1177 0 R 1178 0 R 1179 0 R 1672 0 R 1181 0 R 1184 0 R 1674 0 R 1188 0 R 1191 0 R 1192 0 R 1193 0 R 1194 0 R 1195 0 R 1196 0 R 1197 0 R 1198 0 R 1199 0 R 1200 0 R 1201 0 R 1202 0 R 1203 0 R 1204 0 R 1205 0 R 1206 0 R 1207 0 R 1208 0 R 1209 0 R 1210 0 R 1211 0 R 1212 0 R 1676 0 R 1214 0 R 1678 0 R 1218 0 R 1221 0 R 1224 0 R 1225 0 R 1226 0 R 1227 0 R 1229 0 R 1680 0 R 1235 0 R 1682 0 R 1238 0 R 1684 0 R 1240 0 R 1686 0 R 1242 0 R 1243 0 R 1688 0 R 1245 0 R 1690 0 R 1247 0 R 1692 0 R 1249 0 R 1250 0 R 1251 0 R 1252 0 R 1253 0 R 1254 0 R 1694 0 R 1256 0 R 1257 0 R 1258 0 R 1260 0 R 1262 0 R 1264 0 R 1266 0 R 1267 0 R ] >> endobj 1281 0 obj << /S /TOC /P 1279 0 R /K [ 315 0 R 320 0 R 323 0 R 327 0 R 330 0 R 334 0 R 337 0 R 340 0 R 343 0 R 346 0 R 349 0 R 352 0 R 355 0 R 358 0 R 361 0 R 364 0 R 367 0 R 370 0 R 373 0 R 376 0 R 379 0 R 382 0 R 385 0 R 388 0 R 391 0 R 394 0 R 397 0 R 400 0 R 403 0 R 406 0 R 409 0 R 412 0 R ] >> endobj 1282 0 obj << /S /Table /P 1280 0 R /K [ 1283 0 R 1293 0 R 1303 0 R 1313 0 R 1323 0 R 1333 0 R 1343 0 R 1353 0 R 1363 0 R 1373 0 R 1383 0 R 1393 0 R 1403 0 R 1413 0 R 1423 0 R 1433 0 R 1443 0 R 1453 0 R 1463 0 R 1473 0 R 1483 0 R 1493 0 R 1503 0 R 1513 0 R 1523 0 R 1533 0 R 1543 0 R 1553 0 R 1563 0 R 1573 0 R 1583 0 R ] /A [ 1822 0 R ] >> endobj 1283 0 obj << /S /TR /P 1282 0 R /K [ 1284 0 R 1287 0 R 1290 0 R ] >> endobj 1284 0 obj << /S /TD /A [ 1285 0 R 1286 0 R ] /P 1283 0 R /K 518 0 R >> endobj 1285 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 1286 0 obj << /O /Layout /BlockAlign /Middle >> endobj 1287 0 obj << /S /TD /A [ 1288 0 R 1289 0 R ] /P 1283 0 R /K 519 0 R >> endobj 1288 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 1289 0 obj << /O /Layout /BlockAlign /Middle >> endobj 1290 0 obj << /S /TD /A [ 1291 0 R 1292 0 R ] /P 1283 0 R /K 521 0 R >> endobj 1291 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 1292 0 obj << /O /Layout /BlockAlign /Middle >> endobj 1293 0 obj << /S /TR /P 1282 0 R /K [ 1294 0 R 1297 0 R 1300 0 R ] >> endobj 1294 0 obj << /S /TD /A [ 1295 0 R 1296 0 R ] /P 1293 0 R /K 522 0 R >> endobj 1295 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 1296 0 obj << /O /Layout /BlockAlign /Before >> endobj 1297 0 obj << /S /TD /A [ 1298 0 R 1299 0 R ] /P 1293 0 R /K 525 0 R >> endobj 1298 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 1299 0 obj << /O /Layout /BlockAlign /Before >> endobj 1300 0 obj << /S /TD /A [ 1301 0 R 1302 0 R ] /P 1293 0 R /K 527 0 R >> endobj 1301 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 1302 0 obj << /O /Layout /BlockAlign /Before >> endobj 1303 0 obj << /S /TR /P 1282 0 R /K [ 1304 0 R 1307 0 R 1310 0 R ] >> endobj 1304 0 obj << /S /TD /A [ 1305 0 R 1306 0 R ] /P 1303 0 R /K 529 0 R >> endobj 1305 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 1306 0 obj << /O /Layout /BlockAlign /Before >> endobj 1307 0 obj << /S /TD /A [ 1308 0 R 1309 0 R ] /P 1303 0 R /K 531 0 R >> endobj 1308 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 1309 0 obj << /O /Layout /BlockAlign /Before >> endobj 1310 0 obj << /S /TD /A [ 1311 0 R 1312 0 R ] /P 1303 0 R /K 533 0 R >> endobj 1311 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 1312 0 obj << /O /Layout /BlockAlign /Before >> endobj 1313 0 obj << /S /TR /P 1282 0 R /K [ 1314 0 R 1317 0 R 1320 0 R ] >> endobj 1314 0 obj << /S /TD /A [ 1315 0 R 1316 0 R ] /P 1313 0 R /K 535 0 R >> endobj 1315 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 1316 0 obj << /O /Layout /BlockAlign /Before >> endobj 1317 0 obj << /S /TD /A [ 1318 0 R 1319 0 R ] /P 1313 0 R /K 537 0 R >> endobj 1318 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 1319 0 obj << /O /Layout /BlockAlign /Before >> endobj 1320 0 obj << /S /TD /A [ 1321 0 R 1322 0 R ] /P 1313 0 R /K 539 0 R >> endobj 1321 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 1322 0 obj << /O /Layout /BlockAlign /Before >> endobj 1323 0 obj << /S /TR /P 1282 0 R /K [ 1324 0 R 1327 0 R 1330 0 R ] >> endobj 1324 0 obj << /S /TD /A [ 1325 0 R 1326 0 R ] /P 1323 0 R /K 541 0 R >> endobj 1325 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 1326 0 obj << /O /Layout /BlockAlign /Before >> endobj 1327 0 obj << /S /TD /A [ 1328 0 R 1329 0 R ] /P 1323 0 R /K 543 0 R >> endobj 1328 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 1329 0 obj << /O /Layout /BlockAlign /Before >> endobj 1330 0 obj << /S /TD /A [ 1331 0 R 1332 0 R ] /P 1323 0 R /K 545 0 R >> endobj 1331 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 1332 0 obj << /O /Layout /BlockAlign /Before >> endobj 1333 0 obj << /S /TR /P 1282 0 R /K [ 1334 0 R 1337 0 R 1340 0 R ] >> endobj 1334 0 obj << /S /TD /A [ 1335 0 R 1336 0 R ] /P 1333 0 R /K 547 0 R >> endobj 1335 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 1336 0 obj << /O /Layout /BlockAlign /Before >> endobj 1337 0 obj << /S /TD /A [ 1338 0 R 1339 0 R ] /P 1333 0 R /K 549 0 R >> endobj 1338 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 1339 0 obj << /O /Layout /BlockAlign /Before >> endobj 1340 0 obj << /S /TD /A [ 1341 0 R 1342 0 R ] /P 1333 0 R /K 551 0 R >> endobj 1341 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 1342 0 obj << /O /Layout /BlockAlign /Before >> endobj 1343 0 obj << /S /TR /P 1282 0 R /K [ 1344 0 R 1347 0 R 1350 0 R ] >> endobj 1344 0 obj << /S /TD /A [ 1345 0 R 1346 0 R ] /P 1343 0 R /K 554 0 R >> endobj 1345 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 1346 0 obj << /O /Layout /BlockAlign /Before >> endobj 1347 0 obj << /S /TD /A [ 1348 0 R 1349 0 R ] /P 1343 0 R /K 556 0 R >> endobj 1348 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 1349 0 obj << /O /Layout /BlockAlign /Before >> endobj 1350 0 obj << /S /TD /A [ 1351 0 R 1352 0 R ] /P 1343 0 R /K 558 0 R >> endobj 1351 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 1352 0 obj << /O /Layout /BlockAlign /Before >> endobj 1353 0 obj << /S /TR /P 1282 0 R /K [ 1354 0 R 1357 0 R 1360 0 R ] >> endobj 1354 0 obj << /S /TD /A [ 1355 0 R 1356 0 R ] /P 1353 0 R /K 560 0 R >> endobj 1355 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 1356 0 obj << /O /Layout /BlockAlign /Before >> endobj 1357 0 obj << /S /TD /A [ 1358 0 R 1359 0 R ] /P 1353 0 R /K 562 0 R >> endobj 1358 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 1359 0 obj << /O /Layout /BlockAlign /Before >> endobj 1360 0 obj << /S /TD /A [ 1361 0 R 1362 0 R ] /P 1353 0 R /K 564 0 R >> endobj 1361 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 1362 0 obj << /O /Layout /BlockAlign /Before >> endobj 1363 0 obj << /S /TR /P 1282 0 R /K [ 1364 0 R 1367 0 R 1370 0 R ] >> endobj 1364 0 obj << /S /TD /A [ 1365 0 R 1366 0 R ] /P 1363 0 R /K 566 0 R >> endobj 1365 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 1366 0 obj << /O /Layout /BlockAlign /Before >> endobj 1367 0 obj << /S /TD /A [ 1368 0 R 1369 0 R ] /P 1363 0 R /K 568 0 R >> endobj 1368 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 1369 0 obj << /O /Layout /BlockAlign /Before >> endobj 1370 0 obj << /S /TD /A [ 1371 0 R 1372 0 R ] /P 1363 0 R /K 570 0 R >> endobj 1371 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 1372 0 obj << /O /Layout /BlockAlign /Before >> endobj 1373 0 obj << /S /TR /P 1282 0 R /K [ 1374 0 R 1377 0 R 1380 0 R ] >> endobj 1374 0 obj << /S /TD /A [ 1375 0 R 1376 0 R ] /P 1373 0 R /K 572 0 R >> endobj 1375 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 1376 0 obj << /O /Layout /BlockAlign /Before >> endobj 1377 0 obj << /S /TD /A [ 1378 0 R 1379 0 R ] /P 1373 0 R /K 574 0 R >> endobj 1378 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 1379 0 obj << /O /Layout /BlockAlign /Before >> endobj 1380 0 obj << /S /TD /A [ 1381 0 R 1382 0 R ] /P 1373 0 R /K 576 0 R >> endobj 1381 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 1382 0 obj << /O /Layout /BlockAlign /Before >> endobj 1383 0 obj << /S /TR /P 1282 0 R /K [ 1384 0 R 1387 0 R 1390 0 R ] >> endobj 1384 0 obj << /S /TD /A [ 1385 0 R 1386 0 R ] /P 1383 0 R /K 578 0 R >> endobj 1385 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 1386 0 obj << /O /Layout /BlockAlign /Before >> endobj 1387 0 obj << /S /TD /A [ 1388 0 R 1389 0 R ] /P 1383 0 R /K 580 0 R >> endobj 1388 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 1389 0 obj << /O /Layout /BlockAlign /Before >> endobj 1390 0 obj << /S /TD /A [ 1391 0 R 1392 0 R ] /P 1383 0 R /K 582 0 R >> endobj 1391 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 1392 0 obj << /O /Layout /BlockAlign /Before >> endobj 1393 0 obj << /S /TR /P 1282 0 R /K [ 1394 0 R 1397 0 R 1400 0 R ] >> endobj 1394 0 obj << /S /TD /A [ 1395 0 R 1396 0 R ] /P 1393 0 R /K 584 0 R >> endobj 1395 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 1396 0 obj << /O /Layout /BlockAlign /Before >> endobj 1397 0 obj << /S /TD /A [ 1398 0 R 1399 0 R ] /P 1393 0 R /K 586 0 R >> endobj 1398 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 1399 0 obj << /O /Layout /BlockAlign /Before >> endobj 1400 0 obj << /S /TD /A [ 1401 0 R 1402 0 R ] /P 1393 0 R /K 588 0 R >> endobj 1401 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 1402 0 obj << /O /Layout /BlockAlign /Before >> endobj 1403 0 obj << /S /TR /P 1282 0 R /K [ 1404 0 R 1407 0 R 1410 0 R ] >> endobj 1404 0 obj << /S /TD /A [ 1405 0 R 1406 0 R ] /P 1403 0 R /K 591 0 R >> endobj 1405 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 1406 0 obj << /O /Layout /BlockAlign /Before >> endobj 1407 0 obj << /S /TD /A [ 1408 0 R 1409 0 R ] /P 1403 0 R /K 593 0 R >> endobj 1408 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 1409 0 obj << /O /Layout /BlockAlign /Before >> endobj 1410 0 obj << /S /TD /A [ 1411 0 R 1412 0 R ] /P 1403 0 R /K 595 0 R >> endobj 1411 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 1412 0 obj << /O /Layout /BlockAlign /Before >> endobj 1413 0 obj << /S /TR /P 1282 0 R /K [ 1414 0 R 1417 0 R 1420 0 R ] >> endobj 1414 0 obj << /S /TD /A [ 1415 0 R 1416 0 R ] /P 1413 0 R /K 597 0 R >> endobj 1415 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 1416 0 obj << /O /Layout /BlockAlign /Before >> endobj 1417 0 obj << /S /TD /A [ 1418 0 R 1419 0 R ] /P 1413 0 R /K 599 0 R >> endobj 1418 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 1419 0 obj << /O /Layout /BlockAlign /Before >> endobj 1420 0 obj << /S /TD /A [ 1421 0 R 1422 0 R ] /P 1413 0 R /K 601 0 R >> endobj 1421 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 1422 0 obj << /O /Layout /BlockAlign /Before >> endobj 1423 0 obj << /S /TR /P 1282 0 R /K [ 1424 0 R 1427 0 R 1430 0 R ] >> endobj 1424 0 obj << /S /TD /A [ 1425 0 R 1426 0 R ] /P 1423 0 R /K 603 0 R >> endobj 1425 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 1426 0 obj << /O /Layout /BlockAlign /Before >> endobj 1427 0 obj << /S /TD /A [ 1428 0 R 1429 0 R ] /P 1423 0 R /K 605 0 R >> endobj 1428 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 1429 0 obj << /O /Layout /BlockAlign /Before >> endobj 1430 0 obj << /S /TD /A [ 1431 0 R 1432 0 R ] /P 1423 0 R /K [ 607 0 R 609 0 R 611 0 R ] >> endobj 1431 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 1432 0 obj << /O /Layout /BlockAlign /Before >> endobj 1433 0 obj << /S /TR /P 1282 0 R /K [ 1434 0 R 1437 0 R 1440 0 R ] >> endobj 1434 0 obj << /S /TD /A [ 1435 0 R 1436 0 R ] /P 1433 0 R /K 613 0 R >> endobj 1435 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 1436 0 obj << /O /Layout /BlockAlign /Before >> endobj 1437 0 obj << /S /TD /A [ 1438 0 R 1439 0 R ] /P 1433 0 R /K 615 0 R >> endobj 1438 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 1439 0 obj << /O /Layout /BlockAlign /Before >> endobj 1440 0 obj << /S /TD /A [ 1441 0 R 1442 0 R ] /P 1433 0 R /K [ 617 0 R 619 0 R ] >> endobj 1441 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 1442 0 obj << /O /Layout /BlockAlign /Before >> endobj 1443 0 obj << /S /TR /P 1282 0 R /K [ 1444 0 R 1447 0 R 1450 0 R ] >> endobj 1444 0 obj << /S /TD /A [ 1445 0 R 1446 0 R ] /P 1443 0 R /K 621 0 R >> endobj 1445 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 1446 0 obj << /O /Layout /BlockAlign /Before >> endobj 1447 0 obj << /S /TD /A [ 1448 0 R 1449 0 R ] /P 1443 0 R /K 623 0 R >> endobj 1448 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 1449 0 obj << /O /Layout /BlockAlign /Before >> endobj 1450 0 obj << /S /TD /A [ 1451 0 R 1452 0 R ] /P 1443 0 R /K 625 0 R >> endobj 1451 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 1452 0 obj << /O /Layout /BlockAlign /Before >> endobj 1453 0 obj << /S /TR /P 1282 0 R /K [ 1454 0 R 1457 0 R 1460 0 R ] >> endobj 1454 0 obj << /S /TD /A [ 1455 0 R 1456 0 R ] /P 1453 0 R /K 627 0 R >> endobj 1455 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 1456 0 obj << /O /Layout /BlockAlign /Before >> endobj 1457 0 obj << /S /TD /A [ 1458 0 R 1459 0 R ] /P 1453 0 R /K 629 0 R >> endobj 1458 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 1459 0 obj << /O /Layout /BlockAlign /Before >> endobj 1460 0 obj << /S /TD /A [ 1461 0 R 1462 0 R ] /P 1453 0 R /K 631 0 R >> endobj 1461 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 1462 0 obj << /O /Layout /BlockAlign /Before >> endobj 1463 0 obj << /S /TR /P 1282 0 R /K [ 1464 0 R 1467 0 R 1470 0 R ] >> endobj 1464 0 obj << /S /TD /A [ 1465 0 R 1466 0 R ] /P 1463 0 R /K 633 0 R >> endobj 1465 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 1466 0 obj << /O /Layout /BlockAlign /Before >> endobj 1467 0 obj << /S /TD /A [ 1468 0 R 1469 0 R ] /P 1463 0 R /K 635 0 R >> endobj 1468 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 1469 0 obj << /O /Layout /BlockAlign /Before >> endobj 1470 0 obj << /S /TD /A [ 1471 0 R 1472 0 R ] /P 1463 0 R /K [ 637 0 R 639 0 R 641 0 R ] >> endobj 1471 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 1472 0 obj << /O /Layout /BlockAlign /Before >> endobj 1473 0 obj << /S /TR /P 1282 0 R /K [ 1474 0 R 1477 0 R 1480 0 R ] >> endobj 1474 0 obj << /S /TD /A [ 1475 0 R 1476 0 R ] /P 1473 0 R /K 643 0 R >> endobj 1475 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 1476 0 obj << /O /Layout /BlockAlign /Before >> endobj 1477 0 obj << /S /TD /A [ 1478 0 R 1479 0 R ] /P 1473 0 R /K 645 0 R >> endobj 1478 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 1479 0 obj << /O /Layout /BlockAlign /Before >> endobj 1480 0 obj << /S /TD /A [ 1481 0 R 1482 0 R ] /P 1473 0 R /K [ 647 0 R 649 0 R 651 0 R ] >> endobj 1481 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 1482 0 obj << /O /Layout /BlockAlign /Before >> endobj 1483 0 obj << /S /TR /P 1282 0 R /K [ 1484 0 R 1487 0 R 1490 0 R ] >> endobj 1484 0 obj << /S /TD /A [ 1485 0 R 1486 0 R ] /P 1483 0 R /K 653 0 R >> endobj 1485 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 1486 0 obj << /O /Layout /BlockAlign /Before >> endobj 1487 0 obj << /S /TD /A [ 1488 0 R 1489 0 R ] /P 1483 0 R /K 655 0 R >> endobj 1488 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 1489 0 obj << /O /Layout /BlockAlign /Before >> endobj 1490 0 obj << /S /TD /A [ 1491 0 R 1492 0 R ] /P 1483 0 R /K [ 657 0 R 659 0 R ] >> endobj 1491 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 1492 0 obj << /O /Layout /BlockAlign /Before >> endobj 1493 0 obj << /S /TR /P 1282 0 R /K [ 1494 0 R 1497 0 R 1500 0 R ] >> endobj 1494 0 obj << /S /TD /A [ 1495 0 R 1496 0 R ] /P 1493 0 R /K 661 0 R >> endobj 1495 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 1496 0 obj << /O /Layout /BlockAlign /Before >> endobj 1497 0 obj << /S /TD /A [ 1498 0 R 1499 0 R ] /P 1493 0 R /K 663 0 R >> endobj 1498 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 1499 0 obj << /O /Layout /BlockAlign /Before >> endobj 1500 0 obj << /S /TD /A [ 1501 0 R 1502 0 R ] /P 1493 0 R /K [ 665 0 R 667 0 R 669 0 R 671 0 R ] >> endobj 1501 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 1502 0 obj << /O /Layout /BlockAlign /Before >> endobj 1503 0 obj << /S /TR /P 1282 0 R /K [ 1504 0 R 1507 0 R 1510 0 R ] >> endobj 1504 0 obj << /S /TD /A [ 1505 0 R 1506 0 R ] /P 1503 0 R /K 673 0 R >> endobj 1505 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 1506 0 obj << /O /Layout /BlockAlign /Before >> endobj 1507 0 obj << /S /TD /A [ 1508 0 R 1509 0 R ] /P 1503 0 R /K 675 0 R >> endobj 1508 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 1509 0 obj << /O /Layout /BlockAlign /Before >> endobj 1510 0 obj << /S /TD /A [ 1511 0 R 1512 0 R ] /P 1503 0 R /K [ 677 0 R 679 0 R ] >> endobj 1511 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 1512 0 obj << /O /Layout /BlockAlign /Before >> endobj 1513 0 obj << /S /TR /P 1282 0 R /K [ 1514 0 R 1517 0 R 1520 0 R ] >> endobj 1514 0 obj << /S /TD /A [ 1515 0 R 1516 0 R ] /P 1513 0 R /K 681 0 R >> endobj 1515 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 1516 0 obj << /O /Layout /BlockAlign /Before >> endobj 1517 0 obj << /S /TD /A [ 1518 0 R 1519 0 R ] /P 1513 0 R /K 683 0 R >> endobj 1518 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 1519 0 obj << /O /Layout /BlockAlign /Before >> endobj 1520 0 obj << /S /TD /A [ 1521 0 R 1522 0 R ] /P 1513 0 R /K [ 685 0 R 687 0 R 689 0 R ] >> endobj 1521 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 1522 0 obj << /O /Layout /BlockAlign /Before >> endobj 1523 0 obj << /S /TR /P 1282 0 R /K [ 1524 0 R 1527 0 R 1530 0 R ] >> endobj 1524 0 obj << /S /TD /A [ 1525 0 R 1526 0 R ] /P 1523 0 R /K 691 0 R >> endobj 1525 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 1526 0 obj << /O /Layout /BlockAlign /Before >> endobj 1527 0 obj << /S /TD /A [ 1528 0 R 1529 0 R ] /P 1523 0 R /K 693 0 R >> endobj 1528 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 1529 0 obj << /O /Layout /BlockAlign /Before >> endobj 1530 0 obj << /S /TD /A [ 1531 0 R 1532 0 R ] /P 1523 0 R /K 695 0 R >> endobj 1531 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 1532 0 obj << /O /Layout /BlockAlign /Before >> endobj 1533 0 obj << /S /TR /P 1282 0 R /K [ 1534 0 R 1537 0 R 1540 0 R ] >> endobj 1534 0 obj << /S /TD /A [ 1535 0 R 1536 0 R ] /P 1533 0 R /K 697 0 R >> endobj 1535 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 1536 0 obj << /O /Layout /BlockAlign /Before >> endobj 1537 0 obj << /S /TD /A [ 1538 0 R 1539 0 R ] /P 1533 0 R /K 699 0 R >> endobj 1538 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 1539 0 obj << /O /Layout /BlockAlign /Before >> endobj 1540 0 obj << /S /TD /A [ 1541 0 R 1542 0 R ] /P 1533 0 R /K 701 0 R >> endobj 1541 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 1542 0 obj << /O /Layout /BlockAlign /Before >> endobj 1543 0 obj << /S /TR /P 1282 0 R /K [ 1544 0 R 1547 0 R 1550 0 R ] >> endobj 1544 0 obj << /S /TD /A [ 1545 0 R 1546 0 R ] /P 1543 0 R /K 703 0 R >> endobj 1545 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 1546 0 obj << /O /Layout /BlockAlign /Before >> endobj 1547 0 obj << /S /TD /A [ 1548 0 R 1549 0 R ] /P 1543 0 R /K 705 0 R >> endobj 1548 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 1549 0 obj << /O /Layout /BlockAlign /Before >> endobj 1550 0 obj << /S /TD /A [ 1551 0 R 1552 0 R ] /P 1543 0 R /K 707 0 R >> endobj 1551 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 1552 0 obj << /O /Layout /BlockAlign /Before >> endobj 1553 0 obj << /S /TR /P 1282 0 R /K [ 1554 0 R 1557 0 R 1560 0 R ] >> endobj 1554 0 obj << /S /TD /A [ 1555 0 R 1556 0 R ] /P 1553 0 R /K 709 0 R >> endobj 1555 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 1556 0 obj << /O /Layout /BlockAlign /Before >> endobj 1557 0 obj << /S /TD /A [ 1558 0 R 1559 0 R ] /P 1553 0 R /K 711 0 R >> endobj 1558 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 1559 0 obj << /O /Layout /BlockAlign /Before >> endobj 1560 0 obj << /S /TD /A [ 1561 0 R 1562 0 R ] /P 1553 0 R /K 713 0 R >> endobj 1561 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 1562 0 obj << /O /Layout /BlockAlign /Before >> endobj 1563 0 obj << /S /TR /P 1282 0 R /K [ 1564 0 R 1567 0 R 1570 0 R ] >> endobj 1564 0 obj << /S /TD /A [ 1565 0 R 1566 0 R ] /P 1563 0 R /K 715 0 R >> endobj 1565 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 1566 0 obj << /O /Layout /BlockAlign /Before >> endobj 1567 0 obj << /S /TD /A [ 1568 0 R 1569 0 R ] /P 1563 0 R /K 717 0 R >> endobj 1568 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 1569 0 obj << /O /Layout /BlockAlign /Before >> endobj 1570 0 obj << /S /TD /A [ 1571 0 R 1572 0 R ] /P 1563 0 R /K [ 719 0 R 721 0 R ] >> endobj 1571 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 1572 0 obj << /O /Layout /BlockAlign /Before >> endobj 1573 0 obj << /S /TR /P 1282 0 R /K [ 1574 0 R 1577 0 R 1580 0 R ] >> endobj 1574 0 obj << /S /TD /A [ 1575 0 R 1576 0 R ] /P 1573 0 R /K 723 0 R >> endobj 1575 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 1576 0 obj << /O /Layout /BlockAlign /Before >> endobj 1577 0 obj << /S /TD /A [ 1578 0 R 1579 0 R ] /P 1573 0 R /K 725 0 R >> endobj 1578 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 1579 0 obj << /O /Layout /BlockAlign /Before >> endobj 1580 0 obj << /S /TD /A [ 1581 0 R 1582 0 R ] /P 1573 0 R /K 727 0 R >> endobj 1581 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 1582 0 obj << /O /Layout /BlockAlign /Before >> endobj 1583 0 obj << /S /TR /P 1282 0 R /K [ 1584 0 R 1587 0 R 1590 0 R ] >> endobj 1584 0 obj << /S /TD /A [ 1585 0 R 1586 0 R ] /P 1583 0 R /K 729 0 R >> endobj 1585 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 1586 0 obj << /O /Layout /BlockAlign /Before >> endobj 1587 0 obj << /S /TD /A [ 1588 0 R 1589 0 R ] /P 1583 0 R /K 731 0 R >> endobj 1588 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 1589 0 obj << /O /Layout /BlockAlign /Before >> endobj 1590 0 obj << /S /TD /A [ 1591 0 R 1592 0 R ] /P 1583 0 R /K 733 0 R >> endobj 1591 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 1592 0 obj << /O /Layout /BlockAlign /Before >> endobj 1593 0 obj << /S /L /K 1594 0 R /P 1280 0 R >> endobj 1594 0 obj << /S /LI /P 1593 0 R /K 415 0 R >> endobj 1595 0 obj << /S /L /K 1596 0 R /P 1280 0 R >> endobj 1596 0 obj << /S /LI /P 1595 0 R /K 425 0 R >> endobj 1597 0 obj << /S /L /K 1598 0 R /P 1280 0 R >> endobj 1598 0 obj << /S /LI /P 1597 0 R /K 428 0 R >> endobj 1599 0 obj << /S /L /P 1280 0 R /K [ 1600 0 R 1601 0 R 1602 0 R ] >> endobj 1600 0 obj << /S /LI /P 1599 0 R /K 435 0 R >> endobj 1601 0 obj << /S /LI /P 1599 0 R /K 437 0 R >> endobj 1602 0 obj << /S /LI /P 1599 0 R /K 439 0 R >> endobj 1603 0 obj << /S /L /K 1604 0 R /P 1280 0 R >> endobj 1604 0 obj << /S /LI /P 1603 0 R /K 444 0 R >> endobj 1605 0 obj << /S /L /P 1280 0 R /K [ 1606 0 R 1607 0 R 1608 0 R 1609 0 R 1610 0 R 1611 0 R 1612 0 R ] >> endobj 1606 0 obj << /S /LI /P 1605 0 R /K 458 0 R >> endobj 1607 0 obj << /S /LI /P 1605 0 R /K 460 0 R >> endobj 1608 0 obj << /S /LI /P 1605 0 R /K 462 0 R >> endobj 1609 0 obj << /S /LI /P 1605 0 R /K 464 0 R >> endobj 1610 0 obj << /S /LI /P 1605 0 R /K 466 0 R >> endobj 1611 0 obj << /S /LI /P 1605 0 R /K 468 0 R >> endobj 1612 0 obj << /S /L /K 1613 0 R /P 1605 0 R >> endobj 1613 0 obj << /S /LI /P 1612 0 R /K 471 0 R >> endobj 1614 0 obj << /S /L /K 1615 0 R /P 1280 0 R >> endobj 1615 0 obj << /S /LI /P 1614 0 R /K 492 0 R >> endobj 1616 0 obj << /S /L /K 1617 0 R /P 1280 0 R >> endobj 1617 0 obj << /S /LI /P 1616 0 R /K 495 0 R >> endobj 1618 0 obj << /S /L /K 1619 0 R /P 1280 0 R >> endobj 1619 0 obj << /S /LI /P 1618 0 R /K 500 0 R >> endobj 1620 0 obj << /S /L /K 1621 0 R /P 1280 0 R >> endobj 1621 0 obj << /S /LI /P 1620 0 R /K 502 0 R >> endobj 1622 0 obj << /S /L /K 1623 0 R /P 1280 0 R >> endobj 1623 0 obj << /S /LI /P 1622 0 R /K 509 0 R >> endobj 1624 0 obj << /S /L /K 1625 0 R /P 1280 0 R >> endobj 1625 0 obj << /S /LI /P 1624 0 R /K 514 0 R >> endobj 1626 0 obj << /S /L /K 1627 0 R /P 1280 0 R >> endobj 1627 0 obj << /S /LI /P 1626 0 R /K 736 0 R >> endobj 1628 0 obj << /S /L /K 1629 0 R /P 1280 0 R >> endobj 1629 0 obj << /S /LI /P 1628 0 R /K 773 0 R >> endobj 1630 0 obj << /S /L /P 1280 0 R /K [ 1631 0 R 1632 0 R ] >> endobj 1631 0 obj << /S /LI /P 1630 0 R /K 775 0 R >> endobj 1632 0 obj << /S /LI /P 1630 0 R /K 779 0 R >> endobj 1633 0 obj << /S /L /K 1634 0 R /P 1280 0 R >> endobj 1634 0 obj << /S /LI /P 1633 0 R /K 786 0 R >> endobj 1635 0 obj << /S /L /K 1636 0 R /P 1280 0 R >> endobj 1636 0 obj << /S /LI /P 1635 0 R /K 797 0 R >> endobj 1637 0 obj << /S /L /K 1638 0 R /P 1280 0 R >> endobj 1638 0 obj << /S /LI /P 1637 0 R /K 802 0 R >> endobj 1639 0 obj << /S /L /K 1640 0 R /P 1280 0 R >> endobj 1640 0 obj << /S /LI /P 1639 0 R /K 808 0 R >> endobj 1641 0 obj << /S /L /K 1642 0 R /P 1280 0 R >> endobj 1642 0 obj << /S /LI /P 1641 0 R /K 812 0 R >> endobj 1643 0 obj << /S /L /K 1644 0 R /P 1280 0 R >> endobj 1644 0 obj << /S /LI /P 1643 0 R /K 818 0 R >> endobj 1645 0 obj << /S /L /K 1646 0 R /P 1280 0 R >> endobj 1646 0 obj << /S /LI /P 1645 0 R /K 829 0 R >> endobj 1647 0 obj << /S /L /K 1648 0 R /P 1280 0 R >> endobj 1648 0 obj << /S /LI /P 1647 0 R /K 839 0 R >> endobj 1649 0 obj << /S /L /K 1650 0 R /P 1280 0 R >> endobj 1650 0 obj << /S /LI /P 1649 0 R /K 847 0 R >> endobj 1651 0 obj << /S /L /K 1652 0 R /P 1280 0 R >> endobj 1652 0 obj << /S /LI /P 1651 0 R /K 851 0 R >> endobj 1653 0 obj << /S /L /K 1654 0 R /P 1280 0 R >> endobj 1654 0 obj << /S /LI /P 1653 0 R /K 859 0 R >> endobj 1655 0 obj << /S /L /K 1656 0 R /P 1280 0 R >> endobj 1656 0 obj << /S /LI /P 1655 0 R /K 876 0 R >> endobj 1657 0 obj << /S /L /K 1658 0 R /P 1280 0 R >> endobj 1658 0 obj << /S /LI /P 1657 0 R /K 880 0 R >> endobj 1659 0 obj << /S /L /P 1280 0 R /K [ 1660 0 R 1661 0 R 1662 0 R 1663 0 R ] >> endobj 1660 0 obj << /S /LI /P 1659 0 R /K 903 0 R >> endobj 1661 0 obj << /S /LI /P 1659 0 R /K 905 0 R >> endobj 1662 0 obj << /S /LI /P 1659 0 R /K 907 0 R >> endobj 1663 0 obj << /S /LI /P 1659 0 R /K 909 0 R >> endobj 1664 0 obj << /S /L /K 1665 0 R /P 1280 0 R >> endobj 1665 0 obj << /S /LI /P 1664 0 R /K 984 0 R >> endobj 1666 0 obj << /S /L /K 1667 0 R /P 1280 0 R >> endobj 1667 0 obj << /S /LI /P 1666 0 R /K 1011 0 R >> endobj 1668 0 obj << /S /L /K 1669 0 R /P 1280 0 R >> endobj 1669 0 obj << /S /LI /P 1668 0 R /K 1013 0 R >> endobj 1670 0 obj << /S /L /K 1671 0 R /P 1280 0 R >> endobj 1671 0 obj << /S /LI /P 1670 0 R /K 1054 0 R >> endobj 1672 0 obj << /S /L /K 1673 0 R /P 1280 0 R >> endobj 1673 0 obj << /S /LI /P 1672 0 R /K 1180 0 R >> endobj 1674 0 obj << /S /L /K 1675 0 R /P 1280 0 R >> endobj 1675 0 obj << /S /LI /P 1674 0 R /K 1187 0 R >> endobj 1676 0 obj << /S /L /K 1677 0 R /P 1280 0 R >> endobj 1677 0 obj << /S /LI /P 1676 0 R /K 1213 0 R >> endobj 1678 0 obj << /S /L /K 1679 0 R /P 1280 0 R >> endobj 1679 0 obj << /S /LI /P 1678 0 R /K 1217 0 R >> endobj 1680 0 obj << /S /L /K 1681 0 R /P 1280 0 R >> endobj 1681 0 obj << /S /LI /P 1680 0 R /K 1234 0 R >> endobj 1682 0 obj << /S /L /K 1683 0 R /P 1280 0 R >> endobj 1683 0 obj << /S /LI /P 1682 0 R /K 1237 0 R >> endobj 1684 0 obj << /S /L /K 1685 0 R /P 1280 0 R >> endobj 1685 0 obj << /S /LI /P 1684 0 R /K 1239 0 R >> endobj 1686 0 obj << /S /L /K 1687 0 R /P 1280 0 R >> endobj 1687 0 obj << /S /LI /P 1686 0 R /K 1241 0 R >> endobj 1688 0 obj << /S /L /K 1689 0 R /P 1280 0 R >> endobj 1689 0 obj << /S /LI /P 1688 0 R /K 1244 0 R >> endobj 1690 0 obj << /S /L /K 1691 0 R /P 1280 0 R >> endobj 1691 0 obj << /S /LI /P 1690 0 R /K 1246 0 R >> endobj 1692 0 obj << /S /L /K 1693 0 R /P 1280 0 R >> endobj 1693 0 obj << /S /LI /P 1692 0 R /K 1248 0 R >> endobj 1694 0 obj << /S /L /K 1695 0 R /P 1280 0 R >> endobj 1695 0 obj << /S /LI /P 1694 0 R /K 1255 0 R >> endobj 1696 0 obj << /S /Shape /Alt () /Pg 1924 0 R /K [ 0 27 ] /P 1278 0 R /A 1702 0 R >> endobj 1697 0 obj << /S /TextBox /Alt (kYۀ.R:\r{O1fz) /P 1278 0 R /K 1276 0 R >> endobj 1698 0 obj << /S /TextBox /Alt (hr&Ṉnz𜌒һ- ) /P 1278 0 R /K 1274 0 R >> endobj 1699 0 obj << /S /TextBox /Alt (ȗoA>&v~Q<=:b1_axc$M$7{) /P 1278 0 R /K [ 1268 0 R 1270 0 R 1272 0 R ] >> endobj 1700 0 obj << /Nums [ 0 1701 0 R 1 1703 0 R 2 1704 0 R 3 1754 0 R 4 1768 0 R 5 423 0 R 6 1770 0 R 7 1772 0 R 8 1773 0 R 9 1774 0 R 10 1775 0 R 11 1776 0 R 12 1778 0 R 13 1780 0 R 14 1781 0 R 15 1782 0 R 16 1783 0 R 17 777 0 R 18 781 0 R 19 781 0 R 20 784 0 R 21 1788 0 R 22 1789 0 R 23 1790 0 R 24 1791 0 R 25 1792 0 R 26 1793 0 R 27 1794 0 R 28 1795 0 R 29 1797 0 R 30 1798 0 R 31 1799 0 R 32 1800 0 R 33 973 0 R 34 1802 0 R 35 1803 0 R 36 1804 0 R 37 1805 0 R 38 1806 0 R 39 1807 0 R 40 1808 0 R 41 1809 0 R 42 1182 0 R 43 1185 0 R 44 1812 0 R 45 1813 0 R 46 1215 0 R 47 1815 0 R 48 1219 0 R 49 1222 0 R 50 1818 0 R 51 1232 0 R 52 1820 0 R 53 1821 0 R ] >> endobj 1701 0 obj [ 1696 0 R 1276 0 R 1276 0 R 1276 0 R 1276 0 R 1276 0 R 1276 0 R 1276 0 R 1276 0 R 1276 0 R 1276 0 R 1276 0 R 1276 0 R 1276 0 R 1274 0 R 1274 0 R 1274 0 R 1274 0 R 1274 0 R 1274 0 R 1274 0 R 1274 0 R 1274 0 R 1274 0 R 1274 0 R 1274 0 R 1274 0 R 1696 0 R 1268 0 R 1268 0 R 1270 0 R 1270 0 R 1272 0 R 1272 0 R 1272 0 R ] endobj 1702 0 obj << /O /Layout /BBox [ 34 34 566 809 ] /Placement /Block /StartIndent -93.55 /EndIndent -70.2 >> endobj 1703 0 obj [ 273 0 R 274 0 R 277 0 R 278 0 R 279 0 R 280 0 R 281 0 R 282 0 R 283 0 R 284 0 R 285 0 R 286 0 R 287 0 R 288 0 R 289 0 R 290 0 R 291 0 R 292 0 R 293 0 R 294 0 R 295 0 R 296 0 R 297 0 R 298 0 R 299 0 R 300 0 R 301 0 R 302 0 R 303 0 R 304 0 R 305 0 R 306 0 R 307 0 R 308 0 R 310 0 R 311 0 R 312 0 R 313 0 R ] endobj 1704 0 obj [ 314 0 R 317 0 R 315 0 R 319 0 R 315 0 R 321 0 R 320 0 R 322 0 R 320 0 R 324 0 R 323 0 R 326 0 R 323 0 R 328 0 R 327 0 R 329 0 R 327 0 R 331 0 R 330 0 R 333 0 R 330 0 R 335 0 R 334 0 R 336 0 R 334 0 R 338 0 R 337 0 R 339 0 R 337 0 R 341 0 R 340 0 R 342 0 R 340 0 R 344 0 R 343 0 R 345 0 R 343 0 R 347 0 R 346 0 R 348 0 R 346 0 R 350 0 R 349 0 R 351 0 R 349 0 R 353 0 R 352 0 R 354 0 R 352 0 R 356 0 R 355 0 R 357 0 R 355 0 R 359 0 R 358 0 R 360 0 R 358 0 R 362 0 R 361 0 R 363 0 R 361 0 R 365 0 R 364 0 R 366 0 R 364 0 R 368 0 R 367 0 R 369 0 R 367 0 R 371 0 R 370 0 R 372 0 R 370 0 R 374 0 R 373 0 R 375 0 R 373 0 R 377 0 R 376 0 R 378 0 R 376 0 R 380 0 R 379 0 R 381 0 R 379 0 R 383 0 R 382 0 R 384 0 R 382 0 R 386 0 R 385 0 R 387 0 R 385 0 R 389 0 R 388 0 R 390 0 R 388 0 R ] endobj 1705 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 1706 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 1707 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 1708 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 1709 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 1710 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 1711 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 1712 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 1713 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 1714 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 1715 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 1716 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 1717 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 1718 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 1719 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 1720 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 1721 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 1722 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 1723 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 1724 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 1725 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 1726 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 1727 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 1728 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 1729 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 1730 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 1731 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 1732 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 1733 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 1734 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 1735 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 1736 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 1737 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 1738 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 1739 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 1740 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 1741 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 1742 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 1743 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 1744 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 1745 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 1746 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 1747 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 1748 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 1749 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 1750 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 1751 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 1752 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 1753 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 1754 0 obj [ 392 0 R 391 0 R 393 0 R 391 0 R 395 0 R 394 0 R 396 0 R 394 0 R 398 0 R 397 0 R 399 0 R 397 0 R 401 0 R 400 0 R 402 0 R 400 0 R 404 0 R 403 0 R 405 0 R 403 0 R 407 0 R 406 0 R 408 0 R 406 0 R 410 0 R 409 0 R 411 0 R 409 0 R 412 0 R 413 0 R ] endobj 1755 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 1756 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 1757 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 1758 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 1759 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 1760 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 1761 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 1762 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 1763 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 1764 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 1765 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 1766 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 1767 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 1768 0 obj [ 415 0 R 416 0 R 418 0 R 419 0 R 420 0 R 421 0 R 422 0 R 424 0 R 422 0 R ] endobj 1769 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 1770 0 obj [ 425 0 R 426 0 R 427 0 R 428 0 R 429 0 R 431 0 R 432 0 R 433 0 R 435 0 R 437 0 R 439 0 R 443 0 R 441 0 R ] endobj 1771 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 1772 0 obj [ 444 0 R 445 0 R 446 0 R 447 0 R 448 0 R 449 0 R 450 0 R 451 0 R 452 0 R 453 0 R 454 0 R 455 0 R 456 0 R 457 0 R 458 0 R 460 0 R 462 0 R 464 0 R 466 0 R 468 0 R 470 0 R ] endobj 1773 0 obj [ 471 0 R 472 0 R 474 0 R 475 0 R 476 0 R 477 0 R 478 0 R 479 0 R 480 0 R 481 0 R 482 0 R 483 0 R 484 0 R 485 0 R 486 0 R 487 0 R 488 0 R 489 0 R 490 0 R 491 0 R 492 0 R 493 0 R 494 0 R ] endobj 1774 0 obj [ 495 0 R 496 0 R 497 0 R 498 0 R 499 0 R 500 0 R 501 0 R 502 0 R 503 0 R 504 0 R ] endobj 1775 0 obj [ 505 0 R 506 0 R 507 0 R 508 0 R 509 0 R 510 0 R 511 0 R 512 0 R 513 0 R ] endobj 1776 0 obj [ 514 0 R 515 0 R 516 0 R 517 0 R 518 0 R 519 0 R 521 0 R 522 0 R 525 0 R 527 0 R 529 0 R 531 0 R 533 0 R 535 0 R 537 0 R 539 0 R 541 0 R 543 0 R 545 0 R 547 0 R 549 0 R 551 0 R 553 0 R 551 0 R 554 0 R 556 0 R 558 0 R 560 0 R 562 0 R 564 0 R 566 0 R 568 0 R 570 0 R 572 0 R 574 0 R 576 0 R 578 0 R 580 0 R 582 0 R ] endobj 1777 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 1778 0 obj [ 584 0 R 586 0 R 588 0 R 590 0 R 588 0 R 591 0 R 593 0 R 595 0 R 597 0 R 599 0 R 601 0 R 603 0 R 605 0 R 607 0 R 609 0 R 611 0 R 613 0 R 615 0 R 617 0 R 619 0 R 621 0 R 623 0 R 625 0 R 627 0 R 629 0 R 631 0 R 633 0 R 635 0 R 637 0 R 639 0 R 641 0 R 643 0 R 645 0 R 647 0 R 649 0 R 651 0 R ] endobj 1779 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 1780 0 obj [ 651 0 R 653 0 R 655 0 R 657 0 R 659 0 R 661 0 R 663 0 R 665 0 R 667 0 R 669 0 R 671 0 R 673 0 R 675 0 R 677 0 R 679 0 R 681 0 R 683 0 R 685 0 R 687 0 R 689 0 R 691 0 R 693 0 R 695 0 R 697 0 R 699 0 R 701 0 R 703 0 R 705 0 R 707 0 R 709 0 R 711 0 R 713 0 R ] endobj 1781 0 obj [ 713 0 R 715 0 R 717 0 R 719 0 R 721 0 R 723 0 R 725 0 R 727 0 R 729 0 R 731 0 R 733 0 R 735 0 R 736 0 R 737 0 R 738 0 R 739 0 R 741 0 R 743 0 R 744 0 R 745 0 R 746 0 R ] endobj 1782 0 obj [ 747 0 R 748 0 R 749 0 R 750 0 R 751 0 R 752 0 R 753 0 R 754 0 R 755 0 R 756 0 R 757 0 R 758 0 R 759 0 R 760 0 R 761 0 R 762 0 R 763 0 R 764 0 R 765 0 R 766 0 R 767 0 R 768 0 R ] endobj 1783 0 obj [ 769 0 R 771 0 R 770 0 R 770 0 R 770 0 R 773 0 R 774 0 R 775 0 R 778 0 R 775 0 R 779 0 R 782 0 R 782 0 R 779 0 R 783 0 R 785 0 R 783 0 R 786 0 R 787 0 R 788 0 R ] endobj 1784 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 1785 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 1786 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 1787 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 1788 0 obj [ 789 0 R 790 0 R 791 0 R 793 0 R 795 0 R 796 0 R ] endobj 1789 0 obj [ 797 0 R 798 0 R 799 0 R 800 0 R 801 0 R 802 0 R 803 0 R 804 0 R 805 0 R 807 0 R 808 0 R 810 0 R 812 0 R 814 0 R ] endobj 1790 0 obj [ 814 0 R 816 0 R 818 0 R 820 0 R 822 0 R 823 0 R 824 0 R 825 0 R 826 0 R 827 0 R 828 0 R 829 0 R 830 0 R 831 0 R 832 0 R 834 0 R 835 0 R 836 0 R 837 0 R ] endobj 1791 0 obj [ 838 0 R 839 0 R 840 0 R 841 0 R 842 0 R 843 0 R 844 0 R 845 0 R 846 0 R ] endobj 1792 0 obj [ 847 0 R 848 0 R 849 0 R 850 0 R 851 0 R 852 0 R 853 0 R 854 0 R 855 0 R 856 0 R 857 0 R 858 0 R ] endobj 1793 0 obj [ 859 0 R 860 0 R 861 0 R 862 0 R 863 0 R 864 0 R 865 0 R 866 0 R 867 0 R 868 0 R 869 0 R 870 0 R 871 0 R 872 0 R 873 0 R 874 0 R 875 0 R 876 0 R 877 0 R ] endobj 1794 0 obj [ 878 0 R 879 0 R ] endobj 1795 0 obj [ 880 0 R 881 0 R 882 0 R 883 0 R 884 0 R 885 0 R 886 0 R 887 0 R 888 0 R 889 0 R 890 0 R 891 0 R 892 0 R 893 0 R 896 0 R 894 0 R 894 0 R 894 0 R 894 0 R 897 0 R ] endobj 1796 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 1797 0 obj [ 898 0 R 899 0 R 900 0 R 901 0 R 902 0 R 903 0 R 905 0 R 907 0 R 909 0 R 911 0 R 912 0 R 913 0 R 914 0 R 915 0 R 916 0 R 917 0 R 918 0 R 919 0 R 920 0 R 921 0 R 922 0 R 923 0 R ] endobj 1798 0 obj [ 924 0 R 925 0 R 926 0 R 927 0 R 928 0 R 929 0 R 930 0 R 931 0 R 932 0 R 933 0 R 934 0 R 935 0 R 936 0 R 937 0 R 938 0 R 939 0 R 940 0 R 941 0 R 942 0 R 943 0 R 944 0 R ] endobj 1799 0 obj [ 945 0 R 946 0 R 947 0 R 948 0 R 949 0 R 950 0 R 951 0 R 952 0 R 953 0 R 954 0 R 955 0 R 956 0 R 957 0 R 958 0 R 959 0 R 960 0 R 961 0 R 962 0 R ] endobj 1800 0 obj [ 963 0 R 964 0 R 965 0 R 966 0 R 967 0 R 968 0 R 969 0 R 970 0 R 971 0 R 972 0 R 974 0 R 972 0 R 975 0 R 976 0 R 977 0 R 978 0 R 979 0 R 980 0 R 981 0 R 982 0 R 983 0 R 984 0 R 985 0 R ] endobj 1801 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 1802 0 obj [ 986 0 R 987 0 R 988 0 R 989 0 R 990 0 R 991 0 R 992 0 R 993 0 R 994 0 R 995 0 R 996 0 R 997 0 R 998 0 R 999 0 R 1000 0 R 1001 0 R 1002 0 R 1003 0 R 1004 0 R 1005 0 R 1006 0 R 1007 0 R 1008 0 R 1009 0 R 1010 0 R ] endobj 1803 0 obj [ 1011 0 R 1012 0 R ] endobj 1804 0 obj [ 1013 0 R 1014 0 R 1015 0 R 1016 0 R 1017 0 R 1018 0 R 1019 0 R 1020 0 R 1021 0 R 1022 0 R 1023 0 R 1024 0 R 1025 0 R 1026 0 R 1027 0 R 1028 0 R 1029 0 R 1030 0 R 1031 0 R 1032 0 R 1033 0 R 1034 0 R 1035 0 R 1036 0 R 1037 0 R ] endobj 1805 0 obj [ 1038 0 R 1039 0 R 1040 0 R 1041 0 R 1042 0 R 1043 0 R 1044 0 R 1045 0 R 1046 0 R 1047 0 R 1048 0 R 1049 0 R 1050 0 R 1051 0 R 1052 0 R 1053 0 R ] endobj 1806 0 obj [ 1054 0 R 1055 0 R 1056 0 R 1057 0 R 1058 0 R 1059 0 R 1060 0 R 1061 0 R 1062 0 R 1063 0 R 1064 0 R 1065 0 R 1066 0 R 1067 0 R 1068 0 R 1069 0 R 1070 0 R 1071 0 R 1072 0 R 1073 0 R 1074 0 R 1075 0 R 1076 0 R 1077 0 R 1078 0 R 1079 0 R 1080 0 R 1081 0 R 1082 0 R 1083 0 R 1084 0 R 1085 0 R 1086 0 R 1087 0 R 1088 0 R 1089 0 R 1090 0 R 1091 0 R 1092 0 R 1093 0 R 1094 0 R 1095 0 R 1096 0 R 1097 0 R 1098 0 R 1099 0 R 1100 0 R 1101 0 R 1102 0 R 1103 0 R 1104 0 R 1105 0 R 1106 0 R 1107 0 R ] endobj 1807 0 obj [ 1108 0 R 1109 0 R 1110 0 R 1111 0 R 1112 0 R 1113 0 R 1114 0 R 1115 0 R 1116 0 R 1117 0 R 1118 0 R 1119 0 R 1120 0 R 1121 0 R 1122 0 R 1123 0 R 1124 0 R 1125 0 R 1126 0 R 1127 0 R 1128 0 R 1129 0 R 1130 0 R 1131 0 R 1132 0 R 1133 0 R 1134 0 R 1135 0 R 1136 0 R 1137 0 R 1138 0 R 1139 0 R 1140 0 R 1141 0 R 1142 0 R 1143 0 R 1144 0 R 1145 0 R 1146 0 R 1147 0 R 1148 0 R 1149 0 R 1150 0 R 1151 0 R 1152 0 R 1153 0 R 1154 0 R 1155 0 R 1156 0 R 1157 0 R 1158 0 R 1159 0 R 1160 0 R 1161 0 R 1162 0 R 1163 0 R 1164 0 R 1165 0 R 1166 0 R 1167 0 R 1168 0 R 1169 0 R 1170 0 R 1171 0 R ] endobj 1808 0 obj [ 1172 0 R 1173 0 R 1174 0 R 1175 0 R 1176 0 R 1177 0 R 1178 0 R 1179 0 R ] endobj 1809 0 obj [ 1180 0 R 1181 0 R 1183 0 R 1181 0 R 1184 0 R 1186 0 R 1184 0 R ] endobj 1810 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 1811 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 1812 0 obj [ 1187 0 R 1188 0 R 1191 0 R 1192 0 R 1193 0 R 1194 0 R 1195 0 R 1196 0 R 1197 0 R 1198 0 R 1199 0 R 1200 0 R 1201 0 R 1202 0 R 1203 0 R 1204 0 R 1205 0 R 1206 0 R 1207 0 R 1208 0 R 1209 0 R 1210 0 R 1211 0 R 1212 0 R ] endobj 1813 0 obj [ 1213 0 R 1214 0 R 1216 0 R 1214 0 R ] endobj 1814 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 1815 0 obj [ 1217 0 R 1218 0 R 1220 0 R 1218 0 R 1221 0 R 1223 0 R 1221 0 R 1224 0 R 1225 0 R ] endobj 1816 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 1817 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 1818 0 obj [ 1226 0 R 1227 0 R 1229 0 R 1233 0 R 1229 0 R 1234 0 R 1235 0 R 1237 0 R 1238 0 R 1239 0 R 1240 0 R 1241 0 R 1242 0 R ] endobj 1819 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 1820 0 obj [ 1242 0 R 1243 0 R 1244 0 R 1245 0 R 1246 0 R 1247 0 R 1248 0 R 1249 0 R 1250 0 R 1251 0 R 1252 0 R 1253 0 R ] endobj 1821 0 obj [ 1254 0 R 1255 0 R 1256 0 R 1257 0 R 1258 0 R 1260 0 R 1262 0 R 1264 0 R 1266 0 R 1267 0 R ] endobj 1822 0 obj << /O /Layout /Placement /Block /StartIndent -28.36 /EndIndent -1.02805 >> endobj 1823 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 74 /Height 105 /ColorSpace 1909 0 R /BitsPerComponent 8 /Length 1824 0 R >> stream X؇G2=퟊ByL'P9 e|hz!&H ;7tH|Jn<JB~ ?MJ XWs-%P^50bEc~#+iHs {'E}â}nL=Li~JBD:V> stream =`Y'>9xDP|+wH>WRxIDD`\*^m}"]#-tH@[rUb;zG;MkV( kol~N؊o/VH~M7$G'u0C)~X| m9qc_3 l"8tH;\.N_(P;paެ endstream endobj 1826 0 obj 225 endobj 1827 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 74 /Height 105 /ColorSpace 1909 0 R /BitsPerComponent 8 /Length 1828 0 R >> stream zCƈNRJ),-, o,F߽2%Wl(^,@ηVTdGY5}jp ϼՁw} &̝LgBU=hEF- A[yxuS#4ϣ*mCk%Yۦy-=OqJ|T*g$%u`]Bs Q]j7If~2~k`~E g=7됔{%,m IcH:zm9: qR`\WO_vE endstream endobj 1828 0 obj 289 endobj 1829 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 74 /Height 105 /ColorSpace 1909 0 R /BitsPerComponent 8 /Length 1830 0 R >> stream ΕfUqjљ%ALob,!a.]` 릇~)b}x=|4w9/Ѕ֚dVAUM5ow֝ʂ_e; YkTWn96֊V|'em'X endstream endobj 1830 0 obj 158 endobj 1831 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 74 /Height 105 /ColorSpace 1909 0 R /BitsPerComponent 8 /Length 1832 0 R >> stream h 'ݲ qey~]K|G?_b=zf^F tVrD (PO/Z=X}KEY!@*c,rhzG w."oelHf[?ӽ.LQ34A,!N >IO~YlSeٶlh߀k81^ѓPD׺l C),#ܚDD'o mY3?mtd[b<2H۶ނK^s!1FWoTGUc^H> stream ՔoeaE=s Eʓ;{b۠?[.vZT/a#d .;@ɜ6 Wl /ڱ}98ZK^EAR]Թ3~QIPdvE~A'0[Ƒ;6_lu䢢mYK͒A4gpǖ y _s*LDdeŵ^ܑxy* sˠ]DSTvl"Բin$yPba Hmo޻g7m9\f)G湤7:S!T^٤:0T+dDmsAqzS rB F>u9tTl/!˾Slp8a)BhLd^%ƀI4G> stream NSa&A48k}!Zg̕/hiC܎A>HZ @Ua;lV_G \j'.D>Ր9_Д7TeRjVg" }hȪgC=(?bMyDɇ܎gb1\b05qOTu\$UEAH$>u&N{!vS#?xP > stream >ݏ`A;ؤi@:v \|q])o]]`ȮcCcݪR2}%o B=`"M[+.cWS;y F2yn;pxλ#\9`{Pum'BQs!8ʢ4hO wo<| ƒSUMD!}X8t9KOl*j)7p'&J9Ы482\Ψ2ZH.T|t`>ngc0 ǘ#20=Ê+&@\俏: endstream endobj 1838 0 obj 364 endobj 1839 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 74 /Height 105 /ColorSpace 1909 0 R /BitsPerComponent 8 /Length 1840 0 R >> stream ON¹GzwR +vS)[ Te5[j!c/Xzʀ{6c'\Е cBJٜNC\c{TdCT$'㣪nI5=vV 6jGVK=V[ 9 #ם"֤+T|K du"z|1I #vo?,SYsszt%,% ( Lj_M=V&t}48ݥL-ѕ٥D3#'ZR /Eb@z'@lᲩds"1i}> stream w`ZF2#*VjFC딬fW+ÙƹY+@4CwqRVUh`Pܔ Jev _" 0ᛦ@K 5XuB=֚gTKyf ٠"b,6&GFnzyK tbS*M&jg@ͧNv:La=>~Tw-~_9d bE,|do?,b) % 'PW Zf4=_0zA=aX&ոXe)01Y&%4D׫fɸ43X=KMz댷8++wLM;~\*_rM ^ۋ !O:HE1&793t=9FmL* C6Ai}$A06;|\ky]> stream 7jکv"9/=Nr5{9w&^g$&8MI] f,KuPҤБaa3n);J'`؝Ie=Tk]pS3];v&WJ<<=M u0X!//OϮƱצ#,c?~TX~LFUM8 2ϑtś*_-6$(?jKhzr].Ly7;hf3AmHh(Q ;=G)HI!< endstream endobj 1844 0 obj 289 endobj 1845 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 74 /Height 105 /ColorSpace 1909 0 R /BitsPerComponent 8 /Length 1846 0 R >> stream 3Q?"ԂMvʚoqK;Dh2t|8;|ф;п<e1J)z/Ip$m(E:OG&XQ;Mؒտn Z7EۍD7 iq<^|> stream [G$'Q*?6nSb >&s#QtBK(Lk#^3/i=@Ґ[! R4jw[~򦡧 ^u _AAsa,p+46q`[_z2OJ:x/r#zCz^x3gl6TA/ $U`[#0.ܟiU endstream endobj 1848 0 obj 213 endobj 1849 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 74 /Height 105 /ColorSpace 1909 0 R /BitsPerComponent 8 /Length 1850 0 R >> stream i}b e$>.Gxz'd,wNBe0FTh,CrBVb= endstream endobj 1850 0 obj 316 endobj 1851 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 74 /Height 105 /ColorSpace 1909 0 R /BitsPerComponent 8 /Length 1852 0 R >> stream  ʯ/F9 Y…$s %i[dE> Kb8NjhL<U<Ӎa%Ogz.]<lze#+L+|W?MDͻ*8rj둣SZqsQ7F I;BرY&vU|#LE@4yΕ͈M31, sf|O8++p;{DS[v#5Yn6.HYL2BF_qø{٣=MҏQC&2 v(ke.c* {M#sP1X:Q&P voP-@EFJ]jR'!zM!2R-+26? 1\3$Q&IN endstream endobj 1852 0 obj 392 endobj 1853 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 74 /Height 105 /ColorSpace 1909 0 R /BitsPerComponent 8 /Length 1854 0 R >> stream ф$.Z΋svSj~ [EMh+cc !;b`PU汋Xs)GRJNKNH&Q09iktyV-Z$8%Ai$jG)V A" W2i %}աYT ʶ>]ߜ{hv:Bӆ~ ɲ0.fa=pnsEn|[n^VPd՚LSL*6(@댫ږ0Q˅^yv: B4PmJs oA'e:BA ^Md9{ Ovkjk&֔T[SG 2YX~n@fʓv;Յ, endstream endobj 1854 0 obj 509 endobj 1855 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 74 /Height 105 /ColorSpace 1909 0 R /BitsPerComponent 8 /Length 1856 0 R >> stream (qS-ҪU lpxcdv,֎dl⃗O⒌#Hmr5[z.LsjғM2I?e|4tؗ%P/2$^u„ >چ*K&*>}Bv)+/V> FPDcP{PPI3c :, ƕq3U=Z# x6g/ *͚f>1CY. endstream endobj 1856 0 obj 235 endobj 1857 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 74 /Height 105 /ColorSpace 1909 0 R /BitsPerComponent 8 /Length 1858 0 R >> stream zJ&b:_(հKE3SޚՀ sTxVL2v#1>aK =v",B+7fΚZXH׳@;bKuM`u*Fԥx%9 }{w U(=[\ 험˜ a_^*Y7/cG 'نb!&TvG.^h{O3)u:N[jz8?hwُ*2%oh'#vl 68- $~.'!pmRM)xKG endstream endobj 1858 0 obj 431 endobj 1859 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 74 /Height 105 /ColorSpace 1909 0 R /BitsPerComponent 8 /Length 1860 0 R >> stream )wՄCN#u1G/jGP8CED}NXy}؊[e3hwf#1OZZEyS潹 YۦfD&ґ qʼnSw8.CRE$`t;c5R'Tt]sLPCǂ# T#?ǡd9Kw<.hPfCi&51Z͏\کJ=m˕l33pH3Jn?WK]H&TX/@&o-UٺMrb0a]I?r͏W'9~1_5u#ʭƯ2?/֮[W`.d2!b%Q\> endstream endobj 1860 0 obj 366 endobj 1861 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 74 /Height 105 /ColorSpace 1909 0 R /BitsPerComponent 8 /Length 1862 0 R >> stream aٙbmgR-\c/2=tH ٬uqP|a(cӬv\bn3<_A~⟨ʂ#-]`*a$,Xp+ 4A~ac{N`"9'"HDz+S4ud"=Ybtq[;F[)cm S֋7a^ endstream endobj 1862 0 obj 192 endobj 1863 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 74 /Height 105 /ColorSpace 1909 0 R /BitsPerComponent 8 /Length 1864 0 R >> stream ͦŃoZ` -P`41qy͝xYq(O/fb/Bo7ыm'lc&[s2k1(~Z\Yn{/_ gۋw"nHl)Fc36x.vG됞7)딬ѿ 5]gdQ́;Cd ZSEH Ξ~{P\C,xƗׇg6WhVE>∱QQ~>͂ꘑ~roT!Mi-ҟT +l֎f <'fb*\ie{|v;v/BmS\a}LL$W> stream 2 rſRpL:yok(S19AR o/ `ΎPkn@tEaENJ'Vۢ7[Y+YqQZae$3hM\&܊GjLRK .7 dl_,U,m"A=,.5ZMq 0F(<4Q?1Fs;vk>3v3I,nxH9qUf q4-&E ~!b] G/ 6sD"HRzyU+Nz[7~kp6ee;X 췸皉F]v\]j̚q endstream endobj 1866 0 obj 362 endobj 1867 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 74 /Height 105 /ColorSpace 1909 0 R /BitsPerComponent 8 /Length 1868 0 R >> stream 1e Cw휐 }A,Lvp~إE[= NM,'!޾p, :9?< \eJ6P[RlE endstream endobj 1868 0 obj 87 endobj 1869 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 74 /Height 105 /ColorSpace 1909 0 R /BitsPerComponent 8 /Length 1870 0 R >> stream fESECْ|]' o@hER(@QVX-X`Z1«H^ܶbo _],_hU;EΦܠbHyK}wcv2<@8FoS?XrH(`)x\> /YI=;D#=?}i('@fEŽ2|0 $ҕI|Hcra)GMT*8cK>7#^O4іe%#HxZNlSFB]w݄1~~Wr%.d >}[R?["@p܅ޮ`8ݪ^֯@0!+?\tHz/x  `]Z>Zp e۳IҔQ# @-M@:0>^f9O 7^)9#a{ꢄ` endstream endobj 1870 0 obj 462 endobj 1871 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 74 /Height 105 /ColorSpace 1909 0 R /BitsPerComponent 8 /Length 1872 0 R >> stream ^x>BWa:ВFrL# IDΡQ/؟s;{cK}h_fb G@Pñȣ"i!D-iDnLdX8<%c<UCy,H3/cd;x+n^Iz?%SȭM4Dd< r+9-ߞ&1Y%+PI4󸥑w9b4"Qx:NӇz}D[(G@r E3kŝSSxO``KHT5Ҡ`cӿn?:CG޲ endstream endobj 1872 0 obj 352 endobj 1873 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 74 /Height 105 /ColorSpace 1909 0 R /BitsPerComponent 8 /Length 1874 0 R >> stream 7O{%.\qe`4/5|w7@AIBF?PmQ@K ݧ5Y)9 ӖP)U`GlpU3Uc690ZQѬF12a/ E쏧OPb&9,3#ȩ(tHh oBULDOFP9-0.),5ϾCԆ^liipa]jS.lrV%džSdlp ϋ_\z-?R+ : ׮$Va6zkA14JĔfA]˼k<;q endstream endobj 1874 0 obj 350 endobj 1875 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 74 /Height 105 /ColorSpace 1909 0 R /BitsPerComponent 8 /Length 1876 0 R >> stream v2*إfp b"".a-`KEZ#c}LO3c϶׌h8-Ȳ^?<;Ԧ?aWbUK֙H+)ZT7we^툃f"$;' .S8ߦud쉲Ӡca|, {1zQLI dNM)9qE8O=JxXL Վ $?30$ |6`8E! endstream endobj 1876 0 obj 349 endobj 1877 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 74 /Height 105 /ColorSpace 1909 0 R /BitsPerComponent 8 /Length 1878 0 R >> stream OG>O6@3RFCԵEpoZN,+` kFЃQ'6}״NΕƸr;L̺U+WFAa6b79j~RX2%l3:%Jhln[èPVo~EWZ8[3 (ۘYCn/d<VKca "Wq2Kiwߏ)wW33s_4_&ٰƲmjP> stream fQM..QҝUhbf{]+D]Y$@n08.Ҫ;B0ׅ1[\t ]焽ୣVP='7} C;1蔦ƣI˕!*Lx*Fr]nK1b9mL\-Tdc.3}W,>DUL.C(tQh4#jЫxʌ W?gQ&"h8kFjH10</28雺_~mt endstream endobj 1880 0 obj 301 endobj 1881 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 74 /Height 105 /ColorSpace 1909 0 R /BitsPerComponent 8 /Length 1882 0 R >> stream .X7kQoj( ֻݬ4 P: ˯=1߾5D7& 鋛Xܗ *O.ܞi|=߃[%E)wEr@p^alu endstream endobj 1882 0 obj 117 endobj 1883 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 74 /Height 105 /ColorSpace 1909 0 R /BitsPerComponent 8 /Length 1884 0 R >> stream 'MaFƸe/Bx.N#7]tRJ#:rJcL[L͂`?h/o@q^tvYFXț2&c_n'5;:y"rG]f<1&xl=!ab`!k.[S~+j^wkx2QJֽkT!ETZHm endstream endobj 1884 0 obj 217 endobj 1885 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 74 /Height 105 /ColorSpace 1909 0 R /BitsPerComponent 8 /Length 1886 0 R >> stream Pԍ.QxF ytEJ={S =ri@a$)LncJLkGq Gg'p5fBˆ2WԹk:*[@)06lYZ]| sY&=FbI:7Cʋeyv6%1 endstream endobj 1886 0 obj 178 endobj 1887 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 74 /Height 105 /ColorSpace 1909 0 R /BitsPerComponent 8 /Length 1888 0 R >> stream 48+]N!(R\Q & E`Ao. B{;df_pE{*ah\ȬN݉Je]8x{ѝڲNJfZۗ#˳5_͸>k~2 $ˇXa^Xߠ5%ƿ+ Chg[i'jҙ+DUXlϥ -=/8F>buf endstream endobj 1888 0 obj 248 endobj 1889 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 74 /Height 105 /ColorSpace 1909 0 R /BitsPerComponent 8 /Length 1890 0 R >> stream q`70M*GkMl,*^t7J4)qR%Ta\#nK҄k~?,璵Q?v5o:9dݗ$ x5]\6Q8do]~eDa2xD*O,5V5B+"?c; G+V#rӂ.,$ tPwRw6=; I}#80e }`*8\E( endstream endobj 1890 0 obj 252 endobj 1891 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 74 /Height 105 /ColorSpace 1909 0 R /BitsPerComponent 8 /Length 1892 0 R >> stream j/_B%=%! hVo %S"ڬqx889L(О(LR?-B}B+@`lcaՑ.aeVF9V/79B8 endstream endobj 1892 0 obj 106 endobj 1893 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 74 /Height 105 /ColorSpace 1909 0 R /BitsPerComponent 8 /Length 1894 0 R >> stream @Ԕ( 3F%$wM/Z0Iy-T^y"Y z(?}4SjK,*AdtΧ,}BԮ"W@HJ)><.Ud`:x=uXWBR;b)j.EQĨ"V endstream endobj 1894 0 obj 203 endobj 1895 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 74 /Height 105 /ColorSpace 1909 0 R /BitsPerComponent 8 /Length 1896 0 R >> stream !7cԌ4酉J|s}`R^ERsC>WWOj\إph́Ļ80j*r cTE1DVsP c{mV\'o۞&o]l>%CfMO]Ӊc*?{)YMO#B3&./x! endstream endobj 1896 0 obj 229 endobj 1897 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 74 /Height 105 /ColorSpace 1909 0 R /BitsPerComponent 8 /Length 1898 0 R >> stream 5`LlaIa_rrΓCKGa[/Dl TE> stream l;ط~/MyX]bA&ŝn!Y ɯ(i?.Q˛1!].H6a'YŧKg)fQ(b8{q`?$$ϵ)lGp9aT˄(Nd4" .X nKN1 uvwj9147b}WRFT2_La endstream endobj 1900 0 obj 206 endobj 1901 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 74 /Height 105 /ColorSpace 1909 0 R /BitsPerComponent 8 /Length 1902 0 R >> stream tKV1/iiYN!~5Nj|Zp,3q]MMO 4RL3POm 3mLq*Y߻$=`/i3@퉺פmBk&)Xq| Iqm?@'ߦi<Ԙ܃N.Yd˗R *;u)w7E=F 9{Ui6V ,tև.{wԣE+Ƞ7;@Nk !oiTHDH ľ¶<Sǫaܰ-SvNV;9yS(a-Kx#T endstream endobj 1902 0 obj 473 endobj 1903 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 74 /Height 105 /ColorSpace 1909 0 R /BitsPerComponent 8 /Length 1904 0 R >> stream >،!hbl3XSᇃO-<뉇 Y̱XֵfȒ}ڄݛFLhb> stream ՞FXyqp>3 SKf-")@|OTPmLAƳGiYwYD+-Dl􆗤Ca|0.2)t,}whЇ鰾Ӆ&$fm 0ڨ>fCf0"}/el;7hd+o 㱝V MP/13ҡ/; endstream endobj 1906 0 obj 203 endobj 1907 0 obj 481 endobj 1908 0 obj << /Filter [ /ASCII85Decode /LZWDecode ] /Length 1907 0 R >> stream %I=\JIkH&/|G/4r6qE5zp{:QL 8M gl*-U]Y#X(V4h BjWUcvӌI5M ycߚtm^0 59Co*(ŠTe # 6er) 4vhyH@Oŧ䇼, 35kq{o= _,ﷳ}_Bҷ9=BM> HS`u&Gt7RbBvZ ʗCx;:',Q AMY*蚉@AÔh7Ν41MK&?uMa4|*BzU|7@XA=zEBBZLw]\Ъ [d|;13> endobj 1911 0 obj << /Nums [ 0 1910 0 R ] >> endobj 1912 0 obj << /Producer (Øڛhkpex%\rL&JW||i) /Author (Ô9dS|ux) /Creator (ØڛERxr*;E V) /ModDate (σ߀z8,\(F3!,^) /Title (ڍ咬ϻ$m?4Way܍_[\r=WVl/!ñ|͉p.XT`) /CreationDate (σ߀z8,\(F7!,^) >> endobj 1913 0 obj << /Type /Metadata /Subtype /XML /Length 1248 >> stream w:v:ɧ5ԌLOE@(Xh|>}g!Ȉ4LMǔ\gIy62?d$Q%e';8"2VV~Z.T }ؚ~7<~·2ɌL`\C[N6KUMwAv6eRY*Ѹ$3aK˿(m!&GWtNv3lS?7L/O| _y[f6to)87ҍB,#HB}&08D)T]%Hn4'Vg+1=+d1#z.h醅N`8: Ύcq gL!)SzU) ޼T&PaK!P[MocXa:w4?LGfZ bgk::n͍0f6 [ck&on ~t9 iyehoSxZ޿\*B8M"_B^ɐ|_V<=ǒU|Ԭvj@g @dj͟J Մ,pP?p> |8Ϲ(Mi-¶z3ax;iuK;(+th9{͛'6c5è ":?&|3 2`55_5/=l ᆡ!DYC5yP+.BF3$Yğ(h&PS6e-#z0}gV]caz _ShN %*Q endstream endobj 1914 0 obj << /Type /Pages /Kids [ 1924 0 R 1 0 R 4 0 R 56 0 R 74 0 R 79 0 R 82 0 R 87 0 R 90 0 R 93 0 R ] /Count 10 /Parent 1915 0 R >> endobj 1915 0 obj << /Type /Pages /Kids [ 1914 0 R 1916 0 R 1917 0 R 1918 0 R 1919 0 R ] /Count 42 >> endobj 1916 0 obj << /Type /Pages /Kids [ 96 0 R 99 0 R 102 0 R 105 0 R 108 0 R 111 0 R 119 0 R 122 0 R 125 0 R 128 0 R ] /Count 10 /Parent 1915 0 R >> endobj 1917 0 obj << /Type /Pages /Kids [ 131 0 R 134 0 R 137 0 R 140 0 R 143 0 R 146 0 R 149 0 R 152 0 R 157 0 R 160 0 R ] /Count 10 /Parent 1915 0 R >> endobj 1918 0 obj << /Type /Pages /Kids [ 163 0 R 166 0 R 169 0 R 172 0 R 175 0 R 178 0 R 182 0 R 185 0 R 189 0 R 193 0 R ] /Count 10 /Parent 1915 0 R >> endobj 1919 0 obj << /Type /Pages /Kids [ 197 0 R 200 0 R ] /Count 2 /Parent 1915 0 R >> endobj xref 0 1920 0000000000 65535 f 0000280209 00000 n 0000280553 00000 n 0000282096 00000 n 0000282117 00000 n 0000282476 00000 n 0000282663 00000 n 0000282799 00000 n 0000282937 00000 n 0000283072 00000 n 0000283207 00000 n 0000283348 00000 n 0000283490 00000 n 0000283632 00000 n 0000283774 00000 n 0000283909 00000 n 0000284045 00000 n 0000284181 00000 n 0000284317 00000 n 0000284452 00000 n 0000284588 00000 n 0000284726 00000 n 0000284862 00000 n 0000284998 00000 n 0000285134 00000 n 0000285273 00000 n 0000285409 00000 n 0000285545 00000 n 0000285681 00000 n 0000285820 00000 n 0000285956 00000 n 0000290237 00000 n 0000290259 00000 n 0000290324 00000 n 0000290389 00000 n 0000290454 00000 n 0000290519 00000 n 0000290584 00000 n 0000290649 00000 n 0000290714 00000 n 0000290779 00000 n 0000290844 00000 n 0000290909 00000 n 0000290974 00000 n 0000291040 00000 n 0000291106 00000 n 0000291172 00000 n 0000291238 00000 n 0000291304 00000 n 0000291370 00000 n 0000291436 00000 n 0000291502 00000 n 0000291568 00000 n 0000291634 00000 n 0000291700 00000 n 0000291766 00000 n 0000291832 00000 n 0000292193 00000 n 0000292264 00000 n 0000292406 00000 n 0000292546 00000 n 0000292687 00000 n 0000292828 00000 n 0000292969 00000 n 0000293110 00000 n 0000293251 00000 n 0000295117 00000 n 0000295139 00000 n 0000295205 00000 n 0000295271 00000 n 0000295337 00000 n 0000295403 00000 n 0000295469 00000 n 0000295535 00000 n 0000295601 00000 n 0000295962 00000 n 0000295992 00000 n 0000299294 00000 n 0000299316 00000 n 0000299379 00000 n 0000299752 00000 n 0000303283 00000 n 0000303305 00000 n 0000303705 00000 n 0000303862 00000 n 0000304019 00000 n 0000306938 00000 n 0000306960 00000 n 0000307318 00000 n 0000310491 00000 n 0000310513 00000 n 0000310858 00000 n 0000315012 00000 n 0000315034 00000 n 0000315393 00000 n 0000319967 00000 n 0000319989 00000 n 0000320348 00000 n 0000326965 00000 n 0000326987 00000 n 0000327347 00000 n 0000336170 00000 n 0000336193 00000 n 0000336554 00000 n 0000345162 00000 n 0000345185 00000 n 0000345546 00000 n 0000350194 00000 n 0000350217 00000 n 0000350578 00000 n 0000354561 00000 n 0000354584 00000 n 0000354977 00000 n 0000355032 00000 n 0000359454 00000 n 0000359477 00000 n 0000359554 00000 n 0000359657 00000 n 0000359760 00000 n 0000359827 00000 n 0000360175 00000 n 0000362372 00000 n 0000362395 00000 n 0000362757 00000 n 0000366539 00000 n 0000366562 00000 n 0000366924 00000 n 0000370611 00000 n 0000370634 00000 n 0000370982 00000 n 0000372715 00000 n 0000372738 00000 n 0000373086 00000 n 0000376678 00000 n 0000376701 00000 n 0000377049 00000 n 0000380525 00000 n 0000380548 00000 n 0000380896 00000 n 0000381485 00000 n 0000381507 00000 n 0000381868 00000 n 0000386827 00000 n 0000386850 00000 n 0000387212 00000 n 0000391171 00000 n 0000391194 00000 n 0000391542 00000 n 0000395185 00000 n 0000395208 00000 n 0000395556 00000 n 0000400146 00000 n 0000400169 00000 n 0000400547 00000 n 0000400578 00000 n 0000404272 00000 n 0000404295 00000 n 0000404362 00000 n 0000404723 00000 n 0000407799 00000 n 0000407822 00000 n 0000408170 00000 n 0000408951 00000 n 0000408973 00000 n 0000409321 00000 n 0000411009 00000 n 0000411032 00000 n 0000411380 00000 n 0000412910 00000 n 0000412933 00000 n 0000413281 00000 n 0000415197 00000 n 0000415220 00000 n 0000415568 00000 n 0000417399 00000 n 0000417422 00000 n 0000417770 00000 n 0000418587 00000 n 0000418609 00000 n 0000418987 00000 n 0000419026 00000 n 0000420490 00000 n 0000420513 00000 n 0000420861 00000 n 0000422604 00000 n 0000422627 00000 n 0000422992 00000 n 0000423023 00000 n 0000423998 00000 n 0000424020 00000 n 0000424385 00000 n 0000424424 00000 n 0000426626 00000 n 0000426649 00000 n 0000427028 00000 n 0000427059 00000 n 0000432499 00000 n 0000432522 00000 n 0000432871 00000 n 0000437142 00000 n 0000437165 00000 n 0000437514 00000 n 0000438520 00000 n 0000438542 00000 n 0000438698 00000 n 0000438888 00000 n 0000439348 00000 n 0000439942 00000 n 0000440107 00000 n 0000440314 00000 n 0000447327 00000 n 0000447542 00000 n 0000455735 00000 n 0000455980 00000 n 0000464926 00000 n 0000465153 00000 n 0000493893 00000 n 0000494107 00000 n 0000496978 00000 n 0000497218 00000 n 0000497532 00000 n 0000497760 00000 n 0000498052 00000 n 0000498207 00000 n 0000498369 00000 n 0000498530 00000 n 0000498689 00000 n 0000498851 00000 n 0000499012 00000 n 0000499173 00000 n 0000499250 00000 n 0000499412 00000 n 0000499492 00000 n 0000499651 00000 n 0000499754 00000 n 0000499916 00000 n 0000499980 00000 n 0000500142 00000 n 0000500206 00000 n 0000500368 00000 n 0000500461 00000 n 0000500528 00000 n 0000500641 00000 n 0000500764 00000 n 0000500888 00000 n 0000501022 00000 n 0000501172 00000 n 0000501304 00000 n 0000501443 00000 n 0000501623 00000 n 0000501808 00000 n 0000501930 00000 n 0000502054 00000 n 0000502242 00000 n 0000502371 00000 n 0000502498 00000 n 0000502638 00000 n 0000502824 00000 n 0000502956 00000 n 0000503087 00000 n 0000503229 00000 n 0000503338 00000 n 0000503449 00000 n 0000503607 00000 n 0000503752 00000 n 0000503891 00000 n 0000504030 00000 n 0000504166 00000 n 0000504332 00000 n 0000504452 00000 n 0000504583 00000 n 0000504717 00000 n 0000504849 00000 n 0000505643 00000 n 0000505728 00000 n 0000505813 00000 n 0000506488 00000 n 0000506640 00000 n 0000506725 00000 n 0000506810 00000 n 0000506895 00000 n 0000506980 00000 n 0000507065 00000 n 0000507150 00000 n 0000507235 00000 n 0000507320 00000 n 0000507406 00000 n 0000507492 00000 n 0000507578 00000 n 0000507664 00000 n 0000507750 00000 n 0000507836 00000 n 0000507922 00000 n 0000508008 00000 n 0000508094 00000 n 0000508180 00000 n 0000508266 00000 n 0000508352 00000 n 0000508438 00000 n 0000508524 00000 n 0000508610 00000 n 0000508696 00000 n 0000508782 00000 n 0000508868 00000 n 0000508954 00000 n 0000509040 00000 n 0000509126 00000 n 0000509212 00000 n 0000509296 00000 n 0000509380 00000 n 0000509532 00000 n 0000509618 00000 n 0000509704 00000 n 0000509790 00000 n 0000509876 00000 n 0000510017 00000 n 0000510125 00000 n 0000510291 00000 n 0000510373 00000 n 0000510528 00000 n 0000510610 00000 n 0000510718 00000 n 0000510800 00000 n 0000510882 00000 n 0000510992 00000 n 0000511074 00000 n 0000511233 00000 n 0000511316 00000 n 0000511426 00000 n 0000511509 00000 n 0000511592 00000 n 0000511702 00000 n 0000511785 00000 n 0000511940 00000 n 0000512023 00000 n 0000512133 00000 n 0000512216 00000 n 0000512299 00000 n 0000512409 00000 n 0000512492 00000 n 0000512575 00000 n 0000512685 00000 n 0000512768 00000 n 0000512851 00000 n 0000512961 00000 n 0000513044 00000 n 0000513127 00000 n 0000513237 00000 n 0000513320 00000 n 0000513403 00000 n 0000513513 00000 n 0000513596 00000 n 0000513679 00000 n 0000513789 00000 n 0000513872 00000 n 0000513955 00000 n 0000514065 00000 n 0000514148 00000 n 0000514231 00000 n 0000514341 00000 n 0000514424 00000 n 0000514507 00000 n 0000514617 00000 n 0000514700 00000 n 0000514783 00000 n 0000514893 00000 n 0000514976 00000 n 0000515059 00000 n 0000515169 00000 n 0000515252 00000 n 0000515335 00000 n 0000515445 00000 n 0000515528 00000 n 0000515611 00000 n 0000515721 00000 n 0000515804 00000 n 0000515887 00000 n 0000515997 00000 n 0000516080 00000 n 0000516163 00000 n 0000516273 00000 n 0000516356 00000 n 0000516439 00000 n 0000516549 00000 n 0000516632 00000 n 0000516715 00000 n 0000516825 00000 n 0000516908 00000 n 0000516991 00000 n 0000517101 00000 n 0000517184 00000 n 0000517267 00000 n 0000517376 00000 n 0000517459 00000 n 0000517542 00000 n 0000517651 00000 n 0000517734 00000 n 0000517817 00000 n 0000517927 00000 n 0000518010 00000 n 0000518094 00000 n 0000518205 00000 n 0000518289 00000 n 0000518373 00000 n 0000518484 00000 n 0000518568 00000 n 0000518652 00000 n 0000518763 00000 n 0000518847 00000 n 0000518931 00000 n 0000519042 00000 n 0000519126 00000 n 0000519210 00000 n 0000519298 00000 n 0000519397 00000 n 0000519564 00000 n 0000519657 00000 n 0000519755 00000 n 0000519928 00000 n 0000520026 00000 n 0000520124 00000 n 0000520222 00000 n 0000520320 00000 n 0000520432 00000 n 0000520537 00000 n 0000520620 00000 n 0000520713 00000 n 0000520811 00000 n 0000520909 00000 n 0000521002 00000 n 0000521100 00000 n 0000521272 00000 n 0000521370 00000 n 0000521466 00000 n 0000521564 00000 n 0000521720 00000 n 0000521824 00000 n 0000521904 00000 n 0000522008 00000 n 0000522088 00000 n 0000522193 00000 n 0000522273 00000 n 0000522400 00000 n 0000522457 00000 n 0000522541 00000 n 0000522634 00000 n 0000522732 00000 n 0000522830 00000 n 0000522926 00000 n 0000523022 00000 n 0000523118 00000 n 0000523214 00000 n 0000523310 00000 n 0000523408 00000 n 0000523506 00000 n 0000523603 00000 n 0000523700 00000 n 0000523797 00000 n 0000523896 00000 n 0000524001 00000 n 0000524081 00000 n 0000524186 00000 n 0000524266 00000 n 0000524371 00000 n 0000524451 00000 n 0000524556 00000 n 0000524636 00000 n 0000524741 00000 n 0000524821 00000 n 0000524926 00000 n 0000525006 00000 n 0000525105 00000 n 0000525198 00000 n 0000525296 00000 n 0000525473 00000 n 0000525569 00000 n 0000525665 00000 n 0000525761 00000 n 0000525857 00000 n 0000525953 00000 n 0000526049 00000 n 0000526145 00000 n 0000526241 00000 n 0000526338 00000 n 0000526435 00000 n 0000526532 00000 n 0000526629 00000 n 0000526726 00000 n 0000526823 00000 n 0000526922 00000 n 0000527021 00000 n 0000527120 00000 n 0000527219 00000 n 0000527313 00000 n 0000527412 00000 n 0000527511 00000 n 0000527604 00000 n 0000527702 00000 n 0000527800 00000 n 0000527898 00000 n 0000527996 00000 n 0000528089 00000 n 0000528187 00000 n 0000528280 00000 n 0000528378 00000 n 0000528476 00000 n 0000528574 00000 n 0000528672 00000 n 0000528770 00000 n 0000528868 00000 n 0000528961 00000 n 0000529059 00000 n 0000529157 00000 n 0000529255 00000 n 0000529353 00000 n 0000529446 00000 n 0000529544 00000 n 0000529642 00000 n 0000529740 00000 n 0000529862 00000 n 0000529984 00000 n 0000530142 00000 n 0000530264 00000 n 0000530382 00000 n 0000530438 00000 n 0000530598 00000 n 0000530716 00000 n 0000530772 00000 n 0000530890 00000 n 0000530946 00000 n 0000531065 00000 n 0000531121 00000 n 0000531240 00000 n 0000531296 00000 n 0000531415 00000 n 0000531471 00000 n 0000531590 00000 n 0000531646 00000 n 0000531765 00000 n 0000531821 00000 n 0000531940 00000 n 0000531996 00000 n 0000532115 00000 n 0000532171 00000 n 0000532290 00000 n 0000532346 00000 n 0000532465 00000 n 0000532521 00000 n 0000532640 00000 n 0000532696 00000 n 0000532815 00000 n 0000532871 00000 n 0000533005 00000 n 0000533061 00000 n 0000533145 00000 n 0000533264 00000 n 0000533320 00000 n 0000533439 00000 n 0000533495 00000 n 0000533614 00000 n 0000533670 00000 n 0000533789 00000 n 0000533845 00000 n 0000533964 00000 n 0000534020 00000 n 0000534139 00000 n 0000534195 00000 n 0000534314 00000 n 0000534370 00000 n 0000534489 00000 n 0000534545 00000 n 0000534664 00000 n 0000534720 00000 n 0000534839 00000 n 0000534895 00000 n 0000535014 00000 n 0000535070 00000 n 0000535189 00000 n 0000535245 00000 n 0000535364 00000 n 0000535420 00000 n 0000535539 00000 n 0000535595 00000 n 0000535714 00000 n 0000535770 00000 n 0000535888 00000 n 0000535944 00000 n 0000536062 00000 n 0000536118 00000 n 0000536250 00000 n 0000536306 00000 n 0000536389 00000 n 0000536507 00000 n 0000536563 00000 n 0000536681 00000 n 0000536737 00000 n 0000536855 00000 n 0000536911 00000 n 0000537029 00000 n 0000537085 00000 n 0000537203 00000 n 0000537259 00000 n 0000537378 00000 n 0000537434 00000 n 0000537553 00000 n 0000537609 00000 n 0000537728 00000 n 0000537784 00000 n 0000537903 00000 n 0000537959 00000 n 0000538078 00000 n 0000538134 00000 n 0000538253 00000 n 0000538309 00000 n 0000538428 00000 n 0000538484 00000 n 0000538603 00000 n 0000538659 00000 n 0000538778 00000 n 0000538834 00000 n 0000538953 00000 n 0000539009 00000 n 0000539128 00000 n 0000539184 00000 n 0000539303 00000 n 0000539359 00000 n 0000539478 00000 n 0000539534 00000 n 0000539653 00000 n 0000539709 00000 n 0000539828 00000 n 0000539884 00000 n 0000540003 00000 n 0000540059 00000 n 0000540178 00000 n 0000540234 00000 n 0000540353 00000 n 0000540409 00000 n 0000540528 00000 n 0000540584 00000 n 0000540703 00000 n 0000540759 00000 n 0000540878 00000 n 0000540934 00000 n 0000541053 00000 n 0000541109 00000 n 0000541228 00000 n 0000541284 00000 n 0000541403 00000 n 0000541459 00000 n 0000541578 00000 n 0000541634 00000 n 0000541794 00000 n 0000541850 00000 n 0000541969 00000 n 0000542025 00000 n 0000542144 00000 n 0000542200 00000 n 0000542319 00000 n 0000542375 00000 n 0000542494 00000 n 0000542550 00000 n 0000542669 00000 n 0000542725 00000 n 0000542844 00000 n 0000542900 00000 n 0000543019 00000 n 0000543075 00000 n 0000543194 00000 n 0000543250 00000 n 0000543369 00000 n 0000543425 00000 n 0000543545 00000 n 0000543601 00000 n 0000543721 00000 n 0000543777 00000 n 0000543897 00000 n 0000543953 00000 n 0000544073 00000 n 0000544129 00000 n 0000544249 00000 n 0000544305 00000 n 0000544425 00000 n 0000544481 00000 n 0000544601 00000 n 0000544657 00000 n 0000544777 00000 n 0000544833 00000 n 0000544953 00000 n 0000545009 00000 n 0000545129 00000 n 0000545185 00000 n 0000545305 00000 n 0000545361 00000 n 0000545481 00000 n 0000545537 00000 n 0000545657 00000 n 0000545713 00000 n 0000545833 00000 n 0000545889 00000 n 0000546009 00000 n 0000546065 00000 n 0000546185 00000 n 0000546241 00000 n 0000546361 00000 n 0000546417 00000 n 0000546537 00000 n 0000546593 00000 n 0000546713 00000 n 0000546769 00000 n 0000546889 00000 n 0000546945 00000 n 0000547065 00000 n 0000547121 00000 n 0000547282 00000 n 0000547338 00000 n 0000547457 00000 n 0000547513 00000 n 0000547632 00000 n 0000547688 00000 n 0000547807 00000 n 0000547863 00000 n 0000547982 00000 n 0000548038 00000 n 0000548157 00000 n 0000548213 00000 n 0000548332 00000 n 0000548388 00000 n 0000548507 00000 n 0000548563 00000 n 0000548682 00000 n 0000548738 00000 n 0000548857 00000 n 0000548913 00000 n 0000549033 00000 n 0000549089 00000 n 0000549189 00000 n 0000549284 00000 n 0000549384 00000 n 0000549484 00000 n 0000549588 00000 n 0000549761 00000 n 0000549861 00000 n 0000550019 00000 n 0000550123 00000 n 0000550227 00000 n 0000550327 00000 n 0000550431 00000 n 0000550530 00000 n 0000550633 00000 n 0000550736 00000 n 0000550839 00000 n 0000550938 00000 n 0000551041 00000 n 0000551144 00000 n 0000551247 00000 n 0000551350 00000 n 0000551449 00000 n 0000551553 00000 n 0000551653 00000 n 0000551757 00000 n 0000551857 00000 n 0000551961 00000 n 0000552061 00000 n 0000552165 00000 n 0000552265 00000 n 0000552369 00000 n 0000552469 00000 n 0000552573 00000 n 0000552673 00000 n 0000552772 00000 n 0000552893 00000 n 0000552977 00000 n 0000553144 00000 n 0000553238 00000 n 0000553337 00000 n 0000553456 00000 n 0000553536 00000 n 0000553642 00000 n 0000553726 00000 n 0000553847 00000 n 0000553927 00000 n 0000554077 00000 n 0000554169 00000 n 0000554284 00000 n 0000554390 00000 n 0000554475 00000 n 0000554570 00000 n 0000554670 00000 n 0000554770 00000 n 0000554869 00000 n 0000554968 00000 n 0000555081 00000 n 0000555141 00000 n 0000555254 00000 n 0000555314 00000 n 0000555413 00000 n 0000555512 00000 n 0000555606 00000 n 0000555705 00000 n 0000555804 00000 n 0000555903 00000 n 0000556002 00000 n 0000556096 00000 n 0000556195 00000 n 0000556292 00000 n 0000556395 00000 n 0000556568 00000 n 0000556671 00000 n 0000556779 00000 n 0000556858 00000 n 0000556978 00000 n 0000557034 00000 n 0000557142 00000 n 0000557221 00000 n 0000557382 00000 n 0000557438 00000 n 0000557557 00000 n 0000557613 00000 n 0000557720 00000 n 0000557803 00000 n 0000557922 00000 n 0000557978 00000 n 0000558081 00000 n 0000558184 00000 n 0000558287 00000 n 0000558384 00000 n 0000558487 00000 n 0000558584 00000 n 0000558688 00000 n 0000558783 00000 n 0000558883 00000 n 0000558977 00000 n 0000559081 00000 n 0000559254 00000 n 0000559348 00000 n 0000559452 00000 n 0000559546 00000 n 0000559650 00000 n 0000559749 00000 n 0000559843 00000 n 0000559942 00000 n 0000560041 00000 n 0000560144 00000 n 0000560243 00000 n 0000560346 00000 n 0000560445 00000 n 0000560548 00000 n 0000560642 00000 n 0000560741 00000 n 0000560840 00000 n 0000560939 00000 n 0000561033 00000 n 0000561130 00000 n 0000561233 00000 n 0000561336 00000 n 0000561435 00000 n 0000561534 00000 n 0000561634 00000 n 0000561734 00000 n 0000561828 00000 n 0000561927 00000 n 0000562020 00000 n 0000562123 00000 n 0000562216 00000 n 0000562319 00000 n 0000562422 00000 n 0000562515 00000 n 0000562618 00000 n 0000562721 00000 n 0000562815 00000 n 0000562919 00000 n 0000563013 00000 n 0000563117 00000 n 0000563211 00000 n 0000563315 00000 n 0000563419 00000 n 0000563514 00000 n 0000563614 00000 n 0000563713 00000 n 0000563816 00000 n 0000563910 00000 n 0000564009 00000 n 0000564106 00000 n 0000564209 00000 n 0000564312 00000 n 0000564415 00000 n 0000564518 00000 n 0000564621 00000 n 0000564724 00000 n 0000564827 00000 n 0000564925 00000 n 0000565029 00000 n 0000565133 00000 n 0000565237 00000 n 0000565380 00000 n 0000565440 00000 n 0000565525 00000 n 0000565629 00000 n 0000565726 00000 n 0000565829 00000 n 0000565926 00000 n 0000566029 00000 n 0000566132 00000 n 0000566239 00000 n 0000566322 00000 n 0000566429 00000 n 0000566512 00000 n 0000566619 00000 n 0000566702 00000 n 0000566809 00000 n 0000566892 00000 n 0000566995 00000 n 0000567099 00000 n 0000567197 00000 n 0000567301 00000 n 0000567405 00000 n 0000567509 00000 n 0000567613 00000 n 0000567711 00000 n 0000567815 00000 n 0000567919 00000 n 0000568019 00000 n 0000568123 00000 n 0000568227 00000 n 0000568324 00000 n 0000568427 00000 n 0000568530 00000 n 0000568627 00000 n 0000568730 00000 n 0000568833 00000 n 0000568936 00000 n 0000569039 00000 n 0000569142 00000 n 0000569239 00000 n 0000569343 00000 n 0000569447 00000 n 0000569545 00000 n 0000569649 00000 n 0000569753 00000 n 0000569851 00000 n 0000569955 00000 n 0000570059 00000 n 0000570157 00000 n 0000570261 00000 n 0000570365 00000 n 0000570468 00000 n 0000570565 00000 n 0000570668 00000 n 0000570771 00000 n 0000570874 00000 n 0000570977 00000 n 0000571074 00000 n 0000571177 00000 n 0000571280 00000 n 0000571383 00000 n 0000571487 00000 n 0000571585 00000 n 0000571689 00000 n 0000571793 00000 n 0000571897 00000 n 0000572001 00000 n 0000572099 00000 n 0000572203 00000 n 0000572306 00000 n 0000572409 00000 n 0000572512 00000 n 0000572609 00000 n 0000572712 00000 n 0000572815 00000 n 0000572918 00000 n 0000573015 00000 n 0000573118 00000 n 0000573236 00000 n 0000573342 00000 n 0000573427 00000 n 0000573531 00000 n 0000573629 00000 n 0000573733 00000 n 0000573837 00000 n 0000573935 00000 n 0000574039 00000 n 0000574143 00000 n 0000574241 00000 n 0000574345 00000 n 0000574440 00000 n 0000574540 00000 n 0000574637 00000 n 0000574740 00000 n 0000574843 00000 n 0000574946 00000 n 0000575049 00000 n 0000575146 00000 n 0000575249 00000 n 0000575352 00000 n 0000575455 00000 n 0000575552 00000 n 0000575656 00000 n 0000575760 00000 n 0000575864 00000 n 0000575962 00000 n 0000576067 00000 n 0000576172 00000 n 0000576277 00000 n 0000576376 00000 n 0000576481 00000 n 0000576586 00000 n 0000576691 00000 n 0000576790 00000 n 0000576895 00000 n 0000577000 00000 n 0000577105 00000 n 0000577200 00000 n 0000577300 00000 n 0000577395 00000 n 0000577495 00000 n 0000577595 00000 n 0000577695 00000 n 0000577799 00000 n 0000577899 00000 n 0000578003 00000 n 0000578103 00000 n 0000578207 00000 n 0000578307 00000 n 0000578412 00000 n 0000578513 00000 n 0000578618 00000 n 0000578719 00000 n 0000578824 00000 n 0000578925 00000 n 0000579030 00000 n 0000579131 00000 n 0000579236 00000 n 0000579337 00000 n 0000579442 00000 n 0000579543 00000 n 0000579648 00000 n 0000579749 00000 n 0000579854 00000 n 0000579954 00000 n 0000580058 00000 n 0000580158 00000 n 0000580262 00000 n 0000580362 00000 n 0000580466 00000 n 0000580566 00000 n 0000580670 00000 n 0000580770 00000 n 0000580874 00000 n 0000580975 00000 n 0000581080 00000 n 0000581181 00000 n 0000581286 00000 n 0000581387 00000 n 0000581486 00000 n 0000581581 00000 n 0000581681 00000 n 0000581781 00000 n 0000581879 00000 n 0000581977 00000 n 0000582075 00000 n 0000582173 00000 n 0000582271 00000 n 0000582369 00000 n 0000582467 00000 n 0000582566 00000 n 0000582665 00000 n 0000582764 00000 n 0000582863 00000 n 0000582962 00000 n 0000583061 00000 n 0000583160 00000 n 0000583259 00000 n 0000583358 00000 n 0000583457 00000 n 0000583556 00000 n 0000583655 00000 n 0000583754 00000 n 0000583853 00000 n 0000583952 00000 n 0000584051 00000 n 0000584150 00000 n 0000584249 00000 n 0000584348 00000 n 0000584447 00000 n 0000584546 00000 n 0000584645 00000 n 0000584744 00000 n 0000584843 00000 n 0000584942 00000 n 0000585041 00000 n 0000585140 00000 n 0000585239 00000 n 0000585338 00000 n 0000585437 00000 n 0000585536 00000 n 0000585635 00000 n 0000585734 00000 n 0000585833 00000 n 0000585932 00000 n 0000586031 00000 n 0000586130 00000 n 0000586229 00000 n 0000586328 00000 n 0000586427 00000 n 0000586526 00000 n 0000586625 00000 n 0000586724 00000 n 0000586823 00000 n 0000586921 00000 n 0000587019 00000 n 0000587117 00000 n 0000587215 00000 n 0000587313 00000 n 0000587411 00000 n 0000587509 00000 n 0000587607 00000 n 0000587705 00000 n 0000587803 00000 n 0000587902 00000 n 0000588001 00000 n 0000588100 00000 n 0000588199 00000 n 0000588298 00000 n 0000588397 00000 n 0000588496 00000 n 0000588595 00000 n 0000588694 00000 n 0000588793 00000 n 0000588892 00000 n 0000588991 00000 n 0000589090 00000 n 0000589189 00000 n 0000589288 00000 n 0000589387 00000 n 0000589486 00000 n 0000589585 00000 n 0000589684 00000 n 0000589783 00000 n 0000589882 00000 n 0000589981 00000 n 0000590080 00000 n 0000590179 00000 n 0000590278 00000 n 0000590377 00000 n 0000590476 00000 n 0000590575 00000 n 0000590674 00000 n 0000590773 00000 n 0000590872 00000 n 0000590971 00000 n 0000591070 00000 n 0000591169 00000 n 0000591268 00000 n 0000591367 00000 n 0000591466 00000 n 0000591565 00000 n 0000591664 00000 n 0000591763 00000 n 0000591862 00000 n 0000591961 00000 n 0000592060 00000 n 0000592159 00000 n 0000592258 00000 n 0000592357 00000 n 0000592456 00000 n 0000592555 00000 n 0000592654 00000 n 0000592753 00000 n 0000592852 00000 n 0000592951 00000 n 0000593050 00000 n 0000593149 00000 n 0000593247 00000 n 0000593345 00000 n 0000593443 00000 n 0000593541 00000 n 0000593639 00000 n 0000593737 00000 n 0000593835 00000 n 0000593935 00000 n 0000594030 00000 n 0000594145 00000 n 0000594254 00000 n 0000594340 00000 n 0000594455 00000 n 0000594564 00000 n 0000594650 00000 n 0000594745 00000 n 0000594872 00000 n 0000594927 00000 n 0000595080 00000 n 0000595178 00000 n 0000595276 00000 n 0000595374 00000 n 0000595472 00000 n 0000595570 00000 n 0000595668 00000 n 0000595766 00000 n 0000595864 00000 n 0000595963 00000 n 0000596062 00000 n 0000596161 00000 n 0000596260 00000 n 0000596359 00000 n 0000596458 00000 n 0000596557 00000 n 0000596656 00000 n 0000596755 00000 n 0000596854 00000 n 0000596953 00000 n 0000597054 00000 n 0000597155 00000 n 0000597256 00000 n 0000597351 00000 n 0000597466 00000 n 0000597575 00000 n 0000597661 00000 n 0000597756 00000 n 0000597871 00000 n 0000597980 00000 n 0000598066 00000 n 0000598181 00000 n 0000598290 00000 n 0000598376 00000 n 0000598476 00000 n 0000598576 00000 n 0000598676 00000 n 0000598782 00000 n 0000598936 00000 n 0000599049 00000 n 0000599203 00000 n 0000599360 00000 n 0000599469 00000 n 0000599555 00000 n 0000599647 00000 n 0000599745 00000 n 0000599914 00000 n 0000600006 00000 n 0000600104 00000 n 0000600196 00000 n 0000600295 00000 n 0000600388 00000 n 0000600528 00000 n 0000600626 00000 n 0000600718 00000 n 0000600816 00000 n 0000600908 00000 n 0000601006 00000 n 0000601098 00000 n 0000601196 00000 n 0000601294 00000 n 0000601392 00000 n 0000601491 00000 n 0000601590 00000 n 0000601688 00000 n 0000601780 00000 n 0000601878 00000 n 0000601976 00000 n 0000602091 00000 n 0000602146 00000 n 0000602261 00000 n 0000602316 00000 n 0000602431 00000 n 0000602486 00000 n 0000602601 00000 n 0000602656 00000 n 0000602754 00000 n 0000602854 00000 n 0000602966 00000 n 0000603059 00000 n 0000603171 00000 n 0000603264 00000 n 0000603379 00000 n 0000603472 00000 n 0000603617 00000 n 0000603712 00000 n 0000603848 00000 n 0000603942 00000 n 0000604344 00000 n 0000604426 00000 n 0000609269 00000 n 0000609584 00000 n 0000609941 00000 n 0000610023 00000 n 0000610108 00000 n 0000610169 00000 n 0000610228 00000 n 0000610313 00000 n 0000610374 00000 n 0000610433 00000 n 0000610518 00000 n 0000610579 00000 n 0000610638 00000 n 0000610720 00000 n 0000610805 00000 n 0000610866 00000 n 0000610925 00000 n 0000611010 00000 n 0000611071 00000 n 0000611130 00000 n 0000611215 00000 n 0000611276 00000 n 0000611335 00000 n 0000611417 00000 n 0000611502 00000 n 0000611563 00000 n 0000611622 00000 n 0000611707 00000 n 0000611768 00000 n 0000611827 00000 n 0000611912 00000 n 0000611973 00000 n 0000612032 00000 n 0000612114 00000 n 0000612199 00000 n 0000612260 00000 n 0000612319 00000 n 0000612404 00000 n 0000612465 00000 n 0000612524 00000 n 0000612609 00000 n 0000612670 00000 n 0000612729 00000 n 0000612811 00000 n 0000612896 00000 n 0000612957 00000 n 0000613016 00000 n 0000613101 00000 n 0000613162 00000 n 0000613221 00000 n 0000613306 00000 n 0000613367 00000 n 0000613426 00000 n 0000613508 00000 n 0000613593 00000 n 0000613654 00000 n 0000613713 00000 n 0000613798 00000 n 0000613859 00000 n 0000613918 00000 n 0000614003 00000 n 0000614064 00000 n 0000614123 00000 n 0000614205 00000 n 0000614290 00000 n 0000614351 00000 n 0000614410 00000 n 0000614495 00000 n 0000614556 00000 n 0000614615 00000 n 0000614700 00000 n 0000614761 00000 n 0000614820 00000 n 0000614902 00000 n 0000614987 00000 n 0000615048 00000 n 0000615107 00000 n 0000615192 00000 n 0000615253 00000 n 0000615312 00000 n 0000615397 00000 n 0000615458 00000 n 0000615517 00000 n 0000615599 00000 n 0000615684 00000 n 0000615745 00000 n 0000615804 00000 n 0000615889 00000 n 0000615950 00000 n 0000616009 00000 n 0000616094 00000 n 0000616155 00000 n 0000616214 00000 n 0000616296 00000 n 0000616381 00000 n 0000616442 00000 n 0000616501 00000 n 0000616586 00000 n 0000616647 00000 n 0000616706 00000 n 0000616791 00000 n 0000616852 00000 n 0000616911 00000 n 0000616993 00000 n 0000617078 00000 n 0000617139 00000 n 0000617198 00000 n 0000617283 00000 n 0000617344 00000 n 0000617403 00000 n 0000617488 00000 n 0000617549 00000 n 0000617608 00000 n 0000617690 00000 n 0000617775 00000 n 0000617836 00000 n 0000617895 00000 n 0000617980 00000 n 0000618041 00000 n 0000618100 00000 n 0000618185 00000 n 0000618246 00000 n 0000618305 00000 n 0000618387 00000 n 0000618472 00000 n 0000618533 00000 n 0000618592 00000 n 0000618677 00000 n 0000618738 00000 n 0000618797 00000 n 0000618882 00000 n 0000618943 00000 n 0000619002 00000 n 0000619084 00000 n 0000619169 00000 n 0000619230 00000 n 0000619289 00000 n 0000619374 00000 n 0000619435 00000 n 0000619494 00000 n 0000619579 00000 n 0000619640 00000 n 0000619699 00000 n 0000619781 00000 n 0000619866 00000 n 0000619927 00000 n 0000619986 00000 n 0000620071 00000 n 0000620132 00000 n 0000620191 00000 n 0000620296 00000 n 0000620357 00000 n 0000620416 00000 n 0000620498 00000 n 0000620583 00000 n 0000620644 00000 n 0000620703 00000 n 0000620788 00000 n 0000620849 00000 n 0000620908 00000 n 0000621005 00000 n 0000621066 00000 n 0000621125 00000 n 0000621207 00000 n 0000621292 00000 n 0000621353 00000 n 0000621412 00000 n 0000621497 00000 n 0000621558 00000 n 0000621617 00000 n 0000621702 00000 n 0000621763 00000 n 0000621822 00000 n 0000621904 00000 n 0000621989 00000 n 0000622050 00000 n 0000622109 00000 n 0000622194 00000 n 0000622255 00000 n 0000622314 00000 n 0000622399 00000 n 0000622460 00000 n 0000622519 00000 n 0000622601 00000 n 0000622686 00000 n 0000622747 00000 n 0000622806 00000 n 0000622891 00000 n 0000622952 00000 n 0000623011 00000 n 0000623116 00000 n 0000623177 00000 n 0000623236 00000 n 0000623318 00000 n 0000623403 00000 n 0000623464 00000 n 0000623523 00000 n 0000623608 00000 n 0000623669 00000 n 0000623728 00000 n 0000623833 00000 n 0000623894 00000 n 0000623953 00000 n 0000624035 00000 n 0000624120 00000 n 0000624181 00000 n 0000624240 00000 n 0000624325 00000 n 0000624386 00000 n 0000624445 00000 n 0000624542 00000 n 0000624603 00000 n 0000624662 00000 n 0000624744 00000 n 0000624829 00000 n 0000624890 00000 n 0000624949 00000 n 0000625034 00000 n 0000625095 00000 n 0000625154 00000 n 0000625267 00000 n 0000625328 00000 n 0000625387 00000 n 0000625469 00000 n 0000625554 00000 n 0000625615 00000 n 0000625674 00000 n 0000625759 00000 n 0000625820 00000 n 0000625879 00000 n 0000625976 00000 n 0000626037 00000 n 0000626096 00000 n 0000626178 00000 n 0000626263 00000 n 0000626324 00000 n 0000626383 00000 n 0000626468 00000 n 0000626529 00000 n 0000626588 00000 n 0000626693 00000 n 0000626754 00000 n 0000626813 00000 n 0000626895 00000 n 0000626980 00000 n 0000627041 00000 n 0000627100 00000 n 0000627185 00000 n 0000627246 00000 n 0000627305 00000 n 0000627390 00000 n 0000627451 00000 n 0000627510 00000 n 0000627592 00000 n 0000627677 00000 n 0000627738 00000 n 0000627797 00000 n 0000627882 00000 n 0000627943 00000 n 0000628002 00000 n 0000628087 00000 n 0000628148 00000 n 0000628207 00000 n 0000628289 00000 n 0000628374 00000 n 0000628435 00000 n 0000628494 00000 n 0000628579 00000 n 0000628640 00000 n 0000628699 00000 n 0000628784 00000 n 0000628845 00000 n 0000628904 00000 n 0000628986 00000 n 0000629071 00000 n 0000629132 00000 n 0000629191 00000 n 0000629276 00000 n 0000629337 00000 n 0000629396 00000 n 0000629481 00000 n 0000629542 00000 n 0000629601 00000 n 0000629683 00000 n 0000629768 00000 n 0000629829 00000 n 0000629888 00000 n 0000629973 00000 n 0000630034 00000 n 0000630093 00000 n 0000630190 00000 n 0000630251 00000 n 0000630310 00000 n 0000630392 00000 n 0000630477 00000 n 0000630538 00000 n 0000630597 00000 n 0000630682 00000 n 0000630743 00000 n 0000630802 00000 n 0000630887 00000 n 0000630948 00000 n 0000631007 00000 n 0000631089 00000 n 0000631174 00000 n 0000631235 00000 n 0000631294 00000 n 0000631379 00000 n 0000631440 00000 n 0000631499 00000 n 0000631584 00000 n 0000631645 00000 n 0000631704 00000 n 0000631763 00000 n 0000631822 00000 n 0000631881 00000 n 0000631940 00000 n 0000631999 00000 n 0000632058 00000 n 0000632139 00000 n 0000632198 00000 n 0000632257 00000 n 0000632316 00000 n 0000632375 00000 n 0000632434 00000 n 0000632551 00000 n 0000632610 00000 n 0000632669 00000 n 0000632728 00000 n 0000632787 00000 n 0000632846 00000 n 0000632905 00000 n 0000632964 00000 n 0000633023 00000 n 0000633082 00000 n 0000633141 00000 n 0000633200 00000 n 0000633259 00000 n 0000633318 00000 n 0000633377 00000 n 0000633436 00000 n 0000633495 00000 n 0000633554 00000 n 0000633613 00000 n 0000633672 00000 n 0000633731 00000 n 0000633790 00000 n 0000633849 00000 n 0000633908 00000 n 0000633967 00000 n 0000634039 00000 n 0000634098 00000 n 0000634157 00000 n 0000634216 00000 n 0000634275 00000 n 0000634334 00000 n 0000634393 00000 n 0000634452 00000 n 0000634511 00000 n 0000634570 00000 n 0000634629 00000 n 0000634688 00000 n 0000634747 00000 n 0000634806 00000 n 0000634865 00000 n 0000634924 00000 n 0000634983 00000 n 0000635042 00000 n 0000635101 00000 n 0000635160 00000 n 0000635219 00000 n 0000635278 00000 n 0000635337 00000 n 0000635396 00000 n 0000635455 00000 n 0000635514 00000 n 0000635573 00000 n 0000635632 00000 n 0000635691 00000 n 0000635781 00000 n 0000635840 00000 n 0000635899 00000 n 0000635958 00000 n 0000636017 00000 n 0000636076 00000 n 0000636135 00000 n 0000636194 00000 n 0000636254 00000 n 0000636313 00000 n 0000636373 00000 n 0000636432 00000 n 0000636492 00000 n 0000636551 00000 n 0000636611 00000 n 0000636670 00000 n 0000636730 00000 n 0000636789 00000 n 0000636849 00000 n 0000636908 00000 n 0000636968 00000 n 0000637027 00000 n 0000637087 00000 n 0000637146 00000 n 0000637206 00000 n 0000637265 00000 n 0000637325 00000 n 0000637384 00000 n 0000637444 00000 n 0000637503 00000 n 0000637563 00000 n 0000637622 00000 n 0000637682 00000 n 0000637741 00000 n 0000637801 00000 n 0000637860 00000 n 0000637920 00000 n 0000638018 00000 n 0000638118 00000 n 0000638213 00000 n 0000638367 00000 n 0000639045 00000 n 0000639388 00000 n 0000639509 00000 n 0000639841 00000 n 0000640653 00000 n 0000640723 00000 n 0000640793 00000 n 0000640863 00000 n 0000640933 00000 n 0000641003 00000 n 0000641073 00000 n 0000641143 00000 n 0000641213 00000 n 0000641283 00000 n 0000641353 00000 n 0000641423 00000 n 0000641493 00000 n 0000641563 00000 n 0000641633 00000 n 0000641703 00000 n 0000641773 00000 n 0000641843 00000 n 0000641913 00000 n 0000641983 00000 n 0000642053 00000 n 0000642123 00000 n 0000642193 00000 n 0000642263 00000 n 0000642333 00000 n 0000642403 00000 n 0000642473 00000 n 0000642543 00000 n 0000642613 00000 n 0000642683 00000 n 0000642753 00000 n 0000642823 00000 n 0000642893 00000 n 0000642963 00000 n 0000643033 00000 n 0000643103 00000 n 0000643173 00000 n 0000643243 00000 n 0000643313 00000 n 0000643383 00000 n 0000643453 00000 n 0000643523 00000 n 0000643593 00000 n 0000643663 00000 n 0000643733 00000 n 0000643803 00000 n 0000643873 00000 n 0000643943 00000 n 0000644013 00000 n 0000644083 00000 n 0000644350 00000 n 0000644420 00000 n 0000644490 00000 n 0000644560 00000 n 0000644630 00000 n 0000644700 00000 n 0000644770 00000 n 0000644840 00000 n 0000644910 00000 n 0000644980 00000 n 0000645050 00000 n 0000645120 00000 n 0000645190 00000 n 0000645260 00000 n 0000645357 00000 n 0000645427 00000 n 0000645556 00000 n 0000645626 00000 n 0000645820 00000 n 0000646030 00000 n 0000646135 00000 n 0000646232 00000 n 0000646572 00000 n 0000646642 00000 n 0000646958 00000 n 0000647028 00000 n 0000647311 00000 n 0000647505 00000 n 0000647707 00000 n 0000647893 00000 n 0000647963 00000 n 0000648033 00000 n 0000648103 00000 n 0000648173 00000 n 0000648245 00000 n 0000648382 00000 n 0000648560 00000 n 0000648657 00000 n 0000648778 00000 n 0000648956 00000 n 0000648996 00000 n 0000649182 00000 n 0000649252 00000 n 0000649454 00000 n 0000649648 00000 n 0000649818 00000 n 0000650028 00000 n 0000650098 00000 n 0000650336 00000 n 0000650378 00000 n 0000650630 00000 n 0000650800 00000 n 0000651316 00000 n 0000651924 00000 n 0000652021 00000 n 0000652108 00000 n 0000652178 00000 n 0000652248 00000 n 0000652491 00000 n 0000652551 00000 n 0000652621 00000 n 0000652727 00000 n 0000652797 00000 n 0000652867 00000 n 0000653009 00000 n 0000653079 00000 n 0000653212 00000 n 0000653327 00000 n 0000653426 00000 n 0000654154 00000 n 0000654177 00000 n 0000654567 00000 n 0000654590 00000 n 0000655044 00000 n 0000655067 00000 n 0000655390 00000 n 0000655413 00000 n 0000655965 00000 n 0000655988 00000 n 0000656573 00000 n 0000656596 00000 n 0000657062 00000 n 0000657085 00000 n 0000657614 00000 n 0000657637 00000 n 0000658249 00000 n 0000658272 00000 n 0000658929 00000 n 0000658952 00000 n 0000659406 00000 n 0000659429 00000 n 0000659842 00000 n 0000659865 00000 n 0000660243 00000 n 0000660266 00000 n 0000660747 00000 n 0000660770 00000 n 0000661327 00000 n 0000661350 00000 n 0000662024 00000 n 0000662047 00000 n 0000662447 00000 n 0000662470 00000 n 0000663066 00000 n 0000663089 00000 n 0000663620 00000 n 0000663643 00000 n 0000664000 00000 n 0000664023 00000 n 0000664593 00000 n 0000664616 00000 n 0000665143 00000 n 0000665166 00000 n 0000665418 00000 n 0000665440 00000 n 0000666067 00000 n 0000666090 00000 n 0000666607 00000 n 0000666630 00000 n 0000667145 00000 n 0000667168 00000 n 0000667682 00000 n 0000667705 00000 n 0000668224 00000 n 0000668247 00000 n 0000668713 00000 n 0000668736 00000 n 0000669018 00000 n 0000669041 00000 n 0000669423 00000 n 0000669446 00000 n 0000669789 00000 n 0000669812 00000 n 0000670225 00000 n 0000670248 00000 n 0000670665 00000 n 0000670688 00000 n 0000670959 00000 n 0000670982 00000 n 0000671350 00000 n 0000671373 00000 n 0000671767 00000 n 0000671790 00000 n 0000672104 00000 n 0000672127 00000 n 0000672498 00000 n 0000672521 00000 n 0000673159 00000 n 0000673182 00000 n 0000673755 00000 n 0000673778 00000 n 0000674146 00000 n 0000674169 00000 n 0000674192 00000 n 0000674772 00000 n 0000674829 00000 n 0000674862 00000 n 0000674910 00000 n 0000675198 00000 n 0000676533 00000 n 0000676684 00000 n 0000676791 00000 n 0000676950 00000 n 0000677111 00000 n 0000677272 00000 n trailer << /Size 1920 /ID[<969a3c361132669e6b7b3978508cfc7a>] >> startxref 173 %%EOF egenix-mx-base-3.2.7/mx/TextTools/Examples/0000755000175000017500000000000012251446113020356 5ustar lemburglemburgegenix-mx-base-3.2.7/mx/TextTools/Examples/HTML.py0000664000175000017500000001021512133021447021473 0ustar lemburglemburg#!/usr/local/bin/python """ HTML - tag a HTML string (Version 0.6) Copyright (c) 2000, Marc-Andre Lemburg; mailto:mal@lemburg.com Copyright (c) 2000-2013, eGenix.com Software GmbH; mailto:info@egenix.com See the documentation for further information on copyrights, or contact the author. All Rights Reserved. """ import sys # constants + engine from mx.TextTools import * # ErrorTag error = '*syntax error' # error tag obj tagname_charset = CharSet(alpha+'\-'+number) tagattrname_charset = CharSet(alpha+'\-'+number) tagvalue_charset = CharSet('^"\'> ') white_charset = CharSet(' \r\n\t') tagname_charset = CharSet(alpha+'\-'+number) tagattrname_charset = CharSet(alpha+'\-'+number) tagvalue_charset = CharSet('^"\'> ') white_charset = CharSet(' \r\n\t') tagattr = ( # name ('name',AllInCharSet,tagattrname_charset), # with value ? (None,Is,'=',MatchOk), # skip junk (None,AllInCharSet,white_charset,+1), # unquoted value ('value',AllInCharSet,tagvalue_charset,+1,MatchOk), # double quoted value (None,Is,'"',+5), ('value',AllNotIn,'"',+1,+2), ('value',Skip,0), (None,Is,'"'), (None,Jump,To,MatchOk), # single quoted value (None,Is,'\''), ('value',AllNotIn,'\'',+1,+2), ('value',Skip,0), (None,Is,'\'') ) valuetable = ( # ignore whitespace + '=' (None,AllInCharSet,CharSet(' \r\n\t='),+1), # unquoted value ('value',AllInCharSet,tagvalue_charset,+1,MatchOk), # double quoted value (None,Is,'"',+5), ('value',AllNotIn,'"',+1,+2), ('value',Skip,0), (None,Is,'"'), (None,Jump,To,MatchOk), # single quoted value (None,Is,'\''), ('value',AllNotIn,'\'',+1,+2), ('value',Skip,0), (None,Is,'\'') ) allattrs = ( # look for attributes (None,AllInCharSet,white_charset,+4), (None,Is,'>',+1,MatchOk), ('tagattr',Table,tagattr), (None,Jump,To,-3), (None,Is,'>',+1,MatchOk), # handle incorrect attributes (error,AllNotIn,'> \r\n\t'), (None,Jump,To,-6) ) # NOTE: The htmltag tag table assumes that the input text is given # in upper case letters (see handling). htmltag = ( (None,Is,'<'), # is this a closing tag ? ('closetag',Is,'/',+1), # a coment ? ('comment',Is,'!',+8), (None,Word,'--',+4), ('text',WordStart,'-->',+1), (None,Skip,3), (None,Jump,To,MatchOk), # a SGML-Tag ? ('other',AllNotIn,'>',+1), (None,Is,'>'), (None,Jump,To,MatchOk), # XMP-Tag ? ('tagname',Word,'XMP',+5), (None,Is,'>'), ('text',WordStart,''), (None,Skip,len('')), (None,Jump,To,MatchOk), # get the tag name ('tagname',AllInCharSet,tagname_charset), # look for attributes (None,AllInCharSet,white_charset,+4), (None,Is,'>',+1,MatchOk), ('tagattr',Table,tagattr), (None,Jump,To,-3), (None,Is,'>',+1,MatchOk), # handle incorrect attributes (error,AllNotIn,'> \n\r\t'), (None,Jump,To,-6) ) htmltable = (# HTML-Tag ('htmltag',Table,htmltag,+1,+4), # not HTML, but still using this syntax: error or inside XMP-tag ! (error,Is,'<',+3), (error,AllNotIn,'>',+1), (error,Is,'>'), # normal text ('text',AllNotIn,'<',+1), # end of file ('eof',EOF,Here,-5), ) if __name__ == '__main__': t = TextTools._timer() # read file f = open(sys.argv[1]) text = f.read() try: count = int(sys.argv[2]) except: count = 1000 print 'Starting to parse the file %i times...' % count # parse file t.start() for i in range(count): utext = upper(text) result, taglist, nextindex = tag(utext,htmltable) if not result: print ' parsing failed; aborting' break t = t.stop()[0] mean = t/count print result, nextindex, mean*1000,'msec',nextindex/mean,'bytes/sec.' print print 'Hit return to see the tags...' raw_input() print print_tags(text,taglist) egenix-mx-base-3.2.7/mx/TextTools/Examples/Loop.py0000664000175000017500000000334312133021450021636 0ustar lemburglemburg#!/usr/local/bin/python """ Loop - loop examples (Version 0.1) Copyright (c) 2000, Marc-Andre Lemburg; mailto:mal@lemburg.com Copyright (c) 2000-2013, eGenix.com Software GmbH; mailto:info@egenix.com See the documentation for further information on copyrights, or contact the author. All Rights Reserved. """ import sys # engine + constants from mx.TextTools import * # use Loop to match a certain number of subtags table1 = ((None,Word,'loop '), # match <= 5 stars ('loop',Loop,5,+4), (None,Is,'*',+1,-1), (None,LoopControl,Break), (None,Jump,To,-3), # must end with a dot (None,Is,'.')) # use Loop to tag subsections of a tagging table, i.e. # emulate a Table-match table2 = (('presection',AllNotIn,'(',+1), # match a group of characters enclosed in () ('section',Loop,1,+4), (None,Is,'('), (None,AllNotIn,')'), (None,Is,')',0,-3), # must end with a dot (None,Is,'.')) # read in all chars and then do lots of null loops table3 = (('Loops',Loop,10000,MatchOk), (None,AllNotIn,'',-1,-1)) text = raw_input('loop-example (e.g. "loop *."): ') result, taglist, nextindex = tag(text,table1) print 'result =',result,'-- rest of text:',text[nextindex:] if result:print_tags(text,taglist) text = raw_input('section-example( e.g. "myfun(params)."): ') result, taglist, nextindex = tag(text,table2) print 'result =',result,'-- rest of text:',text[nextindex:] if result:print_tags(text,taglist) text = raw_input('null-loops-example (e.g. "some chars"): ') result, taglist, nextindex = tag(text,table3) print 'result =',result,'-- rest of text:',text[nextindex:] if result:print_tags(text,taglist) egenix-mx-base-3.2.7/mx/TextTools/Examples/Python.py0000664000175000017500000001107012133021450022202 0ustar lemburglemburg#!/usr/local/bin/python """ Python - tag table for Python (Version 0.6) * 0.5->0.6: changed the names of the tags ! fixed bug in match_str() XXX can't handle (lambda ...) and misses not in 'if x is not' Copyright (c) 2000, Marc-Andre Lemburg; mailto:mal@lemburg.com Copyright (c) 2000-2013, eGenix.com Software GmbH; mailto:info@egenix.com See the documentation for further information on copyrights, or contact the author. All Rights Reserved. """ # engine + constants from mx.TextTools import * # helper for correct string matching (with \quotes): def match_str(s,x,len_text,c): while x < len_text and s[x] != c: if s[x] == '\\' and s[x+1] == c: x = x + 2 continue x = x + 1 return x comment = ('comment',Table, ((None,Is,'#'), (None,AllNotIn,'\n\r',MatchOk)) ) whitespace = (None,AllIn,' \t') opt_whitespace = whitespace + (+1,) identifier = ('identifier',Table, ((None,IsIn,alpha+'_'), (None,AllIn,alpha+'_'+number,MatchOk)) ) string = ('str',Table, (# hints (None,IsIn,'\"\''), (None,Skip,-1), # now let's see what we have... (None,Word,'"""',+4), ('string',NoWord,'"""',+1), (None,Word,'"""'), (None,Jump,To,MatchOk), (None,Word,"'''",+4), ('string',NoWord,"'''",+1), (None,Word,"'''"), (None,Jump,To,MatchOk), (None,Is,'"',+4), ('string',CallArg,(match_str,'"'),+1), (None,Word,'"'), (None,Jump,To,MatchOk), (None,Is,"'"), ('string',CallArg,(match_str,"'"),+1), (None,Word,"'"), (None,Jump,To,MatchOk)) ) skw = ["del", "from", "lambda", "return", "and", "elif", "global", "not", "try", "break", "else", "if", "or", "while", "except", "import", "pass", "continue", "finally", "in", "print", "for", "is", "raise"] keywords = word_in_list(skw) # note: '=lambda x:...' and '(lambda x:...' are not recognized, # yet '= lambda x:...' and '( lambda x:...' are (just like in # emacs python-mode) ! keyword = ('kw',Table, ((None,AllIn,' \t\n\r'), # hints (None,IsIn,alpha), (None,Skip,-1), # one in the list keywords ('keyword',Table,keywords,+3), (None,IsIn,': \t\n\r'), (None,Jump,To,MatchOk), # a function declaration ('keyword',Word,'def',+12), whitespace, identifier, (None,Is,'('), # scan parameters ('parameter',AllNotIn,'(),',+2), # are there more ? (None,Is,',',+1,-1), # tuple in param-list ? (None,Is,'(',+1,-2), # maybe we're done (None,Is,')'), # to make sure... (None,Is,',',+1,-4), (None,Is,')',+1), # test for correct syntax (None,IsIn,': \t\n\r'), (None,Jump,To,MatchOk), # a class declaration: ('keyword',Word,'class'), whitespace, identifier, (None,Is,'(',MatchOk), # scan base-classes ('baseclass',AllNotIn,'),',+2), # are there more ? (None,Is,',',+1,-1), # we're done (None,Is,')'), (None,IsIn,': \t\n\r')) ) python_script = (comment+(+1,-0), string+(+1,-1), keyword+(+1,-2), # end-of-file ? (None,EOF,Here,+1,MatchOk), # skip uninteresting chars and restart (None,IsIn,any), (None,AllNotIn,'#\'\"_ \n\r\t',-5,-5) ) if __name__ == '__main__': ### testing import sys # open file text = open(sys.argv[-1]).read() print 'read',len(text),'bytes...' taglist = [] t = TextTools._timer() # parse file t.start() result, taglist, next = tag(text,python_script,0,len(text),taglist) print 'tag:',t.stop(),'sec.' # run against Just's PyFontify if available try: import PyFontify # URL: ftp://starship.python.net/pub/crew/just/PyFontify.py t.start() PyFontify.fontify(text) print 'PyFontify:',t.stop(),'sec.' except ImportError: pass print 'hit return...' raw_input() print result if result: print_tags(text,taglist) egenix-mx-base-3.2.7/mx/TextTools/Examples/RTF.py0000664000175000017500000000435512133021451021365 0ustar lemburglemburg#!/usr/local/bin/python """ RTF - tag a RTF string (Version 0.2) This version does recursion using the TableInList cmd. Copyright (c) 2000, Marc-Andre Lemburg; mailto:mal@lemburg.com Copyright (c) 2000-2013, eGenix.com Software GmbH; mailto:info@egenix.com See the documentation for further information on copyrights, or contact the author. All Rights Reserved. """ import sys # engine + constants from mx.TextTools import * # list of tables (hack to be able to do recursion) tables = [] # indices rtf_index = 0 numeral = (# sign ? (None,Is,'-',+1), (None,AllIn,number) ) # XXX: doesn't know how to handle \bin et al. with embedded {} ctrlword = (# name ('name',AllIn,a2z), # delimiter (None,Is,' ',+1,MatchOk), (None,IsIn,number+'-',MatchOk), (None,Skip,-1), ('param',Table,numeral,+0,MatchOk), (None,Is,' ',+1,MatchOk), (None,Skip,-1) ) hex = set(number+'abcdefABCDEF') notalpha = set(alpha,0) ctrlsymbol = (# hexquote (None,Is,"'",+3), (None,IsInSet,hex), (None,IsInSet,hex,MatchFail,MatchOk), # other (None,IsInSet,notalpha,+1,MatchOk) ) rtf = (# control ? (None,Is,'\\',+3), # word ('word',Table,ctrlword,+1,-1), # symbol ('symbol',Table,ctrlsymbol,+1,-2), # closing group (None,Is,'}',+2), (None,Skip,-1,0,MatchOk), # nested group (None,Is,'{',+4), # recurse ('group',TableInList,(tables,rtf_index)), (None,Is,'}'), (None,Jump,To,-8), # document text ('text', AllNotIn, '\\{}',+1,-9), # EOF ('eof',EOF,Here) ) # add tables to list tables.append(rtf) # note: # TableInList,(tables,rtf_index)) means: use table tables[rtf_index] if __name__ == '__main__': t = TextTools._timer() # read file f = open(sys.argv[1]) text = f.read() # tag text t.start() result, taglist, nextindex = tag(text,rtf) t = t.stop()[0] print result, nextindex, t,'sec ... hit return to see the tags' raw_input() print print_tags(text,taglist) egenix-mx-base-3.2.7/mx/TextTools/Examples/RegExp.py0000664000175000017500000000251212133021452022116 0ustar lemburglemburg#!/usr/local/bin/python """ RegExp - tag a string using regexps (Version 0.1) Copyright (c) 2000, Marc-Andre Lemburg; mailto:mal@lemburg.com Copyright (c) 2000-2013, eGenix.com Software GmbH; mailto:info@egenix.com See the documentation for further information on copyrights, or contact the author. All Rights Reserved. """ # engine + constants from mx.TextTools import * # special matching function def match_regexp(text,position,len_text,regexpr): position = position + max(0,regexpr.match(text,position).end()) return position # create a table in the sense re_1\|re_2\|...\|re_N where # re_i \in regexps def or_regexps(regexps): # regexps = list of compiled regexps l = [] for i in range(len(regexps)): l.append((i,CallArg,(match_regexp,regexps[i]),+1,MatchOk)) l.append((None,Fail,Here)) return tuple(l) if __name__ == '__main__': # create some simple regexps import re regexps = [ 'spam*', 'ham*', 'eggs' ] regexps = map(re.compile, regexps) table = or_regexps(regexps) text = raw_input('type some words: ') result, taglist, nextindex = tag(text,table) if result: print 'subexpr nr.',taglist[0][0],'matched:',taglist[0] else: print 'no match' if nextindex < len(text): print 'rest of unparsed input:',text[nextindex:] egenix-mx-base-3.2.7/mx/TextTools/Examples/Tim.py0000664000175000017500000000504507413120663021472 0ustar lemburglemburg""" Example for dynamic programming with Tag Tables... originated from a posting to comp.lang.python by Tim Peters: [Tim] > [Marc-Andre] > I can stick in any matching function I want, so I might even > let re.match() do some of the work. That should get me pretty close > to their semantics -- ok, I can't do it all the way: Sure you can: just let re.match() do *all* the work! Presto, tables are as powerful as re. > e.g. I currently don't have registers so back-references to already > matched groups will probably not work without reanalysing them. So you have trouble recognizing e.g. the language of the form ... where "tag" can be any (say) arbitrary alphanumeric string? this clause is in that language , this clause isn't , while the whole sentence is -- if you ignore the trailing period . It's even better if you can do computation on backreferences and use the results to guide further parsing. E.g., recognizing Fortran Hollerith strings requires this (a string of digits, followed by "H" or "h", followed by any string of characters whose length is equal to the decimal value of the string of digits; and that's too hard for regexps too). teasingly y'rs - tim """ from mx.TextTools import * tables = [None] def opening_tag(taglist,text,l,r,subtags): # First append an entry to the taglist tagname = text[l+1:r-1] taglist.append(('open '+tagname,l,r,subtags)) # Now build a tag table that searches for tables[0] = ((None,sWordStart,TextSearch('')), ) def closing_tag(taglist,text,l,r,subtags): tagname = text[l+2:r-1] taglist.append(('close '+tagname,l,r,subtags)) TIM = ( # Check starting tag (opening_tag,Table+CallTag, ((None,Is,'<'), (None,AllInSet,alphanumeric_set), (None,Is,'>'), )), # Find closing tag ('text',TableInList,(tables,0)), # For completeness mark the closing tag too (closing_tag,Table+CallTag, ((None,Word,''), )), ) def _test(): while 1: text = raw_input('Enter a string in TIM: ') if not text: break result,taglist,next = tag(text,TIM) if result: print 'The text you gave was recognized as TIM:' print_tags(text,taglist) else: print "Sorry, but the text doesn't qualify as TIM." print 'The search stopped at:' print repr(text[:next]) + '<<<' if __name__ == '__main__': _test() egenix-mx-base-3.2.7/mx/TextTools/Examples/Words.py0000664000175000017500000000315612133021452022027 0ustar lemburglemburg#!/usr/local/bin/python """ Words - tag words in a string (Version 0.2) Copyright (c) 2000, Marc-Andre Lemburg; mailto:mal@lemburg.com Copyright (c) 2000-2013, eGenix.com Software GmbH; mailto:info@egenix.com See the documentation for further information on copyrights, or contact the author. All Rights Reserved. """ from mx.TextTools import * lcwords = [] cwords = [] lower_case_word = (lcwords,AppendToTag+Table, (# first char in word (None,IsIn,a2z+umlaute), # all other chars (if there are any) (None,AllIn,german_alpha,MatchOk)) ) capital_word = (cwords,AppendToTag+Table, (# first char in word (None,IsIn,A2Z+Umlaute), # all other chars (if there are any) (None,AllIn,german_alpha,MatchOk)) ) tag_words = (lower_case_word+(+1,+2), capital_word+(+1,), (None,AllIn,white+newline,+1), (None,AllNotIn,german_alpha+white+newline,+1), # uninteresting (None,EOF,Here,-4)) # EOF if __name__ == '__main__': import sys # read in a file f = open(sys.argv[1]) text = f.read() t = TextTools._timer() t.start() # don't need a taglist, so pass None result, taglist, nextindex = tag(text,tag_words,0,len(text)) t = t.stop() print result, nextindex print 'lower case words:' for n,l,r,d in lcwords: print ' ',text[l:r] print print 'capital letter words:' for n,l,r,d in cwords: print ' ',text[l:r] print print 'found',len(lcwords)+len(cwords),'words in',t[0],'sec (scanned',len(text),'bytes)' egenix-mx-base-3.2.7/mx/TextTools/Examples/__init__.py0000664000175000017500000000000007413120663022462 0ustar lemburglemburgegenix-mx-base-3.2.7/mx/TextTools/Examples/altRTF.py0000664000175000017500000000405712133021453022067 0ustar lemburglemburg#!/usr/local/bin/python """ RTF - tag a RTF string (Version 0.2) [alternative version] This version does recursion using the ThisTable special argument to the Table cmd. Copyright (c) 2000, Marc-Andre Lemburg; mailto:mal@lemburg.com Copyright (c) 2000-2013, eGenix.com Software GmbH; mailto:info@egenix.com See the documentation for further information on copyrights, or contact the author. All Rights Reserved. """ import sys # engine + constants from mx.TextTools import * numeral = (# sign ? (None,Is,'-',+1), (None,AllIn,number) ) # XXX: doesn't know how to handle \bin et al. with embedded {} ctrlword = (# name ('name',AllIn,a2z), # delimiter (None,Is,' ',+1,MatchOk), (None,IsIn,number+'-',MatchOk), (None,Skip,-1), ('param',Table,numeral,+0,MatchOk), (None,Is,' ',+1,MatchOk), (None,Skip,-1) ) hex = set(number+'abcdefABCDEF') notalpha = set(alpha,0) ctrlsymbol = (# hexquote (None,Is,"'",+3), (None,IsInSet,hex), (None,IsInSet,hex), # other (None,IsInSet,notalpha,+1,MatchOk) ) rtf = (# control ? (None,Is,'\\',+3), # word ('word',Table,ctrlword,+1,-1), # symbol ('symbol',Table,ctrlsymbol,+1,-2), # closing group (None,Is,'}',+2), (None,Skip,-1,0,MatchOk), # nested group (None,Is,'{',+4), # recurse ('group',Table,ThisTable), (None,Is,'}'), (None,Jump,To,-8), # document text ('text', AllNotIn, '\\{}',+1,-9), # EOF ('eof',EOF,Here) ) if __name__ == '__main__': t = TextTools._timer() # read file f = open(sys.argv[1]) text = f.read() # tag text t.start() result, taglist, nextindex = tag(text,rtf) t = t.stop()[0] print result, nextindex, t,'sec ... hit return to see the tags' raw_input() print print_tags(text,taglist) egenix-mx-base-3.2.7/mx/TextTools/Examples/mysplit.py0000664000175000017500000000422312133021453022427 0ustar lemburglemburg#!/usr/local/bin/python """ mysplit - an alternative split implementation (Version 0.1) Copyright (c) 2000, Marc-Andre Lemburg; mailto:mal@lemburg.com Copyright (c) 2000-2013, eGenix.com Software GmbH; mailto:info@egenix.com See the documentation for further information on copyrights, or contact the author. All Rights Reserved. """ from mx.TextTools import * mysplit_table = ( # Match all whitespace (None,AllInSet,whitespace_set,+1), # Match and tag all non-whitespace ('text',AllInSet + AppendMatch,nonwhitespace_set,+1), # Loop until EOF (None,EOF,Here,-2), ) def mysplit(text, table=mysplit_table,tag=tag): return tag(text,table)[1] ### import exceptions stoplist = {'abc':1, 'def':1} class KeywordFound(exceptions.StandardError): def __init__(self, taglist): self.taglist = taglist def callable(taglist,text,l,r,subtags): taglist.append(text[l:r]) if stoplist.has_key(text[l:r]): raise KeywordFound(taglist) mysplitex_table = ( # Match all whitespace (None,AllInSet,whitespace_set,+1), # Match and tag all non-whitespace (callable,AllInSet + CallTag,nonwhitespace_set,+1), # Loop until EOF (None,EOF,Here,-2), ) def mysplitex(text, table=mysplitex_table,tag=tag,KeywordFound=KeywordFound): try: return tag(text,table)[1] except KeywordFound,data: return data.taglist ### if __name__ == '__main__': import time tries = tuple(range(100000)) probe = 'abc def ghi jkjkjl asfwer sdfswer sfasgwer svasdwer' print 'mysplit:', t = time.clock() for i in tries: l = mysplit(probe) print time.clock() - t,'sec.' print 'mysplit (calling tag() directly):', t = time.clock() for i in tries: l = tag(probe,mysplit_table)[1] print time.clock() - t,'sec.' print 'setsplit:', t = time.clock() sp = setsplit ws = whitespace_set for i in tries: l = sp(probe,ws) print time.clock() - t,'sec.' print 'str.split:', t = time.clock() for i in tries: l = probe.split() print time.clock() - t,'sec.' egenix-mx-base-3.2.7/mx/TextTools/Examples/pytag.py0000664000175000017500000003626512133021454022066 0ustar lemburglemburg#!/usr/local/bin/python """ pytag - tag strings given a table of things to look for (Version 0.6) * includes the Python version pytag() of the tagging engine * this module includes a debugger for tag tables; to enable it, call pytag.use_debugger(); when the debugger prompts, enter 'h' to see a help screen * it also allows for verbose output while trying to tag a string; call pytag.set_verbosity(1) to see the whole process of tagging XXX: doesn't know anything about the new commands introduced in the C version !!! XXX: NOT SUPPORTED ANYMORE (well, at least for now) Copyright (c) 2000, Marc-Andre Lemburg; mailto:mal@lemburg.com Copyright (c) 2000-2013, eGenix.com Software GmbH; mailto:info@egenix.com See the documentation for further information on copyrights, or contact the author. All Rights Reserved. """ import sys # globals verbose = 0 debugging = 0 breakpoints = [] # some useful constants from mx.TextTools import * import types strtype = types.StringType tabletype = types.TupleType fcttype = types.FunctionType MatchError = 'MatchError' not_set = 0 # # Python version of tag(): # def pytag(text,table,startindex=0,len_text=not_set,taglist=not_set): """Tag text[startindex:len_text] using the Tag Table given in table. - returns a tuple (success, taglist, nextindex) - if taglist == None, then no taglist is created """ global debugging if len_text is not_set: # use all chars in text len_text = len(text) if taglist is not_set: # create a fresh new list taglist = [] if verbose: print '\ntag()-call' i = 0 x = startindex loopcounter = -1 while i < len(table): entry = table[i] lentry = len(entry) if verbose: print 'text[%i]:table[%i]\tentry\t%s'%(x,i,format_entry(table,i)) print '\t\t\tin\t%s'%(repr(text[x:len_text])[:40]) if lentry == 4: tagobj, cmd, match, jne = entry je = +1 elif lentry == 5: tagobj, cmd, match, jne, je = entry else: tagobj, cmd, match = entry jne = 0 je = +1 if debugging: if debugging == 3 and (x not in breakpoints): pass else: debugging,x,i = debugger(text,x,len_text,table,i,loopcounter,taglist) subtags = None flags = cmd & ~0xFF cmd = cmd & 0xFF if cmd == AllIn: if type(match) != strtype: raise TypeError,'match must be a string' start = x while x < len_text and text[x] in match: x = x + 1 if start == x: # not matched if not jne: # match failed return (0,taglist,x) # try an other entry i = i + jne continue else: # matched if verbose: print '\nAllIn matched',repr(tagobj),start,':',x,repr(text[start:x])[:40] elif cmd == AllNotIn: if type(match) != strtype: raise TypeError,'match must be a string' start = x while x < len_text and text[x] not in match: x = x + 1 if start == x: # not matched if not jne: # match failed return (0,taglist,x) # try an other entry i = i + jne continue else: # matched if verbose: print '\nAllNotIn matched',repr(tagobj),start,':',x,repr(text[start:x])[:40] elif cmd == Is: if type(match) != strtype: raise TypeError,'match must be a string' start = x if x < len_text and text[x] == match: x = x + 1 if start == x: # not matched if not jne: # match failed return (0,taglist,x) # try an other entry i = i + jne continue else: # matched if verbose: print '\nIs matched',repr(tagobj),start,':',x,repr(text[start:x])[:40] elif cmd == IsIn: if type(match) != strtype: raise TypeError,'match must be a string' start = x if x < len_text and text[x] in match: x = x + 1 if start == x: # not matched if not jne: # match failed return (0,taglist,x) # try an other entry i = i + jne continue else: # matched if verbose: print '\nIsIn matched',repr(tagobj),start,':',x,repr(text[start:x])[:40] elif cmd == IsNotIn: if type(match) != strtype: raise TypeError,'match must be a string' start = x if x < len_text and text[x] not in match: x = x + 1 if start == x: # not matched if not jne: # match failed return (0,taglist,x) # try an other entry i = i + jne continue else: # matched if verbose: print '\nIsNotIn matched',repr(tagobj),start,':',x,repr(text[start:x])[:40] elif cmd == Word: if type(match) != strtype: raise TypeError,'match must be a string' start = x if text[x:x+len(match)] == match and x < len_text: x = x + len(match) if start == x: # not matched if not jne: # match failed return (0,taglist,x) # try an other entry i = i + jne continue else: # matched if verbose: print '\nWord matched',repr(tagobj),start,':',x,repr(text[start:x])[:40] elif cmd == NoWord: if type(match) != strtype: raise TypeError,'match must be a string' start = x lw = len(match) while x < len_text and text[x:x+lw] != match: x = x + 1 if start == x: # not matched if not jne: # match failed return (0,taglist,x) # try an other entry i = i + jne continue else: # matched if verbose: print '\nNoWord matched',repr(tagobj),start,':',x,repr(text[start:x])[:40] elif cmd == Table: if type(match) != tabletype: raise TypeError,'match must be a table' start = x if debugging == 2: d = debugging debugging = 0 result, subtags, nextindex = tag(text,match,x,len_text,[]) debugging = d else: result, subtags, nextindex = tag(text,match,x,len_text,[]) if not result: if verbose: print '\nTable did not match\n' # not matched if not jne: # match failed return (0,taglist,x) # try an other entry i = i + jne continue else: # matched x = nextindex if verbose: print '\nTable matched',repr(tagobj),start,':',x,repr(text[x:nextindex])[:40] elif cmd == TableInList: start = x tablelist, entry = match if debugging == 2: d = debugging debugging = 0 result, subtags, nextindex = tag(text,tablelist[entry],x,len_text,[]) debugging = d else: result, subtags, nextindex = tag(text,tablelist[entry],x,len_text,[]) if not result: if verbose: print '\nTableInList did not match\n' # not matched if not jne: # match failed return (0,taglist,x) # try an other entry i = i + jne continue else: # matched x = nextindex if verbose: print '\nTableInList matched',repr(tagobj),start,':',x,repr(text[x:nextindex])[:40] elif cmd == Call: start = x x = match(text,start,len_text) if start == x: # not matched if not jne: # match failed return (0,taglist,x) # try an other entry i = i + jne continue else: # matched if verbose: print '\nCall matched',repr(tagobj),start,':',x,repr(text[start:x])[:40] elif cmd == CallArg: start = x try: fct, arg = match except: raise TypeError,'match must be a tuple (fct,arg)' x = fct(text,start,len_text,arg) if start == x: # not matched if not jne: # match failed return (0,taglist,x) # try an other entry i = i + jne continue else: # matched if verbose: print '\nCallArg matched',repr(tagobj),start,':',x,repr(text[start:x])[:40] elif cmd == Loop: start = x # loop-construct if loopcounter > 0: # next loopcounter = loopcounter - 1 elif loopcounter < 0: # init loopcounter = match loopstartpos = x if verbose: print '\nLoop count =',loopcounter,' startpos =',loopstartpos if loopcounter == 0: # end loopcounter = -1 # matched start = loopstartpos if verbose: print '\nLoop matched',repr(tagobj),start,':',x,repr(text[start:x])[:40] je = jne else: # continue loops i = i + je continue elif cmd == LoopControl: loopcounter = match i = i + je continue elif cmd == EOF: # match end-of-string if len_text > x: # not matched if not jne: # match failed return (0,taglist,x) # try an other entry i = i + jne continue else: # matched x = len_text if verbose: print '\nmatched EOF' je = MatchOk elif cmd == Fail: if not jne: # match failed return (0,taglist,x) # try an other entry i = i + jne continue elif cmd == Skip: # skip match bytes (back or forward) in text x = x + match if verbose: if match > 0: y,z = x - match,x else: y,z = x,x - match print '\nSkip ',repr(tagobj),'to',x,'skipped:',repr(text[y:z])[:40] else: raise TypeError,'tag-command unknown: '+repr(cmd) # append to taglist if tagobj is not None: if flags > 0: if flags & CallTag: tagobj(taglist,text,start,x,subtags) elif flags & AppendToTag: tagobj.append((start,x,subtags)) else: raise TypeError,'tag-command-flag unknown: '+repr(flag) else: if taglist is not None: taglist.append((tagobj,start,x,subtags)) if verbose: print 72*'-' # goto next table entry i = i + je # table matched ok return (1,taglist,x) # # Override the C version # TextTools.tag = pytag # # get all the goodies from TextTools # from mx.TextTools import * # # setup functions for the Python version pytag() # def set_verbosity(level = 1): """ set verbosity for tagging: 0=off 1=on """ global verbose verbose = level def use_debugger(bp=[]): """ use the tag table debugger * bp can be a list of preset breakpoints (bytes into text) """ global debugging, breakpoints debugging = 1 breakpoints = bp def debugger(text,x,len_text,table,i,loopvar,taglist): """ the tag table debugger front end * returns (rc,x,i) with rc = 0 ... stop debugging # = 1 ... do one step # = 2 ... step over table # """ global breakpoints, verbose rc = -1 print 75*'_' print '| table[%i]=(%s)'%(i,format_entry(table,i)) print '| text[%i:]=%s'%(x,repr(text[x:len_text])[:55]) print '| h = help; vars: loop counter =',loopvar print 75*'-' while rc < 0: s = raw_input('tag-debugger >>> ') try: if len(s) > 0: c = s[0] else: c = 's' # hitting return is like entering 's' if c == 's': rc = 1 elif c == 'n': rc = 2 elif c == 'w': print 'table[',i,']=(',format_entry(table,i),')' print 'text [',x,']:',repr(text[x:len_text])[:55] print 'vars: loop counter =',loopvar elif c == 'q': rc = 0 elif c == 'r': rc = 3 elif c == 'b': breakpoints.append(int(s[1:])) elif c == 'c': breakpoints.remove(int(s[1:])) elif c == 'l': print 'breakpoints:' for b in breakpoints: print ' ',b,'text =',repr(text[b:])[:60] elif c == 'g': x = int(s[1:]) elif c == 'v': verbose = 1 - verbose elif c == 't': print 'taglist:' print_tags(text,taglist) elif c == 'm': print 'current matching table:' print format_table(table,i) elif c == 'p': y = int(s[1:]) print 'text[',y,']:',repr(text[y:len_text])[:60] else: raise 'help' except 'help': print 'Commands:' print 's = step next entry | return = step' print 'w = where are we | q = run without debugging' print 'b*= add breakpoint * | c*= delete breakpoint *' print 'l = list breakpoints | v = switch verbosity on/off' print 't = show taglist | r = run to next breakpoint/end' print 'n = step over table | p*= print text from byte *' print 'g*= goto position * | m = show current matching table' print print '*...these take an argument, e.g. b1200 or p 1200' except: print 'Internal Debugger Error -- last request not processed !' if verbose: print 72*'_' return rc,x,i egenix-mx-base-3.2.7/mx/TextTools/mxTextTools/0000755000175000017500000000000012251446113021112 5ustar lemburglemburgegenix-mx-base-3.2.7/mx/TextTools/mxTextTools/COPYRIGHT0000664000175000017500000000176211552064177022426 0ustar lemburglemburg --------------------------------------------------------------------- COPYRIGHT NOTICE --------------------------------------------------------------------- Copyright (c) 1997-2000, IKDS Marc-Andre Lemburg; mailto:mal@lemburg.com Copyright (c) 2000-2011, eGenix.com Software GmbH; mailto:info@egenix.com All Rights Reserved. This software is protected by copyright and other intellectual property laws and by international treaties. It may only be used under the conditions and terms of the eGenix.com Public License Agreement. You should have received a copy of the eGenix.com Public License Agreement with this software (usually in the file LICENSE located in the package's or software's main directory). Please write to licenses@egenix.com to obtain a copy in case you should not have received a copy. egenix-mx-base-3.2.7/mx/TextTools/mxTextTools/LICENSE0000664000175000017500000001075307620177404022137 0ustar lemburglemburg________________________________________________________________________ EGENIX.COM PUBLIC LICENSE AGREEMENT VERSION 1.1.0 ________________________________________________________________________ 1. Introduction This "License Agreement" is between eGenix.com Software, Skills and Services GmbH ("eGenix.com"), having an office at Pastor-Loeh-Str. 48, D-40764 Langenfeld, Germany, and the Individual or Organization ("Licensee") accessing and otherwise using this software in source or binary form and its associated documentation ("the Software"). 2. License Subject to the terms and conditions of this eGenix.com Public License Agreement, eGenix.com hereby grants Licensee a non-exclusive, royalty-free, world-wide license to reproduce, analyze, test, perform and/or display publicly, prepare derivative works, distribute, and otherwise use the Software alone or in any derivative version, provided, however, that the eGenix.com Public License Agreement is retained in the Software, or in any derivative version of the Software prepared by Licensee. 3. NO WARRANTY eGenix.com is making the Software available to Licensee on an "AS IS" basis. SUBJECT TO ANY STATUTORY WARRANTIES WHICH CAN NOT BE EXCLUDED, EGENIX.COM MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, EGENIX.COM MAKES NO AND DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF THE SOFTWARE WILL NOT INFRINGE ANY THIRD PARTY RIGHTS. 4. LIMITATION OF LIABILITY EGENIX.COM SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF THE SOFTWARE FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS (INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF BUSINESS PROFITS, BUSINESS INTERRUPTION, LOSS OF BUSINESS INFORMATION, OR OTHER PECUNIARY LOSS) AS A RESULT OF USING, MODIFYING OR DISTRIBUTING THE SOFTWARE, OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO THE ABOVE EXCLUSION OR LIMITATION MAY NOT APPLY TO LICENSEE. 5. Termination This License Agreement will automatically terminate upon a material breach of its terms and conditions. 6. Third Party Rights Any software or documentation in source or binary form provided along with the Software that is associated with a separate license agreement is licensed to Licensee under the terms of that license agreement. This License Agreement does not apply to those portions of the Software. Copies of the third party licenses are included in the Software Distribution. 7. General Nothing in this License Agreement affects any statutory rights of consumers that cannot be waived or limited by contract. Nothing in this License Agreement shall be deemed to create any relationship of agency, partnership, or joint venture between eGenix.com and Licensee. If any provision of this License Agreement shall be unlawful, void, or for any reason unenforceable, such provision shall be modified to the extent necessary to render it enforceable without losing its intent, or, if no such modification is possible, be severed from this License Agreement and shall not affect the validity and enforceability of the remaining provisions of this License Agreement. This License Agreement shall be governed by and interpreted in all respects by the law of Germany, excluding conflict of law provisions. It shall not be governed by the United Nations Convention on Contracts for International Sale of Goods. This License Agreement does not grant permission to use eGenix.com trademarks or trade names in a trademark sense to endorse or promote products or services of Licensee, or any third party. The controlling language of this License Agreement is English. If Licensee has received a translation into another language, it has been provided for Licensee's convenience only. 8. Agreement By downloading, copying, installing or otherwise using the Software, Licensee agrees to be bound by the terms and conditions of this License Agreement. For question regarding this License Agreement, please write to: eGenix.com Software, Skills and Services GmbH Pastor-Loeh-Str. 48 D-40764 Langenfeld Germany egenix-mx-base-3.2.7/mx/TextTools/mxTextTools/Makefile.pre.in0000664000175000017500000002445111136427173023762 0ustar lemburglemburg# Universal Unix Makefile for Python extensions # ============================================= # Short Instructions # ------------------ # 1. Build and install Python (1.5 or newer). # 2. "make -f Makefile.pre.in boot" # 3. "make" # You should now have a shared library. # Long Instructions # ----------------- # Build *and install* the basic Python 1.5 distribution. See the # Python README for instructions. (This version of Makefile.pre.in # only withs with Python 1.5, alpha 3 or newer.) # Create a file Setup.in for your extension. This file follows the # format of the Modules/Setup.dist file; see the instructions there. # For a simple module called "spam" on file "spammodule.c", it can # contain a single line: # spam spammodule.c # You can build as many modules as you want in the same directory -- # just have a separate line for each of them in the Setup.in file. # If you want to build your extension as a shared library, insert a # line containing just the string # *shared* # at the top of your Setup.in file. # Note that the build process copies Setup.in to Setup, and then works # with Setup. It doesn't overwrite Setup when Setup.in is changed, so # while you're in the process of debugging your Setup.in file, you may # want to edit Setup instead, and copy it back to Setup.in later. # (All this is done so you can distribute your extension easily and # someone else can select the modules they actually want to build by # commenting out lines in the Setup file, without editing the # original. Editing Setup is also used to specify nonstandard # locations for include or library files.) # Copy this file (Misc/Makefile.pre.in) to the directory containing # your extension. # Run "make -f Makefile.pre.in boot". This creates Makefile # (producing Makefile.pre and sedscript as intermediate files) and # config.c, incorporating the values for sys.prefix, sys.exec_prefix # and sys.version from the installed Python binary. For this to work, # the python binary must be on your path. If this fails, try # make -f Makefile.pre.in Makefile VERSION=1.5 installdir= # where is the prefix used to install Python for installdir # (and possibly similar for exec_installdir=). # Note: "make boot" implies "make clobber" -- it assumes that when you # bootstrap you may have changed platforms so it removes all previous # output files. # If you are building your extension as a shared library (your # Setup.in file starts with *shared*), run "make" or "make sharedmods" # to build the shared library files. If you are building a statically # linked Python binary (the only solution of your platform doesn't # support shared libraries, and sometimes handy if you want to # distribute or install the resulting Python binary), run "make # python". # Note: Each time you edit Makefile.pre.in or Setup, you must run # "make Makefile" before running "make". # Hint: if you want to use VPATH, you can start in an empty # subdirectory and say (e.g.): # make -f ../Makefile.pre.in boot srcdir=.. VPATH=.. # === Bootstrap variables (edited through "make boot") === # The prefix used by "make inclinstall libainstall" of core python installdir= /usr/local # The exec_prefix used by the same exec_installdir=$(installdir) # Source directory and VPATH in case you want to use VPATH. # (You will have to edit these two lines yourself -- there is no # automatic support as the Makefile is not generated by # config.status.) srcdir= . VPATH= . # === Variables that you may want to customize (rarely) === # (Static) build target TARGET= python # Installed python binary (used only by boot target) PYTHON= python # Add more -I and -D options here CFLAGS= $(OPT) -I$(INCLUDEPY) -I$(EXECINCLUDEPY) $(DEFS) # These two variables can be set in Setup to merge extensions. # See example[23]. BASELIB= BASESETUP= # === Variables set by makesetup === MODOBJS= _MODOBJS_ MODLIBS= _MODLIBS_ # === Definitions added by makesetup === # === Variables from configure (through sedscript) === VERSION= @VERSION@ CC= @CC@ CXX= @CXX@ MAINCC= @MAINCC@ LINKCC= @LINKCC@ SGI_ABI= @SGI_ABI@ OPT= @OPT@ CPPFLAGS= @CPPFLAGS@ LDFLAGS= @LDFLAGS@ LDLAST= @LDLAST@ DEFS= LIBS= @LIBS@ LIBM= @LIBM@ LIBC= @LIBC@ RANLIB= @RANLIB@ MACHDEP= @MACHDEP@ SO= @SO@ LDSHARED= @LDSHARED@ BLDSHARED= @BLDSHARED@ CCSHARED= @CCSHARED@ LINKFORSHARED= @LINKFORSHARED@ CXX= @CXX@ # Install prefix for architecture-independent files prefix= /usr/local # Install prefix for architecture-dependent files exec_prefix= $(prefix) # Uncomment the following two lines for AIX #LINKCC= $(LIBPL)/makexp_aix $(LIBPL)/python.exp "" $(LIBRARY); $(PURIFY) $(CC) #LDSHARED= $(LIBPL)/ld_so_aix $(CC) -bI:$(LIBPL)/python.exp # === Fixed definitions === # Shell used by make (some versions default to the login shell, which is bad) SHELL= /bin/sh # Expanded directories BINDIR= $(exec_installdir)/bin LIBDIR= $(exec_prefix)/lib MANDIR= $(installdir)/man INCLUDEDIR= $(installdir)/include SCRIPTDIR= $(prefix)/lib # Detailed destination directories BINLIBDEST= $(LIBDIR)/python$(VERSION) LIBDEST= $(SCRIPTDIR)/python$(VERSION) INCLUDEPY= $(INCLUDEDIR)/python$(VERSION) EXECINCLUDEPY= $(exec_installdir)/include/python$(VERSION) LIBP= $(exec_installdir)/lib/python$(VERSION) DESTSHARED= $(BINLIBDEST)/site-packages LIBPL= $(LIBP)/config PYTHONLIBS= $(LIBPL)/libpython$(VERSION).a MAKESETUP= $(LIBPL)/makesetup MAKEFILE= $(LIBPL)/Makefile CONFIGC= $(LIBPL)/config.c CONFIGCIN= $(LIBPL)/config.c.in SETUP= $(LIBPL)/Setup.config $(LIBPL)/Setup.local $(LIBPL)/Setup SYSLIBS= $(LIBM) $(LIBC) ADDOBJS= $(LIBPL)/python.o config.o # Portable install script (configure doesn't always guess right) INSTALL= $(LIBPL)/install-sh -c # Shared libraries must be installed with executable mode on some systems; # rather than figuring out exactly which, we always give them executable mode. # Also, making them read-only seems to be a good idea... INSTALL_SHARED= ${INSTALL} -m 555 # === Fixed rules === # Default target. This builds shared libraries only default: sharedmods # Build everything all: static sharedmods # Build shared libraries from our extension modules sharedmods: $(SHAREDMODS) # Build a static Python binary containing our extension modules static: $(TARGET) $(TARGET): $(ADDOBJS) lib.a $(PYTHONLIBS) Makefile $(BASELIB) $(LINKCC) $(LDFLAGS) $(LINKFORSHARED) \ $(ADDOBJS) lib.a $(PYTHONLIBS) \ $(LINKPATH) $(BASELIB) $(MODLIBS) $(LIBS) $(SYSLIBS) \ -o $(TARGET) $(LDLAST) install: sharedmods if test ! -d $(DESTSHARED) ; then \ mkdir $(DESTSHARED) ; else true ; fi -for i in X $(SHAREDMODS); do \ if test $$i != X; \ then $(INSTALL_SHARED) $$i $(DESTSHARED)/$$i; \ fi; \ done # Build the library containing our extension modules lib.a: $(MODOBJS) -rm -f lib.a ar cr lib.a $(MODOBJS) -$(RANLIB) lib.a # This runs makesetup *twice* to use the BASESETUP definition from Setup config.c Makefile: Makefile.pre Setup $(BASESETUP) $(MAKESETUP) $(MAKESETUP) \ -m Makefile.pre -c $(CONFIGCIN) Setup -n $(BASESETUP) $(SETUP) $(MAKE) -f Makefile do-it-again # Internal target to run makesetup for the second time do-it-again: $(MAKESETUP) \ -m Makefile.pre -c $(CONFIGCIN) Setup -n $(BASESETUP) $(SETUP) # Make config.o from the config.c created by makesetup config.o: config.c $(CC) $(CFLAGS) -c config.c # Setup is copied from Setup.in *only* if it doesn't yet exist Setup: cp $(srcdir)/Setup.in Setup # Make the intermediate Makefile.pre from Makefile.pre.in Makefile.pre: Makefile.pre.in sedscript sed -f sedscript $(srcdir)/Makefile.pre.in >Makefile.pre # Shortcuts to make the sed arguments on one line P=prefix E=exec_prefix H=Generated automatically from Makefile.pre.in by sedscript. L=LINKFORSHARED # Make the sed script used to create Makefile.pre from Makefile.pre.in sedscript: $(MAKEFILE) sed -n \ -e '1s/.*/1i\\/p' \ -e '2s%.*%# $H%p' \ -e '/^VERSION=/s/^VERSION=[ ]*\(.*\)/s%@VERSION[@]%\1%/p' \ -e '/^CC=/s/^CC=[ ]*\(.*\)/s%@CC[@]%\1%/p' \ -e '/^CXX=/s/^CXX=[ ]*\(.*\)/s%@CXX[@]%\1%/p' \ -e '/^DEFS=/s/^DEFS=[ ]*\(.*\)/s%@DEFS[@]%\1%/p' \ -e '/^MAINCC=/s/^MAINCC=[ ]*\(.*\)/s%@MAINCC[@]%\1%/p' \ -e '/^LINKCC=/s/^LINKCC=[ ]*\(.*\)/s%@LINKCC[@]%\1%/p' \ -e '/^OPT=/s/^OPT=[ ]*\(.*\)/s%@OPT[@]%\1%/p' \ -e '/^CPPFLAGS=/s/^CPPFLAGS=[ ]*\(.*\)/s%@CPPFLAGS[@]%\1%/p' \ -e '/^LDFLAGS=/s/^LDFLAGS=[ ]*\(.*\)/s%@LDFLAGS[@]%\1%/p' \ -e '/^LDLAST=/s/^LDLAST=[ ]*\(.*\)/s%@LDLAST[@]%\1%/p' \ -e '/^DEFS=/s/^DEFS=[ ]*\(.*\)/s%@DEFS[@]%\1%/p' \ -e '/^LIBS=/s/^LIBS=[ ]*\(.*\)/s%@LIBS[@]%\1%/p' \ -e '/^LIBM=/s/^LIBM=[ ]*\(.*\)/s%@LIBM[@]%\1%/p' \ -e '/^LIBC=/s/^LIBC=[ ]*\(.*\)/s%@LIBC[@]%\1%/p' \ -e '/^RANLIB=/s/^RANLIB=[ ]*\(.*\)/s%@RANLIB[@]%\1%/p' \ -e '/^MACHDEP=/s/^MACHDEP=[ ]*\(.*\)/s%@MACHDEP[@]%\1%/p' \ -e '/^SO=/s/^SO=[ ]*\(.*\)/s%@SO[@]%\1%/p' \ -e '/^LDSHARED=/s/^LDSHARED=[ ]*\(.*\)/s%@LDSHARED[@]%\1%/p' \ -e '/^BLDSHARED=/s/^BLDSHARED=[ ]*\(.*\)/s%@BLDSHARED[@]%\1%/p' \ -e '/^CCSHARED=/s/^CCSHARED=[ ]*\(.*\)/s%@CCSHARED[@]%\1%/p' \ -e '/^SGI_ABI=/s/^SGI_ABI=[ ]*\(.*\)/s%@SGI_ABI[@]%\1%/p' \ -e '/^$L=/s/^$L=[ ]*\(.*\)/s%@$L[@]%\1%/p' \ -e '/^$P=/s/^$P=\(.*\)/s%^$P=.*%$P=\1%/p' \ -e '/^$E=/s/^$E=\(.*\)/s%^$E=.*%$E=\1%/p' \ $(MAKEFILE) >sedscript echo "/^#@SET_CCC@/d" >>sedscript echo "/^installdir=/s%=.*%= $(installdir)%" >>sedscript echo "/^exec_installdir=/s%=.*%=$(exec_installdir)%" >>sedscript echo "/^srcdir=/s%=.*%= $(srcdir)%" >>sedscript echo "/^VPATH=/s%=.*%= $(VPATH)%" >>sedscript echo "/^LINKPATH=/s%=.*%= $(LINKPATH)%" >>sedscript echo "/^BASELIB=/s%=.*%= $(BASELIB)%" >>sedscript echo "/^BASESETUP=/s%=.*%= $(BASESETUP)%" >>sedscript # Bootstrap target boot: clobber VERSION=`$(PYTHON) -c "import sys; print sys.version[:3]"`; \ installdir=`$(PYTHON) -c "import sys; print sys.prefix"`; \ exec_installdir=`$(PYTHON) -c "import sys; print sys.exec_prefix"`; \ $(MAKE) -f $(srcdir)/Makefile.pre.in VPATH=$(VPATH) srcdir=$(srcdir) \ VERSION=$$VERSION \ installdir=$$installdir \ exec_installdir=$$exec_installdir \ Makefile # Handy target to remove intermediate files and backups clean: -rm -f *.o *~ # Handy target to remove everything that is easily regenerated clobber: clean -rm -f *.a tags TAGS config.c Makefile.pre $(TARGET) sedscript -rm -f *.so *.sl so_locations # Handy target to remove everything you don't want to distribute distclean: clobber -rm -f Makefile Setup egenix-mx-base-3.2.7/mx/TextTools/mxTextTools/Setup.in0000664000175000017500000000075511564476736022577 0ustar lemburglemburg# Build extensions shared: *shared* # # Text processing tools mxTextTools \ # # Compile all parts of the tools for mxTextTools -DMX_BUILDING_MXTEXTTOOLS \ # # To enable debugging support uncomment the next line (will print information # to various .log files if Python is run with -d option): # -DMAL_DEBUG_WITH_PYTHON \ # # To enable the Fast Search Algorithm, also add the next line: # -DMXFASTSEARCH private/mxfse.c \ # Always leave this line uncommented: mxTextTools.c mxte.c mxbmse.c egenix-mx-base-3.2.7/mx/TextTools/mxTextTools/__init__.py0000664000175000017500000000123512133021456023224 0ustar lemburglemburg""" mxTextTools - A tools package for fast text processing. Copyright (c) 2000, Marc-Andre Lemburg; mailto:mal@lemburg.com Copyright (c) 2000-2013, eGenix.com Software GmbH; mailto:info@egenix.com See the documentation for further information on copyrights, or contact the author. All Rights Reserved. """ from mxTextTools import * from mxTextTools import __version__ # To maintain backward compatibility: BMS = TextSearch BMSType = TextSearchType try: TextSearch('',None,FASTSEARCH) except: FS = BMS FSType = BMS else: def FS(match, translate=None): return TextSearch(match, translate, FASTSEARCH) FSType = TextSearchType egenix-mx-base-3.2.7/mx/TextTools/mxTextTools/ld_so_aix0000775000175000017500000001351507057236756023032 0ustar lemburglemburg#!/bin/sh # # ======================================================================== # FILE: ld_so_aix # TYPE: executable, uses makexp_aix # SYSTEM: AIX # # DESCRIPTION: Creates a shareable .o from a set of pre-compiled # (unshared) .o files # # USAGE: ld_so_aix [CC] [arguments] # # ARGUMENTS: Same as for "ld". The following arguments are processed # or supplied by this script (those marked with an asterisk # can be overriden from command line): # # Argument Default value # (*) -o [OutputFileName] -o shr.o # (*) -e [EntryPointLabel] -e init[OutputBaseName] # (*) -bE:[ExportFile] -bE:[OutputBaseName].exp # (*) -bI:[ImportFile] -bI:./python.exp # -bM:[ModuleType] -bM:SRE # -bhalt:[Number] -bhalt:4 # -T[Number] -T512 # -H[Number] -H512 # -lm # # The compiler specific ("-lc" or "-lc_r", "-lpthreads",...) # arguments will be automatically passed to "ld" according # to the CC command provided as a first argument to this # script. Usually, the same CC command was used to produce # the pre-compiled .o file(s). # # NOTES: 1. Since "ld_so_aix" was originally written for building # shared modules for the Python interpreter, the -e and # -bI default values match Python's conventions. In # Python, the entry point for a shared module is based # on the module's name (e.g., the "mathmodule" will # expect an entry point of "initmath"). # 2. The script accepts multiple .o or .a input files and # creates a single (shared) output file. The export list # that is created is based on the output file's basename # with the suffix ".exp". # 3. The resulting shared object file is left in the # current directory. # 4. Uncommenting the "echo" lines gives detailed output # about the commands executed in the script. # # # HISTORY: Oct-1996 -- Support added for multiple .o files -- # -- and optional arguments processing. -- # Chris Myers (myers@tc.cornell.edu), Keith Kwok # (kkwok@tc.cornell.edu) and Vladimir Marangozov # # Aug-6-1996 -- Take care of the compiler specific -- # -- args by leaving CC to invoke "ld". -- # Vladimir Marangozov # # Jul-1-1996 -- Make sure to use /usr/ccs/bin/ld -- # -- Use makexp_aix for the export list. -- # Vladimir Marangozov (Vladimir.Marangozov@imag.fr) # # Manus Hand (mhand@csn.net) -- Initial code -- 6/24/96 # ======================================================================== # usage="Usage: ld_so_aix [CC command] [ld arguments]" if test ! -n "$*"; then echo $usage; exit 2 fi makexp=`dirname $0`/makexp_aix # Check for existence of compiler. CC=$1; shift whichcc=`which $CC` if test ! -x "$whichcc"; then echo "ld_so_aix: Compiler '$CC' not found; exiting." exit 2 fi if test ! -n "$*"; then echo $usage; exit 2 fi # Default import file for Python # Can be overriden by providing a -bI: argument. impfile="./python.exp" # Parse arguments while test -n "$1" do case "$1" in -e | -Wl,-e) if test -z "$2"; then echo "ld_so_aix: The -e flag needs a parameter; exiting."; exit 2 else shift; entry=$1 fi ;; -e* | -Wl,-e*) entry=`echo $1 | sed -e "s/-Wl,//" -e "s/-e//"` ;; -o) if test -z "$2"; then echo "ld_so_aix: The -o flag needs a parameter; exiting."; exit 2 else shift; objfile=$1 fi ;; -o*) objfile=`echo $1 | sed "s/-o//"` ;; -bI:* | -Wl,-bI:*) impfile=`echo $1 | sed -e "s/-Wl,//" -e "s/-bI://"` ;; -bE:* | -Wl,-bE:*) expfile=`echo $1 | sed -e "s/-Wl,//" -e "s/-bE://"` ;; *.o | *.a) objs="$objs $1" args="$args $1" ;; -bM:* | -Wl,-bM:* | -H* | -Wl,-H* | -T* | -Wl,-T* | -lm) ;; *) args="$args $1" ;; esac shift done if test -z "$objs"; then echo "ld_so_aix: No input files; exiting." exit 2 elif test ! -r "$impfile"; then echo "ld_so_aix: Import file '$impfile' not found or not readable; exiting." exit 2 fi # If -o wasn't specified, assume "-o shr.o" if test -z "$objfile"; then objfile=shr.o fi filename=`basename $objfile | sed "s/\.[^.]*$//"` # If -bE: wasn't specified, assume "-bE:$filename.exp" if test -z "$expfile"; then expfile="$filename.exp" fi # Default entry symbol for Python modules = init[modulename] # Can be overriden by providing a -e argument. if test -z "$entry"; then entry=init`echo $filename | sed "s/module.*//"` fi #echo "ld_so_aix: Debug info section" #echo " -> output file : $objfile" #echo " -> import file : $impfile" #echo " -> export file : $expfile" #echo " -> entry point : $entry" #echo " -> object files: $objs" #echo " -> CC arguments: $args" CCOPT="-Wl,-e$entry -Wl,-bE:$expfile -Wl,-bI:$impfile -Wl,-bhalt:4" CCOPT="$CCOPT -Wl,-bM:SRE -Wl,-T512 -Wl,-H512 -lm -o $objfile" CCARGS="$args" # Export list generation. #echo $makexp $expfile "$objfile" $objs $makexp $expfile "$objfile" $objs # Perform the link. #echo $CC $CCOPT $CCARGS $CC $CCOPT $CCARGS # Delete the module's export list file. # Comment this line if you need it. rm -f $expfile egenix-mx-base-3.2.7/mx/TextTools/mxTextTools/makexp_aix0000775000175000017500000000603507057236752023212 0ustar lemburglemburg#!/bin/sh # # =========================================================================== # FILE: makexp_aix # TYPE: standalone executable # SYSTEM: AIX 3.2.5 and AIX 4 # # DESCRIPTION: This script creates an export list of ALL global symbols # from a list of object or archive files. # # USAGE: makexp_aix "" ... # # where: # is the target export list filename. # is the path/file string to be appended # after the "#!" symbols in the first line of the # export file. Passing "" means deferred resolution. # is an object (.o) or an archive file (.a). # # HISTORY: # 3-Apr-1998 -- remove C++ entries of the form Class::method # Vladimir Marangozov # # 1-Jul-1996 -- added header information # Vladimir Marangozov # # 28-Jun-1996 -- initial code # Vladimir Marangozov (Vladimir.Marangozov@imag.fr) # ========================================================================== # Variables expFileName=$1 toAppendStr=$2 shift; shift; inputFiles=$* automsg="Generated automatically by makexp_aix" notemsg="NOTE: lists _all_ global symbols defined in the above file(s)." curwdir=`pwd` # Create the export file and setup the header info echo "#!"$toAppendStr > $expFileName echo "*" >> $expFileName echo "* $automsg (`date -u`)" >> $expFileName echo "*" >> $expFileName echo "* Base Directory: $curwdir" >> $expFileName echo "* Input File(s) : $inputFiles" >> $expFileName echo "*" >> $expFileName echo "* $notemsg" >> $expFileName echo "*" >> $expFileName # Extract the symbol list using 'nm' which produces quite # different output under AIX 4 than under AIX 3.2.5. # The following handles both versions by using a common flagset. # Here are some hidden tricks: # 1. Use /usr/ccs/bin/nm. Relevant to AIX 3.2.5 which has # another version under /usr/ucb/bin/nm. # 2. Use the -B flag to have a standard BSD representation # of the symbol list on both AIX 3.2.5 and AIX 4. The "-B" # flag is missing in the AIX 3.2.5 online usage help of 'nm'. # 3. Use the -x flag to have a hex representation of the symbol # values. This fills the leading whitespaces on AIX 4, # thus simplifying the sed statement. # 4. Eliminate all entries except those with either "B", "D" # or "T" key letters. We are interested only in the global # (extern) BSS, DATA and TEXT symbols. With the same statement # we eliminate object member lines relevant to AIX 4. # 5. Eliminate entries containing a dot. We can have a dot only # as a symbol prefix, but such symbols are undefined externs. # 6. Eliminate everything including the key letter, so that we're # left with just the symbol name. # 7. Eliminate all entries containing two colons, like Class::method # /usr/ccs/bin/nm -Bex $inputFiles \ | sed -e '/ [^BDT] /d' -e '/\./d' -e 's/.* [BDT] //' -e '/::/d' \ | sort | uniq >> $expFileName egenix-mx-base-3.2.7/mx/TextTools/mxTextTools/mx.h0000664000175000017500000005570412133300665021724 0ustar lemburglemburg#ifndef MX_H #define MX_H /* mx -- Marc's eXtension modules for Python: basic macros This file is only meant to be included by the extension modules. DO NOT include it in the extension module's header file, since it will definitely cause troubles then. To enable debugging ceratin things, define one of these before including this file: MAL_REF_DEBUG -- debug reference counts (Py_MY_xxx) [this file] MAL_DEBUG -- enable debug output (DPRINTF) [mxstdlib.h] MAL_MEM_DEBUG -- enable malloc output (new,cnew,free,...) [mxstdlib.h] Copyright (c) 2000, Marc-Andre Lemburg; mailto:mal@lemburg.com Copyright (c) 2000-2013, eGenix.com Software GmbH; mailto:info@egenix.com See the documentation for further copyright information or contact the author. XXX Most of these macros and defines should really use an mx prefix to avoid collisions with native Python macros and defines. So far this has not happened, which is why this hasn't been implemented yet. */ /* --- Platform or compiler specific tweaks ------------------------------- */ /* Add some platform specific symbols to enable work-arounds for the static forward declaration of type definitions; note that the GNU C compiler does not have this problem. Many thanks to all who have contributed to this list. */ #ifndef BAD_STATIC_FORWARD # if (!defined(__GNUC__)) # if (defined(NeXT) || defined(sgi) || defined(_AIX) || (defined(__osf__) && defined(__DECC)) || defined(TrueCompaq64) || defined(__VMS)) # define BAD_STATIC_FORWARD # endif # endif #endif /* Some more tweaks for various platforms. */ /* VMS needs this define. Thanks to Jean-Franois PIRONNE */ #if defined(__VMS) # define __SC__ #endif /* xlC on AIX doesn't like the Python work-around for static forwards in ANSI mode (default), so we switch on extended mode. Thanks to Albert Chin-A-Young */ #if defined(__xlC__) # pragma langlvl extended #endif /* --- Standard header files ---------------------------------------------- */ /* Include the generic mx header file */ #include "mxh.h" /* Include nearly all Python symbols & definitions */ #include "Python.h" /* Include other standard stuff */ #include "mxstdlib.h" /* Include Python backward compatibility stuff */ #include "mxpyapi.h" /* --- Compiler support --------------------------------------------------- */ /* Support for compilers which don't like static forward declarations of arrays; Python 2.3 removed the support for BAD_STATIC_FORWARD which is why we now use our own little helpers here. */ #undef staticforward #undef statichere #ifdef BAD_STATIC_FORWARD # define staticforward extern # define statichere static #else # define staticforward static # define statichere static #endif /* --- Declare macros ----------------------------------------------------- */ #define Py_NONE (Py_INCREF(Py_None),Py_None) #ifdef MAL_REF_DEBUG # define printref(x) printf("* refcount for "#x" = %i\n",(long) x->ob_refcnt); #else # define printref(x) #endif /* --- Error handling ----------------------------------------------------- */ #define Py_Do(x) {if (!(x)) goto onError;} #define Py_ReturnOnError(errortype,errorstr) {PyErr_SetString(errortype,errorstr);return NULL;} #define Py_Assert(x,errortype,errorstr) {if (!(x)) {PyErr_SetString(errortype,errorstr);goto onError;}} #define Py_AssertWithArg(x,errortype,errorstr,a1) {if (!(x)) {PyErr_Format(errortype,errorstr,a1);goto onError;}} #define Py_AssertWith2Args(x,errortype,errorstr,a1,a2) {if (!(x)) {PyErr_Format(errortype,errorstr,a1,a2);goto onError;}} #define Py_AssertWith3Args(x,errortype,errorstr,a1,a2,a3) {if (!(x)) {PyErr_Format(errortype,errorstr,a1,a2,a3);goto onError;}} #define Py_Error(errortype,errorstr) {PyErr_SetString(errortype,errorstr);goto onError;} #define Py_ErrorWithArg(errortype,errorstr,a1) {PyErr_Format(errortype,errorstr,a1);goto onError;} #define Py_ErrorWith2Args(errortype,errorstr,a1,a2) {PyErr_Format(errortype,errorstr,a1,a2);goto onError;} #define Py_ErrorWith3Args(errortype,errorstr,a1,a2,a3) {PyErr_Format(errortype,errorstr,a1,a2,a3);goto onError;} /* --- Reference counting ------------------------------------------------- */ #ifdef MAL_REF_DEBUG static void mx_Py_INCREF(PyObject *v, const char *name, const char *filename, int lineno) { if (!Py_DebugFlag) { Py_XINCREF(v); return; } if (!v) mxDebugPrintf("[%s:%5i] Py_XINCREF( %-8s == NULL );\n", filename,lineno,name); else { Py_INCREF(v);; mxDebugPrintf("[%s:%5i] Py_XINCREF( %-8s at 0x%lx [%s]); " "new refcount = %i\n", filename,lineno,name,(long)v,v->ob_type->tp_name, v->ob_refcnt); } } static void mx_Py_DECREF(PyObject *v, const char *name, const char *filename, int lineno) { if (!Py_DebugFlag) { Py_XDECREF(v); return; } if (!v) mxDebugPrintf("[%s:%5i] Py_XDECREF( %-8s == NULL );\n", filename,lineno,name); else { int refcnt = v->ob_refcnt; Py_DECREF(v); if (refcnt <= 1) mxDebugPrintf("[%s:%5i] Py_XDECREF( %-8s at 0x%lx [%s]); " "object deleted\n", filename,lineno,name,(long)v,v->ob_type->tp_name); else mxDebugPrintf("[%s:%5i] Py_XDECREF( %-8s at 0x%lx [%s]); " "new refcount = %i\n", filename,lineno,name,(long)v,v->ob_type->tp_name, v->ob_refcnt); } } static void mx_Py_PRINT_REFCOUNT(PyObject *v, const char *name, const char *filename, int lineno) { if (!Py_DebugFlag) return; if (!v) mxDebugPrintf("[%s:%5i] Py_PRINT_REFCOUNT( %-8s == NULL );\n", filename,lineno,name); else { mxDebugPrintf("[%s:%5i] Py_PRINT_REFCOUNT( %-8s at 0x%lx [%s]) = %i;\n", filename,lineno,name,(long)v,v->ob_type->tp_name, v->ob_refcnt); } } # undef Py_INCREF # define Py_INCREF(x) mx_Py_INCREF((PyObject *)x,#x,__FILE__,__LINE__) # undef Py_DECREF # define Py_DECREF(x) mx_Py_DECREF((PyObject *)x,#x,__FILE__,__LINE__) # undef Py_XINCREF # define Py_XINCREF(x) mx_Py_INCREF((PyObject *)x,#x,__FILE__,__LINE__) # undef Py_XDECREF # define Py_XDECREF(x) mx_Py_DECREF((PyObject *)x,#x,__FILE__,__LINE__) # undef Py_CLEAR # define Py_CLEAR(x) {Py_XDECREF(x); x=0;} # define Py_DELETE(x) {if (x->ob_refcnt > 1) mxDebugPrintf("[%s:%5i] Py_DELETE( "#x" ) WARNING: Refcount = %i > 1\n",__FILE__,__LINE__,(int)x->ob_refcnt);Py_DECREF(x);} # define Py_PRINT_REFCOUNT(x) mx_Py_PRINT_REFCOUNT((PyObject *)x,#x,__FILE__,__LINE__) #else # define Py_DELETE(x) Py_DECREF(x) # define Py_PRINT_REFCOUNT(x) #endif #define Py_DEC_REF(x) {Py_XDECREF(x); x=0;} /* doing this once too often doesn't hurt; same as Py_CLEAR() */ /* Unreference a Python object. This is only used in Python debug builds and needed to keep track of all allocated references. Use in object constructors or free list implementations. */ #ifndef _Py_DEC_REFTOTAL # ifdef Py_REF_DEBUG # define _Py_DEC_REFTOTAL _Py_RefTotal-- # else # define _Py_DEC_REFTOTAL # endif #endif #define mxPy_UNREF(x) _Py_DEC_REFTOTAL /* --- Debug logging ------------------------------------------------------ */ #ifdef MAL_DEBUG # define Py_PRINT_REPR(message, obj) \ if (Py_DebugFlag) { \ PyObject *_debug_repr = PyObject_Repr(obj); \ mxDebugPrintf(message, PyString_AsString(_debug_repr)); \ Py_XDECREF(_debug_repr); \ } #else # define Py_PRINT_REPR(message, obj) #endif /* --- Argument passing and checking -------------------------------------- */ /* No arguments expected; also use Py_MethodListEntryNoArgs() for this kind of fct; this check is no longer needed in Python 2.3 and later */ #if PY_VERSION_HEX >= 0x02030000 # define Py_NoArgsCheck() {if (0) goto onError;} #else # define Py_NoArgsCheck() {if (!PyArg_NoArgs(args)) goto onError;} #endif /* For functions with old style args (Py_MethodListEntrySingleArg) */ #define Py_GetArgObject(a) {a = args; if (!a) {PyErr_SetString(PyExc_TypeError,"function/method requires an argument"); goto onError;}} #define Py_GetSingleArg(format,a1) {if (!PyArg_Parse(args,format,&a1)) goto onError;} /* For functions with new style args: */ #define Py_GetArg(format,a1) {if (!PyArg_ParseTuple(args,format,&a1)) goto onError;} #define Py_Get2Args(format,a1,a2) {if (!PyArg_ParseTuple(args,format,&a1,&a2)) goto onError;} #define Py_Get3Args(format,a1,a2,a3) {if (!PyArg_ParseTuple(args,format,&a1,&a2,&a3)) goto onError;} #define Py_Get4Args(format,a1,a2,a3,a4) {if (!PyArg_ParseTuple(args,format,&a1,&a2,&a3,&a4)) goto onError;} #define Py_Get5Args(format,a1,a2,a3,a4,a5) {if (!PyArg_ParseTuple(args,format,&a1,&a2,&a3,&a4,&a5)) goto onError;} #define Py_Get6Args(format,a1,a2,a3,a4,a5,a6) {if (!PyArg_ParseTuple(args,format,&a1,&a2,&a3,&a4,&a5,&a6)) goto onError;} #define Py_Get7Args(format,a1,a2,a3,a4,a5,a6,a7) {if (!PyArg_ParseTuple(args,format,&a1,&a2,&a3,&a4,&a5,&a6,&a7)) goto onError;} #define Py_Get8Args(format,a1,a2,a3,a4,a5,a6,a7,a8) {if (!PyArg_ParseTuple(args,format,&a1,&a2,&a3,&a4,&a5,&a6,&a7,&a8)) goto onError;} /* The keywords array string type */ #define Py_KEYWORDS_STRING_TYPE char /* For functions with keywords -- the first macro parameter must be the keywords array given as e.g. static const char *keywords[] = {"first","second","third", 0}; with an entry for every argument (in the correct order). The functions must be included in the method list using Py_MethodWithKeywordsListEntry() and be declared as Py_C_Function_WithKeywords(). */ #define Py_KeywordGetArg(keywords,format,a1) {if (!PyArg_ParseTupleAndKeywords(args,kws,format,keywords,&a1)) goto onError;} #define Py_KeywordGet2Args(keywords,format,a1,a2) {if (!PyArg_ParseTupleAndKeywords(args,kws,format,keywords,&a1,&a2)) goto onError;} #define Py_KeywordGet3Args(keywords,format,a1,a2,a3) {if (!PyArg_ParseTupleAndKeywords(args,kws,format,keywords,&a1,&a2,&a3)) goto onError;} #define Py_KeywordGet4Args(keywords,format,a1,a2,a3,a4) {if (!PyArg_ParseTupleAndKeywords(args,kws,format,keywords,&a1,&a2,&a3,&a4)) goto onError;} #define Py_KeywordGet5Args(keywords,format,a1,a2,a3,a4,a5) {if (!PyArg_ParseTupleAndKeywords(args,kws,format,keywords,&a1,&a2,&a3,&a4,&a5)) goto onError;} #define Py_KeywordGet6Args(keywords,format,a1,a2,a3,a4,a5,a6) {if (!PyArg_ParseTupleAndKeywords(args,kws,format,keywords,&a1,&a2,&a3,&a4,&a5,&a6)) goto onError;} #define Py_KeywordGet7Args(keywords,format,a1,a2,a3,a4,a5,a6,a7) {if (!PyArg_ParseTupleAndKeywords(args,kws,format,keywords,&a1,&a2,&a3,&a4,&a5,&a6,&a7)) goto onError;} #define Py_KeywordGet8Args(keywords,format,a1,a2,a3,a4,a5,a6,a7,a8) {if (!PyArg_ParseTupleAndKeywords(args,kws,format,keywords,&a1,&a2,&a3,&a4,&a5,&a6,&a7,&a8)) goto onError;} /* New style macros fof functions supporting keywords -- the C variable names are used as template for the keyword list, i.e. they must match the Python keyword parameter names. Note that format strings with special parameters (e.g. "#s") are not allowed since they would cause the keyword list to be out of sync. The functions must be included in the method list using Py_MethodWithKeywordsListEntry() and be declared as Py_C_Function_WithKeywords(). Example: Py_C_Function_WithKeywords( myfunction, "myfunction(filename,dupkeys=0,filemode=0,sectorsize=512)\n\n" "Returns a myobject" ) { char *filename; int sectorsize = 512; int dupkeys = 0; int filemode = 0; Py_KeywordsGet4Args("s|iii", filename,dupkeys,filemode,sectorsize); return (PyObject *)myobject_New(filename, filemode, sectorsize, dupkeys); onError: return NULL; } */ #define Py_KeywordsGetArg(format,a1) {static Py_KEYWORDS_STRING_TYPE *kwslist[] = {#a1,NULL}; if (!PyArg_ParseTupleAndKeywords(args,kws,format,kwslist,&a1)) goto onError;} #define Py_KeywordsGet2Args(format,a1,a2) {static Py_KEYWORDS_STRING_TYPE *kwslist[] = {#a1,#a2,NULL}; if (!PyArg_ParseTupleAndKeywords(args,kws,format,kwslist,&a1,&a2)) goto onError;} #define Py_KeywordsGet3Args(format,a1,a2,a3) {static Py_KEYWORDS_STRING_TYPE *kwslist[] = {#a1,#a2,#a3,NULL}; if (!PyArg_ParseTupleAndKeywords(args,kws,format,kwslist,&a1,&a2,&a3)) goto onError;} #define Py_KeywordsGet4Args(format,a1,a2,a3,a4) {static Py_KEYWORDS_STRING_TYPE *kwslist[] = {#a1,#a2,#a3,#a4,NULL}; if (!PyArg_ParseTupleAndKeywords(args,kws,format,kwslist,&a1,&a2,&a3,&a4)) goto onError;} #define Py_KeywordsGet5Args(format,a1,a2,a3,a4,a5) {static Py_KEYWORDS_STRING_TYPE *kwslist[] = {#a1,#a2,#a3,#a4,#a5,NULL}; if (!PyArg_ParseTupleAndKeywords(args,kws,format,kwslist,&a1,&a2,&a3,&a4,&a5)) goto onError;} #define Py_KeywordsGet6Args(format,a1,a2,a3,a4,a5,a6) {static Py_KEYWORDS_STRING_TYPE *kwslist[] = {#a1,#a2,#a3,#a4,#a5,#a6,NULL}; if (!PyArg_ParseTupleAndKeywords(args,kws,format,kwslist,&a1,&a2,&a3,&a4,&a5,&a6)) goto onError;} #define Py_KeywordsGet7Args(format,a1,a2,a3,a4,a5,a6,a7) {static Py_KEYWORDS_STRING_TYPE *kwslist[] = {#a1,#a2,#a3,#a4,#a5,#a6,#a7,NULL}; if (!PyArg_ParseTupleAndKeywords(args,kws,format,kwslist,&a1,&a2,&a3,&a4,&a5,&a6,&a7)) goto onError;} #define Py_KeywordsGet8Args(format,a1,a2,a3,a4,a5,a6,a7,a8) {static Py_KEYWORDS_STRING_TYPE *kwslist[] = {#a1,#a2,#a3,#a4,#a5,#a6,#a7,#a8,NULL}; if (!PyArg_ParseTupleAndKeywords(args,kws,format,kwslist,&a1,&a2,&a3,&a4,&a5,&a6,&a7,&a8)) goto onError;} /* --- Returning values to Python ----------------------------------------- */ /* XXX Don't always work: every time you have an 'O' in the BuildValue format string, you need to DECREF the variable *after* the tuple has been built !!! */ #define Py_ReturnNone() {Py_INCREF(Py_None);return Py_None;} #define Py_ReturnTrue() {Py_INCREF(Py_True);return Py_True;} #define Py_ReturnFalse() {Py_INCREF(Py_False);return Py_False;} #define Py_ReturnArg(format,a1) return Py_BuildValue(format,a1); #define Py_Return Py_ReturnArg #define Py_Return2Args(format,a1,a2) return Py_BuildValue(format,a1,a2); #define Py_Return2 Py_Return2Args #define Py_Return3Args(format,a1,a2,a3) return Py_BuildValue(format,a1,a2,a3); #define Py_Return3 Py_Return3Args #define Py_Return4Args(format,a1,a2,a3) return Py_BuildValue(format,a1,a2,a3,a4); #define Py_Return5Args(format,a1,a2,a3) return Py_BuildValue(format,a1,a2,a3,a4,a5); #define Py_Return6Args(format,a1,a2,a3) return Py_BuildValue(format,a1,a2,a3,a4,a5,a6); #define Py_Return7Args(format,a1,a2,a3) return Py_BuildValue(format,a1,a2,a3,a4,a5,a6,a7); /* Build values */ #define Py_BuildNone() Py_NONE #define Py_Build(format,x) Py_BuildValue(format,x) #define Py_Build2(format,x,y) Py_BuildValue(format,x,y) #define Py_Build3(format,x,y,z) Py_BuildValue(format,x,y,z) /* --- Declaring Python builtin functions/methods ------------------------- */ /* The doc-string type changed to const char* in Python 2.5 */ #if PY_VERSION_HEX >= 0x02050000 # define Py_DOC_STRING_TYPE const char #else # define Py_DOC_STRING_TYPE char #endif /* Declare C function/method fct, having docstring docstr; may use vargargs */ #define Py_C_Function(fct,docstr) \ static Py_DOC_STRING_TYPE fct##_docstring[] = docstr;\ static PyObject *fct(PyObject *self, PyObject *args) /* Declare C function/method fct, having keywords keywordsarray and a docstring docstr; may use vargargs & keywords */ #define Py_C_Function_WithKeywords(fct,docstr) \ static Py_DOC_STRING_TYPE fct##_docstring[] = docstr;\ static PyObject *fct(PyObject *self, PyObject *args, PyObject *kws) /* These declare: self -- instance pointer for methods, NULL for functions args -- argument tuple kws -- keywords dict (if applicable) plus as statics: _docstring -- the docstring as given _keywords -- the keyword array as given Note: use the Py_GetArg macros for functions without keywords, and Py_KeywordGetArg macros for functions with keywords */ /* --- Method list entries for builtin functions/methods ------------------ */ /* Add a C function/method cname to the module dict as pyname; no doc-string */ #define Py_MethodListEntryAny(pyname,cname) {pyname,(PyCFunction)cname,METH_VARARGS} /* Add a C function/method cname to the module dict as pyname; the function can use varargs */ #define Py_MethodListEntry(pyname,cname) {pyname,(PyCFunction)cname,METH_VARARGS,cname##_docstring} /* Add a C function/method cname to the module dict as pyname; the function takes no args; in Python 2.3 a new flag was added for these which implements the no args check in the interpreter itself. */ #ifdef METH_NOARGS # define Py_MethodListEntryNoArgs(pyname,cname) {pyname,(PyCFunction)cname,METH_NOARGS,cname##_docstring} #else # define Py_MethodListEntryNoArgs(pyname,cname) {pyname,(PyCFunction)cname,0,cname##_docstring} #endif /* Add a C function/method cname to the module dict as pyname; the function takes one argument: the object is passed in directly (without wrapping it into a tuple first), i.e. don't use the Py_GetArg-macros or PyArg_ParseTuple(). */ #define Py_MethodListEntrySingleArg(pyname,cname) {pyname,(PyCFunction)cname,0,cname##_docstring} /* Add a C function/method that uses keywords to the module dict */ #define Py_MethodWithKeywordsListEntry(pyname,cname) {pyname,(PyCFunction)cname,METH_VARARGS | METH_KEYWORDS,cname##_docstring} /* --- Sequence slicing --------------------------------------------------- */ /* Check a given slice and apply the usual rules for negative indices */ #define Py_CheckSequenceSlice(len,start,stop) { \ if (stop > len) \ stop = len; \ else { \ if (stop < 0) \ stop += len; \ if (stop < 0) \ stop = 0; \ } \ if (start < 0) { \ start += len; \ if (start < 0) \ start = 0; \ } \ if (stop < start) \ start = stop; \ } /* --- Number macros ------------------------------------------------------ */ /* Test for PyFloat_AsDouble() compatible object */ #define PyFloat_Compatible(obj) \ (PyInstance_Check(obj) \ ? PyObject_HasAttrString(obj, "__float__") \ : (obj->ob_type->tp_as_number != NULL && \ obj->ob_type->tp_as_number->nb_float != NULL)) /* --- Text macros -------------------------------------------------------- */ /* Check a given text slice and apply the usual rules for negative indices */ #define Py_CheckBufferSlice(textlen,start,stop) \ Py_CheckSequenceSlice(textlen,start,stop) /* Dito for string objects */ #define Py_CheckStringSlice(textobj,start,stop) \ Py_CheckSequenceSlice(PyString_GET_SIZE(textobj),start,stop) /* For b/w compatibility */ #define Py_CheckSlice(textobj,start,stop) \ Py_CheckStringSlice(textobj,start,stop) /* Dito for Unicode objects */ #ifdef PyUnicode_GET_SIZE # define Py_CheckUnicodeSlice(unicode,start,stop) \ Py_CheckSequenceSlice(PyUnicode_GET_SIZE(unicode),start,stop) #endif /* This assumes that fixed is a constant char array; the strcmp function is only called in case the attribute name length exceeds 10 characters and the first 10 characters match; optimizing compilers should eliminate any unused parts of this comparison automatically. Note: The latest egcs compiler warns about the subscripts being out of range for shorter fixed strings; since no code is generated for those comparisons, these warning can safely be ignored. Still, they are annoying. See the Py_StringsCompareEqual() macro below for a way to work around this. */ #define Py_StringsCompareEqualEx(var,fixed,fixedsize) \ (var[0] == fixed[0] && \ (fixed[0] == 0 || \ (fixedsize >= 1 && (var[1] == fixed[1] && \ (fixed[1] == 0 || \ (fixedsize >= 2 && (var[2] == fixed[2] && \ (fixed[2] == 0 || \ (fixedsize >= 3 && (var[3] == fixed[3] && \ (fixed[3] == 0 || \ (fixedsize >= 4 && (var[4] == fixed[4] && \ (fixed[4] == 0 || \ (fixedsize >= 5 && (var[5] == fixed[5] && \ (fixed[5] == 0 || \ (fixedsize >= 6 && (var[6] == fixed[6] && \ (fixed[6] == 0 || \ (fixedsize >= 7 && (var[7] == fixed[7] && \ (fixed[7] == 0 || \ (fixedsize >= 8 && (var[8] == fixed[8] && \ (fixed[8] == 0 || \ (fixedsize >= 9 && (var[9] == fixed[9] && \ (fixed[9] == 0 || \ (fixedsize >= 10 && \ strcmp(&var[10],&fixed[10]) == 0 \ )))))))))))))))))))))))))))))) /* This assumes that fixed is a constant char array. The appended string snippet is to shut up the warnings produced by newer egcs/gcc compilers about offsets being outside bounds. Note that some compilers do the inlining by themselves or don't like the above trick (OpenVMS is one such platform). For these we simply use the standard way. */ #ifndef __VMS # define Py_StringsCompareEqual(var,fixed) \ Py_StringsCompareEqualEx(var,fixed"\0\0\0\0\0\0\0\0\0\0",sizeof(fixed)) #else # define Py_StringsCompareEqual(var,fixed) (strcmp(var, fixed) == 0) #endif /* Fast character set member check; set must be a "static unsigned *char set" array of exactly 32 bytes length generated with TextTools.set() */ #define Py_CharInSet(chr,set) \ (((unsigned char)(set)[(unsigned char)(chr) >> 3] & \ (1 << ((unsigned char)(chr) & 7))) != 0) /* --- Macros for getattr ------------------------------------------------- */ /* Compares var to name and returns 1 iff they match. This assumes that name is a constant char array. */ #define Py_WantAttr(var,name) Py_StringsCompareEqual(var,name) /* --- Module init helpers ------------------------------------------------ */ /* Helper for startup type object initialization */ #define PyType_Init(x) \ { \ x.ob_type = &PyType_Type; \ Py_Assert(x.tp_basicsize >= (int)sizeof(PyObject), \ PyExc_SystemError, \ "Internal error: tp_basicsize of "#x" too small");\ if (PyType_Ready(&x) < 0) \ goto onError; \ } /* Error reporting for module init functions */ #define Py_ReportModuleInitError(modname) { \ PyObject *exc_type, *exc_value, *exc_tb; \ PyObject *str_type, *str_value; \ \ /* Fetch error objects and convert them to strings */ \ PyErr_Fetch(&exc_type, &exc_value, &exc_tb); \ if (exc_type && exc_value) { \ str_type = PyObject_Str(exc_type); \ str_value = PyObject_Str(exc_value); \ } \ else { \ str_type = NULL; \ str_value = NULL; \ } \ /* Try to format a more informative error message using the \ original error */ \ if (str_type && str_value && \ PyString_Check(str_type) && PyString_Check(str_value)) \ PyErr_Format( \ PyExc_ImportError, \ "initialization of module "modname" failed " \ "(%s:%s)", \ PyString_AS_STRING(str_type), \ PyString_AS_STRING(str_value)); \ else \ PyErr_SetString( \ PyExc_ImportError, \ "initialization of module "modname" failed"); \ Py_XDECREF(str_type); \ Py_XDECREF(str_value); \ Py_XDECREF(exc_type); \ Py_XDECREF(exc_value); \ Py_XDECREF(exc_tb); \ } /* --- SWIG addons -------------------------------------------------------- */ /* Throw this error after having set the correct Python exception using e.g. PyErr_SetString(); */ #define mxSWIGError "mxSWIGError" /* EOF */ #endif egenix-mx-base-3.2.7/mx/TextTools/mxTextTools/mxTextTools.c0000664000175000017500000040056212251400410023567 0ustar lemburglemburg/* mxTextTools -- Fast text manipulation routines Copyright (c) 2000, Marc-Andre Lemburg; mailto:mal@lemburg.com Copyright (c) 2000-2013, eGenix.com Software GmbH; mailto:info@egenix.com */ /* We want all our symbols to be exported */ #ifndef MX_BUILDING_MXTEXTTOOLS # define MX_BUILDING_MXTEXTTOOLS #endif /* Logging file used by debugging facility */ #ifndef MAL_DEBUG_OUTPUTFILE # define MAL_DEBUG_OUTPUTFILE "mxTextTools.log" #endif /* Mark the module as Py_ssize_t clean. */ #define PY_SSIZE_T_CLEAN 1 /* Setup mxstdlib memory management */ #if 1 # define MAL_USE_PYMALLOC #else # define MAL_USE_C_MALLOC #endif #include "mx.h" #include "mxTextTools.h" #include #define MXTEXTTOOLS_VERSION "3.2.7" /* Initial list size used by e.g. setsplit(), setsplitx(),... */ #define INITIAL_LIST_SIZE 64 /* Maximum TagTable cache size. If this limit is reached, the cache is cleared to make room for new compile TagTables. */ #define MAX_TAGTABLES_CACHE_SIZE 100 /* Define this to enable the copy-protocol (__copy__, __deepcopy__) */ #define COPY_PROTOCOL /* --- module doc-string -------------------------------------------------- */ static char *Module_docstring = MXTEXTTOOLS_MODULE" -- Tools for fast text processing. Version "MXTEXTTOOLS_VERSION"\n\n" "Copyright (c) 1997-2000, Marc-Andre Lemburg; mailto:mal@lemburg.com\n" "Copyright (c) 2000-2013, eGenix.com Software GmbH; mailto:info@egenix.com\n\n" " All Rights Reserved\n\n" "See the documentation for further information on copyrights,\n" "or contact the author." ; /* --- internal macros ---------------------------------------------------- */ /* --- module globals ----------------------------------------------------- */ /* Translation strings for the 8-bit versions of lower() and upper() */ static PyObject *mx_ToUpper; static PyObject *mx_ToLower; static PyObject *mxTextTools_Error; /* mxTextTools specific error */ static PyObject *mxTextTools_TagTables; /* TagTable cache dictionary */ /* Flag telling us whether the module was initialized or not. */ static int mxTextTools_Initialized = 0; /* --- forward declarations ----------------------------------------------- */ /* --- module helper ------------------------------------------------------ */ static PyObject *mxTextTools_ToUpper(void) { char tr[256]; Py_ssize_t i; for (i = 0; i < 256; i++) tr[i] = toupper((char)i); return PyString_FromStringAndSize(tr,sizeof(tr)); } static PyObject *mxTextTools_ToLower(void) { char tr[256]; Py_ssize_t i; for (i = 0; i < 256; i++) tr[i] = tolower((char)i); return PyString_FromStringAndSize(tr,sizeof(tr)); } /* Create an exception object, insert it into the module dictionary under the given name and return the object pointer; this is NULL in case an error occurred. base can be given to indicate the base object to be used by the exception object. It should be NULL otherwise */ static PyObject *insexc(PyObject *moddict, char *name, PyObject *base) { PyObject *v; char fullname[256]; char *modname; char *dot; v = PyDict_GetItemString(moddict, "__name__"); if (v == NULL) modname = NULL; else modname = PyString_AsString(v); if (modname == NULL) { PyErr_Clear(); modname = MXTEXTTOOLS_MODULE; } /* The symbols from this extension are imported into mx.TextTools. We trim the name to not confuse the user with an overly long package path. */ strcpy(fullname, modname); dot = strchr(fullname, '.'); if (dot) dot = strchr(dot+1, '.'); if (dot) strcpy(dot+1, name); else sprintf(fullname, "%s.%s", modname, name); v = PyErr_NewException(fullname, base, NULL); if (v == NULL) return NULL; if (PyDict_SetItemString(moddict,name,v)) return NULL; return v; } /* Helper for adding integer constants to a dictionary. Check for errors with PyErr_Occurred() */ static void insint(PyObject *dict, char *name, int value) { PyObject *v = PyInt_FromLong((long)value); PyDict_SetItemString(dict, name, v); Py_XDECREF(v); } /* --- module interface --------------------------------------------------- */ /* --- Text Search Object ----------------------------------------------*/ staticforward PyMethodDef mxTextSearch_Methods[]; /* allocation */ static PyObject *mxTextSearch_New(PyObject *match, PyObject *translate, int algorithm) { mxTextSearchObject *so; so = PyObject_NEW(mxTextSearchObject, &mxTextSearch_Type); if (so == NULL) return NULL; so->data = NULL; so->translate = NULL; so->match = NULL; Py_INCREF(match); so->match = match; if (translate == Py_None) translate = NULL; else if (translate) { Py_Assert(PyString_Check(translate), PyExc_TypeError, "translate table must be a string"); Py_Assert(PyString_GET_SIZE(translate) == 256, PyExc_TypeError, "translate string must have exactly 256 chars"); Py_INCREF(translate); } so->translate = translate; /* Init algorithm */ so->algorithm = algorithm; switch (algorithm) { case MXTEXTSEARCH_BOYERMOORE: Py_Assert(PyString_Check(match), PyExc_TypeError, "match must be a string for Boyer-Moore"); so->data = bm_init(PyString_AS_STRING(match), PyString_GET_SIZE(match)); Py_Assert(so->data != NULL, PyExc_TypeError, "error initializing the search object"); break; #ifdef MXFASTSEARCH case MXTEXTSEARCH_FASTSEARCH: Py_Assert(PyString_Check(match), PyExc_TypeError, "match must be a string for FastSearch"); so->data = fs_init(PyString_AS_STRING(match), PyString_GET_SIZE(match)); Py_Assert(so->data != NULL, PyExc_TypeError, "error initializing the search object"); break; #endif case MXTEXTSEARCH_TRIVIAL: Py_Assert(PyString_Check(match) || PyUnicode_Check(match), PyExc_TypeError, "match must be a string or unicode"); Py_Assert(so->translate == NULL, PyExc_TypeError, "trivial search algorithm does not support translate"); break; default: Py_Error(PyExc_ValueError, "unknown or unsupported algorithm"); } return (PyObject *)so; onError: Py_DECREF(so); return NULL; } Py_C_Function_WithKeywords( mxTextSearch_TextSearch, "TextSearch(match[,translate=None,algorithm=default_algorithm])\n\n" "Create a substring search object for the string match;\n" "translate is an optional translate-string like the one used\n" "in the module re." ) { PyObject *match = 0; PyObject *translate = 0; int algorithm = -424242; Py_KeywordsGet3Args("O|Oi:TextSearch",match,translate,algorithm); if (algorithm == -424242) { if (PyUnicode_Check(match)) algorithm = MXTEXTSEARCH_TRIVIAL; else #ifdef MXFASTSEARCH algorithm = MXTEXTSEARCH_BOYERMOORE; #else algorithm = MXTEXTSEARCH_BOYERMOORE; #endif } return mxTextSearch_New(match, translate, algorithm); onError: return NULL; } static void mxTextSearch_Free(mxTextSearchObject *so) { if (so->data) { switch (so->algorithm) { case MXTEXTSEARCH_BOYERMOORE: bm_free(so->data); break; #ifdef MXFASTSEARCH case MXTEXTSEARCH_FASTSEARCH: fs_free(so->data); break; #endif case MXTEXTSEARCH_TRIVIAL: break; } } Py_XDECREF(so->match); Py_XDECREF(so->translate); PyObject_Del(so); } /* C APIs */ #define so ((mxTextSearchObject *)self) /* Get the match length from an TextSearch object or -1 in case of an error. */ Py_ssize_t mxTextSearch_MatchLength(PyObject *self) { Py_Assert(mxTextSearch_Check(self), PyExc_TypeError, "expected a TextSearch object"); switch (so->algorithm) { case MXTEXTSEARCH_BOYERMOORE: return BM_MATCH_LEN(so->data); break; #ifdef MXFASTSEARCH case MXTEXTSEARCH_FASTSEARCH: return FS_MATCH_LEN(so->data); break; #endif case MXTEXTSEARCH_TRIVIAL: if (PyString_Check(so->match)) return PyString_GET_SIZE(so->match); #ifdef HAVE_UNICODE else if (PyUnicode_Check(so->match)) return PyUnicode_GET_SIZE(so->match); #endif break; } Py_Error(mxTextTools_Error, "internal error"); onError: return -1; } static Py_ssize_t trivial_search(const char *text, Py_ssize_t start, Py_ssize_t stop, const char *match, Py_ssize_t match_len) { Py_ssize_t ml1 = match_len - 1; register const char *tx = &text[start]; register Py_ssize_t x = start; if (ml1 < 0) return start; /* Brute-force method; from right to left */ for (;;) { register Py_ssize_t j = ml1; register const char *mj = &match[j]; if (x + j >= stop) /* reached eof: no match */ return start; /* scan from right to left */ for (tx += j; j >= 0 && *tx == *mj; tx--, mj--, j--) ; if (j < 0) { /* found */ x += ml1 + 1; return x; } /* not found: rewind and advance one char */ tx -= j - 1; x++; } return start; } #ifdef HAVE_UNICODE static Py_ssize_t trivial_unicode_search(const Py_UNICODE *text, Py_ssize_t start, Py_ssize_t stop, const Py_UNICODE *match, Py_ssize_t match_len) { Py_ssize_t ml1 = match_len - 1; register const Py_UNICODE *tx = &text[start]; register Py_ssize_t x = start; if (ml1 < 0) return start; /* Brute-force method; from right to left */ for (;;) { register Py_ssize_t j = ml1; register const Py_UNICODE *mj = &match[j]; if (x + j >= stop) /* reached eof: no match */ return start; /* scan from right to left */ for (tx += j; j >= 0 && *tx == *mj; tx--, mj--, j--) ; if (j < 0) { /* found */ x += ml1 + 1; return x; } /* not found: rewind and advance one char */ tx -= j - 1; x++; } return start; } #endif /* Search for the match in text[start:stop]. Returns 1 in case a match was found and sets sliceleft, sliceright to the matching slice. Returns 0 in case no match was found and -1 in case of an error. */ int mxTextSearch_SearchBuffer(PyObject *self, char *text, Py_ssize_t start, Py_ssize_t stop, Py_ssize_t *sliceleft, Py_ssize_t *sliceright) { Py_ssize_t nextpos; Py_ssize_t match_len; Py_Assert(mxTextSearch_Check(self), PyExc_TypeError, "expected a TextSearch object"); switch (so->algorithm) { case MXTEXTSEARCH_BOYERMOORE: DPRINTF("mxTextSearch_SearchBuffer: bm search - " "start=%li, stop=%li\n", start, stop); if (so->translate) { /* search with translate table */ nextpos = bm_tr_search((mxbmse_data *)so->data, text, start, stop, PyString_AS_STRING(so->translate)); } else { /* exact search */ nextpos = bm_search((mxbmse_data *)so->data, text, start, stop); } match_len = BM_MATCH_LEN(so->data); break; #ifdef MXFASTSEARCH case MXTEXTSEARCH_FASTSEARCH: DPRINTF("mxTextSearch_SearchBuffer: fast search - " "start=%li, stop=%li\n", start, stop); if (so->translate) { /* search with translate table */ nextpos = fs_tr_search((mxfse_data *)so->data, text, start, stop, PyString_AS_STRING(so->translate)); } else { /* exact search */ nextpos = fs_search((mxfse_data *)so->data, text, start, stop); } match_len = FS_MATCH_LEN(so->data); break; #endif case MXTEXTSEARCH_TRIVIAL: { const char *match; if (PyString_Check(so->match)) { match = PyString_AS_STRING(so->match); match_len = PyString_GET_SIZE(so->match); } else if (PyObject_AsCharBuffer(so->match, &match, &match_len)) goto onError; DPRINTF("mxTextSearch_SearchBuffer: trivial search - " "start=%li, stop=%li, match_len=%li\n", start, stop, match_len); nextpos = trivial_search(text, start, stop, match, match_len); } break; default: Py_Error(mxTextTools_Error, "unknown algorithm type in mxTextSearch_SearchBuffer"); } /* Found ? */ DPRINTF("mxTextSearch_SearchBuffer: start=%li, nextpos=%li, match_len=%li\n", start, nextpos, match_len); if (nextpos != start) { if (sliceleft) *sliceleft = nextpos - match_len; if (sliceright) *sliceright = nextpos; return 1; } /* Not found */ return 0; onError: return -1; } #ifdef HAVE_UNICODE int mxTextSearch_SearchUnicode(PyObject *self, Py_UNICODE *text, Py_ssize_t start, Py_ssize_t stop, Py_ssize_t *sliceleft, Py_ssize_t *sliceright) { Py_ssize_t nextpos; Py_ssize_t match_len; Py_Assert(mxTextSearch_Check(self), PyExc_TypeError, "expected a TextSearch object"); switch (so->algorithm) { case MXTEXTSEARCH_BOYERMOORE: Py_Error(PyExc_TypeError, "Boyer-Moore search algorithm does not support Unicode"); break; #ifdef MXFASTSEARCH case MXTEXTSEARCH_FASTSEARCH: Py_Error(PyExc_TypeError, "FastSearch search algorithm does not support Unicode"); #endif case MXTEXTSEARCH_TRIVIAL: { PyObject *u; Py_UNICODE *match; if (PyUnicode_Check(so->match)) { u = NULL; match = PyUnicode_AS_UNICODE(so->match); match_len = PyUnicode_GET_SIZE(so->match); } else { u = PyUnicode_FromEncodedObject(so->match, NULL, NULL); if (u == NULL) goto onError; match = PyUnicode_AS_UNICODE(u); match_len = PyUnicode_GET_SIZE(u); } nextpos = trivial_unicode_search(text, start, stop, match, match_len); Py_XDECREF(u); } break; default: Py_Error(mxTextTools_Error, "unknown algorithm type in mxTextSearch_SearchUnicode"); } /* Found ? */ if (nextpos != start) { if (sliceleft) *sliceleft = nextpos - match_len; if (sliceright) *sliceright = nextpos; return 1; } /* Not found */ return 0; onError: return -1; } #endif /* methods */ Py_C_Function( mxTextSearch_search, "TextSearch.search(text,start=0,stop=len(text))\n\n" "Search for the substring in text, looking only at the\n" "slice [start:stop] and return the slice (l,r)\n" "where the substring was found, (start,start) otherwise.") { PyObject *text; Py_ssize_t start = 0; Py_ssize_t stop = INT_MAX; Py_ssize_t sliceleft = -1, sliceright = -1; Py_ssize_t rc; Py_Get3Args("O|" Py_SSIZE_T_PARSERMARKER Py_SSIZE_T_PARSERMARKER ":TextSearch.search", text,start,stop); DPRINTF("TextSearch.search: sliceleft=%li, sliceright=%li\n", sliceleft, sliceright); if (PyString_Check(text)) { Py_CheckStringSlice(text, start, stop); rc = mxTextSearch_SearchBuffer(self, PyString_AS_STRING(text), start, stop, &sliceleft, &sliceright); } #ifdef HAVE_UNICODE else if (PyUnicode_Check(text)) { Py_CheckUnicodeSlice(text, start, stop); rc = mxTextSearch_SearchUnicode(self, PyUnicode_AS_UNICODE(text), start, stop, &sliceleft, &sliceright); } #endif else Py_Error(PyExc_TypeError, "expected string or unicode"); if (rc < 0) goto onError; if (rc == 0) { sliceleft = start; sliceright = start; } DPRINTF("TextSearch.search: sliceleft=%li, sliceright=%li\n", sliceleft, sliceright); /* Return the slice */ Py_Return2Args(Py_SSIZE_T_PARSERMARKER Py_SSIZE_T_PARSERMARKER, sliceleft, sliceright); onError: return NULL; } Py_C_Function( mxTextSearch_find, "TextSearch.find(text,start=0,stop=len(text))\n\n" "Search for the substring in text, looking only at the\n" "slice [start:stop] and return the index\n" "where the substring was found, -1 otherwise.") { PyObject *text; Py_ssize_t start = 0; Py_ssize_t stop = INT_MAX; Py_ssize_t sliceleft = -1, sliceright = -1; int rc; Py_Get3Args("O|" Py_SSIZE_T_PARSERMARKER Py_SSIZE_T_PARSERMARKER ":TextSearch.find", text,start,stop); if (PyString_Check(text)) { Py_CheckStringSlice(text, start, stop); rc = mxTextSearch_SearchBuffer(self, PyString_AS_STRING(text), start, stop, &sliceleft, &sliceright); } #ifdef HAVE_UNICODE else if (PyUnicode_Check(text)) { Py_CheckUnicodeSlice(text, start, stop); rc = mxTextSearch_SearchUnicode(self, PyUnicode_AS_UNICODE(text), start, stop, &sliceleft, &sliceright); } #endif else Py_Error(PyExc_TypeError, "expected string or unicode"); if (rc < 0) goto onError; if (rc == 0) sliceleft = -1; return PyInt_FromSsize_t(sliceleft); onError: return NULL; } Py_C_Function( mxTextSearch_findall, "TextSearch.findall(text,start=0,stop=len(text))\n\n" "Search for the substring in text, looking only at the\n" "slice [start:stop] and return a list of all\n" "non overlapping slices (l,r) in text where the match\n" "string can be found.") { PyObject *text; PyObject *list = 0; Py_ssize_t start = 0; Py_ssize_t stop = INT_MAX; Py_ssize_t stop_index; Py_ssize_t match_len; Py_ssize_t listsize = INITIAL_LIST_SIZE; Py_ssize_t listitem = 0; Py_Get3Args("O|" Py_SSIZE_T_PARSERMARKER Py_SSIZE_T_PARSERMARKER ":TextSearch.findall", text,start,stop); if (PyString_Check(text)) { Py_CheckStringSlice(text, start, stop); } #ifdef HAVE_UNICODE else if (PyUnicode_Check(text)) { Py_CheckUnicodeSlice(text, start, stop); } #endif else Py_Error(PyExc_TypeError, "expected string or unicode"); list = PyList_New(listsize); if (!list) goto onError; match_len = mxTextSearch_MatchLength(self); if (match_len < 0) goto onError; stop_index = stop - match_len; while (start <= stop_index) { register PyObject *t,*v; int rc; Py_ssize_t sliceleft, sliceright; /* exact search */ if (PyString_Check(text)) rc = mxTextSearch_SearchBuffer(self, PyString_AS_STRING(text), start, stop, &sliceleft, &sliceright); #ifdef HAVE_UNICODE else if (PyUnicode_Check(text)) rc = mxTextSearch_SearchUnicode(self, PyUnicode_AS_UNICODE(text), start, stop, &sliceleft, &sliceright); #endif else break; if (rc < 0) goto onError; if (rc == 0) break; /* Build slice and append to list */ t = PyTuple_New(2); if (!t) goto onError; v = PyInt_FromSsize_t(sliceleft); if (!v) goto onError; PyTuple_SET_ITEM(t,0,v); v = PyInt_FromSsize_t(sliceright); if (!v) goto onError; PyTuple_SET_ITEM(t,1,v); if (listitem < listsize) PyList_SET_ITEM(list, listitem, t); else { PyList_Append(list, t); Py_DECREF(t); } listitem++; start = sliceright; } /* Resize list if necessary */ if (listitem < listsize) PyList_SetSlice(list, listitem, listsize, (PyObject*)NULL); return list; onError: Py_XDECREF(list); return NULL; } #ifdef COPY_PROTOCOL Py_C_Function( mxTextSearch_copy, "copy([memo])\n\n" "Return a new reference for the instance. This function\n" "is used for the copy-protocol. Real copying doesn't take\n" "place, since the instances are immutable.") { PyObject *memo; Py_GetArg("|O",memo); Py_INCREF(so); return (PyObject *)so; onError: return NULL; } #endif #undef so /* --- slots --- */ static PyObject *mxTextSearch_Repr(PyObject *obj) { mxTextSearchObject *self = (mxTextSearchObject *)obj; char *algoname; PyObject *v; char t[500], *reprstr; v = PyObject_Repr(self->match); if (v == NULL) return NULL; reprstr = PyString_AsString(v); if (reprstr == NULL) return NULL; switch (self->algorithm) { case MXTEXTSEARCH_BOYERMOORE: algoname = "Boyer-Moore"; break; #ifdef MXFASTSEARCH case MXTEXTSEARCH_FASTSEARCH: algoname = "FastSearch"; break; #endif case MXTEXTSEARCH_TRIVIAL: algoname = "Trivial"; break; default: algoname = ""; } sprintf(t, "<%.50s TextSearch object for %.400s at 0x%lx>", algoname, reprstr, (long)self); Py_DECREF(v); return PyString_FromString(t); } static PyObject *mxTextSearch_GetAttr(PyObject *obj, char *name) { mxTextSearchObject *self = (mxTextSearchObject *)obj; PyObject *v; if (Py_WantAttr(name,"match")) { v = self->match; Py_INCREF(v); return v; } else if (Py_WantAttr(name,"translate")) { v = self->translate; if (v == NULL) v = Py_None; Py_INCREF(v); return v; } else if (Py_WantAttr(name,"algorithm")) return PyInt_FromLong(self->algorithm); else if (Py_WantAttr(name,"__members__")) return Py_BuildValue("[sss]", "match", "translate", "algorithm"); return Py_FindMethod(mxTextSearch_Methods, (PyObject *)self, (char *)name); } /* Python Type Table */ PyTypeObject mxTextSearch_Type = { PyObject_HEAD_INIT(0) /* init at startup ! */ 0, /*ob_size*/ "TextSearch", /*tp_name*/ sizeof(mxTextSearchObject), /*tp_basicsize*/ 0, /*tp_itemsize*/ /* methods */ (destructor)mxTextSearch_Free, /*tp_dealloc*/ 0, /*tp_print*/ mxTextSearch_GetAttr, /*tp_getattr*/ 0, /*tp_setattr*/ 0, /*tp_compare*/ mxTextSearch_Repr, /*tp_repr*/ 0, /*tp_as_number*/ 0, /*tp_as_number*/ 0, /*tp_as_mapping*/ 0, /*tp_hash*/ 0, /*tp_call*/ 0, /*tp_str*/ 0, /*tp_getattro*/ 0, /*tp_setattro*/ 0, /*tp_as_buffer*/ Py_TPFLAGS_DEFAULT, /*tp_flags*/ 0, /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ 0, /* tp_richcompare */ 0, /* tp_weaklistoffset */ 0, /* tp_iter */ 0, /* tp_iternext */ mxTextSearch_Methods, /* tp_methods */ 0, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ 0, /* tp_init */ 0, /* tp_alloc */ 0, /* tp_new */ 0, /* tp_free */ }; /* Python Method Table */ statichere PyMethodDef mxTextSearch_Methods[] = { Py_MethodListEntry("search",mxTextSearch_search), Py_MethodListEntry("find",mxTextSearch_find), Py_MethodListEntry("findall",mxTextSearch_findall), #ifdef COPY_PROTOCOL Py_MethodListEntry("__deepcopy__",mxTextSearch_copy), Py_MethodListEntry("__copy__",mxTextSearch_copy), #endif {NULL,NULL} /* end of list */ }; /* --- Character Set Object --------------------------------------------*/ staticforward PyMethodDef mxCharSet_Methods[]; /* internal */ /* 8-bit character sets are implemented using a simple 32-byte long bitmap with one bit per character. Addressing is done as follows: def char_is_set(ordinal): return bitmap[ordinal >> 3] & (1 << (ordinal & 7)) */ #define STRING_CHARSET_SIZE 256 #define STRING_CHARSET_BITMAP_SIZE (STRING_CHARSET_SIZE / 8) typedef struct { unsigned char bitmap[STRING_CHARSET_BITMAP_SIZE]; /* character bitmap */ } string_charset; static int init_string_charset(mxCharSetObject *cs, PyObject *definition) { register Py_ssize_t i, j; char *def = PyString_AS_STRING(definition); const Py_ssize_t len = PyString_GET_SIZE(definition); string_charset *lookup = 0; register unsigned char *bitmap; int logic = 1; /* Handle logic change (first char is '^' for negative matching) */ if (len > 0 && def[0] == '^') { logic = 0; i = 1; } else i = 0; /* Build 32-byte lookup bitmap (one bit per character) */ lookup = (string_charset *)PyMem_Malloc(sizeof(string_charset)); if (lookup == NULL) { PyErr_NoMemory(); goto onError; } memset(lookup, 0, sizeof(string_charset)); cs->mode = MXCHARSET_8BITMODE; cs->lookup = (void *)lookup; bitmap = lookup->bitmap; for (; i < len; i++) { /* Handle escapes: "b\-d", "\\" */ if (def[i] == '\\') { if (i < len - 1 && def[i+1] == '\\') { j = (unsigned char)'\\'; bitmap[j >> 3] |= 1 << (j & 7); i++; } continue; } /* Handle ranges: "b-d", "\\-z", "\--z" */ if (i < len - 2 && def[i+1] == '-') { unsigned char range_left = def[i]; unsigned char range_right = def[i+2]; for (j = range_left; j <= range_right; j++) bitmap[j >> 3] |= 1 << (j & 7); i++; continue; } /* Normal processing */ j = (unsigned char)def[i]; bitmap[j >> 3] |= 1 << (j & 7); } /* Invert bitmap if negative matching is requested */ if (!logic) { DPRINTF("init_string_charset: inverting bitmap\n"); for (i = 0; i < STRING_CHARSET_BITMAP_SIZE; i++) bitmap[i] ^= 0xFF; } return 0; onError: if (lookup) PyMem_Free((void *)lookup); cs->lookup = 0; return -1; } #ifdef HAVE_UNICODE /* Unicode character sets are implemented using two step indexing which is a good compromise between lookup speed and memory usage. Lookup is done using a variable length array of 32-byte bitmap blocks. There can be 256 such blocks. Identical blocks are collapsed into a single copy. Addressing is done as follows: def char_is_set(ordinal): index = bitmapindex[ordinal >> 8] bitmap = bitmaps[index] return bitmap[(ordinal >> 3) & 31] & (1 << (ordinal & 7)) The technique used here is very similar to what is done in Python's SRE (see the BIGCHARSET patch by Martin von Loewis). Compression should be reasonably good since character sets in practice usually only contains a few single characters or longer ranges of Unicode characters. Note that we only support code points in the UCS2 range ! */ #define UNICODE_CHARSET_SIZE 65536 #define UNICODE_CHARSET_BITMAP_SIZE 32 #define UNICODE_CHARSET_BITMAPS (UNICODE_CHARSET_SIZE / (UNICODE_CHARSET_BITMAP_SIZE * 8)) #define UNICODE_CHARSET_BIGMAP_SIZE (UNICODE_CHARSET_SIZE / 8) typedef struct { unsigned char bitmapindex[UNICODE_CHARSET_BITMAPS]; /* Index to char bitmaps */ unsigned char bitmaps[UNICODE_CHARSET_BITMAPS][UNICODE_CHARSET_BITMAP_SIZE]; /* Variable length bitmap array */ } unicode_charset; static int init_unicode_charset(mxCharSetObject *cs, PyObject *definition) { register Py_ssize_t i, j; Py_UNICODE *def = PyUnicode_AS_UNICODE(definition); const Py_ssize_t len = PyUnicode_GET_SIZE(definition); unicode_charset *lookup = 0; unsigned char bigmap[UNICODE_CHARSET_BIGMAP_SIZE]; int blocks; int logic = 1; /* Handle logic change (first char is '^' for negative matching) */ if (len > 0 && def[0] == '^') { logic = 0; i = 1; } else i = 0; /* Build bigmap */ memset(bigmap, 0, sizeof(bigmap)); for (; i < len; i++) { /* Handle escapes: "b\-d", "\\" */ if (def[i] == '\\') { if (i < len - 1 && def[i+1] == '\\') { j = (int)'\\'; bigmap[j >> 3] |= 1 << (j & 7); i++; } continue; } /* Handle ranges: "b-d", "\\-z", "\--z" */ if (i < len - 2 && def[i+1] == '-') { Py_UNICODE range_left = def[i]; Py_UNICODE range_right = def[i+2]; if (range_right >= UNICODE_CHARSET_SIZE) { Py_Error(PyExc_ValueError, "unicode ordinal out of supported range"); } for (j = range_left; j <= range_right; j++) bigmap[j >> 3] |= 1 << (j & 7); i++; continue; } /* Normal processing */ j = def[i]; if (j >= UNICODE_CHARSET_SIZE) { Py_Error(PyExc_ValueError, "unicode ordinal out of supported range"); } bigmap[j >> 3] |= 1 << (j & 7); } /* Build lookup table XXX Could add dynamic resizing here... probably not worth it though, since sizeof(unicode_charset) isn't all that large. */ lookup = (unicode_charset *)PyMem_Malloc(sizeof(unicode_charset)); if (lookup == NULL) { PyErr_NoMemory(); goto onError; } blocks = 0; for (i = UNICODE_CHARSET_BITMAPS - 1; i >= 0; i--) { unsigned char *block = &bigmap[i << 5]; for (j = blocks - 1; j >= 0; j--) if (memcmp(lookup->bitmaps[j], block, UNICODE_CHARSET_BITMAP_SIZE) == 0) break; if (j < 0) { j = blocks; DPRINTF("init_unicode_charset: Creating new block %i for %i\n", j, i); memcpy(lookup->bitmaps[j], block, UNICODE_CHARSET_BITMAP_SIZE); blocks++; } else DPRINTF("init_unicode_charset: Reusing block %i for %i\n", j, i); lookup->bitmapindex[i] = (unsigned char)j; } DPRINTF("init_unicode_charset: Map size: %i block(s) = %i bytes\n", blocks, UNICODE_CHARSET_BITMAPS + blocks * UNICODE_CHARSET_BITMAP_SIZE); lookup = (unicode_charset *)PyMem_Realloc(lookup, UNICODE_CHARSET_BITMAPS + blocks * UNICODE_CHARSET_BITMAP_SIZE); if (lookup == NULL) { PyErr_NoMemory(); goto onError; } /* Invert bitmaps if negative matching is requested */ if (!logic) { register unsigned char *bitmap = &lookup->bitmaps[0][0]; DPRINTF("init_unicode_charset: inverting bitmaps\n"); for (i = 0; i < blocks * UNICODE_CHARSET_BITMAP_SIZE; i++) bitmap[i] ^= 0xFF; } cs->mode = MXCHARSET_UCS2MODE; cs->lookup = (void *)lookup; return 0; onError: if (lookup) PyMem_Free((void *)lookup); cs->lookup = 0; return -1; } #endif /* allocation */ static PyObject *mxCharSet_New(PyObject *definition) { mxCharSetObject *cs; cs = PyObject_NEW(mxCharSetObject, &mxCharSet_Type); if (cs == NULL) return NULL; Py_INCREF(definition); cs->definition = definition; cs->lookup = NULL; cs->mode = -1; if (PyString_Check(definition)) { if (init_string_charset(cs, definition)) goto onError; } #ifdef HAVE_UNICODE else if (PyUnicode_Check(definition)) { if (init_unicode_charset(cs, definition)) goto onError; } #endif else Py_Error(PyExc_TypeError, "character set definition must be string or unicode"); return (PyObject *)cs; onError: Py_DECREF(cs); return NULL; } Py_C_Function( mxCharSet_CharSet, "CharSet(definition)\n\n" "Create a character set matching object from the string" ) { PyObject *definition; Py_GetArg("O:CharSet", definition); return mxCharSet_New(definition); onError: return NULL; } static void mxCharSet_Free(mxCharSetObject *cs) { Py_XDECREF(cs->definition); if (cs->lookup) PyMem_Free(cs->lookup); PyObject_Del(cs); } /* C APIs */ #define cs ((mxCharSetObject *)self) int mxCharSet_ContainsChar(PyObject *self, register unsigned char ch) { if (!mxCharSet_Check(self)) { PyErr_BadInternalCall(); goto onError; } if (cs->mode == MXCHARSET_8BITMODE) { unsigned char *bitmap = ((string_charset *)cs->lookup)->bitmap; return ((bitmap[ch >> 3] & (1 << (ch & 7))) != 0); } #ifdef HAVE_UNICODE else if (cs->mode == MXCHARSET_UCS2MODE) { unicode_charset *lookup = (unicode_charset *)cs->lookup; unsigned char *bitmap = lookup->bitmaps[lookup->bitmapindex[0]]; return ((bitmap[ch >> 3] & (1 << (ch & 7))) != 0); } #endif else { Py_Error(mxTextTools_Error, "unsupported character set mode"); } onError: return -1; } #ifdef HAVE_UNICODE int mxCharSet_ContainsUnicodeChar(PyObject *self, register Py_UNICODE ch) { if (!mxCharSet_Check(self)) { PyErr_BadInternalCall(); goto onError; } if (cs->mode == MXCHARSET_8BITMODE) { unsigned char *bitmap = ((string_charset *)cs->lookup)->bitmap; if (ch >= 256) return 0; return ((bitmap[ch >> 3] & (1 << (ch & 7))) != 0); } else if (cs->mode == MXCHARSET_UCS2MODE) { unicode_charset *lookup = (unicode_charset *)cs->lookup; unsigned char *bitmap = lookup->bitmaps[lookup->bitmapindex[ch >> 8]]; return ((bitmap[(ch >> 3) & 31] & (1 << (ch & 7))) != 0); } else { Py_Error(mxTextTools_Error, "unsupported character set mode"); } onError: return -1; } #endif static int mxCharSet_Contains(PyObject *self, PyObject *other) { if (PyString_Check(other)) { Py_Assert(PyString_GET_SIZE(other) == 1, PyExc_TypeError, "expected a single character"); return mxCharSet_ContainsChar(self, PyString_AS_STRING(other)[0]); } #ifdef HAVE_UNICODE else if (PyUnicode_Check(other)) { Py_Assert(PyUnicode_GET_SIZE(other) == 1, PyExc_TypeError, "expected a single unicode character"); return mxCharSet_ContainsUnicodeChar(self, PyUnicode_AS_UNICODE(other)[0]); } #endif else Py_Error(PyExc_TypeError, "expected string or unicode character"); onError: return -1; } /* In mode 1, find the position of the first character in text belonging to set. This may also be stop or start-1 in case no such character is found during the search (depending on the direction). In mode 0, find the first character not in set. This may also be stop or start-1 in case no such character is found during the search (depending on the direction). The search is done in the slice start:stop. -2 is returned in case of an error. */ static Py_ssize_t mxCharSet_FindChar(PyObject *self, unsigned char *text, Py_ssize_t start, Py_ssize_t stop, const int mode, const int direction) { register Py_ssize_t i; register unsigned int c; register unsigned int block; unsigned char *bitmap; if (!mxCharSet_Check(self)) { PyErr_BadInternalCall(); goto onError; } if (cs->mode == MXCHARSET_8BITMODE) bitmap = ((string_charset *)cs->lookup)->bitmap; #ifdef HAVE_UNICODE else if (cs->mode == MXCHARSET_UCS2MODE) { unicode_charset *lookup = (unicode_charset *)cs->lookup; bitmap = lookup->bitmaps[lookup->bitmapindex[0]]; } #endif else { Py_Error(mxTextTools_Error, "unsupported character set mode"); } if (direction > 0) { if (mode) /* Find first char in set */ for (i = start; i < stop; i++) { c = text[i]; block = bitmap[c >> 3]; if (block && ((block & (1 << (c & 7))) != 0)) break; } else /* Find first char not in set */ for (i = start; i < stop; i++) { c = text[i]; block = bitmap[c >> 3]; if (!block || ((block & (1 << (c & 7))) == 0)) break; } } else { if (mode) /* Find first char in set, searching from the end */ for (i = stop - 1; i >= start; i--) { c = text[i]; block = bitmap[c >> 3]; if (block && ((block & (1 << (c & 7))) != 0)) break; } else /* Find first char not in set, searching from the end */ for (i = stop - 1; i >= start; i--) { c = text[i]; block = bitmap[c >> 3]; if (!block || ((block & (1 << (c & 7))) == 0)) break; } } return i; onError: return -2; } #ifdef HAVE_UNICODE static Py_ssize_t mxCharSet_FindUnicodeChar(PyObject *self, Py_UNICODE *text, Py_ssize_t start, Py_ssize_t stop, const int mode, const int direction) { register Py_ssize_t i; register unsigned int c; register unsigned int block; unsigned char *bitmap; if (!mxCharSet_Check(self)) { PyErr_BadInternalCall(); goto onError; } if (cs->mode == MXCHARSET_8BITMODE) { bitmap = ((string_charset *)cs->lookup)->bitmap; if (direction > 0) { if (mode) /* Find first char in set */ for (i = start; i < stop; i++) { c = text[i]; if (c > 256) continue; block = bitmap[c >> 3]; if (block && ((block & (1 << (c & 7))) != 0)) break; } else /* Find first char not in set */ for (i = start; i < stop; i++) { c = text[i]; if (c > 256) break; block = bitmap[c >> 3]; if (!block || ((block & (1 << (c & 7))) == 0)) break; } } else { if (mode) /* Find first char in set, searching from the end */ for (i = stop - 1; i >= start; i--) { c = text[i]; if (c > 256) continue; block = bitmap[c >> 3]; if (block && ((block & (1 << (c & 7))) != 0)) break; } else /* Find first char not in set, searching from the end */ for (i = stop - 1; i >= start; i--) { c = text[i]; if (c > 256) break; block = bitmap[c >> 3]; if (!block || ((block & (1 << (c & 7))) == 0)) break; } } return i; } #ifdef HAVE_UNICODE else if (cs->mode == MXCHARSET_UCS2MODE) { unicode_charset *lookup = (unicode_charset *)cs->lookup; if (direction > 0) { if (mode) /* Find first char in set */ for (i = start; i < stop; i++) { c = text[i]; bitmap = lookup->bitmaps[lookup->bitmapindex[c >> 8]]; block = bitmap[(c >> 3) & 31]; if (block && ((block & (1 << (c & 7))) != 0)) break; } else /* Find first char not in set */ for (i = start; i < stop; i++) { c = text[i]; bitmap = lookup->bitmaps[lookup->bitmapindex[c >> 8]]; block = bitmap[(c >> 3) & 31]; if (!block || ((block & (1 << (c & 7))) == 0)) break; } } else { if (mode) /* Find first char in set, searching from the end */ for (i = stop - 1; i >= start; i--) { c = text[i]; bitmap = lookup->bitmaps[lookup->bitmapindex[c >> 8]]; block = bitmap[(c >> 3) & 31]; if (block && ((block & (1 << (c & 7))) != 0)) break; } else /* Find first char not in set, searching from the end */ for (i = stop - 1; i >= start; i--) { c = text[i]; bitmap = lookup->bitmaps[lookup->bitmapindex[c >> 8]]; block = bitmap[(c >> 3) & 31]; if (!block || ((block & (1 << (c & 7))) == 0)) break; } } return i; } #endif else { Py_Error(mxTextTools_Error, "unsupported character set mode"); } onError: return -2; } #endif /* Return the position of the first character in text[start:stop] occurring in set or -1 in case no such character exists. */ static Py_ssize_t mxCharSet_Search(PyObject *self, PyObject *text, Py_ssize_t start, Py_ssize_t stop, int direction) { Py_ssize_t position; if (PyString_Check(text)) { Py_CheckStringSlice(text, start, stop); position = mxCharSet_FindChar(self, (unsigned char *)PyString_AS_STRING(text), start, stop, 1, direction); } #ifdef HAVE_UNICODE else if (PyUnicode_Check(text)) { Py_CheckUnicodeSlice(text, start, stop); position = mxCharSet_FindUnicodeChar(self, PyUnicode_AS_UNICODE(text), start, stop, 1, direction); } #endif else Py_Error(PyExc_TypeError, "expected string or unicode"); if ((direction > 0 && position >= stop) || (direction <= 0 && position < start)) position = -1; return position; onError: return -2; } /* Return the longest match of characters from set in text[start:stop]. If direction is positive, the search is done from the left (longest prefix), otherwise it is started from the right (longest suffix). -1 is returned in case of an error. */ Py_ssize_t mxCharSet_Match(PyObject *self, PyObject *text, Py_ssize_t start, Py_ssize_t stop, int direction) { Py_ssize_t position; if (PyString_Check(text)) { Py_CheckStringSlice(text, start, stop); position = mxCharSet_FindChar(self, (unsigned char *)PyString_AS_STRING(text), start, stop, 0, direction); } #ifdef HAVE_UNICODE else if (PyUnicode_Check(text)) { Py_CheckUnicodeSlice(text, start, stop); position = mxCharSet_FindUnicodeChar(self, PyUnicode_AS_UNICODE(text), start, stop, 0, direction); } #endif else Py_Error(PyExc_TypeError, "expected string or unicode"); if (position < -1) goto onError; if (direction > 0) return position - start; else return stop-1 - position; onError: return -1; } /* Stips off characters appearing in the character set from text[start:stop] and returns the result as Python string object. where indicates the mode: where < 0: strip left only where = 0: strip left and right where > 0: strip right only */ static PyObject *mxCharSet_Strip(PyObject *self, PyObject *text, Py_ssize_t start, Py_ssize_t stop, int where) { Py_ssize_t left,right; if (!mxCharSet_Check(self)) { PyErr_BadInternalCall(); goto onError; } if (PyString_Check(text)) { Py_CheckStringSlice(text, start, stop); /* Strip left */ if (where <= 0) { left = mxCharSet_FindChar(self, (unsigned char *)PyString_AS_STRING(text), start, stop, 0, 1); if (left < 0) goto onError; } else left = start; /* Strip right */ if (where >= 0) { right = mxCharSet_FindChar(self, (unsigned char *)PyString_AS_STRING(text), left, stop, 0, -1) + 1; if (right < 0) goto onError; } else right = stop; return PyString_FromStringAndSize(PyString_AS_STRING(text) + left, max(right - left, 0)); } #ifdef HAVE_UNICODE else if (PyUnicode_Check(text)) { Py_CheckUnicodeSlice(text, start, stop); /* Strip left */ if (where <= 0) { left = mxCharSet_FindUnicodeChar(self, PyUnicode_AS_UNICODE(text), start, stop, 0, 1); if (left < 0) goto onError; } else left = start; /* Strip right */ if (where >= 0) { right = mxCharSet_FindUnicodeChar(self, PyUnicode_AS_UNICODE(text), start, stop, 0, -1) + 1; if (right < 0) goto onError; } else right = stop; return PyUnicode_FromUnicode(PyUnicode_AS_UNICODE(text) + left, max(right - left, 0)); } #endif else Py_Error(PyExc_TypeError, "expected string or unicode"); onError: return NULL; } static PyObject *mxCharSet_Split(PyObject *self, PyObject *text, Py_ssize_t start, Py_ssize_t text_len, int include_splits) { PyObject *list = NULL; PyObject *s; register Py_ssize_t x; Py_ssize_t listitem = 0; Py_ssize_t listsize = INITIAL_LIST_SIZE; if (!mxCharSet_Check(self)) { PyErr_BadInternalCall(); goto onError; } list = PyList_New(listsize); if (!list) goto onError; if (PyString_Check(text)) { unsigned char *tx = (unsigned char *)PyString_AS_STRING(text); Py_CheckStringSlice(text, start, text_len); x = start; while (x < text_len) { Py_ssize_t z; /* Skip all text in set (include_splits == 0), not in set (include_splits == 1) */ z = x; x = mxCharSet_FindChar(self, tx, x, text_len, include_splits, 1); /* Append the slice to list */ if (include_splits) { s = PyString_FromStringAndSize((char *)&tx[z], x - z); if (!s) goto onError; if (listitem < listsize) PyList_SET_ITEM(list,listitem,s); else { PyList_Append(list,s); Py_DECREF(s); } listitem++; if (x >= text_len) break; } /* Skip all text in set (include_splits == 1), not in set (include_splits == 0) */ z = x; x = mxCharSet_FindChar(self, tx, x, text_len, !include_splits, 1); /* Append the slice to list if it is not empty */ if (x > z) { s = PyString_FromStringAndSize((char *)&tx[z], x - z); if (!s) goto onError; if (listitem < listsize) PyList_SET_ITEM(list,listitem,s); else { PyList_Append(list,s); Py_DECREF(s); } listitem++; } } } #ifdef HAVE_UNICODE else if (PyUnicode_Check(text)) { Py_UNICODE *tx = PyUnicode_AS_UNICODE(text); Py_CheckUnicodeSlice(text, start, text_len); x = start; while (x < text_len) { Py_ssize_t z; /* Skip all text in set (include_splits == 0), not in set (include_splits == 1) */ z = x; x = mxCharSet_FindUnicodeChar(self, tx, x, text_len, include_splits, 1); /* Append the slice to list */ if (include_splits) { s = PyUnicode_FromUnicode(&tx[z], x - z); if (!s) goto onError; if (listitem < listsize) PyList_SET_ITEM(list,listitem,s); else { PyList_Append(list,s); Py_DECREF(s); } listitem++; if (x >= text_len) break; } /* Skip all text in set (include_splits == 1), not in set (include_splits == 0) */ z = x; x = mxCharSet_FindUnicodeChar(self, tx, x, text_len, !include_splits, 1); /* Append the slice to list if it is not empty */ if (x > z) { s = PyUnicode_FromUnicode(&tx[z], x - z); if (!s) goto onError; if (listitem < listsize) PyList_SET_ITEM(list,listitem,s); else { PyList_Append(list,s); Py_DECREF(s); } listitem++; } } } #endif else Py_Error(PyExc_TypeError, "expected string or unicode"); /* Resize list if necessary */ if (listitem < listsize) PyList_SetSlice(list, listitem, listsize, (PyObject*)NULL); return list; onError: Py_XDECREF(list); return NULL; } /* methods */ Py_C_Function( mxCharSet_contains, ".contains(char)\n\n" ) { PyObject *chr; int rc; Py_GetArg("O:CharSet.contains", chr); rc = mxCharSet_Contains(self, chr); if (rc < 0) goto onError; return PyInt_FromLong(rc); onError: return NULL; } Py_C_Function( mxCharSet_search, ".search(text[, direction=1, start=0, stop=len(text)])\n\n" ) { PyObject *text; int direction = 1; Py_ssize_t start = 0, stop = INT_MAX; Py_ssize_t position; Py_Get4Args("O|i" Py_SSIZE_T_PARSERMARKER Py_SSIZE_T_PARSERMARKER ":CharSet.search", text, direction, start, stop); position = mxCharSet_Search(self, text, start, stop, direction); if (position == -1) Py_ReturnNone(); if (position < -1) goto onError; return PyInt_FromSsize_t(position); onError: return NULL; } Py_C_Function( mxCharSet_match, ".match(text[, direction=1, start=0, stop=len(text)])\n\n" ) { PyObject *text; int direction = 1; Py_ssize_t start = 0, stop = INT_MAX; Py_ssize_t position; Py_Get4Args("O|i" Py_SSIZE_T_PARSERMARKER Py_SSIZE_T_PARSERMARKER ":CharSet.match", text, direction, start, stop); position = mxCharSet_Match(self, text, start, stop, direction); if (position < 0) goto onError; return PyInt_FromSsize_t(position); onError: return NULL; } Py_C_Function( mxCharSet_split, ".split(text[, start=0, stop=len(text)])\n\n" ) { PyObject *text; Py_ssize_t start = 0, stop = INT_MAX; Py_Get3Args("O|" Py_SSIZE_T_PARSERMARKER Py_SSIZE_T_PARSERMARKER ":CharSet.split", text, start, stop); return mxCharSet_Split(self, text, start, stop, 0); onError: return NULL; } Py_C_Function( mxCharSet_splitx, ".splitx(text[, start=0, stop=len(text)])\n\n" ) { PyObject *text; Py_ssize_t start = 0, stop = INT_MAX; Py_Get3Args("O|" Py_SSIZE_T_PARSERMARKER Py_SSIZE_T_PARSERMARKER ":CharSet.splitx", text, start, stop); return mxCharSet_Split(self, text, start, stop, 1); onError: return NULL; } Py_C_Function( mxCharSet_strip, ".strip(text[, where=0, start=0, stop=len(text)])\n\n" ) { PyObject *text; int where = 0; Py_ssize_t start = 0, stop = INT_MAX; Py_Get4Args("O|i" Py_SSIZE_T_PARSERMARKER Py_SSIZE_T_PARSERMARKER ":CharSet.strip", text, where, start, stop); return mxCharSet_Strip(self, text, start, stop, where); onError: return NULL; } #ifdef COPY_PROTOCOL Py_C_Function( mxCharSet_copy, "copy([memo])\n\n" "Return a new reference for the instance. This function\n" "is used for the copy-protocol. Real copying doesn't take\n" "place, since the instances are immutable.") { PyObject *memo; Py_GetArg("|O", memo); Py_INCREF(cs); return (PyObject *)cs; onError: return NULL; } #endif #undef cs /* --- slots --- */ static PyObject *mxCharSet_Repr(PyObject *obj) { mxCharSetObject *self = (mxCharSetObject *)obj; PyObject *v; char t[500], *reprstr; v = PyObject_Repr(self->definition); if (v == NULL) return NULL; reprstr = PyString_AsString(v); if (reprstr == NULL) return NULL; sprintf(t, "", reprstr, (long)self); Py_DECREF(v); return PyString_FromString(t); } static PyObject *mxCharSet_GetAttr(PyObject *obj, char *name) { mxCharSetObject *self = (mxCharSetObject *)obj; PyObject *v; if (Py_WantAttr(name,"definition")) { v = self->definition; Py_INCREF(v); return v; } else if (Py_WantAttr(name,"__members__")) return Py_BuildValue("[s]", "definition"); return Py_FindMethod(mxCharSet_Methods, (PyObject *)self, (char *)name); } /* Python Type Tables */ static PySequenceMethods mxCharSet_TypeAsSequence = { 0, /*sq_length*/ 0, /*sq_concat*/ 0, /*sq_repeat*/ 0, /*sq_item*/ 0, /*sq_slice*/ 0, /*sq_ass_item*/ 0, /*sq_ass_slice*/ #if PY_VERSION_HEX >= 0x02000000 mxCharSet_Contains, /*sq_contains*/ #endif }; PyTypeObject mxCharSet_Type = { PyObject_HEAD_INIT(0) /* init at startup ! */ 0, /* ob_size */ "Character Set", /* tp_name */ sizeof(mxCharSetObject), /* tp_basicsize */ 0, /* tp_itemsize */ /* methods */ (destructor)mxCharSet_Free, /* tp_dealloc */ 0, /* tp_print */ mxCharSet_GetAttr, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_compare */ mxCharSet_Repr, /* tp_repr */ 0, /* tp_as_number */ &mxCharSet_TypeAsSequence, /* tp_as_sequence */ 0, /* tp_as_mapping */ 0, /* tp_hash */ 0, /* tp_call */ 0, /* tp_str */ 0, /* tp_getattro */ 0, /* tp_setattro */ 0, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT, /* tp_flags */ 0, /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ 0, /* tp_richcompare */ 0, /* tp_weaklistoffset */ 0, /* tp_iter */ 0, /* tp_iternext */ mxCharSet_Methods, /* tp_methods */ 0, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ 0, /* tp_init */ 0, /* tp_alloc */ 0, /* tp_new */ 0, /* tp_free */ }; /* Python Method Table */ statichere PyMethodDef mxCharSet_Methods[] = { Py_MethodListEntry("contains",mxCharSet_contains), Py_MethodListEntry("search",mxCharSet_search), Py_MethodListEntry("match",mxCharSet_match), Py_MethodListEntry("strip",mxCharSet_strip), Py_MethodListEntry("split",mxCharSet_split), Py_MethodListEntry("splitx",mxCharSet_splitx), #ifdef COPY_PROTOCOL Py_MethodListEntry("__deepcopy__",mxCharSet_copy), Py_MethodListEntry("__copy__",mxCharSet_copy), #endif {NULL,NULL} /* end of list */ }; /* --- Tag Table Object ------------------------------------------------*/ staticforward PyMethodDef mxTagTable_Methods[]; PyObject *mxTagTable_New(PyObject *definition, int tabletype, int cacheable); /* internal APIs */ static PyObject *tc_get_item(register PyObject *obj, register Py_ssize_t i) { if (PyTuple_Check(obj)) { if (i > PyTuple_GET_SIZE(obj)) return NULL; return PyTuple_GET_ITEM(obj, i); } else if (PyList_Check(obj)) { if (i > PyList_GET_SIZE(obj)) return NULL; return PyList_GET_ITEM(obj, i); } else return NULL; } static Py_ssize_t tc_length(register PyObject *obj) { if (obj == NULL) return -1; else if (PyTuple_Check(obj)) return PyTuple_GET_SIZE(obj); else if (PyList_Check(obj)) return PyList_GET_SIZE(obj); else return -1; } /* Add a jump target to the jump dictionary */ static int tc_add_jumptarget(PyObject *jumpdict, PyObject *targetname, Py_ssize_t index) { PyObject *v; v = PyDict_GetItem(jumpdict, targetname); if (v != NULL) Py_ErrorWithArg(PyExc_TypeError, "tag table entry %ld: " "jump target already defined", (long)index); v = PyInt_FromSsize_t(index); if (v == NULL) goto onError; if (PyDict_SetItem(jumpdict, targetname, v)) goto onError; Py_DECREF(v); return 0; onError: return -1; } /* Convert a string command argument to either an 8-bit string or Unicode depending on the tabletype. */ static PyObject *tc_convert_string_arg(PyObject *arg, Py_ssize_t tableposition, int tabletype, int empty_string_allowed) { /* Convert to strings */ if (tabletype == MXTAGTABLE_STRINGTYPE) { if (PyString_Check(arg)) /* pass */; #ifdef HAVE_UNICODE else if (PyUnicode_Check(arg)) { Py_DECREF(arg); arg = PyUnicode_AsEncodedString(arg, NULL, NULL); if (arg == NULL) Py_ErrorWithArg(PyExc_TypeError, "tag table entry %ld: " "conversion from Unicode to " "string failed", (long)tableposition); } #endif else Py_ErrorWithArg(PyExc_TypeError, "tag table entry %ld: " "command argument must be a " "string or unicode", (long)tableposition); if (!empty_string_allowed && PyString_Size(arg) <= 0) Py_ErrorWithArg(PyExc_TypeError, "tag table entry %ld: " "match string is empty", (long)tableposition); } #ifdef HAVE_UNICODE /* Convert to Unicode */ else if (tabletype == MXTAGTABLE_UNICODETYPE) { if (PyUnicode_Check(arg)) /* pass */; else if (PyString_Check(arg)) { Py_DECREF(arg); arg = PyUnicode_Decode(PyString_AS_STRING(arg), PyString_GET_SIZE(arg), NULL, NULL); if (arg == NULL) Py_ErrorWithArg(PyExc_TypeError, "tag table entry %ld: " "conversion from string to " "Unicode failed", (long)tableposition); } else Py_ErrorWithArg(PyExc_TypeError, "tag table entry %ld: " "command argument must be a " "string or unicode", (long)tableposition); if (!empty_string_allowed && PyUnicode_GetSize(arg) <= 0) Py_ErrorWithArg(PyExc_TypeError, "tag table entry %ld: " "match string is empty", (long)tableposition); } #endif else Py_Error(mxTextTools_Error, "unsupported table type"); return arg; onError: return NULL; } /* Cleanup any references in the tag table. */ static int tc_cleanup(mxTagTableObject *tagtable) { Py_ssize_t i; for (i = 0; i < tagtable->ob_size; i++) { mxTagTableEntry *tagtableentry = &tagtable->entry[i]; Py_XDECREF(tagtableentry->tagobj); tagtableentry->tagobj = NULL; Py_XDECREF(tagtableentry->args); tagtableentry->args = NULL; } return 0; } /* Initialize the tag table (this is the actual Tag Table compiler) */ static int init_tag_table(mxTagTableObject *tagtable, PyObject *table, Py_ssize_t size, int tabletype, int cacheable) { Py_ssize_t i; PyObject *entry; Py_ssize_t entry_len; PyObject *tagobj, *command, *args = 0, *je, *jne; PyObject *jumpdict, *v; int secondpass, own_args = 0; jumpdict = PyDict_New(); if (jumpdict == NULL) return -1; /* Reset to all fields to 0 */ memset(&tagtable->entry[0], 0, size * sizeof(mxTagTableEntry)); /* First pass */ secondpass = 0; for (i = 0; i < size; i++) { mxTagTableEntry *tagtableentry = &tagtable->entry[i]; /* Get table entry i and parse it */ entry = tc_get_item(table, i); if (entry == NULL) { Py_ErrorWithArg(PyExc_TypeError, "tag table entry %ld: " "not found or not a supported entry type", (long)i); } /* Special handling for jump marks (args is set to the jump mark string, jump target index is the next table entry) */ if (PyString_Check(entry)) { if (tc_add_jumptarget(jumpdict, entry, i + 1)) goto onError; tagtableentry->tagobj = NULL; tagtableentry->cmd = MATCH_JUMPTARGET; tagtableentry->flags = 0; Py_INCREF(entry); tagtableentry->args = entry; tagtableentry->jne = 0; tagtableentry->je = 1; continue; } /* Get entry length */ entry_len = tc_length(entry); if (entry_len < 3) { Py_ErrorWithArg(PyExc_TypeError, "tag table entry %ld: " "expected an entry of the form " "(tagobj,command,arg[,jne[,je]])", (long)i); } /* Decode entry parts: (tagobj, command, args[, jne[, je]]) */ tagobj = tc_get_item(entry, 0); command = tc_get_item(entry, 1); args = tc_get_item(entry, 2); if (entry_len >= 4) jne = tc_get_item(entry, 3); else jne = NULL; if (entry_len >= 5) je = tc_get_item(entry, 4); else je = NULL; if (tagobj == NULL || command == NULL || args == NULL || (entry_len >= 4 && jne == NULL) || (entry_len >= 5 && je == NULL)) { Py_ErrorWithArg(PyExc_TypeError, "tag table entry %ld: " "expected an entry of the form " "(tagobj,command,arg[,jne[,je]])", (long)i); } /* Store tagobj, None gets converted to NULL */ if (tagobj != Py_None) Py_INCREF(tagobj); else tagobj = NULL; tagtableentry->tagobj = tagobj; /* Decode command and flags */ Py_AssertWithArg(PyInt_Check(command), PyExc_TypeError, "tag table entry %ld: " "command must be an integer", (long)i); tagtableentry->cmd = PyInt_AS_LONG(command) & 0xFF; tagtableentry->flags = PyInt_AS_LONG(command) - tagtableentry->cmd; /* Check command arguments */ Py_INCREF(args); own_args = 1; switch (tagtableentry->cmd) { case MATCH_JUMP: /* == MATCH_FAIL */ case MATCH_EOF: case MATCH_LOOP: /* args is ignored */ break; case MATCH_SKIP: case MATCH_MOVE: case MATCH_LOOPCONTROL: Py_AssertWithArg(PyInt_Check(args), PyExc_TypeError, "tag table entry %ld: " "Skip|Move|LoopControl command argument " "must be an integer", (long)i); break; case MATCH_JUMPTARGET: Py_AssertWithArg(PyString_Check(args), PyExc_TypeError, "tag table entry %ld: " "JumpMark command argument must be a string", (long)i); if (tc_add_jumptarget(jumpdict, args, i + 1)) goto onError; break; case MATCH_ALLIN: case MATCH_ALLNOTIN: case MATCH_IS: case MATCH_ISNOT: case MATCH_ISIN: case MATCH_ISNOTIN: case MATCH_WORD: case MATCH_WORDSTART: case MATCH_WORDEND: args = tc_convert_string_arg(args, i, tabletype, 0); if (args == NULL) goto onError; break; case MATCH_ALLINSET: case MATCH_ISINSET: Py_AssertWithArg(PyString_Check(args) && PyString_GET_SIZE(args) == 32, PyExc_TypeError, "tag table entry %ld: " "AllInSet|IsInSet command argument must " "be a set() string", (long)i); break; case MATCH_ALLINCHARSET: case MATCH_ISINCHARSET: Py_AssertWithArg(mxCharSet_Check(args), PyExc_TypeError, "tag table entry %ld: " "AllInCharSet|IsInCharSet command argument must " "be a CharSet instance", (long)i); break; case MATCH_SWORDSTART: /* == MATCH_NOWORD */ case MATCH_SWORDEND: case MATCH_SFINDWORD: Py_AssertWithArg(mxTextSearch_Check(args), PyExc_TypeError, "tag table entry %ld: " "sWordStart|sWordEnd|sFindWord command " "argument must be a TextSearch search " "object", (long)i); break; case MATCH_TABLE: case MATCH_SUBTABLE: Py_AssertWithArg(mxTagTable_Check(args) || PyTuple_Check(args) || PyList_Check(args) || (PyInt_Check(args) && PyInt_AS_LONG(args) == MATCH_THISTABLE), PyExc_TypeError, "tag table entry %ld: " "Table|SubTable command argument " "must be a tag table tuple/object or " "ThisTable", (long)i); /* XXX We shouldn't recursively compile tag table tuples here because this will slow down the compile process too much and it's not clear whether this particular table will ever be used during tagging. */ if (!mxTagTable_Check(args) && !PyInt_Check(args)) { Py_DECREF(args); args = mxTagTable_New(args, tabletype, cacheable); if (args == NULL) goto onError; } break; case MATCH_TABLEINLIST: case MATCH_SUBTABLEINLIST: Py_AssertWithArg(PyTuple_Check(args) && PyTuple_GET_SIZE(args) == 2 && PyList_Check(PyTuple_GET_ITEM(args, 0)) && PyInt_Check(PyTuple_GET_ITEM(args, 1)), PyExc_TypeError, "tag table entry %ld: " "TableInList|SubTableInList command argument " "must be a 2-tuple (list, integer)", (long)i); break; case MATCH_CALL: Py_AssertWithArg(PyCallable_Check(args), PyExc_TypeError, "tag table entry %ld: " "Call command argument " "must be a callable object", (long)i); break; case MATCH_CALLARG: Py_AssertWithArg(PyTuple_Check(args) && PyTuple_GET_SIZE(args) > 0 && PyCallable_Check(PyTuple_GET_ITEM(args, 0)), PyExc_TypeError, "tag table entry %ld: " "CallArg command argument " "must be a tuple (fct,[arg0,arg1,...])", (long)i); break; default: Py_ErrorWith2Args(PyExc_TypeError, "tag table entry %ld: " "unknown command integer: %i", (long)i, tagtableentry->cmd); } /* Store command args */ tagtableentry->args = args; own_args = 0; /* Decode jump offsets */ if (jne) { if (PyInt_Check(jne)) tagtableentry->jne = PyInt_AS_LONG(jne); else if (PyString_Check(jne)) { /* Mark for back-patching */ tagtableentry->jne = -424242; secondpass = 1; } else Py_ErrorWithArg(PyExc_TypeError, "tag table entry %ld: " "jne must be an integer or string", (long)i); } else tagtableentry->jne = 0; if (je) { if (PyInt_Check(je)) tagtableentry->je = PyInt_AS_LONG(je); else if (PyString_Check(je)) { /* Mark for back-patching */ tagtableentry->je = -424242; secondpass = 1; } else Py_ErrorWithArg(PyExc_TypeError, "tag table entry %ld: " "je must be an integer or string", (long)i); } else tagtableentry->je = 1; } /* Second pass (needed to patch string jump targets) */ if (secondpass) for (i = 0; i < size; i++) { mxTagTableEntry *tagtableentry = &tagtable->entry[i]; if (tagtableentry->je != -424242 && tagtableentry->jne != -424242) continue; /* Entry (most probably) needs back-patching */ entry = tc_get_item(table, i); if (entry == NULL) { Py_ErrorWithArg(PyExc_TypeError, "tag table entry %ld: " "unexpected error (not found)", (long)i); } /* Get entry length */ entry_len = tc_length(entry); if (entry_len < 0) { Py_ErrorWithArg(PyExc_TypeError, "tag table entry %ld: " "unexpected error (no length)", (long)i); } /* Decode jump offsets */ if (entry_len >= 4) jne = tc_get_item(entry, 3); else jne = NULL; if (entry_len >= 5) je = tc_get_item(entry, 4); else je = NULL; /* Patch jump offsets */ if (jne && PyString_Check(jne)) { v = PyDict_GetItem(jumpdict, jne); if (v == NULL || !PyInt_Check(v)) Py_ErrorWith2Args(PyExc_TypeError, "tag table entry %ld: " "jne jump target '%s' not found", (long)i, PyString_AS_STRING(jne)); tagtableentry->jne = PyInt_AS_LONG(v) - i; } if (je && PyString_Check(je)) { v = PyDict_GetItem(jumpdict, je); if (v == NULL || !PyInt_Check(v)) Py_ErrorWith2Args(PyExc_TypeError, "tag table entry %ld: " "je jump target '%s' not found", (long)i, PyString_AS_STRING(je)); tagtableentry->je = PyInt_AS_LONG(v) - i; } } Py_DECREF(jumpdict); return 0; onError: if (own_args) { Py_XDECREF(args); } return -1; } /* Check the cache for an already compiled TagTable for this definition. Return NULL in case of an error, Py_None without INCREF in case no such table was found or the TagTable object. */ static PyObject *consult_tagtable_cache(PyObject *definition, int tabletype, int cacheable) { PyObject *v, *key, *tt; if (!PyTuple_Check(definition) || !cacheable) return Py_None; key = PyTuple_New(2); if (key == NULL) goto onError; v = PyInt_FromLong((long) definition); if (v == NULL) goto onError; PyTuple_SET_ITEM(key, 0, v); v = PyInt_FromLong(tabletype); if (v == NULL) goto onError; PyTuple_SET_ITEM(key, 1, v); tt = PyDict_GetItem(mxTextTools_TagTables, key); Py_DECREF(key); if (tt != NULL) { Py_INCREF(tt); return tt; } return Py_None; onError: return NULL; } /* Adds the compiled tagtable to the cache. Returns -1 in case of an error, 0 on success. */ static int add_to_tagtable_cache(PyObject *definition, int tabletype, int cacheable, PyObject *tagtable) { PyObject *v, *key; int rc; if (!PyTuple_Check(definition) || !cacheable) return 0; key = PyTuple_New(2); if (key == NULL) goto onError; v = PyInt_FromLong((long) definition); if (v == NULL) goto onError; PyTuple_SET_ITEM(key, 0, v); v = PyInt_FromLong(tabletype); if (v == NULL) goto onError; PyTuple_SET_ITEM(key, 1, v); /* Hard-limit the cache size */ if (PyDict_Size(mxTextTools_TagTables) >= MAX_TAGTABLES_CACHE_SIZE) PyDict_Clear(mxTextTools_TagTables); rc = PyDict_SetItem(mxTextTools_TagTables, key, tagtable); Py_DECREF(key); if (rc) goto onError; return 0; onError: return -1; } /* allocation */ PyObject *mxTagTable_New(PyObject *definition, int tabletype, int cacheable) { mxTagTableObject *tagtable = 0; PyObject *v; Py_ssize_t size; /* First, consult the TagTable cache */ v = consult_tagtable_cache(definition, tabletype, cacheable); if (v == NULL) goto onError; else if (v != Py_None) return v; size = tc_length(definition); if (size < 0) Py_Error(PyExc_TypeError, "tag table definition must be a tuple or a list"); tagtable = PyObject_NEW_VAR(mxTagTableObject, &mxTagTable_Type, size); if (tagtable == NULL) goto onError; if (cacheable) { Py_INCREF(definition); tagtable->definition = definition; } else tagtable->definition = NULL; tagtable->tabletype = tabletype; /* Compile table ... */ if (init_tag_table(tagtable, definition, size, tabletype, cacheable)) goto onError; /* Cache the compiled table if it is cacheable and derived from a tuple */ if (add_to_tagtable_cache(definition, tabletype, cacheable, (PyObject *)tagtable)) goto onError; return (PyObject *)tagtable; onError: Py_XDECREF(tagtable); return NULL; } Py_C_Function( mxTagTable_TagTable, "TagTable(definition[,cachable=1])\n\n" ) { PyObject *definition; int cacheable = 1; Py_Get2Args("O|i:TagTable", definition, cacheable); return mxTagTable_New(definition, 0, cacheable); onError: return NULL; } #ifdef HAVE_UNICODE Py_C_Function( mxTagTable_UnicodeTagTable, "TagTable(definition[,cachable=1])\n\n" ) { PyObject *definition; int cacheable = 1; Py_Get2Args("O|i:UnicodeTagTable", definition, cacheable); return mxTagTable_New(definition, 1, cacheable); onError: return NULL; } #endif static void mxTagTable_Free(mxTagTableObject *tagtable) { tc_cleanup(tagtable); Py_XDECREF(tagtable->definition); PyObject_Del(tagtable); } /* C APIs */ #define tagtable ((mxTagTableObject *)self) static PyObject *mxTagTable_CompiledDefinition(PyObject *self) { PyObject *tuple = 0, *v, *w; Py_ssize_t i; Py_ssize_t size; if (!mxTagTable_Check(self)) { PyErr_BadInternalCall(); goto onError; } size = tagtable->ob_size; tuple = PyTuple_New(size); if (tuple == NULL) goto onError; for (i = 0; i < size; i++) { mxTagTableEntry *tagtableentry = &tagtable->entry[i]; /* Build tuple (tagobj, command, args, jne, je) */ v = PyTuple_New(5); if (v == NULL) goto onError; w = tagtableentry->tagobj; if (w == NULL) w = Py_None; Py_INCREF(w); PyTuple_SET_ITEM(v, 0, w); PyTuple_SET_ITEM(v, 1, PyInt_FromLong(tagtableentry->cmd | tagtableentry->flags)); w = tagtableentry->args; if (w == NULL) w = Py_None; Py_INCREF(w); PyTuple_SET_ITEM(v, 2, w); PyTuple_SET_ITEM(v, 3, PyInt_FromSsize_t(tagtableentry->jne)); PyTuple_SET_ITEM(v, 4, PyInt_FromSsize_t(tagtableentry->je)); if (PyErr_Occurred()) { Py_DECREF(v); goto onError; } PyTuple_SET_ITEM(tuple, i, v); } return tuple; onError: Py_XDECREF(tuple); return NULL; } /* methods */ Py_C_Function( mxTagTable_compiled, ".compiled()\n\n" ) { Py_NoArgsCheck(); return mxTagTable_CompiledDefinition(self); onError: return NULL; } #ifdef COPY_PROTOCOL Py_C_Function( mxTagTable_copy, "copy([memo])\n\n" "Return a new reference for the instance. This function\n" "is used for the copy-protocol. Real copying doesn't take\n" "place, since the instances are immutable.") { PyObject *memo; Py_GetArg("|O", memo); Py_INCREF(tagtable); return (PyObject *)tagtable; onError: return NULL; } #endif #undef tagtable /* --- slots --- */ static PyObject *mxTagTable_Repr(PyObject *obj) { mxTagTableObject *self = (mxTagTableObject *)obj; char t[100]; if (self->tabletype == MXTAGTABLE_STRINGTYPE) sprintf(t,"", (long)self); else if (self->tabletype == MXTAGTABLE_UNICODETYPE) sprintf(t,"", (long)self); else sprintf(t,"", (long)self); return PyString_FromString(t); } static PyObject *mxTagTable_GetAttr(PyObject *obj, char *name) { mxTagTableObject *self = (mxTagTableObject *)obj; PyObject *v; if (Py_WantAttr(name,"definition")) { v = self->definition; if (v == NULL) v = Py_None; Py_INCREF(v); return v; } else if (Py_WantAttr(name,"__members__")) return Py_BuildValue("[s]", "definition"); return Py_FindMethod(mxTagTable_Methods, (PyObject *)self, (char *)name); } /* Python Type Tables */ PyTypeObject mxTagTable_Type = { PyObject_HEAD_INIT(0) /* init at startup ! */ 0, /* ob_size */ "Tag Table", /* tp_name */ sizeof(mxTagTableObject), /* tp_basicsize */ sizeof(mxTagTableEntry), /* tp_itemsize */ /* methods */ (destructor)mxTagTable_Free, /* tp_dealloc */ 0, /* tp_print */ mxTagTable_GetAttr, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_compare */ mxTagTable_Repr, /* tp_repr */ 0, /* tp_as_number */ 0, /* tp_as_sequence */ 0, /* tp_as_mapping */ 0, /* tp_hash */ 0, /* tp_call */ 0, /* tp_str */ 0, /* tp_getattro */ 0, /* tp_setattro */ 0, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT, /* tp_flags */ 0, /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ 0, /* tp_richcompare */ 0, /* tp_weaklistoffset */ 0, /* tp_iter */ 0, /* tp_iternext */ mxTagTable_Methods, /* tp_methods */ 0, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ 0, /* tp_init */ 0, /* tp_alloc */ 0, /* tp_new */ 0, /* tp_free */ }; /* Python Method Table */ statichere PyMethodDef mxTagTable_Methods[] = { Py_MethodListEntryNoArgs("compiled",mxTagTable_compiled), #ifdef COPY_PROTOCOL Py_MethodListEntry("__deepcopy__",mxTagTable_copy), Py_MethodListEntry("__copy__",mxTagTable_copy), #endif {NULL,NULL} /* end of list */ }; /* --- Internal functions ----------------------------------------------*/ #ifdef HAVE_UNICODE /* Same as mxTextTools_Join() for Unicode objects. */ static PyObject *mxTextTools_UnicodeJoin(PyObject *seq, Py_ssize_t start, Py_ssize_t stop, PyObject *separator) { PyObject *newstring = 0, *tempstr = 0; Py_ssize_t newstring_len,current_len = 0; Py_UNICODE *p; Py_ssize_t i; Py_UNICODE *sep; Py_ssize_t sep_len; if (separator) { separator = PyUnicode_FromObject(separator); if (separator == NULL) goto onError; sep = PyUnicode_AS_UNICODE(separator); sep_len = PyUnicode_GET_SIZE(separator); } else { sep = NULL; sep_len = 0; } /* Create an empty new string */ newstring_len = (10 + sep_len) * (stop - start); newstring = PyUnicode_FromUnicode(NULL, newstring_len); if (newstring == NULL) goto onError; p = PyUnicode_AS_UNICODE(newstring); /* Join with separator */ for (i = start; i < stop; i++) { register PyObject *o; Py_UNICODE *st; Py_ssize_t len_st; o = PySequence_GetItem(seq, i); if PyTuple_Check(o) { /* Tuple entry: (string,l,r,[...]) */ register Py_ssize_t l,r; /* parse tuple */ Py_Assert((PyTuple_GET_SIZE(o) >= 3) && PyInt_Check(PyTuple_GET_ITEM(o,1)) && PyInt_Check(PyTuple_GET_ITEM(o,2)), PyExc_TypeError, "tuples must be of the format (string,l,r[,...])"); tempstr = PyUnicode_FromObject(PyTuple_GET_ITEM(o,0)); if (tempstr == NULL) goto onError; st = PyUnicode_AS_UNICODE(tempstr); len_st = PyUnicode_GET_SIZE(tempstr); l = PyInt_AS_LONG(PyTuple_GET_ITEM(o,1)); r = PyInt_AS_LONG(PyTuple_GET_ITEM(o,2)); /* compute slice */ if (r > len_st) r = len_st; else if (r < 0) { r += len_st + 1; if (r < 0) r = 0; } if (l > len_st) l = len_st; else if (l < 0) { l += len_st + 1; if (l < 0) l = 0; } /* empty ? */ if (l > r) continue; len_st = r - l; if (len_st == 0) continue; /* get pointer right */ st += l; } else { /* Must be a string entry: take the whole string */ tempstr = PyUnicode_FromObject(o); if (tempstr == NULL) goto onError; st = PyUnicode_AS_UNICODE(tempstr); len_st = PyUnicode_GET_SIZE(tempstr); } Py_DECREF(o); /* Resize the new string if needed */ while (current_len + len_st + sep_len >= newstring_len) { newstring_len += newstring_len >> 1; if (PyUnicode_Resize(&newstring, newstring_len)) goto onError; p = PyUnicode_AS_UNICODE(newstring) + current_len; } /* Insert separator */ if (i > 0 && sep_len > 0) { Py_UNICODE_COPY(p, sep, sep_len); p += sep_len; current_len += sep_len; } /* Copy snippet into new string */ Py_UNICODE_COPY(p, st, len_st); p += len_st; current_len += len_st; Py_DECREF(tempstr); tempstr = NULL; } /* Resize new string to the actual length */ if (PyUnicode_Resize(&newstring, current_len)) goto onError; Py_XDECREF(separator); return newstring; onError: Py_XDECREF(newstring); Py_XDECREF(separator); Py_XDECREF(tempstr); return NULL; } #endif /* Enhanced string join: also excepts tuple (text, left, right,...) entries which then cause text[left:right] to be used as string snippet. separator may be NULL; in that case, "" is used as separator. */ static PyObject *mxTextTools_Join(PyObject *seq, Py_ssize_t start, Py_ssize_t stop, PyObject *separator) { PyObject *newstring = 0; Py_ssize_t newstring_len, current_len = 0; char *p; Py_ssize_t i; char *sep; Py_ssize_t sep_len; if (separator) { #ifdef HAVE_UNICODE if (PyUnicode_Check(separator)) return mxTextTools_UnicodeJoin(seq, start, stop, separator); #endif Py_Assert(PyString_Check(separator), PyExc_TypeError, "separator must be a string"); sep = PyString_AS_STRING(separator); sep_len = PyString_GET_SIZE(separator); } else { sep = NULL; sep_len = 0; } /* Create an empty new string */ newstring_len = (10 + sep_len) * (stop - start); newstring = PyString_FromStringAndSize((char*)NULL, newstring_len); if (newstring == NULL) goto onError; p = PyString_AS_STRING(newstring); /* Join with separator */ for (i = start; i < stop; i++) { register PyObject *o; char *st; Py_ssize_t len_st; o = PySequence_GetItem(seq, i); if PyTuple_Check(o) { /* Tuple entry: (string,l,r,[...]) */ register Py_ssize_t l,r; /* parse tuple */ Py_Assert((PyTuple_GET_SIZE(o) >= 3) && PyInt_Check(PyTuple_GET_ITEM(o,1)) && PyInt_Check(PyTuple_GET_ITEM(o,2)), PyExc_TypeError, "tuples must be of the format (string,int,int[,...])"); #ifdef HAVE_UNICODE if (PyUnicode_Check(PyTuple_GET_ITEM(o,0))) { /* Redirect to Unicode implementation; all previous work is lost. */ Py_DECREF(o); Py_DECREF(newstring); return mxTextTools_UnicodeJoin(seq, start, stop, separator); } #endif Py_Assert(PyString_Check(PyTuple_GET_ITEM(o,0)), PyExc_TypeError, "tuples must be of the format (string,int,int[,...])"); st = PyString_AS_STRING(PyTuple_GET_ITEM(o,0)); len_st = PyString_GET_SIZE(PyTuple_GET_ITEM(o,0)); l = PyInt_AS_LONG(PyTuple_GET_ITEM(o,1)); r = PyInt_AS_LONG(PyTuple_GET_ITEM(o,2)); /* compute slice */ if (r > len_st) r = len_st; else if (r < 0) { r += len_st + 1; if (r < 0) r = 0; } if (l > len_st) l = len_st; else if (l < 0) { l += len_st + 1; if (l < 0) l = 0; } /* empty ? */ if (l > r) continue; len_st = r - l; if (len_st == 0) continue; /* get pointer right */ st += l; } else if (PyString_Check(o)) { /* String entry: take the whole string */ st = PyString_AS_STRING(o); len_st = PyString_GET_SIZE(o); } #ifdef HAVE_UNICODE else if (PyUnicode_Check(o)) { /* Redirect to Unicode implementation; all previous work is lost. */ Py_DECREF(o); Py_DECREF(newstring); return mxTextTools_UnicodeJoin(seq, start, stop, separator); } #endif else { Py_DECREF(o); Py_Error(PyExc_TypeError, "list must contain tuples or strings as entries"); } Py_DECREF(o); /* Resize the new string if needed */ while (current_len + len_st + sep_len >= newstring_len) { newstring_len += newstring_len >> 1; if (_PyString_Resize(&newstring, newstring_len)) goto onError; p = PyString_AS_STRING(newstring) + current_len; } /* Insert separator */ if (i > 0 && sep_len > 0) { memcpy(p, sep, sep_len); p += sep_len; current_len += sep_len; } /* Copy snippet into new string */ memcpy(p,st,len_st); p += len_st; current_len += len_st; } /* Resize new string to the actual length */ if (_PyString_Resize(&newstring, current_len)) goto onError; return newstring; onError: Py_XDECREF(newstring); return NULL; } static PyObject *mxTextTools_HexStringFromString(char *str, Py_ssize_t len) { PyObject *w = 0; Py_ssize_t i; char *hex; static const char hexdigits[] = "0123456789abcdef"; /* Convert to HEX */ w = PyString_FromStringAndSize(NULL,2*len); if (!w) goto onError; hex = PyString_AS_STRING(w); for (i = 0; i < len; i ++) { unsigned char c = (unsigned char)*str; *hex++ = hexdigits[c >> 4]; *hex++ = hexdigits[c & 0x0F]; str++; } return w; onError: Py_XDECREF(w); return NULL; } static PyObject *mxTextTools_StringFromHexString(char *hex, Py_ssize_t len) { PyObject *w = 0; Py_ssize_t i; char *str; static const char hexdigits[] = "0123456789abcdef"; /* Convert to string */ Py_Assert(len % 2 == 0, PyExc_TypeError, "need 2-digit hex string argument"); len >>= 1; w = PyString_FromStringAndSize(NULL,len); if (!w) goto onError; str = PyString_AS_STRING(w); for (i = 0; i < len; i++,str++) { register char c; register int j; c = tolower(*hex++); for (j = 0; j < (int)sizeof(hexdigits); j++) if (c == hexdigits[j]) { *str = j << 4; break; } if (j == sizeof(hexdigits)) { DPRINTF("Failed: '%c' (%u) at %i\n",c,(unsigned int)c,i); Py_Error(PyExc_ValueError, "argument contains non-hex characters"); } c = tolower(*hex++); for (j = 0; j < (int)sizeof(hexdigits); j++) if (c == hexdigits[j]) { *str += j; break; } if (j == sizeof(hexdigits)) { DPRINTF("Failed2: '%c' (%u) at %i\n",c,(unsigned int)c,i); Py_Error(PyExc_ValueError, "argument contains non-hex characters"); } } return w; onError: Py_XDECREF(w); return NULL; } static int mxTextTools_IsASCII(PyObject *text, Py_ssize_t left, Py_ssize_t right) { if (PyString_Check(text)) { Py_ssize_t len; register Py_ssize_t i; register unsigned char *str = (unsigned char *)PyString_AS_STRING(text); len = PyString_GET_SIZE(text); Py_CheckSequenceSlice(len, left, right); for (i = left; i < right; i++) if (str[i] >= 128) return 0; return 1; } #ifdef HAVE_UNICODE else if (PyUnicode_Check(text)) { Py_ssize_t len; register Py_ssize_t i; register Py_UNICODE *str = PyUnicode_AS_UNICODE(text); len = PyUnicode_GET_SIZE(text); Py_CheckSequenceSlice(len, left, right); for (i = left; i < right; i++) if (str[i] >= 128) return 0; return 1; } #endif else Py_Error(PyExc_TypeError, "need string object"); onError: return -1; } /* Takes a list of tuples (replacement,l,r,...) and produces a taglist suitable for mxTextTools_Join() which creates a copy of text where every slice [l:r] is replaced by the given replacement. */ static PyObject *mxTextTools_Joinlist(PyObject *text, PyObject *list, Py_ssize_t pos, Py_ssize_t text_len) { PyObject *joinlist = 0; Py_ssize_t list_len; Py_ssize_t i; Py_ssize_t listitem = 0; Py_ssize_t listsize = INITIAL_LIST_SIZE; if (PyString_Check(text)) { Py_CheckStringSlice(text, pos, text_len); } #ifdef HAVE_UNICODE else if (PyUnicode_Check(text)) { Py_CheckUnicodeSlice(text, pos, text_len); } #endif else Py_Error(PyExc_TypeError, "expected string or unicode"); Py_Assert(PyList_Check(list), PyExc_TypeError, "expected a list of tuples as second argument"); list_len = PyList_GET_SIZE(list); joinlist = PyList_New(listsize); if (joinlist == NULL) goto onError; for (i = 0; i < list_len; i++) { register PyObject *t; register Py_ssize_t left, right; t = PyList_GET_ITEM(list, i); Py_Assert(PyTuple_Check(t) && (PyTuple_GET_SIZE(t) >= 3) && (PyString_Check(PyTuple_GET_ITEM(t,0)) || PyUnicode_Check(PyTuple_GET_ITEM(t,0))) && PyInt_Check(PyTuple_GET_ITEM(t,1)) && PyInt_Check(PyTuple_GET_ITEM(t,2)), PyExc_TypeError, "tuples must be of the form (string,int,int,...)"); left = PyInt_AS_LONG(PyTuple_GET_ITEM(t,1)); right = PyInt_AS_LONG(PyTuple_GET_ITEM(t,2)); Py_Assert(left >= pos, PyExc_ValueError, "list is not sorted ascending"); if (left > pos) { /* joinlist.append((text,pos,left)) */ register PyObject *v; register PyObject *w; v = PyTuple_New(3); if (v == NULL) goto onError; Py_INCREF(text); PyTuple_SET_ITEM(v,0,text); w = PyInt_FromSsize_t(pos); if (w == NULL) goto onError; PyTuple_SET_ITEM(v,1,w); w = PyTuple_GET_ITEM(t,1); Py_INCREF(w); PyTuple_SET_ITEM(v,2,w); if (listitem < listsize) PyList_SET_ITEM(joinlist,listitem,v); else { PyList_Append(joinlist,v); Py_DECREF(v); } listitem++; } /* joinlist.append(string) */ if (listitem < listsize) { register PyObject *v = PyTuple_GET_ITEM(t,0); Py_INCREF(v); PyList_SET_ITEM(joinlist,listitem,v); } else PyList_Append(joinlist,PyTuple_GET_ITEM(t,0)); listitem++; pos = right; } if (pos < text_len) { /* joinlist.append((text,pos,text_len)) */ register PyObject *v; register PyObject *w; v = PyTuple_New(3); if (v == NULL) goto onError; Py_INCREF(text); PyTuple_SET_ITEM(v,0,text); w = PyInt_FromSsize_t(pos); if (w == NULL) goto onError; PyTuple_SET_ITEM(v,1,w); w = PyInt_FromSsize_t(text_len); if (w == NULL) goto onError; PyTuple_SET_ITEM(v,2,w); if (listitem < listsize) PyList_SET_ITEM(joinlist,listitem,v); else { PyList_Append(joinlist,v); Py_DECREF(v); } listitem++; } /* Resize list if necessary */ if (listitem < listsize) PyList_SetSlice(joinlist,listitem,listsize,(PyObject*)NULL); return joinlist; onError: Py_XDECREF(joinlist); return NULL; } #ifdef HAVE_UNICODE static PyObject *mxTextTools_UnicodeCharSplit(PyObject *text, PyObject *separator, Py_ssize_t start, Py_ssize_t text_len) { PyObject *list = NULL; register Py_ssize_t x; Py_ssize_t listitem = 0; Py_ssize_t listsize = INITIAL_LIST_SIZE; Py_UNICODE *tx; Py_UNICODE sep; text = PyUnicode_FromObject(text); if (text == NULL) { separator = NULL; goto onError; } separator = PyUnicode_FromObject(separator); if (separator == NULL) goto onError; Py_CheckUnicodeSlice(text, start, text_len); Py_Assert(PyUnicode_GET_SIZE(separator) == 1, PyExc_TypeError, "separator must be a single character"); tx = PyUnicode_AS_UNICODE(text); sep = *PyUnicode_AS_UNICODE(separator); list = PyList_New(listsize); if (!list) goto onError; x = start; while (1) { PyObject *s; register Py_ssize_t z; /* Skip to next separator */ z = x; for (;x < text_len; x++) if (tx[x] == sep) break; /* Append the slice to list */ s = PyUnicode_FromUnicode(&tx[z], x - z); if (!s) goto onError; if (listitem < listsize) PyList_SET_ITEM(list,listitem,s); else { PyList_Append(list,s); Py_DECREF(s); } listitem++; if (x == text_len) break; /* Skip separator */ x++; } /* Resize list if necessary */ if (listitem < listsize) PyList_SetSlice(list,listitem,listsize,(PyObject*)NULL); Py_DECREF(text); Py_DECREF(separator); return list; onError: Py_XDECREF(list); Py_XDECREF(text); Py_XDECREF(separator); return NULL; } #endif static PyObject *mxTextTools_CharSplit(PyObject *text, PyObject *separator, Py_ssize_t start, Py_ssize_t text_len) { PyObject *list = 0; register Py_ssize_t x; Py_ssize_t listitem = 0; Py_ssize_t listsize = INITIAL_LIST_SIZE; char *tx; char sep; #ifdef HAVE_UNICODE if (PyUnicode_Check(text) || PyUnicode_Check(separator)) return mxTextTools_UnicodeCharSplit(text, separator, start, text_len); #endif if (PyString_Check(text) && PyString_Check(separator)) { Py_CheckStringSlice(text, start, text_len); } else Py_Error(PyExc_TypeError, "text and separator must be strings or unicode"); Py_Assert(PyString_GET_SIZE(separator) == 1, PyExc_TypeError, "separator must be a single character"); tx = PyString_AS_STRING(text); sep = *PyString_AS_STRING(separator); list = PyList_New(listsize); if (!list) goto onError; x = start; while (1) { PyObject *s; register Py_ssize_t z; /* Skip to next separator */ z = x; for (;x < text_len; x++) if (tx[x] == sep) break; /* Append the slice to list */ s = PyString_FromStringAndSize(&tx[z], x - z); if (!s) goto onError; if (listitem < listsize) PyList_SET_ITEM(list,listitem,s); else { PyList_Append(list,s); Py_DECREF(s); } listitem++; if (x == text_len) break; /* Skip separator */ x++; } /* Resize list if necessary */ if (listitem < listsize) PyList_SetSlice(list,listitem,listsize,(PyObject*)NULL); return list; onError: Py_XDECREF(list); return NULL; } #ifdef HAVE_UNICODE static PyObject *mxTextTools_UnicodeSplitAt(PyObject *text, PyObject *separator, Py_ssize_t nth, Py_ssize_t start, Py_ssize_t text_len) { PyObject *tuple = 0; register Py_ssize_t x; PyObject *s; Py_UNICODE *tx; Py_UNICODE sep; text = PyUnicode_FromObject(text); if (text == NULL) { separator = NULL; goto onError; } separator = PyUnicode_FromObject(separator); if (separator == NULL) goto onError; Py_CheckUnicodeSlice(text, start, text_len); Py_Assert(PyUnicode_GET_SIZE(separator) == 1, PyExc_TypeError, "separator must be a single character"); tx = PyUnicode_AS_UNICODE(text); sep = *PyUnicode_AS_UNICODE(separator); tuple = PyTuple_New(2); if (!tuple) goto onError; if (nth > 0) { /* Skip to nth separator from the left */ x = start; while (1) { for (; x < text_len; x++) if (tx[x] == sep) break; if (--nth == 0 || x == text_len) break; x++; } } else if (nth < 0) { /* Skip to nth separator from the right */ x = text_len - 1; while (1) { for (; x >= start; x--) if (tx[x] == sep) break; if (++nth == 0 || x < start) break; x--; } } else Py_Error(PyExc_ValueError, "nth must be non-zero"); /* Add to tuple */ if (x < start) s = PyUnicode_FromUnicode((Py_UNICODE *)"", 0); else s = PyUnicode_FromUnicode(&tx[start], x - start); if (!s) goto onError; PyTuple_SET_ITEM(tuple,0,s); /* Skip separator */ x++; if (x >= text_len) s = PyUnicode_FromUnicode((Py_UNICODE *)"", 0); else s = PyUnicode_FromUnicode(&tx[x], text_len - x); if (!s) goto onError; PyTuple_SET_ITEM(tuple,1,s); Py_DECREF(text); Py_DECREF(separator); return tuple; onError: Py_XDECREF(tuple); Py_XDECREF(text); Py_XDECREF(separator); return NULL; } #endif static PyObject *mxTextTools_SplitAt(PyObject *text, PyObject *separator, Py_ssize_t nth, Py_ssize_t start, Py_ssize_t text_len) { PyObject *tuple = 0; register Py_ssize_t x; PyObject *s; char *tx; char sep; #ifdef HAVE_UNICODE if (PyUnicode_Check(text) || PyUnicode_Check(separator)) return mxTextTools_UnicodeSplitAt(text, separator, nth, start, text_len); #endif if (PyString_Check(text) && PyString_Check(separator)) { Py_CheckStringSlice(text, start, text_len); } else Py_Error(PyExc_TypeError, "text and separator must be strings or unicode"); Py_Assert(PyString_GET_SIZE(separator) == 1, PyExc_TypeError, "separator must be a single character"); tx = PyString_AS_STRING(text); sep = *PyString_AS_STRING(separator); tuple = PyTuple_New(2); if (!tuple) goto onError; if (nth > 0) { /* Skip to nth separator from the left */ x = start; while (1) { for (; x < text_len; x++) if (tx[x] == sep) break; if (--nth == 0 || x == text_len) break; x++; } } else if (nth < 0) { /* Skip to nth separator from the right */ x = text_len - 1; while (1) { for (; x >= start; x--) if (tx[x] == sep) break; if (++nth == 0 || x < start) break; x--; } } else Py_Error(PyExc_ValueError, "nth must be non-zero"); /* Add to tuple */ if (x < start) s = PyString_FromStringAndSize("",0); else s = PyString_FromStringAndSize(&tx[start], x - start); if (!s) goto onError; PyTuple_SET_ITEM(tuple,0,s); /* Skip separator */ x++; if (x >= text_len) s = PyString_FromStringAndSize("",0); else s = PyString_FromStringAndSize(&tx[x], text_len - x); if (!s) goto onError; PyTuple_SET_ITEM(tuple,1,s); return tuple; onError: Py_XDECREF(tuple); return NULL; } #ifdef HAVE_UNICODE static PyObject *mxTextTools_UnicodeSuffix(PyObject *text, PyObject *suffixes, Py_ssize_t start, Py_ssize_t text_len, PyObject *translate) { Py_ssize_t i; Py_UNICODE *tx; text = PyUnicode_FromObject(text); if (text == NULL) goto onError; if (PyUnicode_Check(text)) { Py_CheckUnicodeSlice(text, start, text_len); } else Py_Error(PyExc_TypeError, "expected unicode"); Py_Assert(PyTuple_Check(suffixes), PyExc_TypeError, "suffixes needs to be a tuple of unicode strings"); /* XXX Add support for translate... */ Py_Assert(translate == NULL, PyExc_TypeError, "translate is not supported for Unicode suffix()es"); tx = PyUnicode_AS_UNICODE(text); for (i = 0; i < PyTuple_GET_SIZE(suffixes); i++) { PyObject *suffix = PyTuple_GET_ITEM(suffixes,i); Py_ssize_t start_cmp; suffix = PyUnicode_FromObject(suffix); if (suffix == NULL) goto onError; start_cmp = text_len - PyUnicode_GET_SIZE(suffix); if (start_cmp >= start && PyUnicode_AS_UNICODE(suffix)[0] == tx[start_cmp] && memcmp(PyUnicode_AS_UNICODE(suffix), &tx[start_cmp], PyUnicode_GET_DATA_SIZE(suffix)) == 0) { Py_DECREF(text); return suffix; } Py_DECREF(suffix); } Py_DECREF(text); Py_ReturnNone(); onError: Py_XDECREF(text); return NULL; } #endif static PyObject *mxTextTools_Suffix(PyObject *text, PyObject *suffixes, Py_ssize_t start, Py_ssize_t text_len, PyObject *translate) { Py_ssize_t i; char *tx; #ifdef HAVE_UNICODE if (PyUnicode_Check(text)) return mxTextTools_UnicodeSuffix(text, suffixes, start, text_len, translate); #endif if (PyString_Check(text)) { Py_CheckStringSlice(text, start, text_len); } else Py_Error(PyExc_TypeError, "expected string or unicode"); Py_Assert(PyTuple_Check(suffixes), PyExc_TypeError, "suffixes needs to be a tuple of strings"); tx = PyString_AS_STRING(text); if (translate) { char *tr; Py_Assert(PyString_Check(translate) && PyString_GET_SIZE(translate) == 256, PyExc_TypeError, "translate must be a string having 256 characters"); tr = PyString_AS_STRING(translate); for (i = 0; i < PyTuple_GET_SIZE(suffixes); i++) { PyObject *suffix = PyTuple_GET_ITEM(suffixes, i); Py_ssize_t start_cmp; register char *s; register char *t; register Py_ssize_t j; Py_AssertWithArg(PyString_Check(suffix), PyExc_TypeError, "tuple entry %ld is not a string", (long)i); start_cmp = text_len - PyString_GET_SIZE(suffix); if (start_cmp < start) continue; /* Do the compare using a translate table */ s = PyString_AS_STRING(suffix); t = tx + start_cmp; for (j = start_cmp; j < text_len; j++, s++, t++) if (*s != tr[(unsigned char)*t]) break; if (j == text_len) { Py_INCREF(suffix); return suffix; } } } else for (i = 0; i < PyTuple_GET_SIZE(suffixes); i++) { PyObject *suffix = PyTuple_GET_ITEM(suffixes,i); Py_ssize_t start_cmp; Py_AssertWithArg(PyString_Check(suffix), PyExc_TypeError, "tuple entry %ld is not a string", (long)i); start_cmp = text_len - PyString_GET_SIZE(suffix); if (start_cmp < start) continue; /* Compare without translate table */ if (PyString_AS_STRING(suffix)[0] == tx[start_cmp] && strncmp(PyString_AS_STRING(suffix), &tx[start_cmp], PyString_GET_SIZE(suffix)) == 0) { Py_INCREF(suffix); return suffix; } } Py_ReturnNone(); onError: return NULL; } #ifdef HAVE_UNICODE static PyObject *mxTextTools_UnicodePrefix(PyObject *text, PyObject *prefixes, Py_ssize_t start, Py_ssize_t text_len, PyObject *translate) { Py_ssize_t i; Py_UNICODE *tx; text = PyUnicode_FromObject(text); if (text == NULL) goto onError; if (PyUnicode_Check(text)) { Py_CheckUnicodeSlice(text, start, text_len); } else Py_Error(PyExc_TypeError, "expected unicode"); Py_Assert(PyTuple_Check(prefixes), PyExc_TypeError, "prefixes needs to be a tuple of unicode strings"); /* XXX Add support for translate... */ Py_Assert(translate == NULL, PyExc_TypeError, "translate is not supported for Unicode prefix()es"); tx = PyUnicode_AS_UNICODE(text); for (i = 0; i < PyTuple_GET_SIZE(prefixes); i++) { PyObject *prefix = PyTuple_GET_ITEM(prefixes,i); prefix = PyUnicode_FromObject(prefix); if (prefix == NULL) goto onError; /* Compare without translate table */ if (start + PyString_GET_SIZE(prefix) <= text_len && PyUnicode_AS_UNICODE(prefix)[0] == tx[start] && memcmp(PyUnicode_AS_UNICODE(prefix), &tx[start], PyUnicode_GET_DATA_SIZE(prefix)) == 0) { Py_INCREF(prefix); return prefix; } Py_DECREF(prefix); } Py_DECREF(text); Py_ReturnNone(); onError: Py_XDECREF(text); return NULL; } #endif static PyObject *mxTextTools_Prefix(PyObject *text, PyObject *prefixes, Py_ssize_t start, Py_ssize_t text_len, PyObject *translate) { Py_ssize_t i; char *tx; #ifdef HAVE_UNICODE if (PyUnicode_Check(text)) return mxTextTools_UnicodePrefix(text, prefixes, start, text_len, translate); #endif if (PyString_Check(text)) { Py_CheckStringSlice(text, start, text_len); } else Py_Error(PyExc_TypeError, "expected string or unicode"); Py_Assert(PyTuple_Check(prefixes), PyExc_TypeError, "prefixes needs to be a tuple of strings"); tx = PyString_AS_STRING(text); if (translate) { char *tr; Py_Assert(PyString_Check(translate) && PyString_GET_SIZE(translate) == 256, PyExc_TypeError, "translate must be a string having 256 characters"); tr = PyString_AS_STRING(translate); for (i = 0; i < PyTuple_GET_SIZE(prefixes); i++) { PyObject *prefix = PyTuple_GET_ITEM(prefixes,i); Py_ssize_t cmp_len; register char *s; register char *t; register Py_ssize_t j; Py_AssertWithArg(PyString_Check(prefix), PyExc_TypeError, "tuple entry %ld is not a string", (long)i); cmp_len = PyString_GET_SIZE(prefix); if (start + cmp_len > text_len) continue; /* Do the compare using a translate table */ s = PyString_AS_STRING(prefix); t = tx + start; for (j = 0; j < cmp_len; j++, s++, t++) if (*s != tr[(unsigned char)*t]) break; if (j == cmp_len) { Py_INCREF(prefix); return prefix; } } } else for (i = 0; i < PyTuple_GET_SIZE(prefixes); i++) { PyObject *prefix = PyTuple_GET_ITEM(prefixes,i); Py_AssertWithArg(PyString_Check(prefix), PyExc_TypeError, "tuple entry %ld is not a string", (long)i); if (start + PyString_GET_SIZE(prefix) > text_len) continue; /* Compare without translate table */ if (PyString_AS_STRING(prefix)[0] == tx[start] && strncmp(PyString_AS_STRING(prefix), &tx[start], PyString_GET_SIZE(prefix)) == 0) { Py_INCREF(prefix); return prefix; } } Py_ReturnNone(); onError: return NULL; } /* Stips off characters appearing in the character set from text[start:stop] and returns the result as Python string object. where indicates the mode: where < 0: strip left only where = 0: strip left and right where > 0: strip right only */ static PyObject *mxTextTools_SetStrip(char *tx, Py_ssize_t tx_len, char *setstr, Py_ssize_t setstr_len, Py_ssize_t start, Py_ssize_t stop, int where) { Py_ssize_t left, right; Py_Assert(setstr_len == 32, PyExc_TypeError, "separator needs to be a set as obtained from set()"); Py_CheckBufferSlice(tx_len, start, stop); /* Strip left */ if (where <= 0) { register Py_ssize_t x; for (x = start; x < stop; x++) if (!Py_CharInSet(tx[x], setstr)) break; left = x; } else left = start; /* Strip right */ if (where >= 0) { register Py_ssize_t x; for (x = stop - 1; x >= start; x--) if (!Py_CharInSet(tx[x], setstr)) break; right = x + 1; } else right = stop; return PyString_FromStringAndSize(tx + left, max(right - left, 0)); onError: return NULL; } static PyObject *mxTextTools_SetSplit(char *tx, Py_ssize_t tx_len, char *setstr, Py_ssize_t setstr_len, Py_ssize_t start, Py_ssize_t text_len) { PyObject *list = NULL; register Py_ssize_t x; Py_ssize_t listitem = 0; Py_ssize_t listsize = INITIAL_LIST_SIZE; Py_Assert(setstr_len == 32, PyExc_TypeError, "separator needs to be a set as obtained from set()"); Py_CheckBufferSlice(tx_len,start,text_len); list = PyList_New(listsize); if (!list) goto onError; x = start; while (x < text_len) { Py_ssize_t z; /* Skip all text in set */ for (;x < text_len; x++) { register unsigned int c = (unsigned char)tx[x]; register unsigned int block = (unsigned char)setstr[c >> 3]; if (!block || ((block & (1 << (c & 7))) == 0)) break; } /* Skip all text not in set */ z = x; for (;x < text_len; x++) { register unsigned int c = (unsigned char)tx[x]; register unsigned int block = (unsigned char)setstr[c >> 3]; if (block && ((block & (1 << (c & 7))) != 0)) break; } /* Append the slice to list if it is not empty */ if (x > z) { PyObject *s; s = PyString_FromStringAndSize((char *)&tx[z], x - z); if (!s) goto onError; if (listitem < listsize) PyList_SET_ITEM(list,listitem,s); else { PyList_Append(list,s); Py_DECREF(s); } listitem++; } } /* Resize list if necessary */ if (listitem < listsize) PyList_SetSlice(list,listitem,listsize,(PyObject*)NULL); return list; onError: Py_XDECREF(list); return NULL; } static PyObject *mxTextTools_SetSplitX(char *tx, Py_ssize_t tx_len, char *setstr, Py_ssize_t setstr_len, Py_ssize_t start, Py_ssize_t text_len) { PyObject *list = NULL; register Py_ssize_t x; Py_ssize_t listitem = 0; Py_ssize_t listsize = INITIAL_LIST_SIZE; Py_Assert(setstr_len == 32, PyExc_TypeError, "separator needs to be a set as obtained from set()"); Py_CheckBufferSlice(tx_len,start,text_len); list = PyList_New(listsize); if (!list) goto onError; x = start; while (x < text_len) { PyObject *s; register Py_ssize_t z; /* Skip all text not in set */ z = x; for (;x < text_len; x++) { register unsigned int c = (unsigned char)tx[x]; register unsigned int block = (unsigned char)setstr[c >> 3]; if (block && ((block & (1 << (c & 7))) != 0)) break; } /* Append the slice to list */ s = PyString_FromStringAndSize((char *)&tx[z], x - z); if (!s) goto onError; if (listitem < listsize) PyList_SET_ITEM(list,listitem,s); else { PyList_Append(list,s); Py_DECREF(s); } listitem++; if (x >= text_len) break; /* Skip all text in set */ z = x; for (;x < text_len; x++) { register unsigned int c = (unsigned char)tx[x]; register unsigned int block = (unsigned char)setstr[c >> 3]; if (!block || ((block & (1 << (c & 7))) == 0)) break; } /* Append the slice to list if it is not empty */ s = PyString_FromStringAndSize((char *)&tx[z], x - z); if (!s) goto onError; if (listitem < listsize) PyList_SET_ITEM(list,listitem,s); else { PyList_Append(list,s); Py_DECREF(s); } listitem++; } /* Resize list if necessary */ if (listitem < listsize) PyList_SetSlice(list,listitem,listsize,(PyObject*)NULL); return list; onError: Py_XDECREF(list); return NULL; } static PyObject *mxTextTools_Upper(PyObject *text) { PyObject *ntext; register unsigned char *s; register unsigned char *orig; register Py_ssize_t i; unsigned char *tr; Py_ssize_t len; Py_Assert(PyString_Check(text), PyExc_TypeError, "expected a Python string"); len = PyString_GET_SIZE(text); ntext = PyString_FromStringAndSize(NULL,len); if (!ntext) goto onError; /* Translate */ tr = (unsigned char *)PyString_AS_STRING(mx_ToUpper); orig = (unsigned char *)PyString_AS_STRING(text); s = (unsigned char *)PyString_AS_STRING(ntext); for (i = 0; i < len; i++, s++, orig++) *s = tr[*orig]; return ntext; onError: return NULL; } #ifdef HAVE_UNICODE static PyObject *mxTextTools_UnicodeUpper(PyObject *text) { PyObject *ntext; register Py_UNICODE *s; register Py_UNICODE *orig; register Py_ssize_t i; Py_ssize_t len; text = PyUnicode_FromObject(text); if (text == NULL) goto onError; len = PyUnicode_GET_SIZE(text); ntext = PyUnicode_FromUnicode(NULL, len); if (!ntext) goto onError; /* Translate */ orig = (Py_UNICODE *)PyUnicode_AS_UNICODE(text); s = (Py_UNICODE *)PyUnicode_AS_UNICODE(ntext); for (i = 0; i < len; i++, s++, orig++) *s = Py_UNICODE_TOUPPER(*orig); Py_DECREF(text); return ntext; onError: Py_XDECREF(text); return NULL; } #endif static PyObject *mxTextTools_Lower(PyObject *text) { PyObject *ntext; register unsigned char *s; register unsigned char *orig; register Py_ssize_t i; unsigned char *tr; Py_ssize_t len; Py_Assert(PyString_Check(text), PyExc_TypeError, "expected a Python string"); len = PyString_GET_SIZE(text); ntext = PyString_FromStringAndSize(NULL,len); if (!ntext) goto onError; /* Translate */ tr = (unsigned char *)PyString_AS_STRING(mx_ToLower); orig = (unsigned char *)PyString_AS_STRING(text); s = (unsigned char *)PyString_AS_STRING(ntext); for (i = 0; i < len; i++, s++, orig++) *s = tr[*orig]; return ntext; onError: return NULL; } #ifdef HAVE_UNICODE static PyObject *mxTextTools_UnicodeLower(PyObject *text) { PyObject *ntext; register Py_UNICODE *s; register Py_UNICODE *orig; register Py_ssize_t i; Py_ssize_t len; text = PyUnicode_FromObject(text); if (text == NULL) goto onError; len = PyUnicode_GET_SIZE(text); ntext = PyUnicode_FromUnicode(NULL, len); if (!ntext) goto onError; /* Translate */ orig = (Py_UNICODE *)PyUnicode_AS_UNICODE(text); s = (Py_UNICODE *)PyUnicode_AS_UNICODE(ntext); for (i = 0; i < len; i++, s++, orig++) *s = Py_UNICODE_TOLOWER(*orig); Py_DECREF(text); return ntext; onError: Py_XDECREF(text); return NULL; } #endif /* --- Module functions ------------------------------------------------*/ /* Interface to the tagging engine in mxte.c */ Py_C_Function_WithKeywords( mxTextTools_tag, "tag(text,tagtable,sliceleft=0,sliceright=len(text),taglist=[],context=None) \n""" "Produce a tag list for a string, given a tag-table\n" "- returns a tuple (success, taglist, nextindex)\n" "- if taglist == None, then no taglist is created" ) { PyObject *text; PyObject *tagtable; Py_ssize_t sliceright = INT_MAX; Py_ssize_t sliceleft = 0; PyObject *taglist = 0; Py_ssize_t taglist_len; PyObject *context = 0; Py_ssize_t next, result; PyObject *res; Py_KeywordsGet6Args("OO|iiOO:tag", text,tagtable,sliceleft,sliceright,taglist,context); if (taglist == NULL) { /* not given, so use default: an empty list */ taglist = PyList_New(0); if (taglist == NULL) goto onError; taglist_len = 0; } else { Py_INCREF(taglist); Py_Assert(PyList_Check(taglist) || taglist == Py_None, PyExc_TypeError, "taglist must be a list or None"); if (taglist != Py_None) { taglist_len = PyList_Size(taglist); if (taglist_len < 0) goto onError; } else taglist_len = 0; } Py_Assert(mxTagTable_Check(tagtable) || PyTuple_Check(tagtable) || PyList_Check(tagtable), PyExc_TypeError, "tagtable must be a TagTable instance, list or tuple"); /* Prepare the argument for the Tagging Engine and let it process the request */ if (PyString_Check(text)) { Py_CheckStringSlice(text, sliceleft, sliceright); if (!mxTagTable_Check(tagtable)) { tagtable = mxTagTable_New(tagtable, MXTAGTABLE_STRINGTYPE, 1); if (tagtable == NULL) goto onError; } else if (mxTagTable_Type(tagtable) != MXTAGTABLE_STRINGTYPE) { Py_Error(PyExc_TypeError, "TagTable instance is not intended for parsing strings"); } else Py_INCREF(tagtable); /* Call the Tagging Engine */ result = mxTextTools_TaggingEngine(text, sliceleft, sliceright, (mxTagTableObject *)tagtable, taglist, context, &next); Py_DECREF(tagtable); } #ifdef HAVE_UNICODE else if (PyUnicode_Check(text)) { Py_CheckUnicodeSlice(text, sliceleft, sliceright); if (!mxTagTable_Check(tagtable)) { tagtable = mxTagTable_New(tagtable, 1, 1); if (tagtable == NULL) goto onError; } else if (mxTagTable_Type(tagtable) != MXTAGTABLE_UNICODETYPE) { Py_Error(PyExc_TypeError, "TagTable instance is not intended for parsing Unicode"); } else Py_INCREF(tagtable); /* Call the Tagging Engine */ result = mxTextTools_UnicodeTaggingEngine(text, sliceleft, sliceright, (mxTagTableObject *)tagtable, taglist, context, &next); Py_DECREF(tagtable); } #endif else Py_Error(PyExc_TypeError, "text must be a string or unicode"); /* Check for exceptions during matching */ if (result == 0) goto onError; /* Undo changes to taglist in case of a match failure (result == 1) */ if (result == 1 && taglist != Py_None) { DPRINTF(" undoing changes: del taglist[%i:%i]\n", taglist_len, PyList_Size(taglist)); if (PyList_SetSlice(taglist, taglist_len, PyList_Size(taglist), NULL)) goto onError; } /* Convert result to the documented external values: 0 - no match, 1 - match. */ result--; /* Build result tuple */ res = PyTuple_New(3); if (!res) goto onError; PyTuple_SET_ITEM(res,0,PyInt_FromSsize_t(result)); PyTuple_SET_ITEM(res,1,taglist); PyTuple_SET_ITEM(res,2,PyInt_FromSsize_t(next)); return res; onError: if (!PyErr_Occurred()) Py_Error(PyExc_SystemError, "NULL result without error in builtin tag()"); Py_XDECREF(taglist); return NULL; } /* An extended version of string.join() for taglists: */ Py_C_Function( mxTextTools_join, "join(joinlist,sep='',start=0,stop=len(joinlist))\n\n" "Copy snippets from different strings together producing a\n" "new string\n" "The first argument must be a list of tuples or strings;\n" "tuples must be of the form (string,l,r[,...]) and turn out\n" "as string[l:r]\n" "NOTE: the syntax used for negative slices is different\n" "than the Python standard: -1 corresponds to the first\n" "character *after* the string, e.g. ('Example',0,-1) gives\n" "'Example' and not 'Exampl', like in Python\n" "sep is an optional separator string, start and stop\n" "define the slice of joinlist that is taken into accont." ) { PyObject *joinlist = NULL; Py_ssize_t joinlist_len; PyObject *separator = NULL; Py_ssize_t start=0, stop=INT_MAX; Py_Get4Args("O|O" Py_SSIZE_T_PARSERMARKER Py_SSIZE_T_PARSERMARKER ":join", joinlist,separator,start,stop); Py_Assert(PySequence_Check(joinlist), PyExc_TypeError, "first argument needs to be a sequence"); joinlist_len = PySequence_Length(joinlist); Py_Assert(joinlist_len >= 0, PyExc_TypeError, "first argument needs to have a __len__ method"); Py_CheckSequenceSlice(joinlist_len, start, stop); /* Short-cut */ if ((stop - start) <= 0) return PyString_FromString(""); return mxTextTools_Join(joinlist, start, stop, separator); onError: return NULL; } /* Special compare function for taglist-tuples, comparing the text-slices given: - slices starting at a smaller index come first - for slices starting at the same index, the longer one wins */ Py_C_Function( mxTextTools_cmp, "cmp(a,b)\n\n" "Compare two valid taglist tuples w/r to their slice\n" "position; this is useful for sorting joinlists.") { PyObject *v,*w; int cmp; Py_Get2Args("OO:cmp", v, w); Py_Assert(PyTuple_Check(v) && PyTuple_Check(w) && PyTuple_GET_SIZE(v) >= 3 && PyTuple_GET_SIZE(w) >= 3, PyExc_TypeError, "invalid taglist-tuple"); cmp = PyObject_Compare(PyTuple_GET_ITEM(v,1),PyTuple_GET_ITEM(w,1)); if (cmp != 0) return PyInt_FromLong(cmp); cmp = - PyObject_Compare(PyTuple_GET_ITEM(v,2),PyTuple_GET_ITEM(w,2)); return PyInt_FromLong(cmp); onError: return NULL; } Py_C_Function( mxTextTools_joinlist, "joinlist(text,list,start=0,stop=len(text))\n\n" "Takes a list of tuples (replacement,l,r,...) and produces\n" "a taglist suitable for join() which creates a copy\n" "of text where every slice [l:r] is replaced by the\n" "given replacement\n" "- the list must be sorted using cmp() as compare function\n" "- it may not contain overlapping slices\n" "- the slices may not contain negative indices\n" "- if the taglist cannot contain overlapping slices, you can\n" " give this function the taglist produced by tag() directly\n" " (sorting is not needed, as the list will already be sorted)\n" "- start and stop set the slice to work in, i.e. text[start:stop]" ) { PyObject *list; PyObject *text; Py_ssize_t text_len = INT_MAX; Py_ssize_t pos = 0; Py_Get4Args("OO|" Py_SSIZE_T_PARSERMARKER Py_SSIZE_T_PARSERMARKER ":joinlist", text,list,pos,text_len); return mxTextTools_Joinlist(text, list, pos, text_len); onError: return NULL; } Py_C_Function( mxTextTools_charsplit, "charsplit(text,char,start=0,stop=len(text))\n\n" "Split text[start:stop] into substrings at char and\n" "return the result as list of strings." ) { PyObject *text, *separator; Py_ssize_t text_len = INT_MAX; Py_ssize_t start = 0; Py_Get4Args("OO|" Py_SSIZE_T_PARSERMARKER Py_SSIZE_T_PARSERMARKER ":charsplit", text,separator,start,text_len); return mxTextTools_CharSplit(text, separator, start, text_len); onError: return NULL; } Py_C_Function( mxTextTools_splitat, "splitat(text,char,nth=1,start=0,stop=len(text))\n\n" "Split text[start:stop] into two substrings at the nth\n" "occurance of char and return the result as 2-tuple. If the\n" "character is not found, the second string is empty. nth may\n" "be negative: the search is then done from the right and the\n" "first string is empty in case the character is not found." ) { PyObject *text, *separator; Py_ssize_t text_len = INT_MAX; Py_ssize_t start = 0; Py_ssize_t nth = 1; Py_Get5Args("OO|" Py_SSIZE_T_PARSERMARKER Py_SSIZE_T_PARSERMARKER Py_SSIZE_T_PARSERMARKER ":splitat", text,separator,nth,start,text_len); return mxTextTools_SplitAt(text, separator, nth, start, text_len); onError: return NULL; } Py_C_Function( mxTextTools_suffix, "suffix(text,suffixes,start=0,stop=len(text)[,translate])\n\n" "Looks at text[start:stop] and returns the first matching\n" "suffix out of the tuple of strings given in suffixes.\n" "If no suffix is found to be matching, None is returned.\n" "The optional 256 char translate string is used to translate\n" "the text prior to comparing it with the given suffixes." ) { PyObject *text, *suffixes, *translate = NULL; Py_ssize_t text_len = INT_MAX; Py_ssize_t start = 0; Py_Get5Args("OO|" Py_SSIZE_T_PARSERMARKER Py_SSIZE_T_PARSERMARKER "O:suffix", text,suffixes,start,text_len,translate); return mxTextTools_Suffix(text, suffixes, start, text_len, translate); onError: return NULL; } Py_C_Function( mxTextTools_prefix, "prefix(text,prefixes,start=0,stop=len(text)[,translate])\n\n" "Looks at text[start:stop] and returns the first matching\n" "prefix out of the tuple of strings given in prefixes.\n" "If no prefix is found to be matching, None is returned.\n" "The optional 256 char translate string is used to translate\n" "the text prior to comparing it with the given suffixes." ) { PyObject *text, *prefixes, *translate = NULL; Py_ssize_t text_len = INT_MAX; Py_ssize_t start = 0; Py_Get5Args("OO|" Py_SSIZE_T_PARSERMARKER Py_SSIZE_T_PARSERMARKER "O:prefix", text,prefixes,start,text_len,translate); return mxTextTools_Prefix(text, prefixes, start, text_len, translate); onError: return NULL; } Py_C_Function( mxTextTools_set, "set(string,logic=1)\n\n" "Returns a character set for string: a bit encoded version\n" "of the characters occurring in string.\n" "- logic can be set to 0 if all characters *not* in string\n" " should go into the set") { PyObject *sto; char *s,*st; Py_ssize_t len_s; int logic = 1; Py_ssize_t i; Py_Get3Args("s#|i:set", s,len_s,logic); sto = PyString_FromStringAndSize(NULL,32); if (sto == NULL) goto onError; st = PyString_AS_STRING(sto); if (logic) { memset(st,0x00,32); for (i = 0; i < len_s; i++,s++) { int j = (unsigned char)*s; st[j >> 3] |= 1 << (j & 7); } } else { memset(st,0xFF,32); for (i = 0; i < len_s; i++,s++) { int j = (unsigned char)*s; st[j >> 3] &= ~(1 << (j & 7)); } } return sto; onError: return NULL; } Py_C_Function( mxTextTools_setfind, "setfind(text,set,start=0,stop=len(text))\n\n" "Find the first occurence of any character from set in\n" "text[start:stop]\n set must be a string obtained with set()\n" "DEPRECATED: use CharSet().search() instead." ) { PyObject *text; PyObject *set; Py_ssize_t text_len = INT_MAX; Py_ssize_t start = 0; register Py_ssize_t x; register char *tx; register unsigned char *setstr; Py_Get4Args("OO|" Py_SSIZE_T_PARSERMARKER Py_SSIZE_T_PARSERMARKER ":setfind", text,set,start,text_len); Py_Assert(PyString_Check(text), PyExc_TypeError, "first argument needs to be a string"); Py_Assert(PyString_Check(set) && PyString_GET_SIZE(set) == 32, PyExc_TypeError, "second argument needs to be a set"); Py_CheckStringSlice(text,start,text_len); x = start; tx = PyString_AS_STRING(text) + x; setstr = (unsigned char *)PyString_AS_STRING(set); for (;x < text_len; tx++, x++) if (Py_CharInSet(*tx,setstr)) break; if (x == text_len) /* Not found */ return PyInt_FromLong(-1L); else return PyInt_FromSsize_t(x); onError: return NULL; } Py_C_Function( mxTextTools_setstrip, "setstrip(text,set,start=0,stop=len(text),mode=0)\n\n" "Strip all characters in text[start:stop] appearing in set.\n" "mode indicates where to strip (<0: left; =0: left and right;\n" ">0: right). set must be a string obtained with set()\n" "DEPRECATED: use CharSet().strip() instead." ) { char *text; Py_ssize_t text_len; char *setstr; Py_ssize_t setstr_len; Py_ssize_t start = 0; Py_ssize_t stop = INT_MAX; int mode = 0; Py_Get7Args("s#s#|" Py_SSIZE_T_PARSERMARKER Py_SSIZE_T_PARSERMARKER "i:setstip", text,text_len,setstr,setstr_len,start,stop,mode); return mxTextTools_SetStrip(text, text_len, setstr, setstr_len, start, stop, mode); onError: return NULL; } Py_C_Function( mxTextTools_setsplit, "setsplit(text,set,start=0,stop=len(text))\n\n" "Split text[start:stop] into substrings using set,\n" "omitting the splitting parts and empty substrings.\n" "set must be a string obtained from set()\n" "DEPRECATED: use CharSet().split() instead." ) { char *text; Py_ssize_t text_len; char *setstr; Py_ssize_t setstr_len; Py_ssize_t start = 0; Py_ssize_t stop = INT_MAX; Py_Get6Args("s#s#|" Py_SSIZE_T_PARSERMARKER Py_SSIZE_T_PARSERMARKER ":setsplit", text,text_len,setstr,setstr_len,start,stop); return mxTextTools_SetSplit(text, text_len, setstr, setstr_len, start, stop); onError: return NULL; } Py_C_Function( mxTextTools_setsplitx, "setsplitx(text,set,start=0,stop=len(text))\n\n" "Split text[start:stop] into substrings using set, so\n" "that every second entry consists only of characters in set.\n" "set must be a string obtained with set()\n" "DEPRECATED: use CharSet().splitx() instead." ) { char *text; Py_ssize_t text_len; char *setstr; Py_ssize_t setstr_len; Py_ssize_t start = 0; Py_ssize_t stop = INT_MAX; Py_Get6Args("s#s#|" Py_SSIZE_T_PARSERMARKER Py_SSIZE_T_PARSERMARKER ":setsplitx", text,text_len,setstr,setstr_len,start,stop); return mxTextTools_SetSplitX(text, text_len, setstr, setstr_len, start, stop); onError: return NULL; } Py_C_Function( mxTextTools_upper, "upper(text)\n\n" "Return text converted to upper case.") { PyObject *text; Py_GetArgObject(text); if (PyString_Check(text)) return mxTextTools_Upper(text); #ifdef HAVE_UNICODE else if (PyUnicode_Check(text)) return mxTextTools_UnicodeUpper(text); #endif else Py_Error(PyExc_TypeError, "expected string or unicode"); onError: return NULL; } Py_C_Function( mxTextTools_lower, "lower(text)\n\n" "Return text converted to lower case.") { PyObject *text; Py_GetArgObject(text); if (PyString_Check(text)) return mxTextTools_Lower(text); #ifdef HAVE_UNICODE else if (PyUnicode_Check(text)) return mxTextTools_UnicodeLower(text); #endif else Py_Error(PyExc_TypeError, "expected string or unicode"); onError: return NULL; } Py_C_Function( mxTextTools_str2hex, "str2hex(text)\n\n" "Return text converted to a string consisting of two byte\n" "HEX values.") { char *str; Py_ssize_t len; Py_Get2Args("s#", str,len); return mxTextTools_HexStringFromString(str,len); onError: return NULL; } Py_C_Function( mxTextTools_hex2str, "hex2str(text)\n\n" "Return text interpreted as two byte HEX values converted\n" "to a string.") { char *str; Py_ssize_t len; Py_Get2Args("s#", str,len); return mxTextTools_StringFromHexString(str,len); onError: return NULL; } Py_C_Function( mxTextTools_isascii, "isascii(text,start=0,stop=len(text))\n\n" "Return 1/0 depending on whether text only contains ASCII\n" "characters." ) { PyObject *text; Py_ssize_t start=0, stop = INT_MAX; int rc; Py_GetArgObject(text); rc = mxTextTools_IsASCII(text, start, stop); if (rc < 0) goto onError; return PyInt_FromLong(rc); onError: return NULL; } /* --- module init --------------------------------------------------------- */ /* Python Method Table */ static PyMethodDef Module_methods[] = { Py_MethodWithKeywordsListEntry("tag",mxTextTools_tag), Py_MethodListEntry("join",mxTextTools_join), Py_MethodListEntry("cmp",mxTextTools_cmp), Py_MethodListEntry("joinlist",mxTextTools_joinlist), Py_MethodListEntry("set",mxTextTools_set), Py_MethodListEntry("setfind",mxTextTools_setfind), Py_MethodListEntry("setsplit",mxTextTools_setsplit), Py_MethodListEntry("setsplitx",mxTextTools_setsplitx), Py_MethodListEntry("setstrip",mxTextTools_setstrip), Py_MethodWithKeywordsListEntry("TextSearch",mxTextSearch_TextSearch), Py_MethodListEntry("CharSet",mxCharSet_CharSet), Py_MethodListEntry("TagTable",mxTagTable_TagTable), #ifdef HAVE_UNICODE Py_MethodListEntry("UnicodeTagTable",mxTagTable_UnicodeTagTable), #endif Py_MethodListEntrySingleArg("upper",mxTextTools_upper), Py_MethodListEntrySingleArg("lower",mxTextTools_lower), Py_MethodListEntry("charsplit",mxTextTools_charsplit), Py_MethodListEntry("splitat",mxTextTools_splitat), Py_MethodListEntry("suffix",mxTextTools_suffix), Py_MethodListEntry("prefix",mxTextTools_prefix), Py_MethodListEntry("hex2str",mxTextTools_hex2str), Py_MethodListEntry("str2hex",mxTextTools_str2hex), Py_MethodListEntrySingleArg("isascii",mxTextTools_isascii), {NULL,NULL} /* end of list */ }; /* Cleanup function */ static void mxTextToolsModule_Cleanup(void) { mxTextTools_TagTables = NULL; /* Reset mxTextTools_Initialized flag */ mxTextTools_Initialized = 0; } MX_EXPORT(void) initmxTextTools(void) { PyObject *module, *moddict; if (mxTextTools_Initialized) Py_Error(PyExc_SystemError, "can't initialize "MXTEXTTOOLS_MODULE" more than once"); /* Init type objects */ PyType_Init(mxTextSearch_Type); #ifdef MXFASTSEARCH PyType_Init(mxFS_Type); #endif PyType_Init(mxCharSet_Type); PyType_Init(mxTagTable_Type); /* create module */ module = Py_InitModule4(MXTEXTTOOLS_MODULE, /* Module name */ Module_methods, /* Method list */ Module_docstring, /* Module doc-string */ (PyObject *)NULL, /* always pass this as *self */ PYTHON_API_VERSION); /* API Version */ if (!module) goto onError; /* Init TagTable cache */ if ((mxTextTools_TagTables = PyDict_New()) == NULL) goto onError; /* Register cleanup function */ if (Py_AtExit(mxTextToolsModule_Cleanup)) /* XXX what to do if we can't register that function ??? */; /* Add some symbolic constants to the module */ moddict = PyModule_GetDict(module); PyDict_SetItemString(moddict, "__version__", PyString_FromString(MXTEXTTOOLS_VERSION)); mx_ToUpper = mxTextTools_ToUpper(); PyDict_SetItemString(moddict, "to_upper", mx_ToUpper); mx_ToLower = mxTextTools_ToLower(); PyDict_SetItemString(moddict, "to_lower", mx_ToLower); /* Let the tag table cache live in the module dictionary; we just keep a weak reference in mxTextTools_TagTables around. */ PyDict_SetItemString(moddict, "tagtable_cache", mxTextTools_TagTables); Py_DECREF(mxTextTools_TagTables); insint(moddict, "BOYERMOORE", MXTEXTSEARCH_BOYERMOORE); insint(moddict, "FASTSEARCH", MXTEXTSEARCH_FASTSEARCH); insint(moddict, "TRIVIAL", MXTEXTSEARCH_TRIVIAL); /* Init exceptions */ if ((mxTextTools_Error = insexc(moddict, "Error", PyExc_StandardError)) == NULL) goto onError; /* Type objects */ Py_INCREF(&mxTextSearch_Type); PyDict_SetItemString(moddict, "TextSearchType", (PyObject *)&mxTextSearch_Type); Py_INCREF(&mxCharSet_Type); PyDict_SetItemString(moddict, "CharSetType", (PyObject *)&mxCharSet_Type); Py_INCREF(&mxTagTable_Type); PyDict_SetItemString(moddict, "TagTableType", (PyObject *)&mxTagTable_Type); /* Tag Table command symbols (these will be exposed via mx.TextTools.Constants.TagTables) */ insint(moddict, "_const_AllIn", MATCH_ALLIN); insint(moddict, "_const_AllNotIn", MATCH_ALLNOTIN); insint(moddict, "_const_Is", MATCH_IS); insint(moddict, "_const_IsIn", MATCH_ISIN); insint(moddict, "_const_IsNot", MATCH_ISNOTIN); insint(moddict, "_const_IsNotIn", MATCH_ISNOTIN); insint(moddict, "_const_Word", MATCH_WORD); insint(moddict, "_const_WordStart", MATCH_WORDSTART); insint(moddict, "_const_WordEnd", MATCH_WORDEND); insint(moddict, "_const_AllInSet", MATCH_ALLINSET); insint(moddict, "_const_IsInSet", MATCH_ISINSET); insint(moddict, "_const_AllInCharSet", MATCH_ALLINCHARSET); insint(moddict, "_const_IsInCharSet", MATCH_ISINCHARSET); insint(moddict, "_const_Fail", MATCH_FAIL); insint(moddict, "_const_Jump", MATCH_JUMP); insint(moddict, "_const_EOF", MATCH_EOF); insint(moddict, "_const_Skip", MATCH_SKIP); insint(moddict, "_const_Move", MATCH_MOVE); insint(moddict, "_const_JumpTarget", MATCH_JUMPTARGET); insint(moddict, "_const_sWordStart", MATCH_SWORDSTART); insint(moddict, "_const_sWordEnd", MATCH_SWORDEND); insint(moddict, "_const_sFindWord", MATCH_SFINDWORD); insint(moddict, "_const_NoWord", MATCH_NOWORD); insint(moddict, "_const_Call", MATCH_CALL); insint(moddict, "_const_CallArg", MATCH_CALLARG); insint(moddict, "_const_Table", MATCH_TABLE); insint(moddict, "_const_SubTable", MATCH_SUBTABLE); insint(moddict, "_const_TableInList", MATCH_TABLEINLIST); insint(moddict, "_const_SubTableInList", MATCH_SUBTABLEINLIST); insint(moddict, "_const_Loop", MATCH_LOOP); insint(moddict, "_const_LoopControl", MATCH_LOOPCONTROL); /* Tag Table command flags */ insint(moddict, "_const_CallTag", MATCH_CALLTAG); insint(moddict, "_const_AppendToTagobj", MATCH_APPENDTAG); insint(moddict, "_const_AppendTagobj", MATCH_APPENDTAGOBJ); insint(moddict, "_const_AppendMatch", MATCH_APPENDMATCH); insint(moddict, "_const_LookAhead", MATCH_LOOKAHEAD); /* Tag Table argument integers */ insint(moddict, "_const_To", MATCH_JUMP_TO); insint(moddict, "_const_MatchOk", MATCH_JUMP_MATCHOK); insint(moddict, "_const_MatchFail", MATCH_JUMP_MATCHFAIL); insint(moddict, "_const_ToEOF", MATCH_MOVE_EOF); insint(moddict, "_const_ToBOF", MATCH_MOVE_BOF); insint(moddict, "_const_Here", MATCH_FAIL_HERE); insint(moddict, "_const_ThisTable", MATCH_THISTABLE); insint(moddict, "_const_Break", MATCH_LOOPCONTROL_BREAK); insint(moddict, "_const_Reset", MATCH_LOOPCONTROL_RESET); DPRINTF("sizeof(string_charset)=%i bytes\n", sizeof(string_charset)); #ifdef HAVE_UNICODE DPRINTF("sizeof(unicode_charset)=%i bytes\n", sizeof(unicode_charset)); #endif /* We are now initialized */ mxTextTools_Initialized = 1; onError: /* Check for errors and report them */ if (PyErr_Occurred()) Py_ReportModuleInitError(MXTEXTTOOLS_MODULE); return; } egenix-mx-base-3.2.7/mx/TextTools/mxTextTools/mxTextTools.def0000664000175000017500000000003106557420401024104 0ustar lemburglemburgEXPORTS initmxTextTools egenix-mx-base-3.2.7/mx/TextTools/mxTextTools/mxTextTools.h0000664000175000017500000001605512133021460023577 0ustar lemburglemburg#ifndef MXTEXTTOOLS_H #define MXTEXTTOOLS_H /* mxTextTools -- Fast text manipulation routines Copyright (c) 2000, Marc-Andre Lemburg; mailto:mal@lemburg.com Copyright (c) 2000-2013, eGenix.com Software GmbH; mailto:info@egenix.com */ /* The extension's name; must be the same as the init function's suffix */ #define MXTEXTTOOLS_MODULE "mxTextTools" /* Include Boyer-Moore search algorithm */ #define BM_LENGTH_TYPE Py_ssize_t #include "mxbmse.h" /* Include FastSearch algorithm, if available */ #ifdef MXFASTSEARCH # define FS_LENGTH_TYPE Py_ssize_t # include "private/mxfse.h" #endif /* Include generic mx extension header file */ #include "mxh.h" /* Include Python compatibility header file */ #include "mxpyapi.h" #ifdef MX_BUILDING_MXTEXTTOOLS # define MXTEXTTOOLS_EXTERNALIZE MX_EXPORT #else # define MXTEXTTOOLS_EXTERNALIZE MX_IMPORT #endif #ifdef __cplusplus extern "C" { #endif /* --- Text Search Object ---------------------------------------*/ /* Algorithm values */ #define MXTEXTSEARCH_BOYERMOORE 0 #define MXTEXTSEARCH_FASTSEARCH 1 #define MXTEXTSEARCH_TRIVIAL 2 typedef struct { PyObject_HEAD PyObject *match; /* Match string object */ PyObject *translate; /* Translate string object or NULL */ int algorithm; /* Algorithm to be used */ void *data; /* Internal data used by the algorithm or NULL */ } mxTextSearchObject; MXTEXTTOOLS_EXTERNALIZE(PyTypeObject) mxTextSearch_Type; #define mxTextSearch_Check(v) \ (((mxTextSearchObject *)(v))->ob_type == &mxTextSearch_Type) /* Exporting these APIs for mxTextTools internal use only ! */ extern Py_ssize_t mxTextSearch_MatchLength(PyObject *self); extern int mxTextSearch_SearchBuffer(PyObject *self, char *text, Py_ssize_t start, Py_ssize_t stop, Py_ssize_t *sliceleft, Py_ssize_t *sliceright); #ifdef HAVE_UNICODE extern int mxTextSearch_SearchUnicode(PyObject *self, Py_UNICODE *text, Py_ssize_t start, Py_ssize_t stop, Py_ssize_t *sliceleft, Py_ssize_t *sliceright); #endif /* --- Character Set Object -------------------------------------*/ /* Mode values */ #define MXCHARSET_8BITMODE 0 #define MXCHARSET_UCS2MODE 1 #define MXCHARSET_UCS4MODE 2 typedef struct { PyObject_HEAD PyObject *definition; /* Character set definition */ int mode; /* Operation mode: 0 - 8-bit character lookup 1 - UCS-2 Unicode lookup 2 - UCS-4 Unicode lookup */ void *lookup; /* Lookup table */ } mxCharSetObject; MXTEXTTOOLS_EXTERNALIZE(PyTypeObject) mxCharSet_Type; #define mxCharSet_Check(v) \ (((mxCharSetObject *)(v))->ob_type == &mxCharSet_Type) /* Exporting these APIs for mxTextTools internal use only ! */ extern int mxCharSet_ContainsChar(PyObject *self, register unsigned char ch); #ifdef HAVE_UNICODE extern int mxCharSet_ContainsUnicodeChar(PyObject *self, register Py_UNICODE ch); #endif extern Py_ssize_t mxCharSet_Match(PyObject *self, PyObject *text, Py_ssize_t start, Py_ssize_t stop, int direction); /* --- Tag Table Object -----------------------------------------*/ typedef struct { PyObject *tagobj; /* Tag object to assign, call, append, etc. or NULL */ int cmd; /* Command integer */ int flags; /* Command flags */ PyObject *args; /* Command arguments */ Py_ssize_t jne; /* Non-match jump offset */ Py_ssize_t je; /* Match jump offset */ } mxTagTableEntry; #define MXTAGTABLE_STRINGTYPE 0 #define MXTAGTABLE_UNICODETYPE 1 typedef struct { PyObject_VAR_HEAD PyObject *definition; /* Reference to the original table definition or NULL; needed for caching */ int tabletype; /* Type of compiled table: 0 - 8-bit string args 1 - Unicode args */ mxTagTableEntry entry[1]; /* Variable length array of mxTagTableEntry fields; ob_size gives the number of allocated entries. */ } mxTagTableObject; MXTEXTTOOLS_EXTERNALIZE(PyTypeObject) mxTagTable_Type; #define mxTagTable_Check(v) \ (((mxTagTableObject *)(v))->ob_type == &mxTagTable_Type) #define mxTagTable_Type(v) \ (((mxTagTableObject *)(v))->tabletype) #define mxTagTable_Definition(v) \ (((mxTagTableObject *)(v))->definition) /* Exporting these APIs for mxTextTools internal use only ! */ extern PyObject *mxTagTable_New(PyObject *definition, int tabletype, int cacheable); /* --- Tagging Engine -------------------------------------------*/ /* Exporting these APIs for mxTextTools internal use only ! */ /* mxTextTools_TaggingEngine(): a table driven parser engine - return codes: rc = 2: match ok; rc = 1: match failed; rc = 0: error - doesn't check type of passed arguments ! - doesn't increment reference counts of passed objects ! */ extern int mxTextTools_TaggingEngine(PyObject *textobj, Py_ssize_t text_start, Py_ssize_t text_stop, mxTagTableObject *table, PyObject *taglist, PyObject *context, Py_ssize_t *next); extern int mxTextTools_UnicodeTaggingEngine(PyObject *textobj, Py_ssize_t text_start, Py_ssize_t text_stop, mxTagTableObject *table, PyObject *taglist, PyObject *context, Py_ssize_t *next); /* Command integers for cmd; see Constants/TagTable.py for details */ /* Low-level string matching, using the same simple logic: - match has to be a string - they only modify x (the current position in text) */ #define MATCH_ALLIN 11 #define MATCH_ALLNOTIN 12 #define MATCH_IS 13 #define MATCH_ISIN 14 #define MATCH_ISNOTIN 15 #define MATCH_ISNOT 16 #define MATCH_WORD 21 #define MATCH_WORDSTART 22 #define MATCH_WORDEND 23 #define MATCH_ALLINSET 31 #define MATCH_ISINSET 32 #define MATCH_ALLINCHARSET 41 #define MATCH_ISINCHARSET 42 #define MATCH_MAX_LOWLEVEL 99 /* Jumps and other low-level special commands */ #define MATCH_FAIL 100 #define MATCH_JUMP MATCH_FAIL #define MATCH_EOF 101 #define MATCH_SKIP 102 #define MATCH_MOVE 103 #define MATCH_JUMPTARGET 104 #define MATCH_MAX_SPECIALS 199 /* Higher-level string matching */ #define MATCH_SWORDSTART 211 #define MATCH_SWORDEND 212 #define MATCH_SFINDWORD 213 #define MATCH_NOWORD MATCH_SWORDSTART /* Higher-level special commands */ #define MATCH_CALL 201 #define MATCH_CALLARG 202 #define MATCH_TABLE 203 #define MATCH_SUBTABLE 207 #define MATCH_TABLEINLIST 204 #define MATCH_SUBTABLEINLIST 208 #define MATCH_LOOP 205 #define MATCH_LOOPCONTROL 206 /* Special argument integers */ #define MATCH_JUMP_TO 0 #define MATCH_JUMP_MATCHOK 1000000 #define MATCH_JUMP_MATCHFAIL -1000000 #define MATCH_MOVE_EOF -1 #define MATCH_MOVE_BOF 0 #define MATCH_FAIL_HERE 1 #define MATCH_THISTABLE 999 #define MATCH_LOOPCONTROL_BREAK 0 #define MATCH_LOOPCONTROL_RESET -1 /* Flags set in cmd (>=256) */ #define MATCH_CALLTAG (1 << 8) #define MATCH_APPENDTAG (1 << 9) #define MATCH_APPENDTAGOBJ (1 << 10) #define MATCH_APPENDMATCH (1 << 11) #define MATCH_LOOKAHEAD (1 << 12) /* EOF */ #ifdef __cplusplus } #endif #endif egenix-mx-base-3.2.7/mx/TextTools/mxTextTools/mxbmse.c0000664000175000017500000001140312133021461022544 0ustar lemburglemburg/* mxbmse -- Fast Boyer Moore Search Algorithm (Version 0.9) The implementation is reentrant and thread safe. While the general ideas behind the Boyer Moore algorithm are in the public domain, this implementation falls under the following copyright: Copyright (c) 1997-2000, Marc-Andre Lemburg; mailto:mal@lemburg.com Copyright (c) 2000-2013, eGenix.com Software GmbH; mailto:info@egenix.com All Rights Reserved See the documentation for copying information or contact the author (mal@lemburg.com). */ /* to turn on the debugging printfs (DPRINTF):*/ /* #define MAL_DEBUG */ /* Logging file used by debugging facility */ #ifndef MAL_DEBUG_OUTPUTFILE # define MAL_DEBUG_OUTPUTFILE "mxTextSearch.log" #endif #ifdef MAL_DEBUG_WITH_PYTHON # include "mx.h" #endif #ifdef MX_BUILDING_MXTEXTTOOLS # include "mx.h" # include "mxTextTools.h" #else # include "mxstdlib.h" # include "mxbmse.h" #endif /* --- Fast Boyer-Moore Implementation (8-bit) ---------------------------- */ mxbmse_data *bm_init(char *match, BM_LENGTH_TYPE match_len) { mxbmse_data *c; BM_INDEX_TYPE i; BM_SHIFT_TYPE *shift; char *m; c = newstruct(mxbmse_data); c->match = match; c->match_len = match_len; c->eom = match + match_len - 1; /* Length 1 matching does not use a shift table */ if (match_len == 1) return c; /* Init shift table */ for ( shift = c->shift, i = 256; i > 0; i--, shift++ ) *shift = (BM_SHIFT_TYPE) match_len; DPRINTF("shift table for match='%s'\n",match); for ( shift = c->shift, m = match, i = match_len - 1; i >= 0; i--, m++ ) { shift[ (unsigned char) *m ] = (BM_SHIFT_TYPE) i; DPRINTF(" char = '%c' shift = %i\n", *m, i); } return c; } void bm_free(mxbmse_data *c) { if (c) free(c); } BM_INDEX_TYPE bm_search(mxbmse_data *c, char *text, BM_INDEX_TYPE start, BM_LENGTH_TYPE text_len) { register char *pt; register char *eot = text + text_len; /* Error check */ if (c == NULL) return -1; /* Init text pointer */ pt = text + start + c->match_len - 1; DPRINTF("Init : %2i %20.20s \t text: %2i %20.20s\n", c->match_len,c->match,start,text+start); if (c->match_len > 1) for (;;) { register char *pm; pm = c->eom; for (;pt < eot && *pt != *pm; pt += c->shift[(unsigned char) *pt]); if (pt >= eot) break; /* First char matches.. what about the others ? */ { register BM_INDEX_TYPE im = c->match_len; do { DPRINTF("=match: %2i '%20.20s' \t text: '%20.20s'\n", im,pm,pt); if (--im == 0) /* Match */ return pt - text + c->match_len; pt--; pm--; } while (*pt == *pm); /* Mismatch after match: use shift-table */ { register BM_INDEX_TYPE a,b; a = c->shift[(unsigned char) *pt]; b = c->match_len - im + 1; DPRINTF("!match: %2i '%20.20s' \t text: '%20.20s' " "(sh=%i)\n", im,pm,pt,max(a,b)); pt += (a > b) ? a : b; } } } /* Special case: matching string has length 1 */ else { register char m = *c->eom; for (;pt < eot; pt++) if (*pt == m) /* Match */ return pt - text + 1; } return start; /* no match */ } /* bm search using the translate table -- 45% slower */ BM_INDEX_TYPE bm_tr_search(mxbmse_data *c, char *text, BM_INDEX_TYPE start, BM_LENGTH_TYPE text_len, char *tr) { register char *pt; register char *eot = text + text_len; /* Error check */ if (c == NULL) return -1; /* Init text pointer */ pt = text + start + c->match_len - 1; DPRINTF("Init : %2i '%20.20s' \t text: %2i '%20.20s'\n", c->match_len,c->match,start,text+start); if (c->match_len > 1) for (;;) { register char *pm; pm = c->eom; for (;pt < eot && tr[(unsigned char) *pt] != *pm; pt += c->shift[(unsigned char) tr[(unsigned char) *pt]]); if (pt >= eot) break; /* First char matches.. what about the others ? */ { register BM_INDEX_TYPE im = c->match_len; do { DPRINTF("=match: %2i '%20.20s' \t text: '%20.20s'\n", im,pm,pt); if (--im == 0) /* Match */ return pt - text + c->match_len; pt--; pm--; } while (tr[(unsigned char) *pt] == *pm); /* Mismatch after match: use shift-table */ { register BM_INDEX_TYPE a,b; a = c->shift[(unsigned char) tr[(unsigned char) *pt]]; b = c->match_len - im + 1; DPRINTF("!match: %2i '%20.20s' \t text: '%20.20s' " "(sh=%i)\n", im,pm,pt,max(a,b)); pt += (a > b)?a:b; } } } /* Special case: matching string has length 1 */ else { register char m = *c->eom; for (;pt < eot; pt++) if (*pt == m) /* Match */ return pt - text + 1; } return start; /* no match */ } egenix-mx-base-3.2.7/mx/TextTools/mxTextTools/mxbmse.h0000664000175000017500000000347712133021461022565 0ustar lemburglemburg#ifndef MXBMSE_H #define MXBMSE_H /* mxbmse -- Fast Boyer Moore Search Algorithm (Version 0.8) The implementation is reentrant and thread safe. While the general idea behind the Boyer Moore algorithm are in the public domain, this implementation falls under the following copyright: Copyright (c) 1997-2000, Marc-Andre Lemburg; mailto:mal@lemburg.com Copyright (c) 2000-2013, eGenix.com Software GmbH; mailto:info@egenix.com All Rights Reserved See the documentation for copying information or contact the author (mal@lemburg.com). */ #ifdef __cplusplus extern "C" { #endif /* --- Fast Boyer-Moore Implementation (8-bit) ---------------------------- */ /* sanity check switches */ /*#define SAFER 1*/ /* BM_LENGTH_TYPE must have enough bits to store len(match) - using 'char' here makes the routines run 15% slower than with 'int', on the other hand, - 'int' is at least 4 times larger than 'char' - 'long' is better on 64-bit CPUs */ #ifndef BM_LENGTH_TYPE # define BM_LENGTH_TYPE int #endif #ifndef BM_INDEX_TYPE # define BM_INDEX_TYPE BM_LENGTH_TYPE #endif #ifndef BM_SHIFT_TYPE # define BM_SHIFT_TYPE BM_LENGTH_TYPE #endif typedef struct { char *match; BM_LENGTH_TYPE match_len; char *eom; char *pt; BM_SHIFT_TYPE shift[256]; /* char-based shift table */ } mxbmse_data; extern mxbmse_data *bm_init(char *match, BM_LENGTH_TYPE match_len); extern void bm_free(mxbmse_data *c); extern BM_INDEX_TYPE bm_search(mxbmse_data *c, char *text, BM_INDEX_TYPE start, BM_LENGTH_TYPE text_len); extern BM_INDEX_TYPE bm_tr_search(mxbmse_data *c, char *text, BM_INDEX_TYPE start, BM_LENGTH_TYPE text_len, char *tr); #define BM_MATCH_LEN(bm) ((mxbmse_data *)bm)->match_len /* EOF */ #ifdef __cplusplus } #endif #endif egenix-mx-base-3.2.7/mx/TextTools/mxTextTools/mxh.h0000664000175000017500000000320212133021412022044 0ustar lemburglemburg#ifndef MXH_H #define MXH_H /* mxh.h -- Generic header file for all mx Extenstions This file should be included by every mx Extension header file and the C file. Copyright (c) 2000, Marc-Andre Lemburg; mailto:mal@lemburg.com Copyright (c) 2000-2013, eGenix.com Software GmbH; mailto:info@egenix.com See the documentation for further copyright information or contact the author. */ /* Macros to control export and import of DLL symbols. We use our own definitions since Python's don't allow specifying both imported and exported symbols at the same time; these defines haven't been thoroughly tested yet, patches are most welcome :-) */ /* Macro to "mark" a symbol for DLL export */ #if (defined(_MSC_VER) && _MSC_VER > 850 \ || defined(__MINGW32__) || defined(__CYGWIN) || defined(__BEOS__)) # ifdef __cplusplus # define MX_EXPORT(type) extern "C" type __declspec(dllexport) # else # define MX_EXPORT(type) extern type __declspec(dllexport) # endif #elif defined(__WATCOMC__) # define MX_EXPORT(type) extern type __export #elif defined(__IBMC__) # define MX_EXPORT(type) extern type _Export #else # define MX_EXPORT(type) extern type #endif /* Macro to "mark" a symbol for DLL import */ #if defined(__BORLANDC__) # define MX_IMPORT(type) extern type __import #elif (defined(_MSC_VER) && _MSC_VER > 850 \ || defined(__MINGW32__) || defined(__CYGWIN) || defined(__BEOS__)) # ifdef __cplusplus # define MX_IMPORT(type) extern "C" type __declspec(dllimport) # else # define MX_IMPORT(type) extern type __declspec(dllimport) # endif #else # define MX_IMPORT(type) extern type #endif /* EOF */ #endif egenix-mx-base-3.2.7/mx/TextTools/mxTextTools/mxpyapi.h0000664000175000017500000003356612133300665022771 0ustar lemburglemburg#ifndef MXPYAPI_H #define MXPYAPI_H /* mxpyapi.h This header file includes some new APIs that are not available in older API versions, yet are used by the mx-Extensions. Copyright (c) 2000, Marc-Andre Lemburg; mailto:mal@lemburg.com Copyright (c) 2000-2013, eGenix.com Software GmbH; mailto:info@egenix.com */ /* Emulate PY_VERSION_HEX for older Python versions. */ #ifndef PY_VERSION_HEX # if PYTHON_API_VERSION == 1007 # define PY_VERSION_HEX 0x010500F0 # endif # if PYTHON_API_VERSION == 1006 # define PY_VERSION_HEX 0x010400F0 # endif # if PYTHON_API_VERSION < 1006 # define PY_VERSION_HEX 0 # endif #endif #ifdef __cplusplus extern "C" { #endif /* ---------------------------------------------------------------- Python 2.7.4 ---------------------------------------------------------------- */ #if PY_VERSION_HEX >= 0x02070400 && PY_VERSION_HEX < 0x02070500 /* Python 2.7.4 has a bug that causes Py_DECREF() to fail for dictionaries in module cleanup routines. See http://bugs.python.org/issue17703 */ #define mxPy_DECREF_Unsafe_AtExit() 1 #else /* Apply a runtime check */ #define mxPy_DECREF_Unsafe_AtExit() \ (strncmp(Py_GetVersion(), "2.7.4", 5) == 0) #endif /* ---------------------------------------------------------------- Python 2.7 and above: ---------------------------------------------------------------- */ #if PY_VERSION_HEX >= 0x02070000 /* Python 2.7 introduces the backported memoryview object */ #define HAVE_PYTHON_MEMORYVIEW #else #endif /* ---------------------------------------------------------------- Python 2.6 and above: ---------------------------------------------------------------- */ #if PY_VERSION_HEX >= 0x02060000 /* Python 2.6 introduces new buffer interface slots based on the Py_buffer interface. */ #define HAVE_PYTHON_PY_BUFFER #else #endif /* ---------------------------------------------------------------- Python 2.5 and above: ---------------------------------------------------------------- */ #if PY_VERSION_HEX >= 0x02050000 /* Parser marker */ #define Py_SSIZE_T_PARSERMARKER "n" #else /* Python 2.5 introduced a new type for index integers which is not available in earlier versions. Unfortunately, the new type has 64 bits on 64-bit architectures like AMD64, whereas integers still have 32 bits, which causes problems with output parameters. Along with the new type a few type slots were changed and a new parser marker introduced. */ #define Py_ssize_t int /* Parser marker */ #define Py_SSIZE_T_PARSERMARKER "i" /* Integer APIs */ #define PyInt_FromSize_t(x) PyInt_FromLong((long)(x)) #define PyInt_FromSsize_t(x) PyInt_FromLong((long)(x)) #define PyInt_AsSsize_t(x) ((Py_ssize_t)PyInt_AsLong(x)) #endif /* ---------------------------------------------------------------- Python 2.4 and above: ---------------------------------------------------------------- */ #if PY_VERSION_HEX >= 0x02040000 #else #endif /* ---------------------------------------------------------------- Python 2.3 and above: ---------------------------------------------------------------- */ #if PY_VERSION_HEX >= 0x02030000 #else /* These were introduced in Python 2.3: */ # define PY_LONG_LONG LONG_LONG /* Boolean APIs */ #define PyBool_FromLong(x) PyInt_FromLong((long)(x)?1:0) #endif /* ---------------------------------------------------------------- Python 2.2 and above: ---------------------------------------------------------------- */ #if PY_VERSION_HEX >= 0x02020000 # define HAVE_SUBCLASSABLE_TYPES 1 # define HAVE_INTERPRETER_DLOPENFLAGS 1 #else /* These were introduced in Python 2.2: */ # define PyString_CheckExact PyString_Check # define PyInt_CheckExact PyInt_Check # define PyFloat_CheckExact PyFloat_Check # define PyLong_CheckExact PyLong_Check # define PyExc_StopIteration PyExc_IndexError /* Not needed in Python 2.1 and below, so simply ignore the API */ # define PyType_Ready(x) #endif /* ---------------------------------------------------------------- Python 1.6 and 2.0 only: ---------------------------------------------------------------- */ /* Disabled: we don't support Python 1.6 and don't have a need for this API in any of the mx Tools (yet). */ #if 0 #if PY_VERSION_HEX >= 0x01060000 && PY_VERSION_HEX < 0x02010000 static PyObject * PyObject_Unicode(PyObject *v) { PyObject *res; if (v == NULL) res = PyString_FromString(""); else if (PyUnicode_Check(v)) { Py_INCREF(v); return v; } else if (PyString_Check(v)) res = v; else if (v->ob_type->tp_str != NULL) res = (*v->ob_type->tp_str)(v); else { PyObject *func; if (!PyInstance_Check(v) || (func = PyObject_GetAttrString(v, "__str__")) == NULL) { PyErr_Clear(); res = PyObject_Repr(v); } else { res = PyEval_CallObject(func, (PyObject *)NULL); Py_DECREF(func); } } if (res == NULL) return NULL; if (!PyUnicode_Check(res)) { PyObject* str; str = PyUnicode_FromObject(res); Py_DECREF(res); if (str) res = str; else return NULL; } return res; } #endif #endif /* ---------------------------------------------------------------- Python 2.0 alpha + betas: ---------------------------------------------------------------- */ #if PY_VERSION_HEX >= 0x02000000 && PY_VERSION_HEX < 0x020000F0 # if defined(PyBuffer_Check) && !defined(HAVE_PYTHON_BUFFEROBJECTS) # define HAVE_PYTHON_BUFFEROBJECTS # endif #ifndef Py_PROTO # define Py_PROTO(args) args #endif #endif /* ---------------------------------------------------------------- Python 1.6 and later: ---------------------------------------------------------------- */ #if PY_VERSION_HEX >= 0x01060000 #if defined(PyUnicode_Check) && !defined(HAVE_UNICODE) # define HAVE_UNICODE #endif #endif #if PY_VERSION_HEX >= 0x02020000 #if defined(HAVE_UNICODE) && !defined(Py_USING_UNICODE) # undef HAVE_UNICODE #endif #endif #ifndef HAVE_UNICODE # undef PyUnicode_Check # define PyUnicode_Check(obj) 0 #endif /* ---------------------------------------------------------------- Python < 1.6: ---------------------------------------------------------------- */ #if PY_VERSION_HEX < 0x01060000 #if !defined(PyObject_DEL) # define PyObject_DEL(x) free(x) # define PyObject_Del(x) free(x) #endif #endif /* ---------------------------------------------------------------- Python >= 1.5.2: ---------------------------------------------------------------- */ #if PY_VERSION_HEX >= 0x010502F0 # if defined(PyBuffer_Check) && !defined(HAVE_PYTHON_BUFFEROBJECTS) # define HAVE_PYTHON_BUFFEROBJECTS # endif #endif /* ---------------------------------------------------------------- Python >= 1.5.2 and prior to 2.0a1 ---------------------------------------------------------------- */ #if PY_VERSION_HEX >= 0x010502F0 && PY_VERSION_HEX < 0x02000000 /* Takes an arbitrary object which must support the (character, single segment) buffer interface and returns a pointer to a read-only memory location useable as character based input for subsequent processing. buffer and buffer_len are only set in case no error occurrs. Otherwise, -1 is returned and an exception set. */ static int PyObject_AsCharBuffer(PyObject *obj, const char **buffer, int *buffer_len) { PyBufferProcs *pb = obj->ob_type->tp_as_buffer; const char *pp; int len; if ( pb == NULL || pb->bf_getcharbuffer == NULL || pb->bf_getsegcount == NULL ) { PyErr_SetString(PyExc_TypeError, "expected a character buffer object"); goto onError; } if ( (*pb->bf_getsegcount)(obj,NULL) != 1 ) { PyErr_SetString(PyExc_TypeError, "expected a single-segment buffer object"); goto onError; } len = (*pb->bf_getcharbuffer)(obj,0,&pp); if (len < 0) goto onError; *buffer = pp; *buffer_len = len; return 0; onError: return -1; } /* Same as PyObject_AsCharBuffer() except that this API expects (readable, single segment) buffer interface and returns a pointer to a read-only memory location which can contain arbitrary data. buffer and buffer_len are only set in case no error occurrs. Otherwise, -1 is returned and an exception set. */ static int PyObject_AsReadBuffer(PyObject *obj, const void **buffer, int *buffer_len) { PyBufferProcs *pb = obj->ob_type->tp_as_buffer; void *pp; int len; if ( pb == NULL || pb->bf_getreadbuffer == NULL || pb->bf_getsegcount == NULL ) { PyErr_SetString(PyExc_TypeError, "expected a readable buffer object"); goto onError; } if ( (*pb->bf_getsegcount)(obj,NULL) != 1 ) { PyErr_SetString(PyExc_TypeError, "expected a single-segment buffer object"); goto onError; } len = (*pb->bf_getreadbuffer)(obj,0,&pp); if (len < 0) goto onError; *buffer = pp; *buffer_len = len; return 0; onError: return -1; } /* Takes an arbitrary object which must support the (writeable, single segment) buffer interface and returns a pointer to a writeable memory location in buffer of size buffer_len. buffer and buffer_len are only set in case no error occurrs. Otherwise, -1 is returned and an exception set. */ static int PyObject_AsWriteBuffer(PyObject *obj, void **buffer, int *buffer_len) { PyBufferProcs *pb = obj->ob_type->tp_as_buffer; void*pp; int len; if ( pb == NULL || pb->bf_getwritebuffer == NULL || pb->bf_getsegcount == NULL ) { PyErr_SetString(PyExc_TypeError, "expected a writeable buffer object"); goto onError; } if ( (*pb->bf_getsegcount)(obj,NULL) != 1 ) { PyErr_SetString(PyExc_TypeError, "expected a single-segment buffer object"); goto onError; } len = (*pb->bf_getwritebuffer)(obj,0,&pp); if (len < 0) goto onError; *buffer = pp; *buffer_len = len; return 0; onError: return -1; } #endif /* Python Version in [1.5.2b2, 2.0) */ /* ---------------------------------------------------------------- Python 1.5.2b1 and older: ---------------------------------------------------------------- */ #if PY_VERSION_HEX <= 0x010502B1 /* These are missing from PC/python_nt.def and thus didn't get included in python1.5.lib on Windows platforms. */ #ifdef MS_WIN32 # define PyString_InternInPlace(x) # define PyString_InternFromString(x) PyString_FromString(x) #endif #endif /* Python Version <= 1.5.2b1 */ /* ---------------------------------------------------------------- Python 1.5.2a2 and older: ---------------------------------------------------------------- */ #if PY_VERSION_HEX <= 0x010502A2 extern long PyOS_strtol Py_PROTO((const char *, char **, int)); #endif /* Python Version <= 1.5.2a2 */ /* ---------------------------------------------------------------- Python 1.5.2a1 and older: ---------------------------------------------------------------- */ #if PY_VERSION_HEX <= 0x010502A1 #ifndef PyList_SET_ITEM # define PyList_SET_ITEM(l,i,w) PyList_GET_ITEM(l,i) = w #endif #endif /* Python Version < 1.5.2a1 */ /* ---------------------------------------------------------------- Prior to Python 1.5: ---------------------------------------------------------------- */ #if PY_VERSION_HEX < 0x010500F0 /* New in Python1.5: */ # undef PyString_AS_STRING # define PyString_AS_STRING(op) (((PyStringObject *)(op))->ob_sval) # define PyString_GET_SIZE(op) (((PyStringObject *)(op))->ob_size) # define PyTuple_GET_SIZE(op) (((PyTupleObject *)(op))->ob_size) # define PyList_GET_SIZE(op) (((PyListObject *)(op))->ob_size) /* Changed since 1.4 */ # undef PyList_GET_ITEM # define PyList_GET_ITEM(op, i) (((PyListObject *)(op))->ob_item[i]) # undef PyInt_AS_LONG # define PyInt_AS_LONG(op) (((PyIntObject *)(op))->ob_ival) # undef PyFloat_AS_DOUBLE # define PyFloat_AS_DOUBLE(op) (((PyFloatObject *)(op))->ob_fval) /* This function is taken from error.c in Python 1.5... Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, The Netherlands. All Rights Reserved Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation, and that the names of Stichting Mathematisch Centrum or CWI or Corporation for National Research Initiatives or CNRI not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. While CWI is the initial source for this software, a modified version is made available by the Corporation for National Research Initiatives (CNRI) at the Internet address ftp://ftp.python.org. STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifdef HAVE_STDARG_PROTOTYPES PyObject * PyErr_Format(PyObject *exception, const char *format, ...) #else PyObject * PyErr_Format(exception, format, va_alist) PyObject *exception; const char *format; va_dcl #endif { va_list vargs; char buffer[500]; /* Caller is responsible for limiting the format */ #ifdef HAVE_STDARG_PROTOTYPES va_start(vargs, format); #else va_start(vargs); #endif vsprintf(buffer, format, vargs); PyErr_SetString(exception, buffer); return NULL; } /* Python 1.5 uses instances as exceptions, the 1.4 API only knows about strings. */ #define PyErr_NewException(name,base,dict) PyString_FromString(fullname); /* Missing from rename2.h in Python 1.4 */ #ifndef PyVarObject # define PyVarObject varobject #endif #endif /* Python Version < 1.5 */ #ifdef __cplusplus } #endif /* EOF */ #endif egenix-mx-base-3.2.7/mx/TextTools/mxTextTools/mxstdlib.h0000664000175000017500000002612712133021413023112 0ustar lemburglemburg#ifndef MXSTDLIB_H #define MXSTDLIB_H /* Standard stuff I use often -- not Python specific Copyright (c) 2000, Marc-Andre Lemburg; mailto:mal@lemburg.com Copyright (c) 2000-2013, eGenix.com Software GmbH; mailto:info@egenix.com See the documentation for further copyright information or contact the author. */ /* Standard includes */ #include #include #include #include #include #include /* Limits */ #ifdef HAVE_LIMITS_H # include #else # ifndef INT_MAX # define INT_MAX 2147483647 # endif # ifndef LONG_MAX # define LONG_MAX INT_MAX # endif #endif /* Disable a few MS VC++ warnings that were introduced in VS 2005, e.g. warning C4996: 'getenv': This function or variable may be unsafe. Consider using _dupenv_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. Note that #define _CRT_SECURE_NO_WARNINGS 1 does not work for some reason. You have to use the #pragma warning() to disable warnings inside a header file. */ #if defined(_MSC_VER) && (_MSC_VER >= 1400) # pragma warning(disable:4996) #endif /* --- My own macros for memory allocation... --------------------------- */ /* Define this macro if the code should use C malloc */ /* #define MAL_USE_C_MALLOC */ /* Define this macro if the code should use Python's pymalloc */ /* #define MAL_USE_PYMALLOC */ /* Define this macro if the code should use pymalloc and uses the cnew()/cnewstruct() macros. This is needed to only enable the helper functions when using those macros in pymalloc mode. */ /* #define MAL_USING_CNEW */ /* Decide which variant to use, if no explicit choice was made: C malloc or pymalloc */ #ifdef MAL_USE_C_MALLOC /* Force use of C malloc */ #elif !defined(MAL_USE_PYMALLOC) && defined (PYTHON_API_VERSION) /* Default to using the Python pymalloc in case we're compiling a Python extension */ # define MAL_USE_PYMALLOC #endif #ifndef MAL_USE_PYMALLOC /* --- Use C malloc for memory allocation --- */ # ifdef MAL_MEM_DEBUG /* Include debug information for tracing memory leaks */ # define newstruct(x) \ (mxDebugPrintf("* malloc for struct "#x" (%s:%i)\n",__FILE__,__LINE__),\ (x *)malloc(sizeof(x))) # define cnewstruct(x) \ (mxDebugPrintf("* calloc for struct "#x" (%s:%i)\n",c,__FILE__,__LINE__),\ (x *)calloc(sizeof(x),1)) # define new(x,c) \ (mxDebugPrintf("* malloc for "#c"=%i '"#x"'s (%s:%i)\n",c,__FILE__,__LINE__),\ (x *)malloc(sizeof(x)*(c))) # define cnew(x,c) \ (mxDebugPrintf("* calloc for "#c"=%i '"#x"'s (%s:%i)\n",c,__FILE__,__LINE__),\ (x *)calloc((c),sizeof(x))) # define resize(var,x,c) \ (mxDebugPrintf("* realloc array "#var" ("#x") at %X to size "#c"=%i (%s:%i)\n",var,c,__FILE__,__LINE__),\ (x *)realloc((void*)(var),sizeof(x)*(c))) # define varresize(var,x,bytes) \ (mxDebugPrintf("* realloc var "#var" ("#x") at %X to %i bytes (%s:%i)\n",var,bytes,__FILE__,__LINE__),\ (x *)realloc((void*)(var),(bytes))) # define free(x) \ (mxDebugPrintf("* freeing "#x" at %X (%s:%i)\n",x,__FILE__,__LINE__),\ free((void*)(x))) # else /* Non-debug versions of the macros */ # define newstruct(x) ((x *)malloc(sizeof(x))) # define cnewstruct(x) ((x *)calloc(sizeof(x),1)) # define new(x,c) ((x *)malloc(sizeof(x)*(c))) # define cnew(x,c) ((x *)calloc((c),sizeof(x))) # define resize(var,x,c) ((x *)realloc((void*)(var),sizeof(x)*(c))) # define varresize(var,x,bytes) ((x *)realloc((void*)(var),(bytes))) # define free(x) (free((void*)(x))) # endif #else /* --- Use Python pymalloc for memory allocation --- */ # ifdef MAL_USING_CNEW /* Helper needed since Python doesn't define a calloc() interface. */ static void *mx_PyObject_CALLOC(register size_t size) { register void *mem; if (size == 0) return NULL; mem = PyObject_MALLOC(size); if (mem) memset(mem, 0, size); return mem; } # endif # ifndef MAL_MEM_DEBUG /* Non-debug versions of the macros */ # define newstruct(x) ((x *)PyObject_MALLOC(sizeof(x))) # ifdef MAL_USING_CNEW # define cnewstruct(x) ((x *)mx_PyObject_CALLOC(sizeof(x))) # endif # define new(x,c) ((x *)PyObject_MALLOC(sizeof(x)*(c))) # ifdef MAL_USING_CNEW # define cnew(x,c) ((x *)mx_PyObject_CALLOC(sizeof(x)*(c))) # endif # define resize(var,x,c) ((x *)PyObject_REALLOC((void*)(var),sizeof(x)*(c))) # define varresize(var,x,bytes) ((x *)PyObject_REALLOC((void*)(var),(bytes))) # define free(x) (PyObject_FREE((void*)(x))) # else /* Debug versions of the macros */ # define newstruct(x) \ (mxDebugPrintf("* malloc for struct "#x" (%s:%i)\n",__FILE__,__LINE__), \ (x *)PyObject_MALLOC(sizeof(x))) # ifdef MAL_USING_CNEW # define cnewstruct(x) \ (mxDebugPrintf("* calloc for struct "#x" (%s:%i)\n",c,__FILE__,__LINE__), \ ((x *)mx_PyObject_CALLOC(sizeof(x)))) # endif # define new(x,c) \ (mxDebugPrintf("* malloc for "#c"=%i '"#x"'s (%s:%i)\n",c,__FILE__,__LINE__), \ ((x *)PyObject_MALLOC(sizeof(x)*(c)))) # ifdef MAL_USING_CNEW # define cnew(x,c) \ (mxDebugPrintf("* calloc for "#c"=%i '"#x"'s (%s:%i)\n",c,__FILE__,__LINE__), \ ((x *)mx_PyObject_CALLOC(sizeof(x)*(c)))) # endif # define resize(var,x,c) \ (mxDebugPrintf("* realloc array "#var" ("#x") at %X to size "#c"=%i (%s:%i)\n",var,c,__FILE__,__LINE__), \ ((x *)PyObject_REALLOC((void*)(var),sizeof(x)*(c)))) # define varresize(var,x,bytes) \ (mxDebugPrintf("* realloc var "#var" ("#x") at %X to %i bytes (%s:%i)\n",var,bytes,__FILE__,__LINE__), \ ((x *)PyObject_REALLOC((void*)(var),(bytes)))) # define free(x) \ (mxDebugPrintf("* freeing "#x" at %X (%s:%i)\n",x,__FILE__,__LINE__), \ (PyObject_FREE((void*)(x)))) # endif #endif /* --- Debugging output ------------------------------------------------- */ /* Use the flag MAL_DEBUG to enable debug processing. The flag MAL_DEBUG_WITH_PYTHON can be used to indicate that the object file will be linked with Python, so we can use Python APIs for the debug processing here. */ #ifdef MAL_DEBUG_WITH_PYTHON # ifndef PYTHON_API_VERSION # error "mx.h must be included when compiling with MAL_DEBUG_WITH_PYTHON" # endif # ifndef MAL_DEBUG # define MAL_DEBUG # endif #else # if defined(PYTHON_API_VERSION) && defined(MAL_DEBUG) # define MAL_DEBUG_WITH_PYTHON # endif #endif /* Indicator for the availability of these interfaces: */ #define HAVE_MAL_DEBUG /* Name of the environment variable defining the log file name to be used: */ #ifndef MAL_DEBUG_OUTPUTFILE_ENV_VARIABLE # define MAL_DEBUG_OUTPUTFILE_ENV_VARIABLE "mxLogFile" #endif /* File name to be used for debug logging (each object file using this facility may set its own logging file) if no environment variable is set: */ #ifndef MAL_DEBUG_OUTPUTFILE # define MAL_DEBUG_OUTPUTFILE "mx.log" #endif /* Name of the environment variable defining the log file prefix to be used (e.g. to direct all log files into a separate directory): */ #ifndef MAL_DEBUG_OUTPUTFILEPREFIX_ENV_VARIABLE # define MAL_DEBUG_OUTPUTFILEPREFIX_ENV_VARIABLE "mxLogFileDir" #endif /* File name prefix to be used for log files, if no environment variable is set: */ #ifndef MAL_DEBUG_OUTPUTFILEPREFIX # define MAL_DEBUG_OUTPUTFILEPREFIX "" #endif /* Log id to be used */ #ifndef MAL_DEBUG_LOGID # define MAL_DEBUG_LOGID "New Log Session" #endif /* Debug printf() API Output is written to a log file or stream. If the output file is not yet open, the function will try to open the file as defined by the environment or the program defines. The file remains open until the program terminates. Subsequent changes to the environment are not taken into account. The output file is deduced in the following way: 1. get the filename from the environment, revert to the predefined value 2. get the filename prefix from the environment, revert to the predefined value 3. if filename is one of "stderr" or "stdout" use the native streams for output; otherwise try to open fileprefix + filename reverting to stderr in case this fails. */ static int mxDebugPrintf(const char *format, ...) { va_list args; static FILE *mxDebugPrintf_file; if (!mxDebugPrintf_file) { time_t now; char *filename,*fileprefix; now = time(NULL); filename = getenv(MAL_DEBUG_OUTPUTFILE_ENV_VARIABLE); if (!filename) filename = MAL_DEBUG_OUTPUTFILE; fileprefix = getenv(MAL_DEBUG_OUTPUTFILEPREFIX_ENV_VARIABLE); if (!fileprefix) fileprefix = MAL_DEBUG_OUTPUTFILEPREFIX; if (strcmp(filename,"stdout") == 0) mxDebugPrintf_file = stdout; else if (strcmp(filename,"stderr") == 0) mxDebugPrintf_file = stderr; else { char logfile[512]; if (strlen(fileprefix) + strlen(filename) > sizeof(logfile) - 1) { /* Hack to shut up "cc -Wall" warning that this function is not used... */ static void *mxDebugPrintf_used; mxDebugPrintf_used = (void *)mxDebugPrintf; /* Default to stderr in case the log file name doesn't fit the available buffer */ mxDebugPrintf_file = stderr; fprintf(mxDebugPrintf_file, "\n*** Log file name too long: '%s%s'; " "using stderr\n", fileprefix, filename); } else { /* We made sure that there is enough room in logfile, so can use the unlimited APIs here */ strcpy(logfile, fileprefix); strcat(logfile, filename); mxDebugPrintf_file = fopen(logfile,"ab"); if (!mxDebugPrintf_file) { /* Default to stderr in case the log file cannot be opened */ mxDebugPrintf_file = stderr; fprintf(mxDebugPrintf_file, "\n*** Failed to open log file '%s'; " "using stderr\n",logfile); } } } fprintf(mxDebugPrintf_file, "\n--- "MAL_DEBUG_LOGID" --- %s\n", ctime(&now)); } va_start(args,format); vfprintf(mxDebugPrintf_file,format,args); fflush(mxDebugPrintf_file); va_end(args); return 1; } #ifdef MAL_DEBUG # ifdef MAL_DEBUG_WITH_PYTHON /* Use the Python debug flag to enable debugging output (python -d) */ # define DPRINTF if (Py_DebugFlag) mxDebugPrintf # define IF_DEBUGGING if (Py_DebugFlag) # define DEBUGGING (Py_DebugFlag > 0) # else /* Always output debugging information */ # define DPRINTF mxDebugPrintf # define IF_DEBUGGING # define DEBUGGING (1) # endif #else # ifndef _MSC_VER /* This assumes that you are using an optimizing compiler which eliminates the resulting debug code. */ # define DPRINTF if (0) mxDebugPrintf # define IF_DEBUGGING if (0) # define DEBUGGING (0) # else /* MSVC doesn't do a good job here, so we use a different approach. */ # define DPRINTF 0 && mxDebugPrintf # define IF_DEBUGGING if (0) # define DEBUGGING (0) # endif #endif /* --- Misc ------------------------------------------------------------- */ /* The usual bunch... */ #ifndef max # define max(a,b) ((a>b)?(a):(b)) #endif #ifndef min # define min(a,b) ((aob_size; /* table length */ int rc = -1; /* return code: -1 not set, 0 error, 1 not ok, 2 ok */ Py_ssize_t loopcount = -1; /* loop counter */ Py_ssize_t loopstart = start; /* loop start position */ int flags; /* flags set in command */ int cmd; /* command */ Py_ssize_t jne; /* rel. jump distance on 'not matched' */ Py_ssize_t je; /* dito on 'matched' */ PyObject *match; /* matching parameter */ /* Init */ Py_AssertWithArg(TE_STRING_CHECK(textobj), PyExc_TypeError, "expected a string or unicode to parse: found %.50s", textobj->ob_type->tp_name); text = TE_STRING_AS_STRING(textobj); x = start; Py_AssertWithArg(mxTagTable_Check(table), PyExc_TypeError, "expected a TagTable: found %.50s", table->ob_type->tp_name); if (sliceleft == sliceright) { /* Matching on an empty string will always fail */ rc = 1; goto finished; } Py_AssertWith2Args(sliceleft < sliceright, PyExc_ValueError, "invalid slice indexes: [%ld:%ld]", (long)sliceleft, (long)sliceright); /* Main loop */ for (i = 0, je = 0;;) { mxTagTableEntry *entry; next_entry: /* Get next entry */ i += je; if (i >= table_len || i < 0 || x > sliceright) /* Out of bounds: we're finished */ goto finished; /* Load entry */ entry = &table->entry[i]; cmd = entry->cmd; flags = entry->flags; match = entry->args; jne = entry->jne; je = entry->je; IF_DEBUGGING { PyObject *v; mxDebugPrintf("\n# Tag Table entry %ld: ", (long)i); v = PyObject_Repr(entry->tagobj); if (!v) { v = entry->tagobj; Py_INCREF(v); } if (PyString_Check(v)) mxDebugPrintf("tagobj=%s cmd=%i flags=%i position=%ld\n", PyString_AsString(v),cmd,flags,(long)x); else mxDebugPrintf("tagobj at 0x%lx cmd=%i flags=%i position=%ld\n", (long)v,cmd,flags,(long)x); Py_DECREF(v); } /* Low-level matching commands */ if (cmd < MATCH_MAX_LOWLEVEL) { TE_CHAR *m = TE_STRING_AS_STRING(match); /* save starting position */ start = x; /* Low-level commands never match the EOF */ if (x == sliceright) goto low_level_done; /* Note that the Tag Table Compiler assures that the match string for all of these low-level commands (except AllInCharSet and IsInCharSet) are non-empty. */ switch (cmd) { case MATCH_ALLIN: { register Py_ssize_t ml = TE_STRING_GET_SIZE(match); register TE_CHAR *tx = &text[x]; DPRINTF("\nAllIn :\n" " looking for = '%.40s'\n" " in string = '%.40s'\n",m,tx); if (ml > 1) for (; x < sliceright; tx++, x++) { register Py_ssize_t j; register TE_CHAR *mj = m; register TE_CHAR ctx = *tx; for (j=0; j < ml && ctx != *mj; mj++, j++) ; if (j == ml) break; } else /* one char only: use faster variant: */ for (; x < sliceright && *tx == *m; tx++, x++) ; break; } case MATCH_ALLNOTIN: { register Py_ssize_t ml = TE_STRING_GET_SIZE(match); register TE_CHAR *tx = &text[x]; DPRINTF("\nAllNotIn :\n" " looking for = '%.40s'\n" " not in string = '%.40s'\n",m,tx); if (ml > 1) for (; x < sliceright; tx++, x++) { register Py_ssize_t j; register TE_CHAR *mj = m; register TE_CHAR ctx = *tx; for (j=0; j < ml && ctx != *mj; mj++, j++) ; if (j != ml) break; } else /* one char only: use faster variant: */ for (; x < sliceright && *tx != *m; tx++, x++) ; break; } case MATCH_IS: { DPRINTF("\nIs :\n" " looking for = '%.40s'\n" " in string = '%.40s'\n",m,text+x); if (*(&text[x]) == *m) x++; break; } case MATCH_ISNOT: { DPRINTF("\nIsNot :\n" " looking for = '%.40s'\n" " in string = '%.40s'\n",m,text+x); if (*(&text[x]) != *m) x++; break; } case MATCH_ISIN: { register Py_ssize_t ml = TE_STRING_GET_SIZE(match); register TE_CHAR ctx = text[x]; register Py_ssize_t j; register TE_CHAR *mj = m; DPRINTF("\nIsIn :\n" " looking for = '%.40s'\n" " in string = '%.40s'\n",m,text+x); for (j=0; j < ml && ctx != *mj; mj++, j++) ; if (j != ml) x++; break; } case MATCH_ISNOTIN: { register Py_ssize_t ml = TE_STRING_GET_SIZE(match); register TE_CHAR ctx = text[x]; register Py_ssize_t j; register TE_CHAR *mj = m; DPRINTF("\nIsNotIn :\n" " looking for = '%.40s'\n" " not in string = '%.40s'\n",m,text+x); for (j=0; j < ml && ctx != *mj; mj++, j++) ; if (j == ml) x++; break; } case MATCH_WORD: { Py_ssize_t ml1 = TE_STRING_GET_SIZE(match) - 1; register TE_CHAR *tx = &text[x + ml1]; register Py_ssize_t j = ml1; register TE_CHAR *mj = &m[j]; DPRINTF("\nWord :\n" " looking for = '%.40s'\n" " in string = '%.40s'\n",m,&text[x]); if (x+ml1 >= sliceright) break; /* compare from right to left */ for (; j >= 0 && *tx == *mj; tx--, mj--, j--) ; if (j >= 0) /* not matched */ x = start; /* reset */ else x += ml1 + 1; break; } case MATCH_WORDSTART: case MATCH_WORDEND: { Py_ssize_t ml1 = TE_STRING_GET_SIZE(match) - 1; register TE_CHAR *tx = &text[x]; DPRINTF("\nWordStart/End :\n" " looking for = '%.40s'\n" " in string = '%.40s'\n",m,tx); /* Brute-force method; from right to left */ for (;;) { register Py_ssize_t j = ml1; register TE_CHAR *mj = &m[j]; if (x+j >= sliceright) { /* reached eof: no match, rewind */ x = start; break; } /* scan from right to left */ for (tx += j; j >= 0 && *tx == *mj; tx--, mj--, j--) ; /* DPRINTF("match text[%ld+%ld]: %c == %c\n", x,j,*tx,*mj); */ if (j < 0) { /* found */ if (cmd == MATCH_WORDEND) x += ml1 + 1; break; } /* not found: rewind and advance one char */ tx -= j - 1; x++; } break; } #if (TE_TABLETYPE == MXTAGTABLE_STRINGTYPE) /* Note: These two only work for 8-bit set strings. */ case MATCH_ALLINSET: { register TE_CHAR *tx = &text[x]; unsigned char *m = (unsigned char *)PyString_AS_STRING(match); DPRINTF("\nAllInSet :\n" " looking for = set at 0x%lx\n" " in string = '%.40s'\n",(long)match,tx); for (; x < sliceright && (m[((unsigned char)*tx) >> 3] & (1 << (*tx & 7))) > 0; tx++, x++) ; break; } case MATCH_ISINSET: { register TE_CHAR *tx = &text[x]; unsigned char *m = (unsigned char *)PyString_AS_STRING(match); DPRINTF("\nIsInSet :\n" " looking for = set at 0x%lx\n" " in string = '%.40s'\n",(long)match,tx); if (x < sliceright && (m[((unsigned char)*tx) >> 3] & (1 << (*tx & 7))) > 0) x++; break; } #endif case MATCH_ALLINCHARSET: { Py_ssize_t matching; DPRINTF("\nAllInCharSet :\n" " looking for = CharSet at 0x%lx\n" " in string = '%.40s'\n", (long)match, &text[x]); matching = mxCharSet_Match(match, textobj, x, sliceright, 1); if (matching < 0) goto onError; x += matching; break; } case MATCH_ISINCHARSET: { int test; DPRINTF("\nIsInCharSet :\n" " looking for = CharSet at 0x%lx\n" " in string = '%.40s'\n", (long)match, &text[x]); #if (TE_TABLETYPE == MXTAGTABLE_STRINGTYPE) test = mxCharSet_ContainsChar(match, text[x]); #else test = mxCharSet_ContainsUnicodeChar(match, text[x]); #endif if (test < 0) goto onError; if (test) x++; break; } } low_level_done: /* Not matched */ if (x == start) { DPRINTF(" (no success)\n"); if (jne == 0) { /* failed */ rc = 1; goto finished; } else je = jne; goto next_entry; } /* Matched */ if (entry->tagobj) { if (TE_HANDLE_MATCH(flags, textobj, taglist, entry->tagobj, start,x, NULL, context) < 0) goto onError; DPRINTF(" [%ld:%ld] (matched and remembered this slice)\n", (long)start, (long)x); } else DPRINTF(" [%ld:%ld] (matched but not saved)\n", (long)start, (long)x); if (flags & MATCH_LOOKAHEAD) { x = start; DPRINTF(" LOOKAHEAD flag set: reseting position to %ld\n", (long)x); } goto next_entry; } /* Jumps & low-level special commands */ if (cmd < MATCH_MAX_SPECIALS) { switch (cmd) { case MATCH_FAIL: /* == MATCH_JUMP */ if (jne == 0) { /* match failed */ rc = 1; goto finished; } else je = jne; goto next_entry; case MATCH_SKIP: DPRINTF("\nSkip %ld characters\n" " in string = '%.40s'\n", PyInt_AS_LONG(match),text+x); start = x; x += PyInt_AS_LONG(match); break; case MATCH_MOVE: start = x; x = PyInt_AS_LONG(match); if (x < 0) /* Relative to end of the slice */ x += sliceright + 1; else /* Relative to beginning of the slice */ x += sliceleft; DPRINTF("\nMove to position %ld \n" " string = '%.40s'\n", (long)x, text+x); break; case MATCH_EOF: DPRINTF("\nEOF at position %ld ? \n" " string = '%.40s'\n", (long)x, text+x); if (x < sliceright) { /* not matched */ DPRINTF(" (no success)\n"); if (jne == 0) { /* match failed */ rc = 1; goto finished; } else je = jne; goto next_entry; } /* Matched & finished */ x = sliceright; if (entry->tagobj) { if (TE_HANDLE_MATCH(flags, textobj, taglist, entry->tagobj, x, x, NULL, context) < 0) goto onError; DPRINTF(" [%ld:%ld] (matched and remembered this slice)\n", (long)x, (long)x); } else DPRINTF(" [%ld:%ld] (matched but not saved)\n", (long)x, (long)x); rc = 2; goto finished; case MATCH_JUMPTARGET: DPRINTF("\nJumpTarget '%.40s'\n", PyString_AsString(match)); if (entry->tagobj) { if (TE_HANDLE_MATCH(flags, textobj, taglist, entry->tagobj, x, x, NULL, context) < 0) goto onError; DPRINTF(" [%ld:%ld] (matched and remembered this slice)\n", (long)x, (long)x); } else DPRINTF(" [%ld:%ld] (matched but not saved)\n", (long)x, (long)x); goto next_entry; } /* Matched */ if (x < 0) Py_ErrorWithArg(PyExc_TypeError, "Tag Table entry %ld: " "moved/skipped beyond start of text", (long)i); if (entry->tagobj) { if (TE_HANDLE_MATCH(flags, textobj, taglist, entry->tagobj, start, x, NULL, context) < 0) goto onError; DPRINTF(" [%ld:%ld] (matched and remembered this slice)\n", (long)start, (long)x); } else DPRINTF(" [%ld:%ld] (matched but not saved)\n", (long)start, (long)x); if (flags & MATCH_LOOKAHEAD) { x = start; DPRINTF(" LOOKAHEAD flag set: reseting position to %ld\n", (long)x); } goto next_entry; } /* Higher level matching and special commands */ switch (cmd) { case MATCH_SWORDSTART: case MATCH_SWORDEND: case MATCH_SFINDWORD: { Py_ssize_t wordstart, wordend; int rc; DPRINTF("\nsWordStart/End/sFindWord :\n" " in string = '%.40s'\n",text+x); start = x; rc = TE_SEARCHAPI(match, text, start, sliceright, &wordstart, &wordend); if (rc < 0) goto onError; if (rc == 0) { /* not matched */ DPRINTF(" (no success)\n"); if (jne == 0) { /* match failed */ rc = 1; goto finished; } else je = jne; } else { /* matched */ if (cmd == MATCH_SWORDSTART) x = wordstart; else { x = wordend; if (cmd == MATCH_SFINDWORD) start = wordstart; } if (entry->tagobj) { if (TE_HANDLE_MATCH(flags, textobj, taglist, entry->tagobj, start, x, NULL, context) < 0) goto onError; DPRINTF(" [%ld:%ld] (matched and remembered this slice)\n", (long)start, (long)x); } else DPRINTF(" [%ld:%ld] (matched but not saved)\n", (long)start, (long)x); if (flags & MATCH_LOOKAHEAD) { x = start; DPRINTF(" LOOKAHEAD option set: reseting position to %ld\n", (long)x); } } goto next_entry; } case MATCH_TABLE: case MATCH_SUBTABLE: if (PyInt_Check(match) && PyInt_AS_LONG(match) == MATCH_THISTABLE) match = (PyObject *)table; /* XXX Fix to auto-compile that match argument */ if (PyTuple_Check(match)) { Py_Error(PyExc_TypeError, "Match argument must be compiled TagTable"); } else { PyObject *subtags; Py_ssize_t y = x; int newrc = 0; Py_ssize_t taglist_len; if (taglist != Py_None && cmd != MATCH_SUBTABLE) { /* Create a new list for use as subtaglist */ subtags = PyList_New(0); if (subtags == NULL) goto onError; taglist_len = 0; } else { /* Use taglist as subtaglist */ subtags = taglist; Py_INCREF(subtags); if (taglist != Py_None) { taglist_len = PyList_Size(taglist); if (taglist_len < 0) goto onError; } else taglist_len = 0; } DPRINTF("\n[Sub]Table : using table at 0x%lx\n",(long)match); start = x; /* match other table */ newrc = TE_ENGINE_API(textobj, start, sliceright, (mxTagTableObject *)match, subtags, context, &y); if (newrc == 0) { Py_DECREF(subtags); goto onError; } if (newrc == 1) { /* not matched */ DPRINTF(" (no success)\n"); /* Undo changes to taglist in case of SUBTABLE match */ if (cmd == MATCH_SUBTABLE && taglist != Py_None) { DPRINTF(" undoing changes: del taglist[%ld:%ld]\n", (long)taglist_len, (long)PyList_Size(taglist)); if (PyList_SetSlice(taglist, taglist_len, PyList_Size(taglist), NULL)) goto onError; } if (jne == 0) { /* match failed */ rc = 1; Py_DECREF(subtags); goto finished; } else je = jne; } else { /* matched */ /* move x to new position */ x = y; /* Use None as subtaglist for the match entry for SUBTABLE */ if (cmd == MATCH_SUBTABLE) { Py_DECREF(subtags); Py_INCREF(Py_None); subtags = Py_None; } if (entry->tagobj) { if (TE_HANDLE_MATCH(flags, textobj, taglist, entry->tagobj, start, x, subtags, context) < 0) { /* append failed */ Py_DECREF(subtags); goto onError; } DPRINTF(" [%ld:%ld] (matched and remembered this slice)\n", (long)start, (long)x); } else DPRINTF(" [%ld:%ld] (matched but not saved)\n", (long)start, (long)x); if (flags & MATCH_LOOKAHEAD) { x = start; DPRINTF(" LOOKAHEAD option set: reseting position to %ld\n", (long)x); } } Py_DECREF(subtags); } goto next_entry; case MATCH_TABLEINLIST: case MATCH_SUBTABLEINLIST: { PyObject *subtags; Py_ssize_t y = x; int newrc = 0; Py_ssize_t taglist_len; /* Get matching table from (list, index_integer) */ match = PyList_GetItem(PyTuple_GET_ITEM(match, 0), PyInt_AS_LONG( PyTuple_GET_ITEM(match, 1)) ); if (match == NULL) Py_ErrorWithArg(PyExc_TypeError, "Tag Table entry %ld: " "matching table not found " "in list of tables", (long)i); if (mxTagTable_Check(match)) Py_INCREF(match); else { /* These tables are considered to be cacheable. */ match = mxTagTable_New(match, table->tabletype, 1); if (match == NULL) goto onError; } if (taglist != Py_None && cmd != MATCH_SUBTABLEINLIST) { /* Create a new list for use as subtaglist */ subtags = PyList_New(0); if (subtags == NULL) { Py_DECREF(match); goto onError; } taglist_len = 0; } else { /* Use taglist as subtaglist */ subtags = taglist; Py_INCREF(subtags); if (taglist != Py_None) { taglist_len = PyList_Size(taglist); if (taglist_len < 0) goto onError; } else taglist_len = 0; } DPRINTF("\n[Sub]TableInList : using table at 0x%lx\n", (long)match); /* XXX This part is almost identical to the above MATCH_TABLE code -- should do something about this... */ start = x; /* match other table */ newrc = TE_ENGINE_API(textobj, start, sliceright, (mxTagTableObject *)match, subtags, context, &y); if (newrc == 0) { Py_DECREF(subtags); Py_DECREF(match); goto onError; } if (newrc == 1) { /* not matched */ DPRINTF(" (no success)\n"); /* Undo changes to taglist in case of SUBTABLE match */ if (cmd == MATCH_SUBTABLEINLIST && taglist != Py_None) { DPRINTF(" undoing changes: del taglist[%ld:%ld]\n", (long)taglist_len, (long)PyList_Size(taglist)); if (PyList_SetSlice(taglist, taglist_len, PyList_Size(taglist), NULL)) goto onError; } if (jne == 0) { /* match failed */ rc = 1; Py_DECREF(subtags); Py_DECREF(match); goto finished; } else je = jne; } else { /* matched */ /* move x to new position */ x = y; /* Use None as subtaglist for the match entry for SUBTABLEINLIST */ if (cmd == MATCH_SUBTABLEINLIST) { Py_DECREF(subtags); Py_INCREF(Py_None); subtags = Py_None; } if (entry->tagobj) { if (TE_HANDLE_MATCH(flags, textobj, taglist, entry->tagobj, start, x, subtags, context) < 0) { /* append failed */ Py_DECREF(subtags); Py_DECREF(match); goto onError; } DPRINTF(" [%ld:%ld] (matched and remembered this slice)\n", (long)start, (long)x); } else { DPRINTF(" [%ld:%ld] (matched but not saved)\n", (long)start, (long)x); } if (flags & MATCH_LOOKAHEAD) { x = start; DPRINTF(" LOOKAHEAD option set: reseting position to %ld\n", (long)x); } } Py_DECREF(subtags); Py_DECREF(match); goto next_entry; } case MATCH_LOOP: DPRINTF("\nLoop: pre loop counter = %ld\n", (long)loopcount); if (loopcount > 0) /* we are inside a loop */ loopcount--; else if (loopcount < 0) { /* starting a new loop */ if (PyInt_Check(match)) { loopcount = PyInt_AS_LONG(match); loopstart = x; } else Py_ErrorWithArg(PyExc_TypeError, "Tag Table entry %ld: " "expected an integer (cmd=Loop)", (long)i); } if (loopcount == 0) { /* finished loop */ loopcount = -1; if (loopstart == x) { /* not matched */ DPRINTF(" (no success)\n"); } else if (entry->tagobj) { /* matched */ if (TE_HANDLE_MATCH(flags, textobj, taglist, entry->tagobj, loopstart, x, NULL, context) < 0) goto onError; DPRINTF(" [%ld:%ld] (matched and remembered this slice)\n", (long)loopstart, (long)x); } else { DPRINTF(" [%ld:%ld] (matched but not saved)\n", (long)start, (long)x); } if (flags & MATCH_LOOKAHEAD) { x = start; DPRINTF(" LOOKAHEAD option set: reseting position to %ld\n", (long)x); } /* skip loop body */ je = jne; } DPRINTF("\nloop: post loop counter = %ld\n", (long)loopcount); goto next_entry; case MATCH_LOOPCONTROL: DPRINTF("\nLoopControl: loop counter = %ld, " "setting it to = %ld\n", (long)loopcount, (long)PyInt_AS_LONG(match)); loopcount = PyInt_AS_LONG(match); goto next_entry; case MATCH_CALL: case MATCH_CALLARG: { PyObject *fct; Py_ssize_t argc; register PyObject *w; if (!PyTuple_Check(match)) { argc = 0; fct = match; } else { argc = PyTuple_GET_SIZE(match) - 1; Py_AssertWithArg(argc >= 0, PyExc_TypeError, "Tag Table entry %ld: " "expected a tuple (fct,arg0,arg1,...)" "(cmd=CallArg)", (long)i); fct = PyTuple_GET_ITEM(match,0); } DPRINTF("\nCall[Arg] :\n"); start = x; /* Build args = (textobj,start,sliceright[,arg0,arg1,...][,context]) */ { PyObject *args; register Py_ssize_t i; args = PyTuple_New(3 + argc + (context ? 1 : 0)); if (!args) goto onError; Py_INCREF(textobj); PyTuple_SET_ITEM(args,0,textobj); w = PyInt_FromSsize_t(start); if (!w) goto onError; PyTuple_SET_ITEM(args,1,w); w = PyInt_FromSsize_t(sliceright); if (!w) goto onError; PyTuple_SET_ITEM(args,2,w); for (i = 0; i < argc; i++) { w = PyTuple_GET_ITEM(match,i + 1); Py_INCREF(w); PyTuple_SET_ITEM(args,3 + i,w); } if (context) { Py_INCREF(context); PyTuple_SET_ITEM(args, 3 + argc, context); } w = PyEval_CallObject(fct,args); Py_DECREF(args); if (w == NULL) goto onError; } Py_AssertWithArg(PyInt_Check(w), PyExc_TypeError, "Tag Table entry %ld: " "matching fct has to return an integer", (long)i); x = PyInt_AS_LONG(w); Py_DECREF(w); if (start == x) { /* not matched */ DPRINTF(" (no success)\n"); if (jne == 0) { /* match failed */ rc = 1; goto finished; } else je = jne; } else if (entry->tagobj) { /* matched */ if (TE_HANDLE_MATCH(flags, textobj, taglist, entry->tagobj, start, x, NULL, context) < 0) goto onError; DPRINTF(" [%ld:%ld] (matched and remembered this slice)\n", (long)start, (long)x); } else { DPRINTF(" [%ld:%ld] (matched but not saved)\n", (long)start, (long)x); } if (flags & MATCH_LOOKAHEAD) { x = start; DPRINTF(" LOOKAHEAD option set: reseting position to %ld\n", (long)x); } goto next_entry; } } } /* for-loop */ finished: /* In case no specific return code was set, check if we have matched successfully (table index beyond the end of the table) or failed to match (table index negative or scanned beyond the end of the slice) */ if (rc < 0) { if (i >= table_len) rc = 2; /* Ok */ else if (i < 0) rc = 1; /* Not Ok */ else if (x > sliceright) rc = 1; /* Not Ok */ else Py_ErrorWithArg(PyExc_StandardError, "Internal Error: " "tagging engine finished with no proper result " "at position %ld in table", (long)i); } DPRINTF("\nTag Engine finished: %s; Tag Table entry %ld; position %ld\n", rc==1?"failed":"success", (long)i, (long)x); /* Record the current head position */ *next = x; return rc; onError: rc = 0; return rc; } /* What to do with a successful match depends on the value of flags: flags mod x == 1: ----------------- MATCH_CALLTAG: call the tagobj with (taglist,textobj,match_left,r,subtags) and let it decide what to do; if context is given, the tagobj is called with (taglist,textobj,match_left,r,subtags,context) instead MATCH_APPENDTAG: do a tagobj.append((None,match_left,r,subtags)) MATCH_APPENDTAGOBJ: do a taglist.append(tagobj) MATCH_APPENDMATCH: do a taglist.append(textobj[match_left:r]) default: do a taglist.append((tagobj,match_left,r,subtags)) - subtags is made to reference Py_None, if subtags == NULL - returns -1 if not successful, 0 on success - refcounts: all reference counts are incremented upon success only */ statichere int TE_HANDLE_MATCH(int flags, PyObject *textobj, PyObject *taglist, PyObject *tagobj, Py_ssize_t match_left, Py_ssize_t match_right, PyObject *subtags, PyObject *context) { register PyObject *w; if (subtags == NULL) subtags = Py_None; if (tagobj == NULL) tagobj = Py_None; /* Default mechanism: */ if (flags == 0 || flags == MATCH_LOOKAHEAD) { /* append result to taglist */ if (!taglist || taglist == Py_None) return 0; /* nothing to be done */ /* Build w = (tagobj,match_left,match_right,subtags) */ w = PyTuple_New(4); if (!w) goto onError; Py_INCREF(tagobj); PyTuple_SET_ITEM(w,0,tagobj); PyTuple_SET_ITEM(w,1,PyInt_FromSsize_t(match_left)); PyTuple_SET_ITEM(w,2,PyInt_FromSsize_t(match_right)); Py_INCREF(subtags); PyTuple_SET_ITEM(w,3,subtags); if (PyList_Append(taglist,w)) goto onError; Py_DECREF(w); return 0; } /* Flags are set: */ if (flags & MATCH_APPENDTAGOBJ) { /* append the tagobj to the taglist */ if (taglist == Py_None) return 0; /* nothing to be done */ return PyList_Append(taglist,tagobj); } if (flags & MATCH_APPENDMATCH) { /* append the match to the taglist */ register PyObject *v; if (taglist == Py_None) return 0; /* nothing to be done */ v = TE_STRING_FROM_STRING(TE_STRING_AS_STRING(textobj) + match_left, match_right - match_left); if (!v) goto onError; if (PyList_Append(taglist,v)) goto onError; Py_DECREF(v); return 0; } if (flags & MATCH_CALLTAG) { /* call tagobj */ register PyObject *args; Py_ssize_t nargs = 5; if (context) nargs++; /* Build args = (taglist,textobj, match_left,match_right, subtags[,context]) */ args = PyTuple_New(nargs); if (!args) goto onError; Py_INCREF(taglist); PyTuple_SET_ITEM(args,0,taglist); Py_INCREF(textobj); PyTuple_SET_ITEM(args,1,textobj); PyTuple_SET_ITEM(args,2,PyInt_FromSsize_t(match_left)); PyTuple_SET_ITEM(args,3,PyInt_FromSsize_t(match_right)); Py_INCREF(subtags); PyTuple_SET_ITEM(args,4,subtags); if (context) { Py_INCREF(context); PyTuple_SET_ITEM(args,5,context); } w = PyEval_CallObject(tagobj,args); Py_DECREF(args); if (w == NULL) goto onError; Py_DECREF(w); return 0; } if (flags & MATCH_APPENDTAG) { /* append to tagobj */ /* Build w = (None,match_left,match_right,subtags) */ w = PyTuple_New(4); if (!w) goto onError; Py_INCREF(Py_None); PyTuple_SET_ITEM(w,0,Py_None); PyTuple_SET_ITEM(w,1,PyInt_FromSsize_t(match_left)); PyTuple_SET_ITEM(w,2,PyInt_FromSsize_t(match_right)); Py_INCREF(subtags); PyTuple_SET_ITEM(w,3,subtags); if (PyList_Check(tagobj)) { if (PyList_Append(tagobj, w)) { Py_DECREF(w); goto onError; } } else { PyObject *result; result = PyEval_CallMethod(tagobj, "append", "(O)", w); Py_DECREF(w); if (result == NULL) goto onError; Py_DECREF(result); } Py_DECREF(w); return 0; } if (flags & MATCH_LOOKAHEAD) return 0; Py_Error(PyExc_TypeError, "Tag Table: unknown flag in command"); onError: return -1; } egenix-mx-base-3.2.7/mx/TextTools/mxTextTools/test.py0000664000175000017500000007210110473122171022445 0ustar lemburglemburg# -*- coding: latin-1 -*- from mx.TextTools import __version__ from mx.TextTools.Examples.HTML import * from mx.TextTools.Constants.TagTables import * import pprint, time, pickle print 'Testing mxTextTools version', __version__ print # Test for Unicode try: unicode except NameError: HAVE_UNICODE = 0 else: HAVE_UNICODE = 1 ua = unicode('a') ub = unicode('b') uc = unicode('c') ud = unicode('d') ue = unicode('e') uabc = unicode('abc') uHello = unicode('Hello') uempty = unicode('') # Find a HTML file usable for the test if len(sys.argv) > 1: filenames = sys.argv[1:] else: filenames = ['/usr/share/doc/packages/mysql/html/manual.html', '../Doc/mxTextTools.html'] text = '' for filename in filenames: try: text = open(filename).read() except IOError: pass else: print 'HTML file used for testing the Tagging Engine:' print ' ', filename print break if not text: text = """ mx Extension Series - License Information ... """#" # Test suite while 1: if 1: print 'Tagging Engine:' print ' parsing HTML ...', utext = upper(text) t = time.clock() result, taglist, nextindex = tag(utext, htmltable) assert result == 1 print ' done. (%5.2f sec.; len(taglist)=%i)' % \ (time.clock() - t, len(taglist)) if HAVE_UNICODE: print ' parsing Unicode HTML ...', try: uutext = unicode(utext, 'latin-1') except UnicodeError: print ' ... HTML data must be Latin-1; skipping test.' else: t = time.clock() result, utaglist, nextindex = tag(uutext, htmltable) assert result == 1 print ' done. (%5.2f sec.; len(utaglist)=%i)' % \ (time.clock() - t, len(utaglist)) assert taglist == utaglist utaglist = None uutext = None utext = None taglist = None print ' testing some tag table semantics...' table = ((None,Word,'Word'),) assert tag('Word',table)[0] == 1 assert tag('word',table)[0] == 0 assert tag('xyz',table)[0] == 0 table = ((None,Word,'Word',MatchFail),) assert tag('Word',table)[0] == 1 assert tag('word',table)[0] == 0 assert tag('xyz',table)[0] == 0 table = ((None,Word,'Word',MatchOk),) assert tag('Word',table)[0] == 1 assert tag('word',table)[0] == 1 assert tag('xyz',table)[0] == 1 table = ((None,Word,'Word',MatchOk,MatchFail),) assert tag('Word',table)[0] == 0 assert tag('word',table)[0] == 1 assert tag('xyz',table)[0] == 1 print ' done.' #continue print 'splitat()' assert splitat('Hello','l') == ('He', 'lo') assert splitat('Hello','l',2) == ('Hel', 'o') assert splitat('Hello','l',-1) == ('Hel', 'o') assert splitat('Hello','l',-2) == ('He', 'lo') if HAVE_UNICODE: assert splitat(uHello,'l') == (unicode('He'), unicode('lo')) assert splitat(uHello,'l',2) == (unicode('Hel'), unicode('o')) assert splitat(uHello,unicode('l'),-1) == (unicode('Hel'), unicode('o')) assert splitat(uHello,unicode('l'),-2) == (unicode('He'), unicode('lo')) print 'suffix()' assert suffix('abc.html/',('.htm','abc','.html','/'),0,3) == 'abc' assert suffix('abc.html/',('.htm','abc','.html','/'),0,4) == None assert suffix('abc.html/',('.htm','abc','.html','/'),0,8) == '.html' if HAVE_UNICODE: assert suffix(unicode('abc.html/'),('.htm','abc','.html','/'),0,3) == unicode('abc') assert suffix(unicode('abc.html/'),(unicode('.htm'),unicode('abc'),'.html','/'),0,3) == unicode('abc') assert suffix(unicode('abc.html/'),('.htm','abc',unicode('.html'),'/'),0,3) == unicode('abc') try: suffix('abc.html/',(unicode('.htm'),'abc','.html','/')) except TypeError: pass else: raise AssertionError, \ 'suffix(string,...) should not accept unicode suffixes' assert suffix(unicode('abc.html/'),('.htm','abc','.html','/'),0,4) == None print 'prefix()' assert prefix('abc.html/',('.htm','abc','.html','/'),0,3) == 'abc' assert prefix('abc.html/',('.htm','abc','.html','/'),1,4) == None assert prefix('abc.html/',('.htm','abc','.html','/'),3,9) == '.htm' if HAVE_UNICODE: assert prefix(unicode('abc.html/'),('.htm','abc','.html','/'),0,3) == unicode('abc') assert prefix(unicode('abc.html/'),(unicode('.htm'),unicode('abc'),'.html','/'),0,3) == unicode('abc') assert prefix(unicode('abc.html/'),('.htm','abc',unicode('.html'),'/'),0,3) == unicode('abc') try: prefix('abc.html/',(unicode('.htm'),'abc','.html','/')) except TypeError: pass else: raise AssertionError, \ 'prefix(string,...) should not accept unicode prefixes' assert prefix(unicode('abc.html/'),('.htm','abc','.html','/'),0,4) == unicode('abc') print 'join()' assert join(('a','b','c')) == 'abc' assert join(['a','b','c']) == 'abc' assert join(('a','b','c'),' ') == 'a b c' assert join(['a','b','c'],' ') == 'a b c' assert join((('abc',0,1),('abc',1,2),('abc',2,3))) == 'abc' assert join((('abc',0,1),'b',('abc',2,3))) == 'abc' assert join((('abc',0,3),)) == 'abc' if HAVE_UNICODE: assert join((ua,ub,uc)) == uabc assert join([ua,ub,uc]) == uabc assert join((ua,ub,uc),' ') == unicode('a b c') assert join([ua,ub,uc],' ') == unicode('a b c') assert join(((uabc,0,1),(uabc,1,2),(uabc,2,3))) == uabc assert join(((uabc,0,1),ub,(uabc,2,3))) == uabc assert join(((uabc,0,3),)) == uabc print 'upper()' assert upper('HeLLo') == 'HELLO' assert upper('hello') == 'HELLO' assert upper('HELLO') == 'HELLO' assert upper('HELLO ') == 'HELLO ' assert upper('HELLO 123') == 'HELLO 123' if HAVE_UNICODE: assert upper(unicode('HeLLo')) == unicode('HELLO') assert upper(unicode('hello')) == unicode('HELLO') assert upper(unicode('HELLO')) == unicode('HELLO') assert upper(unicode('HELLO ')) == unicode('HELLO ') assert upper(unicode('HELLO 123')) == unicode('HELLO 123') print 'lower()' assert lower('HeLLo') == 'hello' assert lower('hello') == 'hello' assert lower('HELLO') == 'hello' assert lower('HELLO ') == 'hello ' assert lower('HELLO 123') == 'hello 123' if HAVE_UNICODE: assert lower(unicode('HeLLo')) == unicode('hello') assert lower(unicode('hello')) == unicode('hello') assert lower(unicode('HELLO')) == unicode('hello') assert lower(unicode('HELLO ')) == unicode('hello ') assert lower(unicode('HELLO 123')) == unicode('hello 123') print 'isascii()' assert isascii('abc') == 1 assert isascii('abc') == 0 assert isascii('abcdef') == 0 assert isascii('.,- 1234') == 1 if HAVE_UNICODE: assert isascii(uabc) == 1 assert isascii(unicode('abc', 'latin-1')) == 0 assert isascii(unicode('abcdef', 'latin-1')) == 0 assert isascii(unicode('.,- 1234')) == 1 print 'setstrip()' assert setstrip('Hello', set('')) == 'Hello' assert setstrip('Hello', set('o')) == 'Hell' assert setstrip(' Hello ', set(' o')) == 'Hell' assert setstrip(' Hello ', set(' o'), 0, len(' Hello '), -1) == 'Hello ' assert setstrip(' Hello ', set(' o'), 0, len(' Hello '), 1) == ' Hell' assert setstrip(' ', set(' ')) == '' print 'setsplit()' assert setsplit('Hello', set('l')) == ['He', 'o'] assert setsplit('Hello', set('lo')) == ['He',] assert setsplit('Hello', set('abc')) == ['Hello',] print 'setsplitx()' assert setsplitx('Hello', set('l')) == ['He', 'll', 'o'] assert setsplitx('Hello', set('lo')) == ['He', 'llo'] assert setsplitx('Hello', set('abc')) == ['Hello',] print 'joinlist()' assert joinlist('Hello', [('A',1,2), ('B',3,4)]) == \ [('Hello', 0, 1), 'A', ('Hello', 2, 3), 'B', ('Hello', 4, 5)] assert join(joinlist('Hello', [('A',1,2), ('B',3,4)])) == \ 'HAlBo' if HAVE_UNICODE: assert joinlist(uHello, [('A',1,2), ('B',3,4)]) == \ [(uHello, 0, 1), 'A', (uHello, 2, 3), 'B', (uHello, 4, 5)] assert join(joinlist(uHello, [('A',1,2), ('B',3,4)])) == \ unicode('HAlBo') assert join(joinlist('Hello', [(ua,1,2), (ub,3,4)])) == \ unicode('Halbo') print 'charsplit()' assert charsplit('Hello', 'l') == ['He', '', 'o'] assert charsplit('Hello', 'e') == ['H', 'llo'] assert charsplit('HelloHello', 'e') == ['H', 'lloH', 'llo'] if HAVE_UNICODE: assert charsplit(uHello, unicode('l')) == [unicode('He'), unicode(''), unicode('o')] assert charsplit(uHello, unicode('e')) == [unicode('H'), unicode('llo')] assert charsplit(uHello*2, unicode('e')) == [unicode('H'), unicode('lloH'), unicode('llo')] print 'CharSet().contains()' tests = [ ("a-z", ('a', 1), ('b', 1), ('c', 1), ('z', 1), ('A', 0), ('B', 0), ('C', 0), ('Z', 0), ), ("a\-z", ('a', 1), ('b', 0), ('c', 0), ('z', 1), ('-', 1), ), ] if HAVE_UNICODE: tests[len(tests):] = [ ("a-z", ('a', 1), ('b', 1), ('c', 1), ('z', 1), ('A', 0), ('B', 0), ('C', 0), ('Z', 0), (unicode('a'), 1), (unicode('b'), 1), (unicode('c'), 1), (unicode('z'), 1), (unicode('A'), 0), (unicode('B'), 0), (unicode('C'), 0), (unicode('Z'), 0), ), ("abc", ('a', 1), ('b', 1), ('c', 1), ('z', 0), ('A', 0), ('B', 0), ('C', 0), ('Z', 0), (unicode('a'), 1), (unicode('b'), 1), (unicode('c'), 1), (unicode('z'), 0), (unicode('A'), 0), (unicode('B'), 0), (unicode('C'), 0), (unicode('Z'), 0), ), (unicode("abc"), ('a', 1), ('b', 1), ('c', 1), ('z', 0), ('A', 0), ('B', 0), ('C', 0), ('Z', 0), (unicode('a'), 1), (unicode('b'), 1), (unicode('c'), 1), (unicode('z'), 0), (unicode('A'), 0), (unicode('B'), 0), (unicode('C'), 0), (unicode('Z'), 0), ), (unicode('a-z\uFFFF', 'unicode-escape'), ('a', 1), ('b', 1), ('c', 1), ('z', 1), ('A', 0), ('B', 0), ('C', 0), ('Z', 0), (unicode('a'), 1), (unicode('b'), 1), (unicode('c'), 1), (unicode('z'), 1), (unicode('A'), 0), (unicode('B'), 0), (unicode('C'), 0), (unicode('Z'), 0), (unichr(55555), 0), (unichr(1234), 0), (unichr(1010), 0), (unichr(0xFFFF), 1), ), (unicode("a\-z"), ('a', 1), ('b', 0), ('c', 0), ('z', 1), ('-', 1), ), ] for test in tests: cs = CharSet(test[0]) for ch, rc in test[1:]: assert cs.contains(ch) == rc, \ 'CharSet(%s).contains(%s) ... expected: %s' % \ (repr(cs.definition), repr(ch), rc) print 'CharSet().search()' tests = [ ("a-z", ('', None), ('abc', 0), ('ABCd', 3), ), ("a\-z", ('', None), ('bcd', None), ('ABCd', None), ('zzz', 0), ), ("abc", ('', None), ('bcd', 0), ('ABCd', None), ('zzz', None), ('dddbbb', 3), ), ] if HAVE_UNICODE: tests[len(tests):] = [ ("a-z", ('', None), ('abc', 0), ('ABCd', 3), (unicode(''), None), (unicode('abc'), 0), (unicode('ABCd'), 3), ), ("a\-z", ('', None), ('bcd', None), ('ABCd', None), ('zzz', 0), (unicode(''), None), (unicode('bcd'), None), (unicode('ABCd'), None), (unicode('zzz'), 0), ), ("abc", ('', None), ('bcd', 0), ('ABCd', None), ('zzz', None), ('dddbbb', 3), (unicode(''), None), (unicode('bcd'), 0), (unicode('ABCd'), None), (unicode('zzz'), None), (unicode('dddbbb'), 3), ), (unicode('a-z\uFFFF', 'unicode-escape'), ('', None), ('abc', 0), ('ABCd', 3), (unicode(''), None), (unicode('abc'), 0), (unicode('ABCd'), 3), (unichr(0xFFFF), 0), ), (unicode('a\-z'), ('', None), ('bcd', None), ('ABCd', None), ('zzz', 0), (unicode(''), None), (unicode('bcd'), None), (unicode('ABCd'), None), (unicode('zzz'), 0), ), (unicode('abc'), ('', None), ('bcd', 0), ('ABCd', None), ('zzz', None), ('dddbbb', 3), (unicode(''), None), (unicode('bcd'), 0), (unicode('ABCd'), None), (unicode('zzz'), None), (unicode('dddbbb'), 3), ), ] for test in tests: cs = CharSet(test[0]) for ch, rc in test[1:]: assert cs.search(ch) == rc, \ 'CharSet(%s).search(%s) ... expected: %s' % \ (repr(cs.definition), repr(ch), rc) print 'CharSet().match()' tests = [ ("a-z", ('', 0), ('abc', 3), ('ABCd', 0), ), ("a\-z", ('', 0), ('bcd', 0), ('ABCd', 0), ('zzz', 3), ), ("abc", ('', 0), ('bcd', 2), ('ABCd', 0), ('zzz', 0), ('dddbbb', 0), ), ] if HAVE_UNICODE: tests[len(tests):] = [ ("a-z", ('', 0), ('abc', 3), ('ABCd', 0), (unicode(''), 0), (unicode('abc'), 3), (unicode('ABCd'), 0), ), ("a\-z", ('', 0), ('bcd', 0), ('ABCd', 0), ('zzz', 3), (unicode(''), 0), (unicode('bcd'), 0), (unicode('ABCd'), 0), (unicode('zzz'), 3), ), ("abc", ('', 0), ('bcd', 2), ('ABCd', 0), ('zzz', 0), ('dddbbb', 0), (unicode(''), 0), (unicode('bcd'), 2), (unicode('ABCd'), 0), (unicode('zzz'), 0), (unicode('dddbbb'), 0), ), (unicode('a-z\uFFFF', 'unicode-escape'), ('', 0), ('abc', 3), ('ABCd', 0), (unicode(''), 0), (unicode('abc'), 3), (unicode('ABCd'), 0), (unichr(0xFFFF), 1), ), (unicode('a\-z'), ('', 0), ('bcd', 0), ('ABCd', 0), ('zzz', 3), (unicode(''), 0), (unicode('bcd'), 0), (unicode('ABCd'), 0), (unicode('zzz'), 3), ), (unicode('abc'), ('', 0), ('bcd', 2), ('ABCd', 0), ('zzz', 0), ('dddbbb', 0), (unicode(''), 0), (unicode('bcd'), 2), (unicode('ABCd'), 0), (unicode('zzz'), 0), (unicode('dddbbb'), 0), ), ] for test in tests: cs = CharSet(test[0]) for ch, rc in test[1:]: assert cs.match(ch) == rc, \ 'CharSet(%s).match(%s) ... expected: %s' % \ (repr(cs.definition), repr(ch), rc) print 'CharSet().strip()' assert CharSet('').strip('Hello') == 'Hello' assert CharSet('o').strip('Hello') == 'Hell' assert CharSet(' o').strip(' Hello ') == 'Hell' assert CharSet(' o').strip(' Hello ', -1, 0, len(' Hello ')) == 'Hello ' assert CharSet(' o').strip(' Hello ', 1, 0, len(' Hello ')) == ' Hell' assert CharSet(' ').strip(' ') == '' if HAVE_UNICODE: assert CharSet('').strip(unicode('Hello')) == unicode('Hello') assert CharSet('o').strip(unicode('Hello')) == unicode('Hell') assert CharSet(' o').strip(unicode(' Hello ')) == unicode('Hell') assert CharSet(' o').strip(unicode(' Hello '), -1, 0, len(unicode(' Hello '))) == unicode('Hello ') assert CharSet(' o').strip(unicode(' Hello '), 1, 0, len(unicode(' Hello '))) == unicode(' Hell') assert CharSet(unicode('')).strip(unicode('Hello')) == unicode('Hello') assert CharSet(unicode('o')).strip(unicode('Hello')) == unicode('Hell') assert CharSet(unicode(' o')).strip(unicode(' Hello ')) == unicode('Hell') assert CharSet(unicode(' o')).strip(unicode(' Hello '), -1, 0, len(unicode(' Hello '))) == unicode('Hello ') assert CharSet(unicode(' o')).strip(unicode(' Hello '), 1, 0, len(unicode(' Hello '))) == unicode(' Hell') print 'CharSet().split()' assert CharSet('l').split('Hello') == ['He', 'o'] assert CharSet('lo').split('Hello') == ['He',] assert CharSet('abc').split('Hello') == ['Hello',] if HAVE_UNICODE: assert CharSet('l').split(unicode('Hello')) == ['He', 'o'] assert CharSet('lo').split(unicode('Hello')) == ['He',] assert CharSet('abc').split(unicode('Hello')) == ['Hello',] assert CharSet(unicode('l')).split(unicode('Hello')) == ['He', 'o'] assert CharSet(unicode('lo')).split(unicode('Hello')) == ['He',] assert CharSet(unicode('abc')).split(unicode('Hello')) == ['Hello',] print 'CharSet().splitx()' assert CharSet('l').splitx('Hello') == ['He', 'll', 'o'] assert CharSet('lo').splitx('Hello') == ['He', 'llo'] assert CharSet('abc').splitx('Hello') == ['Hello',] assert CharSet(' ').splitx('x y ') == ['x', ' ', 'y', ' '] assert CharSet(' ').splitx(' x y ') == ['', ' ', 'x', ' ', 'y', ' '] if HAVE_UNICODE: assert CharSet('l').splitx(unicode('Hello')) == ['He', 'll', 'o'] assert CharSet('lo').splitx(unicode('Hello')) == ['He', 'llo'] assert CharSet('abc').splitx(unicode('Hello')) == ['Hello',] assert CharSet(' ').splitx(unicode('x y ')) == ['x', ' ', 'y', ' '] assert CharSet(' ').splitx(unicode(' x y ')) == ['', ' ', 'x', ' ', 'y', ' '] assert CharSet(unicode('l')).splitx(unicode('Hello')) == ['He', 'll', 'o'] assert CharSet(unicode('lo')).splitx(unicode('Hello')) == ['He', 'llo'] assert CharSet(unicode('abc')).splitx(unicode('Hello')) == ['Hello',] assert CharSet(unicode(' ')).splitx(unicode('x y ')) == ['x', ' ', 'y', ' '] assert CharSet(unicode(' ')).splitx(unicode(' x y ')) == ['', ' ', 'x', ' ', 'y', ' '] print 'CharSet() negative logic matching' assert CharSet('0-9').contains('a') == 0 assert CharSet('^0-9').contains('a') == 1 assert CharSet('0-9').match('abc') == 0 assert CharSet('0-9').match('123abc') == 3 assert CharSet('0-9').match('abc123') == 0 assert CharSet('0-9').search('abc') == None assert CharSet('0-9').search('123abc') == 0 assert CharSet('0-9').search('abc123') == 3 assert CharSet('^0-9').match('abc') == 3 assert CharSet('^0-9').match('123abc') == 0 assert CharSet('^0-9').match('abc123') == 3 assert CharSet('^0-9').search('abc') == 0 assert CharSet('^0-9').search('123abc') == 3 assert CharSet('^0-9').search('abc123') == 0 if HAVE_UNICODE: assert CharSet('0-9').contains(unicode('a')) == 0 assert CharSet('^0-9').contains(unicode('a')) == 1 assert CharSet('0-9').match(unicode('abc')) == 0 assert CharSet('0-9').match(unicode('123abc')) == 3 assert CharSet('0-9').match(unicode('abc123')) == 0 assert CharSet('0-9').search(unicode('abc')) == None assert CharSet('0-9').search(unicode('123abc')) == 0 assert CharSet('0-9').search(unicode('abc123')) == 3 assert CharSet('^0-9').match(unicode('abc')) == 3 assert CharSet('^0-9').match(unicode('123abc')) == 0 assert CharSet('^0-9').match(unicode('abc123')) == 3 assert CharSet('^0-9').search(unicode('abc')) == 0 assert CharSet('^0-9').search(unicode('123abc')) == 3 assert CharSet('^0-9').search(unicode('abc123')) == 0 assert CharSet(unicode('0-9')).contains(unicode('a')) == 0 assert CharSet(unicode('^0-9')).contains(unicode('a')) == 1 assert CharSet(unicode('0-9')).match(unicode('abc')) == 0 assert CharSet(unicode('0-9')).match(unicode('123abc')) == 3 assert CharSet(unicode('0-9')).match(unicode('abc123')) == 0 assert CharSet(unicode('0-9')).search(unicode('abc')) == None assert CharSet(unicode('0-9')).search(unicode('123abc')) == 0 assert CharSet(unicode('0-9')).search(unicode('abc123')) == 3 assert CharSet(unicode('^0-9')).match(unicode('abc')) == 3 assert CharSet(unicode('^0-9')).match(unicode('123abc')) == 0 assert CharSet(unicode('^0-9')).match(unicode('abc123')) == 3 assert CharSet(unicode('^0-9')).search(unicode('abc')) == 0 assert CharSet(unicode('^0-9')).search(unicode('123abc')) == 3 assert CharSet(unicode('^0-9')).search(unicode('abc123')) == 0 print 'CharSet() pickling' cs = CharSet('abc') pcs = pickle.dumps(cs) cs1 = pickle.loads(pcs) assert cs.match('abc') == cs1.match('abc') assert cs.match('') == cs1.match('') assert cs.match('eee') == cs1.match('eee') assert cs.match(' abc') == cs1.match(' abc') assert cs.match('abc...d') == cs1.match('abc...d') assert cs.search('xxxabc') == cs1.search('xxxabc') ### htmltag = ( (None,Is,'<'), # is this a closing tag ? ('closetag',Is,'/',+1), # a coment ? ('comment',Is,'!','check-xmp-tag'), (None,Word,'--',+4), ('text',WordStart,'-->',+1), (None,Skip,3), (None,Jump,To,MatchOk), # a SGML-Tag ? ('other',AllNotIn,'>',+1), (None,Is,'>'), (None,Jump,To,MatchOk), # XMP-Tag ? 'check-xmp-tag', ('tagname',Word,'xmp','get-tagname'), (None,Is,'>'), ('text',WordStart,''), (None,Skip,len('')), (None,Jump,To,MatchOk), # get the tag name 'get-tagname', ('tagname',AllInCharSet,tagname_charset), # look for attributes 'get-attributes', (None,AllInCharSet,white_charset,'incorrect-attributes'), (None,Is,'>',+1,MatchOk), ('tagattr',Table,tagattr), (None,Jump,To,-3), (None,Is,'>',+1,MatchOk), # handle incorrect attributes 'incorrect-attributes', (error,AllNotIn,'> \n\r\t'), (None,Jump,To,'get-attributes') ) print 'TagTable()' htmltable_tt = TagTable(htmltable) htmltag_tt = TagTable(htmltag) if HAVE_UNICODE: print 'UnicodeTagTable()' utt = UnicodeTagTable(htmltag) print 'TagTable() pickling' ptt = pickle.dumps(htmltable_tt) tt1 = pickle.loads(ptt) print 'TextSearch() pickling' pts = pickle.dumps(TextSearch('test')) ts1 = pickle.loads(pts) if 0: print 'HTML Table:' pprint.pprint(htmltable) print 'TagTable .dump() version of the HTML table:' pprint.pprint(htmltable_tt.dump()) ### print 'TextSearch() object (Boyer-Moore)' ts = TextSearch('test') ts = TextSearch('test', None) ts = TextSearch('test', 'x'*256) ts = TextSearch('test', None, BOYERMOORE) ts = TextSearch('test') assert ts.search(' test') == (4, 8), ts.search(' test') assert ts.search(' test ') == (4, 8) assert ts.search(' abc ') == (0, 0) assert ts.find(' test') == 4, ts.find(' test') assert ts.find(' test ') == 4 assert ts.find(' abd ') == -1 assert ts.findall(' test test ') == [(4, 8), (10, 14)] assert ts.findall(' abc def ') == [] if HAVE_UNICODE: try: ts.search(unicode(' test')) except TypeError: pass else: raise AssertionError,'Boyer-Moore does not work with Unicode' try: ts.find(unicode(' test')) except TypeError: pass else: raise AssertionError,'Boyer-Moore does not work with Unicode' try: ts.findall(unicode(' test test ')) except TypeError: pass else: raise AssertionError,'Boyer-Moore does not work with Unicode' try: ts = TextSearch('test', None, FASTSEARCH) except ValueError: pass else: print 'TextSearch() object (FastSearch)' assert ts.search(' test') == (4, 8) assert ts.search(' test ') == (4, 8) assert ts.search(' abc ') == (0, 0) assert ts.find(' test') == 4 assert ts.find(' test ') == 4 assert ts.find(' abd ') == -1 assert ts.findall(' test test ') == [(4, 8), (10, 14)] assert ts.findall(' abc def ') == [] print 'TextSearch() object (Trivial)' ts = TextSearch('test', algorithm=TRIVIAL) assert ts.search(' test') == (4, 8) assert ts.search(' test ') == (4, 8) assert ts.search(' abc ') == (0, 0) assert ts.find(' test') == 4 assert ts.find(' test ') == 4 assert ts.find(' abd ') == -1 assert ts.findall(' test test ') == [(4, 8), (10, 14)] assert ts.findall(' abc def ') == [] if HAVE_UNICODE: print 'TextSearch() object (Trivial; Unicode)' assert ts.search(unicode(' test')) == (4, 8) assert ts.search(unicode(' test ')) == (4, 8) assert ts.search(unicode(' abc ')) == (0, 0) assert ts.find(unicode(' test')) == 4 assert ts.find(unicode(' test ')) == 4 assert ts.find(unicode(' abd ')) == -1 assert ts.findall(unicode(' test test ')) == [(4, 8), (10, 14)] assert ts.findall(unicode(' abc def ')) == [] ts = TextSearch(unicode('test'), algorithm=TRIVIAL) assert ts.search(' test') == (4, 8) assert ts.search(' test ') == (4, 8) assert ts.search(' abc ') == (0, 0) assert ts.find(' test') == 4 assert ts.find(' test ') == 4 assert ts.find(' abd ') == -1 assert ts.findall(' test test ') == [(4, 8), (10, 14)] assert ts.findall(' abc def ') == [] assert ts.search(unicode(' test')) == (4, 8) assert ts.search(unicode(' test ')) == (4, 8) assert ts.search(unicode(' abc ')) == (0, 0) assert ts.find(unicode(' test')) == 4 assert ts.find(unicode(' test ')) == 4 assert ts.find(unicode(' abd ')) == -1 assert ts.findall(unicode(' test test ')) == [(4, 8), (10, 14)] assert ts.findall(unicode(' abc def ')) == [] ts = TextSearch(unicode('test')) assert ts.algorithm == TRIVIAL print 'is_whitespace()' assert is_whitespace(' \t\r') == 1 assert is_whitespace(' 123 ') == 0 if HAVE_UNICODE: assert is_whitespace(unicode(' \t\r')) == 1 assert is_whitespace(unicode(' 123 ')) == 0 print 'collapse()' assert collapse('a\nb\nc') == 'a b c' assert collapse('a\nb\nc', '-') == 'a-b-c' if HAVE_UNICODE: assert collapse(unicode('a\nb\n','latin-1')) == unicode('a b ','latin-1') assert collapse(unicode('a\nb\n','latin-1'), '-') == unicode('a-b-','latin-1') print 'splitwords()' assert splitwords('a b c') == ['a', 'b', 'c'] if HAVE_UNICODE: assert splitwords(unicode('a b ','latin-1')) == [ua, ub, unicode('','latin-1')] print 'countlines()' assert countlines('a\nb\nc') == 3 assert countlines('a\nb\nc\n') == 3 if HAVE_UNICODE: assert countlines(unicode('a\nb\n','latin-1')) == 3 print 'splitlines()' assert splitlines('a\nb\r\nc') == ['a', 'b', 'c'] assert splitlines('a\nb\r\nc\r') == ['a', 'b', 'c'] if HAVE_UNICODE: assert splitlines(unicode('a\nb\r\n\r','latin-1')) == [ua, ub, unicode('','latin-1')] print 'replace()' assert replace('a\nb\nc', '\n', ' ') == 'a b c' assert replace('a\nb\nc', '\n', '-') == 'a-b-c' if HAVE_UNICODE: assert replace(unicode('a\nb\n','latin-1'), '\n', ' ') == unicode('a b ','latin-1') assert replace(unicode('a\nb\n','latin-1'), '\n', '-') == unicode('a-b-','latin-1') print 'multireplace()' assert multireplace('a\nb\nc', [(' ', 1, 2)]) == 'a b\nc' assert multireplace('a\nb\nc', [('-', 1, 2), ('-', 3, 4)]) == 'a-b-c' if HAVE_UNICODE: assert multireplace(unicode('a\nb\n','latin-1'), [(' ', 1, 2)]) == unicode('a b\n','latin-1') assert multireplace(unicode('a\nb\n','latin-1'), [('-', 1, 2), ('-', 3, 4)]) == unicode('a-b-','latin-1') print 'quoted_split()' assert quoted_split(' a, b ,\t c,d ,e ,"ab,cd,de" ,\'a,b\'', ',') == \ ['a', 'b', 'c', 'd', 'e', 'ab,cd,de', 'a,b'] # twice to test table cache assert quoted_split(' a, b ,\t c,d ,e ,"ab,cd,de" ,\'a,b\'', ',') == \ ['a', 'b', 'c', 'd', 'e', 'ab,cd,de', 'a,b'] assert quoted_split(' a b \t c d e "ab cd de" \'a b\'') == \ ['a', 'b', 'c', 'd', 'e', 'ab cd de', 'a b'] assert quoted_split(',,a', ',') == ['', '', 'a'] assert quoted_split(',,a,', ',') == ['', '', 'a', ''] if HAVE_UNICODE: assert quoted_split(unicode(' a, b ,\t c,d ,e ,"ab,cd,de" ,\'a,b\''), ',') == \ [ua, ub, uc, ud, ue, unicode('ab,cd,de'), unicode('a,b')] assert quoted_split(unicode(',,a'), ',') == [uempty, uempty, ua] assert quoted_split(unicode(',,a,'), ',') == [uempty, uempty, ua, uempty] # Clear the TagTable cache tagtable_cache.clear() break print print 'Works.' egenix-mx-base-3.2.7/mx/TextTools/mxTextTools/testHTML.py0000664000175000017500000000056507434211367023150 0ustar lemburglemburgfrom mx.TextTools.Examples.HTML import * def test(): text = """""" utext = upper(text) print "UPPER:", utext result, taglist, nextindex = tag(utext,htmltable) print_tags(text,taglist) print utext = lower(text) print "LOWER", utext result, taglist, nextindex = tag(utext,htmltable) print_tags(text,taglist) test() egenix-mx-base-3.2.7/mx/TextTools/mxTextTools/testPickleSegFault.py0000664000175000017500000000054510777713423025250 0ustar lemburglemburgfrom mx.TextTools import * import pickle # This works fine: tags = ( (None, Is, 'a'), ) t = TagTable(tags) print type(t) s = pickle.dumps(t) print pickle.loads(s) # But this crashes ... tags = ( (None, Is, u'\u03a3'), ) t = UnicodeTagTable(tags) print type(t) s = pickle.dumps(t) print pickle.loads(s) egenix-mx-base-3.2.7/mx/TextTools/mxTextTools/testSegFault.py0000664000175000017500000000066510365717303024115 0ustar lemburglemburg# # Bug (segfault) reported by # Date: Wed, 25 Jan 2006 14:29:34 +0100 # From: Reinhard Engel # from mx.TextTools import * tagtable = ( (None, Word, '', +1, 0), (None, Is, '>', MatchFail, MatchOk), ) # This works str1 = '

' print tag(str1, tagtable) # This segfaults str2 = '

3: jne = e[3] if len(e)>4: je = e[4] flags,cmd = divmod(c,256) c = id2cmd[cmd] if type(m) == TupleType and c in ('Table','SubTable'): m = '' elif m == None: m = 'Here/To' else: m = repr(m) if len(m) > 17: m = m[:17]+'...' if type(jne) not in StringTypes: jne = '%+i' % jne if type(je) not in StringTypes: je = '%+i' % je return '%-15.15s : %-30s : jne=%s : je=%s' % \ (repr(t),'%-.15s : %s'%(c,m),jne,je) def format_table(table,i=-1): """ Returns a pp-formatted version of the tag table as string """ l = [] for j in range(len(table)): if i == j: l.append('--> '+format_entry(table,j)) else: l.append(' '+format_entry(table,j)) return '\n'.join(l)+'\n' def print_tagtable(table): """ Print the tag table """ print format_table(table) def print_tags(text,tags,indent=0): """ Print the taglist tags for text using the given indent level """ for tag,l,r,subtags in tags: tagname = repr(tag) if len(tagname) > 20: tagname = tagname[:20] + '...' target = repr(text[l:r]) if len(target) > 60: target = target[:60] + '...' if subtags == None: print ' '+indent*' |',tagname,': ',target,(l,r) else: print ' '+indent*' |',tagname,': ',target,(l,r) print_tags(text,subtags,indent+1) def print_joinlist(joins,indent=0, StringType=types.StringType): """ Print the joinlist joins using the given indent level """ for j in joins: if type(j) == StringType: text = repr(j) if len(text) > 40: text = text[:40] + '...' print ' '+indent*' |',text,' (len = %i)' % len(j) else: text = j[0] l,r = j[1:3] text = repr(text[l:r]) if len(text) > 40: text = text[:40] + '...' print ' '+indent*' |',text,' (len = %i)' % (r-l),(l,r) def normlist(jlist, StringType=types.StringType): """ Return a normalized joinlist. All tuples in the joinlist are turned into real strings. The resulting list is a equivalent copy of the joinlist only consisting of strings. """ l = [''] * len(jlist) for i in range(len(jlist)): entry = jlist[i] if type(entry) == StringType: l[i] = entry else: l[i] = entry[0][entry[1]:entry[2]] return l # # aid for matching from a list of words # def _lookup_dict(l,index=0): d = {} for w in l: c = w[index] if d.has_key(c): d[c].append(w) else: d[c] = [w] return d def word_in_list(l): """ Creates a lookup table that matches the words in l """ t = [] d = _lookup_dict(l) keys = d.keys() if len(keys) < 18: # somewhat arbitrary bound # fast hint for small sets t.append((None,IsIn,''.join(d.keys()))) t.append((None,Skip,-1)) # test groups for c, group in d.items(): t.append(None) # hint will be filled in later i = len(t)-1 for w in group: t.append((None,Word,w[1:],+1,MatchOk)) t.append((None,Fail,Here)) # add hint t[i] = (None,Is,c,len(t)-i) t.append((None,Fail,Here)) return tuple(t) # # Extra stuff useful in combination with the C functions # def replace(text,match,replacement,start=0,stop=None, SearchObject=TextSearch,join=join,joinlist=joinlist,tag=tag, type=type, StringType=types.StringType): """ A fast replacement for str.replace(). match can be given as string or search object. This function is a good example for the AppendTagobj-flag usage (the taglist can be used directly as joinlist). """ if type(match) is not TextSearchType: so = SearchObject(match) else: so = match match = so.match if stop is None: if start == 0 and len(match) < 2: return text.replace(match,replacement) stop = len(text) t = ((text,sWordStart,so,+2), # Found something, replace and continue searching (replacement,Skip+AppendTagobj,len(match),-1,-1), # Rest of text (text,Move,ToEOF) ) found,taglist,last = tag(text,t,start,stop) if not found: return text return join(taglist) # Alternative (usually slower) versions using different techniques: def _replace2(text,match,replacement,start=0,stop=None, join=join,joinlist=joinlist,tag=tag, TextSearchType=TextSearchType,TextSearch=TextSearch): """ Analogon to str.replace(); returns a string with all occurences of match in text[start:stop] replaced by replacement. This version uses a one entry tag-table and a Boyer-Moore-Search-object. match can be a string or a TextSearch search object. It's faster than str.replace() in those cases, where the match-string gets long and/or many replacements are found; faster meaning from a few percent up to many times as fast start and stop define the slice of text to work in. stop defaults to len(text). """ if stop is None: stop = len(text) if type(match) is not TextSearchType: match=TextSearch(match) t = ((replacement,sFindWord,match,+1,+0),) found,taglist,last = tag(text,t,start,stop) if not found: return text return join(joinlist(text,taglist)) def _replace3(text,match,replacement, TextSearch=TextSearch, TextSearchType=TextSearchType): if type(match) is not TextSearchType: match=TextSearch(match) slices = match.findall(text) if not slices: return text l = [] x = 0 for left,right in slices: l.append(text[x:left] + replacement) x = right l.append(text[x:]) return ''.join(l) def _replace4(text,match,replacement, join=join,joinlist=joinlist,tag=tag,TextSearch=TextSearch, TextSearchType=TextSearchType): if type(match) is not TextSearchType: match=TextSearch(match) slices = match.findall(text) if not slices: return text repl = [None]*len(slices) for i in range(len(slices)): repl[i] = (replacement,)+slices[i] return join(joinlist(text,repl)) def multireplace(text,replacements,start=0,stop=None, join=join,joinlist=joinlist): """ Apply multiple replacement to a text at once. replacements must be list of tuples (replacement, left, right). It is used to replace the slice text[left:right] with the string replacement. Note that the replacements do not affect one another. Indices always refer to the original text string. Replacements must not overlap. Otherwise a ValueError is raised. """ if stop is not None: return join(joinlist(text,replacements,start,stop)) else: return join(joinlist(text,replacements,start)) def find(text,match,start=0,stop=None, SearchObject=TextSearch): """ A faster replacement for str.find(). Uses a search object for the task. Returns the position of the first occurance of match in text[start:stop]. stop defaults to len(text). Returns -1 in case no occurance was found. """ if stop is not None: return SearchObject(match).find(text,start,stop) else: return SearchObject(match).find(text,start) def findall(text,match,start=0,stop=None, SearchObject=TextSearch): """ Find all occurances of match in text. Uses a search object for the task. Returns a list of slice tuples (l,r) marking the all occurances in text[start:stop]. stop defaults to len(text). Returns an empty list in case no occurance was found. """ if stop is not None: return SearchObject(match).findall(text,start,stop) else: return SearchObject(match).findall(text,start) def split(text,sep,start=0,stop=None,translate=None, SearchObject=TextSearch): """ A faster replacement for str.split(). Uses a search object for the task. Returns the result of cutting the text[start:stop] string into snippets at every sep occurance in form of a list of substrings. translate is passed to the search object as translation string if given. XXX Undocumented. """ if translate: so = SearchObject(sep,translate) else: so = SearchObject(sep) if stop: cuts = so.findall(text,start,stop) else: cuts = so.findall(text,start) l = 0 list = [] append = list.append for left,right in cuts: append(text[l:left]) l = right append(text[l:]) return list # helper for tagdict def _tagdict(text,dict,prefix,taglist): for o,l,r,s in taglist: pfx = prefix + str(o) dict[pfx] = text[l:r] if s: _tagdict(text,dict,pfx+'.',s) def tagdict(text,*args): """ Tag a text just like the function tag() and then convert its output into a dictionary where the tagobjects reference their respective strings This function emulates the interface of tag(). In contrast to tag() this funtion *does* make copies of the found stings, though. Returns a tuple (rc,tagdict,next) with the same meaning of rc and next as tag(); tagdict is the new dictionary or None in case rc is 0. """ rc,taglist,next = apply(tag,(text,)+args) if not rc: return (rc,None,next) d = {} tagdict = _tagdict for o,l,r,s in taglist: pfx = str(o) d[pfx] = text[l:r] if s: tagdict(text,d,pfx+'.',s) return (rc,d,next) def invset(chars): """ Return a set with all characters *except* the ones in chars. """ return set(chars,0) def is_whitespace(text,start=0,stop=None, charset=nonwhitespace_charset): """ Return 1 iff text[start:stop] only contains whitespace characters (as defined in Constants/Sets.py), 0 otherwise. """ if stop is None: stop = len(text) return (charset.search(text, 1, start, stop) is None) def collapse(text,separator=' ', join=join,charset=CharSet(newline+whitespace)): """ Eliminates newline characters and compresses whitespace characters into one space. The result is a one line text string. Tim Peters will like this function called with '-' separator ;-) """ return join(charset.split(text), separator) ### _linesplit_table = ( (None,Is,'\r',+1), (None,Is,'\n',+1), ('line',AllInCharSet+AppendMatch,CharSet('^\r\n'),+1,-2), (None,EOF,Here,+1,MatchOk), ('empty line',Skip+AppendMatch,0,0,-4), ) def splitlines(text, tag=tag,linesplit_table=_linesplit_table): """ Split text into a list of single lines. The following combinations are considered to be line-ends: '\r', '\r\n', '\n'; they may be used in any combination. The line-end indicators are removed from the strings prior to adding them to the list. This function allows dealing with text files from Macs, PCs and Unix origins in a portable way. """ return tag(text, linesplit_table)[1] # Alias for backward compatibility linesplit = splitlines ### _linecount_table = ( (None,Is,'\r',+1), (None,Is,'\n',+1), ('line',AllInCharSet,CharSet('^\r\n'),+1,-2), (None,EOF,Here,+1,MatchOk), ('empty line',Skip,0,0,-4), ) def countlines(text, linecount_table=_linecount_table): """ Returns the number of lines in text. Line ends are treated just like for splitlines() in a portable way. """ return len(tag(text, linecount_table)[1]) ### _wordsplit_table = ( (None,AllInCharSet,whitespace_charset,+1), ('word',AllInCharSet+AppendMatch,nonwhitespace_charset,+1,-1), (None,EOF,Here,+1,MatchOk), ) def splitwords(text, charset=whitespace_charset): """ Split text into a list of single words. Words are separated by whitespace. The whitespace is stripped before adding the words to the list. """ return charset.split(text) ### _quoted_split_tagtables = {} def quoted_split_tagtable(separators, whitespace): table = _quoted_split_tagtables.get((separators, whitespace)) if not table: target_charset = CharSet('^' + separators + whitespace) whitespace_charset = CharSet(whitespace) table = ( 'intro', (None, AllInCharSet, whitespace_charset, +1), (None, EOF, Here, +1, MatchOk), 'detect_target_type', (None, Is, '"', +1, 'double_quoted_target'), (None, Is, '\'', +1, 'single_quoted_target'), (None, IsIn, separators, 'unquoted_target', 'empty_target'), 'single_quoted_target', ('match', AllNotIn + AppendMatch, '\'', +1, +2), ('match', Skip + AppendMatch, 0), (None, Is, '\'', Fail, 'read_separator'), 'double_quoted_target', ('match', AllNotIn + AppendMatch, '"', +1, +2), ('match', Skip + AppendMatch, 0), (None, Is, '"', Fail, 'read_separator'), 'empty_target', ('match', Skip + AppendMatch, 0, +1, 'check_eof'), (None, EOF, Here, +1, MatchOk), 'unquoted_target', ('match', AllInCharSet + AppendMatch, target_charset, 'empty_target', 'read_separator'), 'read_separator', (None, AllInCharSet, whitespace_charset, +1), (None, EOF, Here, +1, MatchOk), (None, IsIn, separators, +1), 'check_eof', (None, AllInCharSet, whitespace_charset, +1), ('match', EOF + AppendMatch, Here, 'detect_target_type'), ) _quoted_split_tagtables[(separators, whitespace)] = table return table def quoted_split(text, separator=' ', whitespace=' \t\r\n'): """ Split text into a list of strings using separator as string separator. Quoted parts of the text are not scanned for separators. Single and double quotes are allowed. Escaped quotes are not permitted. whitespace defines which characters to strip from the strings in the list. XXX Undocumented. """ table = quoted_split_tagtable(separator, whitespace) return tag(text, table)[1] # # Testing and benchmarking # # Taken from my hack.py module: import time class _timer: """ timer class with a quite obvious interface - .start() starts a fairly accurate CPU-time timer plus an absolute timer - .stop() stops the timer and returns a tuple: the CPU-time in seconds and the absolute time elapsed since .start() was called """ utime = 0 atime = 0 def start(self, clock=time.clock,time=time.time): self.atime = time() self.utime = clock() def stop(self, clock=time.clock,time=time.time): self.utime = clock() - self.utime self.atime = time() - self.atime return self.utime,self.atime def usertime(self, clock=time.clock,time=time.time): self.utime = clock() - self.utime self.atime = time() - self.atime return self.utime def abstime(self, clock=time.clock,time=time.time): self.utime = clock() - self.utime self.atime = time() - self.atime return self.utime def __str__(self): return '%0.2fu %0.2fa sec.' % (self.utime,self.atime) def _bench(file='mxTextTools/mxTextTools.c'): def mismatch(orig,new): print for i in range(len(orig)): if orig[i] != new[i]: break else: print 'Length mismatch: orig=%i new=%i' % (len(orig),len(new)) if len(orig) > len(new): print 'Missing chars:'+repr(orig[len(new):]) else: print 'Excess chars:'+repr(new[len(orig):]) print return print 'Mismatch at offset %i:' % i print (orig[i-100:i] + '<- %s != %s ->' % (repr(orig[i]),repr(new[i])) + orig[i+1:i+100]) print text = open(file).read() t = _timer() print 'Working on a %i byte string' % len(text) if 0: print print 'Replacing strings' print '-'*72 print for match,replacement in (('m','M'),('mx','MX'),('mxText','MXTEXT'), ('hmm','HMM'),('hmmm','HMM'),('hmhmm','HMM')): print 'Replace "%s" with "%s"' % (match,replacement) t.start() for i in range(100): rtext = text.replace(match,replacement) print 'with str.replace():',t.stop(),'sec.' t.start() for i in range(100): ttext = replace(text,match,replacement) print 'with tag.replace:',t.stop(),'sec.' if ttext != rtext: print 'results are NOT ok !' print '-'*72 mismatch(rtext,ttext) t.start() for i in range(100): ttext = _replace2(text,match,replacement) print 'with tag._replace2:',t.stop(),'sec.' if ttext != rtext: print 'results are NOT ok !' print '-'*72 print rtext t.start() for i in range(100): ttext = _replace3(text,match,replacement) print 'with tag._replace3:',t.stop(),'sec.' if ttext != rtext: print 'results are NOT ok !' print '-'*72 print rtext t.start() for i in range(100): ttext = _replace4(text,match,replacement) print 'with tag._replace4:',t.stop(),'sec.' if ttext != rtext: print 'results are NOT ok !' print '-'*72 print rtext print if 0: print print 'String lower/upper' print '-'*72 print t.start() for i in range(1000): text.lower() t.stop() print ' str.lower():',t t.start() for i in range(1000): text.upper() t.stop() print ' str.upper():',t op = upper t.start() for i in range(1000): op(text) t.stop() print ' TextTools.upper:',t op = lower t.start() for i in range(1000): op(text) t.stop() print ' TextTools.lower:',t print 'Testing...', ltext = text.lower() assert ltext == lower(text) utext = text.upper() assert utext == upper(text) print 'ok.' if 0: print print 'Joining lists' print '-'*72 print l = setsplit(text,whitespace_set) t.start() for i in range(1000): ' '.join(l) t.stop() print ' str.join():',t op = join t.start() for i in range(1000): op(l) t.stop() print ' TextTools.join:',t t.start() for i in range(1000): '_'.join(l) t.stop() print ' str.join() with separator:',t op = join t.start() for i in range(1000): op(l,' ') t.stop() print ' TextTools.join with separator:',t if 0: print print 'Creating join lists' print '-'*72 print repl = [] for i in range(0,len(text),10): repl.append((str(i),i,i+1)) op = joinlist t.start() for i in range(1000): op(text,repl) t.stop() print ' TextTools.joinlist:',t if 0: print print 'Splitting text' print '-'*72 print t.start() for i in range(100): text.split() t.stop() print ' str.split whitespace:',t,'(',len(text.split()),'snippets )' op = setsplit ws = whitespace_set t.start() for i in range(100): op(text,ws) t.stop() print ' TextTools.setsplit whitespace:',t,'(',len(op(text,ws)),'snippets )' assert text.split() == setsplit(text,ws) sep = 'a' t.start() for i in range(100): text.split(sep) t.stop() print ' str.split at "a":',t,'(',len(text.split(sep)),'snippets )' op = split sep = 'a' t.start() for i in range(100): op(text,sep) t.stop() print ' TextTools.split at "a":',t,'(',len(op(text,sep)),'snippets )' op = charsplit sep = 'a' t.start() for i in range(100): op(text,sep) t.stop() print ' TextTools.charsplit at "a":',t,'(',len(op(text,sep)),'snippets )' op = setsplit sep = set('a') t.start() for i in range(100): op(text,sep) t.stop() print ' TextTools.setsplit at "a":',t,'(',len(op(text,sep)),'snippets )' # Note: str.split and setsplit don't work identically ! sep = 'int' t.start() for i in range(100): text.split(sep) t.stop() print ' str.split at "int":',t,'(',len(text.split(sep)),'snippets )' op = split sep = 'int' t.start() for i in range(100): op(text,sep) t.stop() print ' TextTools.split at "int":',t,'(',len(op(text,sep)),'snippets )' op = setsplit sep = set('int') t.start() for i in range(100): op(text,sep) t.stop() print ' TextTools.setsplit at "i", "n", "t":',t,'(',len(op(text,sep)),'snippets )' sep = 'register' t.start() for i in range(100): text.split(sep) t.stop() print ' str.split at "register":',t,'(',len(text.split(sep)),'snippets )' op = split sep = 'register' t.start() for i in range(100): op(text,sep) t.stop() print ' TextTools.split at "register":',t,'(',len(op(text,sep)),'snippets )' if __name__=='__main__': _bench() egenix-mx-base-3.2.7/mx/TextTools/__init__.py0000664000175000017500000000345212133021455020714 0ustar lemburglemburg""" mxTextTools - A tools package for fast text processing. Copyright (c) 2000, Marc-Andre Lemburg; mailto:mal@lemburg.com Copyright (c) 2000-2013, eGenix.com Software GmbH; mailto:info@egenix.com See the documentation for further information on copyrights, or contact the author. All Rights Reserved. """ from TextTools import * from TextTools import __version__ ### Make the types pickleable: # Shortcuts for pickle (reduces the pickle's length) def _CS(definition): return CharSet(definition) def _TT(definition): return TagTable(definition) def _UT(definition): return UnicodeTagTable(definition) def _TS(match,translate,algorithm): return TextSearch(match,translate,algorithm) # Needed for backward compatibility: def _BMS(match,translate): return BMS(match,translate) def _FS(match,translate): return FS(match,translate) # Module init class modinit: ### Register the types import copy_reg def pickle_CharSet(cs): return _CS,(cs.definition,) def pickle_TagTable(tt): return _TT,(tt.compiled(),) def pickle_TextSearch(ts): return _TS,(ts.match, ts.translate, ts.algorithm) copy_reg.pickle(CharSetType, pickle_CharSet, _CS) copy_reg.pickle(TagTableType, pickle_TagTable, _TT) copy_reg.pickle(TextSearchType, pickle_TextSearch, _TS) if 0: def pickle_BMS(so): return _BMS,(so.match,so.translate) def pickle_FS(so): return _FS,(so.match,so.translate) copy_reg.pickle(BMSType, pickle_BMS, _BMS) copy_reg.pickle(FSType, pickle_FS, _FS) del modinit egenix-mx-base-3.2.7/mx/Tools/0000755000175000017500000000000012251446113015733 5ustar lemburglemburgegenix-mx-base-3.2.7/mx/Tools/Doc/0000755000175000017500000000000012251446113016440 5ustar lemburglemburgegenix-mx-base-3.2.7/mx/Tools/Doc/mxTools.pdf0000664000175000017500000173447712133273273020635 0ustar lemburglemburg%PDF-1.4 % 759 0 obj << /Linearized 1 /O 763 /H [ 1520 727 ] /L 506175 /E 279776 /N 25 /T 490876 >> endobj xref 759 24 0000000016 00000 n 0000000849 00000 n 0000001205 00000 n 0000001359 00000 n 0000002247 00000 n 0000002637 00000 n 0000002667 00000 n 0000003451 00000 n 0000003492 00000 n 0000003734 00000 n 0000004958 00000 n 0000004981 00000 n 0000005454 00000 n 0000005698 00000 n 0000005930 00000 n 0000006136 00000 n 0000022414 00000 n 0000033990 00000 n 0000037082 00000 n 0000037289 00000 n 0000037368 00000 n 0000040047 00000 n 0000001520 00000 n 0000002225 00000 n trailer << /Size 783 /Info 753 0 R /Encrypt 761 0 R /Root 760 0 R /Prev 490865 /ID[<14b3fc667bbce342a32c6a15756487ed>] >> startxref 0 %%EOF 760 0 obj << /Type /Catalog /Pages 756 0 R /Metadata 754 0 R /Outlines 128 0 R /OpenAction [ 763 0 R /XYZ null null null ] /PageMode /UseNone /PageLabels 752 0 R /StructTreeRoot 762 0 R /PieceInfo << /MarkedPDF << /LastModified (hL|ꕸ)>> >> /LastModified (hL|ꕸ) /MarkInfo << /Marked true /LetterspaceFlags 0 >> >> endobj 761 0 obj << /Filter /Standard /R 3 /O (WЏ X_7!_ֵb{J.4@K@) /U (r5v\)ˑaC:,[) /P -12 /V 2 /Length 128 >> endobj 762 0 obj << /Type /StructTreeRoot /RoleMap 142 0 R /ClassMap 145 0 R /K [ 585 0 R 586 0 R 587 0 R ] /ParentTree 641 0 R /ParentTreeNextKey 29 >> endobj 781 0 obj << /S 563 /T 688 /O 759 /L 775 /C 791 /Filter /FlateDecode /Length 782 0 R >> stream 8g IymT@|˰r > zLܙ̓"):lG^׽ JL R2ȼYk?i|&I6}!q(,Q'y?6[Ud.V U $Nl?\27Cl|441ܜxP{~N".0,J䏩C8|fcV" X]tPszԣ7n2m`(+PSN,*iSPC;U&v7T>-j C+5)#(9,w:|4b[y4MYtl꣆Áof\O>/O…  Wq΃${W?GvX^0~̿zuS!B nqv t#Lg(yX Sd0Y( EIɸS՛Qnz+Hˠ; j`caIT/@rڏJ8;)E/?>e+wW_E} endstream endobj 782 0 obj 590 endobj 763 0 obj << /Type /Page /Parent 755 0 R /Resources << /ColorSpace << /CS2 766 0 R /CS3 764 0 R >> /XObject << /Im1 780 0 R >> /ExtGState << /GS2 778 0 R /GS3 777 0 R >> /Font << /TT3 765 0 R /TT4 770 0 R /TT5 773 0 R >> /ProcSet [ /PDF /Text /ImageC ] >> /Contents 768 0 R /Thumb 698 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 0 >> endobj 764 0 obj /DeviceGray endobj 765 0 obj << /Type /Font /Subtype /TrueType /FirstChar 32 /LastChar 233 /Widths [ 274 329 278 0 0 757 714 144 329 329 0 833 274 329 274 281 549 549 549 549 549 549 549 549 549 549 326 326 833 833 833 441 0 604 587 669 764 502 491 734 759 282 282 602 461 905 741 821 539 821 574 512 530 743 625 958 541 519 606 329 0 329 0 500 0 474 556 472 556 498 291 503 556 250 250 500 250 854 552 552 556 556 356 434 311 552 479 766 463 486 475 500 0 500 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 833 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 498 ] /Encoding /WinAnsiEncoding /BaseFont /MKAPAL+ZapfHumanist601BT-Demi /FontDescriptor 767 0 R >> endobj 766 0 obj [ /ICCBased 779 0 R ] endobj 767 0 obj << /Type /FontDescriptor /Ascent 962 /CapHeight 687 /Descent -272 /Flags 32 /FontBBox [ -167 -273 1106 963 ] /FontName /MKAPAL+ZapfHumanist601BT-Demi /ItalicAngle 0 /StemV 94.019 /XHeight 0 /FontFile2 774 0 R >> endobj 768 0 obj << /Filter /FlateDecode /Length 769 0 R >> stream ڙr"VmRoxgie0H6x[H]hﯴ8Pv7~ݩf@׵~P(.]1f#C򔤾.,yH%VVQ<7BQ`&maT#R$7O~B0 ^kYn@EeIJ/֣D4ilt=p> endobj 771 0 obj << /Type /FontDescriptor /Ascent 961 /CapHeight 687 /Descent -284 /Flags 32 /FontBBox [ -167 -284 1186 962 ] /FontName /MKAOPH+ZapfHumanist601BT-Ultra /ItalicAngle 0 /StemV 166.043 /XHeight 0 /FontFile2 775 0 R >> endobj 772 0 obj << /Type /FontDescriptor /Ascent 951 /CapHeight 0 /Descent -273 /Flags 96 /FontBBox [ -220 -274 1143 951 ] /FontName /MKAPAJ+ZapfHumanist601BT-UltraItalic /ItalicAngle -15 /StemV 0 /FontFile2 776 0 R >> endobj 773 0 obj << /Type /Font /Subtype /TrueType /FirstChar 32 /LastChar 32 /Widths [ 274 ] /Encoding /WinAnsiEncoding /BaseFont /MKAPAJ+ZapfHumanist601BT-UltraItalic /FontDescriptor 772 0 R >> endobj 774 0 obj << /Filter /FlateDecode /Length 16185 /Length1 23576 >> stream "2dTq#/ݺ=j $FUrGp9O4~uiR/ ݁zcU<尹b r=,5~׮C{h_ڀ).n=eo:3P.G8)ӗYmMZy$2N<61Be,2 got]ysWgwJwM6T(l)}Ҝ"J&2Aw |9#4.g\vunMՃ@*D>UDwb] @S#!ww!kȌrexlǹw)MޅHgr\НMjxX`ʻif."B@KWP^zۙ"0E! ¹WdrȺ~̗NiGpo!8gi5ww{DYW"c ͺ[KwD9,QȃgR,Exkb= eqy蕢qqaEy:)#vyO Eg%:]3T0٤ɸBۺN==#쓅 l1aovW=?}ϡ)V >6 (RM?큒B=+'k_;h3NR6+X{\dh~xU~yrUHiuݓ˹a V)a#~iSo黊Iʉ]L6C'5{5eiO:M~$wDY9ψ6@lQ/@K*2bI7Ȳ`9\ E׸:DKQD ǘ5**&a\QxƴWDm;KBH3 ƣG'o?}caޣЛ?~WPj)S!BBLlK8P]>Mç݆cU؏Xѻp/ѺDV .\[_jWOr*J끚kD~KD̮26׭#r8>Yhޛ#'{qɨwZ#AQ+kj0VcptDL 37-Q?СBkK_7\ :^uyw,/rE[bXBpFu5Q:h zרF{YJ@]!uw_s8;ܽwtΠ&kwމl`gd,/M9@apN\Y*g1䝴M7qU!SR'j8r= GO>O0,@6 o !i͔3ȍ#Z G5hz\頚}uu 1ʃ 厌5}N 4`o9i[3Wk`MeX{/ѻ5'Kҡ󿬩;C| MൌAvf7qlxaj ,gi2K4Kf=4(\HlkϴKr &C[s@-5|偆| >`8}[)&O_!jdu  ~ $)z}SjMxT> 1p|9ُP7+ E5j9Zg%LCF&@fmYk*4P#8*y\#89r_ܭ~ FbOeU/!2ǰi.J~@>rՏ#$tk^%/%p-V͋>Jk&I߼q'.z,hXx zRaT`.w0Cm; ?|2.)#yyockDE_z:TGj CctΧ-B^klV759wg{羚5F"B7kN!VFc)HBlPn0(CoϚ0ĺy/ 3m].р9ߝMʹ}xQ1[hrD=#u,JN:Jrow %F=$y!@v_Hn,xD^5KV }l);gdE'vjhZUUWz fcKF7aWS/^$ZΫNFŋaS,5[9]e½`%#^4*Md #iKъ| eYHqxCVh':XI VHOد>] 0!gfkmeq3 +Μn0v8?a(Rz]P7fTYAž`ܳ5 nYK!p=*&K?eFGuNG\3nŇE./DQf_-,2$Y{rGDgY/2o9f=V')y!d  t'_笧g8ABPBkc&adۓo;,IS*i6ٰuEnp*RRH{#pJ'Z"ZA8|pβ7fs#WiՋɻnHl&-KY;Msi1cm2+KV@Oԃg 㶷c T 8ČKXMFݑ ɤZ5?hPCSxqޘFtS3Q +;" }E:*^>3qذk+oPc4ިѿhVt}N>짇mAI) r*#YAHc:*`gLWfJŔ1ٝ+MQA? Je? rDb”6sIad-Z7 ,H~~} ƒF5Xnt \|W'l C,R ZJr`3mlh{1cXL[ ࿏Y~PCPFiX@nbNZ+-%MzAsCuaFػ9O{wщC 뿥[ NDzlc:\R27;O4fqMN?:gJ?gNfDz؎Xj'7Mc6 IaLWuj -nU\ހNw5a4J IwiqiYP}aqG'1v5,x"v}|nɚN"4e;j{Yϟ0lGu2g=.᬴j@63z=k4(G&ЎwƟs?{AiΠĝzpn}E/xÛQPs&)KGyVͽ6w$vquEX7>ĨlrA~C2w1Bɰ(/JzZD|%|sERz[z̸r%HPq{U)e{E=58Ur+/AY"yP5 =fvK! I6ug-u5șx=3!0jNJMڴǗ'7d2!kݕ)n VP)rVuhQbXFnO]u]="z#43Q(2j4Tת9IWJ\˙3\T6fpTk=Ox̄5msGW$~2f<(mzZ305M 4'zp9{lxii0>R0Uf:U^r^L<gX0+L{jc҂NyDOtpA;JzH)7~cg{vzMnHA︠x~?֓x !io@[Ɖ%6ֽAv})QSYTeOZg^bC!.}gZB8-Ua+)[N"!:lPCzh#E͔n,S6k"cBr`BZNNC$=Yy.8 VvKk=")_yfNW٪/) |(? w_XAiVURn%ϵQ%GDzd?y㰤9<=x^d(/I5ߏ;, OlGw`0V r̢|/ckrcp_aK=؄0X*O&΅r;(c謁Ё퀽p;Ml8*gr `G7% !jc犈ǒBjexҏdeRKe+j`-2ZC&~qc'Ж9Z2`BRN3WkoMa(0\vKY7_t`&Ɇ1D!jX \v$67>nt嘀;`\TvDkآ}ץWj[Zp@O7ġWsVbnU<1 3CkJaɃ}bhj]WzU&Y7aX.lsW?,n Αތ1`}_`c]qԠT(F# d[YRņ oepĵҁ΀.Di6*u>Շ_oʑtN롶)Q7{ IlKBI;cڛC=O *:jSm>*oR[ 9ظB)wf!jtχgD:e˃pw>ZM:PAt3+lYOsDcJ7[u俀7#u}x`adS1 [l IlH n7u?T5W\ w!R޾Y 1r4lSDI5z*'?VU|vmTGrs_Jqm:f7bF8d(k}c9)eQ S^U׽z$}YodţLhWɔu^2U䕔uOI Ry}o5>l;kV 1wIW8qߗ eER-Tn:Bo bJ3/ h@grrI&Pl>vQQVu3fA-J,H =ݕZ>v}^!"(, .iKM>m Jc+RcWciGʈZ?|Iev6T <_i%}W?m!_JkƲY?3 _uOnJt (G9ʀcGm.R]k|ʄ t ͎3_` IC(4GY5nTԗoA(%lBlfHTgYn@  1bpZ"wC%F4qŠfˬ5YJ'WTW7iQKgJ))g;p}"X=#rÍ؊;T`@љwe xp.AQ8^V94sMĥK8*LEGȋbo{ ;hl`d}H~J_tc_| &yRF(yIۤP#e?j &1w6p=405l[qZxcHU(1M5Zv&k_%ynچ->Ж[ цr"/iTV#:A<nɈ@ob4~V޴VGPH)T1c&YGlNƋ,33޷.ivG#:rkDRta@ SGwnvnn6/-_?w g쇓, qdjm_//td ͡ [Dc)b 2Sa15FK1hwԳ!pըoQiUGbrNs5aF90{(rӝ (p/-H \dVX1&FH\q܂gPU)fpM1XE٤4 ď \Z8R9{qhHi*tA=qӻd3SFq Pb'\7.PlC誚m׬x.Q]w' E5yA_⮧HwL =QTGI-7!@ؚC܂I֮Zv/6BQ^&L!5]ʉ|J«30]a'#:?E8^ߞ %W=S dr AD`xDn>JPA:vmdef~iP F!B?e MX,*Dzr"y,WCAvD4S-/!R kOOch# 9 Un;Ntf]!Jc=VQe~&ݑ9.;/NY?a١MH/iXIaB@ 'Egk'3: sY`rOnrǖfG"H.,AJpa7IP=TK3ԙvk%}D 1k2~5@u.u;w'a7tɀ=< ʲڔ!-P`x 23֨ Xqkc/}" ͭVxE൸ȊgA7|k碾6D-)ͺD t4IUh+Tħ~%L ^9NrN2aK6G?DΕ`O')2L,%#Q 7B\!W^F=6- @Z Z܂bRX1o.Џ׈KxBB>H=ֵJTq'| sEA¢iNʈݹ|Zp(*JOc=c5W@,WWv"F$V8Ct9ygk7]dCYk`w'2X}  ,XE(w3yn)l҅_ ӢFOGzE1|Hd.~TѼi#S2bZ.ە"uĀNat0@sU#rJL&'.`v8ٴ&bo{f/&RTNF(NӰW =zseqg7W 072!5`&“pҨUvTAy H= r8x.a Hz戙 @ycPi!!zhu}(/YPIf=Y= &xZ Vw-JlpES}y: !0ʈ,j#g9MZ Y^36h ,>%1+Ȋirc syy(B%cDA1\82v-wYg 5w¡/$Gڶ-=|9#G)xe UKwK)?(Ee^zډl1ҴJu{ otc#@5*; $15 ܓŖ?ʦ;/~ɔ晱; 6yL t"e8_%'Lur@#:Jbϋi 5+ʵ у< iBF#`VjOm`s@UQ\}k_'{`%Jb;dIw:k ⭠W o_,={9 7ɘb2& s'HzMH;4q.lM5$e(ewr%h-#sλ-TP4br8\+(>sK4jxKҋၕv7mSG dpGAbpv֠qspqVퟃ [/O59I4gJ߈Yfw".D(<9|9pYDUhr^H qG@Dn6}釥#Y<4iy;u u[6ۭ$:QvsWqM3pQG#'ށ ?am c>K6_3~#pA 0 '/KZ*\RHF!=!)`ɇP|CbO1B]u;DP%@W a2̫ k:éD!8SԱ3pQ"?1 ?Jia/^܉}se6K:@+MۘaծiXZz c^z,6tg32XR&F"g%msiצK?eP"K{olP=FbR)Ni00|i,/m2qC̿qvva("*MYGގiXdU_JETow~KԢ1v5DZkau\R@C=rv@}pP8%A4Zʢ95x#2!\&X͵_zdl u^U R&5 U 24N6E}9?" BfbH]{YRoLjڣ<޵Η rrbW!%DQig7C86C HaB^%(N tqs's\jGE$3>ru#Xlj1Mybuw*SVSPsiGXQM/TrP6_-|YIy?q*֖}ެ]0cQ/EPt:8Sh~0[$ԇx?x?nO(D7BKv?i,]VԌ]4bZz(}ƃ5 :~ H} !Q,mnPˠg}։1՘'rfk3RLV}/t/TW||%FP>lSߜEq֝&8ml/ _6s8{/ \F! K7d H1@|%Q?$u=]3Bc8S"%_sanS^$1i y4M7&srk"/wV?Ggr"(UEGeOڢIJhdjVrP/*~m*4_.ApGeJVa/V"{nAp{E4M q$QиD˱͡\t蒗BO+$T[`{$7kpϷ0 IO tWa.t&DߜFk+ݬ6PkFGr t_deaؙ۷\Sw|2{҃ ˭bo0$BbE%R.+/ }84gA H)ӵ87['3Qܫշ7vA§m4$V:`H 0N(/<oVP9UݥU`[9쒯[Vq-cTD7$þ:gcTL?AO}G:Y'8@Ə_v-e 32QQLUBdIsdEkp}e\2RKRsj|hgu jۋ.bӆŏ} [p$wq}5"^x S\-dp5Lʍ,i1eOϵ28"|n '*SHuxו^ _Oowqf~G]>lXg1J4 ~d/ FDw&FhP%dR)Of+'puGsOXQu.#b!h\> 8x1fvpA?mghGd)1" 2  05O'揻^ɿD&< ɦ%uduQYr%b%Hnyc+ 2gRbϕBnRuuq=2!3YchȌ3-Yn 'RxBuV9ӵ٭v&zGЦݧPS,0ͽO $;GZ B8>d a"'9C?0 7RX/UƿX2Cѯ|TabA?u匍4n*mۼ0 hLp_I睛ݺS( J7)[}[=LcP#q8柄t9]Sİ>YhJcC_^1ջsLXFzƠ^W5zXȢ9 sɋ\XV~k՞_(2iw.m=ky7l˄d>A6swV_ɘJHX-ͥaV1(H6[e3d 'D B0oK,Źӽ'4<LI_Мր$'˩C8{՗f͌%?п=1-Иylm"xvuĪM[ ž hR':sP4XMEK@B\s̖8<ͤRV㠘ҍ^48G"L R%W7XN0ˠ7PYd |Pykhy[x5[S?b^ endstream endobj 775 0 obj << /Filter /FlateDecode /Length 11483 /Length1 17744 >> stream <sY ,/7/2 O2xx/npX[!1M5jb(F`Ld_ 4*HD^ fΐEeBIi,"h&vYh:if亷~\=q8haANPd d7 ju:݅϶aOQumLlX'Z4G%2(S?Ǎ2?JGq>۹6 8>v{w7ߑPӵ{}guTA7[PBN(H|[*VCYc [="*˜^"(`od~ :| ǹ^ŧ泂Z}nh/jjܾ$aBHH?icQ̶%cxkITǁeAy6TL5lsQy5/H.[Y$UqU)Bn(RI,O9:bڪ +&z.(6߅UkН5ߨ'@⚧pr%hMHD=)kn?wJeJ Մ2O abvZ ةDX?x$neXt0mؐTciΡ7j^<Hɏ0)%w*8UCb JF1kZuT^+-xz. uc0ktGچ-\LsJ;.'$]q&9Uu w;=DAT)HBK턤ÂtɄvQ -7G( EN5:֡О Z@ D PxR1Ԍ hh,KJa >(ffs#K|'`nj KF lGA(No",ά1Z =_5dFϫ_6%;뗼A KF*V~DreKi ]̷,z׫[_*5ciUOj))\6_dJ_Rm݊OFe.у_ .W؝y+`j\;(&s[k|85:鎃 1ZncK90iduT?7yjJP*P0##la T"Q//^I\r T o/=T)89gY~ wJxWm2 POIrr9eY<+P&>M=zN,FT$:A"*;-hjm eǬhP5yQf\ CA[(=E;|C96b NѪ4q@@qPc̉6 O:U۬=8 (w`>OTQ dwhdE_ ПhlF50K(^O3݌"s9(8ݨI=A.3 xԒ{#̇'(RƔ$ѾG͆RS*+▃YWVF>zWĔpr%^R Z޷ן`U*_J;gFn o˂=a%u-A;fb]۴|uB:r\XQ_+=!3LW@Gigs;"scJtRSG2BRgCO/m)4۷h-i+3q$9WldggQ!Mat_/0ba )̸|F)0 {:Wn49A{˴l.1CϐQݿSҧ1N-ƽG,P}V 52 ~A12t ʹEuq+0w:mGۤ='x(YF:@ZQ띉T:R,~~`yУ@桖*2hqKdb^;l]ݥ'nV>DGr6j1\)ʌnC# o3BP@VMI[5MJč+lHCBA=iT0/w->t} 8?69m.P,⃼r?l,a8u$%)$8MPzUv7:wYVjug5d#WI}fpO4\GT6#"'[/W@? !pvLj_D!@`v@Ep?T<͓՟X"*7܄PiL?Su;p#v` uۂȣr"3DV)\l>c4/y8Dl`W5Ǻ;p >*11Hn[75fs ə\S3,QQ# At s_q|7Kdl">l;0 n\ǣfuC~ -kߐ!\B4=kCٱ%&y$M$o.&13n4ȽSmmĚXCcTZAc/v7 $.bjm2*An>.N/(^̌4+47ϞuY5rMbSZ$l OlT𾨂waA \ZjSr]P{Da>Y#5N6' -7W25@)bg݆M҆<"o*o:CQװZo9,~(k¹tv_*/?lpv 8bw_`:r$_2ZL`)^*A4o#p'䢥ӈAʤ}˚1e1b0HI_%~jg~iS/Rh`N2w .zҟlpϯAG M1\$e]RbJ]V-U}}cg d~$4|ޱ[Ì|@AOQ ./0y!(V\j]Bd"\\MVQwc[;7ͭ){LwtxDn^fp 8v/17J9L8ZCŊ.32If˓Sָ*dg:O̼mҥPJi? 4ڎiw!(ᛢ2I@WqQGU1yc^kY))Oߣx|mm[U0*` 2&̉|p.ͦM%zMHXƽIW)+685ݡ^޻N[f N9Ʃ{_޸09Yu[yvZ[*8Db?ui6@P)it|<_6H եO:K9 M ?{뚩4 ;Z5]N$#mP RsdV㿫ހ|am_jPĺȃE9_&%ug:kcP~wi}gAθV{$SWL!qWK=>p#8;ҮN[ {d۸E+K,},)BǾ-ICo_GMn3eVEHG}jf u0%)7ORl~ʍWbrυx'|u M k mwnAdԤ8;yEnnZLs®7bYy8"SNk)H9?7x%O-epr+nFТՔm-{9z Dd8$nO@6$΋ĪTⱙW)Jc?DWdaȣi-}nJqu+#_ڛۏ}DZcD@o'.:Nw#VĀJ|DD oYf&tb 1[Q0zՏtj限+?k辒42c:v Q2)ͦ%et{ս6dk*;Yb ʵEd#ףI'"B>y @3vW~Lei(=Eb}?7t6} \GkhQ(ڴB`dvPvߗI|afkcUlur"svF@b3)âxGOo^Z(VATA,CNv"LN\愶-# r !< ]WLwH|]vLFUL:S޺Ͱ:[6ZgrNFT"TTˀ7di*r;8p׾ t4 % 4o3z^AQ !sik){rY{͟5/.Di;:7KčJPQ+t&3B{|A+Jw<2z\*'Zk8y\.nX +ꃀscu$ < φ"=%u;7u:#DARN&VA$LS0]_|Tfkۍ'u$Z j0ottpicQ(=Τ꓍`aVO8!6;kPs:utT\:,Y(ra)9 ^G5jo[a#7ͿoZ8!d'Va{H/s2(zq?e2rgYHb~{n溠Zvtt:+j7Aȑ rWVM[9`sl"Tj9FLL 0@9_~l4u9tT5Tؙ0ٟ=O簅^U۴zW}񼩢Hlq|>DykU.R;X3Oը@B Zmh63v)HƢXXM)Uy+={L3+ ,{]*>%8˴1xjJ&dt`'Y8~l]0>s}r~Hnuq>03yAU70 K">i>[w(x+]HEq(=:7>tl٭YUvgU~@=8œ絶Y+͕yWԾwà,$p!6QcWipVwAI>vAm74fo9i/x7߽*Gjl/F#zF!e cH?6sM5N}qO!+RlnإS\ 8mD($|5Htÿ$:ľp_}hy$r2('3󿴴Ywz?|٨>!@[cw!2|=d<`J0wZYmbb_xRLj[-蝀E#`6}W>"#X_jB$ZOˮDw5wMN/S|.iT `ۆحDa4{ǚ]gK Y"5:3B%~0yѽvӼuǾAp'A'(nޅSbQiD>m!;DVrRΉML:HC5gu-qy馚ZSL>*i#nOc ¼ys8:]#qi-2q&;QgJoGq\wۮ1_| :?y[[佝I7lF !Vҁ1XkLT TMBnT ~A'XA|wԾmSi"պ7,'ܜBmH? P8YfȂgkʗQ ~U$g.'HaXlA3n?/Ӄ.nr"I\FFC'N];Yr(+~a8r/;l!mEw mjg^CKuD۟wZB)R7{ONrBT:{W(NBahTR h61$O-IaGK<Լ%}D#""Z])Mi&tO*Ry\;TFs428@-m)p@{$_Գϒޅ¸t`甜AƌxV>:\t^}o$P2{>B ?{K>l>uQ+_DV)KBfgl6r6%o(*䲆|b<ڄ'%쥗?t*]ZOu({t|gI Gthj2Յo!Y/Zz_CP~]觐x;S6xyr BRU]u*Md<3o5Ų99zcLwNh7H߫rs9OU`{$j⎷/՛4&F-h14WʞI"Iƙ`Sk̓yL?y4OP-2)Oe,^$1R:0uܳ'V^2v`J͋e'9U.6`-I@q}5XLh{CoՆl}mLk.|>O}C6 3a.GTo$ B#.6X &j"zڳXѽ%l}tGK7Q[ph<$cq8cƼ=m߆BoTZ(P$>x3fFJ$J@ӖތSËL{8mZ'E: XQG;XZdɌ4:){ƶwS[5oasB)jNQ5U\cvD |zu.^/*f)1Q.F20b؝@4.s_Om  Hd Y8^tLr/Thի}h:r kj&Qk Ө H'*:m  #VZTm>&܇'R2 vywƀs\2p.4\k~ N@"/m㟊;]Z0}hTEKfeay&TizYs[BZ^K=4HZCF5KR*y۸F{RpZ(DDF1pḋ7e^(pFG.AnS1f< RHWS$j@MXW 'ݛd $h2NM>h=z.Ȗ0H+rg{&.Ex%CJ{=Ɍ939 j<"¥JɥJ:uLkt] ,h $*".n!wЁ:}1;lw]|TSk5T%2B'5k2 faWY]]_/iL$ޙXГ䢻RDpu~x]H*26=,51AqCF*1_oe-;%9 ҆ PL# AB00=qcE(` : #rcJ6AtIV =j yK̽܅`3v+%rfåjg+';OMz/@ ]{q2es=\}FS[4"U˴;'\D#A vö- |g[>㍾k|ۈuDMQ]V:{շ%oz%i ߲3yQKsC쨿Iq3IqʅrvmkJF)[W3UQ0J7U,RX4d- P& #.;P_;dR}Y];^Κys̷/SJ rBs[|(-S3do_S3Dh!ݽ^Jp/XN\fvR%0腺6&@c>A}Lg.#VoB`A;:jtCP2mNfΏ_I7~Kd [(xmYo7aE)7ܥ&iϙ] ǟf1QFf >|ҢoDЈ!؇|E*- y-kg:Bk8 $4/d%rX O$+5&[n:E-GZŬ鴃J >#O yhTEtsCo֎&02 c*DZ:<ɋbPZ:SfU)m 5Wp%T8`deKcUў5k(DzpMb{>PZ0}#xy#/׉N&NUD03 (FwՐwQ5C\sDjJ@Hq;dlr c79FK'@S-s,n.<rG OMQZ%Zـ%HD[>Ls s2,gR0x38x])ccdewcǞƨ{}*ES]{6y?AIo=iQ$#@+;9$ _!lJn3F#8Z+~|Oؠln.EV̵ Kwe+>^PСĘቱԨ2E~SyY y񁋤?>*8?\X\[u&EПF,~+cm!fr~[M:1j:N endstream endobj 776 0 obj << /Filter /FlateDecode /Length 3001 /Length1 6364 >> stream M=4IمQ* JUAA@iupNəOg$gp[h;ߓ/P"h1`DaDh {~ 47v2;#EaǎxM%w!V"Z$`g^QH!ۮ#X+=2c$Ӆ%w5.಩ny:Xf+ ~A' ZrH֔]uÏQTNw4ut0nxh_̎R93c%!L0zCq.Y|E} 0P6\;S(:6Gvc¡ب/:3\!TZ˒lH?R7#SY[~'sX?+>al Sf>#~b߀QR?RޕDSV--Dl >#5Gi_ϝDELH7dzh4ǿ[yR%01*b=='E+پ%ٯ`249ܶGVmX31[ U>&HKrvEcμA 9qc*B+#, ׃p0ND_pcuS<5뫵\ߋCai l*X2ML\1B7 .hPrj3C]&g^^7h~bſǥw*ESF>j9wfMVqm#P7Ȯ MT'8 m\ q4 39 ҵB%^q!d%atߓY X:%3)#Nxbm&=`򳺡 CcOf${;G"aDKCl>^{p|g]ۈTF"5)X/&ӟqD؏8~/a+NcZ j1@4"^b%5Dzلs H[QU/vF#>$D孀Qoivi*pc_u"Z+swKRbGQNdF8np6yAlB>IKKBuE\ 5[5i*B-h(rCzgE|.ۅ/du" ʉz틃DZ" ;衹[ߗiRS姸NN.x { \q&6 ^@gz=b1|F.Vz ѣ'ߣlyΫgU'–DcMH*pX+f]!2DCxj%? /܈jUHlk7 Su Sw Tlﶯ>eU^CsI#cO< 95v:rHr+BϰTڪ@ƽ"{Xq HG?o[&G`G&O3@`Jߔ}LDJK_+$~ +KlD?˦B\>Hn:Olԅ=OnP}i=& G '<5)IJ8#]0z:n:@z /P[Cqc}(#o$yPs:[oɨ%2i(I|iHHt˼fTJ>vDK3sڡdw9kAŞȤ̇>QnrE 9UYWU;gkI.5hh,TӁ1=]r3B,aH&rP3W{ P!hZ$5[TiO$;$ }+S;jаn߸t2lf` $a=Bnu G :n܌dg5屆0}A_߮0Y4[,S-/`Tbl`"e[%h P%bjcu3 vF/:ϥ6>OvT⺌rs3 =͛FMQ A1>P'wĭ b#~-0 ;}HAeR07s`C  T *e18%r]XLa'1V+tp?hxoy7n,kdvX$|>Jy-Nڰ}1Ҷdhkr;tNp'Oo q=E_/ |4Am;Rf&0AzxKs|λBٶоDX]^5BKX4gb :]9:'PI.;H}_b^h ͦ;ˁh>%U`~%u(,ҍ endstream endobj 777 0 obj << /Type /ExtGState /SA false /OP false /op false /OPM 0 /BG2 /Default /UCR2 /Default /TR2 /Default /HT /Default /CA 1 /ca 1 /SMask /None /AIS false /BM /Normal /TK true >> endobj 778 0 obj << /Type /ExtGState /SA false /SM 0.02 /TR2 /Default >> endobj 779 0 obj << /N 3 /Alternate /DeviceRGB /Length 2575 /Filter /FlateDecode >> stream -vuz }DIV'iz΄۫ݦ7H5/j#ZYSS-{nbn'鹔3:^@lQKYm hHkz|NT+CD͂ }1VҷDS' :aJAiQU$gL4Z;8.l$ᆷGy[JRy,ǏDKbYLve˫D~V^ow EPξ'E¿|.uX>ff@2 rHgi+նFkOu4|64a: Kd.`g-akpZig>)֒(6yw8LOmkH#`\ ig!-8F.ϭ[ƍ{sөtM rk"l}HME1ZXY+1%" I;'˸X7bED,2SKJmmؕeZ?-ҼR'Q|=<E$[zwjԈhp%=-6NiČ{`J" Y5ؤ!71Cf*;bF.AHS05N1ƽ#Gr6( n^C[Hʜyb @Sa_@;7>l>')IJ"# < *cZ/ַ{?16EałJS>SE}_w]b[K@#Xg}e! 砵[~QTi "GBwl+41 cBAK Wx |>% "r39Od6A^zݕƕVqaf~RVPdoQ:^AY14cMt~`B^;2.I [rSR+8l2O ϵӑSnҠLoх.;pVe`=$9q45 Swrpkݍ<\:^dOW$sos(F}DH,q[a>W>;5(|". wl(ے'LcJ\`ԏƂt8h p̶Dwe61Nkku5U''5p!VL2o0AW-!Gy2* rbmx&(J<T,o+/mQDh]▒vN~XY+@g%Cxdɐ>H F-]΃|`ak®+IްFX~3i˰ H3PM(?7Iдd$X4jဓ",XH6ˉ4.F%U2 p6ro o#Ql -)χKR/89"x!>=u<^B O>Q4'^A3ۤ:|W*wthj#$8F[ùQK+ \2C_,ф[LREM>q dJ]J20Ɖ'FI0c_7+Q vxsDXy}8T~(OoR6^I_6|C,A!x e˥/7h-ԉ=.)0HEԣiNAQy4po51WpO`SefK]d0\1eJ-4aQ|1j*0Ÿ綬F2 =$PeBy 9] ~F@mu5ܧNv^7lb7#]vc!܎k/Vs簻DVTȬbo2L/Hmˤق73d c,9v8™ ,ɌR||!VhA+c'[k(u6pt#׫/uݲs4ru#[9#mvf1RtonFv nVYV%W8Q[]kpKO4t4{Fd)V}.0 +89QLQ`˶++]lTs߶Want8۴Mn%{jڌf}2H J]X䘗hx?20ߎ/rtA> stream nV[|ۺ@j| `kuS_Xw/g5'  .xDLg&q>{ 6ma5BZ[ .n'2R5 1Q# =)i"#UAH2*x]FCltʄiel9xT k-T#ZkՏW }],;GKu}A F'b><&p)Ud4Y^a5g[YAca;Az;$Gw)lr&È?Y4xXi_ڈ};RIڴSS`X!7Hvy쭓΢8N"ȗT}9$(Wo .:>h9Od$\A+ JE~َ"MV& @֢ͻ S}/ӦzJfW_H9ۻ]ҔeZ3V}_?}"|mcRPK!9NJOyҸD yZ.sT7vhEY\>>2g/'5D*ĝ<o[fd=++c̠)(A5IYr.0 {$>B  ӹWxe>2EE|[IU'#%a7qԣcz "FXz6qS\WV$B {2Nh~wf%]b $<^ fd psqrJ w] #ΖuNއ@<:x-~D LSGCX0OU6-aKW~''l?$7W`䇂.2rt*o.=w>p׶QdK fy?GPfd_^"ɩ7t\; \5xp`yCW,h)փIE>6[m'Zgj83 eNQprv8ڼlC T-sr]\ aQtⷆ#R 1qcɍwʅm{&%lWDd:p$ у&^}|f=H@nV`+h\ַF%jUS1doK-Śd$̫sqUٛd@*L6@b9.^yO^ø\|/j*P$h(oHe\F%vF`gⅦ'ŹT &ʔ|pN {Gɳ< A"Qe/n^mEB~Y~q.dwCϚJJW>k31hM@;/oCdȣ{y1p8۰~#u{9}`:li+aY, PR\sӨÊ1'pQ!ߨEڒm?*p//ߔY9{]6*F -A/Gw,*KoK\hXZ]}7dg(>-54=d()wv# 0›+^ƀu'•*xX>ө (}rֈnGq|vөs"V"bzر#Ui&|'cIm '#a9U3_p$yic}NQSҟnmcΖb x>ޛS7vݠNh _&(GL~fB;|50Ŵ+iqd\e AhP/ci/:Mo{1!8b@4h6mjbLfDlhP5Ejx`g _Z-w!;]XCᛉcL.ۂJ0Q~'EUlN\<J>%qIPE/|e" !} 懼I^]h>gg~Yɸhxp>품C)cfٺ7!ca/ D4ED-@6_6aͺZѢ\@ _&!3Kx 7z!@[uy0'?MuXB_S7˿;[/)e ukBg9\8j/a6M p$,߭걻͑m'榯xdnI޶GΐJ|,lGk⑗]ƾ^Ϡ&5OWo$}3Į~3"8Ui@ jʼn ne獇*CЩ&[an{v;@e>Ql 9QrJضزg\Jp/9Vޖ0 ޾`ePjύ/(-8c`G Es[˃c[,>m ϑUM5ղǗcB_~;XQ)( !P+"%C !rrҽGjRqMOO|b µCLdBwnj@$lOV=͈\Wf՟TUU"-5t^IG9U`eE)[aA_5R"͈q* 5 MU\)n2D&{@S@N1gR=[]$}dǵܚdYEŽn((#zabA}k5Y>&Q!v$3g7(&W'S R"Sn5c}n*u}ӏ&F{w `af׻bЂ~IF'? ;" FiS޶;?,-9lz\bA،tI(t-a;7F$.0I[1VU0U~zeRu(~5zAߒ.y$Q缊9AwW]\R-e!opL$#'t&kx! U&ɯݎp)YISq%|ҹ@DXŏ."ףifɝ{>IrF%IAL)S aGLO^RX+ETʓ:D(\SiBpGigiтSB3֝D =1ʮŜ֗A o <"e{!rW酰Gp\V5RLci/#X-EvzBhTy:sFsnNH߳(k?P}Ppv{ǐfL7˃0| `6?͟سt] (x/#a%#]0+kJu D7RRѨkF(GزZN\DjAR!-[m D_A˲2@:^gqrBwִ"c]sм&6PB-`h/WVo֩]~eV4%˹= hDB됭" ~IPo@A5FF' qZB0PzN8Q֗5@*/rq :ṡ;|%I/Ct4?X|0L>=uXkY@hֵhBb@k; 4Ô>ۧ+M:01$1eBxF>P7 bP W9.FBDKA+2n?kݝ{acjŒ尋YS+ 5{(VKfͰ3|͡3S,ʉ`8?z';]hBNg܇x^tqY&4P[V>Imt@pӛVsn4 ֭]qTTtU)_ɼTH 3#=C+'e]Sk2~nͰ32[},Q7.yi!4TZ`Bwű۹VmL #$zIcs;P襍Bc&AIDYgb#Q%ƣsC+|Lεt"yiŷX˨bt~ h- +zQ;|@n>uJܺ?2Aks)[,& 5:٠a(:BͰ(%hTxa@-\:c5ե4-=CkLwjo(/hOG\nUE,,k CУ'_?"V4BٽZPrV?,UPaR 髜Nr1ۣPȰu5ޛ(J*a-1zOr7]m@q;U%͑ D@z\< mo7^6~ 1׵fy; cS .vh;j| I >υM6~8fEƆ?NhJѺx#fPk\>eT[F˶i %/0rŊf)OMic%=Gv6uZ9[+5\ b֝6{p?tb:_:8y ^c҅- 0 yG䈰bjM7vhpoFvh!NGr֬:9g0ܦHY&d2ڲ#V f<ƮTJAB!^+ 5L֣lx}.bޮ$D3=Go+,jJC+bHXED̋!vZwO_!g. ")Hާ0aԞtA_; u0Iul~fAd^ 1 PcⲎ '#9UEs# Z cD %H8(stF{4013MEG>7Z*o Ihү+ } ; ;ƞ^ե+ ( >3WRo_Z%Dܘ( 5{C{w3Qc[pgkBo!M@KOsEG5ӧ=]V-!l]\j %k*)ӫuy"L90=[чf8-HhExىo]*e ϋX2-Dbvnc2) m~s3=wJ@r!jx kS폮]X{Hڹ2k\uB],.wāOGϭ4MAOqOhe =̭2j Ԍ5|Vum徊b01Dئ1!KkI@:fb#<&Bl:ʞ=Q,7 rF'F2!v'b,8_+Q_`Ntf@;B_@y"v *u潪]4ѩ>_/ඊJܶI^St!G3(v0EsۙDP6m{PG?(2ђa1̈́S'X E[s#I^Dj1 7&JnO.u2?F؜ų3lWׇUؕF+MƝ'PmjMݶ;mV4?Ydڑz nA?߆ l#87<I+Kl@'-__ ca` ?Jxr5龗pvnVi[9q |g*C@dNYPKl1g{2A R-t'VyRDC3jXh[e[̀ݮW\930F첾u^ z++XTq<'c{t/ zNIC 4߿TBM Pm,=WDm)!ϫrey ңQꭀir&֙kn9xUwM ZRɨI#1[I(.XYRfݛ8'LƬ:ѶnλR-("^ *˄iHߪ[ڊTXoz^"m!j5QGhϋ~w-"`Tu3^x^K뻟b^@2s{ʓv? &k%:FA0tl흘jՙ'CcOmUmd!)|դ5t. _VEK6ԫ>8<Cl&m{%( @刮!3+bV䙹Cv#2F s{ΒT-X ;렿FIx4kqc RyS_pvX2%br?12rUheE'd7K$oJ=r5N9qAHh2@lIg\&dIɴߍDp97}Zy*/hFzm<@O~gw9STB11$ gwsκiP3_@Q zkُk 7frBmAZ1pnmˀHBxq)bр׭<(Ka悖,s:my:K MAy߇r,UIپuв(X#aZ 꽸x"£í3TI]_:OB>Oh5pIu8D̾T. %Ă)q$B`Ej RպBN_)NZyR9ܚXAKݕtϤ ]~j sӾ޶A/x^8yqm6q 툭Jͮc$#RA̰jh]/kROȌ6HRdp~TP)M'ddnQt 3dO; * zá\\$=QjWTr~ 3Km3p㳼9/e<{LM۬/Cy[uy'@Ky=`\`cd:h:A02 ]!]kl:ӟ[Gh\G;͈ aͨ*"^(g*p;XCS,YJiOeszymK.ciWyS[^<[2:z fe1V 5*P-Ljs iXfXv I) :UL'4!3G:+K~VrwU,UtǿbiȮ0%?|R&pysxaTXr.XHn))9|3P5B]K*RW8 g)v3D(\(\D ?M;MTsM$E4q><|$U|@?M4P>4Trmh!(&XJ4=k}i^@R.XۖyLxMl>@: /%>L/5tF表o/wYwbĜL4]LD ,)qDhdws Hz Z23y8!|{Rq_3t?#ƝP0|?n} <,h_pq֢FPƲ\_HNF9E޳yt:(j\R~tߊPSvLp\% ˉ3qEF% 8<+seU5eLNe-wBAѫ3@[QMLO! 3 CV7s,:/Ďq= chSֲȇ//`}* cF!p'I^83[FkEd6h=5znS? YU(AlieoYI57O( 2%ů𬱵\Pq$ZD-OOoqͰ D}!Pߣ1Ϙ,}<1F<Z~*&wxA#]O8QL9Fn˂IfD?KwMm N6^#Yz![*&&J~MYR8j"%XΎ1 =qBԨ/ Z ɻxֱTo NcݤL-c`%A4Zqp $RuoiS^׬Fn|IOOFyn!f}sRhy}9#AhEe3ӎ48H(p'̈́6ʫU?: |,T6B*`>\[>_ haC& iM4DC?47:m \\4q'2j}Um= {cH{.'#EU~4a6TaGe5wAcoAJO"C DUD^YO}7gy~Ư om}G4Qa v⨲Cٴ{Vo5b)߆tXfًVS& eeNgx) Ss+Oxj 3Z4MM6cɇZu}Mp\ZȮrThjӳ͜b|V*ң|`[/>K=HXaMRŤ*D.NC'ZiG t6Hwe;"7O6FIRڙA[{䭧 fʎJƗ~*0_2&i1u!$٤@خMf761í&--wsN8XDXn=J|.;V76^D q6dR+rޚ';q'u!F0r|`kL׺N<ϏycI[=ҕ neUXpr,!La@-EJKaq#8.:tbBb1vJ(z_H%l޼s|8ZIkZ"<3oq5};WJ"T{/tevS r7eI= Z :uٗ/*΅cB.!& Kw}#oh/lsu:üq6s"Z;lGoZH ĹU.l`fV0SxlEw=)}aDa`fU޻ptO5iF',dN$BQ3%ȥj|PW Bq1(Ӏq|OG67΂NJ`Q(XPfcD-U}?%a Jqg2-7RQozϤ,&cS5s>>f0>qB(M@*3=CYXPʃD KGp<\,0q3SReW` $2}u.X+HwȻH+v[8e:oP 00RgWj6]iW߱'pQy{{6f_3nK[Lђ(_ %zcaIVA[жer=t# G#XMluAS3+A`sL<8dV\?D CGё{Ɏ⒐zWt,£8EoޟCS!|32gzdB.SSWRts*%N)ʣ8vX7hAv_~F!IH[sqY~ T iܟ)- cN0}HscPs^WfJ׾bnIK-Ol+Z A2xI7.#]P! UL OvYٷV}s~r4tly E1,~ ԌA'EW/%!(/(AI8h)Jz`H$$Yٵo7TVFՀ;B&ܕ&AeOg]b1$q'N~KK:3ԑeY= Cvybͨf%IxH$1y5)p+i hN/ ( oce,ux/ Ad{FR&l1.V]Q,wy]Om, sLA Ֆ ӍU۵ps &?хWkM*)mQBwxqQ@wNxbG tH[/V61DTXUy: ql7T6x}(AO6&J.'Mxcf*O]sѻΆjϟO `QZY08g퉌?J▥V=&~sHa5ǡ s?vWƚtޚQ&z+uh6ap\0|7ueBrqztt*"yt5':HWi1k۷c0O#YqϺz,z _)YFk^#pBzd{FbCŋd$Tt*MԦh?fC)) 0Y0/JYMj-a(TID7{ػLm)F&q6ʺlmƯ̂`,Ot' 5*C';w턴aYQjoE crS&._)㪝Y"*5Y[b+<9Tr6F :7  {B9(n}&`:gl}DѴ۔4kV'0M?v\kyz\yEץ֯0~ IXcGf͛cNTTiW=>dkec`4H\ ţ-Y.cku۠}} &l_Jda]f9?9ZUQ:퐠_b4K&5:" EqS&5^"1̡Hd9 Es4vB< E%W _ 4AXH]oaC*aqѽ Tm+ v x5>;Fu+#ߕ&o֐J >Gu%ÞBVkm2[jq(T(j|~Ux׍rf ;+*m:,,I*) uyTSj< `z4GCi&][Np_ cr Yjz34N6ٹ <+Ud CΛ):}C$Mi4W'z.!cP=|B#7)y|R4rpC][2_u?jA* E,C5swv@3' HXohCͮ%&X)Qo?]>gE@)huQmL7;!QT"!+_u+J|SLFA[0k7zsm4QnZuŬu OeqEh7,(3 ބ'`mvn~;"m۸ Mm#BJD됹b(rb@*& >WpbR:~$(mN̼EyK6@H\l;TAf4v#>]6}R-SBxlD{_yѱ4a8do䷗ΐWmJOquxS1N<B>,C<\ fX@&0<2;6 _-×jʽa{Dx˒q1N"jp4~AK${WHiU&bGd꺯77mG ]K@ꛜ >&.,dSu]sy$Տ,,Zy0k{|$ lÄH_W+oջ?GP_UyP/o! 3z#^&!d6VI. (7b!N*h>$;W[Pl|A5\4ĺA.4o?YIZWyj+L -B WzG|SbT_txRD5@z?cע =cv#P9neyL:B h_Sb_ɫjPŵpxej)l]=]46XOrS̙ @1mEуκ#`komܺW\ٟO i/:wm 9IˏVlHWsMDY(J#Ұ6lFJ r۪RlmS}Optg.3ntmj&ה]+FߨK=y~3R?nUDOADJ~[TۋVZS;p8|;x /7$c绲 mvRwN':ӳWqDc+yNEu4R ZbȮcͺ>%TSzy=mXm{PWӏZ}/HyG?I kY憳8 rzk7Sw9&,^- +5MGG/X{p,-h@k}rOh^iߺ<]fCLiHXolThk;RPlC;Ķv ֻbԆ;&E$Y:Vø8b!Uo%E+kVL:!Q-~d$Dr5#YKvyYvjsxӼ`.AYOv#zU2Jr2Nr6$PQzp^J%U ldQ VT6 . ҩ0PњQD'=R.8WU7fgt)绎ydW訐_nuԺHOڐսy5g[|^PHHJPz@7 }f )CH27u5t 'ۢOyv ŶS=bom.xOڌ>ʑ:eyOϻ.8}g[gV5N2,$NjcXRbn ւoFyqY.;k:+tEy9ŷ躌Í5nV]&*+]BBJުJ;kwwtPH*DQŒ[>鷨'nYBNax Tٝ:ytXV¦KI4n>o{'$mXo7}.?5dȌRjVk5ܟyP~hr |/eMqvJLn1X}~4$Ɋȭ,4%q'V}L,c1046}e8&`*ZA@2uxӓCB! zo*u-Ս@bI~2,h}=%o?y^tVD9 < JˡMie֬^-No`e'JuY"".) KZsgv`3j/- F⩦܂E/S_y+H=!谰{2~`{1k1q(~>z8C _E%/ܗp)Jy}Lhm#}{U#F~T?mGrXXa>i_Q9E2U"MZd|J)9;R <G:'RW.3J_I]_aj؀GZ:fZ)wD:l?ӟ =%{L'קK0YEwt(E~Qj@Im&\a(c%"MXN<+󲶋$ۧ6{ Rlа0aP(bԐ=v~є%hszqړ&y Q gT_D9Ibn ; `vG!ϔ?vC, >pUv 'rҋ]RIr<k  rBϭNn$yhE6 QoAkBuN=(tsڕܨ< f8e,\[SwNP˄Dy)H?)L]MZpzR{u2 B >n+N2oO^u/4K ^2i.9L*f(Umٖ(ya/x魄Hk '毵uf[`d筴(O9*G:3A\`Vg{obloT8xcA5,7uk7)h{D^v*T4=>l1C9.g |;I:XL*I3;9*[=I5Kqq kN oϔ^_JAcG!=?"EV{6^"Q1 :w$[6,0RJ&=OA0\w%h/Xnh1al,cO_zS6sQHԬ: x@NL [AԮ<8xB".gX8ö0o DyI͘[3Y֪!`s#Z {`J״yĻQ 凳^.8"{Ey0L#y|ݪx]cЍwS}E9£ͮ X(+FUރT;B|å!pR$!||nv5BhXPڸkJU6cиPG4vKmc7ۡRlI.#HPvt@!â_ ]4˧&HKP0^oIW/SU k_>mHj۶*Rm$ YXf4^Mg~ldݹi^!t1FnksR^H u$,G1E# (ayJNR4Kjyd z֝O@5Ks Hjj!ſacA0Nb bZM:VXy DxE> v"gQ.zC=zTT=fBeXNI 8Xx(?s GBB! H4ƃX!aXO7>&ڪ&M 盲Ԁ6ǔsb?$I.[urmݏX@YvĶO=,Y8]ͳq@! UKoc=~u|)>T^?7:7?^0A UYO_D _?sȀ?sqv@ )w)6x,%7":e^(~J&پ0|u*j꘬:vC?;z BL( Ԇ ^z\Vbllbū K,L~CqZ:NӍ`! rpg1ME?|Z [ jϪi-h՛D;ǂH݀JlZ({^ςi,2 ҳF:Vj!D&*B!Rvm }j| &ʂJZحXt٤#Sѧ+vA^l:'5 E.m9+-OZ?*8 d]ݹW1=j*s"<\Pcu v 3 Y(mꢉv[=oV [^ 3u+ #pSTBJ Δ{1B);nyV'ȕ$7G+xyŽ2N~xhB=oCuDY0j",xI" =V /}ᷡ:Y_NSP`\=3ts2brycԼW56+[-䁴C6BfKxGiتo:(막g Wݘw+`,LӤe _Y/(kN>r)+{\MtJuu y& =O?f8ɂzh8@D?$e_N\zӞ!wVkgKs xcRG>ּqW'_u]e}$U%,z':GE@ncV ul֍ySP*lUE_¾t}+zՉc"1 uK6t]]`ltBdDyCz~vMHX?\2.Pt+D*wY+v3_gU̕[&T1Euz4-"Z6JgӏJĴVF`2Q޳؎ @:{Ӽncy(~:fSZѝXgc2ʘKO˳ rLɰ O_{0ҊGO}κk3{ESRXjs-:"Que /uZ hu kSF1I=*)P1sYvw{rK\h=r;,6NLbDaDAG|G.!=.gఢ8Fkj- @Ov]E:y*x:QUMeSvQEU͙|^ew60 *ܿLX3=0}yks pKv%X)@e$vA2+ISˤ6G& 2Мj" Q!8qWh́FVTq6>vW{dŰ/dU$BȸJ MK*)?(C0P6;AVDPUAݍQ年H;r Tkrղͷyc uŸMx6 ;Ez{) ̎nne +_tv5n _Lt2M+/ϧ'ue=2LXb &ѠR9xX e?z53jaw2jVQ7XK(9N30NR [Wu3w fXjv'p1d8(WꉴAJ7gee"r+X'kZǗ R^9i6&wI|9Z3!<6s77PwܐBH4BqBmTw)ţaY\)GsXf8_+<;O=4֓M!O2 .XXZ#]6°AIsh x6 .`eM-.p\"/ͼ)kh Y3_ z<|e!4?j 1Pd,ʦ߹Jߠ28SPe)G̜(*;>R[vyEžV4 }h7 m_pVuUTH0N16B P%{i\~{NiA|z/!;;egk ' D]!XO6j,ڃ)]nьVd"s2 q=˰%6LQ}g [@uYDN4~&P:RgeuC88 ]*76r:zXgUeH(0a!~ZC +c*UOq|hxdext@vJ}@XD݈{&e!h@§80Q2ޗ 8S:zknױ ?oc!)#eفGœ0>E-[ГtH>$k߿fxozXE0K;H/9(/œqkn1kZoIяrz޵8ޥF4AQCӹB1 E0u!v^3bIC(p}@WV !8L /O,n-6dZrqEVqU`E R9~5 LS<[t]QD)`ÆsVAD)}펄*a7 t75 H9J^ gvG4ic&d2ȺozMy3A7l|rJz_} M1 R+&`坑K {^5/}P6ڙWOIL8\7hh RMw9[@M|hHp aDE0FK9IB~w4{1CE@ I/}@"b ɋyX?Y8nzm$Ad7;V\/||>C2̬}%]p\ak~+'%U՚xrmT!#|2N͔g6as_6ݟ|'=;|^/+ lzu c##<%~P7!G^":6;gm!QQ޾} 4rgU !WDwv?kG6z{Fv@8_,`uMؽU`.īqĄpC7hnӍa CIITu20zQ亡79U23(9-# 켆1kUHt͉jvgT}V'Sݜ\hL)'|)oՎs 4$ǜPf찗0xd,KŔ@8M0&`}+9H҅f2Ѓ<[(fZAu,FtCF?SӒ!i Y?6p=O8hhg0tF_XXYNkIK>ZtЏg4/ceQ0S 9oލ#uZiY 8/=z!;p/"BtE;X)`nF"-&/Xzu!uMZ!O}IWd9b~* ă"rC]j:7q Hf[l.3l&Vͅ$ J˖X:o\qaNxˁhy 32?y38c Eۅ[8F)x L]EF?qOQ-D֐!0T<..'5&05$_ХZ=ǣa|Ƹbv{%N$JZߓ'^$WIE,b{x|3 I1U FHH[cKq bEeK9ݐvv;#J"0+( n 7>ů>}8&/P9ᗀcp{TvDaZi a*b9sO*;5E/gW01 &*jrV 5Εdb.my2=A@}1y. )^(庾72&%J^?mh /+yEHt>@UP±dd!XU)Y(B0/]kot5i()0w-P~N5lDm02g]п+qfAj(SK,e7/ȰiQFL]kwǹ2=E7 *ȶv«ewq:ucs_ۧ&Vz~\Io$ P49ЈAB7Wu::[a\ ADv:z\"$R>ٟG/r`ަoAa =Oa tZ)p q>;dfFi߼C{ko<s⟭STE~Bdwn("P,W]#:Mm=ycR:r${ٝCI"o;O@I*C 7oA(Rrx 3;G Qo9՟@ܰ;~ݐjQCWB"FɪQhq:П`AVchb':>K qގ!U'(߀vRbD_VŰΊhɊwHmciY{ M02Q)/?~ l<:8>̵,n݀=tkm57[T{(4edog lF`|4YFzX(FwnYPۆ!D &iEڀHCة!*̷J=OyCq`y~{K-P;Z;rx|,06.Q8vYܽ @&KEKvZHeH횥==NLZ3\L Dq75!w~bteXb)m^^CHy%62džtDVuˢ故ȶ5NPyrMgi/Ժ;hmx`P@AÌA2Z5d(%z T2W &_y>vJ Z6"}3Fm=ߏ:qjj΢6?CC'R~`1<glVȟ9% k=lhהS!c?^q,õPk;0FK` FsQeNqB+uq9]OK/WS㍦c"9J'ʜ$c>9e)5{bBvx(*X9?^=.$Zn"zfI~3-_.?}:5,{Fv閠*n.D/ CoYȡw?y̙qyY1]V@¾(k9<ٴGȀiDtNux,.8$Y=9r7vt&m1L$؅DGP|*I~k標5TdMU5AđP;7;Ͷ¢fyaBNBY2ZyћV)UBAԇYjbԽl}faIɫwKXTʥ",iﴜÆnؐGb#ʺ|T=AeIqUsx \t(sBJD~ ze1ùTG!tΣ;'DgX\찀8H ub]*WyЃn ͽ1uD1ЋdBUmؿqGDFu 0t{%,.L_rE`R^o*ϫD>;M6-*(rlp0~`VnVYe`zpDtąڹHF'}䂊;'v(?xuYfqZ+')t%>V1>t[Tke zLHPDb}&YX4w"m|А@OCȵT f<ŞF"jfx.O7oX.S)Zu26sg4>KV>C/V`(UZۼح'Knh뎨 cPhY6TP1﯉J#ԊTxy03b̬ͩ?' \`aVsAlh(Fͼ5=x;2w |pB -Y !d@q EfIffKE_T䥀D7ӭEVdZJ}w/Mg|bڋݷ dYxu-MW <$Wr$-|hS-@ܴ| :<$ĵT~DPp Dr٣@$L"tuKo1KY$e^l ؅q(n)Vď >R4/4)@xh~ͬWJwBg&J zb%"Gw64]bk+Rb,6UyIe2倮-үǪ@A!yYРTe2bLp@Hf\43"J x-m&[{#aS *(d[$V竐wX+MX$d,/W]'QT()%C蕫<F9*N IS҆m' (Rq~:$|=a*]d{NCp $7/yE{n8Rm}C5W]kʒ^RSmv P8ׯh}v1uFG5]3ۏ!r~"y:ݸ,+zx0<^wq!$5dD/@ZX$ȀkQµreh氘§gDI1 !TyT2;QrGTlrMc\XsL|U7+@$8[>? @BBs{e\+;Ѫo˛"wDe]\X~>(x߭cz6XJm;x1=L"oo8Zr>;j@ aXi d!4^eQ &ܮ—CϬ5&ـu9 ~X4|7.`[e &36=PDZ ^t8)ukθXucybkQ.hGuv h6 ?YA(G7\1ùW8B24ZD H>Be;q$w|B1~uX|tJwr'ݺ[7AGZd!|D_@=vuXG׍u G6.$DVY[$IE*pn(ʮ=2N  9G=HK(O'}ubQ2凗R'5],qZc͔H]r|`Dν9b=a!%(n3),ڙK {3| yR%ZPGbyLl <2!#ጲuХDa~iR[+`z)$N?yVkx8aymWv11TAd̻_ܕ`ƫd kbH_nEkMK44z)>A zmp;nLa|y{vŒF[)Ǯ%4Ki0װUIl*r ͟)?G&($nE {hD6@-oEU(0$WL@LIq"R쫯 GrRTɡ$RNW+7;dLʪ8VȧfhΥFxBfc0#H}6ߑ4wHҌsm]qJ*:ye5_'lٗ~e!=k@Ƽҝw1Rs囉Uܾ~JAtOXx*n_Rq#PfivxtZĸ7/w /C}Nli|'#~p$3NZ/hә?vUv;O1)e/ZZ ʘI"[gIOVb$Ս_W.#_Jv9W2lZD[;!|-n|acl36Bjd>Nk!4멞 Fx-D l5N /S]4e4˥ȑ1Jy b "eJ %n/n)?υkڋcS, <UCfq%ͥ"J"ڥxe;Mc*)P莑J>xBP l٭{[N.k>}Y/CHh k$% n gZl*BR \Ee zPy9Y#2 -FL"*6BйbVUUz:A&NAoy€[^?v@)G`Lth VwnH|I rG kr.%2W(ċ53+o85ߪxB\w+I\iE*6|}Jii|nm[/?w00XMWZc.$~.EhQRI;?IYa+ 65bR!x6x/\$?MݢJ}]-0X:{~݆.ɝ9dޚ= :_`zk?CiL[# kW{k{Gmϕ2k),Dh#Q섴9'|36%br/ XP}zH+2TEl5lPO+I/Fܞ]e3ۼVt;Kё3DʃS,9wy#{ʆ $y- x4<\Ӄ][,8–+Mrwt+ :,?4LaZ_#YՈ61م9)ƒZjXҰWqFz."&Ap&` q3oi*Ps ˓i׽8S\!N>=/ W-m>bb `${[y]>2Z|v::>.V2U:ԓN*/fD2c|R˭QQl;w"O*V+bi" 2 2JeLRS fh(ȯZs!s㠳tkk?U bNZe(OCPdޅLMXHŝ#a rQҾZ. v%N9Jţ40a?pЧni ֟h[wsAlT=esߤý|'Se$H4m Fcψ-!;]kQu}rO-azPjap ;3;&ߤV#z(s~3., m(S٫ clNy'B9t'tgE""=)wHzЉ-a}РIg?N>KnR?ڐYTIi[{qM6ֲD3A}7s$Wg Sr+Q]`..8NWE {ɢq?ߊ, Jb( @'POJ񆔌Z]B PB3}jF=!a\֟U 5Ĉ`?]W0$%J軉0eҪ}vsq:9g* sI@x9h Æ֨IT^j2CWgů=6;}p E[6ndn#y2N+F[D8_Hk6zWgRGӢY,k Qb^=cPϡ rZDibD8ڂ짥u V;ɀ]\gOYdEpFZ?Q[*==rd7Y!ѮҊ Ip[ҭlOAgR|G:W1VKx]4mHYnlZB_yr}.ul&$3Г3䁭~ga\Fwmh\Ma LG ӯF>)l s<&e~VK,6yCx(s\=$X,EhWb֑t]}n1thԷJ+f.=zYVKddlUrS71Uqref(HEbk$& ]6Ů8KA 4X' b! 4Ҙ:rvz9 ᛕԳDKs)u ?6iͷmJ&8xtyd)U"\3ju,OmTA90 7,>*b)(n-jXi[/u%)56~Xi= >3EbE}ݡ7W+(N$u/X* (AtPMN*f=&EpTMfEY)ј<N']Y~LO2wSh?o%kݓ_nd&b=7n7n>w\ٻcݾP~n@u|Lm_syDmmڼVMէ".8#PS%?'t l>6y1 ]n_}Mł!o 7|Ί=*UZyĈb(v↼mx9gN>Ok)]VN`Ax@:Jڴ9vE-U+V3fě8lJY/{G*ScP-ۀiAc?x.)w\pwݘVMbuuiUVXI'u+կ8ڴ{hXsL^vg;A"r[2dywQ?}w20o;yU@TN}Fq߲6y1,E+:z~4=M''\% Xx{ ɖ^qH(cJVz/5Fgmnb.Ie?3gSO)wnW_d\JZmNgR9[+&WKwb/){L{XIʷG)doT~{mӒ|)o$և|HZqd vj*'6w2 y'rPAARsX@4_Y!b YQ5to65lHϓwLC~@ P\SBuB44kG=鿒'8d;%4ֈ˪JJvG>lWY|w˺*m [ OutG>[tVki( 3˟xq} f]oeOzfŃPK \@#yPt+]6D4?EIq I;33-һp=b] Ra'A4##2L4H 3 Xjҕ\ ^mQKXV s 쮰{R2 e'aNʅ vB RC @zT.œK z{]h LPQ)-2},9[sB"Qc0nhmGu:K QÖͪv< ƭS' %ioUӒݳ4XKDs_a;ս) -1C2e>@Y]}z;Bdn^[;h$+T{ndNtzmq㸕QCMеl)Lg4Y~@s4y!12_)'i96s'.f{A:f1fx0&n wEn~x %@ #_~DxC,pF z& ƭstZI~,:2kLl5+F G+wk?rg;yx>}"B |t-2:lɿV w )4ez+k-@.f6 S&SUy0yhDvK?g# TB,]AoRl:5kZclNxD^AO{bxm&9AEPO Af%oZ!roh80R ѡ(z ⱻTLRWD](#'kݓZ0'-Kc}7=9`:XzXpo{#iE-3=][jju祪X&-e:HKya>5kJYNS{ܶe^z\#}# p~gvi~}ekR؍eajoJ ͫƆ:EttE"rMe20:R ĆyY3Ҫ:XH7C ۘ3Dt|<N CRT$5Atj̊׫iMڊ[|NlXCwO#]d`ĝbuViJ ipJ=jU 4G|EYZ ˋ6%Th`6_l*;wMϰϪ QHH~'.\ʜtll&;PȪG@`K)$V@pUJ9οmU@TQ-[ i$_c)$kfEyysuM$a/nϫLԙ:i16'S^e5VL BJ{D%ɝvvQS{V΢RJ1lkNpo${;"PTʩvSV%0 Pz9<4sg#\F3{^7o~c/MPp. Y,XAAӗO0%¡p:%ϐDjӚ(Sўw zI rS_Ǒ5nu,lR>-UhpWJ$ӲH *Vo }^T:heJ;#T%Y":I0#[{Wk=<|!4?:f_F,ɧV݌?w4wxA}іۿz{:x^$'d&V8V^ JAA\ [.|;}YD(dP!$0⭌^X{i z~+tr3 ,5RU z ,B\_kr.~lSV֠nxS@5 6b\82ÞeM>cX 8@G-5e;Vpipntb$he|=[vF[0V_VM@=xBVNUQ3 ljfH;^?!kSu7%{j|L59B4rWSqK7YNIB(#xUwC :'IB qb§|^f%IKЀq$v4Fh@/e+0 G`)h֑aY5v`~7+e#}V"pMQxj(ԍ@q1>qg&M$-K1=>F{Y(,2-ᕩBhq6 +NA\ˍ*{ 9ϐͯVXcռ[jV-0vy@` 7)EL0yYUnxIz:Q$JL$Y_Po\2i b*@ am|Tj~:!8+3:82vۉW˦To2բgrmv/\TtKV(dd2o[S]'ZYB57dWWDƞ}#)5g4pxߕv&yf h%Ӕ&*As:%U^(A57*oN~88f TA+θUOnb 26mHS,]sihEDy.fj&ξ_F6Meg |hlXt"!Ja&TeAyj5YcN|]2m: SWzna)o|7CM%| ܁_%8d,8Wƌ`(G%Ŝ&8Qtkp!-{!fLnx4*SdHy-D\iu|E3 bx 1¥DG,/M;(¤$QpA0 4g¿c,zLVG&m웜 l9~R^q-\?S:xHl)lRV+r9S;j!01o-LjGWPD;_D˴ P}0^"#0]IJ4ʼnHbn ̡mJ}8ߚ@FsUl 19"wݧغ2wB#44P "NA(_JCc; yS'9@~sC\1N>cAɲ%%7* ,ѻZQ^$'V 6GYAYixS5qQr!2NwC74@5~sD!&ˍֵc&UP$'lV04UoHk7M$! UR2;KCx',R%E%z^'HFJRylpZ=):.aD-0Q^mf6S6XM BR#%LcfsӌgDbn97(aPMjzm "k*Zc5sJpUq]qQN9BίhG|@ `&Z-]<݁/1e;:Q;9t).gzsil E C4M|ޑ0J/m ul1|HOچ[]YPaf;߆|Wh yV % ivFIo9L xmW^%h8˩w1צA@NYQ9lKFzj"3/j?@7`:;AHԜ]md@i$Gb:to\ﵬ?N`K+d<,zY t~cz&|eZe;|>R(xƎ312|). Zrҽ|F.=a(>s -̦׫#9ɬTΩɞvd H{NHxPԙK-HH-c;P~So'y*ބ1y mBT_GO[IVl~!Ҋ#8"TS-!*3/lna>^ҲÌDCPհkރ-9,@E mAv."o_tp`}sP Aԗ‰ Ӏ\:ӿK"$~p1eK^=NQz&e\uWY6cT P)B=^'GȢ fF%yrgeXa|IRrϬF袀B׏Ez*f8@%l=75L[$Pzf_ Uv:'T8j eNؿ[L@J!jN ;[/Qw_,vsZ#O賕 @szd,ɂei"?,pZ1MRbT-ZeP X IrG6*iMvVRV*M~?Zp7rYwcJy7eJT߈9"\ H)jFO ROkg( m9{ _eR8)"JEtS hq.+E *<=h6 hnV?n0)2iR `e#5 aR4b۶C|̓GD=Hl2=7՝ak@>W:Hi؇^@;JVv=cPK#5}7*~R>Ah-gXuQ,e.RsCg*v;&~=EV Zc6lUqGLhTW;\jlLwee &95į#ր  (=M>%c|$A".lL\w|vKbUo -me mJ6T_~XY]u,wKkهoݼ_T@Ңa ],WήH8vi.)h W&K+hOZEMR F@݃T(et{_OU4~j_$sWݓ;rr A k *% xH4;D~&CSd Q n8;4Ƿkڗv=`(gcd|A(Iu.{ĨG v PMI{;ҊB7;F{_~JK1žx7TeI\ʟֳ }m}p`S ,qLMC%IrY֮8kDŽD8b-@*:T J [8VƉwYmP*Gog-2ŠB$8pߣdzTE۷IA ^{wE%ӛ 7p4Gw e=.Կx06m>-7RZ)֑`0I!fQ&3͗wNuej{G9Ÿ=ȊR\;>ݍ '`8lƯK+Wȸt`U0oGWbaE?B%E[2}۝0Xz5DYSՍ'Հ"JFeh1OhIe**DhUb`L˟vF8䌰3Mn6P4=s;u~l<JLe? =Tv#?vU8Vau? "mXsMA9zke?\"?v%mWx_qGݨr4u1artHmyDKX픠qVV`O$4S`_45ůfbv:DXPl?; UD@c*ށL67c$/H #+oXW] q]*Dtf>] \vgq 0>՗-/$^V\G/uܷ|%3^~ UfO@gepm詄dak᤯b[x hn-{ ^*faG>$|(# sص<{ƲAn/tvCϒf,BD|$@R<ߏG1h*5y(u% =%dAϽI@t  e|,Vz6*2)e 1m"&1&3c-T6o@7J(%u+Wgѹ$AJT\i[dzh+,./ "S-Iq_ 挄,ބܦfض݀X inD _k1 2JpҤrb^7LX*p\ّjO/m dJ# 2'+ټD"}$H(`AbϪGvjs[5T)q6 N̓Q-<ˣhpca*?PXDQ5%s2S`)V/j/Oٕc~e+(AW]Cdm")7MGŹj2c#ǷO`%e;7ɭ AӞFyꌸ?'h9@olpXkՒd^d=+@i,t)߽ݐCm3NAzgwh# 4 /r%5a<ch]Zj3l]p0M ~`tEX#Ѓ- ta2sI&|uU_Qo{]as-cJ?Qz}G0#~MAT­.`պNepQn:F UX6IWxWcNX0[?z *XŇaA|ˊ\n3S +-PBn$ǨzH(@*wDm%~DHZ)h#84[cd@O케o_l,$b06a/v3k*Y([zgCCcrدYMl9tN.khF.FQRu2dwb`QzB;2Wǰ+9=@#(J9Z9(D.j.m02v(/H 2~,Ɂ>5>^anUC vY5H=jJHDٮi<֩ܓG<8ޕc} ,SId Մԃ }<̓?FvюO 25(J;^XxʿgΧznJb5FEy[ bں6ߙv<8tÜAld!t4@1yJ`R[ ]Wn4f2.Ub`Dñֲ{o02(AL\KLC8IɔfY]Qmmug%5~ Yd,4E:M^u{JZY }a9BP&0r]z/M%s8Ɓs7@&o׊y0ѩ>qk GB&y$X(%<;QQm(_[MNC-;ғY{uL=(kF]4q<ٌA<XeVk]asAxjMIouz<~nOnP!?SÁa3t*)Hq b y\z3m1@`8 Cbϩ._ ͵r#y_Y1XE3̧A=.vr0 YX%wHb*{ׅLASv-[U`{*@i~^n,/ ~)|H:/J3!Xn3n_3j%'RRS o ˳Z8uC4'pid[ĄNl;-PbpgNS5S̱;kN!]BtzL .<#?~daAU3KS`[b|mBL$pPr@ wHv ys ||A~Mpsw=pEյnvO\}һhcr[ߞ{I uj#vKw8PLX*sE9ocTh{@—mo0c75 %I,BNA!閗f|mQOИU6_hYRŌ@٣[2:V3:5|A't #KZ+B~V<`DwӲ"vT!A>JgEp{1 2SVď[G'`h(G:)Τv~&\frVo $%rϸrL$~Ys_ZyjA5$)!튿27#754(p>}HNCB h'=7cq03˯d&̾K+dn]?цUFӾ.Yb@w3Z}8rS6{0Nu+V5%˽dahK8xyo;w`s!  q9ๅjTY{i(8[a8;mn6nm$Afk:Rt5|StCL=Â%E ?sbj 侌V8f*`C"snj$@enEkL1I|wf|u5"Ƶ[HTօ_3DF st)96!sCD״gGg([Y]|נv%2*aLxnd&N.`g/i4ĥޟˁ:;p/Dʷ"PP.z_F@&jC& i y"䕩 @i ŸS@DЏ77;@1D?gJ1_=Кm+]h{d`]!?m wD=<|V;sFb?">E^;y:p#nIblMCO/^q(jIbb4ǤH<ԱA䛒4<ٯLЎrF!+)ADAEǶ Hž˞ZNpعA` q/B# Nh&LdU=NW~?Rӵ-+ &e2TOda$rIj2i id)8eG<,H$.KwBnH EXݝlnYFt*aH7Ʊ!iONY{8o!PqRFc@^gTx,oVy5^kٕ`2i'+"#+nb8Cd'68x20b|# ^1K]$j&ML6gKa'eӼ4Pv6 <6SLhuH*#Nu~x$+X@3` <rD$dX%39JbR|8'dFmFZҏGXgΠCҫ ?>,)m'6ɢ/k5$fz&~MwNԸXzF'eH~}nTzC@oxLn•HJ)IZf+m  01 r`b^1(Hܯsv} 邐-Icު =_s {s͢ "7hJ`^4{jj՘n8h~؄DEn{AE0ouWMEZ54Ls;v ;eSI2u[ؚ\6Sje$aKD)pPL̈]f.R3+e9lxȇtk.0f,̵(="3×3I~!-ak5x)'cY /jCHyFe{5؃nsBbx=ڧX&ZdwB2Ʀq0Hiizܵͼp'{o% a)UiS~ptj)O }E7X!C Y$SXg-}IPDlm'!NݓCLҠݕQxUQOFy>r ([yJBoĵȓE* i S,3t](ePSDK-Q^ON$OWx)pc+ax6 /%[7G+&g*ڮD/uC?HFDOV.jS_wo(XC:>`K֤T^5,i3?ƄgQfwnĚWoR?&ZӧJ7h$e*E3٘Zt;~Rw NӾ^NNefj]xB|, ,Yaj+7vbdeܨpXqM?J%;j>4qx"r^rg0KA3֕{tmMy:(~-kQ{vawUm2g3G!xO$׃~؟q(l𺁉1W?446%wQw_y375HuNZX]TԳ"Kgr1d,dM݄Gt=#25y`;$[.C :ۿ<x?qc^+LhPV3Y?S;6oaҰr7uoccVG-~htkiI&8+ quX*clŅ$`+'bLUjJ#/u^ 9iK{tČKvč,ϥa{ Ƹ]iqTNIOg0adIi%}1vD ,j<">&=}RxΟ,]|LxOD3YϺ;8qVfY {y)\_5,wD=tV"3$zp&,nԮ V/,gF@ؖ$9{6V.0=Iy. (ܑeHU F#QxrPl39 R4G=|WeXZ('IJ3~V+Pˑ%;$ D_}"JٳpZ)$ RBke)wHF盛Wm$'KA $m C]TX$$S%iN1,Cˋ q5qCd3grn:9h5%~J ckx>X$Q8tO8\;dF5ڰx2 w"p+4W6ހTwʽ"I\65 nwY?QJ/B6mSSv4SLHy(1>S-7\N3Ͱ-tWe.BEuPOeɓyz>RcocZR se+ȔkgPrp2s` QBt ;FO-޻Eo$6(UGQfT dgB͎@Dݩ07l|]ka+c.| W߉($< xV >zSyd xjL.3#Wj29 1WR(MfR;rnsy$TNP6D^] xb̄Vsyi =q%߭we>,ĭlT\X*+F}EO[B9Y/!Tv&g5O1rT/l3. Ժ_S`mAQym1^pGTSA:T0f"6bti Cܵс3̃PxSAV-ORM?g,G,& [C"X95x]o'TXiJ¶HQyyuC?uniqpF;z5FVIThq{~r-T{|o693y % ~~Ã=6ȧr Zգf%u týpbiP'{74RqB;Rfûsz}篙:G4,n[N,?2HIWJ?&rn4i { F3ΒG͵963+ vB #9@ 8Ri.ЕCÔAG i)kzҪTCSG߷LZƵXD)%fdLEj@6 aV1!W̶ܑ֠FꟂVq֪XQ*c˔e6ыzhYdžE6jC7IvKv8!I`yFL`Jt2ìC}4X dI ,_Hr{GKUd^OBzpW椌у (yV8q9Er)N Hhzp.̿~ fHպ?\\:j5/8 R o5iʜ_tR(u.7VQA:ƈ#ȥ*R6杀 $$a]T+b/y=ɚ _c:4h,Ũ2p(60>61p*R-9¥ %ʥ&1o,W,L8gWsw#q@+LkZUN@isW@=W}gbLxZe(mZ/n%qxtgup3^ 5却ĝd'Mv{,3gS!& VqH}9b9}Lw^n3 *2T?C <^vY3{Kh `p ]ɦ1;( ;D(_Q *>YbQަTPˆǽhVR7Iv:wI:Y ɯ;ios @')J8dk_[4xPs=u#LYq̄%Q ^ИmxGVB4#q^njÂe_nI(2DD4xQZ?bqO*혎 qcgF< GW,5kSm`1XOOq +eS̱nFFZfiN[H$Q'y;;%C &W_Os&m~,6 R8U ihh$tV&uY !wS~`hG|l8qbmL1*PDˈQG#1ộ_*SΎ'S-GZ'M!P0iޢ8'u69DouVxM/ǮxG!b`i]z uI*V5=+5psX`+{6 wh2 d5zݖ~Goۗ)/ڨaD,bD9.FO="r2ϭhE\p8o0 p&\{L7$+w_Ĉ бdnF{T> 6#y9iDct՘*]ĕ.!Bbh8ڬISM2]B@>Y+èۓ4o n #vbe*LΩ5pLω]k\q&_iui ["&*Z(Dٞ*!Ojڂ~w Ů)>3wd}5Jx8ȕѭR+ȨNK>6<6o47|D~1w멫-gqc6n NSgIVjǎoҖ B٤ڹ ^!"`+- Oy:jnpHrG ҅*Xmnb&gQg? V'np2J]CxАMDz)H9ߙvn=|ty~ ޽"=d%1Pv,vؓ YN:_ vd=a1۬h_9Ť;)urߊl+<ӝ;5PA-8ҽ%\TloG{wAV"Snɲ;RXz(qNK"?Q|mrM,+MSP8ׁQKﭫ) 9}DM]vflPsADSheV ez2L[NoXk -˸rźZHI7QgHI]xy9yERWiZˆ՛CspbxB |B`jp=t{v it K@Ha8Oʹ1ÈAKaųx -1q~d3q'dhYMp=HȔ.)>4̵P 9:U_?;)q?oF3 1>bPS!÷ē!#Pl/s> e9oϷAը_?$ށ-4>gnE^7@r " ~g 0'TfGeLKfp!pPjD{K*d%G_۔++=6"5U? F֌Y[+.'evNEX<qZ1{GNnPxU/ l,6ԡ].z̸d9>Iyq)6.Q$bve;TuX}/OfB\zWy4;OG ;s'Elky nxqG ޗji3T(> qڕi7qk2j:^^ !د <} cLT}]7< vrM{Im*?riT8QO"~ޣ]Vʹ Q@M3/6x]6)؟LҚ?j:'+ ^ƙx3ZH əC2-G2%0tT X)qi.|\.ߌh݅cwe%$f׼hhAL P"<3Kpw~ PALO(@X#tyB sjJ-(ԓڟQufJeZ C$VYǨaZh9w;`<c<u8Od@~z( ({N"-l̷+O D)YGP& Q{%A 6)F!on.VZs@ = Sg+Q:*MȌ3َl%S!d[= /2?pE:2Nb `_6qa>uҏMmRn|ǭ ,t}458Pj,Z4 @(O|j]ƨepl[w]/Vg]u~ʌyq8fo|k mng*W(\L, {=C,*,Gg?2H.$" p(IW8^3׶tL)^Җh!ޏY%AG xśWHcLSb _9L(]d3 ,NN. Qzpm~H+W: 52R2$B'!fG7Hu:}oՎ(f.i.-ZeSIèC/ۯ᳓=YܚEL*KMW6#?MrDe~x(R0S| 5,@ K,ؚ%zah7N$x_GA iwe),Pk'b߁QPXŽZRXw1AF˄ʭNO1uU$!*84 5iV +Ma11 sShpGJ'ۏ;ZEFTIuNؑMEH.mx+Ha7y>i%Z`t1Do$L{ka `E+&Usjmwλwgn[-2).=?YըT_7e%HޔK09SqŗI)6DW`YO APOt`o(Gwt?e.Ǝ5Ǣ޸"3agu"IᅬLQ*ݷWa<獮2lxMz 5 vHM; y3z4+BG-dI{a}0įɌ).)FI r>HM`' D=7vXQQz@DZaRJ,at_Q}㚼]ӥRbo~|q i:cSD tr }JaotEb$L#Z9T'せT&w0[̍T\a%ZI-y68\2H\kb1Wض9;5YQD>\ك th<H}sf&K``ԺrWYK{D9@sUr#췡a ,,gWXYi}EPk{uq⬬W756j8-*Pݚ걯 % " V޲g/o_nDv::aV<,ȍVl];Ȗߦ!5,_T+a/U-TQFf$ܭO 珠 6\Yq5<7Hi&g=MdH\Yk7<ÏHw"bGWQDhb<:TtS2C`i>A+ lJR#́ Vډ%?H#Z^9v37KYDu}É8V5$mY8 URřQw!<&RҎ;cqSN |i⫘PAqbc,M I3ބHI"+(D_vC6'<'׊^UNB⽐pL$HqJJsk s0 6Kf#Ү*/bV+-oPBJarAyz,ڤr| ~ f^ V\#° 'ZgQDԞ"3b o'w$p2sZ9j"X2\[ hc:?gc#SS 6(IK  G@?)yTvS2AD#&AXo|<{62稉+O;5&0&3 [J9H3l2}wb̙aLyD+O'!4f{Wt'3?2;d6_&mg2 /9op;EA.#xlqkTL)s"K)XNUoL}+NQzhH/Hm* , kȽoCKfFG2MPwI ̹]DxHE`; rJ~T*S6991mP-dc䘙38aQ(RrB9'6)Ꙭ 6ǃUƼTs+r-j#NF.@{>$a((ekBc Mfz}FR)25^˄(^ 9 n) I8j*T]D ^*ŭ);>'2E降GD6_c嚭!wqVѨY5)֛o8ߌ"{d%gjIrG X ^`[Mm糜@ A8#H,7y#܆"귆}8D+0&^gr˯CzvB-bTCnU~\ѽ/ =`bwb ~~ě6Ũ?XDP1(^Kx) cEP6sތBYT{}Q."J+wĦAŹŭrƪˣ”+4ܾIөͩVHn%[AGݖ>P] lGN/]RԜJu .Z)L|yM_{|GI5tN;%oDSx6'}om{]˰0u$-lmαTR W芅q>dr!/!+J%--))DhwM''rG"%e^fk{sH4\sJRxwybmqdxEٺ"vVׅ}M6 SzXA?#ɝ8P@Lķ|;!xUEuz:$WN=x<ɑBad"O`!g5B.'i9Np=~1f_t5 ["b!o5~LۊOBI|#SCǜ\ל =Ycss_J*kA=g߅",͟ڈ,Ճy?xi6CU 8mr/"\Bh:{rJxzw⿔M`3U;w ADHkķנ٪ l֒͛ms>{z􄍋ښt2ׯ#9Q A-eF)b!nbfۜ񃗭`GiUxe K* BGC78sNb%KBWF"gi"|D57̧QeK ]&x(@ 4:"U۽ORH7anW˘p9Kdb bp5|޺ʞ[n{bz q[~G5pd>]k12xy\XkqQ"=YQm`v<30G1 p@Kv,uoJ" \t׎tDI9euoJ(2BOv+b_1$ J ́㻔:CQ㎱L' s΋OVlvgD?BMJ9 NUEpr0:3qzJJ^*=^.U Ag`#aVUO"=_- -< fs͝g|F8aeRRRqKrooDS'yVHHJż[Q=WF =6?xQ:Eo\ç};`2`2Ay&Ȗ^IiB_H559)Qo-al^q y0̼"{ji l= is/ O9$~/jEA:f9X'2\JL,%bWfY)L^A؁AcB&x' !c/;qV۫Xubѷf# Zh2?..+=S+ wd&9#cX[AUP]Hșa~&llc$‡qtY)V⠆id( k\ߢT3.*l׹/o@]`)'ժb2cᣚ,'So2SܯT$@d0'xht*{CtbIR^?0R,6WIW? t]CBzoRhI1YשԻAA7__3+wNtW29+O_!MndWY>?pj{1OŹ#ƟPđ/*CvPde.O)R >#&MZH!AÚjordFҒ޺. d^>yT’w I*Umj=eapfLOOCkz,0Wc}*<*Nc\[d% O"/XW̋&3 , C|D]2dlbbp|YCNMbvZbC.S/d)(9ы4+";ٍ ofrpNi}}=y;2'1`=>4ٟΊmk vP?u7^W)Hy SwJ#v 0n 9ڣB斛GzߤX^gJ{"6Yy 5ETwX}T5;. t4vׅU^~%{*uh3M1WpTA>|ň#ؾ_@`i Fނe1gw 6\A(UGO=Jq?)n Zd'jK}.(i鏕۵~llp_~1de>^F suer\3g®(4 e]cք [7QnxFʇx/*;'Y̼bm:͸?YhJ͕;AqlSdyI΃`P<e+ WznU* 78TY-a P),; V5N;"+6l`Jq^"*4:Jܘ?ZE>tgp89жOrS*޲CQ1K+D}[SG(o,kF PpR[J<Ԗ[XhjX;|mv3d1R*r# _y㎝fؖ7dfz:\tᓻP$hqG* QQQztۡgԊti[z`XAQ>6q-Q;e_|m)!Z2- $vy@($VAn 6N'eBn+u$ ufJF@ޖa.W\H~) 3hK/[ũ֦I%ʞL0EɓMNNM1!G1Qޡi{c׀mQinb6P'gְAQ3J'l^pE$YvNarE9m!v:i QB }"1zN""lw\xi>YtØ)XLBQu5 )V=Y?ք#'Ywdmf-NrCCav90DD(M3+~b/ߡ6᪂vH}ntIl_"jB0T Nva.&bɧ&@=6|;G?}Š#:A8`J(=⤟Rwz';T}7 ZR5/9\J:D_KULeoh?WH< Á%!>c('I 9=#ʾYUHբx36RT!*l[ 9YkK݇uת冈G4Laǃ6R@Tx(Ui`f|.`ҖA{ *\³5g|\ObCqZ:b6Ԓ5ea_Df0wn&=Ɲg+xv.?%2 ʳ AgL]>^*ym SsV!@ϭSt}#ҡE2KK{'<,DLpFHpKR!HANf#mz*g ` =S#E/6SM@%!ؖ)ܮV} -p=m_]!] 8'Rl#<*i8Н6/S>Ra{I6;Ew#{KdbhV[B* }}^]2SܙL132[|`u!j1 CЯ.;Rfԅua ҙ(G4㊋4CWgۗ?9_*vM|*G`^[H 6?\ A "<ոMI|zjӚɌD*B$g ꑊ\*x8o1 œJHHa8hrS_e^_ٙQn `?)5NhHV aխ&V߃ГUurt1rZX|LhuL2wmB'a8w""a7~QA0RhІF,a)u3o_0s+6*\A'Nh:LAy!dzW9I.&!LsPS*"8i\@jIjgq}wyJ&!_"V''h_ ;"G%Uy''cjdLj`rbiFuCB1m.覙?U$Cu?;{ _ϽW }h/b 9mM)ǧBT}XCq.K',iT"4T纺!SʾOB&m0y -9){sJ2 R9{zjmlk:mT+QX,Ik|82& g)˽N 7=Ϸ$ٕG+[z謨CJh;t<۸jц%@5+Sިb"pߥg`^m݊ݛ.zQ Qφqq=)5i[_W0D5\=SГfƒ4Xr(*f&ZseI+xH\ZN c*WI}ג52:SsI`ޚ-Yr|2ʼþ[IWNT(M !-ePp צP.M1ՄIO'AP+8k0+R^2_c0n ܢXB8% =ẋ4'xiKy$B}%FP/Pȶ4XӞ0n5%AvWkHrEW8 8La V&`aTFP2%ϥa;G%Gs[wvu#%mM0h6hHKgXO%mMs% byr /2I q;2፶7 +k҃`H9RҜUN;1W4v/RHL>>P"*rlv4xaH./mmR]o߄ #%$j[8J !:Vl;<›c#͆V;]tnPIPbf()b=@)6](qznZgk׀.:k$5Rue#ng\ZN<[=GŭɈҊʺ>i  Pg?2d&̒5;3g/f%8< DT(Vp7t_eF% A:9_"HOh]D!ӺWR&%|1P] x|`DTh7хs9@Clؕ5ԺBڴPG&=/!ۇ3@Q k8r뼄+gCV+慗˾L & ޙV!KELD>z3-va ;C*t24̩M$;MBG6"C9sq=ES!L n@H-FU@H}ٸl? \Pa6xaد1 ~O,/AyCpJov3[7KJ؆܄;{=V1:+'#H/ڰ0/97NzU=$>̏ͺTqNgvr58O'i1@4)z0mc XкêdBP bE7ۋ6z>O{ӣS`5> MRTM~ʈZc$"bP p3!rRa. WWl.[LB4f]屯+!7^[L? pH==lEly"ީJ@qVf!*hO+g(ՕٳRGą]ɽ0CvqܞMcRdY=Q;fED011%AGu mЊ_EBR%k0iGg@U$FtȫG Dh)ހ% ,u<'u׳Ak:m嶐ģQ><brg^&,I⨠r),yS"SuV]𡨃_RxA } Dˀ fғ"}P=uh'VQxh) +=j!$!OkʼnU*P1 W@/þ dG{V<RPː@%Mr(c ߽@!{AStV7j81-\;Gpiwӥ-^ C=GABvQMx$!b`ox['f95'!X*3Α'3GY;ߴa}@th69wlx6bu>7+һqn F|9AHTZ6Zĥ@.yՒʕu" @> 5}YR+KeƈmEqgV,kyޗ9k#8T&Ib"d (l׎>姪yٯm|Exc 9gK,Ц~ʩYD/AV[E3hwra<UB ,Ng[Inc{Ԯ@wmQ +ٴuG&e%9&Kʴnzqy5G]JǺSu7-N22NTmz -(KN8o{\]7D#<ݜQOY옮ּUw]C7WMI.0 R5^I z"럚GvrLsiq6 Es߯ÔXq\D[lcIܬTQdpFY"cef%O6^YE+rLtP*T{ G^cHYl kM ^)_HBOeH wd?&'^z+t_3N ӿ|.?O tzJ.%F̃~[C d!;ʹƶ>f?Jd")aRՏK!we=HFdpG0^rSE' 2.(D\j-ŵQG?gK,|烈mCD&{#H{U1L.xmGqώ(um]hg~[1 J}bC"tVn4œ=9mFt#)˼(a"cx_d{jn U- zI!mY9JK؊ooOx{ Vj3{*8!s\g(Ô:&,E!Iy׿zElP >1 b ilVYnpTv#Ŀz%x}ά}'.hJzs֙ŁrA{qE!aR1oL]J,˽(a¤t*) 75_BHR0CT<`@ b rghz1N+ba7zɷ)(})WAPAG:,RTQeIxS-߅UW}Ln'QWü 1L3H8\qVXYqB@*ʴ!W &JV-E2;07I6]VG"o@4Mb b%m* N&>d7Rj.޿Y)kp1pĥ4b9\劂e Rs[ňcIK35BV]cXcՏFW4(l]g9Mt-cc1%I<&ը4n 1 klS_80h-X/M ٛug΅z eNSX\̼jY@PRm=9 5+R8BH}+ÚIJ &Q:gD1"qSČbw{-kb+I%0e{N"= 9DZc+dq-mEYaBLztJ㺂l}t]nGs\?W `]"Aw:Ge LkNsb4QY߿|7aҬ}XڠCwPf$43\2B~:P`0M=i~fTFPOo3C"}MSw.;tS7uds}ƎNl GEbK H2K iTx\07-5Y{!c\V[t30 c obÃ~Baie)*19f*:z,h ۮm o/ٗ ޶b rnrتgVP h_t!-id9ӧZW}uYʐS9tĨML@NȆxf1w3ز>PvIhu'.(,8854hx=`Oc)͵K%Mc/" C2!ۂZmoZ&K$.G@1{oHz | [?d[+Y4 -Qˢ9{Fmu#?b#JA$xfiFN0\yL Cb4 eR7; vбFdt~2j^02kzFUܬ7ጅR/-2v,|"eI3mJ`xXA@pH3Ɯ BHQ.9[^ o /f"̽2w @AD<+17s1tiэ%dT(BJ+*c&_Rӥ#ؾ֝LL!jhTAx\ xNn ¾kLA1n8wMx~1@bk"4E\ )k|V˻ `o}?8IvwУF7 ~<| $3앜͔s xQ~#7w_Pg3PxQwVN*xPQNNB siƲ]`%6#3a>2ʇNM6L#[re}:5=-$<褉} ,2@+.! вJ8& lSx.nP\$.v-6q@eOM4 6S`R7!;`@W7M |v%amj#ڽO P粔e0c7S0gi{"t@m\5bj#PKiiqPN+f&\6K55'0c*vq8=K@wc[Ĺ! ^O|`u`dݶ rr_tj(Ds]ar_iS3@W9$牬b8L%uܵs=MmN ?ɗ/|\5 8@Z\ =A1CvJ3yzC'jęrnݏOƺD&O֎6ZbgU+Cm}k]pSK=<'|I~u*KXe!^ӓ0,&:LbxFn9CPBKZj+[ 7b:tV>xC꯭eAzg>ztw2 AKԄ@tg_,}auIo!me4Mu_m00ͪY!&k0j<ÙJYE\ Ko3[7%ue㑜l(wqOx޲\5@Uhf,,[o+`[/?֊9@ `Įg$iH|^C{rHliNF$q#}"*"4~fXRvOTTJ2d!ʲϋ2TL{ĚXez!RZn}鵥V=c.7. vF+))˓/!>^1srD"_<Đ@gwD$q j8#=ұ4oc K<`ѯcMZϯcP,lNzĻBQ$lx'Lzқ.n#L̿غ6RoOjoD'"6ލdTTEq3\pʒ^I~ƍڑܣ:?KRq|.kyDn.X:Ϭ#ۚC1Z XcmlW%t'y|p/i Rh=1xAYre?c@n}oMvN{'Eopn7` Rrx |K*)"E6Q4@5H,P97\]U/$&(ƻJ"95HLdGy) nkްLp V@p:tY 9KKke{&`dFp9ev(%Cy{4 C]#rD$k+\*T^q.CW\`I:%݅#!-;X"Ĩ{kRr)p!1z6Φ(.@;Ѓq'OMm. ]`ӷϞ2$ Y$[n.B]n b񼦬*邯4;V${w+ y{# hg~N [o*Y%e_N^l[ԗ- ʧ hPH.3xъ`_5A?b,?rD+d#F]K1GH sKՋk4f]{/-3CF:3JtAkt)#0N0ߏڬԑZK{?oh˶?^2鎈rHfE'-1xP< L4(#ZOZPO CXHmU;yN::a :7ۤ*h[zmm.f; dSToo}ls0fˆRAWyմG1ё,z&)X\#:v Nz W9!tmMF`jv\90'_[$X,?VCو1i( _c`ux' ^AW`kkA*#PxJ ONWzCLhI"rx4sEݱ|*:RԗsB5biNDLdA$@%!o+\ZBV$Jg,OfO[X7da1 ѶC0$5d.];S;4el̙\ge?[~zTsl,+[]JNw>rl z!^jd >(H(γ7f4-6|;1Zsx˕[ !Bث-WGfQɄ;m}L*GxT ]tinzزUX\f9* (0RF ˰~ \Ҏd |*]f_ V 5α(Z0ږ+G#!{nL`wBKv K3})Nߙ8zudB9a!HF"z: # .TV;x15LkIY=PelG$>RsiԴ0\9qgȏHwՐQyFr)~[r_cHzd4T#""[\&@JL%^G[GZg%nRbءܲ ~JK]F3lKw0hK/z%J?:NszOKg":a\2aIIH6x?^8߁-4B /Gr9J.b ٌJaDA!pf6,\N/wbvNZj5 ƽS!NBT}zyOU[|Gn6Nh?K×-ݨq8EVũOK_BG{Jqf 6HZoty19*>-E[?JUjV!Of!/THc@Ұ RԓɎ"&)zX:.g!jٗ4 SC!A/,LONɳz;ǘf:@Ɣdܳ%_nkd Au޻ziI 9 r_fp|~[bl9"iGueRv1+!&c24:,r&VȬ~%"k"B$/?5֑\]u~w$ ?+w^g Qv٥8fQj0s! 27S/Oyek[`vnT.F 3.uBWiY,}ZvQV 2 X3_,Mu/:<Ǥ5sa0n֚vL<Ãa_L *Ft l|n3)erܯtsDCV J֚{/pFX]}!p fcdMRqK+VGlgϏ 徔@dPSϟ Dy=|8d׵1!G"l%3ooR]}-hv)i6?:q$UjVRq/JwpA7y$~kf8fug d]Ssn8_H>1^)-]n)s%Hp^+ !su^-qWk]hB3iP#X\U>nl'\ShCQ(GɟZ,4|mVt>x0!*6B=1K? bbr j/[P\fCM+%$O\]ɤC΀1zp̘4DX4U x˛h-ڇ7"/xQGE hzpGf\d_.YScKV=J#  ɖnL m)>濑kS#YN-?a>mf6g*2iNb4-}8[izcf!ѽg[oR)|๧I p Q1r*nYu/t"{_sCŸX*$zȖ8fX;ÖZ֫ǽiyԹ.j41c ٍP@'lLpT33'f KxGGN"!4ƞSU1dMJ*x'#;;ĜvK#-\ҥNYYC론Yt!1ff"V 4}47>ՌiN ғ]ԕu[DlSD-`I[2uMXeH<)džŗf׎%Zf|2!*2B$[L`[E3}jkk´f>.r]ζG&1p} عK#2b :z(WHB'w̛TxM*}lB{/ioPT P ju uj@5M-{oʠWpƴP-Mp4k]5gƍ9 t'Pa"af<lfOh5]Le!\9c,xT71u<JĒ肳y75 P4l̨)2^9_30Qu% wHӚݜ RX"NR,;tA\O#S-ti:Ί?fPᬔkG+K/~0#[?fk&ЙR;b HaMgŒ} 2iKBU؛Ott˰Zv ^Tr I2/L#Kv~` uk&Yn5|ﲽ?zpt1# 0Q}+u)W/֊ yg@8*d$m.w&t~f ?d_ɇb+YxDlxve`:IM[HE;k"1 |9|ANLCW0-Vqa# l[Nz5_B>R+Y\_aVCڲX"ފ=XS$4I+ebby.1F>𻧈i݃l0#Nh,>SP}]X~IHulpH>neUfΨvA2DNYVpv7R_Pk sJeE+Q`0| yLb, `IB%.<_oF=+ggn_f9)BuI ڜX\\'uՈaM} t ia/):2C"w'<)W2}[ uw<"r?99,w^?IU￸h?O_ֱPkG|"N· D7KlʡXë+>"[>{ѵ޳>VT椡:Kfd-NpܢLxMΨz2.)֗n{P_2ftmOIsJːY`.ҵw9 #e%$LVCv aߏ03֧C*O۴ '|Y5hZaF-2bIYG */< =7afsv+FLSir&,ux5ُrk"s!k^[+{l@=-]l.g)X5Ut{WThJ!/3 E #AۧTBGh">F]k[ko7缠HC{6:vf8`UYLC 伃~ FmbA9L{W~îsfϊ\}׸Jq5;EoWC9T_W$g) x|nKcE0 oNw^,|!yfK.Q’Un:`ָK,O?,BjN jbKAE.K@ [fۻK v;y\H}Ps9&~C>YVv.y -c,=8jt-ٱ\c4Y@AF㘮}pU)aP160޳2b@ DP 9tBʞ.}d-b~J!7jtʪQcs4D10;edIqUxs"&ӰO"/ݍm4OzA]\kC] d.`ƋcO{I9N*4#'d *WB=*8@(3A=Rb>֢NϷ%heKB07#UY]>|`IKwғa/+ GP1'>0h9!K9XJƚLoUPHcNcs&Y T@t %&HfYr#$udOaO.0N@[L ~ato.N Kȋ lV3IDW ¨2$:0hƍVWGf=;?ncq@o3xR(WViZ0/:u0 |Su{Vc1&'`xjPc-:o>Yz8ią8O!H1[~}O!"Wl;bEڎ#wVH)6 se (~jqVB<@}5ÁGt)6{1ҤTs`^rh37YJ̝,= ɷ:lA7~pUuJpD [8o0{,7~jٷ4(]i3R<>vO暼 Ce$iҐ+0zd7\}lhr#ՄCShP#~XߧI£Aḛrg!CbWrnl=臠^$u@#;f'ԌTW1vbǾgEśv:қ]ۨ >(1/@Ez.wz!\c=D(AN#Y45Q(ysʤձ>H -Ȣ~ 8մ 46g4ȶ':7+_l1 qeuh8yuRFqNWLkWP 7nla+a\7H:u—7$J:Bݦ,݆#$TsPW/f\3]nJ0_OpfPldDI9 >t޶N ߰κc._zW. X qVYp΍՛ЌP*r>]rݿ YI]OmFKgó'n?vA 2NAx.R79y{Cg@`V; /k"[cBѡ.ts ܧ=Daleg~Ft|Shsեgq֤S@-"143a`,j.z]B񀰼&OŬʔbRuA1j-o ܲXp!UDp2Asܳ8o-$hk׈ 2á\ ;|W(w"4OߐJ KeH=ovfDn;РыӾ EY_JrZh@4rXڦIsއ ';=9n=hö]}j-ΣSw@zos\FW&`v.CfbԨ}Ä|ã`Xxu]vA] i׬kR!jm<*:*Mpw}w$ڷ]-@tZyѺKYv>.r-Էˢ{gm[Ԋ̶'`#bиׁ]C"@C0*c#кJe+W;:Я$-|sz]Mgn}Xo{M (+KmTp1DK nQfxl"dڄ!+w97U@20 6v،JxFq@zzJ+,SF*ƒ1M ׸QGqCٓG.`ʦ6նb=g3~cepGtNbMFΤ>]9{WL&2qur*5cȵɎO6=+`)W8Fz0†MqUFE_ 2F|-1@ kpC dD=(ڪ>r[5M]=\k\\4.##C`iE\~>,)lTG-1"Vp.zY5YhJΞvp,g1gZm"Ka '̇7vyXfxr~'4.7Ioh]!<.䚹d&l2f:h/ӟKi]ƐUu{hfk!͌ھejaWܾ_w5ysJfAN83۹v7* 3yUޅK}ܰ= kx{ \.*B X2m۪)sEfS@"[EH(PUɈN7gTlBڃ2?tk5擿jj8p&fvg]5:Oɯgo .X ֱGz1i{` X+ء&UKUxa#1-fs K-?9gӐlEhE]f*ϥ$x('nΤNEK6hƠ6)d4tG[(kdHS*1(9LS5Bz1ogNRSk4PP  'Ԛ)W$/%Ļ .@J- aŀ<͞Z6-NM#""+Lx2}O`-Wg/"z1n[ᢄ6/+BO"e`d@ n zqFnrY%91zip@)v(໯2n`ιh4jR,/vzJw'nr<@_k@ /{C%NNS;z%b/k.{;1]ţJ(#[YA?ݜh_~l].Mmoˈ+лJ̯")iaCK#3虚 g7?[M\Wo onC?BtHcn|p} `ZŤCl؀EAW̋%QBVsA,[6>$59Սԛ9:~U(w1hNM686UPKOg+w`<(#NJ՜Ht3tpgQAl'IҟV E|PlQ[UjD_JeYx~Y 'W֟ sxL0i sjS.R X[*1 7CIlX=j3YǗrpD51=ףV$} ƶyeP!`^~]i ,u)e2>Td~iz|pakVT`DzjL.㋎Ps+NK( `J0l{#ap{I* ҏa޾@+AXUIvyaMoPPZ3jX'W?|"]EN(6&'9Ңn-N}ًiace3Lçs# D vEt+ԫrI5У՜Gms@X8]b`Vn5[ Gxl?3`A;$c-=Kɍ% '2LwjAC55>l yCҨɾeJ*}ңbjyʩ~d$d+D{ݣW@xWvbs#_ 7ճz2ᗊT|LjؒP",ȥ=dUw%J.Ŕ_5~TRsfEO {<,v%5WE}TIs:WLT&->~Y5ץ ;mخȧao_nGAl篦^as e=^tb rܒ|[I!eeJ6CqP;U9)I,-1=jqeDb%"2%i)vNKVBU>쏑l'[JJ#~l㎱wNTd\]WwDc%(p!ۖ:xe, 9+tIntcxζΊ_tPuzl I#R:BkyxIVX#޽Tߥ-"{Vķ;J~PͧuE0IBDl`=4yes/=˸G}iKH\+ô%0Wz{ ފN1bhyȂÎ"ܾشP,4VIKz|/4şZP2 >-GH 4p/쯷E ` &oG8QOo:V?Lkr<7 W,g=6))'oLuic&'-IH,X6{HcŷcHZ"!HCUW5@J%r,E+F;܊bףw 3ɩ5Nx=Y]!k'$YIbXFɚ[Vٍ7QGWNP c˕'tpB+!"!L]XmQy{亯h4܅~m8& ]+ƹpx!o{y5ZNF7Xq564] ka4UI"pM})"4'!07-)VZ m U(e[(lsw|FUZUOE"ImpDl?x%z/W=&?F&H )麃rbB  v]rl:GjX=m;kKb5M7` WIAdz} >=}`(w>6[ ɭ[gxGyӢf4H"icCqr_%)Ȇ_LzOeM}=׎=蓰4\,.EW+򝇱Cajg9sE/fAnDnPkTtq6Sy`jҲii9M#d9G 6{ujQL kqXl^?7Fm:B6ޝeF]_Zx3A@v7PA3u x<0k n t?b(jE%BO,`)-lD* ~FIRy{pFֹɭpмFi,yszR-k:.| L.c**!~cu216𮾈}f7b(lӋo-ox0<LttM*y)>L r;lƏkO*E|}ʪFa.Imոk -X.Jv bfn5i:=ʔ'Lg1vDU "F-&sϖҤr>}"[5La"N/г8'n̢7獰,U IXKc[5Domz:r n\= '2V~B%5'v@:r$#:SoZŖi|ҽ趠 f$io5p< DAUbQ_}~wjw+Lޕ־ ݽ<'+Wjs>SN:YҼHRTkC)#B \sV3ЍI^V!C8P=:&TO Oӻdܕ~[.K?JC [/xy^ zg #ǣ)+-W~\ߍ(\fU=З5̖ ڼV4 {(0?X<~2A Nڤ",$c p' rnd1?@Ĝ"H3B?G=7f{#ߵЫ㘌68=aJy O^ޏΟ7擕AP _0^0m.v|WffɌ.pZ~dx-:f?rHBFӴ/2mp̃ϋz*;)j_`w߰Rq۞T !Z^R}6zl/KJ1(-'=Lٰf\Jvщ$ 5f 엮ԣqI|Uy@c& 5ӦRh;§z .7)υ (ɑ rBr 4D|mr7`(XB1[睡 ؇)$9kۼGrh/fyKRW+eo&]8oo_@pܑFq7 !fLփr!$2#ZɆg#tR(;KL&Tv|pH-~eؽBX= yW_dlжh/0bݲqwn@@VV\L VPXد vA82.( K%S[PzX::;Ŝ>|_BAU!jZw/y;ץAcm+V*7o߻HdӇfMeY+?Xa242b!s@e%0N/;otrtnΎizSP`1!᭼>r|IB_:p jD`*%$. Bp{K'*,!߅Bo:GkKeQמ`7v  `;Ȅ炽w>ѰaEH܃g~u&)/ǭZSF;[c`}?t[Zz,xkSDzϼq %{ r)OdE+xph]| ).(5&O9j2}@@j- |)]LoY〞\'Ŝͯy HPۜK0Hpmu>3!啃0_ȦaHτԡBaR6IsՌnk7boo6tTq/멕3XG2C)ퟯw(?+vU"dOrB@Eo=PALX'2_7_$BN. %uV!݀ zm5";*/R+b 1s#LA$ej$T`2`v^sm܍܈*&؂c'}g[]xI]~댌+qT3#o[2[%a;UϥY]xdP? Y<'x2<Y0¸&y]@;864,۵ ʋ lwe .ulb1- 3Wu5dǨ 1 cm**'mߚ[yyVļ.bG ׻xUKfH.m!?f@  jد5j'E,GX-l(L1jc璗Oj'i's.lKZ =7V ~tL>]̕t 98_F# Xt,'Eŵ!ׅ3ITg\xIr{L"X1%8I+Ò垛WW>(KS;0 rtE1ʁA6x:/Ab]<Cʛ&vxo "M >1K=asy$dK2hަ8fwI}.-!'%lS ^pW)EY) t=sz\ sh_39{2 u-(p/ᨮc Y.su6. טMSQз C&u7G{Xjڐ$zFf+p%*pݛp'=XnZy}TٛtBٺ1mNU/gߞ2g%q+)SjQ"roZ#7[$CC88dU_/BMb96]v_[V n Sͽ!;Nޯ+j\[QX9P?Up=HbWjfxsCiJt:|8}!sԷ^(ސVjݚl`E [!@KQ'jg~}C{e",ኅrj5"Tsi Ջ 2c~ <*;j FO^!7B %> Pfpn\bܶHU0e6Fx&eA=HDs5.kIݿV&ޢIRD;Xu[ #0NL6$+A?^_},`kL_x3<;[&֞7?I\U^4ŧ茊%S}=c_Jz`GAgNU `u !PfrL  A pz:w"!b Jb>EύGq<*ש_}|aM(Rʺ!"YvGudvx_YM(Q{=Q;KAoVe3FbX]O􍲁|GAtlt!/%Hq WXKEyg A2R"$T"ԏϢYC.兂3@wXd/<:~fB:y1O8Gp6 wv9GiV{ց1r|8݋4'4mRzbz$@ϱLq'bGNô?wW%=W]ǽʠ ZP$埯$L :I6jµUͳI@c Z?G6*|Dzߏ~,qt o|E UtTYLFdzGbZ*AP8*Y)~-vĦXD*An,zH9uցMۅiv*um',!ut&la샢ZGIU7mng d%L9C6ߞXM_YMͲ~' WfS/ɚ7+tXo6qBBVޥ.y/ڋs LB؜|?^Bg_V324rG2p?[)kł5Sc" S6 +*QCCJz46^p8ftJxA3(1,a t躁5svH y߀Kx46\m^Ů<Qś}!|Cل.4nf`=@Y|K/X{dF/CPlثNa0.T#iwvSsȸyI b`@ <ם@E3 ivfElN},O,٣LWM|ާBW8_yvrYZXA0C5L^ K2 z*0 "m{sRi/~XskmJLq,~.xXwP5y9w FK#C('s2Yy!V*v[=܈]蕢l^DT`ZZ:*`-57WJ# D'̸Aj|K(ܬC~L톡LvORɬ}6ll+{pdC핆:yh'BO"^옠y:{F* h_O;KE+sc`#(jS"q7M,\!!F>wMa{zߔ! w\lD>eCg/ILUu|ijUtc: Әe#z= 㚏*Bڮ(w74&tg'آC3}Ԉ hKKn=Jr>%%JŬD5;;DitAESթ-M.WMҚxwB+ yݹC`Q(iUڔ^NȑM~ xlT71Fv#dQ33})yJB趮9Vt;V5Ѫwhr N?,]lIy+RVF#oCx)$zJ d7(ٓmBN^6S,P)֚KSc)}f6nuyZ3{}M 07 R"J3;AqF|~:RA"wҝadvUӊtDUX W"SBDqp4e.cVUt8C5c])γ&?08^cWR+KC\oK;q%Tpr 2G}ȅ/T{AxB7x0= pVe+A៓&ÑȺnR~tRMb|7p6p<ӛC)tjKΖ1djF_J^BHU2MY~`ChyZɯr`WuS+egFJߙAK  1/ |`dǖb7&b\Y_`"d VrM3~BPeDi5dpEρJ^T^ dwxhX'+eHҠ?q&_E&ś"P}Z1|:J B4"t 8m<9#͇S8#G-$̤5jɡBB+mkpY6|wsqAAvx{Zx;US 'aa0ujurQ]Q{,jȳ(X9XU8*"/;#Gt J@;8d=H?HRdѣHɤxEZڕO"}Yܲҍ=uUf<VR%jr.}QkXHPhP$R65L3^ѴdpZg!V<݂Qiߵ8)FvZ %e&L_LQ{. 9ěB{P q7`T'w{v==9w@)H$DJye1=༏DT ]nIzeKȚAc"_ic[t ĽTQ( %^uq;\UM %1^Jԙ>L|\A>2}cErHRĒ62cp1-X Y_$Ӫ ApvJi :*Ru߀Ӈ3n>@WvTv|/Φ(k-M={"S}oV~FІ"-/ \F*bu(_yD:^]8-$(JB t_qdH*׍0빧+KEKI;ggͤ75:I>Ps |LV;/+w9DW|ρZaW GmX9U27S%B*27t'TW1m^d  PkeGd|ym5s|=LYq%y~>(f5,4 ]P::2sj ;眡=l a| r2[2{pcIeGՐZ6K{Zk%HK*vXq(˛gνG/rbJa~65˭۹ Yԥ֣b"c:h2Lֶk|sf|]\^j15\DQwİOEi;2pچ֖o7e5Gh:gQ ܲK1@#cS&UWP;BDAXI Qhzϭt/LQQ+BD7/;GwPR VF W[0 ΂9Ѭ|Q1_E~gi_ᶳ~wٓWFhu˦C~&Jb O wO6ob(XWhk g(Ͳ@#3tDDS xpüjb %R"4C9mD\`Ǿ0q)%ݪdjlWS.\^4wۿ1+bTNŤM=|`JRуTI"M"iG&L?4Bl8M`iSߜf8U)o꩘X-"VF i`h:y!,MA*\%E!{HB!} #Ȭ)!9?a(7V!IBA@'WF6r$k+;"cܙk^M>L]ƑC^Fs(X\(4:ޒ껒&؍Pq~ƒH"rg3֦dF?;23qsLG4E)K'n5Vsjѽm??Ӕݧj@/O"|PgcؚFӲXZ5ٝIzϣ/Ntߩ.%%O㧔u7B_Rx PNc zoɮ[ͷ+)a%]<ʚ8UY@BѝhJCΙCVr,#Lg>H]In"C 3ZKm?J:cEbM7FY.ۚU|Ňl(Z ,՝zTVN ʴJOP" ME_5ɧäBtBC @4 T _Ic5G'tJAm!&. w6 'aIv_kzkMnFGS7\J^yUfR+D ΩCoԥ_Cz8;qްB "eѦ jVB@>{MV(eho~mxB1KyfVkYb J> ,mS0*SX{as[ Y:CQӚTު"Pi#HqXSذZ[oJ`O"EH3hUFWjX IL҃ 8Mt\cc ; ›}Q>9lS| wPAˉo2xC}*D"hdac:f2\`@9܇u/vT3 ~8 x A̵q9).7w*| @.*{ .faq H18 e^;wD#,ssCc `qgG ˅X[Emข Ɩ ST9v[J6uWj9` vDWS:(,*/wo{%IKo_&tD ʜrP&DY@Wt$?ظWK؍3-<O <1ҳ~ cU(-Zr?+bwg/dBI,&9˸j`)89]'T,:cV25VB5c }vX^]e%puc0lҿkРFoZ|+QY( Im&[jxEjaw:4B_ B"kƴŝSI+Yh ~>AZOJ=%Z2 k> &C.V7{vrßvdրN (V$=5}ܚv'.?\跰S&3 p17f#sVi?8 {r,Su4dBsA/NK7Mzmc3遪M: Eljmn hR&acJORB&DejmG;Sxy7& "rwqSjm I{oo|lq( W!B7&T=`Gf`5[ ΝTct1ۉf } _$LċʰK<@AGe4Ò 9Bf]ѕr 4,iL+'^ڱ;!tDF[MBX}jIwsF{DhZ?fľ9|;WB>~M;*2;*-ە\/Mw:2Z5F8Ibo5ĪLehVsk˘x<@I̘i^%0T;1- Wr!YmeX- TwG85P{$-3EF\+%'ܸ;ki\,uk#\ N ^TJe(:k}3|1uתEu'.AE@ Oȳg|q agF5xuN4Tx198ߵZ[ek9dg;p1I5&Q+ɘDIV BX*.Ӯ0`ɩ7 (Rn:&\݌>, LKUg9:W,$m*1#5@-&w9wiןJ'al,Qeq@)<$I .GǁG-Hb'@ڜcuՐ-xix^wvvU~qel_7lEu9d X,--9iM.d›1 _ ͯawvp^naR?E^|:F."O=![h-Z{` PU.뫖U- (FCr`ǬܪL6s!Ts*xRA޻?͉}cT9=VЃ/7#4ֺtQmItWhTu&6x,1|UL k)r{og @aIHud}J2_d2|ԣ1ZnCCC7JB~lWy΁3'[(K++Uc9 3?}1mܽFV'\W+[f"UnBƴ;|^[`%g߅T*#?y:p ГD޿쌲+n4Py=K'z,byҁgl8 ϼv\$6mT ]ZoQϺa9cf4*@-8˞< U*_q-P*e{ëH_!Bi+;%"{d2+6Qz<@DU4ǖe5uϡe gW9/nWN Klw5R#Sʋ?X]'&<.57g|.ijGQ~Nua= 0-0WYBx\Z)A >IhMm+~ieu :\mSE2U"Ȋxŭ%@-`Šq]3]z<?c*W 5 d;A֕oJJPe v'0|X|*  )@Y}i}:DJY{U[:X[ gE= S [j{.0nL&0ČAM/ku݃^` g<i+[tCP4_VXbgP&iŕh2jT;I_J{-c5O|ӄ64[8Y-iUՕ$ЉP@؂ ~q_A!2"Nyαχ/BK9"xhtD#h 4dmJ Y!g jHIA#y0gV`Kzd]hz GozvzE%*W5wBg5lPs;\殐i Do/k@əe&AlIrc/XeEEVse S\}iQєD-H~}y!~ލ+\Oo~PpeǒoBJ Au{w ,)2d6be_F& OØZxDQ2xf+YG 2_脁dDzF_3]Ґuܼ+tyf6!Sx3ǯ=ݲgRd>}uPwNt}88x:--K藛D'V*4J2\(Ĥ 7o?کeTMYBz*3ѣɩD~߻8ɢ{_J6gWZ%yqýA2}a+v%-P[qyT&\F6G$ST"i1%Ws&2  YnTyn2=ʉn%a8.8LUF+^LCq})`*fwj kacO uU wBv%+2׸hjatЅ7 mz J-LG AgHL^GЕ 9j6{5%P/3a {i.":jVV`YJilA,aP. ӂZU+?,no;|8>yGwxq  =%^Nwv/Xy(t8n`v%6 q'^Gǜ&u4|qQq U2*7ZJŊ2$ :PK(bd9MV\m5MZϷHk X>zRD< $bD\)=L-XI|Is0/5`索6=axXY0HDUtA tKo:_CY~ z~p:3r\œ䂝9-OmB|($+Ye']H$1weJ X(I;$0Q1 px@9ڇ)t /VGt'iNm=|[nQg8r9bM1EO dpBMBeG %}rl?l5_߮kM@cS+&=qo6pC#8Th+2u,iggc e? ʁUovy^J'hOwC/~94kI>A|Sǂ>9^Hec:J9ʈ|+iO%== ;l[aL<Qشt4.P`۸:!}}M(;dp ^&VE|y!sآ ^VW' X?İ^F7?bHLgA,q:"~E 94Ж,[922Ͷ/9$^7a0 b(vb wF+u*d(x P'/>쫉W_#)3h]|SC f3vaB% ڪtpr?¨Y^@ՔN쿭veLm =7NRP]zyzǭ* ˅ Z%%ӭ ߩ6%}EsdZn &)dR.)9 4gVAz#u!ޙ2?43 _N`j (:Y3zH_;SaaR|y?{@1E>s*tQ Px.K N"kF0 BcѽεTX$zytJ9G_ԙL3\CpNR48O'%h 3] 0RTzwE\-拹!oNSfH*VO=HHyτGNwL _Wi2 ƙW=x:ֲ(]@XcrPk uD ׊24R!'iߧtS4m"mѕzr(.D7Yxx~O7T9rQ|$ԝEd{pF"}Hd9k4Pop}[W(M䞡`")F~WB6.70&>˼7SKkJъН28͏TuSӎ.jVdlG!}6%S1@ iRy8U4σG9057C~©R^,p-S+sO:Lvgj,cMO]i{SYD^ҘgS O|wbM Cj0DZ 5|OWVlo]/1/dCrՇ̂zUx#% #69С_-'ʳ"ǹOQDo+|g EZEkniS/Dn߆XN73ל9n䜲;--?A0 |낪~$S]c5zկIZrQ/罄` ;X%+4;P8β(fNs$k ?{gWtIw?NrE=EC*xrROU8G kkpRSsÕ`V)nMxcHL􇓣oMWNcibXNSXV:vCm*!]1g$U 8M[Q5*D~{-tiҵvn杀b#ے2WnQc͵N5BYU ǷH/v})~M;nr)-8*kIt" 6RtP7Ymʲ}%q䐆h.ۡ=|"!vg "K;4IbĴ!)mTlSw\u %#3;7tڠ$iMe!:^P15ghڿ2YӀJ*}enI"b:y!u z2̱`d ;-os ]JJ-1ڼyX܍MPL@ .`ξJPO xx{Qšg'STu{ގi]=*)/XV]>U?ysӵ<| rV"ҹxsoY4vE`wN'.شFiFaI³9S/HXR'B\u3E0bw.Y?ٱ0q^  ?. C^t[鴊yΞyC]}tb]GbQ*o&uo~Ž/΂1F럁q;dl5pWxyRɊK<^E ̏:i6:Smdƛmg9K Mh~O)[k |H< N ~J6*iV1ϩKB'0[dO8eEY)H_dɖP_Howb$C;y*7ౄDKl" &t eS+#8K'tG{(VF2dVyٜ)(3%Eo^=y\$OE}OE\*Ɩߠ%=8 ~& ߝśum \e kӵWdqJb =b_$.kd8LɍSjĊ-\f%n_D,)bLF<9Z.9>,vDUO> u; T=LJ#UZ_ iO4X,Z '={ތB7Gv^8)m刧qjعBeF^aّϱ-go#^sՒ}M۷v2< &ls-bDAkTGg_U2,wMP/HuɇFhs)|1o]Tag:ɞ]/ eVHyjQhzַk2|G7#~_06jq8ɉRNp]C}d@(uzvV~ȏofPQ T)`1C۩bHLЪY~ٛ3RF"Ǒ*U^)Vn {e;=s_.\S O9>eң[+ oڡ)ΩS.in ‘BJ~Q7SW=_44uaI{JJE}źJ6+ėϕӜ_(K˿*05ӃK&'*s2C4kGZ JS-yPz yR ڒ24FƋH`w֙YcH1uuQ3Fglǒ^W\݃LVLRL!b\nEsR_6UCܢF6ptk~;#kY[aK[ٹTq쨞Pʫݳ{ TNΡn.h9Jl9 9h[#xȯR }K?W=rv #J1K:3O[$ΚvfdR<UQ3otM=h;BC1jA<m 1Ot4/P^IZjR6Q`, V`:Wzà; RAvBLaU3d_rov5RZa6Vݨ5I郟#OxkŐxEQm?1Q P9y}BRD$/no_y}u2{6CӸ9v93Έru@S-BMO?clOqTƺF&Mfcӹ:yzEprI|d2 ۸=PEY#nrFHK7FIpzcv)ҡ7t+*1tNKqjfO0$wl\ >8q4("݀=/[80?+SЧ yZr֡"eyk1kukWs IQh*-8>1 \蠨uI#=nZ9d1j U٠o}  Q~G/h\^zjy}>C"9(w$+Ʉ9geAB+Im&G*\Jr徰 %Mo2[b'JVU8a/苍H1'1XǗ`lvJ7O%6Kk6P8Bm{J#BIaφ6ϬP)\mǽ"~}(m:hJmgCn xrl8$[Y%*"KEzQL\ ekp!.@ =dH7;<\Ҽ`jGT0$nK؛ /oTӀ# =wZXw z`xw8Ȫ{gHp\x3̏ w=+3/ lTyi4%oAeGmo>#g 8w:&h6HOCّȗHҾ^v,Ukm1)uO?IrnG6F D$eY&!ZA,"åH Na$FUirI ;|\ c>EH:{jW@dʈi:@8AX)EUJ8!|R9)`ATb[cJ'eSU{-󝷧3t'2Gf y.MO\"LlhO-jn0'ĺhgFG6)HģV 6 u粩1g9bQfpksMV ťA?ĪIg/yg{FY'q{pHst3I*g}M6x|&AtV>zdEu_hK,qX^̙CϨQ2ONTT?f[*7SzK4JW&{6rZ}i5cWkگ"W7 `8k%(wӗ+ȱU߷eF1ƒLZ^dk@? ~lj|朶3h(򥐴a[xO/oFs9ɠÞXةd\s"8MH;c-ͨa|)f^h#nO,DޅEZErn+Rˊ ڣؓ#GhD '舾TƮ8%$Wlf=`!M؉k!=R՜%}[`Xi W_WE,: Ϙ^pT% ,3bqiH< :=\3tt=DIčw|n.I5Xu3|?_uCR"xh܊Ca(o=u7νˊSdL29Z l;=V$3oCq]9&5d\KT(xSr7F߼.6mx; ĈH>=1;,ɫ ʱ0,֜mhPA-֐m+hI yQorMh/"rce,_>xsPRz7cyDbjbzPr\%\U6d i-6nleZ%d5B ށǯmT_/DP_Iiیz'0;6kO/uڎ'yPh!+L'Ƙ_7?A({g%wuXZ-g{d)+FkKrs_M]lϒ+YՐ9Kzr)} wGإ8j ''b{Piݯ"`i3ڜ-TIpg?] WG⪤*zECT(ĠIZz )0XT"9IpzDHē2tHLa R&\Mײ862]8<} P=+/D]!JiT,j.õ@"p+>_J(g>2Rudҗ:vC}<&\Rƀ|N* K;))!Dӛ4R‚饊ra-%~FV9*D%+ܩ>7L:6t*Q[3wd%~=hϋhV+>ю`kTF{pp6ҖyLۙn{it7XOpʐATҡx8vuw"⪒.`_DC`Nw˗ %ڥj_i] ϙe`ֵR=9ھE7reW4MI֢M~'*;Lk{D8{if1^ Q_<ת}6hC#^W͛阁>p,Kh=.&fE,KS|paW[VEJ1r4+di r1>\`aCH,y_IفyX,'R+*ɹuOgk/*W6}фMKq(vUQrXb裬qG]]d˅1<ϐYNn[21&E/w@{pRFk NNJM>tx}sr82gWNnY@ÂOP_0QZ" c;|i['Y %ƭm" -ܽJpWOȻC(Іcud"/Na&U&$tOqvf~nuÑ} VN&5uKcV3=k#׼mX:"_4:^\DFsթxUOpx)Wzk~j~zbTs;6\%$سj_(aKXm̵R1;XЕ`ÖWSX$-/%Ks{I)1s>T#ۅ˘5v ?2 X4ًyCj>-.yt`GbO1.yQ(UϗxMYsm96̊ E:=:u NR[ex|~뻴+*J5Go^=z*z ` Ju<,;*p9Rs6D|/AKĻP,I=SF1;:dWa`qLwwJCEb7Tp8M$:2l1`^= l֞δJ(հ(sjl]uVHԱuշ5`|oZ<#%!\Pd ,wC?eRA%{h%n%ie1۲/!=igX uoaj7Z`ɳc|tiKmtn;" Wh#n@Hhv1킎TEZihhUmtH:_3jqs {?WC, 6n@Rqsc/OX& ,T1R?hꜻ,9 nxvIJ%YI!P8.WΞ[)q)t {ݾb@X(^>Q^Y({MY?f$vJp;&x`[.5Į ޫ"u6A|bA{&r+ΰ\$d5z$Pzڊ"bt (\)J.`w /K^5csI;־}Wј5c\5F{{`6>۲D bUs+4JA|&:o拴ˠ8s$2kZn1^]ԏmFS[Iw "7vw g-LB)ש7ѦjˢmDƫCwr_F ԍtg񜦪U4$xk>MwmCJt=z83A[cY"souP ro$eG*8`.21<&ߓi<H8? B0uꄻG2;wk~\TylE|#ܾ)pjݗ, Φ+"Wٟ;9j%g^n,͋N J_*}[86P[1@1 ΰ`:7^-ˎ>n0'`v^$6zu`* ]P-H̡+5(ݴDm$}> tOvpp ũ- D]BVb)}8Jm4hmV>L6 0\0fT!Aj3k+\/BqHt*[6T`7SIh_̗x2Z"Yt#Gn?A @c_igGmKdyo4C-Uʵ. ߶ 2ׁ6 lC4Ez?Ok0 H o A:L[n 6vlޒOAg2Y>[Eom117 jJk%[dIYԺ X2:IJ} 7qU5I BpO42YG3A&6іrPg7'0?D$A5`ioFXk*iɀ8Je҇r(=߄4u=J$NZ˖oGy 󚃖 &ax1+!QΒk=~Jhdp1;iiZa+I˂&84C:%g_a]Jdot<%i` S{ V$d2IHᴭ& LZⰥȩ9^aڀN^k`VuXkI(f+BCh@ㅖL.ĘA0l˽@"]'jd3u޷<@P^CcҵO7cxTjB= hh3ox/\)Ѕ&˅$=TYHy;30f@;]Kt͌X\wZ'e\bIx]/4rּ ѡɲ-:hkƥh, ~Qat.k9Lii}9[cd#At4PT/2=й`)Y-C~'$d0#7;d!LmyWYΕ!R,=|O=i!r8[ :9YTK֘F X,1umf7Q*astZdmrLBHdžJ,7O$r}OG)26䇤"|̅/WhpjB\ 0{&݉:ZΌ)' ҈w ҪM0!N^:aBg)!|MgTų{6ikn>l@R\1gP\NM3ydu.'}koGTRPs"3M(r1p  }xL2`A*V 卤KP1R/hUxt  Y'H{mYf汝4CYLNve&!$.q եbT?vc0|>[K(7j=:p tF[~>o;U {s4n,iEуV'wy'}wĆ`x;bޅ"])HR T6Q}dɽثvߋCsq5q1r*Ҷ`qʃm1zh5ua*7ȮVﵧ$ 8iM̅wt#ͨ[WoKA VGQiwdbr!ю/*ΏCD֖w ?$A7*C3^Oq8@ 03;{5 S(5Y?l|*|Y'CE[F_:YjqUSo8[$r {oLz)=@_D6"1,8آ_Q%p 2Q&7 ?xiz"0jNNP/7jHckg;Qf|Ʌ/LQ_WI#U{ق@EbaBg5Aj͔g$1CGt:"3ƥ4GHY.MB?MzD4aJP['{A;R͈׵^ ߘ:K|SIF,ߐ![myaKt*J j[~3.@3Jt5.ןVE}Xp*l`.n~Y*oa&:< v+֖4IW)l|%p E~w!qAh'S}Cd9EZMmtXKD,{D iJW3<8lKBL&,V}G @mfj~J36advb=ArcOʍ353 4%!f&_|%UT`+JmJw?:6<<,m'US{;>i;WsE*Rh,SPyHֹ+7)~8$gi RͦDnϫeXz#ƒ:N崷-WUaXgW+ߜ{b6Z|a4gHϜiYXW 2)eLPtE2+-[#|Cp.dSLm48`MЊs`1cL6T*Խܬ%OkbU|hK+EUViJtq}'g6*'ɺ;F6l'ACYҝinՍlLѩ֌VKk(@Mӷvm=+l_(Q ̧_?H׋r~Bڌdih1y%@. -IP| |?kY߷4ZJn"y o3;nbUPY̌4ӢTL,>-dd@8ti&l/p ? z" JQC9P¡YtW&`VxMR1 `sdb3EETަ/e>HbPS.`d˕wyuG37*).,P~t\5L"dPiXO^r04_Q[=&r2yg-|y{$NBɰ&#EMew)uRQ;yI v\^ӡ9 [! ]OI _Av}Ouw6htI[ۢKN=,BTn-"g2H>lđQMe{e?oۦJWeSE|*R:mˀ+!x JĖSz̏ Cr)FNuDC̋^Íޏ\6Yj Ngz9գg7^eL'SȀ'g)@ת0RMo{c޳ ZBJϷ럯._l4_Nl\o|&G2v+F8Cbǚ]N xvAU@] Je`龜`xҊP(}h d8,k9Tu!m8nPy<̳jb/l+&qiFZ1٧:Cq5 OmU#_h @ z\g9wDދS3lT)pm,_?S rfYLI\qDPӽ%m`D+Wx?̓:'L5oIGIT N5ނxD) ZG\~IpcQBL]_B%8?,0)%.<4$FG ̍l-)JKp%$n=z8Z*3\2 6JI c&l 2GfbޡoTt5{4B 0 aok.Ѵ :2!7u1y=L;2Q]4;D\LL9>lF=JMasQ$0~UrJ<{~vK-Xgga&eFbKbgAM_{̼Ә/WڏV:jJeMwGusgL(ؓgз% O'jk7j0 ڥn_vCa$t$֗2_YYl0+Y@MTa fuaJSRM~){(4+dK|B ,KY bckGvP;D![D'/^̳ik:vUm,@;ϯY2Z!߻frr+#8jS ቬ.cFu8`:"ys bwec} Jp _ _ U&e@OI~';]3[Cgׇ61 +5O3k>|pod7G,a4\Ni3Pd%q<𓷱_N h32TkwݷsQT D.D**e8:=̛(b<f!E.i$/1N"6ňmcMӚ,oYɽSaQXV^*LYA]{9ڶ˱^qiqs W]@ =fZ5մ|-Du2Ep I ԲvS#L0;=nڅ%B ^$)ݧoHdsBL|glߕQf wk{jϧbuk_W^u}<{υĚXxޡu(kvCz1i.p&L2h01GkY6:!:-K|l:; 54R& yݙu>lTǵgOiT*vgnɁ"Չa} guIV pn@G̈u`F!trs!e@$88jro {g38HҜZ[]Gŀ3'/sC&t19ݧ~٤hƼdlPZB]6Z)H}D3r!_ )$CnxmEr:[x]Ue_"s;[yiȥpWRWc->q !7vUeqE؊ćT\*>U>fJQO ާy r4?נ1]? 3 +LW>݌\x@QlǺp;8_*r]ʮ8$lOפ@Gv[_B腆@c͸~JIe[C \a1 6xh?wU:jpfiqX _,rܫ3r.jj:-_P-:5t¼~%:^.G1 k9kEFwtE_[.1 庡-'ޞLE kh,QZ!JGcѶ2V [EZImdG~-;Mʜ洔_ OD iBt+Ɖ5Wl gҭ)@.;ډ/d:Q~oE#3Hra>* zoslź$a?JV = b40pX;κ϶d YM3_(ppEr ²rX)8fL͢Br#Ef4JDl#,3bg~"{TxZ:,m:`~1$h4 T'&aѤڬM`N^66|ԩ+FLE~P'z0z|sn)fuWȮC8]#! mЭ! ut;*w +?zq$M͵^ 5 $Н-'ۅ5ɒm+O̶=\~g}_.Mw*mran`20"&%T9JT{zW b~lܺyS-AyI]~ѓ녿Ek4#hx } ;3G1TRR7Tjb5z)q4CYyQ,1l,I\N;NL'.} Ô^Dj>!OAڡʿLMiz~m֝ngh"pP$8#!`ŵ `Y~1xbM Fg:)wx֬fO\ggik$pGsZ>0t9'cɒ PeDcH1<qגٲŲ ?ůG]Z ilCڒsNUio$GLeeru}[V+3L!ds*1"X\RrHwE9SJ{`c;@V5((.IT#7*YL6p R1 A!um6,sMN;ȱ3W4w(ߧ/wF`\V! L}]X ѵR%G;a35 ̫e%:)G F4M;iW_hSHkQ vеh`)5D r2JQVE_,x[}þ?E[>$GGVנ3p.W!89:!t!9ZWB݄UR:gY;>'͑[C+'(HX*H8`Ls,ۼ"{ghzȶ^[0}`W4;(5,!!͑]sO|.FDS;wb` *0YVV%|gn~YçMATuÔ"x$g05w6,5b$@_}&[2YO&m;iUc\%tw m !]GMG4di~߻ x[,8d&L#m (AGп .!bwLUv }&O'9μbn3M tnܿ]LIN928́d/Hpb"doO4;E*c! Oעh敂h6xjJ}(tsj[i)B 焳z ֟abA|F6^&F:oG=FA^B~hഝrS*цN; |7[+Mrֲ<%w2P\ @J,9-v2vsfJRZn܍ۗA?m CG-&EyzxZ/~q_ܭ3@31ϏvB_+Ņޠ&#U=aDo{r+NS[M&?co薒MѾΗ_fyV!}0NHiE5!9Lҷ[ץV^QZT/eD |C-4MD<CXH =+[o@߭EXHQ#G4@2UFyԁ?Vp39ueilE^ (I76<>.7 Z!WeOO;dQa*(K1JT,,5KӱC¸iPuRjQg;+7^tɍ3;rC[)e8Âa%w`A@JRgPM=.H雸6RoZQW,rr2)@1^*.2lߖz9H!z'"u:#cϚ+߿ޭtۢw=Z:"0j&FR D 0WbBq HJ +ěG7r ÿAτGKzh)LG{9VnWv"3[nJ)ngc_2:bW sg  FQ6^z'Wg`s \~ӲR).ݏ{2B+U&nTK:@B|a0Hm a9:7&юv:`֐~IR鵥n)%*8fĊ:?aǩݦPdYSCg"|a!l_˶f7B}y^l:,v)j7 Pmيȧyj"o"< 2{V2}LAP[/LC إR+JvxWz :5hbr؆IW^`c1D)=8ԧ RbD,.uU.u^EWO[APL^%U6DaDHаM|oV1%( c^@^( I5TbF_Zw-S iǝt뵆+"Ph^мQX{5wcZMd0X#AGJ._$|M8W=g/ƶeDA_q1iHX+\/UǝJvBnxZ!9DD}}=|yY7AՄG? T"RɒH,a$\!2Qu ' GMM:c/d96"i( cf^8ur?sc`h鱘DJbl,liuW[>_v+k{f. d9QL'̓IςeYua# OH}ubz)j#u)lndDXM*3 !RVߗ}7mvu")+bhfmXA y.PZ!2Y:<8.*چ~7aa[ ~"[82";.Ă;>S7Tܪ2 cQ\?Wz ;Dڟu>Zsz-NWifgYE8`dV›+[(ݙhFqp](8?3H +a\sđb&3Ld re]1ԉEߒv-)ۚ]p%M wxɑVQZc}u K`Z:YT&j~6b Rƹ7p'Ҕlj#g_iUsM̯fo%!/LGڰ3,2]>ejy$l=!W:KHbWrqǗ'9aيh- A5"tВ0hUg:Tc*zgKrjnPKl择gD]r;w9.ImoȎIpG3T_x{ȗ, q5ܴ+''JG+~g}{=P u]p/Yb/1}ThLC_g<RQ 3l P4٦ 4azE&B 5F<2GHjs)]Q:P{R :Cx0 6՝{cUb#0u8Daxcw\O/xyJS*\Uoy཮ZxPĈ/U; jieˁ6,; 2wa14ݦմyžM+G&S3[LwV<#=dĠRrͬ*i'GWmkHEeEňnIyhFйwP g@=I=3ST0}JsTcʔ½I0z_6'-P> K¡(Ḙ̄X/L^ʟ0qm%T߼iI$ΛXh daZ,A~0N kg nMLB7Q5KI-rǐ0HJԘ*&dWċW9(Ih7rTm}4>? !5K?V؊u!_t/g>rBQESKS8l`(3TY$m\olQ=y )-+c57j>BXn}\>N(+IQ*h.J+JFp ;Шi:T́CϒW\n$p T€m-ԕyUmъI<&ܠ l,?xXF\:iS+эVN~R4x@qyf+ =ޱ8h>ZE5pY\-~TqAZ":jۛ;8xwi75WI!O5.38y *bnir3|;?{zPL\(Ftf tI֬.޾v@m,6:e]}csH;U^Ȗt\gD>wIc B$(Ս&AeCo߭oyhPoU5 NKTAwDٱ5k u,oRU~?jkwǎ5ӹ>!:b+m̚-Ps`ѧdY= 9fc]/ ZrceB~1!"U,3_NgPllA?L)lIV*R"˾Sϲܝ!!V꟮Xrġ≔9&0cdy0n> 0 Q46tn7tL@x;nJPb ӰN!pP9Yuu!4w4 01Pr:g5uM};#*!AZ2q$v?M Rg8cmIR9 $ Ƕ ( wm5z$ XW_7y.CݞBfVd$_QVXΡZ@kUIP &&eOD).̊S`|{O-])7R'NjՋ(e{P0EJϏ5:b6PÖیF9 v6-E|=qMFS(V]W~^Ɍ = 7Ns*e@PV7+OE\t~E>1lzJq'QK ;?鱶\<]ɀn3,C6iw`.]Λ4F@jtr]c)Iu/W'o_7j3k1eC[zs%]扌hK;P`)F5˗5~0n6%57~İA' Vzį_,6i>DA1ςLp>ǝ-N0 us={Z8- +1ZF^?N^>/IQBU4zZ֠!Nۻfa | 'ÈvnǬ4Vˇ1,-|}%loofeyq`z\ `'ꀆ sCoMgu^EEIVLD`Wt'[<۪xH_z6ȇ{Q|#jT W pa_hEhϋ^Wd-7uھnRu"wC&"?ȟҌ'^.qmeda'?4I6(ueE$y\tI+O%9 Y_\_V0n- <{3\F/",`#[kE%kSTH\Ls9I)^=۳C=,LȨ35C^`(5}Ϳ{ fʘڰ`zhVjKpC`M8AoMKS[V\ց8ٚUũ1R?9u5oD/O8WB^E0-2!&)@OO3,ɴ3Sy}^ iс٠ݽd|JSb"v1/rzlozg</4G+:-O:! bu-jQOCvlw3l|RO]Rm]\V#J:1,SLnͷI&4"aPXLer5:q@iZ; <d ~EPdO|.8LIe ~ 8?}{qNZua]#FF\CbvR{ CV4y(ۻYM]@)>c«ZkIF)0;ϰp5G΢zid;=a[B$}!?PO7bodLܘmte`(w=)~E7 жp0#}z=PH(-RXJ^% ԯQMLkPX dZ/1 ( tr$R>v1`$""Q5k yi1$dI<XG|OU5Sg=ޱVﷺ,w؈fr2(+ #r[Wb@_"X8gD `p0G^2?n K G2*P_eHDv9q^@P>혵SYX3`N#Jڱ7غ+I_M'b2 #\ W[3'^buﰰ69(S K6z?٥5|_`3P1d|QoTwVK¨&|mKѤ9wk%'/C=5,Y"/Ok}yPeA~veY ;6&G:ُ0ꉫxU>{V7aaBB$ 9V Q0j(44R #rU9*T 0Lc,I S-5vcux?=wOݓ;ƍ{6BmMӂ^P#_1Bք,$z)3Ar eq"qo $@(> 8~ӪvQl2#W:iQU2@NZXD[a)AqA;9)шϹY/U|^e%o7c+\-!B]t>G6.4QE(/q ׆f=~% 2\ %`IOGTHk<-J 6jTs 51?k*W7Z6-P1>=h&JoG=7xF³.`'|ۄk9B 몽,Zjw_!*ZWSe򷆹![kf sTʷϱ ͵vtR΢U"A&etHbaCZ.╥{榶.qoxI2̈͟b ȧw&`{E8xЏB !v~hTe ,֭&[ϴEVY~A4䟻jk􎭲$p[,yDVZh)n6lUAyC?Lc#o b5h܅Oa=/fn:F(vaG=}'j0E ڂr?h->rf}Ջ*; *zگS4. Iv#$t,Wq-\a9ed PW*&cKn{=.B( sc Va([́ޙr4ԯz:mX?lV *[!!Ca}e8!1zʫ_ah#\24U:W[b0ưMe63]ŲfU+9l-=Pm]2}͓Ձ X9;0 -qs/n`?D.pܙl|Xƃ8s߈/ 4 G:.]ъ(?7GgwR-)Uþ 3Bٞ4P:"q!~sCzu[Z됿L(R  4hH9,m(KRtTQiBXr |/6EJc;f֛w#sK RX&R׺n:8Ѯ)f[Ho?3ZXj7۲gCP0ӸD2nP^ ȳc9z>sZdBO$i ծ]Y$9`콒n`\\W6qcﺵ!C)[ڸ!ӬHDi ϔ +w]6.t.7иX:>I'ԴކlsJ <;7W);aѸl{\QЖ'Th$,c极gVOCi^tPqgofbؑvua8iO2>M| ,&JK@FLz9h @|%Xǭ~{L?'9SWʳI0D"s 5~tsAMj>hMb(_pXzy'mt8)Qq"* Vme)%_T V){ay>Ȩ$aKg\!z6c|YIFl ;Sɼ-m!Ge߻ ze:Ȝ#SUL\|heP2kEfd/VhĚN_cg"8D|qU('?cMón1w\ J3(me?[J-7x律v[)u)U}+;LINghϯ75(s%Pu67tv1Oi0 r(o,nfJGSm][G>S.zAFqzo{'T@>-iȖZFwr/٧FTFipaDV*j.kΒf0cܔm Ĕ*p󽿟ʪH('dCd3Hɘy+5D$KdRx |XL8o+x^8WFa?1u[+s| ?PSTRΏPD*=U@)|8:-~ I 2E!Mmh<5 Tn(HdFHi/N Nl있P:k7]{cϮJbӨ\+%{aZ1eO+\2^V0 ǫ#f.(yo~ya#cqO^(Hbw'-Pԋ5N~XJ۰ɑ o@SXmXn.kk}دZUtE9l%>-ZweC5SS}@G[}<'ڶe7ҸJa4Ͼ^<h-JtCMn0 Xb2˨ܝ7b6b,us`0u5K<2!"T(rOݓYΑϫʣm^کr~#%aatژQeE|ϨG[b= X`5H./SN-PZbCq:ljXĻ>-g# My7bT>&mK)UݢB%v pq7j+~نJmHjo$aUBxJ݋z^S:p#.u*Gs 䔉{֜ТXߡ4mh-==}^yXBX~GJ edOl}^ۜ+H)xXwP/^^p|(*\,6kjR5=Lƺ% ݽhZrAǕJgӇQfn.4ypTUj_Un~7@y!EET8[~"-ڬ`|/'F]gJhgǶmTPDIBH⑦}5žuwg$ g*Y Q 9&;]sBKyEaK .^~'I`b8olp>fvvha@N9`dRTAc^҉cˬg^k4􁀈\3˿zgbw]<@$&3 o}ފXn $-T4i6*>#{Ծ!bCGp18SmԌBT-f 6àXM֍\487j3I8k*oy'' m"VܜSf,b9>*Oҙ`L):x7ux֝l?ed\ݤM5 bPzQ+e4|;( `/Jdxj@ڃмL@M?r*Dȃ"Zcuք-MH'P1-[Jx%lbKu덝 9ΦD_,.5@}͝h ucƓv~< joV웖eΓD'*+.C%}= t6w0?qq4b.ҝoEC4/43 ?o,0 *T+ϤQ𯝋e^m,o6!]ԪToӇƒ0SGa)̠SIF_1?k/`gN s̷yD.IDy(i G޸CF+zЫ=Ґs'wQ ޗj//=9{RE ^&] +3ИId^Ioށ\9y]gqQBդ>(JqUy_hg!S~b9Mߟ,WX_c"ɜIV)!"Lt\Ǟ~֐$o幄 aMq#7ɼUN]?zen$5:8x{?bU B]P.,pu 6P%8 p}HhNl@\[ MmΊǭ䘞А{#,&Rf[6S^NR--v`j~k$`߹lw-Ja\&ͼg֎iyHڡ ̆Aeej]#ToYv<-J-_ڊ1#Pxv[M9+oa|IJ0Ur!-Fe3ѣM*{ASL}%8w4Jvv"ׯje|;+ټj/w6 BqxP%<4w\.74|/oݵĂ\ՍO:,  JіÛ6&(U9OP%jkw]b+PLBMRl@Ƞ!ZZ0~ CN;3ݡw 3C|c;㪕|anY֚Ipf#G7k5Jc7JăyXOc,Wmzs'B:AbYHBKζEDJJNR <RC"5}n֑!qK좥jf&e>b]̲#ԏRyfF{67ڮݔR/] IYcďedžsdK پQŷ 2(Kyhjϓliy@=h?SUx""(adKhf+"4ΘvlF os֡.!RB+s).R\9ÐV1L] ~!nTC)ar+-U\{`%e qXR@F6bWqؚN t`E irrt='Ns!bE9Bښƈ۳v[lx:\W}O׻azv* FT͠yMk6".Cƛ"$١l5%M릵d MLPps~EK9Y5{X>G3*pqvW- .r H*kk,cבz+J|@ldvpe9o3*=0*=yȕ(S#4|WrV&Wuƽ?R?pڠ$_Zl٣C޾=!GzRyB}7cahS(,ݕRE&]2|QX1s?&0NQhO #"<31_,%EF7y$;(i䜈gg0_Ko5g]\D ggo9[uvH #ak6<ܮgKL\Z}sT&Ny?]#-;0}2_6]x ?W*} tp79TolmZrl JFCЕ8>@aO(ע{z%x<d^䙨ʊ-s7wsbtܝPCorh3wE(9W>.Qᝦ3)ec e~iߪ:vHIrƚ,O\t F^)=tJ+gU_- Qz>@Ɩ Uer6 )LՄ1 Di#0#xU[7.=c+9Y3 U2܀׾YDK9a7Խ _*Yc#mO;VnGZEIZj*4֊t="uC{_{[3:BXnvfcyCL$+8F[./ "! ڣg= h6XʯWUسCنVOn=/`$EU^=1=VRGULjBs?<0?h->ϐkQY㍧C#9! %U6uד>grF~{`MO*SANTpV!tiaQP`/ qd4؟`L_XEE#b!+6OʓLd{а. <K E +/*y_RliDOd5 V$k[pKk-^X.:*_::Bv"> o4YKsS{т<<]%6ni~Q,5i&fMp}QOKZe?멡4EP̃HrCZs"/ծx)I31]OtMe@iۀ&xmD?o9ebRФsie[Ǜ~}OPog=.=7F<! ߒ ˜|4i)/jC"GXx%W2խT[: Tfubl %N8dպ;kzL%ƒ,ޖ zDCQyա6O]|l٭aȟi#_aSwF3,6Q ݭ_[sׁ"nw+hZoC|F|# .LT3In?0:D>qvoˆ9h=v8M8i $񟺊[0:>O-vߺB4Hv>@ДٌRWfSXN5p/t3}bce:ܖIWpc[4*Um?ZqG0Z}6mT:kGsTtXuOWBE-kKQE}$p魙oQXLq([VXjst+GB!{˫QAvTR8f5,rH+6ɷ@6 Wh>(>(WIj<ϻy!%2JnŻk*I?K />0tP11㟖n=&vt_. JLI?P]%M|~23`T#4͝ii>]mNg~pێDF}l~Ėvm8E745Wa?E&Bߚ4M[:o+UE4W3%54ԓ[8Jw0pYV94WF-`.@FU Sr27)+ ,Q?fL{dMX|'&V ]G yǏ~)`뽱S tQyqוHq 3[,|g)4Wf~ ~6g&Di6XHzjgs3OnyN ݋}oE*׻b\a`yy=DgǪ}129IZXa6W4?#܂Ji?&_F# WDdJe+ʢHO*|JQ~Q{t90ËzyP9Zu1 ǛJ:iXUa%2IY-i5z|msV6OyM("qB޹peT-dOg7\ }'"нD+l"f~?3΢D+؇Q[ Aai_j\ٚ76Mjp !Vb`}]C|"JrAO>i}Nɀ;̟ |*r9! 8~_U..Jt0_Ag \_ǁ]þŲpK'tV`?boKE{_ڑ)-4eIme Qj.ճG˺8^d :X dWJv3R^k7>nv >DmWhΌn/Ǒ$9\3yAEjIoمV{apnĒX|;JcJF+ .pJ zqW:M,FT/`GbDV`F> .D'ʥ{h š cرEY<Jcw X0j9\BP,vlzr?J̤:ۀ/"V<|{?RAj~%GH6e;E\ V񱗓jVsZ/]T|^r|kٯB ;7e0aqh^v {yBs0OWe.@er$`\1(;0O(,Yض#HUD,sշI1.@!ܛx H۪eFӪr("dd7HV&HyBeR9 vYuȲJAN)T|x_V9ƨUX".t@[\LB).1\Xb{偎 xT0EE))GUD \DAidLk$"= H~5;D65n[e&g=%؊s4*i- lI04V!,L0r8+?xUv'Av):95>Jeb"zE8,X+W],(^^ڐPɱgfש[UX:gp8|1í8fÕrDxZmNj\sO&T|DAYgխG]Z[+9ajh\,QxY't]'=CcC;.JOJM)w ~\ŝ;;G?(huňr$)UPOk[u2@L\ilG<):8zJꨎ I 64?[WT1>qxpGr!zAFo2(@Ơ7X 9WWck490K謩}/,q26Tj=&_-fħbIN *1p9ҭBRcL:kzEs?p}e:L Q﫲[{fhbIdW@VCKdv*'Jڗ^wrozKR(ᯗ|BjsӁ?%#A6a\!uUYSt$lXtj!:nCy~Rk5)  t ]Εx$s;cyO\U$X`1Y(CDOz*nvrFyu^zZAP?.u/VvyRX#Z(r*cs/?&BPgAP,5'" hDk"_&$7 /̰#/@&EDܱ6XB*lڨ:E$V_?Q6()-)җsK"l\Zf/(uJbf@3V 6Myf fH zk5 Ks_F;wZvo 0 R uE˱r:V)`rN%œi~VPk2Hw?6l⃦e'rC|2 G N q c!ǂ!\hh++߫$#;MͤWPr FtF8 JE]XNcN|3tauW; Xs9DEnG`"}Rhˢ \&߯>970*Ź4tXG\U9ņ{ gB:^]PO3򡕙A۹~Y 9%I„ #5`{+Z$ GiقC kJ;Wkee {KhhRCl%L?Ԥg JãjR"nl }~1Yܘo}pEz \{gf0 AI׵xo)5H2ՈO#˧DEݻ1lT E{~'p.$-kMJO:`_M4d {4򯶢i$<|cn AaҸh.J ؔ!* ?W0Z9B&{6'Xc{j2x0˨j ߦ .\ZdNjC17|Z98/?}aY<T  S^-f/ $fU&QxOĴc{Cova' E;_I,|aj y=с֯X:$y&_My\ S.^T|Y-IO4j,aG>h@"7 Ar8f5O#r)DFۼ x7A~ rrb#[&G 9u KvyX`Mܼv Îu:_VŀAEb;Θ鑉„!h蒆p&6Aɲ32ؑ:n5) -[+]&Tx{ g7"=V<; 4ZcmȠ ]e(b{"A8E >veAce Af\~SIsR?>r+CSҘ+{yD%FPkɚɷ_48?lJ=B 3﨑YP%Cldt ^29mW^5 {z'yy:.ИAbM{ts-™\6<<0Z"h˭W%e'6J@=䱛0Y9 J3,7~2@#}Β$"T#Jubw`.c;OհdLxFҍՏ0At.ƃOyG)2Ž_qoۥ= %=XGq5b9JL`l.eX2쎙hU tƕ~>7K IJk]oX~E Qق /0oc'P {3> P0m>vc6bQUBNvlvῐ\sgy eLїvP0U6V9NsTcR] _#X[ Xڷ#CB!; ?8BX \sBIԳ9a.ό׺4_z.?ӀGmp {m"|w2K gV6ϸaQڡf%(8!vIG}OU[VVh8r!G9m k W%'8Qn}u:qfr9/i vc)\?**ʮr,~7dO%zr87HDX-lsYh &Q-5y88 U=1-TK}<ʋ& `9\:]sBY[*VLz)J5,gHhJ1K'(g4KFy ŭ [w,k#ҧ̓ nLW͋9لUuٕ, }R{JE5ttgn0C:\E O}^Q6v_ "}dM}9$b>\$`jwt3`b͉{ˠ u$h6>Cl#E gMyaH&#k/,X?_Nb!'%`4V5 5_>li@qXbZƻ'МWy02~t+;qf/yTŖ ӫ0ݣo*2#e*b;$wk t]U-$x~]i51a@Fnl)e@:;Ѿvb!,_tw>l6m?Iނ|rJ C@㻒&o7dC Rl#+P?gtWx4nٞ<95l^ʦlXʑ L:I^hi+vV"DN.J Ӷ_($3ܳ$f  Kp:@Np4Y YBBIEv]u:t6OB#[ɼbb(i4aFAv3qDY;nz2R̩?l gCe+, :X )q$>"-6QԺ+gyH] GU't{!ކJ\)Z˜: ,8'œS=#(JuJBqjEPl׺7* tLN> ׎*rWҩ1H)wK/#CʶJڧָ,i]'6J<̊nHȻ>K)̍u:>+;짫U5Q;+/a,y+x+xdլ_`f?Pxd{/pi7f^H,??.}9N퍂 /0E_F֩XX+7a-ǘwi F["<W̪#f 7:omX@FLKs|o}nqe1 -" b 4Ԥ~SԹ|`3JB Y#q_S~x ^žMLҪMJ0Y Ρ 7F̥Ǩ(؂&M<jEܝF=sI@2"؎^lJ4`_obu.oM*:cXS> *0F7[:=埓T;xNFPbXp ~( MVH:Z3/\_SU.?'!y#m#q5zwlwM{;-ܪOaEʕR P!H%G^'_1ȲN{͡K=xU> ɘiӻȝ2A7'$һ<mHK2iY ,Y/zxќb؜_Pv+pK@WtRCn{=Mo>>(6;U_5GڋѦ e 5ӵX8o=+iţ(ef5Q!C[[pN/_l9!)2% .ϝGɋ{TNϫ G:u^R-[Gz! %J$l)d`)TK;uSwBqP$ie;&sȰ4-W:,x=hY9\.Mw_6"d2Xnun#4ھou)7%^zЭx"^so6S#|rGs6mlдFy8e85񯀡1I,Ǒc.AõVsvfC|h͵PtF=8f"aӕ*O x<[])]/l?W{ф#`/I Q'(A*'V:&EZ`#4ɣU'{#z%;<-rd+K0_հ{$6J{ߙ(K5S`.8ˑʱŚ7thLମbkgͯ%I-s NV^purY 9G3u9^t0Mzh|H]jN"m~- yToyA'mV\0|?Wb~lJӸ)ϽF%ҨwH$w&J/F3!Jp)ЩZEXuenUW~BD%ӞXFR׵hpRO;ѕ+ :E68&6p4l//JjߔDξ,lݚ+&~NN$tPav'6. fLVS35.raŖB<fxtmE?I<}2%kGm{Jă Tf׀0~^8k[4bLءp6*{-vŦY=jZ&`|+F O$Fwм@|QÍ[`JhPL:Tkw]5n]ĥ w۫s[E0 N%yxu`L•H#֧|ZTUr Ts0PC[8ȩ#`Eu tlt7!ݏ@5$6d>?V'_f-fT#A/^Q궑LT5/t&bi1(u@\9Ih b8-_tZ %6k{ [[UP~[w:D5C2O u&XIFU *=KZiϣ^.YY2Z PI/ff3#>hcL7 B8O ey{*}JlHg"Dq5߂W rtaGwQXkLPMAh1PpbE,aԲyqA9" ˣCrt1kE)xG8rsՆV1Gi:/Km9׮°hpl*Xoơa52d :u&ݯ#t1LХjoԜrKxAބVN#ƌJ#w\",istx&q:db~G բoh!ݙSCVw#85ܼ[GvDwIdsjBXB2˖Р+,-p sQ*Hf^ ΩO+ˮgJB2v򵌾,:K̐ӕw8nze|Kٖ%pVA]Hia6!`߾U2d> 6C8 vS%#*Iy ? WЪDB\[" A9$$8  ݔ!Lľ`PUGmɇ, 2U3*e*vyb F|ta8eKF.}I"ڊVCmks(,Ґ ]T>PY4?$0L)W=:MIk+}oQs/j 5al@+xyg6Mxhmɋ8P >Z-m  Qk;jh ^}/!|۹51 x"U\W1cT>]A(_IM+W&Jt铉qf:NV;$[@Ip!gʀR9ˏWiTb569~Vr?{o ^D&S3$tAgى p" we#sV>|JLpC**j4׳//$;\k)2Q^&aڜf*t}ozTM aJT!~A/[ߋi$hie1+WUO{ o/[m{׊(gζ\Ru)m.ᠠ^LM"R`pH׃E,-UsbpM-nkAF-ps&.cxTY桠 ,A=w 3A?b/y:sƗg/?!TO9I8L{۳Oꋨ"]wj;6MP*\3Mg&eTpbt:t8B9+bDb!M4ؚ:rU__^rIN>~І-Ěj{LKHv&糆aXoNZCQI,.s\MJ'a#3W xy^A"(7a/JbJT"{M3 B>}ڽfv ۉ/jNPnY^Nx#'BCIXowGm7@AL5elaX ]y6j1xђ>ο SW!1aoOzb Ri6V4~iXmWRA|"-Q]` >y QGDǧ@^{D6YaeѦc8;) ='f- dwtd{o"Eb]7kqNkJzzQo zvA%XC>7ys1mCLԤ*5T4!)ߡ|툪`KdH7Q0O+/yNAC7)3?8g%9.<8~%zaSA9]Ezև.Bpe*EN)艁ZC [+DĈl*Bew5?'4oT}H.9bcφ&-[ֺk|yq*N">Ͼ՘0ma _AޙDA]Rqov YD°W&1}gƘ (5hEV KF+h̡TYT]ʿpuN]P0ϻœȫkBW?Ji9Ɲ?>"SmPF\hJu3DM *ёo)nT6`1LS+-m:#fba(b>.sV)UY Bƣ5ǰ7Ε!' ^b׍ڝbHzhԜP drZ7yxmao.Wח J}U(8F_%\Q%cLzDkag?˻-X`e9Al42n_=-Hr6-ǎgE :JfA;.\@*pj;nLA8R׊-/@H0k!Q2 2ybTCKvyK}e"EN _= )v/{>A*Vlb+y3GPe'ݲaNC5>3{6RMa?a' <qg;$YOv7ϣ6gvф8&`}'"ߦC[[MqU-_2Nu. y0-8}m^-u~;ZڠJ~{zKe` NcGpSb ;^|k?_KY\NHOgfj'_!0MYM[ZN| vn1ZL+OoIRqpb9S 1Ncm pZ,SgKoF3M4q䭎>MI^󧮔%~P!˫i[)TysS8? +ANiFB*론L;_.@d"G!'S 2-hoxc:4If͡Unϓw;r hAC/P=)&O p,hҋgs.BlrNq#:F3XLs0#0fҗ@mDHL%s!d`&15~6'kH "J)7 Co9PK(73SddFLʗ' 6U)l aE20dXiuZze!V`-ya*)H#ݜxXt߷Ufs b3.1ac%XM)碠*i_WC`VK;T[t-xRZ+j<<kIJ3Xͳ{o;N@ƨO"]]_e%Xdݤ,%Ǣp[5F}do<8ۑtv YoŵBн% dHU%n! \^U~<+'`MHr#)#tJQ5uU481#i!\ h-s:Iϝ"I>sIuԢAJV6%o PW+o$opҀ_Z1@obt ;+%ҕvE={3P!7@! :\@%/tFGǓR7{k <©96)fuR*"#zogpWz:c'0r@ ޢS'jQ0',“'Y`n/F{x4t݈eƒ_9*vhG c(ZI{'ݠvErgZ{)P.^֚s(vYBQ$TaCaV+23 !` | PBKJ%#Q4qu6O@oF@xu糲7\ݠqU&:#I>' vn1&/RCOF)GBSNam5͊ЇF I|E FR/,7!lʛ8t_?ʲEWȴ%jSWkHcxVd^& q&|[R;xyj0䑕hXC,N#;4 SaؒoP:GGA tPhOv+l%,ߧ$KDZ{8甍HE)OAkRWHoR7h8V"} +^+GPܪxS^1q^Cr+;jm@jB770Ɓrm}BX~~U;>)dBi1΃cRn0%X*obJP }^Si:-IߏB$( Mv8,%@ׯ6sG mc@\H1j >:Eq6CyWquJ=T-ѸP,׏qaWDŽ fEmhʄr(ۅŕ3>6=)yNbʅ@帠Y9|(0EZG9qІT0PFUua6*}T 5] ~xKIhR4+ zIy@uIcIʲL "Ti7Rx9Ѓ ~Hz5{±Yӌҋ'K&S0o|UIC2i!|t~ͪV1VyR* ZSu\Ox1[2NSn(g?MRD=2aV*θ,^Vlx8ӔNi.SQj쓷_jlprr=mC}JZmiGcPߌcg{O5~+'Gf&Ӽݳ45 d&HiKz\c L0i}|m]v78=v<}d WW.Qa9C/m|=Tɘc51e|oړrH"? }4ewJ!ɌP}TV!2+,S(Y/rgۣb %C DžK{i-̲Û)ͦfB^M veGE^k/QڥS"iB.hAęR*s[-F ;. 2A2" BjyrkL!3OBE,ϜC9 9^.))SqD>b6L _o[yqhW̤M-žhobwiw? "VHS}Yʧ,a<[ʋH!ʞ8ck^Sۚ,!Ǽb(Y?$%9j_PӭK~yG\si{1fIe)ZB$sNq6 ӅD)v9M+_WE 3cpG ZI^t3S;+~idJ8~M9В?J*YD}>=+<91bj0#;!1CcuZ5۱MۗOBuw yZX2G։ŃBZy8B!ߗbIw9!(V1w+脀oeZ+ r2yjmXG;s¯6!|7vr]e qJ*~xbl }I5!m;]GjoXkcb$Gzt~3MmW `ᄫ8/Y^PkrqkmybÍy}0|  I!ԗWe}밳ze4 2Ce ʦgMC oi#6TX TG2e ,bqNhOɘhgܠ "t>WQ4M*^4l >l \2)%ѪMwZn0FkF?LVH0<q gvPzU~sSᱏ? XMΌxUg܅ŏA}c1E }.XlOF\f#1pd_I K[1/r8G| ?t;Y/S d'^NsP|Ll+v),Y88 yz@k C4hJiX0?Et~H,XT.ZlEX,\!}*0MU? >-yX,[`mB &"ba? >v+ZUĥ(*bblƀTC +7o5Ӕ!:bDHv oeÐӷ5A$y j5%N0yY5H,7}y`ѕ S|[k{`\&Ʌݞ`Zk"Lo.CN6(PDIp߱%W8MvS Ky%|_iTψK<E>P QBcAcxm8 O/ [Ғr\hUda=Y-$%ΧJQلhp̆=ٺ*$rz-\HVFGk A;dR }_+LN$޺E!w4|-se-o>SqR^UyPBe&,6= B3q2|u-H1bmNN]`y.V?a9!y6C(T 4_"i8n)}ӚdkLs."ڌc?+7gX֬H<ω{QJu/Y2ys+82( [,E;]k}, *)FZ3_ 08i_֦]͊RkV@WBGf8RԢ+q*cNJSaƾh3ߓ6Yb'un?Z` mߍJSOϊtS:~"lfW3j?*q{YpFQA낱!`1 qP?ʨ8]BOkIiyvՁ yFCA8+$&O~7 UW˞&)3p}.e6j9DeD2Q?EmwFpt?S݋>7\fs2k+k!YJbstյX|V<(y?K hOXz7 t,0SI|FNki 6kSa,]~Rr/􉭓.s2Y%.ɉ}vG7Eh]&쐽ߕYkOB{װcAsce?&u/EN'_˒0+zKh1kMW4<LCu n 2 ۽*T߇ev%I._s`kz%Bg1m7|5j$k+tx118@r{$TI'>NBZrTWgwcov@)mU129sT.Kc ryvHeKf%^39=La7.5EVsZ~JJ6NpԵiڤ/68?h=qس#"+UJ=}!rW!)Oԯ>ciT8 65U5"`C{=Na4viz<1;f|*~g#Tܫ⁼? : 8{ڙ ^gzF<p)#\WNl7Ɨ,PQ+{^9dB[])UPK+in5xO>?og,=žnM4)\Չ LoX0"=YLaqcYPH`N@Cϳ^#wnabkEf'Z(*5fX>RYhT ?QU>vL>zIJ (׀ZxE<6 EhexH Db?\`oG9m̼(@(N &y1!C I',ȑPΊilc<ÕW&2c]f(dDSruJ&HqR[gUj?5mdz(GH]A'hZS6J$ ]"-jnKٖEt\xasB+ҒV-p =c3a9ÎM0M{z0{V󈕣dNA,⚶jZy+k,;8w;džn:ށٛ7v}]v=%<\+i&W[ub) :m5 N4_@gaɊ-{o1x>@TC}o@6vߖX&B%KK+N^l+miC@UzxF\,KS-ѬYr[`C;mS21J חU_ wo9+LO&V1H}):-t5=|+XAOJҔ]O ߏ)Ga5zŤaxy7pg슠yy1e"z =ͧnc/\xPQ˅ߔԩ6618Ti?ǃ5 %F2%hiZ"@8+o%$uU6LSm1l5k S,?8[6)*UT+Xq@hCc} zoNO9voJ[;o"/-B9޴_iXb!3*fCYuµqR5`{m3r iI Uoԅ;םMtw(j[іtK.Ռy; ]Jډd98w v9/؏b"*u#ٯj{V(p6ZQT]KuI{9]_A!v6] 5rr@RILI뮡ʖ0D;x҃aHxQ4@?kpfC{̍Z9K(EX45Raɳ)M#LqǾ䱕/AEK 6|7ϙt2/60%ͤ!_>-Sͣӧ=eй>T"mKIhMzm73^@;, @ddXg_3& 6/w)_Gi WUM@ dD{K) a%%.5>%m$J4I)jA!Q Ꝩ:6ca7sC_|{Fgs>{=ܑhT3*ކK2ž޾ 6NGQza.֠,i{J;SVv&=In]icM$ג6LAiM8+GMH?u;kո_D v D-c%2ʕG[JAKbmYh2XbL9=.֖!Y_[Y-͖ϐ4`6n8e _g#5@TA9bA9]1<yܙ`>ڳMf&ox-+ʵAr+ъ4W{c>\ӷhB%)rU碶KWu6v#cnY\*6dxny藝nRX޷ rfv\HJ `aJY?>(#D٘wG\9 i9hMEők>nY>xf>}َCocdÇ5{˝4o3fVk2ac:3[7$9 yAtqZ75#!]eCO~O-Aru5 RdM-%[H;WE'5ߪ '$QAF*V:6Iy%@*zQ CB!,[˅r,\ڭK;)Oߑۃ oAi8Zk0b(cF<[pU3-2@L*C %*Wmӯm"6HS ]q-H{tBOe}HPPkdM-4lJenbi;Be:m75G :i@sdg9@.Z_zDy|Dr×ίo9[c#1Tӑ :~>xVа?(C$a 7cɇ0!LJ1L0X> AC)B (P`M8s|B. HoW<ʇEZ@7, F5@g_>oAAdu-O/ME#2d2Y,dx1ޝ)q$$J {T¢2v h%Z2ͅ,%&1NZp6e3HYIwՖ4,w = [j ?aR9a4XpD25E^IU:Ko.0ܮٟbUl`=;#,cM߇5Ц'gC#h̙Wg$W?Fp*lPoJ8&|u\l=R~mk}+ȊJɪ.R5&pL|Y@)gT>iN+RSQ7ؼyb>8Z{E'(+VEu:_ ([}6"JI1ʅŕ'RE! G#Cm€27(d  KOj왻yc ܢ fz3;KǐiE SxwUO<3m+n2_x3jtdg-]<)ȰwU*@!w-:Bv "qW^q”Φ(/e=21n1q߸W.D?Ǝ=xyq"#elɈ KP&-Nc`o.ɟFDkLhY3꓾$ &FY^/,\')v"zzL&pW/Vh|?JȴULjJy+^G)^}ՉD|&Gm[(wZZtKf/xR5QW aw. 9W=fbjFMDvr\\b(&92V#T?}a;~@rbcwz i}]Y^IV4 Zd,S,z%R&gM&[7Vr3)otuքXemVpEl0L(&*GX~U*&3c +<&tikG)?VMS~a@\L쵚o$*m9+-0ͮw,smdru;5lknD=l= HNl]:̞5:Sm#מDY[USo=b=' :k/@ܰF|3wPcQr4QN'xA!)pqJb2sbY >xXĔk- D{?hCzyuD܊Qh8KSN}PrdQvѿ멄FKo5^=e;wOyrGtqu]DsScCv7w_WzxxFE2<骪{zBHB!= 5m>@LQgRaW(}CuvO1ZoN.m(=n#$(<)voK~qd$S , \" @֤|梆-zѿEw8 ߴP\my@С j7@~uyTM!\) XXd c`;ˬI}y| N/,Y@C ԙx4`to]c=Wѱiw-!@|07gھL$}0Hs WOuZs$2f,Pp*`c[/-=S&R>qFBWOUH45wG%쿣4&SF؅akE׵720>b׋Mfͤ>-__Vc\=@1+&V8݊[2ODz򜐟=1:k1 /g'Xh?ٵj$z>kBfwϐZ;&直YD073؈#U<4HN5n1VhUק)2]q} W7-{E?6&f+ӼnOǴ?[:x^#`334hUKt1LR\X%0`Npl% HyNSB` -@Zsy33@IGtq3$zoJNU,2<tiXO$=p/6bx]oӷ3^ 6WeӮY[;oF.lsB]aʈ#X0DkTa}>%+)E!qvLEq68YRlfTvݬͷ_E}5Hzo E |dOH]J GsU#%ZFl`pwAʼnR(d ILDߵYF`·H'wFķEAr#T^2H\zL(v9V\n<7$oR`zv9 E"G*E[R7)T s1CB`Sb3Ҫ#FZɋ3q"Թ(8wӏuq7!yZPzAZY ':FfSXna4 媯WRގ5Zj ~ͬh-n|4>ZL&э?K?o6Lbt ,<`\+r6L%UxAKzQDp TIwrI܆v9 _<4Mvp@TT'{ψη9Cc7R,âI>W'S$I "@+g$N0̓mA㑴c9x;Vz7s5"(RZ7VSY v}BG>pGz!Ymf|^qŘ{fUn`' ;8(zuEV1A=gz6p+?}X ȼ #L'%!`[ EEB'qt~ގ^>%CwMcDKӣ _r,YVwδϖcz=}KKYB[0S?3 8{ 2CBE;[bͳFdwz{Sb{KM$,6w.4ؤr0Dfu^WVSyvCh[BO}_{g$K9?egkanSz{Vr2+$r:mOFApI_^j"yq^β)fuvTdP|谼t>h&`{raKWAզi*XgxpEMHiLU@\QfPwe6~+$ksgHi&X I* r- N&g 6m#a<0 ";C:dr^h^l/_,)Tv2 =ݚQڅjwۯ9cuONoZX]DÜwQd'5Eof*6 Z :E{A*x K'TZYkQ3Ԁ JicZ*4)VŻiq  <0g<ߧ!҃^NHt[R"sW3++_sYp qr]Ň :RF1.cCX/Bz+4U TcϙsVdAU.)I/K΀OV(͞/zCCtV(<>O&BM;Ur%|A'Z~wqF :J(-"r1WdV9`rZR6zWχ&i.mKɄߓF&Klj4IЋ=>x &{'(g)xECO~iaO~ ΋":S+PsH Qmx!Z ))нCG [lZKZsQÄjVPVop|j mݷ_F2,@Dr?iNp1β/=)P  r.D˽ 5RW sD|q Gh}zzX`\-6m3{=e+%APӖ櫱!vdt$C#=hk\/ߦՏ>UH@V4,Gn7^D:Gҭr%~'pI(PͥI!o)l'^+\)gY_\hƣ -5'LƇ~gOugS9oGE/*N^ ` t:`GGx?8Yu7Ol fh沍R]31$s@=5QxɻVAÅQ-,9 O!U8x9JeM,(<`]5xv;'Tv||=񅝗ۄouTR),G =U1ӚOyGβn FbloSΊG4@T_&8i=TZ%Çrj #`mt2%z 1tא #e<ؔJO!sO\踐êU5o4ż-;>^ɡ\4ORye<8 ߚQah^J54ۦ=}#w{c h(8s!aFg`ܾ6*fo}SOp!+`Z-x.x$Hj>Frg/h]37aj޸8n86GL(l@փ; p08.72'2 n<YDfFg(7b|Sܵ_O9tz@Cvz~!\|X/m%+ϭӍ{LQ%Pu$ѹ6*v&-~?޾KqIxC&|ij`?RB9` L,{ǷF}^WO\$CN=zzpJVfԥv\E hw*H:޴W_hFEXT0[}|#5i2Aܭ_>;~iWIKa;E BLƋqI2kmO&&%׃{*8U݇2]dJL A۴W#On)vq=$V·r3Dz3T:&(!~FZLg5uu_|w8!V,2k7z|hKg}$lV&K ^:2 ~3bNˣSɰ0C-(~߁qpE#N?7pكus^PzrHDN۾!UιV) XJܞ\>[e}j~(l{ aϥZq#+bL`IfDtxSz !%Db%x j%+DZ! c-L'a*+MLS]J\y+6G< yvqf#N#lrKwnDC̆|80u!|>t}X fiK7L/~0Qڱɟ ;|:\2kn۳ķ㥈 T1xWi**iDOf2-QL $ءBn4G Gr,}iG7*[shL Є().ζ3$ѡvíEYzִ2~J**T~tLgbmADPp<'"Wk&v[O=Ÿ.hs W@ӏHPfڣe{y<!|^_^רY`1+h9֣|W{d F$fRU0lH6 DT77խ~\c=2P5m:@o>"}McCxu"x 3+v]qTCXG 7'xB[CуQ&BLtW0jKꅾYq:4Sl]>]<ɣ?@n)kCv\f7MLҡ Q";flVnV0.nȏy}Ss:G앃N,Mac֞u'5\&%e6ƋQKunP&5:+ONKVzmiPI)/Bm!^P;V[h%$UO ,՜;p:&}|{>4qZiDtzNic+FSnbeƚeIFUuwz /P?onjtrEqu44FziKBX!pȞv,e(Kggo 0L,F_QJ1X)x0L1_]8S&?M^q]:XRm~!C[(g*U>kH⯑  ։?Z_mm1_ϣw jِWw(%\pqh,ga0"'Gap|#`~EU_}2 MyM|N ftYD‡zHQX '6?߀rFXm$^{B19ZY~=4c3(1ڕЎ p"Vi ͢O`dtNsmY'jDq!|pA|lQ (ۮYfL5: I5L vh6}sί+ G]*穎kAU&XIow|7eZDK}mB•ߠJ' BA^风8,-N2(amNf[Hd*/d*?<7]bBz n2T!ٲ`l+Nm3_ sy SqE \m+\ɼhU^(:ST7' #WwAyz 6Ͳև 1M{lXe#x`fʘM&ݺٸcG /5G+H!UlSJԟ':~IDmʔr!{L G!QHFGQ%A{d11S5Z8\Gs΋(P(gmE}>2# ^CfQaJ.Yfm%c=zvBNT9iWkkums2Bnq:U\hwBp3_\#J& TԓOXw5Db?p0qb,n5cS3@E,Fx>BX\eyIW) 0־`+Dp<9ǵLe>x3c|.p,#DivT X Om[ː?LsHb=̰:Tufi>\VtMJh=C[[|ɔ˰&=z˙ 鲈ߎp[=yV|r fV<>h} C"s82,}}Ig1Y 0YNR倠0.Sby[u}҃s!XjԻ?eӚ.7ַ`XC:G'e$L*d`m`C]7Y~)?;0TDҼSAxrJ/FTDH@'axI>р6l#McPT ⚐J6[l+Lm-'1: iEo}9ԋucF5So4?~^,@w}2*6'ϵI˔ }?3NVRCwgڮu3J߮ ~ e85n<"Mg0̩S{&5 9 ߢa[Se(;0%pfBq >4M.>jηRFoCmZ_;=|aސrs%sqY `Җp~?к6q8*N\0x5{!x= Lv-HW=ߠ x-0zN NQ`uMkq^nQ{.bBM2Wӄ28ޡog-o̪4,U7ӸS` D]k0BKttrIGQ&|-NW+/QG/ڰA$lnVY7ɖ/".e.Ց)'cTyTZ.уdK) F|v7o{h @v^?|zutW~?6Z[5?wqV$LT$F Q vKW9tch|/fbG\-a;qCtUR6A{WT0fi*+1XD`d&5jw_ #Rw7rm[2lKtC¬&||q9̨bz~2aȼJ.aNBRq!ڷo3I`?D ~q.plQ|hFP%i?I8\cW9G j!3HMR/;6A~,wρ9jɦ"⧃i7x8l#@hB}-X兮_p/Y67E> A-KZXl?삛)6Atv4ci*Ѿpwv@350էfVK|CwV,H,ˬxO|X{zŜP{rR,:?{B0:} -$ng mDJZkx.Pך*ifbʕDwFW\pxe(/Bk_x%5 E_GM+$z[Bdn?AzHuݴC]G{!g>4?v%WHD,5Ej.U{v3@aQhNEpu*a=!ZZ^{gO oAi.~}I* ?+Yq0ZɱK[W*%mX TɃn$8CsDUX~q?Fc Zg/N/y:wf2< AL9zڝCfc.4\a-nٟC3nY& @14{8*U;&$.0783:FݎoDXzwo4pGn}GC)ݐ( >B ਗ਼Rj}&?T~Dua2\>XUnSqrO}^Z֜/{\dYvdի)2Ɋf$GbXÎ.rw5L#Ub齟F|'e?%n9J)&els,5fўwY=Xd8EmCʦ1bfa=mF3'+gQ抜|FG԰8᥆Q[ k}P&+Jx#PMLۊf<'tH1#)c\"23bа)dXdD+uU&نDl~hAU& MzȹPm/{kڌ03"t5 Ff"@F:Ŭ2CqH{""¡q+c<5{u9!f<"/Fvvrc`Wy8ϩUPܾl IH'Ct2 !5LrųanW,N^`8Bo!IDG{ٰbWes:0ρj/2Kz/COzґ+׶o %E0qO J`i=L+yViɏklxs#`_rSMv:N&`_%~wk^*; / 2&[WY ǚҨ,E&l& *Ŗ:ĸa$N(1ÆnȲE Zl&-x,;5MZt$rcK:~J+5w5£%BE(/oX\(eHw C49))ed]HD_>'伊ezFj󂞹>'cyZd uSDmʹmk5Fj(PH1 EF} ޾^Lf)~B+1clp֓(xB e7d=uj36¸8zG}V˲lvomXf?m.eӼf&T$qIyQC{*SٍV3Ջxj$cuUʥVFyq6D&(ۧK|R3<レ^izG4ԚL71&eSq2*?ΓG4 -~Q|v]}D2TFf=׫NaeRb9rv}뀪Te ,7U"hRW.,}\o/ƦZH}Ad#&FW(\_ L1\{+&î1gT#|#f4/ߠ GSL#s 8hg8wqtCa;vD 2Gf|A}Mh%&4vYlS@aW9[cޔ 7G}!.ܠlB92j G7;nIS4Nq_X| %ǰ]/Ko7hp#x#'W(뗸..IP#%H3$us\-,]P hR?2WvZ3' Z1,P9Xj[an F/.7ńb)j~'gVp*ϋ1WR>t&A<#?Wr S̶= 4~g jXW dhʳVS|n#GoH&NH9bHBGS1E AmqW8]ij"vFȮi 1*)&$qjx'4և o75jSUA.tnZ<1Y}b3ъrӼ_1zdEkO76]CIߩQ&>[y(T7 [߭4ӷ :Q?5i;>ȏ3Kx4y0m;GZ+!PڭuprC C]!2gI'HB,^P:ezK jX|$Z( UTH{̪td>ݳSALmVb:TckI)*Bծ Q^V,6￱Lmds<єԓTc5@hҿK+7&-lQza zKQ]Db$]oNdME 3kRZ[WM O_b?~֮$|8&36 DyK1XqPIN;c1 tI{^N;N# e$P -[5~|Uo2VG!˟a=aAE'N[є|~%st'mtBp+7 6urV֕bGҭ&U.^q#=\͓6 aKOC:L"#'-Zzz< :@9PZӏSB1$N5IL'i+FRvsZi><%<!\ɌÂLѿ:2ۖi+KP B ʅdZ]iLݩ"IJ"z %Lcٚd*pf5~Ov8 6>]zE G;|K\NjsI^*[K2S|-m?Ɛ?A aDY2]5="w=7LTG_-k0/o I3ŷd@3%^UIN i(X]%dhK7?bB/TꟽD T:hW?MmQNψRV/&9="6?wu@ fgSAtJA2!?*nuVz $0 QN.V:Ȅ}%/q95PM%dy">pRhHuߐ7Tcbhyc zpLhu ( ڛI&~,*O&TU/:|ը8(pEK GG+ӽ_~ȌfMlNZ@VX"!8np gY%/^KYٵ=tZ{mۣHo"[ƽap՟@* zqBU[j/siK%< LAby]02k3O/isä }dUhY.g."sDX:_UЩHbӓ6+1  0 SDZd]bUk5:'H'3Naf%0-(Pev,':\9*P 8R.,ύ4',7\/Fho&S Bj&9glDb^D`1"弹7lw\+:r"FC+ljͯA(@,26{x;z"Rdc+N)Wi/Q2yJW:pb+28 # Vș曰ZL鷲xԮpXfkҏ7 >5AVNǗ/y;ԺFך~ ju)׫1+J!t7"%$Rf`E6C rDv'=7l}XxB+ʖM³p4 wV nIz#Dum{n[SO ?PP O2x3 9#)R]S3ĽNgޕ.^G "qS2))Bjj1(W,sc}wf-:lgPR2kXDV* ؟%VE S_'kDeTM"sfRZ+hTAqz%/ԘI\5$eDČ^\ /*0 Ӯf Ď2n+)(q@zp $̲#a^AB3`N?ì|S_t)7Ƌ4o9@Kp8vq`?TvTm7tLɬpj.ƫYrj6^XH w26LLJh3^h s)\=]唵D:#Q5i̓kwG,n >%κDpqw#:r;0K'(BYdRb':'[),5WGU=u뽳B%A __Soǧr0uV($LČՊDbtnF4ʨ,ֲZW-15,$&U!fmۊ_*te_ٰBk:yR>96e\{3&31g8_6ePND;esqj&5 x~d7'q UX7kp394wGpFgF^$]li%e!zofJҊLaX{Oifx!(7%aun#//с!9OZB^ J2Rؓۘ:~Gaس2DkB>/21^Mi6VlU8l)ۙfhsHIQIYh|e`Z{˂Opey &wȮO0S@:K'wUG>:seVԚB `;+a''"1N6W^Raz pbmV^}M3\"CHFc+UryE k/l4^߈')Zآcw#VƹJ%IO~ 6AFQEϪ}Q+l̟$F_*g%9y&\TXT $`rc`,ci1Ml.\$B 1|0zzRϞ$OSfr7(4ח@d,B !jO'T+$6?a?kV1V")gLƘ~.%+q21|3<aaјUbWqقt©`ZBRrE77BJ)11@kZAښ핔WBaO$x#/]Pΐ 4 }%:eqRοj5Hv D /DK;n;'U}9rƮ,2):2!5ӿ*Eqf{ئD#,ԆԉalZ~P "MY.ܦ@Q 3UMAv+ɟtq0ʓ3J^"KQgD"=i%裏(ӂcϷZ2$a 8wLf)F wq4wFAԓG䷬.DQch/d, 7GoE lz,&. KSAƱ]^(D/ xjЇOETa2Zc$n"8 щ~W:  $z`@5le}Hv_p:(?9#9<]ZZKHĢB"qr$4Th-7(gƹ OOՀ30FŚ;6,Rbc-b/;I_`Oo ,O>痣 ǫYZ ]. [;dL^ qBouM9K*ؓkͮTyk$mGerPO%5X~.צg-x#'T#j8^R`\2GAȒ]q[ > 0V1'oN3Q8(3qG<Rˆ7H?5q ӄ F/#S C,h )dS1t&?>*x m/ymoG?Q>_-ii >h bE #cG|P]WQl6C*X;%~<'_̄;0E[ClyZhd*l]S۱=[М,m:gyٌI\ԒݲF" 8<Փ5w`r,\oPP6}t=K sMֈfz; `$-N j^teP!>%~ȧ%Ɛ4vL ։0_4+ ઺E.]; *VӠfSX<'1wdTS^NzԠU>@EVgE?=DQ$Pu{:ˇД5eƄzRʇCͶp}% %hUTt8LY_i9LxLWz(-:Xgdh6JU;13ȮʫYNgS0d.LUƓtv7xĥ;g-@oiw_?iRs|[V."Zc=踰LR׵;~'6\arl}ʛGdiq N^5rfUـٯ#RyAo[h!؍N!َVyP_t$5xU7/@-2u9e}.&d 6յؚrc];@PB`x{-sXve]|GRSjJV:ʅ_,ή@њc}S?n=7*[Xv g@ uxr`6'&ƳQ4CCW1"|~jǷ,;z?0ڍQ7065\$1+E{w6ڌ!(o'w8xW$7 R2@']ɽD1d>;p-o'8~0:j[x6D{.oV\?o@I Icl<_Q`4-ɺ50*d $?T 0+=.YG^"!U}Um%qLqZVo@f3AH&\KUxE qvʝ$9ʋg W{lBEmtR #;s68FkY$ym1Q|wuQn=*L!L1c2Ss7Kg{aN>OVqܩɪg$Zߜ{ I_ q8+k6 dYe"dXʅsG mΏmJYEIo< Ԗ,_*()0ό!L,~y܏ )h,;wF"h#u/]pNHeF"e/T:eglGY5 $"+{4 &Ǖ}b2k"[(á{N%Ec3INnq@qH: kpZяLSfï{ꁥa56y8{EĩOeV]z/tx[x6qoI~xuFE;~C"aNW0Mel#y 3[7@a!.[Cdi"C8\Aj*$E~n{d}4xʗg*JV%9aWn̟ɤ@$/&ʹĨb0Lv=V_oϡɉY:LIշCt]"Pwu%̯V,F J˜\ѿ0 ]bB5dnj֥=Cba0Yd!`loޤ$R(/+7-r_0-u#V(pV{PKU` sZZ W`)ROV_ e r-.&d3:DA> `\z99[/ ^1`Q*Rpb@+|x_H[+Ŷd!9oJ< AwʓcձJ1:^ok[6XyW|:YއGc 3mc ǡcŸ]9GҬҙI۷q'cZyT%d>dtXU0dC8G*]{@JÎz6zD7\sYUX.2tß,цq:0b}. rŦ'iT8)| bSru+wv96'Rfr3AC:<<)cnvaͭpߚzH@V8ɺrԳN$.E2G ђzk;rh?%ɿQGƉyώ[n3W4 y#ni}۫wön~a0 N&wCv.E=Q@ ɍ#&\V;޿j.>طn'avX;@]u#gX{߸ϒ~e/H@%Լ6|+0vapK5#ʻ<]][gm:)ŽdMˁQm &vI e%C<8vSZU_8WU' BUm{$3d<z-Q/1T܇I:Oy; <5 F%;IƩugI{r;~f-bx씌RU-1?8U6wld܏ߚd؛ ~~iRjiP~֧ai:o) Hi3d6L``y0L ˂Aɴ\L#v3=ગZ2Y&;겯p="8oʇ轜+B/?9U. :b *0nPd"-0Sף$7kNwtxt 3M#x}Of:/p;UmʬZf%,PNa4~ W RH4LS|C TO{od?:sReG~W0 <ɝDl,FL! эȴ&?@&F32/P?pت-;GJo*Qp~eGUV5^)A6|a9JƔ(yWri_p- X%7Ǭĝq?*Cӄ~7C$ !2 k~h/eEyIX$4Rmv-V|tn:0ygwfWi2kڃ:עG8g=aẺB $дSAtR|WtQ=Ox)L 8]ɮD)oG[5VYo%^A>dhBȕ LOdjS837htBX Ią9ЊS{\ d{}(GHw1qV|sS,c10'mI {lz}fb+ ʮDu&X'~/E½L/^}29~2C++}P 73O*0QP{\i[R)V@B ~wV݅dpq7ۭDTHX~S&^8<1x&bjg"SJ]£5T-U6"U\M[3P 5> R׬V`6 xM %\Wd',< ]v!z{ ؀d@/Ȣq:#(0qnr{a.XGEVy|_}Y\^J)A^BB-1Bs-sOK} #BQ/F,".UM di$^s8R~'MeQnF]x/v{qgt_G[Ν否"ȩW'\og-iJrC%u@O-6 ϱMO6'75hu83,?C?p[k?N3yPIFi?a[_>B|C`C4+.WazmB+z&AKhZF )8 =7"8sJJU-Fd#6 * wmk(zHdZrʇݨo}0Y]R$,`*x:gPjG!3Zȱ,[/`K2ܕ:\#rҜ\h]`JZr5N`A0j W*^nDI[ns\r7i xK`Z¦Q\Ÿ46))"^0 ^k(8m`2TH'z6_dW"ILqiyTe]͆X4aɳ`- `m@0=J/Me~qg$֑_`0Q\I?.:zA#`dBW5fUgo2Uk~|-p|:ݞ[,QYHPK= *Gժō›.Ϡ\scF{ܕA>TJ Hv@Yw2WV[;Xw(.*c Z6^1Wun IoהKZE5h0UHyf^«oθGd JYUl]|2Yސ,jffYRb_Iu{y ;MuZ}Yʏ;IRiԜB4ޝc /hh_C#$˳.Nϓm_e}⢬R{AxdYHvPP 928sWݻܵn2k |矸fM.py5x<ؿDoG5S+0-r9rnHXR%#[WDqRcL™ϊF qDG@p"N n{Fjvo˯[t<tA $$~r[(D co1ԑ]0p9l)0=x;vα| L"gMO{p\sgλ93.۪RHGzM>n uۖy:ףoA?󐫕#aT+,2) U3Նyis} "=Cٕ`L<9fNwpں 募;Uo2ÊyR_sF ɳ_`|i%);$Aq\ƢiC6F gLرOe. ղ lPB ~ gN"6V4&uL- Rd`&Ӂ |`%컡5cd\bMGʫ_8 mbR 3Z"`?(iz$FyqGc1[6]Պsdw2*y9O@ŇmG4g>+pkSeX]W6.XL/~颚n`^l L %b̤V3GQV䴏&' ;2rO^q LmũᙵS_Va;`;>y̦m?$d6S_ {jA;E?Ɵ-^,\[ iA +#}s|'|_R?]Vf Ɛ9ңָw)7#K LZcv`Mbň)~ on9GK oᑃXq#2JX:;&uXǖ}0IPΡ*U2:|x9rpϿvYY x9ĖFlLwˢȻNLEfVz 񘖥0Nu`W Oo>QĜ?=Khф%,O ԴTۚ Л1 Ϥ$5h;Y_ =yʢ "LjO)LS't?rfCc$(G?yb"dY>8+k%۝Z|)e)B&ʮGi;]n0Lg7U>i1LMLD[YЎwKd7fcUE}N.iÄ=Qؠ{mMDឆN$Ɓf}/Ѫvp̙k{ȍJMEg܎fh|D_S q5‹vW&SCs{sΒ_=ȯ|icPT8W#26OESksR B*h+Ү&bh[ v+5¤Ma=#2ht;+ҼrӂCM&eؠ8u{'Nl .` .ORay}Vj|Q}tcN:çBv$-b埡 \axAVLϼ B=0, 9L(-w]hiG;,L&02ZWI=P\0AfF]0+iOZ\#_Y w*:F/3\&W*Puw. q2tr+QK}>]W!'RXdm6a2gŒ{_5Ns-m;[<YI#RT =oZQ/I*R #2|y%V#P s\L)x-}Ҫ#d(-R0gDs5k*sWu B5crjP Qqp]!*[>gQ_Əu1D.UONg;`5b$+bZ44:FH*CAuVd /2aj| "GGOdlF#!ނFzuܩ@| 6ֶCAfq5h,UMn\̙f) Ja ;u0NQ*ӂO3}vFN%{蜞}qG^LÚflm-$.eV|A1 1M=P!mR3I"hsa;  l_5kV.k1MQj"%أ|nkYp%֜ ׉C1}B}rcRV.̣"ܶ+(P?^˱  <&HA,._rIU \=Bn 7#  i`P斔& řՒЀۆ*s)c|*)/Mp)IO;Ut % ?(Y nYA[bH0zvu(-9p@.}d8.%I19<EtyX!3;DxxƆ3Rp/ 7׈??kͶ ~8 {1#ŽP‰̭"%"F;_'Uhް΋pz}[^KRځ<Ŕ31Up\dmSh27-:Ӣoe~`9_^5 =˜hN'@=_b\V=V@rtM{o+U vf/]j$LʰA((HZrwGI\)մȧ2SU˻QRR{Fb/"߅`dBazSt/L*6dJ 7;SÀ=%FR=,*~*M8L\t-MkU\C23v뵘(WN*.yڰ$ yu۟z^iR zfsA[J "~B~QXj~L&[>_Q {E(TfXL+D=a{w֕o!f;>ok&gy)+,)4%sɦrS(I/ j=) hdZҴ}m,vEqwr,q`$^L䵦bICB7:]!:BwuI*Y)hQySs6|CU)阏SOsFމܱ>:ej4XUy:)mX>r\Z4|̙ j+eNhtVWܺUy@k\i|/ginݙsNKf"$ϲKخŜPj$G҇Vד/o>ky ^&|&.Z4+ǘ1Naє6q?sv;YfYcf*eQ=grbn! &7P\54 >WH(5h:wȇ~8D*Kѓh4L \^#`jأ?{bs?NPQeNh'%cU~n,*F¾uBe9UQy}CC6;hY{x\/aBDS4]DSDp1_|ZC+U8(]ƐfQ$KTf@Z]_I!Љ?´(N ':H8ӈ_޷&|sn~uC72 [啜͞af{Ͱ(@yӐ_tYdzAa P~&\tsC,τ$Y\2? /S%@!PHt&TURƆLpٖu,o|KHHiƁb{W~`JLW*%V*P {_*^W5=w_!w`u>pCUk)QPuē)0+]BBnt| .+'݆>xb\hIsɿXd~DD76̝W㔿ZQ}HTkpTd& h}RF#,pOi:YPq=fZ Uj,\GRBfo_BSR8XWwNLY }5|*$[✃X֒8vfkss8Y<kbZccIMx`b.B3ژhY(X⁇45B3ZpŅ eL"%l 73"Tp c&s6dT/ئNoB \y5Ɵ-n\3DԍY06}gt@Qq1{Pc+GyAMqgO~rEYb˴A΢s^c.l!Nn0HQ@ʕX6eJo5HzggyD *7rR60} Yz͡JYvDu s%ܤ۬2M4mU_ˠrJ xȭ̷H*4V~bya-yq,@}Prq1=7Tۑ1Rsݺ{1y*˂ B42L^ `P. mUB_\a+vID0^@&$) ކ8_4EQV{"{T~b/OYzT_Z/͑A)\XV s.MCfODj^RĐXE6ce;q[Gj iPg%3 \צ.FWW Q+nֆ?gBwhR>`X$o'xYf>DQhU@Wz`Y>P6Tմ\ə2ɷQT&w}ٺ"kj5'\ߕ7";z=IB,FPŒ)t7Ú)MFv D6ՠDvUWm 5d2:|?uf-E@zh ɩa~\3ceu_83bB)8U:ךjS +mw6).ʖx?7_rwtz曠EPJ-:<`^c[@?ԅuvWi޾[zV߿O hiqWK63շ7^ei^*&IxoG7ż~2__'ښ1.*-87wX:"RF3 ["V'V\y;gԡʎ.znH˩2L'|PKMr%(f5|gJ~`z<ؒ]BK4纏m(X Ѡ8֒FTSZO}4dZ6woTN_k.hXF?/]">or@^XX; yliB_=CNqPMʌ,0ǸnC&;xTҒ 'C9阆Jh?(35_z7n&!w!'ô-fʹKIR"w:I @B%UQyW줰 H]$<QWUdOsoo"LMFRԃ_c{~Z/nL3>:M\p(=%-J"&^YOB9:`@p=5 |ebqzliH͐jlgJLJ?gT`TnkiΪS%Ks;`Z`CGc7Rdn#m@>cT:zjO DcV\$B( ,xwFpUu[r)}w!US-- kؙ<&o݊g!P8ePq}2rg';3.`ˌDї7 w4Rǖ8e@׫5,-xbA%\>_eO1TLɰlÞ\r1dž¯/[g"¢ȆǖT9\D0;_ўH%p,vf#[]DPCsU&{xa'TU%(gQRt;bOaLt`2ۢ-Hf+hp[U:O4rցbx J4 ߸!:J'tu~߼s;h7P.֣0N[j?TDf:sL9M`gF2d~(EiF{q*Dik<fO5gn`1Ք*ժ烳~YNE vEV FeSQD|ʅ㵀ԝix,F[JEަݯ%|$0ؓAIksޒ1\rd[_Y%tC2}C-.1hixȓ'+B_i?.)}K[Qvz6UwwܿƜ]۾%{Icux])s_wO| =6g6 Z}{?k7 :ԢA'mWbKk.b ikg/Z V!685&cԘH e/&jt~nIItq`bg*C68aD#rPz:Hfma-jG MWhM␼ݒsϽFm*QTH,g6S;jcr_ $@澗j]%VC'3uI*S|{Q.峷q"D|:sd%L0kO!or&5Vʄ4Y8{(ѢBFǢ ߻%Fa`:-xdF1%,GGSOe~.iyJ)OLxu% M!yN㥰(G{*JE-e.F HGoNUԡgq 12i綰QF ogz6=sNS"+"r=kOR<0kH[k$j讻C> ܶi.$v垇rxG HjAf H'^p `\l_ʰ8\4D`y0_w|E[ix\q+nOuR0ȚbKHVX6OMH3'l ^]?YFHZWn0;+o":-?;Yrucݹ6YZ)92rxQ. 2c urG`zi 7s|+.0q0/ C ΗE5?އ5_i~q01@I1+"YO.6i\ԛ)Z]ldcB歋 !މNld#fL]!NdW7#jԔآ3N21J?wdx.tFP>^3& }qbYh&3t&v`^s3 vĠ mxy D:o ȧ$S\4wlb_yU7h ]uJ%0<8Z-{[)kz"q4rѸ@*sD ј51:דg TmvtRLX;6,ݗ/E܂]_{>[%@^ ̵v߼rL7Dt:T*/5>'Р(mVB$}PF ܨz$QIRV憾VI6tʇץ=j.g^}= BٳWGF: Ԕbk /8M[L؊mugjY )ü! wNQP.syQz+xFU>W6O'ߥaJ(Ց3=q2fOUQO"4xtI.حn Nd7c8> +B#k\ 4PwXW"Tj>{)͑{DUY)\C6wK'jCvN.֖o`jО2UʒCN>(,%SYcܖY|_wOBqV)n&EJ7WBv1*.I9wvL =wơ|+WXbnѸLjwʦrĶ ^iψp1TĀf1]Q7 ݯ=lz fI-$ "sh{'=Fi"&AG5"[8šg>Cʽ y2EQvoxʋMC']!*d7@4Gan@v0 WNC-; pZ}#JTAKu6Nx~LZ [$DkӞucWK>- ]Fg TLG'&+%ѕܝ;QHԹPhjrMyۧć>uьCt] #j(B>:@CG:BQ(f9bq-#c.qRb*=BT,!g#dFG e3Qp6*&ɉK1W2SlGBv'uwQeP30ݝԎX_^o}.퇛"< !<e W+)7Ϗg;Bw6iH[1X'oopdܣ#HqY %Q$ ڄz/m*M P+huei:~FXRǀ*3kLO &#ZnVm lڃj+6 L1YTl&ns6lIkm't'c*u'Ђ-pɰA~.q' !_/|_[6 6,gg(Xؔ׭sN)(u໯K5yDUD񴴆DԶkU:>+mwftZh۲*L EҬ7ڤ?LI+"K`MLŋInff$.A ' yǟkᨈyH\/ق~/m ]F\DGgo-tlKTiRg@:e(USһ_aP½t^*HԈC~ɥy9op20m`ш x)LZߴ+d>Pd7[Y}45NQJt9%2&ׯā߱+tجPOd| ;-ŰкE"qo_isu# ԊkF-nFeOmj:CNtCȀ #]m4B P:bFQOQԴx-Ոg~sDygIs P<-3.g%pK hd:]mv.S(&xu`} EGX?Nnӑg4^ݱǨ0m/W+! .4CXq)N`w_4A6F2iy;J@@FTs1!d>txgo DF]Eg:ȋP*mMyWx`]Yfi)Ʋ!8Kf%P B[y&7[[1f@֝9fݻ\@n" /y҇F`HN_BV=S@@|xWOB̻;clD}3APMHkCN|d?Є@ ߝy:a.._q+{qh,f[k!ceB@z8łN?t$>Wb%^J(d-Ӌۢj?2[/SN:ni8!YGgl諿_{-7VO)T;cOks1cq[6뢗t/3}SM{Мi;BƲ8Êd1kA E ,+3 _ TE(/['ɝt@ۈEX83O:QA 4( Ydx-O_oG&=8+ "-w&Sxݪ6yztJh[m2?186@8R$'FaxBu2F]̹(nb zKM0LG6X^('Q‘pCmV(GËgR\>^۴Dl͠m嚯;"Z[ɍؓwD'й-l(g|Zg74yF Zk  B(h2dx,np,t^{22/Rm)Ĥ`hnI@+>!В'ptڡ~͸-N9Əvs"PוXڍ9~?Yeˀx&wmű&o L[&镮'UCkY=;y~R[aQo"%#}X%,HchMv@cI+(oy6A3UE x Iƒ5r} /cY0=\?Mh6KUyW:(Y7?.izn'toipgHJ"њ,V֬FН+|0ۈHf%9nGs^R3DBTCGzMyESZZ\.Bb~iEc| ѵf'2 #М.Rֹ:GIz6JAg H4A_#ϿEU*rQG\`Wwjt5S/uh4|Bj/$S&\_ ?'C=8E< V jKD/_a7<(dBfחC@L?VՉ!|Gә闣:0a&Ѿ:wBz]SY98R˄Lڼ2r*D=mVi.J}j=Ϗ$99:11&n-p6VjRt15](Dp@=md=I/sxu"Z-zBj6ONNP7U [ÍLzꛠh |_HC OIzDsXkg 'įf[˞ZmbuA;:'K/gt?xD_T'!ډI\SO-Yb_e2{Tv c/>Xfptl0+YF>Z {@k+ FȖܚt!*뫾A DEp)nLY6e!Bxa%v_d}A[ %RCxښ 詞lbZbRyX:_2%\,KX!8uȆt`^ `p1e򽑤j86E'us"ҠrLr Xj pk{\ݲDpC #gb-F t%GM6Ew&-S Ŋ{"E~o QxFSD]$6@:d.!,c* A2g{bv3 69JzyOWoXHL_`yБh-M'A p_lWz\%vb9lFkE8h5piY!M!=ԇ`DMG&lnؖoHY~~|N~l95pUR \fԏJni=98ry[0l|ߑāͅ*9G@=b k`>ҷ^!4B ͐jY'J%4`!KΘ700i }Y~uh1P-&{cEpy\ҲS 6j@tBoOo1MK/T&q3C)q4=̘W"Z}5jY`3}. -OwB81+_Lj!{XADkco07d/θ/v'oCCy5LHo/OҪ8a%5åg*X2X_NM qfYEbH@?s;5J%E肜)·̶m,{_v>jIW |Pr}+!FĒ Μ)4^OʖU|h]kn1ƶ@6(6 )oX-N 󙁿D|an>F3ư&L?Jӧᶚ+7&}]}7.|eV:Ac=+Qlj5}{:$)IbR n03ϓalI.ބ\TYPxlD EFE-tVsTGJ7/,Hʢ}#0\+rw1} |>Q^gн`'xr*`%dm =~@?eRuT tvPNp-)}M]+q^ou+D H_Nu<[$|1J8w7d ynF:P:$)1% F]`l= sW۲vyZx?2.zzDT%Uab5o^J&"D?COԨ#E#`5Bd\^jhwm.CBNݏqrDw8 6BJvHyv\gNOGme~ ev=u16t56Q̅:Ȕ9f9OHJxx11kE*Lt"j ~ˑQR9^d-}: Jהq㍯wp^qfPqQRܥ*'g[ 0(3=X%`PFX{Xjڄb5QF9~d#Â;G /]Tn",nhD[PҮ… B&$QXsu7?+h''tdn_X kn Grb~5*v/gm)=>?hu#Jjio$}\QH&s1l/1 hF`(Ԧh/葬"c,U6޽@V}?+z 5UmP/U:$Xg)==UIA3qDſ:LPU;9D̯*<*1)QKrasX*|T2¤W/ JRֻ&$#z{= d FbflYSrG5ų̇Rwu UI\}&q nk<礌JiB΍$zL~-C9 T ~)!޺''Q K߬U۔-瓠PK Y/, 2BKE;Hb4]3I| 61$/0b!PEH*6dX,޿i?G$lVad[tH{1D5(޽ME@:lS|ԋ}Y[$Ouc,뙚8\j18QGw \{1 !  .-G,sGIN9|huˊCeɧ)mwpjG;E$c^FPYyaI@PcO]R Q$F.hcdŃs2/L*ZƹyfmD0x.s|[|Uf +bүUJNgGtF\- MEP\嘍z1lo+ woXNd!n~JIΒa9 b ǑR&VRN];񋹓p6~^t/^~9MxW&zTm):"U s,I4?qL_XOͥȋ̹9Yd~_z#:`G2vwLƼm@Nr|ee @ϖw`Jϑ02f(D[x̶nŐ~]qwvBpT3Є6Wf-ąryk1[,[UʝBOdV jKw?ڌPYkeIz7n{U⋳Rp4ͥ/Zޙ" MB_nYW beT٥M_cx xU7&qz1x;Z,&D+;_0vN3y BrǛi%&:\GhrLF=MJԶB_i~tEAlkad|15 pӁ ;@%ޏ8p  >/l-ц6GX9 S>]fM'MM,=|?2ƗAD\M9/#8ԍJE:MΟ@SX`*gDG3OT}^f~ă㴲Euں"F-6ܧ}򱇑R'dy|M$f>b(s;Iɮw#ҵCoIVDueVd8^pj6ޓ(烰~Q4 À̎ B!(\h1ASOWie#2w68R_}CIe+f3{Ph`vv; Zg5B.{y?ޏ/ϠL!(}>pL6YguM&œ&URWLt"qTOzȷbv3[_%\Uą6+Y =vu#ua'pEIɏކŻxH )3A -z< ENHY) ^үm>UW:p#)zNɎFP+8ܫzt ;lj"b0 PByO)Y*@mm\ LIoP`zoR 6;ݹR H$ߌi0De8<:~{ګ+ʑ;:ıgQiw܋4p>ȕ,< .w]E~ʻ֣Ĩ1M̷i|E51к@UVW5]+R &9 .'I!6iË rG,YG,bEmA|Δ3́}prg<$蜴Dz$MBIm#z/u~>p-s_ p1+Jq S/* Ys'$b(>*֣Hq [c8{+̮41#~gV̨r'%HRO-ipC=l^G39US #O<ϓVs_jf7 +^ vgK^xz5m<[!mp³fqwL7\)B: 'qtOi%p!cG}R8,#0i N$bs_u[>Ki>AVg9^YѬoe\U82U.>.6fEq]]|o}u NobK0:e]ꭩrjsn5Kɩ5ir3B0죈s)ADC9&Wq,7.T6ĂT\QAYYd^@ǗUz=H]KEP?*TgC,`;ۊ8[m1M6@iJ X/OT/ZGߺ(L-nt,1VMyXXPf'uS?FC9VBU%/`NL~=+rW+%\6!rVe}G3yv`P Y/)3@1l\|$>1'& y蜈?^+[Oee-t 0q>U Zu@eWay-P#@jN $(VT5u\f/LAPۑ+0BHnl$|_]t^Q8P~Vɥq{I)gE%hF?w•(ϾCfU%P'" 3XC]ܰl{@q$3FEǔqZI;"uѓvC[ŎNc*/.Rj{瘿QB nӀo5FG=ojICfM4k`ȏ~b<X("僚3V1[͇JR୲wqB׵8"lދ{ =;R!P"^#$a)M0cIw##bgӆ(E"3a!9j{{|XBh:*UKgBW=ap&AThJfT/ko[0/;%v'5߉#zy?ƽo}v?a{f"m*GO0Q?ԁ{}w@!/] a~~%E0r24G`!]h7 >tX&ݟM4 _uEN=7)N]^_'[igKS[9+=Gg'DU[F'jD'HG,`])ν39^'f [d zwflBET8j+_mPl=a5k#L;53ǭ>RKO$w~B1,Q>p յo„'k2jR#lUjqXT+ړCDZg57L-Ǖ.*Oum%'>&|-f܉KaZ{H8jԚbw#-lO׀:tBM\}%8HbY^D ÓhJ|c:1/$kd9VKRrY>%ѬJϦ 5:>o"*Znh4Ҩ"pWЃʌ@C_ϚlL뿮Τ՝=ýMl~͞r5 #wZNF('#YetkUGwK9 S<+.6eKǖ'^X B+Hy\}(>.]NۣU6ؽSE)&i !sH8*-RD/ {\W.ds5ujUo:oDۖ0uGa(>kՓQ+ :Xf-&Ƽb%XQb,y&1U0\7,FXyT"AhxE",‹eT&I4roU5i uDSoWM6п}Kh:.9Q^[FoÏ\ȊqĤd,.(h>8R&LQN8U%#Cޜ'N5YVcg!k8/P#: ޶؃EIa߀Tzq5/v btr^i:%@|p.OD/ шD*3L;E#aTZA}$€Ǯ: ч8K7.dQL5^>y`:_^&-5_QL7jl/ S9 J۱Ů|Qd &Vx~rJ.;,g.%!qY]ڏK܈pL^)_>M8ZPnCON Ƨg3wEت 6+3∥,lSeA;KO :hfj@њip,3f炈mWѾHd)GVsn'ѹOe# EU7ȩͰwl(׾jbp;>18rC*KOzK *?Hy%h!Z Xr x d}b(PXkV1u°bqVbq{NKr.B> 2U]>d>PJ%)ޥ2f\U 5WX679lܨȚ \ި91`eRBh%`r ~8Dz%7 + ʽQe<k->}1eVQqD(O(&uRK} 4ti›j%bY$gc%E(=uWChclF,S7%+W]!ϣpdwn+֡g>DD̽Fh$Z0 8!^S3o`53(ZLuŽnPCgSg o ě~#k0ZjaZor'Fb V,g V - Nyfxs:=),8qrio*qE&<fB;sb͗}',:ܳxe%OL9A")<^PY)p)JO@9ZL턏e Өu<v |-+7ku[_D3f l6j`vc/n%hp3QN;:k&\+1#]GRv`_SpEgqWRM$۟ɲu3~SHG%˓\ brчkۑ^q輪Y:u '&c"m(m?dnYU9.7,ZnA{KYߡ{GT-7j\@{|-LL6Vl\=RaT{)fTXE(1H%v*]٦ Ovz$^B 8 F((3Hn1Jڂ{Rq( _kMK*APme0RVtAWO@W!b)vm3R:d(4.ۿ[-kQ)h ߾xVm83U7cqFw#i7_viV ǵ\u=Fk*^}vk0{ߠV, %;GD[M؍y4$qP~"(ZpSrIw{!Aܴ`qzrHn?"!`(\OJ8ZYuq9?E216D<.h@)Yy2:/c$ld &KcwriҢ2ԴЛtn}&Ʋ҆=`{t%昮ٹY+,*s7ON>ʛs vpLN(܂0[6DO?xn=+m=_x-H@e҉/G{c&:HpEx-Uo]n81”(fOYWY^],/6NW+ۘk&~]; @&Tf[LJW<'0U*tW>[)sR#|s9bH99aj)G*"tD鲠bߩB7xf+fҾۈ)R:VTyWTRWsЍvM/♛[FJiTz2S S P*޾|^3z_/[ֶq.+fEO0|lD.<1uFQWž5{?__!F>)nI_fvmt2mI)ݹ3-:NM >cDpPb=36N'7on6Fʪk5x.stRk> A5:zc 'm&,ń=l0[Rwj.XjDž "y2PY(颷_Kh 0dя:㣹JPN` '2*LΧ{VShcT-ʏ#\-fv&)0;E"3;H~x}X؈oX62-d*]R?^G5?l6R?ܬdɰB_W',~Yhq S~ 5,k5d(N0g8'KŧpIIjZ.$ْFBˇي~%E]N ڶ:j:Qcl?ha$=& %jC=-"D&n]jH/HC\=].|L;UDŞ*C2Zcԍ...u4ᐿ>[9-J7 r1yd>e56cmPŬ@,6^+؁`PE΃Ą=(Ǘ:bR F`I8Qf>T3 ,;n+"/b`-}PQblq0JeR;P`g+^*{ab#8d}UȆyt^aQx42GQT$=.Q0N \2bt0㧺IJ rZGփ3#lH_n>wem1s|ڇ6יmjyzDWAT:`!v(9\#c`}|H.p? D.I9)G)Uh1f~('#(;^ăȪc>rjg<kS*-Sn Vя| SgroCX05@@DݝhRj԰6JaVĿ=njխ"E%Vϡ.0_ܴS@ntD О_xX[zlw`Ur m"r}kPAor@Aԍcb3$Qwf-Э[.9;A$Ψ/p^<bƂb zy/ϧ=sC&`}ѥiSS:p!Bn[/,~P?-i)A!&ftɏ"B-5D1 Jc7A w\-p2-Fc30whTubzrFʘF05mL<ˍUuˑ> 3\H$ K~NoM֡RGmds ONd'žK+9F17ɫ~p r/ǰlLx"󓌲ѥ?qu^;ō)H o6 Ob^ikܞ 1_dm_Af}"<0-TEv~y}DAI(iԖx>K' :i:d ܡA$Lh^ZO! ڲ>%FæK8{Dzpb΍}K\9%z/;{\ G[]@ .>hHq xjaqA Bto7/@X\`: 2 Xam_g+,UܓSxa7_z撞l ~daӪ%Jʉ>CL C4{-rc alg k{U%#ba]c.h̏z e7Eߡ;(GIApdBr#ncm-jdUX#GdT_8T_epBPtg,|M8޿(! Acd&X/s\ 6uutU-F˲>%LJq {u2M9Nѡ̊uj W 3a`#|2+mQ7'B $@oTdJodb79FHw!ő0YȖ^U}}ʈ#nFEx/A~9x]Kh,ٻ$<4 Jn >k O ٳLTTu^xl?n+f &QB׏Eu͆6t|@ nkD{JY5u{Kx1pFDu vG^eԅX>K?Rh[ ck+>\;+"^5ϵ/ qm*ȱzteR7(80;%K52sw Qrr i܌ծ~P 0Krj&$ͷ)SbIdJ(iiq_59-|rHSRڒWrfqY"ah<5 QL;p^sPe@P'jj;̉:KnqtpB<6SuG @yrYaCquxb4:񓗎]m dW{-~6#l^msi#_UMecu6;Fz~E'{vr^{{iB9ER.Ć]gة`HRlaX–^r!4X CQ쓰@̆qH|LøWXKc=fEU HY뇧;Ir =1Pݽ]5|eQ/&ⵞFbz &ٞ/k0chϺ^^hJ7a!|AU{]ݘ鱜Zn }\Ɩm;7kyEÂ/&6#JMnц{w_]SWL_W"<8-; $pNmeEC; ٌ7|VMiECh [acLް@~&Ny!6L T.7OPOU뮰 ņ_WI!]hݨO&;NA(g<Მc vy|Ц@giҬH#-QLD-xTn k2\/>뵍8G!sm|D]}_g"BiT'v0H `khSf38譅y ʃfUQ$|KK}z@em@#߂s'젥шIWFDyݿnCxz,"?2nHO{xU S^%iNj/tSÖMąi̢Aajϔ)&.-yK˩inr'3Uq5XmBxE-NJjU 7U߇J{cK%E02`\4qFi} 0<;`b|"h %[{POl3tZ@\Btcݰpo> [iqzƏwS8eSݨ=Xl%>Jjc" fw2XTC=Y?r){茇cF~J>8;A62PM /Q2PPf+f۾vx+hZQRt2am4]h^Gu,輦Lv׭G *ЅMP;;nhr &Np)>'i9:y.7 r7cKؼ60!,N9N*ا (T 2 6'93o!_+ ,혦\I8oI҆.= wÙZ!%!B*Ŵ_JL#J?7'i *k<C&4GF4!O0!a&H+25!&n=ʪ Bȁd $ɍe%7ؑtDʴ"(w'I:^P?ׯ- -"Ɂ~0Q\`L|=NW.udlP19~|Z y?_JmmޣMz/e/7u8 :,~΂|Zhd_zFK &f{>(u&ht)4^,53Vw .[^!6e:J65el|nM@cWd3Oa Dr uY ZHqtA7A y~-!7jsJ 65{󙠳F^ЈǼ= #Y5&:c[t,t_AbLyλZ=jY>_wWFH rCo}'FeI{j[27д%Qc榚a ܊(M 6rHS$iLtg q{ v endstream endobj 1 0 obj << /Type /Page /Parent 755 0 R /Resources << /ColorSpace << /CS0 766 0 R /CS1 764 0 R >> /ExtGState << /GS0 778 0 R /GS1 777 0 R >> /Font << /TT0 765 0 R /C2_0 104 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 2 0 R /Thumb 700 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 1 >> endobj 2 0 obj << /Filter /FlateDecode /Length 3 0 R >> stream ͨNְib=CaUD@xI $l D BePhuR*%;kcj*xƬ{QP_tysZ2KH_AAa{#(VвJ+c׃h&voAW7s@` $;P]`B hjvS NLz/rwӧFS Zʼn5CڟiblCx#'O~*M(MX"T5bqz`k+ KRz27kDVˬ EeAA&+E̯W._cd >l=#R'+Tq[0'='61@B1k9H,dެC+ Nrv^gjC"b\U! XW-G4+l`JńIA ƉTqQմHH6O> dwME0,$$e|a̴ rLi,6u_Aqao]P,J41+JIov'i4d9IIA}d8-#6#hfו6Lϣi=Մd#v*ۦ,{ D 8N#<ɑn8~_(2=&DOٚ')QGf 5{%5`F=ظ8xp03: >3r2V2-ZS,M4:38vȒ/J?=ĬCW \;Yx!4I2fȗ?[e`=)>YƩ#CGKuRю}TQܞT=[A|Eחe0ǽ+ Rh2¶&[ >! CD(bKaa4v,<]~'rS@i7MT&?Vy&^ht@Y7Fn%>AH>T`n7 pEDEetK&.H^)J"*MQuphOE\ Ƣ*‘jǽT:@2L̈XZ:KYQGFh0ߟ\Ưouꩽq/=1r\Ĉ *3j ~JA`VXq4ZpUu%x >26jgpUu\m3"$T2OUV]/XβV0B-Hɮ#_ AFŤ媖LIx 9#!G[¿ϙxs!U ,Nq jg ^LP{ğ1I_c\:3bV%靖YCiúh݄sjq|D850K,= endstream endobj 3 0 obj 1467 endobj 4 0 obj << /Type /Page /Parent 755 0 R /Resources << /ColorSpace << /CS2 766 0 R /CS3 764 0 R >> /ExtGState << /GS2 778 0 R /GS3 777 0 R >> /Font << /TT2 765 0 R /TT3 105 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 19 0 R /Thumb 702 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 2 /Annots 5 0 R >> endobj 5 0 obj [ 6 0 R 7 0 R 8 0 R 9 0 R 10 0 R 11 0 R 12 0 R 13 0 R 14 0 R 15 0 R 16 0 R 17 0 R 18 0 R ] endobj 6 0 obj << /Type /Annot /Subtype /Link /Rect [ 127.62 583.125 499.20001 597.94427 ] /Border [ 0 0 0 ] /H /I /A 21 0 R >> endobj 7 0 obj << /Type /Annot /Subtype /Link /Rect [ 127.62 556.54492 499.20001 571.36414 ] /Border [ 0 0 0 ] /H /I /A 22 0 R >> endobj 8 0 obj << /Type /Annot /Subtype /Link /Rect [ 127.62 530.0249 499.20001 544.84418 ] /Border [ 0 0 0 ] /H /I /A 23 0 R >> endobj 9 0 obj << /Type /Annot /Subtype /Link /Rect [ 127.62 503.44489 499.20001 518.26416 ] /Border [ 0 0 0 ] /H /I /A 24 0 R >> endobj 10 0 obj << /Type /Annot /Subtype /Link /Rect [ 156 485.1449 499.20001 499.96417 ] /Border [ 0 0 0 ] /H /I /A 25 0 R >> endobj 11 0 obj << /Type /Annot /Subtype /Link /Rect [ 156 466.78488 499.20001 481.60416 ] /Border [ 0 0 0 ] /H /I /A 26 0 R >> endobj 12 0 obj << /Type /Annot /Subtype /Link /Rect [ 156 448.42487 499.20001 463.24414 ] /Border [ 0 0 0 ] /H /I /A 27 0 R >> endobj 13 0 obj << /Type /Annot /Subtype /Link /Rect [ 156 430.06488 499.20001 444.88416 ] /Border [ 0 0 0 ] /H /I /A 28 0 R >> endobj 14 0 obj << /Type /Annot /Subtype /Link /Rect [ 156 411.7049 499.20001 426.52417 ] /Border [ 0 0 0 ] /H /I /A 29 0 R >> endobj 15 0 obj << /Type /Annot /Subtype /Link /Rect [ 127.62 385.12488 499.20001 399.94415 ] /Border [ 0 0 0 ] /H /I /A 30 0 R >> endobj 16 0 obj << /Type /Annot /Subtype /Link /Rect [ 127.62 358.54489 499.20001 373.36417 ] /Border [ 0 0 0 ] /H /I /A 31 0 R >> endobj 17 0 obj << /Type /Annot /Subtype /Link /Rect [ 127.62 331.9649 499.20001 346.78418 ] /Border [ 0 0 0 ] /H /I /A 32 0 R >> endobj 18 0 obj << /Type /Annot /Subtype /Link /Rect [ 127.62 305.44501 499.20001 320.26428 ] /Border [ 0 0 0 ] /H /I /A 33 0 R >> endobj 19 0 obj << /Filter /FlateDecode /Length 20 0 R >> stream qƴXPֆ bN7H ޵ %*"T "a޸d˝?ʰi'JUV:Ԅr-2x "{C{dc2 c~ UwlPUP㾟ۑݻ89Ȇ6H.~|$/[GAֺʊsZ! ^Vg\,ӕ]_jwUjШ8sW4(>7\ک[@>4lfӎ2Vm_ M*'QO7ʪqH1X"L)C]8%oH @|87 IDr\.i_{WBϓc5l'ZIvU :hCaZki;{A`9PgҲYxW[YYcu5+pWil? / ݻ̇%(? eOB[80~}ꋩTXIbS@pdǵQ /sn7ɍ5 $CK :.K.[kk T+N2UC^jiv}(S];zڑDwf"(cGBߜOoBCT%Y=G5MeW3d!i֖;QBlUp*]=۸oq LG"Ynף9)7jhCRa0M!Q4M;X/~P<xX1Y9!j`.rHqv7DB5t]yE0tG{vV{q?10'!؜t%Nԋc8_jIBW[k#Ǭ? uAp}fJ^p3iPQ R.0飿Pn#̢6Fz0(Q'i~PwÇ2Glm /'mѵOXȖpJiȾfbT`gFk`ȸ C}½?ױDx Z6vճr22@WDs2߱^Y &n> 􍮚/Ȋ LbwOclGfs*WLg\\a$`cWQVDp!.P,Qb1ϭT 4ۤ|O f;y4jmǷ. 6%lմ-ʪ ɠ]tVO!/Z2xN -' (Kַ!.i?&FB$ ˛ўwCЙJo;or中1'Ci]գIE*ݠ#ًۓ4ވpKIٽGvc;?96 }{Vj] 䢸+^YXSthYzU[2a!ǦBKQګ]/f}qIgpժo1S^?5:Z:ۢ+; ٠>จ\ z̰ fJͅ~IY)՘{KqgFGε-~p^ R#`rr,Ud*:e2 Zuca1(]C Z 0랯Gsp$S2y)허OݮT$F*hLR h<1=QՄp\:jD1XLBz;x2=̀QA^0]\^l'(RE#a*l>C.2I!5&*}ɫ|=26hWkJw;ڬ=&@B,{5,Ml]jRd7tz 4$-injWeIdڨ:(p MkrϕrO08;w< a ]Nھ̩c-kӰ}'%Pnz'G؛v^wj:ns8N"۰e37@"̿y?o6BP8Kh^& ^>7I ywJP(eSYXT1DT%d=HYI)>u&¶CO,W-C! -\j$l*kn>Z:7[#-3_{IMQ%1[F-u\ImD" D!;gT=fip89)Y 卼şMd9 aK&-SVj c;jY#%_Oט;[=KqI0mzk ԇep! o.xJs"{,mH`֭o$'<|A8FMt`dg| ' ojALQCL@M*Gh=̌xC7`rŒUe]jX)O 䥝)V3۶Y5F'!"B[DfoI`-&Y3 * piha/r,ΦB)t>Y22mSRX[jIy@M>:K? :-C(krv,ٌ{D׮"F-#|l#v endstream endobj 20 0 obj 2819 endobj 21 0 obj << /S /GoTo /D [ 37 0 R /XYZ 0 842 null ] >> endobj 22 0 obj << /S /GoTo /D [ 40 0 R /XYZ 0 842 null ] >> endobj 23 0 obj << /S /GoTo /D [ 43 0 R /XYZ 0 842 null ] >> endobj 24 0 obj << /S /GoTo /D [ 46 0 R /XYZ 0 842 null ] >> endobj 25 0 obj << /S /GoTo /D [ 46 0 R /XYZ 0 842 null ] >> endobj 26 0 obj << /S /GoTo /D [ 61 0 R /XYZ 0 842 null ] >> endobj 27 0 obj << /S /GoTo /D [ 61 0 R /XYZ 0 842 null ] >> endobj 28 0 obj << /S /GoTo /D [ 68 0 R /XYZ 0 842 null ] >> endobj 29 0 obj << /S /GoTo /D [ 74 0 R /XYZ 0 842 null ] >> endobj 30 0 obj << /S /GoTo /D [ 80 0 R /XYZ 0 842 null ] >> endobj 31 0 obj << /S /GoTo /D [ 83 0 R /XYZ 0 842 null ] >> endobj 32 0 obj << /S /GoTo /D [ 86 0 R /XYZ 0 842 null ] >> endobj 33 0 obj << /S /GoTo /D [ 90 0 R /XYZ 0 842 null ] >> endobj 34 0 obj << /Type /Page /Parent 755 0 R /Resources 35 0 R /Contents 36 0 R /Thumb 704 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 >> endobj 35 0 obj << /ProcSet [ /PDF ] >> endobj 36 0 obj << /Length 9 /Filter /FlateDecode >> stream )#6 endstream endobj 37 0 obj << /Type /Page /Parent 755 0 R /Resources << /ColorSpace << /CS2 766 0 R /CS3 764 0 R >> /ExtGState << /GS2 778 0 R /GS3 777 0 R >> /Font << /TT2 765 0 R /TT3 106 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 38 0 R /Thumb 706 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 3 >> endobj 38 0 obj << /Filter /FlateDecode /Length 39 0 R >> stream pưϴGL  }~Z)H?*?BaIrק$dɤ'jS]̣֪" 3H&Hb;u7lׁӔ1J>aiM$Yl{[k힞Vjw8p DLp_ n<+%Vt~vZʳطzEv]2> Uv): ixћHhii>oȠ_A_}\(d&\2/N}>,P`s E:jzKfOUwѰ P'H f]ǩLE#fCh.LDA*N=G09QpmDBHtLjsR$Op5vFm@;8I) |> v H8–WܒV Kj:eDIm]xƲyV>BĊks(]c Sr#M_IoM Mԛ١Y=XN(/Bw t\f@{(/H`2elבLnkm3UZ^2Rmf3d? Bt$pBT>oV[kle cHcE[x^BM`?-&@iF-~Gyuw}sD4|+fp:5VGS.~n@V '/sݦ.҄|CŠ .'w Y7:}G?d|cEYzXgyP}hFTE qG"m3SC(;e~/t('=F Ƃ﫢oDQRہ^W#[|Ipr0eZ!Ƭ%d19j(gp5IS6SVΞyBrf6aO`$HGzWIT(~%#MJEGD?l^?b݆^2;6ǧvI `og͞b8-'pu#[[tD`f0Ԟh:mJ[˗.1Nqj8(]rY,=V#ҩk]ZA4eA\2gIJ-34-+<_P$R,[bή[Ĺ,AȀzJҥ딸cg3Xj .%f!5eI?"TƝD%3d/,Qp<[z-K3Y6>^`>C{%~ew i>Gsy`g: KobUfv͛D_J^PkުG8-#0wAu#mZ}{> /ExtGState << /GS2 778 0 R /GS3 777 0 R >> /Font << /TT2 765 0 R /C2_1 104 0 R /TT3 107 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 41 0 R /Thumb 708 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 4 >> endobj 41 0 obj << /Filter /FlateDecode /Length 42 0 R >> stream +&@< ^ Kb5NukܿG+v"X|}r2O (.I+ۘ~p lu`Yq$trkpBSP}hTw"Lz;R 0H=(%gvjJ30(+Qp]HF3k , 49*T\c8f&‹3 L?ےh#a :wߛy”8[E\$5 &;R>~*ؓ LFKYdn޺:ZeL"y.kI&FfE&Є;_]A(xʪ*Nծo,gP؋U U3o1TD{C{ߊ,G-R_a~aB,*3- ϫoN?zc<,xɔ]4efak&`&!YhoV+m|?jCѴpY+0z|.Cm.1gϣ >6 !k#>s>OeZM J($s4b  F?ݹfWޘqB5>z:OAɭ!5"l .9IR%t !sG\%Mg3ܭ endstream endobj 42 0 obj 1175 endobj 43 0 obj << /Type /Page /Parent 755 0 R /Resources << /ColorSpace << /CS2 766 0 R /CS3 764 0 R >> /ExtGState << /GS2 778 0 R /GS3 777 0 R >> /Font << /TT3 765 0 R /TT4 107 0 R /TT5 106 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 44 0 R /Thumb 710 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 5 >> endobj 44 0 obj << /Filter /FlateDecode /Length 45 0 R >> stream 'Yf _&õ'O͘JliN/+hh]v]oNAdʶ(enq8ڗE%J(𰳩Z0l ¶r@i ťx_#-:RLKtTCoP!A?BArva5>(h8k]u֯|u0MMR*!ʤ1-lO "E#VJyqEO &I̅!c44.4)JE3N.cmߡڢͼғxQN]RyS6af"bF8H6hX0'tQPءSzkAlk"u*HDD.XRLIo|EcU1VW} +N$b(SLi[ д7đ\y}? K'/~e;D0<[QH]vNqkQ$ŞZJ $^({Fby= uwSF@(4'u1>ɔѶ^jJX' ֏TusuPX[CUk" N;/SLusOR'(U՚a+Fd$"FX?ᶫ! aS:L063:Q_^q1Q8Y_zsRUo"*e[)b8O!8 sgqeT 4SnPca#)EȆyBV#Lbɕh`?cѧKAM(K}6_"gOoԂQ Q Lm&036;dPؤ++[*RpDd<1lFȁKwI"%,k}#&+⻮NHA&'-v J9NZj`gS#=MKQVMN?gIBnWWmGMb{W2#X9rP>e/4ʌ($G&ޥ^N#Q_]C6"*LS´\αJK , iR(JsؔCm1-LytPDa\.K*<9],/'#_`"ƥ*-r[ v0(Gp acmyaÆeUI/`§ e q< L.HQZwb|X^{Sxё ]:jF$+3R|K2zyzdI#o,!!2Zӈ'VdOݳpJ'[M(p Bo'u\ҊW&ŰbFɊ/_HJ: ۍXzH/}cz]Jra֦wUIJsgxEX^>adI ؖ8>K"C:U9p,  Ҹ?L;uKhVNsWE*'\Hxw|Q>Zmu@ frpa >y=@c9nZG%Lq -a7Bh thu&=)崒#U0 7O p)U*eH7֋38ap Y&jZxXU8T?vR{{<`2qCxHA8bn*lHB<ǫ:ծj%B+d(Int}%afߜ v`lMw[6sGLCZe,J5h|=p!618T7e U5)IP"v,G.Qx١AW endstream endobj 45 0 obj 1942 endobj 46 0 obj << /Type /Page /Parent 755 0 R /Resources << /ColorSpace << /CS2 766 0 R /CS3 764 0 R >> /ExtGState << /GS2 778 0 R /GS3 777 0 R >> /Font << /TT2 765 0 R /TT3 107 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 47 0 R /Thumb 712 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 6 >> endobj 47 0 obj << /Filter /FlateDecode /Length 48 0 R >> stream ŢMnh̋3Y}W-@/-J)![ZWaUh}pC-U F: `ɬV6Ҳv?/׆Τ Wx4Dk=}c0wY2P:itH9>L92G%0E{U*Kœ<8QL5+{/ꋂlUbŀO-%0l9wHX-njwI\%V#OP7ˇgwIJLݘZUeP%؁ MIμ/@+oT)ᗜ˳׼7ffCrsm gѢPٸ7b3;NǨ_Oo6ze#,q>v;ѿb%(:ԙ{2gR:Y2B"p iX4V큿B)ބNeXj6 S\Ӟ4[nv*ACiB2FQiT4]2ґhVw@CЎJPeca8 Wc%_%5o%d 3A#{?b!W_Ӑ6+8 p{)M$SY᱕Չl+;‰V"5.n^Y 020 (05WKu;.jfCTVE(g`%o#+HGWn H,> M vr Wg0{xޘ'Zt7ըGLu[0' PBOsL_ ;#˕}&[tB&$,;$LX2圆ܯ@?uSrVoE?-QZͯUVޓ/+ljc+jǴ!τ7=og8)+% v̻+=l@\S% 3 _CG5#5zcn0UՊ:w!(褭4mCX_d̑Vx$]c/T3~kNC\ī++mh^NKCZTf͙+VS9ISiaf% *CPFX#\^5xvb2,'y;MCnȯX(i;AkL(}F qCMm79nB}Qɽ n-܊̳.\wHlƽF8J4 p !fej14AC#rK~PE qM3k`}PkdU+_[02sk:)0[ubY71,lԢDoG)rGxcd9 Xhu{2 ' ~V4 Ts 6zjyYF>k٪/ B .4F ik0CVQ@X{]ܴSqmoհ!I@%=u-*C3[]Q$'vlL4ikh.LMrDZ;}[ϖ n v&,@:7,|н.}{fve2K FE׎Ƒ%'T<'ߌqѦVUQD_}K v^ߌ˪2n̤>L_Z1Hjhnnf&71I^15e;q~SC`bF'Ki@܁,lY/mXI۽qTHў;JK%|4h:CD㞈v/\\fyut6W^u !I.,[sc 6n6QcvNjw̷-M`unxU?Kߊ8:R5w*xԟ4}rۘ|g!CD!}UC_-$MHOVBan~ff(ē9 Q(?UrkF/a,h\G'/xή#gc/|ٌ>:"2 %ɞmG㿊Rql %dIXܤϊ:luuɧ# c!.bo9/\> 6{s~ęJ |~)Kzr^0> /ExtGState << /GS2 778 0 R /GS3 777 0 R >> /Font << /TT2 765 0 R /TT3 107 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 50 0 R /Thumb 714 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 7 >> endobj 50 0 obj << /Filter /FlateDecode /Length 51 0 R >> stream ]v#r-cx⋎x+g͇9+cglz^,7ڟ<5YPLd90.'.21Ƅ_ѿ0Y>ݫMrYX+pH;\Ci0$Z =S"-["PrԚ[P|z:# |347?tN aayQBY su(>wP77Bc]N_^7I 4:Aæz.#@b4e1⏽ʩPh5IAxI g%[WWdKƛTRV"J%dK(PX I.W.V㫺a `:4A\pU 05br':?G8]px:;pu;~`.`NSkgUX,e>æݤ#>euqu ]S͢&!} CL 4>8+aQǫB%A>D|&ؾPlAy.H$LX'kvԬo{֛3v~թ[qi2 WzJޖpVT?)Ś z0.C=dut1]co2W{mez=ȗj*t^jhoMt>삣.Kצ ieņlLk>P~eY T" u֨xZC@l'[Bqe~:/0oȁZ~P}FQſ6?mlŤ Cr~D)xy`A!%80֏+ %"s(['yQpZкYܷs7@@!3fh6xEa{T=% TjB`$ x@~ +C,][ǁeC3ᘭV IbKCzUΐK+ maWM_w>{Ud18 ަqRy?T~QUCO# G&/iW>YHXo>uـF3SЩ:99Cwli3p*+0M %y{/.XgM4[fd\Sir)T;=ɗDfJK ] r_r{V-}|; *jxDZJn:^;#XejMd1UE!;Sp\ % 6*I4}M6)6 g˖~_OO9+/]'#qNmI2a ٰۯR^^>Q[oEw$%[SMoy"HΠ ]# Z"ߋ2[? 0ќn 4 .V:(?mOFn87۔ࣖ;zK?Թшs:ñ{D~  [Ғ5q&d1g"9<7|o$S@e% T'5^6m5A}AS7۬vxVkogkǒk@1h^~B2D^ï.ߙsO;Gl9ٸ{ɮN?`;Cp-QU+,Evz?SJӒ}mOޕ1gtPfF@RpQVE}͎٢1.Y_M߉ƺJƺ/?6Ƹ c`3f_E+Sܢhw)^EA6/رK"o kp_/pC82\ A$wIRhЅɁo'mNcR9^h,dP:<7RQts$;`!9;:46 eᔂhW`tKJ{˖KDç#Xw㜄$Jo(A!E̷'5pQS6og!w})9Nl{Wuמh)~_rR=f o#VӇz>+PƼ1˽A/5n IZqF[ *!e23|;UY1j>r?ם$Kƈ`U1[e hrOvg)cd"|(c:gנ%{-=:N1%lD;o?P,B}؍{)|EWBE)*kj,HY]ǹk9hpQ?aaՅ3EEFx9Y`y$ptSWocϢa7aȏ4M,/' W%F,&!zĴ7#mJG\uFW(d>ZQi*Yz1R+m+"C@7Xtmjci+nV%|;-(uM9m3$ h,qdh8UMe9Vk)4ҭ&E2Q# +RL@.[˹YjK]3n"8-6B~:<ޗe_X% BO2w,MSH `9z\C D!-Ũ0Pmw4grP05Z b0ۭQT=w:9̧ehڊX7^e7S&G{8<^+B]>l+14G K()lhga,"0CH>1I`x­~PJ[K+I  *1\ RA GƫHq9 b +i{UD K#Jchq \].}zQ6L'/ /]IWb't;OМ%}OPU~IRf,JC$&-8PJ`~Cd7g76N=곯^dB%gv6c;B5nU܆ |e apf^o.>6IsŸK3CZPm%Pޕ fP_^0JKN!FS|W+LJ~ME*iXq}9:q9Ld9&\,T W"w4'Qÿ;!΍TJT[#Dw퐑To糷{8 읳+ Ԧ`0HMYiԹtlDV~ %ǬBy:]"zH9Me~^?::yKT6[fW!EP\Y%CЙUs9Ns5]#ƉumTd\*hR!;]khd>v=amyPvYmBXD%u/SUx` Q8ͺl X"EU^\L!TB }MuttqĜZ#lz^oK.>IZK4a${r0D,O#!5WQ:,π!Z[6]Yh 氊Ge4~V> /ExtGState << /GS2 778 0 R /GS3 777 0 R >> /Font << /TT2 765 0 R /TT3 107 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 53 0 R /Thumb 716 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 8 >> endobj 53 0 obj << /Filter /FlateDecode /Length 54 0 R >> stream tEn|k?Z:—2pP0bggtu"7JMEl ^ZIxMlsTE.͡ \`IYZm8p1/ɭ ")bttaQ*TvWЯ2oߜ?9zf N_W_fr @yqib=YB@mKyB~66kCE=/HX.̼b2\k O¯MTGR1o1DhL$qA0 +q Ha^KWϹ({f(bO>HHX023&e;[רCk@%}:[(A=:6@68; r{׫Q.)iIp ]sAUy }?ԗXj;@* ^%W O1B#&z{&a|MF}P$ׁV\ {Ȼr|e!3ͺ ]|d)K"k75~FWH2 )ސZd >4sķ T!Će@QLGesC/i,f/ Z=\>*[X70T%u4M>Z[5zv<*Z#碚iߕeҥZi`Y3v"[d]A#eOQP.k]uT3SLQ+П ~E gGXs#XA=%r+l @~gdP=}G2d)Z{,0K#C/k1^0k+Y;/n[:>),q}RĸwvU{z I&?X)k3 ),Ak4=R+{y>㼕v] kP 9[R)"1QS5Nb\c|kFXvHvmH.h5@seI6uh˓k|x[O6!` z&(զ2MIJpn ն6u@:APQ"he $`=YQ(, "\ ܴkI@?Y5.-FvO C +̾Z&z-.q.y$ ܏+|Vg b:%I.Ljri5PA幯m~`iw2V>W<2W#c݄P _2=cn(;IH9 *>!ѕbivXEve%A׈&k Лc 7b2k>N\j_L ظ6:jaW!JP ›,3W 4>73,&Mpp>VZ/07MtA$ZvmxIcK.zxF)o!³c-[0?D@ ԏ2xf|"qo)kqPFf#}Pi1|H?'Jvr|*)CHɛʣ|NU{@#iEa>2٨yݿ"z#N( 0nRWK va\5(J$.]W .,P_jKu") jEyR&QES"'j2n)~ S t4#悟*0\-U&@aWyApȕ=)Y :Ĭ+IdP0 gqI3]ũ8J;HT Lm͔ }`&ϾE{m /=UJ~f[罨Xb m\l$we t:Ꚃ^gnh+aEjZ3nHzRCVVstԳ%ߺͬ{HUMe/ E7NfS|dz>eB7P ĩTiWT] *ϰ.欇2ޕ€ _T8 ?=$aF*O*mi Ǯ>!ҠЋm20-7jnƶꆊZYT7eCC&T'&hn':]l:w`) M%T3^$3\g+Zu/ _V[Cl0.U'ć(Hb;Mr:G> G>$@P $xvH?aPY\|/qzQ7m)|ꝴ/[5Qʐ~|RJ>S<)80T0͝W,S~$. ecNcZ,lfMW;r7A2TN":n'4Y:3Q[ z+GkHuqi@Qcjх0}ĿC%a} GUh}Nz%-*/gSmK4,5^S3"[~ oWK Ў!] 8r?Q4dZV{ɜb*Zu`s%UO盱K=\dJyw?Ď)+&xh!EfD>{P۪9ܐh*}`j sUl<5ݟs8dBڶM`ߑ}mz)wxW1TO><%`_P`G|CƱ|ҍu0I\%"S,aǦ% -r3`]qH ^] U%ְG! FK~ZXgvAoB VǔVonU7K R%FBMk)?U A$޵0gɱ7P5~+˶nu2Eиby0m8QVc3iC~Aƺ;FF'$1ΪQ cʝkwd/r]4ͥ`1C}m{v!T#6/cD Zn%Lu{ԋX`je^f`LCݨ'MQSbb q?> Vzd4n}-;މ8_d(gm;A.5팲ź[FZlwT4Z"H!0a$jӅρfTȇAB9a9~\FZ3 V56I쬆lr"jz{CQMrr&zUwL[+_A]hZ?7ʣBh؈*5Rp# Z+N` U֨o v@rbA+\qݪ+Tu>[4٧1QPtk 谽$)n=ݖBPܼhj;<谥|9q9߈*K<6ɉ)? ,J*Q$t[_1u9(0q|A+W1M`x/(O=6. UYS<Dž|F$N@3/`cxu`F 2Wfo~7gJ**@(m39Ex pQ (\.֋0Z@rSR.Y 9=~Z?87{c^=lƏ[]V7xC9FomVʠkv~ OjZTnfV]wϺ8a"54Ͼ"|]G@H endstream endobj 54 0 obj 4431 endobj 55 0 obj << /Type /Page /Parent 757 0 R /Resources << /ColorSpace << /CS2 766 0 R /CS3 764 0 R >> /ExtGState << /GS2 778 0 R /GS3 777 0 R >> /Font << /TT2 765 0 R /TT3 107 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 56 0 R /Thumb 718 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 9 >> endobj 56 0 obj << /Filter /FlateDecode /Length 57 0 R >> stream #8҃ThC8/~B"/lLdCT'4 낋/7Gξu1,]Vjc髝 hXrP!wUlr O\IyZ>syoQ:j|%)iv.^ b']A1bP19 GXvMiZM[N֙W~PZ yz])PG /MrfJV%eRq)Yz r׃ݫAte˲V@C\UinÞ{}V'bds %ړC-_d*nb~AӥLsPL,Hrr G$"y$P; j.Ӈz_4LN_;-2C@Nº ?<K1z{17 +4!?y2ƄuªE=0BPf8:LyŶjϟ(*й*=j7G@qoe2+`T[+e'6^E0nc5MFNAYt/.wS,Z-_{JL<`GO9RALw3Ll(EoJ;]yf'?8FHW \Q/%d̴ga^*E,j jPgS,uv -\v6:c * Z_ ?Kٷ&2:t \a GIzK%fXBMûG|:O`&L=~Ϥ-|NEgoM{@͛7@{Ẃw+qOPXУą`rcˣPN ?E)WmqծAM88@ͳzTGWw|.'F;I'X R2t-'>K8ԛsu][H ta]sfdxlvxc~BQ?s3QL>߹p2yCvX) :q?XD /odVejˉ~I#~J V $kf *Y[?<! PޣC㜇%2TFS{I鯈g\m8~.*сh^B!~`%oOϒѽvJkɞA"mƲxO78?aekt9Bky0n\?<J= m5a #֌]Kre|@MVYĖSd!~yrl }Ɵt>e+h:ɱuތA;.UG'0\z!0aNYY"5K:(F@D˅@]t |LJ$=ϫ/>Z3w\ NRS@Wsk%!:ϱt@"赣1Bcw#i} ~t.QXxۜ'k+6QQ'{lwsP^94&Ex]PGzprR=:R:z I7Q5wlq4v#<ӊyYbr5 VRms*\e֮׍dFYG>_Vn.lou5pSQ &fW8KP#%is ^//)ZXrJNyG1e Ci@XzF2f:{0"GC7N_:vbK}ңMJއwYֻKcn>rüN@Kʮ_wO 0qrs`Ql?Xi `w9mMPƴF gm|uh?7oUs1i()MFm#Z,8]zU|x!%>S'kɷ|R[lقjl6)$Ӑ_՘ _R*yx h1Fn0mې0~6mA6HU65obΐ,9Q9Yv8*F>J<^DϰzY~ Xב"SP}c1ܩ]g eMXSqDA'jպ:Y7l%Q6Zen糿m>A0I=2Ǜ}jsّLW9K|i]Eڭ+G/5Zx *s`Ep{ OD rhTnZks-?Pّ]Xq,O1 L#3 pyӁнq<.N1 l,՚(}#RVa<79P嚻h64Qif)џA#{L.rfjj(<}|7V?Ff=V&y_ʻ P*ph!&E}P8rAMy$Q2Pՠ8C|ݼYƊ}4'z\>8%)t11-r/嬼Sޔ1c s@Ur1 p2+-H[ t}#`$DC)۝Q3&Ա&qv`Ȇص9L8Mnѽ~蒹|G;HD x"}=W~u%(&afK&ƮVDP%)r˖Z ʡĐX.k1gf7Ю­VKˉw$RO(rd٣B56o[i3}E&@)C<PV/r>L!ܣZ~KߤBҕNAUcifV㿙- [l`eG!f(ܲa->/6Ys^j{%/3W0rs?Ə;`GQL[~6ꡢF. β"௄ܕ5VZYG=ײo{ja҉3(6=S.E'@nKn@__:\2)^f'4z"TkqOkah 0B I0wE #,؆)MxIKPZ{J#(Bf[pnSڕN |O/sE1-ad9%tYq!8P; /F <3x@ J6tvϒhֱ芌8 TA8uFbtm`> /ExtGState << /GS2 778 0 R /GS3 777 0 R >> /Font << /TT2 765 0 R /TT3 107 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 59 0 R /Thumb 720 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 10 >> endobj 59 0 obj << /Filter /FlateDecode /Length 60 0 R >> stream q}Gz.W-&5iT꽥]@ pjA]d6Qв1r1t\Vj߂>0Wp 9-ދ ^1a#6}`5!`xzzbFh Y3gk?tِ‚ ҹ8u7\:', ;{TpX`.Jp @$r53k%y8ܞM=Ja*tvT͖S[,k?n@_o65I~4g.F>S!UNJtTg-X uRƩ qy+q$va+:X H΢c `XR#4KXϵ[v2.VUvӧ.TH!B psh1|25kF-Iibw6&^eiiz6)䲎|>$-3Pi<S^M)%e& o4B}i񘰫#}`cZWl ϑL,GP I)n8==FB2ŝ+|;]+:]435ƙQ|; }kQxuVQbs*M^6+F>v8a0}"''i@R\OIb:;SShO:DfKEM)r,ܕܕa"Vɛ.;*OIn0(Hy&ۡE9͊x;la(+bć2% W2>Ǒ]ΑyUcHa&4l$0+MH:,S-]ӗv^h@W4:=LlnCxA6q?ğa+cAe28@:zE`VSځ%{ySb84~_Z=S &EbO)-rkC :zjv5a(m^gytH6{.`6h=bЦFYC]~2:{#t^qT!9=  a)PnQtvz Tĩ--[ker+zD;F*L2& sտ` |[: i{[օ"5eohF 2K8,W.g8*B@s/ډ((٦Ծ`~/xX<~ɐ3T a@Oe73t\S 2c d_Xp1+`AV_F# 3A!uTI} M>qw)K hR=ESG56>6ՎnXj-Tgoչȇvdo',s7.!cANٹwl$.LS'B^}Hk:n%fcb7vb_n-8 H04h9Jź(K"nK'dE"U÷/?H>黦u[di9mp2t 1Ù8b^񿴭5G|F#&_L tD䉍,("]ajҰWK߳;]0_MVۊ~vUֳ',qLt,[=Ej囹e0Lw,ˤ:Y7 u>R^ܟFp%IGFH*LÄD0I]ҲZ9g/?2:㺇@p)@ tBGdp6#Epa7<*^FSbL<[AEV,p\k|$moH ?kKgp屠%҇1ݚ@gS3BEd% 5aʖn|p#z.PX{G7c4p"/FZ{sz!t&AO <{cg `7DVwnnV"PSw&%HJnaqZYE$hݰBpU;';c)chTZhW}ހ\} DrVO *1h/W h@eNdހ3o2癤T3EОŔ=\R?Kcn(\h8E~R`JE` Uj.'O&Vb WEFٛ{̈eKߒՋxAwȮo;bP?wv(v72vQ&i#<Ӆ/Jd^:ӡm.e_/.q -2F`-b ,ZgW!n9jLDG/#am)ѻy7.\m4y<7^o8Fp)y BZ( q*1~"ࣁXz_/1ŮOF k> /ExtGState << /GS2 778 0 R /GS3 777 0 R >> /Font << /TT2 765 0 R /TT3 107 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 62 0 R /Thumb 722 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 11 >> endobj 62 0 obj << /Filter /FlateDecode /Length 63 0 R >> stream =Axk TB ]COJgny2bHe{GNRF,~<<94޸JRyKFC lyd> "kF'MQg[BQ@?kʕu&O@Hwt/)ۏ˲2owV>xs5W{:ȒKY]hU/*%&Qmރ=]}^)66 ^甮-S =v Yk~.vpxLȞ!LRq$(~s\8ؐ,|d>6Afjw4 eN[Rc?74hõXCAKQ!HiY+ENE{VSȯ)zOagz8;=כtS v6ΎmA T":N&Ձt~f"@0xPh%¼ X&-n8.Ǣxrzo__XdKDŸ_CC78eurDO%~~w*o&#7"H=^=yQ71 S) B4e I5ԏv9+҂|<QqZq`rҵ" |c*3#y@Bk`]ϐ/SڵϠ߇oK*8&̢bD~~%A1 7dܛ{]J*L4 &'@v%x%u>Ӌ! 4b XgW/ L*B”3 =y˯ aJfBo7xBf,ǀ?z4298VkB|Z:WoQ/DNX5[ͽ˹n*L"nEdi%̤"} jO!ZY%D*ȭ;ZTǙ٧]R 4яL Tݩ0kBg. SU`R_gZQ ?ݟ :Q1}d9ld*?[ _dGD&xҰ ,#PS u<r=A ,0''$׳'6(۞_Ln<-zV&ʼLH^3KߥDjA*lzs;X,e)|^eg,qo<.'tcjExo*w+Zk%2O -ס Z3)|X- ݞEŕAPj9d!Y%9&`?18qYjb߬_Ee>Ueg@ՃgEv2G҇eNq^̊.Px׻7F&Lկ; zeY%1)(mepWp6$P]eSAf|LuM =ҭ>/3C=Po PȲq B:Vyf(P@$Me|FC?I b[ո'qH&((: ^/`U-Z?r[b17ȧwAH/ώƇ?=sW7ò`}=7| DYJ/e%(p&)&3) R}51);fmLЀD,7[ 2zYi;\¥"%VĵAgA\Yg }{}}:p_ ְV5by˪dS+SU|gqW%cby!z4oRZ*1{ 2=2 i&]Cո'#մԑy9Û3^< [(+|BwƊi9:mˀxLKoܽA#WYq EK5XbY3;sX ׌eN@@uxJ%!tO򍓻X̗)pWC*䌲sacLal_pQ4IK=JH;등:S]JEwA€QT;*Is\:@=tcDZAf.r2E'B+0 / 1lkzR0%5uh/ !fxZ9YhJ]2>"G]bd sN:Íƿ$WҬSx/)5GsJIa%5ɝ-!i?k/Tc JڦskQ㒎g[րVo{H8=`5nֈ=%eYO ,󆇌H sS=LK(:nO"ߏΎ$zVPϲEg7 U:˷igV@xB;K9:ZPpO,ZVbi:v9w`J_̯j(o\І 5 9 nr=8 Phͼ0;YOPr2y++4K.pdg/b}M&$0gy5O"<{C!بDPÏ~[dFD^pR endstream endobj 63 0 obj 3546 endobj 64 0 obj << /Type /Page /Parent 757 0 R /Resources << /ColorSpace << /CS2 766 0 R /CS3 764 0 R >> /ExtGState << /GS2 778 0 R /GS3 777 0 R >> /Font << /TT3 765 0 R /TT4 107 0 R /TT5 106 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 66 0 R /Thumb 724 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 12 /Annots 65 0 R >> endobj 65 0 obj [ 118 0 R ] endobj 66 0 obj << /Filter /FlateDecode /Length 67 0 R >> stream m7kSmf|9!L"_Ǝɽxy5܅!*F=iC @b ^W'0Z:{1h0eГ*Jk6rQ=(.=@ T nY~/\Y>hڅ3I c$8_~NN)lT}}SD4XbZ>;C+6.]v#;2lu+A&|N`{_NC㚲z b z\%\_@4Ӕ,3t1Կi,Y/g]nuD#o)Mbh+˝CcX0\2昍p kкN~*sjmgb݄&Yd.^(V EX2'ЍK=ϖf:;n\mB>Ojl s wmoBΠ}D^D].t3|t;l e*GOy*\ў /Rgc+ :2 ύ knROe}:'AeF_j)/Ꝏdl)n[{%7 ́Zv|6;YfQEHgЖ<zT,E\m|k?0x{C˰q/9ksMQݞ઺%?IY}H1 J/<$2&9eM}%}@DVMkT7u[.6.\yuV<=H } y6MD"MwE ;k[Ըۢ2Q"hC|ņ@9DΒ绚TBlnЮOSXav<V]Id(~<w0ih׃b|̮8 uצC-M:r/u$ғ5:7R_Xu&I#u |@Gr_{dZy7n% RRٿrG%bE2h4[TKz]:hEVvF M|Ɯ9m׶ͫV\Fޑ:K!3B+U@WsH8U0(Oѱ{o|@蚛l7rE?rQ V513 ֞"gvjf6Sfbk +Ѯ[<צ Xf׏U"5{Ob`4M5rG{ ң9$и=IɛC# JXQɌWVD;,/o#F+xssGg9Br3Ɛ$9:ZV!| HGlѲYoRR ff`$뎘o_nօ-2,tFVteHyk;F 赩&֮ 6Ÿփ3J1E:߽n?i͞g|2I6=lj.Υ}/1j? Nÿ)Q՜Pe)!FHZ'}Qw#n|"C& [2XWbn(/ yچ 3BRݐ @5qO硔nr! }+ вmn#G#͞hO4bŘ3Ipgϝ)p\~Q B8 #i6e49{u u+R/JH킌a >ڢ-/cM]K~?԰$l>n*doo͖gP[n܄ųݱSMaHߒ| %V@kʯ,v l/T́P1^!)26#{k P"ͽ.>4bÔMޫ9Ah0<[E3߿;Wf_C/DksSv/1F~w #NŕvQσ4[&Ӽ bS-"N6޲&i9BaC~"j[UrTf%x)Ws\(ގ7O)2g#2߹cXA s^ z`WF#MHLwGFssXAFb2(DH_:oDw$Oh1HA/8AvXw# %;%ԃh0.U5u5œw?I #h.^/]0i%Ҩ)../-EЩbP"w )lDx+q{6Coc18dfv5C$^na陶Ij%332MWWc|W$F̉ 0r/W.*߱.U/E {u3I;/wgtn+?@摋{p_YӶ==ds7o!'&xҷ3 y{ ]!|3u^#ak+V㘹5$z@*\5yKhvBa7>(*>sH5`" t6ⷦblk6&ւ_=+a3e l\n". 1A+z$̆cr j 7?qMKۯlxiI_lLXr{0g[R<1RWMﯺ;Ð  5&lޑrEk¹T}гW5MZ3B ePf[,Gs"V+"zsIʻ(o)8 4R Cqdӱ[Vb K3/[* fRkޥ SNw?.ίl+O# "թĞv5(y[:$k||&=\]4Ho0Tu6ƓS}Pv-fb]d6:l6d'W-*qQa].@ݳ0IR&YGdv}1N'Bxݤ@'!$H{(ښ,,M..Bc!8J1ƦML9q|wƿ]eⴇ}B J5JyS:3Cg@#J橲R40,nPEwR endstream endobj 67 0 obj 4443 endobj 68 0 obj << /Type /Page /Parent 757 0 R /Resources << /ColorSpace << /CS2 766 0 R /CS3 764 0 R >> /ExtGState << /GS2 778 0 R /GS3 777 0 R >> /Font << /TT3 765 0 R /TT4 107 0 R /TT5 106 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 69 0 R /Thumb 726 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 14 >> endobj 69 0 obj << /Filter /FlateDecode /Length 70 0 R >> stream f1XJk<5 Gy8c8fAF-I&jY#y<[fKzj2vjL#Jo'eci6de%8Ee&p: G㼰e[F-qMR02񀍖Kdwmy3[HT!$),]M/ze)uy|BG</nL,(3e**y6Q[H LJc1zz4 uA҇ՂON9s~9?&C-ypTe)-|u4n%5yDŽfg|qOLb#=˹$rC9鮾Rug5ץE ?wꑚ;SB3c I_+rJw_>(FJ_u ϋzӞGCس(zeYҪ0Agvf\w*(h>*#+N.̌h;ړ2Qps C{r!瘨+7[p7D`']%MLI9uhw;&u6 w^se#bT;%x]fI*ϐh 3?%1?uc)T4Ib!6|\JD-g Q1Eze-իjuU8n&I15-'=/&ۮGI'1NДF{ozQ΋$Zb§jKVpN"0|=Ö~3jI Ƶ.eU>ޞt;1#D΁w<I=4+i:À# aRsVGύĺt#Uq|hۚ{tM[18~b7|/Ƚ"yPVԀ hm")"UtU 0KRNd{|w1 PqP\*(8_nyw AULX,>g?j0ŷ_?JEdv_\)9*pÌۓJJ79h,*?;qI:PmLB@im&=de̷ ~Mx-Su35<6%j!y$ Qu!/^TG~pJ3Ӎ8E?w3կᆁ@[? X78DUI|lFJq3s;LcoV-u4)ބM b}S*[-ۈAnbVMZ-YwPAV_b;(E IP؜PTPHSlA(T0p]4[w,KB M*I״uCT"T8suEKgگ/gPmp_ʍ贛ލϦELc0C닐ٮUfቒѫā FvH0"\aE Y^N hk.XX:bEqD{{%* u ')6̔wZr/LTԥm"IeE%E= q%h)2aniR_ݱl@&śb_fVQZƹ9HDURfVJz}-XӖ)lKw8M!.Gk)xyt+ t~ilz"bG&o"Zo@tA;Ao/!2"4.,?npx ^njrgTpӨn4tRiri73s̟YtpU=:e#mcz(ut-yVyݔ3LEz=RZb/_o\xG>E B-U뎗u1y=cI/+I ́DAI( n@gi mFX[v[drۑoJ(6U@2H]~C "ʬJ17ι ?,x]e$U/Z;#Jtj(o&^~ ։buLwNַ==zSU&]Jц{p;Cuɼ@DR2<mSJNh<+t/ù !Ӗ0Hf #gv_(Ljn9!_'l:xD_%f[$$ endstream endobj 70 0 obj 4570 endobj 71 0 obj << /Type /Page /Parent 757 0 R /Resources << /ColorSpace << /CS2 766 0 R /CS3 764 0 R >> /ExtGState << /GS2 778 0 R /GS3 777 0 R >> /Font << /TT2 765 0 R /TT3 107 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 72 0 R /Thumb 728 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 15 >> endobj 72 0 obj << /Filter /FlateDecode /Length 73 0 R >> stream [H6=+J OI9`*#Q,}|:'yz!=&lc, QF3_|g*ba>,r`nv|=FVJJ$Lyz+qDh$Y@q.J6~lۘ_uMm q3+Z-$hxnM7BLe9[CE9.$'68X5]Y|&}2!^fCMOH^SѡjOs@ r)pzv võ/()/Z$ X"\od ahX%n$jL1a{ubCn"J(s 9Hx' ӱ[V+Eq!?Gےvi8ꆰ+.?HQ`t>w6Z%(pv%>h 9VP<䒠k6[ β~LmGCB [9* 8MaUA{3PHBND ڹÉôn!?W++!ɖˎv>Kmpos|+ +?ue+,HFuS<̬`RXQgs´,D")h6$hi#I8Svxś WUtvƠ5rjQdBZw9_[`/ȺՐԀESh I1e7&a{V-6]ۯ=K#+{uҳNB+y67eDo ղb^#Ca=I44DYkL .SъWTA#~<JCk72唅 ̳Ա(o5)Ae˖J%UV(S{Nك&Yڴ{o-T_ z̴fXGM:˶}A}9#)2wwJE g[ j-̂#) 6!zbPZҰl"=aNƐ֬tR\:_ ^}\r$cL/DUE+!fmaP:y_ 6lӐb*J߀) ŖeÎP6|3u0es7~S82gq8 !T=V}Q ^NkrYmNl P4>97L,CNzCWF [zW1RLo)\~E4̒5)GKsc/qSG_KhD:Kؘ -7@4C\n׈E ą: qY˧\wݞp͈N4[<1 {/7 t2:Ȇ[HTpYr>kzg4&dw[0G? ֣ȷyx6CB 7LW3)z;_vlX.Q:N }9wqݠʥX tFG V3͘yj)njC0+69b#h҃c"4T+$uy*3-vj99v,j_<^oA)='0׏ݘଥԵ~I6H 5{!41R;4!;+tv=OC\|tWFjQS+*MGDvAȞ1vFx/\bg]g%_%gaJ_`3ĄY͙1Yp\4 7O]MY=k8 Gĸ|}:X_y ޵Y=0~ %|]"6]Oΰ*c/wPܜ#Udd }nZk!l{Huߌ- ^0f0wmQV 3u6 _DK)Ƙz*Z J31-6&jJc;cC${H֨?ZU=Vq` m<Ġ̎%zX]ȿJaXi(a82nV\aoN-;y[_w~`k+{@6ƘǝjNbY*.HVڽUUBL鵁#a.\c]Us\ k*~^պyx->r:(qb~".y(6oo6 ZS 菔ހ>~Yj]C檦;8;_?5 v ݷʯƿ9xK߁Ts!nȊov N%ݟ4MsFQqtTƈ)3pi4Cj=`Ft@6{́Xq˅V JƙWWLYv(R.M#id[y|x䃥5m <︑ .0 㨁vM秩7gg}G|H}7פgvh"R12. 3~#Ȼɮ5AO౮&ysXܣC0ܴ1Q~$ UdbQ &qNt\:]A"jy.n>n\&FY`u^ OAvR7QZr2:]o]K/W𰰠#`rv@`"̈́QP烰n\-qd'ADO@GdPx1s `ֈZ~7Ē D08v "_וlX鵯 v!8:#@G zՆ^^D}xb#?]ϔTM#H^zSVh: &wXa7sX,ҭ9?[.-~Y kPۮ>=AuVM=_MC(fg zAvfn}WaFC˔*#V!3a5ʈuM{*s`˝BQ+FWZ4!\kξ[§1 uM|kvqR 0-L~]^Tfh (jYofb)>l=aD'n4Y̟c] &ތbQ\JZ_es}eꀴ+CZR>&ˠ q%mU# ƷUrA1ɔ lVo?=Bb6 i>lIt gqVxIc\ &{ hS z,eb3 YC_H+ <.GRi򥀤!DdQP&:fϹg|=r@mNz?~nXɠ$coZ7X]oyP*d+AOH2Ė0zՆ8:Fc"BmzE协d>S[9An CfJeoZz.o7Dܪ9XP2et>T!r]:to;t䨗Lyaȸ(k8i5e\6Gnj;[h>4x|}Wcp^HJͿѹ:JM5Q!i 6y":㢒)"l_ Pz2hsH1t`ZI ~>y XZV  'gVBXk"r8[I v4xMf{75>Tv(,k .Լdʘ9v s%_&y"Q LZM6(I*b5`7kTY:꠫*On,JU Y<#D'aCLyy0"«f4^ՋVv"5W ӓScBڛ9eېQ'ES/M?xcuZ7m;LKYV endstream endobj 73 0 obj 4510 endobj 74 0 obj << /Type /Page /Parent 757 0 R /Resources << /ColorSpace << /CS2 766 0 R /CS3 764 0 R >> /ExtGState << /GS2 778 0 R /GS3 777 0 R >> /Font << /TT3 765 0 R /TT4 107 0 R /TT5 106 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 75 0 R /Thumb 730 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 16 >> endobj 75 0 obj << /Filter /FlateDecode /Length 76 0 R >> stream FLKX vMF;'a%7n!Fw(ĺ+0~2u481弬D~6_L PtڍǗI [?4EyiM?f;`"#*aE8eI|0YX#yC~hcsi 0CC([v2.C ]|_X#+ l'i,f{'L9c:~ݱIПѨ+4QP՜2%tZ6o۔pVCFGC/2dCDUP ߬'= +*720ïbɾo F&ು/)M<#eqqT*HUnABǟ3~6c0{\/.sUbE`[6TH ֮jl`Ck#|?Li!fd~/[^2ޕF,5jV\hyDAO!r']j74%(Ln&7/T{p|IzuKeD*+xc\_S}Ćq[DDϟĜ=D^pͫ,Ҁ9U?pʻno}JYuyAbUhcٵ{!rZSf+BnXsc}+].6B aI݌0P}4Q̽GJ?IF"?8QD=nx.D`oi+zSS3[79q]bhAﵽy5͇-Wx]?O'Av[,153JGI~P"}3U6[[e|̭/tD =ӱw81 rJYƉ11<^C׊TQ9ekX~Xu- zhjm^?j mƍ8h3Xr!4Ơ"(k+o>2$.G`j"hZ\{ݲdfRm^oC֭<2_Dś$ ʌ됨43nK5sؑmT4 )/cՊWHwAJC:Q KVtJ{} ^6&:U!eUy٧Ϸ f~s8RBJKj^ F9M3/BR/ȱ~L4ZɉeKc5X`p#uVz0?9DD7Dmsݮv,d֟bvvQ_l.e(ºt`UKw\ض]]AXA{ $4vluw9 RTb=#d#V S(LĒC*wZ!``\22> G2Z1L.B:D0 .,fv09BԪ 0 5jZ'1X^3r]N=PnN? fN GeEѵ'x9&ꢾS} CK:+"@d (!KlZgYWӞ㘬2Y麟@Fd6?kkϳ0R)3[F@`@$B$7;5sh_4ֈ>lg2SHtdM4~=gq|Gvu͟qφUP㔌ڇ`.HJR˜3 3fChvQ ƾh8Dl>rR2ן*'crF(()ԗ}Ro;#qť+}f )B>F>Zτz)~Y ]_]Rh"vâ:h?SլْkU)rg_ J5 `*J_ V{[8 4/$h1W (e6Ln_ VM5f()=c&S( $eπJ޸N^Zo u)ܩ+B 9z+fiw2hlZw"(VaEOh'&fT[ @lKǶ)+wWX)u/SyIx-w <6]2)a%g文d7d#*8EJ@մŢN5%a#x$W2FIAJ+v) 2+ds}e"j?QGQ[ {USʡgcb8 HkIGpZjv-H֍93SP{YxAܬNX=/;/a8WA"A|$*< -,*|DYX4DԾNץT%IVS$'N`0n7k9Y#xro(ZEF&#ZM<=$*ЍVd*)94o"<Oˌ6?\R{rHlTi4c}PiqўXr_):{C3HoB~.X6小eJМXaD/c M18'Ǯ4܋rvqASҚww ga6,Y80 TĠsQ(kwI@k)좬Ka@P!A[-b#+,MoGS[8ب [B*z{bF*WF%Ҫl=|,!Eg"f9 ׌= w.hpf9@;-Wq;*b1ÏyGo^G46Qa1Oy0 S@a2.E1\3JeTQqW͖vbx3ZcK: !,Z5Z7E)M& )&C:"->ig<Q-w}Wly5 6uKUs2NLLE7Fdq"l"9U+&Sry|*&Fi6 e{'~]>D\޵XTlPq'mrg:yHvx42N,`Imb2b8:u(F#L_kIUWa.du4[iy[;qʛڳPS&.‒|g@CU SAi՜t%Rq?:Ne'XNPP,(P_SsRz'2($H{p?R/mlrf4m#\P-FI̤7?g|{o3 ~όੂvV@%I/Zђj(2MVOftKr' }B}/ C׸+jgLp$Yr670G`k1jkjxKy4rBj9@ dщkGlK3Q+Ĕ)OO)b¨HuM\3|58+mZx3xe;oH^ mr{%3f| 䰻 ^%/ICԜ1 endstream endobj 76 0 obj 3815 endobj 77 0 obj << /Type /Page /Parent 757 0 R /Resources << /ColorSpace << /CS2 766 0 R /CS3 764 0 R >> /ExtGState << /GS2 778 0 R /GS3 777 0 R >> /Font << /TT2 765 0 R /TT3 107 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 78 0 R /Thumb 732 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 17 >> endobj 78 0 obj << /Filter /FlateDecode /Length 79 0 R >> stream ~sK{^{ SH/RL^n5re7"fy|o ()c"0WWH5 sg-Oh cUub1jT)2[Q-B\§1c=0-f9`/\(p"5>(OHs lu2}ݓ˰У-Je^1En_Q^x`_1iޯ|ET_@{~+x{~m7ܟʁZ]Uv ^@Jx[lbYЯ*g 2BN9C%jzUt? '%.;=I&y #M-Ć,F|())Lӷf~ݳ3Ŵ:dox=JMs5Wi_ endstream endobj 79 0 obj 443 endobj 80 0 obj << /Type /Page /Parent 757 0 R /Resources << /ColorSpace << /CS2 766 0 R /CS3 764 0 R >> /ExtGState << /GS2 778 0 R /GS3 777 0 R >> /Font << /TT2 765 0 R /TT3 107 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 81 0 R /Thumb 734 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 18 >> endobj 81 0 obj << /Filter /FlateDecode /Length 82 0 R >> stream KeJf{5čhN=f?~@+G:ԥMv&Ieમ3 A^sY֘_UL"qG88xη2A R?O%r[Ϙ<۱1*.AALpK9M;P{ȳ9$qUv+'~ Ҧfm#ts Gvnu@\S|ɳ K ɿ#vqqÔZP*̜/u)+7AnDQnY-6l |D -_ U iy| ?_wb3)%;)>4)rxsvQZ];֢n\ &-=8Wc<mRҾ0o8xD . = @8ѹDm|;,Ө &BAFar06vG0B/KBwNIuz32='ksb4 UJiTf2v2TWN*"l h:r)61.k%yd@g%wy8EX ;vFH1b9<?wʃ`M*szSP6o/qo.34I5P$vތ!>RecC(e7 xc~oFH^$>%7X~ +L>48`Im&4E~TR#sh(e`eñLFK[>7MZqݴsMdݠoУ)M5 7 .C~u#C_]lip M-CϠ+mb endstream endobj 82 0 obj 1732 endobj 83 0 obj << /Type /Page /Parent 757 0 R /Resources << /ColorSpace << /CS2 766 0 R /CS3 764 0 R >> /ExtGState << /GS2 778 0 R /GS3 777 0 R >> /Font << /TT2 765 0 R /TT3 107 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 84 0 R /Thumb 736 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 19 >> endobj 84 0 obj << /Filter /FlateDecode /Length 85 0 R >> stream J|ztz3-}A]59,(ߙǑޱRv1E>0pmf8SI8 BDl-EVw\CtV`J_Ґ~k0<\r)Mvn@>8+Okuv&Dy`} k4S΢6Y8p=r?L!LtvJy < 9i)AyTvd}Ois,$NT;G_.YdIELzu_lM-ƕ&H bxZop)8_!fOFߍ)9ky$F[A;^?Tin[|J|BEKE]pk1n1Xxj\Zr7iUqг <7[ 2 [y,_Xe0X>m4dEȰ <tQ1UiAs(28U:Ia~{ylVUTC9n_%fh~s/Y0r䓠m_?YT8]__O|—s Y.~lG^qTA7~Nzw[\I^ _B_opr@ӁXU-u PfQ!VLu@A!}hJHYDT]h )7t ޹/sR>qN|_\KsGfp'ZR3l #fZC:Xb9Jc!nx?c#i/]-PYoĨ[j! !8N|eKGd9fk4&MY@!Y63菙 -V;?}z;2W\YA#(udT8 érziM^u3&#LSv._AeymmaZ@p1yo:Kpb[; w\|l$=o+3vutμCAvkj<[4dѣ^zUA^oGԼ1$]7)ܗO endstream endobj 85 0 obj 1793 endobj 86 0 obj << /Type /Page /Parent 758 0 R /Resources << /ColorSpace << /CS2 766 0 R /CS3 764 0 R >> /ExtGState << /GS2 778 0 R /GS3 777 0 R >> /Font << /TT2 765 0 R /TT3 106 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 88 0 R /Thumb 738 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 20 /Annots 87 0 R >> endobj 87 0 obj [ 120 0 R ] endobj 88 0 obj << /Filter /FlateDecode /Length 89 0 R >> stream V31asViI+b h 㹱 }W.IHMa/EWK#:2. H>li6 ! )c(?ZK^ k&Ng!)N)%S{.& =rM6g^-,0W'}Vû1!ȋR(|kvQ^P&RF wʹu'6_n[t5V:Ջl+y- G]a?Sx:KsGy -dO TV/G,)QEzW]2†ќ]wݬD)h\s$M'.l/'Y[P`64d&>V$/|BJ 0A0+H.bb1LԼ{&آo ޢZ v~9K%k%Hs8:;ɹ_>_"w/E)MH!(?RC!!f|(7 %߷֘_v|-Bю͉jb`l%ıJ!'Ev™{u09A4ŐZ }xA!n~MM"yY&$- endstream endobj 89 0 obj 875 endobj 90 0 obj << /Type /Page /Parent 758 0 R /Resources << /ColorSpace << /CS2 766 0 R /CS3 764 0 R >> /ExtGState << /GS2 778 0 R /GS3 777 0 R >> /Font << /TT2 765 0 R /TT3 106 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 92 0 R /Thumb 740 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 22 /Annots 91 0 R >> endobj 91 0 obj [ 122 0 R 124 0 R ] endobj 92 0 obj << /Filter /FlateDecode /Length 93 0 R >> stream X-w77~OEVF>|Jh+9Xn) _ho}GSB5zƹvǣ7KbQF8&@;QJn,8:Bsaݫۈ1{NX*5A 3DH94A0C]jރ|* Pva!_MbgI kv6NHx8)83^x]:]m,o?H9 2+b|6f;,AӴ\VP,2a|@,cŹ,lblGEѽg,ǧZU8]cv8,V\ L?7:E/qc)A] ;:]i)}ٳ5WZP5pet` - A@>†Ǒ|5H%.qKبճ?Ǔf;Mb.SpW?'D(*rE{-f޷WcG*?g9_z쯢S7ֲg$`6KYK/أ8j9?Ub< *3p9!AwO Y9 3Q1'<3. mn< r3PaƾH~ӁB>LM =l逇ɐk&\br%گ$9\:ŧt ,2zʤL,,Z[1X!RT#H<%+k=eV'5-Qn7y896<-{%XJe@羔" MDpD5QKhϺ¸\"avgPWۨ8[R.W/܊ )z >SÄ$Kٔn: ﭦU%ܯ있i,!|[roriO;;u¾'2zfv+󉃓`<9nv5~zaԸ@b1ǂt-qv P6Niǟ5U)45PDjG#-YsLӧgT97UNd;;޽ऋ/JJ95ɨV<Nj)%hL pD7%H i!ד[bZ%_27WնT(ٞ9}йdմn! i`nO? *n7-;- cWo>snG7§nyD/EgAc >)ρ+BN4BDXDųH/e5l)L#vF!L=,MEdV1̗dmU^ M|s76#?|UK̓w 5zaRyvWɔHUyȦǜܐff`3YpUk:bZżQA$eRts܈{M[!Um_! e>6~Ϭ\]=ԆTM2(< 6(kIsZS;O܅;mGG`. )w~㣉>DSmtC4lB[ȇMn{ﱏxzw<}x\)97 URCV E5Y +~[jްMq3ò{ZyAu5'Jbsd~qrW]> ҒȎpY\Iq}j ?Jl0-EJ$:՝ږtcB wΓН+t %wSI6fwߍTW;> /ExtGState << /GS2 778 0 R /GS3 777 0 R >> /Font << /TT3 765 0 R /TT4 770 0 R /TT5 106 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 96 0 R /Thumb 742 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 25 /Annots 95 0 R >> endobj 95 0 obj [ 126 0 R ] endobj 96 0 obj << /Filter /FlateDecode /Length 97 0 R >> stream ߘA㓻E\Z-dyY{>fl#; ka`~QkB]ŷ6 uv֐p <9vɰ*¢ɽ7mg7Z`hS e)lѾ Hm{;\0҈E%~ ўujHwBlbp.O/94TLbnáÞf/p}L"B|l4DᢅLGH[pCݶY>pөqD(@Gb*dٖaI;'rR A!WN~fd,/~U ؓP'?,Af^H[YShX.Dc."q֣&!]}I2VB5Zn4a ھ'kQ8ak0OL U;ꈱɘ:B+K,1vEbNKڝ"?z[_>_=ۅ#g݌2;o qpW2qT|̖o|I:װ [:fXe 'b``9uk!4@4VA^0 ~]5LQg.OLjeVȗ\`VfH|\eBtwiK gO_ ;D}1~:"YeA $6%l;"߃{W?Vk<q!rbNt{,>agfev9˂6QJ֒ޕ9X8}Zy HjU\lU%7fA%&nV3YK~}+mNmjg8Vt(=ƶsdAMHJzK70 yf W6N-;CFe|sߗC]sty 8dե?('1zZO"||QmE8mzv(d#&ex5Y/2̰PحFc3.1D.eiduT8qe3x+uq1,3{j i;%d/`ܪ/*N4~;A(u!`팧-u 4pc$Ȟh|S9ƍlkxtr#RAF3ReQ^ޠ\.\PJSӒ?eHK.9sX/zݗ_(_QRFqX1VxMOKZy pQkWo#^āí{8vDs&gWp#Bgʐ5(a|TjG jcx;P7ڀgvi/,+DHݝSiL :)%V_MqWu zϛa[yi$Z b-gn3f/ZDs1veڐą׷fN2H]i; QnS5}9%?=T* bMeوm`t7E1.NVY-i) έ)Z.h @QmF~2†/>,|PU5}^=?Ci7ELrJWlj͞Bs=䥛Ԕ 0Xіk _.(X^F X[Z2啱ʁM- Hr7i6MV{- Y +N;Uv&=vo]zᯤu.a 5zu+j"b//o}gEe̠H`NiZ"Cyt|Kn9xHAo$zP,2sa'IB/"#&FpS\xu 7s\o<χתgP㛗j>Ϟ#v+-D95ߵxA1,H԰2!gsR'١*ld\FLp3Qo?Dj wWS¤I5a 'U9u,&VvCroQӆx[mHtk-Mab Hi҉U OPL5w E%~~v d'UcR@B47v-Lt9W\`Šml ǖrUٔ<=_nH*pW/#y q?~_ZS#b1PcIqND<N` ݢD8Q#Hd +f!ivBJlϚl(g! R`^Y4"Tm_\C} -l^ 'h6KtQz얍m4Ϲ%¥~$ W`<T9F"C_O*chË!m:;UZEjY_s"Q U]AӐ.Pè:׭ji P_Ό m4\&g`6$CNw 0[Ov&*,ɔrn4%D ԪRaɖE݂n+irE6ǧ^qp6%l\ߦ;T{dKQr'<W@H ? zC15p +qksZKK:ly #rT<i#xl/SedPOuFCsa&)tgO6Ai%:j/X1e)5wπx^%;$,)k @y[~QEtۗ[ҬT`~ <`跃ryw`xYH}tF ?F#YP-++3-%H#,ϙ끓YwppPeBBN φ˕7k6w Q-{p5#$ȼ13a,Gw0[ٹ1+ٜ&kd8$R\XX*Op8TX -|:$/N$F]mB<źCV7SAIP7fշKEM6W{yvBct/I JIہ /C0LϾGОnVJs/Gse~RARF2edG7^B!}y'&_\>:=,]>nQ颳"wW:ڼ_}h %l|.GtJf2mÎ,{pE{iHF %uSIlY^Ѝ;zPy.ӐOjH lsҍZ9mH q\>~zbEҗ5_Π9{v n"Hv[%ˌAJvwd?%\`MA-(i K {j)J]̈/<[tV%k'4 iU3>e2ǭq1+d}e_HV}Q3%7YE^mU,7 qx:CkTsrϹ?^3m1;Q[X­ᱟY`Eih(/$l8w܃R#ϐ[:Y [I MxDr;k>f}ꟗB 1wAV&33.;q&8=,8ct&5܄7w'6ѵŮeZ@t+M+b|{&ک ѣ8 ) ԇa;e;,0+Pc19*۹_zSt {#`Q@|cPh@BUidZ-j8* Y*!UT ˅tۀ^|1ꉬ9=Pnda*? YqeO0;w˳ +#/ $yl-hO.ʁOyck ?P Rq0J'e@65I9Q̤r> /ExtGState << /GS2 778 0 R /GS3 777 0 R >> /Font << /TT2 765 0 R /TT3 770 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 99 0 R /Thumb 744 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 27 >> endobj 99 0 obj << /Filter /FlateDecode /Length 100 0 R >> stream Pt9{VѽE${qQ`NKt~lIo_xÌɻ w:)ڇHBiԏ}#a`i_FI$4?aIyOHg'ck%CKv:H#?g%0-"%_ZVdQ!b J!_@fuPb4: B΁_@ζ_XMpbg=#i0{FvN|M!gR+$uO8h'hI ̵CZ3$a:Ҁs%n~Gq|JT+k >`zxlzu^!{N ^]re*Bɿuqa0e=ថwGxwZxY) Ta a/Ζ&0Ft[`v$:@'xI^ˤ_0aB.J&]lrrDORj0aT8Ks-'|D+u&\>9R+] 0b\6<*"5W_Uie+=6"!0x$H.XN p`76{e* J;ɧ'R #"w Dlf` q[s55H2"w`TZוe:Ql7FO8xٜd] .߇kOg`z8Yy@!3)zR#ssbE4mNRaEЏΙ{c7IR|$Qzbz6MMmvabϒo|<Ųvy#ŜGoϔ|B2>\M @ZAj`F&7ȉi3CŒ n@쁌r3X1pVHf U~H0a`fkKb`&a=F,^*s,Ĩv'ɏ[d <} Ce-)} o–^lSqAg[ l 065kXIew(O]6˸ 㢄!mDg[c\]+ a֑qnjd^#l!Q*i^ALr৅~LTT7N3L0 ,8U/stl\ ,IuA ꉨm·>$fcrCpc1+iaF1a,}[R.72 A[5EsROk=%\؛?&kߪ(X6TwI?ќ/>߼iĴضXNT4W5ٍO#A gaЇ-TQ>SMr `Qb-sx0l70ѡ?8y3 Kl^4H]-J-e:֕o7y.(>Et`_Xߎ1~#oŶB9"*]Ȇ koHQ]τ!D,`|j_15ٷ)86e'Fo}F?Kn"7(WX?.K5I?( %[ TJqr$e^Z;rKX *H#gÆ"Dk+~3S앚ŏr]ݯ̩H!-m*S10j&ʭ,åTo-Q保]7~gn?-!(x5 X'v<=ݴVpy=QI7W "䈌A]䂝*vT`53UOcOL %%֏l.8nY!G'@9LKiiIqN_ H|aR\^0sp>R| .+™A)qL W QeE7ASxt>Ieă Hb&y{gE/SgxEƗlT% w%(}PMm^vk+ 5z&+]-Dq\'[:0:puYW3nW%:e(73x&Eq35rʶ2DLVTC+3Dhk+f_D^M0‹[}ٲwQΣ*%[SW~n0?˨mc,Pm{&/'C选'l8z"ZԼ &\D3|ac*ڗ2Qޭtn:G8CAe`oMHYP]AuHm> /ExtGState << /GS0 778 0 R /GS1 777 0 R >> /Font << /TT0 765 0 R /TT1 770 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 102 0 R /Thumb 746 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 28 >> endobj 102 0 obj << /Filter /FlateDecode /Length 103 0 R >> stream @gpS\h4T+)0IdJ@&ղnzU/1e#UOGi̵q ҐG%o~eQO<+ <15;䜈QLSpK# )WJ=y右e&a(/}7K#xOF=OsAeIu=G06+)A;)M3[\3fg I(d1?*-cTfuxWɏW@(/@d 1 \$߷ʯ'ŝFhk? ɪKHDqpAKʽpq۴K3`;fg$OKvb LjmP%Ҹ^ͣ;"ϲ->1,lt场\넵OxFCg0*LX_B>5-PV]!Ypax?0 O@ARu0tuA_IZ![SaJ3':Բ^&KO0[*l9~`_}Wy$>U"4g/}U:qK#q]ta}g6^7iJ3АD+z0ͰxYx4U>O8" z"ypc^)"k~@8:"h2̤ka* endstream endobj 103 0 obj 931 endobj 104 0 obj << /Type /Font /Subtype /Type0 /BaseFont /MKAPCL+SymbolMT /Encoding /Identity-H /DescendantFonts [ 116 0 R ] /ToUnicode 117 0 R >> endobj 105 0 obj << /Type /Font /Subtype /TrueType /FirstChar 32 /LastChar 32 /Widths [ 250 ] /Encoding /WinAnsiEncoding /BaseFont /MKAPFM+TimesNewRoman /FontDescriptor 110 0 R >> endobj 106 0 obj << /Type /Font /Subtype /TrueType /FirstChar 32 /LastChar 121 /Widths [ 274 0 0 0 0 0 0 0 0 0 0 0 274 326 274 0 0 0 0 0 0 0 0 0 0 0 312 0 0 0 0 0 1000 593 0 641 0 475 0 720 741 282 0 0 440 0 734 0 521 0 556 479 491 727 0 863 0 488 0 0 0 0 0 0 0 470 560 458 560 486 280 468 560 245 0 0 248 877 560 558 560 0 331 387 317 560 0 743 450 444 ] /Encoding /WinAnsiEncoding /BaseFont /MKAPIN+ZapfHumanist601BT-DemiItalic /FontDescriptor 112 0 R >> endobj 107 0 obj << /Type /Font /Subtype /TrueType /FirstChar 32 /LastChar 125 /Widths [ 600 600 600 600 0 600 0 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 0 0 600 0 600 600 600 0 0 600 600 600 600 600 600 600 600 600 0 0 600 0 600 600 600 0 600 600 600 0 600 600 0 600 0 600 0 600 0 600 0 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 0 600 ] /Encoding /WinAnsiEncoding /BaseFont /MKAPJP+CourierNew /FontDescriptor 114 0 R >> endobj 108 0 obj << /Type /FontDescriptor /Ascent 1005 /CapHeight 0 /Descent -219 /Flags 4 /FontBBox [ 0 -220 1113 1005 ] /FontName /MKAPCL+SymbolMT /ItalicAngle 0 /StemV 0 /FontFile2 109 0 R >> endobj 109 0 obj << /Filter /FlateDecode /Length 6921 /Length1 10652 >> stream pRp׷iSQnfҶ)Lk++ SL1 %ȤR&CHZ\.#&IBKjj vs0؄>7u+1p'yr IFH8ːgXF hP. 099Q$pX9օjA N-2}wi285<i7>OɰB,c؁KA@`)rkM{%d͠E$j f?RhoaxL,C <$N=+hU? /%P; ~uQ.X3L,,CC2`]Qb(*GGY%:.8: HŻ*pSqc9*tvy1k19IwuA̧>>[:C.|شpv]dHx&ypMFvSN#X)sY6WBPTA*V₆.KLЦBbʸa=<䏁10[HzoBE!w"`yME9ap* D|ڑ[%f%y!)^a]n7 }_ }l` &o* Ke^݉!q˗C?Mgq'dC˜j )NFGpm\#dKebNe-MwƓ4N߳ ̜ 9H "@̨B>iB!}0!4sqkӀOꤺC0zc6Xd$ SMeHvufkFy3@f3X!A5 BoeWXjU7A0ZL!3[ 3*3H3]9mP6b:y+n\,F80`KubV!EMKml10WZ9y2_d]y^y[l!@jG:M[*29;?𒆴E8dY7fHz_s!?;nt h2\ZrmIj!htHa_CIz$ִZE:nXdR㎫xXJJz'd&怢#!l\>8SۋhnȈM O;g_MQvBu؈T\ !㊶?zpj"1Y*ؽR|秹7gL3LA_n{D^^Yh|H~S\ba;QOOlwKH{ YL9Oš|HPqvUv(<:rĊh!c*Ko A9ot=(JkAw1'1N0ͭIB WE(o(eH|N!ڏ?Tb0OKԋyH']NwCg'+B<Ѳ٭.\UBJ(0e!+(obKptB  -vZ YMy֧ &7:#>;͔5.2Uɘj>n{î.ؚ뼷jH 3mJ(^m&u}3~ijԜK$K@ QY6 /ĩ]W8}}0 {,5lעԵj qFfŏJY< $gꀝ)*~u[ޖ z HP?0W Ը$73~WYx{iUF Ipc╴@0(>{}lqsgJ &c'XqvJ l)gq7_iq;"G <9Cͺ@b6VCq?:a[b;PۡyR߷~R] y9 vxxa\> xH(i|Y4kbI&^n r gqLà2 cQ^y#yFVR^%?<ۻBVXR]-t7?ړap=,\Q$B|kJǔM~LN*T?ׄ='D2(O~ wDexUaJ.)q&9kjGҤB(4֪WMO5H97,R??/#V @qC\"cT˵萿}C"Ř-WjJBsнaҍ[~8 x$ ")hF<NvK7Qlcd^^яh:^[in(/WEoT~GC'8iciZGb:V'W1l5ri+UdnT(Y͕]ǭ=[u:ã7%.k^k]033QyZv !xpSs -N*(> T(XāL0%xL^ ^uX^ˣjH=͟Cq0cM4_8|";,\AT'ެ2wEb\Loo-'d-,DzJ֡,HZMO ~rZ!B1!mH]24 ~ŕʾ6v+WnRbQ__$}ٳA}yk_o=\tqov+6eM%,#WPm qB)S j'BE!J*PH H]Z(;$v( ~_e^|f-+@ksc{T˾%\&c"=Նs,"8ոhI!L*< =aWHf*M@@5Kl^ƺo=Jco%!vSnR(Sm51Sօ(HõwZVT].VyrZIo?tx^ +hEHfhT orc(^@$T]~g=@L:>۫2 U&F9G)ѮREfDC 7iįY r##Ÿ^&־hǤ {,ZNZr]и J3`d)h囕j (V7e&DI+hӡI=<~=@ N 9ӨX8[b-Z49k̡ؗzX Hypg(Y$̛{1͜w;VM8<:ZҶH[R L)^ @{a6t5f endstream endobj 110 0 obj << /Type /FontDescriptor /Ascent 891 /CapHeight 0 /Descent -216 /Flags 34 /FontBBox [ -568 -307 2000 1007 ] /FontName /MKAPFM+TimesNewRoman /ItalicAngle 0 /StemV 0 /FontFile2 111 0 R >> endobj 111 0 obj << /Filter /FlateDecode /Length 8101 /Length1 22064 >> stream n_q{teэfG%/]D<\|^p:&@GS 30w^PI0 (E yN#\>s3@0)M_@Z"7t=x(r755^8N&;!K$"47[#snQdG> xTkHQU8dN̖5jvvw=yD QBo(e:ﻛ#6~Vw#C+ 8в5ةie}$zZ.ז4}ZY!#afQO ǯuC闉ʖychH dXjzZ_ r-3&2̂x?{w՝ǻ[}ak;X>r JG!.H*-H;̶ILi^ +KmV8')5=CRYb\ WdOlZDU{ 7O_=Q忡0~&ĥԴt%āL! %_c8;WwRܻǴ⭱7 i xY<[]o(q5S =æf0AJ6$ 5hX=t8A?)=A#Oӎ! < ~젨.V #ZIGg2GVɖ#Mū C7wc2ޠc"#N͎Ǝ0>EWeAQ=It~xRMd=PwtgԌL8yd#h/?'^|0C6 :Y̝^^2O-$!r'Lc^d?icoCBc*tzD5ھ[MD]OIy!"/l߇bC a9Ta,R ◍op ާ #67"{PDg  ̹7uS0s-"͜ǮmPud7wqm2A_÷曃+ZV%dUFOG2Yu0rZBu k@]. e2̬Bj _VWf{WK{+SK߃[QЪ`H,?Y/G @X]?RK}<2T7ExOkKyW!n<j!7mMh62[{Pt6tKp)$c3O f:<=H&y5H3SD4$#_܌R)qТ6/u1dRSh RQ%]y:T0g3**).$9@^\i@ &96vs UA5>?I<^ IvϙB@~ґ mFhK78܀H43-2ϪKOKFl>֌_5Au)s Gى[wS^kPC1=T/ 2E@;Ť+2lǭ؄W491/ML`]縬fHeoC<{M_Ze&P ]ZavF<;NG; %/-K-2VvHy\%Gn^HN ]z\ֻN^խZCŠ-&[iAzT_lD!a$М!%Ҏ|S iYr+c(TA=:mB{3H D2;:>V&6q*U0JW) M4S!(z5?&{ƁYJXKS"͚G|`=q#`qH-L3Ji dq %ޞobAƕf>}vDSC/`ؖxğo:H: ~7"e%ͤ Iz1org@SmOd,5+s`M;kA/&͟>q|ͼ E.^rxL.5M嗍=UHtD&<]!p~ܴL}$ƭ_3t,JU\]Lm #MߪQ0h>х TDļd̗=L+ɜ%4#¹<=W:5j(tO8b\X:bћmc Q&J8Ů93^Cy!Vމ(b O|*S:QE>&Dalr}ߪc?QErBqQ2 ȡӛ[zD$0X>! Eq:(Y#|5?z;WKJƇ߄zF 5hV`Ɍ/;R'M-R'!J:LHk_ XwGaBYaVxD.@xGvOlsJlMۜY琌N@wQ?2rMTB훲2zx'P)KCC㛙Ʀ(o5:R]3eY[Śl\iPHpő1^FYo1ʙ /-IXo7n2$e>+cA˝޵kUgu3΅`>=2sP٩" Qgٯ@^4+ w:]%4ȹ)9k?(+O7{m!{Y33aFM m &Mtie]L~ЏneXVQhEOZ^weNZJ:}șxMަ)0F7jnb ZIS2UI\;c[ F?x? 9c`4.N9:Jܙ~Ld h$k6~g~pU]yAq_A?lX]uW\ 3NRiu7PW/dXQFy XH<R{zZ},q۬e T6.4v($ WóUGbo{K#ɨ(8XJ|&NhxG+o5ep5l _`.ƞbǨA{ 樾g_S3yo\^~lbM7x{7XF/UK$0!*!ѰrePX B {ji%eG~ܵƨտT*p\G*f,ؓe r͂ki4v0 ОH]vHCRCO{ YL_S0ScǓJH!Y٨{gf>>i)bnXsHv!/ܻ]63yu[8?XT,pCl1zR>H,iNN LN8ђ~N;SOWso$?xf-u!{QύXp|lLLґ;5})HeTc)e> <iAP.GM^ݡ\9/xV%a1sE7Ee֙g+c-.YX(HĤH |95,,E89(pb6.cg8+t/6Hdr IiVnS"2L]6]x'E(_3E0;=ā[C|F Ҋ bkҖHae$c֎H)<\n9Ks+00(MO|YWNE }GSItS J}t Adžy56Y_issX_#q %{1á}~E!uu6|K*)2s39.-f9iOt&F'~wP Q ¢,lp,r.YPǵ`bZu|gx L|G*Ne_Z աuwѸkDR 쉎LޖW=ڳ67I"3%٪5lnEBkU0.&[\jq <sl_DQUwvq!~#khsyw\!% !^(Nl W1u7{W d#T0Mn\HB #`Ӑ_3`bXֲ(|(B4ՖUv^E ) ` r"3ZˮZ+I|4C@֔M{zJRln)<|Uۇ]QdkU l:V Aye0[)q  f JO#r"Q 8ٹn휗܎~ڷl5E1mpQ,?{ |\]ΩN]jr,?+ޒצGXCIId2Dꥑ0d6Kո"& GkU4q:`Oϊ*1fF 4 @pp] Dv!qCDZό]lÎk8*&tN:‡C4 Bkkz_c[\|`^20cM?ܷnS`;>@'TX|,ql%N ieX]qn_+^dr,SDC=2{ Q !IW*_fHW$̉ sf?5'֪bc[Nl;G fw.&!Z7 90T|1VmP79wQEcMpuA,=&"Zn^:}O v,)=I2rh}V]jt9$tg*Ob7*|r :"pjY\Tgure8a>_xhbʌF[,j/ Del>e./)TO u(((Hm:i.nY׍ni&kiF ƅ@CwwG5Qkϋ0Dqf)Xa'gI{QRQܽ|t5Se|xur\f'ʃJ[AY5іFv&\R#'պELԩWM}[{(ȳ󈪗UWhQM٬"М))qma ͆eUˋ(Ǚ3  _gFp#m|i>RDl@KS4,PF^)^{@q%!*lN"I&xܢVbe(hHV)5;X45>bP,35YYBC?vRQȰt…^j.,7֮ 3 Pfߒ7=`+hFqa zp?yvJĩ@dwSDӧ -񬹝0`אʠH/o܏)P endstream endobj 112 0 obj << /Type /FontDescriptor /Ascent 962 /CapHeight 687 /Descent -274 /Flags 96 /FontBBox [ -218 -275 1112 963 ] /FontName /MKAPIN+ZapfHumanist601BT-DemiItalic /ItalicAngle -15 /StemV 85.39799 /XHeight 0 /FontFile2 113 0 R >> endobj 113 0 obj << /Filter /FlateDecode /Length 9594 /Length1 14528 >> stream [鶆Yיrf0(e}Q R7eF 8Qz!1i,&-,d2\"DGFYb@ɀHWc܋s=S]V )o-jE51M׍Btz>ʜ?=XAːj+4)VW\W~Pr| uRx GZ0*me.…JZbA.|![:vŵcF h"jg-yC)vĶ貳%aBK^N4o%fѴD6* m1Sjgas0a =FCa$6p}a EE7}dǡ_Z=v_(eP'2wS0HD `"A^_Hȯ&O+Ԃ9m22y}H$˷5]q9TdxjVzA`82D7#j-}|6͑CE7Orb {_hJ>7&967.jXBuJgZy.zYPWЮn:Hk)onC1ʬzf,w,NajF1FVwC~oz {MLAf+W'V}^s5'0(Ȓ8NxHG/eN9/pO/tdd{-g~_uXuYК++ʟ6U(iBF }|SܶK?7?Es\2>pTzevMxk\`,Ti!q_Y`%cpX!/xC-\wکȳ{RnKWwL3gvn{ag =\2ЧSCp ]qI3.?ǻ[' MW7Έ1+H΋i UBf=B4 ^-S:+Ic-X |k"0/x !.,B[)qUOYt/uQy-,kf>5p][ [%o7302ɊC!Q^#Es|􇉇X* 7/Ydqs!dgy |:6>W&D"tW:sl@0|A4^/ !B}"ӔcQԮ&i+%gA88h"9;bm}.w30.umW ;> Ƥz,fz|nL ሣwUk))=vuun׊H>&_f>Rx'm=NaG[vG-yrJR\É(;Z&ՙHNqB:2BOh6]*:5.^1%6&Lk dC$9iKN[j}9{ckG4͖Xf7ʘ_XQ/ MоyH4)keku$ /ѝ=-VC#~@5Pi{#=TT w&L>}IRdܖ$u]Ū1#3hY10Ѐssf!}BT 0o ީ]{u0Hvg4Al8X{_ЋukZR@:1;e]FVYyYXԔP>e8fNRsM ?YF7}[nyc5~ivP+b> ŭv ]iN uZő5Ƽ^ӓe[ԞN[oIG!Qɞ3Wā|ߋua{V@HuE ,6`[Nf;OڣSPE14VYdtه!S5DBR#^&qu'A3c_({v03-ʙMdUR5CQ$Dap I5d+L6a ^`e3jDT#Opӧ:k*y}ލ!ȣoLYVkz/@ۚlݒuk-S{ͮNа'0ŋxq~cc *x r\g|LE=ӬJ86e5*H/<]}.G߽ŞoPL.scYEƟd8K߭D$NhCGw6]1jtI ݍ"~vḩ[rн,x]BX.{7Z.5pny A4osv1r h>dkcyuTZ6~azĽmHޢs'i@˻zp3[npGQ;H+< 3ilgL\ &[$JԊBNʶțvȲ &Kϧ`G?ѣ-)cp ͖@,k:)2H-ǡۈ&vr# ΀Agپ:d++Ϊgɲ"8Ƶ/NyQ ݸ>X4#Ѻ$OYpsaVt.≵ĖK N繗@8Oc ]e3azWBZAwb7fLĥG|WF]+E9Ñ$J4z3AX=>W3]V `BW|Q/MY`{DS?iQHI2MV"/j$ FGI7 sNj61ꃎ?I 8 ~^<~cD7r,Fw鬲y+TοwX~@=-y@E\;)sgm&LhdOM'-뎼)SYy6'jyH[0&F^GuDZZ@9{=fPH|/!5^@q E9brtjvV~q{+emu;H^l*Qҹl*Dʱ"αnޙx~˷BU9kt%Wu<΄g]gO=~m\QO( $_+@bu}I=V+%Ӯxc_a<)L>N2c=N"ȅ ø> ~"=B{W>5#׷fE.o]poB'@l k 'S:b OSdGU5(ft(Ptp8K p,m:)t'υ7viIOqgl/Xu lMΪHYѺFȇ*xb\#?L/hvW-u)ڏ mPmL Q&ܺJ ;ACUe dIeHt6kd;wN⪴fUO$p< i0bÖ&k TLE,Z(T8m(èG,'Y<ʾ~~PyAzvfkG_7QѢ/ڇ*;C/ MЅDSUlŭF@) ?o ' ύ8Z,Ϻ9 LvVs%9.m]pk58!5WR)G2I- h:qhDƱd7'ޑ3B5>: tF6F~4I| fxV`8YJYm뤺p x2Yao;:\5/׶CDymGuNf}1+{gӥ.U館҅Ѝ4XǮF+#{rk/c,{~*ՃwV `ÒHf~Y 8%&h@? tɃS=!{(DR2 Z@I*r-Wtn8Uw^9jB(D|d!ɸ좚ҵcv7AJ@[!oc6`.࿥T68}H6>G#xEs7Kt}96#ش9M|S%ɯ%<Zo𥳐 L?rͶJ$7p:BZ{We(sR&֏ #B? w462:VnY i@Qx `uBl+DuWHҎr0W,lHo\Ӹ9O;ז5* 8w-&U>sk>Rz^X=#Br f"&Y7+CK#{g9E~PuiX^n4&O?xhq0[ Q;*t |hI/rɹx8/ +Kfn}Eg0Ӑ X5Old"N Pu_p~0\A1QD A'i$=E}h៻46Z:.I؆<&ZDDww3o\tD!ؐ}04,8I`-=^`EӾEF+%= E:-;!Li t~}f`4vB}o1nTq6%n}g骠&DASasxw6h촶Nt0*bJ57>pиFr{C3􉇺%O%x+?(^ܝYг^TFAwcrO$҅ŰNGgt&8Dh20r]OObcugה$Kҍc@G Ae]8tv_PFzm#N|UQή$SUz}gev`K&Teq%L%+^Wnn[ 4NEK~ cfϺc+,H<;i>GYլ8bVhsOȧdyh\>I}@dpT[UFI j_)Q>2I[!3l> !/,\#˜})`R'LmGظ/Swҍ"eBPU.ȗFȷ9B>.>65z~f)R4oxAVY7e4g\o7Amt`φi 8J *s%ӳ=%Q_/_8Mi<ۅUwg[9z\(p*ރ ݺytL'NZ[o>(QYZsh.m`ikr,<X_oZ` ճd_ HZ>)sfɴ`Ui)|#_!KL 2dȇU bw[Hh?`=k"=>ZΛ&B hA T )&NBϯa$M4g# ຖ}@)EHPT(lj_'(.hj&?5!*0RⰠĀFJ Ao5 ,0繶+KN(9*YX 9/fin<~]?պt(PێӃVbi{F 5 u rD†dXl:^܏nd1'7 G3+qEYT%'R9nt4r.-9W&(Bvf)*&߃,\r)kɔ =yc[ܩ}]@#_7*0Y%= wI_.~X.?dˆF|RNi6A2n)b$\20EMԭ܀^A&h\c5M9q>MG,2:rq|2q'.9%1¬/5:>֩pLooxB|Jfy$ZGxaG4{c?N wS$J>#MR߰8PgIU7?<8 AJ9ynbB m1ku7s1)K.N9PּoD 1:`ֵjԑ@Ă.]-L"[l%N~(T# #^&&' +DE􏷾>t`wHJrMH/yyh Hu[?~z&ojWsJͯdg<<\ K"cHMCuD `8) P=ϣ@>m)15KмnuH`5#"SNq`rlUzr;Ё,^@P=/K@dV9û!EG\q|7D?|><քNMQSF,W:6=qWhC'p"\[TgSx_9ڽ7SR$#[4  eJTbF(EKCB?̌hF?-&픬]WR5R"%vr)Uo> p+_S]@8z8Z Ol~bX~}]C& @=f Nn7^Ɓc5 ݹcqj/hXA-wGF|_3b\HïkoD.^yL;vk'Gree vyƉ $F3ߊ&^ɰ˂./eh-;$Vpͮ px. N$~P`yǕ#W#h~)1(x]q\RS;֘|FD_?BE&my˾#v4 mhJeqG +b'i)1 ;Vu^5:cPd_+!LG}"piỼV-ľZam0mxĽɈ('QHUX؍i:'G2Nx:6p`dzPG:: h;-ߍ hD-4W9aXZ6+ٸ%ʽ ;Po*n_[SMt%Ƨ[y]^AEF53-^B9:Dݸm@3R m:w"/ՐxB)A -$t|䜓Ayvh{M^uo檽+!pz*lkzQ~WRFjޥHie/mB4&C'" M_OJ @Ʉ@kdˁb_G^cJ:z jZw7W`IMztRŗ_iqh_P>&4l|! endstream endobj 114 0 obj << /Type /FontDescriptor /Ascent 832 /CapHeight 578 /Descent -300 /Flags 34 /FontBBox [ -21 -680 638 1021 ] /FontName /MKAPJP+CourierNew /ItalicAngle 0 /StemV 42 /XHeight 421 /FontFile2 115 0 R >> endobj 115 0 obj << /Filter /FlateDecode /Length 26498 /Length1 44276 >> stream v}&?V>GEͫ(nhDeO(]Ř'&o* G0gK՜m k?*esƘkX-}"+(F_kQl\n4'a4)o0n)_x+I-L1m't}92c|rGjHr2xں'0MtCH66J|yߜg4Z6ݤkmr\?Μֲ+/ ,| ve!!k;O7)ՙ I`)|7  >>Q{2Wi"^7 P! dG:2 2f/P~YV";!Bj:M@ ]Pت%dnVPKRB—e;K"-E 8B$zWm*|7ar>ƋkO}*MHP~wGMY<dXb rBzEcTwY3{y`x*?!;a!_SRxGy-w qL@%4y .j99l_7mFtVh,6ȽkS/bpmԗC|1O]Urmz>hX\00[?+ʖZLɳwƋkslQ rTQ-]. T3S/C&8'N6b_Xse; (C`el| .HT(iVt+I16n֭i m ٞb 29Z[W}&_rK )ֳHVBU챩 JCy#jF% eCG (K߷,>ΜB/9KTke`ILu|*Gi}yn6m[J<^K̈́ ?L 6N9IqMۊ~b=q{b]Xg7i|03U;o_zp> n =dFp!?v|bU6}>S+NO.nk$,ySr8p};;S"a)%_v/l^A$dhI͘HaZy za珎+'옠Opݺ'lS sr_I↲%76Q#D }2kP==uz; !R&,:%Z0ǜq[qo21XVl`^;T2UlJ:GHȢ. hfX L[B 3m݃As9ڻP4k AA*yda}F̸L> tG$;2!ZNV; 7jQtt@2*2GԙZTX̸Q`l9nT:WqK֌4=B\uKc(Qf~q|7-O_˜ \)`ؐv e&e[n̚ EAʜ"UƺDŽ>X< '^>Po>'-`!CK=c@ V6 fc<t|u ŗFVL2M4B Ưjvɢ#HM-v:{IbѰ'^3U0u[sptsPQ9lrXبmU夺- 4+?˿CE?2>u4cfr9\#b .N0eu9ēH3"˙_YooG:=HcTT"8 nXid®X9}fQ}ESà7й,ۧ@I5C vIYP`NWdHDԅ9d ;8oM g<":3"C)T#4#8@TH>c6PQ#G' Hr`1Qmo@3>kFN|![GAU2ijDœ8̪@F;#Y L@W~3f3u64bC,Ҡ@R;J~(MAGNqɬ *nJa0B5aV]jԮbxǏy9lrKhՎty܌?믾9V "yPs>fT1(ݿ1qE[/~^Bo$۬_bt\0@oN^.q5}j(j!qέO'k'uh2tCs]2@EZ Cc #el}pcA_ga/)S >E ;`r-pe`!J EyÅ,u+-H f4]Jed̨<(rmWBKtŃHMڢ&"66yX-j ߟ _T`J޳KvN -n7ȇHY +!ц\ŸOu}쇭, x?5`Gؖbkuduk|NJb0lgHoS~ò;ɽi~RN&vfe q#2fBccpEq\\o֫ Ki4pPp$W> Zf1 *ͤA-1ʅ 36_\gm"1h@Wxs$K;Wn7@mZeEcX.u+yug"HmO@:_11rh݊@ m*Orh+4R:^p(9Wٶa',QDTW|EԈLE9nz;e&vȒO>mW˙c=MBt5 + nLA6_֌A50Yν( Do$U $IK,$=6O0q?rIܝ[cb9wiL熫!FxuZ O;\pd xlРi[XD'raD(SaA0㜜P4T  n ŷ?X"̾z'ꩺ<26sEzwpmڛvek:H#Ѓ1$?\NW{U޽[-6qS01B4M_ P#2)9X'vlEJP t}b[RDQx~1xMyT hڵxvi",^;K7 g̏SqsӛXX6,|hI+(&??K9 {8ݴSbddeNq]1A7rZ WC G2b]^_'^$ D*YJFd 6Q3sC/~,eļJ2?"RosC<ƻZ4cї:`e\_NDFLݵ4A2l#ěG%<|Eܡ,u耶<%=d~MPȶ kj-G~_kSdyՔmi(!(k3"b QU^ϹEDw\|;tg1~*Un ?X?A())ϸޅqLM Y kg-!KT(NX<^;|;@NR5Jfez.L"0 k|cjS*R'hC(Wf#Af~3ě-\shyM?~1&A.W/MꄈZr?I,õFþ0_k 8.Y{5Bo!;e3)XX}Y>F>E g@= Z9hrʾD՗IL/}(ҹtsn]gKH;S(zjQj;6? Lj<g1f`Э$v)9sC`,` VYWS*^xbqJͣVPn/s{Wdͫ\ 4ʂ$s> $b6R]^ D [)rã EՇ 0ˣ^L&1#}$ސ4&J u!bxiݫ`KV{,wzxI`cRW_ npMo~G^mCNKT੸dmVL&'}qWD1Ѻ?;2zcڀˆ5֢G - y%\ vӋ 'VY:ڱe09 ïG˦`Y<;(Vi8"}Qx=V`B͝(נ l_0Rj`NVU@d걨1_'x}pmv2uy76e͠X0*bEX<\6Al"Δ^䬺48-!>s*I md"5FFnWaj/7|-fq]jkO,9ˊq1sXZy?E010? qM[Qz3@aJ]S8rlT(Z`=imTL4{ߦ_N{?Bc|R3Hwy8/={ΩH:^4Nj}} NvlxŚy'v'>p!36Ų_؋ Ţ+͋97nv[A:v%אuaLu/\<,Q?yU[a/=ab)Dj鰝S<'DH޾D;e5*k$#ׅ[{ 7f8!t$dU=<Ь&66 rsdwg%V7~5 x.e5ЄEt_1J"GܮRyy芵Qe٦gi 5L?;$X Wpa WWt5ئN.B!]37K&.@!Q:K ,SX ֎npV8L2Ć1u=ڵ'o|0iQtq3\l,cM0V"ߥx?)P9ka 20^ݩG:>LK!Ru',`ZmCfxuWD8Q|)tfpԧ??u͊VY]-_lF#Dx<~MM"H™v m㦮 91kqeEGַC4G()ԛ۝詜DHSc|#N]PJҢ?96ܚ~/n)%S7OHX}̓>T6Eo'qBﮱKe1͉jM Nݟj7>YySx5LRS(,A_U9yŰ%C㟭ҹZT#,d Zx{,koFk j *dWW Pd43tp5p!vȢ.4Bc;FK)C <ɴFnsC}1KfPcqw!ٕ[|%V|D F*vL0KRe6e RLeiǶ 0t DMjaRxsW$QxP)6{V^9ؔsv??p^]1Y<T vvL!On3t3 jocR4WAU7vM!dS3 L &s8xpFVD3ڃ)<H0Iz< ]ȊZDOKykb%LZ ]0"ExxRmg 1;w"luBsŋ5LaWQT{@!+Q+RCXDu…Vbc8w?[_:nSb`|`c o K`\ `݅ݛzcZ'cX6m O!˔8Ҿ{W*)2t^Jv1@!Ǡ+YVw>V1"`آ!EU:sZF` (qUCsU/Uf iQMdHm.ʈLaQt}+F_:U8 8A?PT) uvNb$ndH<kiF8F"69np+T(lAf8g6>~dDT05Y0,SfCTR nc&s)Ds./3`4mEg5x\Էؕ,M2CѭaJZ*C&XOWEVg۬i; ]Y:۝LaM<G0 !!V]kM(Tu>nJmqAI>ɬ 1.RTLh]7"1k]P̕8ThZU VB@Fm.4{N8+]XAحڢP܁^'V)7Ɇ]d·ZJx>f6Ƞ;a okRT%Sxkx.N47͙^SeدѿB$|t7yh@MqJ:cǺFH'ɸK.u5CCwSll=uMT@3o FpIT{cJ0 PU⢁|A̭ۜv= 0 X_ /fZ]ڸ _.w)Q3̷9O^ysJgҝ}nVh QR3i>>|RHj4ᐼ,ڒ GY*dWh~H/o?;UĪfrvP,G0_h.EgNg Ru 50V͹2VВ/t{4(cj^X'snd8dlVQﯹ?:?@kXi hC2Q#uv`錽,JԅGs~!p6jmZQub!9GkSvmgoyTiD^A:H[R+2k6cТ.l%~J?G)"?0_Q- ?c!FyJr*-ٝo۽#ɷyӴ-*ykq({=IkAd*OLͥm1eXѲX& "ʼ ˫b |$(+Myk?{W8g9 Scր=bY0,&:*MJ ;w 컾 "ߑj5Ny?.ħmh=VdmRf3FiP]Y7zb@q| {Ĺ͐@#t[7eV'XG8@ē&.2ڹߗ+XxBм>q`b!_kYOƈt/Jz^Il1&lʱ׆Jlّ]&7rPXiD\~JIeDא߽f;ZUm.|й2F'?{Wb4ٖC/g6=@_ӏU 5 sQbZO-&"bTk'WGi!Hv]æ۵$K9{l/ ~S&Myr'~,+#N &|m IЀIMU8=xC^}Rn5;Bv7MDA0Y?@^()izU@nB'Bfg)07{ 2#5B N˺#ZDx?ԉx7mw>5l7JjٺHK?ş-L'XQ#޵ X|[-omE1BgF;C>H?xL6B)ٰ벾7N-E/^hAțt QP/e)ܠtvG V v 1qiU4-^Mui&^Fn8YUӇ1̘C˯ܟل+woU^U xRE4Tjp`XSZxxO-7vܙ d#!k_byrlᚻ rjq$0;8eS\*vIJ)!ߌR 2]eŹ?h=:` S7srFa{F1FOlmP ]YM>G}ͲJ4|rB^ xwWqw҂<Ƭ.f[9G,6ߒ,?^[”oj"٬yN" )˳6uA"9OrXOTQ袅!w0Oj'"xT@+bu7WFG  $]V>/-AgIY{fa48bޡ u ؼ|0L $X,@1q]xdQ`;bI"G(@I&rBLj"&ma= 6i50 p^bCst }F=TOb'=L iSh"fM_$Y6YS&ï 3U`O#d1Ʋc]DbRp?yH4M71XԯRĬ.פP ɽ|8~zN 'beRwQY'yk7>Hh C׊lWKݘ,J@+϶qE3?]إ Ďm8PPFs)GꀀYcvw:~X{Gc[zгף$4mkL[1{Dܱ~~Xv.jE,[>8 zO_GΏ|~lN3#dJ ǁ5.mӈ|R) ۳>&W|mBgDt32@rB >p[($ʮW /KMUIISm_7!ۚY YVZ0{+ NAEX/-سH o}J ܙox$H`Uhqmщ7_n:"}S |M!<)Mz}?t['9j]B i >BWR-g7qD^{4 XyE#ڧH꾐Ȑ 9%K<ץ )`e?V)5bPR-#dϿ0E/՞ 3]XGXx;5sݗb.yQFIX*E9${Kuj“*(, }5KGlo 2zC=%s‡qΣEz,HUс?'kUk}g}j½R)l8?#EIo˔ 2)HB] m%OE^<)dG$)rB0rm<nƶaFg)īShqS *FqMMn\}do}B'Jz6BdF:5- #|}k8`)J;GPB}pB_ȇZxuO3(GYqyNFިxjȔ$QV%C6ĔsR;lS]0}RͭLJDvK+߬)Sv` ՝X|ՊO1g%\aƯ`O`ᢀ|߽@fC$xƥw _\A:zȯ1ϨLuNPWbល+ #Kky JGkzp`?e;dP6J2;cP"\{ܢ&DO3T \53aY?*7|xHŸl\ȥ Fݸ5Ri|n7̗0MN]s*?'9,~'j> pɁ%u-2Q[Ud Y*ǧ/voZpr qVRfFشA8y؁DCV@CpޅNMFyb5X>%cpZLA隳j3mg{TU55}iԿK'-͚#}B-wළdPBpD22ŶJ- ']u9P3 )(Aq~OZYbM7ShBTyꆱj":#>HFW\唽j'd:B>%|*@ L٭y4yh^b7ݳso;4<}\ͺHv. _2,FGǖvkbK|[GK̖ ų0LYʀy!=v:sF%!.)^8^E['<欿Pd h̄hB׍vRCeh~g o嵫^ 3l+ay%}S\ ~]w, _׻3!H.0J@~K ٯւ }R/(>BV×rtܛIa[ @fo ?7.JAyʻ8kBx@qجaX si&>Av #y];_K@X@ұH qNd^\=OSj=ds`NnpDx5D$D)g&re~zڐ9p6) Ω,jc?A?=ڥE,X.!M{b%k:͗EY&Ck8DR*E MܢA> Wq`'gt4GgYgB[#(R&Maxtuw:TnB#n%+3 ĀT3ڥ-6[nc>e,ߗ*ØMϗ1*3mCgv (Շ 0O8/nym!9F~, S2@I#$ TD{Uť,cp::Z[U hjՃM,7Z㙑=z~#K1Τڱ k- azWg=vL?W06#dC)-'躀6 ںz8zP \a0%Hu/wN|*[ U}%S!\K\ݡN#_az5ureHCT5A K8[v(Kp_XP;&B&D+aahuK⚀t(@\˭O A%9I؅Vp`CL_PoźZ98N!D/k032ٓVg/}zDJL,xav2v8^IvDcݢs$NEV~$rT:q [flϊlY[rΞlÀ ɗ.Jyn96u(74GCT9M;;g"WwyPsnkG8[oF삶bZI$|rB >l1Zon:&)Es Vr;KX0Jy(U&S-g$||yW~cDžuYmađ 4gq-g7P*O 9qͮO(PF-zGǎ<+cEM5O9y7{x3:x|X9ˠ!vunyh0M"x@ov@֬MyI!tX7xn ]/A;5|8T!N0ūyNMum/T Vdm4Z\鶂!"!11u\8̖*S̅'̋)R O\ك0X=<(|;SRP=޸ O\OEtgRLx+h#' *fE4>?҂eRuŋ/c)Z& Ԙlzζ[`g/UKDKLDhk^1KrYrH׆]iM*P{w'^$?v>BYLjE:fwf8h3]p,E&Is|jׁDŽO ~sw+M.(6eOGPI?$,*S52bIޮ2 Zco?\I W9ҫ݂b ծ!ҭn,+%$Zt*E8@?[%싇j t{ʗFd+VaE8-"`āYD}gUC{ yۀwx6f:_~HИ k$/ιꣻ!%  v 9fVf4V.ɮ@{35L;vC~c+(-O|S8W4͂񴐡}Y%0a$/?PFufN/p)&۾tgu)#STQڳ:U"/Sa =dHib/k l>/R#ɍ;&e GZ)r 㼊iVCa ~0b\ AQ/mdJ}'u44sL?K}}d2ï@*L߸K括0 "f#4ICY\ G.5{>r-x2ىo4'PLKx5a7BHٮV9 HtB>X_&do]xJ>D?aM b%?"]cD劐$W YER _0̗N+퍤>KM)zŅ@y񢕥dݶ"Uol*3\м6>3Qz,TW?ցAصG>[VO.s #8`3=AwNs @6rtm5Au֛"a$+mPh]BX/SxSW"^ʕc|J K7ϙeȀ@E-\GScUPZdSO|6Hݩ 9p昲5JrLf֨w]MVt V 8߄kWR,=vs\kJtS4zzidy&bbB=-HNB!d@fsqfn@.yϦ5\I \X]+kfjpImFn'&x|D ^&N_ܧI\#q@kPcU|\cjArXWd\>QAr#skÖޏ)!:S oHQ (gޱq*uХ-O3w,F(wV]-9ir:T)Hc$%N᳂ z B6b>5X|hFbq_bfVhee%@_~@qZ^'J{/IvKIGQ_Ļ1zBeut'}TBm&VN/R63YgЏ1 i><Y^݂y%4W" nn+GW=_16 Ю&ihRy4ĨŬlGHj.<'+e$\;Gr;/mnx &FMXc `&ykT@sUk_KiIQpV~WgT^SZ"fo:Ɍ9EH)j;Be9Վ$%q9<R *giك/^nPMc٭'IiV.)憚ٜ>:_Gl혱n[&8_nӁ)q>vJ}(vkfgl0B6\sZȐGL?3E*Jw] ((lqQSu+SFBF<&Sf'FN7@@Bv<e!5 kZT7ʴ{2A"%SF8n^PJ􄡽U.}\x4=[F"f!ۯ<5 w˯2'_71١/K)ȟr@Kx2a؟3!Q5 E7zK8^6kqxܛXtczdV)ݱg^YF5U0?ud8琙/@ "̎"k5R/&7{C^`""oTKDžy!\;]Zb&gMXQT8KК)fc kN },Hrdr~*cZ]|wsAvۦlAb8#X61$C2='6ͭgboqAAףa ؊7$ҋP9}T*\`2ڤoC %\+"G DΤvD.d=-7Skz}~+HjRϕHD.ρhw<^;ɭ l z20lSZpuVAwA.\qNx~O؊TA6?= ٌk|YIQG$,5c Ss [ jjlJ/ʼü`h DXF iQ ݎ՜"S#NRTO.e֍3lᩋh5O 4vLiG֧ I?PK0n-K';$wkDydhLQQVyx3|Eqj.Nc:udc̪aD%3w&^ʏ%хS/f LvdB˜ep~AC‰5z9^Q $ķO?hHm\:/m_b&u,]r:a"`Vh8Zj+|4pS㋑:Zr}i:L[rZ407bf͔_.b mPv @1;',}Lwy"W^mM6P%qΧ:DC2XWv@auL*u]=(7k z8.DoX{ 7:٪i淐XJ}[Я:ǡFp}3 $CO.&"I0_? n l0Vx:z%B"-8܈8ep6}K(6BY S@ 4x:̡D endstream endobj 116 0 obj << /Type /Font /Subtype /CIDFontType2 /BaseFont /MKAPCL+SymbolMT /FontDescriptor 108 0 R /CIDSystemInfo << /Registry (Nj)/Ordering (D{L)/Supplement 0 >> /DW 1000 /W [ 3 [ 250 ] 120 [ 459 ] 148 [ 790 ] ] >> endobj 117 0 obj << /Filter /FlateDecode /Length 238 >> stream X'1RUkl@^9FV+\l.9w:ر@ٝB_=^'s/ Uj~9{ZThͺEO y8!'?-qnU72詪μn*Ѭ l (P~FXW.Չϑ[Żf6ˬ0E5.#wQ5yו&> endobj 119 0 obj << /S /URI /URI ( I|m3!2S8:>HZ#x2~ɯZwOh?ZB d9) >> endobj 120 0 obj << /Type /Annot /Subtype /Link /Rect [ 170.16 612.80554 306.85999 625.21021 ] /Border [ 0 0 0 ] /H /I /A 121 0 R /StructParent 21 >> endobj 121 0 obj << /S /URI /URI (iAl*N%@*j`R]|G֜|\rS > endobj 122 0 obj << /Type /Annot /Subtype /Link /Rect [ 219.12038 625.16516 301.97485 637.56982 ] /Border [ 0 0 0 ] /H /I /A 123 0 R /StructParent 23 >> endobj 123 0 obj << /S /URI /URI (FC: gx]) >> endobj 124 0 obj << /Type /Annot /Subtype /Link /Rect [ 307.49988 588.80518 382.51263 601.20984 ] /Border [ 0 0 0 ] /H /I /A 125 0 R /StructParent 24 >> endobj 125 0 obj << /S /URI /URI (E.O\nb\rߞ!O) >> endobj 126 0 obj << /Type /Annot /Subtype /Link /Rect [ 335.45996 654.28491 474.55292 666.66956 ] /Border [ 0 0 0 ] /H /I /A 127 0 R /StructParent 26 >> endobj 127 0 obj << /S /URI /URI (ޟ|LMЧLKԊ2 cЭ8ײ@K!~ZF) >> endobj 128 0 obj << /Count 13 /First 129 0 R /Last 130 0 R >> endobj 129 0 obj << /Title (}<g) /Dest [ 37 0 R /XYZ 0 686 null ] /Parent 128 0 R /Next 141 0 R >> endobj 130 0 obj << /Title (YpqZ8$ڔ 3{G) /Dest [ 90 0 R /XYZ 0 686 null ] /Parent 128 0 R /Prev 131 0 R >> endobj 131 0 obj << /Title (茦-) /Dest [ 86 0 R /XYZ 0 686 null ] /Parent 128 0 R /Prev 132 0 R /Next 130 0 R >> endobj 132 0 obj << /Title (d\\z$d3؛) /Dest [ 83 0 R /XYZ 0 686 null ] /Parent 128 0 R /Prev 133 0 R /Next 131 0 R >> endobj 133 0 obj << /Title (|~]=l偛^ ) /Dest [ 80 0 R /XYZ 0 686 null ] /Parent 128 0 R /Prev 134 0 R /Next 132 0 R >> endobj 134 0 obj << /Title (2[U2h0nY=) /Dest [ 46 0 R /XYZ 0 686 null ] /Parent 128 0 R /Prev 135 0 R /Next 133 0 R /First 136 0 R /Last 137 0 R /Count 5 >> endobj 135 0 obj << /Title (9jGS?YBd:b\)8I\\f=@vߊ&j4ڙB\\=-#:~) /Dest [ 43 0 R /XYZ 0 686 null ] /Parent 128 0 R /Prev 141 0 R /Next 134 0 R >> endobj 136 0 obj << /Title (K̤A:8Rn7׊) /Dest [ 46 0 R /XYZ 0 597 null ] /Parent 134 0 R /Next 140 0 R >> endobj 137 0 obj << /Title (S-k"H.@) /Dest [ 74 0 R /XYZ 0 473 null ] /Parent 134 0 R /Prev 138 0 R >> endobj 138 0 obj << /Title (]\\TBW8T) /Dest [ 68 0 R /XYZ 0 580 null ] /Parent 134 0 R /Prev 139 0 R /Next 137 0 R >> endobj 139 0 obj << /Title (Ŷ6<ْQz Kp) /Dest [ 61 0 R /XYZ 0 268 null ] /Parent 134 0 R /Prev 140 0 R /Next 138 0 R >> endobj 140 0 obj << /Title ( NYZY;; v) /Dest [ 61 0 R /XYZ 0 714 null ] /Parent 134 0 R /Prev 136 0 R /Next 139 0 R >> endobj 141 0 obj << /Title (\)3~\)Q^y-׎Fy7) /Dest [ 40 0 R /XYZ 0 686 null ] /Parent 128 0 R /Prev 129 0 R /Next 135 0 R >> endobj 142 0 obj << /TextBox /Div /Frame /Div /Footnote /Note /Endnote /Note /Shape /Figure /InlineShape /Figure /TOA /TOC /TOAI /TOCI /TOF /TOC /TOFI /TOCI /Superscript /Span /Subscript /Span /Strikeout /Span /Underline /Span /DropCap /Figure /Copyright /P /Standard /P /Inhaltsverzeichnis#20#C3#9Cberschrift /P /Verzeichnis#201 /P /Verzeichnis#202 /P /Textk#C3#B6rper /P /#C3#9Cberschrift#201 /P /Important#20Notice /P /#C3#9Cberschrift#202 /P /API#20Function /P /API#20Description /P /API#20Attribute /P /Program#20Text /P /HTML#20Vorformatiert /P /License#20Title /P /License#20Subtitle /P /License#20Text /P /License#20Section /P >> endobj 143 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 0 /P 585 0 R >> endobj 144 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 1 /P 585 0 R >> endobj 145 0 obj << /Copyright 146 0 R /Standard 179 0 R /Inhaltsverzeichnis#20#C3#9Cberschrift 186 0 R /Verzeichnis#201 188 0 R /Verzeichnis#202 201 0 R /Textk#C3#B6rper 229 0 R /#C3#9Cberschrift#201 232 0 R /Important#20Notice 252 0 R /#C3#9Cberschrift#202 258 0 R /API#20Function 261 0 R /API#20Description 263 0 R /API#20Attribute 346 0 R /Program#20Text 349 0 R /HTML#20Vorformatiert 505 0 R /License#20Title 537 0 R /License#20Subtitle 539 0 R /License#20Text 540 0 R /License#20Section 545 0 R >> endobj 146 0 obj << /O /Layout /WritingMode /LrTb /StartIndent 0 /EndIndent 0 /TextAlign /Start /SpaceBefore 0 /SpaceAfter 0 /TextIndent 0 >> endobj 147 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 2 /P 585 0 R >> endobj 148 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 3 /P 585 0 R >> endobj 149 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 4 /P 585 0 R >> endobj 150 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 5 /P 585 0 R >> endobj 151 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 6 /P 585 0 R >> endobj 152 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 7 /P 585 0 R >> endobj 153 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 8 /P 585 0 R >> endobj 154 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 9 /P 585 0 R >> endobj 155 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 10 /P 585 0 R >> endobj 156 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 11 /P 585 0 R >> endobj 157 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 12 /P 585 0 R >> endobj 158 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 13 /P 585 0 R >> endobj 159 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 14 /P 585 0 R >> endobj 160 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 15 /P 585 0 R >> endobj 161 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 16 /P 585 0 R >> endobj 162 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 17 /P 585 0 R >> endobj 163 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 18 /P 585 0 R >> endobj 164 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 19 /P 585 0 R >> endobj 165 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 20 /P 585 0 R >> endobj 166 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 21 /P 585 0 R >> endobj 167 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 22 /P 585 0 R >> endobj 168 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 23 /P 585 0 R >> endobj 169 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 24 /P 585 0 R >> endobj 170 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 25 /P 585 0 R >> endobj 171 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 26 /P 585 0 R >> endobj 172 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 27 /P 585 0 R >> endobj 173 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 28 /P 585 0 R >> endobj 174 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 29 /P 585 0 R >> endobj 175 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 30 /P 585 0 R >> endobj 176 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 31 /P 585 0 R >> endobj 177 0 obj << /S /Standard /C /Standard /Pg 1 0 R /K 32 /P 585 0 R >> endobj 178 0 obj << /S /Standard /C /Standard /Pg 1 0 R /K 33 /P 585 0 R >> endobj 179 0 obj << /O /Layout /WritingMode /LrTb /StartIndent 0 /EndIndent 0 /TextAlign /Start /SpaceBefore 0 /SpaceAfter 0 /TextIndent 0 >> endobj 180 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 34 /P 585 0 R >> endobj 181 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 35 /P 585 0 R >> endobj 182 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 36 /P 585 0 R >> endobj 183 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 37 /P 585 0 R >> endobj 184 0 obj << /S /Inhaltsverzeichnis#20#C3#9Cberschrift /C /Inhaltsverzeichnis#20#C3#9Cberschrift /Pg 4 0 R /K 0 /P 586 0 R >> endobj 185 0 obj << /S /TOCI /C /Verzeichnis#201 /Pg 4 0 R /K [ 187 0 R 2 189 0 R 4 ] /P 588 0 R >> endobj 186 0 obj << /O /Layout /WritingMode /LrTb /StartIndent 0 /EndIndent 0 /TextAlign /Start /SpaceBefore 11.89999 /SpaceAfter 70.85001 /TextIndent 0 >> endobj 187 0 obj << /S /Underline /P 185 0 R /A 646 0 R /Pg 4 0 R /K 1 >> endobj 188 0 obj << /O /Layout /WritingMode /LrTb /StartIndent 0 /EndIndent 0 /TextAlign /Start /SpaceBefore 14.2 /SpaceAfter 0 /TextIndent 0 >> endobj 189 0 obj << /S /Underline /P 185 0 R /A 647 0 R /Pg 4 0 R /K 3 >> endobj 190 0 obj << /S /TOCI /C /Verzeichnis#201 /Pg 4 0 R /K [ 191 0 R 6 192 0 R 8 ] /P 588 0 R >> endobj 191 0 obj << /S /Underline /P 190 0 R /A 648 0 R /Pg 4 0 R /K 5 >> endobj 192 0 obj << /S /Underline /P 190 0 R /A 649 0 R /Pg 4 0 R /K 7 >> endobj 193 0 obj << /S /TOCI /C /Verzeichnis#201 /Pg 4 0 R /K [ 194 0 R 10 195 0 R 12 ] /P 588 0 R >> endobj 194 0 obj << /S /Underline /P 193 0 R /A 650 0 R /Pg 4 0 R /K 9 >> endobj 195 0 obj << /S /Underline /P 193 0 R /A 651 0 R /Pg 4 0 R /K 11 >> endobj 196 0 obj << /S /TOCI /C /Verzeichnis#201 /Pg 4 0 R /K [ 197 0 R 14 198 0 R 16 ] /P 588 0 R >> endobj 197 0 obj << /S /Underline /P 196 0 R /A 652 0 R /Pg 4 0 R /K 13 >> endobj 198 0 obj << /S /Underline /P 196 0 R /A 653 0 R /Pg 4 0 R /K 15 >> endobj 199 0 obj << /S /TOCI /C /Verzeichnis#202 /Pg 4 0 R /K [ 200 0 R 18 202 0 R 20 ] /P 588 0 R >> endobj 200 0 obj << /S /Underline /P 199 0 R /A 654 0 R /Pg 4 0 R /K 17 >> endobj 201 0 obj << /O /Layout /WritingMode /LrTb /StartIndent 28.35001 /EndIndent 0 /TextAlign /Start /SpaceBefore 6 /SpaceAfter 0 /TextIndent 0 >> endobj 202 0 obj << /S /Underline /P 199 0 R /A 655 0 R /Pg 4 0 R /K 19 >> endobj 203 0 obj << /S /TOCI /C /Verzeichnis#202 /Pg 4 0 R /K [ 204 0 R 22 205 0 R 24 ] /P 588 0 R >> endobj 204 0 obj << /S /Underline /P 203 0 R /A 656 0 R /Pg 4 0 R /K 21 >> endobj 205 0 obj << /S /Underline /P 203 0 R /A 657 0 R /Pg 4 0 R /K 23 >> endobj 206 0 obj << /S /TOCI /C /Verzeichnis#202 /Pg 4 0 R /K [ 207 0 R 26 208 0 R 28 ] /P 588 0 R >> endobj 207 0 obj << /S /Underline /P 206 0 R /A 658 0 R /Pg 4 0 R /K 25 >> endobj 208 0 obj << /S /Underline /P 206 0 R /A 659 0 R /Pg 4 0 R /K 27 >> endobj 209 0 obj << /S /TOCI /C /Verzeichnis#202 /Pg 4 0 R /K [ 210 0 R 30 211 0 R 32 ] /P 588 0 R >> endobj 210 0 obj << /S /Underline /P 209 0 R /A 660 0 R /Pg 4 0 R /K 29 >> endobj 211 0 obj << /S /Underline /P 209 0 R /A 661 0 R /Pg 4 0 R /K 31 >> endobj 212 0 obj << /S /TOCI /C /Verzeichnis#202 /Pg 4 0 R /K [ 213 0 R 34 214 0 R 36 ] /P 588 0 R >> endobj 213 0 obj << /S /Underline /P 212 0 R /A 662 0 R /Pg 4 0 R /K 33 >> endobj 214 0 obj << /S /Underline /P 212 0 R /A 663 0 R /Pg 4 0 R /K 35 >> endobj 215 0 obj << /S /TOCI /C /Verzeichnis#201 /Pg 4 0 R /K [ 216 0 R 38 217 0 R 40 ] /P 588 0 R >> endobj 216 0 obj << /S /Underline /P 215 0 R /A 664 0 R /Pg 4 0 R /K 37 >> endobj 217 0 obj << /S /Underline /P 215 0 R /A 665 0 R /Pg 4 0 R /K 39 >> endobj 218 0 obj << /S /TOCI /C /Verzeichnis#201 /Pg 4 0 R /K [ 219 0 R 42 220 0 R 44 ] /P 588 0 R >> endobj 219 0 obj << /S /Underline /P 218 0 R /A 666 0 R /Pg 4 0 R /K 41 >> endobj 220 0 obj << /S /Underline /P 218 0 R /A 667 0 R /Pg 4 0 R /K 43 >> endobj 221 0 obj << /S /TOCI /C /Verzeichnis#201 /Pg 4 0 R /K [ 222 0 R 46 223 0 R 48 ] /P 588 0 R >> endobj 222 0 obj << /S /Underline /P 221 0 R /A 668 0 R /Pg 4 0 R /K 45 >> endobj 223 0 obj << /S /Underline /P 221 0 R /A 669 0 R /Pg 4 0 R /K 47 >> endobj 224 0 obj << /S /TOCI /C /Verzeichnis#201 /Pg 4 0 R /K [ 225 0 R 50 226 0 R 52 ] /P 588 0 R >> endobj 225 0 obj << /S /Underline /P 224 0 R /A 670 0 R /Pg 4 0 R /K 49 >> endobj 226 0 obj << /S /Underline /P 224 0 R /A 671 0 R /Pg 4 0 R /K 51 >> endobj 227 0 obj << /S /TOCI /C /Textk#C3#B6rper /Pg 4 0 R /K 53 /P 588 0 R >> endobj 228 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 4 0 R /K 54 /P 586 0 R >> endobj 229 0 obj << /O /Layout /WritingMode /LrTb /StartIndent 42.55 /EndIndent 0 /TextAlign /Justify /SpaceBefore 5.64999 /SpaceAfter 5.95 /TextIndent 0 >> endobj 230 0 obj << /S /LBody /C /#C3#9Cberschrift#201 /Pg 37 0 R /K 0 /P 590 0 R >> endobj 231 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 37 0 R /K 1 /P 587 0 R >> endobj 232 0 obj << /O /Layout /WritingMode /LrTb /StartIndent 42.55 /EndIndent 0 /TextAlign /Start /SpaceBefore 28.35001 /SpaceAfter 8.5 /TextIndent -42.54999 >> endobj 233 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 37 0 R /K 2 /P 587 0 R >> endobj 234 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 37 0 R /K 3 /P 587 0 R >> endobj 235 0 obj << /S /LBody /C /#C3#9Cberschrift#201 /Pg 40 0 R /K 0 /P 592 0 R >> endobj 236 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 40 0 R /K 1 /P 587 0 R >> endobj 237 0 obj << /S /LBody /A [ 238 0 R ] /C /Textk#C3#B6rper /Pg 40 0 R /K 2 /P 594 0 R >> endobj 238 0 obj << /O /Layout /StartIndent 74.60001 /TextIndent -17.99998 >> endobj 239 0 obj << /S /LBody /A [ 240 0 R ] /C /Textk#C3#B6rper /Pg 40 0 R /K 3 /P 595 0 R >> endobj 240 0 obj << /O /Layout /StartIndent 74.60001 /TextIndent -17.99998 >> endobj 241 0 obj << /S /LBody /A [ 242 0 R ] /C /Textk#C3#B6rper /Pg 40 0 R /K 4 /P 596 0 R >> endobj 242 0 obj << /O /Layout /StartIndent 74.60001 /TextIndent -17.99998 >> endobj 243 0 obj << /S /LBody /A [ 244 0 R ] /C /Textk#C3#B6rper /Pg 40 0 R /K 5 /P 597 0 R >> endobj 244 0 obj << /O /Layout /StartIndent 74.60001 /TextIndent -17.99998 >> endobj 245 0 obj << /S /LBody /A [ 246 0 R ] /C /Textk#C3#B6rper /Pg 40 0 R /K 6 /P 598 0 R >> endobj 246 0 obj << /O /Layout /StartIndent 74.60001 /TextIndent -17.99998 >> endobj 247 0 obj << /S /LBody /C /#C3#9Cberschrift#201 /Pg 43 0 R /K [ 0 1 ] /P 600 0 R >> endobj 248 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 43 0 R /K 2 /P 587 0 R >> endobj 249 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 43 0 R /K 3 /P 587 0 R >> endobj 250 0 obj << /S /Important#20Notice /C /Important#20Notice /Pg 43 0 R /K [ 4 5 6 7 ] /P 587 0 R >> endobj 251 0 obj << /S /Textk#C3#B6rper /A [ 253 0 R ] /C /Textk#C3#B6rper /Pg 43 0 R /K 8 /P 587 0 R >> endobj 252 0 obj << /O /Layout /WritingMode /LrTb /StartIndent 51.05 /EndIndent 0 /TextAlign /Justify /SpaceBefore 5.64999 /SpaceAfter 5.95 /TextIndent 0 >> endobj 253 0 obj << /O /Layout /StartIndent 56.60001 >> endobj 254 0 obj << /S /LBody /C /#C3#9Cberschrift#201 /Pg 46 0 R /K 0 /P 602 0 R >> endobj 255 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 46 0 R /K 1 /P 587 0 R >> endobj 256 0 obj << /S /LBody /C /#C3#9Cberschrift#202 /Pg 46 0 R /K 2 /P 604 0 R >> endobj 257 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 46 0 R /K 3 /P 587 0 R >> endobj 258 0 obj << /O /Layout /WritingMode /LrTb /StartIndent 42.55 /EndIndent 0 /TextAlign /Start /SpaceBefore 34 /SpaceAfter 14.14999 /TextIndent -42.54999 >> endobj 259 0 obj << /S /API#20Function /C /API#20Function /Pg 46 0 R /K 4 /P 587 0 R >> endobj 260 0 obj << /S /API#20Description /C /API#20Description /Pg 46 0 R /K 5 /P 587 0 R >> endobj 261 0 obj << /O /Layout /WritingMode /LrTb /StartIndent 56.75 /EndIndent 0 /TextAlign /Start /SpaceBefore 5.64999 /SpaceAfter 5.95 /TextIndent -14.19998 >> endobj 262 0 obj << /S /API#20Description /C /API#20Description /Pg 46 0 R /K 6 /P 587 0 R >> endobj 263 0 obj << /O /Layout /WritingMode /LrTb /StartIndent 56.7 /EndIndent 0 /TextAlign /Start /SpaceBefore 0 /SpaceAfter 5.95 /TextIndent 0 >> endobj 264 0 obj << /S /API#20Function /C /API#20Function /Pg 46 0 R /K 7 /P 587 0 R >> endobj 265 0 obj << /S /API#20Description /C /API#20Description /Pg 46 0 R /K 8 /P 587 0 R >> endobj 266 0 obj << /S /API#20Function /C /API#20Function /Pg 46 0 R /K 9 /P 587 0 R >> endobj 267 0 obj << /S /API#20Description /C /API#20Description /Pg 46 0 R /K 10 /P 587 0 R >> endobj 268 0 obj << /S /API#20Function /C /API#20Function /Pg 46 0 R /K 11 /P 587 0 R >> endobj 269 0 obj << /S /API#20Description /C /API#20Description /Pg 46 0 R /K 12 /P 587 0 R >> endobj 270 0 obj << /S /API#20Description /C /API#20Description /Pg 46 0 R /K 13 /P 587 0 R >> endobj 271 0 obj << /S /API#20Function /C /API#20Function /Pg 46 0 R /K 14 /P 587 0 R >> endobj 272 0 obj << /S /API#20Description /C /API#20Description /Pg 46 0 R /K 15 /P 587 0 R >> endobj 273 0 obj << /S /API#20Function /C /API#20Function /Pg 46 0 R /K 16 /P 587 0 R >> endobj 274 0 obj << /S /API#20Description /C /API#20Description /Pg 46 0 R /K 17 /P 587 0 R >> endobj 275 0 obj << /S /Important#20Notice /A [ 276 0 R ] /C /Important#20Notice /Pg 49 0 R /K [ 0 1 2 3 ] /P 587 0 R >> endobj 276 0 obj << /O /Layout /StartIndent 56.60001 >> endobj 277 0 obj << /S /API#20Function /C /API#20Function /Pg 49 0 R /K 4 /P 587 0 R >> endobj 278 0 obj << /S /API#20Description /C /API#20Description /Pg 49 0 R /K 5 /P 587 0 R >> endobj 279 0 obj << /S /API#20Description /C /API#20Description /Pg 49 0 R /K 6 /P 587 0 R >> endobj 280 0 obj << /S /API#20Function /C /API#20Function /Pg 49 0 R /K 7 /P 587 0 R >> endobj 281 0 obj << /S /API#20Description /C /API#20Description /Pg 49 0 R /K 8 /P 587 0 R >> endobj 282 0 obj << /S /API#20Description /C /API#20Description /Pg 49 0 R /K 9 /P 587 0 R >> endobj 283 0 obj << /S /API#20Function /C /API#20Function /Pg 49 0 R /K 10 /P 587 0 R >> endobj 284 0 obj << /S /API#20Description /C /API#20Description /Pg 49 0 R /K 11 /P 587 0 R >> endobj 285 0 obj << /S /API#20Function /C /API#20Function /Pg 49 0 R /K 12 /P 587 0 R >> endobj 286 0 obj << /S /API#20Description /C /API#20Description /Pg 49 0 R /K 13 /P 587 0 R >> endobj 287 0 obj << /S /API#20Description /C /API#20Description /Pg 49 0 R /K 14 /P 587 0 R >> endobj 288 0 obj << /S /API#20Description /C /API#20Description /Pg 49 0 R /K 15 /P 587 0 R >> endobj 289 0 obj << /S /API#20Function /C /API#20Function /Pg 49 0 R /K 16 /P 587 0 R >> endobj 290 0 obj << /S /API#20Description /C /API#20Description /Pg 49 0 R /K 17 /P 587 0 R >> endobj 291 0 obj << /S /API#20Function /C /API#20Function /Pg 49 0 R /K 18 /P 587 0 R >> endobj 292 0 obj << /S /API#20Description /C /API#20Description /Pg 49 0 R /K 19 /P 587 0 R >> endobj 293 0 obj << /S /API#20Function /C /API#20Function /Pg 52 0 R /K 0 /P 587 0 R >> endobj 294 0 obj << /S /API#20Description /C /API#20Description /Pg 52 0 R /K 1 /P 587 0 R >> endobj 295 0 obj << /S /API#20Function /C /API#20Function /Pg 52 0 R /K 2 /P 587 0 R >> endobj 296 0 obj << /S /API#20Description /C /API#20Description /Pg 52 0 R /K 3 /P 587 0 R >> endobj 297 0 obj << /S /API#20Function /C /API#20Function /Pg 52 0 R /K 4 /P 587 0 R >> endobj 298 0 obj << /S /API#20Description /C /API#20Description /Pg 52 0 R /K 5 /P 587 0 R >> endobj 299 0 obj << /S /API#20Function /C /API#20Function /Pg 52 0 R /K 6 /P 587 0 R >> endobj 300 0 obj << /S /API#20Description /C /API#20Description /Pg 52 0 R /K 7 /P 587 0 R >> endobj 301 0 obj << /S /API#20Function /C /API#20Function /Pg 52 0 R /K 8 /P 587 0 R >> endobj 302 0 obj << /S /API#20Description /C /API#20Description /Pg 52 0 R /K 9 /P 587 0 R >> endobj 303 0 obj << /S /API#20Function /C /API#20Function /Pg 52 0 R /K 10 /P 587 0 R >> endobj 304 0 obj << /S /API#20Description /C /API#20Description /Pg 52 0 R /K 11 /P 587 0 R >> endobj 305 0 obj << /S /API#20Description /C /API#20Description /Pg 52 0 R /K 12 /P 587 0 R >> endobj 306 0 obj << /S /API#20Function /C /API#20Function /Pg 52 0 R /K 13 /P 587 0 R >> endobj 307 0 obj << /S /API#20Description /C /API#20Description /Pg 52 0 R /K 14 /P 587 0 R >> endobj 308 0 obj << /S /API#20Description /C /API#20Description /Pg 52 0 R /K 15 /P 587 0 R >> endobj 309 0 obj << /S /API#20Description /C /API#20Description /Pg 52 0 R /K 16 /P 587 0 R >> endobj 310 0 obj << /S /API#20Function /C /API#20Function /Pg 55 0 R /K 0 /P 587 0 R >> endobj 311 0 obj << /S /API#20Description /C /API#20Description /Pg 55 0 R /K 1 /P 587 0 R >> endobj 312 0 obj << /S /API#20Function /C /API#20Function /Pg 55 0 R /K 2 /P 587 0 R >> endobj 313 0 obj << /S /API#20Description /C /API#20Description /Pg 55 0 R /K 3 /P 587 0 R >> endobj 314 0 obj << /S /API#20Description /C /API#20Description /Pg 55 0 R /K 4 /P 587 0 R >> endobj 315 0 obj << /S /API#20Function /C /API#20Function /Pg 55 0 R /K 5 /P 587 0 R >> endobj 316 0 obj << /S /API#20Description /C /API#20Description /Pg 55 0 R /K 6 /P 587 0 R >> endobj 317 0 obj << /S /API#20Description /C /API#20Description /Pg 55 0 R /K 7 /P 587 0 R >> endobj 318 0 obj << /S /API#20Function /C /API#20Function /Pg 55 0 R /K 8 /P 587 0 R >> endobj 319 0 obj << /S /API#20Description /C /API#20Description /Pg 55 0 R /K 9 /P 587 0 R >> endobj 320 0 obj << /S /API#20Function /C /API#20Function /Pg 55 0 R /K 10 /P 587 0 R >> endobj 321 0 obj << /S /API#20Description /C /API#20Description /Pg 55 0 R /K 11 /P 587 0 R >> endobj 322 0 obj << /S /API#20Function /C /API#20Function /Pg 55 0 R /K 12 /P 587 0 R >> endobj 323 0 obj << /S /API#20Description /C /API#20Description /Pg 55 0 R /K 13 /P 587 0 R >> endobj 324 0 obj << /S /API#20Description /C /API#20Description /Pg 55 0 R /K 14 /P 587 0 R >> endobj 325 0 obj << /S /API#20Description /C /API#20Description /Pg 55 0 R /K 15 /P 587 0 R >> endobj 326 0 obj << /S /API#20Function /C /API#20Function /Pg 55 0 R /K 16 /P 587 0 R >> endobj 327 0 obj << /S /API#20Description /C /API#20Description /Pg 55 0 R /P 587 0 R /K [ 17 << /Type /MCR /Pg 58 0 R /MCID 0 >> ] >> endobj 328 0 obj << /S /API#20Function /C /API#20Function /Pg 58 0 R /K 1 /P 587 0 R >> endobj 329 0 obj << /S /API#20Description /C /API#20Description /Pg 58 0 R /K 2 /P 587 0 R >> endobj 330 0 obj << /S /API#20Function /C /API#20Function /Pg 58 0 R /K 3 /P 587 0 R >> endobj 331 0 obj << /S /API#20Description /C /API#20Description /Pg 58 0 R /K 4 /P 587 0 R >> endobj 332 0 obj << /S /API#20Function /C /API#20Function /Pg 58 0 R /K 5 /P 587 0 R >> endobj 333 0 obj << /S /API#20Description /C /API#20Description /Pg 58 0 R /K 6 /P 587 0 R >> endobj 334 0 obj << /S /API#20Function /C /API#20Function /Pg 58 0 R /K 7 /P 587 0 R >> endobj 335 0 obj << /S /API#20Description /C /API#20Description /Pg 58 0 R /K 8 /P 587 0 R >> endobj 336 0 obj << /S /API#20Function /C /API#20Function /Pg 58 0 R /K 9 /P 587 0 R >> endobj 337 0 obj << /S /API#20Description /C /API#20Description /Pg 58 0 R /K 10 /P 587 0 R >> endobj 338 0 obj << /S /API#20Description /C /API#20Description /Pg 58 0 R /K 11 /P 587 0 R >> endobj 339 0 obj << /S /API#20Function /C /API#20Function /Pg 58 0 R /K 12 /P 587 0 R >> endobj 340 0 obj << /S /API#20Description /C /API#20Description /Pg 58 0 R /K 13 /P 587 0 R >> endobj 341 0 obj << /S /API#20Description /C /API#20Description /Pg 58 0 R /K 14 /P 587 0 R >> endobj 342 0 obj << /S /LBody /C /#C3#9Cberschrift#202 /Pg 61 0 R /K 0 /P 606 0 R >> endobj 343 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 61 0 R /K 1 /P 587 0 R >> endobj 344 0 obj << /S /API#20Attribute /C /API#20Attribute /Pg 61 0 R /K 2 /P 587 0 R >> endobj 345 0 obj << /S /API#20Description /C /API#20Description /Pg 61 0 R /K 3 /P 587 0 R >> endobj 346 0 obj << /O /Layout /WritingMode /LrTb /StartIndent 56.75 /EndIndent 0 /TextAlign /Start /SpaceBefore 5.64999 /SpaceAfter 5.95 /TextIndent -14.19998 >> endobj 347 0 obj << /S /Program#20Text /A [ 348 0 R ] /C /Program#20Text /Pg 61 0 R /K 4 /P 587 0 R >> endobj 348 0 obj << /O /Layout /StartIndent 56.60001 >> endobj 349 0 obj << /O /Layout /WritingMode /LrTb /StartIndent 42.55 /EndIndent 0 /TextAlign /Start /SpaceBefore 0 /SpaceAfter 0 /TextIndent 0 >> endobj 350 0 obj << /S /Program#20Text /A [ 351 0 R ] /C /Program#20Text /Pg 61 0 R /K 5 /P 587 0 R >> endobj 351 0 obj << /O /Layout /StartIndent 56.60001 >> endobj 352 0 obj << /S /Program#20Text /A [ 353 0 R ] /C /Program#20Text /Pg 61 0 R /K 6 /P 587 0 R >> endobj 353 0 obj << /O /Layout /StartIndent 56.60001 >> endobj 354 0 obj << /S /Program#20Text /A [ 355 0 R ] /C /Program#20Text /Pg 61 0 R /K 7 /P 587 0 R >> endobj 355 0 obj << /O /Layout /StartIndent 56.60001 >> endobj 356 0 obj << /S /Program#20Text /A [ 357 0 R ] /C /Program#20Text /Pg 61 0 R /K 8 /P 587 0 R >> endobj 357 0 obj << /O /Layout /StartIndent 56.60001 >> endobj 358 0 obj << /S /Program#20Text /A [ 359 0 R ] /C /Program#20Text /Pg 61 0 R /K 9 /P 587 0 R >> endobj 359 0 obj << /O /Layout /StartIndent 56.60001 >> endobj 360 0 obj << /S /Program#20Text /A [ 361 0 R ] /C /Program#20Text /Pg 61 0 R /K 10 /P 587 0 R >> endobj 361 0 obj << /O /Layout /StartIndent 56.60001 >> endobj 362 0 obj << /S /Program#20Text /C /Program#20Text /Pg 61 0 R /K 11 /P 587 0 R >> endobj 363 0 obj << /S /API#20Description /C /API#20Description /Pg 61 0 R /K 12 /P 587 0 R >> endobj 364 0 obj << /S /Program#20Text /A [ 365 0 R ] /C /Program#20Text /Pg 61 0 R /K 13 /P 587 0 R >> endobj 365 0 obj << /O /Layout /StartIndent 56.60001 >> endobj 366 0 obj << /S /Program#20Text /A [ 367 0 R ] /C /Program#20Text /Pg 61 0 R /K 14 /P 587 0 R >> endobj 367 0 obj << /O /Layout /StartIndent 56.60001 >> endobj 368 0 obj << /S /Program#20Text /A [ 369 0 R ] /C /Program#20Text /Pg 61 0 R /K 15 /P 587 0 R >> endobj 369 0 obj << /O /Layout /StartIndent 56.60001 >> endobj 370 0 obj << /S /Program#20Text /A [ 371 0 R ] /C /Program#20Text /Pg 61 0 R /K 16 /P 587 0 R >> endobj 371 0 obj << /O /Layout /StartIndent 56.60001 >> endobj 372 0 obj << /S /Program#20Text /A [ 373 0 R ] /C /Program#20Text /Pg 61 0 R /K 17 /P 587 0 R >> endobj 373 0 obj << /O /Layout /StartIndent 56.60001 >> endobj 374 0 obj << /S /Program#20Text /A [ 375 0 R ] /C /Program#20Text /Pg 61 0 R /K 18 /P 587 0 R >> endobj 375 0 obj << /O /Layout /StartIndent 56.60001 >> endobj 376 0 obj << /S /Program#20Text /A [ 377 0 R ] /C /Program#20Text /Pg 61 0 R /K 19 /P 587 0 R >> endobj 377 0 obj << /O /Layout /StartIndent 56.60001 >> endobj 378 0 obj << /S /API#20Attribute /C /API#20Attribute /Pg 61 0 R /K 20 /P 587 0 R >> endobj 379 0 obj << /S /API#20Description /C /API#20Description /Pg 61 0 R /K 21 /P 587 0 R >> endobj 380 0 obj << /S /Important#20Notice /A [ 381 0 R ] /C /Important#20Notice /Pg 61 0 R /K [ 22 23 24 25 ] /P 587 0 R >> endobj 381 0 obj << /O /Layout /StartIndent 56.60001 >> endobj 382 0 obj << /S /LBody /C /#C3#9Cberschrift#202 /Pg 61 0 R /K 26 /P 608 0 R >> endobj 383 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 61 0 R /K 27 /P 587 0 R >> endobj 384 0 obj << /S /API#20Function /C /API#20Function /Pg 61 0 R /K 28 /P 587 0 R >> endobj 385 0 obj << /S /API#20Description /C /API#20Description /Pg 61 0 R /K 29 /P 587 0 R >> endobj 386 0 obj << /S /API#20Description /C /API#20Description /Pg 64 0 R /K 0 /P 587 0 R >> endobj 387 0 obj << /S /API#20Function /C /API#20Function /Pg 64 0 R /K 1 /P 587 0 R >> endobj 388 0 obj << /S /API#20Description /C /API#20Description /Pg 64 0 R /K 2 /P 587 0 R >> endobj 389 0 obj << /S /API#20Description /C /API#20Description /Pg 64 0 R /K [ 3 390 0 R 5 ] /P 587 0 R >> endobj 390 0 obj << /S /Link /P 389 0 R /K [ 391 0 R << /Type /OBJR /Pg 64 0 R /Obj 118 0 R >> ] >> endobj 391 0 obj << /S /Underline /P 390 0 R /A 682 0 R /Pg 64 0 R /K 4 >> endobj 392 0 obj << /S /API#20Function /C /API#20Function /Pg 64 0 R /K 6 /P 587 0 R >> endobj 393 0 obj << /S /API#20Description /C /API#20Description /Pg 64 0 R /K 7 /P 587 0 R >> endobj 394 0 obj << /S /API#20Description /C /API#20Description /Pg 64 0 R /K 8 /P 587 0 R >> endobj 395 0 obj << /S /API#20Function /C /API#20Function /Pg 64 0 R /K 9 /P 587 0 R >> endobj 396 0 obj << /S /API#20Description /C /API#20Description /Pg 64 0 R /K 10 /P 587 0 R >> endobj 397 0 obj << /S /API#20Description /C /API#20Description /Pg 64 0 R /K 11 /P 587 0 R >> endobj 398 0 obj << /S /Important#20Notice /A [ 399 0 R ] /C /Important#20Notice /Pg 64 0 R /K [ 12 13 14 ] /P 587 0 R >> endobj 399 0 obj << /O /Layout /StartIndent 56.60001 >> endobj 400 0 obj << /S /Important#20Notice /A [ 401 0 R ] /C /Important#20Notice /Pg 64 0 R /K [ 15 16 17 ] /P 587 0 R >> endobj 401 0 obj << /O /Layout /StartIndent 56.60001 >> endobj 402 0 obj << /S /API#20Function /C /API#20Function /Pg 64 0 R /K 18 /P 587 0 R >> endobj 403 0 obj << /S /API#20Description /C /API#20Description /Pg 64 0 R /K 19 /P 587 0 R >> endobj 404 0 obj << /S /API#20Description /C /API#20Description /Pg 64 0 R /K 20 /P 587 0 R >> endobj 405 0 obj << /S /API#20Function /C /API#20Function /Pg 68 0 R /K 0 /P 587 0 R >> endobj 406 0 obj << /S /API#20Description /C /API#20Description /Pg 68 0 R /K 1 /P 587 0 R >> endobj 407 0 obj << /S /API#20Description /C /API#20Description /Pg 68 0 R /K 2 /P 587 0 R >> endobj 408 0 obj << /S /LBody /C /#C3#9Cberschrift#202 /Pg 68 0 R /K 3 /P 610 0 R >> endobj 409 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 68 0 R /K 4 /P 587 0 R >> endobj 410 0 obj << /S /API#20Function /C /API#20Function /Pg 68 0 R /K 5 /P 587 0 R >> endobj 411 0 obj << /S /API#20Description /C /API#20Description /Pg 68 0 R /K 6 /P 587 0 R >> endobj 412 0 obj << /S /API#20Description /C /API#20Description /Pg 68 0 R /K 7 /P 587 0 R >> endobj 413 0 obj << /S /API#20Description /C /API#20Description /Pg 68 0 R /K 8 /P 587 0 R >> endobj 414 0 obj << /S /API#20Description /C /API#20Description /Pg 68 0 R /K 9 /P 587 0 R >> endobj 415 0 obj << /S /API#20Function /C /API#20Function /Pg 68 0 R /K 10 /P 587 0 R >> endobj 416 0 obj << /S /API#20Description /C /API#20Description /Pg 68 0 R /K 11 /P 587 0 R >> endobj 417 0 obj << /S /API#20Description /C /API#20Description /Pg 68 0 R /K 12 /P 587 0 R >> endobj 418 0 obj << /S /API#20Description /C /API#20Description /Pg 68 0 R /K 13 /P 587 0 R >> endobj 419 0 obj << /S /API#20Description /C /API#20Description /Pg 68 0 R /K 14 /P 587 0 R >> endobj 420 0 obj << /S /API#20Description /C /API#20Description /Pg 68 0 R /K 15 /P 587 0 R >> endobj 421 0 obj << /S /API#20Function /C /API#20Function /Pg 71 0 R /K 0 /P 587 0 R >> endobj 422 0 obj << /S /API#20Description /C /API#20Description /Pg 71 0 R /K 1 /P 587 0 R >> endobj 423 0 obj << /S /API#20Description /C /API#20Description /Pg 71 0 R /K 2 /P 587 0 R >> endobj 424 0 obj << /S /API#20Description /C /API#20Description /Pg 71 0 R /K 3 /P 587 0 R >> endobj 425 0 obj << /S /API#20Function /C /API#20Function /Pg 71 0 R /K 4 /P 587 0 R >> endobj 426 0 obj << /S /API#20Description /C /API#20Description /Pg 71 0 R /K 5 /P 587 0 R >> endobj 427 0 obj << /S /API#20Description /C /API#20Description /Pg 71 0 R /K 6 /P 587 0 R >> endobj 428 0 obj << /S /API#20Description /C /API#20Description /Pg 71 0 R /K 7 /P 587 0 R >> endobj 429 0 obj << /S /API#20Description /C /API#20Description /Pg 71 0 R /K 8 /P 587 0 R >> endobj 430 0 obj << /S /API#20Description /C /API#20Description /Pg 71 0 R /K 9 /P 587 0 R >> endobj 431 0 obj << /S /API#20Description /C /API#20Description /Pg 71 0 R /K 10 /P 587 0 R >> endobj 432 0 obj << /S /API#20Function /C /API#20Function /Pg 71 0 R /K 11 /P 587 0 R >> endobj 433 0 obj << /S /API#20Description /C /API#20Description /Pg 71 0 R /K 12 /P 587 0 R >> endobj 434 0 obj << /S /API#20Description /C /API#20Description /Pg 71 0 R /K 13 /P 587 0 R >> endobj 435 0 obj << /S /Important#20Notice /A [ 436 0 R ] /C /Important#20Notice /Pg 71 0 R /K [ 14 15 16 17 18 19 20 ] /P 587 0 R >> endobj 436 0 obj << /O /Layout /StartIndent 56.60001 >> endobj 437 0 obj << /S /API#20Function /C /API#20Function /Pg 71 0 R /K 21 /P 587 0 R >> endobj 438 0 obj << /S /API#20Description /C /API#20Description /Pg 71 0 R /K 22 /P 587 0 R >> endobj 439 0 obj << /S /API#20Description /C /API#20Description /Pg 71 0 R /K 23 /P 587 0 R >> endobj 440 0 obj << /S /API#20Description /C /API#20Description /Pg 74 0 R /K 0 /P 587 0 R >> endobj 441 0 obj << /S /API#20Function /C /API#20Function /Pg 74 0 R /K 1 /P 587 0 R >> endobj 442 0 obj << /S /API#20Description /C /API#20Description /Pg 74 0 R /K 2 /P 587 0 R >> endobj 443 0 obj << /S /API#20Description /C /API#20Description /Pg 74 0 R /K 3 /P 587 0 R >> endobj 444 0 obj << /S /API#20Function /C /API#20Function /Pg 74 0 R /K 4 /P 587 0 R >> endobj 445 0 obj << /S /API#20Description /C /API#20Description /Pg 74 0 R /K 5 /P 587 0 R >> endobj 446 0 obj << /S /API#20Description /C /API#20Description /Pg 74 0 R /K 6 /P 587 0 R >> endobj 447 0 obj << /S /LBody /C /#C3#9Cberschrift#202 /Pg 74 0 R /K 7 /P 612 0 R >> endobj 448 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 74 0 R /K 8 /P 587 0 R >> endobj 449 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 74 0 R /K 9 /P 587 0 R >> endobj 450 0 obj << /S /API#20Description /C /API#20Description /Pg 74 0 R /K 10 /P 587 0 R >> endobj 451 0 obj << /S /API#20Description /C /API#20Description /Pg 74 0 R /K 11 /P 587 0 R >> endobj 452 0 obj << /S /API#20Description /C /API#20Description /Pg 74 0 R /K 12 /P 587 0 R >> endobj 453 0 obj << /S /API#20Description /C /API#20Description /Pg 74 0 R /K 13 /P 587 0 R >> endobj 454 0 obj << /S /API#20Description /C /API#20Description /Pg 74 0 R /K 14 /P 587 0 R >> endobj 455 0 obj << /S /API#20Function /A [ 456 0 R ] /C /API#20Function /Pg 74 0 R /K 15 /P 587 0 R >> endobj 456 0 obj << /O /Layout /StartIndent 56.60001 >> endobj 457 0 obj << /S /API#20Description /A [ 458 0 R ] /C /API#20Description /Pg 74 0 R /K 16 /P 587 0 R >> endobj 458 0 obj << /O /Layout /StartIndent 70.75 >> endobj 459 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 74 0 R /K 17 /P 587 0 R >> endobj 460 0 obj << /S /API#20Description /C /API#20Description /Pg 77 0 R /K 0 /P 587 0 R >> endobj 461 0 obj << /S /LBody /C /#C3#9Cberschrift#201 /Pg 80 0 R /K 0 /P 614 0 R >> endobj 462 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 80 0 R /K 1 /P 587 0 R >> endobj 463 0 obj << /S /Program#20Text /C /Program#20Text /Pg 80 0 R /K 2 /P 587 0 R >> endobj 464 0 obj << /S /Program#20Text /C /Program#20Text /Pg 80 0 R /K 3 /P 587 0 R >> endobj 465 0 obj << /S /Program#20Text /C /Program#20Text /Pg 80 0 R /K 4 /P 587 0 R >> endobj 466 0 obj << /S /Program#20Text /C /Program#20Text /Pg 80 0 R /K 5 /P 587 0 R >> endobj 467 0 obj << /S /Program#20Text /C /Program#20Text /Pg 80 0 R /K 6 /P 587 0 R >> endobj 468 0 obj << /S /Program#20Text /C /Program#20Text /Pg 80 0 R /K 7 /P 587 0 R >> endobj 469 0 obj << /S /Program#20Text /C /Program#20Text /Pg 80 0 R /K 8 /P 587 0 R >> endobj 470 0 obj << /S /Program#20Text /C /Program#20Text /Pg 80 0 R /K 9 /P 587 0 R >> endobj 471 0 obj << /S /Program#20Text /C /Program#20Text /Pg 80 0 R /K 10 /P 587 0 R >> endobj 472 0 obj << /S /Program#20Text /C /Program#20Text /Pg 80 0 R /K 11 /P 587 0 R >> endobj 473 0 obj << /S /Program#20Text /C /Program#20Text /Pg 80 0 R /K 12 /P 587 0 R >> endobj 474 0 obj << /S /Program#20Text /C /Program#20Text /Pg 80 0 R /K 13 /P 587 0 R >> endobj 475 0 obj << /S /Program#20Text /C /Program#20Text /Pg 80 0 R /K 14 /P 587 0 R >> endobj 476 0 obj << /S /Program#20Text /C /Program#20Text /Pg 80 0 R /K 15 /P 587 0 R >> endobj 477 0 obj << /S /Program#20Text /C /Program#20Text /Pg 80 0 R /K 16 /P 587 0 R >> endobj 478 0 obj << /S /Program#20Text /C /Program#20Text /Pg 80 0 R /K 17 /P 587 0 R >> endobj 479 0 obj << /S /Program#20Text /C /Program#20Text /Pg 80 0 R /K 18 /P 587 0 R >> endobj 480 0 obj << /S /Program#20Text /C /Program#20Text /Pg 80 0 R /K 19 /P 587 0 R >> endobj 481 0 obj << /S /Program#20Text /C /Program#20Text /Pg 80 0 R /K 20 /P 587 0 R >> endobj 482 0 obj << /S /Program#20Text /C /Program#20Text /Pg 80 0 R /K 21 /P 587 0 R >> endobj 483 0 obj << /S /Program#20Text /C /Program#20Text /Pg 80 0 R /K 22 /P 587 0 R >> endobj 484 0 obj << /S /Program#20Text /C /Program#20Text /Pg 80 0 R /K 23 /P 587 0 R >> endobj 485 0 obj << /S /Program#20Text /C /Program#20Text /Pg 80 0 R /K 24 /P 587 0 R >> endobj 486 0 obj << /S /Program#20Text /C /Program#20Text /Pg 80 0 R /K 25 /P 587 0 R >> endobj 487 0 obj << /S /Program#20Text /C /Program#20Text /Pg 80 0 R /K 26 /P 587 0 R >> endobj 488 0 obj << /S /Program#20Text /C /Program#20Text /Pg 80 0 R /K 27 /P 587 0 R >> endobj 489 0 obj << /S /Program#20Text /C /Program#20Text /Pg 80 0 R /K 28 /P 587 0 R >> endobj 490 0 obj << /S /Program#20Text /C /Program#20Text /Pg 80 0 R /K 29 /P 587 0 R >> endobj 491 0 obj << /S /Program#20Text /C /Program#20Text /Pg 80 0 R /K 30 /P 587 0 R >> endobj 492 0 obj << /S /Program#20Text /C /Program#20Text /Pg 80 0 R /K 31 /P 587 0 R >> endobj 493 0 obj << /S /Program#20Text /C /Program#20Text /Pg 80 0 R /K 32 /P 587 0 R >> endobj 494 0 obj << /S /Program#20Text /C /Program#20Text /Pg 80 0 R /K 33 /P 587 0 R >> endobj 495 0 obj << /S /Program#20Text /C /Program#20Text /Pg 80 0 R /K 34 /P 587 0 R >> endobj 496 0 obj << /S /Program#20Text /C /Program#20Text /Pg 80 0 R /K 35 /P 587 0 R >> endobj 497 0 obj << /S /Program#20Text /C /Program#20Text /Pg 80 0 R /K 36 /P 587 0 R >> endobj 498 0 obj << /S /Program#20Text /C /Program#20Text /Pg 80 0 R /K 37 /P 587 0 R >> endobj 499 0 obj << /S /Program#20Text /C /Program#20Text /Pg 80 0 R /K 38 /P 587 0 R >> endobj 500 0 obj << /S /Program#20Text /C /Program#20Text /Pg 80 0 R /K 39 /P 587 0 R >> endobj 501 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 80 0 R /K 40 /P 587 0 R >> endobj 502 0 obj << /S /LBody /C /#C3#9Cberschrift#201 /Pg 83 0 R /K 0 /P 616 0 R >> endobj 503 0 obj << /S /HTML#20Vorformatiert /A [ 504 0 R ] /C /HTML#20Vorformatiert /Pg 83 0 R /K 1 /P 587 0 R >> endobj 504 0 obj << /O /Layout /StartIndent 36 >> endobj 505 0 obj << /O /Layout /WritingMode /LrTb /StartIndent 0 /EndIndent 0 /TextAlign /Start /SpaceBefore 0 /SpaceAfter 0 /TextIndent 0 >> endobj 506 0 obj << /S /Program#20Text /C /Program#20Text /Pg 83 0 R /K 2 /P 587 0 R >> endobj 507 0 obj << /S /Program#20Text /C /Program#20Text /Pg 83 0 R /K 3 /P 587 0 R >> endobj 508 0 obj << /S /Program#20Text /C /Program#20Text /Pg 83 0 R /K 4 /P 587 0 R >> endobj 509 0 obj << /S /Program#20Text /C /Program#20Text /Pg 83 0 R /K 5 /P 587 0 R >> endobj 510 0 obj << /S /Program#20Text /C /Program#20Text /Pg 83 0 R /K 6 /P 587 0 R >> endobj 511 0 obj << /S /Program#20Text /C /Program#20Text /Pg 83 0 R /K 7 /P 587 0 R >> endobj 512 0 obj << /S /Program#20Text /C /Program#20Text /Pg 83 0 R /K 8 /P 587 0 R >> endobj 513 0 obj << /S /Program#20Text /C /Program#20Text /Pg 83 0 R /K 9 /P 587 0 R >> endobj 514 0 obj << /S /Program#20Text /C /Program#20Text /Pg 83 0 R /K 10 /P 587 0 R >> endobj 515 0 obj << /S /Program#20Text /C /Program#20Text /Pg 83 0 R /K 11 /P 587 0 R >> endobj 516 0 obj << /S /Program#20Text /C /Program#20Text /Pg 83 0 R /K 12 /P 587 0 R >> endobj 517 0 obj << /S /Program#20Text /C /Program#20Text /Pg 83 0 R /K 13 /P 587 0 R >> endobj 518 0 obj << /S /HTML#20Vorformatiert /A [ 519 0 R ] /C /HTML#20Vorformatiert /Pg 83 0 R /K 14 /P 587 0 R >> endobj 519 0 obj << /O /Layout /StartIndent 36 >> endobj 520 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 83 0 R /K 15 /P 587 0 R >> endobj 521 0 obj << /S /Important#20Notice /C /Important#20Notice /Pg 83 0 R /K [ 16 17 18 19 ] /P 587 0 R >> endobj 522 0 obj << /S /LBody /C /#C3#9Cberschrift#201 /Pg 86 0 R /K 0 /P 618 0 R >> endobj 523 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 86 0 R /K [ 1 524 0 R 3 ] /P 587 0 R >> endobj 524 0 obj << /S /Link /P 523 0 R /K [ 525 0 R << /Type /OBJR /Pg 86 0 R /Obj 120 0 R >> ] >> endobj 525 0 obj << /S /Underline /P 524 0 R /A 690 0 R /Pg 86 0 R /K 2 >> endobj 526 0 obj << /S /LBody /C /#C3#9Cberschrift#201 /Pg 90 0 R /K 0 /P 620 0 R >> endobj 527 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 90 0 R /K [ 1 528 0 R 3 ] /P 587 0 R >> endobj 528 0 obj << /S /Link /P 527 0 R /K [ 529 0 R << /Type /OBJR /Pg 90 0 R /Obj 122 0 R >> ] >> endobj 529 0 obj << /S /Underline /P 528 0 R /A 692 0 R /Pg 90 0 R /K 2 >> endobj 530 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 90 0 R /K [ 4 531 0 R 6 ] /P 587 0 R >> endobj 531 0 obj << /S /Link /P 530 0 R /K [ 532 0 R << /Type /OBJR /Pg 90 0 R /Obj 124 0 R >> ] >> endobj 532 0 obj << /S /Underline /P 531 0 R /A 693 0 R /Pg 90 0 R /K 5 >> endobj 533 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 90 0 R /K 7 /P 587 0 R >> endobj 534 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 90 0 R /K 8 /P 587 0 R >> endobj 535 0 obj << /S /License#20Title /C /License#20Title /Pg 94 0 R /K 0 /P 587 0 R >> endobj 536 0 obj << /S /License#20Subtitle /C /License#20Subtitle /Pg 94 0 R /K 1 /P 587 0 R >> endobj 537 0 obj << /O /Layout /WritingMode /LrTb /StartIndent 0 /EndIndent 0 /TextAlign /Center /SpaceBefore 0 /SpaceAfter 6 /TextIndent 0 >> endobj 538 0 obj << /S /License#20Text /C /License#20Text /Pg 94 0 R /K [ 2 541 0 R 4 ] /P 587 0 R >> endobj 539 0 obj << /O /Layout /WritingMode /LrTb /StartIndent 0 /EndIndent 0 /TextAlign /Center /SpaceBefore 0 /SpaceAfter 6 /TextIndent 0 >> endobj 540 0 obj << /O /Layout /WritingMode /LrTb /StartIndent 42.55 /EndIndent 0 /TextAlign /Start /SpaceBefore 6 /SpaceAfter 6 /TextIndent 0 >> endobj 541 0 obj << /S /Link /P 538 0 R /K [ 542 0 R << /Type /OBJR /Pg 94 0 R /Obj 126 0 R >> ] >> endobj 542 0 obj << /S /Underline /P 541 0 R /A 695 0 R /Pg 94 0 R /K 3 >> endobj 543 0 obj << /S /LBody /C /License#20Section /Pg 94 0 R /K 5 /P 622 0 R >> endobj 544 0 obj << /S /License#20Text /C /License#20Text /Pg 94 0 R /K 6 /P 587 0 R >> endobj 545 0 obj << /O /Layout /WritingMode /LrTb /StartIndent 85.10001 /EndIndent 0 /TextAlign /Start /SpaceBefore 12 /SpaceAfter 6 /TextIndent -85.09999 >> endobj 546 0 obj << /S /LBody /C /License#20Section /Pg 94 0 R /K 7 /P 624 0 R >> endobj 547 0 obj << /S /License#20Text /C /License#20Text /Pg 94 0 R /K 8 /P 587 0 R >> endobj 548 0 obj << /S /LBody /C /License#20Section /Pg 94 0 R /K 9 /P 626 0 R >> endobj 549 0 obj << /S /License#20Text /C /License#20Text /Pg 94 0 R /K 10 /P 587 0 R >> endobj 550 0 obj << /S /LBody /C /License#20Section /Pg 94 0 R /K 11 /P 628 0 R >> endobj 551 0 obj << /S /License#20Text /C /License#20Text /Pg 94 0 R /P 587 0 R /K [ 12 << /Type /MCR /Pg 98 0 R /MCID 0 >> ] >> endobj 552 0 obj << /S /License#20Text /C /License#20Text /Pg 98 0 R /K 1 /P 587 0 R >> endobj 553 0 obj << /S /LBody /C /License#20Section /Pg 98 0 R /K 2 /P 630 0 R >> endobj 554 0 obj << /S /License#20Text /C /License#20Text /Pg 98 0 R /K 3 /P 587 0 R >> endobj 555 0 obj << /S /LBody /C /License#20Section /Pg 98 0 R /K 4 /P 632 0 R >> endobj 556 0 obj << /S /License#20Text /C /License#20Text /Pg 98 0 R /K 5 /P 587 0 R >> endobj 557 0 obj << /S /LBody /C /License#20Section /Pg 98 0 R /K 6 /P 634 0 R >> endobj 558 0 obj << /S /License#20Text /C /License#20Text /Pg 98 0 R /K 7 /P 587 0 R >> endobj 559 0 obj << /S /License#20Text /C /License#20Text /Pg 98 0 R /K 8 /P 587 0 R >> endobj 560 0 obj << /S /License#20Text /C /License#20Text /Pg 98 0 R /K 9 /P 587 0 R >> endobj 561 0 obj << /S /License#20Text /C /License#20Text /Pg 98 0 R /K 10 /P 587 0 R >> endobj 562 0 obj << /S /License#20Text /C /License#20Text /Pg 98 0 R /K 11 /P 587 0 R >> endobj 563 0 obj << /S /License#20Text /C /License#20Text /Pg 101 0 R /K 0 /P 587 0 R >> endobj 564 0 obj << /S /LBody /C /License#20Section /Pg 101 0 R /K 1 /P 636 0 R >> endobj 565 0 obj << /S /License#20Text /C /License#20Text /Pg 101 0 R /K 2 /P 587 0 R >> endobj 566 0 obj << /S /License#20Text /C /License#20Text /Pg 101 0 R /K 3 /P 587 0 R >> endobj 567 0 obj << /S /License#20Text /A [ 568 0 R ] /C /License#20Text /Pg 101 0 R /K 4 /P 587 0 R >> endobj 568 0 obj << /O /Layout /StartIndent 81 >> endobj 569 0 obj << /S /License#20Text /A [ 570 0 R ] /C /License#20Text /Pg 101 0 R /K 5 /P 587 0 R >> endobj 570 0 obj << /O /Layout /StartIndent 81 >> endobj 571 0 obj << /S /License#20Text /A [ 572 0 R ] /C /License#20Text /Pg 101 0 R /K 6 /P 587 0 R >> endobj 572 0 obj << /O /Layout /StartIndent 81 >> endobj 573 0 obj << /S /License#20Text /A [ 574 0 R ] /C /License#20Text /Pg 101 0 R /K 7 /P 587 0 R >> endobj 574 0 obj << /O /Layout /StartIndent 81 >> endobj 575 0 obj << /S /License#20Text /C /License#20Text /Pg 101 0 R /K 8 /P 587 0 R >> endobj 576 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 101 0 R /K 9 /P 587 0 R >> endobj 577 0 obj << /S /Standard /A [ 578 0 R ] /C /Standard /Pg 763 0 R /K [ 24 25 26 27 28 29 30 ] /P 640 0 R >> endobj 578 0 obj << /O /Layout /TextAlign /End /StartIndent -23.55 /EndIndent -24.2 >> endobj 579 0 obj << /S /Standard /A [ 580 0 R ] /C /Standard /Pg 763 0 R /K [ 31 32 33 ] /P 640 0 R >> endobj 580 0 obj << /O /Layout /TextAlign /End /StartIndent -23.55 /EndIndent -24.2 >> endobj 581 0 obj << /S /Standard /A [ 582 0 R ] /C /Standard /Pg 763 0 R /K [ 10 11 12 13 14 15 16 17 18 19 20 21 22 ] /P 639 0 R >> endobj 582 0 obj << /O /Layout /TextAlign /Center /StartIndent 54.45 /EndIndent 62.8 >> endobj 583 0 obj << /S /Standard /A [ 584 0 R ] /C /Standard /Pg 763 0 R /K [ 1 2 3 4 5 6 7 8 9 ] /P 638 0 R >> endobj 584 0 obj << /O /Layout /StartIndent 15.45 /TextAlign /End /EndIndent -47.2 >> endobj 585 0 obj << /S /Sect /P 762 0 R /K [ 640 0 R 639 0 R 638 0 R 637 0 R 143 0 R 144 0 R 147 0 R 148 0 R 149 0 R 150 0 R 151 0 R 152 0 R 153 0 R 154 0 R 155 0 R 156 0 R 157 0 R 158 0 R 159 0 R 160 0 R 161 0 R 162 0 R 163 0 R 164 0 R 165 0 R 166 0 R 167 0 R 168 0 R 169 0 R 170 0 R 171 0 R 172 0 R 173 0 R 174 0 R 175 0 R 176 0 R 177 0 R 178 0 R 180 0 R 181 0 R 182 0 R 183 0 R ] >> endobj 586 0 obj << /S /Sect /P 762 0 R /K [ 184 0 R 588 0 R 228 0 R ] >> endobj 587 0 obj << /S /Sect /P 762 0 R /K [ 589 0 R 231 0 R 233 0 R 234 0 R 591 0 R 236 0 R 593 0 R 599 0 R 248 0 R 249 0 R 250 0 R 251 0 R 601 0 R 255 0 R 603 0 R 257 0 R 259 0 R 260 0 R 262 0 R 264 0 R 265 0 R 266 0 R 267 0 R 268 0 R 269 0 R 270 0 R 271 0 R 272 0 R 273 0 R 274 0 R 275 0 R 277 0 R 278 0 R 279 0 R 280 0 R 281 0 R 282 0 R 283 0 R 284 0 R 285 0 R 286 0 R 287 0 R 288 0 R 289 0 R 290 0 R 291 0 R 292 0 R 293 0 R 294 0 R 295 0 R 296 0 R 297 0 R 298 0 R 299 0 R 300 0 R 301 0 R 302 0 R 303 0 R 304 0 R 305 0 R 306 0 R 307 0 R 308 0 R 309 0 R 310 0 R 311 0 R 312 0 R 313 0 R 314 0 R 315 0 R 316 0 R 317 0 R 318 0 R 319 0 R 320 0 R 321 0 R 322 0 R 323 0 R 324 0 R 325 0 R 326 0 R 327 0 R 328 0 R 329 0 R 330 0 R 331 0 R 332 0 R 333 0 R 334 0 R 335 0 R 336 0 R 337 0 R 338 0 R 339 0 R 340 0 R 341 0 R 605 0 R 343 0 R 344 0 R 345 0 R 347 0 R 350 0 R 352 0 R 354 0 R 356 0 R 358 0 R 360 0 R 362 0 R 363 0 R 364 0 R 366 0 R 368 0 R 370 0 R 372 0 R 374 0 R 376 0 R 378 0 R 379 0 R 380 0 R 607 0 R 383 0 R 384 0 R 385 0 R 386 0 R 387 0 R 388 0 R 389 0 R 392 0 R 393 0 R 394 0 R 395 0 R 396 0 R 397 0 R 398 0 R 400 0 R 402 0 R 403 0 R 404 0 R 405 0 R 406 0 R 407 0 R 609 0 R 409 0 R 410 0 R 411 0 R 412 0 R 413 0 R 414 0 R 415 0 R 416 0 R 417 0 R 418 0 R 419 0 R 420 0 R 421 0 R 422 0 R 423 0 R 424 0 R 425 0 R 426 0 R 427 0 R 428 0 R 429 0 R 430 0 R 431 0 R 432 0 R 433 0 R 434 0 R 435 0 R 437 0 R 438 0 R 439 0 R 440 0 R 441 0 R 442 0 R 443 0 R 444 0 R 445 0 R 446 0 R 611 0 R 448 0 R 449 0 R 450 0 R 451 0 R 452 0 R 453 0 R 454 0 R 455 0 R 457 0 R 459 0 R 460 0 R 613 0 R 462 0 R 463 0 R 464 0 R 465 0 R 466 0 R 467 0 R 468 0 R 469 0 R 470 0 R 471 0 R 472 0 R 473 0 R 474 0 R 475 0 R 476 0 R 477 0 R 478 0 R 479 0 R 480 0 R 481 0 R 482 0 R 483 0 R 484 0 R 485 0 R 486 0 R 487 0 R 488 0 R 489 0 R 490 0 R 491 0 R 492 0 R 493 0 R 494 0 R 495 0 R 496 0 R 497 0 R 498 0 R 499 0 R 500 0 R 501 0 R 615 0 R 503 0 R 506 0 R 507 0 R 508 0 R 509 0 R 510 0 R 511 0 R 512 0 R 513 0 R 514 0 R 515 0 R 516 0 R 517 0 R 518 0 R 520 0 R 521 0 R 617 0 R 523 0 R 619 0 R 527 0 R 530 0 R 533 0 R 534 0 R 535 0 R 536 0 R 538 0 R 621 0 R 544 0 R 623 0 R 547 0 R 625 0 R 549 0 R 627 0 R 551 0 R 552 0 R 629 0 R 554 0 R 631 0 R 556 0 R 633 0 R 558 0 R 559 0 R 560 0 R 561 0 R 562 0 R 563 0 R 635 0 R 565 0 R 566 0 R 567 0 R 569 0 R 571 0 R 573 0 R 575 0 R 576 0 R ] >> endobj 588 0 obj << /S /TOC /P 586 0 R /K [ 185 0 R 190 0 R 193 0 R 196 0 R 199 0 R 203 0 R 206 0 R 209 0 R 212 0 R 215 0 R 218 0 R 221 0 R 224 0 R 227 0 R ] >> endobj 589 0 obj << /S /L /K 590 0 R /P 587 0 R >> endobj 590 0 obj << /S /LI /P 589 0 R /K 230 0 R >> endobj 591 0 obj << /S /L /K 592 0 R /P 587 0 R >> endobj 592 0 obj << /S /LI /P 591 0 R /K 235 0 R >> endobj 593 0 obj << /S /L /P 587 0 R /K [ 594 0 R 595 0 R 596 0 R 597 0 R 598 0 R ] >> endobj 594 0 obj << /S /LI /P 593 0 R /K 237 0 R >> endobj 595 0 obj << /S /LI /P 593 0 R /K 239 0 R >> endobj 596 0 obj << /S /LI /P 593 0 R /K 241 0 R >> endobj 597 0 obj << /S /LI /P 593 0 R /K 243 0 R >> endobj 598 0 obj << /S /LI /P 593 0 R /K 245 0 R >> endobj 599 0 obj << /S /L /K 600 0 R /P 587 0 R >> endobj 600 0 obj << /S /LI /P 599 0 R /K 247 0 R >> endobj 601 0 obj << /S /L /K 602 0 R /P 587 0 R >> endobj 602 0 obj << /S /LI /P 601 0 R /K 254 0 R >> endobj 603 0 obj << /S /L /K 604 0 R /P 587 0 R >> endobj 604 0 obj << /S /LI /P 603 0 R /K 256 0 R >> endobj 605 0 obj << /S /L /K 606 0 R /P 587 0 R >> endobj 606 0 obj << /S /LI /P 605 0 R /K 342 0 R >> endobj 607 0 obj << /S /L /K 608 0 R /P 587 0 R >> endobj 608 0 obj << /S /LI /P 607 0 R /K 382 0 R >> endobj 609 0 obj << /S /L /K 610 0 R /P 587 0 R >> endobj 610 0 obj << /S /LI /P 609 0 R /K 408 0 R >> endobj 611 0 obj << /S /L /K 612 0 R /P 587 0 R >> endobj 612 0 obj << /S /LI /P 611 0 R /K 447 0 R >> endobj 613 0 obj << /S /L /K 614 0 R /P 587 0 R >> endobj 614 0 obj << /S /LI /P 613 0 R /K 461 0 R >> endobj 615 0 obj << /S /L /K 616 0 R /P 587 0 R >> endobj 616 0 obj << /S /LI /P 615 0 R /K 502 0 R >> endobj 617 0 obj << /S /L /K 618 0 R /P 587 0 R >> endobj 618 0 obj << /S /LI /P 617 0 R /K 522 0 R >> endobj 619 0 obj << /S /L /K 620 0 R /P 587 0 R >> endobj 620 0 obj << /S /LI /P 619 0 R /K 526 0 R >> endobj 621 0 obj << /S /L /K 622 0 R /P 587 0 R >> endobj 622 0 obj << /S /LI /P 621 0 R /K 543 0 R >> endobj 623 0 obj << /S /L /K 624 0 R /P 587 0 R >> endobj 624 0 obj << /S /LI /P 623 0 R /K 546 0 R >> endobj 625 0 obj << /S /L /K 626 0 R /P 587 0 R >> endobj 626 0 obj << /S /LI /P 625 0 R /K 548 0 R >> endobj 627 0 obj << /S /L /K 628 0 R /P 587 0 R >> endobj 628 0 obj << /S /LI /P 627 0 R /K 550 0 R >> endobj 629 0 obj << /S /L /K 630 0 R /P 587 0 R >> endobj 630 0 obj << /S /LI /P 629 0 R /K 553 0 R >> endobj 631 0 obj << /S /L /K 632 0 R /P 587 0 R >> endobj 632 0 obj << /S /LI /P 631 0 R /K 555 0 R >> endobj 633 0 obj << /S /L /K 634 0 R /P 587 0 R >> endobj 634 0 obj << /S /LI /P 633 0 R /K 557 0 R >> endobj 635 0 obj << /S /L /K 636 0 R /P 587 0 R >> endobj 636 0 obj << /S /LI /P 635 0 R /K 564 0 R >> endobj 637 0 obj << /S /Shape /Alt () /Pg 763 0 R /K [ 0 23 ] /P 585 0 R /A 643 0 R >> endobj 638 0 obj << /S /TextBox /Alt (H\nY\n\(AGPd) /P 585 0 R /K 583 0 R >> endobj 639 0 obj << /S /TextBox /Alt (X}s\nq Vn X) /P 585 0 R /K 581 0 R >> endobj 640 0 obj << /S /TextBox /Alt (xttU6Q2>[*e~P 7s \n<\() /P 585 0 R /K [ 577 0 R 579 0 R ] >> endobj 641 0 obj << /Nums [ 0 642 0 R 1 644 0 R 2 645 0 R 3 672 0 R 4 673 0 R 5 674 0 R 6 675 0 R 7 676 0 R 8 677 0 R 9 678 0 R 10 679 0 R 11 680 0 R 12 681 0 R 13 390 0 R 14 683 0 R 15 684 0 R 16 685 0 R 17 686 0 R 18 687 0 R 19 688 0 R 20 689 0 R 21 524 0 R 22 691 0 R 23 528 0 R 24 531 0 R 25 694 0 R 26 541 0 R 27 696 0 R 28 697 0 R ] >> endobj 642 0 obj [ 637 0 R 583 0 R 583 0 R 583 0 R 583 0 R 583 0 R 583 0 R 583 0 R 583 0 R 583 0 R 581 0 R 581 0 R 581 0 R 581 0 R 581 0 R 581 0 R 581 0 R 581 0 R 581 0 R 581 0 R 581 0 R 581 0 R 581 0 R 637 0 R 577 0 R 577 0 R 577 0 R 577 0 R 577 0 R 577 0 R 577 0 R 579 0 R 579 0 R 579 0 R ] endobj 643 0 obj << /O /Layout /BBox [ 34 34 566 809 ] /Placement /Block /StartIndent -93.55 /EndIndent -70.2 >> endobj 644 0 obj [ 143 0 R 144 0 R 147 0 R 148 0 R 149 0 R 150 0 R 151 0 R 152 0 R 153 0 R 154 0 R 155 0 R 156 0 R 157 0 R 158 0 R 159 0 R 160 0 R 161 0 R 162 0 R 163 0 R 164 0 R 165 0 R 166 0 R 167 0 R 168 0 R 169 0 R 170 0 R 171 0 R 172 0 R 173 0 R 174 0 R 175 0 R 176 0 R 177 0 R 178 0 R 180 0 R 181 0 R 182 0 R 183 0 R ] endobj 645 0 obj [ 184 0 R 187 0 R 185 0 R 189 0 R 185 0 R 191 0 R 190 0 R 192 0 R 190 0 R 194 0 R 193 0 R 195 0 R 193 0 R 197 0 R 196 0 R 198 0 R 196 0 R 200 0 R 199 0 R 202 0 R 199 0 R 204 0 R 203 0 R 205 0 R 203 0 R 207 0 R 206 0 R 208 0 R 206 0 R 210 0 R 209 0 R 211 0 R 209 0 R 213 0 R 212 0 R 214 0 R 212 0 R 216 0 R 215 0 R 217 0 R 215 0 R 219 0 R 218 0 R 220 0 R 218 0 R 222 0 R 221 0 R 223 0 R 221 0 R 225 0 R 224 0 R 226 0 R 224 0 R 227 0 R 228 0 R ] endobj 646 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 647 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 648 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 649 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 650 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 651 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 652 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 653 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 654 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 655 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 656 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 657 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 658 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 659 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 660 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 661 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 662 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 663 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 664 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 665 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 666 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 667 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 668 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 669 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 670 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 671 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 672 0 obj [ 230 0 R 231 0 R 233 0 R 234 0 R ] endobj 673 0 obj [ 235 0 R 236 0 R 237 0 R 239 0 R 241 0 R 243 0 R 245 0 R ] endobj 674 0 obj [ 247 0 R 247 0 R 248 0 R 249 0 R 250 0 R 250 0 R 250 0 R 250 0 R 251 0 R ] endobj 675 0 obj [ 254 0 R 255 0 R 256 0 R 257 0 R 259 0 R 260 0 R 262 0 R 264 0 R 265 0 R 266 0 R 267 0 R 268 0 R 269 0 R 270 0 R 271 0 R 272 0 R 273 0 R 274 0 R ] endobj 676 0 obj [ 275 0 R 275 0 R 275 0 R 275 0 R 277 0 R 278 0 R 279 0 R 280 0 R 281 0 R 282 0 R 283 0 R 284 0 R 285 0 R 286 0 R 287 0 R 288 0 R 289 0 R 290 0 R 291 0 R 292 0 R ] endobj 677 0 obj [ 293 0 R 294 0 R 295 0 R 296 0 R 297 0 R 298 0 R 299 0 R 300 0 R 301 0 R 302 0 R 303 0 R 304 0 R 305 0 R 306 0 R 307 0 R 308 0 R 309 0 R ] endobj 678 0 obj [ 310 0 R 311 0 R 312 0 R 313 0 R 314 0 R 315 0 R 316 0 R 317 0 R 318 0 R 319 0 R 320 0 R 321 0 R 322 0 R 323 0 R 324 0 R 325 0 R 326 0 R 327 0 R ] endobj 679 0 obj [ 327 0 R 328 0 R 329 0 R 330 0 R 331 0 R 332 0 R 333 0 R 334 0 R 335 0 R 336 0 R 337 0 R 338 0 R 339 0 R 340 0 R 341 0 R ] endobj 680 0 obj [ 342 0 R 343 0 R 344 0 R 345 0 R 347 0 R 350 0 R 352 0 R 354 0 R 356 0 R 358 0 R 360 0 R 362 0 R 363 0 R 364 0 R 366 0 R 368 0 R 370 0 R 372 0 R 374 0 R 376 0 R 378 0 R 379 0 R 380 0 R 380 0 R 380 0 R 380 0 R 382 0 R 383 0 R 384 0 R 385 0 R ] endobj 681 0 obj [ 386 0 R 387 0 R 388 0 R 389 0 R 391 0 R 389 0 R 392 0 R 393 0 R 394 0 R 395 0 R 396 0 R 397 0 R 398 0 R 398 0 R 398 0 R 400 0 R 400 0 R 400 0 R 402 0 R 403 0 R 404 0 R ] endobj 682 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 683 0 obj [ 405 0 R 406 0 R 407 0 R 408 0 R 409 0 R 410 0 R 411 0 R 412 0 R 413 0 R 414 0 R 415 0 R 416 0 R 417 0 R 418 0 R 419 0 R 420 0 R ] endobj 684 0 obj [ 421 0 R 422 0 R 423 0 R 424 0 R 425 0 R 426 0 R 427 0 R 428 0 R 429 0 R 430 0 R 431 0 R 432 0 R 433 0 R 434 0 R 435 0 R 435 0 R 435 0 R 435 0 R 435 0 R 435 0 R 435 0 R 437 0 R 438 0 R 439 0 R ] endobj 685 0 obj [ 440 0 R 441 0 R 442 0 R 443 0 R 444 0 R 445 0 R 446 0 R 447 0 R 448 0 R 449 0 R 450 0 R 451 0 R 452 0 R 453 0 R 454 0 R 455 0 R 457 0 R 459 0 R ] endobj 686 0 obj [ 460 0 R ] endobj 687 0 obj [ 461 0 R 462 0 R 463 0 R 464 0 R 465 0 R 466 0 R 467 0 R 468 0 R 469 0 R 470 0 R 471 0 R 472 0 R 473 0 R 474 0 R 475 0 R 476 0 R 477 0 R 478 0 R 479 0 R 480 0 R 481 0 R 482 0 R 483 0 R 484 0 R 485 0 R 486 0 R 487 0 R 488 0 R 489 0 R 490 0 R 491 0 R 492 0 R 493 0 R 494 0 R 495 0 R 496 0 R 497 0 R 498 0 R 499 0 R 500 0 R 501 0 R ] endobj 688 0 obj [ 502 0 R 503 0 R 506 0 R 507 0 R 508 0 R 509 0 R 510 0 R 511 0 R 512 0 R 513 0 R 514 0 R 515 0 R 516 0 R 517 0 R 518 0 R 520 0 R 521 0 R 521 0 R 521 0 R 521 0 R ] endobj 689 0 obj [ 522 0 R 523 0 R 525 0 R 523 0 R ] endobj 690 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 691 0 obj [ 526 0 R 527 0 R 529 0 R 527 0 R 530 0 R 532 0 R 530 0 R 533 0 R 534 0 R ] endobj 692 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 693 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 694 0 obj [ 535 0 R 536 0 R 538 0 R 542 0 R 538 0 R 543 0 R 544 0 R 546 0 R 547 0 R 548 0 R 549 0 R 550 0 R 551 0 R ] endobj 695 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 696 0 obj [ 551 0 R 552 0 R 553 0 R 554 0 R 555 0 R 556 0 R 557 0 R 558 0 R 559 0 R 560 0 R 561 0 R 562 0 R ] endobj 697 0 obj [ 563 0 R 564 0 R 565 0 R 566 0 R 567 0 R 569 0 R 571 0 R 573 0 R 575 0 R 576 0 R ] endobj 698 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 74 /Height 105 /ColorSpace 750 0 R /BitsPerComponent 8 /Length 699 0 R >> stream j$D%V,&8"M8$:ޟUW+ȇ㣃9 yc9$oߤ p L()~hfS aYĹǷQj<=$ }=?z>} mBə=x%5LGVRԟ0A u=k;>j ?/vMoൗJߤvG0o:_+a+ɆmlSWO?7)&5?~-PT0e O BgF=JaއoBz#Sԕ"o"7&ei/e+=uc_4w(aG^Lx;0$#:ZQ=,'jCfAGxH)>V%. =gA6L`RaSͦo 8ȑN] A,F莶^L* 4RE. F?G1 endstream endobj 699 0 obj 529 endobj 700 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 74 /Height 105 /ColorSpace 750 0 R /BitsPerComponent 8 /Length 701 0 R >> stream xHzNEلGG[}k-Ӹ2)]2S5-Fg{Jr~P}?C&Sg%Bۥ$a[߱G])^`DljNڒ^7ugmNL?xt4ς1T 뭘̂`a MQ~+WGRԜ4ggo/Ohb-Q orq endstream endobj 701 0 obj 225 endobj 702 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 74 /Height 105 /ColorSpace 750 0 R /BitsPerComponent 8 /Length 703 0 R >> stream 1.&z<湍7sL]?InG+>cμL &tK%ulcbGKLfQp-zK7(xZ ƃG<&cl/ @?QF&6 |_@Gji-mtAPT-VCQ<'ͶHࡓA&Vbo#֍ ߥ7'ڄj4?LFrѢ+ endstream endobj 703 0 obj 219 endobj 704 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 74 /Height 105 /ColorSpace 750 0 R /BitsPerComponent 8 /Length 705 0 R >> stream w!`i a$EiZʹR;Jiuy endstream endobj 705 0 obj 41 endobj 706 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 74 /Height 105 /ColorSpace 750 0 R /BitsPerComponent 8 /Length 707 0 R >> stream L.d MDĉ^v[!}T⟭b[͢PuPz6- g3 tyxۛbP_mcil]Dͼ 9n\'[n8b@6 1ud<,zhCh'kD?*zJA*+~>^U endstream endobj 707 0 obj 183 endobj 708 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 74 /Height 105 /ColorSpace 750 0 R /BitsPerComponent 8 /Length 709 0 R >> stream UBfy5ۧ[f fApj>}8jM[ѯbMW<'("_73n_Κvc@ſglZZ?pxoRK@ IMc^nF,m_ endstream endobj 709 0 obj 162 endobj 710 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 74 /Height 105 /ColorSpace 750 0 R /BitsPerComponent 8 /Length 711 0 R >> stream {L9ڇ.QgQsBͺRGj$Cѡ3uw4]ZUv^Oo~F\U-E@=!$ C1d_Y$Ӯ'I9`=AX,9;,`/ <~ _tv3k=~BWIM;c85ιI,+a&3^Q9䀌_Cj"G(7EWiޜ>eq endstream endobj 711 0 obj 255 endobj 712 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 74 /Height 105 /ColorSpace 750 0 R /BitsPerComponent 8 /Length 713 0 R >> stream >&dįS' ({G -:cX>ggUKI5zfEsBrUvw!<dMWsW=kȒBm|ULEYSLZ^vl}da0SF NudM>ْ+xmTP ܪG >@Fw\R㫠) 626k h* as"1b \zoM*o?,u[U9Bdf1|o$:i;x4VH4b l/ouuJ ;XYTS Λ|OdwP]D A endstream endobj 713 0 obj 349 endobj 714 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 74 /Height 105 /ColorSpace 750 0 R /BitsPerComponent 8 /Length 715 0 R >> stream `TL@6 zazAǘ[zކ|PL("61;3tm2EˮБַCdz x\`2"nI*KyEVWU in#J4e3|樛2QmѮKOr Bqv[-{3 Us`0)8|y]ьi7+Z0u-Y(t@GVi6m*z_pzW8WC8,(q&IDz:~+C [7 '[=x͓(l-jZvЄ9BZ*,hut;s<>o@A%BY_@!/hZTa=DDt!lH!1o"Sbdz(c%I&o"^]|C0GRKB endstream endobj 715 0 obj 460 endobj 716 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 74 /Height 105 /ColorSpace 750 0 R /BitsPerComponent 8 /Length 717 0 R >> stream  .(>wӛR~]3th.-ƱJGfy% JCF = YP1ydh$Rntׅ[>_C?Ko3dgC.UI?vQﭻ4]'6AxT2N2#|0b %3e(8C@UiEi/wۿ^]Z/&dITֈB0p,,V"vfRȶc]G& k)o\ȐoH}HŕuaYZy-cfj /_yU#βkmW݋m>tX`ܚ?(wTk#6/Zʚ҃p൙NvP#k ?wQ]q/K ^iqW?ԜmmۿWv endstream endobj 717 0 obj 435 endobj 718 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 74 /Height 105 /ColorSpace 750 0 R /BitsPerComponent 8 /Length 719 0 R >> stream @4[g@gM>~r6M/IE"8HV G%&*ӭc$q^ft:,DtdqW)_+ Jn˒Q jStϖ#c|"!pN󹀞 }vIs_ %*m?g.S/lf~bÓȐ$%_~~VN͓<@tRWٸvOܬSj`ʽt!K~e=;g9vOdju}umVEp0JJa΃" ,`[ '̴:k`qrCHʜeފӸ;W.18ñ޽AM>pHKz%09 $ endstream endobj 719 0 obj 408 endobj 720 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 74 /Height 105 /ColorSpace 750 0 R /BitsPerComponent 8 /Length 721 0 R >> stream )ұgEZ^ŲvKՓ)jl(auE#j1+lAYq c<Ozp{t3ndm˼4lY&^C; M"5%B$3rj%Qa ʯsɣuw(eM-u%VL!)N;fr!xAwЙ> stream mRMMDꮉz.(H*{/mt;Nm=O'r2T ۮܙZ5%Wk8CwĎ,<ը8Y3(~Bgh~jCڦG=[Zٖ Kn1EIv7,9VXO׿-dl:5AB}=Pv*S]rL!p֕H7P= 99=Q;D>GS(ߕFY#MS`aB:㝗b2GDgbi(03N ۃ/XT6U_|-y~|ej@ratj Ook밀,γ7Hcd6_֧{.T\tR5C{!, endstream endobj 723 0 obj 412 endobj 724 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 74 /Height 105 /ColorSpace 750 0 R /BitsPerComponent 8 /Length 725 0 R >> stream kZ^~t*'-KSXq<[:%7 i H]2'KjK| !k &ݒ{^9͇'TiX0u:J~d9V@;-(zp$Y󍙵o&N~x(=,w[ibRŰ}<,-8[ba@LY |c9 k7n&"kłRK&u.qHkk@.3&]#)Sns8]}!xŧ{"["k,B5Df;J'0B25wJ2 endstream endobj 725 0 obj 448 endobj 726 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 74 /Height 105 /ColorSpace 750 0 R /BitsPerComponent 8 /Length 727 0 R >> stream Ed \T̂qE Nzj<30FGt\xL_h:TwDz|csIb:4V5|> hܜ "ӌ\BgLs"r21y)_0l֬ . endstream endobj 727 0 obj 431 endobj 728 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 74 /Height 105 /ColorSpace 750 0 R /BitsPerComponent 8 /Length 729 0 R >> stream Yg/wg@4W -[ߕ=Q+ ~d>:K +H4uNDQWzgřexiTĆ$WGѿ%g=kb20<~܉VOh5(v`9۳ﺭpGF2K/\[yM$DgUsG]ʯ6 bum䭆dP fFȌqd=Fv=v#xpz/LŃ10diVSѼ_ޡ>A}Be6 endstream endobj 729 0 obj 469 endobj 730 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 74 /Height 105 /ColorSpace 750 0 R /BitsPerComponent 8 /Length 731 0 R >> stream M/䓧yohuo Uex}o,X1x!z _޿qUT=ߣU׆ߴ+ "ދ8F߷sd' $0ZWvge!I,[| /״ (K_Ev,~ӂ+Oӵ͞erey SSM㠽E{>|RrzR\`1اNdə:!9?_9Vxfm@UcRj- cX 5M)B-4GO~^y!EQwͰ8Ι}#ωnfOUߒoHsNȣ3WwGm+2[lOaM> stream ] k؂+ ;2}Hch Q< rJoĶD_|`CۅX+ߴU 츜 endstream endobj 733 0 obj 80 endobj 734 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 74 /Height 105 /ColorSpace 750 0 R /BitsPerComponent 8 /Length 735 0 R >> stream m}9L$}x%1>VMڢ$Ⱦ굠RWR}x88t{1;<ضp+6,WIO.y 6ZcD1 m:وC(2P>5T׷WmR߷CDca|slJ9R'rFD endstream endobj 735 0 obj 196 endobj 736 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 74 /Height 105 /ColorSpace 750 0 R /BitsPerComponent 8 /Length 737 0 R >> stream ) 8jA'cPhDU )x)U(e:7Zn<2Q2WMxo=n(Ӏ<*z PUSUڳz<2]`E]h KY<8osG%iMO^uzs{ [I^=FP yro3̻6ǵ#s 9yQZ{H%l Չs$b~t5fW endstream endobj 737 0 obj 244 endobj 738 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 74 /Height 105 /ColorSpace 750 0 R /BitsPerComponent 8 /Length 739 0 R >> stream ,/ PLa}{ %!꺷䜉dLFLg>g~ J (_]?"k\B>VMt6A*u}RG+r[ I{ܭ묺N >P'ΖF%"sdh2 endstream endobj 739 0 obj 132 endobj 740 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 74 /Height 105 /ColorSpace 750 0 R /BitsPerComponent 8 /Length 741 0 R >> stream ~1xQP%]FH~lxܨ^)7vr!Y涔"~0B2Yyv '3跎Cŋpk>[ _6a!WL9|!Q0PJo0Y^Bcƹ*)ŊLcp!S dV96qeU0[Ϲ[ f(1304Ht6Ӓv endstream endobj 741 0 obj 220 endobj 742 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 74 /Height 105 /ColorSpace 750 0 R /BitsPerComponent 8 /Length 743 0 R >> stream ?@?qtաvp?{ɨu u_;ui8b6^pCLq)l^AufPV.unm1z9{р.U7 {I m\k0Q)Q-S,Ԅi^QXʃWCw7l$HuzPDlԔfW}EӿǼg9C_Mv:bxymPWbW3uBw/j6|3{ExJ}}q] _}-#T5̙e߁ҚiIiϪhct3-raO */sAs$gNU`#9w( AZ`~6[]D}sy\t7"~פs^Z LAV&IO:XK~&F{{44 {=. endstream endobj 743 0 obj 472 endobj 744 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 74 /Height 105 /ColorSpace 750 0 R /BitsPerComponent 8 /Length 745 0 R >> stream M^s.RgGg:"=Co6_0ԄQzbx_+.c3ĝ֩ .VQH }Tzګ ]Ҝ tEZ$~$ W,qbJ҅#GppMUms<[ Zq$(Kj3 b1+&$o{|L<&=P T7 \۹ŵIL$ԠPycyFvh?bꡐĮlMo,SJ,g[ Cf1#P> "s[QR6fZbtGv/GI4c)RPOS24'6fn[ko ڲgTX/eG .[P""|@J,42%ܩ|~jy r%r߿3ˤ\y6e$6Ze endstream endobj 745 0 obj 426 endobj 746 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 74 /Height 105 /ColorSpace 750 0 R /BitsPerComponent 8 /Length 747 0 R >> stream ND{a1~g~~鑂Pq+ > \4bo[u#pR!q b~I]$%u~YrvgTqC[Y3NY_^t6LU6B V:ug 簢KMߴ= ͱk"+\ ӆSLBԑ|mHzMTKw[]++ endstream endobj 747 0 obj 198 endobj 748 0 obj 481 endobj 749 0 obj << /Filter [ /ASCII85Decode /LZWDecode ] /Length 748 0 R >> stream oOm*$E N}jG 0?(z3NuU8^jl0} 4dC?z&|{x.G}W{Xe¢O@ d3My1B&ljZ9C,@]kM)[eandIaժt,N ?+|ՠX~O!DoIke `*I\5.SY/RgHPPƣHA1e~Շ_DD4~bm?pWk!q2%k[+׬؟<ƻ |9`L{u5sUS3#2Lj> endobj 752 0 obj << /Nums [ 0 751 0 R ] >> endobj 753 0 obj << /Producer (OI;%Ha;6AI',+\rA#sBA) /Author (ME!Ǯ\)Y77) /Creator (OI;}X31TR9dy\rG#) /ModDate (u &chÔQO.2) /Title (>TI> endobj 754 0 obj << /Type /Metadata /Subtype /XML /Length 1150 >> stream O 9(]X$DG>No\:@Bњe*uINa@uʒʚ,S)`]#_)9JLUCogڜt-3̼_mkzį2 8R3hwPdrt#LW5΄0lBmMˉsK#ܟ0kBx1wW )99ni[f>H[MDU,;Y{P0#:` La}ʚ;?}Wpv]3 %qqF,ǶfI*ǹK<%ßy8&̀eOW[2Ve+0w.ҁ%̓$2!?|E? }ɖ< m=s4id}{V>KK ʿPv)a#Hq cMðɨl &sd\^TP@JςQ[C*7T&ѳ+jD($#5G{I4f|3Mnls;{^jN"g _xo0TCFq${E淦+K2bTd-zC(uxsxψ*o=:\2@]2SPMxM`]F1%M_.91k_=A҇!VrbRzA<;S^YvZ\5a9Ͱc~@p\!moy. hUs'f*)i "ǣH%":v1w} jg[N6 )X& 5mUq$ƷPKw*,ނ-e1LPJ2d{‡*I!;1t~"WV)%iNbTT_fsu>܀dZ t$-|L.nZ+P_5~R+6;sFTQGiz +/pYW01{H25&.V qWJΏ/u ZL$jĢ7e@--y6(lPuD͵$b1(:T2rC]$lvG(̻<2NT]+ endstream endobj 755 0 obj << /Type /Pages /Kids [ 763 0 R 1 0 R 4 0 R 34 0 R 37 0 R 40 0 R 43 0 R 46 0 R 49 0 R 52 0 R ] /Count 10 /Parent 756 0 R >> endobj 756 0 obj << /Type /Pages /Kids [ 755 0 R 757 0 R 758 0 R ] /Count 25 >> endobj 757 0 obj << /Type /Pages /Kids [ 55 0 R 58 0 R 61 0 R 64 0 R 68 0 R 71 0 R 74 0 R 77 0 R 80 0 R 83 0 R ] /Count 10 /Parent 756 0 R >> endobj 758 0 obj << /Type /Pages /Kids [ 86 0 R 90 0 R 94 0 R 98 0 R 101 0 R ] /Count 5 /Parent 756 0 R >> endobj xref 0 759 0000000000 65535 f 0000279439 00000 n 0000279776 00000 n 0000281319 00000 n 0000281340 00000 n 0000281692 00000 n 0000281801 00000 n 0000281937 00000 n 0000282075 00000 n 0000282212 00000 n 0000282350 00000 n 0000282485 00000 n 0000282621 00000 n 0000282757 00000 n 0000282893 00000 n 0000283028 00000 n 0000283167 00000 n 0000283306 00000 n 0000283444 00000 n 0000283583 00000 n 0000286480 00000 n 0000286502 00000 n 0000286567 00000 n 0000286632 00000 n 0000286697 00000 n 0000286762 00000 n 0000286827 00000 n 0000286892 00000 n 0000286957 00000 n 0000287022 00000 n 0000287087 00000 n 0000287152 00000 n 0000287217 00000 n 0000287282 00000 n 0000287347 00000 n 0000287518 00000 n 0000287561 00000 n 0000287643 00000 n 0000287981 00000 n 0000289891 00000 n 0000289913 00000 n 0000290265 00000 n 0000291518 00000 n 0000291540 00000 n 0000291891 00000 n 0000293911 00000 n 0000293933 00000 n 0000294271 00000 n 0000297437 00000 n 0000297459 00000 n 0000297797 00000 n 0000302363 00000 n 0000302385 00000 n 0000302723 00000 n 0000307232 00000 n 0000307254 00000 n 0000307592 00000 n 0000311885 00000 n 0000311907 00000 n 0000312246 00000 n 0000316682 00000 n 0000316704 00000 n 0000317043 00000 n 0000320667 00000 n 0000320689 00000 n 0000321057 00000 n 0000321087 00000 n 0000325608 00000 n 0000325630 00000 n 0000325982 00000 n 0000330630 00000 n 0000330652 00000 n 0000330991 00000 n 0000335579 00000 n 0000335601 00000 n 0000335953 00000 n 0000339846 00000 n 0000339868 00000 n 0000340207 00000 n 0000340728 00000 n 0000340749 00000 n 0000341088 00000 n 0000342898 00000 n 0000342920 00000 n 0000343259 00000 n 0000345130 00000 n 0000345152 00000 n 0000345507 00000 n 0000345537 00000 n 0000346490 00000 n 0000346511 00000 n 0000346866 00000 n 0000346904 00000 n 0000349141 00000 n 0000349163 00000 n 0000349531 00000 n 0000349561 00000 n 0000355001 00000 n 0000355023 00000 n 0000355362 00000 n 0000359673 00000 n 0000359696 00000 n 0000360037 00000 n 0000361048 00000 n 0000361070 00000 n 0000361226 00000 n 0000361416 00000 n 0000361887 00000 n 0000362416 00000 n 0000362623 00000 n 0000369636 00000 n 0000369851 00000 n 0000378044 00000 n 0000378296 00000 n 0000387982 00000 n 0000388209 00000 n 0000414800 00000 n 0000415040 00000 n 0000415354 00000 n 0000415516 00000 n 0000415618 00000 n 0000415777 00000 n 0000415880 00000 n 0000416042 00000 n 0000416106 00000 n 0000416268 00000 n 0000416334 00000 n 0000416496 00000 n 0000416585 00000 n 0000416652 00000 n 0000416765 00000 n 0000416885 00000 n 0000417008 00000 n 0000417142 00000 n 0000417273 00000 n 0000417448 00000 n 0000417634 00000 n 0000417757 00000 n 0000417874 00000 n 0000418009 00000 n 0000418149 00000 n 0000418285 00000 n 0000418432 00000 n 0000419105 00000 n 0000419189 00000 n 0000419273 00000 n 0000419797 00000 n 0000419949 00000 n 0000420033 00000 n 0000420117 00000 n 0000420201 00000 n 0000420285 00000 n 0000420369 00000 n 0000420453 00000 n 0000420537 00000 n 0000420621 00000 n 0000420706 00000 n 0000420791 00000 n 0000420876 00000 n 0000420961 00000 n 0000421046 00000 n 0000421131 00000 n 0000421216 00000 n 0000421301 00000 n 0000421386 00000 n 0000421471 00000 n 0000421556 00000 n 0000421641 00000 n 0000421726 00000 n 0000421811 00000 n 0000421896 00000 n 0000421981 00000 n 0000422066 00000 n 0000422151 00000 n 0000422236 00000 n 0000422321 00000 n 0000422406 00000 n 0000422491 00000 n 0000422574 00000 n 0000422657 00000 n 0000422809 00000 n 0000422894 00000 n 0000422979 00000 n 0000423064 00000 n 0000423149 00000 n 0000423289 00000 n 0000423396 00000 n 0000423562 00000 n 0000423643 00000 n 0000423798 00000 n 0000423879 00000 n 0000423986 00000 n 0000424067 00000 n 0000424148 00000 n 0000424257 00000 n 0000424338 00000 n 0000424420 00000 n 0000424529 00000 n 0000424611 00000 n 0000424693 00000 n 0000424802 00000 n 0000424884 00000 n 0000425043 00000 n 0000425125 00000 n 0000425234 00000 n 0000425316 00000 n 0000425398 00000 n 0000425507 00000 n 0000425589 00000 n 0000425671 00000 n 0000425780 00000 n 0000425862 00000 n 0000425944 00000 n 0000426053 00000 n 0000426135 00000 n 0000426217 00000 n 0000426326 00000 n 0000426408 00000 n 0000426490 00000 n 0000426599 00000 n 0000426681 00000 n 0000426763 00000 n 0000426872 00000 n 0000426954 00000 n 0000427036 00000 n 0000427145 00000 n 0000427227 00000 n 0000427309 00000 n 0000427395 00000 n 0000427492 00000 n 0000427659 00000 n 0000427751 00000 n 0000427848 00000 n 0000428021 00000 n 0000428118 00000 n 0000428215 00000 n 0000428307 00000 n 0000428404 00000 n 0000428507 00000 n 0000428590 00000 n 0000428693 00000 n 0000428776 00000 n 0000428879 00000 n 0000428962 00000 n 0000429065 00000 n 0000429148 00000 n 0000429251 00000 n 0000429334 00000 n 0000429432 00000 n 0000429529 00000 n 0000429626 00000 n 0000429739 00000 n 0000429852 00000 n 0000430019 00000 n 0000430079 00000 n 0000430171 00000 n 0000430268 00000 n 0000430360 00000 n 0000430457 00000 n 0000430629 00000 n 0000430724 00000 n 0000430825 00000 n 0000430998 00000 n 0000431099 00000 n 0000431257 00000 n 0000431352 00000 n 0000431453 00000 n 0000431548 00000 n 0000431650 00000 n 0000431746 00000 n 0000431848 00000 n 0000431950 00000 n 0000432046 00000 n 0000432148 00000 n 0000432244 00000 n 0000432346 00000 n 0000432475 00000 n 0000432535 00000 n 0000432630 00000 n 0000432731 00000 n 0000432832 00000 n 0000432927 00000 n 0000433028 00000 n 0000433129 00000 n 0000433225 00000 n 0000433327 00000 n 0000433423 00000 n 0000433525 00000 n 0000433627 00000 n 0000433729 00000 n 0000433825 00000 n 0000433927 00000 n 0000434023 00000 n 0000434125 00000 n 0000434220 00000 n 0000434321 00000 n 0000434416 00000 n 0000434517 00000 n 0000434612 00000 n 0000434713 00000 n 0000434808 00000 n 0000434909 00000 n 0000435004 00000 n 0000435105 00000 n 0000435201 00000 n 0000435303 00000 n 0000435405 00000 n 0000435501 00000 n 0000435603 00000 n 0000435705 00000 n 0000435807 00000 n 0000435902 00000 n 0000436003 00000 n 0000436098 00000 n 0000436199 00000 n 0000436300 00000 n 0000436395 00000 n 0000436496 00000 n 0000436597 00000 n 0000436692 00000 n 0000436793 00000 n 0000436889 00000 n 0000436991 00000 n 0000437087 00000 n 0000437189 00000 n 0000437291 00000 n 0000437393 00000 n 0000437489 00000 n 0000437631 00000 n 0000437726 00000 n 0000437827 00000 n 0000437922 00000 n 0000438023 00000 n 0000438118 00000 n 0000438219 00000 n 0000438314 00000 n 0000438415 00000 n 0000438510 00000 n 0000438612 00000 n 0000438714 00000 n 0000438810 00000 n 0000438912 00000 n 0000439014 00000 n 0000439106 00000 n 0000439203 00000 n 0000439300 00000 n 0000439401 00000 n 0000439574 00000 n 0000439685 00000 n 0000439745 00000 n 0000439901 00000 n 0000440012 00000 n 0000440072 00000 n 0000440183 00000 n 0000440243 00000 n 0000440354 00000 n 0000440414 00000 n 0000440525 00000 n 0000440585 00000 n 0000440696 00000 n 0000440756 00000 n 0000440868 00000 n 0000440928 00000 n 0000441024 00000 n 0000441126 00000 n 0000441238 00000 n 0000441298 00000 n 0000441410 00000 n 0000441470 00000 n 0000441582 00000 n 0000441642 00000 n 0000441754 00000 n 0000441814 00000 n 0000441926 00000 n 0000441986 00000 n 0000442098 00000 n 0000442158 00000 n 0000442270 00000 n 0000442330 00000 n 0000442428 00000 n 0000442530 00000 n 0000442663 00000 n 0000442723 00000 n 0000442816 00000 n 0000442914 00000 n 0000443010 00000 n 0000443112 00000 n 0000443213 00000 n 0000443308 00000 n 0000443409 00000 n 0000443524 00000 n 0000443629 00000 n 0000443711 00000 n 0000443806 00000 n 0000443907 00000 n 0000444008 00000 n 0000444103 00000 n 0000444205 00000 n 0000444307 00000 n 0000444437 00000 n 0000444497 00000 n 0000444627 00000 n 0000444687 00000 n 0000444783 00000 n 0000444885 00000 n 0000444987 00000 n 0000445082 00000 n 0000445183 00000 n 0000445284 00000 n 0000445376 00000 n 0000445473 00000 n 0000445568 00000 n 0000445669 00000 n 0000445770 00000 n 0000445871 00000 n 0000445972 00000 n 0000446068 00000 n 0000446170 00000 n 0000446272 00000 n 0000446374 00000 n 0000446476 00000 n 0000446578 00000 n 0000446673 00000 n 0000446774 00000 n 0000446875 00000 n 0000446976 00000 n 0000447071 00000 n 0000447172 00000 n 0000447273 00000 n 0000447374 00000 n 0000447475 00000 n 0000447576 00000 n 0000447678 00000 n 0000447774 00000 n 0000447876 00000 n 0000447978 00000 n 0000448120 00000 n 0000448180 00000 n 0000448276 00000 n 0000448378 00000 n 0000448480 00000 n 0000448581 00000 n 0000448676 00000 n 0000448777 00000 n 0000448878 00000 n 0000448973 00000 n 0000449074 00000 n 0000449175 00000 n 0000449267 00000 n 0000449364 00000 n 0000449461 00000 n 0000449563 00000 n 0000449665 00000 n 0000449767 00000 n 0000449869 00000 n 0000449971 00000 n 0000450083 00000 n 0000450143 00000 n 0000450261 00000 n 0000450318 00000 n 0000450416 00000 n 0000450517 00000 n 0000450609 00000 n 0000450706 00000 n 0000450801 00000 n 0000450896 00000 n 0000450991 00000 n 0000451086 00000 n 0000451181 00000 n 0000451276 00000 n 0000451371 00000 n 0000451466 00000 n 0000451562 00000 n 0000451658 00000 n 0000451754 00000 n 0000451850 00000 n 0000451946 00000 n 0000452042 00000 n 0000452138 00000 n 0000452234 00000 n 0000452330 00000 n 0000452426 00000 n 0000452522 00000 n 0000452618 00000 n 0000452714 00000 n 0000452810 00000 n 0000452906 00000 n 0000453002 00000 n 0000453098 00000 n 0000453194 00000 n 0000453290 00000 n 0000453386 00000 n 0000453482 00000 n 0000453578 00000 n 0000453674 00000 n 0000453770 00000 n 0000453866 00000 n 0000453962 00000 n 0000454058 00000 n 0000454154 00000 n 0000454250 00000 n 0000454346 00000 n 0000454444 00000 n 0000454536 00000 n 0000454659 00000 n 0000454713 00000 n 0000454865 00000 n 0000454960 00000 n 0000455055 00000 n 0000455150 00000 n 0000455245 00000 n 0000455340 00000 n 0000455435 00000 n 0000455530 00000 n 0000455625 00000 n 0000455721 00000 n 0000455817 00000 n 0000455913 00000 n 0000456009 00000 n 0000456133 00000 n 0000456187 00000 n 0000456285 00000 n 0000456402 00000 n 0000456494 00000 n 0000456605 00000 n 0000456710 00000 n 0000456792 00000 n 0000456884 00000 n 0000456995 00000 n 0000457100 00000 n 0000457182 00000 n 0000457293 00000 n 0000457398 00000 n 0000457480 00000 n 0000457577 00000 n 0000457674 00000 n 0000457771 00000 n 0000457874 00000 n 0000458027 00000 n 0000458136 00000 n 0000458289 00000 n 0000458445 00000 n 0000458550 00000 n 0000458632 00000 n 0000458721 00000 n 0000458816 00000 n 0000458984 00000 n 0000459073 00000 n 0000459168 00000 n 0000459257 00000 n 0000459353 00000 n 0000459443 00000 n 0000459579 00000 n 0000459674 00000 n 0000459763 00000 n 0000459858 00000 n 0000459947 00000 n 0000460042 00000 n 0000460131 00000 n 0000460226 00000 n 0000460321 00000 n 0000460416 00000 n 0000460512 00000 n 0000460608 00000 n 0000460704 00000 n 0000460794 00000 n 0000460890 00000 n 0000460986 00000 n 0000461098 00000 n 0000461152 00000 n 0000461264 00000 n 0000461318 00000 n 0000461430 00000 n 0000461484 00000 n 0000461596 00000 n 0000461650 00000 n 0000461746 00000 n 0000461844 00000 n 0000461967 00000 n 0000462060 00000 n 0000462171 00000 n 0000462264 00000 n 0000462405 00000 n 0000462499 00000 n 0000462619 00000 n 0000462711 00000 n 0000463107 00000 n 0000463186 00000 n 0000465580 00000 n 0000465747 00000 n 0000465803 00000 n 0000465860 00000 n 0000465916 00000 n 0000465973 00000 n 0000466065 00000 n 0000466122 00000 n 0000466179 00000 n 0000466236 00000 n 0000466293 00000 n 0000466350 00000 n 0000466406 00000 n 0000466463 00000 n 0000466519 00000 n 0000466576 00000 n 0000466632 00000 n 0000466689 00000 n 0000466745 00000 n 0000466802 00000 n 0000466858 00000 n 0000466915 00000 n 0000466971 00000 n 0000467028 00000 n 0000467084 00000 n 0000467141 00000 n 0000467197 00000 n 0000467254 00000 n 0000467310 00000 n 0000467367 00000 n 0000467423 00000 n 0000467480 00000 n 0000467536 00000 n 0000467593 00000 n 0000467649 00000 n 0000467706 00000 n 0000467762 00000 n 0000467819 00000 n 0000467875 00000 n 0000467932 00000 n 0000467988 00000 n 0000468045 00000 n 0000468101 00000 n 0000468158 00000 n 0000468214 00000 n 0000468271 00000 n 0000468327 00000 n 0000468384 00000 n 0000468440 00000 n 0000468497 00000 n 0000468591 00000 n 0000468686 00000 n 0000468779 00000 n 0000468909 00000 n 0000469258 00000 n 0000469557 00000 n 0000469677 00000 n 0000470008 00000 n 0000470477 00000 n 0000470546 00000 n 0000470615 00000 n 0000470684 00000 n 0000470753 00000 n 0000470822 00000 n 0000470891 00000 n 0000470960 00000 n 0000471029 00000 n 0000471098 00000 n 0000471167 00000 n 0000471236 00000 n 0000471305 00000 n 0000471374 00000 n 0000471443 00000 n 0000471512 00000 n 0000471581 00000 n 0000471650 00000 n 0000471719 00000 n 0000471788 00000 n 0000471857 00000 n 0000471926 00000 n 0000471995 00000 n 0000472064 00000 n 0000472133 00000 n 0000472202 00000 n 0000472271 00000 n 0000472326 00000 n 0000472405 00000 n 0000472501 00000 n 0000472670 00000 n 0000472855 00000 n 0000473016 00000 n 0000473185 00000 n 0000473329 00000 n 0000473595 00000 n 0000473788 00000 n 0000473857 00000 n 0000474009 00000 n 0000474226 00000 n 0000474395 00000 n 0000474426 00000 n 0000474782 00000 n 0000474967 00000 n 0000475022 00000 n 0000475091 00000 n 0000475187 00000 n 0000475256 00000 n 0000475325 00000 n 0000475453 00000 n 0000475522 00000 n 0000475642 00000 n 0000475746 00000 n 0000476437 00000 n 0000476459 00000 n 0000476846 00000 n 0000476868 00000 n 0000477249 00000 n 0000477271 00000 n 0000477474 00000 n 0000477495 00000 n 0000477840 00000 n 0000477862 00000 n 0000478186 00000 n 0000478208 00000 n 0000478625 00000 n 0000478647 00000 n 0000479158 00000 n 0000479180 00000 n 0000479802 00000 n 0000479824 00000 n 0000480421 00000 n 0000480443 00000 n 0000481013 00000 n 0000481035 00000 n 0000481603 00000 n 0000481625 00000 n 0000482199 00000 n 0000482221 00000 n 0000482831 00000 n 0000482853 00000 n 0000483446 00000 n 0000483468 00000 n 0000484099 00000 n 0000484121 00000 n 0000484669 00000 n 0000484691 00000 n 0000484933 00000 n 0000484954 00000 n 0000485312 00000 n 0000485334 00000 n 0000485740 00000 n 0000485762 00000 n 0000486056 00000 n 0000486078 00000 n 0000486460 00000 n 0000486482 00000 n 0000487116 00000 n 0000487138 00000 n 0000487726 00000 n 0000487748 00000 n 0000488108 00000 n 0000488130 00000 n 0000488152 00000 n 0000488730 00000 n 0000488785 00000 n 0000488817 00000 n 0000488863 00000 n 0000489134 00000 n 0000490370 00000 n 0000490518 00000 n 0000490603 00000 n 0000490752 00000 n trailer << /Size 759 /ID[<14b3fc667bbce342a32c6a15756487ed>] >> startxref 173 %%EOF egenix-mx-base-3.2.7/mx/Tools/Examples/0000755000175000017500000000000012251446113017511 5ustar lemburglemburgegenix-mx-base-3.2.7/mx/Tools/Examples/Acquisition.py0000664000175000017500000000637607315370437022403 0ustar lemburglemburgimport mx.Tools.NewBuiltins class AcquisitionMixin: """ Mixin class allowing implicit acquisition of attributes from objects up a containment hierachy. To enable this feature, an object 'b' contained in another object 'a' must set the instance variable b.baseobj to a. The search is done recursively until either an exception is raised by the queried object or the object is found. Attributes that strt with an underscore ('_') can not be acquired. Be careful when acquiring methods: the method will be executed in the baseobjects context, not the one it is acquired into. See the documentation of acquire() for details. """ baseobj = None # Base object ("containing" this object) # Implicit acquisition __getattr__ = acquire # Use the (new) builtin acquire() to implement # the acquisition mechanism def __init__(self,*args,**kw): """ Create the object and call startup(*args,**kw) - if you give a keyword 'baseobj' then its parameter is used to set the baseobj for acquisition; the keyword is then deleted from kw """ # Set baseobj for acquisition to work properly baseobj = kw.get('baseobj',None) if baseobj is not None: self.baseobj = baseobj del kw['baseobj'] # call startup() apply(self.startup,args,kw) def startup(self,*args,**kw): """ Override this to init the instance. """ pass class PythonAcquisitionMixin(AcquisitionMixin): def __getattr__(self,name, getattr=getattr,AttributeError=AttributeError): if name[0] != '_': return getattr(self.baseobj,name) raise AttributeError,name # Localize these here for speed baseobj = AcquisitionMixin.baseobj __init__ = AcquisitionMixin.__init__ startup = AcquisitionMixin.startup def _test(): class C(AcquisitionMixin): a = 2 x = 9 class D(AcquisitionMixin): b = 3 class E(AcquisitionMixin): c = 4 # Setup acquisition chain c = C() d = D(baseobj=c) e = E(baseobj=d) # Give implicit acquisition a go... print c.a, d.a, e.a print d.b, e.b print e.c d.a = 5 print c.a, d.a, e.a c.b = 1 print c.b, d.b, e.b print # Performance comparism: print 'Performance:' print import time l = range(100000) class C(AcquisitionMixin): x = 9 class D(AcquisitionMixin): y = 8 class E(AcquisitionMixin): z = 7 # Setup acquisition chain c = C() d = D(baseobj=c) e = E(baseobj=d) t = time.time() for i in l: e.x e.y e.z print 'AcquisitionMixin:',time.time() - t,'seconds' class C(PythonAcquisitionMixin): x = 9 class D(PythonAcquisitionMixin): y = 8 class E(PythonAcquisitionMixin): z = 7 # Setup acquisition chain c = C() d = D(baseobj=c) e = E(baseobj=d) t = time.time() for i in l: e.x e.y e.z print 'PythonAcquisitionMixin:',time.time() - t,'seconds' if __name__ == '__main__': _test() egenix-mx-base-3.2.7/mx/Tools/Examples/__init__.py0000664000175000017500000000000007315370437021624 0ustar lemburglemburgegenix-mx-base-3.2.7/mx/Tools/mxTools/0000755000175000017500000000000012251446113017400 5ustar lemburglemburgegenix-mx-base-3.2.7/mx/Tools/mxTools/vc5/0000755000175000017500000000000012251446113020075 5ustar lemburglemburgegenix-mx-base-3.2.7/mx/Tools/mxTools/vc5/mxTools.dsp0000664000175000017500000001010306700427254022256 0ustar lemburglemburg# Microsoft Developer Studio Project File - Name="mxTools" - Package Owner=<4> # Microsoft Developer Studio Generated Build File, Format Version 5.00 # ** DO NOT EDIT ** # TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 CFG=mxTools - Win32 Debug !MESSAGE This is not a valid makefile. To build this project using NMAKE, !MESSAGE use the Export Makefile command and run !MESSAGE !MESSAGE NMAKE /f "mxTools.mak". !MESSAGE !MESSAGE You can specify a configuration when running NMAKE !MESSAGE by defining the macro CFG on the command line. For example: !MESSAGE !MESSAGE NMAKE /f "mxTools.mak" CFG="mxTools - Win32 Debug" !MESSAGE !MESSAGE Possible choices for configuration are: !MESSAGE !MESSAGE "mxTools - Win32 Release" (based on\ "Win32 (x86) Dynamic-Link Library") !MESSAGE "mxTools - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") !MESSAGE # Begin Project # PROP Scc_ProjName "" # PROP Scc_LocalPath "" CPP=cl.exe MTL=midl.exe RSC=rc.exe !IF "$(CFG)" == "mxTools - Win32 Release" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 0 # PROP BASE Output_Dir "Release" # PROP BASE Intermediate_Dir "Release" # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 0 # PROP Output_Dir "Release" # PROP Intermediate_Dir "Release" # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c # ADD CPP /nologo /MD /W3 /GX /O2 /I "d:\Python\include" /D "NDEBUG" /D "_WIN32" /D "_DLL" /D "_WINDOWS" /Fo".\Release/" /Fd".\Release/" /FD /c # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o NUL /win32 # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o NUL /win32 # ADD BASE RSC /l 0x409 /d "NDEBUG" # ADD RSC /l 0x409 /d "NDEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386 # ADD LINK32 d:\Python\libs\Python15.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386 /out:"mxTools.pyd" !ELSEIF "$(CFG)" == "mxTools - Win32 Debug" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 1 # PROP BASE Output_Dir "Debug" # PROP BASE Intermediate_Dir "Debug" # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 1 # PROP Output_Dir "Debug" # PROP Intermediate_Dir "Debug" # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" # ADD BASE CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c # ADD CPP /nologo /MTd /W3 /Gm /GX /Zi /O2 /I "d:\Python\include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FR /YX /FD /c # SUBTRACT CPP /X # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o NUL /win32 # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o NUL /win32 # ADD BASE RSC /l 0x409 /d "_DEBUG" # ADD RSC /l 0x409 /d "_DEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386 /pdbtype:sept # ADD LINK32 d:\Python\libs\Python15.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386 /pdbtype:sept !ENDIF # Begin Target # Name "mxTools - Win32 Release" # Name "mxTools - Win32 Debug" # Begin Source File SOURCE=.\mx.h # End Source File # Begin Source File SOURCE=.\mxh.h # End Source File # Begin Source File SOURCE=.\mxpyapi.h # End Source File # Begin Source File SOURCE=.\mxstdlib.h # End Source File # Begin Source File SOURCE=.\mxTools.c # End Source File # Begin Source File SOURCE=.\mxTools.h # End Source File # End Target # End Project egenix-mx-base-3.2.7/mx/Tools/mxTools/vc5/mxTools.dsw0000664000175000017500000000133206700427254022271 0ustar lemburglemburgMicrosoft Developer Studio Workspace File, Format Version 5.00 # WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! ############################################################################### Project: "mxTools"=".\mxTools.dsp" - Package Owner=<4> Package=<5> {{{ }}} Package=<4> {{{ }}} ############################################################################### Project: "xmap"="..\xmap\xmap.dsp" - Package Owner=<4> Package=<5> {{{ }}} Package=<4> {{{ }}} ############################################################################### Global: Package=<5> {{{ }}} Package=<3> {{{ }}} ############################################################################### egenix-mx-base-3.2.7/mx/Tools/mxTools/vc5/xmap.dsp0000664000175000017500000000732506700427254021572 0ustar lemburglemburg# Microsoft Developer Studio Project File - Name="xmap" - Package Owner=<4> # Microsoft Developer Studio Generated Build File, Format Version 5.00 # ** DO NOT EDIT ** # TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 CFG=xmap - Win32 Debug !MESSAGE This is not a valid makefile. To build this project using NMAKE, !MESSAGE use the Export Makefile command and run !MESSAGE !MESSAGE NMAKE /f "xmap.mak". !MESSAGE !MESSAGE You can specify a configuration when running NMAKE !MESSAGE by defining the macro CFG on the command line. For example: !MESSAGE !MESSAGE NMAKE /f "xmap.mak" CFG="xmap - Win32 Debug" !MESSAGE !MESSAGE Possible choices for configuration are: !MESSAGE !MESSAGE "xmap - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") !MESSAGE "xmap - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") !MESSAGE # Begin Project # PROP Scc_ProjName "" # PROP Scc_LocalPath "" CPP=cl.exe MTL=midl.exe RSC=rc.exe !IF "$(CFG)" == "xmap - Win32 Release" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 0 # PROP BASE Output_Dir "Release" # PROP BASE Intermediate_Dir "Release" # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 0 # PROP Output_Dir "Release" # PROP Intermediate_Dir "Release" # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c # ADD CPP /nologo /MT /W3 /GX /O2 /I "d:\Python\include" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o NUL /win32 # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o NUL /win32 # ADD BASE RSC /l 0x409 /d "NDEBUG" # ADD RSC /l 0x409 /d "NDEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386 # ADD LINK32 d:\Python\libs\Python15.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386 !ELSEIF "$(CFG)" == "xmap - Win32 Debug" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 1 # PROP BASE Output_Dir "Debug" # PROP BASE Intermediate_Dir "Debug" # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 1 # PROP Output_Dir "Debug" # PROP Intermediate_Dir "Debug" # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" # ADD BASE CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c # ADD CPP /nologo /MD /W3 /GX /O2 /I "d:\Python\include" /D "NDEBUG" /D "WIN32" /D "_DLL" /D "_WINDOWS" /Fo".\Release/" /Fd".\Release/" /FD /c # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o NUL /win32 # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o NUL /win32 # ADD BASE RSC /l 0x409 /d "_DEBUG" # ADD RSC /l 0x409 /d "_DEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386 /pdbtype:sept # ADD LINK32 d:\Python\libs\Python15.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386 /out:"xmap.pyd" /pdbtype:sept !ENDIF # Begin Target # Name "xmap - Win32 Release" # Name "xmap - Win32 Debug" # Begin Source File SOURCE=..\mxTools\xmap.c # End Source File # End Target # End Project egenix-mx-base-3.2.7/mx/Tools/mxTools/vc5/xmap.dsw0000664000175000017500000000102506700422172021562 0ustar lemburglemburgMicrosoft Developer Studio Workspace File, Format Version 5.00 # WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! ############################################################################### Project: "xmap"=".\xmap.dsp" - Package Owner=<4> Package=<5> {{{ }}} Package=<4> {{{ }}} ############################################################################### Global: Package=<5> {{{ }}} Package=<3> {{{ }}} ############################################################################### egenix-mx-base-3.2.7/mx/Tools/mxTools/COPYRIGHT0000664000175000017500000000176211552064177020714 0ustar lemburglemburg --------------------------------------------------------------------- COPYRIGHT NOTICE --------------------------------------------------------------------- Copyright (c) 1997-2000, IKDS Marc-Andre Lemburg; mailto:mal@lemburg.com Copyright (c) 2000-2011, eGenix.com Software GmbH; mailto:info@egenix.com All Rights Reserved. This software is protected by copyright and other intellectual property laws and by international treaties. It may only be used under the conditions and terms of the eGenix.com Public License Agreement. You should have received a copy of the eGenix.com Public License Agreement with this software (usually in the file LICENSE located in the package's or software's main directory). Please write to licenses@egenix.com to obtain a copy in case you should not have received a copy. egenix-mx-base-3.2.7/mx/Tools/mxTools/LICENSE0000664000175000017500000001075307620177404020425 0ustar lemburglemburg________________________________________________________________________ EGENIX.COM PUBLIC LICENSE AGREEMENT VERSION 1.1.0 ________________________________________________________________________ 1. Introduction This "License Agreement" is between eGenix.com Software, Skills and Services GmbH ("eGenix.com"), having an office at Pastor-Loeh-Str. 48, D-40764 Langenfeld, Germany, and the Individual or Organization ("Licensee") accessing and otherwise using this software in source or binary form and its associated documentation ("the Software"). 2. License Subject to the terms and conditions of this eGenix.com Public License Agreement, eGenix.com hereby grants Licensee a non-exclusive, royalty-free, world-wide license to reproduce, analyze, test, perform and/or display publicly, prepare derivative works, distribute, and otherwise use the Software alone or in any derivative version, provided, however, that the eGenix.com Public License Agreement is retained in the Software, or in any derivative version of the Software prepared by Licensee. 3. NO WARRANTY eGenix.com is making the Software available to Licensee on an "AS IS" basis. SUBJECT TO ANY STATUTORY WARRANTIES WHICH CAN NOT BE EXCLUDED, EGENIX.COM MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, EGENIX.COM MAKES NO AND DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF THE SOFTWARE WILL NOT INFRINGE ANY THIRD PARTY RIGHTS. 4. LIMITATION OF LIABILITY EGENIX.COM SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF THE SOFTWARE FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS (INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF BUSINESS PROFITS, BUSINESS INTERRUPTION, LOSS OF BUSINESS INFORMATION, OR OTHER PECUNIARY LOSS) AS A RESULT OF USING, MODIFYING OR DISTRIBUTING THE SOFTWARE, OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO THE ABOVE EXCLUSION OR LIMITATION MAY NOT APPLY TO LICENSEE. 5. Termination This License Agreement will automatically terminate upon a material breach of its terms and conditions. 6. Third Party Rights Any software or documentation in source or binary form provided along with the Software that is associated with a separate license agreement is licensed to Licensee under the terms of that license agreement. This License Agreement does not apply to those portions of the Software. Copies of the third party licenses are included in the Software Distribution. 7. General Nothing in this License Agreement affects any statutory rights of consumers that cannot be waived or limited by contract. Nothing in this License Agreement shall be deemed to create any relationship of agency, partnership, or joint venture between eGenix.com and Licensee. If any provision of this License Agreement shall be unlawful, void, or for any reason unenforceable, such provision shall be modified to the extent necessary to render it enforceable without losing its intent, or, if no such modification is possible, be severed from this License Agreement and shall not affect the validity and enforceability of the remaining provisions of this License Agreement. This License Agreement shall be governed by and interpreted in all respects by the law of Germany, excluding conflict of law provisions. It shall not be governed by the United Nations Convention on Contracts for International Sale of Goods. This License Agreement does not grant permission to use eGenix.com trademarks or trade names in a trademark sense to endorse or promote products or services of Licensee, or any third party. The controlling language of this License Agreement is English. If Licensee has received a translation into another language, it has been provided for Licensee's convenience only. 8. Agreement By downloading, copying, installing or otherwise using the Software, Licensee agrees to be bound by the terms and conditions of this License Agreement. For question regarding this License Agreement, please write to: eGenix.com Software, Skills and Services GmbH Pastor-Loeh-Str. 48 D-40764 Langenfeld Germany egenix-mx-base-3.2.7/mx/Tools/mxTools/Makefile.pre.in0000664000175000017500000002445111136427173022250 0ustar lemburglemburg# Universal Unix Makefile for Python extensions # ============================================= # Short Instructions # ------------------ # 1. Build and install Python (1.5 or newer). # 2. "make -f Makefile.pre.in boot" # 3. "make" # You should now have a shared library. # Long Instructions # ----------------- # Build *and install* the basic Python 1.5 distribution. See the # Python README for instructions. (This version of Makefile.pre.in # only withs with Python 1.5, alpha 3 or newer.) # Create a file Setup.in for your extension. This file follows the # format of the Modules/Setup.dist file; see the instructions there. # For a simple module called "spam" on file "spammodule.c", it can # contain a single line: # spam spammodule.c # You can build as many modules as you want in the same directory -- # just have a separate line for each of them in the Setup.in file. # If you want to build your extension as a shared library, insert a # line containing just the string # *shared* # at the top of your Setup.in file. # Note that the build process copies Setup.in to Setup, and then works # with Setup. It doesn't overwrite Setup when Setup.in is changed, so # while you're in the process of debugging your Setup.in file, you may # want to edit Setup instead, and copy it back to Setup.in later. # (All this is done so you can distribute your extension easily and # someone else can select the modules they actually want to build by # commenting out lines in the Setup file, without editing the # original. Editing Setup is also used to specify nonstandard # locations for include or library files.) # Copy this file (Misc/Makefile.pre.in) to the directory containing # your extension. # Run "make -f Makefile.pre.in boot". This creates Makefile # (producing Makefile.pre and sedscript as intermediate files) and # config.c, incorporating the values for sys.prefix, sys.exec_prefix # and sys.version from the installed Python binary. For this to work, # the python binary must be on your path. If this fails, try # make -f Makefile.pre.in Makefile VERSION=1.5 installdir= # where is the prefix used to install Python for installdir # (and possibly similar for exec_installdir=). # Note: "make boot" implies "make clobber" -- it assumes that when you # bootstrap you may have changed platforms so it removes all previous # output files. # If you are building your extension as a shared library (your # Setup.in file starts with *shared*), run "make" or "make sharedmods" # to build the shared library files. If you are building a statically # linked Python binary (the only solution of your platform doesn't # support shared libraries, and sometimes handy if you want to # distribute or install the resulting Python binary), run "make # python". # Note: Each time you edit Makefile.pre.in or Setup, you must run # "make Makefile" before running "make". # Hint: if you want to use VPATH, you can start in an empty # subdirectory and say (e.g.): # make -f ../Makefile.pre.in boot srcdir=.. VPATH=.. # === Bootstrap variables (edited through "make boot") === # The prefix used by "make inclinstall libainstall" of core python installdir= /usr/local # The exec_prefix used by the same exec_installdir=$(installdir) # Source directory and VPATH in case you want to use VPATH. # (You will have to edit these two lines yourself -- there is no # automatic support as the Makefile is not generated by # config.status.) srcdir= . VPATH= . # === Variables that you may want to customize (rarely) === # (Static) build target TARGET= python # Installed python binary (used only by boot target) PYTHON= python # Add more -I and -D options here CFLAGS= $(OPT) -I$(INCLUDEPY) -I$(EXECINCLUDEPY) $(DEFS) # These two variables can be set in Setup to merge extensions. # See example[23]. BASELIB= BASESETUP= # === Variables set by makesetup === MODOBJS= _MODOBJS_ MODLIBS= _MODLIBS_ # === Definitions added by makesetup === # === Variables from configure (through sedscript) === VERSION= @VERSION@ CC= @CC@ CXX= @CXX@ MAINCC= @MAINCC@ LINKCC= @LINKCC@ SGI_ABI= @SGI_ABI@ OPT= @OPT@ CPPFLAGS= @CPPFLAGS@ LDFLAGS= @LDFLAGS@ LDLAST= @LDLAST@ DEFS= LIBS= @LIBS@ LIBM= @LIBM@ LIBC= @LIBC@ RANLIB= @RANLIB@ MACHDEP= @MACHDEP@ SO= @SO@ LDSHARED= @LDSHARED@ BLDSHARED= @BLDSHARED@ CCSHARED= @CCSHARED@ LINKFORSHARED= @LINKFORSHARED@ CXX= @CXX@ # Install prefix for architecture-independent files prefix= /usr/local # Install prefix for architecture-dependent files exec_prefix= $(prefix) # Uncomment the following two lines for AIX #LINKCC= $(LIBPL)/makexp_aix $(LIBPL)/python.exp "" $(LIBRARY); $(PURIFY) $(CC) #LDSHARED= $(LIBPL)/ld_so_aix $(CC) -bI:$(LIBPL)/python.exp # === Fixed definitions === # Shell used by make (some versions default to the login shell, which is bad) SHELL= /bin/sh # Expanded directories BINDIR= $(exec_installdir)/bin LIBDIR= $(exec_prefix)/lib MANDIR= $(installdir)/man INCLUDEDIR= $(installdir)/include SCRIPTDIR= $(prefix)/lib # Detailed destination directories BINLIBDEST= $(LIBDIR)/python$(VERSION) LIBDEST= $(SCRIPTDIR)/python$(VERSION) INCLUDEPY= $(INCLUDEDIR)/python$(VERSION) EXECINCLUDEPY= $(exec_installdir)/include/python$(VERSION) LIBP= $(exec_installdir)/lib/python$(VERSION) DESTSHARED= $(BINLIBDEST)/site-packages LIBPL= $(LIBP)/config PYTHONLIBS= $(LIBPL)/libpython$(VERSION).a MAKESETUP= $(LIBPL)/makesetup MAKEFILE= $(LIBPL)/Makefile CONFIGC= $(LIBPL)/config.c CONFIGCIN= $(LIBPL)/config.c.in SETUP= $(LIBPL)/Setup.config $(LIBPL)/Setup.local $(LIBPL)/Setup SYSLIBS= $(LIBM) $(LIBC) ADDOBJS= $(LIBPL)/python.o config.o # Portable install script (configure doesn't always guess right) INSTALL= $(LIBPL)/install-sh -c # Shared libraries must be installed with executable mode on some systems; # rather than figuring out exactly which, we always give them executable mode. # Also, making them read-only seems to be a good idea... INSTALL_SHARED= ${INSTALL} -m 555 # === Fixed rules === # Default target. This builds shared libraries only default: sharedmods # Build everything all: static sharedmods # Build shared libraries from our extension modules sharedmods: $(SHAREDMODS) # Build a static Python binary containing our extension modules static: $(TARGET) $(TARGET): $(ADDOBJS) lib.a $(PYTHONLIBS) Makefile $(BASELIB) $(LINKCC) $(LDFLAGS) $(LINKFORSHARED) \ $(ADDOBJS) lib.a $(PYTHONLIBS) \ $(LINKPATH) $(BASELIB) $(MODLIBS) $(LIBS) $(SYSLIBS) \ -o $(TARGET) $(LDLAST) install: sharedmods if test ! -d $(DESTSHARED) ; then \ mkdir $(DESTSHARED) ; else true ; fi -for i in X $(SHAREDMODS); do \ if test $$i != X; \ then $(INSTALL_SHARED) $$i $(DESTSHARED)/$$i; \ fi; \ done # Build the library containing our extension modules lib.a: $(MODOBJS) -rm -f lib.a ar cr lib.a $(MODOBJS) -$(RANLIB) lib.a # This runs makesetup *twice* to use the BASESETUP definition from Setup config.c Makefile: Makefile.pre Setup $(BASESETUP) $(MAKESETUP) $(MAKESETUP) \ -m Makefile.pre -c $(CONFIGCIN) Setup -n $(BASESETUP) $(SETUP) $(MAKE) -f Makefile do-it-again # Internal target to run makesetup for the second time do-it-again: $(MAKESETUP) \ -m Makefile.pre -c $(CONFIGCIN) Setup -n $(BASESETUP) $(SETUP) # Make config.o from the config.c created by makesetup config.o: config.c $(CC) $(CFLAGS) -c config.c # Setup is copied from Setup.in *only* if it doesn't yet exist Setup: cp $(srcdir)/Setup.in Setup # Make the intermediate Makefile.pre from Makefile.pre.in Makefile.pre: Makefile.pre.in sedscript sed -f sedscript $(srcdir)/Makefile.pre.in >Makefile.pre # Shortcuts to make the sed arguments on one line P=prefix E=exec_prefix H=Generated automatically from Makefile.pre.in by sedscript. L=LINKFORSHARED # Make the sed script used to create Makefile.pre from Makefile.pre.in sedscript: $(MAKEFILE) sed -n \ -e '1s/.*/1i\\/p' \ -e '2s%.*%# $H%p' \ -e '/^VERSION=/s/^VERSION=[ ]*\(.*\)/s%@VERSION[@]%\1%/p' \ -e '/^CC=/s/^CC=[ ]*\(.*\)/s%@CC[@]%\1%/p' \ -e '/^CXX=/s/^CXX=[ ]*\(.*\)/s%@CXX[@]%\1%/p' \ -e '/^DEFS=/s/^DEFS=[ ]*\(.*\)/s%@DEFS[@]%\1%/p' \ -e '/^MAINCC=/s/^MAINCC=[ ]*\(.*\)/s%@MAINCC[@]%\1%/p' \ -e '/^LINKCC=/s/^LINKCC=[ ]*\(.*\)/s%@LINKCC[@]%\1%/p' \ -e '/^OPT=/s/^OPT=[ ]*\(.*\)/s%@OPT[@]%\1%/p' \ -e '/^CPPFLAGS=/s/^CPPFLAGS=[ ]*\(.*\)/s%@CPPFLAGS[@]%\1%/p' \ -e '/^LDFLAGS=/s/^LDFLAGS=[ ]*\(.*\)/s%@LDFLAGS[@]%\1%/p' \ -e '/^LDLAST=/s/^LDLAST=[ ]*\(.*\)/s%@LDLAST[@]%\1%/p' \ -e '/^DEFS=/s/^DEFS=[ ]*\(.*\)/s%@DEFS[@]%\1%/p' \ -e '/^LIBS=/s/^LIBS=[ ]*\(.*\)/s%@LIBS[@]%\1%/p' \ -e '/^LIBM=/s/^LIBM=[ ]*\(.*\)/s%@LIBM[@]%\1%/p' \ -e '/^LIBC=/s/^LIBC=[ ]*\(.*\)/s%@LIBC[@]%\1%/p' \ -e '/^RANLIB=/s/^RANLIB=[ ]*\(.*\)/s%@RANLIB[@]%\1%/p' \ -e '/^MACHDEP=/s/^MACHDEP=[ ]*\(.*\)/s%@MACHDEP[@]%\1%/p' \ -e '/^SO=/s/^SO=[ ]*\(.*\)/s%@SO[@]%\1%/p' \ -e '/^LDSHARED=/s/^LDSHARED=[ ]*\(.*\)/s%@LDSHARED[@]%\1%/p' \ -e '/^BLDSHARED=/s/^BLDSHARED=[ ]*\(.*\)/s%@BLDSHARED[@]%\1%/p' \ -e '/^CCSHARED=/s/^CCSHARED=[ ]*\(.*\)/s%@CCSHARED[@]%\1%/p' \ -e '/^SGI_ABI=/s/^SGI_ABI=[ ]*\(.*\)/s%@SGI_ABI[@]%\1%/p' \ -e '/^$L=/s/^$L=[ ]*\(.*\)/s%@$L[@]%\1%/p' \ -e '/^$P=/s/^$P=\(.*\)/s%^$P=.*%$P=\1%/p' \ -e '/^$E=/s/^$E=\(.*\)/s%^$E=.*%$E=\1%/p' \ $(MAKEFILE) >sedscript echo "/^#@SET_CCC@/d" >>sedscript echo "/^installdir=/s%=.*%= $(installdir)%" >>sedscript echo "/^exec_installdir=/s%=.*%=$(exec_installdir)%" >>sedscript echo "/^srcdir=/s%=.*%= $(srcdir)%" >>sedscript echo "/^VPATH=/s%=.*%= $(VPATH)%" >>sedscript echo "/^LINKPATH=/s%=.*%= $(LINKPATH)%" >>sedscript echo "/^BASELIB=/s%=.*%= $(BASELIB)%" >>sedscript echo "/^BASESETUP=/s%=.*%= $(BASESETUP)%" >>sedscript # Bootstrap target boot: clobber VERSION=`$(PYTHON) -c "import sys; print sys.version[:3]"`; \ installdir=`$(PYTHON) -c "import sys; print sys.prefix"`; \ exec_installdir=`$(PYTHON) -c "import sys; print sys.exec_prefix"`; \ $(MAKE) -f $(srcdir)/Makefile.pre.in VPATH=$(VPATH) srcdir=$(srcdir) \ VERSION=$$VERSION \ installdir=$$installdir \ exec_installdir=$$exec_installdir \ Makefile # Handy target to remove intermediate files and backups clean: -rm -f *.o *~ # Handy target to remove everything that is easily regenerated clobber: clean -rm -f *.a tags TAGS config.c Makefile.pre $(TARGET) sedscript -rm -f *.so *.sl so_locations # Handy target to remove everything you don't want to distribute distclean: clobber -rm -f Makefile Setup egenix-mx-base-3.2.7/mx/Tools/mxTools/Setup.in0000664000175000017500000000024406614104103021026 0ustar lemburglemburg# Build extensions shared: *shared* # # # mxTools module # mxTools mxTools.c # # xmap module (provided by Christopher Tavares ) # xmap xmap.c egenix-mx-base-3.2.7/mx/Tools/mxTools/__init__.py0000664000175000017500000000015110473122171021507 0ustar lemburglemburgfrom mxTools import * from mxTools import __version__ # xmap is no longer supported #from xmap import * egenix-mx-base-3.2.7/mx/Tools/mxTools/bench1.py0000664000175000017500000000167007315370437021132 0ustar lemburglemburgimport hack import mx.Tools.NewBuiltins k = range(10000) l = range(1,10001) loops = trange(100) def f(k=k,l=l,tuples=tuples,loops=loops): for i in loops: for a,b in tuples(k,l): pass def f1(k=k,l=l,lists=lists,loops=loops): for i in loops: for a,b in lists(k,l): pass def g(k=k,l=l,map=map,loops=loops): for i in loops: for a,b in map(None,k,l): pass def h(k=k,l=l,indices=indices,len=len,loops=loops): for i in loops: for i in indices(k): a,b = k[i], l[i] print 'with tuples():', hack.clock('f()') print 'with lists():', hack.clock('f1()') print 'with map():', hack.clock('g()') print 'indexed:', hack.clock('h()') print 'map(None,...):', hack.clock('apply(map,(None,)+(k,)*100)') print 'tuples(...):', hack.clock('tuples((k,)*100)') print 'lists(...):', hack.clock('lists((k,)*100)') # Check assert apply(map,(None,)+(k,)*100) == tuples((k,)*100) egenix-mx-base-3.2.7/mx/Tools/mxTools/bench2.py0000664000175000017500000000067707576155675021157 0ustar lemburglemburgimport hack import mx.Tools.NewBuiltins a = trange(10000) def f1(): x = (a,a,a) for i in trange(100): x = lists(x) def f2(): x = (a,a,a) for i in trange(100): x = tuples(x) def f3(apply=apply,map=map,tuple=tuple): x = (a,a,a) y = None for i in trange(100): x = apply(map,(y,)+tuple(x)) print 'lists:',hack.clock('f1()') print 'tuples:',hack.clock('f2()') print 'map:',hack.clock('f3()') egenix-mx-base-3.2.7/mx/Tools/mxTools/hack.py0000664000175000017500000003357711564465601020712 0ustar lemburglemburg""" Hacking Tools for Python (c) 1997-2000, Copyright by Marc-Andre Lemburg (mal@lemburg.com); All Rights Reserved. Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee or royalty is hereby granted, provided that the above copyright notice appear in all copies and that both the copyright notice and this permission notice appear in supporting documentation or portions thereof, including modifications, that you make. THE AUTHOR MARC-ANDRE LEMBURG DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE ! """ __version__ = '0.5' __package_info__ = """ BEGIN PYTHON-PACKAGE-INFO 1.0 Title: Hacking tools for Python Current-Version: 0.5 Home-Page: http://www.lemburg.com/python Primary-Site: http://www.lemburg.com/python/hack.py This module includes some tools that I find useful to examine code from inside an interactive interpreter session. It includes functions to display doc strings, dictionaries, sequences, etc. in a more or less nice format and common stuff like disassembly routines, timing gadgets and exception helpers. END PYTHON-PACKAGE-INFO """ import types,sys,time,re INDENT = ' ' # string used to indent one level in show,docs,... def docs(c, INDENT=INDENT): """ doc(c) -- print c's doc-strings """ try: showobject(c,'',0) showdocstring(c.__doc__,1) if hasattr(c,'__version__'): print print INDENT+'[Version: %s]' % c.__version__ except AttributeError: pass print items = [] try: items = c.__dict__.items() except AttributeError: items = [] try: for m in c.__methods__: items.append((m,getattr(c,m))) except AttributeError: pass if items: items.sort() for name,obj in items: if hasattr(obj,'__doc__') and obj.__doc__: showobject(obj,name, 1) showdocstring(obj.__doc__, 2) # Helper for docs: def func_sig(func): """func_sig(func) Returns the signature of a Python function/method as string. Keyword initializers are also shown using repr(). Representations longer than 100 bytes are truncated. XXX Anonymous arguments ((a,b,c)=(1,2,3)) are not supported and probably never will be since they require disassembling the byte code which is bound to fail once byte code optimizers find their way into every Pythoneers home... """ if hasattr(func,'im_func'): # func is a method func = func.im_func code = func.func_code fname = code.co_name callargs = code.co_argcount # XXX Uses hard coded values taken from Include/compile.h args = list(code.co_varnames[:callargs]) if func.func_defaults: i = len(args) - len(func.func_defaults) for default in func.func_defaults: try: r = repr(default) except: r = '' if len(r) > 100: r = r[:100] + '...' arg = args[i] if arg[0] == '.': # anonymous arguments arg = '(...)' args[i] = '%s=%s' % (arg,r) i = i + 1 if code.co_flags & 0x0004: # CO_VARARGS args.append('*'+code.co_varnames[callargs]) callargs = callargs + 1 if code.co_flags & 0x0008: # CO_VARKEYWORDS args.append('**'+code.co_varnames[callargs]) callargs = callargs + 1 return '%s(%s)' % (fname,', '.join(args)) spaces = re.compile('([ ]*)[^ ]') def showdocstring(doc,level=0, split=re.split,INDENT=INDENT, spaces=spaces): try: l = split(doc.strip(),'\n\|\r\|\r\n') except: #print '%sno doc string available' % (INDENT*level) return if len(l) > 1: # Try to even out the indents indent = sys.maxint l = [line.expandtabs() for line in l] for i in range(1,len(l)): m = spaces.match(l[i]) if m: sp = m.regs[1][1] if sp < indent: indent = sp else: # Blank line pass l = [l[0].strip()] + map(lambda x,indent=indent: x[indent:],l[1:]) else: l = [x.strip() for x in l] l = map( lambda x,n=level,INDENT=INDENT: INDENT*n + x, l) s = '\n'.join(l)+'\n' print s def showobject(obj,name='',level=0): if type(obj) in (types.FunctionType,types.MethodType): try: objrepr = func_sig(obj) except AttributeError: objrepr = name elif type(obj) is types.ModuleType: objrepr = 'Module ' + name elif type(obj) is types.ClassType: objrepr = 'Class ' + name else: objrepr = name if not objrepr: try: objrepr = obj.__name__ except AttributeError: objrepr = repr(obj) print INDENT*level + objrepr,':' ### def info(c): """ info(c) -- print all the information known about c """ print 'Documentation:' print '-'*72 docs(c) print print 'Attributes, Internals, etc.:' print '-'*72 show(c,2) def show(c,maxdepth=2,level=0, INDENT=INDENT): """ show(c) -- print all the internals of c """ try: # print '%srepr:' % (INDENT*level) r = repr(c) if len(r) > 40: r = r[:40]+' ...' print '%s%s' % (INDENT*(level),r) except: return level = level + 1 if level > maxdepth: #print return showobj(c,'__name__',maxdepth,level) showobj(c,'__class__',maxdepth,level) showseq(c,'__bases__',maxdepth,level) showattr(c,'__methods__',maxdepth,level) showattr(c,'__members__',maxdepth,level) showattr(c,'__attributes__',maxdepth,level) showdict(c,'__dict__',maxdepth,level) # print # Helpers for show: def showattr(c,name,maxdepth=1,level=0, INDENT=INDENT): """ showattr(c,name) -- for a in c.name: print c.a """ try: items = getattr(c,name) items.sort() except AttributeError: return print '%s%s :' % (INDENT*level,name) level = level + 1 if level > maxdepth: return for x in items: try: a = getattr(c,x) r = repr(a) except: a = None r = '*exception*' if len(r) > 40: r = r[:40]+' ...' if level < maxdepth and a is not None: print '%s%s :' % (INDENT*level,x) show(a,maxdepth,level+1) else: print '%s%s : %s' % (INDENT*level,x,r) def showobj(c,name,maxdepth=1,level=0, INDENT=INDENT): """ showobj(c,name) -- print object c.name """ try: x = getattr(c,name) except AttributeError: return print '%s%s :' % (INDENT*level,name) level = level + 1 if level > maxdepth: return show(x,maxdepth,level) def showseq(c,name,maxdepth=1,level=0, INDENT=INDENT): """ showseq(c,name) -- print sequence c.name """ try: items = getattr(c,name) except AttributeError: return print '%s%s :' % (INDENT*level,name) level = level + 1 if level > maxdepth: return if not items: print '%s%s' % (INDENT*level,items) return for x in items: try: r = repr(x) except: x = None r = '*exception*' if len(r) > 40: r = r[:40]+' ...' if level < maxdepth and x is not None: print '%s%s :' % (INDENT*level,r) show(x,maxdepth,level+1) else: print '%s%s' % (INDENT*level,r) def showdict(c,name,maxdepth=1,level=0, INDENT=INDENT): """ showdict(c,name) -- print c.name.items() """ try: dict = getattr(c,name) items = dict.items() items.sort() except AttributeError: return print '%s%s :' % (INDENT*level,name) level = level + 1 if level > maxdepth: return if not items: print '%s%s' % (INDENT*level,dict) return for key,value in items: try: k = str(key) except: k = '*exception*' if len(k) > 40: k = k[:40]+' ...' try: v = repr(value) except: v = '*exception*' value = None if len(v) > 40: v = v[:40]+' ...' if level < maxdepth and value is not None: print '%s%s :' % (INDENT*level,k) show(value,maxdepth,level+1) else: print '%s%s : %s' % (INDENT*level,k,v) # End of show helpers def dis(c): """ dis(c) -- disassemble c; can be a code-string, -object a function or a method """ if type(c) == types.StringType: c = compile(c,'hacking','exec') elif type(c) == types.FunctionType: c = c.func_code elif type(c) == types.MethodType or type(c) == types.UnboundMethodType: c = c.im_func.func_code import dis dis.disco(c) def clock(code,namespace=None): """ clock(code[,namespace]) -- clock the code executed in namespace which defaults to the top level namespace __main__. """ code = """import time;hack_timer=time.time(),time.clock()\n"""+\ code+\ """\nhack_timer=time.time()-hack_timer[0],time.clock()-hack_timer[1]; print '%.3fabs %.3fusr sec.' % hack_timer\n""" c = compile(code,'hack.clock-code','exec') if namespace: exec c in namespace else: import __main__ exec c in __main__.__dict__ return '' class timer: """ timer class with a quite obvious interface - .start() starts a fairly accurate CPU-time timer plus an absolute timer - .stop() stops the timer and returns a tuple: the CPU-time in seconds and the absolute time elapsed since .start() was called """ utime = 0 atime = 0 def start(self, clock=time.clock,time=time.time): self.atime = time() self.utime = clock() def stop(self, clock=time.clock,time=time.time): self.utime = clock() - self.utime self.atime = time() - self.atime return self.utime,self.atime def usertime(self, clock=time.clock,time=time.time): self.utime = clock() - self.utime self.atime = time() - self.atime return self.utime def abstime(self, clock=time.clock,time=time.time): self.utime = clock() - self.utime self.atime = time() - self.atime return self.utime def __str__(self): return '%0.2fu %0.2fa sec.' % (self.utime,self.atime) def profile(code,namespace=None): """ profile(code[,namespace]) -- profile the code executed in namespace which defaults to the top level namespace __main__. """ code = 'import profile;profile.run("'+code+'")' c = compile(code,'profiling','exec') if namespace: exec c in namespace else: import __main__ exec c in __main__.__dict__ def why(): """ why() -- show locals that caused the last exception """ if hasattr(sys,'last_traceback'): tb = sys.last_traceback while tb.tb_next != None: tb = tb.tb_next frame = tb.tb_frame print 'locals() of the last exception:' dict(frame.f_locals) #return(frame.f_locals) else: print 'no exception available !' def dict(d,maxindent=3,indent=0, INDENT=INDENT): """ dict(d,maxindent,indent) -- show dict d with given indentation (=0) """ if hasattr(d,'items'): print indent*INDENT+'{' if indent < maxindent: items = d.items() items.sort() for k,v in items: print indent*INDENT+' ',k,':' try: print_here = dict(v,maxindent,indent+1) if print_here: s = repr(v) if len(s) > 40: s = s[:40] + '...' print (indent+1)*INDENT,s except: print (indent+1)*INDENT,'*exception*' else: print indent*INDENT,'...' print indent*INDENT+'}' return None else: return 'Error: no items-method' def seq(l,maxindent=10,indent=0): """ seq(l,maxindent=10,indent=0) -- show sequence l with given indentation (=0), limiting the indent-depth at maxindent (=10) """ try: len(l) if type(l) == type('') or indent > maxindent: raise TypeError for i in l: try: seq(i,maxindent,indent+1) except ValueError: print '*exception*', print indent*' |' return except TypeError: print indent*' |', s = repr(l) if len(s) > 40: s = s[:40] + '...' print s #t = (1,2,3,(4,5,6),(3,(4,5,6),(3,4))) #t = t + t #seq(t) def modules(): """ modules() -- pretty print a list of loaded modules and packages; cached miss entries in sys.modules are not shown. """ l = sys.modules.items() l.sort() print 'Loaded modules and packages:' for k,v in l: p = k.split('.') for i in range(len(p)-1): p[i] = ' ' n = ''.join(p) if v is not None: if hasattr(v,'__path__'): print ' %s[%s]' % (''.join(p[:-1]),p[-1]) else: print ' %s' % (n) egenix-mx-base-3.2.7/mx/Tools/mxTools/ld_so_aix0000775000175000017500000001351507057236756021320 0ustar lemburglemburg#!/bin/sh # # ======================================================================== # FILE: ld_so_aix # TYPE: executable, uses makexp_aix # SYSTEM: AIX # # DESCRIPTION: Creates a shareable .o from a set of pre-compiled # (unshared) .o files # # USAGE: ld_so_aix [CC] [arguments] # # ARGUMENTS: Same as for "ld". The following arguments are processed # or supplied by this script (those marked with an asterisk # can be overriden from command line): # # Argument Default value # (*) -o [OutputFileName] -o shr.o # (*) -e [EntryPointLabel] -e init[OutputBaseName] # (*) -bE:[ExportFile] -bE:[OutputBaseName].exp # (*) -bI:[ImportFile] -bI:./python.exp # -bM:[ModuleType] -bM:SRE # -bhalt:[Number] -bhalt:4 # -T[Number] -T512 # -H[Number] -H512 # -lm # # The compiler specific ("-lc" or "-lc_r", "-lpthreads",...) # arguments will be automatically passed to "ld" according # to the CC command provided as a first argument to this # script. Usually, the same CC command was used to produce # the pre-compiled .o file(s). # # NOTES: 1. Since "ld_so_aix" was originally written for building # shared modules for the Python interpreter, the -e and # -bI default values match Python's conventions. In # Python, the entry point for a shared module is based # on the module's name (e.g., the "mathmodule" will # expect an entry point of "initmath"). # 2. The script accepts multiple .o or .a input files and # creates a single (shared) output file. The export list # that is created is based on the output file's basename # with the suffix ".exp". # 3. The resulting shared object file is left in the # current directory. # 4. Uncommenting the "echo" lines gives detailed output # about the commands executed in the script. # # # HISTORY: Oct-1996 -- Support added for multiple .o files -- # -- and optional arguments processing. -- # Chris Myers (myers@tc.cornell.edu), Keith Kwok # (kkwok@tc.cornell.edu) and Vladimir Marangozov # # Aug-6-1996 -- Take care of the compiler specific -- # -- args by leaving CC to invoke "ld". -- # Vladimir Marangozov # # Jul-1-1996 -- Make sure to use /usr/ccs/bin/ld -- # -- Use makexp_aix for the export list. -- # Vladimir Marangozov (Vladimir.Marangozov@imag.fr) # # Manus Hand (mhand@csn.net) -- Initial code -- 6/24/96 # ======================================================================== # usage="Usage: ld_so_aix [CC command] [ld arguments]" if test ! -n "$*"; then echo $usage; exit 2 fi makexp=`dirname $0`/makexp_aix # Check for existence of compiler. CC=$1; shift whichcc=`which $CC` if test ! -x "$whichcc"; then echo "ld_so_aix: Compiler '$CC' not found; exiting." exit 2 fi if test ! -n "$*"; then echo $usage; exit 2 fi # Default import file for Python # Can be overriden by providing a -bI: argument. impfile="./python.exp" # Parse arguments while test -n "$1" do case "$1" in -e | -Wl,-e) if test -z "$2"; then echo "ld_so_aix: The -e flag needs a parameter; exiting."; exit 2 else shift; entry=$1 fi ;; -e* | -Wl,-e*) entry=`echo $1 | sed -e "s/-Wl,//" -e "s/-e//"` ;; -o) if test -z "$2"; then echo "ld_so_aix: The -o flag needs a parameter; exiting."; exit 2 else shift; objfile=$1 fi ;; -o*) objfile=`echo $1 | sed "s/-o//"` ;; -bI:* | -Wl,-bI:*) impfile=`echo $1 | sed -e "s/-Wl,//" -e "s/-bI://"` ;; -bE:* | -Wl,-bE:*) expfile=`echo $1 | sed -e "s/-Wl,//" -e "s/-bE://"` ;; *.o | *.a) objs="$objs $1" args="$args $1" ;; -bM:* | -Wl,-bM:* | -H* | -Wl,-H* | -T* | -Wl,-T* | -lm) ;; *) args="$args $1" ;; esac shift done if test -z "$objs"; then echo "ld_so_aix: No input files; exiting." exit 2 elif test ! -r "$impfile"; then echo "ld_so_aix: Import file '$impfile' not found or not readable; exiting." exit 2 fi # If -o wasn't specified, assume "-o shr.o" if test -z "$objfile"; then objfile=shr.o fi filename=`basename $objfile | sed "s/\.[^.]*$//"` # If -bE: wasn't specified, assume "-bE:$filename.exp" if test -z "$expfile"; then expfile="$filename.exp" fi # Default entry symbol for Python modules = init[modulename] # Can be overriden by providing a -e argument. if test -z "$entry"; then entry=init`echo $filename | sed "s/module.*//"` fi #echo "ld_so_aix: Debug info section" #echo " -> output file : $objfile" #echo " -> import file : $impfile" #echo " -> export file : $expfile" #echo " -> entry point : $entry" #echo " -> object files: $objs" #echo " -> CC arguments: $args" CCOPT="-Wl,-e$entry -Wl,-bE:$expfile -Wl,-bI:$impfile -Wl,-bhalt:4" CCOPT="$CCOPT -Wl,-bM:SRE -Wl,-T512 -Wl,-H512 -lm -o $objfile" CCARGS="$args" # Export list generation. #echo $makexp $expfile "$objfile" $objs $makexp $expfile "$objfile" $objs # Perform the link. #echo $CC $CCOPT $CCARGS $CC $CCOPT $CCARGS # Delete the module's export list file. # Comment this line if you need it. rm -f $expfile egenix-mx-base-3.2.7/mx/Tools/mxTools/maclibs.sit0000664000175000017500000002761606660622604021561 0ustar lemburglemburgSIT!/rLau mxTools.ppc.slbDʔ2T#8shlbPyth:Z:Z["-dP^]D 6}᧏xʏ Adu>Ht8Z7HAgfk^{:GoG">X=qH !9gz&<r/j}d?${ߛԨ=fF/ HM myֶa3oa7GYƈ0;L&v$&MA3ٛHYTلF}g\#u{+9µha!(*t5'S]F޷, YV =B" FXJ|Cwpr%?8"EɱњxIܕ}q'g~z|FpDÓE !$&ʸ&\o;B :) f}}ƨOH6GI LJxL)HD92!;DDO34;dPg`Ʀ# Jw␨DP/k~kL8>0͞7z~řu#0x;l0/';'EkEѲ=O:|4b / IgGw?amWS/c/x8W[9oLތG<8^$Z['e):M ]S$Jg0i( UIs2>EOXCCPtG㏾O10;%0Hl4p\4𛲡yKs#3s3yX 3};-v2C ZQ/]`h<1<99>;?saFh<:a?]9*YWqsտ=(tot_Cl훘9/M>"|J/txruV` tizM[;ĶJ=wsdk?~ Cxĕ^z˦륧4ky<(k;.NLAQ],RY;UͬdO}HR%H~8?:JQ2Iᅾ0>Nw(9?uSiG0K6* mb?5yCM1O&ۘc".0)xڈ=}p͕sms ~smokdӗ&7}jr&?Mΰ&CmM̜^h$4[[-mno4 Mn7ZBQ󶺺LVǛްu.TuyF ah _4wz-=cr# LY3̙fζ.yIhi1=٪tPOj^_8v_hr}\S 'gOmr {YGoP [C7z8y'\lߪ:[+ac[syK*wD,=f}zLcOQcUR}=ͷkm3?ғ>`gf!"ÓM9?e-E60 nHGhog>`^w7!țpkl(yV8+Nx{E0Ot~q1|0k79[Q9@DDž8G)[&Z~ؐh  fm$?!a>/}s2(=C7 3p^1 ;~g}D6N˅HQٜ6\a|yi93TRI[<}yA=UyЖu /q| <[/Z([A,ʗQ??t`×i6n,>zKWxdf/9Tp6B3uX\c:r:[{Cqs`[6 .N}>q?NZj5e٦Іgޛ_f9r9 z01!f`( 3?Ce~Ӧ9mY:z\uv6t>t- rFðg<2.,%8J7!62~Hni8zgPFy'u93'g򎧖|xǷtLIw9YF-}ggvI]e?5n֟3?ZKu1T_kn:;o= Gjm{Ǟ]iYd;WMY~rSjgS57z3e*^-x3K͍jmfљUӵ̪.MƼ kB;Grf֙!߳]ٜ=zxS<=Tasc@KԱ?;E]СsWw9;!EgͼgE_咵ϢÙrȡ|gv>HuֲnEo6*_󃢐T&)Wtu; jޫyjHgǀG |Q̙}q?Yr^570>Ю7w 7}C54v^[~uw0LS{\o/s^$/;6g əq|=k7c\O5=G>͗{3s]1| [sa/|\<.юspL3^G?pXy ߶{1})di0Jeqĵϡ~:izqkj :ϼLSމ.܈9TNA~+y+c!lQ<fZ2y/H-7{؏q$㭼Zs K =/ʓU}  yfh.Z …4 da1>%}39\s.:+2O< Y:ٻ,?t^q_^Ne=[zT{9IGH#rzT>W3*'{.V +wjk q9ϡy3ߪs,xeϖwh Ժ{^8_uчg.d;O}R$ܦ^ީ:Hh߾dH'h}$yX#Ϥڟzo+3^9?mrg{ޚپ|v75J'c{9FdE xSI:IzپdUI;fu^3fЇt*o_s}&aGΏv//:/ uMÅG u' u:nPWV;R,Wk-)ԕ uBݩBp(*}Px.XKZ uㅺ]utNutNuTFDT]U2%|\@Al=;ayfD1n^8|Ǚgϖ>迄cY)qAͱ 꾨0(ܞN>+GE|յ;[̬5?^Vg/PgAcX}_}=OlZB&Mzx4G+UxuTݶK+,pn*ÙU<'L Ru;niZ=>鑷?驭2ʪJ**Q~|ߪe?Z+˖Ҟea%^ұg?\|xx{qӢ-Z:;>U4Y=[v;Uv~c{>|V)l>=[SsƗK]2[W׮{ƓBNT&le{G |zdK-[6##/>~\`y) |z=1<LwF}[Ie$۷'1T]C_b(sm%e|LfwiAOг "1H#I&hxg! Х/}i!2/$f sC]JnO Iѹ@ K [; <!U# FRf?,1L!|")5HV+l31SdQeT5;3íMzjE7HaDj=c#K135x@,o|`a={j~Qm9 z89Z Sd(C{wy $T/vz_Dgw<6|ZbݖNϩ".! 0Zs ,c+0%A3g\K ,|9,iFE$NTcDTJ_>QUCŝy\n@TLF!80g$` CI4gCg)9D kI sj\ Рk#h$j&. &ظ-Wq$ v6MƄ; @Hi'5m|]YrnL"0 ky-rmn1AȬdI$ᦉd-J=' jb=DUeKG< #XqcL[73| FRV\d )9æ:ҡ>$@2 Mh|?sX*@.+r:+I$"q;O;KqfK0i0nd. QdKaEee|ZFт>fXl Ui2!OT++'PÆ^8#hhH'nQ l9EQ{:rSab=$;B{x0(:j9!N(Q+XHQގ*?ȣ}ɥlҠu0޺M1Jh&%*m yrSʰx&SCpZp^Q dp=Hl*/GH'FJVpzNʯʶ~ҥ(MzJ<1?{C +) x=oTAܬ~Sd(7R;5zE*yt-k ?2HHd22hYSQ-#(Q=rS_CܨFZ Mܤ}ܨ0YǡܤZ!CYf*Z&=1!]N{Ż=<9]>/疊?+ëŎ+B. y[{qyVe?i+қ.FnxT[Q#yÅ/ɋB.Ux+ Y)YOS](o⬶8EOHx7G(o)lgq?>W̳Kȕ/T{\s~m&%&B!ݲd4IWH7y;>&Xaԥ& xmap.ppc.slb^DʔshlbPyth<߲<M ghhDӯs5<hJTG6,ߐ E)~3#FoQ9;k/RMPJ;J ՛(~'TnMe%qYF7aFJn-j3V+[XxG('G3^ml/=Dj°} @( YOBVL†oIMdʩawΛ/5[2m R"ZȗoSlYF$r*rFޔ˺v , .]0#iFP7"y#߻MF0i3$ cq y45a ^$&&jPybμkU;jL#^甇?Aȟy]2`[q" [O)Al/ǻ0{UXd cu8 u~/^%m숞V ky58]R&q-fgY/XWHHGC'''w񘼯ap\?HƫkOԜgi,#3?3s'?ν,"kw Iuͪ{uV׳QֵZ秙/b`]m 묮e~YfH)f4A=@9k~9OdQ:/Zotq?qƉvdk"?"شɑhK:{ |?|wc)yx,e_`^{CHꌿ8s_wt ]RKZ8w(Y  ѝȌ9s##* R%mS2 _K5:yf0~ӨN?17(_ѫzʔ%:zS:f׋)n3.N?J\Rw.<%/t ʾ^$]ʟZҪI1e=I,~`|GȏsrY > 7_{~e9^G3s-;mݵ{k@E: Ϻ,],?_{kdGKo|xg}Y?k{ǝ|_GO:oы3ij&=wko^ꛪ#E!~gP7~OWY8Lp=(0n/Π2>{c ޻y,֟.LF9aCF,K@OʎgILN&w} }CUt'5Xvn8Y~+/+=wN4q}љ:;ܹKȬ8VU_|V(Тwb?-XܗK}3p27Ge^Ⱦ;GP_ȐzԎ V]$_;g_SS}-l}|EO `XL-[+4@3ӭ/˦Vaozc݇}4-X{U+l 93hU̬Vʚ|aV*,[կ~ߊWҧqm}ȂiE -6!&(/dX_ $%xߠK`0a?bJ*eiQjwՕҢ2 hJQ]ֻrP/ +#w4m[ƍBL< "" ... # # where: # is the target export list filename. # is the path/file string to be appended # after the "#!" symbols in the first line of the # export file. Passing "" means deferred resolution. # is an object (.o) or an archive file (.a). # # HISTORY: # 3-Apr-1998 -- remove C++ entries of the form Class::method # Vladimir Marangozov # # 1-Jul-1996 -- added header information # Vladimir Marangozov # # 28-Jun-1996 -- initial code # Vladimir Marangozov (Vladimir.Marangozov@imag.fr) # ========================================================================== # Variables expFileName=$1 toAppendStr=$2 shift; shift; inputFiles=$* automsg="Generated automatically by makexp_aix" notemsg="NOTE: lists _all_ global symbols defined in the above file(s)." curwdir=`pwd` # Create the export file and setup the header info echo "#!"$toAppendStr > $expFileName echo "*" >> $expFileName echo "* $automsg (`date -u`)" >> $expFileName echo "*" >> $expFileName echo "* Base Directory: $curwdir" >> $expFileName echo "* Input File(s) : $inputFiles" >> $expFileName echo "*" >> $expFileName echo "* $notemsg" >> $expFileName echo "*" >> $expFileName # Extract the symbol list using 'nm' which produces quite # different output under AIX 4 than under AIX 3.2.5. # The following handles both versions by using a common flagset. # Here are some hidden tricks: # 1. Use /usr/ccs/bin/nm. Relevant to AIX 3.2.5 which has # another version under /usr/ucb/bin/nm. # 2. Use the -B flag to have a standard BSD representation # of the symbol list on both AIX 3.2.5 and AIX 4. The "-B" # flag is missing in the AIX 3.2.5 online usage help of 'nm'. # 3. Use the -x flag to have a hex representation of the symbol # values. This fills the leading whitespaces on AIX 4, # thus simplifying the sed statement. # 4. Eliminate all entries except those with either "B", "D" # or "T" key letters. We are interested only in the global # (extern) BSS, DATA and TEXT symbols. With the same statement # we eliminate object member lines relevant to AIX 4. # 5. Eliminate entries containing a dot. We can have a dot only # as a symbol prefix, but such symbols are undefined externs. # 6. Eliminate everything including the key letter, so that we're # left with just the symbol name. # 7. Eliminate all entries containing two colons, like Class::method # /usr/ccs/bin/nm -Bex $inputFiles \ | sed -e '/ [^BDT] /d' -e '/\./d' -e 's/.* [BDT] //' -e '/::/d' \ | sort | uniq >> $expFileName egenix-mx-base-3.2.7/mx/Tools/mxTools/mx.h0000664000175000017500000005570412133300665020212 0ustar lemburglemburg#ifndef MX_H #define MX_H /* mx -- Marc's eXtension modules for Python: basic macros This file is only meant to be included by the extension modules. DO NOT include it in the extension module's header file, since it will definitely cause troubles then. To enable debugging ceratin things, define one of these before including this file: MAL_REF_DEBUG -- debug reference counts (Py_MY_xxx) [this file] MAL_DEBUG -- enable debug output (DPRINTF) [mxstdlib.h] MAL_MEM_DEBUG -- enable malloc output (new,cnew,free,...) [mxstdlib.h] Copyright (c) 2000, Marc-Andre Lemburg; mailto:mal@lemburg.com Copyright (c) 2000-2013, eGenix.com Software GmbH; mailto:info@egenix.com See the documentation for further copyright information or contact the author. XXX Most of these macros and defines should really use an mx prefix to avoid collisions with native Python macros and defines. So far this has not happened, which is why this hasn't been implemented yet. */ /* --- Platform or compiler specific tweaks ------------------------------- */ /* Add some platform specific symbols to enable work-arounds for the static forward declaration of type definitions; note that the GNU C compiler does not have this problem. Many thanks to all who have contributed to this list. */ #ifndef BAD_STATIC_FORWARD # if (!defined(__GNUC__)) # if (defined(NeXT) || defined(sgi) || defined(_AIX) || (defined(__osf__) && defined(__DECC)) || defined(TrueCompaq64) || defined(__VMS)) # define BAD_STATIC_FORWARD # endif # endif #endif /* Some more tweaks for various platforms. */ /* VMS needs this define. Thanks to Jean-Franois PIRONNE */ #if defined(__VMS) # define __SC__ #endif /* xlC on AIX doesn't like the Python work-around for static forwards in ANSI mode (default), so we switch on extended mode. Thanks to Albert Chin-A-Young */ #if defined(__xlC__) # pragma langlvl extended #endif /* --- Standard header files ---------------------------------------------- */ /* Include the generic mx header file */ #include "mxh.h" /* Include nearly all Python symbols & definitions */ #include "Python.h" /* Include other standard stuff */ #include "mxstdlib.h" /* Include Python backward compatibility stuff */ #include "mxpyapi.h" /* --- Compiler support --------------------------------------------------- */ /* Support for compilers which don't like static forward declarations of arrays; Python 2.3 removed the support for BAD_STATIC_FORWARD which is why we now use our own little helpers here. */ #undef staticforward #undef statichere #ifdef BAD_STATIC_FORWARD # define staticforward extern # define statichere static #else # define staticforward static # define statichere static #endif /* --- Declare macros ----------------------------------------------------- */ #define Py_NONE (Py_INCREF(Py_None),Py_None) #ifdef MAL_REF_DEBUG # define printref(x) printf("* refcount for "#x" = %i\n",(long) x->ob_refcnt); #else # define printref(x) #endif /* --- Error handling ----------------------------------------------------- */ #define Py_Do(x) {if (!(x)) goto onError;} #define Py_ReturnOnError(errortype,errorstr) {PyErr_SetString(errortype,errorstr);return NULL;} #define Py_Assert(x,errortype,errorstr) {if (!(x)) {PyErr_SetString(errortype,errorstr);goto onError;}} #define Py_AssertWithArg(x,errortype,errorstr,a1) {if (!(x)) {PyErr_Format(errortype,errorstr,a1);goto onError;}} #define Py_AssertWith2Args(x,errortype,errorstr,a1,a2) {if (!(x)) {PyErr_Format(errortype,errorstr,a1,a2);goto onError;}} #define Py_AssertWith3Args(x,errortype,errorstr,a1,a2,a3) {if (!(x)) {PyErr_Format(errortype,errorstr,a1,a2,a3);goto onError;}} #define Py_Error(errortype,errorstr) {PyErr_SetString(errortype,errorstr);goto onError;} #define Py_ErrorWithArg(errortype,errorstr,a1) {PyErr_Format(errortype,errorstr,a1);goto onError;} #define Py_ErrorWith2Args(errortype,errorstr,a1,a2) {PyErr_Format(errortype,errorstr,a1,a2);goto onError;} #define Py_ErrorWith3Args(errortype,errorstr,a1,a2,a3) {PyErr_Format(errortype,errorstr,a1,a2,a3);goto onError;} /* --- Reference counting ------------------------------------------------- */ #ifdef MAL_REF_DEBUG static void mx_Py_INCREF(PyObject *v, const char *name, const char *filename, int lineno) { if (!Py_DebugFlag) { Py_XINCREF(v); return; } if (!v) mxDebugPrintf("[%s:%5i] Py_XINCREF( %-8s == NULL );\n", filename,lineno,name); else { Py_INCREF(v);; mxDebugPrintf("[%s:%5i] Py_XINCREF( %-8s at 0x%lx [%s]); " "new refcount = %i\n", filename,lineno,name,(long)v,v->ob_type->tp_name, v->ob_refcnt); } } static void mx_Py_DECREF(PyObject *v, const char *name, const char *filename, int lineno) { if (!Py_DebugFlag) { Py_XDECREF(v); return; } if (!v) mxDebugPrintf("[%s:%5i] Py_XDECREF( %-8s == NULL );\n", filename,lineno,name); else { int refcnt = v->ob_refcnt; Py_DECREF(v); if (refcnt <= 1) mxDebugPrintf("[%s:%5i] Py_XDECREF( %-8s at 0x%lx [%s]); " "object deleted\n", filename,lineno,name,(long)v,v->ob_type->tp_name); else mxDebugPrintf("[%s:%5i] Py_XDECREF( %-8s at 0x%lx [%s]); " "new refcount = %i\n", filename,lineno,name,(long)v,v->ob_type->tp_name, v->ob_refcnt); } } static void mx_Py_PRINT_REFCOUNT(PyObject *v, const char *name, const char *filename, int lineno) { if (!Py_DebugFlag) return; if (!v) mxDebugPrintf("[%s:%5i] Py_PRINT_REFCOUNT( %-8s == NULL );\n", filename,lineno,name); else { mxDebugPrintf("[%s:%5i] Py_PRINT_REFCOUNT( %-8s at 0x%lx [%s]) = %i;\n", filename,lineno,name,(long)v,v->ob_type->tp_name, v->ob_refcnt); } } # undef Py_INCREF # define Py_INCREF(x) mx_Py_INCREF((PyObject *)x,#x,__FILE__,__LINE__) # undef Py_DECREF # define Py_DECREF(x) mx_Py_DECREF((PyObject *)x,#x,__FILE__,__LINE__) # undef Py_XINCREF # define Py_XINCREF(x) mx_Py_INCREF((PyObject *)x,#x,__FILE__,__LINE__) # undef Py_XDECREF # define Py_XDECREF(x) mx_Py_DECREF((PyObject *)x,#x,__FILE__,__LINE__) # undef Py_CLEAR # define Py_CLEAR(x) {Py_XDECREF(x); x=0;} # define Py_DELETE(x) {if (x->ob_refcnt > 1) mxDebugPrintf("[%s:%5i] Py_DELETE( "#x" ) WARNING: Refcount = %i > 1\n",__FILE__,__LINE__,(int)x->ob_refcnt);Py_DECREF(x);} # define Py_PRINT_REFCOUNT(x) mx_Py_PRINT_REFCOUNT((PyObject *)x,#x,__FILE__,__LINE__) #else # define Py_DELETE(x) Py_DECREF(x) # define Py_PRINT_REFCOUNT(x) #endif #define Py_DEC_REF(x) {Py_XDECREF(x); x=0;} /* doing this once too often doesn't hurt; same as Py_CLEAR() */ /* Unreference a Python object. This is only used in Python debug builds and needed to keep track of all allocated references. Use in object constructors or free list implementations. */ #ifndef _Py_DEC_REFTOTAL # ifdef Py_REF_DEBUG # define _Py_DEC_REFTOTAL _Py_RefTotal-- # else # define _Py_DEC_REFTOTAL # endif #endif #define mxPy_UNREF(x) _Py_DEC_REFTOTAL /* --- Debug logging ------------------------------------------------------ */ #ifdef MAL_DEBUG # define Py_PRINT_REPR(message, obj) \ if (Py_DebugFlag) { \ PyObject *_debug_repr = PyObject_Repr(obj); \ mxDebugPrintf(message, PyString_AsString(_debug_repr)); \ Py_XDECREF(_debug_repr); \ } #else # define Py_PRINT_REPR(message, obj) #endif /* --- Argument passing and checking -------------------------------------- */ /* No arguments expected; also use Py_MethodListEntryNoArgs() for this kind of fct; this check is no longer needed in Python 2.3 and later */ #if PY_VERSION_HEX >= 0x02030000 # define Py_NoArgsCheck() {if (0) goto onError;} #else # define Py_NoArgsCheck() {if (!PyArg_NoArgs(args)) goto onError;} #endif /* For functions with old style args (Py_MethodListEntrySingleArg) */ #define Py_GetArgObject(a) {a = args; if (!a) {PyErr_SetString(PyExc_TypeError,"function/method requires an argument"); goto onError;}} #define Py_GetSingleArg(format,a1) {if (!PyArg_Parse(args,format,&a1)) goto onError;} /* For functions with new style args: */ #define Py_GetArg(format,a1) {if (!PyArg_ParseTuple(args,format,&a1)) goto onError;} #define Py_Get2Args(format,a1,a2) {if (!PyArg_ParseTuple(args,format,&a1,&a2)) goto onError;} #define Py_Get3Args(format,a1,a2,a3) {if (!PyArg_ParseTuple(args,format,&a1,&a2,&a3)) goto onError;} #define Py_Get4Args(format,a1,a2,a3,a4) {if (!PyArg_ParseTuple(args,format,&a1,&a2,&a3,&a4)) goto onError;} #define Py_Get5Args(format,a1,a2,a3,a4,a5) {if (!PyArg_ParseTuple(args,format,&a1,&a2,&a3,&a4,&a5)) goto onError;} #define Py_Get6Args(format,a1,a2,a3,a4,a5,a6) {if (!PyArg_ParseTuple(args,format,&a1,&a2,&a3,&a4,&a5,&a6)) goto onError;} #define Py_Get7Args(format,a1,a2,a3,a4,a5,a6,a7) {if (!PyArg_ParseTuple(args,format,&a1,&a2,&a3,&a4,&a5,&a6,&a7)) goto onError;} #define Py_Get8Args(format,a1,a2,a3,a4,a5,a6,a7,a8) {if (!PyArg_ParseTuple(args,format,&a1,&a2,&a3,&a4,&a5,&a6,&a7,&a8)) goto onError;} /* The keywords array string type */ #define Py_KEYWORDS_STRING_TYPE char /* For functions with keywords -- the first macro parameter must be the keywords array given as e.g. static const char *keywords[] = {"first","second","third", 0}; with an entry for every argument (in the correct order). The functions must be included in the method list using Py_MethodWithKeywordsListEntry() and be declared as Py_C_Function_WithKeywords(). */ #define Py_KeywordGetArg(keywords,format,a1) {if (!PyArg_ParseTupleAndKeywords(args,kws,format,keywords,&a1)) goto onError;} #define Py_KeywordGet2Args(keywords,format,a1,a2) {if (!PyArg_ParseTupleAndKeywords(args,kws,format,keywords,&a1,&a2)) goto onError;} #define Py_KeywordGet3Args(keywords,format,a1,a2,a3) {if (!PyArg_ParseTupleAndKeywords(args,kws,format,keywords,&a1,&a2,&a3)) goto onError;} #define Py_KeywordGet4Args(keywords,format,a1,a2,a3,a4) {if (!PyArg_ParseTupleAndKeywords(args,kws,format,keywords,&a1,&a2,&a3,&a4)) goto onError;} #define Py_KeywordGet5Args(keywords,format,a1,a2,a3,a4,a5) {if (!PyArg_ParseTupleAndKeywords(args,kws,format,keywords,&a1,&a2,&a3,&a4,&a5)) goto onError;} #define Py_KeywordGet6Args(keywords,format,a1,a2,a3,a4,a5,a6) {if (!PyArg_ParseTupleAndKeywords(args,kws,format,keywords,&a1,&a2,&a3,&a4,&a5,&a6)) goto onError;} #define Py_KeywordGet7Args(keywords,format,a1,a2,a3,a4,a5,a6,a7) {if (!PyArg_ParseTupleAndKeywords(args,kws,format,keywords,&a1,&a2,&a3,&a4,&a5,&a6,&a7)) goto onError;} #define Py_KeywordGet8Args(keywords,format,a1,a2,a3,a4,a5,a6,a7,a8) {if (!PyArg_ParseTupleAndKeywords(args,kws,format,keywords,&a1,&a2,&a3,&a4,&a5,&a6,&a7,&a8)) goto onError;} /* New style macros fof functions supporting keywords -- the C variable names are used as template for the keyword list, i.e. they must match the Python keyword parameter names. Note that format strings with special parameters (e.g. "#s") are not allowed since they would cause the keyword list to be out of sync. The functions must be included in the method list using Py_MethodWithKeywordsListEntry() and be declared as Py_C_Function_WithKeywords(). Example: Py_C_Function_WithKeywords( myfunction, "myfunction(filename,dupkeys=0,filemode=0,sectorsize=512)\n\n" "Returns a myobject" ) { char *filename; int sectorsize = 512; int dupkeys = 0; int filemode = 0; Py_KeywordsGet4Args("s|iii", filename,dupkeys,filemode,sectorsize); return (PyObject *)myobject_New(filename, filemode, sectorsize, dupkeys); onError: return NULL; } */ #define Py_KeywordsGetArg(format,a1) {static Py_KEYWORDS_STRING_TYPE *kwslist[] = {#a1,NULL}; if (!PyArg_ParseTupleAndKeywords(args,kws,format,kwslist,&a1)) goto onError;} #define Py_KeywordsGet2Args(format,a1,a2) {static Py_KEYWORDS_STRING_TYPE *kwslist[] = {#a1,#a2,NULL}; if (!PyArg_ParseTupleAndKeywords(args,kws,format,kwslist,&a1,&a2)) goto onError;} #define Py_KeywordsGet3Args(format,a1,a2,a3) {static Py_KEYWORDS_STRING_TYPE *kwslist[] = {#a1,#a2,#a3,NULL}; if (!PyArg_ParseTupleAndKeywords(args,kws,format,kwslist,&a1,&a2,&a3)) goto onError;} #define Py_KeywordsGet4Args(format,a1,a2,a3,a4) {static Py_KEYWORDS_STRING_TYPE *kwslist[] = {#a1,#a2,#a3,#a4,NULL}; if (!PyArg_ParseTupleAndKeywords(args,kws,format,kwslist,&a1,&a2,&a3,&a4)) goto onError;} #define Py_KeywordsGet5Args(format,a1,a2,a3,a4,a5) {static Py_KEYWORDS_STRING_TYPE *kwslist[] = {#a1,#a2,#a3,#a4,#a5,NULL}; if (!PyArg_ParseTupleAndKeywords(args,kws,format,kwslist,&a1,&a2,&a3,&a4,&a5)) goto onError;} #define Py_KeywordsGet6Args(format,a1,a2,a3,a4,a5,a6) {static Py_KEYWORDS_STRING_TYPE *kwslist[] = {#a1,#a2,#a3,#a4,#a5,#a6,NULL}; if (!PyArg_ParseTupleAndKeywords(args,kws,format,kwslist,&a1,&a2,&a3,&a4,&a5,&a6)) goto onError;} #define Py_KeywordsGet7Args(format,a1,a2,a3,a4,a5,a6,a7) {static Py_KEYWORDS_STRING_TYPE *kwslist[] = {#a1,#a2,#a3,#a4,#a5,#a6,#a7,NULL}; if (!PyArg_ParseTupleAndKeywords(args,kws,format,kwslist,&a1,&a2,&a3,&a4,&a5,&a6,&a7)) goto onError;} #define Py_KeywordsGet8Args(format,a1,a2,a3,a4,a5,a6,a7,a8) {static Py_KEYWORDS_STRING_TYPE *kwslist[] = {#a1,#a2,#a3,#a4,#a5,#a6,#a7,#a8,NULL}; if (!PyArg_ParseTupleAndKeywords(args,kws,format,kwslist,&a1,&a2,&a3,&a4,&a5,&a6,&a7,&a8)) goto onError;} /* --- Returning values to Python ----------------------------------------- */ /* XXX Don't always work: every time you have an 'O' in the BuildValue format string, you need to DECREF the variable *after* the tuple has been built !!! */ #define Py_ReturnNone() {Py_INCREF(Py_None);return Py_None;} #define Py_ReturnTrue() {Py_INCREF(Py_True);return Py_True;} #define Py_ReturnFalse() {Py_INCREF(Py_False);return Py_False;} #define Py_ReturnArg(format,a1) return Py_BuildValue(format,a1); #define Py_Return Py_ReturnArg #define Py_Return2Args(format,a1,a2) return Py_BuildValue(format,a1,a2); #define Py_Return2 Py_Return2Args #define Py_Return3Args(format,a1,a2,a3) return Py_BuildValue(format,a1,a2,a3); #define Py_Return3 Py_Return3Args #define Py_Return4Args(format,a1,a2,a3) return Py_BuildValue(format,a1,a2,a3,a4); #define Py_Return5Args(format,a1,a2,a3) return Py_BuildValue(format,a1,a2,a3,a4,a5); #define Py_Return6Args(format,a1,a2,a3) return Py_BuildValue(format,a1,a2,a3,a4,a5,a6); #define Py_Return7Args(format,a1,a2,a3) return Py_BuildValue(format,a1,a2,a3,a4,a5,a6,a7); /* Build values */ #define Py_BuildNone() Py_NONE #define Py_Build(format,x) Py_BuildValue(format,x) #define Py_Build2(format,x,y) Py_BuildValue(format,x,y) #define Py_Build3(format,x,y,z) Py_BuildValue(format,x,y,z) /* --- Declaring Python builtin functions/methods ------------------------- */ /* The doc-string type changed to const char* in Python 2.5 */ #if PY_VERSION_HEX >= 0x02050000 # define Py_DOC_STRING_TYPE const char #else # define Py_DOC_STRING_TYPE char #endif /* Declare C function/method fct, having docstring docstr; may use vargargs */ #define Py_C_Function(fct,docstr) \ static Py_DOC_STRING_TYPE fct##_docstring[] = docstr;\ static PyObject *fct(PyObject *self, PyObject *args) /* Declare C function/method fct, having keywords keywordsarray and a docstring docstr; may use vargargs & keywords */ #define Py_C_Function_WithKeywords(fct,docstr) \ static Py_DOC_STRING_TYPE fct##_docstring[] = docstr;\ static PyObject *fct(PyObject *self, PyObject *args, PyObject *kws) /* These declare: self -- instance pointer for methods, NULL for functions args -- argument tuple kws -- keywords dict (if applicable) plus as statics: _docstring -- the docstring as given _keywords -- the keyword array as given Note: use the Py_GetArg macros for functions without keywords, and Py_KeywordGetArg macros for functions with keywords */ /* --- Method list entries for builtin functions/methods ------------------ */ /* Add a C function/method cname to the module dict as pyname; no doc-string */ #define Py_MethodListEntryAny(pyname,cname) {pyname,(PyCFunction)cname,METH_VARARGS} /* Add a C function/method cname to the module dict as pyname; the function can use varargs */ #define Py_MethodListEntry(pyname,cname) {pyname,(PyCFunction)cname,METH_VARARGS,cname##_docstring} /* Add a C function/method cname to the module dict as pyname; the function takes no args; in Python 2.3 a new flag was added for these which implements the no args check in the interpreter itself. */ #ifdef METH_NOARGS # define Py_MethodListEntryNoArgs(pyname,cname) {pyname,(PyCFunction)cname,METH_NOARGS,cname##_docstring} #else # define Py_MethodListEntryNoArgs(pyname,cname) {pyname,(PyCFunction)cname,0,cname##_docstring} #endif /* Add a C function/method cname to the module dict as pyname; the function takes one argument: the object is passed in directly (without wrapping it into a tuple first), i.e. don't use the Py_GetArg-macros or PyArg_ParseTuple(). */ #define Py_MethodListEntrySingleArg(pyname,cname) {pyname,(PyCFunction)cname,0,cname##_docstring} /* Add a C function/method that uses keywords to the module dict */ #define Py_MethodWithKeywordsListEntry(pyname,cname) {pyname,(PyCFunction)cname,METH_VARARGS | METH_KEYWORDS,cname##_docstring} /* --- Sequence slicing --------------------------------------------------- */ /* Check a given slice and apply the usual rules for negative indices */ #define Py_CheckSequenceSlice(len,start,stop) { \ if (stop > len) \ stop = len; \ else { \ if (stop < 0) \ stop += len; \ if (stop < 0) \ stop = 0; \ } \ if (start < 0) { \ start += len; \ if (start < 0) \ start = 0; \ } \ if (stop < start) \ start = stop; \ } /* --- Number macros ------------------------------------------------------ */ /* Test for PyFloat_AsDouble() compatible object */ #define PyFloat_Compatible(obj) \ (PyInstance_Check(obj) \ ? PyObject_HasAttrString(obj, "__float__") \ : (obj->ob_type->tp_as_number != NULL && \ obj->ob_type->tp_as_number->nb_float != NULL)) /* --- Text macros -------------------------------------------------------- */ /* Check a given text slice and apply the usual rules for negative indices */ #define Py_CheckBufferSlice(textlen,start,stop) \ Py_CheckSequenceSlice(textlen,start,stop) /* Dito for string objects */ #define Py_CheckStringSlice(textobj,start,stop) \ Py_CheckSequenceSlice(PyString_GET_SIZE(textobj),start,stop) /* For b/w compatibility */ #define Py_CheckSlice(textobj,start,stop) \ Py_CheckStringSlice(textobj,start,stop) /* Dito for Unicode objects */ #ifdef PyUnicode_GET_SIZE # define Py_CheckUnicodeSlice(unicode,start,stop) \ Py_CheckSequenceSlice(PyUnicode_GET_SIZE(unicode),start,stop) #endif /* This assumes that fixed is a constant char array; the strcmp function is only called in case the attribute name length exceeds 10 characters and the first 10 characters match; optimizing compilers should eliminate any unused parts of this comparison automatically. Note: The latest egcs compiler warns about the subscripts being out of range for shorter fixed strings; since no code is generated for those comparisons, these warning can safely be ignored. Still, they are annoying. See the Py_StringsCompareEqual() macro below for a way to work around this. */ #define Py_StringsCompareEqualEx(var,fixed,fixedsize) \ (var[0] == fixed[0] && \ (fixed[0] == 0 || \ (fixedsize >= 1 && (var[1] == fixed[1] && \ (fixed[1] == 0 || \ (fixedsize >= 2 && (var[2] == fixed[2] && \ (fixed[2] == 0 || \ (fixedsize >= 3 && (var[3] == fixed[3] && \ (fixed[3] == 0 || \ (fixedsize >= 4 && (var[4] == fixed[4] && \ (fixed[4] == 0 || \ (fixedsize >= 5 && (var[5] == fixed[5] && \ (fixed[5] == 0 || \ (fixedsize >= 6 && (var[6] == fixed[6] && \ (fixed[6] == 0 || \ (fixedsize >= 7 && (var[7] == fixed[7] && \ (fixed[7] == 0 || \ (fixedsize >= 8 && (var[8] == fixed[8] && \ (fixed[8] == 0 || \ (fixedsize >= 9 && (var[9] == fixed[9] && \ (fixed[9] == 0 || \ (fixedsize >= 10 && \ strcmp(&var[10],&fixed[10]) == 0 \ )))))))))))))))))))))))))))))) /* This assumes that fixed is a constant char array. The appended string snippet is to shut up the warnings produced by newer egcs/gcc compilers about offsets being outside bounds. Note that some compilers do the inlining by themselves or don't like the above trick (OpenVMS is one such platform). For these we simply use the standard way. */ #ifndef __VMS # define Py_StringsCompareEqual(var,fixed) \ Py_StringsCompareEqualEx(var,fixed"\0\0\0\0\0\0\0\0\0\0",sizeof(fixed)) #else # define Py_StringsCompareEqual(var,fixed) (strcmp(var, fixed) == 0) #endif /* Fast character set member check; set must be a "static unsigned *char set" array of exactly 32 bytes length generated with TextTools.set() */ #define Py_CharInSet(chr,set) \ (((unsigned char)(set)[(unsigned char)(chr) >> 3] & \ (1 << ((unsigned char)(chr) & 7))) != 0) /* --- Macros for getattr ------------------------------------------------- */ /* Compares var to name and returns 1 iff they match. This assumes that name is a constant char array. */ #define Py_WantAttr(var,name) Py_StringsCompareEqual(var,name) /* --- Module init helpers ------------------------------------------------ */ /* Helper for startup type object initialization */ #define PyType_Init(x) \ { \ x.ob_type = &PyType_Type; \ Py_Assert(x.tp_basicsize >= (int)sizeof(PyObject), \ PyExc_SystemError, \ "Internal error: tp_basicsize of "#x" too small");\ if (PyType_Ready(&x) < 0) \ goto onError; \ } /* Error reporting for module init functions */ #define Py_ReportModuleInitError(modname) { \ PyObject *exc_type, *exc_value, *exc_tb; \ PyObject *str_type, *str_value; \ \ /* Fetch error objects and convert them to strings */ \ PyErr_Fetch(&exc_type, &exc_value, &exc_tb); \ if (exc_type && exc_value) { \ str_type = PyObject_Str(exc_type); \ str_value = PyObject_Str(exc_value); \ } \ else { \ str_type = NULL; \ str_value = NULL; \ } \ /* Try to format a more informative error message using the \ original error */ \ if (str_type && str_value && \ PyString_Check(str_type) && PyString_Check(str_value)) \ PyErr_Format( \ PyExc_ImportError, \ "initialization of module "modname" failed " \ "(%s:%s)", \ PyString_AS_STRING(str_type), \ PyString_AS_STRING(str_value)); \ else \ PyErr_SetString( \ PyExc_ImportError, \ "initialization of module "modname" failed"); \ Py_XDECREF(str_type); \ Py_XDECREF(str_value); \ Py_XDECREF(exc_type); \ Py_XDECREF(exc_value); \ Py_XDECREF(exc_tb); \ } /* --- SWIG addons -------------------------------------------------------- */ /* Throw this error after having set the correct Python exception using e.g. PyErr_SetString(); */ #define mxSWIGError "mxSWIGError" /* EOF */ #endif egenix-mx-base-3.2.7/mx/Tools/mxTools/mxTools.c0000664000175000017500000017422612251400411021216 0ustar lemburglemburg/* mxTools -- Misc. utilities for Python Copyright (c) 1997-2000, Marc-Andre Lemburg; mailto:mal@lemburg.com Copyright (c) 2000-2013, eGenix.com Software GmbH; mailto:info@egenix.com See the documentation for further copyright information or contact the author (mailto:mal@lemburg.com). */ /* Define this to aid in finding memory leaks */ /*#define MAL_MEM_DEBUG*/ /*#define MAL_DEBUG*/ /*#define MAL_REF_DEBUG*/ /* Logging file used by debugging facility */ #ifndef MAL_DEBUG_OUTPUTFILE # define MAL_DEBUG_OUTPUTFILE "mxTools.log" #endif /* We want all our symbols to be exported */ #define MX_BUILDING_MXTOOLS /* Mark the module as Py_ssize_t clean. */ #define PY_SSIZE_T_CLEAN 1 /* Setup mxstdlib memory management */ #if 1 # define MAL_USE_PYMALLOC #else # define MAL_USE_C_MALLOC #endif #include "mx.h" #include "mxTools.h" /* Needed for mxTools_EvalCodeString() */ #include "compile.h" #include "eval.h" /* Needed for mxTools_cur_frame() */ #include "frameobject.h" /* Needed for mxTools_dlopen(); HAVE_DL_LIB is defined by the egenix_mx_base.py setup script if the dl library can be found. HAVE_DLOPEN is defined by Python's configure script, if dlopen() is available. */ #if defined(HAVE_DL_LIB) && !defined(HAVE_DLOPEN) # define HAVE_DLOPEN 1 #endif #ifdef HAVE_DLOPEN # include #endif #define MXTOOLS_VERSION "3.2.7" /* To open up the playground for new ideas... */ /*#define INCLUDE_FUNSTUFF*/ /* Maximal size of the code cache used by mxTools_EvalCodeString() */ #define MAX_CODECACHE_SIZE 10 /* --- module doc-string -------------------------------------------------- */ static char *Module_docstring = MXTOOLS_MODULE" -- A tool collection. Version "MXTOOLS_VERSION"\n\n" "Copyright (c) 1997-2000, Marc-Andre Lemburg; mailto:mal@lemburg.com\n" "Copyright (c) 2000-2013, eGenix.com Software GmbH; mailto:info@egenix.com\n\n" " All Rights Reserved\n\n" "See the documentation for further information on copyrights,\n" "or contact the author." ; /* --- module globals ----------------------------------------------------- */ static PyObject *mxTools_Error; /* Error Exception object */ static PyObject *mxTools_ProgrammingError; /* ProgrammingError Exception object */ static PyObject *mxNotGiven; /* NotGiven singleton */ static PyObject *mxTools_BaseobjAttribute; /* Attribute to use for acquire() per default */ /* Flag telling us whether the module was initialized or not. */ static int mxTools_Initialized = 0; /* --- forward declarations ----------------------------------------------- */ /* --- internal macros ---------------------------------------------------- */ /* --- module helpers ----------------------------------------------------- */ /* Create an exception object, insert it into the module dictionary under the given name and return the object pointer; this is NULL in case an error occurred. */ static PyObject *insexc(PyObject *moddict, char *name, PyObject *baseclass) { PyObject *v; char fullname[256]; char *modname; char *dot; v = PyDict_GetItemString(moddict, "__name__"); if (v == NULL) modname = NULL; else modname = PyString_AsString(v); if (modname == NULL) { PyErr_Clear(); modname = MXTOOLS_MODULE; } /* The symbols from this extension are imported into mx.. We trim the name to not confuse the user with an overly long package path. */ strcpy(fullname, modname); dot = strchr(fullname, '.'); if (dot) dot = strchr(dot+1, '.'); if (dot) strcpy(dot+1, name); else sprintf(fullname, "%s.%s", modname, name); v = PyErr_NewException(fullname, baseclass, NULL); if (v == NULL) return NULL; if (PyDict_SetItemString(moddict,name,v)) return NULL; return v; } #ifdef HAVE_DLOPEN /* Helper for adding integer constants. Check for errors with PyErr_Occurred() */ static void insint(PyObject *dict, char *name, int value) { PyObject *v = PyInt_FromLong((long)value); PyDict_SetItemString(dict, name, v); Py_XDECREF(v); } #endif /* Helper for adding string constants to a dictionary. Check for errors with PyErr_Occurred() */ static void insstr(PyObject *dict, char *name, char *value) { PyObject *v = PyString_FromString(value); PyDict_SetItemString(dict, name, v); Py_XDECREF(v); } static PyObject *notimplemented1(PyObject *v) { Py_Error(PyExc_TypeError, "operation not implemented"); onError: return NULL; } static PyObject *notimplemented2(PyObject *v, PyObject *w) { Py_Error(PyExc_TypeError, "operation not implemented"); onError: return NULL; } static PyObject *notimplemented3(PyObject *u, PyObject *v, PyObject *w) { Py_Error(PyExc_TypeError, "operation not implemented"); onError: return NULL; } /* --- Internal Functions ------------------------------------------------- */ #ifdef INCLUDE_FUNSTUFF static PyObject *mxTools_EvalCodeString(PyObject *codestr) { static PyObject *codecache; PyObject *code; PyObject *v; Py_Assert(PyString_Check(codestr), PyExc_SystemError, "Bad internal call to mxTools_EvalCodeString"); /* Init. codecache dictionary */ if (codecache == NULL) { codecache = PyDict_New(); if (!codecache) goto onError; } /* Get code object or compile the string */ code = PyDict_GetItem(codecache,codestr); if (!code) { code = Py_CompileString(PyString_AS_STRING(codestr), "", Py_eval_input); if (!code) goto onError; if (PyDict_Size(codecache) >= MAX_CODECACHE_SIZE) PyDict_Clear(codecache); PyDict_SetItem(codecache,codestr,code); } else Py_INCREF(code); /* Run the code in the current context */ v = PyEval_EvalCode((PyCodeObject *)code, PyEval_GetGlobals(), PyEval_GetLocals()); Py_DECREF(code); return v; onError: return NULL; } #endif /* --- Interface ---------------------------------------------------------- */ Py_C_Function( mxTools_napply, "napply(number_of_calls,function,args=(),kw={})\n\n" "Calls the function number_of_calls times with the same\n" "arguments and returns a tuple with the return values.") { Py_ssize_t count; register Py_ssize_t i; PyObject *func,*arg = 0,*kw = 0; PyObject *w = 0; Py_Get4Args(Py_SSIZE_T_PARSERMARKER "O|OO", count,func,arg,kw); Py_XINCREF(arg); w = PyTuple_New(count); if (w == NULL) goto onError; if (arg == NULL) arg = PyTuple_New(0); if (arg == NULL) goto onError; #ifdef PyCFunction_GET_FUNCTION /* Short-cut for C functions, taken from ceval.c:call_builtin(); Note: this only works and is used together with my patched version of the interpreter. XXX Update when ceval.c changes !!! */ if (PyCFunction_Check(func)) { register PyCFunction meth = PyCFunction_GET_FUNCTION(func); register PyObject *self = PyCFunction_GET_SELF(func); int flags = PyCFunction_GET_FLAGS(func); if (!(flags & METH_VARARGS)) { Py_ssize_t size = PyTuple_GET_SIZE(arg); if (size == 1) arg = PyTuple_GET_ITEM(arg, 0); else if (size == 0) arg = NULL; } if (flags & METH_KEYWORDS) for (i = 0; i < count; i++) { register PyObject *v; v = (*(PyCFunctionWithKeywords)meth)(self, arg, kw); if (v == NULL) goto onError; PyTuple_SET_ITEM(w,i,v); } else { if (kw != NULL && PyDict_Size(kw) != 0) { PyErr_SetString(PyExc_TypeError, "this function takes no keyword arguments"); return NULL; } for (i = 0; i < count; i++) { register PyObject *v; v = (*meth)(self, arg); if (v == NULL) goto onError; PyTuple_SET_ITEM(w,i,v); } } } else #endif for (i = 0; i < count; i++) { register PyObject *v; v = PyEval_CallObjectWithKeywords(func,arg,kw); if (v == NULL) goto onError; PyTuple_SET_ITEM(w,i,v); } Py_XDECREF(arg); return w; onError: Py_XDECREF(w); Py_XDECREF(arg); return NULL; } Py_C_Function( mxTools_mapply, "mapply(callable_objects,args=(),kw={})\n\n" "Calls the callable_objects in the given order with the same\n" "arguments and returns a tuple with the return values.") { register Py_ssize_t i; Py_ssize_t n; PyObject *objects; PyObject *arg = 0,*kw = 0; PyObject *w = 0; Py_Get3Args("O|OO", objects,arg,kw); Py_XINCREF(arg); n = PySequence_Length(objects); if (n < 0) Py_Error(PyExc_TypeError, "first argument must be a sequence"); w = PyTuple_New(n); if (w == NULL) goto onError; if (arg == NULL) arg = PyTuple_New(0); if (arg == NULL) goto onError; for (i = 0; i < n; i++) { register PyObject *func; func = PySequence_GetItem(objects,i); if (!func) goto onError; #ifdef PyCFunction_GET_FUNCTION /* Short-cut for C functions, taken from ceval.c:call_builtin(); Note: this only works and is used with my patched version of the interpreter. XXX Update when ceval.c changes !!! */ if (PyCFunction_Check(func)) { PyObject *args = arg; if (!(PyCFunction_GET_FLAGS(func) & METH_VARARGS)) { Py_ssize_t size = PyTuple_GET_SIZE(args); if (size == 1) args = PyTuple_GET_ITEM(args, 0); else if (size == 0) args = NULL; } if (PyCFunction_GET_FLAGS(func) & METH_KEYWORDS) { register PyObject *v; v = (*(PyCFunctionWithKeywords)\ PyCFunction_GET_FUNCTION(func))\ (PyCFunction_GET_SELF(func), args, kw); if (v == NULL) { Py_DECREF(func); goto onError; } PyTuple_SET_ITEM(w,i,v); } else { if (kw != NULL && PyDict_Size(kw) != 0) { PyErr_SetString(PyExc_TypeError, "this function takes no keyword arguments"); return NULL; } else { register PyObject *v; v = (*PyCFunction_GET_FUNCTION(func))\ (PyCFunction_GET_SELF(func), args); if (v == NULL) { Py_DECREF(func); goto onError; } PyTuple_SET_ITEM(w,i,v); } } } else #endif { register PyObject *v; v = PyEval_CallObjectWithKeywords(func,arg,kw); if (v == NULL) { Py_DECREF(func); goto onError; } PyTuple_SET_ITEM(w,i,v); } Py_DECREF(func); } Py_XDECREF(arg); return w; onError: Py_XDECREF(w); Py_XDECREF(arg); return NULL; } Py_C_Function( mxTools_method_mapply, "method_mapply(objects,methodname,args=(),kw={})\n\n" "Calls the method methodname of all objects in the given\n" "order with the same arguments and returns a tuple with\n" "the return values.") { register Py_ssize_t i; Py_ssize_t n; PyObject *objects; PyObject *arg = 0,*kw = 0; PyObject *w = 0; char *methodname; Py_Get4Args("Os|OO", objects,methodname,arg,kw); Py_XINCREF(arg); n = PySequence_Length(objects); if (n < 0) Py_Error(PyExc_TypeError, "first argument must be a sequence"); w = PyTuple_New(n); if (w == NULL) goto onError; if (arg == NULL) arg = PyTuple_New(0); if (arg == NULL) goto onError; for (i = 0; i < n; i++) { register PyObject *func; { register PyObject *v; v = PySequence_GetItem(objects,i); if (!v) goto onError; func = PyObject_GetAttrString(v,methodname); if (!func) { Py_DECREF(v); goto onError; } Py_DECREF(v); } #ifdef PyCFunction_GET_FUNCTION /* Short-cut for C functions, taken from ceval.c:call_builtin(); Note: this only works and is used with my patched version of the interpreter. XXX Update when ceval.c changes !!! */ if (PyCFunction_Check(func)) { PyObject *args = arg; if (!(PyCFunction_GET_FLAGS(func) & METH_VARARGS)) { Py_ssize_t size = PyTuple_GET_SIZE(args); if (size == 1) args = PyTuple_GET_ITEM(args, 0); else if (size == 0) args = NULL; } if (PyCFunction_GET_FLAGS(func) & METH_KEYWORDS) { register PyObject *v; v = (*(PyCFunctionWithKeywords)\ PyCFunction_GET_FUNCTION(func))\ (PyCFunction_GET_SELF(func), args, kw); if (v == NULL) { Py_DECREF(func); goto onError; } PyTuple_SET_ITEM(w,i,v); } else { if (kw != NULL && PyDict_Size(kw) != 0) { PyErr_SetString(PyExc_TypeError, "this function takes no keyword arguments"); return NULL; } else { register PyObject *v; v = (*PyCFunction_GET_FUNCTION(func))\ (PyCFunction_GET_SELF(func), args); if (v == NULL) { Py_DECREF(func); goto onError; } PyTuple_SET_ITEM(w,i,v); } } } else #endif { register PyObject *v; v = PyEval_CallObjectWithKeywords(func,arg,kw); if (v == NULL) { Py_DECREF(func); goto onError; } PyTuple_SET_ITEM(w,i,v); } Py_DECREF(func); } Py_XDECREF(arg); return w; onError: Py_XDECREF(w); Py_XDECREF(arg); return NULL; } Py_C_Function( mxTools_trange, "trange([start=0,]stop[,step=1])\n\n" "Returns tuple(range(start,stop,step))") { Py_ssize_t start, stop=INT_MAX, step=INT_MAX; Py_ssize_t n; register Py_ssize_t i; register Py_ssize_t index; PyObject *t = 0; Py_Get3Args(Py_SSIZE_T_PARSERMARKER "|" Py_SSIZE_T_PARSERMARKER Py_SSIZE_T_PARSERMARKER, start,stop,step); /* Get the boundaries right... */ if (stop == INT_MAX) { stop = start; if (stop < 0) stop = 0; start = 0; step = 1; n = stop; } else if (step == INT_MAX) { if (start > stop) start = stop; step = 1; n = stop - start; } else { Py_Assert(step != 0, PyExc_ValueError, "step must not be zero"); if (step > 0) { if (start > stop) start = stop; n = (stop - start + step - 1) / step; } else { if (start < stop) start = stop; n = (start - stop - step - 1) / (-step); } } t = PyTuple_New(n); if (!t) goto onError; if (step == 1) for (index = 0, i = start; index < n; index++, i++) { register PyObject *v = PyInt_FromLong((long)i); if (!v) goto onError; PyTuple_SET_ITEM(t,index,v); } else for (index = 0, i = start; index < n; index++, i += step) { register PyObject *v = PyInt_FromLong((long)i); if (!v) goto onError; PyTuple_SET_ITEM(t,index,v); } return t; onError: Py_XDECREF(t); return NULL; } Py_C_Function( mxTools_indices, "indices(object)\n\n" "Returns tuple(range(len(object))).") { register Py_ssize_t n; register Py_ssize_t index; register PyObject *t = 0; PyObject *w; Py_GetArgObject(w); n = PyObject_Length(w); if (n < 0) Py_Error(PyExc_TypeError, "argument must have a __len__ method"); t = PyTuple_New(n); if (!t) goto onError; for (index = 0; index < n; index++) { register PyObject *v = PyInt_FromLong((long)index); if (!v) goto onError; PyTuple_SET_ITEM(t,index,v); } return t; onError: Py_XDECREF(t); return NULL; } Py_C_Function( mxTools_range_len, "range_len(object)\n" "Returns range(len(object)).") { register Py_ssize_t n; register Py_ssize_t index; register PyObject *t = 0; PyObject *w; Py_GetArgObject(w); n = PyObject_Length(w); if (n < 0) goto onError; t = PyList_New(n); if (!t) goto onError; for (index = 0; index < n; index++) { register PyObject *v = PyInt_FromLong((long)index); if (!v) goto onError; PyList_SET_ITEM(t,index,v); } return t; onError: Py_XDECREF(t); return NULL; } Py_C_Function( mxTools_irange, "irange(object[,indices])\n\n" "Returns a tuple of tuples (index,object[index]), one\n" "for each item in the sequence indices or, if this is not\n" "given, in trange(len(object)).") { register Py_ssize_t n; register Py_ssize_t index; PyObject *t = 0; PyObject *w; PyObject *indices = 0; Py_Get2Args("O|O", w,indices); if (!indices) { n = PyObject_Length(w); if (n < 0) Py_Error(PyExc_TypeError, "first argument must have a __len__ method"); } else { n = PyObject_Length(indices); if (n < 0) Py_Error(PyExc_TypeError, "second argument must be a sequence"); } t = PyTuple_New(n); if (!t) goto onError; if (!indices) for (index = 0; index < n; index++) { register PyObject *u; PyObject *v; PyObject *x; v = PyInt_FromLong((long)index); if (!v) goto onError; u = PyTuple_New(2); if (!u) { Py_DECREF(v); goto onError; } x = PyObject_GetItem(w,v); if (!x) { Py_DECREF(v); Py_DECREF(u); goto onError; } PyTuple_SET_ITEM(u,0,v); PyTuple_SET_ITEM(u,1,x); PyTuple_SET_ITEM(t,index,u); } else for (index = 0; index < n; index++) { register PyObject *u; PyObject *x; PyObject *v; v = PySequence_GetItem(indices,index); if (!v) goto onError; u = PyTuple_New(2); if (!u) { Py_DECREF(v); goto onError; } x = PyObject_GetItem(w,v); if (!x) { Py_DECREF(v); Py_DECREF(u); goto onError; } PyTuple_SET_ITEM(u,0,v); PyTuple_SET_ITEM(u,1,x); PyTuple_SET_ITEM(t,index,u); } return t; onError: Py_XDECREF(t); return NULL; } Py_C_Function( mxTools_get, "get(object,index[,default])\n\n" "Returns object[index], or, if that fails, default.") { PyObject *x, *w, *index; PyObject *def = mxNotGiven; Py_Get3Args("OO|O", w,index,def); x = PyObject_GetItem(w,index); if (!x) { if (def != mxNotGiven) { PyErr_Clear(); x = def; Py_INCREF(x); } else goto onError; } return x; onError: return NULL; } Py_C_Function( mxTools_extract, "extract(object,indices[,defaults])\n\n" "Returns a list of entries object[index] for each index\n" "in the sequence indices. defaults must have the same length\n" "as indices and is used to provide default values in case\n" "the lookup fails.") { Py_ssize_t n = 0; register Py_ssize_t index; PyObject *t = 0; PyObject *w; PyObject *indices; PyObject *defaults = 0; Py_Get3Args("OO|O", w,indices,defaults); n = PyObject_Length(indices); if (n < 0) Py_Error(PyExc_TypeError, "second argument must be a sequence"); t = PyList_New(n); if (!t) goto onError; if (defaults) for (index = 0; index < n; index++) { register PyObject *x; register PyObject *v; v = PySequence_GetItem(indices,index); if (!v) { PyErr_Format(PyExc_IndexError, "index value nr. %ld not accessible", (long)index); goto onError; } x = PyObject_GetItem(w,v); Py_DECREF(v); if (!x) { /* Use default value */ PyErr_Clear(); x = PySequence_GetItem(defaults,index); if (!x) { PyErr_Format( PyExc_IndexError, "default value for index nr. %ld not accessible", (long)index); goto onError; } } PyList_SET_ITEM(t,index,x); } else for (index = 0; index < n; index++) { register PyObject *x; register PyObject *v; v = PySequence_GetItem(indices,index); if (!v) { PyErr_Format(PyExc_IndexError, "index value nr. %ld not accessible", (long)index); goto onError; } x = PyObject_GetItem(w,v); Py_DECREF(v); if (!x) { PyErr_Format(PyExc_IndexError, "default value for index nr. %ld not accessible", (long)index); goto onError; } PyList_SET_ITEM(t,index,x); } return t; onError: Py_XDECREF(t); return NULL; } Py_C_Function( mxTools_iremove, "iremove(object,indices)\n\n" "Removes the items indexed by indices from object.\n" "For sequences the index list must be sorted ascending;\n" "an IndexError will be raised otherwise (object is then\n" "left in an undefined state)." ) { Py_ssize_t n = 0; register Py_ssize_t index; PyObject *w; PyObject *indices; Py_Get2Args("OO", w,indices); n = PyObject_Length(indices); if (n < 0) Py_Error(PyExc_TypeError, "second argument must be a sequence"); if (PyMapping_Check(w)) for (index = n - 1; index >= 0; index--) { register PyObject *v; register int rc; v = PySequence_GetItem(indices,index); if (!v) { PyErr_Format(PyExc_IndexError, "index %ld not accessible", (long)index); goto onError; } rc = PyMapping_DelItem(w,v); Py_DECREF(v); if (rc) goto onError; } else if (PySequence_Check(w)) { Py_ssize_t prev_index = INT_MAX; for (index = n - 1; index >= 0; index--) { register PyObject *v; register Py_ssize_t i; v = PySequence_GetItem(indices,index); if (!v && PyInt_Check(v)) { PyErr_Format(PyExc_IndexError, "index %ld not accessible or not an integer", (long)index); goto onError; } i = PyInt_AS_LONG(v); Py_DECREF(v); if (prev_index >= i) { if (PySequence_DelItem(w,i)) goto onError; prev_index = i; } else Py_Error(PyExc_IndexError, "indices must be sorted ascending for sequences"); } } else Py_Error(PyExc_TypeError, "object must be a mapping or a sequence"); Py_ReturnNone(); onError: return NULL; } Py_C_Function( mxTools_ifilter, "ifilter(condition,object[,indices])\n\n" "Returns a list of tuples (index,object[index]) such that\n" "condition(object[item]) is true and index is found in\n" "the sequence indices (defaulting to indices(object)).\n" "Order is preserved. condition must be a callable object.") { Py_ssize_t n; register Py_ssize_t index; PyObject *t = 0; PyObject *w; PyObject *indices = 0; PyObject *condition; PyObject *argtuple = 0; Py_Get3Args("OO|O", condition,w,indices); if (!indices) { n = PyObject_Length(w); if (n < 0) Py_Error(PyExc_TypeError, "second argument must be have a __len__ method"); } else { n = PyObject_Length(indices); if (n < 0) Py_Error(PyExc_TypeError, "third argument must be a sequence"); } t = PyList_New(0); if (!t) goto onError; argtuple = PyTuple_New(1); if (!argtuple) goto onError; if (!indices) for (index = 0; index < n; index++) { register PyObject *v; register PyObject *x; register PyObject *z; v = PyInt_FromLong((long)index); if (!v) goto onError; x = PyObject_GetItem(w,v); if (!x) { Py_DECREF(v); goto onError; } /* Replace the argtuple entry with the new item x */ Py_XDECREF(PyTuple_GET_ITEM(argtuple,0)); PyTuple_SET_ITEM(argtuple,0,x); /* Add a tuple if condition says it's ok */ z = PyEval_CallObject(condition,argtuple); if (!z) goto onError; if (PyObject_IsTrue(z)) { register PyObject *u; u = PyTuple_New(2); if (!u) { Py_DECREF(v); Py_DECREF(z); goto onError; } Py_INCREF(x); PyTuple_SET_ITEM(u,0,v); PyTuple_SET_ITEM(u,1,x); PyList_Append(t,u); Py_DECREF(u); } else Py_DECREF(v); Py_DECREF(z); } else for (index = 0; index < n; index++) { register PyObject *v; register PyObject *x; register PyObject *z; v = PySequence_GetItem(indices,index); if (!v) goto onError; x = PyObject_GetItem(w,v); if (!x) { Py_DECREF(v); goto onError; } /* Replace the argtuple entry with the new item x */ Py_XDECREF(PyTuple_GET_ITEM(argtuple,0)); PyTuple_SET_ITEM(argtuple,0,x); /* Add a tuple if condition says it's ok */ z = PyEval_CallObject(condition,argtuple); if (!z) goto onError; if (PyObject_IsTrue(z)) { register PyObject *u; u = PyTuple_New(2); if (!u) { Py_DECREF(v); Py_DECREF(z); goto onError; } Py_INCREF(x); PyTuple_SET_ITEM(u,0,v); PyTuple_SET_ITEM(u,1,x); PyList_Append(t,u); Py_DECREF(u); } else Py_DECREF(v); Py_DECREF(z); } Py_DECREF(argtuple); return t; onError: Py_XDECREF(argtuple); Py_XDECREF(t); return NULL; } Py_C_Function( mxTools_tuples, "tuples(sequence)\n\n" "Returns a list much like apply(map,(None,)+tuple(sequence)))\n" "does. Only with a bit more intuitive name. This function does\n" "not optimize for the case where the sequences are of different\n" "size and the resulting list of tuples will always\n" "have the length of the first sequence. Missing entries\n" "from the other sequences are filled in with None." ) { Py_ssize_t n,m; register Py_ssize_t i; register Py_ssize_t j; PyObject *l = 0; PyObject *arg,*w; Py_GetArgObject(arg); /* Get tuple size (m) */ m = PySequence_Length(arg); Py_Assert(m > 0, PyExc_TypeError, "sequence must have at least one element"); /* Get list size (n) */ w = PySequence_GetItem(arg,0); if (!w) goto onError; n = PySequence_Length(w); Py_DECREF(w); Py_Assert(n >= 0, PyExc_TypeError, "sequence elements must be sequences"); /* XXX Could speed this up by rearranging and joining the loops */ /* Create list of tuples */ l = PyList_New(n); if (!l) goto onError; for (j = 0; j < n; j++) { PyObject *v; v = PyTuple_New(m); if (!v) goto onError; PyList_SET_ITEM(l,j,v); } /* Fill them in */ for (i = 0; i < m; i++) { PyObject *u; u = PySequence_GetItem(arg,i); if (!u) goto onError; for (j = 0; j < n; j++) { PyObject *v; v = PySequence_GetItem(u,j); if (!v) { if (PyErr_ExceptionMatches(PyExc_IndexError)) { PyErr_Clear(); /* Fill up the rest with None */ for (; j < n; j++) { Py_INCREF(Py_None); PyTuple_SET_ITEM(PyList_GET_ITEM(l,j),i,Py_None); } break; } else { Py_DECREF(u); goto onError; } } PyTuple_SET_ITEM(PyList_GET_ITEM(l,j),i,v); } Py_DECREF(u); } return l; onError: Py_XDECREF(l); return NULL; } Py_C_Function( mxTools_lists, "lists(sequence)\n\n" "Same as tuples(), except that a tuple of lists is created." ) { Py_ssize_t n,m; register Py_ssize_t i; register Py_ssize_t j; PyObject *t = 0; PyObject *arg,*w; Py_GetArgObject(arg); /* Get list size (n) */ n = PySequence_Length(arg); Py_Assert(n > 0, PyExc_TypeError, "sequence must have at least one element"); /* Get tuple size (m) */ w = PySequence_GetItem(arg,0); if (!w) goto onError; m = PySequence_Length(w); Py_DECREF(w); Py_Assert(m >= 0, PyExc_TypeError, "sequence elements must be sequences"); /* XXX Could speed this up by rearranging and joining the loops */ /* Create tuple of lists */ t = PyTuple_New(m); if (!t) goto onError; for (j = 0; j < m; j++) { PyObject *v; v = PyList_New(n); if (!v) goto onError; PyTuple_SET_ITEM(t,j,v); } /* Fill them in */ for (i = 0; i < n; i++) { PyObject *u; u = PySequence_GetItem(arg,i); if (!u) goto onError; for (j = 0; j < m; j++) { PyObject *v; v = PySequence_GetItem(u,j); if (!v) { if (PyErr_ExceptionMatches(PyExc_IndexError)) { PyErr_Clear(); /* Fill up the rest with None */ for (; j < n; j++) { Py_INCREF(Py_None); PyList_SET_ITEM(PyTuple_GET_ITEM(t,j),i,Py_None); } break; } else { Py_DECREF(u); goto onError; } } PyList_SET_ITEM(PyTuple_GET_ITEM(t,j),i,v); } Py_DECREF(u); } return t; onError: Py_XDECREF(t); return NULL; } Py_C_Function( mxTools_count, "count(condition,sequence)\n\n" "Count the number of objects in sequence for which the\n" "selection function condition returns true and return the\n" "result as integer.") { PyObject *condition; PyObject *list; PyObject *argtuple = 0; register Py_ssize_t i; register Py_ssize_t n; Py_ssize_t length; Py_Get2Args("OO", condition,list); length = PySequence_Length(list); if (length < 0) Py_Error(PyExc_TypeError, "second argument must be a sequence"); argtuple = PyTuple_New(1); if (!argtuple) goto onError; for(i = 0, n = 0; i < length; i++) { register PyObject *v; register PyObject *w; v = PySequence_GetItem(list,i); if (!v) goto onError; /* Replace the argtuple entry with the new item */ Py_XDECREF(PyTuple_GET_ITEM(argtuple,0)); PyTuple_SET_ITEM(argtuple,0,v); /* Let's see what condition thinks about this item */ w = PyEval_CallObject(condition,argtuple); if (!w) goto onError; if (PyObject_IsTrue(w)) n++; Py_DECREF(w); } Py_DECREF(argtuple); return PyInt_FromLong((long)n); onError: Py_XDECREF(argtuple); return NULL; } Py_C_Function( mxTools_exists, "exists(condition,sequence)\n" "Return 1 if and only if condition is true for at least one\n" "of the items in sequence and 0 otherwise. condition\n" "must be a callable object.") { PyObject *condition; PyObject *list; PyObject *argtuple = 0; register Py_ssize_t i; Py_ssize_t n; Py_ssize_t length; Py_Get2Args("OO", condition,list); length = PySequence_Length(list); if (length < 0) Py_Error(PyExc_TypeError, "second argument must be a sequence"); argtuple = PyTuple_New(1); if (!argtuple) goto onError; for(i = 0, n = 0; i < length; i++) { register PyObject *v; register PyObject *w; v = PySequence_GetItem(list,i); if (!v) goto onError; /* Replace the argtuple entry with the new item */ Py_XDECREF(PyTuple_GET_ITEM(argtuple,0)); PyTuple_SET_ITEM(argtuple,0,v); /* Let's see what condition thinks about this item */ w = PyEval_CallObject(condition,argtuple); if (!w) goto onError; if (PyObject_IsTrue(w)) { n = 1; Py_DECREF(w); break; } Py_DECREF(w); } Py_DECREF(argtuple); return PyInt_FromLong((long)n); onError: Py_XDECREF(argtuple); return NULL; } Py_C_Function( mxTools_forall, "forall(condition,sequence)\n\n" "Return 1 if and only if condition is true for all\n" "of the items in sequence and 0 otherwise. condition\n" "must be a callable object.") { PyObject *condition; PyObject *list; PyObject *argtuple = 0; register Py_ssize_t i; Py_ssize_t n; Py_ssize_t length; Py_Get2Args("OO", condition,list); length = PySequence_Length(list); if (length < 0) Py_Error(PyExc_TypeError, "second argument must be a sequence"); argtuple = PyTuple_New(1); if (!argtuple) goto onError; for(i = 0, n = 1; i < length; i++) { register PyObject *v; register PyObject *w; v = PySequence_GetItem(list,i); if (!v) goto onError; /* Replace the argtuple entry with the new item */ Py_XDECREF(PyTuple_GET_ITEM(argtuple,0)); PyTuple_SET_ITEM(argtuple,0,v); /* Let's see what condition thinks about this item */ w = PyEval_CallObject(condition,argtuple); if (!w) goto onError; if (!PyObject_IsTrue(w)) { n = 0; Py_DECREF(w); break; } Py_DECREF(w); } Py_DECREF(argtuple); return PyInt_FromLong((long)n); onError: Py_XDECREF(argtuple); return NULL; } Py_C_Function( mxTools_index, "index(condition,sequence)\n\n" "Return the index of the first item for which condition\n" "returns true. A ValueError is raised in case no item\n" "is found.") { PyObject *condition; PyObject *list = 0; PyObject *argtuple = 0; register Py_ssize_t i; Py_ssize_t n; Py_ssize_t length; Py_Get2Args("OO", condition,list); length = PySequence_Length(list); if (length < 0) goto onError; argtuple = PyTuple_New(1); if (!argtuple) goto onError; for(i = 0, n = -1; i < length; i++) { register PyObject *v; register PyObject *w; v = PySequence_GetItem(list,i); if (!v) goto onError; /* Replace the argtuple entry with the new item */ Py_XDECREF(PyTuple_GET_ITEM(argtuple,0)); PyTuple_SET_ITEM(argtuple,0,v); /* Let's see what condition thinks about this item */ w = PyEval_CallObject(condition,argtuple); if (!w) goto onError; if (PyObject_IsTrue(w)) { n = i; Py_DECREF(w); break; } Py_DECREF(w); } if (n == -1) Py_Error(PyExc_ValueError, "condition is false for all items in sequence"); Py_DECREF(argtuple); return PyInt_FromLong((long)n); onError: Py_XDECREF(argtuple); return NULL; } Py_C_Function( mxTools_sizeof, "sizeof(object)\n\n" "Returns the size in memory of the object in bytes.\n" "Note that this doesn't show any extra space allocated by\n" "the object.") { Py_ssize_t size; register PyObject *w; PyTypeObject *t; Py_GetArgObject(w); t = w->ob_type; size = t->tp_basicsize; if (t->tp_itemsize) size += t->tp_itemsize * ((PyVarObject *)w)->ob_size; return PyInt_FromLong((long)size); onError: return NULL; } Py_C_Function( mxTools_findattr, "findattr(objectlist,attrname)\n\n" "Returns the first attribute with name attrname found\n" "among the objects in the list.") { PyObject *list; PyObject *name; register Py_ssize_t i; Py_ssize_t length; Py_Get2Args("OO", list,name); length = PySequence_Length(list); if (length < 0) Py_Error(PyExc_TypeError, "first argument must be a sequence"); Py_Assert(PyString_Check(name), PyExc_TypeError, "second argument must be a string"); for(i = 0; i < length; i++) { PyObject *v; PyObject *w; v = PySequence_GetItem(list,i); if (!v) goto onError; w = PyObject_GetAttr(v,name); if (w) return w; else if (!PyErr_ExceptionMatches(PyExc_AttributeError)) goto onError; else PyErr_Clear(); } Py_Error(PyExc_AttributeError, PyString_AS_STRING(name)); onError: return NULL; } Py_C_Function( mxTools_attrlist, "attrlist(objectlist,attrname)\n\n" "Returns a list of all attributes with the given name\n" "found among the objects in objectlist." ) { PyObject *list,*l=0; PyObject *name; register Py_ssize_t i; Py_ssize_t length; Py_Get2Args("OO", list,name); length = PySequence_Length(list); if (length < 0) Py_Error(PyExc_TypeError, "first argument must be a sequence"); Py_Assert(PyString_Check(name), PyExc_TypeError, "second argument must be a string"); l = PyList_New(0); if (!l) goto onError; for(i = 0; i < length; i++) { PyObject *v; PyObject *w; v = PySequence_GetItem(list,i); if (!v) goto onError; w = PyObject_GetAttr(v,name); if (w) { PyList_Append(l,w); Py_DECREF(w); } else if (!PyErr_ExceptionMatches(PyExc_AttributeError)) goto onError; else PyErr_Clear(); } return l; onError: Py_XDECREF(l); return NULL; } Py_C_Function( mxTools_dict, "dict(seq)\n\n" "Creates a dictionary from the given items sequence.\n" "The sequence must contain sub-sequences of at least length 2,\n" "the first entry being interpreted as the key and the second as\n" "the value.") { Py_ssize_t n; PyObject *seq,*d = 0; register Py_ssize_t i; register PyObject *k = 0; register PyObject *v = 0; Py_GetArgObject(seq); n = PySequence_Length(seq); if (n < 0) Py_Error(PyExc_TypeError, "argument must be a sequence"); d = PyDict_New(); if (!d) goto onError; for (i = 0; i < n; i++) { register PyObject *o; o = PySequence_GetItem(seq,i); if (!o) goto onError; k = PySequence_GetItem(o,0); v = PySequence_GetItem(o,1); Py_DECREF(o); if (!k || !v) { PyErr_Format(PyExc_TypeError, "item %ld in sequence doesn't have two entries", (long)i); goto onError; } if (PyDict_SetItem(d,k,v)) goto onError; Py_DECREF(k); Py_DECREF(v); } return d; onError: Py_XDECREF(d); Py_XDECREF(k); Py_XDECREF(v); return NULL; } Py_C_Function( mxTools_setdict, "setdict(seq,value=None)\n\n" "Creates a dictionary from the given items sequence.\n" "The sequence must hashable entries which are used as\n" "dictionary keys. The values are all set to value." ) { Py_ssize_t n; PyObject *seq,*d = 0,*value = 0; register Py_ssize_t i; Py_Get2Args("O|O", seq,value); n = PySequence_Length(seq); if (n < 0) Py_Error(PyExc_TypeError, "argument must be a sequence"); if (!value) { Py_INCREF(Py_None); value = Py_None; } else Py_INCREF(value); d = PyDict_New(); if (!d) goto onError; for (i = 0; i < n; i++) { register PyObject *k; k = PySequence_GetItem(seq,i); if (!k) goto onError; if (PyDict_SetItem(d,k,value)) goto onError; Py_DECREF(k); } Py_DECREF(value); return d; onError: Py_XDECREF(d); Py_XDECREF(value); return NULL; } Py_C_Function( mxTools_invdict, "invdict(d)\n\n" "Creates a dictionary with inverse mappings from the\n" "given dictionary d.") { Py_ssize_t pos; PyObject *key,*value; PyObject *d,*inv = 0; Py_GetArgObject(d); Py_Assert(PyDict_Check(d), PyExc_TypeError, "argument must be a dictionary"); inv = PyDict_New(); if (!inv) goto onError; pos = 0; while (PyDict_Next(d, &pos, &key, &value)) { if (PyDict_SetItem(inv,value,key)) goto onError; } return inv; onError: Py_XDECREF(inv); return NULL; } Py_C_Function( mxTools_reverse, "reverse(seq)\n\n" "Creates a new sequence with reversed order of the items in\n" "seq. If seq is a tuple, then a tuple is returned. Otherwise\n" "a list is returned.") { PyObject *seq,*w = 0; Py_GetArgObject(seq); if (PyTuple_Check(seq)) { register Py_ssize_t i; register Py_ssize_t n = PyTuple_GET_SIZE(seq); w = PyTuple_New(n); if (!w) goto onError; for(i = 0; i < n;) { register PyObject *o; o = PyTuple_GET_ITEM(seq,i); Py_INCREF(o); i++; PyTuple_SET_ITEM(w,n-i,o); } } else if (PyList_Check(seq)) { register Py_ssize_t i; register Py_ssize_t n = PyList_GET_SIZE(seq); w = PyList_New(n); if (!w) goto onError; for(i = 0; i < n;) { register PyObject *o; o = PyList_GET_ITEM(seq,i); Py_INCREF(o); i++; PyList_SET_ITEM(w,n-i,o); } } else { register Py_ssize_t i; register Py_ssize_t n = PySequence_Length(seq); if (n < 0) Py_Error(PyExc_TypeError, "argument must be a sequence"); w = PyList_New(n); if (!w) goto onError; for(i = 0; i < n;) { register PyObject *o; o = PySequence_GetItem(seq,i); if (!o) PyErr_Format(PyExc_IndexError, "item %ld of sequence", (long)i); Py_INCREF(o); i++; PyList_SET_ITEM(w,n-i,o); } } return w; onError: Py_XDECREF(w); return NULL; } #ifdef INCLUDE_FUNSTUFF static void mxTools_free(void *p) { free(p); } Py_C_Function( mxTools_malloc, "malloc(x)\n\n") { Py_ssize_t x; char *p; register Py_ssize_t i; register char *c; Py_GetSingleArg(Py_SSIZE_T_PARSERMARKER, x); /* Allocate virtual memory */ p = (char *)malloc(x); if (!p) { PyErr_NoMemory(); goto onError; } /* Turn the virtual memory into "real" one */ i = x; c = p; while (i--) *c++ = '\0'; return PyCObject_FromVoidPtr(p,mxTools_free); onError: return NULL; } Py_C_Function( mxTools_caching_eval, "caching_eval(code_string)\n\n" ) { PyObject *codestr; Py_GetArg("O", codestr); Py_Assert(PyString_Check(codestr), PyExc_TypeError, "arg must be a string"); return mxTools_EvalCodeString(codestr); onError: return NULL; } #endif Py_C_Function( mxTools_acquire, "acquire(self,name[,baseobjattr='baseobj'])\n\n" "Tries to get the attribute name from self..\n" "If this is not defined or None, an AttributeError is\n" "raised. Otherwise getattr(self.,name) is\n" "returned. Attribute names must not start with an\n" "underscore (this too raises an AttributeError).\n") { PyObject *obj,*baseobj,*name; PyObject *v,*baseobjattr = mxTools_BaseobjAttribute; static int recdepth; recdepth++; Py_Assert(recdepth < 2000, PyExc_SystemError, "maximum acquire() recursion depth exceeded"); Py_Get3Args("OO|O", obj,name,baseobjattr); Py_Assert(PyString_Check(name), PyExc_TypeError, "attribute name must be a string"); /* We don't acquire names starting with underscores */ Py_Assert(PyString_AS_STRING(name)[0] != '_', PyExc_AttributeError, PyString_AS_STRING(name)); /* baseobj = obj. */ baseobj = PyObject_GetAttr(obj,baseobjattr); if (!baseobj || baseobj == Py_None) { Py_XDECREF(baseobj); Py_Error(PyExc_AttributeError, PyString_AS_STRING(name)); } /* Now return getattr(baseobj,name) */ v = PyObject_GetAttr(baseobj,name); Py_DECREF(baseobj); recdepth--; return v; onError: recdepth--; return NULL; } Py_C_Function( mxTools_verbosity, "verbosity([level])\n\n" "Sets the value of the interpreter's verbosity flag.\n" "Returns the flag's value before changing it or, when called\n" "without level, the current value." ) { int value = Py_VerboseFlag, old_value = value; Py_GetArg("|i", value); Py_VerboseFlag = value; return PyInt_FromLong((long)old_value); onError: return NULL; } Py_C_Function( mxTools_debugging, "debugging([level])\n\n" "Sets the value of the interpreter's debugging flag.\n" "Returns the flag's value before changing it or, when called\n" "without level, the current value." ) { int value = Py_DebugFlag, old_value = value; Py_GetArg("|i", value); Py_DebugFlag = value; return PyInt_FromLong((long)old_value); onError: return NULL; } Py_C_Function( mxTools_optimization, "optimization([level])\n\n" "Sets the value of the interpreter's optimization flag.\n" "Returns the flag's value before changing it or, when called\n" "without level, the current value." ) { int value = Py_OptimizeFlag, old_value = value; Py_GetArg("|i", value); Py_OptimizeFlag = value; return PyInt_FromLong((long)old_value); onError: return NULL; } Py_C_Function( mxTools_interactive, "interactive([level])\n\n" "Sets the value of the interpreter's interactive flag.\n" "Returns the flag's value before changing it or, when called\n" "without level, the current value." ) { int value = Py_InteractiveFlag, old_value = value; Py_GetArg("|i", value); Py_InteractiveFlag = value; return PyInt_FromLong((long)old_value); onError: return NULL; } Py_C_Function( mxTools_cur_frame, "cur_frame([offset=0])\n\n" "Returns the current execution frame, optionally going up the\n" "stack by offset levels. If there are less than offset\n" "frames on the stack, None is returned. The function is thread\n" "safe." ) { PyFrameObject *frame = NULL; PyObject *v; Py_ssize_t offset = 0; Py_GetArg("|"Py_SSIZE_T_PARSERMARKER, offset); /* Get requested frame object */ frame = (PyFrameObject *)PyEval_GetFrame(); for (;offset > 0;offset--) { if (frame == NULL) break; frame = frame->f_back; } /* Return frame or None */ v = (PyObject *)frame; if (v == NULL) v = Py_None; Py_INCREF(v); return v; onError: return NULL; } #if 0 /* XXX replace with a generic protocol query API, e.g. hasmethods(obj,('__getitem__','__len__')) which works for both instances *and* types ! */ Py_C_Function( mxTools_issequence, "issequence(obj)\n\n" "Returns 1 iff obj exposes the sequence slot protocol,\n" "and at least defines the __getitem__ method, 0 otherwise." ) { int rc; PyObject *v; Py_GetArg("O", v); if (PyInstance_Check(v)) { PyObject *w; w = PyObject_GetAttrString("__getitem__"); if (!w) { PyErr_Clear(); rc = 0; } else { Py_DECREF(w); rc = 1; } } else { rc = (v->ob_type->tp_as_sequence && v->ob_type->tp_as_sequence->sq_item); } return rc; onError: return NULL; } #endif Py_C_Function( mxTools_truth, "truth(object)\n\n" "Return the truth value of object as True or False singleton." "Note that the two singletons are actually the integers 1 and 0." ) { PyObject *obj; int istrue; Py_GetArg("O", obj); istrue = PyObject_IsTrue(obj); if (istrue < 0) goto onError; if (istrue) obj = Py_True; else obj = Py_False; Py_INCREF(obj); return obj; onError: return NULL; } Py_C_Function( mxTools_sign, "sign(number)\n\n" "Returns the signum of the number, i.e. -1 for negative\n" "numbers, +1 for positive ones and 0 in case it is equal to 0" ) { PyObject *obj,*neg = 0; int sign; Py_GetArg("O", obj); neg = PyNumber_Negative(obj); if (!neg) goto onError; sign = PyObject_Compare(obj,neg); if (PyErr_Occurred()) goto onError; Py_DECREF(neg); return PyInt_FromLong(sign); onError: Py_XDECREF(neg); return NULL; } Py_C_Function( mxTools_makeref, "makeref(id)\n\n" "Provided that id is a valid address of a Python object,\n" "this function returns a new reference to it. You can use this\n" "function to reaccess objects lost during garbage collection.\n" "USE WITH CARE - since this can cause core dumps !" ) { long id; PyObject *obj; Py_GetArg("l", id); /* Accessing the memory location at id can cause a core dump ! */ obj = (PyObject *)id; /* Do some checks to prevent complete disasters... */ Py_Assert(obj->ob_refcnt > 0, PyExc_ValueError, "object has zero or negative reference count"); Py_Assert(obj->ob_type != NULL, PyExc_ValueError, "object has no associated type object"); Py_Assert(obj->ob_type != NULL, PyExc_ValueError, "object has no associated type object"); Py_INCREF(obj); return obj; onError: return NULL; } Py_C_Function( mxTools_dictscan, "dictscan(dictobj[,prevposition=0])\n\n" "Dictionary scanner. Returns a tuple (key,value,position)\n" "containing the key,value pair and slot position of the next\n" "item found in the dictionaries hash table after slot\n" "prevposition. Raises an IndexError when the end\n" "of the table is reached or the prevposition index is out of\n" "range." ) { Py_ssize_t pos = 0; PyObject *d,*key,*value; Py_Get2Args("O|"Py_SSIZE_T_PARSERMARKER, d, pos); Py_Assert(PyDict_Check(d), PyExc_TypeError, "object must be a dictionary"); if (!PyDict_Next(d,&pos,&key,&value)) Py_Error(PyExc_IndexError, "end of scan or illegal index"); Py_Return3Args("OO"Py_SSIZE_T_PARSERMARKER, key,value,pos); onError: return NULL; } #ifdef HAVE_PY_GETARGCARGV /* This API is available in all Python version since at least 2.1, but not made public via the Python.h header file. */ extern void Py_GetArgcArgv(int *argc, char ***argv); Py_C_Function( mxTools_setproctitle, "setproctitle(title)\n\n" "Set the process title." ) { char *title; Py_ssize_t titlelen; int argc; char **argv; int i, argv0_len; char *argv0; Py_Get2Args("s#", title, titlelen); Py_GetArgcArgv(&argc, &argv); /* Check how much space we can use to save the title. We have to be careful here, since the argv array items may not be all pointing to the same memory area. */ argv0 = argv[0]; argv0_len = strlen(argv0) + 1; for (i = 1; i < argc; i++) { if (argv[i] == argv0 + argv0_len) argv0_len += strlen(argv[i]) + 1; else break; } /* Don't count the last 0-termination byte */ argv0_len -= 1; /* Copy the new title to the static buffer for the process title and 0-terminate it. */ titlelen = min(titlelen, argv0_len); memcpy(argv0, title, titlelen); for (i = titlelen; i < argv0_len; i++) argv0[i] = '\0'; /* Truncate the argv list and set all remaining entries to NULL */ for (i = 1; i < argc; i++) argv[i] = 0; Py_ReturnNone(); onError: return NULL; } #endif #ifdef HAVE_DLOPEN Py_C_Function( mxTools_dlopen, "dlopen(libname, mode)\n\n" "Load the shared lib libname using the flags given in mode.\n" "mode defaults to Python's standard dlopenflags." ) { char *libname; #if HAVE_INTERPRETER_DLOPENFLAGS int mode = PyThreadState_GET()->interp->dlopenflags; #else # ifdef RTLD_NOW int mode = RTLD_NOW; # else intt mode = RTLD_LAZY; # endif #endif void *handle = 0; Py_Get2Args("s|i", libname, mode); handle = dlopen(libname, mode); if (handle == NULL) { /* Get error information */ const char *error = dlerror(); if (error == NULL) error = "unknown dlopen() error"; Py_Error(PyExc_OSError, error); } return PyLong_FromVoidPtr(handle); onError: return NULL; } #endif /* Helper for mxTools_verscmp */ static Py_ssize_t parselevel(char *s, Py_ssize_t len, Py_ssize_t start, int *number, char *rest) { Py_ssize_t i; Py_ssize_t split = -1, number_len; char buffer[256]; for (i = start; i < len; i++) { register char c = s[i]; if (c == '.') break; if (split < 0 && (c < '0' || c > '9')) split = i; } if (split < 0) { rest[0] = '\0'; split = i; } else { Py_ssize_t rest_len = i - split; memcpy(rest,&s[split],rest_len); rest[rest_len] = '\0'; } number_len = split - start; if (0 < number_len && number_len < sizeof(buffer)) { memcpy(buffer,&s[start],number_len); buffer[number_len] = '\0'; *number = atoi(buffer); } else *number = 0; return i + 1; } Py_C_Function( mxTools_verscmp, "verscmp(a,b)\n\n" "Compares two version strings and returns -1,0,1 for\n" "<,==,> resp." ) { char *a,*b; Py_ssize_t a_len,b_len; Py_ssize_t a_i,b_i; int a_n,b_n; char a_x[256],b_x[256]; int cmp = 0; Py_Get4Args("s#s#", a, a_len, b, b_len); Py_Assert(a_len < 255 && b_len < 255, PyExc_TypeError, "version strings too long"); DPRINTF("mxTools_verscmp: a: '%s' b: '%s'\n",a,b); for (a_i = b_i = 0;;) { a_i = parselevel(a, a_len, a_i, &a_n, a_x); b_i = parselevel(b, b_len, b_i, &b_n, b_x); DPRINTF("mxTools_verscmp: a: %i %i '%s'\n",a_i,a_n,a_x); DPRINTF("mxTools_verscmp: b: %i %i '%s'\n",b_i,b_n,b_x); if (a_n == b_n) { int a_x_empty = (a_x[0] == '\0'); int b_x_empty = (b_x[0] == '\0'); if (a_x_empty && b_x_empty) /* 1.1 == 1.1 */ ; else if (!a_x_empty && b_x_empty) { /* 1.1alpha < 1.1 */ cmp = -1; break; } else if (a_x_empty && !b_x_empty) { /* 1.1 > 1.1alpha */ cmp = +1; break; } else { cmp = strcmp(a_x,b_x); DPRINTF("mxTools_verscmp: strcmp(a_x,b_x) = %i\n",cmp); if (cmp != 0) /* e.g. 1.1alpha1 < 1.1alpha2 */ break; } } else { cmp = (a_n < b_n) ? -1 : +1; break; } if (a_i >= a_len && b_i >= b_len) { cmp = 0; break; } } return PyInt_FromLong(cmp); onError: return NULL; } /* --- Experimental safecall() API ---------------------------------- */ /*#define MXTOOLS_ENABLE_SAFECALL*/ #ifdef MXTOOLS_ENABLE_SAFECALL #include #include /* safecall() environment This is *not* thread-safe, but then signals don't work reliably in the presence of threads anyway. XXX sigsetjmp et al. are not available on Windows and probably other platforms as well ! */ static int safecall_environment_initialized = 0; static sigjmp_buf safecall_environment; /* safecall() signal handler */ static void safecall_handler(int signum) { DPRINTF("SIGSEGV handler called\n"); /* Force SysV behavior: reset the signal handler to the default handler */ signal(signum, SIG_DFL); if (safecall_environment_initialized) /* Jump back to the environment saved in the safecall function. */ siglongjmp(safecall_environment, signum); else /* Reraise the signal (forcing the use of the default handler) */ raise(signum); } /* Initialize the safecall_handler Note that a signal that invokes the handler will automatically cause the default handler to be installed again for the signal */ static int init_safecall_handler(void) { DPRINTF("init SIGSEGV handler\n"); signal(SIGSEGV, safecall_handler); signal(SIGBUS, safecall_handler); signal(SIGABRT, safecall_handler); signal(SIGILL, safecall_handler); signal(SIGFPE, safecall_handler); return 0; } /* Reset the signal handlers to their defaults */ static int reset_safecall_handler(void) { DPRINTF("reset SIGSEGV handler\n"); signal(SIGSEGV, SIG_DFL); signal(SIGBUS, SIG_DFL); signal(SIGABRT, SIG_DFL); signal(SIGILL, SIG_DFL); signal(SIGFPE, SIG_DFL); return 0; } Py_C_Function( mxTools_safecall, "safecall(callable [,args, kws])\n\n" "Calls the callable object callable using args and kws,\n" "if given. In the event of the call causing a segfault\n" "or similar serious problem, the function will raise an\n" "mx.Tools.ProgrammingError. The application can then terminate\n" "gracefully. Note: This function is not thread-safe !" ) { PyObject *callable, *callargs=NULL, *callkws=NULL; PyObject *result = NULL; PyObject *v; int signum; Py_Get3Args("O|OO", callable, callargs, callkws); /* Save the current stack environment and call the callable */ DPRINTF("setjmp()\n"); signum = sigsetjmp(safecall_environment, 1); if (signum == 0) { /* Call the callable object and return gracefully if possible */ safecall_environment_initialized = 1; init_safecall_handler(); result = PyEval_CallObjectWithKeywords(callable, callargs, callkws); safecall_environment_initialized = 0; reset_safecall_handler(); return result; } /* We got here by a longjmp(); signum is the signal triggering this event. */ DPRINTF("processing longjmp()\n"); safecall_environment_initialized = 0; reset_safecall_handler(); v = PyTuple_New(2); PyTuple_SET_ITEM(v, 0, PyString_FromString("Bug in external routine")); PyTuple_SET_ITEM(v, 1, PyInt_FromLong(signum)); PyErr_SetObject(mxTools_ProgrammingError, v); onError: return NULL; } Py_C_Function( mxTools_segfault, "segfault()\n\n" "Cause a hard seg fault." ) { char *p = NULL; char buffer[10]; double a,b,c; int errtype = 0; Py_GetArg("|i", errtype); switch (errtype) { case 0: /* Cause a true seg fault by writing to a NULL pointer */ memset(p, 0, 100); break; case 1: /* Double free() */ p = malloc(100); free(p); free(p); break; case 2: /* Buffer overrun on stack */ memset(buffer, 0, 20); break; case 3: /* Buffer underrun on stack */ memset(buffer - 10, 0, 20); break; case 4: /* Division by 0 */ a = 1; b = 0; c = a / b; break; default: Py_Error(PyExc_ValueError, "segfault(): unknown error type"); } Py_ReturnNone(); onError: return NULL; } #endif /* --- NotGiven Singleton -------------------------------------------------- */ static PyObject *mxNotGiven_Repr(PyObject *v) { return PyString_FromString("NotGiven"); } static int mxNotGiven_NonZero(PyObject *v) { return 0; } typedef PyObject mxNotGivenObject; static PyNumberMethods mxNotGiven_TypeAsNumber = { /* These slots are not NULL-checked, so we must provide dummy functions */ notimplemented2, /*nb_add*/ notimplemented2, /*nb_subtract*/ notimplemented2, /*nb_multiply*/ notimplemented2, /*nb_divide*/ notimplemented2, /*nb_remainder*/ notimplemented2, /*nb_divmod*/ notimplemented3, /*nb_power*/ notimplemented1, /*nb_negative*/ notimplemented1, /*nb_positive*/ /* Everything below this line EXCEPT nb_nonzero (!) is NULL checked */ 0, /*nb_absolute*/ mxNotGiven_NonZero, /*nb_nonzero*/ 0, /*nb_invert*/ 0, /*nb_lshift*/ 0, /*nb_rshift*/ 0, /*nb_and*/ 0, /*nb_xor*/ 0, /*nb_or*/ 0, /*nb_coerce*/ 0, /*nb_int*/ 0, /*nb_long*/ 0, /*nb_float*/ 0, /*nb_oct*/ 0, /*nb_hex*/ }; static PyTypeObject mxNotGiven_Type = { PyObject_HEAD_INIT(0) /* init at startup ! */ 0, /*ob_size*/ "NotGiven", /*tp_name*/ sizeof(mxNotGivenObject), /*tp_basicsize*/ 0, /*tp_itemsize*/ 0, /*tp_dealloc; object always stays alive */ 0, /*tp_print*/ 0, /*tp_getattr*/ 0, /*tp_setattr*/ 0, /*tp_compare*/ mxNotGiven_Repr, /*tp_repr*/ &mxNotGiven_TypeAsNumber, /*tp_as_number*/ 0, /*tp_as_sequence*/ 0, /*tp_as_mapping*/ 0, /*tp_hash */ }; /* --- module init --------------------------------------------------------- */ /* Python Method Table */ static PyMethodDef Module_methods[] = { Py_MethodListEntry("trange", mxTools_trange), Py_MethodListEntrySingleArg("trange_len", mxTools_indices), Py_MethodListEntrySingleArg("indices", mxTools_indices), Py_MethodListEntrySingleArg("range_len", mxTools_range_len), Py_MethodListEntry("irange", mxTools_irange), Py_MethodListEntry("ifilter", mxTools_ifilter), Py_MethodListEntry("get", mxTools_get), Py_MethodListEntry("extract", mxTools_extract), Py_MethodListEntry("iremove", mxTools_iremove), Py_MethodListEntry("mget", mxTools_extract), Py_MethodListEntry("mgetattr", mxTools_findattr), Py_MethodListEntry("findattr", mxTools_findattr), Py_MethodListEntry("attrlist", mxTools_attrlist), Py_MethodListEntry("mapply", mxTools_mapply), Py_MethodListEntry("method_mapply", mxTools_method_mapply), Py_MethodListEntry("count", mxTools_count), Py_MethodListEntry("exists", mxTools_exists), Py_MethodListEntry("forall", mxTools_forall), Py_MethodListEntry("index", mxTools_index), Py_MethodListEntry("napply", mxTools_napply), Py_MethodListEntrySingleArg("sizeof", mxTools_sizeof), Py_MethodListEntrySingleArg("dict", mxTools_dict), Py_MethodListEntrySingleArg("invdict", mxTools_invdict), Py_MethodListEntry("setdict", mxTools_setdict), Py_MethodListEntrySingleArg("reverse", mxTools_reverse), Py_MethodListEntrySingleArg("tuples", mxTools_tuples), Py_MethodListEntrySingleArg("lists", mxTools_lists), Py_MethodListEntry("acquire", mxTools_acquire), Py_MethodListEntry("verbosity", mxTools_verbosity), Py_MethodListEntry("optimization", mxTools_optimization), Py_MethodListEntry("interactive", mxTools_interactive), Py_MethodListEntry("debugging", mxTools_debugging), Py_MethodListEntry("cur_frame", mxTools_cur_frame), Py_MethodListEntry("truth", mxTools_truth), Py_MethodListEntry("sign", mxTools_sign), Py_MethodListEntry("makeref", mxTools_makeref), Py_MethodListEntry("dictscan", mxTools_dictscan), Py_MethodListEntry("verscmp", mxTools_verscmp), #ifdef HAVE_PY_GETARGCARGV Py_MethodListEntry("setproctitle", mxTools_setproctitle), #endif #ifdef HAVE_DLOPEN Py_MethodListEntry("dlopen", mxTools_dlopen), #endif #ifdef INCLUDE_FUNSTUFF Py_MethodListEntrySingleArg("malloc", mxTools_malloc), Py_MethodListEntry("caching_eval", mxTools_caching_eval), #endif #ifdef MXTOOLS_ENABLE_SAFECALL Py_MethodListEntry("safecall", mxTools_safecall), Py_MethodListEntry("segfault", mxTools_segfault), #endif {NULL,NULL} /* end of list */ }; /* Cleanup function */ static void mxToolsModule_Cleanup(void) { Py_XDECREF(mxTools_BaseobjAttribute); mxTools_BaseobjAttribute = 0; /* Reset mxTools_Initialized flag */ mxTools_Initialized = 0; } /* create PyMethodObjects and register them in the module's dict */ MX_EXPORT(void) initmxTools(void) { PyObject *module, *moddict; if (mxTools_Initialized) Py_Error(PyExc_SystemError, "can't initialize "MXTOOLS_MODULE" more than once"); /* Init type objects */ PyType_Init(mxNotGiven_Type); /* create module */ module = Py_InitModule4(MXTOOLS_MODULE, /* Module name */ Module_methods, /* Method list */ Module_docstring, /* Module doc-string */ (PyObject *)NULL, /* always pass this as *self */ PYTHON_API_VERSION); /* API Version */ if (!module) goto onError; /* Register cleanup function */ if (Py_AtExit(mxToolsModule_Cleanup)) /* XXX what to do if we can't register that function ??? */; /* Create NotGiven singleton */ mxNotGiven = PyObject_NEW(PyObject,&mxNotGiven_Type); if (!mxNotGiven) goto onError; /* Create acquire default argument for baseobjattr */ mxTools_BaseobjAttribute = PyString_InternFromString("baseobj"); if (!mxTools_BaseobjAttribute) goto onError; /* Add some constants to the module's dict */ moddict = PyModule_GetDict(module); insstr(moddict, "__version__", MXTOOLS_VERSION); PyDict_SetItemString(moddict, "NotGiven", mxNotGiven); /* dlopen() mode flags */ #ifdef RTLD_LAZY insint(moddict, "RTLD_LAZY", RTLD_LAZY); #endif #ifdef RTLD_NOW insint(moddict, "RTLD_NOW", RTLD_NOW); #endif #ifdef RTLD_NOLOAD insint(moddict, "RTLD_NOLOAD", RTLD_NOLOAD); #endif #ifdef RTLD_DEEPBIND insint(moddict, "RTLD_DEEPBIND", RTLD_DEEPBIND); #endif #ifdef RTLD_GLOBAL insint(moddict, "RTLD_GLOBAL", RTLD_GLOBAL); #endif #ifdef RTLD_LOCAL insint(moddict, "RTLD_LOCAL", RTLD_LOCAL); #endif #ifdef RTLD_NODELETE insint(moddict, "RTLD_NODELETE", RTLD_NODELETE); #endif /* Errors */ if (!(mxTools_Error = insexc(moddict, "Error", NULL))) goto onError; if (!(mxTools_ProgrammingError = insexc(moddict, "ProgrammingError", PyExc_RuntimeError))) goto onError; /* We are now initialized */ mxTools_Initialized = 1; onError: /* Check for errors and report them */ if (PyErr_Occurred()) Py_ReportModuleInitError(MXTOOLS_MODULE); return; } egenix-mx-base-3.2.7/mx/Tools/mxTools/mxTools.def0000664000175000017500000000002506451512213021524 0ustar lemburglemburgEXPORTS initmxTools egenix-mx-base-3.2.7/mx/Tools/mxTools/mxTools.h0000664000175000017500000000121412133021465021214 0ustar lemburglemburg#ifndef MXTOOLS_H #define MXTOOLS_H /* mxTools -- Misc. tools for Python Copyright (c) 2000, Marc-Andre Lemburg; mailto:mal@lemburg.com Copyright (c) 2000-2013, eGenix.com Software GmbH; mailto:info@egenix.com */ /* The extension's name */ #define MXTOOLS_MODULE "mxTools" /* --- No servicable parts below this line ----------------------*/ /* Include generic mx extension header file */ #include "mxh.h" #ifdef MX_BUILDING_MXTOOLS # define MXTOOLS_EXTERNALIZE MX_EXPORT #else # define MXTOOLS_EXTERNALIZE MX_IMPORT #endif #ifdef __cplusplus extern "C" { #endif /* Symbols to be exported. */ /* EOF */ #ifdef __cplusplus } #endif #endif egenix-mx-base-3.2.7/mx/Tools/mxTools/mxh.h0000664000175000017500000000320212133021412020332 0ustar lemburglemburg#ifndef MXH_H #define MXH_H /* mxh.h -- Generic header file for all mx Extenstions This file should be included by every mx Extension header file and the C file. Copyright (c) 2000, Marc-Andre Lemburg; mailto:mal@lemburg.com Copyright (c) 2000-2013, eGenix.com Software GmbH; mailto:info@egenix.com See the documentation for further copyright information or contact the author. */ /* Macros to control export and import of DLL symbols. We use our own definitions since Python's don't allow specifying both imported and exported symbols at the same time; these defines haven't been thoroughly tested yet, patches are most welcome :-) */ /* Macro to "mark" a symbol for DLL export */ #if (defined(_MSC_VER) && _MSC_VER > 850 \ || defined(__MINGW32__) || defined(__CYGWIN) || defined(__BEOS__)) # ifdef __cplusplus # define MX_EXPORT(type) extern "C" type __declspec(dllexport) # else # define MX_EXPORT(type) extern type __declspec(dllexport) # endif #elif defined(__WATCOMC__) # define MX_EXPORT(type) extern type __export #elif defined(__IBMC__) # define MX_EXPORT(type) extern type _Export #else # define MX_EXPORT(type) extern type #endif /* Macro to "mark" a symbol for DLL import */ #if defined(__BORLANDC__) # define MX_IMPORT(type) extern type __import #elif (defined(_MSC_VER) && _MSC_VER > 850 \ || defined(__MINGW32__) || defined(__CYGWIN) || defined(__BEOS__)) # ifdef __cplusplus # define MX_IMPORT(type) extern "C" type __declspec(dllimport) # else # define MX_IMPORT(type) extern type __declspec(dllimport) # endif #else # define MX_IMPORT(type) extern type #endif /* EOF */ #endif egenix-mx-base-3.2.7/mx/Tools/mxTools/mxpyapi.h0000664000175000017500000003356612133300665021257 0ustar lemburglemburg#ifndef MXPYAPI_H #define MXPYAPI_H /* mxpyapi.h This header file includes some new APIs that are not available in older API versions, yet are used by the mx-Extensions. Copyright (c) 2000, Marc-Andre Lemburg; mailto:mal@lemburg.com Copyright (c) 2000-2013, eGenix.com Software GmbH; mailto:info@egenix.com */ /* Emulate PY_VERSION_HEX for older Python versions. */ #ifndef PY_VERSION_HEX # if PYTHON_API_VERSION == 1007 # define PY_VERSION_HEX 0x010500F0 # endif # if PYTHON_API_VERSION == 1006 # define PY_VERSION_HEX 0x010400F0 # endif # if PYTHON_API_VERSION < 1006 # define PY_VERSION_HEX 0 # endif #endif #ifdef __cplusplus extern "C" { #endif /* ---------------------------------------------------------------- Python 2.7.4 ---------------------------------------------------------------- */ #if PY_VERSION_HEX >= 0x02070400 && PY_VERSION_HEX < 0x02070500 /* Python 2.7.4 has a bug that causes Py_DECREF() to fail for dictionaries in module cleanup routines. See http://bugs.python.org/issue17703 */ #define mxPy_DECREF_Unsafe_AtExit() 1 #else /* Apply a runtime check */ #define mxPy_DECREF_Unsafe_AtExit() \ (strncmp(Py_GetVersion(), "2.7.4", 5) == 0) #endif /* ---------------------------------------------------------------- Python 2.7 and above: ---------------------------------------------------------------- */ #if PY_VERSION_HEX >= 0x02070000 /* Python 2.7 introduces the backported memoryview object */ #define HAVE_PYTHON_MEMORYVIEW #else #endif /* ---------------------------------------------------------------- Python 2.6 and above: ---------------------------------------------------------------- */ #if PY_VERSION_HEX >= 0x02060000 /* Python 2.6 introduces new buffer interface slots based on the Py_buffer interface. */ #define HAVE_PYTHON_PY_BUFFER #else #endif /* ---------------------------------------------------------------- Python 2.5 and above: ---------------------------------------------------------------- */ #if PY_VERSION_HEX >= 0x02050000 /* Parser marker */ #define Py_SSIZE_T_PARSERMARKER "n" #else /* Python 2.5 introduced a new type for index integers which is not available in earlier versions. Unfortunately, the new type has 64 bits on 64-bit architectures like AMD64, whereas integers still have 32 bits, which causes problems with output parameters. Along with the new type a few type slots were changed and a new parser marker introduced. */ #define Py_ssize_t int /* Parser marker */ #define Py_SSIZE_T_PARSERMARKER "i" /* Integer APIs */ #define PyInt_FromSize_t(x) PyInt_FromLong((long)(x)) #define PyInt_FromSsize_t(x) PyInt_FromLong((long)(x)) #define PyInt_AsSsize_t(x) ((Py_ssize_t)PyInt_AsLong(x)) #endif /* ---------------------------------------------------------------- Python 2.4 and above: ---------------------------------------------------------------- */ #if PY_VERSION_HEX >= 0x02040000 #else #endif /* ---------------------------------------------------------------- Python 2.3 and above: ---------------------------------------------------------------- */ #if PY_VERSION_HEX >= 0x02030000 #else /* These were introduced in Python 2.3: */ # define PY_LONG_LONG LONG_LONG /* Boolean APIs */ #define PyBool_FromLong(x) PyInt_FromLong((long)(x)?1:0) #endif /* ---------------------------------------------------------------- Python 2.2 and above: ---------------------------------------------------------------- */ #if PY_VERSION_HEX >= 0x02020000 # define HAVE_SUBCLASSABLE_TYPES 1 # define HAVE_INTERPRETER_DLOPENFLAGS 1 #else /* These were introduced in Python 2.2: */ # define PyString_CheckExact PyString_Check # define PyInt_CheckExact PyInt_Check # define PyFloat_CheckExact PyFloat_Check # define PyLong_CheckExact PyLong_Check # define PyExc_StopIteration PyExc_IndexError /* Not needed in Python 2.1 and below, so simply ignore the API */ # define PyType_Ready(x) #endif /* ---------------------------------------------------------------- Python 1.6 and 2.0 only: ---------------------------------------------------------------- */ /* Disabled: we don't support Python 1.6 and don't have a need for this API in any of the mx Tools (yet). */ #if 0 #if PY_VERSION_HEX >= 0x01060000 && PY_VERSION_HEX < 0x02010000 static PyObject * PyObject_Unicode(PyObject *v) { PyObject *res; if (v == NULL) res = PyString_FromString(""); else if (PyUnicode_Check(v)) { Py_INCREF(v); return v; } else if (PyString_Check(v)) res = v; else if (v->ob_type->tp_str != NULL) res = (*v->ob_type->tp_str)(v); else { PyObject *func; if (!PyInstance_Check(v) || (func = PyObject_GetAttrString(v, "__str__")) == NULL) { PyErr_Clear(); res = PyObject_Repr(v); } else { res = PyEval_CallObject(func, (PyObject *)NULL); Py_DECREF(func); } } if (res == NULL) return NULL; if (!PyUnicode_Check(res)) { PyObject* str; str = PyUnicode_FromObject(res); Py_DECREF(res); if (str) res = str; else return NULL; } return res; } #endif #endif /* ---------------------------------------------------------------- Python 2.0 alpha + betas: ---------------------------------------------------------------- */ #if PY_VERSION_HEX >= 0x02000000 && PY_VERSION_HEX < 0x020000F0 # if defined(PyBuffer_Check) && !defined(HAVE_PYTHON_BUFFEROBJECTS) # define HAVE_PYTHON_BUFFEROBJECTS # endif #ifndef Py_PROTO # define Py_PROTO(args) args #endif #endif /* ---------------------------------------------------------------- Python 1.6 and later: ---------------------------------------------------------------- */ #if PY_VERSION_HEX >= 0x01060000 #if defined(PyUnicode_Check) && !defined(HAVE_UNICODE) # define HAVE_UNICODE #endif #endif #if PY_VERSION_HEX >= 0x02020000 #if defined(HAVE_UNICODE) && !defined(Py_USING_UNICODE) # undef HAVE_UNICODE #endif #endif #ifndef HAVE_UNICODE # undef PyUnicode_Check # define PyUnicode_Check(obj) 0 #endif /* ---------------------------------------------------------------- Python < 1.6: ---------------------------------------------------------------- */ #if PY_VERSION_HEX < 0x01060000 #if !defined(PyObject_DEL) # define PyObject_DEL(x) free(x) # define PyObject_Del(x) free(x) #endif #endif /* ---------------------------------------------------------------- Python >= 1.5.2: ---------------------------------------------------------------- */ #if PY_VERSION_HEX >= 0x010502F0 # if defined(PyBuffer_Check) && !defined(HAVE_PYTHON_BUFFEROBJECTS) # define HAVE_PYTHON_BUFFEROBJECTS # endif #endif /* ---------------------------------------------------------------- Python >= 1.5.2 and prior to 2.0a1 ---------------------------------------------------------------- */ #if PY_VERSION_HEX >= 0x010502F0 && PY_VERSION_HEX < 0x02000000 /* Takes an arbitrary object which must support the (character, single segment) buffer interface and returns a pointer to a read-only memory location useable as character based input for subsequent processing. buffer and buffer_len are only set in case no error occurrs. Otherwise, -1 is returned and an exception set. */ static int PyObject_AsCharBuffer(PyObject *obj, const char **buffer, int *buffer_len) { PyBufferProcs *pb = obj->ob_type->tp_as_buffer; const char *pp; int len; if ( pb == NULL || pb->bf_getcharbuffer == NULL || pb->bf_getsegcount == NULL ) { PyErr_SetString(PyExc_TypeError, "expected a character buffer object"); goto onError; } if ( (*pb->bf_getsegcount)(obj,NULL) != 1 ) { PyErr_SetString(PyExc_TypeError, "expected a single-segment buffer object"); goto onError; } len = (*pb->bf_getcharbuffer)(obj,0,&pp); if (len < 0) goto onError; *buffer = pp; *buffer_len = len; return 0; onError: return -1; } /* Same as PyObject_AsCharBuffer() except that this API expects (readable, single segment) buffer interface and returns a pointer to a read-only memory location which can contain arbitrary data. buffer and buffer_len are only set in case no error occurrs. Otherwise, -1 is returned and an exception set. */ static int PyObject_AsReadBuffer(PyObject *obj, const void **buffer, int *buffer_len) { PyBufferProcs *pb = obj->ob_type->tp_as_buffer; void *pp; int len; if ( pb == NULL || pb->bf_getreadbuffer == NULL || pb->bf_getsegcount == NULL ) { PyErr_SetString(PyExc_TypeError, "expected a readable buffer object"); goto onError; } if ( (*pb->bf_getsegcount)(obj,NULL) != 1 ) { PyErr_SetString(PyExc_TypeError, "expected a single-segment buffer object"); goto onError; } len = (*pb->bf_getreadbuffer)(obj,0,&pp); if (len < 0) goto onError; *buffer = pp; *buffer_len = len; return 0; onError: return -1; } /* Takes an arbitrary object which must support the (writeable, single segment) buffer interface and returns a pointer to a writeable memory location in buffer of size buffer_len. buffer and buffer_len are only set in case no error occurrs. Otherwise, -1 is returned and an exception set. */ static int PyObject_AsWriteBuffer(PyObject *obj, void **buffer, int *buffer_len) { PyBufferProcs *pb = obj->ob_type->tp_as_buffer; void*pp; int len; if ( pb == NULL || pb->bf_getwritebuffer == NULL || pb->bf_getsegcount == NULL ) { PyErr_SetString(PyExc_TypeError, "expected a writeable buffer object"); goto onError; } if ( (*pb->bf_getsegcount)(obj,NULL) != 1 ) { PyErr_SetString(PyExc_TypeError, "expected a single-segment buffer object"); goto onError; } len = (*pb->bf_getwritebuffer)(obj,0,&pp); if (len < 0) goto onError; *buffer = pp; *buffer_len = len; return 0; onError: return -1; } #endif /* Python Version in [1.5.2b2, 2.0) */ /* ---------------------------------------------------------------- Python 1.5.2b1 and older: ---------------------------------------------------------------- */ #if PY_VERSION_HEX <= 0x010502B1 /* These are missing from PC/python_nt.def and thus didn't get included in python1.5.lib on Windows platforms. */ #ifdef MS_WIN32 # define PyString_InternInPlace(x) # define PyString_InternFromString(x) PyString_FromString(x) #endif #endif /* Python Version <= 1.5.2b1 */ /* ---------------------------------------------------------------- Python 1.5.2a2 and older: ---------------------------------------------------------------- */ #if PY_VERSION_HEX <= 0x010502A2 extern long PyOS_strtol Py_PROTO((const char *, char **, int)); #endif /* Python Version <= 1.5.2a2 */ /* ---------------------------------------------------------------- Python 1.5.2a1 and older: ---------------------------------------------------------------- */ #if PY_VERSION_HEX <= 0x010502A1 #ifndef PyList_SET_ITEM # define PyList_SET_ITEM(l,i,w) PyList_GET_ITEM(l,i) = w #endif #endif /* Python Version < 1.5.2a1 */ /* ---------------------------------------------------------------- Prior to Python 1.5: ---------------------------------------------------------------- */ #if PY_VERSION_HEX < 0x010500F0 /* New in Python1.5: */ # undef PyString_AS_STRING # define PyString_AS_STRING(op) (((PyStringObject *)(op))->ob_sval) # define PyString_GET_SIZE(op) (((PyStringObject *)(op))->ob_size) # define PyTuple_GET_SIZE(op) (((PyTupleObject *)(op))->ob_size) # define PyList_GET_SIZE(op) (((PyListObject *)(op))->ob_size) /* Changed since 1.4 */ # undef PyList_GET_ITEM # define PyList_GET_ITEM(op, i) (((PyListObject *)(op))->ob_item[i]) # undef PyInt_AS_LONG # define PyInt_AS_LONG(op) (((PyIntObject *)(op))->ob_ival) # undef PyFloat_AS_DOUBLE # define PyFloat_AS_DOUBLE(op) (((PyFloatObject *)(op))->ob_fval) /* This function is taken from error.c in Python 1.5... Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, The Netherlands. All Rights Reserved Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation, and that the names of Stichting Mathematisch Centrum or CWI or Corporation for National Research Initiatives or CNRI not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. While CWI is the initial source for this software, a modified version is made available by the Corporation for National Research Initiatives (CNRI) at the Internet address ftp://ftp.python.org. STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifdef HAVE_STDARG_PROTOTYPES PyObject * PyErr_Format(PyObject *exception, const char *format, ...) #else PyObject * PyErr_Format(exception, format, va_alist) PyObject *exception; const char *format; va_dcl #endif { va_list vargs; char buffer[500]; /* Caller is responsible for limiting the format */ #ifdef HAVE_STDARG_PROTOTYPES va_start(vargs, format); #else va_start(vargs); #endif vsprintf(buffer, format, vargs); PyErr_SetString(exception, buffer); return NULL; } /* Python 1.5 uses instances as exceptions, the 1.4 API only knows about strings. */ #define PyErr_NewException(name,base,dict) PyString_FromString(fullname); /* Missing from rename2.h in Python 1.4 */ #ifndef PyVarObject # define PyVarObject varobject #endif #endif /* Python Version < 1.5 */ #ifdef __cplusplus } #endif /* EOF */ #endif egenix-mx-base-3.2.7/mx/Tools/mxTools/mxstdlib.h0000664000175000017500000002612712133021413021400 0ustar lemburglemburg#ifndef MXSTDLIB_H #define MXSTDLIB_H /* Standard stuff I use often -- not Python specific Copyright (c) 2000, Marc-Andre Lemburg; mailto:mal@lemburg.com Copyright (c) 2000-2013, eGenix.com Software GmbH; mailto:info@egenix.com See the documentation for further copyright information or contact the author. */ /* Standard includes */ #include #include #include #include #include #include /* Limits */ #ifdef HAVE_LIMITS_H # include #else # ifndef INT_MAX # define INT_MAX 2147483647 # endif # ifndef LONG_MAX # define LONG_MAX INT_MAX # endif #endif /* Disable a few MS VC++ warnings that were introduced in VS 2005, e.g. warning C4996: 'getenv': This function or variable may be unsafe. Consider using _dupenv_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. Note that #define _CRT_SECURE_NO_WARNINGS 1 does not work for some reason. You have to use the #pragma warning() to disable warnings inside a header file. */ #if defined(_MSC_VER) && (_MSC_VER >= 1400) # pragma warning(disable:4996) #endif /* --- My own macros for memory allocation... --------------------------- */ /* Define this macro if the code should use C malloc */ /* #define MAL_USE_C_MALLOC */ /* Define this macro if the code should use Python's pymalloc */ /* #define MAL_USE_PYMALLOC */ /* Define this macro if the code should use pymalloc and uses the cnew()/cnewstruct() macros. This is needed to only enable the helper functions when using those macros in pymalloc mode. */ /* #define MAL_USING_CNEW */ /* Decide which variant to use, if no explicit choice was made: C malloc or pymalloc */ #ifdef MAL_USE_C_MALLOC /* Force use of C malloc */ #elif !defined(MAL_USE_PYMALLOC) && defined (PYTHON_API_VERSION) /* Default to using the Python pymalloc in case we're compiling a Python extension */ # define MAL_USE_PYMALLOC #endif #ifndef MAL_USE_PYMALLOC /* --- Use C malloc for memory allocation --- */ # ifdef MAL_MEM_DEBUG /* Include debug information for tracing memory leaks */ # define newstruct(x) \ (mxDebugPrintf("* malloc for struct "#x" (%s:%i)\n",__FILE__,__LINE__),\ (x *)malloc(sizeof(x))) # define cnewstruct(x) \ (mxDebugPrintf("* calloc for struct "#x" (%s:%i)\n",c,__FILE__,__LINE__),\ (x *)calloc(sizeof(x),1)) # define new(x,c) \ (mxDebugPrintf("* malloc for "#c"=%i '"#x"'s (%s:%i)\n",c,__FILE__,__LINE__),\ (x *)malloc(sizeof(x)*(c))) # define cnew(x,c) \ (mxDebugPrintf("* calloc for "#c"=%i '"#x"'s (%s:%i)\n",c,__FILE__,__LINE__),\ (x *)calloc((c),sizeof(x))) # define resize(var,x,c) \ (mxDebugPrintf("* realloc array "#var" ("#x") at %X to size "#c"=%i (%s:%i)\n",var,c,__FILE__,__LINE__),\ (x *)realloc((void*)(var),sizeof(x)*(c))) # define varresize(var,x,bytes) \ (mxDebugPrintf("* realloc var "#var" ("#x") at %X to %i bytes (%s:%i)\n",var,bytes,__FILE__,__LINE__),\ (x *)realloc((void*)(var),(bytes))) # define free(x) \ (mxDebugPrintf("* freeing "#x" at %X (%s:%i)\n",x,__FILE__,__LINE__),\ free((void*)(x))) # else /* Non-debug versions of the macros */ # define newstruct(x) ((x *)malloc(sizeof(x))) # define cnewstruct(x) ((x *)calloc(sizeof(x),1)) # define new(x,c) ((x *)malloc(sizeof(x)*(c))) # define cnew(x,c) ((x *)calloc((c),sizeof(x))) # define resize(var,x,c) ((x *)realloc((void*)(var),sizeof(x)*(c))) # define varresize(var,x,bytes) ((x *)realloc((void*)(var),(bytes))) # define free(x) (free((void*)(x))) # endif #else /* --- Use Python pymalloc for memory allocation --- */ # ifdef MAL_USING_CNEW /* Helper needed since Python doesn't define a calloc() interface. */ static void *mx_PyObject_CALLOC(register size_t size) { register void *mem; if (size == 0) return NULL; mem = PyObject_MALLOC(size); if (mem) memset(mem, 0, size); return mem; } # endif # ifndef MAL_MEM_DEBUG /* Non-debug versions of the macros */ # define newstruct(x) ((x *)PyObject_MALLOC(sizeof(x))) # ifdef MAL_USING_CNEW # define cnewstruct(x) ((x *)mx_PyObject_CALLOC(sizeof(x))) # endif # define new(x,c) ((x *)PyObject_MALLOC(sizeof(x)*(c))) # ifdef MAL_USING_CNEW # define cnew(x,c) ((x *)mx_PyObject_CALLOC(sizeof(x)*(c))) # endif # define resize(var,x,c) ((x *)PyObject_REALLOC((void*)(var),sizeof(x)*(c))) # define varresize(var,x,bytes) ((x *)PyObject_REALLOC((void*)(var),(bytes))) # define free(x) (PyObject_FREE((void*)(x))) # else /* Debug versions of the macros */ # define newstruct(x) \ (mxDebugPrintf("* malloc for struct "#x" (%s:%i)\n",__FILE__,__LINE__), \ (x *)PyObject_MALLOC(sizeof(x))) # ifdef MAL_USING_CNEW # define cnewstruct(x) \ (mxDebugPrintf("* calloc for struct "#x" (%s:%i)\n",c,__FILE__,__LINE__), \ ((x *)mx_PyObject_CALLOC(sizeof(x)))) # endif # define new(x,c) \ (mxDebugPrintf("* malloc for "#c"=%i '"#x"'s (%s:%i)\n",c,__FILE__,__LINE__), \ ((x *)PyObject_MALLOC(sizeof(x)*(c)))) # ifdef MAL_USING_CNEW # define cnew(x,c) \ (mxDebugPrintf("* calloc for "#c"=%i '"#x"'s (%s:%i)\n",c,__FILE__,__LINE__), \ ((x *)mx_PyObject_CALLOC(sizeof(x)*(c)))) # endif # define resize(var,x,c) \ (mxDebugPrintf("* realloc array "#var" ("#x") at %X to size "#c"=%i (%s:%i)\n",var,c,__FILE__,__LINE__), \ ((x *)PyObject_REALLOC((void*)(var),sizeof(x)*(c)))) # define varresize(var,x,bytes) \ (mxDebugPrintf("* realloc var "#var" ("#x") at %X to %i bytes (%s:%i)\n",var,bytes,__FILE__,__LINE__), \ ((x *)PyObject_REALLOC((void*)(var),(bytes)))) # define free(x) \ (mxDebugPrintf("* freeing "#x" at %X (%s:%i)\n",x,__FILE__,__LINE__), \ (PyObject_FREE((void*)(x)))) # endif #endif /* --- Debugging output ------------------------------------------------- */ /* Use the flag MAL_DEBUG to enable debug processing. The flag MAL_DEBUG_WITH_PYTHON can be used to indicate that the object file will be linked with Python, so we can use Python APIs for the debug processing here. */ #ifdef MAL_DEBUG_WITH_PYTHON # ifndef PYTHON_API_VERSION # error "mx.h must be included when compiling with MAL_DEBUG_WITH_PYTHON" # endif # ifndef MAL_DEBUG # define MAL_DEBUG # endif #else # if defined(PYTHON_API_VERSION) && defined(MAL_DEBUG) # define MAL_DEBUG_WITH_PYTHON # endif #endif /* Indicator for the availability of these interfaces: */ #define HAVE_MAL_DEBUG /* Name of the environment variable defining the log file name to be used: */ #ifndef MAL_DEBUG_OUTPUTFILE_ENV_VARIABLE # define MAL_DEBUG_OUTPUTFILE_ENV_VARIABLE "mxLogFile" #endif /* File name to be used for debug logging (each object file using this facility may set its own logging file) if no environment variable is set: */ #ifndef MAL_DEBUG_OUTPUTFILE # define MAL_DEBUG_OUTPUTFILE "mx.log" #endif /* Name of the environment variable defining the log file prefix to be used (e.g. to direct all log files into a separate directory): */ #ifndef MAL_DEBUG_OUTPUTFILEPREFIX_ENV_VARIABLE # define MAL_DEBUG_OUTPUTFILEPREFIX_ENV_VARIABLE "mxLogFileDir" #endif /* File name prefix to be used for log files, if no environment variable is set: */ #ifndef MAL_DEBUG_OUTPUTFILEPREFIX # define MAL_DEBUG_OUTPUTFILEPREFIX "" #endif /* Log id to be used */ #ifndef MAL_DEBUG_LOGID # define MAL_DEBUG_LOGID "New Log Session" #endif /* Debug printf() API Output is written to a log file or stream. If the output file is not yet open, the function will try to open the file as defined by the environment or the program defines. The file remains open until the program terminates. Subsequent changes to the environment are not taken into account. The output file is deduced in the following way: 1. get the filename from the environment, revert to the predefined value 2. get the filename prefix from the environment, revert to the predefined value 3. if filename is one of "stderr" or "stdout" use the native streams for output; otherwise try to open fileprefix + filename reverting to stderr in case this fails. */ static int mxDebugPrintf(const char *format, ...) { va_list args; static FILE *mxDebugPrintf_file; if (!mxDebugPrintf_file) { time_t now; char *filename,*fileprefix; now = time(NULL); filename = getenv(MAL_DEBUG_OUTPUTFILE_ENV_VARIABLE); if (!filename) filename = MAL_DEBUG_OUTPUTFILE; fileprefix = getenv(MAL_DEBUG_OUTPUTFILEPREFIX_ENV_VARIABLE); if (!fileprefix) fileprefix = MAL_DEBUG_OUTPUTFILEPREFIX; if (strcmp(filename,"stdout") == 0) mxDebugPrintf_file = stdout; else if (strcmp(filename,"stderr") == 0) mxDebugPrintf_file = stderr; else { char logfile[512]; if (strlen(fileprefix) + strlen(filename) > sizeof(logfile) - 1) { /* Hack to shut up "cc -Wall" warning that this function is not used... */ static void *mxDebugPrintf_used; mxDebugPrintf_used = (void *)mxDebugPrintf; /* Default to stderr in case the log file name doesn't fit the available buffer */ mxDebugPrintf_file = stderr; fprintf(mxDebugPrintf_file, "\n*** Log file name too long: '%s%s'; " "using stderr\n", fileprefix, filename); } else { /* We made sure that there is enough room in logfile, so can use the unlimited APIs here */ strcpy(logfile, fileprefix); strcat(logfile, filename); mxDebugPrintf_file = fopen(logfile,"ab"); if (!mxDebugPrintf_file) { /* Default to stderr in case the log file cannot be opened */ mxDebugPrintf_file = stderr; fprintf(mxDebugPrintf_file, "\n*** Failed to open log file '%s'; " "using stderr\n",logfile); } } } fprintf(mxDebugPrintf_file, "\n--- "MAL_DEBUG_LOGID" --- %s\n", ctime(&now)); } va_start(args,format); vfprintf(mxDebugPrintf_file,format,args); fflush(mxDebugPrintf_file); va_end(args); return 1; } #ifdef MAL_DEBUG # ifdef MAL_DEBUG_WITH_PYTHON /* Use the Python debug flag to enable debugging output (python -d) */ # define DPRINTF if (Py_DebugFlag) mxDebugPrintf # define IF_DEBUGGING if (Py_DebugFlag) # define DEBUGGING (Py_DebugFlag > 0) # else /* Always output debugging information */ # define DPRINTF mxDebugPrintf # define IF_DEBUGGING # define DEBUGGING (1) # endif #else # ifndef _MSC_VER /* This assumes that you are using an optimizing compiler which eliminates the resulting debug code. */ # define DPRINTF if (0) mxDebugPrintf # define IF_DEBUGGING if (0) # define DEBUGGING (0) # else /* MSVC doesn't do a good job here, so we use a different approach. */ # define DPRINTF 0 && mxDebugPrintf # define IF_DEBUGGING if (0) # define DEBUGGING (0) # endif #endif /* --- Misc ------------------------------------------------------------- */ /* The usual bunch... */ #ifndef max # define max(a,b) ((a>b)?(a):(b)) #endif #ifndef min # define min(a,b) ((a5 l = range(10); assert ifilter(c,l) == [(6, 6), (7, 7), (8, 8), (9, 9)] t = trange(10); assert ifilter(c,t) == [(6, 6), (7, 7), (8, 8), (9, 9)] c = lambda x: x>='f' s = 'abcdefghijk'; assert ifilter(c,s) == [(5, 'f'), (6, 'g'), (7, 'h'), (8, 'i'), (9, 'j'), (10, 'k')] c = lambda x: x>5 l = range(10); assert ifilter(c,l,(2,6,7)) == [(6, 6), (7, 7)] t = trange(10); assert ifilter(c,t,(7,6,2)) == [(7, 7), (6, 6)] c = lambda x: x>='f' s = 'abcdefghijk'; assert ifilter(c,s,(1,3,5,7)) == [(5, 'f'), (7, 'h')] # mapply class C: def test(self,x,y): return (x,y) o = napply(10,C,()) # create 10 objects l = map(getattr,o,('test',)*len(o)) # get test methods r = mapply(l,(1,2)) # call each of them with (1,2) assert r == ((1,2),)*10 # method_mapply l = [None] * 100000 for i in indices(l): l[i] = [] print 'for-loop:', start = time.clock() for x in l: x.append('hi') print time.clock() - start,'seconds' print 'map:', start = time.clock() map(lambda x: x.append('hi'),l) print time.clock() - start,'seconds' print 'method_mapply:', start = time.clock() method_mapply(l,'append',('hi',)) print time.clock() - start,'seconds' print 'checking...' for x,y,z in l: assert x == y == z # get l = range(10) assert get(l,2) == 2 assert get(l,20,2) == 2 # extract l = range(10) assert extract(l,(1,2,3)) == [1,2,3] assert extract(l,(1,20,30),(1,20,30)) == [1,20,30] # findattr l = [] d = {} assert findattr((l,d),'count') assert findattr((l,d),'items') # tuples a = range(1,10) b = range(2,12) c = range(3,14) assert tuples(a,b,c) == [(1, 2, 3), (2, 3, 4), (3, 4, 5), (4, 5, 6), (5, 6, 7), (6, 7, 8), (7, 8, 9), (8, 9, 10), (9, 10, 11)] assert tuples(c,b,a,b,c) == \ [(3, 2, 1, 2, 3), (4, 3, 2, 3, 4), (5, 4, 3, 4, 5), (6, 5, 4, 5, 6), (7, 6, 5, 6, 7), (8, 7, 6, 7, 8), (9, 8, 7, 8, 9), (10, 9, 8, 9, 10), (11, 10, 9, 10, 11), (12, 11, None, 11, 12), (13, None, None, None, 13)] # lists a = range(1,10) b = range(2,11) c = range(3,12) assert (a,b,c) == lists(tuples(a,b,c)) assert lists(b,c,a) == ([2, 3, 1], [3, 4, 2], [4, 5, 3], [5, 6, 4], [6, 7, 5], [7, 8, 6], [8, 9, 7], [9, 10, 8], [10, 11, 9]) assert lists(b[:3],a,c) == ([2, 1, 3], [3, 2, 4], [4, 3, 5]) # dict items = tuples(a,b) d = dict(items) assert d == {9: 10, 8: 9, 7: 8, 6: 7, 5: 6, 4: 5, 3: 4, 2: 3, 1: 2} # invdict assert invdict(d) == {10: 9, 9: 8, 8: 7, 7: 6, 6: 5, 5: 4, 4: 3, 3: 2, 2: 1} # acquire class C: baseobj = None def __init__(self,baseobj=None): self.baseobj = baseobj __getattr__ = acquire class B: a = 1 b = B() c = C(baseobj=b) assert c.a == 1 if 0: # xmap import xmap m = xmap(lambda x: 2*x, xrange(sys.maxint)) assert list(m[0:10]) == [0, 2, 4, 6, 8, 10, 12, 14, 16, 18] assert list(m[10000:10010]) == [20000, 20002, 20004, 20006, 20008, 20010, 20012, 20014, 20016, 20018] try: m[sys.maxint-1] except OverflowError: pass else: raise AssertionError,'should have received an OverflowError' # iremove l = range(10) iremove(l,(1,2,3)) assert l == [0, 4, 5, 6, 7, 8, 9] d = dict(tuples(range(10),range(1,11))) iremove(d,(1,2,3)) assert d == {9: 10, 8: 9, 7: 8, 6: 7, 5: 6, 4: 5, 0: 1} # verscmp verscmp = mx.Tools.verscmp assert verscmp('1.0','1.1') < 0 assert verscmp('1.0','1.0') == 0 assert verscmp('1.0','1.2') < 0 assert verscmp('1.1','1.0') > 0 assert verscmp('1.1a','1.0') > 0 assert verscmp('1.1a','1.0a') > 0 assert verscmp('1.0a','1.0a') == 0 assert verscmp('1.0b','1.0a') > 0 assert verscmp('1.0a','1.0b') < 0 assert verscmp('1.0a','1.0c') < 0 assert verscmp('1.0a','1.0d') < 0 assert verscmp('1.0a','1.0a.1') < 0 assert verscmp('1.0a.1','1.0a') > 0 assert verscmp('1.0a.2','1.0a') > 0 assert verscmp('1.0a','1.0.0b') < 0 assert verscmp('1.0','1.0.0b') > 0 assert verscmp('1.0alpha','1.0.0') < 0 assert verscmp('1.alpha','1.0') < 0 assert verscmp('1.2alpha','1.2') < 0 assert verscmp('1.2alpha.1','1.2.1') < 0 assert verscmp('1alpha.2.1','1.0') < 0 assert verscmp('1alpha.','1alpha') == 0 assert verscmp('1.0.0.0.0','1.0') == 0 assert verscmp('1.0.0.0.1','1.0') > 0 # interactive print 'Python is operating in %sinteractive mode' % \ ('non-' * (not mx.Tools.interactive())) print 'Works.' egenix-mx-base-3.2.7/mx/Tools/mxTools/test_safecall.py0000664000175000017500000000155010176267735022605 0ustar lemburglemburg""" Test safecall() mxTools API. """ import mxTools, os, signal def simulate_segfault(): os.kill(os.getpid(), signal.SIGSEGV) # Make sure Python catches the signal for i in range(10000): pass def real_segfault(errtype=0): mxTools.segfault(errtype) print 'Simulating programming errors ...' for i in range(5): print ' Try %i' % i try: mxTools.safecall(simulate_segfault) except RuntimeError, reason: print ' RuntimeError: %s' % reason else: print ' No RuntimeError ?!' print print 'Real world programming errors ...' for errtype in range(5): print ' Error type %i' % errtype try: mxTools.safecall(real_segfault, (errtype,)) except RuntimeError, reason: print ' RuntimeError: %s' % reason else: print ' No RuntimeError ?!' print print 'Works.' egenix-mx-base-3.2.7/mx/Tools/mxTools/xmap.c0000664000175000017500000003434707372041515020533 0ustar lemburglemburg/* xmapmodule.c - Implementation of xmap function/type by Christopher Tavares (mailto:tavares@connix.com). Version: 0.3 Based on version 0.2 contributed by Christopher Tavares. */ #include "Python.h" #include "assert.h" #include "mx.h" #include "mxTools.h" /* // Bogus sun headers don't have prototypes for printf or fprintf. // Add them */ #if defined(__STDC__) && !defined(STDC_HEADERS) int printf(const char *, ...); int fprintf(FILE *, const char *, ...); #endif #if 0 /* // This is not needed for Python 1.5. If you're running 1.4, // enable this */ /* // Bug fix: workaround for bug in PySequence_GetItem when // accessing sequences that don't have __len__ defined. // Thanks to J. Fulton. */ /* Subject: Re: Help for extending newbie From: jim@digicool.com (Jim Fulton) Newsgroups: comp.lang.python In article tavares@connix.com (Christopher Tavares) writes: Hi all! I'm working on my first C extension module (a "lazy" version of map) and I've run into a snag that I was hoping to get some advice on. You see, I'm trying to support passing class instances that have __getitem__ defined but not __len__. (For testing, I've been using the File class on page 32 of Lutz.) My Python prototype handled this just fine. However, when I call PySequence_GetItem for such a class instance, I get "AttributeError: __len__." Is there any way around this without acres of coding, or will I just have to require that sequences I work with have __len__ defined? Yipes, this is a bug in PySequence_GetItem! :-( I'll submit a fix to Guido, but in the mean time, you might want to simply include this replacement in your module: */ static PyObject * PySequence_GetItem_fix(PyObject *s, int i) { PySequenceMethods *m; int l; if(! s) { if(!PyErr_Occurred()) { PyErr_SetString(PyExc_SystemError, "null argument to internal routine"); } return NULL; } if(! ((m=s->ob_type->tp_as_sequence) && m->sq_item)) { PyErr_SetString(PyExc_AttributeError, "__getitem__"); return NULL; } if(i < 0) { if(! m->sq_length || 0 > (l=m->sq_length(s))) return NULL; i += l; } return m->sq_item(s,i); } #define PySequence_GetItem PySequence_GetItem_fix #endif /* ----------------------------------------------------- */ /* Declarations for objects of type xmaptype */ typedef struct { PyObject_HEAD /* XXXX Add your own stuff here */ PyObject *func; /* Function object */ unsigned nseqs; /* Number of sequences */ PyObject **seqs; /* List of sequences */ } xmaptobject; staticforward PyTypeObject Xmapttype; #define is_xmapobject(s) ((s)->ob_type == &Xmapttype) /* prototypes for functions we need later */ static PyObject *xmapt_item(xmaptobject *self, int i); static int xmapt_length(xmaptobject *self); static PyObject *xmapt_tolist(PyObject *self, PyObject *args); /* ---------------------------------------------------------------- */ static struct PyMethodDef xmapt_methods[] = { {"tolist", xmapt_tolist, 1}, {NULL, NULL} /* sentinel */ }; /* ---------- */ /* // "constructor" for xmap objects. This is called by the xmap.xmap // function. It is passed the argument tuple passed to xmap.xmap. // The arguments have already been validated for correct number, // types, etc. */ static xmaptobject * newxmaptobject(PyObject *args) { xmaptobject *self; PyObject **seqs; unsigned nseqs; unsigned seq; /* // Grab memory to store sequence lists. This // is done before allocating self to make cleanup // a little easier for novices like me. */ nseqs = PyObject_Length(args) - 1; assert(nseqs > 0); seqs = (PyObject **)malloc(sizeof(PyObject *) * nseqs); if(seqs == NULL) { PyErr_SetString(PyExc_MemoryError, "Could not allocate space for sequence list"); return NULL; } self = PyObject_NEW(xmaptobject, &Xmapttype); if (self == NULL) { free(seqs); return NULL; } self->func = PySequence_GetItem(args, 0); self->nseqs = nseqs; self->seqs = seqs; for(seq = 0; seq < nseqs; seq++) { seqs[seq] = PySequence_GetItem(args, seq + 1); assert(seqs[seq] != NULL); } return self; } static void xmapt_dealloc(xmaptobject *self) { unsigned seq; Py_DECREF(self->func); for(seq = 0; seq < self->nseqs; seq++) { Py_DECREF(self->seqs[seq]); } free(self->seqs); PyMem_DEL(self); } /* // standard getattr function */ static PyObject *xmapt_getattr(xmaptobject *self, char *name) { return Py_FindMethod(xmapt_methods, (PyObject *)self, name); } /* Print object to fp - print it like a tuple */ static int xmapt_print(xmaptobject *self, FILE *fp, int flags) { PyObject *element; int i = 0, printcomma = 0; fprintf(fp, "(xmap: "); do { element = xmapt_item(self, i); if(element != NULL) { if(printcomma) { fprintf(fp, ", "); } PyObject_Print(element, fp, 0); Py_DECREF(element); } i++; printcomma = 1; } while(element != NULL); fprintf(fp, ")"); if(PyErr_Occurred() == PyExc_IndexError) { PyErr_Clear(); return 0; } return -1; } /* // CUSTOM METHOD: tolist() // Calculates all the values of the mapping and returns them as a // list. Effectively the same as just doing a map. */ static PyObject *xmapt_tolist(PyObject *self, PyObject *args) { PyObject *templist, *element; int len, i; if(self == NULL || !is_xmapobject(self)) { PyErr_SetString(PyExc_SystemError, "bad self pointer to xmap tolist member"); return NULL; } if(!PyArg_ParseTuple(args, "")) { return NULL; } /* // If we have a length, we can preallocate the list. Otherwise, // we have to append to it. */ len = xmapt_length((xmaptobject *)self); if(len != -1) { templist = PyList_New(len); if(templist == NULL) { return NULL; } for(i = 0; i < len; i++) { element = xmapt_item((xmaptobject *)self, i); if(element == NULL) { goto bailout; } if(PyList_SetItem(templist, i, element) == -1) { goto bailout; } } return templist; } else { templist = PyList_New(0); if(templist == NULL) { return NULL; } for(i = 0; ; i++) { element = xmapt_item((xmaptobject *)self, i); if(element != NULL) { if(PyList_Append(templist, element) == -1) { goto bailout; } } else { if(PyErr_Occurred() == PyExc_IndexError) { PyErr_Clear(); return templist; } goto bailout; } } } bailout: assert(templist != NULL); Py_DECREF(templist); return NULL; } /* Code to handle accessing xmaptype objects as sequence objects */ /* // Len is slightly strange because we need to handle // "generator" types that may not have a length themselves. // What we do is we get the length of each of our sequences, // and if any of them fail, we return -1 (failure), otherwise // we return the longest length. */ static int xmapt_length(xmaptobject *self) { unsigned seq; int len, curlen; for(len = 0, seq = 0; seq < self->nseqs; seq++) { curlen = PyObject_Length(self->seqs[seq]); if(curlen == -1) { return -1; } if(len < curlen) { len = curlen; } } return len; } static PyObject * xmapt_concat(xmaptobject *self, PyObject *bb) { /* XXXX Return the concatenation of self and bb */ PyErr_SetString(PyExc_TypeError, "cannot concatenate xmap objects"); return NULL; } static PyObject * xmapt_repeat(xmaptobject *self, int n) { PyErr_SetString(PyExc_TypeError, "Cannot repeat xmap objects"); return NULL; } static PyObject * xmapt_item(xmaptobject *self, int i) { unsigned seq; unsigned errcount = self->nseqs; PyObject *arg_list; PyObject *item; PyObject *result; /* Create argument tuple */ arg_list = PyTuple_New(self->nseqs); if(arg_list == NULL) { return NULL; } /* Pull out items from each sequence */ for(seq = 0; seq < self->nseqs; seq++) { item = PySequence_GetItem(self->seqs[seq], i); if(item != NULL) { PyTuple_SET_ITEM(arg_list, seq, item); } else { if(PyErr_Occurred() == PyExc_IndexError) { PyErr_Clear(); Py_INCREF(Py_None); PyTuple_SET_ITEM(arg_list, seq, Py_None); errcount--; } else { Py_DECREF(arg_list); return NULL; } } } /* // If we got here and errcount == 0, we got IndexError for // every sequence. Therefore, we bail, returning IndexError. */ if(errcount == 0) { PyErr_SetString(PyExc_IndexError, "index out of range"); Py_DECREF(arg_list); return NULL; } /* // If function is None, return arg_list tuple, with one exception. // If there's only one element in the argument list, just return // that element. */ if(self->func == Py_None) { if(self->nseqs == 1) { result = PySequence_GetItem(arg_list, 0); } else { result = arg_list; Py_INCREF(result); } } else { /* // Function is NOT null, so we call it and get the result */ result = PyObject_CallObject(self->func, arg_list); } /* Clean up argument list, return result */ Py_DECREF(arg_list); return result; } /* // get slice method. We do this by grabbing the indicated slice // from each input sequence and then creating a new xmap object // with the same function. */ static PyObject * xmapt_slice(xmaptobject *self, int ilow, int ihigh) { PyObject *args; /* arguments to create new xmap object */ PyObject *slice; /* Slice of input sequence */ xmaptobject *new_xmap; /* New xmap object to be created */ unsigned int i; /* Create argument tuple */ args = PyTuple_New(self->nseqs + 1); /* func + sequences */ if(args == NULL) return NULL; Py_INCREF(self->func); PyTuple_SET_ITEM(args, 0, self->func); for(i = 0; i < self->nseqs; i++) { slice = PySequence_GetSlice(self->seqs[i], ilow, ihigh); if(slice == NULL) { Py_DECREF(args); return NULL; } PyTuple_SET_ITEM(args, i + 1, slice); } new_xmap = newxmaptobject(args); Py_DECREF(args); return (PyObject *)new_xmap; } static PySequenceMethods xmapt_as_sequence = { (inquiry)xmapt_length, /*sq_length*/ (binaryfunc)xmapt_concat, /*sq_concat*/ (intargfunc)xmapt_repeat, /*sq_repeat*/ (intargfunc)xmapt_item, /*sq_item*/ (intintargfunc)xmapt_slice, /*sq_slice*/ (intobjargproc)0, /*sq_ass_item*/ (intintobjargproc)0, /*sq_ass_slice*/ }; /* -------------------------------------------------------------- */ static char Xmapttype__doc__[] = "" ; statichere PyTypeObject Xmapttype = { PyObject_HEAD_INIT(0) /* init at startup ! */ 0, /*ob_size*/ "xmaptype", /*tp_name*/ sizeof(xmaptobject), /*tp_basicsize*/ 0, /*tp_itemsize*/ /* methods */ (destructor)xmapt_dealloc, /*tp_dealloc*/ (printfunc)xmapt_print, /*tp_print*/ (getattrfunc)xmapt_getattr, /*tp_getattr*/ (setattrfunc)0, /*tp_setattr*/ (cmpfunc)0, /*tp_compare*/ (reprfunc)0, /*tp_repr*/ 0, /*tp_as_number*/ &xmapt_as_sequence, /*tp_as_sequence*/ 0, /*tp_as_mapping*/ (hashfunc)0, /*tp_hash*/ (ternaryfunc)0, /*tp_call*/ (reprfunc)0, /*tp_str*/ /* Space for future expansion */ 0L,0L,0L,0L, Xmapttype__doc__ /* Documentation string */ }; /* End of code for xmaptype objects */ /* -------------------------------------------------------- */ static char xmap_xmap__doc__[] = "" ; /* // Verify arguments, then create a new xmap object with // the same arguments */ static PyObject * xmap_xmap(PyObject *self, PyObject *args) { PyObject *func; PyObject *seq; PyObject *result = NULL; int arg, len; /* Check we've got at least 2 arguments */ len = PyObject_Length(args); if(len < 2) { PyErr_SetString(PyExc_TypeError, "must have at least two arguments"); return NULL; } func = PySequence_GetItem(args, 0); if(func != Py_None && !PyCallable_Check(func)) { PyErr_SetString(PyExc_TypeError, "function argument must be callable"); goto done; } for(arg = 1; arg < len; arg++) { seq = PySequence_GetItem(args, arg); if(seq == NULL) { goto done; } if(!PySequence_Check(seq)) { PyErr_SetString(PyExc_TypeError, "arguments must be sequences"); Py_DECREF(seq); goto done; } Py_DECREF(seq); } /* If we're here, arguments are OK */ result = (PyObject *)newxmaptobject(args); done: /* Clean up and return whatever happened */ Py_DECREF(func); return result; } /* List of methods defined in the module */ static struct PyMethodDef xmap_methods[] = { {"xmap", (PyCFunction)xmap_xmap, METH_VARARGS, xmap_xmap__doc__}, {NULL, (PyCFunction)NULL, 0, NULL} /* sentinel */ }; /* Initialization function for the module (*must* be called initxmap) */ static char xmap_module_documentation[] = "xmap: \"Lazy\" implementation of map\n" "Xmap implements an object type that has the same relationship to map\n" "that xrange does to range. map produces a list and calculates all the\n" "values up front. xmap produces an object that generates the values\n" "as they are indexed.\n" "\nUsage:\n" "\txmap(func, seq, [seq, seq, ...])\n" "xmap object support indexing (obviously) and slicing (by forming slices of\n" "the input sequences and creating a new xmap object).\n" "\nGetting the length of an xmap object is a special case. Unlike map, xmap\n" "can handle being given a sequence that does not have a __len__ method.\n" "However, if any of the input sequences to xmap do not have __len__ defined,\n" "then the resulting xmap object will not have __len__ defined either.\n" "\nxmap objects do not support repetition or concatenation.\n" "\nxmap objects also support one method: x.tolist(). This calculates all the\n" "values and returns them as a list.\n" ; MX_EXPORT(void) initxmap(void) { PyObject *m; /* Init type objects */ PyType_Init(Xmapttype); /* Create the module and add the functions */ m = Py_InitModule4("xmap", xmap_methods, xmap_module_documentation, (PyObject*)NULL,PYTHON_API_VERSION); onError: /* Check for errors and report them */ if (PyErr_Occurred()) Py_ReportModuleInitError("xmap"); } egenix-mx-base-3.2.7/mx/Tools/COPYRIGHT0000664000175000017500000000176211552064177017247 0ustar lemburglemburg --------------------------------------------------------------------- COPYRIGHT NOTICE --------------------------------------------------------------------- Copyright (c) 1997-2000, IKDS Marc-Andre Lemburg; mailto:mal@lemburg.com Copyright (c) 2000-2011, eGenix.com Software GmbH; mailto:info@egenix.com All Rights Reserved. This software is protected by copyright and other intellectual property laws and by international treaties. It may only be used under the conditions and terms of the eGenix.com Public License Agreement. You should have received a copy of the eGenix.com Public License Agreement with this software (usually in the file LICENSE located in the package's or software's main directory). Please write to licenses@egenix.com to obtain a copy in case you should not have received a copy. egenix-mx-base-3.2.7/mx/Tools/LICENSE0000664000175000017500000001075307620177404016760 0ustar lemburglemburg________________________________________________________________________ EGENIX.COM PUBLIC LICENSE AGREEMENT VERSION 1.1.0 ________________________________________________________________________ 1. Introduction This "License Agreement" is between eGenix.com Software, Skills and Services GmbH ("eGenix.com"), having an office at Pastor-Loeh-Str. 48, D-40764 Langenfeld, Germany, and the Individual or Organization ("Licensee") accessing and otherwise using this software in source or binary form and its associated documentation ("the Software"). 2. License Subject to the terms and conditions of this eGenix.com Public License Agreement, eGenix.com hereby grants Licensee a non-exclusive, royalty-free, world-wide license to reproduce, analyze, test, perform and/or display publicly, prepare derivative works, distribute, and otherwise use the Software alone or in any derivative version, provided, however, that the eGenix.com Public License Agreement is retained in the Software, or in any derivative version of the Software prepared by Licensee. 3. NO WARRANTY eGenix.com is making the Software available to Licensee on an "AS IS" basis. SUBJECT TO ANY STATUTORY WARRANTIES WHICH CAN NOT BE EXCLUDED, EGENIX.COM MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, EGENIX.COM MAKES NO AND DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF THE SOFTWARE WILL NOT INFRINGE ANY THIRD PARTY RIGHTS. 4. LIMITATION OF LIABILITY EGENIX.COM SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF THE SOFTWARE FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS (INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF BUSINESS PROFITS, BUSINESS INTERRUPTION, LOSS OF BUSINESS INFORMATION, OR OTHER PECUNIARY LOSS) AS A RESULT OF USING, MODIFYING OR DISTRIBUTING THE SOFTWARE, OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO THE ABOVE EXCLUSION OR LIMITATION MAY NOT APPLY TO LICENSEE. 5. Termination This License Agreement will automatically terminate upon a material breach of its terms and conditions. 6. Third Party Rights Any software or documentation in source or binary form provided along with the Software that is associated with a separate license agreement is licensed to Licensee under the terms of that license agreement. This License Agreement does not apply to those portions of the Software. Copies of the third party licenses are included in the Software Distribution. 7. General Nothing in this License Agreement affects any statutory rights of consumers that cannot be waived or limited by contract. Nothing in this License Agreement shall be deemed to create any relationship of agency, partnership, or joint venture between eGenix.com and Licensee. If any provision of this License Agreement shall be unlawful, void, or for any reason unenforceable, such provision shall be modified to the extent necessary to render it enforceable without losing its intent, or, if no such modification is possible, be severed from this License Agreement and shall not affect the validity and enforceability of the remaining provisions of this License Agreement. This License Agreement shall be governed by and interpreted in all respects by the law of Germany, excluding conflict of law provisions. It shall not be governed by the United Nations Convention on Contracts for International Sale of Goods. This License Agreement does not grant permission to use eGenix.com trademarks or trade names in a trademark sense to endorse or promote products or services of Licensee, or any third party. The controlling language of this License Agreement is English. If Licensee has received a translation into another language, it has been provided for Licensee's convenience only. 8. Agreement By downloading, copying, installing or otherwise using the Software, Licensee agrees to be bound by the terms and conditions of this License Agreement. For question regarding this License Agreement, please write to: eGenix.com Software, Skills and Services GmbH Pastor-Loeh-Str. 48 D-40764 Langenfeld Germany egenix-mx-base-3.2.7/mx/Tools/Makefile.pkg0000664000175000017500000000052207003370472020157 0ustar lemburglemburgall: compile install compile: cd mxTools; \ if ! test -f Makefile; then $(MAKE) -f Makefile.pre.in boot; fi; \ $(MAKE) install: # cd mxTools; \ # $(MAKE) install echo " Nothing to be done." test: cd mxTools; \ python test.py doc: -true # Cleanup before distributing the package # distclean: cd mxTools; \ $(MAKE) distclean egenix-mx-base-3.2.7/mx/Tools/NewBuiltins.py0000664000175000017500000001030712133021462020546 0ustar lemburglemburg""" NewBuiltins - Installs (most of) the mx.Tools add-ons for Python as Python builtins or in the sys module. The installation is done upon import, so that you only need to include the line 'import mx.Tools.NewBuiltins' at the top of your script to have the add-ons available for use in the script. Copyright (c) 2000, Marc-Andre Lemburg; mailto:mal@lemburg.com Copyright (c) 2000-2013, eGenix.com Software GmbH; mailto:info@egenix.com See the documentation for further information on copyrights, or contact the author. All Rights Reserved. """ import sys,types,operator import Tools # Optional intra-package tools try: from mx.DateTime import DateTimeFrom except ImportError: DateTimeFrom = None # Enable debugging output _debug = 0 # Helper def install_objects(namespace, objects, DictType=types.DictType): """ Install all the given objects in namespace. Doesn't overwrite anything already defined in namespace. """ for obj in objects: try: name = obj.__name__ except AttributeError: try: name, obj = obj except (TypeError, ValueError): name = repr(obj) if name[:2] != '__': if namespace.has_key(name): if _debug: try: import warnings except ImportError: pass else: warnings.warn('mxTools builtin %s would overwrite existing ' 'builtin; not installed' % name, RuntimeWarning) else: namespace[name] = obj ### Note that undocumented functions may well disappear in ### future releases !!! # New APIs and objects that go into __builtins__ install_objects(__builtins__, (Tools.NotGiven, ('True', Tools.True), # already defined in Python >= 2.2.x ! ('False', Tools.False),# already defined in Python >= 2.2.x ! Tools.acquire, Tools.attrlist, Tools.count, Tools.defined, Tools.dict, # already defined in Python >= 2.2.x ! Tools.exists, Tools.extract, Tools.findattr, Tools.forall, Tools.frange, # undocumented Tools.get, Tools.ifilter, Tools.index, Tools.indices, Tools.invdict, Tools.irange, Tools.iremove, Tools.issequence, # undocumented Tools.lists, Tools.mapply, Tools.method_mapply, #Tools.mget, # old #Tools.mgetattr, # old Tools.napply, #Tools.optimization, # moved to sys Tools.projection, # undocumented Tools.range_len, Tools.reval, Tools.reverse, Tools.setdict, Tools.sign, Tools.sizeof, Tools.sortedby, # undocumented Tools.trange, #Tools.trange_len, # old Tools.truth, ('boolean', Tools.truth), # defined as bool() in Python >= 2.2.x ! Tools.tuples, #Tools.verbosity, # moved to sys #Tools.xmap, # no longer supported ('binary', buffer), ) ) # Optional additional builtins if DateTimeFrom is not None: install_objects(__builtins__, (('datetime', DateTimeFrom),)) # New APIs for the sys module install_objects(sys.__dict__, (Tools.optimization, Tools.verbosity, Tools.debugging, Tools.interactive, Tools.cur_frame, Tools.makeref, ) ) # All other APIs are available through the Tools package, e.g # Tools.docstring, etc. egenix-mx-base-3.2.7/mx/Tools/README0000664000175000017500000000021607315370437016626 0ustar lemburglemburgPlease see the documentation in the Doc/ subdirectory for further information on installation and usage. Marc-Andre Lemburg, mal@lemburg.com egenix-mx-base-3.2.7/mx/Tools/Tools.py0000664000175000017500000010272612133021463017413 0ustar lemburglemburg""" Tools - Add-ons for Python written in C for performance. Copyright (c) 2000, Marc-Andre Lemburg; mailto:mal@lemburg.com Copyright (c) 2000-2013, eGenix.com Software GmbH; mailto:info@egenix.com See the documentation for further information on copyrights, or contact the author. All Rights Reserved. """#" # Import C extensions' symbols from mxTools import * from mxTools import __version__ # Needed Python imports import operator,types,time,sys,os,re ############################################################################# # # Experimental function prototypes written in Python # def sortedby(sequence,*indices): """ sortedby(sequence,*indices) Returns a list representing the sequence sorted ascending by the fields pointed to by the additional arguments (indices). sequence must be at least two-dimensional, e.g. a list of tuples. """ if len(sequence) == 0: return [] x = apply(tuples,tuple(extract(lists(sequence),indices))+(sequence,)) x.sort() return map(get,x,(-1,)*len(x)) def projection(sequence,*indices): """ projection(sequence,*indices) Experimental function that extracts columns from tables (sequence of sequences). If only one index is given, a list of all elements in that dimension is returned. For more indices, the list will contain tuples with entries for each given dimension. """ if len(sequence) == 0: return [] if len(indices) == 1: return lists(sequence)[indices[0]] else: return tuples(extract(lists(sequence),indices)) def frange(x,y,ticks): """frange(x,y,ticks) Returns a list of ticks equidistant floating point values from the interval [x,y] such that the first is equal to x and the last equal to y. """ l = [x] * ticks fticks = float(ticks-1) diff = y - x for i,value in irange(l): l[i] = value + diff*(i/fticks) return l def issequence(obj, isSequenceType=operator.isSequenceType, InstanceType=types.InstanceType): """issequence(obj) Returns 1 iff obj defines the sequence protocol, o otherwise. For instances at least __getitem__ must be defined. """ rc = isSequenceType(obj) if rc and type(obj) == InstanceType: rc = hasattr(obj,'__getitem__') return rc def defined(name): """ defined(name) Return 1/0 depending on whether name is a defined symbol in the caller's namespace. """ frame = sys.cur_frame(1) # Look up the symbol name ok = frame.f_locals.has_key(name) or \ frame.f_globals.has_key(name) or \ frame.f_builtins.has_key(name) del frame return ok def acqchain(obj): """ acqchain(obj) Returns a list of object representing the acquisition chain that the new builtin acquire() would scan. The order is top to bottom, with obj always being the last entry in the list. """ l = [] append = l.append while obj: append(obj) obj = obj.baseobj l.reverse() return l # Truth constants True = (1==1) False = (1==0) def reval(codestring,locals=None, eval=eval): """ Restricted execution eval(). After a suggestion by Tim Peters on comp.lang.python. locals can be given as local namespace to use when evaluating the codestring. """ if locals is not None: return eval(codestring,{'__builtins__':{}},locals) else: return eval(codestring,{'__builtins__':{}}) def docstring(): """ Returns the doc string of the calling function. Note that this only works for Python functions since it relies on the code object of the calling function. """ return cur_frame(1).f_code.co_consts[0] # Aliases for some of the APIs nonzero = truth # XXX This should probably be moved to mx.TextTools... _hexcode = ("00", "01", "02", "03", "04", "05", "06", "07", "08", "09", "0a", "0b", "0c", "0d", "0e", "0f", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "1a", "1b", "1c", "1d", "1e", "1f", "20", "21", "22", "23", "24", "25", "26", "27", "28", "29", "2a", "2b", "2c", "2d", "2e", "2f", "30", "31", "32", "33", "34", "35", "36", "37", "38", "39", "3a", "3b", "3c", "3d", "3e", "3f", "40", "41", "42", "43", "44", "45", "46", "47", "48", "49", "4a", "4b", "4c", "4d", "4e", "4f", "50", "51", "52", "53", "54", "55", "56", "57", "58", "59", "5a", "5b", "5c", "5d", "5e", "5f", "60", "61", "62", "63", "64", "65", "66", "67", "68", "69", "6a", "6b", "6c", "6d", "6e", "6f", "70", "71", "72", "73", "74", "75", "76", "77", "78", "79", "7a", "7b", "7c", "7d", "7e", "7f", "80", "81", "82", "83", "84", "85", "86", "87", "88", "89", "8a", "8b", "8c", "8d", "8e", "8f", "90", "91", "92", "93", "94", "95", "96", "97", "98", "99", "9a", "9b", "9c", "9d", "9e", "9f", "a0", "a1", "a2", "a3", "a4", "a5", "a6", "a7", "a8", "a9", "aa", "ab", "ac", "ad", "ae", "af", "b0", "b1", "b2", "b3", "b4", "b5", "b6", "b7", "b8", "b9", "ba", "bb", "bc", "bd", "be", "bf", "c0", "c1", "c2", "c3", "c4", "c5", "c6", "c7", "c8", "c9", "ca", "cb", "cc", "cd", "ce", "cf", "d0", "d1", "d2", "d3", "d4", "d5", "d6", "d7", "d8", "d9", "da", "db", "dc", "dd", "de", "df", "e0", "e1", "e2", "e3", "e4", "e5", "e6", "e7", "e8", "e9", "ea", "eb", "ec", "ed", "ee", "ef", "f0", "f1", "f2", "f3", "f4", "f5", "f6", "f7", "f8", "f9", "fa", "fb", "fc", "fd", "fe", "ff") def hexencode(data, hexcode=_hexcode,ord=ord): """ HEX encode a data string. Encoding is done character per character using two byte lower-case HEX characters. """ l = [] append = l.append for c in data: append(hexcode[ord(c)]) return ''.join(l) ############################################################################# # # Utilities written in Python # def scanfiles(files, dir=None, levels=0, filefilter=None, filedict=None,join=os.path.join,isdir=os.path.isdir, listdir=os.listdir): """ Build a list of filenames starting with the filenames and directories given in files. The filenames in are made absolute relative to dir. dir defaults to the current working directory if not given. If levels is greater than 0, directories in the files list are recursed into up the given number of levels. If filefilter is given, as re match object, then all filenames (the absolute names) are matched against it. Filenames which do not match the criteria are removed from the list. Note that directories are not included in the resulting list. All filenames are non-directories. """ if not files: return files # Make file names absolute and eliminate duplicates if dir is None: dir = os.getcwd() if filedict is None: filedict = {} recursing = 0 else: recursing = 1 dirs = [] for file in files: abspath = join(dir, file) if isdir(abspath): dirs.append(abspath) elif filefilter is not None and \ filefilter.match(abspath) is None: continue else: filedict[abspath] = 1 # Recurse into subdirs if levels > 0: for dir in dirs: scanfiles(listdir(dir), dir, levels+1, filefilter, filedict) # Fast path: don't return file list inside recursion if not recursing: return filedict.keys() class DictScan: """ Forward iterator for Python dictionaries. Note that no precaution is taken to insure that the dictionary is not modified in between calls to the __getitem__ method. It is the user's responsibility to ensure that the dictionary is neither modified, nor changed in size, since this would result in skipping entries or double occurance of items in the scan. The iterator inherits all methods from the underlying dictionary for convenience. """ def __init__(self,dictionary): self.dictionary = dictionary self.position = 0 def reset(self): """ Resets the iterator to its initial position. """ self.position = 0 def __getitem__(self,index, dictscan=dictscan): """ "for x in iterator" interface. Note: for loops are cancelled by raising an IndexError. """ # This may raise an IndexError which we *don't* catch # on purpose k,v,self.position = dictscan(self.dictionary,self.position) return k,v def __getattr__(self,name, getattr=getattr): """ Inherit all other methods from the underlying dictionary. """ return getattr(self.dictionary,name) # Alias DictItems = DictScan _integerRE = re.compile('\s*(-?\d+)\s*$') _integerRangeRE = re.compile('\s*(-?\d+)\s*-\s*(-?\d+)\s*$') def srange(s, integer=_integerRE, integerRange=_integerRangeRE): """ Converts a textual representation of integer numbers and ranges to a Python list. Supported formats: 2,3,4,2-10,-1 - -3, 5 - -2 Values are appended to the created list in the order specified in the string. """ l = [] append = l.append for entry in s.split(','): m = integer.match(entry) if m: append(int(m.groups()[0])) continue m = integerRange.match(entry) if m: start,end = map(int,m.groups()) l[len(l):] = range(start,end+1) return l def fqhostname(hostname=None, ip=None): """ Tries to return the fully qualified (hostname, ip) for the given hostname. If hostname is None, the default name of the local host is chosen. ip then defaults to '127.0.0.1' if not given. The function modifies the input data according to what it finds using the socket module. If that doesn't work the input data is returned unchanged. """ try: import socket except ImportError: if hostname is None: hostname = os.environ.get('HOSTNAME',None) if ip is None: ip = '127.0.0.1' return hostname, ip try: if hostname is None: if ip is None: ip = '127.0.0.1' hostname = socket.gethostname() ip = socket.gethostbyname(hostname) hostname = socket.gethostbyaddr(ip)[0] except socket.error: pass return hostname,ip def splitdomain(hostname=None): """ Tries to determine the domain name of the given hostname and returns a tuple (host, domain). If hostname is not given, the default name of the local host is chosen as reference. """ hostname, ip = fqhostname(hostname) l = hostname.split('.', 1) if len(l) == 1: return (hostname, '') return tuple(l) def username(default=''): """ Return the user name of the user running the current process. If no user name can be determined, default is returned. """ import getpass try: return getpass.getuser() except: return default ###################################################################### # # Old lib/Tools.py module... # # XXX Some of these functions are obsolete. # def tb_lineno(tb): """ Calculate the correct line number of the traceback given in tb (even with -O on) """ c = tb.tb_frame.f_code tab = c.co_lnotab line = c.co_firstlineno stopat = tb.tb_lasti addr = 0 for i in range(0,len(tab),2): addr = addr + ord(tab[i]) if addr > stopat: break line = line + ord(tab[i+1]) return line def execpyc(filename,globals=None,locals=None): """ Execute a byte compiled file filename in globals, locals """ import marshal f = open(filename,'rb') f.read(8) # skip header (id check omitted) code = marshal.load(f) exec code in globals,locals def loadpyc(filename): """ Load the code from a byte compiled file filename and return it as code object. """ import marshal f = open(filename,'rb') f.read(8) # skip header (id check omitted) return marshal.load(f) def import_code(name,code): """ Imports a code object as module name. Returns the previously registered module in case the module name was already imported. name has to be the full package name (pkg.pkg.mod) for the module; package local names are not supported and will result in top-level modules to be created. """ import imp,sys if sys.modules.has_key(name): return sys.modules[name] m = imp.new_module(name) exec code in m.__dict__ sys.modules[name] = m return m def pairs2tuples(tab): """ Format a sequence of adjacent pairs into a list of 2-tuples, e.g. 'abcdef' gives [('a','b'),('c','d'), ('e','f')] """ l = map( None, tab[:-1], tab[1:], (1,0)*(len(tab)/2) ) l = filter( lambda x:x[2], l) l = map( lambda x:x[:2], l) return l def exec_frame(level=0, exc_info=sys.exc_info): """ Return the execution frame level positions up the execution stack (defaulting to the current frame). WARNING: Storing the frame in variables will cause circular references which could result in the frames and associated objects to live forever. """ try: 1/0 except: frame = exc_info()[2].tb_frame.f_back if level: for i in trange(level): frame = frame.f_back return frame def freeze(classobj): """ Add all known attributes of base classes to classobj's attribute dictionary - does not overwrite attributes """ dict = classobj.__dict__ if dict.has_key('__frozen__'): return # This won't overwrite anything, but still update the class # dictionary in place (frozen() returns a dictionary that includes # dict's entries among others): dict.update(frozen(classobj)) dict['__frozen__'] = 1 # XXX How to optimize unnecessary failing lookups in baseclasses ? def frozen(classobj): """ Return a dictionary that contains all known attributes of classobj - uses cached versions if available """ dict = {} for c in reverse(classobj.__bases__): otherdict = c.__dict__ if not otherdict.has_key('__frozen__'): frozendict = frozen(c) else: frozendict = otherdict dict.update(frozendict) dict.update(classobj.__dict__) return dict def attributes(obj,of_class=None, d=None): """ Find all attributes that are accessible through obj and return them as dictionary. If of_class is given, only those attributes are returned that are instances of that class. The function mimics the inheritance scheme used by Python. """ if d is None: d = {} # First the class attributes classobj = getattr(obj,'__class__',None) if classobj is not None: class_attributes(classobj,of_class,d) # Then the instance attributes if of_class is not None: for k,v in obj.__dict__.items(): if isinstance(v,of_class): d[k] = v else: d.update(obj.__dict__) return d def class_attributes(classobj,of_class=None, d=None): """ Find all attributes that are accessible through classobj and return them as dictionary. If of_class is given, only those attributes are returned that are instances of that class. The function mimics the inheritance scheme used by Python. """ if d is None: d = {} # First the base classes bases = getattr(classobj,'__bases__',None) if bases is not None: for b in reverse(bases): class_attributes(b,of_class,d) # Then the class itself if of_class is not None: for k,v in classobj.__dict__.items(): if isinstance(v,of_class): d[k] = v else: d.update(classobj.__dict__) return d def inst_attributes(obj,of_class=None): """ Find all instance attributes of obj that are instances of of_class and return them as dictionary. """ d = {} if of_class: for k,v in obj.__dict__.items(): if isinstance(v,of_class): d[k] = v else: d.update(obj.__dict__) return d def localize(instance): """ Add all known attributes of the instance's class and direct base classes to its attribute dictionary, binding methods if necessary - only one level deep - does not overwrite attributes *WARNING:* this function introduces lots of circular references (one for each method) !!! Be sure to clear instance.__dict__ before unscoping instance !!! """ classobj = instance.__class__ classes = (classobj,) + classobj.__bases__ dict = instance.__dict__ for c in classes: for a in c.__dict__.keys(): if not dict.has_key(a): dict[a] = getattr(instance,a) def localized(instance): """ Add all known attributes of the instance's class and direct base classes to a dictionary, binding methods if necessary, and return it. - only one level deep *WARNING:* this function introduces lots of circular references !!! Be sure to clear the returned dictionars before unscoping it !!! """ classobj = instance.__class__ classes = (classobj,) + classobj.__bases__ dict = instance.__dict__.copy() for c in classes: for a in c.__dict__.keys(): if not dict.has_key(a): dict[a] = getattr(instance,a) return dict def ascii2int(str, base=10, int=int): """ Convert a string to an integer. Works like int() except that in case of an error no exception raised but 0 is returned; this makes it useful in conjunction with map(). """ try: return int(str, base) except: return 0 def str2time(x, time=time,ascii2int=ascii2int): """ Convert a textual representation of date/time into an internal time.time() value using some assumptions on abbreviations. - returns negative numbers to indictate errors - knows about DST (makes small errors near the time of switching) - centuries can be omitted: 0-69 becomes 20xx, 70-99 19xx Known formats: - 1.1.90, 01.01.90, 1.1.1990 (date only, time defaults to 0:00:00) - 1.1. (current year is appended, 0:00:00) - 1.1.90 14:00 - 14:00 (today is used as date) """ now = time.localtime(time.time()) ti = now[3:5] da = now[0:3] try: x = x.split() if len(x) == 0: return -3 d = x[0].split('.') t = x[-1].split(':') if len(t) > 1: # Date and time if len(t) < 2: return -1 ti = map(ascii2int,t) if len(ti) == 2: ti.append(0) elif len(ti) > 3: ti = ti[:3] ti = tuple(ti) else: # No time given, presume 0:00:00 ti = (0,0,0) if len(d) > 1: # Date given if len(d) != 3: return -2 d.reverse() da = tuple([int(value) for value in d]) if da[0] == 0: # Year is missing da = (now[0],) + da[1:3] elif da[0] < 100: # Century is missing (note: this is bad !) if da[0] < 70: # XXX da = (2000+da[0],) + da[1:3] else: da = (1900+da[0],) + da[1:3] if 1 == len(d) == len(t): return -3 try: tm = time.mktime(da+ti+(0,0,0)) except: #sys.stderr.write('Wrong date: %s was converted to %s'%(x,`da+ti+(0,0,0,0)`)) return -4 if time.localtime(tm)[8] == 1: # DST is on, adjust time tm = tm - 3600 return tm except: return -9 def filecontent(filename,default=''): """ Return the file's content as a string, default in case there's an error """ try: f = open(filename,'rb') except IOError: return default c = f.read() f.close() return c def long2str(x): """ Convert long integer x to a bytes string. """ l = ( x & 0xff, (x >> 8) & 0xff, (x >> 16) & 0xff, (x >> 24) & 0xff) return ''.join([chr(x) for x in l]) ### Hack to enable module finalization class ModuleFinalization: def __init__(self,function): self.fini = function def __del__(self): self.fini() # example: #def _cleanup(): # print 'away we go...' #_fini = ModuleFinalization(_cleanup) def func_info(level=1): """ func_info() Returns a tuple (name,filename) giving the name of the calling function (*) and the filename where it is defined. Note that this only works if the calling function is a Python function or method (because only these create new execution frames). When called from e.g. a builtin function like map(), it will return information about the function from where the builtin function was called. (*) level indicates how far up the calling stack to look for the information. Default is one level meaning: the calling function. """ try: 1/0 except: frame = sys.exc_info()[2].tb_frame for i in trange(level): frame = frame.f_back name = frame.f_code.co_name filename = frame.f_code.co_filename del frame # you never know... return (name,filename) def func_sig(func): """func_sig(func) Returns the signature of a Python function/method as string. Keyword initializers are also shown using repr(). Representations longer than 100 bytes are truncated. XXX Anonymous argument ((a,b,c)=(1,2,3)) are not supported and probably never will be since they require disassembling the byte code which is bound to fail once byte code optimizers find their way into every Pythoneers home... """ if hasattr(func,'im_func'): # func is a method func = func.im_func code = func.func_code fname = code.co_name callargs = code.co_argcount # XXX Uses hard coded values taken from Include/compile.h args = list(code.co_varnames[:callargs]) if func.func_defaults: i = len(args) - len(func.func_defaults) for default in func.func_defaults: try: r = repr(default) except: r = '' if len(r) > 100: r = r[:100] + '...' arg = args[i] if arg[0] == '.': # anonymous arguments arg = '(...)' args[i] = '%s=%s' % (arg,r) i = i + 1 if code.co_flags & 0x0004: # CO_VARARGS args.append('*'+code.co_varnames[callargs]) callargs = callargs + 1 if code.co_flags & 0x0008: # CO_VARKEYWORDS args.append('**'+code.co_varnames[callargs]) callargs = callargs + 1 return '%s(%s)' % (fname,', '.join(args)) def func_call(level=1): """ func_call() Returns a string explaining which parameters where passed to the calling function (*) and from which file and line number it was invoked. Same comments as for func_info(). Note that line number information is only correct when running Python in non-optimized mode (i.e. without -O). Sample return string: 'test(a=1, b=2, c=3, args=()) # called from "Tools.py":353' (*) level indicates how far up the calling stack to look for the information. Default is one level meaning: the calling function. """ try: 1/0 except: frame = sys.exc_info()[2].tb_frame for i in trange(level): frame = frame.f_back #import hack; hack.show(frame,5) code = frame.f_code fname = code.co_name l = [] callargs = code.co_argcount # XXX Uses hard coded values taken from Include/compile.h if code.co_flags & 0x0004: # CO_VARARGS callargs = callargs + 1 if code.co_flags & 0x0008: # CO_VARKEYWORDS callargs = callargs + 1 for v in code.co_varnames[:callargs]: try: r = repr(frame.f_locals[v]) except: r = '' if len(r) > 100: r = r[:100] + '...' l.append('%s=%s' % (v,r)) if frame.f_back: where = '# called from "%s":%i' % \ (frame.f_back.f_code.co_filename,frame.f_back.f_lineno) else: where = '# called from ' del frame,code # you never know... return '%s(%s) %s' % (fname,', '.join(l), where) def localize_builtins(): """ Copy all builtins to the caller's locals. This is done in a non-overwriting fashion. """ try: 1/0 except: frame = sys.exc_info()[2].tb_frame.f_back builtins = frame.f_builtins locals = frame.f_locals for k,v in builtins.items(): if not locals.has_key(k): locals[k] = v del frame,builtins,locals # better safe than sorry _basemethod_cache = {} def basemethod(object,method=None, cache = _basemethod_cache,InstanceType=types.InstanceType, ClassType=types.ClassType): """ Return the unbound method that is defined *after* method in the inheritance order of object with the same name as method (usually called base method or overridden method). object can be an instance, class or bound method. method, if given, may be a bound or unbound method. If it is not given, object must be bound method. Note: Unbound methods must be called with an instance as first argument. The function uses a cache to speed up processing. Changes done to the class structure after the first hit will not be noticed by the function. XXX Rewrite in C to increase performance. """ if method is None: method = object object = method.im_self defclass = method.im_class name = method.__name__ if type(object) is InstanceType: objclass = object.__class__ elif type(object) is ClassType: objclass = object else: objclass = object.im_class # Check cache cacheentry = (objclass, name) basemethod = cache.get(cacheentry, None) if basemethod is not None: if not issubclass(objclass, basemethod.im_class): if __debug__: sys.stderr.write( 'basemethod(%s, %s): cached version (%s) mismatch: ' '%s !-> %s\n' % (object, method, basemethod, objclass, basemethod.im_class)) else: return basemethod # Find defining class path = [objclass] while 1: if not path: raise AttributeError,method c = path[0] del path[0] if c.__bases__: # Prepend bases of the class path[0:0] = list(c.__bases__) if c is defclass: # Found (first occurance of) defining class in inheritance # graph break # Scan rest of path for the next occurance of a method with the # same name while 1: if not path: raise AttributeError,name c = path[0] basemethod = getattr(c, name, None) if basemethod is not None: # Found; store in cache and return cache[cacheentry] = basemethod return basemethod del path[0] raise AttributeError,'method %s' % name def lookup_path(classobj): """ Return a list representing the lookup path taken by getattr() whenever an attribute from classobj is requested. The path consists of all class objects passed during lookup in the right order. """ path = [classobj] for i,c in reverse(irange(path)): if c.__bases__: l = [] for bc in c.__bases__: l[len(l):] = lookup_path(bc) path[i+1:i+1] = l return path hexcode = tuple('0123456789abcdefghijklmnopqrstuvwxyz') code64 = tuple('ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' '0123456789+/') code256 = tuple(map(chr,range(256))) def base(x,b,code=hexcode, # Locals: divmod=divmod): """ Return a string representation of integer x in base b. Uses code as encoding table (defaults to an extended HEX table). """ if x == 0: return '0' l = [] append = l.append while x > 0: x,y = divmod(x,b) append(code[y]) l.reverse() return ''.join(l) def filedate(path, stat=os.stat): """ Return the modification date/time as DateTime instance. Needs mxDateTime to be installed. """ from mx import DateTime return DateTime.localtime(stat(path)[8]) def filesize(path, stat=os.stat): """ Return the file size in bytes """ return stat(path)[6] def abspath(path, expandvars=os.path.expandvars,expanduser=os.path.expanduser, join=os.path.join,getcwd=os.getcwd): """ Return the corresponding absolute path for path. path is expanded in the usual shell ways before joining it with the current working directory. """ try: path = expandvars(path) except AttributeError: pass try: path = expanduser(path) except AttributeError: pass return join(getcwd(),path) def _addlinebreaks(data, column, linebreak='\012'): """ Break data into multiple lines at column. Uses linebreak as end-of-line indicator (defaults to LF). """ from cStringIO import StringIO infile = StringIO(data) outfile = StringIO() read = infile.read write = outfile.write chunk = read(column) while chunk: write(chunk) write(linebreak) chunk = read(column) return outfile.getvalue() def _uu_encode(data, filename='', mode=0666): from cStringIO import StringIO from binascii import b2a_uu infile = StringIO(data) outfile = StringIO() read = infile.read write = outfile.write # Encode write('begin %o %s\n' % (mode & 0777, filename)) chunk = read(45) while chunk: write(b2a_uu(chunk)) chunk = read(45) write(' \nend\n') return outfile.getvalue() def _uu_decode(data): from cStringIO import StringIO from binascii import a2b_uu infile = StringIO(input) outfile = StringIO() readline = infile.readline write = outfile.write # Find start of encoded data while 1: s = readline() #print '...',s, if not s: raise ValueError, 'Missing "begin" line in input data' if s[:5] == 'begin': break # Decode while 1: s = readline() if not s or \ s == 'end\n': break try: data = a2b_uu(s) except binascii.Error, v: # Workaround for broken uuencoders by /Fredrik Lundh nbytes = (((ord(s[0])-32) & 63) * 4 + 5) / 3 data = a2b_uu(s[:nbytes]) #sys.stderr.write("Warning: %s\n" % str(v)) write(data) if not s: raise ValueError, 'Truncated input data' return outfile.getvalue() def encodedata(data, encoding): """ Encode data using the given encoding. Possible values for encoding include: 'base64' - BASE 64 encoding 'hex' - HEX encoding (no line breaks) 'hexlines' - HEX encoding (with CR line breaks) In Python 2.0 and up, encoding may also be an encoding supported natively by Python via the codec registry. """ encoding = encoding.lower() if encoding == 'base64': import base64 return base64.encodestring(data) elif encoding == 'hex' or \ encoding == 'hexlines': from mx.TextTools import str2hex result = str2hex(data) if encoding == 'hexlines': return _addlinebreaks(result, 72) return result else: # This works in Python >=2.0 only try: return data.encode(encoding) except AttributeError: raise ValueError, 'unknown encoding "%s"' % encoding def decodedata(data, encoding): """ Decode data using the given encoding. Possible values for encoding include: 'base64' - BASE 64 encoding 'hex' - HEX encoding (no line breaks) 'hexlines' - HEX encoding (with CR line breaks) In Python 2.0 and up, encoding may also be an encoding supported natively by Python via the codec registry. """ encoding = encoding.lower() if encoding == 'base64': import base64 return base64.decodestring(data) elif encoding == 'hex' or \ encoding == 'hexlines': from mx.TextTools import hex2str # Remove whitespace l = data.split() data = ''.join(l) # Decode return hex2str(data) else: # This works in Python >=2.0 only try: from codecs import lookup except ImportError: raise ValueError, 'unknown encoding "%s"' % encoding else: decode = lookup(encoding)[1] return decode(data) egenix-mx-base-3.2.7/mx/Tools/__init__.py0000664000175000017500000000112012133021463020034 0ustar lemburglemburg""" Tools - A collection of new builtins and misc. helpers for Python Copyright (c) 2000, Marc-Andre Lemburg; mailto:mal@lemburg.com Copyright (c) 2000-2013, eGenix.com Software GmbH; mailto:info@egenix.com See the documentation for further information on copyrights, or contact the author. All Rights Reserved. """ from Tools import * from Tools import __version__ # For backward-compatibility: auto-install the add-ons: ### You can control automatic installation with this if-statement. ### Replace the 1 with 0 to disable automatic install. if 1: import NewBuiltins egenix-mx-base-3.2.7/mx/UID/0000755000175000017500000000000012251446113015254 5ustar lemburglemburgegenix-mx-base-3.2.7/mx/UID/Doc/0000755000175000017500000000000012251446113015761 5ustar lemburglemburgegenix-mx-base-3.2.7/mx/UID/Doc/mxUID.pdf0000664000175000017500000142652712133273272017470 0ustar lemburglemburg%PDF-1.4 % 413 0 obj << /Linearized 1 /O 417 /H [ 1517 589 ] /L 404823 /E 278079 /N 15 /T 396444 >> endobj xref 413 24 0000000016 00000 n 0000000849 00000 n 0000001204 00000 n 0000001358 00000 n 0000002106 00000 n 0000002496 00000 n 0000002526 00000 n 0000003156 00000 n 0000003197 00000 n 0000003439 00000 n 0000004567 00000 n 0000004590 00000 n 0000005065 00000 n 0000005309 00000 n 0000005541 00000 n 0000005747 00000 n 0000020542 00000 n 0000032291 00000 n 0000035386 00000 n 0000035593 00000 n 0000035672 00000 n 0000038351 00000 n 0000001517 00000 n 0000002084 00000 n trailer << /Size 437 /Info 408 0 R /Encrypt 415 0 R /Root 414 0 R /Prev 396433 /ID[<5c90cd977e8f8b978da063958c20402b>] >> startxref 0 %%EOF 414 0 obj << /Type /Catalog /Pages 411 0 R /Metadata 409 0 R /Outlines 85 0 R /OpenAction [ 417 0 R /XYZ null null null ] /PageMode /UseNone /PageLabels 407 0 R /StructTreeRoot 416 0 R /PieceInfo << /MarkedPDF << /LastModified (QMu {v/&m)>> >> /LastModified (QMu {v/&m) /MarkInfo << /Marked true /LetterspaceFlags 0 >> >> endobj 415 0 obj << /Filter /Standard /R 3 /O (WЏ X_7!_ֵb{J.4@K@) /U (\rМV=G) /P -12 /V 2 /Length 128 >> endobj 416 0 obj << /Type /StructTreeRoot /RoleMap 95 0 R /ClassMap 98 0 R /K [ 294 0 R 295 0 R 296 0 R ] /ParentTree 336 0 R /ParentTreeNextKey 17 >> endobj 435 0 obj << /S 338 /T 453 /O 512 /L 528 /C 544 /Filter /FlateDecode /Length 436 0 R >> stream c\%j$M|&v&[ECU*Gv`TP7I/4D t5Ok9,IjS~d.dz>&1%v;JЉ 0?nBdHsmg5װŷ?5j2Ǜ|6Y n@N6DX(%{"vEiLO1D%ߜ#M[ PTwk#Lx?\>J綵lHQUrO9=+1D/Aʞ$\ Pc%OP1H1u ߍ@GYN#jP3tq*EV1V)2kFuI:|-3r}%oJ|J endstream endobj 436 0 obj 452 endobj 417 0 obj << /Type /Page /Parent 410 0 R /Resources << /ColorSpace << /CS2 420 0 R /CS3 418 0 R >> /XObject << /Im1 434 0 R >> /ExtGState << /GS2 432 0 R /GS3 431 0 R >> /Font << /TT3 419 0 R /TT4 424 0 R /TT5 427 0 R >> /ProcSet [ /PDF /Text /ImageC ] >> /Contents 422 0 R /Thumb 373 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 0 >> endobj 418 0 obj /DeviceGray endobj 419 0 obj << /Type /Font /Subtype /TrueType /FirstChar 32 /LastChar 169 /Widths [ 274 0 278 0 0 0 714 144 329 329 0 833 274 329 274 281 549 549 549 549 549 549 549 549 549 549 326 326 0 0 0 0 0 604 587 669 764 502 491 734 759 282 282 602 461 905 741 821 539 821 574 512 530 743 625 958 541 519 606 0 0 0 0 0 0 474 556 472 556 498 291 503 556 250 250 500 250 854 552 552 556 556 356 434 311 552 479 766 463 486 475 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 833 ] /Encoding /WinAnsiEncoding /BaseFont /MKJGEH+ZapfHumanist601BT-Demi /FontDescriptor 421 0 R >> endobj 420 0 obj [ /ICCBased 433 0 R ] endobj 421 0 obj << /Type /FontDescriptor /Ascent 962 /CapHeight 687 /Descent -272 /Flags 32 /FontBBox [ -167 -273 1106 963 ] /FontName /MKJGEH+ZapfHumanist601BT-Demi /ItalicAngle 0 /StemV 94.019 /XHeight 0 /FontFile2 428 0 R >> endobj 422 0 obj << /Filter /FlateDecode /Length 423 0 R >> stream Nv;r <!JWExѦ[^|uV<`j-d@7#{7JLX }F6|l!'ҾPZZG/r3􀵪|4 ӪtEB*/|ig; kܱ|yAfF] "AG:H*S--^}BQ: {DzT9,f brJ6֔b RՆU(X7{=_p9C=D&o!k88ސ HBJŗ2d,EwѰshռ[ݛP_Q'~WbOڀʣe`Q!)Ua٨*>&jM}=;ҾduRD̽';9!m1Os|b|N>@;4;nvRDޟ. ao4$Bk̖./ʖKL#Nh VȔCLna6Q[½`,FҔX-9ڎ nK-q_K 0(=&SBz\XX?+px8"q󺇾yӒ>&/G_2.#y]H\ 'aLЩ'cExHZö#Yf_Rœpit`(4ҫ1DkrU9Vv.iT,օ<=l{\`IC ^@eL]DT1f&]ɯ Np8#>zu/?sդ5Cja)`5?vy͈ . endstream endobj 423 0 obj 1048 endobj 424 0 obj << /Type /Font /Subtype /TrueType /FirstChar 32 /LastChar 121 /Widths [ 274 0 0 0 0 0 0 0 0 0 0 0 0 0 274 0 0 549 549 549 549 549 549 549 549 0 0 0 0 0 0 0 0 608 597 660 757 515 502 743 0 329 0 0 476 891 740 828 587 0 613 544 549 731 0 971 573 547 0 0 0 0 0 0 0 516 0 484 604 535 0 514 593 291 0 0 299 891 593 567 0 0 382 427 338 592 0 0 472 478 ] /Encoding /WinAnsiEncoding /BaseFont /MKJGDD+ZapfHumanist601BT-Ultra /FontDescriptor 425 0 R >> endobj 425 0 obj << /Type /FontDescriptor /Ascent 961 /CapHeight 687 /Descent -284 /Flags 32 /FontBBox [ -167 -284 1186 962 ] /FontName /MKJGDD+ZapfHumanist601BT-Ultra /ItalicAngle 0 /StemV 166.043 /XHeight 0 /FontFile2 429 0 R >> endobj 426 0 obj << /Type /FontDescriptor /Ascent 951 /CapHeight 0 /Descent -273 /Flags 96 /FontBBox [ -220 -274 1143 951 ] /FontName /MKJGEF+ZapfHumanist601BT-UltraItalic /ItalicAngle -15 /StemV 0 /FontFile2 430 0 R >> endobj 427 0 obj << /Type /Font /Subtype /TrueType /FirstChar 32 /LastChar 32 /Widths [ 274 ] /Encoding /WinAnsiEncoding /BaseFont /MKJGEF+ZapfHumanist601BT-UltraItalic /FontDescriptor 426 0 R >> endobj 428 0 obj << /Filter /FlateDecode /Length 14702 /Length1 21592 >> stream &} K8GlIP; ѱjCos!JdFf-aiSДp ©/-[nj5qa鵡D]ykEՕE֘H2k<ϹT)3|@?tNãxva 'K&b ǗXCfa+P<.Y"8nq֗_C׫0G?5ci߳ȅR8{n[ ^6Qlm-P:Ԓ8ZWybC3E&`53V^mwCE\)=%vQ2`))4<~lKc>~h\j*fv/hI_NfI/cd xr(&<2sTh/\)4g#)I038@z(w[p\L捆|*qdZ6SrV%8ֽḃh/WL!(V(N/înҒ jyd2>[&C`s6Iң_ŗSM303L@6@!tO}ѓSGVqL]&Օa/Cl xpԜ4AFcEQbqD\nܡ'>dm S?m k:ok^>;L/u k:Wp}CY%i^碀35qh t?ʿ`BEQvr܂\lKF?:!s8jwf.~-}NLl?>A-$9?o_m "nJq8lE:,JrZ.͒, ا}"3AbBC{u8>pNu'_b ,Af'4v'@Y@P Cavr쉌RY8/jl;Y@gur0Nf`?pVwSZxǩ jwLyo@gz[(L'{8&Q8SgOb<)l.tj"/GJ!A.r] $G!@\ćan%"&ԞE22޾I;8'FihfM;cyu!iXzV(<+Z'}}*EwO1xWKeJLZڤm\ME:gR 靪%3] 6~{ڿ|xdhb}݇Ё$ W!PAoFJݘ{%!ZZBd#K67- |猗m۹ fT:~'&24tC0vWEP&sҭ.&e!(e4f`h5urR=JbܴܯfgZo@"CI R}&<gltPQbQH$R+ _ɲ3_ʫ ^' ӥ~.ؚsI4zsX\Jkq?q3w)H4r1r;ۥ\,L Z2Z~<I #6NئC.V: ¨<Sf͊~24;9%<ֿz0YX6;p{5X{6XQaE3P03ܖK0rV| u51x$pqP5VP|V8#Q=z2vSHYT>3\&w@%7v 6m}mG+]AjxQw ˴4w#FV5:Bg0NʆLO;@IB%4xí)+u0x 2v' @)Tc * 1>2*g P.>HGČ;i`g( yaTz-ΒkOh/&'. =+<"h'QdG0Ԃxv%")VLѴ"ahnzR0YƢ9u-#O1b s{K ͛AǺG=AWݖמfUIF0N0)VmE] PT>/`3cC$l`䗀 \/=2A-lsӘˉ~Ѳw]g?v{4['3uO?@ZhPgVGe{&99x#VjpEJ9kơf51(q!ᴑq 50b`pE"ޠQ%oL٢TSWx,ȝ@BcBKl]D:Lˇl^ p^4,[**5R\׬΀@R e\_,B[~5%]qd=mk /1W+&MXX*2ji8-BŒ!3bkBt!l{:IB-5gs1Oz]3?E!#A86 8zH(Ӱ=[V/YơCq(nvQ* |ؾX)ќ*G.{8|w`8I7L߫zg /U/P*y^RRrΩъyO9oQ::v8ZƪeD,,eVD6bJWzp'Ir(r61B{mVK8oW'kY|JV^bb&14X~9t ; Bqy~肦Pɱ$j4( T E?bo9RyJ Ȱk@>l0!"%ٜp~pcDRB^p ZΫ \`~.qFZMUڬ ZVÕwV<3,˒H'=9 =!<(0z; K`k[s݅> eFSPg?m`D3qcڔDk=^8Lr㹒⮒X:z<ʅNt"8>hssNV1ԯ&!2 ZPAFDxv)dFM[bC(P:Wud⤟jArwq>!Y%S)ӓ" ;31hqD 4ֳ9K՚h4iF1 ]>u'ڻZtFw.+ɨD9/.elhrOH D_[ P3;%S.}lݦAX \Nh.Ѣhbl%X1J ΗYO@E$LB0Ar>#KhBt阭@‚ хrAz5$0buT+ՓntY8vr8#0-nFLi1NK3 P1a^E6 &U>qU3pri- ċ.aK0R5 gO GČH5I<* z>[th_]s &b y¡׺,H8?JmG6+Ꭰ||TqR)ˢ| ״+/O'VH՘r$!zZ1Y4/&UaudQs<]:Riy{РLr j/ *0W1P9I|o˩ p~MQ?mxG$⁲O.۝ }bXƃ&B}hp\ $#JzEa8Yom%t;?UރQR$O5#pqWCkdvm0~s&Up$ݽ'C3˿V1[kwnwGY O2r;GO=}SSw2_<r8"{ɌSO,hnu b`KSEVd֢(yD5 RF.fIuw}^K2LsI5&-\hmd\Rqįq&-WDfSsU 8E KF5nv_Ωo3 ֜J`m^ )g[Y-͊ Q 6ǟ1/$_uΥһ9mbθsQ1h7Ll\Ν~5J ꉸW?T~F{S~;sU^ϫt{+Cߥa1ɶuߜS͉/܍$q(FԦC{Js83 |byַ.?0 &vÛ@:@Bt7!XqӊI梋@P2 hrجyn̎AG4eɃלsO11xܐKž /Vx(h^ˊ<A!'唛1SXoD셡q'aDn\kN<~?$wOIMQî!ZCB4<9o|9% 7pjg[66r?l=Ÿ9L_\U5Ҁ$˲w,%LX2wы{4Q-h?/pwR-#cxs# 6_Ri_Q|IH,7{0?㢑⤅,Z1&&TsE጑ĐE"xXYk OwoEf6u + LRF%=N'54tpT0&0pGs8/}:s1)w"8?s(f}yf;WعBX`1HC2 n"o3|$G`g*(yT~,׬/qATVHrv Y|'yq[;7 q#X& *80ޙbV0*F Q(hz)ٱ$X[99B I38#a#"9w#[d1.ΡBFV\FCt4OҜ[0H]o'dׂħ+9淈A g4 !fl]J 45]\-J0KH_7%K3C~FwÌh,,$8bZcOXMWv*TR扒{aAk3A,'2j&[$FÑ06O!pΘ `;;8˰ LQ'T,(?64?)hL.Fs#L\ UEL`c/W 0QHsGBJ"cX4Ok +0nDcXC 8p4q@iVQ3r,DT½_)8Tp9ki1>qNr$0UI$iJ l:bnlca1P'SJy.I$A~8[fր[9ʀw:kĦihs2w0fšBL/"u}X[2w]fIu?7.Y}/DGW,gݩgfJC&_`/W?uA+'VEcw~U. 'JBWX`*Uxg6DUV/mF`y_~VҌTBTJ yA(8yԺlѴ˲/ e+eTc> Kmw"22S߉zLRKtS$ >w $v؟DK!Ox+KOғԐU2s+x]fHlJ1 ^Ma`q$ :)IW)]^?+Cyfew(,SxO}X H _ű^ao5Jze_ݫqt Z?+]%\h`]/"ΔAlcs/,qS^J9zrqVm[YxxӎD|/z¯Ão^SP3VڳGZ(5GX݀H[WK\T8j.NVL?aKbJ-Ƴ"NqϮ~&Z:)PZ,QxmuySQрB= H_+nˤKB-|uO$VYPrEmY9$EzŮ'%o5a~:"ټK| #FC<1s[mPfv&Qh]}&Aip1SY xqn݂`.ZA o { de1uvuPJ uRxN2n%i/3rzS:xqe"qBfUΏDF8_+ama] @Q0R0?_ɲ]u"bػJ5Sp84Zi&9Ok10 Ai5`7jCd'Hg^p-S/aeۑTsB=7oߘҦ]e]@b>7LL8XZe:1 .FR5֗ *ܥz/J4}G?w8$L@,n<<𽵥WQ!d]}YTWC ͵&aYČ 3>nmJeZxوM͝[xf!۷T C숏ŐɸFUzS|ҿ˳Q)O<6J,N֝-2po}^:13n~hY>v^j~WJ%AH+F0=x$ՁZ$=FrW.j{xDz -j/}M0 x¿r=v6Jn&ȿ{fcɾevb :iJ0 ,o 4穅D(PwvwFvڷsVȐ~ a/d0`xZ͜JZLȊ7#<(>+wfD =Kʷ,z#WO33Bʰn6-/N҅SS"rK</Qqo5K7MDqf^k. igrN_O m)5EȰ8-+% !ɮ/gHV>#b?-y%e21fțla `4pI'wp匩=V;?}1jtþT8'E!Z.>_jDYr$SKFITaT#fkL[{Ћ (G@&VTf?sE5µ\;>g*趆 Q%-+?v#|m] Ow#jYv:o:ZA?zE ʥpVƧg1U H&&_~i>ړ6t*-J5^&?MRE:}Hk牕#Xx^noJ 5Y*OMk^k˶ckbzqHyAYY{ȽlPdL x%DF(CI3M٥Nqg0 &XUً!.G)+}myN2V#כe\ʔ|rc6QL`|M't*~G)dY)X!2"/(~Eb̆\sNLJ.0QGHF$&$ ׄU Z_*p從usANܾ7~!w935Gg2j^̮ 0s~.3~~RfȐfUяpdQ7  rwQrXH:f Zbh?9L%۰h5,,faMͯ %'ZU( 8! %!BPH=X/t UhklMيF׸C1r`-~5˟0Tͅ*F=0exo: #/gF5x+豀np~R|͜+l3H>>0ޛ{}>fC7:I3HOGg‰2q"(Z'~}u*.n:H`q?@2c3A _"Xr߇pϟF~c5攎 l/vAOkR4MHL^B]6!'jhu*]w1ʋ)PGMGO¢d,?Gl.],f}iU$2gO4#ōsnԚtSAnjٵې8pyʎzh}'Skd2v- .Ob_6}}r{*pQ/3=ևC$ LxSh|RN8mpsc=&1>cD0hzb(Bi/K ʵ(hV #⫙B\:WS&M@)<{iʮ0QQͺ 6fNmf4WC^gh?*s}XkZIhGCi)6•ؽJQAF%);‡ /HtVKGaƒڏpF.Ht"t}rFPFcȠLNT#O?%UAGlEVm!]#5݌H4/x iOL%9&MW``9*T b'\x1-@i#3'T[˲4B{`BJ/-vlLF gS(ϽH>cHf)Ƌ p,zJO-!dHE:Mn9Q$ sI1 ~}BߏgwR1 XoěI]+1sӔafc~˒;BO߁-~F ~cK(M vD_gNÎYc|">pdb{XXUUaq)ѝ gBgLC)n<) alu`{20ɶ{],#4׉[c_P dbJ@% 0e q<\ux$?9xJy_&:Y 4v^jTtR1u1yNƥ~lQMOM&Oo1MѸA8c?ߌ5iɛ:;w}LTfɇ`G\oT)>K~%aЙJuݓ:m럫oPbVm/Tc ̟l h&\pjo opPajW@9g?$X/ v:V5<)݇iǪs| zܯ?W0-MEŦ dpf8)O+:W ɻT. kXcݤ2Fӽb'L\1hCP5^ƟG`@F #0MІZ3K85NEv8ƆiJ3PI6Q)w?=v$N1.f^Бx\&;W5n98"%#6xzc=Ï E endstream endobj 429 0 obj << /Filter /FlateDecode /Length 11656 /Length1 17956 >> stream u ю*p%-6d^F ^ESe\߬X*.@S@]^M=ʳ}- Lz{^\$jYXcy(c[MpC>?>cUtmPDI0#<bnSG '<_* 5b7|ٓ9Hot!>-q"D:-;{R.-qPL-_ib ˧ (A>LbD*Qޭe>c=J R*.7d}ALRL}GQGEjkdVa#Z2P_+a LG/{ui,6#\i_:Ե-|=m nB y&,}dâqfh2d2 zF\ f,ZZD9Tɹ+0T%dQ ަ^j-} 4!9Au I{Rd~Gb?w %B/.ȲGUUcF5 _{VlۗQgcNɕ^(j`OH7gܻ_*0A6:^kA_D,[.0z߹[N"+j jgym) L˲(-̔r0x_d>8eG眕#`&-ʮt'gӍ4|Gv? &X&VV& PՆ୷xhU׹ƒ>i{O~ /x6P9'.+,p\'-: f14wң"Y>qz.5u(7 (Ys0l0aL&2oPfǘR¡Ca.ytV0,Bè>Fߎ@֢2HK=!Sv«D 6_g$Sj뚚wYQ{A tߖ'?mDF6.Ch2_WWn&~ XN[nhvy+ǂԗMsDrh#֊kCߏA[:gu-·5~]ntzjaX@tUuk?I::%ܹ. O~^7xfIAWg3Rl$Sf׌75k1ep emr 5A #(XAQiU㚻,}"m`&3lz4;4"5^_(3Y=bFtfWy}opU?"kӰٞcG* }dq>)rυYc`6WTS-:qct#?Pt2P,_az"u(C?EYmsL7xk رlJV( 7 w=yuj@w&ĘQ%2<6kf\>,MjbE+ɗmlj==/i>mRnģr0yۋڎw!B2_g`76BVpj#cD8̭%!>5P"t]K5 UXHePc|C63 ՠ0p륰 DT+#}뢁~"} \]ꝈuAzђK(чb N(M~}p}M~I<~I?AxRȕ+ 8zvݙIkGPJI2+~,eF4(,THECӫ}\|W';3Zi\$(O?U[@շ02)3uÇn9aWSN\+*uK>i;pTRN%H( 㴥ʞ-HeDs7$3PLiO90"[E}BdXh$1ژ̀ǹ'#ҁvdDZdĐ0\V⏞ڷ]V. rϣN9+T1"3pl 'eڵvF{?6cJp?}69nHWp@'X#[qZ̓G>":O~v&~&b+Nvʅh <ӡBWʄpY e-.pshh1Q*9Z RPIH)O 1ClPjy;Бw1r+%ljsĈ!uMY\o~}#τ厙\ }nR"uD7&cw3(\Xob^?5oEP&zcyG X6I⹇l6m?_ q=Y3 EqGzL&(Bk‘[ >C(1K3`]QnHhq+u?}!YtϞ(K*r48\v_vaE59}oM>c UqCb1ɘ]X7ʥp\]&DV6FB(Slٟvᬤ<<]C'iq*8 &z)B+ö9򕡏/js |(py|?A~rYmn!= ТY0/h`37qםyNWK#㸽$eQ(0J\M`4# WI_B8 73}8,lUk(2$k^=뛌 ܰR!켢1ܝ#]ubA_7VpH,a gn.q'}ysIi$N1wӠY&"%]P HKh^-fZRv{7&#XHb*Fm G?HfvKX$`W!sWWhk.C8kbعdI<z!pvd቙ WecA!'+.u69h1罝+"%d3:0`FFuP7NB)J{H#6b"xl]_##U^dg5GZmjOLG"q߿`} c=xNgCZuw_fMoi;̬vHUKڌh>/c3 Յž)&H7jR]\:GYVGO"8 48U+UF]|mPQak Zb,@Teҵr,k K4@k+'R N k^)JO➞s >;C)#g4,E/ټC)tHBی~,v$j#);+^5- %J}-+隷 pnvVOZ<!~X*m7ECbA쥈E$p _rZt*9x%(_[jXOdzpx~WxSϟHwJ H<+YP]`~sYN V uY=^GOayRLPx h$ F~>,`_]Enm4'xg1/ZvI#/O~PyLy(JaL؀k1nHqzv,<@xbVHQ,]J=t]]i9e9kU%Bƫ&ѝxGfmR=.K){Qz"(b>gB[65y:Ư-C6ͿY"Y7E.*?8x-D-2 !PĘ̬)}~Öcy)LņhĶMkxjI- 2D2E3qʁ;PvUz+Ǻ8%_:X2p:nkǿ"@f}y>-TW/=Nd͇Wh:LҦGck f dDd!>*5٥,dElD3aq~UMUJ!Bc`v[HY^r~KlAb63S}^r0z=~?7f֙+V .*}dӧ>a?"[&MOwPo#  fv+e DMe)Es9<v{Ht6Zc3IDHuu{ H&_Ԅw<[;RߢCVycqPT!p6Gl>}Fe Qwf~VYC+=ȽÐ uDXFKyNO=/Y]6q\ȋw|2*4E_3 Ӭ0- |[[K V} 8|ih5Δ]wC8ˆ6%=ՋTވ jˏ<6l Ji6P %l1bTT}$񠐷z󠿶qW2ٔZl歪KP^)v*1b:K ڡvZlE0XSXґ9 W!XGVSd^w5R_nwKgSTt̞a W`r_ ё C(&P&2xքt22+XGy5ɾc0fl:eY~-NtKLl| \pMmd2oE\ax]#\l?-R&5@ BeS(_48=T5Wfe@i6v żL[dyTWYF,K{r산AcT4i:5d>ֱ77y,<0P'M)AℂF˯J_!W~mS$JoȍӍ/Q)ϋ kITr]Hylg,7lj6I!ߐub َ:oJvdĐI3ܡ"f~䩬9+S0#q_z%b&p`xMZe!318 ]vt^ZBq|CWc U}es AάSH΀Fye7CbQY,fv̺Q]&b]i=7΅{H"|ܞHL>_syXc uuk5FA- Q6Wcw_EtRnL L(&T5|pwj!SNW48=>-&k]RJfA ]\@Z3Oj&b0$10׀x_rߨmV._{I"]حpާ UZ#ϑo0v]bSE ό\م .捓!C֋R9"»zlq6t$A45UV{Lk|y#.-;N2\7C`݆~ v;H> G9Gddz/~`ij)'t Y @mաru=[N7;z KN1Hao*rC#`V䪥,9åy;^p1Šh ŵ<2 3~$Bpn^5>_9>'j9< /B-jt݀tc$UkxqD&ⱷQlq$C u9[e[}B=MrOfEj-?0;?܉إė"xSY($cҹ|~z"Ɖ;&~E5Ep1:ER3y"xW9n=ɼxT..B͖i~8bpqu'q7\ K07;GqB"Boڨ7@s*NFǸ˟r_jp H~M|qֺuǍ\NdUsp?]9 t6ceD,v RUbd}2 qښQ# \$,ϒS~@]JUV۠L{\3?ɋ[mk&owb\&Ħr},*|g9$Mjx-q(&F)e&-!;V %{{AC94 2ODe^\X$%fګ1)~:/3ڄF+L *@fWȍv3o{@aHh $z!hy`TKACvƁ/*ұYYt12"6.4GEax( I6nx-.- ώ‘=Y[ta2 }d[f15y]XT5wAu7NzG]7jTH [aLKY+xm:5/۳?ۖ8'Hi:R&jj ./\ X]9TÓOZZџ:)wܸ)WNgbj#~2l]p/mٙԘzڔD+S[pix: Jeh7Sx*. endstream endobj 430 0 obj << /Filter /FlateDecode /Length 3004 /Length1 6364 >> stream 8a;=-r.]' EUMW=Nk(jL ( wM}e=5ؗ6dƌfl]^<b |C`Yb~5l|{f''Vad,8'o|'6ZkïΕF0+`8FISX[U74ESwH 4&׌M̎yߏm0)"pF]tAsm##6iK 8UB_[7HŞCʉzod2}dޚT1  vemHM Ɩ?ܾo"ˡUB*T-k3xOٕTv)䟭ci`HpAtT;ƉiȉN{'pcV*,t\!q~Kf7M+̪-Br/Oe,}\POt똁sҔ*ʉݘzɿ<_giM 1lv@EyU !^v=;b>x7l[^d*g@,øD.S$ 2iҁP +N{zY1œrXó%6Ҁ0jQɶQvyM'o-FMϦt|ӏyeDzށh4CB )̞.\ic| LY| 4Q')>,N5~{H=ӡÏ&n/yLB`FŔ]sSvuoK`ה"icS[D4݀2_P\6&BڸNR .FB;zӣMWb!H*lv4mk)dOfKw=߬Wj&'/:uA(iuPP.t(x9tb8yH3r(g 0{CEf#v> r AUNڤڰ7(B'F؆j[SyYT)GH-E.ɶ1'qOn䄌;n`'~Um.oSFך`#vlj.5r!N8)a۾z5~GS7ࣁbJ2!s|XZ)C#ܛi[V;_' ` }$'D9 LZJ{Z}50Ђ WP 37>RW/s ]0 V_uK=5X0`WOJ;YWsKq+ޯnW v\mnΈX?YmxQ&t6QPM /i+RE`pp/6/U"3\71Qb.nY!~h*HHuR*K'ǷGJBXf HO5~xoj᪰I]QJr "}A$w e6*r+c _x:O[fb?H*,4= 8m =lu* KE;_f6o50@,Gg:Eէ:4(`_=i%K] PFT2:pwn> ΠȓpH6[״IʻOrɺ]r=[5!CEF-LtRNxEǤɌ y}cH8L_ ˥ft fr h4h1 MjVU0$qkW}{ϕ 7j"ZT2`ȝARȅ4$ٝs@$< (U>?iyS{6H.F @%xC | Sjg;0B. S"P{B~mŢDN3<Xj@.S4Z> endobj 432 0 obj << /Type /ExtGState /SA false /SM 0.02 /TR2 /Default >> endobj 433 0 obj << /N 3 /Alternate /DeviceRGB /Length 2575 /Filter /FlateDecode >> stream cy}WK Bn|l,Q5Dʰͱxdk8~^BZ(<+ڐZ!gLw]Iލޱ;zQbf=?撏Ms ta }_¶V09SRJrπA1[$/q Po;aoܔЋCD ~ {4/ UCY]dG'հn;6/{Ȱd8j#0Q"i h[:6`£oiB”?FVM '\se=PiC=To7$MrͣnnX8ΖZꕭ>uOOeϥރfq 0_!fRt5?.V0:6SXTSH$0eƻ tqGݠ ƀ_^$t}@"9?haJCƌe+n1QrY4`6f'Ӣ.] F.9K!†peNjN|N LxF1Z8L|)Ghr\yض}\}N.0S`x"䲑(qǾ+]2}ueVYU^+lMݖFw7<񆳴Cʦ5db~w`3YPE<&wVۖBV*ճkzg3LN|ԑDC C)ט I乸BVCOlEh盇|硸VK(}3#!م JO,H_UՏwbZ\ps,gMKd `RBI4CFb$m~L϶?'H#/W:sz62_"({iC?rBAXX%ќ85>ldwiKoYS-+d  ^W0 wu),.|͑dE|H7 gF '%}9 ~G#*,(Ęv!jUE`F=4T~O$O@saqBg.!CiR1ru`tyUBCZk(07=VD20+N`T(e4gM}:Zrژ9Wk (:Ji?..I\5Ug[zm̨'Q1t(aEGw ˚8-n#YyǍd ةo^8 \|/dLz +9.(#4צwmY.=0'K:@҂_n/M*T+UOIv14oC'ZNRþטLT3{ƍ^k`Dۄewqhe*fvlU4?j-) $. 糹HnVcsə:c[ݛiS";+4HO!ETt/aZ5qԫWBꝪBmPqFPVsʜ ꀤ} 1ʭ!$p?W򈩩þ"?d]3(hQ][KKY2~$:'$AJfW5l;ԉjOj\@w [:z,.RF_Cf$Ndi9-E\ ;(uYzs3ǹ\ zz0NX^9s} >CuZquݯ,3١WR7`(91$ЎJ6Ũ[^i]*% "r>eL~γ瓋4BN/\Sav_?cY y ytXSEdR'h)x$rcf3!lI-sX7 ȸ5O9=QkHs]r 8Io]xd2гY5ϡyݼӮf>Z \t^b:tH7g ڨIYqS<i"2C}8@kH ~C"F= "'$U]Sq?lLdu)]X\H4*:MEAL[l<ssJj޽:_QH'Nlc3$AW|֚{b6I{uaنZ:Ƴ+uDdڙC2* b-WLI ~m7Dq:~h.;7LJ#94q~BblJ/~5<DŽAfᅤ;e  i.zǃ PUį9|ʪ/Z0)=J"su^}<#un:yb0!<S`u)$[hQ(e#fm*5i:KϿq@H0=,KO*-*o-½#ckfo~w P)p#%ɺa (\@hzPߩc:\pLL:v , endstream endobj 434 0 obj << /Type /XObject /Subtype /Image /Width 2218 /Height 3227 /BitsPerComponent 8 /ColorSpace 420 0 R /Length 239218 /Filter /DCTDecode >> stream b8c2T&N6Czߍ4լ8QI&֡Gu%  7w@v(IJ=1ϰc7ga 7d8UdrF_LyO: UdSĆD Q;6.}{M0N)luh2I]_ \NFHIQґ\P679%&!X iP,`̨&#mJ?@0,  Ab~]mOj34^`!_ HnM9֣/ d܋eO#bbIp3IiKG%QzPY4Ǐ6eB^ fYg=1PZyūK 888\Fz+)SJk/7%)ᅃ:zヲ8U! }azsBFE/ncߡ>4!f)C^,_*6lGo4IY 9Qb_rlB5,ݪ]4p&,wN|ÌsCz-nzC BBgz넋,`=z#$5EPa3.]"0+$mF3<,#k"9#;7 c 0 vO&MD:`IYv!yjO|L<'j" ?>cLY-io=Xn l̯bM]b_Yz.2 qyj񯒝/y3R0yhkJ3*k\ym&v5VBPfҷl/ n;FqnR1,ǔ >c*+V8%,FSn MJZѾ kJ.d_Wӻ@s Û#۱ucC2} y׀Z着{K迯I f 1cHvK~9{6$@Ҽ?dA ;Ll`i:GKH#JŏdD-:쎥(ćޒ! k?4WEx˪PP썄P^d&Ip0X'͠sɛ(BIötD5\}__"(efuk8zAG3T@, B+Ux4xs=6&N FC?0 .gDtLyE*4tUChU?{4ӓ:v L{F@5(cqM/|N?@?2:Ҡ._OI`4*ic>Q %}\=Ș Ut;G^h Os )a$n3 |ꙛwLI$ v6Yo=əה#jtՙ``[.D?L \o_Rt:m6D%D95wNPjn$'24̾dDѼ/"A2+|0[VAd3MLZЁ%J(ɤ&GvxDž % &zRò*VǴto}\(h@Q1pgl?^#|LW}N/MG5mG4d1 Pp8򊔭fIHB}3蠮zI7 /ߜ[GLE4ߕ4s\賬L皵M]WNQcguڔ2LrI6u.93+?dXҹ0h^@pmeV]7>aJ(_@z;k\Fښidf6䌇\+V94e 7Xo@U$q|Մ6T˕gbߤy(X@z?8%؉.GCtذTm̰P)t@II,lOrz7-$K'}w!>hikz^LS$Lr8<<VMokLRc& 8!lT lIܩ33vh/8( Q+ap/ا|@$/u%LB=[|1ݻBh("G>2`>9;/0 Jj:TsRhTZ,*tzFO"\佰`:fAK1(#/TO7@ 3Hw I%\~X#جaj=h:KoG tRwG5-.^YfC!-6m `F0h:ltF<Ӯ€귩< w#TUiHˇ2mxy0~M/F8Bz%/'Ǟ?Y绳V5hoo L;ս8WmJ<1rVHO.'?,>b1'>줔+VH|Γ^* qZɇl.`'y0 ,|-P+~¶G b/L8O=t@]ZP8ukGם~coY >݇EyBW 3Rd\+"=DvEA.v ߦC)/:ÿsr4\Y9 .yg~h[1TFs[ |J !7鈞du 18T[EN{.f{_Luo&L`j]U {Zd9;R6]9mǡ2q-V "<e%f/f׉,o~cy`8 xAnqPA?Es']GW<:9~l#$/{ps 1 7Jx rvw+~SfS1TR^RE$ 3+ViAGO{k):tF .!-|QѹQmdI,zy(N'AZ|v Hûa#৒[?9Z3IVS/|SLSn%7XcDp>她,FjgbQv%;&/AY(2~HSΧ6 7.ζ;{PhTT]]o#DX=:GF#PguPh|0_ E)Z~-*TasKXqYlڴ#QDQ5 <κ"Ւ?6<2]9~SݨӝˊE\F;mΆzFl3HSƂ1Ӷ{4f]ׅw,B;V,gr X Ԟ2>H|G,}Z>؜Q=Xj@8r6EbeԒ5+$Hbͨ'Gl nYG;̭%[YpgZ(]5$ɫ&/M0^^qvH^Lq+ 1=tC%srC3waCR-jŀ/p/3^פrUtQ oz{ś T[?{.s;:ON(@f׆E\Ag I>tt+FBHYwCB̫y#9}/ ',*%=9OLrQC"zI~6Vj`YĞdهh-S`m􋞌Q. w"O_m14G^ۮ\;]cu@& +܅bML_ؕVy#2eSZ7Gc'vs#0Y=I7D Oa$;>J{zMRsqCik5 _MCI'&e^3hz}N(?Ā9^] .pYcڑԥ/,P*d_*>ul3 dfZwWh`voFL|h'N9X WRCx \q=L黵,K+oG5ԑR3VPr[#0׽P3[HW/o}d'+_6iAk?M7V=pdGV Xcez%Qe]*۩e+05HÁlNꓤ>́UoV%?2 D7x} ๦3! ч & IYϱ&灡y!G)\Kojx%Kx2Ὠ/eTYW 4nOf],IpvT3U8"9JwH)Kf Иb$>-ϕ O*K b} 9\f<`ٙTIWdh[r,S`Nɟ(ZnjO94L%Ny(fz!P *U8M!zjsy=x֬|G"?z.P"D-Z[}*#"65RR{W[ 37HU15諓K1:7x e`ȍlKR?;&RhlRg٤gr uvN7. [wwωhQ !pr!QhB+EnQ:}~\%l%J8?MҟH\& H DF鴯w;lG&ȶ$Xu;JEYN "KVK1j"J%Z?i=.=[P|㈿u(U͋2YD#d_>]˷ Mz:9V,!Ihu@M:`$Y̜nNI9Wb8;x]wۓ}͂Vr\p?c3L/x^2𓂱Ţφ76[%%kj0 ^Ɲ/~l&ycA b%Uw_UL =2wQ~u&@,6z.Dl@o Yz-"LEavҍцc && \D5$c r*Z Ǩl׼oa}3KeԽh dj'2t("ǢQBC`Fkxm2+Lj9Nhi~]Q"YiI] d+|R(ƨy(uX4E[{ &!߿)U@E+ϘXPdG蒅y`'4~B sj9Q"[K4 M^AF}<3Kt8GW~Hl:$ZkԀ |0$AFY"{-F4^Ju'u(jY}!%<9  um?ކE]w$]t9 eN!` |.4u2gW/ڟ5si× "f_ݕlv|'A4 Ԙ/c\$D0Ox|%$^Ҹ(3$)b#YoybP2TB\saygN [}]/C31`];&*+>X2rd/6`.Rq^^ LGM58˘K'zpO}9QhYI`$lL-"mۤ3QC~֪R`DM+T7RTLEwޥ<^!΃ܙb?tBm@8D:Zc++"ވn "H nGJ9hCȬ@J(ziP 3*$# ahHp.h<¹(ovtܛ;{i).8ykQz{'g>SAfw^(v= _F>ppqWvAl֛gGĎQz:}eQz#j`x=tpQt>iPl q[md3|'j0>7^q|*pwg*Bt`nC悅`K[:%kz:u Ux v!z[ڶ5b:c6֒)aЈ.2&N<{ox_b,lg<}F$Z T<FaI$6Y 4qj8l&q ha,-Lw0IULll10wzɻy³TQq,UTǤ,ק]X%p-(~ymC`wvYl .s/8[O9œs:@idTDGȜ=l}tB^~ZkGoeWJU!euv6߳B͑ثaШ5U[=z L2!˒(UE3M7h.:sVk=`SlYxM\eL_@8RSKIW˘Y˄-Ҙpu 5sRҽti|3x-P?$ZkV~1XkKd{ IjvDDmb*Zsp%!J_z@&&osD EHuvvy. I&R!:yw)`?_dxw6ÊfρnO^<@5.ou|lw=oO.߱`揋Ө6 6 rETQ}6jwƤFHhސ(J-Hh[Ԣ#e /&Q9h=M41}% ANF,c:s[FŮ< &,+shVx TP{lIܕ3B3=Z֋AleQ(.JZ| BbԺ0W{s_/]`$+o,v_`<*-LɎS3djk!`ycW//S-^m̢+[q.+^pҳָ\N7lM@X[ oc9ecJbV qMG -Wf%.-e֝|?w۾vX oZɩ;أ R^ӳ7^l] 5q|j*wd*{85q[x|\%E8?,;{s׺"==$pҾ31M2X\+rh׹owkpOJo| >fσPDގ7V=JsP g)< ^fĦcқ}|oOQEՊ38*3z% `hZwŴ.iV /Բun/'oe-F@=w~mԉ|`_ 'QO*Ǒg5 QWmЛ#߇ryD!c6Ϗ` \>5tDb'(_qv?R[gr ǎE)f&8hr7p{e8FBZ(M5AhvNiǥzތ0CZʺj 1s[)ͼ+}$kGRz+a+TU+ٚ2F2o^ 0?|="% i("ƨp¦}fl6pY¬$lS|[ C+#ZGk۷~j- lU[;,e+|( Pa;F΂ N61b-7K`ZĠ)5ghhn1gl31y/%MTW,& ݚ[*b- #M6}o?/Oݲ:r(UɄjjחT6 d3x}d`\vN+o!/c۔:29=]^ⷐ)͐_IP8Lu #k^Z}ylwW'Z>TĀ=8|QslCӺ/% } eqOsc)!L-YVzM "Vkۨ_`;zK\7 sPxv2a|ȄUevOvo1{ JZy{(XKVJ!#'{z6ae>}LIޜքRĭLe+Ϝ{H꼃3)Rrk ?_3Z`8Br%*%4Ț}>iN"ER#vMD4MgKBNڼmj)/*J1$_aQS$E| CxΫK CO{"H$6s-fvM%FT=2 q)/Z5 fȹ<}8R$fsǿ+:\5eYZTͲg33ޮD<,)h̥ZX~uЁ{<_Wd%Ef(j3'uQ e&WѴB!wN`J+ HӊQ k~5GȻZ^i·P9-=|1ӹ_F65ՠj$[l&ɜ7di*.0h5J~M@8{4C>aQMQ3U>K$Вǔ NjP ?hd; Z?S_v"PeW` td7$9Q./֯ERZ,6O AzjX@؏z_VΙ}kӨ%5ُns 7Hk<_xog箶m~=AlN{1E2ĥ47*!9(^cr(XYJoˆ>2&*2tiwӚdE@0}$-]ĸB3%%b27Em{Fh\7qQ&\XQ*n#[XҜvR|I,RM?ҙ*)Xx:7Nuk˞ֈPXaxP]\TRԖۥ* /'CwL*+.#Z֞6b)+L,? qł<="J:)=Va7F.ĮFCARe2&%\ZʟF}RN]-,9*v_Ƭ_O%7ኀ #Ev&*,VbRhKזĀ5{t3 ,hS?L-6{yeP2ෂ0B*QgcPBߍ^_̆cjg[7<Y BZz8$0ⴡ_]eV]P#f6$V:]H˒aٱ/բMO:b/ά]/T 6~ O,UA6£Ri{SD^ "jcIHA$jw,\JR!“ "_#+:jgdSVbx7U˦!0 elT!0!\ )dXx2#i. / jj"D=:4ƺa0qǦ#[9x?r4nofu^M~WBݭeϐv oJ1`uRl !ay XeCjUs;IV]_c9f]afqt}.w5ze8[c˕av #pmG|ܧ-k?fW3gl!6h7],*s.o3@6F.1D_` \BY-gIܳ'f-+nޡtIjf GIZ.UF_V&=H{ݠuIL{2pݶLm#.-k窝XfhŰvͅDY.S(Ims `A12ǡf#PHtF9Gf?.8gnЏEr0AӋyK`]sdc^3q@ 6 P/=ef= :D$;rYO2':.Ary39o o%~iԯrְ ܭ41)Th1tst~hOߒmHҟL`a=%`s{hoբ}Q/2zҳycWdH7|չP q6P$'"o?~GrΫ6!C]ÈQD~wfv< SL6BN/b &p6ħ >Dwl';nw>Ç[YL+؄&t{$zN槊Jzg{:(RЋ :'*mAJ^2tTBdH&ܢԚyB'p4dX sj71NM.3j"gMJ΄ޞ k+^[4i?Dg?oӰKwS(M+)Anl01*<} D2Bõ _:0Y6kk;s wߋP@PVi'Qx"Srsa-?B^Uh  er_oN[ {/u)NcU8h =MkTf r/4Ir70b1Xו[|IV+QJKW0J zXa#. ;kd<όlL.˪M'4q/ ڃ;i:M4s ,Hf%D~ljbHc(HbthYꢻSE{#t lQ˟d(y-𳀠)ʷ0S YOVp`Mn!pe> )IyA#|9iB54JےqFoo+MP/}D\/'mc:';.̈́K[\+N!!AEh}q/pٔ QREBXzPn[E.1 PY6t05' a;2[b 3JAZ@W<tv=Rws%P'L B,ksgRUXq4wRT*kaY@ZN:5_i D\DžjU/F6c;܋IZpe#f.*Xz[3`_‚XC-DmmI!F0_,b Th#J} o"8Os! `8%:}DTty؍Bd) >W!O-NgtyMՀRFakG3KT A5[Je^g0B?ف=4jE15E`U_vtD88U<:yeXϳLyTQ6Zup_P- vne:Ewe%xOҥb  |0en1B#x^ 1g_7N< b.ZquG[ 9c X!iAS!5X) #:q$az8><"_Dgᖰ|!Dik N֛N+nt@ Bt4m-wıJ ?Air^t5$ÏK9< 9 9syh]ϰ;ܾN 0}x_h<{|p)nYFh`)z)>-+>_K[2!%يJ <)ukऔ[9u=bœst( 0Ģ:Hx K=]ڙbEmġs T?i A4oj%ozwB/3WFɹJ> uk 6]6d,Pr2,r 5^M)s_Nw6SϱB۩Bh`o#\s⤄t}8F @cq K .OFY}4cv+B Ѯ(=jշÛoͱE4g%|(.|C`j̭>H:j_qn\~ɹh`k:"tX rs|ӈ6" NLo@N},cukvO(S0V }e:-@)Ȳd7(LWǙ(wJuT(OJlઝ(T =9bʾ._?Ok'鴕T;Wf>vS@s *4KQT)IMK PVTCP ռ Į, y{&޳{$a886=0$RxV簌ݜxB% ޳^L Ag#lh^k (a$J zI W??"vkC":[ƅ%uIw*MBXk!,~],yvjC{m>*?b8gYNl%shsd:[xO|Q! >(=XO.&ViOE^͇] w7:5r+ C%ba+CmBi=7s v = ZFd1KYgWt#w܆J#H?JJO<*۳Jyk=ഢ%SA8?L, qX4aXt4|,vՑa]B9w38r$Ԍ2R®ӯQ5&_\"&4hN_8 :);U8hFт0D M3;p2Cɂ'- j/x8YvkH`(h|l NZ  G|l%}՘ZFZ D$^2l];w&~/iOdϼ.P`AZ'%"  a`gubKW;$^`3/ #̧V6 fA?]F%fѡPw9-{J`Ȝ!^u")EW7ʢFo" uKG+ٚ>렷uqq5*,W{E!YR~Ȼ؂iK1 y&A ϯ2$fK9GIKneʗ9+cF$_?Ɇe6]w"hQį<&?Aћ'yi® ^~CՎR-Q܆Ruj L*<6܊0#a-P_#ޢ_[E2،=h? 9(| y%,zi"!T3NM=1ؒSsKxlk%Xd^0K~hǸ]>U8kҐ?|K7rW-O!'䄨<~iJÖ_i³/ -7 :ë)0̐ !_#-.NkֿNЭ2`mLjGRB,16ǟ)3 NVD&iIjܴ/b2ĠدجwEJtپuX6{̌<2DZne,_j}|R+BS~]kh_/'ls{5'j0jMIL lnpF.]_`K̾(PT[c+#μdB_Ct2l\OeGyg.2>ۣc9gk ᚠ -!_Uj l,Kd>mYLwcJy}ۈX alkY_K1% nԔ脫8e9Wid ezVg9.1-c样'scHbΖ䎰K/H ϫ0 U/f)Ȏg`2|NPe V_A2OdYմ^Nr%}mғ!@"逩#?A1rO;XT8z3 It0p^_:ȚKyE_|\跾Q])bY1h13'P@X 0wD*; CkѠ$E~ѲX(/_YgYlU"3BSʀt Ɯ(}}Pr5&'@0Ds4Y: =<@ܷ&@BY{ܲXm*~PJ *) XS#xwv"'5jDO,}OLVL|V"G~>rXIVB`{$bZ}O wQ\zұzA$`H" |oPGkcգ]伮3HFcj>3cV{S/ Mˉ}RӜ( WQjR:4zmU: i [Z/U! _gW=bNLI$zI%/\)<פwXg\Yat-aT["@!Fo=V".{~K:IOۯvkќ>OX'3VAXv g/h]H񱚩Ɋ;K|#Q ZU縁*#7= ` Hl)~BzzshE&7J^$ t:4*4uZ25^QPKF,/8r7[@OzL]qy#0;BGtG܉D䣸y4ghc-Z57 iy_}5vD `N{@ɓ]?ETѷFFCj(0.˫,3a?6Bb?*Z-`5{}Ԍͳ~i> U(Լde=y$Dިe\BvM} U+%kx/P\]~?X@Rn҅KL)0 @ gwSSLؤ $F cC +ٵfd±yVg@p;m);⵺+b)g`$*>V{ Qig(.@r"߼SO_Us̛ḄD]X`i'0fA J7bEu<=% .+3_:; -T5ɡg.?û@j#~|Te|+n7_!̞eV>h)4OH^g>OUam! .Y M(ɼ:-4(4$UB.u^5<RuB+AWVv`7Tc:/m.tH4a&ﹿDƾYs|3('Hc|Sa*"$=x%5'^FYT49e sI.aFgTp5]a% J ؐ9K8)>(ټ M* +rAP"P$b>b:5X5j߰f$tɂU1xs t.wTÊ t=qBIΓ$L|h8'*oi?RXɊ^=؋-MdiFqw4MU==$̕}зH<)qkeZJl;UU=yK6P ]O>fCTr[-琡%~ rzSP0$8]Iϛӭ(~u377!ea8t[⛜%_h9'[6;RXIC\X 8k@ǔ+ܾrFW Sd-*l9i GdB 2\ޤ. X)}hH9Y mƶp. n!)BA2ׁPP_R@sUI?>sG 2^D͝H'\R5IVtxMG`3+o1T0rufr0B5)Mxs,KR?̙.7z!P^`Dr7| `Aw"ԕwk-/pQN{ Kg- lgTwFdůȤWސ>@$勇K  &`,0U4 B =a銗:@z.C9@*?tr)W?4=o"zĆb#b?h+dRJ]So‘U5 #P񾀯=O sXgmD/-Jc3o>SSĢkȺ 7hvBU2(='5 8x8.?S$ƼOK\C9dqQ`q0!t$wԜO% `EgFQڄn%U-UZ7:eamvQg6a3CKvK"9S%iÿs#GˀbB Ī&" amq˚owm3o:.x37:aXZ}Gzܩ^jPp3[K%s/→M8n;71Y#87sc#qoS7wa5:̹f ek29q/H>VjqUB1š}\tY{!rPr^,?xI˷y(?`. YPPF8yUdled=Fk+og9".\++ Xƽ39 RV_{W71qO84rce#.Rd8դ$`3fՍ9&| ׹Wjš"5˥I szrohzI4b%#CJ4$*z'_񓮎:A|0DϧqV#L|}LĴ;zQ Du42_{uX13-ǀ固R]}Afya"BlUl9NFOwQlYZזNl &_ᅟR>#7pZ!1{ӎ@v^3J~Ԩ~Mdkp酀;tkΠ*7c; sDIYʻ drPre \`¨@춃\3NRP 0iIZE[Xvߵ<<UQ Iou1L !x{oIB? *ixUO9 0d"e.oY"KĬO)bjY~{7+9W ]]8օ \²Տ'T5="SyXOAa*;Lz[VԗFcI\@8ڥk&`3>_~Ua@)qnJĆ pbT\@(+rSR<J )bڍ8a7@3ivJ">f?^-)6Bs0}UTW>JE69jS#Qwb4YL]*fa6QzK"'hʙz&ZT/`.j\긔LhV>>jj %].`Eմ|V_Nj-0R±2PW[,tXovbXQ.l7xW!=܋'m<j+_HũC1(P\ϳY1ߧ$m! qdgq bO],?χCB/}% 75jFf~ُt0ڋ۩t-@k^v|џRSAFxiv2³>'Q>:i#LDG&#ZGrz: .eyOCDŽ R3q3Y.}0B#IǧC,A7o8'HfLEl?`<:Iwh}Ut)eVyku)c'Oo Y+9s8K $(wb"\Kπ@ȷ' 'g툻I PTl9wwᇢ{9 H'Ee4cf'y u$6vEh@:%;"55=d1HPZ 2W!)Tu}TC#M)H]hئ `Z?ڜ7Fh9`J3Nm݈ڀ-\'ۆ9D{ b,vegНx7!޷;u'|7CWLG=i_!a.$RyN-eѝKzK,HBHjjkL>WRUCVh@[:irrݎFH L$!YwrTSe $k:Ue@Tj!p,K=v(Wi^ o ^ t,<~,K<|RмbH\P|DIeeNF?5R=ɺd%o).wv9Dk Eԣ`*?]?+~R.h=d]Ue&p^ $<7׷y]=F Eo3 ?F`MT""(Y~-ԭf߀@R!JlଆƝrv6QQ'ctP[oG&f$'2 6) (E%os)` >(E.=r]Ew~֮a*u5㞸W,X QS_42KeyU NψyN6dg$+nuLBMdw4|ӯ|V,9YePH<(OFwcEpb}_]uJ(.9(KVЮ.}nF0>R w4G_JF73u.wa[aĦ ++ #tėM], gO3ۃ͊c|ׅ+eKI*UzLo6Ժ}Xp.?,|s_+ 5p$M^)JRUQ!U*e1/x`}s-C2:7,ZB`.ͪAԂ/A͠3f"|+j<>3٦L'õpcŖcr^+:;ݤ>[IC1e)-p-ֵL?{5JbHAKp ws"ΩvMVV^R"]Nx?ok4 !KGx\ MʸY]r{kޮo'|F_N:OmO<cɹ?-#m6Ad(\b5)xڼbSHS5#3ٝ@ݡ~o<ކ-UhY6WVęiD|NwU W2( < IJfwJrF*rZ RMw`rp#05s%e?Ua; FT%ۧH g';LS:4e?6gϾ0H~4Zv-6߮z "z^rbqx0QFWSq>Twǰix %x1ٜ讍\ìbO(R_ _%DK}mt` Lf P0Dq0 LwPk"eP*8p{\t(½?>7\KMܽz,,Z1O:RUorևHȸńbS֥PeXX%TJ~ ڪϦ]1c?g٢]FXZy)Eě>gm8{/. N(w4'χ S&yeη3!}bmt%a09U.ʑmېp*9 7[2ǶuN p$s>N)"C?$Ax7ڞbTD pTfF_S_x:$G'Q=!3 PzSF@GZ>K5۴.#c:5R>7?^vEF:yZ#.؆lClrIkLnN/H{*xEJ쥕K OACaI3kvo9ʳ2xDUpV1d ]W>A4 _ڜa9aӖw sCekb fʄsoaN\*q ;3-N޻Ѭ("A׸5+FDn-a!`YjJmi )9@I2Maӫ }.f!S.]^\o&P8F8u"ͮ=!sųoD;;0J/" mS,:Bp4Ao%/TAQ-i9%xV2r=e)AbPˡ8a{1t;prQbE8x"]ˡ(:>\GY=d⺽4`$yxF1xp D9+$Oo2ykzݎk+'ĉ؈c2rxMۺ/~hu:TӁQ*__yԱ dSjTz^U[ΐY[4x*eL-I>ОbN666Aϑ]w= QvHJx{P%uNNLnec-7ʒhϻGC9e D;wS_W>:hSW (fPna6ʹtvm@lXf!az9C]?ݹ*$vw[BY$T֡#1p89oPA33~UL<Ÿ-- RI:B|:/& lQܶ ]l ˔(YeC^n#K\vAAI8v]#F"V)LHCdw-eG:}LAXY~O!4n(4uH8ž7(?1|W\Bkz x—*#f\PbY90R #P3~.@26O1 J"ft[z"k3' ƒצ•;2lNKY+/#Mo9 G[BVN58L2H@Pɘn-^fƼ bT0>TU,c5H4 %:-:5V>G]!"\ʪ,TF+dן]sEU23~j?H6`t~Id/tlQ~%x-Z,zs~/D81)ȥ,}'=Bbh #kaY2HX?#}S1Og{jZ@czU}r?N+,w#X*"aAᘲa%irg,wN%Nm`%Ĉ;ÉPd'%>r_qF9p39&MRP%䳚1@2k={a(V&Q0L_k*i< kݮQɁ^P+"YjɘHE j: 4fKO^[ Ψ'j5>X 5^Xk=muDž@+S1ʧ* |ɧYfy|pV yDJm3 P{Щ F|á8:"r;|nb9d9KYD. ;ͨ0RDFٲ ;TΫAG3/~J;N)KAp 3cCg~w%Z+i虌7,V=E71/||`vy'5/\TeYr8!A="2Ch#GѓyX( B%mܡ>[}rOj%ԃBHzbэ٢\I@e("^FtM9MTw~}P>j5r)DcFJx@yU)GA5¡vvnLN%N4vӶXExאlvcyX䣦?a:DWʼEx¹RZv5)cݡ?XmjDXUYXZ>dܻ;8Rḟ8.зYўn))\Gj_;ߩfgC%I# ns'BP8c:Z׸0~ǹ,%{'BdtaZ Z$0+\\Όal+(A]q_SWaQtO (g5 >5!j!tyfB]hih\A"_ov9!jwvw9h,@mzCpV}n9 gs 9. .cN,Ǻm\U![tg⵽&g3pt*I`bbb=h&tH| {];l.JVL9st5p?X]{,-C[gNXcbp_ 5jյJ$FL,BU>}e] IQ܇씘4Elnpf/1gGog;,^?OMruN2`/>劐-X؉)ͯg5w{[wXB\QA5$Ry]Un-"hT[iu7ņ>5.C$V3 ~cxYҺoL8l>VXdWz(mؿ1taeQ "88(7J'ćsi[u1/i97ws6;ǵD`+neκZss|W#i=~H [&-ViƤcP8Mj2SLB9-QOM%gU>mKRCϹ-WOTԊveIqeS?JM}%bS?Z\Mi|@L J;:9IɵaY鬇+!eiֳ )~I wцllCܨ .#eԜ!Q%z_kN$5w>g6[AZ83Kg3[}Wvr"80⾸Ee)"oV'>RY[b20=Ai|Dj({;#b@=ØfzKpYFTU A)P++}GLLwRhk6db3[ԙ{0d8Xd$umy"vjܿZ>Z6nʚn.lD5:dA^sFKk9W{OulCM*A29]縱[HZZLP, iwoh_ɭ4ZTkjGm/S BXM`/ %@G#b<.`. I.V񔢘ާ&i_h#V9g>b뾢YW~C%V֐ dQY$./#%b1mWS$5JH1Ho1:Q<`"\ݩ'86 # Hhsi\Rg%x?:;Y] ٜF(=Rͼ]=1/ߩ7/TU썍wǑyî5@Tq8OOh٢bwDnNYCAuw  F"`2;mgF7gG`:DoTAߺN0e(LE_N {dܚbB *,ђbw֩97a8H/bXXG5}A8`jygh0å@Z8tkxֻR›1+.ghǍ%ޅ .Yy.4Jp!Qm;eGȃy͠|F Y()&`ol"p98]P/pR/g-'Χ!;耫V{'9Kҕf=h{SC0N|?3f8g#*߫#HA{6| |ݤ&UO$pJSxK\Njbg@yx!iϸݏ8T4`ljCJ?|pSv8xTKo,E~0mO[䝪Iu15U8*"7AqE\ewl1c̪!zaMMI-m☾<ݛ*3D sxc Clmb@_,+=p1րHCl#~IJgPi\&gͼ.dtny=5;M&l^!=%ws!ƪ~Ks>uQirPsP R4CˠejxFc+vV [v"5#w<G^#2 .G#?OPTRDEJ' _XzMUkttz6<;T,5  9T54r`=! ?)ႇHdq, eތRҝ^7K 6BF5 w!2򀊚k"/OwE7.&TENt;]PmKx<D)aF! ]-p?3zYR{=R j=RX+MIJmIPi,2t?RgfAnu>^)/+ItJ@c(Z+9݊x;tP[8лaަ V3+|sEW:ɴ[U>]R:r 4!׉푋b ,vwnq`S$*L[b:7F+,Hf`MeXbKiHw͐q㽐AEpq#.nSlcJ~PIi B$4zk !>l@Yi dE 6_U_%dul(c K:.WfpM6l2@QPހ;!4B]~IWPz:0YOܰHs[?_1;I6M#>YzJBܵJ$F{,GsIA6V1m%yAKτA -[s)Xqo_D)[ T?+5RQjS."K*क़`l" &˜FM+@0EPP/Akmِ0{/ Nqw3>i$ɳ6'gU<z1nM~'u2V BK'@jU K6%^Ê:p, J `aQF`9.\#DEHA/'̊İd[p,v>-ao.Թy{{ϜAݚ qR5tOQ*J:;1LG6iG.L1eI8 8&ҡAc_ %^g6FWTv('&{g}U6A_l13WLѺ^ڎ08_BƝIN$ `L([vj[[zYiɢDڥ4I.oW<.NjrBp,q, y#5V8g1T Н&)DŽÙd54Y;޼lAϰLRhT'~EP6#RcX\'W4WI"g6fV3O?Lj:̒.ovg{0 ? ږtR)=,C~ҘS eydNB*]n;|sBXMΒ$/ߧh%CUO1źĬtܸa$bt$g%۰XחM?Ҝy,F̩Yb5D̻<3͆D>'rJ̒kKǵU?ИD=3g܊1 u;8R/A rdv -O :tJUOs[K3Fڰg6'C nx0/ye PN֖~}P -u >q3@8Kqi% Nl ;JFR+t1(@YLB_ޏյB+V -11e|8Aͱ~a ͯUx MAF?MNCҲ:L~@u~%}6;Wj9S_ANP'v,םT@,3d [1FOq{gַ\=(W&,:jGJR )qTk:N҇@ o}K K-f3Z07m ~\ :9>Vuskm376yI@.Bp 2&Y|;AwZ%e `/A7$=;g׷,=l 3+3.B [3n&ַ-:ME,(43# D(pT v劕; ˦Y xmԊ)5"HkFcA`z'z;9`ōcCp/v?QMt,#H\%$|xx;BA)]pH0<JN!t<RL\FU5\GLcBhb;{&)R'r6XlDݷХMxg,*J; RrXvPxlbn^…Dr{2xąkpYe16V|(7B LAgfrp3KJoa&uv:1%hU: C=un~cgA ~SLV2cDO*1lb."BIV5 .JM۲_OL !B1j0]P_5m}cjsޕWPǴf%ʞpI;^W?[~x.0p.J\$|h=dem!>N[ ؚu1|W@c$`KiW2hĽfO\ '>K}3ÝY5luLVD#Dz0.?{e](W~2}j];c3[/.r- 2p:QŖBqN'u_cҳx4HWL5y2*Ӿ ZHJ;V/Q+o3x9Mx&{.8*p:~ HYuiK\_$KQ mҡ(<^Rnn'Eu˅1"PihsYKy|~>&t&F{cL2x9f[AC! ?˱/hе!~$T#G[3"h絜h%%u5'oQUQ}-ocN~jOo5XqS.Tӂ3 !@OŰېXI dUD#zXJ.4KvȁG{YhW!}ᇲ19"F%9U~ S&Xh?k٫,SȜKo6FCCbeg|꿹N =xs]''jܛ^dsNJh= vFہux_Iq/b?:a{-"/O!H Rr} ePE[mfX|B?3t0!N3J8q>4g|lW$L4 48७{L:e#ڇ$ʞf,Xt#u*=^mf,2OI'Kiv_6llI 35CȔnC3aKy9OiBSGYWh]PC+d{m &o&eh;ܓҎ҈kfkVX5lr9ߌM1l zXPΊׂgR+ʻҮw e(s OfWazoޤvV@U'JDw"o7d}Zn(v_Xa㼔%ֺеܦM<nludhZ_E FYȆK8HV3PSGmX׉W)2/ʵb̑'8t>1=Ga;{>BeJIUz$}Գ|D>ڸ%6.+^nI.V e~21&"簻sxڣ,@9ŮHqM%XzN'ly6R|>΢CE-֢?df`\Xf<-qY1|HtNbw.(1}_ OM|!cvqt 4)@N0xcYv3(C.\< ú2'vL5Dg @HASUԸdL/3l'Ɯ}PY- lf*^&Ōs<ۮpyaITVv@;ejBCaiX Nlz\TFhomWC1,%~4'OBYx5"oY}]Yt$DvQtWҠA!4Fb*hސvrLp_` y@HcFQ^#UuqH3#KUz0 Ʀ5sJOP?Ů$<yd oI.1J Rr6by1nv"G+tdsDӹ@`5% ';RPBz(X8pO\'gPHۘFaԏI+ʗAF豘vԗXzGKd÷@$*w^nO hyOJ*nHOpt'yJPfJ窜,,;=θ(RqMEͲ=v>^94W-L3vPBW0QKI[nF05nQR4YrJBHve/ jg=0nAh~!x 7E'5hdR)`L:wk;j;Z\nCO}Na]ax;6>4 żf"*d/>'5&z ^fm<ԈEGUVBJe+ctVռIYfDvOG{ЛXdDmNi͋R(&@}q;4jE],%(x:{f~@Xs"*VGobar}cn)}s|} 6TDܷ}oV *4p)/ꋴ15]sr*apH>Hfb$[p}Wl ^';1xj<:~  Ou?)"$ Gf _h Xր>=i)Mr7{׶ѷßCu)Eu#/dyESV^ t50_aY_Uk袬̺Tqm/+^q@ Rb-1⺗rp|SVND1 IZ ʦv.Vx#b2=,wgSA}?>j69ͺ+E"m0L(l鹋悒ʃ|X 39QSOoy9Oqɯ/<ȔA-%rQ}oOPJ䯜& \c@ _ViI{^8HRR-o#auI,sK1t<?`) {|!/t XsNQx}g_'u[$SY^qLH"$UjA4^*[7u#U8#7lT>z\oG.垆-^'*)m>= AJ!R++*FN"c>4o~!lZX3ycJ*ԡLMa^&śtd)?'̊L87F/k`xo=C Ջ yB('h~skw\8LVbE{t),kc(=V~gWiomC֘j&m64Xa$ L_HB5-CmS; G[ ''hxavQ504,~` l򤺱>F_[Ѵ7?Q]ƬOIbvU !y2rM^W0M HW˚P:Օzn@9r9~`ϟhd+[$UcNJTUɬu^|t,SkTV $ Qz/e6j/N3U40I'77@UyCse^px5A\k1 ζL (e{zh괺r)Nuןc}U4'7v7=Mm@?) WwUI{ݲͿ4S9F ^y0_s7^vi6U aB}]H%ooR(@JWZu,wZNE$Z;0Һo̾kj%(!L-ǃ @rs;`[;i5Y u<׳Ԙ,|GjG|͆V;ns'eM>ωy&nd3S)]vA.5ٿuqSZkFvU>F#L7JmK8Ona>mJGǟ%4§M^Qv䀏+x‘/^l ̼C&.V wSBOp(1 rg(? Rw@L(*%?_o;E>TQ;6&U #p億"UI4/ވ؆ xIZj kqq:RI 3ja{7_c e1CcgՔ) ч8~AK)Vak(]qOMM}޳veʄ76@KIٰxUl5V.DsNMDODNC?xxkӟc@,wtr(ۆ7M̝W©MHj 7jEק/wIwM!ԁK#?Pq Vfl$c7Y58Ed`Pkwd@;Iq<q܀}(:}ayt\'t%fq`wf<O;ض0D84!#T yܘB)DM% 8A䬌R68kuD)e 9ĵӞZfנL,آx8,Q`kD+ޙOWqkF1K9o ԇ"{5;$2Ef ߀ *RR=yo%p(o\"M9ִ$XV&[qp>Q^$C/'nxNɣL'Yn_FD&cWF%(VfaGƕWNmlj9/fZ׆/M}ٍ{f<_Yuf%;J:,yp (O"H0l|=HȁXpFSb` %F\R(̝Y67U}K Y&FiChB'I@Î=BI ??H- EBLO`sgsEA5/A Iu^ $3ނ"@bg#Ec 0ɺEv;ѭ4pi[iKCoM_䠽"jU3:ĵIſ`9+r-S%M 7- w!F(}ҏ=%'MS,s4f[<[|6?'u`nt؅`pY+P>Y":mN: k)WȜuM-7yЧCn -թT[͋}8,dj{rL7GܫTI*' Դ O#F\'4?P@LJXMw snGx™;@,mDPM^J+8&"`UU`5Vg[ ɑc"?@Ti$H-Σ<<9bt^ܪ8f)_y,{+8&pC ev9V I*Ht4claݲex0Pv^Ǖ dXRT). Om8f齯j U)Sh3eʧP_OT^rNؑfFbᎨ.LJsg4% AO}<4t@3ibwïTXak?dq5=́SʙwLJ Ƌ p"!CG˵4B٥}UhX.(Ÿv}̛‰ѡJ6:׉xF6 Cѵ 'p;;ĭP5^-D:O#ODXN݉<Aẕ=Jl l>B6oj3;?~⢵:tMy5_Ù(>R;k ;2 nswC܈q Hc_ud-m]mH ɻYcc>3)Tױ&ŢO@i1 :huٙ*)iQ-*$2/F#8̏jI$c3"kk4Jd󚔕b"ۦX4~Q"j9%rdsQKK,d krw!JO*aRodX>>Lz}tGv$QYLPL;(a] g?7cb (6Oq^\@l2΍~D*Icō}TL\5oRzCGA&\-bݯ^ ">V0=XYxw*p|"oCv%pjCYiIgqZ{T:eGgmK2%gRAppx(8 "P8d6*JBOlR:Mz1ldAG ? ]s(.Q)s16뤴tZ/>=dKr,Zۖ{bkq?Il9e }]P۾+yu~j YSW4kɌg,S_Q|Nb.(Xz w1p/s$Di yKc6s:U';*38U鳭b,S~lK䝇8q __׭CByA*,),`M <)1,MOH1uuA.XRS@-޽RRǕ܁SE *%P3XpT+A֫Zݪv#^jk4x/y~ۣWz$i0!9{$nI5$<6|ny ]/eJ1{:FF\,/{S]k/,p`mpoq*JZ:+_g?1ߕIvXS]X(sԅ84S p~@%LczTlR,ܿBެLluZ:GWp:[;ڋfSB79؆[M@:޴=4!{ w hfK9Aq _R!>V<;bHHC`>F+V.^-L,?bIWQruy}^LzLyq;GJU3X.Ed:n$۵?؍ ~6dD kARӬX~yeQ#^މ00`FŜ7vXpZcᏃ}2']#H6VxJLBCGp3}K@0 ׄV4Jl?I)Щ!4{)Jz&1d35 ?!vd}T4Md8P}t%/(Y.T+1OI,J #7yzF̔yDZB=݌C$?lڢ:M'Ey49lWbSyzD7*To$^3&b6;N]tˋ-lV}]J"8˩zuOu.K꾚@RR uIn+S]"2%22]vb=tbHܮ4r m_ZC׽KdG*{{t[I@a &k9 x۳+{7”al[V!\PukHAtM)39A䚊b$/jxB CPo^yCޗlV<{7mAlO;!dZj16s,/A !>u).eֺ' b:n^ 鐉mo~-6bQ!blc?jmپ>e"YHт5W}ESOߏ<-CM }J*[m+");6j`p?al[Hߏ;%4t~END^ U~La2 )r Ü{P"VHˡu%3K|e@p%P]ߞak'L%^g;3>P݋y80*@0tq$/Clm >9b<1 %/UldZҍDXrQ4k9zSg~Nʻ=O%:~(1VƨB Yk,F&~A{=+~EMْq ;H-MU^H_,LYGMH1 WOCD_ũcZC/gBGN 'Ǡ$f@>oFGy` ƪC 8;5|ΚX1,=DբJeʅR~kS-#Ko55&_ʲ.*('Td"jkb?9$ ]tk{ZnyTl/jݨT!vs61O]IT9Zo)rJ&Y8œ}dLѱZ{0FBxbϓ' ,:?r=ɖ%0<7Eը/1س>rѤ N u Zt9sC(8 ?ẋDRPU~*zFi)Ojwfܾ-R7)O`<'=7\}Kgr>vnr.v'yH*-Ta|iW+a\$^Gf^aG4vx˵Y/?:vv٪L7p(NՅToQV˶u]9@eRii锟y:kMM"K{Ү, aY?rwz8zQ}`VΚܢir\snqa4 ."SY^B:u w^}3$Չu1NO /vh>J(N Kln)N)44Exre808.u\$'y( n_\vK^vCFDZlSˆ$]XLPA5[kpՌoM='Vk:[AEڣc w5Q;!7QaknsP9ԄZTf?/˹0*):Y/L-x T@DQn!l`hLލ֬C{D8{9%K3 -H!gOLGDM;laf䋙݋$$svoM!BIiMvWG@!gU`\:GcD_i@N-oo!pJI JL{&1tEK!qcRl? )A5,G.٧Yldqe=c VƵF]k̩s ԍd#gyAnó"7t '_JaV^΂|b@5.:#=:ktl{[ڡTZS2 M ڎG)69?~RlUz8|t#ƃjd*޺[㢾8vl'iq07\ L3Aq\xw9_dA!.[vdSY;vE ]wg!`߰9<1"(Q{`bcnTdVE|gX("ʨ7 O$c6rzZ`qBh c\o1"ܰ) r)YxIeW}(;E85s3l.t[:Y:ĜDZ Yр _",W}ąmVFE(d_׮MrXwW5e+QdO3է*-Egk4UNEֆy3ytdW{Q#ru#%> te9a'<iɈ%Ir EG\򅛥q}t<tkh|3Қv?dS^62/WO]̊?$j]H)Mz습M:$TAUDsjOn,n?A$ B 6O:tpTݑnⲊ_=)dF]= )~cZ%ZIN2kR( Qg[O,MX[_~=;i;EРVSΩpCZgK؊&dys?i̭ctpC32j/Ƥޫe<9 h&ϻ\:mOџȵ1/+y:Z+.[̺[1f(ɿ׹Y1od!-#zsS_ӕ* DcTm/gSciIrbKwʼVk]0c#(DdhZ3Aۊug1d,b o[1|)Iypvň{R2y.[&bu&9D$e '3= S  8# )0`93UL Dл윛FiI8>̧Å3CU!~.3c2 ZWnqsD,r.罖ġR#ǧ^˸ Q3M1h!#s8a TɲEhfNn||u=؛Cs)[;8GVT}˛Ne-HTP儬_6H4BhaOIK+675 Imb41x,őӐ!'MǨ"Ba(Z1zV=iw >hF_ేB}Wv)/"m&P[me1 J-Ei`|<;fsk."tܤ@A֘ >Om}dܰd遫gnŻgG˧_Ϋ½MDm:=}HoX]P8K>P5𬝖-*'I'X@T ,R궿n:WnWvu?KGP|9uH洨=`"k&RΙ TLmZة~/tˆ8S a.5?qИ\K52NxY}DeU#SPk7БFcgخo9ś8qΛY]tj8K5P\_3r@ 3bwkBCMZ˕_H3 <)LIz>!U^9a fl:+{F=#8(ԇ2g7njz#p\ |bl[pʗqI~)s^@Pu75RU_1>5 -a8JGUCnٝyͪMZ;U0A}9GGOذ{C~/)!0A. ѽ,(I'@F%5z\-re"YE Wl}(^x \+:uxd Tz\2 9,))/q,z^05Y~f3x9☵+ATNk~ӼA z 5 3K ,w%tawK6,n\%ҹQcBaTu<0QSYٍ6BeDl%(l =U:߸+Cz:GO^ SidpPRT 5 I)S**Ī|I(xy!k9qy|x S_6jvWHa ,a}]QV;~<6B5EscvR)$JD?I)*ǏCXwxΒjGFپ 9B7b/}IϭSw/FFҤ OC SuNC{B<- 9 u9YTDS5Ls0/$Ed#nM!3=z2có:hl@gOXGޫuw0u: n*+.Ayx_b5ƾd|MF0Ԣ][V[_ApFnO2ӿcu-"r)zl|| շ)ĉZɡi!,L4cغ;y*\Br*|P2V-䀭;yC7O`}k2 e|vNw4o@nn&OAWla") ^"ea *7EzʬRI3*"󹣳؆J!k9LUy\R&3#Al7"R%l%OW)V}8ZF"ntU&S$+ hDLIԴo˪-%85 n3wCůCɳ݁-4o櫯mt"f*屟DFʯFFڑYVWWehњw_g:Q}+t[qt^f ".CNU2[&"?4T޾6$h[f?I]CnQezN0эZ> Tڱ.dݼwZɐmmOlc f-uʑ3]<'%Vb7C oEUJΐK5GF)*XdY0>LkJ'?kr0<W4VWHF6EBvcǟEԌy7"yШ'+mDP IxB#??V ='VNxg&Aj m|z1yNkVK4\#o-uߗou#ګDDǓgjR?9'A` ?V}\K R|xKqPlQh5$C i5PxV2wz dpf6kSu )\F%σ՝Wfy)D`0xW 1Oo6~tsJ%E/;ىqw"%nTrم\/|øȶM]j]ԥrxq}h2~ G3\}!U(&kգjQ8H ^Jfԉg*mp(Ӏ#ˎpr*ӄ9 \и!SOL)w\> ǖ}{y_>UEyհ1eWCKu '-;|1pi? A\FweM[8˺UA J)5M/yJ]XFqm1 ѼtbܸTILo\KF52Fނ',Bf宒,`mQ`dgy) myYgx_'9h֬zS1۳mC`#WH4t?zi:pXu߶zJ?^F iQ0E_>1a tEXkWbLِٶgF r2; N;:>%oײET;MY&(AT~(޼ ^H΍ c4YP!1P[a?$dE[9R(M&3D#hPi#*{F6$Վc׀9|!B@?ņy/hLZlm& ,JMc 5ZX 6~p~O0[v89zy &dzghaHKj&i#C%]Cxך>CKIS^$M`)5Lm`%u%|<;*Q+LAF8 }'"d]sHPJiPB5vA.b72w7U7G1x}*$YA "­3P%檤 7Ц[8w'uJ :tɡ %Jџ#[.]$yy|ݔlm;rm"P}Zپv5k` =v؟mY^WZþOhcυ9p?hƓ"&Ė)\%^!SQr~<)UyB#&V J ڟ4+Q;\",yFsͪV`.(8Mܽ|e˻Q2Z\*y)^aW*jȳ(Fo.P%/)2 \8\=CiTCgjJ!,Z"W2)ZDB`-Ӵ$\`]yh\^əjٰU7(fG34͝[h#[bt'y;jOa'ΐƴ^am]eX|J-UO}b`7]b~x 0:4V;]$Rf>H<\>О%^2: d3`ڀ[2ͯ`Ws&+ۥfkod%EV,f.Ͻ]_\"lH&v+:6QV؇8% ]>L w9c b-@-+űe|9\pIoF࿈+$U 4ڔQHa<$xVΚm4 B)ҪU bT߰AC! XjTBӯ$ !Fy#88001TQ8̙MIh៑~"C"w4 pZP'qw5t& iZ ́Xs`3O;dpKwkWxscC1Rv4<V ؅n6N)v4i)hlp#<]f@Y;~Ӛq7]|]YbZ[%[ASM̪*jlBCS( li1;# g? a6"tBh: ~d쑝7۷Uc߉{$lrNQ;ؓ]ԣk7$@|({^4 >Bid'ۻ &r#91op(Z:J0ėx*<2n+I[]O$y Fs.+Q*["T'ud*9`ۯ!Aţ΁'AUiܭ|uqyQ,<l`/"Ydٷ9mJp-X ;~M 6qz"_9/}1t>=zQ zq+}fL`qXVv݅\6Yce[H~7:pE<* CEr tv-<Н@0 vzJ, ,~x`uhhםO@O߳GP@.k8v贐[^+-J:AJRmlgZq3dk 5RR)-8lc4S/ZCmWtU3"+xJ#BX+Dr`,P| ԭP} YIo'䍈  cMGB\<'&ZHR`!  _/]mKR;+SLM0!MDҹmi)7Q>CDă3xbm_zOeƋ5^m)d,U@32jA.z)/7VE]YHC>}T%SRﺶ"ṅ 6ҲDź91>2F:{(|S&^m7 iM weI5a rtjzq pB;,c{5X/_Sq)f:Pda* xj{}G1o$&<4SφseCrDAz3pgs|AIVKHC%ව9\Qjxs=kg'V6k;QUy'm`".&G|l";@zDiď8_+?o̬K?pݺG U T2}}/8?Vl}riO_{I,P]+;%aߑQ mIfc6 eF} tdE7&%g (o"Vw F %g;n0rx;d QeD7y;f6j> o)Pš"0>mi=I75>0܈h}~Ŗ`ṮSOc 9Q#p9PL $@<)pM6S:1]YpWG3UR%[C嵫c;:&܅Y{'^(J4ƒC+Mv!~ës4x4ޏ*sBo ze׿W]Q\_;!E:[p:\gG3?Q)QRԤ0M)S DVC&6wtƸhدk#k*b :W9ֵ!)+;SO-`[RlUp7PY\$vQ 򚞼"J!@ zyWW<5m*)ڝv/E*TYgwZ7U@d62Wň#w#-e%DxO",oŃdW;JHۄݛx(RfRjpOVcߞbG2wx'ߝ\+7%nnE B&uZ}W\UtiYJ'>z dsul|:Lv`^Hr;{3^b@f\ƙ;`T$ժno0دR1{bO6]ުGveзHH7kʘmw1jʴCdYݝ1Fr` mܼ/N1m{v ^*}h[OεƢ8Ι _}}ATv{KӷZ,sQ/_&3<0\'_xv̔b˃enTRrU,+rr3Өm\,<BK^IH5h5 9Q󨼟[Gź*Ulཽ"9$h<"ĵ6~k׻w ?(bZb -;F)}urɾOi kH0: ɷ1xj'cY|ʹQ Y_Pv5[òPX(Y"X60dׇa8vWk K'|){h(,v]X D R=[NBdUeVbJ/(Naau塟aXI#}C^3KavOT>E5;ؚ|7EZW1gsL{d1Gt-cUmo}'iȈ:<؉a榽R'dA^:v& S lx[~Antn)t+> w6ϜzStPFJyQ:$7($)@C3t` 3b5c@S/C{j$EVw6s@IIjs;'12"@# O#:E/nO7]F{I02\[.ZzгuKI/+V?(O/r\W!:M}}IRE[=p4B LZhV9#6g O8{+6gl(}*}xiKPI.isQլ!꼢wNRԛlWt,&xk@oo>!{$B+^I=T}Օٙ(ڎ ?+O-WA Cc|FNs]4mrxYrSb&?5jUX셓nK%$sRm^V w^$`2?Krr.VW]vI#(rN;$T::JK2wvz놧@^uҽ`],FڊC AU\<6=ϋtpѐ! %:DؿuySd 拠'Ǵ|jV{nXKn*+`Awl]Sn>C\rc ]ɝ=ajZ.{BWc.(gr=cM2,\!LW< s)lڑ2@Y﫰[|P*O}2{ cvr9p{?5s-/yd];^O4jW|ΰpj7MH#caȀac4 !:LڅܨӢʽ-Q)CPvg g 7ڎ:?ynǸTs"kmgzFwpפy?'+1?ab#uf(U.|;thwm|+c]ȋPry:|_>?l vR~Bkb迤xVP^@%Kfl# l˸FJCaBs䜴Zg'yH0Tro(0 JE9\1@6CIV`Th/J*Z̺kL@:XW-?9%=uyIG}-4F>9f٧k{i5g-˧>\ bXpif' {ͤMNm-3^Dejp{^TJYMP{j@\뫂f^|nVl+ʠ&LdnjK1\@C-."|< a+{!GĬr.{sƾIɿ@>9_g [pbbc،vP7Qyj#^ |%ٕZ(3zf6砟3zc.9".>4a2,{&Mm|tG4n`D^ $9ɡFӽ0]Q^r>INUݒ3ƀYv֐:Br+V՜ IKZV$ĞO_H6O.$)&-|$ ̠B>;CyNyկ+8L9pT3b[!ڐE9ѹ !.9Mُ5鵩PVldL|iitR3?7ד$'!sW0C)<$*[͓i*s }#߉u"^?#~x6MWNN!S0&G'b?8ٲd4bAEhMڰϽ|)nhm=%?~LvkF ƽU:oQw9@g%\ϋIHRWQ2?.%X!>jos욬@`Bp*ٻǡ}D1OJFfV^s9 \nWw.b jJ¿|7 ~ּ{kp닖;qmG 0 mzgBn`^GVo/݉Z$8N~, )l޽ꮺ@&z%!UcY.m?khلOMƶ oQT9I9]Xهm$#6Fs#՗!qx$n/.o2Vtm̏jc mC 1uwh:E4M07V x"o*O(UL.tW80e %d5w}᭍}u6M0gE;H,H~#l(n8\hn(:哴@3%EX3[z\?Hr`' EcD_5ҙ%܆:$̫26c )C2WND$JPJ3ⲡr4-GX01,M :-\ќdN,?v̾ kY,&+7sɎ# %tpz.Ul_X) >w@$:Avm)i-ZO3E5MFjݪ1K(;͕T\ 26"L*M6IRa?}_C+ 4:jg}UyE*1> %g/ YըT*2vas^s#~lWK ϷxNkNNߊ2:V}!Tfr/Go7©tzʏG63-&h]ORX{">W iPK *f]wpu{~kAh2 j9W{"iSt :Hb!<d"dEC )%B|) >8lF? 3WW$ߎ9;bHo}ҢInvLlZTܐ>Q񪊈kӇE)!"EM 6Kgt0>I^ʁ 8!oW=ϩc'FtvB$d?/R]JJvSW! y$=ٗ(5P 'C<5p̽؃7A6)t~ŦCְz=3G-C{S a"EB>FHGZPD(G#Z ZQdjź~G|Vծ^6r ExHUDqM9rEւ@,zQOf4Jw X#3WPREy-X 8,!"@h'JX9rΟ*ԳFH+ӏPV t-& /[Ijh ~Z;,QQ ii>wSGxyyǯhH/o=oG'9"3;za|5Zx_詘_g?InJp܋M =G3PK1Xj'e1oY4/OX}[Jae90C 23r["o>G^։G oyrgV͜fw"6s+t1d%fWؾ0WawʒPS'Gƨ`$Yp !)2/p!Z*5]簲G\&LA riGJOk"5G~*ɛTO?CϜIwR`|])p-ݞb "EecHjZay'OS@t >Ct%j}+J0"͓;!(弓IQqWL{?EՖ壋ZGb8(/ifjfґ70_ Pum^FN-&Dt1ORўY`%]ɤxVB۩Audk`X !)e#,ڡhޕltsy:->;Me_jĝn Iur51R LOhBfU *[ ׋v(Heq$4ň ̓ i D gb$Cl$UMBAy^He-ɑ뒭×ְW|BO|݋_.WQ  K%-q`6)Pa ]$\/$؃D=$%H¬򾧘:=;~+<ċc<86mR]!OǟKmXQV~g5v xD) kB*7؋pfJjglL.1xueeuVQq9-~!r^edw4ͮL_7t(,4wjkn߆ ^JBv(*Дj?dzx,>6am OQ# *2 orEvb=ʵglu19.-S!5hc &qx95kF(LQwXȊ  if~&mO4)I-=R.;x ]b-O$PRR !YE[D¾͐p@ѩ!b̺lЋRq׋y۫Uk0AѢ&$mcw0 sĒne@,t#GVCvŃ4Ob O>fkVL/ɢ<|ĒqĒa螮u"'x"L$2lW\eǼQ4+>%Zt>hC-a+'rSV\V$tOGZ=.ho}ݜYIS3]RZYMK7fsTH xHu!$S}#HCEWjO%\X6i뿲ȟ$μi7_f r3;JO؝/ j%4*?|bgOb8{ Λ? Sbw t^`E^a% j$ʼn]jOMNCPoDfUmQB6#MJVE!QA"buFz>Hn>GK"H݉8XQ'H}Jb6nwWNxM<4KH2ޭDޤIs'79M.w5Տ4fWxxL_AX W&ҞüEJ~Q-btSzP G&rʣg#hm-?uoe]Ʀ@,sp_-%;J4wL2Cw#Q-viR'%UY?5G@7[NI}U103(je5 "K;DʑeF{ۯUk A-w˯FZ6sU{EahGŘeNQb)Łp!BViKb eqyQ$n_hO/Z4[yݞp둴0T8o&BVDh<}b~X@6 /l[VEnKb"'SXʵ1 ds5_}l|:4WXHY rA4RWN;vf ԋh3% lp)Wv_ƓWs%;sqj,軂.yk' a!yS^ϣF[`M1k+1nr |Hwh.r |urRqxr s1BY@6B; k k.Y ȹĎLOXV79[" յ֦i8ZfD6:*1Yc 7Yf=]i@a>/(T[U}by*$CxA)HV٢RS4N R%\G7S-C khhyG3K ܱn26 E ~PJ6aKV͹s.eI1fzyF(tw#ܬjSd^w[ϊaq55ݍWc$r&ݲ?ɿL#ڰ,̻8KwڱCacU(^.u12oҥ }?Qхu1Q-!2Km$D.S>RWVa gN4_r8XUnP1E$`@Ə>dM+'W&X D2rjCsa9јf rHtQfhޜӃ]As+Y;/^t DU~7HijU8_z:8?JnaElLB\AJ1榲׏IGPlZ[B &K Pf\cW`#kEԗI i| _OnTh͂hnkR`-&]hT"︢UaF&h6%Dx1@\KW]<\sh)/ /4.k pg%:F (dU 09j035{qYT&~cj0c.P[vFGHO֩_ HtՄir a1 *kȮC_>'DDF*8Y8u:BPɔA#V=ilj8O|_ȦekhPIm橮K6CQ2pZ}dsFz ^!5b U_4 ]1Xy5fP$u* L{N5DnKz-|RZX52C$&-ϣT9>=u h3cUQ1S5  4 ?X!Ԇ.^T :WpW,X34I %48ޒxB.FD &Q)۽(?7h8@Dhs{<*+xA:yaR ?}t]CQta@&o{e5<`, ~c}0.([ u(lED67DbS (r!저}(xKFW[S. f] Gd(:cb5IʐоWk1c1p">v6۹B{9wúnq`nu7vṭKB9K#$mNqoy2IJ` yy؝o'iu@Va x[`;oimCAL\>$ 6m51 O c_={$l̢?.zPu׼\\ 9Dq+&>˫!ILNj%!B޶UdD \큻Zf&h@ Q@SOѵk fK"°y"YO_ND#3{P'\rݚ0h4ps_E59x;-xv^Qj@}p!~(0}vR,KmvťkknLEG3:O hն F?I|^_ #xK0oyBf gW~7eFo߀A:2lLfКۥlԊVtqƢEq";[㗳+p/{Q# V"^-ʏ+k";X .dRK GݽpEdhUl!pTsx*~"Pt1Ì.s+3g"jS&>@(@@P;dGzF+d#:U+l D, H91)Ѹ`yPb7<Rt!H/afZ D#۬ O*L?4YBAcG͓} CXc,E ݂jUF#)kx ]KjQ1BT5.4^狹;@9E81~mq=^/4:m2OYY](T^v(s=K4ArW:N>#Ƿ/˚ jEpX5R`f$ @]ˌv7 BuD%cyHd=JJ҇=40A y#QGdS&wȇA>bh뛌>p6رZ_UB3gmYy(ڋr~@gkR P5r-1 pۚNFqk%"߾IfcalHu ]R۴XeSIzYw>>[(32xvEÔ&^SznA~z\Tk}Gs؋U2zP݊5G*S4"1,ttbQDGUaM "VED\ m= 5 FIi0KEl 1ETǗhVC y 86 SH؈R&v R,e.S{ET1kVVGͨ|+ko$(iuB/: /%@A`")u*Pl! Z?kxTŃ9=7m?)5> ܏D94g/0s$K Ae1/|.{,8duU#\3_c+6anSx: J$P1f.\tLg Wry _bܱje!`MЛ)w,sΩ/ JmƤϰgo}m!:,ψ;#\ mn6=w!s(P*#J Vu.s3By2k:^0]5H^@hOo:6,897'(0ؾc;PGtd1ֆye7=cSpkD#V%ga$Bmn"Wg6%o6#dlbP4ΓK&6`7D@,-|11Xṙx͛:/ Fm&%nR '"͚e0NWU8@0ubRi7axE/)r /;dG릳 =ltLSnHB=?}0|xdfN{uBOJha1&K?DicP1zvrh~SHW9U{"T:̷ycyTfD1ju/?_KOip %ʿdz_nw~_Rɗ *SD.|Z^dY A#0!: gGOb+hKʯ0pK^`,Ψ՚aLXf /E[=;Ph%(Nh&P̆E>HVܗO^7sRi7>گqL4=B'Y[W"ӨFCu=Ⱦ ;J ;d/Q쒊ݮonmX5.k{<,wS{Trc͜4::0RF%[{ %jB|Th!fv;(s ,,STC*6V:r%Ф~i&"voʙh¹hrIEc f] {HBB c$7+C#MP>ޮ$Q% ̻I]I_TC)upca'ohIGy&Y6p8nҫ4^rxorY8:?# T# [" `(E^c '0ݱ_ +YEA!m<+dP=&:ܵ1 c+?qHg , 0AB#kD>p>ơ랆(ӂު!JTJj3QHDQvz ѥ=Ob$}rcU @=@ S:k2Y==tb2z ܘ4*r~\wƳAՌH*Ց99g,F:]~)GB&B4D2UQ -u;E0@sp sOvWֹwEl"\}B2X- 5 `.BwY ztIC7K $t`,+~"5cHj_axW)pHX;6 72zt|ߋj!p_^hǣ@"ro^gd/~5*Ϗ-IoTwLՌeB1\!:cY As*RxfMA7 Z%@d}QE'4P*PIǎeKk4O)SueJBSJD}d78Ŝ<8^/bJZ4ޛ zw+[pIθ;Y#Z:~pCqb8nSRPd.JT^h۞+Fjl2H_^U7l_>x\煽e?nv׾VIHy 5滃vgLq^2!Y3%/+K>wUoͰg{ڌJWb6ܺcQ#آ'WqeW-HiF"Q.DbP:cـ "sN=s㨮Tf6p.NCDp\BU B/4|Z8!=\h!zK.*F1#<ܮrS'U0bQMdP$x60߼#9(^$ndﱏ%F_Z1uZᡏzy_gV^P5ZAz!eu̢|AS6"ewV3y-v{b/5&i@[:Sl%@˒Ql"ҜJjӰ<]Q5AbpŤYFU824Iӣ\ch/<sUc;:oa!UZ*axxJ.R5jؖ[~ ="bΌ^:L!c2EX x#Es.Ic㩹ڱoVp/# b ;#O/E~?Mt6!HVJrwR;mgJVPʋxЋ< ܡgzв_v=~Kysvj[ux/qMΥDNAڛ< L֯ PRAtc*ZP$޺ڣ;q[ R& pʆYdȠiC(jR m) ʳ*X#@ա*hFo:Z^mbJ2#zvyzL(CSc ܯ|Ō(uzkHЖ{u!KB;iI'&BD4JgP,E;%1/\0z %I*0u,2U>^ح43Jp=h 0p`h'︩!\{'}埚IKmnW7MlVJ]8:.+9L>%\+S!08)%cOS?8@ȧ/ۍC."sa#H`w70wlڥE\"P4#{ V,4oU}&1>Sd6C*-z5*d- m5Yoj'.{ wPi yz].%{.sŜa_J[B #uU"uS.ƪVOɠ^@7=8{1H7$Gzy4vW dSDB JY hFRo{,MD8IG\cYUmvyg33ܱ3&)W&V{fTBb9 vf.-Yf}yU9ȣM@bYw.G#Cw:ե)#^\4ױ}<϶_!jjKWYח*+/2YY%npQAߑ<MICQ\ged˲ %!N ,ҶϿVɞ> θE%V},Ю}$4VX"LK)K l'82MwvwC:} !>) ֒62[cM2AEzv;[3C鷿%rK>h7 y8>_sLMܾXM~qل-Q7eb /_M "Nj4Y!N0wQ6V({c9/+{wwtHB^~ȯonYpJ8MD㟼Ǹyg?Qb:2p?l\{U00Sf J=zl~GUS!Hdwq M`It(k@S;jfz1q%I00ک?~Aƌ;وn\%q;?Dg)%T@q _ֱOG_Dp_V9EnT6 aL\l=P6TEmR[2֥_,^DS pWþP/8Kn: VfPL4Izg}-Ut5ozȕ^vBfίzx|h ےb]V}hl_<6h Tb=TN~I+\0$)5o ȶW&U%Px6?/漋'zkg */Z0z譆Ֆ)- iBl%g",޳U Bgl&x> 3~,defZn3)>+wW/Dʍd;e!Vuvl:_j?.w[q uk+#^ TZOI>#9fK&΍wdLwr`A$a0J2cfڻ!ٵJP>~??r*{/AG͊n%|&d_ unaŢK4W¢ 1ei*jmI*(q3*b91&.&X.yDx9Lv@X9jsqf =۹ca]mڤr}oVo(×j~Qؤj1,Ԫz2h~36N&/*uc?`) 61ER5+f7d>c葮An=Ϋ\eGM!n\?qO _GxTү058^X-&RzV;Y}?fs>U(Sbw;I.{~a(2!=E+9. }~=s|#*#FFmz葜Qʠ%&)ᏥY͉'ݚ)QN>m%G{k4%wIXLN^U1(%1MQg}:67Xւg_*Z=>O sj ̑h+^1#He>kرMPj?|}j mq^^m˩d} QffzNSbtF Zk gwÏ2+F`fJA)5OidRs7cϸC>;q?hڅA 9 X#;x@"<_4(QnV6wRw yD`VI#>N{VqhB6 k3N;nc^ cڶ^|HP.ߺ.O))Ce|lV$<#B%HHD/DB k܎v 䞯t`AQMH`mFFt2?߯n#}#ұ1V5oG k'&hQdd(|­. _ d2k Ħ(tC*|Zхк4{c;>[ _\Md K] PȯwK=jW ߮Lrs"R)`RCЅA8.Vv{rS~(!,F,!aOz .BHD~, 9 a'sOw u6l`a続TNr9Ǩ9;+m |˄f>VU=Pkv";n_w ٍ(&Tx Mw앪I(oux>,?{ʝZϬ:G9be͋rv_;#>{cX@+CVYOpaL]ަ'4 GP;-ɔRm,i-Q!{wO^j]> kҺEoъMT;,6֯ M/@]`-.u\ n}--ht O 0`}Q߈-H|>[ l;[D(̤}~ko" bӎ5ֵÛZX3+@kuAOOoil_."Q(ZHa!GL*'aBģ\<5 #^j ͤR(rXF UK.79wjØlW$/:ojNH,g!j`ВWe 1:,hcoe6-? ɑ|2ϛ9SIn#xZWYH8DUmA;*Iyu Ya@6"cRTAQb55 w_5wu1KہYayuB 7 3N}=:4O\_>kWI[?>3M*ԘE61wg)ϯ}R"w26b}7]^;0+Fnݷ}ɼ[iQ^ԭ'z7nt2ĺR)>uia=*hsʗg>T|{IDLqcFǟl4LD%hpi0 n:su E ƦNO>YKѽ>+@ݏji@B;ZQ/پ% "n)P9e\P*[vz'1y4Pwǰ%\ z{O#ˎXH|w0\_@5{YN_ BIXlG)䤆@ ˡ*Π.n'GY` | #Nu yYI#Yep&Rec)zA|w-Фyji4ѬEO&5>hD=880GBo 5Y=sfa?qArZƂGO.k_qB(`& ߘe낱(B׎@Y2JF),V/{ūMkשfߙBLRYU ;}Z "=(FXpcEπ5-ܞ왅9Y}0>\XJh7)G\|-W'zQ@ؙ5KO\{T:`7cd\JH-lty HGz;0#ݑ-B&(ƽDeӺgs]D.Ckw) Ln /rc6դ=%;4[bE6gt} ~5Ro)Ԝ  bVP{̛9>r.b {d*z1#  ў İVfO{m@MDSq9c,WתD@$ÏBߩrYH C`-tx":hUJHaee:)A޲9|8"Wc*J W8eʃgohkF((61dVpJ9!/rUJhԫȬPKT}`|~K>NSn8r^ٶO1ȗ$1$e Z3p*c4`Y%M^m3b2}K+9V_*obJƑRv4WJK:Pm&V U'7mi1P0iH=# V-o+;ĩoZ}ҽ>Yc_ F$1Pd)Z mo\oz ƪF/n_/EeX}{VRߩ:IЮjبK&üL+k`4,W]_ǸD֗MAՠ}D()czȉCXgH]EO pr=>~$]T|ڑPy&cAFg,F@wC۸J pݟ]7~?J!܂”rpwo q3lxG~95gjVƘ{ tF?vY7c)"n7¦=7Af ۾%aUpX׻/T;lѾ6\cwq| F?϶;׋}s֓Nk`bOȴLQkdG{5@bҫ IoD䟩BIy[5sO_'Q4W)IW}܃}Q&BS閄jK:rB/4f$6N"$l`}PC8ɧQ4ƥWU!6F?T-yr&+1Fuʔ[CvK`flyzw>$rR(DD9q8P8WwF; 6"<5v Wq'$<ڄ]xmƝݟpO]yf}ص̝1ocr\*cSF{)(Ek2EL^f'ӶKq@Mm~Jז׈ ˒iϾuYzpͷT|n3My>ڲʴN<+]4[|Eny^+X/LYPYʢCԹVyto#GK ;|]2֯O4W49'%=[T[b_ՂfZΔbe3.8wӆY~.!?Ĥٌi x*`grP*e~!)dAƤޤb]q$pǞ˘2TP; 'p@"{/˩F"yzpSM21|34P|zfC+c0qù(J:r-na=cg;<\n挛$Ŭ4@_A]ٶJN 'D7++xpq\ڒ2sNbט(R|5E% p <{Hzb)>VP"'X7kGO4`c_miEkqe'K!~~J$ݸn}dFCh[ F$w^"ɲ{Cug>*W2@{&|@}U<% j}Soi {Bu|z`Y%Q8.M#d{m?_}$&f&Ikl@Г\5i-5b2>hqrG]b o/_1 zwm!7clO[8[^VV$$taPdG!0Bo;43h@WOU+ԔeT JcèَWD䦄+Lv wD~ۏsEIr|ek~.)<9J?R 9Ki4"e7pƠW N\:hP񞭭N1MUB31wݐ{egd8٧ǵWwշ xy}Ӽ|EC1{㦯blϵ.?JBqJMo#.z3us]jnnAǑXgZY#yj:u֍[a)328-^7sɋduJL';/Noi4 K LKoBV.6W=-3-e)#q1 MJ_#SdX/J n⌐e y Z:":h@,X΋m1d@@*ZP~)*Z2EvfݫLPfme#Oswke@t myQvUd#C󾠖m"KL&z&:yˋ6#g8&M+2r=`Gmu@1.~ Fy{']tzXky7Z~ n)5Ԥ?N`^VQS(r\B>hkତXM^xQڞ$X~|x_vr:\&N5V]Vg=t bnqdT"qO+D`T\c>|BΝ0 7ٔqI ܯ\΃Ryw73l̳(esy;bq.v$6._ }ϒV<,NfIZtoӮGɘ*, 9E! vF0 `_{&ѾFk_p/BiQ5ٚ64-(|7_˨pW] L/RQ5k(uE{_c}t%s1?N6EJ_h":l`T~>.iYX}, КᯂCgy`3`M} ]]1Oa X7_uCaij>@7H*c+td1:r@aUQcGh01"3bZ>ftN(cx k@4Ef+b]$g o|x +ʤZ; .+:G-dmC Q".^ #SUʿ0_搖>myW33IT?ծ+L!+:ğK:ET@Yb mŧF5_1 X3mtxqc>oK=v*&5kJ {-R Wz8az's>9geTC FxHQ@p*M Ŝ?[2k]Ǿptɨ|e\|S#-7+wPWFJŦ:3/ob(W^/#uL%|LּlV`0 cEF Wrv"͉%Ur*)lr> }7P̃-ԫY10Ҳa^3T`A9'4 5n?sVn v[l2T*3:O$+ G1KvZcho{S@_u>6Q/TfTG`AvRJߞ1k%àv?_4r[%)ur\I?  i{R] _~ږį=.5|4Ij>x.QR1ʴz EH1;PxBJ YciU9o}a'I8x ^ZqYIL̟(T B\˶CK\+pH:߷TXrz)S৪71Qub1/ s׎Q-Zas`7  ZsfXIX/EnCe͗tOcbV2׈-l%h?Um@n|Q"(ȢӏY.Θ5e;<ӱJᮟuLߖkX59"X5,n ]ɇyH F#;gFY~=65ힹ z8sfa!ĴJ+%V{ޮjhۘW8\O0QϮg сlS\0ӆּfFlp|Lj,{%9jfd}DCP\2!X>ح& |z3Οu@0mou0& h#!(ri Z'TD=lp]:>HuuA-l\)+9|~ nA4vX8+-HPwiVAx  GՄ sH+t$ty% V:&ҦC3Qtcz]zhCOC=ؐ,ׂGP׎2Sεӓ9h%OSpԌ5g\|1v*K1_&T%1t>ӽQ$\Fvy 0^l3;" :EofN<҅s[`q> k8ߡqn3~iW”>:QEkNf%%m ATpw_:_ Uio1~/qj5,1u#p}7[Rp+~yy'fgTfKM;Z2_챒U_J7Gr6X7p`L2I*"ʬkgrӗ>`9R <ޜv 3Z^޲*_zzx͌FQ ]jR2/dz Ex;_$Xg !D@KsA2x𣻚boKmo ݃8[A$,JJ(&Lwߐu'$ Q)9#4QM^d>7B4ЃbŖ 3_amޓm|*W$)-=l_:?ͭ*ϐ͚DI TPĕUǡ+3x6NŶ=uہî^V%S ;bf . vẁnjLͲqa֤to2v|[&v(}^&(h1s`垇(텂ɒ~aOד{RSKgH~XYFm]m`қ }J.-+ߐˮR"M1foĵ8>1Nj> o&1_XpEcK"Գ u4AIC4yvޛm$įuH}vNj%HBiFp*J߳^YDb&)4Hf;됊 i5jskbNG Kn&,yrDXj^r!ԔP; LՎ5(ZhG3ظ ZJJKS(Om7Y5.ֶ @_g+a sAVHQ(+{y<2 qW?>Hqu0h(LIgܲWnP|2ɯS.뇨4"W!~?z=Sc_d SP>!V/ΨOQtJQσ巎c&ipvm@q#Tar@ztF|Q&Z;d{%K9JV.`X3K >ʋm6v Eד%%s5;}%]lfX Z!\/fvlv aMnT+] KUz%+_2f%p-K o#F.Yzw&+ 91S7)4m!&*&ʶ"`w %wfDS\f{| &)!Fӂa5 7w?Gؗƙ\Jm6}U)a,hy9pQD,}x'`jaRz;|%5BJ <5X{;7_HQ`ҳ_{R‹geE($Ty ͘H-7̴ ~I@ˤtYiB*,@yxlZ IsݭP@Lvvo8EdV:THfe'zSi4:c8ZiJ'f|\ZQX4@M_rr[ԕF>.&kf8&AtHMOdrwZp"+~sJis6?ַ,+nB|*@y|<ϼ&:Üň)ĐLirm]]kay ;U݄llK0a+L~_]ٷL,~]I|Y F#4A]"H[5IpVDߝ88{1b6*~=Bӱ{۵gB{u8Vc| GJ~{0pm ”q:j-ڹ)9][.HwI_G-u"F9Q4{M͐Z ^ƌ{lOH;eDKma,#Lψ{1,貦Eu*|ԋ`o'yޟoO<C'TD T̖чxF1PKZʞԕO[̞-v.ONƦ/&P ,ZԲk(HQazp]; oSfzRLa zŎ e*&eS%z!(Pؤu/bM9کIbwOvм>h3 [o=Ƴy*vzDm9r|_Q5mŃeN~''03SdN/2qXBBڙ'p\v^A׮Hr 픺+f;-\}brM~rIQěXCQA8\8=z58JmVm,lxXwC^ ! g`&Jmi8r"פJ #[C7Yow#{$zʛ(kv^1ðU4pP7 R*9Ɇq>Ms;'O0^rnCpuix-Ц}H٦IԗQKj]h^z:{ih`.uAd39g du;f1N3ۿ@un,K/6M;lz}>JS56r"8NOhJ:o9w S)cPO' '7> cRh5MwSD8"5a6ilutf@JM=47. M^9}_Au^p^p:<,p-[=aq#Ex$tV.GH1e }Otmynnxr-;?SUp,~ qٱU6@#9f[ϵloɞS8w=4_}=yI|iS]#7.DĤXLe-+N6 [Kшz ֑-m$3 yVRM œR{k*5N{.FNv,YT_!h {tDbtRY}: OdE jW䡈J)Sgt\66.-v&9DX9 U͆IUr+c>=3wjT+c/-U_$No^7N!4H[yw,UeTe |YTd8y\W:)SwȩJgdI= \X$m2'7,qf֍[*fy$(;R9:@y|Re 2g#[gZbd/*?kgFѠ$㵉G)QI> G8WԆf%"ࠦm(h56sс4b h~v:X9ӇY$Nd4keEpW]2u+"m#-*!ْDft MXԉ>=qWvȕR^d1YM$i0wgIUOj>|SGLejo'xmPj Ǟ#$`ɿg n:N3KL}|цĬif|aV#+˺L_CP<15ƄgE~¸sk= 5~!er^  眰ձg'Z _f9kGMrYli[1m`~KImP^hw!~#!hUf\%0g cᴴ6@4:|n\m_~Ľ?g/)rXdO R֥dv~{>Mcq qmp Vs o%qZO=ط?dX+X-; teiP?`՞|^s%,)i~C(YV%uqyǦELz9'Uڵa߫֡1n)51ˍQU}$ۼWů`sący}l:4Z:[CC&5\~R\A*<`ؽ%ß: KRpض)BRew|_fJO '6Q\25h5$q+oI,Ρ螩&qhz6iQv)ߝ2,b(N 6mAH &⵫Ao_ QdNL_ڇs ϫfjhOU0a|Π` fUp~`|$B%Rԥ3Ď=r=ŲJ 5<,IjkὔOK' kA8%|67,:_/g@AhSk|kOvz݂!#njUc>tDaZI'iVW^//n }_,j)̦6pԜ'p@ElN;OKq(x5(E|Qy jЗo|yUH Y('k+|:ra_E?$Ł=c?f)aKZbm3L8YV˃>̚9(ُ`]䰥$NXd{752 _( _4(6Ά/$ӹmݬ-ϸ siSA`d@Rۓzyj,t]]kt+q?$0<Ο3RS}sT5j:o3 ؄%;@og/9xi~ y?m,Yq)vYYO4`f9ζ`g643j~ (ۼ 眝4oz7[xZ,~g'z@8\QnRXN֑@P`_珗V=P=9DyrĊm'ه.U Py o͟h强ܖrWbO, C &2.*?(mn ĘloT,S);u4IJK)0=ZR6Hoc0Iv/s ,g#Zc/1#Br#Ifnlm ,>ҤIW'(ק+G/7،dNtU}i`Z9cj2?Y[G.$ZB` a]EvN8CD)Q8*~E)sгY;eT_%_uTv`dCKŇ1t-;-uAPs;5-Kq[VcDZ5ei}Xӫ!𠑜O:y߯=Odz?>Hʱ>| jπ3Q&f9^o}]_1?bzɋN]G?D>+fpP4E3IYwqluOſIf~?`Z_D@*pi-87K)we%xa펟d!V{M%YnJ "APYWH UwWQG!e"8 I:%aF7tlABr%.|)^H$ա[ ["$4༁ǛFaQiDA#_%6!}sA㓴2Q=90P7iwۿ|7ۺ {O_r+Z`v% (S}=KY}QQq'35NЮ2Oٱ>Ը1 ij>s ..,~TblS/߻ 74?p:db&Z h&R|uPuSn|%U#.zdlRXFDڊWxuGPYERiK?"ϊ$M)#Wy i{V ^0腂pcژ@Psn %;1HF+OX 4w$&W$v4|pIgH7VG_`^;"Jcu+b;Pmbg4c/gjQTJkhiDW82AI&n~N;T3%^lfsP `ӀR=׵:moTw,’昫 B]"f)^1샟ZMȈg4EFh1#؈"*Rn>!bN{Oyډ>Lz7&̣MЩ6 B<ס DKʦk`Ws/džRnbY$ gA ՙz#qMә['ҎAe/ ٍ4$yd;DP =ʝQv鈈*j:[c9Cr'ͬwͳ4lNJ'pM*p$.HzT[rF@2sO6* dYOіMt C˄K<4h!ՒY VHRV)cMW5okwNݑYuO"\aa욽 03o^\B(9?3C Wl͔È-^I)o3pZttj5L+ܷ{+:s\~&+VƏf/zPJSVwT Xv!qW=|zzb%?t[cJ HN.~xML ~Y-.mJb7gs?zlYGⵇU݇+'6Nn+ XMpc9g_dO`C! > z<(S#" ƉOnZpPn]ɜ>lv%dT[f%=um^V2Lo1˲̼֓ܠr&(J=>yD>nKA(ή1竿E*nаYz8;(ArSh/P涾Quhi"NN/XǓT2#[Qބ 2?x!gk4QX&۔mZ*kV Uۡ,LQӬXjR:a /z95Y${$ ֽJ3i֢E,BћMjR qCK4.ćLz~_#^ml%}s&VB TsÄH_n qŽw]䭒M.c})Džݼ<F 2ڠƅmY۳ rJSNX#NQPªB_1K?524f[|yrbΨnن{Xu9 P-7GǐTzFa ML^ **BPPU0|̅xN"1vS*mϮYGzL2~,SVoG mZ0ibǯwd郱BϘVqP2$_7͇( ܅jٲo>-͌=ü`xb\0ߎlHG9w HScGga* x|ЌxfFN݂:^a5dXfUa 'g l0d7~^6 b%iSzh`Q,1Y҈| Dh}K+ 3V5"ϥq*6dDq}gdjl!G$|QThj6NhzEۡr4h__wX&@<3i={]6]p' SnN&,Ɯt8_S`._5Iمzku ^4TDF[Tu)ӤKFJv4.) ]  Mԥ&պ-vZ/9KuY H?LۖnJgqo @?74J|w?_g/64i@t%Pvm> 3YPQPe%QDRsYMfb4f\kD'4AVEHH ^y7>W Rfpak:بst&Ffu١խ=uOiskI켅3c`;| nR ?e?$̭0g!qJʕVGPUh!WFfg+pDXVQ8cR>ɩ[͟Y *R:jH߅ҚX4ZoI_dָT|{%!W"y@ҸЕ͚',B섚fTF{@ sc1*aMj?^*ZẊ!M AK&b5$$&B d aF SӴYT>$tsaBmvA5i'y?EJ\Mi, r m]J\8IJ$a+[Mfr-QbߌRɫYH K;zQ?Ztڊb|u1}q`Rt|:z+k+cl D:a|締hԋCIA&eâA~fF7V5hm<~u$s5YU0iy&|ڱC[:owb. v=|Hn{kZPBLl,adރQwW]ϋbS}P?Է6[̮g뜸|n&AչNMD[eDh`#_!O O ?2S6 r-B) Rħ"Uբ-?I&X.-tsBɨ&FaIDP_9XF18.R|3v3,T+kӞYWJڴo>S?Dd7A1 ;EC4'F˹\"C3=~~Kd Y5q9Pb%:s.GȊM(/;Y:u!He^*b֣rEet,}[DŽWy/n}IUS==tXhScβ w=1Bি)n JV{N^ }GFwҟ K U3 t=oIWLF~܎{Jd|G 95U+ͮRNE#*Y؉mF޷8wqJ`-A^x|cI/ d!@%Z%?ࡣtTyPXcAabfiu@SQ$ܠ~R>Zh8C=J0Bœ(W%b>]_xzo!R6 y/(Ћ+ͤ]7虡c `LYxo3pl[mgCb)©u=runyh?0r2jP! D9 9Vkb٭X.210κ!%&N @OHZgC/54,3R&<[ = [\T6xOk 1fӓz9Y@ȪzSf>V~-.<꜈i3}CiH+N>L%ɁT gU:Մ 6DO K3Ј%XOBG~/2E>C"PZ'po%A.–"oˀU7.%jL 8OsMTzK%aUݻՑdJfc|ߓ:,ǦUfϰaȯzR0dZmW?=%:Z\~j >Sq8T3[My"QCPl{ԂI_,)F|f3!]@RvQ S% œ.k</4mڼ=()X-2[0xUZύ_S [ ՗X[MM1{aR Y;ԟl3v_WăA+L}V赦ASEf!,@pO0q-/_gH|W]S{^ bL4tzZ0T"q\yEY ʰVe\ >!E̷AHSI\G $ MV`@_ɐm$FG V!4kA>fazzJ1x?jslhWvPz>soThL?᫙əASSg1ݣ' q*` T,;Uro #s:?HzSSW)~-$xt=td;b2 K"SXÍn*"M; RɊ?O904EPh|fa~ Ǝԛل7i#N44a# N*kzbE5bʆBkeSWxa<!:4+t! ܮ:HH5~V͟ \na2厇=P7iL@2Fo2M vG [.OBmզ[yPK=kΔg23(" _KDTDZ6PmafKגtnG%F\ZZSwQRVLO}+3|H%5z#^G_zM 6 FcY)Cn=#Q U'# [[|5@Hta%oX@_e}z:SX {[He(maBg06˽ӶsSi/-m GkJ ;ξb>{gKEh'Ɛv7Vh .Bm'n$pUsEb"lM+3t_/o0VoB 5IvK1Jv /` +uˡ=ZQn/}+NpS+ nD?a*cV LJ_H@O%đ)غvO/5%d$ Vksy@ވ0A.?-O,L{ceMBxp +tuŨ iSFILds~4@:[k/ZX%QF'uc>![4NOX ^[*mٻjN_gn VqHl:0ZeY=Y<ղ}4C,k2/N/MT5{ z2 |7DnɜǑ0u7cJܳ] Fo񐔉䍘>UYʙDv Grc ,Pf 6wf;:U#T6Ծۛ^YbF'&LfI'ISPbDvSeS_=.dB6:]*\J*].Ǯbz; RdT +#vh-S~l*_`]Wl u -e Cb7usj|Eօp9M*i;ni9iPUSzi~9¿fp$ (|]gcz~f~ ֠ܭ6@g ,:|c fGp(7lr>v>ݬDnT{ ECFDobW, FB_.e0[ ~?7uztAr2_=]ȓV-E|l-ar=B-4zy v)-!#awK$3YzHIl}C/Z,#rs8|ݑ{9Gosg<_N/ &.:\l pWJWpT 0"wjϩMv~`کi x%N9[md rӛ[;gy%C^*:rLRǚ>&a'K@ >JN>G*|a]|BB+8ޏ0K0wmxK $mPO :I7=,њm+3tTا dhz.o҈x(%@-e*;vTJ)zJ{Byf _{k $4׆}qGp*Em[rseS,w2{2.`NƀAM竉nξ,o@nT9$m.s8Qn^D+嶼8xN7wSvwRᎯ'%qWue>ɿ.DJ,DA4 h 機eL QbQ܊\ΨZv5x> O*) #Qo:JV#GBw3ٴ(&Kr) DK/?ph2;\1V$o[WmV"V:f )f| knViE퇰d%s!9"Hd0 Y(hے9r4g9Mia*Yf5i7 վǷ5#GJ2d.=,rLkd[w4$ف]Ado3k(;S\; mvk`!x oIxd,T?NsbӕORcTyD%}=5 k+U'Eaߐ& K. YV]-b<NɇT[EVkm+w, HOM,놵Q(FH J<$))*`j-oI3i![>28 ے/ Xt/']fo?& }_Ev5`?5wPWfH"6xF:K\g I!=bRS K7z͛ZMBDZ}lMaYT)J*uِ׬ r .r8)t9[,weߤ̴޿Cg')XA nYLf.EUj1jB>D345,|(3J+`}*H#e~C=6mYWchX)t[i)L5*& )ͩ,L鵺\H9ӓRZ˭/EB]nq~`D_'}ɧ* 7]j'zA7\]<3` Z"3lrqr=M.OW1T((D1MRɷVP_YbԏߑY#viٹWT@d&">%*L髧 H"!5`?$8—jn~ ɯLA .ŴV9- xFZ=- >j(Al יDZ L ׭@erXxj2nuyUI]ʐɡ`D`F'ݡՌQxOa3[V7}M25 R'(11dﴔ,E[h#S(:#03YW?md};$: %2E Q7RJN~dT› y%=ZLA򫨹~t~YX}DPz(FtiLli9W[dk~>+_ie 8'Th+>Nضm,&YY_? mtdև8mY(fʏXІ3ty6rot%-8%&<.u/`+ EG@)"9PeQzi)"KvLH^_",?~F-vH L:\cx<6[0/|k@87M8$5,'9&e{abhh)oA+ zk|nXQE%%m`qv 䰤TWnJRP3{c{\ U"9v_ŧ ZŌBUubHُEX9{<``?_ŕ$"3|:HMPGJHЧ|Ƞ Oۈ@MFvxp:*X҄2<>"n|j8U }^-! L̀FT' +:r4ER~FmQe%MO4%~CO1keGlCL ;_I9wzUj1n+:vɎ-ɧC-vÓC`Α8݅}mcWDqHvnӔzeqJ}MTUj'<{K \ APtvSJ|_!C uj2לն41cW;$Ġ"=Ttb%; RKprާa(6\Q1YhI91(Eoςh޳U QQ_b:68L-~77V|pǮ:^ yjhD14y5輗Wȗ&`x =ϭ|y>H?b)`NꭠKCc r׈*I: R2P|/Te'̝iÈL0}f]_zZ2Pgݫ c4=J&a~hFݹi,mܸl,dK&o`y*JxmRt7;FZHl_ ·{s$3cc\ub ujN__:i`v++i՛}kJķB"67KM#]lK3A =x8Tꊛ>zj_<7ML D)Μΰ9?Si )_j0H*R,IEꬎV5B*= 2(qT2/VGY ^&. F;kbχ-b<$EU =Ȝcgr@@f7OqثvWr{2ښ(&2WXb2;T2m.BnCGȀS:ސospEۯᥱ p*t^V]b}F%8OOZ֕~Fzz ҵƜ7*" dC7Q'ɼgĂ4PRNX Ik>i:d,SuB55=qItehC ALtR H~*# dGEJuSQF|~O =8Ryn O*T-dtƑ]q2F)HF%Y9RÍPh𲏡Z +x=IAsꕆhe,p%(c_U%şކ|Ï6c[kW{kR-U8l#jA؞k% S'CRK7 ЉT+N)r1#Sܳ9 A[U!DrTkCτ~lS0,ʣ%Sh~^:kD1j0s*sBN*;v.`pșE7u ̟Do MT/$_wQk\UߕbSu^H/U]s0'[&fhR)d0+i#egӿ4P{m雯8hm">iv\{+oH HN+Pc!TBވ,`^0!zx֥/" .}KDJb? RՙxI O5<.`_, =\<qh{B>wSpt{]&\F#j__>#'Z&͗SoBfgym*CΖ9Un`1VnUR2Ltc[wG;8m~Dd'۶GID Coh~Idt~E@234}` >Pd 7p?PNji~m]?z]RCJ:WD>֔t/j3+è^''4`4a~2w3 wwu! "N8&y3/ 3: (E!RC3"m-gtf\Kb@4}Yڬ.Ml9Nd"Tn!H4vPXʗ==8 I v9{>}938eFnLG!\y2C]9J0*R>'uM:ԽbDZ2ڏabm<슇2.&CtI4qFFsĘ^2׏|i-vo;:˃aUcD~fe^,eE;8_r쯐=4T~"7m_ɶʽƟtL< \ Q wws skSE͑aV(R;zon@\6 IMT͡1U H~yHLMVFEQs_"RXZM=QvBSxaM6gw'lO:~p.B tua5%2]7u+QީaO Fh4FNs R" "rX/9khҡWD^\%`&+h('>Ǯ x/6N(<mqԥ:\JRYIlOL$a:E4થ<݀?JLpψ'\9FG m!zIv1>kTɹ0Qf`P#kOJQ*FgP3WȪ[ag4z>XYW٩ǰ.ŷib& eMإԱUʛwޢ@25Q=8}іlKmwV>>R2WsaR1Şc AI0헥Wpėf6xU[zQLڿ隻p_g*ְT`p^-(O^;PP|=뿔VPKИoWr&׀ld|>7|7>13\<7=qÞ.@(Õ/ gb[M3>iFՆ_Ğ~ }=g%ݬm*!*?nmJYnŠ˹xʊТ/ND@Ism$W8`bΦj $HD W,ܟZU1IqpeKufL_nˣGhk- 2'G(,y( *i>ɝ+p ˰r^T=J`|Q3]CyCB@O1B5]pq2(hL% Qk}%2([t! Ͽ@yy7P5T)%)}ӇV-#^q‘XxБ<4<`??L#'EZy3ZA:4dRz:T*x:qx:}P鋠 9}z3k8HZdžªk Pq-$˻l$ό~ ,%Sc.x]0JQȈkYJ(zP~|VR ~Ru]y-3ى g"v-RڏmDٗ J+0לkq*=1EX ;X S58f49'I&~7DRr\BM*:7ɶNu=k&9%ỎW h8=wRAQs'wʦCAޜ Zc^vc-7 17ؚ$&sp2WoCt1%ZP+!_qanI 6]_U^ *dMz9O9boi:8]ge鋳λ?[ ?OR{o+X&2Ԏ[/kQ5}^r CRl$66s`&I׭rBDzUq6~~MTL'iVxư gtGDy} O\d;ZK2)n:IV/Vt+Xʾ*T$a]gKt+[+QH|zrũ}r=gfX;UIkw X~t'>Ӛ#^, #IXea6ؿ/W ly@ HKFi@ҥ<]s {1djL\c查"܂{\)6xͿEf\YL78/M8B?984i4W i|#J7#ȋ[<_øg'n+9(bՆ^?I 9u"cLyO,)P?( Jky1F=!\/wRť d;$DI{r.")A?utCE~q|jy%ԶM/(j;;c2 jy4=bC8=D/?5:< {a+J]фc9)V6*xomlMC%D=$뀬Ǥm yZz6e9J{ ˑLahgoٰF,<c=)b1p6ek5G)5$_bYeh"Լ"bIxn P+\-vüaȈ! ;(}E–0=Ͼ[Aw\GOÈpu~>[QVbI3z˱0ϏM+9s(TV\v`pV-Kt&v:h3}sI^1,?UAO*1(J!k% Ԯ#yX27ԕ)ż4 "7e|uK?DzI}m̛_fgXԁXGzSa]8Z8U^X+ {d`l)4TBxb e~~MjxpdqC`f+xu_{BXB.tzIj. ju f4m[rP Fмхhznq1rRvAi?Q/]eв-ձˑrg早PVHQq-t(R5ùۜ;nPF"L"_ 5~mb8\ ׷I/pQʲ &D\3$i xm4$țش7-l}Nڠ۲߁O=~] <1nZR{MR5742^'+ ^(,t#׽0'6(MO8THYG+C!fcS6UfOǪ]?YȤѤD0Bhca<7zRuJP6LW$&[,(* CtAE ܓ֣01'X uDhZ._m Xg#iXCJVf~gXN#3V gHU3_(ͥmo ˔;$-)0gn@̲0t7̻!.J.xպ%+Q?Ľ tNYW蘰[nYM\h7֨Y0v',ao`H :a>كf(p6þ?"L=_l1B6̐`،#,bIxA_}|Kh'C5n^mDXyynvvq'~ؘ¿7S1`6mm>S7)y{޶t3wJ |KLJr (5_q_SZw)(WWjUCr=!xKnu욯 < e4f9b刴(7ҚCf6CCj}I*pD&v~)/c7sObҝD&RQ{>p-nvyg?kAumژX 2jz̛5 Gh(˴giӦ!8|2` {W5$*ejSևݡ@*]hRc ''WF [3A^%pl8(֔')4PN- }cvKpO 8;{>#BwtP󲡘UC4ؼ{^6-LG\'7B^G2 O!vʻ8s/ovYY0 x)y:ʚЉ?}<4aKN%65 w_*(yb8&Hev̅įh7AxȫqCyg|հJ_,ǚߘ(K~AM_IaکWŸj_Gj7ygWZwrp?*I'65cjo↊%rdSa3} j0wiw.B<9 ~hx0)G H>x\njTxw3BoȅQ岰zȤc)|jùmp`ÆL;ZxUK=C#u)8M\ښi37w 9wn[?pf6j! Dj6jۧ`'u(5;"rHH7,ept) _d}䂣.W!Fdh+@:ۊ4Fa"nw.  [R7+ɼa(HXnO:bTaCKm0n^RgʣYO-:{7oJk,kKfChIkg>Y ϣ @@B-GY5^Ohf3K[M_$EA׵A_S =0X;vg̦WX'`}@UԪ,r ė 8{nQ58_gʒ'oz8VP^r]YM4P g#Op[WG%4Xі)G @wo|) 9 &rIhf΢e< ?^!wW |oZ͉2dpj$mJ0u{bv^Eʺہ3hq9_J趓dpH@#Ȟ OK6QSQt`t./f;+9S.]L<wIo{ 2k0SΧ_?La0fnˣKr9bT&x׌˰ߖMǣ /iS4^p彘L#UK o`|>Joc"rVq&#MaU B€cgDr6Y]^WWVXSjf~&ytd~ }FWt!`FHiubuF8=bG'V|um.}M2 >6Hj S #.#j+ |?'1QFU(/u2q0fMjf8/v^*͕ڷL7Ÿe<5v̍X#܅ЗcGw:"G 7ϸy ᆉ9rms6*v<Ĕ,`|BB~dEVob~A+j˶z]$m_ںs3$@vM+vDϪ!1uDM*UHpjFEw?ꔉ[\Rl4Ģ@o':J: >ͱVg(F`xg*3ں޽m3eb:*]7BR<5"OtVr6wr7%JQvEAF(7 ë?ޓ/@jqaנ~$c|cģ-p{{2:Q߬>kp`P 0$^Ye0|\z 5Lm@2z*|:oZ k`R^|,i %[yN`$NLWCQWf:KeSȠ]qs\>$2e|7χ!\%oP\Դ_}DPhW%"079,9;h^iaލț#3')$ly1b %b í8&ZE+N e3~d4k)/F2D1J Q Kf:o;k'/U1kһ'5$ǧ|"8-| URZ!i7g-h ?=:X=ݰ&:~uH-Ql!0pơKfO W0sGn!>mˇ=-)cluX>og5!FA4 n-{LF/'(i߼ZDJ`fXAӺa:J-)zIkWaXUkg"]Co@lHo^eY~-Ffף }ͭ +O7f8GeY9Iz밼'@pPE"+9&IJ@KoӰEDz]/@Vc +%$7c-X@qGN Z]BVc;C,?#@:r AwTQ-v4,ܨ8ij"[XĚQ-{6cA&{- ]|heױ}(bO )Q>U@ vbk`&Խ<R-%l7 /0;!|Sѧ1fP=Š<.:Bwo=+a31+PkE9{0ѴpnH~+P)L:HVU l(O>G}~Cz&Rdb,#?֝0 {HfBRW} vGC`,^Fq"i/% u:Žc_ 7Wwl'ca[g @V/-vӸ0 J~'͉#geYKP 񣫾 7RVqJ@C|poMt)V~cц8N5| R?t(Pג:D[ٿ}4k[<#\Z!qJz*/?i}GAC%A^|kB,yb>;PyPNb"J<3en3Aqp.A*h&>ݶk1TV(3( w xUZD4%}ZSL8z<z}_Ԟ>pΦڇlnŨ؁fQKA뱼)?_o{A񔸲 6$&Hj>S/`F ny:8F.1taNݳ([/?M '玶h( hX,Uy C+u#`%СɌO5QRXeZ}Ym4$aWOlRqL&XBB(#,64-J +*LAGㅹ>=Ff% jE-XƔ&DlHU,y%.|&]5Q-,~kuh{a%KzL{ӹ[ & \묎ӹ';jDK*PzylI]Vo: { d}ZE #ɇ= C40ڋCbd6$ah?:I`.[W8V]>1R!ׂFg Gq2{ л8W&:HMɵ(es&p\}P*m_?#s/W+2v %u sC2:!W~Ǩ{ \RnšMdac`P2udpQc HucP"2[ Ⱥ 䥋B/Ǚ؁+F~{I~^ R9E2+CpȀ:W%*+:Dm}&e6IjC|IB3Jh/Kj߻Bߝ jOlF,.EA|-G;"!hs|ØfϨmEuU&V 0dgC8N+]a(egۃhQp%?ۓu$;\Q6!ǸRT( \xfQRLD3phM͒*ʕ^XFkٜ6iQC.i2|ji„Oz CJ~L{Q󌥺biJi#$sauHgW [1oka**vb:I5ӇyшДo*Ӿ=HkүM6N2fW1e)o/ /yF+ܒZ 8ݷɧSI1s F6J`+>-G=+m 7w>p0D{cjR'%Jo7bǞc$6}2E2)Wb7 :5bB]kb:$/Iӭi\i1'oLQY׶vO3fd%jbwUg9/JX1)j7.-nxR} *Xp5)LИUZRGɷȡ+@djJ?[k]%ҙ _2Ղ]X=kuu<Lu C'{hN{l-vIjdkh?b[fG<ߴÛtYdEJ4*seEe-;[D ]ȥXeepRD2b$&@ڊs32ʐ9v)eM'isLb ݴ(}V}ߓ>V'%džҸ>C pEACtBк7U(ڙ 1Wϫq5K'm}["%Qk7YΌ/98c#":Q&!W PQ5 N 3,_t"")]/g-W\F6*63SpUF?c]Ib\ Q?,DŞi^n5@ήi2!i;{d[G!#N`d{I!,|?qۇo@H~Щ\h:POQ! ϪNPA=\M #ONT;35߈hOU_Ρ `Q{wJ$5}-J<;[ i~zut7A e>GK8 OE#jPGMي7}="D bnIppq+G%+nڹUL]X-g -M%t6n6U1VDk`} A-͌KtM#~#rԶ,W49s `xz_/,QviItqCQ)* SOe؀&k٭ 5΂ܤٙ_PkS[+W7al] h2̫9z?_l_S?**Ot˭zE}}wB8efM_ wlQF<̒oԯ.64'~}?BDıU]ylA9E8³*Bz5 -rFါYK[w >,ږOѨ2͝d١Im %"ˍ\c-T+2,68A Qx̺}ۓQכOjE 1-!%$%v:9Pڜ݄AMGo&H cDQFC''6=lpyrpN8=}ԶibMиAcz~QP2 `iJt {>sUlf%S6&(Ry?SEd-%k+3J[0PI^JlO2a `L~#S/˜MZlL n{,߯H} OJ ضLKZ\QrJς`busX6GO;>[Xܓ|?Ď\?!d΀-/$,  <v듕'P~ۭOk#v8lM.G TI _d[[~/Vq/&$>Y_EF?e8m'uсl#a׼\xV6k",u9W٩pP+?Sa' %TeGg騦"j-wAؔOuiBLn Ryr1R!%V;˪^] ssPNqba<"su%x9(5Y.Q!Qq3T e@w#ܲ_+~HɧycE">tH- i~@3[Q /01s̨ Js@?e%cs_/F u,~ȗbP"/b~ZV 'Qg"Zh.3; @9HmwЊoI ^pG}o.%qؙ;<xZF˗Tgy `;oIj\sri$ JeTIt%2 f~˒A&Ӕ@_#r{ Kc)9`OB*A'AvltOḻ jnÈ(qTO!\Ck/Edm ( R8ҩDDs6.Mo^D*F҆~ײGEMѐx $:*mz !:CX%G)N40f dǬހجfvB ^\sX}C_vLba'L4@?әsgF_nH.yeE'.?VԹk=u-Y U}nSݙxi|d֩X 4XyRЬ2m~:I!aNwD߲nHpG)WJb18AU~F"wQ'qH;JXӐ|9U#?XL.?^#X o30pZ4pd?@3^[Oyt Ϩe]0FKdPB̷6rd]fa"^4O‡]9~dԻ_%IƚL~h43mF'slX7e[X$$X(T9+ *OA@jKh\|?B.>&իQF Ni}SrgJPA?(>tů,~;e$cO^c6uӂNTf*XXoPCq`jiaH'(&6ݮ Ѥ+zYdv 7ڐG4C:Kp!> ҂ncG b{x L^@ aFW9qhMU7w <51 Tc=|J'x'lYk֘_LJy/-p5l05~S rN:qkxyd7˒ p0 Fd>&BsSk҈ʥ#Z?)4/TNN'm'<( נ.0*#zdm-w߸͠Y<&^wvGᠧ\iR+RAZ7DD*Cīw`t`nk]!Q)L ?95.b:܍R\ t>)^j(Ϟn8w@Jlz9jkaZ ! eNj ւ,r71؝8+P&~ą )2Va*)Au38R 5lE6 ZbܝOxɟZc58,zg v7\qίr ^H7 _O vTRgaTz(9Qe:6N2qAm4>vH!h ?JUΈr;  AkS ݟ]~ HOш> u6߱2:JR.} jîIz'^Lt#&@lUZ-\ULe9Z#g[*?jg0DSA(P *-7 jĮ66 ^xЖEqaf#MM@d0{6v%|NVrh9~gM驲?$&%XHA[̰9ay2¤a{ s ־㗅Mq(@6,8 &n+0`kUg 5m<44lKFu~pWK$Mo ~нͭp8 qT>1)_eY481J$/8+T[@[FcnyZHL`5mUнOOe&6`{fqA'#m 剡_ (_U gJ$jyN-Knvkav`b)YN1_@Ojs br($YXϗj?K]d dqi(кJ,@;Y/p&J5cenyaFۍ.u^ƣ\Fx&_ {ɀSgdzj-ϧY0|P>c V7Yyv=@pXz ܌EdJ>öJE4rC"x94L hϓZܔP. NHEBTRl)insSz-Z LZ|1$,- -dg5WU2W=ʩ}WtPEpwc<>ΙԷU_,/f$:gyE!O3`Fx;nKU!鹞)-%Wۨ`e_:zd@e+Ɖ,bף͌k3{K9rGzs ZYr 9 P7)VĖh}[O kSPP G`V9gŁ] h_;ARu_呧 ]~L?ܭ0=w. iTr[ӡ&GH]~`PɱA_1ݒ~OIU$7ZL'(vh+:r)V$ZL&|\=B*)1\"פA 7++A dTc,I9(RKuoߌMs 0npҗ8<g[;;r]554z$U0H@~Y&>ὸJBG]7I}*U |Hyna+F&UQ:Kbn p %GtYpOy:+݇{pρ}iA0y#z(4V' 4Skn|[m[VYpI z8bဉ'wYތAe\`DLMH/mS8jbedkuGpJGQn]v'1c`=J*fzhN,'2B280ϋӳ4pw>|m䀤5uZ ;BNg]%*>M7ggƾ+dimȊbyԴ7L٨th{!o>٘.lr a,Wɏx@ȯ|!> ڔo`s7 PLdfq(('Gަ 됓Y+̲,7ӕCU&Li@]?ߢ}!]ZX޲AH̅WgTWQby]tOy1pZb~ͪ5ik|XfFED +)නѵ g LgҠd#zg1Vʫ 3>dJ}u3*pc {ӿN>@'SdنQ{|ew1I`0 9'@n9EN.ME=pUhj7%d:n̯skZ@ Oʫ Ǡ}I~L:9NG ؜dbe%$sz<[37ʬX}҂K*@eNSffyOI3}n C3Lo 06*9,Y .Dr]IETkAI? ay@7,eT:7%[49 +LfV` g|9OFrCc FZ(tTաoC(< V["ʃ3#h]IJ3RC/^CoYpv"L-d T#4<Ɋko҇QDYdS4:7C({e'ޗnn.ΎCΒXB(e[]V,}۫.gG}S&Ew^Px@qةzv"c}$zh`+Ȭ$/fr!oDupkd&nDEJ.Vu8v8춶MY=/zȰjXH)ֆn6kPhI8<(O.A%z>)yJn˚@,"2ίNVG$yV ?²zʍ44Kr~8AG*/j@i:l&j6D 4z$Bo  MyzΨؚSr%K7RMN~ \J|m D mNAp ̎=vU#q48[9b|УosHgSJ79uբwJ̶6{8i@_- @gWMF)f{ +@z5Jp]sCMrÊb#k',hHʾϔ=v;8ñ #s)naN(%J 2ѧ_g47!uJddn%e5|0+"eq~̜) %.W%R)ۧ2<nR3oO?tMH'J@=Z&7gAm?-pSIѸXKn֠UK`ݧju zlckY`"esDfZd߳۠m1&}r9D)s8xV؈nӀ5+2(9cXFL)8SI;a!̂",92y{/Ӿ r'"FTFٰ wffcX1 dM6 q"QOB6?0vůmhO`cqPB/`/*W8y%jIFвP]MΝf 3$4ؔv*+j=sȾt&Kn4;99gXj3i+GZ06qC퍝l0spkL[dpBA8_.}Ν kׁjdI8ϗ)Rd%تx%oU GKR:q~oxr^šH%DGN=^nX]L[ @ \Kϥ 5D pƃ m]1DX3{5E |76d; n@ub>~Y/*` ?..@yknDQUjQo荬w7!K9/,)&Cb1f@mW*ʫAu?kDͫȟF,34$Z7qAP.3ƮIS^P~&( $i*xIN T\;wJI&мrz4TF1ӠOUqhz>TTZ%Xd-n͑TDSZ,ĉ; r¶D|\wT f^=-c$nn),_q79μDF"F/%EyE(U«ȓZqb4a~Lz,mBwoL?zV1ԙ\04y]*a^-!#sMT$$ܛu]>.FM>u8Mj.)DmGn~Ռ ,*F –M0xm5spNK!U(Ʈj0 )W .wO<E_zsBtx6WRZn0bm@n-^nQiLY)xBdY"cס#%n@,kx@?lK_v B´[>J$$:'G7JIsV_+x$ZȾ@q]kBsr!,5&jyڸ$tkqD/Ճ*_4^!Y1Z^2' bQO|ogNq s Ǒ%vٻY  KYImBi{'?H8W&t]A!1#ֽLpH|JT„1ao 5YHUޚÁSt VIj}2E0lu-i;-hlL >d.+tZRUɣA^*u7Z8p: 0 m;(4 dX0~k=`vG8NǶ&bܬL![!vN١G=@b+ф\Wyi}@>#29B =)Lqr%1}kF)$wOeC.Tzh6+@mm^2hGQڗHTHnpB3W?й’/ AiYXhKGPggMV )5@ۊN]{/R*ߖ֤ײZm=LySmtY/"~x]Mp ~.yZP$QSs܏FsP]HCQ^W>v\ZNkxLu1[uapj< +Ļj iLٱ\ҟEKǚ8W5Ř !ǠuI$g DX;^P7\X>f!m!̊B4C^[e Iw1Xi_T u (--| 8)dN8pCd'B;p2J9vLCڛS;+3@\)Ĵl ۋс`M+mHt[ AmglM}V$|޻e ~ecL^,I`b%R>/gb쯁͑>hNXJ&$ $ ͫ9GcAM; ۉ"<;na"%Ewq7u=>mM"&}o`inUS`#ϛCU.yNK,@a2EAԉpZ_+|wb uNi8J-,eW))8Tiww 'j Ӽ89ef",, 0IFIDTb3{."E%)wo4󮵐L~Y^Ѹ ST9n$d5*]!/{'o:'~/~CaϽH@f%\]V`οeϔ:TVQ_EX{;qgsU|m=0٩)F|Bs(+g!Z(3R(jvT8j֖q%929rlMJGb`֑`g,?PΥ'6oCW"XPY)n z1:$LJjGLƬGs )6yv F嘟B!['NE{ktՂfnX6_ҿ+-+;6jaGJ P3#eGcI;~W}"SIv 6!kkt=<uܘnlzK5@ JMڢAhB$0ѫebb8ȚQIk\e;OƗ@22ES ZVװz|,PJu T飵8ROxgςUmrste& [A4ʃcy v:ʽznۦrOGr";`ʝ#!uk(k7|n%eY-G$'[5raP.]@`y9&j uk<\tAXo i֖+0DK1@f3er_ϥQW9/0,~[DF-&x&{w)muWcY'_*Uޖ':L+T0 '/K(S7B+%<љН*m &POT l$0GIdɷ$3;z],UŽDUVj*^7iZr-pUmzrV]bp3VyVjozaJkJ!a}}{va&3#noǮʏ1{5V"Nԗߣϵ-#NLuBI[2-T<$c-I xI2BX) ]WsnkdN[a KہT x?8;ܫ" F=a,;-rK}<-^D)yQZw2tttI˫Vh,&Lwvk9S e[d@jP8bP$ ֓ "S!C/{ 咛jK𯔧T ΩyM&>T)4@^d*h YF>wXEW|xI_Bu@z;E0FH[\RZl5L^$+'ۙTiw Ql(]t]C1#BC>, c>ᠥ;E? 阌ʢk+ \H3!P`G'ѯVЙ~NKzfR MzW2LAozi r/trf$`,9 U.̊^KdaJܿ|8DB yHvYy(G^ ."d-[7G*Pm>Cfxt SBg$g3P=g9;ss VSUjP#2ÄΪi/^Os.=j[ mز 2ߛ_B;`a9 F)H^JM2ܜA8dq~NK-8#=H^ syV"[ЯgY J* eɪO׭mUֽTrNkSu969V~ral"% S$YM1'G+jQD_`!0/(޶y / :*U6b!\`_MPP`#1B8ZlkciB[ǂ#Bn2>:Ej9jDЇq,޽/z ^t[Y_Cìf@ 9*mL.G; \ б"8L7-?V^_!:j&UmY$Zgg|\MR B$.<(Rݹg2|*W_9 @ L+S3y^m#A,$NyU+ThZtl؍ħZxNqui"}p?mœ@H$fW`Cڂ?.X,v 2u5 Y.)&QjM&TBA`hx] ;u%xB`i ˰"F}pEqis/MǞP54hrI+꯭{wRj4Cdm3p2Au靠zn~@[p= HWO,ojI/zt&7 BQhœ (d4t |#]f Jzs=ftph 58FτVAݹ%>=tl^hJ] PQv%`}U B\3qsu ܝw&uwAhhѹҙkڀ㠽l/Ȗs՛|˵YAҳqsy!_bnn^H`~V qFƇ_#D<4Fà S-s&L+Vz'Q~J> ։;Nh|^S2kRsu%ؾH5SH1ՄX q0fɝ}>r e[XrgeAȐk%1 a@'xm%wxD(6c :YIrz:W.A(`zܵl[lEys+c.9!!6jSVL(-zPBBR) vʖ~4+ϩK=qEnUY[n3^ڦ\Vmz:JO Xz]ZW?K@ݜbKZ)|i\??fѣ ͕.ƿy1کkt iCTzby ̋4N8!n srAV!L2HZ 1ёG8t]ɟnP!UѾ~_1h8H,sIY'0/> {ʎ%5>fPv4 KK[A6ӼVA#f$ϟi. ٝ )qVޅ_1*`w>d -X9ƥض#;j2hhyw{dA~ _|w(M_= Uڙ}]&d֌w#+N@PA(y"z5kBt]MƟ)k00v>7Ⱦflw1Uf,8_(V:^#] d垧C݃Z$?,jKD¾8.6TZ|P$ŽaԐ*i6cs>D}ޠ`2|ېcвEOTu8;k)n(TC^|َ6LWS $[淵Eerie9PSm4R9x\VYH)>fjH#Zs[ ;'b2g:U4 .H ¡`g:R#]=hYN#[>qӧkNj&dm)c]*˺kؗXgk=N޼߇ ]39PBIc't1S1qPu1?&1DwBe;Ao`Scq3??|*/S,Åntmu){:CkĝO@+CFE)ε?J}~FdjQC]|mb'oqqw܋8&&5'0# `^] iU3H*ۃ~n/]֡;q40q2JYAH^ǸEq /<,^Y)Z] #zMI2;>C }H6e|uT3'~};^BX V */xhFRO|/ rgf)rAJ^8X,_:Tbn"t bܨ("ޛ%YU{: b b:zW4[LNC?JK Fl8YBfM{Ꝩ^yUdU\E3Uш(b~>W>E$GG3Ƞ5aDajW!#18`Hk7/nq|GT9UawZ !/GȷiM^9gZEakb_3eاc2c{<tK5wMuCH/ݑ*(FIGyt-Fpp;ƈk>i`K zgJv6Cn6;bIK^k4]sH)쉜˕8k~SCH>$<\Pz@_6͗2xaL2 ,:,N.Wk?ܳBaZq_c\(rɚg kEJg.U|T*r9[u-]m'Лp2Tf-N˟ ʫ>2-DcR_qtP[DF~s谝w>hz-pa?.=F͒u.->VzU+1Aܔ(OASˎ;V=[E}tCQUDw[g^<{<_2bV83I ;s9)GρM(M3ӦiC2s{4g7**0f!k*4V^_4[[,ꢦu+ËƎp ^Zljq'Dqsd6&E[P ؼ)_ ;+5r7˹;(" UzNb*u0Ղxف[+ΟOZm.,NdԴn|P }t@zY1v…5-h sȱjCĤyfOW^[8'"@A00N!kS9<fV$p U&!{*+T^&KQQ1d/Kt'F\U8S B<$k"i^.gXPbW9m@Rs)gNE`?RM^w0S MRFjZе8Kx~Vז}dߒ{ 8<`Y\ŻOeQ~u-Ҧρgj JgQr@FՔ6;u@x!{`Nmy#ZG0$ vVC{n1#!4?GtOzM1;IEMAHNQa1!Wզ~͹WGHD;D֭>K5m-(~TnՋ͜5Dh=B܅ۿGfWKMTгQ3^="?UoFCMլ8 iO٫L$| F]]_Im!=+ #I+XmMY|XԶd`5oo}~<|JVˑ7Je֘ݛiK,E?+Ҷ1[ն7YC݇{ i0 u Q }`UöIRro —/ȝWCNО/, FMa> Q3 ;Rץqkƥr.LoX rA߭A=YFi'vra'$,2tMxB`楃S)RBlGjD%jho@vˁyGJ79A6H@Big: {¬{dy8Qf7(~u68/AtY*}*e|%?x8%](gt&mʈct>-秜.DZ):4<![Lx|u.Cz󲐗$y_srOe,' 䥾 ͼ}jAFWI^wЕ0eI"6PDVZKe*>W1`vӬ&?]Q}R2_aKĎByᇬ{0w$_rÉn'KzJN1%=jsOid&TrZ *s=KeQ# +m /[ ;C& IКCA }d*1ɍ퉸Glixc/(Aebx*5}CY|k4.DB!0JϹ\Y'uw`O3ZGenV38u^)S~Y+v0ۆԕK`2ALYٞ00TId-^Б$5]Nh&y#vkC~㵶]?E>+ҿ ٞAfnl"@52Pjw//m¿dOM.I^VFw (d; R0hQV;.+.A/4/k^x{9 ߩߓb\(:|\/€sX7yr؏iNmgKzx]0LrJv?lrss'`ݭM]& 1=vҷ\Mjv~93/Z9ЙiJRbg/P!_}_ܷ\_J&K{ld3D4sHE.KYἑ3Jæv׻cOj?W .F[@7'$oAɭW_.Jk>WQJ@"JX1, 0:o=ް˄iʁ?\|+ֹVs~b`(ՒQXKGG5HiVB\h +-T7ю n+`ɽ0-|*cK}%yx$B݀ǞYD٨Y`?[Z;R6%^{Ӕj;Gcb/Vga8 < ^~* 4`aqK X"+P׽Fv4=ROfұeWE*Rdv~ ;%O=ϝX(WG*\}񅚖=2]f4xZ5'HRW袬.Y:iqQ@'sf'f5D-*"tDўEl/ڤ:s\`>1ɦo{A[o@Xwޡr@l 9@s fٕZƒ2~N20C^CX[e@>!;NZM!(<%<.^Y$xyə;Yݽ|~ͻ-}")NsI@5ܖ 16|ד;Ӏ|7G$]mgcy-W1&f[ 7Ps7oP<γsy9Og0lG؇BK5R=^ ]69*ƍs$Ͳ1$I킼xD?VEr }v6-M΄,j.PY: 53Bu$JՒy]3*JAl@T2g`(5J#P(R=e[9cj#n0\\>E@N~?3h.P2H{{:Srd[OHd|qb^tυex5[E(擁|'7Us}۟$Jlm,lV${led˃-?<˶BrXWZU=+zp !+НTaqHC4* ~`P#u΀t_JS(Eٕap k1B4ǼrO7jGK POFY)#8 ̨~ލDh3[;ٗڬ{{kQ !Z;uM,bT-F.M+_D‡\.)LJ#V"fǎ(ow{k{xFMK9/czVco\WjkGK !+G`uxX[ 4c\D mZ c]C Zj6ԼԹu% lb΄A vi#_ Q9 ;T g]PWci%H(YS Z 's}gQ֮Bf1--!HH}a6ӌx:$+Ƀ0ݖ+RE1-@=- p6AN1$dԕP5n~!`'i޴kd lV^hœb†pKs1 ;aC Y݇71A2$ /Rrԅ,ގ)D 9 lp$[ѵfaemi:=LC uW,4{.Pt/\&s *'d"hL4YBq!HLiz?%Mܱxpz;am_ڋy%@9% Apg1Z@֑ yxD 8E^{CԮhqP[A NY)J-o|ne/e>zޗ4H^ V0 t1Ѿ*BF\ dVG+e|43ќBY4TiZ<4XI5OCEa3Tx6eRAAxJOy!il^sng|]A@=2dlL4̹WOk,*k`Xh,w! %UZ_3:cA| ]sCu7콥>WJ#\}t%͏Qrej axa`W>Z~A\z|pe0Ud_ Ara('O+/ȵLqBNpT( %inogI7ȗ}5j=3s@79lܦmt E"mCgKH: 6y"ĵHW&f& ;*{x9W#Y7#s&ʛ){ggztF۴F:{137&h} 뾲-9A]FDBBE lw@|V~|L(PҨǝ6|#~_v*Ў#/ػ-i>O b/ Rj٦ >G67&}Vg+\%ߓR;I_bnV(D!6tt+g0H㗶[)?*d Ih`}}WŜl;q0)7L~v9ErV0[k k[W7UZHޝLҗ̸Lfim82 E~D6y1>Mw6ݓ䔱u2$Ѣ&@_zw~JO[Of%R3G)v;\UTO0%ͫכⲮmV](sD %,,elO,ʯ>Dq4޵V?yf?dtrpʄY2)!/A!nnj(=Si2ޜ4WYRUhx EEQ|= S(~M0C Pt*I[xktYI8  (>[G?U˾.I=H뢞)K "c;z@*Rp+fYZŦ`/0-:)o Ysg$^!VZXL/K.aAX ! q 3l+[pZN6L/ObvdGH͇OLd}ReqoΙ}#1t|P^-/V1_<_u7ZEfl($X7!VnCo* Qe'P.[K˻'5}oL9OEW)ٻ\UJk%Xh Sǥ\wR>ʐV/6.<Z@_ڪ"-;OGc6/ x'Q'h*$Ț:Մp |>&` Eu6W.{d<*lH`B$\g8ϸ-"Olp(u-'*Ld,GYekTM˾7ԛo`66,olPrH')JҰP}Q DDۓ;^5 qHF:~|8mfox.O>8&֧_,XG!/xEH]*bb6+?sSGY3 3 Eﶤ>4 ItwBIE Bzی$F#q-<{ͧ3s:Wg4xL…3E0=fVJ*&_x0Nh!|ϯE  D' blMYNحG|5-JWr{}>tMDٜqN1}ucۃy/N/Bd )5bJͺ|9{ŦDq^,Yrm*|b4!-N(c,ohގtt_)ˬH &boġlPuw2k4EZfˋr1<sĸ?ˋڪɬon&K_HC xR6>Y!MG_ tz NUGo-#|lhaX 6'9wHB ]H)]A?gidIn:Chx1%ɶ&-7=⼅Z`4':k=i5@lڻFv9+?)/xX% Q;6VEdvlDΊ z [qo%%sWMϒ SO~gIçl!&bR=h83>jmxN-4'H><ʷp7){iPˆxTW| _]f )*$QoS bOQH\ņIAٯh;0Y%7Coq?oE.*)EhGڻҷSy`vKJcE;!D=_~&0LKb "^ ##"ap>š 73̘@Jm ָ}Iɟ_dp>X2# C9P`H !I8t WXd_ZqMCou 2zLj  .ĵ GsU\>'.k]ei |0o`B]4)}Ys@[b h R(XvT.I%/~敵A<$_9/CmDX$;rʼn2q$aM25qyؾ2=|ĥ(ח@)+.w~qa(G ccz6j BC>1MXB 5įCqdQ)N]"z8FˏEO}}{J*GԿ5Fҕ8b#++ޑЎ~Ԍ6.bUSTM0eI+^W΂Q,H8jSYȅ\7h]Ro K?M}\}Mm/FU:RsCb!mFW.h?nѾY`sӐLŚ\ a-YD:¤U;$E\2  ˆ˼o6o jG,éŕu"9$bZIi;aB3)h/Ɂ߇ 86[JՀ!\븦<]2 J\d6+Lp6[f`N!MBU(4;C,nf c1K߄*7~\BCقN~=O0^#VVֿ3$[IĶ}C~op".Z%^H}!23*2AĨ|_mT*AS< ҏ7zX^jWB^u1Z= }sr,㕣Y!UjQOvkovήY?W6a 3OK^6ԗNkx7e SJBL;޺^xe#i7 -Su\@Bko_bN}dKΒg]d'c7Lϑ&5H W]S#ha'99}KP^ 꿴3 !L|0)R9X2khqT48k|(؀7[~z$ aii~_* {APTÖMewM~v;lu=M65e= =cη_ZSvgu,C]jĺ߂KPTd"F;fpI:GmĎT遇{$]/Z&"@,8~:k>`EU ʴKӨ2=|zX[3gZ8lj!z;*h*T]/vgH4<& MJ#u0&|}G\cGd U (-(BDul sScKŧx񘰒Ú&b0}ņ.llB;QC ( ~STb&&6w#?`\I},^4k\%EL߸ү;^O.I|+D k$\I/_i(4@])leo#( 91KZӌqP8LFׄc)gPd6$z);shVLv^ ӚvVᆣ[JPnHfi|jt`c*,A=b Dkgl^A&Y&NHaQ-*=Ոmxtue-NkYVө[.zc0^xʶo4dTЙ➨`g?m8So"> !d; ՎGkg:D1 z+B6$kVFyYO@orF'C%q 1Lk#`HtA) g`ehhDvaoi7 ʋ fhԄMw#ό6Gn,Qw+p0|5yy\  ⊷e3`տ(mAHcMՌ>YH 2ܺ<&sf{G*J_RžO(׷weox0d'wsJi扬d ?Z^VÂrݫ`}F2|JmNk2{ʤlx)iGʍԌ {wpȐ[s{1%Ⱥ/`L]@Z|dZpMV-7%-7Q[uc5\pƧɔi;I 6hg<f?S9iMhGUqz_p PI)e|z*\$ hj9wTĂ ]y[#V$߸ϥ0rr./"`z;iϗض҅]{zmRo:O2EhWfմ}HLɺcUu2ËN٥_zz1\׆i'gߖH9ˣ,W"(|kàz˕k̬a­JT'[YYN7/y:3WrƏWqo-N=aS7qa>Q?/W{rXUt,VtxJ6?sSwѿRѶYlxa/a_QLh`Q3Gp dϓåG`TΚO]:X w'2&Z C\(U!hk%jEMN̴AZeBsOކH+ e]W?%4/%ESƀIIMC?5D\\[gp9rZJp#Sܦ=6w^]90Ҏi>e$%B~lG; ?%ޥSg)!D'H,}#4_4OAKMf-. ,n W3>;Cƃ'f>aқɃkLPb3pV 侧q1m^W`pKSwWSUeZMX\U4pӮ؜~qhU!q+c[Y;ZVĕ$ l+vlVF#FЫ;Ot "̍cɴ:hE,xيHw솃&8&QW^c\d >"gL]S O+kW!Pّ݄@`2w\:n'a(OÃ/β[d7 )pFWxI|IFeRJNU' %J!e,Dw E#.۵CdaE}?eަ !؉ѮJVj+o|jc#^jZv(;-י4C$O7Emʩp3,_="sus!ypd\-:5,2Pj{4q8J3b!{ \YL\J /mةd 5jjLvd(l.+&3AԀUI_Ԏ\$ 2MZ g”.P=H jHsckfai{^tɊ7 X2u!%<™>Ω~&fj<  @0m#~p85<%s#?eGa( x9+-ƶaM<%fktӸmεUJOO~\AS00KJ،#$<<ٵ7.g Y{wZE2C8k !B`CQQYQ|r|o sdr_F1C;Xs,{ `.[T5M)酭4|Te\<,7 g^(wȣ7~Q.4+hWP+thʢ@o^&[D;cx:MnP-m@w~xh:Bt!CS6:}EB5/P5d Zyӱm5F^u%-(3^..7:hȀ+v?2683z9Mp{L* 7,ir{FA;M4.m6²Sf N=P]s@~ ewktqfSr͢=qL8%^Һ˜Vs%l~͋,>8ͨmɌ!tCCrG[GR-J޲=Q;m~_X<~NYE-b7Cŗ^,UW@:b=ߒZv=) KKZ)2&q"Ӎr iaa9 jfO_p1ݽD<""M5ҭͤ*f:ybQ, .F<ܣ[:<~<+ WKץ0m٦AH@pe%s!naB [/G33TMP/huMKFNwQB:uL1[E.Q-vLk׬@闃_=|J=yV}TK t:ȣX8qgA!#4ٕ2I.P#~:/1z=w2!}MA!P艫F4R]X513`"D`.Re^6d_v5ů[*ڮ5;30%m[/Pnsd(9dA"#0Z 6E_?ԗ64Ξc2&5u>J/H*icj _tU`*P$ݩ,lrod!9]<7Eo6q?>S(|4)i  -32w0G]j#Jl:eԧ@2mE ?1Wl䣌 dYc_`2!.P̫cSbơ96]5HC<1 :>Q(n[p54dÑ.1Hmwx!02kd` Ei 5"du++D kC$? sQo턉ڶμNDZܖi܍oMtC+CK~Ԙgz6r'g7xbea¦s'燁8VFctNO5hB%MgDIz|,=Sjm:S/`p- $Isȩ̇0'pؾKV3zn+ n頖জ@`w)2zucAʄ/>U 'S+ECJ#OK KbvHɆ>T]AHkzVh>z`I) [kñ =hV?aաY [er;<9&^-=Wەcj $B<@zf_T)" {ұ {< ^7Rw\@OOJ?7Wjc?A**uUblSի rFk)UH|Ɓ&fގG' Z)򜉨l%R&gב l":֗U[647R+KcYL"\ADuSۛ88ǡ" z\6FQ͞|SW/şyuS>b6I5|ֆ؇ nu5^ Ls`2F{1tg*C9˫Kg1XK Oc a H,:(Kܩ"]CAB'58ƻ)ѨR_Y[jcPk!&% PW9Wj;y};j 5Q1zw ,?v$OV>ܭȔk[ RA\WnU(v 9)EŢ,Sc_jYPR*%O^RD\~o*㭏@DPd9G:$@7OX*Ye{#ݍ4$Y9zLoHVVX}m1:Z+K6'j} 1Ɓ4uVÕncͲ˘G;=-zJ XPp4N(GfK*~V$?<˒W,qjd?u &.1=prbgwvlt^shqr\s A AE %n4 T0)466Vo "#Ւ2LYիᄄR]J_0nSޫ@([FNN$!uzA<t[KQCin&lwWRFy렕nc $Kx|F;짖~;^~0cC!' DqD PWv 9ϻi4%(hC }ĞZ' ۮ>_M֦U9Ƌl[CIY[ܾ=$}dpN@&  VR#SgU NQ!Rѯq-N?kop`Z4ro ptiJVׁ*أ~p;XN8t3s.v0f#9M$Ӛ]ȑf탉xL(\6̓x]85/v_$h8֓oSfdXqU\, "!7k#9 q䂛إNcg5 gD|W=1[C::++~حr H4h\ JxHSGU}P8ŠuN@j԰NwҚ)u(߯+(b)De.ihS"B@2L($)zs06ցHz̨XG.Cg"N[c'֣f En`ש+amiHyOɦʉCkZ=9{ԉHZ<"r%  ƣ`ce3 t̡_HM.34"y3i!yӁ kj]ΏnšaGu"wVĀAoX|Uco<A3?}XEo+..l+;LBZHZLPzi6{ܘc(C2 Ǖ\P |QBvqMmA:.?YoNΉ'^cǟ !rRtQ}w@BFɕ_Ɋ)M\ЌYGhzϛwa"{X{0ۧPz^?žО0xsw[>Mْ&F yLr}H<.DWՊ-$ZqHREE&aqt[ވb\ubY.X̖Fk*UɉxL|KqևBBc`h'vtUxRw40K$:m`˸b `<0x\ʩ=#0 [`o5+&L-N!Țyd~af:.ٗVyJ30C -N4}FS;Gv]bbY8L c4/M %Uv^j+):@CkI0~Q/33#(޷UY3Rn'a?gMk#PYֿf. Ҭf9#g㒫rr1SxY***yJ f$X2!.EqG)ߐLQaapxR [jϣo9S|J5tu`ܡ1J]i_W!c̔}uۤF`^mX},dP bky/ɺXxkKoS$do59|t/ >xC.Y̍Au/P~rAhB&S把*6Lio|?ѴVތ~,Eո}zgEQ [pϟ!9o[fjMrAD (GeC'0wO. JIQt,$`:hͿVahXa K_Ky/T$!^@c_ 4D;8&"sO4fUnbvyor,*K=p>aT aيNgSச0pWdW~ ^GȪ@h?`4d*:-ÆaW]({ka£aV# O;eZGIrt?.*~lZ⡐)14Lz:H䟞uGn٠ej:2:*E WI['/P4}D sσ8*=&YUgvT wmѬ'~2D"1sG>G,%K^ ZG;$9e(,T}'뺇T6w )w`ʱ)ԣR/cM"DJMÀɈhE?|Tﲄ2} vNn< eU+jiix eևg-f S,uM&r0LaWfK"pT)|,J^!@32`S(N|L~E?{Wi5}~oR`]%օMaAWŰui_ZN\mWGB|֍)?<C%Nn6<0In9r6ٓğ@ĚckE°5X{ ^w$RPx,s"6JlTE 3֏WNÕbeȥ-߽dJOj^iѿ1^QʴE_~S<#h^r^$ٚ|%n[&ֽю=Oi֖ pj =*u܈OCc?\?:3zT7޴{:t/ja)^9OFZeUWX2|ݻ !C @y&(eTt_0\MWVu֦mIC 6ѝ96@.Ü!vv`,H'~$Tj*B?&X 1fx7OPkgOW; TV94@`ļo9pW)f2l?U4p沃 hdh6/Ie ٞDܤܲRs6w0zrbR-k5$,xr)͠FCr(BP n(lO04M"OgK8_9clJީ;bfꡀ `0pZxъ``^tq˹cpٶxa>A9*(ʯi9~O<`/ ~"7n/^AcLˇb<3䧰Rxz 3::8<LaKEKԤ ˍQ&*y. Ѧ}Y[\^ﭖ-4! Ҍ񞖺,Ő{[od5X{P _ tE&sNazk0)M [fȕȜ.R5|_!Ba74馚\T.7WCމyAQBoDuG5W{U趛G T(3A{;R/(7sHS4I\q 3A`Uդ{б~ٸhV藙}Ϝ*a7^SIp-lWO;aD Ζ=3n^' @@łf[/ ykR/:t{@5/&?`oȷ,= J[N)뭥<7Ig~٪ÝL#N+>O<鶢vQ^kC@h$ub{Ugv/g@_\|,^IAYquFWnD}HR #qV<_Vz'f+Mq3B7 +!zrAf(CKU<|q2V-thArjLIɂ3|Wǒ=PG$rquPåydo\%@V!rL[18ؙh{=5]+Txkǖ8:X@WDlEHl>ܺ[`FU߇.vM)?A9Nt]a)A0NXI~4GG֮ rxJ Uеq֘FBgBfax,2}v?Ŭa" v̶>BaZk+R0gf^) ]QMEH"'#!YCywR*nLa5:5\l뿬 uɑζWj6 5} שߨlVǔup,) LVd. D1rmCc;4M5xPޥ9F'G&hf9L"V?4IC7^M,ezϦy 쌑/1wXvp` k::~:)pQ|CئAH0ڔE%!z+T(M#L-~p#iD b#_'lKݪHƂ 8u#v%JhW z>Sqc 2K.SL*frXU)-}ɘXڧō0Ā L4%`['XFA(;+^[[O>V*UAŸ;uً9P@e;v'209\ÇSN%Է%>C6i6%j\{=W1C?E2E#{ˇ]M"qO}dqyAoՔb6K2YwΓȟQ^|$u2(fa}%ߕʬ[E]~ Ǜ}Y-8_^G#U+BTYdn0( `B[@T}j0ϟ8KH͔ 4iͫ9a%S,9H̲r0 ^-Ws K2б@ii4*~5$7 [%2 { };bv`1hU,C .$@g O~eǥg˫Z졩¸%͵8#:̹ݞ %Jr΀K\R t;K&`h ti, n.uYzRοkABI&H\BvYJ~H<`R0̰y3~" 3 8X+ Gp\KjMΎ %.PoR&6/y xg*!~*.FA[r{ I(֘"XеYN"YvʻoamiNp'6-}L#0ѳh*#FG d+(=[[cm|W!:SiUvup=o![ 8՜C^zu^@&U] xzwåf-t~r0Yѱ/.Ez\ 6.xDjC T]m9'O>ab֙Fiu9ԫ9a 'wI)ȟU@#EmFKtlpI Z"۞o >OW߇Vը| m7, 7fSlF Jn<3 (D=%ߝ-NjZdC(H~uٹٷ< |/ S}f)3F ׻m۝CRwdьƩNF Y-.*+~Ł< vAR]6-%'a:Z%+/cs˚l =V$a[6ZԔoOa|. n^aZIn_s0;GZ(dmPnjY`h̨kKnHՏO4BcRnSt(I72 Z% x4PFұˇ@>CBp8 &PIHֿk sqDn>)2JMzBH|AC- 'd`w5l? B__&F re{$2^ټyDhPDc<&GmS4cSXqgH[ߌ, ruNoWgqb4,AܫvzK-*.j ң$T4r* TPKm>|吉9d`4}{L]X89eg?R7(ELhvA(~VsDcjbJug>Al2K˨,6S{T`pƐXIJ& ^B"w[usq[puJ?ftzc66ëj OT`4+)ۍSH(N;>+uFCi^LJ@MXh+ݧfQ"n^R̋M.ܲ{|~_Z%ǂlwHgQFi022L8V@bb<&@e'[׎zDTl35h,.|}`68+&/_rDSͤ8M(I䄰/evSKO8vYx u*ZicIa2U.FF h,_I,yr~{ikc;EHWGʘ@0{pڰ6|sn #sH4 K"oj L.Hx} ogRK9()mI@5x†ӿGB7Guw\gp`fɣ.ǚ-{)^ĒQ5>JøB I1&bB)5f}M zQx/' IpW{F>TZ`a)$V9t2 o[,5x6ÇP}u<>|/re3, >fٯy~12PgԢ/hM";>$@y1q9/y_"8 >ń7Wg#nu䊣k)X~Ԁ:DB̍ pFP9Fʡ#v &|s4" CsI=NeDl`0sܫYLm;%hW'dykP`Z@AcBm|x^N S9iRMLMٴ" pχA0)kEP{=3UpՕ@'κAg3mK oRS+T[0x>Đ<`غIôz"^'{Ń,{l?,emAe&3GqSO2Db`/J+ vB~(r #M7d`ado#Ey֊_ :hJ`bv#V+k#%~&lb}v΃|L2z*q@$gC(df"S{,x3v/F(ոc\߃ٛ4rm*OY}-5E0hwifWN0ŁiedܨUxJB" djZat >tg ^ 8.[}wYezor)fZ9'l,)^)<Sj܎߾vP9N/XAӚo<9 (;]76ضQve=@Ța}sѫov!3{^PotvpMN8'4ݢO՗k첋UgQmo0MPJ\x;V&/lxpkl<k>Tu&L(#L2wA.g!f`3oU\!~Oh=CQϱdiFlxң4q ]BMt/$Eix`GtAV֓R$ r{>#=N>2JtfX:g7 ~xsCրj@>k]fg x-:=d=3n][i J@ƍ.+ptAAս}r{T!I.!b<fTxfR{xgF먺"DfKH7"?L; _* E3KԸ 4q6՞]OHx Da#}emLf *iy2[{h9 P)pFhdyiIi庠g*!O½ndx 5X,i8Ŝ^3!$-F nK ]7b0Rr%g2b]Ӊ6cʆ@:H'$Va728ܥ^3~1-e$.R?u~-HX)޿b O[@Î A߂_l\o9 4Յ5LQS GX1cyEdVُ:TS[NC j^oI}~*k"JYQ{QuӬo.֭F)<3VĥYfӳ >PLW(upg^4OHX9n45/99ql Q#0$T=4wG^](nCJu*Nq5Rm%N<,#4 D7 R_N( e6+"5h8Hg۫u:)F*.U"Y衜w2:?\i[u=O a,r]fMydm8\}?T`1 YoU1ps#U ?5PK?+_L+taiLlqvmZp`{ӎʚu&zlMzՠvR ){ K?hj1P*T: :뗦sJjrfTgPg8'-FN"R~-vI`].!mr2ƒ !䏼irHda=L^qHHDIk[-{%|UqBD؋j0#4zf>'W[3L"͙9) `_aq([L) OdWɚx꠺I*+\4?76B6ޫlF%ic{Z/"< n-!촻-dڣ#'&;=3-P)4LnCl>> ;fNJ򦐣k.y%+O)6{II,:-m18xyUR8[W%?fx~&\ "v:]˥si[]bw+ h.T16Cx?.6XÅirlFr' 읱\{HMPq1~@>P\j#۰˕|RԍwI[ăVBs6k ,T1.,Åeo( s>q\(|}(}N SEGj?3[uܛQZ&Oa.aXFJW(QS\8Ӷ!l#d81^(Q6P~X-JdI}ޖIV6w6}>;MeP)n)pklyX֝q%^ҿ<ή/9ΝĐTӇa3L@XXPz|EK?XϨK[I?CfRi毄[u&*fM,vgUu y/9A!x.ŒI@GN))e@4 KA#R;g\^?bB o:kF*D:M)XhŢp^-#ͣъm>;B5>צDkq2Digwf[~zJ L\Pb*^K9pyx^^#Tݷ΀%ĮUKxNQ-WR N7n ~L#e*,sA}k"zߕޖ@C5.RS.ҹOv\ aIZ}dXC!R;71h3C.k88^#R &>Ţ%q`2&u=aՍ}@%56ˁ4G(CShczpȋ*mKђ,|1U ;B ĩ l/z8GHGBiAgn"%p*6,nJ&X$@zu511 Ƿ1pY%2D@P8ky.H,a3b`҄9MW|{/ ^hpK A9B~>Oph{yu{o Rr rY2RTqn++-U |]}n;l`ukE$ڲx"8IS{Ԕ3Eb#XCkV=pA'XEoNiYžﱥ˘̅9mRxdɘAbG4\V=:~V/#J>7~4XEQ]#+9 2sdO\nK~-EczLx*=Pjb ]\f}rbІ*q1(ͭCXH}#<>›۵:SHԫVB,f$y.dXdҬpqнq) f|ˏ 4?E__sdg ,W%|: c `C"\"Tt!ݜ0t9d`s\bT뇩]8m+ܢt7FlMۖI OSTgڜ<]d|֦.őGwa*J׹"C5"q~m>=bfZR\kEf8^Y|Ts]KWjBD YțlAAJw{r_a_cO&%=fbw9j"k3s.ۊ4bT"djߨ ~:PiMIYh% N $ciϪ^p|N DI" &PyĖn6ћNrۨliColist^3d ˰ \h ߌ;J%׮dORMŻ8>dFfVDa#tʷ}bK[aU:*M}EuCjaFs?!yxW8D5)G^B\ydЋ3K~Iz}ceZҦ:sΑ\r'#˸MW؏/&rVuˆ,`/Tw40rԛ3"g=F%Vn-a|ߩf4c)@1X]yh?#UzUyKyvfA_.hp+vo2}OqHT@lRO cbVy_t`kZ tlDž筁 "Mer4?+vnTG<&qx?FuVk}4O碴鬴({]2NUsٖ tRqPp7:S5(knUx<Ўy8iKʝiTYn~nnTt0AL_X(yw5̙`bǔE_JA;ϫ}-AV`8^\CQMkKqiFiR B:05Y08СU#G#zfa&JfG cJG!(p/qO7 b}U\4RWvzeAVRAR[/#{ dʿ֛4&Nz56U?\9wݛ2cu|#zBeCJ]W.IaToğV`ne~G/ 8^XyJKln!e=ݷ! ;['{֔y"WCZIJsm2k菷n D_]'@Cke'%PބWeݖJ7`_6ݮjP%85Dֈ^ J+PkcƦ ٺF~!wCU@ud.xxoe-)."=K-hc!hqS Jhv׎ "ߵ4~E-ab#Z,)Ĕ-d~l]1ʳ4U))GΚ^b00\y+.xLJs kws^੗V i]+!C4FnkKJɪ A/JI7;uH%@+4?0 ȎS¢ʹO$׸":,l+tR[=H%k}ضנ̴ٌKܺ$Laŧjm^oFv^.חI T.a}8iYvh5ރ!qK5&Jv 5z~mhtٳɸ D|ϙM⯴ŐER*nD\W:d& nQv.cSoAy T@:R:X I?=/ " A14An4yA $> &Z0[2GaXl<@¦!x("j Y<ґr~ s+6Լ,Eg)wj3͠S63 %*  d+;ITw aA8._5s73Ͻ"^L !$OP-0.i2dV$x ϋtԕ|JP !~z bg`*.c#x!ȝ(V@ <mRM*\@nMaʰS3qx؇02^+T-"pfE^ J#S)IH^Xg?]]:aHwFπ/+ү ^ݥA_̗Mv#eC:s̑ƊU Lg ]s.9=ZiWi~ j+0vM̪?&>ubH'-urdu##@YЧe8hrSOk+Yx2 a%ie7)jW)v15wC"Ǒ[g~!0]vOPS%ݞ4Q+}1 UkH.\J {b7N!Fi|0ΒnAuXOS?" gH? :yr9(# `ȘzFȷAL4^:?? [#Ù&nd!foOÍ D6,S&ݴtV]BDI.NM8x2ɹbmMYchI#͔4H/TS ''k=o$Λ(wLtϷLF]`|kJˆ!uE//$#3II݉!{. )ޱTۨ 4U. hHI;Ol[)ɉx1g3ծb59y)$5#5Ơ@8:mMNZp.IAdZ"ޙ~{p ;W {ȕ^3+MۯO pqzjdšDbk1:?6.dcp6\1*-CBҡELfڠBBN _Ė1nG1 i`^l!jO#HTN>)-[ \^,K\C?`8*\0@5z/ڊ4 9o\YolxlV%0#~&ڎ?zj,-S 5C/ /h',(C2 'Pp!5@|ωX]tuqb 8Ǔ{9E4K^5G<*_s 9<  }$$yb` IQRO,6?88:Z܇:8#33Lw9Zb{ k-:~5$ Jcp@& nI MO uS^::Pg;=}w5aS-Nzv9=fዝ0ջpٖWռM"ϻ[L!t~%xz0ę# lnkR`]\s@ FnOsr h]^ .JkYADwCjm)gO8jacP_﫻M>g̠dew65Zl%,X^RX5%ВELj̹(bEt&R˺TDu9S؂Q"3!q$Gw6x$ CF>^429@e$`zM#oիw?]+u5^JXjژ"Ap#V$68l$U\]^mEึq6ZEgt / pϦ`d J;ONryègGW?{5ݠ|U֮^Ite|Y;Tj$!{r_LҮBw`Yo1m&duW}~@wAWV@j?hBk@gЀ`dG}34fR>w<]!;Ȃ@~]Q%;.RA<{v+y5jNe?Ӧ8-W{vF#1 GlZbM% ]ރHދΡъ犓!~b){b1ϾAMe/]?7/>uA A2:n܌6^D~ '8KSAg]\Jra wV pyf<؛,g@1T]ԴRju}%L2j5'p2]gqj1@K:t"k/ZM[$P3nsyz? QѨaqm_]0IvIsy{ 1q:5'u3 I},5\N~X[!Ƅ+_X!Y ^˜$`RHP3`SVf Wp3?FP^cFxݪ# "3 JLu6wRo0PCޥ+~f>l]w"}Vd&9MN]~!mT|lrnFpd  KHˤ ̠zz3 Qe6f3ŷIPL1Mzl8 R^"pn9! rJaoq߂POЭf)_їn^Ii11||fRtd fϣ6 ss,g\=}Ds!@+A8[0z Qk8a\h!OV d3FSDK/V:~z zFI?R&*'U =O`P`|8|n+ gс%]%Nl!ӣe)&pxr\YER/K噜%Ȑ׻X8TW iʡ{9QQXh^g#uxdr$r+}`5FS*a/-UZrϝ걼ߧOFKi[ %˃l{?O#d[zr8|}7솀X,F5GL2q^pXccJrE<-|Ҍ;̮4 k}0ZH!^Nʯ`=Mo}*ly.IޡXf|Ĺ.}%AG&sj8'ΧFPA֊=XDZ*lNaY_}Xp@Zbp0r*᧼_ p$UWw]G Mo"7f{g߻5|u( Ӗ\bU0ʬ"]IA>Wl0JRݕZV z@̫ж 6ApƫpvyF!SZfN zX qR{V.tǔ9cVLYzk_m3a#M}7ڊ0* 5sW?c?q%6TdXubβRqKȤ3.F ǟ^ tCaD2ؑyc MIamSyyĘT&OGǤqR-_Nj{TyH^c;ą@/ٿM^D'9rͮL }39S{g`V O᪉*dRlS6Gqn+7uvȠel1 ` P/!ߊsWސ}dx삽U0sݬ[\7Yuq&+a30o_]OF_ ?xySFbȵ8q5QjcoL sNl<bIG+-E/9e:#D@uzȫ B'%y!Ku -Wj45ZCi/5aN٨M{[5DĄXXy.) t+==8w}s#;-ٮa".43E o?g6=?#;)r-ڭh* ˟*J$r^A1Z”dzm=YpX \0괩>H/j֩ JyKMoՉIyocgorx8(r9~lSX:qn ~݄axx9J}9]%?zuVY^}hHfjH=xp N }|s& Hb? ݾLRв`xw}b%eWnNM2?l i76$7i]_Ŏd2LE4^v11ԑhdiK7>c)ɩΏ&5ƒCiY?r"ia*{W8 s/;4KlVV-7DhΖqdU FkwDjh }?55C~::`:Q91#)lUI-t0lR:tC5940#8<ǚ_ gEl9@miQ~mY U>pe=2I*w7ԈMre{ ljֽ4NbyZõkdwh @>j#v- 9rkf\#a 4l 8{WJ;;ɜ%P M5 Hs(-a)Xr޲ʳ9W}Q 5}Ͻ;9?dҍRqkO׈qej= W Y63$R1zٛdU 80 ޹!l%NƛTNż;9+p׹_u{>>HqPEDQݐ'b|o q['5n Q 1(zގ溊"'OeH\5sv,Qe0Rq[INvZxw? J .>g Z}V洒GFTlB;XVL.fz٦?Q'b Oe]beEyl3l blqwW Aڪy<5,kh C:FԨn=#/f06 +% |Pmy­,T-5x !%w3I M3e 05Jlzy4Pxi&Yie*3Pڭ 7x#P`!T@/B":cr/04D;O˳^ nTc1+!aZ NQ sceSZ<%TWԑI݉?:FvI)s1xP&K<\in)xD(E}4*Bמh:lfFBP 3V܆eZnV$7N-@Ol}pQ;gɂҸхQ.  LnY[F~f|(Iu^3u(5 ~q u1z+rݦ| MU`$Gv כK岛C ѱtWDs79^YqLBHH|ASA;3+rfDߥfn?kAIͤU"K=Ѕf!jQ7e+s4oqlB;poU%+{W']}`lrm; mlF^]WbaXk^ ?5fd#\lx5+hf @Gf7j6GOb"Qşa-^1HޥD;~\/_' 6* X7" =}bւ&ql2Xoc .ӫi,Ĉ3ݦr_8\F79wUa+6ߞrfI[X~ֵT.enMgsFAohhyM@uQh<VC ;%/= \~l"1wм)(v5%yShK 쐤wqDou_O+vvBMɭpw6GҦgg~|"\wSrLRZ6<4I1?Vd|Y/ > 9!T8qVMY}R̈́. $p#ʉ# +ZfF&ߌx㖐jo(+<+j1G=ԝ9ŽkcCAG$_SoT|_ܭ)Ծ#MQj鞰iQlxf]8`p6 QMKhzY2En=|e{ӺJAHxxu5EW3FֻD50sV޴-;b雪guec)R'Z,<{/Ն\cO]wfI{K\ҏLKV+ bs%Gܺh6۠Cs4i(A<V*rW V%S ({ޙ&1=L!%rmǔ2,7AMX lf@dX$0QOcÇ.F~d&k0Tm7r$Jlt\xbǤG>5?4K(K)涮љEĥ;"vs,4UQ°}av~cmQD"oRHƠ仭`Ψїdr`<}eXj|r콳q! Pia粵_ig4iOXx<-B bBޚFp~G$8?/_O`UXY ʈm=S#=܁aZ<svVA^J.lE53}½^OH#VFWH.ckΓoSۜR3V` FƓ3,Lխ ,)gDR'3m$u~6*`FY_m0{'B+8=dX{If[GP)s!m$Ɇ@6ʢarb Q;d+&3OT#k罥iumyuV!}';- VԵ &) ͇#;C:-fb@;;m>[^l,"X[FILpceLi͐< J-E;@IPd=La1 :*jBqDmQN1Y49!T[J#n阔t =̐`-@`.kfc(]h_wSe{SF8:TķMߖ@Nb!?~|C<ӌȺ QvBiV"8y4sặtbd~>5Wvؙ0:UoXb'@ԛ[u60lYpC mL2`c%(l&D+WcBM+=^M$7 %e/ƃ+Hɀ 6;aį>VיX\JQV_0/օ?u0On>"Iy X≟ أ*>w6gmGvLnx w3[Ꝿ\ JEsO"u| ΘKz s!{p|se/ a;'aL"GvxXف @[ümUYgب}e%$i bȚԦ^|xtFዹ,kdžnޮUB0sGe0X>1g(DCԶW_E-3QclDK7 ޮ.N"VSy{2XQ >H$8t6J2:f3F Bq~Mu$ 0'Xj9WV5]`f?WSY܊9G+Z˩ӄ=ߡFW&UZI0kpaOLM ȗlgw ". ܵA>˽Y(~kjl d`@ 譼U9aR%&@]oڂd&Aɵĩۚ u3aY'^g8Ϟ&#'dz SQT Z4h? FXKpw:ҎS-@GO;I,lEHYg٩ UvGY֪{؆v<N%ԕτQG]-߯<f˰^JM@_Pll~ fx'4Ft'*o;$K5 9K6f)X'O)[ڕW_=2}šy;uAބ4 Re*.QY mcGCJNS`1mq&h8 DgLd9Lp^NRhxR.a.IgGN"Wḕŀ`ݍT2?˾$۳x:n= #kόӕ/9N5}mZY "a.rM!roz>^rZE_:܂)3%ͣN^~j!/5h!/q;k5Mw E00GAα] [@'wLkEu=o~pL#Ak@t/"l h޳a2MRvUсc3m KzLRIXV2pЫw~&z M,-;T.ɔs-Y3u gڽJ\}t1btI@4KsY0Jf G%N+vID"8(CRɲDhr~{, CTu@s%Ie+Bk]qiP/oӸBf=}tGn$GaB~oGs%ÍFi6fa6H&=yHonS>qr+G2s5(:-#3᥊Pz1f6v MatUGbQ=a֒^prjs('v"]$X鄂 6T2T 7_!G+1jrfajhD 'q [%JZ53rX +6&? Ela3uʴdpIB}ߎPQ>{'T)(}|K`NZ_j@RSP恶X1ݓKjڄ;?M{*IW͚ !w%6 6X"gkC&x#]<<#kXIآ%G_1,#]-OMpMa^fNLX(B,o*/߁WviM1z:ӗDgҘÇ*L'n]a'9-ŸH42nógڋь^s%uBaߦaG /p*6):mG>Vϊ ~jxnMK.H!{*tiK)]~wV|Ixa ͼ}dYbP]q#f'|}Pe78@} KA#Uz< 5\P, vN H- r[1CHrr炓L׀)*^Kp %4VYV&]T4+Crg=\$g0w!Kiug 9͘za~Ӂe7N){$)r[޽eZ,(|?#G̷ sj_yW\Ql4kx豼[Z}[jޫct6H%̛oÙ`F)MFgMKExZ'6-Y8Ѯz us9Q{ _q.oRP@(3KG<ލwHW`-CBoxW I|3b d‘v8/0R%lz,K:aܢ^WgT7Uc٘Ԙz+}4 P|>yPSb zR3qEKuVKDxKL 67Wiamz_jWܤhIVLȮWwp`pv)?lbCqn&o~I䞴*5e0d@׸🿸`aK3)uqmq`Gkgs'hoR@a@3^ LRp)%0.E-#KU7/0>'lÆ쪥`6L`ͦvTZYaKԹ-YUC e>e\a*E<ؤ|:jdJt=GT&Ö}C)ΉWb7Q#"J*oˏHueY:uO rKOE\ _rX@خPe(vCaQ7cY"FpY+{a R&. ȳ^ C4RzlfIl1 G&J^iRaImlj'_na<%Iҽx ϕz~VvMI,5PՎTOh9bu4Վb\3 Z+wĒIķQ0l]G z1Q !vsLQZ)YM?v%h?eύEo{ 2^gjՐK.¼)srchZlnQ2^g.8D[99wma~9gX4aPҢ`t|)ۛN}`TH`9Ьutr'cI좐9q45oel'ef@Q!>ľBA@$2*>d EXgHܱ)<#N>XNьQ f\Ї4`yqк̂ĭ[#L`CW*_x -2,ȁM]VY#I5*d&Q9udN၁;j΁ъݸ_Uʩ3Mz˧HG&|:H#cO]oq7RL!$a$-Ds%NT`$k$}sgIm {pX\nWV XUKgUm ݂'C!)|8zxn>QϩVXxY ?|CйXϲyF2UZڊcW&#B'^%R{Θu r1ɟ\UI_ 'wBϛY|xhd q<梜zMEDNWH`L>/bSr[RYB_'zn\OsmBKv`>._QmCģ%p Y`$= F'9~Z<-mJiItNCnQid`!֠3-ɉo!궍<ApZKotI4%}kM[^JikE@aē5wVI/0O?D|ӰȵӐ?0cK@njjkͫ1DWOAJr2+Xrиˬ5lFDUϋyy]&S@oZh|O` =SZwhaLU;؉zEc*__EpZ)jeڏ?N+[FsH &z >iŜjB.v0`wknLn&.j9<.ǤXǠ>af }+U#<)tx4ZՕVϩØ&;[n4'wfDD:f/{RԎXV 6We$r~ s!jQs3>5g-І7h 7RAbc(Fff=ŤuNeʟy]3b({!]paC /]էcέu4ٌa 6wF;j~)˳b]CƩW,C,\#&4`_GTq:&MOD$jvK,pT.`M?'4~ Y<̇W+4VH^ы"8M ea5Vr-7WB4PGSpG"˕z.@ڷ5Hѝ)U^Λ? Hu ̬0zusSL$Y޻y6$ǒi5~g70#6v Sv<ɍIze; G3o:3K:I|{*[Ё]('5~Io?7"V1+"WY};]aeY#AMGm By$=:] " C rC_$zXDLr#ue6ڲRPה62+Cعc.ekmЊ!M%>(Я"PEwBI=m`#puHK\ʊm[j;e[(ݟS!аESc(u8`tF愛 ̨M61L&^CT8 @Л+iοi@IYFUsbgf<'r 1@u攬`4oÍ;ESPw^lr'taj/Əl1IΒA2'3fv]EQvc^AfH*?T Pd\az!/P!{2Xg- hWY\0!ӌKՋPf}P{)Q2=x&Mj7'-zLB=_6 .$?Z|+29`3`cIG) JJ̞{nz@y`V4j^q&r_8.>x ;Ũ`l~csJ^Yfi7줿w0Cw>n$`CDbSM|l]ǢA5䃓*k*O/jÀ =Gܭ|8_ &47H*no,h+<כZ`p-Xd26Iirיo$Ue1@'ռ%fqjt~D-1҅D< F_l [(qb鑈2 l`=kdz)XS+@T9 -9KaF;]ɠZ^5Ss80[O: R37niJs [h]l?N/-l[bV&>s|#SQE=odY9#<5,w7͸0J#6s sFv#ÜDZ'ӽs1JX 1Fԏ Ģ*( ӭ@*8/{Cg+!Q*ER:ۦ|C[G5O9E484nuFԳ.=^|]Ž@ly!oX!Q&HI-{̎IiAʲr+nR xڵ/1W/ޓ/$'Yy't\P_]UʷYBWn]ܮoqmugQ~VQ(Sy$N?yЬ%nzg(N>]xxxm2\_DmΔu$?㤄gv95 k^8փc ,lss$e]ٲ(2h>i_"QY?K@Z#>mVR8]*(c~I.a(m'V<\3^ĬA3X"K_1ow?aJKS&Hk4V ` IE@BxP^@UQ`̩*|fzEjn4)Q,c9eӜGGou's6xjx hZ+ 3T j"\ jCy&SA #84i(c}E# [Aߏdr筣ߨlF$1 d{@Z7g8R<_^3M+5N{ٷk#ŏ3ZÓFp{p6u)2_&_`b6_(n McrM6p.I{ AM3erSkuA*% Uۇ F”8tN#݀P[9)dѲ]}ְؚ&*9hckݙdSi8~#ZLf,}G? 1ʰ &\s/9T`IdKۏDNjy4(Km;.j]hhPVD8!@ 3RQ@,WLXsؠ*P$/VF!Q0qW21"BA qL8(4mGd'gVFǪaI%.^ݖ uW/.SI@]d5~k.rc$vS$p]i&z*#E]c߃'Qnلpɾ:83eN5pՆǦ 4!M]\W^RFJ3/MV؛%R&l>kb 6$,!.&BϧvAv<{s i*g;&BdQ$%OW^y/8OB;VwdDp74WA#~`}z|}V? @ؖrLh.?7G%Nd94b2iafP \n )dDFJ/*<ٷ͋8 ouzxm둠*BͶ){?)9+Q#<ku[ͲI蕘pΨVR&q2AJfj$=AG}ݎ$akǯa!j<8gXDLV<^hEU 9E9NyhIUHC3=Nk=J.c+H9z$mtiuow6| ;͜b_e);d?٫o/hZ@IRnl]ky~h"d6j ZCmB'>P\ٯ$[a*| ܘz*e,ޟU⠫b XO@&$۞g>kOh ͘78rWlX CIv#ܯqtOEtWOi*_u ;P*9q9UyeēȊgäD CwIA? 1 ֝囬B"ϔ`%imO2+۪G߄ ^&iā֖SZBF͛a!!3.gڐ!呰xW> *s-S;q -3WXK-՜ĖJkm$Yn*܆}^N=+/vp2ddSZqf T 𲇠\U#B$iC#{Nvu: }59 ?}߷h6$_6%lSUp!6!ʫJpқ'!fL6dyYa t7l%Ҟ V. Ns&flqNN}3 .Pm"2, Gߨ hCta%YF{1!qR(!&g+^8`]:!]qU_㪀-w*ýMb=~4&XPI㹄cی b픓ތmRb b$JM5n 13,Y9'= ?dQ7Ƴ &?8~&o&DFR/xvk}ǽ[lJYG:֩EeVZ]}wnG@Dm!;)nc1;ʋh=S4ADl"bFr<} 7h}d DPa.n n֞N{* ]:OqB 1:7q:ݷ9#Y5,_ y࿨Vj 60Vib*;vsElJf2C.0 ,D(ݧ,!Vj+`feڬh>5lD煁}׳vr[^цE>QTwÚkQ{#5?W,snƆ!;ܬ| PX^CJꎻo @G=vq;hFAOYM-yf>w,э+8F]2mOn}2`HYogBbnu鴧2CI?p~e6S4Iob#Z'׭0vf 1:" O0`"@B$3Œjc2ަAob*ǒ@83M/SxERaB|op?8DؾfS`dlnhЗ?S"/(fЏ"({E+PQ7[h䬦x7eC^Xʎ6iK]IC" 3jm\kF&g=O#rz *w7Eì7& 0dҵf(PYߏmY<ϣP.ȺQed#D[-2-]4 ~gk:ڻj{b\Vʌ Ϭ;Lh1|/&TRfOρz˲_,bCdGPG$m8E=NX`*mE]G>bU$Ux)bt6SX]C} KV-6.HdGa KwJjI^^8L/$f[I&ӷ'u(F^CJEǧTNkȠuƥxk;&`-Mu—%V9$e~L;OސF3r"З#4=5O;ҽs"5}' ~tnkmsBpT:A qLzV[gܿK*-&$ohrJqoU[,%.+OcԷ'`ǁG*CwWء}(ӱ SkwV? sEn CIepocRaaa\ym9iLe>x.kut#:$ŕY3z]ʔq)O} tn4 bz`(Y˶&xú [JP9bΨ S G@. ˩6yQ'PUpcޖ *91 ݮW{ ihk|ϴul8ޕ@95JʪNأx*]CeQ)d{XRr+vg ̘FYtkxԃ$IZbXUxo!ѿ*΍0vVp_m>R؀vw< ,u5kʽ;51g)m~4_k =v[^P Dסֶ)h;嬐NjʣxNxh>vO^Xsڕ 7w}jݶj{PRQ'8Ťť9`RE0,xM*wγ'z n΢szWs gu > M@)8K6U2LMG Δ^cN}*ՐIZ .njFIWݖ ·!6Pk(iU m8*fxo'b\7kiE*<Z62 Y}3pbц*Yߏ/_xw/~hEE(y薍% `RG >@>jlG<}UӏwHq+7R`F1Qe4UK(Or|d$2-&.ƚP>>O^,*;HC|X>ѺQD  SǦ> N'  b9kE4J1u`&,G.1hS&1[8oW6!pօH#vޯGIy1}\–|9V晷a#24$nKPIW3+0Tft.׈@c{MAGŴkR,>^dTKbPH˩l= {8$ %=L e/^8&vܝp/_ S.FA t`Bh?b$Rh[t-c'7uFZYY@mSР'v̞&pz.@ !h鍛ZmMYk pF㻙cG~!t[1ܢ՟Xtlq謣W6z,7#eGdQ UzpoLe?-A09f!^>Օ>XsOsWBt mHX峳JOA1Ll{/Zz*9x,b]4@DY%aX-dN*loè/IQEFi-&Q]%d86bh0:>jz|Clʸ%&J,e9J b6nÆZ5D1`]w1iy= h¶6Ni-Yڇr-4$7m:ˡu#.y* 't#^|O 6?qTaJ{C!_qzMpwlD8{ixڊ>a[[o@6NRG|v%; I"D;Ij7FϢ3q΃O٢WOWA}|UO Jy*6N-ڰ{ J6`@%Yآ]#1<=[xQ2pt/u"&DҶlc?ajnXIkt9k8w&y#Ռy<>=xz-1BZZd7PLj2A`AiSU8Go"t5FkZߊU^+a6\5s^5I)HxB ^2 3'S]H3EXsҰ*IҝYY\mƅԨ+azyl`O9%VeP\@37ǣ]*,57"lLYEã-p|=tS[߿b׏V*0hh3vrNXywX.5ocQmEPy(U 7;$hz&}J0h~TfM.b`ָ?R~R:QJJܪ).F .E߅nd(hb1z!SLY!o@;Ν4{~y",tr~-zRl*uN_[~R|/8.J;ڰiH& H TYlkGŽew]73 #iY nšcPS&#'6_Dzh &뵷O>Ķ=zݟ(a|hT)ÂŨPLʳ_ϔT}硫!JAS`F4OyZuoX طxeIaU4fǻmQu1zi&ff ~׾'*L)htpozC粑|$>"݄I[H'S$"oJh>EUu*B*/SңrY]N?;^ TcCXˏ1AH=+5V%ȟ?)$pp8؞Be04$*1 6$29Q}Q0fv_%q,!(IFB^i#z7n*gN88(u5)zL!UեS*zyiN7+/:qe[Q 4;ן$Zi2+|ȳJ(Ќ'Yla]>E7HU;;țmL}1hJPZ km%HƓyp?8+-U%N(fK]coY2sЍZce(خ{K+z86?2nΚ8?Y*P*ݪKi_̍C Cs`a˿3 ({P+S9L]+#3f9Uo+o3D8 qS3g[~rSw0Rp_jf]RgӚBX(9p| dqT'8 AJ\7K'vyMjM`t(0dUTnep;_(\>yATi^:oϸ .6~zҙ`*9sܤ1 ed5%i_RG#g Qa|Z*js(9Kq(t + L'l C3ŀl)RB.%jRtb`X.[YSx9 4qLMSs$ޓN_b.2Yx}Xj͌\-_G"ioFB?1T9+]&1ژڪhu'axqA:e2g﹫n{%LRv"isE Gە3|d*>X@Ŷ]g~T&@À'N8)'X8m񑻠YyEȚۭƄ@ #hwOG0vF@oBwŪL|;oz@Aynx Q '8*[=#ɦU:Vg u+ ݤ\U2N__꽸X("~K }۪,lNf'QNR6|jRa5n/#fˁ=rJDȥ)(d{%KJ)ppՉNrgZ d^榻)At4ֆg,u8{>x͉^9(2N[33U8&t7{qsͻ 4%/z]6HLq&́BƊ8Q@NQVulxA[!Ub$ ^Y,;FW97nj~/f1w1yĈTE"6Q_+n𞅨gq+:w77r80T?wڕEK  @]-3+% כ-ӅESz"/wu{lT." ȗ-pb̏*'9#6|-%`Lc@.uzb[zV<yKIQ/ɐ]īkAx,M`Fž 8'!7f:lÙE~sȕg0_zp{T<}wo5s$?줹 5 B*tn.ܻXksOPIs =!wt(gwđI:9NBPnRψ1M$\e)t]idI4ۄ)&;j_7{5 =@J5`r) ؑi>z˔nB,8XBLcv2YTȞʖr6PzGH6Bgvay srKP,Xd+eD^-^ti*vD6t'%m)2Xqah{A`.0ܧOO$rY¹w(B`ĥ p @,e _R tM % i9ꪹăz|Qۙ }0JZע!n:ށK,JhuMSE$XCtݒ+|RdI@ 2Jj-e@s47D2SH YM+ (7A#;Ԛ3N_Lj#SKyP\{ V[hԋroߔb\caZk}dH?8)wh1Mx^`t64W"3ҫ|f*akm9\zMԶA4$Nt/Jꬨ& ngO9dMحlJu}ƽ@'l!`RISY`1aT"q- is%Z2 6VKM`'ι'#A QO;t?z?s^g/9cnt9_{ @VziWB:wk3Oǚ}5Ƿh']%"UL#b^niW/8;0 91EmfN!0!Q*}kz!C_\n ?Z.tuvXL0roRc4=ߛ*I NMRKkgO[؅gᙝ⬣?x̴8'+4]s"yd5oLR5[rN\!.a|.JP渊_pzXN@Ùhs["56Ŷ#޾S%-ԺD?|f| ѡ2 أ Q0eAK^kQMG[Ed^k-%eɬ*P𩾺#@wDb| 1!ofW"/ ud0}:B̀a3 \3hصu?&ޟ $ Tѝ3ڮ;Ux  iOB_5D!^Mp;fnmyphsp 3؎۽n#tg/6Aҝv  U||[Fb- {4<ڇ;ʯ"e FoKj0O^+*.ps .)ȒN*( ^ki߅Ggdhռruȇs\S= >dO9p%;M~$8V0FRA ,6ׄ걑c6CLf)yH&Nq:ɣf 9R X.!2Ѥ ,琢 ha0mMܫ7㼾o9frI=&fu/ꆇ &B:JL5mO7qEplrJб`) 1hPP?dHMXYϭ)[RS^%: }d]xW'E)9wC;B#*h:T:LNJmYNuJXo I4wM9 VD`6%b>X`hQwy,W952Z=(^JWb]ю֯H_ḨLfSOL}i&GI-egZ=T)!5y"N[T_~i|B}ivXYD O X L6Ұ.WSYaL;}kƈEqAGboѯ4t5[P9o5 ۏ2)儛N]#<2<$9̈́!\si+ vDIV> uśv6Fb .qYGuk2,I̩psuJݳXn#w15 TbJղe'CW<@|+[O++X lDuńo'>2h.5cr'ՍЛ7*n=XrH_k-l }`8墳樂{:Ϛ GccWн0&Y Φ.7~0*Y+v0%MC]\î*à~K#>kaG]U98[?"jR) Y{9x5]}){;KE\d!KϔLrecA p4 Z|ZsR1쁈L1Ryُ!;褭uAW)Pe5{6w k$3'z *kx\Q@B^ jdȵe&R~$13E..0xT$& W%i;Q ~-$|yCh8ܞ_Ag:u\LOoC_?bٍ72&\c:\ZW}ݱw{X-"s^KbwLG[C>HI9N=e5qyOSY))k_pxB2Ƙ5(v6Fh5jŒ5OL:'3G6dve&N[> Txj*QgZf͝-3JS>_5Uܾg+ q$@ c!yV  Ì(0O\f\{Je9ćYEU\JZ˽=٠)rz!T˧Ž()as+=vuӮIrNy,be^0 =6D `,SXD/0ЈwĦ= p}ʠC\}X<n 칤4h{"nP>KvuXLyՆT9J~ 4l`bAu[t7kꩇݖJK=?zI)%ׯZ_ d~$GHOf, &O *CrΆyǢ8'g|=}GL-uxUzn Or6z̑H 40M!G)v/Nm oWrwfǥƱx'=SuƗC}+^BE̲yޱ>I¤Z4# ;H/{1!>5{J] i#`flϘ2=}?vp.$ڱGJ:<]j]'(Žo>ם/[f֊ߚG| ]F3-MXx<,r@+aF1c`2 E*LLdO|E{]n ̆=`k#^]P Ynʋ(6Kٙ_{vRr-Rp-7%X7eM7Pjx"moK褾[_x@D I:߿z::AMs;\IW}w@*QHm?xQVqxD*^_Y|D.Iدܑ葺`H9a>W:6Qw\ڠOh2wz)-ZJU4Nl>1rr;)0ML>(V+16dkܰq ~Xzwm#ea#n _ VmiJT 6>*豑 ITn'$$0،pִ=K9rNKo. :#T5 (PC aNG@p7;vWRNo%tY'<+a<(mm [[WnKRR40qmZv"Bc0 '\D}fbX}߻ 4f9<4X4}zyi NyȼfSZ1VL[vϮwԡ {xށ(% !xUqn'8so ttI-ƒ{OegC$&IƁ ୦Ĥ*n@l>\_x+}|쨘56i+(Kѕ5 Iʮ}C`2.1@tn9GwaBs^)‘X{ +7Y^ZQа/X4Ӭu`6 rnbB=)R>銀&g'?Lp-viՉه-^oH]_3U /I7-9>U=)ο21.T_8]3)iMrVx1'c Is[RqvD6laZ{9D4&z1 g.* ȥ^;h#>G!V `y*nIOOX؍;Ɂ7YVJOմvޯ^#(C6F˧%S ~Q,fϝ^ӯ/kpu8G">@+UGvzCR|/!\S/'G{c##lY&,qN5W%e(yX2C{X8(#ڒܦ"˫ZTm,D:j )P9 ;v6lvaPfg#" +׬ JP:x8<&͹G"CҞ6xBZ~8|Hyヰ;9$ڋMLR` 3J:8y̏0*OV=ҭ2ߧ@_x%.'Ii kQn)S"@8 z Z &>B9lUu =/j>q9Ǫ5eX(ܿ>tv[twY?9|4`Gk\0 %ᇨ)|-KRD{7(?`BhU! ^e Eʎ%9CeU#.zc?Y! 7Az+X3bԩB ZTQpfl6Q5``c 69vW̹@Kc2/]3ȩN:2nѠ}GdѹhG{e-ŽkWpj`ybP[`{ιJKJFz>gIgg, n2Dn%aSY[*)'kڈe`c}uOtp6<2FaQV,NJFLayBbi.*9;TLzC)pLXBurZJ)w 7 8M& /5bF 錚=o:g~- 4L8>b^lq)>C0A*1iò$U*Z.%va):b\ 9P3!/)I֯C2?%츨K]!uQH1Z" sk~O0: 9:bMB$yu3tp".i Cൿ?&ON[|yRMJPőQע1Dh2$5'+ʩ{Wa3F=N)/9&ib6gNt,Үt6,]Y}3Kjb=0)xI0( \FnLOC.b @5` `Z=jZh0K1 ,+GwPi$L|^6wFG4ί[Ԏ5^S*wlI,}g-m0{ OդT'_>HGfBrTnKs q#X*QfHd,-SA !7̍W.;Sp?grF)JU Y&NYsg"Dj) +ܣE&H̗K}js{Ɏm$r%>9-ɃI̊hE257a2um.Af5Sޒ[ a)/nv`G=_6m +WGhۂݚg]Q](zusfJݙtSZoʏ4KO_cڥ g &<U%XFјuo)YN9DsʀቱHͻyV;ߚGAF9m >CDԲ螼ƠHWKQZ;o3K|vQM $%/e:1αC#π ;}\x V!TW >#8¶(BRU3$;zH`MV}N~8#7h*ʱb?NQ)a das HH^'cUnLr]Fh\o5DM0 C/ Bc@~adIXы|߄LiףmӗHp9g6>jIMwrfL> eyTw-92B]V Z7O^bW̡Α}e\Ta-2x'xW&?q( E+!UoA Vp1U{xҵG1{hߕ \}4< o,dܾ=ϛЛFzu}@{f/TT>K&t WD@Dtd./0p~;.nwW4W'n ?Ũ*>H 'Y>9*#?맚CPL˯(/ 'Rl1Bt9scw֑Za&6 <ąmƍ#^Jb"W_'e6:!W)C@[yotJ*+sɗO{=(ɑƺx$09>E٘a:)7`T3v K3Ȭ%lĬZ̽Mi3uBwKHSER q? `\H'+kG6ǐMU:Q}4CR'4= HwA24A*p'q@sV9Jz%` ! v `zwI kT,M klh㥗nz=)?z^*î[\y+hld]#,MDVҖ77|^čŬ/U0ģX*3f`T9O8%2FD?#TIi01(aUw=q;\? t̃^zONMOE87-(|yעQ>6b<5S'PP4>fOHmV~^Y_'JUlpH㠅s %T>*XM- [eq־]kg SpSҧOKbY=UTbHxqdb̯KN}9ɁǙ3cM &Y@SΚlPjh3R45G N? 2ǨF9kd vV^`.5f:ǁ}=a`Ql7R!j!n?#NZC /v`Ľ%Q'#<պ'dc\@PJU`:;犡Ф,KWnC~tU@=Sw8[U jjܬ>nҭ=><TW!5)Wm:3eؑV ˉcqs_p?$T0qTa\p ET^(&kYo!8(EȾ0.<\ckP$3 &^\H+aXk@oY 6ÄISu'ûsBe336Վi.2ĵ<-%ϭ ~`1_6x,@z ߏSaU#^e$@mx`2 pѯ* &&)@=7뇭X2V"3 ׎7[lڃ7Hdd<9沎M66͸!Ћ\N٤!235_H`>ܴ33tW;*ܭd*NLA!#;&\DnAM]Lߜ"B np9v.ise|W5jIQ)KB:,+@]ư*!$Vf^Hʪ:xVaf4ͦXk7wzX#uɷpy-lk €*rX~{oɴ7G.D}Ԕ.iruBo?o(ZR[|ve}5]#4n큁+RAmg*EӼ}I=g׷A<@?zFsxu&Rp0D_TׁSYqՏ2eU|j\E~ij0C,VҺ`/2ϻ^Ƹ>pЫVQbĄϨ#|z ϶Xq-(g*EguԁѬg3ldSFq3VjɆڶ{S!٪JM8/_ba͕JL0ȴsl_tosw.D@V١)\hZDRki`B°R(|Nz՞/o928M‹/kGI$ON=*\ JOs=7FH)Pfr>" rjfzr;l)!0+o&9z"ث5(d>ni3R%ٓFّ0*6i;xJWOlIpW4ի|ʅWyLl (A[v;V#{y"vf8Q/К}C3aP}zvjRܸkgP6{3F4W8]xdѺgfP.i@6FR4XA߸qSO `-O]3cQxo +S w.P@s&8OyS@q~=&ʭ)iٱ: 2t>H-o0[u׫M-U i^& #)[~'@:LU eswB9pExAqZ|f`(u# |׻PhB%u%  ybY{o#-yM4stP\V< Dg Vh 2-_J*a_$b}?197Mb(73&l6 +QA[]OM%Gй)\ awZx/&Ǒr~TxoԖ#@K6v@'~FIL![xb;϶XAWSvtPXЮYVkĞk-%C|LPDcB +l9=.7nT?$d~$bOmօa|.ױO2e^&լ]yf9me6,nrhT82A2ԭ (14bm; ?ZwDw3(xZbzt֞t곸ZRL^ve0`>1 /7۠ Xna5^m`@ipX;&lpleMLx4yA'UtgY@C-dpI[-:`ѳn<13'J v([Kp2Mcw2s1A,rQ[! GCnlWX 'jY1duc@@߹m"E>!L]4jJb)zM1H>OpLfLV{Y^.3G%E!)(nyDSgm/"#!]ޫ; : !EPpc2R oMPr|)cjپo(|рܑI< H%sD΋[9L8sbA*<^wIxY5 ;D7 <KjO {RvuǼ>l)@csi,0w:&E9k}aqZc˝O;KDӸ tZ`jm$,C=2Z$#/"=hSx <#X/?Svr3&k:` %B89]ٕ'4KZQf$%8B 釰KJC"VFPUH(jD:̱*TW-m5C@Dnˊ&ƒ[3d H {kFDԪzV@~(Ϩ.# I뇦Hg,b Mrv&h@/{jffUh@^ kp+2ӒLŖBHyX[U," =芶g|QЍtO$+ V4ˢgs2Ev*ތji`h(6+A '8w:@k1:~y͗ ?%[()^n3~|{{@s@2_9!K^W3۪$Wj}mЇw了c&$=\S:aN(U-72$Rld=c^sp ؼk俊 'iㆾuhYIY4^4—ʞ[*2,6&4Xoh!I I%p >S8@޷֩,cÉh3f{־6! mRGf?+g^+Kk:^hΡ{`%13PlVׇMD/U$ X! ,^6_#宂lM 8Wm0qW0"/rJ`3'F1arVoLG*/wzzOs)FÜa98ZDn pF{jo:Z xt©Doc#(tnThם0WT `#TuS$ ML@+l:P J'Mt{ICQ΂bX9tJns{a&+2%~e%. eR~;Y06F5lF)?Bb6;h (}JKd]3"lmNLN {˴mC q% Q:11Y!<6A~_E2 5&pMlqfGj4}mXTa8k9EP!3m>- R\N3'a DN)cIkk ޼v=,nuRW fNtϢkS;HK5_7x#]'dl!);.T6e䌇f[N1_[+>g$s}srD}KSԥ61 GuRU@zY*4!-ݡ8zSz1rb?Iaٻ͟/ݖnѤyh \@j{ \XMU!YooHn= ZVdhԤs%v[ !HpžѠ_^Y8\Ʒ2vZݎ@m:`Z=-p|9$LYTW%{>D0涾υ^(1\2ptIbX98=p֬;^I3OKV[98ֲ(m^cmG#+̮v7~z;frU7o0 EMpD]faGPFb1qčqcGef$=c = |s6>.&1 fK)e+̻ʮwvKȃlmij7;CQEd>2~꺅4^':Z:\bsȔolf3M#Z^$\`ph=BlׂEgJp/bF LkO:Gn=-9?-s|E `k9 0`򣇌GѸ+O]x63!#PJ.Q%ߋ3֓!Hx,wUh:@2))T5~{>v"F\_k߲/4lF8W1 (jn1H%R\B״~%CŮ~#9ep'F@ّ-d[ Rr_̯5B[C5,qE5J9lB㓯ƾi#e w?S_kx^!-wėQ1H\dO㺓>#^PSQVFw$#_ˡ{=esZ7њ_k"!MihPT_hyU=A?ۋ}!̈́T(}TǺDgW_jm=:P)&<;iCp4WTKHE\|Z Xru˞9!k"|cx|X6?bWs)vc>2z5=; 4U 2;lzE0ʔ;j 4A؀r{ji'x^ )7}EUЧ«^r;2+!\ʎMho^A^ :ZHT"tZN3Zn~@0MȲGP!u(yRZg+"o oFi>Z[ނ2;ʙ%BgfhIWA?+FL#7೴{]PJUbgc԰CPc}2}\hr>2^oؾ-Fa{XQ '|Ab>DϖŦ?s 7x)tfsOU +n Cm5`(!v@[ZkZjXFI%UnUn.w]G4F]'VJ-RF 6h/Wʱ`8![۷Rs7)EB4a( O^ERDXXŒZI~y+]f@x##鳄n?GbʊX`TkA!7/ˊ`޹ͺvbF@x [u\'iތPOQH&X/F .W8%ǨfRvmy v֢gCn7R3d#W#WW`ϗ$]cHWÁ,"zb1 [҃{9΁x! |I{BŸk/牰ps3 `_iv+0? 'p}r>[;Kȹ[#ŕ߽ޕЧj;k b[W;rk sj.mf)_ |WӠJmOuSPǧ/:ѧw/Yna(6Co08xogUQw`6  )Ue€N ~͓S[N.Z2Vš9]9=W2ЋBxGL҅30=$X֭/ڴ@cY8B鱢y֔9g~כ6<ݡ[] Ԕ&Y[5#޴ wvvIFEkN`7 K7TRLW>N_^$,50==V;i ClfVtFpK)G`[Őjmp5l_-6&ry.Y2%vPהY!LBȸBQr)q %"-msXOV=c'F5E<*Yx<.a<U xh;KDQs~5 4./0ݵiAQiX. G= gK` j#޼M'п2\Kgj^ kk6` HԢ BP]\G\&u3nyOz<Ok̘φbtƷ,Mi;slG8'Nnd ' )Sl!htcHNd\V::: ϝW(vw`÷*%KiM߼ɊJbEJ\᧐B'40XyR %ϱge>зΠp/6̚Jg8TEe; ,^jsJb'4KSb'p>y"[| M!2>WʘٙI /:r-#T@Scq8d w)ziuh2ZZXQf8WzWA*'6kjr &m8Qƽm445<+/]S҂#d2ᵙAs BL6ҵ~4Ao{ uA&/Y; h(KRץ g3%}" pV.Ogzz{m j.R ]\ĪZCY _ g b=X8罒@.t%-LKPmvXĿջXha0bp5aosp`(kA7}:8fe!x5Vbx5`W7"fIt󤨆hE2|x:ƥo5:y!JNâ żUs(ʒLnmO Ec\  * ܽ0VTj?;ڔ3bUkL 'AI.2j]_nvP{g8iU4@@\hkWqa~ b*L޷Mg VXkn ~F}Ej%s8#o4X vG3oDT9eiȍ '[Ag5-7=+r:=*^< VCkr!IczǑE"s;#&Z SčW.88hya؟ߨ/'e'tՀ={WSSᅍu SߊX5>K.!%gTqb@SrQoL?mIǣxZ?'Soì,VKRĒ$]Vzz߳̐z`bc#ReչCߒZ%,v@HWO a> /ExtGState << /GS0 432 0 R /GS1 431 0 R >> /Font << /TT0 419 0 R /C2_0 65 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 2 0 R /Thumb 375 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 1 >> endobj 2 0 obj << /Filter /FlateDecode /Length 3 0 R >> stream `:.K;A<,z!=ԨC\1lOV aw&g9qwHB@I ÖxF.7;5UOX~xg~\څ h{1' M`6E2w&GB:,'z0se lVoeeNJ1atx=KxfvB`Ζg&z"_4-Hfto$VڎP|0 Gf1:JO3:2'~)$:ಎ\cX@%_ ́ܽv?%PzHO#fU4 r= tAۯ9L9)Q=AL(7 p7c&^8\hɳ tk$C!Ӄ蘞.XT(/?+ icB髙%*tĿ"%[[H-yV LQj^ϣ/ʉwNW:hmHcs\B({(jAjPʆ@eCGF] {ߞȿU&+EX/ KZ7: A?ڄcEO8&ѵfG\H~52fMRƸ&5xgWnJB[9TXq-ͰD.mI= &MtUH8&29Ց4SoŽl8ӗA{4`PwFĀH8E#ƽ<5J>)>zj48p B ZRQggSL_OV_;!;u+Ҽh):_i?Zj3m^-*U*|I>N+x8yi:0صysAht<9;<)1PCrI6õe]2,> FFͥ1|P2k_`5K@gsOc>oUJ.0=9,_eY@xi'7fxU>*u䘮s Oy=3G! oP]GP[ B\d`H endstream endobj 3 0 obj 1395 endobj 4 0 obj << /Type /Page /Parent 410 0 R /Resources << /ColorSpace << /CS2 420 0 R /CS3 418 0 R >> /ExtGState << /GS2 432 0 R /GS3 431 0 R >> /Font << /TT2 419 0 R /TT3 66 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 15 0 R /Thumb 377 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 2 /Annots 5 0 R >> endobj 5 0 obj [ 6 0 R 7 0 R 8 0 R 9 0 R 10 0 R 11 0 R 12 0 R 13 0 R 14 0 R ] endobj 6 0 obj << /Type /Annot /Subtype /Link /Rect [ 127.62 583.125 499.20001 597.94427 ] /Border [ 0 0 0 ] /H /I /A 17 0 R >> endobj 7 0 obj << /Type /Annot /Subtype /Link /Rect [ 127.62 556.54492 499.20001 571.36414 ] /Border [ 0 0 0 ] /H /I /A 18 0 R >> endobj 8 0 obj << /Type /Annot /Subtype /Link /Rect [ 156 538.24487 499.20001 553.06415 ] /Border [ 0 0 0 ] /H /I /A 19 0 R >> endobj 9 0 obj << /Type /Annot /Subtype /Link /Rect [ 127.62 511.66489 499.20001 526.48413 ] /Border [ 0 0 0 ] /H /I /A 20 0 R >> endobj 10 0 obj << /Type /Annot /Subtype /Link /Rect [ 127.62 485.0849 499.20001 499.90417 ] /Border [ 0 0 0 ] /H /I /A 21 0 R >> endobj 11 0 obj << /Type /Annot /Subtype /Link /Rect [ 127.62 458.56488 499.20001 473.38416 ] /Border [ 0 0 0 ] /H /I /A 22 0 R >> endobj 12 0 obj << /Type /Annot /Subtype /Link /Rect [ 127.62 431.98489 499.20001 446.80417 ] /Border [ 0 0 0 ] /H /I /A 23 0 R >> endobj 13 0 obj << /Type /Annot /Subtype /Link /Rect [ 127.62 405.40491 499.20001 420.22418 ] /Border [ 0 0 0 ] /H /I /A 24 0 R >> endobj 14 0 obj << /Type /Annot /Subtype /Link /Rect [ 127.62 378.88489 499.20001 393.70416 ] /Border [ 0 0 0 ] /H /I /A 25 0 R >> endobj 15 0 obj << /Filter /FlateDecode /Length 16 0 R >> stream ZXu?dVs&s@ ;l|ܯ}w⩉7-Y~ 'Um٧Ck~yqv'C͞2|Mk>x(TZ!]Av|T_{MA["b.xa1گ܂`3`CB7\,\2֙&:‚/ODQ~ڙX@O/+w׳1o ڦŅ3b?@Ȼ% iOSO@ xm7^j=lqX,IOĀbutA{yil*<%uT; ӝ?z z"#xRaI~Ioj뫖qvKd][}U8_٢ynk (6:I1.b\S9WkOyOT k|r&WW$WcF^®OIѹ+H"{I39 J #!SuR;*-d [b+M{P;bˑ^Վ2r W{Inţq&zP""<#ΜM6y}bkOy\O/Rl%]"Xg$iʋEy ٦ r0N6y~]󜍔ķbgPg*3YcWw9"SƲDZR , }it 'Hcnj|Sx)L?R6V-rP$z,09B\#`uZR / S_;Ewȹ"}ljNe+¢Rz"$7tu^'>U idu=@&d^#'0dQ7Յ'CB[#XFTT:1(B+ˆX!6Us޽#\Y˾_w ฼[Q-Ys_+-K>ϒɁXYl+|0B'X Ggg)>~L=FBq<ɓKUϮ"LNC; 5zBރBcɿfxA.|:e4+̽IR)i tu) <%;. ! e sH&cjV@G.p-n:z⇃Nqކ G'(^QaacQz7ѱD> endobj 18 0 obj << /S /GoTo /D [ 32 0 R /XYZ 0 842 null ] >> endobj 19 0 obj << /S /GoTo /D [ 32 0 R /XYZ 0 842 null ] >> endobj 20 0 obj << /S /GoTo /D [ 35 0 R /XYZ 0 842 null ] >> endobj 21 0 obj << /S /GoTo /D [ 38 0 R /XYZ 0 842 null ] >> endobj 22 0 obj << /S /GoTo /D [ 41 0 R /XYZ 0 842 null ] >> endobj 23 0 obj << /S /GoTo /D [ 44 0 R /XYZ 0 842 null ] >> endobj 24 0 obj << /S /GoTo /D [ 47 0 R /XYZ 0 842 null ] >> endobj 25 0 obj << /S /GoTo /D [ 51 0 R /XYZ 0 842 null ] >> endobj 26 0 obj << /Type /Page /Parent 410 0 R /Resources 27 0 R /Contents 28 0 R /Thumb 379 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 >> endobj 27 0 obj << /ProcSet [ /PDF ] >> endobj 28 0 obj << /Length 9 /Filter /FlateDecode >> stream ^" S endstream endobj 29 0 obj << /Type /Page /Parent 410 0 R /Resources << /ColorSpace << /CS2 420 0 R /CS3 418 0 R >> /ExtGState << /GS2 432 0 R /GS3 431 0 R >> /Font << /TT2 419 0 R /TT3 67 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 30 0 R /Thumb 381 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 3 >> endobj 30 0 obj << /Filter /FlateDecode /Length 31 0 R >> stream ί< 'm% Fѡ=1G *i}DXgswZa:r70{W62r鎤g]GQew/g;%~Ű >{Rq43AF|kyE}O!űDqJ61~rX4Y۶ckˮ#}W,,czY[h-Mhb$D-K ^˲ s(W[_˳= ="p\Q lq!a@jBoH4^ü1zcnlf!eJmqK_$pbwA`>EmC5퀥%ר"yLbFr$8p5CHVwk6h|LHr3qA _*6 *[ЬHGXNi^m@%/q1[ahF|#0?೩\vHtǷ0>P Նzn pwe" G_EM,l bX{2iT|2[B37Ti<*]qw'P ǡ0*aU7D@ůs0$zX3.INjj?@;۩i0z6YU V{'G{%UIkò,+j0lCvBoB`($==Wv)0O=pNk 3D`ik! ,q2,}p ]1No6ı{wMCFIVDd\ipX:֎1X DYIСf 7&Na\\,!M-kf l6n"O]7q74PuT2`b  vϖ0¿m޿lsG_ _ZPj"< sJY| at%gQ9AJ{'rC :DʒQAݱˤ 35QL/h&1`?v,>Չ<f nWQw> /ExtGState << /GS2 432 0 R /GS3 431 0 R >> /Font << /TT2 419 0 R /TT3 68 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 33 0 R /Thumb 383 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 4 >> endobj 33 0 obj << /Filter /FlateDecode /Length 34 0 R >> stream o)$ |f>`z5(t6 tb'ɕac[DMl`1݁j.ާ1ihmуG 4=6  ɔs-Է{\;pn~m?I܍y!3R [(xz ^5$jPgތ׮,-<3?VVyOÐg 7^`Cyr։iT RQ5SqؐNeL PȻUL~ܺ@+dI%,Jt+X=)(جpam,V/fY37I{m#AEY\G&%ye^6{̡elj*m ]g]@ԄJQ'H<ւ<'D[RFHRl9_NC$(hj;`cD.L BZ)xG 4L1gW9.7fBOJPe_/5>qbNLln (朶YJd|DYâ)*Bp6ܩ/Ep?;9z{Ⴗ H>) 88?h7߀ZK"ja7|cf}4  Z1@IiH.wdyi}cQF*^EP=zr>6Z|zBsg49u_i!_:|yXF-aCϥGR@hdrts[ JIRI*-y.- !Icxh:(kJ#+Na>&c?ܭe}u{eMyj,W ;g/w6 \oCy ƍH9!W~Ԅ埅kX{ RԁP,VpqpxܑDM--=7[w EOOUO? (;:,șQ1_^A0+ib.o:: UU#|z?БQ>6645=n\ީ҂ϸwӐr^*Qt),˧dFώWqPE{c^:YrEG?WCL>$z;#*!ą4e$3 K9^8똦W$2CGZڛ8|FԒ0gl6P~(H⤸]r|M[MYⵞc7'des:tRY N8̼SNk 5Y_쉴H4e렲!7R8! #P_z,N.C%FN;ie<}$AF4@-.Z &㴼Jgr`͛q!/8:`): n%>K6jJ}j:*VCSـkrK0H&^lon%նF"IDpv>-ts@vWOdu'8Y. hRM,tA\uX٬uGo'E5zF=aHo AwI ge۳ zp>Jp_L(5`)1sbvv4a@6]st-VOkLfo @ȊZ}0%_cS-2kR +jX^>|r̨.;.ЌC Y\ģ;oB*r:4Y~ Qh?^̆/u)-G)=ajOiEwDoYn(W=S?xs/rVAQ[ذWȝ&& Ofma4d^"@g7̷BQXi".9G ԅc++Ѹ6SiMXEuj, Lo-Qkk#ػ@xYF#Q>u endstream endobj 34 0 obj 2495 endobj 35 0 obj << /Type /Page /Parent 410 0 R /Resources << /ColorSpace << /CS2 420 0 R /CS3 418 0 R >> /ExtGState << /GS2 432 0 R /GS3 431 0 R >> /Font << /TT2 419 0 R /TT3 68 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 36 0 R /Thumb 385 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 5 >> endobj 36 0 obj << /Filter /FlateDecode /Length 37 0 R >> stream X}BWkbq"|.5/؀r|pwI3Ej$qAkcl0FG?toXfQßne߈C+IddbǛ eQ:WdiԾ=Bn%9^/pBQhɯ#]ʙ J?h>[g)It}uM(H~UpeX2fU4 'c`ʧxUqSi„/RcBT]X; bN7D.W.]p;N.5dQzWKd|zHf WֆB[<{:oVGwX7*ː{[mJ*ʚUyz EU:@eJûJP@c*D/_\# 'Y$Z:čE% cE:jW~cDr2K8).9'óZqDgܯL_'6 5#0 HǑ +{8R>ʇir"DB.FzG©&$͡;ys+j;M m;iF{v:ƛȸ岛qDЩYAde6xb6=#Sh,#Lk8iZO65#~-R*ˍXљjfvz>`Q m> [q]J {p2~.Ulx઒8X{(>*a2Qbf{c*vĄSc053'4Ni`%,W 4!'Ǯйp(,oY `si& "SoIOf:+oJ4RMʼn_v =.ByÛ^ǠbWrK(=yBy!if?;ivڄa77JDVzVI jd@f_.̨ FI]jVTf]-ʮ9K?wEu$$JJSEF&X_!\!RblB[@o_@ZJj8KI .qp; 0yE٫o<3$5zPz#0mwzHq2bM΢i}UhGYVXNI]ޥ+/cOa*f≠XUY D1c8h*80b @ޏ 18xtY8e0U#j%Pgqma}vAch+L\\=6X+zG8dܒ-F$\H].]0d>o.{s}Ȟ{N SX,þF:a P,I/_A|4D] slaG֠ .d32u 8jm.9'r+ ˯ü')eXT BN-^'4!X;C+-|gl1PoH8)ɼNE%+@=}8Ҹcq9ٕBMX>pEL] endstream endobj 37 0 obj 2219 endobj 38 0 obj << /Type /Page /Parent 410 0 R /Resources << /ColorSpace << /CS2 420 0 R /CS3 418 0 R >> /ExtGState << /GS2 432 0 R /GS3 431 0 R >> /Font << /TT2 419 0 R /TT3 68 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 39 0 R /Thumb 387 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 6 >> endobj 39 0 obj << /Filter /FlateDecode /Length 40 0 R >> stream Oa_}c.W0Ro? ABw|%@F !4olB3 Pى E_% @KҐ-=FiyaW؛LLwE-VxڄhU*x{ʍnIrV}ѮAyo:;XwC: " Eh.N2 g;4ʩ Ӛoe%xO"׾Z76O󢡙g,7fnw5B8{f/@40cuiꪞU\-ʙMQpm\@m(u?fQԪ di+ (XRpr4>NݨHqMy\UZm-SG4K;x^z#ߒZjt :gRGHb1WxMv[KLԽÚ2 4c6;CZ2j&.ZT6mTs̙ 8EbUkMy+i}l~amvx > P -Oڟ dԣA4?NN0+\ᙆt'4DC\#P0Z1 MA >9}qHpa{TgUq.6 endstream endobj 40 0 obj 655 endobj 41 0 obj << /Type /Page /Parent 410 0 R /Resources << /ColorSpace << /CS2 420 0 R /CS3 418 0 R >> /ExtGState << /GS2 432 0 R /GS3 431 0 R >> /Font << /TT2 419 0 R /TT3 68 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 42 0 R /Thumb 389 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 7 >> endobj 42 0 obj << /Filter /FlateDecode /Length 43 0 R >> stream 0&C`UB?Pv%z]n]zєU F-l˭rS0}HǪ, G2r Κ%Vlix TҰ9phߚspOfWF:/J܍>in+pJ?V=Q\GfyJ0v4+&v]:OSmּS{8W䥒 ^Tmj^&a߅*2j{Ӂ迄cCwpsbA@gK**Y1Uh NBTP .V?^ÍCd)x BE,KZ%o€+ ٣(Cz|:f8y~˱vdVTB= 9T|Մe؟7GoiXu-Q髶]\b endstream endobj 43 0 obj 929 endobj 44 0 obj << /Type /Page /Parent 410 0 R /Resources << /ColorSpace << /CS2 420 0 R /CS3 418 0 R >> /ExtGState << /GS2 432 0 R /GS3 431 0 R >> /Font << /TT2 419 0 R /TT3 68 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 45 0 R /Thumb 391 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 8 >> endobj 45 0 obj << /Filter /FlateDecode /Length 46 0 R >> stream nҎ M^Z}:'#_q(djp"_kz|&BLH[e9 щDNr\kmՆFՑN~7ЎM4``'^+kYRz(nO)yPHߜxļt_N3Ĥ Gd]TG%x%bsJ"X1gWI[I[P=B)MhobzNyni|0 ]T9m((¿EkgVk׳z[c;5dX)\ls.j33. ~|3&Hc}bPkڲV"Czo w"t-*AT\tl*P+a~dI) e@4a6R߰Ro=#pkG6+IʁӓIGBm oU M$i]X( ҿ(]x~ƣ2T>qpػ8 [ wi.L K͖8GQG'c$`>MWu槆TjF*oj1./?0D:w2-AqW_ Ն_!XQZ睴IQ 2Q5\ EaGvc,:1lrqF3z}tƼJFw%16R #^x?,(kxmo~8L)b,&v(gX ݐ_#vݝ"M:vFRK*ZVÛ']y{ϒk Lm<<WNDWsE;xTLx??Ѕ:ҡUbd&++ .:R&L#T FZKlu5IQ^b7evehQ myF2 ~2nMS!(ZRGmΣ*d+=?` Ƚ^}czgZD)[NeMitE?Wp͡Tz) ϻ;Mz@gd >/p=-xS @]|[*xyl% yb޸x.G]8Bx @sFt endstream endobj 46 0 obj 1199 endobj 47 0 obj << /Type /Page /Parent 412 0 R /Resources << /ColorSpace << /CS2 420 0 R /CS3 418 0 R >> /ExtGState << /GS2 432 0 R /GS3 431 0 R >> /Font << /TT2 419 0 R /TT3 67 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 49 0 R /Thumb 393 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 9 /Annots 48 0 R >> endobj 48 0 obj [ 79 0 R ] endobj 49 0 obj << /Filter /FlateDecode /Length 50 0 R >> stream Q}_=c"oԔWq_'X4 Z#)wXXKꪚn!7āva]|ΖxS-vu8g5 b(YK> % LA ~/T(?ʐXF/nm0Pg`TzUq_iz|`㬠ND)xK7[KKѺ*~.5:p\ko7Cx?y,u˨fZwst'i%b(&~[օQ_jyI ,o΋␗CnQ 2V\W)9NMeUC "2ݓR*Fc.3w=Uq@U#R F?b[凈L}p#A|o%ɋgcDM„$TRnUMhL'quG6c7MȆOxS5pM߉ Y#m%Df%eG󼇳㏬57O6^q}/UE! sptVʁyX%yHCڻP*qc|hT'T\)Q,d?Ŧ~P> /ExtGState << /GS2 432 0 R /GS3 431 0 R >> /Font << /TT2 419 0 R /TT3 67 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 53 0 R /Thumb 395 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 11 /Annots 52 0 R >> endobj 52 0 obj [ 81 0 R ] endobj 53 0 obj << /Filter /FlateDecode /Length 54 0 R >> stream :u#trQE !B^8#VTH"1KGYE`TK*KnC{ enÙl0ۆ_z=K]46e@& - Y5H.Sw)x2_&" xs3~H.ߪ eXi7&`P47ڐ뗰٥IꈨpdqV.Q҇M=~CMnlXcj,}*`:4Β&5Kk@ 6*6*h,?c;\]#oiLx)IM_*oS}K08}Qw6JkP#_2='`Bf- Kt<%)|F=O{K<=WK1O? w%1Q4¢Y4R#Pi-w慭6"$~ j\2;:1aM鲡9cyG<$?+jE@lG$ƛpnt7_DU ټ6^J/gn7 ml1!:D63T%FV/e[ 뎦Zwcx)dLwOĶۡ2t!P:L`qh wKNe6I2 bد[jÉLW5eEF3ghg71W6989ȝ/s]Y"F=pA\#Q'n1Gp{~dFor\'!!LE:7gyo:2<=)@X ^R4xbISy46#cEç'N M4"W[x~cX"(pp!f1riAid=VkJR&8AA Ѡzd5>h tHoG*@M ]P-5nA}NLHۓiGr˟-jOFLQ~깏z.}"/:"؆(T鈡o5!~O7?AvGSM充%[ά[ҩR_ù (m40CS7fBT78HO{t,bZv9Z0h9iJQNTL.kb3"R*j7Ѳio4&;cnf&^X$EKU0 )V*đ` ys9e# V s 2 .kUygkG@gzm6DHea6MKQSyb4plfʾ1Ǥ9ntwW3a.),0 Yq6# endstream endobj 54 0 obj 1866 endobj 55 0 obj << /Type /Page /Parent 412 0 R /Resources << /ColorSpace << /CS2 420 0 R /CS3 418 0 R >> /ExtGState << /GS2 432 0 R /GS3 431 0 R >> /Font << /TT3 419 0 R /TT4 424 0 R /TT5 67 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 57 0 R /Thumb 397 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 13 /Annots 56 0 R >> endobj 56 0 obj [ 83 0 R ] endobj 57 0 obj << /Filter /FlateDecode /Length 58 0 R >> stream %R򸴶cEOQѷL3Av' "lݸM7jY5牢 #J#Q,E^[kÀǢfp9jkٻ†ovrIǪ2Wj!e)wVotʵۿVnF|@{i!Yfo9Cuj'r20lm!߮ X"1PЊ4Wܗ9! 8†WBRBk%o\u'EIOh\_"]rg $vWffK Q u6mDJoImT}ѮKKq-FYHQHu~;v8$.Ds9ϐ"x=Kv`͡بWh+#d,Jb;0GAlC  > )횂9x5gԅ^MH[tov}mu5E}hxd$ZuҠ5#"|׌}~`k&S{2kc#UyZ4/|;HcE1W9Y| +5Ӡvi[|89K[ 0P o j]3³A'io@esӈV6 hЦ?=j͜+X\ LZQkD_ /6;>iLbM#yY,$ ^ S5 ɕNi-#sBd$5ˉ^pr$|Lj!b}Ӗ4<da?7٭rY&Pl]t =0Y;RM&Ƈ)T!>n'gTVw O5EΙ [pD(=29+HDT]$BS9U$s9ٍ cOp##E7c>5UMNNUrs.RC/ B[ucx\5j(A?kf4 B2#|hcu`tWq.[(ć>8`fT&Ck>߹ξ $ٷ3Q+P@Q4xWH>wa mA ]$wU5:R1 ?ŻոC|KƳ{xdC]caw'RӘ_@}tx#}L[:f;y>o<Fӑ PY)\Ԃ+OUˠTA})I H*63oxv1)̯=*,`g IRm!GrIe f_nif{a>^C <{]?Ԧղ*oc03(,ÎF5eu$aXBrP s==QVyM*j036lRz"ܗ4_iyP, rRFs)7C|]2cNJPy" Vup24A;b3p֘mYHGP(Еae{p=fƦlpyG:;&83he]M n@ 7޾ Ŧ{>oΏ CʌAš[} 2xܮH4j&=6 <"/9pHN[;r/~Unt g'L.Ke ?Y4ٱG%mKZAѝSz5NRn!̥@vFޚ(*pB N!," {0Gzgj*wwY$GHvAr~*cҌ͘at/8)&) %Re$rLH@h}F>1A厸Xu`GEP9qJy*R[UsM $o畎dsBB=9,Gm㕴ksi%)t-ME 9ۊ KR.ր ]_A!$6=0Djn]9[`pPޒJR@z`JTC0?^c;+y/NWY(ĥ; n^~D4Ԋθ] `r <(ֆ9D&ݼ>y`XEUڧ l\Y*V#3t47.D]$4O=${V^6JF{B>“泌\`>gxaO# wg иacY;ϋB+!l^rtEmZNY7 u9-[\/|Tndtzn# ć  <Ԑ ntڡ ug4Z!+Sg1aݕx܌v,ݛ.$:WtXT.묛( iG*+b7Tq^Z?Iƾؼj ˴s.pgA-dz0S:JZ.4sCuƧcRN)A=~t'&taߪd=ftxӤ[e+zx!|p9rx= Zۡ4hh4=0a,9 w$0q?*6JdIҘWP1CX-g>Wj/ɋR(¼} 8i^Gg<{^"oug+Um)f# %svٙ]+~|E2B.q$҃c9׻]:=X~xkkZNLRƚRUjL$LJv\lC1H_f%N4p8y6")FGj%0m(x%U3` r}@؎jip%Z8wj$E>D _t I=C#;S>p82d٭/諔q}0&fBPrGq=gduSHf;0#dMhhnX$9 P]3c(C7*7tϗ 8Z`:!wkNXV/Mӌ[ +Fv'=D R;S%x%[l}JvA8=U[RBj3+c)"Q5XfԨ,!lpMn(9"~e;?yd0v[}x\ź @f\?n$zؒc°<F KX *פLo0:8 ov,$=0mYc d * y!X F#M.NM#Tߌ4G_2DR#أAYrwx2 ԼHBCqb*t7C &BX-\˹ 6/a [~{h[pxoș^DuG?jk @8##%UMc_5zy=V6:zLjEtȚm%۷:e`1U"caOL E _8[iWvM-ۊ^9f׮+NBCw.Kl+/!r'?]a`0.YN) .Y "½h{*YvCk~5  ;gC3n' D0T~J{|QLp!`C /e#7˷y)#gDJM)B\ oDS{u*c]WV1$G%3pl L.>r:qABjn-QU1+h2 tW- g7?x̍ei|Vhj XકڐT`PGlNly\TW!EQM2jgWx>t0U XHlF, ^]:fWB@lBʿ4fBfE c&i_"5~hoav*7HOKxZqh] y 笶giKtEe*0HSHShR$D{IyWu-> iFukZ;#4۫yu?)!%rHyʲ k/%*.O3 sn/<`(?.s&3Wd'Pݎ endstream endobj 58 0 obj 5361 endobj 59 0 obj << /Type /Page /Parent 412 0 R /Resources << /ColorSpace << /CS2 420 0 R /CS3 418 0 R >> /ExtGState << /GS2 432 0 R /GS3 431 0 R >> /Font << /TT2 419 0 R /TT3 424 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 60 0 R /Thumb 399 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 15 >> endobj 60 0 obj << /Filter /FlateDecode /Length 61 0 R >> stream C_`'؄ w1L紹GGTL6~b{I!T~<Ԗ= ٿjQ~1 "cNhC SҋJ~h,[O/n~e1g8G8h(#=;rڻ<- ݤ3OQP#_1HlAIz˖.Xs[tGSPck& 2sumd&|xm)UN|Rin)G#wf!Y v'0sĞf'< zE,ϖ'3a&@c/n=r5a%A'B~](mp.6qF{?@/*in:ye_ceB;aݎ.5Tq0UF \!<],V"cpX8R){Ѹ6kspe?'l2 X콦p1#B [h奢9lB87Bp,Vvl`RX6,OY0w?rCHRS>!;ՑP{͗a}O;%᱅Y!+FO/*ccGb:jier!5s\)aޑ彪-WtL͹$a /9s6d 3 ۗHqu`D F5&" / rA## aFj*OE:V5j}Ol\3VQxִL{;W^Ʈ.b̄JߍA}\SwR!ӟrION G&Crvc~5r pkP8"px|뭌i3 !z0/צ2t(?@}7Rbb_ziRW.pHaº-"䃼ö9kTXbQ[/ft"h4<@˗pP `z٪QMK)"˖K1ݮ;eY\/Us`<_;0 ;#rꠏ0Le'(yft:*d80}w-Ыx h;)]O0pc@Yqh6 #D,% jQ4Z{(-6vrد[>6XV JyDOy5M6s8759ua@Y}<"տa/ve2J[lfF.0v@xq3M^2hЦYG%ن7 ^mIKj_tE)J51eLҬLue:ԃSFRr.#/-o_rs93Q{|Jymz"W Z:5wG϶K* p 9Lci?>,^I'6KFFİcԩ_y#lr #] QۜڑQJ!mugk `$}G5aJ;Ev) &`V]nb;`l7}Qn}ѱ8A i#v&3t9?Fa| FSzL}cSi}_9l,rec<M_dp 0C7 Ui> ]W?=EeXNYNydW[\Tq?(8oG0aݎr}Ya>86? u I dLBIcxת+%s4I"Cz%xI- sD#!R'x(iUQYHtC$Iզuܞv Rˏ:W[ "?D:?l\͵u )'D{뼋\eg *~ ghC&JV|UR6lB R]& / w B2$~٥G:c=n!XK ~ک "T*k y;B 5\u ƒmcx-,y6zW+m9BHUjUIŧY)XVc~zJon~fKDHI ~mq$+Q>}tqYtq2Z}CQD]C"AE''OFEXMPem '\ a |6Pdw58ק s#x&)Zf3 Lۖ\NS1CJR /MmyIC}Q&άŜBKWUo,v )͖&Ğ,S Ms/nw 8Q<;;sŝs_*_U탳e5Zk9m0dmJ2(ό32kecɜ+vlEeWOq}KF8il;ÝR_Uw@ h9-:t'qBG(ueTfI8=2869\!lNcѡ >][o=o)@щzν59i2#.c#GUxX@S>l2tᆐP y60YV4fLmmI@j# f9R8IƏlS;ɉDt=v9m꿔r˂Z.soL*4L`%w~IP֥J׎q $]մqӄ -jd(QzBS2x̐^\=)}t} I]hkQ#xyzۦK8jAuQ* endstream endobj 61 0 obj 4237 endobj 62 0 obj << /Type /Page /Parent 412 0 R /Resources << /ColorSpace << /CS0 420 0 R /CS1 418 0 R >> /ExtGState << /GS0 432 0 R /GS1 431 0 R >> /Font << /TT0 419 0 R /TT1 424 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 63 0 R /Thumb 401 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 16 >> endobj 63 0 obj << /Filter /FlateDecode /Length 64 0 R >> stream A2MA(wv: .s Eo΢ED bIiv)~Uk[ڢ n12(Zه6r- ' ϨES{殻>{ ء/yZHY.Q2>9qn,+{J Qg+zIW!b±I0K,N#5Yj"aYUb6Ƨ)sN!@l81] E4:Owo2*5&,jU*Ov .d"@)mJ|(<~0ؓ1Tl[hn&#fҚa'jm=/qqkdYBL2 IS%Z *!qt6!K+@c/2u}H4nmX H$~Gs6؆m[Qz^ B."ɢ^L44~qg ԃ1 gDp.ҷĎ W626&_ P#5*ٵ5r}aiV7^y ;ٿ7bX&/)滯s `SjϳxqRl>\g~7Ftڒ_49'țV +^Ik[$1 XWW{3:ds+,_|Sh<&_Ysz}W2Ɇd>H02RAF]ɜ \CF#eYpTРwKtڀT㗊(ɇ>WPZÛ* 趿Pgmf&bsL endstream endobj 64 0 obj 931 endobj 65 0 obj << /Type /Font /Subtype /Type0 /BaseFont /MKJGFH+SymbolMT /Encoding /Identity-H /DescendantFonts [ 77 0 R ] /ToUnicode 78 0 R >> endobj 66 0 obj << /Type /Font /Subtype /TrueType /FirstChar 32 /LastChar 32 /Widths [ 250 ] /Encoding /WinAnsiEncoding /BaseFont /MKJGGJ+TimesNewRoman /FontDescriptor 71 0 R >> endobj 67 0 obj << /Type /Font /Subtype /TrueType /FirstChar 32 /LastChar 121 /Widths [ 274 0 0 0 0 0 0 0 0 0 0 0 274 326 274 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1000 593 0 641 741 0 0 720 0 282 0 0 440 0 0 0 521 0 0 479 491 727 0 0 0 0 0 0 0 0 0 0 0 470 560 458 560 486 280 468 560 245 0 0 248 877 560 558 560 0 331 387 317 560 0 743 450 444 ] /Encoding /WinAnsiEncoding /BaseFont /MKJGLJ+ZapfHumanist601BT-DemiItalic /FontDescriptor 73 0 R >> endobj 68 0 obj << /Type /Font /Subtype /TrueType /FirstChar 32 /LastChar 121 /Widths [ 600 0 0 0 0 0 0 600 600 600 600 600 600 600 600 600 600 600 600 600 600 0 600 600 600 600 600 0 600 600 600 0 0 0 0 0 600 600 0 0 0 600 0 0 0 0 600 0 0 0 0 600 600 600 0 0 0 0 0 600 0 600 0 600 0 600 600 600 600 600 600 600 0 600 600 600 600 600 600 600 600 0 600 600 600 600 600 0 600 600 ] /Encoding /WinAnsiEncoding /BaseFont /MKJGML+CourierNew /FontDescriptor 75 0 R >> endobj 69 0 obj << /Type /FontDescriptor /Ascent 1005 /CapHeight 0 /Descent -219 /Flags 4 /FontBBox [ 0 -220 1113 1005 ] /FontName /MKJGFH+SymbolMT /ItalicAngle 0 /StemV 0 /FontFile2 70 0 R >> endobj 70 0 obj << /Filter /FlateDecode /Length 6856 /Length1 10572 >> stream HtV`5A7,E6 G3)dٟ0/ϽH5Lj \v !+zqh# "L=;j6Ai~Rmme$ϩ FA7"c\,Nue0Pz @5x*}퀃Tat:$ e!=^eiH*+A3*,mE%n-dս͓=.° W,{f'd@ACpkMH+Srj7p/pMqu;idHW*nH[¼$W?Z&WzW6H>@lMvb E1ҿh#/ol.;Kx7bnei-ݬɹ'hv U[;~"/-s9.-:w]9rc$ ̂h ƹ )`vn-F"F 'vj^ԂFU0Ƕ8@`IY 4*TFZqɀ .޽2$gnaM0@SGG,քLRdNN< si"dϴ Q(A ۴&HhcJ3C@KQSd6q^8R6$cC>=_z_X, wW8b9%="6Wy2h5-X Kd,.o+urml *Zl79ozHI$U;]Lu?1?Simn2ۑ`L3^^6~S GD=c {*&ʺr;GeAG$RxBc'"usںQ?v# ɼ[P+<U΅IMtv`pe,o|e <>:}uu-ʳɂћ~#F pCd,آ7qU63BHR?z^e2 E_zӍ"~ۊKXoB,i |OqN*I}C{h^e/'$:mn>!vV7#w."6fqPڏoCPih@YYY mKYCxv>K\2{bPڡe5.|ڒ"kl>&tdմ;Q@3V]rSK<%/E Hplٴ>j(6;x2Y Ϩb~mh<#H첣_Y9,]ˠ 9̠>d{{'t`O4~,!JKkHW>WrRxƃiAq)f;r,\LWpX.ʽr.–{E4@VW.Sܣ{rzUϫRُ|8uoSO{!*;lL|f TPu}8m>s:eymyT,(yWrDֲq!jPIӌ([+ދ5 R`r*Y&6Ž:I:wx6;K\ 8I|~@-6cS{\AO%05@p?,:b_GCH$y[Bt&wc?eMx[ &[!cBYJ+Aܘs .Y vL_~b]O^D;ḩ߮0!0RH91Zd3:3!+'dX.9JbQ$WCŐAeiǔHPKi~,80jFOR_S(L|"8HL k23/ZB-|'u* NJ\֡XcVG8C!㗋ԶڟӑFE sG},ӈGY UmNg ƂG}I!^e0|[ KUnt(Vg)Z'Pl+fW9o3 )b1+O$c])[OiA(]w> O"6N )^ymYs̚xob\Z1Y+x7]";OUԫAS[_l丵9eL ƴF_zu:}~3tPbEA.n4fE *4 R BRurq$T Lu?t+ݦt]/4d.CDjV౴oSZ(8lKQjWV_mT.+Qړ k>7ju~gԄl┮x1 #P7Q!va;']G5οԈ z ͷuBg³CxK27O&DR3x)Vq\x~U&-.{rk4ňu vUy/lt"7nw9J:"SqBǛcaLKrA68=ή;%NS١YzX vE8L;n:) { Da^sO6+?0 =6/}@S`'=ktrҝ.n=jpVDq }dyC,A Nˠ䧽ғnv2L{ za{4цq%?`9= tO8/!Ne{<f4ü: r"\E_P(ZL 7};~}J?8ݪhJئFQ:J0ˣ@C3n ~xHĒY6 Nq/]<]%RFA3MU׿ -pW}|uo'gem5nQ_rKig  酭8N>-{<,Cgfmt9ZRHy܊/SeA'fJIoOd'Z|YWR\9wy,+DM6W!or4=F`뙹*rII,sfsJ T|E>,WjѾ3|v0R-a]Y&`2Cԣ9KNz W;0~/n(](Md _: +{4NI8̓#Ր-6ѣ"D3QUҥ}L 3VRa˺jhҘ6s^C>gBMj\f^PCEom&pѮ])Y{20gAzMD$=7Q$KtڍO_x3]e\AY<4a[vw'{2ۃ7@~i}(Ha,ȭlC~vaG8$EPEujI*ЉImKGLY,bZ燗Ή 5Z5ϷwȗNqs# EvYNOQ.k]cC?G|sR]Qx}{bpiUMEO!v4-s^cgES1zcG퇋Y05 yq [OQk aZprhWJWJ**PvL%pM|Q  M-`t5;2 vih&E+:/6cFn+pD(ZA^DPv y=o"yI0%ObECo DBX b)r2Ida䵻p3BGBW=eqD<<ߞf !E["iLjSVY).m(JS2"?1O=y fWθ3Df}lp &6upb=wȑc9ȋe<+|1|kS_*iܴೠ[Y)įWkmG2D0;3Dpu F %F^ .g]OZQQp5w%!Y+?zwr uo Fw(t(?/LcUgLP@44 endstream endobj 71 0 obj << /Type /FontDescriptor /Ascent 891 /CapHeight 0 /Descent -216 /Flags 34 /FontBBox [ -568 -307 2000 1007 ] /FontName /MKJGGJ+TimesNewRoman /ItalicAngle 0 /StemV 0 /FontFile2 72 0 R >> endobj 72 0 obj << /Filter /FlateDecode /Length 8101 /Length1 22064 >> stream _|>u@6v;}A8UX#_[E k}oۥŨ(ϠG'&S4jH.*G.~-jzt7?4"MAjCH %Ms//(ݡ<r7N忕Rz e\=iZu1r;բ -a_%L]hnb=!k, qq1<“Hk:ܽǸyWѭ !etȹǻ^ 4DEWE=Y?Zs~+u31%CTƜuSVP* >4.>]eUς(i}'64am`]~_/v|-vHC}覨lX>*2˯i*Xj:YqL,=ĶwUSW2w/ç"خ Й8cw\D͜L7KG91&$:پnȿJoeߋ/Vحn+QGx,wa\Za"ύĻq/7 +?3qd0խU1tmݷT2gBbVգccRBq) <`% 0YJ'.DSrGHg w܄(pUY[yXޞQԷQVfƱ9d ̡g*ѽأvs8HLJ%X[%\f{9~K)C30U)OV|Hfu.gF,)CJ5ig!o&ȐVca/ &g2lRg4-]VkeOXZ7 ¥ brrͧj1uFJ-Gd-˴*R$lce/P 6g$vB4l٠TJH5A+b.*"d?!~Q,~x %3&Jq[6)\Ȃ^ %#C>O(@r'mU╆/-K"k ǯG>ȏ?7> N* 8RBk -Z _vwIßjO p@մsY<\addD}vJQD,IcAR:@*B'yˆ] rqW 2E e[8Ym*\<7mhWI79< 'w;ƯZ X14 G `jp1dxCB]uXiG0j Hf *.hjta9H. YGdgDB31NРqu&2;(ZRKA,PZB5{C ]ʬ:P9> l:s8 FCY.1KVWߎJWbMMЬPQӝVwT BgVk38t:qLDΞ=T4fظP[hbbү?f/Iߨ[ LW6ⶑdn,Y}O۰%"_4ҏeT8os`'!ዠЫ,t5RD?@?RKpٖv0}rY6"Fe6L8|XP-'1²_!%f8µ\#uwCEWEz=6Z ;sT@(u b$%۷b]A`گ_Bq4˪;ްbܖ!%5F̖V )‚ka*M'\W_=b"f-n}yjoT #} ˋ6yj!i ˅ T` d̉&}dW=q"J" 0@J?Eb8׌CX{ĈS.%pLŏA᭘Z.gnMkumEc\>]JqL*=.}|9%y:WTf}5 3+bG̦8+jOB݅N^>"9?;i)ћfdHJ"EEQBob{u `93aD4K X#ݓ_Zlחs^(Wۅ2ߛLW7;')D4LK7!ID}mGt֫g7>;䟾0|*w]mgz6ېq PqCmN h܂U[A/a&?"}mmXǿ: >Jje9́Jj]&*jq 2h݄wq2sH[ ~ahiY8~SL?m. ()ttDYr7䇲>JKIzq&x,&n88QعVK yUXCWL+ 3 0aws L^hR}ՌG@w ٠jE8gmG3h{' [5\! [zvQkvphO5"uah창og2bFvj*$Cp49zhr",mȍu"Η6 "ZVyIqeNˎrZ#L40Wk-6r|[d /-]bg7ґ];1kn6H &aøAvnX>}?a/i ,IVۼDh*.O;&\6(.OMl^,30ԩ{R8?״H>s b)oO69TRܘ#S5Dx:R妷++}IkD]p%5ms*J*pn&NI8&Ahμ`:GkK),8ӝS* iNez35A.yA'YVߴw}fQ1 4>EW| = 1DH[р={v*[ՐR_}|vHK19[ӐT /^W݈,"ϖkԾ+ѺWu9~ xRl.`( \BOFXg\tH)BZ! ogX-,Y :fna~3h/k%4pqnftp;<1:D.ͿzKhm1|j&uKH}֚bѨdlA`&)jE`dFlją&H pC[b46:߫piEQA|g'-' !}9&.⿂ӈ$kXΖ+G,k Ē­mHH^V=0⭨pa%)¯{AI X)ܪlysIz`-3k Z:iu-lؚ*92g}7P9YJ<".|G'!ǕQ Jލ/[Xx Fp1$Qɬuañ 7դ>Am#rMA f]Ϲ57:kp]&h 7b8wJ-F8#^aqBdXwZ0 06bk  /bsǎ*0ݳO}kb?'OPw;M+Rêy ƴx/:#6e@:Ǚ?ǥ.%1g9a0w5~ҟ.əe#,q$nB#Wo<4";5Ju,7{!p:b~CdUs> h1a3UM9hٕ=9CRUlUW[R탧`*R,1>/ZРٮ@L!C#oG իkspju)Q#ayNgx)k.*gpX"I(wZh8ay鄲TK9$+XO7e;Rd!K +oQ23#lgv&0Ңs+3r*Gs/G}7Wxl6w9NBG-h s NJI6#=n$vK_k? .S"ʞ>BcWgʿ }fX󦾠1y64{U>Hyh cX ˙]}]?Qˁ+/VU. {Fyx^;fQh+l8 kECmRAXnt/mrPYA(/(mظ ~t]%f ,y9jilbC:5l^}Ϊrx+"` šOs\l+&w"ZAIoJLL@"pZ'cP?;+mrK02 ?)IN9mkHLHeռյmLd-O? * noq_+gNf􈷛Џa+RuDP1K%$ , u@1;iU_ `/@"YR!,Z*ؖ 7vN}ǩOwLכH޸7o(3GI82CG[9)Q,[BR37BowR^6XR݁+/|F?1!K#6[-~ϿÏb?F`^ ~5?LDOĒ(Nș@ROUՎA^}\ !KT13ސ:66e α&]eek=XL >}WEZkőe1 @ƉN!8ڋvkzRklQx؍Lwoe\EMЩN2w%d"֝5MSy C|c P![ J0ʦˡm3F̮}:9pV n_uFd52B4 =:p>IVs@}*p,LۅB=obB! *ݛG]W\\pxc`Qnab|a,OI1$Vm<&oC1muy{ Qb$&PoKU\"̆GI{\sT@` Ɏ8I^ >;^Zg0\i@iZwv3l"0&9` X>XLc 뱕LQ QB]e^_#yjI=*wU!1cǟߝ' ,,z=,0=z?I$BEQPCSx 9BHɻ}!w͡O\<; +tѭG?: endstream endobj 73 0 obj << /Type /FontDescriptor /Ascent 962 /CapHeight 687 /Descent -274 /Flags 96 /FontBBox [ -218 -275 1112 963 ] /FontName /MKJGLJ+ZapfHumanist601BT-DemiItalic /ItalicAngle -15 /StemV 85.39799 /XHeight 0 /FontFile2 74 0 R >> endobj 74 0 obj << /Filter /FlateDecode /Length 8502 /Length1 13056 >> stream 8F7R&W MO:!MxK?(^WcX4[ِ:hfb{J[ą{> M@N*R}Cp=eou1OAs(dsS9\(r ʐ y!c't@a/EI# rq3pZO[tzfEO/ Ԛ!Z[H}it m؞ljKL#&_iZ;L&~,HCoc;^ 5{ t⹽Zn^g5lX1}V/C @TYA;&K*0qM=9*uuvv?cKb26vY=˝ #!Iآxm:R𓬩89ddؓz¬}cP՞+0=ֽ˂M$.?e=)er6v6 ֯k구7-2we9^F;3Ttտ.hhh 7ŕ)')H"]e ơTiVq5^[+{s^A,V%cx2C| ruFׁT1xzq>N>#A/3 䚤5nFrl-˒ii :c2#;. 'j_뾯Y8tN0p?spBޙb_Ab^v SjMk EZHA2\i7GҀkbA ]s RڢaҬ֜tc>E.wKGըm|DIZalF?zdeħsNt=Fܒ%o&N,.T]O~?MыXZdSpGD0R9Z$حj:p\.\1Auq",I' *dБG /Ǖe5gj8"Oa_pKG b0y#L!CQt@p$vR *O|$bm~Y^Tf RȹXIU8qOꞫ6X}{N"έocANЛ7M"f@u0ؐ-b3*o{f- y`j*44N<3dL̼FU^5N83Z#ùX!+a;)V](\qUWGCpˍT-d厁 +6/ M%]~$<ĸA j=Q6"1--u3,$5}8G؃F33G<1qt-b`\^13y'Ire u=-yǂ"՟~u|Uˉ3X\Ow\XPVY yKoz4uAWe x K@Эr&ɶեb{V Qq!8<7W/= mGxlHA*A0P$5R m>?/L52.:z ?otAҳ&^&w.b#Eӈot6euʖH ݀p EcxsL "O:sJr$tk7M-%H(:^ztR_va(x~N2!.@][d2sX7RVf MԎ\692DphmعylΟ.>JO"ߌ;+կ'v0>=xOQgAە‰2`ERx՞_I* ebqxl G[u+6) *>Y#C<뤱a\#;^`L3'j7A%*GnC'CAT|3"9n"eOn\N-ua,ؔYNd_%'B+L-40ǔhیtZS(:,a(W69Ҫ"gtQ!m{Zxf'B#5*>⠫}#"vOq}#Bj,_!Ђ{MOAPܴ=  Sr&0̵xǭS @bvA݄-JY:8 <:B{}c{Zv{CY';ՃvunQA2*xk:? Lbf]1UX5gyezpLO/FNJQVT!*A8I=Ul9l ~:u.B|A^usԿ51JÅim)?5hw8ٝ҆N,rҏy HuINlG%V"qdk+j϶q)06kO)kCI,/F0l`uȏW=.J_2; ?dkaۋU~lڰ]U ZU{T2n)g-ͽbP(`@nIP~B@0y^2 UFJ8p7Fvd5:#^*q:^г;G£lKka$3&Wi7'2S RR[LU~4FGB~My$Sq5׮F̃oOY/~^}9=ڒG&Ԟ8L2whg}ȳas ?$̒3-!ɑ a`w?ЂCRHz ~żv>տ %ֻ]Oݒ+T̃4k0!E^c=yn?5<(J@p4hߡB{QkJdcKѬJ ?1 seeS vC6H܆ܠh-9&jnLX: yrE,O[E+7pF$kĪzԗS %8,Kpc!0y m1$ݙktT>S+5$$,y*R GZ'4`k0K?:'{:Ic#;xe\K/g :Zbe`wDxٰ{gVn0BjHLjuïvU?G|qS8͍\+܋J[kdYFhwR7.XIWՋPԩ8M`OFExqWa"a9vTp wKRĠ*D`Cq=PIf. U;|j,_S$SFLmhM?]9B?Ro&O(bZoi@!>vNec_v7z)"rgP(LfmJU髜7q ٕ5pm=(Wxh4iTNbp~>:CVo/l]$*&b1 J$h= r9"R,DVWmMavzce."swgUL/ߴ=BBS[4 y9' Oj u=\MFhuZw8lQh?-IQl5ex$T6~&?<MEύFqUd>3q3ny467%fsW#Qy[{b ׽'>Gݒ/8Y+p @86%+6OyE7à0ㇵLnb5A+":0Ԝ]qI&)/"߹yZ_>ZUU?抦?8LRk@fIZR?49ζkkgs3 |=kW<}HB wtQHԳN\BcR/ >J}ތ^M5/;pّX>2UeΓ>(|9d첧KR۞uUYOLJ sTøke F+aW`{TihnP!I/Cv]kw/ml/{ؼ"b!_vtnˈa! kĢriy8bVǮ"9SAg薞NZTjJn,f믅p\D- H.$,q;OdK&h ,ƩImah},ALYFRkA65^-N7?~V7X+ِ̦:ԜPT Nx=%r 'Ɩ s3iZAUď3o_R {ߢ:?_a%:XSOilW O~ũi!bI+!}ͯHq\NyfNrmB{kdaSj(Ï^V &V#O{L>V;j ^ݔyBK.z= / {mύ7x"(, ΠU*ӯ8?>bg N +޲n";ЮwG41IT^}eAu]"Ղ#2 o )xɲ40v!ҒPB&?wvŐSOJ Q⿄MHPm3po!"i \>)IV[NjKq5 #I#@f O;_έ"ц̢(IX!҇'m?K0Q/5O?'ZuC;}YChXw;6Sb }ĎﶛٛfJ&off4cErF [ d/!]kEA-.HGsc6Jl6l朱y~\(G?yTFVk)F^BJ§ܯ ti>=,噧 L{3qm5EͤF*mXK75 t*?ӳǮ6`L<"C?gIH4Pԭ҇?3Yc%'.^6cZ3UTIt4L49FGuD`}Ht˴Mݛes3VӇ|hhMxfNS W#]kmtZ _*"&k'TԞo;rT#(Nr#5$J+lV} YXHB^GB%Z#js-У߁д=Z6͹#D2 ZZJaW-* endstream endobj 75 0 obj << /Type /FontDescriptor /Ascent 832 /CapHeight 578 /Descent -300 /Flags 34 /FontBBox [ -21 -680 638 1021 ] /FontName /MKJGML+CourierNew /ItalicAngle 0 /StemV 42 /XHeight 421 /FontFile2 76 0 R >> endobj 76 0 obj << /Filter /FlateDecode /Length 19861 /Length1 34424 >> stream ϊEuxV?ۖ|zv\aQ, ^U(1Kp]stk?<<Ҷ.!bݏ"ɦ?@z2w&C q0k%r >H`GgJmdn<  VIQ[6Z'gz?G_0L}f)vu̟ls.yJ\,@_}%{DCT>_\)rQ(S"cʇc)r\,:s~`NŸPxw\;.Lp a/έ4>=Tϩl KԐM1 %!B N #:uWvF0a׌C*B* ]j5pmsޏvFز(5A.u@A՘X^L @_\LiH;氋?6д()-ޕRMl*|ux*{;}K,o>e<@#mڨbVxޒ\OIl"y9iQn1Ƹb|FqltW~%)&ܣRUΧ |]zG^S|zƦ0}~ʄZi7zP: ֳ$\0LDpoDgdakt4|4쬡&&y* ܶnQQKi=H`72ioƦC\}=_6zeoC:!(|㎕ɌԍLjcXӋT jԓ1R YE0ye^!KcŕA 4="3y@DARr}ei)Q֋(ђX, 'qn \B #x:U6 Z4 G8,ftYB%,+KɊ2+u'Ib=γR^aޓՑRW@x=p{Kϧ:vvZOcd1x.Y| ;.r)2$ JX : :z(wclP|{|8\LvЍYV{ll}*l%H8m~4ʍ;Ǥiqdv⃽)I%d-JsD:gΞrFKoԷ#8 )'fY3Q]D0AŔ ];^cRPJ(w],PA=j :T|>o }$4i$d>GB#eq'ŇwAB/DI@38 IyV.Q Y@XsޙO%U߻B 2>2v32hսb0^M%1#.S/ 4rs^>ɱ<-cKUiJRre؈긑~4DSz8NMb5&+[В2(e9f52L0Wx͒`TtI .D|ǠPӥik/i;-z+˙-TzYσARpQQD,./&4N Tikh2 sMXNUͅɷua_ix"*O@U(74͟LNߘfpY'` S,CD7%BI/y^4Kȃ=Wo=im~]FVoImZ mn-dʸk&] k'?߮ .YL'f6ޅ;-htt;cnHӇD/kGae!!k<:kWcSX 6'wq'on+  >٩,IVh72@jH 0x;w}i﹅2ftvUd%Qz%uM*]k> K 9z^9zG~-QΆD!%;`cP޸RZOqv qIgkF.Yhb?W%z>sHmxT{VI•аݠQަiMj Cii67*ĺmJqG@e~l\|q3|F)ƄI0',ѽƜL$nGT} G㒾V4d 5_1?>L2 @Մ GB^/ǥ7㖁xt5Z(ʛ* 6GS$iF0.ewX𔆡 w$ *׼FE-,Oaŷ|@}Pt' ^&G>P폋A7i5|n\)heץ^2[=l@0!-zz0A&.dLd^^ʏr 'dqd]fO&WlW V]ՊeSnJnTb&}%6|Se(0L }ɳ##='FMLhVRJLXϋ̰ul5I?@AP3AzՑx2Gq{A9Ÿs9k< ɼ_]=FhfC4>YB7Z>Czص&Jڵ=}ODx%0+ayZ&<]4ƭc:1v(r@EGڜµנ0pXh_3R,~}: ӝ;klr@ `.gK»"G'*T#1WbRJF+.ʒ%;Y/ KP றt:jMso $CTWӆ[1 rM% eDž_FT\q4ڡQ֪ԧoCޟbw.6f'%sȕt`HȖ[ZoZ3 )@XVgZO6Tz̗$+ǦufJRwf JL&[7CFĺH^ZtUhoDh}z|[)w-/C=e]F]J5=JGo3q'ڛ*5K%6ѝj"#Ae~[#52|7[!(LC&hExB~*Y?|[TLǗ'TH̠RXZ [B'(_ڽdŇ q"pz"ŗCĴ^}ο'хr{:u#L  o[slD%Q5H+Ul_/O5 ,5, 6h.a&u nC..dXRqDp̬\5kljt7!ZL/ړ#9C$X+i%/*ʃ,O \.eR\JiqKfWUA'kIF:gV!Y/ %J䭀anoz` ~DI?;%~`L:/=ӡ:~Ј,-@_/ր_` 94T !N)/*y jy@tf'@p#B41u(rl%qjK6pJ(js[!$9#݀IB7qaoz?Q,Hq`in:nRh< 9jD5yM%HP6B,JjuAahyk.ygq[e%&YLʛ\WZhRksEh'Bj3P~3iZ 3~ȺOJȃBi2KAq\qL$~말UoP䷯˟v~zѓ>N'\fNMNdN "$пw? C級*C_ڦ6u1MXs:LQO)8,׸!im)@Sq8:}=)VwP|TD.=6=/EJ kML]HbWZ85K-{K0WʩC (-B 4yx^cc!~ \)![5Q-Za!ʜ-ką/ZY^\\֊Ʀ8D~CԲ9fl|@F_ 嗒>N7?NO3eX |N1'Jby G]bFFEGR BZ|Fx+8^DhGUZu pɈ"%ou/l5۔*h^ pF *[gdF]$Ml@h/C叟;:uEFPG)>~c/ k9UV[_jt x}ϨzwɣZE{,R^rn٘U38CSfý.^eڶ`9kudUIfh$٣M;ҷWo",(1l2H<k^mg7=yaF3ŕ-G6 yy7j,PS DD)2ўgId$#'tl ЄƁ0T"hf1>6 &PX61/ߊgns&^^hym75\T`@^J@~5p#Ǔtqghv\.u\=oohK_g.>~RhvC69ҏo8xaGO@ӏ (D(ɸXԍLƛRr \Ose^aNt!LX?ES; D9n, 3D ԣ쀚7=xbS* c (~}9wCVru~eXtȫh;`.,U5 ! 1m;uki3$}: >+=r }yGypBlmdȒ Y1zF{MDl/1ZL4U.9Dڊsn<ԡx=3p[O%v.^~8rGa,NB:Dw<Ä,:=m Iٲɗh;WW2};1_BAI) ('Y,_d?bP[H'Ov]L=C'Bo:TB>]Zt F'N[(aucK.v"^_sJ)!v*/TnVPDvB" rN<߼O!Yņws魅zk٢_ 5?-:(ׯȑ'`X* Wvzm|[vCEP<ָ٬莔 iqzͱCEBsjGSgQ/+A[hclǾmdgjpYSyRoGWӈBWC^.zCp6!]̢wR c8y嫲^ȖRxLҍFqm78 vGQ `?!C`/N'@g8T\wK$Q^߫GLPr a*aB+l"YA],tU6&_P|sAB,ӾE0HkEIߒq&F=ʀӷ6n1~,kO奙5;ڂ{+ nMbsQ' ?pAumƒ967c`^`5x(wVrg@6^լxA6'X8]r*^TX[V,A*B0~fհ&YrRSNmIp-tw %Þ~qʟ7EfѨJ?h4ak FhBc`6˷Z' yg/sɖ.%V-mי4]=k;ZeOw@qYEE2%ʫh̪BiI83J kF[UEӛB\B{I?r(\Rfby B_ F"yZ4A7q.>$&pϚ/GA0w>G @#6r!F@J}x[sIXӘ#x. WƷr6Cx Li](e˥pޤnBT_A~cReK~XU(ZݡE81+ov?;DWwXa$zPZqY.aa7ܫ_.Ep`DF*('zH9J}d%U~$,?YaQέv]Zwr0Wb$l7Δ# 2> K[; @ JWԮ8ߖʞIHSa;C8~`j)^f:~Ýj1gAm3C/:}Nϛ!4w ^^ ׮;Cdvh#m6KLcR+(9trg,gхAvJfM2ߌyJCѾ#&Q;&)=x:Ŕ ʱ Hdݞx-CǷ>n*gj@ iFmFʋ%W$Rr4"Ü0aG7>'=XʄIZ@ja.-Q8t}]OQT6/Oh]d Ixv#_E:xbNdd4ɍFY:(11 78I30K Ct%] 46?H7ktlٟIؚ ljsW>\_/xO|Aq&gSu)+ %au|C̙'ga-cέH=>trp+rF_L7Fk<,!lk7(4Er R-oIk,L8{Go[.9@RO(As Եhj9L9ip?AaTtc|{6.M92ATj`$9fҦ0e Y"0ܚpU^Ƌ ǖ9f)NŅ2~yvhnhD/Ux8%;YMuZ^ܕ0kk7^uր'-.yw^*("/`@-/%tqa)Pp-9s*skѴ-#Osgrp՝03{^e@j҈o+PJseq<U:\ٴj5Kq7qpʨ>NYy 2;eN@.IREptf3j8`8X)FWcMX~Y}ԳGq'?#Έ_DҼdg3$AI C1"e$ǁe|:FnҠ39~Mo,IU^n*d4 }MX{8/Qa'n =;P}ShY@2''Lo䊮Ǯ!;b#`w1gHn #W_6X[ R4 s}QNW&T!ݢ8w?I];>P Q-٦G)xDVVYݬ5%ģv_ObPn햗`MTe |>̍PT9#!8]?7"%*6!ZWD8vN:Qf_7JAo؛2m!Uϥ}ax9J@ Zyڽr?y/iH63 k6v'4[ L߭ Ss>}f{NHz.va3U3FgUu>aUZ;`mmxxI>9qi7"2;gTLEi, rrV۝nSв^U71f`}apvo5U֗}a#3]DcOg?mE|B[|!DMt.Q o]8RA*@aov_GZ2%/-zNpX1?7|?_zLHW#cx-rmZz /L:=*vc.y`@p`OSx'&(E|9N.N {Vm5nk5ub(҄]ޡ9+q`%r$$~L h0wTOG4*tے1r)Ӂ(]5Noo ՓjRz'݆{ C {ۂ'ӂCqW|a G& #7lӱ=S( R#qxt+hHyҩb~q-4Gv[&g{2=DR็6Yj aLr'xp@hTJ|(QDX8媮3a\1.5|hN.4 W hu Ei~3eWD0__Cϰ?bSJՉ&{B\*7/)W)$cۤ8OA 6`EyyIon;FF[=Α []ZpEg{61<|YÌP eBBG Y!ZF6Q#dNC<|8`LZ[r4˜=eQc'|2bA]^$5p81KR 4TGDf,~L}e;lYF&M bVmx70bե;qVqf{hXHxބ X[L9+vIs]a=V@}0HLeV"]HbI?{|B8Y4C٦$QҼvZay@l+`Sڔj O3&W,>u@[b꫁gA]E]j96#֍+%T]gkzAiɒ黊g+2b<ATQ2sTlMC52z+_d):/2q]+4t,]+xoq,VL6P_fnH]Ip#q WXCbXA3^Ԩ=3&uI|qGt,IK:NXH/a ARYɟԿ91rѴO^h^~Ez$W槒"7v)֭Z2DMW-[=du8my/hY\k͕l뽌ug`1幋'q9Z8'\obp/(m[k{Mr8kL=Uv؀ͫriF')*Q8=]4p aVpޢbLou6?K7ʀrFJ=?u%+4L/P #JaT@[µI;0]ߋmu҃}13VemϽD}T_;Ӂ17§e SQTI/g2pZ|c6%U5C' 0j_h%5ӳvHXDJeXa:ҏyz"1ĝN*6-5Cd kxQ>jb>Ln,v7"[!Yz_x^T?~DW8\2{?'g$(2?ʴca@(h%[@ j~Rp(#Aᔹm`0@y F:^ZSftWm[V+hH=T:HF 'Yͽ8XN1|wTv_mnP]by!$]< Hy iVPX Ou-톶*p=/n2Jod@TʃTK'uRZ. 岈ky.Zxbw孲Vr|PoT6 IOUNwPVKt1?dN&yo' l`mlQG q`.+bwcu@o;$6{i^õ$lJXi_=7>[ʹ\SE%=72j-z~QS?B)UQj~a{F=6Mw`ӫ'ޑ9ZHfy_1 C$CdZ# So]f2²e.V]pAM1T/. o2!=h(Ctݸ)8''vnuLzbY,ppkrt+nIN6 )[ϙ8<>m>!cOՇ֠}[ycPo3ǙF<uA42zSۅ8[v yC|hE!cBL&xH-eTzfr[/ϳ|́P-Sx"2U+a6aLD3 Yd'"8E ?bH1?vwtb& =yWU"VJY# jWpk$TOW% OK^B̐=Yy'}8l L2)'}x*#H24"Jro"'KYvg97 GR1 ^&zXha/H=uiD_eK 3*D{MPl2%+瓜 ]|ES-QtpaS Q/$0oϴȒ}oXYj%JNVJ<c*&t 4aaBA=J>ITUĀc8_Q⇑N/[YV<;;¾@|sde Zڶ2KRc,/w)U PVQd+r B꿴W4% m$/z j_>^vHri25 ;aOld ;^KuX0Ə=2ytm ,!ʢAH9L\5 AJs̮)ܨsy*VKmV Ӟ 30W)*J\|A='ux1e?S bF>CBR$, ED\A+#m˟2X%@k1Ws*H;UCstZ鋏`pH0FH0H'xZtp޻\vM;_FtDRoƱE/Q(!ky)r Ps[lsbRXZG=G@ WRD@-p`!Wְ[D@&@>¿qfG-I# T"=;&V9%2`~7a|&&92)`);olStItͭ""@:Ev!t~AޏQqIhUA_@ xON!V4'HrsdR{~~𔮍|Ps2w's<)#19g0d|Sݓ,ԁ1[c3m.Fr4txK\+4usMqL g2z.K-"] DvBߍ8Ƞ"oBꈗdžO)m(=|dO"zr$V%~R,^&OsԆ){z3F73j`|Fc_ae|u 0aDf|dXj\jK33"lPݹ=\8fۘGTʗ6N)vG-w'x !$!dm(E fw-AE;r=!xo+$itWW7nU|R0,@\3g0%tD~.H:Jig.mAg8sc*+fY@Q;},+KZB5 b2) P< U&^|H?μێ[|#I4FVdH4 Hz#! l.虊Y_t\V苨e*4yeHE'Dn0|YKXRLμ;9~+gcvԥGrN4;>dtrZ?e|!S quA`V\Y#t8F$z ,}`[/`v5IXbSݵ;Po4 yzyð6#\ 0{UGW!^H.L1?8khޢ)lƹE(U/8V W!wsQ]X3E쥞=ѹj#_ #'lIv%cчlMM r~#X\3 !%*[P2r?w~/_vKSZANOƀPkjZ>ߛr-K]zvkϷ쾸a DH;^Jjp?1E:nI)HA@c}uE#ǔVHv<m$[T>vf*Jh>(U[Nh耥c_r3Aq8.&v4?ibNu V(p(B(!i߮sFR|)_ֿ8cY/#B+S0ĚxN)4Z,,d2D[A\NP!55wG,? 3SFFXNorBp3KǼ1 ]UPnB̻|MKMPhsO-Fi 9~ة.:l͆0;ͭc׺5$<:FpUO0!Ô߫ -f8U?Rb,;qVk0fK=qGAZWM;UM;;kEqMi%W;U~?I{y|C~^7xʚ U^3NQdÝEkuy&2}S1kUfI^8V^X R3-QM{N92 [ũӺ93?_??y?OfTzsIZ'ϸ!`}1xy&/ΕDճҠF8!PMnXaBk.PwԽHeN= mz'wQ~[!yӛ/ǒL3bZؠw@`GuVz9:T8=oHĹbհnzu, z䅟Rm7oDU+;kA%L:Bv iKPt1꒺ CphtKDL6j<[^&RƫN^l6o;(qVmi}nԞool {G, k^f̬7W ,u-ߎni7=hwB a׫aSP|7FiT2q9<s 2_?ZNP3[59gC|Fpn6㴼ړp ͬX]i'Sɀp-ֿƥf"NG~߭[S1q!m TZ8H~s&B_!@64ћȚ'z8C:7 A_"|2H I<Է12αjHyOjgˎ'/%PJo^,յ*q<$[*?J I) J q=UxX#K q%zTBgCǯ6 ū1O9]A%vЧv[anٶ1 ;߈Zjv)EN$C`6ӤWI}|rp$a>Voӷz ͰL:۞z?; ~=L>kz] Pڻo'dz(\ޑWRjM^2@oL};lxrl.i)NW:ôəvO]NjghSɛdH=G ;$+)][TS|婉*,cv4-8y 6y%KB_sWFSH-}:]1D E 9 ?8p[P$ڀT{!u aB"cs1PSs`hNfװ졖cOH}^ r7ͺjRYMsԱ' N۲ʉ M,ȷ/}8C1RřA€8n#ɞ3y[idITr/G\JʺD 5՞tFCxonWeYnfBz#a}l܇= |*e]@G#.?{Dhо#`GdølwK@k?ђM%,l'Zs0ombE2mTA~Seԏac+_pGH#> /DW 1000 /W [ 148 [ 790 ] ] >> endobj 78 0 obj << /Filter /FlateDecode /Length 220 >> stream QQr@*7(\z,72 osIwA1Wj2BIQ,D< _۱dM1ӆU[4Tezr" #`_OnQZro-=LYuO\Fyv=FG(oCjAl)ް@" p4ɰMa4V3191djH+ ,S7>n \^$ endstream endobj 79 0 obj << /Type /Annot /Subtype /Link /Rect [ 170.16 612.80554 306.85999 625.21021 ] /Border [ 0 0 0 ] /H /I /A 80 0 R /StructParent 10 >> endobj 80 0 obj << /S /URI /URI (X#E\rJhASb\r`%*λ>G؎UVXbob!) >> endobj 81 0 obj << /Type /Annot /Subtype /Link /Rect [ 307.49979 625.16516 382.51251 637.56982 ] /Border [ 0 0 0 ] /H /I /A 82 0 R /StructParent 12 >> endobj 82 0 obj << /S /URI /URI (lI,ȝEꏓ>e) >> endobj 83 0 obj << /Type /Annot /Subtype /Link /Rect [ 335.45996 654.28491 474.55292 666.66956 ] /Border [ 0 0 0 ] /H /I /A 84 0 R /StructParent 14 >> endobj 84 0 obj << /S /URI /URI (HHsMXt#j}'Js*iݪJ d.9) >> endobj 85 0 obj << /Count 9 /First 86 0 R /Last 87 0 R >> endobj 86 0 obj << /Title (|<*4) /Dest [ 29 0 R /XYZ 0 686 null ] /Parent 85 0 R /Next 93 0 R >> endobj 87 0 obj << /Title (<;זLOc 1) /Dest [ 51 0 R /XYZ 0 686 null ] /Parent 85 0 R /Prev 88 0 R >> endobj 88 0 obj << /Title (?S) /Dest [ 47 0 R /XYZ 0 686 null ] /Parent 85 0 R /Prev 89 0 R /Next 87 0 R >> endobj 89 0 obj << /Title (;=Sz) /Dest [ 44 0 R /XYZ 0 686 null ] /Parent 85 0 R /Prev 90 0 R /Next 88 0 R >> endobj 90 0 obj << /Title ($/Ui) /Dest [ 41 0 R /XYZ 0 686 null ] /Parent 85 0 R /Prev 91 0 R /Next 89 0 R >> endobj 91 0 obj << /Title (qK3*r) /Dest [ 38 0 R /XYZ 0 686 null ] /Parent 85 0 R /Prev 92 0 R /Next 90 0 R >> endobj 92 0 obj << /Title (\(uvBK) /Dest [ 35 0 R /XYZ 0 686 null ] /Parent 85 0 R /Prev 93 0 R /Next 91 0 R >> endobj 93 0 obj << /Title (Qi\r'JH]) /Dest [ 32 0 R /XYZ 0 686 null ] /Parent 85 0 R /Prev 86 0 R /Next 92 0 R /First 94 0 R /Last 94 0 R /Count 1 >> endobj 94 0 obj << /Title ( oN;P#}Iau{%Dm;7) /Dest [ 32 0 R /XYZ 0 439 null ] /Parent 93 0 R >> endobj 95 0 obj << /TextBox /Div /Frame /Div /Footnote /Note /Endnote /Note /Shape /Figure /InlineShape /Figure /TOA /TOC /TOAI /TOCI /TOF /TOC /TOFI /TOCI /Superscript /Span /Subscript /Span /Strikeout /Span /Underline /Span /DropCap /Figure /Copyright /P /Standard /P /Inhaltsverzeichnis#20#C3#9Cberschrift /P /Verzeichnis#201 /P /Verzeichnis#202 /P /Textk#C3#B6rper /P /#C3#9Cberschrift#201 /P /#C3#9Cberschrift#202 /P /API#20Function /P /API#20Description /P /API#20Attribute /P /Program#20Text /P /HTML#20Vorformatiert /P /License#20Title /P /License#20Subtitle /P /License#20Text /P /License#20Section /P >> endobj 96 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 0 /P 294 0 R >> endobj 97 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 1 /P 294 0 R >> endobj 98 0 obj << /Copyright 99 0 R /Standard 131 0 R /Inhaltsverzeichnis#20#C3#9Cberschrift 138 0 R /Verzeichnis#201 140 0 R /Verzeichnis#202 147 0 R /Textk#C3#B6rper 169 0 R /#C3#9Cberschrift#201 172 0 R /#C3#9Cberschrift#202 183 0 R /API#20Function 187 0 R /API#20Description 189 0 R /API#20Attribute 207 0 R /Program#20Text 212 0 R /HTML#20Vorformatiert 225 0 R /License#20Title 246 0 R /License#20Subtitle 248 0 R /License#20Text 249 0 R /License#20Section 254 0 R >> endobj 99 0 obj << /O /Layout /WritingMode /LrTb /StartIndent 0 /EndIndent 0 /TextAlign /Start /SpaceBefore 0 /SpaceAfter 0 /TextIndent 0 >> endobj 100 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 2 /P 294 0 R >> endobj 101 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 3 /P 294 0 R >> endobj 102 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 4 /P 294 0 R >> endobj 103 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 5 /P 294 0 R >> endobj 104 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 6 /P 294 0 R >> endobj 105 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 7 /P 294 0 R >> endobj 106 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 8 /P 294 0 R >> endobj 107 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 9 /P 294 0 R >> endobj 108 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 10 /P 294 0 R >> endobj 109 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 11 /P 294 0 R >> endobj 110 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 12 /P 294 0 R >> endobj 111 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 13 /P 294 0 R >> endobj 112 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 14 /P 294 0 R >> endobj 113 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 15 /P 294 0 R >> endobj 114 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 16 /P 294 0 R >> endobj 115 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 17 /P 294 0 R >> endobj 116 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 18 /P 294 0 R >> endobj 117 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 19 /P 294 0 R >> endobj 118 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 20 /P 294 0 R >> endobj 119 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 21 /P 294 0 R >> endobj 120 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 22 /P 294 0 R >> endobj 121 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 23 /P 294 0 R >> endobj 122 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 24 /P 294 0 R >> endobj 123 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 25 /P 294 0 R >> endobj 124 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 26 /P 294 0 R >> endobj 125 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 27 /P 294 0 R >> endobj 126 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 28 /P 294 0 R >> endobj 127 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 29 /P 294 0 R >> endobj 128 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 30 /P 294 0 R >> endobj 129 0 obj << /S /Standard /C /Standard /Pg 1 0 R /K 31 /P 294 0 R >> endobj 130 0 obj << /S /Standard /C /Standard /Pg 1 0 R /K 32 /P 294 0 R >> endobj 131 0 obj << /O /Layout /WritingMode /LrTb /StartIndent 0 /EndIndent 0 /TextAlign /Start /SpaceBefore 0 /SpaceAfter 0 /TextIndent 0 >> endobj 132 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 33 /P 294 0 R >> endobj 133 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 34 /P 294 0 R >> endobj 134 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 35 /P 294 0 R >> endobj 135 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 36 /P 294 0 R >> endobj 136 0 obj << /S /Inhaltsverzeichnis#20#C3#9Cberschrift /C /Inhaltsverzeichnis#20#C3#9Cberschrift /Pg 4 0 R /K 0 /P 295 0 R >> endobj 137 0 obj << /S /TOCI /C /Verzeichnis#201 /Pg 4 0 R /K [ 139 0 R 2 141 0 R 4 ] /P 297 0 R >> endobj 138 0 obj << /O /Layout /WritingMode /LrTb /StartIndent 0 /EndIndent 0 /TextAlign /Start /SpaceBefore 11.89999 /SpaceAfter 70.85001 /TextIndent 0 >> endobj 139 0 obj << /S /Underline /P 137 0 R /A 341 0 R /Pg 4 0 R /K 1 >> endobj 140 0 obj << /O /Layout /WritingMode /LrTb /StartIndent 0 /EndIndent 0 /TextAlign /Start /SpaceBefore 14.2 /SpaceAfter 0 /TextIndent 0 >> endobj 141 0 obj << /S /Underline /P 137 0 R /A 342 0 R /Pg 4 0 R /K 3 >> endobj 142 0 obj << /S /TOCI /C /Verzeichnis#201 /Pg 4 0 R /K [ 143 0 R 6 144 0 R 8 ] /P 297 0 R >> endobj 143 0 obj << /S /Underline /P 142 0 R /A 343 0 R /Pg 4 0 R /K 5 >> endobj 144 0 obj << /S /Underline /P 142 0 R /A 344 0 R /Pg 4 0 R /K 7 >> endobj 145 0 obj << /S /TOCI /C /Verzeichnis#202 /Pg 4 0 R /K [ 146 0 R 10 148 0 R 12 ] /P 297 0 R >> endobj 146 0 obj << /S /Underline /P 145 0 R /A 345 0 R /Pg 4 0 R /K 9 >> endobj 147 0 obj << /O /Layout /WritingMode /LrTb /StartIndent 28.35001 /EndIndent 0 /TextAlign /Start /SpaceBefore 6 /SpaceAfter 0 /TextIndent 0 >> endobj 148 0 obj << /S /Underline /P 145 0 R /A 346 0 R /Pg 4 0 R /K 11 >> endobj 149 0 obj << /S /TOCI /C /Verzeichnis#201 /Pg 4 0 R /K [ 150 0 R 14 151 0 R 16 ] /P 297 0 R >> endobj 150 0 obj << /S /Underline /P 149 0 R /A 347 0 R /Pg 4 0 R /K 13 >> endobj 151 0 obj << /S /Underline /P 149 0 R /A 348 0 R /Pg 4 0 R /K 15 >> endobj 152 0 obj << /S /TOCI /C /Verzeichnis#201 /Pg 4 0 R /K [ 153 0 R 18 154 0 R 20 ] /P 297 0 R >> endobj 153 0 obj << /S /Underline /P 152 0 R /A 349 0 R /Pg 4 0 R /K 17 >> endobj 154 0 obj << /S /Underline /P 152 0 R /A 350 0 R /Pg 4 0 R /K 19 >> endobj 155 0 obj << /S /TOCI /C /Verzeichnis#201 /Pg 4 0 R /K [ 156 0 R 22 157 0 R 24 ] /P 297 0 R >> endobj 156 0 obj << /S /Underline /P 155 0 R /A 351 0 R /Pg 4 0 R /K 21 >> endobj 157 0 obj << /S /Underline /P 155 0 R /A 352 0 R /Pg 4 0 R /K 23 >> endobj 158 0 obj << /S /TOCI /C /Verzeichnis#201 /Pg 4 0 R /K [ 159 0 R 26 160 0 R 28 ] /P 297 0 R >> endobj 159 0 obj << /S /Underline /P 158 0 R /A 353 0 R /Pg 4 0 R /K 25 >> endobj 160 0 obj << /S /Underline /P 158 0 R /A 354 0 R /Pg 4 0 R /K 27 >> endobj 161 0 obj << /S /TOCI /C /Verzeichnis#201 /Pg 4 0 R /K [ 162 0 R 30 163 0 R 32 ] /P 297 0 R >> endobj 162 0 obj << /S /Underline /P 161 0 R /A 355 0 R /Pg 4 0 R /K 29 >> endobj 163 0 obj << /S /Underline /P 161 0 R /A 356 0 R /Pg 4 0 R /K 31 >> endobj 164 0 obj << /S /TOCI /C /Verzeichnis#201 /Pg 4 0 R /K [ 165 0 R 34 166 0 R 36 ] /P 297 0 R >> endobj 165 0 obj << /S /Underline /P 164 0 R /A 357 0 R /Pg 4 0 R /K 33 >> endobj 166 0 obj << /S /Underline /P 164 0 R /A 358 0 R /Pg 4 0 R /K 35 >> endobj 167 0 obj << /S /TOCI /C /Textk#C3#B6rper /Pg 4 0 R /K 37 /P 297 0 R >> endobj 168 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 4 0 R /K 38 /P 295 0 R >> endobj 169 0 obj << /O /Layout /WritingMode /LrTb /StartIndent 42.55 /EndIndent 0 /TextAlign /Justify /SpaceBefore 5.64999 /SpaceAfter 5.95 /TextIndent 0 >> endobj 170 0 obj << /S /LBody /C /#C3#9Cberschrift#201 /Pg 29 0 R /K 0 /P 299 0 R >> endobj 171 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 29 0 R /K 1 /P 296 0 R >> endobj 172 0 obj << /O /Layout /WritingMode /LrTb /StartIndent 42.55 /EndIndent 0 /TextAlign /Start /SpaceBefore 28.35001 /SpaceAfter 8.5 /TextIndent -42.54999 >> endobj 173 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 29 0 R /K 2 /P 296 0 R >> endobj 174 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 29 0 R /K 3 /P 296 0 R >> endobj 175 0 obj << /S /LBody /A [ 176 0 R ] /C /#C3#9Cberschrift#201 /Pg 32 0 R /K 0 /P 301 0 R >> endobj 176 0 obj << /O /Layout /StartIndent 36 >> endobj 177 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 32 0 R /K 1 /P 296 0 R >> endobj 178 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 32 0 R /K 2 /P 296 0 R >> endobj 179 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 32 0 R /K 3 /P 296 0 R >> endobj 180 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 32 0 R /K 4 /P 296 0 R >> endobj 181 0 obj << /S /LBody /A [ 182 0 R ] /C /#C3#9Cberschrift#202 /Pg 32 0 R /K 5 /P 303 0 R >> endobj 182 0 obj << /O /Layout /StartIndent 36 >> endobj 183 0 obj << /O /Layout /WritingMode /LrTb /StartIndent 42.55 /EndIndent 0 /TextAlign /Start /SpaceBefore 34 /SpaceAfter 14.14999 /TextIndent -42.54999 >> endobj 184 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 32 0 R /K 6 /P 296 0 R >> endobj 185 0 obj << /S /API#20Function /C /API#20Function /Pg 32 0 R /K 7 /P 296 0 R >> endobj 186 0 obj << /S /API#20Description /C /API#20Description /Pg 32 0 R /K 8 /P 296 0 R >> endobj 187 0 obj << /O /Layout /WritingMode /LrTb /StartIndent 56.75 /EndIndent 0 /TextAlign /Start /SpaceBefore 5.64999 /SpaceAfter 5.95 /TextIndent -14.19998 >> endobj 188 0 obj << /S /API#20Description /C /API#20Description /Pg 32 0 R /K 9 /P 296 0 R >> endobj 189 0 obj << /O /Layout /WritingMode /LrTb /StartIndent 56.7 /EndIndent 0 /TextAlign /Start /SpaceBefore 0 /SpaceAfter 5.95 /TextIndent 0 >> endobj 190 0 obj << /S /API#20Description /C /API#20Description /Pg 32 0 R /K 10 /P 296 0 R >> endobj 191 0 obj << /S /LBody /C /#C3#9Cberschrift#201 /Pg 35 0 R /K 0 /P 305 0 R >> endobj 192 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 35 0 R /K 1 /P 296 0 R >> endobj 193 0 obj << /S /API#20Function /C /API#20Function /Pg 35 0 R /K 2 /P 296 0 R >> endobj 194 0 obj << /S /API#20Description /C /API#20Description /Pg 35 0 R /K 3 /P 296 0 R >> endobj 195 0 obj << /S /API#20Description /C /API#20Description /Pg 35 0 R /K 4 /P 296 0 R >> endobj 196 0 obj << /S /API#20Function /C /API#20Function /Pg 35 0 R /K 5 /P 296 0 R >> endobj 197 0 obj << /S /API#20Description /C /API#20Description /Pg 35 0 R /K 6 /P 296 0 R >> endobj 198 0 obj << /S /API#20Function /C /API#20Function /Pg 35 0 R /K 7 /P 296 0 R >> endobj 199 0 obj << /S /API#20Description /C /API#20Description /Pg 35 0 R /K 8 /P 296 0 R >> endobj 200 0 obj << /S /API#20Description /C /API#20Description /Pg 35 0 R /K 9 /P 296 0 R >> endobj 201 0 obj << /S /API#20Description /C /API#20Description /Pg 35 0 R /K 10 /P 296 0 R >> endobj 202 0 obj << /S /API#20Function /C /API#20Function /Pg 35 0 R /K 11 /P 296 0 R >> endobj 203 0 obj << /S /API#20Description /C /API#20Description /Pg 35 0 R /K 12 /P 296 0 R >> endobj 204 0 obj << /S /LBody /C /#C3#9Cberschrift#201 /Pg 38 0 R /K 0 /P 307 0 R >> endobj 205 0 obj << /S /API#20Attribute /C /API#20Attribute /Pg 38 0 R /K 1 /P 296 0 R >> endobj 206 0 obj << /S /API#20Description /C /API#20Description /Pg 38 0 R /K 2 /P 296 0 R >> endobj 207 0 obj << /O /Layout /WritingMode /LrTb /StartIndent 56.75 /EndIndent 0 /TextAlign /Start /SpaceBefore 5.64999 /SpaceAfter 5.95 /TextIndent -14.19998 >> endobj 208 0 obj << /S /LBody /C /#C3#9Cberschrift#201 /Pg 41 0 R /K 0 /P 309 0 R >> endobj 209 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 41 0 R /K 1 /P 296 0 R >> endobj 210 0 obj << /S /Program#20Text /C /Program#20Text /Pg 41 0 R /K 2 /P 296 0 R >> endobj 211 0 obj << /S /Program#20Text /C /Program#20Text /Pg 41 0 R /K 3 /P 296 0 R >> endobj 212 0 obj << /O /Layout /WritingMode /LrTb /StartIndent 42.55 /EndIndent 0 /TextAlign /Start /SpaceBefore 0 /SpaceAfter 0 /TextIndent 0 >> endobj 213 0 obj << /S /Program#20Text /C /Program#20Text /Pg 41 0 R /K 4 /P 296 0 R >> endobj 214 0 obj << /S /Program#20Text /C /Program#20Text /Pg 41 0 R /K 5 /P 296 0 R >> endobj 215 0 obj << /S /Program#20Text /C /Program#20Text /Pg 41 0 R /K 6 /P 296 0 R >> endobj 216 0 obj << /S /Program#20Text /C /Program#20Text /Pg 41 0 R /K 7 /P 296 0 R >> endobj 217 0 obj << /S /Program#20Text /C /Program#20Text /Pg 41 0 R /K 8 /P 296 0 R >> endobj 218 0 obj << /S /Program#20Text /C /Program#20Text /Pg 41 0 R /K 9 /P 296 0 R >> endobj 219 0 obj << /S /Program#20Text /C /Program#20Text /Pg 41 0 R /K 10 /P 296 0 R >> endobj 220 0 obj << /S /Program#20Text /C /Program#20Text /Pg 41 0 R /K 11 /P 296 0 R >> endobj 221 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 41 0 R /K 12 /P 296 0 R >> endobj 222 0 obj << /S /LBody /C /#C3#9Cberschrift#201 /Pg 44 0 R /K 0 /P 311 0 R >> endobj 223 0 obj << /S /HTML#20Vorformatiert /A [ 224 0 R ] /C /HTML#20Vorformatiert /Pg 44 0 R /K 1 /P 296 0 R >> endobj 224 0 obj << /O /Layout /StartIndent 36 >> endobj 225 0 obj << /O /Layout /WritingMode /LrTb /StartIndent 0 /EndIndent 0 /TextAlign /Start /SpaceBefore 0 /SpaceAfter 0 /TextIndent 0 >> endobj 226 0 obj << /S /Program#20Text /C /Program#20Text /Pg 44 0 R /K 2 /P 296 0 R >> endobj 227 0 obj << /S /Program#20Text /C /Program#20Text /Pg 44 0 R /K 3 /P 296 0 R >> endobj 228 0 obj << /S /Program#20Text /C /Program#20Text /Pg 44 0 R /K 4 /P 296 0 R >> endobj 229 0 obj << /S /Program#20Text /C /Program#20Text /Pg 44 0 R /K 5 /P 296 0 R >> endobj 230 0 obj << /S /HTML#20Vorformatiert /A [ 231 0 R ] /C /HTML#20Vorformatiert /Pg 44 0 R /K 6 /P 296 0 R >> endobj 231 0 obj << /O /Layout /StartIndent 36 >> endobj 232 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 44 0 R /K 7 /P 296 0 R >> endobj 233 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 44 0 R /K 8 /P 296 0 R >> endobj 234 0 obj << /S /LBody /C /#C3#9Cberschrift#201 /Pg 47 0 R /K 0 /P 313 0 R >> endobj 235 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 47 0 R /K [ 1 236 0 R 3 ] /P 296 0 R >> endobj 236 0 obj << /S /Link /P 235 0 R /K [ 237 0 R << /Type /OBJR /Pg 47 0 R /Obj 79 0 R >> ] >> endobj 237 0 obj << /S /Underline /P 236 0 R /A 366 0 R /Pg 47 0 R /K 2 >> endobj 238 0 obj << /S /LBody /C /#C3#9Cberschrift#201 /Pg 51 0 R /K 0 /P 315 0 R >> endobj 239 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 51 0 R /K [ 1 240 0 R 3 ] /P 296 0 R >> endobj 240 0 obj << /S /Link /P 239 0 R /K [ 241 0 R << /Type /OBJR /Pg 51 0 R /Obj 81 0 R >> ] >> endobj 241 0 obj << /S /Underline /P 240 0 R /A 368 0 R /Pg 51 0 R /K 2 >> endobj 242 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 51 0 R /K 4 /P 296 0 R >> endobj 243 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 51 0 R /K 5 /P 296 0 R >> endobj 244 0 obj << /S /License#20Title /C /License#20Title /Pg 55 0 R /K 0 /P 296 0 R >> endobj 245 0 obj << /S /License#20Subtitle /C /License#20Subtitle /Pg 55 0 R /K 1 /P 296 0 R >> endobj 246 0 obj << /O /Layout /WritingMode /LrTb /StartIndent 0 /EndIndent 0 /TextAlign /Center /SpaceBefore 0 /SpaceAfter 6 /TextIndent 0 >> endobj 247 0 obj << /S /License#20Text /C /License#20Text /Pg 55 0 R /K [ 2 250 0 R 4 ] /P 296 0 R >> endobj 248 0 obj << /O /Layout /WritingMode /LrTb /StartIndent 0 /EndIndent 0 /TextAlign /Center /SpaceBefore 0 /SpaceAfter 6 /TextIndent 0 >> endobj 249 0 obj << /O /Layout /WritingMode /LrTb /StartIndent 42.55 /EndIndent 0 /TextAlign /Start /SpaceBefore 6 /SpaceAfter 6 /TextIndent 0 >> endobj 250 0 obj << /S /Link /P 247 0 R /K [ 251 0 R << /Type /OBJR /Pg 55 0 R /Obj 83 0 R >> ] >> endobj 251 0 obj << /S /Underline /P 250 0 R /A 370 0 R /Pg 55 0 R /K 3 >> endobj 252 0 obj << /S /LBody /C /License#20Section /Pg 55 0 R /K 5 /P 317 0 R >> endobj 253 0 obj << /S /License#20Text /C /License#20Text /Pg 55 0 R /K 6 /P 296 0 R >> endobj 254 0 obj << /O /Layout /WritingMode /LrTb /StartIndent 85.10001 /EndIndent 0 /TextAlign /Start /SpaceBefore 12 /SpaceAfter 6 /TextIndent -85.09999 >> endobj 255 0 obj << /S /LBody /C /License#20Section /Pg 55 0 R /K 7 /P 319 0 R >> endobj 256 0 obj << /S /License#20Text /C /License#20Text /Pg 55 0 R /K 8 /P 296 0 R >> endobj 257 0 obj << /S /LBody /C /License#20Section /Pg 55 0 R /K 9 /P 321 0 R >> endobj 258 0 obj << /S /License#20Text /C /License#20Text /Pg 55 0 R /K 10 /P 296 0 R >> endobj 259 0 obj << /S /LBody /C /License#20Section /Pg 55 0 R /K 11 /P 323 0 R >> endobj 260 0 obj << /S /License#20Text /C /License#20Text /Pg 55 0 R /P 296 0 R /K [ 12 << /Type /MCR /Pg 59 0 R /MCID 0 >> ] >> endobj 261 0 obj << /S /License#20Text /C /License#20Text /Pg 59 0 R /K 1 /P 296 0 R >> endobj 262 0 obj << /S /LBody /C /License#20Section /Pg 59 0 R /K 2 /P 325 0 R >> endobj 263 0 obj << /S /License#20Text /C /License#20Text /Pg 59 0 R /K 3 /P 296 0 R >> endobj 264 0 obj << /S /LBody /C /License#20Section /Pg 59 0 R /K 4 /P 327 0 R >> endobj 265 0 obj << /S /License#20Text /C /License#20Text /Pg 59 0 R /K 5 /P 296 0 R >> endobj 266 0 obj << /S /LBody /C /License#20Section /Pg 59 0 R /K 6 /P 329 0 R >> endobj 267 0 obj << /S /License#20Text /C /License#20Text /Pg 59 0 R /K 7 /P 296 0 R >> endobj 268 0 obj << /S /License#20Text /C /License#20Text /Pg 59 0 R /K 8 /P 296 0 R >> endobj 269 0 obj << /S /License#20Text /C /License#20Text /Pg 59 0 R /K 9 /P 296 0 R >> endobj 270 0 obj << /S /License#20Text /C /License#20Text /Pg 59 0 R /K 10 /P 296 0 R >> endobj 271 0 obj << /S /License#20Text /C /License#20Text /Pg 59 0 R /K 11 /P 296 0 R >> endobj 272 0 obj << /S /License#20Text /C /License#20Text /Pg 62 0 R /K 0 /P 296 0 R >> endobj 273 0 obj << /S /LBody /C /License#20Section /Pg 62 0 R /K 1 /P 331 0 R >> endobj 274 0 obj << /S /License#20Text /C /License#20Text /Pg 62 0 R /K 2 /P 296 0 R >> endobj 275 0 obj << /S /License#20Text /C /License#20Text /Pg 62 0 R /K 3 /P 296 0 R >> endobj 276 0 obj << /S /License#20Text /A [ 277 0 R ] /C /License#20Text /Pg 62 0 R /K 4 /P 296 0 R >> endobj 277 0 obj << /O /Layout /StartIndent 81 >> endobj 278 0 obj << /S /License#20Text /A [ 279 0 R ] /C /License#20Text /Pg 62 0 R /K 5 /P 296 0 R >> endobj 279 0 obj << /O /Layout /StartIndent 81 >> endobj 280 0 obj << /S /License#20Text /A [ 281 0 R ] /C /License#20Text /Pg 62 0 R /K 6 /P 296 0 R >> endobj 281 0 obj << /O /Layout /StartIndent 81 >> endobj 282 0 obj << /S /License#20Text /A [ 283 0 R ] /C /License#20Text /Pg 62 0 R /K 7 /P 296 0 R >> endobj 283 0 obj << /O /Layout /StartIndent 81 >> endobj 284 0 obj << /S /License#20Text /C /License#20Text /Pg 62 0 R /K 8 /P 296 0 R >> endobj 285 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 62 0 R /K 9 /P 296 0 R >> endobj 286 0 obj << /S /Standard /A [ 287 0 R ] /C /Standard /Pg 417 0 R /K [ 22 23 24 ] /P 335 0 R >> endobj 287 0 obj << /O /Layout /TextAlign /End /StartIndent -33.55 /EndIndent -24.2 >> endobj 288 0 obj << /S /Standard /A [ 289 0 R ] /C /Standard /Pg 417 0 R /K [ 25 26 27 ] /P 335 0 R >> endobj 289 0 obj << /O /Layout /TextAlign /End /StartIndent -33.55 /EndIndent -24.2 >> endobj 290 0 obj << /S /Standard /A [ 291 0 R ] /C /Standard /Pg 417 0 R /K [ 8 9 10 11 12 13 14 15 16 17 18 19 20 ] /P 334 0 R >> endobj 291 0 obj << /O /Layout /TextAlign /Center /StartIndent 54.45 /EndIndent 62.8 >> endobj 292 0 obj << /S /Standard /A [ 293 0 R ] /C /Standard /Pg 417 0 R /K [ 1 2 3 4 5 6 7 ] /P 333 0 R >> endobj 293 0 obj << /O /Layout /StartIndent 74.45 /TextAlign /End /EndIndent -47.2 >> endobj 294 0 obj << /S /Sect /P 416 0 R /K [ 335 0 R 334 0 R 333 0 R 332 0 R 96 0 R 97 0 R 100 0 R 101 0 R 102 0 R 103 0 R 104 0 R 105 0 R 106 0 R 107 0 R 108 0 R 109 0 R 110 0 R 111 0 R 112 0 R 113 0 R 114 0 R 115 0 R 116 0 R 117 0 R 118 0 R 119 0 R 120 0 R 121 0 R 122 0 R 123 0 R 124 0 R 125 0 R 126 0 R 127 0 R 128 0 R 129 0 R 130 0 R 132 0 R 133 0 R 134 0 R 135 0 R ] >> endobj 295 0 obj << /S /Sect /P 416 0 R /K [ 136 0 R 297 0 R 168 0 R ] >> endobj 296 0 obj << /S /Sect /P 416 0 R /K [ 298 0 R 171 0 R 173 0 R 174 0 R 300 0 R 177 0 R 178 0 R 179 0 R 180 0 R 302 0 R 184 0 R 185 0 R 186 0 R 188 0 R 190 0 R 304 0 R 192 0 R 193 0 R 194 0 R 195 0 R 196 0 R 197 0 R 198 0 R 199 0 R 200 0 R 201 0 R 202 0 R 203 0 R 306 0 R 205 0 R 206 0 R 308 0 R 209 0 R 210 0 R 211 0 R 213 0 R 214 0 R 215 0 R 216 0 R 217 0 R 218 0 R 219 0 R 220 0 R 221 0 R 310 0 R 223 0 R 226 0 R 227 0 R 228 0 R 229 0 R 230 0 R 232 0 R 233 0 R 312 0 R 235 0 R 314 0 R 239 0 R 242 0 R 243 0 R 244 0 R 245 0 R 247 0 R 316 0 R 253 0 R 318 0 R 256 0 R 320 0 R 258 0 R 322 0 R 260 0 R 261 0 R 324 0 R 263 0 R 326 0 R 265 0 R 328 0 R 267 0 R 268 0 R 269 0 R 270 0 R 271 0 R 272 0 R 330 0 R 274 0 R 275 0 R 276 0 R 278 0 R 280 0 R 282 0 R 284 0 R 285 0 R ] >> endobj 297 0 obj << /S /TOC /P 295 0 R /K [ 137 0 R 142 0 R 145 0 R 149 0 R 152 0 R 155 0 R 158 0 R 161 0 R 164 0 R 167 0 R ] >> endobj 298 0 obj << /S /L /K 299 0 R /P 296 0 R >> endobj 299 0 obj << /S /LI /P 298 0 R /K 170 0 R >> endobj 300 0 obj << /S /L /K 301 0 R /P 296 0 R >> endobj 301 0 obj << /S /LI /P 300 0 R /K 175 0 R >> endobj 302 0 obj << /S /L /K 303 0 R /P 296 0 R >> endobj 303 0 obj << /S /LI /P 302 0 R /K 181 0 R >> endobj 304 0 obj << /S /L /K 305 0 R /P 296 0 R >> endobj 305 0 obj << /S /LI /P 304 0 R /K 191 0 R >> endobj 306 0 obj << /S /L /K 307 0 R /P 296 0 R >> endobj 307 0 obj << /S /LI /P 306 0 R /K 204 0 R >> endobj 308 0 obj << /S /L /K 309 0 R /P 296 0 R >> endobj 309 0 obj << /S /LI /P 308 0 R /K 208 0 R >> endobj 310 0 obj << /S /L /K 311 0 R /P 296 0 R >> endobj 311 0 obj << /S /LI /P 310 0 R /K 222 0 R >> endobj 312 0 obj << /S /L /K 313 0 R /P 296 0 R >> endobj 313 0 obj << /S /LI /P 312 0 R /K 234 0 R >> endobj 314 0 obj << /S /L /K 315 0 R /P 296 0 R >> endobj 315 0 obj << /S /LI /P 314 0 R /K 238 0 R >> endobj 316 0 obj << /S /L /K 317 0 R /P 296 0 R >> endobj 317 0 obj << /S /LI /P 316 0 R /K 252 0 R >> endobj 318 0 obj << /S /L /K 319 0 R /P 296 0 R >> endobj 319 0 obj << /S /LI /P 318 0 R /K 255 0 R >> endobj 320 0 obj << /S /L /K 321 0 R /P 296 0 R >> endobj 321 0 obj << /S /LI /P 320 0 R /K 257 0 R >> endobj 322 0 obj << /S /L /K 323 0 R /P 296 0 R >> endobj 323 0 obj << /S /LI /P 322 0 R /K 259 0 R >> endobj 324 0 obj << /S /L /K 325 0 R /P 296 0 R >> endobj 325 0 obj << /S /LI /P 324 0 R /K 262 0 R >> endobj 326 0 obj << /S /L /K 327 0 R /P 296 0 R >> endobj 327 0 obj << /S /LI /P 326 0 R /K 264 0 R >> endobj 328 0 obj << /S /L /K 329 0 R /P 296 0 R >> endobj 329 0 obj << /S /LI /P 328 0 R /K 266 0 R >> endobj 330 0 obj << /S /L /K 331 0 R /P 296 0 R >> endobj 331 0 obj << /S /LI /P 330 0 R /K 273 0 R >> endobj 332 0 obj << /S /Shape /Alt () /Pg 417 0 R /K [ 0 21 ] /P 294 0 R /A 338 0 R >> endobj 333 0 obj << /S /TextBox /Alt (YOB\)3[x) /P 294 0 R /K 292 0 R >> endobj 334 0 obj << /S /TextBox /Alt (\\R\( hHm.EM6d) /P 294 0 R /K 290 0 R >> endobj 335 0 obj << /S /TextBox /Alt (3ɨ~4LgEP7-d4y=Fkh}t.! n) /P 294 0 R /K [ 286 0 R 288 0 R ] >> endobj 336 0 obj << /Nums [ 0 337 0 R 1 339 0 R 2 340 0 R 3 359 0 R 4 360 0 R 5 361 0 R 6 362 0 R 7 363 0 R 8 364 0 R 9 365 0 R 10 236 0 R 11 367 0 R 12 240 0 R 13 369 0 R 14 250 0 R 15 371 0 R 16 372 0 R ] >> endobj 337 0 obj [ 332 0 R 292 0 R 292 0 R 292 0 R 292 0 R 292 0 R 292 0 R 292 0 R 290 0 R 290 0 R 290 0 R 290 0 R 290 0 R 290 0 R 290 0 R 290 0 R 290 0 R 290 0 R 290 0 R 290 0 R 290 0 R 332 0 R 286 0 R 286 0 R 286 0 R 288 0 R 288 0 R 288 0 R ] endobj 338 0 obj << /O /Layout /BBox [ 34 34 566 809 ] /Placement /Block /StartIndent -93.55 /EndIndent -70.2 >> endobj 339 0 obj [ 96 0 R 97 0 R 100 0 R 101 0 R 102 0 R 103 0 R 104 0 R 105 0 R 106 0 R 107 0 R 108 0 R 109 0 R 110 0 R 111 0 R 112 0 R 113 0 R 114 0 R 115 0 R 116 0 R 117 0 R 118 0 R 119 0 R 120 0 R 121 0 R 122 0 R 123 0 R 124 0 R 125 0 R 126 0 R 127 0 R 128 0 R 129 0 R 130 0 R 132 0 R 133 0 R 134 0 R 135 0 R ] endobj 340 0 obj [ 136 0 R 139 0 R 137 0 R 141 0 R 137 0 R 143 0 R 142 0 R 144 0 R 142 0 R 146 0 R 145 0 R 148 0 R 145 0 R 150 0 R 149 0 R 151 0 R 149 0 R 153 0 R 152 0 R 154 0 R 152 0 R 156 0 R 155 0 R 157 0 R 155 0 R 159 0 R 158 0 R 160 0 R 158 0 R 162 0 R 161 0 R 163 0 R 161 0 R 165 0 R 164 0 R 166 0 R 164 0 R 167 0 R 168 0 R ] endobj 341 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 342 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 343 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 344 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 345 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 346 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 347 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 348 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 349 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 350 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 351 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 352 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 353 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 354 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 355 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 356 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 357 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 358 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 359 0 obj [ 170 0 R 171 0 R 173 0 R 174 0 R ] endobj 360 0 obj [ 175 0 R 177 0 R 178 0 R 179 0 R 180 0 R 181 0 R 184 0 R 185 0 R 186 0 R 188 0 R 190 0 R ] endobj 361 0 obj [ 191 0 R 192 0 R 193 0 R 194 0 R 195 0 R 196 0 R 197 0 R 198 0 R 199 0 R 200 0 R 201 0 R 202 0 R 203 0 R ] endobj 362 0 obj [ 204 0 R 205 0 R 206 0 R ] endobj 363 0 obj [ 208 0 R 209 0 R 210 0 R 211 0 R 213 0 R 214 0 R 215 0 R 216 0 R 217 0 R 218 0 R 219 0 R 220 0 R 221 0 R ] endobj 364 0 obj [ 222 0 R 223 0 R 226 0 R 227 0 R 228 0 R 229 0 R 230 0 R 232 0 R 233 0 R ] endobj 365 0 obj [ 234 0 R 235 0 R 237 0 R 235 0 R ] endobj 366 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 367 0 obj [ 238 0 R 239 0 R 241 0 R 239 0 R 242 0 R 243 0 R ] endobj 368 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 369 0 obj [ 244 0 R 245 0 R 247 0 R 251 0 R 247 0 R 252 0 R 253 0 R 255 0 R 256 0 R 257 0 R 258 0 R 259 0 R 260 0 R ] endobj 370 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 371 0 obj [ 260 0 R 261 0 R 262 0 R 263 0 R 264 0 R 265 0 R 266 0 R 267 0 R 268 0 R 269 0 R 270 0 R 271 0 R ] endobj 372 0 obj [ 272 0 R 273 0 R 274 0 R 275 0 R 276 0 R 278 0 R 280 0 R 282 0 R 284 0 R 285 0 R ] endobj 373 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 74 /Height 105 /ColorSpace 405 0 R /BitsPerComponent 8 /Length 374 0 R >> stream 4vdAe) eU04D=+w}Xr{pȆ7Eֱ[ M!kch^a$LtY64Th8ffvr8GQƣJ[aa)J(N!hg ~Y>|o{NmzrQڗ%|,9:$ x^װ)yzLYj2JF 0l|nގ/8u@Iݜ4To?Xs¯gڢ(JN>'Jj'"S)e1x HG6gH$iHy @?TCH#۹C.n(̙vg~D 1$C#t˲4zaO4e/q02OH&JUƪn><&E*Evځ^$SjB@qc1#`y^b2͠W endstream endobj 374 0 obj 478 endobj 375 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 74 /Height 105 /ColorSpace 405 0 R /BitsPerComponent 8 /Length 376 0 R >> stream И oS-yW 8s8;/{dlȒ^fL4nځ_6Ld$%DoB$D:+<O̒;%˻?L/.Zy#g @Zu)f~b!Ta'xv){*5_MAl27C ($w|9 z^B/E;vTg0x endstream endobj 376 0 obj 215 endobj 377 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 74 /Height 105 /ColorSpace 405 0 R /BitsPerComponent 8 /Length 378 0 R >> stream "i+ejFIfK䫒l*YHd. +O ೼jlv'hĈvN)g<4"T'/1D𛴷/zLDۙb B8;&{wͱ`jןV{RBCr Wo^(;' endstream endobj 378 0 obj 160 endobj 379 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 74 /Height 105 /ColorSpace 405 0 R /BitsPerComponent 8 /Length 380 0 R >> stream ~Og1 ˺-w :b"6x3鎚S;7> stream ǚtڠc>AӲ59ζ|*Vrʼn$$msl8K> g:2ָ$P:(S\Dž}q0N^ ;6YufwW",5Fo"NSNKq⪀ڔ{ѥ)1H=~?G<[ endstream endobj 382 0 obj 188 endobj 383 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 74 /Height 105 /ColorSpace 405 0 R /BitsPerComponent 8 /Length 384 0 R >> stream b#lJ#Ƒ=ShyY%I〾 Ovt~ON"Äs\5hԣe D,DC`ƜL7#I5=չC/ Yd̓ hDj_b7P$nr\ߒ6jU9ɫ!2:u 8р/Q͕M&6 &{(#+Ov8ξzrL'Xf yָrʖ4~}[V0b<iwVbTK-`0+BSS (,5Pzq(8 uA endstream endobj 384 0 obj 329 endobj 385 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 74 /Height 105 /ColorSpace 405 0 R /BitsPerComponent 8 /Length 386 0 R >> stream U|' Jn㉜l_5 fkxYhIPtɳ6X}"{䳈*b$`G8yyb~C J#LJZrvRkyf]R JmEwuXf(Y+[]VeZGCm]V޼cE>cKy5޽ xL[>(m(epdZs endstream endobj 386 0 obj 232 endobj 387 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 74 /Height 105 /ColorSpace 405 0 R /BitsPerComponent 8 /Length 388 0 R >> stream ^45y+s9U\Y>#-)X9_;smWѴ.,w^ao\,G{sb ,&~q@X̬D WeþFFW endstream endobj 388 0 obj 123 endobj 389 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 74 /Height 105 /ColorSpace 405 0 R /BitsPerComponent 8 /Length 390 0 R >> stream Y Eǚ~ ^ W{?|+"`bkX9bPJ3'{_ƴaku !dh<IJ34ph)eu 7s;d| ď|Hj8 endstream endobj 390 0 obj 134 endobj 391 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 74 /Height 105 /ColorSpace 405 0 R /BitsPerComponent 8 /Length 392 0 R >> stream :|5y!$y1we/!lN]n-mUvoH[/ [ `[;l Ї{)pL:M<5k:hSz? !+"Z'6qoH"^t i4IegZFHv Y& endstream endobj 392 0 obj 167 endobj 393 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 74 /Height 105 /ColorSpace 405 0 R /BitsPerComponent 8 /Length 394 0 R >> stream px5 =@>JzH|yF[gE$?b;@HhBCXeϐ]a%di~! ȼJuLؑ! =胇> stream |xyz7 r:Dr?\KtSh7%-EFHDg|/ufpl*.C#ʱKG*maҫ/å)I. רazF{5VMj z8:htk>ӇvդNw|DO"-6_I@Ui;lE~`H@!'= C ΂ۀ endstream endobj 396 0 obj 206 endobj 397 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 74 /Height 105 /ColorSpace 405 0 R /BitsPerComponent 8 /Length 398 0 R >> stream ^-ыMZģlwM7pWaBEO1xT3ےƩ3 O0Tq\R%udd281ɶ lޝtwZ1xG2 i@6$H"d{:j)|59Ei\SNT 'Cb}q_pV0}˞&Fm*{#ͬɠE$jOâcدO < B;Kf? PEgVb/bu7iA> jI%aR9wz4zx;bnd6HtiH/n:9E! ?96kP)t+<1CFsD?U2OC~(N./ ڮvz.iҽOV1HYܰ F!~%3]|dic~xV'v]V,\~DQ/rfr_S?. tuEe^Q Sx endstream endobj 398 0 obj 472 endobj 399 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 74 /Height 105 /ColorSpace 405 0 R /BitsPerComponent 8 /Length 400 0 R >> stream 0FicL&UNrz˜|?9) Ni}\luqR5bd:$B) a I;4gN`P\A+*5x8q#{%5 U^Z5 ngr|E$"[sbge q%{a"0 Pm.'`/kr^cJ4cg!13c FVB'~ Y̓Pkm so<( yhm|*<ڄL|Wv0,!HniT>~d> stream 3h" .u4"\}fLQf<˷h zx*2 {"yr0fgi*N~ZVd(.PH|2Mir?nug_fh ǚ:_kt1=Ba#>7E xV;0U4Z-VAK۱$YM3 /~  endstream endobj 402 0 obj 193 endobj 403 0 obj 481 endobj 404 0 obj << /Filter [ /ASCII85Decode /LZWDecode ] /Length 403 0 R >> stream kڙc:Ae.Iff;}Bz]Mk$D[1lgv@9zk! 5iN\wP⸵IK,("tM̅y4 endstream endobj 405 0 obj [ /Indexed /DeviceRGB 255 404 0 R ] endobj 406 0 obj << /S /D >> endobj 407 0 obj << /Nums [ 0 406 0 R ] >> endobj 408 0 obj << /Producer (Hdg0rm}QګUƭtRI) /Author (Jh\(t~m) /Creator (Hdg0z?fOƫhR) /ModDate (;4Z%*X4{XĹ) /Title (SBAG0;>n-_sSX7RN) /CreationDate (;4Z%*Y4zXĹ) >> endobj 409 0 obj << /Type /Metadata /Subtype /XML /Length 1150 >> stream n$ݜԎg$hWu:QtTĜi&<-~uI㝲1S&O ' -xĞ(B%?vlʹch#}ѷxcii&Xv)@~K412c%IIՕ#vxNؿeZdjhR,yDi%ҬAxgPo (L;?q"9жȕD^ m"kqc=S uRsJ!f<,K㍇W6ja+sNUwkHowڦr`j^D+Y2yÀTbr{ aNR}KXw49x9-|$Y0a$ o.G޹*=|,TGPN,^43l? QHM$p_iC0LIþ8>e2f9֔"/ϥ Q zvBޱJ\G&:k2ib=a! !'G ?&ŭsۍV }]g0^N?7uJfKn؉G_+T$IJShG}#wLf "\AVD/ksB@X endstream endobj 410 0 obj << /Type /Pages /Kids [ 417 0 R 1 0 R 4 0 R 26 0 R 29 0 R 32 0 R 35 0 R 38 0 R 41 0 R 44 0 R ] /Count 10 /Parent 411 0 R >> endobj 411 0 obj << /Type /Pages /Kids [ 410 0 R 412 0 R ] /Count 15 >> endobj 412 0 obj << /Type /Pages /Kids [ 47 0 R 51 0 R 55 0 R 59 0 R 62 0 R ] /Count 5 /Parent 411 0 R >> endobj xref 0 413 0000000000 65535 f 0000277743 00000 n 0000278079 00000 n 0000279550 00000 n 0000279571 00000 n 0000279922 00000 n 0000280002 00000 n 0000280138 00000 n 0000280276 00000 n 0000280411 00000 n 0000280549 00000 n 0000280687 00000 n 0000280826 00000 n 0000280965 00000 n 0000281104 00000 n 0000281243 00000 n 0000283200 00000 n 0000283222 00000 n 0000283287 00000 n 0000283352 00000 n 0000283417 00000 n 0000283482 00000 n 0000283547 00000 n 0000283612 00000 n 0000283677 00000 n 0000283742 00000 n 0000283807 00000 n 0000283978 00000 n 0000284021 00000 n 0000284103 00000 n 0000284440 00000 n 0000285985 00000 n 0000286007 00000 n 0000286344 00000 n 0000288917 00000 n 0000288939 00000 n 0000289276 00000 n 0000291573 00000 n 0000291595 00000 n 0000291932 00000 n 0000292665 00000 n 0000292686 00000 n 0000293023 00000 n 0000294030 00000 n 0000294051 00000 n 0000294388 00000 n 0000295665 00000 n 0000295687 00000 n 0000296040 00000 n 0000296069 00000 n 0000297020 00000 n 0000297041 00000 n 0000297395 00000 n 0000297424 00000 n 0000299368 00000 n 0000299390 00000 n 0000299757 00000 n 0000299786 00000 n 0000305225 00000 n 0000305247 00000 n 0000305586 00000 n 0000309901 00000 n 0000309923 00000 n 0000310262 00000 n 0000311271 00000 n 0000311292 00000 n 0000311445 00000 n 0000311633 00000 n 0000312089 00000 n 0000312565 00000 n 0000312770 00000 n 0000319717 00000 n 0000319930 00000 n 0000328122 00000 n 0000328372 00000 n 0000336965 00000 n 0000337190 00000 n 0000357143 00000 n 0000357359 00000 n 0000357654 00000 n 0000357811 00000 n 0000357914 00000 n 0000358074 00000 n 0000358137 00000 n 0000358297 00000 n 0000358385 00000 n 0000358448 00000 n 0000358558 00000 n 0000358675 00000 n 0000358794 00000 n 0000358923 00000 n 0000359050 00000 n 0000359178 00000 n 0000359307 00000 n 0000359476 00000 n 0000359590 00000 n 0000360238 00000 n 0000360321 00000 n 0000360404 00000 n 0000360897 00000 n 0000361048 00000 n 0000361132 00000 n 0000361216 00000 n 0000361300 00000 n 0000361384 00000 n 0000361468 00000 n 0000361552 00000 n 0000361636 00000 n 0000361720 00000 n 0000361805 00000 n 0000361890 00000 n 0000361975 00000 n 0000362060 00000 n 0000362145 00000 n 0000362230 00000 n 0000362315 00000 n 0000362400 00000 n 0000362485 00000 n 0000362570 00000 n 0000362655 00000 n 0000362740 00000 n 0000362825 00000 n 0000362910 00000 n 0000362995 00000 n 0000363080 00000 n 0000363165 00000 n 0000363250 00000 n 0000363335 00000 n 0000363420 00000 n 0000363505 00000 n 0000363588 00000 n 0000363671 00000 n 0000363823 00000 n 0000363908 00000 n 0000363993 00000 n 0000364078 00000 n 0000364163 00000 n 0000364303 00000 n 0000364410 00000 n 0000364576 00000 n 0000364657 00000 n 0000364812 00000 n 0000364893 00000 n 0000365000 00000 n 0000365081 00000 n 0000365162 00000 n 0000365271 00000 n 0000365352 00000 n 0000365511 00000 n 0000365593 00000 n 0000365702 00000 n 0000365784 00000 n 0000365866 00000 n 0000365975 00000 n 0000366057 00000 n 0000366139 00000 n 0000366248 00000 n 0000366330 00000 n 0000366412 00000 n 0000366521 00000 n 0000366603 00000 n 0000366685 00000 n 0000366794 00000 n 0000366876 00000 n 0000366958 00000 n 0000367067 00000 n 0000367149 00000 n 0000367231 00000 n 0000367317 00000 n 0000367414 00000 n 0000367581 00000 n 0000367673 00000 n 0000367770 00000 n 0000367943 00000 n 0000368040 00000 n 0000368137 00000 n 0000368245 00000 n 0000368299 00000 n 0000368396 00000 n 0000368493 00000 n 0000368590 00000 n 0000368687 00000 n 0000368795 00000 n 0000368849 00000 n 0000369021 00000 n 0000369118 00000 n 0000369213 00000 n 0000369314 00000 n 0000369487 00000 n 0000369588 00000 n 0000369746 00000 n 0000369848 00000 n 0000369940 00000 n 0000370037 00000 n 0000370132 00000 n 0000370233 00000 n 0000370334 00000 n 0000370429 00000 n 0000370530 00000 n 0000370625 00000 n 0000370726 00000 n 0000370827 00000 n 0000370929 00000 n 0000371025 00000 n 0000371127 00000 n 0000371219 00000 n 0000371316 00000 n 0000371417 00000 n 0000371590 00000 n 0000371682 00000 n 0000371779 00000 n 0000371874 00000 n 0000371969 00000 n 0000372125 00000 n 0000372220 00000 n 0000372315 00000 n 0000372410 00000 n 0000372505 00000 n 0000372600 00000 n 0000372695 00000 n 0000372791 00000 n 0000372887 00000 n 0000372985 00000 n 0000373077 00000 n 0000373200 00000 n 0000373254 00000 n 0000373406 00000 n 0000373501 00000 n 0000373596 00000 n 0000373691 00000 n 0000373786 00000 n 0000373909 00000 n 0000373963 00000 n 0000374060 00000 n 0000374157 00000 n 0000374249 00000 n 0000374360 00000 n 0000374464 00000 n 0000374546 00000 n 0000374638 00000 n 0000374749 00000 n 0000374853 00000 n 0000374935 00000 n 0000375032 00000 n 0000375129 00000 n 0000375226 00000 n 0000375329 00000 n 0000375482 00000 n 0000375591 00000 n 0000375744 00000 n 0000375900 00000 n 0000376004 00000 n 0000376086 00000 n 0000376175 00000 n 0000376270 00000 n 0000376438 00000 n 0000376527 00000 n 0000376622 00000 n 0000376711 00000 n 0000376807 00000 n 0000376897 00000 n 0000377033 00000 n 0000377128 00000 n 0000377217 00000 n 0000377312 00000 n 0000377401 00000 n 0000377496 00000 n 0000377585 00000 n 0000377680 00000 n 0000377775 00000 n 0000377870 00000 n 0000377966 00000 n 0000378062 00000 n 0000378157 00000 n 0000378246 00000 n 0000378341 00000 n 0000378436 00000 n 0000378547 00000 n 0000378601 00000 n 0000378712 00000 n 0000378766 00000 n 0000378877 00000 n 0000378931 00000 n 0000379042 00000 n 0000379096 00000 n 0000379191 00000 n 0000379288 00000 n 0000379399 00000 n 0000379492 00000 n 0000379603 00000 n 0000379696 00000 n 0000379835 00000 n 0000379929 00000 n 0000380045 00000 n 0000380137 00000 n 0000380523 00000 n 0000380602 00000 n 0000381396 00000 n 0000381531 00000 n 0000381587 00000 n 0000381644 00000 n 0000381700 00000 n 0000381757 00000 n 0000381813 00000 n 0000381870 00000 n 0000381926 00000 n 0000381983 00000 n 0000382039 00000 n 0000382096 00000 n 0000382152 00000 n 0000382209 00000 n 0000382265 00000 n 0000382322 00000 n 0000382378 00000 n 0000382435 00000 n 0000382491 00000 n 0000382548 00000 n 0000382604 00000 n 0000382661 00000 n 0000382717 00000 n 0000382774 00000 n 0000382830 00000 n 0000382887 00000 n 0000382943 00000 n 0000383000 00000 n 0000383056 00000 n 0000383113 00000 n 0000383169 00000 n 0000383226 00000 n 0000383282 00000 n 0000383339 00000 n 0000383395 00000 n 0000383452 00000 n 0000383546 00000 n 0000383637 00000 n 0000383731 00000 n 0000383861 00000 n 0000384076 00000 n 0000384326 00000 n 0000384446 00000 n 0000384767 00000 n 0000385106 00000 n 0000385175 00000 n 0000385244 00000 n 0000385313 00000 n 0000385382 00000 n 0000385451 00000 n 0000385520 00000 n 0000385589 00000 n 0000385658 00000 n 0000385727 00000 n 0000385796 00000 n 0000385865 00000 n 0000385934 00000 n 0000386003 00000 n 0000386072 00000 n 0000386141 00000 n 0000386210 00000 n 0000386279 00000 n 0000386348 00000 n 0000386403 00000 n 0000386515 00000 n 0000386643 00000 n 0000386690 00000 n 0000386818 00000 n 0000386914 00000 n 0000386969 00000 n 0000387038 00000 n 0000387109 00000 n 0000387178 00000 n 0000387306 00000 n 0000387375 00000 n 0000387495 00000 n 0000387599 00000 n 0000388239 00000 n 0000388261 00000 n 0000388638 00000 n 0000388660 00000 n 0000388982 00000 n 0000389004 00000 n 0000389207 00000 n 0000389228 00000 n 0000389578 00000 n 0000389600 00000 n 0000390091 00000 n 0000390113 00000 n 0000390507 00000 n 0000390529 00000 n 0000390814 00000 n 0000390836 00000 n 0000391132 00000 n 0000391154 00000 n 0000391483 00000 n 0000391505 00000 n 0000391799 00000 n 0000391821 00000 n 0000392189 00000 n 0000392211 00000 n 0000392845 00000 n 0000392867 00000 n 0000393459 00000 n 0000393481 00000 n 0000393836 00000 n 0000393858 00000 n 0000393880 00000 n 0000394458 00000 n 0000394513 00000 n 0000394545 00000 n 0000394591 00000 n 0000394860 00000 n 0000396096 00000 n 0000396244 00000 n 0000396321 00000 n trailer << /Size 413 /ID[<5c90cd977e8f8b978da063958c20402b>] >> startxref 173 %%EOF egenix-mx-base-3.2.7/mx/UID/mxUID/0000755000175000017500000000000012251446113016242 5ustar lemburglemburgegenix-mx-base-3.2.7/mx/UID/mxUID/COPYRIGHT0000664000175000017500000000176211552064177017556 0ustar lemburglemburg --------------------------------------------------------------------- COPYRIGHT NOTICE --------------------------------------------------------------------- Copyright (c) 1997-2000, IKDS Marc-Andre Lemburg; mailto:mal@lemburg.com Copyright (c) 2000-2011, eGenix.com Software GmbH; mailto:info@egenix.com All Rights Reserved. This software is protected by copyright and other intellectual property laws and by international treaties. It may only be used under the conditions and terms of the eGenix.com Public License Agreement. You should have received a copy of the eGenix.com Public License Agreement with this software (usually in the file LICENSE located in the package's or software's main directory). Please write to licenses@egenix.com to obtain a copy in case you should not have received a copy. egenix-mx-base-3.2.7/mx/UID/mxUID/LICENSE0000664000175000017500000001075307620177404017267 0ustar lemburglemburg________________________________________________________________________ EGENIX.COM PUBLIC LICENSE AGREEMENT VERSION 1.1.0 ________________________________________________________________________ 1. Introduction This "License Agreement" is between eGenix.com Software, Skills and Services GmbH ("eGenix.com"), having an office at Pastor-Loeh-Str. 48, D-40764 Langenfeld, Germany, and the Individual or Organization ("Licensee") accessing and otherwise using this software in source or binary form and its associated documentation ("the Software"). 2. License Subject to the terms and conditions of this eGenix.com Public License Agreement, eGenix.com hereby grants Licensee a non-exclusive, royalty-free, world-wide license to reproduce, analyze, test, perform and/or display publicly, prepare derivative works, distribute, and otherwise use the Software alone or in any derivative version, provided, however, that the eGenix.com Public License Agreement is retained in the Software, or in any derivative version of the Software prepared by Licensee. 3. NO WARRANTY eGenix.com is making the Software available to Licensee on an "AS IS" basis. SUBJECT TO ANY STATUTORY WARRANTIES WHICH CAN NOT BE EXCLUDED, EGENIX.COM MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, EGENIX.COM MAKES NO AND DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF THE SOFTWARE WILL NOT INFRINGE ANY THIRD PARTY RIGHTS. 4. LIMITATION OF LIABILITY EGENIX.COM SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF THE SOFTWARE FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS (INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF BUSINESS PROFITS, BUSINESS INTERRUPTION, LOSS OF BUSINESS INFORMATION, OR OTHER PECUNIARY LOSS) AS A RESULT OF USING, MODIFYING OR DISTRIBUTING THE SOFTWARE, OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO THE ABOVE EXCLUSION OR LIMITATION MAY NOT APPLY TO LICENSEE. 5. Termination This License Agreement will automatically terminate upon a material breach of its terms and conditions. 6. Third Party Rights Any software or documentation in source or binary form provided along with the Software that is associated with a separate license agreement is licensed to Licensee under the terms of that license agreement. This License Agreement does not apply to those portions of the Software. Copies of the third party licenses are included in the Software Distribution. 7. General Nothing in this License Agreement affects any statutory rights of consumers that cannot be waived or limited by contract. Nothing in this License Agreement shall be deemed to create any relationship of agency, partnership, or joint venture between eGenix.com and Licensee. If any provision of this License Agreement shall be unlawful, void, or for any reason unenforceable, such provision shall be modified to the extent necessary to render it enforceable without losing its intent, or, if no such modification is possible, be severed from this License Agreement and shall not affect the validity and enforceability of the remaining provisions of this License Agreement. This License Agreement shall be governed by and interpreted in all respects by the law of Germany, excluding conflict of law provisions. It shall not be governed by the United Nations Convention on Contracts for International Sale of Goods. This License Agreement does not grant permission to use eGenix.com trademarks or trade names in a trademark sense to endorse or promote products or services of Licensee, or any third party. The controlling language of this License Agreement is English. If Licensee has received a translation into another language, it has been provided for Licensee's convenience only. 8. Agreement By downloading, copying, installing or otherwise using the Software, Licensee agrees to be bound by the terms and conditions of this License Agreement. For question regarding this License Agreement, please write to: eGenix.com Software, Skills and Services GmbH Pastor-Loeh-Str. 48 D-40764 Langenfeld Germany egenix-mx-base-3.2.7/mx/UID/mxUID/Makefile.pre.in0000664000175000017500000002445111136427173021112 0ustar lemburglemburg# Universal Unix Makefile for Python extensions # ============================================= # Short Instructions # ------------------ # 1. Build and install Python (1.5 or newer). # 2. "make -f Makefile.pre.in boot" # 3. "make" # You should now have a shared library. # Long Instructions # ----------------- # Build *and install* the basic Python 1.5 distribution. See the # Python README for instructions. (This version of Makefile.pre.in # only withs with Python 1.5, alpha 3 or newer.) # Create a file Setup.in for your extension. This file follows the # format of the Modules/Setup.dist file; see the instructions there. # For a simple module called "spam" on file "spammodule.c", it can # contain a single line: # spam spammodule.c # You can build as many modules as you want in the same directory -- # just have a separate line for each of them in the Setup.in file. # If you want to build your extension as a shared library, insert a # line containing just the string # *shared* # at the top of your Setup.in file. # Note that the build process copies Setup.in to Setup, and then works # with Setup. It doesn't overwrite Setup when Setup.in is changed, so # while you're in the process of debugging your Setup.in file, you may # want to edit Setup instead, and copy it back to Setup.in later. # (All this is done so you can distribute your extension easily and # someone else can select the modules they actually want to build by # commenting out lines in the Setup file, without editing the # original. Editing Setup is also used to specify nonstandard # locations for include or library files.) # Copy this file (Misc/Makefile.pre.in) to the directory containing # your extension. # Run "make -f Makefile.pre.in boot". This creates Makefile # (producing Makefile.pre and sedscript as intermediate files) and # config.c, incorporating the values for sys.prefix, sys.exec_prefix # and sys.version from the installed Python binary. For this to work, # the python binary must be on your path. If this fails, try # make -f Makefile.pre.in Makefile VERSION=1.5 installdir= # where is the prefix used to install Python for installdir # (and possibly similar for exec_installdir=). # Note: "make boot" implies "make clobber" -- it assumes that when you # bootstrap you may have changed platforms so it removes all previous # output files. # If you are building your extension as a shared library (your # Setup.in file starts with *shared*), run "make" or "make sharedmods" # to build the shared library files. If you are building a statically # linked Python binary (the only solution of your platform doesn't # support shared libraries, and sometimes handy if you want to # distribute or install the resulting Python binary), run "make # python". # Note: Each time you edit Makefile.pre.in or Setup, you must run # "make Makefile" before running "make". # Hint: if you want to use VPATH, you can start in an empty # subdirectory and say (e.g.): # make -f ../Makefile.pre.in boot srcdir=.. VPATH=.. # === Bootstrap variables (edited through "make boot") === # The prefix used by "make inclinstall libainstall" of core python installdir= /usr/local # The exec_prefix used by the same exec_installdir=$(installdir) # Source directory and VPATH in case you want to use VPATH. # (You will have to edit these two lines yourself -- there is no # automatic support as the Makefile is not generated by # config.status.) srcdir= . VPATH= . # === Variables that you may want to customize (rarely) === # (Static) build target TARGET= python # Installed python binary (used only by boot target) PYTHON= python # Add more -I and -D options here CFLAGS= $(OPT) -I$(INCLUDEPY) -I$(EXECINCLUDEPY) $(DEFS) # These two variables can be set in Setup to merge extensions. # See example[23]. BASELIB= BASESETUP= # === Variables set by makesetup === MODOBJS= _MODOBJS_ MODLIBS= _MODLIBS_ # === Definitions added by makesetup === # === Variables from configure (through sedscript) === VERSION= @VERSION@ CC= @CC@ CXX= @CXX@ MAINCC= @MAINCC@ LINKCC= @LINKCC@ SGI_ABI= @SGI_ABI@ OPT= @OPT@ CPPFLAGS= @CPPFLAGS@ LDFLAGS= @LDFLAGS@ LDLAST= @LDLAST@ DEFS= LIBS= @LIBS@ LIBM= @LIBM@ LIBC= @LIBC@ RANLIB= @RANLIB@ MACHDEP= @MACHDEP@ SO= @SO@ LDSHARED= @LDSHARED@ BLDSHARED= @BLDSHARED@ CCSHARED= @CCSHARED@ LINKFORSHARED= @LINKFORSHARED@ CXX= @CXX@ # Install prefix for architecture-independent files prefix= /usr/local # Install prefix for architecture-dependent files exec_prefix= $(prefix) # Uncomment the following two lines for AIX #LINKCC= $(LIBPL)/makexp_aix $(LIBPL)/python.exp "" $(LIBRARY); $(PURIFY) $(CC) #LDSHARED= $(LIBPL)/ld_so_aix $(CC) -bI:$(LIBPL)/python.exp # === Fixed definitions === # Shell used by make (some versions default to the login shell, which is bad) SHELL= /bin/sh # Expanded directories BINDIR= $(exec_installdir)/bin LIBDIR= $(exec_prefix)/lib MANDIR= $(installdir)/man INCLUDEDIR= $(installdir)/include SCRIPTDIR= $(prefix)/lib # Detailed destination directories BINLIBDEST= $(LIBDIR)/python$(VERSION) LIBDEST= $(SCRIPTDIR)/python$(VERSION) INCLUDEPY= $(INCLUDEDIR)/python$(VERSION) EXECINCLUDEPY= $(exec_installdir)/include/python$(VERSION) LIBP= $(exec_installdir)/lib/python$(VERSION) DESTSHARED= $(BINLIBDEST)/site-packages LIBPL= $(LIBP)/config PYTHONLIBS= $(LIBPL)/libpython$(VERSION).a MAKESETUP= $(LIBPL)/makesetup MAKEFILE= $(LIBPL)/Makefile CONFIGC= $(LIBPL)/config.c CONFIGCIN= $(LIBPL)/config.c.in SETUP= $(LIBPL)/Setup.config $(LIBPL)/Setup.local $(LIBPL)/Setup SYSLIBS= $(LIBM) $(LIBC) ADDOBJS= $(LIBPL)/python.o config.o # Portable install script (configure doesn't always guess right) INSTALL= $(LIBPL)/install-sh -c # Shared libraries must be installed with executable mode on some systems; # rather than figuring out exactly which, we always give them executable mode. # Also, making them read-only seems to be a good idea... INSTALL_SHARED= ${INSTALL} -m 555 # === Fixed rules === # Default target. This builds shared libraries only default: sharedmods # Build everything all: static sharedmods # Build shared libraries from our extension modules sharedmods: $(SHAREDMODS) # Build a static Python binary containing our extension modules static: $(TARGET) $(TARGET): $(ADDOBJS) lib.a $(PYTHONLIBS) Makefile $(BASELIB) $(LINKCC) $(LDFLAGS) $(LINKFORSHARED) \ $(ADDOBJS) lib.a $(PYTHONLIBS) \ $(LINKPATH) $(BASELIB) $(MODLIBS) $(LIBS) $(SYSLIBS) \ -o $(TARGET) $(LDLAST) install: sharedmods if test ! -d $(DESTSHARED) ; then \ mkdir $(DESTSHARED) ; else true ; fi -for i in X $(SHAREDMODS); do \ if test $$i != X; \ then $(INSTALL_SHARED) $$i $(DESTSHARED)/$$i; \ fi; \ done # Build the library containing our extension modules lib.a: $(MODOBJS) -rm -f lib.a ar cr lib.a $(MODOBJS) -$(RANLIB) lib.a # This runs makesetup *twice* to use the BASESETUP definition from Setup config.c Makefile: Makefile.pre Setup $(BASESETUP) $(MAKESETUP) $(MAKESETUP) \ -m Makefile.pre -c $(CONFIGCIN) Setup -n $(BASESETUP) $(SETUP) $(MAKE) -f Makefile do-it-again # Internal target to run makesetup for the second time do-it-again: $(MAKESETUP) \ -m Makefile.pre -c $(CONFIGCIN) Setup -n $(BASESETUP) $(SETUP) # Make config.o from the config.c created by makesetup config.o: config.c $(CC) $(CFLAGS) -c config.c # Setup is copied from Setup.in *only* if it doesn't yet exist Setup: cp $(srcdir)/Setup.in Setup # Make the intermediate Makefile.pre from Makefile.pre.in Makefile.pre: Makefile.pre.in sedscript sed -f sedscript $(srcdir)/Makefile.pre.in >Makefile.pre # Shortcuts to make the sed arguments on one line P=prefix E=exec_prefix H=Generated automatically from Makefile.pre.in by sedscript. L=LINKFORSHARED # Make the sed script used to create Makefile.pre from Makefile.pre.in sedscript: $(MAKEFILE) sed -n \ -e '1s/.*/1i\\/p' \ -e '2s%.*%# $H%p' \ -e '/^VERSION=/s/^VERSION=[ ]*\(.*\)/s%@VERSION[@]%\1%/p' \ -e '/^CC=/s/^CC=[ ]*\(.*\)/s%@CC[@]%\1%/p' \ -e '/^CXX=/s/^CXX=[ ]*\(.*\)/s%@CXX[@]%\1%/p' \ -e '/^DEFS=/s/^DEFS=[ ]*\(.*\)/s%@DEFS[@]%\1%/p' \ -e '/^MAINCC=/s/^MAINCC=[ ]*\(.*\)/s%@MAINCC[@]%\1%/p' \ -e '/^LINKCC=/s/^LINKCC=[ ]*\(.*\)/s%@LINKCC[@]%\1%/p' \ -e '/^OPT=/s/^OPT=[ ]*\(.*\)/s%@OPT[@]%\1%/p' \ -e '/^CPPFLAGS=/s/^CPPFLAGS=[ ]*\(.*\)/s%@CPPFLAGS[@]%\1%/p' \ -e '/^LDFLAGS=/s/^LDFLAGS=[ ]*\(.*\)/s%@LDFLAGS[@]%\1%/p' \ -e '/^LDLAST=/s/^LDLAST=[ ]*\(.*\)/s%@LDLAST[@]%\1%/p' \ -e '/^DEFS=/s/^DEFS=[ ]*\(.*\)/s%@DEFS[@]%\1%/p' \ -e '/^LIBS=/s/^LIBS=[ ]*\(.*\)/s%@LIBS[@]%\1%/p' \ -e '/^LIBM=/s/^LIBM=[ ]*\(.*\)/s%@LIBM[@]%\1%/p' \ -e '/^LIBC=/s/^LIBC=[ ]*\(.*\)/s%@LIBC[@]%\1%/p' \ -e '/^RANLIB=/s/^RANLIB=[ ]*\(.*\)/s%@RANLIB[@]%\1%/p' \ -e '/^MACHDEP=/s/^MACHDEP=[ ]*\(.*\)/s%@MACHDEP[@]%\1%/p' \ -e '/^SO=/s/^SO=[ ]*\(.*\)/s%@SO[@]%\1%/p' \ -e '/^LDSHARED=/s/^LDSHARED=[ ]*\(.*\)/s%@LDSHARED[@]%\1%/p' \ -e '/^BLDSHARED=/s/^BLDSHARED=[ ]*\(.*\)/s%@BLDSHARED[@]%\1%/p' \ -e '/^CCSHARED=/s/^CCSHARED=[ ]*\(.*\)/s%@CCSHARED[@]%\1%/p' \ -e '/^SGI_ABI=/s/^SGI_ABI=[ ]*\(.*\)/s%@SGI_ABI[@]%\1%/p' \ -e '/^$L=/s/^$L=[ ]*\(.*\)/s%@$L[@]%\1%/p' \ -e '/^$P=/s/^$P=\(.*\)/s%^$P=.*%$P=\1%/p' \ -e '/^$E=/s/^$E=\(.*\)/s%^$E=.*%$E=\1%/p' \ $(MAKEFILE) >sedscript echo "/^#@SET_CCC@/d" >>sedscript echo "/^installdir=/s%=.*%= $(installdir)%" >>sedscript echo "/^exec_installdir=/s%=.*%=$(exec_installdir)%" >>sedscript echo "/^srcdir=/s%=.*%= $(srcdir)%" >>sedscript echo "/^VPATH=/s%=.*%= $(VPATH)%" >>sedscript echo "/^LINKPATH=/s%=.*%= $(LINKPATH)%" >>sedscript echo "/^BASELIB=/s%=.*%= $(BASELIB)%" >>sedscript echo "/^BASESETUP=/s%=.*%= $(BASESETUP)%" >>sedscript # Bootstrap target boot: clobber VERSION=`$(PYTHON) -c "import sys; print sys.version[:3]"`; \ installdir=`$(PYTHON) -c "import sys; print sys.prefix"`; \ exec_installdir=`$(PYTHON) -c "import sys; print sys.exec_prefix"`; \ $(MAKE) -f $(srcdir)/Makefile.pre.in VPATH=$(VPATH) srcdir=$(srcdir) \ VERSION=$$VERSION \ installdir=$$installdir \ exec_installdir=$$exec_installdir \ Makefile # Handy target to remove intermediate files and backups clean: -rm -f *.o *~ # Handy target to remove everything that is easily regenerated clobber: clean -rm -f *.a tags TAGS config.c Makefile.pre $(TARGET) sedscript -rm -f *.so *.sl so_locations # Handy target to remove everything you don't want to distribute distclean: clobber -rm -f Makefile Setup egenix-mx-base-3.2.7/mx/UID/mxUID/Setup.in0000664000175000017500000000034707015545603017706 0ustar lemburglemburg# Build extensions shared: *shared* # # # mxUID module # mxUID \ # # Enable to have 'python -d' produce a logfile mxUID.log with # debugging information in the current working dir. # # -DMAL_DEBUG \ # -DMAL_REF_DEBUG \ # mxUID.c egenix-mx-base-3.2.7/mx/UID/mxUID/__init__.py0000664000175000017500000000152411564465333020372 0ustar lemburglemburgfrom mxUID import * from mxUID import __version__ ### Python part of module initialization # Set IDs def _init(): global _hostid import os,time try: # Try to use the IP address as host id import socket try: ip = socket.gethostbyname(socket.gethostname()) except socket.error: raise ImportError, 'no network connection' ip = map(int, ip.split('.')) _hostid = reduce(lambda x,y: (x+y) % 65536, ip) except ImportError: try: # Use the data from the root stat as host id _hostid = reduce(lambda x,y: (x+y) % 65536, os.stat(os.sep)) except os.error: # Fallback to a constant _hostid = 0x2003 # -559038737 == 0xdeadbeef setids(_hostid, os.getpid(), -559038737 & long(time.time() / 1000)) _init() egenix-mx-base-3.2.7/mx/UID/mxUID/ld_so_aix0000775000175000017500000001351507057236756020162 0ustar lemburglemburg#!/bin/sh # # ======================================================================== # FILE: ld_so_aix # TYPE: executable, uses makexp_aix # SYSTEM: AIX # # DESCRIPTION: Creates a shareable .o from a set of pre-compiled # (unshared) .o files # # USAGE: ld_so_aix [CC] [arguments] # # ARGUMENTS: Same as for "ld". The following arguments are processed # or supplied by this script (those marked with an asterisk # can be overriden from command line): # # Argument Default value # (*) -o [OutputFileName] -o shr.o # (*) -e [EntryPointLabel] -e init[OutputBaseName] # (*) -bE:[ExportFile] -bE:[OutputBaseName].exp # (*) -bI:[ImportFile] -bI:./python.exp # -bM:[ModuleType] -bM:SRE # -bhalt:[Number] -bhalt:4 # -T[Number] -T512 # -H[Number] -H512 # -lm # # The compiler specific ("-lc" or "-lc_r", "-lpthreads",...) # arguments will be automatically passed to "ld" according # to the CC command provided as a first argument to this # script. Usually, the same CC command was used to produce # the pre-compiled .o file(s). # # NOTES: 1. Since "ld_so_aix" was originally written for building # shared modules for the Python interpreter, the -e and # -bI default values match Python's conventions. In # Python, the entry point for a shared module is based # on the module's name (e.g., the "mathmodule" will # expect an entry point of "initmath"). # 2. The script accepts multiple .o or .a input files and # creates a single (shared) output file. The export list # that is created is based on the output file's basename # with the suffix ".exp". # 3. The resulting shared object file is left in the # current directory. # 4. Uncommenting the "echo" lines gives detailed output # about the commands executed in the script. # # # HISTORY: Oct-1996 -- Support added for multiple .o files -- # -- and optional arguments processing. -- # Chris Myers (myers@tc.cornell.edu), Keith Kwok # (kkwok@tc.cornell.edu) and Vladimir Marangozov # # Aug-6-1996 -- Take care of the compiler specific -- # -- args by leaving CC to invoke "ld". -- # Vladimir Marangozov # # Jul-1-1996 -- Make sure to use /usr/ccs/bin/ld -- # -- Use makexp_aix for the export list. -- # Vladimir Marangozov (Vladimir.Marangozov@imag.fr) # # Manus Hand (mhand@csn.net) -- Initial code -- 6/24/96 # ======================================================================== # usage="Usage: ld_so_aix [CC command] [ld arguments]" if test ! -n "$*"; then echo $usage; exit 2 fi makexp=`dirname $0`/makexp_aix # Check for existence of compiler. CC=$1; shift whichcc=`which $CC` if test ! -x "$whichcc"; then echo "ld_so_aix: Compiler '$CC' not found; exiting." exit 2 fi if test ! -n "$*"; then echo $usage; exit 2 fi # Default import file for Python # Can be overriden by providing a -bI: argument. impfile="./python.exp" # Parse arguments while test -n "$1" do case "$1" in -e | -Wl,-e) if test -z "$2"; then echo "ld_so_aix: The -e flag needs a parameter; exiting."; exit 2 else shift; entry=$1 fi ;; -e* | -Wl,-e*) entry=`echo $1 | sed -e "s/-Wl,//" -e "s/-e//"` ;; -o) if test -z "$2"; then echo "ld_so_aix: The -o flag needs a parameter; exiting."; exit 2 else shift; objfile=$1 fi ;; -o*) objfile=`echo $1 | sed "s/-o//"` ;; -bI:* | -Wl,-bI:*) impfile=`echo $1 | sed -e "s/-Wl,//" -e "s/-bI://"` ;; -bE:* | -Wl,-bE:*) expfile=`echo $1 | sed -e "s/-Wl,//" -e "s/-bE://"` ;; *.o | *.a) objs="$objs $1" args="$args $1" ;; -bM:* | -Wl,-bM:* | -H* | -Wl,-H* | -T* | -Wl,-T* | -lm) ;; *) args="$args $1" ;; esac shift done if test -z "$objs"; then echo "ld_so_aix: No input files; exiting." exit 2 elif test ! -r "$impfile"; then echo "ld_so_aix: Import file '$impfile' not found or not readable; exiting." exit 2 fi # If -o wasn't specified, assume "-o shr.o" if test -z "$objfile"; then objfile=shr.o fi filename=`basename $objfile | sed "s/\.[^.]*$//"` # If -bE: wasn't specified, assume "-bE:$filename.exp" if test -z "$expfile"; then expfile="$filename.exp" fi # Default entry symbol for Python modules = init[modulename] # Can be overriden by providing a -e argument. if test -z "$entry"; then entry=init`echo $filename | sed "s/module.*//"` fi #echo "ld_so_aix: Debug info section" #echo " -> output file : $objfile" #echo " -> import file : $impfile" #echo " -> export file : $expfile" #echo " -> entry point : $entry" #echo " -> object files: $objs" #echo " -> CC arguments: $args" CCOPT="-Wl,-e$entry -Wl,-bE:$expfile -Wl,-bI:$impfile -Wl,-bhalt:4" CCOPT="$CCOPT -Wl,-bM:SRE -Wl,-T512 -Wl,-H512 -lm -o $objfile" CCARGS="$args" # Export list generation. #echo $makexp $expfile "$objfile" $objs $makexp $expfile "$objfile" $objs # Perform the link. #echo $CC $CCOPT $CCARGS $CC $CCOPT $CCARGS # Delete the module's export list file. # Comment this line if you need it. rm -f $expfile egenix-mx-base-3.2.7/mx/UID/mxUID/makexp_aix0000775000175000017500000000603507057236752020342 0ustar lemburglemburg#!/bin/sh # # =========================================================================== # FILE: makexp_aix # TYPE: standalone executable # SYSTEM: AIX 3.2.5 and AIX 4 # # DESCRIPTION: This script creates an export list of ALL global symbols # from a list of object or archive files. # # USAGE: makexp_aix "" ... # # where: # is the target export list filename. # is the path/file string to be appended # after the "#!" symbols in the first line of the # export file. Passing "" means deferred resolution. # is an object (.o) or an archive file (.a). # # HISTORY: # 3-Apr-1998 -- remove C++ entries of the form Class::method # Vladimir Marangozov # # 1-Jul-1996 -- added header information # Vladimir Marangozov # # 28-Jun-1996 -- initial code # Vladimir Marangozov (Vladimir.Marangozov@imag.fr) # ========================================================================== # Variables expFileName=$1 toAppendStr=$2 shift; shift; inputFiles=$* automsg="Generated automatically by makexp_aix" notemsg="NOTE: lists _all_ global symbols defined in the above file(s)." curwdir=`pwd` # Create the export file and setup the header info echo "#!"$toAppendStr > $expFileName echo "*" >> $expFileName echo "* $automsg (`date -u`)" >> $expFileName echo "*" >> $expFileName echo "* Base Directory: $curwdir" >> $expFileName echo "* Input File(s) : $inputFiles" >> $expFileName echo "*" >> $expFileName echo "* $notemsg" >> $expFileName echo "*" >> $expFileName # Extract the symbol list using 'nm' which produces quite # different output under AIX 4 than under AIX 3.2.5. # The following handles both versions by using a common flagset. # Here are some hidden tricks: # 1. Use /usr/ccs/bin/nm. Relevant to AIX 3.2.5 which has # another version under /usr/ucb/bin/nm. # 2. Use the -B flag to have a standard BSD representation # of the symbol list on both AIX 3.2.5 and AIX 4. The "-B" # flag is missing in the AIX 3.2.5 online usage help of 'nm'. # 3. Use the -x flag to have a hex representation of the symbol # values. This fills the leading whitespaces on AIX 4, # thus simplifying the sed statement. # 4. Eliminate all entries except those with either "B", "D" # or "T" key letters. We are interested only in the global # (extern) BSS, DATA and TEXT symbols. With the same statement # we eliminate object member lines relevant to AIX 4. # 5. Eliminate entries containing a dot. We can have a dot only # as a symbol prefix, but such symbols are undefined externs. # 6. Eliminate everything including the key letter, so that we're # left with just the symbol name. # 7. Eliminate all entries containing two colons, like Class::method # /usr/ccs/bin/nm -Bex $inputFiles \ | sed -e '/ [^BDT] /d' -e '/\./d' -e 's/.* [BDT] //' -e '/::/d' \ | sort | uniq >> $expFileName egenix-mx-base-3.2.7/mx/UID/mxUID/mx.h0000664000175000017500000005570412133300665017054 0ustar lemburglemburg#ifndef MX_H #define MX_H /* mx -- Marc's eXtension modules for Python: basic macros This file is only meant to be included by the extension modules. DO NOT include it in the extension module's header file, since it will definitely cause troubles then. To enable debugging ceratin things, define one of these before including this file: MAL_REF_DEBUG -- debug reference counts (Py_MY_xxx) [this file] MAL_DEBUG -- enable debug output (DPRINTF) [mxstdlib.h] MAL_MEM_DEBUG -- enable malloc output (new,cnew,free,...) [mxstdlib.h] Copyright (c) 2000, Marc-Andre Lemburg; mailto:mal@lemburg.com Copyright (c) 2000-2013, eGenix.com Software GmbH; mailto:info@egenix.com See the documentation for further copyright information or contact the author. XXX Most of these macros and defines should really use an mx prefix to avoid collisions with native Python macros and defines. So far this has not happened, which is why this hasn't been implemented yet. */ /* --- Platform or compiler specific tweaks ------------------------------- */ /* Add some platform specific symbols to enable work-arounds for the static forward declaration of type definitions; note that the GNU C compiler does not have this problem. Many thanks to all who have contributed to this list. */ #ifndef BAD_STATIC_FORWARD # if (!defined(__GNUC__)) # if (defined(NeXT) || defined(sgi) || defined(_AIX) || (defined(__osf__) && defined(__DECC)) || defined(TrueCompaq64) || defined(__VMS)) # define BAD_STATIC_FORWARD # endif # endif #endif /* Some more tweaks for various platforms. */ /* VMS needs this define. Thanks to Jean-Franois PIRONNE */ #if defined(__VMS) # define __SC__ #endif /* xlC on AIX doesn't like the Python work-around for static forwards in ANSI mode (default), so we switch on extended mode. Thanks to Albert Chin-A-Young */ #if defined(__xlC__) # pragma langlvl extended #endif /* --- Standard header files ---------------------------------------------- */ /* Include the generic mx header file */ #include "mxh.h" /* Include nearly all Python symbols & definitions */ #include "Python.h" /* Include other standard stuff */ #include "mxstdlib.h" /* Include Python backward compatibility stuff */ #include "mxpyapi.h" /* --- Compiler support --------------------------------------------------- */ /* Support for compilers which don't like static forward declarations of arrays; Python 2.3 removed the support for BAD_STATIC_FORWARD which is why we now use our own little helpers here. */ #undef staticforward #undef statichere #ifdef BAD_STATIC_FORWARD # define staticforward extern # define statichere static #else # define staticforward static # define statichere static #endif /* --- Declare macros ----------------------------------------------------- */ #define Py_NONE (Py_INCREF(Py_None),Py_None) #ifdef MAL_REF_DEBUG # define printref(x) printf("* refcount for "#x" = %i\n",(long) x->ob_refcnt); #else # define printref(x) #endif /* --- Error handling ----------------------------------------------------- */ #define Py_Do(x) {if (!(x)) goto onError;} #define Py_ReturnOnError(errortype,errorstr) {PyErr_SetString(errortype,errorstr);return NULL;} #define Py_Assert(x,errortype,errorstr) {if (!(x)) {PyErr_SetString(errortype,errorstr);goto onError;}} #define Py_AssertWithArg(x,errortype,errorstr,a1) {if (!(x)) {PyErr_Format(errortype,errorstr,a1);goto onError;}} #define Py_AssertWith2Args(x,errortype,errorstr,a1,a2) {if (!(x)) {PyErr_Format(errortype,errorstr,a1,a2);goto onError;}} #define Py_AssertWith3Args(x,errortype,errorstr,a1,a2,a3) {if (!(x)) {PyErr_Format(errortype,errorstr,a1,a2,a3);goto onError;}} #define Py_Error(errortype,errorstr) {PyErr_SetString(errortype,errorstr);goto onError;} #define Py_ErrorWithArg(errortype,errorstr,a1) {PyErr_Format(errortype,errorstr,a1);goto onError;} #define Py_ErrorWith2Args(errortype,errorstr,a1,a2) {PyErr_Format(errortype,errorstr,a1,a2);goto onError;} #define Py_ErrorWith3Args(errortype,errorstr,a1,a2,a3) {PyErr_Format(errortype,errorstr,a1,a2,a3);goto onError;} /* --- Reference counting ------------------------------------------------- */ #ifdef MAL_REF_DEBUG static void mx_Py_INCREF(PyObject *v, const char *name, const char *filename, int lineno) { if (!Py_DebugFlag) { Py_XINCREF(v); return; } if (!v) mxDebugPrintf("[%s:%5i] Py_XINCREF( %-8s == NULL );\n", filename,lineno,name); else { Py_INCREF(v);; mxDebugPrintf("[%s:%5i] Py_XINCREF( %-8s at 0x%lx [%s]); " "new refcount = %i\n", filename,lineno,name,(long)v,v->ob_type->tp_name, v->ob_refcnt); } } static void mx_Py_DECREF(PyObject *v, const char *name, const char *filename, int lineno) { if (!Py_DebugFlag) { Py_XDECREF(v); return; } if (!v) mxDebugPrintf("[%s:%5i] Py_XDECREF( %-8s == NULL );\n", filename,lineno,name); else { int refcnt = v->ob_refcnt; Py_DECREF(v); if (refcnt <= 1) mxDebugPrintf("[%s:%5i] Py_XDECREF( %-8s at 0x%lx [%s]); " "object deleted\n", filename,lineno,name,(long)v,v->ob_type->tp_name); else mxDebugPrintf("[%s:%5i] Py_XDECREF( %-8s at 0x%lx [%s]); " "new refcount = %i\n", filename,lineno,name,(long)v,v->ob_type->tp_name, v->ob_refcnt); } } static void mx_Py_PRINT_REFCOUNT(PyObject *v, const char *name, const char *filename, int lineno) { if (!Py_DebugFlag) return; if (!v) mxDebugPrintf("[%s:%5i] Py_PRINT_REFCOUNT( %-8s == NULL );\n", filename,lineno,name); else { mxDebugPrintf("[%s:%5i] Py_PRINT_REFCOUNT( %-8s at 0x%lx [%s]) = %i;\n", filename,lineno,name,(long)v,v->ob_type->tp_name, v->ob_refcnt); } } # undef Py_INCREF # define Py_INCREF(x) mx_Py_INCREF((PyObject *)x,#x,__FILE__,__LINE__) # undef Py_DECREF # define Py_DECREF(x) mx_Py_DECREF((PyObject *)x,#x,__FILE__,__LINE__) # undef Py_XINCREF # define Py_XINCREF(x) mx_Py_INCREF((PyObject *)x,#x,__FILE__,__LINE__) # undef Py_XDECREF # define Py_XDECREF(x) mx_Py_DECREF((PyObject *)x,#x,__FILE__,__LINE__) # undef Py_CLEAR # define Py_CLEAR(x) {Py_XDECREF(x); x=0;} # define Py_DELETE(x) {if (x->ob_refcnt > 1) mxDebugPrintf("[%s:%5i] Py_DELETE( "#x" ) WARNING: Refcount = %i > 1\n",__FILE__,__LINE__,(int)x->ob_refcnt);Py_DECREF(x);} # define Py_PRINT_REFCOUNT(x) mx_Py_PRINT_REFCOUNT((PyObject *)x,#x,__FILE__,__LINE__) #else # define Py_DELETE(x) Py_DECREF(x) # define Py_PRINT_REFCOUNT(x) #endif #define Py_DEC_REF(x) {Py_XDECREF(x); x=0;} /* doing this once too often doesn't hurt; same as Py_CLEAR() */ /* Unreference a Python object. This is only used in Python debug builds and needed to keep track of all allocated references. Use in object constructors or free list implementations. */ #ifndef _Py_DEC_REFTOTAL # ifdef Py_REF_DEBUG # define _Py_DEC_REFTOTAL _Py_RefTotal-- # else # define _Py_DEC_REFTOTAL # endif #endif #define mxPy_UNREF(x) _Py_DEC_REFTOTAL /* --- Debug logging ------------------------------------------------------ */ #ifdef MAL_DEBUG # define Py_PRINT_REPR(message, obj) \ if (Py_DebugFlag) { \ PyObject *_debug_repr = PyObject_Repr(obj); \ mxDebugPrintf(message, PyString_AsString(_debug_repr)); \ Py_XDECREF(_debug_repr); \ } #else # define Py_PRINT_REPR(message, obj) #endif /* --- Argument passing and checking -------------------------------------- */ /* No arguments expected; also use Py_MethodListEntryNoArgs() for this kind of fct; this check is no longer needed in Python 2.3 and later */ #if PY_VERSION_HEX >= 0x02030000 # define Py_NoArgsCheck() {if (0) goto onError;} #else # define Py_NoArgsCheck() {if (!PyArg_NoArgs(args)) goto onError;} #endif /* For functions with old style args (Py_MethodListEntrySingleArg) */ #define Py_GetArgObject(a) {a = args; if (!a) {PyErr_SetString(PyExc_TypeError,"function/method requires an argument"); goto onError;}} #define Py_GetSingleArg(format,a1) {if (!PyArg_Parse(args,format,&a1)) goto onError;} /* For functions with new style args: */ #define Py_GetArg(format,a1) {if (!PyArg_ParseTuple(args,format,&a1)) goto onError;} #define Py_Get2Args(format,a1,a2) {if (!PyArg_ParseTuple(args,format,&a1,&a2)) goto onError;} #define Py_Get3Args(format,a1,a2,a3) {if (!PyArg_ParseTuple(args,format,&a1,&a2,&a3)) goto onError;} #define Py_Get4Args(format,a1,a2,a3,a4) {if (!PyArg_ParseTuple(args,format,&a1,&a2,&a3,&a4)) goto onError;} #define Py_Get5Args(format,a1,a2,a3,a4,a5) {if (!PyArg_ParseTuple(args,format,&a1,&a2,&a3,&a4,&a5)) goto onError;} #define Py_Get6Args(format,a1,a2,a3,a4,a5,a6) {if (!PyArg_ParseTuple(args,format,&a1,&a2,&a3,&a4,&a5,&a6)) goto onError;} #define Py_Get7Args(format,a1,a2,a3,a4,a5,a6,a7) {if (!PyArg_ParseTuple(args,format,&a1,&a2,&a3,&a4,&a5,&a6,&a7)) goto onError;} #define Py_Get8Args(format,a1,a2,a3,a4,a5,a6,a7,a8) {if (!PyArg_ParseTuple(args,format,&a1,&a2,&a3,&a4,&a5,&a6,&a7,&a8)) goto onError;} /* The keywords array string type */ #define Py_KEYWORDS_STRING_TYPE char /* For functions with keywords -- the first macro parameter must be the keywords array given as e.g. static const char *keywords[] = {"first","second","third", 0}; with an entry for every argument (in the correct order). The functions must be included in the method list using Py_MethodWithKeywordsListEntry() and be declared as Py_C_Function_WithKeywords(). */ #define Py_KeywordGetArg(keywords,format,a1) {if (!PyArg_ParseTupleAndKeywords(args,kws,format,keywords,&a1)) goto onError;} #define Py_KeywordGet2Args(keywords,format,a1,a2) {if (!PyArg_ParseTupleAndKeywords(args,kws,format,keywords,&a1,&a2)) goto onError;} #define Py_KeywordGet3Args(keywords,format,a1,a2,a3) {if (!PyArg_ParseTupleAndKeywords(args,kws,format,keywords,&a1,&a2,&a3)) goto onError;} #define Py_KeywordGet4Args(keywords,format,a1,a2,a3,a4) {if (!PyArg_ParseTupleAndKeywords(args,kws,format,keywords,&a1,&a2,&a3,&a4)) goto onError;} #define Py_KeywordGet5Args(keywords,format,a1,a2,a3,a4,a5) {if (!PyArg_ParseTupleAndKeywords(args,kws,format,keywords,&a1,&a2,&a3,&a4,&a5)) goto onError;} #define Py_KeywordGet6Args(keywords,format,a1,a2,a3,a4,a5,a6) {if (!PyArg_ParseTupleAndKeywords(args,kws,format,keywords,&a1,&a2,&a3,&a4,&a5,&a6)) goto onError;} #define Py_KeywordGet7Args(keywords,format,a1,a2,a3,a4,a5,a6,a7) {if (!PyArg_ParseTupleAndKeywords(args,kws,format,keywords,&a1,&a2,&a3,&a4,&a5,&a6,&a7)) goto onError;} #define Py_KeywordGet8Args(keywords,format,a1,a2,a3,a4,a5,a6,a7,a8) {if (!PyArg_ParseTupleAndKeywords(args,kws,format,keywords,&a1,&a2,&a3,&a4,&a5,&a6,&a7,&a8)) goto onError;} /* New style macros fof functions supporting keywords -- the C variable names are used as template for the keyword list, i.e. they must match the Python keyword parameter names. Note that format strings with special parameters (e.g. "#s") are not allowed since they would cause the keyword list to be out of sync. The functions must be included in the method list using Py_MethodWithKeywordsListEntry() and be declared as Py_C_Function_WithKeywords(). Example: Py_C_Function_WithKeywords( myfunction, "myfunction(filename,dupkeys=0,filemode=0,sectorsize=512)\n\n" "Returns a myobject" ) { char *filename; int sectorsize = 512; int dupkeys = 0; int filemode = 0; Py_KeywordsGet4Args("s|iii", filename,dupkeys,filemode,sectorsize); return (PyObject *)myobject_New(filename, filemode, sectorsize, dupkeys); onError: return NULL; } */ #define Py_KeywordsGetArg(format,a1) {static Py_KEYWORDS_STRING_TYPE *kwslist[] = {#a1,NULL}; if (!PyArg_ParseTupleAndKeywords(args,kws,format,kwslist,&a1)) goto onError;} #define Py_KeywordsGet2Args(format,a1,a2) {static Py_KEYWORDS_STRING_TYPE *kwslist[] = {#a1,#a2,NULL}; if (!PyArg_ParseTupleAndKeywords(args,kws,format,kwslist,&a1,&a2)) goto onError;} #define Py_KeywordsGet3Args(format,a1,a2,a3) {static Py_KEYWORDS_STRING_TYPE *kwslist[] = {#a1,#a2,#a3,NULL}; if (!PyArg_ParseTupleAndKeywords(args,kws,format,kwslist,&a1,&a2,&a3)) goto onError;} #define Py_KeywordsGet4Args(format,a1,a2,a3,a4) {static Py_KEYWORDS_STRING_TYPE *kwslist[] = {#a1,#a2,#a3,#a4,NULL}; if (!PyArg_ParseTupleAndKeywords(args,kws,format,kwslist,&a1,&a2,&a3,&a4)) goto onError;} #define Py_KeywordsGet5Args(format,a1,a2,a3,a4,a5) {static Py_KEYWORDS_STRING_TYPE *kwslist[] = {#a1,#a2,#a3,#a4,#a5,NULL}; if (!PyArg_ParseTupleAndKeywords(args,kws,format,kwslist,&a1,&a2,&a3,&a4,&a5)) goto onError;} #define Py_KeywordsGet6Args(format,a1,a2,a3,a4,a5,a6) {static Py_KEYWORDS_STRING_TYPE *kwslist[] = {#a1,#a2,#a3,#a4,#a5,#a6,NULL}; if (!PyArg_ParseTupleAndKeywords(args,kws,format,kwslist,&a1,&a2,&a3,&a4,&a5,&a6)) goto onError;} #define Py_KeywordsGet7Args(format,a1,a2,a3,a4,a5,a6,a7) {static Py_KEYWORDS_STRING_TYPE *kwslist[] = {#a1,#a2,#a3,#a4,#a5,#a6,#a7,NULL}; if (!PyArg_ParseTupleAndKeywords(args,kws,format,kwslist,&a1,&a2,&a3,&a4,&a5,&a6,&a7)) goto onError;} #define Py_KeywordsGet8Args(format,a1,a2,a3,a4,a5,a6,a7,a8) {static Py_KEYWORDS_STRING_TYPE *kwslist[] = {#a1,#a2,#a3,#a4,#a5,#a6,#a7,#a8,NULL}; if (!PyArg_ParseTupleAndKeywords(args,kws,format,kwslist,&a1,&a2,&a3,&a4,&a5,&a6,&a7,&a8)) goto onError;} /* --- Returning values to Python ----------------------------------------- */ /* XXX Don't always work: every time you have an 'O' in the BuildValue format string, you need to DECREF the variable *after* the tuple has been built !!! */ #define Py_ReturnNone() {Py_INCREF(Py_None);return Py_None;} #define Py_ReturnTrue() {Py_INCREF(Py_True);return Py_True;} #define Py_ReturnFalse() {Py_INCREF(Py_False);return Py_False;} #define Py_ReturnArg(format,a1) return Py_BuildValue(format,a1); #define Py_Return Py_ReturnArg #define Py_Return2Args(format,a1,a2) return Py_BuildValue(format,a1,a2); #define Py_Return2 Py_Return2Args #define Py_Return3Args(format,a1,a2,a3) return Py_BuildValue(format,a1,a2,a3); #define Py_Return3 Py_Return3Args #define Py_Return4Args(format,a1,a2,a3) return Py_BuildValue(format,a1,a2,a3,a4); #define Py_Return5Args(format,a1,a2,a3) return Py_BuildValue(format,a1,a2,a3,a4,a5); #define Py_Return6Args(format,a1,a2,a3) return Py_BuildValue(format,a1,a2,a3,a4,a5,a6); #define Py_Return7Args(format,a1,a2,a3) return Py_BuildValue(format,a1,a2,a3,a4,a5,a6,a7); /* Build values */ #define Py_BuildNone() Py_NONE #define Py_Build(format,x) Py_BuildValue(format,x) #define Py_Build2(format,x,y) Py_BuildValue(format,x,y) #define Py_Build3(format,x,y,z) Py_BuildValue(format,x,y,z) /* --- Declaring Python builtin functions/methods ------------------------- */ /* The doc-string type changed to const char* in Python 2.5 */ #if PY_VERSION_HEX >= 0x02050000 # define Py_DOC_STRING_TYPE const char #else # define Py_DOC_STRING_TYPE char #endif /* Declare C function/method fct, having docstring docstr; may use vargargs */ #define Py_C_Function(fct,docstr) \ static Py_DOC_STRING_TYPE fct##_docstring[] = docstr;\ static PyObject *fct(PyObject *self, PyObject *args) /* Declare C function/method fct, having keywords keywordsarray and a docstring docstr; may use vargargs & keywords */ #define Py_C_Function_WithKeywords(fct,docstr) \ static Py_DOC_STRING_TYPE fct##_docstring[] = docstr;\ static PyObject *fct(PyObject *self, PyObject *args, PyObject *kws) /* These declare: self -- instance pointer for methods, NULL for functions args -- argument tuple kws -- keywords dict (if applicable) plus as statics: _docstring -- the docstring as given _keywords -- the keyword array as given Note: use the Py_GetArg macros for functions without keywords, and Py_KeywordGetArg macros for functions with keywords */ /* --- Method list entries for builtin functions/methods ------------------ */ /* Add a C function/method cname to the module dict as pyname; no doc-string */ #define Py_MethodListEntryAny(pyname,cname) {pyname,(PyCFunction)cname,METH_VARARGS} /* Add a C function/method cname to the module dict as pyname; the function can use varargs */ #define Py_MethodListEntry(pyname,cname) {pyname,(PyCFunction)cname,METH_VARARGS,cname##_docstring} /* Add a C function/method cname to the module dict as pyname; the function takes no args; in Python 2.3 a new flag was added for these which implements the no args check in the interpreter itself. */ #ifdef METH_NOARGS # define Py_MethodListEntryNoArgs(pyname,cname) {pyname,(PyCFunction)cname,METH_NOARGS,cname##_docstring} #else # define Py_MethodListEntryNoArgs(pyname,cname) {pyname,(PyCFunction)cname,0,cname##_docstring} #endif /* Add a C function/method cname to the module dict as pyname; the function takes one argument: the object is passed in directly (without wrapping it into a tuple first), i.e. don't use the Py_GetArg-macros or PyArg_ParseTuple(). */ #define Py_MethodListEntrySingleArg(pyname,cname) {pyname,(PyCFunction)cname,0,cname##_docstring} /* Add a C function/method that uses keywords to the module dict */ #define Py_MethodWithKeywordsListEntry(pyname,cname) {pyname,(PyCFunction)cname,METH_VARARGS | METH_KEYWORDS,cname##_docstring} /* --- Sequence slicing --------------------------------------------------- */ /* Check a given slice and apply the usual rules for negative indices */ #define Py_CheckSequenceSlice(len,start,stop) { \ if (stop > len) \ stop = len; \ else { \ if (stop < 0) \ stop += len; \ if (stop < 0) \ stop = 0; \ } \ if (start < 0) { \ start += len; \ if (start < 0) \ start = 0; \ } \ if (stop < start) \ start = stop; \ } /* --- Number macros ------------------------------------------------------ */ /* Test for PyFloat_AsDouble() compatible object */ #define PyFloat_Compatible(obj) \ (PyInstance_Check(obj) \ ? PyObject_HasAttrString(obj, "__float__") \ : (obj->ob_type->tp_as_number != NULL && \ obj->ob_type->tp_as_number->nb_float != NULL)) /* --- Text macros -------------------------------------------------------- */ /* Check a given text slice and apply the usual rules for negative indices */ #define Py_CheckBufferSlice(textlen,start,stop) \ Py_CheckSequenceSlice(textlen,start,stop) /* Dito for string objects */ #define Py_CheckStringSlice(textobj,start,stop) \ Py_CheckSequenceSlice(PyString_GET_SIZE(textobj),start,stop) /* For b/w compatibility */ #define Py_CheckSlice(textobj,start,stop) \ Py_CheckStringSlice(textobj,start,stop) /* Dito for Unicode objects */ #ifdef PyUnicode_GET_SIZE # define Py_CheckUnicodeSlice(unicode,start,stop) \ Py_CheckSequenceSlice(PyUnicode_GET_SIZE(unicode),start,stop) #endif /* This assumes that fixed is a constant char array; the strcmp function is only called in case the attribute name length exceeds 10 characters and the first 10 characters match; optimizing compilers should eliminate any unused parts of this comparison automatically. Note: The latest egcs compiler warns about the subscripts being out of range for shorter fixed strings; since no code is generated for those comparisons, these warning can safely be ignored. Still, they are annoying. See the Py_StringsCompareEqual() macro below for a way to work around this. */ #define Py_StringsCompareEqualEx(var,fixed,fixedsize) \ (var[0] == fixed[0] && \ (fixed[0] == 0 || \ (fixedsize >= 1 && (var[1] == fixed[1] && \ (fixed[1] == 0 || \ (fixedsize >= 2 && (var[2] == fixed[2] && \ (fixed[2] == 0 || \ (fixedsize >= 3 && (var[3] == fixed[3] && \ (fixed[3] == 0 || \ (fixedsize >= 4 && (var[4] == fixed[4] && \ (fixed[4] == 0 || \ (fixedsize >= 5 && (var[5] == fixed[5] && \ (fixed[5] == 0 || \ (fixedsize >= 6 && (var[6] == fixed[6] && \ (fixed[6] == 0 || \ (fixedsize >= 7 && (var[7] == fixed[7] && \ (fixed[7] == 0 || \ (fixedsize >= 8 && (var[8] == fixed[8] && \ (fixed[8] == 0 || \ (fixedsize >= 9 && (var[9] == fixed[9] && \ (fixed[9] == 0 || \ (fixedsize >= 10 && \ strcmp(&var[10],&fixed[10]) == 0 \ )))))))))))))))))))))))))))))) /* This assumes that fixed is a constant char array. The appended string snippet is to shut up the warnings produced by newer egcs/gcc compilers about offsets being outside bounds. Note that some compilers do the inlining by themselves or don't like the above trick (OpenVMS is one such platform). For these we simply use the standard way. */ #ifndef __VMS # define Py_StringsCompareEqual(var,fixed) \ Py_StringsCompareEqualEx(var,fixed"\0\0\0\0\0\0\0\0\0\0",sizeof(fixed)) #else # define Py_StringsCompareEqual(var,fixed) (strcmp(var, fixed) == 0) #endif /* Fast character set member check; set must be a "static unsigned *char set" array of exactly 32 bytes length generated with TextTools.set() */ #define Py_CharInSet(chr,set) \ (((unsigned char)(set)[(unsigned char)(chr) >> 3] & \ (1 << ((unsigned char)(chr) & 7))) != 0) /* --- Macros for getattr ------------------------------------------------- */ /* Compares var to name and returns 1 iff they match. This assumes that name is a constant char array. */ #define Py_WantAttr(var,name) Py_StringsCompareEqual(var,name) /* --- Module init helpers ------------------------------------------------ */ /* Helper for startup type object initialization */ #define PyType_Init(x) \ { \ x.ob_type = &PyType_Type; \ Py_Assert(x.tp_basicsize >= (int)sizeof(PyObject), \ PyExc_SystemError, \ "Internal error: tp_basicsize of "#x" too small");\ if (PyType_Ready(&x) < 0) \ goto onError; \ } /* Error reporting for module init functions */ #define Py_ReportModuleInitError(modname) { \ PyObject *exc_type, *exc_value, *exc_tb; \ PyObject *str_type, *str_value; \ \ /* Fetch error objects and convert them to strings */ \ PyErr_Fetch(&exc_type, &exc_value, &exc_tb); \ if (exc_type && exc_value) { \ str_type = PyObject_Str(exc_type); \ str_value = PyObject_Str(exc_value); \ } \ else { \ str_type = NULL; \ str_value = NULL; \ } \ /* Try to format a more informative error message using the \ original error */ \ if (str_type && str_value && \ PyString_Check(str_type) && PyString_Check(str_value)) \ PyErr_Format( \ PyExc_ImportError, \ "initialization of module "modname" failed " \ "(%s:%s)", \ PyString_AS_STRING(str_type), \ PyString_AS_STRING(str_value)); \ else \ PyErr_SetString( \ PyExc_ImportError, \ "initialization of module "modname" failed"); \ Py_XDECREF(str_type); \ Py_XDECREF(str_value); \ Py_XDECREF(exc_type); \ Py_XDECREF(exc_value); \ Py_XDECREF(exc_tb); \ } /* --- SWIG addons -------------------------------------------------------- */ /* Throw this error after having set the correct Python exception using e.g. PyErr_SetString(); */ #define mxSWIGError "mxSWIGError" /* EOF */ #endif egenix-mx-base-3.2.7/mx/UID/mxUID/mxUID.c0000664000175000017500000004423512251400412017376 0ustar lemburglemburg/* mxUID -- An UID datatype Copyright (c) 1998-2000, Marc-Andre Lemburg; mailto:mal@lemburg.com Copyright (c) 2000-2013, eGenix.com Software GmbH; mailto:info@egenix.com See the documentation for further copyright information or contact the author (mailto:mal@lemburg.com). */ /* Debug defines: */ /*#define MAL_MEM_DEBUG*/ /*#define MAL_DEBUG*/ /*#define MAL_REF_DEBUG*/ /* Logging file used by debugging facility */ #ifndef MAL_DEBUG_OUTPUTFILE # define MAL_DEBUG_OUTPUTFILE "mxUID.log" #endif /* We want all our symbols to be exported */ #define MX_BUILDING_MXUID /* Mark the module as Py_ssize_t clean. */ #define PY_SSIZE_T_CLEAN 1 /* Setup mxstdlib memory management */ #if 1 # define MAL_USE_PYMALLOC #else # define MAL_USE_C_MALLOC #endif #include "mx.h" #include "mxUID.h" #include #include /* Version number: Major.Minor.Patchlevel */ #define MXUID_VERSION "3.2.7" /* Additional includes needed for mxUID_GetCurrentTime() API */ # if defined(HAVE_SYS_TIME_H) && defined(TIME_WITH_SYS_TIME) # include # include # else # include # endif # ifdef HAVE_UNISTD_H # include # endif /* Define this to have the module use a free list for UIDs */ #define MXUID_FREELIST /* Define this to enable the speedup in mxUID_SchemeUsesRelativePaths() that uses hard-coded values for the uses_relative part of the scheme dict entries in mxUID_SchemeDict below. Saves a dictionary lookup for every join. */ #define HARDCODE_SCHEMES_USES_RELATIVE /* --- module doc-string -------------------------------------------------- */ static char *Module_docstring = MXUID_MODULE" -- An UID datatype.\n\n" "Version "MXUID_VERSION"\n\n" "Copyright (c) 1998-2000, Marc-Andre Lemburg; mailto:mal@lemburg.com\n" "Copyright (c) 2000-2013, eGenix.com Software GmbH; mailto:info@egenix.com\n\n" " All Rights Reserved\n\n" "See the documentation for further information on copyrights,\n" "or contact the author." ; /* --- module globals ----------------------------------------------------- */ static PyObject *mxUID_Error; /* Error Exception object */ static unsigned int mxUID_IDCounter; /* ID Counter (20 bit) */ static unsigned int mxUID_HostID; /* Host ID (16 bit) */ static unsigned int mxUID_ProcessID; /* Process ID (16 bit) */ /* Flag telling us whether the module was initialized or not. */ static int mxUID_Initialized = 0; /* --- forward declarations ----------------------------------------------- */ /* --- internal macros ---------------------------------------------------- */ /* --- module helpers ----------------------------------------------------- */ /* Create an exception object, insert it into the module dictionary under the given name and return the object pointer; this is NULL in case an error occurred. base can be given to indicate the base object to be used by the exception object. It should be NULL otherwise */ static PyObject *insexc(PyObject *moddict, char *name, PyObject *base) { PyObject *v; char fullname[256]; char *modname; char *dot; v = PyDict_GetItemString(moddict, "__name__"); if (v == NULL) modname = NULL; else modname = PyString_AsString(v); if (modname == NULL) { PyErr_Clear(); modname = MXUID_MODULE; } /* The symbols from this extension are imported into mx.. We trim the name to not confuse the user with an overly long package path. */ strcpy(fullname, modname); dot = strchr(fullname, '.'); if (dot) dot = strchr(dot+1, '.'); if (dot) strcpy(dot+1, name); else sprintf(fullname, "%s.%s", modname, name); v = PyErr_NewException(fullname, base, NULL); if (v == NULL) return NULL; if (PyDict_SetItemString(moddict,name,v)) return NULL; return v; } #if 0 /* Helper for adding integer constants. Check for errors with PyErr_Occurred() */ static void insint(PyObject *dict, char *name, int value) { PyObject *v = PyInt_FromLong((long)value); PyDict_SetItemString(dict, name, v); Py_XDECREF(v); } #endif #ifdef Py_NEWSTYLENUMBER static PyObject *notimplemented1(PyObject *v) { Py_Error(PyExc_TypeError, "operation not implemented"); onError: return NULL; } static PyObject *notimplemented2(PyObject *v, PyObject *w) { Py_Error(PyExc_TypeError, "operation not implemented"); onError: return NULL; } static PyObject *notimplemented3(PyObject *u, PyObject *v, PyObject *w) { Py_Error(PyExc_TypeError, "operation not implemented"); onError: return NULL; } #endif /* --- internal functions --- */ static unsigned int mxUID_CRC32(char *str, Py_ssize_t len) { Py_ssize_t i,j; register unsigned char *s = (unsigned char *)str; register int x; register int y; x = 0; y = 0; for (i = 0, j = len + 1; i < len; i++,j--) { register unsigned char c = s[i]; x += c; x &= 0xFFFF; y += (j & 0xFFFF) * c; y &= 0xFFFF; } return (unsigned int)(x + (y<<16)); } static unsigned short mxUID_CRC16(char *str, Py_ssize_t len) { Py_ssize_t i,j; register unsigned char *s = (unsigned char *)str; register int x; register int y; x = 0; y = 0; for (i = 0, j = len + 1; i < len; i++,j--) { register unsigned char c = s[i]; x += c; x &= 0xFF; y += (j & 0xFFFF) * c; y &= 0xFF; } return (unsigned short)(x + (y<<8)); } /* Folds a string in with length in_len into a string out having length out_len. The output string is zero terminated; its buffer must have size out_len + 1. XXX This functions doesn't really do what it's supposed to... better not rely on it's output ! */ static void mxUID_Fold(char *in_str, Py_ssize_t in_len, char *out_str, Py_ssize_t out_len) { Py_ssize_t chunksize; register unsigned char *in = (unsigned char *)in_str; register unsigned char *out = (unsigned char *)out_str; /* First pass */ chunksize = min(in_len, out_len); memcpy(out, in, chunksize); if (chunksize < out_len) memset(out + chunksize, 0, out_len - chunksize); in += chunksize; in_len -= chunksize; /* Next passes */ while (in_len > 0) { register Py_ssize_t i; chunksize = min(in_len, out_len); for (i = 0; i < chunksize; i++) out[i] ^= in[i]; in += chunksize; in_len -= chunksize; } /* Zero terminate */ out[out_len] = '\0'; } /* Fold a long integer to 16 bits of data */ static unsigned short mxUID_FoldInteger(long value) { unsigned short result = 0; Py_ssize_t i; for (i = 0; i < sizeof(value) / 2; i++) { result ^= value & 0xFFFF; value >>= 16; } return result; } /* Apply a one-time pad to a data string. The data string should only use lowercase HEX characters (all other characters are passed through unchanged). */ static int mxUID_OneTimePad(unsigned char *data, unsigned char *out, Py_ssize_t data_len, unsigned char *otp, Py_ssize_t otp_len) { register Py_ssize_t i, j; static char charbase[] = "0123456789abcdef"; if (otp_len <= 0 || otp == NULL) { memcpy(out, data, data_len); return 0; } for (i = 0, j = 0; i < data_len; i++) { register unsigned char c = data[i]; register unsigned char x = otp[j]; if (c >= '0' && c <= '9') c = c - '0'; else if (c >= 'a' && c <= 'f') c = c - 'a' + 10; #if 0 else if (c >= 'A' && c <= 'F') c = c - 'A' + 10; #endif else { out[i] = c; goto next; } out[i] = charbase[(c ^ x ^ (x >> 4)) & 0x0F]; next: DPRINTF("i=%i, j=%i, data[i]='%c', ot[j]='%c', c=%i, x=%i -> out[i]='%c'\n", i, j, data[i], otp[j], c, x, out[i]); if (++j >= otp_len) j = 0; } return 0; } /* Verify an unencrypted UID string uid with length uid_len using the embedded CRC-16 value. If the UID string was generated using a code string, this must be given too. Otherwise, NULL may be used. */ static int mxUID_Verify(char *uid, Py_ssize_t uid_len, char *code) { int crc16; int value = -1; if (uid_len < 32) return 0; crc16 = (int)mxUID_CRC16(uid, uid_len - 4); if (sscanf((char *)(uid + uid_len - 4), "%x", &value) <= 0) return 0; DPRINTF("crc=%i, value=%i\n", crc16, value); if (crc16 != value) return 0; if (code) { Py_ssize_t code_len = strlen(code); if (uid_len != 32 + code_len) return 0; if (code_len == 0) return 1; return (memcmp(code, uid + 28, strlen(code)) == 0); } else if (uid_len != 32) return 0; return 1; } /* Returns the current time in Unix ticks. The function tries to use the gettimeofday() API in BSD systems and falls back to time() for all others. -1.0 is returned in case of an error. (Taken from mxDateTime.c.) */ static double mxUID_GetCurrentTime(void) { #ifdef HAVE_GETTIMEOFDAY struct timeval tv; # ifdef GETTIMEOFDAY_NO_TZ if (!gettimeofday(&tv)) # else if (!gettimeofday(&tv, 0)) # endif return ((double)tv.tv_sec + (double)tv.tv_usec * 1e-6); else return -1.0; #else time_t ticks; time(&ticks); return (double) ticks; #endif } /* --- C API --------------------------------------------------------------- */ /* Build a new UID string for object with address id. code is optionally included in UID if given. It may be NULL. timestamp should be a double indicating Unix ticks, or -1 to have the API use the current time. The output buffer uid must have room for at least 512 bytes. uid_len is set to the uid data length. It must be preset to the buffer's size. Returns the Python string object on success, NULL on error. */ static PyObject *mxUID_New(void *obj, char *code, double timestamp) { unsigned int t_hi, t_lo, id; Py_ssize_t len; int crc16; char uid[256]; /* Build UID */ if (code) { Py_Assert(strlen(code) < 100, PyExc_ValueError, "len(code) must be <100"); } else code = ""; /* For the object id simply take the address and fold into 16 bits */ id = mxUID_FoldInteger((long)obj); /* Build timestamp */ if (timestamp == -1) timestamp = mxUID_GetCurrentTime(); if (timestamp >= 0) { timestamp *= 97.5; t_hi = (unsigned int)(timestamp / 4294967296.0); t_lo = (unsigned int)(timestamp - t_hi * 4294967296.0); Py_Assert(t_hi <= 0xFF, PyExc_ValueError, "timestamp value too large"); } else Py_Error(PyExc_ValueError, "timestamp must be positive"); /* Format the UID string. Also see mxUID_Verify() and mangle() demangle() in UID.py. */ len = sprintf(uid, "%06x" /* 24-bit counter */ "%02x%08x" /* 40-bit timestamp */ "%04x" /* 16-bit pid */ "%04x" /* 16-bit hostid */ "%04x" /* id(v) */ "%.100s" /* optional code */ , mxUID_IDCounter & 0xFFFFFF, t_hi,t_lo, mxUID_ProcessID, mxUID_HostID, id, code); Py_Assert(len < sizeof(uid) - 5, PyExc_SystemError, "internal error in mxUID_UID: buffer overflow"); /* Increment counter; overflow is intended */ mxUID_IDCounter += 1000003; /* Add 16 bit CRC value in HEX */ crc16 = (int)mxUID_CRC16(uid, len); len += sprintf(&uid[len], "%04x", crc16); return PyString_FromStringAndSize(uid, len); onError: return NULL; } /* Extracts the ticks timestamp from an unencrypted UID string uid */ static double mxUID_ExtractTimestamp(unsigned char *uid) { int i; double ticks = 0.0, base = 1.0; for (i = 15; i >= 6; i--) { char c = uid[i]; int value; if (c >= '0' && c <= '9') value = c - '0'; else if (c >= 'a' && c <= 'f') value = c - 'a' + 10; else if (c >= 'A' && c <= 'F') value = c - 'A' + 10; else /* Hmm, a buggy character: ignore... */ value = 0; /*printf("i=%i s[i]=%c value=%i, ticks=%f, base=%f\n", i,c,value,ticks,base);*/ if (value) ticks += base * value; base *= 16.0; } return ticks / 97.5; } /* --- Python API ---------------------------------------------------------- */ Py_C_Function_WithKeywords( mxUID_UID, "UID(object=None, code='', timestamp=None)\n\n" "Create a new UID string for object. code is optionally\n" "included in the UID. timestamp must be a ticks float and\n" "defaults to the current time." ) { PyObject *object = Py_None; char *code = NULL; double timestamp = -1; Py_KeywordsGet3Args("|Osd", object, code, timestamp); /* Build UID string */ return mxUID_New(object, code, timestamp); onError: return NULL; } Py_C_Function_WithKeywords( mxUID_setids, "setids(hostid, pid, counter)\n\n" "Sets the IDs to be used by the module. The function\n" "can take keyword arguments in case only some values\n" "need to be changed. All others are then left untouched." ) { unsigned int hostid=mxUID_HostID; unsigned int pid=mxUID_ProcessID; unsigned int counter=mxUID_IDCounter; Py_KeywordsGet3Args("|iii", hostid, pid, counter); mxUID_IDCounter = counter; /* Map to 16 bits */ mxUID_HostID = mxUID_FoldInteger(hostid); mxUID_ProcessID = mxUID_FoldInteger(pid); Py_ReturnNone(); onError: return NULL; } Py_C_Function( mxUID_getids, "getids()\n\n" "Returns a tuple (hostid16, pid16, counter) of the currently\n" "active values used for UID generation." ) { Py_NoArgsCheck(); Py_Return3Args("(iii)", mxUID_HostID, mxUID_ProcessID, mxUID_IDCounter); onError: return NULL; } Py_C_Function( mxUID_timestamp, "timestamp(uid)\n\n" "Returns the timestamp encoded in the UID." ) { unsigned char *s; Py_ssize_t len; Py_Get2Args("s#", s, len); Py_Assert(len > 10 && len < 256, PyExc_ValueError, "need a UID string"); return PyFloat_FromDouble(mxUID_ExtractTimestamp(s)); onError: return NULL; } Py_C_Function( mxUID_verify, "verify(uid[, code])\n\n" "Verifies the given UID string and returns 0/1 depending\n" "on whether the UID matches the mxUID layout. code must be\n" "given in case it was used to create the UID." ) { char *s; Py_ssize_t len; char *code = NULL; Py_Get3Args("s#|s", s, len, code); Py_Assert(len > 10 && len < 256, PyExc_ValueError, "need a UID string"); return PyInt_FromLong(mxUID_Verify(s, len, code)); onError: return NULL; } Py_C_Function( mxUID_fold, "fold(string[,size=8])\n\n" "Returns a new string with size bytes, which is deduced\n" "from string by XOR folding it." ) { char *s; Py_ssize_t size = 8; Py_ssize_t len; PyObject *v = NULL; Py_Get3Args("s#|"Py_SSIZE_T_PARSERMARKER, s, len, size); v = PyString_FromStringAndSize(NULL,size); if (!v) goto onError; mxUID_Fold(s, len, PyString_AS_STRING(v), size); return v; onError: Py_XDECREF(v); return NULL; } Py_C_Function( mxUID_otp, "otp(data, pad)\n\n" "Returns a one-time padded version of data using\n" "pad as basis. This function is idempotent." ) { unsigned char *data; Py_ssize_t data_len; unsigned char *otp; Py_ssize_t otp_len; PyObject *v = NULL; Py_Get4Args("s#s#", data, data_len, otp, otp_len); v = PyString_FromStringAndSize(NULL, data_len); if (!v) goto onError; mxUID_OneTimePad(data, (unsigned char *)PyString_AS_STRING(v), data_len, otp, otp_len); return v; onError: Py_XDECREF(v); return NULL; } Py_C_Function( mxUID_crc, "crc(string[,bits=32])\n\n" "Returns a CRC integer calculated from string having the\n" "given number of bits (16 or 32)." ) { int bits = 32; Py_ssize_t len; long crc; char *s; Py_Get3Args("s#|i", s, len, bits); if (bits == 32) crc = (long)mxUID_CRC32(s,len); else if (bits == 16) crc = (long)mxUID_CRC16(s,len); else Py_Error(PyExc_ValueError, "only 16 or 32 bit CRCs are supported"); return PyInt_FromLong((long)crc); onError: return NULL; } /* --- module init --------------------------------------------------------- */ /* Python Method Table */ static PyMethodDef Module_methods[] = { Py_MethodWithKeywordsListEntry("UID",mxUID_UID), Py_MethodListEntry("timestamp",mxUID_timestamp), Py_MethodListEntry("verify",mxUID_verify), Py_MethodListEntry("crc",mxUID_crc), Py_MethodListEntry("fold",mxUID_fold), Py_MethodListEntry("otp",mxUID_otp), Py_MethodWithKeywordsListEntry("setids",mxUID_setids), Py_MethodListEntryNoArgs("getids",mxUID_getids), {NULL,NULL} /* end of list */ }; /* C API table */ static mxUIDModule_APIObject mxUIDModuleAPI = { mxUID_New, mxUID_ExtractTimestamp, }; /* Cleanup function */ static void mxUIDModule_Cleanup(void) { /* Reset mxUID_Initialized flag */ mxUID_Initialized = 0; } /* create PyMethodObjects and register them in the module's dict */ MX_EXPORT(void) initmxUID(void) { PyObject *module, *moddict, *api; if (mxUID_Initialized) Py_Error(PyExc_SystemError, "can't initialize "MXUID_MODULE" more than once"); /* Create module */ module = Py_InitModule4(MXUID_MODULE, /* Module name */ Module_methods, /* Method list */ Module_docstring, /* Module doc-string */ (PyObject *)NULL, /* always pass this as *self */ PYTHON_API_VERSION); /* API Version */ if (module == NULL) goto onError; /* Add some constants to the module's dict */ moddict = PyModule_GetDict(module); PyDict_SetItemString(moddict, "__version__", PyString_FromString(MXUID_VERSION)); if (!(mxUID_Error = insexc(moddict,"Error",PyExc_StandardError))) goto onError; /* Register cleanup function */ if (Py_AtExit(mxUIDModule_Cleanup)) { /* XXX what to do if we can't register that function ??? */ DPRINTF("* Failed to register mxUID cleanup function\n"); } /* Export C API */ api = PyCObject_FromVoidPtr((void *)&mxUIDModuleAPI, NULL); if (api == NULL) goto onError; PyDict_SetItemString(moddict,MXUID_MODULE"API",api); Py_DECREF(api); /* We are now initialized */ mxUID_Initialized = 1; onError: /* Check for errors and report them */ if (PyErr_Occurred()) Py_ReportModuleInitError(MXUID_MODULE); return; } egenix-mx-base-3.2.7/mx/UID/mxUID/mxUID.def0000664000175000017500000000002307015545606017716 0ustar lemburglemburgEXPORTS initmxUID egenix-mx-base-3.2.7/mx/UID/mxUID/mxUID.h0000664000175000017500000000570212133021467017407 0ustar lemburglemburg#ifndef MXUID_H #define MXUID_H /* mxUID -- A UID datatype. Copyright (c) 2000, Marc-Andre Lemburg; mailto:mal@lemburg.com Copyright (c) 2000-2013, eGenix.com Software GmbH; mailto:info@egenix.com See the documentation for further copyright information or contact the author (mailto:mal@lemburg.com). */ /* The extension's name; must be the same as the init function's suffix */ #define MXUID_MODULE "mxUID" /* Name of the package or module that provides the extensions C API. If the extension is used inside a package, provide the complete import path. */ #define MXUID_API_MODULE "mx.UID" /* --- No servicable parts below this line ----------------------*/ /* Include generic mx extension header file */ #include "mxh.h" #ifdef MX_BUILDING_MXUID # define MXUID_EXTERNALIZE MX_EXPORT #else # define MXUID_EXTERNALIZE MX_IMPORT #endif #ifdef __cplusplus extern "C" { #endif /* --- C API ----------------------------------------------------*/ /* C API for usage by other Python modules */ typedef struct { /* Build a new UID string for object with address id. code is optionally included in UID if given. It may be NULL. timestamp should be a double indicating Unix ticks, or 0 to have the API use the current time. The output buffer uid must have room for at least 512 bytes. uid_len is set to the uid data length. It must be preset to the buffer's size. Returns the Python string object on success, NULL on error. */ PyObject *(*UID)(void *obj, char *code, double timestamp); /* Extracts the ticks timestamp from an UID string uid */ double (*timestamp)(unsigned char *uid); } mxUIDModule_APIObject; #ifndef MX_BUILDING_MXUID /* Interfacestructure to C API for other modules. Call mxUID_ImportModuleAPI() to initialize this structure. After that usage is simple: PyObject *v; v = mxUID.UID("Marc"); if (!v) goto onError; ... */ static mxUIDModule_APIObject mxUID; /* You *must* call this before using any of the functions in mxUID and check its outcome; otherwise all accesses will result in a segfault. Returns 0 on success. */ #ifndef DPRINTF # define DPRINTF if (0) printf #endif static int mxUID_ImportModuleAndAPI(void) { PyObject *mod = 0, *v = 0; void *api; DPRINTF("Importing the %s C API...\n",MXUID_API_MODULE); mod = PyImport_ImportModule(MXUID_API_MODULE); if (mod == NULL) goto onError; DPRINTF(" module found\n"); v = PyObject_GetAttrString(mod,MXUID_MODULE"API"); if (v == NULL) goto onError; Py_CLEAR(mod); DPRINTF(" API object found\n"); api = PyCObject_AsVoidPtr(v); if (api == NULL) goto onError; Py_CLEAR(v); memcpy(&mxUID,api,sizeof(mxUID)); DPRINTF(" API object initialized.\n"); return 0; onError: DPRINTF(" not found.\n"); Py_XDECREF(mod); Py_XDECREF(v); return -1; } #endif /* EOF */ #ifdef __cplusplus } #endif #endif egenix-mx-base-3.2.7/mx/UID/mxUID/mxh.h0000664000175000017500000000320212133021412017174 0ustar lemburglemburg#ifndef MXH_H #define MXH_H /* mxh.h -- Generic header file for all mx Extenstions This file should be included by every mx Extension header file and the C file. Copyright (c) 2000, Marc-Andre Lemburg; mailto:mal@lemburg.com Copyright (c) 2000-2013, eGenix.com Software GmbH; mailto:info@egenix.com See the documentation for further copyright information or contact the author. */ /* Macros to control export and import of DLL symbols. We use our own definitions since Python's don't allow specifying both imported and exported symbols at the same time; these defines haven't been thoroughly tested yet, patches are most welcome :-) */ /* Macro to "mark" a symbol for DLL export */ #if (defined(_MSC_VER) && _MSC_VER > 850 \ || defined(__MINGW32__) || defined(__CYGWIN) || defined(__BEOS__)) # ifdef __cplusplus # define MX_EXPORT(type) extern "C" type __declspec(dllexport) # else # define MX_EXPORT(type) extern type __declspec(dllexport) # endif #elif defined(__WATCOMC__) # define MX_EXPORT(type) extern type __export #elif defined(__IBMC__) # define MX_EXPORT(type) extern type _Export #else # define MX_EXPORT(type) extern type #endif /* Macro to "mark" a symbol for DLL import */ #if defined(__BORLANDC__) # define MX_IMPORT(type) extern type __import #elif (defined(_MSC_VER) && _MSC_VER > 850 \ || defined(__MINGW32__) || defined(__CYGWIN) || defined(__BEOS__)) # ifdef __cplusplus # define MX_IMPORT(type) extern "C" type __declspec(dllimport) # else # define MX_IMPORT(type) extern type __declspec(dllimport) # endif #else # define MX_IMPORT(type) extern type #endif /* EOF */ #endif egenix-mx-base-3.2.7/mx/UID/mxUID/mxpyapi.h0000664000175000017500000003356612133300665020121 0ustar lemburglemburg#ifndef MXPYAPI_H #define MXPYAPI_H /* mxpyapi.h This header file includes some new APIs that are not available in older API versions, yet are used by the mx-Extensions. Copyright (c) 2000, Marc-Andre Lemburg; mailto:mal@lemburg.com Copyright (c) 2000-2013, eGenix.com Software GmbH; mailto:info@egenix.com */ /* Emulate PY_VERSION_HEX for older Python versions. */ #ifndef PY_VERSION_HEX # if PYTHON_API_VERSION == 1007 # define PY_VERSION_HEX 0x010500F0 # endif # if PYTHON_API_VERSION == 1006 # define PY_VERSION_HEX 0x010400F0 # endif # if PYTHON_API_VERSION < 1006 # define PY_VERSION_HEX 0 # endif #endif #ifdef __cplusplus extern "C" { #endif /* ---------------------------------------------------------------- Python 2.7.4 ---------------------------------------------------------------- */ #if PY_VERSION_HEX >= 0x02070400 && PY_VERSION_HEX < 0x02070500 /* Python 2.7.4 has a bug that causes Py_DECREF() to fail for dictionaries in module cleanup routines. See http://bugs.python.org/issue17703 */ #define mxPy_DECREF_Unsafe_AtExit() 1 #else /* Apply a runtime check */ #define mxPy_DECREF_Unsafe_AtExit() \ (strncmp(Py_GetVersion(), "2.7.4", 5) == 0) #endif /* ---------------------------------------------------------------- Python 2.7 and above: ---------------------------------------------------------------- */ #if PY_VERSION_HEX >= 0x02070000 /* Python 2.7 introduces the backported memoryview object */ #define HAVE_PYTHON_MEMORYVIEW #else #endif /* ---------------------------------------------------------------- Python 2.6 and above: ---------------------------------------------------------------- */ #if PY_VERSION_HEX >= 0x02060000 /* Python 2.6 introduces new buffer interface slots based on the Py_buffer interface. */ #define HAVE_PYTHON_PY_BUFFER #else #endif /* ---------------------------------------------------------------- Python 2.5 and above: ---------------------------------------------------------------- */ #if PY_VERSION_HEX >= 0x02050000 /* Parser marker */ #define Py_SSIZE_T_PARSERMARKER "n" #else /* Python 2.5 introduced a new type for index integers which is not available in earlier versions. Unfortunately, the new type has 64 bits on 64-bit architectures like AMD64, whereas integers still have 32 bits, which causes problems with output parameters. Along with the new type a few type slots were changed and a new parser marker introduced. */ #define Py_ssize_t int /* Parser marker */ #define Py_SSIZE_T_PARSERMARKER "i" /* Integer APIs */ #define PyInt_FromSize_t(x) PyInt_FromLong((long)(x)) #define PyInt_FromSsize_t(x) PyInt_FromLong((long)(x)) #define PyInt_AsSsize_t(x) ((Py_ssize_t)PyInt_AsLong(x)) #endif /* ---------------------------------------------------------------- Python 2.4 and above: ---------------------------------------------------------------- */ #if PY_VERSION_HEX >= 0x02040000 #else #endif /* ---------------------------------------------------------------- Python 2.3 and above: ---------------------------------------------------------------- */ #if PY_VERSION_HEX >= 0x02030000 #else /* These were introduced in Python 2.3: */ # define PY_LONG_LONG LONG_LONG /* Boolean APIs */ #define PyBool_FromLong(x) PyInt_FromLong((long)(x)?1:0) #endif /* ---------------------------------------------------------------- Python 2.2 and above: ---------------------------------------------------------------- */ #if PY_VERSION_HEX >= 0x02020000 # define HAVE_SUBCLASSABLE_TYPES 1 # define HAVE_INTERPRETER_DLOPENFLAGS 1 #else /* These were introduced in Python 2.2: */ # define PyString_CheckExact PyString_Check # define PyInt_CheckExact PyInt_Check # define PyFloat_CheckExact PyFloat_Check # define PyLong_CheckExact PyLong_Check # define PyExc_StopIteration PyExc_IndexError /* Not needed in Python 2.1 and below, so simply ignore the API */ # define PyType_Ready(x) #endif /* ---------------------------------------------------------------- Python 1.6 and 2.0 only: ---------------------------------------------------------------- */ /* Disabled: we don't support Python 1.6 and don't have a need for this API in any of the mx Tools (yet). */ #if 0 #if PY_VERSION_HEX >= 0x01060000 && PY_VERSION_HEX < 0x02010000 static PyObject * PyObject_Unicode(PyObject *v) { PyObject *res; if (v == NULL) res = PyString_FromString(""); else if (PyUnicode_Check(v)) { Py_INCREF(v); return v; } else if (PyString_Check(v)) res = v; else if (v->ob_type->tp_str != NULL) res = (*v->ob_type->tp_str)(v); else { PyObject *func; if (!PyInstance_Check(v) || (func = PyObject_GetAttrString(v, "__str__")) == NULL) { PyErr_Clear(); res = PyObject_Repr(v); } else { res = PyEval_CallObject(func, (PyObject *)NULL); Py_DECREF(func); } } if (res == NULL) return NULL; if (!PyUnicode_Check(res)) { PyObject* str; str = PyUnicode_FromObject(res); Py_DECREF(res); if (str) res = str; else return NULL; } return res; } #endif #endif /* ---------------------------------------------------------------- Python 2.0 alpha + betas: ---------------------------------------------------------------- */ #if PY_VERSION_HEX >= 0x02000000 && PY_VERSION_HEX < 0x020000F0 # if defined(PyBuffer_Check) && !defined(HAVE_PYTHON_BUFFEROBJECTS) # define HAVE_PYTHON_BUFFEROBJECTS # endif #ifndef Py_PROTO # define Py_PROTO(args) args #endif #endif /* ---------------------------------------------------------------- Python 1.6 and later: ---------------------------------------------------------------- */ #if PY_VERSION_HEX >= 0x01060000 #if defined(PyUnicode_Check) && !defined(HAVE_UNICODE) # define HAVE_UNICODE #endif #endif #if PY_VERSION_HEX >= 0x02020000 #if defined(HAVE_UNICODE) && !defined(Py_USING_UNICODE) # undef HAVE_UNICODE #endif #endif #ifndef HAVE_UNICODE # undef PyUnicode_Check # define PyUnicode_Check(obj) 0 #endif /* ---------------------------------------------------------------- Python < 1.6: ---------------------------------------------------------------- */ #if PY_VERSION_HEX < 0x01060000 #if !defined(PyObject_DEL) # define PyObject_DEL(x) free(x) # define PyObject_Del(x) free(x) #endif #endif /* ---------------------------------------------------------------- Python >= 1.5.2: ---------------------------------------------------------------- */ #if PY_VERSION_HEX >= 0x010502F0 # if defined(PyBuffer_Check) && !defined(HAVE_PYTHON_BUFFEROBJECTS) # define HAVE_PYTHON_BUFFEROBJECTS # endif #endif /* ---------------------------------------------------------------- Python >= 1.5.2 and prior to 2.0a1 ---------------------------------------------------------------- */ #if PY_VERSION_HEX >= 0x010502F0 && PY_VERSION_HEX < 0x02000000 /* Takes an arbitrary object which must support the (character, single segment) buffer interface and returns a pointer to a read-only memory location useable as character based input for subsequent processing. buffer and buffer_len are only set in case no error occurrs. Otherwise, -1 is returned and an exception set. */ static int PyObject_AsCharBuffer(PyObject *obj, const char **buffer, int *buffer_len) { PyBufferProcs *pb = obj->ob_type->tp_as_buffer; const char *pp; int len; if ( pb == NULL || pb->bf_getcharbuffer == NULL || pb->bf_getsegcount == NULL ) { PyErr_SetString(PyExc_TypeError, "expected a character buffer object"); goto onError; } if ( (*pb->bf_getsegcount)(obj,NULL) != 1 ) { PyErr_SetString(PyExc_TypeError, "expected a single-segment buffer object"); goto onError; } len = (*pb->bf_getcharbuffer)(obj,0,&pp); if (len < 0) goto onError; *buffer = pp; *buffer_len = len; return 0; onError: return -1; } /* Same as PyObject_AsCharBuffer() except that this API expects (readable, single segment) buffer interface and returns a pointer to a read-only memory location which can contain arbitrary data. buffer and buffer_len are only set in case no error occurrs. Otherwise, -1 is returned and an exception set. */ static int PyObject_AsReadBuffer(PyObject *obj, const void **buffer, int *buffer_len) { PyBufferProcs *pb = obj->ob_type->tp_as_buffer; void *pp; int len; if ( pb == NULL || pb->bf_getreadbuffer == NULL || pb->bf_getsegcount == NULL ) { PyErr_SetString(PyExc_TypeError, "expected a readable buffer object"); goto onError; } if ( (*pb->bf_getsegcount)(obj,NULL) != 1 ) { PyErr_SetString(PyExc_TypeError, "expected a single-segment buffer object"); goto onError; } len = (*pb->bf_getreadbuffer)(obj,0,&pp); if (len < 0) goto onError; *buffer = pp; *buffer_len = len; return 0; onError: return -1; } /* Takes an arbitrary object which must support the (writeable, single segment) buffer interface and returns a pointer to a writeable memory location in buffer of size buffer_len. buffer and buffer_len are only set in case no error occurrs. Otherwise, -1 is returned and an exception set. */ static int PyObject_AsWriteBuffer(PyObject *obj, void **buffer, int *buffer_len) { PyBufferProcs *pb = obj->ob_type->tp_as_buffer; void*pp; int len; if ( pb == NULL || pb->bf_getwritebuffer == NULL || pb->bf_getsegcount == NULL ) { PyErr_SetString(PyExc_TypeError, "expected a writeable buffer object"); goto onError; } if ( (*pb->bf_getsegcount)(obj,NULL) != 1 ) { PyErr_SetString(PyExc_TypeError, "expected a single-segment buffer object"); goto onError; } len = (*pb->bf_getwritebuffer)(obj,0,&pp); if (len < 0) goto onError; *buffer = pp; *buffer_len = len; return 0; onError: return -1; } #endif /* Python Version in [1.5.2b2, 2.0) */ /* ---------------------------------------------------------------- Python 1.5.2b1 and older: ---------------------------------------------------------------- */ #if PY_VERSION_HEX <= 0x010502B1 /* These are missing from PC/python_nt.def and thus didn't get included in python1.5.lib on Windows platforms. */ #ifdef MS_WIN32 # define PyString_InternInPlace(x) # define PyString_InternFromString(x) PyString_FromString(x) #endif #endif /* Python Version <= 1.5.2b1 */ /* ---------------------------------------------------------------- Python 1.5.2a2 and older: ---------------------------------------------------------------- */ #if PY_VERSION_HEX <= 0x010502A2 extern long PyOS_strtol Py_PROTO((const char *, char **, int)); #endif /* Python Version <= 1.5.2a2 */ /* ---------------------------------------------------------------- Python 1.5.2a1 and older: ---------------------------------------------------------------- */ #if PY_VERSION_HEX <= 0x010502A1 #ifndef PyList_SET_ITEM # define PyList_SET_ITEM(l,i,w) PyList_GET_ITEM(l,i) = w #endif #endif /* Python Version < 1.5.2a1 */ /* ---------------------------------------------------------------- Prior to Python 1.5: ---------------------------------------------------------------- */ #if PY_VERSION_HEX < 0x010500F0 /* New in Python1.5: */ # undef PyString_AS_STRING # define PyString_AS_STRING(op) (((PyStringObject *)(op))->ob_sval) # define PyString_GET_SIZE(op) (((PyStringObject *)(op))->ob_size) # define PyTuple_GET_SIZE(op) (((PyTupleObject *)(op))->ob_size) # define PyList_GET_SIZE(op) (((PyListObject *)(op))->ob_size) /* Changed since 1.4 */ # undef PyList_GET_ITEM # define PyList_GET_ITEM(op, i) (((PyListObject *)(op))->ob_item[i]) # undef PyInt_AS_LONG # define PyInt_AS_LONG(op) (((PyIntObject *)(op))->ob_ival) # undef PyFloat_AS_DOUBLE # define PyFloat_AS_DOUBLE(op) (((PyFloatObject *)(op))->ob_fval) /* This function is taken from error.c in Python 1.5... Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, The Netherlands. All Rights Reserved Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation, and that the names of Stichting Mathematisch Centrum or CWI or Corporation for National Research Initiatives or CNRI not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. While CWI is the initial source for this software, a modified version is made available by the Corporation for National Research Initiatives (CNRI) at the Internet address ftp://ftp.python.org. STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifdef HAVE_STDARG_PROTOTYPES PyObject * PyErr_Format(PyObject *exception, const char *format, ...) #else PyObject * PyErr_Format(exception, format, va_alist) PyObject *exception; const char *format; va_dcl #endif { va_list vargs; char buffer[500]; /* Caller is responsible for limiting the format */ #ifdef HAVE_STDARG_PROTOTYPES va_start(vargs, format); #else va_start(vargs); #endif vsprintf(buffer, format, vargs); PyErr_SetString(exception, buffer); return NULL; } /* Python 1.5 uses instances as exceptions, the 1.4 API only knows about strings. */ #define PyErr_NewException(name,base,dict) PyString_FromString(fullname); /* Missing from rename2.h in Python 1.4 */ #ifndef PyVarObject # define PyVarObject varobject #endif #endif /* Python Version < 1.5 */ #ifdef __cplusplus } #endif /* EOF */ #endif egenix-mx-base-3.2.7/mx/UID/mxUID/mxstdlib.h0000664000175000017500000002612712133021413020242 0ustar lemburglemburg#ifndef MXSTDLIB_H #define MXSTDLIB_H /* Standard stuff I use often -- not Python specific Copyright (c) 2000, Marc-Andre Lemburg; mailto:mal@lemburg.com Copyright (c) 2000-2013, eGenix.com Software GmbH; mailto:info@egenix.com See the documentation for further copyright information or contact the author. */ /* Standard includes */ #include #include #include #include #include #include /* Limits */ #ifdef HAVE_LIMITS_H # include #else # ifndef INT_MAX # define INT_MAX 2147483647 # endif # ifndef LONG_MAX # define LONG_MAX INT_MAX # endif #endif /* Disable a few MS VC++ warnings that were introduced in VS 2005, e.g. warning C4996: 'getenv': This function or variable may be unsafe. Consider using _dupenv_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. Note that #define _CRT_SECURE_NO_WARNINGS 1 does not work for some reason. You have to use the #pragma warning() to disable warnings inside a header file. */ #if defined(_MSC_VER) && (_MSC_VER >= 1400) # pragma warning(disable:4996) #endif /* --- My own macros for memory allocation... --------------------------- */ /* Define this macro if the code should use C malloc */ /* #define MAL_USE_C_MALLOC */ /* Define this macro if the code should use Python's pymalloc */ /* #define MAL_USE_PYMALLOC */ /* Define this macro if the code should use pymalloc and uses the cnew()/cnewstruct() macros. This is needed to only enable the helper functions when using those macros in pymalloc mode. */ /* #define MAL_USING_CNEW */ /* Decide which variant to use, if no explicit choice was made: C malloc or pymalloc */ #ifdef MAL_USE_C_MALLOC /* Force use of C malloc */ #elif !defined(MAL_USE_PYMALLOC) && defined (PYTHON_API_VERSION) /* Default to using the Python pymalloc in case we're compiling a Python extension */ # define MAL_USE_PYMALLOC #endif #ifndef MAL_USE_PYMALLOC /* --- Use C malloc for memory allocation --- */ # ifdef MAL_MEM_DEBUG /* Include debug information for tracing memory leaks */ # define newstruct(x) \ (mxDebugPrintf("* malloc for struct "#x" (%s:%i)\n",__FILE__,__LINE__),\ (x *)malloc(sizeof(x))) # define cnewstruct(x) \ (mxDebugPrintf("* calloc for struct "#x" (%s:%i)\n",c,__FILE__,__LINE__),\ (x *)calloc(sizeof(x),1)) # define new(x,c) \ (mxDebugPrintf("* malloc for "#c"=%i '"#x"'s (%s:%i)\n",c,__FILE__,__LINE__),\ (x *)malloc(sizeof(x)*(c))) # define cnew(x,c) \ (mxDebugPrintf("* calloc for "#c"=%i '"#x"'s (%s:%i)\n",c,__FILE__,__LINE__),\ (x *)calloc((c),sizeof(x))) # define resize(var,x,c) \ (mxDebugPrintf("* realloc array "#var" ("#x") at %X to size "#c"=%i (%s:%i)\n",var,c,__FILE__,__LINE__),\ (x *)realloc((void*)(var),sizeof(x)*(c))) # define varresize(var,x,bytes) \ (mxDebugPrintf("* realloc var "#var" ("#x") at %X to %i bytes (%s:%i)\n",var,bytes,__FILE__,__LINE__),\ (x *)realloc((void*)(var),(bytes))) # define free(x) \ (mxDebugPrintf("* freeing "#x" at %X (%s:%i)\n",x,__FILE__,__LINE__),\ free((void*)(x))) # else /* Non-debug versions of the macros */ # define newstruct(x) ((x *)malloc(sizeof(x))) # define cnewstruct(x) ((x *)calloc(sizeof(x),1)) # define new(x,c) ((x *)malloc(sizeof(x)*(c))) # define cnew(x,c) ((x *)calloc((c),sizeof(x))) # define resize(var,x,c) ((x *)realloc((void*)(var),sizeof(x)*(c))) # define varresize(var,x,bytes) ((x *)realloc((void*)(var),(bytes))) # define free(x) (free((void*)(x))) # endif #else /* --- Use Python pymalloc for memory allocation --- */ # ifdef MAL_USING_CNEW /* Helper needed since Python doesn't define a calloc() interface. */ static void *mx_PyObject_CALLOC(register size_t size) { register void *mem; if (size == 0) return NULL; mem = PyObject_MALLOC(size); if (mem) memset(mem, 0, size); return mem; } # endif # ifndef MAL_MEM_DEBUG /* Non-debug versions of the macros */ # define newstruct(x) ((x *)PyObject_MALLOC(sizeof(x))) # ifdef MAL_USING_CNEW # define cnewstruct(x) ((x *)mx_PyObject_CALLOC(sizeof(x))) # endif # define new(x,c) ((x *)PyObject_MALLOC(sizeof(x)*(c))) # ifdef MAL_USING_CNEW # define cnew(x,c) ((x *)mx_PyObject_CALLOC(sizeof(x)*(c))) # endif # define resize(var,x,c) ((x *)PyObject_REALLOC((void*)(var),sizeof(x)*(c))) # define varresize(var,x,bytes) ((x *)PyObject_REALLOC((void*)(var),(bytes))) # define free(x) (PyObject_FREE((void*)(x))) # else /* Debug versions of the macros */ # define newstruct(x) \ (mxDebugPrintf("* malloc for struct "#x" (%s:%i)\n",__FILE__,__LINE__), \ (x *)PyObject_MALLOC(sizeof(x))) # ifdef MAL_USING_CNEW # define cnewstruct(x) \ (mxDebugPrintf("* calloc for struct "#x" (%s:%i)\n",c,__FILE__,__LINE__), \ ((x *)mx_PyObject_CALLOC(sizeof(x)))) # endif # define new(x,c) \ (mxDebugPrintf("* malloc for "#c"=%i '"#x"'s (%s:%i)\n",c,__FILE__,__LINE__), \ ((x *)PyObject_MALLOC(sizeof(x)*(c)))) # ifdef MAL_USING_CNEW # define cnew(x,c) \ (mxDebugPrintf("* calloc for "#c"=%i '"#x"'s (%s:%i)\n",c,__FILE__,__LINE__), \ ((x *)mx_PyObject_CALLOC(sizeof(x)*(c)))) # endif # define resize(var,x,c) \ (mxDebugPrintf("* realloc array "#var" ("#x") at %X to size "#c"=%i (%s:%i)\n",var,c,__FILE__,__LINE__), \ ((x *)PyObject_REALLOC((void*)(var),sizeof(x)*(c)))) # define varresize(var,x,bytes) \ (mxDebugPrintf("* realloc var "#var" ("#x") at %X to %i bytes (%s:%i)\n",var,bytes,__FILE__,__LINE__), \ ((x *)PyObject_REALLOC((void*)(var),(bytes)))) # define free(x) \ (mxDebugPrintf("* freeing "#x" at %X (%s:%i)\n",x,__FILE__,__LINE__), \ (PyObject_FREE((void*)(x)))) # endif #endif /* --- Debugging output ------------------------------------------------- */ /* Use the flag MAL_DEBUG to enable debug processing. The flag MAL_DEBUG_WITH_PYTHON can be used to indicate that the object file will be linked with Python, so we can use Python APIs for the debug processing here. */ #ifdef MAL_DEBUG_WITH_PYTHON # ifndef PYTHON_API_VERSION # error "mx.h must be included when compiling with MAL_DEBUG_WITH_PYTHON" # endif # ifndef MAL_DEBUG # define MAL_DEBUG # endif #else # if defined(PYTHON_API_VERSION) && defined(MAL_DEBUG) # define MAL_DEBUG_WITH_PYTHON # endif #endif /* Indicator for the availability of these interfaces: */ #define HAVE_MAL_DEBUG /* Name of the environment variable defining the log file name to be used: */ #ifndef MAL_DEBUG_OUTPUTFILE_ENV_VARIABLE # define MAL_DEBUG_OUTPUTFILE_ENV_VARIABLE "mxLogFile" #endif /* File name to be used for debug logging (each object file using this facility may set its own logging file) if no environment variable is set: */ #ifndef MAL_DEBUG_OUTPUTFILE # define MAL_DEBUG_OUTPUTFILE "mx.log" #endif /* Name of the environment variable defining the log file prefix to be used (e.g. to direct all log files into a separate directory): */ #ifndef MAL_DEBUG_OUTPUTFILEPREFIX_ENV_VARIABLE # define MAL_DEBUG_OUTPUTFILEPREFIX_ENV_VARIABLE "mxLogFileDir" #endif /* File name prefix to be used for log files, if no environment variable is set: */ #ifndef MAL_DEBUG_OUTPUTFILEPREFIX # define MAL_DEBUG_OUTPUTFILEPREFIX "" #endif /* Log id to be used */ #ifndef MAL_DEBUG_LOGID # define MAL_DEBUG_LOGID "New Log Session" #endif /* Debug printf() API Output is written to a log file or stream. If the output file is not yet open, the function will try to open the file as defined by the environment or the program defines. The file remains open until the program terminates. Subsequent changes to the environment are not taken into account. The output file is deduced in the following way: 1. get the filename from the environment, revert to the predefined value 2. get the filename prefix from the environment, revert to the predefined value 3. if filename is one of "stderr" or "stdout" use the native streams for output; otherwise try to open fileprefix + filename reverting to stderr in case this fails. */ static int mxDebugPrintf(const char *format, ...) { va_list args; static FILE *mxDebugPrintf_file; if (!mxDebugPrintf_file) { time_t now; char *filename,*fileprefix; now = time(NULL); filename = getenv(MAL_DEBUG_OUTPUTFILE_ENV_VARIABLE); if (!filename) filename = MAL_DEBUG_OUTPUTFILE; fileprefix = getenv(MAL_DEBUG_OUTPUTFILEPREFIX_ENV_VARIABLE); if (!fileprefix) fileprefix = MAL_DEBUG_OUTPUTFILEPREFIX; if (strcmp(filename,"stdout") == 0) mxDebugPrintf_file = stdout; else if (strcmp(filename,"stderr") == 0) mxDebugPrintf_file = stderr; else { char logfile[512]; if (strlen(fileprefix) + strlen(filename) > sizeof(logfile) - 1) { /* Hack to shut up "cc -Wall" warning that this function is not used... */ static void *mxDebugPrintf_used; mxDebugPrintf_used = (void *)mxDebugPrintf; /* Default to stderr in case the log file name doesn't fit the available buffer */ mxDebugPrintf_file = stderr; fprintf(mxDebugPrintf_file, "\n*** Log file name too long: '%s%s'; " "using stderr\n", fileprefix, filename); } else { /* We made sure that there is enough room in logfile, so can use the unlimited APIs here */ strcpy(logfile, fileprefix); strcat(logfile, filename); mxDebugPrintf_file = fopen(logfile,"ab"); if (!mxDebugPrintf_file) { /* Default to stderr in case the log file cannot be opened */ mxDebugPrintf_file = stderr; fprintf(mxDebugPrintf_file, "\n*** Failed to open log file '%s'; " "using stderr\n",logfile); } } } fprintf(mxDebugPrintf_file, "\n--- "MAL_DEBUG_LOGID" --- %s\n", ctime(&now)); } va_start(args,format); vfprintf(mxDebugPrintf_file,format,args); fflush(mxDebugPrintf_file); va_end(args); return 1; } #ifdef MAL_DEBUG # ifdef MAL_DEBUG_WITH_PYTHON /* Use the Python debug flag to enable debugging output (python -d) */ # define DPRINTF if (Py_DebugFlag) mxDebugPrintf # define IF_DEBUGGING if (Py_DebugFlag) # define DEBUGGING (Py_DebugFlag > 0) # else /* Always output debugging information */ # define DPRINTF mxDebugPrintf # define IF_DEBUGGING # define DEBUGGING (1) # endif #else # ifndef _MSC_VER /* This assumes that you are using an optimizing compiler which eliminates the resulting debug code. */ # define DPRINTF if (0) mxDebugPrintf # define IF_DEBUGGING if (0) # define DEBUGGING (0) # else /* MSVC doesn't do a good job here, so we use a different approach. */ # define DPRINTF 0 && mxDebugPrintf # define IF_DEBUGGING if (0) # define DEBUGGING (0) # endif #endif /* --- Misc ------------------------------------------------------------- */ /* The usual bunch... */ #ifndef max # define max(a,b) ((a>b)?(a):(b)) #endif #ifndef min # define min(a,b) ((a> endobj xref 1188 24 0000000016 00000 n 0000000854 00000 n 0000001216 00000 n 0000001370 00000 n 0000002240 00000 n 0000002642 00000 n 0000002673 00000 n 0000003324 00000 n 0000003367 00000 n 0000003611 00000 n 0000004759 00000 n 0000004783 00000 n 0000005258 00000 n 0000005504 00000 n 0000005738 00000 n 0000005946 00000 n 0000022346 00000 n 0000033924 00000 n 0000037017 00000 n 0000037225 00000 n 0000037305 00000 n 0000037691 00000 n 0000001533 00000 n 0000002217 00000 n trailer << /Size 1212 /Info 1182 0 R /Encrypt 1190 0 R /Root 1189 0 R /Prev 509137 /ID[<1553464852702e815f20c49ad7ccca2d><1a7db43637339ee98d4ee428c1766dfe>] >> startxref 0 %%EOF 1189 0 obj << /Type /Catalog /Pages 1185 0 R /Metadata 1183 0 R /Outlines 126 0 R /OpenAction [ 1192 0 R /XYZ null null null ] /PageMode /UseNone /PageLabels 1181 0 R /StructTreeRoot 1191 0 R /PieceInfo << /MarkedPDF << /LastModified (m0ϩH˚A)>> >> /LastModified (m0ϩH˚A) /MarkInfo << /Marked true /LetterspaceFlags 0 >> >> endobj 1190 0 obj << /Filter /Standard /R 3 /O (WЏ X_7!_ֵb{J.4@K@) /U (Gč) /P -12 /V 2 /Length 128 >> endobj 1191 0 obj << /Type /StructTreeRoot /RoleMap 142 0 R /ClassMap 145 0 R /K [ 722 0 R 723 0 R 724 0 R ] /ParentTree 1069 0 R /ParentTreeNextKey 25 >> endobj 1210 0 obj << /S 514 /T 637 /O 705 /L 721 /C 737 /Filter /FlateDecode /Length 1211 0 R >> stream }s46WVmsLǦi $i:ab4\ t&֏<+TU2HBM8-D[AC =4| AS:?krXcs%<`Jtw|Eu)[ ~ፑn KX)NH^'e壨 }CA@w@m-8-@?޵~evJWY i5? nwb~Cf_fx;Gv"\ ܪ|EE 'ѓ-EeU(&S9(^]<8lM*^$?iѸ5c){췠PO9W|H*ڡJf-crx"e`OqԝΖuNTwx;1YP'CzBmuY |3^pf$& ;j#龪}$1!W @eO_)\#O\:ե+/9uHj-8ԬL:QMV@W endstream endobj 1211 0 obj 567 endobj 1192 0 obj << /Type /Page /Parent 1184 0 R /Resources << /ColorSpace << /CS2 1195 0 R /CS3 1193 0 R >> /XObject << /Im1 1209 0 R >> /ExtGState << /GS2 1207 0 R /GS3 1206 0 R >> /Font << /TT3 1194 0 R /TT4 1199 0 R /TT5 1202 0 R >> /ProcSet [ /PDF /Text /ImageC ] >> /Contents 1197 0 R /Thumb 1131 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 0 >> endobj 1193 0 obj /DeviceGray endobj 1194 0 obj << /Type /Font /Subtype /TrueType /FirstChar 32 /LastChar 169 /Widths [ 274 0 278 769 0 757 714 144 329 329 494 833 274 329 274 281 549 549 549 549 549 549 549 549 549 549 326 326 0 833 833 441 1000 604 587 669 764 502 491 734 759 282 282 602 461 905 741 821 539 821 574 512 530 743 625 958 541 519 606 329 0 329 0 0 0 474 556 472 556 498 291 503 556 250 250 500 250 854 552 552 556 556 356 434 311 552 479 766 463 486 475 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 833 ] /Encoding /WinAnsiEncoding /BaseFont /KHPGHB+ZapfHumanist601BT-Demi /FontDescriptor 1196 0 R >> endobj 1195 0 obj [ /ICCBased 1208 0 R ] endobj 1196 0 obj << /Type /FontDescriptor /Ascent 962 /CapHeight 687 /Descent -272 /Flags 32 /FontBBox [ -167 -273 1106 963 ] /FontName /KHPGHB+ZapfHumanist601BT-Demi /ItalicAngle 0 /StemV 94.019 /XHeight 0 /FontFile2 1203 0 R >> endobj 1197 0 obj << /Filter /FlateDecode /Length 1198 0 R >> stream ;H~.k8>3F(Q&_;K7zy&.a#:4oET;T0ů paBU,w~2^^Mfe}&>5ʆʷĵBC!P]}Az=*/ Q.7uUuYK:R]cWE4s>_ C#I`$MOC T*dF ϚP+Ӻqw dˡ֒}_! 9)zE;⊻z^xжMgwB漌A^CHb/XjE'dx tJs@iֻAw&8S1̢ĬwsuMjKiEtO|[ΛmC̹Ȁ>ּ-ޭ]gOkCT~qmz)mQ!Jۍ5TF+w ^PE{^S52-pԿ=g'i6dS˹Տ=rR)8r)2A4Ԃ[ UBbB1\, F>U)n|mt:dQŠm2 Iy%ߌ]˫>6zշ0~wɞ7+\/I*|ӫd"4I 0kRփh#Cߜ8.V$Ů%O]_xQɂHa`D1l>H)b?F% k {y)}ER1 eU;۸ RBO?GTVG\-0t/Ri+ gaV~~\Ye"g9~AB)2S&o_Mu`Bi(]}6ޅnuL"$mBfq$7ҿd- .%1aHW endstream endobj 1198 0 obj 1066 endobj 1199 0 obj << /Type /Font /Subtype /TrueType /FirstChar 32 /LastChar 121 /Widths [ 274 0 0 0 0 0 0 0 0 0 0 0 0 0 274 0 0 549 549 549 549 549 549 549 549 0 0 0 0 0 0 0 0 608 597 660 0 515 502 743 0 329 0 0 476 891 740 828 587 0 613 544 549 731 0 971 573 547 0 0 0 0 0 0 0 516 0 484 604 535 0 514 593 291 0 0 299 891 593 567 0 0 382 427 338 592 0 0 472 478 ] /Encoding /WinAnsiEncoding /BaseFont /KHPGFO+ZapfHumanist601BT-Ultra /FontDescriptor 1200 0 R >> endobj 1200 0 obj << /Type /FontDescriptor /Ascent 961 /CapHeight 687 /Descent -284 /Flags 32 /FontBBox [ -167 -284 1186 962 ] /FontName /KHPGFO+ZapfHumanist601BT-Ultra /ItalicAngle 0 /StemV 166.043 /XHeight 0 /FontFile2 1204 0 R >> endobj 1201 0 obj << /Type /FontDescriptor /Ascent 951 /CapHeight 0 /Descent -273 /Flags 96 /FontBBox [ -220 -274 1143 951 ] /FontName /KHPGGA+ZapfHumanist601BT-UltraItalic /ItalicAngle -15 /StemV 0 /FontFile2 1205 0 R >> endobj 1202 0 obj << /Type /Font /Subtype /TrueType /FirstChar 32 /LastChar 32 /Widths [ 274 ] /Encoding /WinAnsiEncoding /BaseFont /KHPGGA+ZapfHumanist601BT-UltraItalic /FontDescriptor 1201 0 R >> endobj 1203 0 obj << /Filter /FlateDecode /Length 16306 /Length1 23616 >> stream oMMX Op,5:?"&IΗΉZLSiUi֮@'tV?臷j\CH~\bol-M:Z¥cnp1óϢ J<=744DM\Ǔ/hBRl Felo)I_!ǣ(ZMfWE%ӣk1&آ*P> ffpUA{ n쭵 m0)5Xphry=)"Cn\cl crů01Is=kv ѐaȋ=xND 0G.׾^4E*V Ay=~CDzlZ 5ҿiרQgR_"ʀ$0_7Հ[xـl^o{,wyeJ R]ϺR0 38-Â9 D}++,"qOs›~>(qх6 ɤD6joej' ЛgFP `P6ւ&ŵ`)4y <$c| /77m#nذ'/T\W'OO_"%ZB8V:.*kL~򘛱Kbᝳ* tʜcא+MH\>D@!wK'}*(O_=Tb[<|ڪd t0z-#Vz5@>25v6ႉAMN殣$egњVmL1jw*3H%hl:0b4id[m;uRÅ4Y9DLĞ3-6mTV:SЉ6'Vsxf̺ic.GGuG`z Z싡҆fc;t3g(XTP׺u,jYjSoڡLirw'}T Iwb" 4xЇ֦B^t"LVj&BLn' z:7i ZH?_7аC'`awq^OwRp)3vW#2Su9 JLj߷Mu`ȹݣBA3x;='嗐ZŲd:Kw3@>/0=H nU֗VEnakaPNdHASEcai QeeQH)/;,jDX.ZL/]#J@eXd {ܛ~/?W#~P7s C %Oq]7mvHƢ 0٪Dg-{I/=0 F纎̲ 져>o2;ކ7 l]]Ϧ?nJ"_p#~FE3-M^9)N4Z%1h[ ̆ a} 7BQܺa5 9! v\&1cٙTSUXAö R8D>s(f9|H~fH{ ?)B~0ݎ&6i8ueeÞjU!$&uIQ#DvwaJ+=A+4~ᇃ [ŪTj@"Qwaςsҫ{>.!F>or΢%`Ms7JqZ',= ]U@*FGՎm@[.|tڢ&ŖmmOkGn`3a rLRVi4Zzq.m'6lZ)#zr}4 2|2D-H['qct-"v@x0ꋻZ+ %سnWb,4m|is,V.h7ATը${`d ¢wju4k;B nÍym]'w]`/@J (*4~ÌM<Ņ .FONJSdU^2 Y*CÜikM_h<ŹvK<4 j5='p 1|*[(d(Lw$j#Gڬˬ"qdؐuMJ2Ʃ>w@U|SW9 g~Sޕ7uFs&V~?ڳaՉJzƊ}kvկ`]bCj'/J  jFjA=#ؓgQ$Xǽ56a倒ef3>hA8eؐUV @/BcZ2pϮrޘ ?7EEнBEѨ-Ŋ̏'ʒk {B[*.1ݰcijKD@zUГ*C7Q VXe صV$b@c$IQ~<@/ 4J?65_8 \̛"[]͸yqڨʡpYI Ҥl)RTPQ>g[ *7$c@éT0C3MڟisT^%9 umMkCN=nr3i`0kkqTۖ$;gz@{5Rewc8o>3}eY'=!Kڠwb6+PU-h=hh'`tL0glj  fĝP NUʓ_n,l= GQ #haq~r1ĕ&2U;:c\)f٢VR~i4IM2|QC݌ֹ;12,4g)*#gȻ5WΤﷳ;Rfh\{ ֠:v1 V!KG]N] W>l8F|}\;Ueތ.CHʰ'Bva~"e>)SJV~OS30~~12/iX(+hKNc2ġ?eL:׉MMc5b}5@p$j)H4C-0wzxO3* \HR.9`CڪLyp]o! /I}Ew^ӎ/2Fit1F\׫K.ܤ/CB@f@tGlZ&x'Zd W)VsoMn!uUXZyn '932;qeAxcf>Ƥf1SQ_/Dqگepݨc2݀2#4KL)35/&J޴Z#Wizb8dm+'´Z,ehk^`Lko|H?t.'ұ"Ũ2ϭv|6º?me^{ W$Pc3ܔZ5xp%щdd*=@j8g F:< 5;,hq{zshpf S͢ɋ[H]qݚdcoM(4F!v9G}#ݻfWBZVKgbVh(ei_[ZMif7JGfh3"@y?06f1Oj@aM|Md&q\K%-MT%=^) $-Յf<:+̇g7'20XLEZ,[Ie;c з6izE3lw!S(4tl ]^qoC(i.nة--]YJ . IbQhNl[x,/K/tc "Xboi^YlHw$Dq@ WY5 ٹء'o2G );~jV@`dM,7vx$&w')݄bBꌩbroԴr=OL19 6N†Ҕ){#p=xDy-B ?,w.yM<ϜP׊gpɒJk/ayViLI ;EߥgO/ܴL40Bn2t c'Zygpwf/I*<~V&+pyeu+ya$BNE[2Gn}&`N!GAcx;Da,@^ ;\U4$:H(3E1LEЕDVLH+ֽ3,łfH/iJ R4"7`,"VW],pj4 ҙ. Ԓ`s.ҡM]4RXԨkKB27"\nDjdO^?8_8_ $s^+p;70 q2>}SU Kvmqf-{ >@ W^+ > sJ<~",R]Oga \B}9!5J{{T`0GHn#kȽ8ǯ+9?jؑ_f6;-*K:˚k"F@3#U-@4>Pd&rf0yY((P ,*I#}5`uc` `E}d+xm)&BoTD]^q'9|Ii CDpyToS_4CJL?A$|ȯ? ~H^F:*Y%VLL2ԗk@r>QJc)1ۯ'8EcOM W5|/rAq=9q~&4ЮS)\ìW8~^.3Qy=$@LݛHۍQOM@ vQ䲘~ȁHǽP~?$(ѹtB J!H 76e-97H G | v:8*掐y eҮT4Wыk3IAME4{9#+-Aόx;熕|i&9ܤH`Gbv:ʡ0 p߸:Gk/6۶9kydldѻg=HM(B:7>I]5L݂{<֪]:-+F_KBGXgsȒti" "Vf` Pv+?lI(: c_9;Ĥ1R}!%`dWn@E58>;}]@-ZJ WGn7z2ApqmባHZ4:gZ(Jg@M5N۝ĨyyYatН'S{O5mOTw\!Mtxʢ=~9at=dB e5zNXdGa2I`0VD /OȘ %?VCGZKm'| C΀Ie ׊ͺk>*ƜGlDj+W(~9wlt n TFBMԮ7*a* ).:YaS( R¥P~ 3ǖ8-:;jEȐ0m<'pNFN1_j/f)"‰F=Q 9G$%JI=1ԑ-+h<# I$P'`NK)O\`\ њlYy\h&Ź-|52f…b#ge[Ѻqgu>ChPw~/F+2#Y|]WlL'7nH~Ku1-{&Չt:8E:~qXQ vmnQʉ9zll~XIf Uڱ vJI)is|':͇y: kDME}^A3XX L3sGy/+5@rBfo"v7AZ_c= 6:+[BCMn+XQ7i[ 7T4@Ғ!AduWEdz6T/gDV,)y\{>no4 w'f[e]Ka"V$bYJFyB,vr"''!!b&xCKP-$X Zk܃Ag@:_I|? izb'e5ZH]"dPbWR@Iu,b4GVيt=.AJ?&'%ER\o1a:sK}A(J.^<^;Gܞ}6ɊˣF&+Xh0+K_RXnew хuF!aEC7D(Kmx rO?  WЈ̹RJLý|0_FAM>f$nr& ,ByHmdjGl8 fo6ȏK >E(!ݢ=CUf),EQ{\r1<+u4L'm"dpReȄK OHpr_E # sf3▙v@D+*fj~n{C==.c/TӯR"9MX\I`(zB,6bMqOZ;ץC[<eh%S˲R0Pe1te0dEOZdb3 V9kWJQ@9a<AUkP,Yw7+}/$~cn RNŝ(|2:Y)͠;%S6x_6 *)[z()ɺ4/T6ڰXKCkyN$U,3Ӽs5[pD>VޥQ='ǮK9LWkT-z5bƗGy1cpR[}7r"00Oj# u!}\oCRfSa5$0\ B F "nTuͣWIj-=dԛumK7TY^3Ƅ3o.ohd,8]v@$T7iM-SЎ4 0 $U8BִYbml%7\S;wȼDžGCT~:jvD5%/4Jlp Wؐ{,jnSH'WwǦ,栖lP ?5-Y;.egL`ؑl"ay{E.fZpߎ u-W_ўʧ!j<5kB?4pxL*!__]~vwkA GW:s&ço5g8aXaJK"iLQ]xD]fZGtmc韖`MSJ~ɹ531K%cT] (4>_92IDƄLdZfJlruK!RgiiPd},Q ^ ޒxBFB?xq[>:ΊJ@% =ȘyU^mqӀ]# ]^[;9)3۟of0\RT p)}Ԣ40N>Qq_e#v;gz%90LƒXMx;v-bwY,b/$} 5zLdij, MMQ@rDԓH*1ֻg"0ַ08G0!r śL4_ 112M3ƍS,IOV7N.p% A଑3F 0cK.VmS)d,s%/6"n:뭦HbۻCžAXEiBe2Ji*i{Btǡ%S۩ay/j^uPڗ2ɠjI3=xA%4 pnԂ?w0xGLm|${ ^7ߣ7@}(O΍A@BӃ(ReYBR%f=/#01ҧYuSX.bpP]DAPηo/n8jAg̸UǞ %5}D7I:+aYE&yZԋ)Iwr7x~LtΊfnq # 8M `9 > ߬X%-0,Bi .(*5X,;h!3 I"٦dv%||TgܕD]Mu6 'kזU|˅nDz_d&Ro0H` @ybt^劵~̵v f7-YՈڥ婙P)َpǰ1G$9[p2zmcaϔpp:]!P)6CVkj6Ԝsx.T`"ڴxXǃe(-H'40%Ssso,b|N](1l $ʹv6#O+7 /oBnEŗN V.؂Mfإ?~ H^AM @ϳ_(5AD#FkLd'`py@;Bm}3LK8;r9!(Ηo[luӉ]Lf٣M(i앍_+?vEϥ7~h܋?r.m#Q{ 6:/j̩ϕմ>@("ĺ|iyg͛kNPe@'5T\]:FPc6=Lrg;Gn80Ub.8&0W/C_0UV7o+Y Uuat6D;F&7 98~wrZ/A4)e vAgy]X M39pqc' هUJ =J63z<~{[`vepqtEDΜ?[)lʾQg#@3Ւ=lO9NhR}ݔ #Ge*7!ke`S/_,vվ?dz.h EZ2V.s]8v_ClyPCQmDz?i!TV/{H+p (bLS+\7vҷ )bD UU3'`PjF+b)Ƶ>'H8(ϰ;}0 Ͽ\E!n.rw Gтo)!ݏ< t0ϭ݂5p*ӗ#5i{)33FtQ$ w{όiĦ񨤑Ooh@y̐0gRj.+eL'HŇx爙SGkF7q#y7pE"i؂9t4;);=C9ڿK $Of Y~&m]p'哶4w$&o2TÍ,_PUi8k (<30o$8㼱ߟ,6zi\M3ݴ-J6"LzΌVyeZG& Ү6);$;^A6E[i >ڱ3 NB|A5BuSWF, PJcwO.ʑT\>\)DqݢV!3ܚevBx*u2?PoR|6 ׯÀ[[XvF^s;p[P,3 ̆HJb1 8"˪m'^!nWJţd~y`~Dk2WJ+R$wGi^䈧+<1|rIw"kjvnz#mgaExJ'p"ȏMX%xbN_# lia?Ql%n<|3S1ȋZ7._]LQyK`'7}7x7i\h$^Vz@cȹe3ۤT\(f:w`Q{A! e$ )&bBۑ+ qgD=%H4D֥B27Ȋ&q-$IJvŶ!'/"-OE hu~7~ka;y{fȝI}qYz'Ĩf1{ɖ"dY3J[hND]] .3<&OfxHfǍ5/ VaXZʳ7-L4-ԜɢktM}[,CQE54] Nz]<4r{s{~@%Y= yXD6 Y79Ew>yl${:-\>L"{b{/㻊7< 4 oiiItsT GfW4>),K!tK.;ءo0>Na%rG|.0CѦ_M,4e51,e91>/ &@o@y3&LB5-Pv0@Mg #Z7%w JH_Z"'I}e@E\Z0g cS0XDj@;.&rxK}$3qa\ܐ.}*rݏj e)P{;-ՖHqdONloh:ɧ<*]uRxT DKZiJ  g%'R$(,y|NgD1vľ9J@Kڢg8@)dމ"6-@\e%0WILV2{QW[8aS?\ĺBT>%.mXc{'"'6]R}-XnYf;{>m,s`P~b>CF䭋h9xA?td ࢣcOŽbhX jXK'nu%hf.p-" ݫs\ ,Yl=\n|?9SV k߉w]UV$/lę XOɀ:{96 ~iq >DsGΆaY`jŪ YJFՏϻl Iƣim8nT/kq6Î  ec+G(+t;ic5 7<͸4M^X>r[ Gk;4<F%μx-W3jʸn6`kbocbrAPm!/ e 8TR;TkʾcѻfI5$bnҡNb" f0x!X΍Pv;HnϋbD=" !`y0@~_5Qmj.ӂɯs ̋Vaun̻BCl~c=9N{TtCeD7A1M"V+h1lI* вːlԕ0g=jhV1XLkpJ<_rH lBobi-> $R\4itx-8FDw t#c U8D:Osuk)*?H;=4\lvXeϯ߳ £mdT:9O&N/+D);ҩN27O5 T@(>u#g0~\ztMBڻ qڽYL,ӊ.)W=rhDȉh CV8(&Ҡe)'SH$pGKW +~qo|&J*r7HC\cO:wkLs=Q!8DZH!ua@l:aq$NV6kwW]mj Y6FUP>ȩ+.GTdOqB { V{L>BXDzަ>xQ{@vC Šc<0t)ĤmdӉgk#bm{\ Mӓ?Q@S~5Y?7e{+Ƨ6Í#BGR c+|r_CpꢊW ?ogz"*^Ǘoȧ1=H$+a PVܰfo~G^Z-،iC~F!iVX&NeXw19b͍'?_ƷI)D? H' ]]WGqH#?x~(Pv›zOH= `@”q+GV`^ώbZEi+N'$H_yacYyƄYw/`gW]ZG"[/JM5OBh8K8vDQaFt%1tjVFXa'T'&,7 7MuNiF|sވ״Vs\("јg{xۉug$[r_DȉCJV}(G٘8xżW1o[PݟAV?gtfQ$o7~[i>x1<9ߦS釣5ԵqHCu|?d:uIS>(SnFJ6|a]Ɇ@-2-:ƶHEO^bo~k5+ ǓNY% ![pGͦ3(Q*thojrv%LcB[W~[є[9=@NGL# 'V4@M⮷(gD:?-ejv%:섺Eޝ ې(Vke|jo&t8MS*4|wЈ#Q8l1>ٟQ෢,p5_]QF\GKR[ KvjdzBm6gk",vx,kR3bŦ A!5oϫ~ι(@6s&D&M$׹nn .á71eqtMANMm  c_bGj/ ^/o%TiÞȍ_*R[De'P狌-׊\/{ /M!jn_9.Ԧe/ŏ;]g}m{5!+rf2_Ēe-Gs[kO4)/?f-B X^t5}ͤwo0ij h4X$\ztS1kZ"#iF!W{5_!>1eԋY8SÍj7fI^Lz5ۘ`؈t]H: BCN?L!#fjܹl)$ݫ.ok}&̊j%Nu$yϊ=wP][0,vM\ caH¾CO^i03f"FQ`ncK\rJ%TO!s_m߼ ;2 .×a֭ijAJC#"|!: xZ/@PQŒ" endstream endobj 1204 0 obj << /Filter /FlateDecode /Length 11484 /Length1 17744 >> stream $}wd0$B[ Si(ɞ@UT~ ?Nd Ց6]hSjGQGd*4QiA >mD \ေs3+~V<~6q:ܪȚ#"ځm"9d:dMz⦫H!8xT&MsxfRuUKW}U|7LP[ӦZOwBߢȧlFl7nM N,nvVYť_Nְ5g̉8θ08zqX`Of)tR'(jݠgp!qp IDX!Utxdt ,[zJ ,Q,%\|y!~~k@}<9fč=8xilk!&umF jW>'Rn1ln 8xF"yIg("Q..qjڔܕYSB%zIկ-O7=o˄ &$D#O1j4l6W4e$oijԅb$e.LkPsaeۑD *v,&id)60u*2mo UH}>D}f sȿ†Ƨ>g>=Bs*X]*C2uFYϦCx=h=I0TVBnMaA]3&Eݽ3 WF;Ht vлWn+RiM#.Nvvq˥t[I`eIm Rnɻ $]9{Q4RA6m.CEѧZ B{:/5jF9 \o pRg-m#7RN2GJnHI@Y= șӨԵoLuՙd$NBh*托\*gc┼L,LaQF-٨-.? uO{?|DUAJAӞAb 5iMQ[F[JS@TQg eTtGJ80B  3 0f?[!%HJH.9o؆KfYoS:%}YRq!:@I Vtӝdшf?B&l?pl*3B<0Bxb@[R7 bI ]y9EVʰEA74GNs22eҴG&ǭ#a]TDe41:wauGf'd$9/.9<-rx躉2O(6 ĹGrJ=31=3O)ɧmܑyݙj*re7: 4 l&qv@ՀmQoHafl_5}Ltv]H$@wkڳ۰?b#V+%sG۶V%]7OESWh,!!omWi<ȌAO5,?gZ|/N[fw3>d- / uir;$J+c \g'"4^u'PHs8y^_m0!<^m]V23RH-؋&bnhoO=2>q52|ΆpG4g *ךH|К왶%G$ې\~lz8&Z-ןLU;e a-Fw^y'B]$p@_ 4ЄuPsRfJ7!Q3)HG]a9؟ò2h,n}gJHuJey 0kil>ظYPۈ'G_exy;h+a'! [t6u #:gBRfLPB/x w `EnbrnzynjԉR5ҲCI):N?Vh?OFO"Đ'/Qylb}yqߖ5Wlvįx(mcADd8Rb}sB31|fJdSMv65) w[R3z?b 9+Q#4DΛ~~ƺɊ ~ˌ"Ke񃍲2"LzUeRoA7\ټso2]|RZ\- 'q^'C9 ~yT'|<~Zlj?Zy׈j+2ȝ}iwPY &8YH ش,F\BG ) UK+0TҊ$zljs `g%2ZPϱ΄-jb &Y8܃0pW`ư_F %EpO )`"yݩm< r/g9ΧIϮȰ6 -gćZ"RXLeO qZY-!/PR F(i-5%$jx8 bw O"']7Xՙ")+ 1c($IU]k4 ]DïJbvrvԽIXﰅ59$UE0DM.LaCf4R쳛:/Jࠇ@ fۦCd :.VhE_2#!8$|?;i?{^ lq_8Z6m>KhxRЬu +܃ ߚ`d/L')\5P(qVTt7j)&-v5Jw~PTy ۄ՝]s$\tשxDDyfʕ3%#0'AB:_wAC;C^ܩwwms/qppUA/15N9qtE&ÆU%VRq*"!kC( SB@y6k{"^s4 s$Qd9i[ZgSske}Fdeg%aOFAhΐL^#LO^ TX\rJ.[Kk71wX{TI9t7 Ać;x*!|%z1fU6Ӥ&n|`׸ҽ6wA`uՇp"6EKyW& FKA%%+h{9ѕk낗1ppllfXͭlH< c.{'W5-HVɋ<%9ody"ˉ9UK'W>u@T&eo -̗. "ūNЗl~HX@\%} -(4Zf)5!]heTٹBV6nhVjٌ#eOv_G7DJs^p @dwڪ{\N<}6`F(ǡAybm"m.]Fq߻~-sCC܉>Gx>F88BzNM$jmvQ:h^D׿/M=HttDdnh[dt y*l^?@^YA.'y cW'A 6oI|6]i.RJ33qA57g2`<0hv]6Qwx[f=\KgV KG;}r\'EP#{/:wqIXd}x*DR"˩je(ws_ g^;_+OXp4b*D šTbOG8 o@2GҒl0(|r1],Egx)ށRk~՜O썦=t-z"X=-\a0'E1p˼9~ֲ&QTvp {Йv9\4"of,2]#lhNGJ;H>jV =0M{c߳,w{:'hÖơf'*;0-;:?&q9 !IVu\|8q}eNǽX)հ\4[:b@#GccLC*Xwz"Эrat"T_֖gnLX#kS 6דĤzlAes"<:5H? xG.Htg"w,jhT 7cA,ںb<*馶HnW\ӳd'xJ˶ұ6Gw`ECG2vΥ8& TMņrWQK7̓fraEո79_<[k881 dF_pNO_Vؑ,s" Gy#ã0r]mPOv8bFfE&#Ùv 5ݢi7blC[ivkuwĀ8"_s{v/06=+ +<<sEjfMBokZ/IQeeEB5C^Ck>Z2*Der  ێzW̲@k٥ʒp_&5{C,oWTb̵EdlrfԼ޼ė s|6JCŝ 4]c>.>G3ڽl?] ˳EN:}GQeHxhvz V5)gC/h)Ѭ%|' {I Oo UeysY\:Fju4 +ڙ wdBbrZ7`]/uT4P4ZEM;ԵDA^٨$:XG*ƼCb,VzfX,S)-n>LT2>Bר/xK_U|t:8 9٪;#jmD˷ijzӼX7=od)hmB[kj9:B:RM''7ȋY &-WkPK*.%kݬ Nnd3v7|[;QCͻ f/ڦdp0R_=*T O#Ǿg>b P )h?e9^ƛցAi,\$4MI*5R-3n=֥4 qcklmU)%J8hզ٧RD`^|ntuYu `\)Y3\LpLsksDA =l#M4@r( p&1X96:TdBj٬!HKޱh4\9wo ?@ߒ~UH2}6`g _<)[El 2cWUZVAXqh4-O9i8w:Ep3&JLi)/z5%DJX%:_Q`A mJsD}i]&cms;]"::{!t_4,w<ڳL920fC p3IJ쟳&ed 9 Q/ [Ʀ;2*\@TbW{m}d+vA8 m m MSB%X$Qo.+`T[;Rgμ<ژ7L.F(Z!dȞ&_KM߶dO@T֎882 || u02Ǚ^VDlج D]2G>BK":2^vE^M7F˂Y<μF9Woʨ0jK \jphY4k"B9Cժ=_^2pQ=  ډ^IIchnPB[F5jT Ϣʸ^$yΜFh0 x$Xcz4[}7+9ӳ-)hSƊ1k|pF;lYJOOgd7ڔ |9{bB = {3 iFF&r(2<،낸Ns(bͰw>A!\Zt$6xt*iWݬN*Fk0(pv}P5rԢwWU[20b, _&LU^Ig݃^nR3'.`S8k5u wtn{Tu Ѝ~h| r]ȶY+vw1c@WԔOw%{hwf۞Y2M5Fe,ml[[я;@ЈWeš 7exvf&!",P ~9ٜ8TC. èWl_WJpE_N RҏYPr0oR7- eH3~S*͟Ŭ\_gHO籪5;cZɑ:[m;LFSؾP^1hIS ܍w>3z >3- St*IE!C : e:{FRKbߏS`uP4n eՈ;;.R*զ\ߝ+$@A'塯V~(Wá=b;44Do5=rlkcܺ^ ej`?{wםjH VM'#ЎnS 3HP9̑L޾ ^& -"g `$zntHK-^꽸6iv1(jd؁^a6nҽKHOUP έ sF1!gBKXd?(-o:pZ'Ԙ*lwa ,/2sz/:n'T5fq3}\OX6c/U\gװz%ផ+mak¼&UZ"H|!wqhY. nXvGs꣓@G]gL.  -89?72RtMvu`7֥D &5Pa5gذ&7CnLDϞkYPw$#6kXyt 1*+qQHq }~pO䶁Ê"MS<)ΛY`J2Ā*|k7)ӷJgy.7>սhYUE"z⭰ո\EV`k7%TPi* ؼM'ha:gjt__$r or|qZR/ ʙgV_z4aˀߙOIqzmeTNɈ8C3(DY\')+0f_7"gm) #AwTǮE#%B2zhOȄwuOћ%]C#Jb_2dM&Yws:AfPjA Ҍk~:u+?9qA kv. Gpw5#Ot i&q-9r 'k _TUdvD;>+|s7tZy9Ϊ}@njY .$U4/a o B3)h7Pon jNfYkǧQJkC db6܃B CɎ{+^c )zvZKЏW8s {d/8r<\ޢ >h$t! sĆ;LSÌ<$g!k~hŲ P1ƋF畔"l2dQa'0 0"֮K/%6vߨKQg3gH_t- e׻Wnؔ\eKEv&W`ę <(OQq<%`g Lx9aK Im[ȶ4NoemH[N |{/\r|Q\qph :铜ojv5AXkr45K[(M̧}E;+C^W圞oIaq0rQl8:҆>j8yԫ> stream ɎmP %6'9D..Q`-QYEz).۫I5WfN'.@ ƴfٍBWS+D'k㴼0yS!m N.V+ձXOZS*D8)peŗ"XX0@ƥ 9ȁYE.Z:'}%ȵf\,I^VWBrRTI7j3D3N0Ĩl6$568X'+`_u7&!nnpsF=5:# M;+,5~{zRuK%0.^jg(`@ȊmĿO\Ck,|#X̂[a@Th┨*EdaϜUt65Mr%_`-ou2VLszǥ3h[_T1&U MuLrpu /,٤ƾs$f8'OS Yߌ:ϯb62<"_o f ȾXS{_kf{Rx_R8Cj0 \&k%7;f-cw=FAbTjICQK׵ɇ Z}ccXOro0)=` I[hZ"2~@7hI²Kn`oUCO=`э"TxZE!dk pQ;Q.Z۰>{.-V}9f$ f%/$4g- &Z>-23n[xlcC1S ݀i6]:bG/ 3]ֆ/R:FM?,*h!ScuBqSm={P&lU\_yi"%jq 3%39L%%fZryPpgHɆ.%bc]8-멣Q҃0B+bR#߿M`I޹Oĸ472\ u`* y Ӹ ^ٟΑM"4Q ]PM 7e.Ě!Q9OIDޥ0n- gҖZ`VM)_6kU=;m;\MdXO4YPdF6jO^f@G0< nKܨN7SugXQ k g:Xh<6^܄C66B_)?AJQinSeg/U8 i'-|,L۩%ʪ(of յ~A ˔DӔͅQO|Hgzsehr-C67zh Bc֦[yЌʊ~+Rr^.sP5ٹrH㭃S "T%4C᛹Cm!S#F*Udforx\n_D(L ٔr/Oj. v%+稒'G~(ف&xlK3r $.1,8R"[P7x _8kF endstream endobj 1206 0 obj << /Type /ExtGState /SA false /OP false /op false /OPM 0 /BG2 /Default /UCR2 /Default /TR2 /Default /HT /Default /CA 1 /ca 1 /SMask /None /AIS false /BM /Normal /TK true >> endobj 1207 0 obj << /Type /ExtGState /SA false /SM 0.02 /TR2 /Default >> endobj 1208 0 obj << /N 3 /Alternate /DeviceRGB /Length 282 /Filter /FlateDecode >> stream t sK"gMPےEZQy &ܚo?, +`gw=;H3R 1n1ŶkKϵa.,PIGſx\-axQK谐5FOM ~/k븆˄\͢s> stream >϶%=]7c/ ̣bz>l˳E 󲺆VQπIm++l`3kզсߥJLzVօI4HFˡH@W&=EHjȌz $DU֬wbYZ6{٘`cjClA%׉}W4rF%=,[*z-B!Q!0jt48{|FeĄ\ۄT'!IH4) ^(=ʋ#Jv"_Mzw0حJX\6\rp&T \'{ 0V; -ԤY Zi>ɚU+؉o"vzD٭W7LFk"pQ qzw*Bm\mQN}So' ~yo[Kȡ夻% "nZajfFF588.NL΃RX0gN Y7O~KDcq A׉(@+V,5f*U|Dkz45,04ʒFY!҈&RG :\[ 0t01u9'=+_Q#A,H1Kk@aoCW@e ENv]`%y X/ƀ; OuDS˞Q@UAGDZ^??q&ŊQ5n?FY#gEcyba%W 1SiHx#Rp!Ÿɴ]A) шѬxvo3٨1$jtq.rdi 9/}g qHƌx6>q<3@ LӲ>(tYXa4D]kQ7Mec2T{/^!:eY$ = d=c9[]hñ"LS_Ʒƽ׭Xgօ-J]D:n@f=h fm:cWwnj6#ނ>_ by܃f*~h+K8NFfuբsk702 ѷ 찗a[ۥKJe?vH吭2@K5T L*_P]$/mRݽZ@@%Wyʒ!|j8Pϭ[⟘p#uLb)+BZ KݯF;qV.J(zBHN.5.4i]Tϻ]h)~{`>! ^S-l8-ķA];1t \{0);U](`Aog|%͙瞞L0`w_w&"oWbwy))>,c rgњ05 l=7ӫ6Uhpʍ%4!2}YKJ凊~"0Mm`0 if~T)M .P8h׏X*xBhR4]̩p??kFp4J A/_t3e(i?# ߛI^h޾{5L*kmE®LUOaޭԡqsu1A烜4qomMҭg=lZ@'bh_|4!CIgwAݬ#9k`fOȼ'Ӎڐ#[JPI eq#p2c𿠖 Aq+6 7#[Y* ƃ{`(A{\Oॲ~wjjN@A0s{M].%kRuy6 }>S(dkɎI0.~|գ&&,yP׳tcMQ^\Q,:m?8%ajMF{4CTq`ҀWUyMU 7~4M/U|-DY[~#Si/2j$_S"bh[ ذ z<Q&\.-Lvo]uw!JFa}|‹MF>>EfvA?gHjᶾ0|sU" *g28wgc/ӕQ&Hſ5XJϾ\z2jO?݌ER//)P=HhS *)O#f~[|Kas; ̸_f≈BZn!|/¤(¥$4!r B)X*ӂ_cTdUu n\Ug{i4AolqKi$" 몤-٬egy6pigB==*k:o*+wUI7Vqu  Dmϩ"2>tV{gb5oLkk%SD(D@EST >7A#Z͐bs.\:;A=dQgmZD9ȳpu1Sǽm*[7k*Ac8:\iKLGb^UY@A ͤdV-,7t[(s5ݓE^pQijN/$ziT~B3u7uHʇq;O}pcY 87o-8k~` X֩vϑ^[08XD}Q8wA*vZo 6_ƓC[>NR|;D4҂к#6E+*6 $G,Xb,Q ~_zՖo:xv w˼Pb5S/y7AŽ=&dDB :Ih =7lUUo0fֈ<1\!geCp[UV"O_ F犌`﵄ @qm&9Nن &xaWGPNg2+9E$ꔮzW `zt^n#P/%q]Dz]j˅{a2a`GF2:b{OE !քNI[\ o7lS>Zq߃ 3fo&5q˜ 2xsD1ʇVb"ډEŠ6O+dWtUkxm8; cTpvl  ԣI2:1Nr4^J.Zj_h( V3qPb_`o!bˬ1d u6uK(Ƅhɿ`N@7({)QڧM?fZ?'Mmb *8M '`Qٟd;IF ?谎I|3iO {dQcx*Hpo+]["4FU]DLFD (GҺâ~såȏ^%zd]:fbztJA!uAmҵUȳܣYG_.2K+ܾ\/wPE|put_%%t Cbt g 5'՗g&R>bM]O1 iuR%VDN4 cOP IAMf/pɫtꮡ4dp Wh\l箅xI\}~Y;P[d# t}i:g,Y($uC jBtg`0` gcZi鲑yьru/b;H80X$d)@d8*0EG$owm Bb.HpU+:pՈ[|;n}:Qt:XrvTn6\,?25 *&U )z\rlZ&95e8$'=GO${NkkS">@7P ؉oth98=`*+AyE4F0W)}~6ߡ܅7YU i#| !;6LO,N6M>:h%ic|'+ُ M7o3lz'm "J&$* [?#ZU!JaOw%Nn \S7(? 2C^x>Np1qctK4Y3:Hh0k+Dcyt@ZŖ٣D?)Z*Z7h. 3((+uVN^W+I`L^&/rNM9hCxl-{xS;u+%# ׿"V >Fii8.rQ~ :aF7Ak{ӱz]Z%L q䱐^pB V\3??K15ר+v*`k b:*; ?x@*{ [&U\:t7PI?b‡4\/:5(g_a)3^(b9FNCƵ =oYǓn  Vꔥ*dwm az!I\# 4Gl)sӃ̬:\x݌3w6]TfM7 {#XZЦ@Kclsa.5F=-E/ms ?Ò. ݐ[96y2uies\Jpk\-]Hܛ[P81MT?2#R C%/ Jpa1m_pT?^"oaKvzغQRdhC#PQ6J JM=ۖ1~^ YvAVUH3k^e{֧l>Qy/3υ7Z8g ,GJ`XMA&},){LJӭX%ծ1SGpX1gR&ty!]YU:3f皼q$&EZ)= \+ ~\B,9nT] $? ͇="sϰC@+}M]U*^fgR` jd*#T<!p%THJx}%j%nN{Y} %˘˨?ywk @z/$F"j|a`,aQqyJn,;2FZ_.BP m'!z< w-M&`QsT}x:2 ~P ۜg񧓡~-6Yn8QG^%_>ġUΧ]C,AD?4NQZVmSjZ\~fE:,V.X/Es_ W3SinezҪj~)T~pw_SOho5CARp`0ʡ ^)=H,D+i8- rh i4ۙh;ی~U11$G´!hQ x W-0<M>K{8m[V]wT--6 ؙv]Uwۡd%Հ/q}~y=th(~JIT.Yxz ح8&zX ?- U(h;R"cPb7!M5=i@dL٣dqΜro:KwWr!-1_Ixh݇Z?5oqz%%l ӎYz0\ #s+rtEU{{/IheP W-iHk(P5v{QgXZ\k?j U&OB/Y*;Nr`BY9\5kh;-1$,;GKoo3)IX)CKuȕ3Ɂv[8hkd|`=x_/Â$ﭼܦW<M\EU$X9yljfzXv׼3H~$GLZZM[I2̀ž[3l T_5Uozi+]-^]Fmv4W;GM"zک{pSiQ`iHe GҵgMgcJSv;L3ŽӉǖdLf+\$PhG޶}Ͳ&8E#ആ:]{<Ȫl$YyFUQ&b}^hH-C"MEBBʚ(C.8`ML K$<&9 <7woϼ39o8jXx6k[+^k2 Yf%[zW\~>>U㭩9_ct}YgxOm#^]ix^bL`ӎqF&UrV*56ᾺٞLXuwÆH,?DnyVsGM X7s^][|=.d D[}6s12Tº f7C\r2_C<=w hV陥J:^4ے3SC8^c42 7_/b2bR*?dV; zQsԇ^< ޸)?5+YM5`c6TNljeB<жA|_Vz +6f4`dѺS(Y-%.|9yGvoIdPHw!S+PnJBV7) F_yܙ.J85Js K4|$6AI[A@RC gOjCbxh`)'? Ň u/JaNSӌ,983='%N2c<'>^ L{=qeՊɸ5O3g^!`0{8UWɡ4Mi˜gِ6lgTxJ9ZeFz6_p,6@x, >fVnĬe2)P?1֍ElϵƮ WVzw ? Ù跡u|p'EQ i_7'qT!䕇(u0]#zL<00:Xn!ŝЂA;`2b@bD8%;%O^p C-z|,-Qv|a|-h2mMX6Wr_C^,K#}hNVϓD]⡎Z^44pGTkBw6Ǚll"#hʂ,ŕ{?S=nG%?ޔ."Mo> 莍fQvK3KLHC$zɖ"qpFtրi\۟LΞ}zd:Wd=^_G *-@s7Gx$2"GLvQv! wѴǶBWOѪC|?bIgl'|v>Q)G黐ʐ ba!O+K ,Xuzj A5,f2NjOpanǚc"3# )a 韪 96`h%,˦SwׁeC2b`É 13pT" i]2PK&IG8k2$ [zIs^iUccCrV'Y]s旎[`=ҝ!g~HR !}kQiPzJ?X@~ww)WA[ *eQ9M#1Pp ԏ 0WHst$nWPw~Zltݡã@>1iהId-6@_ Q9|i?șNS=qyS|~D]f>IapL3:UX"pp@0w!^#91JAˇ:mF+,ʂV_hPgdiuEQ(m>/%DxE z|5LHuXT[ƵHepf7tHz~m2҆Et&e#11Gm2,D݈< )jBr{\^nsG Km& grxIxTEۮ^w;Kd-t4n,P~9^4\)&?0ikXx)R^z%[M'OM腊&Qhmmyv0:/nGhE!Om*44c~id7/XuOuƻȶzױ6:ui.6}Z{[t>Q'n 4h_S *~ki'ZbO@v/Q 1c/"@dB7-*~aLR,%04wTWE$W'#^\rwfS%Hn>\LFMe")=[C{>hC1u$)LؒNgi#Ȥp~g6ve8!sv 3rOᶗLdw['sPM=P 9~폸ғJLcbeR 7C^R&Đ`@;Z{ĶkJWl=0I}uzT0pvX|hc!.>9 {O$em'?ddCyƋ+8bݪz߸;1d1oopCKAX&0 Z,S~ P  %A4l:`䪁̱U=,2ov\^BJz 3`˾eAQzTUMҮ Xhߎ3;`MVЅtRzjKW4XD"%wQ;6Zc \Χ֬3#M%V11Cs4=Qtqxv?JIOn+jr+[bhVq|Д^KP_-Tϓe"2! G%Y;5{/p>xLi5h' 6oaXҕ[X֣snÙ1Y/bLuErM'Mg@ݽ'oR0MusueuLf1 E0$y|U'6VAUp&P{D(x bؕoŠoެƧ(=Үa <IVCnh)Xu՟v(\_4g`wQ%v(C^2G B+UP_+"lޖnA'nf$pݽߴM(ຍM'//A{2̮1aO P-R1 /(>#$UiOG2#9H(f%{EF44a (Je'Bh xVE] TK ¤[AoQrRQU{v[<Wv10AdhۣOc'b"&nSN:5=^`^ \Z,ARҕeA甁~_P;4;HsE27n!9WK 6PN".sέ%裚]v<]p-?Ve%VDf)50>ʀ-5NQ4(bSpZ:5i5gGKbA-0B.\~=JD4nͻ rRi 6TgALpP/@0ao(fQ\W[ހk=}ͽ (<kvkоK=q͉oBF&m8֜zE$czQFm DQKg JF$`WƼ(b#8S*)g(fv;-ꓱmUX ka>><󊃖XP gVkpCFK'3c6$ jO~`Sw$.5,_C>8yUM֭s"}⮎3a+[A9qEsO˸Ţ+A_IkRXhA k' rcrlt!Գ]j\d@Fm-smBHR ߹o6rù ȳz HK{.InuInfX4p?LNc6K^C/?7*bD| oTn|ds?& jCZ伟XלwBǾ *De:r&ĦmmnC t# OC.?~ ".\o@*!\s0 )wX-Can@B6 t)h UMǤ@ϓeeGt'TވC~Y$, 讲w*=Nw.[hu6U#F8.+ʇfJ [/g OtZomߡM' zGtt/_/Ā$%47ui!lhgII%#I/HvNiRkѧ!HLzRIM®Nr=0-J.紣T ,5/Ngvf,( \G0O| Fr2SOUCOw@L\+m qjlƚg ܙs ^%k#iu<0W5ٿ+2bw C4 |IT\k9C4K_b]J\Mv҄Aӑ(6ŵZ`5~\ 2<>7*’pWW4z>"N}Zg\_es1d1(]?:Hp2bsO#LSBN␰~UGìi"gpwG<`Ul2'Fy(%: U:J݇Hmo,\|hq+> #04cyPسsĻJ="[gڟ&A& %Q^ڮwTRyr+n8Pe WLj5SYK~% .xg?t!`PPtzv^D{YO l_\C od !~Y3=_;:mS޲hɘj[BmZ#d\,4X hսWDjZOt,S>jǡ,xfz[mP㝍|GOpIkf<"joᣄ';S| S])DY胎Zzen*(I"1G xoc7! vIb([[mb"n.^pQ> T,;ү*a|& b9`7IkZ۩)2-0>$枏pLyW?VoG1 #SE"qR eI!emJD{+i7''f wob]M)xQB,XǴ@\tDl蹁HqM;U+Rc졌qHâ#u$2cG%Tv a { %vg/)&),>0.ťf~I2CGHYO}~8eJ6RbAqunfUJqu5LrNEJwa3h;F3TPrr XS,|K5@+2NE)<ybX.Gh9/LY(=-@i vv1Dtc5oRUnt $iKJS-=!~(y F A2Gȗi-G\o"k e -µTD--0DsIhٕ -uOJc*6%3yZZ,)*Ҏyδ"5;btI,%a*xݒ'f_tR=-槙!cM›?M~t 7%}FF8q`P>~(W>-O@@٠U1;WU,YT[GTM Uv`).[";vOLٯ4o%xEu77I- D`qDg{vaPE"ТT *^u;؆ep;5˳|" ƑQ u> l/?Fkp{K<QjY0)ܑpk-6*sڵUt1AԻeMk @0Q|rNr]EB"ȶeRi'=%8脕PiuğMRFvXx{]Z&&^[1JvD?&V^b .5'w!g@6Bf?א2T"h ef\%>*f\bRڜ&OŐ`y+MdF 3CV3ңM}WJR.VJaHf&6Cb1+q`mB,A8/^;= Ac\=gyC/z?VXTd.2q|1 ;G9LJ?5G~ zY@&p ((PMaLG_C^7tnZzO6,B_V%XgFl8Y<^O izV>VBH!4*; 4k7n@kҔJpoZF'P0 6n$e&(]ыHOZh& Nܸ)k=NX-?A=#I(l)k.Fzcf0옽ﵰ|YNDon%˪{DH搣c~+9M5X :FS˞BEcŸb>F`)O#D' ˌ?7*^V.jy 3W6'*ny!uq E0ӔU@)ņtQ30&Du}WAf*hVG󫕞l} &$u8~FQ7k"UNndqN8JtZ *X}2뤔!dCLkZkj D^6ZM2i?VQl^utHMAa{r.Vakt(-3`moWG\޾r[qZ >NVdzsʡvaeqZ)Bl+6XW{$X jvWH|;suPDjYۇ=M~X3%RA W0T0;WwD76DS<`U1%' f~(OAkxn<ߦVNܧͭ]e!gMf1 dٱz*յ%!\]+l|-F| XUWOxaԜQBt Sp!KdxɕV>cKa9| $f `t=}z)nC<(%RėoLreg霧tOG>cQTgR`3{6- {trrj%vEY"jh֜*#991J3>i?%Wn":gx=ǸVՉ3}XnYщKߔ,]uR&FGg'ެi R2T͙@8RZ$vG /@dQGt]9&T^߂ƬhSRp<}x]OJ؈M2;?cʄݝcad:hw\u*-aPkv#4%MbZ.` ?8Tߜ/:1CVt Ud%eZ8 69$Bع}5?mIE:+0h& i1EG Y17i%(v6Vz4+-"\S+u ]3RJB)}l!K^:@A\6fE;}ǥDR 'cTM+5tJhM`gе+B(?= yIh7ۮ"TX~5&Yn2ḏdx̕v<!?0S$?].0ToiͰ(fWc-;?MO+H~'H~+8Al (ibd {-坆ڇWYUqA ?$*$q(uh1\QBQΨ-qY% gBi=e̅kmbBMDBeF;,&0'8")RASƈm]o$f%kxFH4w"ɪa@1?d%:O6$0n:kf 8~^D"%Ԁv^lWMl`X.!ߊ|ƴI(X `gpN`]eiM9W)sYҺ[` 'j=$&ZɖpY ut5)܏BL2$)Ob gry?=_̔W3ȍ}%x54{WXYѦku[b{ q2[kա|/fc'SC榙7A`?< v=02~B,ۼT0FQn#I fzpM8w{pۤF l[X'9x!un{W7o~_C9mM@r`e s佩=`cZznP'8KśT'++xr"i.;?yƩwX+;Z]I^R)kwyЮt=ڌw/ $[uOT'JOV|"F 䬝S0&,Tn.5԰AΕ,"aRc%>fGfj\pj۩~\4(-9FL5ŔB 4QYB,`Fĸ0' h4#̒Txx+>-[DmXW =o *m26WQ -EƘ(rjX,}2"j"/   \ΌBhG')ep}Cs_-[8*GQ S:s}3` =)nz^+9Ke@i^x"VvOPwuUPuaAd0vNj\>lN1k(ֱ t.櫎 5Rwމ_^QMγB#W ڢx3ǜ+u0'ͿX4 )A0Nau۩&~Nd\yl]>Q&êJZې#!3P]qj-7( +m=)J/Ą3[%.;1Wd.Bp3tũ5F%\( +z$wu5-}/~*03]:]1c{,FBg,{XRʯdؗ2]x>g"cΝozrŚ~2 C[`mA[~`L bxn */&Bj1E*Ir6i|+/ҠR{ Lٙ\01z[;7os(g0qdc!XG1:Ef? ;Fzȝx^VXЧ6C 3$=ZyNv2ThOUo RגĶB]}_Z<ρX{ƅqNx]ɷ*6 k!<)>mױY gR a4ePVݛNog;pY,㷃΋NXOqeOhk'iލZdj[+ yQ7bH0$D㜙?H=&>LIJmbRs>C`v3QO\oZSzĝD[ rInK q,l?.=`|_LCu Fr=][x1x123 gTo8~c)֐$Fhmr^m@[sec;UE:M62) /tG+*3?-j=rHq?+"P=Nzv,g-N&E_1V%fbsîF<8rhN-[a=4:!6u!D8YFzcixq*"Z#_cf &iƕSH;v^,] G=9:%?(56ibW)ˋA7o$n[t-z!X>.lDݪX"Qr ?6H&5<(|aIbb.T2޵RVf2T +%6X4G>3)hv JbS T4FiJ:'~[PXrQ,L%Iw]V]@wʋ2>"Ey L9reYz8F+@\dOdڷcr{8]{zL,A o)kv :6 -W5cKuIGMky=Y6mN1fhDS}q7Y7M7?')+jٵ;B{"-cҹKȄ`ʜ}u BK'։D|Gux }!r}+*Ũc]8y J$l: [SR -j24|5tq6x4C2DQ_٥39-4Mآ)M̿V9&e5eH0awsӱO_bш=SC8|iL!vzE$*fI."gOsʶDCuƝլ䔄 \BL^'nw0G73];*JW=¹A\ t "A/{/ʭfWJ3PQV@Z7TB;b T뙓n!doC9.Dx^?h  zu";:l:Tқ qUg(!JCTzzCQۺ&<{dol_Iƣ'-ˆBm]'lE'+{tP17EF?k¾*< ̷4Ռ}d8HpT呻S;Gs}r ߏ/_7s|dZG{KsJ|E4"Wl3F,NxlPBRn>&4cfiO8CݭK9nJ<].sƣ)"S8[nda?|:˲5 Ȥ2Ƹϊf1>TT]02[Cfm iX<D jip&}zߺ7lٵCcxY4ʏ|I{Z80^?e@Q;Y95ydBRU5}ʏ-D%:x2<ܪD)Y1CcJW*}(eZe3~hffzʭ.XJ쒶2H!: 5\bGଠLD DnHDE`ܔ}W;$i'g=@1^ JD6a!@5}3d6 $Bj \w15& ##-ir.xD\Qн~B4QjjfpׁLk  o+iـ'_۝ŏ֛2 V^ @E 9(1$Wk~f*WSYt||Xx/181\>l!a^ЙUd1$4A,nJ]:vړN9߾ZT`'8fP :LG ~Q,lal%9.w}l ehN2}f6o̒m" 3z''" ϙ5SӍ`ʣhŭ02 NӺ=>PZhaC'Pifa@?GW.w@-9޳:ۖ:eAɓ(B)l ? !:@q}f._@1Ec6'mj^a_z r{5.sGa(a->s's|MG9n<hVVVbtsK^ 9JydP4Q[G\ b*"%W`w^a) >}`jؾ.0sl^Kfw}G@9~qȷ Lb'Ub"ywzGPE]8A>H#zM;11i(2cf\m6"F8KUYˏ%$a1|ٔ֞g-%;S F0V$Ps^}gl@|v n !\!|8 ƄdEuU{hIuF^:9ss'ǼvF a"U-|-tIoO7HI;E\Rdj2^Uōy(=aSЏ7K,vKO{3r{=.vj ))r~oI/I"{W$6' 6W|(O  SDX@lC|LqaIB[#ٰǍVQGi&nK0g__BiL{3OHډ 牥(SpeSl? W:po7pț|g\N1p#Ko@l(MD&qN+qpϒsP1kð"b iH<ۡD6{>&Ѐ?Rv 8Ɏo. 4fCnDWe0˝d\0`o0vJrƱ$txI>" X:|}]}t1oH{ hڏ9i2\wO3R=m.^pD|RXTO!llXffbˇa {z!mOnޟkxd&s@f4Y Q{Ҷef@C 鿵Oü{mV&$i/QQ5|)O;|gk݂ wf2R%g5,aOr %m~<WLM"q%?zbm@qk,}E(0lx&]YPh=;Xt {(tؖE7O_D icT fchl$O̒f`O5OWuK!yQ;I-pDTWp3V.Y*_* aJb^oFIվ턯@G;1OvGR'}$QrDpTR=KGB^*&%c8':srͻOm]EH6V NTG ESA]|]iI{y?v\Qf燴,N N7F?:25xrmfœ&¡ (h}.o샆)ZGα2F[VP ǯՒgd#:/<~;b7L+G7l=Sϊ΍*`S|brh2#4͖ʵu PyϮ,oL!uE^'q9^K(u=&׮ZJ ψ:S6ڿBM r&^tS\=Uא N:h>HqB,֓پL-_J+\+!7#j^5AʓPɝa8xrV7ޒY[OCr ZiIE1ײQjO#Y K.Ҏ72h!nL,{V!m`ބ<-1Esl]6V֬ɣ8ǹ# g"»2=->[ 9Y6?8 L]EeAr !Wm%*ؠ'&ӯ _g Y=?!`(Qmf׻y{ Ko}/ Y^0??a enr5GZ:%[ogJv8ԇќ,vbȌŀlDZ3]M >&sD Z$[R:f,[Q`ˈ?ĩ9i[nJ Wݛ:70p9 Uɵ~1,X% g&TRSΡ:z^KY;^y'!O C|74XB_rNIVß&).oɆĵ_bv/Fq4lj= yBZ\ 3u I_PQ#({YSRa\kHR7pAdv\֗FR=;a4eD<)Do,XN`Ӧ|KHMſO uT^%hB&sg[ :)V;jo0[=%B.J=I9I-n};KAs Nw bAy CBw+1Si[ !9Xn-L`k$zpI<=5HNB 1~g8=v$xy`-˷=/&o"֐AiBw#6?F-püVA*:+O@]e?9`@ FlSZܸ7lCHHE>S*]a`oߔ'Y64Θ7pT"_ߞ0TϞVڥS[d^yD?j!/t^RH|O(C S=9!3p9Oݜ2#Q`L D GsZ*E%61yzM3N6Y5:]kL=#q} Ɖe.xx6 `bjqYnX/L|<8smYbBԍ8CyuMmkmx淒WGZ,zvb D 읬P=GRUlfWflxd|p3er O&BO ^%:̝v̧OoXSC!QJ) |HAf1(BC "` ź 52zx#wmtcSBuA(6HZNjI>ux|)K&īY@QKL5Ϸ :5g].V%F [8m]Y ٷbW !\”lX,feN hʂI(Qz. 7gjϑ0m?Б@ȏP]2'|}W_&;nANu :`Ӻ ^FLV)?T Ӏ!Sbe{nsزoAF/yE{ŠmA1B2 73)`9p:Ʒik'zrޤJ'P6!2d=B2"/O#i nY$zĥtw'32@{?u:yמ]e45E0}{,.i Txd^Op&Wd)IlfL"PwYosTSPIke"?_cz#z5Fdq7GbVK,!LR PF~5.h#Xg #k`9^sIaJ_{/ׁxu~vHߪ&$ #NS,~XLF)8K1ѱ=K9z5; fD=}D\jM׳!} IC*[Yu1.`M{OoY0'@DMGi-Kˏ،쌨(s Y! jQIIt˔oê$* *K" WvX1 ir5Lv{Xulc!6eGR/<ErH6Ҝl&7ɢ\QSr|T\I}ذ)ikgNs9r;=&3~IH>A/稸!>T?1T$FtrLO^}#iyʤwV]}3iԝ @rP:k)T х5.h݆4wtt-YO VN=4Ǯ;q{Vw:ta p>|FOTҩs6a"BFns ?f?aKtHij)E@|2u$y 1,v;6}PC'*OI4-D{#z)\K3ץllur\Or~{_[:xR߸GՉ(X/ߥ:ŜXP;TxYoޤ.Iri)jR044g ʼnŦHDŽ%-#H>FȞ$yuyt45^]'BzOCjE*4%a>8\鷬.&.QnkˆQ_=EAm(BN U'bikG769,)Pa82{Xqef.%+)J-AUD o+GwY% 87Sz~I16_HK;!,c"ZeN?E EKٖz'6}Ew^ uKLו =~T*ld(G򧰒Iaj P %",i+:Gt?ę=ÏH @h&2L 34 +|ry׌`DfP0Ӛaf#ħ_~d5}TPoob >kwWcq.E]QIJ}G"cĬp9ؾUU!QքĶe)ㄉk\>T76~>y(ceYIkΤ yeEyA`+aЛ5 3YnQtkȕnqOPYML *mO2 7.'z{[.4.?srY fNgVJZ+u1Q/+Ύв%Y tfgl Du6B?/:}g 04gy=E-%yi%k}0Ql4cpqɴnlTնQA13x-G(M RcO!hV<[fz׸T(0AwՀ_ʘW#00#ֹ^/"K@JrubK{GpFs,Wt3½B Bd$ǡ:4.AbHq@`Z1'=sh@|BV}z"A%"ͨwI/xM$Fݎ~Rnc^1iH=ěHd(n|/ɗ({LBq-z6 MF!ggpN(za5O,_D1m\dwV'WMEJ O𜧢;Ht̂K^O#n6~bWЙ\-I>ZpR.YhA? Fʇi5*@\c6AgY+~n9IU`XvWϵ@e%<ퟍMVI'qehz%1 yW ~-zY16# ozˁP^$ݒ5=gi)]dcUn!%im[a,:iB^\nnĴ= f.nҐthfonFe{%dA62\Gh3q_IEY]=&Z+)dt,EZ MT3WSyu#!ux-+:eD/ HoQ  G e<"/btJ"}١؎[_kFl弎JC8}V:  CntBX_ ǥHRj Ҏ] w9lI^M 7KnpE(mj(2&9+bb*%2e˥$ l$A2(٥0u:|2uJytzdQ9 kUp /[XN@ˇ@2Sy׮?7g7qoTr20TTb@"̹5ԱY4tDIc5:6.)GlKca9ls"D024<?*H{\J[x!/x&HC_S{nh0~+6B_oi>GWV2w&%(l!Az N.,"q7>dZ`5`s_ .l(qN nGW\VRa TBq*UĶ.OTa)3|zVpMkqy+uO1a@߷X߇g5?RBKnL'|0Z=Gokg/aGdQU=n)1֏p:k0xRTk+uVWe=<"eqƠ!~sBSbt lftÉiwU(}bm'7o|i,++1?h@Ctb+ǂmrJ ̅ LqL2"$ bFt HUozTa~k.8X 4II@J9Wcv ZZY(R孪3~y.D-EL j{g{ѼUb(g-^ߵyۻ^ &xnFo}SFemRA$%Kn[7y͛r/2,ceNsxfZ)(mv1BҚ0,Qo =M)ZdG|pd>דp ccL3 o7@} !O.%[vAA0Hy0qp><;+]_B>{/<%@!$̎}zHxmԻ cHyӃ[JSE\<:17M!IՖu߰Y~4ݥ;! @hR+mM f=n=dK10z@R;?OgSsbd,*֢j 'JIJ$~N=>(jhörB^u]YL!〺 ĤR~>-/H #u|p*ѻ 8ۿE'ZA53{N e66Ymv:I*9,_ nwz+h۴IWaq*=}qy;tۗfJSaNlQɥbmK1J IIA+4F [ݯCb*~."Ile~UH "fb9H塤Op؋wܫX yqsmpC6 $:>}_~un1BʃϾ[&KH$v:RJa'Hr0A wA)c]Ph72t| dK7$m8@ Cq_1='.5e;2&WZ=34XjmM#oE5sX3/5Mnf2ѕ|',֞o0C鏒L*e \IGp(>qM+aߴ=*|b(D$ˈo\)~#эsw(-`S\LIk?q(P"Z] 'uMQAS~B { u-+dal 6B2{ ~|W3] iMX6(JƲDYI*.Ih$7E?;>7mXN4_(+Fܞ27-O--*ٽy$ d޶g-;d{*bUN>db݃KTy٨RnGN- i ,ST~GTLx,KsWWB=!ہg lhZ d HTXє;( &E(p̎\$mIo-sBcX 1<+eH|MJTq9U\d:;aY چ?c; k4AMGHE) j/<-rmج2/*İlJg_ RM:qܣǭrZp%UfZWI7'cr)b.形Im3[,xU fHW%(6eFE)2 GudfQ|AYR($ݘ, ,k?/L~B4ƭ_؆kKE.`hQ;=/JC/4k= ^mfxFasS߱|NL، HZ\Y\^:h;yxLgBŴ`L">D|s'F[!<Ȏﻀ#UlVsHpV4_Qg_]O:CՊj 3Q}w;'(P}Js0ͪalqSW\HwZlQa%ٛ~f@eԲSsGv;Qd3#,gf.X7k$=U5o9qʼGJghNcʴil EO;9sI櫄ޜyW5$9T&zcIRAK{Mqà N!Ae 3as `7؎>[&gOӢ 9Sݯ5 ly| m/ {s1Tfo&7fQ͸yY"ļ`тSPmZ"htvJ"79Ixζ>|ۙa9Ar.Y`E0X< &jF6!@&w.sCQ:ciLm|0T_čZo0EEg24?'(&Gۈ 9"a5A Ԉ!z7,36 w\91x%.R^ IV6%!`S4Dm;;ׇNy˙ӼQyzWwU`ܫl5N8_:A0kz">,Tʍu[# 7,Ӟ`/8їru6lX"=} j[P-3x0+)$hD& 5_y +،kϜDoxCz'O zRAI0]HσԁY\>&Vl=_9EFI#AKX*qpa!3ZHC W= cƳUSltEv,krG}P|[1*5j;3ţZom+ "QUݶB|e]Aъϝ?<9qC̻EUeIę6`B{nU۷R[Us@V;?˅tˇ*Wr,咫 &[W4X kAqZEEnlj `*nخ?)h&@pDC)vOd7'\^@/ T{>syhL.gׂ/V5YU}hGJgIWUbOyi 2T9)RK/;6ulHLz#Yu ƫ#"U٠-cv|1s)Z2'yMw#wkr%F̺1c!^nw1hfӇ>Lbd҄>}rhfCʧ3eۋ;,@)@2^fJm-ĔqoT.]kn`h rc}3!A9@^۾P {,~zth0&Lهݕ-=s 2E,mj edg]tL7MWNu-R1^ SSFuU`Z{|{$E YP,3oj`~SZ;o>(nϹFnx ;C3WiԾL{a޻)V/CI"]rŞG7M2LKpMP !Zt6oRp-8j̧ ͢f6Dc`/>GFe2YMp&Z}7uN]XOE 0:E=`R5vm*wU]IDaH{O#&_2BҰ<*r=^wHȁsЭZKa% RKa2Rب$ܡXBgL9LR Xy@1́fӈE}z̀4[:s,;h3\ثRv YVALмO#Q^˙U oRKeu᫏g Π gųS-vjOQHDSr_RP7L^h}p+fL}tE{P䨆A4WF$\{MP1?Dt9d@3?ӿ:u17 qضpU[7}**mn#iXRC.ԵgAw} hJW 8:`J#=M{ :|Co{vEGdZʋ2- "ZQ'b||$ӢI[A7Qwˍ*)6U([txD9QԮKvŸzt+CK)mPe )wNB4=`})W3'6ڄ{PIzO3.2߃# \RKRn2 ff9Sqæmpf !r/*,B>:2rvP%D85]QQ$Xf:L:9%>5GZ+9ywn{PVB\R}N #Cl5({ K0C䞞LbMP;mT+n8Ie;Ň0jp}`vSgXs}f-u |ݑ@ 5UeC ?P퐧4d ٳIٿCeD`QUA*i[Xa\Q>\K?J;-z*g؉Y@f3+\vZ 74úg91KPp9 O:]=ѱvlIvf5%gk.eqydgIy6{S !)lΤ f%ks|:ZH 7T3iyRBL@zUSdN@bR 6u2GD52QXTpCtzh'mHu0# V/`ϬwtkvK+&t=r4堈U,ſDk4&&=)n}!|&s,)8hLXw.)疱\qDM?QٔM2=zWF]tx8[M=Nt00w!fzg9 E7 @cI%tO?-4 Ž]9M#v=>0r  AQQbL"?HAiNvecϣچvmf 1TMqX |>nt]be6vIKTAV׵7P>%U<8> C|Ua$]-]m^AY?'sҮ\v˻!~}{_XKTB i4,T*R<ȅ3B]a c7/'B= &cd]"$Yc\EZk&70wc̈́ YW*.q%^ ڽR DrWYhpA - hTfцFlfzeAH-zT@0fL3#B Z!;hq:[$;5/ 6S׾f6p}@.ރ!B0E1"8xށy+{T'ꆤGlblE#3!MwٙY[GXQ^H1\o,O>%{1.dRI΋`QzLSto)Xxm]OSJ୨LMM l300H|ղY0p# o@h~.U_ M9ƿ7艅0Iԅ[Θ=,\}JνBKxD8+sM]*a:c<7/W8즻j8߃\x)ou~LFfqblWFRw)̈᪊d9a̯&kjA'eUi[0zx/Sn?O pAD[ :%U@(=U`wT&6oʳIk[ɾ{/7m+YZ *൮0r=øjz)[KI[jaW@.bͺSkp"Wb7)L8~>5`I T}*X?ǁuj᪖Bِ5MA8'5xmToZ)Ž %j Yg|}K3=`~_pܘ?Q6Yڮ޳%co̐Ltl!Hkځ#r:Ǵ)J<[b 2*A2 !et"N%[L*o') Q ab,ZL봪'/Pӛ[]x`[n[7ehM#Nؠ xY\DXknqfEĄTy+I0?Mպ[3߱O`њЄ$eF e@-&ޘ4gc )#AWA)p΀6BE (CȄ${3aeЎp[~j'nb:BMsL܌yziLI+mJ iR3h?KMZ !!j6lǘ)ǞʣϤ&kv'92ZHBwM{cznŰ%~T1mX8e4W"&վYV[ ,)67Pe}ݠKmFMy= : "1<6y*52Mr՝@K,>l^ )䙫L25Z2I:␮ T 4D;ӐàK>+.PvUMzp2 31tJ倒9@/Ԥa4eKOzUd ĕ%QǗ_S>MLC4QOy$V*? +~Oh`&DBk=EC4-Ԥ[ 1z%I~1Fx`FIļO'aP֨:K [@|E> B՗kIdeIzK ! AGj !dnwË吶(H =Y e&>O M!'b:zh [pl2"W3d|ϋMl+pc@u Ti2|(TșZlӸ"@ ݷ!3LK3.V!m-#np'I\@ CH߰bN(1V4n\NJ'$4:|Bz"DŴp$ B*]:zp%8ooGj~ʷ__ugjG'o HԘz&ﺙ$6?w][p|Ad՝} !RtiƱ$oEգU5=5VŮ{  mK_Oj?1B"^DyHg|GjeTJim݉$8 )P!`3Uɸ`V[u*#=o9t^˵ޫ_kj6ovүuk`qAksi޶hwd.9-;0e=#Ka:[ֶ.jD%-!N-"7PRp?bͦ6?%Nf t[ 3N o0 Nf_ =La-khY][(_`.,Q?[˸[i"CzUdBQgՁfCFoԥH0r\iENl7+;bM;5pPAĻv@sYK 4@ӒFaBR)%&.F$wA Z֥Gt ~&VƱ d 0/ѥh>UIFԙKo)Q+Q Y? p'rV}4z6 iwDMys4nM5<=@_$x'Jr:n`= oi;Ft_Ui|:WӾX͵j$?'kZR@8@…-G4P ̭ǯ5D[Rۧ-h9Pr lS%ct69oVDΝgA)RY1F&J5]O 7L@[KL?@d3*T2Lj|WE uΥc\MZOď%8$ ͦ'[qkxxfNlOCA·vXQ:ҷ[iߢ%J0_ 8T7ŢloԥD@Y $XZi8@ .Oӓ=˩Y c|[Qo{jҭ) A`BM˅w]R?sO^96 NڜܔLS dwl2-:EcKUu3rC؇z?PE4A> 2kFMM./AhH.(!:VzT??;v?U_uyCfF hn#@eYo۸(ďC˘mT:v&ݘ cmW/ٴ E XzSQXݰ5FxL[/ٛ"+?z=Cɇ{ ;ᘎGqǷ*C7.Hɺg<]Vz8t 蕛|k8?c\ 5UID3Va#>a\ ƹy @abKP}7gO=چ"0WT19x(EdebrTt'OY%4D}uߐ*G}^d, Hy+Lxd46Re2G{yCt4ȵpj=K %*Jz U!(ַ7 BflWBgh8KN6TA2끆/C@[ p".qDVMbi-ߙY •R9Y]b'4}ט!#W9C,CJ%3=tX؋OɢW*QMuñäGxJJe N` q;ASʹضH`SEMgS Ή vc},m\(xS/;CI8BD~#0󎲭VF b!jQzixZQ2{\Ne޶= IV"6 ^ `vvN4Bn&) l lƨ2paM6֎) ,+X#Y&JaBL蔗e3c,cY-s2,DK2Y*W4ǧ*Ӡ280~qI[cxܺy3$V'zgң tR߸%V<7X`m7 0AUII813RBv@< izA#HHBL-16-_qŅz:[@)kZY9J2Bu\݅2c 9na>61WsYPt/ܼ-v(< ;oEI-- 5]dGx-K{j^ٿ1J~~'h\U3 d9;ݥŲ2hP^c3~*g4Y.L8Ġba(1mކ#QnK) u|ǫUi2oC T$C C V_gͺrQx⤹|yt.G;FOB9a%X OCCN}DŴmWaOM3AT6uYGICfbKgM9NrN ?a%(۱՛( kKƵm@CE ƴzCޒPlW_{^V03$į076}ҼgZJ,bHQK٧9+—AYCVH'Ģ"D*l\Rٔ&=uӗ2$\٠ ImjcRnHE/* #=ʲX. DU\"6Jh4*nbl|3I=4ɜOWlhlO%ޯuKF$q\>ZCD*0V.oL sU U˄63`b%r"H{. X o5lQ5 ~mii8u60sOr L]KAW_ߪµ!󆂜 bXF#5g 2g,17VAh%!/paZm?TDCYQ}OT"7{hpQic9!aKJ1V-m"M&Z,P`Rirg֠¸t]zU9bW75~ʾ-'xBɄc-t)p?4!xvXB߁OĠ=d"˿A]ȋ D4xó6jQDYz#tiIquԿ*-ۣq!6Y'XLwS3~y}G#/z5+YZkDߏ[1 j$3V:70DoAVȹ\) o\, 8|UqEr _%cFz+\-Gդ-?NXs$&m|i j̑JjtԃT-Ee7*^L)?A?oW=b69lnDEa?|x- ;,WnŖ@wV>,sAî3U'W,g g8Cֱb1n5ZwZEA~jmF&VgBp$ vt$e=rmٙӧ eGZ`Z(CjeD^`q~̍e}W󋅡p\Z+qxS?HҴBs3˱;|ȴ.Iܬ }o䠜 Q<}kC)-q,yjj%FNzܚ]굚35nIqheЅټy#Uxe-AIc*@t7kk|by#2Q ϰFVxZf @E)GKJ n76a4.ˁ~is vda%_jh7N7uNa[R8Ɖ.Y1XS"J .2Rt-= `T WM'|F{q|=qg}^fEyx v|3N!2ά=,{ILa;Ob'!t@Hu֌iɱ&n7̣fj.cxh?.ح k}([v ΁=sY}zeۇFkv0rμE;T_Z8X y?9ȫใn8jD^}#':,xǍH+89': ޵>=E֞Li[]Uwy߇ *.p5g2.lt_AtWuÑb~oM):էY2yE_< j츷2pĭפ)GK/bM>""d.zU -=ƠnB;Qx8c͋le #b JHc2p PZ0JCiKMHrp^*UFMO0^ !cƾYa$<2 5Q"ChMo 9,eǃbl&{/kw-?&Uckh/h?I<1kNBB"Fx|܁ :PfO,mКO^XOj^CTbl-E_f caUȯ}g{aD%)Ci)T0 Y72,sʄ3_AXk!@R u겱)$t|0Ԃu2k^2/ai<} !>+ Ss$pxȭ~Uڊ ۨt/R`(eFH!\D x$K.c03Sw+QHz7I̵B_Iڕ"k V-U3@KmҀ1iö<{FjW^<> ,~hW#BT9P,_6cK+G~\v`rzp=eI1C$z0g1Ӛմ-Mz⋊ۉq9TPO)ka>Ƥ({ ItIcx=5HdmC@x;4ɈMUOTNј<\1B{t2-V !B`)K|r_o~̅d⭶z%I^C#Gz} L5$S.fk7AG\"TvpX~!-5HCr:db4a}Dd()ɤ/yC Eiszn"N}H,"n}@*wKeF9[ Ծ[ bz:RDd 2ݵv:zW)2p|x8'ܑ͖nW6`73e}7|d|ZEksa'[[?BQVE2c*zQxi ʽH $ fF!&Ɨ]KBU]\nLjZđOe?UR ܭcEbSWN8]W 0ӼmU)w%5MF66@!d ̕~6$~FHlU }BTTX7 |Nj$u̵{zh~mq"[kqC^)'N*vQ,ÔuK|%̱MuODlOfesGaba#;Z!iW[Έ ڞ^;:LG'xӴp%jz[KILq@ oAӹ:t8p2L?nrilb\Ԟﰻ[5ll/kWx\G-{c/ tT{ȫ S=2ԾW͵lu"V ?- ~;E3 ai;loS|iVGpt߭ssCa,2c.4ڎ;c]g-qAXoߎ" r 1ws6Px,A1W$s](A"Xy/]{5CSv;.>Nd^EJL4Gujŝ)_[sf4׫8 'ř2;أ$tez?#mn%yMjiۢϵ:șNm$BW7 lHˇLE6gS@2czOqS0-PHa g )Z;Ň7hҊM׷:n (Pf8 =kn *(X0L6նOM\̵"l-mq2[W/XvkE_sC(lե匓ԪǮVBaSyTc cj-ho~v}r$\,Ħ zƑ"pޛ?`l ޙeyËj*F#?QҡWlZ[۶jC/1{eVr öktݏ~syAcOIK9ΐS%5=ht!}''@K3^L_Yu#g0JA(5H0 {*HqG_aaf)!2ݪ<Қ {Kdķ~ElU~x "/:C!(zp?^홒~*0@ճU>\ zr `.p_DT@V4vM+c (ֺqѤq5u #w!K6~6ߪ\-4"c{8Yi#+ (="`P MwqZN-_K/f 5.H;,onOv! %Mҷq|I~9<E䐽FM̂s:{lcdmejv0XH=_):gQෙ#A 4NWFKc6^`"ա(H nRCwaEhW]&ufއ:qοӵ ȠyFQ@5,MS{ [87`8߃q3~ pڑvmN! KQlclVe*5-ΜBGhs@bqjv=`߹xAIR]_%R3y^N@/esKnlZ ~L4̡u` um 7]Iv6zApϛfM^Z&X 7AeҲꏼ?mE-擦 |px,4}hū㖎P,)0 .\<HzkQ+ᙊU^jY7!#ts]#I)ɺ_&%z]+$_>kPd]]NHܢUkNX3]"4)aaq›" ^(=Pa0EOs4N]9;T/+IZ̫Y#VL+/KZx;;07pTaZz,4U qټ* I*\ hDs7fmH\D~c:vnemF󑟥# Yd6$xH&]OܿR:πz0.:#)dbH4b |$E?jNc9vljB4m'ZsL9j`^DVs=m,嵩_z>߷}EX%+rTX<_DZPk D³ S}By[58M<+ڻ7㸓4yREt!Z#Cܞ嗂o E*-qY&іoKnV^e< tw._D-ZI>A ;v*tֶ=}-~ ؅j: 9%H:).O]#'[ЇDǤNJX`xm2NRa"5K,& !JX~=+я@C4))gާhdϤ|B2uTXDsiN8dz@!4 lHsK(nfSʝXTohhr(z-))ʯgy{* y-%I,̳ǙFc0KCASUӀ F]a7I؍<+Kji8׎UVsx.w \7#9HarB*NN-ΜLr'yb3AͻIiGDQ.iQe=7u3k$X6.x\r0wтCѲcmԙBGiƒ"c jyi4HB1MH,!wM|mYpGCСgKA?ڽ=N~܍z#ݟXJF zuRvLy)yIg?҇'=Q^Ey-47od%1}HSd{*Pɶ׵tEWiBs;+Q%ۈ(O*͜ .:I}jR0,0Wr'ܳzRl%;3S8Nd"w2bFhlQ:)*飃3kx:TMtu%T-nLoջ1ze"'V6"fນh3=.ɯ4c9`@j9A鳹OWCKySQ1(l Wyf2yBH=5̫ Q`j̞Bj1kāLkhXj(0kYmƇW+HW/+yԑ4j.r2PQw%*| %oA*SFZ̡13)7,׸þ9:?cypK`-,k鋽j,ƝfQ3@Oo钕2kV!#-(PJ=PjDCֱO/uh .}&=ӏ9IE5cPiuuFs;RAu;y'36#Ub;9stQUb\!鮃-R:_ Z6ɛ*Ic`8q-ś<ЂN rZl~7Fr{çGGai"]0E Vڙ S0DOdsضDAIhcfZAH_'VH U^Bl"^ Dz2LB愓!LP&ֻ4cQ y@׌Z gMj/s kh;Cp}=Ef+KX  u1G$Ru>yL bizwDϴ{f#VVdmmTkIIeyu2 Z{lԳ44-$3&ׂ$KN1afMȲ;."@e*Kb-%{}"2s;)zyOU9>j>m3ɝexhG([)Iwٿ$|ޮUѫrQ<]#2=z"D[ )_G2µ2ufp-lx Vi 1VO }^Gk&J&Zd@s\1p1B)?^`3-rp\cg-Rꎨ(K;neH9.8}s/%a9c,64_6Q՚UtC(RhqЈ=88[x5#臚,aVB@׽ T|IiXA"kVH-`u+{;]][_Q1_RxLʼٶⰣp{#G < r&o'78[Xe!X4Hpt~Լj{[PxS q;W!NJZ6*K ףDdtlMzqYfhw_} Qr"/Jg&vƭۅOK17`丰8pm Hԍ&w^6zNRکN@JVB.=594G_%9,ljCd`/H頪rio[4thه:v ǫo/J4xyJb/EyMt\mgiQsHmqșa'{E8؝r{0=)Uuftv\>_ޯE0%JPP@ ZSW튊ʙ+$oT ;|eYA* W"}k6YrѩO;L8\tH7GbPMjU{"fZQ)d vYU87)w).'djқDkm.G SK61G)h0y+o.T%||zgpFPufFw8 rڏdPr8j{0{\rxӪЅEj5*ڟYu:ϐM@Z^DLHlOR'CH2KVvf8Nyl3%كs'7U:K49"!KanHuFF9+ vǁ1raڲedx)a4p0im2r'Ɔ NOᱨ wD(eƃ  iNť? 9%m},i=F۩cXzk B dcɚ?)c.*m>,W18+]{24tU=|&)nv~خΥ2}\@<8/f@8- fUpv1n⚞ 1[ AF|C1CM@ÞG3KL7#Owt}QH/5:IkI'Ȏw̩ "nכrntbeK)p5n:fYmD b|Ό?𖠑(DR(NpBp4TrZ+)1~2d9iRҮ,;?|bwPp-hFY`$+H) y;dÄ#}.(5WvٱwQc8_ Ƈȷ'JLM]!C y=hxXlzG,hܙ\I~mt">}/NvJj9_[`>QRVq;Ti.i%h6@!@لgAIqF"t,Z;">|t2I 杢k+?/ Ω"!wS~ c{"Z"e؇PbW̥E YHʟ ǗU@wtooaDt:gW&Eø萅-yEOh$떪R՗KЈ_aJ@>Bu1K>&mj yqr!҆}w5@}qvA FZ/UqpO O=lW" =*R_aj?Ly.m (1&1Gr?dlX\`/EKjOj=j-JEhu^++/}/ia]?2W5vo6 f~}_BILCwǬF!R^!(^T=>msQ>_ TȢp6eLWcB«, 'tO5oإYd?-ÌɊD KXFƋh4'kwݪǡmo񬻣pʳV)Hzډ΍7a7K>Vs!VRw"|I@W 74OA n|/f'4#+aԕ3!v3"iSWZK꼡 E٩W*Fx66+mÖk9(z YE1\{C-7y%ʺv&O%>ʴ:o7bOmوe6[ umdzw4ORaUci\TWaa<ʶK'Bx]VMUZ֍zĤgk+n]͎XF4-ꕡ\xҭ ڥ5h @@:W'yc945 Ƽ, 9Pw| 0So\E,85KQÂ_~o(:̀A9bW)sBQ*$|(ey]'u.# /ou)$ch>':FxdkGc(.*QdH]XbrS>c']4.){AREQ U&}qpռCFq=x^6lL* dBS)r{{?x0NFo?j0~t/"`I2N uI&=mDd~מ޵z=[ON.Ui~4Kax멭qR 뙇#DIٚP?Wnuyz虳OS)y&h&}ت/W>rVZk..Zw&cę|4c,㬣h,bɴ8X7wmA a?6Ҫ-óh<Ĵ `5loEw-=Յ^ck`~}4WIQQD> Rv?Jl~W kn[Bl3Z֔`o'C.CPp!]^Cŵzu۩KLpgE*&VP E2&* az7ESGBkά<֩K'>0pC!Ta1TZ≂oԲI({!IrR?2.e)S8|!@>idRJd0VKE%աTq @ hż"bRRrW\30>jWyrEa+~7p5oYv NPpkUl ʕG`ӡLm0FTawAg\=A1'%`g]7 $H۫ ]{;e`ؚKiEn $R`$b.Hn=`Lი-C*j{Qh6lCu l cr4JVo)Pf.K` k|6>4Xk1iP-`5N1MͲLB ;~I .<6]]OPPW#lBԡ+dyLau7)!s ,)Pg=0^fmD/k9Q7Z`v<*/fI!67%t6GRZxOؑgYQgӾ&]SiR%3X#Ӛ˨>:Z~fjA~I1s11#AǴ}GRb8^?R]j<BKw@ S\x7!vo>7OΤ4nEbH o8ЩI+YVNNA^_ ?<*-z>@w:b&y(br_a`J;R Lx7_`b팓wW.)뒎 %{z48$&%\v&n<)Vfmpg_doXR,]{Įdp>a#B]%sR[UIr QbU40>+.שn+F>I .};7:D(/Wڿ9F_f0"ؓOen GOU_K }H!y:vr1Xc͈(@n?>.L>`5 5Mh#!ýDNkjm_-⾓ɗck!`—* %PPz"8OLb"Ќa8PoQBMȵS [Z8з mXPi Xpɘי~R'$/vtvLe 1!~*aݻ+gH.޵Y˚^$b$V9":mdCSȄ + X*^!ǸRӝxt]"{ 9^JSH\G>vc/;CC% H|R2O*F64'J\7aԷC%C, lb1,w9#(&t_d19]?)@~e9V_hlDijG9|ѩSQR6kxW,:\~u ^''IO^4bsamuqb;"6khOgio]YVK*V4X}`;{Ϡ`fg;Ēwe%̈>֫ }BDYn(_0p-zXWj(/R-gdCT: ҷM[hR3e]ƝelwGz9:U C((@)Iѹ_g?D/aY=.1CX S4ӝ9F^Gtue32KCH# ht|3r7uX໎߷ߩ QsBJd cYhf#ګF1HC4Uaxi{s:,#'W 1Dc QBPN7fȯ_[1ſسq-~n,gD[9ɞӌMnрOCNJyݛ!Õ-l_4@MNgY@K?3^ՙ g`u҉6[d2榆1Fit)urpf6ilS<(2'ud;a=4N.ΗxزHyY[f,&"eXz4ӗpFJ{ىTQX^(A%I=H*p}BѼTb'[!fSh.SKv븏&SZK.U6ЛT~gA&xYöZ0 o gj -1K@s@ d\:V5(޸6#s@=@M ,WҲ5ɼA y-sM; ]2l{hm+7#ǎktC`Ke-tJsJ<|GrJ2K!F>F 81aŊ&J%7RR,.z8puYAb)/\ˊ ~,t3mRW3HWAx$aI65Z-]'Y_2Hj74*!?[&r4p>-p}H+0jLOux$rf4[e5q_w:c:$fjI(Ŭ̍%miNmzv&w`@v 2;v~-* ;Y''aBD699:S }kN%x}WQ^_$ k?Dh\{ڏ|>u:۹yJ-RR鄮\#]~jvsmԄ=\>:N s[>d 18CYaQIE9= 0eI>Jpt9Z`_Ck'^AEg{V+!pn{-,O%u+jt4֊XcJ:t"Sxyۭ} X`klk@g𞶣eOyjPLM=@Q`O$X}}:Lt~z[ۉT͌#eETUtkoN.EP V A+#e\=!|\+UM;98b|HB4OTo埳"> .AH;o>.֝'$F6ܛ,/QD0֨m䳃7<߶ ?TW=0ב {T(J2E=o,E&6 N@ZX-"LjVҬ#r񢑹.%\K%164 f+QpoƼ`BrDCF vl3$PIJфLQu]Q=-fuv7],[zZ ,,d<Z秖(UY~xIWkBʡGRA(,@NvbBM ;՗fդWue*cmP9 Tp+iqJq 'IW@%P(;{ JG;$FsFZZhl=Fx;ݳF4m-E|r/~yɥeZK |V\O3jRLv%_/T["&]aE~ 5J@C/qMm]h  6 -ަ9ި.Z 2dp  ^@-{7Zꎣ)Ǫp# )&Es0 a*Ԓ-#%ngjMJh"tFYQmrSRCh$[4e7Qг $:;i~a,cw<P2uf&xvBnf=r9~d"0sia_ݞ\:S)04=-*eC) -g*[AvE[l~Q4r]rRdĽ٤ئ_/@N 9x{2evLU랃P9% KjK}B;C T]i;=$:Kn*'T}|]UF܃Bv~@jKO\ѵ-WcN+?@@Sl~-RBfoUL8azU@+3ܧcKzGrP0wxO=x+d^'clـ&d{Klo: N`֣qۺJSS=E #QJ49?as"(!ؤz6D]טjߧy? =\2,W= 䙹D,T>l^z^&Y%;/Nn`,2 oD y2xkY;kf t]W8χΑF:ʆTp&m6qJ@tYX|qw^㪌!X]kz8 [[Xc;Y>{IzJQf;JyީIEcmɶ!S.s-)n|ƼH{pD(nGRGTcfRY&#w53X;u([[7(0V0A?Hԉio;SsʳÕ ROvi߭"uw#,/`4u[.55)vk0ck!`4+쥚 ? ܻENl\׽DcC߁%z̄JT;!Gqa̟(άHANM8 u* ړ |gs{˭Ss.]ߞ9,a|5B_Y^<(W;tҟ.4_MIhgTu C:";xcP!l7/ 5~/Cixubue0%O)ZhĽ2t᫔yk~pG_W)*O8B1NE- ?UO5X4> IEg&3]e8/)Bv낟&dRlߩ#~ Wx2cXêSq=@nR) fko2 3?,qH&.銷1cuy-G܄(!upAޚE=}S16ƏUGAUpOFWn;QɈ9t-K \EbN*ֿdh ?eq-v40㆖_Mu&I>kݸ:b3E鶤~z,Lx.!!Auc8VW2"&P_eN]ѩG׆{g.;tID!t|j*TsZB ckn Mm4w-9k?0lVm_ P1їX¾1NnED=bp% }X<~XX^^!l5 Y2 RJ߃ts[+ހ$ uj+fie1j*^f+V^9BBu3;i'X"Y 6'$p ?5JWPr]c%AdZIJRz?ۯ 0 qB4YъIyzW &3RJVC{g:'h"X )+ӥO=#XY ?&x[4z( Ű>$Gޣ8]W5m"l?`ZjK*rR :]Y~Zb7#A6(uB\UB+?w6~ ޛҌlt,BIki=uʇES|2.y-! WEeɉ.Ø9ݚ΋8VHBs#I4 .DkҲIX叔+qhK҅:1aمٔrjɰםw^~,%A\J |W_(V@c3鑦142`lP+D:N,d0@#YabrL݃J"6 VeYU9OnZϊBO/F5gm2;7H ` gnׁ{ #yct: V-8zvcVI;$ /YZ7u͂8=Hݠ,b :1?1wk})V`<1 e\𲢺%C9_ G複-xDs?mx%fpmXJWeŤϻ'%VZGȽֺzTXEoI / aNg<ɈެڢB13 Bb#0Yeuf7[9 oGL6U*k*M[z`Pn̨v \T72 Z=Cz<~Ư+=f$Q&nV-zY[Z(][%hg"wyƑ j=JTb&D>O>Iî$\C+2a/YJ\Ax2gRw*ˍBrޜvNaPs?AxEA  Ő<դ'V[A0j;P3H>1Rɽ5g+婐BLaU𲀢)ږ5a`ℴSF|&PG '3 %qDu}#uA64`rMuNڰћFTj%:k[P?uш6Oǂ'n'PAG+)ΎyLUq}SݨiOBgHZuL@RJK ^E%4N%"M)B g+nsPstWQAo8+"A`憎9[,]([7V76X3$*jTޠ)x)W0[SؙV I.8 tQZY~K{O2~]£ٮ!^gc7%BZYpn\ P+B^,Ō_AOl, z*1䛈\˙Z9@vtC;霶xKH%dT٫g3"*w`- ch<^E)yRt1ҟueX9J.e0B~?jĴGPh`qrۇqSOUk匷?tAu ?Xe@E9]Iaռc`49 N`$npaJUo惓mPЌCW=fǒ[PL"f]s3N,3tZFFu;NhcaF-,W>a}VezY]?9}GZ2z~ݵzc$`̡7V.g~at ,K 2: " o]/C0G=Idfb$O[Y*{/TXпM~(mWgEKSj/G vϖD8^L-f,d_6>6ݕӨǻ_Onb0PJr0LiNb#Ci Iޒ:3kVM^^CIh_9гP1i6Egpb07'sW#}~| ӗu֖޺W0LBzOn:kNnZ7BM9 !C3X((i>2"cfݶMc,}.('Щ&ZcZr.-l7-'%@[hP|o̝+'3PɆ!9(T\)fm0 {.ŋ{K YuB8fGJȠNLGQ4*/Y-NN43t)r!f" ,u$2bmYdljs@@ZwϿIS f33fB2Ö Nm [/@py:kTS J1(_ ,m<%|0uG G7LcD-fЯxm52vL?z6^{fܫR81P B}|R-q()E0_BKÖ<YұO_wH<^:93\ `ϵ0 {O!`Q_5He9noG?%2Mr~̸C~4VFmMx? mN_RU#7PE﮴YDS[:I+h-ݫb257?k^6sO87㨂ٲ/gfw-Vڌ-yC b$LC K CoϷ zcc_oV{76L浶̣› esSɻ;2q[4Q"ix2o8D?&[pX.ϢBnGGb$n]/3VnVwâ]]/5s9aʺ Rq1-V}ѐ5 ,$ϼЍ,ѓ|0P .@UԵMP!6~{\\2@X_/NAҴzkٲ /1KL% 1'^KOveʊk]@\UO>gxUZ}+bIᒐMYY <'<*d'?靛D0wP}y:qL YX]X\לM齙YL}]|;@ɗ8&]y|҂  :t Z=村Y^+$b(B#jZANx9^O-PYCǖ0;kL -`"iZ ,s*.W_F+o5y.54a^9S] 6Uxhi(˭| ,!@p/< s`6]q9 6h$9J󈄟%C*r+/rfy;CŠ D_0Q|:_z K@(G2u6(^&H޽DeU .:sd%>c׽]LWw]caOͪ]%>ғQܬű %543{Q~lJ#d8qlyن"#,8G-?FR:I|4uGCT>%j^`NjQ^+3y'\\],o ?2*f=Om ſw@YNImv(ALhW߈G@]ӡGWL|}jn{25N4)7`{0I?41[?/N[}y{MU@3N].t~aPka(~.F(דx[R,qoGC^m8{hk1L#u}O#[%x2 4PxB}ΛΫs&-un.l³+OC ݗ>~$ 0ЗTÔ E8ꝃ}2L`LC43ScE2I葟ӏ̶!â5މP?h CO@`FseevJgd0g/4&4Ϻ+"ݢ!gNRDŏS5dOl5j`=%k\2As:qLm+r)/2(H"5h~:,i0>dA~x t|e`IAymǕ0*x'Q&Tƀ=p%seknOPQ4IK~LW&"iR^ !f06V{}@5; 7,"̵GwjxVR) Z`Z5XU xC( z;p!x:Q$2HO&>ME2 (jH9i-k>e(P&₏I$pke$@% q0-@\YCbNH3fbc95'p]$2΀ܿ#~[7TUb%0j^8Y*_kz,wySFZo w s y  j쑃yalRKY"X/o9/Ŕ*xvD}-sqGhoӮXji4rKqIiA4VE GkgzeJH`>"*fM2H1C[TP8{QW$j[c`Ml-6Pt& SF1bzlKk=e<>jH1B,ɹsQ`%e{[+$_jI]ῤ'RHxGm-C$)6V{q6RT[t 7|SfD|,ʋv4j1}Jx'[p̯Dh2[FvgRMzhٺCzXd-ZX]7(B?@PDwKqNFli8AZ3 7p RTR.dbHX5) >MY3)M| k\ўvu,;b)KHw]!8i׸PJ0+:u߱y{)Ib{j1( e&VQ`rYiI`V;+Px5_M؂Ȟ*1eZ-ZVSi\hI썎#z[e_V PI>Xx4 v5_ u׾3jr5r6~^uyX+-"` ҈v`(ʟGOLBgrL4"܏00ftQRs{"|T?k)sC lgK:~Jet,-8y09onqoˑ K[2G"jQh-#jd5L`OËU-Rgt (0iʎ[3pe}fh]5#޵U eeS)IkPseͣ g^M@&_9xۉ> UgypM_]VB]1/ ?5 0F&;+~BP|*A =5J++]m_rn$դ\ٕAZ=:& ( pU(>Uڙ4%[Vgm-2XɅ@oܛ5*2PuY[hĵS}o=M€ax ^Tjl {=N$o$XF荣HQL͒X ٩mx G9g" <+lk's۠';5*#u !c|jz d"> W! T'z^wXR]pAID.IGd?\g" HS2p6HuHZ5ߞZ3gEH]eM *頋)C" _M12BCָ˜ozL ˇ0sÊo}%2 V5'Xu>frgD4(2eu'#s $֘ q)wfaсj|J:{n>$Y gu]B"Y^9`*pNӻjdSv%; YƤూ1ui̧vPvN%=O8KǹZM_b̑yad '~;n.cd{lm悮(K h$`[!湉ч2D !.rzC ޿{* F =pZt,(ؐ;>7dFlE] hӠ˷*HЛ(bd)NZ6'$6 ֙zƱĶ5$];X,Rt~y] #.\q- \ZVYb'c~`rSsM*$8[R샠 LӗWؔ0ͥlėthׄ{8 hJhamiPUSȗNY_O}onj`(xi.A%!p ˦$H&%ĹUq'p`zyF5-`fR}GBYyv qrkyB:]w'-33n 9G=V- XM=_*Ճ$ll:U9-B\Xx ?!ܖG-IY\sTQYoC7Dl8 "#'xl!X%Ž*- 9[ ToH 'k&#@dgX^QjzPo-|p,&bJc(wۼXt|$gF}lURmf$)5M7K#ٞon8²Yu x~ ШLh5Cר&wwMdE.|jgVJP^s%. "!}z_Avkb2v8 >E.="ټ~dQj[Qc׶=`ﴸoV'#mU#ާI:A+"mpJhPVEw?>oxM?y{]!4^ 2}95#C'ߩF&iC_ UӒ &E#$b櫪T w{:h~' ^=Jl=0 v1nLjKf?ݿuiؔ,[qɝ4hv$SLXf Mk_j*U;:ϟ+^oe됻kʉyqS@2߇mWGLX?T(V8H1ώժS|EVtԫr]u|j% }{eƯ44g?53Qۨ2#dʮ6 rC!xG5DJ{i. 핝E'n[jSO U,|2 tW^z ˏA^UFOj"h.s^ꌟnS˨OoMGm#TG8)R0,u#iZbuVK W8[ɝžKIP y zG"eTq݂Lc%ij+`CB[aoوu\ jH;X;ee4;1a\SBqc8@'} ޾PG K|"1c -39U%z0爹RD4;i#BKAGwt:쬻p8Ab|!WWͻ8 ʛ|=G.Q@y$Źckg~`v5룬޽DXFYo0Vl'^2`z_kBwQ>.XyX6wEde 8Ylf,v_@%yAK1쁳"}Pv7mZN 8> ZT?YiHBC&raWĢtlٞs% O vx=?7D}tܳ1GjUҢvƫJ^EM݄S0XU߱uvքa 2qnoBJ!'C5F]VKP_a/=j`rY*%K ѭO}_<՞÷)3 {*)ƔioRxQ)[v(Wփ gj&*'U9Y ˁҦxdms5W8lEfM<זUH'B:A,}Bv5wT*UI{o6̟W[@ 4Ra`Rfp0QnQ=Z@Ǧ8u3*Tt\=|R3> xfr|ݥzI\oꘇ `;6x䴢Bj4Je?e,I5a ;E;j(:}MEޘP3XK)R{P_rSwh*=@^}q4py̫TA9?k}?m 7'~MxG'GmCFפ'fe':Zz72h'9*I֫Ow;O$̛<.:7VLN hBQ_N =։9^]X1 M IT.B ckm*,&&kAb}{^ui]))3<#Ç'}X;miv}Q8к~ p:;nWE<1 TJϾAjߡ(SpgO5gn\htRs0 k&b'xo(8*ڢ#{GEmu$7O55xc_PEׅc[Kck*ꊝ*@~x!C3@X 3MU<(n&E d1dwe"u )q5'%ٯ"5ޣ1w' pbKpgLׂoOFUc9%M-@foՋ*7P( |.[ kf#>QU7ރ\f~s}KjRƎ/ArEq<]$}?W<$xZe(͚˭BJk}X {ӅpYܸǩ_M%T0n GJt#t_[en)'¨8(.6ߜ5Rb\=i#Ƶ2|, 2sۖΦ{Rka΋#)a`7PTFnJe<&XB~&;2YC"LP#0-*%mm׋)es{m,wNa_~CӁ\:CVWg 7R%;V9SʅmS5Lb1aʢ|wS$<_;DUNO2F\2:77ƿ[gqR^B)xQ wC[NWhHp,ӌ8^;lB֌ȁD Bsq\JtI\],`,f 2(j㳵Hl)q$f\sd}qpENxj~cx^(pקoS?6(+w893Fq{A‡FI(=p蝧9SOhV;K]-BО!"Nie^ e[54!>P 61fKTX³V0z<o?ű'u׋1C_z+yQ`bi IkVB&@r; ) ?2K4D#1i[iA:|v=|~qWw'}y|ſ9{FHM/ΰ(U"nLk2˿ aGf{c?!/A59&XS8%W#Jo~]ofc[F)[5؞ pFΎ&0=ΥP*6I˜2Z\) ygtv]tG6&GP=lGH 'ʎGjgܥ8SM魥d0լ%!=cI }meC Kנe=4ua:A NjLWxvKX"^m٩|mI,Llңkn۹ӲuԈ&~-RL 7b,H'ءve ;?6o>%7 +W"?.zgL)A<<+B`([5y\5Z2NŹ=IdIdsy1lQ\U\ .CFH9Zs3cpaO>ѾӼ2f[" /8캡K{通F=X~:7ߞ0 GoPP:rO!1pj*'ty  Z̎񊰈 K%uƇ@) C=K5AZ;u#tH0ƚpw-H|8$q$9( ]cV(fu۬hnc΁[祆'[c9npTUeϟNb=8\XིEF3χF߯#z Wtj2sv??kw'3G̭h#, *3ܫ܋ilO5Ź ힴ :pm@lSG[S^/ wi&jҟL֒iخ!AD5lPs42=(uDt*.‡y~]Ү4 d͏jwf."WPꔴQd)YalQ/7Vxev+Oa-7p4!xV#P#t/oQh@wj o!j ];բ%[ /Q^ٺr@0`(b5X3"Q,QcdDZe ܳ1,gֿ/J;̿[zaXIx8k/.v in|Ak,7; bTSMTs"t#'Aymݩj(;tvD w)oNLX'ٴ|iz 4>#-ԕTYccfvxeFǛ-Vv?1Z*a_@wA*n7fid(\鄲țר%oÞK[[U0Lb*Q OZiD>:lBv^4TnwX mO1 @ W6(Hk{pcrK xgX5 s,Nk=e~rD >cH xf %|VX H[B3 Wէ>?pִiC/&='X錮*AiY@BM-ng­9OG*2tR1'YnY]M%T=7ݣ| #T?;CP ^k-?toM%RF[963=mD*U|-]xk!5YOyιI ^~2EkȈ,lovvy'G=kE`z@H[xAx8voxiYe ²w=r Dȑ \!%z$/LKE^ -$}EJnv#8 6t ]m%bexdnvlKkA iȾ{h5w.;kκc?@C7Yh/F4*Y LHM]IizcC -TS9}ArK.;OnDEhaH ji-sN &I@e_~BtoW@szQ{Pn8M2/Z(Gi*¼nI#tf.Rc1:>0;h-i 3~iOnI8f,kop9ӽ݆zG͒/AJr-R+r0eK-I߻8 }qEM!~ƹ n{=< ^ - ucgc:!Zv6S:^{vg b-7temI?;߲>3Kㄮ\JmcHZHcQHZ9ϑ, gutEFkC^Uݷ6˘K@W\U{aQxuce #hLm-(&5#@EOȨ0J)lYGj+Z"yh`.ax4-97qKW^\Sc*Se;7(0Hsȧ6K!9S೼E8Ez<ֆჅ ? 68k:[KҏiˣzP$q+X+O;(3Eaz^ )|$K cb4Me<^$[}vdPl)e 8}*uoE7%꾃^Fx%[\ 璜˽lJ0 m r=@IiY>EFYtۛ˼mu R0 w/Dv AI:]- %*|Gւ=%m辮Bn <|,}ء(Hiy,ߊ)cUógà#s}>翆濙)!yCg^0žٽԍ8V+b(PGi]`[s߻OO_-g*- nZ$Gj^e;T*})BAq"K%-^PLf>d\8VB g+p* jWfg+)b #9}J` :]**'Հ\'? R"T \pp:ĈL|[<* rxYZ-Ba HD ;A-/dGut2]IӅ(cH7Tʙά\lH)*7urKCz..W7S&U=rS&?U-جz'7Ni ;)#64`jN~(ɻRAOne$uzu|T{kDQ#Ζ>\ 9OͺA5Ea1 ~O]}r+r$\zqK IZc*oԆTBkSc<(IrOPs c?*/t7GBDn _mB8.TeeMGB\*R*04=$l sFzXo"n GhY!d&v?DEocAQMkRx ꏺg7(ӾjCt ~oij$X ,u65 n5M:?Q8*"6pOwzty]a]Lkd`B9JE ·]_V#=Hh8u _*@hLc#TU<]3KgxE3~J1i]I5J~Y#PH/=gMzm,yeg'$鮛JZ!@%LwPokxS@'%ZM|v4+A(ՆIU Bd#Czws,H%+x hh8CJ R qu]F&/+]<[?P0՞m QoqxED ϙrKE00ç`1k՚li,!NgCI# C/?+ɑ)K-(7~oL45R},݇{-^^wPm֠'gY.ȰnHӖ,gs[NS6 C[ { %<(;O`$*%{ws.aT 3]_AI|XZ>\@C9Ɓ_f}:hl|?пSeqHPd]5(45oޠ)oX,Vzc?Y,O`hc٥";ڭNDJ W` lX6ZbWpqI-o0kMrxg2^,FO"G]N_ |S<];L0#9K*5NO$IE:iy* ւp3bR7}F>1@vN-4譞 <8ycKw"t\,Vk}& =OgRn8 0J0Ⱥ} ):yRLL1ZQ݌FoO]9>7OѼ?jQ~AUx[7ʘoos/(%*c,Ұ#Y_uCGQ8Twg$u$M`{gƋ >𚴎#:% 6bj_!S:EY^?n5Hs.pvJYO,SAr2_+5>0f}]g1PZ\,kX; ߘ%.4czGI;×gl%*b]Z pSj?Qr>ehQ+FݑSԵ[ςO,Ԅ -6Wځ&,$@gM-HND- 3h⾄>wH/{S[^f"Ճp6}<7 5cSqml +N %{fҶY}ŎA Kmg,j"z ~^yЀ੄QDz5I4=rˡO2غ=i>'n pԵ]4aEl'PzG ~6`[ _ LEY,6QXJPD)loh5=7j2Po^W% >̓2so;re(I>beI$ض3[<dž16XlXwmÜ࢑W]V?!xC(RbuX&a͊`KsDh&Ԝ8r|3{ɫ}?ɱAm-Z4t`DP;9"]~9#|3sK2|.=C:jQ(!96EM^ޗ5aNoUt^a׶Rő'5E>w1vuͨ糳%lr.Y Y۶w?6 ;ۅ.J e -`T|"=#noh4,#:=i<&5;l?L|O^B5f{jFäP?/%NL "˺i09˞5ZnH _-۴G}IoZ\.U(O!/Nx,k 3 |x3pgL+|R,\ YG)vƄw]H|~vB$\ADP;MAH\\3p zXT|KPo{ [Iq]F["p0M:ݼcD]y 5z< 0~*_҄ΐ^a :_}kIXbK#VI9Ph E:ʹE&Ü m|/!L 8Ո8E .}`U9~6tfhuaՌ<2.R ɟ[0kc&s3k/#6tQ8NPQ~74Pt *Z>L"(bTr \0iyĘ̔~g1&*gb@HX@qrb1PPb% -TA@>ՀT.uMNWa⫣ J2--k8bkҤH0[]Oo\aU,UC Cu='?ʝ FjriNJG!POBN{D6*v܇ 86p,~ѫlʾqvbg:|`yՎnq1)pnluXCj@َ$gj%9e®&;o4L7fCh<_ t3H:^v?v G W/DpZ~6lU A:DPX0l` OP Ȳ!QσMcd5(g<+QA0]ዥa:GPxk(޻ZDx6IdN7آ4&/È)e$B#S<:V&D7[#,% %W_Uؤ^4V9H~tܵ~"M7뷌xQvF}`FIfXJ)(۩t ue8#82&'_Au&]xϐ(P6e|l1.1)jq(νKƅ~ZH s.bxLᢚzS~?*HQ.Hf&QBh姩@`bE,By0W= G.şeWӬ7ET<[oX*Yq"tXwmk fFst'=z@60~FT؅aLǴz&tvz8? ۔]іGd!耕u|q$sH_Houf' h椃1 S[F{ߡz1f oev ]ZG8m0 䌶l\$+/)Ԕ'*ξƒ@ɽʈXwi߅:AA6c;C|Eomq^Lc&#}nlVQ80X0@ krt #UTe͡6Еg~\b))܋@EJW<zt G)3I}*s%XwʫQB}ĒKPI":-8*eS(C@N`̟-it˹Zߪ뙗;7sRk9MQmi"B|_ZZBB)oHϬ*d31GoGrK]o՞7Jnj+:8Tsy}A?+FK5NȚ&fmPo^G˜\X b\FhCtJy8 :yc@[{:.ayׅ7i; qkJ̅:5s^aS$ j&Zńi&v2f>'gHj:R%)Delf 99P d^O4Vc ?zoDgy7ds fg}$!=5kl6D^ HH(aP8ͷAKIeK[Y TtuԆ43E.򟧚f-|\W /0n 1i`H`vWIϞ;&:׏Wp? 틔 k|/Egz 01#%7RaphFvSaMf7 σUh/{a yK\b~š3sԦq",L[{)a[=/CG.0-c"Um1<Ϩ{/9& T{EƧQcս_5^ґn=N J7#9 :Rm:,$O,A6]0!4!I[ĿP0ciP}#;N(zֱ2o8D$<# WL?&@}T/xT|6L ˞m[.Dc wBFHYڲ׏?M nř" onrqf'9t3vp|*EY`xGҦ 6]<0G*(2Go46M+T"ea b{Z=Ũiz^12ZX/Ǹ1\RmY]lT\jvݖqheq:g`r[TKHdȱ™#2wJn;D9Au'F|:"T=ȻNϘBfU*Dzh6VPUerl=V[L☢ReaMԞ+ROWúUY-lny`(0AVIF,NM2W]#!VM*l7g5mw/i8=iGsθpJdtڂf>pCG%T,W{ \PM2_*UGt0pVkY1" p,/锪F/$8 yFF52 jy?C*W&T7Z@xӘ67xsO-?DlL4ZYaPWo+ fE$OT 5[i+;aX%=y~r?bQ30 zM%3 Iu+|&"yXLDDKdxNkCq薛w2z@st!r&C$޺5Y|i"GdfE.?'捥a&~l"-q6>Qv`Rj)¡G>}3T+Rt2<Ѱ+w%3J71:ؗX97{8(-QO^pe#Pb^6 rK_\+^@lE0#wws7dUPP]tFJie.(O^?}QbYُk&mZ--68W2p><T90T<8p)|㿫~xZi}8KLb_c3&dJLj0[x'| ˪![h^&=Д|AVƻ6<M9Q'k'n Bl^XI45燡1?L1䭱e!b6N& 3Wb=x(ezN{H$ބ蔍/KP]Y=u$ y(‡>`(y?f΢Z wJhiiJS"4] h^&w2XK }i^h%8yjkXqr124.^QcGso 5H_[ѤfN[F{-?QXp+lPWƤNF(<(hKhj5O4ZhIOuVBwL|< Fi\ZTNu;L3vHO\8~QKl_BMֈ; ̷f܆?ڼ7sՇkk ]ȳmY#9T'S+K\a<֜wk l|bR[1%_,;?deV&8ۓzRF[U-<~aV#jq{@ P h{kV{ߩt7F{"n&4 YҠ@\RuT'=侩P[# 69`:%-]83&5I:rcR0H }P} ؗH5-u}7Q֊vH-W)q'&GZGX ٯ|ΣE|J,txD>nNE߅T 08T* ~,e>@zg0 ((xx1;”@ (js\; ^yT)<9n ZUzUS):Q&R,VYvCP~A׼I`Ж]yK4,|9yS7ם{U3mm"ZS\{¾^׿T$am6c6ؒ4Y;՛ On!\ZypC`+0jc-^o'xÑvN_ ;0ϾٱbM2A3BQ*FJvۭb&"~+> 7ƏߓD'{P1s~횅/=!;ceM0GW&)!qzƺb=uxN)88$cݹN޼T*U 쌐q* }E]TMc8:VM $ ϐm ru v:+``Ypf yasɾBFL Z]lkm T=-VMG(;Afy*/c/! &f6bߜ:m7z:/0"٠1I }Gy9({9TgOJt=9$dľ?+6!"Z`~P<º")O .p.|?lbf&|&c 5]=CQn1O(yy, 1U T b-`!ߒof@p-q(@!ba&Bց#pMZ'(5٨P5OVpdPl%-YʠRthTg_fxAضҵy;)4\{/Nڹ̅UmЕOtM[8Bz0[mgz m&6/ ! ,TWݵBA.O}ta$afNFm|B4f~+>³Ua EkC ^Wm:u-_@|袏ejS3 /jⅫ+ -!Ylq98l3BNi-܁6BZFB,VtMc$C٩8܇̐ n`^S:V^!U;6a)k6yrY-KjX\x%c!zp?}ݘTʼ47_&D4%,36/c&9 عM9L@+t㍳9|`KM1%Ȝ ;vS˃`!^5cΌh&upbŠS ѣoNp/? %9˷ EiC'IR.X ppN(lt_l(S4K$SrD|^>J7yPfp_KwE rmN!yX+{D&ӣ2 9]ߡr )o,i&fr!L\ |Ӛ2{}oGQoB창LaͲ i>VN?%`<,\*ވy`_3;~Us,MEtI6yAcB 6h#ݿshޫA _>=dĴ(p1APޛhv&ODt 1VlE>uS}f"LNr=; `Sr~;n ߀IiH5ይOlzh[fNub_U{r ُC :xakYYFt Z, J9Y3l)P;uI%$ p Ǔ=WD< !Яw[JG"qםF@:pNM9:^Qqy$9I>i!]˅i1wERF 2!Gԅ kNWsž#6 grM_|{`w60o/j% V4h;Kțp9,^374 3D̿' :ZAĵN0`96+P5ؼͥD-{*Hikn.bhڅ"1 e)EC$%|3X$ORuE _ADgqH'1>Ku sʌVy| oU q^|N[;MX+O.@x'}zwzeRT[4ChA\+ la u#3'(}?4 ?=Fm]C֯l&LD~VܞHm57 LQGq"1+OQZ{KɜDKX]Y4\s7El>UYٻāGA0=SlfatuZs~ƫkm߲vjC{5Si gî7^k>+$x|'c7 yiХ7vz @ -Y|CJkį!N3ʽ_FB;O^>1L)y4$tPH0\0#!RGq_}__ İK]G-t Jn!uL"䭔豷7T]pϡ{<tKxLS+JTB!KmMfD?M Cs&tf 5{Z!ksrnGy8IQ(ҊEE!޻jA۵`Vb@W@nрgtf荧o~o@#asBjݻVn= `O.}8w5y*ʖ3X~_bVK6{ kRbHAy@TCrTMBN,ʙ1MKǿRC].?wpYĠ gh rc%Sz6)*j"ULY=^dlSTe:K.gĿ{;'V^ 攘#e"b>a]T2*GWmg꡶( E/Mǯz kqOY0udxtw[!s!~TOXRĬC)%0SҌk -!B~hfoi@cWcփ&Dw("V7a{':R&'X-=G\#^:K3'* q?,Kp )y?"6-u$k)q22Gk$ju RU# FkTܦ'8S564ć$sܾT`Q Ì 90~xH"Hwu6H">f^ ?xЁX;"_ك`FM:rbpn(P Z 3Q%T|ؠM{S?8Wz°9c8D8dQ{@bi Of}xp%B/-x Bk7yxܩ"SI@m} =O&n_&Lo?v]bN*j3KOg  rf 5=9QZ"#/Jgj˱!Ny7Cl#`ybN|؃O"pgXE (th7R<Z 3 ͽOd`)D@l`<42A1=`$[7;ֆoޓ1n1nj/puQͿ7([-24]#Y){;N쿣0@Z\n,,$<ܷܿ](YWWwjӋE 1\{UNs'DQhoKdG\Y;1Hr_l] (Y>@Q;UCNrNX6"(G+؝Th 8`!d?/݆iȉg޶RP.3楮fs5]"paU|a_3"8&<Ŝ8m@ԙbەߌJXLt>)dͳnjD<g~]oۢ8"lmă`(+o6J&4ܗʣdYX?U"H@Q57~ͪlה?hb/S!b321/v?) RĶϼ%=q]8*Bm[&DJOǀ/(p$;urApU]/3>%kWj)fWh$fÊNTR10!gV"*x#Q(嘟:(1+t1hAcG_":\̫._emM_u?z<`Î_w\%Ĵx)O$R"I/,2GknP5{`An0'6\C|=RrWVQ)8}3e#E?u \CCtgB'M{÷")5R-}NӍJUğ3Xʻ @ld_8qSDd+.NGeN5.qb*l=7w-|IAWÝ4 如F!PU(Mˬ&s(V?zAz:w!wfSfu.&7n 5Adwn%t bmTY=]ք0J ,rJEDq4\Yhgb5Pzd ; \>r]$'ܼSȪO]l>F LW<Ư$^kj8$[ƪ;B i(V3=@`= 3|O.RD@~#[ ѷvQfE؅ YbhڛrH4pU׌t Ni)9y y4t6ާ8 +ҷ K?_^de39,N _kQh|k orI r0E r66-z17vF2Y(🹉v`8,Ar8^mH'+Xw/zŻ`\.ƫnΆV2~jPPA4! L.VMb!}'` jH_&NvP;vYpdI&Ѷ?)=t:+Mwq Ug벛#% ܍ !tQ~uJ,7AtÀru=Ai ^&>+';ã-\+8c eir6UfefnkHXg2_Þ[=xK;: d_!I:,X.Vr Jlbvǽ e~guS $I:kާUM}`53 rwqO=B[. /`v2aoU4LY/a?Y^*l'5zM+tйk׼&Y.0j,z@g(;d1pb422dz5o>1֦ͩ_/LW *k^|<A)i@`qCmmR)ϸZqұבXndfGv(PW5_8dV9n攓2\ #pb\;a iRXYWbjrO+R!R"!> \w+"7! 8L ]JDk;_yR%!F_\,vZS]UBeU[IGk{FA! "8$Fc\s͘p߷JD+P,;M/v^_g6o`]"&]9eƕ?wT/ 8VBdTO@I5F) F%I86H&DňLs7}Ii` jGj$,ˍe?(+aƺA9{(c!!)k#R{:z\^g֭Ց>bNY: NgԔryTcvײZ+]ik[DPk3Lde"Cqh5up!qCk5s(BgfֿX 甚K[@L^$f ''pHG&Ydl}RhD `], HD:{mTޟgSŹ5%r J 38Zmdkq&1Ĩ*ebO'ސEeܻ~;Z'FY6)cL*tݤeϡyTĀV!7˱h 956Z[|?bKlaaw+t"Fu.,t+ضpx ^p1"I>Zu2J2ݭѠ{}i }!!j_+%5(<3EPxlxa9\[{5Ƭ(&>ikWlN.mtkp,=ۭʈ5I[[I Έvz,DU 0 uO}RqRrm` Â2bXD;zT!ȏ媈PI.!ڠkDxueA^[eQZrJj*'j[n 2`b %2E=qY!dìG31xb$T CP̊GP )5-%ocP15Uyd=t0 ӥr]C^;Q5I16$Z_873DIGd3n/ <&dY@Wɽǒ RE) %t4{k3cqf9( T 97IZi<}uT?aP{X 7`QANp+LF{ m 1ҵ߈$!8O\ ő=!Oת_7H'o}˥JG- ~Kĸ] ńYEaQ$Ja|jc*I Vn^ЀBy+ SO媊4N4xs:Ȯmp$*oyYƼz)r`뻾Tz<=*=.c?#A% hW'걂`D[D'ʅu,TQd[碘ɿD6WֻHyJ#ಪ?m5P"jgZ*+Io`Um!ٚ&ߵUTmWwfC` s~8SU&Z_wTMI\x{jQ6m_en)wtliUK)ZKI]@#"'֝&M֑N+PرcE?w{N~B&%y]2ٛ]ːrM)p'Dw?|KK-5Z+"=vkBGd|Pem^@: ],-!M.\ASe=j# yHOP (:S:#ӾoxK.`Ol@"G1"-FbF8ٴwf ɲ@ SZה@ۿ[衶3xҐߢ3i4 Ll8ʟ-v[mljc *L'$g 6x] 7\rDR XAH}MZWS2*"3踖YC^YFY_]ćJ&ӬEuh qu/v<` $MS""m(}Ƶ0݌^MIUZQjփdQ;;+!˛MP5;2('&ޒ,hll3 z01ŒtɺjU/C\337qZ,pĚ㓓hG\Kp;Ff;hxk.U>#|҅PD`{Y.}(&}0(O3To1¸+ qF23@i_gG1uZT,?3nuV,P5pڿg=o^?6Ck*o[WJPl4!٫&Rb^Jˆ8w@7/75w&S("4oD29q c;'hm"+v"qDZfB ~ZVX#_d? C84Chf̰J]iB 竀Zbr%+,WwJfGV{Q}!Wps"\ޭzx۰IMCk2x|r S6/5D]}FK|LVOd>1vȻy6u^Αթx"sN)^>It;|xc@WòŔJ[;*(we.ȹ?6w؆tōu3?T0K*ƇAU5f.K£ X̕TPN!01}h[~?(wtwщg_,9A^ѵ"c2El{me= yhv+43~s'`'4BWy b6}{ ?md`ڳu6Rv]j @1W<JD"k4Kqc[qvˍU\i(@E#6*(#c~~G$RpJC~p!m7쎥aʊU7Odʎpf%g 8_ (U,/@[{ދ0Itq9ɳZ!} q`).MplX78#Fz5 мnJXxjfH/[1;EٓQk9 .m /GqMftbRHI .x:J͉*1Jhhxz%֖&*)L# lgf$kB1xu bU^,|=p @=&<-v]F`{QsnDFu&,mcx˨ nmJ݆Qضβ-LcJp*nIV^XTµF ѹ^$m+ o1TRW7&KE8[_ xƳ8 $a·&C?l"[2_&wV\&07_ 0e%bO1}MXv{5gĿ$/$|/ݰ$Ru@bxq'.HM;^xضl#nC&j7ٿ9:\4>n UlDžP ٽC$٪Wy#L%qøb2uSݸk,<ן Y=++]9D:xNX)Sn*j džףz[p]EteOӅ@*Ozbjs҄#WӆvNzF:QyP?|E; _pWx.W>9 !F\_Cy.E+OtJ͒u$QByDAtOfWi,ڒN-Mpq""D/XV:B6Kv~%ػX0cC3r`3㻫W7z-}: `c{p}ANdǷSXĝYW>EL$m=qIg] $/MjM"=i R dsU}qO`TDbE.zZgJ $C+|ÐgB_yXe%Va_ dC#/'q6$ F o qH1C7=̰o9uu[$Ec }v"Ђ-y62>LK<*BViv[-h)o,ac{qxKYȇr^j&0!4Nx A&)R?@aM@R{I6:3^NߵEr1"Z*Fx_$qqJX9a4#"F'R]78u5,ճ&p}t!k6}.s'~ákSM۳f<- { ie}VX}-2魁3teOeNof4~ݧfiϾ}^xט}>D WuzQszaVmI qk߄llNJ| =VbšLt ^:r519zWϐ`C3؋ J5?]LՑ~Cks;{~Cj:,Iɞ=eF.h2]iW>cҦ ʙ ,נDTqZW)S؅'uߔI# ܶZ-@+Ei{6T@Dt sR @G4%,u=.SAIĜ}[W U7O`[JE炻$SR Qamqyu@(Ei06< G 5O)whY-ڟ(QIrMSHmKd^Tk M5pm̹aeMǭtҕF:RyڹKxK7N>ȶ }~OU)]2CPoE:-%dyBq #Ύtr*1&Vz=#4K"4 Г)NtC?)H2Gj)Qb]DgEe,v.mdWi7" ȡz"Oobs\ i;#GWeY1PBד7MOe?)>! {jP=kr om ls gm*ozZ˴+^K|V oCmGl2I G1Oơ! Eh#j)vщyىQ5P{/0]a eוPӎ;R̸,n X I\-4ƾٱ6iDZxje \Zp|^HGsuo4;OTVx@lK1e~8JprL`OT1O"M`݂d\j#Xs1b{(ZwgF$+"ٖ3!6n@KB?WEf&!5s)25~h!= >ͨHةG gdN5Lw$1\e`@(䍥ltpH56h""¼`^o4 u_TL*Fl%xiC5!$[u_sGt&+pl>>چ*F TڼOAÎރp̹|QT#UH~qSAüIu@ֆteJW{mxf'CzO._(:Ln(+[쫠~:)29IsXnM HfI.J_GX9On; vESAրd7f(վ I%O3N19ܐ6e;Y7ZY07M2=ĵ+Eۡ ;l+eqߙ6#tT4U*h!5O:u3 ^S('wePtKQ܂ jiF`7Q/%б qִ?ˉ%A)9U4X[\<xRZw?GTøL/Տp Ѿdι U"GpcU-PI$x[=O5*&\'ftǓ,QRIlG-FQ2o1!Z C0ؑz,Z??zxV-vCaP1MaAAyÁW0e Q}cTֿ'onW+Q3+u$o1To豔 rΐMr Ŏ̼N Ár PnpxQ=(/sZP_:=՟Vn?[䊄(ߑ0g5RS ߋ6 G%INX.]QpV<"u)UxK7 99q BgY 3J$v&D Hȓz$wdn놂 lcb-wa*w*Se\͝U@=^3t+>#}s>5o&j _S@HyE oϵkq9HtE֍S[륂5ɖXզYNU|WHq';Fp$7 $(pWIHX6vlC _mǜsoDg 6翍3~3S^}M=to҇IYd«q1J,Wc}ƅM"H=OHykR[Yl)|NX ޽5iR`9iZcs71>o?#^ZLզp egkt%/VB)Hz݊i1 q]'4b(-Gm\/ѰFlHo+"q]r]gҽr\jќ+־`T-8H>i1шA|޶c.X2d?,Ș"C pU4x9o-wQD4O wS+J|d7̦ ŭ/cSY1b\ د(>5iέw)l7fc4!M$չ]irN(@ڀ>W Qۨ,9O5J`*;kᶧo&'(ukJq91كl=|ҿ 7`xPbP| lauIޞ3u+auze|XRUe3kj _̈{f}dt `a(2,I[;_E!];d{f ԣ0,ڮ_]m.o0\d=> N%:rz=/Gڜ<❧qC3zyaQT&|gb Ga## 6wn;3P{67VJnqI n_#`B[jWqIfLG}mP.zt~g$gm@7}:y[#bypK֭͌"GÆ}$yV+LU y )MJAd`pra鿩9,´ *aq<~m6}b/^Ѕg6Q a$kָӮ_ӝ\т_lde5TH?g{Cs~UL~W} ;!4҂[kӨ%"L~bܓQgeTt3\E,ExlǧID՘2I'*,֥ \۪Kze`+F U 5e" &Bt]۾꺂EIy`PIO+;nI--a;v!7Ep(e]_Eˢ(r93'idG,iV8ݛt,vUWZ7WA;]ţQuw.F~-+>}ڊIJDX\v_H%Eq\j)>e÷_MO_sVQ 4> 6Mjա$l/f5>EHhJgizSeQ$*cY l0vG$"şb$({U.Hrl;Lf멜jL L[%)Iݶٍl2%*ݢdO |p}Pk[8D_KPȐSLuth|;pߩoO~ъ^19z;)iH=:ԭh9|=qn{ =4=u׃h>2|_@$u@Vt_'_W9R;UIe;6mka%]v8©v8tz<04c$f2h6 M.|c7hU}j 4 ؞KuǁliSMzɄ*o EAlnrZ<wqn:c;egr0u]C]/yX J Wx]p `2Xl/.!PU->{F9z4.Ud!OT{޷li^e3c[9`<w:`5#\et{1@p+ձK7RR( z)SH71UNT)L!axܗ"ĭHп W1.b Y*ܛFN`w4dS#'mO$rY̾Ukpx ]M0ֿayU NMҔv});9j/U:bƪs cA%F\sb Lt,lO(̒a.p<E %GY{*=ύ1b?jy\I&zw}:vI6orWuCCidD87]Vm$nxRdX3<#G[Btn+Wr."H%,;;Ys];A#H?Vh-)Sgp*I[n6GC8۟@WZǘuan084ӪhUǯl38uX;04qO ϜJf񫹜lwL^_bg|/SA/r厣o`},23q$պV w /*he0v6?!+?`܂oF֤=p]k ]ud)l4oBl`rpwtCHrHwR2$RK=(\!;6I$y )lI0j2)ʙX+w&454PFjj|;7f%N ᇼT#ҥ'8}NjLM肋D>/hykC?m7` %X{;2g3PG~;:[|Ϲ~+0jrG.ѭ;Aa4q4`oG3>̕;|)#3 @DhɯŒ- ۽vm1zJ I7?ĸiTkHDvW䃇T-p]Ȯp,PԓyfguK{;<_/i4 ࡆ .s~0Aߝ*UU#ܰ,JnQXGL/#h >fK$e Kj> 8]͠* ErL絉]P,T%z_m40A .d\~sVHEɢLYy*BI(JEU=hT j3Z qeJA*C[tH|<]3())"U>3?oL~,?4X-+6O^èH"?JfBC5JTYt@ZLKΙDҥ垆oiƿ-#GbYݥ>VBB n"B=m:kD JT׍|p4["*o"Һ0Z%b / N)YpL ^pD4@VA)T AD\Rzݬq6SS^s넿D`-)X Gүo]tvĤ.U9M՚Jqod#JI wcdFx+ xqٓ\2!rGv-|11De29 0=| p= [Oo7xKَ}⬘l&xۇp{:uS;4xwɘiP%]rGdkFu/#w&t X#M,t|Z]cʙk3'DAYp% ?#WPNb%_`b{ʐiA⊏vLHo\s|=,Z^70ųߠiNJ?t4*Ȓz`#׻S4!zmZRREK+Szj/ 4lE$FjT,@AT&mNm_Gȝ v2_9/[;9^8O~A-]8d[U`{, 1o#"Gh͖0]VU\p&ai]3 .*ANi}5 ֱHrY"ڏO!G췦Gɋa௄T|&|"҉c"ͷ[(^R4јcA{2ƈhJŹ3rqz9^Wux20|6q E fc ;"[1K]Y.һeQ:BF@v j9_^n|'3o)d0w ; ~@<Nv%WK-onӟgl4bTmKaREGCU'}1Ө/_0sˤا dI4-T - ct6Ƴ9#Ô 1~V8iCQ6##pU=E]+cg)Dd LgpR1 惀_\0Q‰l΀Θ`!0Tw{Bҿ;'XJ8dI>:1&F:{Ъ,:wu=b،NӊNpҥP{$[>ܐ,Jp< AF;Bw@p 1}#OKQ?P| I5ήe|{eYU{}+HCS ;LqY1f.År²\WBm&x+\([fS*FS(flr FU|bKn#O_H81Q o]PvU1se.hA=vISX"dy`2%>MudyTa GI]G \A]{t壽fb<>}:T9 4"P+ϙ+|F @=ަ,Աf_MexlEԺH@ oM,mw)UW?WeWyI7U\N7ئ(&Ke_mVSIg&GE%OX.@@"tԷ"Ck:r0H.N#?%"nCmM!gH t<$G:%3ܞO&H5a?Za iOsuophe7 =P8t_6ʌǧ)d)RڎO#b T\O'D{(*~꯶ 0K;Ie۲6=Cx*K)0G"8C.DAټ^-GO>[,K%#߭:E$yTwfGz|l/m@3=OXfTճUڦ;w - 'luаug.ڔ7!Q:Vu"[ p/B_&P"tN$Q2E%Q )y]؇s&и}9W:_:Nx1x/I."pײ khR_LS`1p9f?-OpUa)0 56 74w'?ţ_XP^*rSN#vx.U-JM9/&A:!dj/r Xsb(lIΜ^lL_n,|:!UH=OʰϻBnDԡp\n7%ﶄrܵ)q'h ҤɼG}R_. ջfUO֒T%A5g15{m; ֪TPGmy+'$(Ɋ;^pͯhI!JI錄@t fbW'7L?B5v̵կ2vVhIJbRbH${<"NkTFRRl.]`+T;"RDpFIR`8v0]Up|7H y&SR06z%M^sy&id&)Ky.CB* Uwf:G6Ș>xyq|~Ӌq@ҨDPa >i;K%Ims=}s¥zىmѼHX~㰵7Nrqo. oNF#>}VmaHO.(=8WB܆q.{ZPJGp~BB3۔ng:`72Tv>9' ~`/|BXp^ >_FYmtX]+_T|814Q%4mWqn;MڪĵA?da>Tې`ݎ*N7N|Zٱ4g)xc)$ 4U2bJk"؊ZbeBJG#>Cl/S 6f޻,&&3i磏$ !ܺe_nH ,F*(r\#neo(;+ ț*c\Tj|yAIUOc3m8P攕<`eH\aiDԪ^Ԕ`E6EZaέ2i<kqHFC B }P^c)ij3WII DcyE3:Գ17p_m5?|FlU N(%+ȑg$ٕv' G>Q'*))gj=I|'exZLO]k "??/dX12Zx3uXHS!TfxpHL΢0JRSMg(n_ CPWItkAnס%R"HݸH w '1bɻq7z%;D`k&/8qbcVG3E+!ЅqdI%٪+r @rqKz˥xN eaK?C.{oQ4ֱUOd#UD3~gM.',OKmTg:@enp=HAH^ux+/櫆 vm4fd ;L?UaM )3'hؽonz-5yOvFLߘ<Gj6 R< ^G@|ux9<KAW&lɩZRӏޔ<^Si$jÒ )ǟn\&/q1/bl;jP4zӇmvau#6zt[Um_ډ)o0TK8M|G*&Sv qMC͏a<ΦqK.UNΤu}rM\(&26;Ul /,_*x+@oW|6k!J֗[z fG+LDxLlr3v/Tk@djoMOz(Kno( #hqYκS'Ֆz `~},< Iqx~#K0K{^U6T~ky3YiĦV.UHKz—"nz4/FTjU&UJ*^M4IjI0Fp4@pVOJ&N&y~]ĬwEenA_ 3peO$#@~ֽXAr5$߅&⚷ >L^P]!BwW'=?~ʄ_80$srWTEVڭ`W/3q˨gq#\ԡ7$9 Vs%G2GTsP)%]qb=a5N\8JI()9GmB1iՂ0x!Yè˗"'OSnbZp?CkHAO_p@kJޏdYv@ݕ-Ṁ`U^V. [xlFOF^'zb?F:L3|[7°B)@+hs89;PY)w&QkRE)DK0Tw1ȸn,Кb'-]Z54;҉~M²Iudz}%Bl~ TFGLJ~;8>8|ć))1'TNgGDO{x*}_Ylk8f#| OxJi忽!?\7X =Bq^3]0n1uĭW9M몬0t{Is$:ׯaOGY ^+꛽JZs!Z30 a^UZjzCΞLT0'`ӎ L*GT2QJ۪ClOM Qyh)o^| JZI5] fʘ7-FU@wV-}g]⡲s5:X4e"dK <}ItC^";JBZm8p,J1tHE[;?}ƽEӻ)1)%!wFp&W#,̙٘Uq3*% Tx/Z|>H 0`)o@emte%z)J:wרm7?!V"dlNw7J\S4_  {we',J@YCjHYs@ggx&#a""I|Kw"楺T|f NsG/UKhzBAm["S,4c/>Kwʊ2W4f )/GJ@l`7z*~y-cDa"Xtz7h}Eؾ( oWZ >( !;a9u}YIyQflHb_qpy%hVt]*tB0!$YCAI^LD7'z}E#Cթ/D%ŝiV;Lt:Hz neҹ c)}QYdʿӲ ŒǻqU3AWF6]%!emW3z"cөSUp=CW*xb wuK13qCҌ(E*O0jLf'!%Ş m<% ԙE\Cp@)=؝fnOu ?FF=YRq[+p1X)nīẂa[`.ogGzV*%@άwxn!<k$2v!iU٩=jT;gi ᰳjm{*l}qf MkX~ޗ$з?9BW ?̡P %TԂ8*:'sx0oi^oS=wgyHK㢨!ipD 2gq~&-wvI{Yhi_SGk,k\O3uxnJI1kş>Ɍfio'Ógɍ#,$j0k`g/QmÛ9CE7B3PJ%ׯԠq8sքft>)t_y#O[B]H&lǧ2`l{SVm3/F cS\\ xԅVIk烮y (܀6S Wwq"z?CkI*uz)ZAe_jjh/VnI$6{-s㣫ڟ_KA+`űR\1V\.?0bDŽ)^kR F'ZƆ<7;( w8Jreu QOyؔBX8f2-@YT {}_͠3%Jf'U $.ō Ql({庈QIq=0Gjwi}he:C*n{ @f ߵc+U3erZj݃Ϛ޹"O:3I5XO݉~a MMrk*R;8]A<"4YQ0 UQUqRlP&.D_90l$a(Fß3Ö)W_=wի? G^{]A@]UnDyB (=H84JVL JGeh݂!vDS:?ы+kH*gC$p{¡{6%DWcQ BxrXͷ^h}0 YU@^m ,s!=ex#"@ W.=))Q4PR#w264Mءl(ۑؕ͘8{WٞÄ@c:1BuPTLTiAV|;ܰ^{2يG,A 4z:ɡ!<ޏ3Fa8\ Ko#z(SBmX}|pwdub+yYA,Qa@lKw=9QJ ߍ}~o{;*8[|Il jE!= +~J \%ۤBȏsf5z>ԸZtA>7:ĞW\3 "9dU@U%S| l Ct<q! 7>[T] (5 ;_ ]J^֣dUdXH|8v'h#Wk}x ~.29pC7g&!Gk5? *dV L7H!Dvol̅,8:|h ٖqD"X/)00momF;p)#`R |V,QRiʧ<\LHclQe+YXޅ+܅W-Ÿ ƎU lJy_f(.m?Ax:ӹ\ ܺk%k^c_#V}%-Z5QL @ҕwݳ>^WAeG]aYAG9{[D}`};պF ~fS]G,04[8)2N>B_{_e2Hjٸ./qFTNu3GoW,yijz8W1!Q3#9@>Aȿϝ^3Trc8„~|,1: T# kɫlG@| @ªnߋ3&P[z~$ϳ~Gs`x 2ܦ#i<'rl9L0n=:yk| b9E!vrZ8-yqBU = !D O9>7Q }\)Xbޏ6(lTuT&I0|e[Z 4FPvCR x< TF(}e$+az?{V{`V<'idM#W;SÓS~KCAn['bޔdmn[Iw ɸE#I܇V# iiIix3`UT¹*,kGfk?˯vRjSIx \գQYO ߾8v|Z"( Gq9jo\QC;rGsZӷwp6m5,|_@C+6z|_3PN95-'9Lx)y(OK]mVh <=8~|w/Oݶ\PR>TH\ +КUaOP~v~2@(Gq>DAULwBicEZXoԂ\N|v䷘1Y⡤l2cOY .enp܎tEԛeFL*ftΝZ` iaT.{$QÈ}/AG2@p ? F|ώPM`R3K0vƑkd@V@gL䝽7s }l |/\H6^ asQu[U#} O%D8)Kctwpp;?Y,k| wǩ ==r6+$?M0PʨvlPQnrWxܯU3Ԧo5@[,""BEF wjv$Zl0 [~ =F@N/ hPT4yν2 nVhZCXjys/9ǝ~7:~cEjkز5,.gbEe },( p2bfSMIz꬘1#û;ٰ.Q./+E2n:ypDT #jJ x.գwW.GJ:pkkFH'{ts#3DƋc鈟X C_;Zv+A+LBʱ}( j6\o"?OK s|wET.F&@ ~!AZEU@{J Huv zl7BmSaE%j=qPu+/q ?.7]^Y'j^Q_C_yBGB,D5\wnGU=NL0i>>k} wTiH-Hk|F[\_BU{G){Ja |_so[r_6:rJ5P:79k|["}N(q50.?QvjB(t^V{$I0zmScu>FɡCz"d ) {_ởeXEVM mfb *Ց|xq#60o WN]i5ɪ{nV|P2#iœӯ#Wh~+!NյueN(HSp":JUdɭcNʀM}dI/},#]Yq̘i8w%1x7/ ?H#9Sy v(X [mZz(8_ЉI.a3Џmi}.L4ܱ=FVqn쏽P=+`z;?0J5 z/;VMU&-珕rXJr(9A^$%'_ 7Ƶ$uuM'b. Or&AFW ]+_@!pMQ1o.QE\zKe޾NBan(6 cCOY$z չ\:9D6 uZoM-8uYwA\NqAcGrHNy9@mjr1w\=Xy2jiGpD J2I+/T'S[[f>,!G #`H[Z@W`b]5A@ڤ|Pڄo6Ϡ,d@BuU<.lC{>dBu88(NFNwswX1nﰆ~R8N4³qm"}CiRltO) S@ `/npl^tЅ$@'}$3@73H$z=W-C5|G! nظHnBJWt2,bR작_c& @sq&}W4At>әSa%Z+ NQчMR>Np<V P8V +<8 K =wO+žPLWGD{FXجvʂGLbɶ)Of8QK1:mʡxځ#CK<{';EG0v! e]4 *SZ~/P09~7P4q}/eo/@ cPTUG07^aDŽ~U3v?IBw҄[^\(ċ>"p;oE`9`Y*3l HDLjׂ5LS7!F G > 0Sc\KdKvPzZo []Mhnv х)6$Z[joii^~\M0_vG8SL$(;`%<+, m ^L>d&=NHDWAE"pv4tKIm5 rW1u 68n.h,Oq^ީhOp=t_'meX2 7~]HAn@5xRdNSdTͰr":IG#rG;xS(]li/iBo}L_eqYiC!?. lp jSZaMQ&6{b=.WB2ޤB&! .B2xQ.PU}4 u"y[P TCkc58&n8&|A )&ODeX޸3\&2b"6k[o͐oIi2 <kc]PG* X)ɴ:Yօq2+LI'?V=W[HA5Zq-clkY-1.l y\clQ*S EOn`^q\_q~A#D3djp H(LސLgJcN6+6b.h4?q :X0&sYm?t s6OEIՋ G _cT}ZH/eCZ1FߕG= ӽ}hY$\JpZSH5WB exѿ 5q2 NSpM4rT / rBn'xgpcvS+F0%"7֋yp˭<=I?Io昧g/SEEH%.Z t ja\>VlP"r2NTVoIšf?"\?<lhTPT>N6^= ̝lft+klWto%ڐvo8/[<"s5qN7N{F|w+; VZz~<@)I\3&Q,, s- Ds>)`s Kg$q@-}QuK^}?+ӝ ZbY-ng7ZޞYPZf 6e JaDDXNVaQ? 8ג 2y֠o/JI'#; B'r!K9DVF;ɼ(miUF.nF J`eQU 8mG!aXᅽ %_]¿$MWyץ鴳}*--=YBpOm{xY@:a?[sȄB.p"ȸp~yfRܒKq^7XF7ԃxW@CobMiU к B9 tGKD]@%]WۿC?8WV+j8,̰ɹ+?ƣHLxQu+Z."/$exu=By%Qk"n ,D(4t_9Bѕ3P%W11 %w#?C`u4CG'շݠ=>OT]V"dXZځzlz4(GXJzP1hjBHbOO IhfUuR 9YmvN.1̆q5u>Aq)=Prx:qlϦ1p{\NCG"F|OzbbFlfhR&U_g 0/&y4; HSR#;GkBpZ=a,2-9Ai }h1qz܇7֝>24\Жam?1g"/l4?r(zM[H*/E|(t[[H-V.{;;4d(=no+iEIoEJ'Fn{g;4B7q;&UyeNG6Q5#Y/U.kriK\TE:+ o24vM?RE[6=cppym3IꃕYY>.X:rI4P łyc|."2p&` \AŌס:a"1q_=]T@Mh|!cp hΆ㢕o/ DCOCB`'Zglb![{Sv$kL:v] &ǬS== B[q & 3sFf;?&vVW*& c%A|PZ>GCgH j]Et]ym>B^z >h5E)y>8;©0{yz}]|Ǔۧm-n v!./b8@ ;SZ`\#Yl3)ʲZA SdgDk,4pB2`אMb1P Q{ \sE=k T6Oy1M vB٨?5}OY<رhcu|A_=Vz0|*zHAZ/?Ń©e%D0w sz_񓧥i r{+FXï! BwL% `f:U`0:"+Vگyj{umSڿOe5ӈTHgq& seTIN/6X*MAu0֣5[mB?ZҲK<٠vjʡ&׽[Pypv}e,mY.W4?Ycks,]*ɢ6<5-&&ts:6*+| xu~zLMV˴E%"@tpL, % eZq|UwFNJS<'ePnI8K2ziӶ}d8jRtpp0sGK RJ> H,T_Gqݯ]|y坍En_'_/ F9].J[shD 2v}-x=_|i\OEgI-KP%tF<C*ndsbb }QDg}f9>nAj.2h%-6|0ߣGL?)f }[^Ky7l5F'Xyk, L z6) ȱ"'vrHmC瀑PrMlVyܧק}Yb=lR<궚g<]%vE`)]E_gVkJpHYg p(΃[Vt -OVXj۽ʹCޝ~.)'ܼݸ`͈EiM2R3_2'y`5ܞRdN%‘[%%xTP8nbBL lMNǢx/W{-AOXq *R(I""nOP|i(0N+ YO@t9C"k#C)+H2a;;CZc~H.zyzIz"{=.yDp}CcŏS?>(ՐzS A7͘ m!˕>8ߵ߷Tc۵Rff,~Q N`=iCĉ/˙c}OG5_(MlW!tθwzn"d?ĭ̗Ғ#&zק:u:)/]a G_uqH*n9 WÄ^7Pق@}1 ^rI,l7bm/I*U6faI=tjłKQ! SIDq8^8XJ4L:Ϗ  r¿RaE'M h]?r%ddu+K]e@N!Ė E MAH$7lhd̙>p}P[:=/"A01 Xs{߮ezwk8[|+jZZ}%D II!6qtg0*o/v)yƫ*&G#Y(ВsM[橡2]4&$1r Mu-+01#»C|b]qcS࿼bjW|/&k5RJ$+e|tR4pFG̵Md${l n5LOAيָ%0&ur^|4 q0.m.Pwݽۉô7+)=QtT_I1Rj1\T` IX߲!4DؼOZ;bb!.;'Y:\3xz_Vpj[Y"aT YO'B'T*,!A݈.4MrRHgSsa:Qv`S&F}'LYp0ۛw*B/{c~fY*0AB&{zrEsC+emA"z.QXғ,ηS~'H{oN}Awc kNz ;LQpO>L}c}Xܔ=I7pWBi$Kbė l|$nرv(WVd8?`S0#++n?*b-2S t9ES1)0<gьTB-9wԞ6ĉ?\Cw*+9iS~_m 4? 堯gO [LVHemmVc]PF<;R!9$2jdY4${bޅig%0ݠD|R[s}DJ7 G4XI!,:s $aPg ؙA"0A|J^v=P]2gv U[x Z|9OVr&IfdA|`Y)l֕*N^e2ɓv9fg&Z(>^`: .+1(*8(OEa3cܣflv=fv2t>̬-^=*lf?PUVXzDsʶ0-IIH@@g rƜzTcUeot,;TI[]Φ$FѸZi C `zOQJH y*nDc2k8ITq{e@!ef6x]2)는9ia\TԵM_"~ZdT; !)ӼBF tAoM:x8*BDůz5S~:vOߔe54@ It!?6*18.m?Gr}j>ё }˖CDD#_7 }֯J!^@ $۪8bS'1`h\ fPiZ9/şCC2}$؅E#tśK\ 1^Op,߅1o]pSged eũQ#SiRpuQD+iKeF 1zAO-.ҮÚBgHVGeq>0Po3oR_l-O}宭ZɽZ%F0BL th&TcxubQ^)!3 >r뿮u<| goȃWG3B:R8M҄ >*Q[(/nKG쏣luZ¹y Ɗ5w%ws~N"INFQvO{SK(_] yI,+|cr.ÿ! +yrPX3poz!^jG ۲rYZݍ{A@1wz{%Z5$eN[X WsKd֍ 2UTxjѰU?v\Uz϶p/׋1qQ" 9:@3R &%qB5`c0ZA`nX-ϰ 6B\@BV"O+D2A3ccNv~i9 yЮ 5q'Wkilh`ʝX)7 _|QeÔRrE$ <`n# KVa)KO`:HgdicοdWW@xjo͕흲gU^6=ǻ,(JOLmY9.|z8(cDIQΖXyzkR*{]D4}ꅫ fɭ4FԘd՘Obi3Ӗ'L>w7qe@RC0m'7Rg{[`~%.Ø6аߙΐ.N۞,>i65XI$}L#G)y9ݘ! 73!:B|11XWeg XIPE83=g̐ Kn%1~s#ڙz(ָzrG8hƌE)#,ŲblmG(D=ϏZj%bۅX4ެ#pHE}GS7{䥪Ǩ~hO & 9 Z<O 7}&۩uݦOѯV*>#?[2YϙKZL7V0fN,D|fqegm_VzX*Ĭ$]OhT fCZ3NX:;kY>I`<Ը KrK?Löƨ d@C w$BW1/ fԶb$|Q)A˟&[KA7~}~` +M9}Zw7O\  wԹj )xh)u1,Q {Zхr~dn! ɲxrOxr=46"/fW#2Y&f.,_tbT( ;s'u}w/dR5;cm(sZOJYayqYv(Y6n݀ա[tLv\˙D$NJ@k: Lٜ9.թ/" )xYfX5Jmi 'VHQfQ N69`fV c!YxDsw_P[,{y=]cgr: ẋwMcXDn o9NT3\AŨ7м9X53Ү7YREmi;O,s6+\a]s:e^d5qp<&d&>n_560*$BS5l| іbQ53B¿2/0w/nWMx4kvԺTS~!"{,?`*tp2rA0ć)3߃U@$SRځA+<(RLώ'mVڨD(d#j?VIW>|Z'G<ɥ0K׵TIʐdW=6VZ[ S!qr2]D@pAEd#sP8-#Bg^'!ޣoTd'œjvt.LhEQ$ʝ/=8BUaCKS.KW"t Y1o&o#$ne}ct3sJ7A}!K 83c8 {%ÊEa2ǫs1i_`ƒ Yqߤ-LVO^|VC#BhAh%pzĈtMZ;R!u4| r,;럽9t HnT9Z j{.iXzbXv {ԩipac=j/ K>XB#TAPjrl§ܔİQqKT>.I MN~s鴁r/'AȞ;5O+ZoTRPCqJGEF9K cK߈g4Jk;F‘g7]i%`,afֶ4"/{S.ů Lz5o'Qqd ?/8+S\pD(uGѴ損8t'@]b|3O)/Q0J}#=zjdÎ9虳ZBOt0(mn{Z9LUߐ7s:2y'T@7EFOZP{ƃGy#pGog1a]T4+k|7>WњiZ-1*.ű3LީKߜ;H_CXU [pb2zûQ=mhDY)^9tuUw;js/~IJێ37Wׂ*}z~a=}G?Xm^,'^Q!ijgJ{p"%erK F+db<ȯޔ`ma COB2;@ŏQi04鳭47Y%IG_ߡOIRb 2,(>CƦh>8EU=8fb1kdnk|dlM3ge I (d Z+*zlXUY2_&5H){#)`tebKӺ%}@{?`)~`+L mD:&'ʷ~R}C/l'y@GWO[o'D.Ue12ed56 .T kMYՋ14bu , ?geaWUᄑa<"iGjWAEM4L1 guq#4DѺy""~"KY9-FDS8}z~AM3MjSg*4B_[kE>ݶĴMm*h > %Srҙ5ҁ2Q:H~msH;-շw` ] "`z'Z8m/ߩ((1;S2 ZBݫPF5Ԕ_V_PoP oycrTh&{va gxΣ>lyZ-QM]"eT*~d:Փ8;fZG&Gk\{G@^tk"Ph#\sːK7 ߿M-3p . R Đl)f)ك g!V:$W^.o D:qGHxOem⬸vBDeax  Å8- 3"=Y&J?|x|ruYptě͗\{ku=R`RK$ iTmln3G4U/uh:XyW:\ >.Ç1y6\˝ |o~4bE舞&oo7"'u 0ӟn0I!kx s} Bi@'T(h9տBg@ϜGf3T#^L(iɂDG[gB`+n;l۫V /ɶmɎfY 촌V3/J, [rv7?MOt^$pDhtkN2̨Os|KaH˟[\3e.mxBgHj?BF\$*3\1nYTC$ )tTCÅFLԁڭ#%-7y)ek4K V>$oCa萫;Msvp&Z$*EKDrtn78WL']2~SFsAT!_X49OJ|IM³DC¾d5iD08ÃA&'2F<9F. k r|Ա;?o)pVjNT#\?n$oyev4ml ;EGʌn/ydJܛrz\]Eb=' k[+6&b1]=Җ͇i$,(Z5c; ~ bI>?^9z^%bqv̎!X9 " + Yĕ$V<ϟvH 9]OD%i `ALv, xTh~FobjUʿo}"BHd7z-<6D3)%b$[+uq* PM'ϫ]V(q1`>l*L+Jr"N_BvrTOκvu!=kƯ'اƯC]}W&]Lk@L|}y]z\6D!uq8n뫫.O3rm*!I'V1],(LY+ͷs{E5RtmE=[c4j*~TfU|#Zao\we 0擙"X r~ᮝ4zgY}ЙӦ6z2(,쁝%o XnRiAlha]^>  y1f1u{lѕ+<3I]{ldO<'"XrNN+ Ƽޓ."p'ߠc)|$Jb^F9d'PER4`  ϸc@0X]R= 6\ E|R'k8%*R >͖W+SJ z7^:j2uڸFG1m#%l/J o;*.-(.Dƈq,HC;[5:1Iɣ,NSp.H(cۂEiU#`lhPiǠ7Xt@! +>!qn#a$lT?;"QQKy$T#!{D>T4)7"30K {&8Ñ p0uKr4oHG.!GHV.|!OEOto0W4BPZ jOoAQi-?%D[8/}qQ֎9,ǸϬ?5┢ WHVr)S}t|ԲGa6"%1~*!).:0ߠb+V+DP[>v iANi?DRxVFƏدPhgUvܼ;)9,/PA)Iȡ-ܒsE{{Aix*k xWdă.wP(H qg].!zΉ qk%P e;h!d5 _:LGDkloGtC'q&WO33gg<ӡǵw|D3!nV&#U޻t/D=A[fdMǼmjd \JX8,1w\cvd Q.;}i`#+O7[R# [&e=erԉf =t[ gK-:-,8 "0]2ȇ;9墀mC%QR=R4 xLfp&d_>즞IHBe 9==_/A²3_x҂!\IwꥣJ|Z0_2<4W։.6t3>Qv Wz靂,0Kz_d\$!I!c^7P@L;!e47% -15fgE0Yջ _}e/[X ,0jt1 M+u_!̏&h!"<+_Fy6@+ `G;Rs鴬F?F/|h1-AG?MIRʀ:Fq_u]fF-=diH䨔2⿉!k/`(6S~sHPl\p[ ouI].Xi %sX94kȸ Cp~I:~zh ~P41CʎF7-0/!>AA|)XG LN)$J0mu?༡qߗө;ރCDX47zawROF Hav}DM$XQ"U(kMV&'Ѿbۈo UzAf}a5N+i#٦翧c͵b 8 2[Qr;a80ٌAcw[11 <2{=|h|L~9 iܪ(eдЙ C=C*`JQt;%wr|qxСm:,g!u:3^B[:^wd*ĢߔQzրlcғ.UO^FlR*ӄ(r~lG19ury> PQ6B=1DTx2Q!tiEv~0`j;G񬑀:uѻtnM =ljt.>2:!@ے2Udb/kb†0A>}Ss[c@:%6#G#,Y&1b8t͘ue+{ yj%eN3KIB-Bt dhЀPoiT~f\shnc|0Os5VcR qIz?y4Y`%x׸+uW }w=,ń4`B{Θ̍i Э vb&i@e 8/o( t$,N-eYebSv|OTupS0t:+՛ *X ܊s>m(E;Y3RqFK KB4 "}^[JGX>Bl,H`.K7,utkFYgѢc+gR%@lHof$TSMmjcv`gcл~Cēyl\:jc0`cT^@\&`];w< Kʮzw^=2MRM(8A[o8( 1UvID0~QP^9:Ð˫"6} Wi|' )#QS8ܟLPl8{rS '\O =Z(Rq5Xѩ5z%r5Lp~(3H~R#xda'$#P ϊYw)OjcǶVHm-KUNyIaa-hpp TJ6&6|.~r+ ,pЯ G\c]mۆ"(I/+^7,6E.2: )fwvc!4Y["*ccHc daX1qɃxT.L/"hg8a %st 0UܶqA)h2X`0l:ͳ,!MŊuOT 3= $ 䘖䨋W`6H+PK-h@r0u%IJ y]ң^hw!yK$^ Jm/Mtf0?0KnS!`*v0PS$[g[bnȦُJdl|T4F={\riad Rieay}^ʩGe,QMJ} ? Qs1BqnznxO6iaS翃Wwhg:4~C !wop-=||E4%SH\mdNLJFQZ)VٳhyR1q'&,_%i&fŦ- `yc[HeoI xzݑ1L”q+sI ~qm@j>f\onjt</6lhǛ wc d}D%?YЦ a|XHD1=,ku/F"""fՃ͝s)zQ0%?8 OȄ >_R3l4 `Џ>b }5wsnRCXIL8U05nsDek@5!'z"m6 츌f슿IEp# 0P5ڴyć| u^@)g("U6g4(hp('1*|x+02p7d 4V 4)Ѥ#jSjy4 hA |[M)3prbsx SY?Ip<ꛁyD'9)}i9CjJFux>N\sW~77f 9foPIK?KA܈/C(})I&dg7t#K谓&QܕmczfbVm}hڏulP+; t v"H®Md;P"4Ll|#y2wx2Vc _Ad/G`(YY:gh]!!y(ƽpnKp\vS<u|7(i&= |uo,ٖGH l |WBŒ\a}\=;^.PBUKu_ )}> _ KmKrbA"9OJԑCČ~NX:\2_QL"x1Yg:w>PY"!$[gļ0*l;N? q plψ*>~]DK9fKǖoX>eM"^8_&j#5<;XdHXRϩ1YSg]9~Nn9lWFRS$go<}`kūU$zVh\::ݵd :K3 B"&!KP]3PYDP{ Z9a_zA+NY|ڌMnRG'W9ii%;nx)^ GXh=\+ G-UDY=~9@ʪw]<ѿ`1 4UNސ"r/f*xyޭzDK>n2)UӺ6-}gkL8tZ:]b%R!YY/d9'U_FuY9QjYQC`&=%ʄ\q0O 2%;MNVaڂa_{Aљ@ɽNhAX[K`.hSdmx+ݫ'외'*gԮJ}2O%1n'Ɍ [8~rt#vy}UcriW?jPzrg;s &1Ltyv`&ϜѳAA}?Q!X'7CGKͳ䈥9H /@7}%UKN|E끥 ٴ,DwDb*EoF6861`J-2͟ "hteNF>>4x<}¦t"nŵN?!aS|N\Կaz8v F>ҟA%\?ޱTlv0$+8KxZJ%:z,%hvz6;ҋB䇽Yv,=|?RKjwqaƿex%>b~@oB$bKŁK!y.C:YheۧsňnY =./766W66tt qP[Se)yx Wń 1Egh]DԎu6 HWͣѰb,Yy Y{f9DɽP%X#iPw%(K23D{jt;F) fM>p8)bR]wV}=(BdT> X6Υ>Il⴫41\ "L~ &p{X?Cp?CQ8rCС:\tDqdL2VF{CNú47Ӆ{[XyOe1ֶk-"%ۼyV0PX4Oy5zG"ZCd w5SA\$!rT+ ;a0)!o_6'#cYLz+^Hs)8Z ~;͊dLf 7Bڛ&9/2+ "hG̺$p@5"CK-$țerMKfneVX;_Ϡ5&zA 񅰒 ZhsL|;*_/f%r$)>sOyꮡW!-%gbnAcj'BQ^hC{8i%Oٚ;K ײ+(.hIrа=&&WO p^46)'H؉{R~gS2 0,N!앥R{zFO_(=͂^fՙlLA nΏyة*g ة<[Œ1:i5r3!I̥1'~ʟ_8 @=4(}M,"/ED+kp a |PgUk\,~!) ׺B p[孳*Y_}R1 )FTri[5 _7J%ETSK9 R}\3 :/r,nNnD^!!1N:ZCNe,` hN?ҋ6C7,`9]^!3J,9s\QR@:|e:!=4^B?  &^"Bg"]zPG{Xi?T^ B 83a>{a/&:sB ?gysypO  `$* u9g bc=A&_.UʢNI")L!.8;Z lL}={L|v@C$P1=^LG|#|jtиyuAg zr}3O8suPg:SO8t'oS{6Z%5E;SZ~:Â? 8Ҙ"=SyYvx8<ד^@3 ł6u |;'fŽ&}c O4f#JjV"$yǶ4!v}ۜ_vH( I4BdGhƯm ▜eV:8eB$rk#;I\OB/TŸ?py@eo jo{6lSm)ba 8iBrE^ +I[uӭkڳdMQk7;EG&;;,\wAW?UJ3y:hfH[` }Dd+b;ӕsc)IÑ|^MYP>;T =k@Jjg}> ;l8-R4tM<9ȁ '5ML UBm !O)Q4: w'be=uŠz7?VQ{W]ww~T@G^^RT'|(ȱ+b͙-j\ŒpU汩'<I #A\x[U[W 51AD`$!m {ҩ`T*مz58A/@d~%&/ |f]cOli$TSH%n Mw#%qCHm5=Щy=$ihk:C*C'`nbh͓Yviqu.SJ~@#(OfaJI G扏| YN3I| Lt7*U{-"bdNhzT:TK|3 0۪9c.%'n31̩|%D7q *??=[Ce>}L Q PZJHp IJGF{W;>}HA@׾]S?d#7 b%_ Y'p5d"i_Hq!EV"1y)\FBO/N:FQYN>7e#jU@_2=LiZi~^w@h媏ʠQo)&iqgď6?uYMwǦQ9h0 %SٵL)<3A /dm dH$,#u4:am ܷ1k_pʹH:{e-qd xv,^U\bSWoaɯ 3:3рlN.3Q1e@!(Ir9s)\{EI[< ;a flxk:6OUDyr(yIoC4F_lOQ5R+ѐ51aF3$9'FF6@O!p7+vy)nVA$yO뉬SΊ56nRt: BMVNi'z0G<~];~Q]QJ2{*sbޣ̝•qTǂLqYT-F8K{-'ՏnA. 8CsN.(B6DT\>4OyVUVwvSا1b8X7Xb!vx~TSŃx*%`~ധzY/O yOZ|? 1q;e92w, a^_+qv풘7ұ܌Q 3qXbyӼ9 qgm'Z"g!&mE *zrn75?FxC!DŽ=M Rq_ut ty4 xXin@n)eGߌn_).rtBb֨ߗԮj[=QҏݥKs Oʫ"uTxzt t :)To,:hg\—LT@LU XQeWmyy\%mq?(w3njVvmk]j4#*_[SD!0`Yns &G ]^UM!ۊC؛ &!xө]?OFJgLҡ*:̓b7Z5:3,yE`U~SB[0qb<}ǻ^|0VבL{{Ab ~0߈!C` *w 9* !aeZjX,!E^=@V bv1`zBf,;P@`y.iPm~2 p,VG"ɰEپ=7)e Ok^5g1ׁJbyL$twkc+L#L;[Klؐ$4U5Lzާ[e{@[21ʂZ*e)1}6 _Cg4aA͆ث RGӛ{a:NS{bY&Ua߲YwE}[BAfVwmQ _&̪CQe3ױVބX{f^;}havԯxwt#m]-~w*4?`h(gd*.N{ä`OJ `!Z|eulB˷R=b2߬G;L@PvWkT7{Ѱj*Gy $x&՞])]56f={;%P}xg{BϽ!˟(TlZO(?F@Aܕ2=֛A'$/HT43$lW뉻,[%j@1.N1A#USs(<FJbdV5y7w8V+1vAFGbSS;k[LKw>,/svu׹Oь|zM%}0' IsIf0 kPKX[OP dwM`!$vL ʹ$^oi1ίo@0[}j*C) UXw:zpؒ0ڢÄ^[ƀȯ`$Zds Sߴ:30!Ehkx2?ij&T[`IzB HDT=V-ze%$Ze?Nd.Eg+I1 rB|,#fSx$O+uq17*#yח|K=18Vw+TPsJ@ovy܌ \ $peҿu<$hݠVF3Rx:}QʣnhK7SP%tQ_EՓSSԵT=^:@1EJ32wYmEʞֶKq (&p3Wo8o9!&ZHTr FQ ]=k07q-7*q$TeL? dr4&|fקv31: &Bab-m`$/׾L[5Uz6ޡ wVc=YCOpUhm \5Z:_]قL4zCҥ_kE((XNπAfmp[U\PJlϸ8-~)jm5H59P=Qa"8qB.<"r;-69 l:HI{v +^HqZ/1$ -!氤jg︩}YWgOd4^7*PdLq:>R鲾{Fa9I>,Cxv`XVp:RJTZ**vGwZ&f^$/i: (ۅFD`}URDT:LdjEy_p]NmKLЁ)uV0@F-a&!+A/kC T[6>Uvk?Qs"P xJ.dGG{J~:GMԖG,@^Qk9J2q~j5^L Df@͸.ҭ ֑TahiL>Wo FMrq#zٚ1\ + rѮV;aJ{SN.9STd?n.d9sW`YkM Fikee4dmY0dB;6aʎoCzy{o rESi.yzTu͊56)4 gnj{,=8Ѣ:_1ht3%t3p?vr 3[J&HxXGswzb];׻ms~1|IC4m _oNkQh,]`vf3|) lE*Ĥe4Ϛ.x[sՓOfGxr m|Cql.)T`[00r NKd e~z)+3\~XZZg&+mnt?B]>/έx4Y4KkwW#75~+^s+OF!`]Q0m`-(QPա[1H&ˁ~eiC4cAQXf Uűq>E $Ps<qp4 ](+B 32by37,0ip$ÜPwbBFRT1'L{{;0Hxu(l\]fQ6Dtcg+V?,b.Lq jrJ5eѡKr5I%?2@XY-#=csH7]|{H)7k$WS?/R$j[{1[|kfTՑwBnM>knӍnLlR5.b^NJ94]~{zЏP⨶JP M`:^QLsa7\0Y'j?(gtm̴Y]de[` 2w)^d@);?5 ~y.|%ZORZXSz睬xOC< Z>L|ELJ_/s1!#(*?0R䇐LPF5M]apBnYR K&$/<{='{:}`y捿z+qЌ03s}$W([2&YJ 9 X'gwh&!\̜NtGӯNqDn!4ft%t{wn0 Mrvڎʹ"0nl5&: f-eZfUG t+bV7?Y}W$C$ۆRlP $mwvQtց%osb0 Fe}6T5Jt8q3Mk1 RUCΩ@w sـ1eߛ4i|pَ٣} IKJ!4vylVޥ_%Ӳ|glx/;fdPM R_u'’w"7[sHσ>ZaХ*#460d x{]V2:*ݣdV- i g]2x;Њ$l'\TnlvoΫ iP+Պ#ғ? )3b_es,2GfץF!Mn˱ $aclb^fΰv~?@3&"M#k;@8Q!! >> <1L((dZT\+1G[Z FI|.7ZXS>P:qp:;> 9">$ 5E$NM m)H2VMZqLcH yl@-Ĕa_ (=g|jeVe2& yˀUm`hϪcKtX{Ë|!©XX`%k|2 Vose~8Q Js0w>r"| ӟ!W_%'F )yIY % h,6 H( 4lj_`p}6i"s60|X ֿ: ԤRxY[⁠sXXFzCfhܔ#tg%a8%x'pm㷪%=AcM y +<$S J#Lɭ7"2uKӐWRMQ1JW"!ć6򺊝Q$V4Nُ½wG4̡xC(v&ER"q]YI,Z殖n=-O(4ӽkٌq4 ÇrT1z0qG?ĤmhAT=bmVbYbZ,}PzvEAY4/]_I꩞En!0,yn,oR >ylYХiRCԠb, 5c=R/)!yH&Ӽ5>V kRgkD|7)mO?#U}rnfoLRWĘk/x{ ,:ԅ2pL#C߂y6_ɋnZp-h)Gu Tq0Up\2JRM`yEqg>"g0.ǂ>'Z <?b:~&LRSd Ӛ]N ,F)Om Qo_e3?W˨ |y啂t-gf=upI9Z1&j>"&7=:UHDֲckwXI>T Z6'1@&:\qSgi3@e Nz7iQe)8WzGP,?< _ZTȍ{?j!Ș|+up@ 6~&gRYc2>U7Zt儊ܐf=#FM*n ZdJ&W|7e忄J pPO)vS₶ʁO\@oԙo*US$[ ch E=mڵ[A۞.[tc qي]}2#'Ӯ \2Db wPL()xɜ'Q"rz{di@GQ1!,O3~iU#'BR9M+]b0Ĺq=|۴2,Op6+aZٻ`M*ZVKn4֦UvL*S.HUvlZ4N; aB'u"ad M\BHܿ/"5s_e0@q 2|M$ms/߶uoI͔#B甆&zN\DR{[/u-̡*,Ч1kٯXR`鶾8IJ?PWqR6۶.=|wKd!zXҘXݤ?|^ڟ8>7{Eejl0fL񟦺a_ 1uA?x]Lv)kQfgF~\3ush@ܬ|o٫dcUx,c~dڿ&'q_DΌۇ=a.FqK.;xѸN%9wlA Fk9`L)+Z^C+k>l8q9RΕQ-&/5s {g&'ã&a+lOd#OgR.$qR' /0*;Us ocNС |wQ$@ϵ!a$ W)`N= -Io_ld\GqQ ak18}Kvݮf kdEtb:< Yc 0 OIn%>Ytc;Ln,UD曆4(wUz>?wj[GI(ѴnmCg@.Ω*>F;wW"$idP{ʈ4f a%xOVc5Ew*xj,C 7|/!vO 4E}8_LtqT"lFy-d*sX/ñf!NTv@!a /$? Ҝ}PHqn h':iiGY5Hw[GC$C*B-]!P| ,WvՒP&v v5aLMl6gfoKÂ7bQ<$[]EcA 3)^p3ڔr>_djtD>HdYZUhG[0 m.ʒ 8چ,g>@ԥJS_`nW^vEiLP -1Vp"[m _'+%992Ͻ=ktAAG/N&$2Ci>_U~ 6tQ1V gj!f|K9bk#\qD@X] ?-]! #ww#{EsjHKBXb!:7o}|LyaTSz:?^ jī`WI 7G}9hGJ磸du|7Opt=beju9i鷞 {ډ"iiH4kk2@>W~;JV8-E.93J䎬Md'TVx8I3*`d(X zC+DP ~8w^V@ 3;ږ'BX;BPzR(QIhśUOxn{,6a^$BO1 G$8?5 ӥ}M[I@ȚՏĤ)`P霃aq~s+P6 HYFo|Fx0SGVD oU< N#G c+JyR~>sz:1?Κ{n2.>2?J!V&N^x]%L#!XpUtxO:NFF-OgYyO$yT- ( u5\29Y|[o}^ߏaD&QM\%7XnUD.:QT4vyĆP'_td2+l(Ϙ'#_lYiYEx( I>g *FL[\rQaBWYX|Ϻ\$3t$^ueA5cFIXJ*%VvPXhf[. aܨreD#Ƃu]ħj q1/ W6˚W321tvo1E6%֔0ɖC4; @GkiD-9$0G.$L,Ґmrɵ3ZhȘQ )Sh@[Ap .*v$ȁխD.oZwfG4̰[*ń`#ƶ|?j l䋾!8lMoS&,Zuww ! T$Dтc(ǿ^oVHˏãÖD=X||ISs!<6j CS3#i(\O*I0m-%`ёW2},>z8MZ_T#e I^ooyh1=WTlMU437x~vu_yʈFFiFD<l`ؖ>zQZK@.ZQJ\eyJe /kom&ׁAm7@,*ʰly$*!UVu M͜[$JC\+=᣹PN^a\T8cb9k%x<{, ce=de8n\SbY +n[ uToFLձ},`b&پj]԰6]3F+bv695=qpR{2;EʯuJ* rw+<(IT!=: kq{1.G]t{IUq/nQ@>?ispъ/?Hn ݝm{ FPb.ȥ=pf>bpUh^WF g(;G u`#V4l&6(f[HM]{zpwUýQ>Sms̨cƿƎZ90"5cTU, kRgIOD1BS^S&ѾV?eӑ" C~[症 O4A-D&sA. Q. <8/ny}F*x=iF7Grq04z ,?a_ڑ ޥ⧾uT:0;(Zu?p.*|7??N zYabxS4@bQ6`#XFϱh*βtK`)+YTy>(]tś=;wGC0Ez ϴnlvֆ* M/S5ŭK'60 ߒCuXw$=<4An]v [V]%Y:28] ~A=[I.ﶩ9 ~RT`KF9h{h%]@!eۿ@^^vKhBM@'Q}dE̅fQL4 *kYV J~\rI! +\[P-f\P̒j!CyCX!lgi,wxJ1vWg>Fv.rNxJ]bu"]că4#q#?ǪФb!.-ّL"`4c0Sw@(}-(R.ӗ;_P(oH#hR5 򉤉ՇJDmj[`Z xMf{?2Tlnyb,b;|.{Rk0O*Es ?ޙ[*Ԟ)wzG]eXS$@{.5K\_k]i~e:2mF?[b ?Ò{dzW%AQWnWDS뉽+$).ƂN)H@ nEK2(H PQ}.U^+%>P1KH}Mnڱ!Hxm|.\{BX%&xV17'T"Xk? j,R.+> b|WTBYQ6|*>dL9=&,C*mxXtUo*sA 6 :d5AT\{{!rA{CvQQfnz¬E*(U;HX=E>Mf*7bG#>q*U da]aY^@梧s Eq*][5B~îkNjPCiP,_Kj3[1]h}2%OLӇ{ẛeƦ@Pq\ccqc 5:UIak){{ >u!|8~*G?Pqü[VcF4 gk56nl PinF\±8OM/,yQa5e+8Ov8zpd)W[n mh~yB)E2/I⩏ruӟS-5LŻ#ZR v*tviQ$hJsi]bcǚZrXY`1\+H@m%_[(qat<>$juA1=omK/v K'x7$1wDK Bې7BHtJscfT5'to@|5$I^@Ӯګ7 *-plѵf2pqo  YgYA \lݦ/}\[!,"qU4ů'u?zt&!![F[/mFl!Tג\@6EW>(씼Zu0g0nH[=zBYG`]3P şDQSJech2[lt $ސ ޝ 0g{C=,%X~wgMz=wW-xƅݍSqHKrdi:I"'sW >`ySMWi/LU|%̉[)Wmp~!n~#hT%|VTv7x`D\`SJȄhz]sg&T R74"n&1/O{V!M:; D2gf;(Pi)Dmتʘ@ݘ(Im<;R y\q-4zopK1$of@{L r"1$ٕZChE{8ڤx\cY>+Tm.}O[-YZYR!}^MD8)ŧ?q i)&}z_:\amwyG<2zOJh+O , Eg[re4 hl;+C5_T|BDie>ZL2Zd ̮(xֳ0J-IpQgR7Ftx!ݸ# ة!ei]ꀿ5hbr:inKKR( 1BBztBoCФ="cvH. M*tqʝǘG:QHGE6K(溥V'AOJ=c ,%<(g *U0rJt "bO]xw}xݯ2XٱL~G+ 4fxOjv|\yZj+ 4v#-yQyk 70$rW` nTYka*![bp_қ5u<%ןWĮƂ S9꽒#Y UOXQWb5"Efa. #Af`7`O|3_;3v/p7+mfҹk^3H7r9 |q )obv0sˈz9ɘ:4hU]dN;D_~<.AV?xC39KuJTQh]`y o欻3dɒ pπy/I@gk,@8ڞہF&kŒ kN"UKh3|>]_dgSfhV]""s__E<:c-dgac8ފ`co V&$ }Bد8~5;/3 X~"1`,9⃷3nSew'eij 0V0`-A ~bꬑekvڵGL/BȏLv+1 f!j\}gC0%* S.[Qӌ|`W}ۭJ|c+,Ⱦ@F-}J,G0{{Y0r0*#۸/¨_(a}. m5O&K$|N)IM~o#Be1YگNCj=)nSH/ă `B KJ/ns {oVf5~ö'NzA#qiO.=xuK79 BN ?^%E0_yk9Gyݮ S^),jF5+6,RcTtd1),2Puk(-үs w"}p"]4(3q<(-BnsJ'].Dg_#(dNb< ؕ7R x6ȥxp;,gѥh 8ףd#DtPƶШVR+ڵƉؒb.RDDQgOuBǷE .Ȱl s,mڔ=yf函lZմ8h4# E7vŦT~*1]]):L e8Q]5wi>gn;_k e9,{m&yp5Ph, [rAZWVGDKUp/U%/Ƈ1Z 0YezNIo`}/'ځ)=7GhMF{cgԯ;-wR|x}ffj' ?Pz(- l8s-q"} j^XhZ,`lBWvC@b`ѬCL ٝnC ΓfZHٳR27 m87BAp$p*)ϲb'&Mky3P谢7Bk{cW8y[M, U5|RkJeΝU= 0pxch(-gFZu,x 3iGm H T8 Lʶ )2IhUJ2#Ā=_m=;2h3TChj A>tQbf$I[gdknWiM`# v\m: Ow屳qf몺 Y4A c>җN2auw\#Zl{~~^qա`-k3j]v/o xOÇ2Єcb;gjxxdJOPp gDi-FA6fֵ9\[*z?4КO|96D;-V0nA? 9Ȩ2ʚ%߸LQ:] i>xƹ=F)?lnǴ):^ =MbRgu^C6Q9 XSPťόRz{#sn5 M b|(!k䳰G+bWV1 O Ii;qq'1j:!dA{#{H 3jAE?QnQPE*9\FwlQ9(_̀Bc˚Ya:4CT/@®7CfT+RQݻhfM;)bߙ6ҷN+B߹:C P&!C"m0#$b%so(<{[xaL,Vq> ; }h闥rj"ܮwO$3'^I-Gf0qyd@҂l)C^K ݩ(ȕO^n6Pfή}s\1jɓ$v?٢L<PlYy 3&\  }hن|.:{.<f>eÍ]4"-[- 䰅]KMMOU.%ӌI4djؖ|o.ߓ~$Eri 1& ]%ǖaq_F=4tk~愽(~=Q 1'Pq.M3ԍMω~\MjUxmXxy"OM=]POכndr£PEn5};]J9…rzԓNf3((|r /VUr9H (8'$L@=*6h_Z^N՗DT${\ed"1rIUMBymoC&}t[]C}T{w[ǔcZ#}qC䴢L?~ ŶųT,Lc݅߁pF7\.UNdedX}]~مVM 6O[iSE*B@I/xPjۮ44vӝnkF.@I<&7@ @5Q&'BXmAZM~%:iŎ}LUX̠=NnHd6N, +SPhE7^~AD{~cuFsVPI/#0"BR%L0s%B@|g#'*^Ix6 (:,r% WXvOcQ;DLlN7暏j.cf7=t:pM; ׺D!g0B*?\i_ez5v@`":i8P0ЇQx`Hf& ]d}Y}AML?^PbaPZ.QĬL{}H1TZ3ݿ(梫i^)X@TrDlf/I<"juϔ5S 8uau&.q҄"T;=2njUXڂ=}R#12<"FK jgX=H_Vm"W<0RbRP:PϦl"x 1-I)z!?93hD9F6u;rؒdCOjX$ux+0+Ȃ%O 8Eɔ-yi6]5`:&qkݴ3@PX Xk>hًgºjZÄN6^5k}rÛ@W'=:J 7>"_ C/k@Z*Ӫ򰁊v]kr6ȲoT;48QOJ^?tb(IIgdQ )[U0`'3 e(v,guO,Cnsނ)bF5*^6B?CS ᵵ8/ BRs̘FmPVId74J;uEq73̼]T4'LXW0P`)syyrR(_@[cDɭ K +QoL͗hs]3J'*>x< ua]`P#/f魩~۞*\pK A,pqХNzt`E̳>HDp̓y(4zVkYtuv"{CʛR^d3o>]3q"3n)SDXiij)f؃vuFtf@~,HZ˴+*aLuD3-U]asHu\5+QV{',_Ȓy2*V.6 $dAw1KY+#fAMcg0کx>&fysyR Ȳj5I鮍Py]ATڶ)i0:e_Au.N"oڻ(XDQW@v^r^./_JugxDJA0骛Ye̦(tA*`+LiuT?9b7ɋsaH ? <ҵ2{&kwHxiBd;eZ _uO"a1 az,I`3U`,5} |NA!^8:M†"`K?߮lq'.$ͭ9[6Ԯl/V4cOl(RL'%ٺfak GÞ2: %Np3W: #B)qiFoƣs7% w)%qnO,QjjhsfL;bHXz(wiPzU6z(&nU02/B;}NuסFIgz7>#b; ɃwLN*)|qMlGwPX+Os* $rq w ۭ߯[q9'#ԃP",KoG ץ,d4o2F*wׁl>\ |~Cf#4]bJP uN"҆ À+M;o5K˘be19S)2ye/g6к bs_u!J }0 !¦4Pl /Wh{ l uAD%3cLcVj >?I ̸RB2X eot#d*3|>ɷԅ= л>-nQI=H<æo;'[MtH2PAqV0NYqt6CLjYp9VNäc׽Cr|9$EF|a޶77$g5,~O+ubT>3ڹYz8T'xgH <'̴EuLE0}w\gvn?59pdh܃gA#K*FˣZp.J^XIƈ,O+dʢmZFԗ 89$1vR !ǣK(Hp FX:?f٣ <-ʑ ݗߦwEɂF,b Pb9zodۅvf!iK/sOgydc+?vlh%SU*Ȥe|p5c"ܔ?ӫݱ~s)b2KZ \JI=DQs$"^ ˅E# s]LK; yRiSI$/ȲAZqހ86NaK}Jf䳴>f#b0 M3bkkHp?ŘXv2 ~oD2(Tl,/uYjkB zXprpMArʘߝHU`Z~p20F))I7]}$~`!yLykm+@Qſ#ʿ]v0!KYH{"pAH9bMlMs=i<`yHs@etF:V#"T6Q=>&53u$}1ُv8?D¶ [)%26ȶ7%W /@w?]U/er%2ea l<Z40xfzs i)?P.|u_'MEdn 9l?2ZaǮ̕wv= l!u*@B8 /6yO"$Ɇ{n]c׳N[];mJ{zs~Gnd1WZ?͝"?m "\xM^: "F+E崸NQ潦nA&D)HPDz9s:睵Zd>NZA}21=8MqY>꫊cDk']6i*Dނ0=hRz兓 6Yh 87J()ᘝs-423Z*Zݼh!+|UWuJdN`b$jHem\&U-OlP'iMuvrBDsH- {? homyԡu$XJE+(fpqOAh4nP*3x묐Imy=JCل9oZuVѐ4d*\=TSQ}_͏X#l4ln[w(T a1\)gPU.;=|GkaMQTѱ׺ۊeV'AuOv>ϱ+ʋ#S(TN?S6+V-D9ߺB6ߓ;bb6rQ *,L^ I}TKf+N[_L\DZZ{'AȺ9 j Nb 5$L[P*BR-Ctv kP|D{SCwilAF.ak5m-Ԟ(܁8ma֜s^4Z3TI!f"5 ȜvVt;,:pi3)Jr/_^tj]&-zhR 8.q`6\.Ψ"cu %q"7KݎO zk3) *3ocOq52k{[7;60cnd 'Ӟ?F21GͰ0Seܫ3 P7 p̏U_6X?Tu5w-F"%#3A{۟3 5t, 49὿iByϚ a%BPV%ۂv_{@61kLsF2"&J|d+8Zƶ+b9b.nmF1\Xۈ,Uf^BgcxUqN!j-ZK)i1Q|YزHoo#L(hztWFr=MS c3=.o:5W|(7NR>Fɽ=; .g1L9ّ[^<nW,/tSe$YIkZߛS"pN2o7$%x- w*<:HFǐlT)I3ϓDḍCXC@|'tᒺOb&pV+Ə pA]b+]7|$""=taI`y׷sq `kTf-BzA6f+0T<| gcMɕ9ۦ쌝?HH$c_1" )~8V˜Ϲ~j.cNǾ|ptnwˠ wkE֛c4xZB}mugDI/zЀ~߳[\}ϫs& å0c5aJ@c[>kD%fDh 7mjZ^-X;^DpB UA];qn*aUd#SNԈvŤ&ᢳ20C#&O_`]{F5^{BfY عf ]dDMݲu$ߴM䕽$VQE5R RK5 WGS"%HfeZrVy7!a uniNzBf0bO*:_2zcjd+-]׫M_7p=^?NA-Hm 8-m<L^IN={ C.g+:ohtEn-L4 2,w7O 3\n O?N}J+l$ã2ud_oW=bENLjfD/X??yϰ4.`q+7h9ɉ. Mj.#;6]U 74xj:m5a>洤668_r$#c.Š(`n xg4ꞕ* N&8L}S`\Ju~yII~5u7N+H7=g@LIL!sBcY ;HXa!):;,}Oh"H*5U eMs PHKfu ڡ/U-6'@Apҏw[)r5fsc Q;,:})9´3 Z"{@:L!::3:}(`KmDU]g%J`2[ʈHQeǮ-,gڮqoXw Gb̧Nr-W)B҈2`Z孲,ugk! RD%p 4?4]s-\GPmoqAM9Xd.H3戱.]R.ζ=4I^t.U \AB ҲhPfEy;/-+\u3@!63>6Dgv# UFQ [ߢ~bW.5I _E!51p6qT9VSֹ@EHMZnf 9ڟ~''"@rٶ<0!ԼUt" )ȆBf ʗRVniLϹՊA~ YXWtL-L\ 8DĞnQY"4$~D)%O^Q@l*0~?Ic}||/ I$DRy*!].VAv:%ΕtL<}5R-ߙY578èa]FA 1Fњ\ U40XYח/yy} Bcﮠa;ZP*!*\F@/?]% z;}hbxPq/tOl1% s+]}m?Q3oârmv!N)JiSDO?._ ЁNE8h₄^C7P%뚑t$YW!m-'{r0,ui2r}9xfWRo,׶m{v8U|mxɺ?` j8.0"Q.iPNɠS:޾-lKU+fp`Gdx#M脋uىY^zFfÌdGde\J{x3PH:kz2Eϡ9`Z6DP[P΢{rS_&ǸiJovPU77~n;e[I7J^H4ZfQح|־ z 9>nIʮ@al{ȇ@9ueCzV/zl:yNFLߦ<'УҹhZlVS̷~t]7?' LDLZ ()V#[YxlT{Y+hз@03o=xilL4*A`L#K*k?w*D@%4)tp,%WgKBne L8(̽)'Ε>JZ4*ܝZX#' SѵUf2|k~@)+&hwa 8 |KNя7Zg Ef=ۄҹ6Ɇ@e(uOLPkeG ;±'cN |=s|lOsUmiƈ[a- ī)ͼUs㈿r*rﳗf\Aaq>vB$yߕ%SحRviaN9EWw!?+1;Dˋ:1Yۄ.pV?H ;&G1V` ;VP~92ӣ58¢[.Yl@)*ݢ7%pue!/mqD $ |SJMfT`:>̙I^̲tGӱF(uy(5zKQD75:GCCL6H% \I=ql.+؊CGk+eNFsmǎ mFWf3AZ9a8iRl|dd~`}BP[:s`~jtk"5gl D CM4TC-|-JiQqen6[+)eߺE@2v%,Inzj!**6VxjXV`7rQS}[NbZE-VT=߉CΫւ F h'b$uȴaKwg ;Zc_h0jGC O>mKw=ߗg~+$xK_~7 Jiye݌׎c-K7ݑKm|篩n(HK?#^ ]ͪY8njyw\=!M 3,֘4y=WM@xJƢN 0bj4g$kh ̖:ӴAh·^8w!r!{ ! Py/w12!ՠ$UZ`F^[>Sc(?;e5-4Rg >"oLn)e+68܌U+0ҊmEw}J'>е~ߘb7w#$Tek[v@SOԠ-,!KsԄ|Oٹ[رg#G1ͺ#K.@z>y9)6NzZv܌9En#EB!Xj&}C;aS1+,ff7z !_ ͊Gg!8Wgxtr|Μr{=xNb};Z&! ;уك]$sOįyr2 23أBd  /X nəc,HANHVU_PI帕%~ |ݪ>U3\^7z*~QLOҖ^%(+D:k%>W.Ȉn@M ռ 87ÐCu~/7QlPy]Z$isF&'[ 7-eRtK.j&sZɶkN̕\dAAyX )3m_lEƉ%^g-j>b|73/6:a_D 1B\Ӓ(JK 4Emw$ϯ:7ͭ&}=Y1eyGۓv^ٌ:;bID 7s2jv1M(BAk@;2e-$Jz_c d:c:!j_nDH,Z:8JU+?@ǪdVƟ>JmC |i`!>YрD|C5Rn*Yoڽ1 l%rJދ4RsWc@Ez,GW;p ]XaΖR] YXczdJQXٔS8~aD|!k; *󫋻S&;P"AB7 n?nL*k)A?K*dF~^ZLwq|Gc/=7IyŽ]B'h FCAldИŚt)%Ϥ'YpB~7c:@ג<O³)8N5wn*j=]]Bn"ԱH$ Xޝ'{Vi]x  U0AW]-iArDܕpČC/dC.&Ҟ+Vey"% : ~s'jvE)CGvʐO9Y<&{t2['B I}f&3n)dyK'+cSi#?Ye(|.הptlrU$!yj} C[YJc i07l+?UMہ9Qdr獗b?l.jiihc&a{Y2+VogɃjJ;=]x+z+!n8>Un7~h6k*E0zSpG .eG.|2;s^1 C^R003fg3!{nk~1=z%D*+< zv,Rs;536 Kϙ%)mS h?)ӔzaT(cׄoZ]n6R+!xd*i]qBd+0BB[0L$ڷW %.wSYߓ,ݦvМ95udj(X@*]5HoUrUc04o.%cyR?\EJx.wW*wLJ3w-1aUUpp>{}EB2IΔ0x`N7iHWppwMbUA׉e›'zQ0EC?ol%ByC=8u #Z5ų[Vdd&&_౗P'74HD m1PAsU[̋fM6"WVK(اX1P?s`]@%:ΰQ2bv,οB9.ay멠49orփMJµB^Sľo n yCM:#h0.oLļwE5T3V^=&)Fz?VB'.>"'8&Ͻ7\{Q?yq &= K~ o*OZF lK&N. ,_éӛuvx''ȁs B[{ZxS>lFC3ڹkd"#0ԕ$.he,Q8$^Lu| khoۚ# @+j⍜h~FU2 t҇e ]1iq7kfXU)I3_v;@NJy~׃4Y:>C.\NE }BOOXXdA:di@i[ivJ=*-uBEQP.˧kgt/Υlys]YsnXۃ_ 5}yg6Y+k 6KvK4(%΋AM*p_ &S_88Ķ>^A8J: I#q!9m%Z_Vo%OHuװ(ڐ\OHPJϾ}->X< _0KԎD*4";_iA4 >]`e&;pk8CbûK4 G}=-@L&)[xZ 074)L&"ъ?F|;u!yߧ4^i d9V{_<L<߱<^X@̂pO+"q˒``s |;'Rotn9;&(e(dAS y2RmW쭌:X* i'g|\"K%htlVݮ0|xMx\2JUIREQd=w@JMd><;q#e7KnRd3u?tu& lY`}XR >뿐t Zaq1\V[[R$pCԒHr.d|WC;FVkl2rݔ8SoE!-j=i~(FwkCbʥsXTpMlYd2-#h n{ZҐB<͹/1Dw0Я;Aw{u;JTb#JX_gG:9~A 5u bҜ)ͅg'Q2lv|"#Qjj;/.!7k;4u9Uݘ?e3/'&o4ȥ,y)p{>PXlq69MtoThsR?]= 렮UuߌcY9\$w\v(lwYb&6tܝ˼WWU-vǞu )$E+SI3h$5!RȜmws{Z mޝ1O\Qqv^ߩ\q*pbΥȩd$G\ؘQ}WS-= #؆<5r5xի"XpUaIt#zLdH+h >O+_'sͱ[KVXw;:H@_¶`R٣8̢ᓖ?:"/Z6Su벟1ef& s!p1U>}L @νX- Ŷјi_w\ÅK[xV#6)2{j-cy=uEEcU%u$nAzoT(JFiNdR,-#ڸ}Ye';wY"vZ4ݎm\ nT)B1-<$|cr90K)D-y,ZTܵ= < kXWu/b_×iU(IJZ~yDNz_F^B;U7훗`]K#\AFG-"|X c3&45~߂rGU" -MDkzR!#:m;@+t s3*I+qdoͲxZ.jv6cQ(m" qgAufvǰ.4~$ KiFMXjOR6WIxʾjlAǭ*f7e[%މa4Mʫ NMJNyA=29\\fwA wX[Ӗ1^ n 9#_㏡]SRR^x(,9ϑ4 HkÎv]'甯؈L'[{Q"B҃t/eec`7X[ Z'b|qV=s-G XL䡗- aH{RJgi 2'l_ǫTZKn̙# Hs9loע{ <Ͱk^hљKHoQNcoϣ0T+ TsK잰Π 5& mr+'V (v@|0 5h3"Xnq@e@/ |㧵x(Pfm9DCE("c(NfRmokQ| =#w|;|WT(g^kBo[Ō6[DVּ8!?}* &{pMr:͑.сTk&;Y>O$` 8iw%bN9IHҦˑx(h39#ZOC=K٧PX4@1YLs=YuPHPLOUvDz,Dpu2|VZAj&r5rgC=uQxSa'b^sw:¨ʙ|k5bwx,0CJAX~mO&*go}/=sq"zE2qVE?Bia?~11Pa*0N, .O\3}t 淙VMD 'u``ܳ7[rO:]JƍK.|0O47"GY vSƯKR{}/-62F tV(jʇ #OF6c Ŷv _߉򃆋8!,lT#p9bwPDoRG7c C$̊{ﺁ:3LSsrN 81'{EџJgʆӓ{"#̪#j ?o^G:ڧRTZHӛ! bP{CTZ@.dJDl˃0l]y| [UW p2X7Lm Yhǔ@_Gn89VtM~q;A!Xѷ۔Ҩ)YBRVIW~HF{|ͩ7  >\fGR&3=XU}zJsX =:Ń[NH aO;wT48-*aZfƪQO-vD7(s}7h}] }}*1PvJwȶR@eHVwY~] *{Q9Za f˵ ur?So&c<Q9EbEP1c;3~Ga/wDgNFRb%Yz](]Dܼ} bAf 4uc682_\64{.'6줡AC`%WN)u-R .vi?'-rR9*(XhA\.ل%a0ҿxPW+RiB0,@tR͎0zX9β5Xy[A̵ˆ~Ck 7YmI)PiA@ )lF#Mw- \'ڥ#4ԦbY 7 3»M>!uRp_W,AmEr$+P͋i֌TJb48,65)\uw nZ148P_J[쩥y5+}FZS NhFh=llIEJ]! vU8~S뎭9\ y:kb:mʟ/ΗVeAj=2n wK!1 HLHx<`P=s19QolidXRI[]9+iTa$D..gt%ʐA)zd5BU3^]bb[֠A\)\eK5t x$@;H~&c^9B7]w쎢Hz9WJ~De,%_T2f+3}[2dߕ!%q1pͻN$ޗ\@X>1yz{pl (vDO"9AD.!w6GhaW:__-DzVrWia z_.1!v#\HVTN &#/,y; XLР L%[͎yy]{-ZޯivP`e|@j*]BF\oš* "쀼^8'&?A/N!Ⱥy?'c`06dWYa:^w-|l՗Ft)=' ) l&^ۥ=ac/N[X.+쿔F5@cUdϙ7=b{pneoHP,9 KEyϤCq0UX&0^d[<,ȃ3h6mZ|11* 9Mܑ͠tԏbMZ#cM_ke(XqbV1 m 0bLÐ H٥p 4rt!R&@9Ta'#ꛨߟ M SHIdʦP:^  P%G0qX-^[,Pu8GlV(РycC/v]jP6/5c:}BylG\9ϑE7?['7;&gu|5vXTEh7F{15ɳE xg.W,gsBE,,04 qH:XcTkdDBKoୗ?']&%J*x=Q/+IfPKJSӓSj) P#p,ux:\ ZBK\cZ%(eKl׊+P *È!|׸ ``ׯɋ=(M`)s)qnР>(W}+!Ҝ)I݁ L@Pd%QK̕v qd#Fi|=׊L\jQANYoKik@\SǿA].zZ#`¯lnhYݲ#`\ ~Sa`l6E bƊԬYh0>t"7b`c?^JUB~1,gA@B i:s`|"Dh`0a̱ˮU sn(>\%$k!@dY^BB!#EI'0;?A|QImaOڟ7xøo}Bμj[ڡ14G`˪\t #]c*yrStUh5. 7G_a\j k#AU /3-W6"iM6Eseन@p`ZVvA (E*8TY!Rsڞ ̐D$˒H(w/^I+җ ^,-Yq~`0i.ɊJR&=mWH!!_cA<6v7(@a*Iiu"=oIlahW(Ocx^^lg3r)H*k33>Ê-x#'lbbۀ=w{ #2nMChr(މx?&_J9nx 9y'ZMef?6ԇ^G:4۶?c1O}b>| l1VO`gG~f£WaN߯+gz,D 5 P\RAA­,CF3sl⾡Zz$ MObS0NuB (qAìHnR@Yk`yu$ÖИ{y<8օJv":S2x*޹R[Et %vH]TJeWOe$ض ef`|t>&ϸ4N߭%ȄB93=`߰"v 2dVGM"!AlZDž1੢eD:q0>uM,B|}-wG%u't>:usdݪ"h h4H$BɑHhµ~f$ҵ 懢FS Yz-T9[G#VOdf6,N l*dw̃8dU Ĥj( !w.`QI&2oˑS ׺?Cm0)q~(7Jkftn'0P^mu2&R6dE<̱sHkU7bWڮx6,7%$t^hΠM%ъl5x$b B]qn} X2y<5(Oj]"Hi_,=_ui#~v]  X~P}~8*@*>x=_5-Ƣt0"FCT>WK$&n$ؿ"({ga7yd|{MX^ϗ#$dR4j+^'eú $9-z|:`HDxZq4{Z:}UyֲZnFP<EdYdʰ=zz4ZKΐ7tO+x9725X ]EfV\ϖ0M/mP҈t1Bev,/Wѧ#WPQ`5{Bu!][KPc@T·P{NCe'ìaz 7|/uȩiE]85'g-fcL$B$ReZk y-G7HPAtIlgVa xR$|7{*G3pFeJ+l/3 6e/ DXss wYzq&|\vB%j"U}j8󸌶<ɓ!̾#T3΢&YB@7.!uvrM2x:}qPW_~ґwCrF'/ݯ;7~ʥ4w5jsꗽ"v2';̱dzDv;*]9O$<9)5y굟4Bkw[Z aM+#+,Gz®D/xEHCiQ M՟mQk7͍rmYe킶#hJdo4NxI|`o/B+ۄ#8fʦ0"Q|}@6V tOb1GR·c#[ijW6%dI DdЙ/"Xv9SIc '5n4TQ {tn iciF5푝: .8u1bKF- I"Ļx_W*qΤxL{\+[ziI=3QԵlJ*>0LfS]WpE i2~/@\ajT#2oJ`y$0VnT*v ]ίTC8"`VbWtУz[pE2o>u @bq̔@E6<ǐHx9?rі)tR+PqUHX䤚)[ q]?{2(؞{!zx0`~k^&'_C@E)W߫]3W#ˎԝ3^/Lxèyi>c, ";PB&W1a^=⽳SM):画K,Fu{XOKT ;=peCɴG ++IPw]d×BX<]zs̶~3n42M26C C5^Sj ^s f] ͣ~#wI#m bxEPd@Nƌ+w$ &q9v0?[TKZXkb IՍT#4_qoRVEƆ6w14WQy܉%?ٔ`S0V]nd&K1~u " W_*Ȯא'V=G ,y>by< 0-|FfQRBSB4 V@巈 {x}r9-@>B o ܝlث_v|:c!"E+'sqǤAcEJ EkxZo|h+öhײ`Һhdq^a^`c7BhY9x]MS_Qi ˄ fm5][k$Xxow<%*>jLcķ}#RF8?Ani6zt }NRemW\:*禺bx5'yLƈW@6}I 0_ =)Px𠮥_vvD!dE!Q>Mf{ ?5;pֆ֝6S#d5|ǹyB:^kV9x0#:՗"'}`9vT&UUvh~f–Z ph:Uj^ Ue oq@*˝3:ԷoLϠ%ǗWmc`;MN> u$F3 H}}= - B$2Use˷7C^wۃp)t(B:P[8fw')dDP[@bmP|GuoU2(Bi7\A3jbϙ7*EMs3Uhx+I2Kd†6CPxp8^7tE(exЌ0O5?FlŸ;)mcIώY^x2դGm'C#7i檴NZ&xvOi?M*K3 |˛'K$0&kE9"LJ^۵Aw4Vƥ3;M$ Y/o[fνZub^ѝ5lre^T%7rǩMGďd+`LBz? pyk4.׳!uj9{b =Pb% #il%ӕġK1E>@[ߩ<3 n]G_oS5&Q$l}OaL 2tfkUgzq#,t?>?df$HiPOy`51Px&eqFX>;zLmZԗห_Gk68-Crw>T_M+2ĢN6@7BK#AB4vŕ=;xt#w_>>4iVg^Rp6&A ;,rC̀γK럭馚56٥~) lWrmK_%;+y@8D+bfï2"Ow#_bҔ)7`wW&.U)\Lh)T5ch,ֽ/  Na;YmȞllns4aK0pz`*e<%AǺJ&N`фhIF("ʘsP'=ϓopu r(eQ\Wn>-~Jr03Nv)-DUJna$pCzydGn"ZhF{QmN1<~dYB0ߗوҿLfdD59"xàEBiӋwDܻS  t7xh:]P}4to8ZAi 󾟾RZEG=+Ix󠪺-1"Type:)!~0.ڒ f>)R Sp TemS^[gǮu+>z=ȍ vk8`pBI5*#KO#yKΜ[2ŕB=BE-pn"̫20;iA6! q`hMo8@<5!g~'+ iƂaC()8M2 t1DQ?ikޝ޲٨ '( (p9MY&jO 2vjSH-0♆8j0s{-y=iZ򺶼ʺіԕ;oҿqo\m)z)n;k mU)XS  t4MfQ/u,\a[v*pW|OW9xW4 0V4%`0#rI3}f؛S=dA~Qx:CɖjM76YQWiZE%OZ9-M*n6`?I ( 3 :8Dy;YЪMM//-E)l-մQ- Meq&eI3ZÓ'ΛRlPTHkS?6sU:Z9CKҍrmL~]{5lNxR:o4V; EM5OR RteA 1k PnOf3o-pVs;L fְ!kf;aUΎe:Z`gnIh)Ӽ~a]_ cLJ/>||tfPt6,?L0pM>[yY`}MpyAo͒ӯvrJgJ9*xw-w2tɌ耳ݥp$BzɱTZ5<Ŏ.J6Jd$:ɝ"M!(SnLaG~:%7Mtz 힇2'X#a*jLn96k;QJH4;x2=*(W4QE5]Jqbr>:]fqS[z$^|}Y@#!DVԫ#I,gO7"EdTmXjEmwy1LAT~D!#V(+Oce"aI BEMDAkQH@G~wvP~r[\Y-Q~nE Kئp9 i-/& b=bit+Z{s2^SA:%&%nB%|#wswjN&~rd'x4{{^ۂ58^gpik7w~!R%A2r-)= sk; 4Afmtlbv_ ܞ%)De V^eO0o5\ n>;V;dUohw'm Ő |7-ǧT^ ".O$2BO^U8 çPp͘HH+\h9yɯ<5`M[EȗWR/X 1bb;(/fX?+mz67yKBz"ݡ4sxf)݉lDN}Aj,4%Õ9p97%M ;GSKcY9A Ms'0Ef 7 ӖYqP-jvZ8M$xsFyR ԍ`fzukcﻎ'6s<]* t 35\mjvppz➊V"6$/=mcDu=RhX-ܠ~Dw&!0zſVO?|}3WHh*H\ R%+JPvྴ=<TX!3vzFiuo},4l+Z}N &A=&qp>P}!xQXn (7kB)@vF 9yߧI<) 3rb[0K¯ bbĐ*l Pk(09x=j C ~J"bNdsu4ڀU(ՙIWEmbD|D[ rɛi8&دى*YFfep%vȷ?/%*c/Sd|S\q̎`A4 t(q~1ApTEpDQQgw'|L#'/oLD>MPX[\w[2~`+NqA86{um@?N7BX,F}=3dӧwf{0U?G33O]x1%2xsmWma0FjHY,@HV8&htk'4 {8~mZS''A]@F/*r]8+WA,䨯=kfMIQt6D< fJeLdki>15LWu[޲<OEWLH5HsZP՘ÜQ 4+62l2U} +IaUxik VALs?%Ocf=va-z+W:YYikf6|,X> &_z'|n{Iu,vH RӋػBsRa h[x2@VVAuݯNJF0L+L\ Z E(\L[,_b}Pշ,:/ 8E4EG< U\KV@kN[a#Xf cIF=뷿ps1+!n4ӓ8$ : ə#u[ƿruhYLSmB,.a3Ľy>w9rv-הn!9DΆ}_I\ɉH&y^Ko]qi=ϵSہv[Z 34!fm)'K xYRxXWך'PcSGx҈c<-8u1۳Uϓ>x;7\ @Èwe|5Xt'IU:жDzWaQcz[;ZlH$e^>2礄l?WdAʿ'Z<٩դ y֬(s&z Fr|a 5?&kB{㻡J^ڣ$=}^&*&ƑmSE{hm*çZۯSr!L",jrcB >Q"֎mE/l I~Uv^!F&xF,Lc@c%E)Ya.T^IWh` wOз)-exmr~SFSPZ&l+8d;E.v||(Ӷ4?vAIR$-Icg~wy헤Ą~1ȏd=M᭒99(WF8aVu:{TtXxKkT.ke6lj3"ygd@\{2!뫍W+ M4D3rRi@y?J/'EL| Nč:QC1z!"ԀV K 0M%daBQ*ܡq}[i b <j|x) &~p*㴕R3$h (heq8wNz0 c?BƔ~E91yM#9۹od*@ZYU!\.@BbE4b}'/w; _Lr#/"8ݽ?B}IdBSDlqĬ׷[)Y0ي|YE!?7DŽxDǡE:t j.u1jtb_h"!(?ͭH~]=ɌdY#BErlQ֏0٨U*ӶƢШ [%va3W1ku'eDK[1DbA60~c i$,:dVRpKH>/*?Y-]ȒP"$~O6JR}kyCʖ%0GK>:}etoMc\VY@ٔq.@[|][;0Y@1X{_|v/6 4*C[A s0mTߊRb99Du?k40q ^k9.FB៬XG{<1D0f@H12uMލV]>pܨrÁlY2$ej E{zp0e(3[$0Ǵ dE "e zugq~ 6ݘ2}}y~, ᫟KT| 1x5qWm/qb[ on3e2Eל\2HxRCR+-% $_XJ?#^&-j[ FѶaheg㠝Jp U0h\ZH ,W F X*cNfS[4'L3UfC*7vͼʢYOwCg6 ^X`kGnDI!s*U/PP@ùg5+A1,ku\zo~KaS}q3S&Wț 5:zנ2JYD:Ue+,N| s,wbo8[Q׳VaB o*}|MFͬ*Ҩ0&tط h5 o'eb!X@kwE'LK{"LdxW}~S1֡/ʺH![C)ږD\˅MFkZ "Zn:/Z I4(;z,c_s 3[1l AgX5HiC%<0'=|/f+Xn2q Soqh]~H Me"(gIb0_xKJqK{J.jv*~@l=Q~ka9z"Ɉl*13Y k[9 3Er&d0,yp`% *z][mMH@Z ε_=O~L?Zh¦PM h*JꉉƊpxW7A"<}*3 @ω{"Ͱ&|fzVn+'4E),<(#Gq'Qc)^]CZ1~)X[Vrr֑lagO?#NYzBgj:g: zmG~ %^=z_h|UyjnS "T, įXi/)b2'zk1r_ݧ^r ř"\CQ@WdrJuy%w}eE@RwT <z)\-Aƭ97M="ʥ<8\Ԙ#l_H6z)%熀LAnUd8trFߨZC FV-!3 nv|jJiqgpF QzzbyF);4Vk?1uۈ{IB-$G#uO\":̗*U;m 6D\Z܊zPd+oׁ8/톦/|p{\MM..osA+Wl$Й\AhhX 0%@| ^F^y,oۊ<_Rl6u`}gM旬?YVͮK' k\!&z^ ^2_=MO7oj}oV'sğj$DVD.qYvFsfW@O+sP3DDO!K"MUCK-[7LtO +٣[JcRX?OW͞93Ly. >2ܣ. f8 ?)]yvMWʎ3@0dR.PR}h0 FO  )~Hxu"}&|ӎ}X ?'& ]Mmec/g6Uia[#̤uZsKɺ!JX!{v֬ܩw^ AS8[sb6Js' ur ُ -XMK6]w5\6\" g Sם/ު4҃pm)>8 H-/DdHm@3|9}6X0-‚ݚ#dKl'K= _hIf4'ib{⻗. ތ _˨X]^ٜ~K/(9fzTgfLK Yi| |fY/NcN AO0GHQ%.U٪Ÿ}z9;p[?57b/Bep~ 6flDꘛ#U=‰IZЗ<4? fPfg-r ̥& P͕ e_i~~.5>kSF{xɉiPE}< \ZD4K5z҅p$s|>H2g,>C@OHU諻9==pf񘯤no'Q* aY5+$s878ٵS L>nRnI#UD%gxYltwBËjT@ZB)R#J&:Ii\׬Hr)-|aHK_1W0% Zj=¨aݘH(6eUw_B"7JdڸB"d% gۥX6b+O}@A;9fB8tW`ce%PD^5i9({EFZ2 ~C9ڂTbx%Q 1 OU57PA\ơMp)ʯKEf"`2Oф3D m s0ИF %C8*!8[+O+gtUԉH d\qKޤtvab0>?L7۳/O 9>| !Me '|8kQxƑPG<2 ,cݙ#yԔdG]˱ef<DF$?q38,æ+ND["# j29;2ZlZ Q*r{@2ٹ:iL~OS9=@ ")λ[x]"RӡvpDOx<<~g m3CjMBQ!BdX=d^7=:hRBI ͊Ce/>mg[BUL("'뿂Cj@L9 vʊq |4I2?O ConUbG2s@R*u(0P%,:0G f B~cr<{5`4:Npe`?X{pt|gL朂6d{x8w}Q0hc+پo|OORǦB|T\diVXP-mWS~ rаDͅ iOKl,ZB xlEY#pPn8lp nnqF7vV`_Y ܪ _0}Ae1Sm f ׏ }P 1+ky;#NqxO4u2hUP_Q?2V#Ix&h=JE-Bxy8b4" Tq{:r 8mJb] DL(%"(8KKDRz?!Y2H2 LpAC_H_s`2Y= $̎vߟsN=KpUSm ~Rd7dqg(jPC̲z#ؖ^+:<0Q<(_ygwFdXuPU=%0g-H#U8(\L$Hev ppnݽ ǛcK?941ynZJ 8n8++PJjnpJ<r~5.X/jHm('C'./U Paw׭NK@e.sQ׾<ൄW~ 7I_j0rWe%AlzvFS{C lޘɵgS{b97Uq!$$6{ƣW_Y wƢ&S6ԏ4C>?LfLc I5C@he!Xv5Bw6ͭU"8[/]8~ 4L켟 Ǚ4;,eϏcŸXEyzeGAbp|T1Tx?8Z *Pt$Tmg*PM[0vP<.D#⫮VҵO*+%f?X@_"]cS%X!vt'uO[!J YK#<z)q7UlvYU^2WXw/86x#_TE4I͎,dLDepgH< L"M,mۄ~3bj㼙qW/!9P=j.ҡ56}Đ яB!/pf|rP 4|{J %z%RgQLfy;Fi6^XLZA"+q^Е`ͰνYRrO;5% yGW17:3rny^ qkVչcv^\}$v jx*7XJx@ގrݶf MOb-sɚnuԸ7SO#)ẹ3.!_ Zx?پ2p HO\O2xF_c΅"G_m`&3<'>!<'(' 힅` MRsl/hTf!L0S)KE  uYnb%BIA3D #6ĹJYwnn nҥL}ٹddK"z22%QI1Kn#o#t-B62 _{ EGT*dǖKGt+|bDsOi5ٹ "MYi_3 yr?דT#휪tʪ%@s vںQR\ uۇE>⊼ңƟhaQ/"X?30" Z4 <%!-vH <;P_)7N 9ɇ9n49c@FB^3CH$Q,]4/1a/*Gmqc/ u٥D3;/U 5F͇7B;lruՍ yɮcv}p,G٘-.:@G  А̵3D5giiϽ\zNdއڵp5~ f&Gx#VyP{qӄm8+>N #U33:e*+Dzg+m? Fω_uK/|ډ+3dXPG q5عRn23psO@,u撥s2BTLDq $Հ*CS!XFf}U87Ȕ x!ߌ0>35UQD;t+5\C ,Q gA@Z&ޛuI0qoIg4Qf^ȆJ-\3]QHJ̋lpau+;z4z i1$jM%l•P^a-^!YF+P~P AtN M[%Ɗ;Sl#5]mD׻0{DvuǍ2V֭yݙkRvxp\b;rȑSRibM(0+oe\_ضB?{ d:{MڨA[A~uzg2m$Ws`bqIqS ,zy-0'쀳4>T:y;;)w39P:H&Qq!B~?kG!eUմLpdG(ADH-酊,0a<Θjo(w7ӡtNA ,,7D{M p;b6vs仜8?p j/P}g_ G նX Nɚ>v8པǚSi|yqq rVKJ0:*v_H(Yji rlӓbnҊA(e dKqW1~ʙ}AZ`н41&0"\i(#m`̞jLl)1f>驑p3Lmo*9$FPf?;ډ͌A5rںp/vD ~a ePP]-GN$[ξ@HZK(?k|Ƭd=m9t5;u upu,MS"#R\YtO)1p± ^ȼoӮ|#Ju%c?11]p%fNU mf?Ċؼ#b\g|I$T+њ?7@%&#&7S5^?U4 k^).;D[H/|ӎF.L\eJ730WyMݤvʎћ zc<4ğV,,k\ΜsX&ҎD4ø~pDyj!^;,٧/w`jN#Si*щ;Cd]*CvxA()O>\NMXEh!M30I,wTlWҭBY|_џ/΁91f^~@"W){+M qW Pm F"*[we!t Pm8 k*(mÞj&GlXtN.6d&v&d uR1l\fx[a`uOLr>b#NtlD'#ï 5&R-j|lhvd--Q29XB,d +>þA 1=BܟYB\N+d|Eu]t5;D5ngVo69Mrt q %}R1+2PU#,&f#e- 9ec(yCcyi&IlzES ,A[O *D1WJ}F>󳸑lN B?$g(Oe+x)Ԯ7TfM JBvt(Xe*.Vz2JY4k?( hv#Q S%XUT (}1g >.3ܻoy؋/]N\ !\_Tiys,IzC4kiƈʼn>Rs;(?whqeA K3E3T86/m 8o8#pIz:p{;J2 ||5ֵl߇b}͡k/>Qd+-#SXL7 I f̒Wk>'iC_k1ul4:brSOӋ-y⹬:ȦD" 8p}{q|]YI'VcJ2<*[5AG^uGWRKvLKgz%z:j4%F^dreI+ЯE&x!1pOcj9ɘAֶ- kA\YCgH˟F77,f+QLJXy ^4C,m,onjtarW_ QRhv9: ͸sE0[9p8!]1ba89GDj_Xx^<͆|PXUF+pc"23.O#̓dtsaCB)<8iM%dMl*s0͐Vb) j U jm52N$wA4GY;|_p\r~ _ϙD"B.uh*?ޮa`eIϢ܈5hdkAq[d,OܖO !%$~9= BˊN/Ҟ~9qOzbuFkTSO*J灕^P-gi|oN-k~yo}V;SX>"Ot'1v4_;?}jlHe>&q ,g lpIsϺG3, {v&0@C΂))ɲ2"ajޞr_ӿ/]UV"bwuZ13& C*3mjiǎs O~t䀹l,Trl]M|s䉜qO}ڦ [K+ P(E`z/.<stdt*'^?AMfЪ7?[1HC?u-ʴjl>R0U5uXJuuX^Fol ߱Fw뤫kLzLɝzib5ąr:h_91 6r\@x l!:b&eK,懯Agg(R<>W (=|JjjIԝ?f.u_2책D`*]iߜTE|,d3+Љvq\Ǝ7C/v[Ub$iٵܫK.vyOz4`5P o*.]nP)X[pӰO4"ț{EiM'u. A8Ccp#cc7#^ ֗ϓd[I*ǷHB{RƄ|zojkWTqQ >U@ߪ肰 cLEp0Bl\`uݮ'Hju@/tq# #2R"$NJ>p7"v^&s3bx=Y9Źqj靉U#O-0Fѽᢘ={_ZΓP 2mz=wӘWﳈra-KN势qp]!f$}>Yi[!;FRG{K+vgȶe"3~j۴tOD4qHl UjsLC6ˎ:ԓ$ X]eD7jnлAɖvIь=yi_Qݧ@>u6yb-vN,] =P#e)ͱzr )n= o6ȇHzn,y:>$Jyxsn(Vť&8+f~0$##e═W›+PY NwFa9~u~ IT?%96};ZZ8m֎qEl^2"M!H` f8J!Pg 8U?ʊ&..ÑH%b+J-wK7!IC.5I_ljVM{ Ic:ꞎ3~F?{\e·:; [1\>.X,l3/HMF }XQnOCfkcb_|rɐMXXj+҃+-kLKP:uV#9")([ҊP]5s~@x$c:Oߏ x}R@MIc,>۞ 9yu0@7-b`6 #~0CA~? /'5<2? NJ&EG8v4sH]L)[ :W3zKN}j !6 !/eL_8ZӘJ(oD=+!_+ Ek6u3(z M).Jg],Cef'|JU#e֐Wm[`Ext(?z.X.FF",g]&=Meø7.pSm)T θhNi8_B9;h|,TwhMݣf{4Q$,<?TxṮ(*Pz‡Х"hulk^].h{t$P 0B&N)=)3À}YweWlٯ(=\qb[zl+ T#Llsآa 9>z >ό`{#AYұUk~n;Rݰ,b{ei8tz̄O̴(xC6[̃0vj "ݼҐ您6pbHx*& %1EgG|oH09EubvYFl'NF`Xp#مܘwYZ2`lVb֞P|iUw9շeG%Sk$ 賲v:&c!OTRuEkfX8*[fj8/8h1ݖpV`{X4N.qam-*??_aZp6=[?Sk .:Z0ڵ'7W~M+%6O)9`"ڈnPԮ`FAXt5S9;u=~*룏+͋`> ־>I"31&{<fK eQB"*G͡LBq'wlֺޮ6JpZ_Js{O!CF&2JUI^4y;rOH8bz+{H=Ae3dqg^% -႙N][qC7/l 4tݽ#HV@ܵ:!KE1M"YQ+$w F޽[{/3sIJdxi`~?P۠>~ kA_ms\8U~Ԧ$gKʇX 1fFð|| ƨTvI!)drU^RQa[<]߮bP R!-EnDcmzf’ĝ|p;卮jrcЂ)CdnhR whRu2,iӪ"Ɣ:-K@ѿ +ۑaUR',yC-h1B:5]YUJ̈:MzJsC &׎l~FFM|9޾8RvoGeUiAΌ,+)>63Mům"1&bЎI*wщg5zaQ[M~{GcTF4+gśx z(,KbnVENWǴFyfuex.@ab ~S,Ab||)4u&!6?q`ܷX#" HeKsU" $sv,o~CTȽ3 픲5Ѐ(%C1Ԓi gFykq߈+6Q2 ,Bq&tqDɚmR4.aӑiI&3*͇<ŕI.\@X\!Pm>|k{t˕Xֳ.vYϟ@cZ}T踓 # 5)d]^Vh*D%|M D%TJ C+PRMkc 5<+R]=`Yq\&tѯ?tۥj-_"zV)h66#t+ V{Ԡ'jO|N@pM6qXyOsL%ۣR P7#]%6_g pΎyNK_\WbPOfAZ*.خx' 1V~K語˰23"gCH-ot;,MKF$$!ʼnUXN*%~E+<AwѢ]:8MG1=>|u Yݞ fÓ"IV'nȌ9v`f<Q݅{}U(bc :hI`{rߊh; R1gfMۃ?)k4sD"g`*0ݝ7jH\lG)(,''Y$8-zŝQ(gd3*WmfmZO) Ri5T&|^CX4I৸j- ݬ%ĚO$]A=z}@x^-Ȥ Y,u h5k#nA!+rOdorjIJjRWMH|(Ш>BU)^pJ+33L,rX^ p־Esd+6-y\~& |,QX^E;ðtCCT0\epEJ PU7GQ˝l~EK [sFN7W.q{'٤;tɣz4ρ`Cm<ݢe/?~[wYLCזCsf9v r X6ڜ7B (f%|p7jIx^H\f% RИOh"%Ea$( &?O~U< F*;'هٟ6ք?y2 ̻!oGb<#-xغ3|Bct?j+:7r34k.@,@nd0z!pfymsJg+XzKC{Ʃ ,<h~u!JH7 nSa͈U;XoQ ?C~0.)ʪ'Nf&BhcBG5~ic^uxDn/'Reּ{e4U.(h3&k }Pk C#hc_&l*הWɑ(}|Cb3>v"hKv\x3{nI?5"ʏh]3&suwƳ^3IzBxw3اc2oAw_:+^ᕈ4դ-+Ss˽=Be섡D+G%2H J B}X0v4o8ڄ 8k\l٥AɎF3lg 6JkuI^c9cҠ&,-l:s.d*G.>QƦ׀d|!hM\"O=`~#h! TEZ:4J2PI 8[=ZpW~{N"2 k'ﷀpUn+LqLqLD\Ԕ| %S.Oj<.H7S!;|ӨID Dj}\i;ͮEu JB3|5E-{؎ Ǵ_ui>/.\wn1s 3-T/P=08[\/h^>G֞n5 dkAGCMC}f9ɿ*Ӥl|mj%߁ _Dn.\@P2uIiڐC4 i}Ac1bHq[k~;kq:WPISqqGSc ~KGh0glV܉;c{k/Z>{k')İ^|\ȅj9C5 B10,7]ROFZVQ‚d Zg;1`WzLeS)2iGu>,r}vu!NBLKg79#_ܨ^ Y"ˬ!)3?3U^.ʲ~ȝD4eJW3{ӊpPw=݃ L:I^Mq "PlgDOkؠØ7x<[4CqM$Y': ;rzh1lkL)oud~Ku퇍`жvKv^ Bʱ\=#Sa:b}[fQfjEL(ˆ9"w=%$m!ꖂg4ᣄcq dQ)Oo)oL./;I)(p~`6:~fm>Т9& 7 W&<燵 C0LC5o/qy=w]}ω!ǰ]nE@q <Ų'BqQ*j&:d_!JKn~ xnyGz 7Y0jq:ٜm$c#]4c00LlK\̾Rt!ZHWiQbm$pRuH6 J~U5}9)<ߩs.1.KfM3Цv'nX# 6jE \m]VXo lIJ9 ="Em9%F0>RAg-ꌖEf'U۾*Dfb}qʝ?w_4l>*j8"P*9\]woʭYW̯VW J"VbCDo_'c&֩t `$톕tĔ]a(\SIx/BT& G>> \ )q6{ L.0gEŧjbqy*M}Nei:6ō#59&bz+S~bܕp &'-KF[űCϐ9f*X3JO젒hK׌/RlÆсyQ1cJ8+bhzs:=;졌b,8~A˅ 1Tc`Pw 6̴Xb` Ӥhn8x, EFٮ BS'@d1 4L)FʖN9wC>fpazbjlg 8ɤWۿ^ݾ}#{$̛TtY=IOY|JIY"Mtdo4;k5&osH/-3IS${߬RZW\vkSw}CT~G:3d$y5Pw=gțaj0)We XWY+b~dđ*ׁ>%ZS%ݙS)c8 `_g/H[:ϏԬ*]V{%!b6T \܌| ']>"jֻ)CPd*l|ot w$I 7ݎEx QZ׮7$^WZ@]9% Y=h7r$ds|]S*".bSȩ>'R*l!hAղX_ɎCrwy6Ыx.)fصyn!ʉiB )ӇW`3qٝO/+bEzLn\L}*׭;9y~`EjGB*IMDrW̏'2SaN]cƊҿguf>g2_#q Ǡ[D+Gp?f= @6j&gXlL!E8o um6_zZǺ>"VbRO3@o 8q0^mJЁ~,;ds[ 775fVD0?:CtًtCK51&_lylƎcFC(czbT[',6Gf6*]\R}py*ڱ)B<` ܬ_DZl|1^.E^:XT¥δz<7^i;Øcvv]:;L@XӔ3%QbC f&Qo OԂ倈f>U+N]zX2#T\Ԉ3sFv&a\k*fW cNXesa\c֤E8E7֪05Dz5\pG?mBOa5XAt)L`bD\ /.9ʙDG NϼrU&h ca:?_A3 #T?cϪ ᅥ#AZ/h}~v\YqLm}JtE[M 5K}&݃;kKDAl $d(BQ6X: vd>iڪWu7>>s6µ{_KYi[&#֪C{~u,.9Yr UO~&ȒJHfZ+ ƣ]c6P?6yәJ3=zovb{}dLx>wHAu,3?=mӦ˞ČdW3J9Y?-e~фE?dxקbv:_d6`(s, ʦxš:7xvև#ݲr䖤WS#s($uޔ0?fAp#oLn%sus֍n◑lHRɭ>v8mX3 STvKjʁ=Z4PL3fz07JD-yU!vKe?/5L#󜄧D^m8 T'@{֒ڽl_jߵUz$8..@zS]wD~}Bc:UMhvh|{O 򭜙U\MA,Los(cޚi=hʖsǽCl_&EJ$CjP/8~b첁(j317ka/MK\ 9Z "© MvZrCdd#XEyɭ)OCqv aZy8;4Nꥢ!svQ C} ԃpR+ $$QjsBj*/;x4JRYIRUȥJ)8{̞[:@~r@M f.ܤZF?7L</X%WdD.8Q&muY\GsŏbaK«;iOuI[7۝[WAa-7%M`3X辵\\/^Ȩyڛs:Z,v;lb? y>B2Ί.wa;}Bw<#v(ZTvC1 f) 0཯G; ʲs5PEׁGux5Rh5Ohm FY=7D.g5+W5;m'WSyzJ+)*J )f]Il]`1#z!=dN/;j endstream endobj 1 0 obj << /Type /Page /Parent 1184 0 R /Resources << /ColorSpace << /CS0 1195 0 R /CS1 1193 0 R >> /ExtGState << /GS0 1207 0 R /GS1 1206 0 R >> /Font << /TT0 1194 0 R /C2_0 103 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 2 0 R /Thumb 1133 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 1 >> endobj 2 0 obj << /Filter /FlateDecode /Length 3 0 R >> stream F4bY~-]<U̡U u㼒dWoRՒl33uahv,y gtYV2,N6Y@cQK;̦;:,xQ>]'_댌X&;4Z{|?t?k/-َ4g~np4ǔwʬM2OG=flңAEmǷ*G~U(isWk>QρКPZ* nb$BP1928z[O0Ԟ _ )fv9'傞a`YP?+|˥kq&p< hk9 K= 1e.w'K*1]gur> /ExtGState << /GS2 1207 0 R /GS3 1206 0 R >> /Font << /TT2 1194 0 R /TT3 104 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 21 0 R /Thumb 1135 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 2 /Annots 5 0 R >> endobj 5 0 obj [ 6 0 R 7 0 R 8 0 R 9 0 R 10 0 R 11 0 R 12 0 R 13 0 R 14 0 R 15 0 R 16 0 R 17 0 R 18 0 R 19 0 R 20 0 R ] endobj 6 0 obj << /Type /Annot /Subtype /Link /Rect [ 127.62 583.125 499.20001 597.94427 ] /Border [ 0 0 0 ] /H /I /A 23 0 R >> endobj 7 0 obj << /Type /Annot /Subtype /Link /Rect [ 127.62 556.54492 499.20001 571.36414 ] /Border [ 0 0 0 ] /H /I /A 24 0 R >> endobj 8 0 obj << /Type /Annot /Subtype /Link /Rect [ 156 538.24487 499.20001 553.06415 ] /Border [ 0 0 0 ] /H /I /A 25 0 R >> endobj 9 0 obj << /Type /Annot /Subtype /Link /Rect [ 156 519.88489 499.20001 534.70416 ] /Border [ 0 0 0 ] /H /I /A 26 0 R >> endobj 10 0 obj << /Type /Annot /Subtype /Link /Rect [ 156 501.5249 499.20001 516.34418 ] /Border [ 0 0 0 ] /H /I /A 27 0 R >> endobj 11 0 obj << /Type /Annot /Subtype /Link /Rect [ 156 483.16489 499.20001 497.98416 ] /Border [ 0 0 0 ] /H /I /A 28 0 R >> endobj 12 0 obj << /Type /Annot /Subtype /Link /Rect [ 156 464.80487 499.20001 479.62415 ] /Border [ 0 0 0 ] /H /I /A 29 0 R >> endobj 13 0 obj << /Type /Annot /Subtype /Link /Rect [ 156 446.44489 499.20001 461.26416 ] /Border [ 0 0 0 ] /H /I /A 30 0 R >> endobj 14 0 obj << /Type /Annot /Subtype /Link /Rect [ 156 428.0849 499.20001 442.90417 ] /Border [ 0 0 0 ] /H /I /A 31 0 R >> endobj 15 0 obj << /Type /Annot /Subtype /Link /Rect [ 127.62 401.50488 499.20001 416.32416 ] /Border [ 0 0 0 ] /H /I /A 32 0 R >> endobj 16 0 obj << /Type /Annot /Subtype /Link /Rect [ 127.62 374.92487 499.20001 389.74414 ] /Border [ 0 0 0 ] /H /I /A 33 0 R >> endobj 17 0 obj << /Type /Annot /Subtype /Link /Rect [ 127.62 348.40491 499.20001 363.22418 ] /Border [ 0 0 0 ] /H /I /A 34 0 R >> endobj 18 0 obj << /Type /Annot /Subtype /Link /Rect [ 127.62 321.82498 499.20001 336.64426 ] /Border [ 0 0 0 ] /H /I /A 35 0 R >> endobj 19 0 obj << /Type /Annot /Subtype /Link /Rect [ 127.62 295.24487 499.20001 310.06415 ] /Border [ 0 0 0 ] /H /I /A 36 0 R >> endobj 20 0 obj << /Type /Annot /Subtype /Link /Rect [ 127.62 268.72488 499.20001 283.54416 ] /Border [ 0 0 0 ] /H /I /A 37 0 R >> endobj 21 0 obj << /Filter /FlateDecode /Length 22 0 R >> stream `إ *ӹ9w"ۦp/duz / vUV!: ;vήMsR+!PER2 ˶ݙp30$u6ֿ#$e\}f<-%6rd)|aГ>s{"% GH"71ODBqW7&bjICɤv+䞬:BQY{k>鬔E5w]!d|·>>uZJpwGMkyT5l[FhIW'+39GsZ q,0]s48KSCͶ' [atNw)@s5t{ۛ3`1 >@a ^FRNa *&:G*<^U*Xֵ*Fdf!SVD^eüCAV 2>Եηl4R Je`W2uDjg;'WGČD-\+8ҺڇA aHO$φ ]ItԧG vM'PCh`"o^O|3H?k7eBmAPE( "O:*z`YŒ?0zgY]=,rF nkNWA4Μ{(O~x(k,GwNW˃*n!5!\fUD >z=/>Șv .M{H7=LVsPڡ !\>(8P|{qS"|hHE6&kH{rFT)ZNP.sOؽM$*^U:WHF]j.$", OhwhpXڿ-3J~/,J4iRS!]|1DwOJ\k'9!c1';7.0GT[ewwmŽ [2A]&tw@J -@e.=Vv:gm΄Ma+Yf3{- |*čmn<57k8; ٣^vӯhP͉ۙt*K:uy4^RvD!r=t{#+F';?q6ب[rMӌ|VfTZĦ&YxG8Ȟ_}*jԶՐlCi^`nzd~ `J;;f{c(APW@$ۆ{q{jbkQĤɡ=AP &x(WaKG0l s3V_EB԰}zI߂PQf&.^*=qSWF]t]~ Ԙ=."Ys=ܓ?.+w"wtsPp-clomGn>ϯ,`s$h_2{+^2ېZ&9C)C?]T} bd_y(i=L(Tֱ_f78`ޑ<^5?&PEއ׎U3LSh~?,V:r;0fG͆YT?x0c":_<5S /2# HcGř_d_%^.T3Ќ2oϦY*yW^ ~S8o)L7?L;{y &QYq]` Ɠ做uG:$ 뗷Ayf7F}I:ďZtL e^{!--W"ONblT| endstream endobj 22 0 obj 2594 endobj 23 0 obj << /S /GoTo /D [ 41 0 R /XYZ 0 842 null ] >> endobj 24 0 obj << /S /GoTo /D [ 44 0 R /XYZ 0 842 null ] >> endobj 25 0 obj << /S /GoTo /D [ 44 0 R /XYZ 0 842 null ] >> endobj 26 0 obj << /S /GoTo /D [ 47 0 R /XYZ 0 842 null ] >> endobj 27 0 obj << /S /GoTo /D [ 50 0 R /XYZ 0 842 null ] >> endobj 28 0 obj << /S /GoTo /D [ 54 0 R /XYZ 0 842 null ] >> endobj 29 0 obj << /S /GoTo /D [ 57 0 R /XYZ 0 842 null ] >> endobj 30 0 obj << /S /GoTo /D [ 57 0 R /XYZ 0 842 null ] >> endobj 31 0 obj << /S /GoTo /D [ 64 0 R /XYZ 0 842 null ] >> endobj 32 0 obj << /S /GoTo /D [ 70 0 R /XYZ 0 842 null ] >> endobj 33 0 obj << /S /GoTo /D [ 76 0 R /XYZ 0 842 null ] >> endobj 34 0 obj << /S /GoTo /D [ 79 0 R /XYZ 0 842 null ] >> endobj 35 0 obj << /S /GoTo /D [ 82 0 R /XYZ 0 842 null ] >> endobj 36 0 obj << /S /GoTo /D [ 85 0 R /XYZ 0 842 null ] >> endobj 37 0 obj << /S /GoTo /D [ 89 0 R /XYZ 0 842 null ] >> endobj 38 0 obj << /Type /Page /Parent 1184 0 R /Resources 39 0 R /Contents 40 0 R /Thumb 1137 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 >> endobj 39 0 obj << /ProcSet [ /PDF ] >> endobj 40 0 obj << /Length 9 /Filter /FlateDecode >> stream 9I=}% endstream endobj 41 0 obj << /Type /Page /Parent 1184 0 R /Resources << /ColorSpace << /CS2 1195 0 R /CS3 1193 0 R >> /ExtGState << /GS2 1207 0 R /GS3 1206 0 R >> /Font << /TT1 1194 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 42 0 R /Thumb 1139 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 3 >> endobj 42 0 obj << /Filter /FlateDecode /Length 43 0 R >> stream k.lM|k>qJ^)ny#U1xUg( -jbkooFjT7V{7m4LftDKEF4ղv#Z6 BE 5_HxP33J[2iBt@2~V.Y."?SiY~Bew8HSI[΅l%r#t}R&ⳈQ\8jZT%f'8C؁ύ|-% t dM Y9 ^%λ|x*OjN)J^V'j|dGzw8^j8ikkp=Z)µ ipM]+ U=0ݦ%]DC)½,%H<fEEM_:fǺd0(tRvqa2GYv* iBq2;9KWV, ҿR[)d$ =~`:lk=EP^)՞ΒH.oeoy b]Y1g, E|Ϩhn8(:B"BflW#ДgWŕ9Cd K[2> /ExtGState << /GS2 1207 0 R /GS3 1206 0 R >> /Font << /TT2 1194 0 R /TT3 105 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 45 0 R /Thumb 1141 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 4 >> endobj 45 0 obj << /Filter /FlateDecode /Length 46 0 R >> stream ,vKb9Z-5S&W+"-4zM,c3H%k$l}PREB$-͈ L'fd\~'RW5;D. h5o+sX`=zXhc8ݴKՂ8B]֯ߌB?_6HN&Gvvm 2_$Y2_a._< _+ڳyo2Su7v"ܡ_æ-C+]SgePq Z9hn,>S&4KnB@C[X{59.!'|L1IIi7@>`<p ^rm3DO;)gQ^ɖ.J.?VVO T ߩ$8i@X^ {oOV`4[:dE_Z<2q$v-bbūQO);k6(*$H\ΙVeJ-SyX^m7ס[r aI ]BQA~Zx?)m_tGA!Hn]q?(v;6 BGNp$vsqS&{E._X!T ٕ JgqIGsݙ>Olo3A}=|ݤ=^Zs7k[Ae򬰦Svp(&7,h2֢{sImFӃ 2],"yƸ*-hu)k<_MI6ZF7>՜M̂[ꮕWD uۇV-_7+wuqճn W, A%(30z(Os@i*ŊĬa$蘗29\nF]:jn\nI!S>}^-\$AE[zy5[N% I;n> "< a͕J(L$rB]*=KN;˶/wG 3)l { 썂8(OBa+E!Vz`08U<h"Q eX[Հ `d#Ki߁2ՠ")q.D8iɣV,LmO:n &D s)Gs=͂mŎ=DZd]1Q.> Z5GkU J(/*{S vZTW1`1&*G8qK%IhuCHTDe^yak"cm/L|ï΀7Mš68 Ap!g.8@5[Ne$m9-w#8B _6ÝI[]XXP)bpF7si䨟w*5\`@{cGb^L 8 1pjY8n MFO0ԊTBz*E jqs,S1|MZ,-(׸HhQ7v4J^:'׼}Va7KTD~7WwjƤ\v5FyV>zR endstream endobj 46 0 obj 2092 endobj 47 0 obj << /Type /Page /Parent 1184 0 R /Resources << /ColorSpace << /CS2 1195 0 R /CS3 1193 0 R >> /ExtGState << /GS2 1207 0 R /GS3 1206 0 R >> /Font << /TT3 1194 0 R /TT4 105 0 R /TT5 106 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 48 0 R /Thumb 1143 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 5 >> endobj 48 0 obj << /Filter /FlateDecode /Length 49 0 R >> stream Hl^* (TH:j5@D(Zims l-Wο4D*'3҉aICdiă~MQZrU,D@Ǫ|N #amTZ-=ՊpW o%{"&rN-Qɡ\)݁pETp3=a 52`\]p Yڙ6.]#p"iOB̡`Ji#~#HKnl;_fn;hE2) * ?0qvMs:ғ{'֯唡g(ܨ=0/Pk '^ry kAYr7\l uU ١ln@XF \}ju1gXݱC@" L5\dհ r x.3g0/@G1ίiH7uRzv5Ԟs \>}z*yZזzjaӲ0\}:>#3nZ;&YFyD]P(C\G"_Rg*/,9^;O@Ok4#n԰/ב~ }Q=;[c d7/ 3q4消h=F4a,Qy=ÎcfDLoכ^oV9:UbO0_ B= qVC疳!Inq)1ZC2W,v|hsWii=:A盯銁w$:J#bbG 2S20ܬ '^ A.^b?TKOG֎2mή)FTO|ƨwOq)#͂-.p۝`̈́.[NД|QaC ] ~}&HFoS2pZ?]=;邒^vcb)qIxϧM|&X l}N1${ _MQE.Zlnj;M6.12:!,l#"-[U& ? M0%cUOXh33m՗%0JJBVNwTFK"X/|--I!N[&zNh~ޠR :m_BwEA@ i[$O`;n9@q}m+GVQTvc>Oe;୒'KGIb I}(6ӧ*C An/&aj%[8Ǵg>@;ۭ!VgI[֖BG*ε= סr>T`x p4[u4w,´ۼ#YM&zݮwBCI2hj-$DVO9mQזgvr&@񋱑[PPpmLE7 %$֒H~ ©4-'Ci:V~Ww1t)G)2~k_=K\$J{g 96)3ŀ["ax- ΝE{&$hǰ4Ѐ=ҡ_N== $(ac ЬN?Y)qfi00F* d`>FQ+8gGY&ō0ۃ̈́=i3 룽U &5R}YV=BAîuž5v3_]Z֙!fXp<^ƥ&@X%alrUFຆǎ|%w!R2g}-IO/b.?ϳ.輱`:;(z|iaDmS\nkey@:9kW:Wb#k\#D`)<b8&w/@,\z^ֲ2Wv5%#O1; . PgD%2aG{!XDao.,-h L6ӘKMvN %.F`hHD~cfqSZ ٚԴE?]Ǖ }U)zqc<ƾB_ wZQ<{0, z3b(cYI;i6`O WgܪcT&V}XUgXߨQ˭bxY ޑKU<vnFmVT!yݖHCjGI;jY=ٛ Ng@]4ÞM!u|4zHע&vP΋Y#၎w6]fv@dbGlEWƉyB2ϖ(E>=>/>y͡*(K=kI/?`3ƁJR@˟] 11ܼp|)>T>f<0v!C#O  {:}rۺ[`u7vhSu|bG,,NJǡ;ld&0,Tl t|扥Ge}Zїk-"^AlkZ>I%&4v2e&`aI9hgeU Q]Io[>aGr a! WK/ L;G@V&]EM~(dͼf-mˉl:l@$hr:*ċ]FfԲfEK*[K-K=2P(B=f> 6>&{x}]s\jkbg"*wa65`(/ѓg־ ㊖QSHJ d_ZaCsVm{ EQ>k/}e12ܱEن$`$ewr偤?A ?C3%hX endstream endobj 49 0 obj 4012 endobj 50 0 obj << /Type /Page /Parent 1184 0 R /Resources << /ColorSpace << /CS2 1195 0 R /CS3 1193 0 R >> /ExtGState << /GS2 1207 0 R /GS3 1206 0 R >> /Font << /TT3 1194 0 R /TT4 106 0 R /TT5 105 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 52 0 R /Annots [ 51 0 R ] /Thumb 1145 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 6 >> endobj 51 0 obj << /Dest [ 50 0 R /XYZ 105 162 null ] /Type /Annot /Subtype /Link /Rect [ 229 220 234 228 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /H /O >> endobj 52 0 obj << /Filter /FlateDecode /Length 53 0 R >> stream )bAy 'pۣ큚N Q>w#[3MS`T? Wp 9?[]MЪa]OLΪH]l(im@`9}Ҹ'F(z{20$^p\u蠍ht_ ?B)m?۫^xqQw )PVuY2.bk060` -w.a 6ӡ}(HM\ӣa 1{zpЁas6 ƴA_,zLmHfaBT|YE !'eu=wM~7UwLY;Z'.5zsҠ@*1a#f0D}nb-,GMaATꧻ/;P>mw Kl~QG;7T BQ|x6Y2@d *o5lKq9[|N,5zUEPl׿Y0g7g\4*z9k`4 7r@hD %7@WYh(dXx!ujӶz}+܄ԫd$ V/X@U%)q/VFs!-5{N%LhYN-n =}, 3!_F42 05=(-[WU$h+`y=T2h@bFgGVNU#&^~eMC6°s+亖mzZ`nųo*3KwCaS |djuba~:@>fsX=>9>u.n2p#W'J 9*۫~u2g֊ Y̸}fΡ1 WyLLi5LCmB`nuNaA ?7QA)P9S0E5;$Ve¥)φ?iVF8l&'T'ғ&uP Yf˙v Rm*קmjQ)}fi#OM:q.S}KPn4/CSR,m0p>Y[4# hf;tT˄jD'xN6*mq00XN)c9t1;!+g)[F:aEa \+%_o? +`]1@"Ґɓ*r( O|[Q@[[B ^RTfՈVAԝh.c;/>0JotЩEI5$xNff TzO>D vǨHFr"hb@WpP.F@s-o(=>k Ueͅ2tt(b ;t8Ee0 Ùo:@laƃ;Vf͛Ɣ5? ^2He Άrӆ]򚼈V7yRg$$(L>L叮XM^IT_"p64d#j&1<ƌ aOov9,^Hu)ƴUBybzLkVQ^-׉ls {4zK/pfBh6LJ|(bsgǎ3N͗S< FuT,ahR jmΟrLL&8`ۚm]NFtx7ZL$ sA̎0%֠斐1;*)C057dʌmusG J47JAj^hٱ}a$;}0f>WP92B5'9x##&!Ug[4`KAlʊZmTs`%ֆ#nd΂ m/_G(Q\BD=DW>u%QAYT޻MrcʎinO_B&*6F* g{*//91NUٞҀɚnns ~zT2@O)׽J-O|zh84f9\D55ݧBa;w"Ԏʝ,n#LexGTq]П2,>k%8GkV)h_-3' 5_VfAPn۪ޡaXDzWl'?xcAG{{;TȊ)uU2ؖEc$$X]Yy:W6[7kYU 7laXb{Sllb1I:.{w3uP` )Y41.a%[s2^U7s ݴeH=vl8v #_!Bw- {G]`L.C _ypSCqkf$% 0zrgsv⛊5UiBZg;kܨLx'Q%ݼ[r&L:/MbdS+;nofo&CLs 򜿁= }ctDxUb BN,'{Xf,:|uۋ P_YvgSI701%ns1~$|V/fI^J Ŷe")}B[D4$F+|AB\\-A#@1פl} 7/|o;u",DIpmz@=X>hUBD7%|u6:&lN-K1&r'QJ%_|bn]q(uc痟H%в˚ؼ^dFmqs=-^&tgOboOa*;F%\og*GgV8ׯW.zek vd8}3!5jdţ~vq@){L;yD]oy1>̠숅Z F" eR͏{tqhj[b-8)3* 6nb˫Nh%O;È;dF)#.{I" x >&_8y_! <~}<QÔÔ]!p!oȬ޷| endstream endobj 53 0 obj 4491 endobj 54 0 obj << /Type /Page /Parent 1184 0 R /Resources << /ColorSpace << /CS2 1195 0 R /CS3 1193 0 R >> /ExtGState << /GS2 1207 0 R /GS3 1206 0 R >> /Font << /TT2 1194 0 R /TT3 105 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 55 0 R /Thumb 1147 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 7 >> endobj 55 0 obj << /Filter /FlateDecode /Length 56 0 R >> stream 2g34Ѱ4| Ncv=kS.Az}7PFdM#lXKkZ>F TvԴZW5/?+#%L/w1bj ֪}ŢY1q<9]/OO}GY3Spz-WȰkÜ;Ώ#j衙ʗ>W*FǨ^-}{sgڼ/Q!V8<V;-BAo8ueк8嬪p:"ܼ?"lEtW*w.bi7^*̺lG&.}z\m/B xp3mE{nhV~DWh?Q&}YP&-Q1 8)$dfޥʡ߷SAeV`H!̲6$D5$U=Jɜf_kMUuU f][ObhKŒrbXh%a 'B A[Q+dxx|=CErb}9*Cw{4R} =pxG ;µ-5"k7c o‚[г[1>\S8ɳCF\x <,:NLJ Tf6e.$w(~`} ?u5 M >>Tl+`jH3.P)~ X|[G6ؠ/l8֊3CtJոω\;o`bVwDЂek'\ӣMDTc߈] uskvs*kY tUV6nAٗC4K &} V3.KYS,e&D[B_c\off\sRW5e<eBTZeHV$f 8t6ǒ:;&οcWU^GE׺Y*Ǿ;u+u }ĥtPܝ|p`b$5l4vrS0njPY#؛+tm>\y?r |Ƽ α+W/CRqn\Fi9Q07֥ߖ&ve5yZ>?aHijC@z͌grs>' wW`Р%6XɍB)Gۍ;?/EWD(G#@^%.qO[R[s>P/A8m:h&A+@5x ʅ\i%Qۋni϶@>T\gdz.jM!z~>ԢcC:wo8ΜiJOl+aQl4DJ=:L+퇹vd[A76b<7XRdz `rj2G%XXW8Q=0}hx*upl?WY =)9Jda^JYQC Kpʥ߇|.%rXQ1  <S~cji'V1<;uAEW䏻> Ѐ6,*@ޫI/ヴ D#x1""b3F`EGs?Mc.˝p/az +jȣɁS“8dlU7Vٞ(90C}="|uv"_ȚiRrOpukr졖HCe^,]W,rnP">Bl| G(HWvU,bhM5,v;VbW<: -WӇamDLȈN-,O٨yx fxN7/xxSƘ{a e!En҆Z'Cmmre*,+[t {ؔORŋ6P֔:aAdC endstream endobj 56 0 obj 2006 endobj 57 0 obj << /Type /Page /Parent 1184 0 R /Resources << /ColorSpace << /CS2 1195 0 R /CS3 1193 0 R >> /ExtGState << /GS2 1207 0 R /GS3 1206 0 R >> /Font << /TT3 1194 0 R /TT4 105 0 R /TT5 106 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 59 0 R /Annots [ 58 0 R ] /Thumb 1149 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 8 >> endobj 58 0 obj << /Dest [ 57 0 R /XYZ 105 138 null ] /Type /Annot /Subtype /Link /Rect [ 419 707 424 715 ] /C [ 0 0 0 ] /Border [ 0 0 0 ] /H /O >> endobj 59 0 obj << /Filter /FlateDecode /Length 60 0 R >> stream _#)k{#a,\m4g=xkE{5Qku.>sc.߽9)emJK$a2 QU٪]C~#7g·^hpYVtk(ևBLeؐ۾"CqB2;˓Hɝ ig&YjN;m[?DZ,+$űmudȌjJQN.c'Q4^Tԧqg Kdlu4QQqߗj8Xa. H l My,E.)_krt nX!Fa$(I PF2ZlX7+x'j<”WO(?/ BN_JZ/J۝mGڿ2Xjd 8P$8ʮRBW6j^E1ɼ ?8~&̗vg[+kLC0XFgŌ0;oQ۽:%o.9<UJY0޵(]'T" 3ज.ԭ"?6AuW3b :ŒZQj/h3x]ʂYC Q|@0-4 }2 mA\ޏ.D](Splv9^2.Qi]MuT}gGfq$;/vF"I_Lsug5)1# 8袐ފ4ZT9-^$Li ?>dsB?[BR !IEJYDD/7D/q^+f^_|%\~n(sLC&kǿZHѐ&dN3>:sǏ}۪COҕ*ގڊPAQp !+iS[+,޸VmL"*FA%m\g.m8PMco}i3P/PNlwP j97ܻh2~{C8jw_ȿ'rM~:*4@iZjIG) ciqkڔjDz TUF xl&rFk73)dTf8а"|ʳ5WDŽpW)̴PPds@W,4O!+CP}W0R@ڎ1{-  f=+ALű-pJI{2ߞ7x(ZbuNJLG!?J(D&]&qIl9.DFF+px }A{e߬=o_\wj(*8Tq{TYď PyM9{177&M&L1ߘy$%Nm$V.GeR0}4e/jlʛ5Rδ9~tcy\H,KT0T*Vv >23@T@ Ҍ'RJ dZ T>>/WN%N0rhJ&c \Aؤ 'CT6R8̡،L-3q #j'nF9ס)ʓJg!&#s 3hѓ]҇ c}U. @Y?o@GA\d^Pe)#1Q6(kb߀Bޙ q2t9@w5oH42f'#y(:-> /ExtGState << /GS2 1207 0 R /GS3 1206 0 R >> /Font << /TT2 1194 0 R /TT3 105 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 62 0 R /Thumb 1151 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 9 >> endobj 62 0 obj << /Filter /FlateDecode /Length 63 0 R >> stream ˜`vx[gx(fXߡVʓx\+O iZ9e[ypISG1(Wtt&iz )ib)tYe@h_c}@k=\RUg^lLYЦ6Ci kɼNM8#^CT-&Yp'°< WzueZԏd Cpgk6,K IܲSKiZi*4ͪ㨹>i%^2~ά9-sN%OL͍LFaՁq<ZH}w8\+G0\+T`-U6sM67 ^^%5Up #4j L/+wFYb7+ܼ]"ƓwUnzþ"rV>آ7sxHJmHl"fxV2n ~9"F)C|Zr I<I=}bPzʢɁ%#wOtxѹw}UKul®N:sO}^5=p<6ցdb׈`vʛNk|+88CwLAO8jYσ8J>=*Y0=S㋭?1-ݶwDtf-DqzFQH75*_ss*޺q%ռ,M*57Ό?E$6|AG~0kl$a$^ %OrR5 ;15[7تiiy򛎘pW-V ӕc)ih.1м*!,$@Do aO7Bz%+À,rYNoĕ(]n(iضwor1F考֣(_f[Hޅ<(i!&M6 qrD;uw=60WUe?\]j1XZ)nja#(Rz</Ic9;wb58O$Ƅt~vN$' _x훪*sx呔;U,dI轒A lx9-Eno nN=m|NASNO/,0q <2fʉ$*ϊ{t Fb86p%sŠت' ImJr^i'o$g2BYwzEn9tN?yA C!c#ne,ȄC{*ck i/}8U K4)RtQs\-2+% ˖ 5Q@֥ QV+jxqv_JjL{oH.U1bž6YƵM&N{tB'gfX{/WlTPaNh2kGMn8HjapjGs'B;x{`-3֭ j=S/0FU rQ@ 3mU7C2ATj{o endstream endobj 63 0 obj 3408 endobj 64 0 obj << /Type /Page /Parent 1186 0 R /Resources << /ColorSpace << /CS2 1195 0 R /CS3 1193 0 R >> /ExtGState << /GS2 1207 0 R /GS3 1206 0 R >> /Font << /TT2 1194 0 R /TT3 105 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 65 0 R /Thumb 1153 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 10 >> endobj 65 0 obj << /Filter /FlateDecode /Length 66 0 R >> stream yP7EheɅUzTc0;Ưu|d|sPb2K{ 8{%fc }Xl^dU@n#fa,l󈔠y±+MbGt`ttJ)GG 9ھ;m#L/C` YJ`X9Krώ/~k_m DTAD2?㦚`anz&5%3ZE?V0t3DN<5}5_.x173i{8]BqfXKIZylfd =xP: M{zCQdpukXf8&~@CsrlV.q2xE7/Fx.=:04&EۚStɃ99Mתs:GlHC߻ iCu0昭p^h֚*M‘3U:X!)1JuirC h|3Y6gkӎf x%˗]sy@&fccIrVnd1ݰju ƫ|2P0vM~3zF~8|k/(!":^kXf+sHgje~5XY$4AWw] 7R8~H Kl'Q{r oIr&\ рm,pxw>`VЦdV,$Z9j-;CrȞ4 ;_.AaqcSX/L@b\MsXo:_[Wqhfv|VeCB<=4 †Y/ +>%ApQ@C`1V*D̙؃$J(f7 R|]4Wn~!:17Khq.37<@J,fR2b.q?wB='v{JfVL0:D9{!f활 ;֋sYM Xؚb浂dio:LeǐywJ*>q2h_DܬoI߉+mF?=VMBK-t8{lCd(@{LiyGdlin᨟P(۷DPaUO$h{dѳI$eҮc/2Ƅ#MϵkdUV+!LOȩJ9M"'#uBkН6~)3e0CovytVw~}9 lQidg]骂2_`t*D\ rn49'q~i}(\b3Mx[R0Dͳ`AJx:{IJbC2hҢVkPN ^3'z86Y\VwQ:N{R{eXΣn4䏱WoX )en95:URJ]-ؕ19̛"r4[e\_D Sģ kYʛ9B=&Ğ ,\"]3O?!!92&bIⱠX,d[**?|'>*QQIGdFƙ?V%1YDک(Kd\::aJ 6.PRQa{N)@cF&w".%]9 KGo5XFSe(7 ~f N w[iN?J $ KX;LEv.DNV1F\_tBvI;DHWGm  *TAð\ (?Er̅.ا{$ NkIlwYRΥ5:-y*LȑΧCA<20Ym"+Xo`Q Pv؛h~pO$~B[|&}v ;$=kKj34w!`dfl"/m z-/҆o݀_Cem(f~ps.F'LH"d!WRRe,x+A endstream endobj 66 0 obj 2868 endobj 67 0 obj << /Type /Page /Parent 1186 0 R /Resources << /ColorSpace << /CS2 1195 0 R /CS3 1193 0 R >> /ExtGState << /GS2 1207 0 R /GS3 1206 0 R >> /Font << /TT2 1194 0 R /TT3 105 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 68 0 R /Thumb 1155 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 11 >> endobj 68 0 obj << /Filter /FlateDecode /Length 69 0 R >> stream 3ly#oͺ]&Hـ#nQ/ʕ$fogc#C=m#w<=ZQ60kxW2KwAԵ5 e20GlRZ(>J?*`hIr=bo|%Hy EC@LwAoh۫bJ*!r=^+66^mm#<$dNJTՒ-e0;GAIʳ3Y4nKZźƻWN% X lMmK +tMeչlؾF0oLv&?^ >.gnFF6hE=Qw`0Y̟Qa߹fr*ۂrDCLBQ0'Faf~q$D~Nj) uö*i'0+Wvu1u;#83h#;#[N߀gDcM"T?MƬsL}.Q;Q_5J@fΎ?r-`d&C猄Ī3s@vIgE=i6T!=Z5݊ nRfTn&t^ W'*͟gˠ)Ҟ8K%S?/Z푬y1mew+:F4AGbd ? kWvg}Y)>ua#$*-2ℷ)@0 `ߍxxVA"je|[65{*X$_;>/5hiVyʾ&8ailuD#ycCH/d%5M e ۇJ8F6W02jI;>QNoHw*b2\_s1 jTf*!O._Ol[2͸0y"" z.S;maĐYd#̟3 q@8@2-noY+k{Y0{2ǐX ٲ(|ĜPe\)j•/,$%hu7pANv< ީ twrwXG@0播%KǴz$g&ouiF.~.0²pRF4| {`c%yr#HbmaFG6OB~><-wqDb-;Sķx 4̽f!9L*Zq0C*P&ywQXE(~d1IغYxTۇ𰕸"6g;Kv/#VR$SUM\xO/0xh&b9M.]VOgBa#d;_iCKtn}@[ Jx: ('o!c xGXVс7haF_ g鏾 hpp껚dlfpV|D伢cEVJMϽhZkC H-IKu2fy{8ٴ (JϢBJsWgIG<fvo'"I(t5k\Iskw^,m,V]+U?&?LDIfpqfnŃGD5Br5DbK㖡r\""v "΃ΐNp87A0Pm'4eCBز1$-<=h@E *4hK )wnp(邥%!uqެiѳe12,s3!s;wm nLߵǹquQ#TC$Pl=Jݕ ͥR G#dyC,rswwF:5wp5]\o +̔4%GQx4JKo dRn$'ȣ}4؄D]w4 ˧V E튥BęE')H+g֔MsP>T] e ]2Y][tUOϭV,3X6 I-8I"cY4)F/ģ:&g{K)(NkH`bpF`sHSfH3ڊncz`-c9pt$^>;ta |p_[u3@yS ybNr59ӫ >ۇ'XL'yePE`n[a;QSՕKɘM!$Dŭ2 $nQ5-ktU0@"qI <eNt㾠\&K=L?{O`r>շmo3镞B؜Icy= PWYf3(ѐ'x(%͘{$ wK'RkI3JN֫ SD_T`kwh\iNɴg+;V߼@M) nX1rީ'y~.(H$6$)0r*;1CBgYL]0i z_N_@JlG{hE=k '1S(9 `a$CtR5#*!bvPTu8k ,x̅ M8Z/ a48I١Mw*y'9_:-0Pi=?`vnwy3ؙU hc8S4'bTI3B-DrP]M֢8X^B>{9JXk÷ZfܴfJ4-LuXn ;w2!ሺ& -~ ƴ a.h AL5Rcd$%;ʌjQt7͂F j aknWcK!%OKI䐃m#̀3u?H1KW^ǃwU*?:㻝MNzp#ȁmR4|CRAxt'eExJ>6ӱ+ G^8ܞ6 }ݏU?Dkf8APNHI㦍Ê}Z4@Fuq,i9np!~8#V([$h"SL_o˶qp1rgy˖ k1.QY}EDQؠory6᥷Kgts"(-5JP"L2s&QtVwo3|c}> /ExtGState << /GS2 1207 0 R /GS3 1206 0 R >> /Font << /TT2 1194 0 R /TT3 105 0 R /C2_1 103 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 71 0 R /Thumb 1157 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 12 >> endobj 71 0 obj << /Filter /FlateDecode /Length 72 0 R >> stream J}T!ˆ# C!BR#7kkR ;f`Zk{RfJRd aNJr r (Qy|K%O7 \&nPR?i M"=ıKh{J}*ΥDF+B^#g *O @TK AJ#,3 ϴoVQNe̎ B;7^{*?j" J@BZ: IٽdK?!&k{Вt]9q'S_jM2U}tSmgg%*P [Uv1P9u89 <= 5vWZK 7]̏FdP6 [HW9qU@6ox?^a JTۧz"~XlO 65b⿹2vJ>ǵdcޅ3\z" t~ctV}TϿ'y/~#hyK2IA\ృ\LW8?UѪscE$Gc% vvŤhG"RL}? 0R r3(G[w˃ "g'yI*E߯O [ܚ5´$+RŊ;;yqj5M=MBT%>~[mbN? fpZ5uاܪ' q HYf1 o;)w͟ EkK.P2:fX~cF4_;{c1Y/lƹ yqen>I.rD8$v{EVp+bd{o*m3ķ!"ir7uȈ2F%uOCg.oPI'YICbCqB97[EdzS}m5kQ-{<C1Ra R (q7*0BFm*fYl9@ ᄍs]M(c)6#Қl#螐n淴9ҮYc**b hE&Qdr/*9̙SxY[sBl,q1!ڦt XUz?ӭIf2pƚ3DI>VWHƵMF7;7lŐ:;{WUrQz޴$a_Xk{0Hp+؆0j :zڗkm̪guJCV}:b^w?ԇ=_ ~w#iY@[YЖ ̤çp$iA$:y;蚴Q ]wmƧ<^8é0?NFrO A_"gIbnT%^8so(Qbюߨ׎-;6Ik–*5^Ґ?:LNw8Nn9ihv{Sw 3n09i )Ki;> /ExtGState << /GS2 1207 0 R /GS3 1206 0 R >> /Font << /TT2 1194 0 R /TT3 105 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 74 0 R /Thumb 1159 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 13 >> endobj 74 0 obj << /Filter /FlateDecode /Length 75 0 R >> stream SjԊ";ִmp611k1h92 >?[Sp=BhLȉX-ъH/>L;&Žc iFab_c髣$3ۙN_)=2,,zJ.XcL BGgqDbZEp1Ci>8{Mq&_|> y;Mǀ~iKS #㤿P愫E"@9RdЮ5v^ O2ZGKչoS2 vAژ̧|xbA鞲[<6]E^/0ZއrPLjϷ$*}Ƴa;MbEa*9v5PoXr+[u! 䙭V;<7H BׄSsIj<9;bma 5LE캫{͍+ô~.^ ylVMصU %ƴr>^+$@2xJuO+NO(Y]iQp,$:9C S&#ѹg-G9Fq 'J|L$c5,z>gDp# $~uY#=|tL_Q{$ws6RRJ}cTQWZ t*t5 yTD3Q:3:WtHHJl;B3~OE\% PԠIJS`{BS_W]q,q ia@6KE*rֿ2!Z]A 3C1"[6'\~Z≞t^tE-G1ZKq/BGrɟPSU{4qsۭ#, YS'yu??VΡy̎Yݼpq(oJǼx#)uPU" ׷Tl1As"Rt]5l+ĉih$֩>EgmH\3E8bo[X dE L#vזvҲ`_Le„zn)Ո ?s3`i64qSOLAM")q}K%T5)xaiJ^&yiJ۾;19Y8s8L_~$?Xј䉪^ \<2^+v?{xgˣmuތD%aW-J+B4*y%!{^g:R[.H??ə܍<<$ق(C02yx߃g٥)Ѱ QG-vYŲ9@+w)]u!u endstream endobj 75 0 obj 1881 endobj 76 0 obj << /Type /Page /Parent 1186 0 R /Resources << /ColorSpace << /CS2 1195 0 R /CS3 1193 0 R >> /ExtGState << /GS2 1207 0 R /GS3 1206 0 R >> /Font << /TT2 1194 0 R /TT3 105 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 77 0 R /Thumb 1161 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 14 >> endobj 77 0 obj << /Filter /FlateDecode /Length 78 0 R >> stream ˸xmzQ L yGW׎ /8*܂aD⥮Bn֋DDl31#1/v2)e1~>- 1kn["@(e6uK ?L/~ΗANFsLd-jwV[Y7EB7UfH]H^dvNK3OcMknmq# endstream endobj 78 0 obj 657 endobj 79 0 obj << /Type /Page /Parent 1186 0 R /Resources << /ColorSpace << /CS2 1195 0 R /CS3 1193 0 R >> /ExtGState << /GS2 1207 0 R /GS3 1206 0 R >> /Font << /TT2 1194 0 R /TT3 105 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 80 0 R /Thumb 1163 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 15 >> endobj 80 0 obj << /Filter /FlateDecode /Length 81 0 R >> stream  Y'j:k Mma.h%)b! i"_A-=Hҵ3+c*7I.\-E Tsq^jƙP< '-ܢJ5z29 koWJH1Fg ` ܔ0!2R.>srXkU(N4sچ7,|umpٌ%@QiٹįإwNL:CUk5<38z;barX c?j_E$ ;s;"\qm]f,ux *8ۏdu/`6J`h"'MB/rb3' E)דH;T#'OS*mK%f!+s5mjěLEB`{}8@@.e u'#ߪЗ &V=RiꘜXS} qa{@\t<0opkCh.Z9QF6d M4B[d[T PЁ^뛨 M!f6f!'4VYK.AUq$ endstream endobj 81 0 obj 977 endobj 82 0 obj << /Type /Page /Parent 1186 0 R /Resources << /ColorSpace << /CS2 1195 0 R /CS3 1193 0 R >> /ExtGState << /GS2 1207 0 R /GS3 1206 0 R >> /Font << /TT3 1194 0 R /TT4 107 0 R /TT5 105 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 83 0 R /Thumb 1165 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 16 >> endobj 83 0 obj << /Filter /FlateDecode /Length 84 0 R >> stream XUm\σ01$i$GwƤ7^M@HXav֪ly8{~X 9i4 $9D~芄L0J8o &O*&THhU30,_Jh'"Tu[pl*yWeS[c221`2zZd ʹ/ʂB0Y;ao~4h -[k9채vH:ZIu*1tUq /ip熘lk!L(3@mbG¦lڗB~}6CR2ki:Jd@ P)! }sIR Х%yRځNl6oõη9EnNh¢Xy$4+Ix׈ڧa$Y$z2Vǻ_4BZM2ZJ5jg:%kGcۨ6@U=\t뀠m?1z1_Ax"/Z"]Xڷka͉F6vqT3cyG}`C.nxzZM$wmž h2,Dއe{лt`&[A^bє[f"\B6N/X+6➰,!B\gkaDȀ_y]v-XVSb*6?iO1Ů():p@vz2'iv$펮$Mb9jֿiҦn/] endstream endobj 84 0 obj 1352 endobj 85 0 obj << /Type /Page /Parent 1186 0 R /Resources << /ColorSpace << /CS2 1195 0 R /CS3 1193 0 R >> /ExtGState << /GS2 1207 0 R /GS3 1206 0 R >> /Font << /TT2 1194 0 R /TT3 106 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 87 0 R /Thumb 1167 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 17 /Annots 86 0 R >> endobj 86 0 obj [ 120 0 R ] endobj 87 0 obj << /Filter /FlateDecode /Length 88 0 R >> stream w{m94N2t\jth.LBLxl' OȆɢ\"L5L;dۛxV0+r:Fn׿*37Mto c=鵾M >X7\e(Q !?v`Kfn#eAQe./.aУ{bԩj0K`=ys}UtVW阙'B* Kd<G3:yI:8hVY07՗.NM=V+͊y7Ww`ɵ|L hȴ|"" rr1W89\./!,$dIZJSـ"\ҧ uNYC(l/5IâHgL< H`|Kuq`E2k PXС>T+/DJxW.] /洞&.^IEu? 7r' IR`uddU6FokmKZ.ˉ28<jҜS5+LaL櫊tq+t& yO-5oEi܃S4B526%am0*!El'5|׶uşU_s%Ŵ03*)(O3<~*|R{kIgj,ȭ(gk*~'\د~ka endstream endobj 88 0 obj 876 endobj 89 0 obj << /Type /Page /Parent 1186 0 R /Resources << /ColorSpace << /CS2 1195 0 R /CS3 1193 0 R >> /ExtGState << /GS2 1207 0 R /GS3 1206 0 R >> /Font << /TT2 1194 0 R /TT3 106 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 91 0 R /Thumb 1169 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 19 /Annots 90 0 R >> endobj 90 0 obj [ 122 0 R ] endobj 91 0 obj << /Filter /FlateDecode /Length 92 0 R >> stream O#ePcA?8A]gWMv#:UWo-Z>eT4 (e1g"B|AD( #4Wc>JFKM^7lV&,Lc]( %Vs"tWV>& >Šai/p020VVلg֗E2YIc/?hkF̼UTB xn㤹&NL#W;Y\/RSv;H5?;*<خ /Ͻ4[k3.UO>7OwvB냹ݗaO R^vڷ}9ٽ(mI7)N /'n͸fԡGK3S¼J='j f/;k6 ` ~&Bo,w#FvyFG‚ vwl9`MU#b)R\Q7uru* bnCA^0q)m߼Ŵ!j}JZjn7_!)+UC1tzd޶^=\n-(g uv9MW~X\;kM)1F6?(u=NQ vHr]U%Q C?hXBR}T$cX& PDËbQ 6V\.~.lT Iq=2so$&YO>#Eܤ͔,W0N 6|,1DpFwGZWNAUN52yMí E!%rTkmO˙ wG^hC6'W6ۺҊ qu#VX,Pt9{K? Y ('mb2ZO-/2jms#]r<ƥtA7ܗC$/ad^t@p~6/Kz#8-r~C 31ex9a'1D#2H+.|Aw3s=w Xo"Q^R 7I+/JTo(^l>H! 'Š%j)Հ}ɸXRfiE|p;َ51*_pvU r550(TN&LOf"lжG^l;9$p/~DnCSL/z$XJ,נqx:B54A H+>JE 1Ew mLEc߃CjsQQa518c|+NVI/:H?m<p6b]-eHӞcT? 応7c hDt1#q&^[ݤ=ᕕ~:Y}2!?PzD)7c I\go+M%Rj1KS`wyc[ pC&EbZW<}n= q#\Z:PzG)n W "(ʑͅSw}R#}_:Fv\Ĩ H̟l3p6qJ4dKT hL;"$4DJW1 Y7@;n"/,'etІp~.X0+8X> /ExtGState << /GS2 1207 0 R /GS3 1206 0 R >> /Font << /TT3 1194 0 R /TT4 1199 0 R /TT5 106 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 95 0 R /Thumb 1171 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 21 /Annots 94 0 R >> endobj 94 0 obj [ 124 0 R ] endobj 95 0 obj << /Filter /FlateDecode /Length 96 0 R >> stream )cqKn-b*UjNUoYF G}V ,@bGK=tU֮ C̋S[$KN;s{J+N$&obUƆ-ˍHTWϕo0b\̈V&`|\-?!V(,~O]Tg]WYpؑCIH:0".y~;`*1ߧI Wv`d&Ȑ[9Mk'سXѵo]ڕB'1{PR|,m U݁b:]? 8)f^QѳHRB6ⵢ+ib }sQ/Lg>=8ʂyC&@9Gi8h8d `ٱ>[6$Xfwx7N==6NWLU#4pM  {lWҚ9\gZۅF7]Z20*fAÜ9b4;D0|xYv3I=#>SNa;i0A1{]S"ylOqq;ԝίcMc<5=0keAU EUÏ6C) 2T":@/z\+hKi :v,y*c^),$x1B5KL<3heFd~}ĥiqW+i1Q֊j l%$J;P%^ԕN薬.JpO&1£'` MkÆZ$x1Ę0aƮzxСa%K:P~Q5m7E/_:N13*+` 1Wf{!o7}r"e.zh+{~؃ʮ{t.hq{C58Mk."6 \e%w[~>Asߝ>GyȺ4P\[%~EDJ/e=*.Wx^nj;WPVlcT >~N<NwN~7 A1h!ggODJ=k5~۬i3R1Jh6SKw߻nDdEݒ5VS[joY%jgcg~ӫvrv2 T_wb2J4( 4\3;SPlތS`a=+5 7 @V_DG/iԁ }t%DhJw5G'}xFT]U>kEŗhK`wfWiβB 4XFtA4A2e53)A%ݢ7:̒I'+sKWE)>a)]lzSJ5=T RBMZk⇚dC领Ukm98;^EX S(MRz &ט]xM,mjD8Ӥ[?O$=s/3ա?JC쟕Sf.>XԮzQĂpfj 1jQ 5 ( OjEhDQ#Km+%(yYl'ȮNf7֠W7;b@)<q}TIc,C5kӼl_: x6OFR^sg'(% ޽rZTr(툅l"#M6둗?eo)Qg~.]羰yS@fݭ0niWнf+MƑeD_M/" x ;q%,(<"3ieǚ9bPܞhLtnBVkAAFxfN*H h"&ލo}EݑS7'7ܢ16T?%C(pE`2b=걙a_$.sN(|N &hgц|-$G5{o ȕYwr7uC… [!@0LWM&最X4Wk{LI6`fCtwxNw[{|/& ByycWLͽbw\FHSV"$L=/u/O];lᚂz0~$Uy/\%!C;;~]Q:6!s]Nк< #.`ll_rۧpXQ ,> hqi83Ͳ[%qU9 6%ؾԉQϽ }!5ޣ_ 1%o.{TLѣ4dfyfQ9u;k@O51dx:zpvUg5C Lw,/x,(?Lͨcц1g틙r ]f4+1@Ey%̒} oL$nf[|Y U#ӣCV12B9u%(Pj`4|"ض.l[ǯ$JY(~DwϲiL%یC# AIYVo|w,ߋyLOS18Y}͞j +|*&ɑyM8 G: ̉T|lѻI6Ob΃bs< @@U}_4a3+sb^vyvm'5(gg#oC4`c Fmn3WiNz^h-M! CqmmuѣҦ0i_옥,/N+JszG b3 R$_]gFs ?^;JbWy+7'x˭M3`O8đhX QƱȉlw[5K+_6,$G}n‚6u/ /H1 MIV-ƺ%&5W1>G)KOg6ICyҽ9"6)r9%W%O#&|=t0u"ե <FDa<.d ڠ[5ߛ Wx@2`C@]])TIhĔ?PLth23iM3E^͏ତ1qC? 2.ɽr8bDRa98WV%캄)L/l]Ȏ9VY+>zֿRQ=/<Fٵ q=uv%)e_d%gzzq {;6n ꪔo;{uBZ3LfPFDFg}f7G&`ŝV!yi endstream endobj 96 0 obj 5360 endobj 97 0 obj << /Type /Page /Parent 1187 0 R /Resources << /ColorSpace << /CS2 1195 0 R /CS3 1193 0 R >> /ExtGState << /GS2 1207 0 R /GS3 1206 0 R >> /Font << /TT2 1194 0 R /TT3 1199 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 98 0 R /Thumb 1173 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 23 >> endobj 98 0 obj << /Filter /FlateDecode /Length 99 0 R >> stream Nh>hs1X0nbO ܌aPg h̬$.nxk/L S7]@ʤ/tMb)އkЬ8 s=Y8LW$VofRE5u?aڕ4.^6^ywW^.,* eY&A¼ pl>}yjٝ8bt7z}/N\?VB,F@ќ088\h[5"D kʟ@Gusg "Gw!z2(YI ꩳQ/8S?[-p,ZܡU;{ Z@הɴyߞyVwS*:ⷭ "u[6FQxKϻ!C=J*xt{>Tr)16xAXZ?xxݧE_);\6#w]"~ހ_J5oꢃrKN} ׭fXxxFNUr?VSAAs5Qc^-",@ؕY_LW!Ћ4C%V'~u l44^l0 `c0):Iӎ vDzϕ[36!L6^&߻<6#?•&% jWvj)(4%V/\a/(9Kgc)1AuHU&?$qC P032o@SߊJݖODg/8,-ᣓW*ez9 +:;]dSC=OJJ`اsV] `n\Gt{۱Բ=dK;NHQ)ZX!Jܱk-ĥ;U] ߓKlH;3rY9頬y!@Iu85 9\),$w[u~ <&;my|&=@ݸ`;_'vd{BR| $:E* f7hn>53)ZX Rߓfw|ImuLآ-oIwZ87ox~>mW *?DbQ2Z>=oLQQB;rnçRX|jh_)}Rm4PU˙,!}ҩCx9U*h@~tryfvʊBȴz*?)Q{"?n AY)ę>Kd,:$WdVPWX#oLIKE50zz)Rv3u nw%fj.\ʀh:4ȕZ+lw0$) j`=a6,:A%(P+CqTy%u՟O|aq/P1!w7AŸ !;Jt_`硜v3YWfBByn4a_uW !xsGOق){>NN=Jp}&LtAJTi,dAPW5":ar}('%B/LVuGA8Aڕn| %;1i6Ju9Nw/yS: ln 4;NI ?땚)Ax 'F ",ADKSKL6o2 *iT-yrgDN"<h.BdR476jϮMgnkV c%'IBw΁#*6ƞUO7<=:ݕXYB@m|-l ,7g$ Lٴ B!?idL؋ltež셢dW|MA2XFb<R$-9o([.(7 2O$$Z6П#u3GFLm䘷cR^̒'9D[a=N5@KZ.!1eFJG^xim}ʄYRb|K4q'JzXK0l[_2{ g]&󫌑6t`ck@ZV# \UӔ`TSm?SPT2}"(YiMqg֋e S (l? "qZݬ_ˮY9];;Mno 62ض2tS5Z}sҪph y"Gc-s?m3UωvS++Y@m"ƳT>II tpK]ܮ71CrsY?b P|s7TxEF Ƴ cL6sͻ8V5/Eh5|C!d}^?]zpDŽeSlz|ŮU# 3 *xЌ$%h9s}5R/PK8ohn _3eoʎ :b=1 x%~<*zj66YuYq2ȣr&I7$~(&~A:bڂ_S.Fe1O$A甋=a!쵍ﮠ6휘U,oam^`Gίaۑ5H>ǸD!S{HFoSR/f(#8?pa i^D;g̐=K/*>g$r&h(ͦ:#3&unS[K͙F}y[. endstream endobj 99 0 obj 4233 endobj 100 0 obj << /Type /Page /Parent 1187 0 R /Resources << /ColorSpace << /CS0 1195 0 R /CS1 1193 0 R >> /ExtGState << /GS0 1207 0 R /GS1 1206 0 R >> /Font << /TT0 1194 0 R /TT1 1199 0 R >> /ProcSet [ /PDF /Text ] >> /Contents 101 0 R /Thumb 1175 0 R /MediaBox [ 0 0 595 842 ] /CropBox [ 0 0 595 842 ] /Rotate 0 /StructParents 24 >> endobj 101 0 obj << /Filter /FlateDecode /Length 102 0 R >> stream >bfP@єٿV*B҈9 ˌL1r'd]ݰĕ'R@a@ʌ@Hk օF `֋g2ĪV]`nR{Rﱅi}1첥S/s~SZ‘ UŽ}A/堏"Yۚ¢C~=D*Jbź+Ÿc\DV-6tR19s8;5OfSVG8w!Gw` ` ] 7ue!w ̠e+/PŜv711= A^XRZt|8B`{:>¨֊S): пuU+/˛C8Opp+^0,7hV]€苘]뽠`v$*符FbX\`'&kd9FA0 6%oa.)9&mgM4N %TLҨڒY'-툵:rI5yfP.[y=05y"{c}/=\JI!.`)`Jn] ;~tQ˗\ ʻdC RJ9^7!{u5ރR0sJ EycL(t|[uǙO1[m;XA$xՍ endstream endobj 102 0 obj 931 endobj 103 0 obj << /Type /Font /Subtype /Type0 /BaseFont /KHPGIC+SymbolMT /Encoding /Identity-H /DescendantFonts [ 118 0 R ] /ToUnicode 119 0 R >> endobj 104 0 obj << /Type /Font /Subtype /TrueType /FirstChar 32 /LastChar 32 /Widths [ 250 ] /Encoding /WinAnsiEncoding /BaseFont /KHPGJE+TimesNewRoman /FontDescriptor 110 0 R >> endobj 105 0 obj << /Type /Font /Subtype /TrueType /FirstChar 32 /LastChar 122 /Widths [ 600 0 600 600 0 600 0 600 600 600 600 600 600 0 600 600 0 600 0 0 0 0 0 0 0 0 600 600 600 600 600 600 600 0 600 0 600 600 600 0 0 600 0 0 600 0 0 0 0 0 600 600 600 600 600 0 0 0 0 600 0 600 0 600 0 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 ] /Encoding /WinAnsiEncoding /BaseFont /KHPGNE+CourierNew /FontDescriptor 112 0 R >> endobj 106 0 obj << /Type /Font /Subtype /TrueType /FirstChar 32 /LastChar 122 /Widths [ 274 0 0 0 0 0 0 0 0 0 0 0 274 326 274 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1000 593 0 641 0 0 0 720 0 0 0 0 440 0 734 0 521 0 0 479 491 0 0 0 0 0 0 0 0 0 0 500 0 470 560 458 560 486 280 468 560 245 0 0 248 877 560 558 560 560 331 387 317 560 444 743 450 444 464 ] /Encoding /WinAnsiEncoding /BaseFont /KHPGPF+ZapfHumanist601BT-DemiItalic /FontDescriptor 114 0 R >> endobj 107 0 obj << /Type /Font /Subtype /TrueType /FirstChar 32 /LastChar 32 /Widths [ 600 ] /Encoding /WinAnsiEncoding /BaseFont /KHPHPB+CourierNewPS-BoldMT /FontDescriptor 116 0 R >> endobj 108 0 obj << /Type /FontDescriptor /Ascent 1005 /CapHeight 0 /Descent -219 /Flags 4 /FontBBox [ 0 -220 1113 1005 ] /FontName /KHPGIC+SymbolMT /ItalicAngle 0 /StemV 0 /FontFile2 109 0 R >> endobj 109 0 obj << /Filter /FlateDecode /Length 6921 /Length1 10652 >> stream ւ2_phlc'B/.IѽPy1,)&N~e{;O&~~["8ESP aY[(FCWOEeX1ݷl/q9/uK0]gs DtPDo4n9h׌#(g@^i7 #Eҿ\˵]@cE0|zT];:X.0UG8gL'#)e }I쩿k+20|£2p !H-bV2?%͋=G '14$%T]VUEk%4`0@dpHvif>)+"u] ́gS#Y] }\XWVZ_Yøp|"r#f_1n"Y,&G]TAbv%zlT 'M1H,+RDBԂ<al{HyJ+nf ouZb<:57啸3g# t,R.W+P*0W nk;R@bj%ӟ.)K߹/7FFΣ^~AIMKUunpsO|#,>Z#aF1;WAE klu"]%LƧ`3@L j{. KX'Htpq\g=#^60|v"$.2Xn~X5מ'Jһce;B]qتBg/$܋-)$s j H fO[_f +8ぜ.sM Pl&z^빨 Hk)A/3u|Xl|׻A3P("?8˥KוOc!=3 VCH ,W?ԅTgc#buCT`ӑ!cvf%?$Wc11,,iae 3.sVsgl_ vm U}%^>U gz-cs\rCRu% tqqZ3K\eA Z,5YV+Ke~S9 1 ޅ6/U|M2E[y.,=}Go[wHpv%u5EP֐ǝ }[i"P[]|AL r"S, ؘݗ^},rԻM)\ݾ>XbcNe74Y@ q\D>b!kIY<`ۏy҅̍?/rF>R)r2miXEJh00PX2uB#Zu\b|±%qR̉Av s=tCs:V{љѬUk"cо|}^OYiU1Z֢+oZ:(uF'yPEkGBܗ'ru*ΫDPz)d5163|0Xo6uvO6t=X"xOX |5֖]*~j> gv f{*̅ķ,tꉴ"؇vˉzP/G$"-_ؐ_iߓ4:$ F bZ%+ : tr=>=W*] 0"ʕdk! ]ukl'sB=^OSk)*s'-Wi7ܤF&P'NGW8oLۚsߢqVDۣDuw/*dz"YZ@@dX6JF x>ȚhHUf&p[haԦ3.3Oxבi $aᑨ[Œ Ep$QALr'N6m%jTa/(Pb|`Ւ`']R4Lc$sC0.xaߞ cU q*K1> fYpsKlICv%0hLre S0Urt sސ^1Z3W\9eRilEZVF%{xJQis;Kb[@:#Y5 TKusթ43!516"Fi{䅭<+HbT6xª\*Ua 8fK|8$0yɀXX#KC} ^_9.r<"}>0$q oAjAbey 4=s9P+Dž7AYN^pŌe J`E[orCy6̃E[HLT%G!&0ͮ8hy'FPT SFԠe:cЄ uf$c:tQf3`:n(^76~ķ: *ǞJN;(F U; ̏Wt?Hh:Vb)=|,KgfP2dÚn;+L\wk}Vf$լ v[5D(sĕ ީpqk$Bo`ㆫK01+8O^-ʶmpz➛~t8U^uY Y*9ysH"+q&WHOҋuCV!6)EsqHpφK!3[W49਴SBN;@ YD.6$Hz@?Dtle{i*6NFlM~c,Lν-!ЉLwz)}Q8(5OY8\;n0Ե gN{jxWò*DUcH5_h_dz>/~,UϦyzY" AGLʀN ab+rCѾnOrRx^G(wc98i 4xjV_ X9\akAxC5XOŭiD/@[x9/< /k .ʵP:z+) Op_77uis+\BVdfk^P:A^fp.0#L_n"DBB6WrѝO~( $(5wfmφ JZD_^<>H}@K9mJ &eA3ϵÄ^YLev&aKP8N&(u`BM]lH3Ѝ7 jӴL+abCn~"v/ozNedQό 5Ɛ.Ҹ|W27"i>>SYW}[ z'y|=  VK;vjBe.C{LrY ^Y\^ZNr084m߷䁟ʬ{'`uD ¨|?5:-^skH1Qƞî?jlf eU׫&׺L\<"wҌJ Ww 46Ӏ{lE D!8DqE; LiB}n\]-Q<Q| endstream endobj 110 0 obj << /Type /FontDescriptor /Ascent 891 /CapHeight 0 /Descent -216 /Flags 34 /FontBBox [ -568 -307 2000 1007 ] /FontName /KHPGJE+TimesNewRoman /ItalicAngle 0 /StemV 0 /FontFile2 111 0 R >> endobj 111 0 obj << /Filter /FlateDecode /Length 8101 /Length1 22064 >> stream g/ Pq RA0sXM $ol.9])]2&?:Ab#i@N ]UIb_1Yw. $CHm _bY._ bu'2ɑE7>>݉MaECz9O{M%!B-xPl; `DΔx#QKHmiEkWOxf\9XMwz4*^&0Gle_%*fstJwΧb - l;ֽ5VFṽ+6&+bוpmac@" m6/!t(}?,\'қ!hI쌠~GXבpAy+جj//-*` 0e<),>z Ru윴L?)4%I\N$J^AO#RNOq6. >v$߶kJ-y|؉LE+dJJSG eʬ͞HYoV^UώMay+Q;Bg5w4 pu"m8лFYRŪlb1LaTrhQ,q ;eKy+CFUD!lP[ 70z!7vb5ӭjp![R1o։7' ҠO6ƃsh "N mD](]? `9EeTA?A78PA2bC#XEL>HoZ۰T!ԑ]JěPXhKC 58yWxAΕt]"4qeL:@tk130ws%oƺ-o#22Åب/E>Ua4"'igY g/kIY[UwǕ~cgQ)ch0u&֤ 7r V_sFּ6#ԞijVqJ{HҲO]džDȰ7q9n6\hekC7DnNr eWtr FS ͍}/3;PZ'm wZ {JgR`,SQ.^ J. >oEؖ4Qoi{8’7JnSe`݅EtyA'9W=O#v|1b5LǢ$ˌ}m~Q#^Ѐ(-PwIX˵*+.$mcRmmQdЅM|0g;[J@Ja!* X(D<G *cvr丟-^kl!LN|O|^lԓl$*Ddu0vFNk2Gq-$TW]ד !7r;e/ 􇷲xۆI{9B襩֔>]\̓#ɯq-a\SREi'/ni'AMzɽ*"j*68_{Kh v`??vW?Hq+#74 (Nx7`~@̅^,n0( =|_X3o+49sz~1ۺ|.$*f #4d371coWbjVyE8I`[@n+n}jb~{lӗa՗ɎNW,݈&v !:GA/29|'3]}5g4mNUWц]2|IR?єq"q:.E kP:8 V{I){r;4UN@ GDVՖ2d kuCg{ -?A|pwc95栝D~]e ;CXm"Eke 9cyVCo15UB8~EB{XAmս_\7`T(mSNy@e wXu] p)3yE9F*.7ā:{N6҆7A Y-KG›tBHK֓$CQs(S͛lR}MǤ1d4I0Y7q'Q>aއ*qGoBHȢ^Gvcl!P |ɥ^N@b]!.YR$؏uJ\He?V]ϵKakcYƒ9p-1f:-2eBG QgX1Y!ٖ8QH-RƏE/P@89)e2GG[@ҼP)J^O흴r1|tx{blbGR=c-CǾk EC͠cjHReSDc(< {sG]Y{bƄj;#ÖYWڗ^_Ho̿_qn4\yfWβEr;Wz=@;ĵdNP( ߜ>!o=s[AcF~m)3'b=<3\ ,[!w!Q&-S֝ MݛڹߌI J\w٢J#qCpŪ{V;l;90'Q=Ӡ3zv `@։G+N(OIKkF,^@_T )ZQMEno ,1ڑjl޿w77jPq/yuU1^p.]-yM!{\9Hdd#\J"F #0nԴ7vTPf!b4:g̿{5MnuEIel%Y$ 9Jj@S-Blk ClG'мpByäːhE&AsōRG$g&'ćUdɁF'qO! ono{[&/3:݃[%UNO1ۢ:B7_K\{Ii|b+P'^[jUNQւEFH >D)k=_@$բ@ËIL>˂%^7$?e^AB-+߱ GJ&ZTuWF}ӗ$Mk7k;1J2 6RvXWM30JHf;m)'BaS$_BHG7|0/-E9܊iLRD~,1bvD,c)[*oo]2:!Jm?_F”^ 'B,ֲG-&`d΂W# wMHXhMvm`c(҄mhPBb{kKK|<>XtPKc& eE)bmn,gfE ??v Z>Z$DFȱو0΍@l\2#G{m(7TjRUyLfk,{Nδ5`: P&Z眀UDǰ)jO> 1{Jq&Xz 1`܃V(Xr+gqu5J_nEsq%u6R> AuB %v5ła g1Ysk@K6vـBυ2Dxhcx8EO4G^lݟ.?lǾ<lE6R49q+&ٿ  ]ƢP^bPX[\Q{` xlYs_LE} b&9FiEd*>NZ56,H@˘FA"3{Kĭ"/ShQM_^ˡJV=9+M6J%niXt7 4dNQON9'YcP~2[kCWX>9RvKM5m,R,c6<ۃ4{^e0i'^kLic<2'̇]#ؗ ?vDU6BXfX I}~=tg;@xwS*"`YX^<+ 9WP6L]2N%!?^ˁbDNӎgRdc[+N=-Xiw Tn,QϵGf'?Flq}t8+xN3T*e7rC{[*%F[߃Qȍ>{47,RZQD{bk!ьΧ ~L$Aۼ$뙪T5K6k!:P%WuJ==>/iSXT pB1jIs;VF7ˁ\fÉ=? Џ F[PKjK'^1lQ)t38/y-^)˱q礚'w)I X~J(mФZPBs2YXdIfV4Aۅd]~5xge`\ʉ=;7hu|hqdna,Eǥm/4$رu`jhxU}4rL7@n)Mmc?ܝs7 W#̜<>ٰȿwVKw9B[MŢ/%PQ j1;%ٰǥ!m[1' ۯn|p~ :Ѐ r^4WP+#-#l%*;Qf pFgXNSS.a:9M- d2Q1JF`_m,repiN,;,a^ bAb<~(Ǘ}s["i3:9} R.XW;o @npF!G@]#qA M#-ƨyrA+@xJ=of>މT)*ԑ$<̯LKAѐ߻N٥mF_ #,NpkZ~xLlQhc&]4G/*m4j ]-4HHV,qX,kf<~3%yq.˃Hͥ*_CMy̋KJm[:DPn#Yl'#r"8U!4J1NJ-$ HrVQk9Q[J)CGI~.{Jlb橤J{m",/tMFVzM>lK#$gYg*Nkw{ 'td\dfe#ܞK^ʤr9T>pΉlU4D'E4Jƨ]dZډIʓ 8;^"WӒwb 1NK)QQ*k>Rv,]؅L^48S z%V]Z㓘]XC1.GVB1 mRY׶.fV뺳v"K 4x"Xܶ< ZF&W$2-\G4W0G߷ҪK=,3dĖa3";3b!" 7SLAiL$֫ZE=4aSV@"νH^q{!..TH:mu@Fǽ%CBe~2a0!r?M .bb^H]{&&' @ *qg6e!Ot^RsuS\ k; endstream endobj 112 0 obj << /Type /FontDescriptor /Ascent 832 /CapHeight 578 /Descent -300 /Flags 34 /FontBBox [ -21 -680 638 1021 ] /FontName /KHPGNE+CourierNew /ItalicAngle 0 /StemV 42 /XHeight 421 /FontFile2 113 0 R >> endobj 113 0 obj << /Filter /FlateDecode /Length 21354 /Length1 37048 >> stream  @dK?_qW6 ɒ{-S)'P2C 1Q 9ZQF);[EElQ9~&с4ޘfIqAo n׽/!Nv`-+e5PDe)Ov|OnTMpn=ᬎDNb:j>fB1q4Mp(&ẽ cDb "!]}o<3mg<)Qv1$ ߏa=Y]ҞBusPLb0_une,!sX ;d37EpvةƎ_.J'z"YÁV#R#V1ҿ ̃VkQ3񩮄 ZjY cFH\^u) .Fwm搋~zXHzMyRmY&u+.Xxe^5)ey$hPoֹ{%5ޝ%x0V1e@@&< 'B ©Ӄcj< 7/V ۜo rDҁbQvEܣ*>Ū"R!УoDպwWM59ng6JxPF)_wGDfpЈ5hhқ;]!Vq*}5[e=C_Y-›մX:S{ǻI/> ;Z& _ml%PO 9(rn\xZS'd:] fÊTKb1n4*t V TyVljv9rs 'T7)G[(*(dV*Kڙ_6wK|n{}gְl;jf`M8Vܫo77Buj^R f9:,AH,d7ɘ8i.w[bJEes+L:`=E&f@8#GZ #ԇ.."ZQX Qlƌ_g7?ȤD*s޼mt0iV[;6-:7  ɔϟv(/ tNrB#ź&+' },X$;~F.L_`=18O|50K|B@WQ}Adv,st2%4ZK6ݥ8jٴgƳpuOD"|,K_06_7mvg< ZȭyZ'ӆ pis,74ן"_M9mHh8 vlrP#~sW˭TZ=4AeGXVIԏ8y-TGyuS99GAL$ nt}Yigto9gыXU8xV=HH$J3E"|1dr=Ǡ 6edgNa]b>i*m>1k΢iۥ0IߘrmT }c"wưh2f6ϡqy@QW;LŸ-)U}$2gkQA @#{ܶWVr 㚂ӀdV|$ɘeFR I.m洂,C,?ed YV?{WJ/ қϚk$W}Uɴ;+i2,l?EyN= 5t TnP.2HzNګr8|þWhwz+=~X9-[pEkp E6^ %/F\B*r_t1@4u[xdʐYVbg :xcV_@p7b/ةgbsD hȞo3FjyW mU7_t [GVC{n lݲ)\jW@2wk< mY W$tb̂JNv{vcEȯNNnu c_5ARCZLriBs[W1:ag_ȮWFE.yBM5=nK$9l0P F+/.d_9p:aF:\Y}j:J mj)73IPcxrH"݄=iPԘa9W*?0^R:d5iӊmf J\n*%A(}.)M-4 #j$l 7s12r(8gA8@x!OS__}z-Y"7sUxKj!$ ;lN}ïɊd;{سD; +c.uwU5GYNŴ/0ƛJ^=rmpg') Q䠵ˁvOjTH JQs\ *+m'@:}wBJQѝ \^}3ʤ覅nܻwk Y95"qiKNյ2zWq2b(TS_$f3Ï(t0q?r${Wmp-LKZɱDEb`HA )H'T*`dU7m}:> +1n3O?![_j evVW ; ]%_oTrQ@lb$N3KGzm/5BT~+ +9r KQFg- gl NQ <}RPq(رVzCٸ6ځ?<n[ۡl:Gpzd#],w6 mGÈd0]L3%U%A .# ЂmR: ҽx@y>VPB;1vklxx܈ϏKg ӽs0މ@=asy.r'S 5RA*o73]1Wv\asYf+Ο2~fSxa]#| WƇ @Ztܤ,kj?wŒޚW w} X:Síd\j] Hp ZSv/6)9 4-O,~Sk(Cٻ |L+ Bc0!|b: ++BRp[0Š_pY^!n9w'6sdyb 7S÷,#$,FҊLC/ tLr{|t%@\|FM_TFny1gzaOlِ)2,TК+i-c *9Xq.Lz/IU4Y@Cؤ&&}R[<d srTǏ0o3FD c@gjwT[3D9hy%0PCByh`#{'Ԑoze q-=.rf7@&o#ǒAx{/` l.=aq[aUJXA)0ѱK I8>")# jUUܐ>2/0Gň e%5AIiH&3o1KI8[D'!긧TգS8l!즀$d\Oa+ Y"n#Vڊ UA[{}gև )y(p$}40GB#g״_G/}7`_KW*]F헕Ws",bEKv]$ncQ:09Xqt-*('̔0!Dh7 bʺ gW.MuskA ! ǩCC" ?zyNC @:Q+OBu%Y4;耄[DFgͪ, j!dLed/25\Ob,N aׅޕx1/ix|&@S2 6%hvL6 8'80󷫡F2$q@-n!D}?܃[%3PAAk6oGVyjûĠ(]1迭`J?10U?A4%Byˡͫ{&P-oBAŃ3ۃ2cqxDK\&9y+YM 7Q~ipWPm~UNp)1j(Wdåݙ e1f'n̴Bҝƭpf ڔ N=x$q@ަ 8N&fIb}HOH} 2/CF^q)!8o1',_*SfD3\/2@x5y3o} UlؔLhrN3s6;WkqY5}@-8SXIwd,qz<Yz2saYi\ }Դ{F? Ԇe_C`Zdc}Ȣ6ӈ,8wy"W mI~H5)GC bZBc~O0bYw(gJsO9ɹVjfM zc5=/mt7(Y=cIr7gZ}_OfY;Qp$ G]64)QI q-`M^^Wæ 6Ua} XcĴlqҳ (W2d!yh%>lj!jK8FܽI"DF%sGG֙|[w)9*8$ddj5\1%~\1<f^D։Gz;+BS@r:xQdi=/%W7^Hl \p<_Fx stUGYsaYJ>%^8?kb0bB"t;\N3B ].jB;5m<2S/A X.nr4-/<(=3C  8ƴ&u&Z'N1 [DԘuс+^y9R4 3_Լ[l|niI.>PBEm-:c`E5O).x&>Xr]Wӝف\P'U t  qLaMX! Fh6v>Novt]N">Dǿ)̆.FPQ39>ws]< jcT¥x?K\Jb\JvT2V,N.{P^۝CY($}$\*4G75b}-Rz \8/!Ãsj3ʪX4!my "C _WFu> ,Ɔg^LMj^Lxɘlk7E3OĖXiW".9:C|O<Ɓf` 'vI*ŋ7ʵ /yJœnv H+dT `3PՓxHjYUЏ~!z|<M!AM]01[zEUoޱգS $B&Et?D>|CS؛Uo>{UV9ZޥGħ`hA5[f%M_#\QpCʪ'sO0EXfnD}jyV1N7l#Yhf=}%JB e-/K KUXJxG1]w>DYdZ]qo.{n9l9& $gf2 ,\W7Jkoh^t͌,05b؜-(RAMOngS= Vf3cq- 0LT̠_sVТ'ȣU{jDpU N|% PnE_\1oAZ=P|),>E %am9rwQkȵ!ұ-W ͤaX>7?o6Ԏ_{iK7Tꃳ90f0ʚZBa =vP{(H1e}CfGb7V Pf{Be`ha|tݰ[4ehJ@[]j^L[,n1HcebGߊFmÊØ]yq!QspWLՅҥKh5X$mܤ5's%}Nʇ`g6.:4lAcf-ƚO ĪU8n0xO6GI!/p'٪_Ay!bpbjH\ޣ)Pؓ:aEl;$Z9$.XQ\0 2= JZ[5ng /!~ŪU'Zzq@LYBOZ-WC]`?d=SD?~a{{*9Q mYUT\Go׮-Muhr?-,SyEaXVO}+FunU $"+ŪTW.VAo;cuȰ.Q ^-&^7- :LT ?&3kG_HbW6j}B6`vPnDɁ+0 k>I]7e *%I IbC kNN$,Hw J*4: <q Ejr/*rzEį#u&sFw}d:r )ǽuzCSDA8z/seW axWea{f@cCTs 7{!Aa]}{C^ɚ}3ʾJ3*aKQ١]`:QͼL ='b>i c=% e]do!fh }i~D- gz4>!iRlSG0.%/#K1_|< .~A,ЍMzEr/e`{v$ th-2Csd<R?O x @Dεp8Z{Fe*Kɠjqd>!YF3;PPHl5'~S̳g;L 9xN? 3)O)TuB#K- O 2;5#@Q7JK$DkȾ뉻I^E\L8(›'|Cos#+M5J.hBm+idc"/ P5x _;GH8؎dbb/,o?Zwv פCX R@",t qeEzEw%۽5:-NaA2ijߤ%Pa#`ۧ+uH){4deXEjbG`tz`4Gy o2 .O *C ~Z*C`8`HYO&T- *+cӠu>qnŽ|zAWG ϳfF3Br3Mغ:4 2 Q(XaC si2tb9**YzZ"d ?ǁZX뒊+z^o{{QK_K;7,`,\2MxB.cH eoLUW -ō&fߺ> |ϒ=s ,Z4B[p|3 Dx5fĈ-뽝J>y2/)׹`7\29Ǡ;6I|$C,5X )<]\[#qX1+_2@|DSW7#Cs?ua a|A_UL ^1pßZ;J(9R۰Lk[5%mj+%3Kq:vP"ZPTaҿ?Y^li2(m7~MXݒ XUD9?~ȃ$uc5y(inQ4ZN(zuPFm.5#N1'&Y KKBGlqNl|5OH %qk0G-?ۋ>d.J|/ 5뫌f?H'})vIyR+" 9nY ?ƇeY(Ĵ9^Ep@1ζB 'CV :x4cE[FZ=Ee##K/iaEC'̲78sN#f#*>Ke&UX Uv@,B{ -ŘnG%[_GuUj> R*wM ]Et!DVo\*w9o0B 3+*LVv sގ}?)Y\W4F!Cfo:S3nQ!/h۸5J"W9el_ 6Xe#@GE꧕:CPkUPj*MAYG:;gU2]P!,OF{N"zj4A{ $O7:D$z2@t_9A_nXm*%uc|\V 9+J4bBH+H+ u25J' QHy я|w~/T(d>h F9fPb4t -*Hg_ UeE{op˸/8#7!6EEc\r ;1%B0מjZK\q BgL|zPӲāD6mo+3C] مL=brarݺ ZaZ|}SC[q& !'md셛]>h5ỲL+/\qXU(w,&E+q"zfe|WvledsSlXX5x.?^GB6pw1PWyeet]1ڋԨXO1.X+rf l~~i1(r0CF2Qo9;.]M>H[J" ҙm^)>s;Ft:q4``EFbHWJ吔p:bY\ڝg&#]c4 = IjF!` Nuڼl]:58$;$=xx ҲdyJM0!׏?2R\c-NŠQC=?bJAQ* %>Ů i*Wd+MljD+:.y8вfe'Oz{Yi+S< m--KooWg|2b9x-Z\tZe]s/kOK-9 b1:~/2UFGOxXw|g? z=?LK& (uljO#kcIL%fVL-U-PBBw8`3$! DHF})lhdk-Ie|c(`A~ȥ-#{1 SLuSxְ} ,njerΊ9([- M !2ngfʔ>L["KpLƮP'Α G#_.k))ܡ/gjڹ;Fd!3J^;<Ytj Piގ;y73y!'w?Gz6? T5+Ǻ^ZNHF"`0U?M{ rN2:Ӽe]G^nզ{*fZ@=)&aHnJ 8q쟢 {{!A{Dppe(,LXBvmN_%\п"ydž_JWYXRزGY/ٚmjA9/|ΝY!`[0wP\ȺxxV3]2=je7B_iZRfB`" 5Ρ@4"1}=f5=f18#ZPeUHHt@QfJi6 5`Y= @i " KLWkhp?СqN]p9F=Uh ţ\H?aڢrAjJ&t4J$u7D"ߥ]۲z48;mwgh#p0\)/_.HJw% p,E j#"ߡazJ RM} T1+ݢVǺMzxٰ]˙mƥ"֤] cT'8,%ZhEjC?(o6μ̌ .C)i(?&X:anz6f2ז4<)Qwc*=G5~ړH?SFifN1rRϻgyhAdl[Sw6$*sLbyTO~kku0K]AseYw#w&%xAfh!0kFCsg2LDM}ZcX Ok$qtN83אmI_?t9JKP?Iضu%OI|oB/ds֢4 #`_ܨFuM˲U5mHL-eQϾn&nVnyI0)_{TJ0 mAdozя;i I&T*Ac23aLL?d$FsȄ&bL\6›VEH^b꒑4 vp6VB ok~I+*\K!s? Q'GڛUxP ~c}4N'mA" ".gbC2 ؁\zAÕ5PKAsj K;+2b]\qϪOv--? zsSNtW.T8 {AzWCd_`V8z?-dWNd~V9蘁ٷ(Ѿ3kH4W_@P/Z+:PԢ 9&Es4a,8*oʞQ8yمYwmw{.v^jOK\׬&of6%tz~ji ]D'΁-+|XB⍾{ fbX@ZzM BLxVY.D `2ѰA xgeSj0̇5ѹ]&r%;rҗnY#cNȡYbq TL\$;+nl;3Vly| &;`%F% ,0{Ec`E頻2Еg0r7ս+I@ya&h փW$BBbd.KF1s-^a7Ro'ɤv؞GUײˑ#""_4̒_ <IH"l_D͊+l`F$FT⠀$tunBi)uwZD]!w]C }6sHd?*撊qwŁaߝ bPЂ*nG _9(r<^EnU "5 UnYNEzNvS6\ỹEZӻ63*-ev|14vw]xoC<Ex+TJ4g%gD :xVP>HNK7>qJهƬaAG HsU\ޯ$RѶl" :6T AE;^`-gļ D$g(,,l8M kC#RLD[NghE;]:6t8tf_U {;{f9Zr*e-q(szPvw#ɭD.#Z_["3|h շ@T?).Rd05”̀aڹ)Lc⽴?`xX#oƲF FmLcky@19䵇 !+ZQY#j鍀lz+ bn4R Z1`z$T##4TÒ0K17;%{ydG/Y1^߿$>s Ic.Ч;eBتpxD[ j $?ax~ׇ9!|W֫]YA[(p}L'aQ9Vq0r;*2GXX ETd_%xD{MTf@" |_";X (zԞYEv" w~$F;{ CSvp]Z67E YEm3oե1#sxt_߬W~/ξAgK> 9 ?,'C@TY f!2`hsyjɶLZO2lj*i6<]{&'ft$!-oM2a LlzlW=m#o?ȅ+߁))D ޵Z)KZ5$pd`%S[d#h (PA ; j/ii %0fsû Dc_>XQ4dZ旊0';zv{mX-ū@ξğ`q)Cr x>@u-( q”lN%eRY`^e'"BwO¤h}bK8{by[ ieBxRZ#֨7'VA )#WQo7~IdAtK^NENJ2?6U3Z+eBsV6< MZA[n)ѠxsKK$DɪK ܩV@4h֎%x3F n)JQTXe{|)=}I ʤ0G#V@}g z4'ٯ\k@>h7O#!p0K-wSгHNS:vatJ7ӺL ܬDJG5:bm yyoPF'` j2}$q{]DhFJ ̾5DBe2yQdG³f&X~S>kC ρ_[v~9a;oXS,O|bic013aփ+8V5gvdj`5 p5l컥y`eөN-z]_3*s %տOo/7(Ks~(;kv)`#벟Z7[{AVz|j*:Uwn}lX oev]?.^C:|M3U{}o[ֿJـ #ȉwş|8z RgK›_a%ݽV7[s2N SucXt}R*=|2 qYsQ!PB+2^[({X:@(MD&fl=DwL}%HulUlm9"j:(g}҄VdD5h~us1`c3FÄ&[TG9/DuG>΃;.AǛ7 a5@2|+a8diE&,sB742ClӮ nfOt_6j>U(a +3Y ̒zhOӝ}fܮ,kN[{b(oyHN hmP59If񱑾 endstream endobj 114 0 obj << /Type /FontDescriptor /Ascent 962 /CapHeight 687 /Descent -274 /Flags 96 /FontBBox [ -218 -275 1112 963 ] /FontName /KHPGPF+ZapfHumanist601BT-DemiItalic /ItalicAngle -15 /StemV 0 /XHeight 0 /FontFile2 115 0 R >> endobj 115 0 obj << /Filter /FlateDecode /Length 8780 /Length1 13428 >> stream uFX$Q3E%y[4CGZqlaa/kY1>P\jD7BZ S}űֈGc:,-һ.l#U?a w"TA$N{#Y/nECz_eT"aveĠWww6[m(4v?%CYCr>̓P=!x_F.Q\MvMKWG"6Z:3^m6U{`~ +0Ii6V=WÍWVDBJS)'w ?Mk|Mʲ-,U٨ .U kVy]JF&/t0(s@ޟSXX<Bϫ̹xjBr Ԭ\*ҭ9G Ȥie,O$ZyO"N;瞦9N2YD`uCDqŃG̞2Sk7 Czᱷ2Ɂ#8̚Y ƈ;Nh/a#sX{x*B 0K>;QH8GJNGC .#]1޿0;sY<@+|$Ÿdɟ*@J͹+ӲI8$F+u ius2ѩ-xOn-,ћGS" ;w[er8(OarN'aH|wYR{Y>Q&Fk15K8'P9}4T9# 큪]7#@@գig!a=~+ "%?L0(:M(^&f~Uli:tѥ";./v_@˓ķKX8n#)u&#sV8!4LqxS:lZ(r N`?#5UbkL+>b21܁1 8.ze'u{Wm 5 Dmw-5c`'t6)+QJdANv}ځ:5E;ؼH*'ؠq&>q %k .Í/t O83]@c&fhrQ=݊NqWy&]`BuiUGg8*̔Ja1ZaZd2ck&0dg NY:HHo,tC!24&$ĝAypp\HjaHq@C !m@J+p#uZ?N6P6<3 OdHpbwϝu̡vaRE}y/ƊX8 笗\јF(7 Hސ#".5{-1Y'[o& zoagvW ;dG&\" K˔cy/s@Zf&Ih~g=? ] C:TXpםKIJ&8qrCx QIيB .#hFj9ė1ש!~M}d^#_l[K $n<_Ld(BZfU6 _*z 8L8$PϧC+݅xPx3 F)*0:↍ bCN$ i8% P*[ڗ">/ QQ+vCVPLr!/Sw4d5@ɒ-`n 4C]or7`Enq';hJ#cތPx S>j$x.;6ެa;͎h0?˗LQx 1SP[920)%w )ێ_sc UtߜS_{ Uj`*? 5V+oj.|1kI@WF2,m6s?WX~)=_H/`A\]$2n8{՘pS2d55_hoWgAԣ?\$HT+T5c0dUv4U1lx5,wEޡeJu͇vd\?`(1.+k0aI¾~i1 o) 6Kqzf3Yp30$m6H5J 𹃅V3[:}%Mi#ZܖrOr"G9iCn#76sz1k>$_s[_) u5M[tu{qOtz si>ϨDk1*/Se۟Ċ3>+\:"522;;nN$Jml#"M[V?}$WDpj>m<-&=Ɇ"ܖUCQzK/_vլ3mv` Sqg㰜,kUtſ.uI{ w~ce6&YfֺO9H]bvZ5Fd>DJ-seb Qd6uEo9#ˍ SݭJsp*MoxQ~{%%5+5EY=RO|L/a˾!Ðbc^o,~??$|{?]h+fD0B4DyOlgfSB?zfYZ㉖ 0 $+cau>prW N8oھẽn䛻!5xYH#  &A&RK te4OW1VcUWB$f7DƂwr( IoPBѬ)L*=I~zT !pc]Z1uM}/Te軽=[:SӪ=՛|VX|F,1ϢehVś ϻVMT~Qo I1 DZ^_dh@ );~&..b8k)x? p`1F:J8 cIZeb:)Zfܩ%g^>AK"$\9;|pNh|2ICq *~*C/zTJ,ƯJh&)'ЯB!lsn20rpMtn0b/E,ZűA,kxj[a(  ,-_'#&etXqӇW>4 nߴʮpc ]o 02ݽ3xbdk;ETtxƐ‚~r$a,:tDl%) Wl&e F|ȣSml -ЫhM*oB0TyqVcv[vaiz%1{ڳEՆos@Io+[0A$UNxhlfTƱu1@ o_ĘPEm .]\fs[^F|Dz_,^xaAs4պXݬe:Ѧ}CL6r{b4)2 ν~ubءe^W0zLCATUqX֐w`]G@ǯB>f~ۉ^F21\dN0f1Mް&Vb;<$]rJ Pl*/`JG5iHc20w;˺wf d8e"PMĭԱE)sL0^9D3jQ&Uƾa| !^uzHc`_=`3_>/ERioFz\{Zw;pOK:zm8$s7Hݭdr \\b 2ZK&+2j༴Qxt&Ne:M.>n!p0oNR f0Q{xh %5#3<$qIVLW "YQ} jZFR/5 MezX9^2[Gsw.zuJwgPlKA *`e9۟E3Pзv>c=nĆ^; ɈJ4k0ov4"o3~%0,N=y 8!s}S0{GRDj4 uԒVOI'+)s%`Kd0vQ}'-Y?͘ d`ڀߑT^Jߤ 8DO кabc,;t vȸcsA:3r &+ahv/|@rt)HFe Bpp#BzÑJXM*E} >6PcP @m7E,pdY^Q|F̳=VY 6V<0XKbSZw%Q06PLpGfblEޮ0'u,2U'=t"H)Y":k^!o"j* ZHƛ؅*ɖr߈9u|?&@!毻t`*`~R|!b_=EL28\}h!hIJTr; -b2}f7N'Qz(x=SlCfo!6ս']J6r{Eh,;RRFTj )54 Y:Tq%dG2S+D䜙PTxM=q5B@VA|Wi]\cHPN>Q=2G Ṕڣͣe#.31k:#0kŵʌN 4`gu`Gș Hi_*w~@%_[qe,Fx /M_nf$>/Bk*P էRMG%p԰dNB)(ҌZ;ê- ZH~0@P+TZ}$I-,ؙO;tW-=RL?e=&tF;ɳ @JK;6fawO!&#W1pB'R(.9.h\&tF]l7l3 GK/bM-.c2d~XA 1N  ]75оt*ql iB(gQ'E͚laz8 #> KiϢI6[$S^ҴS%" Fi\ȏzFnŤe*Yt0DٱEfMN{ YtC3lTnQ+Pޠ+.Eqg|`pXq:pBE<]-#ojϋ c9/tuؼ/DGڽtʼn8]A Rdt9lVǦP*JF;e0'QL]I qeNal~s(F<>/Ő(!bɠJ3w;{qz&oe*-GuX1vb߈6ζ*3T !?]A[  TZ]Gug ow{hMo03h|ǥuGVwlFw|3( Wn(Ö`TTͩ@G2P]wsBXp @X )l.0AHCJݥ*vzSNm-: c@𸮕[!+mF51ZR >D-?@pЩR4^F74+Wۦ+8#mj݈l@ @ 3۞5p8.l gSڑ~TFD_mRiD+$5i&3@u~zR8ElF!2 cy3)5)<6{o:U/MXY nj A۪N!PԕHG<zadqp.Od~O@_CT |F\ʱnKF 82)ec_X+) :(.ÓE61X ]2B/Vo"s|Aj7Tn\$A(]RlA*V\5J:/ufSDlkpf * El5)$A\ՃųBMe e [^N\8~,n;2oҢ"n$iCvCS-\+ò(bɜÓќ*ࢶ{Df^WpuBD %#~N2߹<ٍ ,!6o!$a.I.ƯO;ECJ:&gۆ%> endobj 117 0 obj << /Filter /FlateDecode /Length 11065 /Length1 23688 >> stream gޝF 6gp5BrJKDw)Zo8K4=&LvXHHFȰC?Ǵ=.νi^ګe/(1js7Svj>KrW3l8m2^&(wRbOԀc}e{z@&*z @CK3 DR&SY*ٶj5)s|5!JZJ B=ϙZz5g^aۙ~V%VQ)aR@nuEr2) D@'+Hde8C#H gc䗌G_y%sa3 N)% v#!68Zhd.Z RgL/`taUi<1EWi6k֏nYx}l Ĵa'+78s$.[>@UPK *v˺-ûaLIzEۂ[.fcOX§HaM ?_G_?7Y^/ /ِ<և O+76MLݧKF+UqWuK˓6oQ Ea^Uv_4[fDEXƣ{XI?C|W/)Z"eRPUESya7xf'X\Lmi^ˆRء _65O;K؎""hZ#Ql̉T Xt}Av|{es+e.)3~'(,wc\֨d-X=~t"8b#:* QK_rU -f1"<"o,L,׹Z; lj񴄴;[MX]@#2dMP5C7}6>?k]rS UtN|ߨ^?UQ%9#Zw5t:B5QmghS<C{̝P!-;gXryQ}:/iRnEp>Cq>$ 3 ( tYx^G|$Km?;",}k{l?˯~ r%:~B,υ i_Itgrs*vdm2|'>VöVPAJj-Icp♙]Mp50/kaP'/A)NyUcLUIx3*^E̴:HT-ƝKܾt+Ma6G9C,+%lIΎm͉ؾTοkLQ[Oi%Jyq2+bɎJl/r1 c`k*'6&kfU{ikIR@JV!ӡO#;:G3"ِ+ɕǪ撠l\6wXN0$Yd>}iV j-aIn [Ǚ+ a5yS1teH<ޟf>2*%7h0ҥt%Õ<1p $v?-uL}V#3kU6sz@Ro;IKX; sqHAsA뛋r 7?,F)͘bP3W.wW:W AJxPUij8#Arkvfb4XZEMV"Q[xH:z83C cEަgaD&FF$ZFk Hv.9bh$ j͇ ev3Tйl @$Ea@ 5R5'%DYT> jJ5|nks18|w?u?v%rt\C:L@Rޯ ͹|w7i *608/O\OWMo=tyGc dc>QFukw5>i{F>Pf 1XϡnO4Y+wJ@ {b3P2x8oTntudA(r@nY;lY6Oxj 王s0I̤ >ض=xu)/2Q }+?yGb*lAy~>@ەlw}@t0-NR;r;.LN* R̾k :K$Ip>9 EA_jDkOϗtQ.rX?"Nflcȏ^&WrŻY C SbEFfDl U sI\}!Ƿ~5}Ju3[aZl.{G]م)?Y R9#wni y7JrX-]r(e9y1bG۷JD%PB"ira=eIJ(sf-pu?s3'7'qhm) mpʙڵ,>C݊0o!DdpR@Vc|h#/bvxnu0Dtc${ #Ra7j<K઀CPOMTh";~a,`Vy1eEERr-} * c1K>Bfb5st;0%4f@kOp@p^:8Xlф $gå 6;LM$o) ߗ9EG9KD(ȌKڴt.O~TR5EŒT}q}ѰRv,ib>nq.ݲ e &%q D͚_nyw4H =q^YjLC[jś^ C4Iq "ulB9/ 8|ZfC6'SY!ǫ}k|ٙ|3%GZ˩hz[Oݮ)hw~vx__LtjWnZ k"}HD&2X|"ZrEG#4Bֈ^ح-"V\k T^@T)6rLy叿/? pe~>'z(z7`z<=ꡫX3 b-vAVCiNQ_"(@Euz"zh ̈=}.#f5À!r*2$TP:"A.k%{aM!{5uVIfy`K%MK$T49fw8ijZA* M%iuC=@X1&A\ވb4/Eq t&tr/5ݙw`ː0GJ_DB2y+9ыѲ[V*_TL KSO}Gz/74]5w((4p즋X UdmǮ}D :e-?" }^A[I k sl,^?Xg1C|j"a> e Y2V dk:.4Q>:uDcM"(ߊM•orxj41O.l\lUIE !Ο0hk)\$CG%^'Bf3s#&НLQVE`Q[avjl[>b3~KQg.a5"eǥƖ$ǭ[PdNR$Db%Xwg~qӽL0 t&?gϊ玵q_`7R/b+" 3UgIǘ}/[lq#>]#bWhaUEz)yVXxD ߨ+FlKEg]гbQk(w܅OĨIk^}KƐ+v̲dPL{S"aGHL|7_ߍ rU/M$݉8%E7BFco͒]݂pʤʟ L,c+Q<Ը8P璥͡hZ9 kIw_DV?Z08ϥk}y{mOS 0z&>$} bb?;D5>}sW64 64~7Yn%:>Aӄ5w7C6Kh|=0>gb*1|PHBbr\ڮH[ׇZ(h ݳ'yb6)g5v_5l #ϥ(<HH|o0Ӽ(ePd7RdW 碔@,x0 x,GeO=~/t7T@MnIP6:ΥAT!N`FuR"٪ V÷uy(U F 7*d(%[f*\b˙-OvSDF-+M)a M)l8m׽PC 'n/:;o(AUV7m3ܡb=F2:{I;ၴ);tӔp]AO 15@/;M0F&Lɥel8$ L$#,^s%8;噮8-4X>LWi,R MS,#yKN okV#h-YAƠN=G~e{Js"uAڋR^ QY`7[!4$:(Bݎf{KA4G^(WGI[q9W'4nNɑb=S ~R.P,:٥YKeqWxqCVKk6D^ .6+IE^(py\5 {_*ywx )>/mmE^vg^+TkdKSFQ8aq {al-Ȥᶃyu "C@ɐQE]z.*3Zhza-0+fI} ]UK%ӉUxK2M贲ˤ!b-8o 裬}aBKHpTMGYWv* \Mf!-FU矹6OF#/.N w 0gk&yXY2ɚG\!(Uj(-^MƦ`4Z]vL=V-S-HTm b؝SX<2ٙ3j}- dzW ]+gy 2)F W:H n*|;oL,QQSⅲ0Ē߆ } Z``[Hx>1SE26菻Ӕ;>L'`)l /,c6%L$\OP8,S-Buk#Q6*{_#T6q74bbW]+ 7J5;>Rm~߁GA‘r."!:CT\BuۣPP4VE֔9pU:Y #`Sn(_ZI_q:654m[ hkDAwb촧k?34=؇/}>

w K0]{J"m'մg(0cKJrB=/ lZ% [XUE!vo2lt&U GRRA\p`ô *ꈩGg_0AV'b>I+uec O1E0ֲ~[t 3Ih<ǚҳ~LI\`Y.tQŊYx-XgFP TJ|34R9n7x!6t''֎ڛEP)oKX峈,Y*Vl$ztoGȐlT M5䊡sgc(MF<:jbQqDFP0V͋c{ܟIv$gOw\ d>Q/: 1l43W3&_<=t vWڳyl"hfD@A^E֟ L6^ Cf`z _H[/0`("zqZL|L!F.ղ YQdۈҦPӘl w^jE ;YH;KjO9bc&~[vq%aΞaADXo0E9*:N?zcʜ^0w~{z$q e+hئE#/Qu*a$i, +pEyxWL qi݅6O3*S?4 X9 Br%&W.kO 1Y5i}.Ci"sι{I9mɼ`F ǽ42,b7"zm?aXiN"eZ[4S5vIW&'=m@/<KbfZsSw^q??3q8t~9,\FVkNm*1(x.UjN]ycLu(fYʖizԊ!zvW+?*YcazMG 䬼vvf'fiXٱ`)XxbohQm\/Mm = &@ݭH6`lwX-= 8+cmv2ɯ'=(`v:.;۵"̊8bRVɌW6gӬ-IYFP[(*@C~T:_ *.Q}IuW) $,m(,O kU?{~e?gtκ]eqw[-_R@\!J=!Q@W{F߳)5k0 'd0[1mH=v2[$Fm9S֙7VQ{$XnlpXmgwG 9\8砪@Mf @>tSt*8,y3&Z{:PޜYPx~ єpy$?b[xF0"9RwYۉ`}5(TRu*1[#"돧HnݍɑHX YgUpai ١Pg ]@s`==-dP!0Rd%eHvv\o(OԺ8g83W,di:ލ nΎx s Ѝɼ 5׬1ۛp&>f%yjpZ0kS#l Q#wA%K;XGA8@[83\ͳW@n5I˸ݙN'G4<~&o¬A_W&K ls|t?+#<`%4>I8wSXRt|_ `^T7~߇[􎛄(m1bP/z,A}E;f:Gdy!ko*f$x'[5^ e]I, b~;-!HFٰ6p& fb]4q> ڢU4\%zt8Q,3&OWEAm÷,r*~/!{*"1G3] wQv8IcJ{ ѠЙGm|<|ىF3aȴ@k~b=r.WG:`3F))!_SpX4 6N%Q.8إUPl>~F:%ix: ^L헸mV endstream endobj 118 0 obj << /Type /Font /Subtype /CIDFontType2 /BaseFont /KHPGIC+SymbolMT /FontDescriptor 108 0 R /CIDSystemInfo << /Registry (u)/Ordering (d[)/Supplement 0 >> /DW 1000 /W [ 3 [ 250 ] 120 [ 459 ] 148 [ 790 ] ] >> endobj 119 0 obj << /Filter /FlateDecode /Length 238 >> stream ;!_fNFnXBV=&@sQ1`]ִ\_ ^գ9.rah9]y3x0 #q0Ďp4(BK µUaR?IGQ;X 8[b+xu7XZ4cebֵkEG9 xh䐐.j@j'BrɈ&c(7~O01<=y1X-D*@ۙln endstream endobj 120 0 obj << /Type /Annot /Subtype /Link /Rect [ 170.16 612.80554 306.85999 625.21021 ] /Border [ 0 0 0 ] /H /I /A 121 0 R /StructParent 18 >> endobj 121 0 obj << /S /URI /URI (Ҝ _.ouiHʼnT*WELs2$դu|cӊG6G) >> endobj 122 0 obj << /Type /Annot /Subtype /Link /Rect [ 307.49979 625.16516 382.51251 637.56982 ] /Border [ 0 0 0 ] /H /I /A 123 0 R /StructParent 20 >> endobj 123 0 obj << /S /URI /URI (SY./h) >> endobj 124 0 obj << /Type /Annot /Subtype /Link /Rect [ 335.45996 654.28491 474.55292 666.66956 ] /Border [ 0 0 0 ] /H /I /A 125 0 R /StructParent 22 >> endobj 125 0 obj << /S /URI /URI (HxFNƒ5#dx%'#'L1ҁXKߠb) >> endobj 126 0 obj << /Count 15 /First 127 0 R /Last 128 0 R >> endobj 127 0 obj << /Title (j?uKAV) /Dest [ 41 0 R /XYZ 0 686 null ] /Parent 126 0 R /Next 134 0 R >> endobj 128 0 obj << /Title ( ۣ\)X7_0) /Dest [ 89 0 R /XYZ 0 686 null ] /Parent 126 0 R /Prev 129 0 R >> endobj 129 0 obj << /Title (v) /Dest [ 85 0 R /XYZ 0 686 null ] /Parent 126 0 R /Prev 130 0 R /Next 128 0 R >> endobj 130 0 obj << /Title (Ա \rqA2LF6) /Dest [ 82 0 R /XYZ 0 686 null ] /Parent 126 0 R /Prev 131 0 R /Next 129 0 R >> endobj 131 0 obj << /Title (EӼP'&l0~) /Dest [ 79 0 R /XYZ 0 686 null ] /Parent 126 0 R /Prev 132 0 R /Next 130 0 R >> endobj 132 0 obj << /Title (\),WB}G) /Dest [ 76 0 R /XYZ 0 686 null ] /Parent 126 0 R /Prev 133 0 R /Next 131 0 R >> endobj 133 0 obj << /Title (G1> endobj 134 0 obj << /Title (XXZ4Nd`-V) /Dest [ 44 0 R /XYZ 0 686 null ] /Parent 126 0 R /Prev 127 0 R /Next 133 0 R /First 135 0 R /Last 136 0 R /Count 7 >> endobj 135 0 obj << /Title (7ŗ|ڵ) /Dest [ 44 0 R /XYZ 0 536 null ] /Parent 134 0 R /Next 141 0 R >> endobj 136 0 obj << /Title (*!c;wE' i]5TG|&W3) /Dest [ 64 0 R /XYZ 0 416 null ] /Parent 134 0 R /Prev 137 0 R >> endobj 137 0 obj << /Title ({ඒP< MJ6inPut) /Dest [ 57 0 R /XYZ 0 274 null ] /Parent 134 0 R /Prev 138 0 R /Next 136 0 R >> endobj 138 0 obj << /Title (mg7Ճg\\\(ԴƥÇ`) /Dest [ 57 0 R /XYZ 0 626 null ] /Parent 134 0 R /Prev 139 0 R /Next 137 0 R >> endobj 139 0 obj << /Title (&c6`ov\\$42vD%Ie) /Dest [ 54 0 R /XYZ 0 403 null ] /Parent 134 0 R /Prev 140 0 R /Next 138 0 R >> endobj 140 0 obj << /Title (h_DZCu) /Dest [ 50 0 R /XYZ 0 365 null ] /Parent 134 0 R /Prev 141 0 R /Next 139 0 R >> endobj 141 0 obj << /Title (SUu,eh$%) /Dest [ 47 0 R /XYZ 0 511 null ] /Parent 134 0 R /Prev 135 0 R /Next 140 0 R >> endobj 142 0 obj << /TextBox /Div /Frame /Div /Footnote /Note /Endnote /Note /Shape /Figure /InlineShape /Figure /TOA /TOC /TOAI /TOCI /TOF /TOC /TOFI /TOCI /Superscript /Span /Subscript /Span /Strikeout /Span /Underline /Span /DropCap /Figure /Copyright /P /Standard /P /Inhaltsverzeichnis#20#C3#9Cberschrift /P /Verzeichnis#201 /P /Verzeichnis#202 /P /Textk#C3#B6rper /P /#C3#9Cberschrift#201 /P /#C3#9Cberschrift#202 /P /Program#20Text /P /API#20Definition /P /API#20Description /P /Tabellen#20#C3#9Cberschrift /P /Tabellen#20Inhalt /P /Beispiel#20#C3#9Cberschrift /P /API#20Function /P /Important#20Notice /P /API#20Attribute /P /API#20Method /P /HTML#20Vorformatiert /P /License#20Title /P /License#20Subtitle /P /License#20Text /P /License#20Section /P /Fu#C3#9Fnotentext /P >> endobj 143 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 0 /P 722 0 R >> endobj 144 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 1 /P 722 0 R >> endobj 145 0 obj << /Copyright 146 0 R /Standard 178 0 R /Inhaltsverzeichnis#20#C3#9Cberschrift 185 0 R /Verzeichnis#201 187 0 R /Verzeichnis#202 194 0 R /Textk#C3#B6rper 234 0 R /#C3#9Cberschrift#201 237 0 R /#C3#9Cberschrift#202 244 0 R /Program#20Text 247 0 R /API#20Definition 251 0 R /API#20Description 253 0 R /Tabellen#20#C3#9Cberschrift 276 0 R /Tabellen#20Inhalt 283 0 R /Beispiel#20#C3#9Cberschrift 460 0 R /API#20Function 507 0 R /Important#20Notice 515 0 R /API#20Attribute 519 0 R /API#20Method 557 0 R /HTML#20Vorformatiert 649 0 R /License#20Title 671 0 R /License#20Subtitle 673 0 R /License#20Text 674 0 R /License#20Section 679 0 R /Fu#C3#9Fnotentext 713 0 R >> endobj 146 0 obj << /O /Layout /WritingMode /LrTb /StartIndent 0 /EndIndent 0 /TextAlign /Start /SpaceBefore 0 /SpaceAfter 0 /TextIndent 0 >> endobj 147 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 2 /P 722 0 R >> endobj 148 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 3 /P 722 0 R >> endobj 149 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 4 /P 722 0 R >> endobj 150 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 5 /P 722 0 R >> endobj 151 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 6 /P 722 0 R >> endobj 152 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 7 /P 722 0 R >> endobj 153 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 8 /P 722 0 R >> endobj 154 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 9 /P 722 0 R >> endobj 155 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 10 /P 722 0 R >> endobj 156 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 11 /P 722 0 R >> endobj 157 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 12 /P 722 0 R >> endobj 158 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 13 /P 722 0 R >> endobj 159 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 14 /P 722 0 R >> endobj 160 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 15 /P 722 0 R >> endobj 161 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 16 /P 722 0 R >> endobj 162 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 17 /P 722 0 R >> endobj 163 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 18 /P 722 0 R >> endobj 164 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 19 /P 722 0 R >> endobj 165 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 20 /P 722 0 R >> endobj 166 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 21 /P 722 0 R >> endobj 167 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 22 /P 722 0 R >> endobj 168 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 23 /P 722 0 R >> endobj 169 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 24 /P 722 0 R >> endobj 170 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 25 /P 722 0 R >> endobj 171 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 26 /P 722 0 R >> endobj 172 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 27 /P 722 0 R >> endobj 173 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 28 /P 722 0 R >> endobj 174 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 29 /P 722 0 R >> endobj 175 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 30 /P 722 0 R >> endobj 176 0 obj << /S /Standard /C /Standard /Pg 1 0 R /K 31 /P 722 0 R >> endobj 177 0 obj << /S /Standard /C /Standard /Pg 1 0 R /K 32 /P 722 0 R >> endobj 178 0 obj << /O /Layout /WritingMode /LrTb /StartIndent 0 /EndIndent 0 /TextAlign /Start /SpaceBefore 0 /SpaceAfter 0 /TextIndent 0 >> endobj 179 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 33 /P 722 0 R >> endobj 180 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 34 /P 722 0 R >> endobj 181 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 35 /P 722 0 R >> endobj 182 0 obj << /S /Copyright /C /Copyright /Pg 1 0 R /K 36 /P 722 0 R >> endobj 183 0 obj << /S /Inhaltsverzeichnis#20#C3#9Cberschrift /C /Inhaltsverzeichnis#20#C3#9Cberschrift /Pg 4 0 R /K 0 /P 723 0 R >> endobj 184 0 obj << /S /TOCI /C /Verzeichnis#201 /Pg 4 0 R /K [ 186 0 R 2 188 0 R 4 ] /P 725 0 R >> endobj 185 0 obj << /O /Layout /WritingMode /LrTb /StartIndent 0 /EndIndent 0 /TextAlign /Start /SpaceBefore 11.89999 /SpaceAfter 70.85001 /TextIndent 0 >> endobj 186 0 obj << /S /Underline /P 184 0 R /A 1074 0 R /Pg 4 0 R /K 1 >> endobj 187 0 obj << /O /Layout /WritingMode /LrTb /StartIndent 0 /EndIndent 0 /TextAlign /Start /SpaceBefore 14.2 /SpaceAfter 0 /TextIndent 0 >> endobj 188 0 obj << /S /Underline /P 184 0 R /A 1075 0 R /Pg 4 0 R /K 3 >> endobj 189 0 obj << /S /TOCI /C /Verzeichnis#201 /Pg 4 0 R /K [ 190 0 R 6 191 0 R 8 ] /P 725 0 R >> endobj 190 0 obj << /S /Underline /P 189 0 R /A 1076 0 R /Pg 4 0 R /K 5 >> endobj 191 0 obj << /S /Underline /P 189 0 R /A 1077 0 R /Pg 4 0 R /K 7 >> endobj 192 0 obj << /S /TOCI /C /Verzeichnis#202 /Pg 4 0 R /K [ 193 0 R 10 195 0 R 12 ] /P 725 0 R >> endobj 193 0 obj << /S /Underline /P 192 0 R /A 1078 0 R /Pg 4 0 R /K 9 >> endobj 194 0 obj << /O /Layout /WritingMode /LrTb /StartIndent 28.35001 /EndIndent 0 /TextAlign /Start /SpaceBefore 6 /SpaceAfter 0 /TextIndent 0 >> endobj 195 0 obj << /S /Underline /P 192 0 R /A 1079 0 R /Pg 4 0 R /K 11 >> endobj 196 0 obj << /S /TOCI /C /Verzeichnis#202 /Pg 4 0 R /K [ 197 0 R 14 198 0 R 16 ] /P 725 0 R >> endobj 197 0 obj << /S /Underline /P 196 0 R /A 1080 0 R /Pg 4 0 R /K 13 >> endobj 198 0 obj << /S /Underline /P 196 0 R /A 1081 0 R /Pg 4 0 R /K 15 >> endobj 199 0 obj << /S /TOCI /C /Verzeichnis#202 /Pg 4 0 R /K [ 200 0 R 18 201 0 R 20 ] /P 725 0 R >> endobj 200 0 obj << /S /Underline /P 199 0 R /A 1082 0 R /Pg 4 0 R /K 17 >> endobj 201 0 obj << /S /Underline /P 199 0 R /A 1083 0 R /Pg 4 0 R /K 19 >> endobj 202 0 obj << /S /TOCI /C /Verzeichnis#202 /Pg 4 0 R /K [ 203 0 R 22 204 0 R 24 ] /P 725 0 R >> endobj 203 0 obj << /S /Underline /P 202 0 R /A 1084 0 R /Pg 4 0 R /K 21 >> endobj 204 0 obj << /S /Underline /P 202 0 R /A 1085 0 R /Pg 4 0 R /K 23 >> endobj 205 0 obj << /S /TOCI /C /Verzeichnis#202 /Pg 4 0 R /K [ 206 0 R 26 207 0 R 28 ] /P 725 0 R >> endobj 206 0 obj << /S /Underline /P 205 0 R /A 1086 0 R /Pg 4 0 R /K 25 >> endobj 207 0 obj << /S /Underline /P 205 0 R /A 1087 0 R /Pg 4 0 R /K 27 >> endobj 208 0 obj << /S /TOCI /C /Verzeichnis#202 /Pg 4 0 R /K [ 209 0 R 30 210 0 R 32 ] /P 725 0 R >> endobj 209 0 obj << /S /Underline /P 208 0 R /A 1088 0 R /Pg 4 0 R /K 29 >> endobj 210 0 obj << /S /Underline /P 208 0 R /A 1089 0 R /Pg 4 0 R /K 31 >> endobj 211 0 obj << /S /TOCI /C /Verzeichnis#202 /Pg 4 0 R /K [ 212 0 R 34 213 0 R 36 ] /P 725 0 R >> endobj 212 0 obj << /S /Underline /P 211 0 R /A 1090 0 R /Pg 4 0 R /K 33 >> endobj 213 0 obj << /S /Underline /P 211 0 R /A 1091 0 R /Pg 4 0 R /K 35 >> endobj 214 0 obj << /S /TOCI /C /Verzeichnis#201 /Pg 4 0 R /K [ 215 0 R 38 216 0 R 40 ] /P 725 0 R >> endobj 215 0 obj << /S /Underline /P 214 0 R /A 1092 0 R /Pg 4 0 R /K 37 >> endobj 216 0 obj << /S /Underline /P 214 0 R /A 1093 0 R /Pg 4 0 R /K 39 >> endobj 217 0 obj << /S /TOCI /C /Verzeichnis#201 /Pg 4 0 R /K [ 218 0 R 42 219 0 R 44 ] /P 725 0 R >> endobj 218 0 obj << /S /Underline /P 217 0 R /A 1094 0 R /Pg 4 0 R /K 41 >> endobj 219 0 obj << /S /Underline /P 217 0 R /A 1095 0 R /Pg 4 0 R /K 43 >> endobj 220 0 obj << /S /TOCI /C /Verzeichnis#201 /Pg 4 0 R /K [ 221 0 R 46 222 0 R 48 ] /P 725 0 R >> endobj 221 0 obj << /S /Underline /P 220 0 R /A 1096 0 R /Pg 4 0 R /K 45 >> endobj 222 0 obj << /S /Underline /P 220 0 R /A 1097 0 R /Pg 4 0 R /K 47 >> endobj 223 0 obj << /S /TOCI /C /Verzeichnis#201 /Pg 4 0 R /K [ 224 0 R 50 225 0 R 52 ] /P 725 0 R >> endobj 224 0 obj << /S /Underline /P 223 0 R /A 1098 0 R /Pg 4 0 R /K 49 >> endobj 225 0 obj << /S /Underline /P 223 0 R /A 1099 0 R /Pg 4 0 R /K 51 >> endobj 226 0 obj << /S /TOCI /C /Verzeichnis#201 /Pg 4 0 R /K [ 227 0 R 54 228 0 R 56 ] /P 725 0 R >> endobj 227 0 obj << /S /Underline /P 226 0 R /A 1100 0 R /Pg 4 0 R /K 53 >> endobj 228 0 obj << /S /Underline /P 226 0 R /A 1101 0 R /Pg 4 0 R /K 55 >> endobj 229 0 obj << /S /TOCI /C /Verzeichnis#201 /Pg 4 0 R /K [ 230 0 R 58 231 0 R 60 ] /P 725 0 R >> endobj 230 0 obj << /S /Underline /P 229 0 R /A 1102 0 R /Pg 4 0 R /K 57 >> endobj 231 0 obj << /S /Underline /P 229 0 R /A 1103 0 R /Pg 4 0 R /K 59 >> endobj 232 0 obj << /S /TOCI /C /Textk#C3#B6rper /Pg 4 0 R /K 61 /P 725 0 R >> endobj 233 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 4 0 R /K 62 /P 723 0 R >> endobj 234 0 obj << /O /Layout /WritingMode /LrTb /StartIndent 42.55 /EndIndent 0 /TextAlign /Justify /SpaceBefore 5.64999 /SpaceAfter 5.95 /TextIndent 0 >> endobj 235 0 obj << /S /LBody /C /#C3#9Cberschrift#201 /Pg 41 0 R /K 0 /P 1013 0 R >> endobj 236 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 41 0 R /K 1 /P 724 0 R >> endobj 237 0 obj << /O /Layout /WritingMode /LrTb /StartIndent 42.55 /EndIndent 0 /TextAlign /Start /SpaceBefore 28.35001 /SpaceAfter 8.5 /TextIndent -42.54999 >> endobj 238 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 41 0 R /K 2 /P 724 0 R >> endobj 239 0 obj << /S /LBody /C /#C3#9Cberschrift#201 /Pg 44 0 R /K 0 /P 1015 0 R >> endobj 240 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 44 0 R /K 1 /P 724 0 R >> endobj 241 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 44 0 R /K 2 /P 724 0 R >> endobj 242 0 obj << /S /LBody /C /#C3#9Cberschrift#202 /Pg 44 0 R /K 3 /P 1017 0 R >> endobj 243 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 44 0 R /K 4 /P 724 0 R >> endobj 244 0 obj << /O /Layout /WritingMode /LrTb /StartIndent 42.55 /EndIndent 0 /TextAlign /Start /SpaceBefore 34 /SpaceAfter 14.14999 /TextIndent -42.54999 >> endobj 245 0 obj << /S /Program#20Text /A [ 246 0 R ] /C /Program#20Text /Pg 44 0 R /K 5 /P 724 0 R >> endobj 246 0 obj << /O /Layout /StartIndent 56.60001 >> endobj 247 0 obj << /O /Layout /WritingMode /LrTb /StartIndent 42.55 /EndIndent 0 /TextAlign /Start /SpaceBefore 0 /SpaceAfter 0 /TextIndent 0 >> endobj 248 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 44 0 R /K 6 /P 724 0 R >> endobj 249 0 obj << /S /API#20Definition /C /API#20Definition /Pg 44 0 R /K 7 /P 724 0 R >> endobj 250 0 obj << /S /API#20Description /C /API#20Description /Pg 44 0 R /K 8 /P 724 0 R >> endobj 251 0 obj << /O /Layout /WritingMode /LrTb /StartIndent 56.75 /EndIndent 0 /TextAlign /Start /SpaceBefore 5.64999 /SpaceAfter 5.95 /TextIndent -14.19998 >> endobj 252 0 obj << /S /API#20Definition /C /API#20Definition /Pg 44 0 R /K 9 /P 724 0 R >> endobj 253 0 obj << /O /Layout /WritingMode /LrTb /StartIndent 56.7 /EndIndent 0 /TextAlign /Start /SpaceBefore 0 /SpaceAfter 5.95 /TextIndent 0 >> endobj 254 0 obj << /S /API#20Description /C /API#20Description /Pg 44 0 R /K 10 /P 724 0 R >> endobj 255 0 obj << /S /API#20Definition /C /API#20Definition /Pg 44 0 R /K 11 /P 724 0 R >> endobj 256 0 obj << /S /API#20Description /C /API#20Description /Pg 44 0 R /K 12 /P 724 0 R >> endobj 257 0 obj << /S /API#20Definition /C /API#20Definition /Pg 44 0 R /K 13 /P 724 0 R >> endobj 258 0 obj << /S /API#20Description /C /API#20Description /Pg 44 0 R /K 14 /P 724 0 R >> endobj 259 0 obj << /S /API#20Definition /C /API#20Definition /Pg 44 0 R /K 15 /P 724 0 R >> endobj 260 0 obj << /S /API#20Description /C /API#20Description /Pg 44 0 R /K 16 /P 724 0 R >> endobj 261 0 obj << /S /API#20Description /C /API#20Description /Pg 44 0 R /K 17 /P 724 0 R >> endobj 262 0 obj << /S /API#20Definition /C /API#20Definition /Pg 44 0 R /K 18 /P 724 0 R >> endobj 263 0 obj << /S /API#20Description /C /API#20Description /Pg 44 0 R /K 19 /P 724 0 R >> endobj 264 0 obj << /S /API#20Definition /C /API#20Definition /Pg 44 0 R /K 20 /P 724 0 R >> endobj 265 0 obj << /S /API#20Description /C /API#20Description /Pg 44 0 R /K 21 /P 724 0 R >> endobj 266 0 obj << /S /API#20Description /C /API#20Description /Pg 47 0 R /K 0 /P 724 0 R >> endobj 267 0 obj << /S /API#20Definition /C /API#20Definition /Pg 47 0 R /K 1 /P 724 0 R >> endobj 268 0 obj << /S /API#20Description /C /API#20Description /Pg 47 0 R /K 2 /P 724 0 R >> endobj 269 0 obj << /S /API#20Definition /C /API#20Definition /Pg 47 0 R /K 3 /P 724 0 R >> endobj 270 0 obj << /S /API#20Description /C /API#20Description /Pg 47 0 R /K 4 /P 724 0 R >> endobj 271 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 47 0 R /K 5 /P 724 0 R >> endobj 272 0 obj << /S /LBody /C /#C3#9Cberschrift#202 /Pg 47 0 R /K 6 /P 1019 0 R >> endobj 273 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 47 0 R /K 7 /P 724 0 R >> endobj 274 0 obj << /S /Tabellen#20#C3#9Cberschrift /C /Tabellen#20#C3#9Cberschrift /Pg 47 0 R /K 8 /P 728 0 R >> endobj 275 0 obj << /S /Tabellen#20#C3#9Cberschrift /C /Tabellen#20#C3#9Cberschrift /Pg 47 0 R /K 9 /P 731 0 R >> endobj 276 0 obj << /O /Layout /WritingMode /LrTb /StartIndent 0 /EndIndent 0 /TextAlign /Start /SpaceBefore 5 /SpaceAfter 5.64999 /TextIndent 0 >> endobj 277 0 obj << /S /Tabellen#20#C3#9Cberschrift /C /Tabellen#20#C3#9Cberschrift /Pg 47 0 R /K 10 /P 734 0 R >> endobj 278 0 obj << /S /Tabellen#20#C3#9Cberschrift /C /Tabellen#20#C3#9Cberschrift /Pg 47 0 R /K 11 /P 737 0 R >> endobj 279 0 obj << /S /Tabellen#20#C3#9Cberschrift /C /Tabellen#20#C3#9Cberschrift /Pg 47 0 R /K 12 /P 740 0 R >> endobj 280 0 obj << /S /Tabellen#20#C3#9Cberschrift /C /Tabellen#20#C3#9Cberschrift /Pg 47 0 R /K 13 /P 743 0 R >> endobj 281 0 obj << /S /Tabellen#20Inhalt /A [ 282 0 R ] /C /Tabellen#20Inhalt /Pg 47 0 R /K 14 /P 747 0 R >> endobj 282 0 obj << /O /Layout /TextAlign /Start >> endobj 283 0 obj << /O /Layout /WritingMode /LrTb /StartIndent 0 /EndIndent 0 /TextAlign /Justify /SpaceBefore 5 /SpaceAfter 5.64999 /TextIndent 0 >> endobj 284 0 obj << /S /Tabellen#20Inhalt /A [ 285 0 R ] /C /Tabellen#20Inhalt /Pg 47 0 R /K 15 /P 750 0 R >> endobj 285 0 obj << /O /Layout /TextAlign /Start >> endobj 286 0 obj << /S /Tabellen#20Inhalt /A [ 287 0 R ] /C /Tabellen#20Inhalt /Pg 47 0 R /K 16 /P 753 0 R >> endobj 287 0 obj << /O /Layout /TextAlign /Start >> endobj 288 0 obj << /S /Tabellen#20Inhalt /A [ 289 0 R ] /C /Tabellen#20Inhalt /Pg 47 0 R /K 17 /P 756 0 R >> endobj 289 0 obj << /O /Layout /TextAlign /Start >> endobj 290 0 obj << /S /Tabellen#20Inhalt /A [ 291 0 R ] /C /Tabellen#20Inhalt /Pg 47 0 R /K 18 /P 759 0 R >> endobj 291 0 obj << /O /Layout /TextAlign /Start >> endobj 292 0 obj << /S /Tabellen#20Inhalt /A [ 293 0 R ] /C /Tabellen#20Inhalt /Pg 47 0 R /K 19 /P 762 0 R >> endobj 293 0 obj << /O /Layout /TextAlign /Start >> endobj 294 0 obj << /S /Tabellen#20Inhalt /A [ 295 0 R ] /C /Tabellen#20Inhalt /Pg 47 0 R /K 20 /P 766 0 R >> endobj 295 0 obj << /O /Layout /TextAlign /Start >> endobj 296 0 obj << /S /Tabellen#20Inhalt /A [ 297 0 R ] /C /Tabellen#20Inhalt /Pg 47 0 R /K 21 /P 769 0 R >> endobj 297 0 obj << /O /Layout /TextAlign /Start >> endobj 298 0 obj << /S /Tabellen#20Inhalt /A [ 299 0 R ] /C /Tabellen#20Inhalt /Pg 47 0 R /K 22 /P 772 0 R >> endobj 299 0 obj << /O /Layout /TextAlign /Start >> endobj 300 0 obj << /S /Tabellen#20Inhalt /A [ 301 0 R ] /C /Tabellen#20Inhalt /Pg 47 0 R /K 23 /P 775 0 R >> endobj 301 0 obj << /O /Layout /TextAlign /Start >> endobj 302 0 obj << /S /Tabellen#20Inhalt /A [ 303 0 R ] /C /Tabellen#20Inhalt /Pg 47 0 R /K 24 /P 778 0 R >> endobj 303 0 obj << /O /Layout /TextAlign /Start >> endobj 304 0 obj << /S /Tabellen#20Inhalt /A [ 305 0 R ] /C /Tabellen#20Inhalt /Pg 47 0 R /K 25 /P 781 0 R >> endobj 305 0 obj << /O /Layout /TextAlign /Start >> endobj 306 0 obj << /S /Tabellen#20Inhalt /A [ 307 0 R ] /C /Tabellen#20Inhalt /Pg 47 0 R /K 26 /P 785 0 R >> endobj 307 0 obj << /O /Layout /TextAlign /Start >> endobj 308 0 obj << /S /Tabellen#20Inhalt /A [ 309 0 R ] /C /Tabellen#20Inhalt /Pg 47 0 R /K 27 /P 788 0 R >> endobj 309 0 obj << /O /Layout /TextAlign /Start >> endobj 310 0 obj << /S /Tabellen#20Inhalt /A [ 311 0 R ] /C /Tabellen#20Inhalt /Pg 47 0 R /K 28 /P 791 0 R >> endobj 311 0 obj << /O /Layout /TextAlign /Start >> endobj 312 0 obj << /S /Tabellen#20Inhalt /A [ 313 0 R ] /C /Tabellen#20Inhalt /Pg 47 0 R /K 29 /P 794 0 R >> endobj 313 0 obj << /O /Layout /TextAlign /Start >> endobj 314 0 obj << /S /Tabellen#20Inhalt /A [ 315 0 R ] /C /Tabellen#20Inhalt /Pg 47 0 R /K 30 /P 797 0 R >> endobj 315 0 obj << /O /Layout /TextAlign /Start >> endobj 316 0 obj << /S /Tabellen#20Inhalt /A [ 317 0 R ] /C /Tabellen#20Inhalt /Pg 47 0 R /K 31 /P 800 0 R >> endobj 317 0 obj << /O /Layout /TextAlign /Start >> endobj 318 0 obj << /S /Tabellen#20Inhalt /A [ 319 0 R ] /C /Tabellen#20Inhalt /Pg 47 0 R /K 32 /P 804 0 R >> endobj 319 0 obj << /O /Layout /TextAlign /Start >> endobj 320 0 obj << /S /Tabellen#20Inhalt /A [ 321 0 R ] /C /Tabellen#20Inhalt /Pg 47 0 R /K 33 /P 807 0 R >> endobj 321 0 obj << /O /Layout /TextAlign /Start >> endobj 322 0 obj << /S /Tabellen#20Inhalt /A [ 323 0 R ] /C /Tabellen#20Inhalt /Pg 47 0 R /K 34 /P 810 0 R >> endobj 323 0 obj << /O /Layout /TextAlign /Start >> endobj 324 0 obj << /S /Tabellen#20Inhalt /A [ 325 0 R ] /C /Tabellen#20Inhalt /Pg 47 0 R /K 35 /P 813 0 R >> endobj 325 0 obj << /O /Layout /TextAlign /Start >> endobj 326 0 obj << /S /Tabellen#20Inhalt /A [ 327 0 R ] /C /Tabellen#20Inhalt /Pg 47 0 R /K 36 /P 816 0 R >> endobj 327 0 obj << /O /Layout /TextAlign /Start >> endobj 328 0 obj << /S /Tabellen#20Inhalt /A [ 329 0 R ] /C /Tabellen#20Inhalt /Pg 47 0 R /K 37 /P 819 0 R >> endobj 329 0 obj << /O /Layout /TextAlign /Start >> endobj 330 0 obj << /S /Tabellen#20Inhalt /A [ 331 0 R ] /C /Tabellen#20Inhalt /Pg 47 0 R /K 38 /P 823 0 R >> endobj 331 0 obj << /O /Layout /TextAlign /Start >> endobj 332 0 obj << /S /Tabellen#20Inhalt /A [ 333 0 R ] /C /Tabellen#20Inhalt /Pg 47 0 R /K 39 /P 826 0 R >> endobj 333 0 obj << /O /Layout /TextAlign /Start >> endobj 334 0 obj << /S /Tabellen#20Inhalt /A [ 335 0 R ] /C /Tabellen#20Inhalt /Pg 47 0 R /K 40 /P 829 0 R >> endobj 335 0 obj << /O /Layout /TextAlign /Start >> endobj 336 0 obj << /S /Tabellen#20Inhalt /A [ 337 0 R ] /C /Tabellen#20Inhalt /Pg 47 0 R /K 41 /P 832 0 R >> endobj 337 0 obj << /O /Layout /TextAlign /Start >> endobj 338 0 obj << /S /Tabellen#20Inhalt /A [ 339 0 R ] /C /Tabellen#20Inhalt /Pg 47 0 R /K 42 /P 835 0 R >> endobj 339 0 obj << /O /Layout /TextAlign /Start >> endobj 340 0 obj << /S /Tabellen#20Inhalt /A [ 341 0 R ] /C /Tabellen#20Inhalt /Pg 47 0 R /K 43 /P 838 0 R >> endobj 341 0 obj << /O /Layout /TextAlign /Start >> endobj 342 0 obj << /S /Tabellen#20Inhalt /A [ 343 0 R ] /C /Tabellen#20Inhalt /Pg 47 0 R /K 44 /P 842 0 R >> endobj 343 0 obj << /O /Layout /TextAlign /Start >> endobj 344 0 obj << /S /Tabellen#20Inhalt /A [ 345 0 R ] /C /Tabellen#20Inhalt /Pg 47 0 R /K 45 /P 845 0 R >> endobj 345 0 obj << /O /Layout /TextAlign /Start >> endobj 346 0 obj << /S /Tabellen#20Inhalt /A [ 347 0 R ] /C /Tabellen#20Inhalt /Pg 47 0 R /K 46 /P 848 0 R >> endobj 347 0 obj << /O /Layout /TextAlign /Start >> endobj 348 0 obj << /S /Tabellen#20Inhalt /A [ 349 0 R ] /C /Tabellen#20Inhalt /Pg 47 0 R /K 47 /P 851 0 R >> endobj 349 0 obj << /O /Layout /TextAlign /Start >> endobj 350 0 obj << /S /Tabellen#20Inhalt /A [ 351 0 R ] /C /Tabellen#20Inhalt /Pg 47 0 R /K 48 /P 854 0 R >> endobj 351 0 obj << /O /Layout /TextAlign /Start >> endobj 352 0 obj << /S /Tabellen#20Inhalt /A [ 353 0 R ] /C /Tabellen#20Inhalt /Pg 47 0 R /K 49 /P 857 0 R >> endobj 353 0 obj << /O /Layout /TextAlign /Start >> endobj 354 0 obj << /S /Tabellen#20Inhalt /A [ 355 0 R ] /C /Tabellen#20Inhalt /Pg 47 0 R /K 50 /P 861 0 R >> endobj 355 0 obj << /O /Layout /TextAlign /Start >> endobj 356 0 obj << /S /Tabellen#20Inhalt /A [ 357 0 R ] /C /Tabellen#20Inhalt /Pg 47 0 R /K 51 /P 864 0 R >> endobj 357 0 obj << /O /Layout /TextAlign /Start >> endobj 358 0 obj << /S /Tabellen#20Inhalt /A [ 359 0 R ] /C /Tabellen#20Inhalt /Pg 47 0 R /K 52 /P 867 0 R >> endobj 359 0 obj << /O /Layout /TextAlign /Start >> endobj 360 0 obj << /S /Tabellen#20Inhalt /A [ 361 0 R ] /C /Tabellen#20Inhalt /Pg 47 0 R /K 53 /P 870 0 R >> endobj 361 0 obj << /O /Layout /TextAlign /Start >> endobj 362 0 obj << /S /Tabellen#20Inhalt /A [ 363 0 R ] /C /Tabellen#20Inhalt /Pg 47 0 R /K 54 /P 873 0 R >> endobj 363 0 obj << /O /Layout /TextAlign /Start >> endobj 364 0 obj << /S /Tabellen#20Inhalt /A [ 365 0 R ] /C /Tabellen#20Inhalt /Pg 47 0 R /K 55 /P 876 0 R >> endobj 365 0 obj << /O /Layout /TextAlign /Start >> endobj 366 0 obj << /S /Tabellen#20Inhalt /A [ 367 0 R ] /C /Tabellen#20Inhalt /Pg 47 0 R /K 56 /P 880 0 R >> endobj 367 0 obj << /O /Layout /TextAlign /Start >> endobj 368 0 obj << /S /Tabellen#20Inhalt /A [ 369 0 R ] /C /Tabellen#20Inhalt /Pg 47 0 R /K 57 /P 883 0 R >> endobj 369 0 obj << /O /Layout /TextAlign /Start >> endobj 370 0 obj << /S /Tabellen#20Inhalt /A [ 371 0 R ] /C /Tabellen#20Inhalt /Pg 47 0 R /K 58 /P 886 0 R >> endobj 371 0 obj << /O /Layout /TextAlign /Start >> endobj 372 0 obj << /S /Tabellen#20Inhalt /A [ 373 0 R ] /C /Tabellen#20Inhalt /Pg 47 0 R /K 59 /P 889 0 R >> endobj 373 0 obj << /O /Layout /TextAlign /Start >> endobj 374 0 obj << /S /Tabellen#20Inhalt /A [ 375 0 R ] /C /Tabellen#20Inhalt /Pg 47 0 R /K 60 /P 892 0 R >> endobj 375 0 obj << /O /Layout /TextAlign /Start >> endobj 376 0 obj << /S /Tabellen#20Inhalt /A [ 377 0 R ] /C /Tabellen#20Inhalt /Pg 47 0 R /K 61 /P 895 0 R >> endobj 377 0 obj << /O /Layout /TextAlign /Start >> endobj 378 0 obj << /S /Tabellen#20Inhalt /A [ 379 0 R ] /C /Tabellen#20Inhalt /Pg 47 0 R /K 62 /P 899 0 R >> endobj 379 0 obj << /O /Layout /TextAlign /Start >> endobj 380 0 obj << /S /Tabellen#20Inhalt /A [ 381 0 R ] /C /Tabellen#20Inhalt /Pg 47 0 R /K 63 /P 902 0 R >> endobj 381 0 obj << /O /Layout /TextAlign /Start >> endobj 382 0 obj << /S /Tabellen#20Inhalt /A [ 383 0 R ] /C /Tabellen#20Inhalt /Pg 47 0 R /K 64 /P 905 0 R >> endobj 383 0 obj << /O /Layout /TextAlign /Start >> endobj 384 0 obj << /S /Tabellen#20Inhalt /A [ 385 0 R ] /C /Tabellen#20Inhalt /Pg 47 0 R /K 65 /P 908 0 R >> endobj 385 0 obj << /O /Layout /TextAlign /Start >> endobj 386 0 obj << /S /Tabellen#20Inhalt /A [ 387 0 R ] /C /Tabellen#20Inhalt /Pg 47 0 R /K 66 /P 911 0 R >> endobj 387 0 obj << /O /Layout /TextAlign /Start >> endobj 388 0 obj << /S /Tabellen#20Inhalt /A [ 389 0 R ] /C /Tabellen#20Inhalt /Pg 47 0 R /K 67 /P 914 0 R >> endobj 389 0 obj << /O /Layout /TextAlign /Start >> endobj 390 0 obj << /S /Tabellen#20Inhalt /A [ 391 0 R ] /C /Tabellen#20Inhalt /Pg 50 0 R /K 0 /P 918 0 R >> endobj 391 0 obj << /O /Layout /TextAlign /Start >> endobj 392 0 obj << /S /Tabellen#20Inhalt /A [ 393 0 R ] /C /Tabellen#20Inhalt /Pg 50 0 R /K 1 /P 921 0 R >> endobj 393 0 obj << /O /Layout /TextAlign /Start >> endobj 394 0 obj << /S /Tabellen#20Inhalt /A [ 395 0 R ] /C /Tabellen#20Inhalt /Pg 50 0 R /K 2 /P 924 0 R >> endobj 395 0 obj << /O /Layout /TextAlign /Start >> endobj 396 0 obj << /S /Tabellen#20Inhalt /A [ 397 0 R ] /C /Tabellen#20Inhalt /Pg 50 0 R /K 3 /P 927 0 R >> endobj 397 0 obj << /O /Layout /TextAlign /Start >> endobj 398 0 obj << /S /Tabellen#20Inhalt /A [ 399 0 R ] /C /Tabellen#20Inhalt /Pg 50 0 R /K 4 /P 930 0 R >> endobj 399 0 obj << /O /Layout /TextAlign /Start >> endobj 400 0 obj << /S /Tabellen#20Inhalt /A [ 401 0 R ] /C /Tabellen#20Inhalt /Pg 50 0 R /K 5 /P 933 0 R >> endobj 401 0 obj << /O /Layout /TextAlign /Start >> endobj 402 0 obj << /S /Tabellen#20Inhalt /A [ 403 0 R ] /C /Tabellen#20Inhalt /Pg 50 0 R /K 6 /P 937 0 R >> endobj 403 0 obj << /O /Layout /TextAlign /Start >> endobj 404 0 obj << /S /Tabellen#20Inhalt /A [ 405 0 R ] /C /Tabellen#20Inhalt /Pg 50 0 R /K 7 /P 940 0 R >> endobj 405 0 obj << /O /Layout /TextAlign /Start >> endobj 406 0 obj << /S /Tabellen#20Inhalt /A [ 407 0 R ] /C /Tabellen#20Inhalt /Pg 50 0 R /K 8 /P 943 0 R >> endobj 407 0 obj << /O /Layout /TextAlign /Start >> endobj 408 0 obj << /S /Tabellen#20Inhalt /A [ 409 0 R ] /C /Tabellen#20Inhalt /Pg 50 0 R /K 9 /P 946 0 R >> endobj 409 0 obj << /O /Layout /TextAlign /Start >> endobj 410 0 obj << /S /Tabellen#20Inhalt /A [ 411 0 R ] /C /Tabellen#20Inhalt /Pg 50 0 R /K 10 /P 949 0 R >> endobj 411 0 obj << /O /Layout /TextAlign /Start >> endobj 412 0 obj << /S /Tabellen#20Inhalt /A [ 413 0 R ] /C /Tabellen#20Inhalt /Pg 50 0 R /K 11 /P 952 0 R >> endobj 413 0 obj << /O /Layout /TextAlign /Start >> endobj 414 0 obj << /S /Tabellen#20Inhalt /A [ 415 0 R ] /C /Tabellen#20Inhalt /Pg 50 0 R /K 12 /P 956 0 R >> endobj 415 0 obj << /O /Layout /TextAlign /Start >> endobj 416 0 obj << /S /Tabellen#20Inhalt /A [ 417 0 R ] /C /Tabellen#20Inhalt /Pg 50 0 R /K 13 /P 959 0 R >> endobj 417 0 obj << /O /Layout /TextAlign /Start >> endobj 418 0 obj << /S /Tabellen#20Inhalt /A [ 419 0 R ] /C /Tabellen#20Inhalt /Pg 50 0 R /K 14 /P 962 0 R >> endobj 419 0 obj << /O /Layout /TextAlign /Start >> endobj 420 0 obj << /S /Tabellen#20Inhalt /A [ 421 0 R ] /C /Tabellen#20Inhalt /Pg 50 0 R /K 15 /P 965 0 R >> endobj 421 0 obj << /O /Layout /TextAlign /Start >> endobj 422 0 obj << /S /Tabellen#20Inhalt /A [ 423 0 R ] /C /Tabellen#20Inhalt /Pg 50 0 R /K 16 /P 968 0 R >> endobj 423 0 obj << /O /Layout /TextAlign /Start >> endobj 424 0 obj << /S /Tabellen#20Inhalt /A [ 425 0 R ] /C /Tabellen#20Inhalt /Pg 50 0 R /K 17 /P 971 0 R >> endobj 425 0 obj << /O /Layout /TextAlign /Start >> endobj 426 0 obj << /S /Tabellen#20Inhalt /A [ 427 0 R ] /C /Tabellen#20Inhalt /Pg 50 0 R /K 18 /P 975 0 R >> endobj 427 0 obj << /O /Layout /TextAlign /Start >> endobj 428 0 obj << /S /Tabellen#20Inhalt /A [ 429 0 R ] /C /Tabellen#20Inhalt /Pg 50 0 R /K 19 /P 978 0 R >> endobj 429 0 obj << /O /Layout /TextAlign /Start >> endobj 430 0 obj << /S /Tabellen#20Inhalt /A [ 431 0 R ] /C /Tabellen#20Inhalt /Pg 50 0 R /K 20 /P 981 0 R >> endobj 431 0 obj << /O /Layout /TextAlign /Start >> endobj 432 0 obj << /S /Tabellen#20Inhalt /A [ 433 0 R ] /C /Tabellen#20Inhalt /Pg 50 0 R /K 21 /P 984 0 R >> endobj 433 0 obj << /O /Layout /TextAlign /Start >> endobj 434 0 obj << /S /Tabellen#20Inhalt /A [ 435 0 R ] /C /Tabellen#20Inhalt /Pg 50 0 R /K 22 /P 987 0 R >> endobj 435 0 obj << /O /Layout /TextAlign /Start >> endobj 436 0 obj << /S /Tabellen#20Inhalt /A [ 437 0 R ] /C /Tabellen#20Inhalt /Pg 50 0 R /K 23 /P 990 0 R >> endobj 437 0 obj << /O /Layout /TextAlign /Start >> endobj 438 0 obj << /S /Tabellen#20Inhalt /A [ 439 0 R ] /C /Tabellen#20Inhalt /Pg 50 0 R /K 24 /P 994 0 R >> endobj 439 0 obj << /O /Layout /TextAlign /Start >> endobj 440 0 obj << /S /Tabellen#20Inhalt /A [ 441 0 R ] /C /Tabellen#20Inhalt /Pg 50 0 R /K 25 /P 997 0 R >> endobj 441 0 obj << /O /Layout /TextAlign /Start >> endobj 442 0 obj << /S /Tabellen#20Inhalt /A [ 443 0 R ] /C /Tabellen#20Inhalt /Pg 50 0 R /K 26 /P 1000 0 R >> endobj 443 0 obj << /O /Layout /TextAlign /Start >> endobj 444 0 obj << /S /Tabellen#20Inhalt /A [ 445 0 R ] /C /Tabellen#20Inhalt /Pg 50 0 R /K 27 /P 1003 0 R >> endobj 445 0 obj << /O /Layout /TextAlign /Start >> endobj 446 0 obj << /S /Tabellen#20Inhalt /A [ 447 0 R ] /C /Tabellen#20Inhalt /Pg 50 0 R /K 28 /P 1006 0 R >> endobj 447 0 obj << /O /Layout /TextAlign /Start >> endobj 448 0 obj << /S /Tabellen#20Inhalt /A [ 449 0 R ] /C /Tabellen#20Inhalt /Pg 50 0 R /K 29 /P 1009 0 R >> endobj 449 0 obj << /O /Layout /TextAlign /Start >> endobj 450 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 50 0 R /K 30 /P 724 0 R >> endobj 451 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 50 0 R /K 31 /P 724 0 R >> endobj 452 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 50 0 R /K 32 /P 724 0 R >> endobj 453 0 obj << /S /LBody /C /#C3#9Cberschrift#202 /Pg 50 0 R /K 33 /P 1021 0 R >> endobj 454 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 50 0 R /K 34 /P 724 0 R >> endobj 455 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 50 0 R /K 35 /P 724 0 R >> endobj 456 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 50 0 R /K [ 36 457 0 R 38 ] /P 724 0 R >> endobj 457 0 obj << /S /Superscript /P 456 0 R /A 1108 0 R /Pg 50 0 R /K 37 >> endobj 458 0 obj << /S /Beispiel#20#C3#9Cberschrift /C /Beispiel#20#C3#9Cberschrift /K 459 0 R /P 724 0 R >> endobj 459 0 obj << /S /Underline /P 458 0 R /A 1109 0 R /Pg 54 0 R /K 0 >> endobj 460 0 obj << /O /Layout /WritingMode /LrTb /StartIndent 42.55 /EndIndent 0 /TextAlign /Justify /SpaceBefore 5.64999 /SpaceAfter 5.95 /TextIndent 0 >> endobj 461 0 obj << /S /Beispiel#20#C3#9Cberschrift /C /Beispiel#20#C3#9Cberschrift /K 462 0 R /P 724 0 R >> endobj 462 0 obj << /S /Underline /P 461 0 R /A 1111 0 R /Pg 54 0 R /K [ 1 2 ] >> endobj 463 0 obj << /S /Program#20Text /C /Program#20Text /Pg 54 0 R /K 3 /P 724 0 R >> endobj 464 0 obj << /S /Program#20Text /C /Program#20Text /Pg 54 0 R /K 4 /P 724 0 R >> endobj 465 0 obj << /S /Program#20Text /C /Program#20Text /Pg 54 0 R /K 5 /P 724 0 R >> endobj 466 0 obj << /S /Program#20Text /C /Program#20Text /Pg 54 0 R /K 6 /P 724 0 R >> endobj 467 0 obj << /S /Program#20Text /C /Program#20Text /Pg 54 0 R /K 7 /P 724 0 R >> endobj 468 0 obj << /S /Program#20Text /C /Program#20Text /Pg 54 0 R /K 8 /P 724 0 R >> endobj 469 0 obj << /S /Program#20Text /C /Program#20Text /Pg 54 0 R /K 9 /P 724 0 R >> endobj 470 0 obj << /S /Program#20Text /C /Program#20Text /Pg 54 0 R /K 10 /P 724 0 R >> endobj 471 0 obj << /S /Program#20Text /C /Program#20Text /Pg 54 0 R /K 11 /P 724 0 R >> endobj 472 0 obj << /S /Program#20Text /C /Program#20Text /Pg 54 0 R /K 12 /P 724 0 R >> endobj 473 0 obj << /S /Program#20Text /C /Program#20Text /Pg 54 0 R /K 13 /P 724 0 R >> endobj 474 0 obj << /S /Program#20Text /C /Program#20Text /Pg 54 0 R /K 14 /P 724 0 R >> endobj 475 0 obj << /S /Program#20Text /C /Program#20Text /Pg 54 0 R /K 15 /P 724 0 R >> endobj 476 0 obj << /S /Program#20Text /C /Program#20Text /Pg 54 0 R /K 16 /P 724 0 R >> endobj 477 0 obj << /S /Program#20Text /C /Program#20Text /Pg 54 0 R /K 17 /P 724 0 R >> endobj 478 0 obj << /S /Program#20Text /C /Program#20Text /Pg 54 0 R /K 18 /P 724 0 R >> endobj 479 0 obj << /S /Program#20Text /C /Program#20Text /Pg 54 0 R /K 19 /P 724 0 R >> endobj 480 0 obj << /S /Program#20Text /C /Program#20Text /Pg 54 0 R /K 20 /P 724 0 R >> endobj 481 0 obj << /S /Program#20Text /C /Program#20Text /Pg 54 0 R /K 21 /P 724 0 R >> endobj 482 0 obj << /S /Program#20Text /C /Program#20Text /Pg 54 0 R /K 22 /P 724 0 R >> endobj 483 0 obj << /S /Program#20Text /C /Program#20Text /Pg 54 0 R /K 23 /P 724 0 R >> endobj 484 0 obj << /S /Program#20Text /C /Program#20Text /Pg 54 0 R /K 24 /P 724 0 R >> endobj 485 0 obj << /S /Program#20Text /C /Program#20Text /Pg 54 0 R /K 25 /P 724 0 R >> endobj 486 0 obj << /S /LBody /C /#C3#9Cberschrift#202 /Pg 54 0 R /K 26 /P 1023 0 R >> endobj 487 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 54 0 R /K 27 /P 724 0 R >> endobj 488 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 54 0 R /K 28 /P 724 0 R >> endobj 489 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 54 0 R /K 29 /P 724 0 R >> endobj 490 0 obj << /S /Program#20Text /C /Program#20Text /Pg 54 0 R /K 30 /P 724 0 R >> endobj 491 0 obj << /S /Program#20Text /C /Program#20Text /Pg 54 0 R /K 31 /P 724 0 R >> endobj 492 0 obj << /S /Program#20Text /C /Program#20Text /Pg 54 0 R /K 32 /P 724 0 R >> endobj 493 0 obj << /S /Program#20Text /C /Program#20Text /Pg 54 0 R /K 33 /P 724 0 R >> endobj 494 0 obj << /S /Program#20Text /C /Program#20Text /Pg 54 0 R /K 34 /P 724 0 R >> endobj 495 0 obj << /S /Program#20Text /C /Program#20Text /Pg 54 0 R /K 35 /P 724 0 R >> endobj 496 0 obj << /S /Program#20Text /C /Program#20Text /Pg 54 0 R /K 36 /P 724 0 R >> endobj 497 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 57 0 R /K [ 0 498 0 R 2 ] /P 724 0 R >> endobj 498 0 obj << /S /Superscript /P 497 0 R /A 1113 0 R /Pg 57 0 R /K 1 >> endobj 499 0 obj << /S /Program#20Text /C /Program#20Text /Pg 57 0 R /K 3 /P 724 0 R >> endobj 500 0 obj << /S /Program#20Text /C /Program#20Text /Pg 57 0 R /K 4 /P 724 0 R >> endobj 501 0 obj << /S /Program#20Text /C /Program#20Text /Pg 57 0 R /K 5 /P 724 0 R >> endobj 502 0 obj << /S /Program#20Text /C /Program#20Text /Pg 57 0 R /K 6 /P 724 0 R >> endobj 503 0 obj << /S /LBody /C /#C3#9Cberschrift#202 /Pg 57 0 R /K 7 /P 1025 0 R >> endobj 504 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 57 0 R /K 8 /P 724 0 R >> endobj 505 0 obj << /S /API#20Function /C /API#20Function /Pg 57 0 R /K 9 /P 724 0 R >> endobj 506 0 obj << /S /API#20Description /C /API#20Description /Pg 57 0 R /K 10 /P 724 0 R >> endobj 507 0 obj << /O /Layout /WritingMode /LrTb /StartIndent 56.75 /EndIndent 0 /TextAlign /Start /SpaceBefore 5.64999 /SpaceAfter 5.95 /TextIndent -14.19998 >> endobj 508 0 obj << /S /API#20Function /C /API#20Function /Pg 57 0 R /K 11 /P 724 0 R >> endobj 509 0 obj << /S /API#20Description /C /API#20Description /Pg 57 0 R /K 12 /P 724 0 R >> endobj 510 0 obj << /S /API#20Function /C /API#20Function /Pg 57 0 R /K 13 /P 724 0 R >> endobj 511 0 obj << /S /API#20Description /C /API#20Description /Pg 57 0 R /K 14 /P 724 0 R >> endobj 512 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 57 0 R /K 15 /P 724 0 R >> endobj 513 0 obj << /S /Important#20Notice /C /Important#20Notice /Pg 57 0 R /K [ 16 17 18 ] /P 724 0 R >> endobj 514 0 obj << /S /LBody /C /#C3#9Cberschrift#202 /Pg 57 0 R /K 19 /P 1027 0 R >> endobj 515 0 obj << /O /Layout /WritingMode /LrTb /StartIndent 51.05 /EndIndent 0 /TextAlign /Justify /SpaceBefore 5.64999 /SpaceAfter 5.95 /TextIndent 0 >> endobj 516 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 57 0 R /K 20 /P 724 0 R >> endobj 517 0 obj << /S /API#20Attribute /C /API#20Attribute /Pg 57 0 R /K 21 /P 724 0 R >> endobj 518 0 obj << /S /API#20Description /C /API#20Description /Pg 57 0 R /K 22 /P 724 0 R >> endobj 519 0 obj << /O /Layout /WritingMode /LrTb /StartIndent 56.75 /EndIndent 0 /TextAlign /Start /SpaceBefore 5.64999 /SpaceAfter 5.95 /TextIndent -14.19998 >> endobj 520 0 obj << /S /API#20Attribute /C /API#20Attribute /Pg 61 0 R /K 0 /P 724 0 R >> endobj 521 0 obj << /S /API#20Description /C /API#20Description /Pg 61 0 R /K 1 /P 724 0 R >> endobj 522 0 obj << /S /API#20Attribute /C /API#20Attribute /Pg 61 0 R /K 2 /P 724 0 R >> endobj 523 0 obj << /S /API#20Description /C /API#20Description /Pg 61 0 R /K 3 /P 724 0 R >> endobj 524 0 obj << /S /API#20Description /C /API#20Description /Pg 61 0 R /K 4 /P 724 0 R >> endobj 525 0 obj << /S /API#20Attribute /C /API#20Attribute /Pg 61 0 R /K 5 /P 724 0 R >> endobj 526 0 obj << /S /API#20Description /C /API#20Description /Pg 61 0 R /K 6 /P 724 0 R >> endobj 527 0 obj << /S /API#20Attribute /C /API#20Attribute /Pg 61 0 R /K 7 /P 724 0 R >> endobj 528 0 obj << /S /API#20Description /C /API#20Description /Pg 61 0 R /K 8 /P 724 0 R >> endobj 529 0 obj << /S /API#20Attribute /C /API#20Attribute /Pg 61 0 R /K 9 /P 724 0 R >> endobj 530 0 obj << /S /API#20Description /C /API#20Description /Pg 61 0 R /K 10 /P 724 0 R >> endobj 531 0 obj << /S /API#20Attribute /C /API#20Attribute /Pg 61 0 R /K 11 /P 724 0 R >> endobj 532 0 obj << /S /API#20Description /C /API#20Description /Pg 61 0 R /K 12 /P 724 0 R >> endobj 533 0 obj << /S /API#20Attribute /C /API#20Attribute /Pg 61 0 R /K 13 /P 724 0 R >> endobj 534 0 obj << /S /API#20Description /C /API#20Description /Pg 61 0 R /K 14 /P 724 0 R >> endobj 535 0 obj << /S /API#20Attribute /C /API#20Attribute /Pg 61 0 R /K 15 /P 724 0 R >> endobj 536 0 obj << /S /API#20Description /C /API#20Description /Pg 61 0 R /K 16 /P 724 0 R >> endobj 537 0 obj << /S /API#20Attribute /C /API#20Attribute /Pg 61 0 R /K 17 /P 724 0 R >> endobj 538 0 obj << /S /API#20Description /C /API#20Description /Pg 61 0 R /K 18 /P 724 0 R >> endobj 539 0 obj << /S /API#20Attribute /C /API#20Attribute /Pg 61 0 R /K 19 /P 724 0 R >> endobj 540 0 obj << /S /API#20Description /C /API#20Description /Pg 61 0 R /K 20 /P 724 0 R >> endobj 541 0 obj << /S /API#20Attribute /C /API#20Attribute /Pg 64 0 R /K 0 /P 724 0 R >> endobj 542 0 obj << /S /API#20Description /C /API#20Description /Pg 64 0 R /K 1 /P 724 0 R >> endobj 543 0 obj << /S /API#20Attribute /C /API#20Attribute /Pg 64 0 R /K 2 /P 724 0 R >> endobj 544 0 obj << /S /API#20Description /C /API#20Description /Pg 64 0 R /K 3 /P 724 0 R >> endobj 545 0 obj << /S /API#20Attribute /C /API#20Attribute /Pg 64 0 R /K 4 /P 724 0 R >> endobj 546 0 obj << /S /API#20Description /C /API#20Description /Pg 64 0 R /K 5 /P 724 0 R >> endobj 547 0 obj << /S /API#20Attribute /C /API#20Attribute /Pg 64 0 R /K 6 /P 724 0 R >> endobj 548 0 obj << /S /API#20Description /C /API#20Description /Pg 64 0 R /K 7 /P 724 0 R >> endobj 549 0 obj << /S /API#20Attribute /C /API#20Attribute /Pg 64 0 R /K 8 /P 724 0 R >> endobj 550 0 obj << /S /API#20Description /C /API#20Description /Pg 64 0 R /K 9 /P 724 0 R >> endobj 551 0 obj << /S /API#20Attribute /C /API#20Attribute /Pg 64 0 R /K 10 /P 724 0 R >> endobj 552 0 obj << /S /API#20Description /C /API#20Description /Pg 64 0 R /K 11 /P 724 0 R >> endobj 553 0 obj << /S /LBody /C /#C3#9Cberschrift#202 /Pg 64 0 R /K 12 /P 1029 0 R >> endobj 554 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 64 0 R /K 13 /P 724 0 R >> endobj 555 0 obj << /S /API#20Method /C /API#20Method /Pg 64 0 R /K 14 /P 724 0 R >> endobj 556 0 obj << /S /API#20Description /C /API#20Description /Pg 64 0 R /K 15 /P 724 0 R >> endobj 557 0 obj << /O /Layout /WritingMode /LrTb /StartIndent 56.75 /EndIndent 0 /TextAlign /Start /SpaceBefore 5.64999 /SpaceAfter 5.95 /TextIndent -14.19998 >> endobj 558 0 obj << /S /API#20Description /C /API#20Description /Pg 64 0 R /K 16 /P 724 0 R >> endobj 559 0 obj << /S /API#20Method /C /API#20Method /Pg 64 0 R /K 17 /P 724 0 R >> endobj 560 0 obj << /S /API#20Description /C /API#20Description /Pg 64 0 R /K 18 /P 724 0 R >> endobj 561 0 obj << /S /API#20Description /C /API#20Description /Pg 64 0 R /K 19 /P 724 0 R >> endobj 562 0 obj << /S /API#20Description /C /API#20Description /Pg 64 0 R /K 20 /P 724 0 R >> endobj 563 0 obj << /S /API#20Method /C /API#20Method /Pg 64 0 R /K 21 /P 724 0 R >> endobj 564 0 obj << /S /API#20Description /C /API#20Description /Pg 64 0 R /K 22 /P 724 0 R >> endobj 565 0 obj << /S /API#20Method /C /API#20Method /Pg 67 0 R /K 0 /P 724 0 R >> endobj 566 0 obj << /S /API#20Description /C /API#20Description /Pg 67 0 R /K 1 /P 724 0 R >> endobj 567 0 obj << /S /API#20Method /C /API#20Method /Pg 67 0 R /K 2 /P 724 0 R >> endobj 568 0 obj << /S /API#20Description /C /API#20Description /Pg 67 0 R /K 3 /P 724 0 R >> endobj 569 0 obj << /S /API#20Description /C /API#20Description /Pg 67 0 R /K 4 /P 724 0 R >> endobj 570 0 obj << /S /API#20Method /C /API#20Method /Pg 67 0 R /K 5 /P 724 0 R >> endobj 571 0 obj << /S /API#20Description /C /API#20Description /Pg 67 0 R /K 6 /P 724 0 R >> endobj 572 0 obj << /S /API#20Description /C /API#20Description /Pg 67 0 R /K 7 /P 724 0 R >> endobj 573 0 obj << /S /API#20Method /C /API#20Method /Pg 67 0 R /K 8 /P 724 0 R >> endobj 574 0 obj << /S /API#20Description /C /API#20Description /Pg 67 0 R /K 9 /P 724 0 R >> endobj 575 0 obj << /S /API#20Description /C /API#20Description /Pg 67 0 R /K 10 /P 724 0 R >> endobj 576 0 obj << /S /API#20Method /C /API#20Method /Pg 67 0 R /K 11 /P 724 0 R >> endobj 577 0 obj << /S /API#20Description /C /API#20Description /Pg 67 0 R /K 12 /P 724 0 R >> endobj 578 0 obj << /S /API#20Description /C /API#20Description /Pg 67 0 R /K 13 /P 724 0 R >> endobj 579 0 obj << /S /API#20Description /C /API#20Description /Pg 67 0 R /K 14 /P 724 0 R >> endobj 580 0 obj << /S /API#20Description /C /API#20Description /Pg 67 0 R /K 15 /P 724 0 R >> endobj 581 0 obj << /S /API#20Description /C /API#20Description /Pg 67 0 R /K 16 /P 724 0 R >> endobj 582 0 obj << /S /API#20Method /C /API#20Method /Pg 67 0 R /K 17 /P 724 0 R >> endobj 583 0 obj << /S /API#20Description /C /API#20Description /Pg 67 0 R /K 18 /P 724 0 R >> endobj 584 0 obj << /S /API#20Description /C /API#20Description /Pg 67 0 R /K 19 /P 724 0 R >> endobj 585 0 obj << /S /API#20Description /C /API#20Description /Pg 67 0 R /K 20 /P 724 0 R >> endobj 586 0 obj << /S /LBody /C /#C3#9Cberschrift#201 /Pg 70 0 R /K 0 /P 1031 0 R >> endobj 587 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 70 0 R /K 1 /P 724 0 R >> endobj 588 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 70 0 R /K 2 /P 724 0 R >> endobj 589 0 obj << /S /API#20Function /C /API#20Function /Pg 70 0 R /K 3 /P 724 0 R >> endobj 590 0 obj << /S /API#20Description /C /API#20Description /Pg 70 0 R /K 4 /P 724 0 R >> endobj 591 0 obj << /S /API#20Description /C /API#20Description /Pg 70 0 R /K 5 /P 724 0 R >> endobj 592 0 obj << /S /API#20Description /C /API#20Description /Pg 70 0 R /K 6 /P 724 0 R >> endobj 593 0 obj << /S /LBody /A [ 594 0 R ] /C /API#20Description /Pg 70 0 R /K 7 /P 1033 0 R >> endobj 594 0 obj << /O /Layout /StartIndent 92.7 /TextIndent -17.99998 >> endobj 595 0 obj << /S /LBody /A [ 596 0 R ] /C /API#20Description /Pg 70 0 R /K 8 /P 1034 0 R >> endobj 596 0 obj << /O /Layout /StartIndent 92.7 /TextIndent -17.99998 >> endobj 597 0 obj << /S /LBody /A [ 598 0 R ] /C /API#20Description /Pg 70 0 R /K 9 /P 1035 0 R >> endobj 598 0 obj << /O /Layout /StartIndent 92.7 /TextIndent -17.99998 >> endobj 599 0 obj << /S /LBody /A [ 600 0 R ] /C /API#20Description /Pg 70 0 R /K 10 /P 1036 0 R >> endobj 600 0 obj << /O /Layout /StartIndent 92.7 /TextIndent -17.99998 >> endobj 601 0 obj << /S /API#20Function /C /API#20Function /Pg 70 0 R /K 11 /P 724 0 R >> endobj 602 0 obj << /S /API#20Description /C /API#20Description /Pg 70 0 R /K 12 /P 724 0 R >> endobj 603 0 obj << /S /API#20Function /C /API#20Function /Pg 70 0 R /K 13 /P 724 0 R >> endobj 604 0 obj << /S /API#20Description /C /API#20Description /Pg 70 0 R /K 14 /P 724 0 R >> endobj 605 0 obj << /S /API#20Description /C /API#20Description /Pg 70 0 R /K 15 /P 724 0 R >> endobj 606 0 obj << /S /API#20Description /C /API#20Description /Pg 70 0 R /K 16 /P 724 0 R >> endobj 607 0 obj << /S /API#20Function /C /API#20Function /Pg 70 0 R /K 17 /P 724 0 R >> endobj 608 0 obj << /S /API#20Description /C /API#20Description /Pg 70 0 R /K 18 /P 724 0 R >> endobj 609 0 obj << /S /API#20Description /C /API#20Description /Pg 70 0 R /K 19 /P 724 0 R >> endobj 610 0 obj << /S /API#20Description /C /API#20Description /Pg 70 0 R /K 20 /P 724 0 R >> endobj 611 0 obj << /S /API#20Function /C /API#20Function /Pg 70 0 R /K 21 /P 724 0 R >> endobj 612 0 obj << /S /API#20Description /C /API#20Description /Pg 70 0 R /K 22 /P 724 0 R >> endobj 613 0 obj << /S /API#20Function /C /API#20Function /Pg 70 0 R /K 23 /P 724 0 R >> endobj 614 0 obj << /S /API#20Description /C /API#20Description /Pg 70 0 R /K 24 /P 724 0 R >> endobj 615 0 obj << /S /API#20Description /C /API#20Description /Pg 73 0 R /K 0 /P 724 0 R >> endobj 616 0 obj << /S /API#20Description /C /API#20Description /Pg 73 0 R /K 1 /P 724 0 R >> endobj 617 0 obj << /S /API#20Function /C /API#20Function /Pg 73 0 R /K 2 /P 724 0 R >> endobj 618 0 obj << /S /API#20Description /C /API#20Description /Pg 73 0 R /K 3 /P 724 0 R >> endobj 619 0 obj << /S /API#20Function /C /API#20Function /Pg 73 0 R /K 4 /P 724 0 R >> endobj 620 0 obj << /S /API#20Description /C /API#20Description /Pg 73 0 R /K 5 /P 724 0 R >> endobj 621 0 obj << /S /API#20Function /C /API#20Function /Pg 73 0 R /K 6 /P 724 0 R >> endobj 622 0 obj << /S /API#20Description /C /API#20Description /Pg 73 0 R /K 7 /P 724 0 R >> endobj 623 0 obj << /S /API#20Function /C /API#20Function /Pg 73 0 R /K 8 /P 724 0 R >> endobj 624 0 obj << /S /API#20Description /C /API#20Description /Pg 73 0 R /K 9 /P 724 0 R >> endobj 625 0 obj << /S /API#20Function /C /API#20Function /Pg 73 0 R /K 10 /P 724 0 R >> endobj 626 0 obj << /S /API#20Description /C /API#20Description /Pg 73 0 R /K 11 /P 724 0 R >> endobj 627 0 obj << /S /API#20Function /C /API#20Function /Pg 73 0 R /K 12 /P 724 0 R >> endobj 628 0 obj << /S /API#20Description /C /API#20Description /Pg 73 0 R /K 13 /P 724 0 R >> endobj 629 0 obj << /S /API#20Description /C /API#20Description /Pg 73 0 R /K 14 /P 724 0 R >> endobj 630 0 obj << /S /LBody /C /#C3#9Cberschrift#201 /Pg 76 0 R /K 0 /P 1038 0 R >> endobj 631 0 obj << /S /API#20Attribute /C /API#20Attribute /Pg 76 0 R /K 1 /P 724 0 R >> endobj 632 0 obj << /S /API#20Description /C /API#20Description /Pg 76 0 R /K 2 /P 724 0 R >> endobj 633 0 obj << /S /LBody /C /#C3#9Cberschrift#201 /Pg 79 0 R /K 0 /P 1040 0 R >> endobj 634 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 79 0 R /K 1 /P 724 0 R >> endobj 635 0 obj << /S /Program#20Text /C /Program#20Text /Pg 79 0 R /K 2 /P 724 0 R >> endobj 636 0 obj << /S /Program#20Text /C /Program#20Text /Pg 79 0 R /K 3 /P 724 0 R >> endobj 637 0 obj << /S /Program#20Text /C /Program#20Text /Pg 79 0 R /K 4 /P 724 0 R >> endobj 638 0 obj << /S /Program#20Text /C /Program#20Text /Pg 79 0 R /K 5 /P 724 0 R >> endobj 639 0 obj << /S /Program#20Text /C /Program#20Text /Pg 79 0 R /K 6 /P 724 0 R >> endobj 640 0 obj << /S /Program#20Text /C /Program#20Text /Pg 79 0 R /K 7 /P 724 0 R >> endobj 641 0 obj << /S /Program#20Text /C /Program#20Text /Pg 79 0 R /K 8 /P 724 0 R >> endobj 642 0 obj << /S /Program#20Text /C /Program#20Text /Pg 79 0 R /K 9 /P 724 0 R >> endobj 643 0 obj << /S /Program#20Text /C /Program#20Text /Pg 79 0 R /K 10 /P 724 0 R >> endobj 644 0 obj << /S /Program#20Text /C /Program#20Text /Pg 79 0 R /K 11 /P 724 0 R >> endobj 645 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 79 0 R /K 12 /P 724 0 R >> endobj 646 0 obj << /S /LBody /C /#C3#9Cberschrift#201 /Pg 82 0 R /K 0 /P 1042 0 R >> endobj 647 0 obj << /S /HTML#20Vorformatiert /A [ 648 0 R ] /C /HTML#20Vorformatiert /Pg 82 0 R /K 1 /P 724 0 R >> endobj 648 0 obj << /O /Layout /StartIndent 36 >> endobj 649 0 obj << /O /Layout /WritingMode /LrTb /StartIndent 0 /EndIndent 0 /TextAlign /Start /SpaceBefore 0 /SpaceAfter 0 /TextIndent 0 >> endobj 650 0 obj << /S /Program#20Text /C /Program#20Text /Pg 82 0 R /K 2 /P 724 0 R >> endobj 651 0 obj << /S /Program#20Text /C /Program#20Text /Pg 82 0 R /K 3 /P 724 0 R >> endobj 652 0 obj << /S /Program#20Text /C /Program#20Text /Pg 82 0 R /K 4 /P 724 0 R >> endobj 653 0 obj << /S /Program#20Text /C /Program#20Text /Pg 82 0 R /K 6 /P 724 0 R >> endobj 654 0 obj << /S /HTML#20Vorformatiert /A [ 655 0 R ] /C /HTML#20Vorformatiert /Pg 82 0 R /K 5 /P 724 0 R >> endobj 655 0 obj << /O /Layout /StartIndent 36 >> endobj 656 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 82 0 R /K 7 /P 724 0 R >> endobj 657 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 82 0 R /K 8 /P 724 0 R >> endobj 658 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 82 0 R /K 9 /P 724 0 R >> endobj 659 0 obj << /S /LBody /C /#C3#9Cberschrift#201 /Pg 85 0 R /K 0 /P 1044 0 R >> endobj 660 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 85 0 R /K [ 1 661 0 R 3 ] /P 724 0 R >> endobj 661 0 obj << /S /Link /P 660 0 R /K [ 662 0 R << /Type /OBJR /Pg 85 0 R /Obj 120 0 R >> ] >> endobj 662 0 obj << /S /Underline /P 661 0 R /A 1123 0 R /Pg 85 0 R /K 2 >> endobj 663 0 obj << /S /LBody /C /#C3#9Cberschrift#201 /Pg 89 0 R /K 0 /P 1046 0 R >> endobj 664 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 89 0 R /K [ 1 665 0 R 3 ] /P 724 0 R >> endobj 665 0 obj << /S /Link /P 664 0 R /K [ 666 0 R << /Type /OBJR /Pg 89 0 R /Obj 122 0 R >> ] >> endobj 666 0 obj << /S /Underline /P 665 0 R /A 1125 0 R /Pg 89 0 R /K 2 >> endobj 667 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 89 0 R /K 4 /P 724 0 R >> endobj 668 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 89 0 R /K 5 /P 724 0 R >> endobj 669 0 obj << /S /License#20Title /C /License#20Title /Pg 93 0 R /K 0 /P 724 0 R >> endobj 670 0 obj << /S /License#20Subtitle /C /License#20Subtitle /Pg 93 0 R /K 1 /P 724 0 R >> endobj 671 0 obj << /O /Layout /WritingMode /LrTb /StartIndent 0 /EndIndent 0 /TextAlign /Center /SpaceBefore 0 /SpaceAfter 6 /TextIndent 0 >> endobj 672 0 obj << /S /License#20Text /C /License#20Text /Pg 93 0 R /K [ 2 675 0 R 4 ] /P 724 0 R >> endobj 673 0 obj << /O /Layout /WritingMode /LrTb /StartIndent 0 /EndIndent 0 /TextAlign /Center /SpaceBefore 0 /SpaceAfter 6 /TextIndent 0 >> endobj 674 0 obj << /O /Layout /WritingMode /LrTb /StartIndent 42.55 /EndIndent 0 /TextAlign /Start /SpaceBefore 6 /SpaceAfter 6 /TextIndent 0 >> endobj 675 0 obj << /S /Link /P 672 0 R /K [ 676 0 R << /Type /OBJR /Pg 93 0 R /Obj 124 0 R >> ] >> endobj 676 0 obj << /S /Underline /P 675 0 R /A 1127 0 R /Pg 93 0 R /K 3 >> endobj 677 0 obj << /S /LBody /C /License#20Section /Pg 93 0 R /K 5 /P 1048 0 R >> endobj 678 0 obj << /S /License#20Text /C /License#20Text /Pg 93 0 R /K 6 /P 724 0 R >> endobj 679 0 obj << /O /Layout /WritingMode /LrTb /StartIndent 85.10001 /EndIndent 0 /TextAlign /Start /SpaceBefore 12 /SpaceAfter 6 /TextIndent -85.09999 >> endobj 680 0 obj << /S /LBody /C /License#20Section /Pg 93 0 R /K 7 /P 1050 0 R >> endobj 681 0 obj << /S /License#20Text /C /License#20Text /Pg 93 0 R /K 8 /P 724 0 R >> endobj 682 0 obj << /S /LBody /C /License#20Section /Pg 93 0 R /K 9 /P 1052 0 R >> endobj 683 0 obj << /S /License#20Text /C /License#20Text /Pg 93 0 R /K 10 /P 724 0 R >> endobj 684 0 obj << /S /LBody /C /License#20Section /Pg 93 0 R /K 11 /P 1054 0 R >> endobj 685 0 obj << /S /License#20Text /C /License#20Text /Pg 93 0 R /P 724 0 R /K [ 12 << /Type /MCR /Pg 97 0 R /MCID 0 >> ] >> endobj 686 0 obj << /S /License#20Text /C /License#20Text /Pg 97 0 R /K 1 /P 724 0 R >> endobj 687 0 obj << /S /LBody /C /License#20Section /Pg 97 0 R /K 2 /P 1056 0 R >> endobj 688 0 obj << /S /License#20Text /C /License#20Text /Pg 97 0 R /K 3 /P 724 0 R >> endobj 689 0 obj << /S /LBody /C /License#20Section /Pg 97 0 R /K 4 /P 1058 0 R >> endobj 690 0 obj << /S /License#20Text /C /License#20Text /Pg 97 0 R /K 5 /P 724 0 R >> endobj 691 0 obj << /S /LBody /C /License#20Section /Pg 97 0 R /K 6 /P 1060 0 R >> endobj 692 0 obj << /S /License#20Text /C /License#20Text /Pg 97 0 R /K 7 /P 724 0 R >> endobj 693 0 obj << /S /License#20Text /C /License#20Text /Pg 97 0 R /K 8 /P 724 0 R >> endobj 694 0 obj << /S /License#20Text /C /License#20Text /Pg 97 0 R /K 9 /P 724 0 R >> endobj 695 0 obj << /S /License#20Text /C /License#20Text /Pg 97 0 R /K 10 /P 724 0 R >> endobj 696 0 obj << /S /License#20Text /C /License#20Text /Pg 97 0 R /K 11 /P 724 0 R >> endobj 697 0 obj << /S /License#20Text /C /License#20Text /Pg 100 0 R /K 0 /P 724 0 R >> endobj 698 0 obj << /S /LBody /C /License#20Section /Pg 100 0 R /K 1 /P 1062 0 R >> endobj 699 0 obj << /S /License#20Text /C /License#20Text /Pg 100 0 R /K 2 /P 724 0 R >> endobj 700 0 obj << /S /License#20Text /C /License#20Text /Pg 100 0 R /K 3 /P 724 0 R >> endobj 701 0 obj << /S /License#20Text /A [ 702 0 R ] /C /License#20Text /Pg 100 0 R /K 4 /P 724 0 R >> endobj 702 0 obj << /O /Layout /StartIndent 81 >> endobj 703 0 obj << /S /License#20Text /A [ 704 0 R ] /C /License#20Text /Pg 100 0 R /K 5 /P 724 0 R >> endobj 704 0 obj << /O /Layout /StartIndent 81 >> endobj 705 0 obj << /S /License#20Text /A [ 706 0 R ] /C /License#20Text /Pg 100 0 R /K 6 /P 724 0 R >> endobj 706 0 obj << /O /Layout /StartIndent 81 >> endobj 707 0 obj << /S /License#20Text /A [ 708 0 R ] /C /License#20Text /Pg 100 0 R /K 7 /P 724 0 R >> endobj 708 0 obj << /O /Layout /StartIndent 81 >> endobj 709 0 obj << /S /License#20Text /C /License#20Text /Pg 100 0 R /K 8 /P 724 0 R >> endobj 710 0 obj << /S /Textk#C3#B6rper /C /Textk#C3#B6rper /Pg 100 0 R /K 9 /P 724 0 R >> endobj 711 0 obj << /S /Fu#C3#9Fnotentext /C /Fu#C3#9Fnotentext /Pg 50 0 R /K 39 /P 1063 0 R >> endobj 712 0 obj << /S /Fu#C3#9Fnotentext /C /Fu#C3#9Fnotentext /Pg 57 0 R /K 23 /P 1064 0 R >> endobj 713 0 obj << /O /Layout /WritingMode /LrTb /StartIndent 0 /EndIndent 0 /TextAlign /Start /SpaceBefore 0 /SpaceAfter 0 /TextIndent 0 >> endobj 714 0 obj << /S /Standard /A [ 715 0 R ] /C /Standard /Pg 1192 0 R /K [ 23 24 25 ] /P 1068 0 R >> endobj 715 0 obj << /O /Layout /TextAlign /End /StartIndent -47.55 /EndIndent -24.2 >> endobj 716 0 obj << /S /Standard /A [ 717 0 R ] /C /Standard /Pg 1192 0 R /K [ 26 27 28 ] /P 1068 0 R >> endobj 717 0 obj << /O /Layout /TextAlign /End /StartIndent -47.55 /EndIndent -24.2 >> endobj 718 0 obj << /S /Standard /A [ 719 0 R ] /C /Standard /Pg 1192 0 R /K [ 9 10 11 12 13 14 15 16 17 18 19 20 21 ] /P 1067 0 R >> endobj 719 0 obj << /O /Layout /TextAlign /Center /StartIndent 54.45 /EndIndent 62.8 >> endobj 720 0 obj << /S /Standard /A [ 721 0 R ] /C /Standard /Pg 1192 0 R /K [ 1 2 3 4 5 6 7 8 ] /P 1066 0 R >> endobj 721 0 obj << /O /Layout /StartIndent 74.45 /TextAlign /End /EndIndent -47.2 >> endobj 722 0 obj << /S /Sect /P 1191 0 R /K [ 1068 0 R 1067 0 R 1066 0 R 1065 0 R 143 0 R 144 0 R 147 0 R 148 0 R 149 0 R 150 0 R 151 0 R 152 0 R 153 0 R 154 0 R 155 0 R 156 0 R 157 0 R 158 0 R 159 0 R 160 0 R 161 0 R 162 0 R 163 0 R 164 0 R 165 0 R 166 0 R 167 0 R 168 0 R 169 0 R 170 0 R 171 0 R 172 0 R 173 0 R 174 0 R 175 0 R 176 0 R 177 0 R 179 0 R 180 0 R 181 0 R 182 0 R ] >> endobj 723 0 obj << /S /Sect /P 1191 0 R /K [ 183 0 R 725 0 R 233 0 R ] >> endobj 724 0 obj << /S /Sect /P 1191 0 R /K [ 1012 0 R 236 0 R 238 0 R 1014 0 R 240 0 R 241 0 R 1016 0 R 243 0 R 245 0 R 248 0 R 249 0 R 250 0 R 252 0 R 254 0 R 255 0 R 256 0 R 257 0 R 258 0 R 259 0 R 260 0 R 261 0 R 262 0 R 263 0 R 264 0 R 265 0 R 266 0 R 267 0 R 268 0 R 269 0 R 270 0 R 271 0 R 1018 0 R 273 0 R 726 0 R 450 0 R 451 0 R 452 0 R 1020 0 R 454 0 R 455 0 R 456 0 R 1063 0 R 458 0 R 461 0 R 463 0 R 464 0 R 465 0 R 466 0 R 467 0 R 468 0 R 469 0 R 470 0 R 471 0 R 472 0 R 473 0 R 474 0 R 475 0 R 476 0 R 477 0 R 478 0 R 479 0 R 480 0 R 481 0 R 482 0 R 483 0 R 484 0 R 485 0 R 1022 0 R 487 0 R 488 0 R 489 0 R 490 0 R 491 0 R 492 0 R 493 0 R 494 0 R 495 0 R 496 0 R 497 0 R 499 0 R 500 0 R 501 0 R 502 0 R 1024 0 R 504 0 R 505 0 R 506 0 R 508 0 R 509 0 R 510 0 R 511 0 R 512 0 R 513 0 R 1026 0 R 516 0 R 517 0 R 518 0 R 1064 0 R 520 0 R 521 0 R 522 0 R 523 0 R 524 0 R 525 0 R 526 0 R 527 0 R 528 0 R 529 0 R 530 0 R 531 0 R 532 0 R 533 0 R 534 0 R 535 0 R 536 0 R 537 0 R 538 0 R 539 0 R 540 0 R 541 0 R 542 0 R 543 0 R 544 0 R 545 0 R 546 0 R 547 0 R 548 0 R 549 0 R 550 0 R 551 0 R 552 0 R 1028 0 R 554 0 R 555 0 R 556 0 R 558 0 R 559 0 R 560 0 R 561 0 R 562 0 R 563 0 R 564 0 R 565 0 R 566 0 R 567 0 R 568 0 R 569 0 R 570 0 R 571 0 R 572 0 R 573 0 R 574 0 R 575 0 R 576 0 R 577 0 R 578 0 R 579 0 R 580 0 R 581 0 R 582 0 R 583 0 R 584 0 R 585 0 R 1030 0 R 587 0 R 588 0 R 589 0 R 590 0 R 591 0 R 592 0 R 1032 0 R 601 0 R 602 0 R 603 0 R 604 0 R 605 0 R 606 0 R 607 0 R 608 0 R 609 0 R 610 0 R 611 0 R 612 0 R 613 0 R 614 0 R 615 0 R 616 0 R 617 0 R 618 0 R 619 0 R 620 0 R 621 0 R 622 0 R 623 0 R 624 0 R 625 0 R 626 0 R 627 0 R 628 0 R 629 0 R 1037 0 R 631 0 R 632 0 R 1039 0 R 634 0 R 635 0 R 636 0 R 637 0 R 638 0 R 639 0 R 640 0 R 641 0 R 642 0 R 643 0 R 644 0 R 645 0 R 1041 0 R 647 0 R 650 0 R 651 0 R 652 0 R 653 0 R 654 0 R 656 0 R 657 0 R 658 0 R 1043 0 R 660 0 R 1045 0 R 664 0 R 667 0 R 668 0 R 669 0 R 670 0 R 672 0 R 1047 0 R 678 0 R 1049 0 R 681 0 R 1051 0 R 683 0 R 1053 0 R 685 0 R 686 0 R 1055 0 R 688 0 R 1057 0 R 690 0 R 1059 0 R 692 0 R 693 0 R 694 0 R 695 0 R 696 0 R 697 0 R 1061 0 R 699 0 R 700 0 R 701 0 R 703 0 R 705 0 R 707 0 R 709 0 R 710 0 R ] >> endobj 725 0 obj << /S /TOC /P 723 0 R /K [ 184 0 R 189 0 R 192 0 R 196 0 R 199 0 R 202 0 R 205 0 R 208 0 R 211 0 R 214 0 R 217 0 R 220 0 R 223 0 R 226 0 R 229 0 R 232 0 R ] >> endobj 726 0 obj << /S /Table /P 724 0 R /K [ 727 0 R 746 0 R 765 0 R 784 0 R 803 0 R 822 0 R 841 0 R 860 0 R 879 0 R 898 0 R 917 0 R 936 0 R 955 0 R 974 0 R 993 0 R ] /A [ 1130 0 R ] >> endobj 727 0 obj << /S /TR /P 726 0 R /K [ 728 0 R 731 0 R 734 0 R 737 0 R 740 0 R 743 0 R ] >> endobj 728 0 obj << /S /TD /A [ 729 0 R 730 0 R ] /P 727 0 R /K 274 0 R >> endobj 729 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 730 0 obj << /O /Layout /BlockAlign /Middle >> endobj 731 0 obj << /S /TD /A [ 732 0 R 733 0 R ] /P 727 0 R /K 275 0 R >> endobj 732 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 733 0 obj << /O /Layout /BlockAlign /Middle >> endobj 734 0 obj << /S /TD /A [ 735 0 R 736 0 R ] /P 727 0 R /K 277 0 R >> endobj 735 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 736 0 obj << /O /Layout /BlockAlign /Middle >> endobj 737 0 obj << /S /TD /A [ 738 0 R 739 0 R ] /P 727 0 R /K 278 0 R >> endobj 738 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 739 0 obj << /O /Layout /BlockAlign /Middle >> endobj 740 0 obj << /S /TD /A [ 741 0 R 742 0 R ] /P 727 0 R /K 279 0 R >> endobj 741 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 742 0 obj << /O /Layout /BlockAlign /Middle >> endobj 743 0 obj << /S /TD /A [ 744 0 R 745 0 R ] /P 727 0 R /K 280 0 R >> endobj 744 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 745 0 obj << /O /Layout /BlockAlign /Middle >> endobj 746 0 obj << /S /TR /P 726 0 R /K [ 747 0 R 750 0 R 753 0 R 756 0 R 759 0 R 762 0 R ] >> endobj 747 0 obj << /S /TD /A [ 748 0 R 749 0 R ] /P 746 0 R /K 281 0 R >> endobj 748 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 749 0 obj << /O /Layout /BlockAlign /Middle >> endobj 750 0 obj << /S /TD /A [ 751 0 R 752 0 R ] /P 746 0 R /K 284 0 R >> endobj 751 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 752 0 obj << /O /Layout /BlockAlign /Middle >> endobj 753 0 obj << /S /TD /A [ 754 0 R 755 0 R ] /P 746 0 R /K 286 0 R >> endobj 754 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 755 0 obj << /O /Layout /BlockAlign /Middle >> endobj 756 0 obj << /S /TD /A [ 757 0 R 758 0 R ] /P 746 0 R /K 288 0 R >> endobj 757 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 758 0 obj << /O /Layout /BlockAlign /Middle >> endobj 759 0 obj << /S /TD /A [ 760 0 R 761 0 R ] /P 746 0 R /K 290 0 R >> endobj 760 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 761 0 obj << /O /Layout /BlockAlign /Middle >> endobj 762 0 obj << /S /TD /A [ 763 0 R 764 0 R ] /P 746 0 R /K 292 0 R >> endobj 763 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 764 0 obj << /O /Layout /BlockAlign /Middle >> endobj 765 0 obj << /S /TR /P 726 0 R /K [ 766 0 R 769 0 R 772 0 R 775 0 R 778 0 R 781 0 R ] >> endobj 766 0 obj << /S /TD /A [ 767 0 R 768 0 R ] /P 765 0 R /K 294 0 R >> endobj 767 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 768 0 obj << /O /Layout /BlockAlign /Middle >> endobj 769 0 obj << /S /TD /A [ 770 0 R 771 0 R ] /P 765 0 R /K 296 0 R >> endobj 770 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 771 0 obj << /O /Layout /BlockAlign /Middle >> endobj 772 0 obj << /S /TD /A [ 773 0 R 774 0 R ] /P 765 0 R /K 298 0 R >> endobj 773 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 774 0 obj << /O /Layout /BlockAlign /Middle >> endobj 775 0 obj << /S /TD /A [ 776 0 R 777 0 R ] /P 765 0 R /K 300 0 R >> endobj 776 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 777 0 obj << /O /Layout /BlockAlign /Middle >> endobj 778 0 obj << /S /TD /A [ 779 0 R 780 0 R ] /P 765 0 R /K 302 0 R >> endobj 779 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 780 0 obj << /O /Layout /BlockAlign /Middle >> endobj 781 0 obj << /S /TD /A [ 782 0 R 783 0 R ] /P 765 0 R /K 304 0 R >> endobj 782 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 783 0 obj << /O /Layout /BlockAlign /Middle >> endobj 784 0 obj << /S /TR /P 726 0 R /K [ 785 0 R 788 0 R 791 0 R 794 0 R 797 0 R 800 0 R ] >> endobj 785 0 obj << /S /TD /A [ 786 0 R 787 0 R ] /P 784 0 R /K 306 0 R >> endobj 786 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 787 0 obj << /O /Layout /BlockAlign /Middle >> endobj 788 0 obj << /S /TD /A [ 789 0 R 790 0 R ] /P 784 0 R /K 308 0 R >> endobj 789 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 790 0 obj << /O /Layout /BlockAlign /Middle >> endobj 791 0 obj << /S /TD /A [ 792 0 R 793 0 R ] /P 784 0 R /K 310 0 R >> endobj 792 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 793 0 obj << /O /Layout /BlockAlign /Middle >> endobj 794 0 obj << /S /TD /A [ 795 0 R 796 0 R ] /P 784 0 R /K 312 0 R >> endobj 795 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 796 0 obj << /O /Layout /BlockAlign /Middle >> endobj 797 0 obj << /S /TD /A [ 798 0 R 799 0 R ] /P 784 0 R /K 314 0 R >> endobj 798 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 799 0 obj << /O /Layout /BlockAlign /Middle >> endobj 800 0 obj << /S /TD /A [ 801 0 R 802 0 R ] /P 784 0 R /K 316 0 R >> endobj 801 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 802 0 obj << /O /Layout /BlockAlign /Middle >> endobj 803 0 obj << /S /TR /P 726 0 R /K [ 804 0 R 807 0 R 810 0 R 813 0 R 816 0 R 819 0 R ] >> endobj 804 0 obj << /S /TD /A [ 805 0 R 806 0 R ] /P 803 0 R /K 318 0 R >> endobj 805 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 806 0 obj << /O /Layout /BlockAlign /Middle >> endobj 807 0 obj << /S /TD /A [ 808 0 R 809 0 R ] /P 803 0 R /K 320 0 R >> endobj 808 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 809 0 obj << /O /Layout /BlockAlign /Middle >> endobj 810 0 obj << /S /TD /A [ 811 0 R 812 0 R ] /P 803 0 R /K 322 0 R >> endobj 811 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 812 0 obj << /O /Layout /BlockAlign /Middle >> endobj 813 0 obj << /S /TD /A [ 814 0 R 815 0 R ] /P 803 0 R /K 324 0 R >> endobj 814 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 815 0 obj << /O /Layout /BlockAlign /Middle >> endobj 816 0 obj << /S /TD /A [ 817 0 R 818 0 R ] /P 803 0 R /K 326 0 R >> endobj 817 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 818 0 obj << /O /Layout /BlockAlign /Middle >> endobj 819 0 obj << /S /TD /A [ 820 0 R 821 0 R ] /P 803 0 R /K 328 0 R >> endobj 820 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 821 0 obj << /O /Layout /BlockAlign /Middle >> endobj 822 0 obj << /S /TR /P 726 0 R /K [ 823 0 R 826 0 R 829 0 R 832 0 R 835 0 R 838 0 R ] >> endobj 823 0 obj << /S /TD /A [ 824 0 R 825 0 R ] /P 822 0 R /K 330 0 R >> endobj 824 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 825 0 obj << /O /Layout /BlockAlign /Middle >> endobj 826 0 obj << /S /TD /A [ 827 0 R 828 0 R ] /P 822 0 R /K 332 0 R >> endobj 827 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 828 0 obj << /O /Layout /BlockAlign /Middle >> endobj 829 0 obj << /S /TD /A [ 830 0 R 831 0 R ] /P 822 0 R /K 334 0 R >> endobj 830 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 831 0 obj << /O /Layout /BlockAlign /Middle >> endobj 832 0 obj << /S /TD /A [ 833 0 R 834 0 R ] /P 822 0 R /K 336 0 R >> endobj 833 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 834 0 obj << /O /Layout /BlockAlign /Middle >> endobj 835 0 obj << /S /TD /A [ 836 0 R 837 0 R ] /P 822 0 R /K 338 0 R >> endobj 836 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 837 0 obj << /O /Layout /BlockAlign /Middle >> endobj 838 0 obj << /S /TD /A [ 839 0 R 840 0 R ] /P 822 0 R /K 340 0 R >> endobj 839 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 840 0 obj << /O /Layout /BlockAlign /Middle >> endobj 841 0 obj << /S /TR /P 726 0 R /K [ 842 0 R 845 0 R 848 0 R 851 0 R 854 0 R 857 0 R ] >> endobj 842 0 obj << /S /TD /A [ 843 0 R 844 0 R ] /P 841 0 R /K 342 0 R >> endobj 843 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 844 0 obj << /O /Layout /BlockAlign /Middle >> endobj 845 0 obj << /S /TD /A [ 846 0 R 847 0 R ] /P 841 0 R /K 344 0 R >> endobj 846 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 847 0 obj << /O /Layout /BlockAlign /Middle >> endobj 848 0 obj << /S /TD /A [ 849 0 R 850 0 R ] /P 841 0 R /K 346 0 R >> endobj 849 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 850 0 obj << /O /Layout /BlockAlign /Middle >> endobj 851 0 obj << /S /TD /A [ 852 0 R 853 0 R ] /P 841 0 R /K 348 0 R >> endobj 852 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 853 0 obj << /O /Layout /BlockAlign /Middle >> endobj 854 0 obj << /S /TD /A [ 855 0 R 856 0 R ] /P 841 0 R /K 350 0 R >> endobj 855 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 856 0 obj << /O /Layout /BlockAlign /Middle >> endobj 857 0 obj << /S /TD /A [ 858 0 R 859 0 R ] /P 841 0 R /K 352 0 R >> endobj 858 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 859 0 obj << /O /Layout /BlockAlign /Middle >> endobj 860 0 obj << /S /TR /P 726 0 R /K [ 861 0 R 864 0 R 867 0 R 870 0 R 873 0 R 876 0 R ] >> endobj 861 0 obj << /S /TD /A [ 862 0 R 863 0 R ] /P 860 0 R /K 354 0 R >> endobj 862 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 863 0 obj << /O /Layout /BlockAlign /Middle >> endobj 864 0 obj << /S /TD /A [ 865 0 R 866 0 R ] /P 860 0 R /K 356 0 R >> endobj 865 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 866 0 obj << /O /Layout /BlockAlign /Middle >> endobj 867 0 obj << /S /TD /A [ 868 0 R 869 0 R ] /P 860 0 R /K 358 0 R >> endobj 868 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 869 0 obj << /O /Layout /BlockAlign /Middle >> endobj 870 0 obj << /S /TD /A [ 871 0 R 872 0 R ] /P 860 0 R /K 360 0 R >> endobj 871 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 872 0 obj << /O /Layout /BlockAlign /Middle >> endobj 873 0 obj << /S /TD /A [ 874 0 R 875 0 R ] /P 860 0 R /K 362 0 R >> endobj 874 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 875 0 obj << /O /Layout /BlockAlign /Middle >> endobj 876 0 obj << /S /TD /A [ 877 0 R 878 0 R ] /P 860 0 R /K 364 0 R >> endobj 877 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 878 0 obj << /O /Layout /BlockAlign /Middle >> endobj 879 0 obj << /S /TR /P 726 0 R /K [ 880 0 R 883 0 R 886 0 R 889 0 R 892 0 R 895 0 R ] >> endobj 880 0 obj << /S /TD /A [ 881 0 R 882 0 R ] /P 879 0 R /K 366 0 R >> endobj 881 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 882 0 obj << /O /Layout /BlockAlign /Middle >> endobj 883 0 obj << /S /TD /A [ 884 0 R 885 0 R ] /P 879 0 R /K 368 0 R >> endobj 884 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 885 0 obj << /O /Layout /BlockAlign /Middle >> endobj 886 0 obj << /S /TD /A [ 887 0 R 888 0 R ] /P 879 0 R /K 370 0 R >> endobj 887 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 888 0 obj << /O /Layout /BlockAlign /Middle >> endobj 889 0 obj << /S /TD /A [ 890 0 R 891 0 R ] /P 879 0 R /K 372 0 R >> endobj 890 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 891 0 obj << /O /Layout /BlockAlign /Middle >> endobj 892 0 obj << /S /TD /A [ 893 0 R 894 0 R ] /P 879 0 R /K 374 0 R >> endobj 893 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 894 0 obj << /O /Layout /BlockAlign /Middle >> endobj 895 0 obj << /S /TD /A [ 896 0 R 897 0 R ] /P 879 0 R /K 376 0 R >> endobj 896 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 897 0 obj << /O /Layout /BlockAlign /Middle >> endobj 898 0 obj << /S /TR /P 726 0 R /K [ 899 0 R 902 0 R 905 0 R 908 0 R 911 0 R 914 0 R ] >> endobj 899 0 obj << /S /TD /A [ 900 0 R 901 0 R ] /P 898 0 R /K 378 0 R >> endobj 900 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 901 0 obj << /O /Layout /BlockAlign /Middle >> endobj 902 0 obj << /S /TD /A [ 903 0 R 904 0 R ] /P 898 0 R /K 380 0 R >> endobj 903 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 904 0 obj << /O /Layout /BlockAlign /Middle >> endobj 905 0 obj << /S /TD /A [ 906 0 R 907 0 R ] /P 898 0 R /K 382 0 R >> endobj 906 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 907 0 obj << /O /Layout /BlockAlign /Middle >> endobj 908 0 obj << /S /TD /A [ 909 0 R 910 0 R ] /P 898 0 R /K 384 0 R >> endobj 909 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 910 0 obj << /O /Layout /BlockAlign /Middle >> endobj 911 0 obj << /S /TD /A [ 912 0 R 913 0 R ] /P 898 0 R /K 386 0 R >> endobj 912 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 913 0 obj << /O /Layout /BlockAlign /Middle >> endobj 914 0 obj << /S /TD /A [ 915 0 R 916 0 R ] /P 898 0 R /K 388 0 R >> endobj 915 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 916 0 obj << /O /Layout /BlockAlign /Middle >> endobj 917 0 obj << /S /TR /P 726 0 R /K [ 918 0 R 921 0 R 924 0 R 927 0 R 930 0 R 933 0 R ] >> endobj 918 0 obj << /S /TD /A [ 919 0 R 920 0 R ] /P 917 0 R /K 390 0 R >> endobj 919 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 920 0 obj << /O /Layout /BlockAlign /Middle >> endobj 921 0 obj << /S /TD /A [ 922 0 R 923 0 R ] /P 917 0 R /K 392 0 R >> endobj 922 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 923 0 obj << /O /Layout /BlockAlign /Middle >> endobj 924 0 obj << /S /TD /A [ 925 0 R 926 0 R ] /P 917 0 R /K 394 0 R >> endobj 925 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 926 0 obj << /O /Layout /BlockAlign /Middle >> endobj 927 0 obj << /S /TD /A [ 928 0 R 929 0 R ] /P 917 0 R /K 396 0 R >> endobj 928 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 929 0 obj << /O /Layout /BlockAlign /Middle >> endobj 930 0 obj << /S /TD /A [ 931 0 R 932 0 R ] /P 917 0 R /K 398 0 R >> endobj 931 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 932 0 obj << /O /Layout /BlockAlign /Middle >> endobj 933 0 obj << /S /TD /A [ 934 0 R 935 0 R ] /P 917 0 R /K 400 0 R >> endobj 934 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 935 0 obj << /O /Layout /BlockAlign /Middle >> endobj 936 0 obj << /S /TR /P 726 0 R /K [ 937 0 R 940 0 R 943 0 R 946 0 R 949 0 R 952 0 R ] >> endobj 937 0 obj << /S /TD /A [ 938 0 R 939 0 R ] /P 936 0 R /K 402 0 R >> endobj 938 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 939 0 obj << /O /Layout /BlockAlign /Middle >> endobj 940 0 obj << /S /TD /A [ 941 0 R 942 0 R ] /P 936 0 R /K 404 0 R >> endobj 941 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 942 0 obj << /O /Layout /BlockAlign /Middle >> endobj 943 0 obj << /S /TD /A [ 944 0 R 945 0 R ] /P 936 0 R /K 406 0 R >> endobj 944 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 945 0 obj << /O /Layout /BlockAlign /Middle >> endobj 946 0 obj << /S /TD /A [ 947 0 R 948 0 R ] /P 936 0 R /K 408 0 R >> endobj 947 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 948 0 obj << /O /Layout /BlockAlign /Middle >> endobj 949 0 obj << /S /TD /A [ 950 0 R 951 0 R ] /P 936 0 R /K 410 0 R >> endobj 950 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 951 0 obj << /O /Layout /BlockAlign /Middle >> endobj 952 0 obj << /S /TD /A [ 953 0 R 954 0 R ] /P 936 0 R /K 412 0 R >> endobj 953 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 954 0 obj << /O /Layout /BlockAlign /Middle >> endobj 955 0 obj << /S /TR /P 726 0 R /K [ 956 0 R 959 0 R 962 0 R 965 0 R 968 0 R 971 0 R ] >> endobj 956 0 obj << /S /TD /A [ 957 0 R 958 0 R ] /P 955 0 R /K 414 0 R >> endobj 957 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 958 0 obj << /O /Layout /BlockAlign /Middle >> endobj 959 0 obj << /S /TD /A [ 960 0 R 961 0 R ] /P 955 0 R /K 416 0 R >> endobj 960 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 961 0 obj << /O /Layout /BlockAlign /Middle >> endobj 962 0 obj << /S /TD /A [ 963 0 R 964 0 R ] /P 955 0 R /K 418 0 R >> endobj 963 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 964 0 obj << /O /Layout /BlockAlign /Middle >> endobj 965 0 obj << /S /TD /A [ 966 0 R 967 0 R ] /P 955 0 R /K 420 0 R >> endobj 966 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 967 0 obj << /O /Layout /BlockAlign /Middle >> endobj 968 0 obj << /S /TD /A [ 969 0 R 970 0 R ] /P 955 0 R /K 422 0 R >> endobj 969 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 970 0 obj << /O /Layout /BlockAlign /Middle >> endobj 971 0 obj << /S /TD /A [ 972 0 R 973 0 R ] /P 955 0 R /K 424 0 R >> endobj 972 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 973 0 obj << /O /Layout /BlockAlign /Middle >> endobj 974 0 obj << /S /TR /P 726 0 R /K [ 975 0 R 978 0 R 981 0 R 984 0 R 987 0 R 990 0 R ] >> endobj 975 0 obj << /S /TD /A [ 976 0 R 977 0 R ] /P 974 0 R /K 426 0 R >> endobj 976 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 977 0 obj << /O /Layout /BlockAlign /Middle >> endobj 978 0 obj << /S /TD /A [ 979 0 R 980 0 R ] /P 974 0 R /K 428 0 R >> endobj 979 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 980 0 obj << /O /Layout /BlockAlign /Middle >> endobj 981 0 obj << /S /TD /A [ 982 0 R 983 0 R ] /P 974 0 R /K 430 0 R >> endobj 982 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 983 0 obj << /O /Layout /BlockAlign /Middle >> endobj 984 0 obj << /S /TD /A [ 985 0 R 986 0 R ] /P 974 0 R /K 432 0 R >> endobj 985 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 986 0 obj << /O /Layout /BlockAlign /Middle >> endobj 987 0 obj << /S /TD /A [ 988 0 R 989 0 R ] /P 974 0 R /K 434 0 R >> endobj 988 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 989 0 obj << /O /Layout /BlockAlign /Middle >> endobj 990 0 obj << /S /TD /A [ 991 0 R 992 0 R ] /P 974 0 R /K 436 0 R >> endobj 991 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 992 0 obj << /O /Layout /BlockAlign /Middle >> endobj 993 0 obj << /S /TR /P 726 0 R /K [ 994 0 R 997 0 R 1000 0 R 1003 0 R 1006 0 R 1009 0 R ] >> endobj 994 0 obj << /S /TD /A [ 995 0 R 996 0 R ] /P 993 0 R /K 438 0 R >> endobj 995 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 996 0 obj << /O /Layout /BlockAlign /Middle >> endobj 997 0 obj << /S /TD /A [ 998 0 R 999 0 R ] /P 993 0 R /K 440 0 R >> endobj 998 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 999 0 obj << /O /Layout /BlockAlign /Middle >> endobj 1000 0 obj << /S /TD /A [ 1001 0 R 1002 0 R ] /P 993 0 R /K 442 0 R >> endobj 1001 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 1002 0 obj << /O /Layout /BlockAlign /Middle >> endobj 1003 0 obj << /S /TD /A [ 1004 0 R 1005 0 R ] /P 993 0 R /K 444 0 R >> endobj 1004 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 1005 0 obj << /O /Layout /BlockAlign /Middle >> endobj 1006 0 obj << /S /TD /A [ 1007 0 R 1008 0 R ] /P 993 0 R /K 446 0 R >> endobj 1007 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 1008 0 obj << /O /Layout /BlockAlign /Middle >> endobj 1009 0 obj << /S /TD /A [ 1010 0 R 1011 0 R ] /P 993 0 R /K 448 0 R >> endobj 1010 0 obj << /O /Table /ColSpan 1 /RowSpan 1 >> endobj 1011 0 obj << /O /Layout /BlockAlign /Middle >> endobj 1012 0 obj << /S /L /K 1013 0 R /P 724 0 R >> endobj 1013 0 obj << /S /LI /P 1012 0 R /K 235 0 R >> endobj 1014 0 obj << /S /L /K 1015 0 R /P 724 0 R >> endobj 1015 0 obj << /S /LI /P 1014 0 R /K 239 0 R >> endobj 1016 0 obj << /S /L /K 1017 0 R /P 724 0 R >> endobj 1017 0 obj << /S /LI /P 1016 0 R /K 242 0 R >> endobj 1018 0 obj << /S /L /K 1019 0 R /P 724 0 R >> endobj 1019 0 obj << /S /LI /P 1018 0 R /K 272 0 R >> endobj 1020 0 obj << /S /L /K 1021 0 R /P 724 0 R >> endobj 1021 0 obj << /S /LI /P 1020 0 R /K 453 0 R >> endobj 1022 0 obj << /S /L /K 1023 0 R /P 724 0 R >> endobj 1023 0 obj << /S /LI /P 1022 0 R /K 486 0 R >> endobj 1024 0 obj << /S /L /K 1025 0 R /P 724 0 R >> endobj 1025 0 obj << /S /LI /P 1024 0 R /K 503 0 R >> endobj 1026 0 obj << /S /L /K 1027 0 R /P 724 0 R >> endobj 1027 0 obj << /S /LI /P 1026 0 R /K 514 0 R >> endobj 1028 0 obj << /S /L /K 1029 0 R /P 724 0 R >> endobj 1029 0 obj << /S /LI /P 1028 0 R /K 553 0 R >> endobj 1030 0 obj << /S /L /K 1031 0 R /P 724 0 R >> endobj 1031 0 obj << /S /LI /P 1030 0 R /K 586 0 R >> endobj 1032 0 obj << /S /L /P 724 0 R /K [ 1033 0 R 1034 0 R 1035 0 R 1036 0 R ] >> endobj 1033 0 obj << /S /LI /P 1032 0 R /K 593 0 R >> endobj 1034 0 obj << /S /LI /P 1032 0 R /K 595 0 R >> endobj 1035 0 obj << /S /LI /P 1032 0 R /K 597 0 R >> endobj 1036 0 obj << /S /LI /P 1032 0 R /K 599 0 R >> endobj 1037 0 obj << /S /L /K 1038 0 R /P 724 0 R >> endobj 1038 0 obj << /S /LI /P 1037 0 R /K 630 0 R >> endobj 1039 0 obj << /S /L /K 1040 0 R /P 724 0 R >> endobj 1040 0 obj << /S /LI /P 1039 0 R /K 633 0 R >> endobj 1041 0 obj << /S /L /K 1042 0 R /P 724 0 R >> endobj 1042 0 obj << /S /LI /P 1041 0 R /K 646 0 R >> endobj 1043 0 obj << /S /L /K 1044 0 R /P 724 0 R >> endobj 1044 0 obj << /S /LI /P 1043 0 R /K 659 0 R >> endobj 1045 0 obj << /S /L /K 1046 0 R /P 724 0 R >> endobj 1046 0 obj << /S /LI /P 1045 0 R /K 663 0 R >> endobj 1047 0 obj << /S /L /K 1048 0 R /P 724 0 R >> endobj 1048 0 obj << /S /LI /P 1047 0 R /K 677 0 R >> endobj 1049 0 obj << /S /L /K 1050 0 R /P 724 0 R >> endobj 1050 0 obj << /S /LI /P 1049 0 R /K 680 0 R >> endobj 1051 0 obj << /S /L /K 1052 0 R /P 724 0 R >> endobj 1052 0 obj << /S /LI /P 1051 0 R /K 682 0 R >> endobj 1053 0 obj << /S /L /K 1054 0 R /P 724 0 R >> endobj 1054 0 obj << /S /LI /P 1053 0 R /K 684 0 R >> endobj 1055 0 obj << /S /L /K 1056 0 R /P 724 0 R >> endobj 1056 0 obj << /S /LI /P 1055 0 R /K 687 0 R >> endobj 1057 0 obj << /S /L /K 1058 0 R /P 724 0 R >> endobj 1058 0 obj << /S /LI /P 1057 0 R /K 689 0 R >> endobj 1059 0 obj << /S /L /K 1060 0 R /P 724 0 R >> endobj 1060 0 obj << /S /LI /P 1059 0 R /K 691 0 R >> endobj 1061 0 obj << /S /L /K 1062 0 R /P 724 0 R >> endobj 1062 0 obj << /S /LI /P 1061 0 R /K 698 0 R >> endobj 1063 0 obj << /S /Footnote /P 724 0 R /K 711 0 R >> endobj 1064 0 obj << /S /Footnote /P 724 0 R /K 712 0 R >> endobj 1065 0 obj << /S /Shape /Alt () /Pg 1192 0 R /K [ 0 22 ] /P 722 0 R /A 1071 0 R >> endobj 1066 0 obj << /S /TextBox /Alt (7nNS!g ) /P 722 0 R /K 720 0 R >> endobj 1067 0 obj << /S /TextBox /Alt (ۯy}!CR~=Ut) /P 722 0 R /K 718 0 R >> endobj 1068 0 obj << /S /TextBox /Alt ( .B8Ua*KY,#B]b"ڄu) /P 722 0 R /K [ 714 0 R 716 0 R ] >> endobj 1069 0 obj << /Nums [ 0 1070 0 R 1 1072 0 R 2 1073 0 R 3 1104 0 R 4 1105 0 R 5 1106 0 R 6 1107 0 R 7 1110 0 R 8 1112 0 R 9 1114 0 R 10 1115 0 R 11 1116 0 R 12 1117 0 R 13 1118 0 R 14 1119 0 R 15 1120 0 R 16 1121 0 R 17 1122 0 R 18 661 0 R 19 1124 0 R 20 665 0 R 21 1126 0 R 22 675 0 R 23 1128 0 R 24 1129 0 R ] >> endobj 1070 0 obj [ 1065 0 R 720 0 R 720 0 R 720 0 R 720 0 R 720 0 R 720 0 R 720 0 R 720 0 R 718 0 R 718 0 R 718 0 R 718 0 R 718 0 R 718 0 R 718 0 R 718 0 R 718 0 R 718 0 R 718 0 R 718 0 R 718 0 R 1065 0 R 714 0 R 714 0 R 714 0 R 716 0 R 716 0 R 716 0 R ] endobj 1071 0 obj << /O /Layout /BBox [ 34 34 566 809 ] /Placement /Block /StartIndent -93.55 /EndIndent -70.2 >> endobj 1072 0 obj [ 143 0 R 144 0 R 147 0 R 148 0 R 149 0 R 150 0 R 151 0 R 152 0 R 153 0 R 154 0 R 155 0 R 156 0 R 157 0 R 158 0 R 159 0 R 160 0 R 161 0 R 162 0 R 163 0 R 164 0 R 165 0 R 166 0 R 167 0 R 168 0 R 169 0 R 170 0 R 171 0 R 172 0 R 173 0 R 174 0 R 175 0 R 176 0 R 177 0 R 179 0 R 180 0 R 181 0 R 182 0 R ] endobj 1073 0 obj [ 183 0 R 186 0 R 184 0 R 188 0 R 184 0 R 190 0 R 189 0 R 191 0 R 189 0 R 193 0 R 192 0 R 195 0 R 192 0 R 197 0 R 196 0 R 198 0 R 196 0 R 200 0 R 199 0 R 201 0 R 199 0 R 203 0 R 202 0 R 204 0 R 202 0 R 206 0 R 205 0 R 207 0 R 205 0 R 209 0 R 208 0 R 210 0 R 208 0 R 212 0 R 211 0 R 213 0 R 211 0 R 215 0 R 214 0 R 216 0 R 214 0 R 218 0 R 217 0 R 219 0 R 217 0 R 221 0 R 220 0 R 222 0 R 220 0 R 224 0 R 223 0 R 225 0 R 223 0 R 227 0 R 226 0 R 228 0 R 226 0 R 230 0 R 229 0 R 231 0 R 229 0 R 232 0 R 233 0 R ] endobj 1074 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 1075 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 1076 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 1077 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 1078 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 1079 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 1080 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 1081 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 1082 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 1083 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 1084 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 1085 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 1086 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 1087 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 1088 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 1089 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 1090 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 1091 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 1092 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 1093 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 1094 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 1095 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 1096 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 1097 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 1098 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 1099 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 1100 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 1101 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 1102 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 1103 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 1104 0 obj [ 235 0 R 236 0 R 238 0 R ] endobj 1105 0 obj [ 239 0 R 240 0 R 241 0 R 242 0 R 243 0 R 245 0 R 248 0 R 249 0 R 250 0 R 252 0 R 254 0 R 255 0 R 256 0 R 257 0 R 258 0 R 259 0 R 260 0 R 261 0 R 262 0 R 263 0 R 264 0 R 265 0 R ] endobj 1106 0 obj [ 266 0 R 267 0 R 268 0 R 269 0 R 270 0 R 271 0 R 272 0 R 273 0 R 274 0 R 275 0 R 277 0 R 278 0 R 279 0 R 280 0 R 281 0 R 284 0 R 286 0 R 288 0 R 290 0 R 292 0 R 294 0 R 296 0 R 298 0 R 300 0 R 302 0 R 304 0 R 306 0 R 308 0 R 310 0 R 312 0 R 314 0 R 316 0 R 318 0 R 320 0 R 322 0 R 324 0 R 326 0 R 328 0 R 330 0 R 332 0 R 334 0 R 336 0 R 338 0 R 340 0 R 342 0 R 344 0 R 346 0 R 348 0 R 350 0 R 352 0 R 354 0 R 356 0 R 358 0 R 360 0 R 362 0 R 364 0 R 366 0 R 368 0 R 370 0 R 372 0 R 374 0 R 376 0 R 378 0 R 380 0 R 382 0 R 384 0 R 386 0 R 388 0 R ] endobj 1107 0 obj [ 390 0 R 392 0 R 394 0 R 396 0 R 398 0 R 400 0 R 402 0 R 404 0 R 406 0 R 408 0 R 410 0 R 412 0 R 414 0 R 416 0 R 418 0 R 420 0 R 422 0 R 424 0 R 426 0 R 428 0 R 430 0 R 432 0 R 434 0 R 436 0 R 438 0 R 440 0 R 442 0 R 444 0 R 446 0 R 448 0 R 450 0 R 451 0 R 452 0 R 453 0 R 454 0 R 455 0 R 456 0 R 457 0 R 456 0 R 711 0 R ] endobj 1108 0 obj << /O /Layout /BaselineShift 5 >> endobj 1109 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 1110 0 obj [ 459 0 R 462 0 R 462 0 R 463 0 R 464 0 R 465 0 R 466 0 R 467 0 R 468 0 R 469 0 R 470 0 R 471 0 R 472 0 R 473 0 R 474 0 R 475 0 R 476 0 R 477 0 R 478 0 R 479 0 R 480 0 R 481 0 R 482 0 R 483 0 R 484 0 R 485 0 R 486 0 R 487 0 R 488 0 R 489 0 R 490 0 R 491 0 R 492 0 R 493 0 R 494 0 R 495 0 R 496 0 R ] endobj 1111 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 1112 0 obj [ 497 0 R 498 0 R 497 0 R 499 0 R 500 0 R 501 0 R 502 0 R 503 0 R 504 0 R 505 0 R 506 0 R 508 0 R 509 0 R 510 0 R 511 0 R 512 0 R 513 0 R 513 0 R 513 0 R 514 0 R 516 0 R 517 0 R 518 0 R 712 0 R ] endobj 1113 0 obj << /O /Layout /BaselineShift 5 >> endobj 1114 0 obj [ 520 0 R 521 0 R 522 0 R 523 0 R 524 0 R 525 0 R 526 0 R 527 0 R 528 0 R 529 0 R 530 0 R 531 0 R 532 0 R 533 0 R 534 0 R 535 0 R 536 0 R 537 0 R 538 0 R 539 0 R 540 0 R ] endobj 1115 0 obj [ 541 0 R 542 0 R 543 0 R 544 0 R 545 0 R 546 0 R 547 0 R 548 0 R 549 0 R 550 0 R 551 0 R 552 0 R 553 0 R 554 0 R 555 0 R 556 0 R 558 0 R 559 0 R 560 0 R 561 0 R 562 0 R 563 0 R 564 0 R ] endobj 1116 0 obj [ 565 0 R 566 0 R 567 0 R 568 0 R 569 0 R 570 0 R 571 0 R 572 0 R 573 0 R 574 0 R 575 0 R 576 0 R 577 0 R 578 0 R 579 0 R 580 0 R 581 0 R 582 0 R 583 0 R 584 0 R 585 0 R ] endobj 1117 0 obj [ 586 0 R 587 0 R 588 0 R 589 0 R 590 0 R 591 0 R 592 0 R 593 0 R 595 0 R 597 0 R 599 0 R 601 0 R 602 0 R 603 0 R 604 0 R 605 0 R 606 0 R 607 0 R 608 0 R 609 0 R 610 0 R 611 0 R 612 0 R 613 0 R 614 0 R ] endobj 1118 0 obj [ 615 0 R 616 0 R 617 0 R 618 0 R 619 0 R 620 0 R 621 0 R 622 0 R 623 0 R 624 0 R 625 0 R 626 0 R 627 0 R 628 0 R 629 0 R ] endobj 1119 0 obj [ 630 0 R 631 0 R 632 0 R ] endobj 1120 0 obj [ 633 0 R 634 0 R 635 0 R 636 0 R 637 0 R 638 0 R 639 0 R 640 0 R 641 0 R 642 0 R 643 0 R 644 0 R 645 0 R ] endobj 1121 0 obj [ 646 0 R 647 0 R 650 0 R 651 0 R 652 0 R 654 0 R 653 0 R 656 0 R 657 0 R 658 0 R ] endobj 1122 0 obj [ 659 0 R 660 0 R 662 0 R 660 0 R ] endobj 1123 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 1124 0 obj [ 663 0 R 664 0 R 666 0 R 664 0 R 667 0 R 668 0 R ] endobj 1125 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 1126 0 obj [ 669 0 R 670 0 R 672 0 R 676 0 R 672 0 R 677 0 R 678 0 R 680 0 R 681 0 R 682 0 R 683 0 R 684 0 R 685 0 R ] endobj 1127 0 obj << /O /Layout /TextDecorationType /Underline >> endobj 1128 0 obj [ 685 0 R 686 0 R 687 0 R 688 0 R 689 0 R 690 0 R 691 0 R 692 0 R 693 0 R 694 0 R 695 0 R 696 0 R ] endobj 1129 0 obj [ 697 0 R 698 0 R 699 0 R 700 0 R 701 0 R 703 0 R 705 0 R 707 0 R 709 0 R 710 0 R ] endobj 1130 0 obj << /O /Layout /Placement /Block /StartIndent -28.36 /EndIndent 9.7623 >> endobj 1131 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 74 /Height 105 /ColorSpace 1179 0 R /BitsPerComponent 8 /Length 1132 0 R >> stream PO6k^.2jdSDø-^l R*OAgy^WUD~$6?w`rvW꩹eGZ|(Y|}P]b-j 7YnI4}|Yd}x3rjyw'/VD3+˲k?хւ|1LїsԬCKﶤ1CPq`{X[8Dgb+~ ggQ:z<'@ ׬2M+'1Wث$7wppiegAs>|̌f`C?h\bpҬ;0ŜvM<"uʬ kK*<;?bEq-ǩ7I؆=KӟnF8K1,!<b&3Vk"C_PM|QXfTum endstream endobj 1132 0 obj 472 endobj 1133 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 74 /Height 105 /ColorSpace 1179 0 R /BitsPerComponent 8 /Length 1134 0 R >> stream B!iq[KŦ&HHٽ{& Y:I1 Z)V& N\5)@Jm`^p\T0]F~ !> ;۪&Pɨ/xMyVxpAʹ0,K> stream 2ij-y@/WB)Pv_ dP5'%tA^ޚe͈꿆sd#UpV1IH8ʈ=u椔)#fXJ[FQ0[4(7]]1hr=' v0.~D.mY.%ֆ*4!JH=}4LWCNϫ}/CM; endstream endobj 1136 0 obj 215 endobj 1137 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 74 /Height 105 /ColorSpace 1179 0 R /BitsPerComponent 8 /Length 1138 0 R >> stream .t~\&-1 Elep&4VvBW endstream endobj 1138 0 obj 41 endobj 1139 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 74 /Height 105 /ColorSpace 1179 0 R /BitsPerComponent 8 /Length 1140 0 R >> stream ގb/܋t򛬺UĒINVEβVX9~kN"?̵I. 0.D8b_Ow0q|‰l(jQ0LD'Dz> stream Q3PF^k1H,Vyr:&k&zi]ׅ5X 뮀S MޯTߑYjmaVcF)WG벒>a[S&1ނjN$:I_uʼ{#{%{(z)cf0aWt9V0ω3ʛVԐDͮB KSo,֋f{6=4Ie?kfI Gz)%t0 8UE endstream endobj 1142 0 obj 279 endobj 1143 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 74 /Height 105 /ColorSpace 1179 0 R /BitsPerComponent 8 /Length 1144 0 R >> stream I0*.#ԾibWܹ&Ĕ ?z}&p T!%-{Ji}ϯ}-zک)[iRݩiJ~E3Afڠ\Z(_+?[V;*!ܗFbn3G(,pvR(;R'M %Ki|g}3 |9H+#s;vu×yS#2iC N7[W."/ewH3#f~H.S k endstream endobj 1144 0 obj 296 endobj 1145 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 74 /Height 105 /ColorSpace 1179 0 R /BitsPerComponent 8 /Length 1146 0 R >> stream ?Xp!-V/\.Fm VOqSɡ,2B+,NIFdQV敚tNIYv9El5'8r .1|^MťLp UL'{˂:WNW@ʴk}r@1qq"ٛ;p \imġvgO)NBh3PSͷس*>K85ݥ'&sԵyؙӹAq`|Z7Kn9}d8"ٗkjoZjq6s&W+ x1L YvƶMo(D2\%/+U݇y23Q*KoNL4C> stream P棠 imOe{N8A^qH[A6SL j#a:;tY:t6B!w!a1LJHafüvbqf?L%ܔd!*Wzye2ޖ!k{$f0>wNRP3j2< U闠L/ip"j@ ۧG}BD^> stream SB`h !0f}fL!'#!ٗEPl5< x _yXΟurVs[* qFN+wB։yak0Vbg3NGx^ ^=7c!bĜMqwʁRQ(b<(2Q5)l=o-#ր0J^)vɩApM+[9*J)B_1Lp06֙>cd9c)|F W6K!4[Ĩb0 ƮdXLt.5ht74bS/zĭ_S'twI*f|lr9F0$dy̮ endstream endobj 1150 0 obj 361 endobj 1151 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 74 /Height 105 /ColorSpace 1179 0 R /BitsPerComponent 8 /Length 1152 0 R >> stream dV;mX`X f( ,D'S(?z4*HĀ4ÄwBtN^Wq&ՂArT[ߔLs<Rn'`+Ą>>μhV\4˽_+Q&#<lq7Ʈ@~X9'jA::pu͞jo˪1Զ9?{d7ᶗ!y [#vIoM?Vt7~LAZnfP1j#B\}P4}!7h#6uZ endstream endobj 1152 0 obj 313 endobj 1153 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 74 /Height 105 /ColorSpace 1179 0 R /BitsPerComponent 8 /Length 1154 0 R >> stream ؝`,Yji͏[G}#kaRh&/B/TçWg$qw%*ϻs1$֏'+آǤuqPNy~&F# PtšG`H[{v7]jg1aH~L9/]޻Z|/Nhj:k su˒Wϻe/Y>2(xH->3h6"~~ GEGmdV5:?{H(cFBȧ0.ۭ>'&cllX|dE8%W.@NY endstream endobj 1154 0 obj 304 endobj 1155 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 74 /Height 105 /ColorSpace 1179 0 R /BitsPerComponent 8 /Length 1156 0 R >> stream jMH5l {Y>ksN+;5@@QZ\GGKD5 ꨧPۖ7xrZf1ɀt\~[fm˓ZAGa"|d6#]/^Oݱ)DhBdoy>GOOF8.:i xFB]2E}r;j@_};:t 0VSE@?VV`5DA?)rkiA{> stream w]7~X 6ZzH^Za{] jߊö~ȥ@ m& N⤦rIy=hn!Id8тm=A.]Mt|?ʰxUo8][dbX=- RI+~̳+d%w=RA+6}縍W _[J[{y,v䐠4_1%^8ٗ`5w@QS.&IR}۠@dEQ6VAfz?,'پ[n_ܿn endstream endobj 1158 0 obj 300 endobj 1159 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 74 /Height 105 /ColorSpace 1179 0 R /BitsPerComponent 8 /Length 1160 0 R >> stream [ptQq:.n SKkqDK?WkebKs7i:~v<OJڰdK5O 1S/ O6k~Ev8*Y_ J0,+f8䆔{uP`y k9ZUN<2pt\uC> stream 02u"{޵Vs\NM lddU.)pxC%$U@K嶳LA*?&]+ tW̘Jb" endstream endobj 1162 0 obj 119 endobj 1163 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 74 /Height 105 /ColorSpace 1179 0 R /BitsPerComponent 8 /Length 1164 0 R >> stream d$l0w^!>T|b) irHt|wTׂ!f vbXmazԷ MRG]l)V^UkVz< endstream endobj 1164 0 obj 117 endobj 1165 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 74 /Height 105 /ColorSpace 1179 0 R /BitsPerComponent 8 /Length 1166 0 R >> stream r ր"r!B 19hƼ0foFWɤi-`J+p>jGQCI)蝓,]k@vkEx7fz؋vҽ%l;"AdBF&S5Zey-J@hYoeN> stream z\Ƿ-F1)E<ܛu L0cll4 z E/6t?ИM+6ؖhKdG1:b] }M} endstream endobj 1168 0 obj 132 endobj 1169 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 74 /Height 105 /ColorSpace 1179 0 R /BitsPerComponent 8 /Length 1170 0 R >> stream .4r෗>'C=6j }! ?S|{X+PwC#˺|qt;ߙ_DG3׷ƹ"}<Vuh#8$itE]Q(zfmƃmP}`LVvf>m"_o!HuOdWM{vEh֬DM? endstream endobj 1170 0 obj 200 endobj 1171 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 74 /Height 105 /ColorSpace 1179 0 R /BitsPerComponent 8 /Length 1172 0 R >> stream ?"%c_?,x*QEEk0Ì&@f,19#ɞn [?"!aXsg~@GjյσVpt"2Dhj zZ$sgU/}0 /X򀒆G{[lVFDG_L"%_r}(v_)ƫDVؚV6@έm\0-3*#g ]ihv.oVTLi|hڞ)p@/k0ZAPbg{ cDُ64=`Zw~̹RJ`"q mLu3)D15Q?HS1켝:C&x~,P: 4o%I͸4 ڕPB; X?FNN BN.%ˉ^ljf[5zğJuRR endstream endobj 1172 0 obj 467 endobj 1173 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 74 /Height 105 /ColorSpace 1179 0 R /BitsPerComponent 8 /Length 1174 0 R >> stream d_i`Oaְ! ypi)}Zٚg2!_ (6~U0JY7 GaÅo]Bwt$ oZĀg{iP#Z,JAq|n?z_,\9I<&dG:'DqB~4RZ=V)vX +b@JU9w LlYXpQ`]!7(r!4L̘Of.?7I;6֐Q<d0i1 o TRpQ6%r/$kO#JŚ:]3Չh[BWiA|Cd (fr h)tB8,,! endstream endobj 1174 0 obj 431 endobj 1175 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 74 /Height 105 /ColorSpace 1179 0 R /BitsPerComponent 8 /Length 1176 0 R >> stream ?s+ӫ0 q "Զ81GI.RΎ xYIn>Æ+ϙ-[ diD$'v݋ɆZvrrᲊ\kO?hˮܽqٙ(n 8;7@S}[4\g?uT:ɔiPgVUZr I endstream endobj 1176 0 obj 198 endobj 1177 0 obj 481 endobj 1178 0 obj << /Filter [ /ASCII85Decode /LZWDecode ] /Length 1177 0 R >> stream  ' =%/1gK^W_mwXڵC'㣭W3aNӣ҃+|paPE#Bos0MVC ?JTL,4VVdgC ӢƋ&_+A@whىa}vyG x P2 LXʙ0^Yd8J\yJۅ:Y0Y(xm.tP,9G%Qt>AG7dD7@1vl:[&jhC"t@INmA؂c&b%2jRX7V5]s %D Z BV3QN( endstream endobj 1179 0 obj [ /Indexed /DeviceRGB 255 1178 0 R ] endobj 1180 0 obj << /S /D >> endobj 1181 0 obj << /Nums [ 0 1180 0 R ] >> endobj 1182 0 obj << /Producer (]i;BeЌԭ/`-tC3) /Author (Qitb3܍ڽh) /Creator (]i;Be؋ݺE:pB%t) /ModDate (XE\)h!pՉN?`) /Title (qN<ЂԭEZpշDd`VuC*#) /CreationDate (XE\)h!pԌN?`) >> endobj 1183 0 obj << /Type /Metadata /Subtype /XML /Length 1147 >> stream !-͓NaCBxjh!H}SY[ؼO*ZG0~{ٙޭu:=h_6ӯq]#7~+~(шo_ͣHu:feKR}s+ nAxbQ֯v3X} 2zMG% hC3]7c'^jX}~TL-Z{E~kUػd߫lD]L}^6\\GZ:S`QF-q}! XDpN/WA h$;WJ_b +,`{ۙuM.1oDXw0G0{iNU1ZxEVC8lfSWU|ȻZY<PpHq|ǹrd;4:\LQ8JH#s)k%dJ4[́k!]y;+R3mT *ӬV$ڟUبaTh,p~ endstream endobj 1184 0 obj << /Type /Pages /Kids [ 1192 0 R 1 0 R 4 0 R 38 0 R 41 0 R 44 0 R 47 0 R 50 0 R 54 0 R 57 0 R ] /Count 10 /Parent 1185 0 R >> endobj 1185 0 obj << /Type /Pages /Kids [ 1184 0 R 1186 0 R 1187 0 R ] /Count 23 >> endobj 1186 0 obj << /Type /Pages /Kids [ 61 0 R 64 0 R 67 0 R 70 0 R 73 0 R 76 0 R 79 0 R 82 0 R 85 0 R 89 0 R ] /Count 10 /Parent 1185 0 R >> endobj 1187 0 obj << /Type /Pages /Kids [ 93 0 R 97 0 R 100 0 R ] /Count 3 /Parent 1185 0 R >> endobj xref 0 1188 0000000000 65535 f 0000277085 00000 n 0000277429 00000 n 0000278900 00000 n 0000278921 00000 n 0000279280 00000 n 0000279403 00000 n 0000279539 00000 n 0000279677 00000 n 0000279812 00000 n 0000279947 00000 n 0000280082 00000 n 0000280218 00000 n 0000280354 00000 n 0000280490 00000 n 0000280625 00000 n 0000280764 00000 n 0000280903 00000 n 0000281042 00000 n 0000281181 00000 n 0000281320 00000 n 0000281459 00000 n 0000284131 00000 n 0000284153 00000 n 0000284218 00000 n 0000284283 00000 n 0000284348 00000 n 0000284413 00000 n 0000284478 00000 n 0000284543 00000 n 0000284608 00000 n 0000284673 00000 n 0000284738 00000 n 0000284803 00000 n 0000284868 00000 n 0000284933 00000 n 0000284998 00000 n 0000285063 00000 n 0000285128 00000 n 0000285301 00000 n 0000285344 00000 n 0000285426 00000 n 0000285758 00000 n 0000287031 00000 n 0000287053 00000 n 0000287398 00000 n 0000289568 00000 n 0000289590 00000 n 0000289948 00000 n 0000294038 00000 n 0000294060 00000 n 0000294438 00000 n 0000294595 00000 n 0000299164 00000 n 0000299186 00000 n 0000299531 00000 n 0000301615 00000 n 0000301637 00000 n 0000302015 00000 n 0000302172 00000 n 0000305334 00000 n 0000305356 00000 n 0000305701 00000 n 0000309187 00000 n 0000309209 00000 n 0000309555 00000 n 0000312501 00000 n 0000312523 00000 n 0000312869 00000 n 0000316639 00000 n 0000316661 00000 n 0000317021 00000 n 0000320114 00000 n 0000320136 00000 n 0000320482 00000 n 0000322441 00000 n 0000322463 00000 n 0000322809 00000 n 0000323544 00000 n 0000323565 00000 n 0000323911 00000 n 0000324966 00000 n 0000324987 00000 n 0000325346 00000 n 0000326776 00000 n 0000326798 00000 n 0000327160 00000 n 0000327190 00000 n 0000328144 00000 n 0000328165 00000 n 0000328527 00000 n 0000328557 00000 n 0000330510 00000 n 0000330532 00000 n 0000330908 00000 n 0000330938 00000 n 0000336376 00000 n 0000336398 00000 n 0000336745 00000 n 0000341056 00000 n 0000341078 00000 n 0000341427 00000 n 0000342438 00000 n 0000342460 00000 n 0000342616 00000 n 0000342806 00000 n 0000343296 00000 n 0000343760 00000 n 0000343956 00000 n 0000344163 00000 n 0000351176 00000 n 0000351391 00000 n 0000359584 00000 n 0000359811 00000 n 0000381258 00000 n 0000381503 00000 n 0000390375 00000 n 0000390596 00000 n 0000401754 00000 n 0000401994 00000 n 0000402308 00000 n 0000402467 00000 n 0000402569 00000 n 0000402731 00000 n 0000402795 00000 n 0000402957 00000 n 0000403046 00000 n 0000403113 00000 n 0000403226 00000 n 0000403347 00000 n 0000403470 00000 n 0000403604 00000 n 0000403735 00000 n 0000403868 00000 n 0000404000 00000 n 0000404174 00000 n 0000404284 00000 n 0000404419 00000 n 0000404571 00000 n 0000404719 00000 n 0000404866 00000 n 0000404994 00000 n 0000405132 00000 n 0000405957 00000 n 0000406041 00000 n 0000406125 00000 n 0000406831 00000 n 0000406983 00000 n 0000407067 00000 n 0000407151 00000 n 0000407235 00000 n 0000407319 00000 n 0000407403 00000 n 0000407487 00000 n 0000407571 00000 n 0000407655 00000 n 0000407740 00000 n 0000407825 00000 n 0000407910 00000 n 0000407995 00000 n 0000408080 00000 n 0000408165 00000 n 0000408250 00000 n 0000408335 00000 n 0000408420 00000 n 0000408505 00000 n 0000408590 00000 n 0000408675 00000 n 0000408760 00000 n 0000408845 00000 n 0000408930 00000 n 0000409015 00000 n 0000409100 00000 n 0000409185 00000 n 0000409270 00000 n 0000409355 00000 n 0000409440 00000 n 0000409523 00000 n 0000409606 00000 n 0000409758 00000 n 0000409843 00000 n 0000409928 00000 n 0000410013 00000 n 0000410098 00000 n 0000410238 00000 n 0000410345 00000 n 0000410511 00000 n 0000410593 00000 n 0000410748 00000 n 0000410830 00000 n 0000410937 00000 n 0000411019 00000 n 0000411101 00000 n 0000411210 00000 n 0000411292 00000 n 0000411451 00000 n 0000411534 00000 n 0000411643 00000 n 0000411726 00000 n 0000411809 00000 n 0000411918 00000 n 0000412001 00000 n 0000412084 00000 n 0000412193 00000 n 0000412276 00000 n 0000412359 00000 n 0000412468 00000 n 0000412551 00000 n 0000412634 00000 n 0000412743 00000 n 0000412826 00000 n 0000412909 00000 n 0000413018 00000 n 0000413101 00000 n 0000413184 00000 n 0000413293 00000 n 0000413376 00000 n 0000413459 00000 n 0000413568 00000 n 0000413651 00000 n 0000413734 00000 n 0000413843 00000 n 0000413926 00000 n 0000414009 00000 n 0000414118 00000 n 0000414201 00000 n 0000414284 00000 n 0000414393 00000 n 0000414476 00000 n 0000414559 00000 n 0000414668 00000 n 0000414751 00000 n 0000414834 00000 n 0000414920 00000 n 0000415017 00000 n 0000415184 00000 n 0000415277 00000 n 0000415374 00000 n 0000415547 00000 n 0000415644 00000 n 0000415737 00000 n 0000415834 00000 n 0000415931 00000 n 0000416024 00000 n 0000416121 00000 n 0000416293 00000 n 0000416404 00000 n 0000416464 00000 n 0000416620 00000 n 0000416717 00000 n 0000416816 00000 n 0000416917 00000 n 0000417090 00000 n 0000417189 00000 n 0000417347 00000 n 0000417449 00000 n 0000417549 00000 n 0000417651 00000 n 0000417751 00000 n 0000417853 00000 n 0000417953 00000 n 0000418055 00000 n 0000418157 00000 n 0000418257 00000 n 0000418359 00000 n 0000418459 00000 n 0000418561 00000 n 0000418662 00000 n 0000418761 00000 n 0000418862 00000 n 0000418961 00000 n 0000419062 00000 n 0000419159 00000 n 0000419252 00000 n 0000419349 00000 n 0000419470 00000 n 0000419591 00000 n 0000419749 00000 n 0000419871 00000 n 0000419993 00000 n 0000420115 00000 n 0000420237 00000 n 0000420355 00000 n 0000420411 00000 n 0000420571 00000 n 0000420689 00000 n 0000420745 00000 n 0000420863 00000 n 0000420919 00000 n 0000421037 00000 n 0000421093 00000 n 0000421211 00000 n 0000421267 00000 n 0000421385 00000 n 0000421441 00000 n 0000421559 00000 n 0000421615 00000 n 0000421733 00000 n 0000421789 00000 n 0000421907 00000 n 0000421963 00000 n 0000422081 00000 n 0000422137 00000 n 0000422255 00000 n 0000422311 00000 n 0000422429 00000 n 0000422485 00000 n 0000422603 00000 n 0000422659 00000 n 0000422777 00000 n 0000422833 00000 n 0000422951 00000 n 0000423007 00000 n 0000423125 00000 n 0000423181 00000 n 0000423299 00000 n 0000423355 00000 n 0000423473 00000 n 0000423529 00000 n 0000423647 00000 n 0000423703 00000 n 0000423821 00000 n 0000423877 00000 n 0000423995 00000 n 0000424051 00000 n 0000424169 00000 n 0000424225 00000 n 0000424343 00000 n 0000424399 00000 n 0000424517 00000 n 0000424573 00000 n 0000424691 00000 n 0000424747 00000 n 0000424865 00000 n 0000424921 00000 n 0000425039 00000 n 0000425095 00000 n 0000425213 00000 n 0000425269 00000 n 0000425387 00000 n 0000425443 00000 n 0000425561 00000 n 0000425617 00000 n 0000425735 00000 n 0000425791 00000 n 0000425909 00000 n 0000425965 00000 n 0000426083 00000 n 0000426139 00000 n 0000426257 00000 n 0000426313 00000 n 0000426431 00000 n 0000426487 00000 n 0000426605 00000 n 0000426661 00000 n 0000426779 00000 n 0000426835 00000 n 0000426953 00000 n 0000427009 00000 n 0000427127 00000 n 0000427183 00000 n 0000427301 00000 n 0000427357 00000 n 0000427475 00000 n 0000427531 00000 n 0000427649 00000 n 0000427705 00000 n 0000427823 00000 n 0000427879 00000 n 0000427997 00000 n 0000428053 00000 n 0000428171 00000 n 0000428227 00000 n 0000428345 00000 n 0000428401 00000 n 0000428519 00000 n 0000428575 00000 n 0000428693 00000 n 0000428749 00000 n 0000428867 00000 n 0000428923 00000 n 0000429041 00000 n 0000429097 00000 n 0000429215 00000 n 0000429271 00000 n 0000429389 00000 n 0000429445 00000 n 0000429563 00000 n 0000429619 00000 n 0000429737 00000 n 0000429793 00000 n 0000429910 00000 n 0000429966 00000 n 0000430083 00000 n 0000430139 00000 n 0000430256 00000 n 0000430312 00000 n 0000430429 00000 n 0000430485 00000 n 0000430602 00000 n 0000430658 00000 n 0000430775 00000 n 0000430831 00000 n 0000430948 00000 n 0000431004 00000 n 0000431121 00000 n 0000431177 00000 n 0000431294 00000 n 0000431350 00000 n 0000431467 00000 n 0000431523 00000 n 0000431641 00000 n 0000431697 00000 n 0000431815 00000 n 0000431871 00000 n 0000431989 00000 n 0000432045 00000 n 0000432163 00000 n 0000432219 00000 n 0000432337 00000 n 0000432393 00000 n 0000432511 00000 n 0000432567 00000 n 0000432685 00000 n 0000432741 00000 n 0000432859 00000 n 0000432915 00000 n 0000433033 00000 n 0000433089 00000 n 0000433207 00000 n 0000433263 00000 n 0000433381 00000 n 0000433437 00000 n 0000433555 00000 n 0000433611 00000 n 0000433729 00000 n 0000433785 00000 n 0000433903 00000 n 0000433959 00000 n 0000434077 00000 n 0000434133 00000 n 0000434251 00000 n 0000434307 00000 n 0000434426 00000 n 0000434482 00000 n 0000434601 00000 n 0000434657 00000 n 0000434776 00000 n 0000434832 00000 n 0000434951 00000 n 0000435007 00000 n 0000435105 00000 n 0000435203 00000 n 0000435301 00000 n 0000435395 00000 n 0000435493 00000 n 0000435591 00000 n 0000435704 00000 n 0000435790 00000 n 0000435905 00000 n 0000435988 00000 n 0000436155 00000 n 0000436270 00000 n 0000436359 00000 n 0000436454 00000 n 0000436549 00000 n 0000436644 00000 n 0000436739 00000 n 0000436834 00000 n 0000436929 00000 n 0000437024 00000 n 0000437120 00000 n 0000437216 00000 n 0000437312 00000 n 0000437408 00000 n 0000437504 00000 n 0000437600 00000 n 0000437696 00000 n 0000437792 00000 n 0000437888 00000 n 0000437984 00000 n 0000438080 00000 n 0000438176 00000 n 0000438272 00000 n 0000438368 00000 n 0000438464 00000 n 0000438560 00000 n 0000438654 00000 n 0000438752 00000 n 0000438850 00000 n 0000438948 00000 n 0000439044 00000 n 0000439140 00000 n 0000439236 00000 n 0000439332 00000 n 0000439428 00000 n 0000439524 00000 n 0000439620 00000 n 0000439731 00000 n 0000439816 00000 n 0000439911 00000 n 0000440006 00000 n 0000440101 00000 n 0000440196 00000 n 0000440289 00000 n 0000440386 00000 n 0000440481 00000 n 0000440583 00000 n 0000440756 00000 n 0000440852 00000 n 0000440954 00000 n 0000441050 00000 n 0000441152 00000 n 0000441250 00000 n 0000441364 00000 n 0000441458 00000 n 0000441625 00000 n 0000441723 00000 n 0000441821 00000 n 0000441923 00000 n 0000442096 00000 n 0000442193 00000 n 0000442294 00000 n 0000442391 00000 n 0000442492 00000 n 0000442593 00000 n 0000442690 00000 n 0000442791 00000 n 0000442888 00000 n 0000442989 00000 n 0000443086 00000 n 0000443188 00000 n 0000443286 00000 n 0000443388 00000 n 0000443486 00000 n 0000443588 00000 n 0000443686 00000 n 0000443788 00000 n 0000443886 00000 n 0000443988 00000 n 0000444086 00000 n 0000444188 00000 n 0000444285 00000 n 0000444386 00000 n 0000444483 00000 n 0000444584 00000 n 0000444681 00000 n 0000444782 00000 n 0000444879 00000 n 0000444980 00000 n 0000445077 00000 n 0000445178 00000 n 0000445276 00000 n 0000445378 00000 n 0000445472 00000 n 0000445570 00000 n 0000445662 00000 n 0000445764 00000 n 0000445937 00000 n 0000446039 00000 n 0000446131 00000 n 0000446233 00000 n 0000446335 00000 n 0000446437 00000 n 0000446529 00000 n 0000446631 00000 n 0000446722 00000 n 0000446823 00000 n 0000446914 00000 n 0000447015 00000 n 0000447116 00000 n 0000447207 00000 n 0000447308 00000 n 0000447409 00000 n 0000447500 00000 n 0000447601 00000 n 0000447703 00000 n 0000447795 00000 n 0000447897 00000 n 0000447999 00000 n 0000448101 00000 n 0000448203 00000 n 0000448305 00000 n 0000448397 00000 n 0000448499 00000 n 0000448601 00000 n 0000448703 00000 n 0000448796 00000 n 0000448893 00000 n 0000448990 00000 n 0000449085 00000 n 0000449186 00000 n 0000449287 00000 n 0000449388 00000 n 0000449494 00000 n 0000449573 00000 n 0000449679 00000 n 0000449758 00000 n 0000449864 00000 n 0000449943 00000 n 0000450050 00000 n 0000450129 00000 n 0000450225 00000 n 0000450327 00000 n 0000450423 00000 n 0000450525 00000 n 0000450627 00000 n 0000450729 00000 n 0000450825 00000 n 0000450927 00000 n 0000451029 00000 n 0000451131 00000 n 0000451227 00000 n 0000451329 00000 n 0000451425 00000 n 0000451527 00000 n 0000451628 00000 n 0000451729 00000 n 0000451824 00000 n 0000451925 00000 n 0000452020 00000 n 0000452121 00000 n 0000452216 00000 n 0000452317 00000 n 0000452412 00000 n 0000452513 00000 n 0000452609 00000 n 0000452711 00000 n 0000452807 00000 n 0000452909 00000 n 0000453011 00000 n 0000453104 00000 n 0000453201 00000 n 0000453302 00000 n 0000453395 00000 n 0000453492 00000 n 0000453587 00000 n 0000453682 00000 n 0000453777 00000 n 0000453872 00000 n 0000453967 00000 n 0000454062 00000 n 0000454157 00000 n 0000454252 00000 n 0000454348 00000 n 0000454444 00000 n 0000454542 00000 n 0000454635 00000 n 0000454758 00000 n 0000454812 00000 n 0000454964 00000 n 0000455059 00000 n 0000455154 00000 n 0000455249 00000 n 0000455344 00000 n 0000455467 00000 n 0000455521 00000 n 0000455618 00000 n 0000455715 00000 n 0000455812 00000 n 0000455905 00000 n 0000456016 00000 n 0000456121 00000 n 0000456204 00000 n 0000456297 00000 n 0000456408 00000 n 0000456513 00000 n 0000456596 00000 n 0000456693 00000 n 0000456790 00000 n 0000456887 00000 n 0000456990 00000 n 0000457143 00000 n 0000457252 00000 n 0000457405 00000 n 0000457561 00000 n 0000457666 00000 n 0000457749 00000 n 0000457839 00000 n 0000457934 00000 n 0000458102 00000 n 0000458192 00000 n 0000458287 00000 n 0000458377 00000 n 0000458473 00000 n 0000458564 00000 n 0000458700 00000 n 0000458795 00000 n 0000458885 00000 n 0000458980 00000 n 0000459070 00000 n 0000459165 00000 n 0000459255 00000 n 0000459350 00000 n 0000459445 00000 n 0000459540 00000 n 0000459636 00000 n 0000459732 00000 n 0000459828 00000 n 0000459919 00000 n 0000460015 00000 n 0000460111 00000 n 0000460223 00000 n 0000460277 00000 n 0000460389 00000 n 0000460443 00000 n 0000460555 00000 n 0000460609 00000 n 0000460721 00000 n 0000460775 00000 n 0000460871 00000 n 0000460969 00000 n 0000461072 00000 n 0000461175 00000 n 0000461327 00000 n 0000461440 00000 n 0000461533 00000 n 0000461646 00000 n 0000461739 00000 n 0000461881 00000 n 0000461975 00000 n 0000462095 00000 n 0000462187 00000 n 0000462580 00000 n 0000462660 00000 n 0000464887 00000 n 0000465070 00000 n 0000465264 00000 n 0000465365 00000 n 0000465446 00000 n 0000465506 00000 n 0000465564 00000 n 0000465645 00000 n 0000465705 00000 n 0000465763 00000 n 0000465844 00000 n 0000465904 00000 n 0000465962 00000 n 0000466043 00000 n 0000466103 00000 n 0000466161 00000 n 0000466242 00000 n 0000466302 00000 n 0000466360 00000 n 0000466441 00000 n 0000466501 00000 n 0000466559 00000 n 0000466660 00000 n 0000466741 00000 n 0000466801 00000 n 0000466859 00000 n 0000466940 00000 n 0000467000 00000 n 0000467058 00000 n 0000467139 00000 n 0000467199 00000 n 0000467257 00000 n 0000467338 00000 n 0000467398 00000 n 0000467456 00000 n 0000467537 00000 n 0000467597 00000 n 0000467655 00000 n 0000467736 00000 n 0000467796 00000 n 0000467854 00000 n 0000467955 00000 n 0000468036 00000 n 0000468096 00000 n 0000468154 00000 n 0000468235 00000 n 0000468295 00000 n 0000468353 00000 n 0000468434 00000 n 0000468494 00000 n 0000468552 00000 n 0000468633 00000 n 0000468693 00000 n 0000468751 00000 n 0000468832 00000 n 0000468892 00000 n 0000468950 00000 n 0000469031 00000 n 0000469091 00000 n 0000469149 00000 n 0000469250 00000 n 0000469331 00000 n 0000469391 00000 n 0000469449 00000 n 0000469530 00000 n 0000469590 00000 n 0000469648 00000 n 0000469729 00000 n 0000469789 00000 n 0000469847 00000 n 0000469928 00000 n 0000469988 00000 n 0000470046 00000 n 0000470127 00000 n 0000470187 00000 n 0000470245 00000 n 0000470326 00000 n 0000470386 00000 n 0000470444 00000 n 0000470545 00000 n 0000470626 00000 n 0000470686 00000 n 0000470744 00000 n 0000470825 00000 n 0000470885 00000 n 0000470943 00000 n 0000471024 00000 n 0000471084 00000 n 0000471142 00000 n 0000471223 00000 n 0000471283 00000 n 0000471341 00000 n 0000471422 00000 n 0000471482 00000 n 0000471540 00000 n 0000471621 00000 n 0000471681 00000 n 0000471739 00000 n 0000471840 00000 n 0000471921 00000 n 0000471981 00000 n 0000472039 00000 n 0000472120 00000 n 0000472180 00000 n 0000472238 00000 n 0000472319 00000 n 0000472379 00000 n 0000472437 00000 n 0000472518 00000 n 0000472578 00000 n 0000472636 00000 n 0000472717 00000 n 0000472777 00000 n 0000472835 00000 n 0000472916 00000 n 0000472976 00000 n 0000473034 00000 n 0000473135 00000 n 0000473216 00000 n 0000473276 00000 n 0000473334 00000 n 0000473415 00000 n 0000473475 00000 n 0000473533 00000 n 0000473614 00000 n 0000473674 00000 n 0000473732 00000 n 0000473813 00000 n 0000473873 00000 n 0000473931 00000 n 0000474012 00000 n 0000474072 00000 n 0000474130 00000 n 0000474211 00000 n 0000474271 00000 n 0000474329 00000 n 0000474430 00000 n 0000474511 00000 n 0000474571 00000 n 0000474629 00000 n 0000474710 00000 n 0000474770 00000 n 0000474828 00000 n 0000474909 00000 n 0000474969 00000 n 0000475027 00000 n 0000475108 00000 n 0000475168 00000 n 0000475226 00000 n 0000475307 00000 n 0000475367 00000 n 0000475425 00000 n 0000475506 00000 n 0000475566 00000 n 0000475624 00000 n 0000475725 00000 n 0000475806 00000 n 0000475866 00000 n 0000475924 00000 n 0000476005 00000 n 0000476065 00000 n 0000476123 00000 n 0000476204 00000 n 0000476264 00000 n 0000476322 00000 n 0000476403 00000 n 0000476463 00000 n 0000476521 00000 n 0000476602 00000 n 0000476662 00000 n 0000476720 00000 n 0000476801 00000 n 0000476861 00000 n 0000476919 00000 n 0000477020 00000 n 0000477101 00000 n 0000477161 00000 n 0000477219 00000 n 0000477300 00000 n 0000477360 00000 n 0000477418 00000 n 0000477499 00000 n 0000477559 00000 n 0000477617 00000 n 0000477698 00000 n 0000477758 00000 n 0000477816 00000 n 0000477897 00000 n 0000477957 00000 n 0000478015 00000 n 0000478096 00000 n 0000478156 00000 n 0000478214 00000 n 0000478315 00000 n 0000478396 00000 n 0000478456 00000 n 0000478514 00000 n 0000478595 00000 n 0000478655 00000 n 0000478713 00000 n 0000478794 00000 n 0000478854 00000 n 0000478912 00000 n 0000478993 00000 n 0000479053 00000 n 0000479111 00000 n 0000479192 00000 n 0000479252 00000 n 0000479310 00000 n 0000479391 00000 n 0000479451 00000 n 0000479509 00000 n 0000479610 00000 n 0000479691 00000 n 0000479751 00000 n 0000479809 00000 n 0000479890 00000 n 0000479950 00000 n 0000480008 00000 n 0000480089 00000 n 0000480149 00000 n 0000480207 00000 n 0000480288 00000 n 0000480348 00000 n 0000480406 00000 n 0000480487 00000 n 0000480547 00000 n 0000480605 00000 n 0000480686 00000 n 0000480746 00000 n 0000480804 00000 n 0000480905 00000 n 0000480986 00000 n 0000481046 00000 n 0000481104 00000 n 0000481185 00000 n 0000481245 00000 n 0000481303 00000 n 0000481384 00000 n 0000481444 00000 n 0000481502 00000 n 0000481583 00000 n 0000481643 00000 n 0000481701 00000 n 0000481782 00000 n 0000481842 00000 n 0000481900 00000 n 0000481981 00000 n 0000482041 00000 n 0000482099 00000 n 0000482200 00000 n 0000482281 00000 n 0000482341 00000 n 0000482399 00000 n 0000482480 00000 n 0000482540 00000 n 0000482598 00000 n 0000482679 00000 n 0000482739 00000 n 0000482797 00000 n 0000482878 00000 n 0000482938 00000 n 0000482996 00000 n 0000483077 00000 n 0000483137 00000 n 0000483195 00000 n 0000483276 00000 n 0000483336 00000 n 0000483394 00000 n 0000483499 00000 n 0000483580 00000 n 0000483640 00000 n 0000483698 00000 n 0000483779 00000 n 0000483839 00000 n 0000483897 00000 n 0000483981 00000 n 0000484042 00000 n 0000484101 00000 n 0000484185 00000 n 0000484246 00000 n 0000484305 00000 n 0000484389 00000 n 0000484450 00000 n 0000484509 00000 n 0000484593 00000 n 0000484654 00000 n 0000484713 00000 n 0000484771 00000 n 0000484830 00000 n 0000484888 00000 n 0000484947 00000 n 0000485005 00000 n 0000485064 00000 n 0000485122 00000 n 0000485181 00000 n 0000485239 00000 n 0000485298 00000 n 0000485356 00000 n 0000485415 00000 n 0000485473 00000 n 0000485532 00000 n 0000485590 00000 n 0000485649 00000 n 0000485707 00000 n 0000485766 00000 n 0000485824 00000 n 0000485883 00000 n 0000485972 00000 n 0000486031 00000 n 0000486090 00000 n 0000486149 00000 n 0000486208 00000 n 0000486266 00000 n 0000486325 00000 n 0000486383 00000 n 0000486442 00000 n 0000486500 00000 n 0000486559 00000 n 0000486617 00000 n 0000486676 00000 n 0000486734 00000 n 0000486793 00000 n 0000486851 00000 n 0000486910 00000 n 0000486968 00000 n 0000487027 00000 n 0000487085 00000 n 0000487144 00000 n 0000487202 00000 n 0000487261 00000 n 0000487319 00000 n 0000487378 00000 n 0000487436 00000 n 0000487495 00000 n 0000487553 00000 n 0000487612 00000 n 0000487670 00000 n 0000487729 00000 n 0000487793 00000 n 0000487857 00000 n 0000487954 00000 n 0000488045 00000 n 0000488138 00000 n 0000488269 00000 n 0000488597 00000 n 0000488858 00000 n 0000488979 00000 n 0000489303 00000 n 0000489838 00000 n 0000489908 00000 n 0000489978 00000 n 0000490048 00000 n 0000490118 00000 n 0000490188 00000 n 0000490258 00000 n 0000490328 00000 n 0000490398 00000 n 0000490468 00000 n 0000490538 00000 n 0000490608 00000 n 0000490678 00000 n 0000490748 00000 n 0000490818 00000 n 0000490888 00000 n 0000490958 00000 n 0000491028 00000 n 0000491098 00000 n 0000491168 00000 n 0000491238 00000 n 0000491308 00000 n 0000491378 00000 n 0000491448 00000 n 0000491518 00000 n 0000491588 00000 n 0000491658 00000 n 0000491728 00000 n 0000491798 00000 n 0000491868 00000 n 0000491938 00000 n 0000491986 00000 n 0000492188 00000 n 0000492764 00000 n 0000493112 00000 n 0000493168 00000 n 0000493238 00000 n 0000493562 00000 n 0000493632 00000 n 0000493850 00000 n 0000493906 00000 n 0000494100 00000 n 0000494310 00000 n 0000494504 00000 n 0000494731 00000 n 0000494876 00000 n 0000494924 00000 n 0000495053 00000 n 0000495158 00000 n 0000495214 00000 n 0000495284 00000 n 0000495356 00000 n 0000495426 00000 n 0000495555 00000 n 0000495625 00000 n 0000495746 00000 n 0000495851 00000 n 0000495948 00000 n 0000496585 00000 n 0000496608 00000 n 0000496988 00000 n 0000497011 00000 n 0000497391 00000 n 0000497414 00000 n 0000497620 00000 n 0000497642 00000 n 0000497959 00000 n 0000497982 00000 n 0000498426 00000 n 0000498449 00000 n 0000498910 00000 n 0000498933 00000 n 0000499549 00000 n 0000499572 00000 n 0000500061 00000 n 0000500084 00000 n 0000500610 00000 n 0000500633 00000 n 0000501111 00000 n 0000501134 00000 n 0000501603 00000 n 0000501626 00000 n 0000502142 00000 n 0000502165 00000 n 0000502630 00000 n 0000502653 00000 n 0000503031 00000 n 0000503054 00000 n 0000503338 00000 n 0000503361 00000 n 0000503643 00000 n 0000503666 00000 n 0000504009 00000 n 0000504032 00000 n 0000504329 00000 n 0000504352 00000 n 0000504717 00000 n 0000504740 00000 n 0000505372 00000 n 0000505395 00000 n 0000505991 00000 n 0000506014 00000 n 0000506377 00000 n 0000506400 00000 n 0000506423 00000 n 0000507003 00000 n 0000507060 00000 n 0000507093 00000 n 0000507141 00000 n 0000507411 00000 n 0000508645 00000 n 0000508796 00000 n 0000508885 00000 n 0000509036 00000 n trailer << /Size 1188 /ID[<1553464852702e815f20c49ad7ccca2d><1a7db43637339ee98d4ee428c1766dfe>] >> startxref 173 %%EOF egenix-mx-base-3.2.7/mx/URL/mxURL/0000755000175000017500000000000012251446113016304 5ustar lemburglemburgegenix-mx-base-3.2.7/mx/URL/mxURL/COPYRIGHT0000664000175000017500000000176211552064177017620 0ustar lemburglemburg --------------------------------------------------------------------- COPYRIGHT NOTICE --------------------------------------------------------------------- Copyright (c) 1997-2000, IKDS Marc-Andre Lemburg; mailto:mal@lemburg.com Copyright (c) 2000-2011, eGenix.com Software GmbH; mailto:info@egenix.com All Rights Reserved. This software is protected by copyright and other intellectual property laws and by international treaties. It may only be used under the conditions and terms of the eGenix.com Public License Agreement. You should have received a copy of the eGenix.com Public License Agreement with this software (usually in the file LICENSE located in the package's or software's main directory). Please write to licenses@egenix.com to obtain a copy in case you should not have received a copy. egenix-mx-base-3.2.7/mx/URL/mxURL/LICENSE0000664000175000017500000001075307620177404017331 0ustar lemburglemburg________________________________________________________________________ EGENIX.COM PUBLIC LICENSE AGREEMENT VERSION 1.1.0 ________________________________________________________________________ 1. Introduction This "License Agreement" is between eGenix.com Software, Skills and Services GmbH ("eGenix.com"), having an office at Pastor-Loeh-Str. 48, D-40764 Langenfeld, Germany, and the Individual or Organization ("Licensee") accessing and otherwise using this software in source or binary form and its associated documentation ("the Software"). 2. License Subject to the terms and conditions of this eGenix.com Public License Agreement, eGenix.com hereby grants Licensee a non-exclusive, royalty-free, world-wide license to reproduce, analyze, test, perform and/or display publicly, prepare derivative works, distribute, and otherwise use the Software alone or in any derivative version, provided, however, that the eGenix.com Public License Agreement is retained in the Software, or in any derivative version of the Software prepared by Licensee. 3. NO WARRANTY eGenix.com is making the Software available to Licensee on an "AS IS" basis. SUBJECT TO ANY STATUTORY WARRANTIES WHICH CAN NOT BE EXCLUDED, EGENIX.COM MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, EGENIX.COM MAKES NO AND DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF THE SOFTWARE WILL NOT INFRINGE ANY THIRD PARTY RIGHTS. 4. LIMITATION OF LIABILITY EGENIX.COM SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF THE SOFTWARE FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS (INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF BUSINESS PROFITS, BUSINESS INTERRUPTION, LOSS OF BUSINESS INFORMATION, OR OTHER PECUNIARY LOSS) AS A RESULT OF USING, MODIFYING OR DISTRIBUTING THE SOFTWARE, OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO THE ABOVE EXCLUSION OR LIMITATION MAY NOT APPLY TO LICENSEE. 5. Termination This License Agreement will automatically terminate upon a material breach of its terms and conditions. 6. Third Party Rights Any software or documentation in source or binary form provided along with the Software that is associated with a separate license agreement is licensed to Licensee under the terms of that license agreement. This License Agreement does not apply to those portions of the Software. Copies of the third party licenses are included in the Software Distribution. 7. General Nothing in this License Agreement affects any statutory rights of consumers that cannot be waived or limited by contract. Nothing in this License Agreement shall be deemed to create any relationship of agency, partnership, or joint venture between eGenix.com and Licensee. If any provision of this License Agreement shall be unlawful, void, or for any reason unenforceable, such provision shall be modified to the extent necessary to render it enforceable without losing its intent, or, if no such modification is possible, be severed from this License Agreement and shall not affect the validity and enforceability of the remaining provisions of this License Agreement. This License Agreement shall be governed by and interpreted in all respects by the law of Germany, excluding conflict of law provisions. It shall not be governed by the United Nations Convention on Contracts for International Sale of Goods. This License Agreement does not grant permission to use eGenix.com trademarks or trade names in a trademark sense to endorse or promote products or services of Licensee, or any third party. The controlling language of this License Agreement is English. If Licensee has received a translation into another language, it has been provided for Licensee's convenience only. 8. Agreement By downloading, copying, installing or otherwise using the Software, Licensee agrees to be bound by the terms and conditions of this License Agreement. For question regarding this License Agreement, please write to: eGenix.com Software, Skills and Services GmbH Pastor-Loeh-Str. 48 D-40764 Langenfeld Germany egenix-mx-base-3.2.7/mx/URL/mxURL/Makefile.pre.in0000664000175000017500000002445111136427173021154 0ustar lemburglemburg# Universal Unix Makefile for Python extensions # ============================================= # Short Instructions # ------------------ # 1. Build and install Python (1.5 or newer). # 2. "make -f Makefile.pre.in boot" # 3. "make" # You should now have a shared library. # Long Instructions # ----------------- # Build *and install* the basic Python 1.5 distribution. See the # Python README for instructions. (This version of Makefile.pre.in # only withs with Python 1.5, alpha 3 or newer.) # Create a file Setup.in for your extension. This file follows the # format of the Modules/Setup.dist file; see the instructions there. # For a simple module called "spam" on file "spammodule.c", it can # contain a single line: # spam spammodule.c # You can build as many modules as you want in the same directory -- # just have a separate line for each of them in the Setup.in file. # If you want to build your extension as a shared library, insert a # line containing just the string # *shared* # at the top of your Setup.in file. # Note that the build process copies Setup.in to Setup, and then works # with Setup. It doesn't overwrite Setup when Setup.in is changed, so # while you're in the process of debugging your Setup.in file, you may # want to edit Setup instead, and copy it back to Setup.in later. # (All this is done so you can distribute your extension easily and # someone else can select the modules they actually want to build by # commenting out lines in the Setup file, without editing the # original. Editing Setup is also used to specify nonstandard # locations for include or library files.) # Copy this file (Misc/Makefile.pre.in) to the directory containing # your extension. # Run "make -f Makefile.pre.in boot". This creates Makefile # (producing Makefile.pre and sedscript as intermediate files) and # config.c, incorporating the values for sys.prefix, sys.exec_prefix # and sys.version from the installed Python binary. For this to work, # the python binary must be on your path. If this fails, try # make -f Makefile.pre.in Makefile VERSION=1.5 installdir= # where is the prefix used to install Python for installdir # (and possibly similar for exec_installdir=). # Note: "make boot" implies "make clobber" -- it assumes that when you # bootstrap you may have changed platforms so it removes all previous # output files. # If you are building your extension as a shared library (your # Setup.in file starts with *shared*), run "make" or "make sharedmods" # to build the shared library files. If you are building a statically # linked Python binary (the only solution of your platform doesn't # support shared libraries, and sometimes handy if you want to # distribute or install the resulting Python binary), run "make # python". # Note: Each time you edit Makefile.pre.in or Setup, you must run # "make Makefile" before running "make". # Hint: if you want to use VPATH, you can start in an empty # subdirectory and say (e.g.): # make -f ../Makefile.pre.in boot srcdir=.. VPATH=.. # === Bootstrap variables (edited through "make boot") === # The prefix used by "make inclinstall libainstall" of core python installdir= /usr/local # The exec_prefix used by the same exec_installdir=$(installdir) # Source directory and VPATH in case you want to use VPATH. # (You will have to edit these two lines yourself -- there is no # automatic support as the Makefile is not generated by # config.status.) srcdir= . VPATH= . # === Variables that you may want to customize (rarely) === # (Static) build target TARGET= python # Installed python binary (used only by boot target) PYTHON= python # Add more -I and -D options here CFLAGS= $(OPT) -I$(INCLUDEPY) -I$(EXECINCLUDEPY) $(DEFS) # These two variables can be set in Setup to merge extensions. # See example[23]. BASELIB= BASESETUP= # === Variables set by makesetup === MODOBJS= _MODOBJS_ MODLIBS= _MODLIBS_ # === Definitions added by makesetup === # === Variables from configure (through sedscript) === VERSION= @VERSION@ CC= @CC@ CXX= @CXX@ MAINCC= @MAINCC@ LINKCC= @LINKCC@ SGI_ABI= @SGI_ABI@ OPT= @OPT@ CPPFLAGS= @CPPFLAGS@ LDFLAGS= @LDFLAGS@ LDLAST= @LDLAST@ DEFS= LIBS= @LIBS@ LIBM= @LIBM@ LIBC= @LIBC@ RANLIB= @RANLIB@ MACHDEP= @MACHDEP@ SO= @SO@ LDSHARED= @LDSHARED@ BLDSHARED= @BLDSHARED@ CCSHARED= @CCSHARED@ LINKFORSHARED= @LINKFORSHARED@ CXX= @CXX@ # Install prefix for architecture-independent files prefix= /usr/local # Install prefix for architecture-dependent files exec_prefix= $(prefix) # Uncomment the following two lines for AIX #LINKCC= $(LIBPL)/makexp_aix $(LIBPL)/python.exp "" $(LIBRARY); $(PURIFY) $(CC) #LDSHARED= $(LIBPL)/ld_so_aix $(CC) -bI:$(LIBPL)/python.exp # === Fixed definitions === # Shell used by make (some versions default to the login shell, which is bad) SHELL= /bin/sh # Expanded directories BINDIR= $(exec_installdir)/bin LIBDIR= $(exec_prefix)/lib MANDIR= $(installdir)/man INCLUDEDIR= $(installdir)/include SCRIPTDIR= $(prefix)/lib # Detailed destination directories BINLIBDEST= $(LIBDIR)/python$(VERSION) LIBDEST= $(SCRIPTDIR)/python$(VERSION) INCLUDEPY= $(INCLUDEDIR)/python$(VERSION) EXECINCLUDEPY= $(exec_installdir)/include/python$(VERSION) LIBP= $(exec_installdir)/lib/python$(VERSION) DESTSHARED= $(BINLIBDEST)/site-packages LIBPL= $(LIBP)/config PYTHONLIBS= $(LIBPL)/libpython$(VERSION).a MAKESETUP= $(LIBPL)/makesetup MAKEFILE= $(LIBPL)/Makefile CONFIGC= $(LIBPL)/config.c CONFIGCIN= $(LIBPL)/config.c.in SETUP= $(LIBPL)/Setup.config $(LIBPL)/Setup.local $(LIBPL)/Setup SYSLIBS= $(LIBM) $(LIBC) ADDOBJS= $(LIBPL)/python.o config.o # Portable install script (configure doesn't always guess right) INSTALL= $(LIBPL)/install-sh -c # Shared libraries must be installed with executable mode on some systems; # rather than figuring out exactly which, we always give them executable mode. # Also, making them read-only seems to be a good idea... INSTALL_SHARED= ${INSTALL} -m 555 # === Fixed rules === # Default target. This builds shared libraries only default: sharedmods # Build everything all: static sharedmods # Build shared libraries from our extension modules sharedmods: $(SHAREDMODS) # Build a static Python binary containing our extension modules static: $(TARGET) $(TARGET): $(ADDOBJS) lib.a $(PYTHONLIBS) Makefile $(BASELIB) $(LINKCC) $(LDFLAGS) $(LINKFORSHARED) \ $(ADDOBJS) lib.a $(PYTHONLIBS) \ $(LINKPATH) $(BASELIB) $(MODLIBS) $(LIBS) $(SYSLIBS) \ -o $(TARGET) $(LDLAST) install: sharedmods if test ! -d $(DESTSHARED) ; then \ mkdir $(DESTSHARED) ; else true ; fi -for i in X $(SHAREDMODS); do \ if test $$i != X; \ then $(INSTALL_SHARED) $$i $(DESTSHARED)/$$i; \ fi; \ done # Build the library containing our extension modules lib.a: $(MODOBJS) -rm -f lib.a ar cr lib.a $(MODOBJS) -$(RANLIB) lib.a # This runs makesetup *twice* to use the BASESETUP definition from Setup config.c Makefile: Makefile.pre Setup $(BASESETUP) $(MAKESETUP) $(MAKESETUP) \ -m Makefile.pre -c $(CONFIGCIN) Setup -n $(BASESETUP) $(SETUP) $(MAKE) -f Makefile do-it-again # Internal target to run makesetup for the second time do-it-again: $(MAKESETUP) \ -m Makefile.pre -c $(CONFIGCIN) Setup -n $(BASESETUP) $(SETUP) # Make config.o from the config.c created by makesetup config.o: config.c $(CC) $(CFLAGS) -c config.c # Setup is copied from Setup.in *only* if it doesn't yet exist Setup: cp $(srcdir)/Setup.in Setup # Make the intermediate Makefile.pre from Makefile.pre.in Makefile.pre: Makefile.pre.in sedscript sed -f sedscript $(srcdir)/Makefile.pre.in >Makefile.pre # Shortcuts to make the sed arguments on one line P=prefix E=exec_prefix H=Generated automatically from Makefile.pre.in by sedscript. L=LINKFORSHARED # Make the sed script used to create Makefile.pre from Makefile.pre.in sedscript: $(MAKEFILE) sed -n \ -e '1s/.*/1i\\/p' \ -e '2s%.*%# $H%p' \ -e '/^VERSION=/s/^VERSION=[ ]*\(.*\)/s%@VERSION[@]%\1%/p' \ -e '/^CC=/s/^CC=[ ]*\(.*\)/s%@CC[@]%\1%/p' \ -e '/^CXX=/s/^CXX=[ ]*\(.*\)/s%@CXX[@]%\1%/p' \ -e '/^DEFS=/s/^DEFS=[ ]*\(.*\)/s%@DEFS[@]%\1%/p' \ -e '/^MAINCC=/s/^MAINCC=[ ]*\(.*\)/s%@MAINCC[@]%\1%/p' \ -e '/^LINKCC=/s/^LINKCC=[ ]*\(.*\)/s%@LINKCC[@]%\1%/p' \ -e '/^OPT=/s/^OPT=[ ]*\(.*\)/s%@OPT[@]%\1%/p' \ -e '/^CPPFLAGS=/s/^CPPFLAGS=[ ]*\(.*\)/s%@CPPFLAGS[@]%\1%/p' \ -e '/^LDFLAGS=/s/^LDFLAGS=[ ]*\(.*\)/s%@LDFLAGS[@]%\1%/p' \ -e '/^LDLAST=/s/^LDLAST=[ ]*\(.*\)/s%@LDLAST[@]%\1%/p' \ -e '/^DEFS=/s/^DEFS=[ ]*\(.*\)/s%@DEFS[@]%\1%/p' \ -e '/^LIBS=/s/^LIBS=[ ]*\(.*\)/s%@LIBS[@]%\1%/p' \ -e '/^LIBM=/s/^LIBM=[ ]*\(.*\)/s%@LIBM[@]%\1%/p' \ -e '/^LIBC=/s/^LIBC=[ ]*\(.*\)/s%@LIBC[@]%\1%/p' \ -e '/^RANLIB=/s/^RANLIB=[ ]*\(.*\)/s%@RANLIB[@]%\1%/p' \ -e '/^MACHDEP=/s/^MACHDEP=[ ]*\(.*\)/s%@MACHDEP[@]%\1%/p' \ -e '/^SO=/s/^SO=[ ]*\(.*\)/s%@SO[@]%\1%/p' \ -e '/^LDSHARED=/s/^LDSHARED=[ ]*\(.*\)/s%@LDSHARED[@]%\1%/p' \ -e '/^BLDSHARED=/s/^BLDSHARED=[ ]*\(.*\)/s%@BLDSHARED[@]%\1%/p' \ -e '/^CCSHARED=/s/^CCSHARED=[ ]*\(.*\)/s%@CCSHARED[@]%\1%/p' \ -e '/^SGI_ABI=/s/^SGI_ABI=[ ]*\(.*\)/s%@SGI_ABI[@]%\1%/p' \ -e '/^$L=/s/^$L=[ ]*\(.*\)/s%@$L[@]%\1%/p' \ -e '/^$P=/s/^$P=\(.*\)/s%^$P=.*%$P=\1%/p' \ -e '/^$E=/s/^$E=\(.*\)/s%^$E=.*%$E=\1%/p' \ $(MAKEFILE) >sedscript echo "/^#@SET_CCC@/d" >>sedscript echo "/^installdir=/s%=.*%= $(installdir)%" >>sedscript echo "/^exec_installdir=/s%=.*%=$(exec_installdir)%" >>sedscript echo "/^srcdir=/s%=.*%= $(srcdir)%" >>sedscript echo "/^VPATH=/s%=.*%= $(VPATH)%" >>sedscript echo "/^LINKPATH=/s%=.*%= $(LINKPATH)%" >>sedscript echo "/^BASELIB=/s%=.*%= $(BASELIB)%" >>sedscript echo "/^BASESETUP=/s%=.*%= $(BASESETUP)%" >>sedscript # Bootstrap target boot: clobber VERSION=`$(PYTHON) -c "import sys; print sys.version[:3]"`; \ installdir=`$(PYTHON) -c "import sys; print sys.prefix"`; \ exec_installdir=`$(PYTHON) -c "import sys; print sys.exec_prefix"`; \ $(MAKE) -f $(srcdir)/Makefile.pre.in VPATH=$(VPATH) srcdir=$(srcdir) \ VERSION=$$VERSION \ installdir=$$installdir \ exec_installdir=$$exec_installdir \ Makefile # Handy target to remove intermediate files and backups clean: -rm -f *.o *~ # Handy target to remove everything that is easily regenerated clobber: clean -rm -f *.a tags TAGS config.c Makefile.pre $(TARGET) sedscript -rm -f *.so *.sl so_locations # Handy target to remove everything you don't want to distribute distclean: clobber -rm -f Makefile Setup egenix-mx-base-3.2.7/mx/URL/mxURL/Setup.in0000664000175000017500000000034707014026737017751 0ustar lemburglemburg# Build extensions shared: *shared* # # # mxURL module # mxURL \ # # Enable to have 'python -d' produce a logfile mxURL.log with # debugging information in the current working dir. # # -DMAL_DEBUG \ # -DMAL_REF_DEBUG \ # mxURL.c egenix-mx-base-3.2.7/mx/URL/mxURL/__init__.py0000664000175000017500000000025407400524246020424 0ustar lemburglemburgfrom mxURL import * from mxURL import __version__ # Python part of module initialization import mimetypes mimemap = mimetypes.types_map setmimedict(mimemap) del mimetypes egenix-mx-base-3.2.7/mx/URL/mxURL/ld_so_aix0000775000175000017500000001351507057236756020224 0ustar lemburglemburg#!/bin/sh # # ======================================================================== # FILE: ld_so_aix # TYPE: executable, uses makexp_aix # SYSTEM: AIX # # DESCRIPTION: Creates a shareable .o from a set of pre-compiled # (unshared) .o files # # USAGE: ld_so_aix [CC] [arguments] # # ARGUMENTS: Same as for "ld". The following arguments are processed # or supplied by this script (those marked with an asterisk # can be overriden from command line): # # Argument Default value # (*) -o [OutputFileName] -o shr.o # (*) -e [EntryPointLabel] -e init[OutputBaseName] # (*) -bE:[ExportFile] -bE:[OutputBaseName].exp # (*) -bI:[ImportFile] -bI:./python.exp # -bM:[ModuleType] -bM:SRE # -bhalt:[Number] -bhalt:4 # -T[Number] -T512 # -H[Number] -H512 # -lm # # The compiler specific ("-lc" or "-lc_r", "-lpthreads",...) # arguments will be automatically passed to "ld" according # to the CC command provided as a first argument to this # script. Usually, the same CC command was used to produce # the pre-compiled .o file(s). # # NOTES: 1. Since "ld_so_aix" was originally written for building # shared modules for the Python interpreter, the -e and # -bI default values match Python's conventions. In # Python, the entry point for a shared module is based # on the module's name (e.g., the "mathmodule" will # expect an entry point of "initmath"). # 2. The script accepts multiple .o or .a input files and # creates a single (shared) output file. The export list # that is created is based on the output file's basename # with the suffix ".exp". # 3. The resulting shared object file is left in the # current directory. # 4. Uncommenting the "echo" lines gives detailed output # about the commands executed in the script. # # # HISTORY: Oct-1996 -- Support added for multiple .o files -- # -- and optional arguments processing. -- # Chris Myers (myers@tc.cornell.edu), Keith Kwok # (kkwok@tc.cornell.edu) and Vladimir Marangozov # # Aug-6-1996 -- Take care of the compiler specific -- # -- args by leaving CC to invoke "ld". -- # Vladimir Marangozov # # Jul-1-1996 -- Make sure to use /usr/ccs/bin/ld -- # -- Use makexp_aix for the export list. -- # Vladimir Marangozov (Vladimir.Marangozov@imag.fr) # # Manus Hand (mhand@csn.net) -- Initial code -- 6/24/96 # ======================================================================== # usage="Usage: ld_so_aix [CC command] [ld arguments]" if test ! -n "$*"; then echo $usage; exit 2 fi makexp=`dirname $0`/makexp_aix # Check for existence of compiler. CC=$1; shift whichcc=`which $CC` if test ! -x "$whichcc"; then echo "ld_so_aix: Compiler '$CC' not found; exiting." exit 2 fi if test ! -n "$*"; then echo $usage; exit 2 fi # Default import file for Python # Can be overriden by providing a -bI: argument. impfile="./python.exp" # Parse arguments while test -n "$1" do case "$1" in -e | -Wl,-e) if test -z "$2"; then echo "ld_so_aix: The -e flag needs a parameter; exiting."; exit 2 else shift; entry=$1 fi ;; -e* | -Wl,-e*) entry=`echo $1 | sed -e "s/-Wl,//" -e "s/-e//"` ;; -o) if test -z "$2"; then echo "ld_so_aix: The -o flag needs a parameter; exiting."; exit 2 else shift; objfile=$1 fi ;; -o*) objfile=`echo $1 | sed "s/-o//"` ;; -bI:* | -Wl,-bI:*) impfile=`echo $1 | sed -e "s/-Wl,//" -e "s/-bI://"` ;; -bE:* | -Wl,-bE:*) expfile=`echo $1 | sed -e "s/-Wl,//" -e "s/-bE://"` ;; *.o | *.a) objs="$objs $1" args="$args $1" ;; -bM:* | -Wl,-bM:* | -H* | -Wl,-H* | -T* | -Wl,-T* | -lm) ;; *) args="$args $1" ;; esac shift done if test -z "$objs"; then echo "ld_so_aix: No input files; exiting." exit 2 elif test ! -r "$impfile"; then echo "ld_so_aix: Import file '$impfile' not found or not readable; exiting." exit 2 fi # If -o wasn't specified, assume "-o shr.o" if test -z "$objfile"; then objfile=shr.o fi filename=`basename $objfile | sed "s/\.[^.]*$//"` # If -bE: wasn't specified, assume "-bE:$filename.exp" if test -z "$expfile"; then expfile="$filename.exp" fi # Default entry symbol for Python modules = init[modulename] # Can be overriden by providing a -e argument. if test -z "$entry"; then entry=init`echo $filename | sed "s/module.*//"` fi #echo "ld_so_aix: Debug info section" #echo " -> output file : $objfile" #echo " -> import file : $impfile" #echo " -> export file : $expfile" #echo " -> entry point : $entry" #echo " -> object files: $objs" #echo " -> CC arguments: $args" CCOPT="-Wl,-e$entry -Wl,-bE:$expfile -Wl,-bI:$impfile -Wl,-bhalt:4" CCOPT="$CCOPT -Wl,-bM:SRE -Wl,-T512 -Wl,-H512 -lm -o $objfile" CCARGS="$args" # Export list generation. #echo $makexp $expfile "$objfile" $objs $makexp $expfile "$objfile" $objs # Perform the link. #echo $CC $CCOPT $CCARGS $CC $CCOPT $CCARGS # Delete the module's export list file. # Comment this line if you need it. rm -f $expfile egenix-mx-base-3.2.7/mx/URL/mxURL/makexp_aix0000775000175000017500000000603507057236752020404 0ustar lemburglemburg#!/bin/sh # # =========================================================================== # FILE: makexp_aix # TYPE: standalone executable # SYSTEM: AIX 3.2.5 and AIX 4 # # DESCRIPTION: This script creates an export list of ALL global symbols # from a list of object or archive files. # # USAGE: makexp_aix "" ... # # where: # is the target export list filename. # is the path/file string to be appended # after the "#!" symbols in the first line of the # export file. Passing "" means deferred resolution. # is an object (.o) or an archive file (.a). # # HISTORY: # 3-Apr-1998 -- remove C++ entries of the form Class::method # Vladimir Marangozov # # 1-Jul-1996 -- added header information # Vladimir Marangozov # # 28-Jun-1996 -- initial code # Vladimir Marangozov (Vladimir.Marangozov@imag.fr) # ========================================================================== # Variables expFileName=$1 toAppendStr=$2 shift; shift; inputFiles=$* automsg="Generated automatically by makexp_aix" notemsg="NOTE: lists _all_ global symbols defined in the above file(s)." curwdir=`pwd` # Create the export file and setup the header info echo "#!"$toAppendStr > $expFileName echo "*" >> $expFileName echo "* $automsg (`date -u`)" >> $expFileName echo "*" >> $expFileName echo "* Base Directory: $curwdir" >> $expFileName echo "* Input File(s) : $inputFiles" >> $expFileName echo "*" >> $expFileName echo "* $notemsg" >> $expFileName echo "*" >> $expFileName # Extract the symbol list using 'nm' which produces quite # different output under AIX 4 than under AIX 3.2.5. # The following handles both versions by using a common flagset. # Here are some hidden tricks: # 1. Use /usr/ccs/bin/nm. Relevant to AIX 3.2.5 which has # another version under /usr/ucb/bin/nm. # 2. Use the -B flag to have a standard BSD representation # of the symbol list on both AIX 3.2.5 and AIX 4. The "-B" # flag is missing in the AIX 3.2.5 online usage help of 'nm'. # 3. Use the -x flag to have a hex representation of the symbol # values. This fills the leading whitespaces on AIX 4, # thus simplifying the sed statement. # 4. Eliminate all entries except those with either "B", "D" # or "T" key letters. We are interested only in the global # (extern) BSS, DATA and TEXT symbols. With the same statement # we eliminate object member lines relevant to AIX 4. # 5. Eliminate entries containing a dot. We can have a dot only # as a symbol prefix, but such symbols are undefined externs. # 6. Eliminate everything including the key letter, so that we're # left with just the symbol name. # 7. Eliminate all entries containing two colons, like Class::method # /usr/ccs/bin/nm -Bex $inputFiles \ | sed -e '/ [^BDT] /d' -e '/\./d' -e 's/.* [BDT] //' -e '/::/d' \ | sort | uniq >> $expFileName egenix-mx-base-3.2.7/mx/URL/mxURL/mx.h0000664000175000017500000005570412133300665017116 0ustar lemburglemburg#ifndef MX_H #define MX_H /* mx -- Marc's eXtension modules for Python: basic macros This file is only meant to be included by the extension modules. DO NOT include it in the extension module's header file, since it will definitely cause troubles then. To enable debugging ceratin things, define one of these before including this file: MAL_REF_DEBUG -- debug reference counts (Py_MY_xxx) [this file] MAL_DEBUG -- enable debug output (DPRINTF) [mxstdlib.h] MAL_MEM_DEBUG -- enable malloc output (new,cnew,free,...) [mxstdlib.h] Copyright (c) 2000, Marc-Andre Lemburg; mailto:mal@lemburg.com Copyright (c) 2000-2013, eGenix.com Software GmbH; mailto:info@egenix.com See the documentation for further copyright information or contact the author. XXX Most of these macros and defines should really use an mx prefix to avoid collisions with native Python macros and defines. So far this has not happened, which is why this hasn't been implemented yet. */ /* --- Platform or compiler specific tweaks ------------------------------- */ /* Add some platform specific symbols to enable work-arounds for the static forward declaration of type definitions; note that the GNU C compiler does not have this problem. Many thanks to all who have contributed to this list. */ #ifndef BAD_STATIC_FORWARD # if (!defined(__GNUC__)) # if (defined(NeXT) || defined(sgi) || defined(_AIX) || (defined(__osf__) && defined(__DECC)) || defined(TrueCompaq64) || defined(__VMS)) # define BAD_STATIC_FORWARD # endif # endif #endif /* Some more tweaks for various platforms. */ /* VMS needs this define. Thanks to Jean-Franois PIRONNE */ #if defined(__VMS) # define __SC__ #endif /* xlC on AIX doesn't like the Python work-around for static forwards in ANSI mode (default), so we switch on extended mode. Thanks to Albert Chin-A-Young */ #if defined(__xlC__) # pragma langlvl extended #endif /* --- Standard header files ---------------------------------------------- */ /* Include the generic mx header file */ #include "mxh.h" /* Include nearly all Python symbols & definitions */ #include "Python.h" /* Include other standard stuff */ #include "mxstdlib.h" /* Include Python backward compatibility stuff */ #include "mxpyapi.h" /* --- Compiler support --------------------------------------------------- */ /* Support for compilers which don't like static forward declarations of arrays; Python 2.3 removed the support for BAD_STATIC_FORWARD which is why we now use our own little helpers here. */ #undef staticforward #undef statichere #ifdef BAD_STATIC_FORWARD # define staticforward extern # define statichere static #else # define staticforward static # define statichere static #endif /* --- Declare macros ----------------------------------------------------- */ #define Py_NONE (Py_INCREF(Py_None),Py_None) #ifdef MAL_REF_DEBUG # define printref(x) printf("* refcount for "#x" = %i\n",(long) x->ob_refcnt); #else # define printref(x) #endif /* --- Error handling ----------------------------------------------------- */ #define Py_Do(x) {if (!(x)) goto onError;} #define Py_ReturnOnError(errortype,errorstr) {PyErr_SetString(errortype,errorstr);return NULL;} #define Py_Assert(x,errortype,errorstr) {if (!(x)) {PyErr_SetString(errortype,errorstr);goto onError;}} #define Py_AssertWithArg(x,errortype,errorstr,a1) {if (!(x)) {PyErr_Format(errortype,errorstr,a1);goto onError;}} #define Py_AssertWith2Args(x,errortype,errorstr,a1,a2) {if (!(x)) {PyErr_Format(errortype,errorstr,a1,a2);goto onError;}} #define Py_AssertWith3Args(x,errortype,errorstr,a1,a2,a3) {if (!(x)) {PyErr_Format(errortype,errorstr,a1,a2,a3);goto onError;}} #define Py_Error(errortype,errorstr) {PyErr_SetString(errortype,errorstr);goto onError;} #define Py_ErrorWithArg(errortype,errorstr,a1) {PyErr_Format(errortype,errorstr,a1);goto onError;} #define Py_ErrorWith2Args(errortype,errorstr,a1,a2) {PyErr_Format(errortype,errorstr,a1,a2);goto onError;} #define Py_ErrorWith3Args(errortype,errorstr,a1,a2,a3) {PyErr_Format(errortype,errorstr,a1,a2,a3);goto onError;} /* --- Reference counting ------------------------------------------------- */ #ifdef MAL_REF_DEBUG static void mx_Py_INCREF(PyObject *v, const char *name, const char *filename, int lineno) { if (!Py_DebugFlag) { Py_XINCREF(v); return; } if (!v) mxDebugPrintf("[%s:%5i] Py_XINCREF( %-8s == NULL );\n", filename,lineno,name); else { Py_INCREF(v);; mxDebugPrintf("[%s:%5i] Py_XINCREF( %-8s at 0x%lx [%s]); " "new refcount = %i\n", filename,lineno,name,(long)v,v->ob_type->tp_name, v->ob_refcnt); } } static void mx_Py_DECREF(PyObject *v, const char *name, const char *filename, int lineno) { if (!Py_DebugFlag) { Py_XDECREF(v); return; } if (!v) mxDebugPrintf("[%s:%5i] Py_XDECREF( %-8s == NULL );\n", filename,lineno,name); else { int refcnt = v->ob_refcnt; Py_DECREF(v); if (refcnt <= 1) mxDebugPrintf("[%s:%5i] Py_XDECREF( %-8s at 0x%lx [%s]); " "object deleted\n", filename,lineno,name,(long)v,v->ob_type->tp_name); else mxDebugPrintf("[%s:%5i] Py_XDECREF( %-8s at 0x%lx [%s]); " "new refcount = %i\n", filename,lineno,name,(long)v,v->ob_type->tp_name, v->ob_refcnt); } } static void mx_Py_PRINT_REFCOUNT(PyObject *v, const char *name, const char *filename, int lineno) { if (!Py_DebugFlag) return; if (!v) mxDebugPrintf("[%s:%5i] Py_PRINT_REFCOUNT( %-8s == NULL );\n", filename,lineno,name); else { mxDebugPrintf("[%s:%5i] Py_PRINT_REFCOUNT( %-8s at 0x%lx [%s]) = %i;\n", filename,lineno,name,(long)v,v->ob_type->tp_name, v->ob_refcnt); } } # undef Py_INCREF # define Py_INCREF(x) mx_Py_INCREF((PyObject *)x,#x,__FILE__,__LINE__) # undef Py_DECREF # define Py_DECREF(x) mx_Py_DECREF((PyObject *)x,#x,__FILE__,__LINE__) # undef Py_XINCREF # define Py_XINCREF(x) mx_Py_INCREF((PyObject *)x,#x,__FILE__,__LINE__) # undef Py_XDECREF # define Py_XDECREF(x) mx_Py_DECREF((PyObject *)x,#x,__FILE__,__LINE__) # undef Py_CLEAR # define Py_CLEAR(x) {Py_XDECREF(x); x=0;} # define Py_DELETE(x) {if (x->ob_refcnt > 1) mxDebugPrintf("[%s:%5i] Py_DELETE( "#x" ) WARNING: Refcount = %i > 1\n",__FILE__,__LINE__,(int)x->ob_refcnt);Py_DECREF(x);} # define Py_PRINT_REFCOUNT(x) mx_Py_PRINT_REFCOUNT((PyObject *)x,#x,__FILE__,__LINE__) #else # define Py_DELETE(x) Py_DECREF(x) # define Py_PRINT_REFCOUNT(x) #endif #define Py_DEC_REF(x) {Py_XDECREF(x); x=0;} /* doing this once too often doesn't hurt; same as Py_CLEAR() */ /* Unreference a Python object. This is only used in Python debug builds and needed to keep track of all allocated references. Use in object constructors or free list implementations. */ #ifndef _Py_DEC_REFTOTAL # ifdef Py_REF_DEBUG # define _Py_DEC_REFTOTAL _Py_RefTotal-- # else # define _Py_DEC_REFTOTAL # endif #endif #define mxPy_UNREF(x) _Py_DEC_REFTOTAL /* --- Debug logging ------------------------------------------------------ */ #ifdef MAL_DEBUG # define Py_PRINT_REPR(message, obj) \ if (Py_DebugFlag) { \ PyObject *_debug_repr = PyObject_Repr(obj); \ mxDebugPrintf(message, PyString_AsString(_debug_repr)); \ Py_XDECREF(_debug_repr); \ } #else # define Py_PRINT_REPR(message, obj) #endif /* --- Argument passing and checking -------------------------------------- */ /* No arguments expected; also use Py_MethodListEntryNoArgs() for this kind of fct; this check is no longer needed in Python 2.3 and later */ #if PY_VERSION_HEX >= 0x02030000 # define Py_NoArgsCheck() {if (0) goto onError;} #else # define Py_NoArgsCheck() {if (!PyArg_NoArgs(args)) goto onError;} #endif /* For functions with old style args (Py_MethodListEntrySingleArg) */ #define Py_GetArgObject(a) {a = args; if (!a) {PyErr_SetString(PyExc_TypeError,"function/method requires an argument"); goto onError;}} #define Py_GetSingleArg(format,a1) {if (!PyArg_Parse(args,format,&a1)) goto onError;} /* For functions with new style args: */ #define Py_GetArg(format,a1) {if (!PyArg_ParseTuple(args,format,&a1)) goto onError;} #define Py_Get2Args(format,a1,a2) {if (!PyArg_ParseTuple(args,format,&a1,&a2)) goto onError;} #define Py_Get3Args(format,a1,a2,a3) {if (!PyArg_ParseTuple(args,format,&a1,&a2,&a3)) goto onError;} #define Py_Get4Args(format,a1,a2,a3,a4) {if (!PyArg_ParseTuple(args,format,&a1,&a2,&a3,&a4)) goto onError;} #define Py_Get5Args(format,a1,a2,a3,a4,a5) {if (!PyArg_ParseTuple(args,format,&a1,&a2,&a3,&a4,&a5)) goto onError;} #define Py_Get6Args(format,a1,a2,a3,a4,a5,a6) {if (!PyArg_ParseTuple(args,format,&a1,&a2,&a3,&a4,&a5,&a6)) goto onError;} #define Py_Get7Args(format,a1,a2,a3,a4,a5,a6,a7) {if (!PyArg_ParseTuple(args,format,&a1,&a2,&a3,&a4,&a5,&a6,&a7)) goto onError;} #define Py_Get8Args(format,a1,a2,a3,a4,a5,a6,a7,a8) {if (!PyArg_ParseTuple(args,format,&a1,&a2,&a3,&a4,&a5,&a6,&a7,&a8)) goto onError;} /* The keywords array string type */ #define Py_KEYWORDS_STRING_TYPE char /* For functions with keywords -- the first macro parameter must be the keywords array given as e.g. static const char *keywords[] = {"first","second","third", 0}; with an entry for every argument (in the correct order). The functions must be included in the method list using Py_MethodWithKeywordsListEntry() and be declared as Py_C_Function_WithKeywords(). */ #define Py_KeywordGetArg(keywords,format,a1) {if (!PyArg_ParseTupleAndKeywords(args,kws,format,keywords,&a1)) goto onError;} #define Py_KeywordGet2Args(keywords,format,a1,a2) {if (!PyArg_ParseTupleAndKeywords(args,kws,format,keywords,&a1,&a2)) goto onError;} #define Py_KeywordGet3Args(keywords,format,a1,a2,a3) {if (!PyArg_ParseTupleAndKeywords(args,kws,format,keywords,&a1,&a2,&a3)) goto onError;} #define Py_KeywordGet4Args(keywords,format,a1,a2,a3,a4) {if (!PyArg_ParseTupleAndKeywords(args,kws,format,keywords,&a1,&a2,&a3,&a4)) goto onError;} #define Py_KeywordGet5Args(keywords,format,a1,a2,a3,a4,a5) {if (!PyArg_ParseTupleAndKeywords(args,kws,format,keywords,&a1,&a2,&a3,&a4,&a5)) goto onError;} #define Py_KeywordGet6Args(keywords,format,a1,a2,a3,a4,a5,a6) {if (!PyArg_ParseTupleAndKeywords(args,kws,format,keywords,&a1,&a2,&a3,&a4,&a5,&a6)) goto onError;} #define Py_KeywordGet7Args(keywords,format,a1,a2,a3,a4,a5,a6,a7) {if (!PyArg_ParseTupleAndKeywords(args,kws,format,keywords,&a1,&a2,&a3,&a4,&a5,&a6,&a7)) goto onError;} #define Py_KeywordGet8Args(keywords,format,a1,a2,a3,a4,a5,a6,a7,a8) {if (!PyArg_ParseTupleAndKeywords(args,kws,format,keywords,&a1,&a2,&a3,&a4,&a5,&a6,&a7,&a8)) goto onError;} /* New style macros fof functions supporting keywords -- the C variable names are used as template for the keyword list, i.e. they must match the Python keyword parameter names. Note that format strings with special parameters (e.g. "#s") are not allowed since they would cause the keyword list to be out of sync. The functions must be included in the method list using Py_MethodWithKeywordsListEntry() and be declared as Py_C_Function_WithKeywords(). Example: Py_C_Function_WithKeywords( myfunction, "myfunction(filename,dupkeys=0,filemode=0,sectorsize=512)\n\n" "Returns a myobject" ) { char *filename; int sectorsize = 512; int dupkeys = 0; int filemode = 0; Py_KeywordsGet4Args("s|iii", filename,dupkeys,filemode,sectorsize); return (PyObject *)myobject_New(filename, filemode, sectorsize, dupkeys); onError: return NULL; } */ #define Py_KeywordsGetArg(format,a1) {static Py_KEYWORDS_STRING_TYPE *kwslist[] = {#a1,NULL}; if (!PyArg_ParseTupleAndKeywords(args,kws,format,kwslist,&a1)) goto onError;} #define Py_KeywordsGet2Args(format,a1,a2) {static Py_KEYWORDS_STRING_TYPE *kwslist[] = {#a1,#a2,NULL}; if (!PyArg_ParseTupleAndKeywords(args,kws,format,kwslist,&a1,&a2)) goto onError;} #define Py_KeywordsGet3Args(format,a1,a2,a3) {static Py_KEYWORDS_STRING_TYPE *kwslist[] = {#a1,#a2,#a3,NULL}; if (!PyArg_ParseTupleAndKeywords(args,kws,format,kwslist,&a1,&a2,&a3)) goto onError;} #define Py_KeywordsGet4Args(format,a1,a2,a3,a4) {static Py_KEYWORDS_STRING_TYPE *kwslist[] = {#a1,#a2,#a3,#a4,NULL}; if (!PyArg_ParseTupleAndKeywords(args,kws,format,kwslist,&a1,&a2,&a3,&a4)) goto onError;} #define Py_KeywordsGet5Args(format,a1,a2,a3,a4,a5) {static Py_KEYWORDS_STRING_TYPE *kwslist[] = {#a1,#a2,#a3,#a4,#a5,NULL}; if (!PyArg_ParseTupleAndKeywords(args,kws,format,kwslist,&a1,&a2,&a3,&a4,&a5)) goto onError;} #define Py_KeywordsGet6Args(format,a1,a2,a3,a4,a5,a6) {static Py_KEYWORDS_STRING_TYPE *kwslist[] = {#a1,#a2,#a3,#a4,#a5,#a6,NULL}; if (!PyArg_ParseTupleAndKeywords(args,kws,format,kwslist,&a1,&a2,&a3,&a4,&a5,&a6)) goto onError;} #define Py_KeywordsGet7Args(format,a1,a2,a3,a4,a5,a6,a7) {static Py_KEYWORDS_STRING_TYPE *kwslist[] = {#a1,#a2,#a3,#a4,#a5,#a6,#a7,NULL}; if (!PyArg_ParseTupleAndKeywords(args,kws,format,kwslist,&a1,&a2,&a3,&a4,&a5,&a6,&a7)) goto onError;} #define Py_KeywordsGet8Args(format,a1,a2,a3,a4,a5,a6,a7,a8) {static Py_KEYWORDS_STRING_TYPE *kwslist[] = {#a1,#a2,#a3,#a4,#a5,#a6,#a7,#a8,NULL}; if (!PyArg_ParseTupleAndKeywords(args,kws,format,kwslist,&a1,&a2,&a3,&a4,&a5,&a6,&a7,&a8)) goto onError;} /* --- Returning values to Python ----------------------------------------- */ /* XXX Don't always work: every time you have an 'O' in the BuildValue format string, you need to DECREF the variable *after* the tuple has been built !!! */ #define Py_ReturnNone() {Py_INCREF(Py_None);return Py_None;} #define Py_ReturnTrue() {Py_INCREF(Py_True);return Py_True;} #define Py_ReturnFalse() {Py_INCREF(Py_False);return Py_False;} #define Py_ReturnArg(format,a1) return Py_BuildValue(format,a1); #define Py_Return Py_ReturnArg #define Py_Return2Args(format,a1,a2) return Py_BuildValue(format,a1,a2); #define Py_Return2 Py_Return2Args #define Py_Return3Args(format,a1,a2,a3) return Py_BuildValue(format,a1,a2,a3); #define Py_Return3 Py_Return3Args #define Py_Return4Args(format,a1,a2,a3) return Py_BuildValue(format,a1,a2,a3,a4); #define Py_Return5Args(format,a1,a2,a3) return Py_BuildValue(format,a1,a2,a3,a4,a5); #define Py_Return6Args(format,a1,a2,a3) return Py_BuildValue(format,a1,a2,a3,a4,a5,a6); #define Py_Return7Args(format,a1,a2,a3) return Py_BuildValue(format,a1,a2,a3,a4,a5,a6,a7); /* Build values */ #define Py_BuildNone() Py_NONE #define Py_Build(format,x) Py_BuildValue(format,x) #define Py_Build2(format,x,y) Py_BuildValue(format,x,y) #define Py_Build3(format,x,y,z) Py_BuildValue(format,x,y,z) /* --- Declaring Python builtin functions/methods ------------------------- */ /* The doc-string type changed to const char* in Python 2.5 */ #if PY_VERSION_HEX >= 0x02050000 # define Py_DOC_STRING_TYPE const char #else # define Py_DOC_STRING_TYPE char #endif /* Declare C function/method fct, having docstring docstr; may use vargargs */ #define Py_C_Function(fct,docstr) \ static Py_DOC_STRING_TYPE fct##_docstring[] = docstr;\ static PyObject *fct(PyObject *self, PyObject *args) /* Declare C function/method fct, having keywords keywordsarray and a docstring docstr; may use vargargs & keywords */ #define Py_C_Function_WithKeywords(fct,docstr) \ static Py_DOC_STRING_TYPE fct##_docstring[] = docstr;\ static PyObject *fct(PyObject *self, PyObject *args, PyObject *kws) /* These declare: self -- instance pointer for methods, NULL for functions args -- argument tuple kws -- keywords dict (if applicable) plus as statics: _docstring -- the docstring as given _keywords -- the keyword array as given Note: use the Py_GetArg macros for functions without keywords, and Py_KeywordGetArg macros for functions with keywords */ /* --- Method list entries for builtin functions/methods ------------------ */ /* Add a C function/method cname to the module dict as pyname; no doc-string */ #define Py_MethodListEntryAny(pyname,cname) {pyname,(PyCFunction)cname,METH_VARARGS} /* Add a C function/method cname to the module dict as pyname; the function can use varargs */ #define Py_MethodListEntry(pyname,cname) {pyname,(PyCFunction)cname,METH_VARARGS,cname##_docstring} /* Add a C function/method cname to the module dict as pyname; the function takes no args; in Python 2.3 a new flag was added for these which implements the no args check in the interpreter itself. */ #ifdef METH_NOARGS # define Py_MethodListEntryNoArgs(pyname,cname) {pyname,(PyCFunction)cname,METH_NOARGS,cname##_docstring} #else # define Py_MethodListEntryNoArgs(pyname,cname) {pyname,(PyCFunction)cname,0,cname##_docstring} #endif /* Add a C function/method cname to the module dict as pyname; the function takes one argument: the object is passed in directly (without wrapping it into a tuple first), i.e. don't use the Py_GetArg-macros or PyArg_ParseTuple(). */ #define Py_MethodListEntrySingleArg(pyname,cname) {pyname,(PyCFunction)cname,0,cname##_docstring} /* Add a C function/method that uses keywords to the module dict */ #define Py_MethodWithKeywordsListEntry(pyname,cname) {pyname,(PyCFunction)cname,METH_VARARGS | METH_KEYWORDS,cname##_docstring} /* --- Sequence slicing --------------------------------------------------- */ /* Check a given slice and apply the usual rules for negative indices */ #define Py_CheckSequenceSlice(len,start,stop) { \ if (stop > len) \ stop = len; \ else { \ if (stop < 0) \ stop += len; \ if (stop < 0) \ stop = 0; \ } \ if (start < 0) { \ start += len; \ if (start < 0) \ start = 0; \ } \ if (stop < start) \ start = stop; \ } /* --- Number macros ------------------------------------------------------ */ /* Test for PyFloat_AsDouble() compatible object */ #define PyFloat_Compatible(obj) \ (PyInstance_Check(obj) \ ? PyObject_HasAttrString(obj, "__float__") \ : (obj->ob_type->tp_as_number != NULL && \ obj->ob_type->tp_as_number->nb_float != NULL)) /* --- Text macros -------------------------------------------------------- */ /* Check a given text slice and apply the usual rules for negative indices */ #define Py_CheckBufferSlice(textlen,start,stop) \ Py_CheckSequenceSlice(textlen,start,stop) /* Dito for string objects */ #define Py_CheckStringSlice(textobj,start,stop) \ Py_CheckSequenceSlice(PyString_GET_SIZE(textobj),start,stop) /* For b/w compatibility */ #define Py_CheckSlice(textobj,start,stop) \ Py_CheckStringSlice(textobj,start,stop) /* Dito for Unicode objects */ #ifdef PyUnicode_GET_SIZE # define Py_CheckUnicodeSlice(unicode,start,stop) \ Py_CheckSequenceSlice(PyUnicode_GET_SIZE(unicode),start,stop) #endif /* This assumes that fixed is a constant char array; the strcmp function is only called in case the attribute name length exceeds 10 characters and the first 10 characters match; optimizing compilers should eliminate any unused parts of this comparison automatically. Note: The latest egcs compiler warns about the subscripts being out of range for shorter fixed strings; since no code is generated for those comparisons, these warning can safely be ignored. Still, they are annoying. See the Py_StringsCompareEqual() macro below for a way to work around this. */ #define Py_StringsCompareEqualEx(var,fixed,fixedsize) \ (var[0] == fixed[0] && \ (fixed[0] == 0 || \ (fixedsize >= 1 && (var[1] == fixed[1] && \ (fixed[1] == 0 || \ (fixedsize >= 2 && (var[2] == fixed[2] && \ (fixed[2] == 0 || \ (fixedsize >= 3 && (var[3] == fixed[3] && \ (fixed[3] == 0 || \ (fixedsize >= 4 && (var[4] == fixed[4] && \ (fixed[4] == 0 || \ (fixedsize >= 5 && (var[5] == fixed[5] && \ (fixed[5] == 0 || \ (fixedsize >= 6 && (var[6] == fixed[6] && \ (fixed[6] == 0 || \ (fixedsize >= 7 && (var[7] == fixed[7] && \ (fixed[7] == 0 || \ (fixedsize >= 8 && (var[8] == fixed[8] && \ (fixed[8] == 0 || \ (fixedsize >= 9 && (var[9] == fixed[9] && \ (fixed[9] == 0 || \ (fixedsize >= 10 && \ strcmp(&var[10],&fixed[10]) == 0 \ )))))))))))))))))))))))))))))) /* This assumes that fixed is a constant char array. The appended string snippet is to shut up the warnings produced by newer egcs/gcc compilers about offsets being outside bounds. Note that some compilers do the inlining by themselves or don't like the above trick (OpenVMS is one such platform). For these we simply use the standard way. */ #ifndef __VMS # define Py_StringsCompareEqual(var,fixed) \ Py_StringsCompareEqualEx(var,fixed"\0\0\0\0\0\0\0\0\0\0",sizeof(fixed)) #else # define Py_StringsCompareEqual(var,fixed) (strcmp(var, fixed) == 0) #endif /* Fast character set member check; set must be a "static unsigned *char set" array of exactly 32 bytes length generated with TextTools.set() */ #define Py_CharInSet(chr,set) \ (((unsigned char)(set)[(unsigned char)(chr) >> 3] & \ (1 << ((unsigned char)(chr) & 7))) != 0) /* --- Macros for getattr ------------------------------------------------- */ /* Compares var to name and returns 1 iff they match. This assumes that name is a constant char array. */ #define Py_WantAttr(var,name) Py_StringsCompareEqual(var,name) /* --- Module init helpers ------------------------------------------------ */ /* Helper for startup type object initialization */ #define PyType_Init(x) \ { \ x.ob_type = &PyType_Type; \ Py_Assert(x.tp_basicsize >= (int)sizeof(PyObject), \ PyExc_SystemError, \ "Internal error: tp_basicsize of "#x" too small");\ if (PyType_Ready(&x) < 0) \ goto onError; \ } /* Error reporting for module init functions */ #define Py_ReportModuleInitError(modname) { \ PyObject *exc_type, *exc_value, *exc_tb; \ PyObject *str_type, *str_value; \ \ /* Fetch error objects and convert them to strings */ \ PyErr_Fetch(&exc_type, &exc_value, &exc_tb); \ if (exc_type && exc_value) { \ str_type = PyObject_Str(exc_type); \ str_value = PyObject_Str(exc_value); \ } \ else { \ str_type = NULL; \ str_value = NULL; \ } \ /* Try to format a more informative error message using the \ original error */ \ if (str_type && str_value && \ PyString_Check(str_type) && PyString_Check(str_value)) \ PyErr_Format( \ PyExc_ImportError, \ "initialization of module "modname" failed " \ "(%s:%s)", \ PyString_AS_STRING(str_type), \ PyString_AS_STRING(str_value)); \ else \ PyErr_SetString( \ PyExc_ImportError, \ "initialization of module "modname" failed"); \ Py_XDECREF(str_type); \ Py_XDECREF(str_value); \ Py_XDECREF(exc_type); \ Py_XDECREF(exc_value); \ Py_XDECREF(exc_tb); \ } /* --- SWIG addons -------------------------------------------------------- */ /* Throw this error after having set the correct Python exception using e.g. PyErr_SetString(); */ #define mxSWIGError "mxSWIGError" /* EOF */ #endif egenix-mx-base-3.2.7/mx/URL/mxURL/mxURL.c0000664000175000017500000021076312251400413017463 0ustar lemburglemburg/* mxURL -- An URL datatype Copyright (c) 1998-2000, Marc-Andre Lemburg; mailto:mal@lemburg.com Copyright (c) 2000-2013, eGenix.com Software GmbH; mailto:info@egenix.com See the documentation for further copyright information or contact the author (mailto:mal@lemburg.com). */ /* Debug defines: */ /*#define MAL_MEM_DEBUG*/ /*#define MAL_DEBUG*/ /*#define MAL_REF_DEBUG*/ /* Logging file used by debugging facility */ #ifndef MAL_DEBUG_OUTPUTFILE # define MAL_DEBUG_OUTPUTFILE "mxURL.log" #endif /* We want all our symbols to be exported */ #define MX_BUILDING_MXURL /* Mark the module as Py_ssize_t clean. */ #define PY_SSIZE_T_CLEAN 1 /* Setup mxstdlib memory management */ #if 1 # define MAL_USE_PYMALLOC #else # define MAL_USE_C_MALLOC #endif #include "mx.h" #include "mxURL.h" #include /* Version number: Major.Minor.Patchlevel */ #define MXURL_VERSION "3.2.7" /* Define this to have the module use a free list for URLs */ #define MXURL_FREELIST /* Define this to enable the speedup in mxURL_SchemeUsesRelativePaths() that uses hard-coded values for the uses_relative part of the scheme dict entries in mxURL_SchemeDict below. Saves a dictionary lookup for every join. */ #define HARDCODE_SCHEMES_USES_RELATIVE /* --- module doc-string -------------------------------------------------- */ static char *Module_docstring = MXURL_MODULE" -- An URL datatype.\n\n" "Version "MXURL_VERSION"\n\n" "Copyright (c) 1998-2000, Marc-Andre Lemburg; mailto:mal@lemburg.com\n" "Copyright (c) 2000-2013, eGenix.com Software GmbH; mailto:info@egenix.com\n\n" " All Rights Reserved\n\n" "See the documentation for further information on copyrights,\n" "or contact the author." ; /* --- module globals ----------------------------------------------------- */ static PyObject *mxURL_Error; /* Error Exception object */ /* URL free list */ #ifdef MXURL_FREELIST static mxURLObject *mxURL_FreeList = NULL; #endif /* Dictionary providing feature information about the different supported schemes: 'http':(uses_netloc, uses_params, uses_query, uses_fragment, uses_relative) The entries must be tuples of integers representing true (non zero) / false (zero). */ static PyObject *mxURL_SchemeDict; typedef struct { char *scheme; /* Scheme */ /* Features - 1/0 */ int uses_netloc, uses_params, uses_query, uses_fragment, uses_relative; } mxURL_SchemeFeature; static mxURL_SchemeFeature mxURL_SchemeFeatures[] = { /* scheme: (uses_netloc, uses_params, uses_query, uses_fragment, uses_relative) */ {"http", 1,1,1,1,1}, {"https", 1,1,1,1,1}, {"shttp", 1,1,1,1,1}, {"mailto", 0,0,1,0,0}, {"ftp", 1,1,0,1,1}, {"gopher", 1,0,0,1,1}, {"news", 1,0,0,1,1}, {"nntp", 1,0,0,0,1}, {"telnet", 1,0,0,1,0}, {"file", 1,0,0,0,1}, {"about", 0,0,0,0,0}, {"javascript", 0,0,0,0,0}, {"ldap", 1,0,0,0,0}, {"svn+ssh", 1,0,0,0,1}, /* Add new schemes here. */ }; /* 32 byte bit encoded character set of characters that are unsafe for inclusion in URLs; others are hexencoded as %hh. XXX Still unused !!! */ static PyObject *mxURL_URLUnsafeCharacters; #define URL_unsafe_chars \ "\377\377\377\377\377\017\000\370\001\000\000x\001\000\000" \ "\370\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" /* == TextTools.set( 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' '0123456789/_,.-:',0) */ /* Reference to the MIME type map dictionary from mimetools.py */ static PyObject *mxURL_MIMEDict; /* Flag telling us whether the module was initialized or not. */ static int mxURL_Initialized = 0; /* --- forward declarations ----------------------------------------------- */ staticforward PyTypeObject mxURL_Type; staticforward PyMethodDef mxURL_Methods[]; /* --- internal macros ---------------------------------------------------- */ #define _mxURL_Check(v) \ (((mxURLObject *)(v))->ob_type == &mxURL_Type) /* --- module helpers ----------------------------------------------------- */ /* Create an exception object, insert it into the module dictionary under the given name and return the object pointer; this is NULL in case an error occurred. base can be given to indicate the base object to be used by the exception object. It should be NULL otherwise */ static PyObject *insexc(PyObject *moddict, char *name, PyObject *base) { PyObject *v; char fullname[256]; char *modname; char *dot; v = PyDict_GetItemString(moddict, "__name__"); if (v == NULL) modname = NULL; else modname = PyString_AsString(v); if (modname == NULL) { PyErr_Clear(); modname = MXURL_MODULE; } /* The symbols from this extension are imported into mx.. We trim the name to not confuse the user with an overly long package path. */ strcpy(fullname, modname); dot = strchr(fullname, '.'); if (dot) dot = strchr(dot+1, '.'); if (dot) strcpy(dot+1, name); else sprintf(fullname, "%s.%s", modname, name); v = PyErr_NewException(fullname, base, NULL); if (v == NULL) return NULL; if (PyDict_SetItemString(moddict,name,v)) return NULL; return v; } #if 0 /* Helper for adding integer constants. Check for errors with PyErr_Occurred() */ static void insint(PyObject *dict, char *name, int value) { PyObject *v = PyInt_FromLong((long)value); PyDict_SetItemString(dict, name, v); Py_XDECREF(v); } #endif #ifdef Py_NEWSTYLENUMBER static PyObject *notimplemented1(PyObject *v) { Py_Error(PyExc_TypeError, "operation not implemented"); onError: return NULL; } static PyObject *notimplemented2(PyObject *v, PyObject *w) { Py_Error(PyExc_TypeError, "operation not implemented"); onError: return NULL; } static PyObject *notimplemented3(PyObject *u, PyObject *v, PyObject *w) { Py_Error(PyExc_TypeError, "operation not implemented"); onError: return NULL; } #endif /* --- URL Object -------------------------------------------------*/ /* --- allocation --- */ static mxURLObject *mxURL_New(void) { mxURLObject *url; #ifdef MXURL_FREELIST if (mxURL_FreeList) { url = mxURL_FreeList; mxURL_FreeList = *(mxURLObject **)mxURL_FreeList; url->ob_type = &mxURL_Type; _Py_NewReference(url); } else #endif { url = PyObject_NEW(mxURLObject,&mxURL_Type); if (!url) return NULL; } /* Init vars */ url->url = NULL; url->scheme = NULL; url->netloc = 0; url->netloc_len = 0; url->path = 0; url->path_len = 0; url->path_normalized = 0; url->params = 0; url->params_len = 0; url->query = 0; url->query_len = 0; url->fragment = 0; url->fragment_len = 0; return url; } /* --- deallocation --- */ static void mxURL_Free(mxURLObject *self) { Py_XDECREF(self->url); Py_XDECREF(self->scheme); #ifdef MXURL_FREELIST /* Append to free list */ *(mxURLObject **)self = mxURL_FreeList; mxURL_FreeList = self; #else PyObject_Del(self); #endif } /* --- internal functions --- */ /* Set the scheme and feature values in url; features are encoded as follows: the index of a URL part is set to 0 if the scheme does not support this part and to -1 otherwise. scheme must have at least one character and no more than 19 characters. */ static int mxURL_SetSchemeAndFeatures(mxURLObject *url, char *scheme, Py_ssize_t scheme_len) { PyObject *features; PyObject *v; char sl[20]; register Py_ssize_t i; DPRINTF("mxURL_SetSchemeAndFeatures: '%.*s'\n",scheme_len,scheme); Py_Assert(0 < scheme_len && scheme_len < sizeof(sl), mxURL_Error, "scheme length out of range"); /* Lower the scheme string */ for (i = 0; i < scheme_len; i++) sl[i] = tolower(scheme[i]); sl[scheme_len] = '\0'; DPRINTF(" lowered scheme: '%s'\n",sl); Py_XDECREF(url->scheme); url->scheme = PyString_FromStringAndSize(sl,scheme_len); if (!url->scheme) goto onError; PyString_InternInPlace(&url->scheme); scheme = PyString_AS_STRING(url->scheme); /* Set features */ DPRINTF(" looking up scheme '%s'\n",scheme); features = PyDict_GetItem(mxURL_SchemeDict,url->scheme); if (!features) { PyErr_Format(PyExc_ValueError, "unknown scheme '%.100s'", sl); goto onError; } Py_Assert(PyTuple_Check(features) && PyTuple_GET_SIZE(features) >= 5, PyExc_TypeError, "wrong scheme feature entry format"); /* uses_netloc */ v = PyTuple_GET_ITEM(features,0); Py_Assert(PyInt_Check(v), PyExc_TypeError, "scheme feature entries must be tuples of integers"); url->netloc = PyInt_AS_LONG(v) ? -1 : 0; /* uses_params */ v = PyTuple_GET_ITEM(features,1); Py_Assert(PyInt_Check(v), PyExc_TypeError, "scheme feature entries must be tuples of integers"); url->params = PyInt_AS_LONG(v) ? -1 : 0; /* uses_query */ v = PyTuple_GET_ITEM(features,2); Py_Assert(PyInt_Check(v), PyExc_TypeError, "scheme feature entries must be tuples of integers"); url->query = PyInt_AS_LONG(v) ? -1 : 0; /* uses_fragment */ v = PyTuple_GET_ITEM(features,3); Py_Assert(PyInt_Check(v), PyExc_TypeError, "scheme feature entries must be tuples of integers"); url->fragment = PyInt_AS_LONG(v) ? -1 : 0; #if 0 /* uses_relative */ v = PyTuple_GET_ITEM(features,4); Py_Assert(PyInt_Check(v), PyExc_TypeError, "scheme feature entries must be tuples of integers"); url->scheme_uses_relative = PyInt_AS_LONG(v) ? -1 : 0; #endif return 0; onError: return -1; } /* Normalize the path in place. Returns the new path length which will always be <= the length of the original one. The string will not be 0-terminated. */ static Py_ssize_t mxURL_NormalizePath(register char *path, Py_ssize_t path_len) { register Py_ssize_t i; register Py_ssize_t j; /* Scan path and "compress" along the way; i is the reading index, j the writing index */ DPRINTF("mxURL_NormalizePath: '%.*s'\n",path_len,path); for (i = 0, j = 0; i < path_len; ) { DPRINTF(" normalizing: i=%i j=%i '%.*s' + '%.*s'\n",i,j, j,path,path_len-i,&path[i]); if (path[i] == '/') { /* Handle slashes */ if (i+1 < path_len) { if (path[i+1] == '/' && i > 0) { /* '//' -> '/' except at the beginning */ i++; DPRINTF(" fix '//' -> '/'\n"); continue; } else if (path[i+1] == '.') { if (i+2 < path_len) { if (path[i+2] == '/') { /* '/./' -> '/' */ i += 2; DPRINTF(" fix '/./' -> '/'\n"); continue; } else if (path[i+2] == '.' && (i+3 >= path_len || path[i+3] == '/')) { /* handle '/../' and '/..' */ /* Root parent: '/..' -> '/' */ if (j == 0) { i += 3; DPRINTF(" root parent '/..' -> ''\n"); } /* Check for 'xxx./..' */ else if ((j > 0 && path[j-1] == '.')) { if (j == 1) { /* compactify './..' to '..' */ path[j++] = '.'; DPRINTF(" compactify './..' to '..'\n"); } else { /* copy as is ('/..' -> '/..') */ path[j++] = '/'; path[j++] = '.'; path[j++] = '.'; DPRINTF(" copy '/..' as-is\n"); } i += 3; } else { /* Find previous '/' */ for (j--; j >= 0; j--) if (path[j] == '/') break; if (j < 0) { /* not found: 'a/..' -> '.') */ path[0] = '.'; j = 1; i += 3; DPRINTF(" compactify 'a/..' to '.'\n"); } else { /* found: 'a/b/..' -> 'a' */ i += 3; DPRINTF(" backtrack 'a/b/..' -> 'a'\n"); } } /* Special case: preserve directory information ('a/b/..' -> 'a/') */ if (i >= path_len) { path[j++] = '/'; DPRINTF(" preserve dir\n"); break; } continue; } } else { /* remove directory dot ('/.' -> '/') */ path[j] = '/'; j++; DPRINTF(" remove dir dot\n"); break; } } } } else if (path[i] == '.') { /* Handle dots */ if (i+1 < path_len) { if (path[i+1] == '.') { /* special case: relative path backup ('..' -> '..') */ path[j++] = path[i++]; path[j++] = path[i++]; DPRINTF(" copy '..' as-is\n"); continue; } } } /* move one character */ path[j] = path[i]; i++; j++; } DPRINTF(" returning: '%.*s' (len=%i)\n",j,path,j); return j; } /* Using the strings (given with length) a URL is built and filled with the appropriate values. If normalize is true, the path is normalized prior to setting it. XXX does not check features. */ static int mxURL_SetFromBrokenDown(mxURLObject *url, char *scheme, Py_ssize_t scheme_len, char *netloc, Py_ssize_t netloc_len, char *path, Py_ssize_t path_len, char *params, Py_ssize_t params_len, char *query, Py_ssize_t query_len, char *fragment, Py_ssize_t fragment_len, int normalize) { Py_ssize_t len; char *s; /* Pointer into work buffer */ char buffer[256]; /* Stack buffer */ char *workspace = buffer; /* Work buffer */ DPRINTF("mxURL_SetFromBrokenDown('%s',scheme='%.*s',netloc='%.*s'," "path='%.*s',params='%.*s',query='%.*s',fragment='%.*s')\n", url->url==NULL?"":PyString_AS_STRING(url->url), scheme_len, scheme_len==0?"":scheme, netloc_len, netloc_len==0?"":netloc, path_len, path_len==0?"":path, params_len, params_len==0?"":params, query_len, query_len==0?"":query, fragment_len, fragment_len==0?"":fragment); /* Build a new url string from the broken down values */ len = scheme_len+1 + netloc_len+1 + path_len + \ params_len+1 + query_len+1 + fragment_len+1 + 1; if (len > sizeof(buffer)) { workspace = new(char,len); if (!workspace) { PyErr_NoMemory(); goto onError; } } s = workspace; /* Set scheme string (XXX should use mxURL_SetSchemeAndFeatures) */ Py_XDECREF(url->scheme); if (scheme_len) { url->scheme = PyString_FromStringAndSize(scheme,scheme_len); if (!url->scheme) goto onError; PyString_InternInPlace(&url->scheme); /* add ":" */ memcpy(s,scheme,scheme_len); s[scheme_len] = ':'; s += scheme_len + 1; DPRINTF(" set scheme to: '%.*s'\n", PyString_GET_SIZE(url->scheme), PyString_AS_STRING(url->scheme)); } else { url->scheme = NULL; DPRINTF(" set scheme to: NULL\n"); } /* XXX Should set and check features here */ /* Store indices into the url string */ url->netloc = (short)(s - workspace) + 2; url->netloc_len = netloc_len; if (netloc_len) { /* add "//" */ s[0] = '/'; s[1] = '/'; memcpy(&s[2],netloc,netloc_len); s += netloc_len + 2; } DPRINTF(" set netloc to: '%.*s'\n", url->netloc_len,&workspace[url->netloc]); url->path = (short)(s - workspace); if (path_len) { /* Make sure that path is rooted if a netloc was given */ if (netloc_len && path[0] != '/') { /* add "/" */ s[0] = '/'; memcpy(&s[1],path,path_len); path_len++; } else { /* add "" */ memcpy(s,path,path_len); } if (normalize) { path_len = mxURL_NormalizePath(s,path_len); url->path_normalized = 1; } s += path_len; } url->path_len = path_len; DPRINTF(" set path to: '%.*s'\n", url->path_len,&workspace[url->path]); url->params = (short)(s - workspace) + 1; url->params_len = params_len; if (params_len) { /* add ";" */ s[0] = ';'; memcpy(&s[1],params,params_len); s += params_len + 1; } DPRINTF(" set params to: '%.*s'\n", url->params_len,&workspace[url->params]); url->query = (short)(s - workspace) + 1; url->query_len = query_len; if (query_len) { /* add "?" */ s[0] = '?'; memcpy(&s[1],query,query_len); s += query_len + 1; } DPRINTF(" set query to: '%.*s'\n", url->query_len,&workspace[url->query]); url->fragment = (short)(s - workspace) + 1; url->fragment_len = fragment_len; if (fragment_len) { /* add "#" */ s[0] = '#'; memcpy(&s[1],fragment,fragment_len); s += fragment_len + 1; } DPRINTF(" set fragment to: '%.*s'\n", url->fragment_len,&workspace[url->fragment]); /* Set url to the new string */ Py_XDECREF(url->url); url->url = PyString_FromStringAndSize(workspace,(int)(s - workspace)); if (!url->url) goto onError; if (workspace != buffer) free(workspace); return 0; onError: if (workspace != buffer && workspace) free(workspace); return -1; } /* Parse the URL str according to the feature settings in url and set the values accordingly. Returns 0 on success, -1 otherwise. If normalize is true then the string's path will be normalized prior to setting the values. */ static int mxURL_SetFromString(mxURLObject *url, register char *str, int normalize) { register Py_ssize_t i; Py_ssize_t len; /* Character set of all allowed scheme characters; generated from TextTools.set(alpha + number + '+-.'). */ static unsigned char *scheme_set = (unsigned char *)( "\000\000\000\000\000h\377\003\376\377" "\377\007\376\377\377\007\000\000\000\000" "\000\000\000\000\000\000\000\000\000\000\000\000"); DPRINTF("mxURL_SetFromString(%0lx,'%s')\n",(long)url,str); len = strlen(str); /* Now parse the string: "scheme://netloc/path;params?query#fragment" */ /* scheme: "scheme:" Only allows: +(alpha | digit | "+" | "-" | ".") */ for (i = 0; i < len; i++) { if (str[i] == ':') /* found */ break; else if (!Py_CharInSet(str[i],scheme_set)) { /* illegal char */ i = len; break; } } if (i != len) { DPRINTF(" looking for scheme '%.*s'\n",i,str); if (mxURL_SetSchemeAndFeatures(url,str,i) < 0) goto onError; DPRINTF(" known scheme found\n"); /* Skip behind ':' in "scheme:..." */ i++; } else { /* No scheme given: reset and parse all remaining fields */ i = 0; url->netloc = -1; url->params = -1; url->query = -1; url->fragment = -1; DPRINTF(" no scheme given\n"); } /* netloc: "//netloc/..." or "//netloc" or "//netloc?..." (depending on scheme features) */ if (url->netloc && str[i] == '/' && str[i+1] == '/') { register Py_ssize_t j; for (j = i+2; j < len; j++) if (str[j] == '/' || (str[j] == '?' && url->query)) break; url->netloc = i + 2; url->netloc_len = j - (i + 2); DPRINTF(" found netloc '%.*s'\n",url->netloc_len,&str[url->netloc]); /* Skip behind netloc */ i = j; if (i >= len) goto finished; } /* path: "...;" or "...?" or "...#" or "..." (depending on scheme features) */ { register Py_ssize_t j; for (j = i; j < len; j++) if ((str[j] == ';' && url->params) || (str[j] == '?' && url->query) || (str[j] == '#' && url->fragment)) break; url->path = i; url->path_len = j - i; DPRINTF(" found path '%.*s'\n",url->path_len,&str[url->path]); /* Skip behind path */ i = j; if (i >= len) goto finished; } /* params: ";...?..." or ";...#..." or ";..." (depending on scheme features) */ if (url->params && str[i] == ';') { register Py_ssize_t j; for (j = i+1; j < len; j++) { if (str[j] == '?' && url->query) break; if (str[j] == '#' && url->fragment) break; } url->params = i + 1; url->params_len = j - (i + 1); DPRINTF(" found params '%.*s'\n",url->params_len,&str[url->params]); /* Skip behind params */ i = j; if (i >= len) goto finished; } /* query: "?..." or "?...#..." */ if (url->query && str[i] == '?') { register Py_ssize_t j; if (url->fragment) { for (j = i+1; j < len; j++) if (str[j] == '#') break; } else j = len; url->query = i + 1; url->query_len = j - (i + 1); DPRINTF(" found query '%.*s'\n",url->query_len,&str[url->query]); /* Skip behind query */ i = j; if (i >= len) goto finished; } /* fragment */ if (url->fragment && str[i] == '#') { /* "#..." */ url->fragment = i + 1; url->fragment_len = len - (i + 1); DPRINTF(" found fragment '%.*s'\n", url->fragment_len,&str[url->fragment]); } finished: /* If the URL should be stored normalized we now let the mxURL_SetFromBrokenDown API take care of this (and some minor other things). */ if (normalize) { if (mxURL_SetFromBrokenDown(url, url->scheme ? PyString_AS_STRING(url->scheme) : 0, url->scheme ? PyString_GET_SIZE(url->scheme) : 0, &str[url->netloc], url->netloc_len, &str[url->path], url->path_len, &str[url->params], url->params_len, &str[url->query], url->query_len, &str[url->fragment], url->fragment_len, NORMALIZE_URL)) goto onError; } else { Py_XDECREF(url->url); url->url = PyString_FromString(str); if (!url->url) goto onError; } return 0; onError: return -1; } /* Does the scheme support relative paths ? Returns 1/0 or -1 in case of an error. */ static int mxURL_SchemeUsesRelativePaths(PyObject *scheme) { PyObject *features,*v; #ifdef HARDCODE_SCHEMES_USES_RELATIVE static PyObject *http_scheme, *ftp_scheme; /* Init the interned string objects used for schemes. */ if (!http_scheme) { http_scheme = PyString_InternFromString("http"); ftp_scheme = PyString_InternFromString("ftp"); if (PyErr_Occurred()) goto onError; } /* Hardcoded values for some schemes. */ if (scheme == http_scheme || scheme == ftp_scheme) return 1; #endif /* Ok, then do the lookup... */ features = PyDict_GetItem(mxURL_SchemeDict,scheme); if (!features) { PyErr_Format(PyExc_ValueError, "unknown scheme '%s'", PyString_AS_STRING(scheme)); goto onError; } Py_Assert(PyTuple_Check(features) && PyTuple_GET_SIZE(features) >= 5, PyExc_TypeError, "wrong scheme feature entry format"); /* uses_relative */ v = PyTuple_GET_ITEM(features,4); Py_Assert(PyInt_Check(v), PyExc_TypeError, "scheme feature entries must be tuples of integers"); return PyInt_AS_LONG(v) ? 1 : 0; onError: return -1; } /* --- API functions --- */ /* Return the base part of the URL as Python string (including the trailing '/'). */ static PyObject *mxURL_Base(mxURLObject *self) { register Py_ssize_t i = self->path_len - 1; char *path = &PyString_AS_STRING(self->url)[self->path]; for (;i >= 0; i--) { if (path[i] == '/') break; } if (i < 0) return PyString_FromStringAndSize("",0); return PyString_FromStringAndSize(path,i + 1); } /* Returns the path entry index of the URL as Python string (without '/'). Leading and trailing '/' are ignored and not counted. Left indices are 0 based (the first entry is 0); negative values indicate entries counted from the right and are -1 based (the last entry is -1). An IndexError is raised if the index is out of range. */ static PyObject *mxURL_PathEntry(mxURLObject *self, Py_ssize_t index) { register Py_ssize_t i; Py_ssize_t start; Py_ssize_t len = self->path_len; char *path = &PyString_AS_STRING(self->url)[self->path]; /* Find start of entry (ignoring leading and trailing '/') */ if (index > 0) { i = 0; if (path[i] == '/') i++; for (; i < len; i++) { if (path[i] == '/') { index--; if (index == 0) { i++; break; } } } } else if (index < 0) { i = len - 1; if (path[i] == '/') i--; for (; i >= 0; i--) { if (path[i] == '/') { index++; if (index == 0) { i++; break; } } } /* special case: relative URL */ if (i < 0 && path[0] != '/' && index == -1) i = 0; } else { i = 0; if (path[i] == '/') i++; } Py_Assert(i >= 0 && i < len, PyExc_IndexError, "index out of range"); start = i; /* Find end of entry */ for (; i < len; i++) if (path[i] == '/') break; return PyString_FromStringAndSize(&path[start],i - start); onError: return NULL; } /* Returns the path length using the semantics of mxURL_PathEntry(). */ static Py_ssize_t mxURL_PathLength(mxURLObject *self) { register Py_ssize_t i; Py_ssize_t len = self->path_len; char *path = &PyString_AS_STRING(self->url)[self->path]; Py_ssize_t length = 0; /* Count slashes */ for (i = 0; i < len; i++) { if (path[i] == '/') length++; } /* Apply corrections */ if (len > 1) { if (path[0] == '/') length--; if (path[len-1] == '/') length--; length++; } else if (len == 1) length = length ? 0 : 1; return length; } /* Return the path as Python tuple of strings. '/' are not included. Leading and trailing '/' are ignored. */ static PyObject *mxURL_PathTuple(mxURLObject *self) { register Py_ssize_t i; Py_ssize_t start; Py_ssize_t len = self->path_len; char *path = &PyString_AS_STRING(self->url)[self->path]; Py_ssize_t length; Py_ssize_t index = 0; PyObject *v = 0; length = mxURL_PathLength(self); if (length < 0) goto onError; v = PyTuple_New(length); if (!v) goto onError; i = 0; if (path[i] == '/') i++; start = i; for (; i < len; i++) { if (path[i] == '/') { PyObject *w; w = PyString_FromStringAndSize(&path[start],i - start); if (!w) goto onError; PyTuple_SET_ITEM(v,index,w); index++; start = i + 1; } } if (start < len) { PyObject *w; w = PyString_FromStringAndSize(&path[start],i - start); if (!w) goto onError; PyTuple_SET_ITEM(v,index,w); index++; } Py_Assert(index == length, mxURL_Error, "internal error in mxURL_PathTuple"); return v; onError: Py_XDECREF(v); return NULL; } /* Return the extension part of the URL as Python string (the first suffix starting with a '.'; the dot itself is not included in the string, e.g. 'abc.tar.gz' will yield 'gz'). The string is always converted to all lowercase letters. */ static PyObject *mxURL_Extension(mxURLObject *self) { register Py_ssize_t i = self->path_len; char *path = &PyString_AS_STRING(self->url)[self->path]; Py_ssize_t ext_len; char ext[256]; if (i == 0 || path[i] == '.') return PyString_FromStringAndSize("",0); /* Extensions must have at least one character */ i--; for (;i >= 0; i--) { if (path[i] == '.') break; if (path[i] == '/') i = 0; } if (i < 0) return PyString_FromStringAndSize("",0); /* We don't include the '.' */ i++; /* Make all lower case ... */ ext_len = self->path_len - i; if (ext_len > 256) Py_Error(PyExc_SystemError, "extension too long to process"); memcpy(ext,&path[i],ext_len); for (i = 0; i < ext_len; i++) if (isupper(ext[i])) ext[i] = tolower(ext[i]); return PyString_FromStringAndSize(ext,ext_len); onError: return NULL; } /* Return the MIME type of the URL deducting it from the URL's file extension as string (format "major/minor") or "* / *" (without the spaces) in case it cannot be determined. */ static PyObject *mxURL_MIMEType(mxURLObject *self) { register Py_ssize_t i = self->path_len; char *path = &PyString_AS_STRING(self->url)[self->path]; Py_ssize_t ext_len; char ext[256]; static PyObject *unknown; PyObject *v,*mime; if (i == 0 || path[i] == '.' || mxURL_MIMEDict == NULL) goto unknownType; /* Extensions must have at least one character */ i--; for (;i >= 0; i--) { if (path[i] == '.') break; if (path[i] == '/') i = 0; } if (i < 0) goto unknownType; /* Make all lower case ... */ ext_len = self->path_len - i; if (ext_len > 256) Py_Error(PyExc_SystemError, "extension too long to process"); memcpy(ext,&path[i],ext_len); for (i = 1; i < ext_len; i++) if (isupper(ext[i])) ext[i] = tolower(ext[i]); /* Find the extension in the MIME map */ v = PyString_FromStringAndSize(ext,ext_len); if (!v) goto onError; PyString_InternInPlace(&v); mime = PyDict_GetItem(mxURL_MIMEDict,v); Py_DECREF(v); if (!mime) goto unknownType; Py_INCREF(mime); return mime; unknownType: if (!unknown) { unknown = PyString_FromString("*/*"); if (!unknown) goto onError; PyString_InternInPlace(&unknown); } Py_INCREF(unknown); return unknown; onError: return NULL; } /* Return the file part of the URL's path as Python string. */ static PyObject *mxURL_File(mxURLObject *self) { register Py_ssize_t i = self->path_len; char *path = &PyString_AS_STRING(self->url)[self->path]; if (i == 0) return PyString_FromStringAndSize("",0); for (;i >= 0; i--) { if (path[i] == '/') break; } i++; return PyString_FromStringAndSize(&path[i], self->path_len - i); } /* Return the hostname part of the URL's netloc (//:@:/) as Python string. If not given, an empty string is returned.*/ static PyObject *mxURL_Hostname(mxURLObject *self) { register Py_ssize_t i; Py_ssize_t host; Py_ssize_t netloc_len = self->netloc_len; char *netloc = &PyString_AS_STRING(self->url)[self->netloc]; if (netloc_len == 0) return PyString_FromStringAndSize("",0); /* Find start of host part */ for (i = 0;i < netloc_len; i++) { if (netloc[i] == '@') break; } if (i == netloc_len) host = 0; else host = i + 1; /* Find end of host part */ for (i = host;i < netloc_len; i++) { if (netloc[i] == ':') break; } return PyString_FromStringAndSize(&netloc[host],i - host); } /* Return the username part of the URL's netloc as Python string. If not given, an empty string is returned. */ static PyObject *mxURL_Username(mxURLObject *self) { register Py_ssize_t i; Py_ssize_t netloc_len = self->netloc_len; char *netloc = &PyString_AS_STRING(self->url)[self->netloc]; if (netloc_len == 0) return PyString_FromStringAndSize("",0); /* Do we have a user part ? */ for (i = 0;i < netloc_len; i++) { if (netloc[i] == '@') break; } if (i == netloc_len) return PyString_FromStringAndSize("",0); netloc_len = i; /* Find end of user */ for (i = 0;i < netloc_len; i++) { if (netloc[i] == ':') break; } return PyString_FromStringAndSize(netloc,i); } /* Return the username part of the URL's netloc as Python string. If not given, an empty string is returned. */ static PyObject *mxURL_Password(mxURLObject *self) { register Py_ssize_t i; Py_ssize_t netloc_len = self->netloc_len; char *netloc = &PyString_AS_STRING(self->url)[self->netloc]; if (netloc_len == 0) return PyString_FromStringAndSize("",0); /* Do we have a user part ? */ for (i = 0;i < netloc_len; i++) { if (netloc[i] == '@') break; } if (i == netloc_len) return PyString_FromStringAndSize("",0); netloc_len = i; /* Find passwd start */ for (i = 0;i < netloc_len; i++) { if (netloc[i] == ':') break; } if (i == netloc_len) return PyString_FromStringAndSize("",0); i++; return PyString_FromStringAndSize(&netloc[i],netloc_len - i); } /* Return the username part of the URL's netloc as Python integer. If not given, an empty string is returned. */ static PyObject *mxURL_Port(mxURLObject *self) { register Py_ssize_t i; int port = 80; Py_ssize_t netloc_len = self->netloc_len; char *netloc = &PyString_AS_STRING(self->url)[self->netloc]; if (netloc_len == 0) return PyString_FromStringAndSize("",0); /* Find port start */ for (i = netloc_len - 1;i >= 0; i--) { if (netloc[i] == ':') break; if (netloc[i] == '@') /* Hit a user part... cop out */ return PyString_FromStringAndSize("",0); } i++; /* Convert to an integer. Errors are NOT reported. */ port = atoi(&netloc[i]); return PyInt_FromLong(port); } /* Return the depth of an absolute URL. Toplevel has depth 0. -1 is returned in case of error and a Python exception set. */ static Py_ssize_t mxURL_Depth(mxURLObject *self) { register Py_ssize_t i = self->path_len - 1; register Py_ssize_t depth = 0; char *path = &PyString_AS_STRING(self->url)[self->path]; for (;i >= 0; i--) { if (path[i] == '/') depth++; #if 0 else if (path[i] == '.' && depth > 0) { Py_Error(mxURL_Error, "depth not defined: path has relative components"); } #endif } if (depth == 0 || path[0] != '/') Py_Error(mxURL_Error, "depth not defined: path is relative or empty"); return depth - 1; onError: return -1; } /* Return a tuple (scheme, netloc, path, params, query, fragment) just as urlparse.urlparse() does. */ static PyObject *mxURL_Parsed(mxURLObject *self) { char *url = PyString_AS_STRING(self->url); char *scheme; if (!self->scheme) scheme = ""; else scheme = PyString_AS_STRING(self->scheme); return Py_BuildValue("ss#s#s#s#s#", scheme, &url[self->netloc], (Py_ssize_t)self->netloc_len, &url[self->path], (Py_ssize_t)self->path_len, &url[self->params], (Py_ssize_t)self->params_len, &url[self->query], (Py_ssize_t)self->query_len, &url[self->fragment], (Py_ssize_t)self->fragment_len ); } static mxURLObject *mxURL_FromString(char *str, int normalize) { mxURLObject *url = 0; url = mxURL_New(); if (!url) goto onError; /* Init vars */ if (mxURL_SetFromString(url,str,normalize) < 0) goto onError; return url; onError: if (url) mxURL_Free(url); return NULL; } static mxURLObject *mxURL_FromBrokenDown(char *scheme, char *netloc, char *path, char *params, char *query, char *fragment, int normalize) { mxURLObject *url = 0; url = mxURL_New(); if (!url) goto onError; /* Init vars */ if (mxURL_SetFromBrokenDown(url, scheme, strlen(scheme), netloc, strlen(netloc), path, strlen(path), params, strlen(params), query, strlen(query), fragment, strlen(fragment), normalize) < 0) goto onError; return url; onError: if (url) mxURL_Free(url); return NULL; } /* Reconstruct a new URL object from a given one by replacing only a few parts. Entries that are not supposed to be changed must be set to NULL. */ static mxURLObject *mxURL_RebuildFromBrokenDown(mxURLObject *url, char *scheme, char *netloc, char *path, char *params, char *query, char *fragment, int normalize) { mxURLObject *newurl = 0; char *str = PyString_AS_STRING(url->url); Py_ssize_t scheme_len,netloc_len,path_len,params_len,query_len,fragment_len; newurl = mxURL_New(); if (!newurl) goto onError; if (!scheme && url->scheme) { scheme = PyString_AS_STRING(url->scheme); scheme_len = PyString_GET_SIZE(url->scheme); } else scheme_len = scheme ? strlen(scheme) : 0; if (!netloc) { netloc_len = url->netloc_len; netloc = netloc_len ? &str[url->netloc] : NULL; } else netloc_len = strlen(netloc); if (!path) { path_len = url->path_len; path = path_len ? &str[url->path] : NULL; } else path_len = strlen(path); if (!params) { params_len = url->params_len; params = params_len ? &str[url->params] : NULL; } else params_len = strlen(params); if (!query) { query_len = url->query_len; query = query_len ? &str[url->query] : NULL; } else query_len = strlen(query); if (!fragment) { fragment_len = url->fragment_len; fragment = fragment_len ? &str[url->fragment] : NULL; } else fragment_len = strlen(fragment); /* Init vars */ if (mxURL_SetFromBrokenDown(newurl, scheme, scheme_len, netloc, netloc_len, path, path_len, params, params_len, query, query_len, fragment, fragment_len, normalize) < 0) goto onError; return newurl; onError: if (newurl) mxURL_Free(newurl); return NULL; } static char *mxURL_AsString(mxURLObject *url) { return PyString_AS_STRING(url->url); } /* Return 1/0 depending on whether url points to an absolute path or not. */ static int mxURL_AbsolutePath(mxURLObject *url) { if (url->path_len && PyString_AS_STRING(url->url)[url->path] == '/') return 1; return 0; } /* Return a new URL object that points to the same URL as url but with a normalized URL. */ static mxURLObject *mxURL_NormalizedFromURL(mxURLObject *url) { mxURLObject *normurl = 0; char *str = PyString_AS_STRING(url->url); if (url->path_normalized) { Py_INCREF(url); return url; } normurl = mxURL_New(); if (!normurl) goto onError; /* Init vars */ if (mxURL_SetFromBrokenDown(normurl, url->scheme ? PyString_AS_STRING(url->scheme) : 0, url->scheme ? PyString_GET_SIZE(url->scheme) : 0, &str[url->netloc], url->netloc_len, &str[url->path], url->path_len, &str[url->params], url->params_len, &str[url->query], url->query_len, &str[url->fragment], url->fragment_len, NORMALIZE_URL)) goto onError; return normurl; onError: if (normurl) mxURL_Free(normurl); return NULL; } /* Return a (new) URL object that points to the same base URL as url but without any of the special parts fragment, query or params set. If url does not contain those parts, a new reference to it is returned. */ static mxURLObject *mxURL_BasicFromURL(mxURLObject *url) { mxURLObject *basicurl = 0; char *str = PyString_AS_STRING(url->url); /* Shortcut */ if (url->params_len == 0 && url->query_len == 0 && url->fragment_len == 0) { Py_INCREF(url); return url; } basicurl = mxURL_New(); if (!basicurl) goto onError; /* Init vars */ if (mxURL_SetFromBrokenDown(basicurl, url->scheme ? PyString_AS_STRING(url->scheme) : 0, url->scheme ? PyString_GET_SIZE(url->scheme) : 0, &str[url->netloc], url->netloc_len, &str[url->path], url->path_len, NULL,0, NULL,0, NULL,0, NORMALIZE_URL)) goto onError; return basicurl; onError: if (basicurl) mxURL_Free(basicurl); return NULL; } /* Return a new URL object that joined with the base URL points to the same URL as url. The base URL should provide scheme and netloc, because otherwise joining might result in lossage of scheme or netloc. */ static mxURLObject *mxURL_RelativeFromURL(mxURLObject *url, mxURLObject *base) { mxURLObject *relurl = 0; char *str = PyString_AS_STRING(url->url); char *urlpath = &str[url->path]; char *basepath = &(PyString_AS_STRING(base->url)[base->path]); Py_ssize_t mismatch, mismatchlen, urldepth, basedepth, diffdepth, prefixlen; char *relpath = 0; register Py_ssize_t i; Py_Assert(url->path_normalized && base->path_normalized && mxURL_AbsolutePath(url) && mxURL_AbsolutePath(base), mxURL_Error, "URL's path must be absolute and normalized"); /* Special case: both schemes are given, but they differ. Since the base's scheme will be overridden during joining, we simply return a new reference to url. */ if (url->scheme && base->scheme && url->scheme != base->scheme && (strcmp(PyString_AS_STRING(url->scheme), PyString_AS_STRING(base->scheme)) != 0)) { Py_INCREF(url); return url; } /* Special case: both netlocs are given but differ. We want our host, so completely ignore the base URL and return a new reference to url. */ if (url->netloc_len && base->netloc_len && (url->netloc_len != base->netloc_len || (strncmp(&str[url->netloc], &str[base->netloc],url->netloc_len) != 0))) { Py_INCREF(url); return url; } /* Special case: scheme does not support relative URLs. In that case we simply return a new reference to url. */ if (url->scheme) { int rc = mxURL_SchemeUsesRelativePaths(url->scheme); if (rc < 0) goto onError; if (!rc) { Py_INCREF(url); return url; } } /* Get depth of both URLs */ urldepth = mxURL_Depth(url); if (urldepth < 0) goto onError; basedepth = mxURL_Depth(base); if (basedepth < 0) goto onError; /* Compare the prefixes of both URLs and determine the match depth */ diffdepth = basedepth; mismatch = 1; for (i = 1; i < min(url->path_len, base->path_len); i++) { if (urlpath[i] != basepath[i]) break; if (urlpath[i] == '/') { diffdepth--; mismatch = i + 1; } } /* Create the relative URL */ if (diffdepth == 0) prefixlen = 2; else prefixlen = diffdepth * 3; mismatchlen = url->path_len - mismatch; relpath = new(char,prefixlen + mismatchlen); if (!relpath) goto onError; if (diffdepth > 0) for (i = 0; i < prefixlen;) { relpath[i++] = '.'; relpath[i++] = '.'; relpath[i++] = '/'; } else { relpath[0] = '.'; relpath[1] = '/'; i = 2; } memcpy(&relpath[i],&urlpath[mismatch],mismatchlen); relurl = mxURL_New(); if (!relurl) goto onError; /* Init vars */ if (mxURL_SetFromBrokenDown(relurl, (url->scheme && !base->scheme) ? PyString_AS_STRING(url->scheme) : 0, (url->scheme && !base->scheme) ? PyString_GET_SIZE(url->scheme) : 0, NULL, 0, relpath, prefixlen + mismatchlen, &str[url->params], url->params_len, &str[url->query], url->query_len, &str[url->fragment], url->fragment_len, NORMALIZE_URL)) goto onError; if (relpath) free(relpath); return relurl; onError: if (relpath) free(relpath); if (relurl) mxURL_Free(relurl); return NULL; } static mxURLObject *mxURL_FromJoiningURLs(mxURLObject *base, mxURLObject *other) { mxURLObject *url = 0; char *baseurl, *otherurl; char *scheme, *netloc, *path, *params, *query, *fragment; Py_ssize_t scheme_len, netloc_len, path_len, params_len, query_len, fragment_len; char buffer[256]; /* Stack buffer */ char *workspace = buffer; /* Work buffer */ register char *w; /* Pointer into workspace */ register Py_ssize_t len; int uses_relative; int inherit_query = 0, inherit_params = 0; DPRINTF("mxURL_FromJoiningURLs('%s','%s')\n", PyString_AS_STRING(base->url), PyString_AS_STRING(other->url)); #if 0 Py_Assert(base->scheme == NULL || other->scheme == NULL || strcmp(PyString_AS_STRING(base->scheme), PyString_AS_STRING(other->scheme)) == 0, PyExc_ValueError, "schemes must match when joining URLs"); #else /* Handle special case where both schemes are given but differ. Joining the URL will simply return the other URL. */ if (other->scheme && base->scheme && other->scheme != base->scheme && strcmp(PyString_AS_STRING(other->scheme), PyString_AS_STRING(base->scheme)) != 0) { Py_INCREF(other); url = other; goto finished; } #endif /* Create a big enough buffer to hold the result; we use the C stack buffer if possible or allocate a chunk of heap memory otherwise */ len = PyString_GET_SIZE(base->url) + PyString_GET_SIZE(other->url) + 10; if (len > sizeof(buffer)) { workspace = new(char,len); if (!workspace) { PyErr_NoMemory(); goto onError; } } w = workspace; /* Create the 0-terminated strings needed for setting from broken down values */ baseurl = PyString_AS_STRING(base->url); otherurl = PyString_AS_STRING(other->url); /* Choose the scheme: only some of these cases will be true due to the above test. The case where the base URL provides the scheme and the other URL is relative should be the more common one. */ scheme = w; if (base->scheme) { len = PyString_GET_SIZE(base->scheme); memcpy(scheme, PyString_AS_STRING(base->scheme), len); uses_relative = mxURL_SchemeUsesRelativePaths(base->scheme); if (uses_relative < 0) goto onError; } else if (other->scheme) { len = PyString_GET_SIZE(other->scheme); memcpy(scheme, PyString_AS_STRING(other->scheme), len); uses_relative = mxURL_SchemeUsesRelativePaths(other->scheme); if (uses_relative < 0) goto onError; } else { /* not given */ len = 0; uses_relative = 1; } scheme_len = len; scheme[len] = '\0'; DPRINTF(" using scheme '%s'\n",scheme); w += len + 1; /* Decide whether or not to inherit the params and query settings from the base URL in case these are not given in the other URL. One special case for which this is needed is where the other URL is empty or only contains a fragment; in this case the base URL entries for params and query preserved. */ if (PyString_GET_SIZE(other->url) == 0 || (!other->scheme && !other->netloc_len && !other->path_len && !other->query_len && !other->params_len)) { inherit_params = 1; inherit_query = 1; } else { inherit_params = 0; inherit_query = 0; } /* Netloc from other URL overrides base netloc */ netloc = w; if (other->netloc_len) { len = other->netloc_len; memcpy(netloc,&otherurl[other->netloc],len); } else { len = base->netloc_len; memcpy(netloc,&baseurl[base->netloc],len); } netloc_len = len; netloc[len] = '\0'; DPRINTF(" using netloc '%s'\n",netloc); w += len + 1; /* Join paths */ path = w; if (other->path_len) { if (!uses_relative || base->path_len == 0 || otherurl[other->path] == '/') { /* other path overrides base path */ len = other->path_len; memcpy(path,&otherurl[other->path],len); } else { Py_ssize_t i; /* join the path in base with the relative one in other */ len = base->path_len; memcpy(path,&baseurl[base->path],len); /* look for last '/' in base path */ i = len - 1; if (i > 0 && path[i-1] == '.' && path[i] == '.') { /* path ends in '..' -- append '/' */ i++; path[i] = '/'; } else { for (; i >= 0; i--) if (path[i] == '/') break; } path[i] = '/'; i++; /* now paste the other URL right behind it */ len = i + other->path_len; memcpy(&path[i],&otherurl[other->path],other->path_len); } } else if (!other->netloc_len) { /* use the base URL's path */ len = base->path_len; memcpy(path,&baseurl[base->path],len); } else /* not given */ len = 0; #if 0 DPRINTF(" unnormalized path '%.*s'\n",len,path); /* Normalize path */ len = mxURL_NormalizePath(path,len); #endif path_len = len; path[len] = '\0'; DPRINTF(" using path '%s'\n",path); w += len + 1; /* Parameters from other URL */ params = w; if (other->params_len) { len = other->params_len; memcpy(params,&otherurl[other->params],len); } else if (base->params_len && inherit_params) { len = base->params_len; memcpy(params,&baseurl[base->params],len); } else /* not given */ len = 0; params_len = len; params[len] = '\0'; DPRINTF(" using params '%s'\n",params); w += len + 1; /* Query from other URL */ query = w; if (other->query_len) { len = other->query_len; memcpy(query,&otherurl[other->query],len); } else if (base->query_len && inherit_query) { len = base->query_len; memcpy(query,&baseurl[base->query],len); } else /* not given */ len = 0; query_len = len; query[len] = '\0'; DPRINTF(" using query '%s'\n",query); w += len + 1; /* Fragment from other URL */ fragment = w; if (other->fragment_len) { len = other->fragment_len; memcpy(fragment,&otherurl[other->fragment],len); } else /* not given */ len = 0; fragment_len = len; fragment[len] = '\0'; DPRINTF(" using fragment '%s'\n",fragment); w += len + 1; /* Create a new URL object */ url = mxURL_New(); if (!url) goto onError; /* Set variables */ if (mxURL_SetFromBrokenDown(url, scheme, scheme_len, netloc, netloc_len, path, path_len, params, params_len, query, query_len, fragment, fragment_len, NORMALIZE_URL) < 0) goto onError; finished: DPRINTF(" returning '%s'\n",PyString_AS_STRING(url->url)); if (workspace != buffer) free(workspace); return url; onError: if (workspace != buffer && workspace) free(workspace); Py_XDECREF(url); return NULL; } /* --- methods --- (should have lowercase extension) */ #define url ((mxURLObject*)self) Py_C_Function( mxURL_normalized, "normalized()\n\n" "Return a new URL object pointing to the same URL\n" "but normalized." ) { PyObject *v; Py_NoArgsCheck(); v = (PyObject *)mxURL_NormalizedFromURL(url); if (v == NULL) goto onError; return v; onError: return NULL; } Py_C_Function( mxURL_parsed, "parsed()\n\n" "Return a tuple (scheme, netloc, path, params, query, fragment)\n" "just as urlparse.urlparse() does." ) { Py_NoArgsCheck(); return mxURL_Parsed(url); onError: return NULL; } Py_C_Function( mxURL_basic, "basic()\n\n" "Return a new URL object pointing to the same base URL,\n" "but without the parts params, query and fragment. In case\n" "the url already forfills this requirement, a new reference\n" "to it is returned." ) { Py_NoArgsCheck(); return (PyObject *)mxURL_BasicFromURL(url); onError: return NULL; } Py_C_Function( mxURL_depth, "depth()\n\n" "Return the depth of the URL. Depth is only defined if\n" "the URL is normalized and absolute. Otherwise an error\n" "will be raised. Toplevel has depth 0." ) { Py_ssize_t depth; Py_NoArgsCheck(); depth = mxURL_Depth(url); if (depth < 0) goto onError; return PyInt_FromSsize_t(depth); onError: return NULL; } Py_C_Function( mxURL_relative, "relative(baseURL)\n\n" "Return a new URL object that when joined with baseURL\n" "results in the same basic URL as the object itself.\n" "URL and baseURL must both be absolute URLs for this to\n" "work. An exception is raised otherwise." ) { PyObject *base = 0; PyObject *relurl; Py_GetArg("O",base); if (PyString_Check(base)) { base = (PyObject *)mxURL_FromString(PyString_AS_STRING(base), NORMALIZE_URL); if (!base) goto onError; } else Py_INCREF(base); Py_Assert(_mxURL_Check(base), PyExc_TypeError, "argument must be a URL or a string"); relurl = (PyObject *)mxURL_RelativeFromURL(url,(mxURLObject *)base); if (!relurl) goto onError; Py_DECREF(base); return relurl; onError: Py_XDECREF(base); return NULL; } Py_C_Function_WithKeywords( mxURL_rebuild, "rebuild(scheme='',netloc='',path='',params='',query='',fragment='')\n\n" "Return a new URL object created from the given parameters and\n" "the URL object. This method can handle keywords." ) { char *scheme = NULL,*netloc = NULL,*path = NULL; char *params = NULL,*query = NULL,*fragment = NULL; Py_KeywordsGet6Args("|ssssss", scheme,netloc,path,params,query,fragment); return (PyObject *)mxURL_RebuildFromBrokenDown(url, scheme, netloc, path, params, query, fragment, NORMALIZE_URL); onError: return NULL; } Py_C_Function( mxURL_pathentry, "pathentry(index)\n\n" "Return the path entry index. index may also be negative to\n" "indicate an entry counted from the right. An IndexError is\n" "raised in case the index lies out of range. Leading and\n" "trailing '/' are not counted." ) { Py_ssize_t index; Py_GetArg(Py_SSIZE_T_PARSERMARKER, index); return mxURL_PathEntry(url,index); onError: return NULL; } Py_C_Function( mxURL_pathlen, "pathlen()\n\n" "Returns path length defined by the semantics of .pathentry()" ) { Py_ssize_t length; Py_NoArgsCheck(); length = mxURL_PathLength(url); if (length < 0) goto onError; return PyInt_FromSsize_t(length); onError: return NULL; } Py_C_Function( mxURL_pathtuple, "pathtuple()\n\n" "Returns the path as tuple using the semantics of .pathentry()" ) { Py_NoArgsCheck(); return mxURL_PathTuple(url); onError: return NULL; } #undef url /* --- slots --- */ static int mxURL_Print(PyObject *obj, FILE *fp, int flags) { mxURLObject *self = (mxURLObject *)obj; fprintf(fp, "", PyString_AS_STRING(self->url)); return 0; } static PyObject *mxURL_Repr(PyObject *obj) { mxURLObject *self = (mxURLObject *)obj; char s[256]; if (PyString_GET_SIZE(self->url) > 150) sprintf(s,"",(long)self); else sprintf(s,"", PyString_AS_STRING(self->url),(long)self); return PyString_FromString(s); } static PyObject *mxURL_Str(PyObject *obj) { mxURLObject *self = (mxURLObject *)obj; Py_INCREF(self->url); return self->url; } static int mxURL_Compare(PyObject *v, PyObject *w) { mxURLObject *left = (mxURLObject *)v; mxURLObject *right = (mxURLObject *)w; return PyObject_Compare(left->url, right->url); } static long mxURL_Hash(PyObject *obj) { mxURLObject *self = (mxURLObject *)obj; return PyObject_Hash(self->url); } #if 0 static PyObject *mxURL_Add(PyObject *v, PyObject *w) { mxURLObject *self = (mxURLObject *)v; mxURLObject *other = (mxURLObject *)w; return (PyObject *)mxURL_FromJoiningURLs(self, other); } #endif static PyObject *mxURL_Getattr(PyObject *obj, char *name) { mxURLObject *self = (mxURLObject *)obj; if (Py_WantAttr(name,"url") || Py_WantAttr(name,"string")) { Py_INCREF(self->url); return self->url; } else if (Py_WantAttr(name,"scheme")) { if (self->scheme) { Py_INCREF(self->scheme); return self->scheme; } else return PyString_FromStringAndSize("",0); } else if (Py_WantAttr(name,"netloc")) return PyString_FromStringAndSize( &PyString_AS_STRING(self->url)[self->netloc], self->netloc_len); else if (Py_WantAttr(name,"path")) return PyString_FromStringAndSize( &PyString_AS_STRING(self->url)[self->path], self->path_len); else if (Py_WantAttr(name,"normal")) return PyInt_FromLong((long)self->path_normalized); else if (Py_WantAttr(name,"absolute")) { if (mxURL_AbsolutePath(self)) Py_ReturnTrue(); Py_ReturnFalse(); } else if (Py_WantAttr(name,"params")) return PyString_FromStringAndSize( &PyString_AS_STRING(self->url)[self->params], self->params_len); else if (Py_WantAttr(name,"query")) return PyString_FromStringAndSize( &PyString_AS_STRING(self->url)[self->query], self->query_len); else if (Py_WantAttr(name,"fragment")) return PyString_FromStringAndSize( &PyString_AS_STRING(self->url)[self->fragment], self->fragment_len); else if (Py_WantAttr(name,"mimetype")) return mxURL_MIMEType(self); else if (Py_WantAttr(name,"ext")) return mxURL_Extension(self); else if (Py_WantAttr(name,"base")) return mxURL_Base(self); else if (Py_WantAttr(name,"file")) return mxURL_File(self); else if (Py_WantAttr(name,"host")) return mxURL_Hostname(self); else if (Py_WantAttr(name,"user")) return mxURL_Username(self); else if (Py_WantAttr(name,"passwd")) return mxURL_Password(self); else if (Py_WantAttr(name,"port")) return mxURL_Port(self); else if (Py_WantAttr(name,"__members__")) return Py_BuildValue("[ssssssssssssssssss]", "url", "scheme", "netloc", "path", "params", "query", "mimetype", "fragment", "ext", "base", "file", "string", "absolute", "normal","host","user", "passwd","port" ); return Py_FindMethod(mxURL_Methods, (PyObject *)self,name); } #ifdef Py_NEWSTYLENUMBER static int mxURL_NonZero(PyObject *obj) { mxURLObject *self = (mxURLObject *)obj; return PyString_GET_SIZE(self->url) > 0; } #endif static Py_ssize_t mxURL_Length(PyObject *obj) { mxURLObject *self = (mxURLObject *)obj; return PyString_GET_SIZE(self->url); } /* URL-join two URLs giving a new one, or a URL and a string giving a new URL. string + URL only works with New Style Numbers and then also results in a URL object. */ static PyObject *mxURL_Concat(PyObject *self, PyObject *other) { mxURLObject *new_url; if (_mxURL_Check(self) && _mxURL_Check(other)) return (PyObject *)mxURL_FromJoiningURLs((mxURLObject *)self, (mxURLObject *)other); /* Be prepared for the new style number mechanism... */ new_url = 0; if (_mxURL_Check(self)) { Py_Assert(PyString_Check(other), PyExc_TypeError, "can't concat URL and other object"); other = (PyObject *)mxURL_FromString(PyString_AS_STRING(other), RAW_URL); if (!other) goto onError; new_url = mxURL_FromJoiningURLs((mxURLObject *)self, (mxURLObject *)other); Py_DECREF(other); } else if (_mxURL_Check(other) ) { Py_Assert(PyString_Check(self), PyExc_TypeError, "can't concat other object and URL"); self = (PyObject *)mxURL_FromString(PyString_AS_STRING(self), RAW_URL); if (!self) goto onError; new_url = mxURL_FromJoiningURLs((mxURLObject *)self, (mxURLObject *)other); Py_DECREF(self); } else PyErr_BadInternalCall(); if (!new_url) goto onError; return (PyObject *)new_url; onError: return NULL; } /* Make url[i] work like string[i] */ static PyObject *mxURL_Item(PyObject *obj, Py_ssize_t index) { mxURLObject *self = (mxURLObject *)obj; char *url = PyString_AS_STRING(self->url); if (index < 0 || index >= PyString_GET_SIZE(self->url)) Py_Error(PyExc_IndexError, "index out of range"); return PyString_FromStringAndSize(&url[index],1); onError: return NULL; } static PyObject *mxURL_Slice(PyObject *obj, Py_ssize_t left, Py_ssize_t right) { mxURLObject *self = (mxURLObject *)obj; char *url = PyString_AS_STRING(self->url); Py_CheckStringSlice(self->url,left,right); if (left == 0 && right == PyString_GET_SIZE(self->url)) { Py_INCREF(self->url); return self->url; } return PyString_FromStringAndSize(&url[left],right-left); } static PyObject *mxURL_Repeat(PyObject *obj, Py_ssize_t index) { /* mxURLObject *self = (mxURLObject *)obj; */ Py_Error(mxURL_Error, "URL*int not implemented"); onError: return NULL; } /* Python Type Tables */ /* We play new style number to be able to implement string + URL == URL */ #ifdef Py_NEWSTYLENUMBER static PyNumberMethods mxURL_TypeAsNumber = { /* These slots are not NULL-checked, so we must provide dummy functions */ mxURL_Concat, /*nb_add*/ notimplemented2, /*nb_subtract*/ notimplemented2, /*nb_multiply*/ notimplemented2, /*nb_divide*/ notimplemented2, /*nb_remainder*/ notimplemented2, /*nb_divmod*/ notimplemented3, /*nb_power*/ notimplemented1, /*nb_negative*/ notimplemented1, /*nb_positive*/ /* Everything below this line EXCEPT nb_nonzero (!) is NULL checked */ 0, /*nb_absolute*/ mxURL_NonZero, /*nb_nonzero*/ 0, /*nb_invert*/ notimplemented2, /*nb_lshift*/ notimplemented2, /*nb_rshift*/ notimplemented2, /*nb_and*/ notimplemented2, /*nb_xor*/ notimplemented2, /*nb_or*/ Py_NEWSTYLENUMBER, /*nb_coerce*/ 0, /*nb_int*/ 0, /*nb_long*/ 0, /*nb_float*/ 0, /*nb_oct*/ 0, /*nb_hex*/ }; #endif static PySequenceMethods mxURL_TypeAsSequence = { /* These slots are not NULL-checked */ mxURL_Length, /*sq_length*/ mxURL_Concat, /*sq_concat*/ mxURL_Repeat, /*sq_repeat*/ mxURL_Item, /*sq_item*/ /* Everything below is NULL checked. */ mxURL_Slice, /*sq_slice*/ 0, /*sq_ass_item*/ 0, /*sq_ass_slice*/ }; statichere PyTypeObject mxURL_Type = { PyObject_HEAD_INIT(0) /* init at startup ! */ 0, /*ob_size*/ "URL", /*tp_name*/ sizeof(mxURLObject), /*tp_basicsize*/ 0, /*tp_itemsize*/ /* slots */ (destructor)mxURL_Free, /*tp_dealloc*/ mxURL_Print, /*tp_print*/ mxURL_Getattr, /*tp_getattr*/ 0, /*tp_setattr*/ mxURL_Compare, /*tp_compare*/ mxURL_Repr, /*tp_repr*/ #ifdef Py_NEWSTYLENUMBER &mxURL_TypeAsNumber, /*tp_as_number*/ #else 0, /*tp_as_number*/ #endif &mxURL_TypeAsSequence, /*tp_as_sequence*/ 0, /*tp_as_mapping*/ mxURL_Hash, /*tp_hash*/ 0, /*tp_call*/ mxURL_Str, /*tp_str*/ 0, /*tp_getattro*/ 0, /*tp_setattro*/ 0, /*tp_as_buffer*/ Py_TPFLAGS_DEFAULT, /*tp_flags*/ 0, /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ 0, /* tp_richcompare */ 0, /* tp_weaklistoffset */ 0, /* tp_iter */ 0, /* tp_iternext */ mxURL_Methods, /* tp_methods */ 0, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ 0, /* tp_init */ 0, /* tp_alloc */ 0, /* tp_new */ 0, /* tp_free */ }; /* Python Method Table */ statichere PyMethodDef mxURL_Methods[] = { Py_MethodListEntryNoArgs("depth",mxURL_depth), Py_MethodListEntry("pathentry",mxURL_pathentry), Py_MethodListEntryNoArgs("pathlen",mxURL_pathlen), Py_MethodListEntryNoArgs("parsed",mxURL_parsed), Py_MethodListEntryNoArgs("basic",mxURL_basic), Py_MethodListEntry("relative",mxURL_relative), Py_MethodWithKeywordsListEntry("rebuild",mxURL_rebuild), Py_MethodListEntryNoArgs("normalized",mxURL_normalized), Py_MethodListEntryNoArgs("pathtuple",mxURL_pathtuple), {NULL,NULL} /* end of list */ }; /* --- Other functions ----------------------------------------------------- */ Py_C_Function( mxURL_URL, "URL(url)\n\n" "Create a new URL object from url. Takes either a string\n" "or another URL as argument. The url is stored normalized." ) { PyObject *v; Py_GetArgObject(v); if (_mxURL_Check(v)) return (PyObject *)mxURL_NormalizedFromURL((mxURLObject*)v); Py_Assert(PyString_Check(v), PyExc_TypeError, "argument must be a string or a URL"); v = (PyObject *)mxURL_FromString(PyString_AS_STRING(v), NORMALIZE_URL); if (v == NULL) goto onError; return v; onError: return NULL; } Py_C_Function_WithKeywords( mxURL_BuildURL, "BuildURL(scheme='',netloc='',path='',params='',query='',fragment='')\n\n" "Create a new URL object from the given parameters.\n" "The url is stored normalized. This constructor can handle\n" "keywords." ) { char *scheme = "",*netloc = "",*path = ""; char *params = "",*query = "",*fragment = ""; Py_KeywordsGet6Args("|ssssss", scheme,netloc,path,params,query,fragment); return (PyObject *)mxURL_FromBrokenDown(scheme, netloc, path, params, query, fragment, NORMALIZE_URL); onError: return NULL; } Py_C_Function( mxURL_RawURL, "RawURL(url)\n\n" "Create a new URL object from url. Takes either a string\n" "or another URL as argument. The url is not normalized but\n" "stored as-is." ) { PyObject *v; Py_GetArgObject(v); if (_mxURL_Check(v)) { Py_INCREF(v); return v; } Py_Assert(PyString_Check(v), PyExc_TypeError, "argument must be a string or a URL"); v = (PyObject *)mxURL_FromString(PyString_AS_STRING(v), RAW_URL); if (v == NULL) goto onError; return v; onError: return NULL; } Py_C_Function( mxURL_urljoin, "urljoin(u,v)\n\n" "Takes two URLs or strings, joins them and returns the\n" "result as URL object") { mxURLObject *a = 0,*b = 0; PyObject *u,*v; PyObject *url; Py_Get2Args("OO",u,v); if (_mxURL_Check(u)) { a = (mxURLObject *)u; Py_INCREF(u); } else if (PyString_Check(u)) { a = mxURL_FromString(PyString_AS_STRING(u), RAW_URL); if (!a) goto onError; } else Py_Error(PyExc_TypeError, "arguments must be URLs or strings"); if (_mxURL_Check(v)) { b = (mxURLObject *)v; Py_INCREF(v); } else if (PyString_Check(v)) { b = mxURL_FromString(PyString_AS_STRING(v), RAW_URL); if (!b) goto onError; } else Py_Error(PyExc_TypeError, "arguments must be URLs or strings"); url = (PyObject *)mxURL_FromJoiningURLs((mxURLObject*)a, (mxURLObject*)b); if (!url) goto onError; DPRINTF(" urljoin() returning '%s'\n", PyString_AS_STRING(((mxURLObject *)url)->url)); Py_DECREF(a); Py_DECREF(b); Py_PRINT_REFCOUNT(url); return url; onError: Py_XDECREF(a); Py_XDECREF(b); return NULL; } Py_C_Function( mxURL_setmimedict, "setmimedict(dict)\n\n" "Sets the MIME type map dictionary used by the package." ) { PyObject *v; Py_GetArgObject(v); Py_Assert(PyDict_Check(v), PyExc_TypeError, "argument must be a dictionary"); Py_INCREF(v); mxURL_MIMEDict = v; Py_ReturnNone(); onError: return NULL; } /* --- module init --------------------------------------------------------- */ /* Python Method Table */ static PyMethodDef Module_methods[] = { Py_MethodListEntrySingleArg("URL",mxURL_URL), Py_MethodListEntrySingleArg("RawURL",mxURL_RawURL), Py_MethodListEntry("urljoin",mxURL_urljoin), Py_MethodWithKeywordsListEntry("BuildURL",mxURL_BuildURL), Py_MethodListEntrySingleArg("setmimedict",mxURL_setmimedict), {NULL,NULL} /* end of list */ }; /* C API table */ static mxURLModule_APIObject mxURLModuleAPI = { &mxURL_Type, mxURL_FromString, mxURL_AsString, mxURL_FromBrokenDown, mxURL_NormalizedFromURL, }; /* Cleanup function */ static void mxURLModule_Cleanup(void) { #ifdef MXURL_FREELIST { mxURLObject *d = mxURL_FreeList; while (d != NULL) { mxURLObject *v = d; d = *(mxURLObject **)d; PyObject_Del(v); } mxURL_FreeList = NULL; } #endif if (!mxPy_DECREF_Unsafe_AtExit()) { Py_XDECREF(mxURL_MIMEDict); } mxURL_MIMEDict = NULL; /* Reset mxURL_Initialized flag */ mxURL_Initialized = 0; } /* create PyMethodObjects and register them in the module's dict */ MX_EXPORT(void) initmxURL(void) { PyObject *module, *moddict, *api; int i; if (mxURL_Initialized) Py_Error(PyExc_SystemError, "can't initialize "MXURL_MODULE" more than once"); /* Create module */ module = Py_InitModule4(MXURL_MODULE, /* Module name */ Module_methods, /* Method list */ Module_docstring, /* Module doc-string */ (PyObject *)NULL, /* always pass this as *self */ PYTHON_API_VERSION); /* API Version */ if (module == NULL) goto onError; /* Init type objects */ PyType_Init(mxURL_Type); /* Init globals */ #ifdef MXURL_FREELIST mxURL_FreeList = NULL; #endif /* Add some constants to the module's dict */ moddict = PyModule_GetDict(module); PyDict_SetItemString(moddict, "__version__", PyString_FromString(MXURL_VERSION)); /* Init the scheme dict */ mxURL_SchemeDict = PyDict_New(); if (mxURL_SchemeDict == NULL) goto onError; for (i = 0; i < sizeof(mxURL_SchemeFeatures) / sizeof(mxURL_SchemeFeature); i++) { mxURL_SchemeFeature *s = &mxURL_SchemeFeatures[i]; PyObject *t; t = Py_BuildValue("(iiiii)", s->uses_netloc, s->uses_params, s->uses_query, s->uses_fragment, s->uses_relative); if (!t) goto onError; if (PyDict_SetItemString(mxURL_SchemeDict, s->scheme, t)) goto onError; } if (PyDict_SetItemString(moddict,"schemes",mxURL_SchemeDict)) goto onError; /* URL unsafe characters */ mxURL_URLUnsafeCharacters = PyString_FromString(URL_unsafe_chars); if (mxURL_URLUnsafeCharacters == NULL) goto onError; if (PyDict_SetItemString(moddict,"url_unsafe_charset", mxURL_URLUnsafeCharacters)) goto onError; /* Errors */ if (!(mxURL_Error = insexc(moddict,"Error",PyExc_StandardError))) goto onError; /* Type objects */ Py_INCREF(&mxURL_Type); PyDict_SetItemString(moddict, "URLType", (PyObject *)&mxURL_Type); /* Register cleanup function */ if (Py_AtExit(mxURLModule_Cleanup)) { /* XXX what to do if we can't register that function ??? */ DPRINTF("* Failed to register mxURL cleanup function\n"); } /* Export C API */ api = PyCObject_FromVoidPtr((void *)&mxURLModuleAPI, NULL); if (api == NULL) goto onError; PyDict_SetItemString(moddict,MXURL_MODULE"API",api); Py_DECREF(api); /* We are now initialized */ mxURL_Initialized = 1; onError: /* Check for errors and report them */ if (PyErr_Occurred()) Py_ReportModuleInitError(MXURL_MODULE); return; } egenix-mx-base-3.2.7/mx/URL/mxURL/mxURL.def0000664000175000017500000000002307014026670017773 0ustar lemburglemburgEXPORTS initmxURL egenix-mx-base-3.2.7/mx/URL/mxURL/mxURL.h0000664000175000017500000001050112133021472017457 0ustar lemburglemburg#ifndef MXURL_H #define MXURL_H /* mxURL -- A URL datatype. Copyright (c) 2000, Marc-Andre Lemburg; mailto:mal@lemburg.com Copyright (c) 2000-2013, eGenix.com Software GmbH; mailto:info@egenix.com See the documentation for further copyright information or contact the author (mailto:mal@lemburg.com). */ /* The extension's name; must be the same as the init function's suffix */ #define MXURL_MODULE "mxURL" /* Name of the package or module that provides the extensions C API. If the extension is used inside a package, provide the complete import path. */ #define MXURL_API_MODULE "mx.URL" /* --- No servicable parts below this line ----------------------*/ /* Include generic mx extension header file */ #include "mxh.h" #ifdef MX_BUILDING_MXURL # define MXURL_EXTERNALIZE MX_EXPORT #else # define MXURL_EXTERNALIZE MX_IMPORT #endif #ifdef __cplusplus extern "C" { #endif /* Flags for some APIs: Normalize the path */ #define NORMALIZE_URL 1 #define RAW_URL 0 /* --- URL Object ------------------------------------------*/ typedef struct { PyObject_HEAD PyObject *url; /* (Normalized) URL as Python string; will always be none-NULL */ PyObject *scheme; /* scheme string or NULL (for: not given); it is always converted to lower case */ /* Indices into PyString_AS_STRING(url), with length; if a part is not used by the scheme, then the char-index and length are set to 0, otherwise the index points into PyString_AS_STRING(url) and the length indicates how many characters make up that field. */ Py_ssize_t netloc; /* network location */ Py_ssize_t netloc_len; Py_ssize_t path; /* path */ Py_ssize_t path_len; Py_ssize_t params; /* parameters */ Py_ssize_t params_len; Py_ssize_t query; /* query */ Py_ssize_t query_len; Py_ssize_t fragment; /* fragment */ Py_ssize_t fragment_len; /* Flags */ short path_normalized; /* Is path normalized ? */ } mxURLObject; /* Type checking macro */ #define mxURL_Check(v) \ (((mxURLObject *)(v))->ob_type == mxURL.URL_Type) /* --- C API ----------------------------------------------------*/ /* C API for usage by other Python modules */ typedef struct { /* Type object for URL() */ PyTypeObject *URL_Type; /* Create a new URL object from str. If normalize is true the URL is normalized first */ mxURLObject *(*mxURL_FromString)(char *str, int normalize); /* Return a pointer to the underlying URL string; the string may *not* be modified ! */ char *(*mxURL_AsString)(mxURLObject *url); /* Create a new URL object from the given 0-terminated strings. If normalize is true the URL is normalized first */ mxURLObject *(*mxURL_FromBrokenDown)(char *scheme, char *netloc, char *path, char *params, char *query, char *fragment, int normalize); /* Create a new URL object from url but with normalized path. */ mxURLObject *(*mxURL_NormalizedFromURL)(mxURLObject *url); } mxURLModule_APIObject; #ifndef MX_BUILDING_MXURL /* Interfacestructure to C API for other modules. Call mxURL_ImportModuleAPI() to initialize this structure. After that usage is simple: PyObject *v; v = mxURL.URL_New("http://www.lemburg.com/"); if (!v) goto onError; ... */ static mxURLModule_APIObject mxURL; /* You *must* call this before using any of the functions in mxURL and check its outcome; otherwise all accesses will result in a segfault. Returns 0 on success. */ #ifndef DPRINTF # define DPRINTF if (0) printf #endif static int mxURL_ImportModuleAndAPI(void) { PyObject *mod = 0, *v = 0; void *api; DPRINTF("Importing the %s C API...\n",MXURL_API_MODULE); mod = PyImport_ImportModule(MXURL_API_MODULE); if (mod == NULL) goto onError; DPRINTF(" module found\n"); v = PyObject_GetAttrString(mod,MXURL_MODULE"API"); if (v == NULL) goto onError; Py_CLEAR(mod); DPRINTF(" API object found\n"); api = PyCObject_AsVoidPtr(v); if (api == NULL) goto onError; Py_CLEAR(v); memcpy(&mxURL,api,sizeof(mxURL)); DPRINTF(" API object initialized.\n"); return 0; onError: DPRINTF(" not found.\n"); Py_XDECREF(mod); Py_XDECREF(v); return -1; } #endif /* EOF */ #ifdef __cplusplus } #endif #endif egenix-mx-base-3.2.7/mx/URL/mxURL/mxh.h0000664000175000017500000000320212133021412017236 0ustar lemburglemburg#ifndef MXH_H #define MXH_H /* mxh.h -- Generic header file for all mx Extenstions This file should be included by every mx Extension header file and the C file. Copyright (c) 2000, Marc-Andre Lemburg; mailto:mal@lemburg.com Copyright (c) 2000-2013, eGenix.com Software GmbH; mailto:info@egenix.com See the documentation for further copyright information or contact the author. */ /* Macros to control export and import of DLL symbols. We use our own definitions since Python's don't allow specifying both imported and exported symbols at the same time; these defines haven't been thoroughly tested yet, patches are most welcome :-) */ /* Macro to "mark" a symbol for DLL export */ #if (defined(_MSC_VER) && _MSC_VER > 850 \ || defined(__MINGW32__) || defined(__CYGWIN) || defined(__BEOS__)) # ifdef __cplusplus # define MX_EXPORT(type) extern "C" type __declspec(dllexport) # else # define MX_EXPORT(type) extern type __declspec(dllexport) # endif #elif defined(__WATCOMC__) # define MX_EXPORT(type) extern type __export #elif defined(__IBMC__) # define MX_EXPORT(type) extern type _Export #else # define MX_EXPORT(type) extern type #endif /* Macro to "mark" a symbol for DLL import */ #if defined(__BORLANDC__) # define MX_IMPORT(type) extern type __import #elif (defined(_MSC_VER) && _MSC_VER > 850 \ || defined(__MINGW32__) || defined(__CYGWIN) || defined(__BEOS__)) # ifdef __cplusplus # define MX_IMPORT(type) extern "C" type __declspec(dllimport) # else # define MX_IMPORT(type) extern type __declspec(dllimport) # endif #else # define MX_IMPORT(type) extern type #endif /* EOF */ #endif egenix-mx-base-3.2.7/mx/URL/mxURL/mxpyapi.h0000664000175000017500000003356612133300665020163 0ustar lemburglemburg#ifndef MXPYAPI_H #define MXPYAPI_H /* mxpyapi.h This header file includes some new APIs that are not available in older API versions, yet are used by the mx-Extensions. Copyright (c) 2000, Marc-Andre Lemburg; mailto:mal@lemburg.com Copyright (c) 2000-2013, eGenix.com Software GmbH; mailto:info@egenix.com */ /* Emulate PY_VERSION_HEX for older Python versions. */ #ifndef PY_VERSION_HEX # if PYTHON_API_VERSION == 1007 # define PY_VERSION_HEX 0x010500F0 # endif # if PYTHON_API_VERSION == 1006 # define PY_VERSION_HEX 0x010400F0 # endif # if PYTHON_API_VERSION < 1006 # define PY_VERSION_HEX 0 # endif #endif #ifdef __cplusplus extern "C" { #endif /* ---------------------------------------------------------------- Python 2.7.4 ---------------------------------------------------------------- */ #if PY_VERSION_HEX >= 0x02070400 && PY_VERSION_HEX < 0x02070500 /* Python 2.7.4 has a bug that causes Py_DECREF() to fail for dictionaries in module cleanup routines. See http://bugs.python.org/issue17703 */ #define mxPy_DECREF_Unsafe_AtExit() 1 #else /* Apply a runtime check */ #define mxPy_DECREF_Unsafe_AtExit() \ (strncmp(Py_GetVersion(), "2.7.4", 5) == 0) #endif /* ---------------------------------------------------------------- Python 2.7 and above: ---------------------------------------------------------------- */ #if PY_VERSION_HEX >= 0x02070000 /* Python 2.7 introduces the backported memoryview object */ #define HAVE_PYTHON_MEMORYVIEW #else #endif /* ---------------------------------------------------------------- Python 2.6 and above: ---------------------------------------------------------------- */ #if PY_VERSION_HEX >= 0x02060000 /* Python 2.6 introduces new buffer interface slots based on the Py_buffer interface. */ #define HAVE_PYTHON_PY_BUFFER #else #endif /* ---------------------------------------------------------------- Python 2.5 and above: ---------------------------------------------------------------- */ #if PY_VERSION_HEX >= 0x02050000 /* Parser marker */ #define Py_SSIZE_T_PARSERMARKER "n" #else /* Python 2.5 introduced a new type for index integers which is not available in earlier versions. Unfortunately, the new type has 64 bits on 64-bit architectures like AMD64, whereas integers still have 32 bits, which causes problems with output parameters. Along with the new type a few type slots were changed and a new parser marker introduced. */ #define Py_ssize_t int /* Parser marker */ #define Py_SSIZE_T_PARSERMARKER "i" /* Integer APIs */ #define PyInt_FromSize_t(x) PyInt_FromLong((long)(x)) #define PyInt_FromSsize_t(x) PyInt_FromLong((long)(x)) #define PyInt_AsSsize_t(x) ((Py_ssize_t)PyInt_AsLong(x)) #endif /* ---------------------------------------------------------------- Python 2.4 and above: ---------------------------------------------------------------- */ #if PY_VERSION_HEX >= 0x02040000 #else #endif /* ---------------------------------------------------------------- Python 2.3 and above: ---------------------------------------------------------------- */ #if PY_VERSION_HEX >= 0x02030000 #else /* These were introduced in Python 2.3: */ # define PY_LONG_LONG LONG_LONG /* Boolean APIs */ #define PyBool_FromLong(x) PyInt_FromLong((long)(x)?1:0) #endif /* ---------------------------------------------------------------- Python 2.2 and above: ---------------------------------------------------------------- */ #if PY_VERSION_HEX >= 0x02020000 # define HAVE_SUBCLASSABLE_TYPES 1 # define HAVE_INTERPRETER_DLOPENFLAGS 1 #else /* These were introduced in Python 2.2: */ # define PyString_CheckExact PyString_Check # define PyInt_CheckExact PyInt_Check # define PyFloat_CheckExact PyFloat_Check # define PyLong_CheckExact PyLong_Check # define PyExc_StopIteration PyExc_IndexError /* Not needed in Python 2.1 and below, so simply ignore the API */ # define PyType_Ready(x) #endif /* ---------------------------------------------------------------- Python 1.6 and 2.0 only: ---------------------------------------------------------------- */ /* Disabled: we don't support Python 1.6 and don't have a need for this API in any of the mx Tools (yet). */ #if 0 #if PY_VERSION_HEX >= 0x01060000 && PY_VERSION_HEX < 0x02010000 static PyObject * PyObject_Unicode(PyObject *v) { PyObject *res; if (v == NULL) res = PyString_FromString(""); else if (PyUnicode_Check(v)) { Py_INCREF(v); return v; } else if (PyString_Check(v)) res = v; else if (v->ob_type->tp_str != NULL) res = (*v->ob_type->tp_str)(v); else { PyObject *func; if (!PyInstance_Check(v) || (func = PyObject_GetAttrString(v, "__str__")) == NULL) { PyErr_Clear(); res = PyObject_Repr(v); } else { res = PyEval_CallObject(func, (PyObject *)NULL); Py_DECREF(func); } } if (res == NULL) return NULL; if (!PyUnicode_Check(res)) { PyObject* str; str = PyUnicode_FromObject(res); Py_DECREF(res); if (str) res = str; else return NULL; } return res; } #endif #endif /* ---------------------------------------------------------------- Python 2.0 alpha + betas: ---------------------------------------------------------------- */ #if PY_VERSION_HEX >= 0x02000000 && PY_VERSION_HEX < 0x020000F0 # if defined(PyBuffer_Check) && !defined(HAVE_PYTHON_BUFFEROBJECTS) # define HAVE_PYTHON_BUFFEROBJECTS # endif #ifndef Py_PROTO # define Py_PROTO(args) args #endif #endif /* ---------------------------------------------------------------- Python 1.6 and later: ---------------------------------------------------------------- */ #if PY_VERSION_HEX >= 0x01060000 #if defined(PyUnicode_Check) && !defined(HAVE_UNICODE) # define HAVE_UNICODE #endif #endif #if PY_VERSION_HEX >= 0x02020000 #if defined(HAVE_UNICODE) && !defined(Py_USING_UNICODE) # undef HAVE_UNICODE #endif #endif #ifndef HAVE_UNICODE # undef PyUnicode_Check # define PyUnicode_Check(obj) 0 #endif /* ---------------------------------------------------------------- Python < 1.6: ---------------------------------------------------------------- */ #if PY_VERSION_HEX < 0x01060000 #if !defined(PyObject_DEL) # define PyObject_DEL(x) free(x) # define PyObject_Del(x) free(x) #endif #endif /* ---------------------------------------------------------------- Python >= 1.5.2: ---------------------------------------------------------------- */ #if PY_VERSION_HEX >= 0x010502F0 # if defined(PyBuffer_Check) && !defined(HAVE_PYTHON_BUFFEROBJECTS) # define HAVE_PYTHON_BUFFEROBJECTS # endif #endif /* ---------------------------------------------------------------- Python >= 1.5.2 and prior to 2.0a1 ---------------------------------------------------------------- */ #if PY_VERSION_HEX >= 0x010502F0 && PY_VERSION_HEX < 0x02000000 /* Takes an arbitrary object which must support the (character, single segment) buffer interface and returns a pointer to a read-only memory location useable as character based input for subsequent processing. buffer and buffer_len are only set in case no error occurrs. Otherwise, -1 is returned and an exception set. */ static int PyObject_AsCharBuffer(PyObject *obj, const char **buffer, int *buffer_len) { PyBufferProcs *pb = obj->ob_type->tp_as_buffer; const char *pp; int len; if ( pb == NULL || pb->bf_getcharbuffer == NULL || pb->bf_getsegcount == NULL ) { PyErr_SetString(PyExc_TypeError, "expected a character buffer object"); goto onError; } if ( (*pb->bf_getsegcount)(obj,NULL) != 1 ) { PyErr_SetString(PyExc_TypeError, "expected a single-segment buffer object"); goto onError; } len = (*pb->bf_getcharbuffer)(obj,0,&pp); if (len < 0) goto onError; *buffer = pp; *buffer_len = len; return 0; onError: return -1; } /* Same as PyObject_AsCharBuffer() except that this API expects (readable, single segment) buffer interface and returns a pointer to a read-only memory location which can contain arbitrary data. buffer and buffer_len are only set in case no error occurrs. Otherwise, -1 is returned and an exception set. */ static int PyObject_AsReadBuffer(PyObject *obj, const void **buffer, int *buffer_len) { PyBufferProcs *pb = obj->ob_type->tp_as_buffer; void *pp; int len; if ( pb == NULL || pb->bf_getreadbuffer == NULL || pb->bf_getsegcount == NULL ) { PyErr_SetString(PyExc_TypeError, "expected a readable buffer object"); goto onError; } if ( (*pb->bf_getsegcount)(obj,NULL) != 1 ) { PyErr_SetString(PyExc_TypeError, "expected a single-segment buffer object"); goto onError; } len = (*pb->bf_getreadbuffer)(obj,0,&pp); if (len < 0) goto onError; *buffer = pp; *buffer_len = len; return 0; onError: return -1; } /* Takes an arbitrary object which must support the (writeable, single segment) buffer interface and returns a pointer to a writeable memory location in buffer of size buffer_len. buffer and buffer_len are only set in case no error occurrs. Otherwise, -1 is returned and an exception set. */ static int PyObject_AsWriteBuffer(PyObject *obj, void **buffer, int *buffer_len) { PyBufferProcs *pb = obj->ob_type->tp_as_buffer; void*pp; int len; if ( pb == NULL || pb->bf_getwritebuffer == NULL || pb->bf_getsegcount == NULL ) { PyErr_SetString(PyExc_TypeError, "expected a writeable buffer object"); goto onError; } if ( (*pb->bf_getsegcount)(obj,NULL) != 1 ) { PyErr_SetString(PyExc_TypeError, "expected a single-segment buffer object"); goto onError; } len = (*pb->bf_getwritebuffer)(obj,0,&pp); if (len < 0) goto onError; *buffer = pp; *buffer_len = len; return 0; onError: return -1; } #endif /* Python Version in [1.5.2b2, 2.0) */ /* ---------------------------------------------------------------- Python 1.5.2b1 and older: ---------------------------------------------------------------- */ #if PY_VERSION_HEX <= 0x010502B1 /* These are missing from PC/python_nt.def and thus didn't get included in python1.5.lib on Windows platforms. */ #ifdef MS_WIN32 # define PyString_InternInPlace(x) # define PyString_InternFromString(x) PyString_FromString(x) #endif #endif /* Python Version <= 1.5.2b1 */ /* ---------------------------------------------------------------- Python 1.5.2a2 and older: ---------------------------------------------------------------- */ #if PY_VERSION_HEX <= 0x010502A2 extern long PyOS_strtol Py_PROTO((const char *, char **, int)); #endif /* Python Version <= 1.5.2a2 */ /* ---------------------------------------------------------------- Python 1.5.2a1 and older: ---------------------------------------------------------------- */ #if PY_VERSION_HEX <= 0x010502A1 #ifndef PyList_SET_ITEM # define PyList_SET_ITEM(l,i,w) PyList_GET_ITEM(l,i) = w #endif #endif /* Python Version < 1.5.2a1 */ /* ---------------------------------------------------------------- Prior to Python 1.5: ---------------------------------------------------------------- */ #if PY_VERSION_HEX < 0x010500F0 /* New in Python1.5: */ # undef PyString_AS_STRING # define PyString_AS_STRING(op) (((PyStringObject *)(op))->ob_sval) # define PyString_GET_SIZE(op) (((PyStringObject *)(op))->ob_size) # define PyTuple_GET_SIZE(op) (((PyTupleObject *)(op))->ob_size) # define PyList_GET_SIZE(op) (((PyListObject *)(op))->ob_size) /* Changed since 1.4 */ # undef PyList_GET_ITEM # define PyList_GET_ITEM(op, i) (((PyListObject *)(op))->ob_item[i]) # undef PyInt_AS_LONG # define PyInt_AS_LONG(op) (((PyIntObject *)(op))->ob_ival) # undef PyFloat_AS_DOUBLE # define PyFloat_AS_DOUBLE(op) (((PyFloatObject *)(op))->ob_fval) /* This function is taken from error.c in Python 1.5... Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, The Netherlands. All Rights Reserved Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation, and that the names of Stichting Mathematisch Centrum or CWI or Corporation for National Research Initiatives or CNRI not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. While CWI is the initial source for this software, a modified version is made available by the Corporation for National Research Initiatives (CNRI) at the Internet address ftp://ftp.python.org. STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifdef HAVE_STDARG_PROTOTYPES PyObject * PyErr_Format(PyObject *exception, const char *format, ...) #else PyObject * PyErr_Format(exception, format, va_alist) PyObject *exception; const char *format; va_dcl #endif { va_list vargs; char buffer[500]; /* Caller is responsible for limiting the format */ #ifdef HAVE_STDARG_PROTOTYPES va_start(vargs, format); #else va_start(vargs); #endif vsprintf(buffer, format, vargs); PyErr_SetString(exception, buffer); return NULL; } /* Python 1.5 uses instances as exceptions, the 1.4 API only knows about strings. */ #define PyErr_NewException(name,base,dict) PyString_FromString(fullname); /* Missing from rename2.h in Python 1.4 */ #ifndef PyVarObject # define PyVarObject varobject #endif #endif /* Python Version < 1.5 */ #ifdef __cplusplus } #endif /* EOF */ #endif egenix-mx-base-3.2.7/mx/URL/mxURL/mxstdlib.h0000664000175000017500000002612712133021413020304 0ustar lemburglemburg#ifndef MXSTDLIB_H #define MXSTDLIB_H /* Standard stuff I use often -- not Python specific Copyright (c) 2000, Marc-Andre Lemburg; mailto:mal@lemburg.com Copyright (c) 2000-2013, eGenix.com Software GmbH; mailto:info@egenix.com See the documentation for further copyright information or contact the author. */ /* Standard includes */ #include #include #include #include #include #include /* Limits */ #ifdef HAVE_LIMITS_H # include #else # ifndef INT_MAX # define INT_MAX 2147483647 # endif # ifndef LONG_MAX # define LONG_MAX INT_MAX # endif #endif /* Disable a few MS VC++ warnings that were introduced in VS 2005, e.g. warning C4996: 'getenv': This function or variable may be unsafe. Consider using _dupenv_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. Note that #define _CRT_SECURE_NO_WARNINGS 1 does not work for some reason. You have to use the #pragma warning() to disable warnings inside a header file. */ #if defined(_MSC_VER) && (_MSC_VER >= 1400) # pragma warning(disable:4996) #endif /* --- My own macros for memory allocation... --------------------------- */ /* Define this macro if the code should use C malloc */ /* #define MAL_USE_C_MALLOC */ /* Define this macro if the code should use Python's pymalloc */ /* #define MAL_USE_PYMALLOC */ /* Define this macro if the code should use pymalloc and uses the cnew()/cnewstruct() macros. This is needed to only enable the helper functions when using those macros in pymalloc mode. */ /* #define MAL_USING_CNEW */ /* Decide which variant to use, if no explicit choice was made: C malloc or pymalloc */ #ifdef MAL_USE_C_MALLOC /* Force use of C malloc */ #elif !defined(MAL_USE_PYMALLOC) && defined (PYTHON_API_VERSION) /* Default to using the Python pymalloc in case we're compiling a Python extension */ # define MAL_USE_PYMALLOC #endif #ifndef MAL_USE_PYMALLOC /* --- Use C malloc for memory allocation --- */ # ifdef MAL_MEM_DEBUG /* Include debug information for tracing memory leaks */ # define newstruct(x) \ (mxDebugPrintf("* malloc for struct "#x" (%s:%i)\n",__FILE__,__LINE__),\ (x *)malloc(sizeof(x))) # define cnewstruct(x) \ (mxDebugPrintf("* calloc for struct "#x" (%s:%i)\n",c,__FILE__,__LINE__),\ (x *)calloc(sizeof(x),1)) # define new(x,c) \ (mxDebugPrintf("* malloc for "#c"=%i '"#x"'s (%s:%i)\n",c,__FILE__,__LINE__),\ (x *)malloc(sizeof(x)*(c))) # define cnew(x,c) \ (mxDebugPrintf("* calloc for "#c"=%i '"#x"'s (%s:%i)\n",c,__FILE__,__LINE__),\ (x *)calloc((c),sizeof(x))) # define resize(var,x,c) \ (mxDebugPrintf("* realloc array "#var" ("#x") at %X to size "#c"=%i (%s:%i)\n",var,c,__FILE__,__LINE__),\ (x *)realloc((void*)(var),sizeof(x)*(c))) # define varresize(var,x,bytes) \ (mxDebugPrintf("* realloc var "#var" ("#x") at %X to %i bytes (%s:%i)\n",var,bytes,__FILE__,__LINE__),\ (x *)realloc((void*)(var),(bytes))) # define free(x) \ (mxDebugPrintf("* freeing "#x" at %X (%s:%i)\n",x,__FILE__,__LINE__),\ free((void*)(x))) # else /* Non-debug versions of the macros */ # define newstruct(x) ((x *)malloc(sizeof(x))) # define cnewstruct(x) ((x *)calloc(sizeof(x),1)) # define new(x,c) ((x *)malloc(sizeof(x)*(c))) # define cnew(x,c) ((x *)calloc((c),sizeof(x))) # define resize(var,x,c) ((x *)realloc((void*)(var),sizeof(x)*(c))) # define varresize(var,x,bytes) ((x *)realloc((void*)(var),(bytes))) # define free(x) (free((void*)(x))) # endif #else /* --- Use Python pymalloc for memory allocation --- */ # ifdef MAL_USING_CNEW /* Helper needed since Python doesn't define a calloc() interface. */ static void *mx_PyObject_CALLOC(register size_t size) { register void *mem; if (size == 0) return NULL; mem = PyObject_MALLOC(size); if (mem) memset(mem, 0, size); return mem; } # endif # ifndef MAL_MEM_DEBUG /* Non-debug versions of the macros */ # define newstruct(x) ((x *)PyObject_MALLOC(sizeof(x))) # ifdef MAL_USING_CNEW # define cnewstruct(x) ((x *)mx_PyObject_CALLOC(sizeof(x))) # endif # define new(x,c) ((x *)PyObject_MALLOC(sizeof(x)*(c))) # ifdef MAL_USING_CNEW # define cnew(x,c) ((x *)mx_PyObject_CALLOC(sizeof(x)*(c))) # endif # define resize(var,x,c) ((x *)PyObject_REALLOC((void*)(var),sizeof(x)*(c))) # define varresize(var,x,bytes) ((x *)PyObject_REALLOC((void*)(var),(bytes))) # define free(x) (PyObject_FREE((void*)(x))) # else /* Debug versions of the macros */ # define newstruct(x) \ (mxDebugPrintf("* malloc for struct "#x" (%s:%i)\n",__FILE__,__LINE__), \ (x *)PyObject_MALLOC(sizeof(x))) # ifdef MAL_USING_CNEW # define cnewstruct(x) \ (mxDebugPrintf("* calloc for struct "#x" (%s:%i)\n",c,__FILE__,__LINE__), \ ((x *)mx_PyObject_CALLOC(sizeof(x)))) # endif # define new(x,c) \ (mxDebugPrintf("* malloc for "#c"=%i '"#x"'s (%s:%i)\n",c,__FILE__,__LINE__), \ ((x *)PyObject_MALLOC(sizeof(x)*(c)))) # ifdef MAL_USING_CNEW # define cnew(x,c) \ (mxDebugPrintf("* calloc for "#c"=%i '"#x"'s (%s:%i)\n",c,__FILE__,__LINE__), \ ((x *)mx_PyObject_CALLOC(sizeof(x)*(c)))) # endif # define resize(var,x,c) \ (mxDebugPrintf("* realloc array "#var" ("#x") at %X to size "#c"=%i (%s:%i)\n",var,c,__FILE__,__LINE__), \ ((x *)PyObject_REALLOC((void*)(var),sizeof(x)*(c)))) # define varresize(var,x,bytes) \ (mxDebugPrintf("* realloc var "#var" ("#x") at %X to %i bytes (%s:%i)\n",var,bytes,__FILE__,__LINE__), \ ((x *)PyObject_REALLOC((void*)(var),(bytes)))) # define free(x) \ (mxDebugPrintf("* freeing "#x" at %X (%s:%i)\n",x,__FILE__,__LINE__), \ (PyObject_FREE((void*)(x)))) # endif #endif /* --- Debugging output ------------------------------------------------- */ /* Use the flag MAL_DEBUG to enable debug processing. The flag MAL_DEBUG_WITH_PYTHON can be used to indicate that the object file will be linked with Python, so we can use Python APIs for the debug processing here. */ #ifdef MAL_DEBUG_WITH_PYTHON # ifndef PYTHON_API_VERSION # error "mx.h must be included when compiling with MAL_DEBUG_WITH_PYTHON" # endif # ifndef MAL_DEBUG # define MAL_DEBUG # endif #else # if defined(PYTHON_API_VERSION) && defined(MAL_DEBUG) # define MAL_DEBUG_WITH_PYTHON # endif #endif /* Indicator for the availability of these interfaces: */ #define HAVE_MAL_DEBUG /* Name of the environment variable defining the log file name to be used: */ #ifndef MAL_DEBUG_OUTPUTFILE_ENV_VARIABLE # define MAL_DEBUG_OUTPUTFILE_ENV_VARIABLE "mxLogFile" #endif /* File name to be used for debug logging (each object file using this facility may set its own logging file) if no environment variable is set: */ #ifndef MAL_DEBUG_OUTPUTFILE # define MAL_DEBUG_OUTPUTFILE "mx.log" #endif /* Name of the environment variable defining the log file prefix to be used (e.g. to direct all log files into a separate directory): */ #ifndef MAL_DEBUG_OUTPUTFILEPREFIX_ENV_VARIABLE # define MAL_DEBUG_OUTPUTFILEPREFIX_ENV_VARIABLE "mxLogFileDir" #endif /* File name prefix to be used for log files, if no environment variable is set: */ #ifndef MAL_DEBUG_OUTPUTFILEPREFIX # define MAL_DEBUG_OUTPUTFILEPREFIX "" #endif /* Log id to be used */ #ifndef MAL_DEBUG_LOGID # define MAL_DEBUG_LOGID "New Log Session" #endif /* Debug printf() API Output is written to a log file or stream. If the output file is not yet open, the function will try to open the file as defined by the environment or the program defines. The file remains open until the program terminates. Subsequent changes to the environment are not taken into account. The output file is deduced in the following way: 1. get the filename from the environment, revert to the predefined value 2. get the filename prefix from the environment, revert to the predefined value 3. if filename is one of "stderr" or "stdout" use the native streams for output; otherwise try to open fileprefix + filename reverting to stderr in case this fails. */ static int mxDebugPrintf(const char *format, ...) { va_list args; static FILE *mxDebugPrintf_file; if (!mxDebugPrintf_file) { time_t now; char *filename,*fileprefix; now = time(NULL); filename = getenv(MAL_DEBUG_OUTPUTFILE_ENV_VARIABLE); if (!filename) filename = MAL_DEBUG_OUTPUTFILE; fileprefix = getenv(MAL_DEBUG_OUTPUTFILEPREFIX_ENV_VARIABLE); if (!fileprefix) fileprefix = MAL_DEBUG_OUTPUTFILEPREFIX; if (strcmp(filename,"stdout") == 0) mxDebugPrintf_file = stdout; else if (strcmp(filename,"stderr") == 0) mxDebugPrintf_file = stderr; else { char logfile[512]; if (strlen(fileprefix) + strlen(filename) > sizeof(logfile) - 1) { /* Hack to shut up "cc -Wall" warning that this function is not used... */ static void *mxDebugPrintf_used; mxDebugPrintf_used = (void *)mxDebugPrintf; /* Default to stderr in case the log file name doesn't fit the available buffer */ mxDebugPrintf_file = stderr; fprintf(mxDebugPrintf_file, "\n*** Log file name too long: '%s%s'; " "using stderr\n", fileprefix, filename); } else { /* We made sure that there is enough room in logfile, so can use the unlimited APIs here */ strcpy(logfile, fileprefix); strcat(logfile, filename); mxDebugPrintf_file = fopen(logfile,"ab"); if (!mxDebugPrintf_file) { /* Default to stderr in case the log file cannot be opened */ mxDebugPrintf_file = stderr; fprintf(mxDebugPrintf_file, "\n*** Failed to open log file '%s'; " "using stderr\n",logfile); } } } fprintf(mxDebugPrintf_file, "\n--- "MAL_DEBUG_LOGID" --- %s\n", ctime(&now)); } va_start(args,format); vfprintf(mxDebugPrintf_file,format,args); fflush(mxDebugPrintf_file); va_end(args); return 1; } #ifdef MAL_DEBUG # ifdef MAL_DEBUG_WITH_PYTHON /* Use the Python debug flag to enable debugging output (python -d) */ # define DPRINTF if (Py_DebugFlag) mxDebugPrintf # define IF_DEBUGGING if (Py_DebugFlag) # define DEBUGGING (Py_DebugFlag > 0) # else /* Always output debugging information */ # define DPRINTF mxDebugPrintf # define IF_DEBUGGING # define DEBUGGING (1) # endif #else # ifndef _MSC_VER /* This assumes that you are using an optimizing compiler which eliminates the resulting debug code. */ # define DPRINTF if (0) mxDebugPrintf # define IF_DEBUGGING if (0) # define DEBUGGING (0) # else /* MSVC doesn't do a good job here, so we use a different approach. */ # define DPRINTF 0 && mxDebugPrintf # define IF_DEBUGGING if (0) # define DEBUGGING (0) # endif #endif /* --- Misc ------------------------------------------------------------- */ /* The usual bunch... */ #ifndef max # define max(a,b) ((a>b)?(a):(b)) #endif #ifndef min # define min(a,b) ((a" % self.__name__ egenix-mx-base-3.2.7/mx/URL/Listing.py0000664000175000017500000000651712133021470017265 0ustar lemburglemburg""" Get directory listing for various Internet protocols. XXX This submodule is still experimental. Copyright (c) 2001-2013, eGenix.com Software GmbH; mailto:info@egenix.com See the documentation for further information on copyrights, or contact the author. All Rights Reserved. """ # Python imports: import urllib, ftplib, os, stat, exceptions import posixpath # Package local imports: import URL ### FTP scheme def ftp_listdir(ftp, url): path = url.path or '/' listing = ftp.nlst(path) files = [] dirs = [] for filename in listing: try: size = ftp.size(filename) except (ftplib.error_perm, ftplib.error_temp): size = -1 if size >= 0: files.append(url + filename) else: dirs.append(url + filename) return dirs, files # Cache for better performance _ftp_cache = {} _max_ftp_cache_size = 5 def ftp_open(url): connection = (url.host, url.port or ftplib.FTP_PORT, url.user, url.passwd) ftp = _ftp_cache.get(connection, None) if ftp is not None: if ftp._in_use: # Open a new connection ftp = None else: # Check the connection try: ftp.voidcmd('TYPE A') except ftplib.all_errors: ftp = None if ftp is None: ftp = ftplib.FTP() ftp.connect(url.host, url.port or ftplib.FTP_PORT) if url.user: ftp.login(url.user, url.passwd) else: # Anonymous ftp.login('anonymous', 'anonymous@internet.domain') # Manage the FTP cache if len(_ftp_cache) >= _max_ftp_cache_size: for k,v in _ftp_cache.items(): if not v._in_use: del _ftp_cache[k] if len(_ftp_cache) >= _max_ftp_cache_size: _ftp_cache.clear() # Note that we only store one FTP object per connection; this may # overwrite a previously cached version, which will then get # garbage collected after having finished _ftp_cache[connection] = ftp ftp._in_use = 1 return ftp def ftp_close(ftp): ftp._in_use = 0 # Leave in cache for subsequent usage; timeouts are handled in ftp_open() ### File scheme def file_listdir(url): path = url.path or '.' if os.path.isfile(path): return [], [path] listing = os.listdir(path) files = [] dirs = [] for filename in listing: if os.path.isdir(filename): dirs.append(url + filename) elif os.path.isfile(filename): files.append(url + filename) return dirs, files ### Generic API def list(url): """ Returns a tuple (directories, files) providing a list of directory and file URLs which can be found at the given URL. The directory and file names are made absolute to URL's network location. Supported schemes are '' (no scheme = local file), 'file' and 'ftp'. """ url = URL.URL(url) scheme = url.scheme if scheme == 'ftp': ftp = ftp_open(url) try: values = ftp_listdir(ftp, url) finally: ftp_close(ftp) return values elif scheme == 'file' or scheme == '': return file_listdir(url) else: raise ValueError, 'unsupported scheme "%s"' % scheme egenix-mx-base-3.2.7/mx/URL/Makefile.pkg0000664000175000017500000000151307302755102017521 0ustar lemburglemburgall: compile install # Compile target. This should setup the package and compile it # into a state ready for installation. compile: cd mxURL; \ if ! test -f Makefile; then $(MAKE) -f Makefile.pre.in boot; fi; \ $(MAKE) # Install target. This should do the install step. If the package # needs no further installation step (i.e. the extension is not # needed by other extension modules), then you can leave this target # blank. install: cd mxURL; \ $(MAKE) install # Test target. Should do some testing of the extension. Writing # something like 'ok' or 'works' and the end of a successful run. test: cd mxURL; \ python test.py # Documentation target. Use this to have the documentation for # an extension generated at the user. doc: # ??? # Cleanup before distributing the package # distclean: cd mxURL; \ $(MAKE) distclean egenix-mx-base-3.2.7/mx/URL/README0000664000175000017500000000021607315370437016170 0ustar lemburglemburgPlease see the documentation in the Doc/ subdirectory for further information on installation and usage. Marc-Andre Lemburg, mal@lemburg.com egenix-mx-base-3.2.7/mx/URL/URL.py0000664000175000017500000002165112133021470016312 0ustar lemburglemburg""" mx.URL -- A URL datatype. Relies on mx.TextTools and mx.Tools. Copyright (c) 1998-2000, Marc-Andre Lemburg; mailto:mal@lemburg.com Copyright (c) 2000-2013, eGenix.com Software GmbH; mailto:info@egenix.com See the documentation for further information on copyrights, or contact the author. All Rights Reserved. """ import mimetypes from mx import Tools,TextTools # # Import the C extension module # from mxURL import * from mxURL import __version__ # # Registry for the URL object provided by mxURL: # def register_scheme(scheme,uses_netloc, uses_params, uses_query, uses_fragment, uses_relative): """ Adds a new scheme to the URL objects scheme registry. The uses_* fields must be 0 or 1 according to the schemes possibilities. """ schemes[scheme] = (uses_netloc, uses_params, uses_query, uses_fragment, uses_relative) # # Registry for the URL object provided by mxURL: # def register_mimetype(extension,major='*',minor='*'): """ Adds a new mimetype to the registry used by mxURL. extension must be a file name extension including the delimiting dot (e.g. ".html"). The function will overwrite any existing entry for the given extension. """ assert extension[0] == '.' mimemap[extension] = '%s/%s' % (major,minor) # # Add some extra MIME types that are not included in the distribution # version of mimetypes.py (not until Python 1.5 at least). # mimemap.update({ '.shtml': 'text/html', '.phtml': 'text/html', '.pcx': 'image/pcx', '.txt': 'text/plain', '.css': 'text/css', '.pyo': 'application/x-python-code', '.c': 'text/x-c', '.h': 'text/x-c', '.cpp': 'text/x-c', '.cxx': 'text/x-c', '.hxx': 'text/x-c', '.xml': 'text/xml', '.xsl': 'application/xml', '.dll': 'application/octet-stream', '.pyd': 'application/octet-stream', }) ### Module init stuff class _modinit: # Reserved URL chars as defined by RFC2396 unsafe_charset = TextTools.set(\ 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' '0123456789' '-_.!~*\'()',0) # Modified version of the above set which includes even fewer # characters (esp. dots and quotes are not included) rpc_unsafe_charset = TextTools.set(\ 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' '0123456789' '-_()',0) def escape(urltext,unsafe_charset=_modinit.unsafe_charset, ord=ord,len=len, setsplitx=TextTools.setsplitx,join=TextTools.join): """ Escape all special chars in a URL text using the %xx-encoding. The urltext is considered not being part of the URL itself but only a subpart. XXX Recode in C for speed. """ hl = setsplitx(urltext,unsafe_charset) if len(hl) > 1: for i in range(1,len(hl),2): text = '' for c in hl[i]: text = text + '%%%02X' % ord(c) hl[i] = text return join(hl,'') return urltext def unescape(urltext, charsplit=TextTools.charsplit, join=TextTools.join,chr=chr,int=int, irange=Tools.irange,len=len,trange=Tools.trange): """ Unescape a URL text part containing %xx-character encodings XXX Recode in C for speed. """ hl = charsplit(urltext,'%') if len(hl) > 1: for i,text in irange(hl,trange(1,len(hl))): hl[i] = chr(int(text[:2],16)) + text[2:] return join(hl,'') return urltext # Aliases urlencode = escape urldecode = unescape quote = escape unquote = unescape def rpcencode(name,args=(),kws=None,prefix='',encode=1, urlencode=urlencode,join=TextTools.join, rpc_unsafe_charset=_modinit.rpc_unsafe_charset, irange=Tools.irange,tuple=tuple): """ Return a string encoding a call of name with the given string arguments given in tuple args and dict kws (may be None). kws may also be None if no keywords are needed. Arguments and keywords are converted to strings (if not already given as strings) and may *not* contain ',' or '=' characters, since these are used to separate the arguments in the argument list. The resulting string is prefixed with prefix and then urlencoded if encode is true (default). The encoding scheme used looks like this: * no arguments: 'name()' * one argument: 'name(arg0)' * >1 argument: 'name(arg0,arg1,arg2,...)' * arguments and keywords: 'name(arg0,arg1,kw0=val0,kw1=val1,...)' """ if args: arguments = map(str,args) else: arguments = [] if kws: l = kws.items() for i,item in irange(l): l[i] = '%s=%s' % item arguments[len(arguments):] = l if not arguments: rpc = prefix+name+'()' else: rpc = '%s%s(%s)' % (prefix,name,join(arguments,',')) if encode: return urlencode(rpc,unsafe_charset=rpc_unsafe_charset) else: return rpc def rpcdecode(url,prefix='',decode=1, splitat=TextTools.splitat,charsplit=TextTools.charsplit, len=len,tuple=tuple,urldecode=urldecode): """ Decode a RPC encoded function/method call. Returns a tuple (name,args,kws) where args is a tuple of string arguments and kws is a dictionary containing the given keyword parameters or None. All parameters are returned as strings; it is up to the caller to decode them into e.g. integers, etc. If prefix is given and found it is removed from the name prior to returning it. decode can be set to false to prevent the url from being urldecoded prior to processing. The decode function also supports the syntax 'method' instead of 'method()' for calls without arguments. """ if decode: url = urldecode(url) # Decode the method: method[(arg0,arg1,...,kw0=val0,kw1=val1,...)] name,rawargs = splitat(url,'(') if rawargs: # Cut out the pure argument part, ignoring any character after # the final ')' rawargs,rest = splitat(rawargs,')',-1) # Argument list: split at ',' args = charsplit(rawargs,',') if '=' in rawargs: kws = {} for i,arg in Tools.reverse(Tools.irange(args)): if '=' in arg: k,v = splitat(arg,'=') kws[k] = v del args[i] else: kws = None args = tuple(args) else: args = () kws = None if prefix: if name[:len(prefix)] == prefix: name = name[len(prefix):] return name,args,kws else: return name,args,kws def queryencode(items, prefix='?', urlencode=urlencode,join=TextTools.join,str=str): """ Takes a sequence of key,value items and formats a URL encoded query part out of it. Keys and values are converted to string prior to URL conversion. prefix is prepended to the resulting string. It defaults to '?' so that the returned value can directly be concatenated to a URL. """ l = [] append = l.append for k,v in items: append(urlencode(str(k)) + '=' + urlencode(str(v))) return prefix + join(l, '&') def querydecode(query, charsplit=TextTools.charsplit,splitat=TextTools.splitat, urldecode=urldecode): """ Decodes a query string and returns a list of items (key, value). If query is prefixed with a question mark ('?'), this is silently ignored. Query parts which don't provide a value will get None assigned as value in the items list. """ if query and query[0] == '?': query = query[1:] if not query: return [] pairs = charsplit(query, '&') items = [] for pair in pairs: if '=' in pair: key, value = splitat(pair, '=') key = urldecode(key) value = urldecode(value) else: key = urldecode(pair) value = None items.append((key, value)) return items def addscheme(url, URL=URL): """ Returns the URL url with scheme added according to common usage. If the url already provides a scheme, nothing is changed. Strings are turned into URL object by the function. These conventions are used: www. -> http://www. ftp. -> ftp://ftp. [/.] -> file:[/.] none of these -> http:// """ url = URL(url) if not url.scheme: if url.string[:4] == 'www.': return url.recode(scheme='http') elif url.string[:4] == 'ftp.': return url.recode(scheme='ftp') elif url.string[:1] in ('/','.'): return url.recode(scheme='file') else: return url.recode(scheme='http') return url egenix-mx-base-3.2.7/mx/URL/__init__.py0000664000175000017500000000132112133021471017400 0ustar lemburglemburg""" mxURL - A URL datatype. Copyright (c) 2000, Marc-Andre Lemburg; mailto:mal@lemburg.com Copyright (c) 2000-2013, eGenix.com Software GmbH; mailto:info@egenix.com See the documentation for further information on copyrights, or contact the author. All Rights Reserved. """ from URL import * from URL import __version__ # # Make URLs pickleable # # Shortcut for pickle (reduces the pickle's length) def _URL(url, RawURL=RawURL): return RawURL(url) # Module init class _modinit: ### Register the type import copy_reg def pickle_URL(url): return _URL,(url.string,) copy_reg.pickle(URLType, pickle_URL, _URL) del _modinit egenix-mx-base-3.2.7/mx/COPYRIGHT0000664000175000017500000000113410025164303016122 0ustar lemburglemburg --------------------------------------------------------------------- COPYRIGHT NOTICE --------------------------------------------------------------------- Copyright (c) 1997-2000, Marc-Andre Lemburg; mailto:mal@lemburg.com Copyright (c) 2000-2004, eGenix.com Software GmbH; mailto:info@egenix.com All Rights Reserved. This software is protected by copyright and other intellectual property laws and by international treaties. egenix-mx-base-3.2.7/mx/LICENSE0000664000175000017500000000106211101710410015624 0ustar lemburglemburg============================================================================= eGenix.com mx Extension Series for Python ----------------------------------------------------------------------------- Please see the LICENSE file in the package subdirectories for information on copyright and authorized use of the packages. Some packages are licensed as Open Source software, others are commercial software. ----------------------------------------------------------------------------- Marc-Andre Lemburg, mal@egenix.com CEO eGenix.com GmbH Langenfeld Germany egenix-mx-base-3.2.7/mx/Log.py0000664000175000017500000006460012133021425015730 0ustar lemburglemburg#!/usr/local/bin/python """ Standard Logging Interface Creates an object log, that can be used for global logging activities. The properties can later be changed by calling log.setup(). It is safe to do a 'from mx.Log import *'. Copyright (c) 1999-2000, Marc-Andre Lemburg; mailto:mal@lemburg.com Copyright (c) 2000-2013, eGenix.com Software GmbH; mailto:info@egenix.com See the documentation for further information on copyrights, or contact the author. All Rights Reserved. """ # Be careful with these symbols since we want 'from mx.Log import *' # to not clutter up the users namespace. import sys, types, traceback, os from mx import DateTime, Tools (_sys,_DateTime,_types,_traceback,_os) = \ (sys,DateTime,types,traceback,os) del sys,DateTime,types,traceback,os # Load new builtins import mx.Tools.NewBuiltins del mx # Infos & Errors (lower values indicate higher importance) SYSTEM_ALWAYS_LOG = 0 SYSTEM_FATAL = 1 SYSTEM_PANIC = 2 SYSTEM_ERROR = 10 SYSTEM_CANCEL = 11 SYSTEM_IMPORTANT = 100 SYSTEM_WARNING = 500 SYSTEM_MESSAGE = 600 SYSTEM_UNIMPORTANT = 3000 SYSTEM_INFO = 1000 SYSTEM_DEBUG = 2000 # The highest used value: SYSTEM_ANY = 9999 # Some log level limits SYSTEM_LOG_NOTHING = 0 SYSTEM_LOG_EVERYTHING = SYSTEM_ANY ### Helpers _NAME_LEN_LIMIT = 80 _VALUE_LEN_LIMIT = 500 _TRACEBACK_LIMIT = 100 _DICT_LEN_LIMIT = 50 _NON_RECURSIVE = (_types.ModuleType, _types.FunctionType, _types.MethodType, _types.BuiltinFunctionType, _types.BuiltinMethodType, _types.ClassType, __builtins__) _STRING_TYPES = (_types.StringType, _types.UnicodeType) def is_string(obj): """ Return 1/0 depending on whether obj is an instance of a string type. """ return isinstance(obj, _STRING_TYPES) # For Python < 2.2, isinstance() does not accept tuples of types, so # override is_string() with a version that does not need this. try: isinstance('', _STRING_TYPES) except TypeError: def is_string(obj): for typeobj in _STRING_TYPES: if isinstance(obj, typeobj): return 1 return 0 def print_tb_locals(tb=None, *args, **kws): """ Print a listing of the traceback's locals() to file. """ # Walk down the traceback if tb is None: tb = _sys.exc_info()[2] while tb.tb_next != None: tb = tb.tb_next # Show the local variables apply(print_frame_locals, (tb.tb_frame,) + args, kws) def print_tb_globals(tb=None, *args, **kws): """ Print a listing of the traceback's globals() to file. """ # Walk down the traceback if tb is None: tb = _sys.exc_info()[2] while tb.tb_next != None: tb = tb.tb_next # Show the global variables apply(print_frame_globals, (tb.tb_frame,) + args, kws) def print_tb_vars(tb=None, *args, **kws): """ Print a listing of the traceback's locals() and globals() to file. If locals() and globals() are the same object, only the globals() are printed. """ # Walk down the traceback if tb is None: tb = _sys.exc_info()[2] while tb.tb_next != None: tb = tb.tb_next if tb.tb_frame.f_locals is not tb.tb_frame.f_globals: # Show the local variables apply(print_frame_locals, (tb.tb_frame,) + args, kws) # Show the global variables apply(print_frame_globals, (tb.tb_frame,) + args, kws) def filter_private_attributes(key): """ Filters all attributes which start with an underscore. For use as filter argument to one of the print_xxx() APIs. """ if is_string(key) and key[:1] == '_': return 0 return 1 def print_frame_locals(frame,file=_sys.stdout, indent='# ', title='### Dump of local variables:\n', levels=2, nonrecursive=_NON_RECURSIVE, filter=None): """ Print a listing of the locals() in frame to file. """ if title: file.write(title) print_dict(frame.f_locals,file,indent,levels, nonrecursive=nonrecursive,filter=filter) def print_frame_globals(frame,file=_sys.stdout, indent='# ', title='### Dump of global variables:\n', levels=2, nonrecursive=_NON_RECURSIVE, filter=None): """ Print a listing of the globals() in frame to file. """ if title: file.write(title) print_dict(frame.f_globals,file,indent,levels, nonrecursive=nonrecursive,filter=filter) def print_dict(dict,file,indent='',levels=1,reprkeys=0, nonrecursive=(),filter=None): """ Print dictionary to file. reprkeys=1 will print the items using repr() for keys as well. indent is prepended to all lines. levels indicates the number of recursion levels to be printed. filter may be given as callable taking the dictionary key as input. It should then return 1 for keys which should be displayed and 0 for ones which should be skipped. """ l = dict.items() l.sort() if len(l) > _DICT_LEN_LIMIT: l = l[:_DICT_LEN_LIMIT] l.append(('...','...truncated...')) for k,v in l: if filter is not None: if not filter(k): continue if reprkeys: try: n = repr(k) except: n = '*repr()-error*' else: n = str(k) try: r = repr(v) except: r = '*repr()-error*' # Truncate if len(n) > _NAME_LEN_LIMIT: n = n[:_NAME_LEN_LIMIT] + '...' if len(r) > _VALUE_LEN_LIMIT: r = r[:_VALUE_LEN_LIMIT] + '...' # Write item if reprkeys: file.write('%s %-15s = %s\n' % (indent,n,r)) else: file.write('%s.%-15s = %s\n' % (indent,n,r)) if levels > 1: print_recursive(v,file,indent + ' ',levels-1, nonrecursive=nonrecursive, filter=filter) def print_sequence(obj,file=_sys.stdout,indent='',levels=2, nonrecursive=()): l = [] unfold = 0 try: length = len(obj) except (AttributeError, ValueError, TypeError): return for i in Tools.trange(min(length,_VALUE_LEN_LIMIT)): try: value = obj[i] except: break try: r = repr(value) except: r = '*repr()-error*' # Truncate if len(r) > _VALUE_LEN_LIMIT: r = r[:_VALUE_LEN_LIMIT] + '...' # Write value l.append((value,r)) # Only unfold sequences that have non-string items or string items # with more than on character if not is_string(value) or len(value) > 1: unfold = 1 if len(obj) > _VALUE_LEN_LIMIT: l.append(('...','...truncated...')) # Unfold value object if unfold: for i,(value,rvalue) in irange(l): file.write('%s%-15s = %s\n' % (indent, '[%i]' % i, rvalue)) if levels > 1: print_recursive(value,file,indent + ' ',levels-1, nonrecursive=nonrecursive) def print_recursive(obj,file=_sys.stdout,indent='',levels=1, nonrecursive=(),filter=None): # Filter out nonrecursive types and objects try: if type(obj) in nonrecursive or \ obj in nonrecursive: return except: # Error during compares result in the object not being # printed return # Print the object depending on its interface if hasattr(obj,'__dict__') and \ obj.__dict__ is not None: print_dict(obj.__dict__,file,indent,levels, nonrecursive=nonrecursive, filter=filter) elif hasattr(obj,'items'): print_dict(obj,file,indent,levels,1, nonrecursive=nonrecursive, filter=filter) elif Tools.issequence(obj) and not is_string(obj): print_sequence(obj,file,indent,levels, nonrecursive=nonrecursive) elif hasattr(obj,'__members__'): d = {} for attr in obj.__members__: d[attr] = getattr(obj,attr) print_dict(d, file, indent, levels, nonrecursive=nonrecursive, filter=filter) def print_obj(obj,file=_sys.stdout,indent='',levels=2, nonrecursive=(),filter=None): try: r = repr(obj) except: r = '*repr()-error*' # Truncate if len(r) > _VALUE_LEN_LIMIT: r = r[:_VALUE_LEN_LIMIT] + '...' # Write object representation file.write('%s%s\n' % (indent,r)) print_recursive(obj, file, indent + ' ', levels-1, filter=filter) def print_stack_with_locals(file=_sys.stdout,levels=100,offset=0): print_stack(file, levels=levels, offset=offset+1, locals=1) def print_stack(file=_sys.stdout,levels=100,offset=0,locals=0): # Prepare frames try: raise ValueError except ValueError: # Go back offset+1 frames... f = _sys.exc_info()[2].tb_frame for i in range(offset + 1): if f.f_back is not None: f = f.f_back # Extract frames frames = [] while f: frames.append(f) f = f.f_back frames.reverse() # Prepare stack stack = _traceback.extract_stack() # Make output file.write('Stack:\n') for (frame,(filename, lineno, name, line)) in \ Tools.tuples(frames,stack)[-levels:]: file.write(' File "%s", line %d, in %s\n' % (filename,lineno,name)) if line: file.write(' %s\n' % line.strip()) if locals: print_frame_locals(frame,file,indent=' |',title='') def print_loaded_modules(file=_sys.stdout, sys=_sys): """ Print a listing of currently loaded modules to file. """ l = sys.modules.items() l.sort() file.write('Loaded modules and packages:\n') for k,v in l: p = k.split('.') for i in range(len(p)-1): p[i] = ' ' n = ''.join(p) if v is not None: if hasattr(v,'__path__'): # package file.write(' %s[%s]\n' % (''.join(p[:-1]),p[-1])) else: # module file.write(' %s\n' % (n)) def format_traceback(title='### Dump of local variables:\n', filter=None): """ Formats a traceback of the current exception and returns it as string. Includes a listing of the locals() causing that were active during the exception. title is used to separate the traceback from the listing of variables. filter can be given to filter out certain variables from the listing. It takes one argument: the variable name and has to return 1/0. """ import cStringIO f = cStringIO.StringIO() _traceback.print_exc(_TRACEBACK_LIMIT,f) print_tb_locals(_sys.exc_info()[2], f, title=title, filter=filter) return f.getvalue() ### Log class class Log: """ Log class """ # Log ignore level. Log messages with an errno >= this ignore # level are not logged ignore_level = SYSTEM_LOG_EVERYTHING # Log file to use. This can be a pathname or 'stderr'/'stdout' to # log to the special file descriptors stderr/stdout. log_file = 'stderr' # Log ID to use in the log output. Default is set in .__init__() log_id = None # Open file-like object. This is opened on demand and can be closed # via .close() open_log_file = None # Line buffer used by .write() line_buffer = '' ### Attributes needed for file interface # We can always accept data via .write(). Note that this variable # is not changed by calling .close(). closed = 0 ### Convenience attributes # Log levels as attributes for convenience; you can then write e.g. # log(log.INFO, ...) ALWAYS_LOG = SYSTEM_ALWAYS_LOG FATAL = SYSTEM_FATAL PANIC = SYSTEM_PANIC ERROR = SYSTEM_ERROR CANCEL = SYSTEM_CANCEL IMPORTANT = SYSTEM_IMPORTANT WARNING = SYSTEM_WARNING MESSAGE = SYSTEM_MESSAGE UNIMPORTANT = SYSTEM_UNIMPORTANT INFO = SYSTEM_INFO DEBUG = SYSTEM_DEBUG def __init__(self,ignore_level=None,log_file='stderr', log_id=None,log_level=None): """ Setup a log object which writes its output to log_file using the given id marker. The ignore_level indicates the level at which logging activities are ignored. A low value causes less important notices like SYSTEM_INFOs to be ignored. If it is set to 0, no logging is done. Alternatively, log_level may be specified giving the last level to log (all higher levels are ignored). The log id can be set to separate multiple threads/processes in the log. It defaults to the process id. """ if ignore_level is not None: self.ignore_level = ignore_level elif log_level is not None: self.ignore_level = log_level + 1 self.format_log_id(log_id) self.log_file = log_file self.orig_stderr = _sys.stderr self.orig_stdout = _sys.stdout def format_log_id(self, log_id=None): if not log_id: self.log_id = 'p%i' % _os.getpid() else: self.log_id = '%s:%i' % (log_id, _os.getpid()) def redirect_stderr(self): """ Redirects stderr output to the log mechanism. """ _sys.stderr = self def redirect_stdout(self): """ Redirects stdout output to the log mechanism. """ _sys.stdout = self def disable_redirects(self): """ Reset stderr and stdout to their values when the log object was created. """ _sys.stderr = self.orig_stderr _sys.stdout = self.orig_stdout def open(self,flags='a'): """ Open the log file. This is done on-the-fly in case a log request is encountered and the file is still closed. This interface also supports redirecting messages to stderr or stdout by using 'stderr' or 'stdout' as log file name. If the log file cannot be opened, stderr is used instead. """ filename = self.log_file if filename == 'stderr': file = self.orig_stderr elif filename == 'stdout': file = self.orig_stdout else: try: file = open(self.log_file,flags) except: self.open_log_file = file = self.orig_stderr log(SYSTEM_ERROR, 'Could not open log file "%s" - using stderr', self.log_file) self.open_log_file = file return file def close(self): """ Close the log file. Note: The next logging request will automatically open the file again. """ if self.open_log_file: self.open_log_file.close() self.open_log_file = None def setup(self,ignore_level=None,log_file=None,log_id=None, log_level=None): """ Change the setup after creation - use keywords to change only certain aspects, e.g. setup(log_file = 'my.log') """ if ignore_level is not None: self.ignore_level = ignore_level elif log_level is not None: self.ignore_level = log_level + 1 if log_file is not None: self.log_file = log_file self.open_log_file = None if log_id is not None: self.format_log_id(log_id) def __call__(self,errno,*args): """ Default logging mechanism: errno contains the error id and the remaining arguments get interpreted as: arg0 % (arg1,arg2,...) """ if errno >= self.ignore_level: return if len(args) > 1: s = args[0] % args[1:] elif len(args) == 1: s = args[0] else: s = '' f = self.open_log_file or self.open() f.write("%04i %s [%s] %s\n" % (errno,_DateTime.now(),self.log_id,s)) f.flush() def traceback(self,errno,*args): """ Write a traceback of the last exception to the log file. """ if errno >= self.ignore_level: return if len(args) > 1: s = args[0] % args[1:] elif len(args) == 1: s = args[0] else: s = '' f = self.open_log_file or self.open() f.write("%04i %s [%s] %s...\n" % (errno,_DateTime.now(),self.log_id,s)) # Print traceback and locals to file f.write(79*'-'+ '\n') _traceback.print_exc(_TRACEBACK_LIMIT,f) print_tb_locals(_sys.exc_info()[2], f, title='### Dump of local variables (omitting private ones):\n', filter=filter_private_attributes) f.write(79*'-'+'\n') f.flush() def modules(self,errno,*args): """ Write a list of all currently loaded modules to the log file. """ if errno >= self.ignore_level: return if len(args) > 1: s = args[0] % args[1:] elif len(args) == 1: s = args[0] else: s = '' f = self.open_log_file or self.open() f.write("%04i %s [%s] %s...\n" % (errno,_DateTime.now(),self.log_id,s)) # Print module listing f.write(79*'-'+ '\n') print_loaded_modules(f) f.write(79*'-'+'\n') f.flush() def stack(self,errno,*args,**kws): """ Write a stack dump to the log file. A keyword argument "levels" can be given to set the number of stack frames to show. It defaults to 3. Higher values can result in huge amounts of data to be written to the log file ! If a keyword argument "locals" is given and false, no locals are printed in the dump. It defaults to true. """ if errno >= self.ignore_level: return if len(args) > 1: s = args[0] % args[1:] elif len(args) == 1: s = args[0] else: s = '' levels = kws.get('levels', 3) locals = kws.get('locals', 1) f = self.open_log_file or self.open() f.write("%04i %s [%s] %s...\n" % (errno,_DateTime.now(),self.log_id,s)) # Print stack and locals to file f.write(79*'-'+ '\n') print_stack(f, levels=levels, offset=1, locals=locals) f.write(79*'-'+'\n') f.flush() def verbatim(self,errno,*args): """ Write args[0] % args[1:] to the log file. This method is meant for multi line messages, since the logged text is not manipulated in any way. """ if errno >= self.ignore_level: return if len(args) > 1: s = args[0] % args[1:] elif len(args) == 1: s = args[0] else: s = '' f = self.open_log_file or self.open() f.write("%04i %s [%s]\n" % (errno,_DateTime.now(),self.log_id)) f.write(79*'-'+ '\n%s\n' % s.strip() + 79*'-'+'\n') f.flush() def call(self,errno,level=1): """ Log a function call. level indicates how far up the calling stack to look for the call information. Default is one level meaning the directly calling function. Note: Needs mx.Tools.func_call() API. """ if errno >= self.ignore_level: return from mx.Tools import func_call f = self.open_log_file or self.open() f.write("%04i %s [%s] %s\n" % (errno,_DateTime.now(),self.log_id, func_call(level+1))) f.flush() def error(self,errno,errorname,*args): """ Write errorname, args[0] % args[1:] to the log file. This method is meant for multi line error messages that hold additional data referring to the error. """ if errno >= self.ignore_level: return if len(args) > 1: s = args[0] % args[1:] elif len(args) == 1: s = args[0] else: s = '' f = self.open_log_file or self.open() f.write("%04i %s [%s] %s\n" % (errno,_DateTime.now(),self.log_id, errorname)) f.write(79*'-'+ '\n%s\n' % str(s).strip() + 79*'-'+'\n') f.flush() # Alias long = error def text(self,errno,errorname,*args): """ Write errorname and a line numbered version of args[0] % args[1:] to the log file. This method is meant for multi line error messages that hold additional data referring to the error. Needs mx.TextTools to be installed. """ if errno >= self.ignore_level: return if len(args) > 1: s = args[0] % args[1:] elif len(args) == 1: s = args[0] else: s = '' from mx.TextTools import splitlines l = splitlines(s) for i in range(len(l)): l[i] = '%04i %s' % (i+1,l[i]) f = self.open_log_file or self.open() f.write("%04i %s [%s] %s\n" % (errno,_DateTime.now(),self.log_id, errorname)) f.write(79*'-'+ '\n%s\n' % '\n'.join(l) + 79*'-'+'\n') f.flush() def object(self,errno,objname,object,levels=2): """ Write objname plus a dump of object to the log file. levels indicates how many levels of the object hierarchy should be written. """ if errno >= self.ignore_level: return f = self.open_log_file or self.open() f.write("%04i %s [%s] %s\n" % (errno, _DateTime.now(), self.log_id, objname)) f.write(79*'-'+'\n') print_obj(object,f,levels=levels) f.write(79*'-'+'\n') f.flush() def write(self,data): """ File interface, so that the object can be used as sys.stderr replacement. Errorcode 0 is used. The output is line buffered. """ if self.ignore_level == 0: return self.line_buffer = buffer = self.line_buffer + data if '\n' not in buffer: return # Write out all complete lines stored in line_buffer lines = buffer.split('\n') if buffer[-1:] != '\n': # last line is incomplete self.line_buffer = lines[-1] lines = lines[:-1] else: self.line_buffer = '' f = self.open_log_file or self.open() now = _DateTime.now() id = self.log_id fwrite = f.write for line in lines: if not line.strip(): # avoid emtpy lines continue fwrite("%04i %s [%s] %s\n" % (0,now,id,line)) f.flush() def flush(self): """ Flush the underlying log stream. """ if self.open_log_file: self.open_log_file.flush() def exception(self,errno,*args): """ Log a real exception in the log file. """ if errno >= self.ignore_level: return exc_class,exc_inst,exc_traceback = _sys.exc_info() if exc_class is None: return if len(args) > 1: s = args[0] % args[1:] elif len(args) == 1: s = args[0] else: s = '' # go down the traceback tb = exc_traceback while tb.tb_next is not None: tb = tb.tb_next frame = tb.tb_frame f = self.open_log_file or self.open() f.write("%04i %s [%s] %s (at '%s':%i - %s:'%s')\n" % (errno,_DateTime.now(),self.log_id,s, frame.f_code.co_filename, _traceback.tb_lineno(tb), exc_class,exc_inst)) f.flush() # Cleanup to avoid circ. refs del exc_class,exc_inst,exc_traceback ### Variants of the main Log class ##################################### ### ListLog logs to a list instead of a file class ListFile: """ Wraps a list using a file-like interface. Just enough to work as log file for mxLog. """ # Log list data = None def __init__(self, data, *args): self.data = data def write(self, info): self.data.append(info) def flush(self): pass def close(self): pass class ListLog(Log): """ mxLog variant that logs to a list instead of a file. """ def __init__(self, log_list, *args, **kws): self.open_log_file = ListFile(log_list) Log.__init__(self, *args, **kws) def close(self): pass ### ThreadLog includes the thread id in the log_id try: import threading as _threading except (ImportError, NameError): pass else: class ThreadLog(Log, object): """ mxLog variant logging both the PID and thread name of the caller It can be used as a common logging facility for multiple threads, since log output from each thread can be identified by thread name. """ # Custom log_id set via e.g. .setup() _custom_log_id = '' def format_log_id(self, log_id=None): if log_id is not None: self._custom_log_id = log_id def _get_log_id(self): if self._custom_log_id: return '%s:%i/%s' % ( self._custom_log_id, _os.getpid(), _threading.currentThread().getName()) else: return 'p%i/%s' % ( _os.getpid(), _threading.currentThread().getName()) def _set_log_id(self, value): self._custom_log_id = value log_id = property(_get_log_id, _set_log_id) ### LogNothing disabled logging completely class LogNothing(Log): # Don't log anything ignore_level = SYSTEM_LOG_NOTHING def setup(self, *args, **kws): Log.setup(*args, **kws) self.ignore_level = SYSTEM_LOG_NOTHING def open(self, flags='a'): self.open_log_file = None def close(self): pass ### # Create a main log object if __debug__ and Tools.debugging(): log = Log(SYSTEM_LOG_EVERYTHING) else: log = Log(SYSTEM_INFO + 1) egenix-mx-base-3.2.7/mx/NewBuiltins.py0000664000175000017500000000070612133021433017446 0ustar lemburglemburg""" NewBuiltins - Auto-install the collection of new builtins provided by mx.Tools Redirection module; use mx.Tools.NewBuiltins instead !!! Copyright (c) 2000, Marc-Andre Lemburg; mailto:mal@lemburg.com Copyright (c) 2000-2013, eGenix.com Software GmbH; mailto:info@egenix.com See the documentation for further information on copyrights, or contact the author. All Rights Reserved. """ import mx.Tools.NewBuiltins egenix-mx-base-3.2.7/mx/__init__.py0000664000175000017500000000216712251400447016754 0ustar lemburglemburg""" mx Extension Series for Python Copyright (c) 1998-2000, Marc-Andre Lemburg; mailto:mal@lemburg.com Copyright (c) 2000-2013, eGenix.com Software GmbH; mailto:info@egenix.com See the documentation for further information on copyrights, or contact the author. All Rights Reserved. IMPORTANT: The subpackages included in the mx Extension series may have different license terms imposed on them. Be sure to read the documentation of each subpackage *before* using them. """ # eGenix mx Extension Series version number # # This is always the same as the eGenix mx Base distribution version # number. Note: The subpackages have their own versions. __version__ = '3.2.7' # Copyright notice string __copyright__ = """\ Copyright (c) 1998-2000, Marc-Andre Lemburg; mailto:mal@lemburg.com Copyright (c) 2000-2013, eGenix.com Software GmbH; mailto:info@egenix.com See the documentation for further information on copyrights, or contact the author. All Rights Reserved. """ ### Lazy import subpackages #from mx.Misc import LazyModule #ISO = LazyModule.LazyModule('ISO',locals(),globals()) #del LazyModule egenix-mx-base-3.2.7/COPYRIGHT0000664000175000017500000000176211552064177015523 0ustar lemburglemburg --------------------------------------------------------------------- COPYRIGHT NOTICE --------------------------------------------------------------------- Copyright (c) 1997-2000, IKDS Marc-Andre Lemburg; mailto:mal@lemburg.com Copyright (c) 2000-2011, eGenix.com Software GmbH; mailto:info@egenix.com All Rights Reserved. This software is protected by copyright and other intellectual property laws and by international treaties. It may only be used under the conditions and terms of the eGenix.com Public License Agreement. You should have received a copy of the eGenix.com Public License Agreement with this software (usually in the file LICENSE located in the package's or software's main directory). Please write to licenses@egenix.com to obtain a copy in case you should not have received a copy. egenix-mx-base-3.2.7/LICENSE0000664000175000017500000001075307620177404015234 0ustar lemburglemburg________________________________________________________________________ EGENIX.COM PUBLIC LICENSE AGREEMENT VERSION 1.1.0 ________________________________________________________________________ 1. Introduction This "License Agreement" is between eGenix.com Software, Skills and Services GmbH ("eGenix.com"), having an office at Pastor-Loeh-Str. 48, D-40764 Langenfeld, Germany, and the Individual or Organization ("Licensee") accessing and otherwise using this software in source or binary form and its associated documentation ("the Software"). 2. License Subject to the terms and conditions of this eGenix.com Public License Agreement, eGenix.com hereby grants Licensee a non-exclusive, royalty-free, world-wide license to reproduce, analyze, test, perform and/or display publicly, prepare derivative works, distribute, and otherwise use the Software alone or in any derivative version, provided, however, that the eGenix.com Public License Agreement is retained in the Software, or in any derivative version of the Software prepared by Licensee. 3. NO WARRANTY eGenix.com is making the Software available to Licensee on an "AS IS" basis. SUBJECT TO ANY STATUTORY WARRANTIES WHICH CAN NOT BE EXCLUDED, EGENIX.COM MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, EGENIX.COM MAKES NO AND DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF THE SOFTWARE WILL NOT INFRINGE ANY THIRD PARTY RIGHTS. 4. LIMITATION OF LIABILITY EGENIX.COM SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF THE SOFTWARE FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS (INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF BUSINESS PROFITS, BUSINESS INTERRUPTION, LOSS OF BUSINESS INFORMATION, OR OTHER PECUNIARY LOSS) AS A RESULT OF USING, MODIFYING OR DISTRIBUTING THE SOFTWARE, OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO THE ABOVE EXCLUSION OR LIMITATION MAY NOT APPLY TO LICENSEE. 5. Termination This License Agreement will automatically terminate upon a material breach of its terms and conditions. 6. Third Party Rights Any software or documentation in source or binary form provided along with the Software that is associated with a separate license agreement is licensed to Licensee under the terms of that license agreement. This License Agreement does not apply to those portions of the Software. Copies of the third party licenses are included in the Software Distribution. 7. General Nothing in this License Agreement affects any statutory rights of consumers that cannot be waived or limited by contract. Nothing in this License Agreement shall be deemed to create any relationship of agency, partnership, or joint venture between eGenix.com and Licensee. If any provision of this License Agreement shall be unlawful, void, or for any reason unenforceable, such provision shall be modified to the extent necessary to render it enforceable without losing its intent, or, if no such modification is possible, be severed from this License Agreement and shall not affect the validity and enforceability of the remaining provisions of this License Agreement. This License Agreement shall be governed by and interpreted in all respects by the law of Germany, excluding conflict of law provisions. It shall not be governed by the United Nations Convention on Contracts for International Sale of Goods. This License Agreement does not grant permission to use eGenix.com trademarks or trade names in a trademark sense to endorse or promote products or services of Licensee, or any third party. The controlling language of this License Agreement is English. If Licensee has received a translation into another language, it has been provided for Licensee's convenience only. 8. Agreement By downloading, copying, installing or otherwise using the Software, Licensee agrees to be bound by the terms and conditions of this License Agreement. For question regarding this License Agreement, please write to: eGenix.com Software, Skills and Services GmbH Pastor-Loeh-Str. 48 D-40764 Langenfeld Germany egenix-mx-base-3.2.7/README0000664000175000017500000000407311151351633015075 0ustar lemburglemburg============================================================================= eGenix mx Base Distribution for Python ----------------------------------------------------------------------------- Source Installation ------------------- In order to build and install the source distribution, run python setup.py install Then change to some other directory and try to import the packages: $ cd ~ $ python Python 2.5.4 (r254:67916, Jan 9 2009, 21:28:52) [GCC 4.2.1 (SUSE Linux)] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> from mx.DateTime import now >>> print now() 2009-02-26 11:00:03.24 >>> Note that trying this from the installation directory will cause Python to pick up the source tree packages which do not contain the compiled binaries. This will likely fail with strange error messages. Prebuilt Installation --------------------- If you have downloaded a prebuilt distribution archive, the installation is basically the same as for the source installation, only that setup.py will automatically skip the build process. In order to build and install the prebuilt distribution, run python setup.py install and then test the setup as explained for the source installation. Copyrights & Licenses --------------------- The software in this distribution is copyrighted and protected by international, EU and German copyright law. Please see the COPYRIGHT file for details. The software is licensed to you under the eGenix.com Public License as stated in the LICENSE file of the distribution directory. Some subpackages may contain third-party software which is licensed under different conditions. Please see the documentation and/or LICENSE files of the subpackages for details. If in doubt, please check the web-site at http://www.egenix.com or contact sales@egenix.com for more information on copyright, licensing conditions and authorized use. ----------------------------------------------------------------------------- eGenix.com GmbH Pastor-Loeh-Str. 48 D-40764 Langenfeld Germany info@egenix.com egenix-mx-base-3.2.7/bdist_egg.bat0000775000175000017500000000503711410660251016635 0ustar lemburglemburg@echo off set ORIGPATH=%PATH% rem Disable creating debug builds ? rem set NODEBUG=1 rem =============================================================== rem Python 2.4-2.5 need VisualStudio 7.1 set PATH=%ORIGPATH% call d:\VisualStudio7.1\Bin\vsvars32.bat set VSPATH=%PATH% echo -------------------------------------------------------------- echo Building for Python 2.4... set PATH=d:\Python24;%ORIGPATH% python setup.py clean --all python setup.py bdist_egg if #%NODEBUG%# == #1# goto skip_python24_debug echo -------------------------------------------------------------- echo Building for Python 2.4 (debug version)... set PATH=d:\Python24;%ORIGPATH% python setup.py clean --all python setup.py mx_autoconf --enable-debug bdist_egg --dist-dir=dist/debug/ :skip_python24_debug echo -------------------------------------------------------------- echo Building for Python 2.5... set PATH=d:\Python25;%VSPATH% python setup.py clean --all python setup.py bdist_egg if #%NODEBUG%# == #1# goto skip_python25_debug echo -------------------------------------------------------------- echo Building for Python 2.5 (debug version)... set PATH=d:\Python25;%VSPATH% python setup.py clean --all python setup.py mx_autoconf --enable-debug bdist_egg --dist-dir=dist/debug/ :skip_python25_debug rem =============================================================== rem Python 2.6 and up need VisualStudio 9.0 :python26 set PATH=%ORIGPATH% call d:\VisualStudio9.0\Common7\Tools\vsvars32.bat set VSPATH=%PATH% echo -------------------------------------------------------------- echo Building for Python 2.6... set PATH=d:\Python26;%VSPATH% python setup.py clean --all python setup.py bdist_egg if #%NODEBUG%# == #1# goto skip_python26_debug echo -------------------------------------------------------------- echo Building for Python 2.6 (debug version)... set PATH=d:\Python26;%VSPATH% python setup.py clean --all python setup.py mx_autoconf --enable-debug bdist_egg --dist-dir=dist/debug/ :skip_python26_debug echo -------------------------------------------------------------- echo Building for Python 2.7... set PATH=d:\Python27;%VSPATH% python setup.py clean --all python setup.py bdist_egg if #%NODEBUG%# == #1# goto skip_python27_debug echo -------------------------------------------------------------- echo Building for Python 2.7 (debug version)... set PATH=d:\Python27;%VSPATH% python setup.py clean --all python setup.py mx_autoconf --enable-debug bdist_egg --dist-dir=dist/debug/ :skip_python27_debug egenix-mx-base-3.2.7/bdist_egg64.bat0000664000175000017500000000262211553260641017010 0ustar lemburglemburg@echo off set ORIGPATH=%PATH% rem Disable creating debug builds ? rem set NODEBUG=1 rem NOTE: We only support Python 2.6 and later on Windows x64 platforms ! rem =============================================================== rem Python 2.6 and up need VisualStudio 9.0 :python26 set PATH=%ORIGPATH% call d:\VisualStudio9.0\VC\vcvarsall.bat amd64 set VSPATH=%PATH% echo -------------------------------------------------------------- echo Building for Python 2.6... set PATH=d:\Python26;%VSPATH% python setup.py clean --all python setup.py bdist_egg if #%NODEBUG%# == #1# goto skip_python26_debug echo -------------------------------------------------------------- echo Building for Python 2.6 (debug version)... set PATH=d:\Python26;%VSPATH% python setup.py clean --all python setup.py mx_autoconf --enable-debug bdist_egg --dist-dir=dist/debug/ :skip_python26_debug echo -------------------------------------------------------------- echo Building for Python 2.7... set PATH=d:\Python27;%VSPATH% python setup.py clean --all python setup.py bdist_egg if #%NODEBUG%# == #1# goto skip_python27_debug echo -------------------------------------------------------------- echo Building for Python 2.7 (debug version)... set PATH=d:\Python27;%VSPATH% python setup.py clean --all python setup.py mx_autoconf --enable-debug bdist_egg --dist-dir=dist/debug/ :skip_python27_debug egenix-mx-base-3.2.7/bdist_zope.bat0000775000175000017500000000311511026014610017036 0ustar lemburglemburg@echo off rem =============================================================== rem Python 1.5-2.3 needs VisualStudio 6 call D:\VisualStudio6\Bin\vcvars32.bat set ORIGPATH=%PATH% rem echo -------------------------------------------------------------- rem echo Building for Zope 2.3 (Python 1.5.2)... rem set PATH=d:\Python152;%ORIGPATH% rem python setup.py clean --all rem python setup.py bdist_zope --format zip rem echo -------------------------------------------------------------- rem echo Building for Zope 2.4-2.6 (Python 2.1)... rem set PATH=d:\Python21;%ORIGPATH% rem python setup.py clean --all rem python setup.py bdist_zope --format zip echo -------------------------------------------------------------- echo Building for Zope 2.7 (Python 2.3)... set PATH=d:\Python23;%ORIGPATH% python setup.py clean --all python setup.py bdist_zope --format zip rem =============================================================== rem Python 2.4 and up needs VisualStudio 7.1 set PATH=%ORIGPATH% call d:\VisualStudio7.1\Bin\vsvars32.bat set ORIGPATH=%PATH% echo -------------------------------------------------------------- echo Building for Zope 2.8 (Python 2.4)... set PATH=d:\Python24;%ORIGPATH% python setup.py clean --all python setup.py bdist_zope --format zip rem echo -------------------------------------------------------------- rem echo Building for Zope 2.8 (Python 2.4; debug version)... rem set PATH=d:\Python24;%ORIGPATH% rem python setup.py clean --all rem python setup.py mx_autoconf --enable-debug bdist_zope --format zip --dist-dir=dist/debug/ egenix-mx-base-3.2.7/egenix_mx_base.py0000775000175000017500000002771112251400343017546 0ustar lemburglemburg#!/usr/local/bin/python2.1 """ Configuration for the eGenix mx Base Distribution Copyright (c) 1997-2000, Marc-Andre Lemburg; mailto:mal@lemburg.com Copyright (c) 2000-2013, eGenix.com Software GmbH; mailto:info@egenix.com See the documentation for further information on copyrights, or contact the author. All Rights Reserved. """ import sys from mxSetup import mx_Extension, mx_version # # Package version # version = mx_version(3, 2, 7) # # Setup information # name = "egenix-mx-base" # # Meta-Data # description = "eGenix mx Base Distribution for Python - mxDateTime, mxTextTools, mxProxy, mxTools, mxBeeBase, mxStack, mxQueue, mxURL, mxUID" long_description = """\ The eGenix mx Extension Series are a collection of Python extensions written in ANSI C and Python which provide a large spectrum of useful additions to everyday Python programming. The Base Distribution includes the Open Source subpackages of the series and is needed by all other add-on packages of the series: mxDateTime - Date/Time Library for Python mxDateTime implements three new object types, DateTime, DateTimeDelta and RelativeDateTime and many tools based on these for doing easy conversion between and parsing of various date/time formats. mxTextTools - Fast Text Parsing and Processing Tools for Python mxTextTools provides several useful functions and types that implement high-performance text parsing, processing and search algorithms. mxProxy - Object Access Control for Python mxProxy implements a new proxy type to provide low-level object access control, weak referencing and a cleanup protocol. It's ideal for use in restricted execution environments. mxBeeBase - On-disk B+Tree Based Database Kit for Python mxBeeBase is a high performance construction kit for disk based indexed databases. It offers components which you can plug together to easily build your own custom mid-sized databases. mxURL - Flexible URL Data-Type for Python mxURL provides a new datatype for storing and manipulating URL values as well as a few helpers related to URL building, encoding and decoding. mxUID - Fast Universal Identifiers for Python mxUID implements a fast mechanism for generating universal identification strings (UIDs). mxStack - Fast and Memory-Efficient Stack Type for Python mxStack implements a fast and memory efficient stack object type. mxQueue - Fast and Memory-Efficient Queue Type for Python mxQueue implements a fast and memory efficient queue object type. mxTools - Fast Everyday Helpers for Python mxTools provides a collection of handy functions and objects for every day Python programming. It includes many functions that you've often missed in Python. This software is brought to you by eGenix.com and distributed under the eGenix.com Public License 1.1.0. """ license = ( "eGenix.com Public License 1.1.0; " "Copyright (c) 1997-2000, Marc-Andre Lemburg, All Rights Reserved; " "Copyright (c) 2000-2013, eGenix.com Software GmbH, All Rights Reserved" ) author = "eGenix.com Software GmbH" author_email = "info@egenix.com" maintainer = "eGenix.com Software GmbH" maintainer_email = "info@egenix.com" url = "http://www.egenix.com/products/python/mxBase/" download_url = 'https://downloads.egenix.com/python/download_url/%s/%s/' % ( name, version) platforms = [ 'Windows', 'Linux', 'FreeBSD', 'Solaris', 'Mac OS X', 'AIX', ] classifiers = [ "Environment :: Console", "Environment :: No Input/Output (Daemon)", "Intended Audience :: Developers", "License :: OSI Approved :: Python License (CNRI Python License)", "License :: Freely Distributable", "License :: Other/Proprietary License", "Natural Language :: English", "Operating System :: OS Independent", "Operating System :: Microsoft :: Windows", "Operating System :: POSIX", "Operating System :: Unix", "Operating System :: BeOS", "Operating System :: MacOS", "Operating System :: OS/2", "Operating System :: Other OS", "Programming Language :: C", "Programming Language :: Python", "Programming Language :: Python :: 2", "Programming Language :: Python :: 2.4", "Programming Language :: Python :: 2.5", "Programming Language :: Python :: 2.6", "Programming Language :: Python :: 2.7", "Topic :: Communications", "Topic :: Database", "Topic :: Documentation", "Topic :: Internet", "Topic :: Internet :: WWW/HTTP", "Topic :: Internet :: WWW/HTTP :: Dynamic Content", "Topic :: Internet :: WWW/HTTP :: Dynamic Content :: CGI Tools/Libraries", "Topic :: Internet :: WWW/HTTP :: Site Management :: Link Checking", "Topic :: Scientific/Engineering", "Topic :: Scientific/Engineering :: Interface Engine/Protocol Translator", "Topic :: Software Development", "Topic :: Software Development :: Libraries", "Topic :: Software Development :: Libraries :: Application Frameworks", "Topic :: Software Development :: Libraries :: Python Modules", "Topic :: Text Processing", "Topic :: Text Processing :: Filters", "Topic :: Text Processing :: Markup", "Topic :: Utilities ", ] if 'a' in version: classifiers.append("Development Status :: 3 - Alpha") elif 'b' in version: classifiers.append("Development Status :: 4 - Beta") else: classifiers.append("Development Status :: 5 - Production/Stable") classifiers.append("Development Status :: 6 - Mature") classifiers.sort() # # Python packages # packages = [ # mx Extensions Base Package 'mx', # mxDateTime 'mx.DateTime', 'mx.DateTime.mxDateTime', 'mx.DateTime.Examples', # mxProxy 'mx.Proxy', 'mx.Proxy.mxProxy', # mxQueue 'mx.Queue', 'mx.Queue.mxQueue', # mxStack 'mx.Stack', 'mx.Stack.mxStack', # mxTextTools 'mx.TextTools', 'mx.TextTools.mxTextTools', 'mx.TextTools.Constants', 'mx.TextTools.Examples', # mxTools 'mx.Tools', 'mx.Tools.mxTools', 'mx.Tools.Examples', # mxBeeBase 'mx.BeeBase', 'mx.BeeBase.mxBeeBase', # mxURL 'mx.URL', 'mx.URL.mxURL', # mxUID 'mx.UID', 'mx.UID.mxUID', # Misc. other modules 'mx.Misc', ] # # C Extensions # # Determine optional platform-dependent features if sys.platform[:3] != 'win': # Unix-like platforms _mxDateTime_optional_libraries = [ # mxDateTime needs floor() and ceil() which are sometimes # defined in libm. Python normally already references this # library if necessary, so not finding the library is not # necessarily a reason to fail building mxDateTime. ('m', ['math.h']), # mxDateTime can use the API clock_gettime() if available, # but this sometimes needs the librt to be available. ('rt', ['time.h']), ] _mxTools_optional_libraries = [ # The optional mx.Tools.dlopen() function needs the dl lib in # order to load dynamic libaries on Unix platforms. ('dl', ['dlfcn.h']), ] else: # On Windows, the extra libs are not needed (or even available) _mxDateTime_optional_libraries = [] _mxTools_optional_libraries = [] # Extension definitions ext_modules = [ # mxDateTime mx_Extension('mx.DateTime.mxDateTime.mxDateTime', ['mx/DateTime/mxDateTime/mxDateTime.c'], # If mxDateTime doesn't compile, try removing the next line. define_macros=[('USE_FAST_GETCURRENTTIME', None)], # include_dirs=['mx/DateTime/mxDateTime'], optional_libraries=_mxDateTime_optional_libraries, ), # mxProxy mx_Extension('mx.Proxy.mxProxy.mxProxy', ['mx/Proxy/mxProxy/mxProxy.c'], include_dirs=['mx/Proxy/mxProxy']), # mxQueue mx_Extension('mx.Queue.mxQueue.mxQueue', ['mx/Queue/mxQueue/mxQueue.c'], include_dirs=['mx/Queue/mxQueue']), # mxStack mx_Extension('mx.Stack.mxStack.mxStack', ['mx/Stack/mxStack/mxStack.c'], include_dirs=['mx/Stack/mxStack']), # mxTextTools mx_Extension('mx.TextTools.mxTextTools.mxTextTools', ['mx/TextTools/mxTextTools/mxTextTools.c', 'mx/TextTools/mxTextTools/mxte.c', 'mx/TextTools/mxTextTools/mxbmse.c'], define_macros=[('MX_BUILDING_MXTEXTTOOLS', None)], include_dirs=['mx/TextTools/mxTextTools']), # mxTools mx_Extension('mx.Tools.mxTools.mxTools', ['mx/Tools/mxTools/mxTools.c'], define_macros=[ # To enable mx.Tools.setproctitle(), you have to enable # the following line. Note that not all Python versions # expose the required Py_GetArgcArgv() API. # ('HAVE_PY_GETARGCARGV', None), # If you want to use the experimental mx.Tools.safecall() # API, you have to enable the following line. # ('MXTOOLS_ENABLE_SAFECALL', None), ], include_dirs=['mx/Tools/mxTools'], optional_libraries=_mxTools_optional_libraries, ), # xmap is no longer supported #mx_Extension('mx.Tools.mxTools.xmap', # ['mx/Tools/mxTools/xmap.c'], # include_dirs=['mx/Tools/mxTools']), # mxBeeBase mx_Extension('mx.BeeBase.mxBeeBase.mxBeeBase', ['mx/BeeBase/mxBeeBase/mxBeeBase.c', 'mx/BeeBase/mxBeeBase/btr.c'], include_dirs=['mx/BeeBase/mxBeeBase']), # mxURL mx_Extension('mx.URL.mxURL.mxURL', ['mx/URL/mxURL/mxURL.c'], include_dirs=['mx/URL/mxURL']), # mxUID mx_Extension('mx.UID.mxUID.mxUID', ['mx/UID/mxUID/mxUID.c'], include_dirs=['mx/UID/mxUID']), ] # # Data files # data_files = [ # Copyright, licenses, READMEs 'mx/COPYRIGHT', 'mx/LICENSE', 'mx/README', # Misc 'mx/Misc/LICENSE', 'mx/Misc/COPYRIGHT', # mxDateTime 'mx/DateTime/Doc/mxDateTime.pdf', 'mx/DateTime/COPYRIGHT', 'mx/DateTime/LICENSE', 'mx/DateTime/README', 'mx/DateTime/mxDateTime/mxDateTime.h', 'mx/DateTime/mxDateTime/mxh.h', # mxProxy 'mx/Proxy/Doc/mxProxy.pdf', 'mx/Proxy/COPYRIGHT', 'mx/Proxy/LICENSE', 'mx/Proxy/README', 'mx/Proxy/mxProxy/mxProxy.h', 'mx/Proxy/mxProxy/mxh.h', # mxQueue 'mx/Queue/Doc/mxQueue.pdf', 'mx/Queue/COPYRIGHT', 'mx/Queue/LICENSE', 'mx/Queue/README', 'mx/Queue/mxQueue/mxQueue.h', 'mx/Queue/mxQueue/mxh.h', # mxStack 'mx/Stack/Doc/mxStack.pdf', 'mx/Stack/COPYRIGHT', 'mx/Stack/LICENSE', 'mx/Stack/README', 'mx/Stack/mxStack/mxStack.h', 'mx/Stack/mxStack/mxh.h', # mxTextTools 'mx/TextTools/Doc/mxTextTools.pdf', 'mx/TextTools/COPYRIGHT', 'mx/TextTools/LICENSE', 'mx/TextTools/README', 'mx/TextTools/mxTextTools/mxTextTools.h', 'mx/TextTools/mxTextTools/mxh.h', 'mx/TextTools/mxTextTools/mxbmse.h', # mxTools 'mx/Tools/Doc/mxTools.pdf', 'mx/Tools/COPYRIGHT', 'mx/Tools/LICENSE', 'mx/Tools/README', 'mx/Tools/mxTools/mxTools.h', 'mx/Tools/mxTools/mxh.h', # mxBeeBase 'mx/BeeBase/Doc/mxBeeBase.pdf', 'mx/BeeBase/COPYRIGHT', 'mx/BeeBase/LICENSE', 'mx/BeeBase/README', 'mx/BeeBase/mxBeeBase/mxBeeBase.h', 'mx/BeeBase/mxBeeBase/mxh.h', 'mx/BeeBase/mxBeeBase/btr.h', # mxURL 'mx/URL/Doc/mxURL.pdf', 'mx/URL/COPYRIGHT', 'mx/URL/LICENSE', 'mx/URL/README', 'mx/URL/mxURL/mxURL.h', 'mx/URL/mxURL/mxh.h', # mxUID 'mx/UID/Doc/mxUID.pdf', 'mx/UID/COPYRIGHT', 'mx/UID/LICENSE', 'mx/UID/README', 'mx/UID/mxUID/mxUID.h', 'mx/UID/mxUID/mxh.h', ] # Declare namespace packages (for building eggs) namespace_packages = [ 'mx', ] egenix-mx-base-3.2.7/installer.bmp0000775000175000017500000011625210232244732016720 0ustar lemburglemburgBM(  _޽j?ެg&hvxޤjəwNi[vC_;C~gÇLW_v~v]{]=9 Rn251,BwwwfffUUUDDD333""",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,(,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,22222,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,222222222,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,22222222222,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2222288888222,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2222,,,,,,,,,,,,,,,,,,,,,,,22228:88882222,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,26;;MN;4222,,,,,,,,,,,,,,,,,,,2222:;:88882222,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6NN??N;:28822,,,,,,,,,,,,,,,,,,2226N>:888882222,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,;NN?N;:2288222,,,,,,,,,,,,,,,,,,,24N?M:88888222,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2;NN?;888888822,,,,,,,,,,,2444,,,,,4M?N;:8888882,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,222,,24M??M:8888888222,,,,,,,,,,26MM488222;?NM68888888,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4;MM6424M?N688888888222,,,,,,,,,,,4>?N;8228:??>48888888,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6MN?>;6:M?>:88888888222,,,,,,,,,,,,6NO>624:;??;:8888888,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4MN??N>:M?>:888888882222,,,,,,,,,,24M??>;MNN??;88888882,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6>N??>;6>?>:88888222222222,,,22,2222:N\\\>;JI/.2:777882,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4M??;226N?>:2222222222222,,,,222,2228>=TT=(DDB(:7TT722,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6>??;,,6N?>6,,,,,,,,,,,,,,,,,,,,,,,,2>TTT=(8B(8=TT72,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2M??M4,6N?>4,,,,,,,,,,,,,,,,,,,,,,,,4MTTT=(8B(8=TT7,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2M??N6,6N?N4,,,,,,,,,,,,,,,,,,,,,,,,4:TTT=(WFB(8=T=1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2M?ON6,6??>4,,,,,,,,,,,,,,,,,,,,,,,,4:TTT=2XXXX2:=T=1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2M?ON6,6?N>4,,,,,,,,,,,,,,,,,,,,,,,,4:TTT=7777777TT=1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2MOO?6,;?N>4,,,,,,,,,,,,,,,,,,,,,,,,;;TTT=========T=1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6OO?62;ON>4,,,,,,,,,,,,,,,,,,,,,,,,;MTT= 9=1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,;OON64>ONM2,,,,,,,,,,,,,,,,,,,,,,,2M>=T1@@@@@@@A9=1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,;?O>66NON;,,,,,,,,,,,,,,,,,,,,,,,,2MN=T1@@@@@A9=1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.;??N;;OON6,,,,,,,,,,,,,,,,,,,,,,,,2MN=T1@AWC@A9=1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2M??N;M???6,,,,,,,,,,,,,,,,,,,,,,,,2MN=T1@ILXB@A9=1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4>??NMN??>4,,,,,,,,,,,,,,,,,,,,,,,,2>N=T1@I>5C@A9=1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6N???NN??;.,,,,,,,,,,,,,,,,,,,,,,,,2MN==1BBCH>MEAB9=1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6????N???;,,,,,,,,,,,,,,,,,,,,,,,,,2M?NNMLL;M?N.((,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.;????????6,,,,,,,,,,,,,,,,,,,,,,,,,2MOOOOOO??N?62,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,242>???????>4,,,,,,,,,,,,,,,,,,,,,,,,,,;OOOOOOO???M2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,;6;6N??????OM4,,,,,,,,,,,,,,,,,,,,,,,,,2MOOOOO?????M4,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,M>N;???????O;2,,,,,,,,,,,,,,,,,,,,,,,,,.MOOOOO?????>4,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4>N>???????O;2,,,,,,,,,,,,,,,,,,,,,,,,,,;OOO???????>4,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2M?N??????O?;2,,,,,,,,,,,,,,,,,,,,,,,,,.M?OO??OO???>6,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.;?N?????OOM42,,,,,,,,,,,,,,,,,,,,,,,,,.;NOO??????NN6,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6?N??O???OM4,,,,,,,,,,,,,,,,,,,,,,,,,,,;N????OO??N>4,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2>N?????OO;2,,,224222..2662,,,2244,,,,2;?????OO????4,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2>??????OO;,,,4M>>>>M;;>?NM6:6M>>>;2,,.MO????OO????4,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2M??????OO;2,4MN?????N?OOO?N????NNN;2,,M?????O????M4,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.M??????OO>44M???NNN>>>?OOOOOO??NN?N4,2M?OO???????M4,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.MNN????OON;M???>4664246>??NM;MM>N?O>42>?OO???????;2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2>???O???ON>N??N;,,,,,,,46;64,224;NO?>;N?OO??OO???;2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2>?O???????????>4,,,,,,,,,,,,,,,,2;?O?NN?O????O???6,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.M?O???????????6,,,,,,,,,,,,,,,,,,4NO?NNOO???OOO??6,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6N?????????O?>2,,,,,,,,,,,,,,,,,,,;?O??O??????OON6,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4M?OO??OOOOO?6,,,,,,,,,,,,,,,,,,,,2>O??O??OO????>4,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,6??OOOOOOOO?6,,,,,,,,,,,,,,,,,,,,,6N??OO?OO???N;2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4N?OOOOOOO?M2,,,,,,,,,,,,,,,,,,,,,4N?OOOOOO??N>6,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,;NOOOOOOON4,,,,,,,,,,,,,,,,,,,,,,2;?OOOOOO??>6.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4M???OO??;,,,,,,,,,,,,,,,,,,,,,,,,4>OOOO???N;2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.6>N?OO?;2,,,,,,,,,,,,,,,,,,,,,,,,,;NOOOO??;2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,26M?OO>4,,,,,,,,,,,,,,,,,,,,,,,,,,24MN?OON4,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2;NOM2,,,,,,,,,,,,,,,,,,,,,,,,,,,,24M??;.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2M?N62,,,,,,,,,,,,,,,,,,,,,,,,,,,,2M??;,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2MOON6,,,,,,,,,,,,,,,,,,,,,,,,,,,,;NOOM2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,;NOO?;.,,,,,,,,,,,,,,,,,,,,,,,,,,2>OOO>4,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2;?OO?M2,,,,,,,,,,,,,,,,,,,,,,,,,,4NOOO?6,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,;?O??>2,,,,,,,,,,,,,,,,,,,,,,,,,,4?OOO?6,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,;N???;.,,,,,,,,,,,,,,,,,,,,,,,,,,4NOOON;,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4M??N6,,,,,,,,,,,,,,,,,,,,,,,,,,,2M?O?>4,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2;;4,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2;MM4,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,QQQQQQQQQQ,2OOOOOOOOO>,4OOOOOOOOO;,6O;,,,,,;O6,MO6,6ON,,,,;O>,*Q/,NOOOOOOOOO2,?OOOOOOOOO,,OO,,OO,,OO,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,QQQQQQQQQQ,2OOOOOOOOO>,4OOOOOOOOO;,6O;,,,,,;O6,MO6,,;O>,,4O?.,*Q/,NOOOOOOOOO2,?OOOOOOOOO,,OO,,OO,,OO,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2O>,,,,,4O>,,,,,,,,,,,,,6O;,,,,,;O6,MO6,,,NO6.?O4,,,,,,NO2,,,,,,,,,?O2,,,,(?O,,OO,,OO,,OO,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,..........,2O>,,,,,4O>,,,,,,,,,,,,,6O;,,,,,;O6,MO6,,,.?ONO;,,,,,,,NO2,,,,,,,,,?O2,,,,,?O,,OO,,OO,,OO,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,QQQQQQQQQQ,2O>,2OOOOO>,4OOOOOOOOO;,6O;,,,,,;O6,MO6,,,,4OO>,,,,,,,,NO2,,,,,,,,,?O2,,,,,?O,,OO,,OO,,OO,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,QQQQQQQQQQ,2O>,2OOOOO>,4OOOOOOOOO;,6O;,,,,,;O6,MO6,,,,4OO>,,,,,,,,NO2,,,,,,,,,?O2,,,,,?O,,OO,,OO,,OO,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2O>,,,,,,,,,,,,,,,,,,,,,6O;,,,,,;O6,MO6,,,.?ONO;,,,,,,,NO2,,,,,,,,,?O2,,,,,?O,,OO,,OO,,OO,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2O>,,,,,,,,,,,,,,,,,,,,,6O;,,,,,;O6,MO6,,,NO6.?O4,,,,,,NO2,,,,,,,,,?O2,,,,,?O,,OO.(OO,,OO,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,QQQQQQQQQQ,2OOOOOOOOO>,4OOOOOOOOO;,6OOOOOOOOO6,MO6,,;O>,,4O?.,,,,,NOOOOOOOOO2,?O??????OO,,OOOOOOOOOO,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,QQQQQQQQQQ,2OOOOOOOOO>,4OOOOOOOOO;,6OOOOOOOOO6,MO6,6ON,,,,;O>,,,,,NOOOOOOOOO2,?OOOOOOOOO,,OOOOOOOOOO,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,;O4,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,;O4,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,egenix-mx-base-3.2.7/mxSetup.py0000775000175000017500000047225112133300665016246 0ustar lemburglemburg#!/usr/local/bin/python """ Distutils Extensions needed for the mx Extensions. Copyright (c) 1997-2000, Marc-Andre Lemburg; mailto:mal@lemburg.com Copyright (c) 2000-2013, eGenix.com Software GmbH; mailto:info@egenix.com See the documentation for further information on copyrights, or contact the author. All Rights Reserved. """ # # History: # 3.8.0: Changed to prebuilt filename version 2 # 3.7.0: Added mx_register command with option to add a hash tag # to the download_url (--with-hash-tag) # 3.6.8: Removed mx_customize_compiler(). We now always use distutils' # version. See #943. # 3.6.7: Fix for clang override needed for Mac OS X Lion (see #943) # 3.6.6: Fix for moved customize_compiler() function (see #861) # 3.6.5: added install option --force-non-pure # 3.6.4: import commands and base classes directly from setuptools, # if present to fixes compatibility with pip (see #741) # 3.6.3: added verify_package_version() # 3.6.2: added fix-up for distutils.util.change_root() # 3.6.1: added --exclude-files to bdist_prebuilt # 3.6.0: added support for Python 2.7's distutils version # 3.5.1: added support to have prebuilt archives detect version and # and platform mismatches before installing a package # 3.5.0: added own non-setuptools version of bdist_egg to build eggs # straight from the available packages rather than relying on # setuptools to do this # 3.4.2: added support for using embedded .dylibs # 3.4.1: only include top-level documentation directories in prebuilt archives # 3.4.0: made the inclusion of the data source files optional in bdist_prebuilt, # fixed the prebuilt file search mechanism to always convert to platform # convention # 3.3.1: have mx_version()'s snapshot default to true if prerelease is 'dev' # 3.3.0: use our own mx_get_platform() version in order to support prebuilt # installers on platforms that have slightly different platform strings # 3.2.1: py_version() will no longer add the Unicode info on Windows # 3.2.0: Add support for Python 2.6 Windows builds # 3.1.1: Allow Unicode values for meta data # 3.1.0: changed the build pickle name used by prebuilt archives # 3.0.0: added mx_build_data, removed the need to use "build --skip" # when installing prebuilt archives, uninstall now also works # for prebuilt archives # 2.9.0: added support for (orig, dest) data_files definitions # 2.8.0: added optional setuptools support # 2.7.0: added mx_bdist_prebuilt # 2.6.0: added mx_bdist_msi that allows setting the product name # 2.5.1: add support for distutils 2.5.0 which broke the MSVCCompiler # compile options hack # 2.5.0: patch install_lib to not produce weird byte-code filenames; # add work-around for change in bdist_wininst introduced in # Python 2.4 that broke the py_version() approach # 2.4.0: remove monkey patch and make use of py_version() instead # 2.3.0: monkey patch get_platform() to include the Unicode width info # 2.2.0: replaced .announce() and .warn() usage with log object # 2.1.2: added wide Unicode support # 2.1.1: added support for Python 2.3 way of finding MSVC paths # 2.1.0: added bdist_zope, support for classifiers # 2.0.0: reworked the include and lib path logic; factored out the # compiler preparation # 1.9.0: added new include and lib path logic; added bdist_zope command # Older revisions are not documented. # import types, glob, os, sys, re, cPickle, copy, imp, shutil, urllib2 ### Globals # Module version __version__ = '3.8.0' # Generate debug output for mxSetup.py ? _debug = int(os.environ.get('EGENIX_MXSETUP_DEBUG', 0)) # Python version running this module python_version = sys.version[:3] # Prebuilt archive marker file PREBUILT_MARKER = 'PREBUILT' # Allowed configuration value types; all other configuration entries # are removed by run_setup() ALLOWED_SETUP_TYPES = (types.StringType, types.ListType, types.TupleType, types.IntType, types.FloatType) if python_version >= '2.6': ALLOWED_SETUP_TYPES += (types.UnicodeType,) # Some Python distutils versions don't support all setup keywords we # use UNSUPPORTED_SETUP_KEYWORDS = () if python_version < '2.3': UNSUPPORTED_SETUP_KEYWORDS = UNSUPPORTED_SETUP_KEYWORDS + ( 'classifiers', 'download_url', ) # Filename suffixes used for Python modules on this platform PY_SUFFIXES = [suffix for (suffix, mode, order) in imp.get_suffixes()] if '.pyc' not in PY_SUFFIXES: PY_SUFFIXES.append('.pyc') if '.pyo' not in PY_SUFFIXES: PY_SUFFIXES.append('.pyo') # Namespace __init__.py file content required by setuptools namespace # packages SETUPTOOLS_NAMESPACE_INIT = """\ __import__('pkg_resources').declare_namespace(__name__) """ ### Python compatibility support if 1: # Patch True/False into builtins for those versions of Python that # don't support it try: True except NameError: __builtins__['True'] = 1 __builtins__['False'] = 0 # StringTypes into types module for those versions of Python that # don't support it try: types.StringTypes except AttributeError: types.StringTypes = (types.StringType, types.UnicodeType) # Patch isinstance() to support tuple arguments try: isinstance('', types.StringTypes) except TypeError: def py22_isinstance(obj, classes, orig_isinstance=isinstance): if type(classes) is not types.TupleType: return orig_isinstance(obj, classes) for classobj in classes: if orig_isinstance(obj, classobj): return True return False __builtins__['isinstance'] = py22_isinstance # UnicodeDecodeError is new in Python 2.3 try: UnicodeDecodeError except NameError: UnicodeDecodeError = UnicodeError if python_version < '2.2': def module_loaded(name): return sys.modules.has_key(name) def has_substring(substr, text): return text.find(substr) >= 0 else: def module_loaded(name): return name in sys.modules def has_substring(substr, text): return substr in text ### distutils fix-ups # distutils.util.change_root() has a bug on nt and os2: it fails with # an IndexError in case pathname is empty. We fix this by # monkey-patching distutils. import distutils.util orig_change_root = distutils.util.change_root def change_root(new_root, pathname): if os.name == 'nt': (drive, path) = os.path.splitdrive(pathname) if path and path[0] == '\\': path = path[1:] return os.path.join(new_root, path) elif os.name == 'os2': (drive, path) = os.path.splitdrive(pathname) if path and path[0] == os.sep: path = path[1:] return os.path.join(new_root, path) else: return orig_change_root(new_root, pathname) distutils.util.change_root = change_root ### Setuptools support # Let setuptools monkey-patch distutils, if a command-line option # --use-setuptools is given and enable the setuptools work-arounds # if it was already loaded (see ticket #547). if module_loaded('setuptools'): import setuptools elif '--use-setuptools' in sys.argv: sys.argv.remove('--use-setuptools') try: import setuptools print 'running mxSetup.py with setuptools patched distutils' except ImportError: print 'could not import setuptools; ignoring --use-setuptools' setuptools = None else: setuptools = None ### Distutils platform support import distutils.util if not hasattr(distutils.util, 'set_platform'): # Replace the distutils get_platform() function with our own, since we # will in some cases need to adjust its return value, e.g. for # pre-built archives. orig_get_platform = distutils.util.get_platform # Global platform string PLATFORM = orig_get_platform() def mx_get_platform(): """ Return the platform string that distutils uses through-out the system. """ return PLATFORM # Replace distutils' own get_platform() function distutils.util.get_platform = mx_get_platform def mx_set_platform(platform): """ Adjust the platform string that distutils uses to platform. This is needed e.g. when installing pre-built setups, since the target system platform string may well be different from the build system one, e.g. due to OS version differences or Mac OS X fat binaries that get installed on i386/ppc systems. """ global PLATFORM if PLATFORM != platform: log.info('adjusting distutils platform string to %r' % platform) PLATFORM = platform else: # For Python 2.7+ and 3.2+ we don't need to monkey-patch # distutils, since it now has a set_platform() API. # # XXX Turns out that this useful functionality was removed again, # before 2.7 and 3.2 were released. See the discussion on # http://bugs.python.org/issue13994 and #861. Leaving the code # here in case it gets added again. def mx_get_platform(): """ Return the platform string that distutils uses through-out the system. """ return distutils.util.get_platform() def mx_set_platform(platform): """ Adjust the platform string that distutils uses to platform. This is needed e.g. when installing pre-built setups, since the target system platform string may well be different from the build system one, e.g. due to OS version differences or Mac OS X fat binaries that get installed on i386/ppc systems. """ if platform != mx_get_platform(): log.info('adjusting distutils platform string to %r' % platform) distutils.util.set_platform(platform) ### Load distutils # This has to be done after importing setuptools, since it heavily # monkey-patches distutils with its black magic... from distutils.errors import \ DistutilsError, DistutilsExecError, CompileError, CCompilerError, \ DistutilsSetupError if setuptools is not None: from setuptools import setup, Extension, Command from setuptools import Distribution from setuptools.command.install import install else: from distutils.core import setup, Extension, Command from distutils.dist import Distribution from distutils.command.install import install from distutils.msvccompiler import MSVCCompiler from distutils.util import execute from distutils.version import StrictVersion from distutils.dir_util import remove_tree, mkpath, create_tree from distutils.spawn import spawn, find_executable from distutils.command.config import config from distutils.command.build import build from distutils.command.build_ext import build_ext from distutils.command.build_clib import build_clib from distutils.command.build_py import build_py from distutils.command.bdist import bdist from distutils.command.bdist_rpm import bdist_rpm from distutils.command.bdist_dumb import bdist_dumb from distutils.command.bdist_wininst import bdist_wininst from distutils.command.install_data import install_data from distutils.command.install_lib import install_lib from distutils.command.sdist import sdist from distutils.command.register import register from distutils.command.clean import clean import distutils.archive_util # distutils changed a lot in Python 2.7/3.2 due to many # distutils.sysconfig APIs having been moved to the new (top-level) # sysconfig module. if (python_version < '2.7' or (python_version >= '3.0' and python_version < '3.2')): # Older Python versions (<=2.6 and <=3.1): from distutils.sysconfig import \ get_config_h_filename, parse_config_h, customize_compiler, \ get_config_vars, get_python_version from distutils.util import get_platform else: # More recent Python versions (2.7 and 3.2+): from sysconfig import \ get_config_h_filename, parse_config_h, get_path, \ get_config_vars, get_python_version, get_platform # This API was moved from distutils.sysconfig to # distutils.ccompiler in Python 2.7... and then back again in # 2.7.3 (see #861); since the sysconfig version is deemed the # correct one and 3.x only has it there, we first try sysconfig # now and then revert to ccompiler in case it's not found try: from distutils.sysconfig import customize_compiler except ImportError: from distutils.ccompiler import customize_compiler def get_python_include_dir(): """ Return the path to the Python include dir. This is the location of the Python.h and other files. """ # Can't use get_path('include') here, because Debian/Ubuntu # hack those paths to point to different installation paths # rather than the Python's own paths. See #762. try: config_h = get_config_h_filename() include_dir = os.path.split(config_h)[0] if not os.path.exists(os.path.join(include_dir, 'Python.h')): raise IOError('Python.h not found in include dir %s' % include_dir) return include_dir except IOError, reason: if _debug: print 'get_config_h_filename: %s' % reason # Ok, we've hit a problem with the Python installation or # virtualenv setup, so let's try a common locations: pydir = 'python%i.%i' % (sys.version_info[0], sys.version_info[1]) for dir in ( os.path.join(sys.prefix, 'include', pydir), os.path.join(sys.prefix, 'include', 'python'), os.path.join(sys.prefix, 'include'), os.path.join(sys.exec_prefix, 'include', pydir), os.path.join(sys.exec_prefix, 'include', 'python'), os.path.join(sys.exec_prefix, 'include'), ): if _debug > 1: print ('get_config_h_filename: trying include dir: %s' % dir) if os.path.exists(os.path.join(dir, 'Python.h')): if _debug: print ('get_config_h_filename: found include dir: %s' % dir) return dir # Nothing much we can do... raise ### Optional distutils support # Load the MSI bdist command (new in Python 2.5, only on Windows) try: from distutils.command.bdist_msi import bdist_msi import msilib except ImportError: bdist_msi = None # The log object was added to distutils in Python 2.3; we provide a # compatile emulation for earlier Python versions try: from distutils import log except ImportError: class Log: def log(self, level, msg, *args): print msg % args sys.stdout.flush() def debug(self, msg, *args): if _debug: self.log(1, msg, args) def info(self, msg, *args): if _debug: self.log(2, msg, args) def warn(self, msg, *args): self.log(3, msg, args) def error(self, msg, *args): self.log(4, msg, args) def fatal(self, msg, *args): self.log(5, msg, args) log = Log() ### Third-party distutils extensions # This is bdist_ppm from ActiveState if python_version >= '2.0': try: from distutils.command import bdist_ppm except ImportError: bdist_ppm = None try: from distutils.command import GenPPD except ImportError: GenPPD = None else: bdist_ppm = None GenPPD = None ### # # Helpers # def fetch_url(url, timeout=30): """ Fetch the given url and return the data as string. The function can raise urllib2.URLError exceptions in case of an error. """ if python_version >= '2.6': data = urllib2.urlopen(url, None, timeout) elif python_version >= '2.3': import socket socket.setdefaulttimeout(timeout) data = urllib2.urlopen(url) else: # Ignore timeout data = urllib2.urlopen(url) return data.read() def mx_download_url(download_url, mode='simple'): """ Add a hash marker to the download_url. This is done by fetching the URL, creating one or more hash/size entries and appending these as fragment to the download_url. mode determines how the fragment is formatted. Possible values: * 'simple': add #md5=... This is compatible with setuptools/easy_install/pip. * 'pip': add #sha256=... This is compatible with pip only. setuptools/easy_install don't support sha256 hashes. * 'extended': add #md5=...&sha1=...&sha256=...&size=... This is not yet supported by the installers tools, but provides the most advanced hash tag format. sha256 is only included if supported by the Python version. """ if python_version >= '2.5': import hashlib md5 = hashlib.md5 sha1 = hashlib.sha1 sha256 = hashlib.sha256 else: import md5, sha md5 = md5.md5 sha1 = sha.sha sha256 = None data = fetch_url(download_url) if mode == 'simple': return '%s#md5=%s' % ( download_url, md5(data).hexdigest()) elif mode == 'pip': if sha256 is None: raise TypeError('Python version does not support SHA-256') return '%s#sha256=%s' % ( download_url, sha256(data).hexdigest()) elif mode == 'extended': if sha256 is not None: return '%s#md5=%s&sha1=%s&sha256=%s&size=%i' % ( download_url, md5(data).hexdigest(), sha1(data).hexdigest(), sha256(data).hexdigest(), len(data)) else: return '%s#md5=%s&sha1=%s&size=%i' % ( download_url, md5(data).hexdigest(), sha1(data).hexdigest(), len(data)) def _test_mx_download_url(): for url in ( 'file:///home/lemburg/projects/distribution/index/ucs2/egenix-pyopenssl/0.13.0_1.0.1c_1/index.html', 'http://downloads.egenix.com/python/index/ucs2/egenix-pyopenssl/0.13.0_1.0.1c_1/', 'http://downloads.egenix.com/python/index/ucs2/egenix-pyopenssl/0.13.0_1.0.1c_1/index.html', 'https://downloads.egenix.com/python/index/ucs2/egenix-pyopenssl/0.13.0_1.0.1c_1/', 'https://downloads.egenix.com/python/index/ucs2/egenix-pyopenssl/0.13.0_1.0.1c_1/index.html', ): print mx_download_url(url) print mx_download_url(url, 'simple') print mx_download_url(url, 'pip') print mx_download_url(url, 'extended') # Tests #_test_mx_download_url() #sys.exit(0) # prerelease parsers used for conversion to PEP 386 format PRERELEASE_RX = re.compile( '(?Palpha|a)' '(?Pbeta|b)' '(?Prc|rc|c)' '(?Pdev)' '[-_]+' '(?P[0-9]+)' ) def mx_version(major=1, minor=0, patch=0, prerelease='', snapshot=None, sub_version=None, pep_compatible=False, separator='_'): """ Format the package version number. If sub_version is given as tuple of integers, it is appended to the major.minor.patch version string, with dots as delimiters. If prerelease is given, this is appended to the version string. The string should use the format '(alpha/beta/rc/dev)_123', e.g. 'beta_1'. If snapshot is true, the current date is added to the version string. snapshot defaults to true, if prerelease is set to 'dev'. separator is used to separate prerelease and snapshot from the version number. Note that RPM doesn't like '-' in the version string. For this reason we use '_' as default. When using pep_compatible=True, the functions returns a version string that conforms to PEP 386. It's turned off by default for now to keep the function backwards compatible. """ s = '%i.%i.%i' % (major, minor, patch) if sub_version: # Add sub_version tuple s += ''.join(['.%i' % x for x in sub_version]) if prerelease: pr = PRERELEASE_RX.match(prerelease) if pep_compatible: if pr is None: raise TypeError('unsupported prerelease string: %r' % prerelease) if pr.group('version'): pr_version = int(pr.group('version')) else: pr_version = 0 if pr.group('alpha'): s += 'a%i' % pr_version elif pr.group('beta'): s += 'b%i' % pr_version elif pr.group('rc'): s += 'rc%i' % pr_version elif pr.group('dev'): snapshot = 1 else: # Old style format s += '_' + prerelease if prerelease == 'dev' and snapshot is None: snapshot = 1 if snapshot: import time now = time.gmtime(time.time()) date = time.strftime('%Y%m%d', now) if pep_compatible: s += '.dev' + date else: # Old style format s += '_' + date return s MX_VERSION_RE = re.compile('(\d+)\.(\d+)\.(\d+)') def parse_mx_version(version): """ Convert a version string created with mx_version() back to its components. Returns a tuple (major, minor, patch, prerelease, snapshot). prerelease and snapshot are currently not supported and always set to '' and None. Raises a ValueError in case the version string cannot be parsed. """ m = MX_VERSION_RE.match(version) if m is None: raise ValueError('incompatible version string format: %r' % version) major, minor, patch = m.groups() major = int(major) minor = int(minor) patch = int(patch) prerelease = '' snapshot = None return major, minor, patch, prerelease, snapshot def get_env_var(name, default=None, integer_value=0, yesno_value=0): value = os.environ.get(name, None) if value is None: return default # Try to convert to an integer, if possible if integer_value: try: return int(value) except ValueError: return default # Try to convert a yes/no value, if possible if yesno_value: value = value.strip().lower() if not value: return default if value[0] in ('y', '1'): return 1 elif value == 'on': return 1 else: return 0 # Return the string value return value def convert_to_platform_path(distutils_path): """ Convert a distutils Unix path distutils_path to the platform format. """ if os.sep == '/': return distutils_path return os.sep.join(distutils_path.split('/')) def convert_to_distutils_path(platform_path): """ Convert a platform path to the distutils Unix format. """ if os.sep == '/': return platform_path return '/'.join(platform_path.split(os.sep)) def remove_path_prefix(pathname, prefix): """ Return a relative path by removing prefix from pathname. If pathname doesn't begin with prefix, no change is applied and pathname returned as-is. """ prefix_len = len(prefix) if pathname[:prefix_len] != prefix: # pathname doesn't begin with prefix return pathname if prefix[-1] != os.sep: # Remove leading separator as well prefix_len += 1 return pathname[prefix_len:] def find_file(filename, paths, pattern=None): """ Look for a file in the directories defined in the list paths. If pattern is given, the found files are additionally checked to include the given RE search pattern. Pattern matching is done case-insensitive per default. Returns the directory where the file can be found or None in case it was not found. filename may include path components, e.g. if a particular file in a subdirectory is used as token to match the subdirectory. """ if _debug: print 'looking for %s ...' % filename if pattern: print ' applying pattern check using %r' % pattern for dir in paths: pathname = os.path.join(dir, filename) if os.path.exists(pathname): if pattern: data = open(pathname, 'rb').read() if re.search(pattern, data, re.I) is None: data = None if _debug: print ' %s: found, but not matched' % dir continue data = None if _debug: print ' %s: found and matched' % dir else: if _debug: print ' %s: found' % dir return dir elif _debug: print ' %s: not found' % dir if _debug: print 'not found' return None def is_python_package(path): """ Return 1/0 depending on whether path points to a Python package directory or not. """ marker = '__init__' + os.extsep for filename in os.listdir(path): if filename.startswith(marker): return True return False def python_module_name(path): """ Return the Python module name for the Python module path. Returns None if path does not point to a (potential) Python module. """ for suffix in PY_SUFFIXES: if path.endswith(suffix): return os.path.basename(path[:-len(suffix)]) return None def find_python_modules(path): """ Find Python modules/packages available in path. Returns a dictionary mapping the Python module/package name (without extension) to either 'package' or 'module'. """ d = {} for filename in os.listdir(path): pathname = os.path.join(path, filename) if os.path.isdir(pathname) and is_python_package(pathname): d[os.path.basename(filename)] = 'package' else: module_name = python_module_name(pathname) if module_name: d[module_name] = 'module' return d def add_dir(dir, pathlist, index=-1): if dir not in pathlist and \ os.path.isdir(dir): if index < 0: index = index + len(pathlist) + 1 pathlist.insert(index, dir) def py_unicode_build(): """ Return the Python Unicode version. Possible values: 'ucs2' - UCS2 build (standard Python source build) 'ucs4' - UCS4 build (used on most recent Linux distros) '' - No Unicode support """ if sys.version[:3] >= '2.1': # UCS4 builds were introduced in Python 2.1; Note: RPM doesn't # like hyphens to be used in the Python version string which is # why we append the UCS information using an underscore. try: unichr(100000) except NameError: # No Unicode support return '' except ValueError: # UCS2 build (standard) return 'ucs2' else: # UCS4 build (most recent Linux distros) return 'ucs4' else: return '' def py_version(unicode_aware=None, include_patchlevel=0): """ Return the Python version as short string. If unicode_aware is true (default on all platforms except win32, win16, os2 and dos), the function also tests whether a UCS2 or UCS4 built is running and modifies the version accordingly. If include_patchlevel is true (default is false), the patch level is also included in the version string. """ if include_patchlevel: version = sys.version[:5] else: version = sys.version[:3] if unicode_aware is None: # Chose default for unicode_aware based on platform if sys.platform in ('win32', 'dos', 'win16', 'os2'): # These platforms always use UCS2 builds (at least for all # versions up until Python 2.6) unicode_aware = 0 else: unicode_aware = 1 if unicode_aware and version >= '2.1': # UCS4 builds were introduced in Python 2.1; Note: RPM doesn't # like hyphens to be used in the Python version string which is # why we append the UCS information using an underscore. try: unichr(100000) except ValueError: # UCS2 build (standard) version = version + '_ucs2' else: # UCS4 build (most recent Linux distros) version = version + '_ucs4' return version def check_zope_product_version(version, version_txt): """ Check whether the version string version matches the version data in the Zope product version.txt file version_txt. """ data = open(version_txt, 'r').read().strip() return data[-len(version):] == version def verify_package_version(package, version): """ Check whether the Python package's __version__ matches the given version string. The first 3 version components must match, i.e. major.minor.patch. parse_mx_version() is used to extract this information from both the version string and the packages __version__ attribute. Raises a ValueError in case the versions do not match. """ package_path = package.replace('.', os.sep) try: m = __import__(package_path, None, None, ['*']) except ImportError: raise ImportError('Cannot find %s package' % package) dist_version = parse_mx_version(version) package_version = parse_mx_version(m.__version__) if dist_version[:3] != package_version[:3]: raise ValueError('%s.__version__ mismatch: expected %s, found %s' % (package, version, m.__version__)) # Keep the symbol around for backwards compatibility, but don't use it # anymore. See #943. mx_customize_compiler = customize_compiler compression_programs = { 'gzip': ('.gz', '-f9'), 'bzip2': ('.bz2', 'f9'), 'compress': ('.Z', '-f'), } def mx_make_tarball(base_name, base_dir, compression='gzip', verbose=0, dry_run=0, owner=None, group=None, tar_options='-h', **kws): # Much like archive_util.make_tarball, except that this version # dereferences symbolic links. tar_archive = base_name + '.tar' # Create the directory for the archive mkpath(os.path.dirname(tar_archive), dry_run=dry_run) # Create the archive if owner: tar_options += ' --owner="%s"' % owner if group: tar_options += ' --group="%s"' % group cmd = ['tar', '-c', tar_options, '-f', tar_archive, base_dir] spawn(cmd, verbose=verbose, dry_run=dry_run) # Compress if that's needed if compression: try: ext, options = compression_programs[compression] except KeyError: raise ValueError('unknown compression program: %s' % compression) cmd = [compression, options, tar_archive] spawn(cmd, verbose=verbose, dry_run=dry_run) tar_archive = tar_archive + ext return tar_archive # Register our version of make_tarball() register_archive_formats = { 'gztar': (mx_make_tarball, [('compression', 'gzip')], 'gzipped tar-file'), 'bztar': (mx_make_tarball, [('compression', 'bzip2')], 'bzip2ed tar-file'), 'ztar': (mx_make_tarball, [('compression', 'compress')], 'compressed tar file'), 'tar': (mx_make_tarball, [('compression', None)], 'tar file'), } if not hasattr(shutil, 'register_format'): # In Python <2.7, 3.0 and 3.1, we have to register straight with # the distutils ARCHIVE_FORMATS dictionary distutils.archive_util.ARCHIVE_FORMATS.update(register_archive_formats) else: # Python 2.7+ and 3.2+ use the new shutil archive functions instead # of the ones from distutils, so register our archives there for archive_name, archive_params in register_archive_formats.items(): shutil.register_format(archive_name, *archive_params) def build_path(dirs): """ Builds a path list from a list of directories/paths. The dirs list may contain shell variable references and user dir references. These will get expanded automatically. Non-existing shell variables are replaced with an empty string. Path entries will get expanded to single directory entries. Empty string entries are removed from the list. """ try: expandvars = os.path.expandvars except AttributeError: expandvars = None try: expanduser = os.path.expanduser except AttributeError: expanduser = None path = [] for i in range(len(dirs)): dir = dirs[i] if expanduser is not None: dir = expanduser(dir) if expandvars is not None: dir = expandvars(dir) if '$' in dir: dir = ''.join(re.split(r'\$\w+|\{[^}]*\}', dir)) dir = dir.strip() if os.pathsep in dir: path.extend(dir.split(os.pathsep)) elif dir: path.append(dir) # empty entries are omitted return path def verify_path(path): """ Verify the directories in path for existence and their directory nature. Also removes duplicates from the list. """ d = {} l = [] for dir in path: if os.path.exists(dir) and \ os.path.isdir(dir): if not d.has_key(dir): d[dir] = 1 l.append(dir) path[:] = l def get_msvc_paths(): """ Return a tuple (libpath, inclpath) defining the search paths for library files and include files that the MS VC++ compiler uses per default. Both entries are lists of directories. Only available on Windows platforms with installed compiler. """ if python_version >= '2.6': # Python 2.6 distutils # If possible, assume that the environment is already # properly setup and read the setting from there - this is # important since we could be cross-compiling if os.environ.has_key('lib') and os.environ.has_key('include'): return (os.environ['lib'].split(os.pathsep), os.environ['include'].split(os.pathsep)) else: # Use the old compiler code from distutils.msvccompiler import OldMSVCCompiler try: msvccompiler = OldMSVCCompiler() inclpath = msvccompiler.get_msvc_paths('include') libpath = msvccompiler.get_msvc_paths('library') except Exception, why: log.error('*** Problem: %s' % why) import traceback traceback.print_exc() libpath = [] inclpath = [] msvccompiler = None elif python_version >= '2.3': # Python 2.3 - 2.5 distutils try: msvccompiler = MSVCCompiler() inclpath = msvccompiler.get_msvc_paths('include') libpath = msvccompiler.get_msvc_paths('library') except Exception, why: log.error('*** Problem: %s' % why) import traceback traceback.print_exc() libpath = [] inclpath = [] msvccompiler = None else: # distutils versions prior to the one that came with Python 2.3 from distutils.msvccompiler import get_devstudio_versions, get_msvc_paths msvc_versions = get_devstudio_versions() if msvc_versions: msvc_version = msvc_versions[0] # choose most recent one inclpath = get_msvc_paths('include', msvc_version) libpath = get_msvc_paths('lib', msvc_version) else: libpath = [] inclpath = [] return libpath, inclpath # # Search paths # # Standard system directories which are automatically scanned by the # compiler and linker for include files and libraries. LIB and INCLUDE # are environment variables used on Windows platforms, other platforms # may have different names. STDLIBPATH = build_path(['/usr/lib', '/opt/lib', '$LIB']) STDINCLPATH = build_path(['/usr/include', '/opt/include', '$INCLUDE']) # Add additional dirs from Windows registry if available if sys.platform[:3] == 'win': libpath, inclpath = get_msvc_paths() STDLIBPATH.extend(libpath) STDINCLPATH.extend(inclpath) # Default paths for additional library and include file search (in # addition to the standard system directories above); these are always # added to the compile and link commands by mxSetup per default. LIBPATH = build_path(['/usr/local/lib', '/opt/local/lib', os.path.join(sys.prefix, 'lib')]) INCLPATH = build_path(['/usr/local/include', '/opt/local/include', os.path.join(sys.prefix, 'include')]) # Add 32- or 64-bit dirs if needed by the Python version if sys.maxint > 2147483647L: # 64-bit build STDLIBPATH.extend(['/usr/lib64', '/opt/lib64']) LIBPATH.extend(['/usr/local/lib64', '/opt/local/lib64']) else: # 32-bit build STDLIBPATH.extend(['/usr/lib32', '/opt/lib32']) LIBPATH.extend(['/usr/local/lib32', '/opt/local/lib32']) # Additional paths to scan in order to find third party libs and # headers; these are used by mx_autoconf.find_*_file() APIs. FINDLIBPATH = build_path([]) FINDINCLPATH = build_path([]) verify_path(STDLIBPATH) verify_path(STDINCLPATH) verify_path(LIBPATH) verify_path(INCLPATH) verify_path(FINDLIBPATH) verify_path(FINDINCLPATH) if 0: # Work-around for quirk on Solaris which happens to be a common # problem when compiling things with GCC: there's a non-GCC stdarg.h # header file in /usr/include which gets picked up by GCC instead of # its own compiler specific one, so we remove /usr/include from # INCLPATH in that situation. if sys.platform == 'sunos5' and \ sys.version.find('GCC') >= 0: if os.path.exists('/usr/include/stdarg.h'): INCLPATH.remove('/usr/include') # # File extensions # # Library types to search for (see distutils.ccompiler) if sys.platform == 'darwin': # Mac OS X uses .dylibs in addition to .so files, so we need to # search for those as well # # Note that only the distutils unixcompiler supports searching for # dylib, other compiler classes will simply exist with an # AttributeError LIB_TYPES = ('dylib', 'shared', 'static') else: # These types are supported by all compiler classes LIB_TYPES = ('shared', 'static') if _debug > 1: # Note that printing these lines to stdout can cause scripts that # use mxSetup for extracting information from the setup module to # fail, since they don't expect the extra output. This is why we # only show this information for higher _debug levels. print 'mxSetup will be using these search paths:' print ' std lib path:', STDLIBPATH print ' std include path:', STDINCLPATH print ' additional lib path:', LIBPATH print ' additional include path:', INCLPATH print ' additional autoconf lib path:', FINDLIBPATH print ' additional autoconf include path:', FINDINCLPATH print ' library types:', LIB_TYPES print ' Python include path: %r' % get_python_include_dir() # # Mixin helpers # class CompilerSupportMixin: """ Compiler support mixin which makes sure that the .compiler attribute is properly setup. """ # Internal flag prepared_compiler = 0 def prepare_compiler(self): # Setup .compiler instance compiler = self._get_compiler_object() if compiler is None: if hasattr(self, '_check_compiler'): # The config command has this method to setup the # compiler self._check_compiler() else: raise CCompilerError('no C compiler setup; cannot continue') compiler = self._get_compiler_object() elif self.prepared_compiler: # Return the already prepared compiler return compiler # Work around a bug in distutils <= 1.0.3 if compiler.exe_extension is None: compiler.exe_extension = '' # Make sure we have a typical setup for directory # searches for dir in LIBPATH: add_dir(dir, compiler.library_dirs) for dir in INCLPATH: add_dir(dir, compiler.include_dirs) # Add the Python include dir add_dir(get_python_include_dir(), compiler.include_dirs) # Customize the compiler according to system settings customize_compiler(compiler) log.info('configured compiler') self.prepared_compiler = 1 return compiler def reset_compiler(self): """ Reset a possibly already prepared compiler. The compiler will have to be prepared again using .prepared_compiler(). """ self._set_compiler_object(None) self.prepared_compiler = 0 def _get_compiler_object(self): """ Get the command's compiler object. """ # See the change and discussion for # http://bugs.python.org/issue6377, new in Python 2.7 # The change was later reverted, so this probably never # triggers. See http://bugs.python.org/issue13994 if hasattr(self, 'compiler_obj'): return self.compiler_obj else: return self.compiler def _set_compiler_object(self, compiler): """ Set the command's compiler object. """ # See the change and discussion for # http://bugs.python.org/issue6377, new in Python 2.7 # The change was later reverted, so this probably never # triggers. See http://bugs.python.org/issue13994 if hasattr(self, 'compiler_obj'): self.compiler_obj = compiler else: self.compiler = compiler # # mx Auto-Configuration command # class mx_autoconf(CompilerSupportMixin, config): """ Auto-configuration class which adds some extra configuration settings to the packages. """ # Command description description = "auto-configuration build step (for internal use only)" # Command line options user_options = config.user_options + [ ('enable-debugging', None, 'compile with debugging support (env var: MX_ENABLE_DEBUGGING)'), ('defines=', None, 'define C macros (example: A=1,B=2,C,D)'), ('undefs=', None, 'define C macros (example: A,B,C)'), ] # User option defaults enable_debugging = 0 defines = None undefs = None # C APIs to check: (C API name, list of header files to include) api_checks = ( ('strftime', ['time.h']), ('strptime', ['time.h']), ('timegm', ['time.h']), ('clock_gettime', ['time.h']), ('clock_getres', ['time.h']), #('this_always_fails', []), # For testing the detection mechanism ) def initialize_options(self): config.initialize_options(self) self.noisy = 0 self.dump_source = 0 if not self.enable_debugging: # Enable debugging for dev snapshots version = self.distribution.metadata.get_version() if has_substring('dev', version): self.enable_debugging = 1 log.warn('debugging enabled for development snapshots') if not self.enable_debugging: # Enable debugging via env variable MX_ENABLE_DEBUGGING if get_env_var('MX_ENABLE_DEBUGGING', default=0, yesno_value=1): self.enable_debugging = 1 log.warn('debugging enabled via ' 'MX_ENABLE_DEBUGGING environment variable') def finalize_options(self): config.finalize_options(self) if self.defines: defines = [] for defstr in self.defines.split(','): defstr = defstr.strip() if '=' in defstr: defname, defvalue = defstr.split('=') defname = defname.strip() defvalue = defvalue.strip() else: defname = defstr defvalue = '1' defines.append((defname, defvalue)) self.defines = defines else: self.defines = [] if self.undefs: undefs = [] for undefstr in self.undefs.split(','): undefname = undefstr.strip() undefs.append(undefname) self.undefs = undefs else: self.undefs = [] def get_outputs(self): """ We don't generate any output. """ return [] def run(self): # Setup compiler compiler = self.prepare_compiler() # Check compiler setup log.info('checking compiler setup') if not self.compiler_available(): if sys.platform == 'darwin': # On Mac OS X, Apple removed the GCC compiler from # Xcode 4.1, but the Python installers are still # compiled with GCC, so distutils will default to # looking for GCC (see Python issue #13590). We'll try # clang as fallback solution. cc, cxx, ldshared = get_config_vars('CC', 'CXX', 'LDSHARED') log.info('compiler problem: "%s" not available, trying ' '"clang" instead' % cc) if 'CC' not in os.environ: os.environ['CC'] = 'clang' if 'CXX' not in os.environ: os.environ['CXX'] = 'clang' if 'LDSHARED' not in os.environ: if ldshared.startswith(cc): ldshared = 'clang ' + ldshared[len(cc):] os.environ['LDSHARED'] = ldshared self.reset_compiler() compiler = self.prepare_compiler() if self.compiler_available(): log.info('using "clang" instead of "%s"' % cc) else: log.info('no working compiler found; ' 'please install Xcode first') raise CCompilerError('no compiler available') else: log.error('compiler setup does not work or no compiler found; ' 'try adjusting the CC/LDSHARED environemnt variables ' 'to point to the installed compiler') raise CCompilerError('no compiler available') log.info('compiler setup works') # Add some static #defines which should not hurt compiler.define_macro('_GNU_SOURCE', '1') # Parse [py]config.h config_h = get_config_h_filename() try: configfile = open(config_h) except IOError,why: log.warn('could not open %s file' % config_h) configuration = {} else: configuration = parse_config_h(configfile) configfile.close() # Tweak configuration a little for some platforms if sys.platform[:5] == 'win32': configuration['HAVE_STRFTIME'] = 1 # Build lists of #defines and #undefs define = [] undef = [] # Check APIs for apiname, includefiles in self.api_checks: macro_name = 'HAVE_' + apiname.upper() if not configuration.has_key(macro_name): log.info('checking for availability of %s() ' '(errors from this can safely be ignored)' % apiname) if self.check_function(apiname, includefiles): log.info('%s() is available on this platform' % apiname) define.append((macro_name, '1')) else: log.info('%s() is not available on this platform' % apiname) undef.append(macro_name) # Compiler tests if not configuration.has_key('BAD_STATIC_FORWARD'): log.info('checking compiler for bad static forward handling ' '(errors from this can safely be ignored)') if self.check_bad_staticforward(): log.info('compiler has problems with static forwards ' '- enabling work-around') define.append(('BAD_STATIC_FORWARD', '1')) # Enable debugging support if self.enable_debugging: log.info('enabling mx debug support') define.append(('MAL_DEBUG', None)) # Add extra #defines and #undefs if self.defines: define.extend(self.defines) if self.undefs: undef.extend(self.undefs) log.info('macros to define: %s' % define) log.info('macros to undefine: %s' % undef) # Reinitialize build_ext command with extra defines build_ext = self.distribution.reinitialize_command('build_ext') build_ext.ensure_finalized() # We set these here, since distutils 1.0.2 introduced a # new incompatible way to process .define and .undef if build_ext.define: #print repr(build_ext.define) if type(build_ext.define) is types.StringType: # distutils < 1.0.2 needs this: l = build_ext.define.split(',') build_ext.define = map(lambda symbol: (symbol, '1'), l) build_ext.define = build_ext.define + define else: build_ext.define = define if build_ext.undef: #print repr(build_ext.undef) if type(build_ext.undef) is types.StringType: # distutils < 1.0.2 needs this: build_ext.undef = build_ext.undef.split(',') build_ext.undef = build_ext.undef + undef else: build_ext.undef = undef log.debug('updated build_ext with autoconf setup') def compiler_available(self): """ Check whether the compiler works. Return 1/0 depending on whether the compiler can produce code or not. """ body = "int main (void) { return 0; }" return self.check_compiler(body) def check_compiler(self, sourcecode, headers=None, include_dirs=None, libraries=None, library_dirs=None): """ Check whether sourcecode compiles and links with the current compiler and link environment. For documentation of the other arguments see the base class' .try_link(). """ self.prepare_compiler() return self.try_link(sourcecode, headers, include_dirs, libraries, library_dirs) def check_bad_staticforward(self): """ Check whether the compiler does not supports forward declaring static arrays. For documentation of the other arguments see the base class' .try_link(). """ body = """ typedef struct _mxstruct {int a; int b;} mxstruct; staticforward mxstruct mxarray[]; statichere mxstruct mxarray[] = {{0,2},{3,4},}; int main(void) {return mxarray[0].a;} """ self.prepare_compiler() return not self.try_compile(body, headers=('Python.h',), include_dirs=[get_python_include_dir()]) def check_function(self, function, headers=None, include_dirs=None, libraries=None, library_dirs=None, prototype=0, call=0): """ Check whether function is available in the given compile and link environment. If prototype is true, a function prototype is included in the test. If call is true, a function call is generated (rather than just a reference of the function symbol). For documentation of the other arguments see the base class' .try_link(). """ body = [] if prototype: body.append("int %s (void);" % function) body.append("int main (void) {\n" " void *ptr = 0; ") if call: body.append(" %s();" % function) else: body.append(" ptr = &%s;" % function) body.append("return 0; }") body = "\n".join(body) + "\n" return self.check_compiler(body, headers, include_dirs, libraries, library_dirs) def check_library(self, library, library_dirs=None, headers=None, include_dirs=None, other_libraries=[]): """ Check whether we can link against the given library. For documentation of the other arguments see the base class' .try_link(). """ body = "int main (void) { return 0; }" return self.check_compiler(body, headers, include_dirs, [library]+other_libraries, library_dirs) def find_include_file(self, filename, paths, pattern=None): """ Find an include file of the given name. Returns a tuple (directory, filename) or (None, None) in case no library can be found. The search path is determined by the paths parameter, the compiler's .include_dirs attribute and the STDINCLPATH and FINDINCLPATH globals. The search is done in this order. """ compiler = self.prepare_compiler() paths = (paths + compiler.include_dirs + STDINCLPATH + FINDINCLPATH) verify_path(paths) if _debug: print 'INCLPATH', paths dir = find_file(filename, paths, pattern) if dir is None: return (None, None) return (dir, os.path.join(dir, filename)) def find_library_file(self, libname, paths, pattern=None, lib_types=LIB_TYPES): """ Find a library of the given name. Returns a tuple (directory, filename) or (None, None) in case no library can be found. The search path is determined by the paths parameter, the compiler's .library_dirs attribute and the STDLIBPATH and FINDLIBPATH globals. The search is done in this order. Shared libraries are prefered over static ones if both types are given in lib_types. """ compiler = self.prepare_compiler() paths = (paths + compiler.library_dirs + STDLIBPATH + FINDLIBPATH) verify_path(paths) if _debug: print 'LIBPATH: %r' % paths print 'Library types: %r' % lib_types # Try to first find a shared library to use and revert # to a static one, if no shared lib can be found for lib_type in lib_types: filename = compiler.library_filename(libname, lib_type=lib_type) if _debug: print 'looking for library file %s' % filename dir = find_file(filename, paths, pattern) if dir is not None: return (dir, os.path.join(dir, filename)) return (None, None) # # mx MSVC Compiler extension # # We want some extra options for the MSVCCompiler, so we add them # here. This is an awful hack, but there seems to be no other way to # subclass a standard distutils C compiler class... if python_version < '2.4': # VC6 MSVC_COMPILER_FLAGS = ['/O2', '/Gf', '/GB', '/GD', '/Ob2'] elif python_version < '2.6': # VC7.1 MSVC_COMPILER_FLAGS = ['/O2', '/GF', '/GB', '/Ob2'] else: # VC9 MSVC_COMPILER_FLAGS = ['/O2', '/GF', '/Ob2'] if hasattr(MSVCCompiler, 'initialize'): # distutils 2.5.0 separates the initialization of the # .compile_options out into a new method .initialize() # remember old _initialize old_MSVCCompiler_initialize = MSVCCompiler.initialize def mx_msvccompiler_initialize(self, *args, **kws): apply(old_MSVCCompiler_initialize, (self,) + args, kws) # Add our extra options self.compile_options.extend(MSVC_COMPILER_FLAGS) # "Install" new initialize MSVCCompiler.initialize = mx_msvccompiler_initialize else: # distutils prior to 2.5.0 only allow to hook into the .__init__() # method # remember old __init__ old_MSVCCompiler__init__ = MSVCCompiler.__init__ def mx_msvccompiler__init__(self, *args, **kws): apply(old_MSVCCompiler__init__, (self,) + args, kws) # distutils 2.5.0 separates the initialization of the # .compile_options out into a new method if hasattr(self, 'initialized') and not self.initialized: self.initialize() # Add out extra options self.compile_options.extend(MSVC_COMPILER_FLAGS) # "Install" new __init__ MSVCCompiler.__init__ = mx_msvccompiler__init__ # # mx Distribution class # class mx_Distribution(Distribution): """ Distribution class which knows about our distutils extensions. """ # List of UnixLibrary instances unixlibs = None # Option to override the package version number set_version = None # List of setuptools namespace package names namespace_packages = None # List of setuptools dependency links dependency_links = None # Add classifiers dummy option if needed display_options = Distribution.display_options[:] display_option_names = Distribution.display_option_names[:] if 'classifiers' not in display_options: display_options = display_options + [ ('classifiers', None, "print the list of classifiers (not yet supported)"), ] display_option_names = display_option_names + [ 'classifiers' ] # Add set-version option global_options = Distribution.global_options[:] global_options = global_options + [ ('set-version=', None, "override the package version number"), ] def finalize_options(self): if self.namespace_packages is None: self.namespace_packages = [] if self.dependency_links is None: self.dependency_links = [] # Call base method Distribution.finalize_options(self) def parse_command_line(self): if not Distribution.parse_command_line(self): return # Override the version information from the package with a # command-line given version string if self.set_version is not None: self.metadata.version = self.set_version self.version = self.set_version return 1 def has_unixlibs(self): return self.unixlibs and len(self.unixlibs) > 0 def get_namespace_packages(self): return self.namespace_packages or [] def get_dependency_links(self): return self.dependency_links or [] # # mx Extension class # class mx_Extension(Extension): """ Extension class which allows specifying whether the extension is required to build or optional. """ # Is this Extension required to build or can we issue a Warning in # case it fails to build and continue with the remaining build # process ? required = 1 # List of optional libaries (libname, list of header files to # check) to include in the link step; the availability of these is # tested prior to compiling the extension. If found, the symbol # HAVE__LIB is defined and the library included in # the list of libraries to link against. optional_libraries = () # List of needed include files in form of tuples (filename, # [dir1, dir2,...], pattern); see mx_autoconf.find_file() # for details needed_includes = () # List of needed include files in form of tuples (libname, # [dir1, dir2,...], pattern); see mx_autoconf.find_library_file() # for details needed_libraries = () # Include the found library files in the extension output ? This # causes the files to be copied into the same location as the # extension itself. include_needed_libraries = 0 # Library types to check (for needed libraries) lib_types = LIB_TYPES # Data files needed by this extension (these are only # installed if building the extension succeeded) data_files = () # Python packages needed by this extension (these are only # installed if building the extension succeeded) packages = () # Building success marker successfully_built = 0 # NOTE: If you add new features to this class, also adjust # rebase_extensions() def __init__(self, *args, **kws): for attr in ('required', 'lib_types', 'optional_libraries', 'needed_includes', 'needed_libraries', 'include_needed_libraries', 'data_files', 'packages'): if kws.has_key(attr): setattr(self, attr, kws[attr]) del kws[attr] else: value = getattr(self, attr) if type(value) == type(()): setattr(self, attr, list(value)) apply(Extension.__init__, (self,) + args, kws) # # mx Build command # class mx_build(build): """ build command which knows about our distutils extensions. This build command builds extensions in properly separated directories (which includes building different Unicode variants in different directories). """ # Skip the build process ? skip = None # Assume prebuilt archive ? prebuilt = None user_options = build.user_options + [ ('skip', None, 'skip build and reuse the existing build files'), ('prebuilt', None, 'assume we have a prebuilt archive (even without %s file)' % PREBUILT_MARKER), ] def finalize_options(self): # Make sure different Python versions are built in separate # directories python_platform = '.%s-%s' % (mx_get_platform(), py_version()) if self.build_platlib is None: self.build_platlib = os.path.join( self.build_base, 'lib' + python_platform) if self.build_purelib is None: self.build_purelib = os.path.join( self.build_base, 'lib.' + py_version(unicode_aware=0)) if self.build_temp is None: self.build_temp = os.path.join( self.build_base, 'temp' + python_platform) # Call the base method build.finalize_options(self) if self.skip is None: self.skip = 0 # Handle prebuilt archives if self.prebuilt is None: if os.path.exists(PREBUILT_MARKER): self.prebuilt = 1 else: self.prebuilt = 0 if self.prebuilt: if not self.have_build_pickle(): # Either the build pickle is missing or not compatible # with the currently running Python interpreter. Read # setup information from the build pickle; the path to # this file is stored in the PREBUILT_MARKER file. if os.path.exists(PREBUILT_MARKER): build_pickle_pathname = ( open(PREBUILT_MARKER, 'rb').read().strip()) build_pickle = self.read_build_pickle( build_pickle_pathname) mxSetup = build_pickle.get('mxSetup', {}) else: mxSetup = {} print """ -------------------------------------------------------------------- ERROR: Cannot find the build information needed for your platform. Please check that you have downloaded the right prebuilt archive for your platform and Python version. Product name: %s Product version: %s Your Python installation uses these settings: Python version: %s Platform: %s The prebuilt archive was built for: Python version: %s Platform: %s -------------------------------------------------------------------- """.strip() % ( self.distribution.metadata.get_name(), self.distribution.metadata.get_version(), py_version(unicode_aware=1), mx_get_platform(), mxSetup.get('py_version', 'unknown'), mxSetup.get('get_platform', 'unknown')) sys.exit(1) if self.force: log.info('prebuilt archive found: ignoring the --force option') self.force = 0 # Override settings with data from a possibly existing # build pickle log.info('prebuilt archive found: skipping the build process and ' 'reusing the existing build files and data') self.load_build_pickle() # Use the build pickle, in case we are supposed to skip the # build if self.skip and self.have_build_pickle(): log.info('skipping the build process and ' 'reusing the existing build files and data') self.load_build_pickle() def get_outputs(self): """ Collect the outputs of all sub-commands (this knows about the extra commands we added). This is needed by mx_bdist_prebuilt and mx_uninstall. """ outputs = {} for sub_command in self.get_sub_commands(): cmd = self.get_finalized_command(sub_command) if not hasattr(cmd, 'get_outputs'): log.error('problem: missing .get_outputs() ... %r' % cmd) raise ValueError('missing .get_outputs() implementation ' 'for command %r' % cmd) for filename in cmd.get_outputs(): outputs[filename] = 1 # Add pickle, if available pickle_filename = self.get_build_pickle_pathname() if os.path.exists(pickle_filename): if _debug: print 'added pickle:', pickle_filename outputs[pickle_filename] = 1 # Return a sorted list outputs = outputs.keys() outputs.sort() return outputs def pure_python_build(self): """ Return 1/0 depending on whether this is a pure Python build or not. Pure Python builds do not include extensions. """ return not self.distribution.ext_modules def get_build_pickle_pathname(self): """ Return the path name for the build pickle file. Note that the target system loading these pickles may well return different values for get_platform() than the system used to compile the build. We therefore do not include the platform in the pathname, only the Python version (to prevent obvious user errors related to downloading the wrong prebuilt archive for their Python version). For pure Python distributions (ones without extensions), we also don't include the Unicode tag in the pickle name. """ unicode_aware = not self.pure_python_build() return os.path.join( self.build_base, 'build-py%s.pck' % (py_version(unicode_aware=unicode_aware))) def write_build_pickle(self, pathname=None): """ Write the current state of the distribution, the build command and all sub-commands to a Python pickle in the build directory. If pathname is not given, .get_build_pickle_pathname() is used as default. """ if pathname is None: pathname = self.get_build_pickle_pathname() # Prepare the sub commands for pickle'ing self.get_outputs() # Remove data that would cause conflicts when restoring the # build pickle data = self.__dict__.copy() if data.has_key('distribution'): del data['distribution'] if data.has_key('compiler'): del data['compiler'] state = {'build': data} for sub_command, needed in self.sub_commands: cmd = self.distribution.get_command_obj(sub_command) data = cmd.__dict__.copy() if data.has_key('distribution'): del data['distribution'] if data.has_key('compiler'): del data['compiler'] if data.has_key('extensions'): del data['extensions'] if data.has_key('autoconf'): del data['autoconf'] state[sub_command] = data data = {'have_run': self.distribution.have_run, 'data_files': self.distribution.data_files, } state['distribution'] = data if 0: data = self.distribution.__dict__.copy() if data.has_key('distribution'): del data['distribution'] if data.has_key('metadata'): del data['metadata'] if data.has_key('ext_modules'): del data['ext_modules'] if data.has_key('command_obj'): del data['command_obj'] if data.has_key('cmdclass'): del data['cmdclass'] for key, value in data.items(): if type(value) is type(self.distribution.get_url): # Bound method del data[key] elif type(value) is type(self.distribution): # Instance del data[key] state['distribution'] = data # Save additional meta-data pure_python_build = self.pure_python_build() unicode_aware = not pure_python_build state['mxSetup'] = { '__version__': __version__, 'unicode_aware': unicode_aware, 'py_version': py_version(unicode_aware=unicode_aware), 'sys_platform': sys.platform, 'get_name': self.distribution.metadata.get_name(), 'get_version': self.distribution.metadata.get_version(), 'get_platform': mx_get_platform(), 'pure_python_build': pure_python_build, } # Save pickle if _debug: print 'saving build pickle:', repr(state) pickle_file = open(self.get_build_pickle_pathname(), 'wb') cPickle.dump(state, pickle_file) pickle_file.close() def have_build_pickle(self, pathname=None, ignore_distutils_platform=True, ignore_distribution_version=True, ignore_sys_platform=None): """ Return 1/0 depending on whether there is a build pickle that could be used or not. If pathname is not given, .get_build_pickle_pathname() is used as default. If ignore_platform is set (default), the platform information stored in the pickle is ignored in the check. This is useful, since the value of the build system may differ from the target system (e.g. for fat builds on Mac OS X that get installed on Intel Macs). If ignore_distribution_version is set (default), the distribution version information in the pickle is ignored. This is useful for cases where the version determined at build time can be different than at installation time, e.g. due to a timestamp being created dynamically and added to the version. If ignore_sys_platform is set (default is false for builds with C extensions and true for pure Python builds), the sys.platform version information in the pickle is ignored. """ if pathname is None: pathname = self.get_build_pickle_pathname() try: pickle_file = open(pathname, 'rb') except IOError: log.info('no build data file %r found' % pathname) return 0 state = cPickle.load(pickle_file) pickle_file.close() # Check whether this is a valid build file for this Python # version mxSetup = state.get('mxSetup', None) if mxSetup is None: return 0 unicode_aware = mxSetup.get('unicode_aware', 1) pure_python_build = mxSetup.get('pure_python_build', 0) if ignore_sys_platform is None: if pure_python_build: if mxSetup['sys_platform'].startswith('win'): # Prebuilt archives built on win32 can only be # installed there, since the os.sep does not # correspond to the distutils standard of '/'. ignore_sys_platform = False else: ignore_sys_platform = True if mxSetup['__version__'] != __version__: log.info('build data file %r found, ' 'but mxSetup version does not match; not using it' % pathname) return 0 if mxSetup['py_version'] != py_version(unicode_aware=unicode_aware): log.info('build data file %r found, ' 'but Python version does not match; not using it' % pathname) return 0 if ((not ignore_sys_platform) and mxSetup['sys_platform'] != sys.platform): log.info('build data file %r found, ' 'but sys.platform does not match; not using it' % pathname) return 0 if mxSetup['get_name'] != self.distribution.metadata.get_name(): log.info('build data file %r found, ' 'but distribution name does not match; not using it' % pathname) return 0 if ((not ignore_distribution_version) and mxSetup['get_version'] != self.distribution.metadata.get_version()): log.info('build data file %r found, ' 'but distribution version does not match; not using it' % pathname) return 0 if ((not ignore_distutils_platform) and mxSetup['get_platform'] != mx_get_platform()): log.info('build data file %r found, ' 'but distutils platform does not match; not using it' % pathname) return 0 log.info('found usable build data file %r' % pathname) return 1 def read_build_pickle(self, pathname=None): """ Read the pickle written by the .write_build_pickle() method. If pathname is not given, .get_build_pickle_pathname() is used as default. """ if pathname is None: pathname = self.get_build_pickle_pathname() pickle_file = open(pathname, 'rb') state = cPickle.load(pickle_file) pickle_file.close() if _debug: print 'read build pickle:' import pprint pprint.pprint(state) return state def load_build_pickle(self): """ Restore the state written by the .write_build_pickle() method. """ # Read pickle file state = self.read_build_pickle() # Adjust distutils platform string, if needed platform = state['mxSetup'].get('get_platform', None) if platform is not None: log.info('setting platform to %r' % platform) mx_set_platform(platform) log.info('restoring build data from a previous build run') for sub_command, data in state.items(): if _debug: print 'restoring build data for command %r' % sub_command if sub_command == 'mxSetup': self.distribution.metadata.version = data['get_version'] self.distribution.metadata.name = data['get_name'] elif sub_command == 'build': for key, value in data.items(): self.__dict__[key] = value elif sub_command == 'distribution': for key, value in data.items(): self.distribution.__dict__[key] = value else: cmd = self.distribution.get_command_obj(sub_command) for key, value in data.items(): cmd.__dict__[key] = value def run(self): # Run the build command build.run(self) # Save the build data in a build pickle for later reuse, # unless this is a prebuilt initiated run if not self.prebuilt: self.write_build_pickle() def has_unixlibs(self): return self.distribution.has_unixlibs() def has_data_files(self): return self.distribution.has_data_files() # Add new sub-commands: if len(build.sub_commands) > 4: raise DistutilsError, 'incompatible distutils version !' sub_commands = [('build_clib', build.has_c_libraries), ('build_unixlib', has_unixlibs), ('mx_autoconf', build.has_ext_modules), ('build_ext', build.has_ext_modules), ('build_py', build.has_pure_modules), ('build_scripts', build.has_scripts), ('build_data', has_data_files), ] # # mx Build C Lib command # class mx_build_clib(CompilerSupportMixin, build_clib): """ build_clib command which builds the libs using separate temp dirs """ # Lib of output files outfiles = None def finalize_options(self): build_clib.finalize_options(self) self.outfiles = [] def build_library(self, lib_name, build_info): # Build each extension in its own subdir of build_temp (to # avoid accidental sharing of object files between extensions # having the same name, e.g. mxODBC.o). build_temp_base = self.build_temp self.build_temp = os.path.join(build_temp_base, lib_name) compiler = self.prepare_compiler() try: # # This is mostly identical to the original build_clib command. # sources = build_info.get('sources') if sources is None or \ type(sources) not in (types.ListType, types.TupleType): raise DistutilsSetupError, \ ("in 'libraries' option (library '%s'), " + "'sources' must be present and must be " + "a list of source filenames") % lib_name sources = list(sources) log.info("building '%s' library" % lib_name) # First, compile the source code to object files in the # library directory. (This should probably change to # putting object files in a temporary build directory.) macros = build_info.get('macros') include_dirs = build_info.get('include_dirs') objects = compiler.compile(sources, output_dir=self.build_temp, macros=macros, include_dirs=include_dirs, debug=self.debug) # Now "link" the object files together into a static library. # (On Unix at least, this isn't really linking -- it just # builds an archive. Whatever.) compiler.create_static_lib(objects, lib_name, output_dir=self.build_clib, debug=self.debug) # Record the name of the library we just created self.outfiles.append( compiler.library_filename(lib_name, output_dir=self.build_clib)) finally: # Cleanup local changes to the configuration self.build_temp = build_temp_base def build_libraries(self, libraries): for (lib_name, build_info) in libraries: self.build_library(lib_name, build_info) def get_outputs(self): """ Return a list of the created library files. This is needed by mx_bdist_prebuilt on all build commands and build_clib doesn't provide it. """ return self.outfiles # # mx Build Extensions command # class mx_build_ext(CompilerSupportMixin, build_ext): """ build_ext command which runs mx_autoconf command before trying to build anything. """ user_options = build_ext.user_options + [ ('disable-build=', None, 'disable building an optional extensions (comma separated list of ' 'dotted package names); default is to try building all'), ('enable-build=', None, 'if given, only these optional extensions are built (comma separated ' 'list of dotted package names)'), ] # mx_autoconf command object (finalized and run) autoconf = None # Default values for command line options disable_build = None enable_build = None # Extra output files extra_output = () # Output files output_files = None def finalize_options(self): build_ext.finalize_options(self) if self.disable_build is None: self.disable_build = () elif type(self.disable_build) is types.StringType: self.disable_build = [x.strip() for x in self.disable_build.split(',')] if type(self.enable_build) is types.StringType: self.enable_build = [x.strip() for x in self.enable_build.split(',')] self.extra_output = [] def run(self): # Add unixlibs install-dirs to library_dirs, so that linking # against them becomes easy if self.distribution.has_unixlibs(): build_unixlib = self.get_finalized_command('build_unixlib') paths, libs = build_unixlib.get_unixlib_lib_options() # Libraries have to be linked against by defining them # in the mx_Extension() setup, otherwise, all extensions # get linked against all Unix libs that were built... #self.libraries[:0] = libs self.library_dirs[:0] = paths # Assure that mx_autoconf has been run and store a reference # in .autoconf self.run_command('mx_autoconf') self.autoconf = self.get_finalized_command('mx_autoconf') # Now, continue with the standard build process build_ext.run(self) def build_extensions(self): # Make sure the compiler is setup correctly compiler = self.prepare_compiler() # Make sure that any autoconf actions use the same compiler # settings as we do (the .compiler is set up in build_ext.run() # just before calling .build_extensions()) self.autoconf._set_compiler_object(compiler) # Build the extensions self.check_extensions_list(self.extensions) for ext in self.extensions: self.build_extension(ext) # Cleanup .extensions list (remove entries which did not build correctly) l = [] for ext in self.extensions: if not isinstance(ext, mx_Extension): l.append(ext) else: if ext.successfully_built: l.append(ext) self.extensions = l if _debug: print 'extensions:', repr(self.extensions) log.info('') def build_extension(self, ext): required = not hasattr(ext, 'required') or ext.required log.info('') log.info('building extension "%s" %s' % (ext.name, required * '(required)' or '(optional)')) compiler = self.prepare_compiler() # Optional extension building can be adjusted via command line options if not required: if self.enable_build is not None and \ ext.name not in self.enable_build: log.info('skipped -- build not enabled by command line option') return elif ext.name in self.disable_build: log.info('skipped -- build disabled by command line option') return # Search for include files if (isinstance(ext, mx_Extension) and \ ext.needed_includes): log.info('looking for header files needed by extension ' '"%s"' % ext.name) for filename, dirs, pattern in ext.needed_includes: (dir, pathname) = self.autoconf.find_include_file( filename, dirs, pattern) if dir is not None: log.info('found needed include file "%s" ' 'in directory %s' % (filename, dir)) if dir not in ext.include_dirs and \ dir not in STDINCLPATH and \ dir not in INCLPATH: ext.include_dirs.append(dir) else: if required: raise CompileError, \ 'could not find needed header file "%s"' % \ filename else: log.warn( '*** WARNING: Building of extension ' '"%s" failed: needed include file "%s" ' 'not found' % (ext.name, filename)) return # Search for libraries if hasattr(ext, 'needed_libraries') and \ ext.needed_libraries: log.info('looking for libraries needed by extension ' '"%s"' % ext.name) for libname, dirs, pattern in ext.needed_libraries: dir, pathname = self.autoconf.find_library_file( libname, dirs, pattern=pattern, lib_types=ext.lib_types) if dir is not None: log.info('found needed library "%s" ' 'in directory %s (%s)' % (libname, dir, pathname)) if 'shared' not in ext.lib_types: # Force static linking and append the library # pathname to the linker arguments if libname in ext.libraries: ext.libraries.remove(libname) if not ext.extra_link_args: ext.extra_link_args = [] ext.extra_link_args.append( pathname) else: # Prefer dynamic linking if dir not in ext.library_dirs and \ dir not in STDLIBPATH and \ dir not in LIBPATH: ext.library_dirs.append(dir) if libname not in ext.libraries: ext.libraries.append(libname) if ext.include_needed_libraries: ext_package_dir = os.path.split( self.get_ext_filename( self.get_ext_fullname(ext.name)))[0] # The linker will always link against the # real name, not a symbolic name (XXX Hope this # is true for all platforms) realpathname = os.path.realpath(pathname) realfilename = os.path.split(realpathname)[1] # Copy the share lib to the package dir, using # the real filename data_entry = (realpathname, ext_package_dir + os.sep) if data_entry not in ext.data_files: if _debug: print ('adding library data entry %r' % (data_entry,)) ext.data_files.append(data_entry) else: if required: raise CompileError, \ 'could not find needed library "%s"' % \ libname else: log.warn( '*** WARNING: Building of extension ' '"%s" failed: needed library "%s" ' 'not found' % (ext.name, libname)) return # Build each extension in its own subdir of build_temp (to # avoid accidental sharing of object files between extensions # having the same name, e.g. mxODBC.o). build_temp_base = self.build_temp extpath = ext.name.replace('.', '-') self.build_temp = os.path.join(build_temp_base, extpath) # Check for availability of optional libs which can be used # by the extension; note: this step includes building small # object files to test for the availability of the libraries if isinstance(ext, mx_Extension) and \ ext.optional_libraries: log.info("checking for optional libraries") for libname, headerfiles in ext.optional_libraries: if self.autoconf.check_library(libname, headers=headerfiles): symbol = 'HAVE_%s_LIB' % libname.upper() log.info("found optional library '%s'" " -- defining %s" % (libname, symbol)) ext.libraries.append(libname) ext.define_macros.append((symbol, '1')) else: log.warn("could not find optional library '%s'" " -- omitting it" % libname) if _debug: print 'Include dirs:', repr(ext.include_dirs + compiler.include_dirs) print 'Libary dirs:', repr(ext.library_dirs + compiler.library_dirs) print 'Libaries:', repr(ext.libraries) print 'Macros:', repr(ext.define_macros) # Build the extension successfully_built = 0 try: # Skip extensions which cannot be built if the required # option is given and set to false. required = not hasattr(ext, 'required') or ext.required if required: build_ext.build_extension(self, ext) successfully_built = 1 else: try: build_ext.build_extension(self, ext) except (CCompilerError, DistutilsError), why: log.warn( '*** WARNING: Building of extension "%s" ' 'failed: %s' % (ext.name, sys.exc_info()[1])) else: successfully_built = 1 finally: # Cleanup local changes to the configuration self.build_temp = build_temp_base # Processing for successfully built extensions if successfully_built: if isinstance(ext, mx_Extension): # Add Python packages needed by this extension self.distribution.packages.extend(ext.packages) # Add data files needed by this extension self.distribution.data_files.extend(ext.data_files) # Mark as having been built successfully ext.successfully_built = 1 def get_outputs(self): # Note: The cache is needed for mx_uninstall when used # together with mx_bdist_prebuilt. mx_build will run a # recursive .get_outputs() on all sub-commands and then store # the sub-command objects in the build pickle. By using a # cache, we can avoid to have the command object to have to # rebuild the outputs (this may not be possible due to the # missing source files). if self.output_files is not None: return self.output_files else: files = build_ext.get_outputs(self) self.output_files = files return files # # mx Build Python command # class mx_build_py(build_py): """ build_py command which also allows removing Python source code after the byte-code compile process. """ user_options = build_py.user_options + [ ('without-source', None, "only include Python byte-code"), ] boolean_options = build_py.boolean_options + ['without-source'] # Omit source files ? without_source = 0 # Output cache output_files = None def run(self): if self.without_source: # --without-source implies byte-code --compile if (not self.compile and not self.optimize): self.compile = 1 # Build the Python code build_py.run(self) # Optionally remove source code if self.without_source: log.info('removing Python source files (--without-source)') verbose = self.verbose dry_run = self.dry_run for file in build_py.get_outputs(self, include_bytecode=0): # Only process .py files if file[-3:] != '.py': continue # Remove source code execute(os.remove, (file,), "removing %s" % file, verbose=verbose, dry_run=dry_run) # Remove .pyc files (if not requested) if not self.compile: filename = file + "c" if os.path.isfile(filename): execute(os.remove, (filename,), "removing %s" % filename, verbose=verbose, dry_run=dry_run) # Remove .pyo files (if not requested) if self.optimize == 0: filename = file + "o" if os.path.isfile(filename): execute(os.remove, (filename,), "removing %s" % filename, verbose=verbose, dry_run=dry_run) def get_outputs(self, include_bytecode=1): # Note: The cache is needed for mx_uninstall when used # together with mx_bdist_prebuilt. See # mx_build_ext.get_outputs() for details. # Try cache first cache_key = include_bytecode if self.output_files is not None: files = self.output_files.get(cache_key, None) if files is not None: return files else: self.output_files = {} # Regular processing if (not self.without_source or not include_bytecode): files = build_py.get_outputs(self, include_bytecode) self.output_files[cache_key] = files return files # Remove source code files from outputs files = [] for file in build_py.get_outputs(self, include_bytecode=1): if ((self.without_source and file[-3:] == '.py') or (not self.compile and file[-4:] == '.pyc') or (not self.optimize and file[-4:] == '.pyo')): continue files.append(file) self.output_files[cache_key] = files return files # # mx Build Data command # class mx_build_data(Command): """ build_data command which allows copying (external) data files into the build tree. """ description = "build data files (copy them to the build directory)" user_options = [ ('build-lib=', 'b', "directory to store built Unix libraries in"), ] boolean_options = [] # Location of the build directory build_lib = None def initialize_options(self): self.build_lib = None self.outfiles = [] def finalize_options(self): self.set_undefined_options('build', ('verbose', 'verbose'), ('build_lib', 'build_lib'), ) if _debug: # For debugging we are always in very verbose mode... self.verbose = 2 def get_outputs(self): return self.outfiles def build_data_files(self, data_files): """ Copy the data_files to the build_lib directory. For tuple entries, this updates the data_files list in place and adjusts it, so that the data files are picked up from the build directory rather than their original location. """ build_lib = self.build_lib for i in range(len(data_files)): entry = data_files[i] copied_data_files = [] if type(entry) == types.StringType: # Unix- to platform-convention conversion entry = convert_to_platform_path(entry) filenames = glob.glob(entry) for filename in filenames: dst = os.path.join(build_lib, filename) dstdir = os.path.split(dst)[0] if not self.dry_run: self.mkpath(dstdir) outfile = self.copy_file(filename, dst)[0] else: outfile = dst self.outfiles.append(outfile) # Add to the copied_data_files list (using the # distutils internal Unix path format) copied_data_files.append( convert_to_distutils_path(filename)) elif type(entry) == types.TupleType: origin, target = entry # Unix- to platform-convention conversion origin = convert_to_platform_path(origin) target = convert_to_platform_path(target) targetdir, targetname = os.path.split(target) origin_pathnames = glob.glob(origin) if targetname: # Make sure that we don't copy multiple files to # the same target filename if len(origin_pathnames) > 1: raise ValueError( 'cannot copy multiple files to %s' % target) for pathname in origin_pathnames: if targetname: # Use the new targetname filename filename = targetname else: # Use the original filename filename = os.path.split(pathname)[1] dst = os.path.join(build_lib, targetdir, filename) dstdir = os.path.split(dst)[0] if not self.dry_run: self.mkpath(dstdir) outfile = self.copy_file(pathname, dst)[0] else: outfile = dst self.outfiles.append(outfile) # Add to the copied_data_files list (using the # distutils internal Unix path format) copied_data_files.append( convert_to_distutils_path( os.path.join(targetdir, filename))) else: raise ValueError('unsupported data_files item format: %r' % entry) # Clear the data_files entry (we'll clean up the list # later on) data_files[i] = None # Add the new copied_data_files to the data_files, so # that install_data can pick up the build version of # the data file data_files.extend(copied_data_files) # Cleanup data_files (remove all None, empty and duplicate # entries) d = {} for filename in data_files: if not filename: continue d[filename] = 1 data_files[:] = d.keys() if _debug: print 'After build_data: data_files=%r' % data_files print 'build_data output=%r' % self.outfiles def run(self): if not self.distribution.data_files: return self.build_data_files(self.distribution.data_files) # # mx Build Unix Libs command # class UnixLibrary: """ Container for library configuration data. """ # Name of the library libname = '' # Source tree where the library lives sourcetree = '' # List of library files and where to install them in the # build tree libfiles = None # Name of the configure script configure = 'configure' # Configure options configure_options = None # Make options make_options = None def __init__(self, libname, sourcetree, libfiles, configure=None, configure_options=None, make_options=None): self.libname = libname self.sourcetree = sourcetree # Check for 2-tuples... for libfile, targetdir in libfiles: pass self.libfiles = libfiles # Optional settings if configure: self.configure = configure if configure_options: self.configure_options = configure_options else: self.configure_options = [] if make_options: self.make_options = make_options else: self.make_options = [] def get(self, option, alternative=None): return getattr(self, option, alternative) class mx_build_unixlib(Command): """ This command compiles external libs using the standard Unix procedure for this: ./configure make """ description = "build Unix libraries used by Python extensions" # make program to use make = None user_options = [ ('build-lib=', 'b', "directory to store built Unix libraries in"), ('build-temp=', 't', "directory to build Unix libraries to"), ('make=', None, "make program to use"), ('makefile=', None, "makefile to use"), ('force', 'f', "forcibly reconfigure"), ] boolean_options = ['force'] def initialize_options(self): self.build_lib = None self.build_temp = None self.make = None self.makefile = None self.force = 0 def finalize_options(self): self.set_undefined_options('build', ('verbose', 'verbose'), ('build_lib', 'build_lib'), ('build_temp', 'build_temp') ) if self.make is None: self.make = 'make' if self.makefile is None: self.makefile = 'Makefile' if _debug: # For debugging we are always in very verbose mode... self.verbose = 2 def run_script(self, script, options=[]): if options: l = [] for k, v in options: if v is not None: l.append('%s=%s' % (k, v)) else: l.append(k) script = script + ' ' + ' '.join(l) log.info('executing script %s' % repr(script)) if self.dry_run: return 0 try: rc = os.system(script) except DistutilsExecError, msg: raise CompileError, msg return rc def run_configure(self, options=[], dir=None, configure='configure'): """ Run the configure script using options is given. Options must be a list of tuples (optionname, optionvalue). If an option should not have a value, passing None as optionvalue will have the effect of using the option without value. dir can be given to have the configure script execute in that directory instead of the current one. """ cmd = './%s' % configure if dir: cmd = 'cd %s; ' % dir + cmd log.info('running %s in %s' % (configure, dir or '.')) rc = self.run_script(cmd, options) if rc != 0: raise CompileError, 'configure script failed' def run_make(self, targets=[], dir=None, make='make', options=[]): """ Run the make command for the given targets. Targets must be a list of valid Makefile targets. dir can be given to have the make program execute in that directory instead of the current one. """ cmd = '%s' % make if targets: cmd = cmd + ' ' + ' '.join(targets) if dir: cmd = 'cd %s; ' % dir + cmd log.info('running %s in %s' % (make, dir or '.')) rc = self.run_script(cmd, options) if rc != 0: raise CompileError, 'make failed' def build_unixlib(self, unixlib): # Build each lib in its own subdir of build_temp (to # avoid accidental sharing of object files) build_temp_base = self.build_temp libpath = unixlib.libname self.build_temp = os.path.join(build_temp_base, libpath) try: # Get options configure = unixlib.configure configure_options = unixlib.configure_options make_options = unixlib.make_options sourcetree = unixlib.sourcetree buildtree = os.path.join(self.build_temp, sourcetree) libfiles = unixlib.libfiles if not libfiles: raise DistutilsError, \ 'no libfiles defined for unixlib "%s"' % \ unixlib.name log.info('building C lib %s in %s' % (unixlib.libname, buildtree)) # Prepare build log.info('preparing build of %s' % unixlib.libname) self.mkpath(buildtree) self.copy_tree(sourcetree, buildtree) # Run configure to build the Makefile if not os.path.exists(os.path.join(buildtree, self.makefile)) or \ self.force: self.run_configure(configure_options, dir=buildtree, configure=configure) else: log.info("skipping configure: " "%s is already configured" % unixlib.libname) # Run make self.run_make(dir=buildtree, make=self.make, options=make_options) # Copy libs to destinations for sourcefile, destination in libfiles: if not destination: continue sourcefile = os.path.join(self.build_temp, sourcefile) destination = os.path.join(self.build_lib, destination) if not os.path.exists(sourcefile): raise CompileError, \ 'library "%s" failed to build' % sourcefile self.mkpath(destination) self.copy_file(sourcefile, destination) finally: # Cleanup local changes to the configuration self.build_temp = build_temp_base def build_unixlibs(self, unixlibs): for unixlib in unixlibs: self.build_unixlib(unixlib) def get_unixlib_lib_options(self): libs = [] paths = [] for unixlib in self.distribution.unixlibs: for sourcefile, destination in unixlib.libfiles: if not destination: # direct linking sourcefile = os.path.join(self.build_temp, sourcefile) libs.append(sourcefile) else: # linking via link path and lib name sourcefile = os.path.basename(sourcefile) libname = os.path.splitext(sourcefile)[0] if libname[:3] == 'lib': libname = libname[3:] libs.append(libname) destination = os.path.join(self.build_lib, destination) paths.append(destination) #print paths, libs return paths, libs def run(self): if not self.distribution.unixlibs: return self.build_unixlibs(self.distribution.unixlibs) # # mx Install command # class mx_install(install): """ We want install_data to default to install_purelib, if it is not given. """ # build_lib attribute copied to the install command from the # build command during .finalize_options() build_lib = None # Force installation into the platlib, even if the package is a # pure Python library force_non_pure = 0 user_options = install.user_options + [ ('force-non-pure', None, "force installation into the platform dependent directory"), ] def initialize_options(self): install.initialize_options(self) self.force_non_pure = 0 def finalize_options(self): fix_install_data = (self.install_data is None) install.finalize_options(self) # Force installation into the platform dependent directories, # even if this package is a pure Python package if self.force_non_pure: self.install_purelib = self.install_platlib self.install_libbase = self.install_platlib self.install_lib = os.path.join(self.install_platlib, self.extra_dirs) # We want install_data to default to install_purelib, if it is # not given. if fix_install_data: # We want data to be installed alongside the Python # modules self.install_data = self.install_purelib # Undo the change introduced in Python 2.4 to bdist_wininst # which manipulates the build.build_lib path and adds # a target_version specific ending; we simply override # the value here (rather than in build), since all install_* # commands pick up the .build_lib value from this command # rather than build. if self.distribution.has_ext_modules(): build = self.get_finalized_command('build') if _debug: print ('resetting build_lib from "%s" to "%s"' % (self.build_lib, build.build_platlib)) self.build_lib = build.build_platlib self.dump_dirs('after applying mx_install fixes') def ensure_finalized(self): install.ensure_finalized(self) # Hack needed for bdist_wininst if self.install_data[-5:] == '\\DATA': # Install data into the Python module part self.install_data = self.install_data[:-5] + '\\PURELIB' # # mx Install Data command # class mx_install_data(install_data): """ Rework the install_data command to something more useful. Two data_files formats are supported: * string entries The files (which may include wildcards) are copied to the installation directory using the same relative path. * tuple entries of the form (orig, dest) The files given in orig (which may include wildcards) are copied to the dest directory relative to the installation directory. If dest includes a filename, the file orig is copied to the file dest. Otherwise, the original filename is used and the file copied to the dest directory. """ user_options = install_data.user_options + [ ('build-lib=', 'b', "directory to store built Unix libraries in"), ] def initialize_options(self): self.build_lib = None install_data.initialize_options(self) def finalize_options(self): if self.install_dir is None: installobj = self.distribution.get_command_obj('install') self.install_dir = installobj.install_data if _debug: print 'Installing data files to %s' % self.install_dir self.set_undefined_options('install', ('build_lib', 'build_lib'), ) install_data.finalize_options(self) def run(self): if not self.dry_run: self.mkpath(self.install_dir) data_files = self.get_inputs() if _debug: print 'install_data: data_files=%r' % self.data_files for entry in data_files: if type(entry) == types.StringType: # Unix- to platform-convention conversion entry = convert_to_platform_path(entry) # Names in data_files are now relative to the build # directory, since mx_build_data has copied them there entry = os.path.join(self.build_lib, entry) filenames = glob.glob(entry) for filename in filenames: relative_filename = remove_path_prefix( filename, self.build_lib) dst = os.path.join(self.install_dir, relative_filename) dstdir = os.path.split(dst)[0] if not self.dry_run: self.mkpath(dstdir) outfile = self.copy_file(filename, dst)[0] else: outfile = dst self.outfiles.append(outfile) else: raise ValueError('unsupported data_files item format: %r' % (entry,)) if _debug: print 'install_data: outfiles=%r' % self.outfiles # # mx Install Lib command # class mx_install_lib(install_lib): """ Patch the install_lib to work around a problem where the .get_outputs() method would return filenames like '.pyoo', '.pyco', etc. """ def _bytecode_filenames (self, filenames): """ Create a list of byte-code filenames from the list of filenames. Files in filenames that are not Python source code are ignored. """ bytecode_filenames = [] for py_file in filenames: if py_file[-3] != '.py': continue if self.compile: bytecode_filenames.append(py_file + "c") if self.optimize > 0: bytecode_filenames.append(py_file + "o") return bytecode_filenames # # mx Uninstall command # # Credits are due to Thomas Heller for the idea and the initial code # base for this command (he posted a different version to # distutils-sig@python.org) in 02/2001. # class mx_uninstall(Command): description = "uninstall the package files and directories" user_options = [] def initialize_options(self): pass def finalize_options(self): pass def run(self): # Execute build log.info('determining installation files') log.info('(re)building package') savevalue = self.distribution.dry_run self.distribution.dry_run = 0 self.run_command('build') # Execute install in dry-run mode log.debug('dry-run package install (to determine the installed files)') self.distribution.dry_run = 1 self.run_command('install') self.distribution.dry_run = savevalue build = self.get_finalized_command('build') install = self.get_finalized_command('install') # Remove all installed files log.info('removing installed files') dirs = {} filenames = install.get_outputs() for filename in filenames: if not os.path.isabs(filename): raise DistutilsError,\ 'filename %s from .get_output() not absolute' % \ filename if os.path.isfile(filename): log.info('removing %s' % filename) if not self.dry_run: try: os.remove(filename) except OSError, details: log.warn('could not remove file: %s' % details) dir = os.path.split(filename)[0] if not dirs.has_key(dir): dirs[dir] = 1 if os.path.splitext(filename)[1] == '.py': # Remove byte-code files as well try: os.remove(filename + 'c') except OSError: pass try: os.remove(filename + 'o') except OSError: pass elif os.path.isdir(filename): if not dirs.has_key(dir): dirs[filename] = 1 elif not os.path.splitext(filename)[1] in ('.pyo', '.pyc'): log.warn('skipping removal of %s (not found)' % filename) # Remove the installation directories log.info('removing directories') dirs = dirs.keys() dirs.sort(); dirs.reverse() # sort descending for dir in dirs: # Don't remove directories which are listed on sys.path if dir in sys.path: continue # Check the the directory is empty dir_content = os.listdir(dir) if dir_content: log.info('directory %s is not empty - not removing it' % dir) continue # Remove the directory and warn if this fails log.info('removing directory %s' % dir) if not self.dry_run: try: os.rmdir(dir) except OSError, details: log.warn('could not remove directory: %s' % details) # # mx register command # class mx_register(register): """ Register a package with PyPI. This version enhances the download_url by optionally adding a hash tag to it. The command fetches the current contents of the referenced URL and calculates the hash value from it. """ # Add new option --add-hash-tag user_options = register.user_options + [ ('add-hash-tag', None, 'add a hash tag to the download_url'), ] boolean_options = register.boolean_options + [ 'add-hash-tag', ] def initialize_options(self): self.add_hash_tag = None register.initialize_options(self) def finalize_options(self): if self.add_hash_tag is None: self.add_hash_tag = False register.finalize_options(self) def run(self): if self.add_hash_tag: download_url = self.distribution.metadata.download_url if download_url: download_url = mx_download_url( download_url, 'simple') log.info('updating download_url to %r' % download_url) self.distribution.metadata.download_url = download_url register.run(self) # # mx clean command # class mx_clean(clean): """ Clean up the build directories. This version knows about the build pickle. """ def run(self): if self.all: # Only remove the build pickle, if --all is requested build = self.get_finalized_command('build') build_pickle = build.get_build_pickle_pathname() if os.path.exists(build_pickle): log.info('removing %r' % build_pickle) try: os.remove(build_pickle) except OSError, details: log.warn('could not remove build pickle %s: %s' % (build_pickle, details)) clean.run(self) # # mx sdist command # class mx_sdist(sdist): """ Build a source distribution. This version does not use hard links when preparing the source archive - hard links don't match well with symlinks which we use in our source repositories. """ def make_release_tree(self, base_dir, files): # Prepare release dir self.mkpath(base_dir) self.distribution.metadata.write_pkg_info(base_dir) if not files: log.warn('no files found in release !') return # Create dir structure log.info('preparing release tree in %s...' % base_dir) create_tree(base_dir, files, dry_run=self.dry_run) for file in files: if not os.path.isfile(file): log.warn('%s is not a regular file -- skipping' % file) else: dest = os.path.join(base_dir, file) self.copy_file(file, dest, link=None) # # mx generic binary distribution command # class mx_bdist(bdist): """ Generic binary distribution command. """ def finalize_options(self): # Default to - on all platforms if self.plat_name is None: self.plat_name = '%s-py%s' % (mx_get_platform(), py_version()) bdist.finalize_options(self) # # mx RPM distribution command # class mx_bdist_rpm(bdist_rpm): """ bdist_rpm command which allows passing in distutils options. XXX Note: bdist_rpm no longer works for some reason, probably related to distutils rather than our small modification. """ user_options = bdist_rpm.user_options + [ ('distutils-build-options=', None, 'extra distutils build options to use before the "build" command'), ('distutils-install-options=', None, 'extra distutils install options to use after the "install" command'), ] # Defaults distutils_build_options = None distutils_install_options = None def finalize_options(self): bdist_rpm.finalize_options(self) if self.distutils_build_options is None: self.distutils_build_options = '' if self.distutils_install_options is None: self.distutils_install_options = '' def _make_spec_file(self): # Generate .spec file l = bdist_rpm._make_spec_file(self) # Insert into build command i = l.index('%build') buildcmd = l[i + 1] inspos = l[i + 1].find(' build') if inspos >= 0: l[i + 1] = '%s %s %s' % (buildcmd[:inspos], self.distutils_build_options, buildcmd[inspos:]) else: raise DistutilsError, \ 'could not insert distutils command in RPM build command' # Insert into install command i = l.index('%install') installcmd = l[i + 1] inspos = l[i + 1].find(' install') if inspos >= 0: l[i + 1] = '%s %s %s %s' % (installcmd[:inspos], self.distutils_build_options, installcmd[inspos:], self.distutils_install_options) else: raise DistutilsError, \ 'could not insert distutils command in RPM install command' return l # # mx bdist_wininst command # class mx_bdist_wininst(bdist_wininst): """ We want bdist_wininst to include the Python version number even for pure Python distribution - in case we don't include the Python source code. """ def finalize_options(self): bdist_wininst.finalize_options(self) # Force a target version if without_source was used for # build_py if not self.target_version: build_py = self.get_finalized_command('build_py') if build_py.without_source: self.target_version = py_version(unicode_aware=0) # # mx in-place binary distribution command # class mx_bdist_inplace(bdist_dumb): """ Build an in-place binary distribution. """ # Path prefix to use in the distribution (all files will be placed # under this prefix) dist_prefix = '' user_options = bdist_dumb.user_options + [ ('dist-prefix=', None, 'path prefix the binary distribution with'), ] def finalize_options(self): # Default to ZIP as format on all platforms if self.format is None: self.format = 'zip' bdist_dumb.finalize_options(self) # Hack to reuse bdist_dumb for our purposes; .run() calls # reinitialize_command() with 'install' as command. def reinitialize_command(self, command, reinit_subcommands=0): cmdobj = bdist_dumb.reinitialize_command(self, command, reinit_subcommands) if command == 'install': cmdobj.install_lib = self.dist_prefix cmdobj.install_data = self.dist_prefix return cmdobj # # mx Zope binary distribution command # class mx_bdist_zope(mx_bdist_inplace): """ Build binary Zope product distribution. """ # Path prefix to use in the distribution (all files will be placed # under this prefix); for Zope instances, all code can be placed # into the Zope instance directory since this is on sys.path when # Zope starts dist_prefix = '' # # mx bdist_prebuilt command # class mx_bdist_prebuilt(mx_sdist): """ Build a pre-built distribution. The idea is to ship a version of the package that is already built, but not yet packaged or installed. This makes it possible to do that last step on the clients target machine, giving much more flexibility in the way software is installed. """ # Skip the build process ? skip_build = None # Platform name to use plat_name = None # Keep data source files include_data_source_files = None # Files to exclude from the prebuilt archives exclude_files = None # File name version # # Version 1 format (not easy_install compatible): # product_name + '-' + version + '.' + platform + '-' + python_ucs + '.prebuilt.zip' # # Version 2 format (easy_install compatible): # product_name + '-' + version + '-' + python_ucs + '-' + platform + '-prebuilt.zip' # filename_version = 2 user_options = mx_sdist.user_options + [ ('plat-name=', None, 'platform name to use'), ('skip-build', None, 'skip build and reuse the existing build files'), ('include-data-source-files', None, 'include the data source files ' 'in addition to the build versions'), ('exclude-files', None, 'exclude files matching the given RE patterns ' '(separated by whitespace)'), ] def finalize_options(self): if self.plat_name is None: build = self.get_finalized_command('build') if (not build.has_ext_modules() and not build.has_c_libraries() and not build.has_unixlibs() and not sys.platform.startswith('win')): # We can build a platform independent distribution; # note that we cannot build platform independent # distributions on Windows, since all path names will # use the Windows os.sep which doesn't work on Unix # platforms. self.plat_name = 'py%s' % py_version(unicode_aware=0) else: # Include the platform name if self.filename_version == 1: self.plat_name = '%s-py%s' % ( mx_get_platform(), py_version()) elif self.filename_version == 2: self.plat_name = 'py%s-%s' % ( py_version(), mx_get_platform()) else: raise TypeError('unsupported .filename_version') # Skip the build step ? if self.skip_build is None: self.skip_build = 0 # Include data source files ? if self.include_data_source_files is None: self.include_data_source_files = 0 # Exclude files ? if self.exclude_files is None: self.exclude_files = [] else: self.exclude_files = [re.compile(pattern.strip()) for pattern in self.exclude_files.split()] # Default to ZIP files for all platforms if self.formats is None: self.formats = ['zip'] # Call the base method mx_sdist.finalize_options(self) def get_file_list(self): log.info('building list of files to include in the pre-built distribution') if not os.path.isfile(self.manifest): log.error('manifest missing: ' 'cannot create pre-built distribution') return self.read_manifest() # Prepare a list of source files needed for install_data data_source_files = [] for entry in self.distribution.data_files: if type(entry) is types.TupleType: (source_file, dest_file) = entry else: source_file = entry source_file = convert_to_platform_path(source_file) data_source_files.append(source_file) if _debug: print 'found these data source files: %r' % data_source_files # Remove most subdirs from the MANIFEST file list files = [] for path in self.filelist.files: # Note: the MANIFEST file list can use both os.sep and the # distutils dir separator as basis # Filter files which are not to be included in the archive; # we use the distutils path for the filtering distutils_path = convert_to_distutils_path(path) skip_path = False for pattern_re in self.exclude_files: if pattern_re.match(distutils_path) is not None: skip_path = True break if skip_path: if _debug: print ' skipping excluded file: %s' % path continue # Now filter the remaining files; we'll convert the path # the platform version for this path = convert_to_platform_path(path) if os.sep in path: # Subdir entry path_components = path.split(os.sep) if path_components[0].lower().startswith('doc'): # Top-level documentation directories are always included if _debug: print ' found documentation file: %s' % path elif (self.include_data_source_files and path in data_source_files): # Data source files can optionally be included as # well; these will already be in the build area # due to mx_build_data if _debug: print ' found data source file: %s' % path else: # Skip all other files in subdirectories if _debug: print ' skipping file: %s' % path continue elif _debug: print ' found top-level file: %s' % path log.info('adding %s' % path) files.append(path) self.filelist.files = files # Add build files build = self.get_finalized_command('build') self.filelist.files.extend(build.get_outputs()) if _debug: print 'pre-built files:', repr(self.filelist.files) def run(self): if not self.skip_build: self.run_command('build') mx_sdist.run(self) def make_distribution(self): if self.filename_version == 1: # Version 1 format (not easy_install compatible) archive_name = '%s.%s.prebuilt' % ( self.distribution.get_fullname(), self.plat_name) elif self.filename_version == 2: # Version 2 format (easy_install compatible) archive_name = '%s-%s-prebuilt' % ( self.distribution.get_fullname(), self.plat_name) else: raise TypeError('unsupported .filename_version') archive_path = os.path.join(self.dist_dir, archive_name) # Create the release tree self.make_release_tree(archive_name, self.filelist.files) # Add pre-built marker file containing the path to the build # pickle with the build information prebuilt_pathname = os.path.join(archive_name, PREBUILT_MARKER) prebuilt_file = open(prebuilt_pathname, 'w') build = self.get_finalized_command('build') prebuilt_file.write(build.get_build_pickle_pathname()) prebuilt_file.close() # Create the requested archives archive_files = [] for fmt in self.formats: file = self.make_archive(archive_path, fmt, base_dir=archive_name) archive_files.append(file) # XXX Not sure what .dist_files is good for... #self.distribution.dist_files.append(('sdist', '', file)) self.archive_files = archive_files # Remove the release tree if not self.keep_temp: remove_tree(archive_name, dry_run=self.dry_run) # # mx egg binary distribution command # class mx_bdist_egg(bdist_dumb): """ Build an egg binary distribution. This is essentially a bdist_dumb ZIP archive with a special name and an .egg extension. In addition to the distribution files, it also contains an EGG-INFO directory with some additional meta-information about the package. """ # Build a Unicode-aware egg ? easy_install does not support having # UCS2/UCS4 markers in the filename, so we place the egg files # into ucs2/ucs4 subdirectories of the --dist-dir if this option # is set. Default is not to use these subdirs. unicode_aware = None user_options = [ ('plat-name=', 'p', 'platform name to embed in generated filenames ' '(default: %s)' % mx_get_platform()), ('skip-build', None, 'skip rebuilding everything (for testing/debugging)'), ('dist-dir=', 'd', 'directory where to put the .egg file'), ('unicode-aware', None, 'put eggs into ucs2/ucs4 subdirectories of --dist-dir'), ] def finalize_options(self): if self.plat_name is None: build = self.get_finalized_command('build') if (not build.has_ext_modules() and not build.has_c_libraries() and not build.has_unixlibs()): # We can build a platform independent distribution self.plat_name = '' else: # Include the platform name self.plat_name = mx_get_platform() if self.unicode_aware is None: self.unicode_aware = 0 bdist_dumb.finalize_options(self) if self.unicode_aware: # Put the eggs into separate dist_dir subdirectories in # case unicode aware eggs are to be built unicode_subdir = py_unicode_build() if unicode_subdir: self.dist_dir = os.path.join(self.dist_dir, unicode_subdir) def write_egg_info_file(self, egg_info_dir, filename, lines=()): f = open(os.path.join(egg_info_dir, filename), 'wb') f.write('\n'.join(lines)) if lines: f.write('\n') f.close() def run(self): if not self.skip_build: self.run_command('build') # Install the package in the .bdist_dir install = self.reinitialize_command('install', reinit_subcommands=1) install.root = self.bdist_dir install.skip_build = self.skip_build install.warn_dir = 0 # Use an in-place install without prefix install.install_lib = '' install.install_data = '' log.info("installing to %s" % self.bdist_dir) self.run_command('install') # Remove .egg-info file if python_version >= '2.5': # install_egg_info was added in Python 2.5 distutils install_egg_info = self.get_finalized_command('install_egg_info') for filename in install_egg_info.outputs: execute(os.remove, (filename,), "removing %s" % filename, verbose=self.verbose, dry_run=self.dry_run) install_egg_info.output = [] # Create EGG-INFO dir in .bdist_dir egg_info_dir = os.path.join(self.bdist_dir, 'EGG-INFO') self.mkpath(egg_info_dir) if not self.dry_run: # add PKG-INFO file self.distribution.metadata.write_pkg_info(egg_info_dir) # add not-zip-safe marker to force unzipping the .egg file self.write_egg_info_file(egg_info_dir, 'not-zip-safe') # add requires.txt if python_version >= '2.5': self.write_egg_info_file(egg_info_dir, 'requires.txt', self.distribution.metadata.get_requires()) # add namespace_packages.txt self.write_egg_info_file(egg_info_dir, 'namespace_packages.txt', self.distribution.namespace_packages) # add top_level.txt top_level_modules = find_python_modules(self.bdist_dir) for namespace_package in self.distribution.namespace_packages: if '.' in namespace_package: namespace_package = namespace_package.split('.')[0] if namespace_package not in top_level_modules: top_level_modules[namespace_package] = 'namespace' self.write_egg_info_file(egg_info_dir, 'top_level.txt', top_level_modules.keys()) # add dependency_links.txt self.write_egg_info_file(egg_info_dir, 'dependency_links.txt', self.distribution.dependency_links) # Add namespace module __init__.py files for namespace_package in self.distribution.namespace_packages: package_dir = os.path.join(self.bdist_dir, namespace_package.replace('.', os.sep)) # We overwrite any existing files, if necessary init_file = os.path.join(package_dir, '__init__.py') if os.path.exists(init_file): log.info('overwriting %s with setuptools namespace version' % init_file) else: log.info('adding %s with setuptools namespace marker' % init_file) open(init_file, 'w').write(SETUPTOOLS_NAMESPACE_INIT) # Remove any existing byte code files for bytecode_suffix in ('c', 'o'): filename = init_file + bytecode_suffix if os.path.exists(filename): execute(os.remove, (filename,), "removing %s" % filename, verbose=self.verbose) # Build egg file from .bdist_dir egg_name = self.distribution.metadata.get_name().replace('-', '_') if self.plat_name: unicode_aware = False # self.unicode_aware else: unicode_aware = False archive_basename = "%s-%s-py%s" % ( egg_name, self.distribution.metadata.get_version(), py_version(unicode_aware=unicode_aware)) if self.plat_name: archive_basename += '-' + self.plat_name archive_basepath = os.path.join(self.dist_dir, archive_basename) archive_root = self.bdist_dir zip_filename = self.make_archive(archive_basepath, format='zip', root_dir=archive_root) assert zip_filename.endswith('.zip') egg_filename = zip_filename[:-4] + '.egg' if os.path.exists(egg_filename): execute(os.remove, (egg_filename,), "removing %s" % egg_filename, verbose=self.verbose, dry_run=self.dry_run) self.move_file(zip_filename, egg_filename) # Add to distribution files if python_version >= '2.5': # This features was added in Python 2.5 distutils if self.distribution.has_ext_modules(): pyversion = get_python_version() else: pyversion = 'any' self.distribution.dist_files.append(('mx_bdist_egg', pyversion, egg_filename)) # Cleanup if not self.keep_temp: remove_tree(self.bdist_dir, dry_run=self.dry_run) # # mx MSI distribution command # if bdist_msi is not None: class mx_bdist_msi(bdist_msi): """ Build an MSI installer. This version allows to customize the product name used for the installer. """ # Product name to use for the installer (this is the name that # gets displayed in the dialogs and on the installed software # list) product_name = None # Product title to use for the installer title = None # Platform name to use in the installer filename (new in Python 2.6) plat_name = None user_options = bdist_msi.user_options + [ ('product-name=', None, 'product name to use for the installer'), ('title=', None, 'product title to use for the installer'), ] def finalize_options(self): # Force a target version if without_source was used for # build_py; this is needed since bdist_msi start to # default to installing to all available Python versions, # if no .target_version is given for Python 2.7+ build_py = self.get_finalized_command('build_py') if build_py.without_source: self.target_version = py_version(unicode_aware=0) bdist_msi.finalize_options(self) if self.title is None: self.title = self.distribution.get_fullname() # Inherit the .plat_name from the bdist command self.set_undefined_options('bdist', ('plat_name', 'plat_name'), ) # XXX This is basically a copy of bdist_msi.run(), restructured # a bit. def run_install(self): if not self.skip_build: self.run_command('build') install = self.reinitialize_command('install', reinit_subcommands=1) install.prefix = self.bdist_dir install.skip_build = self.skip_build install.warn_dir = 0 install_lib = self.reinitialize_command('install_lib') # we do not want to include pyc or pyo files install_lib.compile = 0 install_lib.optimize = 0 if self.distribution.has_ext_modules(): # If we are building an installer for a Python version other # than the one we are currently running, then we need to ensure # our build_lib reflects the other Python version rather than ours. # Note that for target_version!=sys.version, we must have skipped the # build step, so there is no issue with enforcing the build of this # version. target_version = self.target_version if not target_version: assert self.skip_build, "Should have already checked this" target_version = python_version plat_specifier = ".%s-%s" % (self.plat_name, target_version) build = self.get_finalized_command('build') build.build_lib = os.path.join(build.build_base, 'lib' + plat_specifier) log.info("installing to %s", self.bdist_dir) install.ensure_finalized() # avoid warning of 'install_lib' about installing # into a directory not in sys.path sys.path.insert(0, os.path.join(self.bdist_dir, 'PURELIB')) install.run() del sys.path[0] def get_product_version(self): # ProductVersion must be strictly numeric version = self.distribution.metadata.get_version() try: return '%d.%d.%d' % StrictVersion(version).version except ValueError: # Remove any pre-release or snapshot parts try: verstuple = parse_mx_version(version) except ValueError: raise DistutilsError( 'package version must be formatted with mx_version()') major, minor, patch = verstuple[:3] new_version = mx_version(major, minor, patch) log.warn( "bdist_msi requires strictly numeric " "version numbers: " "using %r for MSI installer, instead of %r" % (new_version, version)) return new_version def get_product_name(self): # User defined product name if self.product_name is not None: product_name = self.product_name else: # Emulate bdist_msi default behavior, but make the # product title changeable. # # Prefix ProductName with Python x.y, so that # it sorts together with the other Python packages # in Add-Remove-Programs (APR) if self.target_version: product_name = ( 'Python %s %s %s' % ( self.target_version, self.title, self.distribution.metadata.get_version())) else: # Group packages under "Python 2.x" if no # .target_version is given product_name = ( 'Python 2.x %s %s' % ( self.title, self.distribution.metadata.get_version())) log.info('using %r as product name.' % product_name) return product_name def run (self): self.run_install() # Create the installer self.mkpath(self.dist_dir) fullname = self.distribution.get_fullname() installer_name = self.get_installer_filename(fullname) log.info('creating MSI installer %s' % installer_name) installer_name = os.path.abspath(installer_name) if os.path.exists(installer_name): os.unlink(installer_name) metadata = self.distribution.metadata author = metadata.author if not author: author = metadata.maintainer if not author: author = "UNKNOWN" version = metadata.get_version() product_version = self.get_product_version() product_name = self.get_product_name() self.db = msilib.init_database( installer_name, msilib.schema, product_name, msilib.gen_uuid(), product_version, author) # Add tables msilib.add_tables(self.db, msilib.sequence) # Add meta-data props = [('DistVersion', version)] email = metadata.author_email or metadata.maintainer_email if email: props.append(("ARPCONTACT", email)) if metadata.url: props.append(("ARPURLINFOABOUT", metadata.url)) if props: msilib.add_data(self.db, 'Property', props) # Add sections self.add_find_python() self.add_files() self.add_scripts() self.add_ui() # Write the file and append to distribution's .dist_files self.db.Commit() if hasattr(self.distribution, 'dist_files'): self.distribution.dist_files.append( ('bdist_msi', self.target_version, fullname)) # Cleanup if not self.keep_temp: remove_tree(self.bdist_dir, dry_run=self.dry_run) def get_installer_filename(self, fullname): return os.path.join(self.dist_dir, "%s.%s.msi" % (fullname, self.plat_name)) else: class mx_bdist_msi: pass if 0: # Hack to allow quick debugging of the mx_bdist_msi command if os.name == 'nt' and bdist_msi is None: raise TypeError('just testing...') ### if setuptools is not None: from setuptools.command import egg_info from distutils.filelist import FileList class mx_egg_info(egg_info.egg_info): def find_sources(self): """ This method is used to generate the SOURCES.txt manifest file in the EGG-INFO directory. Since there's no clear use of that file and it prevents building eggs from prebuilt binaries, we'll just return a list with the EGG-INFO files. """ self.filelist = FileList() egg_info = self.get_finalized_command('egg_info') self.filelist.include_pattern('*', prefix=egg_info.egg_info) else: mx_egg_info = None ### Helpers to allow rebasing packages within setup.py files def rebase_packages(packages, new_base_package, filter=None): rebased_packages = [] for package in packages: # Apply filter (only rebase packages for which the filter # returns true) if (filter is not None and not filter(package)): rebased_packages.append(package) else: # Rebase the package rebased_packages.append(new_base_package + '.' + package) return rebased_packages def rebase_files(files, new_base_dir, filter=None): rebased_files = [] for file in files: # Apply filter (only rebase packages for which the filter # returns true) if (filter is not None and not filter(file)): rebased_files.append(file) else: # Rebase the file rebased_files.append(os.path.join(new_base_dir, file)) return rebased_files def rebase_extensions(extensions, new_base_package, new_base_dir, filter_packages=None, filter_files=None): rebased_extensions = [] for ext in extensions: # Apply package filter to the extension name if (filter_packages is not None and not filter_packages(ext)): rebased_extensions.append(ext) continue # Create a shallow copy new_ext = copy.copy(ext) rebased_extensions.append(new_ext) # Standard distutils Extension new_ext.name = new_base_package + '.' + ext.name new_ext.sources = rebase_files( ext.sources, new_base_dir, filter_files) new_ext.include_dirs = rebase_files( ext.include_dirs, new_base_dir, filter_files) new_ext.library_dirs = rebase_files( ext.library_dirs, new_base_dir, filter_files) new_ext.runtime_library_dirs = rebase_files( ext.runtime_library_dirs, new_base_dir, filter_files) if not isinstance(ext, mx_Extension): continue # mx_Extension new_ext.data_files = rebase_files( ext.data_files, new_base_dir, filter_files) new_ext.packages = rebase_packages( ext.packages, new_base_package, filter_packages) if 0: # optional_libraries will not need any rebasing, since # the header files rely on the standard search path new_optional_libraries = [] for (libname, header_files) in ext.optional_libraries: new_optional_libraries.append( (libname, rebase_files(header_files, new_base_dir, filter_files))) new_ext.optional_libraries = new_optional_libraries new_needed_includes = [] for (filename, dirs, pattern) in ext.needed_includes: new_needed_includes.append( (filename, rebase_files(dirs, new_base_dir, filter_files), pattern)) new_ext.needed_includes = new_needed_includes new_needed_libraries = [] for (filename, dirs, pattern) in ext.needed_libraries: new_needed_libraries.append( (filename, rebase_files(dirs, new_base_dir, filter_files), pattern)) new_ext.needed_libraries = new_needed_libraries return rebased_extensions ### def run_setup(configurations): """ Run distutils setup. The parameters passed to setup() are extracted from the list of modules, classes or instances given in configurations. Names with leading underscore are removed from the parameters. Parameters which are not strings, lists or tuples are removed as well. Configurations which occur later in the configurations list override settings of configurations earlier in the list. """ # Build parameter dictionary kws = { # Defaults for distutils and our add-ons #'version': '0.0.0', #'name': '', #'description': '', 'license': ('(c) eGenix.com Sofware, Skills and Services GmbH, ' 'All Rights Reserved.'), 'author': 'eGenix.com Software, Skills and Services GmbH', 'author_email': 'info@egenix.com', 'maintainer': 'eGenix.com Software, Skills and Services GmbH', 'maintainer_email': 'info@egenix.com', 'url': 'http://www.egenix.com/', 'download_url': 'http://www.egenix.com/', 'platforms': [], 'classifiers': [], 'packages': [], 'ext_modules': [], 'data_files': [], 'libraries': [], } if setuptools is not None: # Add defaults for setuptools kws.update({ # Default to not install eggs as ZIP archives 'zip_safe': 0, }) for configuration in configurations: kws.update(vars(configuration)) # Type and name checking for name, value in kws.items(): if (name[:1] == '_' or name in UNSUPPORTED_SETUP_KEYWORDS): del kws[name] continue if not isinstance(value, ALLOWED_SETUP_TYPES): if isinstance(value, types.UnicodeType): # Convert Unicode values to UTF-8 encoded strings kws[name] = value.encode('utf-8') else: del kws[name] continue #if type(value) is types.FunctionType: # kws[name] = value() # Add setup extensions kws['distclass'] = mx_Distribution extensions = {'build': mx_build, 'build_unixlib': mx_build_unixlib, 'mx_autoconf': mx_autoconf, 'build_ext': mx_build_ext, 'build_clib': mx_build_clib, 'build_py': mx_build_py, 'build_data': mx_build_data, 'install': mx_install, 'install_data': mx_install_data, 'install_lib': mx_install_lib, 'uninstall': mx_uninstall, 'register': mx_register, 'bdist': mx_bdist, 'bdist_rpm': mx_bdist_rpm, 'bdist_zope': mx_bdist_zope, 'bdist_inplace': mx_bdist_inplace, 'bdist_wininst': mx_bdist_wininst, 'bdist_msi': mx_bdist_msi, 'bdist_prebuilt': mx_bdist_prebuilt, 'mx_bdist_egg': mx_bdist_egg, 'sdist': mx_sdist, 'clean': mx_clean, } if bdist_ppm is not None: extensions['bdist_ppm'] = bdist_ppm.bdist_ppm if GenPPD is not None: extensions['GenPPD'] = GenPPD.GenPPD if mx_egg_info is not None: extensions['egg_info'] = mx_egg_info if setuptools is None: extensions['bdist_egg'] = mx_bdist_egg kws['cmdclass'] = extensions # Invoke distutils setup apply(setup, (), kws) egenix-mx-base-3.2.7/setup.cfg0000664000175000017500000000166711151552266016051 0ustar lemburglemburg# # Distutils Setup Configuration for the mx Extensions Base Distribution # # # Install step # [install] compile = 1 optimize = 1 # # Source dist creation # [sdist] manifest = MANIFEST use_defaults = 0 #keep_tree = 1 formats=zip # # RPM Creation # [bdist_rpm] release = 1 packager = Marc-Andre Lemburg vendor = eGenix.com Software GmbH, Langenfeld, Germany # Files listed here must appear in the MANIFEST: doc_files = README mx/DateTime/Doc mx/DateTime/LICENSE mx/DateTime/COPYRIGHT mx/Proxy/Doc mx/Queue/Doc mx/Stack/Doc mx/TextTools/Doc mx/Tools/Doc mx/BeeBase/Doc mx/URL/Doc mx/UID/Doc # # Windows installers # [bdist_wininst] bitmap = installer.bmp title = eGenix mx Base Distribution no_target_compile = 1 no_target_optimize = 1 [bdist_msi] title = eGenix mx Base Distribution #no_target_compile = 1 #no_target_optimize = 1 egenix-mx-base-3.2.7/setup.py0000775000175000017500000000040210761126144015725 0ustar lemburglemburg#!/usr/bin/env python """ Distutils Setup File for the mx Extensions BASE distribution. """ # # Load configuration(s) # import egenix_mx_base configurations = (egenix_mx_base,) # # Run distutils setup... # import mxSetup mxSetup.run_setup(configurations) egenix-mx-base-3.2.7/wininst.bat0000775000175000017500000001000211547564323016403 0ustar lemburglemburg@echo off set ORIGPATH=%PATH% rem Disable creating debug builds ? rem set NODEBUG=1 rem Note: We no longer support Python 1.5.2 - 2.3 ! goto python24 rem =============================================================== rem Python 1.5-2.3 need VisualStudio 6 :python23 call D:\VisualStudio6\Bin\vcvars32.bat set VSPATH=%PATH% echo -------------------------------------------------------------- echo Building for Python 1.5.2... set PATH=d:\Python152;%VSPATH% python setup.py clean --all python setup.py bdist_wininst -c -o echo -------------------------------------------------------------- echo Building for Python 2.0... set PATH=d:\Python20;%VSPATH% python setup.py clean --all python setup.py bdist_wininst -c -o echo -------------------------------------------------------------- echo Building for Python 2.1... set PATH=d:\Python21;%VSPATH% python setup.py clean --all python setup.py bdist_wininst -c -o echo -------------------------------------------------------------- echo Building for Python 2.2... set PATH=d:\Python22;%VSPATH% python setup.py clean --all python setup.py bdist_wininst -c -o echo -------------------------------------------------------------- echo Building for Python 2.3... set PATH=d:\Python23;%VSPATH% python setup.py clean --all python setup.py bdist_wininst -c -o python setup.py bdist_prebuilt rem =============================================================== rem Python 2.4 and up need VisualStudio 7.1 :python24 set PATH=%ORIGPATH% call d:\VisualStudio7.1\Common7\Tools\vsvars32.bat set VSPATH=%PATH% echo -------------------------------------------------------------- echo Building for Python 2.4... set PATH=d:\Python24;%VSPATH% python setup.py clean --all python setup.py bdist_wininst -c -o python setup.py bdist_prebuilt if #%NODEBUG%# == #1# goto skip_python24_debug echo -------------------------------------------------------------- echo Building for Python 2.4 (debug version)... set PATH=d:\Python24;%VSPATH% python setup.py clean --all python setup.py mx_autoconf --enable-debug bdist_wininst -c -o --dist-dir=dist/debug/ :skip_python24_debug echo -------------------------------------------------------------- echo Building for Python 2.5... set PATH=d:\Python25;%VSPATH% python setup.py clean --all python setup.py bdist_msi -c -o python setup.py bdist_prebuilt if #%NODEBUG%# == #1# goto skip_python25_debug echo -------------------------------------------------------------- echo Building for Python 2.5 (debug version)... set PATH=d:\Python25;%VSPATH% python setup.py clean --all python setup.py mx_autoconf --enable-debug bdist_msi -c -o --dist-dir=dist/debug/ :skip_python25_debug rem =============================================================== rem Python 2.6 and up need VisualStudio 9.0 :python26 set PATH=%ORIGPATH% call d:\VisualStudio9.0\Common7\Tools\vsvars32.bat set VSPATH=%PATH% echo -------------------------------------------------------------- echo Building for Python 2.6... set PATH=d:\Python26;%VSPATH% python setup.py clean --all python setup.py bdist_msi -c -o python setup.py bdist_prebuilt if #%NODEBUG%# == #1# goto skip_python26_debug echo -------------------------------------------------------------- echo Building for Python 2.6 (debug version)... set PATH=d:\Python26;%VSPATH% python setup.py clean --all python setup.py mx_autoconf --enable-debug bdist_msi -c -o --dist-dir=dist/debug/ :skip_python26_debug echo -------------------------------------------------------------- echo Building for Python 2.7... set PATH=d:\Python27;%VSPATH% python setup.py clean --all python setup.py bdist_msi -c -o python setup.py bdist_prebuilt if #%NODEBUG%# == #1# goto skip_python27_debug echo -------------------------------------------------------------- echo Building for Python 2.7 (debug version)... set PATH=d:\Python27;%VSPATH% python setup.py clean --all python setup.py mx_autoconf --enable-debug bdist_msi -c -o --dist-dir=dist/debug/ :skip_python27_debug egenix-mx-base-3.2.7/wininst64.bat0000664000175000017500000000275211553260641016560 0ustar lemburglemburg@echo off set ORIGPATH=%PATH% rem Disable creating debug builds ? rem set NODEBUG=1 rem NOTE: We only support Python 2.6 and later on Windows x64 platforms ! rem =============================================================== rem Python 2.6 and up need VisualStudio 9.0 :python26 set PATH=%ORIGPATH% call d:\VisualStudio9.0\VC\vcvarsall.bat amd64 set VSPATH=%PATH% echo -------------------------------------------------------------- echo Building for Python 2.6... set PATH=d:\Python26;%VSPATH% python setup.py clean --all python setup.py bdist_msi -c -o python setup.py bdist_prebuilt if #%NODEBUG%# == #1# goto skip_python26_debug echo -------------------------------------------------------------- echo Building for Python 2.6 (debug version)... set PATH=d:\Python26;%VSPATH% python setup.py clean --all python setup.py mx_autoconf --enable-debug bdist_msi -c -o --dist-dir=dist/debug/ :skip_python26_debug echo -------------------------------------------------------------- echo Building for Python 2.7... set PATH=d:\Python27;%VSPATH% python setup.py clean --all python setup.py bdist_msi -c -o python setup.py bdist_prebuilt if #%NODEBUG%# == #1# goto skip_python27_debug echo -------------------------------------------------------------- echo Building for Python 2.7 (debug version)... set PATH=d:\Python27;%VSPATH% python setup.py clean --all python setup.py mx_autoconf --enable-debug bdist_msi -c -o --dist-dir=dist/debug/ :skip_python27_debug egenix-mx-base-3.2.7/MANIFEST0000644000175000017500000002055312251446113015345 0ustar lemburglemburgCOPYRIGHT LICENSE README bdist_egg.bat bdist_egg64.bat bdist_zope.bat egenix_mx_base.py installer.bmp mx/BeeBase/BeeBase.py mx/BeeBase/BeeDict.py mx/BeeBase/BeeIndex.py mx/BeeBase/BeeStorage.py mx/BeeBase/COPYRIGHT mx/BeeBase/Cache.py mx/BeeBase/Doc/mxBeeBase.pdf mx/BeeBase/ExitFunctions.py mx/BeeBase/FileLock.py mx/BeeBase/LICENSE mx/BeeBase/Makefile.pkg mx/BeeBase/README mx/BeeBase/__init__.py mx/BeeBase/mxBeeBase/COPYRIGHT mx/BeeBase/mxBeeBase/LICENSE mx/BeeBase/mxBeeBase/Makefile.pre.in mx/BeeBase/mxBeeBase/Setup.in mx/BeeBase/mxBeeBase/__init__.py mx/BeeBase/mxBeeBase/btr.c mx/BeeBase/mxBeeBase/btr.h mx/BeeBase/mxBeeBase/calc-sectorsize.py mx/BeeBase/mxBeeBase/ld_so_aix mx/BeeBase/mxBeeBase/makexp_aix mx/BeeBase/mxBeeBase/mx.h mx/BeeBase/mxBeeBase/mxBeeBase.c mx/BeeBase/mxBeeBase/mxBeeBase.def mx/BeeBase/mxBeeBase/mxBeeBase.h mx/BeeBase/mxBeeBase/mxBeeBase.i mx/BeeBase/mxBeeBase/mxh.h mx/BeeBase/mxBeeBase/mxpyapi.h mx/BeeBase/mxBeeBase/mxstdlib.h mx/BeeBase/mxBeeBase/test.py mx/BeeBase/mxBeeBase/testernesto.py mx/BeeBase/mxBeeBase/testjohn.py mx/BeeBase/showBeeDict.py mx/COPYRIGHT mx/DateTime/ARPA.py mx/DateTime/COPYRIGHT mx/DateTime/DateTime.py mx/DateTime/Doc/mxDateTime.pdf mx/DateTime/Examples/AtomicClock.py mx/DateTime/Examples/CommandLine.py mx/DateTime/Examples/Y2000.py mx/DateTime/Examples/__init__.py mx/DateTime/Examples/alarm.py mx/DateTime/Examples/lifespan.py mx/DateTime/Examples/numdate.py mx/DateTime/Feasts.py mx/DateTime/ISO.py mx/DateTime/LICENSE mx/DateTime/LazyModule.py mx/DateTime/Locale.py mx/DateTime/Makefile.pkg mx/DateTime/NIST.py mx/DateTime/ODMG.py mx/DateTime/Parser.py mx/DateTime/README mx/DateTime/Timezone.py mx/DateTime/__init__.py mx/DateTime/mxDateTime/COPYRIGHT mx/DateTime/mxDateTime/LICENSE mx/DateTime/mxDateTime/Makefile.pre.in mx/DateTime/mxDateTime/Setup.in mx/DateTime/mxDateTime/W95.bat mx/DateTime/mxDateTime/__init__.py mx/DateTime/mxDateTime/config_mxdatetime.txt mx/DateTime/mxDateTime/ld_so_aix mx/DateTime/mxDateTime/makexp_aix mx/DateTime/mxDateTime/mx.h mx/DateTime/mxDateTime/mxDateTime.c mx/DateTime/mxDateTime/mxDateTime.def mx/DateTime/mxDateTime/mxDateTime.h mx/DateTime/mxDateTime/mxDateTime.sit.hqx mx/DateTime/mxDateTime/mxDateTime_Python.py mx/DateTime/mxDateTime/mxh.h mx/DateTime/mxDateTime/mxpyapi.h mx/DateTime/mxDateTime/mxstdlib.h mx/DateTime/mxDateTime/test.py mx/DateTime/mxDateTime/testabsdatetime.py mx/DateTime/mxDateTime/testcmp.py mx/DateTime/mxDateTime/testcoerce.py mx/DateTime/mxDateTime/testcomdates.py mx/DateTime/mxDateTime/testnow.py mx/DateTime/mxDateTime/testpydatetime.py mx/DateTime/mxDateTime/testpytimedelta.py mx/DateTime/mxDateTime/testrichard.py mx/DateTime/mxDateTime/testroundoff.py mx/DateTime/mxDateTime/testslotops.py mx/DateTime/mxDateTime/teststrftime.py mx/DateTime/mxDateTime/testsubclassing.py mx/DateTime/mxDateTime/testticks.py mx/DateTime/mxDateTime/vms_build_mxdatetime.com mx/DateTime/mxDateTime/vms_config_mxdatetime.txt mx/DateTime/mxDateTime/win32mk.bat mx/DateTime/timegm.py mx/LICENSE mx/Log.py mx/Misc/COPYRIGHT mx/Misc/CSV.py mx/Misc/Cache.py mx/Misc/CommandLine.py mx/Misc/ConfigFile.py mx/Misc/Cookie.py mx/Misc/Daemon.py mx/Misc/ExitFunctions.py mx/Misc/FileLock.py mx/Misc/LICENSE mx/Misc/LazyModule.py mx/Misc/Namespace.py mx/Misc/OrderedMapping.py mx/Misc/PackageTools.py mx/Misc/__init__.py mx/NewBuiltins.py mx/Proxy/COPYRIGHT mx/Proxy/Doc/mxProxy.pdf mx/Proxy/Examples/prototype.py mx/Proxy/LICENSE mx/Proxy/Makefile.pkg mx/Proxy/Proxy.py mx/Proxy/README mx/Proxy/__init__.py mx/Proxy/mxProxy/COPYRIGHT mx/Proxy/mxProxy/LICENSE mx/Proxy/mxProxy/Makefile.pre.in mx/Proxy/mxProxy/Setup.in mx/Proxy/mxProxy/__init__.py mx/Proxy/mxProxy/ld_so_aix mx/Proxy/mxProxy/makexp_aix mx/Proxy/mxProxy/mx.h mx/Proxy/mxProxy/mxProxy.c mx/Proxy/mxProxy/mxProxy.def mx/Proxy/mxProxy/mxProxy.h mx/Proxy/mxProxy/mxh.h mx/Proxy/mxProxy/mxpyapi.h mx/Proxy/mxProxy/mxstdlib.h mx/Proxy/mxProxy/test.py mx/Proxy/mxProxy/testvlad.py mx/Proxy/mxProxy/weakreftest.py mx/Queue/COPYRIGHT mx/Queue/Doc/mxQueue.pdf mx/Queue/LICENSE mx/Queue/Makefile.pkg mx/Queue/README mx/Queue/UserQueue.py mx/Queue/__init__.py mx/Queue/mxQueue/COPYRIGHT mx/Queue/mxQueue/LICENSE mx/Queue/mxQueue/Makefile.pre.in mx/Queue/mxQueue/Setup.in mx/Queue/mxQueue/__init__.py mx/Queue/mxQueue/ld_so_aix mx/Queue/mxQueue/makexp_aix mx/Queue/mxQueue/mx.h mx/Queue/mxQueue/mxQueue.c mx/Queue/mxQueue/mxQueue.def mx/Queue/mxQueue/mxQueue.h mx/Queue/mxQueue/mxh.h mx/Queue/mxQueue/mxpyapi.h mx/Queue/mxQueue/mxstdlib.h mx/Queue/mxQueue/test.py mx/Queue/queuebench.py mx/Stack/COPYRIGHT mx/Stack/Doc/mxStack.html mx/Stack/Doc/mxStack.pdf mx/Stack/LICENSE mx/Stack/Makefile.pkg mx/Stack/README mx/Stack/UserStack.py mx/Stack/__init__.py mx/Stack/mxStack/COPYRIGHT mx/Stack/mxStack/LICENSE mx/Stack/mxStack/Makefile.pre.in mx/Stack/mxStack/Setup.in mx/Stack/mxStack/__init__.py mx/Stack/mxStack/ld_so_aix mx/Stack/mxStack/makexp_aix mx/Stack/mxStack/mx.h mx/Stack/mxStack/mxStack.c mx/Stack/mxStack/mxStack.def mx/Stack/mxStack/mxStack.h mx/Stack/mxStack/mxh.h mx/Stack/mxStack/mxpyapi.h mx/Stack/mxStack/mxstdlib.h mx/Stack/mxStack/test.py mx/Stack/stackbench.py mx/TextTools/COPYRIGHT mx/TextTools/Constants/Sets.py mx/TextTools/Constants/TagTables.py mx/TextTools/Constants/__init__.py mx/TextTools/Doc/mxTextTools.pdf mx/TextTools/Examples/HTML.py mx/TextTools/Examples/Loop.py mx/TextTools/Examples/Python.py mx/TextTools/Examples/RTF.py mx/TextTools/Examples/RegExp.py mx/TextTools/Examples/Tim.py mx/TextTools/Examples/Words.py mx/TextTools/Examples/__init__.py mx/TextTools/Examples/altRTF.py mx/TextTools/Examples/mysplit.py mx/TextTools/Examples/pytag.py mx/TextTools/LICENSE mx/TextTools/Makefile.pkg mx/TextTools/README mx/TextTools/TextTools.py mx/TextTools/__init__.py mx/TextTools/mxTextTools/COPYRIGHT mx/TextTools/mxTextTools/LICENSE mx/TextTools/mxTextTools/Makefile.pre.in mx/TextTools/mxTextTools/Setup.in mx/TextTools/mxTextTools/__init__.py mx/TextTools/mxTextTools/ld_so_aix mx/TextTools/mxTextTools/makexp_aix mx/TextTools/mxTextTools/mx.h mx/TextTools/mxTextTools/mxTextTools.c mx/TextTools/mxTextTools/mxTextTools.def mx/TextTools/mxTextTools/mxTextTools.h mx/TextTools/mxTextTools/mxbmse.c mx/TextTools/mxTextTools/mxbmse.h mx/TextTools/mxTextTools/mxh.h mx/TextTools/mxTextTools/mxpyapi.h mx/TextTools/mxTextTools/mxstdlib.h mx/TextTools/mxTextTools/mxte.c mx/TextTools/mxTextTools/mxte_impl.h mx/TextTools/mxTextTools/test.py mx/TextTools/mxTextTools/testHTML.py mx/TextTools/mxTextTools/testPickleSegFault.py mx/TextTools/mxTextTools/testSegFault.py mx/TextTools/mxTextTools/testkj.py mx/Tools/COPYRIGHT mx/Tools/Doc/mxTools.pdf mx/Tools/Examples/Acquisition.py mx/Tools/Examples/__init__.py mx/Tools/LICENSE mx/Tools/Makefile.pkg mx/Tools/NewBuiltins.py mx/Tools/README mx/Tools/Tools.py mx/Tools/__init__.py mx/Tools/mxTools/COPYRIGHT mx/Tools/mxTools/LICENSE mx/Tools/mxTools/Makefile.pre.in mx/Tools/mxTools/Setup.in mx/Tools/mxTools/__init__.py mx/Tools/mxTools/bench1.py mx/Tools/mxTools/bench2.py mx/Tools/mxTools/hack.py mx/Tools/mxTools/ld_so_aix mx/Tools/mxTools/maclibs.sit mx/Tools/mxTools/makexp_aix mx/Tools/mxTools/mx.h mx/Tools/mxTools/mxTools.c mx/Tools/mxTools/mxTools.def mx/Tools/mxTools/mxTools.h mx/Tools/mxTools/mxh.h mx/Tools/mxTools/mxpyapi.h mx/Tools/mxTools/mxstdlib.h mx/Tools/mxTools/test.py mx/Tools/mxTools/test_safecall.py mx/Tools/mxTools/vc5/mxTools.dsp mx/Tools/mxTools/vc5/mxTools.dsw mx/Tools/mxTools/vc5/xmap.dsp mx/Tools/mxTools/vc5/xmap.dsw mx/Tools/mxTools/xmap.c mx/UID/COPYRIGHT mx/UID/Doc/mxUID.pdf mx/UID/LICENSE mx/UID/Makefile.pkg mx/UID/README mx/UID/UID.py mx/UID/__init__.py mx/UID/mxUID/COPYRIGHT mx/UID/mxUID/LICENSE mx/UID/mxUID/Makefile.pre.in mx/UID/mxUID/Setup.in mx/UID/mxUID/__init__.py mx/UID/mxUID/ld_so_aix mx/UID/mxUID/makexp_aix mx/UID/mxUID/mx.h mx/UID/mxUID/mxUID.c mx/UID/mxUID/mxUID.def mx/UID/mxUID/mxUID.h mx/UID/mxUID/mxh.h mx/UID/mxUID/mxpyapi.h mx/UID/mxUID/mxstdlib.h mx/UID/mxUID/test.py mx/URL/COPYRIGHT mx/URL/Doc/mxURL.pdf mx/URL/LICENSE mx/URL/LazyModule.py mx/URL/Listing.py mx/URL/Makefile.pkg mx/URL/README mx/URL/URL.py mx/URL/__init__.py mx/URL/mxURL/COPYRIGHT mx/URL/mxURL/LICENSE mx/URL/mxURL/Makefile.pre.in mx/URL/mxURL/Setup.in mx/URL/mxURL/__init__.py mx/URL/mxURL/ld_so_aix mx/URL/mxURL/makexp_aix mx/URL/mxURL/mx.h mx/URL/mxURL/mxURL.c mx/URL/mxURL/mxURL.def mx/URL/mxURL/mxURL.h mx/URL/mxURL/mxh.h mx/URL/mxURL/mxpyapi.h mx/URL/mxURL/mxstdlib.h mx/URL/mxURL/test.py mx/__init__.py mxSetup.py setup.cfg setup.py wininst.bat wininst64.bat MANIFEST

© 2000, Copyright by eGenix.com Software GmbH, Langengeld, Germany; All Rights Reserved. mailto: info@egenix.com