%PDF-1.2 % 511 0 obj << /Linearized 1 /O 513 /H [ 761 2250 ] /L 1224149 /E 28356 /N 83 /T 1213810 >> endobj xref 511 17 0000000016 00000 n 0000000691 00000 n 0000003011 00000 n 0000003185 00000 n 0000003348 00000 n 0000004220 00000 n 0000004918 00000 n 0000007607 00000 n 0000008454 00000 n 0000009157 00000 n 0000009217 00000 n 0000009291 00000 n 0000020644 00000 n 0000020719 00000 n 0000021279 00000 n 0000000761 00000 n 0000002988 00000 n trailer << /Size 528 /Info 510 0 R /Root 512 0 R /Prev 1213799 /ID[<8328b123e33278c44730fd78950e49b1><8328b123e33278c44730fd78950e49b1>] >> startxref 0 %%EOF 512 0 obj << /Type /Catalog /Pages 491 0 R /JT 509 0 R >> endobj 526 0 obj << /S 2805 /T 2967 /Filter /FlateDecode /Length 527 0 R >> stream HW}Pg$ pK\``I Vaq,D@pQ |4|3PX+X{jI@?DG["kfrGzGoAI{f6{_RD >ehK%20r;1䛀Ay|#6/0YWpr: gwX"fi7bb{?E kƿ!W>X[>FFpMhҁ(>YAԑl쿕w}i_NY )Q[Vv0CH?{cj$YjLaU}DY 7+XVVg[*$>dw/,n@wi"VbDNcX=8 zEx_b3L0]adm$[ G*,/^ .i8#9~g~C76ea|ؽ%_@Y HSJm9 ãK`߱ˁ*DMk/B-簫r[4_wfش-;v41]Z܎] b*ϰّħ)I>q&/M\-&[vRe+X1=jS¸dnK wG㲩 ԩiWT!/j?Umyѧ^ UeLrJ%; s^τ]L($m|:Ћ &._AOV8Z/mt{ ӊߡI #ﭩf4ס?OGj]vf#21n5m=^=^Vbxj6]jK3Zu9Y mbJn EU5K839t&)}tTQ|bf[2p\X%RQMˣu> endobj 514 0 obj << /ProcSet [ /PDF /Text ] /Font << /F1 515 0 R /F2 518 0 R >> /ExtGState << /GS1 523 0 R /GS2 521 0 R >> /ColorSpace << /Cs9 520 0 R >> >> endobj 515 0 obj << /Type /Font /Subtype /Type1 /FirstChar 32 /LastChar 240 /Widths [ 250 220 404 500 500 844 818 235 320 320 394 500 250 320 250 327 500 500 500 500 500 500 500 500 500 500 250 250 500 500 500 321 765 623 605 696 780 584 538 747 806 338 345 675 553 912 783 795 549 795 645 489 660 746 676 960 643 574 641 320 309 320 500 500 360 404 500 400 509 396 290 446 515 257 253 482 247 787 525 486 507 497 332 323 307 512 432 660 432 438 377 320 239 320 500 250 0 0 0 0 0 0 0 404 0 0 0 0 0 0 396 0 0 0 0 0 0 0 0 0 0 0 486 0 0 0 0 0 0 0 500 500 0 388 0 0 0 790 0 0 0 250 0 0 250 500 250 250 0 512 250 250 250 250 250 0 0 250 0 0 0 0 0 250 0 250 250 0 0 0 250 0 0 0 0 0 500 1000 404 404 235 235 0 250 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 250 ] /Encoding /MacRomanEncoding /BaseFont /CPBHPA+AGaramond-Regular /FontDescriptor 516 0 R >> endobj 516 0 obj << /Type /FontDescriptor /Ascent 720 /CapHeight 663 /Descent -270 /Flags 34 /FontBBox [ -183 -269 1099 851 ] /FontName /CPBHPA+AGaramond-Regular /ItalicAngle 0 /StemV 74 /XHeight 397 /CharSet (/quoteright/eight/e/Q/nine/parenleft/f/R/K/n/colon/h/x/S/parenright/copy\ right/semicolon/U/i/asciitilde/endash/F/N/V/j/l/plus/less/W/k/equal/comm\ a/X/P/m/greater/hyphen/aacute/Y/o/question/period/H/p/Z/at/slash/q/bulle\ t/B/T/space/r/zero/C/g/d/s/one/exclam/D/odieresis/two/t/G/three/u/quoted\ blright/numbersign/quotesingle/I/a/v/four/underscore/quotedblleft/J/doll\ ar/eacute/w/five/A/quoteleft/L/percent/emdash/six/y/b/E/M/ampersand/seve\ n/z/c/O) /FontFile3 522 0 R >> endobj 517 0 obj << /Length 2634 >> stream 1 g /GS1 gs 0 873 m 0 873 l f q 1 i 27 846 603 -783 re 0 873 m W n 0 873 684 -873 re W n 0 0 0 0.1 k 63.5 809.5 530 -710 re 0 873 m f* 0 0 0 1 K 0 J 0 j 1 w 10 M []0 d 63.5 809.5 530 -710 re S BT /F1 1 Tf 19 0 0 19 311.9844 520.3156 Tm 0 0 0 1 k /GS2 gs -0.0001 Tc 0.025 Tw [(P)42.1(age 1:)]TJ -3.4353 -1.2 TD 0 Tw [(BINAR)44.8(Y)-250.1(E)11.9(V)24(O)0(L)17.7(UTION)]TJ ET Q 0 0 0 0 k /GS2 gs 1 i 37 874 186 -12 re 430.023 497.516 m f* BT /F2 1 Tf 8 0 0 8 39 864 Tm /Cs9 cs 1 scn -0.0007 Tc -0.0039 Tw (TPJ#19/9.26 9/27/00 10:35 AM Page 1)Tj ET 1 G 0 J 0 j 0.5 w 10 M []0 d 36 873 m 36 849 l 0 837 m 24 837 l 621 873 m 621 849 l 657 837 m 633 837 l 36 36 m 36 60 l 0 72 m 24 72 l 621 36 m 621 60 l 657 72 m 633 72 l S /Cs9 CS 1 SCN 0.25 w 36 873 m 36 849 l 0 837 m 24 837 l 621 873 m 621 849 l 657 837 m 633 837 l 36 36 m 36 60 l 0 72 m 24 72 l 621 36 m 621 60 l 657 72 m 633 72 l S 1 G 0.5 w 304.5 861 m 352.5 861 l 304.5 48 m 352.5 48 l 12 478.5 m 12 430.5 l 645 478.5 m 645 430.5 l 328.5 873 m 328.5 849 l 328.5 60 m 328.5 36 l 0 454.5 m 24 454.5 l 633 454.5 m 657 454.5 l 328.5 861 m 334.5 861 l 334.5 857.688 331.812 855 328.5 855 c 325.188 855 322.5 857.688 322.5 861 c 322.5 864.312 325.188 867 328.5 867 c 331.812 867 334.5 864.312 334.5 861 c 328.5 48 m 334.5 48 l 334.5 44.688 331.812 42 328.5 42 c 325.188 42 322.5 44.688 322.5 48 c 322.5 51.312 325.188 54 328.5 54 c 331.812 54 334.5 51.312 334.5 48 c 12 454.5 m 18 454.5 l 18 451.188 15.312 448.5 12 448.5 c 8.688 448.5 6 451.188 6 454.5 c 6 457.812 8.688 460.5 12 460.5 c 15.312 460.5 18 457.812 18 454.5 c 645 454.5 m 651 454.5 l 651 451.188 648.312 448.5 645 448.5 c 641.688 448.5 639 451.188 639 454.5 c 639 457.812 641.688 460.5 645 460.5 c 648.312 460.5 651 457.812 651 454.5 c S /Cs9 CS 1 SCN 0.25 w 304.5 861 m 352.5 861 l 304.5 48 m 352.5 48 l 12 478.5 m 12 430.5 l 645 478.5 m 645 430.5 l 328.5 873 m 328.5 849 l 328.5 60 m 328.5 36 l 0 454.5 m 24 454.5 l 633 454.5 m 657 454.5 l 328.5 861 m 334.5 861 l 334.5 857.688 331.812 855 328.5 855 c 325.188 855 322.5 857.688 322.5 861 c 322.5 864.312 325.188 867 328.5 867 c 331.812 867 334.5 864.312 334.5 861 c 328.5 48 m 334.5 48 l 334.5 44.688 331.812 42 328.5 42 c 325.188 42 322.5 44.688 322.5 48 c 322.5 51.312 325.188 54 328.5 54 c 331.812 54 334.5 51.312 334.5 48 c 12 454.5 m 18 454.5 l 18 451.188 15.312 448.5 12 448.5 c 8.688 448.5 6 451.188 6 454.5 c 6 457.812 8.688 460.5 12 460.5 c 15.312 460.5 18 457.812 18 454.5 c 645 454.5 m 651 454.5 l 651 451.188 648.312 448.5 645 448.5 c 641.688 448.5 639 451.188 639 454.5 c 639 457.812 641.688 460.5 645 460.5 c 648.312 460.5 651 457.812 651 454.5 c S endstream endobj 518 0 obj << /Type /Font /Subtype /Type1 /FirstChar 32 /LastChar 240 /Widths [ 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 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 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 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 0 0 0 0 0 0 0 600 600 0 600 0 0 0 600 0 0 0 600 0 0 600 600 600 600 0 600 600 600 600 600 600 0 0 600 0 0 0 0 0 600 0 600 600 0 0 0 600 0 0 0 0 0 0 600 0 0 600 0 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 /MacRomanEncoding /BaseFont /CPBIAC+Courier /FontDescriptor 519 0 R >> endobj 519 0 obj << /Type /FontDescriptor /Ascent 629 /CapHeight 562 /Descent -157 /Flags 35 /FontBBox [ -28 -250 628 805 ] /FontName /CPBIAC+Courier /ItalicAngle 0 /StemV 51 /XHeight 426 /CharSet (/braceleft/eight/e/Q/nine/parenleft/f/R/bar/K/n/colon/braceright/h/x/S/p\ arenright/grave/semicolon/U/i/asterisk/asciitilde/F/N/V/less/l/plus/j/k/\ equal/W/comma/P/m/greater/X/hyphen/Y/o/question/period/Z/H/p/at/slash/q/\ bracketleft/T/B/bullet/space/r/zero/backslash/C/g/d/s/exclam/one/D/brack\ etright/two/t/quotedbl/G/asciicircum/three/u/quotesingle/numbersign/I/a/\ v/four/underscore/J/dollar/w/five/A/quoteleft/L/percent/emdash/six/y/b/E\ /M/ampersand/seven/z/c/O) /FontFile3 525 0 R >> endobj 520 0 obj [ /Separation /All /DeviceCMYK 524 0 R ] endobj 521 0 obj << /Type /ExtGState /SA false /SM 0.02 /OP true >> endobj 522 0 obj << /Filter /FlateDecode /Length 11259 /Subtype /Type1C >> stream H{Pƿoo(.j]\oW14 #W\\\X`߲"Q!D1""ձvc:ӼKNOLygy~s΋c  qϭQaQ;qV1)bbspRg8(7jԟT3OƆ3`%X1p\Qֳ5;$-Ts`h]pP(49;)E{$O'8| [-KSDLQ \<7LK'2$ii' څnؔ ːђS5^؎j 6g;|ϴ^35דm2KŅ:V&&`zDVDY?f5kY%NA>FQ+ń¬xŪ`5t8twu^OޓdoߌMO 7<nO4RV #n dPpu( lL_zS]YNNt"^y]˯4l5/h_.h7iLJAeKjU-:fJeIS2I{BEJv:u  {+VNmT$WlLFlޣG9 FMhv߲?q_nzT#>KqESs'>|ܒ:QI!K!(ڢ9MwɫI7N?M7 |_SմEaA(E( SFy$!sQx"}(S>C$ A')^CDNwsD\BrxBP B@ `sO)RZ@´j-34X_Zc 8R4 a~O9/=g. u7QMu !oa\Pڵ*\ _Dpru'N 983ebhŕ: >c>fc&6? |iH+h-ȕh}958qx򔀸^Ti|)ڿ!᝕6oȠJv+uĥ޸wE!# C7}ZZGIOZ:_ ֗=naƫuܬiեE2N,gnY@; ]~͸pdr6̨X9.tbzC~I)j4&JG߹낾s2Lij ֮/. lـ 0TP^z,OWRT`I \ahq%ǝsY'Ct3RqNrnc7[m n7WVr>bt&!f3T^*SqTZJMl)ˣ?+Wnh=NbI֬d,FT tS^HkHUm;:ppxRQU/9h)AJJ6`}$A!*0MRxd=!OΦS_{TwǛ $Ӗ[AbmhWXVA9(%J HfI23yy7C,몋.{T=GXo8c(g~wTCЪ8F܆Q\ep`ߜ'xQt2SfՀp QxC?WSc 㢴$0(SM8/\4 ۥ`Z6[tjRlv+til 0;^o& 8\\-;hfUd>uRq_`l2./mdhᚸẅb&k'B>?ak8&z?_c?=EmzjlQ.~ᚱm䍴qO>%8:;F\Fڇ\l4põSA8o9xI/sg%Msj\A ׁW7E_6<^EѪgFgϿ3P^b/"X Dsa[gi .P~]*jHwh.N%}U9XgwQJhtV8{|]ؓ%^Ix~}iYJUXm`ApW*wBjDŽ'!I %s?^8MVչrγ+oN Ďk8Kk<S4o,{1TԈNjG&;/]oqHA@$x`!⼰uz2H9Jkܽ?QBA+n፯$GJ/+.r"à*>O[x֭dq$K+cJBݧ:]؇KE 5=O&NJr4YUԛTRʛ`4NV'Vfwm}mV$˚x1)59j9 ʬ,{9q"gLN ƚۓqO ).`4۵4anez ~`wy6Yj9vcKN&jX"# 6R7TAOuؤVs`YU #-5yD"|*{|ؿ胸=1 ?xN=Q]z+1wNumHoS:>\Dqx`_"mli/6֔uCw-ۆ} 6z:&Wx2 GX81ZLmL;OL@€" QSr<:,1=Ee tIڛq{-q{>_khhN"ZKis܋ߕݹcd''lmNGguPYЯ95긡u:DȺj yeiB76wM|W_ޖo)^}DGi^sك w&b\lɡ҃]V}5NFme{SlIUfu:Y>/@٨e=-FC-p'ڨ "Lq4f()KQ/ꈎ-o30FGtm5u/[9S9Eq=UY'^He.oEL50:% *[K8#f`C[IMw𵹡BEht4&՘g JV8j9,?D+i_p3.Ax6 G7SWH+UiH%j0myHn<زU'$ wV 9!JU =u?R*oI'@9Di1BDvVNcc!gǬkJTVę2aw?o rUc!vsڤmR*?cp_4x+<tn. NJW<& 򟞭pfGKxG5u2&gzO9禭Uvs[j1l:w @BH 7yoW !@TP,Ъݦݔֹ::w<u纝q쏝>{}Fcхh41CǬ@-,,=-IXYBEWܓjTc5\)K`z+*kk* eݴ˩O(kCTᢓ,IVgԩ3% 9ht,2+ A HF[ ¤H%Xg?կj.^qHQb!IN^&02@Y9[_.n6 0j$Y[@ܿ;>6>ѸqtYt&{ܫvRV nj}b|y˲jJ7`@ȍEJI䙯"Rlݡ79̈~?I?WfH>W4whyH(/*3`5:erWQQl_?PF?'vQ+C{iO瑰#DIW՗,ת|H$@Q ,-Zܡ7Qs!Na'Ѯ'_Jf{';ʑ7G7MOK/ZϮĬ@rg8V4k_do;o.c%R(àWAq 2}pqq$[GMp cc%yL riuƖl H.#L\ƦPJ:paY)q)ǪUIU߷Z[ zWh qqHrʨ3UX^:KzqN%'Svs=p $]L "(_ﷶ+a[ۙbv*~\څ a> =2N (o"E ōb ?j[*&~-,G0S*&Qe(#9oy3a{Rc&_/$U:X`wFq71<_ L"C3g-lf|,HXއOs% gN,۱ړ-XVW+~KU Oevt8Q=, :zjI#jyI.TD8[xVC{p+@׺o`gYX{'y}f82d4ȹ%eե;%ӟ6u^}Wr bZϮrRu=v6-y#_J"m:c(N/s?kWIJCdX,gUXy[}0Vdh7&}3w]z(0>~_rH@8KjkZ ΢,A)WU"S.eD kw0a\8UFIUG쒔$-ihI)i!i0ea ?$K֮Ve˒ ~ɲ-#yJ)&Ti Ʉi+f+cOʔssﴻl gړhH}0^T[ܣvߒ \E_ b9=Lz#qXWc'c^Fc#$dT?'?][i/8nwDb<.][x |pM>rХxP)\ 8Dn%5~z_E6#HՃ1>: î GBIhN\E_jlM$AY7Kd0ɏd  (AbwO >/A2(4BX~i)ʹ.:PT]?S~bŭGiDs+b k?U#v1 zn6M\fh-Bn4}yXmQ} (όj$58} س k1a ^KmQɧ>PN:cX ОbUQ>F#'!5eR-6q6Ě-5%o~՛d}};EW9 C?$H_RK =K^\@;rJyec{åI=+=d*tB/Jj \uSgϣffXtkQϲJ0m GH-X=|ޯ#=t(QW~nE=۟)^~y$H7$tAej,03C@3I! l  >4oKb>)rjm!W!sEh?b톕G) NQnĬFաviB*Rƌ ne6j5ᦛ7C7#Zjw~ 1|m㙨'F+AH9|jygWNnڲy=='Al.x[^d*q-TDndv(!~ϫ18FrN!B6TUEH7B(ۈ߄jIa~52l+Fux~y&\ rvp U*oϹO^Ŀ }OU#d9ZPmK9CPn1Sj8PY7ӑN4vU2_]ŝNZ+k, MMʹSrٙ3+ ZƒZKaJzA6c)С/8ཱV>_f%, A]؟׿dYvAg6HxEF?f<vnESÙ#P8($Fofi 2݌.\TwQZ9 "˙{E ~ɗKAE?4͗勺K]f>E* n<("JA 혬&)L(t(Ц t(seaY֭ʖ|%8IN tIH2I~";'4C:~^I/2{ uGp?)V*{8`|Pa!rr ??˕}eRҁoC7[lNfW<=u_{r|EiR~Æҿ<4s魏Fe?t92i}/=L_S%a O^|mKNO('sIȃhmCs<7%PUy`ۜe?5gȢR~S3Űv)19q2g^kT~P[, ,fry@7ZT/K,}~T*|rt@ksv }MkMzNo_qmȞA{J?JMN gr@!m?$oy[ wWvQ\*<;&2j%hVty&gnu{I3Y|X+C)K{_NM;li9]i͵'J\Οa|X{Sh|zefcП~3D(6)IA3 h'Bp(ױ`͞LΗ( /g5ljw~r,GTtvl/eQK# /H[O[*>5}!-lPkfb K歇B"HzRy+Y-$Edxjg&TV5A˅Bƈp\EʛjZdATy\ꉍ%d(6Ģ\§MpHl*ou+^.@ dOvL706|(Y"Rdis~Yo&<4Mdwe w5JǤ\jC}"! I}ad}*US&=aw$8'ZTPG2c.^u D<=nѥ,>Ut V|M^w`dk5Q$xhn6՛bRf#&xwjx>HH!&[KRHnHvc2¿"u\sq;Qęl#c' 2Xm`ƅ|4tx^oڛkDW{/#~QFS#[c8f٬}KA O$z<|hkɁP\#Șk&!IR߯w;EXJ ]@r;H >$1K _PMaD"E PCbM ]V}B0oQ[Ygph `P5'3  %8?6y,nJkZwu`840;5P 4OrZakCv}J- B4DT{At>/cJaMсZ O2Hc\dδD Bxv'rLeRn: ^Q*Yݎ۬փG't*"EuV:w 44Lnނ)H>U 3]\{Hn.[3:7 VMl5;R XCbB?5?WylUn{CSe5_sxaF՚|_N}`Pu eK7|睹7n-nWUYZ Uwآw0C#2c9%RJ}uw\c0y4X6:q׳O_P 8fܕ"CajZ("BE<.*  F#XTJmM)mm83d24I0MH-ZX"UB,B nn ?B΅gu\9pE__*"6b> endobj 524 0 obj << /FunctionType 0 /Domain [ 0 1 ] /Range [ 0 1 0 1 0 1 0 1 ] /BitsPerSample 8 /Size [ 255 ] /Length 394 /Filter /FlateDecode >> stream H m۶m\m~ټl۶m۶"0AJ0"4aK8D"2QJ4"6qK<Ⓚ$"1IHJ2"5iHK:ғd"3YJ6"7yK>S0E(J1%(I)JS<H%*ST:5I-jSԣ> hH#ӄ49-hI+Zӆ=H':Ӆt;=I/zӇ? 3 c8#(F3c<Lb2S43b6s<泀,b1KX2b5kX:ֳlb3[6b7{>s0G81s4g89s\2W5s6w=<1Ox3󂗼5ox;|3_77?e endstream endobj 525 0 obj << /Filter /FlateDecode /Length 6816 /Subtype /Type1C >> stream HlUyPwc8F푞1Xh)XTd K 17!""xưAeQ9CF]5`k뇛mH_?35p o"l}b~[Ra\r0ii,^ S>yxIЂL+a#qW.qquuI''diDq\,4M}M4.׬I4/3+65SHGeƸh4+SR4S35.0)lF(aY *0,Z6`Eard`XLqD>QC3Uz')҃jBϣutHČf^ffw4&a +(r:S8fV3ll|m6T ܵyae;80-;}v?l4ޱ7??*58}ùlosU긪SuOjTk `u֋TsbIOJKMMmJm=pWi訔cV@I#Su( "jtSJC^ {+̰t4aWA2W&gph4 @P#YSSYJȒT'_˄D *;r`m_ BĘVC)mON'C}C?/ږݪf1 4mS'$U y^XGn]8g֗ o_IS4r^n~WX ݒ{ Z$3-}0g m_C}+@D,0r'~n/LJb26FpIq<'ؑY^v^Y?Pn3N#pRY,naɂ_ d"g86,m1<ރ}Z˭]d}̆<#ƒckԕJL&lY tvQ8v,7GLך'lvfZZ*"yzW˹#j·8VKBxrva)?}y(Ͽ6>  0p^8HsC|C xkT 9ch^~p!}9ܸ%z(.BfCg5`z!PjQ B  V"^K֙Z#lqPMB[X 3ǡxBRtқc3Rھi>~W"Ƿ_$WBz3LvLMKʗ zbF U;w䩗]K<);?+EQ!=)Oxm9[J;壹=2s{w7t=؂I{kVPPVIIga?o$ |[ɍW6!k|Br1z{:AM~uESq~$!@?#,B+У7^]m; |,;Kna)#JvV#3. ܫ)Kyx;]z(ߖmYZH~}l̈AkhxDZzgaolޠn.}s ZW[Z ̡c'o@eoDO٭7O+h#CȾM$QtQNf~l6xv=Ctk)ynXyHL_6. !smUw(F"JE>؍`#󊑤"8{ٗ8 1\%h!`g^ÿD&Ku4u]lW0cwUnUU]뀚yoY8?joϋSWgqJCT#h JtBߡF5,ꃌ>1"T5<󴹶h8丶!ꢞg^d9ڍ[v}`5v{\<^˳/o_Zt-:h_Gl^+._T}!{{aP/ߔy8R=zi|e|W|TlvUXٮ֠(,M4Ӧԍ ( p}!q  6"EfU堠sAuuF7{+U?S{{\ƱCD9tY Ӆ@q4:3M'c{}MT#uK)\WWYj'"y>;/-(P k;=͟}0 Ǵrp fB8/C uO2Υ.i / ]/ GG!Wlӡh-Wc ]_*@]-ÄM pupEgkk* K^aYpr.M5 ?0ʪos5xTk>; ՞J4z;Mu>]/,㪔igN1[6xiC0  a=bg.K؎, 8y6pT1g_'4J\]̓*p[JN})A[.!@-J7]~$D1L{1 6$ t֦y^mj!ZU#RR@%O[R!qT1s}RJqgd]%G_2EMSQNts%]{,gD- 1ZIЛ&Sw6%>3N Zo:q]'.#$.~cGUc =.0RԳ0B7om4=wpRaAdwP"XU1+vTAhe=Y qh?b5J}(PlL:#o*.0KȧDF5+u=q" B9WY[kҊ:엶}?]( t%+ iTQK]G9]"VZ-oSڡJבni%u0yYAJ3d.qux*0b1[LCN8+ c}vv v2iC#5Mغumo./Y.dfΤKyyE$|'1<Z Yb{mmBkOsRIB^LL?WVǏɂ.x_Ton":1Q51P[3{;_0m3T:qt~"+`Vy4n .L?Wl͉:`,gT5ʣkOw^mFK.^ژdz .J|G;&h\9_nxw9Vq6ZSH(y‚Em (G"bFY$/4ƨJ "AWQPrOgRhU~Q5ssӨp!͉wKHn2 Wx1 ̵0Wn%pb7b67U46!0@ga~%(G=(IDXmF&e>e=ewQP9u1Wmgg[?["G˝::;ex)o"G8Cqhsxw3nJV{YKwph :T+QV7/ Z+E(cBtqBKV-tNvЂ;Wl=tEypQ[ܥxVpZY ʙA}*#Tvo),t׳N~TT-|rc.B9$}#džbI[kI'#V͚79v43¹CǎOXvTJ2ɽ0@73*R!sfm0QtU1vWWAj6( %>Yqv7{o7<z8Axmu9tq ֤M=N/pOt_[iIJq1gKq, /]SW_hz& \(;!1T Ե!qcsT@F<?yS+ᡲxÍZVn R='KXj\cHkLGC<Є5#L/7MF|_{8 L4΁6xzH}gܽl"E 1QumBā0CvɨF-rm!c{Z&-csr["͗+ݹO^t&Z1)F **7~&N q'+?|+j8f^;He#gL &TQ v'/A4>$v=, 4JV-:aMO߹N^tJdӲhiaʔQ1XctN (n Waz&fg WoOZ쯶Z ,ӚG~W>A(z1%txm)trJ\,@׹]G:{Keץr72ZIb|o5Si8 ~cq|9ר/a`Qn|^Eᘁ੆W+adKIFIJ : yZy[#*ה"!%<%HTM8zO3ͳNgK;FjbH&L)&,M3$%Wpk̫40Z; ??[xx}ǘz`1@ %^ێf|Xqվdi e,6'+П_Q?b qX+(g.ˑ{kf($kƮBwBw{l;a#.uO66HDKmbWZN䚘]2uӋY9uؘ}$MW~,1]S0U<}Ec[aR]S-.T51!J3H#Ir:F_iu1h^S~4RY¼ĨӤ{kc[]_!$O8jRi~2aٲ|g3aDwv٩/I] sPhkr'PՓhUyYIJ3 X)>t vӚοdc0>8 6jS3 08 `$prGG2'@ptħ\ 0 E2b=O0C3#a=0*8\;ћ@B56E4;a'haG'ߧmp`2`"rU9?uYv{~Ng7:/w=386=;K7V)~%sNoqPVg啵r|ߕ:\&0.$.'$S2w,`?3Q:$-!M~W֭ru*Kߴ{JyHKn+\a[{>61A|+moy/+w+{wL[YbXXqao-a҇?{Q9`✇qx#`B endstream endobj 1 0 obj << /Type /Page /Parent 490 0 R /Resources 2 0 R /Contents 3 0 R /Thumb 323 0 R /MediaBox [ 0 0 684 873 ] /CropBox [ 0 0 684 873 ] /Rotate 0 >> endobj 2 0 obj << /ProcSet [ /PDF /Text ] /Font << /F1 515 0 R /F2 518 0 R >> /ExtGState << /GS1 523 0 R /GS2 521 0 R >> /ColorSpace << /Cs9 520 0 R >> >> endobj 3 0 obj << /Length 2633 >> stream 1 g /GS1 gs 0 873 m 0 873 l f q 1 i 27 846 603 -783 re 0 873 m W n 0 873 684 -873 re W n 0 0 0 0.1 k 63.5 809.5 530 -710 re 0 873 m f* 0 0 0 1 K 0 J 0 j 1 w 10 M []0 d 63.5 809.5 530 -710 re S BT /F1 1 Tf 16 0 0 16 308.2804 462.4764 Tm 0 0 0 1 k /GS2 gs -0.0001 Tc 0.025 Tw [(P)42.1(age 2 )]TJ -0.8396 -1.2 TD 0 Tw [(OREILL)69.7(Y)]TJ 0.9458 -1.2 TD 0 Tc [(NE)12(W)]TJ ET Q 0 0 0 0 k /GS2 gs 1 i 37 874 186 -12 re 347.02 424.076 m f* BT /F2 1 Tf 8 0 0 8 39 864 Tm /Cs9 cs 1 scn -0.0007 Tc -0.0039 Tw (TPJ#19/9.26 9/27/00 10:35 AM Page 2)Tj ET 1 G 0 J 0 j 0.5 w 10 M []0 d 36 873 m 36 849 l 0 837 m 24 837 l 621 873 m 621 849 l 657 837 m 633 837 l 36 36 m 36 60 l 0 72 m 24 72 l 621 36 m 621 60 l 657 72 m 633 72 l S /Cs9 CS 1 SCN 0.25 w 36 873 m 36 849 l 0 837 m 24 837 l 621 873 m 621 849 l 657 837 m 633 837 l 36 36 m 36 60 l 0 72 m 24 72 l 621 36 m 621 60 l 657 72 m 633 72 l S 1 G 0.5 w 304.5 861 m 352.5 861 l 304.5 48 m 352.5 48 l 12 478.5 m 12 430.5 l 645 478.5 m 645 430.5 l 328.5 873 m 328.5 849 l 328.5 60 m 328.5 36 l 0 454.5 m 24 454.5 l 633 454.5 m 657 454.5 l 328.5 861 m 334.5 861 l 334.5 857.688 331.812 855 328.5 855 c 325.188 855 322.5 857.688 322.5 861 c 322.5 864.312 325.188 867 328.5 867 c 331.812 867 334.5 864.312 334.5 861 c 328.5 48 m 334.5 48 l 334.5 44.688 331.812 42 328.5 42 c 325.188 42 322.5 44.688 322.5 48 c 322.5 51.312 325.188 54 328.5 54 c 331.812 54 334.5 51.312 334.5 48 c 12 454.5 m 18 454.5 l 18 451.188 15.312 448.5 12 448.5 c 8.688 448.5 6 451.188 6 454.5 c 6 457.812 8.688 460.5 12 460.5 c 15.312 460.5 18 457.812 18 454.5 c 645 454.5 m 651 454.5 l 651 451.188 648.312 448.5 645 448.5 c 641.688 448.5 639 451.188 639 454.5 c 639 457.812 641.688 460.5 645 460.5 c 648.312 460.5 651 457.812 651 454.5 c S /Cs9 CS 1 SCN 0.25 w 304.5 861 m 352.5 861 l 304.5 48 m 352.5 48 l 12 478.5 m 12 430.5 l 645 478.5 m 645 430.5 l 328.5 873 m 328.5 849 l 328.5 60 m 328.5 36 l 0 454.5 m 24 454.5 l 633 454.5 m 657 454.5 l 328.5 861 m 334.5 861 l 334.5 857.688 331.812 855 328.5 855 c 325.188 855 322.5 857.688 322.5 861 c 322.5 864.312 325.188 867 328.5 867 c 331.812 867 334.5 864.312 334.5 861 c 328.5 48 m 334.5 48 l 334.5 44.688 331.812 42 328.5 42 c 325.188 42 322.5 44.688 322.5 48 c 322.5 51.312 325.188 54 328.5 54 c 331.812 54 334.5 51.312 334.5 48 c 12 454.5 m 18 454.5 l 18 451.188 15.312 448.5 12 448.5 c 8.688 448.5 6 451.188 6 454.5 c 6 457.812 8.688 460.5 12 460.5 c 15.312 460.5 18 457.812 18 454.5 c 645 454.5 m 651 454.5 l 651 451.188 648.312 448.5 645 448.5 c 641.688 448.5 639 451.188 639 454.5 c 639 457.812 641.688 460.5 645 460.5 c 648.312 460.5 651 457.812 651 454.5 c S endstream endobj 4 0 obj << /Type /Page /Parent 490 0 R /Resources 5 0 R /Contents 6 0 R /Thumb 325 0 R /MediaBox [ 0 0 684 873 ] /CropBox [ 0 0 684 873 ] /Rotate 0 >> endobj 5 0 obj << /ProcSet [ /PDF /Text ] /Font << /F1 515 0 R /F2 518 0 R >> /ExtGState << /GS1 523 0 R /GS2 521 0 R >> /ColorSpace << /Cs9 520 0 R >> >> endobj 6 0 obj << /Length 2699 >> stream 1 g /GS1 gs 0 873 m 0 873 l f q 1 i 27 846 603 -783 re 0 873 m W n 0 873 684 -873 re W n 0 0 0 0.1 k 63.5 809.5 530 -710 re 0 873 m f* 0 0 0 1 K 0 J 0 j 1 w 10 M []0 d 63.5 809.5 530 -710 re S BT /F1 1 Tf 16 0 0 16 308.2804 462.4764 Tm 0 0 0 1 k /GS2 gs -0.0001 Tc 0.025 Tw [(P)42.1(age 3)]TJ -1.2613 -1.2 TD 0 Tw (DICE.COM)Tj 0.6175 -2.4 TD -0.0002 Tc 0.025 Tw [(P)11.9(ICK UP)]TJ -1.3182 -1.2 TD 0 Tc [(I)17.9(ssue #18 P)42(age 9)]TJ ET Q 0 0 0 0 k /GS2 gs 1 i 37 874 186 -12 re 380.11 385.677 m f* BT /F2 1 Tf 8 0 0 8 39 864 Tm /Cs9 cs 1 scn -0.0007 Tc -0.0039 Tw (TPJ#19/9.26 9/27/00 10:35 AM Page 3)Tj ET 1 G 0 J 0 j 0.5 w 10 M []0 d 36 873 m 36 849 l 0 837 m 24 837 l 621 873 m 621 849 l 657 837 m 633 837 l 36 36 m 36 60 l 0 72 m 24 72 l 621 36 m 621 60 l 657 72 m 633 72 l S /Cs9 CS 1 SCN 0.25 w 36 873 m 36 849 l 0 837 m 24 837 l 621 873 m 621 849 l 657 837 m 633 837 l 36 36 m 36 60 l 0 72 m 24 72 l 621 36 m 621 60 l 657 72 m 633 72 l S 1 G 0.5 w 304.5 861 m 352.5 861 l 304.5 48 m 352.5 48 l 12 478.5 m 12 430.5 l 645 478.5 m 645 430.5 l 328.5 873 m 328.5 849 l 328.5 60 m 328.5 36 l 0 454.5 m 24 454.5 l 633 454.5 m 657 454.5 l 328.5 861 m 334.5 861 l 334.5 857.688 331.812 855 328.5 855 c 325.188 855 322.5 857.688 322.5 861 c 322.5 864.312 325.188 867 328.5 867 c 331.812 867 334.5 864.312 334.5 861 c 328.5 48 m 334.5 48 l 334.5 44.688 331.812 42 328.5 42 c 325.188 42 322.5 44.688 322.5 48 c 322.5 51.312 325.188 54 328.5 54 c 331.812 54 334.5 51.312 334.5 48 c 12 454.5 m 18 454.5 l 18 451.188 15.312 448.5 12 448.5 c 8.688 448.5 6 451.188 6 454.5 c 6 457.812 8.688 460.5 12 460.5 c 15.312 460.5 18 457.812 18 454.5 c 645 454.5 m 651 454.5 l 651 451.188 648.312 448.5 645 448.5 c 641.688 448.5 639 451.188 639 454.5 c 639 457.812 641.688 460.5 645 460.5 c 648.312 460.5 651 457.812 651 454.5 c S /Cs9 CS 1 SCN 0.25 w 304.5 861 m 352.5 861 l 304.5 48 m 352.5 48 l 12 478.5 m 12 430.5 l 645 478.5 m 645 430.5 l 328.5 873 m 328.5 849 l 328.5 60 m 328.5 36 l 0 454.5 m 24 454.5 l 633 454.5 m 657 454.5 l 328.5 861 m 334.5 861 l 334.5 857.688 331.812 855 328.5 855 c 325.188 855 322.5 857.688 322.5 861 c 322.5 864.312 325.188 867 328.5 867 c 331.812 867 334.5 864.312 334.5 861 c 328.5 48 m 334.5 48 l 334.5 44.688 331.812 42 328.5 42 c 325.188 42 322.5 44.688 322.5 48 c 322.5 51.312 325.188 54 328.5 54 c 331.812 54 334.5 51.312 334.5 48 c 12 454.5 m 18 454.5 l 18 451.188 15.312 448.5 12 448.5 c 8.688 448.5 6 451.188 6 454.5 c 6 457.812 8.688 460.5 12 460.5 c 15.312 460.5 18 457.812 18 454.5 c 645 454.5 m 651 454.5 l 651 451.188 648.312 448.5 645 448.5 c 641.688 448.5 639 451.188 639 454.5 c 639 457.812 641.688 460.5 645 460.5 c 648.312 460.5 651 457.812 651 454.5 c S endstream endobj 7 0 obj << /Type /Page /Parent 490 0 R /Resources 8 0 R /Contents 9 0 R /Thumb 327 0 R /MediaBox [ 0 0 684 873 ] /CropBox [ 0 0 684 873 ] /Rotate 0 >> endobj 8 0 obj << /ProcSet [ /PDF /Text ] /Font << /F1 515 0 R /F2 518 0 R >> /ExtGState << /GS1 523 0 R /GS2 521 0 R >> /ColorSpace << /Cs9 520 0 R >> >> endobj 9 0 obj << /Length 2670 >> stream 1 g /GS1 gs 0 873 m 0 873 l f q 1 i 27 846 603 -783 re 0 873 m W n 0 873 684 -873 re W n 0 0 0 0.1 k 63.5 809.5 530 -710 re 0 873 m f* 0 0 0 1 K 0 J 0 j 1 w 10 M []0 d 63.5 809.5 530 -710 re S BT /F1 1 Tf 16 0 0 16 308.2804 462.4764 Tm 0 0 0 1 k /GS2 gs -0.0001 Tc 0.025 Tw [(P)42.1(age 4)]TJ -2.0837 -1.2 TD -0.0002 Tc 0 Tw [(A)12(CTIVE)-250.2(ST)64.7(A)69.8(T)-0.1(E)]TJ 2.1899 -1.2 TD 0 Tc [(NE)12(W)]TJ ET Q 0 0 0 0 k /GS2 gs 1 i 37 874 186 -12 re 347.02 424.076 m f* BT /F2 1 Tf 8 0 0 8 39 864 Tm /Cs9 cs 1 scn -0.0007 Tc -0.0039 Tw (TPJ#19/9.26 9/27/00 10:35 AM Page 4)Tj ET 1 G 0 J 0 j 0.5 w 10 M []0 d 36 873 m 36 849 l 0 837 m 24 837 l 621 873 m 621 849 l 657 837 m 633 837 l 36 36 m 36 60 l 0 72 m 24 72 l 621 36 m 621 60 l 657 72 m 633 72 l S /Cs9 CS 1 SCN 0.25 w 36 873 m 36 849 l 0 837 m 24 837 l 621 873 m 621 849 l 657 837 m 633 837 l 36 36 m 36 60 l 0 72 m 24 72 l 621 36 m 621 60 l 657 72 m 633 72 l S 1 G 0.5 w 304.5 861 m 352.5 861 l 304.5 48 m 352.5 48 l 12 478.5 m 12 430.5 l 645 478.5 m 645 430.5 l 328.5 873 m 328.5 849 l 328.5 60 m 328.5 36 l 0 454.5 m 24 454.5 l 633 454.5 m 657 454.5 l 328.5 861 m 334.5 861 l 334.5 857.688 331.812 855 328.5 855 c 325.188 855 322.5 857.688 322.5 861 c 322.5 864.312 325.188 867 328.5 867 c 331.812 867 334.5 864.312 334.5 861 c 328.5 48 m 334.5 48 l 334.5 44.688 331.812 42 328.5 42 c 325.188 42 322.5 44.688 322.5 48 c 322.5 51.312 325.188 54 328.5 54 c 331.812 54 334.5 51.312 334.5 48 c 12 454.5 m 18 454.5 l 18 451.188 15.312 448.5 12 448.5 c 8.688 448.5 6 451.188 6 454.5 c 6 457.812 8.688 460.5 12 460.5 c 15.312 460.5 18 457.812 18 454.5 c 645 454.5 m 651 454.5 l 651 451.188 648.312 448.5 645 448.5 c 641.688 448.5 639 451.188 639 454.5 c 639 457.812 641.688 460.5 645 460.5 c 648.312 460.5 651 457.812 651 454.5 c S /Cs9 CS 1 SCN 0.25 w 304.5 861 m 352.5 861 l 304.5 48 m 352.5 48 l 12 478.5 m 12 430.5 l 645 478.5 m 645 430.5 l 328.5 873 m 328.5 849 l 328.5 60 m 328.5 36 l 0 454.5 m 24 454.5 l 633 454.5 m 657 454.5 l 328.5 861 m 334.5 861 l 334.5 857.688 331.812 855 328.5 855 c 325.188 855 322.5 857.688 322.5 861 c 322.5 864.312 325.188 867 328.5 867 c 331.812 867 334.5 864.312 334.5 861 c 328.5 48 m 334.5 48 l 334.5 44.688 331.812 42 328.5 42 c 325.188 42 322.5 44.688 322.5 48 c 322.5 51.312 325.188 54 328.5 54 c 331.812 54 334.5 51.312 334.5 48 c 12 454.5 m 18 454.5 l 18 451.188 15.312 448.5 12 448.5 c 8.688 448.5 6 451.188 6 454.5 c 6 457.812 8.688 460.5 12 460.5 c 15.312 460.5 18 457.812 18 454.5 c 645 454.5 m 651 454.5 l 651 451.188 648.312 448.5 645 448.5 c 641.688 448.5 639 451.188 639 454.5 c 639 457.812 641.688 460.5 645 460.5 c 648.312 460.5 651 457.812 651 454.5 c S endstream endobj 10 0 obj << /Type /Page /Parent 490 0 R /Resources 11 0 R /Contents 12 0 R /Thumb 329 0 R /MediaBox [ 0 0 684 873 ] /CropBox [ 0 0 684 873 ] /Rotate 0 >> endobj 11 0 obj << /ProcSet [ /PDF /Text ] /Font << /F1 515 0 R /F2 518 0 R /F3 261 0 R /F5 262 0 R /F6 263 0 R >> /ExtGState << /GS1 523 0 R /GS2 521 0 R >> /ColorSpace << /Cs9 520 0 R /Cs10 264 0 R >> >> endobj 12 0 obj << /Length 10022 >> stream 1 g /GS1 gs 0 873 m 0 873 l f q 1 i 27 846 603 -783 re 0 873 m W n 0 873 684 -873 re W n BT /F6 1 Tf 11 0 0 11 63 773.7676 Tm 0 0 0 1 k /GS2 gs 0.0149 Tc 0.025 Tw [(Perl News)-22173.7(6)]TJ /F5 1 Tf 10 0 0 10 63 763.2676 Tm [(Chris N)29.7(andor)]TJ /F6 1 Tf 11 0 0 11 63 740.2676 Tm -0.0001 Tc [(An IP T)73.9(e)0(lephone in 74 Lines of Perl)-11719.5(1)-0.1(2)]TJ /F5 1 Tf 10 0 0 10 63 727.7676 Tm [(L)12(incoln D. S)23.9(tein)]TJ /F6 1 Tf 11 0 0 11 63 701.7676 Tm 0 Tw [(Microperl)-22239(19)]TJ /F5 1 Tf 10 0 0 10 63 689.2676 Tm -0.0002 Tc 0.0251 Tw [(S)11.8(i)-0.1(mon Coz)-6(ens)]TJ /F6 1 Tf 11 0 0 11 63 663.2676 Tm -0.0001 Tc 0 Tw [(Spreadsheet::WriteExcel)-16129.2(22)]TJ /F5 1 Tf 10 0 0 10 63 650.7676 Tm -0.0002 Tc 0.0251 Tw [(J)35.9(o)-0.1(hn McN)29.6(amar)29.6(a)]TJ /F6 1 Tf 11 0 0 11 63 624.7676 Tm -0.0001 Tc [(Extending Perl with Inline.pm)-14024.1(30)]TJ /F5 1 Tf 10 0 0 10 63 612.2676 Tm [(B)5.9(rian I)23.9(ngerson)]TJ /F6 1 Tf 11 0 0 11 63 586.2676 Tm 0 Tw [(Finance::Quote)-20015.9(40)]TJ /F5 1 Tf 10 0 0 10 63 573.7676 Tm 0.025 Tw [(P)54.1(aul F)35.8(enwick)]TJ /F6 1 Tf 11 0 0 11 63 547.7676 Tm [(Finance::QuoteHist and HTML::T)73.9(ableExtract)-8431.2(46)]TJ /F5 1 Tf 10 0 0 10 63 535.2676 Tm [(M)6(atthew S)11.9(isk)]TJ /F6 1 Tf 11 0 0 11 63 509.2676 Tm [(Scanning HTML)-19740.6(51)]TJ /F5 1 Tf 10 0 0 10 63 496.7676 Tm [(S)11.9(ean M. B)11.9(u)0.2(r)5.8(k)-0.1(e)]TJ /F6 1 Tf 11 0 0 11 63 470.7676 Tm [(Smart Matching for Human Names)-12028.4(57)]TJ /F5 1 Tf 10 0 0 10 63 458.2676 Tm [(B)5.9(rian Lalonde)]TJ /F6 1 Tf 11 0 0 11 63 432.2676 Tm [(Parsing Natural Language with Lingua::LinkParser)-5529.2(60)]TJ /F5 1 Tf 10 0 0 10 63 419.7676 Tm -0.0002 Tc [(D)5.9(an B)5.7(rian)]TJ /F6 1 Tf 11 0 0 11 63 393.7676 Tm -0.0001 Tc [(Integrating Perl into Microsoft Office Innards)-7866.2(67)]TJ /F5 1 Tf 10 0 0 10 63 381.2676 Tm -0.0002 Tc [(T)39.8(im M)17.7(eado)11.8(w)11.8(c)0.1(r)5.7(o)0(ft)]TJ /F6 1 Tf 11 0 0 11 63 355.2676 Tm -0.0001 Tc [(Converting C to English with Perl)-12696.3(70)]TJ /F5 1 Tf 10 0 0 10 63 342.7675 Tm [(O)5.8(m)0.1(ri Schwar)-7.9(tz)]TJ /F6 1 Tf 11 0 0 11 63 316.7676 Tm [(DeCSS in English)-19076(74)]TJ 0 -2.3636 TD [(The Fifth Obfuscated Perl Contest Results)-9143.1(78)]TJ /F5 1 Tf 10 0 0 10 63 278.2675 Tm [(F)35.8(elix G)23.9(allo)]TJ /F6 1 Tf 11 0 0 11 63 252.2676 Tm [(Advertiser Index)-19520.4(73)]TJ ET 0 0.03 0.3 0 k 378 810 216 -711 re 362.001 252.268 m f* BT /F3 1 Tf 18 0 0 18 383.9974 779.0361 Tm 0 0 0 1 k -0.0002 Tc 0.0255 Tw [(The P)47.7(erl J)35.7(our)-8(nal)]TJ /F5 1 Tf 12 0 0 12 383.9974 761.7575 Tm -0.0001 Tc 0.0249 Tw [(a quar)-7.9(ter)11.8(ly magazine about P)41.9(e)0.2(r)11.8(l)]TJ /F1 1 Tf 0 -1.5 TD -0.0051 Tc [(V)100(olume 5, N)29.6(u)0(mber 3 \(#19\), F)47.7(all 2000)]TJ ET /Cs10 CS 1 SCN 0 J 0 j 6 w 10 M []0 d /GS1 gs 384 798 m 528 798 l S /GS2 gs 63 798 m 207 798 l S 0 0 0 1 K 0.5 w 380 735 m 592.52 735 l S BT 10 0 0 10 383.9974 720.0701 Tm -0.0001 Tc [(P)29.9(ublisher: M)11.9(ichael J. G)23.9(r)9.9(een)]TJ 0 -1.2 TD -0.0051 Tc [(E)5.8(ditor: J)29.7(on O)5.8(r)-17.7(want)]TJ T* [(A)12.1(d)0.2(v)5.8(e)0.1(r)-7.9(tising S)11.9(ales: LisaM)11.9(arie H)5.8(afeli)]TJ T* 0.0102 Tw [(P)29.9(r)6(oduction: V)24(OIS )-14.8(Communications/design)]TJ T* -0.0028 Tc 0.0244 Tw [(P)8.2(hoto E)8.1(ditor: Alan B)9.2(lount)]TJ T* -0.0001 Tc 0.025 Tw [(S)12.1(enior E)5.8(ditor: N)29.7(athan )44.8(T)119.9(o)0.3(r)5.8(kington)]TJ T* [(S)12.1(enior )44.8(T)119.9(ech E)5.8(d)0.1(itor: D)5.8(avid N. B)11.9(lank-E)5.8(delman)]TJ 0 -2.7772 TD -0.0101 Tc -0.0281 Tw [(Columnists: S)11.9(ean M. B)11.9(u)0.1(r)5.8(ke, D)5.8(amian Conway)84.9(, S)11.9(imon)]TJ 0 -1.2 TD 0.3202 Tw [(Coz)5.8(ens, S)23.9(tev)5.8(e Lidie, Chris N)29.8(andor)59.8(, J)29.7(on O)5.8(r)-17.7(want,)]TJ T* 0.025 Tw [(Lincoln D. S)23.9(tein)]TJ 0 -2.1 TD 0.0088 Tc 0.3611 Tw [(Contributors: G)23.9(r)9.9(eg B)11.9(acon, K)5.8(e)-0.1(n B)11.9(andes, H)17.8(ildo)]TJ 0 -1.2 TD -0.0051 Tc 0.2981 Tw [(B)11.9(iersma, B)11.9(ill B)11.9(i)0.3(r)-7.9(thisel, D)5.8(an B)11.9(rian, )14.7(V)9.9(icki B)11.9(r)6(o)12(wn,)]TJ T* 0.0602 Tw [(N)23.9(igel Chapman, Alligator D)5.7(escar)-7.9(tes, J)29.7(o)0(n D)11.9(r)-7.7(ukman,)]TJ T* -0.0067 Tw [(P)42.1(aul F)35.8(enwick, F)35.8(elix G)5.8(a)0.1(llo, S)11.9(am H)17.8(obbs, S)11.9(ean H)29.7(unter)59.7(,)]TJ T* 0.205 Tw [(B)11.9(r)0.1(ian I)11.9(ngerson, B)11.9(rian J)29.7(epson, J)29.7(oe J)29.7(ohnston, B)11.9(rian)]TJ T* 0.1793 Tw [(Lalonde, M)11.9(a)0.3(r)5.8(c)0( Lehmann, K)5.8(evin Lenz)5.8(o, )44.8(T)129.9(uomas J.)]TJ T* 0.0149 Tc 0.4156 Tw [(L)5.8(ukka, P)53.9(eter Leopold, K)5.8(en M)11.9(acF)47.8(arlane, J)29.7(ohn)]TJ T* -0.0051 Tc 0.3645 Tw [(M)24(c)0(N)29.7(amara, K)5.8(evin M)23.9(eltz)5.8(er)59.7(, B)11.9(rad M)35.8(urray)84.9(, D)5.8(avid)]TJ T* 0.147 Tw [(N)23.9(icol, Andr)9.7(e)-6(w)0( E. P)41.9(age, Clinton P)11.9(ier)5.8(ce, G)23.9(r)9.9(egor N.)]TJ T* 0.1883 Tw [(P)29.9(u)0.1(r)13.8(d)0.1(y)84.9(,)0( Randy Ray)84.8(, )44.8(T)119.8(ony R)11.9(ose, G)11.9(u)0.1(r)-7.9(usamy S)11.9(arathy)84.9(,)]TJ T* 0.3722 Tw [(D)6(an Schmidt, O)5.8(m)0.1(ri Schwar)-7.9(tz, M)11.9(a)0.1(tt S)11.9(isk, K)23.8(u)0.1(r)-7.9(t)]TJ T* 0.1614 Tw [(S)24.1(tarsinic, D)5.8(an S)23.8(ugalski, N)29.7(athan )44.8(T)119.9(o)0.2(r)5.8(kington, J)29.7(ohan)]TJ T* 0.124 Tw [(V)78(r)6(omans, J)29.7(e)0.1(r)9.7(e)-0.1(my )14.8(W)87.8(adsack, Larr)-17.9(y )14.8(W)87.8(all, D)11.9(uncan C.)]TJ T* 0.025 Tw [(White, K)5.8(en )14.8(W)9.7(illiams, B)11.9(r)-7.7(uce )14.8(W)9.7(i)0(nter)59.7(, A)41.9(v)5.9(e )14.8(W)81.7(rigley)]TJ 0 -2.6431 TD -0.0001 Tc [(S)24.1(ubscriptions, change of addr)9.7(ess, feedback:)]TJ 9 0 0 9 459.9188 380.8666 Tm 0 Tw (http://tpj.com)Tj 10 0 0 10 383.9974 367.8666 Tm 0.025 Tw [(or send mail to: custser)-17.9(v@tpj.com )]TJ 0 -1 TD (submissions@tpj.com letters@tpj.com)Tj T* 0 Tw (staff@tpj.com)Tj 0 -1.9 TD 0.025 Tw (or send postal mail to:)Tj 0 -1.2 TD [(Ear)-7.9(thW)77.8(eb)15.8(, )44.8(The P)53.9(erl J)29.7(ournal)]TJ T* 0 Tc [(2477 55th S)24(t. S)23.9(u)0.1(ite 101)]TJ T* -0.0001 Tc (Boulder CO 80301 USA)Tj T* 0 Tc (303.443.3388 ext. 3053)Tj 0 -1.8 TD -0.0001 Tc [(A)12.1(d)0.2(v)5.8(e)0.1(r)-7.9(tisers: send mail to ads@tpj.com.)]TJ 9 0 0 9 383.9974 237.2656 Tm -0.0325 Tw [(The P)53.9(erl J)29.7(ournal \(ISSN 1087-903X\) is published quar)-7.9(terly)]TJ 0 -1.2222 TD 0.0174 Tw [(b)5.8(y)0( Ear)-7.9(thW)77.8(eb I)11.9(nc. P)29.7(ublication office: 3 P)41.9(a)0.3(r)5.8(k)0( A)41.9(v)5.9(enue, N)29.7(e)-6(w)]TJ T* 0.1786 Tw [(Y)93.9(o)0.3(r)5.8(k, NY 10016, U.S. S)23.9(ubscriber rate: $18/four issues.)]TJ T* 0.0227 Tw [(F)36(o)0.3(r)9.7(eign subscriber rate: $25. S)11.9(ingle copies $7 in the U.S.,)]TJ T* 0.214 Tw [($9 else)-6(wher)9.7(e. P)53.9(eriodicals postage paid at M)11.9(idland,)-250.1(MI.)]TJ T* 0.0199 Tc 0.3801 Tw [(S)12.1(end addr)9.7(ess changes and fulfillment questions to)]TJ T* -0.0001 Tc 0.1741 Tw [(Ear)-7.9(thW)77.8(eb)15.8(, )44.8(The P)53.9(erl J)29.7(ournal, 2477 55th S)23.8(t., S)23.8(uite 101,)]TJ T* 0.025 Tw [(Boulder CO 80301 USA)]TJ 10 0 0 10 383.9974 133.0479 Tm [( 2000 )44.8(The P)53.9(erl J)29.7(ournal. All rights r)9.7(eser)-17.9(v)5.9(ed. )]TJ 0 -1.2 TD [(R)12.1(epr)5.8(oduction without permission is pr)5.8(ohibited.)]TJ T* [(P)29.9(rinted in the U)35.8(nited S)23.8(tates of America.)]TJ ET 380 409.38 m 592.52 409.38 l 380 253.64 m 592.52 253.64 l 380 149.64 m 592.52 149.64 l S BT 10 0 0 10 63 213.7979 Tm [(Co)15.8(v)5.9(er photo: M)23.9(onopoly money)84.9(. )]TJ 0 -2.4 TD [(Scan b)5.8(y)0( Alan B)11.9(lount.)]TJ T* [(Thanks to D)5.8(avid H. A)11.9(dler)59.7(, E)11.9(laine Ashton, and K)5.8(evin Lenz)5.8(o for the)]TJ 0 -1.2 TD [(last-minute networ)5.8(king effor)-7.9(ts that made this issue possible.)]TJ ET 0.125 w 63 230 m 363 230 l S 0.5 w 380 637.5 m 592.52 637.5 l S Q 0 0 0 0 k 1 i 37 874 186 -12 re 295.772 153.798 m f* BT /F2 1 Tf 8 0 0 8 39 864 Tm /Cs9 cs 1 scn -0.0007 Tc -0.0039 Tw (TPJ#19/9.26 9/27/00 10:35 AM Page 5)Tj ET 1 G 0 J 0 j 0.5 w 10 M []0 d 36 873 m 36 849 l 0 837 m 24 837 l 621 873 m 621 849 l 657 837 m 633 837 l 36 36 m 36 60 l 0 72 m 24 72 l 621 36 m 621 60 l 657 72 m 633 72 l S /Cs9 CS 1 SCN 0.25 w 36 873 m 36 849 l 0 837 m 24 837 l 621 873 m 621 849 l 657 837 m 633 837 l 36 36 m 36 60 l 0 72 m 24 72 l 621 36 m 621 60 l 657 72 m 633 72 l S 1 G 0.5 w 304.5 861 m 352.5 861 l 304.5 48 m 352.5 48 l 12 478.5 m 12 430.5 l 645 478.5 m 645 430.5 l 328.5 873 m 328.5 849 l 328.5 60 m 328.5 36 l 0 454.5 m 24 454.5 l 633 454.5 m 657 454.5 l 328.5 861 m 334.5 861 l 334.5 857.688 331.812 855 328.5 855 c 325.188 855 322.5 857.688 322.5 861 c 322.5 864.312 325.188 867 328.5 867 c 331.812 867 334.5 864.312 334.5 861 c 328.5 48 m 334.5 48 l 334.5 44.688 331.812 42 328.5 42 c 325.188 42 322.5 44.688 322.5 48 c 322.5 51.312 325.188 54 328.5 54 c 331.812 54 334.5 51.312 334.5 48 c 12 454.5 m 18 454.5 l 18 451.188 15.312 448.5 12 448.5 c 8.688 448.5 6 451.188 6 454.5 c 6 457.812 8.688 460.5 12 460.5 c 15.312 460.5 18 457.812 18 454.5 c 645 454.5 m 651 454.5 l 651 451.188 648.312 448.5 645 448.5 c 641.688 448.5 639 451.188 639 454.5 c 639 457.812 641.688 460.5 645 460.5 c 648.312 460.5 651 457.812 651 454.5 c S /Cs9 CS 1 SCN 0.25 w 304.5 861 m 352.5 861 l 304.5 48 m 352.5 48 l 12 478.5 m 12 430.5 l 645 478.5 m 645 430.5 l 328.5 873 m 328.5 849 l 328.5 60 m 328.5 36 l 0 454.5 m 24 454.5 l 633 454.5 m 657 454.5 l 328.5 861 m 334.5 861 l 334.5 857.688 331.812 855 328.5 855 c 325.188 855 322.5 857.688 322.5 861 c 322.5 864.312 325.188 867 328.5 867 c 331.812 867 334.5 864.312 334.5 861 c 328.5 48 m 334.5 48 l 334.5 44.688 331.812 42 328.5 42 c 325.188 42 322.5 44.688 322.5 48 c 322.5 51.312 325.188 54 328.5 54 c 331.812 54 334.5 51.312 334.5 48 c 12 454.5 m 18 454.5 l 18 451.188 15.312 448.5 12 448.5 c 8.688 448.5 6 451.188 6 454.5 c 6 457.812 8.688 460.5 12 460.5 c 15.312 460.5 18 457.812 18 454.5 c 645 454.5 m 651 454.5 l 651 451.188 648.312 448.5 645 448.5 c 641.688 448.5 639 451.188 639 454.5 c 639 457.812 641.688 460.5 645 460.5 c 648.312 460.5 651 457.812 651 454.5 c S endstream endobj 13 0 obj << /Type /Page /Parent 490 0 R /Resources 14 0 R /Contents 15 0 R /Thumb 331 0 R /MediaBox [ 0 0 684 873 ] /CropBox [ 0 0 684 873 ] /Rotate 0 >> endobj 14 0 obj << /ProcSet [ /PDF /Text /ImageB ] /Font << /F1 515 0 R /F2 518 0 R /F3 261 0 R /F4 266 0 R /F7 267 0 R >> /XObject << /Im1 16 0 R >> /ExtGState << /GS1 523 0 R /GS2 521 0 R >> /ColorSpace << /Cs9 520 0 R /Cs10 264 0 R >> >> endobj 15 0 obj << /Length 13368 >> stream 1 g /GS1 gs 0 873 m 0 873 l f q 1 i 27 846 603 -783 re 0 873 m W n 0 873 684 -873 re W n BT /F4 1 Tf 12 0 0 12 63 540.3574 Tm 0 0 0 1 k /GS2 gs 0 Tc 0 Tw (D)Tj 10.44 0 0 10.44 72.7556 540.3574 Tm -0.007 Tc (OT)Tj /F1 1 Tf 29.09 0 0 29.09 62.2934 502.3574 Tm 0 Tc (P)Tj /F4 1 Tf 11 0 0 11 78.25 514.3574 Tm -0.0002 Tc 0.2172 Tw (erl 6)Tj /F1 1 Tf 2.5244 0 TD -0.0001 Tc 0.2091 Tw [(is in dev)5.8(elopment. I)11.9(n)0( case y)5.8(ou think this is a)]TJ -2.5244 -1.0909 TD 0.0614 Tw [(typographical err)5.8(or)59.7(, it is v)5.8(ersion )]TJ /F4 1 Tf 12.7547 0 TD -0.0002 Tc 0 Tw (six)Tj /F1 1 Tf 1.1016 0 TD -0.0001 Tc 0.0615 Tw [(. N)29.8(o)0.1(t fiv)5.8(e, not fiv)5.8(e-)]TJ -15.2427 -1.0909 TD 0.0092 Tw [(dot-six, not the-v)5.8(ersion-formerly-kno)11.9(wn-as-fiv)5.8(e. S)11.9(ix. I)23.8(t)0( isn)69.8()79.9(t)]TJ T* 0.0199 Tc 0 Tw (the )Tj /F4 1 Tf 2.0247 0 TD [(T)119.9(opaz)]TJ /F1 1 Tf 3.2884 0 TD 0.477 Tw [(pr)5.8(oject fr)5.8(om )]TJ /F4 1 Tf 6.2767 0 TD 0 Tw (Chip)Tj -11.5898 -1.0909 TD -0.0001 Tc [(S)12(alz)5.8(enberg)]TJ /F1 1 Tf 4.8871 0 TD 0.2423 Tw [(\(an attempted r)9.7(e)-6(write)]TJ -4.8871 -1.0909 TD 0.279 Tw [(of P)53.9(erl in C++\), but a complete)]TJ T* 0.2202 Tw [(r)9.9(e)-6(write, fr)5.8(om scratch, b)5.8(y)0( the P)53.9(erl)]TJ T* 0.0333 Tw [(community)84.9(. I)23.8(t)0( is slated for alpha in)]TJ T* -0.0202 Tw [(J)35.8(uly 2001, with a r)9.7(elease six months)]TJ T* -0.0002 Tc 0 Tw [(later)59.6(.)]TJ 0 -2.1818 TD -0.0001 Tc 0.3282 Tw [(O)5.8(n)0( J)35.8(uly 18, the day befor)9.7(e the)]TJ 0 -1.0909 TD 0.3513 Tw [(sessions star)-7.9(ted at )]TJ /F4 1 Tf 8.055 0 TD -0.0002 Tc 0.365 Tw [(The OR)11.8(eilly)]TJ -8.055 -1.0909 TD 0.112 Tw [(P)59.8(erl Confer)19.6(ence 4.0)]TJ /F1 1 Tf 8.6522 0 TD -0.0001 Tc 0.1078 Tw [(in M)23.9(onter)9.7(ey)84.9(,)]TJ -8.6522 -1.0909 TD 0.1541 Tw [(CA, a small gr)5.8(oup of P)53.9(erl people,)]TJ T* 0.2763 Tw [(including S)11.9(alz)5.8(enberg, P)53.9(erl cr)9.7(eator)]TJ /F4 1 Tf T* 0.0134 Tc 0.3403 Tw [(Larr)-18(y W)91.7(all)]TJ /F1 1 Tf 4.8588 0 TD 0.0135 Tc 0.3614 Tw [(, curr)9.7(ent pumpkings)]TJ /F4 1 Tf -4.8588 -1.0909 TD 0.012 Tc 0.3775 Tw [(G)12(u)0.1(r)-7.9(u)0.1(samy S)11.9(arathy)]TJ /F1 1 Tf 8.8089 0 TD 0 Tw (and )Tj /F4 1 Tf 2.0987 0 TD [(J)24.1(a)0.2(r)5.8(kko)]TJ -10.9076 -1.0909 TD -0.0001 Tc [(H)12(ietaniemi)]TJ /F1 1 Tf 4.613 0 TD 0.0506 Tw (, and )Tj /F4 1 Tf 2.2886 0 TD 0.0167 Tw [(N)29.9(a)0.1(than T)120(o)0.2(r)5.8(kington)]TJ /F1 1 Tf 8.2413 0 TD 0.0506 Tw [(met to discuss P)53.9(erl)11.9()79.9(s)]TJ -15.1429 -1.0909 TD -0.0121 Tw [(futur)9.7(e. After much gnashing of teeth, they decided that P)53.9(erl)]TJ T* 0.0044 Tw [(should be r)9.7(e)-6(written. )44.8(The consensus was that P)53.9(erl is difficult)]TJ T* 0.1667 Tw [(to impr)5.8(o)15.9(v)5.9(e, extend, and embed, and these pr)5.8(oblems can)]TJ T* 0.0682 Tw [(only r)9.7(eally be fix)11.9(ed b)5.8(y)0( r)9.7(e)-6(writing. And since ther)9.7(e will be a)]TJ T* 0.0335 Tw [(r)9.9(e)-6(write, dev)5.8(elopers could take the oppor)-7.9(tunity to clean out)]TJ T* 0.0366 Tw [(some of the cr)-7.9(uft, including bad and seldom-used featur)9.7(es,)]TJ T* 0.025 Tw [(and to implement some long-wanted featur)9.7(es.)]TJ 0 -2.1818 TD 0.3143 Tw [(Later that same day)84.9(, they br)5.8(ought their findings to a)]TJ 0 -1.0909 TD 0.0492 Tw (meeting for members of )Tj /F4 1 Tf 9.7135 0 TD 0 Tw [(perl5-por)-7.9(ters)]TJ /F1 1 Tf 5.3684 0 TD 0.0491 Tw (, the mailing list for)Tj -15.0819 -1.0909 TD -0.009 Tw [(cor)9.7(e P)53.9(erl dev)5.8(elopment. After a consensus was r)9.7(eached ther)9.7(e,)]TJ T* 0.0554 Tw [(a basic r)5.8(oadmap for the dev)5.8(elopment of P)53.9(erl 6 was forged.)]TJ T* -0.0152 Tw [(A cor)9.7(e gr)5.8(oup of wor)5.8(kers was selected \(with )14.9(W)87.8(all as language)]TJ T* 0.1207 Tw [(designer and )44.8(T)119.9(o)0.2(r)5.8(kington as pr)5.8(oject manager\), and a basic)]TJ 25.3636 55.3382 TD 0.0523 Tw [(frame)-5.9(wor)5.8(k for mo)15.8(ving for)-17.9(war)13.8(d was dev)5.8(eloped, noting that)]TJ 0 -1.0909 TD 0.2604 Tw [(the old monolithic mailing list just wouldn)69.8()79.9(t)0( wor)5.8(k)0( any)]TJ T* -0.0002 Tc 0 Tw [(longer)59.6(.)]TJ T* -0.0001 Tc 0.1353 Tw [(P)53.9(erl 5 was my r)9.7(e)-6(write of P)53.9(erl, )14.8(W)87.8(all said. I think this)]TJ T* 0.0104 Tc 0.3645 Tw [(should be the community)29.7()79.8(s)0( r)9.6(e)-6(write of P)53.9(erl, and the)]TJ T* -0.0001 Tc 0.025 Tw [(community)29.7()79.9(s)0( r)9.7(e)-6(write of the community)84.9(.)]TJ 0 -2.1818 TD 0.2271 Tw [(S)12.1(ince then, the community has been activ)5.8(ely discussing)]TJ 0 -1.0909 TD -0.0204 Tw [(dev)5.8(elopment on a doz)5.8(en mailing lists, cr)9.7(eating R)11.9(equests F)35.8(o)0.2(r)]TJ T* 0.3543 Tw (Comment \(RFCs\), which will form the basis for the)Tj T* 0.0055 Tw [(technical wor)5.8(k ahead. A lot is happening \(252 RFCs as this)]TJ T* 0.0149 Tw [(issue goes to pr)9.7(ess\), a lot of people ar)9.7(e wor)5.8(king, and a lot is)]TJ T* 0.0172 Tw [(left to do)15.8(. S)11.9(ee the P)53.9(erl 6 page at http://www)74.9(.perl.org/perl6/)]TJ T* 0.0249 Tw [(for mor)9.7(e information.)]TJ 0 -2.1818 TD 0.1157 Tw [(Although P)53.9(erl 6 is mo)15.8(ving full speed ahead, P)53.9(erl 5 is not)]TJ 0 -1.0909 TD 0.1801 Tw [(being abandoned. G)11.9(u)0.1(r)-7.9(usamy S)11.9(arathy is maintaining 5.6,)]TJ T* 0.1526 Tw [(and J)29.7(a)0.3(r)5.8(kko H)17.8(ietaniemi, the ne)-5.9(w)5.8(est pumpking, is har)13.8(d at)]TJ T* 0.025 Tw [(wor)5.8(k on 5.7, the dev)5.8(elopment branch leading up to 5.8.)]TJ 0 -2.1818 TD 0.0016 Tw [(The P)53.9(erl 6 wor)5.8(k begins as the P)53.9(erl confer)9.7(ence season begins)]TJ 9 -1.0909 TD 0.0299 Tw [(to wrap up)15.8(. I)11.9(n)0( M)11.9(a)0.1(y)84.9(,)-0.1( the )]TJ /F4 1 Tf 9.6031 0 TD -0.0002 Tc -0.0046 Tw [(P)59.8(erl Whirl)]TJ /F1 1 Tf -9.6031 -1.0909 TD -0.0001 Tc 0.3471 Tw [(set sail, taking P)53.9(erl pr)5.8(ogrammers)]TJ T* 0.1305 Tw (and teachers, and their families, to)Tj T* 0.025 Tw (Alaska. )Tj 0 -2.1818 TD 0.3186 Tw [(I)12(n)0( J)35.8(une, the second )]TJ /F4 1 Tf 8.9731 0 TD 0.331 Tw [(y)35.8(et another)]TJ -8.9731 -1.0909 TD 0.0198 Tc 0.4983 Tw [(perl confer)19.6(ence)]TJ /F1 1 Tf 7.787 0 TD 0.4788 Tw (took place at)Tj /F4 1 Tf -7.787 -1.0909 TD -0.0002 Tc 0.21 Tw [(C)11.8(a)0.1(r)15.7(negie M)23.8(e)0(llon U)41.9(n)0.1(iv)29.6(ersity)]TJ /F1 1 Tf 11.6811 0 TD -0.0001 Tc 0.1572 Tw (. The)Tj -11.6811 -1.0909 TD 0.0377 Tw [(location is quite impor)-7.9(tant, because)]TJ T* 0.2716 Tw (CMU has a campus-wide 802.11)Tj T* 0.1075 Tw [(wir)9.7(eless networ)5.8(k, which confer)9.7(ence)]TJ T* 0.3653 Tw [(attendees took full adv)5.8(antage of)15.8(,)]TJ T* 0.0199 Tc 1.4207 Tw [(carr)-17.9(ying their )14.8(V)88(aios and)]TJ T* -0.0001 Tc 0.3317 Tw [(P)54(o)12(w)5.8(erBooks fr)5.8(om r)5.8(oom to r)5.8(oom)]TJ T* 0.1817 Tw (while checking email and chatting)Tj T* 0.025 Tw [(on IR)35.8(C.)]TJ -9 -2.1818 TD 0.2289 Tw [(Larr)-17.9(y )14.7(W)87.8(all gav)5.8(e the keynote, comparing the journey of)]TJ 0 -1.0909 TD 0.011 Tw (Christian in )Tj /F4 1 Tf 4.9185 0 TD -0.0002 Tc 0.0114 Tw [(P)11.9(ilgrim)69.7()91.7(s)0( P)29.6(r)5.8(ogr)19.6(ess)]TJ /F1 1 Tf 7.4929 0 TD -0.0059 Tc 0 Tw [(by)-5.9( )]TJ /F4 1 Tf 1.1931 0 TD -0.0001 Tc 0.0113 Tw [(J)24(ohn B)11.9(unyan)]TJ /F1 1 Tf 5.6818 0 TD 0.011 Tw (to that of)Tj -19.2863 -1.0909 TD -0.0002 Tc 0.1439 Tw [(a P)53.8(erl pr)5.7(ogrammer)59.6(. )]TJ /F4 1 Tf 8.0464 0 TD -0.0001 Tc 0.1494 Tw [(D)5.8(a)0(mian Conway)]TJ /F1 1 Tf 7.0721 0 TD 0.1438 Tw [(, ho)11.9(w)5.9(e)0(v)5.8(e)0.1(r)59.7(,)0( stole the)]TJ -15.1185 -1.0909 TD 0.0199 Tc 0.638 Tw [(sho)11.9(w with his mind-jarring paper on Q)5.9(uantum)]TJ T* 0.0052 Tc 0.3697 Tw [(S)24(uperposition and the F)33.8(irst )14.8(V)9.8(i)0.2(r)-7.9(t)-0.1(ue, which is far too)]TJ T* -0.0001 Tc 0.3257 Tw [(inter)9.7(esting and complex to be described her)9.7(e. S)11.9(ee his)]TJ /F4 1 Tf T* 0 Tw [(Q)5.9(uantum::S)17.8(uperpositions)]TJ /F1 1 Tf 10.8868 0 TD 0.025 Tw [(module on CP)39.7(AN.)]TJ /F4 1 Tf -10.8868 -2.1818 TD 0.1871 Tw [(M)11.9(a)0.2(r)5.8(k)0.1(-J)23.8(ason D)11.9(o)0(minus)]TJ /F1 1 Tf 9.5064 0 TD 0.1801 Tw (ran the popular )Tj /F4 1 Tf 6.7625 0 TD -0.0002 Tc 0.1514 Tw [(Lightning T)109.9(alks)]TJ /F1 1 Tf -16.2688 -1.0909 TD -0.0001 Tc 0.0842 Tw [(segment of yapc, wher)9.7(e people w)5.8(e)0.1(r)9.7(e)0( enjoined to giv)5.8(e fiv)5.8(e-)]TJ T* -0.0014 Tw [(minute pr)9.7(epar)9.7(ed talks about any subject they wished. Later)59.8(,)]TJ /F4 1 Tf T* -0.0002 Tc 0.1559 Tw [(J)23.9(on O)5.7(r)-17.9(want)]TJ /F1 1 Tf 5.4086 0 TD -0.0001 Tc 0.1501 Tw [(gav)5.8(e the second talk in his nine-par)-7.9(t series,)]TJ /F4 1 Tf -5.4086 -1.0909 TD 0.1262 Tw [(R)12(e)0(building P)59.8(ost-A)11.9(pocalyptic C)11.9(iviliation with P)59.8(erl)]TJ /F1 1 Tf 20.8501 0 TD 0.1215 Tw (, and)Tj -20.8501 -1.0909 TD 0.2207 Tw [(ho)11.9(w P)53.9(erl pr)5.8(ogrammers will be the ones to sur)-17.9(viv)5.8(e, and)]TJ 12 0 0 12 63 90.3543 Tm 1.1 Tc 0 Tw (6F)Tj 10.44 0 0 10.44 88.2795 90.3543 Tm -0.0001 Tc (ALL)Tj 12 0 0 12 109.6277 90.3543 Tm 0 Tc (2000)Tj /F3 1 Tf 31.4897 0.0003 TD -0.0002 Tc 0.0255 Tw [(The P)47.6(erl J)35.7(our)-8(nal #19)]TJ ET 0 0 0 0 k 63 798 531 -22.38 re 587.395 90.357 m f* BT /F4 1 Tf 16 0 0 16 63 786.4766 Tm 0 0 0 1 k 0 Tc 0 Tw (P)Tj 13.92 0 0 13.92 72.3652 786.4766 Tm -0.0002 Tc (ERL)Tj 16 0 0 16 102.5714 786.4766 Tm 0 Tc (N)Tj 13.92 0 0 13.92 114.5362 786.4766 Tm -0.0122 Tc [(EW)-12(S)]TJ /F7 1 Tf 16 0 0 16 499.6101 786.4766 Tm -0.0001 Tc 0.0278 Tw (Chris Nandor)Tj ET /Cs10 CS 1 SCN 0 J 0 j 6 w 10 M []0 d 63 807 m 207 807 l S 0 0.03 0.3 0 k /GS1 gs 63.5 746.5 251 -179 re 593.998 786.477 m f* BT /F1 1 Tf 10 0 0 10 71 731.7979 Tm 0 0 0 1 k /GS2 gs 0.3202 Tw [(U)35.9(nless other)-17.9(wise noted, all modules and documentation)]TJ 0 -1.1 TD 0.0199 Tc 0.5401 Tw [(mentioned her)9.7(e should be av)5.8(ailable on CP)39.8(AN, at)]TJ T* 0.0089 Tc 0.366 Tw [(http://www)74.9(.perl.com/CP)39.7(AN/. )14.8(Y)93.9(ou can sear)5.8(ch CP)39.8(AN at)]TJ T* -0.0001 Tc 0 Tw [(http://sear)5.8(ch.cpan.org.)]TJ 0 -2.2 TD 0.0134 Tc 0.3615 Tw [(This column)69.7()79.9(s)0( online companion is the P)53.8(erl N)29.7(e)-6(ws at)]TJ 0 -1.1 TD -0.0001 Tc 0.1529 Tw [(http://www)74.9(.ne)-5.9(ws.perl.org/. )44.8(T)119.9(o)0( join the daily-ne)-5.9(ws@perl.org)]TJ T* 0.0728 Tw [(mailing list and get all the latest P)53.9(erl ne)-5.9(ws deliv)5.8(er)9.7(ed to y)5.8(ou,)]TJ T* 0.025 Tw [(send mail to daily-ne)-5.9(ws-subscribe@perl.org.)]TJ 0 -2.2 TD 0.071 Tw [(I)5.9(f)0( y)5.8(ou hav)5.8(e any P)53.9(erl ne)-5.9(ws, including ne)-5.9(w modules or major)]TJ 0 -1.1 TD 0.1087 Tw [(module updates, or hav)5.8(e any comments or questions about)]TJ T* 0.2468 Tw [(P)54(erl N)29.7(e)-6(ws, please send it to ne)-5.9(ws@perl.org. I)5.8(f)0( y)5.8(our ne)-5.9(w)]TJ T* 0.1442 Tw [(module is not listed belo)11.9(w)74.9(,)0( it might just be that w)5.8(e)0( didn)69.8()79.9(t)]TJ T* 0.025 Tw [(kno)11.9(w about it, so send in y)5.8(our mail.)]TJ ET 0 0 0 1 K 1 w /GS1 gs 63.5 746.5 251 -179 re 212.371 577.798 m S 0 0 0 0 k /GS2 gs 222.86 478.29 209.14 -157.88 re 212.371 577.798 m f* /GS1 gs q 189.809 0 0 136.7993 231.95 331.5207 cm /Im1 Do Q Q 0 0 0 0 k /GS2 gs 1 i 37 874 186 -12 re f* BT /F2 1 Tf 8 0 0 8 39 864 Tm /Cs9 cs 1 scn -0.0007 Tc -0.0039 Tw (TPJ#19/9.26 9/27/00 10:35 AM Page 6)Tj ET 1 G 0 J 0 j 0.5 w 10 M []0 d 36 873 m 36 849 l 0 837 m 24 837 l 621 873 m 621 849 l 657 837 m 633 837 l 36 36 m 36 60 l 0 72 m 24 72 l 621 36 m 621 60 l 657 72 m 633 72 l S /Cs9 CS 1 SCN 0.25 w 36 873 m 36 849 l 0 837 m 24 837 l 621 873 m 621 849 l 657 837 m 633 837 l 36 36 m 36 60 l 0 72 m 24 72 l 621 36 m 621 60 l 657 72 m 633 72 l S 1 G 0.5 w 304.5 861 m 352.5 861 l 304.5 48 m 352.5 48 l 12 478.5 m 12 430.5 l 645 478.5 m 645 430.5 l 328.5 873 m 328.5 849 l 328.5 60 m 328.5 36 l 0 454.5 m 24 454.5 l 633 454.5 m 657 454.5 l 328.5 861 m 334.5 861 l 334.5 857.688 331.812 855 328.5 855 c 325.188 855 322.5 857.688 322.5 861 c 322.5 864.312 325.188 867 328.5 867 c 331.812 867 334.5 864.312 334.5 861 c 328.5 48 m 334.5 48 l 334.5 44.688 331.812 42 328.5 42 c 325.188 42 322.5 44.688 322.5 48 c 322.5 51.312 325.188 54 328.5 54 c 331.812 54 334.5 51.312 334.5 48 c 12 454.5 m 18 454.5 l 18 451.188 15.312 448.5 12 448.5 c 8.688 448.5 6 451.188 6 454.5 c 6 457.812 8.688 460.5 12 460.5 c 15.312 460.5 18 457.812 18 454.5 c 645 454.5 m 651 454.5 l 651 451.188 648.312 448.5 645 448.5 c 641.688 448.5 639 451.188 639 454.5 c 639 457.812 641.688 460.5 645 460.5 c 648.312 460.5 651 457.812 651 454.5 c S /Cs9 CS 1 SCN 0.25 w 304.5 861 m 352.5 861 l 304.5 48 m 352.5 48 l 12 478.5 m 12 430.5 l 645 478.5 m 645 430.5 l 328.5 873 m 328.5 849 l 328.5 60 m 328.5 36 l 0 454.5 m 24 454.5 l 633 454.5 m 657 454.5 l 328.5 861 m 334.5 861 l 334.5 857.688 331.812 855 328.5 855 c 325.188 855 322.5 857.688 322.5 861 c 322.5 864.312 325.188 867 328.5 867 c 331.812 867 334.5 864.312 334.5 861 c 328.5 48 m 334.5 48 l 334.5 44.688 331.812 42 328.5 42 c 325.188 42 322.5 44.688 322.5 48 c 322.5 51.312 325.188 54 328.5 54 c 331.812 54 334.5 51.312 334.5 48 c 12 454.5 m 18 454.5 l 18 451.188 15.312 448.5 12 448.5 c 8.688 448.5 6 451.188 6 454.5 c 6 457.812 8.688 460.5 12 460.5 c 15.312 460.5 18 457.812 18 454.5 c 645 454.5 m 651 454.5 l 651 451.188 648.312 448.5 645 448.5 c 641.688 448.5 639 451.188 639 454.5 c 639 457.812 641.688 460.5 645 460.5 c 648.312 460.5 651 457.812 651 454.5 c S endstream endobj 16 0 obj << /Type /XObject /Subtype /Image /Width 111 /Height 80 /BitsPerComponent 8 /ColorSpace /DeviceGray /Length 1744 /Filter /FlateDecode >> stream HԗMhGBu8A=(NMA M)EipR,Nk5ULQJ-jжF8( bC|CCN2YD^ɂ{۷g!^>N {vcE+,~,@G0!i*7F=VBM:;D/<x5͐熁sN3@a Ka$zǵ4M#$t=nSQ`8#(|s5.O<}+rrY.ۧmWUinЏ p#Ĭ 8fA3WP5FfW'4&'Fg$AR? W  pYl;7Jcrkh]qY1݃ey80Lv۸Lӑ7:1bp`ZVSe0]˸j>.hhzN#c)k7ݣ4Ej+sgRzD.xfՔW#k(CK8%yn@Cڅ]qЄlY\Ssa̼gᮢ2WnD)RvL?zc ,J.|L7҂&+%x*-pkRY2qqK~&{0tu] $2gf_,{$i4xѩWc:nB~d9?k=D \x7RE)0%$ҕG'l.w!:u9W80 'Q5~-fÆr(ѓ3Zjsw na*zM^ %鹵,Sk- k8Ԛ * ɐ׊^-!\*?BɩwGBeo!\Anmp .z`I%.)Ή;Bx֗:#"pnGr6ye c5;e|m ؓJ?,E~3+qJhDvةaPw6N7jwYv1qYj%тµ('e),5IN-NVy T33inЭ y۸U\8[ՠpwWqp J#(T\i3@![Z;cBŭBN6lig<8='Hy?bפ)7dT?a,c)1qMu5t8j%Ǥc6)pGޛ$ bf{cBn,;߫M!QW.*$.Ii'2)% 1JԬE쪌ɨs~BL@ or4$ob&Vx]E@\RyGq5@:P}+7ta8mܯ#湓Inep=OB8 iO;R>: x@pӷ5 % endstream endobj 17 0 obj << /Type /Page /Parent 490 0 R /Resources 18 0 R /Contents 19 0 R /Thumb 333 0 R /MediaBox [ 0 0 684 873 ] /CropBox [ 0 0 684 873 ] /Rotate 0 >> endobj 18 0 obj << /ProcSet [ /PDF /Text ] /Font << /F1 515 0 R /F2 518 0 R /F3 261 0 R /F4 266 0 R /F8 268 0 R /F9 269 0 R >> /ExtGState << /GS1 523 0 R /GS2 521 0 R >> /ColorSpace << /Cs9 520 0 R >> >> endobj 19 0 obj << /Length 10503 >> stream 1 g /GS1 gs 0 873 m 0 873 l f q 1 i 27 846 603 -783 re 0 873 m W n 0 873 684 -873 re W n BT /F1 1 Tf 11 0 0 11 63 802.0776 Tm 0 0 0 1 k /GS2 gs -0.0001 Tc 0.025 Tw [(about ho)11.9(w a lot of ar)-7.9(t is r)9.7(eally bad.)]TJ /F4 1 Tf 0 -2.1818 TD -0.0002 Tc 0.1213 Tw [(K)5.8(evin Lenz)5.7(o)]TJ /F1 1 Tf 5.2819 0 TD -0.0001 Tc 0.1167 Tw [(, the man behind yapc, star)-7.9(ted )]TJ /F4 1 Tf 12.6682 0 TD 0.1212 Tw [(Y)89.8(et Another)]TJ -17.95 -1.0909 TD 0 Tw [(S)5.9(ociety)]TJ /F1 1 Tf 3.3065 0 TD 0.1271 Tw [(to be the par)9.7(ent organization behind yapc. M)23.9(o)0.2(r)9.7(e)]TJ -3.3065 -1.0909 TD 0.1849 Tw [(information can be found at http://www)74.9(.y)5.8(etanother)59.7(.org/.)]TJ T* 0.1018 Tw [(Lenz)5.8(o et al. ar)9.7(e looking for a v)5.8(enue for next y)5.8(ear's N)29.8(o)0.2(r)-7.9(t)0.1(h)]TJ T* 0.0527 Tw [(American yapc \(either Boston or M)23.9(ontr)9.7(eal\), while the first)]TJ /F4 1 Tf T* -0.0002 Tc 0 Tw [(yapc::E)17.7(ur)5.7(ope)]TJ /F1 1 Tf 5.5908 0 TD -0.0001 Tc -0.0119 Tw [(is also being held this y)5.8(ear)59.7(, S)11.9(eptember 22-24,)]TJ -5.5908 -1.0909 TD 0 Tc 0.0229 Tw [(2000, at the )]TJ /F4 1 Tf 4.9974 0 TD -0.0001 Tc 0.0238 Tw [(I)12(nstitute for Contemporar)-17.9(y Ar)-7.9(ts)]TJ /F1 1 Tf 13.5238 0 TD 0.023 Tw (in London.)Tj -18.5211 -2.2273 TD -0.0014 Tw [(While P)53.9(erl 6 was the big ne)-5.9(ws at the P)53.9(erl Confer)9.7(ence, other)]TJ 0 -1.0909 TD 0.33 Tw [(things happened. O)5.8(ne of the coolest things was that,)]TJ T* 0.221 Tw [(because many par)-7.9(ticipants w)5.8(e)0.1(r)9.7(e)0( addicted to the wir)9.7(eless)]TJ T* 0.0645 Tw [(access found at yapc, )14.8(Y)89.8(et Another S)11.9(ociety set up a wir)9.7(eless)]TJ T* 0.1208 Tw [(networ)5.8(k co)15.8(v)5.9(ering many of the confer)9.7(ence r)5.8(ooms at )44.8(TPC,)]TJ T* 0.0564 Tw (too, and )Tj /F4 1 Tf 3.5789 0 TD 0.0586 Tw [(T)32.1(i)0(m OR)11.9(eilly)]TJ /F1 1 Tf 5.7525 0 TD 0.0564 Tw [(will be tr)-17.9(ying to get wir)9.7(eless access)]TJ -9.3315 -1.0909 TD 0.025 Tw [(for futur)9.7(e)0( OR)11.9(eilly P)53.9(erl Confer)9.7(ences.)]TJ 0 -2.2273 TD 0.0446 Tw [(The confer)9.7(ence had two days filled with tutorials, and two)]TJ 0 -1.0909 TD 0.3452 Tw [(mor)9.7(e)0( filled with talks, with BOFs, par)-7.9(ties, and mor)9.7(e)]TJ 0 -12 TD 0.2437 Tw [(sprinkled about. )14.8(W)87.8(a)0.1(ll again gav)5.8(e the keynote, this y)5.8(ear)]TJ 0 -1.0909 TD 0.0199 Tc 0.4074 Tw [(focusing on music. H)17.8(e)0( br)5.8(ought out a plethora of)]TJ T* 0.0082 Tc 0.3667 Tw [(pitchmakers and discussed similarities and differ)9.6(ences)]TJ T* -0.0001 Tc 0.025 Tw [(betw)5.8(een pr)5.8(ogramming P)53.9(erl and playing music.)]TJ 0 -2.2273 TD 0.1156 Tw [(B)11.9(unches of awar)13.8(ds w)5.8(e)0.1(r)9.7(e)0( giv)5.8(en out at the confer)9.7(ence. )44.8(The)]TJ 0 -1.0909 TD 0.0001 Tc 0.0034 Tw [(annual P)54.1(erl Confer)9.9(ence awar)14(ds fr)6(om OR)12.1(eilly w)6(e)0.3(r)9.9(e)0.2( giv)6(en to)]TJ /F4 1 Tf T* -0.0007 Tc 0.0463 Tw [(N)29.3(athan B)5.2(a)-0.5(iley)]TJ /F1 1 Tf 5.8485 0 TD 0 Tc 0 Tw (, )Tj /F4 1 Tf 0.544 0 TD -0.0002 Tc 0.0457 Tw [(Andr)19.6(ew B)5.7(r)5.8(omage)]TJ /F1 1 Tf 7.126 0 TD -0.0001 Tc 0.044 Tw (, and )Tj /F4 1 Tf 2.2755 0 TD -0.0002 Tc 0.0458 Tw [(Andr)19.6(ew C)5.7(r)19.7(eer)]TJ /F1 1 Tf 6.0077 0 TD -0.0003 Tc 0 Tw (for)Tj /F4 1 Tf -21.8017 -1.0909 TD -0.0001 Tc -0.024 Tw [(Best W)91.7(eb )-35.8(A)11.9(pplication)]TJ /F1 1 Tf 9.119 0 TD 0 Tw [(\(M)29.8(y)84.9(.)0(U)35.8(niv)5.8(ersity\); )]TJ /F4 1 Tf 6.6063 0 TD -0.0006 Tc 0.0123 Tw [(B)5.5(radley M. K)23.4(uhn)]TJ /F1 1 Tf -15.7253 -1.0909 TD -0.0002 Tc 0 Tw (for )Tj /F4 1 Tf 1.3539 0 TD -0.0394 Tw [(Best T)119.9(echnical )-35.8(P)47.7(aper)]TJ /F1 1 Tf 8.6676 0 TD -0.0001 Tc -0.0035 Tw (\(perljvm\); and )Tj /F4 1 Tf 5.7732 0 TD -0.0008 Tc -0.0388 Tw [(Andy W)91(a)-0.5(r)19(dley)]TJ /F1 1 Tf 6.007 0 TD -0.0003 Tc 0 Tw (for)Tj /F4 1 Tf -21.8017 -1.0909 TD -0.0002 Tc 0.1801 Tw [(Best N)29.6(e)-0.1(w M)23.8(odule)]TJ /F1 1 Tf 8.0368 0 TD -0.0001 Tc 0.1732 Tw [(\()-11.9(T)119.9(emplate )44.8(T)119.9(oolkit\). D)5.8(a)0(mian Conway)]TJ -8.0368 -1.0909 TD 0.0117 Tw (again won the )Tj /F4 1 Tf 5.7088 0 TD -0.0002 Tc -0.0235 Tw [(Larr)-18(y W)91.6(all )-35.7(A)41.8(war)19.6(d)]TJ /F1 1 Tf 7.4873 0 TD -0.0001 Tc 0.0117 Tw (for his )Tj /F4 1 Tf 2.7256 0 TD 0 Tw [(T)120(ext::A)17.8(utofor)15.8(mat)]TJ /F1 1 Tf -15.9218 -1.0909 TD -0.0274 Tw [(module. D)5.8(a)0(mian was withdrawn fr)5.8(om futur)9.7(e consideration,)]TJ T* 0.2595 Tw [(and the B)5.8(est )44.8(T)119.9(echnical P)41.9(aper awar)13.8(d will hencefor)-7.9(th be)]TJ T* 0.025 Tw [(kno)11.9(wn as the )]TJ /F4 1 Tf 5.4351 0 TD -0.0002 Tc 0.0261 Tw [(D)5.7(a)-0.1(mian Conway A)41.9(war)19.6(d)]TJ /F1 1 Tf 9.8288 0 TD 0 Tc 0 Tw (.)Tj -15.2639 -2.2273 TD -0.0001 Tc (The )Tj /F4 1 Tf 1.8036 0 TD -0.0002 Tc -0.0178 Tw [(P)59.8(erl M)23.8(ongers)]TJ /F1 1 Tf 5.6615 0 TD -0.0001 Tc -0.0171 Tw [(and OR)11.9(eilly gav)5.8(e out the )]TJ /F4 1 Tf 10.0428 0 TD -0.0178 Tw [(White C)11.9(a)0(mel)]TJ /F1 1 Tf -17.508 -1.0909 TD 0.3546 Tw [(awar)13.8(ds, giv)5.8(en to people with significant non-technical)]TJ T* -0.0241 Tw [(contributions to P)53.9(erl: )]TJ /F4 1 Tf 8.4054 0 TD -0.0002 Tc -0.025 Tw [(E)5.9(laine A)-6(shton)]TJ /F1 1 Tf 5.9469 0 TD 0 Tw (for )Tj /F4 1 Tf 1.3333 0 TD -0.025 Tw [(P)59.8(erl U)29.7(ser G)23.8(r)5.8(oups)]TJ /F1 1 Tf 6.9735 0 TD 0 Tc 0 Tw (,)Tj /F4 1 Tf -22.6591 -1.0909 TD 0.0198 Tc 0.4903 Tw [(Chris N)29.7(andor)]TJ /F1 1 Tf 7.1158 0 TD 0 Tw (for )Tj /F4 1 Tf 1.9085 0 TD 0.4902 Tw [(P)59.9(erl Community)]TJ /F1 1 Tf 7.6279 0 TD 0.4711 Tw [(, and N)29.8(athan)]TJ -16.6521 -1.0909 TD -0.0001 Tc 0.025 Tw [(T)119.9(o)0.2(r)5.8(kington for )]TJ /F4 1 Tf 6.0363 0 TD -0.0002 Tc 0.026 Tw [(P)59.8(erl A)5.7(d)0.1(v)35.7(ocacy)]TJ /F1 1 Tf 5.7303 0 TD 0 Tc 0 Tw (.)Tj -11.7667 -2.2273 TD 0.0013 Tc 0.3736 Tw [(Ashton, Conway)84.9(, and D)11.9(ominus judged a P)53.9(erl poetr)-17.9(y)]TJ 0 -1.0909 TD -0.0001 Tc 0.1021 Tw [(contest. H)17.8(onorable mentions w)5.8(ent to )]TJ /F4 1 Tf 15.1969 0 TD -0.0006 Tc 0.1065 Tw [(R. G)5.3(eoffr)19.2(ey A)41.4(v)29.4(er)-18.4(y)]TJ /F1 1 Tf 7.4622 0 TD 0 Tc 0 Tw (,)Tj /F4 1 Tf -22.6591 -1.0909 TD -0.0001 Tc 0.1671 Tw [(B)6(rad B)5.8(axter)]TJ /F1 1 Tf 5.0498 0 TD 0.1609 Tw (, and )Tj /F4 1 Tf 2.5094 0 TD -0.0002 Tc 0.1315 Tw [(S)23.9(tev)29.6(e T)107(rigg)]TJ /F1 1 Tf 4.615 0 TD -0.0001 Tc 0.1609 Tw [(. N)29.7(athan )44.8(T)119.9(o)0.2(r)5.8(kington)69.8()79.9(s wife)]TJ /F4 1 Tf -12.1741 -1.0909 TD 0.1857 Tw [(J)24(enine A)5.8(barbanel)]TJ /F1 1 Tf 7.6446 0 TD 0.1787 Tw [(won thir)13.8(d place for her P)53.9(erl wido)11.9(w)23.9()]TJ -7.6446 -1.0909 TD 0 Tw (haiku; )Tj /F4 1 Tf 2.7233 0 TD 0.0559 Tw [(P)47.9(a)0(ul M)11.9(akepeace)]TJ /F1 1 Tf 6.9694 0 TD 0.0539 Tw (took second with his Latin haiku;)Tj 12 0 0 12 523.3723 90.3543 Tm 0 Tc 0 Tw (F)Tj 10.44 0 0 10.44 529.4518 90.3543 Tm -0.0001 Tc (ALL)Tj 12 0 0 12 550.7999 90.3543 Tm 0 Tc 0.025 Tw [(2000 7)]TJ /F3 1 Tf -40.65 0 TD -0.0002 Tc 0.0255 Tw [(The P)47.6(erl J)35.7(our)-8(nal #19)]TJ /F9 1 Tf 14 0 0 14 87.0458 538.4376 Tm -0.0102 Tc 0.0278 Tw [(P)74.7(erl 5 was m)34.7(y)0( r)19.6(e)14.9(write of P)74.7(erl,)99.7( )]TJ -0.2239 -1.1429 TD [(W)59.6(all said.)-391.7(I think this should be )]TJ 0.0747 -1.1429 TD [(the comm)9.6(unity)79.6(s r)19.6(e)14.9(write of P)74.7(erl,)]TJ 0.2031 -1.1429 TD [(and the comm)9.6(unity)79.6(s r)19.6(e)14.9(write of )]TJ 3.3725 -1.1429 TD [(the comm)9.6(unity)79.6(.)99.6()]TJ ET 0 0 0 1 K 0 J 0 j 2 w 10 M []0 d 63 558.02 m 315 558.02 l S 0.667 w 63 555.35 m 315 555.35 l 63 464.29 m 315 464.29 l S 2 w 63 461.62 m 315 461.62 l S 0 0 0 0.1 k /GS1 gs 342.5 809.5 251 -341 re 242.985 474.438 m f* 1 w 342.5 809.5 251 -341 re S BT /F8 1 Tf 20 0 0 20 363.8174 662.3976 Tm 0 0 0 1 k /GS2 gs -0.0001 Tc 0 Tw [(COMMER)35.8(CETEC.COM)]TJ 24 0 0 24 426.5345 633.5977 Tm -0.0002 Tc 0.0255 Tw (1/4 page)Tj 0.57 -1.2 TD -0.0004 Tc 0 Tw [(NE)11.6(W)]TJ ET 0 0 0 0.1 k /GS1 gs 342.5 458.5 251 -341 re 495.79 604.798 m f* 342.5 458.5 251 -341 re S BT 24 0 0 24 381.7466 325.7976 Tm 0 0 0 1 k /GS2 gs -0.0002 Tc [(INFORMA)81.6(TION)]TJ 1.1772 -1.2 TD -0.0001 Tc [(FOUNDR)44.8(Y)]TJ 0.6889 -1.2 TD -0.0002 Tc 0.0255 Tw (1/4 page)Tj 0.1088 -1.2 TD [(P)11.9(i)-0.1(ck U)29.6(p)]TJ ET Q 0 0 0 0 k /GS2 gs 1 i 37 874 186 -12 re 506.857 239.398 m f* BT /F2 1 Tf 8 0 0 8 39 864 Tm /Cs9 cs 1 scn -0.0007 Tc -0.0039 Tw (TPJ#19/9.26 9/27/00 10:35 AM Page 7)Tj ET 1 G 0 J 0 j 0.5 w 10 M []0 d 36 873 m 36 849 l 0 837 m 24 837 l 621 873 m 621 849 l 657 837 m 633 837 l 36 36 m 36 60 l 0 72 m 24 72 l 621 36 m 621 60 l 657 72 m 633 72 l S /Cs9 CS 1 SCN 0.25 w 36 873 m 36 849 l 0 837 m 24 837 l 621 873 m 621 849 l 657 837 m 633 837 l 36 36 m 36 60 l 0 72 m 24 72 l 621 36 m 621 60 l 657 72 m 633 72 l S 1 G 0.5 w 304.5 861 m 352.5 861 l 304.5 48 m 352.5 48 l 12 478.5 m 12 430.5 l 645 478.5 m 645 430.5 l 328.5 873 m 328.5 849 l 328.5 60 m 328.5 36 l 0 454.5 m 24 454.5 l 633 454.5 m 657 454.5 l 328.5 861 m 334.5 861 l 334.5 857.688 331.812 855 328.5 855 c 325.188 855 322.5 857.688 322.5 861 c 322.5 864.312 325.188 867 328.5 867 c 331.812 867 334.5 864.312 334.5 861 c 328.5 48 m 334.5 48 l 334.5 44.688 331.812 42 328.5 42 c 325.188 42 322.5 44.688 322.5 48 c 322.5 51.312 325.188 54 328.5 54 c 331.812 54 334.5 51.312 334.5 48 c 12 454.5 m 18 454.5 l 18 451.188 15.312 448.5 12 448.5 c 8.688 448.5 6 451.188 6 454.5 c 6 457.812 8.688 460.5 12 460.5 c 15.312 460.5 18 457.812 18 454.5 c 645 454.5 m 651 454.5 l 651 451.188 648.312 448.5 645 448.5 c 641.688 448.5 639 451.188 639 454.5 c 639 457.812 641.688 460.5 645 460.5 c 648.312 460.5 651 457.812 651 454.5 c S /Cs9 CS 1 SCN 0.25 w 304.5 861 m 352.5 861 l 304.5 48 m 352.5 48 l 12 478.5 m 12 430.5 l 645 478.5 m 645 430.5 l 328.5 873 m 328.5 849 l 328.5 60 m 328.5 36 l 0 454.5 m 24 454.5 l 633 454.5 m 657 454.5 l 328.5 861 m 334.5 861 l 334.5 857.688 331.812 855 328.5 855 c 325.188 855 322.5 857.688 322.5 861 c 322.5 864.312 325.188 867 328.5 867 c 331.812 867 334.5 864.312 334.5 861 c 328.5 48 m 334.5 48 l 334.5 44.688 331.812 42 328.5 42 c 325.188 42 322.5 44.688 322.5 48 c 322.5 51.312 325.188 54 328.5 54 c 331.812 54 334.5 51.312 334.5 48 c 12 454.5 m 18 454.5 l 18 451.188 15.312 448.5 12 448.5 c 8.688 448.5 6 451.188 6 454.5 c 6 457.812 8.688 460.5 12 460.5 c 15.312 460.5 18 457.812 18 454.5 c 645 454.5 m 651 454.5 l 651 451.188 648.312 448.5 645 448.5 c 641.688 448.5 639 451.188 639 454.5 c 639 457.812 641.688 460.5 645 460.5 c 648.312 460.5 651 457.812 651 454.5 c S endstream endobj 20 0 obj << /Type /Page /Parent 490 0 R /Resources 21 0 R /Contents 22 0 R /Thumb 335 0 R /MediaBox [ 0 0 684 873 ] /CropBox [ 0 0 684 873 ] /Rotate 0 >> endobj 21 0 obj << /ProcSet [ /PDF /Text ] /Font << /F1 515 0 R /F2 518 0 R /F3 261 0 R /F4 266 0 R >> /ExtGState << /GS1 523 0 R /GS2 521 0 R >> /ColorSpace << /Cs9 520 0 R >> >> endobj 22 0 obj << /Length 16748 >> stream 1 g /GS1 gs 0 873 m 0 873 l f q 1 i 27 846 603 -783 re 0 873 m W n 0 873 684 -873 re W n BT /F1 1 Tf 11 0 0 11 63 802.0776 Tm 0 0 0 1 k /GS2 gs -0.0002 Tc 0 Tw (and )Tj /F4 1 Tf 1.6833 0 TD -0.0043 Tw [(R)11.9(onald J. K)-6(i)-0.1(mball)]TJ /F1 1 Tf 7.7175 0 TD -0.0001 Tc -0.0041 Tw (won first for his haiku that was not)Tj -9.4008 -1.0909 TD 0.1771 Tw [(only about natur)9.7(e, as all haikus should be, but was also)]TJ T* 0.025 Tw [(written in P)53.9(erl.)]TJ /F4 1 Tf 0 -2.1818 TD -0.0002 Tc 0 Tw [(A)5.9(ctiv)29.6(eS)23.8(tate)]TJ /F1 1 Tf 4.724 0 TD -0.0001 Tc -0.0062 Tw (had a contest, too; the )Tj /F4 1 Tf 8.7897 0 TD -0.0065 Tw [(P)59.9(erl P)59.8(o)17.8(w)5.9(er Contest)]TJ /F1 1 Tf 8.2879 0 TD -0.0003 Tc 0 Tw (for)Tj -21.8017 -1.0909 TD -0.0001 Tc 0.0107 Tw [(inno)15.8(v)5.9(ativ)5.8(e pr)5.8(ograms using P)53.9(erl. )]TJ /F4 1 Tf 12.6878 0 TD -0.0002 Tc 0.0112 Tw [(M)11.8(ichael G. Schw)5.7(er)15.7(n)]TJ /F1 1 Tf 8.5507 0 TD 0 Tw (won)Tj -21.2385 -1.0909 TD -0.0001 Tc 0.2012 Tw (for his )Tj /F4 1 Tf 3.1045 0 TD -0.0002 Tc 0 Tw [(T)32(ie::M)11.8(ath)]TJ /F1 1 Tf 4.4981 0 TD -0.0001 Tc 0.2012 Tw [(module, which lets y)5.8(ou tie a hash to)]TJ -7.6026 -1.0909 TD 0.025 Tw (mathematical functions.)Tj 0 -2.1818 TD 0.077 Tw [(OR)11.9(eilly has r)9.7(eleased the long-awaited thir)13.8(d edition of the)]TJ /F4 1 Tf 0 -1.0909 TD -0.012 Tc 0 Tw [(Ca)-11.9(m)-11.8(e)-11.9(l)]TJ /F1 1 Tf 2.8602 0 TD -0.0001 Tc -0.0133 Tw (book, a.k.a. )Tj /F4 1 Tf 4.7165 0 TD -0.0002 Tc -0.0138 Tw [(P)29.8(r)5.8(ogramming P)59.7(erl)]TJ /F1 1 Tf 7.7628 0 TD -0.0001 Tc -0.0134 Tw [(b)5.8(y)0( Larr)-17.9(y )14.8(W)87.8(all, )]TJ /F4 1 Tf 5.7229 0 TD -0.1201 Tc 0 Tw [(To)-119.9(m)]TJ -21.0624 -1.0909 TD -0.0001 Tc (Christiansen)Tj /F1 1 Tf 5.1797 0 TD 0.0783 Tw [(, and J)29.7(on O)5.8(r)-17.7(want; and the second edition of)]TJ /F4 1 Tf -5.1797 -1.0909 TD -0.0002 Tc 0.1241 Tw [(C)11.8(GI P)29.6(r)5.8(ogramming with P)59.7(erl)]TJ /F1 1 Tf 12.4205 0 TD -0.0059 Tc 0 Tw [(by)-5.9( )]TJ /F4 1 Tf 1.3015 0 TD -0.0001 Tc 0.124 Tw [(Scott G)11.9(u)0.1(elich)]TJ /F1 1 Tf 5.6795 0 TD 0 Tc 0 Tw (, )Tj /F4 1 Tf 0.6194 0 TD -0.0001 Tc [(S)12(hishir)]TJ -20.0209 -1.0909 TD -0.0002 Tc [(G)11.9(undav)5.7(aram)]TJ /F1 1 Tf 5.3088 0 TD -0.0001 Tc 0.1499 Tw (, and )Tj /F4 1 Tf 2.4872 0 TD 0.1557 Tw [(G)12(unther B)11.9(i)0.1(r)-19.9(znieks)]TJ /F1 1 Tf 7.7514 0 TD 0 Tc 0.1499 Tw (. )Tj /F4 1 Tf 1.0497 0 TD -0.0001 Tc 0.1555 Tw [(W)91.7(r)5.9(o)9.8(x)0.2( P)29.7(r)19.8(ess)]TJ /F1 1 Tf 5.0702 0 TD 0 Tw (has)Tj -21.6674 -1.0909 TD (published )Tj /F4 1 Tf 4.0401 0 TD -0.0002 Tc 0.026 Tw [(Beginning P)59.7(erl)]TJ /F1 1 Tf 6.1288 0 TD 0 Tc 0.025 Tw [(, b)5.9(y)0( )]TJ /F4 1 Tf 1.7321 0 TD -0.0002 Tc 0.026 Tw [(S)11.9(i)-0.1(mon Coz)5.7(ens)]TJ /F1 1 Tf 5.8785 0 TD 0 Tc 0 Tw (.)Tj /F4 1 Tf 12 0 0 12 63 608.0776 Tm (M)Tj 10.44 0 0 10.44 74.1355 608.0776 Tm 0.0225 Tc [(EA)69.3(T)]TJ /F1 1 Tf 11 0 0 11 63 582.0776 Tm -0.0001 Tc 0.1017 Tw [(A)12.1(ctiv)5.8(e)0.1(S)23.9(tate has r)9.7(eleased its beta of )]TJ /F4 1 Tf 13.8884 0 TD 0 Tw [(P)59.9(e)0.1(rlMx)]TJ /F1 1 Tf 2.9753 0 TD 0.1017 Tw (, the mail filter)Tj -16.8637 -1.0909 TD 0.0199 Tc 0.3776 Tw [(engine for S)11.9(endmail, and has announced plans for)]TJ T* -0.0001 Tc 0.3266 Tw [(V)9.9(isualP)53.9(erl and )14.8(V)9.9(isualP)5.8(ython, to r)-7.9(un under M)11.9(icr)5.8(osoft)17.7()79.9(s)]TJ T* 0.025 Tw [(V)9.9(isual S)23.9(tudio 7.0.)]TJ 0 -2.1818 TD 0.1266 Tw [(Ther)9.7(e)29.7()79.9(s another )14.8(W)9.7(in32 P)53.9(erl in to)11.9(wn. )]TJ /F4 1 Tf 15.5215 0 TD -0.0002 Tc 0 Tw [(I)11.9(ndigoS)23.8(tar)]TJ /F1 1 Tf 4.7214 0 TD -0.0001 Tc (\(which)Tj -20.2428 -1.0909 TD 0.0084 Tw (also distributes )Tj /F4 1 Tf 5.9983 0 TD -0.0002 Tc 0 Tw [(P)59.8(erl2E)5.7(x)12(e)0(\))]TJ /F1 1 Tf 4.1803 0 TD -0.0001 Tc 0.0084 Tw [(has r)9.7(eleased )]TJ /F4 1 Tf 4.751 0 TD -0.0002 Tc 0 Tw [(I)11.9(ndigoP)59.7(erl)]TJ /F1 1 Tf 4.3357 0 TD -0.0001 Tc 0.0084 Tw [(, a binar)-17.9(y)]TJ -19.2653 -1.0909 TD 0.0038 Tw [(build of P)53.9(erl 5.6 that comes with an integrated A)11.9(pache w)5.8(e)-0.1(b)]TJ T* 0 Tw [(ser)-17.9(v)5.9(e)0.1(r)59.7(.)]TJ /F4 1 Tf 0 -2.1818 TD -0.0051 Tc [(S)5.9(olutionsoft)]TJ /F1 1 Tf 5.4291 0 TD 0.2243 Tw [(has r)9.7(eleased P)53.9(erl B)11.9(uilder 2.0 for )14.7(W)9.7(indo)11.9(ws,)]TJ -5.4291 -1.0909 TD 0.1252 Tw [(with a pr)9.7(e-r)9.7(elease av)5.8(ailable for a Linux v)5.8(ersion of the P)53.9(erl)]TJ T* 0 Tw (IDE.)Tj 0 -2.1818 TD -0.0001 Tc 0.1533 Tw [(The folks o)15.8(v)5.9(er at CP)39.7(AN hav)5.8(e set up some aliases in the)]TJ /F4 1 Tf 0 -1.0909 TD -0.0002 Tc 0 Tw (cpan.org)Tj /F1 1 Tf 4.0395 0 TD -0.0001 Tc 0.2129 Tw [(domain. )44.9(Ther)9.7(e ar)9.7(e no)11.9(w a bunch of two-letter)]TJ -4.0395 -1.0909 TD 0.0199 Tc 1.0031 Tw [(countr)-17.9(y hostnames set up \(http://us.cpan.org/,)]TJ T* 0.8262 Tw [(http://fr)59.8(.cpan.org/, etc.\), and aliases for )14.9(W)74.9(AIT)]TJ T* -0.0001 Tc 0.3642 Tw (\(http://wait.cpan.org/\), perlfaq \(http://perlfaq.cpan.org/\),)Tj T* 0.025 Tw [(and the P)53.9(erl pod set \(http://perldoc.cpan.org/\).)]TJ 0 -2.1818 TD 0.158 Tw [(Alan J. F)35.8(r)-17.7(y has r)9.7(eleased )]TJ /F4 1 Tf 9.957 0 TD -0.0002 Tc 0 Tw [(P)59.8(od::Pdf)]TJ /F1 1 Tf 3.5618 0 TD -0.0001 Tc 0.158 Tw [(, for conv)5.8(er)-7.9(ting pod to)]TJ -13.5188 -1.0909 TD 0.3271 Tw [(pr)9.7(etty PDF)139.8(, and P)53.9(eter P)29.7(r)-17.7(ymmer has r)9.7(eleased )]TJ /F4 1 Tf 19.4982 0 TD -0.0002 Tc 0 Tw [(P)59.8(od::Rtf)]TJ /F1 1 Tf -19.4982 -1.0909 TD -0.0001 Tc -0.0066 Tw [(\(a.k.a. P)53.9(od2W)9.7(inHlp\) and )]TJ /F4 1 Tf 10.1277 0 TD -0.0002 Tc 0 Tw [(P)59.8(od::Hlp)]TJ /F1 1 Tf 3.9833 0 TD -0.0001 Tc -0.0066 Tw [(\(a.k.a. P)53.9(od2VMSHlp\).)]TJ -14.1111 -2.1818 TD 0.0614 Tw [(D)6(amian Conway has r)9.7(eleased sev)5.8(eral modules. I)11.9(n)0.1( addition)]TJ 0 -1.0909 TD 0.234 Tw [(to his awar)13.8(d-winning )]TJ /F4 1 Tf 9.1476 0 TD 0 Tw [(T)120(ext::A)17.8(utofor)15.8(mat)]TJ /F1 1 Tf 7.4713 0 TD 0.234 Tw [(which per)-7.9(forms)]TJ -16.6189 -1.0909 TD 0.0199 Tc 0.9227 Tw (automatic text wrapping and formatting, and)Tj /F4 1 Tf T* -0.0001 Tc 0 Tw [(Q)5.9(uantum::S)17.8(uperpositions)]TJ /F1 1 Tf 10.9181 0 TD 0.0563 Tw [(which hur)-7.9(ts my head, he)29.7()79.9(s)0( also)]TJ -10.9181 -1.0909 TD 0 Tw [(r)9.9(eleased )]TJ /F4 1 Tf 3.365 0 TD [(S)29.8(w)0.1(itch)]TJ /F1 1 Tf 3.1021 0 TD 0.1225 Tw [(for pr)5.8(o)15.9(v)0.1(iding P)53.9(erl with switch statements)]TJ -6.4672 -1.0909 TD -0.0002 Tc 0 Tw (and )Tj /F4 1 Tf 1.7125 0 TD -0.0001 Tc (Class::Contract)Tj /F1 1 Tf 6.5502 0 TD 0.025 Tw [(for design-b)5.8(y-contract OO. )]TJ /F4 1 Tf -8.2627 -2.1818 TD 0 Tw [(Class::T)106.9(ranslucent)]TJ /F1 1 Tf 7.4346 0 TD 0.0521 Tw [(, b)5.8(y)-0.1( M)11.9(ichael G)23.9(ranger)59.7(, is a base class for)]TJ -7.4346 -1.0909 TD 0.0728 Tw [(translucency)84.9(. M)11.9(ichael G. Schw)5.8(ern)69.8()79.9(s)-0.1( )]TJ /F4 1 Tf 14.0975 0 TD 0 Tw [(Class::WhiteH)17.8(ole)]TJ /F1 1 Tf 7.5052 0 TD 0.0728 Tw (is a)Tj -21.6027 -1.0909 TD 0.025 Tw [(base class for tr)9.7(eating unhandled method calls as err)5.8(ors.)]TJ 0 -2.1818 TD -0.0002 Tw [(D)6(a)0.2(v)5.8(e)0( R)11.9(olsky)29.7()79.9(s)-0.1( )]TJ /F4 1 Tf 5.5559 0 TD 0 Tw [(E)6(x)18(ception::Class)]TJ /F1 1 Tf 6.9748 0 TD -0.0003 Tw [(module allo)11.9(ws declarations)]TJ -12.5307 -1.0909 TD 0.0199 Tc 0.5635 Tw [(of r)9.7(eal ex)11.9(ception classes; his )]TJ /F4 1 Tf 14.2852 0 TD 0 Tw [(S)24(tackT)106.9(race)]TJ /F1 1 Tf 5.4163 0 TD 0.5635 Tw (aids in)Tj -19.7015 -1.0909 TD -0.0001 Tc 0.2525 Tw [(encapsulating the information r)9.7(eturned b)5.8(y)0( P)53.9(erl)11.9()79.9(s)0( builtin)]TJ /F2 1 Tf 9 0 0 9 342 802.0776 Tm -0.0002 Tc 0 Tw (caller)Tj /F1 1 Tf 11 0 0 11 380.4735 802.0776 Tm -0.0001 Tc 0.3028 Tw [(function. K)23.9(y)0(le R. B)11.9(u)0.1(r)-7.9(ton)69.8()79.9(s)-0.1( )]TJ /F4 1 Tf 11.5593 0 TD 0 Tw [(E)6(x)17.9(ception)]TJ /F1 1 Tf 4.6329 0 TD -0.0002 Tc [(pr)5.7(o)15.8(vides)]TJ -19.6898 -1.0909 TD -0.0001 Tc 0.025 Tw [(ex)11.9(ception handling, including a base ex)11.9(ception class.)]TJ 0 -2.1818 TD -0.0002 Tc 0 Tw [(A)12(bigail)11.8()79.8(s)-0.2( )]TJ /F4 1 Tf 3.678 0 TD -0.0061 Tc [(En)-5.8(d)]TJ /F1 1 Tf 2.1646 0 TD -0.0001 Tc 0.241 Tw [(module pr)5.8(o)15.9(vides )]TJ /F2 1 Tf 9 0 0 9 484.7822 766.0776 Tm -0.0002 Tc 0 Tw [(END)-528.3({})]TJ /F1 1 Tf 11 0 0 11 521.9303 766.0776 Tm -0.0001 Tc 0.241 Tw (functionality for)Tj -16.3573 -1.0909 TD 0.025 Tw [(arbitrar)-17.9(y blocks.)]TJ /F4 1 Tf 0 -2.1818 TD -0.0002 Tc 0 Tw [(D)5.7(e)0.1(v)29.6(el::Co)17.7(v)29.8(erage)]TJ /F1 1 Tf 6.5976 0 TD -0.0001 Tc 0.3556 Tw [(, b)5.8(y)0( Randy J. Ray)84.9(, per)-7.9(forms co)15.8(v)5.9(erage)]TJ -6.5976 -1.0909 TD 0 Tw (analysis.)Tj 0 -2.1818 TD 0.025 Tw [(M)12(a)0.3(r)5.8(c)0( Lehmann)69.8()79.9(s)-0.1( )]TJ /F4 1 Tf 6.6921 0 TD -0.0002 Tc 0 Tw [(Conv)29.6(er)-8(t::Scalar)]TJ /F1 1 Tf 6.5538 0 TD -0.0001 Tc 0.025 Tw (plays with the flags of an)Tj -13.2458 -1.0909 TD 0.0222 Tw [(SV)119.8(, P)53.9(erl)11.9()79.9(s)0( internal data type that holds a scalar v)5.8(alue. )44.9(Those)]TJ T* -0.0273 Tw [(flags contr)5.8(ol the attributes of a scalar)59.7(, including utf8, magic,)]TJ T* 0.025 Tw (and taintedness.)Tj 0 -2.1818 TD 0.1966 Tw [(Ray F)33.9(inch wr)5.8(ote )]TJ /F4 1 Tf 7.2014 0 TD 0 Tw (Clone)Tj /F1 1 Tf 2.4524 0 TD 0.1966 Tw [(, which r)9.7(ecursiv)5.8(ely copies nested)]TJ -9.6538 -1.0909 TD 0.0336 Tw [(data str)-7.9(uctur)9.7(es. )]TJ /F4 1 Tf 6.4653 0 TD 0 Tw [(D)5.8(elayLine)]TJ /F1 1 Tf 4.2373 0 TD 0.0336 Tw [(, b)5.8(y)0( Lars )44.8(Thegler)59.7(, cr)9.7(eates a data)]TJ -10.7026 -1.0909 TD 0.2087 Tw [(str)-7.9(uctur)9.7(e like a FIFO with an adjustable time delay for)]TJ T* 0.025 Tw [(when a v)5.8(alue will be av)5.8(ailable in it.)]TJ /F4 1 Tf 0 -2.1818 TD -0.0002 Tc 0 Tw [(T)32(ie::C)23.8(y)23.7(cle)]TJ /F1 1 Tf 4.0618 0 TD 0 Tc 0.0082 Tw [(, b)5.9(y)0( )]TJ /F2 1 Tf 9 0 0 9 405.3637 574.0776 Tm -0.0002 Tc 0.0198 Tw (brian d foy)Tj /F1 1 Tf 11 0 0 11 465.1042 574.0776 Tm -0.0001 Tc 0.0082 Tw [(, cy)11.9(cles thr)5.8(ough a list of v)5.8(alues)]TJ -11.1913 -1.0909 TD 0.05 Tw [(via a scalar)59.7(. D)5.8(a)0.2(v)5.8(e)0( C)5.8(r)6(oss)39.7( )]TJ /F4 1 Tf 9.6382 0 TD 0 Tw [(Array::Compar)19.7(e)]TJ /F1 1 Tf 6.8645 0 TD 0.05 Tw [(compar)9.7(es arrays,)]TJ -16.5027 -1.0909 TD 0.1245 Tw [(and T)119.9(err)9.7(ence )-45(B)11.9(rannon)69.8()79.9(s)-0.1( )]TJ /F4 1 Tf 9.7547 0 TD -0.0002 Tc 0 Tw [(Array::R)11.8(efor)15.7(m)]TJ /F1 1 Tf 6.2756 0 TD -0.0001 Tc 0.1694 Tw [(conv)5.8(er)-7.9(ts an array)]TJ -16.0303 -1.0909 TD 0.025 Tw [(into an N-siz)5.8(ed array of arrays.)]TJ 0 -2.1818 TD 0.1389 Tw [(F)35.9(or dumping arrays to J)29.7(a)0.2(v)5.8(aScript, Ariel B)11.9(r)6(osh and J)29.7(errad)]TJ 0 -1.0909 TD 0.0199 Tc 1.5503 Tw [(P)12(ier)5.8(ce hav)5.8(e written )]TJ /F4 1 Tf 12.6361 0 TD 0 Tw [(D)5.7(ata::J)23.8(av)5.7(aScript)]TJ /F1 1 Tf 8.7955 0 TD (and)Tj /F4 1 Tf -21.4316 -1.0909 TD -0.0001 Tc [(D)5.8(ata::J)23.9(av)5.8(aScript::LiteO)5.8(bject)]TJ /F1 1 Tf 11.542 0 TD 0.025 Tw [(, r)9.7(espectiv)5.8(ely)84.9(.)]TJ /F4 1 Tf -11.542 -2.1818 TD -0.0002 Tc 0 Tw [(T)119.9(e)-0.1(mplate::P)5.7(lugin::J)23.8(av)5.7(a)]TJ /F1 1 Tf 9.2231 0 TD -0.0001 Tc 0.1486 Tw [(, b)5.8(y)0( Rafael Kito)15.8(v)5.9(e)0.1(r)59.7(,)0( generates J)29.7(a)0.2(v)5.8(a)]TJ -9.2231 -1.0909 TD 0.2093 Tw [(classes fr)5.8(om XML description files and templates. M)11.9(a)0.3(r)5.8(k)]TJ T* -0.0198 Tw [(E)17.7(than T)129.9(r)6(ostler)19.7()79.9(s)-0.1( )]TJ /F4 1 Tf 6.2263 0 TD -0.0241 Tc 0 Tw [(Ja)-23.8(v)-18.2(a)]TJ /F1 1 Tf 1.9706 0 TD -0.0001 Tc 0.025 Tw [(accesses a local or r)9.7(emote JVM.)]TJ -8.1968 -2.1818 TD -0.0032 Tw (Amir Karger has finally merged my first computer language)Tj 0 -1.0909 TD 0.0525 Tw [(with my fav)5.8(orite computer language; )]TJ /F4 1 Tf 14.7277 0 TD -0.0002 Tc 0 Tw [(Language::B)5.7(asic)]TJ /F1 1 Tf 6.8953 0 TD -0.0001 Tc 0.0525 Tw (is a)Tj -21.623 -1.0909 TD 0.025 Tw [(BASIC interpr)9.7(eter)59.7(.)]TJ 0 -2.1818 TD 0.3359 Tw [(S)24.1(tev)5.8(e A. F)33.9(ink has written a pair of parsing modules;)]TJ /F4 1 Tf 0 -1.0909 TD 0.0198 Tc 0 Tw [(P)47.8(a)0(rse::Y)17.7(AL)-12.1(ALR)]TJ /F1 1 Tf 7.34 0 TD 0.4955 Tw [(is )14.8(Y)89.8(et Another L)-12(ALR parser)59.8(, and)]TJ /F4 1 Tf -7.34 -1.0909 TD -0.0001 Tc 0 Tw [(P)47.9(arse::Vipar)]TJ /F1 1 Tf 5.2235 0 TD 0.025 Tw [(is a visual L)-12(ALR parser debugger)59.7(.)]TJ /F4 1 Tf -5.2235 -2.1818 TD -0.0002 Tc 0 Tw [(AI::N)29.6(euralN)29.6(et::B)5.7(ackP)29.6(r)5.8(o)-0.1(p)]TJ /F1 1 Tf 10.2825 0 TD -0.0001 Tc 0.2643 Tw [(, b)5.8(y)-0.1( J)29.7(osiah B)11.9(r)-17.7(yan, is a simple)]TJ -10.2825 -1.0909 TD 0.025 Tw [(back-pr)5.8(opagation neural net.)]TJ 0 -2.1818 TD 0.1814 Tw [(D)12.1(o)0( y)5.8(ou feel like y)5.8(o)0.1(u)49.7()69.9(r)9.9(e)0( missing out on something when)]TJ 0 -1.0909 TD 0.351 Tw [(y)5.8(our friend wants to IM \(instant message\) y)5.8(ou? I)11.9(n)]TJ T* -0.0137 Tw [(addition to )]TJ /F4 1 Tf 4.518 0 TD 0 Tw [(N)29.9(et::AIM)]TJ /F1 1 Tf 4.1193 0 TD -0.0137 Tw [(b)5.8(y)0( Ar)9.7(eyh G)5.8(oldsmith, y)5.8(ou can use the)]TJ -8.6373 -1.0909 TD 0.2424 Tw [(A)12.1(OL I)11.9(nstant M)23.9(essenger pr)5.8(otocol with J)29.7(oshua H)5.8(a)0.3(r)13.8(ding)17.8()79.9(s)]TJ /F4 1 Tf T* -0.0002 Tc 0 Tw [(A)23.9(OL::T)35.7(OC)]TJ /F1 1 Tf 4.8529 0 TD -0.0001 Tc 0.025 Tw [(and Riad )14.8(W)87.8(ahb)5.8(y)29.7()79.9(s )]TJ /F4 1 Tf 7.233 0 TD -0.0002 Tc 0 Tw [(N)29.8(et::A)23.8(OLIM)]TJ /F1 1 Tf 5.2319 0 TD 0 Tc (.)Tj -17.3178 -2.1818 TD -0.0001 Tc 0.136 Tw [(Armin O)5.8(bersteiner)19.7()79.9(s)-0.1( )]TJ /F4 1 Tf 8.3057 0 TD 0 Tw (CDDB_get)Tj /F1 1 Tf 5.0174 0 TD 0.136 Tw [(talks to y)5.8(our CD-R)35.8(OM)]TJ -13.3231 -1.0909 TD 0.1389 Tw [(driv)5.8(e and a CDDB ser)-17.9(v)5.9(er to get information about y)5.8(our)]TJ T* 0.025 Tw (audio CDs.)Tj 0 -2.1818 TD 0.0199 Tc 0.3975 Tw [(M)12(a)0.3(r)5.8(ko Asplund)11.9()79.9(s)-0.1( )]TJ /F4 1 Tf 7.9236 0 TD 0 Tw [(IO::S)5.8(ocket::SSL)]TJ /F1 1 Tf 7.4684 0 TD 0.3975 Tw [(can cr)9.7(eate secur)9.7(e)]TJ -15.392 -1.0909 TD -0.0001 Tc 0.0173 Tw [(sockets, and M)11.9(ichael K)23.9(u)0.1(lako)15.8(v)0( wr)5.8(ote )]TJ /F4 1 Tf 14.2308 0 TD 0 Tw [(N)29.9(et::D)5.8(aemon::SSL)]TJ /F1 1 Tf 7.8855 0 TD -0.0002 Tc (to)Tj -22.1164 -1.0909 TD -0.0001 Tc 0.025 Tw [(cr)9.7(eate por)-7.9(table and secur)9.7(e daemons.)]TJ 12 0 0 12 63 90.3543 Tm 1.1 Tc 0 Tw (8F)Tj 10.44 0 0 10.44 88.2795 90.3543 Tm -0.0001 Tc (ALL)Tj 12 0 0 12 109.6277 90.3543 Tm 0 Tc (2000)Tj /F3 1 Tf 31.4897 0.0003 TD -0.0002 Tc 0.0255 Tw [(The P)47.6(erl J)35.7(our)-8(nal #19)]TJ ET Q 0 0 0 0 k /GS2 gs 1 i 37 874 186 -12 re 587.395 90.357 m f* BT /F2 1 Tf 8 0 0 8 39 864 Tm /Cs9 cs 1 scn -0.0007 Tc -0.0039 Tw (TPJ#19/9.26 9/27/00 10:35 AM Page 8)Tj ET 1 G 0 J 0 j 0.5 w 10 M []0 d 36 873 m 36 849 l 0 837 m 24 837 l 621 873 m 621 849 l 657 837 m 633 837 l 36 36 m 36 60 l 0 72 m 24 72 l 621 36 m 621 60 l 657 72 m 633 72 l S /Cs9 CS 1 SCN 0.25 w 36 873 m 36 849 l 0 837 m 24 837 l 621 873 m 621 849 l 657 837 m 633 837 l 36 36 m 36 60 l 0 72 m 24 72 l 621 36 m 621 60 l 657 72 m 633 72 l S 1 G 0.5 w 304.5 861 m 352.5 861 l 304.5 48 m 352.5 48 l 12 478.5 m 12 430.5 l 645 478.5 m 645 430.5 l 328.5 873 m 328.5 849 l 328.5 60 m 328.5 36 l 0 454.5 m 24 454.5 l 633 454.5 m 657 454.5 l 328.5 861 m 334.5 861 l 334.5 857.688 331.812 855 328.5 855 c 325.188 855 322.5 857.688 322.5 861 c 322.5 864.312 325.188 867 328.5 867 c 331.812 867 334.5 864.312 334.5 861 c 328.5 48 m 334.5 48 l 334.5 44.688 331.812 42 328.5 42 c 325.188 42 322.5 44.688 322.5 48 c 322.5 51.312 325.188 54 328.5 54 c 331.812 54 334.5 51.312 334.5 48 c 12 454.5 m 18 454.5 l 18 451.188 15.312 448.5 12 448.5 c 8.688 448.5 6 451.188 6 454.5 c 6 457.812 8.688 460.5 12 460.5 c 15.312 460.5 18 457.812 18 454.5 c 645 454.5 m 651 454.5 l 651 451.188 648.312 448.5 645 448.5 c 641.688 448.5 639 451.188 639 454.5 c 639 457.812 641.688 460.5 645 460.5 c 648.312 460.5 651 457.812 651 454.5 c S /Cs9 CS 1 SCN 0.25 w 304.5 861 m 352.5 861 l 304.5 48 m 352.5 48 l 12 478.5 m 12 430.5 l 645 478.5 m 645 430.5 l 328.5 873 m 328.5 849 l 328.5 60 m 328.5 36 l 0 454.5 m 24 454.5 l 633 454.5 m 657 454.5 l 328.5 861 m 334.5 861 l 334.5 857.688 331.812 855 328.5 855 c 325.188 855 322.5 857.688 322.5 861 c 322.5 864.312 325.188 867 328.5 867 c 331.812 867 334.5 864.312 334.5 861 c 328.5 48 m 334.5 48 l 334.5 44.688 331.812 42 328.5 42 c 325.188 42 322.5 44.688 322.5 48 c 322.5 51.312 325.188 54 328.5 54 c 331.812 54 334.5 51.312 334.5 48 c 12 454.5 m 18 454.5 l 18 451.188 15.312 448.5 12 448.5 c 8.688 448.5 6 451.188 6 454.5 c 6 457.812 8.688 460.5 12 460.5 c 15.312 460.5 18 457.812 18 454.5 c 645 454.5 m 651 454.5 l 651 451.188 648.312 448.5 645 448.5 c 641.688 448.5 639 451.188 639 454.5 c 639 457.812 641.688 460.5 645 460.5 c 648.312 460.5 651 457.812 651 454.5 c S endstream endobj 23 0 obj << /Type /Page /Parent 490 0 R /Resources 24 0 R /Contents 25 0 R /Thumb 337 0 R /MediaBox [ 0 0 684 873 ] /CropBox [ 0 0 684 873 ] /Rotate 0 >> endobj 24 0 obj << /ProcSet [ /PDF /Text ] /Font << /F1 515 0 R /F2 518 0 R /F3 261 0 R /F4 266 0 R /F5 262 0 R /F8 268 0 R >> /ExtGState << /GS1 523 0 R /GS2 521 0 R >> /ColorSpace << /Cs9 520 0 R >> >> endobj 25 0 obj << /Length 10765 >> stream 1 g /GS1 gs 0 873 m 0 873 l f q 1 i 27 846 603 -783 re 0 873 m W n 0 873 684 -873 re W n BT /F4 1 Tf 11 0 0 11 63 802.0776 Tm 0 0 0 1 k /GS2 gs -0.0002 Tc 0 Tw [(N)29.8(et::P)47.7(ager)]TJ /F1 1 Tf 4.2458 0 TD -0.0001 Tc 0.0934 Tw [(, b)5.8(y)-0.1( J)29.7(oe Lauer)59.7(, sends pages to any pager/phone)]TJ -4.2458 -1.0909 TD 0.3153 Tw [(ar)5.8(ound the world. )]TJ /F4 1 Tf 8.7233 0 TD 0 Tw [(N)29.9(e)0.1(t::Whois::R)-5.9(aw)]TJ /F1 1 Tf 6.9609 0 TD 0.3153 Tw [(, b)5.8(y)0( Ariel B)11.9(r)6(osh,)]TJ -15.6842 -1.0909 TD 0.2221 Tw (parses raw )Tj /F5 1 Tf 4.6242 0 TD 0 Tw (whois)Tj /F1 1 Tf 2.5495 0 TD 0.2221 Tw (information \(since )Tj /F4 1 Tf 7.819 0 TD 0.2307 Tw [(N)29.9(etwor)5.8(k S)5.8(olutions)]TJ /F1 1 Tf -14.9927 -1.0909 TD 0.025 Tw (keeps changing the format\).)Tj 0 -2.1818 TD -0.0103 Tw [(Lincoln D. S)23.9(tein)69.8()79.9(s)-0.1( )]TJ /F4 1 Tf 7.0987 0 TD 0 Tw [(IO::S)5.8(ocket::M)35.9(ulticast)]TJ /F1 1 Tf 8.9863 0 TD -0.0103 Tw (is for sending and)Tj -16.085 -1.0909 TD 0.2873 Tw [(r)9.9(eceiving multicast messages. H)17.8(is )]TJ /F4 1 Tf 14.1377 0 TD -0.0002 Tc 0 Tw [(IO::I)11.8(nter)-8(face)]TJ /F1 1 Tf 5.8351 0 TD -0.0001 Tc (module)Tj -19.9728 -1.0909 TD 0.025 Tw [(accesses networ)5.8(k car)13.8(d configuration information.)]TJ /F4 1 Tf 0 -2.1818 TD -0.0002 Tc 0 Tw [(N)29.8(et::T)119.7(elnet::C)11.8(isco)]TJ /F1 1 Tf 7.2678 0 TD -0.0001 Tc -0.0349 Tw [(, b)5.8(y)-0.1( J)29.7(oshua K)5.8(e)0.1(r)5.8(oes, interacts with a Cisco)]TJ -7.2678 -1.0909 TD 0 Tw [(r)6(outer)59.7(.)]TJ 0 -2.1818 TD 0.0172 Tc 0.3577 Tw [(S)12.1(ean D)5.8(a)0(gue)29.7()79.9(s)-0.1( )]TJ /F4 1 Tf 6.2213 0 TD 0 Tw [(M)11.8(ail::S)23.8(tats)]TJ /F1 1 Tf 5.1659 0 TD 0.3577 Tw (gets statistics on )Tj /F5 1 Tf 7.841 0 TD 0 Tw [(pr)5.7(ocmail)]TJ /F1 1 Tf 3.3612 0 TD 0 Tc (-)Tj -22.5894 -1.0909 TD -0.0001 Tc 0.305 Tw [(generated mailbo)5.8(x files. )]TJ /F4 1 Tf 10.7988 0 TD 0 Tw [(S)12(e)0(ndmail::M)11.9(ilter)]TJ /F1 1 Tf 6.906 0 TD 0.3051 Tw [(, b)5.8(y)0( Charles)]TJ -17.7048 -1.0909 TD 0.1568 Tw [(Ying, is an inter)-7.9(face to S)11.9(endmail)11.9()79.9(s mail filter AP)11.9(I. J)29.7(ohan)]TJ T* 0 Tw [(V)78(r)6(omans)39.7( )]TJ /F4 1 Tf 3.906 0 TD -0.0002 Tc [(M)11.8(ail::P)29.6(r)5.8(ocmail)]TJ /F1 1 Tf 6.365 0 TD [(pr)5.7(o)15.8(vides )]TJ /F5 1 Tf 3.482 0 TD [(pr)5.7(ocmail)]TJ /F1 1 Tf 3.2229 0 TD -0.0001 Tc 0.0127 Tw (-like facility for)Tj -16.9759 -1.0909 TD 0.2062 Tw [(cr)9.7(eating easy mail filters. )]TJ /F4 1 Tf 10.5372 0 TD 0 Tw [(M)11.9(ail::F)21.9(ilterXML)]TJ /F1 1 Tf 6.7832 0 TD 0.2063 Tw [(, b)5.8(y)-0.1( M)11.9(atthe)-5.9(w)]TJ -17.3204 -1.0909 TD 0.3009 Tw [(M)12(acK)5.8(enzie, is a filter for )]TJ /F4 1 Tf 11.2468 0 TD -0.0002 Tc 0 Tw [(M)11.8(ail::A)17.7(udit)]TJ /F1 1 Tf 5.2687 0 TD -0.0001 Tc 0.3009 Tw [(\(S)11.9(imon Coz)5.8(ens)39.7()]TJ -16.5154 -1.0909 TD 0.2077 Tw (module for )Tj /F5 1 Tf 4.9591 0 TD -0.0002 Tc 0 Tw [(pr)5.7(ocmail)]TJ /F1 1 Tf 3.2229 0 TD -0.0001 Tc 0.2077 Tw [(-like filters, intr)5.8(oduced in )44.9(TPJ #18\))]TJ -8.182 -1.0909 TD 0.025 Tw [(allo)11.9(wing specification of filter r)-7.9(ules in XML.)]TJ /F4 1 Tf 0 -2.1818 TD 0.0024 Tc 0 Tw [(XML::D)11.9(riv)29.7(er::HTML)]TJ /F1 1 Tf 8.8396 0 TD 0.3724 Tw [(, b)5.8(y)0( M)12(i)0(chael K)17.8(oehne, is a SAX)]TJ -8.8396 -1.0909 TD -0.0001 Tc 0.3205 Tw [(driv)5.8(er)59.7(. I)23.9(t)0( handles HTML that isn)69.8()79.9(t)0( w)5.8(ell-formed, using)]TJ /F4 1 Tf T* 0.0012 Tc 0 Tw [(HTML::T)106.9(r)19.8(eeB)11.9(uilder)]TJ /F1 1 Tf 8.2726 0 TD 0.3737 Tw [(. R)11.9(ober)-7.9(t H)5.8(anson)69.7()79.8(s)-0.1( )]TJ /F4 1 Tf 8.2768 0 TD 0 Tw (XML::EasyOBJ)Tj /F1 1 Tf -16.5493 -1.0909 TD -0.0001 Tc 0.025 Tw [(pr)5.8(o)15.9(vides easy XML object navigation.)]TJ 0 -2.1818 TD 0.3294 Tw [(Angus )14.8(W)77.8(ood and Andy M)35.9(urr)9.7(en wr)5.8(ote )]TJ /F4 1 Tf 16.9217 0 TD 0 Tw [(C)11.9(GI::WML)]TJ /F1 1 Tf 4.7542 0 TD 0.3294 Tw (, a)Tj -21.6759 -1.0909 TD 0.025 Tw [(subclass of CGI.pm for )14.8(WML output and methods.)]TJ 25.3636 29.4545 TD -0.0033 Tw [(T)119.9(.J. M)11.9(ather wr)5.8(ote )]TJ /F4 1 Tf 7.1528 0 TD -0.0002 Tc 0 Tw [(HTML::F)21.8(illI)11.8(nF)35.7(or)15.7(m)]TJ /F1 1 Tf 8.1746 0 TD -0.0001 Tc -0.0033 Tw (to populate HTML)Tj -15.3274 -1.0909 TD 0.0199 Tc 1.501 Tw [(forms with CGI data. P)53.9(eter H)5.8(awor)-7.9(th)69.8()79.9(s)]TJ /F4 1 Tf T* -0.0002 Tc 0 Tw [(HTML::S)23.8(tickyF)35.7(or)15.7(ms)]TJ /F1 1 Tf 8.853 0 TD -0.0001 Tc 0.0857 Tw (generates HTML forms for CGI or)Tj -8.853 -1.0909 TD 0 Tw (mod_perl.)Tj T* 0.3219 Tw [(W)87.8(ant a w)5.8(eb application frame)-5.9(wor)5.8(k? )44.9(T)129.9(r)-17.7(y Colin K)17.8(ong)17.8()79.9(s)]TJ /F4 1 Tf T* 0.0187 Tc 0 Tw [(LibW)91.8(eb)]TJ /F1 1 Tf 3.3356 0 TD 0.3562 Tw [(, M)11.9(a)0.3(r)5.8(c)0( Lehmann)69.8()79.9(s)-0.1( )]TJ /F4 1 Tf 8.53 0 TD -0.0754 Tc 0 Tw [(PA)-82(p)-94.2(p)]TJ /F1 1 Tf 2.2797 0 TD 0.0187 Tc 0.3562 Tw [(, or J)29.7(esse E)5.8(rlbaum)69.8()79.9(s)]TJ /F4 1 Tf -14.1452 -1.0909 TD -0.0001 Tc 0 Tw [(C)11.9(G)0.2(I::A)11.9(pplication)]TJ /F1 1 Tf 7.0959 0 TD 0 Tc (.)Tj -7.0959 -2.1818 TD -0.0001 Tc 0.0873 Tw [(T)119.9(err)9.7(ence B)11.9(rannon)69.8()79.9(s)-0.1( )]TJ /F4 1 Tf 7.7784 0 TD -0.0002 Tc 0 Tw [(C)11.8(GI::C)11.8(ache)]TJ /F1 1 Tf 5.1409 0 TD -0.0001 Tc 0.0872 Tw [(caches the r)9.7(esults of CGI)]TJ -12.9193 -1.0909 TD 0 Tw (scripts. )Tj /F4 1 Tf 3.1614 0 TD -0.0002 Tc [(C)11.8(GI::P)47.7(athI)11.8(nfo)]TJ /F1 1 Tf 5.9023 0 TD -0.0001 Tc 0.2131 Tw [(, b)5.8(y)-0.1( B)5.8(enjamin F)35.8(ranz, is for using)]TJ /F2 1 Tf 9 0 0 9 342 682.0776 Tm -0.0002 Tc 0 Tw (PATH_INFO)Tj /F1 1 Tf 11 0 0 11 393.6132 682.0776 Tm -0.0001 Tc 0.025 Tw [(v)5.9(alues like )]TJ /F2 1 Tf 9 0 0 9 440.2445 682.0776 Tm -0.0002 Tc 0 Tw (QUERY_STRING)Tj /F1 1 Tf 11 0 0 11 508.0537 682.0776 Tm -0.0001 Tc (parameters.)Tj -15.0958 -2.1818 TD 0.0199 Tc 0.9532 Tw [(T)39.8(im H)5.8(ammer)5.8(quist)17.8()79.9(s)-0.1( )]TJ /F4 1 Tf 10.2853 0 TD 0 Tw [(ASP::N)29.8(extLink)]TJ /F1 1 Tf 7.6044 0 TD 0.9531 Tw [(is a P)53.9(erl)]TJ -17.8897 -1.0909 TD -0.0001 Tc 0.025 Tw [(implementation of the N)29.7(extLink ASP component.)]TJ /F4 1 Tf 0 -2.1818 TD -0.0002 Tc 0 Tw [(HT)-12.1(TP::DA)79.7(V)]TJ /F1 1 Tf 5.2065 0 TD -0.0001 Tc 0.3351 Tw [(, b)5.8(y)-500.1(P)42.1(atrick Collins,)-500.1(is a )14.8(W)77.8(ebDA)79.8(V client)]TJ -5.2065 -1.0909 TD -0.0002 Tc 0 Tw [(librar)-18(y)84.8(.)]TJ 0 -2.1818 TD 0.0199 Tc 0.4976 Tw [(G)5.9(eoffr)9.7(ey Y)93.9(oung)17.8()79.9(s)-0.1( )]TJ /F4 1 Tf 8.1169 0 TD 0 Tw [(A)12.1(pache::S)11.9(impleR)11.9(eplace)]TJ /F1 1 Tf 9.9173 0 TD 0.5124 Tw (, a simple)Tj -18.0342 -1.0909 TD -0.0001 Tc 0.018 Tw [(template frame)-5.9(wor)5.8(k, is a r)9.7(ename of )]TJ /F4 1 Tf 13.9648 0 TD 0 Tw [(A)12.1(p)0.1(ache::W)91.8(rapper)]TJ /F1 1 Tf 7.0584 0 TD 0 Tc 0.018 Tw [(. H)17.9(i)0.1(s)]TJ /F4 1 Tf -21.0232 -1.0909 TD -0.0001 Tc 0 Tw [(A)12.1(p)0.1(ache::D)11.9(ispatch)]TJ /F1 1 Tf 7.4503 0 TD (calls )Tj /F2 1 Tf 9 0 0 9 444.5746 562.0776 Tm -0.0002 Tc (PerlHandler)Tj /F1 1 Tf 11 0 0 11 506.7572 562.0776 Tm -0.0001 Tc 0.0043 Tw [(subr)5.8(outines with the)]TJ -14.9779 -1.0909 TD 0.2166 Tw (ease of CGI scripts. )Tj /F4 1 Tf 8.6395 0 TD 0 Tw [(A)12.1(p)0.1(ache::M)23.9(otd)]TJ /F1 1 Tf 5.7595 0 TD 0.2165 Tw [(, b)5.8(y)0( Carlos Ramir)9.7(e)-4(z,)]TJ -14.399 -1.0909 TD 0.0199 Tc 0.6349 Tw [(prints a message of the day)85(. R)11.9(oman K)17.8(osenko)49.8()79.9(s)]TJ /F4 1 Tf T* -0.0002 Tc 0 Tw [(A)12(pache::P)29.6(r)19.7(ettyP)59.7(erl)]TJ /F1 1 Tf 7.8414 0 TD -0.0001 Tc 0.025 Tw [(pr)9.7(etty-prints P)53.9(erl code in HTML.)]TJ -7.8414 -2.1818 TD -0.0002 Tc 0.0292 Tw [(D)5.9(a)0.1(v)5.7(e)-0.2( M)23.8(oor)9.6(e)29.6()79.8(s )]TJ /F4 1 Tf 5.5836 0 TD 0 Tw [(A)12(pache::P)59.7(erlVINC)]TJ /F1 1 Tf 7.8378 0 TD -0.0001 Tc 0.029 Tw [(allo)11.9(ws mod_perl to hav)5.8(e)]TJ -13.4215 -1.0909 TD 0.0199 Tc 0.3834 Tw [(differ)9.7(ent v)5.8(ersions of the same modules assigned to)]TJ T* -0.0001 Tc 0.025 Tw [(dir)9.7(ectories or vir)-7.9(tual hosts.)]TJ 12 0 0 12 523.3723 90.3543 Tm 0 Tc 0 Tw (F)Tj 10.44 0 0 10.44 529.4518 90.3543 Tm -0.0001 Tc (ALL)Tj 12 0 0 12 550.7999 90.3543 Tm 0 Tc 0.025 Tw [(2000 9)]TJ /F3 1 Tf -40.65 0 TD -0.0002 Tc 0.0255 Tw [(The P)47.6(erl J)35.7(our)-8(nal #19)]TJ ET 0 0 0 0.1 k /GS1 gs 63.5 458.5 530 -341 re 162.892 90.354 m f* 0 0 0 1 K 0 J 0 j 1 w 10 M []0 d 63.5 458.5 530 -341 re S BT /F8 1 Tf 24 0 0 24 246.9521 323.322 Tm 0 0 0 1 k /GS2 gs 0 Tw [(ST)35.7(ONEHENGE)]TJ 1.6701 -1.2 TD 0.0255 Tw (1/2 page)Tj /F1 1 Tf 19 0 0 19 306.5081 240.5233 Tm -0.0001 Tc 0 Tw [(NE)11.8(W)]TJ ET Q 0 0 0 0 k /GS2 gs 1 i 37 874 186 -12 re 350.493 240.523 m f* BT /F2 1 Tf 8 0 0 8 39 864 Tm /Cs9 cs 1 scn -0.0007 Tc -0.0039 Tw (TPJ#19/9.26 9/27/00 10:35 AM Page 9)Tj ET 1 G 0 J 0 j 0.5 w 10 M []0 d 36 873 m 36 849 l 0 837 m 24 837 l 621 873 m 621 849 l 657 837 m 633 837 l 36 36 m 36 60 l 0 72 m 24 72 l 621 36 m 621 60 l 657 72 m 633 72 l S /Cs9 CS 1 SCN 0.25 w 36 873 m 36 849 l 0 837 m 24 837 l 621 873 m 621 849 l 657 837 m 633 837 l 36 36 m 36 60 l 0 72 m 24 72 l 621 36 m 621 60 l 657 72 m 633 72 l S 1 G 0.5 w 304.5 861 m 352.5 861 l 304.5 48 m 352.5 48 l 12 478.5 m 12 430.5 l 645 478.5 m 645 430.5 l 328.5 873 m 328.5 849 l 328.5 60 m 328.5 36 l 0 454.5 m 24 454.5 l 633 454.5 m 657 454.5 l 328.5 861 m 334.5 861 l 334.5 857.688 331.812 855 328.5 855 c 325.188 855 322.5 857.688 322.5 861 c 322.5 864.312 325.188 867 328.5 867 c 331.812 867 334.5 864.312 334.5 861 c 328.5 48 m 334.5 48 l 334.5 44.688 331.812 42 328.5 42 c 325.188 42 322.5 44.688 322.5 48 c 322.5 51.312 325.188 54 328.5 54 c 331.812 54 334.5 51.312 334.5 48 c 12 454.5 m 18 454.5 l 18 451.188 15.312 448.5 12 448.5 c 8.688 448.5 6 451.188 6 454.5 c 6 457.812 8.688 460.5 12 460.5 c 15.312 460.5 18 457.812 18 454.5 c 645 454.5 m 651 454.5 l 651 451.188 648.312 448.5 645 448.5 c 641.688 448.5 639 451.188 639 454.5 c 639 457.812 641.688 460.5 645 460.5 c 648.312 460.5 651 457.812 651 454.5 c S /Cs9 CS 1 SCN 0.25 w 304.5 861 m 352.5 861 l 304.5 48 m 352.5 48 l 12 478.5 m 12 430.5 l 645 478.5 m 645 430.5 l 328.5 873 m 328.5 849 l 328.5 60 m 328.5 36 l 0 454.5 m 24 454.5 l 633 454.5 m 657 454.5 l 328.5 861 m 334.5 861 l 334.5 857.688 331.812 855 328.5 855 c 325.188 855 322.5 857.688 322.5 861 c 322.5 864.312 325.188 867 328.5 867 c 331.812 867 334.5 864.312 334.5 861 c 328.5 48 m 334.5 48 l 334.5 44.688 331.812 42 328.5 42 c 325.188 42 322.5 44.688 322.5 48 c 322.5 51.312 325.188 54 328.5 54 c 331.812 54 334.5 51.312 334.5 48 c 12 454.5 m 18 454.5 l 18 451.188 15.312 448.5 12 448.5 c 8.688 448.5 6 451.188 6 454.5 c 6 457.812 8.688 460.5 12 460.5 c 15.312 460.5 18 457.812 18 454.5 c 645 454.5 m 651 454.5 l 651 451.188 648.312 448.5 645 448.5 c 641.688 448.5 639 451.188 639 454.5 c 639 457.812 641.688 460.5 645 460.5 c 648.312 460.5 651 457.812 651 454.5 c S endstream endobj 26 0 obj << /Type /Page /Parent 490 0 R /Resources 27 0 R /Contents 28 0 R /Thumb 339 0 R /MediaBox [ 0 0 684 873 ] /CropBox [ 0 0 684 873 ] /Rotate 0 >> endobj 27 0 obj << /ProcSet [ /PDF /Text ] /Font << /F1 515 0 R /F2 518 0 R /F3 261 0 R /F4 266 0 R /F5 262 0 R /F8 268 0 R /F10 270 0 R >> /ExtGState << /GS1 523 0 R /GS2 521 0 R >> /ColorSpace << /Cs9 520 0 R >> >> endobj 28 0 obj << /Length 16175 >> stream 1 g /GS1 gs 0 873 m 0 873 l f q 1 i 27 846 603 -783 re 0 873 m W n 0 873 684 -873 re W n BT /F1 1 Tf 11 0 0 11 63 802.0776 Tm 0 0 0 1 k /GS2 gs 0.0199 Tc 1.0609 Tw [(K)6(en W)9.7(illiams )-14.8(wr)5.8(ote )]TJ /F4 1 Tf 11.578 0 TD 0 Tw [(A)12.1(pache::A)17.8(uthCookie)]TJ /F1 1 Tf 10.1837 0 TD 0.0197 Tc (for)Tj -21.7617 -1.0909 TD -0.0001 Tc 0.0245 Tw [(authentication and authorization via cookies. J)29.7(acob D)5.8(avies)39.7()]TJ /F4 1 Tf T* 0 Tw [(A)12.1(pache::A)17.8(uthCookieDBI)]TJ /F1 1 Tf 10.5931 0 TD 0.0664 Tw (authenticates against a database)Tj -10.5931 -1.0909 TD 0.0157 Tc 0 Tw (via )Tj /F4 1 Tf 1.7651 0 TD (DBI)Tj /F1 1 Tf 1.8462 0 TD 0.0159 Tc 0.3591 Tw (. )Tj /F4 1 Tf 1.5159 0 TD 0.0157 Tc 0 Tw [(A)12(pache::A)17.7(uthT)31.9(icket)]TJ /F1 1 Tf 8.3945 0 TD 0.3591 Tw [(, b)5.8(y)0( M)12(ichael Schout,)]TJ -13.5217 -1.0909 TD -0.0001 Tc 0.025 Tw (handles cookie-based tickets.)Tj /F4 1 Tf 0 -2.1818 TD 0 Tw [(A)12.1(pache::GD::G)23.9(raph)]TJ /F1 1 Tf 8.1597 0 TD 0.0059 Tw [(, b)5.8(y)0( Rafael Kito)15.8(v)5.9(e)0.1(r)59.7(,)0( generates char)-7.9(ts in)]TJ -8.1597 -1.0909 TD 0.025 Tw [(an A)11.9(pache handler)59.7(.)]TJ 0 -2.1818 TD 0.09 Tw [(Leon B)11.9(r)6(ocar)13.8(d)12.1()79.9(s )]TJ /F4 1 Tf 6.1407 0 TD -0.0002 Tc 0 Tw [(G)23.8(raphViz)]TJ /F1 1 Tf 4.4561 0 TD -0.0001 Tc 0.0899 Tw [(is an inter)-7.9(face to the G)23.9(raphV)9.7(iz)]TJ -10.5968 -1.0909 TD 0.1231 Tw [(graphing tool. D)11.9(iab J)29.7(erius)39.7( )]TJ /F4 1 Tf 10.957 0 TD -0.0002 Tc 0 Tw [(I)11.9(mage::DS9)]TJ /F1 1 Tf 5.2176 0 TD -0.0001 Tc 0.1231 Tw [(is an inter)-7.9(face to)]TJ -16.1746 -1.0909 TD 0.025 Tw [(the DS9 image display and analysis pr)5.8(ogram.)]TJ /F4 1 Tf 0 -2.1818 TD 0.0198 Tc 0 Tw [(D)11.8(ialog)]TJ /F1 1 Tf 2.9022 0 TD 0.4784 Tw [(, fr)5.8(om)-520(M)12(ichael S)11.9(amano)15.8(v)75(,)-520.1(is an inter)-7.8(face to)]TJ /F2 1 Tf 9 0 0 9 63 634.0776 Tm -0.0002 Tc 0 Tw (dialog\(3\))Tj /F1 1 Tf 11 0 0 11 111.5881 634.0776 Tm -0.0001 Tc 0.2388 Tw [(. Ashish G)11.9(u)0.1(lhati)19.7()79.9(s )]TJ /F4 1 Tf 7.706 0 TD 0 Tw [(P)59.9(erlVision)]TJ /F1 1 Tf 4.7356 0 TD 0.2388 Tw [(cr)9.7(eates text UI)]TJ -16.8586 -1.0909 TD 0.0174 Tw [(widgets. Ashish also wr)5.8(ote )]TJ /F4 1 Tf 10.4061 0 TD 0 Tw [(P)59.9(ersistence::D)5.8(atabase::SQL)]TJ /F1 1 Tf 11.3955 0 TD -0.0003 Tc (for)Tj -21.8017 -1.0909 TD 0.0199 Tc 1.3543 Tw (object persistence in SQL databases and)Tj /F4 1 Tf T* -0.0001 Tc 0 Tw [(P)59.9(ersistence::O)5.8(bject::P)59.8(ostgr)19.7(e)0(s)]TJ /F1 1 Tf 12.09 0 TD 0.2402 Tw (for object persistence with)Tj -12.09 -1.0909 TD 0.001 Tc 0 Tw [(P)54.1(ostgr)9.7(eSQL. )]TJ /F4 1 Tf 5.4977 0 TD 0.0008 Tc [(IO::BL)29.6(OB::Pg)]TJ /F1 1 Tf 5.9025 0 TD 0.001 Tc 0.374 Tw [(, b)5.8(y)-501.1(M)12(a)0.3(r)5.8(k)0( A. H)17.8(e)0.1(rshberger)59.8(,)]TJ -11.4002 -1.0909 TD 0.0116 Tc 0.3633 Tw (emulates the )Tj /F4 1 Tf 5.9676 0 TD 0 Tw [(IO::F)21.8(ile)]TJ /F1 1 Tf 3.9062 0 TD 0.3634 Tw [(inter)-8(face for P)53.8(ostgr)9.6(eSQL large)]TJ -9.8738 -1.0909 TD -0.0001 Tc 0 Tw (objects.)Tj 0 -2.1818 TD 0.025 Tw [(M)12(a)0.3(r)-7.9(tin H)17.8(osken wr)5.8(ote )]TJ /F8 1 Tf 8.7313 0 TD 0 Tw [(F)35.8(ont::F)41.9(r)19.8(e)0.1(t)]TJ /F1 1 Tf 3.9023 0 TD 0.025 Tw [(, a font r)9.7(epor)-7.9(ting tool.)]TJ /F4 1 Tf -12.6336 -2.1818 TD -0.0002 Tc 0 Tw [(PDL::IO::G)23.8(rib)]TJ /F1 1 Tf 6.0752 0 TD -0.0001 Tc 0.0161 Tw [(, b)5.8(y)-500.1(J)23.9(im E)5.8(dwar)13.8(ds,)-500.1(pr)5.8(o)15.9(vides utilities for the)]TJ -6.0752 -1.0909 TD 0.025 Tw (grib file format.)Tj /F4 1 Tf 0 -2.1818 TD 0 Tw [(G)5.9(ames::Alak)]TJ /F1 1 Tf 5.1506 0 TD 0.0603 Tw [(, y)5.8(et another game fr)5.8(om)-500(S)12.1(ean M. B)11.9(u)0.1(r)5.8(ke, is a)]TJ -5.1506 -1.0909 TD 0.1369 Tw [(simple game-tr)9.7(ee implementation of a gomoku-like game)]TJ T* 0.025 Tw [(\(discussed in )44.8(TPJ #18\).)]TJ 0 -2.1818 TD -0.0471 Tw [(Andy W)87.8(a)0.3(r)13.8(dley)29.7()79.9(s)-0.1( )]TJ /F4 1 Tf 6.1466 0 TD 0 Tw [(K)-5.8(ite)]TJ /F1 1 Tf 1.9672 0 TD -0.0323 Tw (is a collection of modules useful in kite)Tj -8.1138 -1.0909 TD 0.1283 Tw [(design and constr)-7.9(uction. H)17.8(e)0( also wr)5.8(ote )]TJ /F4 1 Tf 16.0969 0 TD -0.0002 Tc 0 Tw (DBO)Tj /F1 1 Tf 2.2156 0 TD -0.0001 Tc 0.1283 Tw (, an object-)Tj -18.3125 -1.0909 TD 0.025 Tw [(oriented database abstraction lay)5.8(er)59.7(.)]TJ /F4 1 Tf 0 -2.1818 TD -0.0002 Tc 0 Tw (DBIx::Schema)Tj /F1 1 Tf 5.9131 0 TD -0.0001 Tc 0.0856 Tw [(, b)5.8(y)-500.1(J)29.7(ason M)23.9(c)0.1(I)11.9(ntosh,)-500.1(is a SQL abstraction)]TJ -5.9131 -1.0909 TD 0.0113 Tc 0.3636 Tw [(lay)5.8(er for wor)5.8(king with whole schemas. Ariel B)12(r)6(osh)69.8()79.9(s)]TJ /F4 1 Tf T* -0.0001 Tc 0 Tw [(D)5.8(ata::D)11.9(ir)19.7(ect)]TJ /F1 1 Tf 5.6389 0 TD 0.2969 Tw (emulates sequential access to SQL tables.)Tj /F4 1 Tf -5.6389 -1.0909 TD 0 Tw [(T)110(ableM)11.9(ap)]TJ /F1 1 Tf 4.0894 0 TD 0.2514 Tw [(, b)5.8(y)-0.1( B)11.9(alzs Szab, maps r)9.7(elational tables into)]TJ -4.0894 -1.0909 TD 0 Tw (hashes.)Tj /F4 1 Tf 0 -2.1818 TD -0.0002 Tc [(DBIx::P)47.7(asswor)19.6(d)]TJ /F1 1 Tf 6.5732 0 TD -0.0001 Tc 0.1804 Tw [(, b)5.8(y)-0.1( B)11.9(rian Aker)59.7(, cr)9.7(eates a global file for)]TJ -6.5732 -1.0909 TD 0.025 Tw [(DBI passwor)13.8(ds.)]TJ 0 -2.1818 TD 0.1217 Tw [(I)5.9(lya )14.8(V)100(erlinsky and P)5.8(hilippe Chane )14.8(Y)93.9(ou Kay)5.8(e wr)5.8(ote )]TJ /F4 1 Tf 20.6994 0 TD 0 Tw [(I)17.9(sam)]TJ /F1 1 Tf 1.9597 0 TD 0 Tc (,)Tj -22.6591 -1.0909 TD -0.0001 Tc 0.0894 Tw [(for lo)11.9(w-lev)5.8(el access to I)11.9(n)0.1(formix C-I)17.7(sam and B)11.9(l)-0.1(ue B)17.8(yte D-)]TJ T* 0.3463 Tw [(I)17.8(sam files. )]TJ /F4 1 Tf 5.385 0 TD -0.0002 Tc 0 Tw [(DB::A)11.8(ppgen)]TJ /F1 1 Tf 5.6898 0 TD -0.0001 Tc 0.3463 Tw [(is an inter)-7.9(face to APPGEN)]TJ -11.0748 -1.0909 TD 0 Tw (databases.)Tj /F4 1 Tf 0 -2.1818 TD 0.0198 Tc (GNOME::GNORBA)Tj /F1 1 Tf 8.7417 0 TD 0.4211 Tw [(, b)5.8(y)-520.1(Ow)5.8(en )44.9(T)109.9(aylor)59.8(,)-520.1(is for using)]TJ -8.7417 -1.0909 TD -0.0001 Tc 0.025 Tw [(ORB)11.9(it with GNOME.)]TJ 0 -2.1818 TD 0.2074 Tw [(Randy J. Ray)29.7()79.9(s)-0.1( )]TJ /F4 1 Tf 6.4221 0 TD -0.0002 Tc 0 Tw (RPM)Tj /F1 1 Tf 2.63 0 TD -0.0001 Tc 0.2074 Tw [(is an inter)-7.9(face to the AP)11.9(I for the)]TJ -9.0521 -1.0909 TD 0.025 Tw [(R)12.1(edH)5.8(at P)41.9(ackage M)11.9(anager)59.7(.)]TJ 0 -2.1818 TD 0.0082 Tw [(B)11.9(arrie S)11.9(laymaker wr)5.8(ote )]TJ /F4 1 Tf 9.2283 0 TD -0.0002 Tc 0 Tw [(IPC::R)11.8(un)]TJ /F1 1 Tf 4.184 0 TD -0.0001 Tc 0.0082 Tw [(to r)-7.9(un subpr)5.8(ocesses with)]TJ -13.4123 -1.0909 TD 0.089 Tw [(piping, r)9.7(edir)9.7(ection, and pseudo-ttys. )]TJ /F4 1 Tf 14.9839 0 TD -0.0002 Tc 0 Tw [(IPC::XP)93.8(A)]TJ /F1 1 Tf 3.9756 0 TD -0.0001 Tc 0.0892 Tw [(, b)5.8(y)-500.1(D)12.1(iab)]TJ 6.4042 61.0909 TD 0.025 Tw [(J)29.7(erius,)-500.1(is an inter)-7.9(face to the XP)39.7(A messaging system.)]TJ /F4 1 Tf 0 -2.1818 TD -0.0002 Tc 0 Tw [(P)29.8(r)5.8(oc::B)5.7(ackgr)5.7(ound)]TJ /F1 1 Tf 7.397 0 TD -0.0001 Tc -0.0315 Tw [(, b)5.8(y)-500.1(B)11.9(lair Z)5.8(ajac,)-500.1(is a generic inter)-7.9(face to)]TJ -7.397 -1.0909 TD 0.0199 Tc 0.4252 Tw [(U)35.9(nix and )14.8(W)9.7(in32 backgr)5.8(ound pr)5.8(ocess management.)]TJ /F4 1 Tf T* -0.0002 Tc 0 Tw [(P)29.8(r)5.8(oc::P)5.7(ID_F)21.8(ile)]TJ /F1 1 Tf 6.1555 0 TD -0.0001 Tc -0.0105 Tw [(, fr)5.8(om S)23.9(tev)5.8(en H)5.8(a)0.3(r)-17.9(yanto, manages P)11.9(ID files.)]TJ /F4 1 Tf -6.1555 -1.0909 TD 0.0198 Tc 0 Tw [(Config::I)11.8(niF)21.8(iles)]TJ /F1 1 Tf 6.7316 0 TD 0.6509 Tw [(, b)5.8(y)-520.1(Rich Bo)11.9(w)5.9(en,)-520.1(r)9.9(eads )]TJ /F2 1 Tf 9 0 0 9 548.2502 742.0776 Tm 0 Tw (.ini)Tj /F1 1 Tf 11 0 0 11 570.5648 742.0776 Tm (-style)Tj -20.7786 -1.0909 TD -0.0001 Tc 0.025 Tw (configuration files.)Tj 0 -2.1818 TD 0.0403 Tw [(D)6(avid Bo)11.9(y)11.9(c)0(e)29.7()79.9(s )]TJ /F4 1 Tf 5.7049 0 TD -0.0002 Tc 0 Tw [(E)5.9(nv::P)47.7(ath)]TJ /F1 1 Tf 4.2691 0 TD -0.0001 Tc 0.0403 Tw [(per)-7.9(forms adv)5.8(anced operations on)]TJ -9.974 -1.0909 TD -0.0365 Tw [(path v)5.8(ariables. H)17.8(is )]TJ /F4 1 Tf 7.2788 0 TD -0.0002 Tc 0 Tw [(ClearC)11.8(ase::S)5.7(yncT)106.8(r)19.7(e)-0.1(e)]TJ /F1 1 Tf 8.4944 0 TD -0.0001 Tc -0.0365 Tw [(synchr)5.8(oniz)5.8(es a tr)9.7(ee)]TJ -15.7732 -1.0909 TD 0.025 Tw [(of files with a tr)9.7(ee of elements.)]TJ /F4 1 Tf 0 -2.1818 TD -0.0002 Tc 0 Tw [(F)21.9(ile::S)11.8(ear)11.8(chP)47.7(ath)]TJ /F1 1 Tf 6.573 0 TD -0.0001 Tc 0.2265 Tw [(, b)5.8(y)-500.1(R)12.1(ober)-7.9(t S)23.9(pier)59.7(,)-500.1(sear)5.8(ches a U)35.9(nix-style)]TJ -6.573 -1.0909 TD 0.0735 Tw (path for a file. )Tj /F4 1 Tf 6.3007 0 TD -0.0002 Tc 0 Tw [(F)21.9(ile::T)119.7(emp)]TJ /F1 1 Tf 4.3228 0 TD -0.0001 Tc 0.0735 Tw [(, b)5.8(y)-0.1( )44.8(T)39.8(im J)29.7(enness, safely r)9.7(eturns)]TJ -10.6235 -1.0909 TD 0.3157 Tw [(the name and handle of a ne)-5.9(w temporar)-17.9(y file. J)29.7(ohan)]TJ T* 0 Tw [(V)78(r)6(omans)39.7( )]TJ /F4 1 Tf 3.9472 0 TD -0.0002 Tc [(D)11.8(ir::P)29.6(urge)]TJ /F1 1 Tf 4.6457 0 TD -0.0001 Tc 0.0539 Tw [(purges dir)9.7(ectories to a giv)5.8(en number)]TJ -8.5929 -1.0909 TD 0.025 Tw (of files.)Tj 0 -2.1818 TD 0.3269 Tw [(Randy M)11.9(aas wr)5.8(ote a simple D)11.9(iscr)9.7(ete F)33.9(inite A)17.8(u)0.1(tomata)]TJ 0 -1.0909 TD 0.025 Tw (implementation in )Tj /F4 1 Tf 7.518 0 TD -0.0002 Tc 0 Tw [(DF)41.8(A::S)11.8(imple)]TJ /F1 1 Tf 5.2686 0 TD 0 Tc (.)Tj /F4 1 Tf -12.7866 -2.1818 TD -0.0001 Tc [(M)11.9(ath::Libm)]TJ /F1 1 Tf 4.937 0 TD 0.0287 Tw [(, b)5.8(y)-500.1(D)6(aniel S. Le)-5.9(war)-7.9(t,)-500.1(is an inter)-7.9(face to )]TJ /F5 1 Tf 16.0038 0 TD -0.0002 Tc 0 Tw (libm)Tj /F1 1 Tf 1.7183 0 TD 0 Tc (,)Tj -22.6591 -1.0909 TD -0.0001 Tc 0.025 Tw [(the C math librar)-17.9(y)84.9(.)]TJ 0 -2.1818 TD -0.0286 Tw [(K)24(u)0.1(r)-7.9(t)0( Kincaid has been busy making the world)11.9()79.9(s)0( information)]TJ 0 -1.0909 TD -0.0283 Tw [(a bit safer)59.7(. )]TJ /F4 1 Tf 4.0673 0 TD -0.0002 Tc 0 Tw [(C)5.7(r)-17.9(ypt::O)29.6(TP)]TJ /F1 1 Tf 5.1517 0 TD -0.0001 Tc -0.0283 Tw [(pr)5.8(o)15.9(vides O)5.8(ne )44.8(T)39.8(ime P)41.9(ad encr)-17.9(yption;)]TJ /F4 1 Tf -9.2189 -1.0909 TD 0.0199 Tc 0 Tw [(C)5.8(r)-17.8(ypt::R)29.8(C4)]TJ /F1 1 Tf 5.8409 0 TD 0.6019 Tw [(implements the R)35.9(C5 algorithm; and)]TJ /F4 1 Tf -5.8409 -1.0909 TD 0.0078 Tc 0 Tw [(C)5.7(r)-17.8(ypt::S)5.7(olitair)19.6(e)]TJ /F1 1 Tf 7.0809 0 TD 0.367 Tw [(implements B)11.9(r)-7.7(uce Schneier)19.7()79.9(s)0.1( S)11.9(olitair)9.7(e)]TJ -7.0809 -1.0909 TD -0.0001 Tc 0.3665 Tw [(algorithm, populariz)5.8(ed in the )]TJ /F4 1 Tf 13.0216 0 TD 0.3807 Tw [(N)29.9(eal S)23.8(tephenson)]TJ /F1 1 Tf 7.8237 0 TD -0.0002 Tc 0 Tw [(no)15.7(v)5.8(e)0(l)]TJ /F4 1 Tf -20.8454 -1.0909 TD -0.0001 Tc [(C)5.8(r)-17.8(yptonomicon)]TJ /F1 1 Tf 6.5615 0 TD 0 Tc (.)Tj /F4 1 Tf -6.5615 -2.1818 TD 0.0024 Tc [(C)5.7(r)-17.8(ypt::R)-6(andP)47.7(assw)5.7(d)]TJ /F1 1 Tf 8.0938 0 TD 0.3725 Tw [(, b)5.7(y)-502.7(J)29.6(ohn D. P)53.8(o)0.2(r)-8(ter)59.7(,)-502.7(i)-0.1(s a random)]TJ -8.0938 -1.0909 TD -0.0001 Tc -0.0138 Tw [(passwor)13.8(d generator based on FIPS-181. )]TJ /F4 1 Tf 15.6942 0 TD -0.0002 Tc 0 Tw (GPG)Tj /F1 1 Tf 2.0686 0 TD -0.0001 Tc -0.0137 Tw [(, b)5.8(y)-500.1(P)5.9(h)0.1(ilippe)]TJ -17.7628 -1.0909 TD 0.1636 Tw [(F)35.9(r)6(oidev)5.8(aux,)-500.1(is another inter)-7.9(face to GNU P)29.7(riv)5.8(acy G)11.9(uar)13.8(d.)]TJ /F4 1 Tf T* 0 Tw [(C)5.8(r)-17.8(ypt::xDBM_F)21.9(ile)]TJ /F1 1 Tf 7.7292 0 TD 0.1656 Tw [(, b)5.8(y)-500.1(E)5.8(ric Estabr)5.8(ooks, encr)-17.9(ypts almost)]TJ -7.7292 -1.0909 TD 0.025 Tw (any kind of DBM file.)Tj /F4 1 Tf 0 -2.1818 TD -0.0002 Tc 0 Tw [(T)119.9(ext::T)106.8(r)19.7(eeF)21.8(ile)]TJ /F1 1 Tf 5.4834 0 TD -0.0001 Tc 0.0284 Tw [(, fr)5.8(om)-500(J)29.7(ohn Kir)5.8(k)-0.1(,)-500.1(r)9.9(eads a tr)9.7(ee of text strings)]TJ -5.4834 -1.0909 TD 0.025 Tw [(into a data str)-7.9(uctur)9.7(e.)]TJ 0 -2.1818 TD -0.0002 Tc 0.0921 Tw [(Alan Schwar)-8(tz)39.6()79.8(s)-0.2( )]TJ /F4 1 Tf 6.4114 0 TD 0 Tw (Locale::PO)Tj /F1 1 Tf 4.9075 0 TD -0.0001 Tc (manipulates )Tj /F2 1 Tf 9 0 0 9 521.6163 322.0776 Tm -0.0002 Tc (.po)Tj /F1 1 Tf 11 0 0 11 541.5751 322.0776 Tm -0.0001 Tc 0.0921 Tw [(entries fr)5.8(om)]TJ -18.1432 -1.0909 TD 0 Tw [(GNU)79.8(s )]TJ /F5 1 Tf 3.0287 0 TD (gettext)Tj /F1 1 Tf 2.3455 0 TD 0 Tc (.)Tj /F4 1 Tf -5.3741 -2.1818 TD 0.0199 Tc [(T)120(ext::D)11.9(oubleM)23.9(etaphone)]TJ /F1 1 Tf 10.3809 0 TD 1.3593 Tw [(, b)5.8(y)-0.1( M)11.9(aurice A)17.8(ubr)9.7(ey)84.9(,)]TJ -10.3809 -1.0909 TD 0.4121 Tw [(phonetically encodes wor)13.9(ds using Lawr)9.7(ence P)5.8(h)0.1(ilips)39.7()]TJ T* -0.0001 Tc 0.025 Tw [(impr)5.8(o)15.9(v)5.9(ed v)5.8(ersion of the original metaphone algorithm.)]TJ /F4 1 Tf 0 -2.1818 TD 0 Tw [(P)29.9(r)5.9(oLite)]TJ /F1 1 Tf 3.0657 0 TD 0.3687 Tw [(, b)5.8(y)-0.1( M)11.9(a)0.3(r)5.8(c)0( D. S)23.9(pencer)59.7(,)-500.1(contr)5.8(ols P)29.7(r)6(o-Lite LED)]TJ -3.0657 -1.0909 TD 0.2364 Tw [(message signs. M)11.9(a)0.3(r)5.8(c)0( Lehmann)69.8()79.9(s)-0.1( )]TJ /F4 1 Tf 13.2856 0 TD -0.03 Tc 0 Tw [(RC)-30(U)]TJ /F1 1 Tf 2.5494 0 TD -0.0001 Tc 0.2364 Tw [(is an inter)-7.9(face to)]TJ -15.835 -1.0909 TD 0.1447 Tw [(r)9.9(emote contr)5.8(ol units. )]TJ /F4 1 Tf 9.222 0 TD 0 Tw [(S)17.9(linke)]TJ /F1 1 Tf 2.5535 0 TD 0.1447 Tw [(, b)5.8(y)-0.1( B)11.9(rian P)41.9(aulsen, contr)5.8(ols)]TJ -11.7755 -1.0909 TD 0.025 Tw [(S)12.1(link-e, an IR and S-link micr)5.8(ocontr)5.8(oller)59.7(.)]TJ /F10 1 Tf 0 -2.1818 TD 0.0278 Tw (_ _END_ _)Tj /F5 1 Tf T* 0.1208 Tw [(Chris N)29.7(andor )]TJ /F1 1 Tf 5.6174 0 TD 0 Tc 0 Tw (\()Tj 9 0 0 9 407.3094 154.0775 Tm -0.0001 Tc [(pudge@pobo)5.8(x.com)]TJ 11 0 0 11 474.4622 154.0775 Tm 0 Tc (\))Tj /F5 1 Tf 0.6907 0 TD -0.0001 Tc 0.1208 Tw [(is a little teapot, shor)-7.9(t and)]TJ -12.7327 -1.0909 TD 0 Tw (stout.)Tj /F1 1 Tf 12 0 0 12 63 90.3543 Tm 0 Tc [(10)-1100(F)]TJ 10.44 0 0 10.44 94.2795 90.3543 Tm -0.0001 Tc (ALL)Tj 12 0 0 12 115.6277 90.3543 Tm 0 Tc (2000)Tj /F3 1 Tf 30.9897 0.0003 TD -0.0002 Tc 0.0255 Tw [(The P)47.6(erl J)35.7(our)-8(nal #19)]TJ ET Q 0 0 0 0 k /GS2 gs 1 i 37 874 191 -12 re 587.395 90.357 m f* BT /F2 1 Tf 8 0 0 8 39 864 Tm /Cs9 cs 1 scn -0.0004 Tc -0.0019 Tw (TPJ#19/9.26 9/27/00 10:35 AM Page 10)Tj ET 1 G 0 J 0 j 0.5 w 10 M []0 d 36 873 m 36 849 l 0 837 m 24 837 l 621 873 m 621 849 l 657 837 m 633 837 l 36 36 m 36 60 l 0 72 m 24 72 l 621 36 m 621 60 l 657 72 m 633 72 l S /Cs9 CS 1 SCN 0.25 w 36 873 m 36 849 l 0 837 m 24 837 l 621 873 m 621 849 l 657 837 m 633 837 l 36 36 m 36 60 l 0 72 m 24 72 l 621 36 m 621 60 l 657 72 m 633 72 l S 1 G 0.5 w 304.5 861 m 352.5 861 l 304.5 48 m 352.5 48 l 12 478.5 m 12 430.5 l 645 478.5 m 645 430.5 l 328.5 873 m 328.5 849 l 328.5 60 m 328.5 36 l 0 454.5 m 24 454.5 l 633 454.5 m 657 454.5 l 328.5 861 m 334.5 861 l 334.5 857.688 331.812 855 328.5 855 c 325.188 855 322.5 857.688 322.5 861 c 322.5 864.312 325.188 867 328.5 867 c 331.812 867 334.5 864.312 334.5 861 c 328.5 48 m 334.5 48 l 334.5 44.688 331.812 42 328.5 42 c 325.188 42 322.5 44.688 322.5 48 c 322.5 51.312 325.188 54 328.5 54 c 331.812 54 334.5 51.312 334.5 48 c 12 454.5 m 18 454.5 l 18 451.188 15.312 448.5 12 448.5 c 8.688 448.5 6 451.188 6 454.5 c 6 457.812 8.688 460.5 12 460.5 c 15.312 460.5 18 457.812 18 454.5 c 645 454.5 m 651 454.5 l 651 451.188 648.312 448.5 645 448.5 c 641.688 448.5 639 451.188 639 454.5 c 639 457.812 641.688 460.5 645 460.5 c 648.312 460.5 651 457.812 651 454.5 c S /Cs9 CS 1 SCN 0.25 w 304.5 861 m 352.5 861 l 304.5 48 m 352.5 48 l 12 478.5 m 12 430.5 l 645 478.5 m 645 430.5 l 328.5 873 m 328.5 849 l 328.5 60 m 328.5 36 l 0 454.5 m 24 454.5 l 633 454.5 m 657 454.5 l 328.5 861 m 334.5 861 l 334.5 857.688 331.812 855 328.5 855 c 325.188 855 322.5 857.688 322.5 861 c 322.5 864.312 325.188 867 328.5 867 c 331.812 867 334.5 864.312 334.5 861 c 328.5 48 m 334.5 48 l 334.5 44.688 331.812 42 328.5 42 c 325.188 42 322.5 44.688 322.5 48 c 322.5 51.312 325.188 54 328.5 54 c 331.812 54 334.5 51.312 334.5 48 c 12 454.5 m 18 454.5 l 18 451.188 15.312 448.5 12 448.5 c 8.688 448.5 6 451.188 6 454.5 c 6 457.812 8.688 460.5 12 460.5 c 15.312 460.5 18 457.812 18 454.5 c 645 454.5 m 651 454.5 l 651 451.188 648.312 448.5 645 448.5 c 641.688 448.5 639 451.188 639 454.5 c 639 457.812 641.688 460.5 645 460.5 c 648.312 460.5 651 457.812 651 454.5 c S endstream endobj 29 0 obj << /Type /Page /Parent 492 0 R /Resources 30 0 R /Contents 31 0 R /Thumb 341 0 R /MediaBox [ 0 0 684 873 ] /CropBox [ 0 0 684 873 ] /Rotate 0 >> endobj 30 0 obj << /ProcSet [ /PDF /Text ] /Font << /F1 515 0 R /F2 518 0 R >> /ExtGState << /GS1 523 0 R /GS2 521 0 R >> /ColorSpace << /Cs9 520 0 R >> >> endobj 31 0 obj << /Length 2718 >> stream 1 g /GS1 gs 0 873 m 0 873 l f q 1 i 27 846 603 -783 re 0 873 m W n 0 873 684 -873 re W n 0 0 0 0.1 k 63.5 809.5 530 -710 re 0 873 m f* 0 0 0 1 K 0 J 0 j 1 w 10 M []0 d 63.5 809.5 530 -710 re S BT /F1 1 Tf 19 0 0 19 307.2344 520.3156 Tm 0 0 0 1 k /GS2 gs -0.0001 Tc 0.025 Tw [(P)42.1(age 11:)]TJ -0.7515 -1.2 TD -0.0002 Tc 0 Tw [(CAMEL)11.7(O)29.7(T)]TJ -0.7983 -1.2 TD 0.0251 Tw [(AP)39.6(A)12(CHE CON)]TJ 2.0311 -2.4 TD -0.0001 Tc 0 Tw [(NE)11.8(W)]TJ ET Q 0 0 0 0 k /GS2 gs 1 i 37 874 191 -12 re 360.364 429.116 m f* BT /F2 1 Tf 8 0 0 8 39 864 Tm /Cs9 cs 1 scn -0.0004 Tc -0.0019 Tw (TPJ#19/9.26 9/27/00 10:35 AM Page 11)Tj ET 1 G 0 J 0 j 0.5 w 10 M []0 d 36 873 m 36 849 l 0 837 m 24 837 l 621 873 m 621 849 l 657 837 m 633 837 l 36 36 m 36 60 l 0 72 m 24 72 l 621 36 m 621 60 l 657 72 m 633 72 l S /Cs9 CS 1 SCN 0.25 w 36 873 m 36 849 l 0 837 m 24 837 l 621 873 m 621 849 l 657 837 m 633 837 l 36 36 m 36 60 l 0 72 m 24 72 l 621 36 m 621 60 l 657 72 m 633 72 l S 1 G 0.5 w 304.5 861 m 352.5 861 l 304.5 48 m 352.5 48 l 12 478.5 m 12 430.5 l 645 478.5 m 645 430.5 l 328.5 873 m 328.5 849 l 328.5 60 m 328.5 36 l 0 454.5 m 24 454.5 l 633 454.5 m 657 454.5 l 328.5 861 m 334.5 861 l 334.5 857.688 331.812 855 328.5 855 c 325.188 855 322.5 857.688 322.5 861 c 322.5 864.312 325.188 867 328.5 867 c 331.812 867 334.5 864.312 334.5 861 c 328.5 48 m 334.5 48 l 334.5 44.688 331.812 42 328.5 42 c 325.188 42 322.5 44.688 322.5 48 c 322.5 51.312 325.188 54 328.5 54 c 331.812 54 334.5 51.312 334.5 48 c 12 454.5 m 18 454.5 l 18 451.188 15.312 448.5 12 448.5 c 8.688 448.5 6 451.188 6 454.5 c 6 457.812 8.688 460.5 12 460.5 c 15.312 460.5 18 457.812 18 454.5 c 645 454.5 m 651 454.5 l 651 451.188 648.312 448.5 645 448.5 c 641.688 448.5 639 451.188 639 454.5 c 639 457.812 641.688 460.5 645 460.5 c 648.312 460.5 651 457.812 651 454.5 c S /Cs9 CS 1 SCN 0.25 w 304.5 861 m 352.5 861 l 304.5 48 m 352.5 48 l 12 478.5 m 12 430.5 l 645 478.5 m 645 430.5 l 328.5 873 m 328.5 849 l 328.5 60 m 328.5 36 l 0 454.5 m 24 454.5 l 633 454.5 m 657 454.5 l 328.5 861 m 334.5 861 l 334.5 857.688 331.812 855 328.5 855 c 325.188 855 322.5 857.688 322.5 861 c 322.5 864.312 325.188 867 328.5 867 c 331.812 867 334.5 864.312 334.5 861 c 328.5 48 m 334.5 48 l 334.5 44.688 331.812 42 328.5 42 c 325.188 42 322.5 44.688 322.5 48 c 322.5 51.312 325.188 54 328.5 54 c 331.812 54 334.5 51.312 334.5 48 c 12 454.5 m 18 454.5 l 18 451.188 15.312 448.5 12 448.5 c 8.688 448.5 6 451.188 6 454.5 c 6 457.812 8.688 460.5 12 460.5 c 15.312 460.5 18 457.812 18 454.5 c 645 454.5 m 651 454.5 l 651 451.188 648.312 448.5 645 448.5 c 641.688 448.5 639 451.188 639 454.5 c 639 457.812 641.688 460.5 645 460.5 c 648.312 460.5 651 457.812 651 454.5 c S endstream endobj 32 0 obj << /Type /Page /Parent 492 0 R /Resources 33 0 R /Contents 34 0 R /Thumb 343 0 R /MediaBox [ 0 0 684 873 ] /CropBox [ 0 0 684 873 ] /Rotate 0 >> endobj 33 0 obj << /ProcSet [ /PDF /Text ] /Font << /F1 515 0 R /F2 518 0 R /F3 261 0 R /F5 262 0 R /F7 267 0 R /F8 268 0 R /F9 269 0 R /F11 271 0 R >> /ExtGState << /GS1 523 0 R /GS2 521 0 R >> /ColorSpace << /Cs9 520 0 R /Cs10 264 0 R >> >> endobj 34 0 obj << /Length 13927 >> stream 1 g /GS1 gs 0 873 m 0 873 l f q 1 i 27 846 603 -783 re 0 873 m W n 0 873 684 -873 re W n BT /F1 1 Tf 29.09 0 0 29.09 62.2227 582.0442 Tm 0 0 0 1 k /GS2 gs 0 Tc 0 Tw (C)Tj 11 0 0 11 82.125 594.0442 Tm -0.0001 Tc 0.1283 Tw [(onv)5.8(ergence! )44.8(The latest buzzwor)13.8(d of the dot com era.)]TJ 0 -1.0909 TD 0.059 Tw [(Conv)5.8(ergence is the magical integration of the desktop)]TJ -1.7386 -1.0909 TD -0.0185 Tw [(computer)59.7(, the I)11.9(nternet, television, radio, and the telephone.)]TJ T* 0.2506 Tw [(I)12(n)0( the wor)13.8(ds of the industr)-17.9(y pundits, conv)5.8(ergence will)]TJ T* 0.0086 Tc 0.3663 Tw [(change ev)5.9(er)-17.8(ything, and the technology hailed as the)]TJ T* -0.0001 Tc -0.0368 Tw [(for)9.7(er)-7.9(unner of conv)5.8(ergence is IP telephony)84.9(, which allo)11.9(ws y)5.8(o)0.1(u)]TJ T* 0.2095 Tw [(to make long distance calls with nothing mor)9.7(e than an)]TJ T* 0.025 Tw [(I)12(nternet connection and a high quality sound car)13.8(d.)]TJ 0 -2.1818 TD 0.2432 Tw [(I hate being left behind on the technology cur)-17.9(v)5.9(e, so I)]TJ 0 -1.0909 TD 0.0661 Tw [(decided to write my o)11.9(wn IP telephone application in P)53.9(erl.)]TJ T* 0.0344 Tw [(I)23.9(t)0( isn)69.8()79.9(t)0( elegant, and it lacks most of the functions of r)9.6(eal IP)]TJ T* -0.0352 Tw [(telephony applications, but it wor)5.8(ks. I)11.9(n)0( this ar)-7.9(ticle, I)11.9(ll sho)11.9(w)]TJ T* 0.0025 Tw [(y)5.8(ou the two v)5.8(ersions of the application: a simple one which)]TJ T* 0.3263 Tw [(r)9.9(equir)9.7(es ISDN-speed connections to wor)5.8(k w)5.8(ell, and a)]TJ T* 0.1838 Tw [(some)-5.9(what mor)9.7(e)0( sophisticated v)5.8(ersion that uses the MP3)]TJ T* 0.025 Tw [(format to r)9.7(educe the bitrate for slo)11.9(w)5.8(er connections.)]TJ /F8 1 Tf 12 0 0 12 63 376.0442 Tm 0 Tc 0 Tw (S)Tj 10.44 0 0 10.44 69.2868 376.0442 Tm 0.0229 Tc [(OUNDCARDS)-345.3(AND)]TJ /F11 1 Tf 11 0 0 11 168.7191 376.0442 Tm 0.0198 Tc (/DEV/DSP)Tj /F1 1 Tf -9.6108 -2.3636 TD -0.0001 Tc 0.025 Tw [(IP telephony r)9.7(equir)9.7(es thr)9.7(ee things:)]TJ 0 -2.1818 TD [(1. R)11.9(eading sound data fr)5.8(om the micr)5.8(ophone)]TJ 0 -1.6364 TD [(2. )14.8(W)81.7(riting sound data to the system speaker)]TJ T* [(3. M)23.9(o)15.9(ving sound data acr)5.8(oss the networ)5.8(k)]TJ 0 -2.1818 TD 0.0568 Tw [(W)77.8(e)0( kno)11.9(w ho)11.9(w to do item thr)9.7(ee with B)5.8(e)0.1(r)5.8(keley sockets, but)]TJ 0 -1.0909 TD 0.025 Tw (what about items one and two?)Tj 0 -2.1818 TD -0.0177 Tw [(O)5.8(n)0( U)35.8(n)0(ix systems, the answ)5.8(er is simple. A)17.8(udio-capable U)35.9(nix)]TJ 0 -1.0909 TD 0.1023 Tw [(systems hav)5.8(e a special device file for communicating with)]TJ T* 0.091 Tw [(the digital signal pr)5.8(ocessor \(DSP\) driv)5.8(er)59.7(. Common names)]TJ T* 0 Tw (include )Tj /F2 1 Tf 9 0 0 9 100.2007 194.0442 Tm -0.0002 Tc (/dev/dsp)Tj /F1 1 Tf 11 0 0 11 143.3902 194.0442 Tm 0 Tc (, )Tj /F2 1 Tf 9 0 0 9 152.0436 194.0442 Tm -0.0002 Tc (/dev/audio)Tj /F1 1 Tf 11 0 0 11 206.0304 194.0442 Tm -0.0001 Tc 0.2867 Tw (, and )Tj /F2 1 Tf 9 0 0 9 236.3997 194.0442 Tm -0.0002 Tc 0 Tw (/dev/sound)Tj /F1 1 Tf 11 0 0 11 290.3865 194.0442 Tm -0.0001 Tc 0.2868 Tw [(. J)35.8(ust)]TJ -20.6715 -1.0909 TD -0.0109 Tw [(open the device like an or)13.8(dinar)-17.9(y file, r)9.7(ead fr)5.8(om it to captur)9.7(e)]TJ T* 0.11 Tw [(sound data fr)5.8(om the micr)5.8(ophone, and write to it to send)]TJ T* 0.025 Tw [(sound data to the speaker)59.7(.)]TJ 0 -2.1818 TD 0.1525 Tw [(The pr)5.8(ograms in this ar)-7.9(ticle r)-7.9(uns on Linux systems, and)]TJ 0 -1.0909 TD -0.0162 Tw (assumes the sound device is named )Tj /F2 1 Tf 9 0 0 9 212.9539 122.0442 Tm -0.0002 Tc 0 Tw (/dev/dsp)Tj /F1 1 Tf 11 0 0 11 256.1433 122.0442 Tm -0.0001 Tc -0.0162 Tw (. Linux sound)Tj 7.8052 56.0939 TD 0.1396 Tw [(driv)5.8(ers ar)9.7(e av)5.8(ailable fr)5.8(om a number of sour)5.8(ces, including)]TJ 0 -1.0909 TD -0.0319 Tw [(the kernel itself and an open sour)5.8(ce pr)5.8(oject called ALSA \(for)]TJ T* 0.0199 Tc 0.6337 Tw [(A)12.1(d)0.2(v)5.8(anced Linux S)11.9(ound Ar)5.8(chitectur)9.7(e, av)5.8(ailable at)]TJ T* -0.0001 Tc 0.1932 Tw [(http://www)74.9(.alsa-pr)5.8(oject.org\). A commer)5.8(cial v)5.8(endor called)]TJ T* 0.0673 Tw [(4F)35.8(r)6(ont )44.9(T)119.9(echnologies sells an inexpensiv)5.8(e package of sound)]TJ T* 0.053 Tw [(driv)5.8(ers that wor)5.8(k with a large number of sound car)13.9(ds on a)]TJ T* 0.3215 Tw [(v)5.9(ariety of U)35.8(nix operating systems, including F)35.8(r)9.9(eeBSD,)]TJ T* 0.3313 Tw [(S)12.1(olaris, HPUX, and AIX \(http://www)74.9(.opensound.com\).)]TJ T* 0.0495 Tw [(Although I hav)5.8(en)69.8()79.9(t)0( tested it, the pr)5.8(ogram should wor)5.8(k fine)]TJ T* 0.025 Tw [(on any system equipped with the 4F)35.8(r)6(ont driv)5.8(ers.)]TJ 0 -2.2727 TD -0.0118 Tw [(O)5.8(nly duplex-capable sound car)13.8(ds ar)9.7(e suitable for telephony)84.9(,)]TJ 0 -1.0909 TD 0.1642 Tw [(because a telephone isn)69.8()79.9(t)0( much good if it can)69.8()79.9(t)0( send and)]TJ T* 0.3071 Tw [(r)9.9(eceiv)5.8(e at the same time. )44.8(The sound )]TJ /F5 1 Tf 16.2075 0 TD -0.0002 Tc 0 Tw [(driv)5.7(er)]TJ /F1 1 Tf 2.7563 0 TD -0.0001 Tc 0.3071 Tw (must also)Tj -18.9638 -1.0909 TD 0.0839 Tw [(suppor)-7.9(t duplex operation, something that gav)5.8(e me a gr)9.7(eat)]TJ T* 0.0608 Tw [(deal of tr)5.8(ouble on my Linux laptop until I disco)15.8(v)5.9(e)0.1(r)9.7(ed that)]TJ T* 0.025 Tw [(the ALSA driv)5.8(er for my sound car)13.8(d lacked duplex suppor)-7.9(t.)]TJ 0 -2.1818 TD 0.0326 Tw [(When y)5.8(ou r)9.7(ead fr)5.8(om )]TJ /F2 1 Tf 9 0 0 9 435.2285 522.0776 Tm -0.0002 Tc 0 Tw (/dev/dsp)Tj /F1 1 Tf 11 0 0 11 481.527 522.0776 Tm -0.0001 Tc 0.0326 Tw [(\(or equiv)5.8(alent\), the data is)]TJ -12.6843 -1.0909 TD 0.0645 Tw [(usually r)9.7(eturned in PCM \(pulse code modulation\) format.)]TJ T* 0.1076 Tw [(I)12(ncoming sound is sampled at some number of times per)]TJ T* 0.162 Tw [(second, and the amplitude of the sound is r)9.7(epor)-7.9(ted as a)]TJ T* -0.0105 Tw [(positiv)5.8(e integer)59.7(. )44.9(T)109.9(ypical sampling rates range fr)5.8(om 4000 Hz)]TJ T* 0.0344 Tw (\(samples per second\) to 44,100 Hz. Each sample may be 8)Tj T* 0.0756 Tw [(or 16 bits and may be mono \(one channel\) or ster)9.7(eo \(two)]TJ T* 0.2189 Tw [(channels\). )44.8(T)119.9(o)0( send sound data fr)5.8(om one sound car)13.9(d to)]TJ T* 0.023 Tw [(another)59.7(, the driv)5.8(ers for both car)13.8(ds hav)5.8(e to be configur)9.7(ed to)]TJ T* 0.2115 Tw [(accept data at the same sampling rate, sample siz)5.8(e, and)]TJ T* 0.025 Tw (number of channels. )Tj 0 -2.1818 TD 0.1181 Tw [(U)35.9(n)0.1(ix pr)5.8(o)15.9(vides a set of )]TJ /F2 1 Tf 9 0 0 9 443.0765 378.0776 Tm -0.0002 Tc 0 Tw (ioctl)Tj /F1 1 Tf 11 0 0 11 474.1194 378.0776 Tm -0.0001 Tc 0.1181 Tw [(calls that let y)5.8(ou adjust the)]TJ -12.0108 -1.0909 TD 0.2077 Tw [(sound car)13.8(d pr)5.8(oper)-7.9(ties. M)23.9(o)0.2(r)9.7(e)0( por)-7.9(tably)84.9(, y)5.8(ou can use S)11.9(eth)]TJ T* 0.3111 Tw [(J)29.7(ohnson)69.8()79.9(s)0( A)17.8(udio::DSP module \(av)5.8(ailable on CP)39.7(AN\) to)]TJ T* 0.2924 Tw [(change the sound settings for OSS and ALSA driv)5.8(ers.)]TJ T* 0.2974 Tw [(U)35.9(nfor)-7.9(tunately)84.9(, S)11.9(eth)69.8()79.9(s)0( module doesn)69.8()79.9(t)0( pr)5.8(o)15.9(vide the dir)9.7(ect)]TJ T* 0.0362 Tw [(filehandle access that w)5.8(e)0( r)9.7(equir)9.7(e for the mor)9.7(e sophisticated)]TJ T* 0.025 Tw [(telephony application, as w)5.8(e)0( shall see later)59.7(.)]TJ 0 -2.1818 TD -0.0189 Tw [(I don)69.8()79.9(t)0( kno)11.9(w anything about wor)5.8(king with audio on )14.8(W)9.7(in32)]TJ 0 -1.0909 TD 0.0126 Tw [(or M)11.9(acintosh platforms. P)5.8(lease let me kno)11.9(w if ther)9.7(e)29.7()79.9(s a way)]TJ T* 0.025 Tw (to do this.)Tj /F8 1 Tf 12 0 0 12 342 232.0776 Tm 0 Tc 0 Tw (T)Tj 10.44 0 0 10.44 350.4226 232.0776 Tm 0.0225 Tc (HE)Tj 12 0 0 12 369.0352 232.0776 Tm 0 Tc (S)Tj 10.44 0 0 10.44 375.322 232.0776 Tm 0.0228 Tc (IMPLE)Tj 12 0 0 12 411.0943 232.0776 Tm 0 Tc (V)Tj 10.44 0 0 10.44 419.1331 232.0776 Tm 0.0228 Tc (ERSION)Tj /F1 1 Tf 11 0 0 11 342 206.0776 Tm -0.0001 Tc -0.0063 Tw [(The simple v)5.8(ersion of the application is sho)11.9(wn in Listings 1)]TJ T* 0.0416 Tw [(and 2. )44.8(Ther)9.7(e ar)9.7(e two pr)5.8(ograms: )14.8(Y)93.9(ou r)-7.9(un )]TJ /F2 1 Tf 9 0 0 9 518.4186 194.0776 Tm -0.0002 Tc 0 Tw (simple_send.pl)Tj /F1 1 Tf 11 0 0 11 342 182.0776 Tm -0.0001 Tc 0.1269 Tw (to place a call, and )Tj /F2 1 Tf 9 0 0 9 430.2129 182.0776 Tm -0.0002 Tc 0 Tw (simple_recv.pl)Tj /F1 1 Tf 11 0 0 11 509.9406 182.0776 Tm -0.0001 Tc 0.1269 Tw (to accept incoming)Tj -15.2673 -1.0909 TD 0.1089 Tw (connections. )Tj /F2 1 Tf 9 0 0 9 403.5641 170.0776 Tm -0.0002 Tc 0 Tw (simple_recv.pl)Tj /F1 1 Tf 11 0 0 11 483.0936 170.0776 Tm -0.0001 Tc 0.1089 Tw [(has to be r)-7.9(unning on the)]TJ -12.8267 -1.0909 TD -0.0308 Tw [(destination machine in or)13.9(der for )]TJ /F2 1 Tf 9 0 0 9 480.6364 158.0776 Tm -0.0002 Tc 0 Tw (simple_send.pl)Tj /F1 1 Tf 11 0 0 11 558.6291 158.0776 Tm -0.0001 Tc -0.0308 Tw [(to wor)5.8(k)-0.1(.)]TJ -19.6936 -2.1818 TD 0.0589 Tw [(H)17.8(e)0.1(r)9.7(e)29.7()79.9(s)0( what )]TJ /F2 1 Tf 9 0 0 9 395.3886 134.0776 Tm -0.0002 Tc 0 Tw (simple_send.pl)Tj /F1 1 Tf 11 0 0 11 474.3673 134.0776 Tm -0.0001 Tc 0.0588 Tw [(looks like when r)-7.9(unning on)]TJ -12.0334 -1.0909 TD 0.025 Tw [(my laptop)15.8(, which is named )]TJ /F2 1 Tf 9 0 0 9 461.2142 122.0776 Tm -0.0002 Tc 0 Tw (pesto)Tj /F1 1 Tf 11 0 0 11 488.2076 122.0776 Tm 0 Tc (.)Tj 12 0 0 12 63 90.3543 Tm [(12)-1100(F)]TJ 10.44 0 0 10.44 94.2795 90.3543 Tm -0.0001 Tc (ALL)Tj 12 0 0 12 115.6277 90.3543 Tm 0 Tc (2000)Tj /F3 1 Tf 30.9897 0.0003 TD -0.0002 Tc 0.0255 Tw [(The P)47.6(erl J)35.7(our)-8(nal #19)]TJ ET 0 0 0 0 k 63 798 531 -21.17 re 587.395 90.357 m f* BT /F8 1 Tf 16 0 0 16 63 786.4766 Tm 0 0 0 1 k 0 Tc 0 Tw (A)Tj 13.92 0 0 13.92 73.0312 786.4766 Tm (N)Tj 16 0 0 16 88.3718 786.4766 Tm -0.0003 Tc [(IP)-255.2(T)]TJ 13.92 0 0 13.92 118.4264 786.4766 Tm -0.0002 Tc [(ELEP)11.8(HONE)-322.5(IN)]TJ 16 0 0 16 216.3792 786.4766 Tm -0.0003 Tc 0.0255 Tw (74 L)Tj 13.92 0 0 13.92 246.1347 786.4766 Tm -0.0001 Tc 0 Tw [(INES)-322.4(OF)]TJ 16 0 0 16 304.4143 786.4766 Tm 0 Tc (P)Tj 13.92 0 0 13.92 313.654 786.4766 Tm -0.0003 Tc (ERL)Tj /F7 1 Tf 16 0 0 16 483.771 786.4766 Tm -0.0002 Tc 0.0278 Tw [(Lincoln D)24.7(.)-205.7(Stein)]TJ ET /Cs10 CS 1 SCN 0 J 0 j 6 w 10 M []0 d 63 807 m 207 807 l S 0 0.03 0.3 0 k /GS1 gs 63.25 746.75 251.5 -125.5 re 593.997 786.477 m f* BT /F9 1 Tf 11.4 0 0 12 162.0183 730.1238 Tm 0 0 0 1 k /GS2 gs 0 Tw [(Resour)24.7(ces)]TJ /F1 1 Tf 8.55 0 0 9 72.5 716.1238 Tm 0 Tc 0.025 Tw [(P)54.1(erl 5.005)-31.9(..................................................................................CP)39.8(A)0.2(N)]TJ 0 -1.3333 TD 0 Tw [(IO::S)12(ocket)-96.3(.................................................................................CP)39.8(A)0.2(N)]TJ T* [(IO::F)34(ile)-240.1(.....................................................................................CP)39.8(A)0.2(N)]TJ T* [(A)18(udio::DSP)-90.6(...............................................................................CP)39.8(A)0.2(N)]TJ T* [(ALSA)-20.6(.........................................................http://www)75(.alsa-pr)5.9(oject.org)]TJ T* -0.0001 Tc -0.0198 Tw [(4F)35.8(r)6(ont T)119.9(echnologies)-110.9(.................................http://www)74.9(.opensound.com)]TJ T* 0 Tw [(mpg123)-51.7(...http://www)74.9(.sfs.nphil.uni-tuebingen.de/~hipp/mpg123.html )]TJ T* 0 Tc [(lame)-120(..........................................................http://www)75(.sulaco)15.9(.org/mp3)]TJ ET 0 0 0 1 K 0.5 w /GS1 gs 63.25 746.75 251.5 -125.5 re 304.521 632.124 m S Q 0 0 0 0 k 1 i 37 874 191 -12 re 304.521 632.124 m f* BT /F2 1 Tf 8 0 0 8 39 864 Tm /Cs9 cs 1 scn -0.0004 Tc -0.0019 Tw (TPJ#19/9.26 9/27/00 10:35 AM Page 12)Tj ET 1 G 0 J 0 j 0.5 w 10 M []0 d 36 873 m 36 849 l 0 837 m 24 837 l 621 873 m 621 849 l 657 837 m 633 837 l 36 36 m 36 60 l 0 72 m 24 72 l 621 36 m 621 60 l 657 72 m 633 72 l S /Cs9 CS 1 SCN 0.25 w 36 873 m 36 849 l 0 837 m 24 837 l 621 873 m 621 849 l 657 837 m 633 837 l 36 36 m 36 60 l 0 72 m 24 72 l 621 36 m 621 60 l 657 72 m 633 72 l S 1 G 0.5 w 304.5 861 m 352.5 861 l 304.5 48 m 352.5 48 l 12 478.5 m 12 430.5 l 645 478.5 m 645 430.5 l 328.5 873 m 328.5 849 l 328.5 60 m 328.5 36 l 0 454.5 m 24 454.5 l 633 454.5 m 657 454.5 l 328.5 861 m 334.5 861 l 334.5 857.688 331.812 855 328.5 855 c 325.188 855 322.5 857.688 322.5 861 c 322.5 864.312 325.188 867 328.5 867 c 331.812 867 334.5 864.312 334.5 861 c 328.5 48 m 334.5 48 l 334.5 44.688 331.812 42 328.5 42 c 325.188 42 322.5 44.688 322.5 48 c 322.5 51.312 325.188 54 328.5 54 c 331.812 54 334.5 51.312 334.5 48 c 12 454.5 m 18 454.5 l 18 451.188 15.312 448.5 12 448.5 c 8.688 448.5 6 451.188 6 454.5 c 6 457.812 8.688 460.5 12 460.5 c 15.312 460.5 18 457.812 18 454.5 c 645 454.5 m 651 454.5 l 651 451.188 648.312 448.5 645 448.5 c 641.688 448.5 639 451.188 639 454.5 c 639 457.812 641.688 460.5 645 460.5 c 648.312 460.5 651 457.812 651 454.5 c S /Cs9 CS 1 SCN 0.25 w 304.5 861 m 352.5 861 l 304.5 48 m 352.5 48 l 12 478.5 m 12 430.5 l 645 478.5 m 645 430.5 l 328.5 873 m 328.5 849 l 328.5 60 m 328.5 36 l 0 454.5 m 24 454.5 l 633 454.5 m 657 454.5 l 328.5 861 m 334.5 861 l 334.5 857.688 331.812 855 328.5 855 c 325.188 855 322.5 857.688 322.5 861 c 322.5 864.312 325.188 867 328.5 867 c 331.812 867 334.5 864.312 334.5 861 c 328.5 48 m 334.5 48 l 334.5 44.688 331.812 42 328.5 42 c 325.188 42 322.5 44.688 322.5 48 c 322.5 51.312 325.188 54 328.5 54 c 331.812 54 334.5 51.312 334.5 48 c 12 454.5 m 18 454.5 l 18 451.188 15.312 448.5 12 448.5 c 8.688 448.5 6 451.188 6 454.5 c 6 457.812 8.688 460.5 12 460.5 c 15.312 460.5 18 457.812 18 454.5 c 645 454.5 m 651 454.5 l 651 451.188 648.312 448.5 645 448.5 c 641.688 448.5 639 451.188 639 454.5 c 639 457.812 641.688 460.5 645 460.5 c 648.312 460.5 651 457.812 651 454.5 c S endstream endobj 35 0 obj << /Type /Page /Parent 492 0 R /Resources 36 0 R /Contents 37 0 R /Thumb 345 0 R /MediaBox [ 0 0 684 873 ] /CropBox [ 0 0 684 873 ] /Rotate 0 >> endobj 36 0 obj << /ProcSet [ /PDF /Text ] /Font << /F1 515 0 R /F2 518 0 R /F3 261 0 R /F8 268 0 R /F11 271 0 R >> /ExtGState << /GS1 523 0 R /GS2 521 0 R >> /ColorSpace << /Cs9 520 0 R >> >> endobj 37 0 obj << /Length 11945 >> stream 1 g /GS1 gs 0 873 m 0 873 l f q 1 i 27 846 603 -783 re 0 873 m W n 0 873 684 -873 re W n BT /F2 1 Tf 7 0 0 7 72.2378 805.2832 Tm 0 0 0 1 k /GS2 gs -0.0002 Tc 0 Tw (pesto> )Tj /F11 1 Tf 4.259 0 TD 0.06 Tw (simple_send.pl prego.lsjs.org)Tj /F2 1 Tf -4.259 -1.1429 TD (Connected, go ahead...)Tj /F1 1 Tf 11 0 0 11 63 773.2832 Tm -0.0001 Tc 0.1249 Tw [(And her)9.7(e)29.7()79.9(s what )]TJ /F2 1 Tf 9 0 0 9 137.1819 773.2832 Tm -0.0002 Tc 0 Tw (simple_recv.pl)Tj /F1 1 Tf 11 0 0 11 216.8872 773.2832 Tm -0.0001 Tc 0.1249 Tw [(looks like, r)-7.9(unning on)]TJ -13.9897 -1.0909 TD 0.025 Tw (my desktop machine, )Tj /F2 1 Tf 9 0 0 9 157.5157 761.2832 Tm -0.0002 Tc 0 Tw (prego)Tj /F1 1 Tf 11 0 0 11 184.5092 761.2832 Tm 0 Tc (:)Tj /F2 1 Tf 7 0 0 7 72.2378 741.2832 Tm -0.0002 Tc (prego> )Tj /F11 1 Tf 4.259 0 TD (simple_recv.pl)Tj /F2 1 Tf -4.259 -1.1429 TD 0.06 Tw (waiting for a connection...)Tj T* (accepting connection from 192.168.3.2)Tj /F1 1 Tf 11 0 0 11 63 701.2832 Tm -0.0001 Tc 0.1301 Tw [(As soon as a connection is established, the two pr)5.8(ograms)]TJ 0 -1.0909 TD 0.0035 Tc 0.3714 Tw [(activ)5.8(ate their audio systems, and y)5.7(ou can conduct a)]TJ T* -0.0001 Tc 0.064 Tw [(telephone conv)5.8(ersation acr)5.8(oss the networ)5.8(k. I)23.9(t)17.8()79.9(s)0( par)-7.9(ticularly)]TJ T* 0.09 Tw [(cool acr)5.8(oss my home wir)9.7(eless networ)5.8(k like a high-tech)]TJ T* 0.025 Tw (walkie-talkie! )Tj 0 -2.1818 TD 0.3368 Tw [(H)5.9(alting the conv)5.8(ersation is v)5.8(e)0.1(r)-17.9(y)0( cr)-7.9(ude in my curr)9.7(ent)]TJ 0 -1.0909 TD 0.2729 Tw [(v)5.9(ersion. O)5.8(ne or the other of the par)-7.9(ties must kill the)]TJ T* 0.025 Tw [(application with the interr)-7.9(upt key)84.9(.)]TJ 0 -2.1818 TD -0.0312 Tw [(Conceptually)84.9(, both pr)5.8(ograms ar)9.7(e simple. )44.9(They first establish)]TJ 0 -1.0909 TD 0.04 Tw [(a networ)5.8(k connection using the IO::S)11.9(ocket inter)-7.9(face. )44.8(They)]TJ T* 0.1139 Tw [(then open up the DSP)179.9(. A)17.8(udio data r)9.7(ead fr)5.8(om the DSP is)]TJ T* 0.1408 Tw [(sent to the r)9.7(emote host via the socket, and data r)9.7(eceiv)5.8(ed)]TJ T* 0.3665 Tw [(fr)5.8(om the socket is written to the DSP)179.9(. )44.8(The primar)-17.9(y)]TJ T* 0.0199 Tc 0.8705 Tw [(differ)9.7(ence betw)5.8(een the two pr)5.8(ograms is that)]TJ /F2 1 Tf 9 0 0 9 63 509.2832 Tm -0.0002 Tc 0 Tw (simple_send.pl)Tj /F1 1 Tf 11 0 0 11 141.4974 509.2832 Tm -0.0001 Tc 0.0151 Tw [(activ)5.8(ely establishes the connection, while)]TJ /F2 1 Tf 9 0 0 9 63 497.2832 Tm -0.0002 Tc 0 Tw (simple_recv.pl)Tj /F1 1 Tf 11 0 0 11 140.9995 497.2832 Tm -0.0001 Tc -0.0302 Tw [(passiv)5.8(ely waits for incoming connections.)]TJ -7.0909 -1.0909 TD 0.0013 Tw [(The conv)5.8(ersation itself is two way: both pr)5.8(ograms send and)]TJ T* 0.025 Tw [(r)9.9(eceiv)5.8(e audio data.)]TJ /F2 1 Tf 9 0 0 9 63 449.2832 Tm -0.0002 Tc 0 Tw (simple_send.pl)Tj /F1 1 Tf 11 0 0 11 143.0855 449.2832 Tm -0.0001 Tc 0.1595 Tw [(is the simpler of the two, so let)17.7()79.9(s)0( walk)]TJ -7.2805 -1.0909 TD 0.1287 Tw [(thr)5.8(ough it first. I)23.8(t)17.8()79.9(s)0( sho)11.9(wn in Listing 1, which w)5.8(e'll walk)]TJ T* 0.025 Tw [(thr)5.8(ough line b)5.8(y)0( line.)]TJ 25.3636 34.254 TD (Lines 1-3: Load modules)Tj 1.6364 -1.0909 TD 0.0809 Tw [(W)77.8(e)0( turn on strict type checking and load the IO::F)33.8(ile)]TJ T* 0.0742 Tw [(and IO::S)11.9(ocket modules, pr)5.8(o)15.9(viding an object-oriented)]TJ T* 0.025 Tw [(inter)-7.9(face to filehandles.)]TJ -1.6364 -2.3636 TD [(Lines 4-5: D)5.8(efine constants)]TJ 1.6364 -1.0909 TD 0.2692 Tw [(W)77.8(e)0( pick an arbitrar)-17.9(y buffer siz)5.8(e for buffering data)]TJ T* 0.0004 Tw [(passing betw)5.8(een the networ)5.8(k and the sound device. )14.8(W)77.8(e)]TJ T* 0.025 Tw (also define a constant for the path to the DSP device.)Tj -1.6364 -2.3636 TD 0 Tc (Line 6: )Tj /F2 1 Tf 9 0 0 9 375.3379 678.0776 Tm -0.0002 Tc 0 Tw (sigCHLD)Tj /F1 1 Tf 11 0 0 11 416.1537 678.0776 Tm (handler)Tj -5.1049 -1.0909 TD -0.0001 Tc 0.0186 Tw [(Later y)5.8(ou will see that when w)5.8(e)0( establish a connection,)]TJ T* 0.121 Tw [(w)5.8(e)0( for)5.8(k so that one pr)5.8(ocess can r)9.7(ead fr)5.8(om the sound)]TJ T* 0.0111 Tw [(car)13.8(d while the other one writes to it. )44.8(The )]TJ /F2 1 Tf 9 0 0 9 537.3361 642.0776 Tm -0.0002 Tc 0 Tw (CHLD)Tj /F1 1 Tf 11 0 0 11 561.803 642.0776 Tm (handler)Tj -18.3457 -1.0909 TD -0.0001 Tc 0.0326 Tw [(helps ensur)9.7(e that when one pr)5.8(ocess dies, the other dies)]TJ T* 0.025 Tw (with it.)Tj -1.6364 -2.3636 TD [(Lines 7-10: S)11.9(et up socket)]TJ 1.6364 -1.0909 TD 0.0687 Tw [(W)77.8(e)0( get the name and por)-7.9(t of the destination machine)]TJ T* 0.1336 Tw [(fr)5.8(om the command line, and call IO::S)11.9(ocket::INET)-35.9()79.9(s)]TJ /F2 1 Tf 9 0 0 9 360 556.0776 Tm -0.0002 Tc 0 Tw (new\(\))Tj /F1 1 Tf 11 0 0 11 390.4485 556.0776 Tm -0.0001 Tc 0.0641 Tw [(method to establish a connection. I)5.8(f)0( successful,)]TJ -2.768 -1.0909 TD -0.0224 Tw [(this r)9.7(eturns a socket object for communication with the)]TJ T* 0.025 Tw [(r)9.9(emote host.)]TJ -1.6364 -2.3636 TD 0 Tc [(Line 11: O)5.9(pen DSP)]TJ 1.6364 -1.0909 TD -0.0001 Tc 0.1998 Tw [(W)77.8(e)-0.1( use IO::F)33.9(ile to open the digital signal pr)5.8(ocessor)]TJ T* 0.0888 Tw [(driv)5.8(er in r)9.7(ead/write mode, using a file access mode of)]TJ /F2 1 Tf 9 0 0 9 360 470.0776 Tm -0.0003 Tc 0 Tw (r+)Tj /F1 1 Tf 11 0 0 11 373.8224 470.0776 Tm -0.0001 Tc 0.025 Tw (for this purpose.)Tj -2.8929 -2.3636 TD [(Lines 12-13: F)35.8(o)0.2(r)5.8(k)]TJ 1.6364 -1.0909 TD 0.0146 Tc 0.3603 Tw [(W)77.8(e)0( call )]TJ /F2 1 Tf 9 0 0 9 403.0522 432.0776 Tm 0.0145 Tc 0 Tw (fork)Tj /F1 1 Tf 11 0 0 11 432.0523 432.0776 Tm 0.0146 Tc 0.3603 Tw [(to separate our wor)5.8(k among two)]TJ -6.5502 -1.0909 TD -0.0001 Tc 0.0319 Tw [(pr)5.8(ocesses. )44.8(The par)9.7(ent pr)5.8(ocess will r)9.7(ead fr)5.8(om the socket)]TJ 5.8213 -1.0909 TD 0.1107 Tw [(and write to the sound car)13.8(d, while the)]TJ T* 0.0407 Tw [(child per)-7.9(forms the opposite task. I)11.9(n)0( the)]TJ T* 0.2595 Tw [(par)9.7(ent pr)5.8(ocess, the v)5.8(alue r)9.7(eturned b)5.8(y)]TJ /F2 1 Tf 9 0 0 9 424.0343 372.0776 Tm -0.0002 Tc 0 Tw (fork)Tj /F1 1 Tf 11 0 0 11 449.0213 372.0776 Tm -0.0001 Tc 0.0584 Tw [(will be the pr)5.8(ocess number of the)]TJ -2.2715 -1.0909 TD 0.2609 Tw [(child. I)11.9(n)0( the child pr)5.8(ocess, the v)5.8(alue)]TJ T* 0.025 Tw [(r)9.9(eturned b)5.8(y)-0.1( )]TJ /F2 1 Tf 9 0 0 9 476.6195 348.0775 Tm -0.0002 Tc 0 Tw (fork)Tj /F1 1 Tf 11 0 0 11 501.2393 348.0775 Tm -0.0059 Tc 0.0308 Tw [(i)-5.8(s)-5.8( ze)-5.7(ro)10.1(.)]TJ -7.0186 -2.3636 TD -0.0001 Tc 0.025 Tw [(Lines 14-17: P)41.9(a)0.3(r)9.7(ent pr)5.8(ocess)]TJ 2.3605 -1.0909 TD -0.0079 Tw [(The par)9.7(ent pr)5.8(ocess is a tight loop)15.8(, )]TJ T* 0.2599 Tw [(which r)9.7(eads )]TJ /F2 1 Tf 9 0 0 9 508.5187 298.0776 Tm -0.0002 Tc 0 Tw (BUFSIZE)Tj /F1 1 Tf 11 0 0 11 557.5276 298.0776 Tm -0.0001 Tc 0.26 Tw [(b)5.8(ytes of )]TJ -9.7752 -1.0909 TD 0.0199 Tc 0.7495 Tw [(data fr)5.8(om the socket and )]TJ T* -0.0001 Tc 0.1036 Tw (immediately sends it to the DSP )Tj T* 0 Tw (using )Tj /F2 1 Tf 9 0 0 9 475.76 262.0776 Tm -0.0002 Tc (print)Tj /F1 1 Tf 11 0 0 11 502.7534 262.0776 Tm -0.0001 Tc 0.0293 Tw [(. I)5.8(f)0( the r)9.7(ead fr)5.8(om the )]TJ -4.7958 -1.0909 TD 0.1852 Tw [(socket r)9.7(eturns 0, indicating that )]TJ T* 0.1059 Tw [(the r)9.7(emote end has hung up)15.8(, w)5.8(e)-0.1( )]TJ T* 0.0069 Tw [(kill the child b)5.8(y)0( sending it a )]TJ /F2 1 Tf 9 0 0 9 571.6122 226.0776 Tm -0.0002 Tc 0 Tw (TERM)Tj /F1 1 Tf 11 0 0 11 449.9999 214.0776 Tm -0.0001 Tc 0.025 Tw (signal, and exit.)Tj -2.3605 -2.3636 TD [(Lines 18-20: Child pr)5.8(ocess)]TJ 2.3605 -1.0909 TD -0.0155 Tw [(The child has the opposite task. I)23.9(t)0( )]TJ T* 0.2573 Tw [(r)9.9(eads fr)5.8(om the sound car)13.9(d and )]TJ T* -0.023 Tw (writes to the socket until either an )Tj T* 0.0454 Tw [(err)5.8(or occurs while r)9.7(eading, or the )]TJ T* 0.025 Tw [(par)9.7(ent kills it.)]TJ 12 0 0 12 517.3723 90.3543 Tm 0 Tc 0 Tw (F)Tj 10.44 0 0 10.44 523.4518 90.3543 Tm -0.0001 Tc (ALL)Tj 12 0 0 12 544.7999 90.3543 Tm 0 Tc 0.025 Tw [(2000 13)]TJ /F3 1 Tf -40.15 0 TD -0.0002 Tc 0.0255 Tw [(The P)47.6(erl J)35.7(our)-8(nal #19)]TJ ET 0 0.03 0.3 0 k 63 403.56 349.03 -286.56 re 162.892 90.354 m f* BT /F8 1 Tf 14 0 0 14 70 384.417 Tm 0 0 0 1 k (Listing 1.)Tj /F2 1 Tf 9 0 0 9 129.3068 384.417 Tm 0 Tw (simple_send.pl)Tj /F1 1 Tf 11 0 0 11 204.8883 384.417 Tm 0 Tc (: )Tj /F8 1 Tf 14 0 0 14 70 367.417 Tm -0.0001 Tc 0.0255 Tw [(M)12(ake a new outgoing connection.)]TJ /F2 1 Tf 7 0 0 7 74.4789 346.917 Tm -0.0202 Tc 0.06 Tw [(0 #!/usr/bin/perl)]TJ 0 -2.4286 TD [(1 use strict;)]TJ 0 -1.2143 TD [(2 use IO::File;)]TJ T* [(3 use IO::Socket;)]TJ 0 -2.4286 TD [(4 use constant BUFSIZE => 4000;)]TJ 0 -1.2143 TD [(5 use constant DSP)-3024.5(=> '/dev/dsp';)]TJ T* [(6 $SIG{CHLD} = sub { exit 0 };)]TJ 0 -2.4286 TD [(7 my $dest = shift || 'prego';)]TJ 0 -1.2143 TD [(8 my $port = shift || 2007;)]TJ T* [(9 my $sock = IO::Socket::INET->new\("$dest:$port"\) || die "Can't connect: $!";)]TJ T* [(10 warn "Connected, go ahead...\\n";)]TJ 0 -2.4286 TD [(11 my $dsp = IO::File->new\(DSP, "r+"\) || die "Can't open DSP: $!";)]TJ T* [(12 my $child = fork\(\);)]TJ 0 -1.2143 TD [(13 die "Can't fork: $!" unless defined $child;)]TJ 0 -2.4286 TD [(14 my $data;)]TJ 0 -1.2143 TD [(15 if \($child\) { # parent process)]TJ T* [(16)-4304(print $dsp $data while sysread\($sock, $data, BUFSIZE\);)]TJ T* [(17)-4304.1(kill TERM => $child;)]TJ T* [(18 } else {)]TJ T* [(19)-4304(print $sock $data while sysread\($dsp, $data, BUFSIZE\);)]TJ T* [(20 })]TJ ET Q 0 0 0 0 k /GS2 gs 1 i 37 874 191 -12 re 100.091 125.917 m f* BT /F2 1 Tf 8 0 0 8 39 864 Tm /Cs9 cs 1 scn -0.0004 Tc -0.0019 Tw (TPJ#19/9.26 9/27/00 10:35 AM Page 13)Tj ET 1 G 0 J 0 j 0.5 w 10 M []0 d 36 873 m 36 849 l 0 837 m 24 837 l 621 873 m 621 849 l 657 837 m 633 837 l 36 36 m 36 60 l 0 72 m 24 72 l 621 36 m 621 60 l 657 72 m 633 72 l S /Cs9 CS 1 SCN 0.25 w 36 873 m 36 849 l 0 837 m 24 837 l 621 873 m 621 849 l 657 837 m 633 837 l 36 36 m 36 60 l 0 72 m 24 72 l 621 36 m 621 60 l 657 72 m 633 72 l S 1 G 0.5 w 304.5 861 m 352.5 861 l 304.5 48 m 352.5 48 l 12 478.5 m 12 430.5 l 645 478.5 m 645 430.5 l 328.5 873 m 328.5 849 l 328.5 60 m 328.5 36 l 0 454.5 m 24 454.5 l 633 454.5 m 657 454.5 l 328.5 861 m 334.5 861 l 334.5 857.688 331.812 855 328.5 855 c 325.188 855 322.5 857.688 322.5 861 c 322.5 864.312 325.188 867 328.5 867 c 331.812 867 334.5 864.312 334.5 861 c 328.5 48 m 334.5 48 l 334.5 44.688 331.812 42 328.5 42 c 325.188 42 322.5 44.688 322.5 48 c 322.5 51.312 325.188 54 328.5 54 c 331.812 54 334.5 51.312 334.5 48 c 12 454.5 m 18 454.5 l 18 451.188 15.312 448.5 12 448.5 c 8.688 448.5 6 451.188 6 454.5 c 6 457.812 8.688 460.5 12 460.5 c 15.312 460.5 18 457.812 18 454.5 c 645 454.5 m 651 454.5 l 651 451.188 648.312 448.5 645 448.5 c 641.688 448.5 639 451.188 639 454.5 c 639 457.812 641.688 460.5 645 460.5 c 648.312 460.5 651 457.812 651 454.5 c S /Cs9 CS 1 SCN 0.25 w 304.5 861 m 352.5 861 l 304.5 48 m 352.5 48 l 12 478.5 m 12 430.5 l 645 478.5 m 645 430.5 l 328.5 873 m 328.5 849 l 328.5 60 m 328.5 36 l 0 454.5 m 24 454.5 l 633 454.5 m 657 454.5 l 328.5 861 m 334.5 861 l 334.5 857.688 331.812 855 328.5 855 c 325.188 855 322.5 857.688 322.5 861 c 322.5 864.312 325.188 867 328.5 867 c 331.812 867 334.5 864.312 334.5 861 c 328.5 48 m 334.5 48 l 334.5 44.688 331.812 42 328.5 42 c 325.188 42 322.5 44.688 322.5 48 c 322.5 51.312 325.188 54 328.5 54 c 331.812 54 334.5 51.312 334.5 48 c 12 454.5 m 18 454.5 l 18 451.188 15.312 448.5 12 448.5 c 8.688 448.5 6 451.188 6 454.5 c 6 457.812 8.688 460.5 12 460.5 c 15.312 460.5 18 457.812 18 454.5 c 645 454.5 m 651 454.5 l 651 451.188 648.312 448.5 645 448.5 c 641.688 448.5 639 451.188 639 454.5 c 639 457.812 641.688 460.5 645 460.5 c 648.312 460.5 651 457.812 651 454.5 c S endstream endobj 38 0 obj << /Type /Page /Parent 492 0 R /Resources 39 0 R /Contents 40 0 R /Thumb 347 0 R /MediaBox [ 0 0 684 873 ] /CropBox [ 0 0 684 873 ] /Rotate 0 >> endobj 39 0 obj << /ProcSet [ /PDF /Text ] /Font << /F1 515 0 R /F2 518 0 R /F3 261 0 R /F8 268 0 R >> /ExtGState << /GS1 523 0 R /GS2 521 0 R >> /ColorSpace << /Cs9 520 0 R >> >> endobj 40 0 obj << /Length 13622 >> stream 1 g /GS1 gs 0 873 m 0 873 l f q 1 i 27 846 603 -783 re 0 873 m W n 0 873 684 -873 re W n BT /F1 1 Tf 11 0 0 11 63 382.5776 Tm 0 0 0 1 k /GS2 gs -0.0001 Tc 0.1364 Tw [(The r)9.7(eceiv)5.8(er application, )]TJ /F2 1 Tf 9 0 0 9 175.2449 382.5776 Tm -0.0002 Tc 0 Tw (simple_recv.pl)Tj /F1 1 Tf 11 0 0 11 250.8264 382.5776 Tm -0.0001 Tc 0.1365 Tw (, has a slightly)Tj -17.0751 -1.0909 TD 0.0178 Tc 0.3571 Tw [(har)13.9(der job because it has to wait for an incoming)]TJ T* -0.0001 Tc 0.1563 Tw [(connection, dispatch it, and then wait for another)59.7(. O)5.8(nly)]TJ T* 0.1512 Tw [(one connection will be handled at a time because ther)9.7(e)29.7()79.9(s)]TJ T* 0.025 Tw [(only one micr)5.8(ophone and speaker system.)]TJ 0 -2.1818 TD (Lines 1-3: Load modules)Tj 1.6364 -1.0909 TD 0.0199 Tc 0.3944 Tw [(W)77.8(e)0( turn on strict type checking and load the)]TJ T* -0.0001 Tc 0.025 Tw [(IO::S)11.9(ocket and IO::F)33.9(ile modules as befor)9.7(e.)]TJ -1.6364 -2.1818 TD -0.0051 Tc [(Lines 4-6: D)5.8(efine constants and CHLD handler)]TJ 1.6364 -1.0909 TD -0.0187 Tw [(W)77.8(e)0( define the )]TJ /F2 1 Tf 9 0 0 9 141.4113 250.5775 Tm 0 Tw (DSP)Tj /F1 1 Tf 11 0 0 11 159.9611 250.5775 Tm (and )Tj /F2 1 Tf 9 0 0 9 178.0974 250.5775 Tm (BUFSIZE)Tj /F1 1 Tf 11 0 0 11 218.062 250.5775 Tm -0.0187 Tw [(constants as befor)9.6(e. )14.9(W)77.8(e)]TJ -12.4602 -1.0909 TD 0.1029 Tw [(will also be for)5.7(king when incoming connections come)]TJ T* -0.0261 Tw [(in, but in this case w)5.8(e)0( don)69.8()79.9(t)0( want to terminate the par)9.6(ent)]TJ T* -0.043 Tw [(pr)5.8(ocess. W)77.8(e)0( )-14.8(simply )]TJ /F2 1 Tf 9 0 0 9 162.4264 214.5775 Tm 0 Tw (wait)Tj /F1 1 Tf 11 0 0 11 186.2258 214.5775 Tm -0.0282 Tw [(on the child pr)5.8(ocess in or)13.8(der to)]TJ -9.566 -1.0909 TD 0.1608 Tw [(r)9.9(eap its status code \(which w)5.7(e)0( ignor)9.7(e\). O)5.8(ther)-17.9(wise w)5.8(e)]TJ T* 0.3224 Tw [(will accumulate z)5.8(ombie pr)5.8(ocesses; see the )]TJ /F2 1 Tf 9 0 0 9 277.4791 190.5775 Tm 0 Tw (perlipc)Tj /F1 1 Tf 11 0 0 11 81 178.5775 Tm 0.025 Tw [(documentation bundled with P)53.8(erl for mor)9.7(e details.)]TJ -1.6364 -2.1818 TD -0.0001 Tc [(Lines 7-10: O)5.8(pen listening socket)]TJ 1.6364 -1.0909 TD 0.1325 Tw [(W)77.8(e)0( get the por)-7.9(t number fr)5.8(om the command line, or)]TJ T* 0.0223 Tw [(assume a default. )14.8(W)77.8(e)0( call )]TJ /F2 1 Tf 9 0 0 9 190.8302 130.5775 Tm -0.0002 Tc 0 Tw (IO::Socket::INET->new\(\))Tj /F1 1 Tf 11 0 0 11 421.5 802.0776 Tm -0.0001 Tc 0.2478 Tw [(to cr)9.7(eate a listening socket, passing it)]TJ T* 0.1023 Tw [(v)5.9(alues for the local por)-7.9(t, the siz)5.8(e of the)]TJ T* 0.0788 Tw (listen queue, and the )Tj /F2 1 Tf 9 0 0 9 515.9639 778.0776 Tm -0.0002 Tc 0 Tw (Reuse)Tj /F1 1 Tf 11 0 0 11 546.5739 778.0776 Tm -0.0001 Tc 0.0788 Tw (flag, which)Tj -11.3704 -1.0909 TD 0.1096 Tw [(pr)9.7(ev)5.8(ents pr)5.8(oblems r)9.7(eopening the socket)]TJ T* 0.0199 Tc 0.8363 Tw [(when the ser)-17.9(v)5.9(er is killed and)]TJ T* -0.0001 Tc 0.025 Tw [(immediately r)9.7(elaunched.)]TJ 0 -2.1818 TD [(Lines 11-20: M)11.9(ain accept loop)]TJ 1.9178 -1.0909 TD 0.3209 Tw [(W)77.8(e)0( enter an infinite loop)15.8(. Each )]TJ T* 0.1691 Tw [(time thr)5.8(ough the loop w)5.8(e)0( print a )]TJ T* 0.0199 Tc 0.5628 Tw [(message and call the socket)17.8()79.9(s)-0.1( )]TJ /F2 1 Tf 9 0 0 9 442.5962 670.0776 Tm -0.0002 Tc 0 Tw (accept)Tj /F1 1 Tf 11 0 0 11 477.3712 670.0776 Tm -0.0001 Tc -0.0334 Tw (method, which blocks until )Tj -3.1614 -1.0909 TD 0.0199 Tc 0.9885 Tw (an incoming connection is )Tj T* 0.6139 Tw [(r)9.9(eceiv)5.8(ed. )14.8(When this happens, )]TJ /F2 1 Tf 9 0 0 9 442.5962 634.0776 Tm -0.0002 Tc 0 Tw (accept)Tj /F1 1 Tf 11 0 0 11 477.8485 634.0776 Tm -0.0001 Tc 0.0101 Tw [(r)9.9(eturns a connected socket. )]TJ -3.2048 -1.0909 TD 0.0186 Tc 0.3563 Tw [(W)77.8(e)0( print out an informational )]TJ T* -0.0001 Tc 0.2173 Tw (message containing the dotted IP )Tj T* 0.3303 Tw [(addr)9.7(ess of the r)9.7(emote host, and )]TJ T* -0.0294 Tw (open a filehandle on the DSP in the )Tj T* 0.0324 Tw [(same manner as befor)9.7(e. I)5.8(f)0( the open )]TJ T* 0.0641 Tw [(is unsuccessful, w)5.8(e)0( print a warning )]TJ T* 0.2614 Tw [(message and hang up)15.8(. O)5.8(ther)-17.9(wise )]TJ T* 0.1761 Tw [(w)5.9(e)0( call )]TJ /F2 1 Tf 9 0 0 9 477.7924 538.0776 Tm -0.0002 Tc 0 Tw (handle_connect\(\))Tj /F1 1 Tf 11 0 0 11 568.8585 538.0776 Tm -0.0001 Tc 0.1761 Tw (to do )Tj -11.4784 -1.0909 TD 0.025 Tw [(the data transfer)59.7(.)]TJ -1.9178 -2.1818 TD 0 Tc (Lines 22-26: )Tj /F2 1 Tf 9 0 0 9 478.4089 502.0776 Tm -0.0002 Tc 0 Tw (handle_connection\(\))Tj /F1 1 Tf 11 0 0 11 442.5962 490.0776 Tm -0.0026 Tc (The )Tj /F2 1 Tf 9 0 0 9 462.1552 490.0776 Tm -0.1002 Tc (handle_connection\(\))Tj /F1 1 Tf 11 0 0 11 547.6303 490.0776 Tm -0.0001 Tc [(subr)5.8(outine )]TJ -9.5486 -1.0909 TD 0.0199 Tc 0.7461 Tw [(wor)5.8(ks a lot like the m)]TJ 12.5063 0 TD -0.0001 Tc 0 Tw (ain )Tj -12.5063 -1.0909 TD -0.0201 Tc 0.2097 Tw (section of )Tj /F2 1 Tf 9 0 0 9 488.4493 466.0776 Tm 0 Tw (simple_send.pl.)Tj /F1 1 Tf 11 0 0 11 571.7867 466.0776 Tm -0.0001 Tc (After )Tj -11.7446 -1.0909 TD 0.0405 Tw [(for)5.8(king, our par)9.7(ent pr)5.8(ocess handles )]TJ T* 0.0001 Tw [(copying data fr)5.8(om the socket to the )]TJ T* 0.0199 Tc 0.5711 Tw [(DSP)179.9(, while the child pr)5.9(ocess )]TJ T* -0.0001 Tc 0.025 Tw [(handles the r)9.7(e)0(v)5.8(erse operation.)]TJ -9.1451 -2.1818 TD [(Lines 27-33: P)41.9(a)0.3(r)9.7(ent pr)5.8(ocess)]TJ 1.6364 -1.0909 TD 0.2349 Tw [(The par)-7.9(t of the subr)5.8(outine that handles the par)9.7(ent)]TJ T* -0.0165 Tw [(pr)5.8(ocess is v)5.8(e)0.1(r)-17.9(y)0( slightly differ)9.7(ent fr)5.8(om the corr)9.7(esponding)]TJ T* 0.2653 Tw (section of )Tj /F2 1 Tf 9 0 0 9 409.4944 358.0776 Tm -0.0002 Tc 0 Tw (simple_send.pl)Tj /F1 1 Tf 11 0 0 11 485.0759 358.0776 Tm -0.0001 Tc 0.2652 Tw [(. I)11.9(nstead of terminating)]TJ -11.3705 -1.0909 TD 0.314 Tw [(when the user hits the interr)-7.9(upt key)84.9(, w)5.8(e)0( want to)]TJ T* 0.0396 Tw [(inter)5.8(cept this fact, gracefully close the connection, and)]TJ T* 0.025 Tw [(go back to listening for a ne)-5.9(w connection.)]TJ 0 -2.1818 TD 0.0426 Tw [(I)12(n)0.1( or)13.8(der to achiev)5.8(e this, w)5.8(e)-0.1( use an )]TJ /F2 1 Tf 9 0 0 9 510.4796 298.0776 Tm -0.0002 Tc 0 Tw (eval{})Tj /F1 1 Tf 11 0 0 11 546.091 298.0776 Tm -0.0001 Tc 0.0427 Tw (block as an)Tj -16.9174 -1.0909 TD 0.0803 Tw [(ex)11.9(ception handler)59.7(. )44.8(The )]TJ /F2 1 Tf 9 0 0 9 462.5996 286.0776 Tm -0.0002 Tc 0 Tw (eval{})Tj /F1 1 Tf 11 0 0 11 498.6256 286.0776 Tm -0.0001 Tc 0.0804 Tw [(cr)9.7(eates a local )]TJ /F2 1 Tf 9 0 0 9 561.6081 286.0776 Tm -0.0002 Tc 0 Tw (sigINT)Tj /F1 1 Tf 11 0 0 11 360 274.0776 Tm -0.0001 Tc 0.3681 Tw [(interr)-7.9(upt handler which simply calls )]TJ /F2 1 Tf 9 0 0 9 536.27 274.0776 Tm -0.0002 Tc 0 Tw (die)Tj /F1 1 Tf 11 0 0 11 552.4661 274.0776 Tm -0.0001 Tc 0.3233 Tw [(. This )-44.9(is)]TJ -17.4969 -1.0909 TD 0.2982 Tw [(follo)11.9(w)5.9(ed b)5.8(y)0( the tight r)9.7(ead/write loop that w)5.8(e)0( saw)]TJ T* 0.334 Tw [(befor)9.7(e. )14.8(When the user hits the interr)-7.9(upt key)84.9(, the)]TJ /F2 1 Tf 9 0 0 9 360 238.0776 Tm -0.0002 Tc 0 Tw (eval{})Tj /F1 1 Tf 11 0 0 11 398.9626 238.0776 Tm -0.0001 Tc 0.3473 Tw (block terminates with )Tj /F2 1 Tf 9 0 0 9 505.4199 238.0776 Tm -0.0002 Tc 0 Tw (die)Tj /F1 1 Tf 11 0 0 11 521.6158 238.0776 Tm -0.0001 Tc 0.3473 Tw [(, and ex)11.9(ecution)]TJ -14.6923 -1.0909 TD 0.1263 Tw [(r)9.9(esumes with the next statement follo)11.9(wing the block.)]TJ T* 0.1274 Tw [(W)77.8(e)0( close the socket, send a )]TJ /F2 1 Tf 9 0 0 9 485.5251 214.0776 Tm -0.0002 Tc 0 Tw (TERM)Tj /F1 1 Tf 11 0 0 11 511.2704 214.0776 Tm -0.0001 Tc 0.1273 Tw (signal to the child,)Tj -13.7519 -1.0909 TD -0.003 Tw [(and r)9.7(eturn fr)5.8(om )]TJ /F2 1 Tf 9 0 0 9 431.0648 202.0776 Tm -0.0002 Tc 0 Tw (handle_connection\(\))Tj /F1 1 Tf 11 0 0 11 536.3566 202.0776 Tm -0.0006 Tc -0.0025 Tw [(to r)9.2(esume the)]TJ -16.0324 -1.0909 TD -0.0001 Tc 0 Tw (main )Tj /F2 1 Tf 9 0 0 9 384.7216 190.0776 Tm -0.0002 Tc (accept)Tj /F1 1 Tf 11 0 0 11 420.1387 190.0776 Tm [(loop)15.7(.)]TJ -7.1035 -2.1818 TD -0.0001 Tc 0.025 Tw [(Lines 34-38: Child pr)5.8(ocess)]TJ 1.6364 -1.0909 TD 0.0152 Tc 0.534 Tw [(The)-804.1(child pr)6.1(ocess is identical to the one in)]TJ /F2 1 Tf 9 0 0 9 360 142.0775 Tm -0.0052 Tc 0 Tw (simple_send.pl)Tj /F1 1 Tf 11 0 0 11 434.9518 142.0775 Tm 0.0476 Tw [(, ex)11.9(cept that w)5.8(e)0( close our copy of the)]TJ -6.8138 -1.0909 TD 0.025 Tw [(listening socket since w)5.8(e)0( won)69.8()79.9(t)0( be needing it.)]TJ 12 0 0 12 63 90.3543 Tm 0 Tc 0 Tw [(14)-1100(F)]TJ 10.44 0 0 10.44 94.2795 90.3543 Tm -0.0001 Tc (ALL)Tj 12 0 0 12 115.6277 90.3543 Tm 0 Tc (2000)Tj /F3 1 Tf 30.9897 0.0003 TD -0.0002 Tc 0.0255 Tw [(The P)47.6(erl J)35.7(our)-8(nal #19)]TJ ET 0 0.03 0.3 0 k 63 810 346.5 -400.5 re 587.395 90.357 m f* BT /F8 1 Tf 14 0 0 14 70 795.1747 Tm 0 0 0 1 k (Listing 2.)Tj /F2 1 Tf 9 0 0 9 129.3068 795.1747 Tm 0 Tw (simple_recv.pl)Tj /F1 1 Tf 11 0 0 11 204.8883 795.1747 Tm 0 Tc (: )Tj /F8 1 Tf 14 0 0 14 210.6634 795.1747 Tm -0.0001 Tc 0.0255 Tw [(A)11.9(ccept incoming connections.)]TJ /F2 1 Tf 7 0 0 7 74.6189 775.1747 Tm -0.0002 Tc 0.06 Tw [(0 #!/usr/bin/perl)]TJ 0 -2.2857 TD [(1 use strict;)]TJ 0 -1.1429 TD [(2 use IO::Socket;)]TJ T* [(3 use IO::File;)]TJ 0 -2.2857 TD [(4 use constant DSP)-3099.5(=> '/dev/dsp';)]TJ 0 -1.1429 TD [(5 use constant BUFSIZE => 4000;)]TJ T* [(6 $SIG{CHLD} = sub { wait };)]TJ 0 -2.2857 TD [(7 my $port = shift || 2007;)]TJ 0 -1.1429 TD [(8 my $listen = IO::Socket::INET->new\(LocalPort)-760.1(=> $port,)]TJ T* [(9 Listen)-655.2(=> 5,)]TJ T* 0.0598 Tc 0 Tw [(1)60(0)60( R)59.9(e)59.9(u)60(s)59.9(e)-595.2(=)60(>)60( 1)60(\))60( )]TJ 13.1968 -1.1429 TD -0.0002 Tc 0.06 Tw [(|| die "Can't listen: $!";)]TJ -13.1968 -3.4286 TD [(11 while \(1\) {)]TJ 0 -1.1429 TD [(12 warn "waiting for a connection...\\n";)]TJ T* [(13 my $sock = $listen->accept;)]TJ T* -0.0001 Tc [(14 warn "accepting connection from ", $sock->peerhost, "\\n";)]TJ T* [(15 unless \(my $dsp = IO::File->new\(DSP, "r+"\)\) {)]TJ T* -0.0002 Tc [(17 )-2459.6(close $sock;)]TJ T* [(18 } else {)]TJ T* [(19 )-2459.6(handle_connection\($sock, $dsp\);)]TJ T* 0.0598 Tc 0 Tw [(2)60(0)60( })]TJ T* -0.0002 Tc 0.06 Tw [(21 })]TJ 0 -2.2857 TD [(22 sub handle_connection {)]TJ 0 -1.1429 TD [(23 my \($sock, $dsp\) = @_;)]TJ T* [(24 my $child = fork\(\);)]TJ T* -0.0001 Tc [(25 die "Can't fork: $!" unless defined $child;)]TJ T* -0.0002 Tc [(26 my $data;)]TJ T* [(27 if \($child\) { # parent process)]TJ T* [(28 eval {)]TJ T* [(29 local $SIG{INT} = sub {die};)]TJ T* -0.0001 Tc [(30 print $dsp $data while sysread\($sock, $data, BUFSIZE\);)]TJ T* 0.0598 Tc 0 Tw [(3)60(1)60( })60(;)]TJ T* -0.0002 Tc 0.06 Tw [(32 close $sock;)]TJ T* [(33 kill TERM => $child;)]TJ T* [(34 } else {)]TJ T* [(35 close $listen;)]TJ T* -0.0001 Tc [(36 print $sock $data while sysread\($dsp, $data, BUFSIZE\);)]TJ T* -0.0002 Tc [(37 exit;)]TJ T* 0.0598 Tc 0 Tw [(3)60(8)60( })]TJ T* -0.0002 Tc 0.06 Tw [(39 })]TJ ET Q 0 0 0 0 k /GS2 gs 1 i 37 874 191 -12 re 101.071 415.175 m f* BT /F2 1 Tf 8 0 0 8 39 864 Tm /Cs9 cs 1 scn -0.0004 Tc -0.0019 Tw (TPJ#19/9.26 9/27/00 10:35 AM Page 14)Tj ET 1 G 0 J 0 j 0.5 w 10 M []0 d 36 873 m 36 849 l 0 837 m 24 837 l 621 873 m 621 849 l 657 837 m 633 837 l 36 36 m 36 60 l 0 72 m 24 72 l 621 36 m 621 60 l 657 72 m 633 72 l S /Cs9 CS 1 SCN 0.25 w 36 873 m 36 849 l 0 837 m 24 837 l 621 873 m 621 849 l 657 837 m 633 837 l 36 36 m 36 60 l 0 72 m 24 72 l 621 36 m 621 60 l 657 72 m 633 72 l S 1 G 0.5 w 304.5 861 m 352.5 861 l 304.5 48 m 352.5 48 l 12 478.5 m 12 430.5 l 645 478.5 m 645 430.5 l 328.5 873 m 328.5 849 l 328.5 60 m 328.5 36 l 0 454.5 m 24 454.5 l 633 454.5 m 657 454.5 l 328.5 861 m 334.5 861 l 334.5 857.688 331.812 855 328.5 855 c 325.188 855 322.5 857.688 322.5 861 c 322.5 864.312 325.188 867 328.5 867 c 331.812 867 334.5 864.312 334.5 861 c 328.5 48 m 334.5 48 l 334.5 44.688 331.812 42 328.5 42 c 325.188 42 322.5 44.688 322.5 48 c 322.5 51.312 325.188 54 328.5 54 c 331.812 54 334.5 51.312 334.5 48 c 12 454.5 m 18 454.5 l 18 451.188 15.312 448.5 12 448.5 c 8.688 448.5 6 451.188 6 454.5 c 6 457.812 8.688 460.5 12 460.5 c 15.312 460.5 18 457.812 18 454.5 c 645 454.5 m 651 454.5 l 651 451.188 648.312 448.5 645 448.5 c 641.688 448.5 639 451.188 639 454.5 c 639 457.812 641.688 460.5 645 460.5 c 648.312 460.5 651 457.812 651 454.5 c S /Cs9 CS 1 SCN 0.25 w 304.5 861 m 352.5 861 l 304.5 48 m 352.5 48 l 12 478.5 m 12 430.5 l 645 478.5 m 645 430.5 l 328.5 873 m 328.5 849 l 328.5 60 m 328.5 36 l 0 454.5 m 24 454.5 l 633 454.5 m 657 454.5 l 328.5 861 m 334.5 861 l 334.5 857.688 331.812 855 328.5 855 c 325.188 855 322.5 857.688 322.5 861 c 322.5 864.312 325.188 867 328.5 867 c 331.812 867 334.5 864.312 334.5 861 c 328.5 48 m 334.5 48 l 334.5 44.688 331.812 42 328.5 42 c 325.188 42 322.5 44.688 322.5 48 c 322.5 51.312 325.188 54 328.5 54 c 331.812 54 334.5 51.312 334.5 48 c 12 454.5 m 18 454.5 l 18 451.188 15.312 448.5 12 448.5 c 8.688 448.5 6 451.188 6 454.5 c 6 457.812 8.688 460.5 12 460.5 c 15.312 460.5 18 457.812 18 454.5 c 645 454.5 m 651 454.5 l 651 451.188 648.312 448.5 645 448.5 c 641.688 448.5 639 451.188 639 454.5 c 639 457.812 641.688 460.5 645 460.5 c 648.312 460.5 651 457.812 651 454.5 c S endstream endobj 41 0 obj << /Type /Page /Parent 492 0 R /Resources 42 0 R /Contents 43 0 R /Thumb 349 0 R /MediaBox [ 0 0 684 873 ] /CropBox [ 0 0 684 873 ] /Rotate 0 >> endobj 42 0 obj << /ProcSet [ /PDF /Text ] /Font << /F1 515 0 R /F2 518 0 R /F3 261 0 R /F5 262 0 R /F8 268 0 R /F9 269 0 R >> /ExtGState << /GS1 523 0 R /GS2 521 0 R >> /ColorSpace << /Cs9 520 0 R >> >> endobj 43 0 obj << /Length 8944 >> stream 1 g /GS1 gs 0 873 m 0 873 l f q 1 i 27 846 603 -783 re 0 873 m W n 0 873 684 -873 re W n BT /F8 1 Tf 12 0 0 12 63 801.3574 Tm 0 0 0 1 k /GS2 gs 0 Tc 0 Tw (A)Tj 10.44 0 0 10.44 70.7634 801.3574 Tm 0.0228 Tc [(DDING)-345.5(AN)]TJ 12 0 0 12 130.2969 801.3574 Tm 0.0198 Tc 0.0255 Tw (MP3 E)Tj 10.44 0 0 10.44 166.0418 801.3574 Tm 0.0228 Tc 0 Tw (NCODER)Tj /F1 1 Tf 11 0 0 11 63 779.3574 Tm -0.0051 Tc 0.1329 Tw [(This pair of pr)5.7(ograms wor)5.8(ks gr)9.7(eat acr)5.8(oss a L)-12.1(AN or a fast)]TJ 0 -1.0909 TD 0.1383 Tw [(I)12(nternet connection. H)17.7(o)12(w)5.8(e)0(v)5.8(e)0.1(r)59.7(,)0( the conv)5.8(ersation br)9.7(eaks up)]TJ T* 0.0519 Tw [(periodically on slo)11.9(w)5.8(er connections. )44.7(The default sample rate)]TJ T* 0 Tw (for )Tj /F2 1 Tf 9 0 0 9 78.3347 743.3574 Tm (/dev/dsp)Tj /F1 1 Tf 11 0 0 11 124.4823 743.3574 Tm 0.0566 Tw [(is 8 kHz at one b)5.8(yte per sample, monoaural,)]TJ -5.5893 -1.0909 TD -0.0211 Tw [(which means that the connection must suppor)-8(t at least 8000)]TJ /F2 1 Tf 9 0 0 9 63 719.3574 Tm 0 Tc 0 Tw (*)Tj /F1 1 Tf 11 0 0 11 72.1766 719.3574 Tm -0.0051 Tc 0.1026 Tw (8 = 64,000 bits per second for one way communication)Tj -0.8342 -1.0909 TD 0.1973 Tw (and 128,000 bits per second for duplex communication.)Tj T* 0.093 Tw [(This can only be achiev)5.7(ed with a r)9.7(eally good dual-channel)]TJ T* 0.08 Tw [(ISDN connection, or a DSL, cable, or leased line. M)11.9(aking)]TJ T* 0.0643 Tw [(matters worse, the connection must sustain this speed ev)5.7(en)]TJ T* -0.0108 Tw [(if nobody)29.7()79.9(s)0( talking, because a second of silence generates just)]TJ T* 0.0149 Tc 0.4251 Tw [(as much data as a second of conv)5.8(ersation. S)11.9(l)0.2(o)11.9(w)5.8(er)]TJ T* -0.0051 Tc 0.025 Tw [(connections cannot keep up with these r)9.6(equir)9.7(ements.)]TJ 0 -1.8182 TD 0.0199 Tc 0.5386 Tw [(Ther)9.7(e ar)9.7(e sev)5.8(eral ways to r)9.7(educe the bandwidth)]TJ 0 -1.0909 TD -0.0001 Tc 0.3329 Tw [(r)9.9(equir)9.7(ements. )14.9(W)77.8(e)0( could r)9.7(educe the sampling rate and)]TJ T* 0.0525 Tw [(sacrifice the audio quality)84.9(, but 8 kHz is alr)9.7(eady pr)9.7(etty lo)11.9(w)74.9(.)]TJ T* 0.1137 Tw [(W)77.8(e)0( could apply a general compr)9.7(ession algorithm, such as)]TJ /F5 1 Tf T* -0.0002 Tc 0 Tw (gzip)Tj /F1 1 Tf 1.5134 0 TD -0.0001 Tc 0.112 Tw [(, to the data str)9.7(eam. H)17.8(o)12(w)5.8(e)0(v)5.8(e)0.1(r)59.7(,)0( audio data is r)9.7(e)0.1(lativ)5.8(ely)]TJ -1.5134 -1.0909 TD 0.0513 Tw [(uncompr)9.7(essible with text-oriented algorithms like )]TJ /F5 1 Tf 19.6776 0 TD -0.0002 Tc 0 Tw (gzip)Tj /F1 1 Tf 1.8147 0 TD -0.0001 Tc (due)Tj -21.4923 -1.0909 TD -0.0309 Tw [(to the noisy)84.9(, rapidly-v)5.8(ar)-17.9(ying natur)9.7(e of the data. O)5.8(r)0( w)5.8(e)0( could)]TJ T* 0.0181 Tw [(r)9.9(edesign the application entir)9.7(ely)84.9(, using discontinuous UDP)]TJ T* -0.0034 Tw [(packets rather than a continuous )44.9(T)23.9(C)0.1(P str)9.7(eam and adjusting)]TJ T* 0.009 Tw (the UDP transmission rate dynamically to meet bandwidth)Tj T* -0.0271 Tw [(av)5.8(ailability)84.9(. )44.9(This is ho)11.9(w it)17.7()79.9(s)0( done in the v)5.8(o)0.1(ice-o)15.8(v)5.9(er-IP \()-12(V)100(oIP\))]TJ T* 0.2531 Tw [(pr)5.8(otocol, which is popular in commer)5.8(cial IP telephony)]TJ T* 0 Tw (applications.)Tj 25.3636 30.0655 TD 0.1835 Tw [(F)35.9(or fun, I tried a differ)9.7(ent appr)5.8(oach. )44.8(The popular MP3)]TJ 0 -1.0909 TD 0.3262 Tw [(audio compr)9.7(ession format can achiev)5.8(e 10:1 or gr)9.7(eater)]TJ T* 0.2395 Tw [(compr)9.7(ession of audio str)9.7(eams. F)23.9(u)0.1(r)-7.9(t)0(hermor)9.7(e, ther)9.7(e ar)9.7(e a)]TJ T* 0.0861 Tw [(number of U)35.9(nix command-line tools for compr)9.7(essing and)]TJ T* 0.0199 Tc 0.7778 Tw [(decompr)9.7(essing MP3s. M)29.8(y)0( fav)5.8(orites ar)9.7(e )]TJ /F5 1 Tf 19.7506 0 TD 0 Tw (mpg123)Tj /F1 1 Tf -19.7506 -1.0909 TD -0.0149 Tc [(\(http://www)74.9(.sfs.nphil.uni-tuebingen.de/~hipp/mpg123.html\))]TJ T* 0.0199 Tc 0.6283 Tw [(for decompr)9.7(essing and playing MP3s, and )]TJ /F5 1 Tf 21.0847 0 TD 0 Tw (lame)Tj /F1 1 Tf -21.0847 -1.0909 TD 0.5892 Tw [(\(http://www)74.9(.sulaco)15.8(.org/mp3\) for cr)9.7(eating them. I)11.9(n)]TJ T* -0.0001 Tc 0.0547 Tw (principle, one can simply interpose )Tj /F5 1 Tf 14.0218 0 TD -0.0002 Tc 0 Tw (lame)Tj /F1 1 Tf 2.0691 0 TD -0.0001 Tc 0.0547 Tw [(betw)5.8(een the DSP)]TJ -16.0908 -1.0909 TD 0.014 Tc 0.3609 Tw [(and the socket in or)13.9(der to compr)9.7(ess the data, and)]TJ 0 -8.7273 TD -0.0001 Tc -0.0334 Tw [(uncompr)9.7(ess it at the other end using )]TJ /F5 1 Tf 14.1159 0 TD 0 Tw (mpg123)Tj /F1 1 Tf 3.0586 0 TD -0.0334 Tw (. Although this)Tj -17.1745 -1.0909 TD 0.0438 Tw [(will not wor)5.8(k for r)9.7(easons described belo)11.9(w)74.9(,)0( conceptually w)5.8(e)]TJ T* 0.025 Tw (would want to open up two pipes:)Tj /F2 1 Tf 7 0 0 7 351.2378 555.0776 Tm 0.0599 Tw [(open COMPRESS, "lame - - /dev/dsp";)]TJ /F1 1 Tf 11 0 0 11 342 524.0776 Tm 0.1792 Tw [(The first pipe r)9.7(eads )]TJ /F2 1 Tf 9 0 0 9 434.5768 524.0776 Tm -0.0002 Tc 0 Tw (/dev/dsp)Tj /F1 1 Tf 11 0 0 11 482.4877 524.0776 Tm -0.0001 Tc 0.1792 Tw (and passes it to )Tj /F5 1 Tf 6.7864 0 TD -0.0002 Tc 0 Tw (lame)Tj /F1 1 Tf 2.2436 0 TD -0.0003 Tc (for)Tj -21.8016 -1.0909 TD -0.0001 Tc 0.1666 Tw [(MP3 encoding. )44.9(The encoded data is written to standar)13.8(d)]TJ T* 0.0955 Tw [(output, wher)9.7(e it is piped to our pr)5.8(ogram. )14.8(W)77.8(e)0( would r)9.7(ead)]TJ T* 0.025 Tw [(fr)5.8(om it like this:)]TJ /F2 1 Tf 7 0 0 7 350.8178 472.0776 Tm -0.0301 Tc 0.0599 Tw [(print $socket $data while sysread\(COMPRESS, $data, BUFSIZE\);)]TJ /F1 1 Tf 12 0 0 12 517.3723 90.3543 Tm 0 Tc 0 Tw (F)Tj 10.44 0 0 10.44 523.4518 90.3543 Tm -0.0001 Tc (ALL)Tj 12 0 0 12 544.7999 90.3543 Tm 0 Tc 0.025 Tw [(2000 15)]TJ /F3 1 Tf -40.15 0 TD -0.0002 Tc 0.0255 Tw [(The P)47.6(erl J)35.7(our)-8(nal #19)]TJ ET 0 0 0 0.1 k /GS1 gs 63.5 458.5 530 -341 re 162.892 90.354 m f* 0 0 0 1 K 0 J 0 j 1 w 10 M []0 d 63.5 458.5 530 -341 re S BT /F8 1 Tf 24 0 0 24 265.6465 337.7219 Tm 0 0 0 1 k /GS2 gs 0 Tw (AMERICAN)Tj -0.7507 -1.2 TD (CYBERNETICS)Tj 1.6419 -1.2 TD 0.0255 Tw (1/2 page)Tj /F1 1 Tf 19 0 0 19 306.5081 226.1233 Tm -0.0001 Tc 0 Tw [(NE)11.8(W)]TJ /F9 1 Tf 14 0 0 14 355.0818 662.7145 Tm -0.0452 Tc 0.0278 Tw [(This bitrate can onl)9.5(y be achie)29.6(v)19.8(ed with )]TJ 1.194 -1.1429 TD [(a r)19.6(eall)9.6(y g)9.6(ood dual-channel ISDN)]TJ -2.0516 -1.1429 TD -0.0451 Tc [(connection,)-160.9(or a DSL,)-160.9(cab)9.7(le)-19.9(,)-160.9(or leased line)-19.9(.)]TJ ET 2 w 342 682.29 m 594 682.29 l S 0.667 w 342 679.63 m 594 679.63 l 342 620.57 m 594 620.57 l S 2 w 342 617.9 m 594 617.9 l S Q 0 0 0 0 k 1 i 37 874 191 -12 re 592.924 630.714 m f* BT /F2 1 Tf 8 0 0 8 39 864 Tm /Cs9 cs 1 scn -0.0004 Tc -0.0019 Tw (TPJ#19/9.26 9/27/00 10:35 AM Page 15)Tj ET 1 G 0 J 0 j 0.5 w 10 M []0 d 36 873 m 36 849 l 0 837 m 24 837 l 621 873 m 621 849 l 657 837 m 633 837 l 36 36 m 36 60 l 0 72 m 24 72 l 621 36 m 621 60 l 657 72 m 633 72 l S /Cs9 CS 1 SCN 0.25 w 36 873 m 36 849 l 0 837 m 24 837 l 621 873 m 621 849 l 657 837 m 633 837 l 36 36 m 36 60 l 0 72 m 24 72 l 621 36 m 621 60 l 657 72 m 633 72 l S 1 G 0.5 w 304.5 861 m 352.5 861 l 304.5 48 m 352.5 48 l 12 478.5 m 12 430.5 l 645 478.5 m 645 430.5 l 328.5 873 m 328.5 849 l 328.5 60 m 328.5 36 l 0 454.5 m 24 454.5 l 633 454.5 m 657 454.5 l 328.5 861 m 334.5 861 l 334.5 857.688 331.812 855 328.5 855 c 325.188 855 322.5 857.688 322.5 861 c 322.5 864.312 325.188 867 328.5 867 c 331.812 867 334.5 864.312 334.5 861 c 328.5 48 m 334.5 48 l 334.5 44.688 331.812 42 328.5 42 c 325.188 42 322.5 44.688 322.5 48 c 322.5 51.312 325.188 54 328.5 54 c 331.812 54 334.5 51.312 334.5 48 c 12 454.5 m 18 454.5 l 18 451.188 15.312 448.5 12 448.5 c 8.688 448.5 6 451.188 6 454.5 c 6 457.812 8.688 460.5 12 460.5 c 15.312 460.5 18 457.812 18 454.5 c 645 454.5 m 651 454.5 l 651 451.188 648.312 448.5 645 448.5 c 641.688 448.5 639 451.188 639 454.5 c 639 457.812 641.688 460.5 645 460.5 c 648.312 460.5 651 457.812 651 454.5 c S /Cs9 CS 1 SCN 0.25 w 304.5 861 m 352.5 861 l 304.5 48 m 352.5 48 l 12 478.5 m 12 430.5 l 645 478.5 m 645 430.5 l 328.5 873 m 328.5 849 l 328.5 60 m 328.5 36 l 0 454.5 m 24 454.5 l 633 454.5 m 657 454.5 l 328.5 861 m 334.5 861 l 334.5 857.688 331.812 855 328.5 855 c 325.188 855 322.5 857.688 322.5 861 c 322.5 864.312 325.188 867 328.5 867 c 331.812 867 334.5 864.312 334.5 861 c 328.5 48 m 334.5 48 l 334.5 44.688 331.812 42 328.5 42 c 325.188 42 322.5 44.688 322.5 48 c 322.5 51.312 325.188 54 328.5 54 c 331.812 54 334.5 51.312 334.5 48 c 12 454.5 m 18 454.5 l 18 451.188 15.312 448.5 12 448.5 c 8.688 448.5 6 451.188 6 454.5 c 6 457.812 8.688 460.5 12 460.5 c 15.312 460.5 18 457.812 18 454.5 c 645 454.5 m 651 454.5 l 651 451.188 648.312 448.5 645 448.5 c 641.688 448.5 639 451.188 639 454.5 c 639 457.812 641.688 460.5 645 460.5 c 648.312 460.5 651 457.812 651 454.5 c S endstream endobj 44 0 obj << /Type /Page /Parent 492 0 R /Resources 45 0 R /Contents 46 0 R /Thumb 351 0 R /MediaBox [ 0 0 684 873 ] /CropBox [ 0 0 684 873 ] /Rotate 0 >> endobj 45 0 obj << /ProcSet [ /PDF /Text ] /Font << /F1 515 0 R /F2 518 0 R /F3 261 0 R /F5 262 0 R /F8 268 0 R >> /ExtGState << /GS1 523 0 R /GS2 521 0 R >> /ColorSpace << /Cs9 520 0 R >> >> endobj 46 0 obj << /Length 14385 >> stream 1 g /GS1 gs 0 873 m 0 873 l f q 1 i 27 846 603 -783 re 0 873 m W n 0 873 684 -873 re W n BT /F1 1 Tf 11 0 0 11 63 802.0776 Tm 0 0 0 1 k /GS2 gs -0.0001 Tc 0.1135 Tw (The second pipe tells )Tj /F5 1 Tf 8.8492 0 TD 0 Tw (mpg123)Tj /F1 1 Tf 3.4221 0 TD 0.1134 Tw [(to r)9.7(ead MP3-encoded data)]TJ -12.2713 -1.0909 TD -0.0259 Tw [(fr)5.8(om our pr)5.8(ogram, uncompr)9.7(ess it into PCM data, and write)]TJ T* 0.025 Tw (it to )Tj /F2 1 Tf 9 0 0 9 83.9709 778.0776 Tm -0.0002 Tc 0 Tw (/dev/dsp)Tj /F1 1 Tf 11 0 0 11 127.1604 778.0776 Tm -0.0001 Tc 0.025 Tw [(. )14.8(W)77.8(e)29.7()99.9(d)0( use it like this:)]TJ /F2 1 Tf 7 0 0 7 71.8178 758.0776 Tm -0.0301 Tc 0.0599 Tw [(print UNCOMPRESS $data while sysread\($sock, $data, BUFSIZE\);)]TJ /F1 1 Tf 11 0 0 11 63 734.0776 Tm -0.0001 Tc 0.1519 Tw [(H)17.8(o)12(w)5.8(e)0(v)5.8(e)0.1(r)59.7(,)0( when I tried this, I found a couple of hitches.)]TJ T* 0.0225 Tw [(O)5.8(ne is that )]TJ /F5 1 Tf 4.6397 0 TD -0.0002 Tc 0 Tw (lame)Tj /F1 1 Tf 2.0369 0 TD -0.0001 Tc 0.0225 Tw [(will not accept 8-bit PCM data, r)9.7(e)0(quiring)]TJ -6.6766 -1.0909 TD -0.0253 Tw [(16-bit data sampled at 16 kHz or higher)59.7(. )44.9(This was solv)5.8(ed b)5.8(y)]TJ T* 0.0837 Tw [(calling the pr)5.8(oper )]TJ /F2 1 Tf 9 0 0 9 143.2678 698.0776 Tm -0.0002 Tc 0 Tw (ioctl)Tj /F1 1 Tf 11 0 0 11 170.2612 698.0776 Tm -0.0001 Tc 0.0837 Tw [(s to put the DSP into the pr)5.8(oper)]TJ -9.751 -1.0909 TD 0.1082 Tw [(mode. )44.8(The other hitch is that some sound driv)5.8(ers do not)]TJ T* 0.3112 Tw [(allo)11.9(w y)5.8(ou to open the )]TJ /F2 1 Tf 9 0 0 9 175.1 674.0776 Tm -0.0002 Tc 0 Tw (/dev/dsp)Tj /F1 1 Tf 11 0 0 11 224.4619 674.0776 Tm -0.0001 Tc 0.3112 Tw [(driv)5.8(er twice, so the)]TJ -14.6784 -1.0909 TD 0.1731 Tw [(straightfor)-17.9(war)13.8(d strategy of opening two pipes would not)]TJ T* 0.0062 Tc 0.3687 Tw [(wor)5.8(k. I solv)5.8(ed that one b)5.8(y)0( opening )]TJ /F2 1 Tf 9 0 0 9 244.4039 650.0776 Tm 0.0061 Tc 0 Tw (/dev/dsp)Tj /F1 1 Tf 11 0 0 11 294.9205 650.0776 Tm 0.0062 Tc (once)Tj -21.0837 -1.0909 TD -0.0001 Tc -0.0009 Tw [(r)9.9(ead/write, and then r)9.7(eopening )]TJ /F2 1 Tf 9 0 0 9 197.1385 638.0776 Tm -0.0002 Tc 0 Tw (STDIN)Tj /F1 1 Tf 11 0 0 11 226.8714 638.0776 Tm (and )Tj /F2 1 Tf 9 0 0 9 245.4234 638.0776 Tm (STDOUT)Tj /F1 1 Tf 11 0 0 11 280.555 638.0776 Tm -0.0001 Tc -0.0009 Tw (on it, so)Tj 5.5859 14.9091 TD 0 Tw (that )Tj /F5 1 Tf 1.9386 0 TD -0.0002 Tc (lame)Tj /F1 1 Tf 2.1705 0 TD (and )Tj /F5 1 Tf 1.8436 0 TD -0.0001 Tc (mpg123)Tj /F1 1 Tf 3.4647 0 TD 0.1561 Tw [(wouldn)69.8()79.9(t)0( tr)-17.9(y to open )]TJ /F2 1 Tf 9 0 0 9 541.9017 802.0776 Tm -0.0002 Tc 0 Tw (/dev/dsp)Tj /F1 1 Tf 11 0 0 11 589.5582 802.0776 Tm 0 Tc (a)Tj -22.5053 -1.0909 TD -0.0001 Tc 0.025 Tw (second time.)Tj 0 -2.1818 TD -0.0268 Tw [(T)119.9(o)0( simplify matters, I put all the DSP-manipulating code in)]TJ 0 -1.0909 TD 0.0627 Tw [(a self-contained module named DSP)179.9(.pm, sho)11.9(wn in Listing)]TJ T* 0.1392 Tw [(3. )44.8(The module is object-oriented. )14.8(Y)93.9(ou cr)9.7(eate a ne)-5.9(w DSP)]TJ T* -0.0081 Tw [(handle b)5.8(y)0( calling )]TJ /F2 1 Tf 9 0 0 9 416.5568 730.0776 Tm -0.0002 Tc 0 Tw (DSP->new)Tj /F1 1 Tf 11 0 0 11 459.7463 730.0776 Tm -0.0001 Tc -0.0081 Tw [(. )44.9(The object that is r)9.7(eturned is a)]TJ -10.7042 -1.0909 TD 0.0199 Tc 0.5276 Tw [(r)9.9(ead/write IO handle attached to )]TJ /F2 1 Tf 9 0 0 9 520.403 718.0776 Tm 0 Tw (/dev/dsp)Tj /F1 1 Tf 11 0 0 11 565.0323 718.0776 Tm 0.4827 Tw (. The)Tj /F2 1 Tf 9 0 0 9 342 706.0776 Tm -0.0002 Tc 0 Tw (compress\(\))Tj /F1 1 Tf 11 0 0 11 398.9263 706.0776 Tm -0.0001 Tc 0.0172 Tw [(method r)9.7(eturns a pipe that y)5.8(ou can r)9.7(ead fr)5.8(om)]TJ -5.1751 -1.0909 TD 0.0199 Tc 0.9855 Tw [(to r)9.7(etriev)5.8(e MP3-compr)9.7(essed audio date. )44.8(The)]TJ /F2 1 Tf 9 0 0 9 342 682.0776 Tm -0.0002 Tc 0 Tw (uncompress\(\))Tj /F1 1 Tf 11 0 0 11 409.9522 682.0776 Tm -0.0001 Tc 0.038 Tw [(method r)9.7(eturns a second pipe that y)5.8(ou can)]TJ -6.1775 -1.0909 TD -0.0082 Tw [(write MP3 data to)15.8(. )44.9(The data will be uncompr)9.7(essed and sent)]TJ T* 0.0134 Tc 0.3615 Tw [(to the speakers. )44.8(The follo)11.9(wing example r)9.7(eads MP3-)]TJ T* -0.0001 Tc 0.2211 Tw [(compr)9.7(essed data fr)5.8(om the micr)5.8(ophone and immediately)]TJ 7.2273 -1.0909 TD 0.0404 Tw [(writes it back to the speaker)59.7(, cr)9.7(eating an)]TJ T* 0.025 Tw (awful racket:)Tj /F2 1 Tf 7 0 0 7 430.0378 602.0776 Tm -0.0502 Tc 0.06 Tw [(my $dsp = DSP->new;)]TJ 0 -1.1429 TD -0.0501 Tc [(my $compress = $dsp->compress;)]TJ T* [(my $uncompress = $dsp->uncompress;)]TJ T* [(print $uncompress $data while )]TJ 5.6578 -1.1429 TD [(sysread\($compress, $data, 1024\);)]TJ /F1 1 Tf 11 0 0 11 421.5 546.0776 Tm -0.0001 Tc 0.025 Tw [(Lines 1-5: M)23.9(odule setup stuff)15.8(.)]TJ 1.9178 -1.0909 TD 0.0975 Tw [(The module begins b)5.8(y)0( bringing in )]TJ T* 0.1976 Tw [(the modules w)5.8(e)-0.1( need. )14.9(W)77.8(e)0( inherit )]TJ T* 0.0044 Tc 0.3705 Tw [(fr)5.8(om IO::H)5.8(andle to get all the )]TJ T* -0.0001 Tc 0.1274 Tw [(av)5.8(ailable object-oriented filehandle )]TJ T* 0 Tw (methods.)Tj -1.9178 -2.1818 TD 0.025 Tw [(Lines 6-10: Load )]TJ /F2 1 Tf 9 0 0 9 497.3995 462.0776 Tm -0.0002 Tc 0 Tw (ioctl)Tj /F1 1 Tf 11 0 0 11 527.418 462.0776 Tm -0.0001 Tc (definitions)Tj -7.7111 -1.0909 TD 0.0904 Tw [(W)77.8(e)0( need to call a set of )]TJ /F2 1 Tf 9 0 0 9 550.196 450.0776 Tm -0.0002 Tc 0 Tw (ioctl)Tj /F1 1 Tf 11 0 0 11 577.1895 450.0776 Tm -0.0001 Tc 0.0904 Tw (s to )Tj -12.2358 -1.0909 TD 0.3536 Tw [(configur)9.7(e the sound car)13.8(d driv)5.8(er)59.7(. )]TJ T* 0.0658 Tw (The constants for these )Tj /F2 1 Tf 9 0 0 9 546.8463 426.0776 Tm -0.0002 Tc 0 Tw (ioctl)Tj /F1 1 Tf 11 0 0 11 573.8398 426.0776 Tm -0.0001 Tc 0.0658 Tw [(s ar)9.7(e )]TJ -11.9312 -1.0909 TD 0.0199 Tc 2.023 Tw [(av)5.8(ailable in the file )]TJ /F2 1 Tf 9 0 0 9 442.5962 402.0776 Tm -0.0002 Tc 0 Tw (sys/soundcard.ph)Tj /F1 1 Tf 11 0 0 11 528.9751 402.0776 Tm -0.0001 Tc 0.2919 Tw [(. I)5.8(f)0( y)5.8(ou don)69.8()79.9(t)0( )]TJ -7.8526 -1.0909 TD 0.188 Tw [(alr)9.7(eady hav)5.8(e this file in y)5.8(our P)53.9(erl )]TJ T* 0.0389 Tw [(librar)-17.9(y dir)9.7(ector)-17.9(y)84.9(,)-0.1( y)5.8(o)0.1(u)49.7()12(ll need to r)-7.9(un )]TJ /F2 1 Tf 9 0 0 9 442.5962 366.0776 Tm -0.0002 Tc 0 Tw (h2ph)Tj /F1 1 Tf 11 0 0 11 467.1975 366.0776 Tm -0.0001 Tc 0.0234 Tw [(on y)5.8(our system)69.8()79.9(s)0( include files, )]TJ -2.2365 -1.0909 TD 0.1113 Tw (as described in the documentation )Tj T* -0.0002 Tc 0 Tw (for )Tj /F2 1 Tf 9 0 0 9 457.8028 342.0775 Tm (h2ph)Tj /F1 1 Tf 11 0 0 11 482.4226 342.0775 Tm -0.0001 Tc 0.025 Tw [(bundled with P)53.9(erl.)]TJ -3.6206 -2.1818 TD 0.0199 Tc 0 Tw [(M)12(any )]TJ /F2 1 Tf 9 0 0 9 482.5936 318.0775 Tm (ioctl)Tj /F1 1 Tf 11 0 0 11 524.6718 318.0775 Tm 1.0195 Tw [(constants ar)9.7(e )]TJ -7.4614 -1.0909 TD 0.4656 Tw (calculated using a hash called )Tj /F2 1 Tf 9 0 0 9 442.5962 294.0775 Tm -0.0002 Tc 0 Tw (%sizeof)Tj /F1 1 Tf 11 0 0 11 480.3869 294.0775 Tm -0.0001 Tc 0.1366 Tw [(, which contains the siz)5.8(es )]TJ -3.4355 -1.0909 TD 0.0199 Tc 0.4937 Tw [(of v)5.8(arious system-specific data )]TJ T* -0.0001 Tc 0.2784 Tw (types, such as integers. Although )Tj T* 0.2559 Tw [(this is not w)5.8(ell-documented, y)5.8(ou )]TJ T* 0.0199 Tc 0.3936 Tw [(hav)5.8(e to cr)9.7(eate )]TJ /F2 1 Tf 9 0 0 9 519.4713 246.0775 Tm 0 Tw (%sizeof)Tj /F1 1 Tf 11 0 0 11 565.821 246.0775 Tm [(befor)9.7(e )]TJ -11.2023 -1.0909 TD -0.0001 Tc 0.1687 Tw (loading any )Tj /F2 1 Tf 9 0 0 9 498.4433 234.0775 Tm -0.0002 Tc 0 Tw (.ph)Tj /F1 1 Tf 11 0 0 11 519.2456 234.0775 Tm -0.0001 Tc 0.1688 Tw (file that depends )Tj -6.9681 -1.0909 TD 0.0181 Tc 0.3568 Tw (on it. A quick examination of )Tj /F2 1 Tf 9 0 0 9 442.5962 210.0775 Tm 0.0198 Tc 0 Tw (soundcard.ph)Tj /F1 1 Tf 11 0 0 11 518.4108 210.0775 Tm 0.5364 Tw [(sho)11.9(w)5.8(ed that it )]TJ -6.8922 -1.0909 TD -0.0001 Tc 0.3412 Tw [(needs to kno)11.9(w the siz)5.8(e of )]TJ /F2 1 Tf 9 0 0 9 574.2606 198.0775 Tm -0.0002 Tc 0 Tw (int)Tj /F1 1 Tf 11 0 0 11 590.4568 198.0775 Tm 0 Tc (. )Tj -13.4419 -1.0909 TD 0.0199 Tc 0.6431 Tw (Rather than code this in a )Tj T* -0.0001 Tc 0.2581 Tw [(nonpor)-7.9(table way)84.9(, w)5.8(e)0( get the siz)5.8(e )]TJ T* -0.0002 Tc 0 Tw (of )Tj /F2 1 Tf 9 0 0 9 454.9537 162.0775 Tm (int)Tj /F1 1 Tf 11 0 0 11 474.9752 162.0775 Tm 0.0979 Tw [(fr)5.7(om P)53.8(erl)11.8()79.8(s)-0.2( )]TJ /F2 1 Tf 9 0 0 9 524.69 162.0775 Tm 0 Tw (Config)Tj /F1 1 Tf 11 0 0 11 560.9076 162.0775 Tm -0.0001 Tc (module )Tj -10.7556 -1.0909 TD 0.3595 Tw [(and use it to initializ)5.8(e a global )]TJ T* 0.017 Tc 0.3579 Tw [(v)5.9(ariable named )]TJ /F2 1 Tf 9 0 0 9 520.2343 138.0775 Tm 0 Tw (%sizeof)Tj /F1 1 Tf 11 0 0 11 565.9786 138.0775 Tm [(befor)9.7(e )]TJ -11.2166 -1.0909 TD -0.0001 Tc 0.025 Tw (loading the )Tj /F2 1 Tf 9 0 0 9 493.6425 126.0775 Tm -0.0002 Tc 0 Tw (.ph)Tj /F1 1 Tf 11 0 0 11 512.8636 126.0775 Tm -0.0001 Tc (file.)Tj 12 0 0 12 63 90.3543 Tm 0 Tc [(16)-1100(F)]TJ 10.44 0 0 10.44 94.2795 90.3543 Tm -0.0001 Tc (ALL)Tj 12 0 0 12 115.6277 90.3543 Tm 0 Tc (2000)Tj /F3 1 Tf 30.9897 0.0003 TD -0.0002 Tc 0.0255 Tw [(The P)47.6(erl J)35.7(our)-8(nal #19)]TJ ET 0 0.03 0.3 0 k 63 620 346.5 -503 re 587.395 90.357 m f* BT /F8 1 Tf 14 0 0 14 70 605.1789 Tm 0 0 0 1 k (Listing 3.)Tj 0 -1.2143 TD -0.0001 Tc [(The DSP)179.8(.pm module, which r)19.7(eads and wr)5.8(ites MP3 data.)]TJ /F2 1 Tf 7 0 0 7 74.6189 568.1789 Tm -0.0002 Tc 0.06 Tw [(0 package DSP;)]TJ 0 -2.2857 TD [(1 use strict;)]TJ 0 -1.1429 TD [(2 use IO::File;)]TJ T* [(3 use Carp 'croak';)]TJ T* [(4 use vars '%sizeof', '@ISA';)]TJ T* [(5 @ISA = 'IO::Handle';)]TJ 0 -2.2857 TD [(6 BEGIN {)]TJ 0 -1.1429 TD [(7 use Config;)]TJ T* [(8 %sizeof= \( int => $Config{intsize} \);)]TJ T* [(9 require "sys/soundcard.ph";)]TJ T* [(10 })]TJ 0 -2.2857 TD [(11 use constant DSP )-3704.3(=> '/dev/dsp';)]TJ 0 -1.1429 TD -0.0001 Tc [(12 use constant COMPRESS => $Config{byteorder} eq '1234')]TJ T* [(13 ? "lame -r -x -m m -b32 -s16 - - |")]TJ T* -0.0002 Tc [(14 : "lame -r)-2499.7(-m m -b32 -s16 - - |";)]TJ T* [(15 use constant UNCOMPRESS)-810.1(=> "| mpg123 -s -m -";)]TJ 0 -2.2857 TD [(16 sub new {)]TJ 0 -1.1429 TD [(17 my $class = shift;)]TJ T* -0.0001 Tc [(18 my $dsp = IO::File->new\('/dev/dsp', 'r+'\) )]TJ 13.8567 -1.1429 TD -0.0002 Tc (or croak "Can't open /dev/dsp: $!";)Tj -13.8567 -1.1429 TD [(19 croak "can't set samplesize: $!" )]TJ 7.2583 -1.1429 TD -0.0001 Tc [(unless ioctl $dsp, SNDCTL_DSP_SAMPLESIZE, pack\("I", 16\);)]TJ -7.2583 -1.1429 TD -0.0002 Tc [(20 croak "can't set speed: $!" )]TJ 7.2583 -1.1429 TD -0.0001 Tc [(unless ioctl $dsp, SNDCTL_DSP_SPEED, pack\("I", 16000\);)]TJ -7.2583 -1.1429 TD -0.0002 Tc [(21 croak "can't set mono: $!" )]TJ 7.2583 -1.1429 TD -0.0001 Tc [(unless ioctl $dsp, SNDCTL_DSP_STEREO, pack\("I", 0\);)]TJ -7.2583 -1.1429 TD -0.0002 Tc [(22 return bless $dsp, $class;)]TJ T* [(23 })]TJ 0 -2.2857 TD [(24 # read from encode to get MP3 from microphone)]TJ 0 -1.1429 TD [(25 sub compress {)]TJ T* [(26 my $self = shift;)]TJ T* [(27 open\(S, "<&STDIN"\);)]TJ T* -0.0001 Tc [(28 STDIN->fdopen\($self, "r"\) or die "Can't reopen STDIN on DSP: $!";)]TJ T* [(29 my $encode = IO::File->new\(COMPRESS\) or croak "Can't open lame: $!";)]TJ T* -0.0002 Tc [(30 open\(STDIN, "<&S"\);)]TJ T* [(31 return $encode;)]TJ T* [(32 })]TJ 0 -2.2857 TD [(33 # write to decode to get sound from MP3)]TJ 0 -1.1429 TD [(34 sub uncompress {)]TJ T* [(35 my $self = shift;)]TJ T* [(36 open\(S, ">&STDOUT"\);)]TJ T* -0.0001 Tc [(37 STDOUT->fdopen\($self, "w"\) or die "Can't reopen STDOUT on DSP: $!";)]TJ T* [(38 my $uncompress = IO::File->new\(UNCOMPRESS\) )]TJ 7.2583 -1.1429 TD -0.0002 Tc (or die "Can't open mpg123: $!";)Tj -7.2583 -1.1429 TD [(39 $uncompress->autoflush\(1\);)]TJ T* [(40 open\(STDOUT, ">&S"\);)]TJ T* [(41 return $uncompress;)]TJ T* [(42 })]TJ 0 -2.2857 TD [(43 1;)]TJ ET Q 0 0 0 0 k /GS2 gs 1 i 37 874 191 -12 re 105.27 128.179 m f* BT /F2 1 Tf 8 0 0 8 39 864 Tm /Cs9 cs 1 scn -0.0004 Tc -0.0019 Tw (TPJ#19/9.26 9/27/00 10:35 AM Page 16)Tj ET 1 G 0 J 0 j 0.5 w 10 M []0 d 36 873 m 36 849 l 0 837 m 24 837 l 621 873 m 621 849 l 657 837 m 633 837 l 36 36 m 36 60 l 0 72 m 24 72 l 621 36 m 621 60 l 657 72 m 633 72 l S /Cs9 CS 1 SCN 0.25 w 36 873 m 36 849 l 0 837 m 24 837 l 621 873 m 621 849 l 657 837 m 633 837 l 36 36 m 36 60 l 0 72 m 24 72 l 621 36 m 621 60 l 657 72 m 633 72 l S 1 G 0.5 w 304.5 861 m 352.5 861 l 304.5 48 m 352.5 48 l 12 478.5 m 12 430.5 l 645 478.5 m 645 430.5 l 328.5 873 m 328.5 849 l 328.5 60 m 328.5 36 l 0 454.5 m 24 454.5 l 633 454.5 m 657 454.5 l 328.5 861 m 334.5 861 l 334.5 857.688 331.812 855 328.5 855 c 325.188 855 322.5 857.688 322.5 861 c 322.5 864.312 325.188 867 328.5 867 c 331.812 867 334.5 864.312 334.5 861 c 328.5 48 m 334.5 48 l 334.5 44.688 331.812 42 328.5 42 c 325.188 42 322.5 44.688 322.5 48 c 322.5 51.312 325.188 54 328.5 54 c 331.812 54 334.5 51.312 334.5 48 c 12 454.5 m 18 454.5 l 18 451.188 15.312 448.5 12 448.5 c 8.688 448.5 6 451.188 6 454.5 c 6 457.812 8.688 460.5 12 460.5 c 15.312 460.5 18 457.812 18 454.5 c 645 454.5 m 651 454.5 l 651 451.188 648.312 448.5 645 448.5 c 641.688 448.5 639 451.188 639 454.5 c 639 457.812 641.688 460.5 645 460.5 c 648.312 460.5 651 457.812 651 454.5 c S /Cs9 CS 1 SCN 0.25 w 304.5 861 m 352.5 861 l 304.5 48 m 352.5 48 l 12 478.5 m 12 430.5 l 645 478.5 m 645 430.5 l 328.5 873 m 328.5 849 l 328.5 60 m 328.5 36 l 0 454.5 m 24 454.5 l 633 454.5 m 657 454.5 l 328.5 861 m 334.5 861 l 334.5 857.688 331.812 855 328.5 855 c 325.188 855 322.5 857.688 322.5 861 c 322.5 864.312 325.188 867 328.5 867 c 331.812 867 334.5 864.312 334.5 861 c 328.5 48 m 334.5 48 l 334.5 44.688 331.812 42 328.5 42 c 325.188 42 322.5 44.688 322.5 48 c 322.5 51.312 325.188 54 328.5 54 c 331.812 54 334.5 51.312 334.5 48 c 12 454.5 m 18 454.5 l 18 451.188 15.312 448.5 12 448.5 c 8.688 448.5 6 451.188 6 454.5 c 6 457.812 8.688 460.5 12 460.5 c 15.312 460.5 18 457.812 18 454.5 c 645 454.5 m 651 454.5 l 651 451.188 648.312 448.5 645 448.5 c 641.688 448.5 639 451.188 639 454.5 c 639 457.812 641.688 460.5 645 460.5 c 648.312 460.5 651 457.812 651 454.5 c S endstream endobj 47 0 obj << /Type /Page /Parent 492 0 R /Resources 48 0 R /Contents 49 0 R /Thumb 353 0 R /MediaBox [ 0 0 684 873 ] /CropBox [ 0 0 684 873 ] /Rotate 0 >> endobj 48 0 obj << /ProcSet [ /PDF /Text ] /Font << /F1 515 0 R /F2 518 0 R /F3 261 0 R /F5 262 0 R /F8 268 0 R /F11 271 0 R >> /ExtGState << /GS1 523 0 R /GS2 521 0 R >> /ColorSpace << /Cs9 520 0 R >> >> endobj 49 0 obj << /Length 11869 >> stream 1 g /GS1 gs 0 873 m 0 873 l f q 1 i 27 846 603 -783 re 0 873 m W n 0 873 684 -873 re W n BT /F1 1 Tf 11 0 0 11 63 802.0776 Tm 0 0 0 1 k /GS2 gs -0.0001 Tc 0.025 Tw (Lines 11-15: Constants)Tj 1.6364 -1.0909 TD 0.0199 Tc 0.4418 Tw [(W)77.8(e)0( declar)9.7(e a constant for the path )]TJ T* 0.4488 Tw (to the DSP device special file, and)Tj T* -0.0001 Tc -0.0171 Tw [(constants containing the inv)5.8(ocations of the)]TJ /F5 1 Tf T* -0.0002 Tc 0 Tw (lame)Tj /F1 1 Tf 2.1073 0 TD -0.0001 Tc 0.0929 Tw (MP3 encoder and the )Tj /F5 1 Tf 9.0306 0 TD 0 Tw (mpg123)Tj /F1 1 Tf 3.4015 0 TD -0.0002 Tc (MP3)Tj -14.5393 -1.0909 TD 0.0199 Tc 0.6173 Tw [(decoder)59.8(. The )-44.9(v)5.8(arious )-44.8(command-line)]TJ T* 0.013 Tc 0.3619 Tw (options passed to )Tj /F5 1 Tf 8.2157 0 TD 0 Tw (lame)Tj /F1 1 Tf 2.4418 0 TD 0.3619 Tw (specify PCM-)Tj -10.6574 -1.0909 TD 0.0199 Tc 0.8084 Tw (format input, monaural sound, a)Tj T* -0.0001 Tc 0.0638 Tw (maximum bitrate of 32 kbs, a sample rate)Tj T* 0.0213 Tw [(of 16 kHz, and standar)13.8(d input and output)]TJ T* 0.0199 Tc 0.7832 Tw [(for input and output. )44.9(The only)]TJ T* -0.0001 Tc 0.258 Tw [(complication her)9.7(e is the )]TJ /F2 1 Tf 9 0 0 9 196.7175 670.0776 Tm -0.0003 Tc 0 Tw (-x)Tj /F1 1 Tf 11 0 0 11 213.1028 670.0776 Tm -0.0001 Tc 0.258 Tw (flag, which)Tj -12.0093 -1.0909 TD 0.1465 Tw [(must be set for little-endian ar)5.8(chitectur)9.7(es)]TJ T* 0.176 Tw (so that )Tj /F5 1 Tf 3.1932 0 TD -0.0002 Tc 0 Tw (lame)Tj /F1 1 Tf 2.1903 0 TD -0.0001 Tc 0.1759 Tw [(will b)5.8(yteswap the incoming)]TJ -5.3835 -1.0909 TD 0.0666 Tw [(PCM data. )14.8(W)77.8(e)0( determine the endian-ness)]TJ T* 0.0099 Tw [(of our ar)5.8(chitectur)9.7(e on the fly b)5.8(y)0( looking at)]TJ /F2 1 Tf 9 0 0 9 81 610.0776 Tm -0.0002 Tc 0 Tw ($Config{byteorder})Tj /F1 1 Tf 11 0 0 11 178.1763 610.0776 Tm 0 Tc (.)Tj -8.8342 -2.2727 TD -0.0001 Tc 0.3625 Tw (The flags to )Tj /F5 1 Tf 5.9103 0 TD 0 Tw (mpg123)Tj /F1 1 Tf 3.6711 0 TD 0.3625 Tw (specify monaural)Tj -9.5813 -1.0909 TD 0.0199 Tc 0.3836 Tw [(sound and tell the pr)5.8(ogram to send)]TJ T* 0.3762 Tw [(uncompr)9.7(essed PCM data to standar)13.9(d)]TJ T* -0.0001 Tc 0 Tw (output.)Tj -1.6364 -2.2727 TD 0 Tc 0.025 Tw (Lines 16-23: )Tj /F2 1 Tf 9 0 0 9 119.9089 524.0776 Tm -0.0002 Tc 0 Tw (new\(\))Tj /F1 1 Tf 11 0 0 11 149.9274 524.0776 Tm -0.0001 Tc (method)Tj -6.2661 -1.0909 TD -0.0051 Tc (The )Tj /F2 1 Tf 9 0 0 9 104.0305 512.0776 Tm (new\(\))Tj /F1 1 Tf 11 0 0 11 136.7156 512.0776 Tm 0.2929 Tw (method opens the DSP for)Tj -5.0651 -1.0909 TD 0.0097 Tc 0.3602 Tw [(r)9.9(eading and writing. After successfully)]TJ T* -0.0051 Tc 0.3544 Tw [(opening the device special file, w)5.7(e)0( call)]TJ /F2 1 Tf 9 0 0 9 81 476.0776 Tm 0 Tw (ioctl)Tj /F1 1 Tf 11 0 0 11 112.5737 476.0776 Tm 0.1919 Tw [(thr)9.7(ee times. )44.9(The first call sets the)]TJ -2.8703 -1.0909 TD -0.005 Tc 0.0016 Tw [(sample siz)5.9(e to 16 bits \(2 b)5.9(y)0.1(tes\). )44.9(The second)]TJ T* -0.0051 Tc 0.0081 Tw [(call sets the sampling rate to 16 kHz, and the thir)13.7(d puts)]TJ T* -0.0274 Tw [(the DSP into monaural mode b)5.7(y)0( setting the )]TJ /F2 1 Tf 9 0 0 9 265.4009 440.0776 Tm 0 Tw (STEREO)Tj /F1 1 Tf 11 0 0 11 299.9163 440.0776 Tm (flag)Tj -19.9015 -1.0909 TD -0.0077 Tw [(to false. N)29.7(otice that the second argument to each )]TJ /F2 1 Tf 9 0 0 9 288.1868 428.0776 Tm 0 Tw (ioctl)Tj /F1 1 Tf 11 0 0 11 81 416.0776 Tm 0.053 Tw (call is a constant defined in )Tj /F2 1 Tf 9 0 0 9 200.7687 416.0776 Tm 0 Tw (sys/soundcard.ph)Tj /F1 1 Tf 11 0 0 11 286.4279 416.0776 Tm 0.053 Tw (, while)Tj -18.6753 -1.0909 TD 0.025 Tw [(the thir)13.8(d is a packed integer)59.7(.)]TJ 0 -2.2727 TD -0.0001 Tc [(W)77.8(e)0( r)9.7(eturn the handle, blessed into the DSP class.)]TJ -1.6364 -2.2727 TD 0 Tc (Lines 25-32: )Tj /F2 1 Tf 9 0 0 9 119.9089 354.0775 Tm -0.0002 Tc 0 Tw (compress\(\))Tj /F1 1 Tf 11 0 0 11 176.9208 354.0775 Tm -0.0001 Tc (method)Tj -8.7201 -1.0909 TD -0.0201 Tc (The )Tj /F2 1 Tf 9 0 0 9 101.3469 342.0775 Tm (compress\(\))Tj /F1 1 Tf 11 0 0 11 157.262 342.0775 Tm 0.1089 Tw [(method will r)9.7(eturn a pipe suitable for)]TJ -6.9329 -1.0909 TD -0.0054 Tw [(r)9.9(eading MP3-compr)9.7(essed data. )44.9(The trick her)9.7(e is to r)9.7(eplace)]TJ /F2 1 Tf 9 0 0 9 81 318.0775 Tm 0 Tw (STDIN)Tj /F1 1 Tf 11 0 0 11 110.4486 318.0775 Tm 0.075 Tw (with the DSP handle, so that )Tj /F5 1 Tf 11.3303 0 TD 0 Tw (lame)Tj /F1 1 Tf 1.9894 0 TD 0.075 Tw (takes its input)Tj -15.9969 -1.0909 TD 0 Tw [(fr)5.7(om )]TJ /F2 1 Tf 9 0 0 9 105.1193 306.0775 Tm (/dev/dsp)Tj /F1 1 Tf 11 0 0 11 146.8689 306.0775 Tm 0.1542 Tw [(, r)9.7(eading dir)9.7(ectly fr)5.8(om the micr)5.8(ophone.)]TJ -5.9881 -1.0909 TD 0.3023 Tw [(W)77.8(e)0( sav)5.8(e the curr)9.7(ent v)5.8(alue of )]TJ /F2 1 Tf 9 0 0 9 216.6567 294.0775 Tm 0 Tw (STDIN)Tj /F1 1 Tf 11 0 0 11 248.6058 294.0775 Tm 0.3023 Tw [(in a temporar)-17.9(y)]TJ -15.2369 -1.0909 TD -0.0001 Tc 0.3898 Tw [(filehandle, and then r)9.7(eopen )]TJ /F2 1 Tf 9 0 0 9 217.463 282.0775 Tm -0.0002 Tc 0 Tw (STDIN)Tj /F1 1 Tf 11 0 0 11 251.4945 282.0775 Tm -0.0001 Tc 0.3898 Tw (onto the )Tj /F2 1 Tf 9 0 0 9 298.8042 282.0775 Tm -0.0002 Tc 0 Tw (DSP)Tj /F1 1 Tf 11 0 0 11 81 270.0775 Tm -0.0201 Tc 0.1389 Tw (filehandle, using the object-oriented )Tj /F2 1 Tf 9 0 0 9 234.7703 270.0775 Tm 0 Tw (fdopen\(\))Tj /F1 1 Tf 11 0 0 11 280.578 270.0775 Tm (method.)Tj -18.1435 -1.0909 TD 0.1246 Tw [(W)77.8(e)0( no)11.9(w call )]TJ /F2 1 Tf 9 0 0 9 137.299 258.0775 Tm 0 Tw (IO::File->new\(\))Tj /F1 1 Tf 11 0 0 11 219.4806 258.0775 Tm 0.1247 Tw (to open the )Tj /F5 1 Tf 4.808 0 TD 0 Tw (lame)Tj /F1 1 Tf 2.0391 0 TD (pipe.)Tj -19.4362 -1.0909 TD 0.025 Tw [(W)77.8(e)0( r)9.7(estor)9.7(e )]TJ /F2 1 Tf 9 0 0 9 126.7585 246.0775 Tm 0 Tw (STDIN)Tj /F1 1 Tf 11 0 0 11 152.8521 246.0775 Tm 0.025 Tw [(, and r)9.7(eturn the pipe to the caller)59.7(.)]TJ -8.1684 -2.2727 TD 0 Tc (Lines 35-44: )Tj /F2 1 Tf 9 0 0 9 119.9089 221.0776 Tm -0.0002 Tc 0 Tw (uncompress\(\))Tj /F1 1 Tf 11 0 0 11 187.7181 221.0776 Tm -0.0001 Tc (method)Tj -9.7016 -1.0909 TD (The )Tj /F2 1 Tf 9 0 0 9 101.4116 209.0776 Tm -0.0002 Tc (uncompress\(\))Tj /F1 1 Tf 11 0 0 11 169.3286 209.0776 Tm -0.0001 Tc 0.0348 Tw [(method will r)9.7(eturn a pipe suitable)]TJ -8.0299 -1.0909 TD -0.0374 Tw [(for writing MP3-compr)9.7(essed data. I)23.9(t)0( uses the same trick)]TJ T* 0 Tw (as )Tj /F2 1 Tf 9 0 0 9 91.6605 185.0776 Tm -0.0002 Tc (compress\(\))Tj /F1 1 Tf 11 0 0 11 145.6473 185.0776 Tm -0.0001 Tc -0.0076 Tw [(, ex)11.9(cept that no)11.9(w w)5.8(e)0( operate on )]TJ /F2 1 Tf 9 0 0 9 282.6079 185.0776 Tm -0.0002 Tc 0 Tw (STDOUT)Tj /F1 1 Tf 11 0 0 11 81 173.0776 Tm -0.0001 Tc 0.1785 Tw (rather than )Tj /F2 1 Tf 9 0 0 9 134.8195 173.0776 Tm -0.0002 Tc 0 Tw (STDIN)Tj /F1 1 Tf 11 0 0 11 161.813 173.0776 Tm -0.0001 Tc 0.1785 Tw [(. After saving the curr)9.7(ent v)5.8(alue of)]TJ /F2 1 Tf 9 0 0 9 81 161.0776 Tm -0.0002 Tc 0 Tw (STDOUT)Tj /F1 1 Tf 11 0 0 11 117.5904 161.0776 Tm -0.0001 Tc 0.1316 Tw [(in a temporar)-17.9(y filehandle, w)5.8(e)0( r)9.7(eopen it onto)]TJ -3.3264 -1.0909 TD 0.3424 Tw [(the DSP)179.9(,)0( and call )]TJ /F2 1 Tf 9 0 0 9 171.3062 149.0776 Tm -0.0002 Tc 0 Tw (IO::File->new\(\))Tj /F1 1 Tf 11 0 0 11 258.8027 149.0776 Tm -0.0001 Tc 0.3424 Tw (to open the)Tj /F5 1 Tf -16.1639 -1.0909 TD 0 Tw (mpg123)Tj /F1 1 Tf 3.4424 0 TD 0.1338 Tw [(pipe. )14.8(W)77.8(e)0( don)69.8()79.9(t)0( want data getting held up in)]TJ -3.4424 -1.0909 TD 0.0144 Tc 0.3605 Tw [(standar)13.9(d IO buffering, so w)5.8(e)0( activ)5.8(ate the pipe)29.7()79.9(s)]TJ 12 0 0 12 517.3723 90.3543 Tm 0 Tc 0 Tw (F)Tj 10.44 0 0 10.44 523.4518 90.3543 Tm -0.0001 Tc (ALL)Tj 12 0 0 12 544.7999 90.3543 Tm 0 Tc 0.025 Tw [(2000 17)]TJ /F3 1 Tf -40.15 0 TD -0.0002 Tc 0.0255 Tw [(The P)47.6(erl J)35.7(our)-8(nal #19)]TJ ET 0 0.03 0.3 0 k 274.5 810 319.5 -337.5 re 162.892 90.354 m f* BT /F8 1 Tf 14 0 0 14 280.5 794.3291 Tm 0 0 0 1 k (Listing 4.)Tj /F11 1 Tf 12 0 0 12 280.5 782.3291 Tm 0 Tw (mp3_send.pl)Tj /F8 1 Tf 14 0 0 14 363.6059 782.3291 Tm -0.0001 Tc 0.0255 Tw (initiates MP3-encoded telephone calls.)Tj /F2 1 Tf 7 0 0 7 285.1189 760.3291 Tm -0.0002 Tc 0.06 Tw [(0 #!/usr/bin/perl)]TJ 0 -1.4286 TD [(1 # file mp3_send.pl)]TJ 0 -2.8571 TD [(2 use strict;)]TJ 0 -1.4286 TD [(3 use DSP;)]TJ T* [(4 use IO::Socket;)]TJ 0 -2.8571 TD -0.0001 Tc [(5 use constant BUFSIZE => 1024;)]TJ 0 -1.4286 TD [(6 $SIG{CHLD} = sub { exit 0 };)]TJ 0 -2.8571 TD [(7 my $dest = shift || 'prego';)]TJ 0 -1.4286 TD [(8 my $port = shift || 2007;)]TJ T* [(9 my $sock = IO::Socket::INET->new\("$dest:$port"\) )]TJ 4.6189 -1.4286 TD -0.0002 Tc [(|| die "Can't connect: $!";)]TJ -4.6189 -1.4286 TD [(10 my $dsp = new DSP;)]TJ 0 -2.8571 TD [(11 my $child = fork\(\);)]TJ 0 -1.4286 TD -0.0001 Tc [(12 die "Can't fork: $!" unless defined $child;)]TJ 0 -2.8571 TD -0.0002 Tc [(13 my $data;)]TJ 0 -1.4286 TD -0.0001 Tc [(14 if \($child\) { # parent process)]TJ T* [(15 my $uncompress = $dsp->uncompress;)]TJ T* [(16 print $uncompress $data while sysread\($sock, $data, BUFSIZE\);)]TJ T* [(17 kill TERM => $child;)]TJ T* -0.0002 Tc [(18 } else {)]TJ T* -0.0001 Tc [(19 my $compress = $dsp->compress;)]TJ T* [(20 print $sock $data while sysread\($compress, $data, BUFSIZE\);)]TJ T* -0.0002 Tc [(21 })]TJ ET 0 0 0 0.1 k /GS1 gs 342.5 458.5 251 -341 re 311.571 490.329 m f* 0 0 0 1 K 0 J 0 j 1 w 10 M []0 d 342.5 458.5 251 -341 re S BT /F8 1 Tf 24 0 0 24 400.3325 311.3976 Tm 0 0 0 1 k /GS2 gs 0 Tw [(CONSUL)117.7(TIX)]TJ 1.0917 -1.2 TD 0.0255 Tw (1/4 page)Tj 0.57 -1.2 TD -0.0004 Tc 0 Tw [(NE)11.6(W)]TJ ET Q 0 0 0 0 k /GS2 gs 1 i 37 874 191 -12 re 495.79 253.798 m f* BT /F2 1 Tf 8 0 0 8 39 864 Tm /Cs9 cs 1 scn -0.0004 Tc -0.0019 Tw (TPJ#19/9.26 9/27/00 10:35 AM Page 17)Tj ET 1 G 0 J 0 j 0.5 w 10 M []0 d 36 873 m 36 849 l 0 837 m 24 837 l 621 873 m 621 849 l 657 837 m 633 837 l 36 36 m 36 60 l 0 72 m 24 72 l 621 36 m 621 60 l 657 72 m 633 72 l S /Cs9 CS 1 SCN 0.25 w 36 873 m 36 849 l 0 837 m 24 837 l 621 873 m 621 849 l 657 837 m 633 837 l 36 36 m 36 60 l 0 72 m 24 72 l 621 36 m 621 60 l 657 72 m 633 72 l S 1 G 0.5 w 304.5 861 m 352.5 861 l 304.5 48 m 352.5 48 l 12 478.5 m 12 430.5 l 645 478.5 m 645 430.5 l 328.5 873 m 328.5 849 l 328.5 60 m 328.5 36 l 0 454.5 m 24 454.5 l 633 454.5 m 657 454.5 l 328.5 861 m 334.5 861 l 334.5 857.688 331.812 855 328.5 855 c 325.188 855 322.5 857.688 322.5 861 c 322.5 864.312 325.188 867 328.5 867 c 331.812 867 334.5 864.312 334.5 861 c 328.5 48 m 334.5 48 l 334.5 44.688 331.812 42 328.5 42 c 325.188 42 322.5 44.688 322.5 48 c 322.5 51.312 325.188 54 328.5 54 c 331.812 54 334.5 51.312 334.5 48 c 12 454.5 m 18 454.5 l 18 451.188 15.312 448.5 12 448.5 c 8.688 448.5 6 451.188 6 454.5 c 6 457.812 8.688 460.5 12 460.5 c 15.312 460.5 18 457.812 18 454.5 c 645 454.5 m 651 454.5 l 651 451.188 648.312 448.5 645 448.5 c 641.688 448.5 639 451.188 639 454.5 c 639 457.812 641.688 460.5 645 460.5 c 648.312 460.5 651 457.812 651 454.5 c S /Cs9 CS 1 SCN 0.25 w 304.5 861 m 352.5 861 l 304.5 48 m 352.5 48 l 12 478.5 m 12 430.5 l 645 478.5 m 645 430.5 l 328.5 873 m 328.5 849 l 328.5 60 m 328.5 36 l 0 454.5 m 24 454.5 l 633 454.5 m 657 454.5 l 328.5 861 m 334.5 861 l 334.5 857.688 331.812 855 328.5 855 c 325.188 855 322.5 857.688 322.5 861 c 322.5 864.312 325.188 867 328.5 867 c 331.812 867 334.5 864.312 334.5 861 c 328.5 48 m 334.5 48 l 334.5 44.688 331.812 42 328.5 42 c 325.188 42 322.5 44.688 322.5 48 c 322.5 51.312 325.188 54 328.5 54 c 331.812 54 334.5 51.312 334.5 48 c 12 454.5 m 18 454.5 l 18 451.188 15.312 448.5 12 448.5 c 8.688 448.5 6 451.188 6 454.5 c 6 457.812 8.688 460.5 12 460.5 c 15.312 460.5 18 457.812 18 454.5 c 645 454.5 m 651 454.5 l 651 451.188 648.312 448.5 645 448.5 c 641.688 448.5 639 451.188 639 454.5 c 639 457.812 641.688 460.5 645 460.5 c 648.312 460.5 651 457.812 651 454.5 c S endstream endobj 50 0 obj << /Type /Page /Parent 492 0 R /Resources 51 0 R /Contents 52 0 R /Thumb 355 0 R /MediaBox [ 0 0 684 873 ] /CropBox [ 0 0 684 873 ] /Rotate 0 >> endobj 51 0 obj << /ProcSet [ /PDF /Text ] /Font << /F1 515 0 R /F2 518 0 R /F3 261 0 R /F5 262 0 R /F8 268 0 R /F10 270 0 R /F11 271 0 R >> /ExtGState << /GS1 523 0 R /GS2 521 0 R >> /ColorSpace << /Cs9 520 0 R >> >> endobj 52 0 obj << /Length 11223 >> stream 1 g /GS1 gs 0 873 m 0 873 l f q 1 i 27 846 603 -783 re 0 873 m W n 0 873 684 -873 re W n BT /F1 1 Tf 11 0 0 11 81 345.9089 Tm 0 0 0 1 k /GS2 gs -0.0001 Tc 0.1213 Tw [(autoflush pr)5.8(oper)-7.9(ty)84.9(. After r)9.7(estoring )]TJ /F2 1 Tf 9 0 0 9 233.8085 345.9089 Tm -0.0002 Tc 0 Tw (STDOUT)Tj /F1 1 Tf 11 0 0 11 266.2006 345.9089 Tm -0.0001 Tc 0.1214 Tw [(, w)5.8(e)0( r)9.7(eturn)]TJ -16.8364 -1.0909 TD 0.025 Tw [(the pipe to the caller)59.7(.)]TJ -1.6364 -2.2727 TD 0.1821 Tw [(Listings 4 and 5 sho)11.9(w )]TJ /F2 1 Tf 9 0 0 9 168.16 308.9088 Tm -0.0002 Tc 0 Tw (mp3_send.pl)Tj /F1 1 Tf 11 0 0 11 232.2988 308.9088 Tm (and )Tj /F2 1 Tf 9 0 0 9 252.8646 308.9088 Tm (mp3_recv.pl)Tj /F1 1 Tf 11 0 0 11 312.2501 308.9088 Tm 0 Tc (,)Tj -22.6591 -1.0909 TD -0.0001 Tc 0.1247 Tw [(v)5.9(ersions of the earlier simple scripts modified to transmit)]TJ T* 0.0199 Tc 0.4079 Tw [(MP3-encoded audio str)9.8(eams. B)5.8(ecause they)29.8()69.9(r)9.9(e nearly)]TJ T* -0.0001 Tc 0.0106 Tw [(identical, w)5.8(e)0( don)69.8()79.9(t)0( need to walk thr)5.8(ough them again. )44.8(Ther)9.7(e)]TJ T* 0.025 Tw [(ar)9.7(e two impor)-7.9(tant changes:)]TJ 0 -2.1818 TD 0.1562 Tw [(1.)-331.6(I)12(nstead of opening )]TJ /F2 1 Tf 9 0 0 9 162.0691 236.9088 Tm -0.0002 Tc 0 Tw (/dev/dsp)Tj /F1 1 Tf 11 0 0 11 209.7271 236.9088 Tm -0.0001 Tc 0.1562 Tw [(dir)9.7(ectly)84.9(, the scripts load)]TJ -12.2573 -1.0909 TD 0.025 Tw [(the DSP)179.9(.pm module and cr)9.7(eate a ne)-5.9(w )]TJ /F2 1 Tf 9 0 0 9 238.9378 224.9088 Tm -0.0002 Tc 0 Tw (DSP)Tj /F1 1 Tf 11 0 0 11 258.1589 224.9088 Tm -0.0001 Tc (object.)Tj -17.7417 -1.8182 TD 0.1033 Tw [(2.)-331.6(I)12(nstead of writing or r)9.7(eading to )]TJ /F2 1 Tf 9 0 0 9 217.1983 204.9089 Tm -0.0002 Tc 0 Tw (/dev/dsp)Tj /F1 1 Tf 11 0 0 11 264.2746 204.9089 Tm -0.0001 Tc 0.1034 Tw [(dir)9.7(ectly)84.9(, the)]TJ -17.2162 -1.0909 TD 0.0199 Tc 0.377 Tw [(scripts inv)5.8(oke the DSP object)17.8()79.9(s)-0.1( )]TJ /F2 1 Tf 9 0 0 9 235.8445 192.9089 Tm 0 Tw (compress\(\))Tj /F1 1 Tf 11 0 0 11 298.748 192.9089 Tm (and)Tj /F2 1 Tf 9 0 0 9 74.8969 180.9089 Tm -0.0002 Tc (uncompress\(\))Tj /F1 1 Tf 11 0 0 11 144.9642 180.9089 Tm -0.0001 Tc 0.2303 Tw [(method to r)9.7(etriev)5.8(e the filehandles for)]TJ -6.3698 -1.0909 TD 0.025 Tw [(r)9.9(eading and writing.)]TJ -1.0815 -2.1818 TD [(O)5.8(ther)-17.9(wise, the scripts ar)9.7(e identical to the simple v)5.8(ersions.)]TJ T* 0.1287 Tw [(U)35.9(nfor)-7.9(tunately)84.9(, when I tested these scripts on my L)-12(AN, I)]TJ 35.1284 61.9244 TD 0.342 Tw [(disco)15.8(v)5.9(er)9.7(ed an anno)11.9(ying one-to-)]TJ 0 -1.0909 TD 0.0199 Tc 0.8921 Tw [(two second delay betw)5.9(een)]TJ T* -0.0001 Tc 0.1546 Tw [(speaking into the micr)5.8(ophone at)]TJ T* 0.0356 Tw (one end and hearing the sound at)Tj T* 0.0168 Tc 0.3581 Tw [(the other)59.7(. Although the MP3)]TJ T* -0.0001 Tc 0.0517 Tw (encoder and decoder can keep up)Tj T* 0.1609 Tw [(with the data, ther)9.7(e seems to be)]TJ T* 0.0098 Tw [(some latency)84.9(. P)53.9(erhaps the encoder)]TJ T* 0.0125 Tc 0.3624 Tw [(needs to accumulate a cer)-7.9(tain)]TJ T* -0.0001 Tc 0.2891 Tw [(amount of buffer)9.7(ed sound data)]TJ T* -0.0075 Tw [(befor)9.7(e it will encode it, or perhaps)]TJ T* 0.092 Tw [(I just need faster computers. )44.9(The)]TJ T* 0.1426 Tw [(main testing platform was a pair)]TJ T* -0.0024 Tw [(of 300 MHz P)53.9(entium II desktops.)]TJ T* 0.1842 Tw [(I)12(n)0( any case, I couldn)69.8()79.9(t)0( eliminate)]TJ T* 0.3576 Tw [(this delay b)5.8(y)0( playing with the)]TJ T* 0.338 Tw [(script)17.8()79.9(s transmission buffer)59.7(, and)]TJ T* 0.0682 Tw (the delay is long enough to make)Tj T* 0.0199 Tc 0.745 Tw [(a normal conv)5.8(ersation v)5.8(e)0.1(r)-17.9(y)]TJ T* -0.0001 Tc 0 Tw (difficult.)Tj 0 -2.2727 TD 0.37 Tw [(N)29.8(e)0(v)5.9(e)0.1(r)-7.8(theless, the pr)5.8(ogram does)]TJ 0 -1.0909 TD -0.0051 Tc 0.2468 Tw [(allo)11.9(w v)5.8(oice transmissions in r)9.7(eal)]TJ T* 0.0149 Tc 1.0521 Tw [(time acr)5.8(oss slo)11.9(w networ)5.8(k)]TJ T* 1.2689 Tw (connections. Although the)Tj T* -0.0051 Tc 0.0476 Tw [(nominal MP3 bitstr)9.7(eam rate is 32)]TJ T* -0.0116 Tw (kilobits, in practice less bandwidth)Tj T* 0.3253 Tw [(is r)9.7(equir)9.7(ed because of the long)]TJ T* 0.2724 Tw (pauses in speech. I expect it to)Tj T* 0.0149 Tc 0.3745 Tw [(wor)5.8(k betw)5.8(een two moderately)]TJ T* 0.7878 Tw [(w)5.9(ell-connected sites on the)]TJ T* 0.8308 Tw [(I)12(nternet, and perhaps ev)5.8(en)]TJ T* -0.0051 Tc 0.153 Tw [(betw)5.8(een hosts connected b)5.8(y)-0.1( 56K)]TJ T* 0.0149 Tc 0.5409 Tw [(modems. Although it doesn)69.8()79.9(t)]TJ T* -0.0051 Tc 0.2274 Tw (make much of an IP telephone,)Tj T* 0.2547 Tw [(y)5.8(ou could use the system as an)]TJ T* 0.0999 Tw [(inter)5.8(com, a bab)5.8(y monitor)59.7(, or just)]TJ T* 0.2621 Tw [(surprise y)5.8(our wor)5.8(k)0( associates b)5.8(y)]TJ -9.7648 -1.0909 TD 0.025 Tw [(suddenly speaking to them fr)5.7(om an idle computer!)]TJ /F8 1 Tf 12 0 0 12 342 318.0775 Tm 0 Tc 0 Tw (S)Tj 10.44 0 0 10.44 348.2868 318.0775 Tm 0.0228 Tc [(UMMAR)44.7(Y)]TJ /F1 1 Tf 11 0 0 11 342 291.0775 Tm -0.0001 Tc 0.0091 Tw [(W)9.7(ith a little ingenuity and a dab of P)53.9(erl, y)5.8(ou can turn y)5.8(our)]TJ T* 0.0199 Tc 0.3586 Tw [(desktop into an IP telephony platform. G)5.9(etting IP)]TJ T* -0.0001 Tc 0.0807 Tw [(telephony to wor)5.8(k acr)5.8(oss fast networ)5.8(k connections is easy)84.9(,)]TJ T* -0.0109 Tw [(but wor)5.8(king with limited bandwidth is mor)9.7(e of a challenge.)]TJ 0 -2.3636 TD 0.0427 Tw [(These scripts ar)9.7(e the mer)9.7(e beginnings of a r)9.7(eal application.)]TJ 0 -1.0909 TD 0.2228 Tw (They need all the bells and whistles, such as a built-in)Tj T* 0.0652 Tw [(telephone dir)9.7(ector)-17.9(y)84.9(,)0( an auto-dial function, a way to scr)9.7(een)]TJ T* 0.1936 Tw (calls, and cute little sound effects for the dialtone, busy)Tj T* 0.1629 Tw [(signal and ringing. F)35.8(eel fr)9.7(ee to take the sour)5.8(ce and star)-7.9(t)]TJ T* 0.025 Tw [(doing a little bit of y)5.8(our o)11.9(wn conv)5.8(ergence!)]TJ /F10 1 Tf 0 -2.1818 TD 0.0278 Tw (_ _END_ _)Tj /F5 1 Tf T* 0.025 Tw [(L)12(incoln D. S)23.9(tein wr)5.8(ote C)11.9(GI.pm.)]TJ /F1 1 Tf 12 0 0 12 63 90.3543 Tm 0 Tc 0 Tw [(18)-1100(F)]TJ 10.44 0 0 10.44 94.2795 90.3543 Tm -0.0001 Tc (ALL)Tj 12 0 0 12 115.6277 90.3543 Tm 0 Tc (2000)Tj /F3 1 Tf 30.9897 0.0003 TD -0.0002 Tc 0.0255 Tw [(The P)47.6(erl J)35.7(our)-8(nal #19)]TJ ET 0 0.03 0.3 0 k 63 810 372.41 -443.17 re 587.395 90.357 m f* BT /F8 1 Tf 14 0 0 14 70 793.1747 Tm 0 0 0 1 k (Listing 5.)Tj /F11 1 Tf 12 0 0 12 70 777.1747 Tm 0 Tw (mp3_recv.pl)Tj /F8 1 Tf 14 0 0 14 153.1059 777.1747 Tm -0.0001 Tc 0.0255 Tw (accepts MP3-encoded telephone calls.)Tj /F2 1 Tf 7 0 0 7 74.6189 755.3747 Tm -0.0002 Tc 0.06 Tw [(0 #!/usr/bin/perl)]TJ 0 -1.1143 TD [(1 # file: mp3_recv.pl)]TJ 0 -2.2286 TD [(2 use strict;)]TJ 0 -1.1143 TD [(3 use DSP;)]TJ T* [(4 use IO::Socket;)]TJ 0 -2.2285 TD [(5 use constant BUFSIZE => 1024;)]TJ 0 -1.1143 TD [(6 $SIG{CHLD} = sub { wait; };)]TJ 0 -2.2286 TD [(7 my $dest = shift || 'prego';)]TJ 0 -1.1143 TD [(8 my $port = shift || 2007;)]TJ T* -0.0001 Tc [(9 my $listen = IO::Socket::INET->new\(LocalPort => $port,)]TJ T* [(10 Listen => 5,)]TJ T* [(11 Reuse)-625.1(=> 1\) || die "Can't listen: $!";)]TJ 0 -2.2286 TD -0.0002 Tc [(12 while \(1\) {)]TJ 0 -1.1143 TD [(13 warn "waiting for a connection...\\n";)]TJ T* [(14 my $sock = $listen->accept;)]TJ T* -0.0001 Tc [(15 warn "accepting connection from ", $sock->peerhost,"\\n";)]TJ T* -0.0002 Tc [(16 unless \(my $dsp = new DSP\) {)]TJ T* -0.0001 Tc [(17 warn "DSP unavailable. Hanging up.\\n";)]TJ T* -0.0002 Tc [(18 close $sock;)]TJ T* [(19 } else {)]TJ T* [(20 handle_connection\($sock, $dsp\);)]TJ T* 0.0598 Tc 0 Tw [(2)60(1)60( })]TJ T* -0.0002 Tc 0.06 Tw [(22 })]TJ 0 -2.2286 TD [(23 sub handle_connection {)]TJ 0 -1.1143 TD [(24 my \($sock, $dsp\) = @_;)]TJ T* [(25 my $child = fork\(\);)]TJ T* -0.0001 Tc [(26 die "Can't fork: $!" unless defined $child;)]TJ T* -0.0002 Tc [(27 my $data;)]TJ T* [(28 if \($child\) { # parent process)]TJ T* [(29 eval {)]TJ T* [(30 local $SIG{INT} = sub {die};)]TJ T* -0.0001 Tc [(31 my $uncompress = $dsp->uncompress;)]TJ T* [(32 print $uncompress $data while sysread\($sock, $data, BUFSIZE\);)]TJ T* 0.0598 Tc 0 Tw [(3)60(3)60( })60(;)]TJ T* -0.0002 Tc 0.06 Tw [(34 close $sock;)]TJ T* [(35 kill TERM => $child;)]TJ T* [(36 } else {)]TJ T* [(37 close $listen;)]TJ T* [(38 my $compress = $dsp->compress;)]TJ T* -0.0001 Tc [(39 print $sock $data while sysread\($compress, $data, BUFSIZE\);)]TJ T* -0.0002 Tc [(40 exit;)]TJ T* 0.0598 Tc 0 Tw [(4)60(1)60( })]TJ T* -0.0002 Tc 0.06 Tw [(42 })]TJ ET Q 0 0 0 0 k /GS2 gs 1 i 37 874 191 -12 re 101.071 388.775 m f* BT /F2 1 Tf 8 0 0 8 39 864 Tm /Cs9 cs 1 scn -0.0004 Tc -0.0019 Tw (TPJ#19/9.26 9/27/00 10:35 AM Page 18)Tj ET 1 G 0 J 0 j 0.5 w 10 M []0 d 36 873 m 36 849 l 0 837 m 24 837 l 621 873 m 621 849 l 657 837 m 633 837 l 36 36 m 36 60 l 0 72 m 24 72 l 621 36 m 621 60 l 657 72 m 633 72 l S /Cs9 CS 1 SCN 0.25 w 36 873 m 36 849 l 0 837 m 24 837 l 621 873 m 621 849 l 657 837 m 633 837 l 36 36 m 36 60 l 0 72 m 24 72 l 621 36 m 621 60 l 657 72 m 633 72 l S 1 G 0.5 w 304.5 861 m 352.5 861 l 304.5 48 m 352.5 48 l 12 478.5 m 12 430.5 l 645 478.5 m 645 430.5 l 328.5 873 m 328.5 849 l 328.5 60 m 328.5 36 l 0 454.5 m 24 454.5 l 633 454.5 m 657 454.5 l 328.5 861 m 334.5 861 l 334.5 857.688 331.812 855 328.5 855 c 325.188 855 322.5 857.688 322.5 861 c 322.5 864.312 325.188 867 328.5 867 c 331.812 867 334.5 864.312 334.5 861 c 328.5 48 m 334.5 48 l 334.5 44.688 331.812 42 328.5 42 c 325.188 42 322.5 44.688 322.5 48 c 322.5 51.312 325.188 54 328.5 54 c 331.812 54 334.5 51.312 334.5 48 c 12 454.5 m 18 454.5 l 18 451.188 15.312 448.5 12 448.5 c 8.688 448.5 6 451.188 6 454.5 c 6 457.812 8.688 460.5 12 460.5 c 15.312 460.5 18 457.812 18 454.5 c 645 454.5 m 651 454.5 l 651 451.188 648.312 448.5 645 448.5 c 641.688 448.5 639 451.188 639 454.5 c 639 457.812 641.688 460.5 645 460.5 c 648.312 460.5 651 457.812 651 454.5 c S /Cs9 CS 1 SCN 0.25 w 304.5 861 m 352.5 861 l 304.5 48 m 352.5 48 l 12 478.5 m 12 430.5 l 645 478.5 m 645 430.5 l 328.5 873 m 328.5 849 l 328.5 60 m 328.5 36 l 0 454.5 m 24 454.5 l 633 454.5 m 657 454.5 l 328.5 861 m 334.5 861 l 334.5 857.688 331.812 855 328.5 855 c 325.188 855 322.5 857.688 322.5 861 c 322.5 864.312 325.188 867 328.5 867 c 331.812 867 334.5 864.312 334.5 861 c 328.5 48 m 334.5 48 l 334.5 44.688 331.812 42 328.5 42 c 325.188 42 322.5 44.688 322.5 48 c 322.5 51.312 325.188 54 328.5 54 c 331.812 54 334.5 51.312 334.5 48 c 12 454.5 m 18 454.5 l 18 451.188 15.312 448.5 12 448.5 c 8.688 448.5 6 451.188 6 454.5 c 6 457.812 8.688 460.5 12 460.5 c 15.312 460.5 18 457.812 18 454.5 c 645 454.5 m 651 454.5 l 651 451.188 648.312 448.5 645 448.5 c 641.688 448.5 639 451.188 639 454.5 c 639 457.812 641.688 460.5 645 460.5 c 648.312 460.5 651 457.812 651 454.5 c S endstream endobj 53 0 obj << /Type /Page /Parent 492 0 R /Resources 54 0 R /Contents 55 0 R /Thumb 357 0 R /MediaBox [ 0 0 684 873 ] /CropBox [ 0 0 684 873 ] /Rotate 0 >> endobj 54 0 obj << /ProcSet [ /PDF /Text ] /Font << /F1 515 0 R /F2 518 0 R /F3 261 0 R /F7 267 0 R /F8 268 0 R /F9 269 0 R /F11 271 0 R >> /ExtGState << /GS1 523 0 R /GS2 521 0 R >> /ColorSpace << /Cs9 520 0 R /Cs10 264 0 R >> >> endobj 55 0 obj << /Length 15801 >> stream 1 g /GS1 gs 0 873 m 0 873 l f q 1 i 27 846 603 -783 re 0 873 m W n 0 873 684 -873 re W n BT /F1 1 Tf 29.09 0 0 29.09 62.2934 726.0442 Tm 0 0 0 1 k /GS2 gs 0 Tc 0 Tw (P)Tj 11 0 0 11 78.25 738.0442 Tm -0.0001 Tc -0.012 Tw [(erl 5.7.0 shipped with an obscur)9.7(e and bar)9.7(ely announced)]TJ 0 -1.0909 TD 0.1841 Tw [(ne)-5.9(w featur)9.7(e )]TJ /F2 1 Tf 9 0 0 9 149.9195 726.0442 Tm -0.0002 Tc 0 Tw (microperl)Tj /F1 1 Tf 11 0 0 11 198.5076 726.0442 Tm 0 Tc (. )Tj /F2 1 Tf 9 0 0 9 206.0326 726.0442 Tm -0.0002 Tc (microperl)Tj /F1 1 Tf 11 0 0 11 259.3957 726.0442 Tm -0.0001 Tc 0.1841 Tw (is something)Tj -17.8542 -1.0909 TD 0.1284 Tw [(I)49.7(v)5.9(e)0( wor)5.8(ked on for quite a fe)-5.9(w months no)11.9(w and, while I)]TJ T* 0.0171 Tw [(expect it to be useful to a tiny fraction of P)53.9(erl users, I)99.8(d like)]TJ T* 0.025 Tw [(to explain why it)17.7()79.9(s)0( included and what)17.7()79.9(s)0( so cool about it.)]TJ 0 -2.1818 TD 0.0297 Tw [(F)34(irst, though, what is it? )14.9(W)77.8(ell, when y)5.8(ou compile a v)5.8(ersion)]TJ 0 -1.0909 TD 0.1444 Tw [(of P)53.9(erl, the first thing that gets built is a pr)5.8(ogram called)]TJ /F2 1 Tf 9 0 0 9 63 642.0442 Tm -0.0002 Tc 0 Tw (miniperl)Tj /F1 1 Tf 11 0 0 11 106.1894 642.0442 Tm 0 Tc (. )Tj /F2 1 Tf 9 0 0 9 111.7575 642.0442 Tm -0.0002 Tc (miniperl)Tj /F1 1 Tf 11 0 0 11 157.7651 642.0442 Tm -0.0001 Tc 0.0062 Tw [(is mor)9.7(e)0( or less just like y)5.8(our or)13.8(dinar)-17.9(y)]TJ /F2 1 Tf 9 0 0 9 63 630.0442 Tm -0.0002 Tc 0 Tw (perl)Tj /F1 1 Tf 11 0 0 11 84.5947 630.0442 Tm -0.0001 Tc 0.3285 Tw [(, ex)11.9(cept that it doesn)69.8()79.9(t)0( hav)5.8(e the DynaLoader XS)]TJ -1.9632 -1.0909 TD 0.0298 Tw (module linked in. An XS module is a C extension module,)Tj T* 0.1284 Tw [(allo)11.9(wing P)53.9(erl to r)-7.9(un C code, and it)17.8()79.9(s)0( usually written in a)]TJ T* 0.025 Tw (special glue language, XS, rather than in C. )Tj 0 -2.1818 TD 0.2104 Tw [(What makes DynaLoader special is that it)17.7()79.9(s)0( the module)]TJ 0 -1.0909 TD -0.0033 Tw [(which allo)11.9(ws P)53.9(erl to load other XS modules dynamically )]TJ T* 0.2516 Tw [(without that, y)5.8(ou can)69.8()79.9(t)0( use modules like IO::F)33.9(ile, y)5.8(our)]TJ T* 0.0199 Tc 0.6769 Tw [(DBM database librar)-17.8(y \(DB_F)33.9(ile, SDBM_F)33.9(ile or)]TJ T* -0.0001 Tc 0.2716 Tw [(equiv)5.8(alent\) or any of the modules on CP)39.7(AN with XS)]TJ T* 0 Tw (components.)Tj /F2 1 Tf 9 0 0 9 63 486.0442 Tm -0.0002 Tc (miniperl)Tj /F1 1 Tf 11 0 0 11 106.1894 486.0442 Tm -0.0001 Tc 0.3651 Tw [(, ho)11.9(w)5.8(e)0(v)5.8(e)0.1(r)59.7(,)0( has just enough brains to r)-7.9(un a)]TJ -3.9263 -1.0909 TD 0.0115 Tc 0.3634 Tw [(pr)5.7(ogram which translates the XS language in which)]TJ T* -0.0001 Tc 0.0567 Tw [(DynaLoader is written into a C pr)5.8(ogram; once w)5.8(e)29.7()49.8(v)5.9(e done)]TJ T* 0.0193 Tw [(that, w)5.8(e)0( can compile DynaLoader and link it into )]TJ /F2 1 Tf 9 0 0 9 278.334 450.0442 Tm -0.0002 Tc 0 Tw (perl)Tj /F1 1 Tf 11 0 0 11 299.9288 450.0442 Tm 0 Tc 0.0193 Tw [(. I)12(n)]TJ -21.539 -1.0909 TD -0.0001 Tc 0.3186 Tw [(effect, w)5.8(e)29.7()69.9(r)9.9(e building )]TJ /F2 1 Tf 9 0 0 9 164.0846 438.0442 Tm -0.0002 Tc 0 Tw (perl)Tj /F1 1 Tf 11 0 0 11 191.9342 438.0442 Tm -0.0001 Tc 0.3186 Tw (in stages: first without XS)Tj -11.7213 -1.0909 TD 0.1087 Tw [(suppor)-7.9(t, and then using that first effor)-7.9(t to help build the)]TJ T* 0.025 Tw [(next stage with XS suppor)-7.9(t. )]TJ /F8 1 Tf 12 0 0 12 63 388.0442 Tm 0 Tc 0 Tw (B)Tj 10.44 0 0 10.44 70.7634 388.0441 Tm 0.0228 Tc [(OO)41.8(T)11.9(STRAPP)11.8(ING)]TJ /F1 1 Tf 11 0 0 11 63 362.0442 Tm -0.0001 Tc 0.0337 Tw [(This pr)5.8(ocess star)-7.9(ting small and using the r)9.7(esult to build)]TJ T* 0.2208 Tw [(up to the next stage is called bootstrapping)17.7(, since)]TJ T* 0.0491 Tw [(y)5.8(o)0.1(u)49.7()49.8(v)5.9(e)0( star)-7.9(ted fr)5.8(om the gr)5.8(ound and ar)9.7(e pulling y)5.8(ourself up)]TJ T* 0.0969 Tw [(b)5.8(y)-0.1( y)5.8(our o)11.9(wn bootstraps. I)11.9(n)0( fact, it)17.8()79.9(s)0( exactly what happens)]TJ T* 0.0322 Tw [(when y)5.8(ou turn up y)5.8(our computer and it boots up)49.8( the)]TJ T* -0.0174 Tw [(raw cir)5.8(cuitr)-17.9(y kno)11.9(ws enough to activ)5.8(ate the BIOS, the BIOS)]TJ T* 0.0672 Tw [(kno)11.9(ws enough to find and r)-7.9(un the first block on the disk,)]TJ T* -0.0177 Tw [(which is a pr)5.8(ogram which in turn kno)11.9(ws enough to find the)]TJ T* 0.025 Tw [(boot loader)59.7(, which finds and r)-7.9(uns the operating system.)]TJ 0 -2.1818 TD 0.1363 Tw (The idea behind )Tj /F2 1 Tf 9 0 0 9 139.961 242.0442 Tm -0.0002 Tc 0 Tw (microperl)Tj /F1 1 Tf 11 0 0 11 192.7981 242.0442 Tm -0.0001 Tc 0.1363 Tw (is to take the bootstrapping)Tj -11.7998 -1.0909 TD 0.2207 Tw [(natur)9.7(e of )]TJ /F2 1 Tf 9 0 0 9 109.009 230.0442 Tm -0.0002 Tc 0 Tw (miniperl)Tj /F1 1 Tf 11 0 0 11 157.3763 230.0442 Tm (and )Tj /F2 1 Tf 9 0 0 9 178.3667 230.0442 Tm (perl)Tj /F1 1 Tf 11 0 0 11 205.1393 230.0442 Tm -0.0001 Tc 0.2207 Tw (to its logical conclusion.)Tj /F2 1 Tf 9 0 0 9 63 218.0442 Tm -0.0002 Tc 0 Tw (microperl)Tj /F1 1 Tf 11 0 0 11 114.9846 218.0442 Tm -0.0001 Tc 0.0588 Tw [(is a v)5.8(e)0.1(r)-17.9(y)84.9(, v)5.8(e)0.1(r)-17.9(y)0( simple build of )]TJ /F2 1 Tf 9 0 0 9 245.2875 218.0442 Tm -0.0002 Tc 0 Tw (perl)Tj /F1 1 Tf 11 0 0 11 270.2787 218.0442 Tm -0.0001 Tc 0.0588 Tw (which will)Tj -18.8435 -1.0909 TD 0.025 Tw (hopefully one day be used to build )Tj /F2 1 Tf 9 0 0 9 214.494 206.0442 Tm -0.0002 Tc 0 Tw (miniperl)Tj /F1 1 Tf 11 0 0 11 257.6835 206.0442 Tm 0 Tc (.)Tj -17.6985 -2.1818 TD -0.0001 Tc 0.0752 Tw [(A)6(t)0( the moment, befor)9.7(e )]TJ /F2 1 Tf 9 0 0 9 166.0614 182.0442 Tm -0.0002 Tc 0 Tw (miniperl)Tj /F1 1 Tf 11 0 0 11 212.8275 182.0442 Tm -0.0001 Tc 0.0752 Tw [(can be built, a pr)5.8(ogram)]TJ -13.6207 -1.0909 TD 0 Tw (called )Tj /F2 1 Tf 9 0 0 9 91.7954 170.0442 Tm -0.0002 Tc (Configure)Tj /F1 1 Tf 11 0 0 11 144.9552 170.0442 Tm -0.0001 Tc 0.1656 Tw [(must be r)-7.9(un. )44.8(T)119.9(o)0( make sur)9.7(e that )]TJ /F2 1 Tf 9 0 0 9 293.4053 170.0442 Tm -0.0002 Tc 0 Tw (perl)Tj /F1 1 Tf 11 0 0 11 63 158.0442 Tm -0.0001 Tc 0.1528 Tw [(builds pr)5.8(operly on the plethora of differ)9.7(ent computers it)]TJ T* 0 Tw [(suppor)-7.9(ts, )]TJ /F2 1 Tf 9 0 0 9 106.321 146.0442 Tm -0.0002 Tc (Configure)Tj /F1 1 Tf 11 0 0 11 159.1367 146.0442 Tm -0.0001 Tc 0.1343 Tw [(per)-7.9(forms hundr)9.7(eds of tests to wor)5.8(k)]TJ -8.7397 -1.0909 TD 0.2906 Tw [(out the characteristics of the curr)9.7(ent system which)]TJ T* 0.3695 Tw [(character set is being used, ho)11.9(w large the v)5.8(arious C)]TJ 25.3636 56.0939 TD 0.1054 Tw [(datatypes ar)9.7(e on the machine, what libraries ar)9.7(e av)5.8(ailable,)]TJ 0 -1.0909 TD 0.025 Tw [(ho)11.9(w to use the C compiler)59.7(, and so on.)]TJ 0 -2.1818 TD 0.0801 Tw [(The pr)5.8(oblem with )]TJ /F2 1 Tf 9 0 0 9 425.0281 703.0776 Tm -0.0002 Tc 0 Tw (Configure)Tj /F1 1 Tf 11 0 0 11 477.2477 703.0776 Tm -0.0001 Tc 0.0802 Tw [(is that y)5.8(ou need to make a)]TJ -12.2952 -1.0909 TD 0.3055 Tw [(fe)-5.9(w assumptions about the system in or)13.8(der to r)-7.9(un it.)]TJ /F2 1 Tf 9 0 0 9 342 679.0776 Tm -0.0002 Tc 0 Tw (Configure)Tj /F1 1 Tf 11 0 0 11 394.125 679.0776 Tm -0.0001 Tc 0.0716 Tw [(is written in Bourne shell, so y)5.8(ou need a copy)]TJ -4.7386 -8.7273 TD -0.0002 Tc 0 Tw (of )Tj /F2 1 Tf 9 0 0 9 354.226 583.0776 Tm -0.0003 Tc (sh)Tj /F1 1 Tf 11 0 0 11 368.7175 583.0776 Tm -0.0001 Tc 0.0858 Tw [(ar)5.8(ound. I)23.9(t)0( also uses )]TJ /F2 1 Tf 9 0 0 9 456.5943 583.0776 Tm -0.0002 Tc 0 Tw (grep)Tj /F1 1 Tf 11 0 0 11 478.189 583.0776 Tm 0 Tc (, )Tj /F2 1 Tf 9 0 0 9 484.6331 583.0776 Tm -0.0002 Tc (awk)Tj /F1 1 Tf 11 0 0 11 500.8291 583.0776 Tm 0 Tc (, )Tj /F2 1 Tf 9 0 0 9 507.2732 583.0776 Tm -0.0002 Tc (sed)Tj /F1 1 Tf 11 0 0 11 527.1633 583.0776 Tm -0.0001 Tc 0.0858 Tw (and a bunch of)Tj -16.833 -1.0909 TD -0.0049 Tw [(other U)35.8(nix utilities to pr)5.8(obe the system. O)5.8(f)0( course, this will)]TJ T* 0.0368 Tw [(only wor)5.8(k on something that smells like U)35.8(nix. I)23.8(t)0( would be)]TJ T* -0.0182 Tw (a lot better if )Tj /F2 1 Tf 9 0 0 9 398.7011 547.0776 Tm -0.0002 Tc 0 Tw (Configure)Tj /F1 1 Tf 11 0 0 11 449.8388 547.0776 Tm -0.0001 Tc -0.0182 Tw [(was written in something por)-7.9(table)]TJ -9.8035 -1.0909 TD 0.0441 Tw [( something like P)53.9(erl, for instance. O)5.8(f)0( course, y)5.8(o)0.1(u)49.7()99.9(d need)]TJ T* 0.0102 Tw [(a P)53.9(erl interpr)9.7(eter to be able to r)-7.9(un it, and since the purpose)]TJ T* 0.2005 Tw [(of the ex)11.9(er)5.8(cise is to build a P)53.9(erl interpr)9.7(eter)59.7(, w)5.8(e)29.7()49.8(v)5.9(e hit a)]TJ T* 0.025 Tw [(chicken-and-egg pr)5.8(oblem.)]TJ 0 -2.1818 TD 0.0033 Tw [(This is wher)9.7(e )]TJ /F2 1 Tf 9 0 0 9 401.2135 475.0776 Tm -0.0002 Tc 0 Tw (microperl)Tj /F1 1 Tf 11 0 0 11 452.5873 475.0776 Tm -0.0001 Tc 0.0033 Tw [(comes in. )44.9(The aim of )]TJ /F2 1 Tf 9 0 0 9 545.4121 475.0776 Tm -0.0002 Tc 0 Tw (microperl)Tj /F1 1 Tf 11 0 0 11 342 463.0776 Tm -0.0001 Tc 0.1172 Tw [(is to be a P)53.9(erl interpr)9.7(eter which can be built on as many)]TJ 0 -1.0909 TD 0.2644 Tw [(machines as possible, ev)5.8(en small operating systems like)]TJ T* 0.2015 Tw [(W)9.7(inCE and P)41.9(almOS, befor)9.7(e any pr)5.8(obing of the system)]TJ T* 0.1386 Tw [(occurs. S)11.9(imply unpack y)5.8(our P)53.9(erl distribution, compile it,)]TJ T* 0.025 Tw [(and go)15.8(. I)11.9(n)0( fact, let)17.7()79.9(s)0( do that.)]TJ /F8 1 Tf 12 0 0 12 342 389.0776 Tm 0 Tc 0 Tw (B)Tj 10.44 0 0 10.44 349.5773 389.0775 Tm 0.0228 Tc (UILDING)Tj 12 0 0 12 399.9398 389.0775 Tm 0 Tc (M)Tj 10.44 0 0 10.44 411.2306 389.0775 Tm 0.0227 Tc [(ICR)35.6(O)-0.1(P)11.6(ERL)]TJ /F1 1 Tf 11 0 0 11 342 363.0776 Tm 0.0199 Tc 0.5593 Tw [(U)35.9(npack P)53.9(erl 5.7.0, and change to the dir)9.8(ector)-17.9(y)]TJ /F2 1 Tf 9 0 0 9 342 351.0775 Tm -0.0002 Tc 0 Tw (perl5.7.0/)Tj /F1 1 Tf 11 0 0 11 395.9868 351.0775 Tm -0.0001 Tc 0.025 Tw [(. N)29.7(o)12(w issue this command:)]TJ /F2 1 Tf 7 0 0 7 360 331.0776 Tm -0.0003 Tc 0 Tw (% )Tj /F11 1 Tf 1.2597 0 TD -0.0002 Tc 0.06 Tw (make -f Makefile.micro)Tj /F1 1 Tf 11 0 0 11 342 307.0776 Tm -0.0001 Tc 0.025 Tw [(I)5.9(f)0( all goes w)5.8(ell, y)5.8(ou should see something like this happen:)]TJ /F2 1 Tf 7 0 0 7 349.4878 287.0776 Tm -0.1251 Tc 0.0599 Tw [(cc -c -o uav.o -DPERL_CORE -DPERL_MICRO av.c)]TJ 0 -1.1429 TD [(cc -c -o udeb.o -DPERL_CORE -DPERL_MICRO deb.c)]TJ T* [(cc -c -o udoio.o -DPERL_CORE -DPERL_MICRO doio.c)]TJ T* [(cc -c -o udoop.o -DPERL_CORE -DPERL_MICRO doop.c)]TJ T* -0.1252 Tc ([... time passes ...])Tj T* -0.1251 Tc [(cc -c -o uutil.o -DPERL_CORE -DPERL_MICRO util.c)]TJ T* [(cc -c -o uperlapi.o -DPERL_CORE -DPERL_MICRO perlapi.c)]TJ T* [(cc -o microperl uav.o udeb.o udoio.o udoop.o udump.o uglobals.o ugv.o )]TJ T* (uhv.o umg.o uperlmain.o uop.o uperl.o uperlio.o uperly.o upp.o upp_ctl.o )Tj T* [(upp_hot.o upp_sys.o uregcomp.o uregexec.o urun.o uscope.o usv.o utaint.o )]TJ T* [(utoke.o uuniversal.o uutf8.o uutil.o uperlapi.o -lm)]TJ /F1 1 Tf 11 0 0 11 342 183.0775 Tm -0.0001 Tc -0.0192 Tw [(Y)93.9(ou might see a fe)-5.9(w warnings, which ar)9.7(e pr)5.8(obably harmless.)]TJ 0 -1.0909 TD 0.2871 Tw [(I)5.9(f)0( y)5.8(ou don)69.8()79.9(t)0( get past the first file, check that y)5.8(our C)]TJ T* 0.2235 Tw [(compiler is av)5.8(ailable and r)9.7(eplace the line )]TJ /F2 1 Tf 9 0 0 9 532.7468 159.0775 Tm -0.0002 Tc 0.5364 Tw (CC = cc)Tj /F1 1 Tf 11 0 0 11 585.4008 159.0775 Tm 0 Tw (in)Tj /F2 1 Tf 9 0 0 9 342 147.0775 Tm (Makefile.micro)Tj /F1 1 Tf 11 0 0 11 421.2907 147.0775 Tm -0.0001 Tc (with )Tj /F2 1 Tf 9 0 0 9 444.1237 147.0775 Tm -0.0002 Tc 0.2093 Tw [(CC = /path/to/your/cc)]TJ /F1 1 Tf 11 0 0 11 561.2621 147.0775 Tm -0.0059 Tc 0.093 Tw [(.)-5.9( If)-5.8( yo)-5.7(u)]TJ -19.9329 -1.0909 TD -0.0001 Tc 0.1657 Tw [(use a separate linker)59.8(, alter the line )]TJ /F2 1 Tf 9 0 0 9 500.0588 135.0775 Tm -0.0002 Tc 0.3977 Tw (LD = $\(CC\))Tj /F1 1 Tf 11 0 0 11 565.7756 135.0775 Tm -0.0001 Tc 0.1657 Tw (to, for)Tj -20.3432 -1.0909 TD 0 Tw (example, )Tj /F2 1 Tf 9 0 0 9 382.7635 123.0775 Tm -0.0002 Tc 0.0902 Tw (LD = ld)Tj /F1 1 Tf 11 0 0 11 422.1764 123.0775 Tm -0.0001 Tc 0.0376 Tw [(. E)29.7(v)5.9(entually)84.9(, y)5.8(ou should end up with an)]TJ 12 0 0 12 517.3723 90.3543 Tm 0 Tc 0 Tw (F)Tj 10.44 0 0 10.44 523.4518 90.3543 Tm -0.0001 Tc (ALL)Tj 12 0 0 12 544.7999 90.3543 Tm 0 Tc 0.025 Tw [(2000 19)]TJ /F3 1 Tf -40.15 0 TD -0.0002 Tc 0.0255 Tw [(The P)47.6(erl J)35.7(our)-8(nal #19)]TJ ET 0 0 0 0 k 63 798 531 -21.17 re 162.892 90.354 m f* BT /F8 1 Tf 16 0 0 16 63 786.4766 Tm 0 0 0 1 k 0 Tc 0 Tw (M)Tj 13.92 0 0 13.92 77.7344 786.4766 Tm -0.0003 Tc [(ICR)35.6(OP)11.7(ERL)]TJ /F7 1 Tf 16 0 0 16 495.6062 786.4766 Tm -0.0001 Tc 0.0278 Tw [(Simon Coz)19.7(ens)]TJ ET /Cs10 CS 1 SCN 0 J 0 j 6 w 10 M []0 d 63 807 m 207 807 l S BT /F9 1 Tf 14 0 0 14 352.6342 645.6444 Tm -0.0102 Tc (The idea behind)Tj /F11 1 Tf 11 0 0 11 461.0331 645.6444 Tm -0.0101 Tc 0 Tw (microperl)Tj /F9 1 Tf 14 0 0 14 524.1591 645.6444 Tm -0.0102 Tc 0.0278 Tw [(is to tak)29.6(e)]TJ -12.3691 -1.1429 TD [(the bootstra)9.6(pping natur)19.6(e of )]TJ /F11 1 Tf 11 0 0 11 532.9912 629.6444 Tm 0 Tw (miniperl)Tj /F9 1 Tf 14 0 0 14 362.8423 613.6444 Tm (and )Tj /F11 1 Tf 11 0 0 11 390.3093 613.6444 Tm (perl)Tj /F9 1 Tf 14 0 0 14 420.4018 613.6444 Tm -0.0101 Tc 0.0278 Tw [(to its lo)14.8(gical conclusion.)]TJ ET 0 0 0 1 K 2 w 342 666.59 m 594 666.59 l S 0.667 w 342 663.92 m 594 663.92 l 342 604.86 m 594 604.86 l S 2 w 342 602.19 m 594 602.19 l S Q 0 0 0 0 k 1 i 37 874 191 -12 re 573.017 613.644 m f* BT /F2 1 Tf 8 0 0 8 39 864 Tm /Cs9 cs 1 scn -0.0004 Tc -0.0019 Tw (TPJ#19/9.26 9/27/00 10:35 AM Page 19)Tj ET 1 G 0 J 0 j 0.5 w 10 M []0 d 36 873 m 36 849 l 0 837 m 24 837 l 621 873 m 621 849 l 657 837 m 633 837 l 36 36 m 36 60 l 0 72 m 24 72 l 621 36 m 621 60 l 657 72 m 633 72 l S /Cs9 CS 1 SCN 0.25 w 36 873 m 36 849 l 0 837 m 24 837 l 621 873 m 621 849 l 657 837 m 633 837 l 36 36 m 36 60 l 0 72 m 24 72 l 621 36 m 621 60 l 657 72 m 633 72 l S 1 G 0.5 w 304.5 861 m 352.5 861 l 304.5 48 m 352.5 48 l 12 478.5 m 12 430.5 l 645 478.5 m 645 430.5 l 328.5 873 m 328.5 849 l 328.5 60 m 328.5 36 l 0 454.5 m 24 454.5 l 633 454.5 m 657 454.5 l 328.5 861 m 334.5 861 l 334.5 857.688 331.812 855 328.5 855 c 325.188 855 322.5 857.688 322.5 861 c 322.5 864.312 325.188 867 328.5 867 c 331.812 867 334.5 864.312 334.5 861 c 328.5 48 m 334.5 48 l 334.5 44.688 331.812 42 328.5 42 c 325.188 42 322.5 44.688 322.5 48 c 322.5 51.312 325.188 54 328.5 54 c 331.812 54 334.5 51.312 334.5 48 c 12 454.5 m 18 454.5 l 18 451.188 15.312 448.5 12 448.5 c 8.688 448.5 6 451.188 6 454.5 c 6 457.812 8.688 460.5 12 460.5 c 15.312 460.5 18 457.812 18 454.5 c 645 454.5 m 651 454.5 l 651 451.188 648.312 448.5 645 448.5 c 641.688 448.5 639 451.188 639 454.5 c 639 457.812 641.688 460.5 645 460.5 c 648.312 460.5 651 457.812 651 454.5 c S /Cs9 CS 1 SCN 0.25 w 304.5 861 m 352.5 861 l 304.5 48 m 352.5 48 l 12 478.5 m 12 430.5 l 645 478.5 m 645 430.5 l 328.5 873 m 328.5 849 l 328.5 60 m 328.5 36 l 0 454.5 m 24 454.5 l 633 454.5 m 657 454.5 l 328.5 861 m 334.5 861 l 334.5 857.688 331.812 855 328.5 855 c 325.188 855 322.5 857.688 322.5 861 c 322.5 864.312 325.188 867 328.5 867 c 331.812 867 334.5 864.312 334.5 861 c 328.5 48 m 334.5 48 l 334.5 44.688 331.812 42 328.5 42 c 325.188 42 322.5 44.688 322.5 48 c 322.5 51.312 325.188 54 328.5 54 c 331.812 54 334.5 51.312 334.5 48 c 12 454.5 m 18 454.5 l 18 451.188 15.312 448.5 12 448.5 c 8.688 448.5 6 451.188 6 454.5 c 6 457.812 8.688 460.5 12 460.5 c 15.312 460.5 18 457.812 18 454.5 c 645 454.5 m 651 454.5 l 651 451.188 648.312 448.5 645 448.5 c 641.688 448.5 639 451.188 639 454.5 c 639 457.812 641.688 460.5 645 460.5 c 648.312 460.5 651 457.812 651 454.5 c S endstream endobj 56 0 obj << /Type /Page /Parent 492 0 R /Resources 57 0 R /Contents 58 0 R /Thumb 359 0 R /MediaBox [ 0 0 684 873 ] /CropBox [ 0 0 684 873 ] /Rotate 0 >> endobj 57 0 obj << /ProcSet [ /PDF /Text ] /Font << /F1 515 0 R /F2 518 0 R /F3 261 0 R /F8 268 0 R /F9 269 0 R /F11 271 0 R >> /ExtGState << /GS1 523 0 R /GS2 521 0 R >> /ColorSpace << /Cs9 520 0 R >> >> endobj 58 0 obj << /Length 14542 >> stream 1 g /GS1 gs 0 873 m 0 873 l f q 1 i 27 846 603 -783 re 0 873 m W n 0 873 684 -873 re W n BT /F1 1 Tf 11 0 0 11 63 802.0776 Tm 0 0 0 1 k /GS2 gs -0.0001 Tc 0.0194 Tw [(ex)11.9(ecutable file called )]TJ /F2 1 Tf 9 0 0 9 152.9486 802.0776 Tm -0.0002 Tc 0 Tw (microperl)Tj /F1 1 Tf 11 0 0 11 201.5368 802.0776 Tm -0.0001 Tc 0.0194 Tw [(. \(I)5.8(f y)5.8(ou get stuck betw)5.8(een)]TJ -12.5943 -1.0909 TD 0.2031 Tw [(the first file and the big statement at the end, then w)5.8(e)]TJ T* 0.025 Tw [(pr)5.8(obably hav)5.8(e a bug.\))]TJ /F2 1 Tf 9 0 0 9 63 754.0776 Tm -0.0002 Tc 0 Tw (microperl)Tj /F1 1 Tf 11 0 0 11 114.1126 754.0776 Tm -0.0001 Tc -0.0205 Tw [(is a r)9.7(eal, honest-to-goodness P)53.9(erl interpr)9.7(eter; no)]TJ -4.6466 -1.0909 TD 0.022 Tw [(cor)9.7(e elements of the P)53.9(erl language hav)5.8(e been r)9.7(emo)15.8(v)5.9(ed. )44.8(The)]TJ T* 0.0703 Tw [(r)9.9(egular expr)9.7(ession engine is exactly the same, the language)]TJ T* -0.0103 Tw [(is exactly the same, it has the same U)35.9(nicode suppor)-7.9(t, and so)]TJ T* 0.1585 Tw [(on. )44.9(The only things that hav)5.8(e been r)9.7(emo)15.8(v)5.9(ed fr)5.8(om it ar)9.7(e)]TJ T* 0.1854 Tw [(functions that ar)9.7(e completely system-specific, like )]TJ /F2 1 Tf 9 0 0 9 288.0066 694.0776 Tm -0.0002 Tc 0 Tw (crypt)Tj /F1 1 Tf 11 0 0 11 63 682.0776 Tm (and )Tj /F2 1 Tf 9 0 0 9 81.8375 682.0776 Tm (readdir)Tj /F1 1 Tf 11 0 0 11 119.6283 682.0776 Tm 0 Tc (.)Tj /F2 1 Tf 7 0 0 7 81 662.0776 Tm -0.0003 Tc (% )Tj /F11 1 Tf 1.2597 0 TD -0.0002 Tc 0.06 Tw [(./microperl -le 'print q/Hello world/')]TJ /F2 1 Tf -1.2597 -1.1429 TD (Hello world)Tj T* -0.0003 Tc 0 Tw (% )Tj /F11 1 Tf 1.2597 0 TD -0.0002 Tc 0.06 Tw (./microperl t/base/cond.t)Tj /F2 1 Tf -1.2597 -1.1429 TD 0 Tw (1..4)Tj T* 0.06 Tw (ok 1)Tj T* (ok 2)Tj T* (ok 3)Tj T* (ok 4)Tj /F8 1 Tf 12 0 0 12 63 580.0776 Tm 0 Tc 0 Tw (H)Tj 10.44 0 0 10.44 72.9812 580.0776 Tm -0.0288 Tc (OW)Tj 12 0 0 12 94.897 580.0776 Tm 0 Tc (D)Tj 10.44 0 0 10.44 104.5442 580.0776 Tm 0.0228 Tc (OES)Tj 12 0 0 12 128.4511 580.0776 Tm 0 Tc (I)Tj 10.44 0 0 10.44 132.9362 580.0776 Tm (T)Tj 12 0 0 12 143.5247 580.0776 Tm (W)Tj 10.44 0 0 10.44 155.1919 580.0776 Tm 0.0228 Tc (ORK)Tj 12 0 0 12 178.1654 580.0776 Tm 0 Tc (?)Tj /F1 1 Tf 11 0 0 11 63 554.0776 Tm -0.0001 Tc 0.0351 Tw (The idea for )Tj /F2 1 Tf 9 0 0 9 119.0896 554.0776 Tm -0.0002 Tc 0 Tw (microperl)Tj /F1 1 Tf 11 0 0 11 170.8142 554.0776 Tm -0.0001 Tc 0.0351 Tw [(came fr)5.8(om I)5.8(lya Z)5.8(akhar)9.7(evich, who)]TJ -9.8013 -1.0909 TD 0.007 Tw [(pr)5.8(oduced a package called )]TJ /F2 1 Tf 9 0 0 9 176.4755 542.0776 Tm -0.0002 Tc 0 Tw (crazyperl)Tj /F1 1 Tf 11 0 0 11 227.8902 542.0776 Tm -0.0001 Tc 0.007 Tw [(v)5.9(e)0.1(r)-17.9(y)0( much along the)]TJ -14.99 -1.0909 TD -0.0112 Tw [(same lines. )14.9(What I)49.7(v)5.9(e)0( done, together with a lot of help fr)5.8(om)]TJ T* 0.0877 Tw [(J)29.7(a)0.3(r)5.8(kko H)17.8(ietaniemi, is to make it easy to build, extend the)]TJ T* 0.0725 Tw [(number of systems it can wor)5.8(k on, and keep up it to date)]TJ T* 0.025 Tw [(with the changes as P)53.9(erl dev)5.8(elops.)]TJ 0 -2.1818 TD 0.0145 Tw [(T)119.9(o)0( understand ho)11.9(w it wor)5.8(ks, ho)11.9(w)5.8(e)0(v)5.8(e)0.1(r)59.7(,)-0.1( w)5.8(e)29.7()49.8(v)5.9(e got to go back)]TJ 0 -1.0909 TD -0.0293 Tw [(to looking at ho)11.9(w )]TJ /F2 1 Tf 9 0 0 9 139.593 458.0776 Tm -0.0002 Tc 0 Tw (perl)Tj /F1 1 Tf 11 0 0 11 163.6157 458.0776 Tm -0.0001 Tc -0.0292 Tw [(is built. O)5.8(nce )]TJ /F2 1 Tf 9 0 0 9 223.2841 458.0776 Tm -0.0002 Tc 0 Tw (Configure)Tj /F1 1 Tf 11 0 0 11 274.3002 458.0776 Tm -0.0001 Tc -0.0292 Tw (has tested)Tj -19.2091 -1.0909 TD 0.0145 Tw [(the system and found ev)5.8(er)-17.9(ything it needs to kno)11.9(w)74.9(,)0( it writes)]TJ T* -0.0002 Tw [(out its r)9.7(esults to a shell file, )]TJ /F2 1 Tf 9 0 0 9 181.067 434.0776 Tm -0.0002 Tc 0 Tw (config.sh)Tj /F1 1 Tf 11 0 0 11 229.6552 434.0776 Tm -0.0001 Tc -0.0002 Tw [(. )44.8(This file is then r)9.7(e)0.1(-)]TJ -15.1505 -1.0909 TD -0.0023 Tw (arranged into a C header file, )Tj /F2 1 Tf 9 0 0 9 189.4746 422.0776 Tm -0.0002 Tc 0 Tw (config.h)Tj /F1 1 Tf 11 0 0 11 232.6641 422.0776 Tm -0.0001 Tc -0.0023 Tw [(, and the r)9.7(est of the)]TJ -15.424 -1.0909 TD 0.3303 Tw [(P)54(erl sour)5.8(ce files use the v)5.8(alues fr)5.8(om that as they ar)9.7(e)]TJ T* 0 Tw (compiled.)Tj 0 -2.1818 TD 0.0106 Tw [(Y)93.9(ou can examine the )]TJ /F2 1 Tf 9 0 0 9 153.8915 374.0776 Tm -0.0002 Tc 0 Tw (config.sh)Tj /F1 1 Tf 11 0 0 11 205.3462 374.0776 Tm -0.0001 Tc 0.0106 Tw (file that was used to build)Tj -12.9406 -1.0909 TD 0.025 Tw [(y)5.8(our v)5.8(ersion of P)53.9(erl thr)5.8(ough the )]TJ /F2 1 Tf 9 0 0 9 202.9773 362.0776 Tm -0.0002 Tc 0 Tw (Config)Tj /F1 1 Tf 11 0 0 11 238.3944 362.0776 Tm -0.0001 Tc (module:)Tj /F2 1 Tf 7 0 0 7 81.4756 342.0775 Tm -0.0002 Tc (#!/usr/bin/perl)Tj 0 -1.1429 TD 0.06 Tw (use warnings;)Tj T* (use strict;)Tj T* (use Config qw\(config_sh\);)Tj T* (print config_sh\(\);)Tj /F1 1 Tf 11 0 0 11 63 286.0776 Tm -0.0001 Tc 0.025 Tw [(This should print out something like the follo)11.9(wing:)]TJ /F2 1 Tf 7 0 0 7 81.4756 266.0776 Tm -0.0002 Tc 0 Tw (archlibexp='/usr/local/lib/perl5/5.7.0/cygwin')Tj T* (archname='cygwin')Tj T* (cc='gcc')Tj T* -0.0001 Tc 0.0599 Tw (ccflags='-fno-strict-aliasing -I/usr/local/include')Tj T* [(cppflags='-fno-strict-aliasing -I/usr/local/include')]TJ T* -0.0002 Tc 0 Tw (...)Tj /F1 1 Tf 11 0 0 11 63 202.0776 Tm -0.0251 Tc -0.0251 Tw [(This tells us that this P)54(erl will stor)9.7(e its machine-specific modules)]TJ 0 -1.0909 TD -0.0196 Tc 0.3695 Tw [(in the dir)9.8(ector)-17.8(y )]TJ /F2 1 Tf 9 0 0 9 139.8908 190.0776 Tm 0 Tw (/usr/local/lib/perl5/5.7.0/cygwin)Tj /F1 1 Tf 11 0 0 11 312.2491 190.0776 Tm 0 Tc (,)Tj -22.659 -1.0909 TD -0.0251 Tc 0.0458 Tw [(that the ar)5.8(chitectur)9.7(e w)5.8(e)29.7()69.9(r)9.9(e r)-7.9(unning on is )]TJ /F2 1 Tf 9 0 0 9 227.2853 178.0775 Tm 0 Tw (cygwin)Tj /F1 1 Tf 11 0 0 11 258.3277 178.0775 Tm 0.0458 Tw (, and the flags)Tj -17.7571 -1.0909 TD 0.0611 Tw [(passed to the C compiler and C pr)9.8(epr)5.8(ocessor r)9.7(espectiv)5.8(ely; y)5.8(o)0.1(u)]TJ T* 0.0593 Tw [(can find documentation on what the r)9.8(est of the options mean)]TJ T* 0 Tw (with )Tj /F2 1 Tf 9 0 0 9 84.0686 142.0775 Tm 0.1242 Tw (perldoc Config)Tj /F1 1 Tf 11 0 0 11 157.6188 142.0775 Tm 0.0518 Tw [(. )14.8(Y)93.9(ou can use this to determine charac-)]TJ -8.6017 -1.0909 TD 0.025 Tw [(teristics about the curr)9.7(ent P)53.9(erl build:)]TJ /F2 1 Tf 7 0 0 7 360.4756 805.2832 Tm -0.0002 Tc 0 Tw (#!/usr/bin/perl)Tj 0 -1.1429 TD 0.06 Tw (use warnings;)Tj T* (use strict;)Tj T* (use Config;)Tj T* 0 Tw (...)Tj T* 0.06 Tw (if \($Config{use5005threads}\) {)Tj 2.6394 -1.1429 TD [(# OK, we have threads:)]TJ T* -0.0001 Tc [(require Threads; import Threads;)]TJ T* -0.0002 Tc 0 Tw (threading_child\(\);)Tj -2.6394 -1.1429 TD 0.06 Tw (} else {)Tj 2.6394 -1.1429 TD (# Make do with fork:)Tj T* 0 Tw (forking_child\(\);)Tj -2.6394 -1.1429 TD 0 Tc (})Tj 9 0 0 9 342 685.2832 Tm -0.0002 Tc (microperl)Tj /F1 1 Tf 11 0 0 11 397.4438 685.2832 Tm 0.3733 Tw [(pr)5.7(o)15.8(vides a )]TJ /F2 1 Tf 9 0 0 9 451.0086 685.2832 Tm 0 Tw (config.sh)Tj /F1 1 Tf 11 0 0 11 506.4524 685.2832 Tm -0.0001 Tc 0.3733 Tw (which specifies the)Tj -14.9502 -1.0909 TD 0.0237 Tw [(lo)11.9(w)5.8(est common denominator: almost all optional items ar)9.7(e)]TJ T* -0.0246 Tw [(turned off)15.8(, all tests ar)9.7(e set to hav)5.8(e failed, and so on. )14.8(W)77.8(e)0( then)]TJ T* 0.0681 Tw [(build a v)5.8(ersion of P)53.9(erl with this minimal configuration )]TJ T* 0.0199 Tc 0.3763 Tw [(since P)53.9(erl is able to cope with pr)9.8(etty much ev)5.8(er)-17.9(y)]TJ 0 -8.7273 TD -0.0001 Tc 0.1505 Tw [(combination that can be thr)5.8(o)12(wn at it, it does its best to)]TJ 0 -1.0909 TD 0.025 Tw [(wor)5.8(k ar)5.8(ound ev)5.8(er)-17.9(ything that w)5.8(e)0( claim is lacking.)]TJ /F8 1 Tf 12 0 0 12 342 503.2832 Tm 0 Tc 0 Tw (W)Tj 10.44 0 0 10.44 353.8532 503.2832 Tm 0.0225 Tc (HY)Tj 12 0 0 12 368.9659 503.2832 Tm 0 Tc (?)Tj /F1 1 Tf 11 0 0 11 342 477.2832 Tm -0.0001 Tc 0.0171 Tw [(What)17.7()79.9(s)0( the point? I)17.7(s)-0.1( )]TJ /F2 1 Tf 9 0 0 9 429.7477 477.2832 Tm -0.0002 Tc 0 Tw (microperl)Tj /F1 1 Tf 11 0 0 11 481.2739 477.2832 Tm -0.0001 Tc 0.0171 Tw [(anything mor)9.7(e)0( than a cool)]TJ -12.6613 -1.0909 TD 0 Tw (hack? )Tj 0 -2.1818 TD 0.0705 Tw [(W)77.8(ell, it cer)-7.9(tainly is a cool hack, and I quite like it just for)]TJ 0 -1.0909 TD 0.025 Tw [(that, but her)9.7(e ar)9.7(e thr)9.7(ee r)9.7(eal, practical uses for )]TJ /F2 1 Tf 9 0 0 9 537.7943 429.2832 Tm -0.0002 Tc 0 Tw (microperl)Tj /F1 1 Tf 11 0 0 11 586.3823 429.2832 Tm 0 Tc (. )Tj -22.2166 -2.1818 TD -0.0002 Tc 0.0252 Tw [( H)5.7(acking)]TJ 1.6364 -2.1818 TD -0.0001 Tc 0.0462 Tw [(When y)5.8(o)0.1(u)49.7()69.9(r)9.9(e)0( wor)5.8(king on the P)53.9(erl cor)9.7(e, y)5.8(o)0.1(u)49.8()12(ll naturally)]TJ 0 -1.0909 TD 0.0612 Tw [(end up doing a load of tw)5.8(eaking, testing ideas, and so)]TJ T* 0.0055 Tw [(on. )44.8(This means a lot of r)9.7(ecompiling, and r)9.7(ecompiling a)]TJ T* 0 Tw (full )Tj /F2 1 Tf 9 0 0 9 378.2514 345.2832 Tm -0.0002 Tc (perl)Tj /F1 1 Tf 11 0 0 11 403.8481 345.2832 Tm -0.0001 Tc 0.1138 Tw [( or ev)5.8(en just )]TJ /F2 1 Tf 9 0 0 9 474.3643 345.2832 Tm -0.0002 Tc 0 Tw (miniperl)Tj /F1 1 Tf 11 0 0 11 521.5557 345.2832 Tm -0.0001 Tc 0.1138 Tw ( takes a lot of)Tj -14.6869 -1.0909 TD 0 Tw (time. )Tj /F2 1 Tf 9 0 0 9 386.0729 333.2832 Tm -0.0002 Tc (microperl)Tj /F1 1 Tf 11 0 0 11 438.7716 333.2832 Tm -0.0001 Tc 0.1237 Tw [(builds fast. F)23.9(u)0.1(r)-7.9(t)0(hermor)9.7(e, it)17.7()79.9(s)0( simple)]TJ -7.1611 -1.0909 TD 0.2272 Tw [(and unclutter)9.7(ed, and ther)9.7(efor)9.7(e useful for debugging)]TJ T* 0.051 Tw (and making patches; the )Tj /F2 1 Tf 9 0 0 9 468.4676 309.2832 Tm -0.0002 Tc 0 Tw (microperl)Tj /F1 1 Tf 11 0 0 11 520.3666 309.2832 Tm -0.0001 Tc 0.051 Tw (kit, if placed in a)Tj -14.5788 -1.0909 TD 0.1205 Tw [(separate dir)9.7(ector)-17.9(y)84.9(,)0( would be a cor)9.7(e of 71 files, \(29 C)]TJ T* 0.0434 Tw [(pr)5.8(ogram files\) rather than the 1700-or-so files in a full)]TJ T* 0.025 Tw [(P)54(erl distribution.)]TJ 0 -2.1818 TD 0.054 Tw [(I)23.9(t)17.8()79.9(s)0( also gr)9.7(eat for checking out a fr)9.7(esh P)53.9(erl distribution)]TJ 0 -1.0909 TD 0.3323 Tw [(without having to take the time to plod thr)5.8(ough)]TJ /F2 1 Tf 9 0 0 9 360 225.2832 Tm -0.0002 Tc 0 Tw (Configure)Tj /F1 1 Tf 11 0 0 11 408.5881 225.2832 Tm 0 Tc (; )Tj /F2 1 Tf 9 0 0 9 414.7471 225.2832 Tm -0.0002 Tc (Configure)Tj /F1 1 Tf 11 0 0 11 466.7441 225.2832 Tm -0.0001 Tc 0.0599 Tw [(is pr)9.7(etty slo)11.9(w)75(,)0( taking betw)5.8(een)]TJ -9.704 -1.0909 TD 0.025 Tw [(ten and tw)5.8(enty minutes on my old machine.)]TJ 0 -2.1818 TD 0.0063 Tc 0.3686 Tw [(O)5.9(n)0.1( top of this, because )]TJ /F2 1 Tf 9 0 0 9 483.3828 189.2832 Tm 0 Tw (microperl)Tj /F1 1 Tf 11 0 0 11 539.3583 189.2832 Tm 0.3687 Tw (assumes the)Tj -16.3053 -1.0909 TD -0.0001 Tc 0.1996 Tw [(absolute minimum permissible, it can help r)5.8(oot out)]TJ T* 0.0956 Tw [(edge cases in the configur)9.7(e pr)5.8(ocess if a function is)]TJ T* 0.3466 Tw [(used on the assumption that ev)5.8(er)-17.9(y)5.8(one has it, for)]TJ T* 0.0199 Tc 0 Tw (instance. )Tj /F2 1 Tf 9 0 0 9 407.9268 141.2832 Tm (microperl)Tj /F1 1 Tf 11 0 0 11 466.8333 141.2832 Tm 0.5207 Tw [(has alr)9.7(eady found a fe)-5.9(w)]TJ -9.7121 -1.0909 TD -0.0001 Tc 0.3033 Tw [(assumptions in the P)53.9(erl sour)5.8(ce, and will hopefully)]TJ 12 0 0 12 63 90.3543 Tm 0 Tc 0 Tw [(20)-1100(F)]TJ 10.44 0 0 10.44 94.2795 90.3543 Tm -0.0001 Tc (ALL)Tj 12 0 0 12 115.6277 90.3543 Tm 0 Tc (2000)Tj /F3 1 Tf 30.9897 0.0003 TD -0.0002 Tc 0.0255 Tw [(The P)47.6(erl J)35.7(our)-8(nal #19)]TJ /F11 1 Tf 11 0 0 11 346.3031 606.0983 Tm -0.0101 Tc 0 Tw (microperl)Tj /F9 1 Tf 14 0 0 14 408.8379 606.0983 Tm -0.0102 Tc 0.0278 Tw [(is a r)19.6(eal,)-196(honest-to-g)9.6(oodness)]TJ -4.2262 -1.1429 TD [(P)75(erl interpr)19.6(eter)-40(;)-196(no cor)19.6(e elements of)]TJ -0.2734 -1.1429 TD [(the P)74.7(erl langua)14.7(g)14.7(e)0.1( ha)34.7(v)19.8(e)0( been r)19.6(emo)39.6(v)19.8(ed.)]TJ ET 0 0 0 1 K 0 J 0 j 2 w 10 M []0 d 342 625.68 m 594 625.68 l S 0.667 w 342 623.01 m 594 623.01 l 342 563.95 m 594 563.95 l S 2 w 342 561.28 m 594 561.28 l S Q 0 0 0 0 k 1 i 37 874 191 -12 re 590.013 574.098 m f* BT /F2 1 Tf 8 0 0 8 39 864 Tm /Cs9 cs 1 scn -0.0004 Tc -0.0019 Tw (TPJ#19/9.26 9/27/00 10:35 AM Page 20)Tj ET 1 G 0 J 0 j 0.5 w 10 M []0 d 36 873 m 36 849 l 0 837 m 24 837 l 621 873 m 621 849 l 657 837 m 633 837 l 36 36 m 36 60 l 0 72 m 24 72 l 621 36 m 621 60 l 657 72 m 633 72 l S /Cs9 CS 1 SCN 0.25 w 36 873 m 36 849 l 0 837 m 24 837 l 621 873 m 621 849 l 657 837 m 633 837 l 36 36 m 36 60 l 0 72 m 24 72 l 621 36 m 621 60 l 657 72 m 633 72 l S 1 G 0.5 w 304.5 861 m 352.5 861 l 304.5 48 m 352.5 48 l 12 478.5 m 12 430.5 l 645 478.5 m 645 430.5 l 328.5 873 m 328.5 849 l 328.5 60 m 328.5 36 l 0 454.5 m 24 454.5 l 633 454.5 m 657 454.5 l 328.5 861 m 334.5 861 l 334.5 857.688 331.812 855 328.5 855 c 325.188 855 322.5 857.688 322.5 861 c 322.5 864.312 325.188 867 328.5 867 c 331.812 867 334.5 864.312 334.5 861 c 328.5 48 m 334.5 48 l 334.5 44.688 331.812 42 328.5 42 c 325.188 42 322.5 44.688 322.5 48 c 322.5 51.312 325.188 54 328.5 54 c 331.812 54 334.5 51.312 334.5 48 c 12 454.5 m 18 454.5 l 18 451.188 15.312 448.5 12 448.5 c 8.688 448.5 6 451.188 6 454.5 c 6 457.812 8.688 460.5 12 460.5 c 15.312 460.5 18 457.812 18 454.5 c 645 454.5 m 651 454.5 l 651 451.188 648.312 448.5 645 448.5 c 641.688 448.5 639 451.188 639 454.5 c 639 457.812 641.688 460.5 645 460.5 c 648.312 460.5 651 457.812 651 454.5 c S /Cs9 CS 1 SCN 0.25 w 304.5 861 m 352.5 861 l 304.5 48 m 352.5 48 l 12 478.5 m 12 430.5 l 645 478.5 m 645 430.5 l 328.5 873 m 328.5 849 l 328.5 60 m 328.5 36 l 0 454.5 m 24 454.5 l 633 454.5 m 657 454.5 l 328.5 861 m 334.5 861 l 334.5 857.688 331.812 855 328.5 855 c 325.188 855 322.5 857.688 322.5 861 c 322.5 864.312 325.188 867 328.5 867 c 331.812 867 334.5 864.312 334.5 861 c 328.5 48 m 334.5 48 l 334.5 44.688 331.812 42 328.5 42 c 325.188 42 322.5 44.688 322.5 48 c 322.5 51.312 325.188 54 328.5 54 c 331.812 54 334.5 51.312 334.5 48 c 12 454.5 m 18 454.5 l 18 451.188 15.312 448.5 12 448.5 c 8.688 448.5 6 451.188 6 454.5 c 6 457.812 8.688 460.5 12 460.5 c 15.312 460.5 18 457.812 18 454.5 c 645 454.5 m 651 454.5 l 651 451.188 648.312 448.5 645 448.5 c 641.688 448.5 639 451.188 639 454.5 c 639 457.812 641.688 460.5 645 460.5 c 648.312 460.5 651 457.812 651 454.5 c S endstream endobj 59 0 obj << /Type /Page /Parent 493 0 R /Resources 60 0 R /Contents 61 0 R /Thumb 361 0 R /MediaBox [ 0 0 684 873 ] /CropBox [ 0 0 684 873 ] /Rotate 0 >> endobj 60 0 obj << /ProcSet [ /PDF /Text ] /Font << /F1 515 0 R /F2 518 0 R /F3 261 0 R /F5 262 0 R /F8 268 0 R /F10 270 0 R /F11 271 0 R >> /ExtGState << /GS1 523 0 R /GS2 521 0 R >> /ColorSpace << /Cs9 520 0 R >> >> endobj 61 0 obj << /Length 15055 >> stream 1 g /GS1 gs 0 873 m 0 873 l f q 1 i 27 846 603 -783 re 0 873 m W n 0 873 684 -873 re W n BT /F1 1 Tf 11 0 0 11 81 802.0776 Tm 0 0 0 1 k /GS2 gs -0.0001 Tc 0.025 Tw [(guar)13.8(d against any mor)9.7(e.)]TJ -1.6364 -2.1818 TD -0.0002 Tc [( P)53.8(o)0.1(r)-8(ting)]TJ 1.6364 -2.1818 TD -0.0001 Tc 0 Tw [(B)5.8(ecause )]TJ /F2 1 Tf 9 0 0 9 117.5703 754.0776 Tm -0.0002 Tc (microperl)Tj /F1 1 Tf 11 0 0 11 169.401 754.0776 Tm -0.0001 Tc 0.0448 Tw [(is a lo)11.9(w)5.8(est common denominator)59.7(,)]TJ -8.0365 -1.0909 TD 0.1504 Tw [(it)17.7()79.9(s)-0.1( v)5.8(e)0.1(r)-17.9(y)84.9(, v)5.8(e)0.1(r)-17.9(y)0( easy to por)-7.9(t to ne)-5.9(w systems: y)5.8(ou don)69.8()79.9(t)]TJ T* 0.0404 Tw [(need to kno)11.9(w anything about the characteristics of the)]TJ T* 0.0199 Tc 0.7044 Tw [(system y)5.8(o)0.1(u)49.8()69.9(r)9.9(e)0( compiling on. R)11.9(eplace )]TJ /F2 1 Tf 9 0 0 9 284.3057 718.0776 Tm 0.0197 Tc 0 Tw (CC)Tj /F1 1 Tf 11 0 0 11 306.1813 718.0776 Tm (in)Tj /F2 1 Tf 9 0 0 9 81 706.0776 Tm -0.0002 Tc (Makefile.micro)Tj /F1 1 Tf 11 0 0 11 160.7702 706.0776 Tm -0.0001 Tc 0.1308 Tw [(with a cr)5.8(oss-compiler)59.7(, and y)5.8(ou can)]TJ -7.2518 -1.0909 TD 0.1866 Tw [(instantly por)-7.9(t a v)5.8(ersion of P)53.9(erl to another operating)]TJ T* 0.0098 Tw [(system. \(I)11.9(n fact, this is what I)69.7(m doing to put P)53.9(erl onto)]TJ T* 0.2702 Tw [(the P)41.9(a)0.1(lm P)11.9(ilot por)-7.9(t of Linux, but ther)9.7(e ar)9.7(e a fe)-5.9(w)]TJ T* 0.025 Tw (wrinkles left to be smoothed.\))Tj 0 -2.1818 TD -0.0101 Tc 0.1431 Tw [(F)24(u)0.1(r)-7.9(ther)59.7(, since y)5.8(ou can build )]TJ /F2 1 Tf 9 0 0 9 207.1085 634.0776 Tm -0.0102 Tc 0 Tw (microperl)Tj /F1 1 Tf 11 0 0 11 259.1011 634.0776 Tm -0.0101 Tc 0.1431 Tw (with nothing)Tj -16.191 -1.0909 TD 0.0101 Tw (other than a C compiler and )Tj /F2 1 Tf 9 0 0 9 202.1578 622.0776 Tm -0.0102 Tc 0 Tw (make)Tj /F1 1 Tf 11 0 0 11 223.3928 622.0776 Tm -0.0101 Tc 0.0101 Tw [(, it)17.8()79.9(s)0( useful for por)-7.8(ting)]TJ -12.9448 -1.0909 TD 0.1118 Tw [(to systems which don)69.8()79.9(t)0( hav)5.8(e )]TJ /F2 1 Tf 9 0 0 9 204.3913 610.0776 Tm -0.0103 Tc 0 Tw (sh)Tj /F1 1 Tf 11 0 0 11 215.0088 610.0776 Tm -0.01 Tc (, )Tj /F2 1 Tf 9 0 0 9 221.5187 610.0776 Tm -0.0102 Tc (awk)Tj /F1 1 Tf 11 0 0 11 237.4449 610.0776 Tm -0.01 Tc (, )Tj /F2 1 Tf 9 0 0 9 243.9548 610.0776 Tm -0.0102 Tc (grep)Tj /F1 1 Tf 11 0 0 11 269.0596 610.0776 Tm -0.0101 Tc 0.1118 Tw (and all the)Tj -17.0963 -1.0909 TD -0.0063 Tc 0.3712 Tw (other things )Tj /F2 1 Tf 9 0 0 9 142.2672 598.0776 Tm 0 Tw (Configure)Tj /F1 1 Tf 11 0 0 11 197.1199 598.0776 Tm 0.3712 Tw [(demands. O)5.8(nce y)5.8(ou hav)5.8(e)]TJ -10.5564 -1.0909 TD -0.0101 Tc -0.0093 Tw [(experience of ho)12(w )]TJ /F2 1 Tf 9 0 0 9 158.0294 586.0776 Tm -0.0102 Tc 0 Tw (config.sh)Tj /F1 1 Tf 11 0 0 11 208.3458 586.0776 Tm -0.0101 Tc -0.0092 Tw [(wor)5.8(ks, y)5.8(ou can build up a)]TJ -11.5769 -1.0909 TD -0.0054 Tw [(v)5.9(ersion of P)53.9(erl b)5.8(y)0( steadily adding featur)9.8(es to )]TJ /F2 1 Tf 9 0 0 9 264.4714 574.0776 Tm -0.0102 Tc 0 Tw (microperl)Tj /F1 1 Tf 11 0 0 11 312.25 574.0776 Tm 0 Tc (.)Tj -22.6591 -2.1818 TD -0.0001 Tc 0.025 Tw ( Bootstrapping)Tj 1.6364 -2.1818 TD 0.0199 Tc 0.465 Tw [(As mentioned befor)9.7(e, w)5.8(e)0( can theor)9.7(etically use)]TJ /F2 1 Tf 9 0 0 9 81 514.0776 Tm -0.0002 Tc 0 Tw (microperl)Tj /F1 1 Tf 11 0 0 11 135.5791 514.0776 Tm -0.0001 Tc 0.2946 Tw [(to bootstrap a P)53.9(erl build; the )49.7(steadily)]TJ -4.9617 -1.0909 TD 0.0199 Tc 0.4643 Tw [(adding featur)9.7(es)39.7( par)-7.9(t mentioned abo)15.8(v)5.9(e)0( can be)]TJ T* -0.0001 Tc 0.014 Tw [(automated and r)-7.9(un b)5.8(y)0( the machine itself)15.8(. I)17.7(d)0.1(eally)84.9(, y)5.8(o)0.1(u)49.7()99.9(d)]TJ T* 0.2246 Tw [(unpack y)5.8(our P)53.9(erl kit, type )]TJ /F2 1 Tf 9 0 0 9 206.1492 478.0776 Tm -0.0002 Tc 0 Tw (make)Tj /F1 1 Tf 11 0 0 11 227.744 478.0776 Tm -0.0001 Tc 0.2247 Tw (, and a )Tj /F2 1 Tf 9 0 0 9 266.4121 478.0776 Tm -0.0002 Tc 0 Tw (microperl)Tj /F1 1 Tf 11 0 0 11 81 466.0776 Tm -0.0001 Tc 0.2346 Tw [(would be built, which would r)-7.9(un a P)53.9(erl v)5.8(ersion of)]TJ /F2 1 Tf 9 0 0 9 81 454.0776 Tm -0.0002 Tc 0 Tw (Configure)Tj /F1 1 Tf 11 0 0 11 132.6132 454.0776 Tm -0.0001 Tc 0.025 Tw (and then build a full )Tj /F2 1 Tf 9 0 0 9 223.6802 454.0776 Tm -0.0002 Tc 0 Tw (perl)Tj /F1 1 Tf 11 0 0 11 245.2749 454.0776 Tm 0 Tc (.)Tj -14.9341 -2.1818 TD -0.0001 Tc 0.1187 Tw [(N)29.7(o)12(w)74.9(,)-0.1( when someone says )59.7(t)0(heor)9.7(etically)39.7(, they usually)]TJ 0 -1.0909 TD -0.0197 Tw [(mean )59.7(not r)9.7(eally)39.7(, but let)17.7()79.9(s)0( hav)5.8(e a look at a simple pr)5.8(oof)]TJ T* -0.0303 Tw [(of concept. O)5.8(ne of the tests w)5.8(e)0( need to do is to examine)]TJ T* 0.025 Tw [(the siz)5.8(e of C integer storage:)]TJ /F2 1 Tf 7 0 0 7 81.4756 374.0776 Tm -0.0003 Tc 0 Tw ($ )Tj /F11 1 Tf 1.2597 0 TD -0.0002 Tc 0.06 Tw (./microperl.exe fixbytes.pl)Tj /F2 1 Tf -1.2597 -1.1429 TD (Checking to see how big your integers are...)Tj T* (ints are 4, longs are 4, shorts are 2)Tj T* (Fixing uconfig.sh)Tj T* (Reprocessing uconfig.sh)Tj T* [(Extracting uconfig.h \(with variable substitutions\))]TJ T* (Making myself!)Tj T* [(cc -c -o uav.o -DPERL_CORE -DPERL_MICRO av.c)]TJ T* 0 Tw (...)Tj -0.0679 -1.1429 TD -0.0001 Tc 0.0599 Tw [(cc -o microperl uav.o udeb.o udoio.o udoop.o udump.o )]TJ T* [(uglobals.o ugv.o uhv.o umg.o uperlmain.o uop.o uperl.o )]TJ T* -0.0002 Tc [(uperlio.o uperly.o upp.o upp_ctl.o )]TJ T* [(upp_hot.o upp_sys.o uregcomp.o uregexec.o urun.o)]TJ T* -0.0001 Tc [(uscope.o usv.o utaint.o utoke.o uuniversal.o uutf8.o )]TJ T* -0.0002 Tc (uutil.o uperlapi.o -lm)Tj 0.0679 -1.1429 TD (I'm still here.)Tj /F1 1 Tf 11 0 0 11 81 230.0776 Tm -0.0001 Tc 0.0087 Tw [(N)29.7(o)12(w w)5.8(e)29.7()49.8(v)5.9(e built a ne)-5.9(w v)5.8(ersion of )]TJ /F2 1 Tf 9 0 0 9 224.6381 230.0776 Tm -0.0002 Tc 0 Tw (microperl)Tj /F1 1 Tf 11 0 0 11 276.0717 230.0776 Tm -0.0001 Tc 0.0087 Tw (using the)Tj -17.7338 -1.0909 TD 0.1881 Tw [(information w)5.8(e)29.7()49.8(v)5.9(e disco)15.8(v)5.9(e)0.1(r)9.7(ed. H)17.8(e)0.1(r)9.7(e)29.7()79.9(s)0( the code which)]TJ T* 0.025 Tw (did that:)Tj /F2 1 Tf 7 0 0 7 81.4756 186.0775 Tm -0.0002 Tc 0.06 Tw (require "bootstrap.pl";)Tj 0 -1.1429 TD -0.0051 Tc (print "Checking to see how big your integers are...\\n";)Tj T* -0.0002 Tc (open \(OUT, ">intsize.c"\) or die $!;)Tj T* (print OUT <<'EOF';)Tj T* (#include )Tj T* (int main\(\))Tj T* 0 Tc 0 Tw ({)Tj 2.6394 -1.1429 TD -0.0001 Tc 0.0599 Tw [(printf\("$intsize=%d;\\n", \(int\)sizeof\(int\) \);)]TJ T* [(printf\("$longsize=%d;\\n", \(int\)sizeof\(long\) \);)]TJ 39.8571 97.6008 TD [(printf\("$shortsize=%d;\\n", \(int\)sizeof\(short\)\);)]TJ 0 -1.1429 TD -0.0002 Tc 0 Tw (exit\(0\);)Tj -2.6394 -1.1429 TD 0 Tc (})Tj T* -0.0002 Tc (EOF)Tj T* 0.06 Tw (close OUT;)Tj T* -0.0001 Tc [(system\("cc -o intsize intsize.c"\);)]TJ T* (if \(!-x "./intsize"\) { die "Didn't compile" })Tj T* -0.0002 Tc ($sizes = `./intsize`;)Tj T* (unlink "intsize", "intsize.c";)Tj T* (eval $sizes;)Tj T* -0.0001 Tc [(print "ints are $intsize, longs are $longsize, )]TJ 18.2443 -1.1429 TD -0.0002 Tc [(shorts are $shortsize\\n";)]TJ -18.2443 -1.1429 TD [(changeit \( intsize)-1799.8(=> $intsize,)]TJ 6.5984 -1.1429 TD [(longsize => $longsize,)]TJ T* [(shortsize => $shortsize)]TJ -6.5984 -1.1429 TD -0.0003 Tc 0 Tw (\);)Tj T* -0.0002 Tc (rebuild\(\);)Tj /F1 1 Tf 11 0 0 11 360 653.2832 Tm -0.0001 Tc 0.3203 Tw [(O)5.8(f)0( course, it)17.7()12(ll take a lot of wor)5.8(k befor)9.7(e w)5.8(e)0( can)]TJ 0 -1.0909 TD 0.3533 Tw [(bootstrap P)53.9(erl to the same degr)9.7(ee as an or)13.9(dinar)-17.9(y)]TJ /F2 1 Tf 9 0 0 9 360 629.2832 Tm -0.0002 Tc 0 Tw (Configure)Tj /F1 1 Tf 11 0 0 11 411.6132 629.2832 Tm -0.0001 Tc 0.025 Tw [(r)-7.7(un. B)11.9(ut I)11.9(ll get ther)9.7(e!)]TJ /F8 1 Tf 12 0 0 12 342 603.2832 Tm 0 Tc 0 Tw (P)Tj 10.44 0 0 10.44 349.2946 603.2832 Tm 0.0229 Tc [(R)36(OBLEMS)]TJ /F1 1 Tf 11 0 0 11 342 577.2832 Tm -0.0001 Tc 0.0416 Tw [(The major pr)5.8(oblem I)49.7(v)5.9(e)0( had dev)5.8(eloping )]TJ /F2 1 Tf 9 0 0 9 515.7607 577.2832 Tm -0.0002 Tc 0 Tw (microperl)Tj /F1 1 Tf 11 0 0 11 567.5569 577.2832 Tm -0.0001 Tc 0.0416 Tw (is that)Tj -20.5052 -1.0909 TD 0.0149 Tc 0.36 Tw (the definitions that )Tj /F2 1 Tf 9 0 0 9 441.286 565.2832 Tm 0 Tw (config.sh)Tj /F1 1 Tf 11 0 0 11 497.9647 565.2832 Tm 0.36 Tw [(needs to pr)5.8(o)15.9(vide to)]TJ /F2 1 Tf 9 0 0 9 342 553.2832 Tm -0.0002 Tc 0 Tw (config.h)Tj /F1 1 Tf 11 0 0 11 389.1824 553.2832 Tm -0.0001 Tc 0.113 Tw [(constantly change, and so I)49.7(v)5.9(e)0( had to add ne)-5.9(w)]TJ -4.2893 -1.0909 TD 0.025 Tw (entries to )Tj /F2 1 Tf 9 0 0 9 384.6594 541.2832 Tm -0.0002 Tc 0 Tw (microperl)Tj /F1 1 Tf 11 0 0 11 433.2476 541.2832 Tm -0.08 Tc [(s)-80( )]TJ /F2 1 Tf 9 0 0 9 441.5309 541.2832 Tm -0.0002 Tc (config.sh)Tj /F1 1 Tf 11 0 0 11 490.119 541.2832 Tm 0 Tc (.)Tj -13.4654 -2.1818 TD -0.0001 Tc 0.0517 Tw [(T)119.9(o)0( av)5.8(oid doing this manually)84.9(, I wr)5.8(ote a little P)53.9(e)0.1(rl pr)5.8(ogram)]TJ 0 -1.0909 TD 0.0263 Tw (that checks for undefined symbols during the )Tj /F2 1 Tf 9 0 0 9 539.0005 505.2832 Tm -0.0002 Tc 0 Tw (make)Tj /F1 1 Tf 11 0 0 11 563.6348 505.2832 Tm [(pr)5.7(ocess)]TJ -20.1486 -1.0909 TD -0.0001 Tc -0.0096 Tw (and attempts to divine what they should be for )Tj /F2 1 Tf 9 0 0 9 542.662 493.2832 Tm -0.0002 Tc 0 Tw (microperl)Tj /F1 1 Tf 11 0 0 11 591.2501 493.2832 Tm 0 Tc (,)Tj -22.6591 -1.0909 TD -0.0001 Tc 0.09 Tw [(adds in the r)9.7(elev)5.8(ant entries to )]TJ /F2 1 Tf 9 0 0 9 475.4818 481.2832 Tm -0.0002 Tc 0 Tw (config.sh)Tj /F1 1 Tf 11 0 0 11 527.8104 481.2832 Tm -0.0001 Tc 0.09 Tw (and tries again.)Tj -16.8919 -1.0909 TD 0.025 Tw [(I)23.9(t)17.8()79.9(s)0( a cr)-7.9(ude futur)9.7(e-pr)5.8(oofing, but it sav)5.8(es me a lot of wor)5.8(k.)]TJ 0 -2.1818 TD 0.0464 Tw [(A)12.1(par)-7.9(t fr)5.8(om that, it)17.7()79.9(s)0( been a question of r)9.7(e-arranging things)]TJ 0 -1.0909 TD 0.0484 Tw [(in the P)53.9(erl cor)9.7(e to make them mor)9.7(e friendly to completely)]TJ T* 0.0271 Tw (impotent configurations like )Tj /F2 1 Tf 9 0 0 9 466.6511 421.2832 Tm -0.0002 Tc 0 Tw (microperl)Tj /F1 1 Tf 11 0 0 11 515.2391 421.2832 Tm -0.0001 Tc 0.0271 Tw [()79.9(s: signal handling,)]TJ -15.749 -1.0909 TD 0.2245 Tw [(for instance, had to be ex)11.9(cised, and file modes such as)]TJ /F2 1 Tf 9 0 0 9 342 397.2832 Tm -0.0002 Tc 0 Tw (O_CREAT)Tj /F1 1 Tf 11 0 0 11 382.7801 397.2832 Tm -0.0001 Tc 0.0218 Tw [(generated for systems without the r)9.7(elev)5.8(ant system)]TJ -3.7073 -1.0909 TD 0.025 Tw (header files.)Tj /F8 1 Tf 12 0 0 12 342 359.2832 Tm 0 Tc 0 Tw (T)Tj 10.44 0 0 10.44 350.4226 359.2832 Tm 0.0225 Tc (HE)Tj 12 0 0 12 369.0352 359.2832 Tm 0 Tc (F)Tj 10.44 0 0 10.44 375.6706 359.2832 Tm 0.0228 Tc (UTURE)Tj /F1 1 Tf 11 0 0 11 342 333.2832 Tm -0.0001 Tc 0.0701 Tw [(Wher)9.7(e do I see )]TJ /F2 1 Tf 9 0 0 9 411.4833 333.2832 Tm -0.0002 Tc 0 Tw (microperl)Tj /F1 1 Tf 11 0 0 11 463.5923 333.2832 Tm -0.0001 Tc 0.07 Tw [(going? H)17.8(opefully)84.9(, it)17.7()12(ll one day)]TJ -11.0538 -1.0909 TD 0.1985 Tw [(be mor)9.7(e than just a to)11.9(y for me. I)23.9(t)17.8()79.9(s)0( cer)-7.9(tainly useful for)]TJ T* 0.023 Tw [(any)5.8(one wor)5.8(king on the P)53.9(erl cor)9.7(e)0( to quickly check out their)]TJ T* 0.0005 Tw [(changes or P)53.9(erl)11.9()79.9(s)0( operation; it)17.7()79.9(s)0( good for people learning the)]TJ T* 0.1177 Tw [(internals of P)53.9(erl because it strips away ev)5.8(er)-17.9(ything but the)]TJ T* 0.2143 Tw [(essentials. I)99.8(d like to see it building itself and hopefully)]TJ T* 0.025 Tw [(making an attack on the curr)9.7(ent )]TJ /F2 1 Tf 9 0 0 9 482.8447 261.2832 Tm -0.0002 Tc 0 Tw (Configure)Tj /F1 1 Tf 11 0 0 11 534.4579 261.2832 Tm 0 Tc (system.)Tj -17.4962 -2.1818 TD -0.0001 Tc 0.025 Tw [(B)11.9(ut no matter what happens to it, it)17.7()79.9(s)0( still a neat hack.)]TJ /F10 1 Tf T* 0.0278 Tw (_ _END_ _)Tj /F5 1 Tf T* 0.0456 Tw [(S)11.9(i)0(mon Coz)-5.9(ens is an open sour)11.9(ce pr)5.8(ogr)29.7(ammer and author)59.7(, and)]TJ 0 -1.0909 TD -0.0178 Tw [(a member of the P)41.9(e)0.1(r)11.9(l)0( dev)5.8(elopment team. H)23.9(e)0( liv)5.8(es in )47.8(T)120(oky)5.8(o)12.1(,)0( and)]TJ T* 0.0605 Tw [(his hobbies include the G)17.8(r)19.9(eek language and cultur)19.7(e. H)23.9(e)0( is the)]TJ T* 0.1085 Tw [(author of B)5.8(eginning P)41.9(e)0.1(r)11.9(l)12( and a number of ar)-7.9(ticles on P)41.9(e)0.1(r)11.9(l)]TJ T* 0.025 Tw [(and on O)5.8(pen Sour)11.9(ce topics.)]TJ /F1 1 Tf 12 0 0 12 517.3723 90.3543 Tm 0 Tc 0 Tw (F)Tj 10.44 0 0 10.44 523.4518 90.3543 Tm -0.0001 Tc (ALL)Tj 12 0 0 12 544.7999 90.3543 Tm 0 Tc 0.025 Tw [(2000 21)]TJ /F3 1 Tf -40.15 0 TD -0.0002 Tc 0.0255 Tw [(The P)47.6(erl J)35.7(our)-8(nal #19)]TJ ET Q 0 0 0 0 k /GS2 gs 1 i 37 874 191 -12 re 162.892 90.354 m f* BT /F2 1 Tf 8 0 0 8 39 864 Tm /Cs9 cs 1 scn -0.0004 Tc -0.0019 Tw (TPJ#19/9.26 9/27/00 10:35 AM Page 21)Tj ET 1 G 0 J 0 j 0.5 w 10 M []0 d 36 873 m 36 849 l 0 837 m 24 837 l 621 873 m 621 849 l 657 837 m 633 837 l 36 36 m 36 60 l 0 72 m 24 72 l 621 36 m 621 60 l 657 72 m 633 72 l S /Cs9 CS 1 SCN 0.25 w 36 873 m 36 849 l 0 837 m 24 837 l 621 873 m 621 849 l 657 837 m 633 837 l 36 36 m 36 60 l 0 72 m 24 72 l 621 36 m 621 60 l 657 72 m 633 72 l S 1 G 0.5 w 304.5 861 m 352.5 861 l 304.5 48 m 352.5 48 l 12 478.5 m 12 430.5 l 645 478.5 m 645 430.5 l 328.5 873 m 328.5 849 l 328.5 60 m 328.5 36 l 0 454.5 m 24 454.5 l 633 454.5 m 657 454.5 l 328.5 861 m 334.5 861 l 334.5 857.688 331.812 855 328.5 855 c 325.188 855 322.5 857.688 322.5 861 c 322.5 864.312 325.188 867 328.5 867 c 331.812 867 334.5 864.312 334.5 861 c 328.5 48 m 334.5 48 l 334.5 44.688 331.812 42 328.5 42 c 325.188 42 322.5 44.688 322.5 48 c 322.5 51.312 325.188 54 328.5 54 c 331.812 54 334.5 51.312 334.5 48 c 12 454.5 m 18 454.5 l 18 451.188 15.312 448.5 12 448.5 c 8.688 448.5 6 451.188 6 454.5 c 6 457.812 8.688 460.5 12 460.5 c 15.312 460.5 18 457.812 18 454.5 c 645 454.5 m 651 454.5 l 651 451.188 648.312 448.5 645 448.5 c 641.688 448.5 639 451.188 639 454.5 c 639 457.812 641.688 460.5 645 460.5 c 648.312 460.5 651 457.812 651 454.5 c S /Cs9 CS 1 SCN 0.25 w 304.5 861 m 352.5 861 l 304.5 48 m 352.5 48 l 12 478.5 m 12 430.5 l 645 478.5 m 645 430.5 l 328.5 873 m 328.5 849 l 328.5 60 m 328.5 36 l 0 454.5 m 24 454.5 l 633 454.5 m 657 454.5 l 328.5 861 m 334.5 861 l 334.5 857.688 331.812 855 328.5 855 c 325.188 855 322.5 857.688 322.5 861 c 322.5 864.312 325.188 867 328.5 867 c 331.812 867 334.5 864.312 334.5 861 c 328.5 48 m 334.5 48 l 334.5 44.688 331.812 42 328.5 42 c 325.188 42 322.5 44.688 322.5 48 c 322.5 51.312 325.188 54 328.5 54 c 331.812 54 334.5 51.312 334.5 48 c 12 454.5 m 18 454.5 l 18 451.188 15.312 448.5 12 448.5 c 8.688 448.5 6 451.188 6 454.5 c 6 457.812 8.688 460.5 12 460.5 c 15.312 460.5 18 457.812 18 454.5 c 645 454.5 m 651 454.5 l 651 451.188 648.312 448.5 645 448.5 c 641.688 448.5 639 451.188 639 454.5 c 639 457.812 641.688 460.5 645 460.5 c 648.312 460.5 651 457.812 651 454.5 c S endstream endobj 62 0 obj << /Type /Page /Parent 493 0 R /Resources 63 0 R /Contents 64 0 R /Thumb 363 0 R /MediaBox [ 0 0 684 873 ] /CropBox [ 0 0 684 873 ] /Rotate 0 >> endobj 63 0 obj << /ProcSet [ /PDF /Text /ImageC /ImageI ] /Font << /F1 515 0 R /F2 518 0 R /F3 261 0 R /F5 262 0 R /F7 267 0 R /F8 268 0 R /F9 269 0 R >> /XObject << /Im2 65 0 R >> /ExtGState << /GS1 523 0 R /GS2 521 0 R >> /ColorSpace << /Cs9 520 0 R /Cs10 264 0 R /Cs11 272 0 R >> >> endobj 64 0 obj << /Length 11532 >> stream 1 g /GS1 gs 0 873 m 0 873 l f q 1 i 27 846 603 -783 re 0 873 m W n 0 873 684 -873 re W n BT /F1 1 Tf 29.09 0 0 29.09 62.152 550.5442 Tm 0 0 0 1 k /GS2 gs 0 Tc 0 Tw (O)Tj 11 0 0 11 85.25 562.5442 Tm -0.0001 Tc 0.0965 Tw [(ne of P)53.9(erl)11.9()79.9(s)0( gr)9.7(eat str)9.7(engths is the ability to filter data)]TJ 0 -1.0909 TD -0.0175 Tw [(fr)5.8(om one format into another)59.8(. D)5.8(ata goes in one end of)]TJ -2.0227 -1.0909 TD -0.0238 Tw [(a P)53.9(e)0.1(rl pr)5.8(ogram and miraculously comes out the other end as)]TJ T* 0.2664 Tw [(something mor)9.7(e useful. )14.8(Y)93.9(our S)11.9(ybase file goes into P)53.9(erl)]TJ T* 0.0219 Tw [(counselling and after a fe)-5.9(w shor)-7.9(t sessions comes out feeling)]TJ T* 0.025 Tw [(like a brand ne)-5.9(w O)5.8(racle file.)]TJ 0 -2.1818 TD 0.0509 Tw [(H)17.8(o)12(w)5.8(e)0(v)5.8(e)0.1(r)59.7(,)0( not all file formats ar)9.7(e r)9.7(eadily accessible. Cer)-7.9(tain)]TJ 0 -1.0909 TD 0.0927 Tw [(pr)5.8(oprietar)-17.9(y file formats, and in par)-7.9(ticular binar)-17.9(y files, can)]TJ T* 0.1579 Tw [(be difficult to handle. O)5.8(ne such format is the M)11.9(icr)5.8(osoft)]TJ T* 0.025 Tw [(E)5.8(x)12(cel spr)9.7(eadsheet file.)]TJ 0 -2.1818 TD 0.249 Tw [(E)5.8(x)12(cel is the spr)9.7(eadsheet application at the hear)-7.9(t of the)]TJ 0 -1.0909 TD 0.0394 Tw [(M)12(icr)5.8(osoft O)5.8(ffice suite. I)23.9(t)0( is a popular tool for data analysis)]TJ T* 0.2546 Tw [(and r)9.7(epor)-7.9(ting, and ev)5.8(en though it is only av)5.8(ailable on)]TJ T* 0.0168 Tc 0.3581 Tw [(W)9.6(indo)11.8(ws and M)11.8(acintosh platforms ther)9.5(e is often a)]TJ T* -0.0001 Tc 0.2482 Tw [(r)9.9(equir)9.7(ement to pr)5.8(oduce E)5.8(x)12(cel compatible files on U)35.8(nix)]TJ T* 0 Tw (platforms.)Tj 7.15 0 0 7.15 106.248 361.0161 Tm 0 Tc (1)Tj 11 0 0 11 63 334.5442 Tm -0.0301 Tc 0.0219 Tw [(This ar)-7.9(ticle describes S)23.8(p)0.3(r)9.7(eadsheet::W)81.7(riteE)5.8(x)12(cel,)]TJ T* -0.0208 Tw [(a cr)5.8(oss-platform P)53.9(erl module designed to write)]TJ T* 0.094 Tw [(data in the M)11.9(icr)5.8(osoft E)5.8(x)12(cel binar)-17.9(y format. I)23.8(t)]TJ T* 0.1021 Tw [(highlights the fact that although P)53.9(erl is most)]TJ T* 0.1309 Tw [(often associated with text files, it can r)9.7(eadily)]TJ T* 0.2078 Tw [(handle binar)-17.9(y files as w)5.8(ell. )44.8(This ar)-7.9(ticle also)]TJ T* 0.2649 Tw [(looks at alternativ)5.8(e methods for pr)5.8(oducing)]TJ T* 0.2812 Tw [(E)5.8(x)12(cel files and suggests some methods for)]TJ T* 0.025 Tw [(r)9.9(eading them.)]TJ /F8 1 Tf 12 0 0 12 63 212.5442 Tm 0 Tc 0 Tw (U)Tj 10.44 0 0 10.44 71.9268 212.5442 Tm -0.0002 Tc (SING)Tj 12 0 0 12 63 198.5442 Tm 0 Tc (S)Tj 10.44 0 0 10.44 69.0469 198.5442 Tm -0.0002 Tc (PREADSHEET)Tj 12 0 0 12 134.9414 198.5442 Tm -0.0003 Tc (::W)Tj 10.44 0 0 10.44 152.6718 198.5442 Tm (RITE)Tj 12 0 0 12 176.3834 198.5442 Tm 0 Tc (E)Tj 10.44 0 0 10.44 183.3415 198.5442 Tm -0.0003 Tc [(X)23.7(CEL)]TJ /F1 1 Tf 11 0 0 11 63 172.5442 Tm -0.0001 Tc -0.0079 Tw [(A single E)5.8(x)12(cel file is generally r)9.7(e)0.1(ferr)9.7(ed to as)]TJ T* -0.0002 Tc 0 Tw (a )Tj /F5 1 Tf 0.8157 0 TD [(wor)5.7(kbook)]TJ /F1 1 Tf 3.571 0 TD -0.0001 Tc 0.1619 Tw [(. A wor)5.8(kbook is composed of)]TJ -4.3868 -1.0909 TD 0.0172 Tw [(one or mor)9.7(e)-0.1( )]TJ /F5 1 Tf 5.0166 0 TD 0 Tw [(wor)5.8(ksheets)]TJ /F1 1 Tf 3.8203 0 TD 0.0172 Tw [(, which ar)9.7(e pages of)]TJ -8.8369 -1.0909 TD 0.11 Tw [(data in r)5.8(o)12(ws and columns. Each r)5.8(o)12(w and)]TJ T* 0.3421 Tw [(column position within a wor)5.8(kbook is)]TJ 25.8182 55.8667 TD 0.025 Tw [(r)9.9(e)0.1(ferr)9.7(ed to as a )]TJ /F5 1 Tf 5.9857 0 TD -0.0002 Tc 0 Tw (cell)Tj /F1 1 Tf 1.1755 0 TD 0 Tc (.)Tj -7.1613 -2.1818 TD -0.0001 Tc 0.0201 Tw [(S)24.1(p)0.3(r)9.7(eadsheet::W)81.8(riteE)5.8(x)12(cel cr)9.7(eates a ne)-5.9(w wor)5.8(kbook to which)]TJ 0 -1.0909 TD 0.036 Tw [(y)5.8(ou can add ne)-5.9(w wor)5.8(ksheets. )14.8(Y)93.9(ou can then write text and)]TJ T* 0.1406 Tw [(numbers to the cells of these wor)5.8(ksheets. )44.9(The follo)11.9(wing)]TJ T* 0.025 Tw [(P)54(erl pr)5.8(ogram is a simple example:)]TJ /F2 1 Tf 7 0 0 7 347 659.0776 Tm -0.0002 Tc 0.06 Tw (#!/usr/bin/perl -w)Tj 0 -2.2857 TD (use strict;)Tj 0 -1.1429 TD (use Spreadsheet::WriteExcel;)Tj 0 -2.2857 TD -0.0001 Tc [(# Create a new Excel workbook called perl.xls)]TJ T* [(my $workbook = Spreadsheet::WriteExcel->new\("perl.xls"\);)]TJ T* (my $worksheet = $workbook->addworksheet\(\);)Tj -0.1 -2.2857 TD [(# Write some text and some numbers)]TJ 0 -1.1429 TD (# Row and column are zero indexed)Tj T* [($worksheet->write\(0, 0, "The Perl Journal"\);)]TJ T* [($worksheet->write\(1, 0, "One" \);)]TJ T* [($worksheet->write\(2, 0, "Two" \);)]TJ T* [($worksheet->write\(3, 0, 3 \);)]TJ T* [($worksheet->write\(4, 0, 4.0000001 \);)]TJ /F1 1 Tf 11 0 0 11 342 499.0776 Tm 0.0199 Tc 0.4111 Tw [(What is happening her)9.8(e is that w)5.8(e)0( ar)9.7(e using the)]TJ 0 -1.0909 TD -0.0001 Tc 0.2174 Tw [(S)24.1(p)0.3(r)9.7(eadsheet::W)81.8(riteE)5.8(x)12(cel module to cr)9.7(eate a v)5.8(ariable that)]TJ T* 0.0502 Tw [(acts like an E)5.8(x)12(cel wor)5.8(kbook. )14.8(W)77.8(e)0( add a single wor)5.8(ksheet to)]TJ T* 0.2467 Tw [(this wor)5.8(kbook and then write some text and numbers.)]TJ T* 0.1223 Tw [(F)34(igur)9.7(e 1 sho)11.9(ws ho)11.9(w the r)9.7(esulting file looks when opened )]TJ T* 0.025 Tw [(in E)5.8(x)12(cel.)]TJ 0 -2.1818 TD 0.2186 Tw [(The S)23.9(p)0.3(r)9.7(eadsheet::W)81.8(riteE)5.8(x)12(cel module pr)5.8(o)15.9(vides an object-)]TJ 0 -1.0909 TD -0.0261 Tw [(oriented inter)-7.9(face to a ne)-5.9(w E)5.8(x)12(cel wor)5.8(kbook. )45(This wor)5.8(kbook)]TJ T* 0.3715 Tw [(is an object \(a v)5.8(ariable\) that acts as a container for)]TJ T* 0.0129 Tc 0.362 Tw [(wor)5.8(ksheet objects \(mor)9.7(e v)5.8(ariables\), which themselv)5.8(es)]TJ 12 0 0 12 63 90.3543 Tm 0 Tc 0 Tw [(22)-1100(F)]TJ 10.44 0 0 10.44 94.2795 90.3543 Tm -0.0001 Tc (ALL)Tj 12 0 0 12 115.6277 90.3543 Tm 0 Tc (2000)Tj /F3 1 Tf 30.9897 0.0003 TD -0.0002 Tc 0.0255 Tw [(The P)47.6(erl J)35.7(our)-8(nal #19)]TJ ET 0 0 0 0 k 63 798 531 -21.17 re 587.395 90.357 m f* BT /F8 1 Tf 16 0 0 16 63 786.4766 Tm 0 0 0 1 k 0 Tc 0 Tw (S)Tj 13.92 0 0 13.92 71.0625 786.4766 Tm -0.0002 Tc (PREADSHEET)Tj 16 0 0 16 158.9218 786.4766 Tm (::W)Tj 13.92 0 0 13.92 182.5625 786.4766 Tm -0.0003 Tc (RITE)Tj 16 0 0 16 214.1779 786.4766 Tm 0 Tc (E)Tj 13.92 0 0 13.92 223.4553 786.4766 Tm -0.024 Tc [(XC)-23.7(E)-23.8(L)]TJ /F7 1 Tf 16 0 0 16 477.2781 786.4766 Tm -0.0001 Tc 0.0277 Tw [(John McNamar)19.7(a)]TJ ET /Cs10 CS 1 SCN 0 J 0 j 6 w 10 M []0 d 63 807 m 207 807 l S 0 0.03 0.3 0 k /GS1 gs 63.25 746.75 278.5 -153.09 re 594.004 786.477 m f* BT /F9 1 Tf 12 0 0 12 174.0981 732.7289 Tm 0 0 0 1 k /GS2 gs -0.0002 Tc 0 Tw [(Resour)24.7(ces)]TJ /F1 1 Tf 9 0 0 9 67.3952 719.9288 Tm 0 Tc [(S)24.2(p)0.4(r)9.8(eadsheet::W)81.8(riteE)5.9(x)12.1(cel)-36.8(.......................................................................CP)39.8(A)0.2(N)]TJ 0 -1.3111 TD [(OLE::S)23.9(torage)-19.4(.......................................................................................CP)39.8(A)0.2(N)]TJ T* [(W)9.8(in32::OLE)-122.5(.......................................................................................CP)39.8(A)0.2(N)]TJ T* -0.0001 Tc 0.025 Tw [(XML spces for E)5.8(x)12(cel)-138.6(................http://msdn.micr)5.8(osoft.com/librar)-17.9(y/officedev/)]TJ T* 0 Tc 0 Tw [(G)18(numeric)-98.1(...............................................................http://www)75(.gnumeric.org)]TJ T* [(HTML::T)109.9(ableE)5.9(xtract)-249.7(..........................................................................CP)39.8(A)0.2(N)]TJ T* -0.0001 Tc 0.025 Tw [(E)5.8(x)12(cel SDK ne)-6(wsgr)5.8(oup)-107.7(................................ne)-6(ws://micr)5.8(osoft.public.ex)11.9(cel.sdk)]TJ T* [(OLE Compound F)33.9(ile)-100.7(..http://user)59.7(.cs.tu-berlin.de/~schwar)-7.9(tz/pmh/guide.html)]TJ T* 0 Tw [(H)17.8(erber)-7.9(t)-159.3(........................................http://user)59.7(.cs.tu-berlin.de/~schwar)-7.9(tz/pmh/)]TJ T* [(F)34(ilters)-131.1(.................................................http://ar)-7.9(tur)5.8(o)15.9(.dir)9.7(ectmail.org/filtersw)5.8(eb/)]TJ T* 0 Tc [(xlHtml.......................................................................http://www)75(.xlhtml.org/)]TJ ET 0 0 0 1 K 0.5 w /GS1 gs 63.25 746.75 278.5 -153.09 re 334.216 601.929 m S BT 6 0 0 6 61.1236 109.6307 Tm /GS2 gs (1 )Tj 8 0 0 8 65.7736 107.6507 Tm -0.0001 Tc 0.0249 Tw [(S)12.1(e)0(v)5.8(eral r)-7.9(umors and some evidence of a Linux por)-7.9(t of M)11.9(icr)5.8(osoft O)5.8(ffice hav)5.8(e r)9.7(ecently come to light on S)11.9(lashdot.)]TJ ET 61.12 116.5 m 592.12 116.5 l S 0 0 0 0 k /GS1 gs 258.47 337.08 335.28 -210.83 re 410.935 107.651 m f* Q q 1 i 258.47 337.08 335.28 -210.83 re W* n q 334.7977 0 0 210.5986 259.22 125.7314 cm /Im2 Do Q Q q 1 i 27 846 603 -783 re 0 873 m W n 0 873 684 -873 re W n 0 0 0 1 K 0 J 0 j 0.5 w 10 M []0 d 258.47 337.08 335.28 -210.83 re S BT /F8 1 Tf 11 0 0 11 258.2239 344.7921 Tm 0 0 0 1 k /GS2 gs -0.0001 Tc 0.0254 Tw [(F)21.9(igur)19.7(e 1. E)5.8(xample file wr)5.8(itten with S)23.9(p)0.1(r)19.7(eadsheet::W)99.8(r)5.9(iteE)5.8(x)11.9(cel.)]TJ ET 0 0 0 0 k 335.66 591.47 5.64 -68.51 re 522.033 344.792 m f* Q 0 0 0 0 k /GS2 gs 1 i 37 874 191 -12 re f* BT /F2 1 Tf 8 0 0 8 39 864 Tm /Cs9 cs 1 scn -0.0004 Tc -0.0019 Tw (TPJ#19/9.26 9/27/00 10:35 AM Page 22)Tj ET 1 G 0 J 0 j 0.5 w 10 M []0 d 36 873 m 36 849 l 0 837 m 24 837 l 621 873 m 621 849 l 657 837 m 633 837 l 36 36 m 36 60 l 0 72 m 24 72 l 621 36 m 621 60 l 657 72 m 633 72 l S /Cs9 CS 1 SCN 0.25 w 36 873 m 36 849 l 0 837 m 24 837 l 621 873 m 621 849 l 657 837 m 633 837 l 36 36 m 36 60 l 0 72 m 24 72 l 621 36 m 621 60 l 657 72 m 633 72 l S 1 G 0.5 w 304.5 861 m 352.5 861 l 304.5 48 m 352.5 48 l 12 478.5 m 12 430.5 l 645 478.5 m 645 430.5 l 328.5 873 m 328.5 849 l 328.5 60 m 328.5 36 l 0 454.5 m 24 454.5 l 633 454.5 m 657 454.5 l 328.5 861 m 334.5 861 l 334.5 857.688 331.812 855 328.5 855 c 325.188 855 322.5 857.688 322.5 861 c 322.5 864.312 325.188 867 328.5 867 c 331.812 867 334.5 864.312 334.5 861 c 328.5 48 m 334.5 48 l 334.5 44.688 331.812 42 328.5 42 c 325.188 42 322.5 44.688 322.5 48 c 322.5 51.312 325.188 54 328.5 54 c 331.812 54 334.5 51.312 334.5 48 c 12 454.5 m 18 454.5 l 18 451.188 15.312 448.5 12 448.5 c 8.688 448.5 6 451.188 6 454.5 c 6 457.812 8.688 460.5 12 460.5 c 15.312 460.5 18 457.812 18 454.5 c 645 454.5 m 651 454.5 l 651 451.188 648.312 448.5 645 448.5 c 641.688 448.5 639 451.188 639 454.5 c 639 457.812 641.688 460.5 645 460.5 c 648.312 460.5 651 457.812 651 454.5 c S /Cs9 CS 1 SCN 0.25 w 304.5 861 m 352.5 861 l 304.5 48 m 352.5 48 l 12 478.5 m 12 430.5 l 645 478.5 m 645 430.5 l 328.5 873 m 328.5 849 l 328.5 60 m 328.5 36 l 0 454.5 m 24 454.5 l 633 454.5 m 657 454.5 l 328.5 861 m 334.5 861 l 334.5 857.688 331.812 855 328.5 855 c 325.188 855 322.5 857.688 322.5 861 c 322.5 864.312 325.188 867 328.5 867 c 331.812 867 334.5 864.312 334.5 861 c 328.5 48 m 334.5 48 l 334.5 44.688 331.812 42 328.5 42 c 325.188 42 322.5 44.688 322.5 48 c 322.5 51.312 325.188 54 328.5 54 c 331.812 54 334.5 51.312 334.5 48 c 12 454.5 m 18 454.5 l 18 451.188 15.312 448.5 12 448.5 c 8.688 448.5 6 451.188 6 454.5 c 6 457.812 8.688 460.5 12 460.5 c 15.312 460.5 18 457.812 18 454.5 c 645 454.5 m 651 454.5 l 651 451.188 648.312 448.5 645 448.5 c 641.688 448.5 639 451.188 639 454.5 c 639 457.812 641.688 460.5 645 460.5 c 648.312 460.5 651 457.812 651 454.5 c S endstream endobj 65 0 obj << /Type /XObject /Subtype /Image /Width 186 /Height 117 /BitsPerComponent 8 /ColorSpace 272 0 R /Length 1106 /Filter /FlateDecode >> stream H엋 E֪̠,>*5U,Quq]yp!>19=]ot%tJ41F.T,F(b<9;zx۫lJN7˖-v6Im \-]&p fiOO?CAos&^1/:=v07S䂦 MeO5yݜ"W~G{Ͽ8yNa/ɵbmz-F\0,4vX%Qyd.Y\fWi9rH<)W[CoIrr=cw~̖!ysϑ%Rɡ' &cd{Ԗ;L[=EAq>%yn14lF1ٚh+7kgQyDj^"%7U1Zr /7 ȝɖ kggI<:BGEEFnXbByK q nH~~K"w'm0rr\܅呛'Ɂ׊QrZGߗ@r1![B=T[7{&Y*OL{Ushb/s^+”b1+C!_Y4U!vj=ٿZ*kHEMF֖*?;M7Fhy%3QH#e1y%#t-Y PT_5xƄiLď![џ\)q̶A9GDkBgFD. B"ޟTs-XD.Fi|90909P{dVjg[na!9͐IHx?Б|O$o<'&gdK>eK{=LiO x̴|/i۰tSgSLLJzOwF endstream endobj 66 0 obj << /Type /Page /Parent 493 0 R /Resources 67 0 R /Contents 68 0 R /Thumb 365 0 R /MediaBox [ 0 0 684 873 ] /CropBox [ 0 0 684 873 ] /Rotate 0 >> endobj 67 0 obj << /ProcSet [ /PDF /Text ] /Font << /F1 515 0 R /F2 518 0 R /F3 261 0 R /F8 268 0 R >> /ExtGState << /GS1 523 0 R /GS2 521 0 R >> /ColorSpace << /Cs9 520 0 R >> >> endobj 68 0 obj << /Length 8005 >> stream 1 g /GS1 gs 0 873 m 0 873 l f q 1 i 27 846 603 -783 re 0 873 m W n 0 873 684 -873 re W n BT /F1 1 Tf 11 0 0 11 63 802.0776 Tm 0 0 0 1 k /GS2 gs -0.0001 Tc 0.025 Tw [(pr)5.8(o)15.9(vide methods \(functions\) for writing to their cells.)]TJ 0 -2.1818 TD 0.0199 Tc 0.4023 Tw [(The primar)-17.9(y method of the module is the )]TJ /F2 1 Tf 9 0 0 9 287.2871 778.0776 Tm 0 Tw (new\(\))Tj /F1 1 Tf 11 0 0 11 63 766.0776 Tm -0.0001 Tc 0.1976 Tw [(constr)-7.9(uctor)59.7(,)0( which takes a filename as its argument and)]TJ 0 -1.0909 TD 0.025 Tw [(cr)9.7(eates a ne)-5.9(w E)5.8(x)12(cel wor)5.8(kbook:)]TJ /F2 1 Tf 7 0 0 7 63 734.0776 Tm 0.0599 Tw ($workbook = Spreadsheet::WriteExcel->new\($filename\);)Tj /F1 1 Tf 11 0 0 11 63 710.0776 Tm 0.0265 Tw [(The wor)5.8(kbook is then used to cr)9.7(eate ne)-5.9(w wor)5.8(ksheets using)]TJ T* 0 Tw (the )Tj /F2 1 Tf 9 0 0 9 79.4205 698.0776 Tm -0.0002 Tc (addworksheet\(\))Tj /F1 1 Tf 11 0 0 11 158.0271 698.0776 Tm -0.0001 Tc (method:)Tj /F2 1 Tf 7 0 0 7 63 678.0776 Tm 0.0599 Tw [($worksheet = $workbook->addworksheet\($sheetname\);)]TJ /F1 1 Tf 11 0 0 11 63 654.0776 Tm -0.0151 Tc 0.089 Tw [(I)5.9(f)0( no )]TJ /F2 1 Tf 9 0 0 9 87.4258 654.0776 Tm 0 Tw ($sheetname)Tj /F1 1 Tf 11 0 0 11 143.6264 654.0776 Tm 0.089 Tw [(is specified, the general E)5.8(x)12(cel conv)5.8(ention)]TJ -7.3297 -1.0909 TD -0.0186 Tw [(for wor)5.8(ksheet naming will be follo)11.9(w)5.8(ed: S)11.9(heet1, S)11.9(heet2, and so)]TJ T* [(on. )44.9(The wor)5.8(ksheets ar)9.7(e stor)9.7(ed in an array called )]TJ /F2 1 Tf 9 0 0 9 256.9645 630.0776 Tm 0 Tw (@worksheets)Tj /F1 1 Tf 11 0 0 11 63 618.0776 Tm 0.025 Tw [(which can be accessed thr)5.8(ough the wor)5.8(kbook object.)]TJ 0 -2.1818 TD -0.0001 Tc 0.0397 Tw [(I)12(n)0( a multi-sheet wor)5.8(kbook y)5.8(ou can select which wor)5.8(ksheet)]TJ 0 -1.0909 TD 0.025 Tw (is initially visible with the )Tj /F2 1 Tf 9 0 0 9 175.8629 582.0776 Tm -0.0002 Tc 0 Tw (activate\(\))Tj /F1 1 Tf 11 0 0 11 232.8748 582.0776 Tm -0.0001 Tc (method.)Tj -15.4432 -2.1818 TD 0.1227 Tw [(The wor)5.8(ksheet objects pr)5.8(o)15.9(vide the follo)11.9(wing methods for)]TJ 0 -1.0909 TD 0.025 Tw (writing to cells:)Tj /F2 1 Tf 7 0 0 7 99.9512 526.0776 Tm -0.0002 Tc 0.06 Tw (write\($row, $column, $token\))Tj 0 -1.1429 TD (write_number\($row, $column, $number\))Tj T* (write_string\($row, $column, $string\))Tj /F1 1 Tf 11 0 0 11 63 486.0776 Tm -0.0001 Tc 0 Tw (The )Tj /F2 1 Tf 9 0 0 9 84.0439 486.0776 Tm -0.0002 Tc (write\(\))Tj /F1 1 Tf 11 0 0 11 125.5998 486.0776 Tm -0.0001 Tc 0.0923 Tw (method is an alias for one of the other two)Tj -5.6909 -1.0909 TD 0.1441 Tw [(write methods. I)23.9(t)0( calls )]TJ /F2 1 Tf 9 0 0 9 165.7521 474.0776 Tm -0.0002 Tc 0 Tw (write_number\(\))Tj /F1 1 Tf 11 0 0 11 245.6682 474.0776 Tm (if )Tj /F2 1 Tf 9 0 0 9 256.0157 474.0776 Tm ($token)Tj /F1 1 Tf 11 0 0 11 292.7423 474.0776 Tm -0.0001 Tc (looks)Tj -20.8857 -1.0909 TD 0.025 Tw [(like a number accor)13.8(ding to the follo)11.9(wing r)9.7(egex:)]TJ /F2 1 Tf 7 0 0 7 63 442.0776 Tm -0.0051 Tc 0.0599 Tw ($token =~ /^\([+-]?\)\(?=\\d|\\.\\d\)\\d*\(\\.\\d*\)?\([Ee]\([+-]?\\d+\)\)?$/)Tj /F1 1 Tf 11 0 0 11 63 418.0776 Tm -0.0198 Tw [(O)5.8(ther)-17.9(wise it calls )]TJ /F2 1 Tf 9 0 0 9 137.4909 418.0776 Tm 0 Tw (write_string\(\))Tj /F1 1 Tf 11 0 0 11 212.4427 418.0776 Tm -0.0197 Tw [(. I)5.8(f)0( y)5.8(ou kno)11.9(w in adv)5.8(ance)]TJ -13.5857 -1.0909 TD 0.2139 Tw [(what type of data needs to be written, y)5.7(ou can call the)]TJ T* 0.025 Tw [(specific method, and other)-18(wise y)5.8(ou can just use )]TJ /F2 1 Tf 9 0 0 9 267.0415 394.0776 Tm 0 Tw (write\(\))Tj /F1 1 Tf 11 0 0 11 304.5174 394.0776 Tm 0 Tc (.)Tj -21.9561 -2.1818 TD -0.0001 Tc 0.1206 Tw [(H)17.8(e)0.1(r)9.7(e)0( is another example that demonstrates some of these)]TJ 0 -1.0909 TD 0 Tw [(featur)9.7(es:)]TJ /F2 1 Tf 7 0 0 7 63 338.0776 Tm -0.0002 Tc 0.06 Tw (#!/usr/bin/perl -w)Tj 0 -2.2857 TD (use strict;)Tj 0 -1.1429 TD (use Spreadsheet::WriteExcel;)Tj 0 -2.2857 TD (# Create a new Excel workbook)Tj 0 -1.1429 TD -0.0001 Tc [(my $workbook = Spreadsheet::WriteExcel->new\("regions.xls"\);)]TJ 0 -2.2857 TD -0.0002 Tc (# Add some worksheets)Tj 0 -1.1429 TD (my $north = $workbook->addworksheet\("North"\);)Tj T* (my $south = $workbook->addworksheet\("South"\);)Tj T* [(my $east = $workbook->addworksheet\("East"\);)]TJ T* [(my $west = $workbook->addworksheet\("West"\);)]TJ 0 -2.2857 TD [(# Add a caption to each worksheet)]TJ 0 -1.1429 TD -0.0001 Tc [(foreach my $worksheet \(@{$workbook->{worksheets}}\) {)]TJ 1.9795 -1.1429 TD -0.0002 Tc ($worksheet->write\(0, 0, "Sales"\);)Tj -1.9795 -1.1429 TD 0 Tc 0 Tw (})Tj 0 -2.2857 TD -0.0002 Tc 0.06 Tw (# Write some data)Tj 0 -1.1429 TD ($north->write\(0, 1, 200000\);)Tj T* ($south->write\(0, 1, 100000\);)Tj T* ($east->write \(0, 1, 150000\);)Tj T* ($west->write \(0, 1, 100000\);)Tj 0 -2.2857 TD (# Set the active worksheet)Tj 0 -1.1429 TD 0 Tw ($south->activate\(\);)Tj /F1 1 Tf 12 0 0 12 517.3723 90.3543 Tm 0 Tc (F)Tj 10.44 0 0 10.44 523.4518 90.3543 Tm -0.0001 Tc (ALL)Tj 12 0 0 12 544.7999 90.3543 Tm 0 Tc 0.025 Tw [(2000 23)]TJ /F3 1 Tf -40.15 0 TD -0.0002 Tc 0.0255 Tw [(The P)47.6(erl J)35.7(our)-8(nal #19)]TJ ET 0 0 0 0.1 k /GS1 gs 342.5 809.5 251 -341 re 162.892 90.354 m f* 0 0 0 1 K 0 J 0 j 1 w 10 M []0 d 342.5 809.5 251 -341 re S BT /F8 1 Tf 24 0 0 24 401.2161 662.3976 Tm 0 0 0 1 k /GS2 gs [(P)11.9(ERL CONF)139.7(.)]TJ 1.0549 -1.2 TD (1/4 page)Tj 0.1088 -1.2 TD [(P)11.9(i)-0.1(ck U)29.6(p)]TJ ET 0 0 0 0.1 k /GS1 gs 342.5 458.5 251 -341 re 506.857 604.798 m f* 342.5 458.5 251 -341 re S BT 24 0 0 24 390.7114 311.3976 Tm 0 0 0 1 k /GS2 gs 0 Tw [(INDIGO)-255.1(ST)88.7(AR)]TJ 1.4926 -1.2 TD 0.0255 Tw (1/4 page)Tj 0.57 -1.2 TD -0.0004 Tc 0 Tw [(NE)11.6(W)]TJ ET Q 0 0 0 0 k /GS2 gs 1 i 37 874 191 -12 re 495.79 253.798 m f* BT /F2 1 Tf 8 0 0 8 39 864 Tm /Cs9 cs 1 scn -0.0004 Tc -0.0019 Tw (TPJ#19/9.26 9/27/00 10:35 AM Page 23)Tj ET 1 G 0 J 0 j 0.5 w 10 M []0 d 36 873 m 36 849 l 0 837 m 24 837 l 621 873 m 621 849 l 657 837 m 633 837 l 36 36 m 36 60 l 0 72 m 24 72 l 621 36 m 621 60 l 657 72 m 633 72 l S /Cs9 CS 1 SCN 0.25 w 36 873 m 36 849 l 0 837 m 24 837 l 621 873 m 621 849 l 657 837 m 633 837 l 36 36 m 36 60 l 0 72 m 24 72 l 621 36 m 621 60 l 657 72 m 633 72 l S 1 G 0.5 w 304.5 861 m 352.5 861 l 304.5 48 m 352.5 48 l 12 478.5 m 12 430.5 l 645 478.5 m 645 430.5 l 328.5 873 m 328.5 849 l 328.5 60 m 328.5 36 l 0 454.5 m 24 454.5 l 633 454.5 m 657 454.5 l 328.5 861 m 334.5 861 l 334.5 857.688 331.812 855 328.5 855 c 325.188 855 322.5 857.688 322.5 861 c 322.5 864.312 325.188 867 328.5 867 c 331.812 867 334.5 864.312 334.5 861 c 328.5 48 m 334.5 48 l 334.5 44.688 331.812 42 328.5 42 c 325.188 42 322.5 44.688 322.5 48 c 322.5 51.312 325.188 54 328.5 54 c 331.812 54 334.5 51.312 334.5 48 c 12 454.5 m 18 454.5 l 18 451.188 15.312 448.5 12 448.5 c 8.688 448.5 6 451.188 6 454.5 c 6 457.812 8.688 460.5 12 460.5 c 15.312 460.5 18 457.812 18 454.5 c 645 454.5 m 651 454.5 l 651 451.188 648.312 448.5 645 448.5 c 641.688 448.5 639 451.188 639 454.5 c 639 457.812 641.688 460.5 645 460.5 c 648.312 460.5 651 457.812 651 454.5 c S /Cs9 CS 1 SCN 0.25 w 304.5 861 m 352.5 861 l 304.5 48 m 352.5 48 l 12 478.5 m 12 430.5 l 645 478.5 m 645 430.5 l 328.5 873 m 328.5 849 l 328.5 60 m 328.5 36 l 0 454.5 m 24 454.5 l 633 454.5 m 657 454.5 l 328.5 861 m 334.5 861 l 334.5 857.688 331.812 855 328.5 855 c 325.188 855 322.5 857.688 322.5 861 c 322.5 864.312 325.188 867 328.5 867 c 331.812 867 334.5 864.312 334.5 861 c 328.5 48 m 334.5 48 l 334.5 44.688 331.812 42 328.5 42 c 325.188 42 322.5 44.688 322.5 48 c 322.5 51.312 325.188 54 328.5 54 c 331.812 54 334.5 51.312 334.5 48 c 12 454.5 m 18 454.5 l 18 451.188 15.312 448.5 12 448.5 c 8.688 448.5 6 451.188 6 454.5 c 6 457.812 8.688 460.5 12 460.5 c 15.312 460.5 18 457.812 18 454.5 c 645 454.5 m 651 454.5 l 651 451.188 648.312 448.5 645 448.5 c 641.688 448.5 639 451.188 639 454.5 c 639 457.812 641.688 460.5 645 460.5 c 648.312 460.5 651 457.812 651 454.5 c S endstream endobj 69 0 obj << /Type /Page /Parent 493 0 R /Resources 70 0 R /Contents 71 0 R /Thumb 367 0 R /MediaBox [ 0 0 684 873 ] /CropBox [ 0 0 684 873 ] /Rotate 0 >> endobj 70 0 obj << /ProcSet [ /PDF /Text /ImageC /ImageI ] /Font << /F1 515 0 R /F2 518 0 R /F3 261 0 R /F5 262 0 R /F8 268 0 R >> /XObject << /Im3 72 0 R >> /ExtGState << /GS1 523 0 R /GS2 521 0 R >> /ColorSpace << /Cs9 520 0 R /Cs12 274 0 R >> >> endobj 71 0 obj << /Length 10767 >> stream 1 g /GS1 gs 0 873 m 0 873 l f q 1 i 27 846 603 -783 re 0 873 m W n 0 873 684 -873 re W n BT /F1 1 Tf 11 0 0 11 63 802.0776 Tm 0 0 0 1 k /GS2 gs -0.0001 Tc 0.025 Tw [(The output fr)5.8(om this pr)5.8(ogram is sho)11.9(wn in F)33.9(igur)9.7(e 2.)]TJ 0 -2.1818 TD 0.1059 Tw [(Y)93.9(ou can also cr)9.7(eate a ne)-5.9(w E)5.8(x)12(cel file using the special P)53.9(erl)]TJ 0 -1.0909 TD 0 Tw (filehandle )Tj /F2 1 Tf 9 0 0 9 107.6507 766.0776 Tm 0 Tc (-)Tj /F1 1 Tf 11 0 0 11 113.0494 766.0776 Tm -0.0001 Tc 0.0245 Tw [(, which r)9.7(edir)9.7(ects the output to STDOUT)119.8(. )44.9(This)]TJ -4.5499 -1.0909 TD 0.0265 Tw [(is useful for CGI pr)5.8(ograms generating data with a content-)]TJ T* 0.025 Tw (type of )Tj /F2 1 Tf 9 0 0 9 95.7068 742.0776 Tm -0.0002 Tc 0 Tw (application/vnd.ms-excel)Tj /F1 1 Tf 11 0 0 11 225.2751 742.0776 Tm 0 Tc (.)Tj /F2 1 Tf 7 0 0 7 76.8567 722.0776 Tm -0.0002 Tc 0.06 Tw (#!/usr/bin/perl -w)Tj 0 -2.2857 TD (use strict;)Tj 0 -1.1428 TD (use Spreadsheet::WriteExcel;)Tj 0 -2.2857 TD (# Send the content type)Tj 0 -1.1429 TD -0.0001 Tc [(print "Content-type: application/vnd.ms-excel\\n\\n";)]TJ 0 -2.2857 TD -0.0002 Tc (# Redirect the output to STDOUT)Tj 0 -1.1429 TD -0.0001 Tc [(my $workbook = Spreadsheet::WriteExcel->new\("-"\);)]TJ 0 -2.2857 TD -0.0002 Tc [(my $worksheet = $workbook->addworksheet\(\);)]TJ 0 -1.1429 TD [($worksheet->write\(0, 0, "The Perl Journal"\);)]TJ /F1 1 Tf 11 0 0 11 63 350.0776 Tm -0.0151 Tc -0.0045 Tw [(The S)23.9(p)0.3(r)9.7(eadsheet::W)81.8(riteE)5.8(x)12(cel module also pr)5.8(o)15.9(vides a )]TJ /F2 1 Tf 9 0 0 9 278.0192 350.0776 Tm 0 Tw (close\(\))Tj /F1 1 Tf 11 0 0 11 63 338.0776 Tm 0.0081 Tw [(method which can be used to close the E)5.7(x)12(cel file explicitly)84.9(. As)]TJ 0 -1.0909 TD 0.1522 Tw (usual, the file will be closed automatically when the object)Tj T* 0.025 Tw [(r)9.9(efer)9.7(ence goes out of scope or when the pr)5.8(ogram ends.)]TJ 0 -2.1818 TD -0.0001 Tc 0.0915 Tw [(F)34(inally)84.9(,)0( the follo)11.9(wing is a slightly mor)9.7(e useful example )]TJ 0 -1.0909 TD 0.1637 Tw [(a P)53.9(e)0.1(rl pr)5.8(ogram that conv)5.8(er)-7.9(ts a tab-delimited file into an)]TJ T* 0.025 Tw [(E)5.8(x)12(cel file:)]TJ /F2 1 Tf 7 0 0 7 76.8567 246.0775 Tm -0.0002 Tc 0.06 Tw (#!/usr/bin/perl -w)Tj 0 -2.2857 TD (use strict;)Tj 0 -1.1429 TD (use Spreadsheet::WriteExcel;)Tj 0 -2.2857 TD (# Check for valid number of arguments)Tj 0 -1.1429 TD (if \(\($#ARGV < 1\) || \($#ARGV > 2\)\) {)Tj 2.6394 -1.1429 TD (die\("Usage: tab2xls tabfile.txt newfile.xls\\n"\);)Tj -2.6394 -1.1429 TD -0.0003 Tc 0 Tw (};)Tj 0 -2.2857 TD -0.0002 Tc 0.06 Tw (# Open the tab-delimited file)Tj 0 -1.1429 TD [(open \(TABFILE, $ARGV[0]\) or die "$ARGV[0]: $!";)]TJ 0 -2.2857 TD (# Create a new Excel workbook)Tj 0 -1.1429 TD -0.0001 Tc [(my $workbook = Spreadsheet::WriteExcel->new\($ARGV[1]\);)]TJ T* -0.0002 Tc [(my $worksheet = $workbook->addworksheet\(\);)]TJ 39.8571 97.0294 TD -0.0001 Tc [(# Row and column are zero indexed)]TJ 0 -1.1429 TD -0.0002 Tc (my $row = 0;)Tj 0 -2.2857 TD (while \(\) {)Tj 2.6394 -1.1429 TD 0 Tw (chomp;)Tj T* 0.06 Tw [(# Split on single tab)]TJ T* [(my @Fld = split\('\\t', $_\);)]TJ 0 -2.2857 TD (my $col = 0;)Tj 0 -1.1429 TD [(foreach my $token \(@Fld\) {)]TJ 2.6394 -1.1429 TD -0.0001 Tc ($worksheet->write\($row, $col, $token\);)Tj T* -0.0002 Tc 0 Tw ($col++;)Tj -2.6394 -1.1429 TD 0 Tc (})Tj T* -0.0002 Tc ($row++;)Tj -2.6394 -1.1429 TD 0 Tc (})Tj /F8 1 Tf 12 0 0 12 342 667.2832 Tm (H)Tj 10.44 0 0 10.44 351.9812 667.2832 Tm 0.0227 Tc [(O)51.5(W)-381.2(THE)]TJ 12 0 0 12 400.2431 667.2832 Tm 0 Tc (S)Tj 10.44 0 0 10.44 406.5299 667.2832 Tm 0.0228 Tc (PREADSHEET)Tj 12 0 0 12 474.824 667.2832 Tm 0.0197 Tc (::W)Tj 10.44 0 0 10.44 493.2744 667.2832 Tm 0.0227 Tc (RITE)Tj 12 0 0 12 517.9458 667.2832 Tm 0 Tc (E)Tj 10.44 0 0 10.44 525.1438 667.2832 Tm 0.0227 Tc [(X)23.7(CEL)]TJ 12 0 0 12 342 653.2832 Tm 0 Tc (M)Tj 10.44 0 0 10.44 353.2907 653.2832 Tm 0.0228 Tc (ODULE)Tj 12 0 0 12 393.837 653.2831 Tm 0 Tc (W)Tj 10.44 0 0 10.44 405.5042 653.2831 Tm 0.0228 Tc (ORKS)Tj /F1 1 Tf 11 0 0 11 342 627.2832 Tm -0.0001 Tc 0.0975 Tw [(W)77.8(e)29.7()12(ll no)11.9(w turn to the str)-7.9(uctur)9.7(e of the module, discussing)]TJ 0 -1.0909 TD 0.1385 Tw [(the E)5.8(x)12(cel format, a histor)-17.9(y of the module)29.7()79.9(s)0( dev)5.8(elopment,)]TJ 10.3874 -1.0909 TD 0.0046 Tc 0.3703 Tw [(and the glor)-17.9(y of P)53.9(erl)11.9()79.9(s)-0.1( )]TJ /F2 1 Tf 9 0 0 9 572.2781 603.2832 Tm 0.0045 Tc 0 Tw (pack)Tj /F1 1 Tf 11 0 0 11 456.2614 591.2832 Tm -0.0001 Tc (builtin.)Tj /F8 1 Tf 12 0 0 12 456.2614 565.2832 Tm 0 Tc (T)Tj 10.44 0 0 10.44 464.684 565.2831 Tm 0.0225 Tc (HE)Tj 12 0 0 12 483.2966 565.2831 Tm 0 Tc (E)Tj 10.44 0 0 10.44 490.4945 565.2831 Tm 0.0227 Tc [(X)23.7(CEL)]TJ 12 0 0 12 520.7152 565.2831 Tm 0 Tc (B)Tj 10.44 0 0 10.44 528.4785 565.2831 Tm 0.0227 Tc [(INAR)44.6(Y)]TJ 12 0 0 12 456.2614 551.2832 Tm 0 Tc (I)Tj 10.44 0 0 10.44 460.7465 551.2832 Tm 0.0228 Tc [(NTER)35.7(CHANGE)]TJ 12 0 0 12 538.7494 551.2832 Tm 0 Tc (F)Tj 10.44 0 0 10.44 545.3849 551.2832 Tm 0.0227 Tc (ILE)Tj 12 0 0 12 456.2614 537.2832 Tm 0 Tc (F)Tj 10.44 0 0 10.44 462.8969 537.2832 Tm 0.0228 Tc [(ORMA)81.6(T)]TJ /F1 1 Tf 11 0 0 11 456.2614 511.2832 Tm 0.0199 Tc 0.9284 Tw [(E)5.8(x)12(cel data is stor)9.7(ed in )]TJ T* 0 Tw (the )Tj /F5 1 Tf 2.1695 0 TD 0.6218 Tw [(B)12.1(inar)-17.9(y I)23.9(nter)11.9(change F)11.9(ile)]TJ -2.1695 -1.0909 TD 0.0033 Tc 0 Tw [(F)29.6(o)0.2(r)-8(mat)]TJ /F1 1 Tf 2.7351 0 TD 0.0034 Tc 0.3715 Tw [(, also kno)11.9(wn as BIFF)139.8(.)]TJ -2.7351 -1.0909 TD -0.0001 Tc 0.1222 Tw [(D)6(etails of this format ar)9.7(e giv)5.8(en)]TJ T* 0.2752 Tw [(in the E)5.8(x)12(cel SDK, the E)5.8(x)12(cel)]TJ T* 0.0224 Tw [(D)6(e)0(v)5.8(eloper)19.7()79.9(s)0( Kit)17.7( fr)5.8(om M)11.9(icr)5.8(osoft)]TJ T* 0.1458 Tw [(P)29.9(r)9.9(ess. I)23.9(t)0( is also included in the)]TJ T* 0.2462 Tw [(MSDN CD librar)-17.9(y)84.9(,)-0.1( but is no)]TJ T* 0.1537 Tw [(longer av)5.8(ailable on the MSDN )]TJ T* 0.2157 Tw [(w)5.8(e)-0.1(b site. I)17.7(ssues r)9.7(elating to the)]TJ T* 0.0199 Tc 0.8015 Tw [(E)5.8(x)12(cel SDK ar)9.7(e discussed,)]TJ T* 6.4805 Tw [(occasionally)84.9(, at)]TJ -10.3874 -2.1818 TD -0.0001 Tc 0 Tw [(ne)-5.9(ws://micr)5.8(osoft.public.ex)11.9(cel.sdk.)]TJ T* 0.008 Tc 0.3669 Tw [(The BIFF por)-7.9(tion of the E)5.7(x)12(cel file is composed of)]TJ 0 -1.0909 TD -0.0001 Tc 0.0077 Tw [(contiguous binar)-17.9(y r)9.7(ecor)13.8(ds that hav)5.8(e differ)9.7(ent functions and)]TJ T* 0.0186 Tw [(hold differ)9.7(ent types of data. Each BIFF r)9.7(ecor)13.8(d)0( is composed)]TJ T* 0.025 Tw [(of the follo)11.9(wing thr)9.7(ee par)-7.9(ts:)]TJ 0 -8.7273 TD 0.0798 Tw [(The BIFF data is stor)9.7(ed along with other data in an OLE)]TJ 0 -1.0909 TD 0.1622 Tw [(Compound F)33.9(ile. )44.8(This is a str)-7.9(uctur)9.7(ed storage format that)]TJ T* 0.195 Tw [(acts like a filesystem within a file. A Compound F)33.9(ile is)]TJ T* 0.1122 Tw (composed of )Tj /F5 1 Tf 5.3931 0 TD -0.0002 Tc 0 Tw [(stor)29.6(ages)]TJ /F1 1 Tf 3.0585 0 TD (and )Tj /F5 1 Tf 1.7997 0 TD -0.0001 Tc [(str)19.7(eams)]TJ /F1 1 Tf 3.0096 0 TD 0.1122 Tw [(which, to follo)11.9(w the file)]TJ -13.2609 -1.0909 TD 0.0553 Tw [(system analogy)84.9(, ar)9.7(e like dir)9.7(ectories and files. )44.8(This is sho)11.9(wn)]TJ T* 0.025 Tw [(schematically in F)33.9(igur)9.7(e 2.)]TJ 12 0 0 12 63 90.3543 Tm 0 Tc 0 Tw [(24)-1100(F)]TJ 10.44 0 0 10.44 94.2795 90.3543 Tm -0.0001 Tc (ALL)Tj 12 0 0 12 115.6277 90.3543 Tm 0 Tc (2000)Tj /F3 1 Tf 30.9897 0.0003 TD -0.0002 Tc 0.0255 Tw [(The P)47.6(erl J)35.7(our)-8(nal #19)]TJ ET 0 0.03 0.3 0 k /GS1 gs 342.25 278.29 251.5 -54.75 re 587.395 90.357 m f* 0 0 0 1 K 0 J 0 j 0.5 w 10 M []0 d 342.25 278.29 251.5 -54.75 re S BT /F1 1 Tf 10.5 0 0 10.5 348.8942 266.4752 Tm 0 0 0 1 k /GS2 gs -0.0001 Tc 0.025 Tw [(R)12.1(ecor)13.8(d)0( name)-1824.7(A hexadecimal identifier \(2 b)5.8(ytes\))]TJ 0 -1.7143 TD [(R)12.1(ecor)13.8(d)0( length)-1500.9(The length of follo)11.9(wing data \(2 b)5.8(ytes\))]TJ T* [(R)12.1(ecor)13.8(d)0.1( data)-2313(The data, which can be of v)5.8(ariable length)]TJ ET 346.1 260.54 m 591 260.54 l 346.1 241.54 m 591 241.54 l S 0 0 0 0 k /GS1 gs 63.24 593.28 384.78 -221.45 re 591.113 230.475 m f* q 384.2458 0 0 221.0729 63.49 371.9671 cm /Im3 Do Q 0.487 w 63.24 593.28 384.78 -221.45 re S /GS2 gs 63 608.91 252 -12.84 re f* BT /F8 1 Tf 11 0 0 11 63 600.983 Tm 0 0 0 1 k 0.0255 Tw [(F)21.9(igur)19.7(e 2. A multiple wor)5.8(ksheet example.)]TJ ET Q 0 0 0 0 k /GS2 gs 1 i 37 874 191 -12 re 240.683 600.983 m f* BT /F2 1 Tf 8 0 0 8 39 864 Tm /Cs9 cs 1 scn -0.0004 Tc -0.0019 Tw (TPJ#19/9.26 9/27/00 10:35 AM Page 24)Tj ET 1 G 0 J 0 j 0.5 w 10 M []0 d 36 873 m 36 849 l 0 837 m 24 837 l 621 873 m 621 849 l 657 837 m 633 837 l 36 36 m 36 60 l 0 72 m 24 72 l 621 36 m 621 60 l 657 72 m 633 72 l S /Cs9 CS 1 SCN 0.25 w 36 873 m 36 849 l 0 837 m 24 837 l 621 873 m 621 849 l 657 837 m 633 837 l 36 36 m 36 60 l 0 72 m 24 72 l 621 36 m 621 60 l 657 72 m 633 72 l S 1 G 0.5 w 304.5 861 m 352.5 861 l 304.5 48 m 352.5 48 l 12 478.5 m 12 430.5 l 645 478.5 m 645 430.5 l 328.5 873 m 328.5 849 l 328.5 60 m 328.5 36 l 0 454.5 m 24 454.5 l 633 454.5 m 657 454.5 l 328.5 861 m 334.5 861 l 334.5 857.688 331.812 855 328.5 855 c 325.188 855 322.5 857.688 322.5 861 c 322.5 864.312 325.188 867 328.5 867 c 331.812 867 334.5 864.312 334.5 861 c 328.5 48 m 334.5 48 l 334.5 44.688 331.812 42 328.5 42 c 325.188 42 322.5 44.688 322.5 48 c 322.5 51.312 325.188 54 328.5 54 c 331.812 54 334.5 51.312 334.5 48 c 12 454.5 m 18 454.5 l 18 451.188 15.312 448.5 12 448.5 c 8.688 448.5 6 451.188 6 454.5 c 6 457.812 8.688 460.5 12 460.5 c 15.312 460.5 18 457.812 18 454.5 c 645 454.5 m 651 454.5 l 651 451.188 648.312 448.5 645 448.5 c 641.688 448.5 639 451.188 639 454.5 c 639 457.812 641.688 460.5 645 460.5 c 648.312 460.5 651 457.812 651 454.5 c S /Cs9 CS 1 SCN 0.25 w 304.5 861 m 352.5 861 l 304.5 48 m 352.5 48 l 12 478.5 m 12 430.5 l 645 478.5 m 645 430.5 l 328.5 873 m 328.5 849 l 328.5 60 m 328.5 36 l 0 454.5 m 24 454.5 l 633 454.5 m 657 454.5 l 328.5 861 m 334.5 861 l 334.5 857.688 331.812 855 328.5 855 c 325.188 855 322.5 857.688 322.5 861 c 322.5 864.312 325.188 867 328.5 867 c 331.812 867 334.5 864.312 334.5 861 c 328.5 48 m 334.5 48 l 334.5 44.688 331.812 42 328.5 42 c 325.188 42 322.5 44.688 322.5 48 c 322.5 51.312 325.188 54 328.5 54 c 331.812 54 334.5 51.312 334.5 48 c 12 454.5 m 18 454.5 l 18 451.188 15.312 448.5 12 448.5 c 8.688 448.5 6 451.188 6 454.5 c 6 457.812 8.688 460.5 12 460.5 c 15.312 460.5 18 457.812 18 454.5 c 645 454.5 m 651 454.5 l 651 451.188 648.312 448.5 645 448.5 c 641.688 448.5 639 451.188 639 454.5 c 639 457.812 641.688 460.5 645 460.5 c 648.312 460.5 651 457.812 651 454.5 c S endstream endobj 72 0 obj << /Type /XObject /Subtype /Image /Width 219 /Height 126 /BitsPerComponent 8 /ColorSpace 274 0 R /Length 1697 /Filter /FlateDecode >> stream H c6jȴˬ~ZooVunݾߴsN E̓$aZqgC2oM"h6)UhU4^Uh,c"Q!sٮEh"aPo@[9 9.r)QU-ڪܶ c9!Z -^jNքf٤/ituA>RutHut^A0 Qp|=]_gru; 5;BS)l'! I$#S d\iVɺ+@Zz!pT4 ~wIsƒD=>Kk'ZĦ$B;=;?& 6XjwPٺ>h@y6u<6ҚZ i<8ʵ?"4gp5Y8Ǻ@. >h: 3 ,B"2ɦ0mrষmCGhv! ~՜ق|;ilh4h: MVuM$6-MɵYkYhs\V3Оr vEڶ&Q&ZD:˄k&Z?L Ќ$47XgKɐװ,@}MrM6AI MM >tMͧ4eȵF#ݝ%0"AOnž\=0SBz=-152v8"6l(Ak_F4o/ܥwEi-4ަ~f.JԌo*%+=+5MMh<&hy^=(L{B{^͇D+ZEh/qaюصW"\re42#2ӜܿfUY^y*^[%H6B m[Y`HwK.OC{ 3Ӟ oChsi^M)"4V{x(-m\kXE.k[!UC3nɊ2\[-C^5BٷyU_-^?d1\@kF ѼZUMXB4;3޸&5fo8\+9dH;ьť]hf{,NV׬u yX~NR4"ueW}g#L J=[fRto\*Y5{,hMj)7EKTM#ڀ≖NRJzQ~W-ZW} 1[<] i'a)IU{c<#4!T"y4&v-?|y")ӯs|!ZMWۑLV4m@%b/'-L endstream endobj 73 0 obj << /Type /Page /Parent 493 0 R /Resources 74 0 R /Contents 75 0 R /Thumb 369 0 R /MediaBox [ 0 0 684 873 ] /CropBox [ 0 0 684 873 ] /Rotate 0 >> endobj 74 0 obj << /ProcSet [ /PDF /Text /ImageC /ImageI ] /Font << /F1 515 0 R /F2 518 0 R /F3 261 0 R /F8 268 0 R >> /XObject << /Im4 76 0 R >> /ExtGState << /GS1 523 0 R /GS2 521 0 R >> /ColorSpace << /Cs9 520 0 R /Cs13 276 0 R >> >> endobj 75 0 obj << /Length 7969 >> stream 1 g /GS1 gs 0 873 m 0 873 l f q 1 i 27 846 603 -783 re 0 873 m W n 0 873 684 -873 re W n BT /F1 1 Tf 11 0 0 11 217 769.7621 Tm 0 0 0 1 k /GS2 gs -0.0001 Tc 0.2345 Tw [(O)5.8(ne effect of the file)]TJ 0 -1.0909 TD 0.0183 Tw [(system str)-7.9(uctur)9.7(e is that)]TJ T* 0.2597 Tw (the BIFF data within)Tj T* 0.0427 Tw [(the Compound F)33.9(iles is)]TJ T* 0.1638 Tw (often fragmented, and)Tj T* 0.0164 Tc 0.3585 Tw (the files occasionally)Tj T* -0.0001 Tc 0.2268 Tw (contain lost blocks of)Tj T* 0.2911 Tw [(data. )44.8(The location of)]TJ T* 0.0199 Tc 0.6913 Tw (the data within a)Tj T* 0.8094 Tw [(Compound F)33.9(ile is)]TJ T* 0.442 Tw [(contr)5.8(olled b)5.8(y)0( a file)]TJ T* -0.0001 Tc 0.025 Tw [(allocation table \(F)35.8(A)69.9(T)-12(\).)]TJ 0 -2.2727 TD 0.0199 Tc 0.8689 Tw (The documentation)Tj 0 -1.0909 TD 0.0039 Tc 0.371 Tw [(for the OLE::S)23.9(torage)]TJ -14 -1.0909 TD -0.0001 Tc 0.1333 Tw [(module contains one of the fe)-5.9(w descriptions of the OLE)]TJ T* 0.0707 Tw [(Compound F)33.9(ile in the public domain, at http://user)59.7(.cs.tu-)]TJ T* 0.0585 Tw [(berlin.de/~schwar)-7.9(tz/pmh/ guide.html. )44.9(The sour)5.8(ce code for)]TJ T* 0.0087 Tc 0.3662 Tw [(the G)17.8(numeric spr)9.6(eadsheet E)5.8(x)12(cel plugin also contains)]TJ T* -0.0001 Tc -0.031 Tw [(information r)9.7(elev)5.8(ant to the E)5.8(x)12(cel BIFF format and the OLE)]TJ T* 0.025 Tw [(container at http://www)74.9(.gnumeric.org/.)]TJ /F8 1 Tf 12 0 0 12 63 502.7621 Tm 0.0199 Tc 0.0255 Tw (A B)Tj 10.44 0 0 10.44 82.1312 502.762 Tm 0.0227 Tc 0 Tw (RIEF)Tj 12 0 0 12 108.8523 502.762 Tm 0 Tc (H)Tj 10.44 0 0 10.44 118.8335 502.762 Tm 0.0227 Tc [(IST)35.6(OR)44.6(Y)-345.4(O)-0.2(F)]TJ 12 0 0 12 178.6707 502.762 Tm 0 Tc (T)Tj 10.44 0 0 10.44 187.0933 502.762 Tm 0.0227 Tc (IME)Tj 12 0 0 12 210.4037 502.762 Tm 0 Tc (W)Tj 10.44 0 0 10.44 221.2247 502.762 Tm 0.0229 Tc (ASTED)Tj /F1 1 Tf 11 0 0 11 63 478.7621 Tm -0.0001 Tc 0.0341 Tw [(S)24.1(p)0.3(r)9.7(eadsheet::W)81.8(riteE)5.8(x)12(cel star)-7.9(ted life as a C pr)5.8(ogram written)]TJ 25.3636 29.3923 TD -0.0298 Tw [(to conv)5.8(er)-7.9(t the numerical output of a F)35.8(o)0.2(r)-7.9(tran F)33.9(inite E)11.9(lement)]TJ 0 -1.0909 TD 0.0367 Tw [(Analysis pr)5.8(ogram into an E)5.8(x)12(cel spr)9.7(eadsheet. )44.8(The pr)5.8(ototype)]TJ T* 0.1811 Tw [(v)5.9(ersion pr)5.8(oduced a tab-delimited file that E)5.8(x)12(cel digested)]TJ T* 0.1132 Tw [(without pr)5.8(oblem. H)17.8(o)12(w)5.8(e)0(v)5.8(e)0.1(r)59.7(,)0( I thought a nativ)5.8(e binar)-17.9(y file)]TJ T* 0.025 Tw [(would be nicer)59.7(. )44.8(Ther)9.7(ein lies a tr)-7.9(ue tale of human v)5.8(anity)84.9(.)]TJ 0 -2.1818 TD -0.0101 Tc -0.0017 Tw [(The SDK documentation for E)5.9(x)12(cel 5 lists 127 binar)-17.8(y r)9.7(ecor)13.9(ds)]TJ 0 -1.0909 TD -0.025 Tw [(that can be included in a file, but nev)5.9(er says which r)9.7(ecor)13.9(ds ar)9.7(e)]TJ T* 0.1143 Tw [(r)9.9(equir)9.7(ed. B)17.8(y)0( a painful pr)5.8(ocess of trial and err)5.9(or)59.7(, I r)9.7(emo)15.8(v)5.9(e)0.1(d)]TJ T* 0.1411 Tw [(binar)-17.9(y r)9.7(ecor)13.8(ds fr)5.8(om a standar)13.9(d E)5.8(x)12(cel file until I r)9.7(eached a)]TJ T* 0.1612 Tw (minimum configuration that would load without crashing)Tj T* -0.0095 Tc 0.3744 Tw [(the application. )44.8(This pr)5.8(ocess has a nice name: r)9.6(e)0(v)5.8(erse)]TJ T* -0.0101 Tc 0.0296 Tw [(engineering. )44.9(The memor)-17.9(y of this dr)-7.9(udger)-17.9(y came back to me)]TJ T* 0.1302 Tw [(two y)5.8(ears later when I came acr)5.9(oss the follo)11.9(wing ar)-7.9(ticle in)]TJ T* 0.1575 Tw [(MSDN: R)11.9(ecor)13.8(ds needed to make a BIFF5 file M)12(icr)5.8(osoft)]TJ T* 0.1057 Tw [(E)5.8(x)12(cel can use, Q147732, at http://suppor)-7.8(t.micr)5.8(osoft.com/)]TJ T* 0 Tw [(suppor)-7.9(t/kb/ar)-7.9(ticles/Q147/7/32.asp)15.9(.)]TJ 0 -2.1818 TD -0.0001 Tc 0.025 Tw [(E)29.7(v)5.9(er)-17.9(ything w)5.8(ent fine until E)5.8(x)12(cel 97.)]TJ T* 0.0279 Tw [(E)5.8(x)12(cel 4 files ar)9.7(e pur)9.7(e BIFF files. E)5.8(x)12(cel 5 files ar)9.7(en)69.8()79.9(t)0(. )44.8(They)29.7()69.9(r)9.9(e)]TJ 0 -1.0909 TD 0.0199 Tc 0.4114 Tw [(Compound F)33.9(iles with BIFF files embedded inside.)]TJ T* -0.0001 Tc 0.2473 Tw [(H)17.8(o)12(w)5.8(e)0(v)5.8(e)0.1(r)59.7(,)-0.1( E)5.8(x)12(cel 5 will also accept a pur)9.7(e BIFF file for)]TJ T* 0.0854 Tw [(backwar)13.8(d compatibility)84.9(. E)5.8(x)12(cel 97 will not. )44.8(The F)35.8(o)0.2(r)-7.9(tran to)]TJ T* 0.1637 Tw [(E)5.8(x)12(cel filter that had wor)5.8(ked so successfully with E)5.8(x)12(cel 5)]TJ T* 0.025 Tw [(caused E)5.8(x)12(cel 97 to choke and die.)]TJ 0 -2.1818 TD 0.0592 Tw [(The solution was to open a Compound D)11.9(ocument str)9.7(eam)]TJ 12 0 0 12 517.3723 90.3543 Tm 0 Tc 0 Tw (F)Tj 10.44 0 0 10.44 523.4518 90.3543 Tm -0.0001 Tc (ALL)Tj 12 0 0 12 544.7999 90.3543 Tm 0 Tc 0.025 Tw [(2000 25)]TJ /F3 1 Tf -40.15 0 TD -0.0002 Tc 0.0255 Tw [(The P)47.6(erl J)35.7(our)-8(nal #19)]TJ ET 0 0 0 0 k /GS1 gs 63.25 780.13 143.5 -162.14 re 162.892 90.354 m f* Q q 1 i 63.25 780.13 143.5 -162.14 re W* n q 149.399 0 0 154.7989 59.8 626.8811 cm /Im4 Do Q Q q 1 i 27 846 603 -783 re 0 873 m W n 0 873 684 -873 re W n 0 0 0 1 K 0 J 0 j 0.5 w 10 M []0 d 63.25 780.13 143.5 -162.14 re S 0 0 0 0 k /GS2 gs 63 810 252 -24.07 re f* BT /F8 1 Tf 11 0 0 11 63 802.0776 Tm 0 0 0 1 k -0.0002 Tc 0.0255 Tw [(F)21.8(igur)19.6(e 3.)]TJ 0 -1.1818 TD -0.0001 Tc [(The Compound F)21.9(ile system used to stor)19.7(e E)5.8(x)11.9(cel data.)]TJ ET 0 0 0 0.1 k /GS1 gs 63.5 458.5 530 -341 re 294.209 789.078 m f* 1 w 63.5 458.5 530 -341 re S BT 24 0 0 24 243.791 325.7976 Tm 0 0 0 1 k /GS2 gs 0 Tw [(DESKT)35.8(OP)179.8(.COM)]TJ 1.8018 -1.2 TD -0.0002 Tc 0.0255 Tw (1/2 page)Tj 0.1088 -2.4 TD -0.0001 Tc [(P)12(ick U)29.7(p)]TJ ET Q 0 0 0 0 k /GS2 gs 1 i 37 874 191 -12 re 367.358 239.398 m f* BT /F2 1 Tf 8 0 0 8 39 864 Tm /Cs9 cs 1 scn -0.0004 Tc -0.0019 Tw (TPJ#19/9.26 9/27/00 10:35 AM Page 25)Tj ET 1 G 0 J 0 j 0.5 w 10 M []0 d 36 873 m 36 849 l 0 837 m 24 837 l 621 873 m 621 849 l 657 837 m 633 837 l 36 36 m 36 60 l 0 72 m 24 72 l 621 36 m 621 60 l 657 72 m 633 72 l S /Cs9 CS 1 SCN 0.25 w 36 873 m 36 849 l 0 837 m 24 837 l 621 873 m 621 849 l 657 837 m 633 837 l 36 36 m 36 60 l 0 72 m 24 72 l 621 36 m 621 60 l 657 72 m 633 72 l S 1 G 0.5 w 304.5 861 m 352.5 861 l 304.5 48 m 352.5 48 l 12 478.5 m 12 430.5 l 645 478.5 m 645 430.5 l 328.5 873 m 328.5 849 l 328.5 60 m 328.5 36 l 0 454.5 m 24 454.5 l 633 454.5 m 657 454.5 l 328.5 861 m 334.5 861 l 334.5 857.688 331.812 855 328.5 855 c 325.188 855 322.5 857.688 322.5 861 c 322.5 864.312 325.188 867 328.5 867 c 331.812 867 334.5 864.312 334.5 861 c 328.5 48 m 334.5 48 l 334.5 44.688 331.812 42 328.5 42 c 325.188 42 322.5 44.688 322.5 48 c 322.5 51.312 325.188 54 328.5 54 c 331.812 54 334.5 51.312 334.5 48 c 12 454.5 m 18 454.5 l 18 451.188 15.312 448.5 12 448.5 c 8.688 448.5 6 451.188 6 454.5 c 6 457.812 8.688 460.5 12 460.5 c 15.312 460.5 18 457.812 18 454.5 c 645 454.5 m 651 454.5 l 651 451.188 648.312 448.5 645 448.5 c 641.688 448.5 639 451.188 639 454.5 c 639 457.812 641.688 460.5 645 460.5 c 648.312 460.5 651 457.812 651 454.5 c S /Cs9 CS 1 SCN 0.25 w 304.5 861 m 352.5 861 l 304.5 48 m 352.5 48 l 12 478.5 m 12 430.5 l 645 478.5 m 645 430.5 l 328.5 873 m 328.5 849 l 328.5 60 m 328.5 36 l 0 454.5 m 24 454.5 l 633 454.5 m 657 454.5 l 328.5 861 m 334.5 861 l 334.5 857.688 331.812 855 328.5 855 c 325.188 855 322.5 857.688 322.5 861 c 322.5 864.312 325.188 867 328.5 867 c 331.812 867 334.5 864.312 334.5 861 c 328.5 48 m 334.5 48 l 334.5 44.688 331.812 42 328.5 42 c 325.188 42 322.5 44.688 322.5 48 c 322.5 51.312 325.188 54 328.5 54 c 331.812 54 334.5 51.312 334.5 48 c 12 454.5 m 18 454.5 l 18 451.188 15.312 448.5 12 448.5 c 8.688 448.5 6 451.188 6 454.5 c 6 457.812 8.688 460.5 12 460.5 c 15.312 460.5 18 457.812 18 454.5 c 645 454.5 m 651 454.5 l 651 451.188 648.312 448.5 645 448.5 c 641.688 448.5 639 451.188 639 454.5 c 639 457.812 641.688 460.5 645 460.5 c 648.312 460.5 651 457.812 651 454.5 c S endstream endobj 76 0 obj << /Type /XObject /Subtype /Image /Width 83 /Height 86 /BitsPerComponent 8 /ColorSpace 276 0 R /Length 599 /Filter /FlateDecode >> stream H엋r0 Ep d@i6iBa_$;][u7i`>LB$ pAݟn$1SIMd~O, Q š &:ը ͐Y,觔$oH+ }!Xq14 )sy? )⋐M!6%ךpef a]@r{#Q-Ft#VX@+6-B7}̚Td3[3u)Meז+QVo8xB5B{T4uwe9/b tI۶ϪKnG^ WgO+9 2ߊ1}(GJ,xk Qź>.SsOa,ڹҋI'@L>4sܭ^f~c{ Mc8Iř|,eI#)nHD7t=p6U;O/')6G͏6Odx6)UmK+ףyD/QpbZ G)zH!Z\h1rMHaj1B 7% endstream endobj 77 0 obj << /Type /Page /Parent 493 0 R /Resources 78 0 R /Contents 79 0 R /Thumb 371 0 R /MediaBox [ 0 0 684 873 ] /CropBox [ 0 0 684 873 ] /Rotate 0 >> endobj 78 0 obj << /ProcSet [ /PDF /Text ] /Font << /F1 515 0 R /F2 518 0 R /F3 261 0 R /F8 268 0 R /F11 271 0 R >> /ExtGState << /GS1 523 0 R /GS2 521 0 R >> /ColorSpace << /Cs9 520 0 R >> >> endobj 79 0 obj << /Length 14747 >> stream 1 g /GS1 gs 0 873 m 0 873 l f q 1 i 27 846 603 -783 re 0 873 m W n 0 873 684 -873 re W n BT /F1 1 Tf 11 0 0 11 63 802.0776 Tm 0 0 0 1 k /GS2 gs -0.0001 Tc 0.006 Tw [(using a C++ inter)-7.9(face and write the BIFF r)9.7(ecor)13.8(ds into it. I)11.9(n)]TJ 0 -1.0909 TD 0.0085 Tw [(C++ on )14.8(W)9.7(indo)11.9(ws this is r)9.7(e)0.1(lativ)5.8(ely easy; for a brief example,)]TJ T* 0.0199 Tc 0.6524 Tw [(see H)17.8(o)12(w)0( to C)5.8(r)9.9(eate a BIFF5 F)33.9(ile, Q150447,)]TJ T* 0.0028 Tc 0 Tw [(http://suppor)-8(t.micr)5.7(osoft.com/suppor)-8(t/kb/ar)-8(ticles/Q150/4/)]TJ T* -0.0001 Tc [(47.ASP)179.9(.)]TJ 0 -2.0909 TD 0.2192 Tw [(I)12(n)0( P)53.9(erl, or in C for that matter)59.7(, this appr)5.8(oach is mor)9.7(e)]TJ 0 -1.0909 TD 0.0128 Tw [(difficult since the OLE inter)-7.9(face is closely tied to C++. )44.8(The)]TJ T* 0.1383 Tw [(only cr)5.8(oss-platform r)9.7(esour)5.8(ce av)5.8(ailable for use with P)53.9(erl is)]TJ T* 0.1681 Tw [(the OLE::S)23.9(torage module, which is an inter)-7.9(face to OLE)]TJ T* 0.2636 Tw [(documents. H)17.8(o)12(w)5.8(e)0(v)5.8(e)0.1(r)59.7(,)0( it doesn)69.8()79.9(t)0.1( pr)5.8(o)15.9(vide any facility for)]TJ T* 0.025 Tw [(writing into a document str)9.7(eam.)]TJ 0 -2.0909 TD 0.0219 Tw [(The first v)5.8(ersion of the S)23.9(p)0.3(r)9.7(eadsheet::W)81.8(riteE)5.8(x)12(cel exploited a)]TJ 0 -1.0909 TD 0.0597 Tw [(backwar)13.8(d compatibility featur)9.7(e in E)5.8(x)12(cel to av)5.8(oid using the)]TJ T* 0.1436 Tw [(OLE container)59.7(. H)17.8(o)12(w)5.8(e)0(v)5.8(e)0.1(r)59.7(,)0( this limited the file to a single)]TJ T* 0.025 Tw [(wor)5.8(ksheet, and featur)9.7(es like formatting w)5.8(e)0.1(r)9.7(e)0(n)69.8()79.9(t possible.)]TJ 0 -2.0909 TD 0.0898 Tw [(S)12.1(o)0( it was back to the hex editor)59.7(, although this time I was)]TJ 0 -1.0909 TD 0.0706 Tw [(also armed with the OLE::S)23.9(torage documentation and the)]TJ T* 0.0199 Tc 0.7149 Tw [(G)17.9(numeric sour)5.8(ce code. )44.9(The curr)9.7(ent v)5.8(ersion of)]TJ T* 0.0192 Tc 0.3557 Tw [(S)24.1(p)0.3(r)9.8(eadsheet::W)81.8(riteE)5.9(x)12(cel suppor)-7.8(ts the OLE container)59.8(,)]TJ T* -0.0001 Tc 0.0566 Tw [(paving the way for the addition of other E)5.8(x)12(cel featur)9.7(es. A)5.8(t)]TJ T* 0.0563 Tw [(the moment the main thr)-7.9(ust of the wor)5.8(k is to)11.9(war)13.8(d adding)]TJ T* 0.025 Tw [(formatting for cells, r)5.8(o)12(ws, and columns.)]TJ 0 -2.0909 TD 0.1776 Tw (The addition of the OLE container meant that the files)Tj 0 -1.0909 TD 0.271 Tw [(pr)5.8(oduced b)5.8(y)0( this module ar)9.7(e also compatible with the)]TJ T* 0.0199 Tc 0.8105 Tw [(Linux/U)35.9(nix spr)9.7(eadsheet applications S)23.9(tar O)5.8(ffice,)]TJ T* -0.0001 Tc 0.025 Tw [(G)17.9(numeric, and XESS.)]TJ /F8 1 Tf 12 0 0 12 63 433.0776 Tm 0 Tc 0 Tw (T)Tj 10.44 0 0 10.44 71.4226 433.0776 Tm 0.0225 Tc (HE)Tj /F11 1 Tf 11 0 0 11 90.0352 433.0776 Tm 0.0198 Tc (pack)Tj /F8 1 Tf 2.7798 0 TD 0 Tc (P)Tj 9.57 0 0 9.57 127.2994 433.0776 Tm 0.0229 Tc [(R)36(O)0.1(GRAMMING)]TJ 11 0 0 11 201.2835 433.0776 Tm 0 Tc (L)Tj 9.57 0 0 9.57 207.7759 433.0776 Tm 0.0229 Tc [(ANGU)35.9(A)17.8(G)0.1(E)]TJ /F1 1 Tf 11 0 0 11 63 408.0776 Tm -0.0001 Tc 0.2992 Tw [(P)54(erl contains sev)5.8(eral mini-languages each with its o)11.9(w)0(n)]TJ 0 -1.0909 TD 0 Tw (syntax: )Tj /F2 1 Tf 9 0 0 9 97.6044 396.0776 Tm -0.0002 Tc (format)Tj /F1 1 Tf 11 0 0 11 129.9965 396.0776 Tm -0.0001 Tc 0.2174 Tw [(, pod, r)9.7(egex)11.9(en, )]TJ /F2 1 Tf 9 0 0 9 202.0936 396.0776 Tm -0.0002 Tc 0 Tw (sprintf)Tj /F1 1 Tf 11 0 0 11 239.8843 396.0776 Tm -0.0001 Tc 0.2174 Tw (, and )Tj /F2 1 Tf 9 0 0 9 268.7295 396.0776 Tm -0.0002 Tc 0 Tw (pack)Tj /F1 1 Tf 11 0 0 11 290.3242 396.0776 Tm -0.0001 Tc 0.1726 Tw (. The)Tj /F2 1 Tf 9 0 0 9 63 384.0776 Tm 0.0163 Tc 0 Tw (pack)Tj /F1 1 Tf 11 0 0 11 92.0646 384.0776 Tm 0.3585 Tw (function is described in )Tj /F2 1 Tf 9 0 0 9 214.5026 384.0776 Tm 0 Tw (perlfunc)Tj /F1 1 Tf 11 0 0 11 265.7568 384.0776 Tm 0.3585 Tw [(as follo)11.9(ws:)]TJ -18.4324 -1.0909 TD -0.0001 Tc 0.2142 Tw [()59.9(pack\(template, list\) takes an array or list of v)5.8(alues and)]TJ T* 0.0017 Tc 0.3732 Tw [(packs it into a binar)-17.9(y str)-7.9(uctur)9.7(e, r)9.7(eturning the string)]TJ T* -0.0001 Tc 0.0244 Tw [(containing the str)-7.9(uctur)9.7(e. )44.8(This function is ideal for writing)]TJ T* 0.1037 Tw [(the BIFF r)9.7(ecor)13.8(ds contained in an E)5.8(x)12(cel file. F)35.8(or example,)]TJ T* 0.0447 Tw [(consider ho)11.9(w )]TJ /F2 1 Tf 9 0 0 9 123.1173 324.0775 Tm -0.0002 Tc 0 Tw (pack)Tj /F1 1 Tf 11 0 0 11 147.9542 324.0775 Tm -0.0001 Tc 0.0447 Tw [(is used to write the BOF binar)-17.9(y r)9.7(ecor)13.8(d)]TJ -7.7231 -1.0909 TD 0.025 Tw [(in the follo)11.9(wing subr)5.8(outine fr)5.8(om S)23.9(p)0.3(r)9.7(eadsheet::W)81.8(riteE)5.8(x)12(cel:)]TJ /F2 1 Tf 7 0 0 7 63 292.0776 Tm -0.0852 Tc 0.06 Tw (sub _store_bof {)Tj 2.2994 -2.2857 TD [(my $self)-2179.6(= shift;)]TJ 0 -1.1429 TD [(my $name)-2179.6(= 0x0809; # Record identifier)]TJ T* [(my $length = 0x0008; # Number of bytes to follow)]TJ 0 -2.2857 TD [(my $version)-610.1(= $BIFF_version;)-505.1(# 0x0500 for Excel 5)]TJ 0 -1.1429 TD [(my $type)-2199.6(= $_[0];)-4559(# 0x05 = workbook, 0x10 = worksheet)]TJ 0 -2.2857 TD [(my $build)-1679.7(= 0x096C;)]TJ 0 -1.1429 TD [(my $year)-2199.6(= 0x07C9;)]TJ 0 -2.2857 TD [(my $header = pack\("vv", $name, $length\);)]TJ 0 -1.1429 TD [(my $data)-2199.5(= pack\("vvvv", $version, $type, $build, $year\);)]TJ 0 -2.2857 TD [($self->_prepend\($header, $data\);)]TJ -2.2994 -1.1429 TD 0 Tc 0 Tw (})Tj /F1 1 Tf 11 0 0 11 63 140.0776 Tm -0.0001 Tc 0.3037 Tw [(The string written to the E)5.8(x)12(cel file looks like this in)]TJ 0 -1.0909 TD 0 Tw (hexadecimal:)Tj /F2 1 Tf 7 0 0 7 378.9512 805.2832 Tm 0.0599 Tw [(09 08 08 00 00 00 10 00 00 00 00 00)]TJ /F1 1 Tf 11 0 0 11 342 781.2832 Tm 0 Tw (The )Tj /F2 1 Tf 9 0 0 9 362.1562 781.2832 Tm 0 Tc (v)Tj /F1 1 Tf 11 0 0 11 370.4322 781.2832 Tm -0.0001 Tc 0.0116 Tw [(template pr)5.8(oduces a two-b)5.8(yte integer in little-endian)]TJ -2.5847 -1.0909 TD 0.0859 Tw [(or)13.8(der r)9.7(egar)13.8(dless of the nativ)5.8(e b)5.8(yte or)13.8(der of the underlying)]TJ T* 0.0311 Tw [(har)13.8(dwar)9.7(e. S)11.9(ince the majority of the BIFF and OLE data in)]TJ T* 0.3189 Tw [(an E)5.8(x)12(cel file is composed of little-endian integers, it)17.8()79.9(s)]TJ T* 0.0184 Tw [(possible to write a cr)5.8(oss-platform binar)-17.9(y file with v)5.8(e)0.1(r)-17.9(y)0( little)]TJ T* 0.0023 Tc 0.3726 Tw [(effor)-7.9(t. )44.8(The complementar)-17.9(y function for r)9.7(eading fix)11.9(ed)]TJ T* -0.0001 Tc 0.1281 Tw [(format str)-7.9(uctur)9.7(es is )]TJ /F2 1 Tf 9 0 0 9 430.665 709.2832 Tm -0.0002 Tc 0 Tw (unpack)Tj /F1 1 Tf 11 0 0 11 463.0571 709.2832 Tm -0.0001 Tc 0.1282 Tw [(. P)53.9(erl is most often associated)]TJ -11.0052 -1.0909 TD 0.1725 Tw [(with text pr)5.8(ocessing, but has featur)9.7(es that handle binar)-17.9(y)]TJ T* 0.025 Tw [(data in a r)9.7(e)0.1(lativ)5.8(ely straightfor)-17.9(war)13.8(d manner)59.7(.)]TJ 0 -2.1818 TD 0.0199 Tc 0.4848 Tw [(O)5.8(ne pr)5.8(oblem I encounter)9.7(ed was with the binar)-17.9(y)]TJ 0 -1.0909 TD -0.0001 Tc 0.3688 Tw [(r)9.9(epr)9.7(esentation of a floating-point number)59.7(, since E)5.8(x)12(cel)]TJ T* 0.0593 Tw [(r)9.9(equir)9.7(es a 64-bit IEEE float. )]TJ /F2 1 Tf 9 0 0 9 467.7426 637.2832 Tm -0.0002 Tc 0 Tw (pack)Tj /F1 1 Tf 11 0 0 11 492.7389 637.2832 Tm 0.0594 Tw [(pr)5.7(o)15.8(vides the )]TJ /F2 1 Tf 9 0 0 9 548.349 637.2832 Tm 0 Tc 0 Tw (d)Tj /F1 1 Tf 11 0 0 11 557.1492 637.2832 Tm -0.0001 Tc (template)Tj -19.559 -1.0909 TD 0.059 Tw [(for a double pr)9.7(ecision float, but its format depends on the)]TJ T* -0.0302 Tw [(nativ)5.8(e har)13.8(dwar)9.7(e. I)5.8(f)0.1( S)23.9(p)0.3(r)9.7(eadsheet::W)81.8(riteE)5.8(x)12(cel cannot generate)]TJ T* 0.0418 Tw [(the r)9.7(e)0(quir)9.7(ed number format, it will )]TJ /F2 1 Tf 9 0 0 9 496.6556 601.2832 Tm -0.0002 Tc 0 Tw (croak\(\))Tj /F1 1 Tf 11 0 0 11 537.6561 601.2832 Tm -0.0001 Tc 0.0418 Tw [(with an err)5.8(or)]TJ -17.7869 -1.0909 TD 0.1753 Tw [(message. D)11.9(uring installation, )]TJ /F2 1 Tf 9 0 0 9 473.7445 589.2832 Tm -0.0002 Tc 0.4206 Tw (make test)Tj /F1 1 Tf 11 0 0 11 530.7959 589.2832 Tm -0.0001 Tc 0.1753 Tw (will also catch)Tj -17.1633 -1.0909 TD 0.0259 Tw [(this. N)29.8(obody has r)9.7(epor)-7.9(ted a pr)5.8(oblem y)5.8(et, pr)5.8(obably because)]TJ T* -0.0232 Tw [(the o)11.9(wners of PDP)35.8(s or C)5.8(rays ar)9.7(e inv)5.8(olv)5.8(ed in r)9.7(eal computing)]TJ T* 0.0249 Tw [(and ar)9.7(en)69.8()79.9(t)0( inter)9.7(ested in such fripperies as M)11.9(icr)5.8(osoft E)5.8(x)12(cel.)]TJ 0 -2.1818 TD 0.312 Tw [(Ther)9.7(e is one featur)9.7(e of writing binar)-17.9(y files that traps)]TJ 0 -1.0909 TD 0.217 Tw [(ev)5.8(er)-17.9(y)5.8(one at least once. Consider the follo)11.9(wing example,)]TJ T* -0.0135 Tw [(which writes the E)5.8(x)12(cel end-of-file r)9.7(ecor)13.8(d)0.1( identifier)59.7(, )]TJ /F2 1 Tf 9 0 0 9 558.858 505.2832 Tm -0.0002 Tc 0 Tw (0x000A)Tj /F1 1 Tf 11 0 0 11 591.2501 505.2832 Tm 0 Tc (.)Tj -22.6591 -1.0909 TD -0.0001 Tc 0.025 Tw [(What file siz)5.8(e is printed out?)]TJ /F2 1 Tf 7 0 0 7 355.8567 473.2832 Tm -0.0002 Tc 0.06 Tw (#!/usr/bin/perl -w)Tj 0 -2.2857 TD (use strict;)Tj T* -0.0001 Tc [(open \(TMP, "+> testfile.tmp"\) or die "testfile.tmp: $!";)]TJ 0 -1.1429 TD (print TMP pack\("v", 0x000A\);)Tj T* -0.0002 Tc (seek \(TMP,0,1\);)Tj T* (my $filesize = -s TMP;)Tj 0 -2.2857 TD -0.0001 Tc [(print "Filesize is $filesize bytes.\\n";)]TJ /F1 1 Tf 11 0 0 11 342 377.2832 Tm 0.131 Tw [(The answ)5.8(er depends on y)5.8(our operating system. O)5.8(n)0( U)35.8(nix)]TJ 0 -1.0909 TD 0.0939 Tw [(the answ)5.8(er is 2, and on )14.8(W)9.7(indo)11.9(ws the answ)5.8(er is 3. )44.9(This is)]TJ T* 0 Tc 0 Tw (because )Tj /F2 1 Tf 9 0 0 9 379.9954 353.2832 Tm -0.0002 Tc (0x0A)Tj /F1 1 Tf 11 0 0 11 407.3483 353.2832 Tm -0.0001 Tc 0.2734 Tw [(is the ne)-5.9(wline character)59.7(, )]TJ /F2 1 Tf 9 0 0 9 523.7466 353.2832 Tm -0.0003 Tc 0 Tw (\\n)Tj /F1 1 Tf 11 0 0 11 534.544 353.2832 Tm -0.0001 Tc 0.2735 Tw [(, which y)5.8(our)]TJ -17.504 -1.0909 TD 0.2047 Tw [(W)9.7(indo)11.9(ws)39.7()79.9(s)0( I/O libraries will translate to )]TJ /F2 1 Tf 9 0 0 9 526.9948 341.2832 Tm -0.0002 Tc 0.4913 Tw (0x0D 0x0A)Tj /F1 1 Tf 11 0 0 11 585.0061 341.2832 Tm -0.0003 Tc 0 Tw (or)Tj /F2 1 Tf 9 0 0 9 342 329.2832 Tm -0.0002 Tc (\\r\\n)Tj /F1 1 Tf 11 0 0 11 363.5947 329.2832 Tm -0.0001 Tc 0.0733 Tw [(. )44.8(This is a )39.7(featur)9.7(e)29.7( of )14.8(W)9.7(indo)11.9(ws, not P)53.9(erl. )44.8(T)119.9(o)0( write a)]TJ -1.9632 -1.0909 TD 0.0109 Tw [(binar)-17.9(y file with exactly the data y)5.8(ou want and nothing else,)]TJ T* 0.0201 Tw [(y)5.8(ou need to use the )]TJ /F2 1 Tf 9 0 0 9 428.3222 305.2832 Tm -0.0002 Tc 0 Tw (binmode\(\))Tj /F1 1 Tf 11 0 0 11 479.8812 305.2832 Tm -0.0001 Tc 0.0201 Tw (function on the filehandle.)Tj /F8 1 Tf 12 0 0 12 342 279.2832 Tm 0 Tc 0 Tw (T)Tj 10.44 0 0 10.44 350.4226 279.2832 Tm 0.0225 Tc (HE)Tj 12 0 0 12 369.0352 279.2832 Tm 0 Tc (S)Tj 10.44 0 0 10.44 375.322 279.2832 Tm 0.0228 Tc [(TR)23.7(UCTURE)-345.5(OF)-381.4(THE)]TJ 12 0 0 12 481.6187 279.2832 Tm 0 Tc (M)Tj 10.44 0 0 10.44 492.9094 279.2832 Tm 0.0228 Tc (ODULE)Tj /F1 1 Tf 11 0 0 11 342 253.2832 Tm 0.0199 Tc 0.3719 Tw [(S)24.1(p)0.3(r)9.7(eadsheet::W)81.8(riteE)5.8(x)12(cel was designed with a object-)]TJ T* -0.0001 Tc 0.0901 Tw [(oriented inter)-7.9(face so that it most closely r)9.7(epr)9.7(esents E)5.8(x)12(cel)11.9()79.9(s)]TJ T* 0.2632 Tw [(o)12(wn inter)-7.9(face. )44.8(The fact that E)5.8(x)12(cel r)9.7(elies heavily on an)]TJ T* 0.1579 Tw [(object-oriented model can be seen fr)5.8(om the E)5.8(x)12(cel object)]TJ T* 0.1923 Tw [(hierar)5.8(chy)84.9(, and fr)5.8(om its interaction with )14.8(V)9.9(isual B)11.9(asic for)]TJ T* -0.0092 Tw [(A)12.1(pplications \()-12(VBA\). )44.9(The E)5.8(x)12(cel object hierar)5.8(chy is sho)11.9(wn in)]TJ T* 0.1239 Tw [(the help file that comes with E)5.8(x)12(cel )14.8(VBA under the entr)-17.9(y)]TJ T* 0.0199 Tc 0.3583 Tw [(M)11.9(icr)5.8(osoft E)5.8(x)12(cel O)5.8(b)0(jects)39.7(. )44.9(The main strand of the)]TJ T* -0.0001 Tc 0.025 Tw [(hierar)5.8(chy of inter)9.7(est is:)]TJ /F2 1 Tf 7 0 0 7 378.9512 137.2832 Tm 0 Tw (Application->Workbook->Worksheet)Tj /F1 1 Tf 12 0 0 12 63 90.3543 Tm 0 Tc [(26)-1100(F)]TJ 10.44 0 0 10.44 94.2795 90.3543 Tm -0.0001 Tc (ALL)Tj 12 0 0 12 115.6277 90.3543 Tm 0 Tc (2000)Tj /F3 1 Tf 30.9897 0.0003 TD -0.0002 Tc 0.0255 Tw [(The P)47.6(erl J)35.7(our)-8(nal #19)]TJ ET Q 0 0 0 0 k /GS2 gs 1 i 37 874 191 -12 re 587.395 90.357 m f* BT /F2 1 Tf 8 0 0 8 39 864 Tm /Cs9 cs 1 scn -0.0004 Tc -0.0019 Tw (TPJ#19/9.26 9/27/00 10:35 AM Page 26)Tj ET 1 G 0 J 0 j 0.5 w 10 M []0 d 36 873 m 36 849 l 0 837 m 24 837 l 621 873 m 621 849 l 657 837 m 633 837 l 36 36 m 36 60 l 0 72 m 24 72 l 621 36 m 621 60 l 657 72 m 633 72 l S /Cs9 CS 1 SCN 0.25 w 36 873 m 36 849 l 0 837 m 24 837 l 621 873 m 621 849 l 657 837 m 633 837 l 36 36 m 36 60 l 0 72 m 24 72 l 621 36 m 621 60 l 657 72 m 633 72 l S 1 G 0.5 w 304.5 861 m 352.5 861 l 304.5 48 m 352.5 48 l 12 478.5 m 12 430.5 l 645 478.5 m 645 430.5 l 328.5 873 m 328.5 849 l 328.5 60 m 328.5 36 l 0 454.5 m 24 454.5 l 633 454.5 m 657 454.5 l 328.5 861 m 334.5 861 l 334.5 857.688 331.812 855 328.5 855 c 325.188 855 322.5 857.688 322.5 861 c 322.5 864.312 325.188 867 328.5 867 c 331.812 867 334.5 864.312 334.5 861 c 328.5 48 m 334.5 48 l 334.5 44.688 331.812 42 328.5 42 c 325.188 42 322.5 44.688 322.5 48 c 322.5 51.312 325.188 54 328.5 54 c 331.812 54 334.5 51.312 334.5 48 c 12 454.5 m 18 454.5 l 18 451.188 15.312 448.5 12 448.5 c 8.688 448.5 6 451.188 6 454.5 c 6 457.812 8.688 460.5 12 460.5 c 15.312 460.5 18 457.812 18 454.5 c 645 454.5 m 651 454.5 l 651 451.188 648.312 448.5 645 448.5 c 641.688 448.5 639 451.188 639 454.5 c 639 457.812 641.688 460.5 645 460.5 c 648.312 460.5 651 457.812 651 454.5 c S /Cs9 CS 1 SCN 0.25 w 304.5 861 m 352.5 861 l 304.5 48 m 352.5 48 l 12 478.5 m 12 430.5 l 645 478.5 m 645 430.5 l 328.5 873 m 328.5 849 l 328.5 60 m 328.5 36 l 0 454.5 m 24 454.5 l 633 454.5 m 657 454.5 l 328.5 861 m 334.5 861 l 334.5 857.688 331.812 855 328.5 855 c 325.188 855 322.5 857.688 322.5 861 c 322.5 864.312 325.188 867 328.5 867 c 331.812 867 334.5 864.312 334.5 861 c 328.5 48 m 334.5 48 l 334.5 44.688 331.812 42 328.5 42 c 325.188 42 322.5 44.688 322.5 48 c 322.5 51.312 325.188 54 328.5 54 c 331.812 54 334.5 51.312 334.5 48 c 12 454.5 m 18 454.5 l 18 451.188 15.312 448.5 12 448.5 c 8.688 448.5 6 451.188 6 454.5 c 6 457.812 8.688 460.5 12 460.5 c 15.312 460.5 18 457.812 18 454.5 c 645 454.5 m 651 454.5 l 651 451.188 648.312 448.5 645 448.5 c 641.688 448.5 639 451.188 639 454.5 c 639 457.812 641.688 460.5 645 460.5 c 648.312 460.5 651 457.812 651 454.5 c S endstream endobj 80 0 obj << /Type /Page /Parent 493 0 R /Resources 81 0 R /Contents 82 0 R /Thumb 373 0 R /MediaBox [ 0 0 684 873 ] /CropBox [ 0 0 684 873 ] /Rotate 0 >> endobj 81 0 obj << /ProcSet [ /PDF /Text /ImageC /ImageI ] /Font << /F1 515 0 R /F2 518 0 R /F3 261 0 R /F8 268 0 R >> /XObject << /Im5 83 0 R >> /ExtGState << /GS1 523 0 R /GS2 521 0 R >> /ColorSpace << /Cs9 520 0 R /Cs14 278 0 R >> >> endobj 82 0 obj << /Length 6912 >> stream 1 g /GS1 gs 0 873 m 0 873 l f q 1 i 27 846 603 -783 re 0 873 m W n 0 873 684 -873 re W n BT /F1 1 Tf 11 0 0 11 63 552.2902 Tm 0 0 0 1 k /GS2 gs -0.0001 Tc 0.25 Tw [(F)35.9(or us, )89.8(A)12.1(pplication)69.8( means E)5.8(x)12(cel. I)11.9(n)0( other contexts it)]TJ 0 -1.0909 TD 0.025 Tw [(might mean )14.8(W)77.8(o)0.2(r)13.8(d)0.1( or P)53.9(o)12(w)5.9(erP)53.9(oint.)]TJ 0 -2.1818 TD 0.3017 Tw [(S)24.1(p)0.3(r)9.7(eadsheet::W)81.8(riteE)5.8(x)12(cel mimics this hierar)5.8(chy with fiv)5.8(e)]TJ 0 -1.0909 TD 0.366 Tw [(classes, each split into its o)11.9(wn packages. F)35.8(or ease of)]TJ T* 0.003 Tw [(dev)5.8(elopment, each package is contained in its o)11.9(wn module.)]TJ /F2 1 Tf 7 0 0 7 99.9512 472.2902 Tm -0.0002 Tc 0.06 Tw [(WriteExcel - The main module)]TJ 0 -1.1429 TD [(Workbook)-2559.6(- A container for worksheets)]TJ T* [(Worksheet)-1949.7(- Provides the write methods)]TJ T* [(BIFFwriter - Writes data in BIFF format)]TJ T* [(OLEwriter)-1949.7(- Write data into an OLE storage)]TJ /F1 1 Tf 11 0 0 11 63 416.2902 Tm -0.0001 Tc 0.025 Tw [(F)35.9(r)6(om the user)19.7()79.9(s)0( point of vie)-5.9(w)74.9(,)0( these ar)9.7(e seen as follo)11.9(ws:)]TJ /F2 1 Tf 7 0 0 7 99.9512 396.2902 Tm -0.0002 Tc 0 Tw (WriteExcel->Workbook->Worksheet)Tj /F1 1 Tf 11 0 0 11 63 372.2902 Tm -0.0001 Tc 0.2436 Tw [(The interaction of these packages is sho)11.9(wn as lo)11.9(w-tech)]TJ 0 -1.0909 TD 0.1179 Tw [(UML in F)33.9(igur)9.7(e 4. O)5.8(nly the documented public methods)]TJ T* 0.025 Tw [(ar)9.7(e included.)]TJ 0 -2.1818 TD 0.0183 Tw [(The r)9.7(elationships can be described as follo)11.9(ws: )14.8(W)81.7(riteE)5.8(x)12(cel is)]TJ 0 -1.0909 TD 0.0245 Tw [(a )14.8(W)77.8(o)0.2(r)5.8(kbook. )14.8(W)77.8(o)0.2(r)5.8(kbook is a container for )14.8(W)77.8(o)0.2(r)5.8(ksheets, and)]TJ T* 0.0838 Tw [(it uses the OLE)29.7(writer class. )14.8(W)77.8(o)0.2(r)5.8(kbook and )14.8(W)77.8(o)0.2(r)5.8(ksheet ar)9.7(e)]TJ T* 0.025 Tw [(both deriv)5.8(ed fr)5.8(om the abstract base class BIFFwriter)59.7(.)]TJ /F8 1 Tf 12 0 0 12 63 262.2902 Tm 0 Tc 0 Tw (A)Tj 10.44 0 0 10.44 70.7634 262.2902 Tm 0.0228 Tc [(L)117.9(TERNA)81.6(TIVE)]TJ 12 0 0 12 138.5074 262.2902 Tm 0 Tc (W)Tj 10.44 0 0 10.44 149.3283 262.2902 Tm -0.0388 Tc [(AY)-61.5(S)-407.1(O)-61.7(F)]TJ 12 0 0 12 188.5139 262.2902 Tm 0 Tc (W)Tj 10.44 0 0 10.44 200.3671 262.2902 Tm 0.0228 Tc [(RITING)-381.4(T)35.8(O)]TJ 12 0 0 12 262.1313 262.2902 Tm 0 Tc (E)Tj 10.44 0 0 10.44 269.3292 262.2902 Tm 0.0227 Tc [(X)23.7(CEL)]TJ /F1 1 Tf 11 0 0 11 63 236.2902 Tm -0.0001 Tc -0.0013 Tw [(D)6(epending on y)5.8(our r)9.7(equir)9.7(ements, backgr)5.8(ound, and general)]TJ T* 0.0798 Tw [(sensibilities, y)5.8(ou may pr)9.7(efer one of the follo)11.9(wing methods)]TJ T* 0.025 Tw [(for storing data in E)5.8(x)12(cel.)]TJ 0 -2.1818 TD 0.2854 Tw [()-471.1(CSV \(comma separated v)5.8(ariables\) or text. I)5.8(f)0( the file)]TJ 0.859 -1.0909 TD 0.0182 Tw (extension is )Tj /F2 1 Tf 9 0 0 9 124.8359 176.2902 Tm -0.0002 Tc 0 Tw (csv)Tj /F1 1 Tf 11 0 0 11 141.032 176.2902 Tm -0.0001 Tc 0.0182 Tw [(, E)5.8(x)12(cel will open and conv)5.8(er)-7.9(t this format)]TJ -6.2348 -1.0909 TD 0 Tw [(automatically)84.9(.)]TJ -0.859 -2.1818 TD 0.025 Tw [()-471.1(HTML tables. )44.8(This is an easy way to add formatting.)]TJ 0 -1.0909 TD [()-471.1(DBI or ODBC. Connect to an E)5.8(x)12(cel file as a database.)]TJ 12 0 0 12 517.3723 90.3543 Tm 0 Tc 0 Tw (F)Tj 10.44 0 0 10.44 523.4518 90.3543 Tm -0.0001 Tc (ALL)Tj 12 0 0 12 544.7999 90.3543 Tm 0 Tc 0.025 Tw [(2000 27)]TJ /F3 1 Tf -40.15 0 TD -0.0002 Tc 0.0255 Tw [(The P)47.6(erl J)35.7(our)-8(nal #19)]TJ ET 0 0 0 0 k /GS1 gs 63.5 794.14 259.58 -225.43 re 162.892 90.354 m f* Q q 1 i 63.5 794.14 259.58 -225.43 re W* n q 262.6875 0 0 227.9968 62.18 567.4631 cm /Im5 Do Q Q q 1 i 27 846 603 -783 re 0 873 m W n 0 873 684 -873 re W n 0 0 0 1 K 0 J 0 j 1 w 10 M []0 d 63.5 794.14 259.58 -225.43 re S BT /F8 1 Tf 11 0 0 11 63 802.0776 Tm 0 0 0 1 k /GS2 gs -0.0001 Tc -0.0084 Tw [(F)21.9(igur)19.7(e 4. )-36(The str)-7.9(uctur)19.7(e of the S)23.9(p)0.1(r)19.7(eadsheet::W)99.8(r)5.9(iteE)5.8(x)11.9(cel module.)]TJ ET 0 0 0 0.1 k /GS1 gs 342.5 809.5 251 -341 re 336.999 802.077 m f* 342.5 809.5 251 -341 re S BT 24 0 0 24 393.9848 662.3976 Tm 0 0 0 1 k /GS2 gs -0.0002 Tc 0 Tw [(W)17.8(ORD)-255.1(W)98.9(ARE)]TJ 1.3563 -1.2 TD 0.0255 Tw (1/4 page)Tj 0.1088 -1.2 TD [(P)11.9(i)-0.1(ck U)29.6(p)]TJ ET 0 0 0 0.1 k /GS1 gs 342.5 458.5 251 -341 re 506.858 604.798 m f* 342.5 458.5 251 -341 re S BT 24 0 0 24 397.1841 311.3976 Tm 0 0 0 1 k /GS2 gs 0 Tw (HURRICANE)Tj 1.223 -1.2 TD 0.0255 Tw (1/4 page)Tj 0.1088 -1.2 TD [(P)11.9(i)-0.1(ck U)29.6(p)]TJ ET Q 0 0 0 0 k /GS2 gs 1 i 37 874 191 -12 re 506.858 253.798 m f* BT /F2 1 Tf 8 0 0 8 39 864 Tm /Cs9 cs 1 scn -0.0004 Tc -0.0019 Tw (TPJ#19/9.26 9/27/00 10:35 AM Page 27)Tj ET 1 G 0 J 0 j 0.5 w 10 M []0 d 36 873 m 36 849 l 0 837 m 24 837 l 621 873 m 621 849 l 657 837 m 633 837 l 36 36 m 36 60 l 0 72 m 24 72 l 621 36 m 621 60 l 657 72 m 633 72 l S /Cs9 CS 1 SCN 0.25 w 36 873 m 36 849 l 0 837 m 24 837 l 621 873 m 621 849 l 657 837 m 633 837 l 36 36 m 36 60 l 0 72 m 24 72 l 621 36 m 621 60 l 657 72 m 633 72 l S 1 G 0.5 w 304.5 861 m 352.5 861 l 304.5 48 m 352.5 48 l 12 478.5 m 12 430.5 l 645 478.5 m 645 430.5 l 328.5 873 m 328.5 849 l 328.5 60 m 328.5 36 l 0 454.5 m 24 454.5 l 633 454.5 m 657 454.5 l 328.5 861 m 334.5 861 l 334.5 857.688 331.812 855 328.5 855 c 325.188 855 322.5 857.688 322.5 861 c 322.5 864.312 325.188 867 328.5 867 c 331.812 867 334.5 864.312 334.5 861 c 328.5 48 m 334.5 48 l 334.5 44.688 331.812 42 328.5 42 c 325.188 42 322.5 44.688 322.5 48 c 322.5 51.312 325.188 54 328.5 54 c 331.812 54 334.5 51.312 334.5 48 c 12 454.5 m 18 454.5 l 18 451.188 15.312 448.5 12 448.5 c 8.688 448.5 6 451.188 6 454.5 c 6 457.812 8.688 460.5 12 460.5 c 15.312 460.5 18 457.812 18 454.5 c 645 454.5 m 651 454.5 l 651 451.188 648.312 448.5 645 448.5 c 641.688 448.5 639 451.188 639 454.5 c 639 457.812 641.688 460.5 645 460.5 c 648.312 460.5 651 457.812 651 454.5 c S /Cs9 CS 1 SCN 0.25 w 304.5 861 m 352.5 861 l 304.5 48 m 352.5 48 l 12 478.5 m 12 430.5 l 645 478.5 m 645 430.5 l 328.5 873 m 328.5 849 l 328.5 60 m 328.5 36 l 0 454.5 m 24 454.5 l 633 454.5 m 657 454.5 l 328.5 861 m 334.5 861 l 334.5 857.688 331.812 855 328.5 855 c 325.188 855 322.5 857.688 322.5 861 c 322.5 864.312 325.188 867 328.5 867 c 331.812 867 334.5 864.312 334.5 861 c 328.5 48 m 334.5 48 l 334.5 44.688 331.812 42 328.5 42 c 325.188 42 322.5 44.688 322.5 48 c 322.5 51.312 325.188 54 328.5 54 c 331.812 54 334.5 51.312 334.5 48 c 12 454.5 m 18 454.5 l 18 451.188 15.312 448.5 12 448.5 c 8.688 448.5 6 451.188 6 454.5 c 6 457.812 8.688 460.5 12 460.5 c 15.312 460.5 18 457.812 18 454.5 c 645 454.5 m 651 454.5 l 651 451.188 648.312 448.5 645 448.5 c 641.688 448.5 639 451.188 639 454.5 c 639 457.812 641.688 460.5 645 460.5 c 648.312 460.5 651 457.812 651 454.5 c S endstream endobj 83 0 obj << /Type /XObject /Subtype /Image /Width 288 /Height 250 /BitsPerComponent 8 /ColorSpace 278 0 R /Length 1566 /Filter /FlateDecode >> stream H엁 Elhv#Q=L @!rk|;FzC?TI<I;Z#S/6ycT~~^"_6fZ6lOHI\~Sf9t9t[A|^-ʏ]i?VekZC?~0􃱲~op`C?~0 `C?~0 `C?~0 `C?~0 `C?~0Ʒ6 KDK"Ֆ9Z%Aro*bxϏMi_T${{Jǧf YTOԯ\l_>= h%w 2p] z %-h=n.ANKSdԻ8.A,CT?y$+o ^ꮦ%u[OjR ZE?O=>{84~G <;]~hx "M֯~8؍o5"5J^4H^?UjcIC,+wFU{0SwGY~j똆aYz }sfS/n~֜JWjU_g{;Hra)Af?حK'l=)rM~JgcICaHԞgp{OSdԻ8.ANKSdԻ8.ANKkmo;rn?_wĠˋ뭡T[@dID @>qF]8s0 `C?~0 `C?~08 `C?eDځ_4'Y,fst՜~֢Oq<3M,ESJԏSE'O#~ǕOsI>߇~0 |;C?~0la']=EgC_OrYaeg#نawfaw]S}`e^90@ _ `C?~0 `C?~0 `C?!B?2 endstream endobj 84 0 obj << /Type /Page /Parent 493 0 R /Resources 85 0 R /Contents 86 0 R /Thumb 375 0 R /MediaBox [ 0 0 684 873 ] /CropBox [ 0 0 684 873 ] /Rotate 0 >> endobj 85 0 obj << /ProcSet [ /PDF /Text /ImageC /ImageI ] /Font << /F1 515 0 R /F2 518 0 R /F3 261 0 R /F8 268 0 R >> /XObject << /Im6 87 0 R >> /ExtGState << /GS1 523 0 R /GS2 521 0 R >> /ColorSpace << /Cs9 520 0 R /Cs15 280 0 R >> >> endobj 86 0 obj << /Length 10345 >> stream 1 g /GS1 gs 0 873 m 0 873 l f q 1 i 27 846 603 -783 re 0 873 m W n 0 873 684 -873 re W n BT /F1 1 Tf 11 0 0 11 63 802.0776 Tm 0 0 0 1 k /GS2 gs -0.0001 Tc 0.3135 Tw [()-471.1(W)9.7(in32::OLE module and office automation. )44.8(This is)]TJ 0.859 -1.0909 TD 0.025 Tw [(discussed in mor)9.7(e detail in a later section.)]TJ -0.859 -2.1818 TD 0.0199 Tc 0.4332 Tw [()-451.1(XML and HTML. )44.8(Ther)9.7(e ar)9.7(e XML and HTML)]TJ 0.859 -1.0909 TD -0.0001 Tc -0.026 Tw [(specifications av)5.8(ailable for E)5.8(x)12(cel )14.9(W)77.8(o)0.2(r)5.8(kbooks. )44.9(The HTML)]TJ T* 0.2004 Tw [(specification goes bey)5.8(ond single tables and allo)11.9(ws y)5.8(o)0.1(u)]TJ T* 0.1842 Tw [(access to all of E)5.8(x)12(cel)11.9()79.9(s)0( featur)9.7(es. H)17.8(o)12(w)5.8(e)0(v)5.8(e)0.1(r)59.7(,)0( ther)9.7(e ar)9.7(e no)]TJ T* 0.1266 Tw [(modules curr)9.7(ently av)5.8(ailable to write E)5.8(x)12(cel files in these)]TJ T* 0.0199 Tc 1.0921 Tw [(formats. I)11.9(nter)9.7(ested par)-7.9(ties should look at)]TJ T* 0.0045 Tc 0 Tw [(http://msdn.micr)5.7(osoft.com/librar)-18(y/officedev/ofxml2k/of)]TJ T* -0.0001 Tc (xml2k.htm.)Tj -0.859 -2.1818 TD 0.141 Tw [(O)5.8(ther sour)5.8(ces of information: the G)17.8(numeric sour)5.8(ce code)]TJ 0 -1.0909 TD -0.0283 Tw [(\(http://www)74.9(.gnumeric.org/\) and the soon to be GPL)129.9(ed S)23.9(tar)]TJ T* 0 Tw [(O)5.8(ffice.)]TJ /F8 1 Tf 12 0 0 12 63 608.0776 Tm 0 Tc (R)Tj 10.44 0 0 10.44 71.1091 608.0776 Tm 0.0228 Tc [(EADING)-345.5(FR)35.7(OM)]TJ 12 0 0 12 151.0087 608.0776 Tm 0 Tc (E)Tj 10.44 0 0 10.44 158.2067 608.0776 Tm 0.0227 Tc [(X)23.7(CEL)]TJ /F1 1 Tf 11 0 0 11 63 582.0776 Tm -0.0001 Tc -0.0255 Tw [(D)6(espite the title of the S)23.9(p)0.3(r)9.7(eadsheet::W)81.8(riteE)5.8(x)12(cel module, the)]TJ T* 0.1649 Tw [(most commonly asked questions that I r)9.7(eceiv)5.8(e ar)9.7(e about)]TJ T* 0.025 Tw [(r)9.9(eading E)5.8(x)12(cel files. )44.8(The follo)11.9(wing ar)9.7(e some suggestions:)]TJ 0 -2.1818 TD -0.0051 Tc -0.0276 Tw [()-476.1(HTML tables. I)5.8(f)0( the files ar)9.7(e sav)5.8(ed fr)5.8(om E)5.8(x)12(cel as a HTML)]TJ 0.859 -1.0909 TD -0.0134 Tw [(table the data can be accessed using HTML::T)109.7(ableE)5.8(xtract,)]TJ T* 0 Tw [(http://sear)5.8(ch.cpan.org/sear)5.7(ch?dist=HTML-T)109.8(ableE)5.8(xtract.)]TJ -0.859 -2.1818 TD -0.0001 Tc 0.025 Tw [()-471.1(DBI or ODBC.)]TJ T* 0.0328 Tw [()-471.1(OLE::S)23.9(torage, formerly kno)11.9(wn as L)-12(A)12.1(OL)-12(A. )44.8(This is a P)53.9(erl)]TJ 0.859 -1.0909 TD 0.0199 Tc 0.4239 Tw [(inter)-7.9(face to OLE file formats. I)12(n)0.1( par)-7.9(ticular)59.8(, the)]TJ T* -0.0001 Tc 0.0002 Tw [(distribution contains an E)5.8(x)12(cel to HTML conv)5.8(er)-7.9(ter called)]TJ T* 0.0199 Tc 0.7927 Tw [(H)17.8(erber)-7.9(t, http://user)59.8(.cs.tu-berlin.de/~schwar)-7.8(tz/pmh/.)]TJ T* -0.0001 Tc 0.0184 Tw [(Ther)9.7(e is also an open sour)5.8(ce C/C++ pr)5.8(oject based on the)]TJ T* 0.0199 Tc 1.0325 Tw [(L)-12(A)12.1(OL)-12(A wor)5.8(k. )44.8(T)129.9(r)-17.7(y the F)33.9(ilters P)29.8(r)6(oject at)]TJ T* -0.0001 Tc 0.3063 Tw [(http://ar)-7.9(tur)5.8(o)15.9(.dir)9.7(ectmail.org/filtersw)5.8(eb/ and the xlHtml)]TJ T* 0.1792 Tw [(P)29.9(r)6(oject at http://www)74.9(.xlhtml.org/. )44.8(The xlHtml filter is)]TJ T* 0.025 Tw [(mor)9.7(e)0( complete than H)17.8(erber)-7.9(t.)]TJ -0.859 -2.1818 TD -0.0101 Tc [()-481.1(W)9.7(in32::OLE module and office automation.)]TJ /F8 1 Tf 12 0 0 12 63 316.0776 Tm 0 Tc 0 Tw (W)Tj 10.44 0 0 10.44 74.8532 316.0776 Tm 0.0225 Tc (IN)Tj 12 0 0 12 87.1673 316.0776 Tm 0.0198 Tc (32::OLE)Tj /F1 1 Tf 11 0 0 11 63 290.0776 Tm -0.0001 Tc -0.008 Tw (As is often said, only )Tj /F2 1 Tf 9 0 0 9 152.9441 290.0776 Tm -0.0002 Tc 0 Tw (perl)Tj /F1 1 Tf 11 0 0 11 177.2002 290.0776 Tm -0.0001 Tc -0.0081 Tw [(can parse P)53.9(erl.)]TJ -10.3818 -1.0909 TD 0.1053 Tw [(S)12.1(imilarly)84.9(, only E)5.8(x)12(cel can gr)5.8(ok and spe)-5.9(w)]TJ T* 0.0393 Tw [(E)5.8(x)12(cel. )44.9(T)109.9(ackling the binar)-17.9(y file head on is)]TJ T* 0.0912 Tw [(fine up to a cer)-7.9(tain point. After that it)17.7()79.9(s)]TJ T* 0.025 Tw [(best to leav)5.8(e the dir)-7.9(ty wor)5.8(k to E)5.8(x)12(cel.)]TJ 0 -2.1818 TD 0.3351 Tw [(B)17.7(y)0( far the most po)11.9(w)5.8(e)0.1(r)-7.9(ful method of)]TJ 0 -1.0909 TD 0.0959 Tw [(accessing an E)5.8(x)12(cel file for either r)9.7(eading)]TJ T* 0.2979 Tw [(or writing is thr)5.8(ough OLE and OLE)]TJ T* 0.1794 Tw [(A)17.9(utomation. A)17.8(utomation is the pr)5.8(ocess)]TJ T* 0.0175 Tw [(b)5.8(y)0( which OLE objects, such as E)5.8(x)12(cel, act)]TJ T* 0.0306 Tw [(as ser)-17.9(v)5.9(ers and allo)11.9(w other applications to)]TJ T* -0.0081 Tw [(contr)5.8(ol their functionality)84.9(. )14.8(When applied)]TJ T* 0.0199 Tc 0.6458 Tw [(to the M)12(icr)5.8(osoft O)5.8(ffice suite of)]TJ T* -0.0001 Tc 0.3237 Tw [(applications, this pr)5.8(ocess is kno)11.9(wn as)]TJ 25.3636 61.8182 TD 0.025 Tw [(O)5.8(ffice A)17.8(utomation.)]TJ 0 -2.1818 TD -0.0073 Tw [(The follo)11.9(wing is a textual description of ho)11.9(w y)5.8(ou might use)]TJ 0 -1.0909 TD 0.025 Tw [(A)17.9(utomation with E)5.8(x)12(cel:)]TJ 0 -2.1818 TD [( R)11.9(e)-0.1(quest E)5.8(x)12(cel to star)-7.9(t)]TJ 0 -1.0909 TD [( R)11.9(e)-0.1(quest E)5.8(x)12(cel to write some cells)]TJ T* [( R)11.9(e)-0.1(quest E)5.8(x)12(cel to sav)5.8(e the file)]TJ T* [( R)11.9(e)-0.1(quest E)5.8(x)12(cel to close)]TJ 0 -2.1818 TD 0.3387 Tw [(T)119.9(o)0( do this in P)53.9(e)0.1(rl r)9.7(e)0(quir)9.7(es a )14.8(W)9.7(indo)11.9(ws platform, the)]TJ 0 -1.0909 TD 0.0225 Tw [(W)9.7(in32::OLE module, and an installed copy of E)5.8(x)12(cel. H)17.8(e)0.1(r)9.7(e)]TJ T* 0.025 Tw (is an example:)Tj /F2 1 Tf 7 0 0 7 355.8567 638.0776 Tm -0.0002 Tc 0.06 Tw (#!/usr/bin/perl -w)Tj 0 -2.2857 TD (use strict;)Tj 0 -1.1429 TD (use Cwd;)Tj T* (use Win32::OLE;)Tj 0 -2.2857 TD -0.0001 Tc (my $application = Win32::OLE->new\("Excel.Application"\);)Tj 0 -1.1429 TD -0.0002 Tc [(my $workbook)-2579.6(= $application->Workbooks->Add;)]TJ T* [(my $worksheet)-1964.7(= $workbook->Worksheets\(1\);)]TJ 0 -2.2857 TD -0.0001 Tc ($worksheet->Cells\(1,1\)->{Value} = "The Perl Journal";)Tj 0 -1.1429 TD [($worksheet->Cells\(2,1\)->{Value} = "One";)]TJ T* [($worksheet->Cells\(3,1\)->{Value} = "Two";)]TJ T* [($worksheet->Cells\(4,1\)->{Value} = 3;)]TJ T* [($worksheet->Cells\(5,1\)->{Value} = 4.0000001;)]TJ 0 -2.2857 TD -0.0002 Tc [(# Add some formatting)]TJ 0 -1.1429 TD -0.0001 Tc [($worksheet->Cells\(1,1\)->Font->{Bold})-4304(= "True";)]TJ T* [($worksheet->Cells\(1,1\)->Font->{Size})-4304(= 16;)]TJ T* ($worksheet->Cells\(1,1\)->Font->{ColorIndex} = 3;)Tj T* [($worksheet->Columns\("A:A"\)->{ColumnWidth})-1299.8(=)0.1( 25;)]TJ 0 -2.2857 TD (# Get current directory using Cwd.pm)Tj 0 -1.1429 TD -0.0002 Tc (my $dir = cwd\(\);)Tj 0 -2.2857 TD -0.0001 Tc [($workbook->SaveAs\($dir . '/perl_ole.xls'\);)]TJ 0 -1.1429 TD -0.0002 Tc 0 Tw ($workbook->Close;)Tj /F1 1 Tf 11 0 0 11 342 406.0776 Tm -0.0001 Tc 0.1401 Tw [(The r)9.7(esult is sho)11.9(wn in F)33.9(igur)9.7(e 5. )14.8(W)9.7(ithout the formatting)]TJ 0 -1.0909 TD 0.0925 Tw [(code, this pr)5.8(ogram pr)5.8(oduces an E)5.8(x)12(cel file which is almost)]TJ T* 0.025 Tw [(identical to the one sho)11.9(wn in F)33.9(igur)9.7(e 1.)]TJ 0 -2.1818 TD 0.116 Tw [(Ther)9.7(e ar)9.7(e some issues that w)5.8(e)29.7()49.8(v)5.9(e skir)-7.9(ted her)9.7(e, par)-7.9(ticularly )]TJ 0 -1.0909 TD 0.2826 Tw [(in r)9.7(elation to star)-7.9(ting and stopping an OLE ser)-17.9(v)5.9(e)0.1(r)59.7(.)-0.1( A )]TJ 12 0 0 12 63 90.3543 Tm 0 Tc 0 Tw [(28)-1100(F)]TJ 10.44 0 0 10.44 94.2795 90.3543 Tm -0.0001 Tc (ALL)Tj 12 0 0 12 115.6277 90.3543 Tm 0 Tc (2000)Tj /F3 1 Tf 30.9897 0.0003 TD -0.0002 Tc 0.0255 Tw [(The P)47.6(erl J)35.7(our)-8(nal #19)]TJ ET 0 0 0 0 k /GS1 gs 251.88 311.79 341.87 -194.54 re 587.395 90.357 m f* q 340.8013 0 0 193.6007 252.13 117.9392 cm /Im6 Do Q 0 0 0 1 K 0 J 0 j 0.5 w 10 M []0 d 251.88 311.79 341.87 -194.54 re S BT /F8 1 Tf 11 0 0 11 251.6275 319.312 Tm 0 0 0 1 k /GS2 gs -0.0001 Tc [(F)21.9(igur)19.7(e 5. An example file wr)5.8(itten with )35.8(W)9.9(in32::OLE and E)5.8(x)11.9(cel.)]TJ ET Q 0 0 0 0 k /GS2 gs 1 i 37 874 191 -12 re 527.471 319.312 m f* BT /F2 1 Tf 8 0 0 8 39 864 Tm /Cs9 cs 1 scn -0.0004 Tc -0.0019 Tw (TPJ#19/9.26 9/27/00 10:35 AM Page 28)Tj ET 1 G 0 J 0 j 0.5 w 10 M []0 d 36 873 m 36 849 l 0 837 m 24 837 l 621 873 m 621 849 l 657 837 m 633 837 l 36 36 m 36 60 l 0 72 m 24 72 l 621 36 m 621 60 l 657 72 m 633 72 l S /Cs9 CS 1 SCN 0.25 w 36 873 m 36 849 l 0 837 m 24 837 l 621 873 m 621 849 l 657 837 m 633 837 l 36 36 m 36 60 l 0 72 m 24 72 l 621 36 m 621 60 l 657 72 m 633 72 l S 1 G 0.5 w 304.5 861 m 352.5 861 l 304.5 48 m 352.5 48 l 12 478.5 m 12 430.5 l 645 478.5 m 645 430.5 l 328.5 873 m 328.5 849 l 328.5 60 m 328.5 36 l 0 454.5 m 24 454.5 l 633 454.5 m 657 454.5 l 328.5 861 m 334.5 861 l 334.5 857.688 331.812 855 328.5 855 c 325.188 855 322.5 857.688 322.5 861 c 322.5 864.312 325.188 867 328.5 867 c 331.812 867 334.5 864.312 334.5 861 c 328.5 48 m 334.5 48 l 334.5 44.688 331.812 42 328.5 42 c 325.188 42 322.5 44.688 322.5 48 c 322.5 51.312 325.188 54 328.5 54 c 331.812 54 334.5 51.312 334.5 48 c 12 454.5 m 18 454.5 l 18 451.188 15.312 448.5 12 448.5 c 8.688 448.5 6 451.188 6 454.5 c 6 457.812 8.688 460.5 12 460.5 c 15.312 460.5 18 457.812 18 454.5 c 645 454.5 m 651 454.5 l 651 451.188 648.312 448.5 645 448.5 c 641.688 448.5 639 451.188 639 454.5 c 639 457.812 641.688 460.5 645 460.5 c 648.312 460.5 651 457.812 651 454.5 c S /Cs9 CS 1 SCN 0.25 w 304.5 861 m 352.5 861 l 304.5 48 m 352.5 48 l 12 478.5 m 12 430.5 l 645 478.5 m 645 430.5 l 328.5 873 m 328.5 849 l 328.5 60 m 328.5 36 l 0 454.5 m 24 454.5 l 633 454.5 m 657 454.5 l 328.5 861 m 334.5 861 l 334.5 857.688 331.812 855 328.5 855 c 325.188 855 322.5 857.688 322.5 861 c 322.5 864.312 325.188 867 328.5 867 c 331.812 867 334.5 864.312 334.5 861 c 328.5 48 m 334.5 48 l 334.5 44.688 331.812 42 328.5 42 c 325.188 42 322.5 44.688 322.5 48 c 322.5 51.312 325.188 54 328.5 54 c 331.812 54 334.5 51.312 334.5 48 c 12 454.5 m 18 454.5 l 18 451.188 15.312 448.5 12 448.5 c 8.688 448.5 6 451.188 6 454.5 c 6 457.812 8.688 460.5 12 460.5 c 15.312 460.5 18 457.812 18 454.5 c 645 454.5 m 651 454.5 l 651 451.188 648.312 448.5 645 448.5 c 641.688 448.5 639 451.188 639 454.5 c 639 457.812 641.688 460.5 645 460.5 c 648.312 460.5 651 457.812 651 454.5 c S endstream endobj 87 0 obj << /Type /XObject /Subtype /Image /Width 213 /Height 121 /BitsPerComponent 8 /ColorSpace 280 0 R /Length 1202 /Filter /FlateDecode >> stream H خ҃TDl~= d\P:,z*ZE OгmzPM_dzl4 ®?ԋ!b`S{MjDhWP)v6mNhى 7Ht8]BMڞP4Uҥ!azPJo3֩b~'yAS fX+_B)\S4AY%SyۛW#Pd)7*3hQAu*r[ =] zjO7)]g^ VbdisXPsn]zZ0-Ow/ %L'C]iW@VmE-EAa@P׀4kP#T^(A؉b6 }UU/>VS$L/o ],8ʋS=Jo=tӭ)/쫹0n<@y[@>9㠰ln,ފul=>Tw ;}Xu{Py ?=BN9 @u *0񾞦)MYXĩJU\X:EMi#/R(Rºl;BlXA PLaʣZܝ8n`: yb|DP,g?nPMreYtP8pA)=( J]#gzχ 6%J.Jx4{)#3c>"ʮM#@:+8%YA.Cx29\wSJ>m N WLX.6zdbt#06zl~I8~M@g}b l޸@t*DEM:lSof5=P<() ُ#&9ՃD\e)FzUO<<=([WΫ0 P,(פ/5Ԫt Bk ev<P"(e[rP@P8PbB)a(qqF6 8J;MiTjS*=2L "֞@Y&tx^Q.?l:7Pch/& endstream endobj 88 0 obj << /Type /Page /Parent 493 0 R /Resources 89 0 R /Contents 90 0 R /Thumb 377 0 R /MediaBox [ 0 0 684 873 ] /CropBox [ 0 0 684 873 ] /Rotate 0 >> endobj 89 0 obj << /ProcSet [ /PDF /Text ] /Font << /F1 515 0 R /F2 518 0 R /F3 261 0 R /F5 262 0 R /F6 263 0 R /F8 268 0 R /F10 270 0 R /F11 271 0 R >> /ExtGState << /GS1 523 0 R /GS2 521 0 R >> /ColorSpace << /Cs9 520 0 R /Cs16 282 0 R >> >> endobj 90 0 obj << /Length 7022 >> stream 1 g /GS1 gs 0 873 m 0 873 l f q 1 i 27 846 603 -783 re 0 873 m W n 0 873 684 -873 re W n BT /F1 1 Tf 11 0 0 11 63 802.0776 Tm 0 0 0 1 k /GS2 gs -0.0001 Tc 0.2339 Tw [(mor)9.7(e)0( detailed intr)5.8(oduction to the )14.8(W)9.7(in32::OLE module )]TJ 0 -1.0909 TD 0.0199 Tc 1.0071 Tw [(is giv)5.8(en b)5.8(y)-0.1( J)29.7(a)0(n D)11.9(ubois in )44.8(TPJ #10 at)]TJ T* 0 Tw [(http://www)74.9(.itkno)11.9(wledge.com/tpj/issues/v)5.7(ol3_2/tpj0302-)]TJ T* -0.0001 Tc (0008.html.)Tj 0 -2.1818 TD 0.3026 Tw [(F)35.9(or additional examples see http://www)74.9(.activ)5.8(estate.com/)]TJ 0 -1.0909 TD 0.0687 Tc 0 Tw [(P)29.8(r)5.9(oducts/A)11.8(ctiv)5.7(eP)53.9(erl/docs/faq/W)9.7(indo)11.8(ws/A)11.9(ctiv)5.7(eP)53.9(erl-)]TJ T* -0.0001 Tc 0.183 Tw [(W)9.7(infaq12.html and http://www)74.9(.activ)5.8(estate.com/P)29.7(r)6(oducts/)]TJ T* 0 Tw [(A)12.1(ctiv)5.8(e)0(P)53.9(erl/docs/site/lib/W)9.7(in32/OLE.html.)]TJ 0 -2.1818 TD 0.0199 Tc 0.5208 Tw [(As a brief div)5.8(ersion, the follo)11.9(wing pr)5.8(ogram uses)]TJ 0 -1.0909 TD -0.0001 Tc 0.1104 Tw [(W)9.7(in32::OLE to expose the flight simulator Easter E)5.8(gg in)]TJ T* 0.025 Tw [(E)5.8(x)12(cel 97 SR2.)]TJ /F2 1 Tf 7 0 0 7 75.0717 638.0776 Tm -0.0852 Tc 0.06 Tw (#!/usr/bin/perl -w)Tj 0 -2.2857 TD (use strict;)Tj 0 -1.1429 TD (use Win32::OLE;)Tj 0 -2.2857 TD [(my $application = Win32::OLE->new\("Excel.Application"\);)]TJ 0 -1.1429 TD [(my $workbook)-2119.6(= $application->Workbooks->Add;)]TJ T* [(my $worksheet)-1634.7(= $workbook->Worksheets\(1\);)]TJ 0 -2.2857 TD ($application->{Visible} = 1;)Tj T* 0 Tw ($worksheet->Range\("L97:X97"\)->Select;)Tj 0 -1.1429 TD ($worksheet->Range\("M97"\)->Activate;)Tj 0 -2.2857 TD 0.0599 Tw [(my $message = "Hold down Shift and Ctrl and click the ".)]TJ 9.1975 -1.1429 TD [("Chart Wizard icon on the toolbar.\\n\\n".)]TJ T* [("Use the mouse motion and buttons to control ".)]TJ T* ("movement. Try to find the monolith. ".)Tj T* ("Close this dialog first.";)Tj -9.1975 -2.2857 TD 0 Tw ($application->InputBox\($message\);)Tj /F8 1 Tf 12 0 0 12 342 801.3574 Tm 0 Tc (O)Tj 10.44 0 0 10.44 351.7439 801.3574 Tm 0.0228 Tc [(B)11.8(T)88.8(AINING)]TJ 12 0 0 12 407.8492 801.3574 Tm 0 Tc (S)Tj 10.44 0 0 10.44 414.136 801.3574 Tm 0.0228 Tc (PREADSHEET)Tj 12 0 0 12 482.4301 801.3574 Tm 0.0197 Tc (::W)Tj 10.44 0 0 10.44 500.8805 801.3574 Tm 0.0227 Tc (RITE)Tj 12 0 0 12 525.5519 801.3574 Tm 0 Tc (E)Tj 10.44 0 0 10.44 532.7499 801.3574 Tm 0.0227 Tc [(X)23.7(CEL)]TJ /F1 1 Tf 11 0 0 11 342 775.3574 Tm -0.0001 Tc 0.0404 Tw [(The latest v)5.8(ersion of the module will always be av)5.8(ailable at)]TJ 0 -1.0909 TD 0.2852 Tw [(CP)39.7(AN, at http://sear)5.8(ch.cpan.org/sear)5.8(ch?dist=S)23.9(pr)9.7(eadsheet-)]TJ T* 0 Tw [(W)81.7(riteE)5.8(x)12(cel.)]TJ 0 -2.1818 TD 0.0066 Tw [(A)12.1(c)0.1(tiv)5.8(eP)53.9(erl users can do)11.9(wnload and install the module using)]TJ 0 -1.0909 TD 0.025 Tw [(PPM as follo)11.9(ws:)]TJ /F2 1 Tf 7 0 0 7 350.1179 695.3574 Tm -0.0802 Tc 0 Tw (C:\\> )Tj /F11 1 Tf 2.6593 0 TD (ppm)Tj /F2 1 Tf -2.6593 -1.1429 TD (PPM> )Tj /F11 1 Tf 2.6593 0 TD -0.0801 Tc 0.0599 Tw (set repository tmp http://homepage.eircom.net/~jmcnamara/perl)Tj /F2 1 Tf -2.6593 -1.1429 TD -0.0802 Tc 0 Tw (PPM> )Tj /F11 1 Tf 2.6593 0 TD 0.06 Tw (install Spreadsheet-WriteExcel)Tj /F2 1 Tf -2.6593 -1.1429 TD 0 Tw (PPM>)Tj /F11 1 Tf 2.6593 0 TD (quit)Tj /F2 1 Tf -2.6593 -1.1429 TD (C:\\>)Tj /F10 1 Tf 11 0 0 11 342 639.3574 Tm -0.0001 Tc 0.0278 Tw (_ _END_ _)Tj /F5 1 Tf 0 -2.1818 TD -0.0002 Tc 0.0243 Tw [(J)35.8(o)-0.1(hn McN)29.6(amar)29.6(a )]TJ /F1 1 Tf 6.5261 0 TD -0.0001 Tc 0 Tw (\(jmcnamara@cpan.org\))Tj /F5 1 Tf 9.3224 0 TD 0.0243 Tw [(wor)5.8(ks as a softwar)19.7(e)]TJ -15.8485 -1.0909 TD 0.0616 Tw [(dev)5.8(eloper for )47.8(T)130(ecnomen Ltd. A)17.8(par)-7.9(t fr)5.8(om the usual things that)]TJ T* -0.024 Tw [(engage us all, his main inter)19.7(est in life is the S)5.8(aab 900 series. H)23.9(e)]TJ T* 0.025 Tw [(liv)5.8(es in L)11.9(imerick, I)11.9(r)19.9(eland.)]TJ /F1 1 Tf 12 0 0 12 517.3723 90.3543 Tm 0 Tc 0 Tw (F)Tj 10.44 0 0 10.44 523.4518 90.3543 Tm -0.0001 Tc (ALL)Tj 12 0 0 12 544.7999 90.3543 Tm 0 Tc 0.025 Tw [(2000 29)]TJ /F3 1 Tf -40.15 0 TD -0.0002 Tc 0.0255 Tw [(The P)47.6(erl J)35.7(our)-8(nal #19)]TJ ET 0 0 0 0.1 k /GS1 gs 63.5 458.5 530 -341 re 162.892 90.354 m f* 0 0 0 1 K 0 J 0 j 1 w 10 M []0 d 63.5 458.5 530 -341 re S BT /F8 1 Tf 24 0 0 24 277.2744 325.7976 Tm 0 0 0 1 k /GS2 gs 0 Tw [(OREILL)69.6(Y)]TJ 0.4067 -1.2 TD 0.0255 Tw (1/2 page)Tj 0.57 -2.4 TD -0.0004 Tc 0 Tw [(NE)11.6(W)]TJ ET /Cs16 cs 1 scn 342 553.99 252 -76.99 re 356.29 239.398 m f* BT /F6 1 Tf 14 0 0 14 352.6489 525.5681 Tm 0 0 0 0 k /GS1 gs 0 Tc 0.0249 Tw (All TPJ programs can be found online at)Tj 2.7405 -2 TD -0.0001 Tc 0 Tw (http://tpj.com/tpj/programs)Tj ET Q 0 0 0 0 k 1 i 37 874 191 -12 re 544.983 497.568 m f* BT /F2 1 Tf 8 0 0 8 39 864 Tm /Cs9 cs 1 scn -0.0004 Tc -0.0019 Tw (TPJ#19/9.26 9/27/00 10:35 AM Page 29)Tj ET 1 G 0 J 0 j 0.5 w 10 M []0 d 36 873 m 36 849 l 0 837 m 24 837 l 621 873 m 621 849 l 657 837 m 633 837 l 36 36 m 36 60 l 0 72 m 24 72 l 621 36 m 621 60 l 657 72 m 633 72 l S /Cs9 CS 1 SCN 0.25 w 36 873 m 36 849 l 0 837 m 24 837 l 621 873 m 621 849 l 657 837 m 633 837 l 36 36 m 36 60 l 0 72 m 24 72 l 621 36 m 621 60 l 657 72 m 633 72 l S 1 G 0.5 w 304.5 861 m 352.5 861 l 304.5 48 m 352.5 48 l 12 478.5 m 12 430.5 l 645 478.5 m 645 430.5 l 328.5 873 m 328.5 849 l 328.5 60 m 328.5 36 l 0 454.5 m 24 454.5 l 633 454.5 m 657 454.5 l 328.5 861 m 334.5 861 l 334.5 857.688 331.812 855 328.5 855 c 325.188 855 322.5 857.688 322.5 861 c 322.5 864.312 325.188 867 328.5 867 c 331.812 867 334.5 864.312 334.5 861 c 328.5 48 m 334.5 48 l 334.5 44.688 331.812 42 328.5 42 c 325.188 42 322.5 44.688 322.5 48 c 322.5 51.312 325.188 54 328.5 54 c 331.812 54 334.5 51.312 334.5 48 c 12 454.5 m 18 454.5 l 18 451.188 15.312 448.5 12 448.5 c 8.688 448.5 6 451.188 6 454.5 c 6 457.812 8.688 460.5 12 460.5 c 15.312 460.5 18 457.812 18 454.5 c 645 454.5 m 651 454.5 l 651 451.188 648.312 448.5 645 448.5 c 641.688 448.5 639 451.188 639 454.5 c 639 457.812 641.688 460.5 645 460.5 c 648.312 460.5 651 457.812 651 454.5 c S /Cs9 CS 1 SCN 0.25 w 304.5 861 m 352.5 861 l 304.5 48 m 352.5 48 l 12 478.5 m 12 430.5 l 645 478.5 m 645 430.5 l 328.5 873 m 328.5 849 l 328.5 60 m 328.5 36 l 0 454.5 m 24 454.5 l 633 454.5 m 657 454.5 l 328.5 861 m 334.5 861 l 334.5 857.688 331.812 855 328.5 855 c 325.188 855 322.5 857.688 322.5 861 c 322.5 864.312 325.188 867 328.5 867 c 331.812 867 334.5 864.312 334.5 861 c 328.5 48 m 334.5 48 l 334.5 44.688 331.812 42 328.5 42 c 325.188 42 322.5 44.688 322.5 48 c 322.5 51.312 325.188 54 328.5 54 c 331.812 54 334.5 51.312 334.5 48 c 12 454.5 m 18 454.5 l 18 451.188 15.312 448.5 12 448.5 c 8.688 448.5 6 451.188 6 454.5 c 6 457.812 8.688 460.5 12 460.5 c 15.312 460.5 18 457.812 18 454.5 c 645 454.5 m 651 454.5 l 651 451.188 648.312 448.5 645 448.5 c 641.688 448.5 639 451.188 639 454.5 c 639 457.812 641.688 460.5 645 460.5 c 648.312 460.5 651 457.812 651 454.5 c S endstream endobj 91 0 obj << /Type /Page /Parent 493 0 R /Resources 92 0 R /Contents 93 0 R /Thumb 379 0 R /MediaBox [ 0 0 684 873 ] /CropBox [ 0 0 684 873 ] /Rotate 0 >> endobj 92 0 obj << /ProcSet [ /PDF /Text ] /Font << /F1 515 0 R /F2 518 0 R /F3 261 0 R /F5 262 0 R /F7 267 0 R /F8 268 0 R /F9 269 0 R >> /ExtGState << /GS1 523 0 R /GS2 521 0 R >> /ColorSpace << /Cs9 520 0 R /Cs10 264 0 R >> >> endobj 93 0 obj << /Length 12755 >> stream 1 g /GS1 gs 0 873 m 0 873 l f q 1 i 27 846 603 -783 re 0 873 m W n 0 873 684 -873 re W n BT /F5 1 Tf 11 0 0 11 63 649.0776 Tm 0 0 0 1 k /GS2 gs -0.0001 Tc 0.025 Tw [(E)29.8(v)6(er)-17.9(ybody)71.7(. G)23.9(et I)23.8(n)0( L)11.9(i)0(ne!)]TJ 8.6482 -2.1818 TD [(M)6(aking F)17.8(lipp)11.9(y F)17.8(lopp)11.9(y)]TJ /F1 1 Tf 8.176 0 TD -0.0198 Tw [(, T)109.9(alking )-44.8(H)17.8(eads)]TJ 29.09 0 0 29.09 62.364 589.0776 Tm 0 Tc 0 Tw (I)Tj 11 0 0 11 77.2914 601.0776 Tm -0.0001 Tc 0.2424 Tw [(star)-7.9(ted out my car)9.7(eer as an IBM assembly language)]TJ -0.4924 -1.0909 TD 0.0061 Tw [(pr)5.8(ogrammer)59.7(. )14.8(Y)93.9(ou kno)11.9(w)74.9(,)0( hexadecimal arithmetic, bit-lev)5.8(el)]TJ -0.8068 -1.0909 TD 0.2164 Tw [(operations, debugging 500 page cor)9.7(e dumps printed on)]TJ T* 0.0594 Tw [(gr)9.7(eenbar paper)59.7(. )44.9(The cool thing about assembly language is)]TJ T* 0.1555 Tw [(that y)5.8(ou can do )]TJ /F5 1 Tf 6.9075 0 TD 0 Tw (anything)Tj /F1 1 Tf 3.2302 0 TD 0.1555 Tw [(. )14.8(Y)93.9(ou could write a nice menu-)]TJ -10.1377 -1.0909 TD 0.1807 Tw [(based hyper-linking user inter)-7.9(face that stor)9.7(es its data on)]TJ T* 0.335 Tw [(y)5.8(our o)11.9(wn homemade mass-storage device. )14.8(What sucks)]TJ T* 0.0199 Tc 0.4129 Tw [(about assembly is that y)5.9(ou )]TJ /F5 1 Tf 13.0227 0 TD 0 Tw [(hav)5.7(e)]TJ /F1 1 Tf 2.4475 0 TD 0.4129 Tw (to do )Tj /F5 1 Tf 3.2332 0 TD 0 Tw [(ev)5.8(er)-17.9(ything)]TJ /F1 1 Tf 3.9558 0 TD 0 Tc (.)Tj -22.6591 -1.0909 TD -0.0002 Tc [(P)29.8(r)5.9(ogramming )]TJ /F2 1 Tf 9 0 0 9 124.2205 505.0776 Tm 0.0049 Tw (A = B + C)Tj /F1 1 Tf 11 0 0 11 175.7559 505.0776 Tm -0.0001 Tc 0.002 Tw [(takes mor)9.7(e than one punch car)13.9(d.)]TJ -10.2505 -2.1818 TD 0.0094 Tc 0.3655 Tw [(After a while, I spent most of my time dev)5.7(eloping)]TJ 0 -1.0909 TD -0.0001 Tc 0.185 Tw [(pr)5.8(ogramming tools and language extensions. Any hacker)]TJ T* 0.0977 Tw [(wor)-7.9(th his salt cannot code something the same way mor)9.7(e)]TJ T* 0.1726 Tw [(than thr)9.7(ee times without writing an abstraction to do it)]TJ T* 0.0197 Tw [(instead. I would write things to turn concepts like memor)-17.9(y)]TJ T* (allocation, I/O, and database access into assembly language)Tj T* 0.025 Tw [(one-liners with some object-oriented behavior)59.7(.)]TJ 0 -2.1818 TD 0.1169 Tw [(When I switched to P)53.9(erl about 3 y)5.8(ears ago, it was a v)5.8(e)0.1(r)-17.9(y)]TJ 0 -1.0909 TD 0.0735 Tw [(natural transition. Assembly to P)53.9(erl? N)29.8(atural? D)5.8(efinitely! I)]TJ T* 0.0013 Tc 0.3736 Tw (soon found that although I could accomplish almost)Tj T* -0.0001 Tc 0.0389 Tw [(anything I wanted to, I didn)69.8()79.9(t)0( hav)5.8(e to do all the wor)5.8(k. P)53.9(erl)]TJ T* 0.2865 Tw [(has so many po)11.9(w)5.8(e)0.1(r)-7.9(ful built-in featur)9.7(es and extensions:)]TJ T* 0 Tc 0.0032 Tw [(r)10(egular expr)9.8(essions, r)-7.8(un-time ev)5.9(aluation, L)109.9(W)0.2(P)180(,)0.1( and CGI, to)]TJ T* -0.0001 Tc 0.0082 Tw [(name a fe)-5.9(w)74.9(.)-0.1( I)5.8(f)0( I needed to write my o)11.9(wn pr)5.8(otocol or device)]TJ T* 0.025 Tw [(lev)5.8(el stuff)15.8(, I could generally do that too)15.8(.)]TJ 0 -2.1818 TD 0.1586 Tw [(E)29.7(v)5.9(er)-17.9(ything was pr)5.8(oceeding swimmingly)84.9(. )44.8(Then one day)84.9(, I)]TJ 0 -1.0909 TD 0.0736 Tw [(needed to make my P)53.9(erl code wor)5.8(k with someone else)29.7()79.9(s)0( C)]TJ T* 0.2002 Tw [(code. I had hear)13.8(d that P)53.9(erl has facilities for doing such)]TJ T* -0.0215 Tw [(things. I assumed that since P)53.9(erl was so aw)5.8(esome, it must be)]TJ T* 0.025 Tw [(r)9.9(eally easy to do)15.8(. S)11.9(omething along the lines of:)]TJ /F2 1 Tf 7 0 0 7 67.6189 209.0776 Tm -0.0002 Tc 0.06 Tw ($question = "How soon is now?";)Tj 1.9795 -1.1429 TD -0.0001 Tc [(print "And the answer is: ", &ask_Mr_Wizard\($question\);)]TJ T* -0.0002 Tc 0 Tw (exit;)Tj 0 -2.2857 TD 0.06 Tw (BEGIN :C {)Tj 2.6394 -1.1429 TD (char* ask_Mr_Wizard\(char* q\) {)Tj T* (/* omniscient C code omitted */)Tj 2.6394 -1.1429 TD (return a;)Tj -2.6394 -1.1429 TD 0 Tc 0 Tw (})Tj -2.6394 -1.1429 TD (})Tj /F1 1 Tf 11 0 0 11 342 739.0776 Tm -0.0001 Tc 0.282 Tw [(U)35.9(nfor)-7.9(tunately)84.9(, it turned out that I needed to cr)9.7(eate a)]TJ 0 -1.0909 TD 0.1263 Tw [(separate module, a separate C file, a )39.8(glue code)29.7( file in a)]TJ T* 0.1118 Tw (language called XS, a type mapping file, and a )Tj /F2 1 Tf 9 0 0 9 550.8106 715.0776 Tm -0.0002 Tc 0 Tw (Makefile)Tj /F1 1 Tf 11 0 0 11 342 703.0776 Tm -0.0001 Tc 0.025 Tw (generating file.)Tj 7.15 0 0 7.15 405.2189 705.5496 Tm 0 Tc 0 Tw (1)Tj -8.8418 -3.3566 TD (1)Tj 11 0 0 11 345.575 679.0776 Tm -0.0001 Tc -0.0197 Tw [(A)12.1(ctually the )]TJ /F2 1 Tf 9 0 0 9 398.8525 679.0776 Tm -0.0002 Tc 0 Tw (h2xs)Tj /F1 1 Tf 11 0 0 11 422.9806 679.0776 Tm -0.0001 Tc -0.0196 Tw [(utility cr)9.7(eates all of these for y)5.8(o)-0.1(u. B)11.9(ut it)17.7()79.9(s)]TJ -7.3619 -1.0909 TD 0.025 Tw [(up to y)5.8(ou to modify and maintain them.)]TJ 0 -2.1818 TD 0.0863 Tw [(Then I needed to absorb the content of o)15.8(v)5.9(er a half doz)5.8(en)]TJ 0 -1.0909 TD 0.0523 Tw [(lengthy P)53.9(erl man pages, r)9.7(ead a couple of books, and muck)]TJ T* 0.3526 Tw [(about in the P)53.9(erl sour)5.8(ce code for examples. All v)5.8(e)0.1(r)-17.9(y)]TJ T* -0.0117 Tw [(inter)9.7(esting stuff)15.8(, I assur)9.7(e y)5.8(ou, but all I wanted to do was ask)]TJ T* 0.0608 Tw [(Mr)59.7(. )14.7(W)9.7(izar)13.8(d a question. I)5.8(f)0.1( P)53.9(erl is supposed to make simple)]TJ T* 0.0463 Tw [(things simple, and har)13.8(d things possible, this was bor)13.8(dering)]TJ T* 0.025 Tw (on the impossible.)Tj /F8 1 Tf 12 0 0 12 342 545.0776 Tm 0 Tc 0 Tw (I)Tj 10.44 0 0 10.44 346.4851 545.0776 Tm 0.0228 Tc [(NTR)35.7(ODUCING)]TJ 12 0 0 12 425.273 545.0776 Tm 0 Tc (I)Tj 10.44 0 0 10.44 429.7581 545.0776 Tm 0.0227 Tc (NLINE)Tj 12 0 0 12 462.8309 545.0776 Tm 0 Tc (.)Tj 10.44 0 0 10.44 466.1294 545.0776 Tm 0.0227 Tc (PM)Tj /F1 1 Tf 11 0 0 11 342 519.0776 Tm -0.0001 Tc 0.0649 Tw [(I)12(n)0.1(spir)9.7(ed b)5.8(y)0( the many pr)9.7(esentations of D)5.8(a)0(mian Conway at)]TJ T* 0.0277 Tw [(this past S)23.9(ummer)19.7()79.9(s)0( P)53.9(erl Confer)9.7(ence 4.0, I decided to cr)9.7(eate)]TJ T* 0.1636 Tw [(a module that would let me include other pr)5.8(ogramming)]TJ 0 -8.7273 TD 0.2991 Tw [(languages dir)9.7(ectly in my P)53.9(erl code in much the same)]TJ 0 -1.0909 TD 0.3682 Tw [(manner sho)11.9(wn abo)15.8(v)5.9(e. )14.8(What impr)9.7(essed me about D)11.9(r)59.9(.)]TJ T* 0.0095 Tc 0.3654 Tw [(Conway)29.7()79.8(s)0( modules was that he coupled pr)5.7(oblems of)]TJ T* -0.0001 Tc -0.0351 Tw [(immense magnitude with solutions of equal simplicity)84.9(, or in)]TJ T* 0.0188 Tw [(D)6(amian)69.8()79.9(s)0( wor)13.8(ds D)19.7(WIM)11.9(ity)39.7( \(D)11.9(o )14.8(What I M)23.9(ean\). I decided)]TJ T* -0.024 Tw (to call this module )Tj /F2 1 Tf 9 0 0 9 422.6513 339.0775 Tm -0.0002 Tc 0 Tw (Inline.pm)Tj /F1 1 Tf 11 0 0 11 471.2394 339.0775 Tm -0.0001 Tc -0.024 Tw [(. I)23.9(t)0( is fitting that much of the)]TJ -11.749 -1.0909 TD 0.083 Tw [(wor)5.8(k done b)5.8(y)0( this module is accomplished with D)5.8(amian)69.8()79.9(s)]TJ T* 0 Tw [(P)42.1(arse::R)11.9(ecD)5.8(escent.)]TJ /F2 1 Tf 9 0 0 9 342 291.0775 Tm 0.0091 Tc (Inline)Tj /F1 1 Tf 11 0 0 11 381.7693 291.0775 Tm 0.3657 Tw [(wor)5.8(ks on all flav)5.8(ors of U)35.8(nix and M)11.9(icr)5.8(osoft)]TJ -3.6154 -1.0909 TD -0.0001 Tc 0.3557 Tw [(W)9.7(indo)11.9(ws, pr)5.8(o)15.9(vided y)5.8(ou hav)5.8(e the pr)5.8(oper dev)5.8(elopment)]TJ T* 0.1828 Tw [(envir)5.8(onment. R)11.9(ead the )]TJ /F2 1 Tf 9 0 0 9 448.3531 267.0775 Tm -0.0002 Tc 0 Tw (Inline)Tj /F1 1 Tf 11 0 0 11 485.5057 267.0775 Tm -0.0001 Tc 0.1828 Tw [(documentation for mor)9.7(e)]TJ -13.046 -1.0909 TD -0.0002 Tc 0 Tw (information.)Tj 0 -2.1818 TD -0.0001 Tc 0.0155 Tw [(E)5.8(nough talk. Let)17.7()79.9(s)0( check this thing out. H)17.8(e)0.1(r)9.7(e)29.7()79.9(s)0( a simple but)]TJ 0 -1.0909 TD 0.025 Tw [(complete pr)5.8(ogram:)]TJ /F2 1 Tf 7 0 0 7 360.4756 199.0776 Tm -0.0002 Tc 0.06 Tw (# rithmatick.pl)Tj 0 -1.1429 TD -0.0001 Tc [(print "9 + 16 = ", add\(9, 16\), "\\n";)]TJ T* [(print "9 - 16 = ", subtract\(9, 16\), "\\n";)]TJ 0 -2.2857 TD [(use Inline C => <<'END_OF_C_CODE';)]TJ T* -0.0002 Tc [(int add\(int x, int y\) {)]TJ 1.3197 -1.1429 TD (return x + y;)Tj -1.3197 -1.1429 TD 0 Tc 0 Tw (})Tj 0 -2.2857 TD -0.0002 Tc 0.06 Tw [(int subtract\(int x, int y\) {)]TJ /F1 1 Tf 12 0 0 12 63 90.3543 Tm 0 Tc 0 Tw [(30)-1100(F)]TJ 10.44 0 0 10.44 94.2795 90.3543 Tm -0.0001 Tc (ALL)Tj 12 0 0 12 115.6277 90.3543 Tm 0 Tc (2000)Tj /F3 1 Tf 30.9897 0.0003 TD -0.0002 Tc 0.0255 Tw [(The P)47.6(erl J)35.7(our)-8(nal #19)]TJ ET 0 0 0 0 k 63 798 531 -21.17 re 587.395 90.357 m f* BT /F8 1 Tf 16 0 0 16 63 786.4766 Tm 0 0 0 1 k 0 Tc 0 Tw (E)Tj 13.92 0 0 13.92 72.2773 786.4766 Tm -0.0002 Tc [(X)5.7(TENDING)]TJ 16 0 0 16 151.1513 786.4766 Tm 0 Tc (P)Tj 13.92 0 0 13.92 160.391 786.4766 Tm -0.0003 Tc [(ERL)-286.7(WITH)]TJ 16 0 0 16 233.0425 786.4766 Tm 0 Tc (I)Tj 13.92 0 0 13.92 238.7026 786.4766 Tm -0.0003 Tc (NLINE)Tj 16 0 0 16 281.1999 786.4766 Tm 0 Tc (.)Tj 13.92 0 0 13.92 285.278 786.4766 Tm -0.0002 Tc (PM)Tj /F7 1 Tf 16 0 0 16 492.0447 786.4766 Tm 0.0036 Tw [(Brian Inger)-20(son)]TJ ET /Cs10 CS 1 SCN 0 J 0 j 6 w 10 M []0 d 63 807 m 207 807 l S 0 0.03 0.3 0 k /GS1 gs 63.25 746.75 251.5 -71.5 re 593.998 786.477 m f* BT /F9 1 Tf 12 0 0 12 147.4807 733.1238 Tm 0 0 0 1 k /GS2 gs 0.0277 Tw [(P)29.8(a)0(cka)14.7(g)14.7(es Used)]TJ /F1 1 Tf 9 0 0 9 72.5 719.1238 Tm 0 Tc 0 Tw [(I)12.1(nline)-144.2(...................................................................................CP)39.8(A)0.2(N)]TJ 0 -1.3333 TD [(I)12.1(nline::Config)-195.2(......................................................................CP)39.8(A)0.2(N)]TJ T* [(P)42.2(arse::R)12(ecD)5.9(escent)-158.8(................................................................CP)39.8(A)0.2(N)]TJ T* [(D)12.2(igest::MD5)-231.6(.......................................................................CP)39.8(A)0.2(N)]TJ ET 0 0 0 1 K 0.5 w /GS1 gs 63.25 746.75 251.5 -71.5 re 304.52 683.124 m S BT /F9 1 Tf 14 0 0 14 370.1461 463.3003 Tm /GS2 gs -0.0102 Tc 0.0277 Tw [(One da)39.6(y)79.9(,)-196(I needed to mak)29.6(e m)34.7(y)0.2( )]TJ 0.1413 -1.1429 TD [(P)75(erl code w)19.6(ork with someone )]TJ 3.7529 -1.1429 TD -0.0101 Tc [(else)79.7(s C code)-19.9(.)]TJ ET 2 w 342 482.88 m 594 482.88 l S 0.667 w 342 480.21 m 594 480.21 l 342 421.15 m 594 421.15 l S 2 w 342 418.48 m 594 418.48 l S Q 0 0 0 0 k 1 i 37 874 191 -12 re 511.336 431.3 m f* BT /F2 1 Tf 8 0 0 8 39 864 Tm /Cs9 cs 1 scn -0.0004 Tc -0.0019 Tw (TPJ#19/9.26 9/27/00 10:35 AM Page 30)Tj ET 1 G 0 J 0 j 0.5 w 10 M []0 d 36 873 m 36 849 l 0 837 m 24 837 l 621 873 m 621 849 l 657 837 m 633 837 l 36 36 m 36 60 l 0 72 m 24 72 l 621 36 m 621 60 l 657 72 m 633 72 l S /Cs9 CS 1 SCN 0.25 w 36 873 m 36 849 l 0 837 m 24 837 l 621 873 m 621 849 l 657 837 m 633 837 l 36 36 m 36 60 l 0 72 m 24 72 l 621 36 m 621 60 l 657 72 m 633 72 l S 1 G 0.5 w 304.5 861 m 352.5 861 l 304.5 48 m 352.5 48 l 12 478.5 m 12 430.5 l 645 478.5 m 645 430.5 l 328.5 873 m 328.5 849 l 328.5 60 m 328.5 36 l 0 454.5 m 24 454.5 l 633 454.5 m 657 454.5 l 328.5 861 m 334.5 861 l 334.5 857.688 331.812 855 328.5 855 c 325.188 855 322.5 857.688 322.5 861 c 322.5 864.312 325.188 867 328.5 867 c 331.812 867 334.5 864.312 334.5 861 c 328.5 48 m 334.5 48 l 334.5 44.688 331.812 42 328.5 42 c 325.188 42 322.5 44.688 322.5 48 c 322.5 51.312 325.188 54 328.5 54 c 331.812 54 334.5 51.312 334.5 48 c 12 454.5 m 18 454.5 l 18 451.188 15.312 448.5 12 448.5 c 8.688 448.5 6 451.188 6 454.5 c 6 457.812 8.688 460.5 12 460.5 c 15.312 460.5 18 457.812 18 454.5 c 645 454.5 m 651 454.5 l 651 451.188 648.312 448.5 645 448.5 c 641.688 448.5 639 451.188 639 454.5 c 639 457.812 641.688 460.5 645 460.5 c 648.312 460.5 651 457.812 651 454.5 c S /Cs9 CS 1 SCN 0.25 w 304.5 861 m 352.5 861 l 304.5 48 m 352.5 48 l 12 478.5 m 12 430.5 l 645 478.5 m 645 430.5 l 328.5 873 m 328.5 849 l 328.5 60 m 328.5 36 l 0 454.5 m 24 454.5 l 633 454.5 m 657 454.5 l 328.5 861 m 334.5 861 l 334.5 857.688 331.812 855 328.5 855 c 325.188 855 322.5 857.688 322.5 861 c 322.5 864.312 325.188 867 328.5 867 c 331.812 867 334.5 864.312 334.5 861 c 328.5 48 m 334.5 48 l 334.5 44.688 331.812 42 328.5 42 c 325.188 42 322.5 44.688 322.5 48 c 322.5 51.312 325.188 54 328.5 54 c 331.812 54 334.5 51.312 334.5 48 c 12 454.5 m 18 454.5 l 18 451.188 15.312 448.5 12 448.5 c 8.688 448.5 6 451.188 6 454.5 c 6 457.812 8.688 460.5 12 460.5 c 15.312 460.5 18 457.812 18 454.5 c 645 454.5 m 651 454.5 l 651 451.188 648.312 448.5 645 448.5 c 641.688 448.5 639 451.188 639 454.5 c 639 457.812 641.688 460.5 645 460.5 c 648.312 460.5 651 457.812 651 454.5 c S endstream endobj 94 0 obj << /Type /Page /Parent 494 0 R /Resources 95 0 R /Contents 96 0 R /Thumb 381 0 R /MediaBox [ 0 0 684 873 ] /CropBox [ 0 0 684 873 ] /Rotate 0 >> endobj 95 0 obj << /ProcSet [ /PDF /Text ] /Font << /F1 515 0 R /F2 518 0 R /F3 261 0 R /F5 262 0 R /F8 268 0 R /F9 269 0 R /F11 271 0 R >> /ExtGState << /GS1 523 0 R /GS2 521 0 R >> /ColorSpace << /Cs9 520 0 R >> >> endobj 96 0 obj << /Length 13604 >> stream 1 g /GS1 gs 0 873 m 0 873 l f q 1 i 27 846 603 -783 re 0 873 m W n 0 873 684 -873 re W n BT /F2 1 Tf 7 0 0 7 90.7134 805.2832 Tm 0 0 0 1 k /GS2 gs -0.0002 Tc 0.06 Tw (return x - y;)Tj -1.3197 -1.1429 TD 0 Tc 0 Tw (})Tj 0 -2.2857 TD -0.0002 Tc (END_OF_C_CODE)Tj /F1 1 Tf 11 0 0 11 63 757.2832 Tm -0.0001 Tc 0.3607 Tw [(That)17.7()79.9(s)0( it! J)35.8(ust r)-7.9(un it like any other P)53.9(erl)]TJ 0 -1.0909 TD 0.025 Tw [(pr)5.8(ogram and it will print:)]TJ /F2 1 Tf 7 0 0 7 81.4756 725.2832 Tm -0.0002 Tc 0.06 Tw (9 + 16 = 25)Tj 0 -1.1429 TD (9 - 16 = -7)Tj /F1 1 Tf 11 0 0 11 63 693.2832 Tm -0.0051 Tc 0.0374 Tw [(I)49.7(v)5.9(e)0( just managed to accomplish something in)]TJ 0 -1.0909 TD 0.0324 Tw [(ten lines that used to take two)15.7(. B)11.9(ut it)17.7()79.9(s)0( just an)]TJ T* 0.0705 Tw [(example; the point is that y)5.8(ou can no)11.9(w jump)]TJ T* -0.0027 Tc 0.3726 Tw [(painlessly fr)5.8(om P)53.9(erl-space to C-space and)]TJ T* -0.0051 Tc 0.2665 Tw [(back. O)5.8(n)0(ce y)5.8(o)0.1(u)49.7()69.9(r)9.9(e)0( in C-space, y)5.8(ou can do)]TJ T* 0.1604 Tw [(whatev)5.8(er floats y)5.8(our boat, like write a super)]TJ T* 0.0455 Tw [(speedy algorithm, inv)5.7(oke legacy code thr)5.7(ough)]TJ T* 0.025 Tw [(an AP)11.9(I, or access the entir)9.6(e internals of )]TJ /F2 1 Tf 9 0 0 9 230.6465 609.2832 Tm 0 Tw (perl)Tj /F1 1 Tf 11 0 0 11 252.0613 609.2832 Tm 0 Tc (.)Tj -17.1874 -2.1818 TD -0.0001 Tc 0.1299 Tw [(B)11.9(ut ho)11.9(w is this possible? D)11.9(o)0.1(n)69.8()79.9(t y)5.8(ou need to)]TJ 0 -1.0909 TD 0.1124 Tw [(compile and link the C code? )14.8(W)77.8(ouldn)69.8()79.9(t)0( that)]TJ T* 0.1541 Tw [(make the pr)5.8(ogram extr)9.7(emely slo)11.9(w? H)17.8(o)12(w do)]TJ T* 0.0321 Tw [(the P)53.9(erl v)5.8(ariables get conv)5.8(er)-7.9(ted to C v)5.8(ariables)]TJ T* 0.0082 Tw [(and back? H)17.8(o)12(w can C functions be called like)]TJ T* 0.025 Tw [(P)54(erl subr)5.8(outines?)]TJ 0 -2.1818 TD 0.0611 Tw [(That)17.7()79.9(s)0( the D)19.7(WIM)11.9(ity kicking in: all the hair)-17.9(y)]TJ 0 -1.0909 TD 0.1954 Tw [(details ar)9.7(e handled for y)5.8(ou b)5.8(y)0( the module.)]TJ T* 0.2096 Tw [(Y)93.9(ou just say what y)5.8(ou need to say and let)]TJ /F2 1 Tf 9 0 0 9 63 465.2832 Tm -0.0002 Tc 0 Tw (Inline)Tj /F1 1 Tf 11 0 0 11 98.4171 465.2832 Tm -0.0001 Tc 0.025 Tw [(do the r)9.7(est. H)17.8(e)0.1(r)9.7(e)29.7()79.9(s)0( ho)11.9(w it wor)5.8(ks.)]TJ -3.2197 -2.1818 TD -0.0101 Tc 0.1149 Tw [(The first time y)5.8(ou r)-7.9(un this pr)5.8(ogram, )]TJ /F2 1 Tf 9 0 0 9 225.3088 441.2832 Tm -0.0102 Tc 0 Tw (Inline)Tj /F1 1 Tf 11 0 0 11 63 429.2832 Tm -0.0101 Tc -0.0153 Tw [(does ev)5.8(er)-17.9(ything the har)13.9(d way)84.9(. I)23.9(t)0( analyz)5.8(es y)5.8(our C code, cr)9.7(eates)]TJ 0 -1.0909 TD 0.0415 Tw [(all those differ)9.7(ent files, compiles it, links it, and finally loads)]TJ T* 0.1221 Tw [(the ex)11.9(ecutable object. O)5.9(n)0( my Linux bo)5.8(x, this causes a 3-4)]TJ T* 0.0349 Tw [(second delay in ex)11.9(ecution time. )44.8(The second time y)5.8(ou r)-7.9(un it,)]TJ T* 0.0099 Tc 0.3853 Tw [(it)17.7()79.9(s)0( lightning fast. )44.8(That)17.7()79.9(s)-0.1( because )]TJ /F2 1 Tf 9 0 0 9 226.7824 381.2832 Tm 0 Tw (Inline)Tj /F1 1 Tf 11 0 0 11 266.8133 381.2832 Tm 0.3854 Tw (caches the)Tj -18.5285 -7.6364 TD -0.0101 Tc 0.0907 Tw [(ex)11.9(ecutable object on disk. )14.9(Y)93.9(ou can change y)5.8(o)0(ur pr)5.8(ogram as)]TJ 0 -1.0909 TD 0.0106 Tw [(much as y)5.8(ou like, and as long as y)5.9(ou don)69.8()79.9(t)0( touch the C code,)]TJ /F2 1 Tf 9 0 0 9 63 273.2832 Tm -0.0102 Tc 0 Tw (Inline)Tj /F1 1 Tf 11 0 0 11 97.3217 273.2832 Tm -0.0101 Tc -0.0155 Tw [(will use the cached v)5.9(ersion. As soon as y)5.9(ou )]TJ /F5 1 Tf 16.0695 0 TD -0.0103 Tc 0 Tw (do)Tj /F1 1 Tf 1.0841 0 TD -0.0101 Tc (change)Tj -20.2738 -1.0909 TD 0.025 Tw (the C code, )Tj /F2 1 Tf 9 0 0 9 114.2509 261.2832 Tm -0.0102 Tc 0 Tw (Inline)Tj /F1 1 Tf 11 0 0 11 149.0184 261.2832 Tm -0.0101 Tc 0.025 Tw [(will r)9.7(ecompile it on the next r)-7.8(u)-0.1(n.)]TJ /F8 1 Tf 12 0 0 12 63 235.2832 Tm 0.0195 Tc 0 Tw (I)Tj 10.44 0 0 10.44 70.6987 235.2831 Tm 0 Tc (D)Tj 12 0 0 12 82.7273 235.2831 Tm (L)Tj 10.44 0 0 10.44 89.685 235.2831 Tm 0.0227 Tc (IKE)Tj 12 0 0 12 111.2699 235.2831 Tm 0 Tc (T)Tj 10.44 0 0 10.44 119.3178 235.2831 Tm (O)Tj 12 0 0 12 131.4306 235.2831 Tm (B)Tj 10.44 0 0 10.44 139.0079 235.2831 Tm 0.0227 Tc (UY)Tj 12 0 0 12 157.0164 235.2831 Tm 0.0198 Tc -0.0102 Tw (A V)Tj 10.44 0 0 10.44 175.7426 235.2831 Tm 0.0227 Tc 0 Tw [(O)51.5(WEL)]TJ /F1 1 Tf 11 0 0 11 63 209.2832 Tm 0.0099 Tc 0.365 Tw [(Let)17.7()79.9(s)0( look at a slightly mor)9.6(e complex example. )44.8(The)]TJ T* -0.0002 Tc 0 Tw [(pr)5.7(ogram, )]TJ /F2 1 Tf 9 0 0 9 105.1827 197.2832 Tm (vowels.pl)Tj /F1 1 Tf 11 0 0 11 153.7709 197.2832 Tm -0.0001 Tc 0.0479 Tw [(, takes a filename fr)5.8(om the command)]TJ -8.2519 -1.0909 TD 0.1722 Tw [(line and prints the ratio of v)5.8(o)12(w)5.8(els to letters in that file.)]TJ /F2 1 Tf 9 0 0 9 63 173.2832 Tm -0.0002 Tc 0 Tw (vowels.pl)Tj /F1 1 Tf 11 0 0 11 114.6645 173.2832 Tm 0 Tc 0.0296 Tw (uses an )Tj /F2 1 Tf 9 0 0 9 148.1267 173.2832 Tm -0.0002 Tc 0 Tw (Inline)Tj /F1 1 Tf 11 0 0 11 183.5952 173.2832 Tm -0.0001 Tc 0.0297 Tw (C function called )Tj /F2 1 Tf 9 0 0 9 261.0132 173.2832 Tm -0.0002 Tc 0 Tw (vowel_scan)Tj /F1 1 Tf 11 0 0 11 63 161.2832 Tm -0.0001 Tc 0.0738 Tw [(that takes a string argument and r)9.7(eturns the per)5.8(centage of)]TJ T* 0.0198 Tw [(v)5.9(o)12(w)5.8(els as a floating point number betw)5.8(een z)5.8(e)0.1(r)5.8(o)0( and one. I)23.8(t)]TJ T* 0.0433 Tw [(handles upper and lo)11.9(w)5.8(er case letters, and \(tr)-7.9(ue to my IBM)]TJ T* -0.0229 Tw [(r)6(oots\) both ASCII and EBCDIC. \(I)23.8(t is also quite fast; check)]TJ 25.3636 27.8372 TD 0.025 Tw [(out the benchmar)5.8(ks at the end of the ar)-7.9(ticle.\))]TJ 0 -2.1818 TD [(H)17.8(e)0.1(r)9.7(e)29.7()79.9(s)0( ho)11.9(w to count the v)5.8(o)12(w)5.8(els in the U)35.8(nix wor)13.8(d)0( list:)]TJ /F2 1 Tf 7 0 0 7 360.4756 387.4927 Tm -0.0003 Tc 0 Tw (% )Tj /F11 1 Tf 1.2597 0 TD -0.0002 Tc 0.06 Tw [(perl vowels.pl /usr/dict/words)]TJ /F2 1 Tf -1.2597 -1.1429 TD -0.0001 Tc [(The letters in /usr/dict/words are 37.5% vowels.)]TJ /F1 1 Tf 11 0 0 11 342 356.4927 Tm 0.3445 Tw (Although this is just another example of calling a C)Tj 0 -1.0909 TD 0.2229 Tw [(function as if it w)5.8(e)0.1(r)9.7(e)0( a P)53.9(erl subr)5.8(outine, it intr)5.8(oduces a)]TJ T* 0.025 Tw [(couple of ne)-5.9(w concepts.)]TJ 0 -2.0909 TD 0.0083 Tc 0.3666 Tw [(F)34(irst, notice that the syntax for inv)5.8(oking )]TJ /F2 1 Tf 9 0 0 9 547.8095 309.4927 Tm 0 Tw (Inline)Tj /F1 1 Tf 11 0 0 11 587.5311 309.4927 Tm (is)Tj -22.321 -1.0909 TD -0.0001 Tc 0.091 Tw [(differ)9.7(ent. )44.8(The C sour)5.8(ce code is stor)9.7(ed after the )]TJ /F2 1 Tf 9 0 0 9 550.2695 297.4927 Tm 0.1098 Tc 0 Tw (__END__)Tj /F1 1 Tf 11 0 0 11 342 285.4927 Tm -0.0001 Tc 0.2016 Tw [(token, which means that it is accessible to the pr)5.8(ogram)]TJ T* 0.1047 Tw [(thr)5.8(ough the )]TJ /F2 1 Tf 9 0 0 9 397.3668 273.4927 Tm -0.0002 Tc 0 Tw (DATA)Tj /F1 1 Tf 11 0 0 11 422.8631 273.4927 Tm -0.0001 Tc 0.1047 Tw [(filehandle. U)35.8(nfor)-7.9(tunately)84.9(, y)5.8(ou can only)]TJ -7.3512 -1.0909 TD 0.1542 Tw [(r)9.9(ead fr)5.8(om the )]TJ /F2 1 Tf 9 0 0 9 407.4466 261.4927 Tm -0.0002 Tc 0 Tw (DATA)Tj /F1 1 Tf 11 0 0 11 433.4886 261.4927 Tm -0.0001 Tc 0.1543 Tw [(filehandle at r)-7.9(un time, and )]TJ /F2 1 Tf 9 0 0 9 558.0897 261.4927 Tm -0.0002 Tc 0 Tw (use)Tj /F1 1 Tf 11 0 0 11 578.7329 261.4927 Tm -0.0001 Tc 0.1543 Tw (is a)Tj -21.5212 -1.0909 TD 0.0063 Tw [(compile time dir)9.7(ectiv)5.8(e. F)35.8(o)0.2(r)-7.9(tunately)84.9(, in P)53.9(erl, )44.9(TMT)31.9(O)51.7(W)-12(TDI. )]TJ T* 0 Tw [(S)12.1(ince)]TJ /F2 1 Tf 7 0 0 7 360.4756 217.4926 Tm -0.0002 Tc 0.06 Tw (use Foo\(LIST\);)Tj /F1 1 Tf 11 0 0 11 342 193.4926 Tm -0.0001 Tc 0.025 Tw (is just another way of saying )Tj /F2 1 Tf 7 0 0 7 360.4756 173.4926 Tm 0.0599 Tw (BEGIN { require Foo; Foo->import\(LIST\) })Tj /F1 1 Tf 11 0 0 11 342 149.4926 Tm 0.281 Tw [(w)5.8(e)0( can inv)5.8(oke )]TJ /F2 1 Tf 9 0 0 9 413.974 149.4926 Tm -0.0002 Tc 0 Tw (Inline)Tj /F1 1 Tf 11 0 0 11 452.2067 149.4926 Tm -0.0001 Tc 0.2809 Tw [(at r)-7.9(un time b)5.8(y)0( calling )]TJ /F2 1 Tf 9 0 0 9 561.6082 149.4926 Tm -0.0002 Tc 0 Tw (import)Tj /F1 1 Tf 11 0 0 11 342 137.4926 Tm -0.0001 Tc 0.0265 Tw [(manually)84.9(, and with the code accessible via )]TJ /F2 1 Tf 9 0 0 9 524.4415 137.4926 Tm -0.0002 Tc 0 Tw (DATA)Tj /F1 1 Tf 11 0 0 11 546.0363 137.4926 Tm -0.0001 Tc -0.0183 Tw [(. This )-44.8(giv)5.8(es)]TJ -18.5487 -1.0909 TD 0.025 Tw [(us a v)5.8(e)0.1(r)-17.9(y)0( clean way to organiz)5.8(e our )]TJ /F2 1 Tf 9 0 0 9 494.4592 125.4926 Tm -0.0002 Tc 0 Tw (Inline)Tj /F1 1 Tf 11 0 0 11 529.8763 125.4926 Tm -0.0001 Tc 0.025 Tw [(sour)5.8(ce code.)]TJ 12 0 0 12 517.3723 90.3543 Tm 0 Tc 0 Tw (F)Tj 10.44 0 0 10.44 523.4518 90.3543 Tm -0.0001 Tc (ALL)Tj 12 0 0 12 544.7999 90.3543 Tm 0 Tc 0.025 Tw [(2000 31)]TJ /F3 1 Tf -40.15 0 TD -0.0002 Tc 0.0255 Tw [(The P)47.6(erl J)35.7(our)-8(nal #19)]TJ ET 0 0.03 0.3 0 k 269.25 810 319.5 -358.58 re 162.892 90.354 m f* BT /F8 1 Tf 14 0 0 14 276.2511 788.1747 Tm 0 0 0 1 k -0.0001 Tc [(Listing 1. U)29.7(sing C within P)53.9(erl in v)5.8(o)11.9(w)5.9(els.pl.)]TJ /F2 1 Tf 7 0 0 7 294.7267 768.1747 Tm -0.0002 Tc 0.06 Tw (use Inline;)Tj 0 -1.1429 TD -0.0001 Tc [(Inline->import\(C => \); # "eval" the C code at run time)]TJ 0 -2.2857 TD -0.0002 Tc ($filename = $ARGV[0];)Tj 0 -1.1429 TD -0.0001 Tc [(die "Usage: perl vowels.pl filename\\n" unless -f $filename;)]TJ 0 -2.2857 TD -0.0002 Tc [($text = join '', <>;)-6783.6(# slurp input file)]TJ 0 -1.1429 TD [($vp = vowel_scan\($text\);)-4479.1(#)0( call our function)]TJ T* -0.0001 Tc [($vp = sprintf\("%03.1f", $vp * 100\); # format for printing)]TJ T* [(print "The letters in $filename are $vp% vowels.\\n";)]TJ 0 -2.2857 TD 0.1098 Tc 0 Tw (__END__)Tj T* -0.0001 Tc 0.0599 Tw (/* Find percentage of vowels to letters */)Tj 0 -1.1429 TD [(double vowel_scan\(char* str\) {)]TJ 1.3197 -1.1429 TD -0.0002 Tc (int letters = 0;)Tj T* (int vowels = 0;)Tj T* (int i = 0;)Tj T* (char c;)Tj T* -0.0001 Tc [(char normalize = 'a' ^ 'A'; /* Assembly programmer trick :-\) */)]TJ T* [(/* normalize forces lower case in ASCII; upper in EBCDIC */)]TJ T* -0.0002 Tc [(char A = normalize | 'a';)]TJ T* [(char E = normalize | 'e';)]TJ T* [(char I = normalize | 'i';)]TJ T* [(char O = normalize | 'o';)]TJ T* [(char U = normalize | 'u';)]TJ T* [(char Z = normalize | 'z';)]TJ 0 -2.2857 TD [(while\(c = str[i++]\) {)]TJ 1.3197 -1.1429 TD (c |= normalize; )Tj T* [(if \(c >= A && c <= Z\) {)]TJ 1.3197 -1.1429 TD 0 Tw (letters++;)Tj T* -0.0001 Tc 0.0599 Tw [(if \(c == A || c == E || c == I || c == O || c == U\))]TJ 1.3197 -1.1429 TD -0.0002 Tc 0 Tw (vowels++;)Tj -2.6394 -1.1429 TD 0 Tc (})Tj -1.3197 -1.1429 TD (})Tj 0 -2.2857 TD -0.0001 Tc 0.0599 Tw [(return letters ? \(\(double\) vowels / letters\) : 0.0;)]TJ -1.3197 -1.1429 TD 0 Tc 0 Tw (})Tj /F9 1 Tf 14 0 0 14 78.1468 349.0367 Tm -0.0102 Tc 0.0278 Tw [(But ho)34.7(w is this possib)9.6(le? Don)39.6(t y)24.7(o)0(u)]TJ -0.619 -1.1429 TD -0.0101 Tc [(need to compile and link the C code?)]TJ ET 0 0 0 1 K 0 J 0 j 2 w 10 M []0 d 63 368.62 m 315 368.62 l S 0.667 w 63 365.95 m 315 365.95 l 63 324.43 m 315 324.43 l S 2 w 63 321.77 m 315 321.77 l S Q 0 0 0 0 k 1 i 37 874 191 -12 re 308.378 333.037 m f* BT /F2 1 Tf 8 0 0 8 39 864 Tm /Cs9 cs 1 scn -0.0004 Tc -0.0019 Tw (TPJ#19/9.26 9/27/00 10:35 AM Page 31)Tj ET 1 G 0 J 0 j 0.5 w 10 M []0 d 36 873 m 36 849 l 0 837 m 24 837 l 621 873 m 621 849 l 657 837 m 633 837 l 36 36 m 36 60 l 0 72 m 24 72 l 621 36 m 621 60 l 657 72 m 633 72 l S /Cs9 CS 1 SCN 0.25 w 36 873 m 36 849 l 0 837 m 24 837 l 621 873 m 621 849 l 657 837 m 633 837 l 36 36 m 36 60 l 0 72 m 24 72 l 621 36 m 621 60 l 657 72 m 633 72 l S 1 G 0.5 w 304.5 861 m 352.5 861 l 304.5 48 m 352.5 48 l 12 478.5 m 12 430.5 l 645 478.5 m 645 430.5 l 328.5 873 m 328.5 849 l 328.5 60 m 328.5 36 l 0 454.5 m 24 454.5 l 633 454.5 m 657 454.5 l 328.5 861 m 334.5 861 l 334.5 857.688 331.812 855 328.5 855 c 325.188 855 322.5 857.688 322.5 861 c 322.5 864.312 325.188 867 328.5 867 c 331.812 867 334.5 864.312 334.5 861 c 328.5 48 m 334.5 48 l 334.5 44.688 331.812 42 328.5 42 c 325.188 42 322.5 44.688 322.5 48 c 322.5 51.312 325.188 54 328.5 54 c 331.812 54 334.5 51.312 334.5 48 c 12 454.5 m 18 454.5 l 18 451.188 15.312 448.5 12 448.5 c 8.688 448.5 6 451.188 6 454.5 c 6 457.812 8.688 460.5 12 460.5 c 15.312 460.5 18 457.812 18 454.5 c 645 454.5 m 651 454.5 l 651 451.188 648.312 448.5 645 448.5 c 641.688 448.5 639 451.188 639 454.5 c 639 457.812 641.688 460.5 645 460.5 c 648.312 460.5 651 457.812 651 454.5 c S /Cs9 CS 1 SCN 0.25 w 304.5 861 m 352.5 861 l 304.5 48 m 352.5 48 l 12 478.5 m 12 430.5 l 645 478.5 m 645 430.5 l 328.5 873 m 328.5 849 l 328.5 60 m 328.5 36 l 0 454.5 m 24 454.5 l 633 454.5 m 657 454.5 l 328.5 861 m 334.5 861 l 334.5 857.688 331.812 855 328.5 855 c 325.188 855 322.5 857.688 322.5 861 c 322.5 864.312 325.188 867 328.5 867 c 331.812 867 334.5 864.312 334.5 861 c 328.5 48 m 334.5 48 l 334.5 44.688 331.812 42 328.5 42 c 325.188 42 322.5 44.688 322.5 48 c 322.5 51.312 325.188 54 328.5 54 c 331.812 54 334.5 51.312 334.5 48 c 12 454.5 m 18 454.5 l 18 451.188 15.312 448.5 12 448.5 c 8.688 448.5 6 451.188 6 454.5 c 6 457.812 8.688 460.5 12 460.5 c 15.312 460.5 18 457.812 18 454.5 c 645 454.5 m 651 454.5 l 651 451.188 648.312 448.5 645 448.5 c 641.688 448.5 639 451.188 639 454.5 c 639 457.812 641.688 460.5 645 460.5 c 648.312 460.5 651 457.812 651 454.5 c S endstream endobj 97 0 obj << /Type /Page /Parent 494 0 R /Resources 98 0 R /Contents 99 0 R /Thumb 383 0 R /MediaBox [ 0 0 684 873 ] /CropBox [ 0 0 684 873 ] /Rotate 0 >> endobj 98 0 obj << /ProcSet [ /PDF /Text ] /Font << /F1 515 0 R /F2 518 0 R /F3 261 0 R /F8 268 0 R >> /ExtGState << /GS1 523 0 R /GS2 521 0 R >> /ColorSpace << /Cs9 520 0 R >> >> endobj 99 0 obj << /Length 15117 >> stream 1 g /GS1 gs 0 873 m 0 873 l f q 1 i 27 846 603 -783 re 0 873 m W n 0 873 684 -873 re W n BT /F1 1 Tf 11 0 0 11 63 802.0776 Tm 0 0 0 1 k /GS2 gs -0.0001 Tc 0.1332 Tw [(S)12.1(econd, ther)9.7(e ar)9.7(e two ne)-5.9(w data types in our C pr)5.8(ogram:)]TJ /F2 1 Tf 9 0 0 9 63 790.0776 Tm -0.0002 Tc 0 Tw (double)Tj /F1 1 Tf 11 0 0 11 98.8999 790.0776 Tm (and )Tj /F2 1 Tf 9 0 0 9 118.2201 790.0776 Tm (char*)Tj /F1 1 Tf 11 0 0 11 145.2136 790.0776 Tm -0.0001 Tc 0.0689 Tw [(. L)5.8(uckily)84.9(, those ar)9.7(e two of the fiv)5.8(e data)]TJ -7.474 -1.0909 TD 0 Tw (types )Tj /F2 1 Tf 9 0 0 9 87.7028 778.0776 Tm -0.0002 Tc (Inline)Tj /F1 1 Tf 11 0 0 11 123.1199 778.0776 Tm -0.0001 Tc [(suppor)-7.9(ts:)]TJ /F2 1 Tf 7 0 0 7 81.4756 758.0776 Tm -0.0002 Tc (int)Tj 0 -1.1429 TD (long)Tj T* (double)Tj T* (char*)Tj T* (SV*)Tj /F1 1 Tf 11 0 0 11 63 702.0776 Tm -0.0001 Tc 0.105 Tw [(Those fiv)5.8(e ar)9.7(e all y)5.8(ou need! )]TJ /F2 1 Tf 9 0 0 9 188.1075 702.0776 Tm -0.0002 Tc 0 Tw (int)Tj /F1 1 Tf 11 0 0 11 208.209 702.0776 Tm (and )Tj /F2 1 Tf 9 0 0 9 227.927 702.0776 Tm (long)Tj /F1 1 Tf 11 0 0 11 253.4272 702.0776 Tm -0.0001 Tc 0.105 Tw [(ar)9.7(e for integer)]TJ -17.3116 -1.0909 TD 0 Tw (scalars, )Tj /F2 1 Tf 9 0 0 9 97.9751 690.0776 Tm -0.0002 Tc (double)Tj /F1 1 Tf 11 0 0 11 135.8389 690.0776 Tm -0.0001 Tc 0.2474 Tw (is for floating point scalars, and )Tj /F2 1 Tf 9 0 0 9 288.0066 690.0776 Tm -0.0002 Tc 0 Tw (char*)Tj /F1 1 Tf 11 0 0 11 63 678.0776 Tm -0.0001 Tc 0.1508 Tw [(\(usually pr)5.8(onounced Char S)23.9(tar)19.7( in social settings\) is for)]TJ T* 0 Tw (strings. )Tj /F2 1 Tf 9 0 0 9 96.0765 666.0776 Tm -0.0002 Tc (SV*)Tj /F1 1 Tf 11 0 0 11 114.9647 666.0776 Tm -0.0001 Tc -0.0052 Tw [(is a generic P)53.9(erl type that co)15.8(v)5.9(ers )59.7(anything else)29.7()]TJ -4.7241 -1.0909 TD 0.0015 Tw [(like hash r)9.7(efer)9.7(ences, for instance. I)23.9(t)0( will be co)15.8(v)5.9(e)0.1(r)9.7(ed in detail)]TJ T* 0.0134 Tw [(in the follo)11.9(wing sections. )44.8(These types pr)5.8(o)15.9(vide a v)5.8(e)0.1(r)-17.9(y)0( simple)]TJ T* 0.0165 Tw [(inter)-7.9(face that can be expanded to handle the most complex)]TJ T* 0.025 Tw [(situations. \()-32.1(J)35.8(ust like P)53.9(erl itself)15.8(.\))]TJ 0 -2.1818 TD 0.029 Tw [(A)6(t)0( this point, y)5.8(our optimism for having )]TJ /F2 1 Tf 9 0 0 9 236.4366 594.0776 Tm -0.0002 Tc 0 Tw (Inline)Tj /F1 1 Tf 11 0 0 11 271.8977 594.0776 Tm -0.0001 Tc 0.0291 Tw [(solv)5.8(e y)5.8(our)]TJ -18.9907 -1.0909 TD 0.1807 Tw [(r)9.9(eal life needs is pr)5.8(obably inv)5.8(ersely pr)5.8(opor)-7.9(tional to y)5.8(our)]TJ T* 0.0502 Tw [(kno)11.9(wledge of C, XS, and P)53.9(erl internals. XS pr)5.8(o)15.9(vides a lot)]TJ T* 0.1599 Tw [(mor)9.7(e)0( type-mapping and functionality)39.7(, y)5.8(ou say)84.9(. I)5.8(f)0( y)5.8(o)0.1(u)49.7()69.9(r)9.9(e)]TJ T* 0.025 Tw [(skeptical, that)17.7()79.9(s)0( good. S)23.9(tick with me. )]TJ /F8 1 Tf 12 0 0 12 63 520.0776 Tm 0.0198 Tc 0 Tw [(T)88.8(AFW)-12.2(TDI )]TJ /F1 1 Tf 11 0 0 11 63 494.0776 Tm -0.0001 Tc 0.2964 Tw [(Ther)9.7(e ar)9.7(e four ways to do it, wher)9.7(e it)17.7( is calling C)]TJ T* 0.2812 Tw [(functions fr)5.8(om P)53.9(erl. C functions typically take a fix)11.9(ed)]TJ T* 0.149 Tw [(number of arguments as input, and pr)5.8(oduce one or z)5.8(e)0.1(r)5.8(o)]TJ T* 0.0369 Tw [(r)9.9(eturn v)5.8(alues. )14.8(When a C function needs to r)9.7(eturn multiple)]TJ T* 0.321 Tw [(v)5.9(alues, it has the caller pass in the r)9.7(eturn v)5.8(alues b)5.8(y)]TJ T* 0.1139 Tw [(r)9.9(efer)9.7(ence)29.7(. P)53.9(erl, on the other hand, almost always r)9.7(eturns)]TJ T* -0.0084 Tw [(multiple v)5.8(alues as a list. )44.9(This pr)5.8(o)15.9(vides us with four differ)9.7(ent)]TJ T* 0.025 Tw (situations for )Tj /F2 1 Tf 9 0 0 9 121.9311 410.0776 Tm -0.0002 Tc 0 Tw (Inline)Tj /F1 1 Tf 11 0 0 11 154.3232 410.0776 Tm 0 Tc (:)Tj -8.3021 -2.1818 TD (1. )Tj /F2 1 Tf 9 0 0 9 74.275 386.0776 Tm -0.0002 Tc 0.06 Tw [(int foo\(int i, double n, char* str\) {)]TJ /F1 1 Tf 11 0 0 11 63 362.0776 Tm -0.0001 Tc 0.1741 Tw [(This is the simplest case. )44.9(The function, )]TJ /F2 1 Tf 9 0 0 9 244.6833 362.0776 Tm -0.0002 Tc 0 Tw (foo\(\))Tj /F1 1 Tf 11 0 0 11 271.6767 362.0776 Tm -0.0001 Tc 0.1741 Tw (, takes an)Tj -18.9706 -1.0909 TD 0.0034 Tw [(exact number of input arguments and r)9.7(eturns one v)5.8(alue, an)]TJ T* 0.0199 Tc 0.4652 Tw [(integer)59.8(. All of the P)53.9(erl to C conv)5.8(ersions happen)]TJ T* -0.0001 Tc 0.2242 Tw [(automatically)84.9(. )44.8(The examples sho)11.9(wn earlier in the ar)-7.9(ticle)]TJ T* 0.025 Tw [(w)5.8(e)0.1(r)9.7(e)0( like this.)]TJ 0 -2.1818 TD 0 Tc 0 Tw (2. )Tj /F2 1 Tf 9 0 0 9 74.275 290.0776 Tm -0.0002 Tc 0.06 Tw [(void foo\(int i, double n, char* str\) {)]TJ /F1 1 Tf 11 0 0 11 63 266.0776 Tm -0.0001 Tc -0.0083 Tw [(I)12(n)0( C, )]TJ /F2 1 Tf 9 0 0 9 88.0783 266.0776 Tm -0.0002 Tc 0 Tw (void)Tj /F1 1 Tf 11 0 0 11 112.3307 266.0776 Tm -0.0001 Tc -0.0084 Tw [(normally means that the function doesn)69.8()79.9(t)0.1( r)9.7(eturn)]TJ -4.4846 -1.0909 TD 0.0199 Tc 0 Tw (anything. )Tj /F2 1 Tf 9 0 0 9 112.6155 254.0776 Tm (Inline)Tj /F1 1 Tf 11 0 0 11 153.397 254.0776 Tm 0.3945 Tw [(giv)5.8(es special meaning to a )]TJ /F2 1 Tf 9 0 0 9 292.8656 254.0776 Tm 0 Tw (void)Tj /F1 1 Tf 11 0 0 11 63 242.0776 Tm -0.0001 Tc -0.0267 Tw [(declaration: it)17.8()79.9(s)0( used to indicate that the function can r)9.7(eturn)]TJ T* 0.0893 Tw [(any number of v)5.8(alues \(including z)5.8(e)0.1(r)5.8(o\), so this is ho)11.9(w y)5.8(o)0.1(u)]TJ T* 0.0246 Tw [(r)9.9(eturn a list. I)23.9(t)0( is also less automatic, because y)5.8(o)0.1(u)49.7()12(ll need to)]TJ T* 0.025 Tw [(manage the P)53.9(erl internal stack y)5.8(ourself)15.8(. R)11.9(ead on.)]TJ 0 -2.1818 TD 0 Tc 0 Tw (3. )Tj /F2 1 Tf 9 0 0 9 74.275 182.0776 Tm -0.0002 Tc 0.06 Tw (int foo\(SV*, ...\) {)Tj /F1 1 Tf 11 0 0 11 63 158.0776 Tm -0.0001 Tc 0.3094 Tw [(J)35.8(ust like in C, the ellipsis indicates that an unkno)11.9(wn)]TJ 0 -1.0909 TD -0.0169 Tw [(number of arguments will be passed in. Again y)5.8(ou will need)]TJ T* 0.0915 Tw [(to access P)53.9(erl)11.9()79.9(s)0( internal stack manually)84.9(. )]TJ /F2 1 Tf 9 0 0 9 235.2416 134.0776 Tm -0.0002 Tc 0 Tw (Inline)Tj /F1 1 Tf 11 0 0 11 271.3901 134.0776 Tm 0.0916 Tw [(pr)5.7(o)15.8(vides a)]TJ -18.9446 -1.0909 TD -0.0001 Tc 0.025 Tw [(bunch of C macr)5.8(os to make this easier)59.7(.)]TJ 25.3636 61.8182 TD 0 Tc 0 Tw (4. )Tj /F2 1 Tf 9 0 0 9 353.275 802.0776 Tm -0.0002 Tc 0.06 Tw [(void foo\(SV*, ...\) {)]TJ /F1 1 Tf 11 0 0 11 342 778.0776 Tm -0.0001 Tc 0.2485 Tw [(This is just a combination of calls 2 and 3 abo)15.8(v)5.9(e. I)23.8(t)17.8()79.9(s)]TJ 0 -1.0909 TD 0.1988 Tw [(another way of saying, I can handle ev)5.8(er)-17.9(ything myself)15.8(,)]TJ T* 0.025 Tw [(thank y)5.8(o)0.1(u)49.7()0.1(.)]TJ /F8 1 Tf 12 0 0 12 342 728.0776 Tm 0 Tc 0 Tw (C)Tj 10.44 0 0 10.44 350.5661 728.0776 Tm 0.0227 Tc [(HIP)-381.5(THE)]TJ 12 0 0 12 399.5421 728.0776 Tm 0 Tc (G)Tj 10.44 0 0 10.44 408.6971 728.0776 Tm 0.0229 Tc [(L)-11.9(ASSES)-345.3(AND)]TJ 12 0 0 12 475.2865 728.0776 Tm 0 Tc (C)Tj 10.44 0 0 10.44 483.8526 728.0776 Tm 0.0227 Tc [(RA)17.5(CK)-381.5(THE)]TJ 12 0 0 12 542.3513 728.0776 Tm 0 Tc (P)Tj 10.44 0 0 10.44 549.6459 728.0776 Tm 0.0228 Tc [(L)-12(A)81.6(TES)]TJ 12 0 0 12 580.9396 728.0776 Tm 0 Tc (,)Tj -19.9116 -1.1667 TD (T)Tj 10.44 0 0 10.44 350.4226 714.0775 Tm 0.0227 Tc [(HA)81.5(T)]TJ 12 0 0 12 372.8023 714.0775 Tm 0 Tc ()Tj 10.44 0 0 10.44 376.0159 714.0775 Tm 0.0227 Tc [(S)-309.5(WHA)81.5(T)]TJ 12 0 0 12 420.6992 714.0775 Tm 0 Tc (B)Tj 10.44 0 0 10.44 428.4626 714.0775 Tm 0.0228 Tc (ILBO)Tj 12 0 0 12 457.3783 714.0775 Tm 0 Tc (B)Tj 10.44 0 0 10.44 465.1417 714.0775 Tm 0.0228 Tc [(A)17.7(GGINS)]TJ 12 0 0 12 509.1522 714.0775 Tm 0 Tc (H)Tj 10.44 0 0 10.44 519.1333 714.0775 Tm 0.0228 Tc [(A)81.6(TES)]TJ /F1 1 Tf 11 0 0 11 342 688.0776 Tm -0.0001 Tc 0.3518 Tw [(I)12(nternally)84.9(, P)53.9(erl is center)9.7(ed ar)5.8(ound a stack, commonly)]TJ 0 -1.0909 TD 0.0719 Tw [(r)9.9(e)0.1(ferr)9.7(ed to as the S)23.8(tack. A stack is a just an array that y)5.7(o)0.1(u)]TJ T* 0.2975 Tw [(only access fr)5.8(om one end. Computer scientists like to)]TJ T* 0.1485 Tw [(compar)9.7(e it to a spring-loaded stack of dinner plates in a)]TJ T* 0.0917 Tw [(cafeteria: y)5.8(ou can push plates onto the stack or pop them)]TJ T* 0.1372 Tw [(off)15.8(, and that)17.7()79.9(s)0( all y)5.8(ou can do)15.8(. P)53.9(erl uses the S)23.8(tack to pass)]TJ T* 0.241 Tw [(scalar arguments to a subr)5.8(outine. )14.8(When the subr)5.8(outine)]TJ T* 0.0564 Tw [(takes contr)5.8(ol, it pops the plates fr)5.8(om the S)23.9(tack. B)5.8(efor)9.7(e the)]TJ T* 0.0224 Tw [(subr)5.8(outine r)9.7(eturns contr)5.8(ol, it pushes the r)9.7(eturn v)5.8(alues back)]TJ T* 0.025 Tw [(onto the S)23.9(tack.)]TJ 0 -2.2727 TD -0.0289 Tw [(Y)93.9(ou do this all the time in P)53.9(erl without kno)11.9(wing it, using )]TJ /F2 1 Tf 9 0 0 9 583.2029 555.0776 Tm -0.0003 Tc 0 Tw (@_)Tj /F1 1 Tf 11 0 0 11 342 543.0776 Tm -0.0002 Tc (and )Tj /F2 1 Tf 9 0 0 9 362.2172 543.0776 Tm (return)Tj /F1 1 Tf 11 0 0 11 394.6093 543.0776 Tm -0.0001 Tc 0.1356 Tw [(. W)9.7(ith )]TJ /F2 1 Tf 9 0 0 9 428.3217 543.0776 Tm -0.0002 Tc 0 Tw (Inline)Tj /F1 1 Tf 11 0 0 11 460.7138 543.0776 Tm -0.0001 Tc 0.1504 Tw [(, y)5.8(ou need to delv)5.8(e a bit into)]TJ -10.7922 -1.0909 TD 0.1112 Tw [(P)54(erl)11.9()79.9(s)0( internals. I)5.8(f)0( y)5.8(ou ev)5.8(er look into the P)53.9(erl sour)5.8(ce code)]TJ T* 0.1136 Tw [(itself)15.8(, y)5.8(o)0.1(u)49.7()12(ll undoubtedly find r)9.7(efer)9.7(ences to wizar)13.8(ds, elv)5.8(es,)]TJ T* 0.1528 Tw [(and hobbits. F)35.8(ear not, for )]TJ /F2 1 Tf 9 0 0 9 461.8748 507.0776 Tm -0.0002 Tc 0 Tw (Inline)Tj /F1 1 Tf 11 0 0 11 498.698 507.0776 Tm -0.0001 Tc 0.1528 Tw [(can help y)5.8(ou slay the)]TJ -14.2453 -1.0909 TD 0 Tw (dragons.)Tj /F2 1 Tf 9 0 0 9 342 470.0776 Tm -0.0002 Tc (Inline)Tj /F1 1 Tf 11 0 0 11 378.3063 470.0776 Tm -0.0001 Tc 0.1058 Tw [(pr)5.8(o)15.9(vides the follo)11.9(wing C macr)5.8(os for dealing with)]TJ -3.3006 -1.0909 TD 0.025 Tw [(the S)23.9(tack:)]TJ 0 -2.1818 TD 0 Tc 0 Tw ( )Tj /F2 1 Tf 9 0 0 9 349.2924 434.0776 Tm -0.0002 Tc (Inline_Stack_Vars)Tj /F1 1 Tf 11 0 0 11 360 410.0776 Tm -0.0001 Tc 0.1465 Tw [(Y)93.9(o)0.1(u)49.7()12(ll need to use this macr)5.8(o if y)5.8(ou want to use the)]TJ 0 -1.0909 TD 0.0932 Tw [(others. I)23.9(t)0( sets up a fe)-6(w local v)5.8(ariables: )]TJ /F2 1 Tf 9 0 0 9 529.6114 398.0776 Tm -0.0003 Tc 0 Tw (sp)Tj /F1 1 Tf 11 0 0 11 540.4088 398.0776 Tm 0 Tc (, )Tj /F2 1 Tf 9 0 0 9 546.9341 398.0776 Tm -0.0002 Tc (items)Tj /F1 1 Tf 11 0 0 11 573.9275 398.0776 Tm 0 Tc (, )Tj /F2 1 Tf 9 0 0 9 580.4526 398.0776 Tm -0.0003 Tc (ax)Tj /F1 1 Tf 11 0 0 11 591.2501 398.0776 Tm 0 Tc (,)Tj -21.0227 -1.0909 TD 0.0026 Tc (and )Tj /F2 1 Tf 9 0 0 9 382.7779 386.0776 Tm (mark)Tj /F1 1 Tf 11 0 0 11 404.4713 386.0776 Tm 0.3723 Tw [(, for use b)5.7(y)0( the other macr)5.7(os. I)23.8(t)17.8()79.8(s)-0.1( not)]TJ -4.0428 -1.0909 TD -0.0001 Tc -0.0211 Tw [(impor)-7.9(tant to kno)11.9(w what they do; I)69.7(m mentioning them)]TJ T* 0.025 Tw [(so y)5.8(ou can av)5.8(oid naming conflicts.)]TJ -1.6364 -2.1818 TD 0 Tc 0 Tw ( )Tj /F2 1 Tf 9 0 0 9 349.2924 338.0776 Tm -0.0002 Tc (Inline_Stack_Items)Tj /F1 1 Tf 11 0 0 11 360 314.0776 Tm -0.0001 Tc 0.0099 Tw [(This macr)5.8(o r)9.7(eturns the number of arguments passed in)]TJ 0 -1.0909 TD 0.025 Tw (on the stack.)Tj -1.6364 -2.1818 TD 0 Tc 0 Tw ( )Tj /F2 1 Tf 9 0 0 9 349.2924 278.0776 Tm -0.0002 Tc (Inline_Stack_Item\(i\))Tj /F1 1 Tf 11 0 0 11 360 254.0776 Tm -0.0001 Tc -0.0274 Tw [(This macr)5.8(o r)9.7(efers to a par)-7.9(ticular )]TJ /F2 1 Tf 9 0 0 9 497.0165 254.0776 Tm -0.0002 Tc 0 Tw (SV*)Tj /F1 1 Tf 11 0 0 11 515.6613 254.0776 Tm -0.0001 Tc -0.0273 Tw [(in the stack, wher)9.7(e)]TJ /F2 1 Tf 9 0 0 9 360 242.0776 Tm 0 Tc 0 Tw (i)Tj /F1 1 Tf 11 0 0 11 368.3078 242.0776 Tm -0.0001 Tc 0.0144 Tw [(is an index number star)-7.9(ting fr)5.8(om z)5.8(e)0.1(r)5.8(o)15.9(. I)23.9(t)0( can be used)]TJ -0.7552 -1.0909 TD 0.025 Tw [(to get or set the v)5.8(alue.)]TJ -1.6364 -2.1818 TD 0 Tc 0 Tw ( )Tj /F2 1 Tf 9 0 0 9 349.2924 206.0776 Tm -0.0002 Tc (Inline_Stack_Reset)Tj /F1 1 Tf 11 0 0 11 360 182.0776 Tm -0.0001 Tc 0.0421 Tw [(U)29.8(se this macr)5.8(o befor)9.7(e pushing anything back onto the)]TJ 0 -1.0909 TD 0.0046 Tc 0.3703 Tw [(S)24.1(tack. I)23.9(t)0.1( r)9.7(esets the internal S)23.9(t)0(ack pointer to the)]TJ T* -0.0001 Tc 0.025 Tw [(beginning of the S)23.9(tack.)]TJ -1.6364 -2.1818 TD 0 Tc 0 Tw ( )Tj /F2 1 Tf 9 0 0 9 349.2924 134.0776 Tm -0.0002 Tc (Inline_Stack_Push\(sv\))Tj /F1 1 Tf 12 0 0 12 63 90.3543 Tm 0 Tc [(32)-1100(F)]TJ 10.44 0 0 10.44 94.2795 90.3543 Tm -0.0001 Tc (ALL)Tj 12 0 0 12 115.6277 90.3543 Tm 0 Tc (2000)Tj /F3 1 Tf 30.9897 0.0003 TD -0.0002 Tc 0.0255 Tw [(The P)47.6(erl J)35.7(our)-8(nal #19)]TJ ET Q 0 0 0 0 k /GS2 gs 1 i 37 874 191 -12 re 587.395 90.357 m f* BT /F2 1 Tf 8 0 0 8 39 864 Tm /Cs9 cs 1 scn -0.0004 Tc -0.0019 Tw (TPJ#19/9.26 9/27/00 10:35 AM Page 32)Tj ET 1 G 0 J 0 j 0.5 w 10 M []0 d 36 873 m 36 849 l 0 837 m 24 837 l 621 873 m 621 849 l 657 837 m 633 837 l 36 36 m 36 60 l 0 72 m 24 72 l 621 36 m 621 60 l 657 72 m 633 72 l S /Cs9 CS 1 SCN 0.25 w 36 873 m 36 849 l 0 837 m 24 837 l 621 873 m 621 849 l 657 837 m 633 837 l 36 36 m 36 60 l 0 72 m 24 72 l 621 36 m 621 60 l 657 72 m 633 72 l S 1 G 0.5 w 304.5 861 m 352.5 861 l 304.5 48 m 352.5 48 l 12 478.5 m 12 430.5 l 645 478.5 m 645 430.5 l 328.5 873 m 328.5 849 l 328.5 60 m 328.5 36 l 0 454.5 m 24 454.5 l 633 454.5 m 657 454.5 l 328.5 861 m 334.5 861 l 334.5 857.688 331.812 855 328.5 855 c 325.188 855 322.5 857.688 322.5 861 c 322.5 864.312 325.188 867 328.5 867 c 331.812 867 334.5 864.312 334.5 861 c 328.5 48 m 334.5 48 l 334.5 44.688 331.812 42 328.5 42 c 325.188 42 322.5 44.688 322.5 48 c 322.5 51.312 325.188 54 328.5 54 c 331.812 54 334.5 51.312 334.5 48 c 12 454.5 m 18 454.5 l 18 451.188 15.312 448.5 12 448.5 c 8.688 448.5 6 451.188 6 454.5 c 6 457.812 8.688 460.5 12 460.5 c 15.312 460.5 18 457.812 18 454.5 c 645 454.5 m 651 454.5 l 651 451.188 648.312 448.5 645 448.5 c 641.688 448.5 639 451.188 639 454.5 c 639 457.812 641.688 460.5 645 460.5 c 648.312 460.5 651 457.812 651 454.5 c S /Cs9 CS 1 SCN 0.25 w 304.5 861 m 352.5 861 l 304.5 48 m 352.5 48 l 12 478.5 m 12 430.5 l 645 478.5 m 645 430.5 l 328.5 873 m 328.5 849 l 328.5 60 m 328.5 36 l 0 454.5 m 24 454.5 l 633 454.5 m 657 454.5 l 328.5 861 m 334.5 861 l 334.5 857.688 331.812 855 328.5 855 c 325.188 855 322.5 857.688 322.5 861 c 322.5 864.312 325.188 867 328.5 867 c 331.812 867 334.5 864.312 334.5 861 c 328.5 48 m 334.5 48 l 334.5 44.688 331.812 42 328.5 42 c 325.188 42 322.5 44.688 322.5 48 c 322.5 51.312 325.188 54 328.5 54 c 331.812 54 334.5 51.312 334.5 48 c 12 454.5 m 18 454.5 l 18 451.188 15.312 448.5 12 448.5 c 8.688 448.5 6 451.188 6 454.5 c 6 457.812 8.688 460.5 12 460.5 c 15.312 460.5 18 457.812 18 454.5 c 645 454.5 m 651 454.5 l 651 451.188 648.312 448.5 645 448.5 c 641.688 448.5 639 451.188 639 454.5 c 639 457.812 641.688 460.5 645 460.5 c 648.312 460.5 651 457.812 651 454.5 c S endstream endobj 100 0 obj << /Type /Page /Parent 494 0 R /Resources 101 0 R /Contents 102 0 R /Thumb 385 0 R /MediaBox [ 0 0 684 873 ] /CropBox [ 0 0 684 873 ] /Rotate 0 >> endobj 101 0 obj << /ProcSet [ /PDF /Text ] /Font << /F1 515 0 R /F2 518 0 R /F3 261 0 R /F5 262 0 R /F8 268 0 R /F11 271 0 R >> /ExtGState << /GS1 523 0 R /GS2 521 0 R >> /ColorSpace << /Cs9 520 0 R >> >> endobj 102 0 obj << /Length 14370 >> stream 1 g /GS1 gs 0 873 m 0 873 l f q 1 i 27 846 603 -783 re 0 873 m W n 0 873 684 -873 re W n BT /F1 1 Tf 11 0 0 11 81 802.0776 Tm 0 0 0 1 k /GS2 gs -0.0001 Tc 0.1628 Tw [(This macr)5.8(o pushes a r)9.7(eturn v)5.8(alue back onto)]TJ 0 -1.0909 TD 0.025 Tw [(the stack. )44.8(The v)5.8(alue must be of type )]TJ /F2 1 Tf 9 0 0 9 238.7605 790.0776 Tm -0.0002 Tc 0 Tw (SV*)Tj /F1 1 Tf 11 0 0 11 254.9565 790.0776 Tm 0 Tc (.)Tj -17.4506 -2.2727 TD ( )Tj /F2 1 Tf 9 0 0 9 70.2924 765.0776 Tm -0.0002 Tc (Inline_Stack_Done)Tj /F1 1 Tf 11 0 0 11 81 740.0776 Tm -0.0001 Tc -0.0339 Tw [(After y)5.8(ou hav)5.8(e pushed all of y)5.8(our r)9.7(eturn v)5.8(alues,)]TJ 0 -1.0909 TD 0.025 Tw [(y)5.8(ou must call this macr)5.8(o)15.9(.)]TJ -1.6364 -2.2727 TD 0 Tc 0 Tw ( )Tj /F2 1 Tf 9 0 0 9 70.2924 703.0776 Tm -0.0002 Tc (Inline_Stack_Return\(n\))Tj /F1 1 Tf 11 0 0 11 81 678.0776 Tm -0.0001 Tc 0.0249 Tw [(This macr)5.8(o r)9.7(eturns )]TJ /F2 1 Tf 9 0 0 9 165.684 678.0776 Tm 0 Tc 0 Tw (n)Tj /F1 1 Tf 11 0 0 11 174.1077 678.0776 Tm -0.0001 Tc 0.025 Tw [(items on the S)23.9(tack.)]TJ -10.1007 -2.2727 TD 0 Tc 0 Tw ( )Tj /F2 1 Tf 9 0 0 9 70.2924 653.0776 Tm -0.0002 Tc (Inline_Stack_Void)Tj /F1 1 Tf 11 0 0 11 81 628.0776 Tm -0.0001 Tc -0.0091 Tw [(This is a special macr)5.8(o that indicates y)5.8(ou r)9.7(eally)]TJ 0 -1.0909 TD 0.0499 Tw [(don)69.8()79.9(t)0( want to r)9.7(eturn anything. I)23.8(t)17.8()79.9(s)0( the same as)]TJ /F2 1 Tf 9 0 0 9 81 604.0776 Tm -0.0002 Tc 0 Tw (Inline_Stack_Return\(0\))Tj /F1 1 Tf 11 0 0 11 199.771 604.0776 Tm 0 Tc (.)Tj -12.4337 -2.2727 TD -0.0001 Tc -0.015 Tw (The C type )Tj /F2 1 Tf 9 0 0 9 113.8109 579.0776 Tm -0.0002 Tc 0 Tw (SV*)Tj /F1 1 Tf 11 0 0 11 132.5914 579.0776 Tm -0.0001 Tc -0.015 Tw [(deser)-17.9(v)5.9(es an explanation. )]TJ /F2 1 Tf 9 0 0 9 236.987 579.0776 Tm -0.0003 Tc 0 Tw (SV)Tj /F1 1 Tf 11 0 0 11 247.7844 579.0776 Tm -0.0001 Tc -0.015 Tw (, which)Tj -16.7986 -1.0909 TD 0.0388 Tw [(stands for )49.7(scalar v)5.8(alue)29.7(, is simply the name of the)]TJ T* -0.0116 Tw [(internal str)-7.9(uctur)9.7(e that P)53.9(erl uses to hold scalars. )44.9(The)]TJ T* 0.0279 Tw [(S)24.1(tack, ther)9.7(efor)9.7(e, is an array of pointers to )]TJ /F2 1 Tf 9 0 0 9 242.6084 543.0776 Tm -0.0003 Tc 0 Tw (SV)Tj /F1 1 Tf 11 0 0 11 253.4058 543.0776 Tm -0.0001 Tc 0.0279 Tw [(s. P)53.9(erl)]TJ -17.3096 -1.0909 TD 0.004 Tw [(pr)5.8(o)15.9(vides a sle)-5.9(w of helper macr)5.8(os for getting data in)]TJ T* 0.0455 Tw [(and out of SVs \(and A)79.8(Vs, HVs, R)69.8(Vs, GVs, and so)]TJ T* 0.02 Tc 0.9848 Tw [(on\). S)12(ee the )]TJ /F2 1 Tf 9 0 0 9 151.3497 507.0776 Tm 0.0198 Tc 0 Tw (perlapi)Tj /F1 1 Tf 11 0 0 11 204.2042 507.0776 Tm (and )Tj /F2 1 Tf 9 0 0 9 234.4804 507.0776 Tm (perlguts)Tj /F1 1 Tf 11 0 0 11 63 495.0776 Tm 0.0097 Tc 0.3652 Tw [(documentation bundled with P)54(erl for all the)]TJ T* -0.0001 Tc -0.0117 Tw [(details. Y)93.9(ou )]TJ /F5 1 Tf 4.6613 0 TD -0.0003 Tc 0 Tw [(ar)19.5(e)]TJ /F1 1 Tf 1.364 0 TD 0.0002 Tc 0.0028 Tw [(using P)54.2(erl 5.6, ar)10(en)70.1()80.2(t)0.2( y)6.1(ou? \()]TJ /F2 1 Tf 9 0 0 9 246.5377 483.0776 Tm -0.0002 Tc 0 Tw (Inline)Tj /F1 1 Tf 11 0 0 11 63 471.0776 Tm -0.0001 Tc 0.005 Tw [(wor)5.8(ks with P)53.9(erl 5.005 and abo)15.8(v)5.9(e, but the )]TJ /F2 1 Tf 9 0 0 9 241.1387 471.0776 Tm -0.0002 Tc 0 Tw (perlapi)Tj /F1 1 Tf 11 0 0 11 63 459.0776 Tm -0.0001 Tc 0.025 Tw [(documentation is only av)5.8(ailable with 5.6 or later v)5.8(ersions.\))]TJ 0 -2.2727 TD 0.0199 Tc 0.5227 Tw [(Another example should help clear the fog. )45(The)]TJ /F2 1 Tf 9 0 0 9 63 422.0776 Tm -0.0002 Tc 0 Tw (get_scalars\(\))Tj /F1 1 Tf 11 0 0 11 135.6204 422.0776 Tm -0.0001 Tc -0.0284 Tw [(function takes a list of names of P)53.9(erl global)]TJ -6.6019 -1.0909 TD 0.0369 Tw [(scalars and r)9.7(eturns the v)5.8(alues of the ones that actually exist)]TJ T* 0.025 Tw (and contain a string.)Tj 0 -2.2727 TD [(H)17.8(e)0.1(r)9.7(e)29.7()79.9(s)0( what w)5.8(e)0( get for output:)]TJ /F2 1 Tf 7 0 0 7 81.4756 350.0776 Tm -0.0003 Tc 0 Tw (% )Tj /F11 1 Tf 1.2597 0 TD -0.0002 Tc 0.06 Tw (perl scalars.pl)Tj /F2 1 Tf -1.2597 -1.4286 TD 0 Tw (scissors/paper)Tj T* (scissors/Inline/42)Tj /F1 1 Tf 11 0 0 11 63 305.0776 Tm -0.0001 Tc 0.2039 Tw [(The first time w)5.8(e)0( call )]TJ /F2 1 Tf 9 0 0 9 166.8709 305.0776 Tm -0.0002 Tc 0 Tw (get_scalars\(\))Tj /F1 1 Tf 11 0 0 11 242.0471 305.0776 Tm -0.0001 Tc 0.2039 Tw [(it fails to r)9.7(eturn)]TJ /F2 1 Tf 9 0 0 9 63 293.0776 Tm -0.0002 Tc 0 Tw ($scalar4)Tj /F1 1 Tf 11 0 0 11 109.1668 293.0776 Tm -0.0001 Tc 0.0207 Tw (because it is not defined, and )Tj /F2 1 Tf 9 0 0 9 236.5959 293.0776 Tm -0.0002 Tc 0 Tw ($scalar3)Tj /F1 1 Tf 11 0 0 11 282.7627 293.0776 Tm 0 Tc (because)Tj -19.9784 -1.0909 TD -0.0001 Tc 0.1358 Tw [(it)17.7()79.9(s)0( not a string. I)11.9(n)0( the second case, )]TJ /F2 1 Tf 9 0 0 9 225.2537 281.0776 Tm -0.0002 Tc 0 Tw ($scalar4)Tj /F1 1 Tf 11 0 0 11 272.6864 281.0776 Tm -0.0001 Tc 0.1358 Tw (is defined)Tj -19.0624 -1.0909 TD 0.2912 Tw [(\(and thus r)9.7(eturned\), )]TJ /F2 1 Tf 9 0 0 9 160.9654 269.0776 Tm -0.0002 Tc 0 Tw ($scalar1)Tj /F1 1 Tf 11 0 0 11 210.1085 269.0776 Tm -0.0001 Tc 0.2912 Tw (is undefined \(and thus)Tj -13.3735 -1.0909 TD 0.1967 Tw [(ignor)9.7(ed\), and )]TJ /F2 1 Tf 9 0 0 9 127.2502 257.0776 Tm -0.0002 Tc 0 Tw ($scalar3)Tj /F1 1 Tf 11 0 0 11 175.3535 257.0776 Tm -0.0001 Tc 0.1967 Tw [(is r)9.7(eturned because it is no)11.9(w a)]TJ -10.214 -1.0909 TD 0 Tw (string.)Tj 0 -2.2727 TD 0.0552 Tw [(The mor)9.7(e impor)-7.9(tant thing is that w)5.8(e)0( can handle list input)]TJ 0 -1.0909 TD 0.0334 Tw [(and list output with r)9.7(e)0.1(lativ)5.8(e ease. )14.8(Y)93.9(o)0.1(u)49.7()12(ll notice that I snuck)]TJ T* 0.056 Tw [(in a fe)-5.9(w P)53.9(erl internal macr)5.8(o calls. )]TJ /F2 1 Tf 9 0 0 9 210.5486 196.0776 Tm -0.0002 Tc 0 Tw (SvPVX)Tj /F1 1 Tf 11 0 0 11 240.9084 196.0776 Tm -0.0001 Tc 0.0561 Tw [(r)9.9(eturns the string)]TJ -16.1735 -1.0909 TD 0 Tc 0 Tw (\()Tj /F2 1 Tf 9 0 0 9 66.5181 184.0776 Tm -0.0002 Tc (char*)Tj /F1 1 Tf 11 0 0 11 93.5115 184.0776 Tm -0.0001 Tc -0.0344 Tw [(\) fr)5.8(om an )]TJ /F2 1 Tf 9 0 0 9 135.1319 184.0776 Tm -0.0003 Tc 0 Tw (SV)Tj /F1 1 Tf 11 0 0 11 148.3006 184.0776 Tm -0.0001 Tc [(v)5.9(ariable. )]TJ /F2 1 Tf 9 0 0 9 186.0379 184.0776 Tm -0.0002 Tc (SvPOK)Tj /F1 1 Tf 11 0 0 11 215.4026 184.0776 Tm -0.0001 Tc -0.0344 Tw (indicates whether an )Tj /F2 1 Tf 9 0 0 9 304.2027 184.0776 Tm -0.0003 Tc 0 Tw (SV)Tj /F1 1 Tf 11 0 0 11 63 172.0775 Tm -0.0001 Tc 0.0213 Tw (has a string component or not, and )Tj /F2 1 Tf 9 0 0 9 216.72 172.0775 Tm -0.0002 Tc 0 Tw (perl_get_sv)Tj /F1 1 Tf 11 0 0 11 279.0898 172.0775 Tm 0 Tc (\()Tj /F2 1 Tf 9 0 0 9 282.6079 172.0775 Tm -0.0002 Tc (get_sv)Tj /F1 1 Tf 11 0 0 11 63 160.0775 Tm -0.0001 Tc 0.0261 Tw [(in P)53.9(erl 5.6\) r)9.7(eturns an )]TJ /F2 1 Tf 9 0 0 9 160.3164 160.0775 Tm -0.0003 Tc 0 Tw (SV)Tj /F1 1 Tf 11 0 0 11 174.1511 160.0775 Tm -0.0001 Tc 0.0261 Tw [(fr)5.8(om P)53.9(erl)11.9()79.9(s)0( internal symbol table.)]TJ -10.1046 -1.0909 TD 0.1927 Tw [(Y)93.9(ou can r)9.7(ead about these and many)84.9(, many mor)9.7(e in the)]TJ /F2 1 Tf 9 0 0 9 63 136.0775 Tm -0.0002 Tc 0 Tw (perlapi)Tj /F1 1 Tf 11 0 0 11 103.8158 136.0775 Tm -0.0001 Tc (documentation.)Tj /F8 1 Tf 12 0 0 12 342 460.8574 Tm 0 Tc (T)Tj 10.44 0 0 10.44 350.4226 460.8573 Tm 0.0225 Tc (HE)Tj 12 0 0 12 369.0352 460.8573 Tm 0 Tc (I)Tj 10.44 0 0 10.44 373.5202 460.8573 Tm 0.0227 Tc (NLINE)Tj 12 0 0 12 410.1974 460.8572 Tm 0 Tc (O)Tj 10.44 0 0 10.44 419.9413 460.8572 Tm 0.0228 Tc (UTLINE)Tj /F1 1 Tf 11 0 0 11 342 434.8574 Tm -0.0001 Tc 0.0931 Tw [(Let)17.7()79.9(s)0( take a br)9.7(eak fr)5.8(om )]TJ /F5 1 Tf 9.4163 0 TD 0 Tw (using)Tj /F2 1 Tf 9 0 0 9 470.457 434.8574 Tm -0.0002 Tc (Inline)Tj /F1 1 Tf 11 0 0 11 506.6235 434.8574 Tm -0.0001 Tc 0.0931 Tw (and examine exactly)Tj -14.9658 -1.0909 TD 0.0829 Tw [(ho)11.9(w it does its magic. )44.9(The module lets y)5.8(ou take C sour)5.8(ce)]TJ T* 0.1264 Tw [(code and effectiv)5.8(ely )]TJ /F2 1 Tf 9 0 0 9 432.1913 410.8574 Tm -0.0002 Tc 0 Tw (eval)Tj /F1 1 Tf 11 0 0 11 457.9263 410.8574 Tm -0.0001 Tc 0.1264 Tw [(it into P)53.9(erl at r)-7.9(un time. )14.8(What,)]TJ -10.5387 -1.0909 TD -0.0272 Tw [(exactly)84.9(, is going on under the hood to make all of this wor)5.7(k?)]TJ T* 0.0976 Tw [(H)17.8(e)0.1(r)9.7(e)0( is a basic outline of what happens when y)5.8(ou inv)5.8(oke)]TJ /F2 1 Tf 9 0 0 9 342 374.8574 Tm -0.0002 Tc 0 Tw (Inline)Tj /F1 1 Tf 11 0 0 11 374.3921 374.8574 Tm 0 Tc (:)Tj -2.9447 -2.2727 TD -0.0001 Tc 0.025 Tw [(1. R)11.9(eceiv)5.8(e the sour)5.8(ce code)]TJ /F2 1 Tf 9 0 0 9 360 324.8574 Tm -0.0002 Tc 0 Tw (Inline)Tj /F1 1 Tf 11 0 0 11 397.4119 324.8574 Tm -0.0001 Tc 0.2063 Tw [(gets the sour)5.8(ce code fr)5.8(om y)5.8(our pr)5.8(ogram or)]TJ -3.4011 -1.0909 TD 0.025 Tw [(module with a statement like the follo)11.9(wing:)]TJ /F2 1 Tf 7 0 0 7 360.4756 292.8574 Tm -0.0002 Tc 0.06 Tw [(use Inline C => 'source code';)]TJ /F1 1 Tf 11 0 0 11 360 267.8574 Tm -0.0001 Tc 0.2608 Tw [(wher)9.7(e C is the pr)5.8(ogramming language used, and)]TJ /F2 1 Tf 9 0 0 9 360 255.8574 Tm -0.0002 Tc 0.1854 Tw ('source code')Tj /F1 1 Tf 11 0 0 11 435.4508 255.8574 Tm -0.0001 Tc 0.0773 Tw [(is the actual sour)5.8(ce code itself in the)]TJ -6.8592 -1.0909 TD 0.3304 Tw (form of a string. )Tj /F2 1 Tf 9 0 0 9 446.1792 243.8574 Tm -0.0002 Tc 0.7928 Tw ('source code')Tj /F1 1 Tf 11 0 0 11 529.8808 243.8574 Tm -0.0001 Tc 0.3304 Tw (can also be a)Tj -15.4437 -1.0909 TD 0.0862 Tw [(filename, a r)9.7(efer)9.7(ence to a subr)5.8(outine, or anything else)]TJ T* 0.1438 Tw [(that r)9.7(eturns sour)5.8(ce code. )]TJ /F2 1 Tf 9 0 0 9 477.7171 219.8574 Tm -0.0002 Tc 0 Tw (Inline)Tj /F1 1 Tf 11 0 0 11 514.4418 219.8574 Tm -0.0001 Tc 0.1439 Tw [(then pr)9.7(epends the)]TJ -14.0402 -1.0909 TD 0.025 Tw [(follo)11.9(wing header includes to y)5.8(our sour)5.8(ce code:)]TJ /F2 1 Tf 7 0 0 7 360.4756 186.8574 Tm -0.0002 Tc 0.06 Tw (#include "EXTERN.h")Tj 0 -1.1429 TD (#include "perl.h")Tj T* (#include "XSUB.h")Tj T* (#include "INLINE.h")Tj /F1 1 Tf 11 0 0 11 360 136.8574 Tm -0.0001 Tc 0.1967 Tw [(This should be all the headers y)5.8(ou need for r)9.7(egular)]TJ 12 0 0 12 517.3723 90.3543 Tm 0 Tc 0 Tw (F)Tj 10.44 0 0 10.44 523.4518 90.3543 Tm -0.0001 Tc (ALL)Tj 12 0 0 12 544.7999 90.3543 Tm 0 Tc 0.025 Tw [(2000 33)]TJ /F3 1 Tf -40.15 0 TD -0.0002 Tc 0.0255 Tw [(The P)47.6(erl J)35.7(our)-8(nal #19)]TJ ET 0 0.03 0.3 0 k 290.93 810 302.34 -328.5 re 162.892 90.354 m f* BT /F8 1 Tf 14 0 0 14 296.9295 794.3291 Tm 0 0 0 1 k -0.0001 Tc [(Listing 2. R)11.9(etr)5.8(ieving scalar v)5.8(alues via C in scalars.pl.)]TJ /F2 1 Tf 7 0 0 7 315.4051 774.3291 Tm -0.0002 Tc 0.06 Tw (use Inline;)Tj 0 -1.1429 TD (Inline->import\(C => \);)Tj T* -0.0001 Tc [($, = '/'; # Set print list separator)]TJ 0 -2.2857 TD [(\($scalar1, $scalar2, $scalar3\) = \('paper', 'scissors', 42\);)]TJ 0 -1.1429 TD [(print get_scalars\(qw\(main::scalar2 main::scalar4 )]TJ 12.744 -1.1429 TD -0.0002 Tc [(main::scalar3 main::scalar1\)\);)]TJ -12.744 -1.1429 TD (print "\\n";)Tj 0 -2.2857 TD ($scalar4 = "Inline";)Tj 0 -1.1429 TD (undef $scalar1;)Tj T* -0.0001 Tc [("$scalar3"; # Force scalar to string)]TJ T* [(print get_scalars\(qw\(main::scalar2 main::scalar4 )]TJ 11.1494 -1.1429 TD -0.0002 Tc [(main::scalar3 main::scalar1\)\);)]TJ -11.1494 -1.1429 TD (print "\\n";)Tj 0 -2.2857 TD 0.0648 Tc 0 Tw (__END__)Tj T* -0.0001 Tc 0.0599 Tw [(void get_scalars\(SV* sv, ...\) {)]TJ 1.3197 -1.1429 TD -0.0002 Tc 0 Tw (Inline_Stack_Vars;)Tj T* 0.06 Tw (int i;)Tj T* (SV* name_sv; )Tj T* (SV* value_sv;)Tj T* (char* name;)Tj 0 -2.2857 TD 0 Tw (Inline_Stack_Reset;)Tj 0 -1.1429 TD -0.0001 Tc 0.0599 Tw [(for \(i = 0; i < Inline_Stack_Items; i++\) {)]TJ 1.3197 -1.1429 TD (name_sv = Inline_Stack_Item\(i\);)Tj T* -0.0002 Tc (name = SvPVX\(name_sv\);)Tj T* -0.0001 Tc (value_sv = perl_get_sv\(name, FALSE\);)Tj T* [(if \(value_sv && SvPOK\(value_sv\)\))]TJ 1.3197 -1.1429 TD -0.0002 Tc 0 Tw (Inline_Stack_Push\(value_sv\);)Tj -2.6394 -1.1429 TD 0 Tc (})Tj 0 -2.2857 TD -0.0002 Tc (Inline_Stack_Done;)Tj -1.3197 -1.1429 TD 0 Tc (})Tj ET Q 0 0 0 0 k /GS2 gs 1 i 37 874 191 -12 re 319.605 494.329 m f* BT /F2 1 Tf 8 0 0 8 39 864 Tm /Cs9 cs 1 scn -0.0004 Tc -0.0019 Tw (TPJ#19/9.26 9/27/00 10:35 AM Page 33)Tj ET 1 G 0 J 0 j 0.5 w 10 M []0 d 36 873 m 36 849 l 0 837 m 24 837 l 621 873 m 621 849 l 657 837 m 633 837 l 36 36 m 36 60 l 0 72 m 24 72 l 621 36 m 621 60 l 657 72 m 633 72 l S /Cs9 CS 1 SCN 0.25 w 36 873 m 36 849 l 0 837 m 24 837 l 621 873 m 621 849 l 657 837 m 633 837 l 36 36 m 36 60 l 0 72 m 24 72 l 621 36 m 621 60 l 657 72 m 633 72 l S 1 G 0.5 w 304.5 861 m 352.5 861 l 304.5 48 m 352.5 48 l 12 478.5 m 12 430.5 l 645 478.5 m 645 430.5 l 328.5 873 m 328.5 849 l 328.5 60 m 328.5 36 l 0 454.5 m 24 454.5 l 633 454.5 m 657 454.5 l 328.5 861 m 334.5 861 l 334.5 857.688 331.812 855 328.5 855 c 325.188 855 322.5 857.688 322.5 861 c 322.5 864.312 325.188 867 328.5 867 c 331.812 867 334.5 864.312 334.5 861 c 328.5 48 m 334.5 48 l 334.5 44.688 331.812 42 328.5 42 c 325.188 42 322.5 44.688 322.5 48 c 322.5 51.312 325.188 54 328.5 54 c 331.812 54 334.5 51.312 334.5 48 c 12 454.5 m 18 454.5 l 18 451.188 15.312 448.5 12 448.5 c 8.688 448.5 6 451.188 6 454.5 c 6 457.812 8.688 460.5 12 460.5 c 15.312 460.5 18 457.812 18 454.5 c 645 454.5 m 651 454.5 l 651 451.188 648.312 448.5 645 448.5 c 641.688 448.5 639 451.188 639 454.5 c 639 457.812 641.688 460.5 645 460.5 c 648.312 460.5 651 457.812 651 454.5 c S /Cs9 CS 1 SCN 0.25 w 304.5 861 m 352.5 861 l 304.5 48 m 352.5 48 l 12 478.5 m 12 430.5 l 645 478.5 m 645 430.5 l 328.5 873 m 328.5 849 l 328.5 60 m 328.5 36 l 0 454.5 m 24 454.5 l 633 454.5 m 657 454.5 l 328.5 861 m 334.5 861 l 334.5 857.688 331.812 855 328.5 855 c 325.188 855 322.5 857.688 322.5 861 c 322.5 864.312 325.188 867 328.5 867 c 331.812 867 334.5 864.312 334.5 861 c 328.5 48 m 334.5 48 l 334.5 44.688 331.812 42 328.5 42 c 325.188 42 322.5 44.688 322.5 48 c 322.5 51.312 325.188 54 328.5 54 c 331.812 54 334.5 51.312 334.5 48 c 12 454.5 m 18 454.5 l 18 451.188 15.312 448.5 12 448.5 c 8.688 448.5 6 451.188 6 454.5 c 6 457.812 8.688 460.5 12 460.5 c 15.312 460.5 18 457.812 18 454.5 c 645 454.5 m 651 454.5 l 651 451.188 648.312 448.5 645 448.5 c 641.688 448.5 639 451.188 639 454.5 c 639 457.812 641.688 460.5 645 460.5 c 648.312 460.5 651 457.812 651 454.5 c S endstream endobj 103 0 obj << /Type /Page /Parent 494 0 R /Resources 104 0 R /Contents 105 0 R /Thumb 387 0 R /MediaBox [ 0 0 684 873 ] /CropBox [ 0 0 684 873 ] /Rotate 0 >> endobj 104 0 obj << /ProcSet [ /PDF /Text ] /Font << /F1 515 0 R /F2 518 0 R /F3 261 0 R /F8 268 0 R /F11 271 0 R >> /ExtGState << /GS1 523 0 R /GS2 521 0 R >> /ColorSpace << /Cs9 520 0 R >> >> endobj 105 0 obj << /Length 13282 >> stream 1 g /GS1 gs 0 873 m 0 873 l f q 1 i 27 846 603 -783 re 0 873 m W n 0 873 684 -873 re W n BT /F1 1 Tf 11 0 0 11 81 802.0776 Tm 0 0 0 1 k /GS2 gs -0.0001 Tc 0.0011 Tw [(situations. \()-12.1(The )]TJ /F2 1 Tf 9 0 0 9 150.9024 802.0776 Tm -0.0002 Tc 0 Tw (perl.h)Tj /F1 1 Tf 11 0 0 11 186.0568 802.0776 Tm -0.0001 Tc 0.001 Tw [(file includes all the standar)13.8(d C)]TJ -9.5506 -1.0909 TD 0.025 Tw (header files like )Tj /F2 1 Tf 9 0 0 9 149.9735 790.0776 Tm -0.0002 Tc 0 Tw (stdio.h)Tj /F1 1 Tf 11 0 0 11 187.7643 790.0776 Tm -0.0001 Tc (.\))Tj -11.3422 -2.1818 TD 0.025 Tw [(2. Check if the sour)5.8(ce code has been compiled)]TJ /F2 1 Tf 9 0 0 9 81 742.0776 Tm -0.0002 Tc 0 Tw (Inline)Tj /F1 1 Tf 11 0 0 11 116.4819 742.0776 Tm -0.0001 Tc 0.0309 Tw [(only needs to compile the sour)5.8(ce code if it has)]TJ -3.2256 -1.0909 TD 0.0054 Tw [(not y)5.8(et been compiled. B)11.9(ut ho)11.9(w can it tell if the sour)5.8(ce)]TJ T* 0.0022 Tc 0.3727 Tw [(code has changed? I)23.8(t)0( accomplishes this seemingly)]TJ T* -0.0001 Tc 0.1658 Tw [(magical task b)5.8(y)0( r)-7.9(unning the sour)5.8(ce text thr)5.8(ough the)]TJ /F2 1 Tf 9 0 0 9 81 694.0776 Tm -0.0002 Tc 0 Tw (Digest::MD5)Tj /F1 1 Tf 11 0 0 11 145.3811 694.0776 Tm -0.0001 Tc 0.2041 Tw [(module to pr)5.8(oduce a vir)-7.9(tually unique)]TJ -5.8528 -1.0909 TD 0.1241 Tw [(128-bit hexadecimal )39.7(f)0.1(ingerprint)17.8( of the sour)5.8(ce code.)]TJ T* 0.1361 Tw [(The fingerprint is mangled together with the curr)9.7(ent)]TJ T* 0.3302 Tw [(package name and the name of the pr)5.8(ogramming)]TJ T* 0.1148 Tw [(language. I)5.8(f)0( the package is )]TJ /F2 1 Tf 9 0 0 9 205.4553 646.0776 Tm -0.0002 Tc 0 Tw (main)Tj /F1 1 Tf 11 0 0 11 227.05 646.0776 Tm -0.0001 Tc 0.1148 Tw [(, then the pr)5.8(ogram)]TJ -13.2773 -1.0909 TD 0.2829 Tw [(name is added, and other)-17.9(wise, the module v)5.8(ersion)]TJ T* 0.2151 Tw [(number is used. )44.9(This forms a unique name for the)]TJ T* 0.0199 Tc 0.4485 Tw [(ex)11.9(ecutable object. F)35.9(or instance, the )]TJ /F2 1 Tf 9 0 0 9 264.9724 610.0776 Tm 0 Tw (vowels.pl)Tj /F1 1 Tf 11 0 0 11 81 598.0776 Tm -0.0001 Tc 0.0025 Tw [(example pr)5.8(oduces a cached ex)11.9(ecutable object called \(on)]TJ T* 0.025 Tw [(a U)35.8(nix system\):)]TJ /F2 1 Tf 7 0 0 7 81.4756 566.0776 Tm 0 Tw (main_C_vowels_pl_bcc13cd1d188b32fc216cea883239ee3.so)Tj /F1 1 Tf 11 0 0 11 81 546.0776 Tm 0.0387 Tw [(I)5.9(f)0( an object with that name alr)9.7(eady exists, then skip to)]TJ T* 0.025 Tw [(step 8, because no compilation is necessar)-17.9(y)84.9(.)]TJ -1.6364 -2.1818 TD [(3. F)33.9(ind a place to build and install)]TJ 1.6364 -2.1818 TD 0.1562 Tw [(A)6(t)0( this point )]TJ /F2 1 Tf 9 0 0 9 142.8781 486.0776 Tm -0.0002 Tc 0 Tw (Inline)Tj /F1 1 Tf 11 0 0 11 179.7382 486.0776 Tm -0.0001 Tc 0.1562 Tw [(kno)11.9(ws it needs to compile the)]TJ -8.9762 -1.0909 TD 0.1225 Tw [(sour)5.8(ce code. )44.9(The first thing to figur)9.7(e out is wher)9.7(e to)]TJ T* 0.0021 Tc 0.3728 Tw [(cr)9.7(eate the gr)9.7(eat big mess of files associated with)]TJ T* -0.0001 Tc -0.0239 Tw [(compilation, and wher)9.7(e to put the object when)]TJ T* -0.0002 Tc 0.0251 Tw [(it)17.6()79.8(s)-0.1( done.)]TJ 0 -2.1818 TD -0.0001 Tc 0.0364 Tw [(B)17.7(y)0( default )]TJ /F2 1 Tf 9 0 0 9 127.8817 414.0776 Tm -0.0002 Tc 0 Tw (Inline)Tj /F1 1 Tf 11 0 0 11 163.424 414.0776 Tm -0.0001 Tc 0.0363 Tw [(will tr)-17.9(y to build and install)]TJ -7.4931 -1.0909 TD 0.0364 Tw [(under the first of the follo)11.9(wing places that is a)]TJ T* 0.025 Tw [(writable dir)9.7(ector)-17.9(y:)]TJ 0 -2.1818 TD 0 Tw (a. )Tj /F2 1 Tf 9 0 0 9 91.2169 366.0776 Tm -0.0002 Tc ($ENV{PERL_INLINE_BLIB})Tj /F1 1 Tf 11 0 0 11 209.9879 366.0776 Tm -0.0001 Tc -0.0198 Tw (. The)Tj /F2 1 Tf 9 0 0 9 81 354.0775 Tm -0.0002 Tc 0 Tw (PERL_INLINE_BLIB)Tj /F1 1 Tf 11 0 0 11 170.4039 354.0775 Tm -0.0001 Tc 0.025 Tw [(envir)5.8(onment v)5.8(ariable)]TJ -8.1276 -1.0909 TD [(o)15.9(v)5.9(errides all else.)]TJ 0 -2.1818 TD -0.0159 Tc 0 Tw [(b.)-15.9( )]TJ /F2 1 Tf 9 0 0 9 92.1005 318.0775 Tm -0.0002 Tc (./blib_I/)Tj /F1 1 Tf 11 0 0 11 140.6886 318.0775 Tm -0.0001 Tc 0.025 Tw [(. \(I)11.9(nside the curr)9.7(ent dir)9.7(ector)-17.9(y)84.9(,)]TJ -5.4262 -1.0909 TD [(unless y)5.8(o)0.1(u)49.7()69.9(r)9.9(e)0( in y)5.8(our home dir)9.7(ector)-17.9(y)84.9(.)0(\))]TJ 0 -2.1818 TD 0 Tc 0 Tw (c. )Tj /F2 1 Tf 9 0 0 9 91.1739 282.0775 Tm -0.0002 Tc ($bin/blib_I/)Tj /F1 1 Tf 11 0 0 11 155.9581 282.0775 Tm -0.0001 Tc 0.0251 Tw [(. \()-12(Wher)9.7(e )]TJ /F2 1 Tf 9 0 0 9 199.9104 282.0775 Tm -0.0002 Tc 0 Tw ($bin)Tj /F1 1 Tf 11 0 0 11 224.5301 282.0775 Tm -0.0001 Tc 0.025 Tw (is the)Tj -13.0482 -1.0909 TD [(dir)9.7(ector)-17.9(y the pr)5.8(ogram is in.\))]TJ 0 -2.1818 TD 0 Tw (d. )Tj /F2 1 Tf 9 0 0 9 92.3717 246.0775 Tm -0.0002 Tc ($ENV{HOME}/blib_I/)Tj /F1 1 Tf 11 0 0 11 189.548 246.0775 Tm -0.0001 Tc 0.025 Tw [(. \(U)35.8(nder y)5.8(our home)]TJ -9.868 -1.0909 TD -0.0002 Tc 0 Tw [(dir)9.6(ector)-18(y)84.8(.)-0.1(\))]TJ 0 -2.1818 TD 0 Tc (e. )Tj /F2 1 Tf 9 0 0 9 91.131 210.0775 Tm -0.0002 Tc ($ENV{HOME}/.blib_I/)Tj /F1 1 Tf 11 0 0 11 193.7059 210.0775 Tm -0.0001 Tc 0.025 Tw [(. \(S)11.9(ame as abo)15.8(v)5.9(e)-0.1(,)]TJ -10.246 -1.0909 TD [(but mor)9.7(e discr)9.7(eet.\))]TJ 0 -2.1818 TD 0 Tc 0 Tw (\()Tj /F2 1 Tf 9 0 0 9 84.5181 174.0775 Tm -0.0002 Tc (blib)Tj /F1 1 Tf 11 0 0 11 109.7082 174.0775 Tm -0.0001 Tc 0.0768 Tw [(stands for build librar)-17.9(y)39.7()0( in P)53.9(erl-speak.)]TJ -2.6098 -1.0909 TD 0.3298 Tw [(I)23.9(t)0( is a temporar)-17.9(y staging dir)9.7(ector)-17.9(y cr)9.7(eated)]TJ T* -0.0308 Tw [(when y)5.8(ou install a P)53.9(erl module on y)5.8(our system.)]TJ /F2 1 Tf 9 0 0 9 81 138.0775 Tm -0.0002 Tc 0 Tw (blib_I)Tj /F1 1 Tf 11 0 0 11 119.1421 138.0775 Tm -0.0001 Tc 0.2728 Tw (is the )Tj /F2 1 Tf 9 0 0 9 150.4157 138.0775 Tm -0.0002 Tc 0 Tw (Inline)Tj /F1 1 Tf 11 0 0 11 188.5577 138.0775 Tm -0.0001 Tc 0.2727 Tw [(v)5.9(ersion of the same)]TJ -9.778 -1.0909 TD 0 Tw (concept.\))Tj 25.3636 61.4545 TD 0.0345 Tw [(I)5.9(f)0( none of those dir)9.7(ectories exists, )]TJ /F2 1 Tf 9 0 0 9 506.6782 802.0776 Tm -0.0002 Tc 0 Tw (Inline)Tj /F1 1 Tf 11 0 0 11 542.2001 802.0776 Tm -0.0001 Tc 0.0345 Tw (will attempt)Tj -16.5636 -1.0909 TD -0.0126 Tw [(to cr)9.7(eate and use )]TJ /F2 1 Tf 9 0 0 9 432.9856 790.0776 Tm -0.0002 Tc 0 Tw ($bin/blib_I/)Tj /F1 1 Tf 11 0 0 11 500.3802 790.0776 Tm (or )Tj /F2 1 Tf 9 0 0 9 511.9846 790.0776 Tm (./blib_I/)Tj /F1 1 Tf 11 0 0 11 560.5727 790.0776 Tm -0.0001 Tc -0.0127 Tw (, in that)Tj -18.2339 -1.0909 TD 0.1097 Tw [(or)13.9(der)59.7(. O)5.8(p)0.1(tionally)84.9(, y)5.8(ou can configur)9.7(e )]TJ /F2 1 Tf 9 0 0 9 522.706 778.0776 Tm -0.0002 Tc 0 Tw (Inline)Tj /F1 1 Tf 11 0 0 11 559.0548 778.0776 Tm -0.0001 Tc 0.1097 Tw (to build)Tj -18.0959 -1.0909 TD 0.0199 Tc 0.7794 Tw [(and install exactly wher)9.8(e y)5.8(ou want, using)]TJ /F2 1 Tf 9 0 0 9 360 754.0776 Tm -0.0002 Tc 0 Tw (Inline::Config)Tj /F1 1 Tf 11 0 0 11 435.5815 754.0776 Tm -0.0001 Tc 0.1588 Tw [(. I)11.9(n)0( the unlikely ev)5.8(ent that )]TJ /F2 1 Tf 9 0 0 9 561.6079 754.0776 Tm -0.0002 Tc 0 Tw (Inline)Tj /F1 1 Tf 11 0 0 11 360 742.0776 Tm -0.0001 Tc 0.025 Tw [(cannot find a place to build, it will cr)5.8(oak.)]TJ -1.6364 -2.0909 TD [(4. P)41.9(arse the sour)5.8(ce for semantic cues)]TJ /F2 1 Tf 9 0 0 9 360 696.0776 Tm -0.0002 Tc 0 Tw (Inline)Tj /F1 1 Tf 11 0 0 11 395.1832 696.0776 Tm 0 Tc 0.0037 Tw (uses the )Tj /F2 1 Tf 9 0 0 9 431.2545 696.0776 Tm -0.0002 Tc 0 Tw (Parse::RecDescent)Tj /F1 1 Tf 11 0 0 11 525.8232 696.0776 Tm -0.0001 Tc 0.0037 Tw (module to parse)Tj -15.0748 -1.0909 TD 0.1782 Tw [(y)5.8(our chunks of sour)5.8(ce code and identify things that)]TJ T* 0.0317 Tw [(need r)-7.9(un-time bindings. F)35.8(or instance, in C it looks for)]TJ T* 0.1142 Tw [(all of the function definitions and br)9.7(eaks them do)11.9(wn)]TJ T* 0.0507 Tw [(into names and data types. )44.8(These elements ar)9.7(e used to)]TJ T* 0.025 Tw [(bind the C function to a P)53.9(erl subr)5.8(outine.)]TJ -1.6364 -2.0909 TD [(5. C)5.8(r)9.9(eate the build envir)5.8(onment)]TJ 1.6364 -2.0909 TD -0.0298 Tc 0 Tw [(No)-17.7(w)-29.7( )]TJ /F2 1 Tf 9 0 0 9 383.8539 590.0776 Tm -0.0002 Tc (Inline)Tj /F1 1 Tf 11 0 0 11 419.3432 590.0776 Tm -0.0001 Tc 0.0315 Tw [(takes all of the gather)9.7(ed information and)]TJ -5.3948 -1.0909 TD 0.0561 Tw [(cr)9.7(eates an envir)5.8(onment to build y)5.8(our sour)5.8(ce code into)]TJ T* 0.0097 Tc 0.3652 Tw [(an ex)11.9(ecutable object, cr)9.7(eating all the appr)5.8(opriate)]TJ T* -0.0001 Tc 0.025 Tw [(dir)9.7(ectories and sour)5.8(ce files.)]TJ -1.6364 -2.0909 TD [(6. Compile the code and install the ex)11.9(ecutable)]TJ 1.6364 -2.1818 TD 0.1083 Tw [(The planets ar)9.7(e in alignment, and all that)17.7()79.9(s)0( left is the)]TJ 0 -1.0909 TD 0.0643 Tw [(easy par)-7.9(t. )]TJ /F2 1 Tf 9 0 0 9 403.9606 495.0776 Tm -0.0002 Tc 0 Tw (Inline)Tj /F1 1 Tf 11 0 0 11 439.8095 495.0776 Tm -0.0001 Tc 0.0643 Tw (just does what users normally do to)Tj -7.2554 -1.0909 TD 0.025 Tw [(install a module on U)35.8(n)0(ix systems:)]TJ /F2 1 Tf 7 0 0 7 360.4756 463.0776 Tm -0.0003 Tc 0 Tw (% )Tj /F11 1 Tf 1.2597 0 TD -0.0002 Tc 0.06 Tw (perl Makefile.PL)Tj /F2 1 Tf -1.2597 -1.1429 TD -0.0003 Tc 0 Tw (% )Tj /F11 1 Tf 1.2597 0 TD -0.0002 Tc (make)Tj /F1 1 Tf 12 0 0 12 63 90.3543 Tm 0 Tc [(34)-1100(F)]TJ 10.44 0 0 10.44 94.2795 90.3543 Tm -0.0001 Tc (ALL)Tj 12 0 0 12 115.6277 90.3543 Tm 0 Tc (2000)Tj /F3 1 Tf 30.9897 0.0003 TD -0.0002 Tc 0.0255 Tw [(The P)47.6(erl J)35.7(our)-8(nal #19)]TJ ET 0 0.03 0.3 0 k 290.93 444.82 302.34 -327.51 re 587.395 90.357 m f* BT /F8 1 Tf 14 0 0 14 296.9295 425.5612 Tm 0 0 0 1 k -0.0001 Tc [(Listing 3. )-36.1(The S)11.9(imple.pm module.)]TJ /F2 1 Tf 7 0 0 7 315.4051 405.5612 Tm -0.0002 Tc 0.06 Tw [(package Math::Simple;)]TJ 0 -2.2857 TD (use strict;)Tj 0 -1.1429 TD -0.0001 Tc [(use vars qw\($VERSION @ISA @EXPORT_OK\);)]TJ T* -0.0002 Tc (require Exporter;)Tj T* (@ISA = qw\(Exporter\);)Tj T* -0.0001 Tc [(@EXPORT_OK = qw\(add subtract multiply divide\);)]TJ T* -0.0002 Tc (BEGIN {)Tj 2.6394 -1.1429 TD ($VERSION = '1.23';)Tj -2.6394 -1.1429 TD 0 Tc 0 Tw (})Tj 0 -2.2857 TD -0.0002 Tc 0.06 Tw (use Inline;)Tj 0 -1.1429 TD (Inline->import\(C => \);)Tj 0 -2.2857 TD -0.0003 Tc 0 Tw (1;)Tj T* 0.1498 Tc (__DATA__)Tj T* -0.0001 Tc 0.0599 Tw [(double add\(double x, double y\) {)]TJ 1.3197 -1.1429 TD -0.0002 Tc (return x + y;)Tj -1.3197 -1.1429 TD 0 Tc 0 Tw (})Tj 0 -2.2857 TD -0.0001 Tc 0.0599 Tw [(double subtract\(double x, double y\) {)]TJ 1.3197 -1.1429 TD -0.0002 Tc (return x - y;)Tj -1.3197 -1.1429 TD 0 Tc 0 Tw (})Tj 0 -2.2857 TD -0.0001 Tc 0.0599 Tw [(double multiply\(double x, double y\) {)]TJ 1.3197 -1.1429 TD -0.0002 Tc (return x * y;)Tj -1.3197 -1.1429 TD 0 Tc 0 Tw (})Tj 0 -2.2857 TD -0.0001 Tc 0.0599 Tw [(double divide\(double x, double y\) {)]TJ 1.3197 -1.1429 TD -0.0002 Tc (if \(! y\))Tj 1.3197 -1.1429 TD -0.0001 Tc [(croak\("Error! Attempt to divide by zero\\n"\);)]TJ -1.3197 -1.1429 TD -0.0002 Tc (return x / y;)Tj -1.3197 -1.1429 TD 0 Tc 0 Tw (})Tj ET Q 0 0 0 0 k /GS2 gs 1 i 37 874 191 -12 re 319.605 133.561 m f* BT /F2 1 Tf 8 0 0 8 39 864 Tm /Cs9 cs 1 scn -0.0004 Tc -0.0019 Tw (TPJ#19/9.26 9/27/00 10:35 AM Page 34)Tj ET 1 G 0 J 0 j 0.5 w 10 M []0 d 36 873 m 36 849 l 0 837 m 24 837 l 621 873 m 621 849 l 657 837 m 633 837 l 36 36 m 36 60 l 0 72 m 24 72 l 621 36 m 621 60 l 657 72 m 633 72 l S /Cs9 CS 1 SCN 0.25 w 36 873 m 36 849 l 0 837 m 24 837 l 621 873 m 621 849 l 657 837 m 633 837 l 36 36 m 36 60 l 0 72 m 24 72 l 621 36 m 621 60 l 657 72 m 633 72 l S 1 G 0.5 w 304.5 861 m 352.5 861 l 304.5 48 m 352.5 48 l 12 478.5 m 12 430.5 l 645 478.5 m 645 430.5 l 328.5 873 m 328.5 849 l 328.5 60 m 328.5 36 l 0 454.5 m 24 454.5 l 633 454.5 m 657 454.5 l 328.5 861 m 334.5 861 l 334.5 857.688 331.812 855 328.5 855 c 325.188 855 322.5 857.688 322.5 861 c 322.5 864.312 325.188 867 328.5 867 c 331.812 867 334.5 864.312 334.5 861 c 328.5 48 m 334.5 48 l 334.5 44.688 331.812 42 328.5 42 c 325.188 42 322.5 44.688 322.5 48 c 322.5 51.312 325.188 54 328.5 54 c 331.812 54 334.5 51.312 334.5 48 c 12 454.5 m 18 454.5 l 18 451.188 15.312 448.5 12 448.5 c 8.688 448.5 6 451.188 6 454.5 c 6 457.812 8.688 460.5 12 460.5 c 15.312 460.5 18 457.812 18 454.5 c 645 454.5 m 651 454.5 l 651 451.188 648.312 448.5 645 448.5 c 641.688 448.5 639 451.188 639 454.5 c 639 457.812 641.688 460.5 645 460.5 c 648.312 460.5 651 457.812 651 454.5 c S /Cs9 CS 1 SCN 0.25 w 304.5 861 m 352.5 861 l 304.5 48 m 352.5 48 l 12 478.5 m 12 430.5 l 645 478.5 m 645 430.5 l 328.5 873 m 328.5 849 l 328.5 60 m 328.5 36 l 0 454.5 m 24 454.5 l 633 454.5 m 657 454.5 l 328.5 861 m 334.5 861 l 334.5 857.688 331.812 855 328.5 855 c 325.188 855 322.5 857.688 322.5 861 c 322.5 864.312 325.188 867 328.5 867 c 331.812 867 334.5 864.312 334.5 861 c 328.5 48 m 334.5 48 l 334.5 44.688 331.812 42 328.5 42 c 325.188 42 322.5 44.688 322.5 48 c 322.5 51.312 325.188 54 328.5 54 c 331.812 54 334.5 51.312 334.5 48 c 12 454.5 m 18 454.5 l 18 451.188 15.312 448.5 12 448.5 c 8.688 448.5 6 451.188 6 454.5 c 6 457.812 8.688 460.5 12 460.5 c 15.312 460.5 18 457.812 18 454.5 c 645 454.5 m 651 454.5 l 651 451.188 648.312 448.5 645 448.5 c 641.688 448.5 639 451.188 639 454.5 c 639 457.812 641.688 460.5 645 460.5 c 648.312 460.5 651 457.812 651 454.5 c S endstream endobj 106 0 obj << /Type /Page /Parent 494 0 R /Resources 107 0 R /Contents 108 0 R /Thumb 389 0 R /MediaBox [ 0 0 684 873 ] /CropBox [ 0 0 684 873 ] /Rotate 0 >> endobj 107 0 obj << /ProcSet [ /PDF /Text ] /Font << /F1 515 0 R /F2 518 0 R /F3 261 0 R /F5 262 0 R /F8 268 0 R /F11 271 0 R >> /ExtGState << /GS1 523 0 R /GS2 521 0 R >> /ColorSpace << /Cs9 520 0 R >> >> endobj 108 0 obj << /Length 10627 >> stream 1 g /GS1 gs 0 873 m 0 873 l f q 1 i 27 846 603 -783 re 0 873 m W n 0 873 684 -873 re W n BT /F2 1 Tf 7 0 0 7 81.4756 805.2832 Tm 0 0 0 1 k /GS2 gs -0.0003 Tc 0 Tw (% )Tj /F11 1 Tf 1.2597 0 TD -0.0002 Tc 0.06 Tw [(make test )]TJ /F2 1 Tf 8.7579 0 TD [(# \(Inline skips this one\))]TJ -10.0176 -1.1429 TD -0.0003 Tc 0 Tw (% )Tj /F11 1 Tf 1.2597 0 TD -0.0002 Tc 0.06 Tw (make install)Tj /F1 1 Tf 11 0 0 11 63 774.2832 Tm -0.0001 Tc 0.2497 Tw [(I)5.9(f)0( something goes awr)-17.9(y)84.9(,)-0.1( )]TJ /F2 1 Tf 9 0 0 9 176.6134 774.2832 Tm -0.0002 Tc 0 Tw (Inline)Tj /F1 1 Tf 11 0 0 11 214.5018 774.2832 Tm -0.0001 Tc 0.2497 Tw [(cr)5.8(oaks with a message)]TJ -13.7729 -1.0909 TD 0.025 Tw [(indicating wher)9.7(e to look for mor)9.7(e)0( info)15.8(.)]TJ 0 -2.1818 TD -0.0198 Tw [(7. T)39.8(idy )-44.8(up)]TJ 1.6364 -2.1818 TD -0.0051 Tc 0.0987 Tw [(B)17.7(y)0( default, )]TJ /F2 1 Tf 9 0 0 9 131.3425 714.2832 Tm 0 Tw (Inline)Tj /F1 1 Tf 11 0 0 11 167.2452 714.2832 Tm 0.0987 Tw [(r)9.9(emo)15.8(v)5.9(es all of the mess cr)9.7(eated b)5.8(y)]TJ -7.8405 -1.0909 TD 0.0916 Tw [(the build pr)5.8(ocess, assuming that ev)5.7(er)-17.9(ything wor)5.8(ked. I)5.8(f)]TJ T* -0.0187 Tw (the compile fails, )Tj /F2 1 Tf 9 0 0 9 154.3281 690.2832 Tm 0 Tw (Inline)Tj /F1 1 Tf 11 0 0 11 188.9401 690.2832 Tm -0.0186 Tw [(leav)5.8(es ev)5.8(er)-17.9(ything intact so y)5.7(o)0.1(u)]TJ -9.8127 -1.0909 TD 0.025 Tw [(can debug y)5.8(our pr)5.8(ogram. R)11.9(unning something like this:)]TJ /F2 1 Tf 7 0 0 7 81.4756 658.2832 Tm -0.0003 Tc 0 Tw (% )Tj /F11 1 Tf 1.2597 0 TD -0.0002 Tc 0.06 Tw (perl -MInline=NOCLEAN example.pl)Tj /F1 1 Tf 11 0 0 11 81 634.2832 Tm -0.0001 Tc 0 Tw [(pr)9.7(ev)5.8(ents )]TJ /F2 1 Tf 9 0 0 9 119.1069 634.2832 Tm -0.0002 Tc (Inline)Tj /F1 1 Tf 11 0 0 11 154.3875 634.2832 Tm -0.0001 Tc 0.0126 Tw [(fr)5.8(om cleaning up)15.8(, in case y)5.8(ou want to)]TJ -6.6716 -1.0909 TD 0.025 Tw [(poke ar)5.8(ound in the )]TJ /F2 1 Tf 9 0 0 9 166.0449 622.2832 Tm -0.0002 Tc 0 Tw (blib_I)Tj /F1 1 Tf 11 0 0 11 201.462 622.2832 Tm [(dir)9.6(ector)-18(y)84.8(.)]TJ -12.5875 -2.1818 TD -0.0001 Tc 0.025 Tw [(8. DynaLoad the E)5.8(x)12(ecutable)]TJ /F2 1 Tf 9 0 0 9 81 574.2832 Tm -0.0002 Tc 0 Tw (Inline)Tj /F1 1 Tf 11 0 0 11 117.9924 574.2832 Tm -0.0001 Tc 0.1683 Tw [(uses P)53.9(erl)11.9()79.9(s)-0.1( )]TJ /F2 1 Tf 9 0 0 9 165.5774 574.2832 Tm -0.0002 Tc 0 Tw (DynaLoader)Tj /F1 1 Tf 11 0 0 11 224.1645 574.2832 Tm -0.0001 Tc 0.1682 Tw [(module to pull y)5.8(our)]TJ -13.015 -1.0909 TD 0.0426 Tw [(external object into P)53.9(erl-space. N)29.8(o)12(w y)5.8(ou can call all of)]TJ T* 0.025 Tw [(y)5.8(our C functions like P)53.9(erl subr)5.8(outines!)]TJ /F8 1 Tf 12 0 0 12 63 524.2832 Tm 0.0198 Tc 0 Tw [(CP)74.7(AN )]TJ 10.44 0 0 10.44 98.9266 524.2832 Tm -0.0012 Tc [(RU)-23.8(N)]TJ 12 0 0 12 122.1499 524.2832 Tm 0.0197 Tc 0.0255 Tw (. R)Tj 10.44 0 0 10.44 136.9122 524.2832 Tm 0.0226 Tc 0 Tw (UN)Tj 12 0 0 12 156.9037 524.2832 Tm 0.0198 Tc [(P)74.9(AN, )]TJ 10.44 0 0 10.44 187.5627 524.2832 Tm -0.0012 Tc [(RU)-23.8(N)]TJ 12 0 0 12 210.7861 524.2832 Tm 0 Tc (.)Tj /F1 1 Tf 11 0 0 11 63 498.2832 Tm -0.0001 Tc -0.0232 Tw [(S)12.1(o)0.1( far)59.7(, all the examples hav)5.8(e been P)53.9(erl )]TJ /F5 1 Tf 14.6258 0 TD -0.0002 Tc 0 Tw [(pr)5.7(ogr)29.6(ams)]TJ /F1 1 Tf 3.3162 0 TD 0 Tc -0.0233 Tw (, but )Tj /F2 1 Tf 9 0 0 9 282.6078 498.2832 Tm -0.0002 Tc 0 Tw (Inline)Tj /F1 1 Tf 11 0 0 11 63 486.2832 Tm -0.0001 Tc 0.0273 Tw [(can cr)9.7(eate P)53.9(erl modules as w)5.8(ell, just like the ones found on)]TJ 0 -1.0909 TD 0.0816 Tw [(CP)39.7(AN. M)23.9(odules that use C code as w)5.8(ell as P)53.9(erl ar)9.7(e called)]TJ T* 0.1116 Tw [()49.9(extension modules)39.7(. )44.8(This section describes ho)11.9(w to cr)9.7(eate)]TJ T* 0.025 Tw [(an extension module that can be uploaded to CP)39.7(AN.)]TJ 0 -2.1818 TD 0.1479 Tw [(Let)17.7()79.9(s)0( cr)9.7(eate a module called )]TJ /F2 1 Tf 9 0 0 9 189.1942 426.2832 Tm -0.0002 Tc 0 Tw (Math::Simple)Tj /F1 1 Tf 11 0 0 11 258.3548 426.2832 Tm -0.0001 Tc 0.1478 Tw [(that pr)5.8(o)15.9(vides)]TJ -17.7595 -1.0909 TD 0.2014 Tw (four functions: )Tj /F2 1 Tf 9 0 0 9 133.3585 414.2832 Tm -0.0002 Tc 0 Tw (add)Tj /F1 1 Tf 11 0 0 11 149.5545 414.2832 Tm 0 Tc (, )Tj /F2 1 Tf 9 0 0 9 157.27 414.2832 Tm -0.0002 Tc (subtract)Tj /F1 1 Tf 11 0 0 11 200.4595 414.2832 Tm 0 Tc (, )Tj /F2 1 Tf 9 0 0 9 208.175 414.2832 Tm -0.0002 Tc (multiply)Tj /F1 1 Tf 11 0 0 11 251.3644 414.2832 Tm -0.0001 Tc 0.2014 Tw (, and )Tj /F2 1 Tf 9 0 0 9 279.8579 414.2832 Tm -0.0002 Tc 0 Tw (divide)Tj /F1 1 Tf 11 0 0 11 312.25 414.2832 Tm 0 Tc (.)Tj -22.6591 -1.0909 TD -0.0001 Tc 0.076 Tw [(W)77.8(e)29.7()12(ll assume y)5.8(o)0.1(u)49.7()69.9(r)9.9(e)0( using some kind of U)35.9(nix. E)5.8(x)12(ecute the)]TJ T* 0.025 Tw [(follo)11.9(wing commands:)]TJ /F2 1 Tf 7 0 0 7 81.4756 370.2832 Tm -0.0003 Tc 0 Tw (% )Tj /F11 1 Tf 1.2597 0 TD -0.0002 Tc 0.06 Tw (h2xs -PAXn Math::Simple)Tj /F2 1 Tf -1.2597 -1.1429 TD (Writing Math/Simple/Simple.pm)Tj T* (Writing Math/Simple/Makefile.PL)Tj T* (Writing Math/Simple/test.pl)Tj T* (Writing Math/Simple/Changes)Tj T* (Writing Math/Simple/MANIFEST)Tj T* -0.0003 Tc 0 Tw (% )Tj /F11 1 Tf 1.2597 0 TD -0.0002 Tc 0.06 Tw (cd Math/Simple)Tj /F2 1 Tf -1.2597 -1.1429 TD -0.0003 Tc 0 Tw (% )Tj /F11 1 Tf 1.2597 0 TD (ls)Tj /F2 1 Tf -1.2597 -1.1429 TD -0.0001 Tc 0.0599 Tw [(Changes MANIFEST Makefile.PL Simple.pm test.pl)]TJ /F1 1 Tf 11 0 0 11 63 282.2832 Tm 0 Tw (The )Tj /F2 1 Tf 9 0 0 9 83.6295 282.2832 Tm -0.0002 Tc (h2xs)Tj /F1 1 Tf 11 0 0 11 108.575 282.2832 Tm -0.0001 Tc 0.0546 Tw [(pr)5.8(ogram is useful ev)5.8(en if y)5.8(o)0.1(u)49.7()69.9(r)9.9(e)0( not using XS; it)]TJ -4.1432 -1.0909 TD 0.284 Tw [(generates all of the files y)5.8(o)0.1(u)49.7()12(ll need to distribute y)5.8(our)]TJ T* -0.0446 Tw (module. The )Tj /F2 1 Tf 9 0 0 9 120.3394 258.2832 Tm -0.0003 Tc 0 Tw (-X)Tj /F1 1 Tf 11 0 0 11 133.8897 258.2832 Tm -0.0002 Tc (and )Tj /F2 1 Tf 9 0 0 9 152.455 258.2832 Tm -0.0003 Tc (-A)Tj /F1 1 Tf 11 0 0 11 166.0052 258.2832 Tm -0.0001 Tc 0.0002 Tw [(switches pr)9.7(ev)5.8(ent it fr)5.8(om generating)]TJ -9.3641 -1.0909 TD -0.0051 Tw [(a lot of XS specific stuff that y)5.8(ou won)69.8()79.9(t)0( need. )44.9(The )]TJ /F2 1 Tf 9 0 0 9 274.4334 246.2832 Tm -0.0003 Tc 0 Tw (-P)Tj /F1 1 Tf 11 0 0 11 287.9242 246.2832 Tm -0.0001 Tc (switch)Tj -20.4477 -1.0909 TD 0.3045 Tw [(pr)9.7(ev)5.8(ents the generation of sample pod documentation.)]TJ T* -0.0018 Tw [(D)12.1(ocumentation is v)5.8(e)0.1(r)-17.9(y)0( impor)-7.9(tant for a distributed module,)]TJ T* 0.2932 Tw (but it gets in the way of the )Tj /F2 1 Tf 9 0 0 9 208.1404 210.2832 Tm -0.0002 Tc 0 Tw (Inline)Tj /F1 1 Tf 11 0 0 11 246.5078 210.2832 Tm -0.0001 Tc 0.2932 Tw [(code. P)29.7(u)0(t y)5.8(our)]TJ -16.6825 -1.0909 TD 0.1813 Tw (documentation in a separate file called )Tj /F2 1 Tf 9 0 0 9 240.4566 198.2832 Tm -0.0002 Tc 0 Tw (Simple.pod)Tj /F1 1 Tf 11 0 0 11 299.1876 198.2832 Tm (and)Tj -21.4716 -1.0909 TD -0.0001 Tc 0.2915 Tw [(add an entr)-17.9(y for it in the )]TJ /F2 1 Tf 9 0 0 9 193.0974 186.2832 Tm -0.0002 Tc 0 Tw (MANIFEST)Tj /F1 1 Tf 11 0 0 11 242.244 186.2832 Tm -0.0001 Tc 0.2916 Tw (file, or use pod)Tj -16.2949 -1.0909 TD 0.0573 Tw [(normally but put the C sour)5.8(ce code inside a string instead)]TJ T* 0.025 Tw (of after the )Tj /F2 1 Tf 9 0 0 9 113.0135 162.2832 Tm -0.0002 Tc 0 Tw [(_)-249.9(_)-250.2(DATA_)-249.9(_)]TJ /F1 1 Tf 11 0 0 11 168.228 162.2832 Tm -0.0001 Tc (token.)Tj -9.5662 -2.1818 TD 0.0473 Tw [(N)29.7(o)12(w edit )]TJ /F2 1 Tf 9 0 0 9 106.451 138.2832 Tm -0.0002 Tc 0 Tw (Simple.pm)Tj /F1 1 Tf 11 0 0 11 158.3095 138.2832 Tm -0.0001 Tc 0.0473 Tw [(to look something like what)17.7()79.9(s)0( sho)11.9(wn)]TJ -8.6645 -1.0909 TD 0.025 Tw [(in Listing 3.)]TJ 12 0 0 12 517.3723 90.3543 Tm 0 Tc 0 Tw (F)Tj 10.44 0 0 10.44 523.4518 90.3543 Tm -0.0001 Tc (ALL)Tj 12 0 0 12 544.7999 90.3543 Tm 0 Tc 0.025 Tw [(2000 35)]TJ /F3 1 Tf -40.15 0 TD -0.0002 Tc 0.0255 Tw [(The P)47.6(erl J)35.7(our)-8(nal #19)]TJ ET 0 0 0 0.1 k /GS1 gs 342.5 809.5 251 -692 re 162.892 90.354 m f* 0 0 0 1 K 0 J 0 j 1 w 10 M []0 d 342.5 809.5 251 -692 re S BT /F8 1 Tf 24 0 0 24 415.729 515.6975 Tm 0 0 0 1 k /GS2 gs 0 Tw (CHELSEA)Tj -0.6384 -1.2 TD [(NET)-6(W)17.8(ORKS)]TJ -0.2914 -1.2 TD -0.0001 Tc 0.0254 Tw [(1/2 page )35.7(VER)51.7(T)]TJ 1.9501 -2.4 TD -0.0004 Tc 0 Tw [(NE)11.6(W)]TJ ET Q 0 0 0 0 k /GS2 gs 1 i 37 874 191 -12 re 495.791 400.498 m f* BT /F2 1 Tf 8 0 0 8 39 864 Tm /Cs9 cs 1 scn -0.0004 Tc -0.0019 Tw (TPJ#19/9.26 9/27/00 10:35 AM Page 35)Tj ET 1 G 0 J 0 j 0.5 w 10 M []0 d 36 873 m 36 849 l 0 837 m 24 837 l 621 873 m 621 849 l 657 837 m 633 837 l 36 36 m 36 60 l 0 72 m 24 72 l 621 36 m 621 60 l 657 72 m 633 72 l S /Cs9 CS 1 SCN 0.25 w 36 873 m 36 849 l 0 837 m 24 837 l 621 873 m 621 849 l 657 837 m 633 837 l 36 36 m 36 60 l 0 72 m 24 72 l 621 36 m 621 60 l 657 72 m 633 72 l S 1 G 0.5 w 304.5 861 m 352.5 861 l 304.5 48 m 352.5 48 l 12 478.5 m 12 430.5 l 645 478.5 m 645 430.5 l 328.5 873 m 328.5 849 l 328.5 60 m 328.5 36 l 0 454.5 m 24 454.5 l 633 454.5 m 657 454.5 l 328.5 861 m 334.5 861 l 334.5 857.688 331.812 855 328.5 855 c 325.188 855 322.5 857.688 322.5 861 c 322.5 864.312 325.188 867 328.5 867 c 331.812 867 334.5 864.312 334.5 861 c 328.5 48 m 334.5 48 l 334.5 44.688 331.812 42 328.5 42 c 325.188 42 322.5 44.688 322.5 48 c 322.5 51.312 325.188 54 328.5 54 c 331.812 54 334.5 51.312 334.5 48 c 12 454.5 m 18 454.5 l 18 451.188 15.312 448.5 12 448.5 c 8.688 448.5 6 451.188 6 454.5 c 6 457.812 8.688 460.5 12 460.5 c 15.312 460.5 18 457.812 18 454.5 c 645 454.5 m 651 454.5 l 651 451.188 648.312 448.5 645 448.5 c 641.688 448.5 639 451.188 639 454.5 c 639 457.812 641.688 460.5 645 460.5 c 648.312 460.5 651 457.812 651 454.5 c S /Cs9 CS 1 SCN 0.25 w 304.5 861 m 352.5 861 l 304.5 48 m 352.5 48 l 12 478.5 m 12 430.5 l 645 478.5 m 645 430.5 l 328.5 873 m 328.5 849 l 328.5 60 m 328.5 36 l 0 454.5 m 24 454.5 l 633 454.5 m 657 454.5 l 328.5 861 m 334.5 861 l 334.5 857.688 331.812 855 328.5 855 c 325.188 855 322.5 857.688 322.5 861 c 322.5 864.312 325.188 867 328.5 867 c 331.812 867 334.5 864.312 334.5 861 c 328.5 48 m 334.5 48 l 334.5 44.688 331.812 42 328.5 42 c 325.188 42 322.5 44.688 322.5 48 c 322.5 51.312 325.188 54 328.5 54 c 331.812 54 334.5 51.312 334.5 48 c 12 454.5 m 18 454.5 l 18 451.188 15.312 448.5 12 448.5 c 8.688 448.5 6 451.188 6 454.5 c 6 457.812 8.688 460.5 12 460.5 c 15.312 460.5 18 457.812 18 454.5 c 645 454.5 m 651 454.5 l 651 451.188 648.312 448.5 645 448.5 c 641.688 448.5 639 451.188 639 454.5 c 639 457.812 641.688 460.5 645 460.5 c 648.312 460.5 651 457.812 651 454.5 c S endstream endobj 109 0 obj << /Type /Page /Parent 494 0 R /Resources 110 0 R /Contents 111 0 R /Thumb 391 0 R /MediaBox [ 0 0 684 873 ] /CropBox [ 0 0 684 873 ] /Rotate 0 >> endobj 110 0 obj << /ProcSet [ /PDF /Text ] /Font << /F1 515 0 R /F2 518 0 R /F3 261 0 R /F5 262 0 R /F8 268 0 R /F9 269 0 R /F11 271 0 R >> /ExtGState << /GS1 523 0 R /GS2 521 0 R >> /ColorSpace << /Cs9 520 0 R >> >> endobj 111 0 obj << /Length 16132 >> stream 1 g /GS1 gs 0 873 m 0 873 l f q 1 i 27 846 603 -783 re 0 873 m W n 0 873 684 -873 re W n BT /F1 1 Tf 11 0 0 11 63 802.0776 Tm 0 0 0 1 k /GS2 gs -0.0001 Tc 0.015 Tw [(This should be pr)9.7(etty familiar stuff)15.8(. )44.8(The impor)-7.9(tant thing is)]TJ 0 -1.0909 TD 0.1223 Tw [(that y)5.8(ou define )]TJ /F2 1 Tf 9 0 0 9 133.9681 790.0776 Tm -0.0002 Tc 0 Tw ($VERSION)Tj /F1 1 Tf 11 0 0 11 181.253 790.0776 Tm -0.0001 Tc 0.1223 Tw [(befor)9.7(e inv)5.8(oking )]TJ /F2 1 Tf 9 0 0 9 253.1638 790.0776 Tm -0.0002 Tc 0 Tw (Inline)Tj /F1 1 Tf 11 0 0 11 285.5559 790.0776 Tm -0.0001 Tc 0.1223 Tw [(. S)11.9(ince)]TJ /F2 1 Tf 9 0 0 9 63 778.0776 Tm -0.0002 Tc 0 Tw (Inline)Tj /F1 1 Tf 11 0 0 11 99.1187 778.0776 Tm -0.0001 Tc 0.0888 Tw [(is often inv)5.8(oked at compile time, it is best to put)]TJ -3.2835 -1.0909 TD 0 Tw (the )Tj /F2 1 Tf 9 0 0 9 80.7774 766.0776 Tm -0.0002 Tc ($VERSION)Tj /F1 1 Tf 11 0 0 11 128.3488 766.0776 Tm -0.0001 Tc 0.1484 Tw (line inside a )Tj /F2 1 Tf 9 0 0 9 186.5366 766.0776 Tm -0.0002 Tc 0 Tw (BEGIN)Tj /F1 1 Tf 11 0 0 11 217.9119 766.0776 Tm -0.0001 Tc 0.1484 Tw (block. Also notice the)Tj /F2 1 Tf 9 0 0 9 63 754.0776 Tm -0.0002 Tc 0 Tw (croak)Tj /F1 1 Tf 11 0 0 11 93.4141 754.0776 Tm -0.0001 Tc 0.061 Tw (statement inside )Tj /F2 1 Tf 9 0 0 9 166.4488 754.0776 Tm -0.0002 Tc 0 Tw (divide)Tj /F1 1 Tf 11 0 0 11 198.8409 754.0776 Tm -0.0001 Tc 0.061 Tw [(. )44.9(This is the corr)9.7(ect way to)]TJ /F2 1 Tf 9 0 0 9 63 742.0776 Tm -0.0002 Tc 0 Tw (die)Tj /F1 1 Tf 11 0 0 11 82.2211 742.0776 Tm -0.0001 Tc 0.025 Tw [(fr)5.8(om inlined C code.)]TJ -1.7474 -2.1818 TD [(N)29.7(o)12(w add this line to the top of y)5.8(our )]TJ /F2 1 Tf 9 0 0 9 222.0265 718.0776 Tm -0.0002 Tc 0 Tw (test.pl)Tj /F1 1 Tf 11 0 0 11 262.8423 718.0776 Tm -0.0001 Tc (file:)Tj /F2 1 Tf 7 0 0 7 81.4756 698.0776 Tm -0.0002 Tc 0.06 Tw (use Inline SITE_INSTALL;)Tj /F1 1 Tf 11 0 0 11 63 674.0776 Tm -0.0001 Tc -0.0136 Tw [(Y)93.9(ou must do this to distribute the module pr)5.8(operly)84.9(, because)]TJ 0 -1.0909 TD 0.1036 Tw [(it ensur)9.7(es that the module will get installed in the pr)5.8(oper)]TJ T* 0.0569 Tw [(place b)5.8(y)0( the r)9.7(ecipient. I)23.9(t)0( also r)9.7(equir)9.7(es the person installing)]TJ /F2 1 Tf 9 0 0 9 63 638.0776 Tm -0.0002 Tc 0 Tw (Math::Simple)Tj /F1 1 Tf 11 0 0 11 131.7331 638.0776 Tm -0.0001 Tc 0.109 Tw [(to use the )]TJ /F2 1 Tf 9 0 0 9 179.2357 638.0776 Tm -0.0002 Tc 0.2615 Tw (make test)Tj /F1 1 Tf 11 0 0 11 234.1263 638.0776 Tm -0.0001 Tc 0.109 Tw [(command. \(P)53.9(eople)]TJ -15.5569 -1.0909 TD 0.0199 Tc 0.6168 Tw [(sometimes skip this par)-7.8(t of the install pr)5.8(ocess,)]TJ T* -0.0001 Tc 0 Tw [(unfor)-7.9(tunately)84.9(.\))]TJ 0 -2.1818 TD 0.0785 Tw [(I)5.9(f)0( y)5.8(ou add the follo)11.9(wing line to M)11.9(akefile.PL, it will v)5.8(erify)]TJ 0 -1.0909 TD -0.0117 Tw [(that the pr)5.8(oper v)5.8(ersion of )]TJ /F2 1 Tf 9 0 0 9 173.1657 578.0776 Tm -0.0002 Tc 0 Tw (Inline.pm)Tj /F1 1 Tf 11 0 0 11 224.3753 578.0776 Tm -0.0001 Tc -0.0117 Tw [(is alr)9.7(eady installed on)]TJ -14.6705 -1.0909 TD 0.025 Tw [(the user)19.7()79.9(s)-0.1( system.)]TJ /F2 1 Tf 7 0 0 7 81.4756 546.0776 Tm -0.0002 Tc 0.06 Tw (PREREQ_PM => {Inline => 0.25},)Tj /F1 1 Tf 11 0 0 11 63 522.0776 Tm -0.0001 Tc 0.025 Tw [(F)34(inally)84.9(,)0( r)-7.9(un these commands:)]TJ /F2 1 Tf 7 0 0 7 81.4756 502.0776 Tm -0.0003 Tc 0 Tw (% )Tj /F11 1 Tf 1.2597 0 TD -0.0002 Tc 0.06 Tw (perl Makefile.PL)Tj /F2 1 Tf -1.2597 -1.1429 TD -0.0003 Tc 0 Tw (% )Tj /F11 1 Tf 1.2597 0 TD -0.0002 Tc (make)Tj /F2 1 Tf -1.2597 -1.1429 TD -0.0003 Tc (% )Tj /F11 1 Tf 1.2597 0 TD -0.0002 Tc 0.06 Tw (make test)Tj /F2 1 Tf -1.2597 -1.1429 TD -0.0003 Tc 0 Tw (% )Tj /F11 1 Tf 1.2597 0 TD -0.0002 Tc 0.06 Tw (make install )Tj /F2 1 Tf 8.5779 0 TD (# Optional)Tj -9.8376 -1.1429 TD -0.0003 Tc 0 Tw (% )Tj /F11 1 Tf 1.2597 0 TD -0.0002 Tc 0.06 Tw (make dist)Tj /F1 1 Tf 11 0 0 11 63 446.0776 Tm -0.0001 Tc 0 Tw (The )Tj /F2 1 Tf 9 0 0 9 84.1549 446.0776 Tm -0.0002 Tc 0.2457 Tw (make install)Tj /F1 1 Tf 11 0 0 11 155.0258 446.0776 Tm -0.0001 Tc 0.1024 Tw (command will install the module on)Tj -8.366 -1.0909 TD 0.1176 Tw [(y)5.8(our local system. )14.8(When it)17.7()79.9(s)0( all wor)5.8(king, the )]TJ /F2 1 Tf 9 0 0 9 263.8712 434.0776 Tm -0.0002 Tc 0.2823 Tw (make dist)Tj /F1 1 Tf 11 0 0 11 63 422.0776 Tm 0.0199 Tc 0.828 Tw [(command will pr)5.8(oduce the file )]TJ /F2 1 Tf 9 0 0 9 248.2364 422.0776 Tm 0 Tw (Math-Simple-)Tj -20.5818 -1.3333 TD -0.0002 Tc (1.23.tar.gz)Tj /F1 1 Tf 11 0 0 11 122.3855 410.0776 Tm -0.0001 Tc 0.0542 Tw [(. )44.8(This is y)5.8(our complete distribution package,)]TJ -5.3987 -1.0909 TD 0.025 Tw [(r)9.9(eady to go to the CP)39.7(AN.)]TJ /F8 1 Tf 12 0 0 12 63 372.0776 Tm 0 Tc 0 Tw (W)Tj 10.44 0 0 10.44 74.8532 372.0776 Tm 0.0227 Tc [(HEN)-381.5(THE)]TJ 12 0 0 12 128.1928 372.0776 Tm 0 Tc (G)Tj 10.44 0 0 10.44 137.3478 372.0776 Tm 0.0228 Tc (OING)Tj 12 0 0 12 169.7706 372.0776 Tm 0 Tc (G)Tj 10.44 0 0 10.44 178.9256 372.0776 Tm 0.0227 Tc [(ET)11.6(S)]TJ 12 0 0 12 201.9327 372.0776 Tm 0 Tc (T)Tj 10.44 0 0 10.44 209.9806 372.0776 Tm 0.0228 Tc (OUGH)Tj 12 0 0 12 243.2059 372.0776 Tm 0.0198 Tc (...)Tj /F1 1 Tf 11 0 0 11 63 346.0776 Tm -0.0001 Tc 0.0251 Tw (...the tough use )Tj /F2 1 Tf 9 0 0 9 132.1803 346.0776 Tm -0.0002 Tc 0 Tw (Inline::Config)Tj /F1 1 Tf 11 0 0 11 207.7618 346.0776 Tm 0 Tc (! )Tj /F2 1 Tf 9 0 0 9 63 322.0776 Tm -0.0002 Tc (Inline)Tj /F1 1 Tf 11 0 0 11 98.6741 322.0776 Tm -0.0001 Tc 0.0484 Tw [(tries to do the right thing as often as possible. B)11.9(u)0(t)]TJ -3.2431 -1.0909 TD 0.1526 Tw [(sometimes y)5.8(ou may need to o)15.8(v)5.9(erride the default actions,)]TJ T* 0.0152 Tw [(and that)17.8()79.9(s)0( wher)9.7(e )]TJ /F2 1 Tf 9 0 0 9 134.6613 298.0776 Tm -0.0002 Tc 0 Tw (Inline::Config)Tj /F1 1 Tf 11 0 0 11 213.1603 298.0776 Tm -0.0001 Tc 0.0152 Tw [(comes in handy)84.9(. I)23.9(t)0( giv)5.8(es)]TJ -13.6509 -1.0909 TD 0.025 Tw [(y)5.8(ou fine-grained contr)5.8(ol o)15.8(v)5.9(er the entir)9.7(e pr)5.8(ocess. )]TJ 0 -2.1818 TD 0.0622 Tw [(An impor)-7.9(tant point to r)9.7(emember is that the configuration)]TJ 0 -1.0909 TD 0.2024 Tw (settings must be done )Tj /F5 1 Tf 9.4331 0 TD -0.0002 Tc 0 Tw [(befor)19.6(e)]TJ /F2 1 Tf 9 0 0 9 195.3411 250.0776 Tm (Inline)Tj /F1 1 Tf 11 0 0 11 232.7095 250.0776 Tm -0.0001 Tc 0.2024 Tw [(r)9.9(eceiv)5.8(es the sour)5.8(ce)]TJ -15.4281 -1.0909 TD 0.1814 Tw [(code. S)11.9(ince )]TJ /F2 1 Tf 9 0 0 9 117.5353 238.0776 Tm -0.0002 Tc 0 Tw (use)Tj /F1 1 Tf 11 0 0 11 138.4767 238.0776 Tm -0.0001 Tc 0.1814 Tw [(happens during compile time, y)5.8(ou may)]TJ -6.8615 -1.0909 TD 0.025 Tw (need to do something like this to use )Tj /F2 1 Tf 9 0 0 9 224.2705 226.0776 Tm -0.0002 Tc 0 Tw (Inline::Config)Tj /F1 1 Tf 11 0 0 11 299.852 226.0776 Tm 0 Tc (.)Tj /F2 1 Tf 7 0 0 7 81.4756 206.0776 Tm -0.0002 Tc 0.06 Tw (BEGIN {)Tj 2.6394 -1.1429 TD (use Inline;)Tj T* ($Inline::Config::PRINT_INFO = 1;)Tj T* 0 Tw (Inline::Config::Force_Build\(1\);)Tj T* 0.06 Tw (Inline::Config->makefile\('LIBS' => ['-lm']\);)Tj -2.6394 -1.1429 TD 0 Tc 0 Tw (})Tj 0 -2.2857 TD -0.0002 Tc 0.06 Tw (use Inline C => "C code goes here...";)Tj /F1 1 Tf 11 0 0 11 63 126.0775 Tm -0.0001 Tc 0.1518 Tw [(This demonstrates the thr)9.7(ee differ)9.7(ent syntax)11.9(es for setting)]TJ 25.3636 61.4545 TD 0.0509 Tw [(options. )14.8(Y)93.9(ou can also set options on the command line; to)]TJ 0 -1.0909 TD 0.1139 Tw [(cut do)11.9(wn on typing, sev)5.8(eral options hav)5.8(e terse \(and case-)]TJ T* 0.025 Tw [(insensitiv)5.8(e\) command-line v)5.8(ersions. S)11.9(ome examples:)]TJ /F2 1 Tf 7 0 0 7 360.4756 758.0776 Tm -0.0003 Tc 0 Tw (% )Tj /F11 1 Tf 1.2597 0 TD -0.0002 Tc 0.06 Tw [(perl -MInline=Info program.pl)]TJ /F2 1 Tf -1.2597 -1.1429 TD -0.0003 Tc 0 Tw (% )Tj /F11 1 Tf 1.2597 0 TD -0.0001 Tc 0.0599 Tw (perl -MInline=Force,Noclean,Info program.pl)Tj /F2 1 Tf -1.2597 -1.1429 TD -0.0003 Tc 0 Tw (% )Tj /F11 1 Tf 1.2597 0 TD -0.0002 Tc 0.06 Tw [(perl -MInline=Clean program.pl)]TJ /F2 1 Tf 9 0 0 9 342 718.0776 Tm 0 Tw (Info)Tj /F1 1 Tf 11 0 0 11 366.2107 718.0776 Tm -0.0001 Tc (tells )Tj /F2 1 Tf 9 0 0 9 385.5414 718.0776 Tm -0.0002 Tc (Inline)Tj /F1 1 Tf 11 0 0 11 420.5495 718.0776 Tm -0.0001 Tc -0.0122 Tw [(to print a small r)9.7(epor)-7.9(t about the status of)]TJ -7.1409 -1.0909 TD -0.0126 Tw [(the I)11.9(nlined code. )]TJ /F2 1 Tf 9 0 0 9 416.2993 706.0776 Tm -0.0002 Tc 0 Tw (Force)Tj /F1 1 Tf 11 0 0 11 445.9034 706.0776 Tm -0.0001 Tc -0.0126 Tw [(for)5.8(ces a build to happen ev)5.8(en if the)]TJ -9.4458 -1.0909 TD 0.0881 Tw (cached object is up to date, and )Tj /F2 1 Tf 9 0 0 9 485.2812 694.0776 Tm -0.0002 Tc 0 Tw (Noclean)Tj /F1 1 Tf 11 0 0 11 526.7905 694.0776 Tm -0.0001 Tc 0.0881 Tw [(leav)5.8(es the build)]TJ -16.7991 -1.0909 TD 0.1206 Tw [(mess intact so that y)5.8(ou can inspect it. )44.8(The )]TJ /F2 1 Tf 9 0 0 9 534.6915 682.0776 Tm -0.0002 Tc 0 Tw (Clean)Tj /F1 1 Tf 11 0 0 11 565.7617 682.0776 Tm (option)Tj -20.342 -6.5454 TD -0.0001 Tc (tells )Tj /F2 1 Tf 9 0 0 9 362.4794 610.0776 Tm -0.0002 Tc (Inline)Tj /F1 1 Tf 11 0 0 11 398.6361 610.0776 Tm -0.0001 Tc 0.0922 Tw [(to clean up all pr)9.7(evious messes that it kno)11.9(ws)]TJ -5.1487 -1.0909 TD 0.0175 Tc 0.3574 Tw [(about. \(R)12(emember)59.8(, ev)5.8(er)-17.9(ything is under one )]TJ /F2 1 Tf 9 0 0 9 560.8184 598.0776 Tm 0 Tw (blib_I)Tj /F1 1 Tf 11 0 0 11 342 586.0776 Tm -0.0001 Tc 0.025 Tw [(dir)9.7(ector)-17.9(y)84.9(,)0( so it)17.7()79.9(s)0( a manageable mess\))]TJ 0 -2.2727 TD 0.1039 Tw [(Y)93.9(ou can ev)5.8(en get information about any installed module)]TJ 0 -1.0909 TD 0.025 Tw (that uses )Tj /F2 1 Tf 9 0 0 9 382.0007 549.0776 Tm -0.0002 Tc 0 Tw (Inline)Tj /F1 1 Tf 11 0 0 11 417.4178 549.0776 Tm -0.0001 Tc 0.025 Tw (with a one-liner like this:)Tj /F2 1 Tf 7 0 0 7 342 529.0776 Tm -0.0003 Tc 0 Tw (% )Tj /F11 1 Tf 1.2597 0 TD -0.0001 Tc 0.0599 Tw [(perl -MInline=Info -MMath::Simple -e 42)]TJ /F2 1 Tf -1.2597 -1.1429 TD 0.0748 Tc 0 Tw [(<)74.9(-)]TJ 8.6981 0 TD -0.0002 Tc 0.06 Tw [(Information Section)-75()-75.1()-75()-75.1()-75()-75()-75.1()-75()-75()]TJ 18.2056 0 TD 0.0749 Tc 0 Tw (->)Tj -26.9037 -2.2857 TD -0.0001 Tc 0.0599 Tw [(Information about the processing of your Inline C code:)]TJ T* [(Your module is already compiled. It is located at:)]TJ 0 -1.1429 TD 0 Tw (/usr/local/lib/perl5/site_perl/5.6.0/i686-linux/auto/Math/)Tj T* (Simple_C_1_23_9cddc5e3bf29ec8e1b4218f2de)Tj T* (670c59/Simple_C_1_23_9cddc5e3bf29ec8e1b4218f2de670c59.so)Tj 0 -2.2857 TD 0.0599 Tw [(The following Inline C function\(s\) have been successfully)]TJ 0 -1.1429 TD -0.0002 Tc (bound to Perl:)Tj 5.2787 -1.1429 TD [(double add\(double x, double y\))]TJ T* -0.0001 Tc [(double divide\(double x, double y\))]TJ T* [(double multiply\(double x, double y\))]TJ T* [(double subtract\(double x, double y\))]TJ -5.2787 -2.2857 TD 0.0748 Tc -0.015 Tw [(<)74.9(-E)75(n)74.9(d)75( o)75(f)75( I)75(n)74.9(f)74.9(o)75(r)75(m)]TJ 16.616 0 TD -0.0002 Tc 0.06 Tw [(ation Section)]TJ 7.8582 0 TD 0.0748 Tc 0 Tw (>)Tj /F1 1 Tf 11 0 0 11 342 368.0776 Tm -0.0001 Tc 0.0255 Tw [(Ther)9.7(e is a special option called )]TJ /F2 1 Tf 9 0 0 9 476.5096 368.0776 Tm -0.0002 Tc 0 Tw (Reportbug)Tj /F1 1 Tf 11 0 0 11 525.0977 368.0776 Tm 0 Tc 0.0106 Tw [(. When )-14.9(y)5.9(ou )-14.8(r)-7.8(u)0.1(n)]TJ -16.6452 -1.0909 TD -0.0001 Tc 0.0776 Tw [(into a pr)5.8(oblem, and suspect that it is the fault of )]TJ /F2 1 Tf 9 0 0 9 558.8579 356.0776 Tm -0.0002 Tc 0 Tw (Inline)Tj /F1 1 Tf 11 0 0 11 591.25 356.0776 Tm 0 Tc (,)Tj -22.6591 -1.0909 TD -0.0001 Tc 0.025 Tw [(just issue the follo)11.9(wing command.)]TJ /F2 1 Tf 7 0 0 7 360.4756 324.0775 Tm -0.0003 Tc 0 Tw (% )Tj /F11 1 Tf 1.2597 0 TD -0.0001 Tc 0.0599 Tw [(perl -MInline=Reportbug program.pl)]TJ /F1 1 Tf 11 0 0 11 342 300.0775 Tm 0.1474 Tw [(E)5.8(xplicit instr)-7.9(uctions will be display)5.8(ed telling y)5.8(ou ho)11.9(w to)]TJ 0 -1.0909 TD 0.025 Tw [(r)9.9(epor)-7.9(t the pr)5.8(oblem. )]TJ 0 -2.2727 TD 0.1491 Tw [(F)35.9(or mor)9.7(e information about configuration issues, see the)]TJ /F2 1 Tf 9 0 0 9 342 251.0776 Tm -0.0002 Tc 0 Tw (Inline::Config)Tj /F1 1 Tf 11 0 0 11 420.6066 251.0776 Tm -0.0001 Tc (documentation.)Tj /F8 1 Tf 12 0 0 12 342 224.0776 Tm 0.0199 Tc (XS )Tj 10.44 0 0 10.44 359.9066 224.0776 Tm 0.0228 Tc (AND)Tj 12 0 0 12 387.1014 224.0776 Tm 0.0198 Tc (SWIG)Tj /F1 1 Tf 11 0 0 11 342 198.0775 Tm -0.0001 Tc 0.0489 Tw (This is my opinionated rant on why )Tj /F2 1 Tf 9 0 0 9 501.4985 198.0775 Tm -0.0002 Tc 0 Tw (Inline)Tj /F1 1 Tf 11 0 0 11 537.1782 198.0775 Tm -0.0001 Tc 0.0489 Tw (is better than)Tj -17.7435 -1.0909 TD 0.0796 Tw [(XS and SWIG. I)5.8(f)0( y)5.8(o)0.1(u)49.7()69.9(r)9.9(e)0( alr)9.7(eady convinced that )]TJ /F2 1 Tf 9 0 0 9 551.6041 186.0775 Tm -0.0002 Tc 0 Tw (Inline)Tj /F1 1 Tf 11 0 0 11 587.6218 186.0775 Tm -0.0001 Tc (is)Tj -22.3293 -1.0909 TD 0.1271 Tw [(the best way to extend P)53.9(erl, feel fr)9.7(ee to skip this section.)]TJ T* 0.2658 Tw [(SWIG \(S)11.9(implified )14.8(W)81.7(rapper and I)11.9(nter)-7.9(face G)5.8(enerator\) is)]TJ T* 0.1633 Tw [(mor)9.7(e)0( or less a generic v)5.8(ersion of XS that suppor)-7.9(ts other)]TJ T* -0.0125 Tw [(scripting languages as w)5.8(ell. S)11.9(ince this rant applies equally to)]TJ T* 0.025 Tw (both methods, I will only talk about XS.)Tj 12 0 0 12 63 90.3543 Tm 0 Tc 0 Tw [(36)-1100(F)]TJ 10.44 0 0 10.44 94.2795 90.3543 Tm -0.0001 Tc (ALL)Tj 12 0 0 12 115.6277 90.3543 Tm 0 Tc (2000)Tj /F3 1 Tf 30.9897 0.0003 TD -0.0002 Tc 0.0255 Tw [(The P)47.6(erl J)35.7(our)-8(nal #19)]TJ /F9 1 Tf 14 0 0 14 368.3789 652.7702 Tm -0.0102 Tc 0.0278 Tw [(This is m)34.7(y)0( rant on wh)34.7(y Inline is )]TJ 0.9453 -1.1429 TD (better than XS and SWIG.)Tj ET 0 0 0 1 K 0 J 0 j 2 w 10 M []0 d 342 672.35 m 594 672.35 l S 0.667 w 342 669.68 m 594 669.68 l 342 628.17 m 594 628.17 l S 2 w 342 625.5 m 594 625.5 l S Q 0 0 0 0 k 1 i 37 874 191 -12 re 554.245 636.77 m f* BT /F2 1 Tf 8 0 0 8 39 864 Tm /Cs9 cs 1 scn -0.0004 Tc -0.0019 Tw (TPJ#19/9.26 9/27/00 10:35 AM Page 36)Tj ET 1 G 0 J 0 j 0.5 w 10 M []0 d 36 873 m 36 849 l 0 837 m 24 837 l 621 873 m 621 849 l 657 837 m 633 837 l 36 36 m 36 60 l 0 72 m 24 72 l 621 36 m 621 60 l 657 72 m 633 72 l S /Cs9 CS 1 SCN 0.25 w 36 873 m 36 849 l 0 837 m 24 837 l 621 873 m 621 849 l 657 837 m 633 837 l 36 36 m 36 60 l 0 72 m 24 72 l 621 36 m 621 60 l 657 72 m 633 72 l S 1 G 0.5 w 304.5 861 m 352.5 861 l 304.5 48 m 352.5 48 l 12 478.5 m 12 430.5 l 645 478.5 m 645 430.5 l 328.5 873 m 328.5 849 l 328.5 60 m 328.5 36 l 0 454.5 m 24 454.5 l 633 454.5 m 657 454.5 l 328.5 861 m 334.5 861 l 334.5 857.688 331.812 855 328.5 855 c 325.188 855 322.5 857.688 322.5 861 c 322.5 864.312 325.188 867 328.5 867 c 331.812 867 334.5 864.312 334.5 861 c 328.5 48 m 334.5 48 l 334.5 44.688 331.812 42 328.5 42 c 325.188 42 322.5 44.688 322.5 48 c 322.5 51.312 325.188 54 328.5 54 c 331.812 54 334.5 51.312 334.5 48 c 12 454.5 m 18 454.5 l 18 451.188 15.312 448.5 12 448.5 c 8.688 448.5 6 451.188 6 454.5 c 6 457.812 8.688 460.5 12 460.5 c 15.312 460.5 18 457.812 18 454.5 c 645 454.5 m 651 454.5 l 651 451.188 648.312 448.5 645 448.5 c 641.688 448.5 639 451.188 639 454.5 c 639 457.812 641.688 460.5 645 460.5 c 648.312 460.5 651 457.812 651 454.5 c S /Cs9 CS 1 SCN 0.25 w 304.5 861 m 352.5 861 l 304.5 48 m 352.5 48 l 12 478.5 m 12 430.5 l 645 478.5 m 645 430.5 l 328.5 873 m 328.5 849 l 328.5 60 m 328.5 36 l 0 454.5 m 24 454.5 l 633 454.5 m 657 454.5 l 328.5 861 m 334.5 861 l 334.5 857.688 331.812 855 328.5 855 c 325.188 855 322.5 857.688 322.5 861 c 322.5 864.312 325.188 867 328.5 867 c 331.812 867 334.5 864.312 334.5 861 c 328.5 48 m 334.5 48 l 334.5 44.688 331.812 42 328.5 42 c 325.188 42 322.5 44.688 322.5 48 c 322.5 51.312 325.188 54 328.5 54 c 331.812 54 334.5 51.312 334.5 48 c 12 454.5 m 18 454.5 l 18 451.188 15.312 448.5 12 448.5 c 8.688 448.5 6 451.188 6 454.5 c 6 457.812 8.688 460.5 12 460.5 c 15.312 460.5 18 457.812 18 454.5 c 645 454.5 m 651 454.5 l 651 451.188 648.312 448.5 645 448.5 c 641.688 448.5 639 451.188 639 454.5 c 639 457.812 641.688 460.5 645 460.5 c 648.312 460.5 651 457.812 651 454.5 c S endstream endobj 112 0 obj << /Type /Page /Parent 494 0 R /Resources 113 0 R /Contents 114 0 R /Thumb 393 0 R /MediaBox [ 0 0 684 873 ] /CropBox [ 0 0 684 873 ] /Rotate 0 >> endobj 113 0 obj << /ProcSet [ /PDF /Text ] /Font << /F1 515 0 R /F2 518 0 R /F3 261 0 R /F5 262 0 R /F8 268 0 R /F11 271 0 R >> /ExtGState << /GS1 523 0 R /GS2 521 0 R >> /ColorSpace << /Cs9 520 0 R >> >> endobj 114 0 obj << /Length 13431 >> stream 1 g /GS1 gs 0 873 m 0 873 l f q 1 i 27 846 603 -783 re 0 873 m W n 0 873 684 -873 re W n BT /F1 1 Tf 11 0 0 11 63 802.0776 Tm 0 0 0 1 k /GS2 gs -0.0001 Tc 0.1563 Tw [(XS \(E)5.8(xternal S)23.9(ubr)5.8(outines\) is a mini )39.7(glue)29.7( language that)]TJ 0 -1.0909 TD 0.0229 Tw [(wor)5.8(ks together with the )]TJ /F2 1 Tf 9 0 0 9 167.5948 790.0776 Tm -0.0002 Tc 0 Tw (h2xs)Tj /F1 1 Tf 11 0 0 11 192.1916 790.0776 Tm -0.0001 Tc 0.0229 Tw (template generating tool and)Tj -11.7447 -1.0909 TD 0 Tw (the )Tj /F2 1 Tf 9 0 0 9 79.5158 778.0776 Tm -0.0002 Tc (xsubpp)Tj /F1 1 Tf 11 0 0 11 115.0282 778.0776 Tm -0.0001 Tc 0.0336 Tw [(translating compiler)59.7(. )44.8(The basic idea is that y)5.8(o)0.1(u)]TJ -4.7298 -1.0909 TD 0 Tw [(r)-7.7(un )]TJ /F2 1 Tf 9 0 0 9 80.9232 766.0776 Tm -0.0002 Tc (h2xs)Tj /F1 1 Tf 11 0 0 11 105.3 766.0776 Tm -0.0001 Tc 0.0029 Tw [(against some existing C librar)-17.9(y)29.7()79.9(s header files. )44.8(This)]TJ -3.8455 -1.0909 TD 0.0199 Tc 0.3797 Tw [(cr)9.7(eates a P)53.9(erl module, an XS inter)-7.8(face file, and a)]TJ /F2 1 Tf 9 0 0 9 63 742.0776 Tm 0.0063 Tc 0 Tw (Makefile.PL)Tj /F1 1 Tf 11 0 0 11 123.0245 742.0776 Tm 0.3686 Tw [(. )44.8(Then y)5.7(ou r)-7.9(un the normal P)53.8(erl install)]TJ -5.4568 -1.0909 TD -0.0001 Tc 0.1167 Tw [(commands and pr)9.7(esto, y)5.8(ou hav)5.8(e a P)53.9(erl module that giv)5.8(es)]TJ T* 0.025 Tw [(y)5.8(ou full access to that librar)-17.9(y)29.7()79.9(s AP)11.9(I.)]TJ 0 -2.1818 TD 0.1918 Tw [(I)5.9(f)0( y)5.8(ou can get it to wor)5.8(k that easily)84.9(, then b)5.8(y)0( all means )]TJ 0 -1.0909 TD 0.0251 Tw (use XS. )Tj 0 -2.1818 TD -0.0294 Tw [(The first pr)5.8(oblem that y)5.8(ou will undoubtedly r)-7.9(un into is that)]TJ 0 -1.0909 TD 0.085 Tw [(y)5.8(ou need to tw)5.8(eak each of the generated files. A lot. )44.8(That)]TJ T* 0.0084 Tw [(means y)5.8(o)0.1(u)49.7()12(ll need to r)9.7(ead a lot of documentation about the)]TJ T* 0.0454 Tw [(format of those files. )14.8(Y)93.9(o)0.1(u)49.7()12(ll do most of the tw)5.8(eaking in the)]TJ /F2 1 Tf 9 0 0 9 63 610.0776 Tm -0.0002 Tc 0 Tw (Foo.xs)Tj /F1 1 Tf 11 0 0 11 98.2537 610.0776 Tm -0.0001 Tc 0.0101 Tw [(file. XS giv)5.8(es y)5.8(ou a doz)5.8(en or so special keywor)13.9(ds to)]TJ -3.2049 -1.0909 TD 0.1166 Tw [(help y)5.8(ou tw)5.8(eak. K)5.8(eywor)13.8(ds like )]TJ /F2 1 Tf 9 0 0 9 201.6025 598.0776 Tm -0.0002 Tc 0 Tw (INIT)Tj /F1 1 Tf 11 0 0 11 223.1972 598.0776 Tm 0 Tc (, )Tj /F2 1 Tf 9 0 0 9 229.9801 598.0776 Tm -0.0002 Tc (PREINIT)Tj /F1 1 Tf 11 0 0 11 267.7709 598.0776 Tm 0 Tc (,)Tj /F2 1 Tf 9 0 0 9 63 586.0776 Tm -0.0002 Tc (CODE)Tj /F1 1 Tf 11 0 0 11 84.5947 586.0776 Tm -0.0001 Tc -0.0178 Tw (, and )Tj /F2 1 Tf 9 0 0 9 108.266 586.0776 Tm -0.0002 Tc 0 Tw (PPCODE)Tj /F1 1 Tf 11 0 0 11 143.2126 586.0776 Tm -0.0001 Tc -0.0177 Tw [(allo)11.9(w y)5.8(ou to sprinkle bits of C)]TJ -7.2921 -1.0909 TD 0.0199 Tc 0.4578 Tw [(code ar)5.8(ound the calling of the function.)]TJ T* -0.0001 Tc -0.0148 Tw [(Kno)11.9(wing ho)11.9(w all of these bits get pasted together)]TJ T* 0.025 Tw (at compile time is the stuff of legends.)Tj 0 -2.1818 TD 0.2191 Tw [(Another pr)5.8(oblem is typemaps, which translate)]TJ 0 -1.0909 TD 0.0006 Tw [(P)54(erl data types to C and vice v)5.8(ersa. XS pr)5.8(o)15.9(vides a)]TJ T* 0.0163 Tw (lot of defaults, but some of them actually update)Tj T* 0.1058 Tw [(the input arguments themselv)5.8(es. )44.8(That)17.7()79.9(s good in)]TJ T* 0.0769 Tw [(C, but horrible in P)53.9(erl. I)5.8(f)0( y)5.8(ou use these literally)]TJ T* 0.0226 Tw [(mapped function calls, y)5.8(o)0.1(u)49.7()12(ll end up pr)5.8(o)15.9(v)0.1(iding a)]TJ T* -0.0146 Tw [(v)5.9(e)0.1(r)-17.9(y)0( confusing inter)-7.9(face fr)5.8(om the perspectiv)5.8(e of a)]TJ T* 0.1997 Tw [(P)54(e)0.1(rl pr)5.8(ogrammer)59.7(. Also, if y)5.8(our existing librar)-17.9(y)]TJ T* 0.2413 Tw (uses any but the simplest types and typedefs,)Tj T* 0.1598 Tw [(y)5.8(o)0.1(u)49.7()12(ll hav)5.8(e)0( to write y)5.8(our o)11.9(wn typemaps in y)5.8(e)0(t)]TJ T* 0.025 Tw (another file called )Tj /F2 1 Tf 9 0 0 9 141.9879 406.0776 Tm -0.0002 Tc 0 Tw (typemaps)Tj /F1 1 Tf 11 0 0 11 185.1774 406.0776 Tm 0 Tc (.)Tj -11.107 -2.1818 TD -0.0001 Tc 0.0069 Tw [(T)119.9(o)0( make )]TJ /F2 1 Tf 9 0 0 9 102.6894 382.0776 Tm -0.0002 Tc 0 Tw (Inline)Tj /F1 1 Tf 11 0 0 11 137.9066 382.0776 Tm -0.0001 Tc 0.0068 Tw [(use an existing AP)11.9(I, y)5.8(o)0.1(u)49.7()12(ll need)]TJ -6.8097 -1.0909 TD 0.2415 Tw [(to write y)5.8(our o)11.9(wn wrapper function for each)]TJ T* 0.0009 Tc 0.374 Tw [(function y)5.8(ou want to expose. I)5.8(f)0( this seems)]TJ T* -0.0001 Tc 0.1436 Tw [(cr)-7.9(ummy at first, consider that all of y)5.8(our code)]TJ T* -0.0067 Tw [(will be in y)5.8(our module, and that it will all be laid)]TJ T* 0.2184 Tw [(out in the tr)-7.9(ue or)13.8(der of ex)11.9(ecution, instead of)]TJ T* 0.0895 Tw [(being masked b)5.8(y)0( a lot of extra syntax. And y)5.8(o)0.1(u)]TJ T* 0.025 Tw [(don)69.8()79.9(t)0( hav)5.8(e to r)-7.9(un )]TJ /F2 1 Tf 9 0 0 9 139.137 298.0776 Tm -0.0002 Tc 0 Tw (make)Tj /F1 1 Tf 11 0 0 11 163.7567 298.0776 Tm -0.0001 Tc 0.025 Tw [(ev)5.8(er)-17.9(y time y)5.8(ou tw)5.8(eak.)]TJ -9.1597 -2.1818 TD 0.2564 Tw [(I)5.9(f)0( y)5.8(o)0.1(u)49.7()69.9(r)9.9(e)0( not using an existing AP)11.9(I, choosing)]TJ /F2 1 Tf 9 0 0 9 63 262.0776 Tm -0.0002 Tc 0 Tw (Inline)Tj /F1 1 Tf 11 0 0 11 98.8771 262.0776 Tm -0.0001 Tc 0.0668 Tw [(should be a no-brainer)59.7(. O)5.8(ne of the best)]TJ -3.2616 -1.0909 TD 0.0596 Tw (things about )Tj /F2 1 Tf 9 0 0 9 120.1992 250.0776 Tm -0.0002 Tc 0 Tw (Inline)Tj /F1 1 Tf 11 0 0 11 155.9965 250.0776 Tm -0.0001 Tc 0.0596 Tw [(is that y)5.8(ou can use it fr)5.8(om)]TJ -8.4542 -1.0909 TD 0.0096 Tw [(a pr)5.8(ogram. )14.7(W)9.7(ith XS and SWIG y)5.8(ou always need)]TJ T* 0.025 Tw [(to cr)9.7(eate a full-blo)11.9(wn module.)]TJ /F8 1 Tf 12 0 0 12 63 200.0776 Tm 0 Tc 0 Tw (O)Tj 10.44 0 0 10.44 72.7439 200.0776 Tm 0.0227 Tc [(N)-381.2(THE)]TJ 12 0 0 12 111.0752 200.0776 Tm 0 Tc (I)Tj 10.44 0 0 10.44 115.5603 200.0776 Tm 0.0228 Tc (NSIDE)Tj 12 0 0 12 148.0927 200.0776 Tm 0.0198 Tc 0.0255 Tw (, L)Tj 10.44 0 0 10.44 161.7673 200.0776 Tm 0.0228 Tc 0 Tw (OOKING)Tj 12 0 0 12 210.0777 200.0776 Tm 0 Tc (O)Tj 10.44 0 0 10.44 219.8215 200.0776 Tm 0.0227 Tc (UT)Tj /F1 1 Tf 11 0 0 11 63 177.0775 Tm 0.0007 Tc 0.3742 Tw [(As y)5.8(ou journey bey)5.7(ond the examples and into mor)9.6(e)]TJ T* -0.0001 Tc 0.1412 Tw [(complex C pr)5.8(ogramming, y)5.8(ou may find y)5.8(ourself clicking)]TJ T* 0.0853 Tw [(y)5.8(our heels fr)5.8(om time to time. I)69.8(m not in P)53.9(erl anymor)9.7(e!,)]TJ T* 0.094 Tw [(y)5.8(ou might say)84.9(. B)11.9(ut if y)5.8(ou think about it, y)5.8(ou nev)5.8(er r)9.7(eally)]TJ T* 0.025 Tw [(left. )14.8(Y)93.9(o)0.1(u)49.7()69.9(r)9.9(e)0( mer)9.7(ely on the dar)5.8(k side no)11.9(w)74.9(.)-0.1( U)29.7(se the for)5.8(ce.)]TJ 25.3636 61.1818 TD -0.0347 Tw [(The full po)11.9(w)5.8(er of P)53.9(erl is still at y)5.8(o)0(ur finger)-7.9(tips. F)35.8(or example,)]TJ 0 -1.0909 TD 0.1371 Tw [(in P)53.9(erl, memor)-17.9(y is automatically allocated each time y)5.8(o)0.1(u)]TJ T* 0.0141 Tw [(mention a ne)-5.9(w v)5.8(ariable. I)5.8(f)0( y)5.8(ou add text to a string v)5.8(ariable,)]TJ T* 0.0064 Tc 0.3685 Tw [(P)54(erl automatically allocates mor)9.6(e memor)-17.9(y)84.8(.)-0.1( )14.8(When the)]TJ T* -0.0001 Tc 0.0517 Tw [(v)5.9(ariable goes out of scope, all the memor)-17.9(y is automatically)]TJ T* 0.2445 Tw [(fr)9.7(eed. B)11.9(ut in C y)5.8(ou need to use )]TJ /F2 1 Tf 9 0 0 9 499.1619 742.0776 Tm -0.0002 Tc 0 Tw (malloc)Tj /F1 1 Tf 11 0 0 11 536.9935 742.0776 Tm (and )Tj /F2 1 Tf 9 0 0 9 558.2457 742.0776 Tm (free)Tj /F1 1 Tf 11 0 0 11 585.2803 742.0776 Tm (to)Tj -22.1164 -1.0909 TD -0.0001 Tc 0.025 Tw (manage buffers. Right?)Tj 0 -2.1818 TD 0.0519 Tw [(Why not just use the po)11.9(w)5.8(er of P)53.9(erl? )14.7(Y)93.9(ou can ask P)53.9(erl for a)]TJ 0 -1.0909 TD 0.0019 Tw [(ne)-5.9(w anonymous scalar \()]TJ /F2 1 Tf 9 0 0 9 443.8196 694.0776 Tm -0.0003 Tc 0 Tw (SV)Tj /F1 1 Tf 11 0 0 11 454.617 694.0776 Tm -0.0001 Tc 0.0018 Tw [(\) at any time. )14.7(Y)93.9(ou can ask P)53.9(erl to)]TJ -10.2379 -1.0909 TD 0.1283 Tw [(extend it for y)5.8(ou, and y)5.8(ou can ev)5.8(en tell P)53.9(erl to fr)9.7(ee it at)]TJ T* 0.025 Tw (some point )Tj /F5 1 Tf 4.623 0 TD 0 Tw (after)Tj /F1 1 Tf 1.9505 0 TD 0.025 Tw [(y)5.8(our C function r)9.7(eturns.)]TJ -6.5735 -2.1818 TD 0.0599 Tw [(H)17.8(e)0.1(r)9.7(e)29.7()79.9(s)0( a simple example using a function that takes a hash)]TJ 0 -1.0909 TD -0.0157 Tw [(r)9.9(efer)9.7(ence and r)9.7(eturns its v)5.8(alues as a comma separated string.)]TJ T* -0.0103 Tw [(O)5.8(f)0( course, w)5.8(e)29.7()12(ll need to build the r)9.7(eturn v)5.8(alue in a buffer of)]TJ T* 0.025 Tw [(unkno)11.9(wn siz)5.8(e.)]TJ 0 -37.8182 TD [(I)5.9(f)0( y)5.8(ou r)-7.9(un the code in Listing 4, y)5.8(o)0.1(u)49.7()12(ll get:)]TJ /F2 1 Tf 7 0 0 7 360.4756 174.0775 Tm -0.0003 Tc 0 Tw (% )Tj /F11 1 Tf 1.2597 0 TD -0.0002 Tc 0.06 Tw (perl ./hash_keys.pl)Tj /F2 1 Tf -1.2597 -1.1429 TD 0 Tw (Perl,Loves,Ingy)Tj /F1 1 Tf 11 0 0 11 342 142.0775 Tm -0.0001 Tc 0.015 Tw [(I)49.7(v)5.9(e)0( just pr)9.7(esented y)5.8(ou with doz)5.8(en or so ne)-5.9(w calls. I leav)5.8(e it)]TJ 0 -1.0909 TD 0.025 Tw [(y)5.8(ou to find out ho)11.9(w they all wor)5.8(k.)]TJ 12 0 0 12 517.3723 90.3543 Tm 0 Tc 0 Tw (F)Tj 10.44 0 0 10.44 523.4518 90.3543 Tm -0.0001 Tc (ALL)Tj 12 0 0 12 544.7999 90.3543 Tm 0 Tc 0.025 Tw [(2000 37)]TJ /F3 1 Tf -40.15 0 TD -0.0002 Tc 0.0255 Tw [(The P)47.6(erl J)35.7(our)-8(nal #19)]TJ ET 0 0.03 0.3 0 k 282.52 583.37 310.75 -348.09 re 162.892 90.354 m f* BT /F8 1 Tf 14 0 0 14 287.6656 560.1536 Tm 0 0 0 1 k -0.0001 Tc [(Listing 4. A)11.9(ccessing P)53.8(erl hashes fr)5.8(om C.)]TJ /F2 1 Tf 7 0 0 7 306.1412 539.8536 Tm 0.0599 Tw [(use Inline C => <<'END_OF_C_CODE';)]TJ 0 -2.3714 TD (void hash_values\(SV* hash_ref\) {)Tj 1.3197 -1.1857 TD -0.0002 Tc 0 Tw (Inline_Stack_Vars;)Tj T* 0.06 Tw (HV* hash;)Tj T* (HE* hash_entry;)Tj T* (int num_keys, i;)Tj T* (SV* buffer;)Tj T* (SV* sv_val;)Tj 0 -2.3714 TD -0.0001 Tc [(if \(! \(SvROK\(hash_ref\) && SvTYPE\(SvRV\(hash_ref\)\) == SVt_PVHV\)\))]TJ 1.3197 -1.1857 TD [(croak\("Error. Expected a hash reference"\);)]TJ -1.3197 -1.1857 TD (hash = \(HV*\)SvRV\(hash_ref\);)Tj T* [(num_keys = hv_iterinit\(hash\);)]TJ 0 -2.3714 TD -0.0002 Tc [(buffer = NEWSV\(0, 0\);)]TJ 0 -1.1857 TD -0.0001 Tc [(for \(i = 0; i++ < num_keys;\) {)]TJ 1.3197 -1.1857 TD (hash_entry = hv_iternext\(hash\);)Tj T* (sv_val = hv_iterval\(hash, hash_entry\);)Tj T* [(sv_catpvf\(buffer, "%s%s", SvPV\(sv_val, PL_na\),)]TJ 6.5984 -1.1857 TD -0.0002 Tc [(\(i < num_keys\) ? "," : ""\);)]TJ -7.9181 -1.1857 TD 0 Tc 0 Tw (})Tj 0 -2.3714 TD -0.0001 Tc 0.0599 Tw (Inline_Stack_Item\(0\) = sv_2mortal\(buffer\);)Tj 0 -1.1857 TD -0.0002 Tc 0 Tw (Inline_Stack_Return\(1\);)Tj -1.3197 -1.1857 TD 0 Tc (})Tj 0 -2.3714 TD -0.0002 Tc (END_OF_C_CODE)Tj T* 0.06 Tw (%hash = \()Tj 3.2313 -1.1857 TD [(Who => 'Ingy',)]TJ T* (What => 'Loves',)Tj T* (Whom => 'Perl',)Tj -0.6598 -1.1857 TD -0.0003 Tc 0 Tw (\);)Tj -2.5714 -2.3714 TD -0.0001 Tc 0.0599 Tw (print hash_values\(\\%hash\), "\\n";)Tj ET Q 0 0 0 0 k /GS2 gs 1 i 37 874 191 -12 re 441.347 249.354 m f* BT /F2 1 Tf 8 0 0 8 39 864 Tm /Cs9 cs 1 scn -0.0004 Tc -0.0019 Tw (TPJ#19/9.26 9/27/00 10:35 AM Page 37)Tj ET 1 G 0 J 0 j 0.5 w 10 M []0 d 36 873 m 36 849 l 0 837 m 24 837 l 621 873 m 621 849 l 657 837 m 633 837 l 36 36 m 36 60 l 0 72 m 24 72 l 621 36 m 621 60 l 657 72 m 633 72 l S /Cs9 CS 1 SCN 0.25 w 36 873 m 36 849 l 0 837 m 24 837 l 621 873 m 621 849 l 657 837 m 633 837 l 36 36 m 36 60 l 0 72 m 24 72 l 621 36 m 621 60 l 657 72 m 633 72 l S 1 G 0.5 w 304.5 861 m 352.5 861 l 304.5 48 m 352.5 48 l 12 478.5 m 12 430.5 l 645 478.5 m 645 430.5 l 328.5 873 m 328.5 849 l 328.5 60 m 328.5 36 l 0 454.5 m 24 454.5 l 633 454.5 m 657 454.5 l 328.5 861 m 334.5 861 l 334.5 857.688 331.812 855 328.5 855 c 325.188 855 322.5 857.688 322.5 861 c 322.5 864.312 325.188 867 328.5 867 c 331.812 867 334.5 864.312 334.5 861 c 328.5 48 m 334.5 48 l 334.5 44.688 331.812 42 328.5 42 c 325.188 42 322.5 44.688 322.5 48 c 322.5 51.312 325.188 54 328.5 54 c 331.812 54 334.5 51.312 334.5 48 c 12 454.5 m 18 454.5 l 18 451.188 15.312 448.5 12 448.5 c 8.688 448.5 6 451.188 6 454.5 c 6 457.812 8.688 460.5 12 460.5 c 15.312 460.5 18 457.812 18 454.5 c 645 454.5 m 651 454.5 l 651 451.188 648.312 448.5 645 448.5 c 641.688 448.5 639 451.188 639 454.5 c 639 457.812 641.688 460.5 645 460.5 c 648.312 460.5 651 457.812 651 454.5 c S /Cs9 CS 1 SCN 0.25 w 304.5 861 m 352.5 861 l 304.5 48 m 352.5 48 l 12 478.5 m 12 430.5 l 645 478.5 m 645 430.5 l 328.5 873 m 328.5 849 l 328.5 60 m 328.5 36 l 0 454.5 m 24 454.5 l 633 454.5 m 657 454.5 l 328.5 861 m 334.5 861 l 334.5 857.688 331.812 855 328.5 855 c 325.188 855 322.5 857.688 322.5 861 c 322.5 864.312 325.188 867 328.5 867 c 331.812 867 334.5 864.312 334.5 861 c 328.5 48 m 334.5 48 l 334.5 44.688 331.812 42 328.5 42 c 325.188 42 322.5 44.688 322.5 48 c 322.5 51.312 325.188 54 328.5 54 c 331.812 54 334.5 51.312 334.5 48 c 12 454.5 m 18 454.5 l 18 451.188 15.312 448.5 12 448.5 c 8.688 448.5 6 451.188 6 454.5 c 6 457.812 8.688 460.5 12 460.5 c 15.312 460.5 18 457.812 18 454.5 c 645 454.5 m 651 454.5 l 651 451.188 648.312 448.5 645 448.5 c 641.688 448.5 639 451.188 639 454.5 c 639 457.812 641.688 460.5 645 460.5 c 648.312 460.5 651 457.812 651 454.5 c S endstream endobj 115 0 obj << /Type /Page /Parent 494 0 R /Resources 116 0 R /Contents 117 0 R /Thumb 395 0 R /MediaBox [ 0 0 684 873 ] /CropBox [ 0 0 684 873 ] /Rotate 0 >> endobj 116 0 obj << /ProcSet [ /PDF /Text ] /Font << /F1 515 0 R /F2 518 0 R /F3 261 0 R /F5 262 0 R /F8 268 0 R /F9 269 0 R /F10 270 0 R >> /ExtGState << /GS1 523 0 R /GS2 521 0 R >> /ColorSpace << /Cs9 520 0 R >> >> endobj 117 0 obj << /Length 7800 >> stream 1 g /GS1 gs 0 873 m 0 873 l f q 1 i 27 846 603 -783 re 0 873 m W n 0 873 684 -873 re W n BT /F8 1 Tf 12 0 0 12 63 801.3574 Tm 0 0 0 1 k /GS2 gs 0 Tc 0 Tw (T)Tj 10.44 0 0 10.44 71.4226 801.3574 Tm 0.0225 Tc (HE)Tj 12 0 0 12 90.0352 801.3574 Tm 0 Tc (F)Tj 10.44 0 0 10.44 96.6706 801.3574 Tm 0.0228 Tc (UTURE)Tj /F1 1 Tf 11 0 0 11 63 777.3574 Tm -0.0001 Tc -0.008 Tw [(The primar)-17.9(y goal of )]TJ /F2 1 Tf 9 0 0 9 150.676 777.3574 Tm -0.0002 Tc 0 Tw (Inline)Tj /F1 1 Tf 11 0 0 11 185.7304 777.3574 Tm -0.0001 Tc -0.0079 Tw (is to make it as easy as possible)Tj -11.1573 -1.0909 TD 0.0904 Tw [(to extend P)53.9(erl. I)11.9(ll continue to add featur)9.7(es for debugging)]TJ T* 0.3167 Tw [(and other r)9.7(eal-life situations, and I)69.7(m also considering)]TJ 0 -10.9091 TD 0.0029 Tc 0 Tw [(cr)9.7(eating )]TJ /F2 1 Tf 9 0 0 9 103.7572 633.3574 Tm 0.0028 Tc (Inline::C::Typemaps)Tj /F1 1 Tf 11 0 0 11 206.8462 633.3574 Tm 0.0029 Tc 0.372 Tw [(, which would pr)5.8(o)15.9(vide )]TJ -13.0769 -1.0909 TD 0.0018 Tc 0.3731 Tw [(a librar)-17.9(y of useful typemaps and suppor)-7.8(t for adding )]TJ T* -0.0001 Tc 0.025 Tw [(y)5.8(our o)11.9(wn.)]TJ 0 -2.0909 TD 0.0199 Tc 0.3821 Tw [(F)35.9(r)6(om the star)-7.9(t, )]TJ /F2 1 Tf 9 0 0 9 145.1118 586.3574 Tm 0 Tw (Inline)Tj /F1 1 Tf 11 0 0 11 185.7565 586.3574 Tm 0.382 Tw [(was intended to allo)12(w for)]TJ -11.1597 -1.0909 TD -0.0001 Tc 0.1494 Tw [(pr)5.8(ogramming languages other than C. O)5.8(ther languages I)]TJ T* 0.1791 Tw [(would like to suppor)-7.9(t include C++, F)35.8(o)0.2(r)-7.9(tran, P)41.9(ascal, and)]TJ T* 0 Tw [(P)5.9(ython.)]TJ /F8 1 Tf 12 0 0 12 63 524.3574 Tm 0 Tc (O)Tj 10.44 0 0 10.44 72.7439 524.3574 Tm (N)Tj 12 0 0 12 84.3545 524.3574 Tm (Y)Tj 10.44 0 0 10.44 91.4865 524.3574 Tm 0.0228 Tc (OUR)Tj 12 0 0 12 118.6915 524.3574 Tm 0 Tc (M)Tj 10.44 0 0 10.44 129.9823 524.3574 Tm 0.0227 Tc (ARK)Tj /F1 1 Tf 11 0 0 11 63 498.3574 Tm -0.0001 Tc 0.0285 Tw [(I did some benchmar)5.8(k testing on the )]TJ /F2 1 Tf 9 0 0 9 224.443 498.3574 Tm -0.0002 Tc 0 Tw (vowels.pl)Tj /F1 1 Tf 11 0 0 11 276.0947 498.3574 Tm -0.0003 Tc [(pr)5.6(ogram.)]TJ 5.9914 27.6109 TD -0.0001 Tc (The )Tj /F2 1 Tf 9 0 0 9 363.8204 802.0776 Tm -0.0002 Tc (vowel_scan)Tj /F1 1 Tf 11 0 0 11 422.3488 802.0776 Tm -0.0001 Tc 0.1629 Tw [(subr)5.8(outine was called 1000 times with)]TJ -7.3044 -1.0909 TD 0.052 Tw (the contents of )Tj /F2 1 Tf 9 0 0 9 409.8436 790.0776 Tm -0.0002 Tc 0 Tw (/usr/dict/words)Tj /F1 1 Tf 11 0 0 11 494.1454 790.0776 Tm -0.0001 Tc 0.052 Tw [(as its input string. )44.9(This)]TJ -13.8314 -1.0909 TD 0.1162 Tw [(is a huge string \(409093 b)5.8(ytes\). I)23.9(t)0( took 16.0 secs to r)-7.9(un.)]TJ T* 0.0251 Tw [(That)17.8()79.9(s 0.0160 secs/call.)]TJ 0 -2.2727 TD -0.0082 Tw [(A similar subr)5.8(outine written in P)53.9(erl took 2.96 secs/call, 186)]TJ 0 -1.0909 TD 0.0516 Tw [(times slo)11.9(w)5.8(er than C. An optimiz)5.8(ed v)5.8(ersion of this r)5.8(outine,)]TJ T* 0.0377 Tw (which used only numeric comparisons, took 2.54 secs/call.)Tj T* 0.025 Tw [(B)5.8(etter)59.7(, but not much.)]TJ 0 -2.2727 TD -0.0002 Tc -0.0046 Tw [(I)5.8(f)-0.1( y)5.7(ou think this an argument against P)53.8(erl, think again. )44.9(The)]TJ 0 -1.0909 TD -0.0001 Tc 0.0802 Tw [(algorithm was then coded as a P)53.9(erl one-liner with cr)9.7(eativ)5.8(e)]TJ T* 0.025 Tw (use of the )Tj /F2 1 Tf 9 0 0 9 386.5431 656.0776 Tm -0.0003 Tc 0 Tw (tr)Tj /F1 1 Tf 11 0 0 11 400.3655 656.0776 Tm -0.0001 Tc (command.)Tj /F2 1 Tf 7 0 0 7 350.5378 634.0776 Tm -0.0501 Tc 0.0599 Tw [(sub vowel_scan { $_[0]=~tr/aeiouAEIOU// / $_[0]=~tr/a-zA-Z// })]TJ /F1 1 Tf 11 0 0 11 342 608.0776 Tm -0.0001 Tc 0.0731 Tw [(P)29.9(r)9.9(etty? M)11.9(aybe not. F)47.8(ast? )44.9(This ran at 0.0169 secs/call. Less)]TJ T* 0.0581 Tw [(than a millisecond slo)11.9(w)5.8(er than the C function. And it still)]TJ T* 0.025 Tw [(wor)5.8(ks in EBCDIC. )44.8(TMT)31.9(O)51.7(W)-12(TDI!)]TJ /F10 1 Tf 0 -2.2727 TD 0.0278 Tw (_ _END_ _)Tj /F5 1 Tf 0 -2.1818 TD 0.0075 Tw [(B)5.9(rian I)23.9(ngerson )]TJ /F1 1 Tf 5.7086 0 TD 0 Tw (\(INGY@cpan.org\))Tj /F5 1 Tf 7.4526 0 TD 0.0075 Tw [(is a dev)5.8(oted member of the)]TJ -13.1612 -1.0909 TD 0.0723 Tw [(S)11.9(eattle P)41.9(e)0.1(r)11.9(l)0( U)29.7(sers G)17.8(r)6(oup. http://www)61.7(.halcy)5.8(on.com/spug/ H)23.9(e)0( is)]TJ T* 0.3429 Tw [(also a br)29.7(and new emplo)11.9(y)5.8(ee of A)17.8(ctiv)5.8(eS)23.9(tate )47.8(T)120(ool Corp in)]TJ T* 0.025 Tw [(V)88(ancouv)5.8(er BC. I)23.8(n)0( addition to P)41.9(e)0.1(r)11.9(l, he no)11.9(w kno)11.9(ws Dick.)]TJ /F1 1 Tf 12 0 0 12 63 90.3543 Tm 0 Tc 0 Tw [(38)-1100(F)]TJ 10.44 0 0 10.44 94.2795 90.3543 Tm -0.0001 Tc (ALL)Tj 12 0 0 12 115.6277 90.3543 Tm 0 Tc (2000)Tj /F3 1 Tf 30.9897 0.0003 TD -0.0002 Tc 0.0255 Tw [(The P)47.6(erl J)35.7(our)-8(nal #19)]TJ ET 0 0 0 0.1 k /GS1 gs 62.14 458.5 530 -341 re 587.395 90.357 m f* 0 0 0 1 K 0 J 0 j 1 w 10 M []0 d 62.14 458.5 530 -341 re S BT /F8 1 Tf 24 0 0 24 282.633 325.7976 Tm 0 0 0 1 k /GS2 gs -0.0003 Tc 0 Tw [(SHP)11.7(INK)]TJ 0.1268 -1.2 TD -0.0002 Tc 0.0255 Tw (1/2 page)Tj 0.1088 -2.4 TD -0.0001 Tc [(P)12(ick U)29.7(p)]TJ /F9 1 Tf 14 0 0 14 89.7215 719.4205 Tm -0.0102 Tc 0.0278 Tw [(A similar subr)24.7(outine written in )]TJ -0.2688 -1.1429 TD [(P)75(erl was 186 times slo)34.7(w)19.8(e)0(r)99.6(.)-196(But if )]TJ 0.6586 -1.1429 TD [(y)24.9(ou think this is an argument )]TJ 1.1655 -1.1429 TD [(a)14.9(gainst P)74.7(erl,)-196(think a)14.7(gain.)]TJ ET 2 w 63 739 m 315 739 l S 0.667 w 63 736.33 m 315 736.33 l 63 663.68 m 315 663.68 l S 2 w 63 661.01 m 315 661.01 l S Q 0 0 0 0 k 1 i 37 874 191 -12 re 266.362 671.42 m f* BT /F2 1 Tf 8 0 0 8 39 864 Tm /Cs9 cs 1 scn -0.0004 Tc -0.0019 Tw (TPJ#19/9.26 9/27/00 10:35 AM Page 38)Tj ET 1 G 0 J 0 j 0.5 w 10 M []0 d 36 873 m 36 849 l 0 837 m 24 837 l 621 873 m 621 849 l 657 837 m 633 837 l 36 36 m 36 60 l 0 72 m 24 72 l 621 36 m 621 60 l 657 72 m 633 72 l S /Cs9 CS 1 SCN 0.25 w 36 873 m 36 849 l 0 837 m 24 837 l 621 873 m 621 849 l 657 837 m 633 837 l 36 36 m 36 60 l 0 72 m 24 72 l 621 36 m 621 60 l 657 72 m 633 72 l S 1 G 0.5 w 304.5 861 m 352.5 861 l 304.5 48 m 352.5 48 l 12 478.5 m 12 430.5 l 645 478.5 m 645 430.5 l 328.5 873 m 328.5 849 l 328.5 60 m 328.5 36 l 0 454.5 m 24 454.5 l 633 454.5 m 657 454.5 l 328.5 861 m 334.5 861 l 334.5 857.688 331.812 855 328.5 855 c 325.188 855 322.5 857.688 322.5 861 c 322.5 864.312 325.188 867 328.5 867 c 331.812 867 334.5 864.312 334.5 861 c 328.5 48 m 334.5 48 l 334.5 44.688 331.812 42 328.5 42 c 325.188 42 322.5 44.688 322.5 48 c 322.5 51.312 325.188 54 328.5 54 c 331.812 54 334.5 51.312 334.5 48 c 12 454.5 m 18 454.5 l 18 451.188 15.312 448.5 12 448.5 c 8.688 448.5 6 451.188 6 454.5 c 6 457.812 8.688 460.5 12 460.5 c 15.312 460.5 18 457.812 18 454.5 c 645 454.5 m 651 454.5 l 651 451.188 648.312 448.5 645 448.5 c 641.688 448.5 639 451.188 639 454.5 c 639 457.812 641.688 460.5 645 460.5 c 648.312 460.5 651 457.812 651 454.5 c S /Cs9 CS 1 SCN 0.25 w 304.5 861 m 352.5 861 l 304.5 48 m 352.5 48 l 12 478.5 m 12 430.5 l 645 478.5 m 645 430.5 l 328.5 873 m 328.5 849 l 328.5 60 m 328.5 36 l 0 454.5 m 24 454.5 l 633 454.5 m 657 454.5 l 328.5 861 m 334.5 861 l 334.5 857.688 331.812 855 328.5 855 c 325.188 855 322.5 857.688 322.5 861 c 322.5 864.312 325.188 867 328.5 867 c 331.812 867 334.5 864.312 334.5 861 c 328.5 48 m 334.5 48 l 334.5 44.688 331.812 42 328.5 42 c 325.188 42 322.5 44.688 322.5 48 c 322.5 51.312 325.188 54 328.5 54 c 331.812 54 334.5 51.312 334.5 48 c 12 454.5 m 18 454.5 l 18 451.188 15.312 448.5 12 448.5 c 8.688 448.5 6 451.188 6 454.5 c 6 457.812 8.688 460.5 12 460.5 c 15.312 460.5 18 457.812 18 454.5 c 645 454.5 m 651 454.5 l 651 451.188 648.312 448.5 645 448.5 c 641.688 448.5 639 451.188 639 454.5 c 639 457.812 641.688 460.5 645 460.5 c 648.312 460.5 651 457.812 651 454.5 c S endstream endobj 118 0 obj << /Type /Page /Parent 494 0 R /Resources 119 0 R /Contents 120 0 R /Thumb 397 0 R /MediaBox [ 0 0 684 873 ] /CropBox [ 0 0 684 873 ] /Rotate 0 >> endobj 119 0 obj << /ProcSet [ /PDF /Text ] /Font << /F1 515 0 R /F2 518 0 R >> /ExtGState << /GS1 523 0 R /GS2 521 0 R >> /ColorSpace << /Cs9 520 0 R >> >> endobj 120 0 obj << /Length 2674 >> stream 1 g /GS1 gs 0 873 m 0 873 l f q 1 i 27 846 603 -783 re 0 873 m W n 0 873 684 -873 re W n 0 0 0 0.1 k 63.5 809.5 530 -710 re 0 873 m f* 0 0 0 1 K 0 J 0 j 1 w 10 M []0 d 63.5 809.5 530 -710 re S BT /F1 1 Tf 24 0 0 24 302.0408 516.7146 Tm 0 0 0 1 k /GS2 gs -0.0001 Tc 0.025 Tw [(P)42.1(age 39)]TJ -1.5742 -1.2 TD 0 Tw [(BL)-12.1(A)12.1(C)0.3(K)-250.1(R)36(OCK)]TJ 1.5012 -2.4 TD 0.025 Tw [(P)12(ick U)29.7(p)]TJ ET Q 0 0 0 0 k /GS2 gs 1 i 37 874 191 -12 re 376.455 430.315 m f* BT /F2 1 Tf 8 0 0 8 39 864 Tm /Cs9 cs 1 scn -0.0004 Tc -0.0019 Tw (TPJ#19/9.26 9/27/00 10:35 AM Page 39)Tj ET 1 G 0 J 0 j 0.5 w 10 M []0 d 36 873 m 36 849 l 0 837 m 24 837 l 621 873 m 621 849 l 657 837 m 633 837 l 36 36 m 36 60 l 0 72 m 24 72 l 621 36 m 621 60 l 657 72 m 633 72 l S /Cs9 CS 1 SCN 0.25 w 36 873 m 36 849 l 0 837 m 24 837 l 621 873 m 621 849 l 657 837 m 633 837 l 36 36 m 36 60 l 0 72 m 24 72 l 621 36 m 621 60 l 657 72 m 633 72 l S 1 G 0.5 w 304.5 861 m 352.5 861 l 304.5 48 m 352.5 48 l 12 478.5 m 12 430.5 l 645 478.5 m 645 430.5 l 328.5 873 m 328.5 849 l 328.5 60 m 328.5 36 l 0 454.5 m 24 454.5 l 633 454.5 m 657 454.5 l 328.5 861 m 334.5 861 l 334.5 857.688 331.812 855 328.5 855 c 325.188 855 322.5 857.688 322.5 861 c 322.5 864.312 325.188 867 328.5 867 c 331.812 867 334.5 864.312 334.5 861 c 328.5 48 m 334.5 48 l 334.5 44.688 331.812 42 328.5 42 c 325.188 42 322.5 44.688 322.5 48 c 322.5 51.312 325.188 54 328.5 54 c 331.812 54 334.5 51.312 334.5 48 c 12 454.5 m 18 454.5 l 18 451.188 15.312 448.5 12 448.5 c 8.688 448.5 6 451.188 6 454.5 c 6 457.812 8.688 460.5 12 460.5 c 15.312 460.5 18 457.812 18 454.5 c 645 454.5 m 651 454.5 l 651 451.188 648.312 448.5 645 448.5 c 641.688 448.5 639 451.188 639 454.5 c 639 457.812 641.688 460.5 645 460.5 c 648.312 460.5 651 457.812 651 454.5 c S /Cs9 CS 1 SCN 0.25 w 304.5 861 m 352.5 861 l 304.5 48 m 352.5 48 l 12 478.5 m 12 430.5 l 645 478.5 m 645 430.5 l 328.5 873 m 328.5 849 l 328.5 60 m 328.5 36 l 0 454.5 m 24 454.5 l 633 454.5 m 657 454.5 l 328.5 861 m 334.5 861 l 334.5 857.688 331.812 855 328.5 855 c 325.188 855 322.5 857.688 322.5 861 c 322.5 864.312 325.188 867 328.5 867 c 331.812 867 334.5 864.312 334.5 861 c 328.5 48 m 334.5 48 l 334.5 44.688 331.812 42 328.5 42 c 325.188 42 322.5 44.688 322.5 48 c 322.5 51.312 325.188 54 328.5 54 c 331.812 54 334.5 51.312 334.5 48 c 12 454.5 m 18 454.5 l 18 451.188 15.312 448.5 12 448.5 c 8.688 448.5 6 451.188 6 454.5 c 6 457.812 8.688 460.5 12 460.5 c 15.312 460.5 18 457.812 18 454.5 c 645 454.5 m 651 454.5 l 651 451.188 648.312 448.5 645 448.5 c 641.688 448.5 639 451.188 639 454.5 c 639 457.812 641.688 460.5 645 460.5 c 648.312 460.5 651 457.812 651 454.5 c S endstream endobj 121 0 obj << /Type /Page /Parent 494 0 R /Resources 122 0 R /Contents 123 0 R /Thumb 399 0 R /MediaBox [ 0 0 684 873 ] /CropBox [ 0 0 684 873 ] /Rotate 0 >> endobj 122 0 obj << /ProcSet [ /PDF /Text ] /Font << /F1 515 0 R /F2 518 0 R /F3 261 0 R /F4 266 0 R /F5 262 0 R /F7 267 0 R /F8 268 0 R /F9 269 0 R >> /ExtGState << /GS1 523 0 R /GS2 521 0 R >> /ColorSpace << /Cs9 520 0 R /Cs10 264 0 R >> >> endobj 123 0 obj << /Length 12240 >> stream 1 g /GS1 gs 0 873 m 0 873 l f q 1 i 27 846 603 -783 re 0 873 m W n 0 873 684 -873 re W n BT /F1 1 Tf 29.09 0 0 29.09 62.364 636.0443 Tm 0 0 0 1 k /GS2 gs 0 Tc 0 Tw (I)Tj 11 0 0 11 72.125 648.0443 Tm -0.0001 Tc -0.0317 Tw [(f y)5.8(ou hav)5.8(e a r)9.7(eason to watch the world)11.9()79.9(s)0( financial mar)5.8(k)0(ets,)]TJ 0 -1.0909 TD 0.0199 Tc 0.469 Tw [(and y)5.8(ou kno)11.9(w a little P)53.9(erl, y)5.8(ou may find the)]TJ -0.8295 -1.0909 TD -0.0001 Tc -0.0259 Tw [(F)34(inance::Q)5.8(uote module handy)84.9(. I personally use it to r)9.7(e)0(mind)]TJ T* 0.1805 Tw [(myself that I should nev)5.8(er buy stocks, as I hav)5.8(e a good)]TJ T* 0.1031 Tw [(histor)-17.9(y)0( of losing money in the mar)5.8(ket. H)17.8(o)12(w)5.9(e)0(v)5.8(e)0.1(r)59.7(,)-0.1( y)5.8(ou can)]TJ T* 0.0755 Tw [(use F)33.9(inance::Q)5.8(uote to help track those tasty stock options)]TJ T* 0.1917 Tw [(y)5.8(o)0.1(u)49.7()49.8(v)5.9(e)0( been offer)9.7(ed, or ev)5.8(en to help y)5.8(ou build dynamic)]TJ T* 0.025 Tw [(ar)-7.9(twor)5.8(k driv)5.8(en b)5.8(y)0( fluctuations in the world mar)5.8(kets.)]TJ 7.15 0 0 7.15 287.1918 566.5162 Tm 0 Tc 0 Tw (1)Tj 11 0 0 11 63 542.0443 Tm -0.0001 Tc 0.3389 Tw [(F)34(inance::Q)5.8(uote is a P)53.9(erl module that makes accessing)]TJ T* 0.244 Tw [(financial information easy)84.9(. )14.7(Y)93.9(ou can look up stocks and)]TJ T* 0.0563 Tw [(shar)9.7(es, managed funds, curr)9.7(ency rates, and all for a v)5.8(ariety)]TJ T* 0.1365 Tw [(of countries and mar)5.8(kets. I)23.8(t)17.8()79.9(s)-0.1( ev)5.8(en easy to add y)5.8(our o)11.9(w)0(n)]TJ T* -0.0173 Tw [(specializ)5.8(ed sour)5.8(ces if y)5.8(ou find something not co)15.8(v)5.9(e)0.1(r)9.7(ed b)5.8(y)0( the)]TJ T* 0 Tw (module.)Tj /F4 1 Tf 12 0 0 12 63 456.0443 Tm 0 Tc (H)Tj 10.44 0 0 10.44 72.9109 456.0443 Tm 0.0227 Tc [(IST)35.6(OR)37.5(Y)]TJ /F1 1 Tf 11 0 0 11 63 430.0443 Tm -0.0001 Tc 0.2101 Tw [(F)34(inance::Q)5.8(uote star)-7.9(ted as the Q)5.8(uote module which was)]TJ T* 0.1526 Tw [(distributed as par)-7.9(t of G)17.8(nucash \(http://www)74.9(.gnucash.org\).)]TJ T* 0.36 Tw [(This module \(simply called Q)5.8(uote)29.7(\) was a modified)]TJ T* 0.1164 Tw [(v)5.9(ersion of F)33.9(inance::Y)67.8(ahooQ)5.8(uote written b)5.8(y)0( DJ P)41.9(adz)5.8(ensky)]TJ T* 0.0199 Tc 1.8748 Tw [(\(http://www)74.9(.padz.net/~djpadz/Y)67.8(ahooQ)5.8(uote/\). Linas)]TJ T* 0.0085 Tc 0.3664 Tw [(V)100(epstas and )14.8(Y)67.8(annick Le N)29.8(y)0( added extra sour)5.8(ces for)]TJ T* -0.0001 Tc 0.3342 Tw [(G)17.9(nuCash, at which point I asked if any)5.8(one had any)]TJ T* 0.0082 Tw [(objections to me br)9.7(eaking it off into a separate pr)5.8(oject with)]TJ T* 0.025 Tw [(a range of uses outside of G)17.8(nuCash.)]TJ 0 -2.1818 TD 0.0199 Tc 0.4115 Tw [(S)12.1(ince that time, many people hav)5.9(e contributed to)]TJ 0 -1.0909 TD 0.3832 Tw [(F)34(inance::Q)5.8(uote, including Xose M)12(anoel Ramos \(for)]TJ T* -0.0001 Tc -0.0207 Tw [(inheritable )14.9(Y)67.8(ahoo! methods\), B)11.9(r)9.9(ent N)29.7(eal, K)5.8(eith R)11.9(efson, and)]TJ T* 0.219 Tw [(V)100(olker S)23.9(tuer)-5.9(zl for writing pluggable modules, and P)53.9(eter)]TJ T* 0.2956 Tw [(Thatcher)59.7(, J)29.7(acinta Richar)13.8(dson, and S)23.9(tev)5.8(en M)35.9(u)0.1(r)13.8(doch for)]TJ T* 0.2392 Tw [(v)5.9(arious bug)-5.9(fix)11.9(es and impr)5.8(o)15.9(v)5.9(ements. B)5.8(e)-0.1(n H)17.8(emming was)]TJ T* 0.1036 Tw [(kind enough to sav)5.8(e the world fr)5.8(om my poor w)5.8(eb design)]TJ T* 0.025 Tw [(skills and supply a w)5.8(eb page look and feel.)]TJ /F4 1 Tf 12 0 0 12 63 200.0443 Tm 0 Tc 0 Tw (L)Tj 10.44 0 0 10.44 70.2595 200.0443 Tm 0.0228 Tc [(EGALIT)-18(Y)]TJ /F1 1 Tf 11 0 0 11 63 174.0443 Tm -0.0001 Tc -0.0282 Tw [(When discussing F)33.9(inance::Q)5.8(uote, one question which often)]TJ T* 0.175 Tw [(arises is H)17.8(o)12(w)0( legal is all this? F)33.9(inance::Q)5.8(uote obtains)]TJ T* 0.0199 Tc 0.5138 Tw [(quotes fr)5.8(om v)5.8(arious organizations who make this)]TJ T* -0.0001 Tc -0.0145 Tw [(information av)5.8(ailable via the w)5.8(e)-0.1(b)15.8(.)0( F)35.8(etching the data is legal;)]TJ 25.3636 54.6394 TD 0.0443 Tw [(w)5.8(e)-0.1(b br)5.8(o)12(wsers do it all the time, and F)33.9(inance::Q)5.8(uote is just)]TJ 0 -1.0909 TD -0.0074 Tw [(a rather specializ)5.8(ed w)5.8(e)-0.1(b br)5.8(o)12(wser)59.7(. \(Although ther)9.7(e hav)5.8(e been)]TJ T* 0.0018 Tw [(a couple of cour)-7.9(t cases wher)9.7(e )49.7(deep linking)17.8( into w)5.8(eb pages)]TJ T* 0.0025 Tw [(has been cast into legal shado)11.9(w)74.9(.)-0.1(\) )44.8(The main pr)5.8(oblems occur)]TJ T* 0.025 Tw (with the use of that data.)Tj 0 -2.1818 TD 0.2241 Tw [(Each organization has a differ)9.7(ent set of r)9.7(estrictions and)]TJ 0 -1.0909 TD 0.1485 Tw [(conditions per)-7.9(taining to the data y)5.8(ou obtain fr)5.8(om them.)]TJ T* 0.0545 Tw [(The most common r)9.7(estriction is forbidding r)9.7(edistribution,)]TJ T* -0.0122 Tw [(although some of them ar)9.7(e so odd as to limit the number of)]TJ 0 -8.7273 TD 0.254 Tw [(copies y)5.8(ou can hav)5.8(e in memor)-17.9(y at any one time! )44.8(The)]TJ 0 -1.0909 TD 0.0951 Tw [(F)34(inance::Q)5.8(uote manual pages pr)5.8(o)15.9(vide some pointers as to)]TJ T* 0.0484 Tw [(wher)9.7(e these licenses can be found, and it would be wise to)]TJ T* 0.025 Tw (check those licenses to stay in safe legal waters.)Tj 0 -2.1818 TD 0.3175 Tw [(I)12(n)0( general, obtaining information and displaying it or)]TJ 0 -1.0909 TD 0.0243 Tw [(pr)5.8(ocessing it into some useful form for personal use should)]TJ T* 0.2811 Tw [(be okay)84.9(. After all, that)17.8()79.9(s)0( what y)5.8(our w)5.8(e)-0.1(b br)5.8(o)12(wser does.)]TJ T* 0.0431 Tw [(O)5.8(btaining the information and r)9.7(e-branding it as y)5.8(our o)11.9(w)0(n)]TJ T* 0.025 Tw [(is pr)5.8(obably a no-no)15.8(. I)5.8(f)0( in doubt, check with a lawy)5.8(er)59.7(.)]TJ /F4 1 Tf 12 0 0 12 342 401.0776 Tm 0 Tc 0 Tw (T)Tj 10.44 0 0 10.44 349.9773 401.0775 Tm 0.0228 Tc [(ERMINOL)29.6(OGY)]TJ /F1 1 Tf 11 0 0 11 342 375.0776 Tm -0.0001 Tc 0.0196 Tw [(B)5.8(efor)9.7(e w)5.8(e)0( begin, it)17.7()79.9(s)0( wor)-7.9(th taking the time to explain a fe)-5.9(w)]TJ T* 0.0571 Tw [(pieces of terminology that might confuse. F)35.8(or simplicity)84.9(, a)]TJ T* 0.1096 Tw [(stock, mutual fund, index, or other par)5.8(cel of information)]TJ T* 0.0249 Tw [(which can be fetched using F)33.9(inance::Q)5.8(uote w)5.8(e)0( will r)9.7(efer to)]TJ T* [(as a )49.7(stock)39.7(.)]TJ 0 -2.1818 TD 0.0226 Tw [(All stocks hav)5.8(e a unique )]TJ /F5 1 Tf 9.6433 0 TD -0.0002 Tc 0 Tw (symbol)Tj /F1 1 Tf 2.4741 0 TD -0.0001 Tc 0.0227 Tw [(, an identifier which w)5.8(e)0( can)]TJ -12.1174 -1.0909 TD 0.0894 Tw (use to look them up; and an )Tj /F5 1 Tf 11.7394 0 TD 0 Tw [(ex)5.8(change)]TJ /F1 1 Tf 3.2454 0 TD 0.0894 Tw (, a locality in which)Tj -14.9847 -1.0909 TD 0 Tc 0.0045 Tw [(they exist. F)35.9(or example, )14.8(V)75.2(A)0.1( Linux has the symbol LNUX)]TJ T* -0.0001 Tc 0.0006 Tw [(on the NASDA)11.9(Q stock ex)11.9(change. S)11.9(ymbols ar)9.7(e traditionally)]TJ T* 0.1486 Tw [(all upper-case, but ther)9.7(e exist some symbols \(such as the)]TJ T* 0.0199 Tc 0.5474 Tw [(pseudo-symbols used in the )44.9(TIAA-CREF module,)]TJ T* -0.0001 Tc 0.025 Tw [(F)34(inance::Q)5.8(uote::T)39.7(iaacr)9.7(ef)-109.9(\) that ar)9.7(e mix)11.9(ed case.)]TJ 0 -2.1818 TD 0.0182 Tw [(F)34(inance::Q)5.8(uote essentially pr)5.8(o)15.9(vides a way of taking a list of)]TJ 0 -1.0909 TD 0.1472 Tw [(symbols for a giv)5.8(en ex)11.9(change, and r)9.7(eturning information)]TJ T* 0.0489 Tw [(about those symbols. Each bit of information has a label)11.9()]TJ T* 0.1208 Tw [(\(such as v)5.8(olume, close, high, lo)11.9(w)74.9(,)0( and so on\), identifying)]TJ T* 0.0305 Tw [(what that information is. All making sense? G)5.8(ood. Let)17.8()79.9(s)0( do)]TJ T* 0.025 Tw (something fun then.)Tj 12 0 0 12 63 90.3543 Tm 0 Tc 0 Tw [(40)-1100(F)]TJ 10.44 0 0 10.44 94.2795 90.3543 Tm -0.0001 Tc (ALL)Tj 12 0 0 12 115.6277 90.3543 Tm 0 Tc (2000)Tj /F3 1 Tf 30.9897 0.0003 TD -0.0002 Tc 0.0255 Tw [(The P)47.6(erl J)35.7(our)-8(nal #19)]TJ ET 0 0 0 0 k 63 798 531 -21.17 re 587.395 90.357 m f* BT /F8 1 Tf 16 0 0 16 63 786.4766 Tm 0 0 0 1 k 0 Tc 0 Tw (F)Tj 13.92 0 0 13.92 71.5273 786.4766 Tm -0.0002 Tc (INANCE)Tj 16 0 0 16 124.6174 786.4766 Tm -0.0001 Tc (::Q)Tj 13.92 0 0 13.92 144.946 786.4766 Tm -0.0002 Tc [(UO)41.8(TE)]TJ /F7 1 Tf 16 0 0 16 502.62 786.4766 Tm 0.0193 Tw [(P)35(aul F)14.7(enwick)]TJ ET /Cs10 CS 1 SCN 0 J 0 j 6 w 10 M []0 d 63 807 m 207 807 l S 0 0.03 0.3 0 k /GS1 gs 63.25 746.75 251.5 -71.5 re 593.996 786.477 m f* BT /F9 1 Tf 12 0 0 12 158.9722 733.1238 Tm 0 0 0 1 k /GS2 gs 0 Tw [(Resour)24.7(ces:)]TJ /F1 1 Tf 9 0 0 9 72.5 719.1238 Tm 0 Tc [(F)34.1(inance::Q)5.9(uote)-169.6(....................................................................CP)39.8(A)0.2(N)]TJ 0 -1.3333 TD [(F)34.1(inance::Y)67.9(ahooQ)5.9(uote)-23.1(...........................................................CP)39.8(A)0.2(N)]TJ T* [(G)18(nucash)-40.9(....................................................http://www)75(.gnucash.org)]TJ T* [(L)109.9(WP::U)29.8(serAgent)-154.4(..................................................................CP)39.8(A)0.2(N)]TJ ET 0 0 0 1 K 0.5 w /GS1 gs 63.25 746.75 251.5 -71.5 re 304.52 683.124 m S BT /F9 1 Tf 14 0 0 14 356.9965 599.0333 Tm /GS2 gs -0.0102 Tc 0.0278 Tw [(Y)139.9(ou can look up stocks and shar)19.6(es,)]TJ -0.7971 -1.1429 TD [(mana)14.7(g)14.7(ed funds,)-196(cur)9.6(r)19.6(ency rates,)-196(and all)]TJ -0.0812 -1.1429 TD [(f)9.8(or a variety of countries and mark)29.6(ets.)]TJ ET 2 w 342 618.61 m 594 618.61 l S 0.667 w 342 615.95 m 594 615.95 l 342 556.88 m 594 556.88 l S 2 w 342 554.22 m 594 554.22 l S BT /F1 1 Tf 6 0 0 6 63 118.6307 Tm 0 Tc 0 Tw (1 )Tj 8 0 0 8 67.65 116.6507 Tm -0.0001 Tc 0.025 Tw [(Y)89.8(es, this actually exists and uses F)33.8(inance::Q)5.8(uote under the hood: http://www)74.9(.terr)9.7(estrialmap)15.8(.org/S)23.8(tockP)29.7(uppets.htm.)]TJ ET 0.5 w 63 125.5 m 594 125.5 l S Q 0 0 0 0 k 1 i 37 874 191 -12 re 423.528 116.651 m f* BT /F2 1 Tf 8 0 0 8 39 864 Tm /Cs9 cs 1 scn -0.0004 Tc -0.0019 Tw (TPJ#19/9.26 9/27/00 10:35 AM Page 40)Tj ET 1 G 0 J 0 j 0.5 w 10 M []0 d 36 873 m 36 849 l 0 837 m 24 837 l 621 873 m 621 849 l 657 837 m 633 837 l 36 36 m 36 60 l 0 72 m 24 72 l 621 36 m 621 60 l 657 72 m 633 72 l S /Cs9 CS 1 SCN 0.25 w 36 873 m 36 849 l 0 837 m 24 837 l 621 873 m 621 849 l 657 837 m 633 837 l 36 36 m 36 60 l 0 72 m 24 72 l 621 36 m 621 60 l 657 72 m 633 72 l S 1 G 0.5 w 304.5 861 m 352.5 861 l 304.5 48 m 352.5 48 l 12 478.5 m 12 430.5 l 645 478.5 m 645 430.5 l 328.5 873 m 328.5 849 l 328.5 60 m 328.5 36 l 0 454.5 m 24 454.5 l 633 454.5 m 657 454.5 l 328.5 861 m 334.5 861 l 334.5 857.688 331.812 855 328.5 855 c 325.188 855 322.5 857.688 322.5 861 c 322.5 864.312 325.188 867 328.5 867 c 331.812 867 334.5 864.312 334.5 861 c 328.5 48 m 334.5 48 l 334.5 44.688 331.812 42 328.5 42 c 325.188 42 322.5 44.688 322.5 48 c 322.5 51.312 325.188 54 328.5 54 c 331.812 54 334.5 51.312 334.5 48 c 12 454.5 m 18 454.5 l 18 451.188 15.312 448.5 12 448.5 c 8.688 448.5 6 451.188 6 454.5 c 6 457.812 8.688 460.5 12 460.5 c 15.312 460.5 18 457.812 18 454.5 c 645 454.5 m 651 454.5 l 651 451.188 648.312 448.5 645 448.5 c 641.688 448.5 639 451.188 639 454.5 c 639 457.812 641.688 460.5 645 460.5 c 648.312 460.5 651 457.812 651 454.5 c S /Cs9 CS 1 SCN 0.25 w 304.5 861 m 352.5 861 l 304.5 48 m 352.5 48 l 12 478.5 m 12 430.5 l 645 478.5 m 645 430.5 l 328.5 873 m 328.5 849 l 328.5 60 m 328.5 36 l 0 454.5 m 24 454.5 l 633 454.5 m 657 454.5 l 328.5 861 m 334.5 861 l 334.5 857.688 331.812 855 328.5 855 c 325.188 855 322.5 857.688 322.5 861 c 322.5 864.312 325.188 867 328.5 867 c 331.812 867 334.5 864.312 334.5 861 c 328.5 48 m 334.5 48 l 334.5 44.688 331.812 42 328.5 42 c 325.188 42 322.5 44.688 322.5 48 c 322.5 51.312 325.188 54 328.5 54 c 331.812 54 334.5 51.312 334.5 48 c 12 454.5 m 18 454.5 l 18 451.188 15.312 448.5 12 448.5 c 8.688 448.5 6 451.188 6 454.5 c 6 457.812 8.688 460.5 12 460.5 c 15.312 460.5 18 457.812 18 454.5 c 645 454.5 m 651 454.5 l 651 451.188 648.312 448.5 645 448.5 c 641.688 448.5 639 451.188 639 454.5 c 639 457.812 641.688 460.5 645 460.5 c 648.312 460.5 651 457.812 651 454.5 c S endstream endobj 124 0 obj << /Type /Page /Parent 495 0 R /Resources 125 0 R /Contents 126 0 R /Thumb 401 0 R /MediaBox [ 0 0 684 873 ] /CropBox [ 0 0 684 873 ] /Rotate 0 >> endobj 125 0 obj << /ProcSet [ /PDF /Text ] /Font << /F1 515 0 R /F2 518 0 R /F3 261 0 R /F4 266 0 R /F8 268 0 R >> /ExtGState << /GS1 523 0 R /GS2 521 0 R >> /ColorSpace << /Cs9 520 0 R >> >> endobj 126 0 obj << /Length 8192 >> stream 1 g /GS1 gs 0 873 m 0 873 l f q 1 i 27 846 603 -783 re 0 873 m W n 0 873 684 -873 re W n BT /F4 1 Tf 12 0 0 12 63 801.3574 Tm 0 0 0 1 k /GS2 gs 0 Tc 0 Tw (U)Tj 10.44 0 0 10.44 71.8799 801.3574 Tm -0.0002 Tc (SING)Tj 12 0 0 12 99.9303 801.3574 Tm 0 Tc (F)Tj 10.44 0 0 10.44 106.5046 801.3574 Tm -0.0002 Tc (INANCE)Tj 12 0 0 12 145.8837 801.3574 Tm -0.0003 Tc (::Q)Tj 10.44 0 0 10.44 161.3224 801.3574 Tm [(UO)29.3(TE)]TJ 12 0 0 12 189.8819 801.3574 Tm -0.0005 Tc -0.0094 Tw (: T)Tj 10.44 0 0 10.44 203.7346 801.3574 Tm -0.0004 Tc 0 Tw (HE)Tj 12 0 0 12 221.7657 801.3574 Tm 0 Tc (B)Tj 10.44 0 0 10.44 229.3829 801.3574 Tm -0.0002 Tc (ASICS)Tj /F1 1 Tf 11 0 0 11 63 780.3574 Tm -0.0201 Tc -0.0143 Tw [(I)11.9(ll demonstrate the usage of F)33.8(inance::Q)5.8(uote b)5.8(y)0( way of a useful)]TJ 0 -1.0909 TD 0.0568 Tw [(example, which will be expanded upon as w)5.7(e)0( go)15.8(. F)35.8(o)0.1(r star)-7.9(ters,)]TJ T* 0.116 Tw [(let)17.7()79.9(s)-0.1( just say y)5.8(o)0.1(u)49.7()69.9(r)9.9(e)0( inter)9.7(ested in stocks fr)5.7(om a single mar)5.7(ket,)]TJ T* 0.025 Tw [(and wish to print their curr)9.6(ent v)5.8(alue and v)5.8(olume traded.)]TJ /F2 1 Tf 7 0 0 7 63 726.3574 Tm -0.1002 Tc 0.06 Tw (#!/usr/bin/perl -w)Tj 0 -1.1429 TD (use strict;)Tj T* (use Finance::Quote;)Tj 0 -3.4286 TD [(my $exchange = shift;)-4751.9(# Where we fetch our stocks from.)]TJ 0 -1.1429 TD [(my @symbols = @ARGV;)-5263.8(# Which stocks we want.)]TJ 0 -2.2857 TD [(my $quoter = Finance::Quote->new;)-3269.3(#)0( Create the F::Q object.)]TJ T* [($quoter->timeout\(30\);)-9410.6(# Cancel fetch operation if it)]TJ 19.9073 -1.1429 TD (# takes longer than 30 seconds.)Tj -19.9073 -2.2857 TD [(# Grab our information and place it into %info.)]TJ 0 -1.1429 TD [(my %info = $quoter->fetch\($exchange, @symbols\);)]TJ 0 -2.2857 TD (foreach my $stock \(@symbols\) {)Tj 2.5714 -1.1429 TD [(unless \($info{$stock, "success"}\) {)]TJ 2.5714 -1.1429 TD [(warn "Lookup of $stock failed - ".$info{$stock, "errormsg"}.)]TJ 2.7992 -1.1428 TD 0 Tw ("\\n";)Tj -2.7992 -1.1429 TD (next;)Tj -2.5714 -1.1429 TD 0 Tc (})Tj T* -0.1002 Tc 0.06 Tw (print "$stock:\\t\\t",)Tj 3.3591 -1.1429 TD [("Volume: ", $info{$stock, "volume"}, "\\t",)]TJ T* [("Price: " , $info{$stock, "price"}, "\\n";)]TJ -5.9305 -1.1429 TD 0 Tc 0 Tw (})Tj /F1 1 Tf 11 0 0 11 63 504.3574 Tm -0.0051 Tc -0.0279 Tw [(I)5.9(f)0( our script was called )]TJ /F2 1 Tf 9 0 0 9 158.1603 504.3574 Tm 0 Tw (showstocks)Tj /F1 1 Tf 11 0 0 11 211.6973 504.3574 Tm -0.0279 Tw [(, and y)5.8(ou w)5.8(e)0.1(r)9.7(e)0( inter)9.7(ested)]TJ -13.5179 -1.0909 TD 0.025 Tw [(in A)17.8(ustralian supermar)5.7(kets, y)5.8(ou could call it like this:)]TJ /F2 1 Tf 7 0 0 7 72.2378 477.3574 Tm -0.0002 Tc 0.06 Tw (showstocks australia CML WOW)Tj /F1 1 Tf 11 0 0 11 342 802.0776 Tm -0.0001 Tc 0.0296 Tw [(This pr)5.8(o)15.9(vides y)5.8(ou with information about Coles-M)29.8(y)5.8(er and)]TJ T* -0.0002 Tc 0 Tw [(W)77.7(oolwor)-8(ths.)]TJ 0 -2.2727 TD -0.0001 Tc 0.0911 Tw [(Alternativ)5.8(ely)84.9(, if y)5.8(ou w)5.8(e)0.1(r)9.7(e)0( inter)9.7(ested some U.S. technology)]TJ 0 -1.0909 TD 0.025 Tw [(stocks, y)5.8(ou could tr)-17.9(y this:)]TJ /F2 1 Tf 7 0 0 7 351.2378 732.0776 Tm 0.0599 Tw [(showstocks usa LNUX RHAT MSFT IBM)]TJ /F1 1 Tf 11 0 0 11 353.9444 708.0776 Tm 0.1056 Tw [(which pr)5.8(o)15.9(vides y)5.8(ou with information about )14.8(V)75.1(A)0( Linux,)]TJ -1.0859 -1.0909 TD 0.025 Tw [(R)12.1(ed H)5.8(at, M)11.9(icr)5.8(osoft, and I)11.9(nternational B)11.9(u)0(siness M)11.9(achines.)]TJ 0 -2.2727 TD 0.0066 Tc 0.3683 Tw (This script demonstrates a number of capabilities of)Tj 0 -1.0909 TD -0.0001 Tc 0.025 Tw [(F)34(inance::Q)5.8(uote. I)11.9(n)0.1( par)-7.9(ticular:)]TJ 0 -2.2727 TD 0.0521 Tw [()-471.1(F)34(inance::Q)5.8(uote is object-oriented, and a F)33.9(inance::Q)5.8(uote)]TJ 0.859 -1.0909 TD -0.019 Tw (object can be generated using )Tj /F2 1 Tf 9 0 0 9 477.8776 622.0776 Tm -0.0002 Tc 0 Tw (Finance::Quote->new\(\))Tj /F1 1 Tf 11 0 0 11 591.25 622.0776 Tm 0 Tc (.)Tj -22.6591 -2.2727 TD 0.0199 Tc 0.3208 Tw ( The )Tj /F2 1 Tf 9 0 0 9 377.9165 597.0776 Tm 0 Tw (fetch\(\))Tj /F1 1 Tf 11 0 0 11 423.9595 597.0776 Tm 0.3657 Tw [(method can be used for r)9.7(etrieving)]TJ -6.5919 -1.0909 TD -0.0001 Tc 0.1043 Tw [(information. )44.8(This method is v)5.8(e)0.1(r)-17.9(y)0( po)11.9(w)5.8(e)0.1(r)-7.9(ful, and will be)]TJ T* 0.025 Tw [(explained in depth later in this ar)-7.9(ticle.)]TJ -0.859 -2.2727 TD 0.1261 Tw ( The )Tj /F2 1 Tf 9 0 0 9 372.3123 548.0776 Tm -0.0002 Tc 0 Tw (fetch\(\))Tj /F1 1 Tf 11 0 0 11 414.7333 548.0776 Tm -0.0001 Tc 0.1709 Tw [(method r)9.7(eturns a two-dimensional hash.)]TJ -5.7531 -1.0909 TD 0.025 Tw (This is the topic of our next section.)Tj /F4 1 Tf 12 0 0 12 342 509.0776 Tm 0 Tc 0 Tw (T)Tj 10.44 0 0 10.44 349.9773 509.0776 Tm 0.0226 Tc (HE)Tj 12 0 0 12 368.7282 509.0776 Tm 0 Tc (R)Tj 10.44 0 0 10.44 376.934 509.0776 Tm 0.0228 Tc (ETURN)Tj 12 0 0 12 417.1853 509.0776 Tm 0 Tc (H)Tj 10.44 0 0 10.44 427.0962 509.0776 Tm 0.0227 Tc (ASH)Tj /F1 1 Tf 11 0 0 11 342 487.0776 Tm -0.0001 Tc 0.0703 Tw [(F)34(inance::Q)5.8(uote)29.7()79.9(s)0( most useful function, )]TJ /F2 1 Tf 9 0 0 9 512.0886 487.0776 Tm -0.0002 Tc 0 Tw (fetch\(\))Tj /F1 1 Tf 11 0 0 11 549.8794 487.0776 Tm -0.0001 Tc 0.0703 Tw [(, r)9.7(eturns a)]TJ -18.8981 -1.0909 TD 0.0199 Tc 0.5501 Tw [(two-dimensional hash. )44.8(This contains a v)5.8(ariety of)]TJ 12 0 0 12 517.3723 90.3543 Tm 0 Tc 0 Tw (F)Tj 10.44 0 0 10.44 523.4518 90.3543 Tm -0.0001 Tc (ALL)Tj 12 0 0 12 544.7999 90.3543 Tm 0 Tc 0.025 Tw [(2000 41)]TJ /F3 1 Tf -40.15 0 TD -0.0002 Tc 0.0255 Tw [(The P)47.6(erl J)35.7(our)-8(nal #19)]TJ ET 0 0 0 0.1 k /GS1 gs 63.5 458.5 530 -341 re 162.892 90.354 m f* 0 0 0 1 K 0 J 0 j 1 w 10 M []0 d 63.5 458.5 530 -341 re S BT /F8 1 Tf 24 0 0 24 252.3164 325.7976 Tm 0 0 0 1 k /GS2 gs 0 Tw (IVENUE.COM)Tj 1.4466 -1.2 TD 0.0255 Tw (1/2 page)Tj 0.57 -2.4 TD -0.0004 Tc 0 Tw [(NE)11.6(W)]TJ ET Q 0 0 0 0 k /GS2 gs 1 i 37 874 191 -12 re 356.29 239.398 m f* BT /F2 1 Tf 8 0 0 8 39 864 Tm /Cs9 cs 1 scn -0.0004 Tc -0.0019 Tw (TPJ#19/9.26 9/27/00 10:35 AM Page 41)Tj ET 1 G 0 J 0 j 0.5 w 10 M []0 d 36 873 m 36 849 l 0 837 m 24 837 l 621 873 m 621 849 l 657 837 m 633 837 l 36 36 m 36 60 l 0 72 m 24 72 l 621 36 m 621 60 l 657 72 m 633 72 l S /Cs9 CS 1 SCN 0.25 w 36 873 m 36 849 l 0 837 m 24 837 l 621 873 m 621 849 l 657 837 m 633 837 l 36 36 m 36 60 l 0 72 m 24 72 l 621 36 m 621 60 l 657 72 m 633 72 l S 1 G 0.5 w 304.5 861 m 352.5 861 l 304.5 48 m 352.5 48 l 12 478.5 m 12 430.5 l 645 478.5 m 645 430.5 l 328.5 873 m 328.5 849 l 328.5 60 m 328.5 36 l 0 454.5 m 24 454.5 l 633 454.5 m 657 454.5 l 328.5 861 m 334.5 861 l 334.5 857.688 331.812 855 328.5 855 c 325.188 855 322.5 857.688 322.5 861 c 322.5 864.312 325.188 867 328.5 867 c 331.812 867 334.5 864.312 334.5 861 c 328.5 48 m 334.5 48 l 334.5 44.688 331.812 42 328.5 42 c 325.188 42 322.5 44.688 322.5 48 c 322.5 51.312 325.188 54 328.5 54 c 331.812 54 334.5 51.312 334.5 48 c 12 454.5 m 18 454.5 l 18 451.188 15.312 448.5 12 448.5 c 8.688 448.5 6 451.188 6 454.5 c 6 457.812 8.688 460.5 12 460.5 c 15.312 460.5 18 457.812 18 454.5 c 645 454.5 m 651 454.5 l 651 451.188 648.312 448.5 645 448.5 c 641.688 448.5 639 451.188 639 454.5 c 639 457.812 641.688 460.5 645 460.5 c 648.312 460.5 651 457.812 651 454.5 c S /Cs9 CS 1 SCN 0.25 w 304.5 861 m 352.5 861 l 304.5 48 m 352.5 48 l 12 478.5 m 12 430.5 l 645 478.5 m 645 430.5 l 328.5 873 m 328.5 849 l 328.5 60 m 328.5 36 l 0 454.5 m 24 454.5 l 633 454.5 m 657 454.5 l 328.5 861 m 334.5 861 l 334.5 857.688 331.812 855 328.5 855 c 325.188 855 322.5 857.688 322.5 861 c 322.5 864.312 325.188 867 328.5 867 c 331.812 867 334.5 864.312 334.5 861 c 328.5 48 m 334.5 48 l 334.5 44.688 331.812 42 328.5 42 c 325.188 42 322.5 44.688 322.5 48 c 322.5 51.312 325.188 54 328.5 54 c 331.812 54 334.5 51.312 334.5 48 c 12 454.5 m 18 454.5 l 18 451.188 15.312 448.5 12 448.5 c 8.688 448.5 6 451.188 6 454.5 c 6 457.812 8.688 460.5 12 460.5 c 15.312 460.5 18 457.812 18 454.5 c 645 454.5 m 651 454.5 l 651 451.188 648.312 448.5 645 448.5 c 641.688 448.5 639 451.188 639 454.5 c 639 457.812 641.688 460.5 645 460.5 c 648.312 460.5 651 457.812 651 454.5 c S endstream endobj 127 0 obj << /Type /Page /Parent 495 0 R /Resources 128 0 R /Contents 129 0 R /Thumb 403 0 R /MediaBox [ 0 0 684 873 ] /CropBox [ 0 0 684 873 ] /Rotate 0 >> endobj 128 0 obj << /ProcSet [ /PDF /Text ] /Font << /F1 515 0 R /F2 518 0 R /F3 261 0 R /F4 266 0 R /F8 268 0 R >> /ExtGState << /GS1 523 0 R /GS2 521 0 R >> /ColorSpace << /Cs9 520 0 R >> >> endobj 129 0 obj << /Length 15320 >> stream 1 g /GS1 gs 0 873 m 0 873 l f q 1 i 27 846 603 -783 re 0 873 m W n 0 873 684 -873 re W n BT /F1 1 Tf 11 0 0 11 63 802.0776 Tm 0 0 0 1 k /GS2 gs -0.0001 Tc 0.3323 Tw [(information about the stocks y)5.8(ou r)9.7(equested, including)]TJ 0 -1.0909 TD 0.2386 Tw [(v)5.9(olume, price, highs and lo)11.9(ws, per)5.8(centage changes, and)]TJ T* 0.025 Tw [(other information. Each key in the hash has two par)-7.9(ts:)]TJ /F2 1 Tf 7 0 0 7 72.2378 758.0776 Tm -0.0002 Tc 0 Tw ($info{$symbol,$label})Tj 9 0 0 9 63 734.0776 Tm ($symbol)Tj /F1 1 Tf 11 0 0 11 107.6654 734.0776 Tm -0.0001 Tc 0.375 Tw [(is the symbol that y)5.8(o)0.1(u)49.7()49.8(v)5.9(e)0( r)9.7(equested. I)11.9(n)0( the)]TJ -4.0605 -1.0909 TD 0.1083 Tw [(examples abo)15.8(v)5.9(e, )]TJ /F2 1 Tf 9 0 0 9 136.1889 722.0776 Tm -0.0002 Tc 0 Tw (RHAT)Tj /F1 1 Tf 11 0 0 11 161.7245 722.0776 Tm (and )Tj /F2 1 Tf 9 0 0 9 181.4778 722.0776 Tm (LNUX)Tj /F1 1 Tf 11 0 0 11 207.0134 722.0776 Tm -0.0001 Tc 0.1083 Tw [(ar)9.7(e examples of symbols.)]TJ -13.0921 -1.0909 TD 0.0142 Tw [(The label r)9.7(efers to a specific type of information about that)]TJ T* 0.047 Tw (stock, such as )Tj /F2 1 Tf 9 0 0 9 124.7632 698.0776 Tm -0.0002 Tc 0 Tw (volume)Tj /F1 1 Tf 11 0 0 11 157.1553 698.0776 Tm 0 Tc (, )Tj /F2 1 Tf 9 0 0 9 163.1713 698.0776 Tm -0.0002 Tc (price)Tj /F1 1 Tf 11 0 0 11 190.1647 698.0776 Tm 0 Tc (, )Tj /F2 1 Tf 9 0 0 9 196.1806 698.0776 Tm -0.0002 Tc (close)Tj /F1 1 Tf 11 0 0 11 223.174 698.0776 Tm 0 Tc (, )Tj /F2 1 Tf 9 0 0 9 229.19 698.0776 Tm -0.0002 Tc (p_change)Tj /F1 1 Tf 11 0 0 11 272.3795 698.0776 Tm -0.0001 Tc 0.0469 Tw (, or )Tj /F2 1 Tf 9 0 0 9 290.6553 698.0776 Tm -0.0002 Tc 0 Tw (name)Tj /F1 1 Tf 11 0 0 11 312.25 698.0776 Tm 0 Tc (.)Tj -22.6591 -1.0909 TD -0.0001 Tc 0.025 Tw [(Labels ar)9.7(e always lo)11.9(w)5.8(e)0.1(r)5.8(case.)]TJ 0 -2.1818 TD -0.0101 Tc 0.0632 Tw [(Ther)9.7(e exist some v)5.8(e)0.1(r)-17.9(y)0( special labels y)5.8(ou should be awar)9.7(e of)15.8(.)]TJ 0 -1.0909 TD 0.2013 Tw (The label )Tj /F2 1 Tf 9 0 0 9 108.8351 650.0776 Tm -0.0102 Tc 0 Tw (success)Tj /F1 1 Tf 11 0 0 11 150.8502 650.0776 Tm -0.0101 Tc 0.2013 Tw (is used to indicate if the information)Tj -7.9864 -1.0909 TD -0.0278 Tw [(could be successfully r)9.8(etriev)5.8(ed. I)5.8(f)0( the v)5.8(alue of the success label)]TJ T* -0.0005 Tw [(for a giv)5.8(en stock is false, then no useful information could be)]TJ T* 0.0505 Tw [(gained about that symbol at this time. I)5.9(f)0( a failur)9.7(e)0( did occur)59.8(,)]TJ T* 0.025 Tw [(the r)9.7(eason for that failur)9.8(e will be in the label )]TJ /F2 1 Tf 9 0 0 9 251.1015 602.0776 Tm -0.0102 Tc 0 Tw (errormsg)Tj /F1 1 Tf 11 0 0 11 293.5713 602.0776 Tm 0 Tc (.)Tj -20.961 -2.1818 TD -0.0001 Tc 0.0405 Tw (The special label )Tj /F2 1 Tf 9 0 0 9 137.459 578.0776 Tm -0.0002 Tc 0 Tw (price)Tj /F1 1 Tf 11 0 0 11 167.648 578.0776 Tm -0.0001 Tc 0.0405 Tw [(is used to indicate the v)5.8(alue of the)]TJ -9.5135 -1.0909 TD 0.015 Tc 0.3599 Tw [(giv)5.8(en stock. )44.8(This v)5.8(aries a little depending on what)]TJ T* -0.0001 Tc 0.064 Tw [(information y)5.8(o)0.1(u)49.7()69.9(r)9.9(e)0( fetching. F)35.8(or stocks, it)17.7()79.9(s)0( usually the last)]TJ T* 0.0125 Tw [(price the stock was traded at. F)35.8(or some inv)5.8(estments, it)17.7()79.9(s)-0.1( the)]TJ T* 0.0872 Tw [(curr)9.7(ent yield \(a per)5.8(centage per-annum\). F)35.8(o)0.1(r curr)9.7(encies it)17.8()79.9(s)]TJ 25.3636 24.7273 TD 0.0515 Tw [(the ex)11.9(change rate, and for index)11.9(es it)17.7()79.9(s)0( the last v)5.8(alue of that)]TJ 0 -1.0909 TD 0.025 Tw (index \(in points\).)Tj 0 -2.1818 TD 0.054 Tw [(The r)9.7(eason the price label is impor)-7.9(tant is that it allo)11.9(ws for)]TJ 0 -1.0909 TD 0.1212 Tw [(applications to track mo)15.8(v)5.9(ements without having to kno)11.9(w)]TJ T* 0.1335 Tw [(what it is w)5.8(e)29.7()69.9(r)9.9(e tracking: a stock, a managed fund, or an)]TJ T* 0.046 Tw [(indicator)59.7(. )44.9(The price label pr)5.8(o)15.9(vides us with the information)]TJ T* 0.0107 Tc 0.3642 Tw [(w)5.9(e)0( want. )44.9(This is par)-7.8(ticularly useful for stock ticker)]TJ T* -0.0001 Tc 0.185 Tw [(pr)5.8(ograms, allo)11.9(wing them to use F)33.9(inance::Q)5.8(uote to track)]TJ T* 0.025 Tw (things other than just stocks.)Tj 0 -2.1818 TD 0.0011 Tw [(F)35.9(or applications that car)9.7(e about the details, ther)9.7(e ar)9.7(e a wide)]TJ 0 -1.0909 TD 0.2279 Tw [(range of labels that can be r)9.7(eturned. )44.8(These include the)]TJ T* 0.112 Tw [(highest and lo)11.9(w)5.9(est prices for the day)84.9(, dividend yields and)]TJ T* 0.0128 Tw [(dates, the time and date that the information is curr)9.7(ent for)59.7(,)]TJ T* -0.0138 Tw [(the v)5.8(olume traded, the name of the stock, and many others.)]TJ T* 0.025 Tw [(The standar)13.8(d labels ar)9.7(e listed in the sidebar)59.7(.)]TJ 0 -2.1818 TD 0.0065 Tw [(I)23.9(t)17.8()79.9(s)0( impor)-7.9(tant to r)9.7(emember that the information fetched b)5.8(y)]TJ 0 -1.0909 TD 0.3344 Tw [(F)34(inance::Q)5.8(uote is usually delay)5.8(ed, and so is often 30)]TJ T* 0.0847 Tw [(minutes or mor)9.7(e behind what)17.8()79.9(s)0( r)9.7(eally happening. I)5.8(f)0( y)5.8(o)0.1(u)49.7()69.9(r)9.9(e)]TJ T* 0.3327 Tw [(doing curr)9.7(ency conv)5.8(ersions as w)5.8(ell, then the curr)9.7(ency)]TJ T* 0.0333 Tw [(conv)5.8(ersion rate may also be delay)5.8(ed. )14.9(Y)93.9(ou can use the labels)]TJ /F2 1 Tf 9 0 0 9 393.8934 526.0776 Tm -0.0002 Tc 0 Tw (date)Tj /F1 1 Tf 11 0 0 11 417.9734 526.0776 Tm (and )Tj /F2 1 Tf 9 0 0 9 436.2711 526.0776 Tm (time)Tj /F1 1 Tf 11 0 0 11 460.351 526.0776 Tm -0.0001 Tc -0.0241 Tw (to determine when the data was)Tj -6.0416 -1.0909 TD -0.02 Tw [(r)9.9(egister)9.7(ed it)17.7()79.9(s)0( not unkno)11.9(wn for some sour)5.8(ces)]TJ T* 0.025 Tw [(to pr)5.8(o)15.9(vide data that is a w)5.8(eek old or mor)9.7(e.)]TJ /F4 1 Tf 12 0 0 12 393.8934 476.0776 Tm 0 Tc 0 Tw (A)Tj 10.44 0 0 10.44 401.6187 476.0776 Tm 0.0228 Tc [(D)35.7(V)74.9(ANCED)]TJ 12 0 0 12 456.7686 476.0776 Tm 0 Tc (U)Tj 10.44 0 0 10.44 465.8885 476.0776 Tm 0.0226 Tc [(SA)23.5(GE)]TJ /F1 1 Tf 11 0 0 11 393.8934 450.0776 Tm -0.0001 Tc -0.0043 Tw [(The basics of F)33.9(inance::Q)5.8(uote ar)9.7(e pr)9.7(etty simple.)]TJ T* 0.2453 Tw [(Y)93.9(ou cr)9.7(eate y)5.8(ourself a F)33.9(inance::Q)5.8(uote object,)]TJ T* 0.1084 Tw [(ask it for some information, and y)5.8(ou get that)]TJ T* 0.0199 Tc 0.5229 Tw [(information back in a hash. F)35.9(or most)]TJ T* 0.4269 Tw [(applications, this is all y)5.9(ou r)9.7(eally need.)]TJ T* 0.0173 Tc 0.3576 Tw [(H)17.8(o)12(w)5.9(e)0(v)5.8(e)0.1(r)59.8(,)0( F)33.9(inance::Q)5.8(uote pr)5.8(o)15.9(vides a wide)]TJ T* -0.0001 Tc 0.1271 Tw [(range of extra featur)9.7(es to help make y)5.8(o)0(ur life)]TJ T* 0 Tw [(easier)59.7(.)]TJ /F4 1 Tf 12 0 0 12 393.8934 340.0776 Tm 0 Tc (C)Tj 10.44 0 0 10.44 402.401 340.0776 Tm 0.0228 Tc (URRENCY)Tj 12 0 0 12 456.5262 340.0776 Tm 0 Tc (C)Tj 10.44 0 0 10.44 464.9088 340.0776 Tm 0.0228 Tc (ONVERSION)Tj /F1 1 Tf 11 0 0 11 393.8934 314.0776 Tm 0.0017 Tc 0.3732 Tw [(F)34(inance::Q)5.8(uote has the ability to look up)]TJ T* 0.0005 Tc 0.3744 Tw [(curr)9.6(ency rates, and can ev)5.7(en automatically)]TJ T* -0.0001 Tc 0.3101 Tw [(conv)5.8(e)0.1(r)-7.9(t)0.1( for)9.7(eign stocks into local curr)9.7(encies.)]TJ T* 0.1455 Tw [(Let)17.7()79.9(s)-0.1( say y)5.8(ou liv)5.8(e in A)17.8(ustralia, but o)11.9(wn some)]TJ T* 0.3153 Tw [(American stocks. )14.9(Y)93.9(ou may be inter)9.7(ested in)]TJ T* 0.0074 Tw [(kno)11.9(wing the v)5.8(alue of those stocks in A)17.8(u)0.1(stralian)]TJ T* 0.0363 Tw [(dollars, which hav)5.8(e mor)9.7(e meaning to y)5.8(ou than)]TJ T* 0.025 Tw [(US dollars. H)17.8(e)0.1(r)9.7(e)29.7()79.9(s)0( ho)11.9(w:)]TJ /F2 1 Tf 7 0 0 7 393.8934 210.0775 Tm -0.0002 Tc 0.06 Tw (#!/usr/bin/perl -w)Tj 0 -1.1429 TD (use strict;)Tj T* (use Finance::Quote;)Tj 0 -2.2857 TD (my $market = shift;)Tj 0 -1.1429 TD (my @stocks = @ARGV;)Tj T* -0.0001 Tc (my $quoter = Finance::Quote->new\(\);)Tj T* ($quoter->set_currency\("AUD"\); # Aussie dollars,)Tj T* -0.0002 Tc 0 Tw (thanks.)Tj T* -0.0001 Tc 0.0599 Tw (my %info = $quoter->fetch\($market,@stocks\);)Tj 0 -2.2857 TD -0.0002 Tc (# Print the info here.)Tj /F1 1 Tf 12 0 0 12 63 90.3543 Tm 0 Tc 0 Tw [(42)-1100(F)]TJ 10.44 0 0 10.44 94.2795 90.3543 Tm -0.0001 Tc (ALL)Tj 12 0 0 12 115.6277 90.3543 Tm 0 Tc (2000)Tj /F3 1 Tf 30.9897 0.0003 TD -0.0002 Tc 0.0255 Tw [(The P)47.6(erl J)35.7(our)-8(nal #19)]TJ ET 0 0.03 0.3 0 k 63 518.68 322.89 -401.66 re 587.395 90.357 m f* BT /F8 1 Tf 11 0 0 11 70 507.4117 Tm 0 0 0 1 k -0.0001 Tc [(S)23.9(tandar)19.7(d F)21.9(inance::Q)5.8(uote Labels)]TJ /F1 1 Tf 10 0 0 10 70 489.4117 Tm 0.025 Tw [(N)29.7(ot all ex)11.9(changes or stocks hav)5.8(e all these labels av)5.8(ailable, but the range of)]TJ 0 -1.2 TD [(information that F)33.9(inance::Q)5.8(uote can r)9.7(eturn includes:)]TJ /F2 1 Tf 9 0 0 9 70 459.4117 Tm -0.0002 Tc 0 Tw (name)Tj /F1 1 Tf 11 0 0 11 160 459.4117 Tm -0.0001 Tc 0.025 Tw (Company or mutual fund name)Tj /F2 1 Tf 9 0 0 9 70 447.4117 Tm -0.0002 Tc 0 Tw (last)Tj /F1 1 Tf 11 0 0 11 160 447.4117 Tm -0.0001 Tc 0.025 Tw (Last price)Tj /F2 1 Tf 9 0 0 9 70 435.4117 Tm -0.0002 Tc 0 Tw (high)Tj /F1 1 Tf 11 0 0 11 160 435.4117 Tm -0.0001 Tc 0.025 Tw [(H)17.8(ighest trade today)]TJ /F2 1 Tf 9 0 0 9 70 423.4117 Tm -0.0002 Tc 0 Tw (low)Tj /F1 1 Tf 11 0 0 11 160 423.4117 Tm -0.0001 Tc 0.025 Tw [(Lo)11.9(w)5.8(est trade today)]TJ /F2 1 Tf 9 0 0 9 70 411.4117 Tm -0.0002 Tc 0 Tw (date)Tj /F1 1 Tf 11 0 0 11 160 411.4117 Tm -0.0001 Tc 0.025 Tw [(Last trade date \(MM/DD/Y)-12(Y format\))]TJ /F2 1 Tf 9 0 0 9 70 399.4117 Tm -0.0002 Tc 0 Tw (time)Tj /F1 1 Tf 11 0 0 11 160 399.4117 Tm -0.0001 Tc 0.025 Tw (Last trade time)Tj /F2 1 Tf 9 0 0 9 70 387.4117 Tm -0.0002 Tc 0 Tw (net)Tj /F1 1 Tf 11 0 0 11 160 387.4117 Tm -0.0001 Tc 0.025 Tw [(N)29.7(et change)]TJ /F2 1 Tf 9 0 0 9 70 375.4117 Tm -0.0002 Tc 0 Tw (p_change)Tj /F1 1 Tf 11 0 0 11 160 375.4117 Tm -0.0001 Tc 0.025 Tw [(P)54(e)0.1(r)5.8(cent change fr)5.8(om pr)9.7(evious day's close)]TJ /F2 1 Tf 9 0 0 9 70 363.4117 Tm -0.0002 Tc 0 Tw (volume)Tj /F1 1 Tf 11 0 0 11 160 363.4117 Tm -0.0001 Tc [(V)100(olume)]TJ /F2 1 Tf 9 0 0 9 70 351.4117 Tm -0.0002 Tc (avg_vol)Tj /F1 1 Tf 11 0 0 11 160 351.4117 Tm -0.0001 Tc 0.025 Tw [(A)42.1(v)5.9(erage daily v)5.8(olume)]TJ /F2 1 Tf 9 0 0 9 70 339.4117 Tm -0.0002 Tc 0 Tw (bid)Tj /F1 1 Tf 11 0 0 11 160 339.4117 Tm -0.012 Tc [(Bi)-11.7(d)]TJ /F2 1 Tf 9 0 0 9 70 327.4117 Tm -0.0002 Tc (ask)Tj /F1 1 Tf 11 0 0 11 160 327.4117 Tm -0.0001 Tc (Ask)Tj /F2 1 Tf 9 0 0 9 70 315.4117 Tm -0.0002 Tc (close)Tj /F1 1 Tf 11 0 0 11 160 315.4117 Tm -0.0001 Tc 0.025 Tw [(P)29.9(r)9.9(evious close)]TJ /F2 1 Tf 9 0 0 9 70 303.4116 Tm -0.0002 Tc 0 Tw (open)Tj /F1 1 Tf 11 0 0 11 160 303.4116 Tm -0.0001 Tc 0.025 Tw [(T)119.9(oday's open)]TJ /F2 1 Tf 9 0 0 9 70 291.4116 Tm -0.0002 Tc 0 Tw (day_range)Tj /F1 1 Tf 11 0 0 11 160 291.4116 Tm -0.0001 Tc 0.025 Tw [(D)6(ay's range)]TJ /F2 1 Tf 9 0 0 9 70 279.4116 Tm -0.0002 Tc 0 Tw (year_range)Tj /F1 1 Tf 11 0 0 11 160 279.4116 Tm -0.0001 Tc 0.025 Tw [(52-w)5.8(eek range)]TJ /F2 1 Tf 9 0 0 9 70 267.4116 Tm -0.0002 Tc 0 Tw (eps)Tj /F1 1 Tf 11 0 0 11 160 267.4116 Tm -0.0001 Tc 0.025 Tw [(Earnings per shar)9.7(e)]TJ /F2 1 Tf 9 0 0 9 70 255.4116 Tm -0.0003 Tc 0 Tw (pe)Tj /F1 1 Tf 11 0 0 11 160 255.4116 Tm -0.0001 Tc 0.025 Tw [(P/E ratio)]TJ /F2 1 Tf 9 0 0 9 70 243.4116 Tm -0.0002 Tc 0 Tw (div_date)Tj /F1 1 Tf 11 0 0 11 160 243.4116 Tm -0.0001 Tc 0.025 Tw [(D)12.1(ividend pay date)]TJ /F2 1 Tf 9 0 0 9 70 231.4116 Tm -0.0002 Tc 0 Tw (div)Tj /F1 1 Tf 11 0 0 11 160 231.4116 Tm -0.0001 Tc 0.025 Tw [(D)12.1(ividend per shar)9.7(e)]TJ /F2 1 Tf 9 0 0 9 70 219.4116 Tm -0.0002 Tc 0 Tw (div_yield)Tj /F1 1 Tf 11 0 0 11 160 219.4116 Tm -0.0001 Tc 0.025 Tw [(D)12.1(ividend yield)]TJ /F2 1 Tf 9 0 0 9 70 207.4116 Tm -0.0002 Tc 0 Tw (cap)Tj /F1 1 Tf 11 0 0 11 160 207.4116 Tm -0.0001 Tc 0.025 Tw [(M)12(a)0.3(r)5.8(ket capitalization)]TJ /F2 1 Tf 9 0 0 9 70 195.4116 Tm -0.0002 Tc 0 Tw (ex_div)Tj /F1 1 Tf 11 0 0 11 160 195.4116 Tm -0.0001 Tc 0.025 Tw [(E)5.8(x-dividend date)]TJ /F2 1 Tf 9 0 0 9 70 183.4116 Tm -0.0002 Tc 0 Tw (nav)Tj /F1 1 Tf 11 0 0 11 160 183.4116 Tm -0.0001 Tc 0.0251 Tw [(N)29.7(et asset v)5.8(alue)]TJ /F2 1 Tf 9 0 0 9 70 171.4117 Tm -0.0002 Tc 0 Tw (yield)Tj /F1 1 Tf 11 0 0 11 160 171.4117 Tm -0.0001 Tc 0.025 Tw [(Yield \(usually 30-day av)5.8(erage\))]TJ /F2 1 Tf 9 0 0 9 70 159.4117 Tm -0.0002 Tc 0 Tw (exchange)Tj /F1 1 Tf 11 0 0 11 160 159.4117 Tm -0.0001 Tc 0.025 Tw [(The ex)11.9(change the information was obtained fr)5.8(om)]TJ /F2 1 Tf 9 0 0 9 70 147.4117 Tm -0.0002 Tc 0 Tw (success)Tj /F1 1 Tf 11 0 0 11 160 147.4117 Tm -0.0001 Tc 0.025 Tw [(D)12.1(id the stock successfully r)9.7(eturn information?)]TJ /F2 1 Tf 9 0 0 9 70 135.4117 Tm -0.0002 Tc 0 Tw (errormsg)Tj /F1 1 Tf 11 0 0 11 160 135.4117 Tm -0.0001 Tc 0.025 Tw [(I)5.9(f)0( the r)9.7(equest failed, the r)9.7(eason why)]TJ /F2 1 Tf 9 0 0 9 70 123.4117 Tm -0.0002 Tc 0 Tw (method)Tj /F1 1 Tf 11 0 0 11 160 123.4117 Tm -0.0001 Tc 0.025 Tw (The module that found the information.)Tj ET Q 0 0 0 0 k /GS2 gs 1 i 37 874 191 -12 re 334.436 123.412 m f* BT /F2 1 Tf 8 0 0 8 39 864 Tm /Cs9 cs 1 scn -0.0004 Tc -0.0019 Tw (TPJ#19/9.26 9/27/00 10:35 AM Page 42)Tj ET 1 G 0 J 0 j 0.5 w 10 M []0 d 36 873 m 36 849 l 0 837 m 24 837 l 621 873 m 621 849 l 657 837 m 633 837 l 36 36 m 36 60 l 0 72 m 24 72 l 621 36 m 621 60 l 657 72 m 633 72 l S /Cs9 CS 1 SCN 0.25 w 36 873 m 36 849 l 0 837 m 24 837 l 621 873 m 621 849 l 657 837 m 633 837 l 36 36 m 36 60 l 0 72 m 24 72 l 621 36 m 621 60 l 657 72 m 633 72 l S 1 G 0.5 w 304.5 861 m 352.5 861 l 304.5 48 m 352.5 48 l 12 478.5 m 12 430.5 l 645 478.5 m 645 430.5 l 328.5 873 m 328.5 849 l 328.5 60 m 328.5 36 l 0 454.5 m 24 454.5 l 633 454.5 m 657 454.5 l 328.5 861 m 334.5 861 l 334.5 857.688 331.812 855 328.5 855 c 325.188 855 322.5 857.688 322.5 861 c 322.5 864.312 325.188 867 328.5 867 c 331.812 867 334.5 864.312 334.5 861 c 328.5 48 m 334.5 48 l 334.5 44.688 331.812 42 328.5 42 c 325.188 42 322.5 44.688 322.5 48 c 322.5 51.312 325.188 54 328.5 54 c 331.812 54 334.5 51.312 334.5 48 c 12 454.5 m 18 454.5 l 18 451.188 15.312 448.5 12 448.5 c 8.688 448.5 6 451.188 6 454.5 c 6 457.812 8.688 460.5 12 460.5 c 15.312 460.5 18 457.812 18 454.5 c 645 454.5 m 651 454.5 l 651 451.188 648.312 448.5 645 448.5 c 641.688 448.5 639 451.188 639 454.5 c 639 457.812 641.688 460.5 645 460.5 c 648.312 460.5 651 457.812 651 454.5 c S /Cs9 CS 1 SCN 0.25 w 304.5 861 m 352.5 861 l 304.5 48 m 352.5 48 l 12 478.5 m 12 430.5 l 645 478.5 m 645 430.5 l 328.5 873 m 328.5 849 l 328.5 60 m 328.5 36 l 0 454.5 m 24 454.5 l 633 454.5 m 657 454.5 l 328.5 861 m 334.5 861 l 334.5 857.688 331.812 855 328.5 855 c 325.188 855 322.5 857.688 322.5 861 c 322.5 864.312 325.188 867 328.5 867 c 331.812 867 334.5 864.312 334.5 861 c 328.5 48 m 334.5 48 l 334.5 44.688 331.812 42 328.5 42 c 325.188 42 322.5 44.688 322.5 48 c 322.5 51.312 325.188 54 328.5 54 c 331.812 54 334.5 51.312 334.5 48 c 12 454.5 m 18 454.5 l 18 451.188 15.312 448.5 12 448.5 c 8.688 448.5 6 451.188 6 454.5 c 6 457.812 8.688 460.5 12 460.5 c 15.312 460.5 18 457.812 18 454.5 c 645 454.5 m 651 454.5 l 651 451.188 648.312 448.5 645 448.5 c 641.688 448.5 639 451.188 639 454.5 c 639 457.812 641.688 460.5 645 460.5 c 648.312 460.5 651 457.812 651 454.5 c S endstream endobj 130 0 obj << /Type /Page /Parent 495 0 R /Resources 131 0 R /Contents 132 0 R /Thumb 405 0 R /MediaBox [ 0 0 684 873 ] /CropBox [ 0 0 684 873 ] /Rotate 0 >> endobj 131 0 obj << /ProcSet [ /PDF /Text ] /Font << /F1 515 0 R /F2 518 0 R /F3 261 0 R /F4 266 0 R /F8 268 0 R >> /ExtGState << /GS1 523 0 R /GS2 521 0 R >> /ColorSpace << /Cs9 520 0 R >> >> endobj 132 0 obj << /Length 8686 >> stream 1 g /GS1 gs 0 873 m 0 873 l f q 1 i 27 846 603 -783 re 0 873 m W n 0 873 684 -873 re W n BT /F1 1 Tf 11 0 0 11 63 802.0776 Tm 0 0 0 1 k /GS2 gs 0.0004 Tc 0 Tw (The )Tj /F2 1 Tf 9 0 0 9 87.1694 802.0776 Tm (set_currency\(\))Tj /F1 1 Tf 11 0 0 11 169.6856 802.0776 Tm 0.3745 Tw [(method asks F)33.9(inance::Q)5.8(uote to)]TJ -9.6987 -1.0909 TD -0.0001 Tc 0.081 Tw [(conv)5.8(er)-7.9(t all v)5.8(alues into the giv)5.8(en curr)9.7(ency befor)9.7(e r)9.7(eturning)]TJ T* 0.1697 Tw [(them to y)5.8(ou. F)33.9(inance::Q)5.8(uote kno)11.9(ws which things it can)]TJ T* 0.0818 Tw [(conv)5.8(er)-7.9(t \(like prices and ranges\), and which it cannot \(like)]TJ T* -0.0051 Tw [(per)5.8(centage changes and v)5.8(olumes\). I)23.8(t)17.8()79.9(s)-0.1( ev)5.8(en smar)-7.9(t enough to)]TJ T* 0.1753 Tw [(\(usually\) not touch index)11.9(es and other abstract indicators)]TJ T* 0.025 Tw [(that don)69.8()79.9(t)0( hav)5.8(e curr)9.7(encies attached to them.)]TJ 0 -2.1818 TD 0.1332 Tw [(B)5.8(e)0( awar)9.7(e that )]TJ /F2 1 Tf 9 0 0 9 127.4919 706.0776 Tm -0.0002 Tc 0 Tw (set_currency\(\))Tj /F1 1 Tf 11 0 0 11 207.2892 706.0776 Tm -0.0001 Tc 0.1332 Tw [(can significantly incr)9.7(ease)]TJ -13.1172 -1.0909 TD 0.0449 Tw [(the time of a quer)-17.9(y)84.9(,)0( as curr)9.7(ency lookup information has to)]TJ T* 0.025 Tw [(be fetched as w)5.8(ell as the stock information.)]TJ 0 -2.1818 TD 0.1253 Tw [(I)23.9(t)17.8()79.9(s)0( also possible to fetch curr)9.7(ency ex)11.9(change rates dir)9.7(ectly)84.9(.)]TJ 0 -1.0909 TD 0.025 Tw (This is done using the )Tj /F2 1 Tf 9 0 0 9 160.9581 646.0776 Tm -0.0002 Tc 0 Tw (currency\(\))Tj /F1 1 Tf 11 0 0 11 217.97 646.0776 Tm -0.0001 Tc 0.025 Tw [(method. F)35.8(or example:)]TJ /F2 1 Tf 7 0 0 7 72.2378 626.0776 Tm 0.0599 Tw [(my $exchange_rate = $quoter->currency\("USD","AUD"\);)]TJ 0 -1.1429 TD -0.0002 Tc [(print "1 US dollar is $exchange_rate Australian )]TJ 27.4821 -1.1428 TD 0 Tw (dollars.\\n";)Tj /F1 1 Tf 11 0 0 11 63 586.0776 Tm -0.0001 Tc (The )Tj /F2 1 Tf 9 0 0 9 82.8569 586.0776 Tm -0.0002 Tc (currency\(\))Tj /F1 1 Tf 11 0 0 11 139.4219 586.0776 Tm -0.0001 Tc -0.0156 Tw [(method can also do clev)5.8(er things like take)]TJ -6.9474 -1.0909 TD 0.0018 Tc 0.373 Tw [(a pr)9.7(efix for the curr)9.7(ency being conv)5.8(er)-7.9(ted fr)5.8(om. )44.8(The)]TJ T* -0.0001 Tc -0.0304 Tw [(follo)11.9(wing script is a quick and dir)-7.9(ty command-line utility to)]TJ T* 0.025 Tw [(conv)5.8(er)-7.9(t betw)5.8(een curr)9.7(encies:)]TJ /F2 1 Tf 7 0 0 7 63 530.0776 Tm -0.0002 Tc 0.06 Tw (#!/usr/bin/perl -w)Tj 0 -1.1429 TD (use strict;)Tj T* (use Finance::Quote;)Tj 0 -2.2857 TD (# Command-line currency conversion.)Tj T* -0.0001 Tc [(die "Usage: $0 FROM TO\\n" unless defined\($ARGV[1]\);)]TJ T* -0.0002 Tc (my $quoter = Finance::Quote->new\(\);)Tj 0 -1.1429 TD -0.0001 Tc [(my $exchange_rate = $quoter->currency\($ARGV[0],$ARGV[1]\);)]TJ 0 -2.2857 TD [(die "Don't know how to convert $ARGV[0] to $ARGV[1]\\n")]TJ 0 -1.1429 TD -0.0002 Tc (unless $exchange_rate;)Tj 0 -2.2857 TD [(print "$ARGV[0] -> $ARGV[1] = $exchange_rate\\n";)]TJ /F1 1 Tf 11 0 0 11 63 394.0776 Tm -0.0001 Tc 0.2575 Tw [(I)5.9(f)0( this script w)5.8(e)0.1(r)9.7(e)0( to be called )]TJ /F2 1 Tf 9 0 0 9 209.9586 394.0776 Tm -0.0002 Tc 0 Tw (currency-lookup)Tj /F1 1 Tf 11 0 0 11 290.9389 394.0776 Tm 0 Tc 0.2575 Tw [(, y)5.9(o)0.2(u)]TJ -20.7217 -1.0909 TD -0.0001 Tc -0.035 Tw [(could sho)11.9(w the going rate betw)5.8(een A)17.8(ustralian and American)]TJ T* 0.025 Tw (dollars like this:)Tj /F2 1 Tf 7 0 0 7 72.2378 350.0776 Tm -0.0002 Tc 0.06 Tw (currency-lookup AUD USD)Tj /F1 1 Tf 11 0 0 11 63 326.0776 Tm -0.0001 Tc 0.1722 Tw [(I)5.9(f)0( y)5.8(ou wanted to kno)11.9(w ho)11.9(w much 95 A)17.8(u)0.1(stralian dollars)]TJ T* 0.025 Tw [(w)5.8(e)0.1(r)9.7(e)0( in F)35.8(r)9.9(ench francs, y)5.8(ou could do this:)]TJ /F2 1 Tf 7 0 0 7 72.2378 295.0776 Tm -0.0002 Tc 0.06 Tw (currency-lookup "95 AUD" FRF)Tj /F4 1 Tf 12 0 0 12 63 269.0776 Tm 0 Tc 0 Tw (F)Tj 10.44 0 0 10.44 69.3758 269.0776 Tm 0.0228 Tc (AIL)Tj 12 0 0 12 86.5865 269.0776 Tm 0 Tc (-)Tj 10.44 0 0 10.44 90.761 269.0776 Tm 0.0227 Tc [(O)23.8(VER)]TJ 12 0 0 12 123.1846 269.0776 Tm 0 Tc (S)Tj 10.44 0 0 10.44 129.4948 269.0776 Tm 0.0228 Tc [(UPPOR)51.5(T)-351.4(AND)]TJ 12 0 0 12 203.207 269.0776 Tm 0 Tc (C)Tj 10.44 0 0 10.44 211.7146 269.0776 Tm 0.0228 Tc [(UST)35.7(OM)]TJ 12 0 0 12 253.6506 269.0776 Tm 0 Tc (M)Tj 10.44 0 0 10.44 264.7861 269.0776 Tm 0.0229 Tc (ODULES)Tj /F1 1 Tf 11 0 0 11 63 243.0775 Tm -0.0001 Tc 0.0381 Tw [(F)34(inance::Q)5.8(uote pr)5.8(o)15.9(vides automatic fail-o)15.8(v)5.9(er suppor)-7.9(t if y)5.8(o)0.1(u)]TJ T* 0.2047 Tw [(specify the mar)5.8(ket that y)5.8(o)0.1(u)49.7()69.9(r)9.9(e)0( inter)9.7(ested in and not the)]TJ T* 0.0475 Tw [(actual sour)5.8(ce fr)5.8(om which y)5.8(ou want to fetch it. )44.9(This means)]TJ T* 0.1593 Tw [(that if y)5.8(ou use )]TJ /F2 1 Tf 9 0 0 9 133.151 207.0775 Tm -0.0002 Tc 0 Tw (nasdaq)Tj /F1 1 Tf 11 0 0 11 170.0459 207.0775 Tm -0.0001 Tc 0.1593 Tw (instead of )Tj /F2 1 Tf 9 0 0 9 217.5058 207.0775 Tm -0.0002 Tc 0 Tw (yahoo)Tj /F1 1 Tf 11 0 0 11 249.0019 207.0775 Tm -0.0001 Tc 0.1593 Tw [(as y)5.8(our sour)5.8(ce,)]TJ -16.9093 -1.0909 TD 0.0199 Tc 0.3746 Tw [(F)34(inance::Q)5.8(uote will automatically tr)-17.8(y all sour)5.8(ces of)]TJ T* -0.0001 Tc -0.0173 Tw [(NASDA)11.9(Q data in case the first one failed. F)47.8(ail-o)15.8(v)5.9(er suppor)-7.9(t)]TJ T* 0.025 Tw [(is turned on b)5.8(y)0( default in all F)33.9(inance::Q)5.8(uote objects.)]TJ 0 -2.1818 TD -0.0143 Tw [(F)47.9(ail-o)15.8(v)5.9(er suppor)-7.9(t can incr)9.7(ease the time of a quer)-17.9(y)84.9(,)0( especially)]TJ 0 -1.0909 TD 0.0877 Tw [(if y)5.8(o)0.1(u)49.7()69.9(r)9.9(e)0( sear)5.8(ching for a non-existent stock. I)23.8(t)17.8()79.9(s)0( possible to)]TJ T* 0.025 Tw [(\(un\)set fail-o)15.8(v)5.9(er suppor)-7.9(t explicitly like this:)]TJ 12 0 0 12 517.3723 90.3543 Tm 0 Tc 0 Tw (F)Tj 10.44 0 0 10.44 523.4518 90.3543 Tm -0.0001 Tc (ALL)Tj 12 0 0 12 544.7999 90.3543 Tm 0 Tc 0.025 Tw [(2000 43)]TJ /F3 1 Tf -40.15 0 TD -0.0002 Tc 0.0255 Tw [(The P)47.6(erl J)35.7(our)-8(nal #19)]TJ ET 0 0 0 0.1 k /GS1 gs 342.5 809.5 251 -692 re 162.892 90.354 m f* 0 0 0 1 K 0 J 0 j 1 w 10 M []0 d 342.5 809.5 251 -692 re S BT /F8 1 Tf 24 0 0 24 368.5317 486.8976 Tm 0 0 0 1 k /GS2 gs 0 Tw [(KNIGHT)11.8(SBRIDGE)]TJ 2.4168 -1.2 TD 0.0255 Tw (1/4 page)Tj 0.57 -1.2 TD -0.0004 Tc 0 Tw [(NE)11.6(W)]TJ ET Q 0 0 0 0 k /GS2 gs 1 i 37 874 191 -12 re 495.791 429.298 m f* BT /F2 1 Tf 8 0 0 8 39 864 Tm /Cs9 cs 1 scn -0.0004 Tc -0.0019 Tw (TPJ#19/9.26 9/27/00 10:35 AM Page 43)Tj ET 1 G 0 J 0 j 0.5 w 10 M []0 d 36 873 m 36 849 l 0 837 m 24 837 l 621 873 m 621 849 l 657 837 m 633 837 l 36 36 m 36 60 l 0 72 m 24 72 l 621 36 m 621 60 l 657 72 m 633 72 l S /Cs9 CS 1 SCN 0.25 w 36 873 m 36 849 l 0 837 m 24 837 l 621 873 m 621 849 l 657 837 m 633 837 l 36 36 m 36 60 l 0 72 m 24 72 l 621 36 m 621 60 l 657 72 m 633 72 l S 1 G 0.5 w 304.5 861 m 352.5 861 l 304.5 48 m 352.5 48 l 12 478.5 m 12 430.5 l 645 478.5 m 645 430.5 l 328.5 873 m 328.5 849 l 328.5 60 m 328.5 36 l 0 454.5 m 24 454.5 l 633 454.5 m 657 454.5 l 328.5 861 m 334.5 861 l 334.5 857.688 331.812 855 328.5 855 c 325.188 855 322.5 857.688 322.5 861 c 322.5 864.312 325.188 867 328.5 867 c 331.812 867 334.5 864.312 334.5 861 c 328.5 48 m 334.5 48 l 334.5 44.688 331.812 42 328.5 42 c 325.188 42 322.5 44.688 322.5 48 c 322.5 51.312 325.188 54 328.5 54 c 331.812 54 334.5 51.312 334.5 48 c 12 454.5 m 18 454.5 l 18 451.188 15.312 448.5 12 448.5 c 8.688 448.5 6 451.188 6 454.5 c 6 457.812 8.688 460.5 12 460.5 c 15.312 460.5 18 457.812 18 454.5 c 645 454.5 m 651 454.5 l 651 451.188 648.312 448.5 645 448.5 c 641.688 448.5 639 451.188 639 454.5 c 639 457.812 641.688 460.5 645 460.5 c 648.312 460.5 651 457.812 651 454.5 c S /Cs9 CS 1 SCN 0.25 w 304.5 861 m 352.5 861 l 304.5 48 m 352.5 48 l 12 478.5 m 12 430.5 l 645 478.5 m 645 430.5 l 328.5 873 m 328.5 849 l 328.5 60 m 328.5 36 l 0 454.5 m 24 454.5 l 633 454.5 m 657 454.5 l 328.5 861 m 334.5 861 l 334.5 857.688 331.812 855 328.5 855 c 325.188 855 322.5 857.688 322.5 861 c 322.5 864.312 325.188 867 328.5 867 c 331.812 867 334.5 864.312 334.5 861 c 328.5 48 m 334.5 48 l 334.5 44.688 331.812 42 328.5 42 c 325.188 42 322.5 44.688 322.5 48 c 322.5 51.312 325.188 54 328.5 54 c 331.812 54 334.5 51.312 334.5 48 c 12 454.5 m 18 454.5 l 18 451.188 15.312 448.5 12 448.5 c 8.688 448.5 6 451.188 6 454.5 c 6 457.812 8.688 460.5 12 460.5 c 15.312 460.5 18 457.812 18 454.5 c 645 454.5 m 651 454.5 l 651 451.188 648.312 448.5 645 448.5 c 641.688 448.5 639 451.188 639 454.5 c 639 457.812 641.688 460.5 645 460.5 c 648.312 460.5 651 457.812 651 454.5 c S endstream endobj 133 0 obj << /Type /Page /Parent 495 0 R /Resources 134 0 R /Contents 135 0 R /Thumb 407 0 R /MediaBox [ 0 0 684 873 ] /CropBox [ 0 0 684 873 ] /Rotate 0 >> endobj 134 0 obj << /ProcSet [ /PDF /Text ] /Font << /F1 515 0 R /F2 518 0 R /F3 261 0 R /F4 266 0 R /F8 268 0 R >> /ExtGState << /GS1 523 0 R /GS2 521 0 R >> /ColorSpace << /Cs9 520 0 R >> >> endobj 135 0 obj << /Length 10367 >> stream 1 g /GS1 gs 0 873 m 0 873 l f q 1 i 27 846 603 -783 re 0 873 m W n 0 873 684 -873 re W n BT /F2 1 Tf 7 0 0 7 72.2378 805.2832 Tm 0 0 0 1 k /GS2 gs -0.0002 Tc 0.06 Tw [($quoter->failover\(0\); # Disable failover.)]TJ /F1 1 Tf 11 0 0 11 63 781.2832 Tm 0.0199 Tc 1.2055 Tw [(Like)-5.9(wise, when y)5.8(ou cr)9.7(eate y)5.8(our)]TJ 0 -1.0909 TD -0.0001 Tc 0.2121 Tw [(F)34(inance::Q)5.8(uote object, it)17.8()79.9(s)0( possible to state)]TJ T* 0.0683 Tw [(which modules y)5.8(o)0.1(u)49.7()99.9(d like to be able to fetch)]TJ T* -0.0313 Tw [(information fr)5.8(om. F)35.8(or example, this uses only)]TJ T* 0.0265 Tw [(the F)33.9(inance::Q)5.8(uote::Y)67.8(ahoo::A)17.8(ustralia module)]TJ T* 0.025 Tw (for queries:)Tj /F2 1 Tf 7 0 0 7 72.2378 701.2832 Tm -0.0002 Tc 0.06 Tw (my $quoter = )Tj 2.1758 -1.1429 TD 0 Tw (Finance::Quote->new\("Yahoo::Australia"\);)Tj /F1 1 Tf 11 0 0 11 63 669.2832 Tm -0.0001 Tc 0.0128 Tw [(This style of inv)5.8(ocation is useful if y)5.8(ou pr)9.7(efer)]TJ 0 -1.0909 TD 0.0199 Tc 0.7297 Tw [(a par)-7.9(ticular information supplier)59.8(, or)]TJ T* 1.1763 Tw [(other)-17.9(wise wish to r)9.7(estrict wher)9.7(e)]TJ T* -0.0001 Tc 0.025 Tw [(F)34(inance::Q)5.8(uote can sear)5.8(ch for information.)]TJ 0 -2.1818 TD 0.1205 Tw [(Also, specifying modules to load at cr)9.7(eation)]TJ 0 -1.0909 TD 0.1316 Tw [(time lets y)5.8(ou load custom modules that ar)9.7(e)]TJ T* 0.006 Tc 0.3688 Tw [(not par)-7.9(t of the standar)13.8(d F)33.8(i)-0.1(nance::Q)5.8(uote)]TJ T* -0.0001 Tc 0 Tw (distribution.)Tj /F2 1 Tf 7 0 0 7 72.2378 553.2832 Tm -0.0002 Tc 0.06 Tw (my $quoter = )Tj 0.3162 -1.1429 TD [(Finance::Quote->new\("-defaults", "MyBank"\);)]TJ /F1 1 Tf 11 0 0 11 63 521.2832 Tm -0.0072 Tc 0.3571 Tw [(H)17.8(e)0.1(r)9.7(e)0( w)5.8(e)0( would load the F)33.9(inance::Q)5.8(uote::)]TJ 0 -1.0909 TD -0.0251 Tc 0.3509 Tw [(M)29.8(y)-0.1(B)11.9(ank module, as w)5.9(ell as all the default)]TJ T* 0.1954 Tw [(modules packaged with F)33.9(inance::Q)5.8(uote. N)29.8(ote)]TJ T* 0.1513 Tw (that the )Tj /F2 1 Tf 9 0 0 9 99.6063 485.2832 Tm 0 Tw (-defaults)Tj /F1 1 Tf 11 0 0 11 150.3091 485.2832 Tm 0.1513 Tw (argument is only magical)Tj -7.9372 -1.0909 TD 0.0883 Tw (when passed as the first argument \(although in)Tj T* -0.0174 Tw [(the futur)9.7(e it might be legal to pass it anywher)9.8(e in)]TJ T* 0.025 Tw (the arguments list\).)Tj 0 -2.1818 TD 0.004 Tc 0.3709 Tw [(I)5.8(f)0( y)5.8(o)0(u)49.7()69.8(r)9.9(e)0( inter)9.7(ested in writing y)5.7(our o)11.9(w)0(n)]TJ 0 -1.0909 TD -0.0002 Tc -0.0049 Tw [(modules for F)33.8(inance::Q)5.7(uote, y)5.7(ou should r)9.6(ead)]TJ T* 0.0199 Tc 0.6046 Tw [(the H)5.8(acker)19.7()79.9(s)0( G)11.9(uide that comes with)]TJ T* 0.0131 Tc 0.3618 Tw [(F)34(inance::Q)5.8(uote, or which can be found )]TJ T* 0.0199 Tc 0.7215 Tw [(in the F)33.9(inance::Q)5.8(uote documentation)]TJ T* 0.0016 Tc 0.3733 Tw [(manager at http://sour)5.7(ceforge.net/docman/)]TJ T* -0.0001 Tc 0 Tw [(index.php?gr)5.8(oup_id=4232.)]TJ /F4 1 Tf 12 0 0 12 63 327.2832 Tm 0 Tc (R)Tj 10.44 0 0 10.44 71.2058 327.2832 Tm 0.0227 Tc [(EQ)23.6(UIRED)]TJ 12 0 0 12 123.7125 327.2832 Tm 0 Tc (L)Tj 10.44 0 0 10.44 131.0969 327.2832 Tm 0.0228 Tc (ABELS)Tj /F1 1 Tf 11 0 0 11 63 301.2832 Tm -0.0001 Tc 0.0296 Tw [(F)47.9(ail-o)15.8(v)5.9(er suppor)-7.9(t is a wonder)-7.9(ful thing the)]TJ T* 0.0199 Tc 0.5725 Tw [(sour)5.8(ce y)5.8(o)0.1(u)49.7()69.9(r)9.9(e)0( fetching data fr)5.8(om can)]TJ T* -0.0001 Tc 0.3163 Tw [(disappear and y)5.8(o)0.1(u)49.7()12(ll nev)5.8(er hav)5.8(e to kno)11.9(w)74.9(.)]TJ T* 0.0585 Tw [(U)35.9(nfor)-7.9(tunately)84.9(, not all sour)5.8(ces pr)5.8(o)15.9(vide all the)]TJ T* 0.2169 Tw [(information y)5.8(o)0.1(u)49.7()69.9(r)9.9(e)0( looking for)59.8(, and having)]TJ T* 0.286 Tw [(bits of information disappear when y)5.8(o)0.1(u)49.7()69.9(r)9.9(e)]TJ T* 0.025 Tw (used to them can be a little surprising.)Tj 0 -2.1818 TD 0.0387 Tw [(Rather than having to worr)-17.9(y about y)5.8(our fail-)]TJ 0 -1.0909 TD 0.1873 Tw [(o)15.9(v)5.9(er sour)5.8(ces not pr)5.8(o)15.9(viding the information)]TJ T* -0.0058 Tw [(y)5.8(o)0.1(u)49.7()69.9(r)9.9(e)0( looking for)59.7(, F)33.9(inance::Q)5.8(uote allo)11.9(ws y)5.8(o)0.1(u)]TJ T* 0.003 Tw [(to define a list of things that ar)9.7(e impor)-7.9(tant to)]TJ T* 0.1079 Tw [(y)5.8(ou, using the )]TJ /F2 1 Tf 9 0 0 9 129.3705 157.2832 Tm -0.0002 Tc 0 Tw (require_labels\(\))Tj /F1 1 Tf 11 0 0 11 219.6855 157.2832 Tm -0.0001 Tc (method.)Tj -14.2441 -1.0909 TD 0.0734 Tw [(S)12.1(ay that y)5.8(our pr)5.8(ogram r)9.7(elies upon the price,)]TJ T* 0.1273 Tw [(date, high, lo)11.9(w)74.9(,)0( and v)5.8(olume labels. )14.8(Y)93.9(ou can)]TJ T* 0.2494 Tw [(expr)9.7(ess this to y)5.8(our F)33.9(inance::Q)5.8(uote object)]TJ 12 0 0 12 63 90.3543 Tm 0 Tc 0 Tw [(44)-1100(F)]TJ 10.44 0 0 10.44 94.2795 90.3543 Tm -0.0001 Tc (ALL)Tj 12 0 0 12 115.6277 90.3543 Tm 0 Tc (2000)Tj /F3 1 Tf 30.9897 0.0003 TD -0.0002 Tc 0.0255 Tw [(The P)47.6(erl J)35.7(our)-8(nal #19)]TJ ET 0 0.03 0.3 0 k 263.43 810 329.78 -693 re 587.395 90.357 m f* BT /F8 1 Tf 13 0 0 13 269.4274 795.0494 Tm 0 0 0 1 k (Listing 1.)Tj 0 -1.0769 TD -0.0001 Tc [(A sample stock ticker pr)5.8(ogram using F)21.8(inance::Q)5.7(uote.)]TJ /F2 1 Tf 7 0 0 7 269.4274 753.2494 Tm -0.0401 Tc 0.0599 Tw (#!/usr/bin/perl -w)Tj 0 -1.2714 TD 0 Tc 0 Tw (#)Tj T* -0.0401 Tc 0.0599 Tw [(# Example stock-ticker program. Can look up stocks from multiple)]TJ T* (# markets and return the results in local currency.)Tj 0 -2.5429 TD (use strict;)Tj 0 -1.2714 TD (use Finance::Quote;)Tj 0 -2.5429 TD [(my $CURRENCY = "AUD";)-3491.5(# Set preferred currency here, or empty string for)]TJ 15.4045 -1.2714 TD (# no conversion.)Tj -15.4045 -2.5429 TD [(# The @stocks array contains a set of array-references. Each reference)]TJ 0 -1.2714 TD (# has the market as the first element, and a set of stocks thereafter.)Tj 0 -2.5429 TD (my @STOCKS = \([qw/australia CML ITE BHP/],)Tj 8.105 -1.2714 TD ([qw/usa MSFT RHAT LNUX/])Tj -2.4343 -1.2714 TD -0.0403 Tc 0 Tw (\);)Tj -5.6707 -2.5429 TD -0.0401 Tc 0.0599 Tw [(# These define the format. The first item in each pair is the label,)]TJ 0 -1.2714 TD (# the second is the printf-style formatting, the third is the width)Tj T* (# of the field \(used in printing headers\).)Tj 0 -2.5429 TD [(my @labels = \(["name", "%12s", 15],)]TJ 8.1501 -1.2714 TD [(["date", "%11s", 11], )]TJ T* [(["time", "%10s", 11],)]TJ T* [(["last", "%8.2f", 8],)]TJ T* [(["high", "%8.2f", 8], )]TJ T* [(["low", "%8.2f", 8],)]TJ T* [(["close", "%8.2f", 8], )]TJ T* [(["volume","%10d", 10]\);)]TJ -8.1501 -2.5428 TD [(my $REFRESH = 120;)-5171.1(# Seconds between refresh.)]TJ T* [(# )-89.8(-)-710(END CONFIG SECTION )-89.8(-)]TJ T* (my $quoter = Finance::Quote->new\(\);)Tj 0 -1.2714 TD [(my $clear = `clear`;)-13717.2(# To clear the screen.)]TJ 0 -2.5429 TD (# Build our header.)Tj T* (my $header = "\\t\\t\\t\\tSTOCK REPORT" .\($CURRENCY ? " \($CURRENCY\)" : ""\) ."\\n\\n";)Tj T* (foreach my $tuple \(@labels\) {)Tj 2.4794 -1.2714 TD (my \($name, undef, $width\) = @$tuple;)Tj T* ($header .= sprintf\("%".$width."s", uc\($name\)\);)Tj -2.4794 -1.2714 TD 0 Tc 0 Tw (})Tj 0 -2.5428 TD -0.0401 Tc 0.0599 Tw ($header .= "\\n".\("-"x79\)."\\n";)Tj T* [(# Header is all built. Looks beautiful.)]TJ T* [($quoter->set_currency\($CURRENCY\) if $CURRENCY;)-4983.4(# Set default currency.)]TJ T* [(for \(;;\) {)-4567.2(#)0( Loop forever.)]TJ 2.4794 -1.2714 TD (print $clear, $header;)Tj T* (foreach my $stockset \(@STOCKS\) {)Tj 2.4794 -1.2714 TD (my \($exchange, @symbols\) = @$stockset;)Tj T* (my %info = $quoter->fetch\($exchange, @symbols\);)Tj 0 -2.5429 TD (foreach my $symbol \(@symbols\) {)Tj 2.4794 -1.2714 TD [(next unless $info{$symbol, "success"}; # Skip failures.)]TJ T* (foreach my $tuple \(@labels\) {)Tj 2.4794 -1.2714 TD (my \($label, $format\) = @$tuple;)Tj T* (printf $format, $info{$symbol, $label};)Tj -2.4794 -1.2714 TD 0 Tc 0 Tw (})Tj T* -0.0401 Tc 0.0599 Tw (print "\\n";)Tj -2.4794 -1.2714 TD 0 Tc 0 Tw (})Tj -2.4794 -1.2714 TD (})Tj 0 -2.5429 TD -0.0401 Tc (sleep\($REFRESH\);)Tj -2.4794 -1.2714 TD 0 Tc (})Tj ET Q 0 0 0 0 k /GS2 gs 1 i 37 874 191 -12 re 273.627 130.25 m f* BT /F2 1 Tf 8 0 0 8 39 864 Tm /Cs9 cs 1 scn -0.0004 Tc -0.0019 Tw (TPJ#19/9.26 9/27/00 10:35 AM Page 44)Tj ET 1 G 0 J 0 j 0.5 w 10 M []0 d 36 873 m 36 849 l 0 837 m 24 837 l 621 873 m 621 849 l 657 837 m 633 837 l 36 36 m 36 60 l 0 72 m 24 72 l 621 36 m 621 60 l 657 72 m 633 72 l S /Cs9 CS 1 SCN 0.25 w 36 873 m 36 849 l 0 837 m 24 837 l 621 873 m 621 849 l 657 837 m 633 837 l 36 36 m 36 60 l 0 72 m 24 72 l 621 36 m 621 60 l 657 72 m 633 72 l S 1 G 0.5 w 304.5 861 m 352.5 861 l 304.5 48 m 352.5 48 l 12 478.5 m 12 430.5 l 645 478.5 m 645 430.5 l 328.5 873 m 328.5 849 l 328.5 60 m 328.5 36 l 0 454.5 m 24 454.5 l 633 454.5 m 657 454.5 l 328.5 861 m 334.5 861 l 334.5 857.688 331.812 855 328.5 855 c 325.188 855 322.5 857.688 322.5 861 c 322.5 864.312 325.188 867 328.5 867 c 331.812 867 334.5 864.312 334.5 861 c 328.5 48 m 334.5 48 l 334.5 44.688 331.812 42 328.5 42 c 325.188 42 322.5 44.688 322.5 48 c 322.5 51.312 325.188 54 328.5 54 c 331.812 54 334.5 51.312 334.5 48 c 12 454.5 m 18 454.5 l 18 451.188 15.312 448.5 12 448.5 c 8.688 448.5 6 451.188 6 454.5 c 6 457.812 8.688 460.5 12 460.5 c 15.312 460.5 18 457.812 18 454.5 c 645 454.5 m 651 454.5 l 651 451.188 648.312 448.5 645 448.5 c 641.688 448.5 639 451.188 639 454.5 c 639 457.812 641.688 460.5 645 460.5 c 648.312 460.5 651 457.812 651 454.5 c S /Cs9 CS 1 SCN 0.25 w 304.5 861 m 352.5 861 l 304.5 48 m 352.5 48 l 12 478.5 m 12 430.5 l 645 478.5 m 645 430.5 l 328.5 873 m 328.5 849 l 328.5 60 m 328.5 36 l 0 454.5 m 24 454.5 l 633 454.5 m 657 454.5 l 328.5 861 m 334.5 861 l 334.5 857.688 331.812 855 328.5 855 c 325.188 855 322.5 857.688 322.5 861 c 322.5 864.312 325.188 867 328.5 867 c 331.812 867 334.5 864.312 334.5 861 c 328.5 48 m 334.5 48 l 334.5 44.688 331.812 42 328.5 42 c 325.188 42 322.5 44.688 322.5 48 c 322.5 51.312 325.188 54 328.5 54 c 331.812 54 334.5 51.312 334.5 48 c 12 454.5 m 18 454.5 l 18 451.188 15.312 448.5 12 448.5 c 8.688 448.5 6 451.188 6 454.5 c 6 457.812 8.688 460.5 12 460.5 c 15.312 460.5 18 457.812 18 454.5 c 645 454.5 m 651 454.5 l 651 451.188 648.312 448.5 645 448.5 c 641.688 448.5 639 451.188 639 454.5 c 639 457.812 641.688 460.5 645 460.5 c 648.312 460.5 651 457.812 651 454.5 c S endstream endobj 136 0 obj << /Type /Page /Parent 495 0 R /Resources 137 0 R /Contents 138 0 R /Thumb 409 0 R /MediaBox [ 0 0 684 873 ] /CropBox [ 0 0 684 873 ] /Rotate 0 >> endobj 137 0 obj << /ProcSet [ /PDF /Text ] /Font << /F1 515 0 R /F2 518 0 R /F3 261 0 R /F4 266 0 R /F5 262 0 R /F8 268 0 R /F10 270 0 R >> /ExtGState << /GS1 523 0 R /GS2 521 0 R >> /ColorSpace << /Cs9 520 0 R >> >> endobj 138 0 obj << /Length 9351 >> stream 1 g /GS1 gs 0 873 m 0 873 l f q 1 i 27 846 603 -783 re 0 873 m W n 0 873 684 -873 re W n BT /F1 1 Tf 11 0 0 11 63 802.0776 Tm 0 0 0 1 k /GS2 gs -0.0001 Tc 0.025 Tw (like so:)Tj /F2 1 Tf 7 0 0 7 81.1957 782.0776 Tm -0.0101 Tc 0.0599 Tw [($quoter->require_labels\(qw/price date high low volume/\);)]TJ /F1 1 Tf 11 0 0 11 63 758.0776 Tm 0.02 Tc 0.4363 Tw [(I)6(f)0.1( y)5.9(ou no)12(w use the )]TJ /F2 1 Tf 9 0 0 9 172.681 758.0776 Tm 0.0198 Tc 0 Tw ($quoter->fetch\(\))Tj /F1 1 Tf 11 0 0 11 269.7096 758.0776 Tm 0.4364 Tw (to obtain)Tj -18.7918 -1.0909 TD -0.0001 Tc -0.0018 Tw [(information, y)5.8(ou can be guaranteed that those fields will be)]TJ T* 0.0127 Tc 0.3622 Tw [(av)5.8(ailable when they make sense for whatev)5.6(er y)5.8(o)0.1(u)49.7()49.8(v)5.9(e)]TJ T* -0.0001 Tc -0.0044 Tw [(r)9.9(equested. )44.8(This means y)5.8(ou can use fail-o)15.8(v)5.9(er methods safe in)]TJ T* 0.0043 Tw [(the kno)11.9(wledge that the information y)5.8(ou actually car)9.7(e about)]TJ T* 0.025 Tw [(won)69.8()79.9(t disappear)59.7(.)]TJ /F8 1 Tf 12 0 0 12 63 672.0776 Tm 0 Tc 0 Tw (T)Tj 10.44 0 0 10.44 71.4226 672.0776 Tm 0.0228 Tc (RICKS)Tj 12 0 0 12 106.0352 672.0776 Tm 0 Tc (W)Tj 10.44 0 0 10.44 117.8884 672.0775 Tm 0.0227 Tc (ITH)Tj 12 0 0 12 141.8743 672.0775 Tm 0 Tc (T)Tj 10.44 0 0 10.44 150.2969 672.0775 Tm 0.0225 Tc (HE)Tj 12 0 0 12 168.9095 672.0775 Tm 0 Tc (U)Tj 10.44 0 0 10.44 178.0762 672.0775 Tm 0.0227 Tc (SER)Tj 12 0 0 12 200.5608 672.0775 Tm 0 Tc (A)Tj 10.44 0 0 10.44 208.1381 672.0775 Tm 0.0228 Tc (GENT)Tj /F1 1 Tf 11 0 0 11 63 648.0776 Tm -0.0001 Tc 0.0901 Tw [(I)5.9(f)0( y)5.8(o)0.1(u)49.7()49.8(v)5.9(e)-0.1( ev)5.8(er used L)109.8(WP::U)29.7(serAgent befor)9.7(e, then y)5.8(o)0.1(u)49.8()12(ll be)]TJ T* 0.2077 Tw [(pleased to kno)11.9(w that y)5.8(ou can customiz)5.8(e the underlying)]TJ T* 0.2066 Tw [(L)109.8(WP::U)29.7(serAgent object in F)33.9(inance::Q)5.8(uote. F)35.8(or example,)]TJ T* 0.0199 Tc 0.3555 Tw (this causes the )Tj /F2 1 Tf 9 0 0 9 141.2473 612.0776 Tm 0 Tw ($quoter)Tj /F1 1 Tf 11 0 0 11 187.1779 612.0776 Tm 0.3555 Tw (object to identify itself as)Tj /F2 1 Tf 9 0 0 9 63 600.0776 Tm -0.0002 Tc 0 Tw (MyTicker/0.1)Tj /F1 1 Tf 11 0 0 11 130.8092 600.0776 Tm -0.0001 Tc 0.025 Tw [(in HT)-12(TP sessions.)]TJ /F2 1 Tf 7 0 0 7 72.2378 580.0776 Tm -0.0002 Tc 0 Tw ($quoter->user_agent->agent\("MyTicker/0.1"\);)Tj /F1 1 Tf 11 0 0 11 63 556.0776 Tm -0.0001 Tc 0.025 Tw [(Like)-5.9(wise, this lets y)5.8(ou set y)5.8(our pr)5.8(o)5.9(xy explicitly:)]TJ /F2 1 Tf 7 0 0 7 72.2378 536.0776 Tm -0.0002 Tc 0.06 Tw ($quoter->user_agent->proxy\('http', $MY_PROXY\);)Tj /F1 1 Tf 11 0 0 11 63 512.0776 Tm 0.0066 Tc 0.3683 Tw [(N)29.8(ote that the U)29.8(serAgent r)9.8(espects pr)5.8(o)6(xy envir)5.8(onment)]TJ T* -0.0001 Tc 0.0604 Tw [(v)5.9(ariables \(such as )]TJ /F2 1 Tf 9 0 0 9 140.1721 500.0776 Tm -0.0002 Tc 0 Tw (http_proxy)Tj /F1 1 Tf 11 0 0 11 194.1589 500.0776 Tm -0.0001 Tc 0.0603 Tw [(\) at cr)9.7(eation time. F)35.8(or mor)9.7(e)]TJ -11.9235 -1.0909 TD -0.0354 Tw [(information on what y)5.8(ou can and cannot do her)9.7(e, check out)]TJ T* 0.025 Tw [(the documentation for L)109.8(WP::U)29.7(serAgent.)]TJ /F4 1 Tf 12 0 0 12 63 450.0776 Tm 0 Tc 0 Tw (R)Tj 10.44 0 0 10.44 70.5349 450.0776 Tm -0.0116 Tc (OLLING)Tj 12 0 0 12 112.529 450.0776 Tm 0 Tc (Y)Tj 10.44 0 0 10.44 119.1836 450.0776 Tm -0.0117 Tc (OUR)Tj 12 0 0 12 145.0134 450.0776 Tm 0 Tc (O)Tj 10.44 0 0 10.44 153.8073 450.0776 Tm -0.0118 Tc (WN)Tj 12 0 0 12 174.7053 450.0776 Tm 0 Tc (F)Tj 10.44 0 0 10.44 181.1596 450.0776 Tm -0.0117 Tc (INANCE)Tj 12 0 0 12 219.8192 450.0776 Tm -0.0103 Tc (::Q)Tj 10.44 0 0 10.44 234.8981 450.0776 Tm -0.0119 Tc [(UO)29.3(TE)]TJ 12 0 0 12 266.2868 450.0776 Tm 0 Tc (M)Tj 10.44 0 0 10.44 277.0624 450.0776 Tm -0.0116 Tc (ODULE)Tj /F1 1 Tf 11 0 0 11 63 426.0776 Tm -0.0001 Tc 0.0726 Tw [(As w)5.8(ell as using the standar)13.8(d F)33.9(inance::Q)5.8(uote modules, it)17.7()79.9(s)]TJ T* 0.0254 Tw [(also possible to write y)5.8(our o)11.9(wn module for F)33.9(inance::Q)5.8(uote)]TJ T* 0.0777 Tw [(to use. )14.8(W)81.7(riting such a module can be a tricky task, and is)]TJ T* 0.025 Tw [(bey)5.8(ond the scope of this ar)-7.9(ticle.)]TJ 0 -2.1818 TD -0.0201 Tc 0.0128 Tw [(The F)33.9(inance::Q)5.8(uote package does come with its o)11.8(wn H)5.8(acker)19.7()79.9(s)]TJ 0 -1.0909 TD -0.0033 Tw [(G)12(uide explaining ho)11.9(w to write a F)33.8(inance::Q)5.8(uote module. )44.9(This)]TJ T* 0.2391 Tw (can be found with other documentation at http://finance-)Tj T* 0 Tw [(quote.sour)5.8(ceforge.net/documentation.html.)]TJ /F4 1 Tf 12 0 0 12 63 304.0776 Tm 0 Tc (A)Tj 10.44 0 0 10.44 70.4853 304.0776 Tm (N)Tj 12 0 0 12 81.7213 304.0776 Tm (E)Tj 10.44 0 0 10.44 88.8346 304.0776 Tm -0.0002 Tc (XAMPLE)Tj 12 0 0 12 133.7633 304.0776 Tm 0 Tc (S)Tj 10.44 0 0 10.44 139.8336 304.0776 Tm -0.0002 Tc [(T)35.9(OCK)]TJ 12 0 0 12 172.1253 304.0776 Tm 0 Tc (T)Tj 10.44 0 0 10.44 179.8626 304.0776 Tm -0.0002 Tc (ICKER)Tj 12 0 0 12 214.9376 304.0776 Tm 0 Tc (P)Tj 10.44 0 0 10.44 222.1475 304.0776 Tm -0.0002 Tc [(R)29.8(OGRAM)]TJ /F1 1 Tf 11 0 0 11 63 278.0776 Tm -0.0001 Tc 0.0795 Tw [(O)5.8(n)0( the pr)9.7(evious page is an example of a useful, r)9.7(eal, text-)]TJ T* 0.2865 Tw [(based stock ticker)59.7(. )44.9(The code is intentionally simple to)]TJ T* -0.037 Tw [(display the featur)9.7(es of F)33.9(inance::Q)5.8(uote, but it pr)5.8(o)15.9(vides a v)5.8(e)0.1(r)-17.9(y)]TJ T* 0.0708 Tw [(clear and useful display for stocks that y)5.8(ou may hav)5.8(e y)5.8(our)]TJ T* 0.0251 Tw [(ey)5.8(e on.)]TJ /F10 1 Tf 0 -2.1818 TD 0.0278 Tw (_ _END_ _)Tj /F5 1 Tf T* -0.0151 Tc 0.1061 Tw [(P)54.1(aul F)35.8(enwick \()]TJ /F1 1 Tf 9 0 0 9 124.2713 182.0776 Tm 0 Tw (pjf@cpan.org\))Tj /F5 1 Tf 11 0 0 11 175.617 182.0776 Tm 0.1061 Tw [(liv)5.8(es in M)17.8(elbour)-7.9(ne \(A)17.8(ustr)29.7(alia\) and)]TJ -10.2379 -1.0909 TD 0.0027 Tw [(has inter)19.7(ests in per)-7.9(macultur)19.7(e, edible plants, and rides a push-bike)]TJ T* -0.0271 Tw [(named B)11.9(iscuit)17.7(. H)23.9(e)0( curr)19.7(ently hacks P)41.9(e)0.1(r)11.9(l)0( for a living. P)53.9(aul r)19.7(ecor)19.7(ds)]TJ T* 0.025 Tw [(his ex)5.8(citing adv)5.8(entur)19.7(es at http://www)61.7(.adv)5.8(ogato)23.9(.net/person/pjf/.)]TJ /F1 1 Tf 12 0 0 12 517.3723 90.3543 Tm 0 Tc 0 Tw (F)Tj 10.44 0 0 10.44 523.4518 90.3543 Tm -0.0001 Tc (ALL)Tj 12 0 0 12 544.7999 90.3543 Tm 0 Tc 0.025 Tw [(2000 45)]TJ /F3 1 Tf -40.15 0 TD -0.0002 Tc 0.0255 Tw [(The P)47.6(erl J)35.7(our)-8(nal #19)]TJ ET 0 0 0 0.1 k /GS1 gs 342.5 809.5 251 -341 re 162.892 90.354 m f* 0 0 0 1 K 0 J 0 j 1 w 10 M []0 d 342.5 809.5 251 -341 re S BT /F8 1 Tf 24 0 0 24 398.936 676.7976 Tm 0 0 0 1 k /GS2 gs -0.0001 Tc 0 Tw [(HUFFT)35.8(O)51.7(W)0.3(N)]TJ 1.15 -1.2 TD -0.0002 Tc 0.0255 Tw (1/4 page)Tj 0.57 -2.4 TD -0.0004 Tc 0 Tw [(NE)11.6(W)]TJ ET 0 0 0 0.1 k /GS1 gs 342.5 458.5 251 -341 re 495.791 590.398 m f* 342.5 458.5 251 -341 re S BT 24 0 0 24 378.8589 325.7976 Tm 0 0 0 1 k /GS2 gs -0.0002 Tc [(E)11.9(VER)44.7(Y)17.8(ONE.NET)]TJ 1.9865 -1.2 TD 0.0255 Tw (1/4 page)Tj 0.57 -2.4 TD -0.0004 Tc 0 Tw [(NE)11.6(W)]TJ ET Q 0 0 0 0 k /GS2 gs 1 i 37 874 191 -12 re 495.791 239.398 m f* BT /F2 1 Tf 8 0 0 8 39 864 Tm /Cs9 cs 1 scn -0.0004 Tc -0.0019 Tw (TPJ#19/9.26 9/27/00 10:35 AM Page 45)Tj ET 1 G 0 J 0 j 0.5 w 10 M []0 d 36 873 m 36 849 l 0 837 m 24 837 l 621 873 m 621 849 l 657 837 m 633 837 l 36 36 m 36 60 l 0 72 m 24 72 l 621 36 m 621 60 l 657 72 m 633 72 l S /Cs9 CS 1 SCN 0.25 w 36 873 m 36 849 l 0 837 m 24 837 l 621 873 m 621 849 l 657 837 m 633 837 l 36 36 m 36 60 l 0 72 m 24 72 l 621 36 m 621 60 l 657 72 m 633 72 l S 1 G 0.5 w 304.5 861 m 352.5 861 l 304.5 48 m 352.5 48 l 12 478.5 m 12 430.5 l 645 478.5 m 645 430.5 l 328.5 873 m 328.5 849 l 328.5 60 m 328.5 36 l 0 454.5 m 24 454.5 l 633 454.5 m 657 454.5 l 328.5 861 m 334.5 861 l 334.5 857.688 331.812 855 328.5 855 c 325.188 855 322.5 857.688 322.5 861 c 322.5 864.312 325.188 867 328.5 867 c 331.812 867 334.5 864.312 334.5 861 c 328.5 48 m 334.5 48 l 334.5 44.688 331.812 42 328.5 42 c 325.188 42 322.5 44.688 322.5 48 c 322.5 51.312 325.188 54 328.5 54 c 331.812 54 334.5 51.312 334.5 48 c 12 454.5 m 18 454.5 l 18 451.188 15.312 448.5 12 448.5 c 8.688 448.5 6 451.188 6 454.5 c 6 457.812 8.688 460.5 12 460.5 c 15.312 460.5 18 457.812 18 454.5 c 645 454.5 m 651 454.5 l 651 451.188 648.312 448.5 645 448.5 c 641.688 448.5 639 451.188 639 454.5 c 639 457.812 641.688 460.5 645 460.5 c 648.312 460.5 651 457.812 651 454.5 c S /Cs9 CS 1 SCN 0.25 w 304.5 861 m 352.5 861 l 304.5 48 m 352.5 48 l 12 478.5 m 12 430.5 l 645 478.5 m 645 430.5 l 328.5 873 m 328.5 849 l 328.5 60 m 328.5 36 l 0 454.5 m 24 454.5 l 633 454.5 m 657 454.5 l 328.5 861 m 334.5 861 l 334.5 857.688 331.812 855 328.5 855 c 325.188 855 322.5 857.688 322.5 861 c 322.5 864.312 325.188 867 328.5 867 c 331.812 867 334.5 864.312 334.5 861 c 328.5 48 m 334.5 48 l 334.5 44.688 331.812 42 328.5 42 c 325.188 42 322.5 44.688 322.5 48 c 322.5 51.312 325.188 54 328.5 54 c 331.812 54 334.5 51.312 334.5 48 c 12 454.5 m 18 454.5 l 18 451.188 15.312 448.5 12 448.5 c 8.688 448.5 6 451.188 6 454.5 c 6 457.812 8.688 460.5 12 460.5 c 15.312 460.5 18 457.812 18 454.5 c 645 454.5 m 651 454.5 l 651 451.188 648.312 448.5 645 448.5 c 641.688 448.5 639 451.188 639 454.5 c 639 457.812 641.688 460.5 645 460.5 c 648.312 460.5 651 457.812 651 454.5 c S endstream endobj 139 0 obj << /Type /Page /Parent 495 0 R /Resources 140 0 R /Contents 141 0 R /Thumb 411 0 R /MediaBox [ 0 0 684 873 ] /CropBox [ 0 0 684 873 ] /Rotate 0 >> endobj 140 0 obj << /ProcSet [ /PDF /Text ] /Font << /F1 515 0 R /F2 518 0 R /F3 261 0 R /F5 262 0 R /F7 267 0 R /F8 268 0 R /F9 269 0 R >> /ExtGState << /GS1 523 0 R /GS2 521 0 R >> /ColorSpace << /Cs9 520 0 R /Cs10 264 0 R >> >> endobj 141 0 obj << /Length 13035 >> stream 1 g /GS1 gs 0 873 m 0 873 l f q 1 i 27 846 603 -783 re 0 873 m W n 0 873 684 -873 re W n BT /F5 1 Tf 11 0 0 11 63 631.0777 Tm 0 0 0 1 k /GS2 gs -0.0001 Tc 0.025 Tw [(S)17.8(ugar is no good)]TJ 3.3 -1.0909 TD [(O)5.8(nce it)79.8()33.1(s)0( cast among the white sand)11.9()]TJ /F1 1 Tf 7 0 0 7 271.8081 611.0777 Tm [(T)119.8(ed H)5.7(awkins)]TJ 29.09 0 0 29.09 62.2227 579.0776 Tm 0 Tc 0 Tw (S)Tj 11 0 0 11 76.375 591.0776 Tm -0.0001 Tc 0.1986 Tw (ometimes tools of enormous utility arise as a natural)Tj T* 0.0518 Tw (consequence of solving what at first seems like a simple)Tj -1.2159 -1.0909 TD 0.2695 Tw [(pr)5.8(oblem. S)23.9(uch was the case with HTML::T)109.8(ableE)5.8(xtract,)]TJ T* 0.0429 Tw [(spawned in the quest for automatically r)9.7(etrieving historical)]TJ T* 0.025 Tw [(stock quotes with F)33.9(inance::Q)5.8(uoteH)17.8(ist.)]TJ 0 -2.1818 TD 0.3292 Tw [(F)35.9(or a human, r)9.7(etrieving information fr)5.8(om the w)5.8(eb is)]TJ 0 -1.0909 TD 0.0632 Tw [(straightfor)-17.9(war)13.8(d. S)23.9(t)0.1(ar)-7.9(t with y)5.8(our fav)5.8(orite site. I)5.8(f)0( it is do)11.9(wn,)]TJ T* 0.138 Tw [(mo)15.8(v)5.9(e)0( to another site until y)5.8(ou find one that is av)5.8(ailable.)]TJ T* 0.112 Tw [(Then submit y)5.8(our quer)-17.9(y and r)9.7(ead the r)9.7(esult. A)17.8(u)0.1(tomating)]TJ T* 0.1784 Tw [(this task should be simple. And much of the pr)5.7(ocess is,)]TJ T* 0.2313 Tw [(ex)11.9(cept for extracting the embedded information r)9.7(eliably)]TJ T* 0.0345 Tw [(and context-fr)9.7(ee. )44.8(Thus the quest for historical stock quotes)]TJ T* 0.0993 Tw [(in the F)33.9(inance::Q)5.8(uoteH)17.8(ist module begat another module:)]TJ T* 0.023 Tw [(HTML::T)109.8(ableE)5.8(xtract. D)5.8(escribing ho)11.9(w these modules wor)5.8(k)]TJ T* 0.1575 Tw [(will hopefully seed mor)9.7(e ideas for dependably r)9.7(eco)15.8(v)5.9(ering)]TJ T* 0.025 Tw (pearls of information cast among the sands of HTML.)Tj 0 -2.1818 TD 0.0954 Tw [(Why ar)9.7(e historical stock quotes desirable? After all, char)-7.9(ts)]TJ 0 -1.0909 TD 0.2797 Tw [(depicting the past stock per)-7.9(formance of companies ar)9.7(e)]TJ T* 0.0287 Tw [(r)9.9(eadily av)5.8(ailable on the w)5.8(e)-0.1(b)15.8(.)-0.1( I)11.9(n)0( my par)-7.9(ticular case, the itch)]TJ T* 0.1066 Tw [(that needed scratching was a desir)9.7(e to implement a )14.8(V)88(alue)]TJ T* 0.0037 Tw [(P)54(er S)11.9(har)9.7(e \()-12(VPS\) por)-7.9(tfolio tracking system. )44.8(The )14.8(VPS system)]TJ T* 0.0424 Tw [(is a method of tracking a personal por)-7.9(tfolio similar to ho)11.9(w)]TJ T* 0.1566 Tw [(a mutual fund tracks its per)-7.9(formance. )44.8(The )14.8(VPS index, a)]TJ T* 0.0119 Tc 0.363 Tw [(measur)9.7(e)0( of y)5.8(our por)-7.8(tfolio per)-7.8(formance, is consistent)]TJ T* -0.0001 Tc 0.0654 Tw [(r)9.9(egar)13.8(dless of y)5.8(our composite holdings on any giv)5.8(en day or)]TJ T* [(any motions of money into and out of y)5.8(our por)-7.9(tfolio)15.8(. F)35.8(o)0.2(r)]TJ T* 0.2377 Tw [(any windo)11.9(w of time in y)5.8(our por)-7.9(tfolio histor)-17.9(y)84.9(, y)5.8(ou can)]TJ T* 0.34 Tw [(r)9.9(eliably track its per)-7.9(formance against other funds and)]TJ T* -0.0142 Tw [(indices; after all, the name of the game isn)69.7()79.9(t)0( whether y)5.8(o)0(u ar)9.7(e)]TJ T* 0.1649 Tw [(up or do)11.9(wn on any giv)5.8(en day)84.9(, it)17.7()79.9(s)0( whether y)5.8(ou beat the)]TJ T* 0.2554 Tw [(indices. I)5.8(f)0( y)5.8(ou can)69.8()79.9(t)0( beat the av)5.8(erages, just dump y)5.8(our)]TJ T* 0.025 Tw (money into index funds.)Tj 0 -2.1818 TD 0.0148 Tc 0.3601 Tw [(F)35.9(or )14.8(VPS tracking, an arbitrar)-17.9(y number of fictitious)]TJ 0 -1.0909 TD -0.0001 Tc 0.1919 Tw [()59.9(por)-7.9(tfolio shar)9.7(es)39.7( ar)9.7(e assigned to y)5.8(our por)-7.9(tfolio, star)-7.9(ting)]TJ T* 0.0032 Tw [(fr)5.8(om the date it was cr)9.7(eated. )44.9(The initial number of shar)9.7(es is)]TJ T* 0.08 Tw [(not r)9.7(elev)5.8(ant, nor does it hav)5.8(e any r)9.7(elation to actual shar)9.7(es)]TJ T* 0.3502 Tw [(y)5.8(ou might hold in a par)-7.9(ticular company)84.9(. I)23.9(t)17.8()79.9(s)0( just an)]TJ 25.3636 56 TD 0.0199 Tc 0.4017 Tw [(arbitrar)-17.9(y star)-7.9(ting point to ser)-17.9(v)5.9(e)0( as a r)9.7(efer)9.7(ence for)]TJ 0 -1.0909 TD -0.0001 Tc 0.2687 Tw [(comparison to futur)9.7(e v)5.8(alues. F)35.8(or each day)84.9(, the )14.8(VPS is)]TJ T* 0.0983 Tw [(calculated b)5.8(y)0( dividing the total v)5.8(alue of y)5.8(our por)-7.9(tfolio b)5.8(y)]TJ T* 0.025 Tw [(the number of shar)9.7(es y)5.8(ou o)11.9(wn on that day)84.9(.)]TJ 0 -2.1818 TD 0.1126 Tw [(The number of shar)9.7(es in the por)-7.9(tfolio is affected only b)5.8(y)]TJ 0 -1.0909 TD 0.0547 Tw [(mo)15.8(ving cash into or out of the por)-7.9(tfolio account, which is)]TJ T* 0.0554 Tw [(equiv)5.8(alent to buying or selling a number of these shar)9.7(es at)]TJ T* 0.0421 Tw [(the )14.8(VPS for that day)84.9(. F)35.8(or example, if y)5.8(ou add cash to y)5.8(our)]TJ T* -0.0026 Tw [(por)-7.9(tfolio, the number of )14.9(VPS shar)9.7(es y)5.8(ou o)11.9(wn incr)9.7(eases, but)]TJ T* 0.2155 Tw [(the )14.8(VPS itself r)9.7(emains unchanged the v)5.8(alue of y)5.8(our)]TJ T* 0.3351 Tw [(fictitious shar)9.7(es r)9.7(emains constant, since adding money)]TJ T* 0.0394 Tw [(doesn)69.8()79.9(t)0( mean y)5.8(o)0.1(u)49.7()69.9(r)9.9(e)0( a better stock picker)59.7(. )14.8(W)9.7(ith an accurate)]TJ T* 0.2506 Tw [(r)9.9(ecor)13.8(d)0( of y)5.8(our por)-7.9(tfolio activities and the daily closing)]TJ T* -0.0141 Tw [(prices of the stocks y)5.8(ou o)11.9(wned, the entir)9.7(e )14.8(VPS r)9.7(e)0(cor)13.8(d of the)]TJ T* 0.025 Tw [(por)-7.9(tfolio can r)9.7(etr)5.8(oactiv)5.8(ely calculated.)]TJ 0 -2.1818 TD 0.1448 Tw [(VPS, incidentally)84.9(, is the method many por)-7.9(tfolio tracking)]TJ 0 -1.0909 TD 0.0323 Tw [(tools use to track stocks, such as P)53.9(o)0.2(r)-7.9(t)0(T)129.8(rak fr)5.8(om the M)23.9(otley)]TJ T* 0.1895 Tw [(F)35.9(ool. )44.8(They typically don)69.8()79.9(t)0( hav)5.8(e access to historical stock)]TJ T* -0.0101 Tw [(quotes, ho)11.9(w)5.8(e)0(v)5.8(e)0.1(r)59.7(,)-0.1( so the )14.9(VPS last calculated is simply carried)]TJ T* 0.0113 Tw [(for)-17.9(war)13.8(d each day until y)5.8(ou update y)5.8(our stock quotes again.)]TJ T* 0.0561 Tw [(R)12.1(e)0.1(tr)5.8(oactiv)5.8(e analysis of y)5.8(our por)-7.9(tfolio is not possible unless)]TJ T* 0.0209 Tw [(y)5.8(ou used the tracking tool on the first day y)5.8(ou star)-7.9(ted y)5.8(our)]TJ T* -0.016 Tw [(por)-7.9(tfolio)15.8(. And ev)5.8(en if y)5.8(ou )]TJ /F5 1 Tf 10.1841 0 TD -0.0002 Tc 0 Tw (had)Tj /F1 1 Tf 1.8265 0 TD -0.0001 Tc -0.016 Tw [(been using the tool fr)5.8(om the)]TJ -12.0106 -1.0909 TD 0.1538 Tw [(beginning, their method of stock updates still intr)5.8(oduces)]TJ T* 0.1836 Tw [(bugs in the )14.8(VPS calculation. P)29.7(ractically speaking, this is)]TJ T* -0.0135 Tw [(acceptable for a br)5.8(oad vie)-5.9(w of per)-7.9(formance, but not for fine)]TJ T* 0.0199 Tc 0.3654 Tw [(grained analysis. N)29.8(othing is mor)9.7(e irritating to P)53.9(erl)]TJ T* -0.0001 Tc 0.0597 Tw [(pr)5.8(ogrammers than incomplete data; why settle for a pr)9.7(etty)]TJ T* 0.025 Tw [(pictur)9.7(e when y)5.8(ou can make it gorgeous?)]TJ /F8 1 Tf 12 0 0 12 342 353.0776 Tm 0 Tc 0 Tw (H)Tj 10.44 0 0 10.44 351.9812 353.0776 Tm -0.0288 Tc (OW)Tj 12 0 0 12 373.897 353.0776 Tm 0 Tc (I)Tj 10.44 0 0 10.44 378.3821 353.0776 Tm (T)Tj 12 0 0 12 388.9707 353.0776 Tm (W)Tj 10.44 0 0 10.44 400.6378 353.0776 Tm 0.0228 Tc (ORKS)Tj /F1 1 Tf 11 0 0 11 342 327.0775 Tm -0.0001 Tc 0.1786 Tw [(The inter)-7.9(face for F)33.9(inance::Q)5.8(uoteH)17.8(ist is simple when w)5.8(e)]TJ T* 0.0533 Tw [(gloss o)15.8(v)5.9(er wher)9.7(e and ho)11.9(w the data is obtained. H)17.8(e)0.1(r)9.7(e)29.7()79.9(s)0( ho)11.9(w)]TJ T* 0.1517 Tw [(w)5.8(e)29.7()99.9(d)0( print out the quotes, splits, and dividends for thr)9.7(ee)]TJ T* 0.025 Tw [(stocks fr)5.8(om the beginning of 2000 until today:)]TJ /F2 1 Tf 7 0 0 7 355.8567 271.0776 Tm -0.0002 Tc 0.06 Tw (use Finance::QuoteHist;)Tj 0 -1.1429 TD -0.0001 Tc [($q = Finance::QuoteHist->new)]TJ 1.9795 -1.1429 TD 0 Tc 0 Tw (\()Tj 0.6598 -1.1429 TD -0.0002 Tc 0.06 Tw [(symbols)-2479.6(=> [qw\(LNUX MSFT IBM\)],)]TJ T* [(start_date => '01/01/2000',)]TJ T* [(end_date)-1904.7(=> 'today',)]TJ -0.6598 -1.1429 TD -0.0003 Tc 0 Tw (\);)Tj -1.9795 -2.2857 TD -0.0002 Tc 0.06 Tw (print "Quotes:\\n";)Tj 0 -1.1429 TD -0.0001 Tc [(foreach $row \($q->quotes\(\)\) {)]TJ 2.6394 -1.1429 TD -0.0201 Tc [(\($date, $open, $high, $low, $close, $volume\) = @$row;)]TJ T* -0.0002 Tc (print "$date $close\\n";)Tj -2.6394 -1.1429 TD 0 Tc 0 Tw (})Tj 0 -2.2857 TD -0.0002 Tc 0.06 Tw (@splits = $q->splits\(\);)Tj 0 -1.1429 TD (if \(@splits\) {)Tj 2.6394 -1.1429 TD (print "\\nSplits\\n";)Tj T* [(foreach $row \($q->splits\(\)\) {)]TJ 2.6394 -1.1429 TD -0.0001 Tc [(\($date, $new_shares, $old_shares\) = @$row;)]TJ T* (print "$date $new_shares:$old_shares\\n";)Tj /F1 1 Tf 12 0 0 12 63 90.3543 Tm 0 Tc 0 Tw [(46)-1100(F)]TJ 10.44 0 0 10.44 94.2795 90.3543 Tm -0.0001 Tc (ALL)Tj 12 0 0 12 115.6277 90.3543 Tm 0 Tc (2000)Tj /F3 1 Tf 30.9897 0.0003 TD -0.0002 Tc 0.0255 Tw [(The P)47.6(erl J)35.7(our)-8(nal #19)]TJ ET 0 0 0 0 k 63 798 531 -36.59 re 587.395 90.357 m f* BT /F8 1 Tf 16 0 0 16 63 786.4766 Tm 0 0 0 1 k 0 Tc 0 Tw (F)Tj 13.92 0 0 13.92 71.5273 786.4766 Tm -0.0002 Tc (INANCE)Tj 16 0 0 16 124.6174 786.4766 Tm -0.0001 Tc (::Q)Tj 13.92 0 0 13.92 144.946 786.4766 Tm -0.0002 Tc [(UO)41.8(TE)]TJ 16 0 0 16 183.3039 786.4766 Tm 0 Tc (H)Tj 13.92 0 0 13.92 196.2922 786.4766 Tm -0.0002 Tc [(IST)-322.5(AND)]TJ /F7 1 Tf 16 0 0 16 498.9249 786.4766 Tm -0.0104 Tw [(Matthe)9.6(w Sisk)]TJ /F8 1 Tf -27.2453 -1.125 TD 0 Tw (HTML::T)Tj 13.92 0 0 13.92 128.4192 768.4766 Tm -0.0001 Tc (ABLE)Tj 16 0 0 16 161.7373 768.4766 Tm 0 Tc (E)Tj 13.92 0 0 13.92 171.0147 768.4766 Tm -0.0002 Tc [(X)5.7(TRA)17.6(CT)]TJ ET /Cs10 CS 1 SCN 0 J 0 j 6 w 10 M []0 d 63 807 m 207 807 l S 0 0.03 0.3 0 k /GS1 gs 63.25 746.75 251.5 -89.5 re 226.198 768.477 m f* BT /F9 1 Tf 12 0 0 12 165.6372 730.1238 Tm 0 0 0 1 k /GS2 gs (Modules)Tj /F1 1 Tf 9 0 0 9 72.5 716.1238 Tm 0 Tc [(F)34.1(inance::Q)5.9(uoteH)17.8(ist)-244.8(.............................................................CP)39.8(A)0.2(N)]TJ 0 -1.3333 TD [(HTML::T)109.9(ableE)5.9(xtract)-132.9(...........................................................CP)39.8(A)0.2(N)]TJ T* [(L)109.9(WP::U)29.8(serAgent)-154.4(..................................................................CP)39.8(A)0.2(N)]TJ T* [(D)6.1(ate::M)12(anip)-196.7(........................................................................CP)39.8(A)0.2(N)]TJ T* [(HTML::P)42(arser)-195.7(.....................................................................CP)39.8(A)0.2(N)]TJ ET 0 0 0 1 K 0.5 w /GS1 gs 63.25 746.75 251.5 -89.5 re 304.52 668.124 m S Q 0 0 0 0 k 1 i 37 874 191 -12 re 304.52 668.124 m f* BT /F2 1 Tf 8 0 0 8 39 864 Tm /Cs9 cs 1 scn -0.0004 Tc -0.0019 Tw (TPJ#19/9.26 9/27/00 10:35 AM Page 46)Tj ET 1 G 0 J 0 j 0.5 w 10 M []0 d 36 873 m 36 849 l 0 837 m 24 837 l 621 873 m 621 849 l 657 837 m 633 837 l 36 36 m 36 60 l 0 72 m 24 72 l 621 36 m 621 60 l 657 72 m 633 72 l S /Cs9 CS 1 SCN 0.25 w 36 873 m 36 849 l 0 837 m 24 837 l 621 873 m 621 849 l 657 837 m 633 837 l 36 36 m 36 60 l 0 72 m 24 72 l 621 36 m 621 60 l 657 72 m 633 72 l S 1 G 0.5 w 304.5 861 m 352.5 861 l 304.5 48 m 352.5 48 l 12 478.5 m 12 430.5 l 645 478.5 m 645 430.5 l 328.5 873 m 328.5 849 l 328.5 60 m 328.5 36 l 0 454.5 m 24 454.5 l 633 454.5 m 657 454.5 l 328.5 861 m 334.5 861 l 334.5 857.688 331.812 855 328.5 855 c 325.188 855 322.5 857.688 322.5 861 c 322.5 864.312 325.188 867 328.5 867 c 331.812 867 334.5 864.312 334.5 861 c 328.5 48 m 334.5 48 l 334.5 44.688 331.812 42 328.5 42 c 325.188 42 322.5 44.688 322.5 48 c 322.5 51.312 325.188 54 328.5 54 c 331.812 54 334.5 51.312 334.5 48 c 12 454.5 m 18 454.5 l 18 451.188 15.312 448.5 12 448.5 c 8.688 448.5 6 451.188 6 454.5 c 6 457.812 8.688 460.5 12 460.5 c 15.312 460.5 18 457.812 18 454.5 c 645 454.5 m 651 454.5 l 651 451.188 648.312 448.5 645 448.5 c 641.688 448.5 639 451.188 639 454.5 c 639 457.812 641.688 460.5 645 460.5 c 648.312 460.5 651 457.812 651 454.5 c S /Cs9 CS 1 SCN 0.25 w 304.5 861 m 352.5 861 l 304.5 48 m 352.5 48 l 12 478.5 m 12 430.5 l 645 478.5 m 645 430.5 l 328.5 873 m 328.5 849 l 328.5 60 m 328.5 36 l 0 454.5 m 24 454.5 l 633 454.5 m 657 454.5 l 328.5 861 m 334.5 861 l 334.5 857.688 331.812 855 328.5 855 c 325.188 855 322.5 857.688 322.5 861 c 322.5 864.312 325.188 867 328.5 867 c 331.812 867 334.5 864.312 334.5 861 c 328.5 48 m 334.5 48 l 334.5 44.688 331.812 42 328.5 42 c 325.188 42 322.5 44.688 322.5 48 c 322.5 51.312 325.188 54 328.5 54 c 331.812 54 334.5 51.312 334.5 48 c 12 454.5 m 18 454.5 l 18 451.188 15.312 448.5 12 448.5 c 8.688 448.5 6 451.188 6 454.5 c 6 457.812 8.688 460.5 12 460.5 c 15.312 460.5 18 457.812 18 454.5 c 645 454.5 m 651 454.5 l 651 451.188 648.312 448.5 645 448.5 c 641.688 448.5 639 451.188 639 454.5 c 639 457.812 641.688 460.5 645 460.5 c 648.312 460.5 651 457.812 651 454.5 c S endstream endobj 142 0 obj << /Type /Page /Parent 495 0 R /Resources 143 0 R /Contents 144 0 R /Thumb 413 0 R /MediaBox [ 0 0 684 873 ] /CropBox [ 0 0 684 873 ] /Rotate 0 >> endobj 143 0 obj << /ProcSet [ /PDF /Text ] /Font << /F1 515 0 R /F2 518 0 R /F3 261 0 R /F8 268 0 R >> /ExtGState << /GS1 523 0 R /GS2 521 0 R >> /ColorSpace << /Cs9 520 0 R >> >> endobj 144 0 obj << /Length 12707 >> stream 1 g /GS1 gs 0 873 m 0 873 l f q 1 i 27 846 603 -783 re 0 873 m W n 0 873 684 -873 re W n BT /F2 1 Tf 7 0 0 7 95.3323 805.2832 Tm 0 0 0 1 k /GS2 gs 0 Tc 0 Tw (})Tj -2.6394 -1.1429 TD (})Tj 0 -2.2857 TD -0.0002 Tc 0.06 Tw (@dividends = $q->dividends\(\);)Tj 0 -1.1429 TD (if \(@dividends\) {)Tj 2.6394 -1.1429 TD (print "\\nDividends\\n";)Tj T* (foreach $row \($q->dividends\(\)\) {)Tj 2.6394 -1.1429 TD (\($date, $amount\) = @$row;)Tj T* (print "$date $amount\\n";)Tj -2.6394 -1.1429 TD 0 Tc 0 Tw (})Tj -2.6394 -1.1429 TD (})Tj /F1 1 Tf 11 0 0 11 63 701.2832 Tm 0.0199 Tc 0.5329 Tw [(U)35.9(nless other)-17.9(wise specified, all v)5.8(alues r)9.7(eturned b)5.8(y)]TJ 0 -1.0909 TD 0.6744 Tw [(F)34(inance::Q)5.8(uoteH)17.8(ist ar)9.7(e adjusted for stock splits.)]TJ T* -0.0001 Tc -0.0229 Tw [(F)34(inance::Q)5.8(uoteH)17.8(ist uses D)5.8(ate::M)11.9(anip to parse dates, so any)]TJ T* 0.2065 Tw [(date formats acceptable b)5.8(y)0( that module can be used b)5.8(y)]TJ T* 0.0861 Tw [(F)34(inance::Q)5.8(uoteH)17.8(ist, including such useful phrasings as 2)]TJ T* 0.0803 Tw [(y)5.8(ears ago)49.7(. F)33.9(inance::Q)5.8(uoteH)17.8(ist uses L)109.8(WP::U)29.7(serAgent, and)]TJ T* -0.0244 Tw [(pr)5.8(o)15.9(vides an accessor method for configuring that wor)5.8(khorse)]TJ T* 0.025 Tw [(class for things like pr)5.8(o)5.9(xy access.)]TJ 0 -2.1818 TD -0.0051 Tc 0.1176 Tw [(J)35.8(ust as the DBI module pr)5.7(o)15.9(vides an abstraction lay)5.7(er o)15.8(v)5.9(er)]TJ 0 -1.0909 TD 0.0032 Tw [(differ)9.7(ent database engines, F)33.8(inance::Q)5.8(uoteH)17.8(ist separates the)]TJ T* 0.1302 Tw [(par)-7.9(ticulars of ho)11.9(w information is obtained fr)5.7(om ho)11.9(w that)]TJ T* 0.0089 Tw [(information is manipulated. I)11.8(n)0( this sense, ev)5.8(er)-17.9(y w)5.8(eb site is a)]TJ T* 0.105 Tw [(datastor)9.7(e with a unique AP)11.9(I. )14.8(W)9.7(ith historical stock quotes,)]TJ T* 0.025 Tw [(this AP)11.9(I is typically affected b)5.7(y)0( the follo)11.9(wing factors:)]TJ 0 -2.1818 TD -0.0001 Tc ( URL base for queries)Tj 0 -1.0909 TD [( Q)5.8(uer)-17.9(y limits)]TJ T* [( R)11.9(esult pr)9.7(esentation)]TJ 0 -2.1818 TD 0.0058 Tw [(The first factor is rather ob)5.8(vious; each site will hav)5.8(e its o)11.9(w)0(n)]TJ 0 -1.0909 TD 0.025 Tw [(URL and style of accepting quer)-17.9(y parameters.)]TJ 0 -2.1818 TD 0.2371 Tw [(The second is easily disco)15.8(v)5.9(e)0.1(r)9.7(ed thr)5.8(ough trial and err)5.8(or)59.7(.)]TJ 0 -1.0909 TD 0.0391 Tw [(S)12.1(ome sites r)9.7(eturn up to a month of data for a single quer)-17.9(y)84.9(,)]TJ T* 0.0927 Tw [(some up to a y)5.8(ear)59.7(, and so on. S)11.9(ome sites, such as )14.9(Y)67.8(ahoo!,)]TJ T* 0.0746 Tw [(hav)5.8(e differ)9.7(ent quer)-17.9(y limits depending on ho)11.9(w y)5.8(ou r)9.7(equest)]TJ T* 0.1421 Tw [(the information. )14.8(When ther)9.7(e ar)9.7(e limits inv)5.8(olv)5.8(ed, the full)]TJ T* -0.0196 Tw [(quer)-17.9(y might be composed of sev)5.8(eral sub-queries. )44.9(T)129.9(uning for)]TJ T* -0.0266 Tw [(quer)-17.9(y limits is impor)-7.9(tant for two r)9.7(easons: so that y)5.8(ou can be)]TJ T* 0.1286 Tw [(sur)9.7(e y)5.8(o)0.1(u)49.7()69.9(r)9.9(e)0( co)15.8(v)5.9(ering the full range of y)5.8(our quer)-17.9(y)84.9(,)0( and for)]TJ T* 0.0852 Tw [(making y)5.8(our r)9.7(etriev)5.8(als as efficient as possible b)5.8(y)0( using the)]TJ T* 0.025 Tw [(largest ranges possible per sub-quer)-17.9(y)84.9(.)]TJ 0 -2.1818 TD -0.0002 Tw [(The thir)13.8(d factor r)9.7(esult pr)9.7(esentation is potentially one)]TJ 0 -1.0909 TD 0.0199 Tc 0.3607 Tw [(of the largest impediments to r)9.8(eliable w)5.8(eb mining,)]TJ T* 0 Tc 0.0028 Tw [(especially if the r)9.8(esults ar)9.8(e pr)9.8(esented in HTML. I)23.9(t)0.1( is easy to)]TJ T* 0.009 Tc 0.3659 Tw [(grab a w)5.8(eb page and extract a par)-7.8(ticular nugget of)]TJ T* -0.0001 Tc -0.016 Tw [(information fr)5.8(om the HTML. I)23.8(t)0( is mor)9.7(e difficult to r)9.7(eliably)]TJ T* 0.1418 Tw [(and adaptiv)5.8(ely extract that nugget despite changes in the)]TJ T* 0.0199 Tc 0.6078 Tw [(lay)5.8(out of the surr)5.8(ounding HTML. )45(That)17.8()79.9(s wher)9.7(e)]TJ T* -0.0001 Tc -0.032 Tw [(HTML::T)109.8(ableE)5.8(xtract comes in, and w)5.8(e)29.7()12(ll talk about it soon. )]TJ /F8 1 Tf 12 0 0 12 63 183.2832 Tm 0 Tc 0 Tw (B)Tj 10.44 0 0 10.44 70.7634 183.2832 Tm 0.0227 Tc [(EHIND)-381.5(THE)]TJ 12 0 0 12 136.4603 183.2832 Tm 0 Tc (C)Tj 10.44 0 0 10.44 145.0265 183.2832 Tm 0.0227 Tc [(UR)51.4(T)88.7(AINS)]TJ /F1 1 Tf 11 0 0 11 63 157.2832 Tm -0.0001 Tc 0.3259 Tw [(F)34(inance::Q)5.8(uoteH)17.8(ist can be vie)-5.9(w)5.8(ed as an aggr)9.7(egate for)]TJ T* 0.0926 Tw [(sev)5.8(eral site-specific modules. I)5.8(f)0( the first site fails, then the)]TJ T* -0.0205 Tw (next site in line is attempted, and so on. A site might fail for)Tj T* 0.1446 Tw [(sev)5.8(eral r)9.7(easons: perhaps it)17.7()79.9(s)0( temporarily out of ser)-17.9(vice, or)]TJ 25.3636 61.8904 TD 0.0537 Tw [(perhaps it doesn)69.8()79.9(t)0.1( carr)-17.9(y information about a defunct ticker)]TJ 0 -1.0909 TD 0.0729 Tw [(symbol. S)11.9(ome of the mor)9.7(e r)9.7(eliable sites, such as )14.8(Y)67.8(a)0(hoo! or)]TJ T* 0.0002 Tw [(the M)23.9(otley F)35.8(ool, do not pr)5.8(o)15.9(vide information on companies)]TJ T* 0.1695 Tw [(that ar)9.7(e no longer publicly traded under an old symbol.)]TJ T* -0.0058 Tw [(U)35.9(nder these cir)5.8(cumstances, it is wise to include a site which)]TJ T* -0.0127 Tw [(has this information but might be less r)9.7(eliable for )39.7(first tier)19.7()]TJ T* 0.0841 Tw [(use. A thir)13.8(d way for a site to fail is when the site URL or)]TJ T* 0.025 Tw [(content has been significantly alter)9.7(ed.)]TJ 0 -2.2727 TD 0.1394 Tw (The parameter for specifying this sequence of sites is the)Tj /F2 1 Tf 9 0 0 9 342 681.0776 Tm -0.0002 Tc 0 Tw (lineup)Tj /F1 1 Tf 11 0 0 11 377.7586 681.0776 Tm -0.0001 Tc 0.056 Tw [(parameter)59.7(. )44.8(The v)5.8(alues ar)9.7(e site-specific class names.)]TJ -3.2508 -1.0909 TD -0.0005 Tw [(The follo)11.9(wing is identical to the example abo)15.8(v)5.9(e, ex)11.9(cept that)]TJ T* 0.025 Tw [(the default lineup is explicitly pr)5.8(o)15.9(vided:)]TJ /F2 1 Tf 7 0 0 7 360.4756 636.0776 Tm -0.0002 Tc 0.06 Tw ($q = Finance::QuoteHist->new)Tj 1.9795 -1.1429 TD 0 Tc 0 Tw (\()Tj 0.6598 -1.1429 TD -0.0002 Tc 0.06 Tw [(lineup => [qw\()]TJ 6.4625 -1.1429 TD 0 Tw (Finance::QuoteHist::Yahoo)Tj T* (Finance::QuoteHist::MotleyFool)Tj T* (Finance::QuoteHist::FinancialWeb)Tj -0.1359 -1.1429 TD (\)],)Tj -6.3267 -1.1429 TD -0.0001 Tc 0.0599 Tw [(symbols => [qw\(LNUX MSFT IBM\)],)]TJ T* -0.0002 Tc [(start_date => '01/01/2000',)]TJ T* [(end_date => 'today',)]TJ -0.6598 -1.1429 TD -0.0003 Tc 0 Tw (\);)Tj 9 0 0 9 342 531.0776 Tm -0.0001 Tc (Finance::QuoteHist::new\(\))Tj /F1 1 Tf 11 0 0 11 482.1479 531.0776 Tm 0.221 Tw [(r)9.9(eturns a r)9.7(efer)9.7(ence to an)]TJ -12.7407 -1.0909 TD -0.0153 Tw (object blessed into the first site-specific class specified in the)Tj T* 0.0715 Tw [(lineup)15.8(. )44.9(The r)9.7(emaining site-specific classes ar)9.7(e passed along)]TJ T* 0.2981 Tw [(as the next lineup in the ev)5.8(ent that the first site has)]TJ T* -0.0002 Tc 0 Tw [(pr)5.7(oblems.)]TJ 0 -2.2727 TD 0.0199 Tc 0.8644 Tw [(The site-specific classes ar)9.8(e all sub-classes of)]TJ 0 -1.0909 TD -0.0001 Tc 0.0006 Tw [(F)34(inance::Q)5.8(uoteH)17.8(ist::G)5.8(eneric, which is the engine that does)]TJ T* 0.2188 Tw [(most of the wor)5.8(k. F)35.8(or simple HTML quote extraction,)]TJ T* 0.3701 Tw [(these sub-classes need to pr)5.8(o)15.9(vide is a single method,)]TJ /F2 1 Tf 9 0 0 9 342 410.0776 Tm -0.0002 Tc 0 Tw (quote_urls\(\))Tj /F1 1 Tf 11 0 0 11 406.7842 410.0776 Tm -0.0001 Tc 0.2278 Tw [(, which r)9.7(eturns a list of URLs for quote)]TJ -5.8895 -1.0909 TD 0.2187 Tw [(r)9.9(etriev)5.8(al giv)5.8(en a ticker symbol and date range. )14.8(Y)93.9(ou can)]TJ T* 0.1835 Tw [(o)15.9(v)5.9(erride the )]TJ /F2 1 Tf 9 0 0 9 399.2208 386.0776 Tm -0.0002 Tc 0 Tw (new\(\))Tj /F1 1 Tf 11 0 0 11 430.9823 386.0776 Tm -0.0001 Tc 0.1835 Tw [(constr)-7.9(uctor to set default parameters)]TJ -8.0893 -1.0909 TD 0.0862 Tw (that apply to the site, such as )Tj /F2 1 Tf 9 0 0 9 474.0854 374.0776 Tm -0.0002 Tc 0 Tw (reverse)Tj /F1 1 Tf 11 0 0 11 515.5741 374.0776 Tm -0.0001 Tc 0.0862 Tw [(\(which inv)5.8(er)-7.9(ts the)]TJ -15.7795 -1.0909 TD 0.0677 Tw [(or)13.8(der of the quotes fr)5.8(om ho)11.9(w they appear on the page\) or)]TJ /F2 1 Tf 9 0 0 9 342 350.0776 Tm -0.0002 Tc 0 Tw (column_labels)Tj /F1 1 Tf 11 0 0 11 417.7277 350.0776 Tm -0.0001 Tc 0.2541 Tw [(\(which affects ho)11.9(w tables ar)9.7(e extracted)]TJ -6.8843 -1.0909 TD 0.025 Tw [(fr)5.8(om the HTML\).)]TJ 0 -2.2727 TD 0.1112 Tw [(Ther)9.7(e ar)9.7(e also pr)5.8(o)15.9(visions for sites that pr)5.8(o)15.9(vide mor)9.7(e)0( than)]TJ 0 -1.0909 TD 0.2867 Tw [(just HTML quotes. )14.8(Y)67.8(ahoo!, for example, also pr)5.8(o)15.9(vides)]TJ T* 0.0717 Tw [(information on stock dividends and splits. I)5.8(f)0.1( it)17.8()79.9(s)0( quotes or)]TJ T* 0.2172 Tw [(dividends y)5.8(o)0(u ar)9.7(e inter)9.7(ested in, the )14.8(Y)67.8(ahoo! data can be)]TJ T* 0.1637 Tw [(quickly do)11.9(wnloaded in CSV format rather than HTML.)]TJ T* 0.0062 Tc 0.3687 Tw [(S)12.1(ometimes, such as with split information and non-)]TJ T* -0.0001 Tc 0.1105 Tw [(adjusted quotes, the data is only av)5.8(ailable in HTML. F)35.8(o)0.2(r)]TJ T* 0.0199 Tc 0.4468 Tw [(splits, matters ar)9.7(e complicated fur)-7.8(ther because the)]TJ T* -0.0001 Tc 0.1736 Tw [(information is embedded in the r)9.7(egular quote r)9.7(esults )]TJ T* 0.0199 Tc 0.9528 Tw [(ther)9.7(e)29.7()79.9(s no special quer)-17.9(y dedicated to splits.)]TJ T* -0.0001 Tc 0.367 Tw [(F)34(inance::Q)5.8(uoteH)17.8(ist can also automatically adjust non-)]TJ T* 0.0335 Tw [(adjusted data as w)5.8(ell as r)9.7(epor)-7.9(t which site class r)9.7(etriev)5.8(ed the)]TJ T* 0.0199 Tc 0.7003 Tw [(data for a par)-7.9(ticular ticker symbol. E)29.8(v)5.9(entually)84.9(,)]TJ T* 0.0172 Tc 0.3577 Tw [(F)34(inance::Q)5.9(uoteH)17.8(ist will also be capable of curr)9.8(ency)]TJ T* -0.0001 Tc 0 Tw [(conv)5.8(ersion.)]TJ 0 -2.1818 TD 0.2557 Tw [(F)34(inance::Q)5.8(uoteH)17.8(ist is curr)9.7(ently equipped to parse both)]TJ 12 0 0 12 517.3723 90.3543 Tm 0 Tc 0 Tw (F)Tj 10.44 0 0 10.44 523.4518 90.3543 Tm -0.0001 Tc (ALL)Tj 12 0 0 12 544.7999 90.3543 Tm 0 Tc 0.025 Tw [(2000 47)]TJ /F3 1 Tf -40.15 0 TD -0.0002 Tc 0.0255 Tw [(The P)47.6(erl J)35.7(our)-8(nal #19)]TJ ET Q 0 0 0 0 k /GS2 gs 1 i 37 874 191 -12 re 162.892 90.354 m f* BT /F2 1 Tf 8 0 0 8 39 864 Tm /Cs9 cs 1 scn -0.0004 Tc -0.0019 Tw (TPJ#19/9.26 9/27/00 10:35 AM Page 47)Tj ET 1 G 0 J 0 j 0.5 w 10 M []0 d 36 873 m 36 849 l 0 837 m 24 837 l 621 873 m 621 849 l 657 837 m 633 837 l 36 36 m 36 60 l 0 72 m 24 72 l 621 36 m 621 60 l 657 72 m 633 72 l S /Cs9 CS 1 SCN 0.25 w 36 873 m 36 849 l 0 837 m 24 837 l 621 873 m 621 849 l 657 837 m 633 837 l 36 36 m 36 60 l 0 72 m 24 72 l 621 36 m 621 60 l 657 72 m 633 72 l S 1 G 0.5 w 304.5 861 m 352.5 861 l 304.5 48 m 352.5 48 l 12 478.5 m 12 430.5 l 645 478.5 m 645 430.5 l 328.5 873 m 328.5 849 l 328.5 60 m 328.5 36 l 0 454.5 m 24 454.5 l 633 454.5 m 657 454.5 l 328.5 861 m 334.5 861 l 334.5 857.688 331.812 855 328.5 855 c 325.188 855 322.5 857.688 322.5 861 c 322.5 864.312 325.188 867 328.5 867 c 331.812 867 334.5 864.312 334.5 861 c 328.5 48 m 334.5 48 l 334.5 44.688 331.812 42 328.5 42 c 325.188 42 322.5 44.688 322.5 48 c 322.5 51.312 325.188 54 328.5 54 c 331.812 54 334.5 51.312 334.5 48 c 12 454.5 m 18 454.5 l 18 451.188 15.312 448.5 12 448.5 c 8.688 448.5 6 451.188 6 454.5 c 6 457.812 8.688 460.5 12 460.5 c 15.312 460.5 18 457.812 18 454.5 c 645 454.5 m 651 454.5 l 651 451.188 648.312 448.5 645 448.5 c 641.688 448.5 639 451.188 639 454.5 c 639 457.812 641.688 460.5 645 460.5 c 648.312 460.5 651 457.812 651 454.5 c S /Cs9 CS 1 SCN 0.25 w 304.5 861 m 352.5 861 l 304.5 48 m 352.5 48 l 12 478.5 m 12 430.5 l 645 478.5 m 645 430.5 l 328.5 873 m 328.5 849 l 328.5 60 m 328.5 36 l 0 454.5 m 24 454.5 l 633 454.5 m 657 454.5 l 328.5 861 m 334.5 861 l 334.5 857.688 331.812 855 328.5 855 c 325.188 855 322.5 857.688 322.5 861 c 322.5 864.312 325.188 867 328.5 867 c 331.812 867 334.5 864.312 334.5 861 c 328.5 48 m 334.5 48 l 334.5 44.688 331.812 42 328.5 42 c 325.188 42 322.5 44.688 322.5 48 c 322.5 51.312 325.188 54 328.5 54 c 331.812 54 334.5 51.312 334.5 48 c 12 454.5 m 18 454.5 l 18 451.188 15.312 448.5 12 448.5 c 8.688 448.5 6 451.188 6 454.5 c 6 457.812 8.688 460.5 12 460.5 c 15.312 460.5 18 457.812 18 454.5 c 645 454.5 m 651 454.5 l 651 451.188 648.312 448.5 645 448.5 c 641.688 448.5 639 451.188 639 454.5 c 639 457.812 641.688 460.5 645 460.5 c 648.312 460.5 651 457.812 651 454.5 c S endstream endobj 145 0 obj << /Type /Page /Parent 495 0 R /Resources 146 0 R /Contents 147 0 R /Thumb 415 0 R /MediaBox [ 0 0 684 873 ] /CropBox [ 0 0 684 873 ] /Rotate 0 >> endobj 146 0 obj << /ProcSet [ /PDF /Text ] /Font << /F1 515 0 R /F2 518 0 R /F3 261 0 R /F5 262 0 R /F8 268 0 R /F9 269 0 R >> /ExtGState << /GS1 523 0 R /GS2 521 0 R >> /ColorSpace << /Cs9 520 0 R >> >> endobj 147 0 obj << /Length 12517 >> stream 1 g /GS1 gs 0 873 m 0 873 l f q 1 i 27 846 603 -783 re 0 873 m W n 0 873 684 -873 re W n BT /F1 1 Tf 11 0 0 11 63 802.0776 Tm 0 0 0 1 k /GS2 gs -0.0001 Tc 0.13 Tw [(HTML and CSV \(comma-separated v)5.8(alues\) data. CSV is)]TJ 0 -1.0909 TD 0.3095 Tw [(quick to do)11.9(wnload, and is the format in which most)]TJ T* 0.2375 Tw [(F)34(inance::Q)5.8(uoteH)17.8(ist queries will be fulfilled \(cour)-7.9(tesy of)]TJ T* 0.1039 Tw [(Y)67.8(ahoo!\). CSV is fast and boring. All other sites, and ev)5.8(en)]TJ T* 0.0576 Tw [(Y)67.8(ahoo! in some cir)5.8(cumstances, pr)5.8(o)15.9(vide the data in HTML)]TJ T* 0.025 Tw [(tables. HTML is big, messy)84.9(, and inter)9.7(esting.)]TJ /F8 1 Tf 12 0 0 12 63 716.0776 Tm 0.0198 Tc 0.0255 Tw (HTML E)Tj 10.44 0 0 10.44 110.4546 716.0776 Tm 0.0228 Tc 0 Tw [(X)5.7(TRA)17.6(CTION)]TJ /F1 1 Tf 11 0 0 11 63 690.0776 Tm -0.0051 Tc 0.2487 Tw [(M)12(a)0.3(r)5.8(kup languages ser)-17.9(v)5.9(e)0( a purpose: pr)5.7(o)15.9(viding a parsable)]TJ T* 0.0752 Tw [(substrate for information. I)11.8(n)0( the case of HTML, the point)]TJ T* 0.119 Tw [(of this substrate is to giv)5.7(e computers a clue about ho)11.8(w to)]TJ T* 0.0466 Tw [(pr)9.7(esent the information in a mor)9.6(e human-r)9.7(eadable fashion.)]TJ T* 0.2435 Tw [(O)5.8(ften, when information is massaged to be mor)9.6(e easily)]TJ T* 0.0147 Tc 0.3552 Tw [(digested b)5.8(y)0( humans, visual elements ar)9.6(e intr)5.8(oduced,)]TJ T* 0.0149 Tc 0.4522 Tw [(obscuring the data for computers. L)5.8(uckily)84.9(, HTML)]TJ T* -0.0051 Tc 0.1195 Tw [(str)-7.9(uctur)9.7(es ar)9.7(e sometimes lackadaisical in their obfuscation.)]TJ T* -0.0048 Tw [(They slip up)15.8(, and let computer-friendly contextual clues slip)]TJ T* 0.025 Tw [(into the pr)9.7(esentation. S)23.8(uch is the case with HTML tables.)]TJ 0 -2.1818 TD 0.0199 Tc 0.9465 Tw [(The r)9.7(eal her)5.8(o of F)33.9(inance::Q)5.8(uoteH)17.8(ist is the)]TJ 0 -1.0909 TD -0.0001 Tc 0.0534 Tw [(HTML::T)109.8(ableE)5.8(xtract module. )44.8(This module tries v)5.8(e)0.1(r)-17.9(y)0( har)13.8(d)]TJ T* 0.0268 Tw [(to decouple all HTML dependencies fr)5.8(om the information)]TJ T* -0.0224 Tw [(contained in tables, without r)9.7(esor)-7.9(ting to horr)9.7(endous r)9.7(egular)]TJ T* -0.0056 Tw [(expr)9.7(essions. Complete sev)5.8(erance fr)5.8(om HTML might sound)]TJ 0 -10.9091 TD 0.2447 Tw [(draconian, but it r)9.7(eleases the dev)5.8(eloper fr)5.8(om having to)]TJ 0 -1.0909 TD 0.2946 Tw [(adjust extraction code whenev)5.8(er a w)5.8(eb site is tw)5.8(eaked)]TJ T* 0.1805 Tw [(slightly)84.9(. I)11.9(n)0( the case of tabular information, it r)9.7(eally isn)69.8()79.9(t)]TJ T* -0.0062 Tw [(impor)-7.9(tant that the information is cloaked in HTML. )14.8(What)]TJ T* 0.025 Tw [(is impor)-7.9(tant is that the information is organiz)5.8(ed in a grid.)]TJ 0 -2.1818 TD -0.0051 Tc 0.0084 Tw [(As any)5.8(one who has play)5.7(ed with HTML parsers can tell y)5.7(ou,)]TJ 0 -1.0909 TD 0.015 Tw [(mar)5.8(kup languages can be modeled as tr)9.6(ee str)-7.9(uctur)9.7(es \(see the)]TJ T* 0.1722 Tw [(HTML::E)11.9(lement pod for commentar)-17.9(y on this topic, and)]TJ T* -0.0193 Tw [(S)12.1(ean B)11.9(u)0.1(r)5.8(k)-0.1(e)29.7()79.9(s )]TJ /F5 1 Tf 4.955 0 TD (Scanning HTML)Tj /F1 1 Tf 6.6211 0 TD [(ar)-7.9(ticle else)-6(wher)9.7(e in this issue\).)]TJ -11.5761 -1.0909 TD 0.0244 Tw [(M)12(a)0(pping a tr)9.7(ee str)-7.9(uctur)9.7(e to a grid, as with HTML tables, is)]TJ T* 0.1688 Tw [(a lot of wor)5.8(k)0( for lay)5.8(out managers, especially when tables)]TJ T* 0.3667 Tw [(contain other tables. I)5.7(f)0( the primar)-17.9(y goal is extracting)]TJ T* 0.1226 Tw [(information rather than r)9.6(endering it, most of these lay)5.7(out)]TJ T* -0.007 Tw [(headaches can be av)5.7(oided b)5.8(y)0( doing two things: first, tr)9.6(eating)]TJ T* -0.0235 Tw [(all tables separately)84.8(, r)9.7(egar)13.8(dless of whether they ar)9.6(e a subtable;)]TJ T* 0.1664 Tw [(and second, mapping the cells of each table to a grid b)5.6(y)]TJ T* 0.025 Tw (ignoring cell spans and using empty placeholder cells.)Tj 0 -2.1818 TD -0.0001 Tc 0.1567 Tw [(G)24(rid contexts ar)9.7(e easy for computers to understand, and)]TJ 0 -1.0909 TD 0.1685 Tw [(that)17.7()79.9(s)0( the job of HTML::T)109.8(ableE)5.8(xtract. I)23.9(t)0.1( r)9.7(ecasts tr)9.7(ee-like)]TJ T* -0.0135 Tw [(HTML tables into grids, b)5.8(y)0( car)9.7(efully keeping count of r)5.8(o)12(ws)]TJ T* 0.025 Tw (and cells in each table.)Tj 25.3636 61.4545 TD 0.0934 Tw (That alone is an enormous step in decoupling the tabular)Tj 0 -1.0909 TD -0.0077 Tw [(natur)9.7(e of data fr)5.8(om the HTML used to pr)9.7(esent it. )44.9(The only)]TJ T* 0.2577 Tw [(r)9.9(emaining question is )]TJ /F5 1 Tf 9.3231 0 TD 0 Tw (which)Tj /F1 1 Tf 2.7301 0 TD 0.2577 Tw (table on a page holds the)Tj -12.0531 -1.0909 TD 0.3631 Tw [(information. HTML::T)109.8(ableE)5.8(xtract offers thr)9.7(ee ways of)]TJ T* 0.0944 Tw [(distinguishing multiple tables on a w)5.8(eb page: depth, lay)5.8(er)]TJ T* -0.024 Tw [(count, and header information. )44.9(The )]TJ /F5 1 Tf 14.0282 0 TD 0 Tw (depth)Tj /F1 1 Tf 2.2526 0 TD -0.024 Tw [(mer)9.7(ely r)9.7(epr)9.7(esents)]TJ -16.2808 -1.0909 TD 0.0091 Tw [(ho)11.9(w deeply nested tables ar)9.7(e: a top-lev)5.8(el table \(that is, most)]TJ T* 0.0186 Tw [(of the tables that y)5.8(ou see when sur)-7.9(fing the w)5.8(eb\) is depth 0,)]TJ T* 0.025 Tw (a table within that table is depth 1, and so on.)Tj 0 -2.1818 TD 0.0853 Tw [(W)9.7(ithin each lay)5.8(er at a giv)5.8(en depth, each table has a )]TJ /F5 1 Tf 20.8847 0 TD 0 Tw (count)Tj /F1 1 Tf -20.8847 -1.0909 TD 0.1403 Tw [(r)9.9(epr)9.7(esenting the or)13.8(der of display)84.9(, star)-7.9(ting with 0. F)33.9(i)0(nally)84.9(,)]TJ T* -0.0036 Tw (tables can be targeted with )Tj /F5 1 Tf 10.4674 0 TD 0 Tw (headers)Tj /F1 1 Tf 2.6873 0 TD -0.0036 Tw [(, which ar)9.7(e nothing mor)9.7(e)]TJ -13.1546 -1.0909 TD 0.0698 Tw [(than pattern matches abo)15.8(v)5.9(e)0( columns of inter)9.7(est in a table.)]TJ T* 0.0331 Tw [(H)17.8(eaders ar)9.7(e the most context-fr)9.7(ee option of them all, since)]TJ T* 0.025 Tw [(they don)69.8()79.9(t)0.1( r)9.7(ely on spatial r)9.7(elationships betw)5.8(een tables.)]TJ 0 -2.1818 TD 0.0416 Tw [(HTML::T)109.8(ableE)5.8(xtract also offers mor)9.7(e)0( elaborate techniques)]TJ 0 -1.0909 TD 0.3029 Tw [(for specifying tables r)9.7(e)0.1(lativ)5.8(e to one another)59.7(, but these)]TJ T* 0.2393 Tw [(hav)5.8(en)69.8()79.9(t)-0.1( y)5.8(e)0(t been necessar)-17.9(y)0( for capturing historical stock)]TJ T* 0.2913 Tw [(quotes: the F)33.9(inance::Q)5.8(uoteH)17.8(ist modules only need the)]TJ T* 0.1182 Tw [(column headers. )44.9(The text pr)5.8(o)15.9(vided for headers ev)5.8(entually)]TJ T* -0.0312 Tw [(gets passed thr)5.8(ough a non-anchor)9.7(ed, case-insensitiv)5.8(e r)9.7(egular)]TJ T* 0.0547 Tw [(expr)9.7(ession. )44.8(The F)33.9(inance::Q)5.8(uoteH)17.8(ist modules curr)9.7(ently use)]TJ T* 0.025 Tw [(a HTML::T)109.8(ableE)5.8(xtract object like this:)]TJ /F2 1 Tf 7 0 0 7 355.6468 494.0776 Tm -0.0102 Tc 0.06 Tw ($te = HTML::TableExtract->new)Tj 1.9495 -1.1429 TD -0.0101 Tc [(\( headers => [qw\(Date Open High Low Close Volume\)] \);)]TJ -1.9495 -1.1429 TD -0.0102 Tc 0 Tw ($te->parse\($html_string\);)Tj T* 0.06 Tw (foreach \($te->rows\) {)Tj 2.5994 -1.1429 TD -0.0101 Tc (\($date, $open, $high, $low, $close, $volume\) = @$_;)Tj T* -0.0102 Tc 0 Tw (...)Tj -2.5994 -1.1429 TD 0 Tc (})Tj /F1 1 Tf 11 0 0 11 342 422.0776 Tm -0.0051 Tc -0.0305 Tw [(This code is all y)5.8(ou need to extract the quote data fr)5.7(om ev)5.8(er)-17.9(y)]TJ 0 -1.0909 TD -0.0044 Tw [(historical quote site I)49.6(v)5.8(e)-0.1( found so far)59.6(. H)17.7(istorical stock quotes)]TJ T* 0.0334 Tw [(ar)9.7(e amenable to parsing, since the column headers ar)9.6(e fairly)]TJ T* 0.1397 Tw [(uniform; the six wor)13.8(ds sho)11.9(wn abo)15.8(v)5.9(e)0( ar)9.7(e used ev)5.8(er)-17.9(ywher)9.7(e.)]TJ T* 0.3727 Tw [(Column or)13.8(der is handled b)5.8(y)0( the HTML::T)109.8(ableE)5.8(xtract)]TJ T* 0.1133 Tw [(module, which automatically r)9.6(eturns columns in the same)]TJ T* -0.0004 Tw [(or)13.8(der as the headers y)5.8(ou pr)5.8(o)15.9(vide, r)9.7(egar)13.8(dless of their or)13.8(dering)]TJ T* 0.025 Tw [(on the w)5.8(e)-0.1(b site.)]TJ 0 -2.1818 TD -0.0001 Tc -0.0357 Tw [(H)17.8(eader-based extraction is the most stable way to pull tables)]TJ 0 -1.0909 TD 0.0337 Tw [(out of HTML using HTML::T)109.8(ableE)5.8(xtract, but depths and)]TJ T* 0.025 Tw [(counts ar)9.7(e also av)5.8(ailable. Consider the follo)11.9(wing:)]TJ /F2 1 Tf 7 0 0 7 355.3318 270.0775 Tm -0.0251 Tc 0.0599 Tw [($te1 = new HTML::TableExtract\( depth => 0 \);)]TJ 0 -1.1429 TD 0 Tw ($te1->parse\($html_string\);)Tj T* 0.06 Tw (foreach $ts \($te1->table_states\) {)Tj 2.5394 -1.1429 TD [(print "Table found at ", join\(',', $ts->coords\), "\\n";)]TJ -2.5394 -1.1429 TD 0 Tc 0 Tw (})Tj 0 -2.2857 TD -0.0251 Tc 0.0599 Tw [($te2 = new HTML::TableExtract\( count => 1 \);)]TJ 0 -1.1429 TD 0 Tw ($te2->parse_file\(\\*HTML_FILE\);)Tj T* 0.06 Tw (foreach $ts \($te2->table_states\) {)Tj 2.5394 -1.1429 TD [(print "Table found at ", join\(',', $ts->coords\), "\\n";)]TJ -2.5394 -1.1429 TD 0 Tc 0 Tw (})Tj 0 -2.2857 TD -0.0251 Tc 0.0599 Tw [($te3 = new HTML::TableExtract\( depth => 0, count => 2 \);)]TJ 0 -1.1429 TD 0 Tw ($te3->parse\($html_string\);)Tj T* 0.06 Tw [(print "Unique table found at ",)]TJ 1.9045 -1.1429 TD [(join\(',', $te3->first_table_state_found->coords\), "\\n";)]TJ /F1 1 Tf 11 0 0 11 342 126.0775 Tm -0.0001 Tc 0.0856 Tw [(I)12(n)0( the first example, all tables at depth 0 ar)9.7(e extracted. I)11.9(n)]TJ 12 0 0 12 63 90.3543 Tm 0 Tc 0 Tw [(48)-1100(F)]TJ 10.44 0 0 10.44 94.2795 90.3543 Tm -0.0001 Tc (ALL)Tj 12 0 0 12 115.6277 90.3543 Tm 0 Tc (2000)Tj /F3 1 Tf 30.9897 0.0003 TD -0.0002 Tc 0.0255 Tw [(The P)47.6(erl J)35.7(our)-8(nal #19)]TJ /F9 1 Tf 14 0 0 14 86.7612 473.69 Tm -0.0102 Tc 0.0278 Tw [(Finance::QuoteHist lets y)24.7(ou use)]TJ -0.2375 -1.2 TD [(m)9.8(ultiple sour)24.7(ces of stock quotes.)]TJ -0.3791 -1.2 TD [(If the first site fails,)-195.9(the second site )]TJ 2.4189 -1.2 TD [(is attempted,)-196(and so on.)]TJ ET 0 0 0 1 K 0 J 0 j 2 w 10 M []0 d 63 493.27 m 315 493.27 l S 0.667 w 63 490.6 m 315 490.6 l 63 417.95 m 315 417.95 l S 2 w 63 415.28 m 315 415.28 l S Q 0 0 0 0 k 1 i 37 874 191 -12 re 265.866 423.29 m f* BT /F2 1 Tf 8 0 0 8 39 864 Tm /Cs9 cs 1 scn -0.0004 Tc -0.0019 Tw (TPJ#19/9.26 9/27/00 10:35 AM Page 48)Tj ET 1 G 0 J 0 j 0.5 w 10 M []0 d 36 873 m 36 849 l 0 837 m 24 837 l 621 873 m 621 849 l 657 837 m 633 837 l 36 36 m 36 60 l 0 72 m 24 72 l 621 36 m 621 60 l 657 72 m 633 72 l S /Cs9 CS 1 SCN 0.25 w 36 873 m 36 849 l 0 837 m 24 837 l 621 873 m 621 849 l 657 837 m 633 837 l 36 36 m 36 60 l 0 72 m 24 72 l 621 36 m 621 60 l 657 72 m 633 72 l S 1 G 0.5 w 304.5 861 m 352.5 861 l 304.5 48 m 352.5 48 l 12 478.5 m 12 430.5 l 645 478.5 m 645 430.5 l 328.5 873 m 328.5 849 l 328.5 60 m 328.5 36 l 0 454.5 m 24 454.5 l 633 454.5 m 657 454.5 l 328.5 861 m 334.5 861 l 334.5 857.688 331.812 855 328.5 855 c 325.188 855 322.5 857.688 322.5 861 c 322.5 864.312 325.188 867 328.5 867 c 331.812 867 334.5 864.312 334.5 861 c 328.5 48 m 334.5 48 l 334.5 44.688 331.812 42 328.5 42 c 325.188 42 322.5 44.688 322.5 48 c 322.5 51.312 325.188 54 328.5 54 c 331.812 54 334.5 51.312 334.5 48 c 12 454.5 m 18 454.5 l 18 451.188 15.312 448.5 12 448.5 c 8.688 448.5 6 451.188 6 454.5 c 6 457.812 8.688 460.5 12 460.5 c 15.312 460.5 18 457.812 18 454.5 c 645 454.5 m 651 454.5 l 651 451.188 648.312 448.5 645 448.5 c 641.688 448.5 639 451.188 639 454.5 c 639 457.812 641.688 460.5 645 460.5 c 648.312 460.5 651 457.812 651 454.5 c S /Cs9 CS 1 SCN 0.25 w 304.5 861 m 352.5 861 l 304.5 48 m 352.5 48 l 12 478.5 m 12 430.5 l 645 478.5 m 645 430.5 l 328.5 873 m 328.5 849 l 328.5 60 m 328.5 36 l 0 454.5 m 24 454.5 l 633 454.5 m 657 454.5 l 328.5 861 m 334.5 861 l 334.5 857.688 331.812 855 328.5 855 c 325.188 855 322.5 857.688 322.5 861 c 322.5 864.312 325.188 867 328.5 867 c 331.812 867 334.5 864.312 334.5 861 c 328.5 48 m 334.5 48 l 334.5 44.688 331.812 42 328.5 42 c 325.188 42 322.5 44.688 322.5 48 c 322.5 51.312 325.188 54 328.5 54 c 331.812 54 334.5 51.312 334.5 48 c 12 454.5 m 18 454.5 l 18 451.188 15.312 448.5 12 448.5 c 8.688 448.5 6 451.188 6 454.5 c 6 457.812 8.688 460.5 12 460.5 c 15.312 460.5 18 457.812 18 454.5 c 645 454.5 m 651 454.5 l 651 451.188 648.312 448.5 645 448.5 c 641.688 448.5 639 451.188 639 454.5 c 639 457.812 641.688 460.5 645 460.5 c 648.312 460.5 651 457.812 651 454.5 c S endstream endobj 148 0 obj << /Type /Page /Parent 495 0 R /Resources 149 0 R /Contents 150 0 R /Thumb 417 0 R /MediaBox [ 0 0 684 873 ] /CropBox [ 0 0 684 873 ] /Rotate 0 >> endobj 149 0 obj << /ProcSet [ /PDF /Text ] /Font << /F1 515 0 R /F2 518 0 R /F3 261 0 R /F5 262 0 R /F8 268 0 R >> /ExtGState << /GS1 523 0 R /GS2 521 0 R >> /ColorSpace << /Cs9 520 0 R >> >> endobj 150 0 obj << /Length 11392 >> stream 1 g /GS1 gs 0 873 m 0 873 l f q 1 i 27 846 603 -783 re 0 873 m W n 0 873 684 -873 re W n BT /F1 1 Tf 11 0 0 11 63 802.0776 Tm 0 0 0 1 k /GS2 gs -0.0001 Tc 0.2509 Tw [(the second example, the second table at ev)5.8(er)-17.9(y depth ar)9.7(e)]TJ 0 -1.0909 TD 0.1194 Tw [(extracted. I)11.9(n)0( the last example, the thir)13.8(d table at depth 0 is)]TJ T* 0.1065 Tw [(extracted. P)29.7(r)6(o)15.9(viding a depth and count uniquely specifies a)]TJ T* 0.025 Tw [(par)-7.9(ticular table in an HTML document.)]TJ 0 -2.1818 TD -0.0167 Tw [(D)6(epths and counts wor)5.8(k w)5.8(ell for targeting tables, but they do)]TJ 0 -1.0909 TD 0.1573 Tw [(r)9.9(etain context that could foul up futur)9.7(e extractions. I)5.8(f)0( the)]TJ T* 0.1382 Tw [(maintainer of the w)5.8(eb site adds or r)9.7(emo)15.8(v)5.9(es mor)9.7(e tables, it)]TJ T* 0.2066 Tw [(may w)5.8(ell affect the depth and count of the page)29.7()79.9(s)0( tables,)]TJ T* 0.025 Tw [(which is why using the headers is likely to be mor)9.7(e r)5.8(obust.)]TJ /F8 1 Tf 12 0 0 12 63 668.0776 Tm 0 Tc 0 Tw (R)Tj 10.44 0 0 10.44 70.7344 668.0776 Tm 0.0228 Tc (OLLING)Tj 12 0 0 12 114.9514 668.0776 Tm 0 Tc (Y)Tj 10.44 0 0 10.44 122.0834 668.0775 Tm 0.0228 Tc (OUR)Tj 12 0 0 12 149.2884 668.0775 Tm 0 Tc (O)Tj 10.44 0 0 10.44 158.4919 668.0775 Tm 0.0225 Tc (WN)Tj /F1 1 Tf 11 0 0 11 63 642.0776 Tm -0.0001 Tc 0.0688 Tw [(I)5.9(f)0( y)5.8(ou find a ne)-6(w sour)5.8(ce of historical quotes not co)15.8(v)5.9(e)0.1(r)9.7(ed b)5.8(y)]TJ T* 0.0542 Tw [(the latest r)9.7(elease of F)33.9(inance::Q)5.8(uoteH)17.8(ist, y)5.8(ou can cr)9.7(eate y)5.8(our)]TJ T* 0.0056 Tc 0.3693 Tw [(o)12(wn F)33.8(i)-0.1(nance::Q)5.8(uoteH)17.7(ist module. Although the curr)9.6(ent)]TJ T* -0.0001 Tc 0.0834 Tw [(distribution is v)5.8(e)0.1(r)-17.9(y)0( adaptiv)5.8(e, ther)9.7(e)29.7()79.9(s always a possibility of a)]TJ T* 0.0583 Tw [(quote site changing dramatically enough to br)9.7(eak a module.)]TJ T* 0.0588 Tw [(Thanks to HTML::T)109.8(ableE)5.8(xtract, these failur)9.7(es ar)9.7(e less likely)]TJ T* 0.0767 Tw [(to inv)5.8(olv)5.8(e the specter of HTML lay)5.8(out than changes to the)]TJ T* 0.0278 Tw [(URL: either of the site itself)15.8(, or within the syntax for calls to)]TJ T* 0.3033 Tw [(a CGI pr)5.8(ogram. Looking under the hood, consider the)]TJ /F2 1 Tf 9 0 0 9 63 534.0776 Tm -0.0002 Tc 0 Tw (quote_urls\(\))Tj /F1 1 Tf 11 0 0 11 130.8092 534.0776 Tm -0.0001 Tc 0.025 Tw [(implementation used for the M)23.9(otley F)35.8(ool:)]TJ /F2 1 Tf 7 0 0 7 63 514.0776 Tm -0.0002 Tc 0.06 Tw (sub quote_urls {)Tj 2.6394 -1.1429 TD -0.0001 Tc [(my \($self, $ticker, $start_date, $end_date\) = @_;)]TJ T* -0.0002 Tc ($ticker or croak "Ticker symbol required\\n";)Tj T* -0.0001 Tc [($start_date = $self->{start_date} unless $start_date;)]TJ T* [($end_date = $self->{end_date} unless $end_date;)]TJ 0 -2.2857 TD -0.0002 Tc [(# For splitting dates of the form 'YYYYMMDD')]TJ 0 -1.1429 TD -0.0001 Tc [(my $date_pat = qr/^\\s*\(\\d{4}\)\(\\d{2}\)\(\\d{2}\)/;)]TJ 0 -2.2857 TD [(# Make sure date boundaries in the correct order.)]TJ 0 -1.1429 TD -0.0002 Tc [(if \($start_date gt $end_date\) {)]TJ 2.6394 -1.1429 TD -0.0001 Tc [(\($start_date, $end_date\) = \($end_date, $start_date\);)]TJ -2.6394 -1.1429 TD 0 Tc 0 Tw (})Tj 0 -2.2857 TD -0.0501 Tc 0.0599 Tw [(# Break date range into 30 day blocks \(last block will likely)]TJ 0 -1.1429 TD -0.0002 Tc (# end up being less than 30 days\))Tj T* [(my \(%date_pairs, $low_date, $high_date\);)]TJ T* ($low_date = $start_date;)Tj T* (while \(1\) {)Tj 2.6394 -1.1429 TD -0.0001 Tc [($high_date = DateCalc\($low_date, '+ 30 days'\);)]TJ T* -0.0002 Tc (last if $high_date gt $end_date;)Tj T* ($date_pairs{$low_date} = $high_date;)Tj 0.6598 -1.1429 TD -0.0001 Tc ($low_date = DateCalc\($high_date, '+ 1 day'\);)Tj -3.2992 -1.1429 TD 0 Tc 0 Tw (})Tj T* -0.0002 Tc 0.06 Tw [(# Last query block always ends with end_date)]TJ T* ($date_pairs{$low_date} = $end_date;)Tj 0 -2.2857 TD (my @urls;)Tj 0 -1.1429 TD (foreach \(sort keys %date_pairs\) {)Tj 2.6394 -1.1429 TD (# Break dates into year, month, day.)Tj T* (my \($sy, $sm, $sd\) = /$date_pat/;)Tj T* -0.0001 Tc [(my \($ey, $em, $ed\) = $date_pairs{$_} =~ /$date_pat/;)]TJ T* -0.0002 Tc (# Construct and store URL)Tj T* [(my $base =)]TJ -5.2787 -1.1429 TD -0.0001 Tc 0 Tw ('http://quote.fool.com/historical/historicalquotes.asp?';)Tj 5.2787 -1.1429 TD 0.0599 Tw [(my $query = join\('&', "startmo=$sm", "startday=$sd", )]TJ 23.3519 -1.1429 TD -0.0002 Tc 0 Tw ("startyr=$sy",)Tj -16.0936 -1.1429 TD -0.0001 Tc 0.0599 Tw ("endmo=$em", "endday=$ed", "endyr=$ey",)Tj T* -0.0002 Tc ("symbols=$ticker", "currticker=$ticker",)Tj 7.2583 -1.1429 TD 0 Tw ('period=daily'\);)Tj -14.5165 -1.1429 TD 0.06 Tw (push\(@urls, $base . $query\);)Tj -2.6394 -1.1429 TD 0 Tc 0 Tw (})Tj 0 -2.2857 TD -0.0002 Tc (@urls;)Tj -2.6394 -1.1429 TD 0 Tc (})Tj /F1 1 Tf 11 0 0 11 63 138.0775 Tm -0.0101 Tc 0.106 Tw [(The F)35.8(ool accepts star)-7.8(ting and ending dates, but only r)9.8(eturns)]TJ 0 -1.0909 TD 0.0099 Tc 0.4335 Tw [(the last month of data in the range specified. )44.7(This)]TJ 25.3636 61.4545 TD -0.0101 Tc 0.037 Tw (implementation of )Tj /F2 1 Tf 9 0 0 9 422.9154 802.0776 Tm 0 Tw (quote_urls\(\))Tj /F1 1 Tf 11 0 0 11 489.6669 802.0776 Tm 0.037 Tw [(divides the queries acr)5.8(oss)]TJ -13.4243 -1.0909 TD 0.0467 Tw [(thir)-7.9(ty-day incr)9.7(ements for a single symbol, r)9.8(elying heavily on)]TJ T* 0.0099 Tc 0 Tw (the )Tj /F2 1 Tf 9 0 0 9 363.1171 778.0776 Tm (DateCalc)Tj /F1 1 Tf 11 0 0 11 414.4183 778.0776 Tm 0.4119 Tw [(r)6(outine fr)5.8(om the lo)15.8(v)5.9(ely and talented)]TJ -6.5835 -1.0909 TD -0.0101 Tc 0.025 Tw [(D)6(ate::M)11.9(anip module.)]TJ 0 -2.1818 TD -0.0201 Tc -0.0095 Tw [(The site-specific F)33.8(inance::Q)5.8(uoteH)17.8(ist modules ar)9.6(e all subclasses)]TJ 0 -1.0909 TD 0.0644 Tw [(of F)33.9(inance::Q)5.8(uoteH)17.8(ist::G)5.8(eneric, and y)5.8(ou should inherit fr)5.7(om)]TJ T* -0.013 Tw [(this module as w)5.8(ell if y)5.8(o)0.1(u)49.7()69.9(r)9.9(e)0( going to be cr)9.6(eating y)5.8(our o)11.9(wn site-)]TJ T* 0.3226 Tw [(specific module. )44.8(The F)33.9(inance::Q)5.8(uoteH)17.8(ist::G)5.8(eneric module)]TJ T* 0.0474 Tw [(inv)5.8(okes the )]TJ /F2 1 Tf 9 0 0 9 391.1373 694.0776 Tm 0 Tw (quote_urls\(\))Tj /F1 1 Tf 11 0 0 11 456.8125 694.0776 Tm 0.0473 Tw [(method acr)5.8(oss the supplied list of)]TJ -10.4375 -1.0909 TD 0.0723 Tw [(ticker symbols; if that site fails to pr)5.7(oduce r)9.7(esults, the generic)]TJ T* 0.1105 Tw [(module inv)5.8(okes the next module in the lineup)15.7(. A)11.9(dding ne)-6(w)]TJ T* -0.016 Tw [(sites to the lineup)15.8(, or r)9.7(eplacing old ones, is as simple as cr)9.6(eating)]TJ T* 0 Tw (another )Tj /F2 1 Tf 9 0 0 9 375.6148 646.0776 Tm (quote_urls\(\))Tj /F1 1 Tf 11 0 0 11 440.7887 646.0776 Tm 0.0018 Tw [(method in a ne)-6(w site-specific module.)]TJ -8.9808 -1.0909 TD 0.0774 Tw [(S)12.1(imple obser)-17.9(v)5.9(ation of ho)11.9(w the site handles manual queries is)]TJ T* 0.0714 Tw [(usually all that is necessar)-18(y to figur)9.7(e out the URL syntax and)]TJ T* 0.1237 Tw [(quer)-17.9(y limits. A)11.9(dditionally)84.9(, since F)33.8(inance::Q)5.8(uoteH)17.8(ist is based)]TJ T* 0.0014 Tw [(on L)109.8(WP::U)29.7(serAgent and HT)-12(TP::R)11.9(equest, the entir)9.7(e arsenal of)]TJ T* -0.0242 Tw [(networ)5.8(king tricks ar)9.7(e av)5.8(ailable for use in cases wher)9.6(e mor)9.7(e than)]TJ T* 0.025 Tw [(a simple HT)-12(TP GET is necessar)-18(y)84.9(.)]TJ 0 -2.1818 TD -0.0001 Tc 0.1594 Tw [(The F)33.9(inance::Q)5.8(uoteH)17.8(ist engine also pr)5.8(o)15.9(vides ser)-17.9(vices for)]TJ 0 -1.0909 TD 0.2215 Tw [(handling mor)9.7(e v)5.8(aried information, such as what )14.8(Y)67.8(a)0(hoo!)]TJ T* 0.0591 Tw [(F)34(inance pr)5.8(o)15.9(vides. )44.8(The price of the stock is one example of)]TJ T* 0.245 Tw (what the module calls a )Tj /F5 1 Tf 10.5387 0 TD 0 Tw (target)Tj /F1 1 Tf 2.0803 0 TD 0.245 Tw [(. O)5.8(ther targets might be)]TJ -12.619 -1.0909 TD 0.2366 Tw [(dividends or splits, and F)33.9(inance::Q)5.8(uoteH)17.8(ist comes with)]TJ T* 0.0982 Tw [(handlers for those targets. )44.9(The top-lev)5.8(el methods \(such as)]TJ /F2 1 Tf 9 0 0 9 342 478.0776 Tm -0.0002 Tc 0 Tw (quotes\(\))Tj /F1 1 Tf 11 0 0 11 385.1894 478.0776 Tm 0 Tc (, )Tj /F2 1 Tf 9 0 0 9 391.4617 478.0776 Tm -0.0002 Tc (splits\(\))Tj /F1 1 Tf 11 0 0 11 434.6511 478.0776 Tm -0.0001 Tc 0.0702 Tw (, and )Tj /F2 1 Tf 9 0 0 9 460.2581 478.0776 Tm -0.0002 Tc 0 Tw (dividends\(\))Tj /F1 1 Tf 11 0 0 11 519.6436 478.0776 Tm -0.0001 Tc 0.0701 Tw [(\) ar)9.7(e all wrappers)]TJ 12 0 0 12 517.3723 90.3543 Tm 0 Tc 0 Tw (F)Tj 10.44 0 0 10.44 523.4518 90.3543 Tm -0.0001 Tc (ALL)Tj 12 0 0 12 544.7999 90.3543 Tm 0 Tc 0.025 Tw [(2000 49)]TJ /F3 1 Tf -40.15 0 TD -0.0002 Tc 0.0255 Tw [(The P)47.6(erl J)35.7(our)-8(nal #19)]TJ ET 0 0 0 0.1 k /GS1 gs 342.5 458.5 251 -341 re 162.892 90.354 m f* 0 0 0 1 K 0 J 0 j 1 w 10 M []0 d 342.5 458.5 251 -341 re S BT /F8 1 Tf 24 0 0 24 375.8911 311.3976 Tm 0 0 0 1 k /GS2 gs -0.0001 Tc 0 Tw [(JOSHU)35.8(A/GHOST)]TJ 2.1102 -1.2 TD -0.0002 Tc 0.0255 Tw (1/4 page)Tj 0.1088 -1.2 TD [(P)11.9(i)-0.1(ck U)29.6(p)]TJ ET Q 0 0 0 0 k /GS2 gs 1 i 37 874 191 -12 re 506.858 253.798 m f* BT /F2 1 Tf 8 0 0 8 39 864 Tm /Cs9 cs 1 scn -0.0004 Tc -0.0019 Tw (TPJ#19/9.26 9/27/00 10:35 AM Page 49)Tj ET 1 G 0 J 0 j 0.5 w 10 M []0 d 36 873 m 36 849 l 0 837 m 24 837 l 621 873 m 621 849 l 657 837 m 633 837 l 36 36 m 36 60 l 0 72 m 24 72 l 621 36 m 621 60 l 657 72 m 633 72 l S /Cs9 CS 1 SCN 0.25 w 36 873 m 36 849 l 0 837 m 24 837 l 621 873 m 621 849 l 657 837 m 633 837 l 36 36 m 36 60 l 0 72 m 24 72 l 621 36 m 621 60 l 657 72 m 633 72 l S 1 G 0.5 w 304.5 861 m 352.5 861 l 304.5 48 m 352.5 48 l 12 478.5 m 12 430.5 l 645 478.5 m 645 430.5 l 328.5 873 m 328.5 849 l 328.5 60 m 328.5 36 l 0 454.5 m 24 454.5 l 633 454.5 m 657 454.5 l 328.5 861 m 334.5 861 l 334.5 857.688 331.812 855 328.5 855 c 325.188 855 322.5 857.688 322.5 861 c 322.5 864.312 325.188 867 328.5 867 c 331.812 867 334.5 864.312 334.5 861 c 328.5 48 m 334.5 48 l 334.5 44.688 331.812 42 328.5 42 c 325.188 42 322.5 44.688 322.5 48 c 322.5 51.312 325.188 54 328.5 54 c 331.812 54 334.5 51.312 334.5 48 c 12 454.5 m 18 454.5 l 18 451.188 15.312 448.5 12 448.5 c 8.688 448.5 6 451.188 6 454.5 c 6 457.812 8.688 460.5 12 460.5 c 15.312 460.5 18 457.812 18 454.5 c 645 454.5 m 651 454.5 l 651 451.188 648.312 448.5 645 448.5 c 641.688 448.5 639 451.188 639 454.5 c 639 457.812 641.688 460.5 645 460.5 c 648.312 460.5 651 457.812 651 454.5 c S /Cs9 CS 1 SCN 0.25 w 304.5 861 m 352.5 861 l 304.5 48 m 352.5 48 l 12 478.5 m 12 430.5 l 645 478.5 m 645 430.5 l 328.5 873 m 328.5 849 l 328.5 60 m 328.5 36 l 0 454.5 m 24 454.5 l 633 454.5 m 657 454.5 l 328.5 861 m 334.5 861 l 334.5 857.688 331.812 855 328.5 855 c 325.188 855 322.5 857.688 322.5 861 c 322.5 864.312 325.188 867 328.5 867 c 331.812 867 334.5 864.312 334.5 861 c 328.5 48 m 334.5 48 l 334.5 44.688 331.812 42 328.5 42 c 325.188 42 322.5 44.688 322.5 48 c 322.5 51.312 325.188 54 328.5 54 c 331.812 54 334.5 51.312 334.5 48 c 12 454.5 m 18 454.5 l 18 451.188 15.312 448.5 12 448.5 c 8.688 448.5 6 451.188 6 454.5 c 6 457.812 8.688 460.5 12 460.5 c 15.312 460.5 18 457.812 18 454.5 c 645 454.5 m 651 454.5 l 651 451.188 648.312 448.5 645 448.5 c 641.688 448.5 639 451.188 639 454.5 c 639 457.812 641.688 460.5 645 460.5 c 648.312 460.5 651 457.812 651 454.5 c S endstream endobj 151 0 obj << /Type /Page /Parent 495 0 R /Resources 152 0 R /Contents 153 0 R /Thumb 419 0 R /MediaBox [ 0 0 684 873 ] /CropBox [ 0 0 684 873 ] /Rotate 0 >> endobj 152 0 obj << /ProcSet [ /PDF /Text ] /Font << /F1 515 0 R /F2 518 0 R /F3 261 0 R /F5 262 0 R /F8 268 0 R /F10 270 0 R >> /ExtGState << /GS1 523 0 R /GS2 521 0 R >> /ColorSpace << /Cs9 520 0 R >> >> endobj 153 0 obj << /Length 8745 >> stream 1 g /GS1 gs 0 873 m 0 873 l f q 1 i 27 846 603 -783 re 0 873 m W n 0 873 684 -873 re W n BT /F1 1 Tf 11 0 0 11 63 802.0776 Tm 0 0 0 1 k /GS2 gs -0.0001 Tc -0.0167 Tw [(ar)5.8(ound their r)9.7(espectiv)5.8(e target handlers. )44.8(The information for)]TJ 0 -1.0909 TD 0.291 Tw [(a target is either r)9.7(etriev)5.8(ed dir)9.7(ectly)84.9(, via a mode-specific)]TJ /F5 1 Tf T* -0.0007 Tc 0 Tw [(T)64.5(A)-0.7(RGET)]TJ /F2 1 Tf 9 0 0 9 103.0334 778.0776 Tm -0.0002 Tc (_get\(\))Tj /F1 1 Tf 11 0 0 11 141.6506 778.0776 Tm -0.0001 Tc 0.3159 Tw [(method, or indir)9.7(ectly b)5.8(y)0( filtering the)]TJ -7.1501 -1.0909 TD 0.0199 Tc 0.9668 Tw [(output of a differ)9.7(ent target mode with a)]TJ /F5 1 Tf T* 0.0194 Tc 0 Tw [(T)64.6(A)-0.6(RGET)]TJ /F2 1 Tf 9 0 0 9 104.3533 754.0776 Tm 0.0198 Tc (_extract\(\))Tj /F1 1 Tf 11 0 0 11 167.642 754.0776 Tm 0.412 Tw (method. Labels for the target)Tj -9.5129 -1.0909 TD 1.0321 Tw [(columns of dir)9.7(ect queries ar)9.7(e pr)5.8(o)15.9(vided b)5.8(y)]TJ /F5 1 Tf T* -0.0594 Tc 0 Tw [(TA)-65.1(R)-63.1(G)-64.9(E)-65(T)]TJ /F2 1 Tf 9 0 0 9 103.4121 730.0776 Tm 0.0056 Tc (_labels\(\))Tj /F1 1 Tf 11 0 0 11 152.465 730.0776 Tm 0.0057 Tc 0.3692 Tw [(; these ar)9.8(e used both for HTML)]TJ -8.1332 -1.0909 TD -0.0001 Tc 0.0101 Tw [(column extraction as w)5.8(ell as for determining column or)13.8(der)59.7(.)]TJ 0 -2.1818 TD 0.0147 Tc 0.3602 Tw [(F)36(or instance, F)33.9(inance::Q)5.8(uoteH)17.8(ist::Y)67.8(ahoo pr)5.8(o)15.9(vides the)]TJ 0 -1.0909 TD -0.0001 Tc 0.025 Tw [(follo)11.9(wing methods:)]TJ /F2 1 Tf 7 0 0 7 76.8567 662.0776 Tm -0.0002 Tc 0 Tw (quote_urls\(\))Tj 0 -1.1429 TD (dividend_urls\(\))Tj T* (dividend_get\(\))Tj T* (dividend_extract\(\))Tj T* (split_get\(\))Tj T* (split_extract\(\))Tj /F1 1 Tf 11 0 0 11 63 598.0776 Tm -0.0001 Tc 0.2363 Tw [(N)29.7(ote that ther)9.7(e)29.7()79.9(s no need to pr)5.8(o)15.9(vide )]TJ /F2 1 Tf 9 0 0 9 236.6686 598.0776 Tm -0.0002 Tc 0 Tw (quote_labels\(\))Tj /F1 1 Tf 11 0 0 11 312.2502 598.0776 Tm 0 Tc (,)Tj /F2 1 Tf 9 0 0 9 63 586.0776 Tm -0.0002 Tc (dividend_labels\(\))Tj /F1 1 Tf 11 0 0 11 154.7776 586.0776 Tm -0.0001 Tc 0.0385 Tw (, or )Tj /F2 1 Tf 9 0 0 9 172.869 586.0776 Tm -0.0002 Tc 0 Tw (split_labels\(\))Tj /F1 1 Tf 11 0 0 11 251.6243 586.0776 Tm -0.0001 Tc 0.0386 Tw (methods, since)Tj -17.1477 -1.0909 TD 0.2085 Tw [(those labels ar)9.7(e set b)5.8(y)0( default in all F)33.9(inance::Q)5.8(uoteH)17.8(ist)]TJ T* 0.0508 Tw [(classes, although y)5.8(ou can o)15.8(v)5.9(erride them if y)5.8(ou wish. )44.8(Ther)9.7(e)]TJ T* -0.0177 Tw (is no )Tj /F2 1 Tf 9 0 0 9 85.6061 550.0776 Tm -0.0002 Tc 0 Tw (split_urls\(\))Tj /F1 1 Tf 11 0 0 11 152.9451 550.0776 Tm -0.0001 Tc -0.0177 Tw (method, because split information can)Tj -8.1768 -1.0909 TD -0.0204 Tw [(only be found embedded in r)9.7(egular quote r)9.7(esults on )14.9(Y)67.8(ahoo!;)]TJ T* 0 Tw (the )Tj /F2 1 Tf 9 0 0 9 82.9036 526.0776 Tm -0.0002 Tc (split_get\(\))Tj /F1 1 Tf 11 0 0 11 148.7972 526.0776 Tm -0.0001 Tc 0.3416 Tw [(method will end up per)-7.9(forming an)]TJ -7.7997 -1.0909 TD 0.0258 Tw [(HTML quote quer)-17.9(y and r)9.7(elying on the )]TJ /F2 1 Tf 9 0 0 9 234.02 514.0776 Tm -0.0002 Tc 0 Tw (split_extract\(\))Tj /F1 1 Tf 11 0 0 11 63 502.0776 Tm -0.0001 Tc 0.3249 Tw [(method to get the information. )44.9(The )]TJ /F2 1 Tf 9 0 0 9 239.4186 502.0776 Tm -0.0002 Tc 0 Tw (dividend_get\(\))Tj /F1 1 Tf 11 0 0 11 63 490.0776 Tm -0.0001 Tc 0.1766 Tw [(method, on the other hand, per)-7.9(forms a dir)9.7(ect quer)-17.9(y for)]TJ T* 0.3317 Tw (dividends since a )Tj /F2 1 Tf 9 0 0 9 148.4186 478.0776 Tm -0.0002 Tc 0 Tw (dividend_urls\(\))Tj /F1 1 Tf 11 0 0 11 235.7974 478.0776 Tm -0.0001 Tc 0.3317 Tw (method exists )Tj 9.6548 29.4545 TD 0.0199 Tc 0.8938 Tw [(unless the wor)5.8(k has alr)9.7(eady been done b)5.8(y)]TJ /F2 1 Tf 9 0 0 9 342 790.0776 Tm -0.0002 Tc 0 Tw (dividend_extract\(\))Tj /F1 1 Tf 11 0 0 11 442.2013 790.0776 Tm -0.0001 Tc 0.025 Tw [(during a r)9.7(egular quote quer)-17.9(y)84.9(.)]TJ -9.1092 -2.1818 TD 0.254 Tw (The documentation included with the modules include)Tj 0 -1.0909 TD 0.0917 Tw [(plenty of detailed information for dev)5.8(elopers inter)9.7(ested in)]TJ T* 0.025 Tw [(dev)5.8(eloping their o)11.9(wn site-specific modules.)]TJ /F8 1 Tf 12 0 0 12 342 716.0776 Tm 0 Tc 0 Tw (S)Tj 10.44 0 0 10.44 348.2868 716.0776 Tm 0.0228 Tc [(UMMAR)44.7(Y)]TJ /F1 1 Tf 11 0 0 11 342 694.0776 Tm -0.0001 Tc 0.0828 Tw [(H)17.8(istorical stock quotes ar)9.7(e just one application of HTML)]TJ T* 0.0199 Tc 0.4823 Tw [(table extraction. )44.9(The w)5.8(eb is bursting with useful)]TJ T* -0.0001 Tc 0.1859 Tw (information, trapped in tables and the noise of HTML.)Tj T* 0.1091 Tw (Liberating this information for automation is made easier)Tj T* 0.025 Tw [(with HTML::T)109.8(ableE)5.8(xtract.)]TJ 0 -2.1818 TD 0.0199 Tc 0.3997 Tw [(G)5.9(o)0.1( for)-7.9(th and br)5.8(o)12(wse without fear of tangled and)]TJ 0 -1.0909 TD -0.0001 Tc 0.1061 Tw [(encumber)9.7(ed HTML r)9.7(egular expr)9.7(essions, for ther)9.7(e ar)9.7(e still)]TJ T* 0.093 Tw [(countless pearls scatter)9.7(ed thr)5.8(oughout the sands of HTML)]TJ T* 0.025 Tw [(and the wide world of the w)5.8(e)-0.1(b)15.8(.)]TJ /F10 1 Tf 0 -2.1818 TD 0.0278 Tw (_ _END_ _)Tj /F5 1 Tf T* 0.1137 Tw [(M)6(atthew S)11.9(isk )]TJ /F1 1 Tf 5.5314 0 TD 0 Tw (\(sisk@mojotoad.com\))Tj /F5 1 Tf 8.7923 0 TD 0.1136 Tw [(is the author of sev)5.8(er)29.7(al)]TJ -14.3238 -1.0909 TD 0.0199 Tc 0.6141 Tw [(CP)59.8(AN modules, including HTML::T)129.9(ableE)5.8(xtr)29.7(act and)]TJ T* -0.0001 Tc 0.375 Tw [(F)11.9(i)-0.1(nance::Q)5.8(uoteH)11.9(ist. P)23.9(r)5.9(ofessionally)71.7(, he is a H)17.8(ouston-based)]TJ T* 0.0682 Tw [(consultant and dev)5.8(eloper for B)5.8(l)0(uwar)19.7(e, I)23.8(nc. I)23.9(n)0( r)19.7(eal life he is a)]TJ T* 0.0151 Tc 0.3598 Tw [(mountain biker)59.8(, home br)19.7(ew)11.9(er)59.7(, and shameless mix)5.8(er of)]TJ T* -0.0001 Tc 0 Tw (metaphors.)Tj /F1 1 Tf 12 0 0 12 63 90.3543 Tm 0 Tc [(50)-1100(F)]TJ 10.44 0 0 10.44 94.2795 90.3543 Tm -0.0001 Tc (ALL)Tj 12 0 0 12 115.6277 90.3543 Tm 0 Tc (2000)Tj /F3 1 Tf 30.9897 0.0003 TD -0.0002 Tc 0.0255 Tw [(The P)47.6(erl J)35.7(our)-8(nal #19)]TJ ET 0 0 0 0.1 k /GS1 gs 63.5 458.5 530 -341 re 587.395 90.357 m f* 0 0 0 1 K 0 J 0 j 1 w 10 M []0 d 63.5 458.5 530 -341 re S BT /F8 1 Tf 24 0 0 24 246.9521 323.322 Tm 0 0 0 1 k /GS2 gs 0 Tw [(ST)35.7(ONEHENGE)]TJ 1.6701 -1.2 TD 0.0255 Tw (1/2 page)Tj /F1 1 Tf 19 0 0 19 306.5081 240.5233 Tm -0.0001 Tc 0 Tw [(NE)11.8(W)]TJ ET Q 0 0 0 0 k /GS2 gs 1 i 37 874 191 -12 re 350.493 240.523 m f* BT /F2 1 Tf 8 0 0 8 39 864 Tm /Cs9 cs 1 scn -0.0004 Tc -0.0019 Tw (TPJ#19/9.26 9/27/00 10:35 AM Page 50)Tj ET 1 G 0 J 0 j 0.5 w 10 M []0 d 36 873 m 36 849 l 0 837 m 24 837 l 621 873 m 621 849 l 657 837 m 633 837 l 36 36 m 36 60 l 0 72 m 24 72 l 621 36 m 621 60 l 657 72 m 633 72 l S /Cs9 CS 1 SCN 0.25 w 36 873 m 36 849 l 0 837 m 24 837 l 621 873 m 621 849 l 657 837 m 633 837 l 36 36 m 36 60 l 0 72 m 24 72 l 621 36 m 621 60 l 657 72 m 633 72 l S 1 G 0.5 w 304.5 861 m 352.5 861 l 304.5 48 m 352.5 48 l 12 478.5 m 12 430.5 l 645 478.5 m 645 430.5 l 328.5 873 m 328.5 849 l 328.5 60 m 328.5 36 l 0 454.5 m 24 454.5 l 633 454.5 m 657 454.5 l 328.5 861 m 334.5 861 l 334.5 857.688 331.812 855 328.5 855 c 325.188 855 322.5 857.688 322.5 861 c 322.5 864.312 325.188 867 328.5 867 c 331.812 867 334.5 864.312 334.5 861 c 328.5 48 m 334.5 48 l 334.5 44.688 331.812 42 328.5 42 c 325.188 42 322.5 44.688 322.5 48 c 322.5 51.312 325.188 54 328.5 54 c 331.812 54 334.5 51.312 334.5 48 c 12 454.5 m 18 454.5 l 18 451.188 15.312 448.5 12 448.5 c 8.688 448.5 6 451.188 6 454.5 c 6 457.812 8.688 460.5 12 460.5 c 15.312 460.5 18 457.812 18 454.5 c 645 454.5 m 651 454.5 l 651 451.188 648.312 448.5 645 448.5 c 641.688 448.5 639 451.188 639 454.5 c 639 457.812 641.688 460.5 645 460.5 c 648.312 460.5 651 457.812 651 454.5 c S /Cs9 CS 1 SCN 0.25 w 304.5 861 m 352.5 861 l 304.5 48 m 352.5 48 l 12 478.5 m 12 430.5 l 645 478.5 m 645 430.5 l 328.5 873 m 328.5 849 l 328.5 60 m 328.5 36 l 0 454.5 m 24 454.5 l 633 454.5 m 657 454.5 l 328.5 861 m 334.5 861 l 334.5 857.688 331.812 855 328.5 855 c 325.188 855 322.5 857.688 322.5 861 c 322.5 864.312 325.188 867 328.5 867 c 331.812 867 334.5 864.312 334.5 861 c 328.5 48 m 334.5 48 l 334.5 44.688 331.812 42 328.5 42 c 325.188 42 322.5 44.688 322.5 48 c 322.5 51.312 325.188 54 328.5 54 c 331.812 54 334.5 51.312 334.5 48 c 12 454.5 m 18 454.5 l 18 451.188 15.312 448.5 12 448.5 c 8.688 448.5 6 451.188 6 454.5 c 6 457.812 8.688 460.5 12 460.5 c 15.312 460.5 18 457.812 18 454.5 c 645 454.5 m 651 454.5 l 651 451.188 648.312 448.5 645 448.5 c 641.688 448.5 639 451.188 639 454.5 c 639 457.812 641.688 460.5 645 460.5 c 648.312 460.5 651 457.812 651 454.5 c S endstream endobj 154 0 obj << /Type /Page /Parent 496 0 R /Resources 155 0 R /Contents 156 0 R /Thumb 421 0 R /MediaBox [ 0 0 684 873 ] /CropBox [ 0 0 684 873 ] /Rotate 0 >> endobj 155 0 obj << /ProcSet [ /PDF /Text ] /Font << /F1 515 0 R /F2 518 0 R /F3 261 0 R /F5 262 0 R /F7 267 0 R /F8 268 0 R /F9 269 0 R /F11 271 0 R >> /ExtGState << /GS1 523 0 R /GS2 521 0 R >> /ColorSpace << /Cs9 520 0 R /Cs10 264 0 R >> >> endobj 156 0 obj << /Length 16478 >> stream 1 g /GS1 gs 0 873 m 0 873 l f q 1 i 27 846 603 -783 re 0 873 m W n 0 873 684 -873 re W n BT /F1 1 Tf 29.09 0 0 29.09 62.364 645.0442 Tm 0 0 0 1 k /GS2 gs 0 Tc 0 Tw (I)Tj 11 0 0 11 72.125 657.0442 Tm -0.0001 Tc 0.0242 Tw [(n )44.8(TPJ #17, K)5.8(en M)11.9(acF)47.8(arlane)29.7()79.9(s)0( ar)-7.9(ticle )]TJ /F5 1 Tf 14.3179 0 TD [(P)54.1(arsing HTML with)]TJ -14.3179 -1.0909 TD 0 Tw [(HTML::P)53.9(arser)]TJ /F1 1 Tf 5.8601 0 TD 0.0644 Tw [(describes ho)11.9(w the HTML::P)41.9(arser module)]TJ -6.6896 -1.0909 TD 0.0096 Tw [(scans HTML sour)5.8(ce as a str)9.7(eam of star)-7.9(t tags, end tags, text,)]TJ T* 0.0633 Tw [(comments, and so on. I)11.9(n)0( )44.8(TPJ #18, my )]TJ /F5 1 Tf 15.6084 0 TD 0 Tw [(T)110(r)19.9(ees)]TJ /F1 1 Tf 2.1121 0 TD 0.0633 Tw [(ar)-7.9(ticle kicked)]TJ -17.7205 -1.0909 TD 0.0477 Tw [(ar)5.8(ound the idea of tr)9.7(ee-shaped data str)-7.9(uctur)9.7(es. N)29.8(o)12(w I)11.9(ll tie)]TJ T* 0.025 Tw [(it together b)5.8(y)0( discussing tr)9.7(ees of HTML.)]TJ 0 -2.1818 TD -0.0028 Tw [(The CP)39.7(AN module HTML::T)129.8(r)9.9(eeB)11.9(uilder takes the tags that)]TJ 0 -1.0909 TD 0.1461 Tw [(HTML::P)41.9(arser extracts, and builds a )]TJ /F5 1 Tf 15.043 0 TD [(parse tr)19.7(ee)]TJ /F1 1 Tf 3.9295 0 TD [( a tr)9.7(ee-)]TJ -18.9725 -1.0909 TD 0.0003 Tc 0.3746 Tw [(shaped networ)5.8(k of objects r)9.7(epr)9.7(esenting the str)-7.8(uctur)9.7(ed)]TJ T* -0.0001 Tc 0.1255 Tw (content of an HTML document.)Tj 7.15 0 0 7.15 208.7883 539.5161 Tm 0 Tc 0 Tw (1)Tj 11 0 0 11 216.4938 537.0442 Tm -0.0001 Tc 0.1255 Tw [(O)5.8(nce the document is)]TJ -13.954 -1.0909 TD 0.0353 Tw [(parsed as a tr)9.7(ee, y)5.8(o)0.1(u)49.7()12(ll find the common tasks of extracting)]TJ T* 0.0497 Tw [(data fr)5.8(om that HTML document/tr)9.7(ee to be quite straight-)]TJ T* -0.0002 Tc 0 Tw [(for)-18(war)13.7(d.)]TJ /F8 1 Tf 12 0 0 12 63 475.0442 Tm 0.0198 Tc (HTML::P)Tj 10.44 0 0 10.44 112.7615 475.0441 Tm 0.0228 Tc (ARSER)Tj 12 0 0 12 145.5131 475.0441 Tm 0.0198 Tc 0.0255 Tw (, HTML::T)Tj 10.44 0 0 10.44 204.0879 475.0441 Tm 0.0227 Tc 0 Tw (REE)Tj 12 0 0 12 223.7608 475.0441 Tm 0 Tc (B)Tj 10.44 0 0 10.44 231.3381 475.0441 Tm 0.0228 Tc (UILDER)Tj 12 0 0 12 271.1656 475.0441 Tm 0.0198 Tc (, )Tj 10.44 0 0 10.44 278.0686 475.0441 Tm 0.0228 Tc (AND)Tj 12 0 0 12 63 461.0442 Tm 0.0198 Tc (HTML::E)Tj 10.44 0 0 10.44 113.4473 461.0442 Tm 0.0228 Tc (LEMENT)Tj /F1 1 Tf 11 0 0 11 63 435.0442 Tm -0.0001 Tc 0.1583 Tw [(HTML::T)129.8(r)9.9(eeB)11.9(uilder can constr)-7.9(uct a parse tr)9.7(ee out of an)]TJ T* 0.025 Tw [(HTML sour)5.8(ce file simply b)5.8(y)0( saying:)]TJ /F2 1 Tf 7 0 0 7 72.2378 403.0442 Tm -0.0002 Tc 0.06 Tw (use HTML::TreeBuilder;)Tj 0 -1.1429 TD (my $tree = HTML::TreeBuilder->new\(\);)Tj T* 0 Tw ($tree->parse_file\('foo.html'\);)Tj 9 0 0 9 63 363.0441 Tm ($tree)Tj /F1 1 Tf 11 0 0 11 93.4509 363.0441 Tm -0.0001 Tc 0.0643 Tw [(no)11.9(w contains a parse tr)9.7(ee built fr)5.8(om the HTML in)]TJ /F2 1 Tf 9 0 0 9 63 351.0442 Tm -0.0002 Tc 0 Tw (foo.html)Tj /F1 1 Tf 11 0 0 11 106.1894 351.0442 Tm -0.0001 Tc 0.1676 Tw [(. )44.8(The parse tr)9.7(ee is r)9.7(epr)9.7(esented as a networ)5.8(k of)]TJ -3.9263 -1.0909 TD 0 Tc 0.1649 Tw (objects )Tj /F2 1 Tf 9 0 0 9 112.4395 339.0442 Tm -0.0002 Tc 0 Tw ($tree)Tj /F1 1 Tf 11 0 0 11 143.9976 339.0442 Tm -0.0001 Tc 0.165 Tw [(is the r)5.8(oot, an element with tag name)]TJ /F2 1 Tf 9 0 0 9 63 327.0442 Tm 0.0187 Tc 0 Tw (html)Tj /F1 1 Tf 11 0 0 11 85.2734 327.0442 Tm 0.3561 Tw [(. I)23.9(ts childr)9.8(en typically include )]TJ /F2 1 Tf 9 0 0 9 240.4395 327.0442 Tm 0 Tw (head)Tj /F1 1 Tf 11 0 0 11 269.5879 327.0442 Tm (and )Tj /F2 1 Tf 9 0 0 9 292.8976 327.0442 Tm (body)Tj /F1 1 Tf 11 0 0 11 63 315.0442 Tm -0.0001 Tc -0.0188 Tw [(elements, and so on. Each element in the tr)9.7(ee is an object of)]TJ T* 0.025 Tw [(the class HTML::E)11.9(lement.)]TJ 0 -2.1818 TD [(S)12.1(o, if y)5.8(ou take this sour)5.8(ce:)]TJ /F2 1 Tf 7 0 0 7 72.2378 259.0442 Tm -0.0002 Tc 0.06 Tw (Doc 1)Tj 0 -1.1429 TD 0 Tw ()Tj T* 0.06 Tw (Stuff
2000-08-17)Tj T* 0 Tw ()Tj /F1 1 Tf 11 0 0 11 63 212.0442 Tm -0.0001 Tc 0.2119 Tw [(and feed it to HTML::T)129.8(r)9.9(eeB)11.9(uilder)59.7(, it)17.7()12(ll r)9.7(eturn a tr)9.7(ee of)]TJ 0 -1.0909 TD 0.025 Tw (objects that looks like this:)Tj /F2 1 Tf 7 0 0 7 411.2834 742.2832 Tm -0.0002 Tc 0 Tw (html)Tj -1.3197 -1.1429 TD 0.0598 Tc [(/)60( \\)]TJ -2.6394 -1.1429 TD -0.0002 Tc 0.06 Tw [(head body)]TJ -0.6598 -1.1429 TD 0.0598 Tc 0 Tw [(/)60( /)60( |)60( \\)]TJ -1.9795 -1.1429 TD -0.0002 Tc 0.06 Tw [(title "Stuff" hr "2000-08-17")]TJ 1.3197 -1.1429 TD 0 Tc 0 Tw (|)Tj -1.9795 -1.1429 TD -0.0002 Tc 0.06 Tw ("Doc 1")Tj /F1 1 Tf 11 0 0 11 342 670.2832 Tm -0.0001 Tc 0.2396 Tw [(This is a pr)9.7(etty simple document. I)5.8(f)0( it w)5.8(e)0.1(r)9.7(e)0( any mor)9.7(e)]TJ 0 -1.0909 TD 0.1392 Tw [(complex, it)17.7()99.9(d)0( be a bit har)13.8(d to draw in that style, since it)]TJ T* -0.0332 Tw [(sprawls left and right. )44.9(The same tr)9.7(ee can be r)9.7(epr)9.7(esented a bit)]TJ T* 0.025 Tw [(mor)9.7(e)0( easily side)-5.9(ways, with indenting:)]TJ /F2 1 Tf 7 0 0 7 351.2378 614.2832 Tm -0.0002 Tc 0.06 Tw ( html)Tj 1.9795 -1.1429 TD ( head)Tj 1.9795 -1.1429 TD ( title)Tj 1.9795 -1.1429 TD ( "Doc 1")Tj -3.9591 -1.1429 TD ( body)Tj 1.9795 -1.1429 TD ( "Stuff")Tj T* ( hr)Tj T* ( "2000-08-17")Tj /F1 1 Tf 11 0 0 11 342 535.2832 Tm -0.0151 Tc 0.2381 Tw [(Both r)9.7(epr)9.7(esentations expr)9.7(ess the same str)-7.9(uctur)9.7(e. )44.8(The r)5.8(oot)]TJ 0 -1.0909 TD 0.0476 Tw [(node is an object of the class HTML::E)11.9(lement,)]TJ 7.15 0 0 7.15 537.51 525.7551 Tm 0 Tc 0 Tw (2)Tj 11 0 0 11 544.028 523.2832 Tm -0.0151 Tc 0.0476 Tw (with the tag)Tj -18.3662 -1.0909 TD 0 Tw (name )Tj /F2 1 Tf 9 0 0 9 370.1706 511.2832 Tm (html)Tj /F1 1 Tf 11 0 0 11 391.2254 511.2832 Tm 0.2744 Tw [(, and with two childr)9.7(en: an HTML::E)11.9(lement)]TJ -4.475 -1.0909 TD -0.0194 Tw [(object whose tag names ar)9.7(e )]TJ /F2 1 Tf 9 0 0 9 454.0001 499.2832 Tm 0 Tw (head)Tj /F1 1 Tf 11 0 0 11 477.4258 499.2832 Tm (and )Tj /F2 1 Tf 9 0 0 9 495.1143 499.2832 Tm (body)Tj /F1 1 Tf 11 0 0 11 516.1691 499.2832 Tm -0.0194 Tw (. And each of those)Tj -15.8336 -1.0909 TD 0.1613 Tw [(elements hav)5.8(e childr)9.7(en, and so on do)11.9(wn. N)29.8(ot all elements)]TJ T* -0.0208 Tw [(hav)5.8(e childr)9.7(en the )]TJ /F2 1 Tf 9 0 0 9 427.1981 475.2832 Tm -0.0153 Tc 0 Tw (hr)Tj /F1 1 Tf 11 0 0 11 440.0812 475.2832 Tm -0.0151 Tc -0.0208 Tw [(element doesn)69.8()79.9(t, for instance. And not)]TJ -8.9165 -1.0909 TD 0.0202 Tw [(all nodes in the tr)9.7(ee ar)9.7(e elements the text nodes \()]TJ /F2 1 Tf 9 0 0 9 560.2193 463.2832 Tm 0.0484 Tw (Doc 1)Tj /F1 1 Tf 11 0 0 11 586.9732 463.2832 Tm 0 Tw (,)Tj -22.2703 -1.0909 TD 0 Tc ()Tj /F2 1 Tf 9 0 0 9 346.2769 451.2832 Tm -0.0152 Tc (Stuff)Tj /F1 1 Tf 11 0 0 11 372.5953 451.2832 Tm 0.025 Tw (, and )Tj /F2 1 Tf 9 0 0 9 404.7717 451.2832 Tm 0 Tw (2000-08-17)Tj /F1 1 Tf 11 0 0 11 457.4086 451.2832 Tm 0.0249 Tw [(\) ar)9.7(e just strings.)]TJ -10.4917 -2 TD 0.0199 Tc 0.5892 Tw [(O)5.8(b)0(jects of the class HTML::E)12(lement hav)5.8(e thr)9.7(ee)]TJ 0 -1.0909 TD -0.0001 Tc 0.025 Tw [(note)-5.9(wor)-7.9(thy attributes:)]TJ 1.6364 -2.0909 TD 0.02 Tc 0 Tw (1. )Tj /F2 1 Tf 9 0 0 9 376.1558 394.2832 Tm 0.0198 Tc (_tag)Tj /F1 1 Tf 11 0 0 11 398.4704 394.2832 Tm 0.4088 Tw [(, best accessed as )]TJ /F2 1 Tf 9 0 0 9 493.8173 394.2832 Tm 0 Tw ($element->tag)Tj /F1 1 Tf 11 0 0 11 566.3398 394.2832 Tm 0.3639 Tw (. The)Tj -18.7582 -1.0909 TD -0.0001 Tc 0.2752 Tw [(element)17.7()79.9(s)0( tag name, lo)11.9(w)5.8(e)0.1(r)5.8(cased \(e.g., )]TJ /F2 1 Tf 9 0 0 9 532.6749 382.2832 Tm -0.0003 Tc 0 Tw (em)Tj /F1 1 Tf 11 0 0 11 549.2499 382.2832 Tm -0.0001 Tc 0.2752 Tw (for an )Tj /F2 1 Tf 9 0 0 9 583.2026 382.2832 Tm -0.0003 Tc 0 Tw (EM)Tj /F1 1 Tf 11 0 0 11 360 370.2832 Tm -0.0001 Tc (element\).)Tj 7.15 0 0 7.15 399.8562 372.7551 Tm 0 Tc (3)Tj 11 0 0 11 360 351.2832 Tm (2. )Tj /F2 1 Tf 9 0 0 9 371.5603 351.2832 Tm -0.0002 Tc (_parent)Tj /F1 1 Tf 11 0 0 11 409.3511 351.2832 Tm -0.0001 Tc 0.051 Tw (, best accessed as )Tj /F2 1 Tf 9 0 0 9 484.7762 351.2832 Tm -0.0002 Tc 0 Tw ($element->parent)Tj /F1 1 Tf 11 0 0 11 571.1551 351.2832 Tm -0.0001 Tc 0.0061 Tw (. The)Tj -19.1959 -1.0909 TD 0.1328 Tw [(element that is the element)17.8()79.9(s)0( par)9.7(ent, or )]TJ /F2 1 Tf 9 0 0 9 537.1542 339.2832 Tm -0.0002 Tc 0 Tw (undef)Tj /F1 1 Tf 11 0 0 11 568.3585 339.2832 Tm -0.0001 Tc 0.1328 Tw (if this)Tj -18.9417 -1.0909 TD 0.025 Tw [(element is the r)5.8(oot.)]TJ 0 -1.7273 TD 0 Tc 0 Tw (3.)Tj /F2 1 Tf 9 0 0 9 370.105 308.2832 Tm -0.0502 Tc (_content)Tj /F1 1 Tf 11 0 0 11 409.6947 308.2832 Tm -0.0001 Tc [(,)-133.7(best)-183.7(accessed)-183.7(as)]TJ /F2 1 Tf 9 0 0 9 479.4085 308.2832 Tm -0.0352 Tc ($element->content_list)Tj /F1 1 Tf 11 0 0 11 591.2501 308.2832 Tm 0 Tc (.)Tj -21.0227 -1.0909 TD -0.0001 Tc 0.0657 Tw (The list of nodes \(i.e., elements or text segments\) that)Tj T* 0.025 Tw [(ar)9.7(e the element)17.7()79.9(s)0( childr)9.7(en.)]TJ -1.6364 -2.1818 TD 0.0016 Tc 0.3733 Tw [(M)24(o)0.2(r)9.7(e)0(o)15.8(v)5.9(er)59.7(, if an element has any attributes those ar)9.7(e)]TJ 0 -1.0909 TD -0.0001 Tc 0.2864 Tw [(r)9.9(eadable as )]TJ /F2 1 Tf 9 0 0 9 396.7455 248.2832 Tm -0.0002 Tc 0 Tw ($element->attr\('name'\))Tj /F1 1 Tf 11 0 0 11 521.417 248.2832 Tm -0.0001 Tc 0.2864 Tw ( for example,)Tj -16.3106 -1.0909 TD 0.2019 Tw [(with the object built fr)5.8(om )]TJ /F2 1 Tf 9 0 0 9 465.9495 236.2832 Tm -0.0002 Tc 0 Tw (
bar)Tj /F1 1 Tf 11 0 0 11 572.8838 236.2832 Tm 0 Tc 0.2018 Tw (, the)Tj -20.9894 -1.0909 TD -0.0001 Tc 0.2846 Tw (method call )Tj /F2 1 Tf 9 0 0 9 401.0248 224.2832 Tm -0.0002 Tc 0 Tw ($element->attr\('id'\))Tj /F1 1 Tf 11 0 0 11 514.8794 224.2832 Tm -0.0001 Tc 0.2846 Tw [(r)9.9(eturns the string)]TJ /F2 1 Tf 9 0 0 9 342 212.2832 Tm -0.0002 Tc 0 Tw (foo)Tj /F1 1 Tf 11 0 0 11 358.196 212.2832 Tm -0.0001 Tc 0.0916 Tw [(. F)23.9(u)0.1(r)-7.9(t)0(hermor)9.7(e, )]TJ /F2 1 Tf 9 0 0 9 425.1738 212.2832 Tm -0.0002 Tc 0 Tw ($element->tag)Tj /F1 1 Tf 11 0 0 11 499.1139 212.2832 Tm -0.0001 Tc 0.0916 Tw [(on that object r)9.7(eturns)]TJ -14.2831 -1.0909 TD 0.3684 Tw (the string )Tj /F2 1 Tf 9 0 0 9 393.0803 200.2832 Tm 0 Tc 0 Tw (a)Tj /F1 1 Tf 11 0 0 11 398.479 200.2832 Tm (, )Tj /F2 1 Tf 9 0 0 9 408.0308 200.2832 Tm -0.0002 Tc ($element->content_list)Tj /F1 1 Tf 11 0 0 11 533.6036 200.2832 Tm -0.0001 Tc 0.3684 Tw [(r)9.9(eturns a list)]TJ 12 0 0 12 517.3723 90.3543 Tm 0 Tc 0 Tw (F)Tj 10.44 0 0 10.44 523.4518 90.3543 Tm -0.0001 Tc (ALL)Tj 12 0 0 12 544.7999 90.3543 Tm 0 Tc 0.025 Tw [(2000 51)]TJ /F3 1 Tf -40.15 0 TD -0.0002 Tc 0.0255 Tw [(The P)47.6(erl J)35.7(our)-8(nal #19)]TJ ET 0 0 0 0 k 63 798 531 -21.17 re 162.892 90.354 m f* BT /F8 1 Tf 16 0 0 16 63 786.4766 Tm 0 0 0 1 k 0 Tc 0 Tw (S)Tj 13.92 0 0 13.92 71.0625 786.4766 Tm -0.0002 Tc (CANNING)Tj 16 0 0 16 141.7633 786.4766 Tm (HTML )Tj /F7 1 Tf 21.9485 0 TD -0.0209 Tw [(Sean M.)-157.3(Burk)9.6(e)]TJ ET /Cs10 CS 1 SCN 0 J 0 j 6 w 10 M []0 d 63 807 m 207 807 l S 0 0.03 0.3 0 k /GS1 gs 63.25 746.75 251.5 -62.5 re 594.004 786.477 m f* BT /F9 1 Tf 12 0 0 12 147.4807 731.6238 Tm 0 0 0 1 k /GS2 gs 0.0277 Tw [(P)29.8(a)0(cka)14.7(g)14.7(es Used)]TJ /F1 1 Tf 9 0 0 9 72.5 717.6238 Tm 0 Tc 0 Tw [(HTML::T)129.9(r)10(eeB)12(uilder)-249.6(............................................................CP)39.8(A)0.2(N)]TJ 0 -1.3333 TD [(HTML::P)42(arser)-195.7(.....................................................................CP)39.8(A)0.2(N)]TJ T* [(HTML::E)12(lement)-9.4(..................................................................CP)39.8(A)0.2(N)]TJ ET 0 0 0 1 K 0.5 w /GS1 gs 63.25 746.75 251.5 -62.5 re 304.52 693.624 m S BT 6 0 0 6 63 177.856 Tm /GS2 gs (1 )Tj 8 0 0 8 67.65 175.8759 Tm -0.0001 Tc 0.025 Tw [(And if y)5.8(ou need a quick explanation of objects, see my )44.8(TPJ #17 ar)-7.9(ticle )]TJ /F5 1 Tf 27.7372 0 TD [(A U)29.7(ser)19.7()33.1(s)-0.1( )47.8(V)9.8(iew of O)5.8(bject-O)5.8(riented M)17.7(o)0(dules)]TJ /F1 1 Tf 15.6675 0 TD [(, or go whole hog and get D)5.8(amian Conway)29.7()79.9(s)-0.1( ex)11.9(cellent)]TJ -43.986 -1.25 TD 0 Tw (book )Tj /F5 1 Tf 2.2286 0 TD 0.025 Tw [(O)5.8(bject-O)5.8(riented P)41.9(e)0.1(r)11.9(l)]TJ /F1 1 Tf 7.7352 0 TD [(, fr)5.8(om M)11.9(anning P)29.7(ublications.)]TJ 6 0 0 6 63 155.856 Tm 0 Tc 0 Tw (2 )Tj 8 0 0 8 67.65 153.8759 Tm -0.0001 Tc 0.025 Tw [(A)12.1(ctually)84.9(, the r)5.8(oot is of the class HTML::T)129.8(r)9.9(eeB)11.9(uilder)59.7(, but that)17.7()79.9(s)0( just a subclass of HTML::E)11.9(lement, plus a fe)-6(w extra methods lik)]TJ 49.3819 0 TD 0 Tw (e )Tj /F2 1 Tf 6 0 0 6 468.0729 153.8759 Tm -0.0002 Tc (parse_file)Tj /F1 1 Tf 8 0 0 8 504.0641 153.8759 Tm 0 Tc (.)Tj 6 0 0 6 63 143.856 Tm (3 )Tj 8 0 0 8 67.65 141.8759 Tm -0.0001 Tc 0.0249 Tw [(Y)89.8(es, this is misnamed. I)11.9(n)0.1( pr)5.8(oper SGML lingo, this is instead called a )]TJ /F2 1 Tf 6 0 0 6 282.6017 141.8759 Tm -0.0003 Tc 0 Tw (GI)Tj /F1 1 Tf 8 0 0 8 292 141.8759 Tm -0.0001 Tc 0.025 Tw [(\(shor)-7.9(t for )39.7(generic identifier)19.7(\) and the term )59.7(tag)17.7( is used for a token of SGML sour)5.8(ce that)]TJ -28.625 -1.25 TD [(r)9.9(epr)9.7(esents either the star)-7.9(t of an element \(a star)-7.9(t tag like )]TJ /F2 1 Tf 6 0 0 6 239.3642 131.876 Tm -0.0002 Tc 0.06 Tw ()Tj /F1 1 Tf 8 0 0 8 290.1118 131.876 Tm -0.0001 Tc 0.025 Tw (\) or the end of an element \(an end tag like )Tj /F2 1 Tf 6 0 0 6 430.8452 131.876 Tm -0.0002 Tc 0 Tw ()Tj /F1 1 Tf 8 0 0 8 448.8408 131.876 Tm -0.0001 Tc 0.025 Tw [(\). H)17.7(o)12(w)5.8(e)0(v)5.8(e)0.1(r)59.7(,)0( since mor)9.7(e people claim to hav)5.8(e)]TJ -48.2301 -1.25 TD [(been abducted b)5.8(y)0( aliens than to hav)5.8(e ev)5.8(er seen the SGML standar)13.8(d, and since both encounters typically inv)5.8(olv)5.8(e a feeling of )59.7(mis)]TJ 49.9508 0 TD [(sing time)29.7(, it)17.7()79.9(s)0( not surprising that the)]TJ -49.9508 -1.25 TD [(terminology of the SGML standar)13.8(d is not closely follo)11.9(w)5.8(ed.)]TJ ET 63 187.5 m 594 187.5 l S Q 0 0 0 0 k 1 i 37 874 191 -12 re 246.064 111.876 m f* BT /F2 1 Tf 8 0 0 8 39 864 Tm /Cs9 cs 1 scn -0.0004 Tc -0.0019 Tw (TPJ#19/9.26 9/27/00 10:35 AM Page 51)Tj ET 1 G 0 J 0 j 0.5 w 10 M []0 d 36 873 m 36 849 l 0 837 m 24 837 l 621 873 m 621 849 l 657 837 m 633 837 l 36 36 m 36 60 l 0 72 m 24 72 l 621 36 m 621 60 l 657 72 m 633 72 l S /Cs9 CS 1 SCN 0.25 w 36 873 m 36 849 l 0 837 m 24 837 l 621 873 m 621 849 l 657 837 m 633 837 l 36 36 m 36 60 l 0 72 m 24 72 l 621 36 m 621 60 l 657 72 m 633 72 l S 1 G 0.5 w 304.5 861 m 352.5 861 l 304.5 48 m 352.5 48 l 12 478.5 m 12 430.5 l 645 478.5 m 645 430.5 l 328.5 873 m 328.5 849 l 328.5 60 m 328.5 36 l 0 454.5 m 24 454.5 l 633 454.5 m 657 454.5 l 328.5 861 m 334.5 861 l 334.5 857.688 331.812 855 328.5 855 c 325.188 855 322.5 857.688 322.5 861 c 322.5 864.312 325.188 867 328.5 867 c 331.812 867 334.5 864.312 334.5 861 c 328.5 48 m 334.5 48 l 334.5 44.688 331.812 42 328.5 42 c 325.188 42 322.5 44.688 322.5 48 c 322.5 51.312 325.188 54 328.5 54 c 331.812 54 334.5 51.312 334.5 48 c 12 454.5 m 18 454.5 l 18 451.188 15.312 448.5 12 448.5 c 8.688 448.5 6 451.188 6 454.5 c 6 457.812 8.688 460.5 12 460.5 c 15.312 460.5 18 457.812 18 454.5 c 645 454.5 m 651 454.5 l 651 451.188 648.312 448.5 645 448.5 c 641.688 448.5 639 451.188 639 454.5 c 639 457.812 641.688 460.5 645 460.5 c 648.312 460.5 651 457.812 651 454.5 c S /Cs9 CS 1 SCN 0.25 w 304.5 861 m 352.5 861 l 304.5 48 m 352.5 48 l 12 478.5 m 12 430.5 l 645 478.5 m 645 430.5 l 328.5 873 m 328.5 849 l 328.5 60 m 328.5 36 l 0 454.5 m 24 454.5 l 633 454.5 m 657 454.5 l 328.5 861 m 334.5 861 l 334.5 857.688 331.812 855 328.5 855 c 325.188 855 322.5 857.688 322.5 861 c 322.5 864.312 325.188 867 328.5 867 c 331.812 867 334.5 864.312 334.5 861 c 328.5 48 m 334.5 48 l 334.5 44.688 331.812 42 328.5 42 c 325.188 42 322.5 44.688 322.5 48 c 322.5 51.312 325.188 54 328.5 54 c 331.812 54 334.5 51.312 334.5 48 c 12 454.5 m 18 454.5 l 18 451.188 15.312 448.5 12 448.5 c 8.688 448.5 6 451.188 6 454.5 c 6 457.812 8.688 460.5 12 460.5 c 15.312 460.5 18 457.812 18 454.5 c 645 454.5 m 651 454.5 l 651 451.188 648.312 448.5 645 448.5 c 641.688 448.5 639 451.188 639 454.5 c 639 457.812 641.688 460.5 645 460.5 c 648.312 460.5 651 457.812 651 454.5 c S endstream endobj 157 0 obj << /Type /Page /Parent 496 0 R /Resources 158 0 R /Contents 159 0 R /Thumb 423 0 R /MediaBox [ 0 0 684 873 ] /CropBox [ 0 0 684 873 ] /Rotate 0 >> endobj 158 0 obj << /ProcSet [ /PDF /Text ] /Font << /F1 515 0 R /F2 518 0 R /F3 261 0 R /F5 262 0 R /F8 268 0 R /F9 269 0 R /F11 271 0 R >> /ExtGState << /GS1 523 0 R /GS2 521 0 R >> /ColorSpace << /Cs9 520 0 R >> >> endobj 159 0 obj << /Length 13895 >> stream 1 g /GS1 gs 0 873 m 0 873 l f q 1 i 27 846 603 -783 re 0 873 m W n 0 873 684 -873 re W n BT /F1 1 Tf 11 0 0 11 63 802.0784 Tm 0 0 0 1 k /GS2 gs -0.0001 Tc 0.2242 Tw (consisting of just the single scalar )Tj /F2 1 Tf 9 0 0 9 221.2211 802.0784 Tm -0.0002 Tc 0 Tw (bar)Tj /F1 1 Tf 11 0 0 11 237.4171 802.0784 Tm -0.0001 Tc 0.2242 Tw (, and )Tj /F2 1 Tf 9 0 0 9 266.4119 802.0784 Tm -0.0002 Tc 0 Tw ($element-)Tj -22.6013 -1.3333 TD (>parent)Tj /F1 1 Tf 11 0 0 11 103.1913 790.0784 Tm -0.0001 Tc -0.0317 Tw [(r)9.9(eturns the par)9.7(ent of this node which might be,)]TJ -3.6538 -1.0909 TD 0.025 Tw (for example, a )Tj /F2 1 Tf 9 0 0 9 126.2989 778.0784 Tm -0.0002 Tc 0 Tw (

)Tj /F1 1 Tf 11 0 0 11 145.52 778.0784 Tm -0.0001 Tc (element.)Tj -7.5018 -2.1818 TD -0.0105 Tw [(And that)17.8()79.9(s)0( all that ther)9.7(e is to it y)5.8(ou thr)5.8(o)12(w)0( HTML sour)5.8(ce)]TJ 0 -1.0909 TD 0.1982 Tw [(at )44.8(T)129.9(r)9.9(eeB)11.9(uilder)59.7(, and it r)9.7(eturns a tr)9.7(ee of HTML::E)11.9(lement)]TJ T* 0.025 Tw (objects and some text strings.)Tj 0 -2.1818 TD -0.0298 Tw [(H)17.8(o)12(w)5.8(e)0(v)5.8(e)0.1(r)59.7(,)0( what do y)5.8(ou )]TJ /F5 1 Tf 8.8469 0 TD -0.0003 Tc 0 Tw (do)Tj /F1 1 Tf 1.0998 0 TD -0.0001 Tc -0.0298 Tw [(with a tr)9.7(ee of objects? P)53.9(eople code)]TJ -9.9467 -1.0909 TD 0.0379 Tw [(information into HTML tr)9.7(ees not for the fun of arranging)]TJ T* 0.0342 Tw [(elements, but to r)9.7(epr)9.7(esent the str)-7.9(uctur)9.7(e of specific text and)]TJ 0 -10.9091 TD 0.0543 Tw (images some text is in this )Tj /F2 1 Tf 9 0 0 9 194.3226 562.0784 Tm -0.0003 Tc 0 Tw (li)Tj /F1 1 Tf 11 0 0 11 208.4664 562.0784 Tm -0.0001 Tc 0.0543 Tw (element, some other text)Tj -13.2242 -1.0909 TD 0.1067 Tw [(is in that heading, some images ar)9.7(e in this table cell with)]TJ T* 0.025 Tw (those attributes, and so on.)Tj 0 -2.1818 TD -0.0101 Tc -0.0186 Tw [(N)29.7(o)12(w)74.9(,)0( it may happen that y)5.9(o)0.1(u)49.7()69.9(r)9.9(e)0( r)9.7(endering that whole HTML)]TJ 0 -1.0909 TD -0.024 Tw [(tr)9.7(ee into some lay)5.9(out format. O)5.9(r)0( y)5.8(ou could be tr)-17.8(ying to make)]TJ T* 0.0659 Tw [(some systematic change to the HTML tr)9.8(ee befor)9.7(e dumping)]TJ T* -0.0308 Tw [(it out as HTML sour)5.9(ce again. B)12(ut in my experience, the most)]TJ T* 0.0082 Tw [(common pr)5.8(ogramming task that P)54(erl pr)5.8(ogrammers face with)]TJ T* 0.0107 Tw [(HTML is tr)-17.9(ying to extract some piece of information fr)6(om a)]TJ T* 0.0994 Tw [(larger document. S)12(ince that)17.8()79.9(s)0( so common \(and also since it)]TJ T* 0.1221 Tw [(inv)5.8(olv)5.8(es concepts r)9.7(equir)9.7(ed for mor)9.7(e)0( complex tasks\), that is)]TJ T* 0.025 Tw [(what the r)9.7(est of this ar)-7.9(ticle will be about.)]TJ /F8 1 Tf 12 0 0 12 63 392.0784 Tm 0 Tc 0 Tw (S)Tj 10.44 0 0 10.44 69.2868 392.0783 Tm 0.0228 Tc (CANNING)Tj 12 0 0 12 124.2321 392.0783 Tm 0.0198 Tc (HTML )Tj 10.44 0 0 10.44 164.8634 392.0783 Tm 0.0228 Tc (TREES)Tj /F1 1 Tf 11 0 0 11 63 369.0784 Tm -0.0001 Tc 0.0805 Tw [(S)24.1(uppose y)5.8(ou hav)5.8(e a thousand HTML documents, each of)]TJ T* 0.025 Tw [(them a pr)9.7(ess r)9.7(e)0(lease. )44.8(They all star)-7.9(t out:)]TJ /F2 1 Tf 7 0 0 7 63 337.0784 Tm -0.0202 Tc 0.06 Tw [([...lots of leading images and junk...])]TJ 0 -1.1429 TD [(

ConGlomCo to Open New Corporate Office in Ougadougou

)]TJ T* [(BAKERSFIELD, CA, 2000-04-24 ConGlomCo's vice president in)]TJ T* [(charge of world conquest, Rock Feldspar, announced today the)]TJ T* [(opening of a new office in Ougadougou, the capital city of)]TJ T* [(Burkina Faso, gateway to the bustling "Silicon Sahara" of)]TJ T* 0 Tw (Africa...)Tj T* ([...etc...])Tj /F1 1 Tf 11 0 0 11 63 261.0784 Tm -0.0001 Tc 0.355 Tw [(What y)5.8(o)0.1(u)49.7()49.8(v)5.9(e)0( got to do is: F)35.8(or each document, copy)]TJ 0 -1.0909 TD 0.0497 Tw [(whatev)5.8(er text is in the )]TJ /F2 1 Tf 9 0 0 9 161.4987 249.0784 Tm -0.0003 Tc 0 Tw (h1)Tj /F1 1 Tf 11 0 0 11 175.5919 249.0784 Tm -0.0001 Tc 0.0496 Tw [(element, so that y)5.8(ou can make a)]TJ -10.2356 -1.0909 TD 0.025 Tw [(table of its contents. N)29.7(o)12(w)74.9(,)0( ther)9.7(e ar)9.7(e thr)9.7(ee ways to do this:)]TJ 0 -2.1818 TD [( )14.8(Y)93.9(ou can just use a r)9.7(egex to scan the file for a text pattern.)]TJ 1.6364 -2.1818 TD 0.3407 Tw [(F)35.9(or simple tasks, this will be fine. M)11.9(any HTML)]TJ 0 -1.0909 TD 0.0273 Tw [(documents ar)9.7(e, in practice, v)5.8(e)0.1(r)-17.9(y)0( consistently formatted)]TJ T* -0.0151 Tw [(with r)9.7(espect to placement of linebr)9.7(eaks and whitespace,)]TJ T* -0.028 Tw [(so y)5.8(ou could just get away with scanning the file like so:)]TJ /F2 1 Tf 7 0 0 7 351.2378 805.2832 Tm -0.0002 Tc 0.06 Tw (sub get_heading {)Tj 2.6394 -1.1429 TD [(my $filename = $_[0];)]TJ T* (local *HTML;)Tj T* (open\(HTML, $filename\))Tj 1.3197 -1.1429 TD -0.0001 Tc [(or die "Couldn't open $filename\);)]TJ -1.3197 -1.1429 TD -0.0002 Tc (my $heading;)Tj -1.3197 -1.1429 TD 0 Tw (Line:)Tj 1.3197 -1.1429 TD 0.06 Tw (while \(\) {)Tj 2.6394 -1.1429 TD 0 Tw (if\( )Tj /F11 1 Tf 2.4594 0 TD (m{

\(.*?\)

}i)Tj /F2 1 Tf 11.4572 0 TD 0.06 Tw (\) {)Tj -11.2772 -1.1429 TD ($heading = $1;)Tj T* (last Line;)Tj -2.6394 -1.1429 TD 0 Tc 0 Tw (})Tj -2.6394 -1.1429 TD (})Tj T* -0.0002 Tc (close\(HTML\);)Tj T* -0.0001 Tc 0.0599 Tw [(warn "No heading in $filename?")]TJ 1.3197 -1.1429 TD -0.0002 Tc [(unless defined $heading;)]TJ -1.3197 -1.1429 TD (return $heading;)Tj -2.6394 -1.1429 TD 0 Tc 0 Tw (})Tj /F1 1 Tf 11 0 0 11 360 645.2832 Tm -0.0001 Tc 0.0256 Tw [(This is quick, fast, and fragile if ther)9.7(e)29.7()79.9(s a ne)-5.9(wline in)]TJ 0 -1.0909 TD 0 Tc 0.0015 Tw [(the middle of a heading)17.8()80(s)0.1( text, it won)69.9()80(t)0.1( match the abo)15.9(v)6(e)]TJ T* -0.0001 Tc 0.0433 Tw [(r)9.9(egex, and y)5.8(o)0.1(u)49.7()12(ll get an err)5.8(or)59.7(. )44.8(The r)9.7(egex will also fail if)]TJ T* 0 Tw (the )Tj /F2 1 Tf 9 0 0 9 376.0664 609.2832 Tm -0.0003 Tc (h1)Tj /F1 1 Tf 11 0 0 11 389.5348 609.2832 Tm -0.0001 Tc -0.0072 Tw [(element)17.8()79.9(s)0( star)-7.9(t tag has any attributes. I)5.8(f)0( y)5.8(ou hav)5.8(e)]TJ -2.685 -1.0909 TD 0.003 Tw [(to adapt y)5.8(our code to fit mor)9.7(e kinds of star)-7.9(t tags, y)5.8(o)0.1(u)49.7()12(ll)]TJ T* 0.0738 Tw [(end up basically r)9.7(einv)5.8(enting par)-7.9(t of HTML::P)41.9(arser)59.7(,)0( at)]TJ T* 0.2163 Tw [(which point y)5.8(ou should pr)5.8(obably just stop and use)]TJ T* 0.025 Tw [(HTML::P)41.9(arser itself)15.8(.)]TJ -1.6364 -2.1818 TD -0.0009 Tw [()-471.1(Y)93.9(ou can use HTML::P)41.9(arser to scan the file for an )]TJ /F2 1 Tf 9 0 0 9 561.9815 537.2832 Tm -0.0003 Tc 0 Tw (h1)Tj /F1 1 Tf 11 0 0 11 575.5183 537.2832 Tm -0.0002 Tc [(star)-8(t)]TJ -20.3699 -1.0909 TD -0.0001 Tc 0.0101 Tw [(tag token and captur)9.7(e all the text tokens until the )]TJ /F2 1 Tf 9 0 0 9 564.6149 525.2832 Tm -0.0003 Tc 0 Tw (h1)Tj /F1 1 Tf 11 0 0 11 578.2735 525.2832 Tm -0.0001 Tc (end)Tj -20.6204 -1.0909 TD 0.2695 Tw [(tag. )44.9(This appr)5.8(oach is extensiv)5.8(ely co)15.8(v)5.9(e)0.1(r)9.7(ed in the K)5.8(e)0(n)]TJ T* 0.0199 Tc 0.355 Tw [(M)12(acF)47.8(arlane)29.7()79.9(s)-0.1( )44.8(TPJ #17 ar)-7.9(ticle )]TJ /F5 1 Tf 13.3072 0 TD [(P)54.1(arsing HTML with)]TJ -13.3072 -1.0909 TD -0.0001 Tc 0 Tw [(HTML::P)53.9(arser)]TJ /F1 1 Tf 5.5457 0 TD 0.231 Tw [(. \(A v)5.8(ariant of this appr)5.8(oach is to use)]TJ -5.5457 -1.0909 TD 0.0125 Tc 0.3624 Tw [(HTML::T)119.8(okeP)41.9(arser)59.7(, which pr)9.7(esents a differ)9.7(ent and)]TJ T* 0.0062 Tc 0.3687 Tw [(handier inter)-7.9(face to the tokens that HTML::P)41.8(arser)]TJ T* -0.0001 Tc 0 Tw (extracts.\))Tj 0.7774 -2.1818 TD 0.0035 Tc 0.3614 Tw [(U)29.8(sing HTML::P)41.8(arser is less fragile than our first)]TJ 0 -1.0909 TD -0.0101 Tc 0.2548 Tw [(appr)5.8(oach, since it is insensitiv)5.9(e to the exact internal)]TJ T* 0.1118 Tw [(formatting of the star)-7.8(t tag \(much less whether it)17.8()79.9(s)0( split)]TJ T* -0.0017 Tc 0.3666 Tw [(acr)5.8(oss two lines\). H)17.8(o)12(w)5.9(e)0(v)5.8(e)0.1(r)59.8(,)0( when y)5.8(ou need mor)9.7(e)]TJ T* -0.0101 Tc 0.1081 Tw (information about the context of the )Tj /F2 1 Tf 9 0 0 9 521.7584 381.2832 Tm -0.0103 Tc 0 Tw (h1)Tj /F1 1 Tf 11 0 0 11 536.2053 381.2832 Tm -0.0101 Tc 0.1082 Tw (element, or if)Tj -16.0187 -1.0909 TD 0.0338 Tw [(y)5.8(o)0.1(u)49.7()69.9(r)9.9(e)0( having to deal with tricky HTML bits like tables,)]TJ T* 0.3555 Tw [(y)5.8(o)0.1(u)49.7()12(ll find that the flat list of tokens r)9.8(eturned b)5.8(y)]TJ T* 0.0099 Tc 0.5838 Tw [(HTML::P)41.9(arser isn)69.7()79.9(t)0( immediately useful. )44.8(T)119.8(o)0( get)]TJ T* -0.0101 Tc -0.03 Tw [(something useful out of those tokens, y)5.9(o)0.1(u)49.7()12(ll need to write)]TJ T* -0.0307 Tw [(code that kno)11.9(ws which elements take no content \(as with)]TJ /F2 1 Tf 9 0 0 9 360 309.2832 Tm -0.0103 Tc 0 Tw (hr)Tj /F1 1 Tf 11 0 0 11 374.0595 309.2832 Tm -0.0101 Tc 0.0729 Tw (elements\), and that )Tj /F2 1 Tf 9 0 0 9 458.5957 309.2832 Tm -0.0102 Tc 0 Tw (

)Tj /F1 1 Tf 11 0 0 11 483.2727 309.2832 Tm -0.0101 Tc 0.0729 Tw [(end tags ar)9.7(e optional, so a)]TJ /F2 1 Tf 9 0 0 9 360 297.2832 Tm -0.0102 Tc 0 Tw (

)Tj /F1 1 Tf 11 0 0 11 379.7398 297.2832 Tm -0.0101 Tc 0.1067 Tw [(ends any curr)9.7(ently open paragraph. )14.9(Y)93.9(o)0.1(u)49.7()69.9(r)9.9(e)-0.1( w)5.8(ell on)]TJ -1.7945 -1.0909 TD 0.0323 Tw [(y)5.8(our way to pointlessly r)9.8(einv)5.8(enting much of the code in)]TJ T* 0.0099 Tc 0 Tw [(HTML::T)129.8(r)9.9(eeB)11.9(uilder)59.7(,)]TJ 7.15 0 0 7.15 451.1917 275.7551 Tm 0 Tc (4)Tj 11 0 0 11 462.11 273.2832 Tm 0.0099 Tc 0.3976 Tw [(at which point y)5.7(ou should)]TJ -9.2827 -1.0909 TD -0.0101 Tc 0.025 Tw [(pr)5.8(obably just stop and use HTML::T)129.9(r)9.9(eeB)11.9(uilder itself)15.8(.)]TJ -1.6364 -2.1818 TD -0.0001 Tc 0.2103 Tw [()-471.1(Y)93.9(ou can use HTML::T)129.8(r)9.9(eebuilder and scan the tr)9.7(ee of)]TJ 0.859 -1.0909 TD 0.025 Tw [(elements it cr)9.7(eates.)]TJ -0.859 -2.1818 TD 0.0199 Tc 0.6715 Tw [(The last appr)5.8(oach, using HTML::T)129.9(r)9.9(eeB)11.9(uilder)59.8(,)-0.1( is)]TJ 0 -1.0909 TD -0.0001 Tc 0.0306 Tw [(diametrically opposed to the first appr)5.8(oach, which inv)5.8(olv)5.8(es)]TJ T* 0.0085 Tc 0.3664 Tw [(just elementar)-17.9(y P)53.9(erl and one r)9.7(egex. )44.8(The )44.8(T)129.9(r)9.9(eeB)11.9(uilder)]TJ T* -0.0001 Tc 0.1441 Tw [(appr)5.8(oach inv)5.8(olv)5.8(es being comfor)-7.9(table with the concept of)]TJ T* 0.0066 Tc 0.3683 Tw [(tr)9.6(ee-shaped data str)-7.9(uctur)9.6(es and modules with object-)]TJ 12 0 0 12 63 90.3543 Tm 0 Tc 0 Tw [(52)-1100(F)]TJ 10.44 0 0 10.44 94.2795 90.3543 Tm -0.0001 Tc (ALL)Tj 12 0 0 12 115.6277 90.3543 Tm 0 Tc (2000)Tj /F3 1 Tf 30.9897 0.0003 TD -0.0002 Tc 0.0255 Tw [(The P)47.6(erl J)35.7(our)-8(nal #19)]TJ /F1 1 Tf 6 0 0 6 63 129.6754 Tm 0 Tc 0 Tw (4 )Tj 9 0 0 9 67.65 127.6953 Tm -0.0001 Tc 0.025 Tw [(And, as the person who last r)9.7(e)-6(wr)5.8(ote that module, I can attest that it wasn)69.7()79.9(t)0( terribly easy to get right! N)29.7(e)0(v)5.8(er under)9.7(estimate th)]TJ 48.0889 0 TD [(e per)-17.9(v)5.9(ersity of people)]TJ -48.6055 -1.1111 TD [(cr)9.7(eating HTML.)]TJ ET 0 0 0 1 K 0 J 0 j 0.5 w 10 M []0 d 63 139.5 m 594 139.5 l S BT /F9 1 Tf 14 0 0 14 80.5136 648.4205 Tm -0.0101 Tc 0.0277 Tw [(The most common pr)24.8(o)14.8(gramming)]TJ 0.2759 -1.2 TD -0.0102 Tc [(task that P)74.8(erl pr)24.7(o)14.7(grammers face)]TJ -1.0306 -1.2 TD [(with HTML is to e)9.6(xtract some chunk)]TJ 2.849 -1.2 TD [(fr)24.7(om a larg)14.7(er document.)]TJ ET 2 w 63 668 m 315 668 l S 0.667 w 63 665.33 m 315 665.33 l 63 592.68 m 315 592.68 l S 2 w 63 590.01 m 315 590.01 l S Q 0 0 0 0 k 1 i 37 874 191 -12 re 268.024 598.021 m f* BT /F2 1 Tf 8 0 0 8 39 864 Tm /Cs9 cs 1 scn -0.0004 Tc -0.0019 Tw (TPJ#19/9.26 9/27/00 10:35 AM Page 52)Tj ET 1 G 0 J 0 j 0.5 w 10 M []0 d 36 873 m 36 849 l 0 837 m 24 837 l 621 873 m 621 849 l 657 837 m 633 837 l 36 36 m 36 60 l 0 72 m 24 72 l 621 36 m 621 60 l 657 72 m 633 72 l S /Cs9 CS 1 SCN 0.25 w 36 873 m 36 849 l 0 837 m 24 837 l 621 873 m 621 849 l 657 837 m 633 837 l 36 36 m 36 60 l 0 72 m 24 72 l 621 36 m 621 60 l 657 72 m 633 72 l S 1 G 0.5 w 304.5 861 m 352.5 861 l 304.5 48 m 352.5 48 l 12 478.5 m 12 430.5 l 645 478.5 m 645 430.5 l 328.5 873 m 328.5 849 l 328.5 60 m 328.5 36 l 0 454.5 m 24 454.5 l 633 454.5 m 657 454.5 l 328.5 861 m 334.5 861 l 334.5 857.688 331.812 855 328.5 855 c 325.188 855 322.5 857.688 322.5 861 c 322.5 864.312 325.188 867 328.5 867 c 331.812 867 334.5 864.312 334.5 861 c 328.5 48 m 334.5 48 l 334.5 44.688 331.812 42 328.5 42 c 325.188 42 322.5 44.688 322.5 48 c 322.5 51.312 325.188 54 328.5 54 c 331.812 54 334.5 51.312 334.5 48 c 12 454.5 m 18 454.5 l 18 451.188 15.312 448.5 12 448.5 c 8.688 448.5 6 451.188 6 454.5 c 6 457.812 8.688 460.5 12 460.5 c 15.312 460.5 18 457.812 18 454.5 c 645 454.5 m 651 454.5 l 651 451.188 648.312 448.5 645 448.5 c 641.688 448.5 639 451.188 639 454.5 c 639 457.812 641.688 460.5 645 460.5 c 648.312 460.5 651 457.812 651 454.5 c S /Cs9 CS 1 SCN 0.25 w 304.5 861 m 352.5 861 l 304.5 48 m 352.5 48 l 12 478.5 m 12 430.5 l 645 478.5 m 645 430.5 l 328.5 873 m 328.5 849 l 328.5 60 m 328.5 36 l 0 454.5 m 24 454.5 l 633 454.5 m 657 454.5 l 328.5 861 m 334.5 861 l 334.5 857.688 331.812 855 328.5 855 c 325.188 855 322.5 857.688 322.5 861 c 322.5 864.312 325.188 867 328.5 867 c 331.812 867 334.5 864.312 334.5 861 c 328.5 48 m 334.5 48 l 334.5 44.688 331.812 42 328.5 42 c 325.188 42 322.5 44.688 322.5 48 c 322.5 51.312 325.188 54 328.5 54 c 331.812 54 334.5 51.312 334.5 48 c 12 454.5 m 18 454.5 l 18 451.188 15.312 448.5 12 448.5 c 8.688 448.5 6 451.188 6 454.5 c 6 457.812 8.688 460.5 12 460.5 c 15.312 460.5 18 457.812 18 454.5 c 645 454.5 m 651 454.5 l 651 451.188 648.312 448.5 645 448.5 c 641.688 448.5 639 451.188 639 454.5 c 639 457.812 641.688 460.5 645 460.5 c 648.312 460.5 651 457.812 651 454.5 c S endstream endobj 160 0 obj << /Type /Page /Parent 496 0 R /Resources 161 0 R /Contents 162 0 R /Thumb 425 0 R /MediaBox [ 0 0 684 873 ] /CropBox [ 0 0 684 873 ] /Rotate 0 >> endobj 161 0 obj << /ProcSet [ /PDF /Text ] /Font << /F1 515 0 R /F2 518 0 R /F3 261 0 R /F8 268 0 R /F11 271 0 R >> /ExtGState << /GS1 523 0 R /GS2 521 0 R >> /ColorSpace << /Cs9 520 0 R >> >> endobj 162 0 obj << /Length 8652 >> stream 1 g /GS1 gs 0 873 m 0 873 l f q 1 i 27 846 603 -783 re 0 873 m W n 0 873 684 -873 re W n BT /F1 1 Tf 11 0 0 11 63 802.0776 Tm 0 0 0 1 k /GS2 gs -0.0001 Tc 0.0646 Tw [(oriented inter)-7.9(faces, as w)5.8(ell as with the par)-7.9(ticular inter)-7.9(faces)]TJ 0 -1.0909 TD 0.025 Tw [(that HTML::T)129.8(r)9.9(eeB)11.9(uilder and HTML::E)11.9(lement pr)5.8(o)15.9(vide.)]TJ 0 -2.1818 TD 0.2699 Tw [(H)17.8(o)12(w)5.8(e)0(v)5.8(e)0.1(r)59.7(,)-0.1( the )44.8(T)129.9(r)9.9(eeB)11.9(uilder appr)5.8(oach is the most r)5.8(obust,)]TJ 0 -1.0909 TD 0.272 Tw [(because it inv)5.8(olv)5.8(es dealing with HTML in its )59.7(nativ)5.8(e)29.7()]TJ T* 0.1159 Tw [(format the tr)9.7(ee str)-7.9(uctur)9.7(e that HTML code r)9.7(epr)9.7(esents,)]TJ T* 0.0714 Tw [(without any consideration of ho)11.9(w the sour)5.8(ce is coded and)]TJ T* 0.025 Tw [(with what tags ar)9.7(e omitted.)]TJ T* 0.0744 Tw [(S)12.1(o, to extract the text fr)5.8(om the )]TJ /F2 1 Tf 9 0 0 9 201.805 706.0776 Tm -0.0003 Tc 0 Tw (h1)Tj /F1 1 Tf 11 0 0 11 216.1703 706.0776 Tm -0.0001 Tc 0.0744 Tw (elements of an HTML)Tj -13.9246 -1.0909 TD 0 Tw (document:)Tj /F2 1 Tf 7 0 0 7 72.2378 675.0776 Tm -0.0002 Tc 0.06 Tw (sub get_heading {)Tj 2.6394 -1.1429 TD [(my $tree = HTML::TreeBuilder->new;)]TJ T* 0 Tw ($tree->)Tj /F11 1 Tf 4.199 0 TD (parse_file)Tj /F2 1 Tf 5.9985 0 TD (\($_[0]\);)Tj -10.1975 -1.1429 TD 0.06 Tw (my $heading;)Tj T* (my $h1 = $tree->)Tj /F11 1 Tf 9.7776 0 TD 0 Tw (look_down)Tj /F2 1 Tf 5.3987 0 TD 0.06 Tw (\('_tag', 'h1'\);)Tj -15.1763 -1.1429 TD (if \($h1\) {)Tj 2.6394 -1.1429 TD ($heading = $h1->)Tj /F11 1 Tf 9.7176 0 TD 0 Tw (as_text)Tj /F2 1 Tf 4.199 0 TD 0 Tc (;)Tj -16.556 -1.1428 TD -0.0002 Tc 0.06 Tw (} else {)Tj 2.6394 -1.1429 TD (warn "No heading in $_[0]?";)Tj -2.6394 -1.1429 TD 0 Tc 0 Tw (})Tj T* -0.0002 Tc ($tree->)Tj /F11 1 Tf 4.199 0 TD (delete)Tj /F2 1 Tf 3.5991 0 TD 0.06 Tw [(; # clear memory)]TJ -7.7981 -1.1429 TD (return $heading;)Tj -2.6394 -1.1429 TD 0 Tc 0 Tw (})Tj /F1 1 Tf 11 0 0 11 63 556.0776 Tm -0.0001 Tc 0.3483 Tw [(This uses some unfamiliar methods. )44.9(The )]TJ /F2 1 Tf 9 0 0 9 261.0134 556.0776 Tm -0.0002 Tc 0 Tw (parse_file)Tj /F1 1 Tf 11 0 0 11 63 544.0776 Tm -0.0001 Tc 0.0063 Tw [(method that w)5.8(e)29.7()49.8(v)5.9(e seen befor)9.7(e builds a tr)9.7(ee based on sour)5.8(ce)]TJ 0 -1.0909 TD 0.1027 Tw [(fr)5.8(om the file giv)5.8(en. )44.9(The )]TJ /F2 1 Tf 9 0 0 9 171.7298 532.0776 Tm -0.0002 Tc 0 Tw (delete)Tj /F1 1 Tf 11 0 0 11 208.0015 532.0776 Tm -0.0001 Tc 0.1027 Tw [(method is for mar)5.8(king a)]TJ -13.182 -1.0909 TD 0.3044 Tw [(tr)9.7(ee)29.7()79.9(s)0( contents as av)5.8(ailable for garbage collection when)]TJ T* 0.2098 Tw [(y)5.8(o)0.1(u)49.7()69.9(r)9.9(e)0( done. )44.9(The )]TJ /F2 1 Tf 9 0 0 9 143.6709 508.0776 Tm -0.0002 Tc 0 Tw (as_text)Tj /F1 1 Tf 11 0 0 11 186.5185 508.0776 Tm -0.0001 Tc 0.2097 Tw [(method r)9.7(eturns a string that)]TJ -11.229 -1.0909 TD 0.2043 Tw [(contains all the text bits that ar)9.7(e childr)9.7(en \(or other)-17.9(wise)]TJ T* -0.0051 Tw [(descendants\) of the giv)5.8(en node to get the text content of)]TJ T* 0 Tw (the )Tj /F2 1 Tf 9 0 0 9 79.4205 472.0776 Tm -0.0002 Tc ($h1)Tj /F1 1 Tf 11 0 0 11 98.6416 472.0776 Tm -0.0001 Tc 0.025 Tw [(object, w)5.8(e)0( could just say:)]TJ /F2 1 Tf 7 0 0 7 72.2378 453.0776 Tm -0.0002 Tc 0.06 Tw ($heading = join '', $h1->content_list;)Tj /F1 1 Tf 11 0 0 11 63 429.0776 Tm -0.0001 Tc 0.0909 Tw [(but that will wor)5.8(k only if w)5.8(e)29.7()69.9(r)9.9(e sur)9.7(e that the )]TJ /F2 1 Tf 9 0 0 9 261.8025 429.0776 Tm -0.0003 Tc 0 Tw (h1)Tj /F1 1 Tf 11 0 0 11 276.3497 429.0776 Tm -0.0001 Tc [(element)17.7()79.9(s)]TJ -19.3954 -1.0909 TD 0.025 Tw [(childr)9.7(en will be only text bits. I)5.8(f)0( the document contained:)]TJ /F2 1 Tf 7 0 0 7 72.2378 397.0776 Tm -0.0002 Tc 0.06 Tw [(

Local Man Sees Blade Again

)]TJ /F1 1 Tf 11 0 0 11 63 373.0776 Tm -0.0001 Tc 0.025 Tw [(then the sub-tr)9.7(ee would be:)]TJ /F2 1 Tf 7 0 0 7 72.2378 343.0776 Tm -0.0002 Tc 0.06 Tw ( h1)Tj 1.3197 -1.1429 TD ( "Local Man Sees ")Tj T* ( cite)Tj 1.3197 -1.1429 TD ( "Blade")Tj -1.3197 -1.1429 TD ( " Again')Tj /F1 1 Tf 11 0 0 11 63 288.0775 Tm -0.0001 Tc 0 Tw (so )Tj /F2 1 Tf 9 0 0 9 74.339 288.0775 Tm -0.0002 Tc -0.0672 Tw [(join '', $h1->content_list)]TJ /F1 1 Tf 11 0 0 11 215.9364 288.0775 Tm -0.0001 Tc -0.028 Tw [(will r)9.7(esult in something)]TJ -13.9033 -1.0909 TD 0.025 Tw (like this:)Tj /F2 1 Tf 7 0 0 7 72.2378 256.0776 Tm 0.0599 Tw [(Local Man Sees HTML::Element=HASH\(0x15424040\) Again)]TJ /F1 1 Tf 11 0 0 11 63 232.0776 Tm 0 Tw [(M)24(eanwhile, )]TJ /F2 1 Tf 9 0 0 9 115.9332 232.0776 Tm -0.0002 Tc ($h1->as_text)Tj /F1 1 Tf 11 0 0 11 183.7424 232.0776 Tm -0.0001 Tc 0.025 Tw (would yield:)Tj /F2 1 Tf 7 0 0 7 72.2378 212.0776 Tm -0.0002 Tc 0.06 Tw (Local Man Sees Blade Again)Tj /F1 1 Tf 11 0 0 11 63 188.0776 Tm -0.0001 Tc -0.0206 Tw [(D)6(epending on what y)5.8(o)0.1(u)49.7()69.9(r)9.9(e)0( doing with the heading text, y)5.8(o)0.1(u)]TJ T* 0.1906 Tw (might want the )Tj /F2 1 Tf 9 0 0 9 137.2081 176.0776 Tm -0.0002 Tc 0 Tw (as_HTML)Tj /F1 1 Tf 11 0 0 11 179.8449 176.0776 Tm -0.0001 Tc 0.1905 Tw [(method instead. I)23.9(t)0.1( r)9.7(eturns the)]TJ -10.6223 -1.0909 TD 0.2826 Tw [(sub-tr)9.7(ee r)9.7(epr)9.7(esented as HTML sour)5.8(ce. )]TJ /F2 1 Tf 9 0 0 9 250.2158 164.0776 Tm -0.0002 Tc 0 Tw ($h1->as_HTML)Tj /F1 1 Tf 11 0 0 11 63 152.0776 Tm -0.0001 Tc 0.025 Tw (would yield:)Tj /F2 1 Tf 7 0 0 7 72.2378 132.0775 Tm -0.0002 Tc 0.06 Tw [(

Local Man Sees Blade Again

)]TJ /F1 1 Tf 12 0 0 12 517.3723 90.3543 Tm 0 Tc 0 Tw (F)Tj 10.44 0 0 10.44 523.4518 90.3543 Tm -0.0001 Tc (ALL)Tj 12 0 0 12 544.7999 90.3543 Tm 0 Tc 0.025 Tw [(2000 53)]TJ /F3 1 Tf -40.15 0 TD -0.0002 Tc 0.0255 Tw [(The P)47.6(erl J)35.7(our)-8(nal #19)]TJ ET 0 0 0 0.1 k /GS1 gs 342.5 809.5 251 -341 re 162.892 90.354 m f* 0 0 0 1 K 0 J 0 j 1 w 10 M []0 d 342.5 809.5 251 -341 re S BT /F8 1 Tf 24 0 0 24 398.314 662.3976 Tm 0 0 0 1 k /GS2 gs 0 Tw [(MET)88.7(A)17.7(GENIX)]TJ 1.1759 -1.2 TD 0.0255 Tw (1/4 page)Tj 0.57 -1.2 TD -0.0004 Tc 0 Tw [(NE)11.6(W)]TJ ET 0 0 0 0.1 k /GS1 gs 342.5 458.5 251 -341 re 495.79 604.798 m f* 342.5 458.5 251 -341 re S BT 24 0 0 24 436.8804 311.3976 Tm 0 0 0 1 k /GS2 gs -0.0002 Tc [(L)69.8(YRIS)]TJ -0.4311 -1.2 TD 0.0255 Tw (1/4 page)Tj 0.1088 -1.2 TD [(P)11.9(i)-0.1(ck U)29.6(p)]TJ ET Q 0 0 0 0 k /GS2 gs 1 i 37 874 191 -12 re 506.857 253.798 m f* BT /F2 1 Tf 8 0 0 8 39 864 Tm /Cs9 cs 1 scn -0.0004 Tc -0.0019 Tw (TPJ#19/9.26 9/27/00 10:35 AM Page 53)Tj ET 1 G 0 J 0 j 0.5 w 10 M []0 d 36 873 m 36 849 l 0 837 m 24 837 l 621 873 m 621 849 l 657 837 m 633 837 l 36 36 m 36 60 l 0 72 m 24 72 l 621 36 m 621 60 l 657 72 m 633 72 l S /Cs9 CS 1 SCN 0.25 w 36 873 m 36 849 l 0 837 m 24 837 l 621 873 m 621 849 l 657 837 m 633 837 l 36 36 m 36 60 l 0 72 m 24 72 l 621 36 m 621 60 l 657 72 m 633 72 l S 1 G 0.5 w 304.5 861 m 352.5 861 l 304.5 48 m 352.5 48 l 12 478.5 m 12 430.5 l 645 478.5 m 645 430.5 l 328.5 873 m 328.5 849 l 328.5 60 m 328.5 36 l 0 454.5 m 24 454.5 l 633 454.5 m 657 454.5 l 328.5 861 m 334.5 861 l 334.5 857.688 331.812 855 328.5 855 c 325.188 855 322.5 857.688 322.5 861 c 322.5 864.312 325.188 867 328.5 867 c 331.812 867 334.5 864.312 334.5 861 c 328.5 48 m 334.5 48 l 334.5 44.688 331.812 42 328.5 42 c 325.188 42 322.5 44.688 322.5 48 c 322.5 51.312 325.188 54 328.5 54 c 331.812 54 334.5 51.312 334.5 48 c 12 454.5 m 18 454.5 l 18 451.188 15.312 448.5 12 448.5 c 8.688 448.5 6 451.188 6 454.5 c 6 457.812 8.688 460.5 12 460.5 c 15.312 460.5 18 457.812 18 454.5 c 645 454.5 m 651 454.5 l 651 451.188 648.312 448.5 645 448.5 c 641.688 448.5 639 451.188 639 454.5 c 639 457.812 641.688 460.5 645 460.5 c 648.312 460.5 651 457.812 651 454.5 c S /Cs9 CS 1 SCN 0.25 w 304.5 861 m 352.5 861 l 304.5 48 m 352.5 48 l 12 478.5 m 12 430.5 l 645 478.5 m 645 430.5 l 328.5 873 m 328.5 849 l 328.5 60 m 328.5 36 l 0 454.5 m 24 454.5 l 633 454.5 m 657 454.5 l 328.5 861 m 334.5 861 l 334.5 857.688 331.812 855 328.5 855 c 325.188 855 322.5 857.688 322.5 861 c 322.5 864.312 325.188 867 328.5 867 c 331.812 867 334.5 864.312 334.5 861 c 328.5 48 m 334.5 48 l 334.5 44.688 331.812 42 328.5 42 c 325.188 42 322.5 44.688 322.5 48 c 322.5 51.312 325.188 54 328.5 54 c 331.812 54 334.5 51.312 334.5 48 c 12 454.5 m 18 454.5 l 18 451.188 15.312 448.5 12 448.5 c 8.688 448.5 6 451.188 6 454.5 c 6 457.812 8.688 460.5 12 460.5 c 15.312 460.5 18 457.812 18 454.5 c 645 454.5 m 651 454.5 l 651 451.188 648.312 448.5 645 448.5 c 641.688 448.5 639 451.188 639 454.5 c 639 457.812 641.688 460.5 645 460.5 c 648.312 460.5 651 457.812 651 454.5 c S endstream endobj 163 0 obj << /Type /Page /Parent 496 0 R /Resources 164 0 R /Contents 165 0 R /Thumb 427 0 R /MediaBox [ 0 0 684 873 ] /CropBox [ 0 0 684 873 ] /Rotate 0 >> endobj 164 0 obj << /ProcSet [ /PDF /Text ] /Font << /F1 515 0 R /F2 518 0 R /F3 261 0 R /F5 262 0 R /F8 268 0 R >> /ExtGState << /GS1 523 0 R /GS2 521 0 R >> /ColorSpace << /Cs9 520 0 R >> >> endobj 165 0 obj << /Length 17262 >> stream 1 g /GS1 gs 0 873 m 0 873 l f q 1 i 27 846 603 -783 re 0 873 m W n 0 873 684 -873 re W n BT /F1 1 Tf 11 0 0 11 63 802.0776 Tm 0 0 0 1 k /GS2 gs 0 Tc 0.0015 Tw [(H)17.9(o)12.1(w)5.9(e)0.1(v)5.9(e)0.2(r)59.8(,)0.1( if y)5.9(ou wanted the contents of )]TJ /F2 1 Tf 9 0 0 9 233.0122 802.0776 Tm -0.0002 Tc 0 Tw ($h1)Tj /F1 1 Tf 11 0 0 11 251.9757 802.0776 Tm 0.0002 Tc 0.0013 Tw (as HTML, but)Tj -17.1796 -1.0909 TD -0.0001 Tc 0.025 Tw (not the )Tj /F2 1 Tf 9 0 0 9 96.9394 790.0776 Tm -0.0002 Tc 0 Tw ($h1)Tj /F1 1 Tf 11 0 0 11 116.1605 790.0776 Tm -0.0001 Tc 0.025 Tw [(itself)15.8(, y)5.8(ou could say:)]TJ /F2 1 Tf 7 0 0 7 72.2378 770.0776 Tm -0.0002 Tc 0.06 Tw (join '',)Tj 1.3197 -1.1429 TD 0 Tw (map\()Tj 1.3197 -1.1429 TD 0.06 Tw (ref\($_\) ? $_->as_HTML : $_,)Tj T* 0 Tw ($h1->content_list)Tj -1.3197 -1.1429 TD 0 Tc (\))Tj /F1 1 Tf 11 0 0 11 63 714.0776 Tm -0.0051 Tc (This )Tj /F2 1 Tf 9 0 0 9 84.7124 714.0776 Tm (map)Tj /F1 1 Tf 11 0 0 11 103.4048 714.0776 Tm -0.0058 Tw [(iterates o)15.8(v)5.9(er the nodes in )]TJ /F2 1 Tf 9 0 0 9 209.7648 714.0776 Tm 0 Tw ($h1)Tj /F1 1 Tf 11 0 0 11 225.8259 714.0776 Tm -0.0058 Tw [()79.9(s)0( list of childr)9.7(en, and)]TJ -14.8024 -1.0909 TD 0.0457 Tw [(for each node that)17.7()79.9(s)0( just a text bit \(as )]TJ /F2 1 Tf 9 0 0 9 227.2939 702.0776 Tm 0.1096 Tw (Local Man Sees )Tj /F1 1 Tf 11 0 0 11 310.5585 702.0776 Tm 0 Tc 0 Tw ()Tj -22.5053 -1.0909 TD -0.0051 Tc -0.0134 Tw [(is\), it just passes thr)5.7(ough that string v)5.8(alue, and for each node)]TJ T* -0.0148 Tw [(that)17.7()79.9(s)0( an actual object \(causing )]TJ /F2 1 Tf 9 0 0 9 192.0626 678.0776 Tm 0 Tw (ref)Tj /F1 1 Tf 11 0 0 11 210.6553 678.0776 Tm -0.0148 Tw [(to be tr)-7.9(ue\), )]TJ /F2 1 Tf 9 0 0 9 259.6432 678.0776 Tm 0 Tw (as_HTML)Tj /F1 1 Tf 11 0 0 11 299.6507 678.0776 Tm (will)Tj -21.5137 -1.0909 TD 0.0114 Tw [(be used instead of the string v)5.7(alue of the object itself \(which)]TJ T* -0.0111 Tw [(would be something quite useless, as most object v)5.7(alues ar)9.7(e\).)]TJ T* 0.3551 Tw [(S)12.1(o)0( for the )]TJ /F2 1 Tf 9 0 0 9 118.5287 642.0776 Tm 0 Tw (cite)Tj /F1 1 Tf 11 0 0 11 146.5443 642.0776 Tm (element, )Tj /F2 1 Tf 9 0 0 9 189.0434 642.0776 Tm (as_HTML)Tj /F1 1 Tf 11 0 0 11 233.1201 642.0776 Tm 0.3551 Tw (will be the string)Tj /F2 1 Tf 9 0 0 9 63 630.0776 Tm 0.0148 Tc 0 Tw (Blade)Tj /F1 1 Tf 11 0 0 11 162.6062 630.0776 Tm 0.4702 Tw [(. And then, finally)84.9(, )]TJ /F2 1 Tf 9 0 0 9 268.9414 630.0776 Tm 0 Tw (join)Tj /F1 1 Tf 11 0 0 11 299.1629 630.0776 Tm (just)Tj -21.4694 -1.0909 TD -0.0051 Tc 0.0051 Tw (combines all the strings that the )Tj /F2 1 Tf 9 0 0 9 199.5279 618.0776 Tm 0 Tw (map)Tj /F1 1 Tf 11 0 0 11 218.3401 618.0776 Tm 0.0051 Tw [(r)9.9(eturns into one string.)]TJ -14.1218 -2.0909 TD -0.0001 Tc 0.1178 Tw [(F)34(inally)84.9(,)0( the most impor)-7.9(tant method in our )]TJ /F2 1 Tf 9 0 0 9 255.6147 595.0776 Tm -0.0002 Tc 0 Tw (get_heading)Tj /F1 1 Tf 11 0 0 11 63 583.0776 Tm -0.0001 Tc 0.1171 Tw [(subr)5.8(outine is the )]TJ /F2 1 Tf 9 0 0 9 140.4629 583.0776 Tm -0.0002 Tc 0 Tw (look_down)Tj /F1 1 Tf 11 0 0 11 193.0886 583.0776 Tm -0.0001 Tc 0.1171 Tw [(method. )44.9(This method looks)]TJ -11.8262 -1.0909 TD -0.023 Tw [(do)11.9(wn at the sub-tr)9.7(ee star)-7.9(ting at the giv)5.8(en object \(her)9.7(e, )]TJ /F2 1 Tf 9 0 0 9 292.5359 571.0776 Tm -0.0002 Tc 0 Tw ($h1)Tj /F1 1 Tf 11 0 0 11 308.732 571.0776 Tm (\),)Tj -22.3393 -1.0909 TD -0.0001 Tc 0.025 Tw [(r)9.9(etrieving elements that meet criteria y)5.8(ou pr)5.8(o)15.9(vide.)]TJ 0 -2.0909 TD 0.2053 Tw [(The criteria ar)9.7(e specified in the method)11.9()79.9(s)0( argument list.)]TJ 0 -1.0909 TD 0.1816 Tw [(Each criterion consists of two scalars: a key and a v)5.8(alue)]TJ T* -0.03 Tw [(expr)9.7(essing an element and attribute. )44.8(The key might be )]TJ /F2 1 Tf 9 0 0 9 293.4053 512.0776 Tm -0.0002 Tc 0 Tw (_tag)Tj /F1 1 Tf 11 0 0 11 63 500.0776 Tm (or )Tj /F2 1 Tf 9 0 0 9 74.8632 500.0776 Tm (src)Tj /F1 1 Tf 11 0 0 11 91.0593 500.0776 Tm -0.0001 Tc 0.0109 Tw [(, and the v)5.8(alue might be an attribute like )]TJ /F2 1 Tf 9 0 0 9 267.897 500.0776 Tm -0.0003 Tc 0 Tw (h1)Tj /F1 1 Tf 11 0 0 11 278.6944 500.0776 Tm 0 Tc 0.0108 Tw [(. O)5.9(r)60(, the)]TJ -19.6086 -1.0909 TD -0.0001 Tc -0.0372 Tw [(criterion can be a r)9.7(efer)9.7(ence to a subr)5.8(outine that, when called)]TJ T* 0.0242 Tw [(on an element, r)9.7(eturns tr)-7.9(ue if it)17.7()79.9(s)0( a node y)5.8(o)0.1(u)49.7()69.9(r)9.9(e)0( looking for)59.7(.)]TJ T* 0.0882 Tw [(I)5.9(f)0( y)5.8(ou specify sev)5.8(eral criteria, that means y)5.8(ou want all the)]TJ T* -0.0064 Tw (elements that satisfy )Tj /F5 1 Tf 7.9811 0 TD -0.0002 Tc 0 Tw (all)Tj /F1 1 Tf 1.1792 0 TD -0.0001 Tc -0.0064 Tw [(the criteria. \(I)11.9(n other wor)13.9(ds, ther)9.7(e)29.7()79.9(s)]TJ -9.1603 -1.0909 TD 0.025 Tw [(an implicit )59.8(and.\))]TJ 0 -2.0909 TD -0.0268 Tw [(And finally)84.9(, ther)9.7(e)29.7()79.9(s a bit of an optimization if y)5.8(ou call the)]TJ /F2 1 Tf 9 0 0 9 63 405.0776 Tm -0.0002 Tc 0 Tw (look_down)Tj /F1 1 Tf 11 0 0 11 114.3151 405.0776 Tm -0.0001 Tc -0.002 Tw [(method in a scalar context, y)5.8(ou get just the )]TJ /F5 1 Tf 16.8185 0 TD 0 Tw (first)Tj /F1 1 Tf -21.4836 -1.0909 TD 0.0761 Tw (node \(or )Tj /F2 1 Tf 9 0 0 9 103.7563 393.0776 Tm -0.0002 Tc 0 Tw (undef)Tj /F1 1 Tf 11 0 0 11 134.3365 393.0776 Tm -0.0001 Tc 0.0761 Tw (if none\) and, in fact, once )Tj /F2 1 Tf 9 0 0 9 266.4118 393.0776 Tm -0.0002 Tc 0 Tw (look_down)Tj /F1 1 Tf 11 0 0 11 63 381.0776 Tm -0.0001 Tc 0.0455 Tw [(finds that first matching element, it doesn)69.8()79.9(t)0( bother looking)]TJ T* 0.025 Tw [(any fur)-7.9(ther)59.7(.)]TJ 0 -2.0909 TD [(S)12.1(o)0( the example:)]TJ /F2 1 Tf 7 0 0 7 72.2378 327.0775 Tm -0.0002 Tc 0.06 Tw ($h1 = $tree->look_down\('_tag', 'h1'\);)Tj /F1 1 Tf 11 0 0 11 63 304.0776 Tm -0.0001 Tc 0.0841 Tw [(r)9.9(eturns the first element at or under )]TJ /F2 1 Tf 9 0 0 9 224.002 304.0776 Tm -0.0002 Tc 0 Tw ($tree)Tj /F1 1 Tf 11 0 0 11 254.6705 304.0776 Tm -0.0001 Tc 0.0841 Tw (whose )Tj /F2 1 Tf 9 0 0 9 288.9635 304.0776 Tm -0.0002 Tc 0 Tw (_tag)Tj /F1 1 Tf 11 0 0 11 310.5583 304.0776 Tm 0 Tc ()Tj -22.5053 -1.0909 TD -0.0001 Tc 0.025 Tw [(attribute has the v)5.8(alue )]TJ /F2 1 Tf 9 0 0 9 160.5166 292.0776 Tm -0.0003 Tc 0 Tw (h1)Tj /F1 1 Tf 11 0 0 11 171.314 292.0776 Tm 0 Tc (.)Tj /F8 1 Tf 12 0 0 12 63 267.0775 Tm (C)Tj 10.44 0 0 10.44 71.5661 267.0775 Tm 0.0228 Tc (OMPLEX)Tj 12 0 0 12 119.2928 267.0775 Tm 0 Tc (C)Tj 10.44 0 0 10.44 127.8589 267.0775 Tm 0.0227 Tc [(RITERIA)-345.6(IN)]TJ 12 0 0 12 190.2326 267.0775 Tm 0 Tc (T)Tj 10.44 0 0 10.44 198.6551 267.0775 Tm 0.0227 Tc (REE)Tj 12 0 0 12 221.9324 267.0775 Tm 0 Tc (S)Tj 10.44 0 0 10.44 228.2193 267.0775 Tm 0.0228 Tc (CANNING)Tj /F1 1 Tf 11 0 0 11 63 244.0776 Tm -0.0001 Tc 0.0377 Tw [(N)29.7(o)12(w)74.9(,)0( the abo)15.8(v)5.9(e)-0.1( )]TJ /F2 1 Tf 9 0 0 9 132.7232 244.0776 Tm -0.0002 Tc 0 Tw (look_down)Tj /F1 1 Tf 11 0 0 11 184.4752 244.0776 Tm -0.0001 Tc 0.0376 Tw [(code looks like a lot of bother)59.7(,)]TJ -11.0432 -1.0909 TD 0.1515 Tw [(with bar)9.7(ely mor)9.7(e benefit than just gr)9.7(epping the file! B)11.9(u)0(t)]TJ T* 0.0049 Tc 0.37 Tw [(consider a situation in which y)5.8(our criteria ar)9.7(e mor)9.7(e)]TJ T* -0.0001 Tc 0.0248 Tw [(complicated suppose y)5.8(ou found that some of y)5.8(our pr)9.7(ess)]TJ T* 0.0067 Tw [(r)9.9(eleases had sev)5.8(eral )]TJ /F2 1 Tf 9 0 0 9 145.8027 196.0776 Tm -0.0003 Tc 0 Tw (h1)Tj /F1 1 Tf 11 0 0 11 159.4232 196.0776 Tm -0.0001 Tc 0.0067 Tw [(elements, possibly befor)9.7(e or after the)]TJ -8.7657 -1.0909 TD 0.025 Tw [(one y)5.8(ou actually want. F)35.8(or example:)]TJ /F2 1 Tf 7 0 0 7 71.7478 165.0775 Tm -0.0352 Tc 0.06 Tw (

Visit Our Corporate Partner)Tj 0.6248 -1.1429 TD (
)Tj 2.4994 -1.1429 TD ()Tj -3.1242 -1.1429 TD 0 Tw (

)Tj T* 0.0599 Tw [(

ConGlomCo President Schreck to Visit Regional HQ)]TJ 0.6248 -1.1429 TD (
)Tj 42.3565 97.1722 TD ()Tj -3.1242 -1.1429 TD 0 Tw (

)Tj /F1 1 Tf 11 0 0 11 342 773.2832 Tm -0.0001 Tc 0.1452 Tw [(H)17.8(e)0.1(r)9.7(e, y)5.8(ou want to ignor)9.7(e the first )]TJ /F2 1 Tf 9 0 0 9 498.1351 773.2832 Tm -0.0003 Tc 0 Tw (h1)Tj /F1 1 Tf 11 0 0 11 513.2797 773.2832 Tm -0.0001 Tc 0.1452 Tw (element because it)Tj -15.5709 -1.0909 TD 0.0403 Tw [(contains an ad, and y)5.8(ou want the text fr)5.8(om the second )]TJ /F2 1 Tf 9 0 0 9 580.4528 761.2832 Tm -0.0003 Tc 0 Tw (h1)Tj /F1 1 Tf 11 0 0 11 591.2502 761.2832 Tm 0 Tc (.)Tj -22.6591 -1.0909 TD -0.0001 Tc 0.1029 Tw [(The pr)5.8(oblem is ho)11.9(w to formaliz)5.8(e what)17.7()79.9(s)0( an ad and what)17.7()79.9(s)]TJ T* 0.1212 Tw [(not. S)11.9(ince ad banners ar)9.7(e always entr)9.7(eating y)5.8(ou to )39.7(visit)17.7()]TJ T* 0.1996 Tw [(the sponsoring site, y)5.8(ou could ex)11.9(clude )]TJ /F2 1 Tf 9 0 0 9 519.3135 725.2832 Tm -0.0003 Tc 0 Tw (h1)Tj /F1 1 Tf 11 0 0 11 535.0563 725.2832 Tm -0.0001 Tc 0.1996 Tw (elements that)Tj -17.5506 -1.0909 TD 0.0249 Tw [(contain the wor)13.8(d )39.7(visit)17.7( under them:)]TJ /F2 1 Tf 7 0 0 7 351.2378 694.2832 Tm 0.0599 Tw [(my $real_h1 = $tree->look_down\()]TJ 1.3197 -1.1429 TD -0.0002 Tc ('_tag', 'h1',)Tj T* (sub {)Tj 1.3197 -1.1429 TD [($_[0]->as_text !~ m/\\bvisit/i)]TJ -1.3197 -1.1429 TD 0 Tc 0 Tw (})Tj -1.3197 -1.1429 TD -0.0003 Tc (\);)Tj /F1 1 Tf 11 0 0 11 342 631.2832 Tm -0.0001 Tc 0.1396 Tw (The first criterion looks for )Tj /F2 1 Tf 9 0 0 9 467.9375 631.2832 Tm -0.0003 Tc 0 Tw (h1)Tj /F1 1 Tf 11 0 0 11 483.0207 631.2832 Tm -0.0001 Tc 0.1397 Tw (elements, and the second)Tj -12.8201 -1.0909 TD 0.1419 Tw [(criterion limits those to only the ones whose text doesn)69.8()79.9(t)]TJ T* 0 Tw (match )Tj /F2 1 Tf 9 0 0 9 371.2114 607.2832 Tm -0.0002 Tc (m/\\bvisit/)Tj /F1 1 Tf 11 0 0 11 425.1983 607.2832 Tm -0.0001 Tc -0.0067 Tw [(. U)35.8(nfor)-7.9(tunately)84.9(, that won)69.8()79.9(t)0( wor)5.8(k)0( for our)]TJ -7.5635 -1.0909 TD 0.3492 Tw (example, since the second )Tj /F2 1 Tf 9 0 0 9 469.287 595.2832 Tm -0.0003 Tc 0 Tw (h1)Tj /F1 1 Tf 11 0 0 11 486.6748 595.2832 Tm -0.0001 Tc 0.3491 Tw [(mentions ConG)5.8(lomCo)]TJ -13.1523 -1.0909 TD 0.025 Tw [(P)29.9(r)9.9(esident Schr)9.7(eck to )]TJ /F5 1 Tf 8.1746 0 TD 0 Tw [(V)9.8(isit)]TJ /F1 1 Tf 1.9886 0 TD 0.025 Tw [(R)12.1(egional HQ.)]TJ -10.1632 -2.0909 TD 0.0363 Tw [(I)12(nstead, y)5.8(ou could tr)-17.9(y looking for the first )]TJ /F2 1 Tf 9 0 0 9 526.4589 560.2832 Tm -0.0003 Tc 0 Tw (h1)Tj /F1 1 Tf 11 0 0 11 540.4056 560.2832 Tm -0.0001 Tc 0.0363 Tw (element that)Tj -18.0369 -1.0909 TD 0.025 Tw [(doesn)69.8()79.9(t)0( contain an image:)]TJ /F2 1 Tf 7 0 0 7 351.2378 529.2832 Tm 0.0599 Tw [(my $real_h1 = $tree->look_down\()]TJ 1.3197 -1.1429 TD -0.0002 Tc ('_tag', 'h1',)Tj T* (sub {)Tj 1.3197 -1.1429 TD -0.0001 Tc [(not $_[0]->look_down\('_tag', 'img'\))]TJ -1.3197 -1.1429 TD 0 Tc 0 Tw (})Tj -1.3197 -1.1429 TD -0.0003 Tc (\);)Tj /F1 1 Tf 11 0 0 11 342 466.2832 Tm -0.0001 Tc -0.0298 Tw [(This criterion subr)5.8(outine might seem a bit odd, since it calls)]TJ /F2 1 Tf 9 0 0 9 342 454.2832 Tm -0.0002 Tc 0 Tw (look_down)Tj /F1 1 Tf 11 0 0 11 394.9715 454.2832 Tm -0.0001 Tc 0.1484 Tw [(as par)-7.9(t)0( of a larger )]TJ /F2 1 Tf 9 0 0 9 478.7018 454.2832 Tm -0.0002 Tc 0 Tw (look_down)Tj /F1 1 Tf 11 0 0 11 531.6733 454.2832 Tm -0.0001 Tc 0.1485 Tw (operation, but)Tj -17.243 -1.0909 TD 0.032 Tw [(that)17.8()79.9(s)0( fine. N)29.7(ote if ther)9.7(e)29.7()79.9(s no matching element at or under)]TJ T* 0.2326 Tw [(the giv)5.8(en element, )]TJ /F2 1 Tf 9 0 0 9 430.2056 430.2832 Tm -0.0002 Tc 0 Tw (look_down)Tj /F1 1 Tf 11 0 0 11 484.1027 430.2832 Tm -0.0001 Tc 0.2326 Tw [(r)9.9(eturns false \(specifically)84.9(,)]TJ /F2 1 Tf 9 0 0 9 342 418.2832 Tm 0.0119 Tc 0 Tw (undef)Tj /F1 1 Tf 11 0 0 11 369.5376 418.2832 Tm 0.3629 Tw [(\) in a boolean context. I)5.8(f)0( ther)9.7(e ar)9.7(e matching)]TJ -2.5034 -1.0909 TD -0.0001 Tc -0.027 Tw [(elements, it r)9.7(eturns the first. S)11.9(o)0( this means )49.7(r)9.9(eturn tr)-7.9(ue only)]TJ T* 0.0352 Tw (if this element has no )Tj /F2 1 Tf 9 0 0 9 437.4818 394.2832 Tm -0.0002 Tc 0 Tw (img)Tj /F1 1 Tf 11 0 0 11 456.815 394.2832 Tm -0.0001 Tc 0.0352 Tw [(element as descendants and isn)69.8()79.9(t)]TJ -10.4377 -1.0909 TD 0 Tw (an )Tj /F2 1 Tf 9 0 0 9 355.2408 382.2832 Tm -0.0002 Tc (img)Tj /F1 1 Tf 11 0 0 11 374.4619 382.2832 Tm -0.0001 Tc 0.025 Tw [(element itself)15.8(.)]TJ /F2 1 Tf 7 0 0 7 351.2378 363.2832 Tm -0.0002 Tc 0.06 Tw (sub {)Tj 1.3197 -1.1429 TD -0.0001 Tc [(not $_[0]->look_down\('_tag', 'img'\))]TJ -1.3197 -1.1428 TD 0 Tc 0 Tw (})Tj /F1 1 Tf 11 0 0 11 342 324.2832 Tm -0.0001 Tc 0.1025 Tw [(This corr)9.7(ectly filters out the first )]TJ /F2 1 Tf 9 0 0 9 489.1649 324.2832 Tm -0.0003 Tc 0 Tw (h1)Tj /F1 1 Tf 11 0 0 11 503.8397 324.2832 Tm -0.0001 Tc 0.1025 Tw (that contains the ad,)Tj -14.7127 -1.0909 TD -0.0094 Tw [(but it also incorr)9.7(ectly filters out the second )]TJ /F2 1 Tf 9 0 0 9 525.5655 312.2832 Tm -0.0003 Tc 0 Tw (h1)Tj /F1 1 Tf 11 0 0 11 539.0096 312.2832 Tm -0.0001 Tc -0.0094 Tw (that contains)Tj -17.91 -1.0909 TD -0.0202 Tw [(a non-adv)5.8(e)0.1(r)-7.9(tisement photo near the headline text y)5.8(ou want.)]TJ 0 -2.0909 TD -0.0332 Tw [(Ther)9.7(e clearly ar)9.7(e detectable differ)9.7(ences betw)5.8(een the first and)]TJ 0 -1.0909 TD 0 Tw (second )Tj /F2 1 Tf 9 0 0 9 375.313 265.2832 Tm -0.0003 Tc (h1)Tj /F1 1 Tf 11 0 0 11 390.4007 265.2832 Tm -0.0001 Tc 0.1401 Tw (elements the only second one contains the)Tj -4.4001 -1.0909 TD 0.025 Tw [(string Schr)9.7(eck)39.7(, and w)5.8(e)0( can just test for that:)]TJ /F2 1 Tf 7 0 0 7 351.2378 234.2832 Tm 0.0599 Tw [(my $real_h1 = $tree->look_down\()]TJ 1.3197 -1.1429 TD -0.0002 Tc ('_tag', 'h1',)Tj T* (sub {)Tj 1.3197 -1.1429 TD ($_[0]->as_text =~ m{Schreck})Tj -1.3197 -1.1429 TD 0 Tc 0 Tw (})Tj -1.3197 -1.1429 TD -0.0003 Tc (\);)Tj /F1 1 Tf 11 0 0 11 342 171.2832 Tm -0.0001 Tc 0.16 Tw [(And that wor)5.8(ks fine for this one example, but unless all)]TJ 0 -1.0909 TD 0.3253 Tw [(thousand of y)5.8(our pr)9.7(ess r)9.7(eleases hav)5.8(e Schr)9.7(eck)39.7( in the)]TJ T* 0.0354 Tw [(headline, it)17.7()79.9(s)0( not generic enough. H)17.8(o)12(w)5.9(e)0(v)5.8(e)0.1(r)59.7(,)0( if all the ads in)]TJ /F2 1 Tf 9 0 0 9 342 135.2832 Tm -0.0003 Tc 0 Tw (h1)Tj /F1 1 Tf 11 0 0 11 352.7974 135.2832 Tm -0.0001 Tc 0.0565 Tw [(s inv)5.8(olv)5.8(e a link whose URL inv)5.8(olv)5.8(es )]TJ /F2 1 Tf 9 0 0 9 517.33 135.2832 Tm -0.0002 Tc 0 Tw (/dyna/)Tj /F1 1 Tf 11 0 0 11 549.7221 135.2832 Tm -0.0001 Tc 0.0565 Tw [(, y)5.8(ou can)]TJ -18.8838 -1.0909 TD 0.025 Tw (use that:)Tj 12 0 0 12 63 90.3543 Tm 0 Tc 0 Tw [(54)-1100(F)]TJ 10.44 0 0 10.44 94.2795 90.3543 Tm -0.0001 Tc (ALL)Tj 12 0 0 12 115.6277 90.3543 Tm 0 Tc (2000)Tj /F3 1 Tf 30.9897 0.0003 TD -0.0002 Tc 0.0255 Tw [(The P)47.6(erl J)35.7(our)-8(nal #19)]TJ ET Q 0 0 0 0 k /GS2 gs 1 i 37 874 191 -12 re 587.395 90.357 m f* BT /F2 1 Tf 8 0 0 8 39 864 Tm /Cs9 cs 1 scn -0.0004 Tc -0.0019 Tw (TPJ#19/9.26 9/27/00 10:35 AM Page 54)Tj ET 1 G 0 J 0 j 0.5 w 10 M []0 d 36 873 m 36 849 l 0 837 m 24 837 l 621 873 m 621 849 l 657 837 m 633 837 l 36 36 m 36 60 l 0 72 m 24 72 l 621 36 m 621 60 l 657 72 m 633 72 l S /Cs9 CS 1 SCN 0.25 w 36 873 m 36 849 l 0 837 m 24 837 l 621 873 m 621 849 l 657 837 m 633 837 l 36 36 m 36 60 l 0 72 m 24 72 l 621 36 m 621 60 l 657 72 m 633 72 l S 1 G 0.5 w 304.5 861 m 352.5 861 l 304.5 48 m 352.5 48 l 12 478.5 m 12 430.5 l 645 478.5 m 645 430.5 l 328.5 873 m 328.5 849 l 328.5 60 m 328.5 36 l 0 454.5 m 24 454.5 l 633 454.5 m 657 454.5 l 328.5 861 m 334.5 861 l 334.5 857.688 331.812 855 328.5 855 c 325.188 855 322.5 857.688 322.5 861 c 322.5 864.312 325.188 867 328.5 867 c 331.812 867 334.5 864.312 334.5 861 c 328.5 48 m 334.5 48 l 334.5 44.688 331.812 42 328.5 42 c 325.188 42 322.5 44.688 322.5 48 c 322.5 51.312 325.188 54 328.5 54 c 331.812 54 334.5 51.312 334.5 48 c 12 454.5 m 18 454.5 l 18 451.188 15.312 448.5 12 448.5 c 8.688 448.5 6 451.188 6 454.5 c 6 457.812 8.688 460.5 12 460.5 c 15.312 460.5 18 457.812 18 454.5 c 645 454.5 m 651 454.5 l 651 451.188 648.312 448.5 645 448.5 c 641.688 448.5 639 451.188 639 454.5 c 639 457.812 641.688 460.5 645 460.5 c 648.312 460.5 651 457.812 651 454.5 c S /Cs9 CS 1 SCN 0.25 w 304.5 861 m 352.5 861 l 304.5 48 m 352.5 48 l 12 478.5 m 12 430.5 l 645 478.5 m 645 430.5 l 328.5 873 m 328.5 849 l 328.5 60 m 328.5 36 l 0 454.5 m 24 454.5 l 633 454.5 m 657 454.5 l 328.5 861 m 334.5 861 l 334.5 857.688 331.812 855 328.5 855 c 325.188 855 322.5 857.688 322.5 861 c 322.5 864.312 325.188 867 328.5 867 c 331.812 867 334.5 864.312 334.5 861 c 328.5 48 m 334.5 48 l 334.5 44.688 331.812 42 328.5 42 c 325.188 42 322.5 44.688 322.5 48 c 322.5 51.312 325.188 54 328.5 54 c 331.812 54 334.5 51.312 334.5 48 c 12 454.5 m 18 454.5 l 18 451.188 15.312 448.5 12 448.5 c 8.688 448.5 6 451.188 6 454.5 c 6 457.812 8.688 460.5 12 460.5 c 15.312 460.5 18 457.812 18 454.5 c 645 454.5 m 651 454.5 l 651 451.188 648.312 448.5 645 448.5 c 641.688 448.5 639 451.188 639 454.5 c 639 457.812 641.688 460.5 645 460.5 c 648.312 460.5 651 457.812 651 454.5 c S endstream endobj 166 0 obj << /Type /Page /Parent 496 0 R /Resources 167 0 R /Contents 168 0 R /Thumb 429 0 R /MediaBox [ 0 0 684 873 ] /CropBox [ 0 0 684 873 ] /Rotate 0 >> endobj 167 0 obj << /ProcSet [ /PDF /Text ] /Font << /F1 515 0 R /F2 518 0 R /F3 261 0 R /F5 262 0 R /F8 268 0 R >> /ExtGState << /GS1 523 0 R /GS2 521 0 R >> /ColorSpace << /Cs9 520 0 R >> >> endobj 168 0 obj << /Length 10942 >> stream 1 g /GS1 gs 0 873 m 0 873 l f q 1 i 27 846 603 -783 re 0 873 m W n 0 873 684 -873 re W n BT /F2 1 Tf 7 0 0 7 72.2378 805.2832 Tm 0 0 0 1 k /GS2 gs -0.0002 Tc 0.06 Tw [(my $real_h1 = $tree->look_down\()]TJ 1.3197 -1.1429 TD ('_tag', 'h1',)Tj T* (sub {)Tj 1.3197 -1.1429 TD (my $link = $_[0]->look_down\('_tag','a'\);)Tj T* (# no link means it's fine)Tj T* (return 1 unless $link;)Tj 0 -2.2857 TD (# a link to there is bad)Tj 0 -1.1429 TD [(return 0 if $link->attr\('href'\) =~ m{/dyna/};)]TJ 0 -2.2857 TD [(return 1; # otherwise okay)]TJ -1.3197 -1.1429 TD 0 Tc 0 Tw (})Tj -1.3197 -1.1429 TD -0.0003 Tc (\);)Tj /F1 1 Tf 11 0 0 11 63 686.2832 Tm -0.0051 Tc -0.0161 Tw [(O)5.8(r)0( y)5.8(ou can look at it another way)84.8(, and say that y)5.7(ou want the)]TJ 0 -1.0909 TD 0 Tw (first )Tj /F2 1 Tf 9 0 0 9 81.7648 674.2832 Tm -0.0053 Tc (h1)Tj /F1 1 Tf 11 0 0 11 94.9205 674.2832 Tm -0.0051 Tc -0.0224 Tw (element that either contains no images, or else whose)Tj -2.9019 -1.0909 TD -0.0148 Tw (image has a )Tj /F2 1 Tf 9 0 0 9 113.3844 662.2832 Tm 0 Tw (src)Tj /F1 1 Tf 11 0 0 11 131.9776 662.2832 Tm -0.0148 Tw [(attribute whose v)5.8(alue contains )]TJ /F2 1 Tf 9 0 0 9 265.0336 662.2832 Tm 0 Tw (/photos/)Tj /F1 1 Tf 11 0 0 11 307.8632 662.2832 Tm (:)Tj /F2 1 Tf 7 0 0 7 72.2378 643.2832 Tm -0.0002 Tc 0.06 Tw [(my $real_h1 = $tree->look_down\()]TJ 1.3197 -1.1429 TD ('_tag', 'h1',)Tj T* (sub {)Tj 1.3197 -1.1429 TD (my $img = $_[0]->look_down\('_tag','img'\);)Tj 0 -2.2857 TD (# no image means it's fine)Tj 0 -1.1429 TD (return 1 unless $img;)Tj 0 -2.2857 TD (# good if a photo)Tj 0 -1.1429 TD [(return 1 if $img->attr\('src'\) =~ m{/photos/};)]TJ 0 -2.2857 TD (return 0; # otherwise bad)Tj -1.3197 -1.1429 TD 0 Tc 0 Tw (})Tj -1.3197 -1.1429 TD -0.0003 Tc (\);)Tj /F1 1 Tf 11 0 0 11 63 516.2832 Tm -0.0001 Tc -0.0138 Tw [(R)12.1(ecall that this use of )]TJ /F2 1 Tf 9 0 0 9 155.9243 516.2832 Tm -0.0002 Tc 0 Tw (look_down)Tj /F1 1 Tf 11 0 0 11 207.1103 516.2832 Tm -0.0001 Tc -0.0138 Tw [(in a scalar context r)9.7(eturns)]TJ -13.1009 -1.0909 TD -0.0315 Tw (the first element at or under )Tj /F2 1 Tf 9 0 0 9 182.8147 504.2832 Tm -0.0002 Tc 0 Tw ($tree)Tj /F1 1 Tf 11 0 0 11 212.2115 504.2832 Tm -0.0001 Tc -0.0315 Tw (matching all the criteria.)Tj -13.5647 -1.0909 TD -0.0009 Tw [(B)11.9(ut if y)5.8(ou can formulate criteria that match sev)5.8(eral possible)]TJ /F2 1 Tf 9 0 0 9 63 480.2832 Tm -0.0003 Tc 0 Tw (h1)Tj /F1 1 Tf 11 0 0 11 76.7464 480.2832 Tm -0.0001 Tc 0.0181 Tw (elements, with the )Tj /F5 1 Tf 7.387 0 TD 0 Tw (last)Tj /F1 1 Tf 1.5037 0 TD 0.0181 Tw [(one being the one y)5.8(ou want, y)5.8(o)0.1(u)]TJ -10.1404 -1.0909 TD 0.0417 Tw (can use )Tj /F2 1 Tf 9 0 0 9 97.5714 468.2832 Tm -0.0002 Tc 0 Tw (look_down)Tj /F1 1 Tf 11 0 0 11 149.3676 468.2832 Tm -0.0001 Tc 0.0416 Tw [(in a list context, and ignor)9.7(e all but the)]TJ -7.8516 -1.0909 TD 0.025 Tw [(last element of the r)9.7(eturned list:)]TJ /F2 1 Tf 7 0 0 7 72.2378 437.2832 Tm -0.0002 Tc 0.06 Tw (my @h1s = $tree->look_down\()Tj 1.3197 -1.1429 TD ('_tag', 'h1',)Tj T* (...maybe more criteria...)Tj -1.3197 -1.1429 TD -0.0003 Tc 0 Tw (\);)Tj T* -0.0002 Tc 0.06 Tw (die "What, no h1s here?" unless @h1s;)Tj T* [(my $real_h1 = $h1s[-1]; # last or only element)]TJ /F8 1 Tf 12 0 0 12 63 371.2832 Tm 0.0198 Tc 0.0255 Tw (A C)Tj 10.44 0 0 10.44 82.934 371.2832 Tm 0.0228 Tc 0 Tw (ASE)Tj 12 0 0 12 105.1178 371.2832 Tm 0 Tc (S)Tj 10.44 0 0 10.44 111.4046 371.2832 Tm 0.0228 Tc [(TUD)35.7(Y)]TJ 12 0 0 12 140.5926 371.2832 Tm 0.0198 Tc 0.0255 Tw (: S)Tj 10.44 0 0 10.44 153.7824 371.2832 Tm 0.0228 Tc 0 Tw (CANNING)Tj 12 0 0 12 208.353 371.2832 Tm 0 Tc (Y)Tj 10.44 0 0 10.44 215.3601 371.2832 Tm 0.0229 Tc (AHOO)Tj 12 0 0 12 247.8768 371.2832 Tm 0.0197 Tc 0.0255 Tw (! N)Tj 10.44 0 0 10.44 264.676 371.2832 Tm 0.0109 Tc 0 Tw [(EW)-11.7(S)]TJ /F1 1 Tf 11 0 0 11 63 345.2832 Tm -0.0001 Tc 0.1783 Tw [(The abo)15.8(v)5.9(e)0( \(some)-5.9(what contriv)5.8(ed\) case inv)5.8(olv)5.8(es extracting)]TJ 0 -1.0909 TD 0.1928 Tw [(data fr)5.8(om a bunch of pr)9.7(e-existing HTML files. I)11.9(n)0( such)]TJ T* -0.0351 Tw [(situations, it)17.8()79.9(s)0( easy to kno)11.9(w when y)5.8(our code wor)5.8(ks, since the)]TJ T* -0.0279 Tw [(data it handles won)69.8()79.9(t)0( change or gr)5.8(o)12(w)74.9(, and y)5.8(ou typically need)]TJ T* 0.025 Tw [(to r)-7.9(un the pr)5.8(ogram only once.)]TJ 0 -2.1818 TD 0.0807 Tw (The other kind of situation faced in many data extraction)Tj 0 -1.0909 TD -0.0303 Tw [(tasks is wher)9.7(e the pr)5.8(ogram is used r)9.7(ecurringly to handle ne)-5.9(w)]TJ T* 0.0908 Tw [(data such as fr)5.8(om ev)5.8(er-changing )14.8(W)77.8(eb pages. As a r)9.7(eal-)]TJ T* 0.0885 Tw [(world example of this, consider a pr)5.8(ogram that y)5.8(ou could)]TJ T* 0.2012 Tw [(use to extract headline links fr)5.8(om subsections of )14.8(Y)67.8(ahoo!)]TJ T* 0.0061 Tc 0.3688 Tw [(N)29.7(e)-5.9(ws \(http://dailyne)-6(ws.yahoo)15.8(.com/\). )14.8(Y)67.8(ahoo! N)29.7(e)-6(ws has)]TJ T* -0.0001 Tc 0.025 Tw [(sev)5.8(eral subsections, such as:)]TJ 0 -2.1818 TD [( http://dailyne)-5.9(ws.yahoo)15.8(.com/h/tc/ for technology ne)-5.9(ws)]TJ 0 -1.0909 TD [( http://dailyne)-5.9(ws.yahoo)15.8(.com/h/sc/ for science ne)-5.9(ws)]TJ T* [( http://dailyne)-5.9(ws.yahoo)15.8(.com/h/hl/ for health ne)-5.9(ws)]TJ T* [( http://dailyne)-5.9(ws.yahoo)15.8(.com/h/wl/ for world ne)-5.9(ws)]TJ T* -0.0051 Tc [( http://dailyne)-6(ws.yahoo)15.8(.com/h/en/ for enter)-7.9(tainment ne)-5.9(ws)]TJ 25.3636 61.1631 TD -0.0001 Tc 0.0014 Tw [(All of them ar)9.7(e built on the same basic HTML template )]TJ 0 -1.0909 TD -0.0182 Tw [(and a scarily complicated template it is, especially when y)5.8(o)0.1(u)]TJ T* 0.0832 Tw [(look at it with an ey)5.8(e to)11.9(war)13.8(d identifying the r)9.7(eal headline)]TJ T* 0.0949 Tw [(links and scr)9.7(eening out the links to ev)5.8(er)-17.9(ything else. )14.9(Y)93.9(o)0.1(u)49.7()12(ll)]TJ T* 0.0909 Tw [(need to puzzle o)15.8(v)5.9(er the HTML sour)5.8(ce, and scr)-7.9(utiniz)5.8(e the)]TJ T* 0.025 Tw (output of )Tj /F2 1 Tf 9 0 0 9 385.5161 742.0776 Tm -0.0002 Tc 0 Tw ($tree->dump)Tj /F1 1 Tf 11 0 0 11 447.9266 742.0776 Tm -0.0001 Tc 0.025 Tw [(on the parse tr)9.7(ee of that HTML.)]TJ -9.6297 -2.1818 TD -0.0098 Tw [(S)12.1(ometimes the only way to pin do)11.9(wn what y)5.8(o)0.1(u)49.7()69.9(r)9.9(e)0( after is b)5.8(y)]TJ 0 -1.0909 TD 0.0329 Tw [(position in the tr)9.7(ee. F)35.8(or example, headlines of inter)9.7(est may)]TJ T* -0.0354 Tw [(be in the thir)13.8(d column of the second r)5.8(o)12(w of the second table)]TJ T* 0.025 Tw (element in a page:)Tj /F2 1 Tf 7 0 0 7 351.2378 662.0776 Tm 0.0599 Tw (my $table = \( $tree->look_down\('_tag','table'\) \)[1];)Tj 0 -1.1429 TD [(my $row2 = \( $table->look_down\('_tag', 'tr' \) \)[1];)]TJ T* [(my $col3 = \( $row2->look-down\('_tag', 'td'\) \)[2];)]TJ T* [(...then do things with $col3...)]TJ /F1 1 Tf 11 0 0 11 342 614.0776 Tm 0.0447 Tw [(O)5.8(r)0( they might be all the links in a )]TJ /F2 1 Tf 9 0 0 9 493.4707 614.0776 Tm -0.0002 Tc 0 Tw (

)Tj /F1 1 Tf 11 0 0 11 512.908 614.0776 Tm -0.0001 Tc 0.0447 Tw [(element with mor)9.7(e)]TJ -15.5371 -1.0909 TD 0.025 Tw (than two )Tj /F2 1 Tf 9 0 0 9 383.2844 602.0776 Tm -0.0002 Tc 0 Tw (
)Tj /F1 1 Tf 11 0 0 11 407.9042 602.0776 Tm -0.0001 Tc 0.025 Tw [(elements as childr)9.7(en:)]TJ /F2 1 Tf 7 0 0 7 351.2378 582.0776 Tm -0.0002 Tc 0.06 Tw [(my $p = $tree->look_down\()]TJ 1.3197 -1.1428 TD ('_tag', 'p',)Tj T* (sub {)Tj 1.3197 -1.1429 TD -0.0001 Tc [(2 > grep { ref\($_\) and $_->tag eq 'br' })]TJ 5.2787 -1.1429 TD -0.0002 Tc 0 Tw ($_[0]->content_list)Tj -6.5984 -1.1429 TD 0 Tc (})Tj -1.3197 -1.1429 TD -0.0003 Tc (\);)Tj T* -0.0001 Tc 0.0599 Tw [(@links = $p->look_down\('_tag', 'a'\);)]TJ /F1 1 Tf 11 0 0 11 342 502.0776 Tm 0.2647 Tw [(B)11.9(ut almost always, y)5.8(ou can get away with looking for)]TJ 0 -1.0909 TD 0.1393 Tw [(pr)5.8(oper)-7.9(ties of the thing itself)15.8(, rather than just looking for)]TJ T* 0.325 Tw [(contexts. I)5.8(f)0( y)5.8(o)0.1(u)49.7()69.9(r)9.9(e)0( lucky)84.9(, the document y)5.8(o)0.1(u)49.7()69.9(r)9.9(e)0( looking)]TJ 12 0 0 12 517.3723 90.3543 Tm 0 Tc 0 Tw (F)Tj 10.44 0 0 10.44 523.4518 90.3543 Tm -0.0001 Tc (ALL)Tj 12 0 0 12 544.7999 90.3543 Tm 0 Tc 0.025 Tw [(2000 55)]TJ /F3 1 Tf -40.15 0 TD -0.0002 Tc 0.0255 Tw [(The P)47.6(erl J)35.7(our)-8(nal #19)]TJ ET 0 0 0 0.1 k /GS1 gs 342.5 458.5 251 -341 re 162.892 90.354 m f* 0 0 0 1 K 0 J 0 j 1 w 10 M []0 d 342.5 458.5 251 -341 re S BT /F8 1 Tf 24 0 0 24 364.2221 311.3976 Tm 0 0 0 1 k /GS2 gs -0.0001 Tc 0 Tw [(ADDISON)-255(WESLE)11.9(Y)]TJ 2.5964 -1.2 TD -0.0002 Tc 0.0255 Tw (1/4 page)Tj 0.57 -1.2 TD -0.0004 Tc 0 Tw [(NE)11.6(W)]TJ ET Q 0 0 0 0 k /GS2 gs 1 i 37 874 191 -12 re 495.791 253.798 m f* BT /F2 1 Tf 8 0 0 8 39 864 Tm /Cs9 cs 1 scn -0.0004 Tc -0.0019 Tw (TPJ#19/9.26 9/27/00 10:35 AM Page 55)Tj ET 1 G 0 J 0 j 0.5 w 10 M []0 d 36 873 m 36 849 l 0 837 m 24 837 l 621 873 m 621 849 l 657 837 m 633 837 l 36 36 m 36 60 l 0 72 m 24 72 l 621 36 m 621 60 l 657 72 m 633 72 l S /Cs9 CS 1 SCN 0.25 w 36 873 m 36 849 l 0 837 m 24 837 l 621 873 m 621 849 l 657 837 m 633 837 l 36 36 m 36 60 l 0 72 m 24 72 l 621 36 m 621 60 l 657 72 m 633 72 l S 1 G 0.5 w 304.5 861 m 352.5 861 l 304.5 48 m 352.5 48 l 12 478.5 m 12 430.5 l 645 478.5 m 645 430.5 l 328.5 873 m 328.5 849 l 328.5 60 m 328.5 36 l 0 454.5 m 24 454.5 l 633 454.5 m 657 454.5 l 328.5 861 m 334.5 861 l 334.5 857.688 331.812 855 328.5 855 c 325.188 855 322.5 857.688 322.5 861 c 322.5 864.312 325.188 867 328.5 867 c 331.812 867 334.5 864.312 334.5 861 c 328.5 48 m 334.5 48 l 334.5 44.688 331.812 42 328.5 42 c 325.188 42 322.5 44.688 322.5 48 c 322.5 51.312 325.188 54 328.5 54 c 331.812 54 334.5 51.312 334.5 48 c 12 454.5 m 18 454.5 l 18 451.188 15.312 448.5 12 448.5 c 8.688 448.5 6 451.188 6 454.5 c 6 457.812 8.688 460.5 12 460.5 c 15.312 460.5 18 457.812 18 454.5 c 645 454.5 m 651 454.5 l 651 451.188 648.312 448.5 645 448.5 c 641.688 448.5 639 451.188 639 454.5 c 639 457.812 641.688 460.5 645 460.5 c 648.312 460.5 651 457.812 651 454.5 c S /Cs9 CS 1 SCN 0.25 w 304.5 861 m 352.5 861 l 304.5 48 m 352.5 48 l 12 478.5 m 12 430.5 l 645 478.5 m 645 430.5 l 328.5 873 m 328.5 849 l 328.5 60 m 328.5 36 l 0 454.5 m 24 454.5 l 633 454.5 m 657 454.5 l 328.5 861 m 334.5 861 l 334.5 857.688 331.812 855 328.5 855 c 325.188 855 322.5 857.688 322.5 861 c 322.5 864.312 325.188 867 328.5 867 c 331.812 867 334.5 864.312 334.5 861 c 328.5 48 m 334.5 48 l 334.5 44.688 331.812 42 328.5 42 c 325.188 42 322.5 44.688 322.5 48 c 322.5 51.312 325.188 54 328.5 54 c 331.812 54 334.5 51.312 334.5 48 c 12 454.5 m 18 454.5 l 18 451.188 15.312 448.5 12 448.5 c 8.688 448.5 6 451.188 6 454.5 c 6 457.812 8.688 460.5 12 460.5 c 15.312 460.5 18 457.812 18 454.5 c 645 454.5 m 651 454.5 l 651 451.188 648.312 448.5 645 448.5 c 641.688 448.5 639 451.188 639 454.5 c 639 457.812 641.688 460.5 645 460.5 c 648.312 460.5 651 457.812 651 454.5 c S endstream endobj 169 0 obj << /Type /Page /Parent 496 0 R /Resources 170 0 R /Contents 171 0 R /Thumb 431 0 R /MediaBox [ 0 0 684 873 ] /CropBox [ 0 0 684 873 ] /Rotate 0 >> endobj 170 0 obj << /ProcSet [ /PDF /Text ] /Font << /F1 515 0 R /F2 518 0 R /F3 261 0 R /F5 262 0 R /F10 270 0 R /F11 271 0 R >> /ExtGState << /GS1 523 0 R /GS2 521 0 R >> /ColorSpace << /Cs9 520 0 R >> >> endobj 171 0 obj << /Length 12998 >> stream 1 g /GS1 gs 0 873 m 0 873 l f q 1 i 27 846 603 -783 re 0 873 m W n 0 873 684 -873 re W n BT /F1 1 Tf 11 0 0 11 63 802.0776 Tm 0 0 0 1 k /GS2 gs -0.0001 Tc 0.2196 Tw [(thr)5.8(ough has clear semantic tagging, perhaps tailor)9.7(ed for)]TJ 0 -1.0909 TD 0.025 Tw [(CSS \(Cascading S)23.9(tyle S)11.9(heets\):)]TJ /F2 1 Tf 7 0 0 7 72.2378 771.0776 Tm -0.0002 Tc 0.06 Tw (Elvis)Tj -30.1127 -1.1429 TD 0.06 Tw (seen in tortilla)Tj /F1 1 Tf 11 0 0 11 63 740.0776 Tm -0.0001 Tc 0.0668 Tw [(I)5.9(f)0( y)5.8(ou find anything like that, y)5.8(ou could leap right in and)]TJ 0 -1.0909 TD 0.025 Tw (select links with:)Tj /F2 1 Tf 7 0 0 7 72.2378 709.0776 Tm 0.0599 Tw [(@links = $tree->look_down\('class', 'headlinelink'\);)]TJ /F1 1 Tf 11 0 0 11 63 686.0776 Tm 0.0052 Tc 0.3697 Tw [(R)12.1(egr)9.7(ettably)84.9(, y)5.8(our chances of obser)-17.8(ving such semantic)]TJ T* -0.0001 Tc 0.025 Tw [(mar)5.8(kup principles in r)9.7(eal-life HTML ar)9.7(e pr)9.7(etty slim.)]TJ 7.15 0 0 7.15 288.9884 676.5496 Tm 0 Tc 0 Tw (5)Tj 11 0 0 11 63 651.0776 Tm -0.0001 Tc 0.1015 Tw [(The code may be )59.8(accidentally semantic)17.7(, ho)11.9(w)5.8(e)0(v)5.8(er for)]TJ T* 0.0632 Tw [(example, in a set of pages I was scanning r)9.7(ecently)84.9(, I found)]TJ T* -0.0195 Tw (that looking for )Tj /F2 1 Tf 9 0 0 9 131.8551 627.0776 Tm -0.0003 Tc 0 Tw (td)Tj /F1 1 Tf 11 0 0 11 145.1886 627.0776 Tm -0.0001 Tc -0.0194 Tw (elements with a )Tj /F2 1 Tf 9 0 0 9 213.5039 627.0776 Tm -0.0002 Tc 0 Tw (width)Tj /F1 1 Tf 11 0 0 11 243.0334 627.0776 Tm -0.0001 Tc -0.0194 Tw [(attribute v)5.8(alue of)]TJ /F2 1 Tf 9 0 0 9 63 615.0776 Tm -0.0002 Tc 0 Tw (375)Tj /F1 1 Tf 11 0 0 11 82.7791 615.0776 Tm -0.0001 Tc 0.0757 Tw [(got me exactly what I wanted. N)29.7(o)0( one designing that)]TJ -1.7981 -1.0909 TD 0.1926 Tw [(page ev)5.8(er conceiv)5.8(ed of )]TJ /F2 1 Tf 9 0 0 9 169.0685 603.0776 Tm -0.0002 Tc 0 Tw (width=375)Tj /F1 1 Tf 11 0 0 11 222.5256 603.0776 Tm -0.0001 Tc (as )Tj /F5 1 Tf 1.1694 0 TD (meaning)Tj /F1 1 Tf 3.6228 0 TD 0.1926 Tw [()59.9(this is a)]TJ -19.2946 -1.0909 TD 0.025 Tw [(headline)29.7(, but if y)5.8(ou take it to mean that, it wor)5.8(ks.)]TJ 0 -2.0909 TD -0.0057 Tw [(An appr)5.8(oach like this happens to wor)5.8(k for the )14.8(Y)67.8(ahoo! N)29.7(e)-6(ws)]TJ 0 -1.0909 TD 0.1541 Tw [(code, because the headline links ar)9.7(e distinguished b)5.8(y)0( the)]TJ T* 0.025 Tw (fact that they \(and they alone\) contain a )Tj /F2 1 Tf 9 0 0 9 237.7439 544.0776 Tm 0 Tc 0 Tw (b)Tj /F1 1 Tf 11 0 0 11 246.1676 544.0776 Tm -0.0001 Tc (element:)Tj /F2 1 Tf 7 0 0 7 72.2378 525.0776 Tm -0.0002 Tc 0.06 Tw [(Elvis seen in)]TJ -1.3197 -1.1429 TD 0 Tw (tortilla)Tj /F1 1 Tf 11 0 0 11 63 493.0776 Tm -0.0001 Tc 0.025 Tw [(O)5.8(r)59.9(, diagrammed as a par)-7.9(t of the parse tr)9.7(ee:)]TJ /F2 1 Tf 7 0 0 7 72.2378 473.0776 Tm -0.0002 Tc 0.06 Tw [( a [href="...long_news_url..."])]TJ 1.3197 -1.1429 TD ( b)Tj 1.3197 -1.1429 TD ( "Elvis seen in tortilla")Tj /F1 1 Tf 11 0 0 11 63 433.0776 Tm -0.0001 Tc -0.0151 Tw [(A r)-7.9(ule that matches these can be formaliz)5.8(ed as look for any)]TJ /F2 1 Tf 9 0 0 9 63 421.0776 Tm 0 Tc 0 Tw (a)Tj /F1 1 Tf 11 0 0 11 71.4036 421.0776 Tm -0.0001 Tc 0.0232 Tw (element that has only one daughter node, which must be)Tj -0.764 -1.0909 TD -0.0002 Tc 0 Tw (a )Tj /F2 1 Tf 9 0 0 9 70.1553 409.0776 Tm 0 Tc (b)Tj /F1 1 Tf 11 0 0 11 78.2673 409.0776 Tm -0.0001 Tc -0.0033 Tw [(element)17.7(. And this is what it looks like when cooked up)]TJ -1.3879 -1.0909 TD 0.0462 Tw (as a )Tj /F2 1 Tf 9 0 0 9 81.9537 397.0776 Tm -0.0002 Tc 0 Tw (look_down)Tj /F1 1 Tf 11 0 0 11 133.8003 397.0776 Tm -0.0001 Tc 0.0462 Tw [(expr)9.7(ession and pr)9.7(efaced with a bit of code)]TJ -6.4364 -1.0909 TD -0.0003 Tw [(to r)9.7(etriev)5.8(e the )14.9(Y)67.8(ahoo! N)29.7(e)-6(ws page and feed it to )44.9(T)129.9(r)9.9(eeB)11.9(uilder:)]TJ /F2 1 Tf 7 0 0 7 63 366.0776 Tm -0.0002 Tc 0.06 Tw (use strict;)Tj 0 -1.1429 TD (use HTML::TreeBuilder 2.97;)Tj T* (use LWP::UserAgent;)Tj T* (sub get_headlines {)Tj 2.6394 -1.1429 TD [(my $url = $_[0] || die "What URL?";)]TJ 0 -2.2857 TD [(my $response = LWP::UserAgent->new->request\()]TJ 1.3197 -1.1429 TD [(HTTP::Request->new\( GET => $url \))]TJ -1.3197 -1.1429 TD -0.0003 Tc 0 Tw (\);)Tj 0 -2.2857 TD -0.0002 Tc 0.06 Tw (unless \($response->is_success\) {)Tj 1.3197 -1.1429 TD (warn "Couldn't get $url: ", )Tj 14.5852 -1.1429 TD [($response->status_line, "\\n";)]TJ -14.5852 -1.1429 TD 0 Tw (return;)Tj -1.3197 -1.1429 TD 0 Tc (})Tj 0 -2.2857 TD -0.0002 Tc 0.06 Tw [(my $tree = HTML::TreeBuilder->new\(\);)]TJ 0 -1.1429 TD 0 Tw ($tree->parse\($response->content\);)Tj T* ($tree->eof;)Tj 0 -2.2857 TD 0.06 Tw (my @out;)Tj 0 -1.1429 TD (foreach my $link \()Tj /F11 1 Tf 1.3197 -1.1429 TD 0 Tw ($tree->look_down\()Tj 1.3197 -1.1429 TD 0.06 Tw ('_tag', 'a',)Tj T* (sub {)Tj 1.3197 -1.1429 TD (return unless $_[0]->attr\('href'\);)Tj 39.8571 91.3151 TD [(my @c = $_[0]->content_list;)]TJ 0 -1.1429 TD -0.0001 Tc [(@c == 1 and ref $c[0] and $c[0]->tag eq 'b';)]TJ -1.3197 -1.1429 TD 0 Tc 0 Tw (})Tj -1.9795 -1.1429 TD (\))Tj /F2 1 Tf -0.6598 -1.1429 TD -0.0002 Tc 0.06 Tw (\) {)Tj 2.6394 -1.1429 TD -0.0001 Tc [(push @out, [$link->attr\('href'\),$link->as_text ];)]TJ -2.6394 -1.1429 TD 0 Tc 0 Tw (})Tj 0 -2.2857 TD -0.0001 Tc 0.0599 Tw [(warn "Odd, fewer than 6 stories in $url!" if @out < 6;)]TJ 0 -1.1429 TD -0.0002 Tc 0 Tw ($tree->delete;)Tj T* 0.06 Tw (return @out;)Tj -2.6394 -1.1429 TD 0 Tc 0 Tw (})Tj /F1 1 Tf 11 0 0 11 342 694.2834 Tm -0.0001 Tc 0.2339 Tw [(And w)5.8(e)0( add a bit of code to call )]TJ /F2 1 Tf 9 0 0 9 502.6811 694.2834 Tm -0.0002 Tc 0 Tw (get_headlines)Tj /F1 1 Tf 11 0 0 11 578.1876 694.2834 Tm (and)Tj -21.4716 -1.0909 TD -0.0001 Tc 0.025 Tw [(display the r)9.7(e)0(sults:)]TJ /F2 1 Tf 7 0 0 7 342 663.2834 Tm 0.0599 Tw [(foreach my $section \(qw[tc sc hl wl en]\) {)]TJ 2.6394 -1.1429 TD -0.0002 Tc (my @links = get_headlines\()Tj 1.3197 -1.1429 TD -0.0001 Tc 0 Tw ("http://dailynews.yahoo.com/h/$section/")Tj -1.3197 -1.1429 TD -0.0003 Tc (\);)Tj T* -0.0002 Tc (print)Tj 1.3197 -1.1428 TD -0.0001 Tc 0.0599 Tw [($section, ": ", scalar\(@links\), " stories\\n",)]TJ T* [(map\(\(" ", $_->[0], " : ", $_->[1], "\\n"\), @links\),)]TJ T* -0.0002 Tc 0 Tw ("\\n";)Tj -3.9591 -1.1429 TD 0 Tc (})Tj /F1 1 Tf 11 0 0 11 342 576.2834 Tm -0.0001 Tc 0.0554 Tw [(N)29.7(o)12(w w)5.8(e)0( hav)5.8(e our o)11.9(wn headline extractor ser)-17.9(vice! B)17.8(y)0( itself)15.8(,)]TJ 0 -1.0909 TD 0.1735 Tw [(it isn)69.8()79.9(t)0( so amazingly useful \(since if y)5.8(ou want to see the)]TJ T* 0.0102 Tw [(headlines, y)5.8(ou can just look at the )14.8(Y)67.8(ahoo! N)29.7(e)-6(ws pages\), but)]TJ T* 0.1995 Tw [(it could easily be the basis for featur)9.7(es like filtering the)]TJ T* 0.025 Tw [(headlines for par)-7.9(ticular topics of inter)9.7(est.)]TJ 0 -2.1818 TD 0.1845 Tw [(O)5.8(ne of these days, )14.8(Y)67.8(ahoo! N)29.8(e)-6(ws will change its HTML)]TJ 0 -1.0909 TD 0.1245 Tw [(template. )14.8(When this happens, it will appear to the abo)15.8(v)5.9(e)]TJ T* 0.0652 Tw [(pr)5.8(ogram as though ther)9.7(e ar)9.7(e no links meeting our criteria;)]TJ T* 0.2908 Tw [(or)59.7(, less likely)84.9(, doz)5.8(ens of err)5.8(oneous links will meet the)]TJ T* 0.0714 Tw [(criteria. I)11.9(n)0( either case, the criteria will hav)5.8(e to be changed)]TJ T* 0.1392 Tw [(for the ne)-5.9(w template; they may just need adjustment, or)]TJ T* 0.025 Tw [(y)5.8(ou may need to scrap them and star)-7.9(t o)15.8(v)5.9(er)59.7(.)]TJ /F3 1 Tf 12 0 0 12 342 406.2835 Tm 0 Tc 0 Tw (R)Tj 10.44 0 0 10.44 349.4616 406.2835 Tm 0.0229 Tc (EGARDEZ)Tj 12 0 0 12 397.9987 406.2835 Tm 0.0197 Tc (, )Tj 10.44 0 0 10.44 404.9017 406.2835 Tm 0.0228 Tc (DUVET)Tj 12 0 0 12 441.0381 406.2835 Tm 0 Tc (!)Tj /F1 1 Tf 11 0 0 11 342 380.2835 Tm 0.0043 Tw [(I)24(t)17.9()80(s)0.1( often a challenge to write criteria that match the desir)9.8(ed)]TJ T* -0.0001 Tc 0.0094 Tw [(par)-7.9(ts of an HTML parse tr)9.7(ee. )14.8(V)100(e)0.1(r)-17.9(y)0( often y)5.8(ou can pull it off)]TJ T* 0.1606 Tw (with a simple )Tj /F2 1 Tf 9 0 0 9 406.7965 356.2835 Tm 0.3854 Tw ($tree->look_down\('_tag', 'h1'\))Tj /F1 1 Tf 11 0 0 11 572.2258 356.2835 Tm 0 Tc 0.1606 Tw (, but)Tj -20.9296 -1.0909 TD -0.0001 Tc 0.1333 Tw [(sometimes y)5.8(ou hav)5.8(e to keep adding and r)9.7(efining criteria,)]TJ T* 0.0431 Tw [(until y)5.8(ou end up with complex filters like what I)49.7(v)5.9(e)0( sho)11.9(wn)]TJ T* 0.0226 Tw [(in this ar)-7.9(ticle. )44.8(The benefit of HTML parse tr)9.7(ees is that one)]TJ T* 0.0736 Tw [(main sear)5.8(ch tool, the )]TJ /F2 1 Tf 9 0 0 9 436.8574 308.2835 Tm -0.0002 Tc 0 Tw (look_down)Tj /F1 1 Tf 11 0 0 11 489.0048 308.2835 Tm -0.0001 Tc 0.0736 Tw (method, can do most of)Tj -13.3641 -1.0909 TD 0.1637 Tw [(the wor)5.8(k, making simple things easy while keeping har)13.8(d)]TJ T* 0.025 Tw (things possible.)Tj /F10 1 Tf 0 -2.1818 TD 0.0278 Tw (_ _END_ _)Tj /F5 1 Tf T* 0.0549 Tw [(S)11.9(ean M. B)11.9(u)0.2(r)5.8(ke )]TJ /F1 1 Tf 5.9817 0 TD 0 Tw [(\(sbur)5.8(ke@cpan.org\) )]TJ /F5 1 Tf 7.5971 0 TD 0.0549 Tw [(is the curr)19.7(ent maintainer)]TJ -13.5788 -1.0909 TD 0.0585 Tw [(of HTML::T)109.8(r)19.9(eeB)11.9(uilder and HTML::E)17.8(lement, both originally)]TJ T* 0.0621 Tw [(b)5.9(y)0( G)11.9(isle Aas. H)23.9(e)109.8()22.1(d)0( like to thank the folks who listened to him)]TJ T* 0.0199 Tc 0.8816 Tw [(r)29.9(amble incessantly about HTML::T)109.9(r)19.9(eeB)11.9(uilder and)]TJ T* -0.0001 Tc -0.0239 Tw [(HTML::E)17.8(lement at this y)5.8(ear)19.7()33.1(s)-0.1( )47.9(Y)83.9(et A)17.8(nother P)41.9(e)0.1(r)11.9(l)0( Confer)19.7(ence and)]TJ T* 0.025 Tw [(O)59.7()0.1(R)11.9(eilly O)5.8(pen Sour)11.9(ce Softwar)19.7(e Conv)5.8(ention.)]TJ /F1 1 Tf 12 0 0 12 63 90.3543 Tm 0 Tc 0 Tw [(56)-1100(F)]TJ 10.44 0 0 10.44 94.2795 90.3543 Tm -0.0001 Tc (ALL)Tj 12 0 0 12 115.6277 90.3543 Tm 0 Tc (2000)Tj /F3 1 Tf 30.9897 0.0003 TD -0.0002 Tc 0.0255 Tw [(The P)47.6(erl J)35.7(our)-8(nal #19)]TJ /F1 1 Tf 9 0 0 9 63 136.6016 Tm -0.0001 Tc 0.025 Tw [(5 I)11.9(n)0( fact, y)5.8(our chances of finding a page that is simply fr)9.7(ee of HTML err)5.8(ors ar)9.7(e ev)5.8(en slimmer)59.7(. And surprisingly)84.9(, sites like Ama)]TJ 49.0682 0 TD [(z)5.8(on or )14.8(Y)67.8(a)0(hoo! ar)9.7(e)]TJ -49.0682 -1.1111 TD [(typically worse as far as quality of code than personal sites whose entir)9.7(e pr)5.8(oduction cy)11.9(cle inv)5.8(olv)5.8(es simply being sav)5.8(ed and upl)]TJ 48.5144 0 TD [(oaded fr)5.8(om N)29.7(etscape)]TJ -48.5144 -1.1111 TD 0 Tw [(Composer)59.7(.)]TJ ET 0 0 0 1 K 0 J 0 j 0.5 w 10 M []0 d 63 148.41 m 594 148.41 l S Q 0 0 0 0 k 1 i 37 874 191 -12 re 100.819 116.602 m f* BT /F2 1 Tf 8 0 0 8 39 864 Tm /Cs9 cs 1 scn -0.0004 Tc -0.0019 Tw (TPJ#19/9.26 9/27/00 10:35 AM Page 56)Tj ET 1 G 0 J 0 j 0.5 w 10 M []0 d 36 873 m 36 849 l 0 837 m 24 837 l 621 873 m 621 849 l 657 837 m 633 837 l 36 36 m 36 60 l 0 72 m 24 72 l 621 36 m 621 60 l 657 72 m 633 72 l S /Cs9 CS 1 SCN 0.25 w 36 873 m 36 849 l 0 837 m 24 837 l 621 873 m 621 849 l 657 837 m 633 837 l 36 36 m 36 60 l 0 72 m 24 72 l 621 36 m 621 60 l 657 72 m 633 72 l S 1 G 0.5 w 304.5 861 m 352.5 861 l 304.5 48 m 352.5 48 l 12 478.5 m 12 430.5 l 645 478.5 m 645 430.5 l 328.5 873 m 328.5 849 l 328.5 60 m 328.5 36 l 0 454.5 m 24 454.5 l 633 454.5 m 657 454.5 l 328.5 861 m 334.5 861 l 334.5 857.688 331.812 855 328.5 855 c 325.188 855 322.5 857.688 322.5 861 c 322.5 864.312 325.188 867 328.5 867 c 331.812 867 334.5 864.312 334.5 861 c 328.5 48 m 334.5 48 l 334.5 44.688 331.812 42 328.5 42 c 325.188 42 322.5 44.688 322.5 48 c 322.5 51.312 325.188 54 328.5 54 c 331.812 54 334.5 51.312 334.5 48 c 12 454.5 m 18 454.5 l 18 451.188 15.312 448.5 12 448.5 c 8.688 448.5 6 451.188 6 454.5 c 6 457.812 8.688 460.5 12 460.5 c 15.312 460.5 18 457.812 18 454.5 c 645 454.5 m 651 454.5 l 651 451.188 648.312 448.5 645 448.5 c 641.688 448.5 639 451.188 639 454.5 c 639 457.812 641.688 460.5 645 460.5 c 648.312 460.5 651 457.812 651 454.5 c S /Cs9 CS 1 SCN 0.25 w 304.5 861 m 352.5 861 l 304.5 48 m 352.5 48 l 12 478.5 m 12 430.5 l 645 478.5 m 645 430.5 l 328.5 873 m 328.5 849 l 328.5 60 m 328.5 36 l 0 454.5 m 24 454.5 l 633 454.5 m 657 454.5 l 328.5 861 m 334.5 861 l 334.5 857.688 331.812 855 328.5 855 c 325.188 855 322.5 857.688 322.5 861 c 322.5 864.312 325.188 867 328.5 867 c 331.812 867 334.5 864.312 334.5 861 c 328.5 48 m 334.5 48 l 334.5 44.688 331.812 42 328.5 42 c 325.188 42 322.5 44.688 322.5 48 c 322.5 51.312 325.188 54 328.5 54 c 331.812 54 334.5 51.312 334.5 48 c 12 454.5 m 18 454.5 l 18 451.188 15.312 448.5 12 448.5 c 8.688 448.5 6 451.188 6 454.5 c 6 457.812 8.688 460.5 12 460.5 c 15.312 460.5 18 457.812 18 454.5 c 645 454.5 m 651 454.5 l 651 451.188 648.312 448.5 645 448.5 c 641.688 448.5 639 451.188 639 454.5 c 639 457.812 641.688 460.5 645 460.5 c 648.312 460.5 651 457.812 651 454.5 c S endstream endobj 172 0 obj << /Type /Page /Parent 496 0 R /Resources 173 0 R /Contents 174 0 R /Thumb 433 0 R /MediaBox [ 0 0 684 873 ] /CropBox [ 0 0 684 873 ] /Rotate 0 >> endobj 173 0 obj << /ProcSet [ /PDF /Text ] /Font << /F1 515 0 R /F2 518 0 R /F3 261 0 R /F7 267 0 R /F8 268 0 R /F9 269 0 R /F11 271 0 R /F12 284 0 R >> /ExtGState << /GS1 523 0 R /GS2 521 0 R >> /ColorSpace << /Cs9 520 0 R /Cs10 264 0 R >> >> endobj 174 0 obj << /Length 14066 >> stream 1 g /GS1 gs 0 873 m 0 873 l f q 1 i 27 846 603 -783 re 0 873 m W n 0 873 684 -873 re W n BT /F1 1 Tf 29.09 0 0 29.09 63.4946 600.0442 Tm 0 0 0 1 k /GS2 gs 0 Tc 0 Tw (A)Tj 11 0 0 11 84.2135 612.0442 Tm -0.0051 Tc 0.0017 Tw [(fe)-5.9(w months ago, I need to synchr)5.7(oniz)5.8(e)0( our gr)5.8(oup)5.8(war)9.7(e)29.7()79.9(s)]TJ -0.2467 -1.0909 TD 0.216 Tw [(addr)9.7(ess book with our emplo)11.8(y)5.8(ee database. S)11.9(ince the)]TJ -1.6818 -1.0909 TD 0.0785 Tw [(addr)9.7(ess book pr)5.8(o)15.9(v)5.9(ded only minimal data about emplo)11.8(y)5.8(ees,)]TJ T* 0.1122 Tw [(and the emplo)11.9(y)5.8(ee database didn)69.7()79.9(t)0( contain any of the exact)]TJ T* 0.0822 Tw [(fields in the addr)9.7(ess book, I had to synchr)5.7(oniz)5.8(e)0( them with)]TJ T* 0.025 Tw [(nothing mor)9.7(e)0( than first and last names.)]TJ 0 -2.1818 TD 0.0536 Tw [(This is not as easy as it sounds. I)23.8(t)0( quickly became appar)9.7(ent)]TJ 0 -1.0909 TD 0.0075 Tw [(that only a small por)-7.9(tion of the >3500 r)9.6(ecor)13.8(ds would match)]TJ T* 0.0376 Tw [(dir)9.7(ectly)84.9(. A simple SQL join betw)5.8(een impor)-7.9(ted tables would)]TJ T* 0.1156 Tw [(not wor)5.8(k; the data was too inconsistent. After matching a)]TJ T* -0.0358 Tw [(fe)-5.9(w names manually)84.9(, I became incr)9.6(easingly obsessed with the)]TJ T* 0.1522 Tw [(pr)5.8(oblem of matching names: identifying that B)11.8(ill G)5.8(ates)39.7()]TJ T* 0.0249 Tw [(was the same person as )-17.9(W)9.7(illiam G)5.8(ates III.)]TJ 0 -2.1818 TD -0.0201 Tc 0.0839 Tw [(The pr)5.8(oblem was tenacious: I would add pr)5.7(ocessing to catch)]TJ 0 -1.0909 TD 0.0344 Tw [(misspellings or hyphenations, and ne)-6(w issues would come up)15.7(.)]TJ T* -0.0001 Tc 1.3144 Tw [(The script quickly gr)9.7(e)-6(w)0( into a module,)]TJ T* 1.2338 Tw [(Lingua::EN::M)11.9(atchN)29.7(ames, and then a second,)]TJ T* -0.0032 Tc 0.3581 Tw [(Lingua::EN::N)23.9(ickname, in r)9.7(e)0(sponse to the bizarr)9.7(e)0( and)]TJ T* -0.0201 Tc 0.0259 Tw [(arbitrar)-17.9(y system of shor)-7.9(tening of first names. M)11.9(any first name)]TJ T* 0.0023 Tw [(forms hav)5.8(e little or no similarity whatsoev)5.7(er: P)53.9(eggy = M)11.9(argar)9.7(et)]TJ T* 0.1183 Tw [(= M)11.9(idge; and sev)5.8(eral can follo)11.9(w an almost endless mutation)]TJ T* -0.0205 Tw [(path: P)53.9(eggy )]TJ /F12 1 Tf 12 0 0 12 111.6413 334.0441 Tm 0 Tc 0 Tw ()Tj /F1 1 Tf 11 0 0 11 124.7216 336.0442 Tm -0.0202 Tc [(M)11.9(argar)9.6(et )]TJ /F12 1 Tf 12 0 0 12 163.8766 334.0441 Tm 0 Tc ()Tj /F1 1 Tf 11 0 0 11 176.9569 336.0442 Tm -0.0201 Tc [(M)12(a)0.3(r)-7.9(tha )]TJ /F12 1 Tf 12 0 0 12 209.4996 334.0441 Tm 0 Tc ()Tj /F1 1 Tf 11 0 0 11 222.58 336.0442 Tm -0.0321 Tc [(Ma)-11.7(r)-29.9(y)-12.1( )]TJ /F12 1 Tf 12 0 0 12 247.0091 334.0441 Tm 0 Tc ()Tj /F1 1 Tf 11 0 0 11 260.0894 336.0442 Tm -0.0201 Tc [(M)12(a)0.3(r)-17.9(yanne )]TJ /F12 1 Tf 12 0 0 12 303.9844 334.0441 Tm 0 Tc ()Tj /F1 1 Tf 11 0 0 11 63 324.0442 Tm -0.0201 Tc (Anna )Tj /F12 1 Tf 12 0 0 12 87.7657 322.0441 Tm 0 Tc ()Tj /F1 1 Tf 11 0 0 11 101.3465 324.0442 Tm -0.0201 Tc [(R)12.1(oseanne )]TJ /F12 1 Tf 12 0 0 12 142.9516 322.0441 Tm 0 Tc ()Tj /F1 1 Tf 11 0 0 11 156.5323 324.0442 Tm -0.0201 Tc [(R)12.1(osalyn )]TJ /F12 1 Tf 12 0 0 12 191.4045 322.0441 Tm 0 Tc ()Tj /F1 1 Tf 11 0 0 11 204.9852 324.0442 Tm -0.0201 Tc (Linda )Tj /F12 1 Tf 12 0 0 12 231.4109 322.0441 Tm 0 Tc ()Tj /F1 1 Tf 11 0 0 11 244.9916 324.0442 Tm -0.0201 Tc [(M)24(elinda )]TJ /F12 1 Tf 12 0 0 12 281.7329 322.0441 Tm 0 Tc ()Tj /F1 1 Tf 11 0 0 11 295.3136 324.0442 Tm -0.02 Tc (...\).)Tj -21.1194 -2.1818 TD -0.0051 Tc 0.021 Tw [(When the initial v)5.8(ersions w)5.8(e)0.1(r)9.7(e)0( complete, my script was able)]TJ 0 -1.0909 TD 0.0852 Tw [(to match the v)5.8(ast majority of the r)9.6(ecor)13.8(ds on its o)11.9(wn \(with)]TJ T* 0.0231 Tw [(gr)9.7(eater than 85% cer)-7.9(tainty per match\), and most of the r)9.6(e)0(st)]TJ T* 0.1347 Tw [(either had no r)9.7(eal world match, or w)5.8(e)0.1(r)9.7(e)0( identified b)5.8(y)0( the)]TJ T* 0.0145 Tw [(highest confidence ranking of the script. )14.7(While this is b)5.8(y)0( no)]TJ T* 0.2561 Tw [(means a statistically significant sampling, it is extr)9.6(emely)]TJ T* 0 Tw (encouraging.)Tj 0 -2.1818 TD -0.0116 Tw [(O)5.8(nce the databases had been matched, I had conv)5.7(enient test)]TJ 0 -1.0909 TD -0.0325 Tw [(data for the modules, since they could no)11.8(w check their wor)5.8(k.)]TJ T* 0.0632 Tw [(This allo)11.9(w)5.8(ed me to emphasiz)5.7(e successful test methods, and)]TJ T* 0.025 Tw [(de-emphasiz)5.8(e ones that pr)5.7(o)15.9(vided too many false positiv)5.7(es.)]TJ 0 -2.1818 TD -0.0001 Tc 0.0937 Tw [(This ar)-7.9(ticle will sho)11.9(w y)5.8(ou ho)11.9(w to use these modules, and)]TJ 0 -1.0909 TD 0.025 Tw [(explains a little about ho)11.9(w they wor)5.8(k.)]TJ /F8 1 Tf 12 0 0 12 342 738.3574 Tm 0 Tc 0 Tw (I)Tj 10.44 0 0 10.44 346.4851 738.3574 Tm 0.0228 Tc [(NST)88.6(ALLING)-381.4(THE)]TJ 12 0 0 12 436.0124 738.3573 Tm 0 Tc (M)Tj 10.44 0 0 10.44 447.3031 738.3573 Tm 0.0229 Tc (ODULES)Tj /F1 1 Tf 11 0 0 11 342 715.3574 Tm 0.0199 Tc 0.6023 Tw [(Lingua::EN::M)12(atchN)29.8(ames has sev)5.8(eral dependancies:)]TJ T* 2.8623 Tw [(Lingua::EN::N)29.8(ameP)42(arse, Lingua::EN::N)23.9(ickname,)]TJ T* -0.0001 Tc 0.0278 Tw [(S)24.1(tring::A)11.9(ppr)5.8(o)5.9(x)0(, T)119.9(ext::M)23.9(etaphone, )-44.9(and T)119.9(ext::S)11.9(oundex. )-44.9(Kim)]TJ T* 0.0199 Tc 0.8132 Tw [(R)29.9(yan)69.8()79.9(s)-0.1( Lingua::EN::N)29.8(ameP)41.9(arse, in turn, r)9.7(e)0(quir)9.7(e)-0.1(s)]TJ T* 0.8912 Tw [(P)42.1(arse::R)11.9(ecD)5.8(escent. Lingua::EN::N)23.9(ickname has no)]TJ T* -0.0001 Tc 0 Tw (dependancies.)Tj 0 -2.1818 TD 0.0667 Tw [(Although they ar)9.7(en)69.8()79.9(t)0( bundled, y)5.8(our CP)39.7(AN module should)]TJ 0 -1.0909 TD 0.025 Tw [(be able to follo)11.9(w the dependencies:)]TJ /F2 1 Tf 7 0 0 7 351.2378 599.3574 Tm -0.0003 Tc 0 Tw (% )Tj /F11 1 Tf 1.2597 0 TD -0.0001 Tc 0.0599 Tw (perl -MCPAN -e "install\('Lingua::EN::MatchNames'\)")Tj /F1 1 Tf 11 0 0 11 342 575.3574 Tm 0.0683 Tw [(W)9.7(indo)11.9(ws users without a compiler will likely need to first)]TJ 0 -1.0909 TD 0.025 Tw [(use PPM to r)9.7(etriev)5.8(e binaries of two of the r)9.7(equisites:)]TJ /F11 1 Tf 7 0 0 7 351.2378 543.3574 Tm 0.0599 Tw (ppm install String-Approx Text-Metaphone)Tj /F8 1 Tf 12 0 0 12 342 517.3574 Tm 0 Tc 0 Tw (M)Tj 10.44 0 0 10.44 353.2907 517.3574 Tm 0.0228 Tc (ODULE)Tj 12 0 0 12 394.2117 517.3574 Tm 0 Tc (C)Tj 10.44 0 0 10.44 402.7778 517.3574 Tm 0.0228 Tc [(ONTENT)11.8(S)]TJ /F1 1 Tf 11 0 0 11 342 493.3574 Tm -0.0001 Tc 0.0463 Tw [(The main module, Lingua::EN::M)11.9(atchN)29.8(ames, expor)-7.9(ts one)]TJ T* 0.0086 Tw [(function b)5.8(y)0( default: )]TJ /F2 1 Tf 9 0 0 9 429.1525 481.3574 Tm -0.0002 Tc 0 Tw (name_eq\(\))Tj /F1 1 Tf 11 0 0 11 477.7406 481.3574 Tm -0.0001 Tc 0.0086 Tw [(. )14.8(Y)93.9(ou can either feed it four)]TJ -12.3401 -1.0909 TD 0 Tw (parameters:)Tj /F2 1 Tf 7 0 0 7 350.9578 449.3574 Tm -0.0201 Tc 0.0599 Tw (name_eq\( $firstname0, $lastname0, $firstname1, $lastname1 \))Tj /F1 1 Tf 11 0 0 11 342 425.3574 Tm -0.0001 Tc 0.1805 Tw [(or two \(thanks to Lingua::EN::N)29.7(ameP)41.9(arse, which br)9.7(eaks)]TJ T* 0.025 Tw (full names into their constituent components\):)Tj /F2 1 Tf 7 0 0 7 351.2378 393.3574 Tm 0.0599 Tw (name_eq\( $name0, $name1 \))Tj /F1 1 Tf 11 0 0 11 342 369.3574 Tm 0.0883 Tw [(and it will r)9.7(eturn a cer)-7.9(tainty scor)9.7(e betw)5.8(een 0 and 100, or)]TJ /F2 1 Tf 9 0 0 9 342 357.3574 Tm -0.0002 Tc 0 Tw (undef)Tj /F1 1 Tf 11 0 0 11 373.8069 357.3574 Tm -0.0001 Tc 0.1876 Tw (if the names cannot be matched via any method)Tj -2.8915 -1.0909 TD 0.025 Tw [(kno)11.9(wn to the module.)]TJ 0 -2.1818 TD 0.2022 Tw [(I)5.9(f)0( y)5.8(ou ask for them, Lingua::EN::M)11.9(atchN)29.7(ames will also)]TJ 0 -1.0909 TD -0.0002 Tc 0 Tw [(expor)-8(t )]TJ /F2 1 Tf 9 0 0 9 372.069 309.3574 Tm (fname_eq\(\))Tj /F1 1 Tf 11 0 0 11 428.9873 309.3574 Tm (or )Tj /F2 1 Tf 9 0 0 9 440.9128 309.3574 Tm (lname_eq\(\))Tj /F1 1 Tf 11 0 0 11 494.8996 309.3574 Tm -0.0001 Tc 0.0165 Tw (, for matching first and)Tj -13.9 -1.0909 TD 0.1146 Tw [(last names. Both take two parameters, and each r)9.7(eturns a)]TJ T* 0.025 Tw [(cer)-7.9(tainty scor)9.7(e betw)5.8(een 0 and 100.)]TJ 0 -2.1818 TD 0.0199 Tc 0.6521 Tw [(Lingua::EN::N)23.9(ickname expor)-7.9(ts )]TJ /F2 1 Tf 9 0 0 9 498.7132 261.3574 Tm 0 Tw (nickname_eq\(\))Tj /F1 1 Tf 11 0 0 11 581.3787 261.3574 Tm 0.0197 Tc (for)Tj -21.7617 -1.0909 TD -0.0001 Tc 0.0382 Tw (matching first names solely on the basis of nicknames, and)Tj /F2 1 Tf 9 0 0 9 342 237.3574 Tm -0.0002 Tc 0 Tw (nickroot\(\))Tj /F1 1 Tf 11 0 0 11 395.9868 237.3574 Tm -0.0001 Tc 0.1072 Tw (, which attempts to look up the full \(formal\))Tj -4.9079 -1.0909 TD 0.0212 Tw [(first name\(s\), giv)5.8(en a nickname. I)5.8(f)0( asked, it will also expor)-7.9(t)]TJ /F2 1 Tf 9 0 0 9 342 213.3574 Tm -0.0002 Tc 0 Tw (nickmatch\(\))Tj /F1 1 Tf 11 0 0 11 401.3855 213.3574 Tm -0.0001 Tc 0.3439 Tw [(, which r)9.7(eturns a r)9.7(egex for matching all)]TJ -5.3987 -1.0909 TD 0.1897 Tw [(kno)11.9(wn full names giv)5.8(en a nickname; or )]TJ /F2 1 Tf 9 0 0 9 526.4659 201.3574 Tm -0.0002 Tc 0 Tw (nickfollow\(\))Tj /F1 1 Tf 11 0 0 11 591.2501 201.3574 Tm 0 Tc (,)Tj -22.6591 -1.0909 TD -0.0001 Tc 0.2997 Tw [(which r)9.7(ecursiv)5.8(ely sear)5.8(ches for a path of r)9.7(elated names)]TJ T* 0.0065 Tw [(joining the two names passed to it, and r)9.7(eturns the number)]TJ T* 0.1291 Tw [(of hops)39.7( betw)5.8(een the two)15.8(. I)11.9(n)0( practice, unless y)5.8(ou hav)5.8(e a)]TJ T* -0.0077 Tw [(specific need, y)5.8(ou will pr)5.8(obably use Lingua::EN::N)23.9(ickname)]TJ T* 0.025 Tw [(only indir)9.7(ectly)84.9(, thr)5.8(ough Lingua::EN::M)11.9(atchN)29.7(ames.)]TJ 12 0 0 12 517.3723 90.3543 Tm 0 Tc 0 Tw (F)Tj 10.44 0 0 10.44 523.4518 90.3543 Tm -0.0001 Tc (ALL)Tj 12 0 0 12 544.7999 90.3543 Tm 0 Tc 0.025 Tw [(2000 57)]TJ /F3 1 Tf -40.15 0 TD -0.0002 Tc 0.0255 Tw [(The P)47.6(erl J)35.7(our)-8(nal #19)]TJ ET 0 0 0 0 k 63 798 531 -21.17 re 162.892 90.354 m f* BT /F8 1 Tf 16 0 0 16 63 786.4766 Tm 0 0 0 1 k 0 Tc 0 Tw (S)Tj 13.92 0 0 13.92 71.0625 786.4766 Tm -0.0002 Tc [(MAR)51.6(T)]TJ 16 0 0 16 114.9939 786.4766 Tm 0 Tc (M)Tj 13.92 0 0 13.92 129.7283 786.4766 Tm -0.0002 Tc [(A)81.6(T)35.8(CHING)-322.4(FOR)]TJ 16 0 0 16 229.9308 786.4766 Tm 0 Tc (H)Tj 13.92 0 0 13.92 242.919 786.4766 Tm -0.0002 Tc (UMAN)Tj 16 0 0 16 290.1605 786.4766 Tm 0 Tc (N)Tj 13.92 0 0 13.92 302.6371 786.4766 Tm -0.0001 Tc (AMES)Tj /F7 1 Tf 16 0 0 16 495.6158 786.4766 Tm -0.0002 Tc -0.0007 Tw (Brian Lalonde)Tj ET /Cs10 CS 1 SCN 0 J 0 j 6 w 10 M []0 d 63 807 m 207 807 l S 0 0.03 0.3 0 k /GS1 gs 63.25 746.75 251.5 -108.2 re 593.997 786.477 m f* BT /F9 1 Tf 12 0 0 12 147.4807 732.7738 Tm 0 0 0 1 k /GS2 gs 0.0277 Tw [(P)29.8(a)0(cka)14.7(g)14.7(es Used)]TJ /F1 1 Tf 9 0 0 9 72.5 718.7738 Tm 0 Tc 0 Tw [(Lingua::EN::M)12(atchN)29.8(ames)-168.1(...................................................CP)39.8(A)0.2(N)]TJ 0 -1.3333 TD [(Lingua::EN::N)29.8(ameP)42(arse)-55.1(.......................................................CP)39.8(A)0.2(N)]TJ T* [(Lingua::EN::N)24(ickname)-97.1(........................................................CP)39.8(A)0.2(N)]TJ T* [(S)24.2(tring::A)12(ppr)5.9(o)6(x)-226.1(.....................................................................CP)39.8(A)0.2(N)]TJ T* [(T)120(ext::M)24(etaphone)-71.7(..................................................................CP)39.8(A)0.2(N)]TJ T* [(T)120(ext::S)12(oundex)-158.6(......................................................................CP)39.8(A)0.2(N)]TJ T* [(P)42.2(arse::R)12(ecD)5.9(escent)-158.8(................................................................CP)39.8(A)0.2(N)]TJ ET 0 0 0 1 K 0.5 w /GS1 gs 63.25 746.75 251.5 -108.2 re 304.52 646.774 m S Q 0 0 0 0 k 1 i 37 874 191 -12 re 304.52 646.774 m f* BT /F2 1 Tf 8 0 0 8 39 864 Tm /Cs9 cs 1 scn -0.0004 Tc -0.0019 Tw (TPJ#19/9.26 9/27/00 10:35 AM Page 57)Tj ET 1 G 0 J 0 j 0.5 w 10 M []0 d 36 873 m 36 849 l 0 837 m 24 837 l 621 873 m 621 849 l 657 837 m 633 837 l 36 36 m 36 60 l 0 72 m 24 72 l 621 36 m 621 60 l 657 72 m 633 72 l S /Cs9 CS 1 SCN 0.25 w 36 873 m 36 849 l 0 837 m 24 837 l 621 873 m 621 849 l 657 837 m 633 837 l 36 36 m 36 60 l 0 72 m 24 72 l 621 36 m 621 60 l 657 72 m 633 72 l S 1 G 0.5 w 304.5 861 m 352.5 861 l 304.5 48 m 352.5 48 l 12 478.5 m 12 430.5 l 645 478.5 m 645 430.5 l 328.5 873 m 328.5 849 l 328.5 60 m 328.5 36 l 0 454.5 m 24 454.5 l 633 454.5 m 657 454.5 l 328.5 861 m 334.5 861 l 334.5 857.688 331.812 855 328.5 855 c 325.188 855 322.5 857.688 322.5 861 c 322.5 864.312 325.188 867 328.5 867 c 331.812 867 334.5 864.312 334.5 861 c 328.5 48 m 334.5 48 l 334.5 44.688 331.812 42 328.5 42 c 325.188 42 322.5 44.688 322.5 48 c 322.5 51.312 325.188 54 328.5 54 c 331.812 54 334.5 51.312 334.5 48 c 12 454.5 m 18 454.5 l 18 451.188 15.312 448.5 12 448.5 c 8.688 448.5 6 451.188 6 454.5 c 6 457.812 8.688 460.5 12 460.5 c 15.312 460.5 18 457.812 18 454.5 c 645 454.5 m 651 454.5 l 651 451.188 648.312 448.5 645 448.5 c 641.688 448.5 639 451.188 639 454.5 c 639 457.812 641.688 460.5 645 460.5 c 648.312 460.5 651 457.812 651 454.5 c S /Cs9 CS 1 SCN 0.25 w 304.5 861 m 352.5 861 l 304.5 48 m 352.5 48 l 12 478.5 m 12 430.5 l 645 478.5 m 645 430.5 l 328.5 873 m 328.5 849 l 328.5 60 m 328.5 36 l 0 454.5 m 24 454.5 l 633 454.5 m 657 454.5 l 328.5 861 m 334.5 861 l 334.5 857.688 331.812 855 328.5 855 c 325.188 855 322.5 857.688 322.5 861 c 322.5 864.312 325.188 867 328.5 867 c 331.812 867 334.5 864.312 334.5 861 c 328.5 48 m 334.5 48 l 334.5 44.688 331.812 42 328.5 42 c 325.188 42 322.5 44.688 322.5 48 c 322.5 51.312 325.188 54 328.5 54 c 331.812 54 334.5 51.312 334.5 48 c 12 454.5 m 18 454.5 l 18 451.188 15.312 448.5 12 448.5 c 8.688 448.5 6 451.188 6 454.5 c 6 457.812 8.688 460.5 12 460.5 c 15.312 460.5 18 457.812 18 454.5 c 645 454.5 m 651 454.5 l 651 451.188 648.312 448.5 645 448.5 c 641.688 448.5 639 451.188 639 454.5 c 639 457.812 641.688 460.5 645 460.5 c 648.312 460.5 651 457.812 651 454.5 c S endstream endobj 175 0 obj << /Type /Page /Parent 496 0 R /Resources 176 0 R /Contents 177 0 R /Thumb 435 0 R /MediaBox [ 0 0 684 873 ] /CropBox [ 0 0 684 873 ] /Rotate 0 >> endobj 176 0 obj << /ProcSet [ /PDF /Text ] /Font << /F1 515 0 R /F2 518 0 R /F3 261 0 R /F5 262 0 R /F8 268 0 R >> /ExtGState << /GS1 523 0 R /GS2 521 0 R >> /ColorSpace << /Cs9 520 0 R >> >> endobj 177 0 obj << /Length 12438 >> stream 1 g /GS1 gs 0 873 m 0 873 l f q 1 i 27 846 603 -783 re 0 873 m W n 0 873 684 -873 re W n BT /F8 1 Tf 12 0 0 12 63 801.3574 Tm 0 0 0 1 k /GS2 gs 0 Tc 0 Tw (U)Tj 10.44 0 0 10.44 72.1667 801.3574 Tm 0.0227 Tc [(SING)-381.5(THE)]TJ 12 0 0 12 127.928 801.3574 Tm 0 Tc (M)Tj 10.44 0 0 10.44 139.2187 801.3574 Tm 0.0229 Tc (ODULES)Tj /F1 1 Tf 11 0 0 11 63 779.3574 Tm -0.0001 Tc 0.0754 Tw [(These modules w)5.8(e)0.1(r)9.7(e)0( designed for completeness o)15.8(v)5.9(er speed)]TJ 0 -1.0909 TD 0.0457 Tw [(or siz)5.8(e. )14.8(Y)93.9(ou can expect that matching thousands of r)9.7(ecor)13.8(d)0.1(s)]TJ T* 0.025 Tw [(will take hours when testing ev)5.8(er)-17.9(y possible match.)]TJ 0 -2 TD 0.1952 Tw [(T)109.9(y)0(pically)84.9(, y)5.8(our script will build an array of )]TJ /F2 1 Tf 9 0 0 9 262.6418 733.3574 Tm 0 Tc 0 Tw ([)Tj /F5 1 Tf 11 0 0 11 272.9381 733.3574 Tm -0.0001 Tc (uniqueid)Tj /F2 1 Tf 9 0 0 9 309.6012 733.3574 Tm 0 Tc (,)Tj /F5 1 Tf 11 0 0 11 63 721.3574 Tm -0.0001 Tc (firstname)Tj /F2 1 Tf 9 0 0 9 100.8957 721.3574 Tm 0 Tc (,)Tj /F5 1 Tf 11 0 0 11 109.0411 721.3574 Tm -0.0001 Tc (lastname)Tj /F2 1 Tf 9 0 0 9 147.5942 721.3574 Tm 0 Tc (])Tj /F1 1 Tf 11 0 0 11 155.7396 721.3574 Tm -0.0001 Tc -0.0003 Tw [(elements fr)5.8(om the first database, then)]TJ -8.4309 -1.0909 TD 0.134 Tw [(iterate o)15.8(v)5.9(er the r)9.7(ecor)13.8(ds in the second database, collecting)]TJ T* 0.025 Tw [(matches as sho)11.9(wn in Listing 1. )]TJ 0 -2.0909 TD -0.0332 Tw [(Listing 1 assumes that y)5.8(our names ar)9.7(e in a file with some ID)]TJ 0 -1.0909 TD 0.1193 Tw [(number)59.7(, a first name, and then a last name, all separated)]TJ T* 0.2243 Tw [(with tabs. O)5.8(b)5.8(viously)84.9(, since the functions expor)-7.9(ted b)5.8(y)0( a)]TJ T* 0.0936 Tw [(module accept simple strings, y)5.8(ou can extract y)5.8(our names)]TJ T* 0.025 Tw [(fr)5.8(om anything y)5.8(ou like, or ev)5.8(en the command line.)]TJ /F8 1 Tf 12 0 0 12 63 601.3574 Tm 0 Tc 0 Tw (W)Tj 10.44 0 0 10.44 74.8532 601.3574 Tm 0.0227 Tc [(HA)81.5(T)]TJ 12 0 0 12 100.8374 601.3574 Tm 0 Tc (T)Tj 10.44 0 0 10.44 109.2599 601.3574 Tm 0.0225 Tc [(HE)11.4(Y)]TJ 12 0 0 12 134.1455 601.3574 Tm 0 Tc (D)Tj 10.44 0 0 10.44 143.7927 601.3574 Tm (O)Tj /F2 1 Tf 9 0 0 9 63 580.3574 Tm -0.0002 Tc (name_eq\(\))Tj /F1 1 Tf 11 0 0 11 116.601 580.3574 Tm -0.0001 Tc 0.2057 Tw [(simply r)9.7(equir)9.7(es that some cer)-7.9(tainty exist for)]TJ -4.8728 -1.0909 TD 0.0001 Tw [(both first and last names, and r)9.7(eturns a scor)9.7(e that combines)]TJ T* 0.025 Tw [(the two, w)5.8(eighting the last name mor)9.7(e heavily \(70%\).)]TJ /F2 1 Tf 9 0 0 9 63 534.3574 Tm -0.0002 Tc 0 Tw (fname_eq\(\))Tj /F1 1 Tf 11 0 0 11 120.0118 534.3574 Tm -0.0001 Tc 0.025 Tw (matches first names like so:)Tj -5.1829 -2.0909 TD [(1. S)11.9(imple equality is tested.)]TJ 1.6364 -1.9091 TD [(T)129.9(rivial matches r)9.7(eturn a cer)-7.9(tainty of 100.)]TJ -1.6364 -2.0909 TD 0.0449 Tw [(2. I)11.9(nformal names, delimited b)5.8(y)0( par)9.7(entheses or quotes, ar)9.7(e)]TJ 0 -1.0909 TD 0 Tw [(r)9.9(ecursed.)]TJ 27 31.52 TD 0.0129 Tw [(P)54(o)0.3(r)-7.9(tions of the name wrapped in par)9.7(entheses or quotes)]TJ 0 -1.0909 TD -0.0229 Tw [(ar)9.7(e r)9.7(ecursiv)5.8(ely checked against the potentially matching)]TJ T* 0.0037 Tc 0.3712 Tw (name with )Tj /F2 1 Tf 9 0 0 9 416.4388 778.0776 Tm 0 Tw (fname_eq\(\))Tj /F1 1 Tf 11 0 0 11 470.7711 778.0776 Tm 0.3712 Tw [(. )-17.9(W)9.7(illiam \(Chip\) would)]TJ -10.0701 -1.0909 TD -0.0001 Tc 0.0653 Tw [(ther)9.7(efor)9.7(e match Chip)49.8(, with full cer)-7.9(tainty of the best)]TJ T* 0 Tw (submatch.)Tj -1.6364 -2.1818 TD 0.025 Tw [(3. E)5.8(xtraneous initials ar)9.7(e r)9.7(emo)15.8(v)5.9(ed.)]TJ 1.6364 -1.8182 TD 0.1014 Tw [(H. R)11.9(oss)39.7( matches R)11.9(oss)39.7( with a high cer)-7.9(tainty lev)5.8(el;)]TJ 0 -1.0909 TD 0.181 Tw [(R)11.9(oss H. would also match at this stage. )44.8(This step)]TJ T* 0.1034 Tw [(must be per)-7.9(formed befor)9.7(e the next step)15.8(, name chunk)]TJ T* 0.025 Tw [(r)9.9(ecursion, to av)5.8(oid trivially poor chunk matches.)]TJ -1.6364 -2.1818 TD 0.0966 Tw [(4. N)29.7(ame chunks, separated b)5.8(y)0( symbols or mix)11.9(ed case, ar)9.7(e)]TJ 0 -1.0909 TD 0 Tw [(r)9.9(ecursed.)]TJ 1.6364 -1.8182 TD -0.0222 Tw [(N)29.7(ames ar)9.7(e br)5.8(oken into pieces at nonwor)13.9(d characters, or)]TJ 0 -1.0909 TD 0.0613 Tw [(capitalization changes. )44.9(These par)-7.9(ts ar)9.7(e each r)9.7(ecursiv)5.8(ely)]TJ T* 0.1971 Tw (checked against the potentially matching name with)Tj /F2 1 Tf 9 0 0 9 360 582.0776 Tm 0.0198 Tc 0 Tw (fname_eq\(\))Tj /F1 1 Tf 11 0 0 11 415.7866 582.0776 Tm 0.5974 Tw [(. M)12(ar)-17.9(y)39.7()0( would ther)9.7(efor)9.7(e match)]TJ -5.0715 -1.0909 TD -0.0001 Tc 0.1011 Tw [(M)11.9(ar)-17.9(yAnn)69.8(, M)11.9(ar)-17.9(y-Ann)69.8(, or M)11.9(ar)-17.9(y Ann)69.8(, again with)]TJ T* 0.025 Tw [(full cer)-7.9(tainty of the best submatch.)]TJ -1.6364 -2.1818 TD -0.0028 Tw [(5. I)11.9(nconsistent case is flattened to all upper case, and spaces)]TJ 0 -1.0909 TD 0.025 Tw [(and symbols ar)9.7(e r)9.7(emo)15.8(v)5.9(ed.)]TJ 1.6364 -1.8182 TD 0.0003 Tc 0.3746 Tw [(Legacy databases, par)-7.9(ticularly mainframes, tend to)]TJ 0 -1.0909 TD 0.0159 Tc 0.359 Tw [(fav)5.8(or ALL UPP)11.9(ER CASE DA)69.7(T)64.9(A. A)5.8(t)0( this stage,)]TJ T* -0.0001 Tc 0.025 Tw [()89.9(A)0.3(r)-7.9(thur)19.7()0( matches )89.8(A)0.3(R)44.9(T)0(HUR.)]TJ -1.6364 -2.1818 TD 0.0448 Tw [(6. N)23.9(icknames ar)9.7(e follo)11.9(w)5.9(ed, matched, and ranked based on)]TJ 6 -1.0909 TD 0.025 Tw [(pr)5.8(o)5.9(ximity)84.9(, using Lingua::EN::N)23.9(ickname.)]TJ 1.4546 -1.8182 TD -0.0101 Tc 0.1839 Tw [(This is an alarmingly difficult pr)5.9(oblem)]TJ 0 -1.0909 TD -0.0352 Tw [(that ev)5.8(entually gr)9.7(e)-6(w)0( into its o)11.9(wn module.)]TJ /F8 1 Tf 12 0 0 12 407.9998 384.0776 Tm 0 Tc 0 Tw (M)Tj 10.44 0 0 10.44 419.2906 384.0776 Tm 0.0227 Tc [(A)81.6(T)35.7(CHING)]TJ 12 0 0 12 472.3191 384.0776 Tm 0 Tc (N)Tj 10.44 0 0 10.44 481.9165 384.0776 Tm 0.0228 Tc (ICKNAMES)Tj /F1 1 Tf 11 0 0 11 407.9998 361.0776 Tm 0.0049 Tc 0.37 Tw [(Lingua::EN::N)24(ickname is a much mor)9.8(e)]TJ T* -0.0001 Tc 0.0995 Tw [(terrifying animal than Lingua::EN::M)11.9(atch-)]TJ T* 0.3252 Tw [(N)29.7(ames, due to the capricious natur)9.7(e of)]TJ T* 0.273 Tw [(nicknames. B)11.9(asically)84.9(, it builds four giant)]TJ T* 0.0987 Tw (hashes: one for looking up nicknames that)Tj T* 0.2511 Tw [(hav)5.8(e a single kno)11.9(wn r)5.8(oot name \(that is,)]TJ T* 0.0199 Tc 0.3694 Tw (full/formal form\), one for looking up)Tj T* -0.0001 Tc 0.2718 Tw (ambiguous nicknames, one for finding a)Tj T* 0.0181 Tc 0.3568 Tw [(r)9.9(e)0(gular expr)9.7(ession matching all kno)11.9(wn)]TJ T* -0.0001 Tc 0.0203 Tw [(forms of a r)5.8(oot name, and one for mapping)]TJ T* 0.1649 Tw [(r)9.9(elated r)5.8(oot)17.8( names. )44.8(The functions in this)]TJ T* 0.2134 Tw [(module ar)9.7(e fairly straightfor)-17.9(war)13.8(d users of)]TJ T* 0.0251 Tw (these hashes.)Tj 0 -2.1818 TD 0.0256 Tw [(This v)5.8(ast hash data should not be edited b)5.8(y)]TJ 0 -1.0909 TD 0.1963 Tw [(hand. Although I would pr)9.7(efer to r)9.7(eceiv)5.8(e)]TJ T* 0.0186 Tc 0.3562 Tw [(mail r)9.7(egar)13.9(ding omissions, a utility for)]TJ T* -0.0001 Tc 0.2298 Tw [(generating the P)53.9(erl code for these hashes)]TJ T* 0 Tc 0 Tw (\()Tj /F2 1 Tf 9 0 0 9 411.5179 145.0775 Tm -0.0002 Tc (nickhash.pl)Tj /F1 1 Tf 11 0 0 11 470.9034 145.0775 Tm -0.0001 Tc 0.1314 Tw [(\) is pr)5.8(o)15.9(vided, and is a good)]TJ -5.7185 -1.0909 TD 0.0199 Tc 0.8539 Tw [(star)-7.9(ting point for other languages)]TJ T* 0 Tw (\(Lingua::)Tj /F5 1 Tf 3.6961 0 TD (XX)Tj /F1 1 Tf 1.1919 0 TD 0.697 Tw [(::N)23.9(ickname\). The )-44.8(original)]TJ 12 0 0 12 63 90.3543 Tm 0 Tc 0 Tw [(58)-1100(F)]TJ 10.44 0 0 10.44 94.2795 90.3543 Tm -0.0001 Tc (ALL)Tj 12 0 0 12 115.6277 90.3543 Tm 0 Tc (2000)Tj /F3 1 Tf 30.9897 0.0003 TD -0.0002 Tc 0.0255 Tw [(The P)47.6(erl J)35.7(our)-8(nal #19)]TJ ET 0 0.03 0.3 0 k 63 440.02 333 -323.02 re 587.395 90.357 m f* BT /F8 1 Tf 12 0 0 12 65.3889 424.3574 Tm 0 0 0 1 k -0.0001 Tc [(Listing 1. U)29.6(sing Lingua::EN::M)11.8(atchN)29.6(ames.)]TJ /F2 1 Tf 7 0 0 7 74.6267 409.3574 Tm -0.0002 Tc 0.06 Tw (use Lingua::EN::MatchNames;)Tj 0 -1.7143 TD -0.0001 Tc [(my $certainty_threshold = 85; # 85% certain is reasonable)]TJ T* -0.0002 Tc (# set up the pool of potential matches )Tj 0 -1.1429 TD (open NAMES, '; )Tj 0 -1.7143 TD -0.0001 Tc [(# again, assume a tab-delim file of idnum, firstname, lastname)]TJ 0 -1.1429 TD -0.0002 Tc (open NAMES, '\) {)Tj 2.6394 -1.1429 TD 0 Tw (chomp;)Tj T* 0.06 Tw [(my \($idnum, $fname, $lname\) = split /\\t/;)]TJ T* -0.0001 Tc [(my @matches = sort { $b->[0] <=> $a->[0] } # most certain first)]TJ 1.3197 -1.1429 TD -0.0002 Tc (map {)Tj 1.3197 -1.1429 TD -0.0001 Tc [(my $score= name_eq\( $fname, $lname, $_->[0], $_->[1] \);)]TJ T* -0.0002 Tc ($score ? [ $score, @$_ ] : \(\))Tj -1.3197 -1.1429 TD (} @pool;)Tj -1.3197 -1.1429 TD (unless \(@matches\) {)Tj 2.6394 -1.1429 TD (# no matches found)Tj T* -0.0001 Tc (print "$idnum \($fname $lname\): no matches\\n";)Tj -2.6394 -1.1429 TD 0 Tc 0 Tw (})Tj T* -0.0001 Tc 0.0599 Tw [(elsif \( @matches == 1 and $matches[0]->[0] > $certainty_threshold \) {)]TJ 2.6394 -1.1429 TD -0.0002 Tc (# one solid match)Tj T* -0.0001 Tc [(my \($m_idnum, $m_fname, $m_lname\) = @{$matches[0]};)]TJ T* [(print "$idnum \($fname $lname\) = $m_idnum \($m_fname $m_lname\)\\n";)]TJ -2.6394 -1.1429 TD -0.0002 Tc (} else {)Tj 2.6394 -1.1429 TD -0.0001 Tc (# several potential matches, or an uncertain one )Tj T* -0.0002 Tc [(print "$idnum \($fname $lname\) matches:\\n";)]TJ T* (foreach \(@matches\) {)Tj 2.6394 -1.1429 TD [(my \($m_idnum, $m_fname, $m_lname\) = @$_;)]TJ T* -0.0001 Tc [(print " $m_idnum \($m_fname $m_lname\)\\n";)]TJ -2.6394 -1.1429 TD 0 Tc 0 Tw (})Tj -2.6394 -1.1429 TD (})Tj -2.6394 -1.1429 TD (})Tj ET Q 0 0 0 0 k /GS2 gs 1 i 37 874 191 -12 re 78.827 125.357 m f* BT /F2 1 Tf 8 0 0 8 39 864 Tm /Cs9 cs 1 scn -0.0004 Tc -0.0019 Tw (TPJ#19/9.26 9/27/00 10:35 AM Page 58)Tj ET 1 G 0 J 0 j 0.5 w 10 M []0 d 36 873 m 36 849 l 0 837 m 24 837 l 621 873 m 621 849 l 657 837 m 633 837 l 36 36 m 36 60 l 0 72 m 24 72 l 621 36 m 621 60 l 657 72 m 633 72 l S /Cs9 CS 1 SCN 0.25 w 36 873 m 36 849 l 0 837 m 24 837 l 621 873 m 621 849 l 657 837 m 633 837 l 36 36 m 36 60 l 0 72 m 24 72 l 621 36 m 621 60 l 657 72 m 633 72 l S 1 G 0.5 w 304.5 861 m 352.5 861 l 304.5 48 m 352.5 48 l 12 478.5 m 12 430.5 l 645 478.5 m 645 430.5 l 328.5 873 m 328.5 849 l 328.5 60 m 328.5 36 l 0 454.5 m 24 454.5 l 633 454.5 m 657 454.5 l 328.5 861 m 334.5 861 l 334.5 857.688 331.812 855 328.5 855 c 325.188 855 322.5 857.688 322.5 861 c 322.5 864.312 325.188 867 328.5 867 c 331.812 867 334.5 864.312 334.5 861 c 328.5 48 m 334.5 48 l 334.5 44.688 331.812 42 328.5 42 c 325.188 42 322.5 44.688 322.5 48 c 322.5 51.312 325.188 54 328.5 54 c 331.812 54 334.5 51.312 334.5 48 c 12 454.5 m 18 454.5 l 18 451.188 15.312 448.5 12 448.5 c 8.688 448.5 6 451.188 6 454.5 c 6 457.812 8.688 460.5 12 460.5 c 15.312 460.5 18 457.812 18 454.5 c 645 454.5 m 651 454.5 l 651 451.188 648.312 448.5 645 448.5 c 641.688 448.5 639 451.188 639 454.5 c 639 457.812 641.688 460.5 645 460.5 c 648.312 460.5 651 457.812 651 454.5 c S /Cs9 CS 1 SCN 0.25 w 304.5 861 m 352.5 861 l 304.5 48 m 352.5 48 l 12 478.5 m 12 430.5 l 645 478.5 m 645 430.5 l 328.5 873 m 328.5 849 l 328.5 60 m 328.5 36 l 0 454.5 m 24 454.5 l 633 454.5 m 657 454.5 l 328.5 861 m 334.5 861 l 334.5 857.688 331.812 855 328.5 855 c 325.188 855 322.5 857.688 322.5 861 c 322.5 864.312 325.188 867 328.5 867 c 331.812 867 334.5 864.312 334.5 861 c 328.5 48 m 334.5 48 l 334.5 44.688 331.812 42 328.5 42 c 325.188 42 322.5 44.688 322.5 48 c 322.5 51.312 325.188 54 328.5 54 c 331.812 54 334.5 51.312 334.5 48 c 12 454.5 m 18 454.5 l 18 451.188 15.312 448.5 12 448.5 c 8.688 448.5 6 451.188 6 454.5 c 6 457.812 8.688 460.5 12 460.5 c 15.312 460.5 18 457.812 18 454.5 c 645 454.5 m 651 454.5 l 651 451.188 648.312 448.5 645 448.5 c 641.688 448.5 639 451.188 639 454.5 c 639 457.812 641.688 460.5 645 460.5 c 648.312 460.5 651 457.812 651 454.5 c S endstream endobj 178 0 obj << /Type /Page /Parent 496 0 R /Resources 179 0 R /Contents 180 0 R /Thumb 437 0 R /MediaBox [ 0 0 684 873 ] /CropBox [ 0 0 684 873 ] /Rotate 0 >> endobj 179 0 obj << /ProcSet [ /PDF /Text ] /Font << /F1 515 0 R /F2 518 0 R /F3 261 0 R /F5 262 0 R /F8 268 0 R /F10 270 0 R >> /ExtGState << /GS1 523 0 R /GS2 521 0 R >> /ColorSpace << /Cs9 520 0 R >> >> endobj 180 0 obj << /Length 11922 >> stream 1 g /GS1 gs 0 873 m 0 873 l f q 1 i 27 846 603 -783 re 0 873 m W n 0 873 684 -873 re W n BT /F1 1 Tf 11 0 0 11 63 802.0776 Tm 0 0 0 1 k /GS2 gs 0.0163 Tc 0.3586 Tw [(datafile used b)5.8(y)0( my utility)84.9(, )]TJ /F2 1 Tf 9 0 0 9 202.8874 802.0776 Tm 0 Tw (nicknames.txt)Tj /F1 1 Tf 11 0 0 11 274.9877 802.0776 Tm 0.3586 Tw (, is also)Tj -19.2716 -1.0909 TD -0.0001 Tc 0.1975 Tw [(included; each line consists of thr)9.7(ee tab-separated fields:)]TJ T* 0.2813 Tw [(r)6(oot name, nicknames \(a space/nonwor)13.8(d-separated list\),)]TJ T* 0.0249 Tw [(and r)9.7(elated r)5.8(oot names.)]TJ 0 -2.0909 TD 0.0365 Tw [(Any cer)-7.9(tainty r)9.7(eturned b)5.8(y)-0.1( )]TJ /F2 1 Tf 9 0 0 9 176.6861 743.0776 Tm -0.0002 Tc 0 Tw (nickname_eq\(\))Tj /F1 1 Tf 11 0 0 11 250.0208 743.0776 Tm -0.0001 Tc 0.0366 Tw (is scaled back a)Tj -17.0019 -1.0909 TD 0.025 Tw [(little, and r)9.7(eturned.)]TJ 0 -2.0909 TD 0.0587 Tw [(Continuing wher)9.7(e w)5.8(e)0( left off)15.8(, the r)9.7(emaining four steps for)]TJ 0 -1.0909 TD 0.025 Tw [(matching first names ar)9.7(e:)]TJ 0 -2.0909 TD 0.3161 Tw [(7. M)11.9(isspellings ar)9.7(e detected, within a thr)9.7(eshold, using)]TJ 0 -1.0909 TD -0.0002 Tc 0 Tw [(S)24(tring::A)11.8(ppr)5.7(o)5.8(x)-0.1(.)]TJ 1.6364 -1.8182 TD -0.0001 Tc 0.2556 Tw [(D)6(a)0.1(ta-entr)-17.9(y)0( err)5.8(ors ar)9.7(e tolerated b)5.8(y)0( determining ho)11.9(w)]TJ 0 -1.0909 TD -0.0201 Tw [(many character inser)-7.9(tions, transpositions, and deletions)]TJ T* 0.0148 Tw [(would be r)9.7(equir)9.7(ed to change one of the names into the)]TJ T* 0.2794 Tw [(other)59.7(, and ensuring that this number is belo)11.9(w the)]TJ T* 0.0067 Tc 0.3682 Tw [(default thr)9.6(eshold for S)23.8(tring::A)11.8(ppr)5.7(o)5.9(x)-0.1( \(10% of the)]TJ T* -0.0001 Tc -0.0345 Tw [(characters, r)5.8(ounded up\) for matches. B)11.9(ar)-7.9(t)17.8()0( and Bor)-7.9(t)17.8()]TJ T* 0.0035 Tc 0.3713 Tw [(would no)11.9(w match one another)59.7(, and B)11.9(rian)69.8( and)]TJ T* -0.0001 Tc 0.025 Tw [(B)11.9(rain)69.8( would no)11.9(w match.)]TJ -1.6364 -2.0909 TD -0.0121 Tw [(8. P)5.8(honetic matching catches similar pr)5.8(onounciation, using)]TJ 0 -1.0909 TD 0 Tw [(T)119.9(ext::M)23.9(etaphone.)]TJ 1.6364 -1.8182 TD 0.0026 Tc 0.3723 Tw [(H)17.9(o)0(monymous names ar)9.7(e no)11.9(w matched using the)]TJ 0 -1.0909 TD -0.0001 Tc 0.1339 Tw [(surprisingly accurate )44.9(T)119.9(ext::M)23.9(etaphone module, which)]TJ T* 0.079 Tw [(allo)11.9(ws us to find S)11.9(andy)39.7( = S)11.9(anD)5.8(ee)29.7(, and Cindy)39.7( =)]TJ T* 0.025 Tw [(S)11.9(indy)39.7(, but with r)9.7(e)0.1(lativ)5.8(ely lo)11.9(w cer)-7.9(tainty)84.9(.)]TJ -1.6364 -2.0909 TD 0.0199 Tc 0.5297 Tw [(9. S)11.9(ome)-5.9(what similar last names ar)9.7(e caught with)]TJ 0 -1.0909 TD -0.0001 Tc 0 Tw [(T)119.9(ext::S)11.9(oundex.)]TJ 1.6364 -1.8182 TD 0.046 Tw [(O)5.8(ut of completeness, I)49.7(v)5.9(e)0( included soundex matching,)]TJ 0 -1.0909 TD 0.3389 Tw [(which is v)5.8(e)0.1(r)-17.9(y)0( tenuous \(especially for first names\).)]TJ T* 0.025 Tw [(S)12.1(oundex matches r)9.7(eturn a v)5.8(e)0.1(r)-17.9(y)0( lo)11.9(w cer)-7.9(tainty)84.9(.)]TJ -1.6364 -2.0909 TD 0.2369 Tw [(10. R)11.9(egular expr)9.7(ession check for simple tr)-7.9(uncation and)]TJ 0 -1.0909 TD 0.025 Tw [(r)9.9(elev)5.8(ant initials.)]TJ 1.6364 -1.8182 TD -0.0201 Tc 0.1356 Tw [(I)12(n)0.1(itials ar)9.7(e r)9.7(e-checked to see if they may not hav)5.7(e been)]TJ 0 -1.0909 TD -0.0001 Tc 0.414 Tw [(pur)9.7(e noise \(H. R)11.9(oss)39.7( = H)17.8(erman)69.8(\), and simple)]TJ T* -0.0201 Tc -0.0325 Tw [(tr)-7.9(uncation is checked \(B)11.9(ri)19.7( = B)11.9(rian)69.8(\). B)5.8(ecause of the tiny)]TJ T* 0.025 Tw [(amount of matching data, this is the least cer)-8(tain match.)]TJ -1.6364 -2.0909 TD -0.0001 Tc -0.0324 Tw [(M)12(atching last names with )]TJ /F2 1 Tf 9 0 0 9 173.8471 273.0775 Tm -0.0002 Tc 0 Tw (lname_eq\(\))Tj /F1 1 Tf 11 0 0 11 230.2277 273.0775 Tm -0.0001 Tc -0.0324 Tw [(is a slightly differ)9.7(ent)]TJ -15.2025 -1.0909 TD 0 Tw [(pr)5.8(ocess:)]TJ 0 -2.0909 TD 0.025 Tw [(1. S)11.9(imple equality is tested.)]TJ 0 -1.8182 TD [(2. E)5.8(xtraneous suffix)11.9(es ar)9.7(e r)9.7(emo)15.8(v)5.9(ed.)]TJ 1.6364 -1.8182 TD 0.0146 Tc 0.3603 Tw [(P)54(ersons usually include unused names as initials)]TJ 0 -1.0909 TD -0.0001 Tc 0.351 Tw [(formally; fr)9.7(equently)84.9(, this means initials ar)9.7(e simply)]TJ T* 0.3384 Tw [(noise. S)23.9(mith, Jr)59.7(. matches S)23.9(mith)69.8( with a high)]TJ T* 0.2159 Tw [(cer)-7.9(tainty lev)5.8(el; S)23.9(mith II would also match at this)]TJ T* 0 Tw (stage.)Tj -1.6364 -2 TD 0.025 Tw [(3. H)23.9(yphenated surnames ar)9.7(e r)9.7(ecursed.)]TJ 27 61.2727 TD 0.1783 Tw [(N)29.7(ames ar)9.7(e br)5.8(oken into pieces at hyphens; Bouvier-)]TJ 0 -1.0909 TD 0.1357 Tw [(S)12.1(i)0(mpson)69.8( would be r)9.7(ecursiv)5.8(ely checked to match the)]TJ T* 0.1618 Tw [(other name against Bouvier)19.7( and S)11.9(impson)69.8(, and if)]TJ T* 0.0467 Tw [(any matches ar)9.7(e found, the scor)9.7(e of the best submatch)]TJ T* 0.025 Tw [(is r)9.7(eturned.)]TJ -1.6364 -2.0909 TD -0.0028 Tw [(4. I)11.9(nconsistent case is flattened to all upper case, and spaces)]TJ 0 -1.0909 TD 0.025 Tw [(and symbols ar)9.7(e r)9.7(emo)15.8(v)5.9(e)0.1(d)]TJ 1.6364 -1.8182 TD 0.0003 Tc 0.3746 Tw [(Legacy databases, par)-7.9(ticularly mainframes, tend to)]TJ 0 -1.0909 TD -0.0001 Tc 0.2105 Tw [(fav)5.8(or ALL UPP)11.9(ER CASE DA)69.8(T)64.9(A. Also, handling of)]TJ T* 0.2165 Tw [(names that contain apostr)5.8(ophes or spaces is terribly)]TJ T* 0.0093 Tc 0.3656 Tw [(inconsistent. A)5.9(t)0( this stage, ON)29.8(eil)11.9( matches O)]TJ T* -0.0001 Tc 0.025 Tw (NEIL and ONEIL.)Tj -1.6364 -2.0909 TD 0.3161 Tw [(5. M)11.9(isspellings ar)9.7(e detected, within a thr)9.7(eshold, using)]TJ 0 -1.0909 TD -0.0002 Tc 0 Tw [(S)24(tring::A)11.8(ppr)5.7(o)5.8(x)-0.1(.)]TJ 1.6364 -1.8182 TD -0.0001 Tc 0.0741 Tw [(H)5.8(anson)69.8( and H)5.8(ansen)69.8( would no)11.9(w match, as w)5.8(ell as)]TJ 0 -1.0909 TD 0.025 Tw [(S)11.9(impson)69.8( and S)23.8(mipson)69.8(.)]TJ -1.6364 -2.0909 TD 0.2674 Tw [(6. P)5.8(honetic matching catches similarly pr)5.8(onounced last)]TJ 0 -1.0909 TD 0.025 Tw [(names, using )44.8(T)119.9(ext::M)23.9(etaphone.)]TJ 0 -2.0909 TD 0.0199 Tc 0.422 Tw [(7. S)11.9(ome)-5.9(what similar last names ar)9.7(e matched with)]TJ 0 -1.0909 TD -0.0001 Tc 0 Tw [(T)119.9(ext::S)11.9(oundex.)]TJ 0 -2.0909 TD 0.1194 Tw [(8. R)11.9(egular expr)9.7(ession check for nonstandar)13.8(d hyphenation)]TJ 0 -1.0909 TD 0.025 Tw [(or simple tr)-7.9(uncation.)]TJ 0 -2.0909 TD 0.0199 Tc 0.5003 Tw [(N)29.7(onstandar)13.9(d hyphenation \(like lo)12(w)5.9(er-to-upper case)]TJ 0 -1.0909 TD -0.0001 Tc 0.025 Tw [(changes\) ar)9.7(e caught and r)9.7(ecursed.)]TJ 0 -2.0909 TD -0.0251 Tc -0.0256 Tw [(The cer)-7.9(tainty scor)9.7(es r)9.7(eturned b)5.8(y)-0.1( )]TJ /F2 1 Tf 9 0 0 9 470.9273 421.0776 Tm 0 Tw (fname_eq\(\))Tj /F1 1 Tf 11 0 0 11 524.8573 421.0776 Tm (and )Tj /F2 1 Tf 9 0 0 9 542.0377 421.0776 Tm (lname_eq\(\))Tj /F1 1 Tf 11 0 0 11 342 409.0776 Tm -0.0254 Tw [(ar)9.7(e generated fr)5.8(om w)5.8(eights I assigned after ranking each of these)]TJ 0 -1.0909 TD 0.0026 Tw [(steps, based on fr)9.9(equency of use, r)9.8(eliability)85(, some final tw)6(eaking)]TJ T* 0.1458 Tw (after checking against my test data, and on my fondness for)Tj T* 0.038 Tw [(r)6(ound numbers. )44.8(These scor)9.7(es seem to be pr)9.7(etty r)9.7(eliable r)9.7(elativ)5.8(e)]TJ T* -0.0013 Tw [(to each other)59.8(, but ultimately hav)5.8(e an inadequate scientific basis.)]TJ T* 0.2989 Tw [(Any)5.8(one willing to do r)9.7(esear)5.8(ch that would r)9.7(esult in mor)9.7(e)]TJ T* -0.0218 Tw [(accurate scor)9.7(es for these w)5.8(eights is encouraged to do so, and will)]TJ T* 0.0056 Tw [(r)9.9(eceiv)5.8(e cr)9.7(edit in futur)9.7(e v)5.8(ersions of this module, plus my thanks.)]TJ /F8 1 Tf 12 0 0 12 342 300.0775 Tm 0 Tc 0 Tw (C)Tj 10.44 0 0 10.44 350.5661 300.0775 Tm 0.0228 Tc [(ONCL)29.6(USION)]TJ /F1 1 Tf 11 0 0 11 342 277.0776 Tm 0.0149 Tc 0.4544 Tw [(S)12.1(o)0( ther)9.7(e y)5.8(ou hav)5.8(e it: ho)11.9(w to match names with)]TJ T* -0.0051 Tc -0.0116 Tw [(Lingua::EN::M)11.9(atchN)29.7(ames and Lingua::EN::N)23.8(ickname, and)]TJ T* 0.1594 Tw [(a peek under the hood to see ho)11.8(w they wor)5.8(k. I)5.8(f)0( y)5.8(o)0(u ar)9.7(e)]TJ T* 0.0898 Tw [(looking for a pr)5.8(oject, and hav)5.8(e access to a v)5.8(ast database of)]TJ T* -0.008 Tw [(names, the most critical wor)5.7(k is pr)9.7(ecisely r)9.7(efining the w)5.8(eight)]TJ T* 0.0143 Tw [(of each step)15.8(, and filling in any gaps in the list of nicknames.)]TJ /F10 1 Tf 0 -2.1818 TD -0.0001 Tc 0.0278 Tw (_ _END_ _)Tj /F5 1 Tf T* 0.0199 Tc 0.5598 Tw [(B)6(rian Lalonde )]TJ /F1 1 Tf 7.0002 0 TD 0 Tw (\(brianl@sd81.k12.wa.us\))Tj /F5 1 Tf 10.9209 0 TD 0.5599 Tw [(is the )59.8(W)85.9(e)0.1(b)]TJ -17.921 -1.0909 TD -0.0001 Tc 0.214 Tw [(A)17.8(pplications D)5.8(e)0.1(v)5.8(eloper/D)5.8(atabase A)5.8(d)0(ministr)29.7(ator for S)11.9(pokane)]TJ T* 0.0634 Tw [(P)24.1(ublic School District 81. E)29.7(v)6(en no)11.9(w his satellites ar)19.7(e in orbit)]TJ T* 0.0015 Tw [(abo)11.9(v)6(e)0( the wor)11.9(ld)11.9()33.1(s)0( major cities, waiting to tur)-7.9(n his vision into a)]TJ T* 0.025 Tw [(r)19.9(eality)71.7(. I)17.7(t)79.8()33.1(s)-0.1( a pity y)5.8(ou won)109.8()15(t)0( be aliv)5.8(e to see it, Mr)59.7(. Bond.)]TJ /F1 1 Tf 12 0 0 12 517.3723 90.3543 Tm 0 Tc 0 Tw (F)Tj 10.44 0 0 10.44 523.4518 90.3543 Tm -0.0001 Tc (ALL)Tj 12 0 0 12 544.7999 90.3543 Tm 0 Tc 0.025 Tw [(2000 59)]TJ /F3 1 Tf -40.15 0 TD -0.0002 Tc 0.0255 Tw [(The P)47.6(erl J)35.7(our)-8(nal #19)]TJ ET Q 0 0 0 0 k /GS2 gs 1 i 37 874 191 -12 re 162.892 90.354 m f* BT /F2 1 Tf 8 0 0 8 39 864 Tm /Cs9 cs 1 scn -0.0004 Tc -0.0019 Tw (TPJ#19/9.26 9/27/00 10:35 AM Page 59)Tj ET 1 G 0 J 0 j 0.5 w 10 M []0 d 36 873 m 36 849 l 0 837 m 24 837 l 621 873 m 621 849 l 657 837 m 633 837 l 36 36 m 36 60 l 0 72 m 24 72 l 621 36 m 621 60 l 657 72 m 633 72 l S /Cs9 CS 1 SCN 0.25 w 36 873 m 36 849 l 0 837 m 24 837 l 621 873 m 621 849 l 657 837 m 633 837 l 36 36 m 36 60 l 0 72 m 24 72 l 621 36 m 621 60 l 657 72 m 633 72 l S 1 G 0.5 w 304.5 861 m 352.5 861 l 304.5 48 m 352.5 48 l 12 478.5 m 12 430.5 l 645 478.5 m 645 430.5 l 328.5 873 m 328.5 849 l 328.5 60 m 328.5 36 l 0 454.5 m 24 454.5 l 633 454.5 m 657 454.5 l 328.5 861 m 334.5 861 l 334.5 857.688 331.812 855 328.5 855 c 325.188 855 322.5 857.688 322.5 861 c 322.5 864.312 325.188 867 328.5 867 c 331.812 867 334.5 864.312 334.5 861 c 328.5 48 m 334.5 48 l 334.5 44.688 331.812 42 328.5 42 c 325.188 42 322.5 44.688 322.5 48 c 322.5 51.312 325.188 54 328.5 54 c 331.812 54 334.5 51.312 334.5 48 c 12 454.5 m 18 454.5 l 18 451.188 15.312 448.5 12 448.5 c 8.688 448.5 6 451.188 6 454.5 c 6 457.812 8.688 460.5 12 460.5 c 15.312 460.5 18 457.812 18 454.5 c 645 454.5 m 651 454.5 l 651 451.188 648.312 448.5 645 448.5 c 641.688 448.5 639 451.188 639 454.5 c 639 457.812 641.688 460.5 645 460.5 c 648.312 460.5 651 457.812 651 454.5 c S /Cs9 CS 1 SCN 0.25 w 304.5 861 m 352.5 861 l 304.5 48 m 352.5 48 l 12 478.5 m 12 430.5 l 645 478.5 m 645 430.5 l 328.5 873 m 328.5 849 l 328.5 60 m 328.5 36 l 0 454.5 m 24 454.5 l 633 454.5 m 657 454.5 l 328.5 861 m 334.5 861 l 334.5 857.688 331.812 855 328.5 855 c 325.188 855 322.5 857.688 322.5 861 c 322.5 864.312 325.188 867 328.5 867 c 331.812 867 334.5 864.312 334.5 861 c 328.5 48 m 334.5 48 l 334.5 44.688 331.812 42 328.5 42 c 325.188 42 322.5 44.688 322.5 48 c 322.5 51.312 325.188 54 328.5 54 c 331.812 54 334.5 51.312 334.5 48 c 12 454.5 m 18 454.5 l 18 451.188 15.312 448.5 12 448.5 c 8.688 448.5 6 451.188 6 454.5 c 6 457.812 8.688 460.5 12 460.5 c 15.312 460.5 18 457.812 18 454.5 c 645 454.5 m 651 454.5 l 651 451.188 648.312 448.5 645 448.5 c 641.688 448.5 639 451.188 639 454.5 c 639 457.812 641.688 460.5 645 460.5 c 648.312 460.5 651 457.812 651 454.5 c S endstream endobj 181 0 obj << /Type /Page /Parent 496 0 R /Resources 182 0 R /Contents 183 0 R /Thumb 439 0 R /MediaBox [ 0 0 684 873 ] /CropBox [ 0 0 684 873 ] /Rotate 0 >> endobj 182 0 obj << /ProcSet [ /PDF /Text /ImageC /ImageI ] /Font << /F1 515 0 R /F2 518 0 R /F3 261 0 R /F5 262 0 R /F7 267 0 R /F8 268 0 R /F9 269 0 R >> /XObject << /Im7 184 0 R >> /ExtGState << /GS1 523 0 R /GS2 521 0 R >> /ColorSpace << /Cs9 520 0 R /Cs10 264 0 R /Cs17 285 0 R >> >> endobj 183 0 obj << /Length 13070 >> stream 1 g /GS1 gs 0 873 m 0 873 l f q 1 i 27 846 603 -783 re 0 873 m W n 0 873 684 -873 re W n BT /F8 1 Tf 12 0 0 12 63 666.3574 Tm 0 0 0 1 k /GS2 gs 0.0198 Tc 0.0254 Tw (I S)Tj 10.44 0 0 10.44 77.3763 666.3574 Tm 0.0226 Tc 0 Tw [(EE)-345.7(A)]TJ 12 0 0 12 103.9573 666.3574 Tm 0 Tc (P)Tj 10.44 0 0 10.44 110.4695 666.3573 Tm 0.0227 Tc [(A)81.6(T)-12.1(TERN)]TJ 12 0 0 12 156.6082 666.3573 Tm 0 Tc (D)Tj 10.44 0 0 10.44 166.2554 666.3573 Tm 0.0227 Tc [(E)11.8(VEL)17.5(OP)11.6(ING)]TJ /F1 1 Tf 29.09 0 0 29.09 62.364 628.3574 Tm 0 Tc (R)Tj 11 0 0 11 81 640.3574 Tm -0.0001 Tc 0.0105 Tw [(egular expr)9.7(essions ar)9.7(e one of the triumphs of computer)]TJ 0 -1.0909 TD 0.0199 Tc 0.4617 Tw [(science. )14.9(While often intimidating to beginning)]TJ -1.6364 -1.0909 TD -0.0001 Tc 0.1982 Tw [(pr)5.8(ogrammers, the ability to captur)9.7(e complex patterns of)]TJ T* 0.0628 Tw [(text in succinct r)9.7(epr)9.7(esentations giv)5.8(es dev)5.8(elopers one of the)]TJ T* 0.0183 Tc 0.3566 Tw [(most po)11.9(w)5.8(e)0.1(r)-7.9(ful tools at their disposal. P)54(e)0.1(rl)11.9()79.8(s)0( pattern)]TJ T* -0.0001 Tc 0.2148 Tw [(matching abilities ar)9.7(e among the most adv)5.8(anced of any)]TJ T* 0.1525 Tw [(language, and cer)-7.9(tainly rank among those featur)9.7(es which)]TJ T* 0.0845 Tw [(hav)5.8(e ser)-17.9(v)5.9(ed to make it one of the most popular languages)]TJ T* 0.025 Tw [(ev)5.8(er cr)9.7(eated. )]TJ 0 -2.2727 TD 0.0067 Tw [(H)17.8(o)12(w)5.8(e)0(v)5.8(e)0.1(r)59.7(,)0( r)9.7(egex)11.9(es can)69.8()79.9(t)0( do ev)5.8(er)-17.9(ything. )14.8(When the patterns in)]TJ 0 -1.0909 TD 0.1356 Tw [(y)5.8(our data ar)9.7(e complex, ev)5.8(en P)53.9(erl)11.9()79.9(s)0( r)9.7(egular expr)9.7(essions fall)]TJ T* 0.1453 Tw [(shor)-7.9(t. N)29.8(atural languages, like E)5.8(nglish, ar)9.7(en)69.8()79.9(t)0( amenable to)]TJ T* 0.1181 Tw [(easy pattern matching: if y)5.8(ou want to find sentences that)]TJ T* 0.0161 Tw [(expr)9.7(ess a par)-7.9(ticular sentiment, y)5.8(ou need to first understand)]TJ T* 0.0332 Tw [(the grammar of the sentence, and r)9.7(egular expr)9.7(essions ar)9.7(en)69.8()79.9(t)]TJ T* -0.0015 Tw [(sufficient unless y)5.8(ou thr)5.8(o)12(w)0( a little intelligence into the mix.)]TJ T* 0.025 Tw [(I)12(n)0( this ar)-7.9(ticle, I)11.9(ll sho)11.9(w ho)11.9(w that can be done.)]TJ 0 -2.2727 TD [(W)77.8(e)0( will make it possible to write code like this:)]TJ /F2 1 Tf 7 0 0 7 81.4756 390.3574 Tm -0.0002 Tc 0.06 Tw [(# create an array of everything cool)]TJ 0 -1.1429 TD -0.0001 Tc [(while \($sentence =~ /\\G\($something_that_rocks\)/g\) {)]TJ 2.6394 -1.1429 TD -0.0002 Tc (push \(@stuff_that_rocks, $1\);)Tj -2.6394 -1.1429 TD 0 Tc 0 Tw (})Tj /F1 1 Tf 11 0 0 11 63 342.3574 Tm -0.0001 Tc -0.0194 Tw [(O)5.8(ur notion of )39.7(what)17.7()79.9(s cool)11.9( can)]TJ 0 -1.0909 TD 0.0199 Tc 0.4087 Tw (depend not just on simple)Tj T* 0.0054 Tc 0.3695 Tw (character patterns, but upon)Tj T* -0.0001 Tc 0.0433 Tw [(the wor)13.8(ds in a sentence, and in)]TJ T* 0.0199 Tc 0.4216 Tw [(par)-7.9(ticular their r)5.8(ole in the)]TJ T* -0.0001 Tc 0.3599 Tw [(sentence and r)9.7(elationships to)]TJ T* 0.0199 Tc 0.4633 Tw [(one another)59.8(. I)11.9(n)0( brief)15.8(, this)]TJ T* -0.0001 Tc 0.1566 Tw [(ar)-7.9(ticle explor)9.7(es the application)]TJ T* 0.2521 Tw [(of r)9.7(egular expr)9.7(essions to grammar)59.8(. N)29.7(ote that I am )]TJ /F5 1 Tf 21.7184 0 TD -0.0002 Tc 0 Tw (not)Tj /F1 1 Tf -21.7184 -1.0909 TD -0.0001 Tc 0.1396 Tw [(suggesting another syntax for r)9.7(egular expr)9.7(essions. F)35.8(r)6(om a)]TJ T* 0.2282 Tw [(P)54(erl hacker)19.7()79.9(s)0( perspectiv)5.8(e, what I demonstrate her)9.7(e is an)]TJ T* 0.099 Tw [(inter)9.7(esting application of P)53.9(erl)11.9()79.9(s)0( o)15.8(v)5.9(erloading ability)84.9(, and its)]TJ T* 0.0517 Tw [(usefulness when applied to a domain that)17.7()79.9(s)0( tough to parse:)]TJ T* 0.025 Tw (natural language.)Tj 0 -2.1818 TD -0.0309 Tw [(B)5.8(efor)9.7(e explaining the pr)5.8(ogram, w)5.8(e)29.7()12(ll explor)9.7(e)0( the intelligence)]TJ 0 -1.0909 TD 0.0059 Tw [(that w)5.8(e)29.7()12(ll use to parse natural language: the Link G)23.9(rammar)59.7(.)]TJ /F8 1 Tf 12 0 0 12 342 738.3574 Tm 0 Tc 0 Tw (L)Tj 10.44 0 0 10.44 348.9577 738.3574 Tm 0.0227 Tc (INK)Tj 12 0 0 12 372.2554 738.3573 Tm 0 Tc (G)Tj 10.44 0 0 10.44 381.4104 738.3573 Tm 0.0228 Tc (RAMMAR)Tj /F1 1 Tf 11 0 0 11 342 712.3574 Tm -0.0001 Tc 0.1525 Tw [(M)12(a)0(ny appr)5.8(oaches to NLP \(N)29.7(atural Language P)29.7(r)6(ocessing\))]TJ T* 0.0831 Tw [(hav)5.8(e been pursued in the past fe)-5.9(w decades, but fe)-5.9(w ar)9.7(e as)]TJ T* 0.2963 Tw [(popular as the Link G)23.9(rammar parser)59.7(,)]TJ 7.15 0 0 7.15 515.1186 690.8293 Tm 0 Tc 0 Tw (1)Tj 11 0 0 11 524.7033 688.3574 Tm -0.0001 Tc 0.2963 Tw [(b)5.8(y)0( D)11.9(rs. D)5.8(aniel)]TJ -16.6094 -1.0909 TD 0.1866 Tw [(S)12.1(leator)59.7(, D)5.8(avy )44.9(T)119.9(emperley)84.9(, and J)29.7(ohn Laffer)-7.9(ty)84.9(. Rather than)]TJ T* 0.0448 Tw [(examine the basic context of a wor)13.8(d within a sentence, the)]TJ T* 0.1187 Tw [(Link P)41.9(arser is based on a model that wor)13.8(ds within a text)]TJ T* 0.025 Tw [(form links)39.7( with one another)59.7(.)]TJ 0 -2.1818 TD -0.0051 Tc 0.1728 Tw [(These links ar)9.7(e used not only to identify par)-7.9(ts of speech)]TJ 0 -1.0909 TD 0.0603 Tw [(\(nouns, v)5.8(erbs, and so on\), but also to describe in detail the)]TJ /F5 1 Tf T* 0 Tw (function)Tj /F1 1 Tf 3.3466 0 TD 0.0774 Tw [(of that wor)13.8(d)0( within the sentence. I)23.8(t)17.8()79.9(s)0( one thing to)]TJ -3.3466 -9.8182 TD 0.0044 Tw [(kno)11.9(w that a phrase consists of two adjectiv)5.7(es and two nouns)]TJ 0 -1.0909 TD 0.1879 Tw [( but what y)5.8(ou r)9.7(eally want to kno)11.9(w is which adjectiv)5.8(e)]TJ T* -0.0175 Tw [(modifies which noun. )44.8(The Link G)23.9(rammar does that for y)5.8(ou.)]TJ 0 -2.1818 TD -0.0001 Tc 0.214 Tw [(The Link G)23.9(rammar is based on a characteristic that its)]TJ 0 -1.0909 TD 0.1832 Tw [(cr)9.7(eators call )]TJ /F5 1 Tf 5.1331 0 TD 0 Tw (planarity)Tj /F1 1 Tf 3.3511 0 TD 0.1833 Tw [(. P)5.8(lanarity describes a phenomenon)]TJ -8.4842 -1.0909 TD -0.0072 Tw [(pr)9.7(esent in most natural languages, which is that if y)5.8(ou draw)]TJ T* 0.2675 Tw [(ar)5.8(cs betw)5.8(een r)9.7(elated wor)13.8(ds in a sentence \(for instance,)]TJ T* 0.3197 Tw [(betw)5.8(een an adjectiv)5.8(e and the noun it modifies\), y)5.8(our)]TJ T* 0.1745 Tw [(sentence is ungrammatical if ar)5.8(cs cr)5.8(oss one another)59.7(, and)]TJ 0 -10.9091 TD 0.0074 Tw [(grammatical if they don)69.8()79.9(t. )44.9(This is an o)15.8(v)5.9(ersimplification, but)]TJ 0 -1.0909 TD 0.025 Tw [(it)17.7()12(ll ser)-17.9(v)5.9(e)0( for our purposes.)]TJ 0 -2 TD 0.0118 Tw [(I)12(n)0( Link G)23.9(rammar v)5.8(e)0.1(rnacular)59.7(, a )]TJ /F5 1 Tf 12.3152 0 TD 0 Tw (linkage)Tj /F1 1 Tf 2.9061 0 TD 0.0118 Tw (is a single successful)Tj -15.2213 -1.0909 TD 0.1799 Tw (parse of a sentence: a set of links in which none of the)Tj T* 0.1759 Tw [(connecting ar)5.8(cs cr)5.8(oss. A sample parse of the sentence, )]TJ /F2 1 Tf 9 0 0 9 588.6013 198.3574 Tm 0 Tc 0 Tw (A)Tj -27.4001 -1.3333 TD -0.0001 Tc 0.3983 Tw [(camel is a horse designed by a committee)]TJ /F1 1 Tf 11 0 0 11 587.622 186.3574 Tm 0 Tw (is)Tj -22.3293 -1.0909 TD 0.025 Tw [(depicted in F)33.9(igur)9.7(e 1.)]TJ 0 -2.1818 TD 0.0518 Tw [(The primar)-17.9(y par)-7.9(ts of speech ar)9.7(e labeled with )]TJ /F2 1 Tf 9 0 0 9 537.9122 150.3574 Tm -0.0003 Tc 0 Tw (.n)Tj /F1 1 Tf 11 0 0 11 552.0299 150.3574 Tm -0.0002 Tc (and )Tj /F2 1 Tf 9 0 0 9 571.1627 150.3574 Tm -0.0003 Tc (.v)Tj /F1 1 Tf 11 0 0 11 585.2802 150.3574 Tm -0.0002 Tc (to)Tj 12 0 0 12 63 90.3543 Tm 0 Tc [(60)-1100(F)]TJ 10.44 0 0 10.44 94.2795 90.3543 Tm -0.0001 Tc (ALL)Tj 12 0 0 12 115.6277 90.3543 Tm 0 Tc (2000)Tj /F3 1 Tf 30.9897 0.0003 TD -0.0002 Tc 0.0255 Tw [(The P)47.6(erl J)35.7(our)-8(nal #19)]TJ ET 0 0 0 0 k 63 798 531 -37.5 re 587.395 90.357 m f* BT /F8 1 Tf 16 0 0 16 63 786.4766 Tm 0 0 0 1 k 0 Tc 0 Tw (P)Tj 13.92 0 0 13.92 71.3629 786.4766 Tm -0.0002 Tc (ARSING)Tj 16 0 0 16 126.8388 786.4766 Tm 0 Tc (N)Tj 13.92 0 0 13.92 139.3153 786.4766 Tm -0.0002 Tc [(A)81.6(TURAL)]TJ 16 0 0 16 196.8846 786.4766 Tm 0 Tc (L)Tj 13.92 0 0 13.92 206.0081 786.4766 Tm -0.0001 Tc [(ANGU)35.8(A)17.8(G)0.1(E)]TJ /F7 1 Tf 16 0 0 16 521.6869 786.4766 Tm -0.0002 Tc 0.0252 Tw (Dan Brian)Tj /F8 1 Tf 13.92 0 0 13.92 63 768.4766 Tm -0.0003 Tc 0 Tw (WITH)Tj 16 0 0 16 106.6731 768.4766 Tm 0 Tc (L)Tj 13.92 0 0 13.92 115.6301 768.4766 Tm -0.0002 Tc [(INGU)35.7(A)]TJ 16 0 0 16 160.3329 768.4766 Tm (::L)Tj 13.92 0 0 13.92 177.4462 768.4766 Tm -0.0003 Tc (INK)Tj 16 0 0 16 202.744 768.4766 Tm 0 Tc (P)Tj 13.92 0 0 13.92 211.107 768.4766 Tm -0.0002 Tc (ARSER)Tj ET /Cs10 CS 1 SCN 0 J 0 j 6 w 10 M []0 d 63 807 m 207 807 l S 0 0.03 0.3 0 k /GS1 gs 63.25 746.75 251.5 -53.5 re 253.173 768.477 m f* BT /F9 1 Tf 12 0 0 12 160.5981 730.1238 Tm 0 0 0 1 k /GS2 gs [(Resour)24.7(ces)]TJ /F1 1 Tf 9 0 0 9 72.5 716.1238 Tm -0.0001 Tc 0.0249 Tw [(Link)-250.1(G)24(rammar P)41.9(arser 4.1)-59.6(....................http://www)74.9(.link.cs.cmu.edu)]TJ 0 -1.3333 TD 0 Tc [(Lingua::LinkP)42(arser 1.01)-88.4(.......................................................CP)39.8(A)0.2(N)]TJ ET 0 0 0 1 K 0.5 w /GS1 gs 63.25 746.75 251.5 -53.5 re 304.52 704.124 m S 0 0 0 0 k /GS2 gs 63 134 531 -22.5 re 304.52 704.124 m f* BT 6 0 0 6 63 129.4981 Tm 0 0 0 1 k 0 Tw (1)Tj 9 0 0 9 66 127.5181 Tm -0.0001 Tc 0.025 Tw [(D)12.1(rs. S)11.9(leator and Laffer)-7.9(ty hail fr)5.8(om the computer science depar)-7.9(tment of Carnegie M)23.9(ellon U)35.8(niv)5.8(ersity)84.9(, and D)11.9(r)59.9(. )44.8(T)119.9(emperley fr)5.8(om the m)]TJ 51.1914 0 TD [(usic depar)-7.9(tment at)]TJ -51.5248 -1.1111 TD [(Eastman. I wanted to go to Eastman. I)23.8(t)0.1( didn)69.7()79.9(t)0( wor)5.8(k)0( out.)]TJ ET 63 139.5 m 594 139.5 l S 0 0 0 0 k /GS1 gs 207.65 350.14 385.85 -78.67 re 260.031 117.518 m f* Q q 1 i 207.65 350.14 385.85 -78.67 re W* n q 387.1941 0 0 79.9988 207.15 270.6412 cm /Im7 Do Q Q q 1 i 27 846 603 -783 re 0 873 m W n 0 873 684 -873 re W n 0 0 0 1 K 0 J 0 j 1 w 10 M []0 d 207.65 350.14 385.85 -78.67 re S 0 0 0 0 k /GS2 gs 207.15 365.92 386.85 -13.7 re f* BT /F8 1 Tf 11 0 0 11 207.148 357.9973 Tm 0 0 0 1 k -0.0001 Tc 0.0255 Tw [(F)21.9(igur)19.7(e 1. A sample parse, with links.)]TJ /F9 1 Tf 14 0 0 14 343.9083 562.4206 Tm -0.0102 Tc 0.0277 Tw [(Man)19.6(y)0.1( a)9.6(ppr)24.7(oaches to Natural Langua)14.7(g)14.7(e)]TJ 0.5121 -1.1429 TD [(Pr)24.7(ocessing ha)34.7(v)19.8(e)0( been pursued in the)]TJ 1.0384 -1.1429 TD [(past f)9.6(e)14.9(w decades,)-196(but f)9.6(e)14.9(w ar)19.6(e as)]TJ 0.3531 -1.1429 TD [(popular as the Link Grammar)99.7(.)]TJ ET 2 w 342 582 m 594 582 l S 0.667 w 342 579.33 m 594 579.33 l 342 504.85 m 594 504.85 l S 2 w 342 502.18 m 594 502.18 l S Q 0 0 0 0 k 1 i 37 874 191 -12 re 565.441 514.421 m f* BT /F2 1 Tf 8 0 0 8 39 864 Tm /Cs9 cs 1 scn -0.0004 Tc -0.0019 Tw (TPJ#19/9.26 9/27/00 10:35 AM Page 60)Tj ET 1 G 0 J 0 j 0.5 w 10 M []0 d 36 873 m 36 849 l 0 837 m 24 837 l 621 873 m 621 849 l 657 837 m 633 837 l 36 36 m 36 60 l 0 72 m 24 72 l 621 36 m 621 60 l 657 72 m 633 72 l S /Cs9 CS 1 SCN 0.25 w 36 873 m 36 849 l 0 837 m 24 837 l 621 873 m 621 849 l 657 837 m 633 837 l 36 36 m 36 60 l 0 72 m 24 72 l 621 36 m 621 60 l 657 72 m 633 72 l S 1 G 0.5 w 304.5 861 m 352.5 861 l 304.5 48 m 352.5 48 l 12 478.5 m 12 430.5 l 645 478.5 m 645 430.5 l 328.5 873 m 328.5 849 l 328.5 60 m 328.5 36 l 0 454.5 m 24 454.5 l 633 454.5 m 657 454.5 l 328.5 861 m 334.5 861 l 334.5 857.688 331.812 855 328.5 855 c 325.188 855 322.5 857.688 322.5 861 c 322.5 864.312 325.188 867 328.5 867 c 331.812 867 334.5 864.312 334.5 861 c 328.5 48 m 334.5 48 l 334.5 44.688 331.812 42 328.5 42 c 325.188 42 322.5 44.688 322.5 48 c 322.5 51.312 325.188 54 328.5 54 c 331.812 54 334.5 51.312 334.5 48 c 12 454.5 m 18 454.5 l 18 451.188 15.312 448.5 12 448.5 c 8.688 448.5 6 451.188 6 454.5 c 6 457.812 8.688 460.5 12 460.5 c 15.312 460.5 18 457.812 18 454.5 c 645 454.5 m 651 454.5 l 651 451.188 648.312 448.5 645 448.5 c 641.688 448.5 639 451.188 639 454.5 c 639 457.812 641.688 460.5 645 460.5 c 648.312 460.5 651 457.812 651 454.5 c S /Cs9 CS 1 SCN 0.25 w 304.5 861 m 352.5 861 l 304.5 48 m 352.5 48 l 12 478.5 m 12 430.5 l 645 478.5 m 645 430.5 l 328.5 873 m 328.5 849 l 328.5 60 m 328.5 36 l 0 454.5 m 24 454.5 l 633 454.5 m 657 454.5 l 328.5 861 m 334.5 861 l 334.5 857.688 331.812 855 328.5 855 c 325.188 855 322.5 857.688 322.5 861 c 322.5 864.312 325.188 867 328.5 867 c 331.812 867 334.5 864.312 334.5 861 c 328.5 48 m 334.5 48 l 334.5 44.688 331.812 42 328.5 42 c 325.188 42 322.5 44.688 322.5 48 c 322.5 51.312 325.188 54 328.5 54 c 331.812 54 334.5 51.312 334.5 48 c 12 454.5 m 18 454.5 l 18 451.188 15.312 448.5 12 448.5 c 8.688 448.5 6 451.188 6 454.5 c 6 457.812 8.688 460.5 12 460.5 c 15.312 460.5 18 457.812 18 454.5 c 645 454.5 m 651 454.5 l 651 451.188 648.312 448.5 645 448.5 c 641.688 448.5 639 451.188 639 454.5 c 639 457.812 641.688 460.5 645 460.5 c 648.312 460.5 651 457.812 651 454.5 c S endstream endobj 184 0 obj << /Type /XObject /Subtype /Image /Width 242 /Height 50 /BitsPerComponent 8 /ColorSpace 285 0 R /Length 1315 /Filter /FlateDecode >> stream HW [Flv$ЮDj3\[Ggtf jӼλ_3PB *TPB 3 `t^r JffQTaA04/~1=*7|wh (u:"v'}D)QxKd@tLt01}2!Dݎ:o+ a4g~7@G;v"f Tu{ۆQS X7x"NNDÚ1SqaR~Ӱ(a`^iKO]!q!ƍQˑ]Z#1aLjNAݲ-%y>pG;K BqL,19T }Uz\ PcAtDrL-n8̞^(In fd)/-ͫn0 xj(,OPowmGu4\>8cr"ZkC_P:#)ݽ茷LQid|s.RP<ڵUڠMUIڴ)}/JCbbr'UBklo&(,4)tr򉌏҂,XT?V=(UJSXʿB oQŨ(arދnP\[#vM^] eXQ _)e[ 0{xGM}'Ʌ>|:p|u:~[f.JWFH^U@gLJ eNi096WW 9ɸAl~ /oC*\)f19xNЍ&O̓S1Jr|;_+03C&DL<B |2.α I o,9.+ ':5{Lm5]W#-ƭ\SpS kT֜;}^+IûeߍZ܂_IZ8@8t95t5iR0^xb^ƒȚg TyB C#'d endstream endobj 185 0 obj << /Type /Page /Parent 497 0 R /Resources 186 0 R /Contents 187 0 R /Thumb 441 0 R /MediaBox [ 0 0 684 873 ] /CropBox [ 0 0 684 873 ] /Rotate 0 >> endobj 186 0 obj << /ProcSet [ /PDF /Text /ImageC /ImageI ] /Font << /F1 515 0 R /F2 518 0 R /F3 261 0 R /F8 268 0 R >> /XObject << /Im8 188 0 R /Im9 189 0 R >> /ExtGState << /GS1 523 0 R /GS2 521 0 R >> /ColorSpace << /Cs9 520 0 R /Cs18 287 0 R /Cs19 288 0 R >> >> endobj 187 0 obj << /Length 12788 >> stream 1 g /GS1 gs 0 873 m 0 873 l f q 1 i 27 846 603 -783 re 0 873 m W n 0 873 684 -873 re W n BT /F1 1 Tf 11 0 0 11 63 424.0503 Tm 0 0 0 1 k /GS2 gs -0.0001 Tc 0.0443 Tw [(indicate that these wor)13.8(ds ar)9.7(e nouns and v)5.8(erbs, r)9.7(espectiv)5.8(ely)84.9(.)]TJ 0 -1.0909 TD 0.0731 Tw [(The labels of the links betw)5.8(een wor)13.8(ds indicate the type of)]TJ T* -0.0257 Tw [(link. F)35.8(or example, the )]TJ /F2 1 Tf 9 0 0 9 157.7444 400.0503 Tm 0 Tc 0 Tw (J)Tj /F1 1 Tf 11 0 0 11 165.61 400.0503 Tm -0.0001 Tc -0.0257 Tw (connector in this sentence indicates)Tj -9.3282 -1.0909 TD -0.0014 Tw [(a connection betw)5.8(een pr)9.7(epositions and their objects; in this)]TJ T* 0.0139 Tw [(case, the v)5.8(erb )]TJ /F2 1 Tf 9 0 0 9 122.7955 376.0503 Tm -0.0002 Tc 0 Tw (designed)Tj /F1 1 Tf 11 0 0 11 168.8878 376.0503 Tm -0.0001 Tc 0.0139 Tw (is connected to )Tj /F2 1 Tf 9 0 0 9 236.0685 376.0503 Tm -0.0002 Tc 0.0334 Tw (by a committee)Tj /F1 1 Tf 11 0 0 11 312.25 376.0503 Tm 0 Tc 0 Tw (,)Tj -22.6591 -1.0909 TD -0.0001 Tc -0.0015 Tw [(identifying a pr)9.7(epositional phrase. )44.9(The sidebar )89.8(A)0.1( F)35.8(e)-5.9(w Link)]TJ T* 0.1768 Tw [(G)24(rammar Connectors)39.7( briefly summariz)5.8(es the links used)]TJ T* 0.025 Tw [(abo)15.8(v)5.9(e)0( and else)-5.9(wher)9.7(e in this ar)-7.9(ticle.)]TJ 0 -2.1818 TD 0.1683 Tw [(The Link P)41.9(arser 4.0 pr)5.8(o)15.9(vides 107 primar)-17.9(y)]TJ 0 -1.0909 TD 0.2252 Tw [(types of links \(indicated b)5.8(y)0( the upper)5.8(case)]TJ T* 0.0199 Tc 0.3739 Tw (letters\), with many additional subtypes)Tj T* -0.0001 Tc 0.2225 Tw [(fur)-7.9(ther detailing the r)9.7(elationship of wor)13.8(ds)]TJ T* 0.0199 Tc 0.3551 Tw [(\(indicated b)5.8(y)0( the lo)11.9(w)5.9(e)0.1(r)5.8(case characters\).)]TJ T* 0.551 Tw (While the accuracy of the parser is)Tj T* -0.0001 Tc 0.1043 Tw [(r)9.9(emar)5.8(kable, it is tailor)9.7(ed to ne)-5.9(wspaper-style)]TJ T* 0.0199 Tc 0.7817 Tw [(grammar)59.8(, and will fail with mor)9.7(e)]TJ T* -0.0001 Tc 0.025 Tw [(conv)5.8(ersational statements.)]TJ 0 -2.1818 TD 0.1427 Tw [(The inner wor)5.8(kings of the parser ar)9.7(e fairly)]TJ 0 -1.0909 TD 0.0094 Tc 0.3655 Tw (complex, but they use principles which)Tj T* -0.0001 Tc 0.0309 Tw [(might be familiar)59.7(. A link grammar considers)]TJ T* 0.1744 Tw [(a sentence to be pr)5.8(oper if it satisfies thr)9.7(ee)]TJ T* 0 Tw (conditions:)Tj 0 -2.1818 TD 0.1504 Tw [(1. P)5.8(lanarity: )44.8(The link ar)5.8(cs abo)15.8(v)5.9(e)0( wor)13.8(ds do)]TJ 27.4 61.6388 TD 0.025 Tw [(not cr)5.8(oss.)]TJ 0 -2.1818 TD 0.158 Tw [(2. Connectivity: )44.8(The links connect all of the wor)13.8(ds)]TJ 0 -1.0909 TD 0 Tw [(together)59.7(.)]TJ 0 -2.1818 TD 0.3315 Tw [(3. S)11.9(atisfaction: I)11.9(n)0.1(dividual linking r)9.7(equir)9.7(ements of)]TJ 0 -1.0909 TD 0.0249 Tw [(each wor)13.8(d ar)9.7(e satisfied.)]TJ 0 -2.1818 TD -0.0051 Tc 0.0838 Tw [(The parser uses a dictionar)-18(y that contains the linking)]TJ 0 -1.0909 TD 0.1393 Tw [(r)9.9(equir)9.7(ements of each wor)13.8(d. F)35.8(or example, the wor)13.8(ds)]TJ /F2 1 Tf 9 0 0 9 364.4005 682.0776 Tm 0 Tw (the)Tj /F1 1 Tf 11 0 0 11 380.4616 682.0776 Tm -0.005 Tc (, )Tj /F2 1 Tf 9 0 0 9 385.4443 682.0776 Tm -0.0052 Tc (chased)Tj /F1 1 Tf 11 0 0 11 417.5665 682.0776 Tm -0.005 Tc (, )Tj /F2 1 Tf 9 0 0 9 422.5491 682.0776 Tm -0.0052 Tc (dog)Tj /F1 1 Tf 11 0 0 11 438.6102 682.0776 Tm -0.037 Tw (, and )Tj /F2 1 Tf 9 0 0 9 461.5281 682.0776 Tm 0 Tw (cat)Tj /F1 1 Tf 11 0 0 11 479.8769 682.0776 Tm -0.037 Tw [(ar)9.7(e sho)11.9(wn belo)11.9(w with their)]TJ -10.4978 -15.2727 TD 0.0328 Tw [(linking r)9.7(equir)9.7(ements. )44.8(The )]TJ /F2 1 Tf 9 0 0 9 477.3905 514.0776 Tm 0 Tc 0 Tw (D)Tj /F1 1 Tf 11 0 0 11 485.8006 514.0776 Tm -0.0051 Tc 0.0328 Tw [(within the bo)5.8(x abo)15.8(v)5.9(e)-0.1( )]TJ /F2 1 Tf 9 0 0 9 577.8941 514.0776 Tm 0 Tw (the)Tj /F1 1 Tf 11 0 0 11 364.4005 502.0776 Tm -0.0184 Tw [(indicates that another wor)13.8(d must connect with )]TJ /F2 1 Tf 9 0 0 9 561.7668 502.0776 Tm 0 Tc 0 Tw (D)Tj /F1 1 Tf 11 0 0 11 569.6125 502.0776 Tm -0.0051 Tc -0.0184 Tw (to the)Tj -18.6556 -1.0909 TD 0.0813 Tw (right of )Tj /F2 1 Tf 9 0 0 9 400.1457 490.0776 Tm 0 Tw (the)Tj /F1 1 Tf 11 0 0 11 423.3867 490.0776 Tm 0.0813 Tw [(in or)13.8(der for the link r)9.7(equir)9.7(ements to be)]TJ -5.3624 -1.0909 TD 0.025 Tw [(satisfied for that wor)13.8(d.)]TJ 0 -2.1818 TD -0.0001 Tc 0.1137 Tw [(F)35.9(or these wor)13.8(ds to form a sentence, the parser must)]TJ 0 -1.0909 TD 0.0791 Tw [(find them in an or)13.8(der which satisfies the abo)15.8(v)5.9(e)0( thr)9.7(ee)]TJ T* -0.0054 Tw [(r)9.9(equir)9.7(ements. )14.8(When a wor)13.8(d has mor)9.7(e)0( than one r)5.8(o)12(w of)]TJ -2.0364 -1.0909 TD 0.0105 Tw [(connectors, only one side \(left or right\) of each r)5.8(o)12(w may be)]TJ T* 0.0565 Tw (connected \(e.g. )Tj /F2 1 Tf 9 0 0 9 410.3947 406.0776 Tm -0.0002 Tc 0 Tw (cat)Tj /F1 1 Tf 11 0 0 11 429.962 406.0776 Tm -0.0001 Tc 0.0565 Tw [(has a r)5.8(o)12(w )]TJ /F2 1 Tf 9 0 0 9 474.2334 406.0776 Tm 0 Tc 0 Tw (D)Tj /F1 1 Tf 11 0 0 11 483.0033 406.0776 Tm -0.0001 Tc 0.0564 Tw [(and a r)5.8(o)12(w )]TJ /F2 1 Tf 9 0 0 9 529.4285 406.0776 Tm -0.0002 Tc 0 Tw (O/S)Tj /F1 1 Tf 11 0 0 11 545.6245 406.0776 Tm 0 Tc 0.0565 Tw (, so )Tj /F2 1 Tf 9 0 0 9 564.0143 406.0776 Tm 0 Tw (D)Tj /F1 1 Tf 11 0 0 11 572.7843 406.0776 Tm -0.0001 Tc (must)Tj -20.9804 -1.0909 TD -0.0036 Tw (be connected along with either )Tj /F2 1 Tf 9 0 0 9 475.3093 394.0776 Tm 0 Tc 0 Tw (O)Tj /F1 1 Tf 11 0 0 11 483.418 394.0776 Tm -0.0002 Tc (or )Tj /F2 1 Tf 9 0 0 9 495.1219 394.0776 Tm 0 Tc (S)Tj /F1 1 Tf 11 0 0 11 500.5206 394.0776 Tm -0.0001 Tc -0.0036 Tw [(\). )14.9(When only one r)5.8(o)12(w)]TJ -14.411 -1.0909 TD 0.0159 Tw [(exists on a single lev)5.8(el \(e.g. )]TJ /F2 1 Tf 9 0 0 9 458.7521 382.0776 Tm -0.0002 Tc 0 Tw (cat)Tj /F1 1 Tf 11 0 0 11 477.8724 382.0776 Tm -0.0001 Tc (has )Tj /F2 1 Tf 9 0 0 9 494.4553 382.0776 Tm 0 Tc (D)Tj /F1 1 Tf 11 0 0 11 499.854 382.0776 Tm -0.0001 Tc 0.0159 Tw (\), one connector must)Tj -14.3504 -1.0909 TD 0.0471 Tw [(be linked. )44.9(The meaning of each link used her)9.7(e is indicated)]TJ T* -0.0123 Tw [(abo)15.8(v)5.9(e. )44.8(Thus, the follo)11.9(wing arrangement is corr)9.7(ect: )]TJ /F2 1 Tf 9 0 0 9 556.4746 358.0776 Tm -0.0002 Tc -0.0295 Tw (The cat)Tj -23.8305 -1.3333 TD 0.06 Tw (chased the dog)Tj /F1 1 Tf 11 0 0 11 418.6613 346.0776 Tm 0 Tc 0 Tw (.)Tj -6.9692 -2.1818 TD -0.0001 Tc 0.2295 Tw [(The unused connectors ar)9.7(e gray)5.8(ed out in this example.)]TJ 12 0 0 12 517.3723 90.3543 Tm 0 Tc 0 Tw (F)Tj 10.44 0 0 10.44 523.4518 90.3543 Tm -0.0001 Tc (ALL)Tj 12 0 0 12 544.7999 90.3543 Tm 0 Tc 0.025 Tw [(2000 61)]TJ /F3 1 Tf -40.15 0 TD -0.0002 Tc 0.0255 Tw [(The P)47.6(erl J)35.7(our)-8(nal #19)]TJ ET 0 0.03 0.3 0 k 63 810 289.4 -366.03 re 162.892 90.354 m f* BT /F8 1 Tf 11 0 0 11 67 797.0776 Tm 0 0 0 1 k -0.0001 Tc [(A F)35.8(ew Link G)23.9(rammar Connectors.)]TJ /F2 1 Tf 9 0 0 9 67 776.0776 Tm 0 Tc 0 Tw (A)Tj /F1 1 Tf 11 0 0 11 72.3987 776.0776 Tm -0.0001 Tc 0.025 Tw [(: connects pr)9.7(e-noun \()59.8(attributiv)5.8(e)29.7(\) adjectiv)5.8(es to follo)11.9(wing nouns:)]TJ -0.4908 -1.0909 TD [()-17.7(The BIG BL)-12(A)12.1(CK UGL)69.8(Y DOG chased me.)]TJ /F2 1 Tf 9 0 0 9 67 745.0776 Tm -0.0003 Tc 0 Tw (AN)Tj /F1 1 Tf 11 0 0 11 77.7974 745.0776 Tm -0.0001 Tc 0.025 Tw [(: connects noun-modifiers to follo)11.9(wing nouns:)]TJ -0.9816 -1.0909 TD [()-17.7(The )44.7(T)64.9(AX PR)35.8(OPOSAL was r)9.7(ejected.)]TJ /F2 1 Tf 9 0 0 9 67 714.0776 Tm 0 Tc 0 Tw (C)Tj /F1 1 Tf 11 0 0 11 72.3987 714.0776 Tm -0.0001 Tc 0.025 Tw [(: connects conjunctions and some v)5.8(erbs to subjects of clauses:)]TJ -0.4908 -1.0909 TD [(H)17.8(e SAID HE was sorr)-17.9(y)84.9(.)0.1()]TJ /F2 1 Tf 9 0 0 9 67 683.0776 Tm 0 Tc 0 Tw (D)Tj /F1 1 Tf 11 0 0 11 72.3987 683.0776 Tm -0.0001 Tc 0.025 Tw (: connects determiners to nouns:)Tj -0.4908 -1.0909 TD [()-17.7(THE DOG chased A CA)69.8(T and SOME BIRDS.)]TJ /F2 1 Tf 9 0 0 9 67 652.0776 Tm 0 Tc 0 Tw (G)Tj /F1 1 Tf 11 0 0 11 72.3987 652.0776 Tm -0.0001 Tc 0.025 Tw [(: connects pr)5.8(oper noun wor)13.8(ds together in series:)]TJ -0.4908 -1.0909 TD [(GEOR)35.8(GE HERBER)44.9(T )14.8(W)74.9(ALKER B)9.7(USH is her)9.7(e.)]TJ /F2 1 Tf 9 0 0 9 67 621.0776 Tm 0 Tc 0 Tw (J)Tj /F1 1 Tf 11 0 0 11 72.3987 621.0776 Tm -0.0001 Tc 0.025 Tw [(: connects pr)9.7(epositions with their objects:)]TJ -0.4908 -1.0909 TD [()-17.7(The man )14.8(WITH the HA)69.8(T is her)9.7(e.)]TJ /F2 1 Tf 9 0 0 9 67 590.0776 Tm 0 Tc 0 Tw (M)Tj /F1 1 Tf 11 0 0 11 72.3987 590.0776 Tm -0.0001 Tc 0.025 Tw [(: connects nouns to v)5.8(arious kinds of post-noun modifiers)]TJ -0.4908 -1.0909 TD [(\(pr)9.7(epositional phrases, par)-7.9(ticiple modifiers, and so on\):)]TJ T* [()-17.7(The MAN )14.8(WITH the hat.)]TJ /F2 1 Tf 9 0 0 9 67 547.0776 Tm 0 Tc 0 Tw (O)Tj /F1 1 Tf 11 0 0 11 72.3987 547.0776 Tm -0.0001 Tc 0.025 Tw [(: connects transitiv)5.8(e v)5.8(erbs to their dir)9.7(ect or indir)9.7(ect objects:)]TJ -0.4908 -1.0909 TD [(I GA)79.8(VE HIM the BOOK.)]TJ /F2 1 Tf 9 0 0 9 67 516.0776 Tm 0 Tc 0 Tw (S)Tj /F1 1 Tf 11 0 0 11 72.3987 516.0776 Tm -0.0001 Tc 0.025 Tw [(: connects subject nouns to finite v)5.8(e)0(rbs:)]TJ -0.4908 -1.0909 TD [()-17.7(The DOG CHASED the cat.)]TJ /F2 1 Tf 9 0 0 9 67 485.0776 Tm 0 Tc 0 Tw (W)Tj /F1 1 Tf 11 0 0 11 72.3987 485.0776 Tm -0.0001 Tc 0.025 Tw (: connects subjects of main clauses to the beginning of the)Tj -0.4908 -1.0909 TD [(sentence, or the )39.7(wall)11.9(.)]TJ /F2 1 Tf 9 0 0 9 67 454.0776 Tm 0 Tc 0 Tw (X)Tj /F1 1 Tf 11 0 0 11 72.3987 454.0776 Tm -0.0001 Tc 0.025 Tw [(: connects punctuation symbols to wor)13.8(ds or each other)59.7(.)]TJ ET /GS1 gs 365.41 652.24 228.09 -122.8 re 308.915 454.078 m f* Q q 1 i 365.41 652.24 228.09 -122.8 re W* n q 228.7965 0 0 121.5981 365.15 530.9019 cm /Im8 Do Q Q q 1 i 27 846 603 -783 re 0 873 m W n 0 873 684 -873 re W n 0 0 0 1 K 0 J 0 j 1 w 10 M []0 d 365.41 652.24 228.09 -122.8 re S BT /F8 1 Tf 11 0 0 11 364.9078 661.2426 Tm 0 0 0 1 k /GS2 gs -0.0001 Tc 0.0255 Tw [(F)21.9(igur)19.7(e 2. S)11.9(o)0(me linking r)19.7(equir)19.7(ements.)]TJ ET 0 0 0 0 k /GS1 gs 263.07 293.41 330.43 -175.91 re 527.843 661.243 m f* Q q 329.595 0 0 174.3973 263.57 118.5126 cm /Im9 Do Q q 1 i 27 846 603 -783 re 0 873 m W n 0 873 684 -873 re W n 0 0 0 1 K 0 J 0 j 1 w 10 M []0 d 263.07 293.41 330.43 -175.91 re S BT /F8 1 Tf 11 0 0 11 262.5701 302.4099 Tm 0 0 0 1 k /GS2 gs -0.0001 Tc 0.0255 Tw [(F)21.9(igur)19.7(e 3. Linking r)19.7(equir)19.7(ements and inferr)19.7(ed links.)]TJ ET Q 0 0 0 0 k /GS2 gs 1 i 37 874 191 -12 re 482.009 302.41 m f* BT /F2 1 Tf 8 0 0 8 39 864 Tm /Cs9 cs 1 scn -0.0004 Tc -0.0019 Tw (TPJ#19/9.26 9/27/00 10:35 AM Page 61)Tj ET 1 G 0 J 0 j 0.5 w 10 M []0 d 36 873 m 36 849 l 0 837 m 24 837 l 621 873 m 621 849 l 657 837 m 633 837 l 36 36 m 36 60 l 0 72 m 24 72 l 621 36 m 621 60 l 657 72 m 633 72 l S /Cs9 CS 1 SCN 0.25 w 36 873 m 36 849 l 0 837 m 24 837 l 621 873 m 621 849 l 657 837 m 633 837 l 36 36 m 36 60 l 0 72 m 24 72 l 621 36 m 621 60 l 657 72 m 633 72 l S 1 G 0.5 w 304.5 861 m 352.5 861 l 304.5 48 m 352.5 48 l 12 478.5 m 12 430.5 l 645 478.5 m 645 430.5 l 328.5 873 m 328.5 849 l 328.5 60 m 328.5 36 l 0 454.5 m 24 454.5 l 633 454.5 m 657 454.5 l 328.5 861 m 334.5 861 l 334.5 857.688 331.812 855 328.5 855 c 325.188 855 322.5 857.688 322.5 861 c 322.5 864.312 325.188 867 328.5 867 c 331.812 867 334.5 864.312 334.5 861 c 328.5 48 m 334.5 48 l 334.5 44.688 331.812 42 328.5 42 c 325.188 42 322.5 44.688 322.5 48 c 322.5 51.312 325.188 54 328.5 54 c 331.812 54 334.5 51.312 334.5 48 c 12 454.5 m 18 454.5 l 18 451.188 15.312 448.5 12 448.5 c 8.688 448.5 6 451.188 6 454.5 c 6 457.812 8.688 460.5 12 460.5 c 15.312 460.5 18 457.812 18 454.5 c 645 454.5 m 651 454.5 l 651 451.188 648.312 448.5 645 448.5 c 641.688 448.5 639 451.188 639 454.5 c 639 457.812 641.688 460.5 645 460.5 c 648.312 460.5 651 457.812 651 454.5 c S /Cs9 CS 1 SCN 0.25 w 304.5 861 m 352.5 861 l 304.5 48 m 352.5 48 l 12 478.5 m 12 430.5 l 645 478.5 m 645 430.5 l 328.5 873 m 328.5 849 l 328.5 60 m 328.5 36 l 0 454.5 m 24 454.5 l 633 454.5 m 657 454.5 l 328.5 861 m 334.5 861 l 334.5 857.688 331.812 855 328.5 855 c 325.188 855 322.5 857.688 322.5 861 c 322.5 864.312 325.188 867 328.5 867 c 331.812 867 334.5 864.312 334.5 861 c 328.5 48 m 334.5 48 l 334.5 44.688 331.812 42 328.5 42 c 325.188 42 322.5 44.688 322.5 48 c 322.5 51.312 325.188 54 328.5 54 c 331.812 54 334.5 51.312 334.5 48 c 12 454.5 m 18 454.5 l 18 451.188 15.312 448.5 12 448.5 c 8.688 448.5 6 451.188 6 454.5 c 6 457.812 8.688 460.5 12 460.5 c 15.312 460.5 18 457.812 18 454.5 c 645 454.5 m 651 454.5 l 651 451.188 648.312 448.5 645 448.5 c 641.688 448.5 639 451.188 639 454.5 c 639 457.812 641.688 460.5 645 460.5 c 648.312 460.5 651 457.812 651 454.5 c S endstream endobj 188 0 obj << /Type /XObject /Subtype /Image /Width 143 /Height 76 /BitsPerComponent 8 /ColorSpace 287 0 R /Length 821 /Filter /FlateDecode >> stream H W0ǓPP) !*y ( >X7V1Sn74?6g 7HjtO}8ǹqePE^<QڏX$f&V{3Dx4('d$8S͚FT2RyL=.?;h*4is t ge3Z=Zt"l{827F׮geGx { t Gc)on29?Dmq^n;4cvq4$")hn࢜&F07i`N i FChhhJKl6O\`o\F" ٘368k|>)ƲJ'38"b$ :i A3C*rڴ5q)1)&t1s*/4AH5%C780*i+Ւ]+j$v+^v2QX{EfkYBLƋeiGF[UIw4 k_ ( endstream endobj 189 0 obj << /Type /XObject /Subtype /Image /Width 206 /Height 109 /BitsPerComponent 8 /ColorSpace 288 0 R /Length 1809 /Filter /FlateDecode >> stream H엉EK# dS ]jJ$F(AZE+H=-IhJXHg6i3$gf̾7yfrespL=QgVx{ԪnOF^5Z{V QQnϺE}kWCqoݚ(@' Olz}rp*cpw?h 6gZl1ϊN3!ܖhIZD2z6JNXDҲb؉;d52rÎ䘥a . ly3Ǔz#i?s9Cg 1zz4Vn lS?δ4FS3 @ ۚ&͡Ɯt 1Yl)eHԸ򘮄OS syPx$| G}ֹP@"1ɠW/݉wl]*?iFѫ<Mtb Ft{ MWخ `qnQ}9)ר1ƥqi\ƥiZ'^{4o74;ַF=wjww'M3y㎼Y6dZ:~7#9>RčMVBhO=o>Ug*hhyz[˛ LZd Dɝs; %oNhf|y7U4v|4gڼӸɯ+:ٞmjy3[JN;ݧ}w95ͱZΧG4'q 61iPl\J~\friԵYl:H+# 9Nh4ʯ4{24YMhjK_GikVhjk+4}BE3I+aΛU獺6Ng? R[48=T _sa]NQ[ҜL_8N} hjV4SҨR-Ҹ4.Kزy 4N/+ris4՗ӘeA]1NsK4f~iY~4_Gile] .KҸ4.GwhZUVddE"$ڟUr{~4m{k&H Q 5Aޣe-d s ?"9]7m~ L#"҂dQF T@\D ɐ.6J|' YsQ^,YE [Q"6GLaVmJʄzP34_YtR)[ 35Kl #8_L5͍e@eBy4eAiETΒˆ4vVhxBSa u> dvz۸$}'M>:[R|I"= Ṭ&4\uS 0"`{ endstream endobj 190 0 obj << /Type /Page /Parent 497 0 R /Resources 191 0 R /Contents 192 0 R /Thumb 443 0 R /MediaBox [ 0 0 684 873 ] /CropBox [ 0 0 684 873 ] /Rotate 0 >> endobj 191 0 obj << /ProcSet [ /PDF /Text ] /Font << /F1 515 0 R /F2 518 0 R /F3 261 0 R /F5 262 0 R /F8 268 0 R >> /ExtGState << /GS1 523 0 R /GS2 521 0 R >> /ColorSpace << /Cs9 520 0 R >> >> endobj 192 0 obj << /Length 15268 >> stream 1 g /GS1 gs 0 873 m 0 873 l f q 1 i 27 846 603 -783 re 0 873 m W n 0 873 684 -873 re W n BT /F1 1 Tf 11 0 0 11 63 802.0776 Tm 0 0 0 1 k /GS2 gs -0.0001 Tc 0.2202 Tw [(S)12.1(ince our second )]TJ /F2 1 Tf 9 0 0 9 144.7615 802.0776 Tm -0.0002 Tc 0 Tw (the)Tj /F1 1 Tf 11 0 0 11 166.129 802.0776 Tm -0.0001 Tc 0.2202 Tw (connects to )Tj /F2 1 Tf 9 0 0 9 222.1666 802.0776 Tm -0.0002 Tc 0 Tw (dog)Tj /F1 1 Tf 11 0 0 11 243.5341 802.0776 Tm -0.0001 Tc 0.2201 Tw [(as a determiner)59.7(,)]TJ /F2 1 Tf 9 0 0 9 63 790.0776 Tm -0.0002 Tc 0 Tw (chased)Tj /F1 1 Tf 11 0 0 11 99.2117 790.0776 Tm -0.0001 Tc 0.0973 Tw (actually spans the length, connecting to )Tj /F2 1 Tf 9 0 0 9 276.1428 790.0776 Tm -0.0002 Tc 0 Tw (dog)Tj /F1 1 Tf 11 0 0 11 292.3388 790.0776 Tm 0 Tc 0.0823 Tw [(. Y)94(o)0.2(u)]TJ -20.849 -1.0909 TD -0.0001 Tc 0.1104 Tw [(can mentally shuffle these wor)13.9(ds to see that )]TJ /F2 1 Tf 9 0 0 9 258.8677 778.0776 Tm -0.0002 Tc 0 Tw (cat)Tj /F1 1 Tf 11 0 0 11 279.0276 778.0776 Tm (and )Tj /F2 1 Tf 9 0 0 9 298.804 778.0776 Tm (dog)Tj /F1 1 Tf 11 0 0 11 63 766.0776 Tm -0.0001 Tc 0.04 Tw [(could be swapped, and likely would be if our pr)5.8(ogram had)]TJ T* 0.3168 Tw [(any semantic kno)11.9(wledge. M)23.9(o)15.9(ving other wor)13.9(ds ar)5.8(ound,)]TJ T* 0.1154 Tw [(ho)11.9(w)5.9(e)0(v)5.8(e)0.1(r)59.7(,)0( will br)9.7(eak the link criterion and deem the parse)]TJ T* 0 Tw (ungrammatical.)Tj 0 -2.1818 TD 0.1954 Tw [(All of these r)9.7(equir)9.7(ements ar)9.7(e stor)9.7(ed in the Link P)41.9(a)0.1(rser)19.7()79.9(s)]TJ 0 -1.0909 TD -0.011 Tw [(dictionar)-17.9(y files. )44.9(The files use a link dictionar)-17.9(y language)29.7( to)]TJ T* 0.037 Tw [(list the r)9.7(equir)9.7(ements for each wor)13.9(d, and ar)9.7(e themselv)5.8(es an)]TJ T* 0.0149 Tc 0.36 Tw [(inter)9.7(esting study in pattern r)9.7(epr)9.7(esentation. A highly)]TJ T* -0.0001 Tc 0.175 Tw [(optimiz)5.8(ed custom algorithm pr)5.8(ocesses the data in these)]TJ T* 0.2476 Tw [(files, analyzing the possible links. )44.8(This algorithm is y)5.8(e)0(t)]TJ T* 0.025 Tw [(another fascinating study in and of itself)15.8(.)]TJ 7.15 0 0 7.15 237.7632 636.5496 Tm 0 Tc 0 Tw (2)Tj 11 0 0 11 63 610.0776 Tm -0.0051 Tc 0.2179 Tw [(B)5.8(ecause the r)9.7(esear)5.8(chers at CMU had the gener)5.7(osity and)]TJ T* 0.0149 Tc 0.4117 Tw [(intelligence to make their pr)5.8(oject r)9.7(esear)5.8(ch open to)]TJ T* -0.0051 Tc 0.1576 Tw [(dev)5.8(elopers like us, w)5.8(e)0( can examine the ingenuity of their)]TJ T* 0.0467 Tw [(methods. )14.8(W)77.8(e)0( can use and modify their w)5.7(ell-conceiv)5.8(ed AP)11.9(I.)]TJ T* -0.0374 Tw [(W)77.8(e)0( can extend and combine the functionality of their system)]TJ T* 0.005 Tw [(with that of other language pr)5.7(ocessing technologies. And, of)]TJ T* 0.025 Tw [(course, P)53.9(erl makes it all possible, practical, and inevitable.)]TJ /F8 1 Tf 12 0 0 12 63 512.0776 Tm 0 Tc 0 Tw (L)Tj 10.44 0 0 10.44 69.9577 512.0776 Tm 0.0228 Tc [(INGU)35.7(A)]TJ 12 0 0 12 104.6846 512.0776 Tm 0.0198 Tc (::L)Tj 10.44 0 0 10.44 118.2395 512.0776 Tm 0.0227 Tc (INK)Tj 12 0 0 12 137.9327 512.0776 Tm 0 Tc (P)Tj 10.44 0 0 10.44 144.4449 512.0776 Tm 0.0228 Tc (ARSER)Tj /F1 1 Tf 11 0 0 11 63 490.0776 Tm -0.0001 Tc 0.2691 Tw [(The Link G)23.9(rammar parser itself is a complex piece of)]TJ T* 0.0652 Tw [(softwar)9.7(e implementing a complex theor)-17.9(y of language. )44.8(The)]TJ T* 0.0667 Tw [(P)54(erl module Lingua::LinkP)41.9(arser dir)9.7(ectly embeds the parser)]TJ T* -0.0248 Tw [(AP)11.9(I, pr)5.8(o)15.9(viding an object-oriented inter)-7.9(face that y)5.8(ou can use)]TJ T* 0.3638 Tw [(fr)5.8(om y)5.8(our P)53.9(e)0.1(rl pr)5.8(ograms. O)5.8(bjects may be cr)9.7(eated to)]TJ T* 0.1286 Tw [(r)9.9(epr)9.7(esent sentences, linkages, links, individual wor)13.8(ds, and)]TJ T* -0.0349 Tw [(the parser itself)15.8(. As an example, consider the follo)11.9(wing code:)]TJ /F2 1 Tf 7 0 0 7 70.6979 398.0776 Tm -0.1102 Tc 0.06 Tw [(use Lingua::LinkParser;)]TJ 0 -1.1429 TD (use strict;)Tj 0 -2.2857 TD -0.1101 Tc [(my $parser = new Lingua::LinkParser; # create the parser)]TJ 0 -1.1429 TD [(my $text = "Moses supposes his toses are roses.";)]TJ 0 -2.2857 TD [(my $sentence = $parser->create_sentence\($text\); # parse the sentence)]TJ 0 -1.1429 TD [(my $linkage = $sentence->linkage\(1\); # use the first linkage)]TJ 0 -2.2857 TD [(print $parser->get_diagram\($linkage\); # print it out)]TJ /F1 1 Tf 11 0 0 11 63 302.0776 Tm -0.0001 Tc 0.025 Tw (This code will output:)Tj /F2 1 Tf 7 0 0 7 81.4756 278.0776 Tm 0 Tw (+-------------------------Xp------------------------+)Tj 0 -1.7143 TD -0.0002 Tc [(|)-9597.6(+------Ce------+)-11397.3(|)]TJ T* (+---Wd--+---Ss---+)Tj 14.5764 0 TD -0.0152 Tc [(+--Dmc--+--Spx--+--Opt-+)-2599.6(|)]TJ -14.7364 -1.7143 TD 0.0198 Tc [(|)59.9( |)59.9( |)59.9( |)-4069(|)85( )25( )25( )25( )25( )25( )25( )25(|)85( )25( )25( )25( )25( )25( )25(|)-2534.7(|)]TJ -2.4794 -1.7143 TD -0.0001 Tc 0.0599 Tw [(LEFT-WALL Moses supposes.v his toses[!].n are.v roses.n .)]TJ /F1 1 Tf 11 0 0 11 63 206.0776 Tm 0.1662 Tw [(W)9.7(ithout delving into all the details, this diagram r)9.7(e)0(v)5.8(eals)]TJ 0 -1.0909 TD 0.1324 Tw [(some inter)9.7(esting things about the parser)59.7(. F)33.9(irst, )]TJ /F2 1 Tf 9 0 0 9 271.8105 194.0776 Tm -0.0002 Tc 0 Tw (supposes)Tj /F1 1 Tf 11 0 0 11 63 182.0776 Tm (and )Tj /F2 1 Tf 9 0 0 9 83.3611 182.0776 Tm (are)Tj /F1 1 Tf 11 0 0 11 104.1057 182.0776 Tm -0.0001 Tc [(hav)5.8(e )]TJ /F2 1 Tf 9 0 0 9 127.8023 182.0776 Tm 0 Tc (v)Tj /F1 1 Tf 11 0 0 11 137.7496 182.0776 Tm -0.0001 Tc 0.1635 Tw [(labels, indicating that they)29.7()69.9(r)9.9(e v)5.8(erbs. )44.8(The)]TJ -6.7954 -1.0909 TD -0.0002 Tc 0 Tw [(wor)13.7(d )]TJ /F2 1 Tf 9 0 0 9 87.5781 170.0776 Tm (roses)Tj /F1 1 Tf 11 0 0 11 117.453 170.0776 Tm -0.0001 Tc 0.012 Tw (is labeled )Tj /F2 1 Tf 9 0 0 9 159.275 170.0776 Tm 0 Tc 0 Tw (n)Tj /F1 1 Tf 11 0 0 11 167.5552 170.0776 Tm -0.0001 Tc 0.012 Tw (for noun, as is )Tj /F2 1 Tf 9 0 0 9 230.9097 170.0776 Tm -0.0002 Tc 0 Tw (toses)Tj /F1 1 Tf 11 0 0 11 257.9031 170.0776 Tm -0.0001 Tc -0.0329 Tw (. The )Tj /F2 1 Tf 9 0 0 9 283.2009 170.0776 Tm -0.0002 Tc 0 Tw ([!])Tj /F1 1 Tf 11 0 0 11 302.2785 170.0776 Tm (tag)Tj -21.7526 -1.0909 TD -0.0001 Tc 0.1245 Tw (next to )Tj /F2 1 Tf 9 0 0 9 98.2151 158.0776 Tm -0.0002 Tc 0 Tw (toses)Tj /F1 1 Tf 11 0 0 11 129.328 158.0776 Tm -0.0001 Tc 0.1245 Tw [(indicates that the parser isn)69.8()79.9(t)0( familiar with)]TJ 19.3338 58.5454 TD 0.0026 Tw [(this wor)13.8(d, which usually means that it isn)69.7()79.9(t)0( a wor)13.8(d at all. S)11.9(o)]TJ 0 -1.0909 TD 0.0371 Tw [(ev)5.8(en with a wor)13.8(d it)17.7()79.9(s)-0.1( nev)5.8(er seen befor)9.7(e, the Link G)23.9(rammar)]TJ T* 0.025 Tw [(can identify the par)-7.9(t of speech.)]TJ 0 -2.1818 TD 0.0296 Tw [(The diagrams help us understand the link grammar)59.7(, but to)]TJ 0 -1.0909 TD 0.0071 Tw [(use the information within a pr)5.8(ogram r)9.7(equir)9.7(es access to the)]TJ T* 0.0981 Tw [(links themselv)5.8(es. Continuing with the pr)5.8(ogram abo)15.8(v)5.9(e, w)5.8(e)]TJ T* 0.1366 Tw [(will extract fr)5.8(om the )]TJ /F2 1 Tf 9 0 0 9 437.0447 718.0776 Tm -0.0002 Tc 0 Tw ($linkage)Tj /F1 1 Tf 11 0 0 11 484.4875 718.0776 Tm -0.0001 Tc 0.1367 Tw (object an array of )Tj /F2 1 Tf 9 0 0 9 567.0067 718.0776 Tm -0.0002 Tc 0 Tw ($word)Tj /F1 1 Tf 11 0 0 11 342 706.0776 Tm -0.0001 Tc 0.3056 Tw [(objects. )44.9(These will spring into existence, along with a)]TJ /F2 1 Tf 9 0 0 9 342 694.0776 Tm -0.0002 Tc 0 Tw (links\(\))Tj /F1 1 Tf 11 0 0 11 382.6009 694.0776 Tm -0.0001 Tc 0.0055 Tw [(method to r)9.7(eturn an array of )]TJ /F2 1 Tf 9 0 0 9 507.2512 694.0776 Tm -0.0002 Tc 0 Tw ($link)Tj /F1 1 Tf 11 0 0 11 537.0547 694.0776 Tm -0.0001 Tc -0.0094 Tw [(objects. W)77.8(ell,)]TJ -17.7322 -1.0909 TD 0.025 Tw (just watch:)Tj /F2 1 Tf 7 0 0 7 360.4756 664.0776 Tm -0.0002 Tc 0.06 Tw (my @words = $linkage->words;)Tj 0 -1.1429 TD [(foreach my $word \(@words\) {)]TJ 2.6394 -1.1429 TD (print "\\"", $word->text, "\\"\\n";)Tj T* -0.0001 Tc [(foreach my $link \($word->links\) {)]TJ 2.6394 -1.1429 TD [(print " link type '", $link->linklabel, )]TJ T* [("' to word '", $link->linkword, "'\\n";)]TJ -2.6394 -1.1428 TD 0 Tc 0 Tw (})Tj -2.6394 -1.1429 TD (})Tj /F1 1 Tf 11 0 0 11 342 584.0776 Tm -0.0001 Tc 0.025 Tw [(An ex)11.9(cerpt fr)5.8(om the output:)]TJ /F2 1 Tf 7 0 0 7 360.4756 564.0776 Tm -0.0002 Tc 0 Tw ("Moses")Tj 1.3197 -1.1429 TD -0.0001 Tc 0.0599 Tw [(link type 'Wd' to word '0:LEFT-WALL')]TJ T* [(link type 'Ss' to word '2:supposes.v')]TJ -1.3197 -1.1429 TD -0.0002 Tc 0 Tw ("supposes.v")Tj 1.3197 -1.1429 TD -0.0001 Tc 0.0599 Tw [(link type 'Ss' to word '1:Moses')]TJ T* [(link type 'Ce' to word '4:toses[!]')]TJ -1.3197 -1.1429 TD -0.0002 Tc 0 Tw ("his")Tj 1.3197 -1.1429 TD -0.0001 Tc 0.0599 Tw [(link type 'Dmc' to word '4:toses[!]')]TJ -1.3197 -1.1429 TD -0.0002 Tc 0 Tw ("toses[!]")Tj 1.3197 -1.1429 TD -0.0001 Tc 0.0599 Tw [(link type 'Ce' to word '2:supposes.v')]TJ T* [(link type 'Dmc' to word '3:his')]TJ T* [(link type 'Spx' to word '5:are.v')]TJ /F1 1 Tf 11 0 0 11 342 452.0776 Tm 0.2257 Tw [(Kno)11.9(wing the par)-7.9(t of speech and linkages of each wor)13.8(d)]TJ 0 -1.0909 TD 0.0347 Tw [(allo)11.9(ws us to use grammatical constr)-7.9(ucts in a pr)5.8(ogram. Let)17.7()79.9(s)]TJ T* 0.025 Tw (write one.)Tj /F8 1 Tf 12 0 0 12 342 402.0776 Tm 0 Tc 0 Tw (I)Tj 10.44 0 0 10.44 346.4851 402.0776 Tm 0.0228 Tc [(RREGUL)-12.2(AR)]TJ 12 0 0 12 406.6379 402.0776 Tm 0 Tc (R)Tj 10.44 0 0 10.44 414.747 402.0776 Tm 0.0228 Tc [(EGUL)-12.2(AR)]TJ 12 0 0 12 460.7277 402.0776 Tm 0 Tc (E)Tj 10.44 0 0 10.44 467.9257 402.0776 Tm 0.0228 Tc (XPRESSIONS)Tj 12 0 0 12 532.0117 402.0776 Tm 0 Tc (,)Tj -15.8343 -1.1667 TD (O)Tj 10.44 0 0 10.44 351.4941 388.0776 Tm 0.0228 Tc [(VERL)17.6(O)29.6(ADED)]TJ /F1 1 Tf 11 0 0 11 342 362.0776 Tm -0.0001 Tc -0.0225 Tw [(R)12.1(eturning to our original pr)5.8(oblem, ho)11.9(w can w)5.8(e)0( expand our)]TJ 0 -1.0909 TD 0.1887 Tw [(pattern matches to handle grammatical constr)-7.9(ucts rather)]TJ T* 0.054 Tw [(than simple combinations of metacharacters? )14.8(W)77.8(e)0( hav)5.8(e two)]TJ T* 0.047 Tw [(tools: the Link P)41.9(arser just described, and P)53.9(erl)11.9()79.9(s)-0.1( )]TJ /F5 1 Tf 18.4406 0 TD -0.0002 Tc 0 Tw [(o)12(v)5.9(er)11.8(loading)]TJ /F1 1 Tf 4.2185 0 TD 0 Tc (,)Tj -22.6591 -1.0909 TD -0.0001 Tc 0.0174 Tw [(which allo)11.9(ws us to r)9.7(edefine ho)11.9(w P)53.9(erl)11.9()79.9(s)0( operators operate. I)11.9(n)]TJ T* -0.0368 Tw [(par)-7.9(ticular)59.7(, w)5.8(e)29.7()69.9(r)9.9(e going to r)9.7(edefine ho)11.9(w P)53.9(e)0.1(rl pr)5.8(ocesses strings.)]TJ 0 -2.1818 TD 0.0007 Tc 0.3742 Tw [(N)29.7(o)0.1(rmally)84.9(, operator o)15.8(v)5.9(erloading is used to extend the)]TJ 0 -1.0909 TD -0.0001 Tc 0.0147 Tw (definition of common operators, like )Tj /F2 1 Tf 9 0 0 9 502.3828 266.0776 Tm 0 Tc 0 Tw (+)Tj /F1 1 Tf 11 0 0 11 507.7814 266.0776 Tm -0.0001 Tc 0.0147 Tw [(, so that y)5.8(ou can say)]TJ -15.071 -1.0909 TD 0.0199 Tc 0.6562 Tw (things like )Tj /F2 1 Tf 9 0 0 9 405.8688 254.0776 Tm 1.6025 Tw [($madness = $vanhalen_mp3 +)]TJ -7.0965 -1.3333 TD -0.0002 Tc 0 Tw ($vivaldi_mp3)Tj /F1 1 Tf 11 0 0 11 409.8092 242.0776 Tm -0.0001 Tc 0.025 Tw [(and o)15.8(v)5.9(erlay two MP3s as a r)9.7(esult. )]TJ -6.1645 -2.1818 TD 0.0884 Tw [(F)35.9(or our purposes, w)5.8(e)0( o)15.8(v)5.9(erload double-quote pr)5.8(ocessing in)]TJ 0 -1.0909 TD 0.0697 Tw [(the Lingua::LinkP)41.9(arser::Linkage package so that when y)5.8(o)0.1(u)]TJ T* 0.0024 Tc 0.3725 Tw (print a linkage object, it displays a linkage diagram.)Tj T* -0.0001 Tc 0.0606 Tw [(F)24(u)0.1(r)-7.9(t)0(hermor)9.7(e, to pattern match the data, w)5.8(e)0( need a format)]TJ T* 0.2391 Tw [(that is mor)9.7(e easily parsed, but still just a single string.)]TJ T* 0.2211 Tw [(S)12.1(omething like the follo)11.9(wing would be nice, listing the)]TJ 12 0 0 12 63 90.3543 Tm 0 Tc 0 Tw [(62)-1100(F)]TJ 10.44 0 0 10.44 94.2795 90.3543 Tm -0.0001 Tc (ALL)Tj 12 0 0 12 115.6277 90.3543 Tm 0 Tc (2000)Tj /F3 1 Tf 30.9897 0.0003 TD -0.0002 Tc 0.0255 Tw [(The P)47.6(erl J)35.7(our)-8(nal #19)]TJ ET 0 0 0 0 k 63 144 531 -33.63 re 587.395 90.357 m f* BT /F1 1 Tf 6 0 0 6 63 139.4981 Tm 0 0 0 1 k 0 Tc 0 Tw (2)Tj 9 0 0 9 66 137.5181 Tm -0.0001 Tc 0.025 Tw [(F)35.9(or those inter)9.7(ested, the algorithm is similar to the dynamic algorithm for triangulation of a conv)5.8(ex polygon, and has r)-7.9(unning )]TJ 49.2764 0 TD (time of O\(N)Tj 5.85 0 0 5.85 554.217 139.5305 Tm 0 Tc 0 Tw (3)Tj 9 0 0 9 557.142 137.5181 Tm -0.0001 Tc -0.0198 Tw (\). The)Tj -54.9047 -1.1111 TD 0.025 Tw [(general theor)-17.9(y)84.9(,)0( optimizations, and formalisms ar)9.7(e all detailed in the r)9.7(esear)5.8(chers)39.7( papers. F)35.8(rankly)84.9(, it)17.7()79.9(s)0( r)9.7(emar)5.8(kable that it r)-7.9(u)0(n)]TJ 47.2192 0 TD [(s as fast as it does giv)5.8(en the)]TJ -47.2192 -1.1111 TD [(computation r)9.7(equir)9.7(ed.)]TJ ET 0 0 0 1 K 0 J 0 j 0.5 w 10 M []0 d 63 149.5 m 594 149.5 l S Q 0 0 0 0 k 1 i 37 874 191 -12 re 141.407 117.518 m f* BT /F2 1 Tf 8 0 0 8 39 864 Tm /Cs9 cs 1 scn -0.0004 Tc -0.0019 Tw (TPJ#19/9.26 9/27/00 10:35 AM Page 62)Tj ET 1 G 0 J 0 j 0.5 w 10 M []0 d 36 873 m 36 849 l 0 837 m 24 837 l 621 873 m 621 849 l 657 837 m 633 837 l 36 36 m 36 60 l 0 72 m 24 72 l 621 36 m 621 60 l 657 72 m 633 72 l S /Cs9 CS 1 SCN 0.25 w 36 873 m 36 849 l 0 837 m 24 837 l 621 873 m 621 849 l 657 837 m 633 837 l 36 36 m 36 60 l 0 72 m 24 72 l 621 36 m 621 60 l 657 72 m 633 72 l S 1 G 0.5 w 304.5 861 m 352.5 861 l 304.5 48 m 352.5 48 l 12 478.5 m 12 430.5 l 645 478.5 m 645 430.5 l 328.5 873 m 328.5 849 l 328.5 60 m 328.5 36 l 0 454.5 m 24 454.5 l 633 454.5 m 657 454.5 l 328.5 861 m 334.5 861 l 334.5 857.688 331.812 855 328.5 855 c 325.188 855 322.5 857.688 322.5 861 c 322.5 864.312 325.188 867 328.5 867 c 331.812 867 334.5 864.312 334.5 861 c 328.5 48 m 334.5 48 l 334.5 44.688 331.812 42 328.5 42 c 325.188 42 322.5 44.688 322.5 48 c 322.5 51.312 325.188 54 328.5 54 c 331.812 54 334.5 51.312 334.5 48 c 12 454.5 m 18 454.5 l 18 451.188 15.312 448.5 12 448.5 c 8.688 448.5 6 451.188 6 454.5 c 6 457.812 8.688 460.5 12 460.5 c 15.312 460.5 18 457.812 18 454.5 c 645 454.5 m 651 454.5 l 651 451.188 648.312 448.5 645 448.5 c 641.688 448.5 639 451.188 639 454.5 c 639 457.812 641.688 460.5 645 460.5 c 648.312 460.5 651 457.812 651 454.5 c S /Cs9 CS 1 SCN 0.25 w 304.5 861 m 352.5 861 l 304.5 48 m 352.5 48 l 12 478.5 m 12 430.5 l 645 478.5 m 645 430.5 l 328.5 873 m 328.5 849 l 328.5 60 m 328.5 36 l 0 454.5 m 24 454.5 l 633 454.5 m 657 454.5 l 328.5 861 m 334.5 861 l 334.5 857.688 331.812 855 328.5 855 c 325.188 855 322.5 857.688 322.5 861 c 322.5 864.312 325.188 867 328.5 867 c 331.812 867 334.5 864.312 334.5 861 c 328.5 48 m 334.5 48 l 334.5 44.688 331.812 42 328.5 42 c 325.188 42 322.5 44.688 322.5 48 c 322.5 51.312 325.188 54 328.5 54 c 331.812 54 334.5 51.312 334.5 48 c 12 454.5 m 18 454.5 l 18 451.188 15.312 448.5 12 448.5 c 8.688 448.5 6 451.188 6 454.5 c 6 457.812 8.688 460.5 12 460.5 c 15.312 460.5 18 457.812 18 454.5 c 645 454.5 m 651 454.5 l 651 451.188 648.312 448.5 645 448.5 c 641.688 448.5 639 451.188 639 454.5 c 639 457.812 641.688 460.5 645 460.5 c 648.312 460.5 651 457.812 651 454.5 c S endstream endobj 193 0 obj << /Type /Page /Parent 497 0 R /Resources 194 0 R /Contents 195 0 R /Thumb 445 0 R /MediaBox [ 0 0 684 873 ] /CropBox [ 0 0 684 873 ] /Rotate 0 >> endobj 194 0 obj << /ProcSet [ /PDF /Text ] /Font << /F1 515 0 R /F2 518 0 R /F3 261 0 R /F8 268 0 R >> /ExtGState << /GS1 523 0 R /GS2 521 0 R >> /ColorSpace << /Cs9 520 0 R >> >> endobj 195 0 obj << /Length 8627 >> stream 1 g /GS1 gs 0 873 m 0 873 l f q 1 i 27 846 603 -783 re 0 873 m W n 0 873 684 -873 re W n BT /F1 1 Tf 11 0 0 11 63 802.0776 Tm 0 0 0 1 k /GS2 gs -0.0001 Tc 0.1469 Tw [(wor)13.8(ds with their links on each side in an or)13.8(der)9.7(ed, linear)]TJ 0 -1.0909 TD -0.0002 Tc 0 Tw (format:)Tj /F2 1 Tf 7 0 0 7 63 770.0776 Tm 0.06 Tw [(\(Wd:0:LEFT-WALL)-6148.7("Moses" Ss:2:supposes.v\))-510.1(\\)]TJ 0 -1.1429 TD [(\(Ss:1:Moses)-8538.1("supposes.v" Ce:4:toses[!]\) \\)]TJ T* [(\( )-13236.8("his" Dmc:4:toses[!]\))-1019.9(\\)]TJ T* [(\(Ce:2:supposes Dmc:3:his "toses[!]" Spx:5:are.v\))-3174.5(\\)]TJ /F1 1 Tf 11 0 0 11 63 722.0776 Tm -0.0001 Tc 0.0827 Tw [(W)77.8(e)0( can get this type of output with )]TJ /F2 1 Tf 9 0 0 9 223.7192 722.0776 Tm -0.0002 Tc 0.1985 Tw (print $linkage)Tj /F1 1 Tf 11 0 0 11 304.7464 722.0776 Tm -0.0059 Tc 0 Tw (by)Tj -21.9769 -1.0909 TD -0.0001 Tc 0.0003 Tw (modifying the file )Tj /F2 1 Tf 9 0 0 9 141.6701 710.0776 Tm -0.0002 Tc 0 Tw (Linkage/Linkage.pm)Tj /F1 1 Tf 11 0 0 11 241.5998 710.0776 Tm -0.0001 Tc 0.0003 Tw (and changing the)Tj -16.2363 -1.0909 TD 0.1189 Tw [(o)15.9(v)5.9(erload behavior)59.7(. F)33.9(igur)9.7(e 3 sho)11.9(ws the change, illustrating)]TJ T* 0.1602 Tw [(the r)9.7(esults of )]TJ /F2 1 Tf 9 0 0 9 125.191 686.0776 Tm -0.0002 Tc 0 Tw (new_as_string\(\))Tj /F1 1 Tf 11 0 0 11 210.6835 686.0776 Tm -0.0001 Tc 0.1602 Tw (method rather than the)Tj /F2 1 Tf 9 0 0 9 63 674.0776 Tm -0.0002 Tc 0 Tw (as_string\(\))Tj /F1 1 Tf 11 0 0 11 125.2431 674.0776 Tm -0.0001 Tc 0.0098 Tw [(method. N)29.7(o)12(w)74.9(,)0( printing the object )]TJ /F2 1 Tf 9 0 0 9 271.8106 674.0776 Tm -0.0002 Tc 0 Tw ($linkage)Tj /F1 1 Tf 11 0 0 11 63 662.0776 Tm -0.0001 Tc 0.2351 Tw [(fr)5.8(om the pr)9.7(evious examples will output the text sho)11.9(wn)]TJ T* 0.025 Tw [(abo)15.8(v)5.9(e, in one long string.)]TJ 0 -2.1818 TD -0.0201 Tc 0.2059 Tw [(F)34(i)0(nally)84.9(, w)5.8(e)0( can pattern match that text to find what w)5.7(e)29.7()69.9(r)9.9(e)]TJ 0 -1.0909 TD 0.1248 Tw [(looking for)59.7(.)-0.1( I)11.9(n)0( this case, w)5.8(e)29.7()69.9(r)9.9(e going to look for the )]TJ /F2 1 Tf 9 0 0 9 284.7038 614.0776 Tm -0.0203 Tc 0 Tw (Ss)Tj /F1 1 Tf 11 0 0 11 299.0444 614.0776 Tm -0.0201 Tc (link)Tj -21.4586 -1.0909 TD [(fr)5.7(om )]TJ /F2 1 Tf 9 0 0 9 85.2591 602.0776 Tm (Moses)Tj /F1 1 Tf 11 0 0 11 111.3526 602.0776 Tm -0.0149 Tw [(, indicating a connector to the v)5.7(erb for our subject:)]TJ /F2 1 Tf 7 0 0 7 81.4756 582.0776 Tm -0.0002 Tc 0.06 Tw ($Moses = '"Moses" ';)Tj 0 -1.1428 TD ($does_something = 'Ss:\\d+:\(\\w+\)\\.v';)Tj T* ($action_by_moses = "$Moses$does_something";)Tj 0 -2.2857 TD [(if \($linkage =~ /$action_by_moses/o\) {)]TJ 2.6394 -1.1429 TD (print "What does Moses do? He $1.\\n";)Tj -2.6394 -1.1429 TD 0 Tc 0 Tw (})Tj /F1 1 Tf 11 0 0 11 63 514.0776 Tm -0.0001 Tc 0.0925 Tw (This prints )Tj /F2 1 Tf 9 0 0 9 114.5893 514.0776 Tm -0.0002 Tc 0.2221 Tw [(What does Moses do? He supposes.)]TJ /F1 1 Tf 11 0 0 11 300.9413 514.0776 Tm -0.0779 Tc 0 Tw (We)Tj -21.631 -1.0909 TD -0.0001 Tc 0.043 Tw [(could take the idea fur)-7.9(ther b)5.8(y)0( o)15.8(v)5.9(erloading the right side of)]TJ T* 0.1696 Tw [(our r)9.7(egular expr)9.7(essions and getting them to r)9.7(eturn )]TJ /F2 1 Tf 9 0 0 9 293.4055 490.0776 Tm -0.0002 Tc 0 Tw (word)Tj /F1 1 Tf 11 0 0 11 63 478.0776 Tm -0.0001 Tc 0.025 Tw [(objects, but w)5.8(e)0( won)69.8()79.9(t)0(.)]TJ 25.3636 29.4546 TD 0.2695 Tw [(P)54(eeking under the hood, her)9.7(e)29.7()79.9(s ho)11.9(w the o)15.8(v)5.9(erloading is)]TJ 0 -1.0909 TD 0 Tw (implemented.)Tj /F2 1 Tf 7 0 0 7 342 770.0786 Tm -0.0602 Tc 0.06 Tw [(use overload q\(""\) => "new_as_string";)]TJ 0 -2.2857 TD (sub new_as_string {)Tj 2.3994 -1.1429 TD (my $linkage = shift;)Tj T* (my $return = '';)Tj T* (my $i = 0;)Tj T* [(foreach my $word \($linkage->words\) {)]TJ 2.3994 -1.1429 TD (my \($before,$after\) = '';)Tj T* (foreach my $link \($word->links\) {)Tj 2.3994 -1.1429 TD [(my $position = $link->linkposition;)]TJ T* [(my $text)-2774.5(= $link->linkword;)]TJ T* [(my $type)-2799.4(= $link->linklabel;)]TJ T* (if \($position < $i\) {)Tj 2.3994 -1.1429 TD [($before .= "$type:$position:$text ";)]TJ -2.3994 -1.1429 TD (} elsif \($position > $i\) {)Tj 2.3994 -1.1429 TD ($after.= "$type:$position:$text ";)Tj -2.3994 -1.1429 TD 0 Tc 0 Tw (})Tj -2.3994 -1.1429 TD (})Tj T* -0.0602 Tc 0.06 Tw [($return .= "\(" . $before . " \\"" . $word->text . "\\" " .)]TJ 6.5983 -1.1429 TD ($after . "\)" ;)Tj -6.5983 -1.1429 TD 0 Tw ($i++;)Tj -2.3994 -1.1429 TD 0 Tc (})Tj -0.5999 -1.1429 TD -0.0602 Tc 0.06 Tw ("\(" . $return . "\)";)Tj -1.7995 -1.1429 TD -0.0603 Tc 0 Tw (} )Tj /F8 1 Tf 12 0 0 12 342 560.0786 Tm 0 Tc (W)Tj 10.44 0 0 10.44 353.8532 560.0786 Tm 0.0227 Tc [(HA)81.5(T)]TJ 12 0 0 12 379.4627 560.0785 Tm 0 Tc (S)Tj 10.44 0 0 10.44 385.7495 560.0785 Tm 0.0228 Tc (UCKS)Tj 12 0 0 12 414.1193 560.0784 Tm 0.0197 Tc -0.0101 Tw (? W)Tj 10.44 0 0 10.44 433.3443 560.0784 Tm 0.0227 Tc 0 Tw [(HA)81.5(T)]TJ 12 0 0 12 458.9537 560.0784 Tm 0 Tc (R)Tj 10.44 0 0 10.44 466.6882 560.0784 Tm 0.0228 Tc (OCKS)Tj 12 0 0 12 495.5601 560.0784 Tm 0 Tc (?)Tj /F1 1 Tf 11 0 0 11 342 534.0786 Tm -0.0001 Tc 0.307 Tw [(The O)5.8(perating S)11.9(ystem S)23.9(ucks-R)11.9(ules-O-M)23.9(eter)19.7( b)5.8(y)0( D)11.9(o)0.1(n)]TJ 0 -1.0909 TD 0.0849 Tw [(M)12(a)0.3(r)-7.9(ti \(http://sr)5.8(om.zgp)15.8(.org/\) inspir)9.7(ed J)29.7(on O)5.8(r)-17.7(want)17.7()79.9(s)0( )-17.9(W)0.1(hat)]TJ T* 0.2422 Tw [(Languages S)23.9(uck)39.7( pr)5.8(ogram, later adopted b)5.8(y)0( S)23.9(tev)5.8(e Lidie)]TJ T* 0.2123 Tw [(\(http://www)74.9(.lehigh.edu/~sol0/r)-7.9(ules.html\). I)23.9(t)0( blesses all of)]TJ T* -0.0219 Tw [(our liv)5.8(es b)5.8(y)0( counting the w)5.8(eb sites that state )]TJ /F2 1 Tf 9 0 0 9 529.6893 486.0786 Tm -0.0002 Tc -0.0526 Tw (visual basic)Tj /F1 1 Tf 12 0 0 12 517.3723 90.3543 Tm 0 Tc 0 Tw (F)Tj 10.44 0 0 10.44 523.4518 90.3543 Tm -0.0001 Tc (ALL)Tj 12 0 0 12 544.7999 90.3543 Tm 0 Tc 0.025 Tw [(2000 63)]TJ /F3 1 Tf -40.15 0 TD -0.0002 Tc 0.0255 Tw [(The P)47.6(erl J)35.7(our)-8(nal #19)]TJ ET 0 0 0 0.1 k /GS1 gs 63.5 458.5 530 -341 re 162.892 90.354 m f* 0 0 0 1 K 0 J 0 j 1 w 10 M []0 d 63.5 458.5 530 -341 re S BT /F8 1 Tf 24 0 0 24 275.0537 325.7976 Tm 0 0 0 1 k /GS2 gs 0 Tw (ZENGINE)Tj 0.4992 -1.2 TD 0.0255 Tw (1/2 page)Tj 0.57 -2.4 TD -0.0004 Tc 0 Tw [(NE)11.6(W)]TJ ET Q 0 0 0 0 k /GS2 gs 1 i 37 874 191 -12 re 356.29 239.398 m f* BT /F2 1 Tf 8 0 0 8 39 864 Tm /Cs9 cs 1 scn -0.0004 Tc -0.0019 Tw (TPJ#19/9.26 9/27/00 10:35 AM Page 63)Tj ET 1 G 0 J 0 j 0.5 w 10 M []0 d 36 873 m 36 849 l 0 837 m 24 837 l 621 873 m 621 849 l 657 837 m 633 837 l 36 36 m 36 60 l 0 72 m 24 72 l 621 36 m 621 60 l 657 72 m 633 72 l S /Cs9 CS 1 SCN 0.25 w 36 873 m 36 849 l 0 837 m 24 837 l 621 873 m 621 849 l 657 837 m 633 837 l 36 36 m 36 60 l 0 72 m 24 72 l 621 36 m 621 60 l 657 72 m 633 72 l S 1 G 0.5 w 304.5 861 m 352.5 861 l 304.5 48 m 352.5 48 l 12 478.5 m 12 430.5 l 645 478.5 m 645 430.5 l 328.5 873 m 328.5 849 l 328.5 60 m 328.5 36 l 0 454.5 m 24 454.5 l 633 454.5 m 657 454.5 l 328.5 861 m 334.5 861 l 334.5 857.688 331.812 855 328.5 855 c 325.188 855 322.5 857.688 322.5 861 c 322.5 864.312 325.188 867 328.5 867 c 331.812 867 334.5 864.312 334.5 861 c 328.5 48 m 334.5 48 l 334.5 44.688 331.812 42 328.5 42 c 325.188 42 322.5 44.688 322.5 48 c 322.5 51.312 325.188 54 328.5 54 c 331.812 54 334.5 51.312 334.5 48 c 12 454.5 m 18 454.5 l 18 451.188 15.312 448.5 12 448.5 c 8.688 448.5 6 451.188 6 454.5 c 6 457.812 8.688 460.5 12 460.5 c 15.312 460.5 18 457.812 18 454.5 c 645 454.5 m 651 454.5 l 651 451.188 648.312 448.5 645 448.5 c 641.688 448.5 639 451.188 639 454.5 c 639 457.812 641.688 460.5 645 460.5 c 648.312 460.5 651 457.812 651 454.5 c S /Cs9 CS 1 SCN 0.25 w 304.5 861 m 352.5 861 l 304.5 48 m 352.5 48 l 12 478.5 m 12 430.5 l 645 478.5 m 645 430.5 l 328.5 873 m 328.5 849 l 328.5 60 m 328.5 36 l 0 454.5 m 24 454.5 l 633 454.5 m 657 454.5 l 328.5 861 m 334.5 861 l 334.5 857.688 331.812 855 328.5 855 c 325.188 855 322.5 857.688 322.5 861 c 322.5 864.312 325.188 867 328.5 867 c 331.812 867 334.5 864.312 334.5 861 c 328.5 48 m 334.5 48 l 334.5 44.688 331.812 42 328.5 42 c 325.188 42 322.5 44.688 322.5 48 c 322.5 51.312 325.188 54 328.5 54 c 331.812 54 334.5 51.312 334.5 48 c 12 454.5 m 18 454.5 l 18 451.188 15.312 448.5 12 448.5 c 8.688 448.5 6 451.188 6 454.5 c 6 457.812 8.688 460.5 12 460.5 c 15.312 460.5 18 457.812 18 454.5 c 645 454.5 m 651 454.5 l 651 451.188 648.312 448.5 645 448.5 c 641.688 448.5 639 451.188 639 454.5 c 639 457.812 641.688 460.5 645 460.5 c 648.312 460.5 651 457.812 651 454.5 c S endstream endobj 196 0 obj << /Type /Page /Parent 497 0 R /Resources 197 0 R /Contents 198 0 R /Thumb 447 0 R /MediaBox [ 0 0 684 873 ] /CropBox [ 0 0 684 873 ] /Rotate 0 >> endobj 197 0 obj << /ProcSet [ /PDF /Text ] /Font << /F1 515 0 R /F2 518 0 R /F3 261 0 R /F5 262 0 R /F8 268 0 R >> /ExtGState << /GS1 523 0 R /GS2 521 0 R >> /ColorSpace << /Cs9 520 0 R >> >> endobj 198 0 obj << /Length 19194 >> stream 1 g /GS1 gs 0 873 m 0 873 l f q 1 i 27 846 603 -783 re 0 873 m W n 0 873 684 -873 re W n BT /F2 1 Tf 9 0 0 9 63 802.0776 Tm 0 0 0 1 k /GS2 gs -0.0002 Tc 0 Tw (sucks)Tj /F1 1 Tf 11 0 0 11 89.9934 802.0776 Tm 0 Tc (, )Tj /F2 1 Tf 9 0 0 9 97.4534 802.0776 Tm -0.0002 Tc 0.4276 Tw (perl rules)Tj /F1 1 Tf 11 0 0 11 155.2881 802.0776 Tm -0.0001 Tc 0.1782 Tw [(, and so on. )44.8(The numbers ar)9.7(e then)]TJ -8.3898 -1.0909 TD 0.0114 Tw [(plotted on a graph, giving us a cr)-7.9(ude and comical sampling)]TJ T* 0.025 Tw [(of the net)17.7()79.9(s)0( public opinions about languages.)]TJ 0 -2.1818 TD 0.1206 Tw [(What if someone wanted to per)-7.9(form a sear)5.8(ch that would)]TJ 0 -1.0909 TD 0.044 Tw [(pr)5.8(oduce lists of anything that people think sucks or stinks,)]TJ T* 0.099 Tw [(and r)-7.9(ules or r)5.8(ocks? A quick sear)5.8(ch for )]TJ /F2 1 Tf 9 0 0 9 232.8793 730.0776 Tm -0.0002 Tc 0 Tw (rocks)Tj /F1 1 Tf 11 0 0 11 263.7123 730.0776 Tm -0.0001 Tc 0.099 Tw (on Altavista)Tj -18.2466 -1.0909 TD 0.2341 Tw [(r)9.9(e)0(v)5.8(eals plenty of geology links, and ne)-5.9(ws headlines like)]TJ /F2 1 Tf 9 0 0 9 63 706.0776 Tm -0.0002 Tc 0.0878 Tw [(Senate confrontation rocks Capitol Hill)]TJ /F1 1 Tf 11 0 0 11 276.7079 706.0776 Tm 0 Tc 0.0217 Tw [(. W)77.9(e)0( )-14.8(just)]TJ -19.428 -1.0909 TD -0.0001 Tc 0.1078 Tw [(want those phrases that state that something r)5.8(ocks, so w)5.8(e)]TJ T* 0.025 Tw [(need to analyz)5.8(e the grammar of the sear)5.8(ch r)9.7(e)0(sults.)]TJ 0 -2.1818 TD 0.0067 Tw [(F)34(irst, w)5.8(e)0( need to determine the syntax for the data w)5.8(e)0( want)]TJ 0 -1.0909 TD 0.1749 Tw [(to collect. )14.8(W)77.8(e)0( use the first script listed in this ar)-7.9(ticle to)]TJ T* 0.0485 Tw [(experiment, or w)5.8(e)0( could think thr)5.8(ough the grammar a bit:)]TJ T* 0 Tw (the )Tj /F2 1 Tf 9 0 0 9 79.9998 622.0776 Tm -0.0002 Tc (rock)Tj /F1 1 Tf 11 0 0 11 105.1989 622.0776 Tm -0.0001 Tc 0.0776 Tw [(w)5.8(e)0( ar)9.7(e looking for is not only a v)5.8(erb)15.8(, but a v)5.8(erb)]TJ -3.8363 -1.0909 TD 0.1944 Tw [(without an object. )44.8(This would ser)-17.9(v)5.9(e)0( to differ)9.7(entiate our)]TJ T* 0.025 Tw [(meaning fr)5.8(om the two others mentioned abo)15.8(v)5.9(e. )]TJ /F2 1 Tf 7 0 0 7 99.9512 574.0776 Tm -0.0002 Tc 0 Tw (+------------Xp------------+)Tj 0 -1.7143 TD [(+--Wd--+--Ss-+---Op---+)-2399.6(|)]TJ -0.2 -1.7143 TD 0.0048 Tc [(|)30( )-30( )-30( )-30( )-30( )-30( )-30(|)-2994.5(|)60( |)45( )-15( )-15( )-15( )-15(|)]TJ -2.3594 -1.7143 TD -0.0002 Tc 0.06 Tw (LEFT-WALL he studies.v rocks.n .)Tj /F1 1 Tf 11 0 0 11 63 514.0776 Tm -0.0001 Tc 0.1946 Tw [(N)29.7(ote that this diagram displaying only one linkage, but)]TJ 0 -1.0909 TD 0.0459 Tw [(ther)9.7(e might be many)84.9(. I)11.9(n)0( the abo)15.8(v)5.9(e)0( output fr)5.8(om our script,)]TJ /F2 1 Tf 9 0 0 9 63 490.0776 Tm -0.0002 Tc 0.5115 Tw (He studies rocks)Tj /F1 1 Tf 11 0 0 11 163.6806 490.0776 Tm -0.0001 Tc 0.2132 Tw [(has been parsed and labeled. )44.9(The)]TJ -9.1528 -1.0909 TD 0.2068 Tw (subject of the sentence \()Tj /F2 1 Tf 9 0 0 9 174.0834 478.0776 Tm -0.0003 Tc 0 Tw (he)Tj /F1 1 Tf 11 0 0 11 184.8808 478.0776 Tm -0.0001 Tc 0.2068 Tw [(\) is sho)11.9(wn with an )]TJ /F2 1 Tf 9 0 0 9 276.7004 478.0776 Tm -0.0003 Tc 0 Tw (Ss)Tj /F1 1 Tf 11 0 0 11 292.5221 478.0776 Tm -0.0001 Tc (label,)Tj -20.8656 -1.0909 TD 0.3179 Tw [(connecting a singular noun to the singular v)5.8(erb form)]TJ T* 0 Tc 0 Tw (\()Tj /F2 1 Tf 9 0 0 9 66.5181 454.0776 Tm -0.0002 Tc (studies)Tj /F1 1 Tf 11 0 0 11 104.3088 454.0776 Tm -0.0001 Tc 0.0005 Tw [(\). )44.8(This will be the connector w)5.8(e)0( ar)9.7(e looking for in)]TJ -3.7553 -1.0909 TD 0 Tw (our )Tj /F2 1 Tf 9 0 0 9 81.0891 442.0776 Tm -0.0002 Tc (rocks)Tj /F1 1 Tf 11 0 0 11 111.5462 442.0776 Tm -0.0001 Tc 0.0649 Tw [(phrase, but her)9.7(e it occurs with the wr)5.8(ong v)5.8(erb)15.8(.)]TJ -4.4133 -1.0909 TD -0.0002 Tc -0.0013 Tw [(I)23.8(t)-0.1( has identified )]TJ /F2 1 Tf 9 0 0 9 132.4093 430.0776 Tm 0 Tw (rocks)Tj /F1 1 Tf 11 0 0 11 162.1371 430.0776 Tm -0.0001 Tc -0.0014 Tw [(as a noun her)9.7(e, and linked )]TJ /F2 1 Tf 9 0 0 9 276.5522 430.0776 Tm -0.0002 Tc 0 Tw (rocks)Tj /F1 1 Tf 11 0 0 11 306.2799 430.0776 Tm (to)Tj /F2 1 Tf 9 0 0 9 63 418.0776 Tm 0.0198 Tc (studies)Tj /F1 1 Tf 11 0 0 11 110.5924 418.0776 Tm 0.5065 Tw (with an )Tj /F2 1 Tf 9 0 0 9 158.3356 418.0776 Tm 0 Tw (Op)Tj /F1 1 Tf 11 0 0 11 178.0347 418.0776 Tm 0.5066 Tw [(connector)59.8(. )44.9(The Link P)42(arser)]TJ -10.4577 -1.0909 TD -0.0001 Tc 0.121 Tw (documentation tells us that )Tj /F2 1 Tf 9 0 0 9 186.9747 406.0776 Tm 0 Tc 0 Tw (O)Tj /F1 1 Tf 11 0 0 11 196.4546 406.0776 Tm -0.0001 Tc 0.121 Tw [(connects transitiv)5.8(e v)5.8(erbs to)]TJ -12.1322 -1.0909 TD 0.0201 Tw [(dir)9.7(ect or indir)9.7(ect objects, and so the )]TJ /F2 1 Tf 9 0 0 9 219.7458 394.0776 Tm 0 Tc 0 Tw (p)Tj /F1 1 Tf 11 0 0 11 228.1156 394.0776 Tm -0.0001 Tc 0.0201 Tw [(subscript r)9.7(eflects the)]TJ -15.0105 -1.0909 TD 0.025 Tw (plurality of the object, )Tj /F2 1 Tf 9 0 0 9 161.282 382.0776 Tm -0.0002 Tc 0 Tw (rocks)Tj /F1 1 Tf 11 0 0 11 188.2754 382.0776 Tm 0 Tc (. )Tj /F2 1 Tf 7 0 0 7 99.6713 362.0776 Tm -0.0073 Tc (+--------------------Xp-------------------+)Tj 0 -1.1429 TD -0.003 Tc [(+-------Wd------+)-5126.6(+-----Os----+)-1862.6(|)]TJ T* -0.0502 Tc 0.105 Tw [(|)-45( +)-45.2(---Ds---+)]TJ 10.0675 0 TD -0.0252 Tc 0 Tw (----Ss---+)Tj 9.0478 0 TD -0.0401 Tc 0.0599 Tw [(+--Ds-+ |)]TJ -19.1153 -1.1429 TD -0.0091 Tc -0.0011 Tw [(| )-65( )-65( )-65( )-65( )-65( )-65(|)-4442.9(|)-5067.6(|)-3313.2(|)61.1( |)61.1( |)]TJ -2.6194 -1.1429 TD -0.0051 Tc 0.0599 Tw [(LEFT-WALL the earthquake.n rocks.v the city.n .)]TJ /F1 1 Tf 11 0 0 11 63 306.0775 Tm -0.036 Tw [(This example r)9.7(ecogniz)5.8(es the v)5.8(erb usage of )]TJ /F2 1 Tf 9 0 0 9 237.4595 306.0775 Tm 0 Tw (rocks)Tj /F1 1 Tf 11 0 0 11 266.5268 306.0775 Tm -0.036 Tw (as an action)Tj -18.5024 -1.0909 TD -0.032 Tw [(being per)-7.9(formed b)5.8(y)-0.1( )]TJ /F2 1 Tf 9 0 0 9 147.2191 294.0775 Tm 0 Tw (earthquake)Tj /F1 1 Tf 11 0 0 11 200.7561 294.0775 Tm -0.032 Tw [(. D)11.9(o)0( ear)-7.9(thquakes r)5.8(ock? N)29.7(o)0.1(t)]TJ -12.5233 -1.0909 TD -0.0009 Tw [(in the sense w)5.8(e)0( ar)9.7(e looking for)59.7(, since )]TJ /F2 1 Tf 9 0 0 9 220.3216 282.0775 Tm 0 Tw (rocks)Tj /F1 1 Tf 11 0 0 11 249.7746 282.0775 Tm -0.0009 Tw (has a connector)Tj -16.9795 -1.0909 TD 0 Tw (to )Tj /F2 1 Tf 9 0 0 9 76.6488 270.0775 Tm 0.5113 Tw [(the city)]TJ /F1 1 Tf 11 0 0 11 139.073 270.0775 Tm 0.2131 Tw [(as an singular object \(indicated b)5.7(y)-0.1( )]TJ /F2 1 Tf 9 0 0 9 298.0798 270.0775 Tm -0.0053 Tc 0 Tw (Os)Tj /F1 1 Tf 11 0 0 11 308.7872 270.0775 Tm (\).)Tj -22.3443 -1.0909 TD -0.0051 Tc 0.025 Tw [(O)5.8(bjects suck, at least for our purposes. Let)17.6()79.9(s)0( tr)-17.9(y another)59.7(.)]TJ /F2 1 Tf 7 0 0 7 99.3915 238.0776 Tm 0.0048 Tc 0 Tw [(+)14.9(-----------------------Xp)]TJ 15.7112 0 TD -0.0102 Tc [(---------------------)10.1(-)9.8(+)]TJ -15.7112 -1.1429 TD [(+)14.9(----------------Wd-)]TJ 11.7822 0 TD 0.0048 Tc [(-------------)30.1(-)29.8(+)-7898.1(|)]TJ -11.7822 -1.1429 TD -0.0163 Tc [(|)-3785.2(+------------D*u-----------+)-7984.1(|)]TJ T* -0.0343 Tc 0.0841 Tw [(|)-24.1( |)-24.1( +----------AN)-4.3(---------+)-7992.1(|)]TJ T* -0.0302 Tc 0.08 Tw [(|)-20( |)-20( |)-4399.4(+)-100.1(-----AN-----)]TJ 20.1552 0 TD -0.0102 Tc 0.06 Tw [(+---Ss---+ |)]TJ -20.1953 -1.1429 TD 0.0448 Tc 0 Tw [(|)60( |)60( |)60( |)-6813.6(|)-4738.8(|)60( |)]TJ -2.5594 -1.1429 TD -0.0101 Tc 0.0599 Tw [(LEFT-WALL the Perl programming.n language.n rocks.v !)]TJ /F1 1 Tf 11 0 0 11 63 166.0775 Tm -0.0051 Tc 0 Tw (Again, )Tj /F2 1 Tf 9 0 0 9 95.1991 166.0775 Tm (rocks)Tj /F1 1 Tf 11 0 0 11 126.9508 166.0775 Tm 0.208 Tw [(her)9.7(e)0( is corr)9.7(ectly r)9.7(ecogniz)5.8(ed as a v)5.8(erb)15.8(, and)]TJ -5.8137 -1.0909 TD -0.032 Tw (again, it is connected via )Tj /F2 1 Tf 9 0 0 9 166.6153 154.0775 Tm -0.0053 Tc 0 Tw (Ss)Tj /F1 1 Tf 11 0 0 11 179.6661 154.0775 Tm -0.0051 Tc -0.0319 Tw [(to a subject. B)11.9(ut this time )]TJ /F2 1 Tf 9 0 0 9 288.1868 154.0775 Tm 0 Tw (rocks)Tj /F1 1 Tf 11 0 0 11 63 142.0775 Tm 0.0085 Tw [(is not a transitiv)5.8(e v)5.8(erb)15.8(, since it has no objects. )44.8(The grammar)]TJ T* 0.025 Tw [(of this sentence would satisfy our r)9.6(equir)9.7(ements for )]TJ /F2 1 Tf 9 0 0 9 278.775 130.0775 Tm 0 Tw (rocks)Tj /F1 1 Tf 11 0 0 11 305.5435 130.0775 Tm 0 Tc (.)Tj 3.3142 61.0909 TD -0.0001 Tc 0.0685 Tw [(S)12.1(o)0( no)11.9(w that w)5.8(e)0( hav)5.8(e the corr)9.7(ect usage, ho)11.9(w do w)5.8(e)0( extract)]TJ 0 -1.0909 TD -0.0324 Tw [(the subject? )14.9(W)77.8(e)0( don)69.8()79.9(t)0( want to use just )]TJ /F2 1 Tf 9 0 0 9 503.4347 790.0776 Tm -0.0002 Tc 0 Tw (language)Tj /F1 1 Tf 11 0 0 11 549.0171 790.0776 Tm -0.0001 Tc -0.0325 Tw (to compile)Tj -18.8197 -1.0909 TD 0.041 Tw [(our statistics w)5.8(e)0( want )]TJ /F2 1 Tf 9 0 0 9 454.5113 778.0776 Tm 0.0984 Tw (Perl programming language)Tj /F1 1 Tf 11 0 0 11 591.2499 778.0776 Tm 0 Tc 0 Tw (.)Tj -22.6591 -1.0909 TD -0.0001 Tc 0.0009 Tw [(T)119.9(o)0( find a solution, take note of the )]TJ /F2 1 Tf 9 0 0 9 492.7535 766.0776 Tm -0.0003 Tc 0 Tw (AN)Tj /F1 1 Tf 11 0 0 11 506.3107 766.0776 Tm -0.0001 Tc 0.0009 Tw (connectors that span)Tj -14.9373 -1.0909 TD 0.1723 Tw [(these wor)13.8(ds. )44.8(The Link G)23.9(rammar r)9.7(efer)9.7(ence identifies this)]TJ T* 0.2076 Tw [(link type as connecting modifiers to nouns. I)11.9(n)0( the case)]TJ T* 0.3202 Tw [(abo)15.8(v)5.9(e)0(, both )]TJ /F2 1 Tf 9 0 0 9 401.3319 730.0776 Tm -0.0002 Tc 0 Tw (Perl)Tj /F1 1 Tf 11 0 0 11 429.1987 730.0776 Tm (and )Tj /F2 1 Tf 9 0 0 9 451.2834 730.0776 Tm (programming)Tj /F1 1 Tf 11 0 0 11 516.941 730.0776 Tm -0.0001 Tc 0.3202 Tw [(ar)9.7(e modifiers for)]TJ /F2 1 Tf 9 0 0 9 342 718.0776 Tm -0.0002 Tc 0 Tw (language)Tj /F1 1 Tf 11 0 0 11 385.1894 718.0776 Tm -0.0001 Tc 0.1624 Tw [(. )14.8(W)77.8(e)0( can plan at the outset to always look for)]TJ -3.9263 -1.0909 TD 0 Tc 0.0035 Tw (modifier links to our subject, and include them in the data)Tj T* -0.0001 Tc 0.1231 Tw [(w)5.8(e)0( extract fr)5.8(om the sentence. And ther)9.7(e)29.7()79.9(s mor)9.7(e that w)5.8(e)29.7()12(l)0.2(l)]TJ T* 0.0251 Tw [(need, as y)5.8(o)0.1(u)49.8()12(ll see.)]TJ /F8 1 Tf 12 0 0 12 342 656.0776 Tm 0 Tc 0 Tw (W)Tj 10.44 0 0 10.44 353.8532 656.0776 Tm 0.0227 Tc [(HA)81.5(T)]TJ 12 0 0 12 379.4627 656.0775 Tm 0 Tc (S)Tj 10.44 0 0 10.44 385.7495 656.0775 Tm 0.0228 Tc (UCKS)Tj 12 0 0 12 414.1193 656.0775 Tm 0.0197 Tc 0.0255 Tw (, R)Tj 10.44 0 0 10.44 429.1314 656.0775 Tm 0.0228 Tc 0 Tw (EGEX)Tj 12 0 0 12 460.3231 656.0775 Tm 0 Tc (S)Tj 10.44 0 0 10.44 466.61 656.0775 Tm 0.0227 Tc [(T)-12.1(YLE)]TJ /F1 1 Tf 11 0 0 11 342 630.0776 Tm -0.0051 Tc 0.0012 Tw [(O)5.8(nce w)5.8(e)0( hav)5.8(e determined the general grammatical elements)]TJ T* 0.0101 Tw [(for which to sear)5.8(ch, w)5.8(e)0( can write a pr)5.8(ogram that finds those)]TJ T* 0.1293 Tw [(elements in a giv)5.8(en text. S)11.9(ince w)5.8(e)0( o)15.8(v)5.9(erloaded this object)17.7()79.9(s)]TJ T* 0.0203 Tw [(string handling to r)9.7(eturn the linkage information in a linear)]TJ T* 0.2451 Tw [(format, w)5.8(e)0( can no)11.9(w formulate a r)9.7(egular expr)9.7(ession that)]TJ T* 0.025 Tw [(r)9.9(epr)9.7(esents the grammar w)5.8(e)0( want to match.)]TJ /F2 1 Tf 7 0 0 7 350.1878 550.0776 Tm -0.0751 Tc 0.0599 Tw [($what_rocks = 'S[s|p]' .)-5598.6(#)0.1( singular and plural subject)]TJ 8.0378 -1.1429 TD -0.0752 Tc [('\(?:[\\w\\*]{1,3}\)*' .)-360.1(#)-0.1( any optional subscripts)]TJ T* [(':\(\\d+\):' .)-5079(#)0( number of the word)]TJ T* 0 Tw ('\(\\w+\(?:\\.\\w\)*\)'; )Tj 12.7713 -1.1429 TD -0.0751 Tc 0.0599 Tw [(# and save the word itself)]TJ -20.8091 -2.2857 TD -0.0752 Tc 0.045 Tw [($other_stuff )-15(= )-15('[^\\\)]+';)-6248.7(#)-569.9(j)15(u)14.9(n)15(k)14.9(,)15( w)14.9(i)14.9(t)15(h)14.9(i)14.9(n)15( t)14.9(h)15(e)14.9( p)14.9(a)14.9(r)15(e)14.9(n)15(t)14.9(h)15(e)15(s)14.9(i)14.9(s)]TJ 0 -1.1429 TD 0.06 Tw [($rocks)-3744.1(= '"\(rocks*\)\\.v"';)-2559.7(#)-0.1( singular and plural verbs)]TJ 0 -2.2857 TD -0.0751 Tc [($pattern)-2699.4(= "$what_rocks $other_stuff $rocks";)]TJ 0 -1.1429 TD [(if \( $linkage =~ /$pattern/mx \) {)]TJ 2.3394 -1.1429 TD -0.0752 Tc (print "$2 rocks.\\n";)Tj -2.3394 -1.1429 TD 0 Tc 0 Tw (})Tj /F1 1 Tf 11 0 0 11 342 430.0776 Tm -0.0001 Tc [(O)5.8(ur )]TJ /F2 1 Tf 9 0 0 9 364.1973 430.0776 Tm -0.0002 Tc ($what_rocks)Tj /F1 1 Tf 11 0 0 11 427.8192 430.0776 Tm -0.0001 Tc 0.1351 Tw [(por)-7.9(tion of this pattern looks for an )]TJ /F2 1 Tf 9 0 0 9 588.6013 430.0776 Tm 0 Tc 0 Tw (S)Tj /F1 1 Tf 11 0 0 11 342 418.0776 Tm -0.0001 Tc 0.195 Tw [(link fr)5.8(om )]TJ /F2 1 Tf 9 0 0 9 389.1795 418.0776 Tm -0.0002 Tc 0 Tw (rocks)Tj /F1 1 Tf 11 0 0 11 416.1729 418.0776 Tm -0.0001 Tc 0.1951 Tw [(, and stor)9.7(es the wor)13.9(d itself in )]TJ /F2 1 Tf 9 0 0 9 556.4331 418.0776 Tm -0.0003 Tc 0 Tw ($2)Tj /F1 1 Tf 11 0 0 11 567.2305 418.0776 Tm -0.0001 Tc 0.1951 Tw (, with)Tj -20.4755 -1.0909 TD 0.0108 Tw (optional tags like )Tj /F2 1 Tf 9 0 0 9 417.4734 406.0776 Tm -0.0003 Tc 0 Tw (.n)Tj /F1 1 Tf 11 0 0 11 431.1395 406.0776 Tm -0.0001 Tc 0.0108 Tw [(after the wor)13.9(d. \()-12(W)77.8(e will use the stor)9.7(ed)]TJ -8.1036 -1.0909 TD -0.0023 Tw [(wor)13.8(d number in a moment.\) )44.8(This r)9.7(egular expr)9.7(ession wor)5.8(ks,)]TJ T* -0.0132 Tw [(but it wor)5.8(ks for )]TJ /F5 1 Tf 6.2136 0 TD -0.0002 Tc 0 Tw [(ev)5.7(er)-18(y)]TJ /F1 1 Tf 2.0732 0 TD -0.0001 Tc -0.0132 Tw [(v)5.9(erb sense of )]TJ /F2 1 Tf 9 0 0 9 489.2841 382.0776 Tm -0.0002 Tc 0 Tw (rocks)Tj /F1 1 Tf 11 0 0 11 518.8818 382.0776 Tm -0.0001 Tc -0.0132 Tw (that has a subject,)Tj -16.0802 -1.0909 TD 0 Tw (including )Tj /F2 1 Tf 9 0 0 9 385.0717 370.0776 Tm -0.0268 Tw (the earthquake rocks the city)Tj /F1 1 Tf 11 0 0 11 540.6703 370.0776 Tm -0.0111 Tw [(. )14.9(W)77.8(e)0( need to)]TJ -18.0609 -1.0909 TD 0.0355 Tw (limit our pattern to match only those usages of )Tj /F2 1 Tf 9 0 0 9 547.0088 358.0776 Tm -0.0002 Tc 0 Tw (rocks)Tj /F1 1 Tf 11 0 0 11 577.143 358.0776 Tm (that)Tj -21.3766 -1.0909 TD -0.0001 Tc 0.037 Tw [(hav)5.8(e no objects at all. H)17.8(e)0.1(r)9.7(e, w)5.8(e)0( add a pattern after )]TJ /F2 1 Tf 9 0 0 9 561.6081 346.0776 Tm -0.0002 Tc 0 Tw ($rocks)Tj /F1 1 Tf 11 0 0 11 342 334.0776 Tm -0.0001 Tc 0.025 Tw [(to be sur)9.7(e that no )]TJ /F2 1 Tf 9 0 0 9 420.7592 334.0776 Tm 0 Tc 0 Tw (O)Tj /F1 1 Tf 11 0 0 11 429.1829 334.0776 Tm -0.0001 Tc 0.025 Tw [(connectors exist for r)5.8(ocks:)]TJ /F2 1 Tf 7 0 0 7 359.0757 314.0776 Tm -0.0501 Tc 0.0599 Tw [(# match anything BUT an 'O' link, to the end parenthesis)]TJ 0 -1.1429 TD ($no_objects = '[^\(?:O.{1,3}:\\d+:\\w+\(?:\\.\\w\)*\)]*\\\)';)Tj T* [($pattern = "$what_rocks $other_stuff $rocks $no_objects";)]TJ /F1 1 Tf 11 0 0 11 342 274.0776 Tm -0.0051 Tc 0.2815 Tw [(W)9.7(ith these changes, the pattern only matches the v)5.7(erb)]TJ /F2 1 Tf 9 0 0 9 342 262.0776 Tm 0 Tw (rocks)Tj /F1 1 Tf 11 0 0 11 373.0631 262.0776 Tm 0.1454 Tw [(when it has no objects. B)11.9(ut one pr)5.8(oblem r)9.7(emains:)]TJ -2.8239 -1.0909 TD -0.0196 Tw [(when w)5.8(e)0( use our r)9.7(egex with pr)5.8(oper nouns like )]TJ /F2 1 Tf 9 0 0 9 535.4894 250.0776 Tm -0.0472 Tw (Pat Metheny)Tj -21.4988 -1.3333 TD 0 Tw (rocks)Tj /F1 1 Tf 11 0 0 11 373.5891 238.0776 Tm 0.1932 Tw (or noun modifiers like )Tj /F2 1 Tf 9 0 0 9 478.5353 238.0776 Tm 0.4636 Tw [(the Perl programming)]TJ -15.1706 -1.3333 TD 0.2168 Tw (language rocks)Tj /F1 1 Tf 11 0 0 11 418.9026 226.0776 Tm 0.0903 Tw [(, w)5.8(e)0( get only one wor)13.8(d as the thing that)]TJ /F2 1 Tf 9 0 0 9 342 214.0776 Tm 0 Tw (rocks)Tj /F1 1 Tf 11 0 0 11 368.7685 214.0776 Tm -0.0079 Tw [(. O)5.8(ur pattern is getting a bit messy)84.8(, so rather than add)]TJ -2.4335 -1.0909 TD 0.0363 Tw [(to it, w)5.8(e)29.7()12(ll add a statement within the )]TJ /F2 1 Tf 9 0 0 9 504.2289 202.0776 Tm -0.0053 Tc 0 Tw (if)Tj /F1 1 Tf 11 0 0 11 518.0304 202.0776 Tm -0.0051 Tc 0.0363 Tw (block to scoop up)Tj -16.0028 -1.0909 TD 0.0028 Tw [(the r)9.7(est of the names. P)29.7(r)6(oper nouns ar)9.7(e str)-7.9(ung together with)]TJ /F2 1 Tf 9 0 0 9 342 178.0775 Tm 0 Tc 0 Tw (G)Tj /F1 1 Tf 11 0 0 11 350.3237 178.0775 Tm -0.0051 Tc 0.025 Tw (connectors, and noun modifiers with )Tj /F2 1 Tf 9 0 0 9 509.6413 178.0775 Tm -0.0053 Tc 0 Tw (AN)Tj /F1 1 Tf 11 0 0 11 520.3486 178.0775 Tm 0 Tc (.)Tj /F2 1 Tf 7 0 0 7 358.6557 158.0776 Tm -0.0652 Tc 0.06 Tw [(if \( $linkage =~ /$pattern/mx \) {)]TJ 2.3794 -1.1429 TD -0.0651 Tc [($wordobj = $linkage->word\($1\); # the stored word number)]TJ T* -0.0652 Tc [($wordtxt = $2;)]TJ T* [($verb = $3;)]TJ T* (@wordlist = \(\);)Tj /F1 1 Tf 12 0 0 12 63 90.3543 Tm 0 Tc 0 Tw [(64)-1100(F)]TJ 10.44 0 0 10.44 94.2795 90.3543 Tm -0.0001 Tc (ALL)Tj 12 0 0 12 115.6277 90.3543 Tm 0 Tc (2000)Tj /F3 1 Tf 30.9897 0.0003 TD -0.0002 Tc 0.0255 Tw [(The P)47.6(erl J)35.7(our)-8(nal #19)]TJ ET Q 0 0 0 0 k /GS2 gs 1 i 37 874 191 -12 re 587.395 90.357 m f* BT /F2 1 Tf 8 0 0 8 39 864 Tm /Cs9 cs 1 scn -0.0004 Tc -0.0019 Tw (TPJ#19/9.26 9/27/00 10:35 AM Page 64)Tj ET 1 G 0 J 0 j 0.5 w 10 M []0 d 36 873 m 36 849 l 0 837 m 24 837 l 621 873 m 621 849 l 657 837 m 633 837 l 36 36 m 36 60 l 0 72 m 24 72 l 621 36 m 621 60 l 657 72 m 633 72 l S /Cs9 CS 1 SCN 0.25 w 36 873 m 36 849 l 0 837 m 24 837 l 621 873 m 621 849 l 657 837 m 633 837 l 36 36 m 36 60 l 0 72 m 24 72 l 621 36 m 621 60 l 657 72 m 633 72 l S 1 G 0.5 w 304.5 861 m 352.5 861 l 304.5 48 m 352.5 48 l 12 478.5 m 12 430.5 l 645 478.5 m 645 430.5 l 328.5 873 m 328.5 849 l 328.5 60 m 328.5 36 l 0 454.5 m 24 454.5 l 633 454.5 m 657 454.5 l 328.5 861 m 334.5 861 l 334.5 857.688 331.812 855 328.5 855 c 325.188 855 322.5 857.688 322.5 861 c 322.5 864.312 325.188 867 328.5 867 c 331.812 867 334.5 864.312 334.5 861 c 328.5 48 m 334.5 48 l 334.5 44.688 331.812 42 328.5 42 c 325.188 42 322.5 44.688 322.5 48 c 322.5 51.312 325.188 54 328.5 54 c 331.812 54 334.5 51.312 334.5 48 c 12 454.5 m 18 454.5 l 18 451.188 15.312 448.5 12 448.5 c 8.688 448.5 6 451.188 6 454.5 c 6 457.812 8.688 460.5 12 460.5 c 15.312 460.5 18 457.812 18 454.5 c 645 454.5 m 651 454.5 l 651 451.188 648.312 448.5 645 448.5 c 641.688 448.5 639 451.188 639 454.5 c 639 457.812 641.688 460.5 645 460.5 c 648.312 460.5 651 457.812 651 454.5 c S /Cs9 CS 1 SCN 0.25 w 304.5 861 m 352.5 861 l 304.5 48 m 352.5 48 l 12 478.5 m 12 430.5 l 645 478.5 m 645 430.5 l 328.5 873 m 328.5 849 l 328.5 60 m 328.5 36 l 0 454.5 m 24 454.5 l 633 454.5 m 657 454.5 l 328.5 861 m 334.5 861 l 334.5 857.688 331.812 855 328.5 855 c 325.188 855 322.5 857.688 322.5 861 c 322.5 864.312 325.188 867 328.5 867 c 331.812 867 334.5 864.312 334.5 861 c 328.5 48 m 334.5 48 l 334.5 44.688 331.812 42 328.5 42 c 325.188 42 322.5 44.688 322.5 48 c 322.5 51.312 325.188 54 328.5 54 c 331.812 54 334.5 51.312 334.5 48 c 12 454.5 m 18 454.5 l 18 451.188 15.312 448.5 12 448.5 c 8.688 448.5 6 451.188 6 454.5 c 6 457.812 8.688 460.5 12 460.5 c 15.312 460.5 18 457.812 18 454.5 c 645 454.5 m 651 454.5 l 651 451.188 648.312 448.5 645 448.5 c 641.688 448.5 639 451.188 639 454.5 c 639 457.812 641.688 460.5 645 460.5 c 648.312 460.5 651 457.812 651 454.5 c S endstream endobj 199 0 obj << /Type /Page /Parent 497 0 R /Resources 200 0 R /Contents 201 0 R /Thumb 449 0 R /MediaBox [ 0 0 684 873 ] /CropBox [ 0 0 684 873 ] /Rotate 0 >> endobj 200 0 obj << /ProcSet [ /PDF /Text ] /Font << /F1 515 0 R /F2 518 0 R /F3 261 0 R /F5 262 0 R /F8 268 0 R /F11 271 0 R >> /ExtGState << /GS1 523 0 R /GS2 521 0 R >> /ColorSpace << /Cs9 520 0 R >> >> endobj 201 0 obj << /Length 9544 >> stream 1 g /GS1 gs 0 873 m 0 873 l f q 1 i 27 846 603 -783 re 0 873 m W n 0 873 684 -873 re W n BT /F2 1 Tf 7 0 0 7 96.3114 805.2832 Tm 0 0 0 1 k /GS2 gs -0.0751 Tc 0.0599 Tw [(foreach $link \($wordobj->links\) { # process array of links)]TJ 2.3794 -1.1429 TD -0.0652 Tc [(if \($link->linklabel =~ /^G|AN/\) { )]TJ 2.1394 -1.1429 TD -0.0651 Tc ($wordlist[$link->linkposition] = $link->linkword;)Tj -2.1394 -1.1429 TD 0 Tc 0 Tw (})Tj -2.3794 -1.1429 TD -0.0653 Tc (} )Tj T* -0.0651 Tc 0.0599 Tw [(print join \(" ", @wordlist, $wordtxt\), " $verb\\n";)]TJ -2.3794 -1.1429 TD 0 Tc 0 Tw (})Tj /F1 1 Tf 11 0 0 11 63 733.2832 Tm 0.0199 Tc 0.3559 Tw [(N)29.7(ote ho)11.9(w although w)5.9(e)0( ar)9.7(e looking for matches in)]TJ /F2 1 Tf 9 0 0 9 63 721.2832 Tm -0.0002 Tc 0 Tw ($linkage)Tj /F1 1 Tf 11 0 0 11 106.1894 721.2832 Tm -0.0001 Tc -0.0343 Tw [(, w)5.8(e)0( ar)9.7(e using a method, )]TJ /F2 1 Tf 9 0 0 9 209.9307 721.2832 Tm -0.0002 Tc 0 Tw ($linkage->word)Tj /F1 1 Tf 11 0 0 11 285.5123 721.2832 Tm -0.0001 Tc -0.0344 Tw (, in the)Tj -20.2284 -1.0909 TD 0.0199 Tc 0.4048 Tw [(next line. \(S)11.9(eeing objects used in both scalar and)]TJ T* -0.0001 Tc 0.0101 Tw [(der)9.7(efer)9.7(enced context may look confusing at first.\) Also, w)5.8(e)]TJ T* 0.1679 Tw [(stor)9.7(e the wor)13.8(ds in the )]TJ /F2 1 Tf 9 0 0 9 166.7949 685.2832 Tm -0.0002 Tc 0 Tw (@wordlist)Tj /F1 1 Tf 11 0 0 11 219.9798 685.2832 Tm -0.0001 Tc 0.1679 Tw (array to maintain the)Tj -14.2709 -1.0909 TD -0.0069 Tw [(or)13.8(der of these wor)13.8(ds. )14.9(When r)-7.9(un with sentences pr)5.8(o)15.9(vided b)5.8(y)]TJ T* 0.025 Tw [(the user)59.7(, this block of code prints the follo)11.9(wing:)]TJ /F2 1 Tf 7 0 0 7 81.4756 641.2832 Tm -0.0002 Tc 0.06 Tw (Enter a sentence> )Tj /F11 1 Tf 10.9773 0 TD (He studies rocks.)Tj /F2 1 Tf -10.9773 -1.1429 TD (Enter a sentence> )Tj /F11 1 Tf 10.9773 0 TD (The earthquake rocks the city.)Tj /F2 1 Tf -10.9773 -1.1429 TD (Enter a sentence> )Tj /F11 1 Tf 10.9773 0 TD -0.0001 Tc (The Perl programming language rocks.)Tj /F2 1 Tf -8.9978 -1.1429 TD -0.0002 Tc 0 Tw (-> )Tj /F11 1 Tf 1.8595 0 TD 0.06 Tw [(Perl programming.n language.n rocks)]TJ /F2 1 Tf -3.8391 -1.1429 TD (Enter a sentence> )Tj /F11 1 Tf 10.9773 0 TD (Linux rocks!)Tj /F2 1 Tf -8.9978 -1.1429 TD 0 Tw (-> )Tj /F11 1 Tf 1.8595 0 TD 0.06 Tw (Linux rocks)Tj /F2 1 Tf -3.8391 -1.1429 TD (Enter a sentence> )Tj /F11 1 Tf 10.9773 0 TD -0.0001 Tc [(He was telling me why he thinks that )]TJ 10.2663 -1.1429 TD -0.0002 Tc (San Francisco rocks.)Tj /F2 1 Tf -19.2641 -1.1429 TD 0 Tw (-> )Tj /F11 1 Tf 1.8595 0 TD 0.06 Tw (San Francisco rocks)Tj /F1 1 Tf 11 0 0 11 63 553.2832 Tm -0.0001 Tc 0.2743 Tw [(The final listing for this pr)5.8(ogram is in Listing 1, and)]TJ 0 -1.0909 TD 0.0059 Tc 0.369 Tw [(includes additional modifications to permit possessiv)5.7(e)]TJ T* -0.0001 Tc 0.121 Tw [(pr)5.8(onoun inclusions, gr)5.8(ouping of possessiv)5.8(e pr)5.8(oper nouns,)]TJ T* 0.0039 Tc 0.371 Tw [(conjunctions, past tense, and attributiv)5.9(e adjectiv)5.9(es. A)]TJ T* -0.0001 Tc 0.025 Tw [(demonstration is sho)11.9(wn belo)11.9(w)74.9(.)]TJ /F2 1 Tf 7 0 0 7 81.0556 486.2832 Tm -0.0152 Tc 0.06 Tw (Enter a sentence> )Tj /F11 1 Tf 10.7073 0 TD (Roland Orzabal's music rocks.)Tj /F2 1 Tf -8.7728 -1.1429 TD 0 Tw (-> )Tj /F11 1 Tf 1.8146 0 TD 0.06 Tw (Roland Orzabal 's.p music.n rocks)Tj /F2 1 Tf 36.1081 46.7143 TD (Enter a sentence> )Tj /F11 1 Tf 10.7073 0 TD (Strangelove rolls, rumbles, and rocks.)Tj /F2 1 Tf -8.7728 -1.1429 TD 0 Tw (-> )Tj /F11 1 Tf 1.8146 0 TD 0.06 Tw (Strangelove rocks)Tj /F2 1 Tf -3.7491 -1.1429 TD (Enter a sentence> )Tj /F11 1 Tf 10.7073 0 TD [(The Perl conference rocked!)]TJ /F2 1 Tf -8.7728 -1.1429 TD 0 Tw (-> )Tj /F11 1 Tf 1.8146 0 TD 0.06 Tw (Perl Conference rocked)Tj /F2 1 Tf -3.7491 -1.1429 TD (Enter a sentence> )Tj /F11 1 Tf 10.7073 0 TD [(The shogimogu pyonuki dancers rock!!!)]TJ /F2 1 Tf -8.7728 -1.1429 TD 0 Tw (-> )Tj /F11 1 Tf 1.8146 0 TD 0.06 Tw (shogimogu[?].a pyonuki[?].a dancers.n rock)Tj /F1 1 Tf 11 0 0 11 342 740.2832 Tm -0.0001 Tc -0.0306 Tw [(\()-11.9(Thanks to my wife for pointing out all of the grammar that)]TJ 0 -1.0909 TD 0.025 Tw [(would not wor)5.8(k with my first attempts.\))]TJ 0 -2.2727 TD -0.0101 Tc 0.1385 Tw (Although the parser has no clue what the )Tj /F2 1 Tf 9 0 0 9 526.4654 703.2832 Tm 0 Tw (shogimogu)Tj /F1 1 Tf 11 0 0 11 578.4076 703.2832 Tm -0.0102 Tc (and)Tj /F2 1 Tf 9 0 0 9 342 691.2832 Tm (pyonuki)Tj /F1 1 Tf 11 0 0 11 381.6646 691.2832 Tm -0.0101 Tc -0.0124 Tw (mean \(nothing at all, as it happens\), it is still able to)Tj -3.6059 -1.0909 TD 0.0631 Tw [(identify these as attributiv)5.9(e adjectiv)5.8(es. Any)5.8(one who has ev)5.8(er)]TJ T* 0.025 Tw [(used another grammar-based parser will appr)9.8(eciate this feat.)]TJ 0 -2.2727 TD -0.0001 Tc 0.0676 Tw [(W)77.8(e)0( could compile literally thousands of patterns to match)]TJ 0 -1.0909 TD 0.1479 Tw [(v)5.9(arious grammatical phenomena, stor)9.7(e them in constants)]TJ T* 0.0775 Tw [(within a module, and end up with a dir)9.7(ect r)9.7(egex inter)-7.9(face)]TJ T* 0.0199 Tc 1.1457 Tw [(for analyzing grammar)59.8(.)-0.1( )44.8(That will be the)]TJ T* -0.0001 Tc 0.025 Tw [(Lingua::LinkP)41.9(arser::R)11.9(egex module, curr)9.7(ently in pr)5.8(ogr)9.7(ess.)]TJ /F8 1 Tf 12 0 0 12 342 567.2832 Tm 0 Tc 0 Tw (T)Tj 10.44 0 0 10.44 350.4226 567.2832 Tm 0.0225 Tc (HE)Tj 12 0 0 12 368.6605 567.2832 Tm 0 Tc (W)Tj 10.44 0 0 10.44 380.5137 567.2832 Tm 0.0227 Tc [(HA)81.5(T)]TJ 12 0 0 12 401.4763 567.2832 Tm 0.0197 Tc (-S)Tj 10.44 0 0 10.44 411.841 567.2832 Tm 0.0228 Tc (UCKS)Tj 12 0 0 12 440.2108 567.2832 Tm 0.0198 Tc (-O)Tj 10.44 0 0 10.44 454.0325 567.2832 Tm 0.0228 Tc (METER)Tj /F1 1 Tf 11 0 0 11 342 541.2832 Tm -0.0001 Tc 0.0186 Tw [(U)29.8(sing this frame)-5.9(wor)5.8(k, the )]TJ /F5 1 Tf 10.378 0 TD (What languages suck?)Tj /F1 1 Tf 8.2318 0 TD -0.0002 Tc 0 Tw (application)Tj -18.6098 -1.0909 TD -0.0001 Tc 0.3385 Tw [(could be extended to r)9.7(etriev)5.8(e w)5.8(eb links to the pages)]TJ T* 0.2084 Tw [(r)9.9(esulting fr)5.8(om a sear)5.8(ch engine quer)-17.9(y for )]TJ /F2 1 Tf 9 0 0 9 529.471 517.2832 Tm -0.0002 Tc 0 Tw (rocks)Tj /F1 1 Tf 11 0 0 11 556.4644 517.2832 Tm 0 Tc (, )Tj /F2 1 Tf 9 0 0 9 564.2565 517.2832 Tm -0.0002 Tc (rules)Tj /F1 1 Tf 11 0 0 11 591.2499 517.2832 Tm 0 Tc (,)Tj /F2 1 Tf 9 0 0 9 342 505.2832 Tm -0.0002 Tc (sucks)Tj /F1 1 Tf 11 0 0 11 368.9934 505.2832 Tm -0.0001 Tc 0.0046 Tw [(, and so on. )44.8(The text of each page could then be split)]TJ -2.4539 -1.0909 TD 0.1698 Tw [(into sentences, parsed with the code sho)11.9(wn her)9.7(e to find)]TJ T* 0.286 Tw [(specific wor)13.8(d usages, and graphing the r)9.7(esults. I won)69.8()79.9(t)]TJ 12 0 0 12 517.3723 90.3543 Tm 0 Tc 0 Tw (F)Tj 10.44 0 0 10.44 523.4518 90.3543 Tm -0.0001 Tc (ALL)Tj 12 0 0 12 544.7999 90.3543 Tm 0 Tc 0.025 Tw [(2000 65)]TJ /F3 1 Tf -40.15 0 TD -0.0002 Tc 0.0255 Tw [(The P)47.6(erl J)35.7(our)-8(nal #19)]TJ ET 0 0 0 0.1 k /GS1 gs 63.5 458.5 530 -341 re 162.892 90.354 m f* 0 0 0 1 K 0 J 0 j 1 w 10 M []0 d 63.5 458.5 530 -341 re S BT /F8 1 Tf 24 0 0 24 244.9541 325.7976 Tm 0 0 0 1 k /GS2 gs -0.0003 Tc 0 Tw [(P)11.8(ERL)-255.2(AR)35.6(CHIVE)]TJ 1.7534 -1.2 TD -0.0002 Tc 0.0255 Tw (1/2 page)Tj 0.57 -2.4 TD -0.0004 Tc 0 Tw [(NE)11.6(W)]TJ ET Q 0 0 0 0 k /GS2 gs 1 i 37 874 191 -12 re 356.29 239.398 m f* BT /F2 1 Tf 8 0 0 8 39 864 Tm /Cs9 cs 1 scn -0.0004 Tc -0.0019 Tw (TPJ#19/9.26 9/27/00 10:35 AM Page 65)Tj ET 1 G 0 J 0 j 0.5 w 10 M []0 d 36 873 m 36 849 l 0 837 m 24 837 l 621 873 m 621 849 l 657 837 m 633 837 l 36 36 m 36 60 l 0 72 m 24 72 l 621 36 m 621 60 l 657 72 m 633 72 l S /Cs9 CS 1 SCN 0.25 w 36 873 m 36 849 l 0 837 m 24 837 l 621 873 m 621 849 l 657 837 m 633 837 l 36 36 m 36 60 l 0 72 m 24 72 l 621 36 m 621 60 l 657 72 m 633 72 l S 1 G 0.5 w 304.5 861 m 352.5 861 l 304.5 48 m 352.5 48 l 12 478.5 m 12 430.5 l 645 478.5 m 645 430.5 l 328.5 873 m 328.5 849 l 328.5 60 m 328.5 36 l 0 454.5 m 24 454.5 l 633 454.5 m 657 454.5 l 328.5 861 m 334.5 861 l 334.5 857.688 331.812 855 328.5 855 c 325.188 855 322.5 857.688 322.5 861 c 322.5 864.312 325.188 867 328.5 867 c 331.812 867 334.5 864.312 334.5 861 c 328.5 48 m 334.5 48 l 334.5 44.688 331.812 42 328.5 42 c 325.188 42 322.5 44.688 322.5 48 c 322.5 51.312 325.188 54 328.5 54 c 331.812 54 334.5 51.312 334.5 48 c 12 454.5 m 18 454.5 l 18 451.188 15.312 448.5 12 448.5 c 8.688 448.5 6 451.188 6 454.5 c 6 457.812 8.688 460.5 12 460.5 c 15.312 460.5 18 457.812 18 454.5 c 645 454.5 m 651 454.5 l 651 451.188 648.312 448.5 645 448.5 c 641.688 448.5 639 451.188 639 454.5 c 639 457.812 641.688 460.5 645 460.5 c 648.312 460.5 651 457.812 651 454.5 c S /Cs9 CS 1 SCN 0.25 w 304.5 861 m 352.5 861 l 304.5 48 m 352.5 48 l 12 478.5 m 12 430.5 l 645 478.5 m 645 430.5 l 328.5 873 m 328.5 849 l 328.5 60 m 328.5 36 l 0 454.5 m 24 454.5 l 633 454.5 m 657 454.5 l 328.5 861 m 334.5 861 l 334.5 857.688 331.812 855 328.5 855 c 325.188 855 322.5 857.688 322.5 861 c 322.5 864.312 325.188 867 328.5 867 c 331.812 867 334.5 864.312 334.5 861 c 328.5 48 m 334.5 48 l 334.5 44.688 331.812 42 328.5 42 c 325.188 42 322.5 44.688 322.5 48 c 322.5 51.312 325.188 54 328.5 54 c 331.812 54 334.5 51.312 334.5 48 c 12 454.5 m 18 454.5 l 18 451.188 15.312 448.5 12 448.5 c 8.688 448.5 6 451.188 6 454.5 c 6 457.812 8.688 460.5 12 460.5 c 15.312 460.5 18 457.812 18 454.5 c 645 454.5 m 651 454.5 l 651 451.188 648.312 448.5 645 448.5 c 641.688 448.5 639 451.188 639 454.5 c 639 457.812 641.688 460.5 645 460.5 c 648.312 460.5 651 457.812 651 454.5 c S endstream endobj 202 0 obj << /Type /Page /Parent 497 0 R /Resources 203 0 R /Contents 204 0 R /Thumb 451 0 R /MediaBox [ 0 0 684 873 ] /CropBox [ 0 0 684 873 ] /Rotate 0 >> endobj 203 0 obj << /ProcSet [ /PDF /Text ] /Font << /F1 515 0 R /F2 518 0 R /F3 261 0 R /F5 262 0 R /F8 268 0 R /F10 270 0 R >> /ExtGState << /GS1 523 0 R /GS2 521 0 R >> /ColorSpace << /Cs9 520 0 R >> >> endobj 204 0 obj << /Length 10759 >> stream 1 g /GS1 gs 0 873 m 0 873 l f q 1 i 27 846 603 -783 re 0 873 m W n 0 873 684 -873 re W n BT /F1 1 Tf 11 0 0 11 63 802.0776 Tm 0 0 0 1 k /GS2 gs -0.0151 Tc 0.3221 Tw [(outline ho)11.9(w such a utility)]TJ 0 -1.0909 TD 0.0049 Tc 0.4204 Tw [(would be dev)5.8(eloped; the)]TJ T* -0.0151 Tc 0.0676 Tw [(documentation for the L)109.8(W)0.1(P)]TJ T* -0.0292 Tw [(and GD modules tells y)5.8(ou all)]TJ T* 0.0049 Tc 0.6721 Tw [(y)5.8(ou need to kno)11.9(w)74.9(.)-0.1( I)5.8(f)]TJ T* 0.3846 Tw (anybody does write it, I)Tj T* 0.7848 Tw (suggest having multiple)Tj T* 0.4444 Tw [(ex)11.9(clamation points count)]TJ T* 0.6872 Tw [(pr)5.8(ogr)9.7(essiv)5.8(ely against the)]TJ /F2 1 Tf 9 0 0 9 63 694.0776 Tm -0.0152 Tc 0 Tw (rocks)Tj /F1 1 Tf 11 0 0 11 93.2853 694.0776 Tm 0.1256 Tw (rating of the subject,)Tj -2.7532 -1.0909 TD -0.0223 Tw [(rather than for it. )14.9(W)77.8(e)0( need to)]TJ T* 0.025 Tw [(discourage that. )44.8(Thank y)5.8(ou.)]TJ 0 -2.1818 TD 0.0199 Tc 0.9923 Tw [(Cer)-7.9(tainly the possible)]TJ 0 -1.0909 TD -0.0001 Tc 0.1366 Tw (applications of this type of)Tj T* 0.0696 Tw [()49.9(r)9.9(egex grammar)19.7()0( extend far)]TJ T* 0.1452 Tw [(bey)5.8(ond the to)11.9(y application)]TJ T* 0.0199 Tc 0.5256 Tw [(I)49.7(v)5.9(e)0( sho)11.9(wn her)9.7(e. S)23.9(m)0.2(ar)-7.9(t)]TJ T* 0.0055 Tc 0.3694 Tw [(sear)5.8(ch engines, document)]TJ T* -0.0001 Tc 0.0111 Tw [(categoriz)5.8(ers, and automated)]TJ T* 0.0199 Tc 0.3863 Tw [(r)9.9(esponse systems all can)]TJ T* -0.0001 Tc 0.2887 Tw [(make use of similar fr)5.8(ont)]TJ T* 0.025 Tw (ends to natural language.)Tj /F8 1 Tf 12 0 0 12 63 512.0776 Tm 0 Tc 0 Tw (T)Tj 10.44 0 0 10.44 71.4226 512.0776 Tm 0.0227 Tc (HERE)Tj 12 0 0 12 99.8102 512.0776 Tm 0 Tc ()Tj 10.44 0 0 10.44 103.0238 512.0776 Tm (S)Tj 12 0 0 12 112.1289 512.0776 Tm (L)Tj 10.44 0 0 10.44 118.9006 512.0776 Tm -0.019 Tc [(OT)-29.9(S)]TJ 12 0 0 12 143.3096 512.0776 Tm 0 Tc (M)Tj 10.44 0 0 10.44 154.6003 512.0776 Tm 0.0228 Tc (ORE)Tj 12 0 0 12 63 498.0776 Tm 0 Tc (H)Tj 10.44 0 0 10.44 72.9812 498.0775 Tm 0.0227 Tc (ERE)Tj /F1 1 Tf 11 0 0 11 63 472.0776 Tm 0.0199 Tc 0.3851 Tw [(The Link G)23.9(r)0(ammar can)]TJ T* -0.0001 Tc 0.0767 Tw [(har)13.8(dly be fully described in)]TJ T* 0.0241 Tw [(this ar)-7.9(ticle, and I encourage)]TJ T* 0.2493 Tw [(any)5.8(one inter)9.7(ested to delv)5.8(e)]TJ T* 0.1057 Tw [(fur)-7.9(ther into the r)9.7(esear)5.8(ch in)]TJ T* 0.2415 Tw [(this field. )44.9(Ther)9.7(e is lots of)]TJ T* 0.0082 Tc 0.3667 Tw [(r)6(oom her)9.7(e for continued)]TJ T* -0.0001 Tc 0.2133 Tw [(inno)15.8(v)5.9(ation, and the parser)]TJ T* 0.0116 Tc 0.3633 Tw [(itself has much mor)9.7(e to)]TJ T* 0.0199 Tc 0.631 Tw [(offer than what)17.8()79.9(s)-0.1( been)]TJ T* -0.0001 Tc 0.025 Tw [(described her)9.7(e.)]TJ /F10 1 Tf 0 -2.1818 TD 0.0278 Tw (_ _END_ _)Tj /F5 1 Tf T* 0.2333 Tw [(D)6(an is not ashamed of the)]TJ 0 -1.0909 TD 0.0062 Tc 0.3687 Tw (time he has spent playing)Tj /F1 1 Tf T* -0.0001 Tc 0.025 Tw [(D)12.1(iablo II. )]TJ /F5 1 Tf 4.1369 0 TD [(H)23.8(e)0( should be.)]TJ /F8 1 Tf 12 0 0 12 63 254.0776 Tm 0 Tc 0 Tw (R)Tj 10.44 0 0 10.44 71.1091 254.0776 Tm 0.0228 Tc (EFERENCES)Tj /F1 1 Tf 11 0 0 11 63 230.0776 Tm -0.0101 Tc 0.5206 Tw [(Link G)23.9(r)0(ammar w)5.8(e)-0.1(b site,)]TJ 0 -1.0909 TD -0.015 Tc 0 Tw [(http://bobo)15.8(.link.cs.cmu.edu/)]TJ T* -0.0301 Tc (index.html/.)Tj 0 -2.1818 TD -0.0001 Tc 0.0601 Tw [(D)6(a)0(niel S)11.9(leator and D)5.8(avy )44.8(T)119.9(emperley)84.9(, )]TJ /F5 1 Tf 14.4446 0 TD [(P)54.1(arsing E)17.8(nglish with a)]TJ -14.4446 -1.0909 TD -0.0002 Tc 0.1115 Tw [(L)11.9(ink G)17.7(r)29.8(ammar)]TJ /F1 1 Tf 5.8043 0 TD -0.0001 Tc 0.1114 Tw [(, )44.8(Thir)13.8(d I)11.9(nternational )14.8(W)77.8(o)0.2(r)5.8(kshop on P)41.9(arsing)]TJ -5.8043 -1.0909 TD 0.025 Tw [(T)119.9(echnologies, A)17.8(ugust 1993.)]TJ 0 -2 TD 0.0601 Tw [(D)6(a)0(niel S)11.9(leator and D)5.8(avy )44.8(T)119.9(emperley)84.9(, )]TJ /F5 1 Tf 14.4446 0 TD [(P)54.1(arsing E)17.8(nglish with a)]TJ -14.4446 -1.0909 TD -0.0002 Tc 0.3471 Tw [(L)11.9(ink G)17.7(r)29.8(ammar)]TJ /F1 1 Tf 6.0398 0 TD -0.0001 Tc 0.3469 Tw [(, Carnegie M)23.9(ellon U)35.8(niv)5.8(ersity Computer)]TJ 19.3238 5.3986 TD 0.025 Tw [(Science technical r)9.7(epor)-7.9(t CMU-CS-91-196, O)5.8(c)0(tober 1991.)]TJ 0 -2 TD 0.3004 Tw [(D)6(ennis G)23.9(rinberg, J)29.7(ohn Laffer)-7.9(ty)84.9(, and D)5.8(a)0(niel S)11.9(leator)59.7(, )]TJ /F5 1 Tf 22.3131 0 TD 0 Tc 0 Tw (A)Tj -22.3131 -1.0909 TD -0.0001 Tc 0.0088 Tw [(r)5.9(obust parsing algorithm for link gr)29.7(ammars)]TJ /F1 1 Tf 15.9022 0 TD [(, Carnegie M)23.9(ellon)]TJ -15.9022 -1.0909 TD 0.1639 Tw [(U)35.9(niv)5.8(ersity Computer Science technical r)9.7(epor)-7.9(t CMU-CS-)]TJ T* 0 Tc 0 Tw (95-125.)Tj 12 0 0 12 63 90.3543 Tm [(66)-1100(F)]TJ 10.44 0 0 10.44 94.2795 90.3543 Tm -0.0001 Tc (ALL)Tj 12 0 0 12 115.6277 90.3543 Tm 0 Tc (2000)Tj /F3 1 Tf 30.9897 0.0003 TD -0.0002 Tc 0.0255 Tw [(The P)47.6(erl J)35.7(our)-8(nal #19)]TJ ET 0 0.03 0.3 0 k 199.46 810 394.54 -608.62 re 587.395 90.357 m f* BT /F8 1 Tf 12 0 0 12 207.66 789.4196 Tm 0 0 0 1 k [(Listing 1. U)29.5(sing Lingua::LinkP)41.8(arser to determine what r)19.6(eally r)5.7(ocks.)]TJ /F2 1 Tf 7 0 0 7 207.66 768.9196 Tm 0.06 Tw (#!/usr/bin/perl -w)Tj 0 -2.4286 TD -0.0001 Tc [(# For this to work, the overload parameter in ::Linkage and )]TJ 0 -1.2143 TD [(# ::Sublinkage must point to "new_as_string".)]TJ 0 -2.4286 TD -0.0002 Tc (use Lingua::LinkParser;)Tj 0 -1.2143 TD (use strict;)Tj 0 -2.4286 TD -0.0001 Tc [(my $parser = new Lingua::LinkParser;)]TJ T* [($parser->opts\('disjunct_cost' => 2\);)]TJ 0 -1.2143 TD [($parser->opts\('linkage_limit' => 101\);)]TJ 0 -2.4286 TD -0.0002 Tc (while \(1\) {)Tj 2.6394 -1.2143 TD -0.0001 Tc [(print "Enter a sentence> "; )]TJ T* -0.0002 Tc (my $input = ;)Tj T* -0.0001 Tc (my $sentence = $parser->create_sentence\($input\);)Tj T* [(my $linkage = $sentence->linkage\(1\);)]TJ T* [(# computing the union and then using the last sublinkage )]TJ T* -0.0002 Tc (# permits conjunctions.)Tj T* 0 Tw ($linkage->compute_union;)Tj T* -0.0001 Tc 0.0599 Tw (my $sublinkage = $linkage->sublinkage\($linkage->num_sublinkages\);)Tj 0 -2.4286 TD -0.0002 Tc [(my $what_rocks = 'S[s|p]' .)-6118.8(#)0( match the link label)]TJ 11.8772 -1.2143 TD -0.0001 Tc [('\(?:[\\w\\*]{1,2}\)*'.# match any optional subscripts)]TJ T* -0.0002 Tc [('\\:\(\\d+\)\\:' .)-3509.3(#)-0.1( match number of the word)]TJ T* [('\(\\w+\(?:\\.\\w\)*\)';)-1199.9(# match and save the word itself)]TJ -11.8772 -1.2143 TD -0.0001 Tc [(my $other_stuff = '[^\\\)]+'; )-6208.8(# match other stuff within parenthesis)]TJ T* [(my $rocks)-4304(= '\\"\(rock[s|ed]*\).v\\"'; # match and store verb)]TJ T* [(my $no_objects = '[^\(?:O.{1,2}\\:' .)-4958.9(#)0( don't match objects)]TJ 11.8772 -1.2143 TD 0 Tw ('\\d+\\:\\w+\(?:\\.\\w\)*\)]*\\\)';)Tj -11.8772 -2.4286 TD 0.0599 Tw [(my $pattern)-3099.4(= "$what_rocks $other_stuff $rocks $no_objects";)]TJ T* [(if \( $sublinkage =~ /$pattern/mx \) {)]TJ 2.6394 -1.2143 TD [(my $wordobj = $sublinkage->word\($1\);)]TJ T* -0.0002 Tc (my $wordtxt = $2;)Tj T* [(my $verb)-2439.6(= $3;)]TJ T* (my @wordlist = \(\);)Tj 0 -2.4286 TD -0.0001 Tc [(# we could put all of the below functionality in the regex above.)]TJ 0 -1.2143 TD [(foreach my $link \($wordobj->links\) {)]TJ 2.6394 -1.2143 TD [(# proper nouns, noun modifiers, pre-noun adjectives)]TJ T* (if \($link->linklabel =~ /^G|AN|A/\) { )Tj 2.6394 -1.2143 TD ($wordlist[$link->linkposition] = $link->linkword;)Tj -2.6394 -1.2143 TD 0 Tc 0 Tw (})Tj T* -0.0001 Tc 0.0599 Tw (# possessive pronouns, via a noun determiner)Tj T* [(if \($link->linklabel =~ /^D[s|m]/\) {)]TJ 2.6394 -1.2143 TD [(my $wword = $sublinkage->word\($link->linkposition\);)]TJ T* [(foreach my $llink \($wword->links\) {)]TJ 2.6394 -1.2143 TD (if \($llink->linklabel =~ /^YS/\) {)Tj 2.6394 -1.2143 TD [($wordlist[$llink->linkposition] = $llink->linkword;)]TJ T* [($wordlist[$link->linkposition] = $link->linkword;)]TJ T* (my $wwword = $sublinkage->word\($llink->linkposition\);)Tj T* [(foreach my $lllink \($wwword->links\) {)]TJ 2.6394 -1.2143 TD [(if \($lllink->linklabel =~ /^G|AN/\) {)]TJ 2.6394 -1.2143 TD ($wordlist[$lllink->linkposition] = $lllink->linkword;)Tj -2.6394 -1.2143 TD 0 Tc 0 Tw (})Tj -2.6394 -1.2143 TD (})Tj -2.6394 -1.2143 TD (})Tj -2.6394 -1.2143 TD (})Tj -2.6394 -1.2143 TD (})Tj -2.6394 -1.2143 TD (})Tj T* -0.0001 Tc 0.0599 Tw [(print " -> ", join \(" ", @wordlist, $wordtxt\);)]TJ -2.6394 -1.2143 TD 0 Tc 0 Tw (})Tj -2.6394 -1.2143 TD (})Tj ET Q 0 0 0 0 k /GS2 gs 1 i 37 874 191 -12 re 211.86 216.42 m f* BT /F2 1 Tf 8 0 0 8 39 864 Tm /Cs9 cs 1 scn -0.0004 Tc -0.0019 Tw (TPJ#19/9.26 9/27/00 10:35 AM Page 66)Tj ET 1 G 0 J 0 j 0.5 w 10 M []0 d 36 873 m 36 849 l 0 837 m 24 837 l 621 873 m 621 849 l 657 837 m 633 837 l 36 36 m 36 60 l 0 72 m 24 72 l 621 36 m 621 60 l 657 72 m 633 72 l S /Cs9 CS 1 SCN 0.25 w 36 873 m 36 849 l 0 837 m 24 837 l 621 873 m 621 849 l 657 837 m 633 837 l 36 36 m 36 60 l 0 72 m 24 72 l 621 36 m 621 60 l 657 72 m 633 72 l S 1 G 0.5 w 304.5 861 m 352.5 861 l 304.5 48 m 352.5 48 l 12 478.5 m 12 430.5 l 645 478.5 m 645 430.5 l 328.5 873 m 328.5 849 l 328.5 60 m 328.5 36 l 0 454.5 m 24 454.5 l 633 454.5 m 657 454.5 l 328.5 861 m 334.5 861 l 334.5 857.688 331.812 855 328.5 855 c 325.188 855 322.5 857.688 322.5 861 c 322.5 864.312 325.188 867 328.5 867 c 331.812 867 334.5 864.312 334.5 861 c 328.5 48 m 334.5 48 l 334.5 44.688 331.812 42 328.5 42 c 325.188 42 322.5 44.688 322.5 48 c 322.5 51.312 325.188 54 328.5 54 c 331.812 54 334.5 51.312 334.5 48 c 12 454.5 m 18 454.5 l 18 451.188 15.312 448.5 12 448.5 c 8.688 448.5 6 451.188 6 454.5 c 6 457.812 8.688 460.5 12 460.5 c 15.312 460.5 18 457.812 18 454.5 c 645 454.5 m 651 454.5 l 651 451.188 648.312 448.5 645 448.5 c 641.688 448.5 639 451.188 639 454.5 c 639 457.812 641.688 460.5 645 460.5 c 648.312 460.5 651 457.812 651 454.5 c S /Cs9 CS 1 SCN 0.25 w 304.5 861 m 352.5 861 l 304.5 48 m 352.5 48 l 12 478.5 m 12 430.5 l 645 478.5 m 645 430.5 l 328.5 873 m 328.5 849 l 328.5 60 m 328.5 36 l 0 454.5 m 24 454.5 l 633 454.5 m 657 454.5 l 328.5 861 m 334.5 861 l 334.5 857.688 331.812 855 328.5 855 c 325.188 855 322.5 857.688 322.5 861 c 322.5 864.312 325.188 867 328.5 867 c 331.812 867 334.5 864.312 334.5 861 c 328.5 48 m 334.5 48 l 334.5 44.688 331.812 42 328.5 42 c 325.188 42 322.5 44.688 322.5 48 c 322.5 51.312 325.188 54 328.5 54 c 331.812 54 334.5 51.312 334.5 48 c 12 454.5 m 18 454.5 l 18 451.188 15.312 448.5 12 448.5 c 8.688 448.5 6 451.188 6 454.5 c 6 457.812 8.688 460.5 12 460.5 c 15.312 460.5 18 457.812 18 454.5 c 645 454.5 m 651 454.5 l 651 451.188 648.312 448.5 645 448.5 c 641.688 448.5 639 451.188 639 454.5 c 639 457.812 641.688 460.5 645 460.5 c 648.312 460.5 651 457.812 651 454.5 c S endstream endobj 205 0 obj << /Type /Page /Parent 497 0 R /Resources 206 0 R /Contents 207 0 R /Thumb 453 0 R /MediaBox [ 0 0 684 873 ] /CropBox [ 0 0 684 873 ] /Rotate 0 >> endobj 206 0 obj << /ProcSet [ /PDF /Text ] /Font << /F1 515 0 R /F2 518 0 R /F3 261 0 R /F5 262 0 R /F7 267 0 R /F8 268 0 R /F9 269 0 R >> /ExtGState << /GS1 523 0 R /GS2 521 0 R >> /ColorSpace << /Cs9 520 0 R /Cs10 264 0 R >> >> endobj 207 0 obj << /Length 13210 >> stream 1 g /GS1 gs 0 873 m 0 873 l f q 1 i 27 846 603 -783 re 0 873 m W n 0 873 684 -873 re W n BT /F8 1 Tf 12 0 0 12 63 666.3574 Tm 0 0 0 1 k /GS2 gs 0 Tc 0 Tw (I)Tj 10.44 0 0 10.44 67.4851 666.3574 Tm 0.0228 Tc [(NTR)35.7(ODUCTION)]TJ /F1 1 Tf 29.09 0 0 29.09 63.1413 628.3574 Tm 0 Tc (W)Tj 11 0 0 11 91 640.3574 Tm -0.0001 Tc 0.1009 Tw [(or)5.8(king in the M)11.9(icr)5.8(osoft world of )14.8(W)9.7(indo)11.9(ws, O)5.8(ffice,)]TJ 0 -1.0909 TD 0.0308 Tw [(V)9.9(isual B)11.9(asic, and loosely str)-7.9(uctur)9.7(ed user documents,)]TJ -2.5455 -1.0909 TD 0.0597 Tw [(ther)9.7(e ar)9.7(e a fe)-5.9(w pr)5.8(oblems that r)9.7(egularly appear wher)9.7(e y)5.8(o)0.1(u)49.7()99.9(d)]TJ T* 0.1079 Tw [(like to use P)53.9(erl to tw)5.8(eak a piece of data or per)-7.9(form some)]TJ T* 0.0302 Tw [(task, but can)69.8()79.9(t, because y)5.8(o)0.1(u)49.7()69.9(r)9.9(e)0( deep in the M)11.9(icr)5.8(osoft way of)]TJ T* 0.0971 Tw [(doing things. N)29.7(ormally this lev)5.8(el of integration is har)13.8(d to)]TJ T* -0.0155 Tw [(achiev)5.8(e, but this ar)-7.9(ticle describes ho)11.9(w y)5.8(ou can grab just that)]TJ T* 0.3556 Tw [(little bit of P)53.9(erl when y)5.8(ou want it using tools fr)5.8(om)]TJ T* 0.025 Tw [(A)12.1(ctiv)5.8(e)0.1(S)23.9(tate)29.7()79.9(s)0( P)53.9(erl D)5.8(e)0(v)5.8(elopment Kit.)]TJ 0 -2.1818 TD -0.0051 Tc 0.0734 Tw [(M)12(icr)5.8(osoft tools tend to integrate w)5.7(ell with other M)11.9(icr)5.8(osoft)]TJ 0 -1.0909 TD 0.0467 Tw (tools, and not at all with anything else. And when it comes)Tj T* -0.0263 Tw [(to writing code, y)5.8(o)0.1(u)49.7()69.9(r)9.9(e)0( often for)5.8(ced to use )14.9(VB or a deriv)5.8(ativ)5.8(e,)]TJ T* 0.3357 Tw [(which is not an ideal tool for manipulating text. B)11.8(u)0(t)]TJ T* 0.0489 Tw [(inv)5.8(oking y)5.8(our fav)5.8(orite bit of P)53.9(erl, simply and transpar)9.6(ently)84.9(,)]TJ T* 0.0195 Tw [(deep within the internals of E)5.7(x)12(cel, )14.8(W)77.8(o)0.2(r)13.8(d, )14.8(VB and the like is)]TJ T* 0.2662 Tw [(no)11.9(w much easier)59.7(, thanks to A)11.9(c)0.1(tiv)5.8(eS)23.9(tate)29.7()79.9(s)0( P)53.9(erlCOM and)]TJ T* 0.025 Tw [(P)54(e)0.1(rlCtrl, par)-7.9(ts of their P)53.9(erl D)5.8(e)0(v)5.8(elopment Kit.)]TJ 0 -2.1818 TD -0.0001 Tc 0.0237 Tw [(This ar)-7.9(ticle is describes a scenario in which a complete P)53.9(erl)]TJ 0 -1.0909 TD 0.0859 Tw [(solution \(using an external P)53.9(erl script to automate O)5.8(ffice\))]TJ T* 0.2469 Tw [(wasn)69.8()79.9(t)0.1( appr)5.8(opriate, but a hybrid P)53.9(erl/non-P)53.9(erl appr)5.8(oach)]TJ T* 0.0551 Tw [(was, and ho)11.9(w P)53.9(erlCOM made that hybrid solution almost)]TJ T* 0.025 Tw (trivially simple.)Tj /F8 1 Tf 0 -2.1818 TD -0.0007 Tc 0 Tw [(W)91.3(a)-0.5(rning:)]TJ /F1 1 Tf 4.0047 0 TD -0.0001 Tc 0.1062 Tw [(Ther)9.7(e is )14.8(VB code in the follo)11.9(wing example. I)23.9(t)17.8()79.9(s)]TJ -4.0047 -1.0909 TD 0.2628 Tw [(the subject of the ar)-7.9(ticle, so I can)69.8()79.9(t)0.1( r)9.7(eally skip it. )14.8(Y)93.9(o)0.1(u)]TJ T* 0.0671 Tw [(shouldn)69.8()79.9(t)0( need to kno)11.9(w )14.8(VB in or)13.8(der to r)9.7(ead the examples;)]TJ T* 0.0235 Tw [(they)29.7()69.9(r)9.9(e fairly simple, and as long as y)5.8(ou get the gist of what)]TJ T* 0.025 Tw [(the )14.8(VB code does, y)5.8(o)0.1(u)49.7()12(ll be fine.)]TJ /F8 1 Tf 12 0 0 12 63 266.3574 Tm 0 Tc 0 Tw (B)Tj 10.44 0 0 10.44 70.7634 266.3574 Tm 0.0228 Tc [(A)17.7(C)0.2(K)35.7(G)0.2(R)35.7(OUND)]TJ /F1 1 Tf 11 0 0 11 63 240.3574 Tm -0.0001 Tc 0.103 Tw [(M)24(o)0.2(r)9.7(e)0( fr)9.7(equently than w)5.8(e)29.7()99.9(d)0.1( pr)9.7(efer)59.7(, UK telephone numbers)]TJ T* 0.0125 Tc 0.3624 Tw [(ar)9.7(e subject to wide-r)9.6(eaching changes combined with)]TJ T* -0.0001 Tc 0.0748 Tw [(pr)5.8(omises that )59.7(this will be the last time. )44.9(The most r)9.7(ecent)]TJ T* -0.0149 Tw [(of these changes is the o)15.8(v)5.9(ernight change to London and fiv)5.8(e)]TJ T* 0 Tc 0.3749 Tw [(other city codes, co)15.8(v)5.9(ering o)15.8(v)5.9(er a quar)-7.9(ter of the UK)]TJ T* -0.0001 Tc 0.335 Tw [(population, and all mobile and pager numbers. \(S)11.9(ee)]TJ T* 0.1301 Tw [(http://www)74.9(.number)5.8(change.org/ for the gritty details.\) F)35.8(o)0.2(r)]TJ 25.3636 51.8836 TD 0.1013 Tw [(the sake of this ar)-7.9(ticle, I)11.9(ll limit the discussion to just the)]TJ 0 -1.0909 TD 0.246 Tw [(London numbers, for which the sev)5.8(en-digit local codes)]TJ T* 0.025 Tw [(became eight-digit codes o)15.8(v)5.9(ernight:)]TJ /F2 1 Tf 7 0 0 7 351.2378 694.0776 Tm 0.0599 Tw [(0171 xxx xxxx \(Central London\) becomes 020 7xxx xxxx)]TJ 0 -2.2857 TD [(0181 xxx xxxx \(Outer London\) becomes 020 8xxx xxxx)]TJ /F1 1 Tf 11 0 0 11 342 658.0776 Tm 0.0482 Tw [(I)12(n)0( any large company)84.9(, ther)9.7(e ar)9.7(e plenty of data sour)5.8(ces that)]TJ 0 -1.0909 TD 0.0199 Tc 0.6369 Tw [(need updating, and it)17.8()79.9(s)0( the semi-str)-7.8(uctur)9.7(ed and)]TJ T* -0.0001 Tc 0.025 Tw [(unstr)-7.9(uctur)9.7(ed data sour)5.8(ces that ar)9.7(e har)13.8(dest to change.)]TJ 0 -2.1818 TD -0.0101 Tc 0.0973 Tw [(D)6(atabases with pr)5.8(oper telephone number fields, wher)9.8(e ar)9.7(ea)]TJ 0 -1.0909 TD -0.0026 Tw [(codes and numbers ar)9.8(e pr)5.8(operly separated, ar)9.8(e easy to change)]TJ T* 0.0723 Tw [(with one-time scripts. )45(The tr)5.8(ouble arises in the messy ar)9.8(eas:)]TJ T* 0.0099 Tc 0.3755 Tw [(text files, wor)13.8(d pr)5.8(ocessing documents, and all those)]TJ T* -0.0101 Tc 0.1501 Tw [(ubiquitous spr)9.7(eadsheets \(I wor)5.8(k for inv)5.8(estment banks; I)49.8(v)5.9(e)]TJ T* 0.0833 Tw [(seen people write essays in M)12(icr)5.8(osoft E)5.8(x)12(cel because it)17.8()79.9(s)-0.1( the)]TJ T* -0.0338 Tw [(only pr)5.8(ogram I understand)12(\). I)5.8(f)0( y)5.8(ou just blindly modify ev)5.9(er)-17.9(y)]TJ T* -0.0187 Tw [(cell, y)5.8(ou risk conv)5.8(er)-7.9(ting data that shouldn)69.8()79.9(t)0( r)9.7(eally be touched.)]TJ /F8 1 Tf 12 0 0 12 342 500.0776 Tm 0 Tc 0 Tw (T)Tj 10.44 0 0 10.44 350.4226 500.0776 Tm 0.0225 Tc (HE)Tj 12 0 0 12 369.0352 500.0776 Tm 0 Tc (P)Tj 10.44 0 0 10.44 376.3298 500.0776 Tm 0.0228 Tc [(R)35.9(O)-0.1(BLEM)]TJ /F1 1 Tf 11 0 0 11 342 474.0776 Tm 0 Tc 0.0032 Tw [(W)77.9(e)0.1( hav)5.9(e quite a fe)-5.8(w spr)9.8(eadsheets \(such as telephone books\))]TJ T* -0.0001 Tc 0.1869 Tw [(with contact information scatter)9.7(ed thr)5.8(oughout. M)11.9(any of)]TJ T* 0.0348 Tw [(these had old-style \(sev)5.8(en-digit\) Central London telephone)]TJ T* 0.025 Tw [(numbers, or w)5.8(e)0.1(r)9.7(e)0( loosely formatted:)]TJ 0 -6.9091 TD -0.0051 Tc 0.1969 Tw [(This is easy to conv)5.7(er)-7.9(t with a cute application of a P)53.8(erl)]TJ 0 -1.0909 TD -0.0245 Tw [(r)9.9(egular expr)9.7(ession or two)15.8(. )44.9(The usual appr)5.8(oach is to automate)]TJ T* 0.1971 Tw [(E)5.8(x)12(cel with )14.8(W)9.7(in32::OLE,)]TJ 7.15 0 0 7.15 451.5862 340.5496 Tm 0 Tc 0 Tw (1)Tj 11 0 0 11 459.9688 338.0776 Tm -0.0051 Tc 0.1971 Tw (but then my standalone script)Tj -10.7244 -1.0909 TD -0.034 Tw [(isn)69.8()79.9(t)0( interacting with the user)59.7(, and I don)69.8()79.9(t)0( want to just blindly)]TJ T* 0.0489 Tw [(modify all cells, which would cause a pr)5.7(oblem with the last)]TJ T* 0.0445 Tw [(example abo)15.8(v)5.9(e. I could automate E)5.8(x)12(cel and make it ask the)]TJ T* 0.1386 Tw [(user befor)9.7(e each modification, but that would be tedious.)]TJ T* 0.0633 Tw [(What I)99.8(d r)9.7(eally like to do is let the user contr)5.7(ol the pr)5.8(ocess)]TJ T* 0.1702 Tw [(fr)5.8(om within E)5.8(x)12(cel, let them select the cells they)29.7()99.9(d)0( like to)]TJ T* 0.0907 Tw [(modify)84.9(, and then inv)5.8(oke my conv)5.8(ersion script on all those)]TJ T* 0.025 Tw [(cells, whether it)17.7()79.9(s)0( one or a thousand.)]TJ 0 -2.2727 TD -0.0001 Tc 0.2151 Tw [(M)12(icr)5.8(osoft pr)5.8(o)15.9(vides a built-in pr)5.8(ogramming envir)5.8(onment)]TJ 0 -1.0909 TD 0.1466 Tw [(for this, using )14.8(VBA \()-12(V)9.9(isual B)11.9(asic for A)11.9(pplications\) as an)]TJ T* 0.0552 Tw [(embedded scripting language based on )14.8(VB \(it used to be a)]TJ T* 0.053 Tw [(subset, but no)11.9(w it has extra featur)9.7(es and is best consider)9.7(ed)]TJ T* 0.0192 Tw [(a differ)9.7(ent, but r)9.7(elated, pr)5.8(oduct\). )14.8(VBA, being embedded in)]TJ 12 0 0 12 517.3723 90.3543 Tm 0 Tc 0 Tw (F)Tj 10.44 0 0 10.44 523.4518 90.3543 Tm -0.0001 Tc (ALL)Tj 12 0 0 12 544.7999 90.3543 Tm 0 Tc 0.025 Tw [(2000 67)]TJ /F3 1 Tf -40.15 0 TD -0.0002 Tc 0.0255 Tw [(The P)47.6(erl J)35.7(our)-8(nal #19)]TJ ET 0 0 0 0 k 63 798 531 -37.5 re 162.892 90.354 m f* BT /F8 1 Tf 16 0 0 16 63 786.4766 Tm 0 0 0 1 k 0 Tc 0 Tw (I)Tj 13.92 0 0 13.92 68.6602 786.4766 Tm -0.0002 Tc [(NTEGRA)81.6(TING)]TJ 16 0 0 16 164.2339 786.4766 Tm 0 Tc (P)Tj 13.92 0 0 13.92 173.4736 786.4766 Tm -0.0003 Tc [(ERL)-322.6(INT)35.6(O)]TJ 16 0 0 16 243.2331 786.4766 Tm 0 Tc (M)Tj 13.92 0 0 13.92 257.9674 786.4766 Tm -0.0002 Tc [(ICR)35.7(OSOFT)]TJ /F7 1 Tf 16 0 0 16 467.7757 786.4766 Tm -0.0001 Tc 0.0211 Tw [(Tim Meado)29.7(wcr)19.7(oft)]TJ /F8 1 Tf -25.2985 -1.125 TD 0 Tc 0 Tw (O)Tj 13.92 0 0 13.92 75.6719 768.4766 Tm -0.0002 Tc (FFICE)Tj 16 0 0 16 117.6492 768.4766 Tm 0 Tc (I)Tj 13.92 0 0 13.92 123.3093 768.4766 Tm -0.0002 Tc (NNARDS)Tj ET /Cs10 CS 1 SCN 0 J 0 j 6 w 10 M []0 d 63 807 m 207 807 l S 0 0.03 0.3 0 k /GS1 gs 63.25 746.75 251.5 -53.5 re 180.798 768.477 m f* BT /F9 1 Tf 12 0 0 12 129.7327 730.3938 Tm 0 0 0 1 k /GS2 gs -0.0001 Tc 0.0278 Tw [(Commer)24.8(cial Pr)24.8(oduct)]TJ /F1 1 Tf 11 0 0 11 72.5751 704.3938 Tm 0.025 Tw [(P)54(erl D)5.8(e)0(v)5.8(elopment Kit \($95\)...........www)74.9(.activ)5.8(estate.com)]TJ ET 0 0 0 1 K 0.5 w /GS1 gs 63.25 746.75 251.5 -53.5 re 310.968 704.394 m S BT 8 0 0 8 342 422.3683 Tm /GS2 gs -0.0101 Tc [(T)39.8(im M)23.8(eado)11.9(w)5.8(c)0.2(r)5.8(oft)-666.2(220 8537)-2589.9(\(0171 implied\))]TJ 0 -1.375 TD [(R)12.1(eception)-3771.9(8000)-4324.9(\(0171 220 implied\))]TJ T* [(T)39.8(i)0.2(m)69.7()79.9(s F)47.7(a)0.2(x)-4005.2(220-8375/6/7)-931.3(\(0171 implied, multiple numbers\))]TJ T* [(T)39.8(i)0.2(m)69.7()79.9(s D)5.8(epar)-7.9(tment)-659.1(800 0001)-2589.9(\(not a phone number)59.6(, but a depar)-8(tment code\))]TJ ET 0 0 0 0 k 63 143.39 531 -34.26 re 593.11 389.368 m f* BT 6 0 0 6 63 138.8867 Tm 0 0 0 1 k 0 Tc 0 Tw (1)Tj /F5 1 Tf 9 0 0 9 66 136.9066 Tm -0.0002 Tc 0.0252 Tw [(OLE A)17.6(utomation)]TJ /F1 1 Tf 6.7966 0 TD -0.0001 Tc 0.025 Tw [(is a system wher)9.7(e M)11.9(icr)5.8(osoft exposes all the innar)13.8(ds of an application so that pr)5.7(ograms able to talk to OLE objects can operate )]TJ 49.0616 0 TD 0 Tw (the)Tj -56.1915 -1.1111 TD 0.025 Tw [(application. )44.8(This is v)5.8(e)0.1(r)-17.9(y)0( po)11.9(w)5.9(e)0.1(r)-7.9(ful for the right type of pr)5.8(oblem, and the )14.8(W)9.7(in32::OLE module makes this possible. E)11.9(ffectiv)5.8(ely)84.9(, y)]TJ 49.6328 0 TD [(our pr)5.8(ogram driv)5.8(es the)]TJ -49.6328 -1.1111 TD [(application, rather than the application inv)5.8(oking y)5.8(our pr)5.8(ogram.)]TJ ET 63 148.14 m 594 148.14 l S Q 0 0 0 0 k 1 i 37 874 191 -12 re 285.557 116.907 m f* BT /F2 1 Tf 8 0 0 8 39 864 Tm /Cs9 cs 1 scn -0.0004 Tc -0.0019 Tw (TPJ#19/9.26 9/27/00 10:35 AM Page 67)Tj ET 1 G 0 J 0 j 0.5 w 10 M []0 d 36 873 m 36 849 l 0 837 m 24 837 l 621 873 m 621 849 l 657 837 m 633 837 l 36 36 m 36 60 l 0 72 m 24 72 l 621 36 m 621 60 l 657 72 m 633 72 l S /Cs9 CS 1 SCN 0.25 w 36 873 m 36 849 l 0 837 m 24 837 l 621 873 m 621 849 l 657 837 m 633 837 l 36 36 m 36 60 l 0 72 m 24 72 l 621 36 m 621 60 l 657 72 m 633 72 l S 1 G 0.5 w 304.5 861 m 352.5 861 l 304.5 48 m 352.5 48 l 12 478.5 m 12 430.5 l 645 478.5 m 645 430.5 l 328.5 873 m 328.5 849 l 328.5 60 m 328.5 36 l 0 454.5 m 24 454.5 l 633 454.5 m 657 454.5 l 328.5 861 m 334.5 861 l 334.5 857.688 331.812 855 328.5 855 c 325.188 855 322.5 857.688 322.5 861 c 322.5 864.312 325.188 867 328.5 867 c 331.812 867 334.5 864.312 334.5 861 c 328.5 48 m 334.5 48 l 334.5 44.688 331.812 42 328.5 42 c 325.188 42 322.5 44.688 322.5 48 c 322.5 51.312 325.188 54 328.5 54 c 331.812 54 334.5 51.312 334.5 48 c 12 454.5 m 18 454.5 l 18 451.188 15.312 448.5 12 448.5 c 8.688 448.5 6 451.188 6 454.5 c 6 457.812 8.688 460.5 12 460.5 c 15.312 460.5 18 457.812 18 454.5 c 645 454.5 m 651 454.5 l 651 451.188 648.312 448.5 645 448.5 c 641.688 448.5 639 451.188 639 454.5 c 639 457.812 641.688 460.5 645 460.5 c 648.312 460.5 651 457.812 651 454.5 c S /Cs9 CS 1 SCN 0.25 w 304.5 861 m 352.5 861 l 304.5 48 m 352.5 48 l 12 478.5 m 12 430.5 l 645 478.5 m 645 430.5 l 328.5 873 m 328.5 849 l 328.5 60 m 328.5 36 l 0 454.5 m 24 454.5 l 633 454.5 m 657 454.5 l 328.5 861 m 334.5 861 l 334.5 857.688 331.812 855 328.5 855 c 325.188 855 322.5 857.688 322.5 861 c 322.5 864.312 325.188 867 328.5 867 c 331.812 867 334.5 864.312 334.5 861 c 328.5 48 m 334.5 48 l 334.5 44.688 331.812 42 328.5 42 c 325.188 42 322.5 44.688 322.5 48 c 322.5 51.312 325.188 54 328.5 54 c 331.812 54 334.5 51.312 334.5 48 c 12 454.5 m 18 454.5 l 18 451.188 15.312 448.5 12 448.5 c 8.688 448.5 6 451.188 6 454.5 c 6 457.812 8.688 460.5 12 460.5 c 15.312 460.5 18 457.812 18 454.5 c 645 454.5 m 651 454.5 l 651 451.188 648.312 448.5 645 448.5 c 641.688 448.5 639 451.188 639 454.5 c 639 457.812 641.688 460.5 645 460.5 c 648.312 460.5 651 457.812 651 454.5 c S endstream endobj 208 0 obj << /Type /Page /Parent 497 0 R /Resources 209 0 R /Contents 210 0 R /Thumb 455 0 R /MediaBox [ 0 0 684 873 ] /CropBox [ 0 0 684 873 ] /Rotate 0 >> endobj 209 0 obj << /ProcSet [ /PDF /Text ] /Font << /F1 515 0 R /F2 518 0 R /F3 261 0 R /F8 268 0 R >> /ExtGState << /GS1 523 0 R /GS2 521 0 R >> /ColorSpace << /Cs9 520 0 R >> >> endobj 210 0 obj << /Length 12196 >> stream 1 g /GS1 gs 0 873 m 0 873 l f q 1 i 27 846 603 -783 re 0 873 m W n 0 873 684 -873 re W n BT /F1 1 Tf 11 0 0 11 63 802.0776 Tm 0 0 0 1 k /GS2 gs -0.0001 Tc 0.1553 Tw [(O)5.8(ffice tools, is gr)9.7(eat for putting a )39.7(fix the selected cells)39.7()]TJ 0 -1.0909 TD 0.0978 Tw [(button on the E)5.8(x)12(cel )44.8(T)119.9(oolbar)59.7(, but not so gr)9.7(eat for actually)]TJ T* 0.2572 Tw [(coding the change, as any)5.8(one who)49.7()79.9(s)0( tried to write text)]TJ T* 0.025 Tw [(manipulation code in )14.8(VB will tell y)5.8(ou.)]TJ 7.15 0 0 7.15 227.9045 768.5496 Tm 0 Tc 0 Tw (2)Tj 11 0 0 11 63 744.0776 Tm -0.0101 Tc 0.0718 Tw [(The basic )14.8(VBA r)5.8(outine is as simple as sho)12(wn belo)11.9(w)74.9(.)-0.1( )44.8(This is)]TJ T* 0.0541 Tw [(written within E)5.9(x)12(cel, and so can be easily attached to a ne)-5.8(w)]TJ T* 0.0246 Tw [(button on an E)5.8(x)12(cel toolbar)59.8(. I)23.9(t)0( loops o)15.8(v)5.9(er all the cells that ar)9.8(e)]TJ T* 0.019 Tw [(curr)9.7(ently selected, and calls a )]TJ /F2 1 Tf 9 0 0 9 186.074 708.0776 Tm 0 Tw (FixPhone\(\))Tj /F1 1 Tf 11 0 0 11 242.0105 708.0776 Tm 0.019 Tw (function with the)Tj -16.2737 -1.0909 TD 0.0427 Tw (contents of the cell. )Tj /F2 1 Tf 9 0 0 9 148.2738 696.0776 Tm 0 Tw (FixPhone\(\))Tj /F1 1 Tf 11 0 0 11 204.4708 696.0776 Tm 0.0427 Tw [(r)9.9(eturns a empty string if it)]TJ -12.861 -1.0909 TD 0.0792 Tw [(can)69.8()79.9(t)0( conv)5.8(er)-7.9(t the string, or the ne)-5.9(w v)5.8(alue if it can. )14.9(W)77.8(e)-0.1( then)]TJ T* 0.1312 Tw [(either r)9.7(eplace the cell contents, or highlight it to signal an)]TJ T* -0.0164 Tw [(err)5.8(or to the user)59.8(. N)29.7(o)12(w w)5.8(e)0( just need to write the )]TJ /F2 1 Tf 9 0 0 9 259.1627 660.0776 Tm 0 Tw (FixPhone\(\))Tj /F1 1 Tf 11 0 0 11 312.2501 660.0776 Tm 0 Tc (.)Tj /F2 1 Tf 7 0 0 7 70.9778 640.8776 Tm -0.0902 Tc 0.06 Tw (Sub FixPhoneOnSelection\(\))Tj 1.1397 -1.1714 TD (On Error Resume Next)Tj T* [(If TypeOf Selection Is Range Then)]TJ 2.2794 -1.1714 TD [('we don't try to fix a chart, ... just cells)]TJ T* (Dim c As Range)Tj T* (For Each c In Selection.Cells)Tj 2.2794 -1.1714 TD (If Not IsEmpty\(c.Value\) Then)Tj 2.2794 -1.1714 TD (dim t as string)Tj T* (t = FixPhone\(c.Text\))Tj T* (If t <> "" Then)Tj 2.2794 -1.1714 TD -0.0901 Tc [(' replace cell with new value - remove coloring)]TJ T* -0.0902 Tc (c.Value = t)Tj T* (c.Interior.ColorIndex = xlNone)Tj -2.2794 -1.1714 TD 0 Tw (Else)Tj 2.2794 -1.1714 TD -0.0901 Tc 0.0599 Tw [(' leave cell alone, but color it to show error)]TJ T* -0.0902 Tc [(c.Interior.Color = RGB\(255, 255, 0\))]TJ -2.2794 -1.1714 TD (End If)Tj -2.2794 -1.1714 TD (End If)Tj -2.2794 -1.1714 TD 0 Tw (Next)Tj -2.2794 -1.1714 TD 0.06 Tw (End If)Tj -1.1397 -1.1714 TD (End Sub)Tj /F8 1 Tf 12 0 0 12 63 452.8777 Tm 0 Tc 0 Tw (T)Tj 10.44 0 0 10.44 71.4226 452.8777 Tm 0.0225 Tc (HE)Tj 12 0 0 12 90.0352 452.8777 Tm 0 Tc (S)Tj 10.44 0 0 10.44 96.322 452.8777 Tm 0.0228 Tc [(OL)29.6(UTION)]TJ /F1 1 Tf 11 0 0 11 63 429.8777 Tm -0.0001 Tc 0.3086 Tw [(P)54(e)0.1(rl pr)5.8(ogrammers ar)9.7(e pr)5.8(obably thinking that the ideal)]TJ 0 -1.0909 TD 0.1245 Tw [(solution would be to spawn a P)53.9(erl script and captur)9.7(e the)]TJ T* 0.0057 Tc 0.3692 Tw (output, using backticks or a similar mechanism, but)Tj T* -0.0001 Tc 0.0621 Tw [(unfor)-7.9(tunately )14.8(VB isn)69.8()79.9(t)0( v)5.8(e)0.1(r)-17.9(y)0( good at things like spawning a)]TJ T* 0.0044 Tw [(pr)5.8(ocess and capturing and parsing the STDOUT str)9.7(eam. I)23.9(t)]TJ T* 0.0584 Tw (can call DLLs, but stumbles if the call is complicated, and)Tj T* 0.1119 Tw [(mapping parameter and r)9.7(eturn types can be complex and)]TJ T* 0.044 Tw [(err)5.8(or-pr)5.8(one. B)11.9(ut one thing it can do v)5.8(e)0.1(r)-17.9(y)-0.1( w)5.8(ell is make and)]TJ T* 0.0251 Tw (use COM or OLE objects.)Tj 0 -2.0909 TD -0.0251 Tc 0.3581 Tw (OLE was the original name for a compound document)Tj 0 -1.0909 TD 0.309 Tw [(technology M)12(icr)5.8(osoft wr)5.8(ote. As OLE ev)5.8(olv)5.8(ed, COM was)]TJ T* 0.094 Tw [(written as a Component O)5.9(b)0(ject M)23.9(odel technology that OLE)]TJ T* 0.2505 Tw [(could be based upon. A)5.9(t)0( this stage, the naming got a bit)]TJ T* 0.356 Tw [(complex as M)12(icr)5.8(osoft star)-7.9(ted r)9.7(eferring to OLE objects)39.8(,)]TJ T* -0.0106 Tw [(COM objects)39.7(, OLE technologies)39.8(, and then also intr)5.8(oduced)]TJ T* 0.027 Tw [(the )89.8(A)12(ctiv)5.8(eX name to mean the whole OLE/COM ar)9.8(ena as it)]TJ T* 0.2438 Tw [(affected component dev)5.9(elopers. N)29.8(o)12(wadays it is easiest, and)]TJ T* -0.0014 Tw [(appr)5.8(o)5.9(ximately corr)9.7(ect, to consider all the names as inter)5.9(change-)]TJ T* 0.0251 Tw [(able, with COM being the cor)9.8(e name.)]TJ 0 -2.0909 TD -0.0001 Tc 0.1439 Tw [(P)54(erlCOM, par)-7.9(t of the A)11.9(ctiv)5.8(e)0.1(S)23.9(tate P)53.9(erl D)5.8(e)0(v)5.8(elopment Kit,)]TJ 0 -1.0909 TD 0.0439 Tw [(exposes a generic P)53.9(erl interpr)9.7(eter as a COM object that)]TJ 25.3636 57.6545 TD 0.3258 Tw [(is, an )49.7(object)17.7( as defined b)5.8(y)0( most OO definitions \(a)]TJ 0 -1.0909 TD 0.105 Tw (combined chunk of data and functionality with a callable)Tj T* 0.1929 Tw [(inter)-7.9(face\) that can be used b)5.8(y)0( any envir)5.8(onment that)]TJ T* 0.2364 Tw [()59.9(talks COM. F)23.9(unctions defined in a P)53.9(erl script, when)]TJ T* 0.1105 Tw [(giv)5.8(en to the P)53.9(erlCOM object, appear as methods on that)]TJ T* 0.0393 Tw [(P)54(erlCOM object. )44.8(They can be simply called fr)5.8(om )14.8(VB with)]TJ T* 0.2497 Tw [(parameters pr)5.8(operly mapped and r)9.7(eturn v)5.8(alues pr)5.8(operly)]TJ T* 0 Tw [(r)9.9(eturned.)]TJ 0 -2.0909 TD 0.0116 Tw [(G)12(i)0.1(v)5.8(en a )]TJ /F2 1 Tf 9 0 0 9 377.9204 695.0776 Tm -0.0002 Tc 0 Tw (FixPhone\(\))Tj /F1 1 Tf 11 0 0 11 434.784 695.0776 Tm -0.0001 Tc 0.0115 Tw [(function, the )14.8(VB to make and inv)5.8(oke)]TJ -8.4349 -1.0909 TD 0.025 Tw [(the r)9.7(elev)5.8(ant P)53.9(erl is sho)11.9(wn her)9.7(e:)]TJ /F2 1 Tf 7 0 0 7 349.9778 664.0776 Tm -0.0901 Tc 0.0599 Tw [(sub FixPhone\( byval text as string \) as string)]TJ 1.1397 -1.1429 TD ('Declare an object variable and make an instance of PerlCOM)Tj T* -0.0902 Tc [(Dim perlObj as Object)]TJ T* -0.0901 Tc (Set perlObj = CreateObject\("PerlCOM.Script"\))Tj 0 -2.2857 TD -0.0902 Tc [('OK then, check it worked)]TJ 0 -1.1428 TD [(If perlObj Is Nothing Then)]TJ 2.2794 -1.1429 TD -0.0901 Tc [(MsgBox \("Sorry, No PerlCOM on this machine"\))]TJ T* -0.0902 Tc 0 Tw (exit)Tj -2.2794 -1.1429 TD 0.06 Tw (End If)Tj 0 -2.2857 TD ('Create Perl routine)Tj 0 -1.1428 TD -0.0901 Tc (Call perlObj.EvalScript\("sub FixPhone { return '020 7'.$_[0]; }"\))Tj 0 -2.2857 TD -0.0902 Tc [('Invoke my perl subroutine)]TJ 0 -1.1429 TD (Dim t as String)Tj T* (t = perlObj.FixPhone\(text\))Tj T* (FixPhone = t)Tj -1.1397 -1.1429 TD (end sub)Tj /F1 1 Tf 11 0 0 11 342 497.0776 Tm -0.0001 Tc 0.0234 Tw [(N)29.7(otice that for the sake of simplicity)84.9(, w)5.8(e)0( make a P)53.9(erlCOM)]TJ 0 -1.0909 TD -0.0064 Tw [(object, giv)5.8(e it a small inline script to parse, and then w)5.8(e)0( can)]TJ T* 0.0644 Tw [(inv)5.8(oke the P)53.9(erl function w)5.8(e)0( want as a ne)-6(w method on the)]TJ T* 0.025 Tw [(P)54(erlCOM object.)]TJ 0 -2.0909 TD 0.1227 Tw [(F)35.9(r)6(om her)9.7(e, writing a bit of P)53.9(erl to fix up the numbers is)]TJ 0 -1.0909 TD 0.2009 Tw [(fairly simple. )44.8(The neat thing is the tidy way that I can)]TJ T* 0.0795 Tw [(inv)5.8(oke a P)53.9(erl subr)5.8(outine as if it w)5.8(e)0.1(r)9.7(e)-0.1( )14.8(VB, b)5.8(y)0( cr)9.7(eating ne)-5.9(w)]TJ T* 0.025 Tw (methods on a COM object.)Tj 0 -2.1818 TD 0.0197 Tw [(O)5.8(f)0( course, in the r)9.7(eal code I don)69.8()79.9(t)0( want to make a ne)-5.9(w P)53.9(erl)]TJ 0 -1.0909 TD 0.0794 Tw [(interpr)9.7(eter and then destr)5.8(o)12(y)0( it for ev)5.8(er)-17.9(y cell, so I hide the)]TJ T* 0.0451 Tw [()49.9(c)0.2(r)9.7(eate the P)53.9(erl object and initializ)5.8(e the code)29.7( in a separate)]TJ T* -0.0282 Tw [(r)6(outine that cr)9.7(eates the object on first inv)5.8(ocation and caches)]TJ T* 0.025 Tw [(it ther)9.7(eafter:)]TJ /F2 1 Tf 7 0 0 7 349.8378 311.0776 Tm -0.1002 Tc 0.06 Tw (function GetMyPerlObj as Object)Tj 1.1197 -1.1429 TD [('Declare an object variable and make it on first call only)]TJ T* (static perlObj as Object)Tj T* (if perlObj is nothing then)Tj 1.1197 -1.1429 TD [(Set perlObj = CreateObject\("PerlCOM.Script"\))]TJ 0 -2.2857 TD ('OK then, check it worked)Tj 0 -1.1429 TD (If perlObj Is Nothing Then)Tj 1.1197 -1.1429 TD [(MsgBox \("Sorry, no PerlCOM on this machine"\))]TJ T* 0 Tw (exit)Tj -1.1197 -1.1429 TD 0.06 Tw (End If)Tj 0 -2.2857 TD ('Make a nice Perl routine )Tj 0 -1.1429 TD -0.1101 Tc [(Call perlObj.EvalScript\("sub FixPhone { return '020 7'.$_[0]; }"\))]TJ -1.1197 -1.1429 TD -0.1002 Tc (end if)Tj 0 -2.2857 TD [(' this is how you return a value in VB...)]TJ 0 -1.1429 TD (set GetMyPerlObj = perlObj)Tj -1.1197 -1.1429 TD (end function)Tj /F1 1 Tf 12 0 0 12 63 90.3543 Tm 0 Tc 0 Tw [(68)-1100(F)]TJ 10.44 0 0 10.44 94.2795 90.3543 Tm -0.0001 Tc (ALL)Tj 12 0 0 12 115.6277 90.3543 Tm 0 Tc (2000)Tj /F3 1 Tf 30.9897 0.0003 TD -0.0002 Tc 0.0255 Tw [(The P)47.6(erl J)35.7(our)-8(nal #19)]TJ ET 0 0 0 0 k 63 146.25 531 -34.25 re 587.395 90.357 m f* BT /F1 1 Tf 9 0 0 9 63 139.773 Tm 0 0 0 1 k 0 Tc 0 Tw (2)Tj 0.5 -0.33 TD -0.0001 Tc 0.025 Tw [(The pedantic might note that the later v)5.8(ersions of )14.8(VBScript hav)5.8(e a R)11.9(egE)5.8(xp object, which should be callable fr)5.8(om )14.8(VBA, but after )]TJ 50.2645 0 TD (a couple of hours)Tj -50.7645 -1.1111 TD [(do)11.9(wnloading and r)9.7(egistering objects I still couldn)69.7()79.9(t)0( call it fr)5.8(om E)5.8(x)12(cel. And ther)9.7(e ar)9.7(e plenty of other pr)5.8(oblems wher)9.7(e P)53.9(erl is g)]TJ 48.0519 0 TD [(oing to be just right)17.7()]TJ -48.0519 -1.1111 TD 0 Tw [(anyway)84.9(.)]TJ ET 0 0 0 1 K 0 J 0 j 0.5 w 10 M []0 d 63 151.01 m 594 151.01 l S Q 0 0 0 0 k 1 i 37 874 191 -12 re 90.301 116.803 m f* BT /F2 1 Tf 8 0 0 8 39 864 Tm /Cs9 cs 1 scn -0.0004 Tc -0.0019 Tw (TPJ#19/9.26 9/27/00 10:35 AM Page 68)Tj ET 1 G 0 J 0 j 0.5 w 10 M []0 d 36 873 m 36 849 l 0 837 m 24 837 l 621 873 m 621 849 l 657 837 m 633 837 l 36 36 m 36 60 l 0 72 m 24 72 l 621 36 m 621 60 l 657 72 m 633 72 l S /Cs9 CS 1 SCN 0.25 w 36 873 m 36 849 l 0 837 m 24 837 l 621 873 m 621 849 l 657 837 m 633 837 l 36 36 m 36 60 l 0 72 m 24 72 l 621 36 m 621 60 l 657 72 m 633 72 l S 1 G 0.5 w 304.5 861 m 352.5 861 l 304.5 48 m 352.5 48 l 12 478.5 m 12 430.5 l 645 478.5 m 645 430.5 l 328.5 873 m 328.5 849 l 328.5 60 m 328.5 36 l 0 454.5 m 24 454.5 l 633 454.5 m 657 454.5 l 328.5 861 m 334.5 861 l 334.5 857.688 331.812 855 328.5 855 c 325.188 855 322.5 857.688 322.5 861 c 322.5 864.312 325.188 867 328.5 867 c 331.812 867 334.5 864.312 334.5 861 c 328.5 48 m 334.5 48 l 334.5 44.688 331.812 42 328.5 42 c 325.188 42 322.5 44.688 322.5 48 c 322.5 51.312 325.188 54 328.5 54 c 331.812 54 334.5 51.312 334.5 48 c 12 454.5 m 18 454.5 l 18 451.188 15.312 448.5 12 448.5 c 8.688 448.5 6 451.188 6 454.5 c 6 457.812 8.688 460.5 12 460.5 c 15.312 460.5 18 457.812 18 454.5 c 645 454.5 m 651 454.5 l 651 451.188 648.312 448.5 645 448.5 c 641.688 448.5 639 451.188 639 454.5 c 639 457.812 641.688 460.5 645 460.5 c 648.312 460.5 651 457.812 651 454.5 c S /Cs9 CS 1 SCN 0.25 w 304.5 861 m 352.5 861 l 304.5 48 m 352.5 48 l 12 478.5 m 12 430.5 l 645 478.5 m 645 430.5 l 328.5 873 m 328.5 849 l 328.5 60 m 328.5 36 l 0 454.5 m 24 454.5 l 633 454.5 m 657 454.5 l 328.5 861 m 334.5 861 l 334.5 857.688 331.812 855 328.5 855 c 325.188 855 322.5 857.688 322.5 861 c 322.5 864.312 325.188 867 328.5 867 c 331.812 867 334.5 864.312 334.5 861 c 328.5 48 m 334.5 48 l 334.5 44.688 331.812 42 328.5 42 c 325.188 42 322.5 44.688 322.5 48 c 322.5 51.312 325.188 54 328.5 54 c 331.812 54 334.5 51.312 334.5 48 c 12 454.5 m 18 454.5 l 18 451.188 15.312 448.5 12 448.5 c 8.688 448.5 6 451.188 6 454.5 c 6 457.812 8.688 460.5 12 460.5 c 15.312 460.5 18 457.812 18 454.5 c 645 454.5 m 651 454.5 l 651 451.188 648.312 448.5 645 448.5 c 641.688 448.5 639 451.188 639 454.5 c 639 457.812 641.688 460.5 645 460.5 c 648.312 460.5 651 457.812 651 454.5 c S endstream endobj 211 0 obj << /Type /Page /Parent 497 0 R /Resources 212 0 R /Contents 213 0 R /Thumb 457 0 R /MediaBox [ 0 0 684 873 ] /CropBox [ 0 0 684 873 ] /Rotate 0 >> endobj 212 0 obj << /ProcSet [ /PDF /Text ] /Font << /F1 515 0 R /F2 518 0 R /F3 261 0 R /F8 268 0 R /F10 270 0 R >> /ExtGState << /GS1 523 0 R /GS2 521 0 R >> /ColorSpace << /Cs9 520 0 R >> >> endobj 213 0 obj << /Length 12972 >> stream 1 g /GS1 gs 0 873 m 0 873 l f q 1 i 27 846 603 -783 re 0 873 m W n 0 873 684 -873 re W n BT /F1 1 Tf 11 0 0 11 63 802.0776 Tm 0 0 0 1 k /GS2 gs -0.0001 Tc 0.025 Tw [(and then, in the original r)5.8(outine, wher)9.7(e I had)]TJ /F2 1 Tf 7 0 0 7 72.2378 784.0776 Tm -0.0002 Tc 0.06 Tw (t = FixPhone\(c.Text\))Tj /F1 1 Tf 11 0 0 11 63 762.0776 Tm -0.0001 Tc 0.025 Tw [(I can no)11.9(w simply call)]TJ /F2 1 Tf 7 0 0 7 72.2378 744.0776 Tm -0.0002 Tc 0.06 Tw (t = GetMyPerlObj.FixPhone\( c.text \))Tj /F1 1 Tf 11 0 0 11 63 721.0776 Tm -0.0001 Tc 0.0487 Tw [(Those with a purist OO backgr)5.8(ound may raise complaints)]TJ 0 -1.0909 TD 0.0234 Tw [(her)9.7(e)0( that a COM object is effectiv)5.8(ely changing its inter)-7.9(face)]TJ T* 0.2351 Tw [(b)5.8(y)0( having ne)-5.9(w methods made suddenly av)5.8(ailable. )14.8(W)77.8(ell,)]TJ T* 0.1713 Tw [(that)17.7()79.9(s)0( ho)11.9(w it)17.7()79.9(s)0( done in the COM world. I)23.9(t)0( looks a little)]TJ T* 0.1108 Tw [(unusual, but any)5.8(one who)49.7()79.9(s)0( used to )]TJ /F2 1 Tf 9 0 0 9 218.7285 673.0776 Tm -0.0002 Tc 0 Tw (AUTOLOAD)Tj /F1 1 Tf 11 0 0 11 265.887 673.0776 Tm -0.0001 Tc 0.1108 Tw (methods in)Tj -18.4443 -1.0909 TD 0.025 Tw [(P)54(erl shouldn)69.8()79.9(t)0( hav)5.8(e a pr)5.8(oblem r)9.7(eading the code.)]TJ 0 -2 TD 0.1146 Tw [(T)119.9(o)0( do the same fr)5.8(om M)11.9(icr)5.8(osoft )14.7(W)77.8(o)0.2(r)13.8(d)0.1( \(or P)53.9(o)12(w)5.8(erpoint, or)]TJ 0 -1.0909 TD -0.0059 Tw [(P)29.9(ublisher)59.7(, or )14.8(V)9.9(isio, or any other )14.8(VBA enabled pr)5.8(oduct\) y)5.8(o)0.1(u)]TJ T* 0.1155 Tw [(simply write a ne)-5.9(w outer r)5.8(outine that grabs and modifies)]TJ T* 0.025 Tw [(the appr)5.8(opriate selected item.)]TJ 0 -2 TD 0.1885 Tw [(An example for )14.8(W)77.8(o)0.2(r)13.8(d)0( is sho)11.9(wn belo)11.9(w \(this assumes the)]TJ 0 -1.0909 TD 0 Tw (same )Tj /F2 1 Tf 9 0 0 9 87.0314 569.0776 Tm -0.0002 Tc (GetMyPerlObj)Tj /F1 1 Tf 11 0 0 11 154.8406 569.0776 Tm -0.0001 Tc 0.025 Tw (function has been included\).)Tj /F2 1 Tf 7 0 0 7 70.8378 552.0776 Tm -0.1002 Tc 0.06 Tw (Sub FixPhoneOnWordSelection\(\))Tj 1.1197 -1.1429 TD (If Selection.Text <> "" Then)Tj 1.1197 -1.1429 TD (Dim t As String)Tj T* (t = GetMyPerlObj.FixPhone\(Selection.Text\))Tj T* (If t <> "" Then)Tj 2.2394 -1.1429 TD (' replace selection with new value)Tj T* (Selection.Text = t)Tj -2.2394 -1.1429 TD 0 Tw (Else)Tj 2.2394 -1.1429 TD 0.06 Tw [(' couldn't convert - pop up a message)]TJ T* [(MsgBox \("Couldn't find a suitable phone number to convert"\))]TJ -2.2394 -1.1429 TD (End If)Tj -1.1197 -1.1429 TD (End If)Tj -1.1197 -1.1429 TD (End Sub)Tj /F1 1 Tf 11 0 0 11 63 434.0776 Tm -0.0051 Tc 0.0927 Tw [(This is a much simpler r)5.8(outine than the E)5.8(x)12(cel example, as)]TJ 0 -1.0909 TD 0.0708 Tw [(ther)9.7(e)29.7()79.9(s only one selection to fix, and no cells to enumerate.)]TJ T* -0.0144 Tw [(A)12.1(ccor)13.8(dingly)84.9(, I)49.7(v)5.9(e)0( decided to r)9.7(epor)-7.9(t err)5.8(ors dir)9.7(ectly to the user)59.7(,)]TJ T* 0.0454 Tw [(wher)9.7(eas in the E)5.8(x)12(cel code I changed the coloring of cells to)]TJ T* 0.1439 Tw [(indicate err)5.8(ors. \()-12.1(This is impor)-7.9(tant: if the user selects the)]TJ T* 0.1261 Tw [(wr)5.8(ong column for changes, y)5.7(ou don)69.7()79.9(t)0( want him or her to)]TJ T* 0.025 Tw [(hav)5.8(e to dismiss a thousand dialog bo)5.7(x)12(es, one for each cell.\))]TJ 0 -2 TD -0.0001 Tc -0.0125 Tw [(And for those of y)5.8(ou who ar)9.7(e r)9.7(eally inter)9.7(ested, the P)53.9(erl code)]TJ 0 -1.0909 TD 0.0135 Tw (I actually used to fix up our phone numbers \(as opposed to)Tj T* 0.2555 Tw [(the trivial v)5.8(ersion abo)15.8(v)5.9(e\) looked like this. I)23.9(t)17.8()79.9(s)0( not v)5.8(e)0.1(r)-17.9(y)]TJ T* -0.0116 Tw [(complex and it doesn)69.8()79.9(t)0( solv)5.8(e ev)5.8(er)-17.9(ything, but it sav)5.8(ed us a lot)]TJ T* 0.025 Tw [(of time conv)5.8(er)-7.9(ting a lot of numbers.)]TJ /F2 1 Tf 7 0 0 7 66.8489 274.0776 Tm -0.1102 Tc 0.06 Tw (# Tests:)Tj 0 -1.1429 TD [(# 020 xxxx xxxx : fine as is)]TJ T* [(# xxx xxxx : assume 020 7xxx xxxx)]TJ T* -0.1101 Tc [(# 2xxx : Building 1 extension, assume 020 7457 2xxx)]TJ T* [(# 8xxx : Building 2 extension, assume 020 7220 8xxx)]TJ T* -0.1102 Tc [(# 0171 xxx xxxx : convert to 020 7xxx xxxx)]TJ T* [(# 0181 xxx xxxx : convert to 020 8xxx xxxx)]TJ T* -0.1101 Tc [(# Anything else is an error and should be hand converted....)]TJ T* 0 Tc 0 Tw (#)Tj T* -0.1102 Tc 0.06 Tw (sub FixPhone {)Tj 2.1994 -1.1429 TD (local $_ = shift;)Tj T* [(return $_ if /^020 \\d{4} \\d{4}$/;)]TJ T* -0.1101 Tc [(return $_ if s/^\\s*\(\\d{3}\)[-\\s]+\(\\d{4}\)\\s*$/020 7$1 $2/;)]TJ T* [(return $_ if s/^\\s*\(\\d{3}\)[-\\s]+\(\\d{4}\)[-\\s]+\(\\d{4}\)\\s*$/$1 $2 $3/;)]TJ 39.8571 90.7437 TD [(return $_ if s/^\\s*\(2\\d{3}\)\\s*$/020 7457 $1/;)]TJ 0 -1.1429 TD [(return $_ if s/^\\s*\(8\\d{3}\)\\s*$/020 7220 $1/;)]TJ T* (return $_ if s/^\\s*0171[-\\s]+\(\\d{3}\)[-\\s]+\(\\d{4}\)\\s*$/020 7$1 $2/;)Tj T* (return $_ if s/^\\s*0181[-\\s]+\(\\d{3}\)[-\\s]+\(\\d{4}\)\\s*$/020 8$1 $2/;)Tj T* -0.1102 Tc (return '';)Tj -2.1994 -1.1429 TD 0 Tc 0 Tw (})Tj /F8 1 Tf 12 0 0 12 342 741.2832 Tm (B)Tj 10.44 0 0 10.44 349.5773 741.2832 Tm 0.0227 Tc (UT)Tj 12 0 0 12 368.1721 741.2832 Tm 0 Tc (W)Tj 10.44 0 0 10.44 378.993 741.2832 Tm 0.0228 Tc (AIT)Tj 12 0 0 12 395.8189 741.2832 Tm 0.0197 Tc 0.0617 Tw (, T)Tj 10.44 0 0 10.44 411.5751 741.2832 Tm 0.0227 Tc 0 Tw (HERE)Tj 12 0 0 12 439.9627 741.2832 Tm 0 Tc ()Tj 10.44 0 0 10.44 443.1763 741.2832 Tm (S)Tj 12 0 0 12 452.2815 741.2832 Tm (M)Tj 10.44 0 0 10.44 463.5722 741.2832 Tm 0.0228 Tc (ORE)Tj /F1 1 Tf 11 0 0 11 342 719.2832 Tm -0.0051 Tc 0.0015 Tw [(P)54(erlCOM exposes much mor)9.7(e than what I)49.7(v)5.9(e)0( sho)11.9(wn her)9.7(e. I)23.8(t)]TJ 0 -1.0909 TD -0.0299 Tw [(pr)5.8(o)15.9(vides simple mechanisms for loading modules and calling)]TJ T* -0.0121 Tw [(functions in a scalar or array context. I)23.8(t)0( can make and r)9.7(eturn)]TJ T* 0.1752 Tw [(instances of a P)53.9(erl object, and ev)5.8(en makes the raw H)5.8(ash)]TJ T* 0.0336 Tw [(datatype av)5.8(ailable to poor )14.8(VB pr)5.8(ogrammers who)49.7()49.8(v)5.9(e suffer)9.7(ed)]TJ T* 0.025 Tw [(with the atr)5.8(ocious Collection class for so long:)]TJ /F2 1 Tf 7 0 0 7 350.6078 641.2832 Tm -0.0452 Tc 0.06 Tw (dim hash as Object)Tj 0 -1.1429 TD -0.0451 Tc [(set hash = perlObj.CreateHash 'imagine this as $hash = { };)]TJ T* [(hash.name = "Tim" '$hash{name} = "Tim")]TJ T* -0.0452 Tc (hash.surname = "Meadowcroft")Tj /F1 1 Tf 11 0 0 11 342 595.2832 Tm -0.0001 Tc 0.3738 Tw [(As wor)13.8(dy as this is, it)17.7()79.9(s)0( nothing compar)9.7(ed to a )14.8(VB)]TJ 0 -1.0909 TD 0.025 Tw (Collection object!)Tj 0 -2 TD -0.0239 Tw [(F)35.9(or the examples I)49.7(v)5.9(e)0( sho)11.9(wn so far)59.7(, I needed a licensed PDK)]TJ 0 -1.0909 TD 0.1977 Tw [(on the machine wher)9.7(e I)69.7(m r)-7.9(unning the scripts. B)11.9(ut if I)]TJ T* 0.0216 Tw [(wanted to make a )14.8(VB/P)53.9(erl hybrid that I could distribute to)]TJ T* 0.025 Tw (others, what would I do?)Tj 0 -2 TD 0.2684 Tw [(The PDK also includes P)53.9(erlCtrl, which makes A)11.9(c)0.1(tiv)5.8(eX)]TJ 0 -1.0909 TD 0.1873 Tw [(components fr)5.8(om a script. )14.8(Wher)9.7(eas P)53.9(erlCOM exposes a)]TJ T* 0.0781 Tw [(generic P)53.9(erl interpr)9.7(eter)59.7(, P)53.9(erlCtrl wraps up a selected script)]TJ T* 0.1572 Tw [(into an A)11.9(c)0.1(tiv)5.8(eX DLL)]TJ 7.15 0 0 7.15 437.1484 469.7551 Tm 0 Tc 0 Tw (3)Tj 11 0 0 11 445.2027 467.2832 Tm -0.0001 Tc 0.1572 Tw [(that can be distributed fr)9.7(eely and)]TJ -9.3821 -1.0909 TD 0.2007 Tw [(inv)5.8(oked in a manner similar to the abo)15.8(v)5.9(e)0( example \(but)]TJ T* 0.025 Tw (without the )Tj /F2 1 Tf 9 0 0 9 394.9209 443.2832 Tm -0.0002 Tc 0 Tw (EvalScript\(\))Tj /F1 1 Tf 11 0 0 11 462.7301 443.2832 Tm (call\).)Tj -10.9755 -2 TD -0.0001 Tc 0.1269 Tw [(I won)69.8()79.9(t)0( go into much detail about P)53.9(erlCtrl. )14.8(When y)5.8(o)0.1(u)49.7()49.8(v)5.9(e)]TJ 0 -1.0909 TD -0.0241 Tw [(written some useful functions \(say)84.9(, inv)5.8(oking )14.8(WWW)59.8(::S)11.9(ear)5.8(ch)]TJ T* 0.0322 Tw [(on the selected wor)13.8(ds in a document\) that y)5.8(ou want to use)]TJ T* 0.2457 Tw [(fr)5.8(om inside some visually pr)9.7(etty \(but featur)9.7(e poor\) )14.8(VB)]TJ T* -0.0164 Tw [(GUI, P)53.9(erlCtrl comes in handy)84.9(. M)35.9(uch like P)53.9(erlA)11.9(pp compiles)]TJ T* 0.0593 Tw [(a P)53.9(erl script into a stand-alone EXE file, P)53.9(erlCtrl compiles)]TJ T* 0.025 Tw [(P)54(erl code into DLL components.)]TJ 0 -2 TD 0.0243 Tw [(And P)53.9(erlA)11.9(pp is thr)5.8(o)12(wn in with the PDK too)15.8(. U)35.8(nix hackers)]TJ 0 -1.0909 TD 0.0095 Tw [(may w)5.8(ell wonder what all the fuss is about, but for those of)]TJ T* 0.025 Tw [(us locked behind )14.8(W)9.7(indo)11.9(ws it)17.7()79.9(s)0( a br)9.7(eath of fr)9.7(esh air)59.8(.)]TJ /F8 1 Tf 12 0 0 12 342 279.2832 Tm 0 Tc 0 Tw (C)Tj 10.44 0 0 10.44 350.5661 279.2832 Tm 0.0228 Tc [(ONCL)29.6(USION)]TJ /F1 1 Tf 11 0 0 11 342 258.2832 Tm -0.0051 Tc 0.0062 Tw [(I)5.9(f)0( y)5.8(ou star)-7.9(t wor)5.8(king with the innar)13.8(ds of M)11.9(icr)5.8(osoft pr)5.8(oducts,)]TJ T* 0.2681 Tw [(y)5.8(o)0.1(u)49.7()69.9(r)9.9(e)0( going to need some help)15.8(. I)11.9(n)0( the integrate with)]TJ T* 0.0113 Tc 0.3586 Tw [(anything as long as it)17.7()79.9(s)0( M)11.9(i)0.1(cr)5.8(osoft)17.8( world of )14.8(W)9.7(in32)]TJ T* -0.0051 Tc 0.0897 Tw [(pr)5.8(ogramming, which a lot of us unfor)-8(tunately inhabit, the)]TJ T* -0.0217 Tw [(COM integration that the PDK offers is w)5.8(ell wor)-7.9(t)-0.1(h the $95.)]TJ /F10 1 Tf 0 -2.1818 TD -0.0001 Tc 0.0278 Tw (_ _END_ _)Tj /F1 1 Tf 12 0 0 12 517.3723 90.3543 Tm 0 Tc 0 Tw (F)Tj 10.44 0 0 10.44 523.4518 90.3543 Tm -0.0001 Tc (ALL)Tj 12 0 0 12 544.7999 90.3543 Tm 0 Tc 0.025 Tw [(2000 69)]TJ /F3 1 Tf -40.15 0 TD -0.0002 Tc 0.0255 Tw [(The P)47.6(erl J)35.7(our)-8(nal #19)]TJ ET 0 0 0 0 k 63 146.25 531 -34.25 re 162.892 90.354 m f* BT /F1 1 Tf 9 0 0 9 63 139.773 Tm 0 0 0 1 k 0 Tc 0 Tw (3 )Tj 0.775 -0.33 TD -0.0001 Tc 0.0249 Tw [(Ther)9.7(e)29.7()79.9(s that jargon again. An A)11.9(ctiv)5.8(eX DLL is a Dynamically Linked Librar)-17.9(y containing one or mor)9.7(e COM objects. I)23.8(t)0.1( r)9.7(egisters itse)]TJ 50.7037 0 TD [(lf under )14.8(W)9.7(indo)11.9(ws)]TJ -51.4787 -1.1111 TD [(so that when someone asks for an instance of the appr)5.7(opriate object, )14.8(W)9.7(indo)11.9(ws kno)11.9(ws ho)11.9(w to load the DLL and cr)9.7(eate the object au)]TJ 51.354 0 TD (tomatically without)Tj -51.354 -1.1111 TD [(the caller needing to kno)11.9(w wher)9.7(e the object came fr)5.8(om.)]TJ ET 0 0 0 1 K 0 J 0 j 0.5 w 10 M []0 d 63 151.01 m 594 151.01 l S Q 0 0 0 0 k 1 i 37 874 191 -12 re 258.098 116.803 m f* BT /F2 1 Tf 8 0 0 8 39 864 Tm /Cs9 cs 1 scn -0.0004 Tc -0.0019 Tw (TPJ#19/9.26 9/27/00 10:35 AM Page 69)Tj ET 1 G 0 J 0 j 0.5 w 10 M []0 d 36 873 m 36 849 l 0 837 m 24 837 l 621 873 m 621 849 l 657 837 m 633 837 l 36 36 m 36 60 l 0 72 m 24 72 l 621 36 m 621 60 l 657 72 m 633 72 l S /Cs9 CS 1 SCN 0.25 w 36 873 m 36 849 l 0 837 m 24 837 l 621 873 m 621 849 l 657 837 m 633 837 l 36 36 m 36 60 l 0 72 m 24 72 l 621 36 m 621 60 l 657 72 m 633 72 l S 1 G 0.5 w 304.5 861 m 352.5 861 l 304.5 48 m 352.5 48 l 12 478.5 m 12 430.5 l 645 478.5 m 645 430.5 l 328.5 873 m 328.5 849 l 328.5 60 m 328.5 36 l 0 454.5 m 24 454.5 l 633 454.5 m 657 454.5 l 328.5 861 m 334.5 861 l 334.5 857.688 331.812 855 328.5 855 c 325.188 855 322.5 857.688 322.5 861 c 322.5 864.312 325.188 867 328.5 867 c 331.812 867 334.5 864.312 334.5 861 c 328.5 48 m 334.5 48 l 334.5 44.688 331.812 42 328.5 42 c 325.188 42 322.5 44.688 322.5 48 c 322.5 51.312 325.188 54 328.5 54 c 331.812 54 334.5 51.312 334.5 48 c 12 454.5 m 18 454.5 l 18 451.188 15.312 448.5 12 448.5 c 8.688 448.5 6 451.188 6 454.5 c 6 457.812 8.688 460.5 12 460.5 c 15.312 460.5 18 457.812 18 454.5 c 645 454.5 m 651 454.5 l 651 451.188 648.312 448.5 645 448.5 c 641.688 448.5 639 451.188 639 454.5 c 639 457.812 641.688 460.5 645 460.5 c 648.312 460.5 651 457.812 651 454.5 c S /Cs9 CS 1 SCN 0.25 w 304.5 861 m 352.5 861 l 304.5 48 m 352.5 48 l 12 478.5 m 12 430.5 l 645 478.5 m 645 430.5 l 328.5 873 m 328.5 849 l 328.5 60 m 328.5 36 l 0 454.5 m 24 454.5 l 633 454.5 m 657 454.5 l 328.5 861 m 334.5 861 l 334.5 857.688 331.812 855 328.5 855 c 325.188 855 322.5 857.688 322.5 861 c 322.5 864.312 325.188 867 328.5 867 c 331.812 867 334.5 864.312 334.5 861 c 328.5 48 m 334.5 48 l 334.5 44.688 331.812 42 328.5 42 c 325.188 42 322.5 44.688 322.5 48 c 322.5 51.312 325.188 54 328.5 54 c 331.812 54 334.5 51.312 334.5 48 c 12 454.5 m 18 454.5 l 18 451.188 15.312 448.5 12 448.5 c 8.688 448.5 6 451.188 6 454.5 c 6 457.812 8.688 460.5 12 460.5 c 15.312 460.5 18 457.812 18 454.5 c 645 454.5 m 651 454.5 l 651 451.188 648.312 448.5 645 448.5 c 641.688 448.5 639 451.188 639 454.5 c 639 457.812 641.688 460.5 645 460.5 c 648.312 460.5 651 457.812 651 454.5 c S endstream endobj 214 0 obj << /Type /Page /Parent 497 0 R /Resources 215 0 R /Contents 216 0 R /Thumb 459 0 R /MediaBox [ 0 0 684 873 ] /CropBox [ 0 0 684 873 ] /Rotate 0 >> endobj 215 0 obj << /ProcSet [ /PDF /Text ] /Font << /F1 515 0 R /F2 518 0 R /F3 261 0 R /F5 262 0 R /F7 267 0 R /F8 268 0 R /F9 269 0 R >> /ExtGState << /GS1 523 0 R /GS2 521 0 R >> /ColorSpace << /Cs9 520 0 R /Cs10 264 0 R >> >> endobj 216 0 obj << /Length 15008 >> stream 1 g /GS1 gs 0 873 m 0 873 l f q 1 i 27 846 603 -783 re 0 873 m W n 0 873 684 -873 re W n BT /F1 1 Tf 12 0 0 12 63 90.3543 Tm 0 0 0 1 k /GS2 gs 0 Tc 0 Tw [(70)-1100(F)]TJ 10.44 0 0 10.44 94.2795 90.3543 Tm -0.0001 Tc (ALL)Tj 12 0 0 12 115.6277 90.3543 Tm 0 Tc (2000)Tj /F3 1 Tf 30.9897 0.0003 TD -0.0002 Tc 0.0255 Tw [(The P)47.6(erl J)35.7(our)-8(nal #19)]TJ /F1 1 Tf 29.09 0 0 29.09 62.364 672.0442 Tm 0 Tc 0 Tw (I)Tj 11 0 0 11 72.125 684.0442 Tm -0.0001 Tc 0.1383 Tw [()49.8(v)5.9(e been loosely follo)11.9(wing the r)9.7(ecent litigation o)15.8(v)5.9(er the)]TJ 0 -1.0909 TD -0.0002 Tc 0.021 Tw [(D)5.9(eCSS pr)5.7(ogram. D)5.7(eCSS is a C pr)5.7(ogram floating ar)5.7(ound)]TJ -0.8295 -1.0909 TD -0.0001 Tc 0.1196 Tw [(the I)11.9(nternet that decr)-17.9(ypts data encoded in CSS \(Content)]TJ T* -0.0297 Tw [(Scrambling S)11.9(ystem\), the encr)-17.9(yption scheme used b)5.8(y)0( D)19.7(V)0(Ds.)]TJ T* 0.0619 Tw [(S)12.1(ites posting the sour)5.8(ce code hav)5.8(e been the victim of legal)]TJ T* -0.0242 Tw [(action, sometimes under the justification that sour)5.8(ce code is)]TJ T* 0.3669 Tw [(not speech, and ther)9.7(efor)9.7(e isn)69.8()79.9(t)0.1( pr)5.8(otected b)5.8(y)0( the F)33.9(irst)]TJ T* 0.025 Tw (Amendment in the U.S.)Tj 0 -2.2727 TD 0.228 Tw [(S)12.1(hould sour)5.8(ce code be r)9.7(egar)13.8(ded as a form of pr)5.8(otected)]TJ 0 -1.0909 TD 0.1844 Tw [(expr)9.7(ession? I think it should, and so I wr)5.7(ote a pr)5.8(ogram)]TJ T* 0 Tw (called )Tj /F5 1 Tf 2.6138 0 TD (c2eng)Tj /F1 1 Tf 2.4783 0 TD 0.1617 Tw (that takes ANSI C code and translates it to)Tj -5.0921 -1.0909 TD 0.2563 Tw [(grammatically corr)9.7(ect and descriptiv)5.8(e E)5.8(nglish sentences.)]TJ T* 0.0072 Tc 0.3677 Tw [(F)35.9(or instance, that means taking the C pr)9.7(epr)5.8(ocessing)]TJ T* -0.0001 Tc 0 Tw (statement )Tj /F2 1 Tf 9 0 0 9 107.6609 515.0442 Tm -0.0002 Tc 0.1413 Tw (#include )Tj /F1 1 Tf 11 0 0 11 204.1071 515.0442 Tm -0.0001 Tc 0.0589 Tw (and turning it into )Tj /F2 1 Tf 9 0 0 9 293.4052 515.0442 Tm -0.0002 Tc 0 Tw (This)Tj -25.6006 -1.3333 TD -0.0001 Tc 0.1153 Tw [(program makes use of the system file math.h.)]TJ /F1 1 Tf 11 0 0 11 307.8083 503.0442 Tm -0.0002 Tc 0 Tw (,)Tj -22.2553 -1.0909 TD -0.0001 Tc 0.3488 Tw (and turning )Tj /F2 1 Tf 9 0 0 9 123.9202 491.0442 Tm -0.0002 Tc 0.837 Tw [(#define Pi 3.14159265358979 )]TJ /F1 1 Tf 11 0 0 11 297.6808 491.0442 Tm 0 Tw (into)Tj -21.3346 -1.0909 TD 0 Tc ()Tj /F2 1 Tf 9 0 0 9 67.4419 479.0442 Tm -0.0001 Tc -0.0477 Tw [(Note: we define Pi to mean '3.14159265358979')]TJ /F1 1 Tf 11 0 0 11 307.8079 479.0442 Tm -0.0002 Tc 0 Tw (.)Tj -22.2553 -1.0909 TD -0.0001 Tc [(W)9.7(ith )]TJ /F5 1 Tf 2.4114 0 TD (c2eng)Tj /F1 1 Tf 2.0667 0 TD 0.1326 Tw (, the global declaration )Tj /F2 1 Tf 9 0 0 9 217.7776 467.0442 Tm -0.0002 Tc 0.3182 Tw (int I,J,K;)Tj /F1 1 Tf 11 0 0 11 278.8363 467.0442 Tm -0.0001 Tc 0 Tw (becomes)Tj -19.6215 -1.0909 TD 0 Tc ()Tj /F2 1 Tf 9 0 0 9 67.4419 455.0442 Tm -0.0002 Tc 0.5825 Tw [(Specifying the type integer, allocate the)]TJ -0.4935 -1.3333 TD 0.177 Tw [(variables 'I', 'J', and 'K'.)]TJ /F1 1 Tf 11 0 0 11 220.5328 443.0442 Tm -0.0001 Tc 0.0738 Tw [( N)29.7(aturally)84.9(, the tool I)]TJ -14.3212 -1.0909 TD 0.025 Tw [(chose for this task is P)53.9(erl.)]TJ 0 -2.1818 TD -0.0101 Tc -0.0213 Tw [(The first thing I did was to ask ar)5.9(ound U)29.8(senet for suggestions)]TJ 0 -1.0909 TD 0.0209 Tw [(about ho)11.9(w to go about this pr)5.9(oject. S)11.9(e)0(v)5.8(eral folks pointed me)]TJ T* 0.313 Tw [(in the dir)9.7(ection of D)5.9(amian Conway)29.8()79.9(s)0( P)41.9(arse::R)11.9(ecD)5.8(escent)]TJ T* 0.0077 Tw [(module. After do)11.9(wnloading the module, I r)9.8(ead mor)9.7(e)0( about a)]TJ T* 0.248 Tw (similar utility called )Tj /F5 1 Tf 8.3964 0 TD 0 Tw (yacc)Tj /F1 1 Tf 1.4456 0 TD 0.248 Tw (, which takes a description of a)Tj -9.8421 -1.0909 TD -0.0298 Tw (language \(called a )Tj /F5 1 Tf 6.7754 0 TD -0.0102 Tc 0 Tw [(gr)29.6(ammar)]TJ /F1 1 Tf 3.3089 0 TD -0.0101 Tc -0.0298 Tw [(\) and generates a pr)5.9(ogram that can)]TJ /F5 1 Tf -10.0844 -1.0909 TD 0 Tw (parse)Tj /F1 1 Tf 2.0806 0 TD 0.05 Tw [(\(or )59.7(understand)11.9(, in a w)5.8(eak sense\) texts conforming to)]TJ -2.0806 -1.0909 TD 0.0628 Tw [(that grammar)59.8(.)-0.1( )14.8(Y)93.9(ou might use )]TJ /F5 1 Tf 11.5029 0 TD 0 Tw (yacc)Tj /F1 1 Tf 1.7485 0 TD 0.0628 Tw [(to cr)9.7(eate a compiler for a)]TJ -13.2514 -1.0909 TD 0.2499 Tw [(language of y)5.8(our o)11.9(wn design; in fact, )]TJ /F2 1 Tf 9 0 0 9 237.15 311.0442 Tm -0.0102 Tc 0 Tw (perl)Tj /F1 1 Tf 11 0 0 11 263.7737 311.0442 Tm -0.0101 Tc 0.2499 Tw (itself uses a)Tj -18.2522 -1.0909 TD 0.025 Tw [(heavily-modified v)5.9(ariant of )]TJ /F5 1 Tf 10.4727 0 TD 0 Tw (yacc)Tj /F1 1 Tf 1.7106 0 TD 0.025 Tw [(to parse P)53.9(erl pr)5.8(ograms.)]TJ -12.1833 -2.1818 TD 0.0039 Tc 0.371 Tw [(I)12(n)0( this ar)-7.9(ticle, I)11.9(ll explain ho)11.9(w I arriv)5.8(ed at a fully-)]TJ 0 -1.0909 TD -0.0001 Tc 0.0214 Tw [(functioning C to E)5.8(nglish translator)59.7(. )14.8(Y)93.9(o)0.1(u)49.7()12(ll get the most out)]TJ T* 0.0432 Tw [(of it if y)5.8(ou alr)9.7(eady kno)11.9(w the basics of parsing; see D)5.8(amian)]TJ T* 0.1974 Tw [(Conway)29.7()79.9(s)0( ar)-7.9(ticle on P)41.9(arse::R)11.9(ecD)5.8(escent in )44.8(TPJ #12 for a)]TJ T* 0.0033 Tc 0.3716 Tw [(thor)5.7(ough intr)5.7(oduction to parsing in general, and his)]TJ T* -0.0001 Tc 0.025 Tw [(module in par)-7.9(ticular)59.7(.)]TJ /F8 1 Tf 12 0 0 12 63 189.0442 Tm 0 Tc 0 Tw (W)Tj 10.44 0 0 10.44 74.8532 189.0442 Tm 0.0226 Tc (HY)Tj 12 0 0 12 93.5703 189.0442 Tm 0 Tc (P)Tj 10.44 0 0 10.44 100.0825 189.0442 Tm 0.0228 Tc (ARSE)Tj 12 0 0 12 125.748 189.0442 Tm 0.0197 Tc (::R)Tj 10.44 0 0 10.44 140.4542 189.0442 Tm 0.0226 Tc (EC)Tj 12 0 0 12 154.2313 189.0442 Tm 0 Tc (D)Tj 10.44 0 0 10.44 163.8785 189.0442 Tm 0.0228 Tc (ESCENT)Tj 12 0 0 12 205.1893 189.0442 Tm 0 Tc (?)Tj /F1 1 Tf 11 0 0 11 63 163.0442 Tm 0.0068 Tc 0.3681 Tw [(P)42.1(arse::R)11.9(ecD)5.8(escent offers sev)5.7(eral adv)5.8(antages o)15.8(v)5.9(er other)]TJ T* -0.0001 Tc 0.0023 Tw [(parsers for this task. )44.8(The primar)-17.9(y adv)5.8(antage is that a typical)]TJ T* 0.025 Tw [(entr)-17.9(y in a grammar looks like this:)]TJ /F2 1 Tf 7 0 0 7 90.7134 119.0442 Tm -0.0002 Tc 0.06 Tw (Rule : Subrule1 Subrule2 )Tj /F1 1 Tf 11 0 0 11 342 739.0776 Tm -0.0001 Tc 0.0621 Tw [(B)11.9(ut with P)41.9(arse::R)11.9(ecD)5.8(escent, y)5.8(ou can include arbitrar)-17.9(y bits)]TJ T* 0.0249 Tw [(of P)53.9(erl code to be ex)11.9(ecuted during the parse:)]TJ /F2 1 Tf 7 0 0 7 369.2936 707.0776 Tm -0.0102 Tc 0.06 Tw [(Rule : Subrule1 Subrule2 )]TJ 3.2492 -1.1429 TD -0.0101 Tc [({ $return = $item{subrule2} . $item{subrule1}; } )]TJ /F1 1 Tf 11 0 0 11 342 675.0776 Tm -0.0001 Tc 0.1316 Tw (This lets us assemble a string \()Tj /F2 1 Tf 9 0 0 9 478.84 675.0776 Tm -0.0002 Tc 0 Tw ($return)Tj /F1 1 Tf 11 0 0 11 516.6307 675.0776 Tm -0.0001 Tc 0.1315 Tw [(\) and r)9.7(eturn it to)]TJ -15.8755 -1.0909 TD 0.0041 Tc 0.3708 Tw [(whatev)5.8(er superr)-7.9(ule called )]TJ /F2 1 Tf 9 0 0 9 464.9043 663.0776 Tm 0 Tw (Rule)Tj /F1 1 Tf 11 0 0 11 486.6504 663.0776 Tm 0.3708 Tw [(. )44.8(This was exactly the)]TJ -13.15 -1.0909 TD -0.0001 Tc 0.056 Tw [(flexibility that I needed. I)23.9(t)0( let me stor)9.7(e E)5.8(nglish strings like)]TJ T* 0 Tc 0 Tw ()Tj /F2 1 Tf 9 0 0 9 346.4419 639.0776 Tm -0.0002 Tc 0.2928 Tw [(specified as the type)]TJ /F1 1 Tf 11 0 0 11 467.72 639.0776 Tm -0.0001 Tc 0.122 Tw ( in )Tj /F2 1 Tf 9 0 0 9 488.9457 639.0776 Tm -0.0002 Tc 0 Tw ($return)Tj /F1 1 Tf 11 0 0 11 530.8288 639.0776 Tm -0.0001 Tc 0.122 Tw (and pass them)Tj -17.1663 -1.0909 TD -0.0002 Tc 0.0251 Tw [(fr)5.7(om r)-8(ule to r)-8(ule.)]TJ 0 -2.1818 TD -0.0001 Tc 0.0761 Tw [(S)12.1(o)0( what)17.7()79.9(s)0( the top-lev)5.8(el r)-7.9(ule, the one that actually does the)]TJ 0 -1.0909 TD 0.0793 Tw [(printing? )44.8(The first constr)-7.9(uct y)5.8(ou find in a C pr)5.8(ogram can)]TJ T* 0.1898 Tw [(be a global v)5.8(ariable declaration, a function pr)5.8(ototype or)]TJ T* -0.0356 Tw [(definition, a comment, or a pr)9.7(epr)5.8(ocessor dir)9.7(ectiv)5.8(e. O)5.8(ur top-)]TJ T* 0.025 Tw [(lev)5.8(el r)-7.9(ule looks like this:)]TJ /F2 1 Tf 7 0 0 7 350.1878 535.0776 Tm -0.0752 Tc 0.06 Tw (startrule : \()Tj 1.4017 -1.1429 TD -0.0751 Tc [(preproc {print $item{preproc};})]TJ T* (| comment {print $item{comment};})Tj T* (| global_var_declaration {print $item{global_var_declaration};} )Tj T* (| function_definition {print $item{function_definition};})Tj T* (| function_prototype {print $item{function_prototype};})Tj -1.4017 -1.1429 TD -0.0752 Tc 0 Tw (\)\(s\))Tj /F1 1 Tf 11 0 0 11 342 463.0776 Tm -0.0001 Tc 0.257 Tw [(This tells P)41.9(arse::R)11.9(ecD)5.8(escent to collect the r)9.7(eturn string)]TJ 0 -1.0909 TD 0.3553 Tw [(fr)5.8(om any of those constr)-7.9(ucts and print the r)9.7(esult to)]TJ T* 0.1709 Tw [(STDOUT)119.8(. )44.9(The par)9.7(entheses ar)5.8(ound the subr)-7.9(ules indicate)]TJ T* 0.2911 Tw [(that w)5.8(e)0( might find mor)9.7(e)0( than one )]TJ /F2 1 Tf 9 0 0 9 511.5119 427.0776 Tm -0.0002 Tc 0 Tw (startrule)Tj /F1 1 Tf 11 0 0 11 566.0527 427.0776 Tm -0.0001 Tc 0.2912 Tw (in the)Tj -20.3684 -1.0909 TD 0.025 Tw [(pr)5.8(ogram. \(U)29.7(sually)84.9(, w)5.8(e)0( will.\))]TJ 0 -2.1818 TD -0.0051 Tc 0.2843 Tw [(N)29.7(ote that )]TJ /F2 1 Tf 9 0 0 9 391.4227 391.0776 Tm 0 Tw (startrule)Tj /F1 1 Tf 11 0 0 11 445.4283 391.0776 Tm 0.2843 Tw (is the )Tj /F5 1 Tf 2.8312 0 TD 0 Tw (only)Tj /F1 1 Tf 2.0279 0 TD 0.2843 Tw [(r)-7.7(ule allo)11.9(w)5.8(ed to print)]TJ -14.2616 -1.0909 TD -0.002 Tw (anything. As )Tj /F5 1 Tf 5.0428 0 TD 0 Tw (c2eng)Tj /F1 1 Tf 2.2847 0 TD -0.002 Tw [(meanders thr)5.8(ough a C pr)5.8(ogram tr)-17.9(ying to)]TJ -7.3275 -1.0909 TD 0.1245 Tw [(figur)9.7(e out ho)11.9(w the component characters ar)9.6(e divided into)]TJ T* 0.1242 Tw [(higher-or)13.8(der terms, expr)9.7(essions, and statements, it will tr)-17.9(y)]TJ T* 0.0076 Tc 0.3623 Tw [(out multiple interpr)9.6(etations as it mo)15.7(v)5.9(es thr)5.7(ough the)]TJ 0 -9.8182 TD -0.0051 Tc -0.0215 Tw [(pr)5.8(ogram, only to r)9.7(ealiz)5.8(e later that an interpr)9.7(etation is wr)5.8(ong.)]TJ 0 -1.0909 TD 0.0643 Tw [(A)6(t)0( that point it backs up and tr)-17.9(y another interpr)9.7(etation )]TJ T* 0.0453 Tw [(but once y)5.8(o)0.1(u)49.7()49.8(v)5.9(e)0( printed something y)5.7(ou can)69.8()79.9(t)0( undo it, so w)5.8(e)]TJ T* 0.025 Tw [(hav)5.8(e to constrain the printing to this top-lev)5.7(el r)-7.9(ule.)]TJ 0 -2 TD 0.0049 Tc 0.4011 Tw [(As I wr)5.8(ote )]TJ /F5 1 Tf 5.4665 0 TD 0 Tw (c2eng)Tj /F1 1 Tf 2.0916 0 TD 0.4011 Tw [(, I posted sev)5.8(eral questions to the)]TJ -7.5582 -1.0909 TD -0.0151 Tc 0.0913 Tw [(comp)15.8(.lang.perl.misc ne)-5.9(wsgr)5.8(oup and r)9.7(eceiv)5.8(ed assistance fr)5.8(om)]TJ T* 0.05 Tw [(D)6(a)0(mian and Randal Schwar)-7.9(tz. \(And b)5.8(y)0( )59.8(assistance)29.7(, I mean)]TJ T* 0.0009 Tw [(being walked thr)5.8(ough many pr)5.8(oblems step-b)5.8(y-step)15.8(.\) D)5.8(amian)]TJ T* 0.0049 Tc 0.4942 Tw (sent me a C grammar that had been written for)Tj T* -0.0151 Tc 0.025 Tw [(P)42.1(arse::R)11.9(ecD)5.8(escent, which I used as the basis for my wor)5.7(k.)]TJ ET 0 0 0 0 k 63 798 531 -37.5 re 579.512 117.077 m f* BT /F8 1 Tf 16 0 0 16 63 786.4766 Tm 0 0 0 1 k 0 Tc 0 Tw (C)Tj 13.92 0 0 13.92 74.1016 786.4766 Tm -0.0002 Tc [(ONVER)51.6(TING)]TJ 16 0 0 16 161.6041 786.4766 Tm -0.0003 Tc (C )Tj 13.92 0 0 13.92 177.6912 786.4766 Tm -0.036 Tc (TO)Tj 16 0 0 16 202.1938 786.4766 Tm 0 Tc (E)Tj 13.92 0 0 13.92 211.4712 786.4766 Tm -0.0002 Tc [(NGLISH)-286.6(WITH)]TJ 16 0 0 16 311.3576 786.4766 Tm 0 Tc (P)Tj 13.92 0 0 13.92 320.5973 786.4766 Tm -0.0003 Tc (ERL)Tj /F7 1 Tf 16 0 0 16 485.9158 786.4766 Tm -0.0001 Tc 0.0277 Tw [(Omri Schw)34.8(ar)-39.9(tz)]TJ ET /Cs10 CS 1 SCN 0 J 0 j 6 w 10 M []0 d 63 807 m 207 807 l S 0 0.03 0.3 0 k /GS1 gs 63.25 746.75 251.5 -35.5 re 591.528 786.477 m f* BT /F9 1 Tf 12 0 0 12 160.5981 733.1238 Tm 0 0 0 1 k /GS2 gs -0.0002 Tc 0 Tw [(Resour)24.7(ces)]TJ /F1 1 Tf 9 0 0 9 72.5 719.1238 Tm -0.0001 Tc [(c2eng)-29(.............................http://www)74.9(.mit.edu/~ocschwar/decess2.pl)]TJ ET 0 0 0 1 K 0.5 w /GS1 gs 63.25 746.75 251.5 -35.5 re 304.521 719.124 m S BT /F9 1 Tf 14 0 0 14 355.5503 305.6885 Tm /GS2 gs -0.0102 Tc 0.0278 Tw [(I wr)24.7(ote a pr)24.7(o)14.7(gram called )]TJ /F7 1 Tf 11.6679 0 TD 0 Tw (c2eng)Tj /F9 1 Tf 2.7969 0 TD (that)Tj -15.4116 -1.1429 TD -0.0101 Tc 0.0278 Tw [(translates )99.8(ANSI C code to gramaticall)9.7(y)]TJ 0.294 -1.1429 TD -0.0102 Tc [(cor)9.6(r)19.6(ect,)-196(descriptiv)19.6(e English sentences.)]TJ ET 2 w 342 327.18 m 594 327.18 l S 0.667 w 342 324.52 m 594 324.52 l 342 258.54 m 594 258.54 l S 2 w 342 255.87 m 594 255.87 l S Q 0 0 0 0 k 1 i 37 874 191 -12 re 589.447 273.688 m f* BT /F2 1 Tf 8 0 0 8 39 864 Tm /Cs9 cs 1 scn -0.0004 Tc -0.0019 Tw (TPJ#19/9.26 9/27/00 10:35 AM Page 70)Tj ET 1 G 0 J 0 j 0.5 w 10 M []0 d 36 873 m 36 849 l 0 837 m 24 837 l 621 873 m 621 849 l 657 837 m 633 837 l 36 36 m 36 60 l 0 72 m 24 72 l 621 36 m 621 60 l 657 72 m 633 72 l S /Cs9 CS 1 SCN 0.25 w 36 873 m 36 849 l 0 837 m 24 837 l 621 873 m 621 849 l 657 837 m 633 837 l 36 36 m 36 60 l 0 72 m 24 72 l 621 36 m 621 60 l 657 72 m 633 72 l S 1 G 0.5 w 304.5 861 m 352.5 861 l 304.5 48 m 352.5 48 l 12 478.5 m 12 430.5 l 645 478.5 m 645 430.5 l 328.5 873 m 328.5 849 l 328.5 60 m 328.5 36 l 0 454.5 m 24 454.5 l 633 454.5 m 657 454.5 l 328.5 861 m 334.5 861 l 334.5 857.688 331.812 855 328.5 855 c 325.188 855 322.5 857.688 322.5 861 c 322.5 864.312 325.188 867 328.5 867 c 331.812 867 334.5 864.312 334.5 861 c 328.5 48 m 334.5 48 l 334.5 44.688 331.812 42 328.5 42 c 325.188 42 322.5 44.688 322.5 48 c 322.5 51.312 325.188 54 328.5 54 c 331.812 54 334.5 51.312 334.5 48 c 12 454.5 m 18 454.5 l 18 451.188 15.312 448.5 12 448.5 c 8.688 448.5 6 451.188 6 454.5 c 6 457.812 8.688 460.5 12 460.5 c 15.312 460.5 18 457.812 18 454.5 c 645 454.5 m 651 454.5 l 651 451.188 648.312 448.5 645 448.5 c 641.688 448.5 639 451.188 639 454.5 c 639 457.812 641.688 460.5 645 460.5 c 648.312 460.5 651 457.812 651 454.5 c S /Cs9 CS 1 SCN 0.25 w 304.5 861 m 352.5 861 l 304.5 48 m 352.5 48 l 12 478.5 m 12 430.5 l 645 478.5 m 645 430.5 l 328.5 873 m 328.5 849 l 328.5 60 m 328.5 36 l 0 454.5 m 24 454.5 l 633 454.5 m 657 454.5 l 328.5 861 m 334.5 861 l 334.5 857.688 331.812 855 328.5 855 c 325.188 855 322.5 857.688 322.5 861 c 322.5 864.312 325.188 867 328.5 867 c 331.812 867 334.5 864.312 334.5 861 c 328.5 48 m 334.5 48 l 334.5 44.688 331.812 42 328.5 42 c 325.188 42 322.5 44.688 322.5 48 c 322.5 51.312 325.188 54 328.5 54 c 331.812 54 334.5 51.312 334.5 48 c 12 454.5 m 18 454.5 l 18 451.188 15.312 448.5 12 448.5 c 8.688 448.5 6 451.188 6 454.5 c 6 457.812 8.688 460.5 12 460.5 c 15.312 460.5 18 457.812 18 454.5 c 645 454.5 m 651 454.5 l 651 451.188 648.312 448.5 645 448.5 c 641.688 448.5 639 451.188 639 454.5 c 639 457.812 641.688 460.5 645 460.5 c 648.312 460.5 651 457.812 651 454.5 c S endstream endobj 217 0 obj << /Type /Page /Parent 498 0 R /Resources 218 0 R /Contents 219 0 R /Thumb 461 0 R /MediaBox [ 0 0 684 873 ] /CropBox [ 0 0 684 873 ] /Rotate 0 >> endobj 218 0 obj << /ProcSet [ /PDF /Text ] /Font << /F1 515 0 R /F2 518 0 R /F3 261 0 R /F5 262 0 R /F8 268 0 R >> /ExtGState << /GS1 523 0 R /GS2 521 0 R >> /ColorSpace << /Cs9 520 0 R >> >> endobj 219 0 obj << /Length 9198 >> stream 1 g /GS1 gs 0 873 m 0 873 l f q 1 i 27 846 603 -783 re 0 873 m W n 0 873 684 -873 re W n BT /F8 1 Tf 12 0 0 12 63 801.3574 Tm 0 0 0 1 k /GS2 gs 0 Tc 0 Tw (M)Tj 10.44 0 0 10.44 74.2907 801.3574 Tm -0.0588 Tc [(AT)-81.4(H)]TJ 12 0 0 12 99.9002 801.3574 Tm 0 Tc (I)Tj 10.44 0 0 10.44 104.3853 801.3574 Tm (S)Tj 12 0 0 12 113.4904 801.3574 Tm (E)Tj 10.44 0 0 10.44 120.6884 801.3574 Tm 0.0228 Tc (NGLISH)Tj 12 0 0 12 161.2983 801.3574 Tm 0.0198 Tc 0.0616 Tw (, T)Tj 10.44 0 0 10.44 176.6799 801.3574 Tm 0.0229 Tc 0 Tw (OO)Tj /F1 1 Tf 11 0 0 11 63 775.3574 Tm -0.0001 Tc 0.0822 Tw [(I)12(n)0( 1557, a scholar named R)11.9(ober)-7.9(t R)11.9(ecor)13.8(de wr)5.8(ote a tr)9.7(eatise)]TJ 0 -1.0909 TD 0.025 Tw (on arithmetic containing this famous quote:)Tj /F5 1 Tf 1.7273 -2.1818 TD 0.0635 Tw [(T)120(o)0.1( av)5.8(oide the tediouse r)19.7(epetition of these woor)19.7(des: )]TJ /F3 1 Tf 18.7831 0 TD -0.0004 Tc 0 Tw (is)Tj -18.7831 -1.0909 TD -0.0002 Tc 0.0254 Tw [(equalle to:)]TJ /F5 1 Tf 4.5554 0 TD -0.0001 Tc 0.0248 Tw [(I will settle as I doe often in woor)5.8(ke use,)]TJ -4.5554 -1.0909 TD 0.1199 Tw [(a pair)19.7(e of par)29.7(alleles, or gemo)11.9(w)11.9(e)0( [twin] lines of one)]TJ T* 0.2047 Tw [(lengthe: =, bicause noe .2. thynges, can be moar)19.7(e)]TJ T* 0 Tw (equalle.)Tj /F1 1 Tf -1.7273 -2.1818 TD 0.1534 Tw [(Y)89.8(es, the univ)5.8(ersal language of our mathematical notation)]TJ 0 -1.0909 TD 0.0185 Tw [(began with the impatience of a man writing an entir)9.7(e book)]TJ T* 0.1021 Tw [(b)5.8(y)0( hand, in a dank unlit r)5.8(oom, with inkw)5.8(ell and quill. I)5.8(f)]TJ T* 0.3708 Tw [(our mathematical symbols ar)9.7(e simply contractions for)]TJ T* 0.1921 Tw [(normal E)5.8(nglish woor)13.8(des, w)5.8(e)0( should be able to take any)]TJ T* 0.3503 Tw [(equation and translate it into a grammatically corr)9.7(ect)]TJ T* 0 Tc 0 Tw (sentence.)Tj 0 -2.1818 TD -0.0001 Tc 0.1242 Tw [(O)5.8(nce I figur)9.7(ed out ho)11.9(w to descend r)9.7(ecursiv)5.8(ely thr)5.8(ough a)]TJ 0 -1.0909 TD 0.0396 Tw (grammar and translate algebraic equations into mechanical)Tj T* 0.2134 Tw [(E)5.8(nglish pr)5.8(ose, I just needed to put in the P)53.9(erl code to)]TJ T* -0.0088 Tw [(constr)-7.9(uct it. E)5.8(nter the )]TJ /F2 1 Tf 9 0 0 9 159.0612 535.3574 Tm -0.0002 Tc 0 Tw (%item)Tj /F1 1 Tf 11 0 0 11 188.7077 535.3574 Tm (and )Tj /F2 1 Tf 9 0 0 9 207.1733 535.3574 Tm ($return)Tj /F1 1 Tf 11 0 0 11 247.6172 535.3574 Tm -0.0001 Tc -0.0088 Tw [(v)5.9(ariables, which)]TJ /F5 1 Tf -16.7834 -1.0909 TD 0 Tw (c2eng)Tj /F1 1 Tf 2.3316 0 TD 0.0149 Tw [(uses to amass the E)5.8(nglish output. A)5.8(t)0( the end of ev)5.8(er)-17.9(y)]TJ -2.3316 -1.0909 TD 0.068 Tw [(r)-7.7(ule w)5.8(e)0( can hav)5.8(e what P)41.9(arse::R)11.9(ecD)5.8(escent calls an )59.7(action)69.8(;)]TJ T* 0.2188 Tw [(in most of our r)-7.9(ules, the action is to assign a v)5.8(alue to)]TJ /F2 1 Tf 9 0 0 9 63 487.3574 Tm -0.0002 Tc 0 Tw ($return)Tj /F1 1 Tf 11 0 0 11 100.7908 487.3574 Tm -0.0001 Tc 0.212 Tw [(. F)35.8(or instance, her)9.7(e)29.7()79.9(s a r)-7.9(ule inv)5.8(olv)5.8(ed in parsing)]TJ -3.4355 -1.0909 TD 0.025 Tw [(mathematical expr)9.7(essions:)]TJ /F2 1 Tf 7 0 0 7 71.3978 455.3574 Tm -0.0602 Tc 0.06 Tw (rel_add_mul_shift_expression : )Tj 2.5714 -1.1429 TD ()Tj -2.5714 -1.1429 TD 0 Tc 0 Tw ({)Tj 2.5714 -1.1429 TD -0.0602 Tc 0.06 Tw ($return = join\('',@{$item[1]}\); )Tj -2.5714 -1.1429 TD 0 Tc 0 Tw (})Tj /F1 1 Tf 11 0 0 11 63 399.3574 Tm -0.0001 Tc 0.0022 Tw [(P)42.1(arse::R)11.9(ecD)5.8(escent pr)5.8(o)15.9(vides )]TJ /F2 1 Tf 9 0 0 9 181.078 399.3574 Tm -0.0002 Tc 0 Tw (@item)Tj /F1 1 Tf 11 0 0 11 210.8456 399.3574 Tm (and )Tj /F2 1 Tf 9 0 0 9 229.4322 399.3574 Tm (%item)Tj /F1 1 Tf 11 0 0 11 259.1997 399.3574 Tm -0.0001 Tc 0.0022 Tw [(v)5.9(ariables that)]TJ -17.8363 -1.0909 TD 0.2134 Tw [(let a r)-7.9(ule find out what a subr)-7.9(ule r)9.7(eturned. )44.9(The act of)]TJ T* 0.0048 Tc 0.3701 Tw [(parsing is sufficient for determining which characters)]TJ T* -0.0001 Tc 0.1121 Tw [(combine into expr)9.7(essions, but the extra meaning of those)]TJ T* 0.1901 Tw [(expr)9.7(essions their E)5.8(nglish r)9.7(epr)9.7(esentation has to be)]TJ T* -0.0138 Tw [(passed up)5.8(war)13.8(d to superr)-7.9(ules thr)5.8(ough v)5.8(ariables like )]TJ /F2 1 Tf 9 0 0 9 277.2093 339.3574 Tm -0.0002 Tc 0 Tw ($return)Tj /F1 1 Tf 11 0 0 11 63 327.3574 Tm -0.0001 Tc 0.0406 Tw [(that gather the meaning of the curr)9.7(ent r)-7.9(ule and stor)9.7(e it for)]TJ T* 0.025 Tw [(the superr)-7.9(ule.)]TJ 0 -2.1818 TD -0.0312 Tw [(That)17.7()79.9(s)0( all v)5.8(e)0.1(r)-17.9(y)0( abstract. )14.8(What it means in this case is that the)]TJ /F2 1 Tf 9 0 0 9 63 279.3574 Tm -0.0002 Tc 0 Tw (rel_add_mul_shift_expression)Tj /F1 1 Tf 11 0 0 11 220.7299 279.3574 Tm -0.0001 Tc 0.347 Tw [(r)-7.7(ule, which parses a)]TJ -14.3391 -1.0909 TD 0.0864 Tw [(mathematical expr)9.7(ession like )]TJ /F5 1 Tf 11.5705 0 TD 0 Tc 0 Tw (a)Tj /F2 1 Tf 9 0 0 9 198.8585 267.3574 Tm (+)Tj /F5 1 Tf 11 0 0 11 207.9577 267.3574 Tm (b)Tj /F1 1 Tf 0.4658 0 TD -0.0001 Tc 0.0864 Tw (, is able to examine the)Tj -13.6438 -1.0909 TD 0.2667 Tw [(E)5.8(nglish strings associated with )]TJ /F5 1 Tf 13.0158 0 TD 0 Tc 0 Tw (a)Tj /F1 1 Tf 0.9605 0 TD -0.0002 Tc (and )Tj /F5 1 Tf 1.9542 0 TD 0 Tc (b)Tj /F1 1 Tf 0.9825 0 TD -0.0001 Tc 0.2667 Tw (and join them)Tj -16.9131 -1.0909 TD 0.025 Tw [(together)59.7(. I)23.8(t)0( turns this:)]TJ /F2 1 Tf 7 0 0 7 72.2378 223.3574 Tm -0.0002 Tc 0.06 Tw [(prod[2][1] = a[2][1]*b[1][1]+a[2][2]*b[2][1];)]TJ /F1 1 Tf 11 0 0 11 63 199.3574 Tm -0.0001 Tc 0.025 Tw (to this: )Tj /F2 1 Tf 7 0 0 7 63 179.3574 Tm -0.1001 Tc 0.0599 Tw [(Assign to array prod's element at address \(2,1\) the value "array a's)]TJ 0 -1.1429 TD [(element at address \(2,1\) times array b's element at address \(1,1\) plus)]TJ T* [(array a's element at address \(2,2\) times array b's element at address)]TJ T* 0 Tw (\(2,1\)".)Tj /F1 1 Tf 11 0 0 11 63 131.3574 Tm -0.0001 Tc 0.025 Tw [(I)23.9(t)17.8()79.9(s)0( not poetr)-17.9(y)84.9(.)-0.1( B)11.9(ut it is, at least, pr)5.8(onounceable. )]TJ 12 0 0 12 517.3723 90.3543 Tm 0 Tc 0 Tw (F)Tj 10.44 0 0 10.44 523.4518 90.3543 Tm -0.0001 Tc (ALL)Tj 12 0 0 12 544.7999 90.3543 Tm 0 Tc 0.025 Tw [(2000 71)]TJ /F3 1 Tf -40.15 0 TD -0.0002 Tc 0.0255 Tw [(The P)47.6(erl J)35.7(our)-8(nal #19)]TJ ET 0 0 0 0.1 k /GS1 gs 342.5 809.5 251 -341 re 162.892 90.354 m f* 0 0 0 1 K 0 J 0 j 1 w 10 M []0 d 342.5 809.5 251 -341 re S BT /F8 1 Tf 24 0 0 24 436.8813 662.3976 Tm 0 0 0 1 k /GS2 gs 0 Tw [(L)69.8(YRIS)]TJ -0.4311 -1.2 TD 0.0255 Tw (1/4 page)Tj 0.1088 -1.2 TD [(P)11.9(i)-0.1(ck U)29.6(p)]TJ ET 0 0 0 0.1 k /GS1 gs 342.5 458.5 251 -341 re 506.858 604.798 m f* 342.5 458.5 251 -341 re S BT 24 0 0 24 448.4712 311.3976 Tm 0 0 0 1 k /GS2 gs -0.0003 Tc 0 Tw (ICE)Tj -0.914 -1.2 TD -0.0002 Tc 0.0255 Tw (1/4 page)Tj 0.1088 -1.2 TD [(P)11.9(i)-0.1(ck U)29.6(p)]TJ ET Q 0 0 0 0 k /GS2 gs 1 i 37 874 191 -12 re 506.858 253.798 m f* BT /F2 1 Tf 8 0 0 8 39 864 Tm /Cs9 cs 1 scn -0.0004 Tc -0.0019 Tw (TPJ#19/9.26 9/27/00 10:35 AM Page 71)Tj ET 1 G 0 J 0 j 0.5 w 10 M []0 d 36 873 m 36 849 l 0 837 m 24 837 l 621 873 m 621 849 l 657 837 m 633 837 l 36 36 m 36 60 l 0 72 m 24 72 l 621 36 m 621 60 l 657 72 m 633 72 l S /Cs9 CS 1 SCN 0.25 w 36 873 m 36 849 l 0 837 m 24 837 l 621 873 m 621 849 l 657 837 m 633 837 l 36 36 m 36 60 l 0 72 m 24 72 l 621 36 m 621 60 l 657 72 m 633 72 l S 1 G 0.5 w 304.5 861 m 352.5 861 l 304.5 48 m 352.5 48 l 12 478.5 m 12 430.5 l 645 478.5 m 645 430.5 l 328.5 873 m 328.5 849 l 328.5 60 m 328.5 36 l 0 454.5 m 24 454.5 l 633 454.5 m 657 454.5 l 328.5 861 m 334.5 861 l 334.5 857.688 331.812 855 328.5 855 c 325.188 855 322.5 857.688 322.5 861 c 322.5 864.312 325.188 867 328.5 867 c 331.812 867 334.5 864.312 334.5 861 c 328.5 48 m 334.5 48 l 334.5 44.688 331.812 42 328.5 42 c 325.188 42 322.5 44.688 322.5 48 c 322.5 51.312 325.188 54 328.5 54 c 331.812 54 334.5 51.312 334.5 48 c 12 454.5 m 18 454.5 l 18 451.188 15.312 448.5 12 448.5 c 8.688 448.5 6 451.188 6 454.5 c 6 457.812 8.688 460.5 12 460.5 c 15.312 460.5 18 457.812 18 454.5 c 645 454.5 m 651 454.5 l 651 451.188 648.312 448.5 645 448.5 c 641.688 448.5 639 451.188 639 454.5 c 639 457.812 641.688 460.5 645 460.5 c 648.312 460.5 651 457.812 651 454.5 c S /Cs9 CS 1 SCN 0.25 w 304.5 861 m 352.5 861 l 304.5 48 m 352.5 48 l 12 478.5 m 12 430.5 l 645 478.5 m 645 430.5 l 328.5 873 m 328.5 849 l 328.5 60 m 328.5 36 l 0 454.5 m 24 454.5 l 633 454.5 m 657 454.5 l 328.5 861 m 334.5 861 l 334.5 857.688 331.812 855 328.5 855 c 325.188 855 322.5 857.688 322.5 861 c 322.5 864.312 325.188 867 328.5 867 c 331.812 867 334.5 864.312 334.5 861 c 328.5 48 m 334.5 48 l 334.5 44.688 331.812 42 328.5 42 c 325.188 42 322.5 44.688 322.5 48 c 322.5 51.312 325.188 54 328.5 54 c 331.812 54 334.5 51.312 334.5 48 c 12 454.5 m 18 454.5 l 18 451.188 15.312 448.5 12 448.5 c 8.688 448.5 6 451.188 6 454.5 c 6 457.812 8.688 460.5 12 460.5 c 15.312 460.5 18 457.812 18 454.5 c 645 454.5 m 651 454.5 l 651 451.188 648.312 448.5 645 448.5 c 641.688 448.5 639 451.188 639 454.5 c 639 457.812 641.688 460.5 645 460.5 c 648.312 460.5 651 457.812 651 454.5 c S endstream endobj 220 0 obj << /Type /Page /Parent 498 0 R /Resources 221 0 R /Contents 222 0 R /Thumb 463 0 R /MediaBox [ 0 0 684 873 ] /CropBox [ 0 0 684 873 ] /Rotate 0 >> endobj 221 0 obj << /ProcSet [ /PDF /Text ] /Font << /F1 515 0 R /F2 518 0 R /F3 261 0 R /F5 262 0 R /F8 268 0 R >> /ExtGState << /GS1 523 0 R /GS2 521 0 R >> /ColorSpace << /Cs9 520 0 R >> >> endobj 222 0 obj << /Length 13987 >> stream 1 g /GS1 gs 0 873 m 0 873 l f q 1 i 27 846 603 -783 re 0 873 m W n 0 873 684 -873 re W n BT /F1 1 Tf 11 0 0 11 63 802.0776 Tm 0 0 0 1 k /GS2 gs -0.0001 Tc -0.0224 Tw [(Ther)9.7(e)29.7()79.9(s much mor)9.7(e to say about the difficulties of parsing C)]TJ 0 -1.0909 TD 0.0058 Tw [(with an ey)5.8(e to)11.9(war)13.8(d generating r)9.7(eadable E)5.8(nglish output. F)35.8(o)0.2(r)]TJ T* 0.1091 Tw (instance, the statement )Tj /F2 1 Tf 9 0 0 9 166.7573 778.0776 Tm -0.0002 Tc 0.2618 Tw (bar = baz;)Tj /F1 1 Tf 11 0 0 11 229.4054 778.0776 Tm -0.0001 Tc 0.1091 Tw (can be translated as)Tj -15.1278 -1.0909 TD 0 Tc 0 Tw ()Tj /F2 1 Tf 9 0 0 9 67.4419 766.0776 Tm -0.0002 Tc -0.0856 Tw [(Assign to 'bar' the value of 'baz'.)]TJ /F1 1 Tf 11 0 0 11 251.7679 766.0776 Tm -0.0001 Tc -0.0806 Tw [( That )-44.9(suggests)]TJ -17.1607 -1.0909 TD 0.1236 Tw [(a cer)-7.9(tain way of writing the r)-7.9(ule that handles assignment)]TJ T* 0.0457 Tw [(statements. B)11.9(ut an o)15.8(v)5.9(erly simplistic implementation might)]TJ T* 0.0617 Tw (turn a statement like )Tj /F2 1 Tf 9 0 0 9 156.0499 730.0776 Tm -0.0002 Tc 0.1482 Tw (foo = bar = baz;)Tj /F1 1 Tf 11 0 0 11 251.1899 730.0776 Tm -0.0001 Tc 0.0617 Tw [(into )89.8(Assign to)]TJ -17.1082 -1.0909 TD 0.0995 Tw [()39.8(f)0.1(oo)49.7( the v)5.8(alue of assign to bar)19.7( the v)5.8(alue of baz)39.7(, which)]TJ T* 0.0645 Tw [(doesn)69.8()79.9(t)0( quite r)5.8(oll off the tongue. I)11.9(nstead, )]TJ /F5 1 Tf 16.3499 0 TD 0 Tw (c2eng)Tj /F1 1 Tf 2.3812 0 TD -0.0002 Tc 0.0646 Tw [(per)-8(forms a)]TJ -18.7311 -1.0909 TD -0.0001 Tc 0.0507 Tw [(slightly mor)9.7(e)0.1( rigor)5.8(ous analysis, yielding the mor)9.7(e palatable)]TJ /F2 1 Tf 9 0 0 9 63 682.0776 Tm 0.5722 Tw [(Assign to 'foo' the value 'bar' which is)]TJ 0 -1.3333 TD -0.0002 Tc 0.06 Tw (assigned to be 'baz'.)Tj /F1 1 Tf 11 0 0 11 63 646.0776 Tm -0.0001 Tc -0.0266 Tw [(I)12(n)0( some situations, w)5.8(e)0( need to kno)11.9(w what comes )]TJ /F5 1 Tf 18.8887 0 TD 0 Tw (after)Tj /F1 1 Tf 1.8989 0 TD -0.0267 Tw [(a r)-7.9(ule)]TJ -20.7875 -1.0909 TD 0.2698 Tw [(w)5.8(e)29.7()49.8(v)5.9(e parsed. F)35.8(or example, when w)5.8(e)-0.1( use )]TJ /F2 1 Tf 9 0 0 9 255.5025 634.0776 Tm 0 Tc 0 Tw (-)Tj /F1 1 Tf 11 0 0 11 266.6183 634.0776 Tm -0.0001 Tc 0.2697 Tw [(as a unar)-17.9(y)]TJ -18.5107 -1.0909 TD 0.0472 Tw (operator \(e.g. )Tj /F2 1 Tf 9 0 0 9 123.5522 622.0776 Tm -0.0002 Tc 0.1132 Tw (foo = -bar)Tj /F1 1 Tf 11 0 0 11 182.8453 622.0776 Tm 0 Tw (or )Tj /F2 1 Tf 9 0 0 9 195.1081 622.0776 Tm 0.1132 Tw (baz = -1)Tj /F1 1 Tf 11 0 0 11 240.3349 622.0776 Tm -0.0001 Tc 0.0472 Tw [(\), w)5.8(e)0( say )59.7(minus)39.7()]TJ -16.1214 -1.0909 TD 0.2291 Tw [(if what follo)11.9(ws is a constant, and )59.7(n)0.1(egativ)5.8(e)29.7()0( if it)17.8()79.9(s)0( not.)]TJ T* 0.0199 Tc 0.3788 Tw [(P)42.1(arse::R)11.9(ecD)5.8(escent lets us peek ahead with the )]TJ /F2 1 Tf 9 0 0 9 298.4445 598.0776 Tm 0 Tw (...)Tj /F1 1 Tf 11 0 0 11 63 586.0776 Tm -0.0001 Tc [(constr)-7.9(uct:)]TJ /F2 1 Tf 7 0 0 7 63 566.0776 Tm -0.0002 Tc 0.06 Tw (unary_operator : [ other things] )Tj 2.5714 -1.1429 TD [(| '-' ...constant {$return = 'negative ';})]TJ T* (| '-' {$return = 'minus ';})Tj /F1 1 Tf 11 0 0 11 342 802.0776 Tm -0.0001 Tc -0.0273 Tw (This translates )Tj /F2 1 Tf 9 0 0 9 405.4354 802.0776 Tm -0.0003 Tc 0 Tw (-1)Tj /F1 1 Tf 11 0 0 11 418.682 802.0776 Tm -0.0002 Tc -0.0273 Tw [(to )]TJ /F2 1 Tf 9 0 0 9 434.2931 802.0776 Tm -0.0656 Tw (negative one)Tj /F1 1 Tf 11 0 0 11 498.4869 802.0776 Tm -0.0001 Tc -0.0273 Tw ( while )Tj /F2 1 Tf 9 0 0 9 530.6464 802.0776 Tm -0.0003 Tc 0 Tw (-x)Tj /F1 1 Tf 11 0 0 11 543.8931 802.0776 Tm -0.0001 Tc -0.0274 Tw (is translated)Tj -18.3539 -1.0909 TD -0.0002 Tc 0.0251 Tw [(to )]TJ /F2 1 Tf 9 0 0 9 358.1869 790.0776 Tm 0.06 Tw (minus x)Tj /F1 1 Tf 11 0 0 11 396.5176 790.0776 Tm 0 Tw (.)Tj /F5 1 Tf -4.9561 -2.1818 TD -0.0001 Tc [(S)11.9(i)0(mple)]TJ /F1 1 Tf 2.8044 0 TD 0.049 Tw [(mathematical expr)9.7(essions ar)9.7(en)69.8()79.9(t)0( that har)13.8(d to expr)9.7(ess)]TJ -2.8044 -1.0909 TD 0.2139 Tw [(in E)5.8(nglish: w)5.8(e)0( just need to imitate a v)5.8(e)0.1(r)-17.9(y)0( boring math)]TJ T* 0.0148 Tc 0.3601 Tw [(teacher)59.7(. I)11.9(n)0.1( comparison, flo)11.9(w contr)5.8(ol statements and)]TJ T* -0.0001 Tc 0.3736 Tw [(function definitions ar)9.7(e easy to v)5.8(erbaliz)5.8(e. I)23.8(t)17.8()79.9(s)0( easy to)]TJ T* 0 Tw (translate )Tj /F2 1 Tf 9 0 0 9 381.7097 718.0776 Tm -0.0002 Tc (foo\(bar\))Tj /F1 1 Tf 11 0 0 11 428.9259 718.0776 Tm 0.1161 Tw [(to )]TJ /F2 1 Tf 9 0 0 9 446.1146 718.0776 Tm 0.2786 Tw (Perform the function 'foo')Tj -11.5683 -1.3333 TD -0.0001 Tc 0.2402 Tw [(as applied to the argument 'bar'.)]TJ /F1 1 Tf 11 0 0 11 530.9669 706.0776 Tm 0.0853 Tw [( What)17.7()79.9(s)0( )-14.8(har)13.8(d,)]TJ -17.1788 -1.0909 TD 0.025 Tw [(ho)11.9(w)5.9(e)0(v)5.8(e)0.1(r)59.7(,)0( ar)9.7(e par)9.7(entheses.)]TJ 0 -2.1818 TD 0.0199 Tc 0.5699 Tw [(P)42.1(a)0.3(r)9.7(entheses ar)9.7(e critical in mathematics, but they)]TJ 0 -1.0909 TD -0.0001 Tc 0.0239 Tw [(unfor)-7.9(tunately don)69.8()79.9(t)0( translate v)5.8(e)0.1(r)-17.9(y)-0.1( w)5.8(ell into E)5.8(nglish because)]TJ T* 0.0394 Tw [(of their stackable natur)9.7(e. )14.8(W)77.8(e)0( can handle stacks of concepts)]TJ T* 0.1065 Tw [(when w)5.8(e)0( talk or r)9.7(ead, as long as the stack doesn)69.8()79.9(t)0( get too)]TJ T* 0.0926 Tw [(deep)15.8(. \(And )59.7(too deep)49.8( means mor)9.7(e than about six lev)5.8(els.)]TJ T* 0.1737 Tw [(\(F)35.8(or mor)9.7(e about this, r)9.7(ead D)11.9(ouglas H)17.8(o)0.1(fstadter)19.7()79.9(s Gdel,)]TJ T* 0.2169 Tw [(Escher)59.7(, B)11.9(ach, an E)17.8(ternal G)5.8(olden B)11.9(raid)11.9(. \(B)11.9(asic Books,)]TJ T* 0 Tw (1979.\)\)\))Tj 0 -2.1818 TD 0.1053 Tw [(When a math teacher says something like )59.8(the quantity x)]TJ 0 -1.0909 TD 0.1655 Tw [(plus y)84.9(,)0( all o)15.8(v)5.9(er z..., the phrases )59.8(the quantity)39.7( and )59.8(all)11.9()]TJ 9.0775 -1.0909 TD 0.112 Tw (signal to the listener that the stack)Tj T* 0.0199 Tc 0.5356 Tw [(depth is changing. I)11.9(n)0( spoken)]TJ T* 0.0149 Tc 0.36 Tw [(conv)5.8(ersations, hand gestur)9.8(es ar)9.7(e)]TJ T* 0.0199 Tc 0.978 Tw (sometimes used to indicate)Tj T* -0.0001 Tc 0.025 Tw [(par)-7.9(ticular depths as w)5.8(ell.)]TJ 0 -2.1818 TD 0.0018 Tc 0.3731 Tw [(Which leav)5.8(es us in a quandar)-17.9(y)84.9(.)]TJ 0 -1.0909 TD -0.0001 Tc 0.1265 Tw [(What do w)5.8(e)0( do with par)9.7(enthetical)]TJ T* 0.2574 Tw [(expr)9.7(essions in C code? )14.8(W)77.8(e)0( could)]TJ T* 0.0054 Tc 0.3695 Tw [(r)9.8(eplace each opening par)9.6(enthesis)]TJ T* -0.0001 Tc -0.0328 Tw [(with )59.7(the quantity)39.7( and each closing)]TJ T* 0.2455 Tw [(par)9.7(enthesis with )59.7(n)0.1(o)11.9(w)23.9(, but what)]TJ T* 0.0199 Tc 1.7268 Tw [(about nested par)9.7(entheses?)]TJ T* 0.5491 Tw [(M)24(echanical r)9.7(epetitions of )59.8(the)]TJ T* -0.0001 Tc 0.2343 Tw [(quantity)39.7( or )59.8(n)0.1(o)11.9(w)23.9( would conv)5.8(ey)]TJ T* 0.1799 Tw (the meaning of the underlying C,)Tj T* 0.0003 Tw [(but it wouldn)69.8()79.9(t)0( sound pleasant since)]TJ T* 0.0399 Tw [(w)5.9(e)29.7()99.9(d)0( nev)5.8(er talk that way in r)9.7(eal life,)]TJ T* 0.1121 Tw [(ev)5.8(en if w)5.8(e)-0.1( w)5.8(e)0.1(r)9.7(e)0( tr)-17.9(ying to conv)5.8(ey a)]TJ T* 0.0199 Tc 3.2098 Tw (complicated mathematical)Tj T* 1.1829 Tw [(expr)9.7(ession. The )-44.8(par)9.7(enthesis-)]TJ T* 0.634 Tw [(handling por)-7.9(tion of )]TJ /F5 1 Tf 10.1611 0 TD 0 Tw (c2eng)Tj /F1 1 Tf 3.0706 0 TD (is)Tj -13.2318 -1.0909 TD -0.0001 Tc 0.025 Tw [(display)5.8(ed in Listing 1.)]TJ 0 -2.1818 TD 0 Tw (When )Tj /F5 1 Tf 2.9883 0 TD (c2eng)Tj /F1 1 Tf 2.6592 0 TD 0.3426 Tw (encounters a set of)Tj -5.6475 -1.0909 TD 0.0084 Tc 0.3665 Tw [(nested par)9.7(entheses, it displays a)]TJ T* 0.0199 Tc 0.4298 Tw (phrase like )Tj /F2 1 Tf 9 0 0 9 506.5461 226.0776 Tm 1.0592 Tw (the 22-layered)Tj -7.1882 -1.3333 TD -0.0001 Tc 0.4267 Tw (parenthetical expression)Tj /F1 1 Tf 11 0 0 11 575.2616 214.0776 Tm 0.1779 Tw [(. I)5.8(f)]TJ -12.1281 -1.0909 TD 0.2148 Tw [(it encounters multiple par)9.7(entheses)]TJ T* 0.0108 Tw [(in a r)5.8(o)12(w)74.9(,)0( it says so: )]TJ /F2 1 Tf 9 0 0 9 528.7475 190.0776 Tm -0.0002 Tc 0.0261 Tw (\(now drop 22)Tj -9.655 -1.3333 TD 0.0099 Tc 0.8897 Tw (layers of context\))Tj /F1 1 Tf 11 0 0 11 556.6719 178.0775 Tm 0.365 Tw [(. S)11.8(ince)]TJ -10.4381 -1.0909 TD -0.0001 Tc 0.0188 Tw [(phrases like these interr)-7.9(upt the flo)11.9(w)]TJ T* -0.0114 Tw (of communication, )Tj /F5 1 Tf 7.6343 0 TD 0 Tw (c2eng)Tj /F1 1 Tf 2.3053 0 TD -0.0113 Tw (puts them)Tj -9.9396 -1.0909 TD 0.025 Tw [(in, y)5.8(es, par)9.7(entheses.)]TJ 12 0 0 12 63 90.3543 Tm 0 Tc 0 Tw [(72)-1100(F)]TJ 10.44 0 0 10.44 94.2795 90.3543 Tm -0.0001 Tc (ALL)Tj 12 0 0 12 115.6277 90.3543 Tm 0 Tc (2000)Tj /F3 1 Tf 30.9897 0.0003 TD -0.0002 Tc 0.0255 Tw [(The P)47.6(erl J)35.7(our)-8(nal #19)]TJ ET 0 0.03 0.3 0 k 63 538.55 368.85 -419.16 re 587.395 90.357 m f* BT /F8 1 Tf 12 0 0 12 71.6843 520.3224 Tm 0 0 0 1 k -0.0001 Tc [(Listing 1. )-36.1(T)129.9(ranslating par)19.7(enthetical expr)19.7(essions fr)5.7(om C to E)5.7(nglish.)]TJ /F2 1 Tf 7 0 0 7 71.6843 500.3224 Tm -0.0002 Tc 0.06 Tw (primary_expression : )Tj 2.6394 -1.1429 TD 0 Tw ('\(')Tj T* (expression)Tj T* ('\)' )Tj -2.6394 -1.1429 TD 0 Tc ({)Tj 2.6394 -1.1429 TD -0.0002 Tc 0.06 Tw (my $expression = $item{expression}; )Tj T* (my $repeats = 1; )Tj T* (my $ending = 1; )Tj 0 -2.2857 TD -0.0001 Tc [(# We use these variables to keep track of layer numbers.)]TJ 0 -1.1429 TD [(# If we have an expression that is already nested in the front,)]TJ T* -0.0002 Tc (# we remove the nesting.)Tj 0 -2.2857 TD -0.0001 Tc [(if \($expression =~ /^the \(\\\\d+\)-layered parenthetical expression/\) { )]TJ 2.6394 -1.1429 TD -0.0002 Tc ($repeats = $1 + 1; )Tj T* -0.0001 Tc [($expression =~ s/^the \\\\d+-layered parenthetical expression //;)]TJ -2.6394 -2.2857 TD -0.0002 Tc [(# If we have to start the nesting, we do this:)]TJ 0 -1.1429 TD -0.0001 Tc [(} elsif \($expression =~ /^the parenthetical expression/\) { )]TJ 2.6394 -1.1429 TD -0.0002 Tc ($repeats = 2; )Tj T* -0.0001 Tc [($expression =~ s/^the \\\\d+-layered parenthetical expression //;)]TJ -2.6394 -1.1429 TD -0.0003 Tc 0 Tw (} )Tj 0 -2.2857 TD -0.0002 Tc 0.06 Tw [(# So for now the internal parens are gone.)]TJ 0 -1.1429 TD [(# Now, to the rear of our expression:)]TJ T* [(if \($expression =~ / now$/\) { )]TJ 2.6394 -1.1428 TD ($ending ++; )Tj T* ($expression =~ s/ now$//; )Tj T* -0.0001 Tc [($expression .= " \(now drop $ending layers of context\)"; )]TJ -2.6394 -1.1428 TD [(} elsif \($expression =~ /now drop \(\\\\d+\) layers of context\\\)$/ \) { )]TJ 2.6394 -1.1429 TD -0.0002 Tc ($ending =~ $1 +1; )Tj T* -0.0001 Tc [($expression =~ s/\\\\d+ layers of context\\\)$/$ending layers of context \\\)/)]TJ -5.2787 -1.1429 TD -0.0003 Tc 0 Tw (; )Tj 2.6394 -1.1429 TD -0.0002 Tc 0.06 Tw (} else { $expression .= ' now'; } )Tj 0 -2.2857 TD -0.0001 Tc [(# Finally, we wrap the expression in our pair of parens:)]TJ 0 -1.1429 TD -0.0002 Tc (if \($repeats > 1\) { )Tj 2.6394 -1.1429 TD -0.0001 Tc [($return = "the $repeats-layered parenthetical expression $expression"; )]TJ -2.6394 -1.1429 TD -0.0002 Tc (} else { )Tj 2.6394 -1.1429 TD -0.0001 Tc [($return = "the parenthetical expression $expression"; )]TJ -2.6394 -1.1429 TD 0 Tc 0 Tw (})Tj 0 -2.2857 TD -0.0001 Tc 0.0599 Tw [(# And one more detail: if we're closing the parentheses at the very)]TJ 0 -1.1429 TD [(# end of the C statement, we don't need to bother with the word "now.")]TJ T* -0.0002 Tc (if \($text =~ /^;/\) {)Tj 2.6394 -1.1429 TD ($return =~ s/ now$//;)Tj -2.6394 -1.1429 TD -0.0003 Tc 0 Tw (} )Tj -2.6394 -1.1429 TD 0 Tc (})Tj ET Q 0 0 0 0 k /GS2 gs 1 i 37 874 191 -12 re 75.884 124.322 m f* BT /F2 1 Tf 8 0 0 8 39 864 Tm /Cs9 cs 1 scn -0.0004 Tc -0.0019 Tw (TPJ#19/9.26 9/27/00 10:35 AM Page 72)Tj ET 1 G 0 J 0 j 0.5 w 10 M []0 d 36 873 m 36 849 l 0 837 m 24 837 l 621 873 m 621 849 l 657 837 m 633 837 l 36 36 m 36 60 l 0 72 m 24 72 l 621 36 m 621 60 l 657 72 m 633 72 l S /Cs9 CS 1 SCN 0.25 w 36 873 m 36 849 l 0 837 m 24 837 l 621 873 m 621 849 l 657 837 m 633 837 l 36 36 m 36 60 l 0 72 m 24 72 l 621 36 m 621 60 l 657 72 m 633 72 l S 1 G 0.5 w 304.5 861 m 352.5 861 l 304.5 48 m 352.5 48 l 12 478.5 m 12 430.5 l 645 478.5 m 645 430.5 l 328.5 873 m 328.5 849 l 328.5 60 m 328.5 36 l 0 454.5 m 24 454.5 l 633 454.5 m 657 454.5 l 328.5 861 m 334.5 861 l 334.5 857.688 331.812 855 328.5 855 c 325.188 855 322.5 857.688 322.5 861 c 322.5 864.312 325.188 867 328.5 867 c 331.812 867 334.5 864.312 334.5 861 c 328.5 48 m 334.5 48 l 334.5 44.688 331.812 42 328.5 42 c 325.188 42 322.5 44.688 322.5 48 c 322.5 51.312 325.188 54 328.5 54 c 331.812 54 334.5 51.312 334.5 48 c 12 454.5 m 18 454.5 l 18 451.188 15.312 448.5 12 448.5 c 8.688 448.5 6 451.188 6 454.5 c 6 457.812 8.688 460.5 12 460.5 c 15.312 460.5 18 457.812 18 454.5 c 645 454.5 m 651 454.5 l 651 451.188 648.312 448.5 645 448.5 c 641.688 448.5 639 451.188 639 454.5 c 639 457.812 641.688 460.5 645 460.5 c 648.312 460.5 651 457.812 651 454.5 c S /Cs9 CS 1 SCN 0.25 w 304.5 861 m 352.5 861 l 304.5 48 m 352.5 48 l 12 478.5 m 12 430.5 l 645 478.5 m 645 430.5 l 328.5 873 m 328.5 849 l 328.5 60 m 328.5 36 l 0 454.5 m 24 454.5 l 633 454.5 m 657 454.5 l 328.5 861 m 334.5 861 l 334.5 857.688 331.812 855 328.5 855 c 325.188 855 322.5 857.688 322.5 861 c 322.5 864.312 325.188 867 328.5 867 c 331.812 867 334.5 864.312 334.5 861 c 328.5 48 m 334.5 48 l 334.5 44.688 331.812 42 328.5 42 c 325.188 42 322.5 44.688 322.5 48 c 322.5 51.312 325.188 54 328.5 54 c 331.812 54 334.5 51.312 334.5 48 c 12 454.5 m 18 454.5 l 18 451.188 15.312 448.5 12 448.5 c 8.688 448.5 6 451.188 6 454.5 c 6 457.812 8.688 460.5 12 460.5 c 15.312 460.5 18 457.812 18 454.5 c 645 454.5 m 651 454.5 l 651 451.188 648.312 448.5 645 448.5 c 641.688 448.5 639 451.188 639 454.5 c 639 457.812 641.688 460.5 645 460.5 c 648.312 460.5 651 457.812 651 454.5 c S endstream endobj 223 0 obj << /Type /Page /Parent 498 0 R /Resources 224 0 R /Contents 225 0 R /Thumb 465 0 R /MediaBox [ 0 0 684 873 ] /CropBox [ 0 0 684 873 ] /Rotate 0 >> endobj 224 0 obj << /ProcSet [ /PDF /Text ] /Font << /F1 515 0 R /F2 518 0 R /F3 261 0 R /F5 262 0 R /F8 268 0 R /F9 269 0 R /F10 270 0 R >> /ExtGState << /GS1 523 0 R /GS2 521 0 R >> /ColorSpace << /Cs9 520 0 R /Cs20 291 0 R >> >> endobj 225 0 obj << /Length 7117 >> stream 1 g /GS1 gs 0 873 m 0 873 l f q 1 i 27 846 603 -783 re 0 873 m W n 0 873 684 -873 re W n BT /F1 1 Tf 12 0 0 12 517.3723 90.3543 Tm 0 0 0 1 k /GS2 gs 0 Tc 0 Tw (F)Tj 10.44 0 0 10.44 523.4518 90.3543 Tm -0.0001 Tc (ALL)Tj 12 0 0 12 544.7999 90.3543 Tm 0 Tc 0.025 Tw [(2000 73)]TJ /F3 1 Tf -40.15 0 TD -0.0002 Tc 0.0255 Tw [(The P)47.6(erl J)35.7(our)-8(nal #19)]TJ /F5 1 Tf 11 0 0 11 63 802.0776 Tm -0.0001 Tc 0 Tw (c2eng)Tj /F1 1 Tf 2.6104 0 TD 0.2938 Tw [(wor)5.8(ks, and can translate the v)5.8(ast majority of C)]TJ -2.6104 -1.0909 TD 0.0767 Tw [(pr)5.8(ograms into r)9.7(eadable, if boring, E)5.8(nglish. I)69.7(m continuing)]TJ T* 0.0236 Tw [(to r)9.7(efine the pr)5.8(ogram to impr)5.8(o)15.9(v)5.9(e the output, but the pr)5.8(oof)]TJ T* 0.0015 Tw [(of concept is ther)9.7(e. )44.8(Ther)9.7(e ar)9.7(e still many issues to be wor)5.8(ked)]TJ T* 0.0018 Tw [(out; for instance, when a C compiler parses a C pr)5.8(ogram, it)]TJ T* 0.0199 Tc 0.4374 Tw [(immediately strips out comments and r)-7.8(uns the C)]TJ 0 -8.7273 TD -0.0002 Tc 0 Tw [(pr)9.6(epr)5.7(ocessor)59.6(. )]TJ /F5 1 Tf 5.5212 0 TD -0.0001 Tc (c2eng)Tj /F1 1 Tf 2.5947 0 TD 0.2781 Tw [(doesn)69.8()79.9(t, because I want the E)5.8(n)0.1(glish)]TJ -8.1159 -1.0909 TD 0.0306 Tw [(output to contain all of the information in the C pr)5.7(ogram.)]TJ T* 0.1273 Tw [(This is impor)-7.9(tant, because w)5.8(e)0( want our translation to be)]TJ T* -0.0074 Tw [(per)-7.9(fectly r)9.7(e)0(v)5.8(ersible, conv)5.8(er)-7.9(ting fr)5.8(om C to E)5.8(nglish, and then)]TJ T* 0.1955 Tw [(fr)5.8(om E)5.8(nglish back into C. P)53.9(erhaps this will help cour)-7.9(ts)]TJ T* 0.025 Tw (understand that to code is to talk and to talk is to code.)Tj /F10 1 Tf 0 -1.8182 TD 0.0278 Tw (_ _END_ _)Tj ET 0 0 0 0.1 k /GS1 gs 342.5 809.5 251 -692 re 112.112 566.078 m f* 0 0 0 1 K 0 J 0 j 1 w 10 M []0 d 342.5 809.5 251 -692 re S BT /F8 1 Tf 24 0 0 24 386.97 483.1636 Tm 0 0 0 1 k /GS2 gs -0.0002 Tc 0.0255 Tw [(A)17.7(CTIVE ST)88.7(A)81.6(T)0.1(E)]TJ 1.6486 -1.2 TD (1/2 page)Tj 0.57 -1.2 TD -0.0004 Tc 0 Tw [(NE)11.6(W)]TJ /F9 1 Tf 14 0 0 14 98.8272 712.9205 Tm -0.0101 Tc 0.0277 Tw [(P)75.1(erha)9.7(ps this will help cour)-19.9(ts)]TJ -1.2545 -1.1429 TD -0.0102 Tc (understand that to code is to talk )Tj 2.7053 -1.1429 TD [(and to talk is to code)-20(.)]TJ ET 2 w 63 732.5 m 315 732.5 l S 0.667 w 63 729.83 m 315 729.83 l 63 670.95 m 315 670.95 l S 2 w 63 668.29 m 315 668.29 l S /Cs20 cs 0.2 scn 63 540.64 252 -423.64 re 258.862 680.921 m f* BT /F5 1 Tf 13 0 0 13 70 522.8226 Tm 0 0 0 1 k 0.0048 Tc 0.025 Tw [(The P)41.8(e)0(r)11.8(l)0( J)35.7(our)-8(nal)]TJ /F1 1 Tf 6.5399 0 TD [(#19 A)11.8(d)0.2(v)5.8(e)0.1(r)-7.9(tiser I)11.9(ndex)]TJ 9.5 0 0 9.5 70 500.3226 Tm -0.0001 Tc [(A)12.1(ctiv)5.8(eS)23.9(tate)-14198.9(P)42.1(age 4, 73, CIV)]TJ 0 -1.3158 TD [(A)12.1(ddison-W)77.8(esley)-12253.1(P)42.1(age 55)]TJ T* [(American C)23.9(ybernetic)-10253.7(P)42.1(age 15)]TJ T* [(B)11.9(lack R)11.9(o)0.1(ck)-14072.8(P)42.1(age 39)]TJ T* [(Camelot Communcations/A)11.9(pacheCon 2000)-1242.6(P)42.1(age 11)]TJ T* [(Chelsea N)29.7(etwor)5.8(ks)-11489.8(P)42.1(age 35)]TJ T* -0.0198 Tw [(Commer)5.8(ce T)119.9(ec.com)-10711.9(P)42.1(age )-44.8(7)]TJ T* 0.025 Tw [(Consultix P)41.9(acific S)11.9(oftwar)9.7(e G)11.9(u)0.1(r)-7.9(us, I)11.9(nc.)-3562.7(P)42.1(age 17)]TJ T* [(D)6(esktop)15.8(.com)-13292.6(P)42.1(age 25)]TJ T* [(D)12.1(ice.com)-14730.6(P)42.1(age 3)]TJ T* [(E)29.7(v)5.9(er)-17.9(y)5.8(one.net)-13431.3(P)42.1(age 45)]TJ T* [(E)29.7(v)5.9(olution O)5.8(nline S)11.9(y)0(stems)-8335.4(P)42.1(age 23)]TJ T* [(G)12(host-wheel.net)-12097.1(P)42.1(age 49)]TJ T* [(H)29.8(uffto)11.9(wn N)29.7(etwor)5.8(ks)-10632.9(P)42.1(age 45)]TJ T* [(H)29.8(urricane E)11.9(lectric)-11355.5(P)42.1(age 27)]TJ T* [(I)17.8(ce I)11.9(ndia)-15062.5(P)42.1(age 71)]TJ T* -0.0002 Tc [(I)11.9(ndigoST)64.8(AR S)11.8(oftwar)9.6(e)-9958.4(P)42(age 23)]TJ T* -0.0001 Tc [(The I)11.9(n)0.1(formation F)35.8(oundr)-17.9(y)-8308.5(P)42.1(age 7)]TJ T* [(I)23.9(v)5.9(enue.com)-13982.3(P)42.1(age 41)]TJ T* [(KnightB)11.9(ridge S)11.9(olutions)-9323.5(P)42.1(age 43)]TJ T* [(L)45.8(yris )44.9(T)119.9(echnologies)-11371.1(P)42.1(age 53, 71)]TJ T* [(M)24(etagenix, I)11.9(nc.)-12398(P)42.1(age 53)]TJ T* [(N)29.7(etwor)5.8(k S)11.9(hell)-12907.8(P)42.1(age 38)]TJ T* [(O'R)11.9(eilly & Associates)-10017.8(P)42.1(a)-0.1(ge 2, 29)]TJ T* -0.0002 Tc [(P)53.9(erl Ar)5.7(chiv)5.7(e)-13787(P)42(age 65)]TJ T* -0.0001 Tc [(S)12.1(olutionsoft)-13772.3(P)42.1(age CII)]TJ T* [(S)24.1(tonehenge Counsulting S)11.9(e)0.1(r)-17.9(vices)-5603(P)42.1(a)-0.1(ge 9, 50)]TJ T* [(T)119.9(om Christiansen P)53.9(erl Consultancy)-4646.1(P)42.1(age CIII)]TJ T* [(V)100(elocigen I)11.9(n)0.1(c)-13220(P)42.1(age 1)]TJ T* [(W)77.8(o)0.2(r)13.8(dwar)9.7(e P)29.7(ublishing)-10122.4(P)42.1(age 27)]TJ T* [(Z)5.9(engine)-15294.3(P)42.1(age 63)]TJ ET Q 0 0 0 0 k /GS2 gs 1 i 37 874 191 -12 re 274.26 125.323 m f* BT /F2 1 Tf 8 0 0 8 39 864 Tm /Cs9 cs 1 scn -0.0004 Tc -0.0019 Tw (TPJ#19/9.26 9/27/00 10:35 AM Page 73)Tj ET 1 G 0 J 0 j 0.5 w 10 M []0 d 36 873 m 36 849 l 0 837 m 24 837 l 621 873 m 621 849 l 657 837 m 633 837 l 36 36 m 36 60 l 0 72 m 24 72 l 621 36 m 621 60 l 657 72 m 633 72 l S /Cs9 CS 1 SCN 0.25 w 36 873 m 36 849 l 0 837 m 24 837 l 621 873 m 621 849 l 657 837 m 633 837 l 36 36 m 36 60 l 0 72 m 24 72 l 621 36 m 621 60 l 657 72 m 633 72 l S 1 G 0.5 w 304.5 861 m 352.5 861 l 304.5 48 m 352.5 48 l 12 478.5 m 12 430.5 l 645 478.5 m 645 430.5 l 328.5 873 m 328.5 849 l 328.5 60 m 328.5 36 l 0 454.5 m 24 454.5 l 633 454.5 m 657 454.5 l 328.5 861 m 334.5 861 l 334.5 857.688 331.812 855 328.5 855 c 325.188 855 322.5 857.688 322.5 861 c 322.5 864.312 325.188 867 328.5 867 c 331.812 867 334.5 864.312 334.5 861 c 328.5 48 m 334.5 48 l 334.5 44.688 331.812 42 328.5 42 c 325.188 42 322.5 44.688 322.5 48 c 322.5 51.312 325.188 54 328.5 54 c 331.812 54 334.5 51.312 334.5 48 c 12 454.5 m 18 454.5 l 18 451.188 15.312 448.5 12 448.5 c 8.688 448.5 6 451.188 6 454.5 c 6 457.812 8.688 460.5 12 460.5 c 15.312 460.5 18 457.812 18 454.5 c 645 454.5 m 651 454.5 l 651 451.188 648.312 448.5 645 448.5 c 641.688 448.5 639 451.188 639 454.5 c 639 457.812 641.688 460.5 645 460.5 c 648.312 460.5 651 457.812 651 454.5 c S /Cs9 CS 1 SCN 0.25 w 304.5 861 m 352.5 861 l 304.5 48 m 352.5 48 l 12 478.5 m 12 430.5 l 645 478.5 m 645 430.5 l 328.5 873 m 328.5 849 l 328.5 60 m 328.5 36 l 0 454.5 m 24 454.5 l 633 454.5 m 657 454.5 l 328.5 861 m 334.5 861 l 334.5 857.688 331.812 855 328.5 855 c 325.188 855 322.5 857.688 322.5 861 c 322.5 864.312 325.188 867 328.5 867 c 331.812 867 334.5 864.312 334.5 861 c 328.5 48 m 334.5 48 l 334.5 44.688 331.812 42 328.5 42 c 325.188 42 322.5 44.688 322.5 48 c 322.5 51.312 325.188 54 328.5 54 c 331.812 54 334.5 51.312 334.5 48 c 12 454.5 m 18 454.5 l 18 451.188 15.312 448.5 12 448.5 c 8.688 448.5 6 451.188 6 454.5 c 6 457.812 8.688 460.5 12 460.5 c 15.312 460.5 18 457.812 18 454.5 c 645 454.5 m 651 454.5 l 651 451.188 648.312 448.5 645 448.5 c 641.688 448.5 639 451.188 639 454.5 c 639 457.812 641.688 460.5 645 460.5 c 648.312 460.5 651 457.812 651 454.5 c S endstream endobj 226 0 obj << /Type /Page /Parent 498 0 R /Resources 227 0 R /Contents 228 0 R /Thumb 467 0 R /MediaBox [ 0 0 684 873 ] /CropBox [ 0 0 684 873 ] /Rotate 0 >> endobj 227 0 obj << /ProcSet [ /PDF /Text ] /Font << /F1 515 0 R /F2 518 0 R /F3 261 0 R /F8 268 0 R >> /ExtGState << /GS1 523 0 R /GS2 521 0 R >> /ColorSpace << /Cs9 520 0 R /Cs10 264 0 R /Cs21 293 0 R >> >> endobj 228 0 obj << /Length 19440 >> stream 1 g /GS1 gs 0 873 m 0 873 l f q 1 i 27 846 603 -783 re 0 873 m W n 0 873 684 -873 re W n BT /F1 1 Tf 12 0 0 12 63 90.3543 Tm 0 0 0 1 k /GS2 gs 0 Tc 0 Tw [(74)-1100(F)]TJ 10.44 0 0 10.44 94.2795 90.3543 Tm -0.0001 Tc (ALL)Tj 12 0 0 12 115.6277 90.3543 Tm 0 Tc (2000)Tj /F3 1 Tf 30.9897 0.0003 TD -0.0002 Tc 0.0255 Tw [(The P)47.6(erl J)35.7(our)-8(nal #19)]TJ ET /Cs21 cs 1 scn 61 767.61 254 -650.61 re 587.395 90.357 m f* 340 767.61 254 -650.61 re f* BT /F2 1 Tf 5.6 0 0 5.6 63 761.2267 Tm 0 0 0 1 k -0.0001 Tc 0.0599 Tw [(This file was generated by DECSS: Descriptive English for C Statements)]TJ 0 -1.0536 TD [(and Subroutines. The C source file for it was called)]TJ T* -0.0002 Tc 0 Tw (Private/css-auth/css-descramble.c.)Tj 0 -2.1071 TD -0.0001 Tc 0.0599 Tw [(Here, the author says "css_descramble.c Released under the version 2)]TJ 0 -1.0536 TD [(of the GPL. Copyright 1999 Derek Fawcus This file contains functions)]TJ T* [(to descramble CSS encrypted DVD content".)]TJ 0 -2.1071 TD [(Here, the author says "Still in progress: Remove the use of the)]TJ 0 -1.0536 TD [(bit_reverse[] table by recoding the generation of LFSR1. Finish combining)]TJ T* [(this with the css authentication code.")]TJ 0 -2.1071 TD [(This program makes use of the system file stdio.h.)]TJ 0 -1.0536 TD [(This program makes use of the system file string.h.)]TJ T* [(This program makes use of the user file css-descramble.h.)]TJ T* [(Note a type definition of unsigned character called 'byte'.)]TJ 0 -2.1071 TD (Here, the author says "some tables used for descrambling sectors)Tj 0 -1.0536 TD -0.0002 Tc [(and/or decrypting title keys".)]TJ 0 -2.1071 TD -0.0001 Tc [(Specifying the type \(this declaration is not to be shared\) byte,)]TJ 0 -1.0536 TD [(allocate the variable 'csstab1', defined to be an array with the size)]TJ T* [(256 and initialized to the set the hexadecimal number 0x33, the)]TJ T* [(hexadecimal number 0x73, the hexadecimal number 0x3b, the hexadecimal)]TJ T* [(number 0x26, the hexadecimal number 0x63, the hexadecimal number 0x23,)]TJ T* [(the hexadecimal number 0x6b, the hexadecimal number 0x76, the)]TJ T* [(hexadecimal number 0x3e, the hexadecimal number 0x7e, the hexadecimal)]TJ T* [(number 0x36, the hexadecimal number 0x2b, the hexadecimal number 0x6e,)]TJ T* [(the hexadecimal number 0x2e, the hexadecimal number 0x66, the)]TJ T* [(hexadecimal number 0x7b, the hexadecimal number 0xd3, the hexadecimal)]TJ T* [(number 0x93, the hexadecimal number 0xdb, the hexadecimal number 0x06,)]TJ T* [(the hexadecimal number 0x43, the hexadecimal number 0x03, the)]TJ T* [(hexadecimal number 0x4b, the hexadecimal number 0x96, the hexadecimal)]TJ T* [(number 0xde, the hexadecimal number 0x9e, the hexadecimal number 0xd6,)]TJ T* [(the hexadecimal number 0x0b, the hexadecimal number 0x4e, the)]TJ T* [(hexadecimal number 0x0e, the hexadecimal number 0x46, the hexadecimal)]TJ T* [(number 0x9b, the hexadecimal number 0x57, the hexadecimal number 0x17,)]TJ T* [(the hexadecimal number 0x5f, the hexadecimal number 0x82, the)]TJ T* [(hexadecimal number 0xc7, the hexadecimal number 0x87, the hexadecimal)]TJ T* [(number 0xcf, the hexadecimal number 0x12, the hexadecimal number 0x5a,)]TJ T* [(the hexadecimal number 0x1a, the hexadecimal number 0x52, the)]TJ T* [(hexadecimal number 0x8f, the hexadecimal number 0xca, the hexadecimal)]TJ T* [(number 0x8a, the hexadecimal number 0xc2, the hexadecimal number 0x1f,)]TJ T* [(the hexadecimal number 0xd9, the hexadecimal number 0x99, the)]TJ T* [(hexadecimal number 0xd1, the hexadecimal number 0x00, the hexadecimal)]TJ T* [(number 0x49, the hexadecimal number 0x09, the hexadecimal number 0x41,)]TJ T* [(the hexadecimal number 0x90, the hexadecimal number 0xd8, the)]TJ T* [(hexadecimal number 0x98, the hexadecimal number 0xd0, the hexadecimal)]TJ T* [(number 0x01, the hexadecimal number 0x48, the hexadecimal number 0x08,)]TJ T* [(the hexadecimal number 0x40, the hexadecimal number 0x91, the)]TJ T* [(hexadecimal number 0x3d, the hexadecimal number 0x7d, the hexadecimal)]TJ T* [(number 0x35, the hexadecimal number 0x24, the hexadecimal number 0x6d,)]TJ T* [(the hexadecimal number 0x2d, the hexadecimal number 0x65, the)]TJ T* [(hexadecimal number 0x74, the hexadecimal number 0x3c, the hexadecimal)]TJ T* [(number 0x7c, the hexadecimal number 0x34, the hexadecimal number 0x25,)]TJ T* [(the hexadecimal number 0x6c, the hexadecimal number 0x2c, the)]TJ T* [(hexadecimal number 0x64, the hexadecimal number 0x75, the hexadecimal)]TJ T* [(number 0xdd, the hexadecimal number 0x9d, the hexadecimal number 0xd5,)]TJ T* [(the hexadecimal number 0x04, the hexadecimal number 0x4d, the)]TJ T* [(hexadecimal number 0x0d, the hexadecimal number 0x45, the hexadecimal)]TJ T* [(number 0x94, the hexadecimal number 0xdc, the hexadecimal number 0x9c,)]TJ T* [(the hexadecimal number 0xd4, the hexadecimal number 0x05, the)]TJ T* [(hexadecimal number 0x4c, the hexadecimal number 0x0c, the hexadecimal)]TJ T* [(number 0x44, the hexadecimal number 0x95, the hexadecimal number 0x59,)]TJ T* [(the hexadecimal number 0x19, the hexadecimal number 0x51, the)]TJ T* [(hexadecimal number 0x80, the hexadecimal number 0xc9, the hexadecimal)]TJ T* [(number 0x89, the hexadecimal number 0xc1, the hexadecimal number 0x10,)]TJ T* [(the hexadecimal number 0x58, the hexadecimal number 0x18, the)]TJ T* [(hexadecimal number 0x50, the hexadecimal number 0x81, the hexadecimal)]TJ T* [(number 0xc8, the hexadecimal number 0x88, the hexadecimal number 0xc0,)]TJ T* [(the hexadecimal number 0x11, the hexadecimal number 0xd7, the)]TJ T* [(hexadecimal number 0x97, the hexadecimal number 0xdf, the hexadecimal)]TJ T* [(number 0x02, the hexadecimal number 0x47, the hexadecimal number 0x07,)]TJ T* [(the hexadecimal number 0x4f, the hexadecimal number 0x92, the)]TJ T* [(hexadecimal number 0xda, the hexadecimal number 0x9a, the hexadecimal)]TJ T* [(number 0xd2, the hexadecimal number 0x0f, the hexadecimal number 0x4a,)]TJ T* [(the hexadecimal number 0x0a, the hexadecimal number 0x42, the)]TJ T* [(hexadecimal number 0x9f, the hexadecimal number 0x53, the hexadecimal)]TJ T* [(number 0x13, the hexadecimal number 0x5b, the hexadecimal number 0x86,)]TJ T* [(the hexadecimal number 0xc3, the hexadecimal number 0x83, the)]TJ T* [(hexadecimal number 0xcb, the hexadecimal number 0x16, the hexadecimal)]TJ T* [(number 0x5e, the hexadecimal number 0x1e, the hexadecimal number 0x56,)]TJ T* [(the hexadecimal number 0x8b, the hexadecimal number 0xce, the)]TJ T* [(hexadecimal number 0x8e, the hexadecimal number 0xc6, the hexadecimal)]TJ T* [(number 0x1b, the hexadecimal number 0xb3, the hexadecimal number 0xf3,)]TJ T* [(the hexadecimal number 0xbb, the hexadecimal number 0xa6, the)]TJ T* [(hexadecimal number 0xe3, the hexadecimal number 0xa3, the hexadecimal)]TJ T* [(number 0xeb, the hexadecimal number 0xf6, the hexadecimal number 0xbe,)]TJ T* [(the hexadecimal number 0xfe, the hexadecimal number 0xb6, the)]TJ T* [(hexadecimal number 0xab, the hexadecimal number 0xee, the hexadecimal)]TJ T* [(number 0xae, the hexadecimal number 0xe6, the hexadecimal number 0xfb,)]TJ T* [(the hexadecimal number 0x37, the hexadecimal number 0x77, the)]TJ T* [(hexadecimal number 0x3f, the hexadecimal number 0x22, the hexadecimal)]TJ T* [(number 0x67, the hexadecimal number 0x27, the hexadecimal number 0x6f,)]TJ T* [(the hexadecimal number 0x72, the hexadecimal number 0x3a, the)]TJ T* [(hexadecimal number 0x7a, the hexadecimal number 0x32, the hexadecimal)]TJ T* [(number 0x2f, the hexadecimal number 0x6a, the hexadecimal number 0x2a,)]TJ T* [(the hexadecimal number 0x62, the hexadecimal number 0x7f, the)]TJ T* [(hexadecimal number 0xb9, the hexadecimal number 0xf9, the hexadecimal)]TJ T* [(number 0xb1, the hexadecimal number 0xa0, the hexadecimal number 0xe9,)]TJ T* [(the hexadecimal number 0xa9, the hexadecimal number 0xe1, the)]TJ T* [(hexadecimal number 0xf0, the hexadecimal number 0xb8, the hexadecimal)]TJ T* [(number 0xf8, the hexadecimal number 0xb0, the hexadecimal number 0xa1,)]TJ T* [(the hexadecimal number 0xe8, the hexadecimal number 0xa8, the)]TJ T* [(hexadecimal number 0xe0, the hexadecimal number 0xf1, the hexadecimal)]TJ T* [(number 0x5d, the hexadecimal number 0x1d, the hexadecimal number 0x55,)]TJ T* [(the hexadecimal number 0x84, the hexadecimal number 0xcd, the)]TJ T* [(hexadecimal number 0x8d, the hexadecimal number 0xc5, the hexadecimal)]TJ T* [(number 0x14, the hexadecimal number 0x5c, the hexadecimal number 0x1c,)]TJ 49.8214 113.7856 TD [(the hexadecimal number 0x54, the hexadecimal number 0x85, the)]TJ 0 -1.0536 TD [(hexadecimal number 0xcc, the hexadecimal number 0x8c, the hexadecimal)]TJ T* [(number 0xc4, the hexadecimal number 0x15, the hexadecimal number 0xbd,)]TJ T* [(the hexadecimal number 0xfd, the hexadecimal number 0xb5, the)]TJ T* [(hexadecimal number 0xa4, the hexadecimal number 0xed, the hexadecimal)]TJ T* [(number 0xad, the hexadecimal number 0xe5, the hexadecimal number 0xf4,)]TJ T* [(the hexadecimal number 0xbc, the hexadecimal number 0xfc, the)]TJ T* [(hexadecimal number 0xb4, the hexadecimal number 0xa5, the hexadecimal)]TJ T* [(number 0xec, the hexadecimal number 0xac, the hexadecimal number 0xe4,)]TJ T* [(the hexadecimal number 0xf5, the hexadecimal number 0x39, the)]TJ T* [(hexadecimal number 0x79, the hexadecimal number 0x31, the hexadecimal)]TJ T* [(number 0x20, the hexadecimal number 0x69, the hexadecimal number 0x29,)]TJ T* [(the hexadecimal number 0x61, the hexadecimal number 0x70, the)]TJ T* [(hexadecimal number 0x38, the hexadecimal number 0x78, the hexadecimal)]TJ T* [(number 0x30, the hexadecimal number 0x21, the hexadecimal number 0x68,)]TJ T* [(the hexadecimal number 0x28, the hexadecimal number 0x60, the)]TJ T* [(hexadecimal number 0x71, the hexadecimal number 0xb7, the hexadecimal)]TJ T* [(number 0xf7, the hexadecimal number 0xbf, the hexadecimal number 0xa2,)]TJ T* [(the hexadecimal number 0xe7, the hexadecimal number 0xa7, the)]TJ T* [(hexadecimal number 0xef, the hexadecimal number 0xf2, the hexadecimal)]TJ T* [(number 0xba, the hexadecimal number 0xfa, the hexadecimal number 0xb2,)]TJ T* [(the hexadecimal number 0xaf, the hexadecimal number 0xea, the)]TJ T* [(hexadecimal number 0xaa, the hexadecimal number 0xe2, and the)]TJ T* [(hexadecimal number 0xff.)]TJ 0 -2.1071 TD [(Specifying the type \(this declaration is not to be shared\) byte,)]TJ 0 -1.0536 TD [(allocate the variable 'lfsr1_bits0', defined to be an array with the)]TJ T* [(size 256 and initialized to the set the hexadecimal number 0x00, the)]TJ T* [(hexadecimal number 0x01, the hexadecimal number 0x02, the hexadecimal)]TJ T* [(number 0x03, the hexadecimal number 0x04, the hexadecimal number 0x05,)]TJ T* [(the hexadecimal number 0x06, the hexadecimal number 0x07, the)]TJ T* [(hexadecimal number 0x09, the hexadecimal number 0x08, the hexadecimal)]TJ T* [(number 0x0b, the hexadecimal number 0x0a, the hexadecimal number 0x0d,)]TJ T* [(the hexadecimal number 0x0c, the hexadecimal number 0x0f, the)]TJ T* [(hexadecimal number 0x0e, the hexadecimal number 0x12, the hexadecimal)]TJ T* [(number 0x13, the hexadecimal number 0x10, the hexadecimal number 0x11,)]TJ T* [(the hexadecimal number 0x16, the hexadecimal number 0x17, the)]TJ T* [(hexadecimal number 0x14, the hexadecimal number 0x15, the hexadecimal)]TJ T* [(number 0x1b, the hexadecimal number 0x1a, the hexadecimal number 0x19,)]TJ T* [(the hexadecimal number 0x18, the hexadecimal number 0x1f, the)]TJ T* [(hexadecimal number 0x1e, the hexadecimal number 0x1d, the hexadecimal)]TJ T* [(number 0x1c, the hexadecimal number 0x24, the hexadecimal number 0x25,)]TJ T* [(the hexadecimal number 0x26, the hexadecimal number 0x27, the)]TJ T* [(hexadecimal number 0x20, the hexadecimal number 0x21, the hexadecimal)]TJ T* [(number 0x22, the hexadecimal number 0x23, the hexadecimal number 0x2d,)]TJ T* [(the hexadecimal number 0x2c, the hexadecimal number 0x2f, the)]TJ T* [(hexadecimal number 0x2e, the hexadecimal number 0x29, the hexadecimal)]TJ T* [(number 0x28, the hexadecimal number 0x2b, the hexadecimal number 0x2a,)]TJ T* [(the hexadecimal number 0x36, the hexadecimal number 0x37, the)]TJ T* [(hexadecimal number 0x34, the hexadecimal number 0x35, the hexadecimal)]TJ T* [(number 0x32, the hexadecimal number 0x33, the hexadecimal number 0x30,)]TJ T* [(the hexadecimal number 0x31, the hexadecimal number 0x3f, the)]TJ T* [(hexadecimal number 0x3e, the hexadecimal number 0x3d, the hexadecimal)]TJ T* [(number 0x3c, the hexadecimal number 0x3b, the hexadecimal number 0x3a,)]TJ T* [(the hexadecimal number 0x39, the hexadecimal number 0x38, the)]TJ T* [(hexadecimal number 0x49, the hexadecimal number 0x48, the hexadecimal)]TJ T* [(number 0x4b, the hexadecimal number 0x4a, the hexadecimal number 0x4d,)]TJ T* [(the hexadecimal number 0x4c, the hexadecimal number 0x4f, the)]TJ T* [(hexadecimal number 0x4e, the hexadecimal number 0x40, the hexadecimal)]TJ T* [(number 0x41, the hexadecimal number 0x42, the hexadecimal number 0x43,)]TJ T* [(the hexadecimal number 0x44, the hexadecimal number 0x45, the)]TJ T* [(hexadecimal number 0x46, the hexadecimal number 0x47, the hexadecimal)]TJ T* [(number 0x5b, the hexadecimal number 0x5a, the hexadecimal number 0x59,)]TJ T* [(the hexadecimal number 0x58, the hexadecimal number 0x5f, the)]TJ T* [(hexadecimal number 0x5e, the hexadecimal number 0x5d, the hexadecimal)]TJ T* [(number 0x5c, the hexadecimal number 0x52, the hexadecimal number 0x53,)]TJ T* [(the hexadecimal number 0x50, the hexadecimal number 0x51, the)]TJ T* [(hexadecimal number 0x56, the hexadecimal number 0x57, the hexadecimal)]TJ T* [(number 0x54, the hexadecimal number 0x55, the hexadecimal number 0x6d,)]TJ T* [(the hexadecimal number 0x6c, the hexadecimal number 0x6f, the)]TJ T* [(hexadecimal number 0x6e, the hexadecimal number 0x69, the hexadecimal)]TJ T* [(number 0x68, the hexadecimal number 0x6b, the hexadecimal number 0x6a,)]TJ T* [(the hexadecimal number 0x64, the hexadecimal number 0x65, the)]TJ T* [(hexadecimal number 0x66, the hexadecimal number 0x67, the hexadecimal)]TJ T* [(number 0x60, the hexadecimal number 0x61, the hexadecimal number 0x62,)]TJ T* [(the hexadecimal number 0x63, the hexadecimal number 0x7f, the)]TJ T* [(hexadecimal number 0x7e, the hexadecimal number 0x7d, the hexadecimal)]TJ T* [(number 0x7c, the hexadecimal number 0x7b, the hexadecimal number 0x7a,)]TJ T* [(the hexadecimal number 0x79, the hexadecimal number 0x78, the)]TJ T* [(hexadecimal number 0x76, the hexadecimal number 0x77, the hexadecimal)]TJ T* [(number 0x74, the hexadecimal number 0x75, the hexadecimal number 0x72,)]TJ T* [(the hexadecimal number 0x73, the hexadecimal number 0x70, the)]TJ T* [(hexadecimal number 0x71, the hexadecimal number 0x92, the hexadecimal)]TJ T* [(number 0x93, the hexadecimal number 0x90, the hexadecimal number 0x91,)]TJ T* [(the hexadecimal number 0x96, the hexadecimal number 0x97, the)]TJ T* [(hexadecimal number 0x94, the hexadecimal number 0x95, the hexadecimal)]TJ T* [(number 0x9b, the hexadecimal number 0x9a, the hexadecimal number 0x99,)]TJ T* [(the hexadecimal number 0x98, the hexadecimal number 0x9f, the)]TJ T* [(hexadecimal number 0x9e, the hexadecimal number 0x9d, the hexadecimal)]TJ T* [(number 0x9c, the hexadecimal number 0x80, the hexadecimal number 0x81,)]TJ T* [(the hexadecimal number 0x82, the hexadecimal number 0x83, the)]TJ T* [(hexadecimal number 0x84, the hexadecimal number 0x85, the hexadecimal)]TJ T* [(number 0x86, the hexadecimal number 0x87, the hexadecimal number 0x89,)]TJ T* [(the hexadecimal number 0x88, the hexadecimal number 0x8b, the)]TJ T* [(hexadecimal number 0x8a, the hexadecimal number 0x8d, the hexadecimal)]TJ T* [(number 0x8c, the hexadecimal number 0x8f, the hexadecimal number 0x8e,)]TJ T* [(the hexadecimal number 0xb6, the hexadecimal number 0xb7, the)]TJ T* [(hexadecimal number 0xb4, the hexadecimal number 0xb5, the hexadecimal)]TJ T* [(number 0xb2, the hexadecimal number 0xb3, the hexadecimal number 0xb0,)]TJ T* [(the hexadecimal number 0xb1, the hexadecimal number 0xbf, the)]TJ T* [(hexadecimal number 0xbe, the hexadecimal number 0xbd, the hexadecimal)]TJ T* [(number 0xbc, the hexadecimal number 0xbb, the hexadecimal number 0xba,)]TJ T* [(the hexadecimal number 0xb9, the hexadecimal number 0xb8, the)]TJ T* [(hexadecimal number 0xa4, the hexadecimal number 0xa5, the hexadecimal)]TJ T* [(number 0xa6, the hexadecimal number 0xa7, the hexadecimal number 0xa0,)]TJ T* [(the hexadecimal number 0xa1, the hexadecimal number 0xa2, the)]TJ T* [(hexadecimal number 0xa3, the hexadecimal number 0xad, the hexadecimal)]TJ T* [(number 0xac, the hexadecimal number 0xaf, the hexadecimal number 0xae,)]TJ T* [(the hexadecimal number 0xa9, the hexadecimal number 0xa8, the)]TJ ET 0 0 0 0 k 63 798 531 -21.17 re 549.596 124.027 m f* BT /F8 1 Tf 16 0 0 16 63 786.4766 Tm 0 0 0 1 k 0 Tc 0 Tw (D)Tj 13.92 0 0 13.92 75.543 786.4766 Tm (E)Tj 16 0 0 16 83.6142 786.4766 Tm -0.0002 Tc (CSS )Tj 13.92 0 0 13.92 115.3267 786.4766 Tm -0.0004 Tc (IN)Tj 16 0 0 16 135.5915 786.4766 Tm 0 Tc (E)Tj 13.92 0 0 13.92 144.8689 786.4766 Tm -0.0002 Tc (NGLISH)Tj ET /Cs10 CS 1 SCN 0 J 0 j 6 w 10 M []0 d 63 807 m 207 807 l S Q 0 0 0 0 k 1 i 37 874 191 -12 re 197.093 786.477 m f* BT /F2 1 Tf 8 0 0 8 39 864 Tm /Cs9 cs 1 scn -0.0004 Tc -0.0019 Tw (TPJ#19/9.26 9/27/00 10:35 AM Page 74)Tj ET 1 G 0 J 0 j 0.5 w 10 M []0 d 36 873 m 36 849 l 0 837 m 24 837 l 621 873 m 621 849 l 657 837 m 633 837 l 36 36 m 36 60 l 0 72 m 24 72 l 621 36 m 621 60 l 657 72 m 633 72 l S /Cs9 CS 1 SCN 0.25 w 36 873 m 36 849 l 0 837 m 24 837 l 621 873 m 621 849 l 657 837 m 633 837 l 36 36 m 36 60 l 0 72 m 24 72 l 621 36 m 621 60 l 657 72 m 633 72 l S 1 G 0.5 w 304.5 861 m 352.5 861 l 304.5 48 m 352.5 48 l 12 478.5 m 12 430.5 l 645 478.5 m 645 430.5 l 328.5 873 m 328.5 849 l 328.5 60 m 328.5 36 l 0 454.5 m 24 454.5 l 633 454.5 m 657 454.5 l 328.5 861 m 334.5 861 l 334.5 857.688 331.812 855 328.5 855 c 325.188 855 322.5 857.688 322.5 861 c 322.5 864.312 325.188 867 328.5 867 c 331.812 867 334.5 864.312 334.5 861 c 328.5 48 m 334.5 48 l 334.5 44.688 331.812 42 328.5 42 c 325.188 42 322.5 44.688 322.5 48 c 322.5 51.312 325.188 54 328.5 54 c 331.812 54 334.5 51.312 334.5 48 c 12 454.5 m 18 454.5 l 18 451.188 15.312 448.5 12 448.5 c 8.688 448.5 6 451.188 6 454.5 c 6 457.812 8.688 460.5 12 460.5 c 15.312 460.5 18 457.812 18 454.5 c 645 454.5 m 651 454.5 l 651 451.188 648.312 448.5 645 448.5 c 641.688 448.5 639 451.188 639 454.5 c 639 457.812 641.688 460.5 645 460.5 c 648.312 460.5 651 457.812 651 454.5 c S /Cs9 CS 1 SCN 0.25 w 304.5 861 m 352.5 861 l 304.5 48 m 352.5 48 l 12 478.5 m 12 430.5 l 645 478.5 m 645 430.5 l 328.5 873 m 328.5 849 l 328.5 60 m 328.5 36 l 0 454.5 m 24 454.5 l 633 454.5 m 657 454.5 l 328.5 861 m 334.5 861 l 334.5 857.688 331.812 855 328.5 855 c 325.188 855 322.5 857.688 322.5 861 c 322.5 864.312 325.188 867 328.5 867 c 331.812 867 334.5 864.312 334.5 861 c 328.5 48 m 334.5 48 l 334.5 44.688 331.812 42 328.5 42 c 325.188 42 322.5 44.688 322.5 48 c 322.5 51.312 325.188 54 328.5 54 c 331.812 54 334.5 51.312 334.5 48 c 12 454.5 m 18 454.5 l 18 451.188 15.312 448.5 12 448.5 c 8.688 448.5 6 451.188 6 454.5 c 6 457.812 8.688 460.5 12 460.5 c 15.312 460.5 18 457.812 18 454.5 c 645 454.5 m 651 454.5 l 651 451.188 648.312 448.5 645 448.5 c 641.688 448.5 639 451.188 639 454.5 c 639 457.812 641.688 460.5 645 460.5 c 648.312 460.5 651 457.812 651 454.5 c S endstream endobj 229 0 obj << /Type /Page /Parent 498 0 R /Resources 230 0 R /Contents 231 0 R /Thumb 469 0 R /MediaBox [ 0 0 684 873 ] /CropBox [ 0 0 684 873 ] /Rotate 0 >> endobj 230 0 obj << /ProcSet [ /PDF /Text ] /Font << /F1 515 0 R /F2 518 0 R /F3 261 0 R >> /ExtGState << /GS1 523 0 R /GS2 521 0 R >> /ColorSpace << /Cs9 520 0 R /Cs21 293 0 R >> >> endobj 231 0 obj << /Length 20644 >> stream 1 g /GS1 gs 0 873 m 0 873 l f q 1 i 27 846 603 -783 re 0 873 m W n 0 873 684 -873 re W n /Cs21 cs 1 scn /GS2 gs 61 812 254 -695 re 0 873 m f* 340 812 254 -695 re f* BT /F2 1 Tf 5.6 0 0 5.6 63 806.2266 Tm 0 0 0 1 k -0.0001 Tc 0.0599 Tw [(hexadecimal number 0xab, the hexadecimal number 0xaa, the hexadecimal)]TJ 0 -1.0536 TD [(number 0xdb, the hexadecimal number 0xda, the hexadecimal number 0xd9,)]TJ T* [(the hexadecimal number 0xd8, the hexadecimal number 0xdf, the)]TJ T* [(hexadecimal number 0xde, the hexadecimal number 0xdd, the hexadecimal)]TJ T* [(number 0xdc, the hexadecimal number 0xd2, the hexadecimal number 0xd3,)]TJ T* [(the hexadecimal number 0xd0, the hexadecimal number 0xd1, the)]TJ T* [(hexadecimal number 0xd6, the hexadecimal number 0xd7, the hexadecimal)]TJ T* [(number 0xd4, the hexadecimal number 0xd5, the hexadecimal number 0xc9,)]TJ T* [(the hexadecimal number 0xc8, the hexadecimal number 0xcb, the)]TJ T* [(hexadecimal number 0xca, the hexadecimal number 0xcd, the hexadecimal)]TJ T* [(number 0xcc, the hexadecimal number 0xcf, the hexadecimal number 0xce,)]TJ T* [(the hexadecimal number 0xc0, the hexadecimal number 0xc1, the)]TJ T* [(hexadecimal number 0xc2, the hexadecimal number 0xc3, the hexadecimal)]TJ T* [(number 0xc4, the hexadecimal number 0xc5, the hexadecimal number 0xc6,)]TJ T* [(the hexadecimal number 0xc7, the hexadecimal number 0xff, the)]TJ T* [(hexadecimal number 0xfe, the hexadecimal number 0xfd, the hexadecimal)]TJ T* [(number 0xfc, the hexadecimal number 0xfb, the hexadecimal number 0xfa,)]TJ T* [(the hexadecimal number 0xf9, the hexadecimal number 0xf8, the)]TJ T* [(hexadecimal number 0xf6, the hexadecimal number 0xf7, the hexadecimal)]TJ T* [(number 0xf4, the hexadecimal number 0xf5, the hexadecimal number 0xf2,)]TJ T* [(the hexadecimal number 0xf3, the hexadecimal number 0xf0, the)]TJ T* [(hexadecimal number 0xf1, the hexadecimal number 0xed, the hexadecimal)]TJ T* [(number 0xec, the hexadecimal number 0xef, the hexadecimal number 0xee,)]TJ T* [(the hexadecimal number 0xe9, the hexadecimal number 0xe8, the)]TJ T* [(hexadecimal number 0xeb, the hexadecimal number 0xea, the hexadecimal)]TJ T* [(number 0xe4, the hexadecimal number 0xe5, the hexadecimal number 0xe6,)]TJ T* [(the hexadecimal number 0xe7, the hexadecimal number 0xe0, the)]TJ T* [(hexadecimal number 0xe1, the hexadecimal number 0xe2, and the)]TJ T* -0.0002 Tc (hexadecimal number 0xe3.)Tj 0 -2.1071 TD -0.0001 Tc [(Specifying the type \(this declaration is not to be shared\) byte,)]TJ 0 -1.0536 TD (allocate the variable 'lfsr1_bits1', defined to be an array with the)Tj T* [(size 512 and initialized to the set the hexadecimal number 0x00, the)]TJ T* [(hexadecimal number 0x24, the hexadecimal number 0x49, the hexadecimal)]TJ T* [(number 0x6d, the hexadecimal number 0x92, the hexadecimal number 0xb6,)]TJ T* [(the hexadecimal number 0xdb, the hexadecimal number 0xff, the)]TJ T* [(hexadecimal number 0x00, the hexadecimal number 0x24, the hexadecimal)]TJ T* [(number 0x49, the hexadecimal number 0x6d, the hexadecimal number 0x92,)]TJ T* [(the hexadecimal number 0xb6, the hexadecimal number 0xdb, the)]TJ T* [(hexadecimal number 0xff, the hexadecimal number 0x00, the hexadecimal)]TJ T* [(number 0x24, the hexadecimal number 0x49, the hexadecimal number 0x6d,)]TJ T* [(the hexadecimal number 0x92, the hexadecimal number 0xb6, the)]TJ T* [(hexadecimal number 0xdb, the hexadecimal number 0xff, the hexadecimal)]TJ T* [(number 0x00, the hexadecimal number 0x24, the hexadecimal number 0x49,)]TJ T* [(the hexadecimal number 0x6d, the hexadecimal number 0x92, the)]TJ T* [(hexadecimal number 0xb6, the hexadecimal number 0xdb, the hexadecimal)]TJ T* [(number 0xff, the hexadecimal number 0x00, the hexadecimal number 0x24,)]TJ T* [(the hexadecimal number 0x49, the hexadecimal number 0x6d, the)]TJ T* [(hexadecimal number 0x92, the hexadecimal number 0xb6, the hexadecimal)]TJ T* [(number 0xdb, the hexadecimal number 0xff, the hexadecimal number 0x00,)]TJ T* [(the hexadecimal number 0x24, the hexadecimal number 0x49, the)]TJ T* [(hexadecimal number 0x6d, the hexadecimal number 0x92, the hexadecimal)]TJ T* [(number 0xb6, the hexadecimal number 0xdb, the hexadecimal number 0xff,)]TJ T* [(the hexadecimal number 0x00, the hexadecimal number 0x24, the)]TJ T* [(hexadecimal number 0x49, the hexadecimal number 0x6d, the hexadecimal)]TJ T* [(number 0x92, the hexadecimal number 0xb6, the hexadecimal number 0xdb,)]TJ T* [(the hexadecimal number 0xff, the hexadecimal number 0x00, the)]TJ T* [(hexadecimal number 0x24, the hexadecimal number 0x49, the hexadecimal)]TJ T* [(number 0x6d, the hexadecimal number 0x92, the hexadecimal number 0xb6,)]TJ T* [(the hexadecimal number 0xdb, the hexadecimal number 0xff, the)]TJ T* [(hexadecimal number 0x00, the hexadecimal number 0x24, the hexadecimal)]TJ T* [(number 0x49, the hexadecimal number 0x6d, the hexadecimal number 0x92,)]TJ T* [(the hexadecimal number 0xb6, the hexadecimal number 0xdb, the)]TJ T* [(hexadecimal number 0xff, the hexadecimal number 0x00, the hexadecimal)]TJ T* [(number 0x24, the hexadecimal number 0x49, the hexadecimal number 0x6d,)]TJ T* [(the hexadecimal number 0x92, the hexadecimal number 0xb6, the)]TJ T* [(hexadecimal number 0xdb, the hexadecimal number 0xff, the hexadecimal)]TJ T* [(number 0x00, the hexadecimal number 0x24, the hexadecimal number 0x49,)]TJ T* [(the hexadecimal number 0x6d, the hexadecimal number 0x92, the)]TJ T* [(hexadecimal number 0xb6, the hexadecimal number 0xdb, the hexadecimal)]TJ T* [(number 0xff, the hexadecimal number 0x00, the hexadecimal number 0x24,)]TJ T* [(the hexadecimal number 0x49, the hexadecimal number 0x6d, the)]TJ T* [(hexadecimal number 0x92, the hexadecimal number 0xb6, the hexadecimal)]TJ T* [(number 0xdb, the hexadecimal number 0xff, the hexadecimal number 0x00,)]TJ T* [(the hexadecimal number 0x24, the hexadecimal number 0x49, the)]TJ T* [(hexadecimal number 0x6d, the hexadecimal number 0x92, the hexadecimal)]TJ T* [(number 0xb6, the hexadecimal number 0xdb, the hexadecimal number 0xff,)]TJ T* [(the hexadecimal number 0x00, the hexadecimal number 0x24, the)]TJ T* [(hexadecimal number 0x49, the hexadecimal number 0x6d, the hexadecimal)]TJ T* [(number 0x92, the hexadecimal number 0xb6, the hexadecimal number 0xdb,)]TJ T* [(the hexadecimal number 0xff, the hexadecimal number 0x00, the)]TJ T* [(hexadecimal number 0x24, the hexadecimal number 0x49, the hexadecimal)]TJ T* [(number 0x6d, the hexadecimal number 0x92, the hexadecimal number 0xb6,)]TJ T* [(the hexadecimal number 0xdb, the hexadecimal number 0xff, the)]TJ T* [(hexadecimal number 0x00, the hexadecimal number 0x24, the hexadecimal)]TJ T* [(number 0x49, the hexadecimal number 0x6d, the hexadecimal number 0x92,)]TJ T* [(the hexadecimal number 0xb6, the hexadecimal number 0xdb, the)]TJ T* [(hexadecimal number 0xff, the hexadecimal number 0x00, the hexadecimal)]TJ T* [(number 0x24, the hexadecimal number 0x49, the hexadecimal number 0x6d,)]TJ T* [(the hexadecimal number 0x92, the hexadecimal number 0xb6, the)]TJ T* [(hexadecimal number 0xdb, the hexadecimal number 0xff, the hexadecimal)]TJ T* [(number 0x00, the hexadecimal number 0x24, the hexadecimal number 0x49,)]TJ T* [(the hexadecimal number 0x6d, the hexadecimal number 0x92, the)]TJ T* [(hexadecimal number 0xb6, the hexadecimal number 0xdb, the hexadecimal)]TJ T* [(number 0xff, the hexadecimal number 0x00, the hexadecimal number 0x24,)]TJ T* [(the hexadecimal number 0x49, the hexadecimal number 0x6d, the)]TJ T* [(hexadecimal number 0x92, the hexadecimal number 0xb6, the hexadecimal)]TJ T* [(number 0xdb, the hexadecimal number 0xff, the hexadecimal number 0x00,)]TJ T* [(the hexadecimal number 0x24, the hexadecimal number 0x49, the)]TJ T* [(hexadecimal number 0x6d, the hexadecimal number 0x92, the hexadecimal)]TJ T* [(number 0xb6, the hexadecimal number 0xdb, the hexadecimal number 0xff,)]TJ T* [(the hexadecimal number 0x00, the hexadecimal number 0x24, the)]TJ T* [(hexadecimal number 0x49, the hexadecimal number 0x6d, the hexadecimal)]TJ T* [(number 0x92, the hexadecimal number 0xb6, the hexadecimal number 0xdb,)]TJ T* [(the hexadecimal number 0xff, the hexadecimal number 0x00, the)]TJ T* [(hexadecimal number 0x24, the hexadecimal number 0x49, the hexadecimal)]TJ T* [(number 0x6d, the hexadecimal number 0x92, the hexadecimal number 0xb6,)]TJ T* [(the hexadecimal number 0xdb, the hexadecimal number 0xff, the)]TJ T* [(hexadecimal number 0x00, the hexadecimal number 0x24, the hexadecimal)]TJ T* [(number 0x49, the hexadecimal number 0x6d, the hexadecimal number 0x92,)]TJ T* [(the hexadecimal number 0xb6, the hexadecimal number 0xdb, the)]TJ T* [(hexadecimal number 0xff, the hexadecimal number 0x00, the hexadecimal)]TJ T* [(number 0x24, the hexadecimal number 0x49, the hexadecimal number 0x6d,)]TJ T* [(the hexadecimal number 0x92, the hexadecimal number 0xb6, the)]TJ T* [(hexadecimal number 0xdb, the hexadecimal number 0xff, the hexadecimal)]TJ T* [(number 0x00, the hexadecimal number 0x24, the hexadecimal number 0x49,)]TJ T* [(the hexadecimal number 0x6d, the hexadecimal number 0x92, the)]TJ 49.8214 122.2142 TD [(hexadecimal number 0xb6, the hexadecimal number 0xdb, the hexadecimal)]TJ 0 -1.0536 TD [(number 0xff, the hexadecimal number 0x00, the hexadecimal number 0x24,)]TJ T* [(the hexadecimal number 0x49, the hexadecimal number 0x6d, the)]TJ T* [(hexadecimal number 0x92, the hexadecimal number 0xb6, the hexadecimal)]TJ T* [(number 0xdb, the hexadecimal number 0xff, the hexadecimal number 0x00,)]TJ T* [(the hexadecimal number 0x24, the hexadecimal number 0x49, the)]TJ T* [(hexadecimal number 0x6d, the hexadecimal number 0x92, the hexadecimal)]TJ T* [(number 0xb6, the hexadecimal number 0xdb, the hexadecimal number 0xff,)]TJ T* [(the hexadecimal number 0x00, the hexadecimal number 0x24, the)]TJ T* [(hexadecimal number 0x49, the hexadecimal number 0x6d, the hexadecimal)]TJ T* [(number 0x92, the hexadecimal number 0xb6, the hexadecimal number 0xdb,)]TJ T* [(the hexadecimal number 0xff, the hexadecimal number 0x00, the)]TJ T* [(hexadecimal number 0x24, the hexadecimal number 0x49, the hexadecimal)]TJ T* [(number 0x6d, the hexadecimal number 0x92, the hexadecimal number 0xb6,)]TJ T* [(the hexadecimal number 0xdb, the hexadecimal number 0xff, the)]TJ T* [(hexadecimal number 0x00, the hexadecimal number 0x24, the hexadecimal)]TJ T* [(number 0x49, the hexadecimal number 0x6d, the hexadecimal number 0x92,)]TJ T* [(the hexadecimal number 0xb6, the hexadecimal number 0xdb, the)]TJ T* [(hexadecimal number 0xff, the hexadecimal number 0x00, the hexadecimal)]TJ T* [(number 0x24, the hexadecimal number 0x49, the hexadecimal number 0x6d,)]TJ T* [(the hexadecimal number 0x92, the hexadecimal number 0xb6, the)]TJ T* [(hexadecimal number 0xdb, the hexadecimal number 0xff, the hexadecimal)]TJ T* [(number 0x00, the hexadecimal number 0x24, the hexadecimal number 0x49,)]TJ T* [(the hexadecimal number 0x6d, the hexadecimal number 0x92, the)]TJ T* [(hexadecimal number 0xb6, the hexadecimal number 0xdb, the hexadecimal)]TJ T* [(number 0xff, the hexadecimal number 0x00, the hexadecimal number 0x24,)]TJ T* [(the hexadecimal number 0x49, the hexadecimal number 0x6d, the)]TJ T* [(hexadecimal number 0x92, the hexadecimal number 0xb6, the hexadecimal)]TJ T* [(number 0xdb, the hexadecimal number 0xff, the hexadecimal number 0x00,)]TJ T* [(the hexadecimal number 0x24, the hexadecimal number 0x49, the)]TJ T* [(hexadecimal number 0x6d, the hexadecimal number 0x92, the hexadecimal)]TJ T* [(number 0xb6, the hexadecimal number 0xdb, the hexadecimal number 0xff,)]TJ T* [(the hexadecimal number 0x00, the hexadecimal number 0x24, the)]TJ T* [(hexadecimal number 0x49, the hexadecimal number 0x6d, the hexadecimal)]TJ T* [(number 0x92, the hexadecimal number 0xb6, the hexadecimal number 0xdb,)]TJ T* [(the hexadecimal number 0xff, the hexadecimal number 0x00, the)]TJ T* [(hexadecimal number 0x24, the hexadecimal number 0x49, the hexadecimal)]TJ T* [(number 0x6d, the hexadecimal number 0x92, the hexadecimal number 0xb6,)]TJ T* [(the hexadecimal number 0xdb, the hexadecimal number 0xff, the)]TJ T* [(hexadecimal number 0x00, the hexadecimal number 0x24, the hexadecimal)]TJ T* [(number 0x49, the hexadecimal number 0x6d, the hexadecimal number 0x92,)]TJ T* [(the hexadecimal number 0xb6, the hexadecimal number 0xdb, the)]TJ T* [(hexadecimal number 0xff, the hexadecimal number 0x00, the hexadecimal)]TJ T* [(number 0x24, the hexadecimal number 0x49, the hexadecimal number 0x6d,)]TJ T* [(the hexadecimal number 0x92, the hexadecimal number 0xb6, the)]TJ T* [(hexadecimal number 0xdb, the hexadecimal number 0xff, the hexadecimal)]TJ T* [(number 0x00, the hexadecimal number 0x24, the hexadecimal number 0x49,)]TJ T* [(the hexadecimal number 0x6d, the hexadecimal number 0x92, the)]TJ T* [(hexadecimal number 0xb6, the hexadecimal number 0xdb, the hexadecimal)]TJ T* [(number 0xff, the hexadecimal number 0x00, the hexadecimal number 0x24,)]TJ T* [(the hexadecimal number 0x49, the hexadecimal number 0x6d, the)]TJ T* [(hexadecimal number 0x92, the hexadecimal number 0xb6, the hexadecimal)]TJ T* [(number 0xdb, the hexadecimal number 0xff, the hexadecimal number 0x00,)]TJ T* [(the hexadecimal number 0x24, the hexadecimal number 0x49, the)]TJ T* [(hexadecimal number 0x6d, the hexadecimal number 0x92, the hexadecimal)]TJ T* [(number 0xb6, the hexadecimal number 0xdb, the hexadecimal number 0xff,)]TJ T* [(the hexadecimal number 0x00, the hexadecimal number 0x24, the)]TJ T* [(hexadecimal number 0x49, the hexadecimal number 0x6d, the hexadecimal)]TJ T* [(number 0x92, the hexadecimal number 0xb6, the hexadecimal number 0xdb,)]TJ T* [(the hexadecimal number 0xff, the hexadecimal number 0x00, the)]TJ T* [(hexadecimal number 0x24, the hexadecimal number 0x49, the hexadecimal)]TJ T* [(number 0x6d, the hexadecimal number 0x92, the hexadecimal number 0xb6,)]TJ T* [(the hexadecimal number 0xdb, the hexadecimal number 0xff, the)]TJ T* [(hexadecimal number 0x00, the hexadecimal number 0x24, the hexadecimal)]TJ T* [(number 0x49, the hexadecimal number 0x6d, the hexadecimal number 0x92,)]TJ T* [(the hexadecimal number 0xb6, the hexadecimal number 0xdb, the)]TJ T* [(hexadecimal number 0xff, the hexadecimal number 0x00, the hexadecimal)]TJ T* [(number 0x24, the hexadecimal number 0x49, the hexadecimal number 0x6d,)]TJ T* [(the hexadecimal number 0x92, the hexadecimal number 0xb6, the)]TJ T* [(hexadecimal number 0xdb, the hexadecimal number 0xff, the hexadecimal)]TJ T* [(number 0x00, the hexadecimal number 0x24, the hexadecimal number 0x49,)]TJ T* [(the hexadecimal number 0x6d, the hexadecimal number 0x92, the)]TJ T* [(hexadecimal number 0xb6, the hexadecimal number 0xdb, the hexadecimal)]TJ T* [(number 0xff, the hexadecimal number 0x00, the hexadecimal number 0x24,)]TJ T* [(the hexadecimal number 0x49, the hexadecimal number 0x6d, the)]TJ T* [(hexadecimal number 0x92, the hexadecimal number 0xb6, the hexadecimal)]TJ T* [(number 0xdb, the hexadecimal number 0xff, the hexadecimal number 0x00,)]TJ T* [(the hexadecimal number 0x24, the hexadecimal number 0x49, the)]TJ T* [(hexadecimal number 0x6d, the hexadecimal number 0x92, the hexadecimal)]TJ T* [(number 0xb6, the hexadecimal number 0xdb, the hexadecimal number 0xff,)]TJ T* [(the hexadecimal number 0x00, the hexadecimal number 0x24, the)]TJ T* [(hexadecimal number 0x49, the hexadecimal number 0x6d, the hexadecimal)]TJ T* [(number 0x92, the hexadecimal number 0xb6, the hexadecimal number 0xdb,)]TJ T* [(the hexadecimal number 0xff, the hexadecimal number 0x00, the)]TJ T* [(hexadecimal number 0x24, the hexadecimal number 0x49, the hexadecimal)]TJ T* [(number 0x6d, the hexadecimal number 0x92, the hexadecimal number 0xb6,)]TJ T* [(the hexadecimal number 0xdb, the hexadecimal number 0xff, the)]TJ T* [(hexadecimal number 0x00, the hexadecimal number 0x24, the hexadecimal)]TJ T* [(number 0x49, the hexadecimal number 0x6d, the hexadecimal number 0x92,)]TJ T* [(the hexadecimal number 0xb6, the hexadecimal number 0xdb, the)]TJ T* [(hexadecimal number 0xff, the hexadecimal number 0x00, the hexadecimal)]TJ T* [(number 0x24, the hexadecimal number 0x49, the hexadecimal number 0x6d,)]TJ T* [(the hexadecimal number 0x92, the hexadecimal number 0xb6, the)]TJ T* [(hexadecimal number 0xdb, the hexadecimal number 0xff, the hexadecimal)]TJ T* [(number 0x00, the hexadecimal number 0x24, the hexadecimal number 0x49,)]TJ T* [(the hexadecimal number 0x6d, the hexadecimal number 0x92, the)]TJ T* [(hexadecimal number 0xb6, the hexadecimal number 0xdb, the hexadecimal)]TJ T* [(number 0xff, the hexadecimal number 0x00, the hexadecimal number 0x24,)]TJ T* [(the hexadecimal number 0x49, the hexadecimal number 0x6d, the)]TJ T* [(hexadecimal number 0x92, the hexadecimal number 0xb6, the hexadecimal)]TJ T* [(number 0xdb, the hexadecimal number 0xff, the hexadecimal number 0x00,)]TJ T* [(the hexadecimal number 0x24, the hexadecimal number 0x49, the)]TJ T* [(hexadecimal number 0x6d, the hexadecimal number 0x92, the hexadecimal)]TJ T* [(number 0xb6, the hexadecimal number 0xdb, the hexadecimal number 0xff,)]TJ T* [(the hexadecimal number 0x00, the hexadecimal number 0x24, the)]TJ T* [(hexadecimal number 0x49, the hexadecimal number 0x6d, the hexadecimal)]TJ T* [(number 0x92, the hexadecimal number 0xb6, the hexadecimal number 0xdb,)]TJ T* [(the hexadecimal number 0xff, the hexadecimal number 0x00, the)]TJ T* [(hexadecimal number 0x24, the hexadecimal number 0x49, the hexadecimal)]TJ T* [(number 0x6d, the hexadecimal number 0x92, the hexadecimal number 0xb6,)]TJ T* [(the hexadecimal number 0xdb, the hexadecimal number 0xff, the)]TJ T* [(hexadecimal number 0x00, the hexadecimal number 0x24, the hexadecimal)]TJ T* [(number 0x49, the hexadecimal number 0x6d, the hexadecimal number 0x92,)]TJ T* [(the hexadecimal number 0xb6, the hexadecimal number 0xdb, the)]TJ T* [(hexadecimal number 0xff, the hexadecimal number 0x00, the hexadecimal)]TJ T* [(number 0x24, the hexadecimal number 0x49, the hexadecimal number 0x6d,)]TJ T* [(the hexadecimal number 0x92, the hexadecimal number 0xb6, the)]TJ /F1 1 Tf 12 0 0 12 517.3723 90.3543 Tm 0 Tc 0 Tw (F)Tj 10.44 0 0 10.44 523.4518 90.3543 Tm -0.0001 Tc (ALL)Tj 12 0 0 12 544.7999 90.3543 Tm 0 Tc 0.025 Tw [(2000 75)]TJ /F3 1 Tf -40.15 0 TD -0.0002 Tc 0.0255 Tw [(The P)47.6(erl J)35.7(our)-8(nal #19)]TJ ET Q 0 0 0 0 k /GS2 gs 1 i 37 874 191 -12 re 162.892 90.354 m f* BT /F2 1 Tf 8 0 0 8 39 864 Tm /Cs9 cs 1 scn -0.0004 Tc -0.0019 Tw (TPJ#19/9.26 9/27/00 10:35 AM Page 75)Tj ET 1 G 0 J 0 j 0.5 w 10 M []0 d 36 873 m 36 849 l 0 837 m 24 837 l 621 873 m 621 849 l 657 837 m 633 837 l 36 36 m 36 60 l 0 72 m 24 72 l 621 36 m 621 60 l 657 72 m 633 72 l S /Cs9 CS 1 SCN 0.25 w 36 873 m 36 849 l 0 837 m 24 837 l 621 873 m 621 849 l 657 837 m 633 837 l 36 36 m 36 60 l 0 72 m 24 72 l 621 36 m 621 60 l 657 72 m 633 72 l S 1 G 0.5 w 304.5 861 m 352.5 861 l 304.5 48 m 352.5 48 l 12 478.5 m 12 430.5 l 645 478.5 m 645 430.5 l 328.5 873 m 328.5 849 l 328.5 60 m 328.5 36 l 0 454.5 m 24 454.5 l 633 454.5 m 657 454.5 l 328.5 861 m 334.5 861 l 334.5 857.688 331.812 855 328.5 855 c 325.188 855 322.5 857.688 322.5 861 c 322.5 864.312 325.188 867 328.5 867 c 331.812 867 334.5 864.312 334.5 861 c 328.5 48 m 334.5 48 l 334.5 44.688 331.812 42 328.5 42 c 325.188 42 322.5 44.688 322.5 48 c 322.5 51.312 325.188 54 328.5 54 c 331.812 54 334.5 51.312 334.5 48 c 12 454.5 m 18 454.5 l 18 451.188 15.312 448.5 12 448.5 c 8.688 448.5 6 451.188 6 454.5 c 6 457.812 8.688 460.5 12 460.5 c 15.312 460.5 18 457.812 18 454.5 c 645 454.5 m 651 454.5 l 651 451.188 648.312 448.5 645 448.5 c 641.688 448.5 639 451.188 639 454.5 c 639 457.812 641.688 460.5 645 460.5 c 648.312 460.5 651 457.812 651 454.5 c S /Cs9 CS 1 SCN 0.25 w 304.5 861 m 352.5 861 l 304.5 48 m 352.5 48 l 12 478.5 m 12 430.5 l 645 478.5 m 645 430.5 l 328.5 873 m 328.5 849 l 328.5 60 m 328.5 36 l 0 454.5 m 24 454.5 l 633 454.5 m 657 454.5 l 328.5 861 m 334.5 861 l 334.5 857.688 331.812 855 328.5 855 c 325.188 855 322.5 857.688 322.5 861 c 322.5 864.312 325.188 867 328.5 867 c 331.812 867 334.5 864.312 334.5 861 c 328.5 48 m 334.5 48 l 334.5 44.688 331.812 42 328.5 42 c 325.188 42 322.5 44.688 322.5 48 c 322.5 51.312 325.188 54 328.5 54 c 331.812 54 334.5 51.312 334.5 48 c 12 454.5 m 18 454.5 l 18 451.188 15.312 448.5 12 448.5 c 8.688 448.5 6 451.188 6 454.5 c 6 457.812 8.688 460.5 12 460.5 c 15.312 460.5 18 457.812 18 454.5 c 645 454.5 m 651 454.5 l 651 451.188 648.312 448.5 645 448.5 c 641.688 448.5 639 451.188 639 454.5 c 639 457.812 641.688 460.5 645 460.5 c 648.312 460.5 651 457.812 651 454.5 c S endstream endobj 232 0 obj << /Type /Page /Parent 498 0 R /Resources 233 0 R /Contents 234 0 R /Thumb 471 0 R /MediaBox [ 0 0 684 873 ] /CropBox [ 0 0 684 873 ] /Rotate 0 >> endobj 233 0 obj << /ProcSet [ /PDF /Text ] /Font << /F1 515 0 R /F2 518 0 R /F3 261 0 R >> /ExtGState << /GS1 523 0 R /GS2 521 0 R >> /ColorSpace << /Cs9 520 0 R /Cs21 293 0 R >> >> endobj 234 0 obj << /Length 18099 >> stream 1 g /GS1 gs 0 873 m 0 873 l f q 1 i 27 846 603 -783 re 0 873 m W n 0 873 684 -873 re W n /Cs21 cs 1 scn /GS2 gs 61 812 254 -695 re 0 873 m f* 340 812 254 -695 re f* BT /F2 1 Tf 5.6 0 0 5.6 63 806.2266 Tm 0 0 0 1 k -0.0001 Tc 0.0599 Tw [(hexadecimal number 0xdb, the hexadecimal number 0xff, the hexadecimal)]TJ 0 -1.0536 TD [(number 0x00, the hexadecimal number 0x24, the hexadecimal number 0x49,)]TJ T* [(the hexadecimal number 0x6d, the hexadecimal number 0x92, the)]TJ T* [(hexadecimal number 0xb6, the hexadecimal number 0xdb, the hexadecimal)]TJ T* [(number 0xff, the hexadecimal number 0x00, the hexadecimal number 0x24,)]TJ T* [(the hexadecimal number 0x49, the hexadecimal number 0x6d, the)]TJ T* [(hexadecimal number 0x92, the hexadecimal number 0xb6, the hexadecimal)]TJ T* [(number 0xdb, the hexadecimal number 0xff, the hexadecimal number 0x00,)]TJ T* [(the hexadecimal number 0x24, the hexadecimal number 0x49, the)]TJ T* [(hexadecimal number 0x6d, the hexadecimal number 0x92, the hexadecimal)]TJ T* [(number 0xb6, the hexadecimal number 0xdb, the hexadecimal number 0xff,)]TJ T* [(the hexadecimal number 0x00, the hexadecimal number 0x24, the)]TJ T* [(hexadecimal number 0x49, the hexadecimal number 0x6d, the hexadecimal)]TJ T* [(number 0x92, the hexadecimal number 0xb6, the hexadecimal number 0xdb,)]TJ T* [(the hexadecimal number 0xff, the hexadecimal number 0x00, the)]TJ T* [(hexadecimal number 0x24, the hexadecimal number 0x49, the hexadecimal)]TJ T* [(number 0x6d, the hexadecimal number 0x92, the hexadecimal number 0xb6,)]TJ T* [(the hexadecimal number 0xdb, and the hexadecimal number 0xff.)]TJ 0 -2.1071 TD [(Here, the author says "Reverse the order of the bits within a byte.")]TJ T* [(Specifying the type \(this declaration is not to be shared\) byte,)]TJ 0 -1.0536 TD (allocate the variable 'bit_reverse', defined to be an array with the)Tj T* [(size 256 and initialized to the set the hexadecimal number 0x00, the)]TJ T* [(hexadecimal number 0x80, the hexadecimal number 0x40, the hexadecimal)]TJ T* [(number 0xc0, the hexadecimal number 0x20, the hexadecimal number 0xa0,)]TJ T* [(the hexadecimal number 0x60, the hexadecimal number 0xe0, the)]TJ T* [(hexadecimal number 0x10, the hexadecimal number 0x90, the hexadecimal)]TJ T* [(number 0x50, the hexadecimal number 0xd0, the hexadecimal number 0x30,)]TJ T* [(the hexadecimal number 0xb0, the hexadecimal number 0x70, the)]TJ T* [(hexadecimal number 0xf0, the hexadecimal number 0x08, the hexadecimal)]TJ T* [(number 0x88, the hexadecimal number 0x48, the hexadecimal number 0xc8,)]TJ T* [(the hexadecimal number 0x28, the hexadecimal number 0xa8, the)]TJ T* [(hexadecimal number 0x68, the hexadecimal number 0xe8, the hexadecimal)]TJ T* [(number 0x18, the hexadecimal number 0x98, the hexadecimal number 0x58,)]TJ T* [(the hexadecimal number 0xd8, the hexadecimal number 0x38, the)]TJ T* [(hexadecimal number 0xb8, the hexadecimal number 0x78, the hexadecimal)]TJ T* [(number 0xf8, the hexadecimal number 0x04, the hexadecimal number 0x84,)]TJ T* [(the hexadecimal number 0x44, the hexadecimal number 0xc4, the)]TJ T* [(hexadecimal number 0x24, the hexadecimal number 0xa4, the hexadecimal)]TJ T* [(number 0x64, the hexadecimal number 0xe4, the hexadecimal number 0x14,)]TJ T* [(the hexadecimal number 0x94, the hexadecimal number 0x54, the)]TJ T* [(hexadecimal number 0xd4, the hexadecimal number 0x34, the hexadecimal)]TJ T* [(number 0xb4, the hexadecimal number 0x74, the hexadecimal number 0xf4,)]TJ T* [(the hexadecimal number 0x0c, the hexadecimal number 0x8c, the)]TJ T* [(hexadecimal number 0x4c, the hexadecimal number 0xcc, the hexadecimal)]TJ T* [(number 0x2c, the hexadecimal number 0xac, the hexadecimal number 0x6c,)]TJ T* [(the hexadecimal number 0xec, the hexadecimal number 0x1c, the)]TJ T* [(hexadecimal number 0x9c, the hexadecimal number 0x5c, the hexadecimal)]TJ T* [(number 0xdc, the hexadecimal number 0x3c, the hexadecimal number 0xbc,)]TJ T* [(the hexadecimal number 0x7c, the hexadecimal number 0xfc, the)]TJ T* [(hexadecimal number 0x02, the hexadecimal number 0x82, the hexadecimal)]TJ T* [(number 0x42, the hexadecimal number 0xc2, the hexadecimal number 0x22,)]TJ T* [(the hexadecimal number 0xa2, the hexadecimal number 0x62, the)]TJ T* [(hexadecimal number 0xe2, the hexadecimal number 0x12, the hexadecimal)]TJ T* [(number 0x92, the hexadecimal number 0x52, the hexadecimal number 0xd2,)]TJ T* [(the hexadecimal number 0x32, the hexadecimal number 0xb2, the)]TJ T* [(hexadecimal number 0x72, the hexadecimal number 0xf2, the hexadecimal)]TJ T* [(number 0x0a, the hexadecimal number 0x8a, the hexadecimal number 0x4a,)]TJ T* [(the hexadecimal number 0xca, the hexadecimal number 0x2a, the)]TJ T* [(hexadecimal number 0xaa, the hexadecimal number 0x6a, the hexadecimal)]TJ T* [(number 0xea, the hexadecimal number 0x1a, the hexadecimal number 0x9a,)]TJ T* [(the hexadecimal number 0x5a, the hexadecimal number 0xda, the)]TJ T* [(hexadecimal number 0x3a, the hexadecimal number 0xba, the hexadecimal)]TJ T* [(number 0x7a, the hexadecimal number 0xfa, the hexadecimal number 0x06,)]TJ T* [(the hexadecimal number 0x86, the hexadecimal number 0x46, the)]TJ T* [(hexadecimal number 0xc6, the hexadecimal number 0x26, the hexadecimal)]TJ T* [(number 0xa6, the hexadecimal number 0x66, the hexadecimal number 0xe6,)]TJ T* [(the hexadecimal number 0x16, the hexadecimal number 0x96, the)]TJ T* [(hexadecimal number 0x56, the hexadecimal number 0xd6, the hexadecimal)]TJ T* [(number 0x36, the hexadecimal number 0xb6, the hexadecimal number 0x76,)]TJ T* [(the hexadecimal number 0xf6, the hexadecimal number 0x0e, the)]TJ T* [(hexadecimal number 0x8e, the hexadecimal number 0x4e, the hexadecimal)]TJ T* [(number 0xce, the hexadecimal number 0x2e, the hexadecimal number 0xae,)]TJ T* [(the hexadecimal number 0x6e, the hexadecimal number 0xee, the)]TJ T* [(hexadecimal number 0x1e, the hexadecimal number 0x9e, the hexadecimal)]TJ T* [(number 0x5e, the hexadecimal number 0xde, the hexadecimal number 0x3e,)]TJ T* [(the hexadecimal number 0xbe, the hexadecimal number 0x7e, the)]TJ T* [(hexadecimal number 0xfe, the hexadecimal number 0x01, the hexadecimal)]TJ T* [(number 0x81, the hexadecimal number 0x41, the hexadecimal number 0xc1,)]TJ T* [(the hexadecimal number 0x21, the hexadecimal number 0xa1, the)]TJ T* [(hexadecimal number 0x61, the hexadecimal number 0xe1, the hexadecimal)]TJ T* [(number 0x11, the hexadecimal number 0x91, the hexadecimal number 0x51,)]TJ T* [(the hexadecimal number 0xd1, the hexadecimal number 0x31, the)]TJ T* [(hexadecimal number 0xb1, the hexadecimal number 0x71, the hexadecimal)]TJ T* [(number 0xf1, the hexadecimal number 0x09, the hexadecimal number 0x89,)]TJ T* [(the hexadecimal number 0x49, the hexadecimal number 0xc9, the)]TJ T* [(hexadecimal number 0x29, the hexadecimal number 0xa9, the hexadecimal)]TJ T* [(number 0x69, the hexadecimal number 0xe9, the hexadecimal number 0x19,)]TJ T* [(the hexadecimal number 0x99, the hexadecimal number 0x59, the)]TJ T* [(hexadecimal number 0xd9, the hexadecimal number 0x39, the hexadecimal)]TJ T* [(number 0xb9, the hexadecimal number 0x79, the hexadecimal number 0xf9,)]TJ T* [(the hexadecimal number 0x05, the hexadecimal number 0x85, the)]TJ T* [(hexadecimal number 0x45, the hexadecimal number 0xc5, the hexadecimal)]TJ T* [(number 0x25, the hexadecimal number 0xa5, the hexadecimal number 0x65,)]TJ T* [(the hexadecimal number 0xe5, the hexadecimal number 0x15, the)]TJ T* [(hexadecimal number 0x95, the hexadecimal number 0x55, the hexadecimal)]TJ T* [(number 0xd5, the hexadecimal number 0x35, the hexadecimal number 0xb5,)]TJ T* [(the hexadecimal number 0x75, the hexadecimal number 0xf5, the)]TJ T* [(hexadecimal number 0x0d, the hexadecimal number 0x8d, the hexadecimal)]TJ T* [(number 0x4d, the hexadecimal number 0xcd, the hexadecimal number 0x2d,)]TJ T* [(the hexadecimal number 0xad, the hexadecimal number 0x6d, the)]TJ T* [(hexadecimal number 0xed, the hexadecimal number 0x1d, the hexadecimal)]TJ T* [(number 0x9d, the hexadecimal number 0x5d, the hexadecimal number 0xdd,)]TJ T* [(the hexadecimal number 0x3d, the hexadecimal number 0xbd, the)]TJ T* [(hexadecimal number 0x7d, the hexadecimal number 0xfd, the hexadecimal)]TJ T* [(number 0x03, the hexadecimal number 0x83, the hexadecimal number 0x43,)]TJ T* [(the hexadecimal number 0xc3, the hexadecimal number 0x23, the)]TJ T* [(hexadecimal number 0xa3, the hexadecimal number 0x63, the hexadecimal)]TJ T* [(number 0xe3, the hexadecimal number 0x13, the hexadecimal number 0x93,)]TJ T* [(the hexadecimal number 0x53, the hexadecimal number 0xd3, the)]TJ T* [(hexadecimal number 0x33, the hexadecimal number 0xb3, the hexadecimal)]TJ T* [(number 0x73, the hexadecimal number 0xf3, the hexadecimal number 0x0b,)]TJ T* [(the hexadecimal number 0x8b, the hexadecimal number 0x4b, the)]TJ T* [(hexadecimal number 0xcb, the hexadecimal number 0x2b, the hexadecimal)]TJ T* [(number 0xab, the hexadecimal number 0x6b, the hexadecimal number 0xeb,)]TJ T* [(the hexadecimal number 0x1b, the hexadecimal number 0x9b, the)]TJ 49.8214 122.2142 TD [(hexadecimal number 0x5b, the hexadecimal number 0xdb, the hexadecimal)]TJ 0 -1.0536 TD [(number 0x3b, the hexadecimal number 0xbb, the hexadecimal number 0x7b,)]TJ T* [(the hexadecimal number 0xfb, the hexadecimal number 0x07, the)]TJ T* [(hexadecimal number 0x87, the hexadecimal number 0x47, the hexadecimal)]TJ T* [(number 0xc7, the hexadecimal number 0x27, the hexadecimal number 0xa7,)]TJ T* [(the hexadecimal number 0x67, the hexadecimal number 0xe7, the)]TJ T* [(hexadecimal number 0x17, the hexadecimal number 0x97, the hexadecimal)]TJ T* [(number 0x57, the hexadecimal number 0xd7, the hexadecimal number 0x37,)]TJ T* [(the hexadecimal number 0xb7, the hexadecimal number 0x77, the)]TJ T* [(hexadecimal number 0xf7, the hexadecimal number 0x0f, the hexadecimal)]TJ T* [(number 0x8f, the hexadecimal number 0x4f, the hexadecimal number 0xcf,)]TJ T* [(the hexadecimal number 0x2f, the hexadecimal number 0xaf, the)]TJ T* [(hexadecimal number 0x6f, the hexadecimal number 0xef, the hexadecimal)]TJ T* [(number 0x1f, the hexadecimal number 0x9f, the hexadecimal number 0x5f,)]TJ T* [(the hexadecimal number 0xdf, the hexadecimal number 0x3f, the)]TJ T* [(hexadecimal number 0xbf, the hexadecimal number 0x7f, and the)]TJ T* [(hexadecimal number 0xff.)]TJ 0 -2.1071 TD [(Here, the author says "this function is only used internally when)]TJ 0 -1.0536 TD [(decrypting title key". )]TJ 0 -2.1071 TD [(This is the definition of the function 'css_titlekey'. It returns a)]TJ 0 -1.0536 TD [(value of the type \(this declaration is not to be shared\) void. The)]TJ T* [(function 'css_titlekey' has the following parameters: byte pointer)]TJ T* [('key', byte pointer 'im', byte 'invert', and byte 'invert'.)]TJ 0 -2.1072 TD [(The local variables for the function 'css_titlekey' begin here:)]TJ 0 -1.0536 TD [(Specifying the type unsigned integer, allocate the variables)]TJ T* [('lfsr1_lo', 'lfsr1_hi', 'lfsr0', and 'combined'.)]TJ 0 -2.1071 TD [(Specifying the type byte, allocate the variables 'o_lfsr0' and 'o_lfsr1'.)]TJ T* [(Specifying the type byte, allocate the variable 'k', defined to be an)]TJ 0 -1.0536 TD -0.0002 Tc [(array with the size 5.)]TJ 0 -2.1071 TD -0.0001 Tc [(Specifying the type integer, allocate the variable 'i'.)]TJ T* (And now comes the instruction set for the function 'css_titlekey'.)Tj T* [(Assign to lfsr1_lo the value "im bitwise orred by the hexadecimal)]TJ 0 -1.0536 TD -0.0002 Tc [(number 0x100".)]TJ 0 -2.1072 TD -0.0001 Tc [(Assign to lfsr1_hi the value "array im's element at address \(1\)".)]TJ T* [(Assign to lfsr0 the value "the 2-level parenthetical expression array)]TJ 0 -1.0536 TD [(im's element at address \(4\) shifted left by 17 now bitwise orred by)]TJ T* [(the 1-level parenthetical expression array im's element at address \(3\))]TJ T* [(shifted left by 9 now bitwise orred by the 1-level parenthetical)]TJ T* [(expression array im's element at address \(2\) shifted left by 1 now now)]TJ T* [(plus 8 minus the 1-level parenthetical expression array im's element)]TJ T* (at address \(2\) bitwise anded by 7".)Tj 0 -2.1071 TD [(Assign to lfsr0 the value "the 1-level parenthetical expression array)]TJ 0 -1.0536 TD [(bit_reverse's element at address \(lfsr0 bitwise anded by the)]TJ T* [(hexadecimal number 0xff\) shifted left by 24 now bitwise orred by the)]TJ T* [(1-level parenthetical expression array bit_reverse's element at)]TJ T* [(address \(the 1-level parenthetical expression lfsr0 shifted right by 8)]TJ T* [(now bitwise anded by the hexadecimal number 0xff\) shifted left by 16)]TJ T* [(now bitwise orred by the 1-level parenthetical expression array)]TJ T* [(bit_reverse's element at address \(the 1-level parenthetical expression)]TJ T* [(lfsr0 shifted right by 16 now bitwise anded by the hexadecimal number)]TJ T* [(0xff\) shifted left by 8 now bitwise orred by array bit_reverse's)]TJ T* [(element at address \(the 1-level parenthetical expression lfsr0 shifted)]TJ T* [(right by 24 now bitwise anded by the hexadecimal number 0xff\)".)]TJ 0 -2.1071 TD [(Assign to combined the value "0".)]TJ T* [(Here we set up for an iteration loop.)]TJ T* [(We initialize by performing this instruction: Assign to i the value "0".)]TJ T* [(We continue the loop as long as the following expression comes out)]TJ 0 -1.0536 TD [(positive: 'i checked to be less than 5')]TJ 0 -2.1071 TD [(At the end of each repetition we increment i.)]TJ T* -0.0002 Tc [(And now some statements.)]TJ T* -0.0001 Tc [(Assign to o_lfsr1 the value "array lfsr1_bits0's element at address)]TJ 0 -1.0536 TD [(\(lfsr1_hi\) bitwise xorred by array lfsr1_bits1's element at address)]TJ T* -0.0002 Tc 0 Tw (\(lfsr1_lo\)".)Tj 0 -2.1071 TD -0.0001 Tc 0.0599 Tw [(Assign to lfsr1_hi the value "lfsr1_lo shifted right by 1".)]TJ T* [(Assign to lfsr1_lo the value "the 2-level parenthetical expression)]TJ 0 -1.0536 TD [(lfsr1_lo bitwise anded by 1 now shifted left by 8 now bitwise xorred)]TJ T* -0.0002 Tc (by o_lfsr1".)Tj 0 -2.1071 TD -0.0001 Tc [(Assign to o_lfsr1 the value "array bit_reverse's element at address)]TJ 0 -1.0536 TD -0.0002 Tc 0 Tw (\(o_lfsr1\)".)Tj 0 -2.1071 TD -0.0001 Tc 0.0599 Tw [(Here, the author says ""o_lfsr0 =)]TJ 0 -1.0536 TD 0 Tw (\(lfsr0>7\)^\(lfsr0>10\)^\(lfsr0>11\)^\(lfsr0>19\);")Tj 0 -2.1071 TD 0.0599 Tw [(Assign to o_lfsr0 the value "the 7-level parenthetical expression)]TJ 0 -1.0536 TD [(lfsr0 shifted right by 8 now bitwise xorred by lfsr0 now shifted right)]TJ T* [(by 1 now bitwise xorred by lfsr0 now shifted right by 3 now bitwise)]TJ T* [(xorred by lfsr0 now shifted right by 7".)]TJ 0 -2.1071 TD [(Assign to lfsr0 the value "the 1-level parenthetical expression lfsr0)]TJ 0 -1.0536 TD [(shifted right by 8 now bitwise orred by the 1-level parenthetical)]TJ T* [(expression o_lfsr0 shifted left by 24".)]TJ 0 -2.1071 TD [(Increase combined by "the 1-level parenthetical expression o_lfsr0)]TJ 0 -1.0536 TD [(bitwise xorred by invert now plus o_lfsr1".)]TJ 0 -2.1071 TD [(Assign to array k's element at address \(i\) the value "combined bitwise)]TJ 0 -1.0536 TD [(anded by the hexadecimal number 0xff".)]TJ 0 -2.1071 TD [(Bit shift combined right by "8".)]TJ T* [(A compound block of instructions for a for loop ends here.)]TJ T* [(Assign to array key's element at address \(4\) the value "array k's)]TJ 0 -1.0536 TD [(element at address \(4\) bitwise xorred by array csstab1's element at)]TJ T* [(address \(array key's element at address \(4\)\) bitwise xorred by array)]TJ T* [(key's element at address \(3\)".)]TJ /F1 1 Tf 12 0 0 12 63 90.3543 Tm 0 Tc 0 Tw [(76)-1100(F)]TJ 10.44 0 0 10.44 94.2795 90.3543 Tm -0.0001 Tc (ALL)Tj 12 0 0 12 115.6277 90.3543 Tm 0 Tc (2000)Tj /F3 1 Tf 30.9897 0.0003 TD -0.0002 Tc 0.0255 Tw [(The P)47.6(erl J)35.7(our)-8(nal #19)]TJ ET Q 0 0 0 0 k /GS2 gs 1 i 37 874 191 -12 re 587.395 90.357 m f* BT /F2 1 Tf 8 0 0 8 39 864 Tm /Cs9 cs 1 scn -0.0004 Tc -0.0019 Tw (TPJ#19/9.26 9/27/00 10:35 AM Page 76)Tj ET 1 G 0 J 0 j 0.5 w 10 M []0 d 36 873 m 36 849 l 0 837 m 24 837 l 621 873 m 621 849 l 657 837 m 633 837 l 36 36 m 36 60 l 0 72 m 24 72 l 621 36 m 621 60 l 657 72 m 633 72 l S /Cs9 CS 1 SCN 0.25 w 36 873 m 36 849 l 0 837 m 24 837 l 621 873 m 621 849 l 657 837 m 633 837 l 36 36 m 36 60 l 0 72 m 24 72 l 621 36 m 621 60 l 657 72 m 633 72 l S 1 G 0.5 w 304.5 861 m 352.5 861 l 304.5 48 m 352.5 48 l 12 478.5 m 12 430.5 l 645 478.5 m 645 430.5 l 328.5 873 m 328.5 849 l 328.5 60 m 328.5 36 l 0 454.5 m 24 454.5 l 633 454.5 m 657 454.5 l 328.5 861 m 334.5 861 l 334.5 857.688 331.812 855 328.5 855 c 325.188 855 322.5 857.688 322.5 861 c 322.5 864.312 325.188 867 328.5 867 c 331.812 867 334.5 864.312 334.5 861 c 328.5 48 m 334.5 48 l 334.5 44.688 331.812 42 328.5 42 c 325.188 42 322.5 44.688 322.5 48 c 322.5 51.312 325.188 54 328.5 54 c 331.812 54 334.5 51.312 334.5 48 c 12 454.5 m 18 454.5 l 18 451.188 15.312 448.5 12 448.5 c 8.688 448.5 6 451.188 6 454.5 c 6 457.812 8.688 460.5 12 460.5 c 15.312 460.5 18 457.812 18 454.5 c 645 454.5 m 651 454.5 l 651 451.188 648.312 448.5 645 448.5 c 641.688 448.5 639 451.188 639 454.5 c 639 457.812 641.688 460.5 645 460.5 c 648.312 460.5 651 457.812 651 454.5 c S /Cs9 CS 1 SCN 0.25 w 304.5 861 m 352.5 861 l 304.5 48 m 352.5 48 l 12 478.5 m 12 430.5 l 645 478.5 m 645 430.5 l 328.5 873 m 328.5 849 l 328.5 60 m 328.5 36 l 0 454.5 m 24 454.5 l 633 454.5 m 657 454.5 l 328.5 861 m 334.5 861 l 334.5 857.688 331.812 855 328.5 855 c 325.188 855 322.5 857.688 322.5 861 c 322.5 864.312 325.188 867 328.5 867 c 331.812 867 334.5 864.312 334.5 861 c 328.5 48 m 334.5 48 l 334.5 44.688 331.812 42 328.5 42 c 325.188 42 322.5 44.688 322.5 48 c 322.5 51.312 325.188 54 328.5 54 c 331.812 54 334.5 51.312 334.5 48 c 12 454.5 m 18 454.5 l 18 451.188 15.312 448.5 12 448.5 c 8.688 448.5 6 451.188 6 454.5 c 6 457.812 8.688 460.5 12 460.5 c 15.312 460.5 18 457.812 18 454.5 c 645 454.5 m 651 454.5 l 651 451.188 648.312 448.5 645 448.5 c 641.688 448.5 639 451.188 639 454.5 c 639 457.812 641.688 460.5 645 460.5 c 648.312 460.5 651 457.812 651 454.5 c S endstream endobj 235 0 obj << /Type /Page /Parent 498 0 R /Resources 236 0 R /Contents 237 0 R /Thumb 473 0 R /MediaBox [ 0 0 684 873 ] /CropBox [ 0 0 684 873 ] /Rotate 0 >> endobj 236 0 obj << /ProcSet [ /PDF /Text ] /Font << /F1 515 0 R /F2 518 0 R /F3 261 0 R >> /ExtGState << /GS1 523 0 R /GS2 521 0 R >> /ColorSpace << /Cs9 520 0 R /Cs21 293 0 R >> >> endobj 237 0 obj << /Length 14656 >> stream 1 g /GS1 gs 0 873 m 0 873 l f q 1 i 27 846 603 -783 re 0 873 m W n 0 873 684 -873 re W n /Cs21 cs 1 scn /GS2 gs 61 812 254 -695 re 0 873 m f* 340 812 254 -695 re f* BT /F2 1 Tf 5.6 0 0 5.6 63 806.3266 Tm 0 0 0 1 k -0.0001 Tc 0.0599 Tw [(Assign to array key's element at address \(3\) the value "array k's)]TJ 0 -1.0536 TD [(element at address \(3\) bitwise xorred by array csstab1's element at)]TJ T* [(address \(array key's element at address \(3\)\) bitwise xorred by array)]TJ T* -0.0002 Tc (key's element at address \(2\)".)Tj 0 -2.1071 TD -0.0001 Tc [(Assign to array key's element at address \(2\) the value "array k's element)]TJ 0 -1.0536 TD [(at address \(2\) bitwise xorred by array csstab1's element at address)]TJ T* [(\(array key's element at address \(2\)\) bitwise xorred by array key's)]TJ T* -0.0002 Tc [(element at address \(1\)".)]TJ 0 -2.1071 TD -0.0001 Tc [(Assign to array key's element at address \(1\) the value "array k's)]TJ 0 -1.0536 TD [(element at address \(1\) bitwise xorred by array csstab1's element at)]TJ T* [(address \(array key's element at address \(1\)\) bitwise xorred by key".)]TJ 0 -2.1071 TD [(Assign to key the value "k bitwise xorred by array csstab1's element)]TJ 0 -1.0536 TD [(at address \(key\) bitwise xorred by array key's element at address)]TJ T* -0.0002 Tc 0 Tw (\(4\)".)Tj 0 -2.1071 TD -0.0001 Tc 0.0599 Tw [(Assign to array key's element at address \(4\) the value "array k's)]TJ 0 -1.0536 TD [(element at address \(4\) bitwise xorred by array csstab1's element at)]TJ T* [(address \(array key's element at address \(4\)\) bitwise xorred by array)]TJ T* -0.0002 Tc (key's element at address \(3\)".)Tj 0 -2.1071 TD -0.0001 Tc [(Assign to array key's element at address \(3\) the value "array k's)]TJ 0 -1.0536 TD [(element at address \(3\) bitwise xorred by array csstab1's element at)]TJ T* [(address \(array key's element at address \(3\)\) bitwise xorred by array)]TJ T* -0.0002 Tc (key's element at address \(2\)".)Tj 0 -2.1071 TD -0.0001 Tc [(Assign to array key's element at address \(2\) the value "array k's)]TJ 0 -1.0536 TD [(element at address \(2\) bitwise xorred by array csstab1's element at)]TJ T* [(address \(array key's element at address \(2\)\) bitwise xorred by array)]TJ T* -0.0002 Tc (key's element at address \(1\)".)Tj 0 -2.1071 TD -0.0001 Tc [(Assign to array key's element at address \(1\) the value "array k's)]TJ 0 -1.0536 TD [(element at address \(1\) bitwise xorred by array csstab1's element at)]TJ T* [(address \(array key's element at address \(1\)\) bitwise xorred by key".)]TJ 0 -2.1071 TD [(Assign to key the value "k bitwise xorred by array csstab1's element)]TJ 0 -1.0536 TD -0.0002 Tc [(at address \(key\)".)]TJ 0 -2.1071 TD -0.0001 Tc [(And here ends the definition of the function 'css_titlekey'.)]TJ T* (Here, the author says "this function decrypts a title key with the)Tj 0 -1.0536 TD (specified disk key tkey: the unobfuscated title key \(XORed with)Tj T* [(BusKey\) dkey: the unobfuscated disk key \(XORed with BusKey\) 2048 bytes)]TJ T* [(in length \(though only 5 bytes are needed, see below\) pkey: array of)]TJ T* [(pointers to player keys and disk key offsets use the result returned)]TJ T* -0.0002 Tc [(in tkey with css_descramble".)]TJ 0 -2.1071 TD -0.0001 Tc [(This is the definition of the function 'css_decrypttitlekey'. It)]TJ 0 -1.0536 TD -0.0002 Tc [(returns a value of the type integer.)]TJ 0 -2.1072 TD -0.0001 Tc [(The function 'css_decrypttitlekey' has the following parameters: byte)]TJ 0 -1.0536 TD [(pointer 'tkey', byte pointer 'dkey', the structure playkey)]TJ T* [(second-level pointer 'pkey', and the structure playkey second-level)]TJ T* -0.0002 Tc (pointer 'pkey'.)Tj 0 -2.1071 TD -0.0001 Tc [(The local variables for the function 'css_decrypttitlekey' begin here:)]TJ 0 -1.0536 TD [(Specifying the type byte, allocate the variables 'test', defined to be)]TJ T* [(an array with the size 5 and 'pretkey', defined to be an array with)]TJ T* -0.0002 Tc [(the size 5.)]TJ 0 -2.1071 TD -0.0001 Tc [(Specifying the type integer, allocate the variable 'i'.)]TJ T* [(And now comes the instruction set for the function 'css_decrypttitlekey'.)]TJ T* [(Here we set up for an iteration loop.)]TJ T* [(We continue the loop as long as the following expression comes out)]TJ 0 -1.0536 TD [(positive: 'the memory contents of pkey')]TJ 0 -2.1071 TD [(At the end of each repetition we increment pkey and increment i.)]TJ T* -0.0002 Tc [(And now some statements.)]TJ T* -0.0001 Tc (Perform the function memcpy as applied to the arguments 'pretkey',)Tj 0 -1.0536 TD [('dkey plus structure pointer member ', and '5'.)]TJ 0 -2.1071 TD [(Perform the function css_titlekey as applied to the arguments)]TJ 0 -1.0536 TD ('pretkey', 'structure pointer member ', and '0'.)Tj 0 -2.1071 TD [(Perform the function memcpy as applied to the arguments 'test',)]TJ 0 -1.0536 TD -0.0002 Tc ('dkey', and '5'.)Tj 0 -2.1071 TD -0.0001 Tc [(Perform the function css_titlekey as applied to the arguments 'test',)]TJ 0 -1.0536 TD -0.0002 Tc ('pretkey', and '0'.)Tj 0 -2.1071 TD -0.0001 Tc [(Execute the following part if the expression "the function memcmp as)]TJ 0 -1.0536 TD [(applied to the arguments 'test', 'pretkey', and '5' checked for)]TJ T* [(equality against 0" evaluates as positive:)]TJ 0 -2.1071 TD -0.0002 Tc [(And now some statements.)]TJ T* -0.0001 Tc [(Perform the function fprintf as applied to the arguments 'stderr',)]TJ 0 -1.0536 TD -0.0002 Tc [('"Using Key %d\\n"', and 'i plus 1'.)]TJ 0 -2.1071 TD -0.0001 Tc [(Here we break from the current loop.\\nA compound block of instructions)]TJ 0 -1.0536 TD -0.0002 Tc (for an if ends here.)Tj 0 -2.1071 TD -0.0001 Tc [(A compound block of instructions for a for loop ends here.)]TJ T* [(Execute the following part if the expression "the logical negation of)]TJ 0 -1.0536 TD [(the memory contents of pkey" evaluates as positive:)]TJ 0 -2.1071 TD -0.0002 Tc [(And now some statements.)]TJ T* -0.0001 Tc [(Perform the function fprintf as applied to the arguments 'stderr',)]TJ 0 -1.0536 TD [('"Shit - Need Key %d\\n"', and i plus 1'.)]TJ 0 -2.1072 TD -0.0002 Tc [(Here we end the current subroutine.)]TJ T* -0.0001 Tc [(A compound block of instructions for an if ends here.)]TJ T* [(Perform the function css_titlekey as applied to the arguments 'tkey',)]TJ 0 -1.0536 TD [('pretkey', and 'the hexadecimal number 0xff'.)]TJ 49.8214 120.0891 TD [(Here we end the current subroutine.)]TJ 0 -2.1071 TD [(We return the following value: "1".)]TJ T* [(And here ends the definition of the function 'css_decrypttitlekey'.)]TJ T* [(Here, the author says "this function does the actual descrambling sec:)]TJ 0 -1.0536 TD [(encrypted sector \(2048 bytes\) key: decrypted title key obtained from)]TJ T* -0.0002 Tc 0 Tw (css_decrypttitlekey".)Tj 0 -2.1071 TD 0.06 Tw [(Now back to the code.)]TJ T* -0.0001 Tc [(This is the definition of the function 'css_descramble'.)]TJ 0 -1.0536 TD [(It returns a value of the type void.)]TJ 0 -2.1071 TD [(The function 'css_descramble' has the following parameters:)]TJ 0 -1.0536 TD [(byte pointer 'sec', byte pointer 'key', and byte pointer 'key'.)]TJ 0 -2.1071 TD [(The local variables for the function 'css_descramble' begin here:)]TJ 0 -1.0536 TD [(Specifying the type unsigned integer, allocate the variables)]TJ T* [('lfsr1_lo', 'lfsr1_hi', 'lfsr0', and 'combined'.)]TJ 0 -2.1071 TD [(Specifying the type unsigned character, allocate the variables)]TJ 0 -1.0536 TD -0.0002 Tc [('o_lfsr0' and 'o_lfsr1'.)]TJ 0 -2.1071 TD -0.0001 Tc [(Specifying the type unsigned character, allocate the variable pointer)]TJ 0 -1.0536 TD [('end' \(initialized to sec plus the hexadecimal number 0x800\).)]TJ 0 -2.1071 TD [(And now comes the instruction set for the function 'css_descramble'.)]TJ 0 -1.0536 TD [(Note: we define the macro SALTED with the symbol i to use the token)]TJ T* [(sequence "\(key[i] ^ sec[0x54 + \(i\)]\)".)]TJ 0 -2.1071 TD [(Assign to lfsr1_lo the value "the function SALTED as applied to the)]TJ 0 -1.0536 TD [(argument '0' bitwise orred by the hexadecimal number 0x100".)]TJ 0 -2.1071 TD [(Assign to lfsr1_hi the value "the function SALTED as applied to the)]TJ 0 -1.0536 TD -0.0002 Tc (argument '1'".)Tj 0 -2.1071 TD -0.0001 Tc [(Assign to lfsr0 the value "the 2-level parenthetical expression the)]TJ 0 -1.0536 TD [(function SALTED as applied to the argument '4' shifted left by 17 now)]TJ T* [(bitwise orred by the 1-level parenthetical expression the function)]TJ T* [(SALTED as applied to the argument '3' shifted left by 9 now bitwise)]TJ T* [(orred by the 1-level parenthetical expression the function SALTED as)]TJ T* [(applied to the argument '2' shifted left by 1 now now plus 8 minus the)]TJ T* [(1-level parenthetical expression the function SALTED as applied to the)]TJ T* [(argument '2' bitwise anded by 7".)]TJ 0 -2.1071 TD [(Assign to lfsr0 the value "the 1-level parenthetical expression array)]TJ 0 -1.0536 TD [(bit_reverse's element at address \(lfsr0 bitwise anded by the)]TJ T* [(hexadecimal number 0xff\) shifted left by 24 now bitwise orred by the)]TJ T* [(1-level parenthetical expression array bit_reverse's element at)]TJ T* [(address \(the 1-level parenthetical expression lfsr0 shifted right by 8)]TJ T* [(now bitwise anded by the hexadecimal number 0xff\) shifted left by 16)]TJ T* [(now bitwise orred by the 1-level parenthetical expression array)]TJ T* [(bit_reverse's element at address \(the 1-level parenthetical expression)]TJ T* [(lfsr0 shifted right by 16 now bitwise anded by the hexadecimal number)]TJ T* [(0xff\) shifted left by 8 now bitwise orred by array bit_reverse's)]TJ T* [(element at address \(the 1-level parenthetical expression lfsr0 shifted)]TJ T* [(right by 24 now bitwise anded by the hexadecimal number 0xff\)".)]TJ 0 -2.1071 TD [(Increase sec by "the hexadecimal number 0x80".)]TJ T* [(Assign to combined the value "0".)]TJ T* [(Here we go into a repetition loop which we stay in as long as the)]TJ 0 -1.0536 TD [(following expression evaluates as positive: 'sec checked for)]TJ T* (inequality against end')Tj 0 -2.1071 TD -0.0002 Tc [(And now some statements.)]TJ T* -0.0001 Tc [(Assign to o_lfsr1 the value "array lfsr1_bits0's element at address)]TJ 0 -1.0536 TD [(\(lfsr1_hi\) bitwise xorred by array lfsr1_bits1's element at address)]TJ T* -0.0002 Tc 0 Tw (\(lfsr1_lo\)".)Tj 0 -2.1071 TD -0.0001 Tc 0.0599 Tw [(Assign to lfsr1_hi the value "lfsr1_lo shifted right by 1".)]TJ T* [(Assign to lfsr1_lo the value "the 2-level parenthetical expression)]TJ 0 -1.0536 TD [(lfsr1_lo bitwise anded by 1 now shifted left by 8 now bitwise xorred)]TJ T* -0.0002 Tc (by o_lfsr1".)Tj 0 -2.1071 TD -0.0001 Tc [(Assign to o_lfsr1 the value "array bit_reverse's element at address)]TJ 0 -1.0536 TD -0.0002 Tc 0 Tw (\(o_lfsr1\)".)Tj 0 -2.1071 TD -0.0001 Tc 0.0599 Tw [(Here, the author says "o_lfsr0 =)]TJ 0 -1.0536 TD 0 Tw (\(lfsr0>7\)^\(lfsr0>10\)^\(lfsr0>11\)^\(lfsr0>19\);")Tj 0 -2.1071 TD 0.0599 Tw [(Assign to o_lfsr0 the value "the 7-level parenthetical expression)]TJ 0 -1.0536 TD [(lfsr0 shifted right by 8 now bitwise xorred by lfsr0 now shifted right)]TJ T* [(by 1 now bitwise xorred by lfsr0 now shifted right by 3 now bitwise)]TJ T* [(xorred by lfsr0 now shifted right by 7".)]TJ 0 -2.1071 TD [(Assign to lfsr0 the value "the 1-level parenthetical expression lfsr0)]TJ 0 -1.0536 TD [(shifted right by 8 now bitwise orred by the 1-level parenthetical)]TJ T* [(expression o_lfsr0 shifted left by 24".)]TJ 0 -2.1071 TD [(Increase combined by "o_lfsr0 plus a casting into the type 'byte' of)]TJ 0 -1.0536 TD [(the one's complement of o_lfsr1".)]TJ 0 -2.1071 TD [(Assign to the memory contents of sec \(which is incremented up by one\))]TJ 0 -1.0536 TD [(the value "array csstab1's element at address \(the memory contents of)]TJ T* [(sec\) bitwise xorred by the 1-level parenthetical expression combined)]TJ T* [(bitwise anded by the hexadecimal number 0xff".)]TJ 0 -2.1071 TD [(Bit shift combined right by "8".)]TJ T* [(A compound block of instructions for a while loop ends here.)]TJ T* [(Now ends the repetition loop.)]TJ T* [(And here ends the definition of the function 'css_descramble'.)]TJ /F1 1 Tf 12 0 0 12 517.3723 90.3543 Tm 0 Tc 0 Tw (F)Tj 10.44 0 0 10.44 523.4518 90.3543 Tm -0.0001 Tc (ALL)Tj 12 0 0 12 544.7999 90.3543 Tm 0 Tc 0.025 Tw [(2000 77)]TJ /F3 1 Tf -40.15 0 TD -0.0002 Tc 0.0255 Tw [(The P)47.6(erl J)35.7(our)-8(nal #19)]TJ ET Q 0 0 0 0 k /GS2 gs 1 i 37 874 191 -12 re 162.892 90.354 m f* BT /F2 1 Tf 8 0 0 8 39 864 Tm /Cs9 cs 1 scn -0.0004 Tc -0.0019 Tw (TPJ#19/9.26 9/27/00 10:35 AM Page 77)Tj ET 1 G 0 J 0 j 0.5 w 10 M []0 d 36 873 m 36 849 l 0 837 m 24 837 l 621 873 m 621 849 l 657 837 m 633 837 l 36 36 m 36 60 l 0 72 m 24 72 l 621 36 m 621 60 l 657 72 m 633 72 l S /Cs9 CS 1 SCN 0.25 w 36 873 m 36 849 l 0 837 m 24 837 l 621 873 m 621 849 l 657 837 m 633 837 l 36 36 m 36 60 l 0 72 m 24 72 l 621 36 m 621 60 l 657 72 m 633 72 l S 1 G 0.5 w 304.5 861 m 352.5 861 l 304.5 48 m 352.5 48 l 12 478.5 m 12 430.5 l 645 478.5 m 645 430.5 l 328.5 873 m 328.5 849 l 328.5 60 m 328.5 36 l 0 454.5 m 24 454.5 l 633 454.5 m 657 454.5 l 328.5 861 m 334.5 861 l 334.5 857.688 331.812 855 328.5 855 c 325.188 855 322.5 857.688 322.5 861 c 322.5 864.312 325.188 867 328.5 867 c 331.812 867 334.5 864.312 334.5 861 c 328.5 48 m 334.5 48 l 334.5 44.688 331.812 42 328.5 42 c 325.188 42 322.5 44.688 322.5 48 c 322.5 51.312 325.188 54 328.5 54 c 331.812 54 334.5 51.312 334.5 48 c 12 454.5 m 18 454.5 l 18 451.188 15.312 448.5 12 448.5 c 8.688 448.5 6 451.188 6 454.5 c 6 457.812 8.688 460.5 12 460.5 c 15.312 460.5 18 457.812 18 454.5 c 645 454.5 m 651 454.5 l 651 451.188 648.312 448.5 645 448.5 c 641.688 448.5 639 451.188 639 454.5 c 639 457.812 641.688 460.5 645 460.5 c 648.312 460.5 651 457.812 651 454.5 c S /Cs9 CS 1 SCN 0.25 w 304.5 861 m 352.5 861 l 304.5 48 m 352.5 48 l 12 478.5 m 12 430.5 l 645 478.5 m 645 430.5 l 328.5 873 m 328.5 849 l 328.5 60 m 328.5 36 l 0 454.5 m 24 454.5 l 633 454.5 m 657 454.5 l 328.5 861 m 334.5 861 l 334.5 857.688 331.812 855 328.5 855 c 325.188 855 322.5 857.688 322.5 861 c 322.5 864.312 325.188 867 328.5 867 c 331.812 867 334.5 864.312 334.5 861 c 328.5 48 m 334.5 48 l 334.5 44.688 331.812 42 328.5 42 c 325.188 42 322.5 44.688 322.5 48 c 322.5 51.312 325.188 54 328.5 54 c 331.812 54 334.5 51.312 334.5 48 c 12 454.5 m 18 454.5 l 18 451.188 15.312 448.5 12 448.5 c 8.688 448.5 6 451.188 6 454.5 c 6 457.812 8.688 460.5 12 460.5 c 15.312 460.5 18 457.812 18 454.5 c 645 454.5 m 651 454.5 l 651 451.188 648.312 448.5 645 448.5 c 641.688 448.5 639 451.188 639 454.5 c 639 457.812 641.688 460.5 645 460.5 c 648.312 460.5 651 457.812 651 454.5 c S endstream endobj 238 0 obj << /Type /Page /Parent 498 0 R /Resources 239 0 R /Contents 240 0 R /Thumb 475 0 R /MediaBox [ 0 0 684 873 ] /CropBox [ 0 0 684 873 ] /Rotate 0 >> endobj 239 0 obj << /ProcSet [ /PDF /Text /ImageC /ImageI ] /Font << /F1 515 0 R /F2 518 0 R /F3 261 0 R /F5 262 0 R /F7 267 0 R /F8 268 0 R >> /XObject << /Im10 241 0 R >> /ExtGState << /GS1 523 0 R /GS2 521 0 R >> /ColorSpace << /Cs9 520 0 R /Cs10 264 0 R /Cs22 295 0 R >> >> endobj 240 0 obj << /Length 10794 >> stream 1 g /GS1 gs 0 873 m 0 873 l f q 1 i 27 846 603 -783 re 0 873 m W n 0 873 684 -873 re W n BT /F1 1 Tf 12 0 0 12 63 90.3543 Tm 0 0 0 1 k /GS2 gs 0 Tc 0 Tw [(78)-1100(F)]TJ 10.44 0 0 10.44 94.2795 90.3543 Tm -0.0001 Tc (ALL)Tj 12 0 0 12 115.6277 90.3543 Tm 0 Tc (2000)Tj /F3 1 Tf 30.9897 0.0003 TD -0.0002 Tc 0.0255 Tw [(The P)47.6(erl J)35.7(our)-8(nal #19)]TJ ET 0 0 0 0 k 63 279.94 531 -162.94 re 587.395 90.357 m f* BT /F2 1 Tf 7 0 0 7 63 275.2183 Tm 0 0 0 1 k 0.06 Tw (eval eval q.q>trd!Uj:)Tj 0 -1.1429 TD 0 Tw (%L<061:%C^chr\($$/$$\)x2016.)Tj /F1 1 Tf 11 0 0 11 63 564.5759 Tm 0.0199 Tc 0.378 Tw [(N)29.7(obody took this oppor)-7.8(tunity to)]TJ 0 -1.0909 TD -0.0001 Tc -0.0113 Tw [(implement Q)5.8(uake, which was too bad.)]TJ T* 0.1823 Tw [(O)5.8(nly two entrants w)5.8(ent for P)53.9(erl/Tk,)]TJ T* 0.235 Tw [(pr)5.8(obably because )44.9(Tk is both object-)]TJ T* 0.0064 Tc 0.3685 Tw (oriented and longwinded about it.)Tj T* -0.0001 Tc 0.274 Tw [(This categor)-17.9(y will exist in the next)]TJ T* 0.2337 Tw [(contest; the b)5.8(yte limit will be 4096)]TJ T* 0.0668 Tw [(b)5.8(ytes; and no console graphics will be)]TJ T* 0 Tw (permitted.)Tj 0 -2.1818 TD 0.232 Tw [(I)12(n)0( thir)13.8(d place: A)11.9(dam S)23.9(pragg, whose)]TJ 0 -1.0909 TD 0.0628 Tw [(nice, spar)9.7(e console graphics v)5.8(ersion of)]TJ T* 0.0199 Tc 0.3596 Tw (the skiing game was at least not)Tj T* 0.4664 Tw [(another thrice-damned v)5.9(ersion of)]TJ T* -0.0001 Tc 0 Tw [(M)12(astermind.)]TJ 0 -2.1818 TD -0.0121 Tw [(I)12(n)0( second place: S)23.9(tev)5.8(e Lidie)29.7()79.9(s)-0.1( )44.9(Tk game,)]TJ 0 -1.0909 TD 0.2485 Tw [(featuring the chance to destr)5.8(o)12(y)-0.1( )44.8(The)]TJ T* 0.025 Tw [(P)54(erl J)29.7(ournal;)]TJ 0 -2.1818 TD -0.0059 Tw [(and in first place, G)5.8(arr)-17.9(y )44.9(T)109.9(aylor)19.7()79.9(s)0( her)5.8(oic)]TJ 0 -1.0909 TD 0.3363 Tw [(r)9.9(eimplementation of F)35.8(r)6(ogger)59.7(, which)]TJ T* 0.025 Tw [(was obfuscated, ob)5.8(viously hellish to do, and fun to boot.)]TJ ET /Cs10 CS 1 SCN 0 J 0 j 2 w 10 M []0 d 63 640.98 m 594 640.98 l S 0 0 0 0 k 241.99 553.28 352.01 -231.96 re 305.374 300.576 m f* Q q 1 i 241.99 553.28 352.01 -231.96 re W* n q 352 0 0 232 241.99 321.28 cm /Im10 Do Q Q q 1 i 27 846 603 -783 re 0 873 m W n 0 873 684 -873 re W n BT /F8 1 Tf 11 0 0 11 241.9943 563.821 Tm 0 0 0 1 k /GS2 gs -0.0002 Tc 0.0255 Tw [(F)41.8(r)5.8(ogger in 2048 b)5.7(ytes.)]TJ ET 0 0 0 0 k /GS1 gs 286.9 642.64 88.82 -3.2 re 340.717 563.821 m f* BT 14 0 0 14 286.8213 640.0511 Tm 0 0 0 1 k /GS2 gs 0 Tc 0 Tw (T)Tj 12.18 0 0 12.18 296.3676 640.0511 Tm -0.0004 Tc (HE)Tj 14 0 0 14 316.8053 640.051 Tm 0 Tc (W)Tj 12.18 0 0 12.18 330.3542 640.051 Tm -0.0002 Tc (INNERS)Tj ET 0 0 0 0 k 63 798 531 -37.5 re 374.842 640.051 m f* BT 16 0 0 16 63 786.4766 Tm 0 0 0 1 k 0 Tc (T)Tj 13.92 0 0 13.92 73.9102 786.4766 Tm -0.0004 Tc (HE)Tj 16 0 0 16 97.7671 786.4766 Tm 0 Tc (F)Tj 13.92 0 0 13.92 106.2944 786.4766 Tm -0.0002 Tc (IFTH)Tj 16 0 0 16 143.5071 786.4766 Tm 0 Tc (O)Tj 13.92 0 0 13.92 156.179 786.4766 Tm -0.0001 Tc [(BFUSCA)81.7(TED)]TJ /F7 1 Tf 16 0 0 16 517.4298 786.4766 Tm -0.0002 Tc 0.0278 Tw [(F)14.7(elix Gallo)]TJ /F8 1 Tf -28.4019 -1.125 TD 0 Tc 0 Tw (P)Tj 13.92 0 0 13.92 72.2397 768.4766 Tm -0.0003 Tc (ERL)Tj 16 0 0 16 101.7177 768.4766 Tm 0 Tc (C)Tj 13.92 0 0 13.92 112.8192 768.4766 Tm -0.0001 Tc (ONTEST)Tj 16 0 0 16 173.2534 768.4766 Tm 0 Tc (R)Tj 13.92 0 0 13.92 183.7455 768.4766 Tm -0.0002 Tc [(ESUL)117.7(T)11.9(S)]TJ ET /Cs10 CS 1 SCN 0 J 0 j 1 w 10 M []0 d 63 804.47 m 594 804.47 l S 6 w 63 807 m 207 807 l S BT /F1 1 Tf 29.09 0 0 29.09 62.364 726.0442 Tm 0 Tc (I)Tj 11 0 0 11 72.125 738.0442 Tm -0.0001 Tc 0.1329 Tw [(n 1347, the B)11.9(lack D)5.8(eath sw)5.8(ept acr)5.8(oss E)17.8(u)0.1(r)5.8(ope, so)11.9(wing)]TJ 0 -1.0909 TD 0.2003 Tw [(the str)9.7(eets with the distor)-7.9(ted bodies of the dead and)]TJ -0.8295 -1.0909 TD 0.0199 Tc 0.3612 Tw [(driving fear-mad men to flagellate themselv)5.9(es with)]TJ T* -0.0001 Tc 0.025 Tw [(scourges in the desperate attempt to rid themselv)5.8(es of sin.)]TJ 0 -1.9091 TD 0.0075 Tw [(I)12(n)-0.1( 2000, )44.8(The F)33.9(ifth O)5.8(bfuscated P)53.9(erl Contest r)9.7(esults arriv)5.8(ed)]TJ 0 -1.0909 TD 0.025 Tw [(in my mailbo)5.8(x, with much the same effect.)]TJ 25.6909 6.3667 TD 0.0905 Tw (72 entries, some spanning multiple categories, comprised)Tj 0 -1.0909 TD 0.0922 Tw [(this y)5.8(ear)19.7()79.9(s)0( plague. Clearly)84.9(, the popularity of P)53.9(erl amongst)]TJ T* 0.0479 Tw [(insane asylum inmates is on an exponential gr)5.8(o)12(wth cur)-17.9(v)5.9(e)-0.1(;)]TJ T* 0.025 Tw [(debate the dir)9.7(ection of causality amongst y)5.8(ourselv)5.8(es.)]TJ 0 -1.9091 TD -0.0201 Tc 0.0209 Tw [(As always, per)-7.9(use the entries at http://tpj.com. A)5.7(ttempting to)]TJ 0 -1.0909 TD -0.0061 Tw (decipher them can )Tj /F5 1 Tf 7.0161 0 TD 0 Tw [(gr)19.6(eatly)]TJ /F1 1 Tf 2.4724 0 TD -0.006 Tw [(incr)9.7(ease y)5.8(our understanding of P)53.8(erl!)]TJ /F8 1 Tf 12 0 0 12 63 616.8574 Tm 0 Tc 0 Tw (C)Tj 10.44 0 0 10.44 71.3262 616.8574 Tm -0.0002 Tc [(A)81.6(TEGOR)44.7(Y)]TJ 12 0 0 12 122.1139 616.8574 Tm 0.0255 Tw (1: C)Tj 10.44 0 0 10.44 142.9803 616.8574 Tm -0.0003 Tc 0 Tw [(REA)81.4(T)0(E)]TJ 12 0 0 12 178.1081 616.8574 Tm -0.0001 Tc 0.0254 Tw (A D)Tj 10.44 0 0 10.44 198.4032 616.8574 Tm -0.0002 Tc 0 Tw (IVERSION)Tj /F1 1 Tf 11 0 0 11 63 604.8574 Tm -0.0001 Tc 0.025 Tw (\(17 deviants\))Tj 0 -1.0909 TD [(R)12.1(ules: \(U)29.7(sesTk\) ? 2048 chars : 512 chars)]TJ ET Q 0 0 0 0 k /GS2 gs 1 i 37 874 191 -12 re 237.27 592.857 m f* BT /F2 1 Tf 8 0 0 8 39 864 Tm /Cs9 cs 1 scn -0.0004 Tc -0.0019 Tw (TPJ#19/9.26 9/27/00 10:35 AM Page 78)Tj ET 1 G 0 J 0 j 0.5 w 10 M []0 d 36 873 m 36 849 l 0 837 m 24 837 l 621 873 m 621 849 l 657 837 m 633 837 l 36 36 m 36 60 l 0 72 m 24 72 l 621 36 m 621 60 l 657 72 m 633 72 l S /Cs9 CS 1 SCN 0.25 w 36 873 m 36 849 l 0 837 m 24 837 l 621 873 m 621 849 l 657 837 m 633 837 l 36 36 m 36 60 l 0 72 m 24 72 l 621 36 m 621 60 l 657 72 m 633 72 l S 1 G 0.5 w 304.5 861 m 352.5 861 l 304.5 48 m 352.5 48 l 12 478.5 m 12 430.5 l 645 478.5 m 645 430.5 l 328.5 873 m 328.5 849 l 328.5 60 m 328.5 36 l 0 454.5 m 24 454.5 l 633 454.5 m 657 454.5 l 328.5 861 m 334.5 861 l 334.5 857.688 331.812 855 328.5 855 c 325.188 855 322.5 857.688 322.5 861 c 322.5 864.312 325.188 867 328.5 867 c 331.812 867 334.5 864.312 334.5 861 c 328.5 48 m 334.5 48 l 334.5 44.688 331.812 42 328.5 42 c 325.188 42 322.5 44.688 322.5 48 c 322.5 51.312 325.188 54 328.5 54 c 331.812 54 334.5 51.312 334.5 48 c 12 454.5 m 18 454.5 l 18 451.188 15.312 448.5 12 448.5 c 8.688 448.5 6 451.188 6 454.5 c 6 457.812 8.688 460.5 12 460.5 c 15.312 460.5 18 457.812 18 454.5 c 645 454.5 m 651 454.5 l 651 451.188 648.312 448.5 645 448.5 c 641.688 448.5 639 451.188 639 454.5 c 639 457.812 641.688 460.5 645 460.5 c 648.312 460.5 651 457.812 651 454.5 c S /Cs9 CS 1 SCN 0.25 w 304.5 861 m 352.5 861 l 304.5 48 m 352.5 48 l 12 478.5 m 12 430.5 l 645 478.5 m 645 430.5 l 328.5 873 m 328.5 849 l 328.5 60 m 328.5 36 l 0 454.5 m 24 454.5 l 633 454.5 m 657 454.5 l 328.5 861 m 334.5 861 l 334.5 857.688 331.812 855 328.5 855 c 325.188 855 322.5 857.688 322.5 861 c 322.5 864.312 325.188 867 328.5 867 c 331.812 867 334.5 864.312 334.5 861 c 328.5 48 m 334.5 48 l 334.5 44.688 331.812 42 328.5 42 c 325.188 42 322.5 44.688 322.5 48 c 322.5 51.312 325.188 54 328.5 54 c 331.812 54 334.5 51.312 334.5 48 c 12 454.5 m 18 454.5 l 18 451.188 15.312 448.5 12 448.5 c 8.688 448.5 6 451.188 6 454.5 c 6 457.812 8.688 460.5 12 460.5 c 15.312 460.5 18 457.812 18 454.5 c 645 454.5 m 651 454.5 l 651 451.188 648.312 448.5 645 448.5 c 641.688 448.5 639 451.188 639 454.5 c 639 457.812 641.688 460.5 645 460.5 c 648.312 460.5 651 457.812 651 454.5 c S endstream endobj 241 0 obj << /Type /XObject /Subtype /Image /Width 176 /Height 116 /BitsPerComponent 8 /ColorSpace 295 0 R /Length 1265 /Filter /FlateDecode >> stream H엍_D.MҮl6x0caXD7|An6\4%9?Mh.~s-DG۠sQ)w&;2sK͋NS{F9S;Ccg΍0y |$  /]\ty apu~/,,.,b----A0_ݧ&qź,]⋍-aʔ;E&|ҝbYK|m_Lu Wsmiںa;ͦ} oݓ;ZKef5V^ulPkj7ͷ7o7эZ|'F:[(@]{5FinMm غF|c/]t}q1%baY6ZV6u&$=;KdI!|<8_ؾk&5}a踎#|ǻ*?߱|yaƟ_~W~7*S8p]o|?wO1]P|u=,>֟o6/ ~pVRWC,9=>I[%fܻo> B|?3̣ԧžbH//>(_QP_O( Y|S6-}Kҷ-}sݫ ||\n۾QVcI(}Gz}!|e}p l9T#Ϸ5.`nW|9)"ޒQE^d  v~%Yk7XS}/o[|&[o8Idq ?JDJ_H{qcx=ݢ |s7v%X; 0og? g9Bn˯ /$|aߞ2o@{4ed )":Ӳg(G`(Pa<*_Mf4Gy@/0a0ҷV+/,_g-K2RqDQ- Eg; 8 .cwȟ#3zW,Z!y|̈u{~S@}"S;q`?" ~yS*}x(9EҞX_I{Nvn馹YjW&J_JzcW endstream endobj 242 0 obj << /Type /Page /Parent 498 0 R /Resources 243 0 R /Contents 244 0 R /Thumb 477 0 R /MediaBox [ 0 0 684 873 ] /CropBox [ 0 0 684 873 ] /Rotate 0 >> endobj 243 0 obj << /ProcSet [ /PDF /Text /ImageC ] /Font << /F1 515 0 R /F2 518 0 R /F3 261 0 R /F8 268 0 R >> /XObject << /Im11 245 0 R /Im12 246 0 R /Im13 247 0 R >> /ExtGState << /GS1 523 0 R /GS2 521 0 R >> /ColorSpace << /Cs9 520 0 R /Cs10 264 0 R >> >> endobj 244 0 obj << /Length 6665 >> stream 1 g /GS1 gs 0 873 m 0 873 l f q 1 i 27 846 603 -783 re 0 873 m W n 0 873 684 -873 re W n 0 0 0 1 K 0 J 0 j 0.5 w 10 M []0 d /GS2 gs 63 166.5 m 442.8 166.5 l S BT /F8 1 Tf 12 0 0 12 63 792.3575 Tm 0 0 0 1 k 0 Tc 0 Tw (C)Tj 10.44 0 0 10.44 71.5661 792.3574 Tm 0.0228 Tc [(A)81.6(TEGOR)44.7(Y)]TJ 12 0 0 12 124.2735 792.3574 Tm 0.0198 Tc -0.0102 Tw (2: W)Tj 10.44 0 0 10.44 148.7702 792.3574 Tm 0.0228 Tc 0 Tw (ORLD)Tj 12 0 0 12 182.1029 792.3574 Tm 0 Tc (W)Tj 10.44 0 0 10.44 193.9561 792.3574 Tm 0.0227 Tc (IDE)Tj 12 0 0 12 63 778.3575 Tm 0 Tc (W)Tj 10.44 0 0 10.44 73.821 778.3575 Tm 0.0228 Tc [(ASTEL)-12.2(AND)]TJ /F1 1 Tf 11 0 0 11 63 766.3575 Tm -0.0001 Tc 0.025 Tw (\(6 malcontents\))Tj 0 -1.0909 TD [(R)12.1(ules: CGI OK; 512 chars)]TJ 0 -2.1818 TD 0.0633 Tw [(As the old pr)5.8(ogramming adage goes, P)53.9(erl is the)]TJ 0 -1.0909 TD 0.0336 Tw [(best language for managing a har)13.9(dcor)9.7(e porn w)5.8(e)-0.1(b)]TJ T* 0.0189 Tw [(site. O)5.8(ddly)84.9(, an entrant named M)11.9(a)0.3(r)5.8(k)0( R)29.7(yan took)]TJ T* 0.0199 Tc 0.8286 Tw [(this to hear)-7.9(t, submitting a porn ad)]TJ T* 0.645 Tw [(generator)59.8(...that was, unfor)-7.8(tunately)84.9(, clearly)]TJ T* -0.0001 Tc 0.0162 Tw [(written and w)5.8(ell-commented. O)5.8(n)0( some lev)5.8(el this)]TJ T* 0.025 Tw [(is the most obfuscated entr)-17.9(y ev)5.8(er r)9.7(eceiv)5.8(ed.)]TJ 0 -2.1818 TD 0.227 Tw [(B)11.9(ut, back to actual priz)5.8(es. I)11.9(n)0( thir)13.8(d place: the)]TJ 0 -1.0909 TD 0.1451 Tw [(enigmatically named ernimril and er)5.8(kkah bring)]TJ T* 0.3427 Tw [(their combination fractal color generator/w)5.8(eb)]TJ T* -0.0097 Tw [(br)5.8(o)12(wser load tester to the par)-7.9(ty)84.9(. D)11.9(o)0.1(n)69.8()79.9(t type 9 into)]TJ T* 0.025 Tw [(the little bo)5.8(x.)]TJ 12 0 0 12 517.3723 90.3543 Tm 0 Tc 0 Tw (F)Tj 10.44 0 0 10.44 523.4518 90.3543 Tm -0.0001 Tc (ALL)Tj 12 0 0 12 544.7999 90.3543 Tm 0 Tc 0.025 Tw [(2000 79)]TJ /F3 1 Tf -40.15 0 TD -0.0002 Tc 0.0255 Tw [(The P)47.6(erl J)35.7(our)-8(nal #19)]TJ ET 0 0 0 0 k 295.71 784.83 298.48 -269.27 re 162.892 90.354 m f* Q q 1 i 295.71 784.83 298.48 -269.27 re W* n q 298.4824 0 0 269.3622 295.71 515.4678 cm /Im11 Do Q Q q 1 i 27 846 603 -783 re 0 873 m W n 0 873 684 -873 re W n BT /F8 1 Tf 11 0 0 11 295.7136 793.0776 Tm 0 0 0 1 k /GS2 gs -0.0001 Tc 0.0255 Tw [(S)12(ierpinski fractals in 504 b)5.8(ytes.)]TJ ET 0 0 0 0 k 63 481.83 298.52 -302.15 re 432.992 793.078 m f* Q q 1 i 63 481.83 298.52 -302.15 re W* n q 298.798 0 0 302.3979 63 179.4321 cm /Im12 Do Q Q q 1 i 27 846 603 -783 re 0 873 m W n 0 873 684 -873 re W n BT /F8 1 Tf 11 0 0 11 63 490.0776 Tm 0 0 0 1 k /GS2 gs -0.0001 Tc 0.0255 Tw [(A sine plasma color generator in 503 b)5.8(ytes.)]TJ /F1 1 Tf 0 6.2262 TD 0.1789 Tw [(I)12(n)0( second place: J)29.7(etr)5.8(o Lauha)69.8()79.9(s)-0.1( v)5.8(e)0.1(r)-17.9(y)0( pr)9.7(etty \(and)]TJ 0 -1.0909 TD 0.2793 Tw [(similar\) math-based page-color)9.7(er)59.7(. M)23.9(ost of the)]TJ T* -0.0112 Tw [(obfuscation is in the math, but the r)9.7(esult is a cool)]TJ T* 0.025 Tw (graphics hack.)Tj ET /Cs10 CS 1 SCN 0 J 0 j 2 w 10 M []0 d 63 810 m 594 810 l S 0 0 0 0 k /GS1 gs 412.81 365.62 180.72 -252.62 re 123.591 522.566 m f* Q q 1 i 412.81 365.62 180.72 -252.62 re W* n q 180.9404 0 0 252.3206 412.81 113.2994 cm /Im13 Do Q Q q 1 i 27 846 603 -783 re 0 873 m W n 0 873 684 -873 re W n BT /F1 1 Tf 11 0 0 11 412.1364 439.6803 Tm 0 0 0 1 k /GS2 gs -0.0001 Tc 0.27 Tw [(I)12(n)0( first place: N)29.8(emo, a r)9.7(edneck cracker)]TJ 0 -1.0909 TD 0.081 Tw [(fr)5.8(om G)5.8(eorgia \(with contestants like these,)]TJ T* -0.0002 Tc -0.0027 Tw [(w)5.8(e)-0.1( don)69.7()79.8(t)-0.1( need to make stuff up\), and his or)]TJ T* 0.0096 Tc 0.3653 Tw (her elegant sliding puzzle CGI script.)Tj T* -0.0001 Tc 0 Tw [(Clev)5.8(er!)]TJ /F2 1 Tf 7 0 0 7 63 148.2832 Tm ($0=s#.*[/\\\\]##g;push@ARGV,"-hTe_-JPerourl";$_=shift;@4=@1=@3=@2=@[=split\(//\);/)Tj 0 -1.1429 TD (_/g;$;=pos;$$=sub{eval"\(\\$$\\\\[$;\\],\\$$\\\\[$\\"+$;\\]\)=\(\\$$\\\\[$\\"+$;\\],\\$$\\\\[$;\\]\);\\)Tj T* 0.0599 Tw (">$1}g;s@^\(.\)$@$1@g;s]>_]> ]g}for\(0..3\){@[[$_<<2]="".@[[$_<<2]};$$=l)Tj T* (ocaltime;print "Content-Type: text/html\\n\\n",@[,"nal
$$

")Tj /F8 1 Tf 11 0 0 11 412.815 371.8726 Tm -0.0151 Tc 0.0255 Tw [(An HTML sliding tile puzzle in 512 b)5.8(ytes.)]TJ ET Q 0 0 0 0 k /GS2 gs 1 i 37 874 191 -12 re 594.107 371.873 m f* BT /F2 1 Tf 8 0 0 8 39 864 Tm /Cs9 cs 1 scn -0.0004 Tc -0.0019 Tw (TPJ#19/9.26 9/27/00 10:35 AM Page 79)Tj ET 1 G 0 J 0 j 0.5 w 10 M []0 d 36 873 m 36 849 l 0 837 m 24 837 l 621 873 m 621 849 l 657 837 m 633 837 l 36 36 m 36 60 l 0 72 m 24 72 l 621 36 m 621 60 l 657 72 m 633 72 l S /Cs9 CS 1 SCN 0.25 w 36 873 m 36 849 l 0 837 m 24 837 l 621 873 m 621 849 l 657 837 m 633 837 l 36 36 m 36 60 l 0 72 m 24 72 l 621 36 m 621 60 l 657 72 m 633 72 l S 1 G 0.5 w 304.5 861 m 352.5 861 l 304.5 48 m 352.5 48 l 12 478.5 m 12 430.5 l 645 478.5 m 645 430.5 l 328.5 873 m 328.5 849 l 328.5 60 m 328.5 36 l 0 454.5 m 24 454.5 l 633 454.5 m 657 454.5 l 328.5 861 m 334.5 861 l 334.5 857.688 331.812 855 328.5 855 c 325.188 855 322.5 857.688 322.5 861 c 322.5 864.312 325.188 867 328.5 867 c 331.812 867 334.5 864.312 334.5 861 c 328.5 48 m 334.5 48 l 334.5 44.688 331.812 42 328.5 42 c 325.188 42 322.5 44.688 322.5 48 c 322.5 51.312 325.188 54 328.5 54 c 331.812 54 334.5 51.312 334.5 48 c 12 454.5 m 18 454.5 l 18 451.188 15.312 448.5 12 448.5 c 8.688 448.5 6 451.188 6 454.5 c 6 457.812 8.688 460.5 12 460.5 c 15.312 460.5 18 457.812 18 454.5 c 645 454.5 m 651 454.5 l 651 451.188 648.312 448.5 645 448.5 c 641.688 448.5 639 451.188 639 454.5 c 639 457.812 641.688 460.5 645 460.5 c 648.312 460.5 651 457.812 651 454.5 c S /Cs9 CS 1 SCN 0.25 w 304.5 861 m 352.5 861 l 304.5 48 m 352.5 48 l 12 478.5 m 12 430.5 l 645 478.5 m 645 430.5 l 328.5 873 m 328.5 849 l 328.5 60 m 328.5 36 l 0 454.5 m 24 454.5 l 633 454.5 m 657 454.5 l 328.5 861 m 334.5 861 l 334.5 857.688 331.812 855 328.5 855 c 325.188 855 322.5 857.688 322.5 861 c 322.5 864.312 325.188 867 328.5 867 c 331.812 867 334.5 864.312 334.5 861 c 328.5 48 m 334.5 48 l 334.5 44.688 331.812 42 328.5 42 c 325.188 42 322.5 44.688 322.5 48 c 322.5 51.312 325.188 54 328.5 54 c 331.812 54 334.5 51.312 334.5 48 c 12 454.5 m 18 454.5 l 18 451.188 15.312 448.5 12 448.5 c 8.688 448.5 6 451.188 6 454.5 c 6 457.812 8.688 460.5 12 460.5 c 15.312 460.5 18 457.812 18 454.5 c 645 454.5 m 651 454.5 l 651 451.188 648.312 448.5 645 448.5 c 641.688 448.5 639 451.188 639 454.5 c 639 457.812 641.688 460.5 645 460.5 c 648.312 460.5 651 457.812 651 454.5 c S endstream endobj 245 0 obj << /Type /XObject /Subtype /Image /Width 287 /Height 259 /BitsPerComponent 8 /ColorSpace /DeviceCMYK /Length 14852 /Filter /FlateDecode >> stream H?hYg0ˆ`.BGlb,.E  6Dp"^ " sȂY *\ ZH).R"oo4zWq~o޼ydI=& aʐιX~Cs~r[{\+C9Zcס^;][YGT*V'qmtQTFF~򵂰e~aMw;pM tՙTqUQ{r>L/xɡΧK\gU*}G|i 5?>[4~Vu.\: zS7҉dt$$}tyeI} ݷTwGBOXB/@UT/v96Ց6$B*iK1,h~d[bZƸPga059J~qn=Q3=N(s٠ w.{wX쑹s; xrɞ d$9 ΨÙfW~Ab WZ\ak.ٌV-ݭ}COK(zԼ{7q2oqϑ=)}kL:?γgqj1)Xʔs-0Q2sbUtɜc8Ƶ:C37I] JS8_}1ۈq%w:bxq'H޳`FgFjLGq=V!)9̦`w{ 3Sz{#{(QS+Jªiex/|سU(8jZ,ӌ$}=]b Ȣs6wuI^E~2? vSٞe&>MhC`W8oW>LB^30?j13wcypu3ox{̮}Ęr.3aa;L^~gRlRc?kI[XS̲-6E^z؃6 gJ \XHC8,ڨcM'ćdTu-e1,=Qy,`Mcl︔'U.'u1Jsh35f\g5(mqKXKCN)=Cgس&2 7,PXs#ɦWݯ`biF{~b{[_ͱ{nGv{ _{jsU)b Vg{GO, j}'3z4{4ū+>5yj?{l+؃xun(fRް84|u{앬[b9 c^%59$_>n9lm1)$v.E%"Askl \诈rq;4Ǐ맼[qF;s+\zgZ~(2{ND_#'YNPOUfdp~b GZ)CsGeR,|&E|Խėb:|-%CX: -Z;<=2++uGd]JhwJ칑'{/ƞK.'~.ν gϒ`XfȖ$u7Tkۮ_qYn>SYk܄Š6Y^vjVNR;^:8cv'ڜEoz-y|fn`?bq{?OK}\{d+smƹMv#4)e\1G{\UQga96ʅPu`e`lyr>=){XgOW^i'v, 62S°Gŝ &)9!csFE{\㦧 PP+rG4m! #)y!Ycp7ƨ1B\}=.a?h_kQ3=QK{+iܖrQgdߔ&!57T\oYNS/Ȟ]{Tz\m^z~ ;68w4u4?J1zA{!3x;v_p^/?%;D{΃=jV1n^~Z Ğ{z9( $g0S__0 ^ua ^s ϑߝwr~lHķ#s@ej6brZ3wn5\hl7Zy)78{zrg˟ާh sWg{{g_ hegq/9h͹jyOOwas*bya~u$~н[*h4+ɔSKzTZ6_oZ/k[UU3 {Th%cXA٣Zj]^lP z mϾٳY[63/XJ+ rwoh َbim#Iø$L0FX: 2!"XAKpt}a|ć90aq>~l=*\nUunUV~ʔ=xg06]װm3l\99h?=qzbūj{Iz1x'W?QG޿IIs(*栶>8*3xiۭ7::4}SST}Q{sό3k>sL|ϰvqrrؓDqqrrrZ{ +){V%ۘhMXq+K9VQm_TRw}r3=V+e=*l0ETEmWXAݭ*.Ks4:[fs>)^_`>7<;11;?;WzϞybT+};X?ƾC˕o왌FG&ce[wj9gřKfmDt2 _LE ;|.g{Gw ~^sj ֖OegR:ui/M}|+)|E-j{O™9T*ER,_=;jV=*sO{ij`xa^;;X;tكߵy'of,9Y>0kd{X܏ KsK$紏 9 g2=!so:8!VNj}⹊oxbsa{`lsܡ`Lp{l?Ug$Mܓ+dL㦷^4X`|I mS%~ 7ⷢ(#0wqmڦ\#3`X}k({Q{%lnq1j7BNL\~/jń=jav_أOxȾGjרs58kxlؤ܍=Qcs5.7u֖o˜Uc3/:ؔ=ja#Ϣfε5 c17O*Jٳm3^7S:\0]Iez*BE'c뤤^GűòZ%S{R{ +),}<|>\UVqCFG`>smnʚˮEAީ9ۜ]Ug͞x{ < l\q剕0 W:ԋdt'u`Q"ł8ɾǛt  #:]žGt :g:܏k2&a푟A!w֭$c+-8FAGwuUc/!|-~g{wc?\ǃF%0',uK;l\Qs3]x/إÀcէ-^d|cOUsQ9-{ĵ.{=ߜ;3Ek=2Dy$yf6;7X?ߴu xNlus75?~fSy9N[ot$f vaǽ6l{9ۭ^/ZY}mnC7VKl.VצxS+Z<ezZ^yZ.y,ߴyjj X c~o*{nzv&d0Gf` w5j}IʜȞ<;L?]C{[\E\⹒qyBG}D C͞|Oԙ+kس:ߓ&{=BAMŞnJ{&=6E{ؓ k8cyb===8|ca%{|=8|OP̚~ʏʩ3{c=8|O{Ab,_g_i#YЇ0 L >` $L$it$ ^ kC68 -! }~!lrrTUI*ux{4…{8Ӹ!{o+7!yfv-̒cԅX5_gCy}:Yg׹9?EQDس7f~_m}N;&{ר5:b%0Aǖ[Ί́iN.M cOl$u d="{{4"`w4;Twrq쩂=:E{쁬ul@S&{'zZ{o-N3W58(g\yk"{>^ƙ+FSï,{G9ޣ{ag.~=xS{ [SMfS{(?NӽGvqqw3yϑ4=tBc{Ǝ==H~&kxe+y~o?sfO:ltޓϞc:{3W._{W`m玭gd5{RYB8|гu±G=QH`{v;J\w-{1׎=,=skT8qeA'mG79v`k> B{Ǟ4={{lYcPaZ8=,kǞf{ yp޳DZ}E:h\'30x{?u"=)=wêX-,yyޣ?''߫ObτD{q'\]x"H=}J Gxı'=k \QOݵK\W"s_dMlpD- {7=ǘ4ϚB8K%~@#"Lval?t3dUű\[}Ya/dQ"{4kSf,X!a@96/huAP:W9_$`K%iLR@={}藽b%ރV.u^s#]=uaQy=%yO=Cǹ=:Ժ8qgwpLu("_) l^~vZX2/*tZ'n,~oys!Z,Þlz(:x{+:(`zأIA|~KW==,{9yE1P $$ޣmbOÂ"oXGRbpmx̃,:zIu7lbc&3//3h{A:sA85=l?kTŞOUxڛhN]{j_h*xO}R1Ʋ) Ʀ+̋LG3dz͞3{sڙr?}ͳ޳U~<]3=,_BB(8;sFҗ{ }՘}mbO#:͇ΙKw?0s=m}uM]Ce1Ʋ2ph?b&=(k\#=Yg-r؍=|VĞߗ-ӗ$ω?q=`N^ϯY ^{X\]G_4:sxL~t($x0J#{lg=o[^, sY/)N@% e'|ȼG,f>*ʢk{fށMY˫g7 &{žGޡ.D}N'9qU°Gx_={=g&d<`4lY#:9?e&.B)4^/4-Y P68`CfqߠѷGȲ4#͜Q8+3g>}r?s1q%}*z=U4.{YN5;kQO6m &{ltNٯt=d3ʞas/!L=*:V_Dz ̥A{V[ك3޳K3=S7}f{l/΁3OCu{Y#sbSE㲼:x{&c#e*aнG=Ùkz,gd朗ޣ[Κ{u/iN>$ysv>Ou_@v/[W=5O k>D*d_n󢛽K޻iȱbBϸVFbϤ/{|oy>/v?VE> y*g?'q^($K|{*߿"'4b.ԢN3lu׮_5Gq=}'z=u=/qx_wzOўgɁ=35o3t~ޣcռQG3&=sjyvbB2o<8\ԅ#Xu!,{f3nL= {{kpw40TiGou *bק k|cãȿ3[.=3rc:GJ1N3aOQ0Sc5J=W0g!xdbYyg.՜)i ك=g.}sR-{l٧b!I8-={G'o]d=wW^ž,3?({=yв͘}bOxwÝj[YbO?,c `z\T6fQuz<>_6\箛ɏt7c=PWH/^β䛓־>"{%fulk¼С3i/ߺqߨ<U*;cƠ*Q,ٳtg_k {FgO|{A%.{u {V絥b Pм.%(!{'35{"{0ƞ4`|xEcIaNc1Su}BZ{O'z~aynN}S=UG\[=={=E=xEcIaNc1Su}BF{&È=h [Q✳ĺ .,PBK1}Xq]>W}>m4YcC.*\jC/4,/1GDPKM pLJ@r؃GXd&:1C{xDu''N]T1C{ {B\cvQb]\GU'{eMpbO(XuO..(Pg${|ezϠy^d,/'J]\B{gK=ׯX*B{('4cWqi5(=g/]c==dyGibB]N=XqqVJ/h`—>:BaK]z= cl39T]lܞG`36`OڄѢ{L\ cyO{,>кpQ}(yÙ X"FR_u1T33_UI#e.,0 ]k=b%GӀ;.u;s.=b=C=ԽuQlcGiPGtۺT= bO> {;H1G@au9:{OOaO3 G=uѝ= 3eq=s=mG!{S=Z}̺@|gJ{D1C=@+{yuqsM~GG{boUp[/j&߷49{}{zSF]L~g`cs7|{<t_[G,;Yy.{R!,: G{A3E7ͽ49~ ƍ?[,8 J]Z𺰸w.{Z|u<,sXN?hDw.Xr'$쁮u؃1̞Q1z=`zOdO@r쩻kP䤵=CfφYwa!\0z ={"{\'3{FgOlcl@'zq Js}G>Cf[k|~Y?b=sOL,{>=*NE節=T]\Fmy暜t i3>o4~G܃ưPv>Kg7ș)M^!|orxO$c_7 ս;6gB?e0"JСC:W8t(B:8tȐ1E fEرcG:3⻦kۡI -r!gp ՠ\A L~!s@'AqR:.0s~S-t{`miѺN%@1hyӹ;a3f1KyD힆Pl6aB v#z?Lz |YvQzbEMtaד~g"16nj d蓁p{hX,/h_o=ۼ/̜X^CT?"l=|/3}-)+?,=~"h3x(hgg.AU\Q bS96wlKS4h࿃mNd8{*bB2w=p!ӂѻν"M { %ιǿ{%O#wy֡ضXw=Cot endstream endobj 246 0 obj << /Type /XObject /Subtype /Image /Width 332 /Height 336 /BitsPerComponent 8 /ColorSpace /DeviceCMYK /Length 17640 /Filter /FlateDecode >> stream H?hKgK"2)Tu`(2&P U |ͽ@\p>Nax.\p|pqE+|[iḫfeX/Gߝ Y*MШsk4->l"g1F}5.k31~OU0H߬ s$1b{oiܑ˄!2]ZD(/oitP_[(ŏUӦy2NuB>0BSuƭ u՞ykukP[ʩUZVDM>T+CDCQ,0&j^\i;Gfr$K;xhkV!K#V 1s˚_ h̖+Yf`)/&/%1B>dV׍Elǯ=^~79 I]kl??C HFҌ/X9̴Nc/|ڌ3lćeQY|`KO7%k R>)/gqCexKFCgƵ«p]Wx]%f8*'%ěiY~(;OCC_A )ٻ׿y߆bmK)ˑ˺4eeNK)iKVev䶿N%KaiWxi_賒TW1Vxi̖N(_6-xټMiYc^fcf唗X°?|]N0aaD2)+^eff̼YΏyymk#VK=VL([iQ˦,`J5F$Ea ?D߶p,ւy>s$ ;N/08楔\. pyL4cl/ϋkk׮;bK;0wJs_F|a=a>Xx~ppWǰl/G(6&Ǔ:oLַ/!^kڍ(h@{jˆlGd~Nږ|vvDI:-0֓}e{oM1k϶lFռ9( A\k+27}Z'O9/{ߪx;>DڛH֗Λ^RmVWɞy'OKOX[w3eXaF䏩ٯ0vom{]HQ94wOqWg6ϕ;7Ky^K`eqBKS{##W{e B[mL| )7 2;Am͒fI^Db5½j7{[n*F~_EQIy!Idj-<18CT1JWbj)]sn8 V+~z[)T/+4q忰iZB=^BHٟ_k2y n x c33]f{oA6uwnYc%# ){;ߛ{=I@DA*:6&aM?iq!.v]\NuuռA|C%bc%bJEWOMv8ۭ\۸aZqbyP!yHԡL> +iiq^곧B2,}O*:q)3? Ko xyX +C_=H%ešmW(#`&rl|2xJC{}D}P,eoa]z7OS8CP؏NT[A HLy1=JMbFl %Tl(7} ϭuo''os_~ +r!s('|/o - -i9,j|"=_>='r?X1&a٘H@cU)h&i u6z2/gF'3D䅵۝Wɧ=f)2ƺ8SE1jy4^Ng: I?4kŧ m+XE5,s9XWZq~^:-h+z{HצyO֩ՑxOG*H-ř [ĩE%^LÙwi,{h5R᫉0d8L}<+$4b30~eS0oESrf; ӯLS-tPm&w’^/ /}X٫gÝvX/Y)!`0<a_ D_[Ld|:՞,LW>~6H(x .n3H̱=poeDyD}>-Ե<&mgu|(~v$oIyac%fNVoFg,V欬]5(`W;ڣ u{GxΘ6|8)qX<|6S5>{,moAkhqil6/11zT6ʼ|ث^vVVk lR C}~-L3*&xf?CC+b=*&+vϨx2|P}cuxX]w(f+a`%;QQKdYsJ(y,K#r.֮ܽeL6GlT Suh{OH}^Vn㦮H1YZfQ/ ,v;͓%b鯕0"ҍ Ӎ?Xϯ7c\MvpkZRS٬fVڷ^\.k*Ʋvށ+`AiQsbei$DƦž*~~﷧՛IYG D΀.?NJ7ȰǏ~4ZY [LZmd  f;ymx}㈺^L O{0rw4Vqm;XlF>ᛱw|PUq.UcGU )-ig˜UmkY>907!;^>3;ۛ*3F/h~/1߇<}/6&DxR絎F'"EOZMyXDz\yh\SV{Ո*^"-rC̜8^s^t{b>~QYOO"D'k`?d4u_4/RۭgLQب9 (f1?S?bcq\Pмy('.{>X'e;:vOH^b]7E]>G/͑dKd 5} n#? ui]am#(/# WWs[w'85*k5*^"-ҌO5s4̺ I1rkm @J}[~xI"6Y#mޫȧtk?H[\ WmWFT􍟹5_C'tF/1~F&(/ZQg;9'Vܔ)W?/_=a"n\GX=ҿvv֋|&}Ba8 %/[§G/gՙt=*RJ~xIeR3Yc^ҋ?P*0tG=^2L➠gA@%LG^:Ģk1DzIP3+/h_ /'W1gxDq.WT"/ɧ{RIJ%JQ\`堿ԇXl$xI1Qa\Sz0Y}{chu<{Pݡb^z Z1C=O^D&A҅:+J%>=ҹ{Sg Ye!e>{ՠIρyɊ,e{w$24.*e2 Yg^J]|um\;!}>Ȱ{pU jAa*2lsYu]G:> )Ljk9eX{TuE[yU{^bRҨ@[am^l2Tͪ׌9V-߽Ftxgg]9<=eDZ枙?/֋1UKs=I<:veV~lVVG~eRk8㧞rw=f}_=Xٿr&+xbR&e{e/?-[yz/gx/mK/LhRUv:+~K=nQevzy/o{>xy˷/9AT{Γx9/)1*V=]eL֣=X+3@|Vyp'&ڝsfXo(f!bX>gZ%SrXF.~H:͉bS{;QblrzTRjm'͸/SK~njj Jj~fi+D K/F&uqvxFcթ3AڝйgcI vɬvW\e^2Ò//)zVrqlgZ{$iy/>>Y*VMO 7^&Wr-Q*^? l$Rg^:$r\J(r楤 䢝D^,.bV$7g: [ťVkIuo'/߸?!a BAp@ B lPB+<9ưW& '8P *| lA.p)Vo4o73gve٧yO_]ع5ם_SR=ɱ|n^ak9w_yKgݼ]C+m:quS.#R<{۳sD{9Nvo“.^YYعyu:?S\F}v^$es紷K~+lWn,|p}WB7/["n:%7'gY[\Wɟsq由9S>z#D%o ֖Ϳo^Og{w=7gdפ/wy~]K2{Xv%ʿ{j;|d7~2/KNԱD@wdKٹ}gu( ~dln5]/ /9CV. /]-.gxMΫ=%7sxi伈{G\yz9]{MB* 6ԹeT^YL7N65G ^_n[z(ەerx:}G\KQ6?e.5}{_sӆy}iL e>iy=? , ~çr>|y n;95bΰټ^λgUu9/Z[ԝ_ b_#^ighw ?{kk˅aqLe`m_öm[y,9$ww`Æ [O7U6lf[n!f$Ć Ć 6-8?J\%M}~ȵv;KZu5k%fE3FD\壠C"{:&!HȄ!K3"SM]7#MD903%0sb9$,͔qI7]N|(1^Kx /ǟd^Kx9/w^y/|^Kx /%^Kx /%^Kx /g>z%a%C/'UzRY^zR߼<ν,f /uY'nJ/F4%GxPZMzIX),c_V/je䑗 +eT'nyꗆK"Y1p44ux12HG/&RkHUNb:Q/#M\LԼN02/:^zH=ob=T4\E.5!Ya~H+8>':o4tKBuK.ܘxIqxٌn˚4^KKl_jTY /e^lt0^xͮKxJ/n{I~YKx_//K'3%^2$^Kk+^^ /eA+&N^zId eH)/uyZ.&>#rɄJz'uLi"ϑc<%B?6K'/uf{}R'%x~ //E?%^*xma^KKKx /%^Kx /K#/  /%tr]q^r /e4˸^<2X*o/:%gTːH$BȿY1_KlɼyC4=`QgN'\h ƲiBxj*KR$$h  TFqCDT%"vbujk*:"̼ a^"w/q5?sx雓}r!U\QlNz퐖!ML{Gj$z/?KxYec5K{:yKzKx /Ke^nKx /+%^_^K]4裙 /{%e %2MT /%쀗]Ѧg*GLbn%f^~8Kf{I߫Ii}RfioK*5xy?y_Gebfk^zZs]IX"ITs#;\k췅9  lߏfyg{"篿j% ^MोmRCM%{i[/KK>/%^Kx /%^Kx /%'^Kx /%^Kx /%𲀍5yikM{12$F>$exlL4#M2In%3qJ4ldFY^~o"Γ?~{f⻯V.Ɲa1wcy>\[="~J tROq.^{)1?Zq&"D.gDX$Doהȋ=U^2yzOwRvkhxx٠x% 塁$ben/]廗oNI/K^vK'/5fV%KM|2^ y_%)}^ve//%F^J/%^Kx /k2p2,*L圗/˖x/9E;ejyxn/˴u^練TB.^R<2< u'Ѭ?fP塃TtV&D2K^Vx*JM샗mR=}:og,!z^v˶Kx~/xe3uzeֶKKKx~~YKYτ^˚|˨/ef(S/kJ,㧩SLW/e V񲨟^R^zegt|p+7/]z&K&^&5x?%zٿ~ /kr$u.Ubls/#ul4wQ5R^N0FJ/Ovd&HĿ/5)/a:HIBpT/RCMP0MPQFQ5 筊_^>T{ux) R&{5xـ+R^z/˰QaC^ZKxYoy^ ?7 ^ZT^>Kx //yY^'|X '*+M.Q *^vKho$1ST}!!}!\4{]. -$<4?ϻUŲ΋msֿkIqc.TPB 6$*T`cRb `b *|'pOqp)\!) "p)R\{3#ij;;cv)ތf?{#cebRfbZNKiC4F/,_FTY `r^K'c/K+xileRHڻ`ee_pnYK4Kx /^l_fe})^Kx^Kx7,O-JxY(/)+%L!e\/=΃ؗr /WKa!}^b_K({;N&ar8?xzK/lk`[%7ԪMNN\|b_NMT^x kdHkYAdb;^/?SďՊ衻T(/-)29ef %`eR$^Kx /%^Kx /%^Kx /%^Kx /%^|ԹveeO4Ğؖ~]*oHg塩nQo(/wgKoՊǵ-uk_uU^Kx /%^Kx /%^Kx /%^Kx /%^Kx /Kg%CEnt/5'/u^ˢxIij-y1}.a /CfSg݆[k#Sؖi'ʩʾq7Ǔz{S?Rb/YXqCmH"XTwnՊ*Ue3els70SԳlJKuԟV{9V˱^ vZrlZL"JxYVKˈ^.r2^ʶ%ˑ/⥁e^j)K;S7%a,w]Ke3!lΨ`_R~KxK+=/OVi_eUF'e^:+।^ wݶ,bKK?P$}^fmU^2xn9 /{ٜe*ؗR楳"^*~(^z1zW+&^4ߗǤKxY./RV}"^o_63^Dt%oȋP^{{Kx /%e}9صl_Kx /ᥝ^zunKxi,e2?F/efpTC{4/2&&2&FDۣƭ#?n?/' x8 ؗmޛ]igʾ0^הy6A/6ZڗG=ʷ*=l_g+le%ae^JKI,o/CŤTY9RaeR^K(^^K۽\}gj+y)^>򲓠,|o6'+%%f_&&4ҳ0/)+%#a37^f%þLK^feLLLj^>:zY>/UKK dIA+ų(/9ٗ{yӾL:Vv_2xYz/r4+}K}ߙz/[lν|${涥;S; %[/5g4R8T4)\t /]:T{ܶ߅}ooۭk):wv*'Wk'{'\)u5LX)N)f}m|Mkxnbks(~>}}VN֝9=m{rwwggV #0^:mHC]yǴ}&{P)A͡QZܾ/a"-Nܽ37P[sX_Wj]S݁A7D׉/%^Kx /%^Kx /%^Kx /%^Kx /%)ԘiAtn&^N83%(^t^}MOfy t+/V/ ދ% <x8;{6dFGgjb:5& ӨnEUkk/DY_'^6Y UKU}yVQe ͆.x==G/M ^;y>西~0g//03w/%K;' lZ}|^|}_Kk Ĥ6'Lۗ,¾$KB^^eRlľKؗvxY}*+ᥩ^K~Ӽ //cybx)3eRǾXۏg% /2d//2[Y6/dzؗ1d[SK*K^3+/b]ĴK4zMl]mvv*3/x)LTuҮw7_\6UMm7@lGV3'| ƭw/@}OwOo|'n}xI9Jԋ'/f/R ^ҫH^ ^ۑE9NxǾ|/#xgcK$LyKgf(yx^f-E gg#VM7/6ʞ%mO//3ܗqxVd_zݗGä=^b_b_ļ+꾄v{^b_dt_z^ٙE9Z ^Yt/2}?s}r r0s/ ND7PcD\SuNl(c/~q #L\ * X`L!X 2\P` QB/$Ņ")Rl-v-n{a6 wXGs<43 _~oB)d›Tdm3qUY5::1eQy 댢) E"M'嬯fs=U^"QE񲻲r{ryt{|C̜ʳ;Q.V^* D)ž<+{OM]12HL*UiYגR⨼\Z@|qYOZ^KͽLEap/_^4~/y݈?riwy_2~2Ʉ6̵6̖R/m˽˖f^_Hx /Rv^Z/*^j/y)3~ɮ~/Dt(sg/R/ݱ//nNLxɼlI=l/rYi*G/WlH $Mhee>GQTxĴu _Fps/Qߤ:,T/'Ծz{{ɱU;XY5ZFoDWet򱿕Eyd.o\aK<4%-_ɢ:P^;/~DEKj,^&ңsv_PU⊸H$M<7Ko׈j⩼Xι3k١,fICz,.L^r-͂4T~$}:Y,佊?w!iA %7lRnLKR$^5{ɟC̏x9uy/s/d~ /{y˶MT9d>ue6ˡ3{{KY/҆qxɼ˜^__Kx /c&0^/EFâ/hxi[ig,KyOfV^{KK/x)枸vQW/g!*>Sz^!IwE0+ۧQtI_mMeDr=1;F.]۲XRh4YCiDo:DY!tneJ,7؞ҝ"sE7eœ>F?&dP/$/m~/Iβ饟://e^u33^f_)YR|픛aSW/ǝ" e5B/y~9Ke;>/Zy{)>/~9Kˮ/]W4~":7u/σzi2~9e_/Ufͫn|2x)ex/"Wd_uQd_%M/UIKAV^retR}=sܵ[K}2r O^ڞ'Kh,NOԽ;(vAy|B ̛)˥(<}Q1, 'roI<*5vHLK+.ו yys匘(Ȓ1G:*Km(l;-ɸ#Eٔ%I^RG- //x&Q~9uH+yNĤ/Vr^/i #r6^r]vOx /e^N4r֕7K2^zf///%D^Kx /%^Kx /%^Kx /%^Kx /%^DeP3yimzy<}/^.S9"B/GK[Oo/d>xx ϫˌ'fiǔ)[bH<^*oAoKHrwi1?䚼Pӊ4/Z$K^ٶE&,t]~ߢ۫o7'ZN]/5iWiyxv鑼YGy2TLY$vuD kCUF{b| k_|>Mx*85XXAP#J{ :E[okenXxztwk;XXAaɺ!5zi 941=ƟC%V)Zes|}=Jr1nۓ6Ww+,CXI.t"!y_ݓmbh k{~Ƣ_+ϿM:YDXM)-~dXXXXۋzk4yIm rρ<儯p?;q{ ^i{Ax/E=ϳ;:/uH>Crk e;*b?0^un_n_0sp݂E\wQwE3蓲]/?ZhZqh}שzab~||=|o ȿQ)L&>;6~u`Oöݯ9џaa<%n)l.` /NeD!ҽdr\ syyaqko[޾` ߵC$hpdFfէs_0 9{OOcU9/{ֶ01&8X :`,c4 44h R! !%C :$!C=/9%[ ]_)TW"'WJCjٍ>56"/O~]k(_Ԧ-/uۍ=iYaW]Jr^d^v |z<9Xýr^,uFc|KWTPniR&Y )O'Yek=O]׋A@*ycۤߡ>r2z]zM["xSTPYA45u2ʦe}ayn:W/ЭA:=#0vK|]T6?li8y)։Cy6r#@SNhh-SF-]͚H(ܢNu0Gp& qexL[_]P~uZxn99/5n1ԧ=Z|e*7RH\?Kg2_쏊T̕`E8a {d1QIJr¼%\QBjjÜQ:Lj;^?jx_D2+kA{zhas}V{x^D4kxZWRR#]sm}ϵ../A-ʝKp6M˭!cRyIԝf9)KeCK.x&c0/;"I_d)B:)"#I&X>oBޱ{:g;^ {G&J4Wɞxg鋮5> stream AdobedC   m s!1AQa"q2B#R3b$r%C4Scs5D'6Tdt& EFVU(eufv7GWgw8HXhx)9IYiy*:JZjz?y[ʚϐ D0u8<{ͩ-f[GHqUSRǦ~J_$z,_>j]5)OKQ^^[-mc9 9;|= VY xfF>$M_;:G_H"@0 JGzZ~R<U׼oSP֌O[ApdvqL@=X.L+to3y;z|jf}i}Mcong`uF{ 2G˫ƌ ~\sV!*H8R~KCgA?|oc+6KR(.uGg+m^Ha(y&JQmRKm쥏O3b{m6`-45eKE}OO ]zY4{(aԀrE^4DYZ4*;eڅݒ `[iS5-OT֬t7EYwf)bҧA }itiKyVf9=!~S I >\jZe-5ԿH~)_S\c&?LSvZ*}]^4:OҶW~?wiJq緍;$+/QA˙/x|?,ty_o/WK闾YВXKJay#*w1 hҹ?.tO+'M΍\CIoq)YLQPg` TW<=^[ Kܪc xBqE=),p:Q@Cq`:hrO}o&q˟*-ԗom-L5ƌC3܌ΞU_uX\:[D'ܹ@ޘZ6,Y]NTWf+̤F<ˮY.c}h=>, _;,>,~TG"(0]ߚ& cJG1z߻s>2rU ;}䏘5{]Rɋisolϧ].Y=oݛ<tȯ%K9)hث#VVc؃ $HdxfFXؤ*hApA9n[/ziy{K :G7]P);T v;/̷K+>ZiŦO lf^,zGS;T vŭ^A=խw4\"V BCJᅇ<麖7F>[[5QJG" 0,<moXGXWxaR?b4Qr I򵵻$rFb6U2҆8֛pEQEx^#*bѫŖc yeUM6#rϚq[vΓMQ+~2z?kכ/uC!>ORuI$fʋE/%]bdWh |ZOOB ZI^ MCAޘYs9Woqc㉴dڨ/͘I .55V"[6B3b l%:T4!wh&BQќ)SB1LdI 7YYM 8'|[0=1ep=z\hp }B*v̜h\8V/O ۏ <8/7i޿iͺTQXKe>NC '= q$N򮙧/g$Ud,|, *@Hu+Y$q&hؐT k>\$:M-w1jHxr448_;̷6^MWӞ kZ2"_SNW"_09$oRa)zַ^GP?qGo=3H.xRM`V-: kc.D׎i18w^$6DOrOCK/+[-E VK/ 5zО%Ot/,iߚE_-yUӯD,AJIH粜hTx˾Qᥒ&Լ;N,jEs?5jzLvwm+[ ņCpKKO.GtV kK4yLu*E#\d1f,j)H򾅩i_mP˪{Tn>&XEpu4]ؕ嗚5[)y*U9'kr}$"UO;YP%7.ArrK, +ᅫ!v$ԗSԭ4 Kb\P )s+q~q,F'j>`maU&\[ޜ!Җ)4b0͟[?Fz诩RT:^NL_Ww/}Gܜk߀`oL_[_'k^5:z]పVWI}b9E۾<^YNaYv5 MAZ"S! VpvOC$r^.és m\iZias )%{y,n#h(myj]wozY湵[oY'%Y9|9/*y-":{ ȈA[ L@nGG<>$hdEb V@?-3M8?RLo}'^2˖7KkY.dXEBEkȏDڈdŭcWD|O#쟠@AEkx>e*#*~"*N6 5%-%W7g2*)^. 77XI3}^W#6oњo"f?Fl2'PI;8$p O R8%~-($IJ*:Z9#!#eXҀJŽ M0_cI]-(/٭(E5-/B>Tnæ~tN٦JYXe%D2UM"-@#U  0 5x䉂ȅ`x ~FD9"`!F!X.)߱H䉂ʌU\+PwA{bqn1-kt{8=קDիiYIxɨELjjoz{VӢ[%gP)"B%N3}SNo.ţh]̞a]׀1Ͱ1.XAO 7)gOPFarܐd8++3PO+SPα;/% Wpv +3,R0f7>= yI6HX&zLj2s+%&&$8f F&$hHX!p+hfHį,e ɗHhT2 EJҬ"+MUEƼrĝV˔Φ4A-yH9rjM6EE +W|;Hmp`PTsK8/񤒔&H?qzoY$86DI%*MHRQe&(dstU'%ݷbSW+Jx(v vɚ &/PS oIik«# Zm8U̺?.][Q #"6/kcHonekmH Lkw ,fЊIRHSy'/ ͛68wg&.F*!w51V_ 7_R3{(S`PD)U]Psӯyt*[.`[Z\ex!e)v%߂O| jz-u Mqqel,`tRw| kmkhfDY.&JXgXԳ3kmM~y# ȋ%7B,Kfaߓ]q ߝ+lf[`Ʃ4%㈱P&neշ um?}J~Eˍ+NW>Rlu,J~ˍ+NWB ʺͷBUjRVi[6S+/+` -$y kFUOTS5\MW XkE@V:?5\MW XkE@V:Ny^UʿE+Z6%%2ó8+rT1z 6AC5]SgU32 ˹$짧[h0,SZGD G ˹$)5?4}Ƨ=<f-;_n.䥵4|Gfv\+DMӈcmF# Ǩ0ʗY}1ZrhG'irF_LVZ!xa8#b 2H lA5f2H lA5fK۔5A_(Ƕ9.%,$~! 0*vbEhv=q,lYa$QS+CoF(e\QԩفqZyi~5EM#}C{זYJQ8V"u幖~RsA?$'88ȧy\[LqM @nb'hitu56yq4YN5`f5&Ju«ˋnyݤv*y@ WWOI+U&' nn&N,@*K1'3s P\O5b~_O8%;}/g?n^\}nZ6ٻ03/ہ֬ n὿ɛV%G -IeUǑTh*+L5Diy-VYy "&+&EdFۈeP/@Jh Es*OXP$tP&FISRI4tXLq4.%BIgJ=_ʢ;HTXLP!QDn2*szDw&[x$C ,dUp;+SM7IyRPHirB;V$(ܔ=;hIb[Oy>wEK <$2FP/Tm͙]Gsu rߡ&X*>h*W ̗-hIh%ۂCOQ PQk5w5eb$Vny4d-jJay|5 #UnbQ%diC8YrI& ZeJ@E \u$U Z 3^Ig1-RKyC05ɔUKDP}ê]ۋ8Nk!g M#Lb`awwR5mGmmCAiI:]2Ia,X+UX%4t-RVtt}/ciV3<_Y׈$X 5&js_\XHd5 Y oYr &SmS͗zvma[t> ޚTM[CrM$ M"DYU0Qhma[TVyIT 9W k^4F$BZlUZB> 04bZ6){A)yWK,kWl0RHR2@!..  6vбz bڦ,2Y5fH.MQ!,hAPELdtkQ$dkq̑\5fb#UhRα3^v⅛kN4ڔV/0v_5aJ>xKoCUK7 Jōk1{97(Ӊ~XfTqY?7%Α,G{o!4%oIΉV(,Y?_HyC?S pF9Ɵ5(,#qc-#7pWGuX3X3b,?So14nK73X3f!a,nP#7GuYHsI7 eTr 9Ě8iK7-0m.k17?ci%{q9?o:ggzBYn?(<ܡFNome+ffTF~0vV+ 7 +Ɉ v탴զ$1Xary1c}^kBI10V_J&WOF(J`Ѭ}VzwuĞrn)u'; "}99wwySO|A[򲽯y2Na59Sz~WOnþcy<lQY1_q۬/=> nl%he,$~NKQ7v޴!F%aDEqwmBoBWFcdC8Dz17g4n z3<1pfp N+Ў_/V|֟EF=ON_ӛ Êo]9|r 8A'lOӸAA:0Rރo;q}lOMBl0;+j͛Q7"V ,O2"ID6 X2R;|M<ڙ$eAa ­'-)20-i$. mh=WiLD1cJ:eij]\&ƶnjޣ]HP `5emLpb#խRvS"2V϶a@GMϤ$j4F8™EFXX`Yl(b#խVfS"ȶ~Z > yr wF]UXd6!a UJb+V^? oixKiK~#X J ߑ;pM5'I#'8 /n"u?:hUȝ8ah6ڕ}I7^D#FZUPY~D /yCM4;Zz&whd jCT ie=OTr› ϩ.i2YIhkv!i}ODHQXRv48U=ӤWIg#hX+rc[a2FN~rRmX?VB4J~?8+ tSQRzѰULʼnjKq|$-w<[e#!$|Fp^A23+F; 9J@5 055K+ hkb1G#mcVӿFWՁd^CFێr$A-ʑ_Lyre-<+N` =`? Q5CG/?LGS"0`Lflٳf͛6lٳf͛6IL1?kc~2uH?vgG_-#y et[5/j?Onþcy<lQY1_q۬/=>5StgY-[v%V^jƭS[vHn uCVU'٧[65*kꆬO5oO3ZӴcMHV(cԮZ\,2[ &B׊]qL󶪾J]Il-ʵp8<ՇKU|7fGuGKw3 ed"0gYA`󲴌! QT$o&p_VYp 2+B:Wu)tzXXyt[ ='x0+FZ[0pT[c(p7۾l{rKlbXR%<@fܴNi$B j U8UUP>"_PzvҟL5x%܅>_PznZS醯_`zwvߡ仐>VWҭJ}0_O+\ [}k0 S!ZҾGĮa-_\FQÐn'8?ȫ.,kv7+e ǓFZTUP5^²TpqۅczN*O{r*մMٸ.>r W58>+wV[4^ta0xÄXI=v=K+kYh5{.y'[Հzs ~iUnH\^U_ĵuqmHq95W1SƓhf1U}#z}%m|i1mhq15W1L5kd,='+jLI 0 /(pnG0֟  Կބ{o1>_?O1f͛6lٳf͛6l'߭0La_O 17u0_G_-#ymԿOnþcy<lQY1_q۬/=>j2i 9S^c+@>-So!Nz0,$jac+RXi5IQU°cĬO`8iܾ>b*?uVmwT ]kpmCd}5度?|aʪq?}8uqGmVm[[;[A&UVGA>@{[EΝ_^J @"YS x"E(ؑu IlmYWgVP¥Oъ 6iqiG'sEHn{~9eK[XLX^-aƕ5M}F:QNt,ĐR#3,qΆd%`|'X(N㐯GM{m:RI7"C#U&my! $@HxhM+>+L$F(HxERiCY6iI!QbC#N!ACT iP:Пm&#cT,X6lٳf͛6lٳf͒(y/ t韵 R/#wY etx>;wK`,?Onþcy<lQY1_q۬/=>>O=ʷ+V2HOL|pnߦ=5OJ}UDc+22?y鏎 ׃Ǧ{ _ef_FG=1r[~[ .^=qF/R rqɯt+"ޔ "#椐mf@yaHO09RI q!mśr C!E")>Hz%I$4-Ćm]4GY\#EgJz|MH1C_ ;Rja=NcHD ܶ/'U3Re@%ݫ5aXxR!/4=Kby_^5&Y^LYں3[G"SN-CԶ >b]}JxӚ 5D& ~1 G/R%ZN/%Ko@VEV+(*J  4[M+VK im9"dU2eO`0Eҵd+QqH)VES/QT{ [7N׬u+I[(7UaaNH͖R[Mm:P$k҆{Y-R YJ-#κtwLr$ɪE(k״MK%f/U*j_:Z2=ʴK&^KGu6/ n,T Pѵ .In3߽η:ŀ]1&fydD ACWa? oC]j/0)~G([$nZ5;45֢֮}Z"G( NQR+}g!G(S_r=kU#nQGJ[KQfi$OJ2G| \ӤR$"DS9 &YF!\)%G9w*cy$TkGDaj u,ll$Iy,Q]ʘIQc#E?p. .b^Ksr8EFpFƠO\ hVvoqFr#Q?}%:>\&+tRewy!VjR&haxIo,!İ+5)R& D,:Nya Hn%YJ4yg{\wy;*i_,!LD T1.\ֱ?H\)gI?yr?^a"Z%ucwM sZ~1Bz}g滏\צko"C8Q6lٳf͂oouKC8u@ޚ"ɪǹ7:%Fx! G_ oMW cA<l#/@7ȅrjpf]C=Aoogmi%3AFLKp66lٳf͛6lٳf͛6lٳf͛j[6S_ܑѷ^n:Tm 3ѴOV)H-[Fz+SMF=ZvҬ mK'xM7-˾`N&ZVx6[˗X&+*BSAɼnK}sVwymeҜm˽74-+ Y_u<}?wkOo]InA_U=ZZ}xrMEX,/V~ٯ.t.?-Ƌi}[vi9|Ksqiw+sf/!9HJF+B )lk,o,wBDADUy"*REvF/9UU,8  [c?Bb6 } @zw^ݝ8pum_Oz6A7eiN3z>Z=xw57(9zV/׆qRXR_olח.򽮟>>7 B+~V)ivmQo-EI NAriI S!>} A4z}ͭf @OYh;femEA77;PI[LڇM"e}JYoћq8mE-t{/ ytBƼ^N>`T]v鿓rY77չhn XgfQMԩ>i\tW@o K-ot.n,-A9#A$ouz|pT*H (Pl}yV,]ɩL4W*r%e.8Z={nuk5^kInI5MqM Iˉy<ޏj[õSvYyz;].[m"=XT*d Rzy$Z妏I &͵ *u+hG#\0n=HXȃR\ RKioAlmb .0^TuAKz0ZKmflUhYՃbO:HYJU-`Rc$KmflBг@Ğt8<[Γ:dLvShւ!WI$mld1ISW\r9Cx.Jdw!JAlB[]?QP|$x>HkXG;k4** al/#_/%u5}b[ڭ'/BLN(CY&o27;PI[L}JYoFo}7CY&o3~?o7ԯ?_mߣdE;PI[LRyff}s~?o7CY&o3}JYoћq;PI[LߣdE+goFo}0u`dSo(>^44cEgŦ^3-szAE4֛%0 ~} TL6h7IxB"X֠U:Q!^Hni];`}^NʉA;}>=jKg׬6zz? endstream endobj 248 0 obj << /Type /Page /Parent 498 0 R /Resources 249 0 R /Contents 250 0 R /Thumb 479 0 R /MediaBox [ 0 0 684 873 ] /CropBox [ 0 0 684 873 ] /Rotate 0 >> endobj 249 0 obj << /ProcSet [ /PDF /Text /ImageC /ImageI ] /Font << /F1 515 0 R /F2 518 0 R /F3 261 0 R /F5 262 0 R /F8 268 0 R /F10 270 0 R >> /XObject << /Im14 251 0 R >> /ExtGState << /GS1 523 0 R /GS2 521 0 R >> /ColorSpace << /Cs9 520 0 R /Cs10 264 0 R /Cs23 297 0 R >> >> endobj 250 0 obj << /Length 9921 >> stream 1 g /GS1 gs 0 873 m 0 873 l f q 1 i 27 846 603 -783 re 0 873 m W n 0 873 684 -873 re W n BT /F1 1 Tf 12 0 0 12 63 90.3543 Tm 0 0 0 1 k /GS2 gs 0 Tc 0 Tw [(80)-1100(F)]TJ 10.44 0 0 10.44 94.2795 90.3543 Tm -0.0001 Tc (ALL)Tj 12 0 0 12 115.6277 90.3543 Tm 0 Tc (2000)Tj /F3 1 Tf 30.9897 0.0003 TD -0.0002 Tc 0.0255 Tw [(The P)47.6(erl J)35.7(our)-8(nal #19)]TJ /F8 1 Tf -35.3753 58.5 TD 0 Tc 0 Tw (C)Tj 10.44 0 0 10.44 71.5661 792.3574 Tm 0.0228 Tc [(A)81.6(TEGOR)44.7(Y)]TJ 12 0 0 12 124.2735 792.3574 Tm 0.0198 Tc 0.0254 Tw (3: I)Tj 10.44 0 0 10.44 142.0187 792.3574 Tm 0.0227 Tc 0 Tw (NNER)Tj 12 0 0 12 175.7644 792.3574 Tm 0 Tc (B)Tj 10.44 0 0 10.44 183.5278 792.3574 Tm 0.0227 Tc [(EA)71.5(UT)-12.3(Y)]TJ /F1 1 Tf 11 0 0 11 63 780.3574 Tm -0.0001 Tc 0.0251 Tw (\(12 beauty queens\))Tj 0 -1.0909 TD [(R)12.1(u)0(les: 512 chars)]TJ 0 -2.1818 TD -0.0151 Tc 0.0592 Tw [(This categor)-17.9(y was for the most striking entr)-17.9(y in the smallest)]TJ 0 -1.0909 TD -0.0064 Tw [(siz)5.8(e. I)23.8(t)0( was v)5.8(e)0.1(r)-17.9(y)0( difficult to judge, par)-7.9(tly because of)15.8(, as always,)]TJ T* 0.0437 Tw [(per)9.7(ennial deranged for)9.7(eigner Mssr)59.7(. B)11.9(r)-7.7(uhat. H)17.8(is )59.7(main)69.8( entr)-17.9(y)]TJ T* -0.031 Tw [(doesn)69.8()79.9(t)0( qualify but his helper)19.7( entries ar)9.7(e each fairly sw)5.8(eet.)]TJ 0 -2.1818 TD -0.0001 Tc 0.1543 Tw [(The judges w)5.8(e)0.1(r)9.7(e)0( divided; but in the end the thir)13.8(d place)]TJ 0 -1.0909 TD 0.2446 Tw [(priz)5.8(e is a tie betw)5.8(een each of B)11.9(r)-7.7(uhat)17.7()79.9(s)0( four complying)]TJ T* 0.025 Tw [(entries. B)5.8(e)0( sur)9.7(e to check them out for why)84.9(.)]TJ 0 -2.1818 TD 0.1857 Tw [(The second place priz)5.8(e goes to B)5.8(enjamin )14.8(Y)93.9(oung, whose)]TJ 0 -1.0909 TD 0.1317 Tw [(automatic obfuscating machine escaped deobfuscation b)5.8(y)]TJ T* 0.0199 Tc 0.5024 Tw [(the automatic deobfuscation machine thr)5.9(ough the)]TJ T* -0.0001 Tc -0.0219 Tw [(systematic abuse of punctuation. )44.9(The )]TJ /F5 1 Tf 14.5083 0 TD 0 Tw (output)Tj /F1 1 Tf 2.6414 0 TD -0.022 Tw [(of his pr)5.8(ogram)]TJ -17.1497 -1.0909 TD 0.025 Tw [(is ev)5.8(en good enough to qualify!)]TJ /F2 1 Tf 7 0 0 7 63 564.3574 Tm -0.0002 Tc 0 Tw (#!/usr/bin/perl)Tj 0 -1.1429 TD ($;="@{'`|;{'^'!.|-)Tj 0 -2.2857 TD -0.0001 Tc ('}";$.++;$.++;$.++;$_="\(.\)?";/\(\(?{$_.=$_}\).\)+$/;@_='~!@#$%^&*\()Tj 0 -1.1429 TD -0.0002 Tc 0.06 Tw [(\)_+`-=[]\\\\{}|;\\':",./<>? '=~/$_/;@_)-210.1(_=$;=~/$_/;$_="\(.\)*?";/\(\(?{$_.=$_}\).\)+$/;$Z-=)]TJ T* 0 Tw [($Z;"$.$."-$Z;/\(\(?{$_)-210.1(_[$z]&&!\("${_[$x]}"^"${_[$y]}"^"${_)-210.1(_[$z]}"^"$Z"\)&&\($a.=$_[$x)]TJ T* -0.0001 Tc [(],$b.=$_[$y],$z++\);$x++;$y+=!\($x%="$.$."\);$y%="$.$.";}\).\)+/;$_="^"^"^";$_)-210(_=".>.\\)]TJ T* -0.0002 Tc [('$_)-210.1(_)-209.9(_$b'\)".".\('!\\@/\\"'^'}.'\)".']}`';)]TJ 0 -2.2857 TD (print;)Tj /F1 1 Tf 11 0 0 11 63 468.3574 Tm -0.0001 Tc -0.0357 Tw [(The most beauteous entr)-17.9(y was formulated b)5.8(y)0( Christopher G)11.9(utteridge, whose ASCII timepiece spr)-7.9(ung a fe)-5.9(w gears on cygwin32)]TJ 0 -1.0909 TD 0.025 Tw [(but was good enough under Linux to win thr)5.8(ough.)]TJ /F8 1 Tf 12 0 0 12 63 417.6507 Tm 0 Tc 0 Tw (C)Tj 10.44 0 0 10.44 71.5661 417.6507 Tm 0.0228 Tc [(A)81.6(TEGOR)44.7(Y)]TJ 12 0 0 12 124.2735 417.6507 Tm 0.0198 Tc 0.0616 Tw (4: T)Tj 10.44 0 0 10.44 146.3869 417.6507 Tm 0.0225 Tc 0 Tw (HE)Tj 12 0 0 12 164.9995 417.6507 Tm 0 Tc (O)Tj 10.44 0 0 10.44 174.7433 417.6507 Tm 0.0227 Tc (LD)Tj 12 0 0 12 192.8564 417.6507 Tm 0 Tc (S)Tj 10.44 0 0 10.44 199.1432 417.6507 Tm 0.0228 Tc [(T)88.8(ANDBY)]TJ /F1 1 Tf 11 0 0 11 63 405.6507 Tm -0.0001 Tc 0.025 Tw (\(1 << 5 inmates\))Tj T* [(R)12.1(ules: must output )-17.9(The P)53.9(erl J)29.7(ournal)11.9(; 256 chars)]TJ 0 -2.1818 TD 0.0077 Tw [(Although Mssr)59.7(. B)11.9(r)-7.7(uhat)17.7()79.9(s)0( combination P)53.9(o)0.1(stScript/P)53.9(erl \(y)5.8(es,)]TJ 0 -1.0909 TD 0.1293 Tw [(r)9.9(eally\) entr)-17.9(y was )44.8(The B)5.8(est E)29.7(v)5.9(er)59.7(, it was also many)84.9(, many)]TJ T* 0.22 Tw [(mor)9.7(e)-0.1( b)5.8(ytes than permitted. Alas. I)11.9(n)0( fact, many deeply)]TJ T* -0.0301 Tw [(skilled entrants w)5.8(ent o)15.8(v)5.9(er; w)5.8(e)0( apologiz)5.8(e, and next y)5.8(ear)59.7(, the)]TJ T* 0.025 Tw [(b)5.8(yte limit will be 1024 b)5.8(ytes.)]TJ 0 -2.1818 TD 0.1491 Tw [(Thir)13.8(d place: M)11.9(atthe)-5.9(w S)23.9(mith, whose ev)5.8(olving string was)]TJ 0 -1.0909 TD 0.025 Tw [(clev)5.8(erly done.)]TJ 0 -2.0909 TD 0.0983 Tw [(S)12.1(econd place: M)11.9(a)0.3(r)5.8(k-J)29.7(ason D)11.9(ominus, who sent characters)]TJ 0 -1.0909 TD 0.1943 Tw [(spe)-5.9(wing ev)5.8(er)-17.9(y which way thr)5.8(ough multiple twisty little)]TJ T* -0.0011 Tw [(passages in the kernel, all alike. As solid a first entr)-17.9(y as one)]TJ T* 0.025 Tw [(might expect fr)5.8(om a golden-age-of-talk.bizarr)9.7(e r)9.7(efugee.)]TJ /F2 1 Tf 7 0 0 7 63 206.6507 Tm 0.0599 Tw (@P=split//,".URRUUxR";@d=split//,"\\nlanruoJ lreP ehT";sub)Tj 0 -1.1429 TD 0 Tw (p{@p{"r$p","u$p"}=\(P,P\);pipe"r$p","u$p";$p++;\($q*=2\)+=$f=!)Tj T* (fork;map{$P=$P[$f|6&ord$p{$_}];$p{$_}=/$P/i?$P:close$_}%p})Tj T* -0.0002 Tc (p;p;p;p;p;map$p{$_}=~/[P.]/&&close$_,%p;wait)Tj T* (until$?;map/r/&&<$_>,%p;print$d[$q])Tj /F1 1 Tf 11 0 0 11 63 150.6507 Tm -0.0001 Tc 0.1786 Tw [(F)34(irst place: ther)9.7(e)29.7()79.9(s always someone who tries something)]TJ 0 -1.0909 TD 0.025 Tw [(totally bey)5.8(ond any understanding. )44.8(That someone was Les )]TJ T* [(P)54(eters, who used a r)9.7(endition of r)5.8(otated 90 degr)9.7(ee M)11.9(ayan )]TJ 25.7727 22.1564 TD 0.026 Tw [(numerals to extract the r)9.7(equir)9.7(ed text. )14.8(Y)89.8(es, indeed. F)35.8(or this)]TJ 0 -1.0909 TD 0.0169 Tw [(effor)-7.9(t abo)15.8(v)5.9(e)0( and bey)5.8(ond the tethers of sanity)84.9(, Les wins the)]TJ T* 0.3122 Tw [(hated and fear)9.7(ed BEST OF SHO)51.7(W awar)13.8(d this y)5.8(ear)59.7(.)]TJ T* 0.0405 Tw [(Commiserations and sorr)5.8(o)12(w)0( go out to Les, his co)11.9(wor)5.8(kers,)]TJ T* 0.025 Tw [(and his family)84.9(.)]TJ /F2 1 Tf 7 0 0 7 346.5 302.3709 Tm 0.0599 Tw [(#:: ::-| ::-| .-. :||-:: 0-| .-| ::||-| .:|-. :||)]TJ 0 -1.1429 TD 0 Tw (open\(Q,$0\);while\(\){if\(/^#\(.*\)$/\){for\(split\('-)Tj T* (',$1\)\){$q=0;for\(split\){s/\\|)Tj T* (/:.:/xg;s/:/../g;$Q=$_?length:$_;$q+=$q?$Q:$Q*20;}print)Tj T* -0.0002 Tc (chr\($q\);}}}print"\\n";)Tj T* -0.0001 Tc 0.0599 Tw [(#.: ::||-| .||-| :|||-| ::||-| ||-:: :|||-| .:|)]TJ /F1 1 Tf 11 0 0 11 346.5 221.3709 Tm 0.181 Tw [(That)17.8()79.9(s all for this y)5.8(ear! )14.8(W)77.8(e)0( go no)11.9(w to clean our hands)]TJ 0 -1.0909 TD 0.025 Tw [(obsessiv)5.8(ely and r)9.7(est up for next y)5.8(ear)19.7()79.9(s)0( onslaught....)]TJ 0 -2.1818 TD [(The O)5.8(bfuscated P)53.9(erl Contest J)35.8(udges)]TJ /F10 1 Tf 0 -1.9091 TD 0.0278 Tw (_ _END_ _)Tj /F5 1 Tf 0 -2.1818 TD 0.0006 Tc 0.3743 Tw [(F)35.8(e)0(lix G)23.8(allo )]TJ /F1 1 Tf 5.0644 0 TD 0 Tw (\(fsg@cumulonimbus.com\),)Tj /F5 1 Tf 11.1251 0 TD 0.3743 Tw [(a hacker)59.7(,)-0.1( films,)]TJ -16.1895 -1.0909 TD -0.0001 Tc -0.0091 Tw [(codes, plays F)23.9(r)29.9(ank and Riff, consults, and sur)-7.9(fs in Los A)17.8(ngeles.)]TJ ET /Cs10 CS 1 SCN 0 J 0 j 2 w 10 M []0 d 347.68 242.21 m 594 242.21 l S 0 0 0 0 k 323.39 786.97 270.61 -224.36 re 594 128.371 m f* Q q 1 i 323.39 786.97 270.61 -224.36 re W* n q 270.6015 0 0 224.4012 323.39 562.5688 cm /Im14 Do Q Q q 1 i 27 846 603 -783 re 0 873 m W n 0 873 684 -873 re W n BT /F8 1 Tf 11 0 0 11 323.3929 793.0776 Tm 0 0 0 1 k /GS2 gs -0.0001 Tc 0.0255 Tw [(An animated ASCII timepiece in 511 b)5.8(ytes.)]TJ ET /Cs10 CS 1 SCN 0 J 0 j 2 w 10 M []0 d 63 810 m 594 810 l 63 442.11 m 594 442.11 l S Q 0 0 0 0 k 1 i 37 874 191 -12 re 515.507 793.078 m f* BT /F2 1 Tf 8 0 0 8 39 864 Tm /Cs9 cs 1 scn -0.0004 Tc -0.0019 Tw (TPJ#19/9.26 9/27/00 10:35 AM Page 80)Tj ET 1 G 0 J 0 j 0.5 w 10 M []0 d 36 873 m 36 849 l 0 837 m 24 837 l 621 873 m 621 849 l 657 837 m 633 837 l 36 36 m 36 60 l 0 72 m 24 72 l 621 36 m 621 60 l 657 72 m 633 72 l S /Cs9 CS 1 SCN 0.25 w 36 873 m 36 849 l 0 837 m 24 837 l 621 873 m 621 849 l 657 837 m 633 837 l 36 36 m 36 60 l 0 72 m 24 72 l 621 36 m 621 60 l 657 72 m 633 72 l S 1 G 0.5 w 304.5 861 m 352.5 861 l 304.5 48 m 352.5 48 l 12 478.5 m 12 430.5 l 645 478.5 m 645 430.5 l 328.5 873 m 328.5 849 l 328.5 60 m 328.5 36 l 0 454.5 m 24 454.5 l 633 454.5 m 657 454.5 l 328.5 861 m 334.5 861 l 334.5 857.688 331.812 855 328.5 855 c 325.188 855 322.5 857.688 322.5 861 c 322.5 864.312 325.188 867 328.5 867 c 331.812 867 334.5 864.312 334.5 861 c 328.5 48 m 334.5 48 l 334.5 44.688 331.812 42 328.5 42 c 325.188 42 322.5 44.688 322.5 48 c 322.5 51.312 325.188 54 328.5 54 c 331.812 54 334.5 51.312 334.5 48 c 12 454.5 m 18 454.5 l 18 451.188 15.312 448.5 12 448.5 c 8.688 448.5 6 451.188 6 454.5 c 6 457.812 8.688 460.5 12 460.5 c 15.312 460.5 18 457.812 18 454.5 c 645 454.5 m 651 454.5 l 651 451.188 648.312 448.5 645 448.5 c 641.688 448.5 639 451.188 639 454.5 c 639 457.812 641.688 460.5 645 460.5 c 648.312 460.5 651 457.812 651 454.5 c S /Cs9 CS 1 SCN 0.25 w 304.5 861 m 352.5 861 l 304.5 48 m 352.5 48 l 12 478.5 m 12 430.5 l 645 478.5 m 645 430.5 l 328.5 873 m 328.5 849 l 328.5 60 m 328.5 36 l 0 454.5 m 24 454.5 l 633 454.5 m 657 454.5 l 328.5 861 m 334.5 861 l 334.5 857.688 331.812 855 328.5 855 c 325.188 855 322.5 857.688 322.5 861 c 322.5 864.312 325.188 867 328.5 867 c 331.812 867 334.5 864.312 334.5 861 c 328.5 48 m 334.5 48 l 334.5 44.688 331.812 42 328.5 42 c 325.188 42 322.5 44.688 322.5 48 c 322.5 51.312 325.188 54 328.5 54 c 331.812 54 334.5 51.312 334.5 48 c 12 454.5 m 18 454.5 l 18 451.188 15.312 448.5 12 448.5 c 8.688 448.5 6 451.188 6 454.5 c 6 457.812 8.688 460.5 12 460.5 c 15.312 460.5 18 457.812 18 454.5 c 645 454.5 m 651 454.5 l 651 451.188 648.312 448.5 645 448.5 c 641.688 448.5 639 451.188 639 454.5 c 639 457.812 641.688 460.5 645 460.5 c 648.312 460.5 651 457.812 651 454.5 c S endstream endobj 251 0 obj << /Type /XObject /Subtype /Image /Width 246 /Height 204 /BitsPerComponent 8 /ColorSpace 297 0 R /Length 1332 /Filter /FlateDecode >> stream H {6meH(Ҥˆ.-$k&dL dז% ,g#0 = ˈ^K.c\=OMr,j;0>a߷ {L=Dkem,}~H;!?76v;M#FǏvxy̛KI'O]z.z!y;<z:9_O"Y7n  fm$f}ryϯ6;WW_u=d\p^W?dAOymؗʹkf^#i^ LYnneon]ƣ'{.Ikx]b^kx':f ~u̺ϵp1ӿS $+y )[N&o+ƪ_S\CdžK]3'XU_C&pM8Mk:vfVNAt5`U>aMXtPgk254Y+/TԢz6sXS߯*`-WRkXoV낦ZguZd-AAZnC4[iAk YކȡZZo(ֆ}c]E՚I _V3:i]aID kfZEZvUxYY:27X yJ+H32rӭVuԬe*V(ISW kp6uIåIgJ*N./8/MVf]6Gᬱ Yuf:+ػݛ}ȀGF`MXӡGa k:=&k:}D25`MXũXt5YW)44k9*  k: ko#P6DXȚ RBAjXt5T[؉YtBx`MXto6 k:k:k:k:k:pk%֝# endstream endobj 252 0 obj << /Type /Page /Parent 499 0 R /Resources 253 0 R /Contents 254 0 R /Thumb 481 0 R /MediaBox [ 0 0 684 873 ] /CropBox [ 0 0 684 873 ] /Rotate 0 >> endobj 253 0 obj << /ProcSet [ /PDF /Text ] /Font << /F1 515 0 R /F2 518 0 R >> /ExtGState << /GS1 523 0 R /GS2 521 0 R >> /ColorSpace << /Cs9 520 0 R >> >> endobj 254 0 obj << /Length 2702 >> stream 1 g /GS1 gs 0 873 m 0 873 l f q 1 i 27 846 603 -783 re 0 873 m W n 0 873 684 -873 re W n 0 0 0 0.1 k 63.5 809.5 530 -710 re 0 873 m f* 0 0 0 1 K 0 J 0 j 1 w 10 M []0 d 63.5 809.5 530 -710 re S BT /F1 1 Tf 19 0 0 19 268.7 520.3156 Tm 0 0 0 1 k /GS2 gs -0.0001 Tc 0.0249 Tw [(I)12(nside B)11.8(a)0(ck Co)15.7(v)5.9(er: )]TJ -1.3472 -1.2 TD -0.0002 Tc 0 Tw [(T)31.9(O)0.1(M)-250.2(CHRISTIANSON)]TJ 3.8566 -2.4 TD -0.0001 Tc [(NE)11.8(W)]TJ ET Q 0 0 0 0 k /GS2 gs 1 i 37 874 191 -12 re 360.364 451.916 m f* BT /F2 1 Tf 8 0 0 8 39 864 Tm /Cs9 cs 1 scn -0.0004 Tc -0.0019 Tw (TPJ#19/9.26 9/27/00 10:35 AM Page 81)Tj ET 1 G 0 J 0 j 0.5 w 10 M []0 d 36 873 m 36 849 l 0 837 m 24 837 l 621 873 m 621 849 l 657 837 m 633 837 l 36 36 m 36 60 l 0 72 m 24 72 l 621 36 m 621 60 l 657 72 m 633 72 l S /Cs9 CS 1 SCN 0.25 w 36 873 m 36 849 l 0 837 m 24 837 l 621 873 m 621 849 l 657 837 m 633 837 l 36 36 m 36 60 l 0 72 m 24 72 l 621 36 m 621 60 l 657 72 m 633 72 l S 1 G 0.5 w 304.5 861 m 352.5 861 l 304.5 48 m 352.5 48 l 12 478.5 m 12 430.5 l 645 478.5 m 645 430.5 l 328.5 873 m 328.5 849 l 328.5 60 m 328.5 36 l 0 454.5 m 24 454.5 l 633 454.5 m 657 454.5 l 328.5 861 m 334.5 861 l 334.5 857.688 331.812 855 328.5 855 c 325.188 855 322.5 857.688 322.5 861 c 322.5 864.312 325.188 867 328.5 867 c 331.812 867 334.5 864.312 334.5 861 c 328.5 48 m 334.5 48 l 334.5 44.688 331.812 42 328.5 42 c 325.188 42 322.5 44.688 322.5 48 c 322.5 51.312 325.188 54 328.5 54 c 331.812 54 334.5 51.312 334.5 48 c 12 454.5 m 18 454.5 l 18 451.188 15.312 448.5 12 448.5 c 8.688 448.5 6 451.188 6 454.5 c 6 457.812 8.688 460.5 12 460.5 c 15.312 460.5 18 457.812 18 454.5 c 645 454.5 m 651 454.5 l 651 451.188 648.312 448.5 645 448.5 c 641.688 448.5 639 451.188 639 454.5 c 639 457.812 641.688 460.5 645 460.5 c 648.312 460.5 651 457.812 651 454.5 c S /Cs9 CS 1 SCN 0.25 w 304.5 861 m 352.5 861 l 304.5 48 m 352.5 48 l 12 478.5 m 12 430.5 l 645 478.5 m 645 430.5 l 328.5 873 m 328.5 849 l 328.5 60 m 328.5 36 l 0 454.5 m 24 454.5 l 633 454.5 m 657 454.5 l 328.5 861 m 334.5 861 l 334.5 857.688 331.812 855 328.5 855 c 325.188 855 322.5 857.688 322.5 861 c 322.5 864.312 325.188 867 328.5 867 c 331.812 867 334.5 864.312 334.5 861 c 328.5 48 m 334.5 48 l 334.5 44.688 331.812 42 328.5 42 c 325.188 42 322.5 44.688 322.5 48 c 322.5 51.312 325.188 54 328.5 54 c 331.812 54 334.5 51.312 334.5 48 c 12 454.5 m 18 454.5 l 18 451.188 15.312 448.5 12 448.5 c 8.688 448.5 6 451.188 6 454.5 c 6 457.812 8.688 460.5 12 460.5 c 15.312 460.5 18 457.812 18 454.5 c 645 454.5 m 651 454.5 l 651 451.188 648.312 448.5 645 448.5 c 641.688 448.5 639 451.188 639 454.5 c 639 457.812 641.688 460.5 645 460.5 c 648.312 460.5 651 457.812 651 454.5 c S endstream endobj 255 0 obj << /Type /Page /Parent 499 0 R /Resources 256 0 R /Contents 257 0 R /Thumb 483 0 R /MediaBox [ 0 0 684 873 ] /CropBox [ 0 0 684 873 ] /Rotate 0 >> endobj 256 0 obj << /ProcSet [ /PDF /Text ] /Font << /F1 515 0 R /F2 518 0 R >> /ExtGState << /GS1 523 0 R /GS2 521 0 R >> /ColorSpace << /Cs9 520 0 R >> >> endobj 257 0 obj << /Length 2668 >> stream 1 g /GS1 gs 0 873 m 0 873 l f q 1 i 27 846 603 -783 re 0 873 m W n 0 873 684 -873 re W n 0 0 0 0.1 k 63.5 809.5 530 -710 re 0 873 m f* 0 0 0 1 K 0 J 0 j 1 w 10 M []0 d 63.5 809.5 530 -710 re S BT /F1 1 Tf 19 0 0 19 256.2948 531.5714 Tm 0 0 0 1 k /GS2 gs -0.0001 Tc 0.0249 Tw [(I)12(nside F)35.8(r)6(ont Co)15.7(v)5.9(er: )]TJ -0.0106 -1.2 TD 0 Tw [(SOL)17.7(UTIONSOFT)]TJ 2.6534 -2.4 TD [(NE)11.8(W)]TJ ET Q 0 0 0 0 k /GS2 gs 1 i 37 874 191 -12 re 350.493 463.172 m f* BT /F2 1 Tf 8 0 0 8 39 864 Tm /Cs9 cs 1 scn -0.0004 Tc -0.0019 Tw (TPJ#19/9.26 9/27/00 10:35 AM Page 82)Tj ET 1 G 0 J 0 j 0.5 w 10 M []0 d 36 873 m 36 849 l 0 837 m 24 837 l 621 873 m 621 849 l 657 837 m 633 837 l 36 36 m 36 60 l 0 72 m 24 72 l 621 36 m 621 60 l 657 72 m 633 72 l S /Cs9 CS 1 SCN 0.25 w 36 873 m 36 849 l 0 837 m 24 837 l 621 873 m 621 849 l 657 837 m 633 837 l 36 36 m 36 60 l 0 72 m 24 72 l 621 36 m 621 60 l 657 72 m 633 72 l S 1 G 0.5 w 304.5 861 m 352.5 861 l 304.5 48 m 352.5 48 l 12 478.5 m 12 430.5 l 645 478.5 m 645 430.5 l 328.5 873 m 328.5 849 l 328.5 60 m 328.5 36 l 0 454.5 m 24 454.5 l 633 454.5 m 657 454.5 l 328.5 861 m 334.5 861 l 334.5 857.688 331.812 855 328.5 855 c 325.188 855 322.5 857.688 322.5 861 c 322.5 864.312 325.188 867 328.5 867 c 331.812 867 334.5 864.312 334.5 861 c 328.5 48 m 334.5 48 l 334.5 44.688 331.812 42 328.5 42 c 325.188 42 322.5 44.688 322.5 48 c 322.5 51.312 325.188 54 328.5 54 c 331.812 54 334.5 51.312 334.5 48 c 12 454.5 m 18 454.5 l 18 451.188 15.312 448.5 12 448.5 c 8.688 448.5 6 451.188 6 454.5 c 6 457.812 8.688 460.5 12 460.5 c 15.312 460.5 18 457.812 18 454.5 c 645 454.5 m 651 454.5 l 651 451.188 648.312 448.5 645 448.5 c 641.688 448.5 639 451.188 639 454.5 c 639 457.812 641.688 460.5 645 460.5 c 648.312 460.5 651 457.812 651 454.5 c S /Cs9 CS 1 SCN 0.25 w 304.5 861 m 352.5 861 l 304.5 48 m 352.5 48 l 12 478.5 m 12 430.5 l 645 478.5 m 645 430.5 l 328.5 873 m 328.5 849 l 328.5 60 m 328.5 36 l 0 454.5 m 24 454.5 l 633 454.5 m 657 454.5 l 328.5 861 m 334.5 861 l 334.5 857.688 331.812 855 328.5 855 c 325.188 855 322.5 857.688 322.5 861 c 322.5 864.312 325.188 867 328.5 867 c 331.812 867 334.5 864.312 334.5 861 c 328.5 48 m 334.5 48 l 334.5 44.688 331.812 42 328.5 42 c 325.188 42 322.5 44.688 322.5 48 c 322.5 51.312 325.188 54 328.5 54 c 331.812 54 334.5 51.312 334.5 48 c 12 454.5 m 18 454.5 l 18 451.188 15.312 448.5 12 448.5 c 8.688 448.5 6 451.188 6 454.5 c 6 457.812 8.688 460.5 12 460.5 c 15.312 460.5 18 457.812 18 454.5 c 645 454.5 m 651 454.5 l 651 451.188 648.312 448.5 645 448.5 c 641.688 448.5 639 451.188 639 454.5 c 639 457.812 641.688 460.5 645 460.5 c 648.312 460.5 651 457.812 651 454.5 c S endstream endobj 258 0 obj << /Type /Page /Parent 499 0 R /Resources 259 0 R /Contents 260 0 R /Thumb 485 0 R /MediaBox [ 0 0 684 873 ] /CropBox [ 0 0 684 873 ] /Rotate 0 >> endobj 259 0 obj << /ProcSet [ /PDF /Text ] /Font << /F1 515 0 R /F2 518 0 R >> /ExtGState << /GS1 523 0 R /GS2 521 0 R >> /ColorSpace << /Cs9 520 0 R >> >> endobj 260 0 obj << /Length 2703 >> stream 1 g /GS1 gs 0 873 m 0 873 l f q 1 i 27 846 603 -783 re 0 873 m W n 0 873 684 -873 re W n 0 0 0 0.1 k 63.5 809.5 530 -710 re 0 873 m f* 0 0 0 1 K 0 J 0 j 1 w 10 M []0 d 63.5 809.5 530 -710 re S BT /F1 1 Tf 19 0 0 19 283.6292 531.5714 Tm 0 0 0 1 k /GS2 gs -0.0001 Tc 0.0249 Tw [(B)11.9(a)0(ck Co)15.8(v)5.9(er: )]TJ -0.9858 -1.2 TD -0.0003 Tc 0 Tw [(A)11.9(CTIVE)-250.3(ST)64.6(A)69.7(T)-0.2(E)]TJ 2.1899 -2.4 TD -0.0001 Tc [(NE)11.8(W)]TJ ET Q 0 0 0 0 k /GS2 gs 1 i 37 874 191 -12 re 350.493 463.172 m f* BT /F2 1 Tf 8 0 0 8 39 864 Tm /Cs9 cs 1 scn -0.0004 Tc -0.0019 Tw (TPJ#19/9.26 9/27/00 10:35 AM Page 83)Tj ET 1 G 0 J 0 j 0.5 w 10 M []0 d 36 873 m 36 849 l 0 837 m 24 837 l 621 873 m 621 849 l 657 837 m 633 837 l 36 36 m 36 60 l 0 72 m 24 72 l 621 36 m 621 60 l 657 72 m 633 72 l S /Cs9 CS 1 SCN 0.25 w 36 873 m 36 849 l 0 837 m 24 837 l 621 873 m 621 849 l 657 837 m 633 837 l 36 36 m 36 60 l 0 72 m 24 72 l 621 36 m 621 60 l 657 72 m 633 72 l S 1 G 0.5 w 304.5 861 m 352.5 861 l 304.5 48 m 352.5 48 l 12 478.5 m 12 430.5 l 645 478.5 m 645 430.5 l 328.5 873 m 328.5 849 l 328.5 60 m 328.5 36 l 0 454.5 m 24 454.5 l 633 454.5 m 657 454.5 l 328.5 861 m 334.5 861 l 334.5 857.688 331.812 855 328.5 855 c 325.188 855 322.5 857.688 322.5 861 c 322.5 864.312 325.188 867 328.5 867 c 331.812 867 334.5 864.312 334.5 861 c 328.5 48 m 334.5 48 l 334.5 44.688 331.812 42 328.5 42 c 325.188 42 322.5 44.688 322.5 48 c 322.5 51.312 325.188 54 328.5 54 c 331.812 54 334.5 51.312 334.5 48 c 12 454.5 m 18 454.5 l 18 451.188 15.312 448.5 12 448.5 c 8.688 448.5 6 451.188 6 454.5 c 6 457.812 8.688 460.5 12 460.5 c 15.312 460.5 18 457.812 18 454.5 c 645 454.5 m 651 454.5 l 651 451.188 648.312 448.5 645 448.5 c 641.688 448.5 639 451.188 639 454.5 c 639 457.812 641.688 460.5 645 460.5 c 648.312 460.5 651 457.812 651 454.5 c S /Cs9 CS 1 SCN 0.25 w 304.5 861 m 352.5 861 l 304.5 48 m 352.5 48 l 12 478.5 m 12 430.5 l 645 478.5 m 645 430.5 l 328.5 873 m 328.5 849 l 328.5 60 m 328.5 36 l 0 454.5 m 24 454.5 l 633 454.5 m 657 454.5 l 328.5 861 m 334.5 861 l 334.5 857.688 331.812 855 328.5 855 c 325.188 855 322.5 857.688 322.5 861 c 322.5 864.312 325.188 867 328.5 867 c 331.812 867 334.5 864.312 334.5 861 c 328.5 48 m 334.5 48 l 334.5 44.688 331.812 42 328.5 42 c 325.188 42 322.5 44.688 322.5 48 c 322.5 51.312 325.188 54 328.5 54 c 331.812 54 334.5 51.312 334.5 48 c 12 454.5 m 18 454.5 l 18 451.188 15.312 448.5 12 448.5 c 8.688 448.5 6 451.188 6 454.5 c 6 457.812 8.688 460.5 12 460.5 c 15.312 460.5 18 457.812 18 454.5 c 645 454.5 m 651 454.5 l 651 451.188 648.312 448.5 645 448.5 c 641.688 448.5 639 451.188 639 454.5 c 639 457.812 641.688 460.5 645 460.5 c 648.312 460.5 651 457.812 651 454.5 c S endstream endobj 261 0 obj << /Type /Font /Subtype /Type1 /FirstChar 32 /LastChar 181 /Widths [ 255 250 430 510 510 864 788 242 330 330 400 510 255 320 255 270 510 510 510 510 510 510 510 510 510 510 255 255 510 510 510 326 774 608 612 656 757 588 546 719 772 357 361 665 558 875 730 748 584 748 602 498 640 726 636 922 615 588 627 330 340 330 510 500 380 470 487 360 499 370 282 404 493 291 281 468 260 756 524 436 476 482 372 290 304 520 442 672 435 398 423 330 316 330 510 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 510 510 255 255 255 255 255 838 255 255 255 255 255 255 255 510 255 255 255 520 ] /Encoding /WinAnsiEncoding /BaseFont /CPBIJL+AGaramond-SemiboldItalic /FontDescriptor 299 0 R >> endobj 262 0 obj << /Type /Font /Subtype /Type1 /FirstChar 32 /LastChar 240 /Widths [ 250 206 380 500 500 863 770 208 320 320 400 560 250 320 250 250 500 500 500 500 510 500 500 500 500 500 250 250 560 560 560 300 770 596 581 646 739 566 533 703 761 341 340 623 546 874 739 730 552 730 574 471 634 734 622 878 576 564 601 320 340 320 560 500 360 444 466 338 474 346 261 382 475 278 259 448 246 729 501 406 448 465 341 262 284 496 426 657 420 366 406 320 260 320 560 250 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 500 500 0 0 0 0 0 825 0 0 0 250 0 0 250 560 250 250 0 496 250 250 250 250 250 0 0 250 0 0 0 0 0 250 0 250 250 0 0 0 250 0 0 0 0 0 0 0 380 380 0 208 0 250 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 250 ] /Encoding /MacRomanEncoding /BaseFont /CPBIIJ+AGaramond-Italic /FontDescriptor 303 0 R >> endobj 263 0 obj << /Type /Font /Subtype /Type1 /FirstChar 32 /LastChar 181 /Widths [ 250 333 333 500 500 833 667 250 333 333 500 500 333 333 333 278 500 500 500 500 500 500 500 500 500 500 278 278 500 500 500 500 833 556 556 556 611 500 500 611 611 278 444 556 500 778 611 611 556 611 611 556 500 611 556 833 556 556 500 333 250 333 500 500 333 500 500 444 500 500 278 500 500 278 278 444 278 778 500 500 500 500 333 444 278 500 444 667 444 444 389 274 250 274 500 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 500 500 250 250 250 250 250 830 250 250 250 250 250 250 250 500 250 250 250 500 ] /Encoding /WinAnsiEncoding /BaseFont /CPBIII+Helvetica-Condensed-Bold /FontDescriptor 305 0 R >> endobj 264 0 obj [ /Separation /100y#2F100m#2F10k /DeviceCMYK 265 0 R ] endobj 265 0 obj << /FunctionType 0 /Domain [ 0 1 ] /Range [ 0 1 0 1 0 1 0 1 ] /BitsPerSample 8 /Size [ 255 ] /Length 869 /Filter /FlateDecode >> stream H ѿZ۪>۶m۶m|϶m۶m۶s? nx@u!.$Ʌ,\.BU].B!7FtcYnlۍ D"nQ11b;8q<č!^<{HC„%HX II%H\ E )RHZ M/izIK^2d1Ld%K/YzɖM${v9DrɕK$wnjQ:u|ԭ^=?iOÆ~5Ӹ&M4mY3?͛i"@˖Z кu6mm]!@ǎ:uRYK]uS]G=zR[O}US_eU RM09x!Ç-8z1-N8y)ӧ-Μ9{9m.\x%˗m\z5npy-۷q{=<aG<~ɓ0Oy,a^eW"~͛oFx.>|cO"|˗(_F-Q~g_ϟ(`_ endstream endobj 266 0 obj << /Type /Font /Subtype /Type1 /FirstChar 32 /LastChar 240 /Widths [ 260 254 472 520 520 866 825 253 340 340 405 520 260 328 260 339 520 520 520 520 520 520 520 520 520 520 260 260 520 520 520 332 769 624 635 689 793 593 548 734 806 371 383 715 585 908 748 788 601 788 664 506 645 740 642 960 665 575 614 340 321 340 520 500 380 443 532 416 537 420 311 479 547 286 281 532 278 806 550 516 543 528 371 358 323 544 457 682 458 469 415 340 248 340 520 260 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 520 520 0 0 0 0 0 780 0 0 0 260 0 0 260 520 260 260 0 536 260 260 260 260 260 0 0 260 0 0 0 0 0 260 0 260 260 0 0 0 260 0 0 0 0 0 0 0 0 0 0 253 0 260 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 260 ] /Encoding /MacRomanEncoding /BaseFont /CPBJDC+AGaramond-Bold /FontDescriptor 301 0 R >> endobj 267 0 obj << /Type /Font /Subtype /Type1 /FirstChar 32 /LastChar 181 /Widths [ 278 260 479 584 490 719 729 240 344 344 479 584 260 344 260 281 531 531 531 531 531 531 531 531 531 531 260 260 584 584 584 323 979 625 635 688 750 583 490 740 792 302 302 646 531 948 781 833 583 833 646 521 619 750 552 948 677 563 635 375 281 375 583 500 333 552 542 469 542 510 333 490 552 260 260 509 260 823 552 563 583 552 365 375 365 552 458 729 531 490 458 385 281 385 584 278 278 278 278 278 278 278 278 278 278 278 278 278 278 278 278 278 278 278 278 278 278 278 278 278 278 278 278 278 278 278 278 278 278 278 469 542 278 278 278 278 278 740 278 278 278 278 278 278 278 584 278 278 278 615 ] /Encoding /WinAnsiEncoding /BaseFont /CPBJKI+GillSans-BoldItalic /FontDescriptor 307 0 R >> endobj 268 0 obj << /Type /Font /Subtype /Type1 /FirstChar 32 /LastChar 240 /Widths [ 255 280 438 510 510 868 834 248 320 320 420 510 255 320 255 347 510 510 510 510 510 510 510 510 510 510 255 255 510 510 510 330 781 627 627 694 784 580 533 743 812 354 354 684 560 921 780 792 588 792 656 504 682 744 650 968 648 590 638 320 329 320 510 500 380 420 510 400 513 409 301 464 522 268 259 484 258 798 533 492 516 503 349 346 321 520 434 684 439 448 390 320 255 320 510 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 510 510 0 0 0 0 0 800 0 0 0 255 0 0 255 510 255 255 0 522 255 255 255 255 255 0 0 255 0 0 0 0 0 255 0 255 255 0 0 0 255 0 0 0 0 0 0 0 0 0 0 248 0 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 ] /Encoding /MacRomanEncoding /BaseFont /CPBKEA+AGaramond-Semibold /FontDescriptor 309 0 R >> endobj 269 0 obj << /Type /Font /Subtype /Type1 /FirstChar 32 /LastChar 240 /Widths [ 278 271 479 584 542 719 750 240 385 385 469 584 271 333 271 281 552 552 552 552 552 552 552 552 552 552 271 271 584 584 584 375 979 781 698 771 802 635 604 813 833 333 333 719 615 885 844 875 656 875 677 604 719 823 719 1167 813 708 698 438 281 438 584 500 333 531 583 500 583 552 302 542 583 271 271 552 271 958 583 594 583 583 448 427 406 583 510 781 552 510 521 385 281 385 584 278 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 500 521 0 0 0 0 0 740 0 0 0 278 0 0 278 584 278 278 0 615 278 278 278 278 278 0 0 278 0 0 0 0 0 278 0 278 278 0 0 0 278 0 0 0 0 0 0 0 563 563 0 271 0 278 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 278 ] /Encoding /MacRomanEncoding /BaseFont /CPBKCO+GillSans-Bold /FontDescriptor 311 0 R >> endobj 270 0 obj << /Type /Font /Subtype /Type1 /FirstChar 32 /LastChar 181 /Widths [ 278 250 354 584 500 708 688 188 292 292 448 584 198 250 198 281 521 521 521 521 521 521 521 521 521 521 198 198 584 584 584 354 1010 521 510 552 656 510 417 604 698 240 240 563 417 813 688 656 448 656 531 458 510 635 510 927 667 490 583 333 281 333 469 500 333 469 469 385 469 438 271 427 469 188 188 458 188 740 469 448 490 469 313 354 281 469 375 615 427 375 458 333 260 333 584 278 278 278 278 278 278 278 278 278 278 278 278 278 278 278 278 278 278 278 278 278 278 278 278 278 278 278 278 278 278 278 278 278 278 278 385 469 278 278 278 278 278 740 278 278 278 278 278 278 278 584 278 278 278 552 ] /Encoding /WinAnsiEncoding /BaseFont /CPBLOB+GillSans-Italic /FontDescriptor 313 0 R >> endobj 271 0 obj << /Type /Font /Subtype /Type1 /FirstChar 32 /LastChar 181 /Widths [ 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 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 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 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 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 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 ] /Encoding /WinAnsiEncoding /BaseFont /CPBMDG+Courier-Bold /FontDescriptor 315 0 R >> endobj 272 0 obj [ /Indexed /DeviceCMYK 255 273 0 R ] endobj 273 0 obj << /Length 105 /Filter /FlateDecode >> stream Hjhh @6 (cF||l|xbdeVg301(20)J2V.d` z`  endstream endobj 274 0 obj [ /Indexed /DeviceCMYK 255 275 0 R ] endobj 275 0 obj << /Length 247 /Filter /FlateDecode >> stream H̡k@ʉ2J:hEbpcDDTBd*,̬rrrs'+c''+wwq> stream Hjhhn|A f -@!85#>>6#39ۏfG2Q0 08 endstream endobj 278 0 obj [ /Indexed /DeviceCMYK 255 279 0 R ] endobj 279 0 obj << /Length 31 /Filter /FlateDecode >> stream Hb```vmhh0 F(Q ٝ endstream endobj 280 0 obj [ /Indexed /DeviceCMYK 255 281 0 R ] endobj 281 0 obj << /Length 119 /Filter /FlateDecode >> stream Hjhh,,, 񱊂Fn|S9_c`*ZK4#> stream H$Ãm۶m۶m۶mvR#in?vf )R2%bTIӐ6KKtdHOƘ)3%Ycd#FAr?7P01/Q8?Eb+HB% SRXr+ATKQ4P%V-KrT/\5+RcԭBԯFذzA4MjѴ6>“<=Ƴ8/N$N^i?g0~t>]K _\k 76~wĻO_#~')=}//5 endstream endobj 284 0 obj << /Type /Font /Subtype /Type1 /FirstChar 1 /LastChar 2 /Widths [ 278 918 ] /Encoding 319 0 R /BaseFont /CPDAOL+ZapfDingbats /FontDescriptor 317 0 R /ToUnicode 320 0 R >> endobj 285 0 obj [ /Indexed /DeviceCMYK 255 286 0 R ] endobj 286 0 obj << /Length 276 /Filter /FlateDecode >> stream HOAj0 &Є:8jZADAT*CD+)>B GC;da]ifvBr;l2okN,{)I: |yDDM15w %0\ 6MhZoj=/%zS"֒/%1{tMLU-,81'Vgo> stream H쐱kP B*q@=!"Up,y^@ ,5h `2xh!K2fCOdo>4Rj&.5# @HC!,b#;qGZ+5MBِxog.ڜ$W~̓|x}Jhb?N"K;@NsZF%%v}nӻb! dԬFԜB[K_!ד`4~'`=JlB*n5@=QU?[]G(#YvL;N)qwurlxE O^iR`ۭC_}ynY [;D4Bj;=dwy^$B endstream endobj 290 0 obj << /Length 604 /Filter /FlateDecode >> stream HR1k@~gL0+<A\pA`E"07hP, $tPJ:!Cƌ:tСC?t'ޝU|TDcN%\K)'und*^4XV%UPggYg"o*U%G^-Q"9M^efsEz[-k]nz$]?F 1l 3;kYNA,C(@[[Ԇ-ao8m6puT%L%ɢ꺪Y)=A|8;p?ENd+ ;1> P,g@W7=N r6|Htk9mIɌT?Q?#o{~|a> stream HpWmζVmcYK[]^Ɩwݻ+ acMasXR25l` ;p%# =oW2? 4!E%D" шcx$dQEPP\,((#YE9GT+2*I6Q5Q mmA]C}. h$7F4E34Z%Z5Hm%NHAgtAWɹRSr胾' ܆`(a䞆Q-yXxL<'b&c J^030$٘,",FK ˱B[UX5X+Cc6J[R6lD]؍=+~ABK'ppg8󸀋R%\q q7qK;{/E=CKO/xCoAO/*wO~*i endstream endobj 293 0 obj [ /Separation /14C,#205M /DeviceCMYK 294 0 R ] endobj 294 0 obj << /FunctionType 0 /Domain [ 0 1 ] /Range [ 0 1 0 1 0 1 0 1 ] /BitsPerSample 8 /Size [ 255 ] /Length 116 /Filter /FlateDecode >> stream Hć0@$e%v&T p- XXG!@<8Bd .* n (TjOMZЩD `܋G+! endstream endobj 295 0 obj [ /Indexed /DeviceCMYK 255 296 0 R ] endobj 296 0 obj << /Length 438 /Filter /FlateDecode >> stream Hбk@ B+8A ֐A{)dlyРCBK$C -tt yȠ!5tAw=]Q+;w zj)6@PL@Μko(ҒlJSr6q,: *@3Sek&2[ ٬UúybhŬY/p'upX?o%> stream HΡk@JDDk ,2& 3E4BX!:XDDd`u33MDDTDLd3Q1Q93w޻~9]D1YSҚ hJRwV<)P Kk&dLF4BLB9 S`A@ğԻ=."\#s-mzHbϮ˒$iJoM~{[oV!]ʈ={Ʒ3;i|o2ɝf32T۰ԱivB:ͨƵ󁮷p1$ hN endstream endobj 299 0 obj << /Type /FontDescriptor /Ascent 720 /CapHeight 663 /Descent -270 /Flags 262242 /FontBBox [ -154 -286 1176 866 ] /FontName /CPBIJL+AGaramond-SemiboldItalic /ItalicAngle -18.5 /StemV 105 /XHeight 408 /CharSet (/one/nine/numbersign/Z/colon/l/P/o/R/D/T/comma/e/G/q/U/a/E/r/space/h/V/J\ /s/A/exclam/i/t/n/u) /FontFile3 300 0 R >> endobj 300 0 obj << /Filter /FlateDecode /Length 4061 /Subtype /Type1C >> stream H|U}Px:.Y,YO{:~P(#s!l6K>YB ( }Q?΍rvڪw9S˜מ2˴]αvzg}E@t@Di)7lՖh#y s EyKE=y~QX«](^-_($ Iխ?OKy|,b pTRXpTTb5 yfX5ۏJJDfCQ&}ߨIu%ķ/@)4jmN-91uŖk~[}QN."`*,H`9+xD# 4GBD i5?ꉤ":54_:%zi*A35wK^%/OTWF-p1\ aR8qP cmNo=ɚZ$ 23-bswHoy{V_-h+!`L@;$VN$7mB *µweR!JV!}mE<Ҥe`LHd "k=F!`>15]V_l4X8Vɀ\7CmV6xJqۺ&>'c,o<(: ֖MhF(*+mj?בַ8=m&?7ʌ0qy<2aE~@2;{>z!ysR?  ȅ+I?Ԧ͠&\ kQ(5M;EФ r=E1&?*D5Q󳊾X*<_ŭ.hH8XtRg=t+O:Jssص4ILG\3<6e(di?ck cњpH#*Ym:vP!*ׄg*]aͥJhuz uώc&=bקO @;#bgMO@1 12sUV%\r\U P!g+Q5cɂbǎ,Y5.EfХ k'%>skT_aEuUO\Kp@}ʡa>$$Qxp&m[MxvyC$^Tq@xK.E0B7S *jẂC0;y|\v+Lg҄k9_{Wrre IZbKMxማpve;I[8iq^[r W5e)p@ar6sT;Uz̆:bE"Y"Y~w,_ 0H$bbmhs+'KIDTbg-)ū;뉗`"o~ >՛BxV'DBWã߰d".,wo)bLR ȯl/r;ZX;*NZ$2A>`~Yi3׵wO'MO:,KcWB̌ ; tɤ3JL-UQ6aT}ޯ\Xx&B߅trw-ʧcgjjOwG +XE/i'`rJutt+kkT&agEr+3_V%:XOcEQ.0بL簶V7?m E&# sJ4&(p1=OY'z΢<מ9rXAMyL$\e5乹N;N]=7E0 ,KH6˲l%0{P *owVO܍[g<>9Mu^I!M4y4`ϘЋ)8w*)>0|J w'"x{]ؐR-i.gnWJzZ*z׾x/[~U/klKg@n<0z @_qOC*D=]ywClP(t./ňD9^B/\zEƺz/(3R4 [3RW 7^'/?7=JmikyWkWleWe sMũ+l´wZƒ_bO]j4`07o4|c >[l[͛jXsXNYsR3{Fn'YtYBlcv#yN>Gus۰6|fRXzo,k쿮?blӘWxM .^5;{I 1/7L{g;yr.baUŲ &]odN]Xnn4J!h?ACo@D1WCAq]piO}~q= tiIJ)8 gQe%fS#cw0,r]A>U'꫽:kPƒC3hɅgx "n<#G֗n  h @< jkj8=wD~2EQ`Nd,7++N·?Kc9g\v-nsL QR8Lڽ7"!QN<d}X`BТ$@(Pmh0݋oNH 6t|_dƥ]k_TJ@]PM5.9H1Xnf-^9a3z p31Q`5e43BhCu&Rf[ CR"ig*\Ƙ4$h貮[zzޢ{3W'tB7A(m+ZWF3@gdksZ}vD&|=r_{(FtUh٧sH`GH|yr9+6 /NlΜ. |3oVY;wd7b?~dFVf `-}OGޮ- I~5.fx">!iH< Fb xC;61bd&|PK,xE> endobj 302 0 obj << /Filter /FlateDecode /Length 8518 /Subtype /Type1C >> stream H|TkTSWTZP.|S)PSAQyL#<;DDjuTFG-uD[Zv;ӵf묵|gpKݼ> Ҍc r&wV1w{gs3ݤo Zd_MV`;7r4HwʑIxWjD!kGh ږJ*ՌJAǿ?7@ETk?mbď^;SR<;I#9|ra]Pmܪb5Ak2-WSbt=͜>oiKUӦl_A`vIUVK[))$H'*;ZC%W u"๑26N nED,j%z< |n4Iܫuw69ՙ5[DEZ' nk]p ]8=0_V$iXdKCP)m=S5Z^n^SW8N844F @rtqoX-O~adren=O4]ݥM*CaR#_3zִgK(l+=8By1!b.:̃C-zPXZ/sY'nQs:`@1׬dK|=R<fUn0;5zK_LA1j'zK6 AQpZbv;P% й.]O;9t4TuiM^eSĚ+57w DÇbKMa4m9h@eU/#~3I&ob{ jښfVIͪ >&օcۏQu.|: WR+)Ԧla, }xx 8FO(BM+4@y: oGAU;I/ӓx_v(g2JȘ+ڃ(BngYjw{{lw]k>۩bU$| y#">roMB+(! (>֕ZNQgcwab??999~m˽ʋBXʜTYg%sD"񃴉T@Xs7v#loceɺa\gdLɠ Y^a@> ÃY ||sKf)6T:]x`X^i[pp:xu-ÖHE bZ S 9ۗ[Q" 1hr<G&Z{ 33^]S~F PP!0(|_Iwh2 2Zl==t\~1W~\66~0'3pj1RtYe-.]9?d&LINyQ& śwE ~&3#X'[Eq |V,?ɵgb1-d $_aP_Б \`yF\)Ҩ,zL:v=c&ly R h@\ 9Iʹ7 dҙny!x]!69_<y[@^eB^'!{/ 437a(DA>/ؕx NljSCɊnkڵթKqt\Noo#NV [ H '-ЂQa C '0̓5D [_xY^ XOXfQDZ.EU_luvC `/$spSr0;)v4/!~ fJkP~BJXyWMyč|ڎ4ޫ`vM|lKRoƅ.ToCѮo/ }<˰Ő5Dm)VoQ02(XC[L*&*XI$la|*&T >T\|OմfЁsoݻ.wmr# æfN0Wޗ-_/])>HF5.Zdxw a xCautLOPfzfEڂƍ@LmɎ'"V)2s,CTq)s$nYl +C4FӬ!zsRm#떐1F\.=#hCfyt-~7*k໇&N^%._w>~Y 5*%bXJy/I(% ))WC)B_sŵ@ ^.>x9wRbfZx"2ǒ?z%h[\C1Ή3qGjS%$*<õLI% :i =B@+%JP  ^k{Ywgα}^#u8i M j)"Qdo!(Rwy*-+Kp@ 3h's0 ^T74n.1{Lu9pMW\:fh1S/Y N;Ġ<~_DcUS !#rP'{/ 9 "M<k_i_Yi? dKBY\Uc%eacK{LBTa)":?wbLhC*jh>:45faVAR-P>̅uL#"hAi#6mbR)>o!=il T^cY":ZGJЈ|К0M d"%TV m2VV9+l_돿(C8Cx<*db<4|F"}Fhc5ӫh}"܄p?J` O̧ k*bx1"=3b#!#ii|xJ"FmQMՊ '9hbwmP\nx-.c@M)0oE[˥* ޽:*!vavUOՇ̙E!wQXo}(Z,RUplxoE H[ ^o\PE654bn՛L$H 3ZOV#S=IRAZ@Q?'CFg@ô߉$͂"S2_g{Ӯ2W?kOޛ@EP`룷|g?29VONvfwll=[&^r-ƦOOt9)? $uݸTIpHIkA ϭģ9XwHIT?w Ak?udd7ȖRv0DN/<Hsoy'\~:+l(Խ̴Pjy&JR?ayL,hC ,]\]#7 +E%gZɠg} ڛ4UW_ A T uF%̏[oN nl=P;֋3Jj7䍨 ft0~+;t]PpR࢖{ x'dslΉScf؜x=?ֻC鞚Jܐ)|}>fNMs@+^.UzAq/$؜dLTLԢ z<,J'#ʳ2۝t<>]Hbc|mOg8~m%c:xӔtjսCQMH{vF)m)hK@ vq}};$yBP``IӶj:>#Ob_@W;;v;uW/LNj=9qkX~]g^8| v?$09=19._n?_֖40 J^D9+W*U"I.bGVdz1snIR0WЏs T7eB Π^:Y4ȧ |oPi<1k 3Pf (ɨwv $Z8\݁_n&ߴ p>ʤ2MEwִ:6"pUWq'g>Ze)=c4m.YW7/ mBRFpnùW6ɠL0{0s:?FoB胱7OR>_XǠ#x4ذZ<{rW㏼73<]+KL\d ʀ{Hk9N[. C>=ɞYfiu|dҐ72j-/ C;o(9hmo(("69ZW' ^6N1H8-%vY>}}㦚wIg0,MR~P{i2Os'!eu@&øeuX4[FF3Mڶf,3bVyO,7kςfWg>SG)gwy 54":2NN)4?cSU7`o8*5vWÞ#Ozѐjڟ9FZ$T !0=wma JME*-"ucȰ#Vks7ABhPcr6C/|4$s˶bCbhaS0siUցc(E/KJs ~*G034evDCAɲCPמj X#YMײ8:@ A*1Yʮ_<7PY7øH*,"$6 5k+~3%5?nBrwߥ\Qt.8B*Z JX͹&ÑaK0)2;5:(æt18Й[K{_!d'CQ<e HEl%SYRpz)ΦH!X }} +O8~Ji4Ro|s$$+fN3sGWW<sh68ڎ%Gk]!;N;ۃ6(&ffƸDr&߁O|3dzOEjKIݼ 0G4pu~D2E$~wuUv(/Y8qPFbXa{q9VqUK=mٍ>32bݩOqRkAQEHs[ Q79Ic$vr|>9_ĉ@<2K=1Ju$nm)tHH5 p錥ĴxAJfh۱M-{˶mE !2nRv<7j@(4] ^(=` endstream endobj 303 0 obj << /Type /FontDescriptor /Ascent 720 /CapHeight 663 /Descent -270 /Flags 98 /FontBBox [ -182 -285 1150 851 ] /FontName /CPBIIJ+AGaramond-Italic /ItalicAngle -18.5 /StemV 74 /XHeight 408 /CharSet (/U/B/a/r/space/V/b/C/N/s/exclam/c/W/D/T/comma/t/eight/X/e/G/hyphen/d/F/n\ ine/f/quotedblright/I/u/Y/v/period/E/h/colon/J/P/w/slash/i/bracketleft/L\ /y/x/zero/j/M/n/z/one/k/H/O/bracketright/equal/two/m/quoteright/l/g/Q/th\ ree/o/A/parenleft/R/question/p/quotedblleft/S/parenright/q) /FontFile3 304 0 R >> endobj 304 0 obj << /Filter /FlateDecode /Length 9205 /Subtype /Type1C >> stream H|TiTW ӴXVaUwOqC1  4Nw]VݴHuA$1:qф8a&c^1/s2Mx{>qvBP. $A,D8up$y:qyЙ;qnO]Fʷ+\0qF{s䒴RE֯[/ Lޗ,I3D!YْlI49iH!'LKtD&P'JI% Iə tQvCܷ~uuG0'}2 D n2wd# H<$ AdqBxH "P?4-@k'IxJpww>s3t[vuV|P'ݷjg͸58YkfY/򨚻tn]x~ycir'ys|r*8Otk1o[Oo? jzG49JZS>XJ Uj(Z \_H}/=C )#1Ye:v^>?<$?<zFI_W]/ , nTW"Τ`7>p睉s0@ Pm%@$6*? DwNn&p_\F]ŭw(p9a{"vӛVp&8Y]x"Npd#5v9Ή2Jw8 W~Iٛ.P0|"xuoIcPRVU0RV=vkM—BJ #T2V5vЫSem9(U؎?WA#tۼ^ݷjʀ`r£ěO,j ?N/Y_w7CPy\/ws緻@@7vq8PxBX FShꈖSMD$dmU,˚mV69{3$gp6|"fd(q/N;YN 4?7&IMVQp SƬTY^~q&VTJXKۦkJ62jX0۾W֣}TG+ īcҀb5bfuZm)AL jPOx ~*#TUT;ƹС=cg.}̿v9C9%˲$k+vK[-|v0P.3G`J[$3I?3Kdcg:߾;2DG%y={ S=o/]+Jh+X*_kD$S"P=$JeE1ES`+_DI6JԷlCP )nM3&P 0^߸O[V "5Ȋ]i&i>HQ9 02-Mt+h9;]]b^P&M+4Ea\iqA㚰TGMq6c$yXs`nyA=)T0P訁BprNb4ΐ 19LA3tPpk;uL&7-\U!MhJ~!^^`jE ]w08+Od(Y?78bgAal0Xgr2~~I[jkTGya.-H]Z*TJY >mq@sI6w9+y^CYdHnRH%DB%y[`oS``;YQdXzIyQ97EXXuBY2Z49jO0Amk)Ԧ-hzxZɞ Za&Z+Ҷ6 4YH EeBmɈ,^o߻L{V Scu 6 vɤ FѬ9*Uz- >,<*S!` -?mCK͵ N\gͰ,o ,;G 4)H/5 EY#[H00V\EӋZ@}XNnڇ VMC}{X)ĘiAefMnm?us(~ȦMIk6ζ$dY ?hkn D)UWE43<6B1)\xT_W.iCRMa:ȷ"V`q`yC "z#.e{("*z+#X9V%EʿGgp,p8} DxtӦOF94{7JhѮ8N?bR[KB#l? 3LeA˖:/ hMu*Pϡ`y$R~XH&w+5R {0i3 !ct~v*,%i@V1df 4QO "]ZT_L::xV?9!BLB =qv{gt7!9'"ɝf Twuu|;P/< 2 !,S@q6f֨VΉ|KhHRG`¡Eӟ:]JOLhJNJ*%ܽ;sW6wc;Qҋ3M) 9rY9TҗU#I$ɬVv)0KUU.'KUk5-8"VŔgZJ"y`Ŋ0Z[򝹫n9AzY8=?E[mk}7jwf$lU2gm|9ѢOJ ?.|G]]x/[7vQhD!_Q4mB7vo(7f\oyױVׅ_|n bB8I3Zb/+ }zvm`Т ]U6VfeMc\CƇj&qy͚ťg1YK$sDy׈ K]&eQ2_.޿bs }\yGWj]l[SȖTqGc4Y>!( EWR5_J+P靼;I@7s{btģl]d[egb(^5r џe`♜s#[pR,^g_@+6 H%fK 9h_&3 uDͼ"kƱ$)^UזftңEѷQrVMZ{rHũbAiL$%# R@>XPz>iYn;zWO!_p(@:j-h̳޶>οXx>Z446rm vߢr5W ^0h>{K^$uՕL fa^ Z\΁;/OB3SL-&}pk%eu3)qFh &c7\$Xi` Ii? '-smpsWx/g[vW~3UH$_pk|Fbf%8:|if'oz?]{jqsB*U/#EDhf ;>MWP}roe|EHR6T i{{NIi峏쮫޶\sy8x6x]Qfeݤb+WYoeZ3#Q>824ih{&}&]Z&&v\lx qٿXh螣=hxdtb vik,%L%*V-O{-xi7-x`Lsijz>>w?Iv_@>+xqA867row)hv5G:x76T6ZD}.{Kρx`tm'8i'kA]IQ_\Uz_)h֪F42zBh8wO fʢGeryBOdfBvvCo_n(-lɚ7M5Pڮ7.\P Pf/khLk *=`BVn ZKYyrxɀI[KWW.}Ꮆn,}8w t^1.VK@i.6%Dm~L?Ttm߽ʥ{z8SIے"IC5V*rOm]˧{t("ػ Ϣؘ'ŧ*>)M(-Nn`3㖻ᥡT8bCJ9Ĝx/O/b ^AYt{g@KSe.ߛoqPEn4p_eVi(36]*,%<#::]B=cV\cIG_H9:oļ8tL{"R%+R)^u^627+R. 6V5H+c^ &X>/im$aSn(DGW062?tA:8XT Ucr^\AhJ-՛Im^ x}Ay)ƉM%>k6ZPm`]]M q>lJVp]s]ǺW67pN/1u6h섎zurS"nӱ,To06MzbVP?OcEr71bFOQ3i3~ӓFbՑ`SD:FNz&S c `k)pv ,5L1bxoqYC]5.SVWbu䟃L:H(LeڣfI;$5zӊuZj+&Fk$h4X+{,D8UM Q0-CZXxw$mv赚czjҬ)V~4;M+EN<;NuzkCM0- [[E  `i] c KöaymVURbuLF>?!N;gEIU[UR=S8ȂzB]V){$N-36ٍ&&<~<'`[>eǪb1i8ؓ:|nOG3XW0hZ8vZXK>:ɚ-nSʺ\2ä)dh|t[&p"'"wx(!z@\C^e!:۽ 7FN[=sz 9g({J9*Evýh G엫gx`*>+q*kYbwbv O0fr/PzMhPjkNe{6ޔXRF΁4nZZX۽9% Q!XgH kݜ ^u||SVb&/ziReMUTW]{{#<l2+j#Ց{/|\|O2%P i* xCc(Ȑsw"MQ7]QfJFIi*:َ;g;9̳ul;[3g0&+颺waPoQ?{<ؕ'wo@v)LS6SZcXgb+2k vg_ X #\x*TU AJwiN a:,_ Xj<:'ʥ )3t!p83%\Z U3 B8681hn4mώ :ų.y6Y2J.]8OA,eCaʬVV^`7Jw{NQ`%-H_2٪7 .kKY4+Yp5Ӵb߀_J/6?Xa!o = _4Rv]Q6'^ױ P%C}BJՂR-E,JH[E[f&EPȥKy<-cI4qqd3Ihҗ|~{a#ܽ<vȌs8YS?a˒ i}Bzu7ZG(4k.H~Fq{3="t<wP{XOꑊfzQʤb "HH_yvw.Jw-bEn> endobj 306 0 obj << /Filter /FlateDecode /Length 4012 /Subtype /Type1C >> stream HtT PSWI!$RVDU7*U|PD &Em#PGX+⣊`T+2>:uVwf\2}̙s%H$|¢w M\cfƤsސm5'śMz'R'D-k\&trBe?wl%~4<ψH*ҝ`ɳf3C)3"M |gqzjg5IٙfKْkЇ|`لCys-z :޼g6D>#[[7֍F1b4Xu~(a^Lx. m_z $ "%&1DA9&dIh)8,THKJ2W9L&7%RQy]:/]L~{L) /oSEbw\j^+ >V P#os(C*Q-u<` eד4u[ ̻ƢG ]W{j/IYSƐپ,`:@S"P R[m!D/؛0v HŸH3{pQrŒE:G\yxD9qW=v\cPJ Z S/B4"tʬf]6 ~ꣾ1@ (CơM=eKn+Ъ.| ~7f;fiaz"6n.Үg=rdepZe(hqG^FR-?}S'H?Ɏ{Pƥk#f&44)Me r?}qYMƼ9HWA XW}@>*n-=4%H7FilJ=箝4'%1.p%S1{iP10$ڧ甦]рrMCKfqcz7$Qda #Xsc+^ىܫtD1`aCYZ4}on9U:SOqOH00qơ]P !uP_˱qo%4*C RH^&P(c#Q2m$lec w#\uպ(VwV22w)) 8@Cܾ EkC^@O0)ESWpQau4J6I<0͸L\7+3{hwzCIcӀS҆gBuǪՊb (NX.F{$d/ ̒ dx{ZhvI4kLi݉9XkiY [6t %mHo4WL@qeZu") ݌g~giiI3 Ui-e3}}eDlM$ ڡdap S7?F3kԙd)R$9V$VvZ3~kZe_@g<K~j_mf5rO~)4r'E'Qm6-|SO[my^n#VRXxDKSQSEBv]}D3gל#(<M]/}۱m1qZ`G1ͲS,:m UOV>HѰ#CG#xlKOO$Mb}4.h:%Du*O5wGqCy*8bzB`֫g7dx/X:Lv *jC1k_|xSΕ{s'[҈ vĿ}:B\o^Ր]Dwcv0 Gs]׉+fU`/6|9[Ӟw`~#zf.=I|Ttcq3Y6_J6 Le7:J{3GoW 6o1戀raΗPzSU/-vit3}lWlOQxcDG¨פLL.TWa0n>]S;lDKʓD\~ 8)̏p ^7{TPTGrJ=nOfż보"%],PrAc=,Uڮ ˊ}53ϯ!›/C#^)5!wC9I|=n0[S{ endstream endobj 307 0 obj << /Type /FontDescriptor /Ascent 682 /CapHeight 682 /Descent -230 /Flags 262240 /FontBBox [ -190 -250 1074 915 ] /FontName /CPBJKI+GillSans-BoldItalic /ItalicAngle -8 /StemV 140 /XHeight 454 /CharSet (/k/O/B/two/m/l/C/P/N/o/w/c/D/T/x/S/e/G/z/d/F/f/I/a/period/r/space/h/J/g/\ s/i/L/t/M/n/u) /FontFile3 308 0 R >> endobj 308 0 obj << /Filter /FlateDecode /Length 2635 /Subtype /Type1C >> stream HlU Te~@ɨ."=_(QD" | C@Q(WE 6ڣ6= gwΰaYV2#,t%ʘ1bb 4ZRqrFXC%{NkT#q˯8Cg}yܫaXvˡ-\[ʢLih0iԸq#}ud&܌Lsjd[mLW XH%(C4gmtS!() (̋Rhl2mF9h["YJfi5͚nbM",Iewa0Zy_x7ˌpbYf L%L'&Jİ<B+81ΌcanlPx!U_Llϝ: n#kiʹ*.}]4:Fns O50߃΍7flE A}g@0w?y=/3,CONMI24}2_Y3c@$z0y>&y7'/ZOT68D Qn\nth2}\˼Q"BѠa/17=rlKqa.5޾GbpQÂ3& 6O-" Q04}/ L,Q.=B_ MTh PG)F'R;4@))sAPF5H:(:M9Yq2{~Ps}Z, Aql \P#aKֲ6c`Y#0mujtp[: ٯБ$j>~3uոT[ܿ].K5Wy^?^NNXzC/ TA)Ӹ:Ӹ[FzWi@֍rʑvN9D=!{9x[U%yU"||)@z4Z{Ev`?,5/_풽beF~qb{A[_0)cQJ ` :{AQAx$E`ߧ~/oؿ.V`h.nyL)`]3lIﺇ SUBR//FTE]SmJ,*ͩ3~R8'm1z8ͽs_e/Բ9߀2E@:cpFv+dLZKIkJI_ % [p@l㐯wxg{%5[ KV=4rgNU<&؋O+[T#ho8R!ؽ0P\{Z:*Dg-T/5& lkrhDm供j=}Im)N%x{^b}2PgʤlFI e&Eaܼw䜑cJ!F== {t VJےi=Ft[ JdX>D[C/={87N>.w88:(^"t.-wšoa`~dX`*P gewte"hXCM*tSyIm;;|,l2MEgnwna\M^KV3? 핗L&+ok`laQxٺ褝Qu|x8/VJ*hmx#7KW)#bk(axYeq:^۬`c -̚-?<#m.0D4OTֱ%V.X"}6'fB;j#ߨޠ&̶YMVG)@?0N`@uG8BAb3V3.4<%0D"-Qj p&  g[`:ߣҪzmszd3Ow endstream endobj 309 0 obj << /Type /FontDescriptor /Ascent 720 /CapHeight 663 /Descent -270 /Flags 262178 /FontBBox [ -177 -269 1123 866 ] /FontName /CPBKEA+AGaramond-Semibold /ItalicAngle 0 /StemV 105 /XHeight 397 /CharSet (/q/U/B/a/r/space/V/b/C/K/N/seven/W/c/s/D/T/comma/t/exclam/X/e/eight/G/hy\ phen/u/d/Y/F/f/I/E/period/colon/h/v/J/Z/P/w/slash/i/L/y/x/zero/M/n/z/one\ /k/H/O/two/m/quoteright/l/g/Q/three/o/A/R/question/four/p/S/five) /FontFile3 310 0 R >> endobj 310 0 obj << /Filter /FlateDecode /Length 8787 /Subtype /Type1C >> stream H|TkPSg>iMNHU*[uQA+U@$.r I p3vmvtNCخc?|00md-"H*+^"f_e?!ZABƂi=I`:~S?_Ov(#͛pkdL^=S$\z`pkٲ,0LY$*)2H+ _W J$9aR()DbHqH(/7u  HAF8J h;ƠoP8΃ F`n0|=$ƆPSXBgnc|kgmpլYϾ0'cn^ŏI?D|}!&hюE33QAѧNpU`|p Tqِ=\#6t$=T{UޔQ*TQ%||کq.lS wq ZZ^R\G3~^/ÍکC~yO=8:`@DS{"eAIja?S*kuqk 'p ] 8kK]uGiil& `/ Ox@". 8km%S[KρSY!fq|]3n0Ωy\&60+2X{|V$%?gVeViϞՃ'硱Ka2Pvp}7 U\]7+1=ϯ(?˜CN .7huR?F!GFM(ܦ˭N=yh~LW݀$E@cntX~㐧u߸=0vݞ$8UݨoЉS<0^- NӉZ'0fn}XWLJYZh2qf6K6)]W ZΠ08it=|Ѫ#hcCD)7IjqtKmsÆ >V]TIJ.'ˏkZ)>pӖ FͩךW]DWRҤR_$^ч>;Lݖq~rshԋ5LqNwRSJ%R"w cW~q)Si<`}m2~'M^@~0nnqIO~pYRW+%R!yXgoK6Ym.T{;nk/t 꿀=] f.»~^}ҍ=@R\ B3P(o4:]@9z~?9B OxM(ܪqTZxLǫWVQAo9\:,dh^IZ2F]`yZ5YУTy9쿌]W2ceAes7LBqC:FQ Q$7!ѩ:q >'yOxh sꨵZ@HCt6T[ \Fs2+L”s:H5Poe.nj"(eb#F><;!2Wq/"6߻ۣh=4u@47V{t 4G=C]26'K-TnSxIOYd#k\ |?웸#ϾXbwbZm$. ɡ3AC>jA͍qsnQIJkXpͅkhhb)=ɚ|J,h匱ƀ+`tqjYĮb𒲙֘x[^ Չ̿aA%Vq¶CwcfӒ]@.6ݺ@aA/ޖmXgv?^S]{ V%Lf<H : ,v#:hgoߧtv㻽;Ǩzu HɪMp}kLjEo;=Wx4^E-C陷ܥHUD{HOXA[ e5_ /O+}߁_V<$K4<c80^B k%JfƉ&jW.Ci6,>wf`f]`51%\_V8h&~?-+54ҧ}=xx(FGH{E=8 P,De9GpѲ6>迃ΧBx\p XSIBn+} ϴCxw~6NSǭG+D(ejδT"" j'Ϧk+r~-B mBC]~ $EG/ D?IAl~4TJrO9|v@h8"Q *\-4-ڪmÄ!Fx\kXXtXo(J0]Rfn2|A!VC / =QG2#{y=:{+;$U:*٪ܹŠv"gل)]Wb5 u7UDob"dDRk&vgQ!WJ30@" .)hNP` zW)х7խ|?S?| 8{(.Q{izqj)xg:Kk&Cz =# :c9<\TоE64טumU[=nzHCXSLc?b :.OkXW`LK_n2UWUdqIDgdH˒ }C[[]-Vj-uemb]^LE!ͽCD qK=aF,?xWK -i5kȇ==^ҁg\&#xKʧ@HMY SI>1")lQ{^svr"6F套ҹBK;8%Y fj/`ן@ڛRc' |*a''7hKWnȮn}}HF8H b +U˵1ͿGO]6bu- o]vѽE^%=OmWS-T7D8t@Fo7-Kw0b[jj+_=:H;0"{:ܬ%HlX|藘#-5Kz+x0ր&WO=XZpkmA2ڬW@VDJ.XTp8~ApA$ց+-E[]] t'.;_]$Sў =rA*8 +(/RZ3X:сH-)d7: }#Mp*iK$AaMےiZkq-?}-0y`{I~=~bP.PKؚ>aZ0x&@DHP.^ a}?J;D_3YWQ;k FU7f'()Wc*MܤVrfA^Ill67vp)o-x6qf!إ:|ݝ*mh՘6h56ƫ < $@؁<ۉ}y7$ 5ubqTuVT+5W\wnGkPtd' ] AEn}RHE̻Ct?|4ADOkڿE̲@`o6V.F5bEoRpGl O@ )-)[U5UQcÓh<X&}9ʺkw=>z#$:' dvyp|Zv*? R$lϵ)Bf(4KgpUc*T;qq<%-6\/n܎DI&*gK5c1$+hM#ˎ$"a)`",nxt5`Cj+Gh,L[bo$<^MT`\\¨%c\OkA' B]]M6pzaUj :A8&cׇ/ } ۊ nn''>= zgꂫ"k0 z} Hc#8{>Ϊ3vۡ t֋x3uF2?4,ɣَQD02AK'ۑQ!!SmaHv'Q$N k6K=bdέ7UC;*k vlzh םtnl$bmVNO6i16zp4DLIzYTGKiH"k%yTHo9\l:O&* rj7VA{d,CY\%7U렠 ]='HPDpII xjN[J1e 4 pDpvtqO3m;ڊd?^uϺ3KyS4jSN)-J{)'r0)? ܁#?B| #ۿ3 Z̢̥xĤ}gxd+`Ԡ:: %7>3T xaR3)YgI}JMʒb$orVc>Ϲie/:*n۞tGnFp3ﹼhT#E6EkiXaDXI!i揺h?UZ{ AF$Rjh0u$AuXi¤K7Xh:<ޙf"|OkBR8= iZ"q,$HqhDDZ.7L7 "{X^w `VRpgfH =pcu";_Z"ARSf|ХD9݄Ap7CQrf$*Xmse":! _<`<Ը/gϭ[P@S0*WXgg *-m`zP։YHr ibW K] ow*jr3>vq n>FQ{<đAHڭ|pNeo1"`5$jJxl8e[e !x̤1| +{.ȰF^,۰eʷ!Ghj#zƯIpgMvdIX*c,.so]cls\޶6úujbxU1DUj Bi(@" HA|WFumueVe99?#ss{;|w 3eT^ !=;=<~,r~jEY|TJWߝqµA}fJC TsQou> W ,-A n2aKwD;76{i+}HdJn_~{]v샃-NaoO+qJ ܇O(OFX*,￸ hN'a60{X$42K*bDAd_.؅wY]7ϱnL!c<[?H_⊤n]nߦͺ}U;O } 7X/vx;4MIIi6 !q|6dYXv89ΣdC6(i.?iZr1\?t>Wŷ}eH"^I̋3 2j1k'*;7Hd0<OkkrI^ۂ0QhSJ v(qCvҿ)a:L O3ɣ˟nˍu] j[D;yqk-ś-,"ٝS9lc?*ayk+<|ӲJDɵ8͵.rNA̹(oqTb \L|jÎhfNpYLiVcƇ9A7~{EKŌպ`<@MlM>.uכ6/1_a)u#˔'O Yz^ʘuQD}4^W6X,SzqKZ͹S]nADû!WiQuL7_}|OWlJ13.!y^HavɁ N!MQR6̲A~yjٕXQ(٢/AugHKWp+dU}lUbG4$$$p)\Y>gQ{0=Q֖o+S&B ,eZ-gD~3A/q.CM.4c2 u8ֺonԡVi-ص dJw2X%J _T-xDy,̄bDÙW$T f u|?ZR v\EJx8(nHD?ߓA˪9'6ALG|JXȨ tzHY8 V =}p>騿*y#> endobj 314 0 obj << /Filter /FlateDecode /Length 510 /Subtype /Type1C >> stream Hbd`ab`ddwpwv N+,ILIYd!C, fr##g||{}ǜ7s~]`4ҖlVߋؾOy뼛A䯸fZ[JڊO;߳0nlXM7ۚ塞ئ9l+g~_wgAOrM?Z5Gk,6P?ھ?ƺO^S[D#LW;ݔm3O?ǺOm)%u<> endobj 316 0 obj << /Filter /FlateDecode /Length 5024 /Subtype /Type1C >> stream H|UyPga8@( " @㕸" GP G@NQʡ*cݤ@BM ݚ-D|J{_{5I8h$GΜ4-j[˳Ӓ}'ef$ %aEB58(FҸ_֗օnqa(I$阵b-KdfVavZJjiThӘA> 1ov)")sq)0'7yi)zYbfvVfvBnrh2Edd9Ԇhk/ q{=|= <<^xy rkWßqw6Tx` w4:SHHe^ç-TC fp؞b`>ǡNK2Z+HBIP ']qpSÕ 柼U=ꐐ=GSS{.4=`cEIٚ9nǚ0crkj}Kޡ~^|) RJA?^`53??|q,&tϬD(L*yHA "4u8\9bY8/c=UU'aϔbUx>j痃F Szt?:zN]H^ {JkGn|a%?Ah!N" :(evYU C,?9-vIBճ:d.||$rK%vHC (e48KwàK|PߑF>1X*P):C},zZG,!Z}%L&$HRtXЂ~#gh1>}O~-_:X>w[1UJ0]^H1}A'{Gq6}mimAД $x*>Zp`񥋌Ek{K&LO2?s1ƴP%p' ?굫Jtr[r08E+*t0l !ٴ];8Q"(IkqoE@1Oq ԒxF;4&wJ x٦ DทW@! R̈́pڟh.~R_cmwOYXxЌ̜IEK_[);hִ|w䤫,wNpkw=׉>ᷮkqis}jݷ(zskf7 s̵!ٌS/3[Y1կ)``"(Ģֲ&̬+rWY Д]W{dOu1}C^-0ˆYHX~oӝ5Us ZeX.eJPD)NgqC:ih3E(VV25"han´f2ܒ(_=||+EԽS5MMY'>oȢ;!NZm/LE'O%8]s>gʤ1`M"{Q F~rAd!/-y"CoرA:p[F{AX>2 "=?A RmAj\BI 2˽P./<؊..\2\/l:_@YM U`22Xe*nK }M,)-ToFuۗ9g#j&h`bOdo?& I 8hTߩ3ܐ6W  n,eY!]w'qu1?/_Er6d 5ϨYaXApnȴC*F ?qdMѽ$w0Dv*h\z kǯ/{fu8k2Y7C+*,*n| ?,_eדڙhrD?s||svliR˯BM7fԜ5W%F'$A8uhS,N7N x2D+5ޭJ0ǩ#ce†YPȬ̦C&_}nKo3= UƺIB8 =׍= ,] i%4\SE`4`~jGONW$ddBV-WXN,&0F"u!H"J:DRq MG7ab2'&Rszł[R/S n1QR#S;Bagt Lh1j/qu`|ͭ켫"O~!'Se:xkCW K:sI蹎rDLR:a\Oot 4H8*?f9 .X*/kLT;/qGup"0\S(pUPolgm wk- blϞ y:XK)5{0U޼*Z g"Q<[>w@-Rcj I3>&MNF\V5mzR韇_3a"Oяj [ϗE kRϤݸO3Cg*S}߳v yZiʿ{Ihl֯l )/PPj:s5!m?'Lھ+G%Min4ئm7؊ڄ8xEBd_pjD9\o{=x9TGs44fܪϾ^!k|)n[$?i?)g=FWϧ,ӥ]=w8Lr^d S/̖(>|U<2KXmoV 3F I u2 g$m;`mgP#j35 F8U!:D|W- M`޸Uգj&t4Wi?F bcO+ I 򗸸=2U%J`u*o as 2{cY-NRLWf4v3by`8;r{SzfxuWӢ_<LH >xxbGAc3e:׫R v:78""ġ{ @TC|;板[(O`C -)'fNhۻkyYց,W[pM_$VGl(t-j!k]g#5.0Ӧ3[΂,4~5VhOۿ뇉n^WOң9DAxy[6gA"7x`ֺc%t&La !L} m2o+0w|/u'c+MmʿQs9"L;knS02U,9X8(dhU9VG1LLKXBчMdcf`y-hZJ|&ù,m@[ۛa}s_jtKN' >VeHfIh(S0$a1)&+y/՗dd髫x a&4PeY( chb[@d͍Kԇ6G~+.k5`V ubj/zmb5/eKJZ )6з]\$6 ͝{uW+`CQi[ ='X*Nks8>4jWpFI'/S0P"Z endstream endobj 317 0 obj << /Type /FontDescriptor /Ascent 0 /CapHeight 0 /Descent 0 /Flags 4 /FontBBox [ -1 -143 981 820 ] /FontName /CPDAOL+ZapfDingbats /ItalicAngle 0 /StemV 90 /CharSet (/a166) /FontFile3 318 0 R >> endobj 318 0 obj << /Filter /FlateDecode /Length 345 /Subtype /Type1C >> stream Hbd`ab`ddqpqюJ,HsKOJ,)a!Cq> endobj 320 0 obj << /Filter /FlateDecode /Length 227 >> stream HTPn SuD,&Qvᰐb@}2wi8fՈu:bkTAA[ZdZ-e\g<=L9+9[7O2g#j45+.204BOo2>4ۗ{)HQg(ӏb2[6` d˫ o#5ƒݢ5C}Oa;q+ endstream endobj 321 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 83 /Height 105 /ColorSpace 489 0 R /BitsPerComponent 8 /Length 322 0 R >> stream 8;Z]b5n8Pj%#*Zss+9'I'MYYH-HK#\-,uAQ/PIn[UC\5><)r59BRd'_jDAuZl-u&@ cW0O,SaSQcOH>R5P2d;?aZZ9P0/c"_i$OLLqdRl\ AHMZoO$Y(e5OG!uM3R1bG#_0YmG94Y?-7fFElE5/#mgnE#mgnE#mgnU-GsQ=s%DK' <(H4=4mP_6~> endstream endobj 322 0 obj 237 endobj 323 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 83 /Height 105 /ColorSpace 489 0 R /BitsPerComponent 8 /Length 324 0 R >> stream 8;Z]b9+HUt&;9#Rrrmc8;4J1kQmeX6D4JXR.o>faG&Y85&Sb6WYG]c9DmSc.1VR+@ m#jlYI$Mf.5%qsIZ-munjdaG00p%KYOH>QcOH>QcO?'*l8NfY2l^(>sX4jMpdJH8] H_66HO)*aZ8j1nO8^]YdV+V$g9n*[!,U=W\,U=W\,ihIZb;k^bQcq'=/N$@;?ZjBE !cgm(R*8Sk?=L&4l0JKPXB5E@~> endstream endobj 324 0 obj 225 endobj 325 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 83 /Height 105 /ColorSpace 489 0 R /BitsPerComponent 8 /Length 326 0 R >> stream 8;Z]b5n\em&4Fp[rrm'$;.;(S+f..c(b.99]gAP:Xg2@i1Y!pUlWpQcQ`K/F0g;-) =='$8rg(Y4]MOYHZ0@cl3.#Z`$m[)D,U=W\,U=W\A.GS4;P,5Dj&_U!7l@KHpO"4/ \PI[tHUE'I9>:l5Sni08!3,OA^:E?H&"WB@YN7gcP0*=g+<_mO+X&!P+X-$3_qC1P QcuX0IF8*6=]^T&ZTp,\ga9]dr@+F#5FpO/AOc2/~> endstream endobj 326 0 obj 240 endobj 327 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 83 /Height 105 /ColorSpace 489 0 R /BitsPerComponent 8 /Length 328 0 R >> stream 8;Z]b9+HS.%#!TMrrp*t.'4[p8d1=t`<^/W=n.<^$iq-sbY3H_m![Eqkj.Rp)B9iZ rQJ/0g3h*',T^X=3jIp0d;nsA[MVP+84Z9B84Z9B8B;]IQ)(Q.g\*-lqGo1_);T5, n,!g,P]mP)HG9]uT%%u;<[gcL?4DpM "_u0?B/83s*g.H5ds2B&)V"\3~> endstream endobj 328 0 obj 225 endobj 329 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 83 /Height 105 /ColorSpace 489 0 R /BitsPerComponent 8 /Length 330 0 R >> stream 8;Z,'=`,cF#ittl\J_$R:+"dTMc]Dr*=YW4hF(BR7BqRY!_A6A5(=$Y5^fXO2#^j1 S%`GUAFOrVfaNNr=9h!;e$*=X5lR!KK<.1>p@=t-Ei&Gc)[Z_+N_!\ Q_ZM;@8S)K7s;8kM;!LC3Y@QGkRrrE1PSk:UsJ9NnsjB`l9]8X*$ceoQ3.2j#*Cni LS5&h\57t!+aWnT4:fAt]%h*.uY3'sI D@Ws)iY.F@i#&Z(/E,-PTK\.3Mm\="==1RD!8)He+k,!YeMO([GXn+m,bS6A8a:1E LBX:sjNbD[&N<%66@?\o[OV2CD/Qj803Rb7Z-:\;SsMk_-?f'%%p#+tL>kZn4`P!Y Q*60=[+S)o%LO.'MIq.s&S:ntUk endstream endobj 330 0 obj 814 endobj 331 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 83 /Height 105 /ColorSpace 489 0 R /BitsPerComponent 8 /Length 332 0 R >> stream 8;Z\7m;_J8$rfIZLOS#E$DA8bWh#Z.a9[k-@<7i`o/(Lp,\"0^&*uYO"E&5RqC==R CaU/MCXJKC49p^dQ4M`#+:HaeVI*gt[J_s/ak6C@%`OW?)70?Dgi%f;?#%IM.baDQ (?Yn].TkGU6P@rV'b]H0bZKaU"j!Q083>!+/tq7Z"N[%S^Fh"s.?ZJ,5`U=]QLI/aFk,aB">q9Gg=eiD44/,B f;:mW)&R$^;sZO*OSK>j7\J7*F\GP50.X!B:DFimhCiSIB[<2S>jX*X?kMhalu;Pj 2mGKYT:9V')Z%oIbtOlE.l'a N0A8d#oD'C>LW8BpgOu#bH!9csY:t@+IB-@M< C1Z(B)=mU$m<8OPj8.g~> endstream endobj 332 0 obj 813 endobj 333 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 83 /Height 105 /ColorSpace 489 0 R /BitsPerComponent 8 /Length 334 0 R >> stream 8;Yi_>IoG@#_^n2#'k>?4ia!.8-lak735Y"VnY#A>(_V:AR0Y4^LC&*p=]\eG4X@. 'g!\dX#-s[6Sg8`V,%gS-(KOWA)QS%8eXQ7l0W_5@'RJ*P\74o;W%cFV5a"I;f`?B A)k'W*j(\^N&r/oXc,+,I%U"l-C##Fhqu#bV$9cWO["1`+6+B(F?Eo93thi?ob2V^ [[m2C)oknbEfHeGX1Td]+K(/[+IA(Wood-Ge76B;WO+FDnU!MPmbB pN;a$Dupp?O2X.D'1cd[8KBn6JK%KM,/KY[:+pa#rfYSUn'E6;*R RLp%*]2(qfX(2i%O:EaiA\8GW"VQ$AD`(9.i+F%NdcA"%SoKA+?Tk1nIbhr#0#IS$ 5.I=8M#pRRfh7KL04B8f6UT6 Aams;Nsu2eK1ZAZ*X7r%fc!XJ4'NkK1>W^YA%^*5<9%!L4]JEtI:o[.8AXfDj]7\R .[i6q*P!d.gS+[PjBrO2 endstream endobj 334 0 obj 568 endobj 335 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 83 /Height 105 /ColorSpace 489 0 R /BitsPerComponent 8 /Length 336 0 R >> stream 8;Z\7;0E$b#k\*4j>q.agJr>,:b_-\jeM&e35Y`S8jlW^]:ZgPV8`jh_H)?iU$jX- *$k?T$oW_\%p!/8J&f^e?7r_=:\h3fI@aj[-)_0M&0;R8N3FTCo&EriF*U`?&nTf> MkP-lOb&W-@lp'=/gS9n818,qhNsr=L4#j$=>717LA=uhKaiu$N6CI\hJme-=U\"X ,bTg>bG8gUjI8ooLY.$[9)8ao8do:?M2\63dL)?bo-i?pOuAL7HEV3e0K"3FR3W`4 U?"YnU--OL`R#>M#dRAXrj5\qqPUR""ZPjS[iD4[6]d![6h*I"8SKrq+QYG+lI5;)a\ p_m3K4_mu(osNin<&m^`7*`l.%S7kh2fQlK6C/h`jVXCRiO#lU\l1"'s*P.HbcPBh +SM2Q<4pL8)IK4`iR6@l3hG"!9KQV,2lJFYXXKrta.=90Uk(T!0p3:S]Udo@le$1m 0&&o(8lSStCQL_')&9'`hRj0QQ12;k.=XO[LAYt5Eus^U9AWnO9oFt@8V#o1B0l1c S'I3-87PN1; endstream endobj 336 0 obj 625 endobj 337 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 83 /Height 105 /ColorSpace 489 0 R /BitsPerComponent 8 /Length 338 0 R >> stream 8;Z\78J6\!%-7F1bgiW8!i(;tKHXllU(gd#QTr?b11nS&5mYi,73OLlt[A$ 8f1Xo%"k5cY(]Jt#@)3,&YNWNJ4s+:_Y$1^Irmqc;0,eX@uKl3,!mjOcn*45)OQQ!#$`lp8RO!ZP=kGLYS[RRX6k!ob9slH %L8tt'QOpIQ)?@s;,j5RC6a(Y;_L`:EX94/CWRVuOp''$>CB%R+m!-!JH'dbnL/un LV>i-q:,[L--6V-3h(puA)tpcI.M(Ce(+4nR(+$8o0gpsTDVJYWXD@B>Los3 5]bVEBXOJ8/_7F$jskWkAJ/A.6,<;o>I'EP8\?r,aM&$./>E>D9%]AtE`9-9HnJVn ]o%4[V&a'1ZEtLlHr,I8NB]2`Vp^5mBr'7)I"i8=.1OpoRrVGFb'?U??`B[9],o*. SS*s#BkuX0/!MjmWFap3S;RGr.?0<@Wj3^UMYV&C"op endstream endobj 338 0 obj 512 endobj 339 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 83 /Height 105 /ColorSpace 489 0 R /BitsPerComponent 8 /Length 340 0 R >> stream 8;Z\7m;g,f#itqkOOr`%:Eq7qReUmS.6flUWpB(>`%X!2N:cc=PtS%\&-U#8gq:fm 802D(3B@;&?nGpc4n5\n>aMHi;n`PBKS0^saE>]^CC;MWOP7QdJT-1/0n^P%<.`G< lq(1+0%oK=c3!4DB?IAr1UDO/i660Nn_8[PNYWOpH_d)]pJMn&EY/OWmk74mHmsH/ `#6s%(^^L!r>"j]og)[2V;DZEHnHs?+cjg(,AWP"Y<4/jSe_H32:C2O?+%:Eo:bJ^ j`Y5&:(CSg5H[Q?6ocgCMWP/!S$V?5Aun?K@$8*eVi2l+/O^)")4;gOOKb'MJZRqE O:rp=o55\Oj%N:81R$lLiD.BC0Bu6;3ohS4qiE?n7+t8cgbqEkq(nPo,FbuV(=+[Q E^8XVN)@[mRX(bPgAuG(,diHj1]ib^f5J;A?o_$S\aYNXGCel;Ag'(U,FdhtbMg'o MP$J`L64\*P++`C\OUfu)kS2G+JY3?.oL[H?h0gnRk=uI(u1%41/<%NZiZhraL!oC 8#p9.#_snUA3]qkQMXr(DK,L#ZBkYCk8PKM&k%.$Q(.GrS-s?i2e^<7+%\7K$NiFT HhJa>L'6X*Fs_?rANZf)cC^,h!<=VgP$S~> endstream endobj 340 0 obj 629 endobj 341 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 83 /Height 105 /ColorSpace 489 0 R /BitsPerComponent 8 /Length 342 0 R >> stream 8;Z]bd0dc6%#*ZQrsRttO0Yq3W5Y_B7Q.jX>Y$I;)6FV.<)q(Cn+g#1>WRj8j8%`f pFLTc`iDdn@mL]B@AR``e#CH+16@TZOH>QcOH>R],TRPQaZY!78NQ-q03hh;VNL&L +c/<,CYB_2hb!^@/\>)_PZ[(Y>Xd@H/VUQYT4CtOJVDk1)3L&p4@gJnWL'C0-cc%6 T,T%$,U=W\,U=W\jIOBV<94'*Eu0]cFeG=OV=E=l+I@0kPA$6A+g*Q/c=6kBDVAV~> endstream endobj 342 0 obj 264 endobj 343 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 83 /Height 105 /ColorSpace 489 0 R /BitsPerComponent 8 /Length 344 0 R >> stream 8;Z\7>B7Y)%-.=o]c!HV:8]6Y(sA;%6b:`]G4q%8=gEU_6q!`eqPqJpolGiGW)3s7%_st$3pA7V)'nm$[L<=MrAh?YI;P_`\W@n0T$^m0< f(L%Y%P,\HZY9[DsNiS/:)]t`D3gMY=8+?rrh>sa@G:iR7Y5soq ,RT\h8u4@jcAUpHI^.5rN/*hLj)UhYo>X/*KW$rIaE+LZ#u625Orti!k/54+L_Q+H YYXIW\`J/VTj/Y06aeWh:O$V,$ID)mP;aoI<<9guSP:,) BnuVid-gu8G2p9[~> endstream endobj 344 0 obj 677 endobj 345 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 83 /Height 105 /ColorSpace 489 0 R /BitsPerComponent 8 /Length 346 0 R >> stream 8;Z,'8TM`l%+P;Aa-#hd%*")l)[OK@;H"H[T[g0h-H6l'gO45#NRaI*_LVDF?!Fu: 5t3q/B2])A?l`d(dSfJ.0Y8cA_:n2InlRt^1bU4#K@5VDNQQer\3\OKdB]BDl H7Cj?NbY"\F_?4[^8B6"]]-Wme@aa'b!r;aigTCG#'NpQKV[LOBZIA\E7if&.>HSV Gl,WN6bXdbDMVL"4>pZn\/dDSe<0=+)J'RTnmToDen:2f3,A)RJXho)L/]Hc>gu%8 (u1/!jVW(CpBh164"MjJ"7oWPq./=,+XN`Yd/rbl-\`1?d_R,##GGNZV.U1314a^V J87[O!,P"D&Dm46f2J!a8\H'9Db.#"lopXR#qTk#$BPKpL*/6VJE6"#(Ja('&2$=V lfEg"G)uAKM%edNO(t3j'#-G$+#b&arInLFFA-$QcDDt'AL'3rcQenBU)R!die$[J hbZm3lN8QoI)b,:PWG,:V_+rk9/n'->u[MK`'s+DOOD? endstream endobj 346 0 obj 726 endobj 347 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 83 /Height 105 /ColorSpace 489 0 R /BitsPerComponent 8 /Length 348 0 R >> stream 8;ZD/D0Ei?#ituOb>5:iXpRGuJL%,i?>6m\g#?Os0-_Yb88D;!Dt14&_D!Z-X1i\B k9)M*nmMn3b$]'s]#Ti@Kcs*W*:UQCb!Jq,5g&X4omDOkeepCi1U6j+DsB\@Yr/[j 4I:d!Z#gfqAEhI`PMR'+?-lP%$_e0BepAj3=dC63#2ea.6/f7q-<=:_<[%FO\$Epe DMD^pGbO9m:LVBBOiNXH!l';rm"HYb@WH;/KQG!:VQo7I3O(uBVIl@[Cc.NSQ:#s7 1+^)_b6UaMk[p?9gF%+ra]O9i]l]?CQX#im]nc.fipXuJ'h_^lQ4U!khRCf\Q>f51 E\\:3tJo:C@Es>*=Tg7&u;]6%[a; J4:1hOLeam\7\ClFRo_\:[nf`0emDoos:,Q/=8;`.c2#bRZYrBWgEdGXt0PY$ATZX Q6']ASUWqW%?TOo=VelRh1h_k[+"G8DYR(dLG^siq4nCUn24kafl)tVLa=F]$PTH'N(H2\dEHM`kDVHQ\Z@LNn2O,kDMbH_ln?XqlaE&cV+p2k2Q80HE Ec5oAr_1.cYT.gQ9`dVM$q>HY-hIE1=/IIPq0f6"a[H-4c[]']h&0+?2Ai9+1$E*l %k->Af+,oGHV`4kOZ_hBUY,lC?SLLkL"e.;L+7UI9hrI_!i.qs%7@a_ PY^PU6Sl!S'T%2^5=OFZHr&39Q=_2#/,F7Ud!mr3k.3C@1[IY+M!) endstream endobj 348 0 obj 846 endobj 349 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 83 /Height 105 /ColorSpace 489 0 R /BitsPerComponent 8 /Length 350 0 R >> stream 8;Z]"=Vemt#Y!SL#5QMA3^lIO7"Vl3OcMEBOm?N((]]):mC[d/Kl"^;@tD1.NfCC? +^nWPZRGqo@80^I+$4f^ok8+DjMiLZCnJ(<&P5L=U%1't:oXXR=1XMn2?c`nE+-ft (`DWR/'=]/L>eOPJWEd#5o+>&\l6\$MaDtO&K:[U3f8gD0Y=;e&pMJV0/GgE2\4iT NLEj"329)PAE\3iW[;3IAI\<"=_#Z9U_3ZNPilKph",WDXL6eeieh-.b?Y^jU X/qPGd&=%-/#$coe#7)tI[eCZ%HHmoM468rsOI[u@N:^,LY`7GZNVmYSAZLnO0k1X>U#U3!dPf',CP@qKJ843UbV^od (TD5(;3h)'W\K!?Nr]5H6lY7~> endstream endobj 350 0 obj 554 endobj 351 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 83 /Height 105 /ColorSpace 489 0 R /BitsPerComponent 8 /Length 352 0 R >> stream 8;Z,'gNEZB#iu#8DBJ\FSjZFPY1YZq/J%(m`Gl(n=[Y[9f"\nI`G+=i@:23u^9l() OB?/kYU'EPYRWGe3sM`;eZ*jJ:Gpr4e->_cWB3`U+n%L^g86NsQ2U?_Yg._YE5*LU @;>>:15Zm(E`tTT%5O"bpn2Tej:Nf.23q-@kb(8Bb74j!FiUBRY&Mic'ok*,+q84M h%RZ]?jFQ62.:/,%`f>_[ki[:W,O3'Sjf.tXUEYJ4@1uI]CM9Dq#ob_b6:JY9^%?b l#Q>t?6Xskg\adMoJ(,4JM97>k+)f)92E81RP "rJ)&=a3V]B;pqp^/bCM"eI+>7)i``?+@rGSXNUt[IXfA8I\4S+)JeUj[hBsolA!Hdj9H3QnF#Er_;\_CQ`FGI_AH%;/+)c'A:KG]k@PXAn?4\6SL i^+P7HgJb)$@2:[m.TB]&]V'BG9RlrUN,EPY!YhFSg7D]pU1[>m,E)_*qW+#B)p03 b/+)mO9LqE0'd)k 1t,T*[hSd]B?:1&iOGF$><%.WiKf0NU0X)OSqti_=.%Ps`Z%@KD7"fpO"@N[NX9&@ L;J!Vl^5)m,.]uP)([S*P`i7'5opl<4L&T8D-.2.`Kb)m-iaLP0u/eQ^NY"$i;V>& c^Q6jlmj-5,2+A&O!VO]DGM2k+ endstream endobj 352 0 obj 868 endobj 353 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 83 /Height 105 /ColorSpace 489 0 R /BitsPerComponent 8 /Length 354 0 R >> stream 8;Z,g>B7_+#_gt3k46T/QdR2n`=!$1)5k\8^Ua![3IiGB6j+R1nVb\E;L[>iMVN?u2Rn%s;81K6e5!AAj2<1fX 6Xl'$lW5a7QN`M_Dk-+FlT#t5%XgV1X^)e%QR>l#p%TXU/6#DdO,;X,KDO*9/D`3 [4j"k4&eBIZ**@4A3`F31d-E1`n;SgeS<&_<0-Po.k^QBV4a:]#q;muVP9.ACmJ!% 5Wj5i9H``5Ut0fi=s7=]]GX^)M[#I=[3YM.kXDP3X;a;idY%aX:=ZTg+,j<,OsAdu>=eU=(&RIVFa`ald[^g!^UT[rJ$O@h)Y5EA28r6gc0Dt A\HYh+I0s!GCrN3?eFDK7c#*2+>_3^h[N4eImAHr[FK2HKmQ\Yqk\m5[2+kKW)Z`g U[^g$^Kss5!6;$K03mlWbooa(13/.idC"VselRCNK*'NqS6Rhqc^SY`Y($g#)X$iS b'9omI\:]m'?DD-dR26#s0?E3gQq?1'hatsWjsbg@o7b0;V;=VQ/bM:fDOt0*<7p_G`M~> endstream endobj 354 0 obj 730 endobj 355 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 83 /Height 105 /ColorSpace 489 0 R /BitsPerComponent 8 /Length 356 0 R >> stream 8;Z,'d;m,I%.jN!>T`o+]*0l*ClfRJ;Hp#\9ODF\3U7fD?*;O=]_7.E`%V(WT47\q[lE_RkN7-'nUB +pK;lb0t`aO;Vm=MWOE.E$#^^7FgibQ7!ptiJCVu^f$qUD=o1!Bi7iC]I/(28]#J6 n,rn\``NTAogR-#JeV1U65j8F%L@8uZ_=1"G>9u#j4W5=;0"\9<0[5YHB=*=`\ks6 q]uPnrD\0>IT^g*AFD+k;I_MR6/a?;BN_e+mQi%A!f=4YZ34+j]h*kbLX/@:,RC=u cDt3eOK`]/LBV*tDV0PGV''&IW*HjpX!aOG(99P?r$/Y;<_YbfROj`!08'E>Z&R1? $&K&)BMu)[(OX&^3loY$gCtpBQt/RaIA3%.4Wq@G9h;oZ4H`BGq+6d_H.n@`Nb-U! .sltDF:0fYKYnQFaX+7UMQ8ZBD'Ae%=gm,DO`b39=Jga0`ul7M(;`5UFVkq/aUSW2 &jEur_V7LUG^q)Z^'m>OpSk'P#Jsa+5d/QL\h]InIiKVm#l@@n@h7c6)Vs"PBk`3F 25^&\="jm$Rmd,XjgEB@TPU_'3KTj>Yfg!CD(/(u< ]mSWKISa*/hGNkTmOr,)%Au&'^(p3)1?UE!al0cIF$@\B%l220VHYjCGc:DlK`?"Q 3%"WgZ`-*/0UCA5\Occ$MMt2'gEj'?&hId^jgrXm3@hiZ56CnrMZq$~> endstream endobj 356 0 obj 782 endobj 357 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 83 /Height 105 /ColorSpace 489 0 R /BitsPerComponent 8 /Length 358 0 R >> stream 8;Z\7>B[t.#\QjU'L4I6^M_#58K@Xs?HXMTOiZcg[5 C,"f2&E+_b-lCo1@[!rgFh3!#^C_7qbF3$nk@Fe-pV/7-4H-ml& %7\m%&&kc>]&^_KP/A9_fqXQPo2sAK\8%Od37lJ>)\m,EAl6ZE25">]D;k9,,kC1R B)H85TGV3$1?\.Qc%'Wejpa2t_NF@dKU6tKF=UZiko%q=P=!9C<3s\+rUi2`NbW)\ rg/l8X"qjDO8I4dUpKUMpLaK/K,Je+*YjRj'fHeY#^IF]+`(4Bb*%q,fr"%]);t4# Q>;TY)=j!2L90ZR+MFW$.=23'MdX@"V"2hdPH33@Eu8hVMZrN@D@r*+["HI:$V'37 jT/mDB*eSBW& n0G[c!p+j)0'@jg>##S9^ZjuY&]FZG)-,B[fd:9GPi?>/^EY(R.0bP>Mi+(s:JC'S mA[.(+Z'7I+ZgLW-qcedKaVU9Hk-5*O[,u~> endstream endobj 358 0 obj 696 endobj 359 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 83 /Height 105 /ColorSpace 489 0 R /BitsPerComponent 8 /Length 360 0 R >> stream 8;Z\7>BY]S#\7Mf"?TH^P[e]MbE<*e EL+`*&/;s,OQhNt3m;FCmEFgbPpfH[WSP\d!MVgM&^,PGB%fijgc[&ePMBI6cu6ND CV^,.j+89R&_rjXKAsT@5SFmW:2;[nApaHe;8Zk[c_MkAAkhOW,C[ftdEGk$Li!o# ]!(i!dI`ALa&D=%FHW,.*loBRe+T>VMuaLa`KE?nnFp, S+B(eRu%'ZCN(gua>dHKM6QmTE\[e;+piQ[t/5sE3a1u*1"!MV&% 40c4*C[("@D\[Rh2N;VZX::^!V(6Cr]ntC<[59!6DsECtY(EFNBcR.#hJc(cJQtAB *d_^VfcJ>K/elVh!tDa:%4dCj&jklZGVE5&ls'i QGjX8=4(dkZ@;N29NMMR*k-eG4#f.ACW-0o6c99sfc=T'KYKEpnF`([L4osH^sVSG "PiPDB^(Nrhd0Dt"mEQ2qlSOdR1/;/PM.ck7aIHE6O`S_j+$mckminH0Q[S(W='\d ?MI]<=@U7Nl$>n1"PLhL(&907NJ2&r:f7hef;/a%_anS,_813g5N:(M%btN_H$Nq@ -3\@=HLcZ.X:iU.FIF+Z\R0C)+T,+7$ij^8%_2~> endstream endobj 360 0 obj 700 endobj 361 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 83 /Height 105 /ColorSpace 489 0 R /BitsPerComponent 8 /Length 362 0 R >> stream 8;ZD/$$HCo#j)%%oK%D[as*Q.9[^S:Ftsa$o3"JZPZ!$)Hi!]KOGF-/^pp$%Ft7j" jd]nf3#juqHB@B("_sj+i3iP%g:TC>aQ.#_55(T@nI/'8rR]BP"OS2M#S'*'UpTm: !(Eh8#;6GQD!DB_!I]/YRY!"*cE44WpjoqZZ>?39p/S$:kB0aF708og)&F;6$Di'd mmp1r*U.:*%FS8AZ5Y76-PkdYf;5\'BtnR/K.tnHZNuL_5/?GWu>+$ DiOLM-"?rIEt"3Td?V`#>_oY]b2fn3o?rS:e6#$ ?Lmu@5E*`%4@brH]DZKiqaK,U5kpl9hf@'Z(mhcQ?-33\G=`#+ksRGQL'C3WBnJ,f LIEsg"B\Z]K%bRc`4M3RRO9%1<+t`!Kl=7OU)alP+TJ3AV3;hipVf48_6BRm5Ws;, \2O`T695M5PiZ65$O\CdIKffD8<=>~> endstream endobj 362 0 obj 757 endobj 363 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 83 /Height 105 /ColorSpace 489 0 R /BitsPerComponent 8 /Length 364 0 R >> stream 8;ZD.6'@`l$rh(=]Ip+do+ig2n:UW`SG"0Iopl6oKCj)7lUU0KodHCrb.bYMaF'a$R, KUgMIZZpfZAiXYcLP.\ceisYJ_2M9*!SPCh#3?Vdb#7t3J.aSn,0XRD3P.M;KEgB: [0fP1;A\b6):P&Y5CBee>03oK.?rb2K9nLT*o*.JO?C`A$^)A<2_Z:Lk*,38%H]7# gqn+Wj'2UpAmbpI*:GZ()j6#HnD/UhGbBf$s2Q4R=lOU4>q:o>fgiF5p?\!3iS4k= PI6$Pj=rB_]tW4n\Uh84%Xd"K^96KaFF/?L9/C)ZN$!V`+`u\fO=3HVIc,3a*V>(o g^pOfWC-)b"`?g5$'HND<0BRoKHli"#?\&B">T@B<=uLaFmg-g$LnL*g\;mc_r_qZ HP5)9*4ItB3jtqR3TEF.!>>40H_tc;DaK5,M`[q-$\OJ.9o[$Y[-[Lbpn?tnGIW^1 53#oAi':!`\mVN;)R.Qa>NpNkV'm=qTA?:.\o1JLQp9NZ_=B\#FGB+t6Ln>-q)=Cr 4]`$j^,^j"mJi-o\VGjBo+!X0?,5>n<6t OKU1X@;'."[9T9N_sc\*6PYd-94=6kH"e,+NMY@5I)U"UYcb^@=]uA^Q;Yo*De<-T j.DCol'R'GQ;V%0_JLj+qdnFEV_MH+BUm(@SbB#Oeb"*sHitdhIJ?=<5Ak]AAk`&[ -XN7ZU>$Ki_*A05"laeBj%%Vcfc:+m;l_8CF2sQ9'*AZ9Q>o38(("4RBq/-U9>-0l kP.j5I/jF+!"]~> endstream endobj 364 0 obj 873 endobj 365 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 83 /Height 105 /ColorSpace 489 0 R /BitsPerComponent 8 /Length 366 0 R >> stream 8;ZDoCN]e'#_gt3#5pVVBfh-D<=oEKgQ3C2ad=`JLI>'5$)H[,5G':2lHR+PE8@'X ^Cl;qG*TnPi/iZ#;f+*J"?Tjke\,)N[5*\n`S=2qF+3%!'!I:0+hZ6-b*FF&Aco /2*M7h@0?Te!f=$4-l#M2H6Mk1m(s.g<>SYZdHmm'A8*$c?Y*')j'@=3(IO2Ef3OP 7@gP9Bak3-!5&K\_c12-2"pA3O@Xe2HGigmS/edb,j@M]],V&>MrV$bi0+d2,Vh"> gd<.Bkp5^N7m"10f<7YANYjcrr7b+3;H'Q_*=8P^gE8[FZHpl8*-\M 4[YOFSVncV:I_AH;FsBW_>gD8aj;0k#01k^\m>6'k4GA6Olt2r8(tCRA?J>I(8*1m $\Rc=J6:lA+]qb0;jQSDC\o"Mgpb endstream endobj 366 0 obj 626 endobj 367 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 83 /Height 105 /ColorSpace 489 0 R /BitsPerComponent 8 /Length 368 0 R >> stream 8;Z\74*Ks5%+RrB>WL?hel3uCE>>Z)<8#?7_fk%#pt5]o`f*ha*/s:$Q`CW0@uN,R $9g%[NL/iP+cs2]kLrq]K/@V7-OW9b$!'Ejf*SP7WWl;ja$)&l8<#la]c^gf>H(>B <*lAG!m85uLk%4>ai";2kn,J<)jN7PPb!lQRbH[e&X;Eph_ABQ\n?Caqk% ;lo%fq`0c6odW.=&g@82]!CQI8S+.YRc&U8+q8>3d-kCS.._b937[CSIb$FYTS\i6 Rukqk[Dq,Ol'=YN<1rT9Inf90kSjK(f4ILkS'ICr2dnL5c-_[i>hkAs'o4d=cc!/%X0J3gQ2%Z6`^=QSO0Wh)J.\69#d%!/rVg/ ,YOROSgA;q>8!%V_%]@1`_.d&5n4D+b:%e-J0ri`OL+k^'=&R=V8S\!4V"_K,p&s6 <=$$=7<.RlR;pS#!5j02mboJ$S#Z.+.bReREbEYWS04$+Q0_:j;4rq#,'Gh+/AIHU8E]a&2V@@?CL>57B BtpV5K:;HPYnTPhae=SYM]d=h9e*c?\CaUGpESIAIeaVBY1sa8$'rcXf endstream endobj 368 0 obj 905 endobj 369 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 83 /Height 105 /ColorSpace 489 0 R /BitsPerComponent 8 /Length 370 0 R >> stream 8;Z]";3HPS%#2=O507)rVtN;;N\btR-nA:#,fBiG[*Fi[30rREs!JX6!.[XNrT6Tn 7eWYkVK.^B%BJ\96*=*G(ks<;$^KQrNq6ZB34]*Og%]IgP))[dRrX3V+j;1Pq;[u& %U3JSGB2_4@mH-_DVPMc8O#,I^tAsC7=9+h=K(j^Dr"QM-EmR.fsK[r'cO:WsaU,UbN^*+f)I,[J q/"c\-93+aL\RrHoeMLs!jlg=k@jhmR!7>0O#g-XEeLAL-?@;k>b$R"$"6*IK;C%j FpVP-HThkCeJf;fgXWK`H7=J;Z12>"ZHA)GM695u=qS7B\U^LQ?tWs/fD*AHAStU" ^VGUa`%#u!8Le#ii4]2?H0jB(p3S#J=ua&DTA<-9oT?$%%&Et91UQ) endstream endobj 370 0 obj 598 endobj 371 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 83 /Height 105 /ColorSpace 489 0 R /BitsPerComponent 8 /Length 372 0 R >> stream 8;Z\7!H&#`#k\-=j?(VWMP,Jd=mqfDUcEWL_[Is)!!%^VH[4)=KHojRIul1Zcn.(Y\oQ@HE6V-@?f8 JW&/>aP%S3.u^>ClfXT@WQ:Vbpqn-2HZRfbFq@l^QNKC0]Q]"X`"i^%\^=bh+o$cL JV7m+G5(e:[8V-_=@\]VpP!p;+62ltaecXL\:YjN_icd\<;7RV:?"&'m$3sGU=@&m $/5ijEadQgEfL;`9RFBPj&+cNJn\T^IAB86Y/P">3AY>.gBnj7fr6U*6-?Y/7VVEP^6i-a.8r1HJ.+,Zf"J8 431tNlV^t%.jR3U2:\&\f9o:n0H[DZ;gkL1h3pVnbPU1kL:8=]b;ZNPY[qi%#rhoJ M-H4L8g"r@Yc(loq^J.O\_gp^!s#4 endstream endobj 372 0 obj 695 endobj 373 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 83 /Height 105 /ColorSpace 489 0 R /BitsPerComponent 8 /Length 374 0 R >> stream 8;Z]"?*])*%#)%0Ftl1k93toHQ)b'4`$CFb'f`p2Je4NU$&0PA88?^66`i\0b+ZQ "gVprBHcV:+EJ=e;_LK&@NK&0Ff7o@,*fT-1dKV&J*<``Y,/+VRj&kP3[!,'n3e%5 W#-I:Q"k_UN?[2;V_8(/]"H;J74!a:Hn+/!Rdd;<#@h9+4[dVNOIRP\P1c8KGcDum j8TseEP,qi5#)gUE2hTjF>3-5UsaK/QpbM7T:%k44D1rul!W9fg$U[c2Pr`#)!@#T F endstream endobj 374 0 obj 585 endobj 375 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 83 /Height 105 /ColorSpace 489 0 R /BitsPerComponent 8 /Length 376 0 R >> stream 8;Z,'6'd-G%*b9tSBfY=GB#K]+'(R$i2S`WFTu%]KE)'R,RT?`&=U:: T;&gN9u\=)-MtAWqE^jGAS5L4,f)O(l2):tQ(@n=pG+a,W)FL5:\PY>V,,)O_r_dZ"WPCdMQgQ7#cKNujF^NWdSNkL@4tj\mA` @"#i6UWm9$!a5!_aSQbJ&o;2C+X0^oX!Df7mPTh?=g5Y7aGLi<&4>/%^elg+\:k>< PHo"#obsKQ]ANF$;BG=uJ37RE8;Q$p!@\Oin9D%ePaK4hNC[k 6)(FKPUH[t::>d#_ORL7mHMWeD"\co9Y[k%CI=.`:ts:OFnG`]/aLrn/^SIh1c=+TD13Srt,J`Bq[[q1tI?LW\/hf'_^R4Qsf9U;K?3L4DX,6LdC =^sHP9ZlntICMJi"(Ee(>f=[+/JG??03O,/eIZC"0bo_DqOr8u=@NZ),er5AQ3Xf3 3,\;MdndoFR?ph]dVHDUALgF-fJQDbNY$\Ef4WPKO(CN*d3lIV88[3%,MmK]pD-i5 [Al5X,0i,"jOJ)DH4,J?[GO,-#6HSE3V,S7SL)W!Or74JbBatR:&\5k)Z]M(=G$~> endstream endobj 376 0 obj 791 endobj 377 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 83 /Height 105 /ColorSpace 489 0 R /BitsPerComponent 8 /Length 378 0 R >> stream 8;Z]"?'`AN#_gt3HEn>n]9JnG@aq@S8=[dAmmESOpuN]%.j?1uMKe6]GcA4;#WgS^ =F,iH'(mlJ,tLSEHI1o'<-9LObmLq9lH:M0'IpIL@H4boKpLqo:7^)uU6,\qk1]FJ bia#Gh3;'t;RCdQ4B'7WNs;O702;45Bg"hl2B$pS$&6M3;iJ#aWW1`db![UMSN7W$ Iqa`iWKRVbJTp8U1W^4(?\&rDXHS/%_FHC7dnUBeTbVQ:,SG.BrrIO"aPG`[Pr*bC T=#.u6Y-)'d"(1f6'AR!N2hfdnSs5KYtMSf1g`FfM,TfJ#P1L/^Gnd0+JHIZV1H+l .k7+tSJiKPeX.O+'M'%,3i#;goS@FL_K=4cKn[jKU9Qh/(F22!6r,(Gj@4#t*ZTG )=s9ep4thHPtd\I.X endstream endobj 378 0 obj 512 endobj 379 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 83 /Height 105 /ColorSpace 489 0 R /BitsPerComponent 8 /Length 380 0 R >> stream 8;ZD/>B7V8#ittl]idP0:2: ngH5q1)Z+&,$Yp6r>PTQ4=s-V["A.6rXK_(f=c5))8JKr+f>b3b JuGIPZ-P0s-"sAua[U0D^%+mCI!!MGR3-YrQUN1_5,jKKsX4Z*U]JKplDU//WT1C8'E Vt7\a)I1t^)_-,+fY2-cXK1^>k#BBA*'tbtAcIfjT+qZMQ)T<>S9GFU7Vn]>*Qs_, ;!s)RVZ_Eb&^&>9(A9@Gh)W&N.kTZh*7o3K%8^roJ=.k>#PTM'SnF@/b""^sKr:%q (%&5[>;k>:BrmtXaor76$H>71o6m3ZUmsSA?;N!GU4ufhL1>K5&N``6T;Y[`'Q+%; "1?dT>`n_:kba4'Dfe9Sb@Ni0Gl;Ofb:*.1J0GE&6TjjONb$ESj&7ZCHu&EE*HSTl O4'ja"(S9G68+p%S]%X:!%FF;?a6dPgoa /`8tn%KLS$TXk~> endstream endobj 380 0 obj 675 endobj 381 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 83 /Height 105 /ColorSpace 489 0 R /BitsPerComponent 8 /Length 382 0 R >> stream 8;Z\7_3Vt]#iu#8/k:A'?Wn%<:c)p.=:T2RX5hES8eDY$7XD]HMB(p#$#lK\Z*_Y7 8/u9Q3!+\$YVn7"**4i+?c%"kuT@Z$]:=(gq[qH,W,%-89&%90*29.V.ZHT i1P%[8.>mD#(6B%/.(Mj(pXUVMTuLrZ':^9RiQ(X'I<.6[#l'hW:2p9g]K1)BZ?$+ 4RV;8aJSHL/J\`PeKS<NTb]76 U-=rt":AP-%s>+Nq@+*L6`I_u^?#g!dd/#XVjX7H%f6)C&uf X<=Xe/#>@a.PlZ0Z>`<."S.fH:K7EQNnmlI1&4=XhGINrO?ONo(7/H_jC'^DKnNa_ %#:fC"WD.LkV-P@XDOr=&fsL>7=''&VfHk*93iF3E;0ChA^g2^TJL&Hfeps)#F6W= .SQ9nf@/f_QKF]7h@8'N00O$JgL.cfgb3-tWj-=pT=\%FVg5VZ~> endstream endobj 382 0 obj 765 endobj 383 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 83 /Height 105 /ColorSpace 489 0 R /BitsPerComponent 8 /Length 384 0 R >> stream 8;Z,'!HQ+$#k\-=j?&o='gY.$?nNlef-V;:G6,Y_!#02@me9fH`blJ@b-a4;c&r;< EL+`/&/;rAaRhVr1kSgoJ#1l%>np1"*X_UT78Ca#W)BXqVl8,6p8!'\+LeY7:Ig40 Cq'j.5HeEBPT_csmrfkJ0YmQeJPa*`qO:I,Ye\rR-Zqb8ds*34<*=6n"!>'209\4& R2rk,$1eqgilhehdrU*&>.=kVO6*'30q"V),9rGJhBP]'ZWB-O7gBK$e\-,cS+3^M joM=]Z>KZP)5"-loLpLNjuteqOV'NEaedeT+-*1a,u>0L_\VAMLXrc8)X3h)VS_?@ s5M-\KG>Em!\6(M+d\RSeaXab8^hIHk:9N'ln52%O-7@u2.[Q+^Y;#%D`$r$A<&Au 4$@T]m]?6m&V3T=*jIG4L8ohIW(F,cKgO@G>kH-m[pd+9i6UpXlf5h8=tt7sUki@. .ltkf`nd-*>D-?TiMC6ISPuV%'/6oBQM endstream endobj 384 0 obj 660 endobj 385 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 83 /Height 105 /ColorSpace 489 0 R /BitsPerComponent 8 /Length 386 0 R >> stream 8;Z\7;6n(^#ituOb9tneD3]p/."nDpGg&!S'=7$,U-V0MDY;oa/iN%p9FN7XFY7s] K1%rIAD7[V_7Gcno6+r7@t]g*Y@#dL1LX(n:E3*7*94%M%K="N/r["++2Vq'n= m3#>@0_GeY==Eo2[Sgb)'r:&1B.#a77:`]?`mD;!"GHZ1LioGs(YMUk_UBWQ;Y5.6 ]kMV`L?W/]6N5%E0+47IhR,:g.="4^A3\]$A7A.6$;5lgH+t3iN2h5@(W5AS(/DB& n"+K)l9/Z;QIQfja+P2g;E1oPJ@:c@//>U!WP]-a.3'3`gF+W%+PU$1kf.soj^;rG 10WrW9S>_,##c77VP^;9$X\CX3?Wl?l3kZ0ot#n=i+&2"+fA*)r$L'&2Ia6R`@VZ(ro?_c?4f?ELK/Nq(!cYCn0XYC-aDLrf UF#&k-C/1g>_NQ +ceW]3.2h76;!KKEV:q^&%Q$*bCmJF^c\(Uc&/tT6O=*d\!G^^h.4@_Z%ZfCEJ`F% Q endstream endobj 386 0 obj 771 endobj 387 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 83 /Height 105 /ColorSpace 489 0 R /BitsPerComponent 8 /Length 388 0 R >> stream 8;Z,'gN(7U#iu#8c:^$u03So)nFelY,:ONOi,6S;(Ci8+k *2K3>GrQ4aB!6Z0Ue&Ag"hLLoD6V-M_A=n0SioVcH!E2A [>p')j-X6-6n*o6Ad,K@GZY"*#Fr;T;=Z0p?.m\qJH9O;M66.To8pj6.Dj2n'uCS_ BHq%UXjob>H1$&!A:H"Qmjp"I0B#$h+^!]C#e-];KqIeV=I+W_K!R#=o=ZOLJsR8r ;k%9Jn6=Q],[*_Wrf6J%I,bNlQZ%1QK\$=Z)+NAu/:#pmSDpTB]H;#PV 9t6lbU2\5t2+W_gBugeg-o4t/6@8*A>dj2KkK3c,W+B )$&02l:q~> endstream endobj 388 0 obj 736 endobj 389 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 83 /Height 105 /ColorSpace 489 0 R /BitsPerComponent 8 /Length 390 0 R >> stream 8;ZDolZ*(N#_dR((\FnldY[8n=&;:uD9HHFfu/8b%cCnc#Q\o*X3\8K7XV_P+_,6TV/f5j#Z=rQMi+&a;46k"+A!9e'G1 BE?8RR4IIq/.@YR.NOJ;,P+f>*i-enYK5&Y1$?MH,t7bEMoIEL0a;*\;cq Q/iQW\_JSDi>3Rl[uf#L+o?brqE2AdgOGfa@q9Iu+d*-@;I_i1<>sssUN23mdptF: lW'8(7!h-fN[#$re20-b8cUlW+&(Q)X;H7QMEZ8@>Y2(-*Afp.lXbO\8s<.^#jtC?.ISp%upkF!]E^>NH;n 3Z*'+QMhcdZsKMj/BS9>X`E*,^GD)qd- endstream endobj 390 0 obj 611 endobj 391 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 83 /Height 105 /ColorSpace 489 0 R /BitsPerComponent 8 /Length 392 0 R >> stream 8;Z,'>EZoI#itt$j>pL,&^hR#bc%!^580s!Bc\HR1DDRu[4c`J&k;0i%d_Yn%9rh*dRdMaA2p !;Vhd^s.Vqb!*(+XCRYCWJ73d>"sMj$aicQX0b0lq+cO[k_:%R"FlMD`omJiG*mBJ 8qu_m#P50s#DS]@L;"A->^KjFWhYLpE[HEH46c:j(kbS:`k.j\6CO*O(\+M)rH!`] MWL53L@U;]YOaG%3]H*=/Wniaq71#.!E./\<0ls,FL2eT:IMMQ."JerlcsB@=9^7N H(g+:MZf+E\s>p%:7D$2$?PPK1A9_OpbhL"'=T5_?94DX&#!#*O%FpNmfR!pQHI/o "H#G"5!s=D;s!eb)1dI-hW&Xi1QZDn+"Ket*R#.rQ>.B%!hDUgd`$#GWrSM]jNLC$ Ee3;`5IASB[XJpl8kCjB)PEC@a_hnW;8"/0GNa%\*k!'6gVb,$[:s>*Y:bP^UaM*! 8IJKP6`WAnHJFPg^smd;']t5G9Zk:o:H0o3/PBtR+U-!>e8oC%-8?b%:)_HWb9[;( l//X558pA0pc"$5m80KtKUA#0JQ+a`.G8e_c[p]ag2m/,%$u!dc^4DJ:O!r7RuKCs 6am6f+nm`8B^FD(Y7Bhkc4GL/BZ;ZI^:OO167.mWatd#n(GEq7jC\J%>tS9~> endstream endobj 392 0 obj 721 endobj 393 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 83 /Height 105 /ColorSpace 489 0 R /BitsPerComponent 8 /Length 394 0 R >> stream 8;Z\7=b;8K%*e`(k9nlLWB^kp#XP8W,r9DGio;U&D+Z5XXg7]t2I4l"(^7pf3k!>> %Pl"+0!54@&Zc5*rgX$rXBUr%XH+AmEB]E@7n/tkQ1.kY)WI]7@uN%qZjThd\Q9\[ *gL)ce+q<5PLt036mB:JCDdcDM%Ha`'b,AUa>.X/EEZS6a@US382P%56^X[q?%B:$ :["=IE%%??VdH=kB`:ujrA1lLDRt/j4KbF[aEe&AfdCI?*jGSUbEmikXjEdabM,1_S-%IDCno"S*IcFM.7( dUOiI:PL(KCJ4fL+Up+%W`@+t_P+1QM$HX_f&4kS"FL.@RII`o']DVK*onLM6l%9b "GA!.Qjqc+a%EuGK7PKIBeH^0#N?W&&eFgu$q\P)?=Fu!(,poQ\:u.;$lf'U4NJ.k ns#1_jaMtOQZo;:8UknmkVR:PZ<`cEiSNt,a&:^DDY0cKi=O'KaL+k6fSt-'8G`uB kiI>[3_M+)mPXD9^WA7=]q2pE(-P,r +U4D0+4mC4e]hdMmi3K#:2?X\c$sT18`/h?c8hRUIo!3504NW8kfCDECmtRY64Pn? PbgSi\=3E6qAK>n(BdG~> endstream endobj 394 0 obj 747 endobj 395 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 83 /Height 105 /ColorSpace 489 0 R /BitsPerComponent 8 /Length 396 0 R >> stream 8;Z\7>7uT3%.!jFQsYo[UC2ZWg4I;qOP(-d,u**f/c\_.E&M&l_WIWo.NGe"0oI," l;]m_@&Sg\UXJmee4Eg2&U%ZcY;7Gp2oG4(H-U"29E'Q('`:QIR37(O&sjr1)kjs. 9'%me/CfoAmULlj`bJd$K;socN:lL\[7\(1@F)_7%3(`*DGr96NTiSGa)nUZ`Dmh! Lb<%j?jb((>-D`l7Hr?T582XrpXV[`ljQ.Q5RTiL3$e?3RB:)o=I\n;PLn8Or%^)hr4d:7SD29H>?^EU? 6[V\mp0B)oN=qhI(mKYn;!-.3Y*>,#V$Zlpb*H6\s0P*hK5m?JrDZrS.'4M^gER5, /`d]?UCbpg>YKKk/I1C1*0_PDVrk&\##\*#.NB6.pei$" >,tO30u\MY^B">*=iQj~> endstream endobj 396 0 obj 483 endobj 397 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 83 /Height 105 /ColorSpace 489 0 R /BitsPerComponent 8 /Length 398 0 R >> stream 8;Z]b;%A4$&4P!UrsePB;AoqN2AS=e`h<%>%teJ7*!i!p;bGc@hCVOP4!-D@W%n9T qg(mTRJ^=pa"SZtF^V,f7)R]AGqb>AOH>QcOH>Qc1J+QN4&p`-=g;N%ZR8LSbOrfX Ni%nqS@G^hetZCS=jMMRlr)u&5PKGQVgI%$I#H1LCo$+WknTcIk6;5!#mgnE#mgnE GpdVl47`Ca\I+fP25$90W\JBL&5*qNM7:[c-)R,8k:ltEGLkg~> endstream endobj 398 0 obj 249 endobj 399 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 83 /Height 105 /ColorSpace 489 0 R /BitsPerComponent 8 /Length 400 0 R >> stream 8;ZD/bCY?h%-7Faqe$uA4'Pc-!>:Q':tO!deWpV"!Fc03#T3)LrtPm@)[:l(-HDud r$]CadMWBZ(9W?`rsaF'gb"@LHZgr+41;!N^)]Li4J\n1$M#C8T4V&?6Vo7@/Fl0= P9->Jh+',:**CKW)$nYYH%GKT.BTo79e-n`8sRP4\sL%U\=$71hiLg7QiZ'MRNprO po?Mt"=[?4DrXP\8^Z9LW7mREN.'G[`oH2QR0,dHmXWa!,VK:2PrK:S::Tu_a&VZd #1B=')$cC,[;jfa<]MPQ[MVkYQs4)2!s%eMdN)L/m2D9-#@Yo,E#W4.>@uYH@;6uQ HJZ&$&,p\$G=#l5ls-P`J4.NJUc\^+++@X`nPWbk#a)=@a5s7V\Jac9k45!7YZ\<& b9qgDPc.AaES:W)ijeYak_#8upgsS`g.ndFUiAD(_No&eR5qJ<9h-+@G?8)-dM!&k Wd]'BOe1'QpEfbL]%/huqQ+\6X&sY]fG=^NEMs!)^[V+,,EeYoPV':_I1g7RCW*=X B:SWJY@cD$C0+$4r^=id8krK`t")Z+PAC J)5jOW>nXRo0):W`>lXjDDr[No'j;iO35R~> endstream endobj 400 0 obj 651 endobj 401 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 83 /Height 105 /ColorSpace 489 0 R /BitsPerComponent 8 /Length 402 0 R >> stream 8;Z]"h&:ng#_oni)s"A!fs=#^6pek0mI<8Of'MKgcj^R!V!.7F'Mi:!'gZE4c:q@! OP&u4YT*\OYU4\m*0le7XW0#P@'n8'0IPj[\/CdLnjd":TY(6gMX?q 0788,&+G&"QBcD@VEU3@\r[q-L_Zb(iF+qbc4N`5SV4tVB@0C"nE%=/MYg$SP3Hok Uf2A"d3GJ'm5uBf+FBu-KUPT74Z*^?Kp`-0F5R>OdQm<*,c]^L>[i913;#hK\PtN3 kKZj3mI2ofL,DD[i+"X^,'@8clS=MXch[htO[sg+B9jSn/2XG284Ysn7YUb92^MlOPWT]]mJY5nX4=A$.~> endstream endobj 402 0 obj 523 endobj 403 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 83 /Height 105 /ColorSpace 489 0 R /BitsPerComponent 8 /Length 404 0 R >> stream 8;Z,'=a%\*%+P5/a!]JQD&*4W(_LRCoa411''6Q@ Nu.Il.TIC<\hlCfSp(Le`5fSiT5)Q<#a\WVqTm<`r4R3cg$s1+,n4.>e5g;T<(4VL/t0n>;T_#H>a. K]I"]$(m^s:mND3&*`:0E+2,=OpW>cU;%$AWJ2QZ_S[NS]mn)cOJmW",8?;c/Aq8r 6eZ[a#"C\.CQMTf&]i0@[,u--$@'BUl6gB\2@8Zl-Y0n@'Qr; B!T?L&^J1q]*jmN9t:um8>gEMZOg8[i=_qRG[SAtQL$(Dd1d_B?qrJk'[%#?)sP0^ /#Z9+M_)=Fmn6rAS7\U/M*\j+]P/I_H2>3%Q$>K)ROilKFo6o3^21lP?!EedG7/o$ `u.O,kI%gZ8+AU8`Y-iCo>,1eE_X%]9-6eJbLt:YAk<<1KbR\H,!7fm$^(q[a' endstream endobj 404 0 obj 760 endobj 405 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 83 /Height 105 /ColorSpace 489 0 R /BitsPerComponent 8 /Length 406 0 R >> stream 8;Z\7D0!T<#itt$jDU(,8WT?E&gbB1KYPLL6HE7'(/"nk %Zn/`U(>(B12?h,?\4Mr'*H+V]Nu_-'nYPXR6b^5D+50u]+.@/uuU]\dslu*XO:CR%pqd'Dk*t\FKfjf*lOhlYVcY(&C ,0S"2AF3kliJ)L.Kj/'O+P["G_97nE`#Y0"Cp1)`$QltYc endstream endobj 406 0 obj 565 endobj 407 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 83 /Height 105 /ColorSpace 489 0 R /BitsPerComponent 8 /Length 408 0 R >> stream 8;Z,';0'Vu#ituOo@*#I&ckiq_3iH9de5Q?,l;a$6'?<7+9TrmX1:]@@K[OglFlgA k9+i9jl(.aMI=-=oW>VOQSik*;i[&'gg?;o"eFR"j??3hR8PtcG-eiLio_/NZg8lg _o!<:4G,JEh^1B^*an4Y)M>\PWsSOJ9jB_h6#+886(gHcKn,NHLdAW=e=K]FSJtF= $2";^s#\(D/7o2,ng.WTaOEKo:+3-g(F1nZhQua9(NuW&3$VO/a /U>XiPbi9ZCXp<2V594rqaTZ<;UnMr42P?,Q_n`IHHA#tJ8u)GRr1s+>k,JV+k7\" nqai,e6*Q+K)O*"NYGFLeCK^n=&0"o$07Wu4F.3G$@flbajM4p'\SE0_9NgMlu4b> ?:H'P&>%X=(!!1+ifk(hC*I_W,j]=aG=//("fq\1nl< -.gp1[iI+,l'\T-k)/D)7"gJ`$0-&rZ"t'%Zjf#*nWa.,Jn38oAZ0IUKqF+Uc&=:q^f.HnQ(XmXZX_a]PQqp[kg%d4CkDtVZPp&,IWD?l#CiSP@`(+ 4;2eUk*X,Jir(!(LMf@N3()*1Vb:@T%H4:70$%'XZ`K^GA@F(ZE'_-:6/.76OQ_#b]/FatnQG0_%Kn$=_ Y[).NloPEWg`KqJN-k endstream endobj 408 0 obj 877 endobj 409 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 83 /Height 105 /ColorSpace 489 0 R /BitsPerComponent 8 /Length 410 0 R >> stream 8;Z,g;&4g-#Y!GH#5NBjF##=(;,EXMiM3B4h;/6R&eP^hUoWN.hGIN3!R,h1Cjq9_ '(m`66XWI&E`Dm9^`_?,oT>gd1J+*&69:tZ6HIU8kq4I1O`]!,SmrGRo43=`a\J,7 N1XFKE`\@;@GF[*hu2"R*K3XR!23)C/=4U4'Zb6G[krO`II\1%;+.#L9e1[';kT:e `K!Q!/k,jfM-_J!9p0)!U3PQY9<'6a=EV-/(:mmA^Re$)(=f5I';N> aKceme5%@22LHF.nEu$lN<\seo'i]a;+'=e;Is+A4(J2s<@/t$O`H]s`ns.DSF<0" *_G+s\]-3Dm2FEnGjjtC`-As!gqrj$+G\G42e1:R2/E*,_NHgDYcJR2RK+g_0/2Rj !*c7<,%su:LPWtJFaOAnD70VP~> endstream endobj 410 0 obj 555 endobj 411 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 83 /Height 105 /ColorSpace 489 0 R /BitsPerComponent 8 /Length 412 0 R >> stream 8;Yht>I)-h#\F$CGA$_^42"@9+9I.`FM`,ng>_'25[t?;JQhpDr=u@j?PEV(?M)K> p-E/Xj^rQ>MI>8]oJQ?ogTN%teukQal^IHNV,(,_=i0]&jPLjaXEQsVOgYuaLo")! ?Y3C]VWfZ)/qW*k$HI:+iVj->81@=j/E=TC1?U?'Bp%G;8$BNicEWU&:ID]CDY1+b >[iOZ/se%/L5\m[@cj3A5El%N^\1UK$FYbOF4ZPmiZM6IL7W`P&7:)YD7`T.MG!r'Y-fPV^kM/ +G5n+bR$3gBYnZp.YGcDc4G5l-0VnP9n4[N2)MJ?@7aAFgTT&!L,YFmLM[2DaZ;cXN@B3TQ 4mualf[o$]F6&M4o*'&So*,UGh.a1M3h/BEN']!H="YZn08dhj&a=>N9(+7ENf!T) b!ht/0$q$l_Y^aO=riKB+/JmRQA)5!Ct=c8REo#Jf*TLO4X9$*dBN1C^TnYCC<>R2 jL1kWD`0!Ynk\N9pEJA6R3]T>[.>E[r&n4-ONsRi=cQeE^5UY11B: endstream endobj 412 0 obj 720 endobj 413 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 83 /Height 105 /ColorSpace 489 0 R /BitsPerComponent 8 /Length 414 0 R >> stream 8;Yht>IMEl#\;--=237GTP/4?Lf43 S7Sud"@]O)1-K=(XQMT13e,,qP#'iZOr)f@6%UgSBe7Gs@Y(I`."-o*LL'<"'$9H< VOMIh;+9jq0gT$RjXmS3)]sH<:Hl]_$nQj$H3`]Vcs!:+gG=%g_Tmk5E0(>-8E_YK WIqn#YU^h.%`W^?aBCH@\UaT;b8=BSe9a0]SDM'KQ3Ai`+f[&Y*@+d9=o^<>V+@," -@4\saOPJmdEU1/QYRJ-Ad1Q6VlPn,Ih]$nh>==sef(>s"4;]Ga9+>E7e1(#$+HH$ kdb:cNS*n,jEs0\ZW,u][.Oj/`[;uiRd\#n>DM/%LMT,,#_T($e1XqU+5H1UVfqS^ :aC0R3%IF4Nq4',dt"ctE"T*Bf8@faE`?VuRfT=[%`2Nml@'L^hBCi#;KS1aEF,/l N(:Bg)(%1qgh"%O[HokIOJ0jimRT&;nE[Q_ct""j%L`,3B6riBeTJ-Sep.P@E6\jc`#;%$XghKB'45SNQ[Sp]drAtQ G$`$1oM"'_*fuc,!Q4`L;I,7tFpf'E#5K-bcoPM(BcjX=k[9.8Q`T\S9a*/X/Gp%O %kMf%=jS.]*kqiL+b endstream endobj 414 0 obj 704 endobj 415 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 83 /Height 105 /ColorSpace 489 0 R /BitsPerComponent 8 /Length 416 0 R >> stream 8;Yht$')nW#k\-]aEL\P)B0Yka0[;DC>0GW)=Tol!#i9EmI_0jYqLtljg40/=jB<" T&jAg#g-Ni1Ar5/[Lj%heUdoB"o&?#=Tl$0\4GW@_55'/CI,+2"&_cO4JIq$V=CSl =^Xo+.9f9^DUP]rQfNm'mZK[>[V5pDgdqirdK5^uA7J3q>0$Q!, b.OPU.)id86'kRtgc.DS=<8("Vak_:I%GIU;/T,X#?i@F]c;"Ei_>*&$_)FU[o:a^ 6/)J*.RBN7oIT&fZ0] GT/L::dI^XA(`h-Er?rrg2WI*(_S8>fhe.Y`tq=(,pYS?Ldo&?S%-MjT;]LZ^$q&; pNVp7)oKGZm]XgejKX_g4&3EeAKr484SYWE0H#qUL;cc<4E*m1m3H=BJ,j7r:ZqX# =u)2UVIj!-/jFB='\_FEe=QrZ~> endstream endobj 416 0 obj 687 endobj 417 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 83 /Height 105 /ColorSpace 489 0 R /BitsPerComponent 8 /Length 418 0 R >> stream 8;Z,'>EZoI#itt$jEHWi2$jO,'h"T<9@`CkJSd=g)FR!?7X*af.$i[G$l[_t?_1gL ,`]39C^r`U=:=prO;5)aD@kZ8M(0qLKbq&VnJdb.0f,%(NuhhC pm[.SLh0(4NNbS6(+pZYQ4[]]TC`?H!L?ZJ4u_N$?Xg(u_iS/ZeN0]4c7q(0^L,8p ;fabXS0%0EiTNXC9g6C&6S(/i.W7`DoU."$lEu1L?Xi9*?2+mSE=S:ZM+a&oZ(hBh X7Ssd=%L)DH9i$+'4=/O&R:^q32[+dYK%8i^f-T%FD\ups.tWA%q=Fu"_jO:ZJ:.- M+6?BMu6Ns*Q$"jiP#$qB+V@-dhF(82Ge&.74e%)1*0(Z$Y[@GnW#Df6$"$o,lSM: X!,^uL'P$Fe$&]*_U==c9.d)n#8gr7;r"h6b$:p=3C#b!6K>XK?nJ1\&4TgV/hWcG D1;WfACru)~> endstream endobj 418 0 obj 738 endobj 419 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 83 /Height 105 /ColorSpace 489 0 R /BitsPerComponent 8 /Length 420 0 R >> stream 8;Z]"CU/R8%#*C7#1$YCEi1Au+G$>A?JFF\VJ;s"-P$di+AglaY@!Dl*!cng5!(Z/ `=E9e94o[TZEP**r>p[,XqA2?p"\]lN@-\r`C5JC5H%)#ZmLd9lSuJ*(Pr8dW0f3a CpStb>`qdSgl)S"QQo/]YrP>nda+*"&MfRWbL!0B])C^=]B@46G%29[H[Rnl$`Orj XRld@1=M;$KJY"hcAabNl2kgaohoI$(MhqA;M"anbfO,[l?jQem]m:a*srD:knqY[ -Hs3(O<7Y&c^@#/"A@` A2,\]a17EV<@sAZ[Ok6`'6os5:cQgH#o)XgcQ=$V@`m7-ktO)`lBp((6VS/BAT%~> endstream endobj 420 0 obj 524 endobj 421 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 83 /Height 105 /ColorSpace 489 0 R /BitsPerComponent 8 /Length 422 0 R >> stream 8;ZD/gQo`"#k\.hpRQu?Y(o"%XGQB.fC:`b]m;(L[";qn&^pBAps[u8O7!(V#42&NoNIWLaYR0r/JI&X76LY+^7HN['7^*L.DX2YM`*F LCG.q>i]DB:)sU-m1'DeSr=1H18WfS?1"O([)lXG0:PpG,oO2pF]0mt>n\8',DS8? ^VOhNdkFVTi["]`hb179DZtkp$A7\DQ7eIaDB%NS&0->u]3=Q8N%rg<=qXmA^OW4D 22#9"j:C>uh5UgOCBcq>UY,/\!aGP)e_P]f[jBjhK8CB5a+5cRS\bKV6W JE6oMIfSjI-2cjXmm*b$mLDNp*FM42/Na&DB:qmtctu4hW6A?a;J8d7H(3iFlnsS]=sRdY q8R&WTlb1QR2ZOMX&:nP_EnULmf5m\Dg_~> endstream endobj 422 0 obj 761 endobj 423 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 83 /Height 105 /ColorSpace 489 0 R /BitsPerComponent 8 /Length 424 0 R >> stream 8;YPl$a.Dj#itt$j>nqICAf:cM!^@A[b[e?b[=;9RAl0np\ubqk\_/%Meb&VN"QB; G*]rF#dRiDAGT_2nd-%$69GP'A2R^(f_WcYo7HqZBoXCaQ&\$C."@ET!7HV]#X49W nsq]lP6C3bjO\ULoJb?j((bLqYQrR#-8`i[abVJ9N^YkEZ=IFh(5/JGO$Z![d5E7! 1Gk)NHPqG#_m9fph:HsTRe+O>a'7R9Pug?l>MVH.*lq(B[2N* `.Ut=OQK1'u+r04Pe--q)U2hWsFd16!j/Di:(] ]9bqkZ/0%d9C:-"2o8`,V4'WEC*-1/Ua9;qA1hS%)dN:$h#mU0e""!`&BJn^J">e9 _I_epFGGXO)N'l+r`"f%0:iW0iK endstream endobj 424 0 obj 671 endobj 425 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 83 /Height 105 /ColorSpace 489 0 R /BitsPerComponent 8 /Length 426 0 R >> stream 8;Z,g8Tr$+#Xl6'"ki`#8QuiH!=?H$As&[Tmj^R87RR@tn^HZ*/5^h_"AIY_Y>'5G 6_[n`E>]D;CIs;re+ImqMFfVQJ#3I@l.JN9,A+iKd#*ZscuaZ2bd'gI[T9:5hPRdD2Wg +NU::6a$OZB<=4\G`>g&3nl4G@6B5!pcgE!Q/pne8U`tb8Yq:@&Zq!$. G,k*?P.AoAaouqr.3D\-.T\\P7AddQ1nL;b,fiF@QH'[W%umerFE:^#"bZ/mDmBe, .REU?V_KfMi"I>BOcSelN#qS%?`jR@NG2@35]\2\S0"lONED7STFu08q endstream endobj 426 0 obj 623 endobj 427 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 83 /Height 105 /ColorSpace 489 0 R /BitsPerComponent 8 /Length 428 0 R >> stream 8;Z,'$'N4L#k\-=j?$S6Gb?%.P/LOIX!X%XVAi>G!$G^nhlaH8XSX2D&t[d]`Ch0r pfRfj6')?;6)L:.VU,Z0*\\!:Bg&a8g[BdD2p*IX$ *&XapKKCn^g$pi=Te!7/'CI_WLDcss%6gH^f^e:h8>A+_d%e9B1Za$>&9T4g1@!:E3V]B:jbDJN<9W36nn%*?Ml:ol:C'G]8'u!aalfisT #5&roQ\?YQ>a=Pm#XUq&`,-nA))B$%f[R.;csEsWHaPRn+I@?HYJs-F[P<* 3Y,Ukq*2)bc$_VhcShT++R-*l`LH]>=jA?V`G1n(Eu^F(Yl2^"hJc*".MLO0RUNJ< i;o.F1RP$1XH'3F)[3r_<57Bi;LP#&nOe'LiEcRK#),/^m0q24SIXW;B&n62/99PQ /sV\E:+>K1F\)Y6SebJAi&\]Pm<^90oDhd85RCGMAW8*^RL`Eg?S/\1a?4$76q:H, B+t=JW5WZfSj`^cON+)B=jDemd$qbW^B">a9=h8~> endstream endobj 428 0 obj 701 endobj 429 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 83 /Height 105 /ColorSpace 489 0 R /BitsPerComponent 8 /Length 430 0 R >> stream 8;Z,g>FNGP#_gt3#(=`ok">j;"V;DQ43U'U2ECaA'V,e%J3<>hr\hDdg^!qt2>\qa i[5V`.@n@aBLHV\l*c,?"ul?6PoOr.T<_VSK_UQkRMs=Q!EkM.d6B3Li0DFgCW6df 9'l#XnL6PZ7Z"5:!DY#O^]Dp)S(7]E9G/ZegJ,T.dMOV*[$J;>l\1JnV,iV_btY44*q,_p= DJ!HYIKPVOL_oXY.VR)DT3NlXW8?)8NK_YY&b=C:4i4@dcj!6(Q5B0#;5&D5n"[>i 'eP'hIB>:pflX4LS@ML9?%sI0(Y'ZpBaS=:T%N9eV\E"tM7i"lPgDrVV&lu)no"dY R?2c#Sa)H;E?i8q"s"Wq.pXS/",eFo9;SW@,o].DX-t:O3@3f5iFQi7[0]Dc\Rc#g o)(6dl#5?a;I:6<:k$u?1k-!H]2,P*>)^@A?XE7Ar4qc;P1?^^^QrY@frnb`\:`iJ A[L_Uq4r)IGc3fo8T`Qs/=0(CMt^rN\/@4tf#L"?&gPU;=)qHAG1!foZ9TlGB.;AW T4GSanZq5)b*MjFb(CshhKY8J_K]Fnlf0p6dR,LUrn+Ws[O"%OPpOZtC)Ih@CD"?` dPqh..Jo0nT)%".2ZUlR40n~> endstream endobj 430 0 obj 685 endobj 431 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 83 /Height 105 /ColorSpace 489 0 R /BitsPerComponent 8 /Length 432 0 R >> stream 8;ZD/$a'RT#itt$j>p#9-n6XIOZkEdDoE>Y62&)OdpN);]ePpS[(M>ui\pS/P?1'Hc^YARIu-Eo2.)]7 nn3eU3$?Q!Yu!hd!G'KJ7nd@J_VPf#/'8m)?L^+0>X,V1l^mW6,#"7a6BnRZ_ZuYc e9$U3&sf7S/l3l&JNgAZdE#TgQ_`ETY)OZWJ[.pF:1c2,CJm-1"P%-`!&c1;7^0VW WJbSJ3\$,H=L,<#GV=%NiN_fj"&LfA[IgQa7B:BqeN%`881]W)#.['m+?i/l.aN?q -LVN3:2YK.#I&Uir]Tcu>[,!$nn:m"0CpnKp94[ar>l,:)%E`^E[lfTP?:F3)Oe;X "cbRjBYe`<[Gt,!JimEu#(2!5c9j^_E>3i;A;-CHVjnpEj4(R]TC.`5e/3[dpedXq *k+V1i<5#p@=V^HA;m-&>_h$503";4Jm^jSaLM#6&,h%'`f0-`[ZHc*jtJghDTF-M o!i%A0\KDH[)-bt2m*VK>OfZVoooB;ZXn36`W:7UH_;;C4m[]hRG$lqLrgKn!",1] >//Y>m^l_@2nD7K9Kl5l(ZSs,*0`&Jc:$BJ73*=8Y_f`8"$=Y(XcO$H]/fD20fmu* K2s]<3bX&L1hnB;<6FIAZ/hT"59hO1ZN(i$>5X!CX9(@sd[3ueb-fCl2B^+W!7tPR%K~> endstream endobj 432 0 obj 729 endobj 433 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 83 /Height 105 /ColorSpace 489 0 R /BitsPerComponent 8 /Length 434 0 R >> stream 8;Z\7>B7V(%+P6jH8C'93h7O("Hnk.OcrJNS[=E8Qe`B0,9d1Xq=_=V%G_g(TNmCl CG5Q5EF%[<3"2p.,qAj3r,B;QOp!geb1/2HP\1>`gD0`7J:Z8S]:1V!j$]m)j4!Eb <$"uV.,h/o!(Qt#bHeqs!NIT=P_Vl!@%>If@raHeS5(od;G\cQKrN)2'%J9u:aq]7 1sS%/Bm0\+85?^'r:MipcdjX%7VRB3),'WG&ENX.d#Ef"Jk9++ BB0?ZdC1udg:+"Y5*ZN\U!Zi"oCaf!=iU@0+LBp)gfuWsI8Z4qqdmll-\_+1lQNGR 7#JXH0_TmCO=GO0MS>hY8L!tO]=SB6;A5=!GuPm!EV:^1#`-0@+4,s:-.!I]NF"8h eUs0b9h6a^9IA>)UW-a:g#gQ/i3'T<_G@-P=e.#WmY"gh:b>JK`,g0[)ss.Mag`=2 m94tSg/7s624CZERJp/Z4G;5bf$bdF6;6E3:5K]%a/7Rg*Rq$:877]'l endstream endobj 434 0 obj 672 endobj 435 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 83 /Height 105 /ColorSpace 489 0 R /BitsPerComponent 8 /Length 436 0 R >> stream 8;Z,'D0Ei?#ituOb>5:i[mgoD&/(1MbNn;#MrW$3-B!Zc1@!]Y>AV^C(]hXaRS1!R K>]mqbn1MO_0V4-pVb^L:6$C)VN!pRl-C*-]IDI?BBZ"dHV?LI2&YS9TQ$;4>+"1^ ;Q294h$"-ZB)##-=1kekY)S1:25E+3e\R=39ndJAaYI8#Sb'!4H0bob%2(Nh!_2&c FZUIcN;tn#0QeY'm2bs>Jip/Jk8TL9$-f]e$@1W?gPoCWj]Upc7?G*@BG(Z(KIp61,%_0[+R"DCVBpY_MBqVWiJg"P"Pu.VD(A\"gT7Tc,&\hS8c(XFl@oB3-Edq"&6]qLP)!.ILns5+>S(MM8PgU aYL5JP/9NO(>Lqn/H5Q3/)5W;8X9Z9JN)Ft.'Lc6je:jli1>O*FO-fS[.VoD3AhBY 91OKh22!KmLWu!C%a,O62BZ9HY'F*?RH endstream endobj 436 0 obj 803 endobj 437 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 83 /Height 105 /ColorSpace 489 0 R /BitsPerComponent 8 /Length 438 0 R >> stream 8;Yht$]Zb]#k\*4j>nr`f8ZF,,(:k5Z9->gQ;o5[RY[o`GeX.T8i>*7,Dsm'\aLsD +DIG/jp26]_)f[042Fq=F\2W59!tVUYWObj\_ESu'<0/70:_OqJjReE4QR.a6YA/H Y*nE-?kmP/j<-s>R-3Okr=C^.l%#i@5^hL=AB$_FJlAL](J<4'q?X&U#OMRajXj#c 6l_M:j&$d\[8N_jGkW![qN?*moC+lRkAW_kaEa0[9eU[W0Q\O:lr6P^l\).TY!*K?"!DM ;ESTQKL8#0FG'dNO.K\o5)O'?pdIMmR+D3L9.HWQlc'&3EJUmTiq@7Gf/\?iLZoP:KW_E9 ,g&J(XJa1%(Zj=ISkD:*gOe).nU98#4M\d50*<]>jLJ8Iio7bEe)>8]j+<4iQ5JhW kjLpfl*nS)m+b_F_R';VADCY$9`fYbK7u#&Eh)^:6J endstream endobj 438 0 obj 649 endobj 439 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 83 /Height 105 /ColorSpace 489 0 R /BitsPerComponent 8 /Length 440 0 R >> stream 8;ZD/96PqA%+G`m8e8h>gn=D?mujNMdt#8!8[`G'6JHc=%6!cj7KUV!7"c9/BUQhq C`i_2CGp@^@Rl:R.ZL,UeAHF'dU.V[MK__Q!'oEb715Ah-`Fs0YFg'P-M\S]%:gVS b"'Ca17]=\q5@b]d`[52AC.nn_c\JDeKubI2*kbV=ra=(l+!@BhcJNY-2iGaA4mNX dp(#i+SSJrf9\2A>437TS[J`<8B*@'5-dJ]b@jf@ H;_s>XK49ZA64:mZ'.(e5A_r_BH6f<#GIY.WF\2aRN+<5Y:s[,G?[e5ZW<+(iP_K# AQh3anuehMA"6:<:RN`g,'Wlb)=[T]SdeO+THMN5$F ?9_L&W;sgRG&qTKc`Ni7Os=?ugr@EQ/.gD/a@Q6L!TChf?W-@<`F5`+.=d#WmhDUn lqH.@=#RHfANSs[]PCOF$ilQ<#7^~> endstream endobj 440 0 obj 756 endobj 441 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 83 /Height 105 /ColorSpace 489 0 R /BitsPerComponent 8 /Length 442 0 R >> stream 8;Z,g9obu&&;>P)50WYr]c"qm5/OC'`KA.qbN'XL&4PRgZc]SV1BdsfK3a]Jl*S#G #U/p5=3njH!\4?09'-_LfCcdZ_T-TY"mMq1=9!k0\qOG&MU/Y#A@j/rD V5I3T2t<+=r_eHo5=n4[\%1..iTH9r107*t0CNNdP_<)uAPV4'M$N0@8Id%,A3uH" EEhEA-teT,L6j>\(nR7=]l`6Bb0n4lZQ.AAJX>VKmumM3THu$?I@AYBOjF#de'iM> [0=pS0eES0mf#'*nrTYI-n-*Fc@b2g1<-+8f8L-$T="_[9IYHK+&.nR.\)4JSC2MD B9YOA.J\gI8qE5D;ncU4P*.@-:E3:kD,7.4P)mrakB+^Z%3'49Au 9$=$k:JY5^H[(s8nei6rU`;J+.t5'J\Djb=90HG>JPnJj4%OeH'n0Md!3P-:-Vah( nQ<(J8h&AaB%+?8\ljD^B2`E,\R%bPC_t&;0/HT]VNQ"rPU)U!J,Hj]l\4K*s6j6*VPHT=r&m;'sfjS(R[E/_$X6h'Ug?Pqm7MTNjRh9LRcg^MS-P#DTq0<9Q: 9\5og7HpUP??luM3.SN+*Z-t;3W3B7[&S/l2TC5c%4-f$h+Cc.HDNH<>_1Q=Vk*X! qDbm"24TGcBVj7f<3e^=l@>*8e@\26[AO^19'Y^+.&F6[eVs%!a$>L%dc*On9&`Z2u..t'B-].]1-kA"HE6^0C0a;egnp6B/(67M#BPDos8 *u+_[!8fhc2?~> endstream endobj 442 0 obj 1070 endobj 443 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 83 /Height 105 /ColorSpace 489 0 R /BitsPerComponent 8 /Length 444 0 R >> stream 8;ZD/MfJnC#iu#8OPf;uVgo$[n^1mY1MMj=ejU-06q!+bhd3Y1BYHG+B5F`Q]Bl<2 ]ZSJ)(mNu?W:YEZif_<%QH*hZMZk,tMKjI#o;*\lhBe(tip! .++<9uhTB,Li3q)PWak1"bng:mHsd_L1PTOXeAqi- aB\JHh,]NjagOJEEPk!@n*#O$WC:feIf5(4jd6YilIpXiF!rAp^rc_H&WH9M>lcgPY#bQB *QuE3r0N7$b-!2-AGFM6mh]jPCrRb<.\Ad2S81Z$RH,/>c9>(])\*mZJXZGr5:?TD D*Wt7A;.0[eS"goa endstream endobj 444 0 obj 727 endobj 445 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 83 /Height 105 /ColorSpace 489 0 R /BitsPerComponent 8 /Length 446 0 R >> stream 8;Z]"h3,Yu#_dR((Z`#cdbR=`R"1ool#oQL3r-UQK8?DKb_2;MI\1YclGbM5Y#Shc &r5OfQ,2TRBS?&OddJng/O-sqYi_W%]0SfB3Fe'r)bI'HmF@W\U8P#?H[Jn'Gm=N&,Sm%m,\QoR1bg[ C/6.T:B$V'YuH;BC'`XBWO#e&MjOX)h3-%uPUOW1ikN;+prPr>%_%-WXq/STRM,&7@G k(%d;P&Y=GLda?@_PkVkMp(9jgNrpua@c7~> endstream endobj 446 0 obj 564 endobj 447 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 83 /Height 105 /ColorSpace 489 0 R /BitsPerComponent 8 /Length 448 0 R >> stream 8;Z\7!KP)@#iu"-j?&^a(((D)(>EYG>V9;d*#V"-6q!,WN]qCO&iFV2SDU1rX\oC\ o2ZW"K$XqW7SA5&i:r'S:HpEo.Nm&8R-s;duo"4nM,mlL'/P*:_uf)QKO(9VFV/4h-sS+ U7E2u;LD/MI-J93I4I6A:+lrt);CW?$Wd*N/e_$]^.A/:a:2TIXgj#0fn%YbdDPlU [N/Yt;)E2DHuPu0?j'$n/C:u0jM/;n*Rbc)_0rO2qo5a[Dhu:?TT(o9a6kTlT@%:/ UAfV%MioL)Qs&(SKiOqJ$oGb98C_1kb6YZ.NgPFB15\4bm5"7]$bIT(X9]rdcY^%= $VR^k-U,P7OI&,4S`Cat<5\kqr]-?S?l4M3g+^&O9"4Jb7N@Q8mTd A^S;?Bgb1UO>Yn,Ac]6)`]]"$t!T j1/GV%&a_6LClVS$"&0qU+VRM;=_;b4VH1LmYSXgc`+pY.%cDcS-&!KS*eXPE&NO: &[Gj\dqYEDPG@*,): endstream endobj 448 0 obj 775 endobj 449 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 83 /Height 105 /ColorSpace 489 0 R /BitsPerComponent 8 /Length 450 0 R >> stream 8;Z]"D/o_%#_oni"o5c#aYX_9'h,r\dd`kbh+dCt6^HON+p(h,qtUqa`/,[7Nk;a\ ,n>dt;$P4*cjK)HU^*/'-oVlhge.mjh]UfMI.)'i1'FmQb+jUmXpI?H6[-egRo*3o 2?X*!A0I`oWKqD_;_a[,#l'rr=pnlif$Y=uX;:!(YuN*3-U_aN/u*5@PJKRE lP'us52I%:?b03ia!q!](l?1@8;osr7:,%DP2TUU4Da)3+?@c-[-Q&#H3$1Mhm]<, HK+e@Ca5i10@GRp?&:0Z7Nr;QaG[^PMtA5=IS,$b2KPMpP;SCO[Ng[b.onJ/eD_:/ @l8d=Up1M4UR[g@D#UhK!s!LOQ1b~> endstream endobj 450 0 obj 558 endobj 451 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 83 /Height 105 /ColorSpace 489 0 R /BitsPerComponent 8 /Length 452 0 R >> stream 8;Z,'6'B//#iu#Xo>l-aP)+X_5b`TBG,lrGQ#sTO6psEG)>2bW.rqRAPCUc_GqZjB +!fuODN97?%+[_ArtHau,=F')RZTap#[I"(+;P@+A&92,rK+MX97$[]C_"SO]Y82i 3TTb*G>imVOqI1gNoZPD0<4e0b;eWAl^LWcGGMY[LOJj:q [CEgpk;n`f9CA*F7hsR]bnJqVJc9$0)QIl9di+C*+cQ+D[OP$SkOfX ff[Zo&C;Qj8pH7D)4FW'qO.bsA4U1[.Nk&#EV2jni^r4(#_ijGkZ@NhAfMKGH2/`PnaC9@IM]p_pga^>qb=n9S:#W/gg/N=sok_s[S/fpK .?qTaXjcV$+In(:+R?lHa\n_U.)Y;L&Y"g"CDAisKQ:o[JRONdf@k;90R@$tR)3RnO <>'g5,m+6kQ^^7K/.TXeAk<)Un>L$I(W(G?Uan*bHLETbjlhh.7%WnbMd:Ztibb!k A8/]p'/&du>c&YH_KS>$)Vd_?Ek*OuF3Q9R;91Ga;sLYqnh@0mCu\M=Q3iE^Q7B+L b@h)?g@G?n[V%,OL4FE*G9Ei5\;'@J\B,CGFWc1Vo:.''$n:A97^@(G)#!`d7q<(l '^5YX60!GH?u/=#,A/#]gk^,o('t7s7c"N:lR@CuO?lgO/H&d>p\].2%0-t]J>3~> endstream endobj 452 0 obj 923 endobj 453 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 83 /Height 105 /ColorSpace 489 0 R /BitsPerComponent 8 /Length 454 0 R >> stream 8;Yht8[a9p%-7DgIl!G%:;AX3I+ZXO.+^1+WFS&o/prln>8:q[TqR&r2gdn] I"Ug)N)u@gEQ,O=%?,[i#o[F%Sf!`!%EDP\M.4"(5t*$[Dier@A[_g:0/Aqh00pCr 5@B7]`jO8k)c^=:=39V\#"Go3B[=&UALqs8PCG:hNW`.H4#>pM2?]F,((0)ejmt>P >oRXLP2Ui7)[ff/S/QUu6&N<]g_r3SU"_,'TnK'h(hZi8DW.Ff?[Ph;ZdVeVV71D] b-tFQ3EinCYKlS??,?;4K39%'V5ial<'9,3!Fd1p/*Mr8Rp'qegK-aJ?6bHiNh+\8 =>1Sq7U40]%3O:/,d1XA\r;F&>ChQO6@R5=q>n+P`R6hc26G'NNY55R`4fuf$g6GV L[Se'Z:KnL.7c=9e)5U%+I5o.#Zd42P7JF,0Ra*(g5;rb~> endstream endobj 454 0 obj 641 endobj 455 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 83 /Height 105 /ColorSpace 489 0 R /BitsPerComponent 8 /Length 456 0 R >> stream 8;Z\7$#[[8#iu"-j?(mAk44)>+e)L^;S-q#a"oubK89feg?Is^PB\fPI[cFP6/tP+cNsY9nO":lEINIRmboh.[4OcNT jZUgK%eQ@;+"2mbACj4>O(%shE8ltV1(#u7DR.2P\Xu+k(R=+UkugMRa"g)2$2LB9 ,h4`ec)0^gQC4(godA\<1sH(&s-YDZ#%*JrR:LbYX%n/'kSE#,)-2K3oZi27K8K(c&pI,.=Zd l:Jrb&h6b$ZL`H6eM90j?=WNYZn"Vo?7)4-,"%0EHA%D-s6P@%,Ka.?UWGG1T#%M; #YFj1aJNi(l-Z*SNkUPq_oD7:(5coAb(._j\Z8?E?)i1. U#$+-]`p endstream endobj 456 0 obj 747 endobj 457 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 83 /Height 105 /ColorSpace 489 0 R /BitsPerComponent 8 /Length 458 0 R >> stream 8;Z,'$')qH%*SZ8R.%+GjTn@/)IR2%Xd5!)Yt^A_+sPB):S2"!7e=Cu0]VE0H'L?[ oWnr9K-1]U7](B^j;Md&##)[[oWW-;+:*<&R+@:MN"4^Yo#;OkQQd;2gSLh:Tk_ql HHSHc%UIOVoRpB#/f7`:-N,ac*s5WuQYUj>`:e329k"22)Oo.\mofE%1n& M0BO0:r(#j12cDP@;-<[-U*"^r5tT[/6;r%#).Vd/Z.E=MjFdQ=oMOY%8dN3'9qrO C"^k;'U1riWAJCKmLD"HrF\,[`#5tKB)-(O:gfB#'TJme"6k29$5jKdfT[<$B#o5< ld1?@3:eo^Z endstream endobj 458 0 obj 674 endobj 459 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 83 /Height 105 /ColorSpace 489 0 R /BitsPerComponent 8 /Length 460 0 R >> stream 8;ZD/gQo`"#iu#Xp!"e4BMiVIZ464p1d3gM>8CZ;m4XFbM*CQs!-"`;<n/8,gLkds Gg\eE:o-?F30/J&\*P4836q&daNuQACIF+bO:fIq3Z@CfIDZ$ aEjha+B(AJ#Z09e%TQ1o\6!p1Im5^U\?d4WVWo02C)5[De0.\14Xo0';rJAp@k:dS =WqPF]tt:WX@S'c-l+e`U/X&%FX6'LZnLanE)+DXRcBMU;Ven(PSdk64keraR6*+o \;c3Ws70gjE!8o2Qo+\pb@9-7>=YA#a.4o`C?]ou+X1!/PkZut^eo#TdU``+M$MJf 8S&bjq`Tm]4cV-:/No7Q$\7@.AjQ(bS'Hs&87PQ2/E\W4T endstream endobj 460 0 obj 720 endobj 461 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 83 /Height 105 /ColorSpace 489 0 R /BitsPerComponent 8 /Length 462 0 R >> stream 8;Z]"CU1f2#_gt3#5RR_]X8'/#72YD)<^"<[SH\l*(!tfLqk7k?2rnGMAm^(\F-fM Dt-2h?);Tj$s?[;Q$t5k'%83h%3EDh8R_rN)iOYgXW`Hk%q5AAE`-qmX-+WX)p_^8 7qGiV/h.AKG=Te%Pg[[9q-R4a6\.@1S4gidQ6T%N'B>@-*$DF<(a@5EYB1\o#@I=h .G`&kb:.;\3lW,$]>c!1VF%+*QS5^apWR](!%AXnGj1Dj, 8"Ro#Vol;Wl5C">S98d6H!4370:/^hq6uQ-,B?s$)>86A7ZI$U"d4>e6ZeSWFK75. V=@[iQ?#PMl?9`>=TEYGg*-[*XbgM##+OC=>('/&Qch8rlc:EN(i34poX9)":a827 *'gd6-8g6CS&tiQTulmnAY"]Y)"&?\G&^.;fY=B3Y9W7q/k49kjr9E/u~> endstream endobj 462 0 obj 599 endobj 463 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 83 /Height 105 /ColorSpace 489 0 R /BitsPerComponent 8 /Length 464 0 R >> stream 8;Z,';0Kl##ituOo98LI>87>G`GDi./^<%=`/HL&W6EJ=f'Zj?=j>_)7R>ergIJdb P0[:fC^EBT=:[1c4%;kq*]<^<+0kN!JlIul2:0]l)WmA/lOVN6V:NXPC^lcS_M4oU 98$\e]clEfn9r4[XZUc/6#q*""t4XhSLgdb;ECWbQFSY[Rk!Q4&:0.[1SG)B%[Abar"$gkhG$6LE%Hta9J=c*T68OJ8BEML6QYT?ko QJ#_h+<4LLR:MG][BX.i#BR_JYZ4s)&s?o_dF5sDF_SBg]Z?c8.FZ3(,_b\@#J%D7 lri1AeRt1^85!n^a!JfB`].Io^=9]g"lrD:K\SG44 _NNd*2cX94C4P'#^V8one[@!(@Aso4HDF4'\4sNMQY%7n>$e)Y&$s;@F-cX6'hdA\ aXJNDR>/om-O:4l%4gFG3?q3?7&@V&Nf\7k7$^ZfhA-S5hgj]+htSsB8X:_i57i8o j<(YG)BXF6:A&hu@JAX#)'"_:]4!\buA2:*]/GEFJIK$X&%0.M4Jr'~> endstream endobj 464 0 obj 918 endobj 465 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 83 /Height 105 /ColorSpace 489 0 R /BitsPerComponent 8 /Length 466 0 R >> stream 8;Z,&9D]/i!Tu[J3u# 07&_WT;?Qc#jT60aRlTd8epbb;ek]SX&p[h3:]9/h2ldes1KYHf]r#6gD:,iQ8P ,sd+rNYW7bO;6aP;otU2nod=+-\_1%PTa`@U!93iO:fZ98J:s I5TZpdo5HV5pX..=B6PGDFgi,k2kXVS')'mh;OQZCP3(\Z)7i43]::\m]t-+c8k=$ p*%<'=OL/56$Q;^Yls=]UQN`4XuXRCQ:pS,C,VDD:YM?[7hgt&T(ZRAnV@c.S:fuH ]&NO+\ endstream endobj 466 0 obj 580 endobj 467 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 83 /Height 105 /ColorSpace 489 0 R /BitsPerComponent 8 /Length 468 0 R >> stream 8;Z]b5n8N$$q/LRs/H=_5/'dG#W*9Qi^a:7p9K5R51J8Oit9ne:Zjk@/0)rI~> endstream endobj 468 0 obj 230 endobj 469 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 83 /Height 105 /ColorSpace 489 0 R /BitsPerComponent 8 /Length 470 0 R >> stream 8;Z]bd0[T2$q8S15E#DLSPi:acsQne%,CTROre-'a/5jlVpF4"rN]+ULb\n2*P:Bp )XfFANWV_OK:ST*gVd"k#mgnE#mgnE#mgo`-RkIZe04_L1kk9L?-2G2$N8-lQ,t0.D..P4K(^%4%rV~> endstream endobj 470 0 obj 199 endobj 471 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 83 /Height 105 /ColorSpace 489 0 R /BitsPerComponent 8 /Length 472 0 R >> stream 8;Z]b;$qt1$q8RQs0]A/ChFT$`su4?639XEqiFkr@W`_GbH-.Z.#3_Mg-]o+X&!P+X&!P+X&#$8Lfm&*O6\\6caH!qF+3J&eYfi&i,"h&tMNXBjLR^A5$aMs8?CfCBMG0ps~> endstream endobj 472 0 obj 215 endobj 473 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 83 /Height 105 /ColorSpace 489 0 R /BitsPerComponent 8 /Length 474 0 R >> stream 8;Z]bd0bCH%#*[3rm0$iluaLK.S/?.6DOQcKSFp#n7J/Xl'aLlhV+CPA.T3iO)+VF H)/E[9TJ-u&SkgOCU-[o=TJg8#mgq6B2U%UKS5#3r%"a?;K^(3S>MCMdoC"F.eGBP >]iS.aJ,L,j.WUM:6gp&OH>QcOKZbMd3[btmQFO/`6LBN3p&[jqe@f+(6D0M01*%g q3$=G.678*/5<%A~> endstream endobj 474 0 obj 215 endobj 475 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 83 /Height 105 /ColorSpace 489 0 R /BitsPerComponent 8 /Length 476 0 R >> stream 8;Z\60ll&'%-3otZ]^e_PqV2!Gt+5:2j9ZQ2seO5e2qr2\srSQ)gj"G704S8:lnJa >b"'sTgVc$h$#25!5S,\=2QF_A/@itj]n=F<`oqGQEsgV%"adQD92@QM3j.\.Q$2" .<^m91$d=H!r"Vbea'=7VaGdJA`gU>8;J4J'\U^V&1C*\jAf7k(=&*nu>AmEk>"ETk0VhX?2GXnQ7a =Z6Hnh?PYro$DlH^%[(bIl6k(7P>E]WQXRHiailY_2)=R2f=r.T,6fgfJZ9epXhFWpoSeTeZ1'oK-Di.77:0 Pd7&6kM2Y9?^GE<9R6&-It*tAI'Qa3-R@[cnkj7`QP=HOd~> endstream endobj 476 0 obj 1036 endobj 477 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 83 /Height 105 /ColorSpace 489 0 R /BitsPerComponent 8 /Length 478 0 R >> stream 8;Yi_]lNC-'ZW(+7>2\*!`'_$'.>Cj\Sj`<=NcYc$9PGQ"t7,gJDB5q/e)R.Brnd_ FXJuUq`=PFZR^Ur$7&t?F77dblbhr4msH];@uL`fc!A_&Za7eCNLR"n?M7[g?te14[sC*bN81SV]4L"/n/ )FHCP8KP3heI/IKN!=iCN+L.r\5Pn3JfUq4=7e`NRT,t.kT#J;-[F#;Xc)9kW>>)dY.YPTHX'pOpYg\E\](!%RqC+^(]O% 1WcrJGFYF(NDs3s'p Ph,5lGIlUON'7\+WF\`E2std9P!o^uIB2tId=5pV\CM(\4#K'ZIQ]+s\@nZ4`09[B ^Muq+DJIt5N"+2W<#jf/`HY!H\c92F.R3]nEi[4NA0d'lY[[iAFX5+H'NNi&^XH'H GBGuOW5XpSQjPPfFYJQFTbrZ&$llmXX+I-]T4LY6C8%:\*K;eN,Ff'fa7XO6m\!%- =<9#k[@OqN^o3W`'M$(28.;D(>[A($;3m@S>BEhSebP#O$nnf$C@*-]"@Ab0"V R<-JrJiS\8`Y+N?[ZY%RE&<7]aX@1"@OX%O[b(6nDmTkgCQ9b;/Hk/>WedHQ>YdZ< Ig]i-3FA^6.#HD.+qi)HfWI_uACC:mY#jfK4RMmjDj0@u7rja^+?ucaECu2"(@\p@ 9dcpb=m+#3KXCaO[D^Cp:D/mMQCq4+";=X7E[4+UUOE`KT[_MSe#M=6$J/)d:%EVA E.3`8kR*2UYFsBkc8.ctlPl?!_CGp]jY@=cKK,;e<@-T='X*Ona%qOXrQ*[.=I)*g 'mh7g_$VJ5E-`rl2WolB%g.niFR8EbBQG3g9Va4o)nJ:qfCAfU#0'e;Br\q8p7@=C+d0u:;B^peQ^='+(S\RWT<2an]B?oZWDosT A:gcp1VQs`\Xpc:N+XHuCTF.>69A/4kmWN=?9bRDQEd7X`R8+[>a(Ch]JE@u?SJ([ :NHEm60VWoh]ZSP8JaA9<"&E -i*C"T&7dn%jg>(=&1dO=i.19s4hZ?:c3:Z+5XMZlAk6Rm'XRmJ+[,!&#m;=:$NmO 0QSK%a$3S1*V3F=R[rf:k*?r?@VqSRAgQ^\9]Pgip8+Ei0DG%L%lE^GJ7M3f[s:*@ q5L\eNY)B&ag[a2pGV'?Q9HMm>?:!1H!Oh3Q_RhO3&e=Y*IR6,hEhtSjs0<`)lEVF pk@d9aX1qDhl4:LWI(K96WlK8:MT9CmI[ endstream endobj 478 0 obj 2119 endobj 479 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 83 /Height 105 /ColorSpace 489 0 R /BitsPerComponent 8 /Length 480 0 R >> stream 8;Z\792`Y]%/"]GX0Ck83"U:b%7f>!=cpVc3[DXEr/p'4S;%nfVT#Cre'l?p$ij[_ fMC7OiBZm`JRR-j^!;KV-.Jtp7Y*oa>Q^7O_,iQjO_I^(^,EOEU6uSapC-X;]]u%i DBEfC\+P&NY8,N0Xa$9%dsZu&78c]U2Q4]se>K*B^5Kb";X356/DkJ'j+pgG:rZd( >_ePa#\2"e&NUtFg^pN$7#lc*1EkbhgjCc&A.`g?MPqM2q-:7^!k5ci1Uot'ifaIB `he[5AXqO=.d4u63>q+HH:31D,"aZ>9pn:O?1'SkI,3knD)i$f1=*<%C,">odVbB-K$DpPpobpXVWcSFJETMlNh5^-\I)hM4V5%LFB^Uf=3>`ltW9B.#YDg^! #"Y@.rUH#0&sRKQ\l-IC"cdpFP;(@JR;Q!ipB]i>Su\b(3%Nt1a?r@WAk8dC9BqcC -C!,D&!SlJ(X[XrZmFtM6/2$g.SU(4^5u(9Vt'`8@>[n4]A4*c`:9#R33A@l3sq3s YK76[S#EP!4R_Wjlm<`%cm0bU:[Gq=Vs;PgTggC_O98!gW6c>@O%_]`f99pQ3Ll>N a$1j5o'"dl4C+?Ep^*[11fmJ\p]#jNmd5n(r9809CA%^*5[%XK0Pa^>/nJHhCK9M8 3H[ endstream endobj 480 0 obj 743 endobj 481 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 83 /Height 105 /ColorSpace 489 0 R /BitsPerComponent 8 /Length 482 0 R >> stream 8;Z]b@1Io4%#3`ts+:3m;&3G;(=l;K*SL.8E@;3?/527)<)r3cDu3S=]QB["F8^:K EL/dca/_m/?pZ*hNKr?6R8-D@aZr0Z6:+"*6:+#A,,L*3XW:R*rcpEY^m,Sj9.T]@ ^RV2^ZHC^e+ld;2Ue.@5-#FrQcOH>Qc OH:&p3Xtn7a]sO78HWYe^>`D0"lti_a(2R"rfGKoT?^pHpCkm6~> endstream endobj 482 0 obj 250 endobj 483 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 83 /Height 105 /ColorSpace 489 0 R /BitsPerComponent 8 /Length 484 0 R >> stream 8;Z]b;%A4$&4P""rs%YQV6l6/dTGk*1+$&jMhti_@6d&Q\@_F5]uO'$jfL=p%GDoE [TW/lO&q_h@6kK@a%H)_9kR1daZr0Z6:+"*6:.9)[!'tp#'j!Ir^iI24=MXUAM(:> RmD4U54$.I6 endstream endobj 484 0 obj 252 endobj 485 0 obj << /Filter [ /ASCII85Decode /FlateDecode ] /Width 83 /Height 105 /ColorSpace 489 0 R /BitsPerComponent 8 /Length 486 0 R >> stream 8;Z]b>7Q9.&;B)Lrsd8S9513Y)N2h(0l?SJ#mhI>0d&+XAu9FBdJ28C]F68eV>k`, ]Lj5ZnLBa_fMKLIZ-m]fmd/&h1Q[][OH>QcOH>eSp@/;*#5>]iS.84Z9B84Z9B aLdSjfoc#%jsb,,e:Dqs endstream endobj 486 0 obj 249 endobj 487 0 obj 481 endobj 488 0 obj << /Filter [ /ASCII85Decode /LZWDecode ] /Length 487 0 R >> stream J,g]g+e/h_!_gCtO=0f)$P%cIi8Zdfc5&3j_8$7g.@L`YKUJNGBP\poR=_;Dl'P(T (7Boo^^S:71(MN]ZQX/+Cbu.lK"p74pe1T%s.DY%&\1TdJhr54.M9au6>79n6`Q:4 PbLSZTLEE(8E@'*1mg_*eTnN*;*'V3+gm-EEetX%;Bo$ur2ss*N`.-!.kG_q6GDD' dKoL!8Ka#EV,@V!\j8ZFbp6EE<9cn=N6j0nf;(&;QU6bUD')c@\ 9-d\DA=cZ0Q>gIM$$;cd2O@&a;X,Nn_aP(]I1aRc(K1^ue> gF/(+GaKo$qneLWDrQ#;5\S(\$q'4Q,85`-8;S(=Z"WSBOV*FM)4,?B],R endstream endobj 489 0 obj [ /Indexed /DeviceRGB 255 488 0 R ] endobj 490 0 obj << /Type /Pages /Kids [ 513 0 R 1 0 R 4 0 R 7 0 R 10 0 R 13 0 R 17 0 R 20 0 R 23 0 R 26 0 R ] /Count 10 /Parent 491 0 R >> endobj 491 0 obj << /Type /Pages /Kids [ 490 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 ] /Count 83 >> endobj 492 0 obj << /Type /Pages /Kids [ 29 0 R 32 0 R 35 0 R 38 0 R 41 0 R 44 0 R 47 0 R 50 0 R 53 0 R 56 0 R ] /Count 10 /Parent 491 0 R >> endobj 493 0 obj << /Type /Pages /Kids [ 59 0 R 62 0 R 66 0 R 69 0 R 73 0 R 77 0 R 80 0 R 84 0 R 88 0 R 91 0 R ] /Count 10 /Parent 491 0 R >> endobj 494 0 obj << /Type /Pages /Kids [ 94 0 R 97 0 R 100 0 R 103 0 R 106 0 R 109 0 R 112 0 R 115 0 R 118 0 R 121 0 R ] /Count 10 /Parent 491 0 R >> endobj 495 0 obj << /Type /Pages /Kids [ 124 0 R 127 0 R 130 0 R 133 0 R 136 0 R 139 0 R 142 0 R 145 0 R 148 0 R 151 0 R ] /Count 10 /Parent 491 0 R >> endobj 496 0 obj << /Type /Pages /Kids [ 154 0 R 157 0 R 160 0 R 163 0 R 166 0 R 169 0 R 172 0 R 175 0 R 178 0 R 181 0 R ] /Count 10 /Parent 491 0 R >> endobj 497 0 obj << /Type /Pages /Kids [ 185 0 R 190 0 R 193 0 R 196 0 R 199 0 R 202 0 R 205 0 R 208 0 R 211 0 R 214 0 R ] /Count 10 /Parent 491 0 R >> endobj 498 0 obj << /Type /Pages /Kids [ 217 0 R 220 0 R 223 0 R 226 0 R 229 0 R 232 0 R 235 0 R 238 0 R 242 0 R 248 0 R ] /Count 10 /Parent 491 0 R >> endobj 499 0 obj << /Type /Pages /Kids [ 252 0 R 255 0 R 258 0 R ] /Count 3 /Parent 491 0 R >> endobj 500 0 obj << /Dt (D:20000927103610) /JTM (Distiller) >> endobj 501 0 obj /This endobj 502 0 obj << /CP (Distiller) /Fi 501 0 R >> endobj 503 0 obj << /R [ 600 600 ] >> endobj 504 0 obj << /JTF 0 /MB [ 0 0 684 873 ] /R 503 0 R /W [ 0 82 ] >> endobj 505 0 obj << /Fi [ 502 0 R ] /P [ 504 0 R ] >> endobj 506 0 obj << /Dm [ 684 873 684 873 ] >> endobj 507 0 obj << /Me 506 0 R >> endobj 508 0 obj << /D [ 505 0 R ] /MS 507 0 R /Type /JobTicketContents >> endobj 509 0 obj << /A [ 500 0 R ] /Cn [ 508 0 R ] /V 1.10001 >> endobj 510 0 obj << /CreationDate (D:20000927103610) /Producer (Acrobat Distiller 4.05 for Macintosh) /Author (JanetC) /Creator (QuarkXPress\252 4.1: AdobePS 8.6 \(219\)) /Title (TPJ#19/9.26) /ModDate (D:20000927103616-04'00') >> endobj xref 0 511 0000000000 65535 f 0000028188 00000 n 0000028356 00000 n 0000028517 00000 n 0000031203 00000 n 0000031371 00000 n 0000031532 00000 n 0000034284 00000 n 0000034452 00000 n 0000034613 00000 n 0000037336 00000 n 0000037507 00000 n 0000037719 00000 n 0000047796 00000 n 0000047967 00000 n 0000048215 00000 n 0000061638 00000 n 0000063555 00000 n 0000063726 00000 n 0000063936 00000 n 0000074494 00000 n 0000074665 00000 n 0000074851 00000 n 0000091654 00000 n 0000091825 00000 n 0000092035 00000 n 0000102855 00000 n 0000103026 00000 n 0000103250 00000 n 0000119480 00000 n 0000119651 00000 n 0000119813 00000 n 0000122585 00000 n 0000122756 00000 n 0000123006 00000 n 0000136988 00000 n 0000137159 00000 n 0000137358 00000 n 0000149358 00000 n 0000149529 00000 n 0000149715 00000 n 0000163392 00000 n 0000163563 00000 n 0000163773 00000 n 0000172771 00000 n 0000172942 00000 n 0000173140 00000 n 0000187580 00000 n 0000187751 00000 n 0000187962 00000 n 0000199886 00000 n 0000200057 00000 n 0000200282 00000 n 0000211560 00000 n 0000211731 00000 n 0000211969 00000 n 0000227825 00000 n 0000227996 00000 n 0000228207 00000 n 0000242804 00000 n 0000242975 00000 n 0000243200 00000 n 0000258310 00000 n 0000258481 00000 n 0000258776 00000 n 0000270363 00000 n 0000271639 00000 n 0000271810 00000 n 0000271996 00000 n 0000280055 00000 n 0000280226 00000 n 0000280482 00000 n 0000291304 00000 n 0000293171 00000 n 0000293342 00000 n 0000293586 00000 n 0000301609 00000 n 0000302375 00000 n 0000302546 00000 n 0000302745 00000 n 0000317547 00000 n 0000317718 00000 n 0000317962 00000 n 0000324928 00000 n 0000326664 00000 n 0000326835 00000 n 0000327079 00000 n 0000337479 00000 n 0000338851 00000 n 0000339022 00000 n 0000339273 00000 n 0000346349 00000 n 0000346520 00000 n 0000346757 00000 n 0000359567 00000 n 0000359738 00000 n 0000359962 00000 n 0000373621 00000 n 0000373792 00000 n 0000373978 00000 n 0000389150 00000 n 0000389324 00000 n 0000389536 00000 n 0000403962 00000 n 0000404136 00000 n 0000404336 00000 n 0000417674 00000 n 0000417848 00000 n 0000418060 00000 n 0000428743 00000 n 0000428917 00000 n 0000429142 00000 n 0000445330 00000 n 0000445504 00000 n 0000445716 00000 n 0000459203 00000 n 0000459377 00000 n 0000459602 00000 n 0000467457 00000 n 0000467631 00000 n 0000467794 00000 n 0000470523 00000 n 0000470697 00000 n 0000470947 00000 n 0000483243 00000 n 0000483417 00000 n 0000483616 00000 n 0000491863 00000 n 0000492037 00000 n 0000492236 00000 n 0000507612 00000 n 0000507786 00000 n 0000507985 00000 n 0000516726 00000 n 0000516900 00000 n 0000517099 00000 n 0000527522 00000 n 0000527696 00000 n 0000527921 00000 n 0000537327 00000 n 0000537501 00000 n 0000537739 00000 n 0000550830 00000 n 0000551004 00000 n 0000551191 00000 n 0000563954 00000 n 0000564128 00000 n 0000564339 00000 n 0000576912 00000 n 0000577086 00000 n 0000577285 00000 n 0000588733 00000 n 0000588907 00000 n 0000589119 00000 n 0000597919 00000 n 0000598093 00000 n 0000598344 00000 n 0000614878 00000 n 0000615052 00000 n 0000615277 00000 n 0000629228 00000 n 0000629402 00000 n 0000629602 00000 n 0000638309 00000 n 0000638483 00000 n 0000638682 00000 n 0000656000 00000 n 0000656174 00000 n 0000656373 00000 n 0000667371 00000 n 0000667545 00000 n 0000667758 00000 n 0000680812 00000 n 0000680986 00000 n 0000681238 00000 n 0000695360 00000 n 0000695534 00000 n 0000695733 00000 n 0000708227 00000 n 0000708401 00000 n 0000708613 00000 n 0000720591 00000 n 0000720765 00000 n 0000721062 00000 n 0000734188 00000 n 0000735673 00000 n 0000735847 00000 n 0000736120 00000 n 0000748964 00000 n 0000749954 00000 n 0000751934 00000 n 0000752108 00000 n 0000752307 00000 n 0000767631 00000 n 0000767805 00000 n 0000767992 00000 n 0000776674 00000 n 0000776848 00000 n 0000777047 00000 n 0000796297 00000 n 0000796471 00000 n 0000796683 00000 n 0000806282 00000 n 0000806456 00000 n 0000806668 00000 n 0000817483 00000 n 0000817657 00000 n 0000817895 00000 n 0000831161 00000 n 0000831335 00000 n 0000831522 00000 n 0000843774 00000 n 0000843948 00000 n 0000844148 00000 n 0000857176 00000 n 0000857350 00000 n 0000857588 00000 n 0000872652 00000 n 0000872826 00000 n 0000873025 00000 n 0000882278 00000 n 0000882452 00000 n 0000882651 00000 n 0000896694 00000 n 0000896868 00000 n 0000897107 00000 n 0000904279 00000 n 0000904453 00000 n 0000904668 00000 n 0000924164 00000 n 0000924338 00000 n 0000924527 00000 n 0000945227 00000 n 0000945401 00000 n 0000945590 00000 n 0000963745 00000 n 0000963919 00000 n 0000964108 00000 n 0000978820 00000 n 0000978994 00000 n 0000979279 00000 n 0000990129 00000 n 0000991565 00000 n 0000991739 00000 n 0000992006 00000 n 0000998726 00000 n 0001013754 00000 n 0001031570 00000 n 0001053666 00000 n 0001053840 00000 n 0001054126 00000 n 0001064102 00000 n 0001065605 00000 n 0001065779 00000 n 0001065942 00000 n 0001068699 00000 n 0001068873 00000 n 0001069036 00000 n 0001071759 00000 n 0001071933 00000 n 0001072096 00000 n 0001074854 00000 n 0001075658 00000 n 0001076514 00000 n 0001077318 00000 n 0001077392 00000 n 0001078427 00000 n 0001079277 00000 n 0001080076 00000 n 0001080930 00000 n 0001081784 00000 n 0001082580 00000 n 0001083372 00000 n 0001083428 00000 n 0001083608 00000 n 0001083664 00000 n 0001083986 00000 n 0001084042 00000 n 0001084218 00000 n 0001084274 00000 n 0001084379 00000 n 0001084435 00000 n 0001084629 00000 n 0001084704 00000 n 0001085492 00000 n 0001085691 00000 n 0001085747 00000 n 0001086098 00000 n 0001086154 00000 n 0001086210 00000 n 0001086703 00000 n 0001087382 00000 n 0001087449 00000 n 0001088112 00000 n 0001088178 00000 n 0001088460 00000 n 0001088516 00000 n 0001089029 00000 n 0001089085 00000 n 0001089467 00000 n 0001089823 00000 n 0001093977 00000 n 0001094417 00000 n 0001103028 00000 n 0001103558 00000 n 0001112856 00000 n 0001113276 00000 n 0001117381 00000 n 0001117723 00000 n 0001120451 00000 n 0001120916 00000 n 0001129796 00000 n 0001130248 00000 n 0001134154 00000 n 0001134423 00000 n 0001135025 00000 n 0001135603 00000 n 0001140720 00000 n 0001140942 00000 n 0001141379 00000 n 0001141454 00000 n 0001141756 00000 n 0001142155 00000 n 0001142177 00000 n 0001142564 00000 n 0001142586 00000 n 0001142988 00000 n 0001143010 00000 n 0001143397 00000 n 0001143419 00000 n 0001144395 00000 n 0001144417 00000 n 0001145392 00000 n 0001145414 00000 n 0001146144 00000 n 0001146166 00000 n 0001146953 00000 n 0001146975 00000 n 0001147649 00000 n 0001147671 00000 n 0001148462 00000 n 0001148484 00000 n 0001148910 00000 n 0001148932 00000 n 0001149771 00000 n 0001149793 00000 n 0001150681 00000 n 0001150703 00000 n 0001151711 00000 n 0001151733 00000 n 0001152449 00000 n 0001152471 00000 n 0001153501 00000 n 0001153523 00000 n 0001154415 00000 n 0001154437 00000 n 0001155381 00000 n 0001155403 00000 n 0001156261 00000 n 0001156283 00000 n 0001157145 00000 n 0001157167 00000 n 0001158086 00000 n 0001158108 00000 n 0001159143 00000 n 0001159165 00000 n 0001159953 00000 n 0001159975 00000 n 0001161042 00000 n 0001161064 00000 n 0001161824 00000 n 0001161846 00000 n 0001162703 00000 n 0001162725 00000 n 0001163472 00000 n 0001163494 00000 n 0001164447 00000 n 0001164469 00000 n 0001165143 00000 n 0001165165 00000 n 0001166002 00000 n 0001166024 00000 n 0001166951 00000 n 0001166973 00000 n 0001167795 00000 n 0001167817 00000 n 0001168750 00000 n 0001168772 00000 n 0001169670 00000 n 0001169692 00000 n 0001170465 00000 n 0001170487 00000 n 0001171370 00000 n 0001171392 00000 n 0001172301 00000 n 0001172323 00000 n 0001172968 00000 n 0001172990 00000 n 0001173401 00000 n 0001173423 00000 n 0001174236 00000 n 0001174258 00000 n 0001174943 00000 n 0001174965 00000 n 0001175887 00000 n 0001175909 00000 n 0001176636 00000 n 0001176658 00000 n 0001177697 00000 n 0001177719 00000 n 0001178436 00000 n 0001178458 00000 n 0001179340 00000 n 0001179362 00000 n 0001180228 00000 n 0001180250 00000 n 0001181099 00000 n 0001181121 00000 n 0001182021 00000 n 0001182043 00000 n 0001182729 00000 n 0001182751 00000 n 0001183674 00000 n 0001183696 00000 n 0001184529 00000 n 0001184551 00000 n 0001185336 00000 n 0001185358 00000 n 0001186221 00000 n 0001186243 00000 n 0001187090 00000 n 0001187112 00000 n 0001188003 00000 n 0001188025 00000 n 0001188859 00000 n 0001188881 00000 n 0001189846 00000 n 0001189868 00000 n 0001190679 00000 n 0001190701 00000 n 0001191619 00000 n 0001191641 00000 n 0001192873 00000 n 0001192896 00000 n 0001193785 00000 n 0001193807 00000 n 0001194533 00000 n 0001194555 00000 n 0001195492 00000 n 0001195514 00000 n 0001196234 00000 n 0001196256 00000 n 0001197341 00000 n 0001197363 00000 n 0001198166 00000 n 0001198188 00000 n 0001199097 00000 n 0001199119 00000 n 0001199955 00000 n 0001199977 00000 n 0001200859 00000 n 0001200881 00000 n 0001201642 00000 n 0001201664 00000 n 0001202744 00000 n 0001202766 00000 n 0001203508 00000 n 0001203530 00000 n 0001203922 00000 n 0001203944 00000 n 0001204305 00000 n 0001204327 00000 n 0001204704 00000 n 0001204726 00000 n 0001205103 00000 n 0001205125 00000 n 0001206323 00000 n 0001206346 00000 n 0001208627 00000 n 0001208650 00000 n 0001209555 00000 n 0001209577 00000 n 0001209989 00000 n 0001210011 00000 n 0001210425 00000 n 0001210447 00000 n 0001210858 00000 n 0001210880 00000 n 0001210902 00000 n 0001211480 00000 n 0001211535 00000 n 0001211682 00000 n 0001211816 00000 n 0001211965 00000 n 0001212114 00000 n 0001212271 00000 n 0001212430 00000 n 0001212589 00000 n 0001212748 00000 n 0001212907 00000 n 0001213008 00000 n 0001213073 00000 n 0001213097 00000 n 0001213151 00000 n 0001213192 00000 n 0001213271 00000 n 0001213329 00000 n 0001213379 00000 n 0001213417 00000 n 0001213497 00000 n 0001213567 00000 n trailer << /Size 511 /ID[<8328b123e33278c44730fd78950e49b1><8328b123e33278c44730fd78950e49b1>] >> startxref 173 %%EOF