piespy-0.4.0.orig/0000700000175000017500000000000010604075214013564 5ustar bdonlanbdonlanpiespy-0.4.0.orig/lib/0000700000175000017500000000000010604105711014326 5ustar bdonlanbdonlanpiespy-0.4.0.orig/lib/pircbot.jar0000600000175000017500000021653110014267054016504 0ustar bdonlanbdonlanPKP0 META-INF/PKPKP0META-INF/MANIFEST.MFMLK-. K-*ϳR03r.JM,IMu )h)f&W+x%irrPKLэJDDPKP0org/jibble/pircbot/Colors.classmMLe~ өl[EDJ Hl[hk)vvwae2,,z`b<Ϧ'4d/h'jj7oZ5113| -y}>%A"!TiA 8욌}x5#h gs 8/բU;iU ؟YNr !"+ ii9ٴk*bL@DW >NxJ@hr8פFD##H骚1! I->~m>>LnC>~q]|M>丏{  )r奦rJ;Wk|8M*7޽ƛV*?B`֖wrW*B}X0߶5/ڔoƂ}ݟ>=8%~5>_YаzWUl]ଁOg%/xDү87,;\H&F?-,'~-8݂Wقב=Zл]Ra`h-e4riZA $7vp"  d1?L6ne29A9)D7 PKwPKP0 org/jibble/pircbot/DccChat.classVsUݦɦmK[ZZ@%MK(gJ@*fn͆>@gΘd3:EIZVa:9=v_~E;XFgڰgYL8< ,fX\dpI¬!/eȸ–$l&cle!'a^aazE^2%XadlUF(pPbkq] 7Z43lgg"9|yIO2}Σ6BW6a]ȋ\ e[ *\͚G_Y jy)aZMzmziuE6\W3W^J58aM;4:qvW0q&nTA[x[^`1#&(؍79 fPtuɳ)5XVk>@8V S%|O ^. |V!+_Pyq_Z@o=z{LRdTt"Gy=Kt8;V6b͹۵FljI'>gz&T3R*ÉeGb"-+Q-<;jqΚ4̀]Mj4Wt;ưiuacU(E VFk,PF06RF(>7Fːb;s]I$$dmxN^9DDa"'Lt/<A"ɤEZ![ZF{**P訢.2#CwSEoc&һm4I;p"&p'h 1ߊ0^;Q~L7{CkrRU  l`Hkcl,C`I b(5JUB6<$\g(N 诈Yzk\n L{^ KXƖTOFW~_f`.ӿI*#MpZH[Ieg; JD/W#H]uC#ryoՕ(c6{|HkJ7@Sb "͠AIOH&}][ֺ~Gr5{'0ڵg'qǵo$PK=; PKP0*org/jibble/pircbot/DccFileTransfer$1.classVwUfdJ)4,X!]ӲMY[(iZDd 3 (&vN#Hʱ ~x_mPsr޽Å:8YIM,Mk9V# xEE:9|wEc]\-"n="= }ؿ'"z>W$&ɡ<ȔU@7 +jZa(䐪Hnfw iVJ8 'aZ)լl`F2_M+j{u+) 1C̄bw:t&Lj'UgEUM*FL偻F4ȝ.=kĕʞBV!,aVJGHB# 藠A &,|iYK,CՒ-HbN%+ԥ(puXDp J poV"Z&krL1qa~۲s_0T8O$༄ ~%\e _⊄&: JM~Bxxs G`\XI_eŹld4hM˦ %XcXb,J+Y@2Zi;j. 6peClgߠtҺ '^'B@d N]YMm[s}nkڃ9%GOG$7,gp778q)L0X]zLW,%JW 9uȚ̟:PB _P6ʪEǷcf(b9y)0P,) e8\qZ'$B7p[eMԸ.[~.D"x;ﶱ&7c@v`*n;ySTZ?4^`λ!vMnlkw3Iad ͒wYfl!h%1yX~&Pp;,v8|HZAK=7܈. n3a6mhh2.cp0F&>hx|33~aPh. xVRWޛ39 x29h>+-P{^wiFtI$" , X6u;ܧgFL߭lWG$]^'%Ƨ|Z3{$s${|Iد>q@+I|H< IS Lv!jW4Z߷^b  %acxT1<. &8oI|(KLpK`I!a9;)H$ c Sv|3l6w)<%=|_i3xVx@o5m2%GT=_ m13єY'AqA,}T5ZѭMlR{jeBAƦClmk~+R fN˦:k*{z#PZEƞsP8b~#oXfR=}5|Us<t ex.NvuֺQOFO8ԅYbh,L+.j P%{4& SvmZR.w˵tZ7.T_Q8}t/i")LÅ.W%`֨521e`6>V wu _us \<.R>a*QgkT?^|J wu5[Cу5|oǥXfUp>v50yFLw+N|&L0<}{2PP*v[j=V3:t[lLvX'/ff~eޙk_&-SÏs\m[2=V6!iax$; z,DUt*{ #L;4 ;Px?ME`ؠv_pPYU_AUD *UҖ{Q]4*,jJecAMAH""u>®hv.-!W8xC 'P_\e3Y6LʁXO"4-j̣)`$K<ȵݏ@ZW:G˾֩%N\c?*DyV V˲Xdt;X yؠprn.^9ړp ͽ-[b K#<8D5ΰz H^|qqh͋STGzJ.gsy8D2;Dic>=2nyf<ǰ'0>4~g"=^!ULsm؀_Z7"nNqVd{q^w(I"I$$7q??s'!Y*^ƿ BlƇiUTk mPKJ PKP0(org/jibble/pircbot/DccFileTransfer.classXwƖ4 clƵ<@@[clrBԱ4E$mN4-] i.!6ӸMMs;,y<6v[stw]ߛ e9&O_`E&_be&/0xkLn0oQo[Ln/2ͪ_?E/{Lūo3??~xC=?q?s&yND`(dA["~!`Sx4  zTtsJIfja 9j]絙ڕ1#o}yEWjZ@`,v @.=\T iMOТ'4.32̫0TFj&CtH3ڳ*CjL.qZ F3FJ[ [X:6m謖$ ft rU#knjy2SM)fPM*W裚\+NpfFB#S#NNntLv~FMO(3v7xkzp9`}qc$aUڦj-e\q Zyƪ`SUyI`PWRe1rJ}m YN>/YFPLhhjښ:55`K+"Mh7lU,Sb4cnR- mb-`c(+lDZ3s*zXET%ݽNKVphΒp6Tiw?j8-;JJ9( .#%S@\ʰÕ:pgH2GXR%#ѱa#K Rhzd?$//`, 1a}9JΡ37/Anr1͘&OEFla\7A7PǚY'*% p*m]^Gp{Љ]a?\&'{0I.>IU( l (Ɗݦ/񱍻Ǟ d/zreȦ=8F'{ 铔~+1gi7>D(X.d3pM~[o᪵UEhΛ;-4ݸEuV;ь~"ET=4YE`o瑛<]nA'7Cm(ߍW -}Q"XTH@R[WP% :MXP8d% d'DrD9E>h]G(W+ElDsrKE-Dyꜷ=oI"!;(!ky\sOS§- uԊ_{PKࠃ_&PKP0%org/jibble/pircbot/DccManager$1.classRN0}n!P(Z%pf9PQ5VkTRg!G!Kx V1@i 3`#F1fcFQTKUԥwQ#oOe72;dC:ΐo9We@*aY9C[ɿ Cq|UZ+5ES8r_D%op]ȹS.1ccEst6h-R zLgu;_0LlCCr!dHWoh,À𯔮OM,C:7#VS\l)Ttmfz?Q.tSlTq=j=d䁘l/5-%^FzB/IXrKIW2>PKtߟPKP0#org/jibble/pircbot/DccManager.classV[LWpԊj.b "8, 38; jk[ZڪICb|Ф.$jCƷ&}jƗ&}ih3E6s;os ]XqN "(d"*IDE`sܓៀZ[D$/'9H''M|g[loq;'-NI+ :UNڝ)".apNv 0b[Z aAavxnӣAzji,1BeYWý!!KS`4] f@!Y_իɴMYѣSgdDqf+mm9[ nWMS }DQ r0MVJ׮=թZZ^3r;Wc$`U '%MAG0vW5b>`ԕՔ 藰{_;xaΘ'j:ÒgOY]}u8$p%c8.C|Đ61p%F/2}@F;\2$ǜ|I rS8MgF%|3Ou*#xcTa3_ ۔C1 PK4}K PKP0$org/jibble/pircbot/IdentServer.class}U[wUIa^LB%TE@JHh)4̤si7\ Zv#\=дW:gg{r9_G#Nej//x9-㌊NY Ωyd\Tх)i%/e+\eU2ANTq]aܐ1/c7U  (XT@ Y_PP]0P$$,!= G2SJ-|EjS m*gmoRžŊ]2- ̲j*UJ<ǴJF]W¡ gU89pOSez$%/ԃ)i($dLKdj^8sySTǧ" 6RsytQX^(sjx^ Hi81 ڦ˶eY/gq,LӶ_)g8nrX tk6cc'FePAUiMQj/N@huO?yL UtGGG%ݤҒpdXl4 ̕aaU k܈uܗa˴S!(Β xH[5ߣ8¨1^>mq1=oW| Ijxs^%|8b.aNOr3s,d:k;T_iP+MrgyoM0:GqeBX[=hY62Y4gGv5q\9*l.Wn cĸ_rPJ›|-nQ n% '.f6W<;H؟xڎ,djC֨ҕ n V{ԒypE.n*ei:Nr>h ppmq'Sl"OGvчh ~0cڗ*Kpgb1Ч*: vzteބ$(dRR@GrhMt.4տ#&ס*yXj+eL0I3XbVJ d3#Ѧqi9#j$#펥IO}=1*(jޙhHkz52ӑɯefOi`g娓2V^@.񦌷pHxx2GdQdǀe| %M/y>i6@YNʝPG8!cl\GG;^fhb"` Nʊ3:K3Q4[JN t;Puc +WdQY&gR-c*̨IafpS*n!NPD%+]Lz@&#7 G3\fFR@7`VU6RwqS㽊cqFUGSmCDRCǕe|1 `N>QjhX4[-'e i^{8&/ gxAaefZ+KΘ3|M{~RkW dN69RY5nT<"-B5yP=~r+\cO^$"/^4~Vɉ,)wb܈RrCw״ƌ%JJκ9u>~?%ɄY{_E|Qw`ON0R=oO&s& gP0]T,C]2~& t{_,2FJ:5[^v]އM$GPKx"PKP02org/jibble/pircbot/NickAlreadyInUseException.class;o>f]^. fYb ᓕX\Rn✟WZ /-JNuq2sRS*=BS]+S J2@0022ge&d%' EgQ2\"/ @+$glZ7ف$XT N(d31pPK/PKP0%org/jibble/pircbot/OutputThread.class}T[SYId. 2B]*M@!Q&I*ΤS}LZVn\V :=}>ӿ1dE$aDIGDFt!q'd w࢐.1%c32.#ğb犄 90/aAhK!!)&#g: GSUo\+'m6Yәfms.g8Z#`nN3RNsft/Orhd8`s= ɟҞjq݌Ϻ"xan5e(WK7J>5BWL]<: йa 8D7pwKԇ *-X'p}ν7iҖ{fΙ33937 B%N ]1A|?O$AL" Ei!DXI*E KyD+X%-Ux8O pBS})|—(dW*|—)jJ'?HCDv*|+JUnJLw/C-{\ToORV9HgTꪪ@y@2 6+ 狒4dl)  it嵑P5"aln,\Z-BPl1bbRAuKYX2 IU;Vb9GU-\_ᐴ@E!3C[4T5$ PӢ`8Vn}M$.0&`xA2aGN~V p:Z Tll6_W/Db*Z9*TDaT&ּ&X5X_bWQxm(2LJyw:X6V9YT tnjC  uDm,Gfh瘌CTEv4@aYwa*Z4XHc=HWuV= 9LaP5)'Wva5.h`('Xum [$\M-h Pz4 G;J-NǪ"XC$ 2/$1u1(N6eZܾgCJ$0;& ύLY jl\nzzNpMlހyl`{o $B4LKJm$\S) G_ܔP}Ed~V\l&!]7 0$*jȶS.kv‚:T#(]f*-#VbcE&'Ge? a[6gPuձk: Ԩj'_l݁Ȏ.-.T(ֶNN-4FQ+Cn3#Q4f90|,Wcpfc46rxM`qڻil"$6A 5Ma~Me~:0il\rSTHIxQFMvQE T^n(cQ8 KneiYs"Aw ^ wB ,$ |! gsR:=b .HjWp`3p%gԬ`n! K-he<(e-Q0L!b#90q:`[ZMVت1fo'P)oѹ嗗5Edi]k\3ynʋ b *Xܓ7~*馉l% uDzh)rЏ35ѓvė'|c(bLQ 6Q 3f@&yU)jwHP6Jժ1~7ZxG)/z>VWHLå>kyZt8t}E 46hRmn Ej7؋ʋHAR m[ZTۺlae +pwX,*pSQ-..kTR%EW YTc-*Y\TA9]'oBEnDXK4ۃlgc $/*:J9&ع:LEcO5v <ܦ># ]h]D&ꄘ:~m<.!k.d!~4v'Jrkb<&L#ʭb& lM'a5Q$N\ہ {lB_Np+\Ej"]ioDnDȭD=ۈNd;l'r)1iGga>٣%+X54TOY*7Kkf3yYkњ:y)6k14AZ kGz冘6ф0rQ{&V!>yYN[d%47alC.iNJѡ2*j\ThbXt Xždy30X_!cVY I !Xc_滤9爫H~>b\P!X6d3"cC+qƩ-;"sKfֽ2AMvQ[6#VK5b4-P_ww_1UF܆)pg ۙܜd{P:tU;fCW6ќEEZ]莞q(jx.ЋF1F㹨'U߈Xxn瞎Ҥ|c gu\O-a FLO K -&>#v}Fdd%G2d=#QD3+z .߀wT Bgrʰwɮjl8FjS 5RST fV[8>L 4GAε X6ŠsLU75UdA%9 J9 AoLWB;Sxi227-ХW:4Z`xo3K&x\R`G v\JjEf[`^3֨a@ S 0oi.T4d{:45Sq97\k$f kgbZ ٘8Zq-PTtY]J3Ed~*pek. JT8UiEٝ[Qio2 P-_z'M\Wtٚa~l]Kn.;s[^Lȿ%)HfX8w%9NmPy,DBuodfa56V9cnB:9FFh&0| f0S:M[n-ala;w·pˁ{E݇~t3;4xCl!dK`GXv3m=\6c*x ؽ{ <ËCxWٿ53Ɏct]a3M3'^uQ_V&KȆa |seI62I7$SX]I2nВ~]Xo݇oN{yʰkBa0ӂ8&#r}3) _Km:QЇF.QסQ):M9NVfբbzZLS0brTc&K1.ة:vn#^:{*YZ. q$Vt=jU_q[eI盱98c޴| /wUqJ-x\ xٗ9[`}u⼏vOهhKMV6Gqa}⺐O.=xZ q)~Dž1ƁJf2ukqv=BБ4\3Q-k Wb_/cWC_>)zg@˜'\?j{87>>l6XFw0~IuJF^uckŇNU)>jSDS*`Yy&ޖ%[75[6tی3%zNə`ι=s:=s;U9#9[]6`GSnrW]1.xu2<a V^"Z1Ȝ"o"&xN.L˖}5Dݥ8l,~ygax5My;SCy]]yomq>KmPTyQldC82KQ#&:)dgq 2_{,#vq1 d~6k0w55NN`ѩO*O&NG3oq6lo3? ;W%3o% ó g;$ 6ą2ྏd8G\]܏q85Y)eπ9_0q ``:8^6i,u(.W/5 fORpˠ| O+`r5̖P$dy Tɵp\#Åpr#<)W|&| o{lfeO7)D"PY|% WFjv| B"of[cV|{Ewn|/M!?;0yϕ~y7#%^H~$_+?ϖgmsny\ka6X~=ɥa\e,.DF"avUsX ®aײ:];=#,w"} a7v{a7u>sؿSՆ[:Cح!lkBsR9aw;a:];:smnN 6l`o%{֏{}) ` g$T!l{3n{08Gwע'Gooys<+Q39|v%8vgF9K!ڕ| hc2&W63Kv,0Z9?|\KKؿcwRHrNf)_f 9lY=XSm+޻z_B6gƻ"='3w:?G7??ia~ɏBm&ci_F+\u#tFhtOfONoLhړVl"̶>#8GTUBV S+3{3{솬>`-l[!g<)pic.G! k ,esH%nI+&%g\3K]St[bFJ:W/Mh֒>X$t+rҀ,댋K);qt4~VN=d{4~\'/h_aCi 퉭F[eW'I%kZ_o^BF(}PÖF¶+- doe.X:ކ]n|>x>>= H ]վ`U*cFmfEws9ߴ5SGٝ9uc0mP뙨e,)(QύFDᑾ QqcPlRgAveӔxˮu LěK˂v ~iqY7YXqPJ߷ K`)NӔOjjT5j=Wπj|jWc0]m"u-b~8؇D5#8Os(l4%,΋BxR)'$k.;{I^ f@>r͇B=5FK^^pÕ0@ FWCk$:H(w܆f T K}Տfw)aD$Rc+\.}fӀ~{i̚pf8=RN<VpOM0#VCq%~K>\rn|Ŀ8L]l'εxt:SCAԃ(!> `˧&Λ,E_RMٔ.4-ܕWs;\e :Cˎ'+ͪTw˛] DDiqzD6PfPݨ[譹Vj8exYH&Mh, 0"<΂;{N(Om2 }]<#x'{0V^kkW+s$c&B%zg ?<|ǻ4i&Z0gw"yI` JlMz'&>"5ȷEǏ8*v0Py.{ZPbȷG3bH`qOM"ZgtkYe6SZCh.bW ibG=m0K::}K$ P4 ^ʵ' CBOށNw;M=(7gh{ɿPK' X|PKP0'org/jibble/pircbot/ReplyConstants.class]wE @ `,(Br&:o߽vwxpxqK("JD) -@;ſof[u*5Y{LջMջks FZPc}ˆ&+jN,HjNoxIDlfgARˍ-eh5Ӗ^Җ2[teAقA^ڱIÞpVӋXa3 ܆/f幱ò<}.aT%2Vқ71FڹTvbe@Z&aR76|9rl0 qBҒ;ċ/pRi&A+++ز%X2Wp5&,4k5K10u"Ҙ5i5 2%AY+MR 3; \:nV2.XU<Ŵtm5Ӱ['pyT2ĄL}VVZ.A[Zf1tOR6xSܿYCRxt,W^!v7~ɩ-8/UjūRx"<+TZ8Wc(s<.Ĭ!Y$5ٷj !>PZOgMaȏL&yj6I8Bl^nTM8I~ay3_!U!?b/s?.&[NO6Ɨ-Y8Tc_K ,Vk|ɢѡKOt"5:0 -^j6MRSۓwww" O'J$ςw#A~| |`G` p½ lMPr gn~ap1O$ ^@>  ɟȟ? G#ȣ1x>^JG%|<|D/L> i3_Ju73ggρ%O&|[ɗ&.{?/%__N!G?J|%*j_Ikok+7W%D|3-[?oo' E^M^ #' G@o"o ??D#'ɏ71'-࿓4 Y9  _%+kf搜'm)d_kz5Mx5zt?PKPKP0org/jibble/pircbot/User.classT]OQ=ve-X?AhX$Đm-enʛ}4hbe],Й9w̽~ a(8 -R¤FDU dh !Dt]D7DtSܒq[;Œɸ m^0 =Sbfɱ eFZ^r{7LÙ`JD+ Ҍ /T7s^s%BE<%4HFeL$0Dʊe*.(XjƟWR6q1|1NJ4GfYu j%jQYqhCqp^E@&07]-[Mᾊ Ӈ~N.f6-S6|r2\Q1iJwcM59ּ"ik|k@N̉z5tE}F E׷^O:pIƒ;}0-CPK !R ].%D6 H_aÔMz]$ȇ]Q.8F["J5+и(m!RpǛ%{^%= Ҟ=*Zt}xh &r5~:>\DWIDB5k~1Aw'bhK ju ^?kxCsߑun ;?Q&ᾬPKi:PKP0org/jibble/pircbot/Colors.javaX{o6߀'cm7M$(0`e*b'E ~ݑ-?6:LmAt";%n Mx2ڇV Cu|PfG1&m\*/B3A0J]/HgLE㔅?QPDt w2- L8q8]ޔKg<⊅0HGT]`ج\fNd•'p[,-A&XVb R$/"`++5Swrp2,L$m1u#$>1cKLQQۚIu '-(j(URȦl ZE{Vo|uzql=O1+ r)fޟbe1p$!M%؃kԙ/dIIScD\ljʄ#L 7|bngJhTBh^d4yAH;r1G,hm"!HH2ԀdC,|~SL-e'g2^ ep`$1+\ R"!:uJ>;S ,JN,s$7GK&qh7ġX ) +Cv&t@bhX^GȠ-1>V;4W;Vl4@SV+{Ie?sU@c G;}Wٵiqf{h{䐏+/>-AsuTQ4zlɰ%KWY/v$gN[(sr0Ƽ^IЮM#PX)qdo7t + Nb 4bhvRA5I롆s%|ʺ*ywٗ/EˆAq9<Ԕɥ;%DQ Ha(A^ovRx387d%1Q{Uk36ܹѭGEry]gVPj*KvSńμ#pA) Cl ՟KQ9 zz`h2IXRe%zޕ (Щ>'w7-`JY唜m/Vwx>/"A[kp36+tPLǺ7=Xz"G*q[^.?mf;H':910lƺ.;9\G·daۈGa\>5®yQLb߀kRl3k (1e:;Ww7طy)kuͩfxf7_\gklXclKQ{I*SeeZԵyFs])KVqkq2uȣ[925{Xd7wS|d ⳥-DWFnl}UU@A.qB.+cvtU >TiX7Yd=yra/daʗ$: Mp-:k$PK{PKP0org/jibble/pircbot/DccChat.javaXmoH)aT!'!"Jy@=N^ oNȝofw48ػgwfyYw;RR)+Se1J`o2ğ[#Hb|Y^wbri*SG ͂iRTf*B. ZyKUQ&Jf,8`^=ki9Ca8q0xvz2&#fwpPFȐ;…h^-B#bDx!AU7L/9.ό@ { f B\D< i%gB&q~/V%j%$JC1ۃ8p09aMɁƓ6LޟNГ9 {YsŪusL{4-\g ;cB١~o.X)+ 2"ZW[#0 iЧ0 h,z ` f ̵uAy|ٶ;6n9״Bw`)j$2/p)7-k! ysWg %'j:UOIcT2"XpPbasC 9W4b2T rSXSRкK|( c@}e֫ZFL@Hm%I ]B:/E u K$Xa꾣њ+nod͸L5V_=l͍>vr>%y$ca;}'3 4iZ?\)QH# °b] sPI',T{n=l=Qm,KFt&/,ƔA!9XEs F\)Tczj@ CCbWfV6GEWI`h14YKD a,T3LM5pj۶aќE6/]#N†E KwyS_40<*k:yipe~ԣܴ&ᰍ¬a-Բ~ܞ]E\ȖAwhJdMnwUdm{׿b)Ct#JD>WQ0hiz_ֶF{9N'Jg8Tq"9'rA!_`'_|v:O_kENu X(ҵ.b%_?lˇ`ۖv6ILq"&ĺaA[tWD2mb"HmE@]9ɔZb^QKERCkrMh)ھ^xx݀D.˨p1ū0,u}P JVڒ0~YYP@0uvJKUmqRܞɕf6/[aAv 2v]Wv{nCZ]pf (^$Lض0- PbfN]HܩZ[3Kƨg$ a4b>o`~'w6tAE-(G^ڴgy]wJݶ}"aBV~3">-].1Kc c*: K^e\B #%'WIUnyjkO|JG7ov67[p_oE\ir7jjz趎ި+m_Z̙{םiTXy+:ZI-/yzsчΉ)rL (5Yd7j߻PK7MPKP0'org/jibble/pircbot/DccFileTransfer.javao6bʩY1ҥؚ&.h2p!%f#:;IEt[ZAÃs/ 9ivͫETZNSYʹOS1Pv&K6`B35aײ_*='jIIӧEVx̦l*gJ^1=Ƿ?(2Q]WcX^,u,mٹEKXfJ72{+D k D2c )4/9lϵp7[XF =D$vY yLTp`]Zǿ3U} W){Ǘ ۂgDhpr|v<<9}F>=t42/> Q*jǑ='#`zТ/q70N 8sk$^?LVCNF?ɒ ,IΈ(HMw?A7> ԊdU ZOqx2YE ejlwfQsś#XRKU`h+sˉDq 0fcJ"K' 1VY|/Ԝ@H!אp(BMq{؄4q+6 Vg&09`!QA|MA4j%I }AbƁ2uW2g@ {Pҹ_y9V*`J#~آېGBUFn.޾zc_}ՅU $!nm?cNx%jndC !SCpeoϯ1[x)Ż\R'>{d)B~b'!f*VCUZ>nqBdyL|1hHxI}\0 l}K5gl'44KʘDSJCs=o$bS2.tGvݚt|a|&C\Ɣ vÃnX_I2LjnUT 6tn`0@cQDl-U|/4y]T Pxg"BoL8hf!}nãp8 VQ"UYʱXuԁr,La"cp _(ssE+Ne 90dfx>rL B;wZYcd. xp`.;1HeM:'P$ϡT$&1vywk3p3b^stԵޏR 4 `QF ٞ] /Z93(߁ ysI}6۸/Q0)0 2LYah c>$"T1pX, <l!&N(.E@𪥀^z/3Hd( j~N aH!5bVewRD|ёb5 caun]ɏ/|~ƓЦB-Qj ֯l+4lFtOzBiNqM`Y3#1` TaK\ 26&Q0^g@*k1LSϚ|3(B ORM@ruդ"&2W//93vc9IzB)\;oDk[.,ivZv@ck&|B0&MLkұ }ڵR=9K6% \H^!siO+s{vs'~%67qo((D#I<|@"xb0⚬Nxbgg }Urժ(TjUs2S]Er"BאVa,Z*n?dQr˕>W|9G5obh8kZyCiR^5"WPT3>c4Do$sxɂ 2-DUc9Q]K:4Q[,2zmTuMwM{嵰ߵ[ u+)_lU{E~{M?l\{y\ocw0\@}g~uyJ+kj>PKv 17PKP0"org/jibble/pircbot/DccManager.javaXmoHj ^ZzJ*Z-ۘ]z N7~i^?I׻<3ޥۆfc㍑󅅱H#],1Z:pџXXw$}mf٘,d3!X zciWDZ)LE((k)X Bav.޾lEFD0N$ ގ/[ Tv;C\ $ɥ/a)6d k0X#+W3m %RHl@1VR D(DJ&v)_: E֛N)a$:M\\v9ğg^ u\ %hOb%:+g=qw?gOLn9ff6nI^a:&>e5˺ovـ68H$ O K@pBe*F/]4+ro.R![/s I}N^Կ/2CIx柂* xW'yKl)}qF,-7Gةpi@YbH[3K3׎.&y6RWjP,`#LDX/vp[֒L,Hun+4VljOݗg@4cϔ .65 &&9Mar)X$w=$ XmS duTl9#3q ZmIR3ʛUļEny/Dߢ9(\W׽BdzRWٺzn?n=$Oi$1w GɂC>KDɫkЙR\[;e@)p>$4c I<]ƒFfŚZJDiYogToω*1Ɋceʼ;'ьr$I0DU3Z}),Ue0JjףWP]lQhQkLe=mqܒ4ѿP"*c:xU|n(}F_B 9D.U@TkÇeLy- G=QuRpuxL #wᄀv_2k)N(o^A:]I%d8+}μbOy1W>qN4+Szt#ʏ2L,C?]N-NעO -\?zRڟͤ +pKgSOG {/bЫ): ~,~۽Soъ2#p^jeB"t-젃iwHd~LV#YZXJ+?U"DZܚ $3IXH_KgޞJ-Zf8 z{q6StNLQH(ȣKJ'28Bܢ-4lJJ4*T4()^[eW@@6D1vR{p4F wlu{T>3ʯ!RKio1y<BE|8;8ᣣH>ei!YI<!mVv*eYsߦ%WTbDO7H+^gT$As^r&LqٞR t p?I{FF(A{=Y<'D( ?y|?er*7r =>:xl7ie}o_7'Pi+u|߶'f4IBH <D4 N fvXZS8, r;Ɠ& Y`D|1krKǸ4Zs̈́W@/x\E1 rG"`SjBDy;.fµ:SfWV]`<^ pJg m%\>Vx|`e-YxU!jApvV>nKr^'<v#741Rw %B3~#;/6 qyA["KFrcݎh4PUġזѶoVlkm%74RFqis\'/~у4{PQODt )̙Gzg|IXfQ;U8GHw-PldScm<7|cTJ6z\:fm;ŧe\NqlӁ̆[ZDNuYyl>)mc [mOVyjp4wښkK=rPcᛝ4"b_5JQuMC4b$~0NMx7l8?ӿ oQwh'+xJxI<#uG^L8'y{?pq Y-è#>=XWS>0~O; ? ݂,ROQpr }w͵I'^vN~Yvi XukY׎@ݿPK]1t PKP0#org/jibble/pircbot/InputThread.javaXkOnaJ*Pg (jIPJ@V=zf3(<ﻳ_Q^tԋ['9SN\[LJGu_LOO(z8LTdɠvډNTf^رY>2C\&+Ԩ/dBX\x+⩵NRF7u;ʨL&6Ⲹ* վf'gv6SYq-HwĪ{{%fr^`lEt\D)̦V^f !װP#Eܰ:2qH"S Ϙnglsh C-Omv"c%.G'ҤfJr.sq_G_oO>9:*/?t9`N*rVSqhֳ»D;6:xd_[˽Nxt;@x*2gvn|&*fr*@aCWDaDLT؜E|qr4R^.;6,ؔ%ۘj>BIH55䎉Edwrg̐ѿ&ŪOV{Y\fʒg%j_x`T7gh>Y S P.(ST)UW.O|b6SHl iYƚ%3d{擩(HP96o%2utSxSKƚCJUV06QMHoC,|$V)(mZ9rWchQc) XEBFثhӮPz.:7)rKkx|| ]@%zkzMm!h&~cR(Yf!Y4ymeh_h)Hf#j@FGِelVmǹᖀ\fsKEИaPAn䒗ԣn*R2v[UFpm%M8hWJ598\[?دZSo*pfJi o|0酓Uq}EIa ϐz(kFMYsi`FTVpfnM #B `#I^䝴IOW*so?*K UVއbo/2{O1q ùDa$>`zb^x!TĀ<[}͈L> RO\=):!'RgTKY9^U)3Qh8 sXQz6(6g0n$~V7OGy0 FϺU8dwm3`s 64 ,&zϐiGzb{֖eT!I?##33[6ɬMciB4^YM|hmVeX[LS$DXX9Gߢ+!Dž,Ea ݔ:1#VB_W5mK{򄉫n/o.p<ːe_Yl ؂$X1P( .#}6&G\Wg5xqں ԏAJ×E muχ;A"Ss'֩Buأg0S 5GډhY=Sk, tpp ~lTn1Ӛ& HCf"D˹=jeērm}]]9چO86:>5s6Yvph[{6ബve6稗1 P,puyspu~sq3踾PKqPKP0$org/jibble/pircbot/IrcException.javauSN0}!ڪ$Mq VSgژMlv-Tbf8AjrYzaSOsVcN&c(7ymDeGqZJ Yנ0Vh^mT4XURrTJR-aD#o8z E+5sS_!*V5Y!^ם=Akō5XrJ`-4\^*@0V+ɣ]Kf(gNaG,Hྩ Pq8Z7@7P1~xR[=Cv<990S`zauoHT1llĊS,Fx(jeK5Zq|Pik  s!;yPKHk+PKP01org/jibble/pircbot/NickAlreadyInUseException.java}SN0}!ڪ$MqU3m\۲Պ߱Eϙ93V%dZxSr(; $MIVb>/1QfQ.(W3@-`& Q.Xp 3!(YyT b>Vr [US ,](ϯq +aV m=d"?7pA.ZzcwR-*uFp' eBm63[`ZSy1G Gn&?#+1O.y 3Ihjo60~x]B U5CrL < v]dv*_-m8j_#Y5!KS/q: dg$4wS Ԉ#["P]'T+w `^2kw 0 +߅Kf&@ 1 ie OC^:h mW6h0JZ kv0q0_/Rv,K)njQҶ 'D/8N8h`RBӸq(s S?(Ym65'Hl>]>U#C]/Gq{T ]=,D g =Mj:t->B:7zDGy>xX,[526v:3(S$sxoߣ=:ZT2cåN:xIr:͎ρr5;6HW:SLPZYSqSY+Y@ hB!L^KR3bAjn rcRpkӈWC`ܨ{C%?ZC@Z#ZHB,0 RB)e8]y#BPiGnf'L="810%Eo+#}T! +<>x4IYg_ 8G#؀[2S#٪zQEFH/m=!:?t`mKj^ `s/ ۡUU w,L[b=p& '*ct/oP_EAHHxyP[(o~ S](xN-i\0j¢Q* M>tM'ݮeX\y W6 ͞ wFu D _X*f-meFZCA-ski7w3mMV3O {vޝқ+5H7=,KLۃc JĄBp(qcyA:|]iy9&KbI&!y"8:Ƿ4 n#(Dx2Υ8v@L+q>m|x&S+dxuK̬F[<:Z<pΔUmY^9Kփt OF(ѻDǑ[]#iHrd^*C%xcq0ts$[̇G{jOZv%7Tm@U[h;81&!Y ֪"l&Q#wWzͨ]뎡*4-M+r){K)3j4Ř확ysP9ks~9!zQyVK.ߞ9C2tqOMJ\h$J/ӧkLWVx 8NeInfGZz{PKI+PKP0org/jibble/pircbot/PircBot.java}kwF0)%"ۉ&~dvn6$["baZAIN] Tw׫܌>0[鼌^"[TE*,Ewwwn>E\ݻsg^M&g靏?yRD'BE*(;^$۬\9=4E2Uif(^,uFgYY4gY*JQ9Ww~Tx&rD^<ىtFOR^aJt'2>`,UQɴLު$ˣ 'iG<[*,W+>.!k5Ƌ"&35Gu !)G'Y+D˫aT^tu?>>Qu5E"XA_deN Rȯ4W~zg~4 kiW/V/lDAMl73ڊ(B1zW*;! cDw 0YSB+r0"8;oxhb,rUFѹO=,=WDE%0*XW؆ y%蚢LACПނ*y.MՊ'6*+%eS3B~@z(PDd`@TxJH |2gJfLo(bq54V9o2AA4Q_tb5?{Xlmw`useO mgy;[/8ZiIH~ߌ~\/O}B_W1 !`gc?5Ykdyée|22FƊkAѾkK} p6L w5R j.e88vL-S \-'*3ϓGא?aVi~ ן3 >@ɫȥoH3cHp!χcwÝQE 4~9#B*(2^*'QG첱>Q[L:)_+sge;SasE1cZc˅%Ę.ƠxfDqcO@#Q4xqU4n+Tn%Ɲ 9f{gG?и>_=zz7 |W0 _1Sf49q9LRQQDZTGkewPws`bn7CVf5Q;:nl^Du+_)t=?Au|PY#h…`?m(23LQaL?ȝSm&`B5y@]ȕoA2͏H7fguJtjXDZKw5[ ;ZQQyY=)wQ཭5燃Cd{z6 ɾTF3U0Sqo|!d+<u`vU\=&tTO'NC QeW)*;Y u.gowwueπL#Leƫ-"JQW,\`k7q3gB„oq*rY]^{1 Ot<Xb;ߙxI%B9/s]A*c ,21h!x"qR(©m*nžУC[a[LыS3nPhXu䚇 ؈h6MZw8M9gƔz"]LI[Dݙ/9/2_Ux-'.L))37ŀgX18< 5ghdt@֒+Sۀ›]q!nu`i}kOu?ڟb3l?N˫􋓿"9Orz# 3;8Sfl\||}َoa?fEm7 _+b5K5EF(ؓb6n ))0E':AyX(whrEt.3ܴ?LɁ8&v`b`gK6>|]=-fâƴXDӀTժezFl; q9J1ݮ2Xq% y _@˥nnmGbP&hceǚ`pI$c̒9;̔,mNqEO\A7NլXw)k{> 0mB]N-)hYq $Nx[ϕ8N02O{{0qP20J?R& uJlez`4& PaOU2|\'qBr⃪ gC&+Wuo5)9DQAfF"CiǠrM-aIDo#|hӮ64xw9[ +ΗX,70 LbRg"gGshtZ~:|A[iknpG֏Ck圥8z׭A|z &b\90g/a& 0xl!o`xU׊/%@"Dňa٨.d"MF~G &vohǖ bKP]^> Knևlj2qeř׭#J9 b3=Wò zr\+1ޕG] QeGm?<:na.ʼ x6$1/UiFR@X g_lZ.j(I0}+\`XMM 4N@/,uc64apZoqL"Q˨jJуm1){J|{m\=uߡҌD+u?:uȭ12ߴ(A$RB>Y&E|Vd>">LC&0;"`yQTVZɍb3XNEӺg MFZ^ܿC:8)X˨(iY=RrYlvnϓDs0>|551VP 4+3,3 0f2;1i$gϏW^H$*Kum[ k JHT9UFaѝe@s95cKMj,@)Lؐ 'V7V6 $E9l!YAֹU޴SCNOiيHو'E@2N r3XQdvU \ruئ?x =jwww2|,#^ު f?W췷"w95g0k'3 ǚ?2ʣ{,mEN fàAf<6%i~ $ L3„$fz@ ꃕ&)%@6puazH5Iӥɀ#Q?]n& gB\[ˊO@݈S N0>g=Fmt%L/ z7^h3>7xny>*zzږ4nr ߵ'yX/cK/W=sTg1͓~8αMr~qzɏRlrTu6u=<1qfgN=3la")usP#99G 륱SiFQ : /lDmѠ w3VHch2u(h=O^k9)Sk]la2=_ڋ-$ AW;E%˹KUTK#c8<-Z,eƅO,+pN-Ӧ, rb"p‹= WX(e"p:} @5 .g(|trۙ7t:4dt,xi&nW2e&nw9MwrꓘM(G1]Oسð _gi|<Gpei22x- 3^ڎ̍"М*8]L_=zPk{'As(N칒V8h" /;58H}z ц5^g{TpRE<s{QW_S`]\{B8tY(ZYL‹[滐lu@ccX/4%sJg$l6fKMs(DRhbM>s&U0I4L:{ :K=[l@MEɯ!9J:چ VB@@'m6)mBp#F#Ƀ́DUTݿ3y҇fmVf#K9f@_K,Ui5sqn_X[Ϥ)W?pg0Ϊ {"Qx5rN,ջ8NLGL4|j:^P,{&NqI:`w[ D@}̵.d!ۧk?Ew u6,LH5Q{trV點ɲEa{:*_P畹))Nc-X-'.=FO,6;eۦHy$-cSl:Av8| qlD8+":^A];#L{^+*%S*co;hۄę$D(\[LU ZEBܺuk@_yJ7S1Ӳ%QgO]f)&vEJ[ r(yj$Ŀ q4gxe"f8ІܰO.72T5 W6G΢2꬀a r#h<%VNw*+gZ3/PzKFr ̛S@6V{vӊ;*=L7q:A?v}Mk}_y}O6s@hiiKpѶi}jBkj|n;ً:D>+Qzp-1HnjoB 5#ĝ KQX\:݆} "lrO\{Ǥs0Qa3_ARw鉻?QZS(hB<ā]gd=& s@ԊBr㭦Ђ'ٌouND(<ߵ yԗ6z{5˅ D-7u Mʛk2 ZL K/% 44m̃Mg5tL^=*&$)AStCfI%7-7qh;-EOKt\m[M l:Riт$~L2LZoeZtݮqZ0Ţh4t۸]$v޳]K!w[J 6Fƹ[|[LW/DZ2u) _ wA_c]`PuݭvF}WaZ @|T^l>#pd3,#QĝGMS.#[|dN-}m6gHVC_oZ ;i%>j_~qKxߌ+ AZ'oc@ݝ^&=vvӬJKm-_ [ l geح\a&Ɠ^X`E|"u] #)<2hjVEɤF/d)t_0fIXwa_r;JNSLlDaزp.^KF\$Ta"p1{;l^f%gܓ[p@t~1;?~ĩEG .;`;ۗ{"ok<ވ6\KΚ"\Z2ڍnAM%9^KfK؟ 0)k331p‰E]W3bs f6HIK20L<|W(zѐb 3w\XJǺm Gmv5V0+ 7 m jW=a.f[/r Բqu"`&yŚLenւ2Pv_9wd5Z6rE~Ab(0?2>?LY'dߚtn箾ԠzܣZ59woޯY7o{W?dfgEv JsIGt{^NŎ_eX&yUeۤN?7y 3Uu&yl⅗#'m7T:#*/ wb`m  C0]N]I_/94^~aY35sz05VpkEjyǫ2W ӻp@%Hb  ^dnĠ5u{(S&*C J}}:qʣƊvQ4**KѨVH >ڡD MnJ8!g.YEI O:Ʋt#Ƞ#2PI&"]20aJs%"='na Ƽc̋~9ē'h%L걁gK3+眷z"EWC= w6ou䷙$Z>ԣak6qwtDp}J#粏ed[1^h6QDE:GwTM1 j8ަJxMA(as]{VN3+RgiRj2c׶O1pz2F ^\R`ՓIÏMFG'F59WtdG 9Fo䛁f-m# `NWN=~S*pZ 6?@Ifo\[QF!5YNXCԻ̻ҍ*ӾkYW_T8Pk_kwђ\ bq.s6͟-%d8gRr +S )jUV~}.^u.IN̉%fCHkI?xb F!H0xWN$iFXjt0CY` ü84M5X*?Ao0FAod1U_l@ +u[AoԢ-΍ZS5kjx֨~^VH;OK zDO 5%Mn?n\}ᱥswǽt{e[:dkߑmlx (۸^'Yzc(qmFr[#-d8L=N-W`dA_-koL~7ﶫ zцF`}H|!#bXGܟn7icR{fEYnvΰ, W]DuUsJ\h,΋L0da5@p1TIŹq@ʩД1}C1g?\ƉJkϷvkoY>$ނjn5?nΗyVrqֻLuf=.&"ǶHW"b ,1&xtYYp '6jscmgna/ɻ8˯"$ )źhOL)_nFr5S. R|.)]c3L'LaYǠWyқy;|% kea~^)5r+6>Mk_-.5:ޘ͖XϾ< q!UV T`kS[X8FFWXͼGhk~U~ bI."{bB_Ȅl ݚw/Ď}MZm`,8c 3$`ꪹ}K}<-f,mAsIsǕdbtкB^YI_KQWu:6u2Or%$61dd6[Ap//察nn b)7 n-BC]8g\@1P4wiw\_A CْL.7.Oͣ\!Wq`Mf1oxgp;+`#sު4řr(z,`9Yߞ#(p9o׍OpT$~7u{IWҀ~?m$ZvqnGV>7^31٘S#_;V7 gtibPyZetg:[ xQdNyzka!q0b%I>,{QzOrw W"SV+51=BFr~ZL_kR9S=咎dR[-zu;;_ 赀~hʍ7'g|@ۋήeZ<_Y>WC.5OQgN*ߺe, ;ΥjL”^Ƕ1ݜ !@,@**7ӡh|.JZIJ֫{[i\{ga795|-nWS_n8 iud6il})m\ɈQr? 1SS*B5HZ|3YO.YVo@`4'/g_c-yu}s-WJZ{m/Q7Mp3n*[,x3^3Vqx]̶7~4}ӆDtIq'i*֞O˅mw5n'mI{wõ~ h4%-vm-y/&l_cKvn_\h^-jK X1+S˄"RdR7E=H |Q\t0ҼѵZEJY˷­n/n@}H.d^B5{>yXܡ;xLu-|w/\}/$w:N4{ ( 2H#5kB [\-Pop]Q0tuSD1Wݪ/(Hlos{-2|eoqc^']KՖF Hk-f;"X1ORIi [<~F`S)#-V*6dK|{-WUJWAq742KjKQ/U$dCsk'.u{ĵ@] ԕ(!ݕ%]^ӵ<}H7U""%g(!^Ub+ˊ AɔD3) %wlݰIrյ\^K*$E"]9v%K"s;ɸL*3psƍ.yxZ%}'zy[wq w3C zՍ\l¿Ǝ2ŝ`]ĕzgF={ḨRV[X qN%LqPy'x:ň/B5آ;aO$^$ IQVY^`ҳ-E{MG4O{QthÇө[W*d]}׍g3XueHC Ǘ@CACx:U+jRQؙEX6LK! DS^Z e %trL̈VE jcsXh5|3:isLբIYV#Q)z³Qkn <(:( ܢ6@OuzQٳuYјa]g>, ZUE2fZ.7w-p< NdFf{"@n8 ܗVl8o꺙GĒ1h8g%5!$ f͞:\pD5YTSZ=lhKPέFȪ4kpU b )<lZ)aRhB$s&ED^26y5LOy*Ö*hCbۖ釨+܍yr}鱬UJFGmi  FUcYOiG4҈1l>ouPNO& *D\U݉q'O!NL̡#NϢu&"fv#Mfae$D)I"V' gX4N$^Hi.F}\ 6ieoaŰ!쉃1U;fQ.a#헜fYa+e(+3<,3k ,*.'N <[CrDE{$>)opԸ>8:5R }8^Lcb:W&Zf"+5Ŷ?yPPdm qN=<,`! ߼J;ʁ[S|& AM99 qi14\yPپf\,Q8WGϟ5ѩY"f젺| c }v#ס0ʮyeֽáCPT2,cGG<'oÒMPLɯ"t'˂{j<@p)avw3(efhri{ >^$>a8oDzq;KIoY}o 68[#\VE^].U\\]XzV:A R?ŋg~3= ʥƭ 89/QV͟f^Z~mqrUƔ,.tu$W!aֱJc6 J7.zq|E%X91mlE`79R^]BTxyYf&5Kz? t"w}>\m%| .*0FΩ{V wlU[`֯]Cïѵ{y;2!;y :ZT~bԆs R/pۊw $B%K$?f~CuS#mᒹ)QX6JgmeiR\{E'#^VK2'B|lc4E`{;JI<4 _ S9y,fu{.mwQz㜎VU9&lI\\LJ4l~ ̘ V-29hxԡP@XE7~B^Gg*`803&̞!'YPx&{T_fCfWN2VFy{4W:$I#jb]=1G2 = < вL 52@rau)7mWS RJrl ue(70g:7TOC'DVFKUw sܳݧ/d2}lxCE%rfU[ώ  hƲ>]V.Y?I>>O_}]߶D cd#lF`U}cz=Q  'kĨn qf'|e?.imTy2x$ꍮc*\&0_q*C}_7xrԿπ>٢ѯxnfy*clx|GU)|[I/cӼnvKP@*iʹ"ʼnUL۲ꦈYi.zdna6ra܀l{{שqpots>5. ^KN".ᷣFMn~v/M4wpeۨj@R :FtjcXMd^ :'3eO*bƴAן&&ӜTD` w]C)$']c.Y:o Iq锤1sL>g/cȶ>p qSbfcc=膩iUE4a22<8)׊'\TeL94kN 9nԹ?;u B[[o:i͐*%YUx>|뒺5 y~xj_GaTFDYG/tw[")CF; TM+N)LbZldFGO=g3sfch!?gG[Fd}`៟⸐xd2D} <؏v۷k9w^~rv ;d6]:#Q3t~h LE5g#^PM<.S@MVe(S rډa8cG+È_dSŜiA.߂Owѧxm<r|)uEfK|jԻ`nX1e,f#iXn6KV瀲àM2)ixGBm-}5CHy0m9M9k ;X2 tMCh%ЙNSo8gA=DH"M3|^Tds"S>S0UV isQp(o%3OrPS):,;rLk.i^+Yۚv5@P6={n'Hxd$iFE-~ZďnGzk2,8O݆-&7h7} gb -I/PSNw w^GFܖ4=&4"~|݆?so񚠕F^xLRܼI{~Z<-e8<.P6^欓vmЈX|}%ݾ7m;H:]fqt N\&͊@/d<@EBDJ (G($`h?Z.RnL'yj|SV2'3~CDItҎ$Š=Ĵa9Hm{AM (2Ç&{ZL4LE:}i OG[ٷN2!RbZT;J7'YH>u+8_mcǝG<exw#Ϧ#b ^lԔ5GQz!ZEGE &yIt37ٔf)% eE*.h0M`gv c#Ex ;lmB #f0hFtiu͡mHP>?#,m|Κf&a!%ϵ0wʣO&y%gRS7>2/AMP-Z0XDCb>4՝R`˕xh#A;d`_%55k=X^\ƝSAM6 w^ax g;QڭC>gL]P \k(3Pd3wWzV S`.*Z)Ա`)w\DjL"Kc ѡRnՐmU)iffFtvP `tfz w 90PsUa=#Hl'ߕw[mHk8]nlb3 U:k4oZ 8H_AeX܂$M66sUa\#<$<ɖu q#(!qk>/QE 1""1[̼] ZU-4DjS O]}Qa̅+y7hvzOCTh>L4r"Z}r߀Z3F0R.:BU>؟SU;~cnya') &zاb2N9x y%\Qj?ײ"sF0}^w6C:;SU& ]Z/Ţ%^is[P0gq">ahn8T45A\9d;f."|x 7YiaPdi qoSOZ!x}~|NO1݂=Uȃz.{v zfQC1CKM4,Lk#?Bv&|n*K@ >an#&P~z{Chg@\ӜiIKCSg"%ϴ{JX f)\ Sh6X=usf¦3T+!0)\+XhNCQim99W*&h//2 ^K1߅*x{y5[/tp(qj  #cfi=sk)'ʑI 6%/38󲵬x,@zc=@tc*m&\{' |plhwo4~_'{'q4v~av]-6xv,F㹒;!?y k~v9|*7s Y_8oxLY0V8`O㪰È+E҆V8vo# y55]qVAdR2ղiA ϳ76ÜP2FQhe= 4A7؆A0x #(d͘qUȏs ֥ L "H je3#7混( 6%F*$c,WPhjSM32CW5g"d'7B}兰nAT(*R.K!!Wq+K( polcY49ˡs.* Ex% U-wrsHUb,T6΢"*/%FcD5w&U{%E-HV| 2 Q#9 fr,I!s: l]O Wx't5]ћ!ϴ(i Fvh)Bmӈ8 ~.۟r Ai5%!|}x(2K2gi ꗠQnb.6Шmź:u>aLH^u~}䈓t+_sCP3IHPY^FZʨ`\(h8l-)͙p2k)= 08Wy7o£~ˑN7b2nd`RSa:NץxD96-Uo>xazBK= xUL`sžMo;#.0|c:HNkqNWG;-hz9GF =>_xD j‹э.evc2 t׹v\kO2r^kHẙ^e ėC2*;7PI'o{V.1uXoio' .Ɍ3Hz2'uq8B{PKPKP0&org/jibble/pircbot/ReplyConstants.javaYQoF~G?N}h&$wW1 qc{mBy0FIU]/t'vvfYOX2{|,oosZ1_E~ʆggctʞzw￾f۴Wnۉmm{5+6lԯIB}yҼJק,n,doŞ[=E~MӜO)ngill`؏әK5J s\e(WZw tₕiU٪^R)J峜%lW2K|cn:u; [Thɶ*$%[G?3VIڻM z{_?5}}fa۾9E^I^WKr6.zxq=(,{' ._c@g~|(OIN4$UIWӗd ,߃s Z%..]e,]:*]#.$"8l0:10g3f_؅=\}Q%TQZƒ0vs \KgMV&Uu%$16UF*JZl W^}d\I[K %Eש,~Z! w%X\TF6T/ϖ|~+8^G%fm9f>2I9Sv*x=gxYm"BO=+/6d,xhsǾAέCE@9 .XH,G`,oK/B9ojQZ>4Ifi#&Q<7r$!RQ@ˤ(e:FEs؍#F!7CQ~QC:'yI?CrA^R).h2?ᭈ\P?hv"Fx서H_F\mRf5h2M)>ԥc̭sxH$QwciDQ!{nS8CA\$uIynᒖʒ HAxvF↽禡s gޟqh;@6ݵ quNfAѭ}!~CP[| HȎ6eUW6ΰ3/Lyb;dt0l J7/(W(Pkm $034!m[C4])2Ů0@ [ғtQMo01Cy%(T)&9s )uF'"c #!Bau,=8!Hg(LYY@p#,0f(yJxb4"bJ4b7TdC!/ܙ; X?-RF̶HU:["i@aR^X7G:+>b:RuzǼ6ҤfKJj1H@vT (wpvDaΒNu4?@(Yyw CZC֩Ө8{#UFCINSfV8kvcB.oJ@8jt]Q6KD*!EѭNֱTVٜ>BPVMfak,PSӬ{w֦Lԑf#a5U( nT5I;Z)L5Gqe;FR{x"z3s}^ 6eP (9aKїx!Hg+֪_)K%ѿPKPKP0org/jibble/pircbot/User.javaWmo9)aT!I* ;B+(9'k/7itx}I)ĩxyS'XGq kp8z^!62I#n۹NH9i jWB*fv4 M >OE̥>4UK!RXq0vɹp89kU1AewvuLNIr=@8UYu,P-cH_{u[/t@scXp) ZZp X{f"0k!'#Krj 1>iDYIT0j' (=&;'p>7utQ4z{1F/az|r<yos?؜)]HD#yppqʌq!4SG9ƥEpM)9H\u֖\Ehn -dE̹u89%} WM^>+HET9%<j*9qDyTʌ/ɞ$@a4K-7 g{m_3`>ָ "+/D~'5wH{7G |=9@B]Ĉ jrc Ka\!Rb󙸥(E#*+3'F&0lS ~e};ً6qҦn%9/.W_>NuL=CTANs;ןoUnG տ/A3!8?'`& ;V C}D=,N<;cSgtT5p_ --Ll7*(l<2V>%T)& +2[#5}Y&ōî^ٴ0k2r<ڑV*[$]XjeЉ)ՆCS4D0}DBN>=PY(]+"); for (int i = 0; i < words.length; i++) { Node target = new Node(words[i]); if (g.contains(target)) { //g.setCaption(this.toString() + " awarded weighting of " + getHeuristicWeighting() + " to " + source + " - " + target); g.addEdge(source, target, getHeuristicWeighting()); break; } } } }piespy-0.4.0.orig/org/jibble/socnet/DirectAddressingInferenceHeuristic.java0000600000175000017500000000267610050235610026663 0ustar bdonlanbdonlan/* Copyright Paul James Mutton, 2001-2004, http://www.jibble.org/ This file is part of PieSpy. This software is dual-licensed, allowing you to choose between the GNU General Public License (GPL) and the www.jibble.org Commercial License. Since the GPL may be too restrictive for use in a proprietary application, a commercial license is also provided. Full license information can be found at http://www.jibble.org/licenses/ $Author: pjm2 $ $Id: DirectAddressingInferenceHeuristic.java,v 1.2 2004/05/11 15:45:59 pjm2 Exp $ */ package org.jibble.socnet; public class DirectAddressingInferenceHeuristic extends InferenceHeuristic implements java.io.Serializable { public DirectAddressingInferenceHeuristic(Graph g, Configuration config) { super(g, config); } public void infer(String nick, String message) { Graph g = getGraph(); Configuration config = getConfig(); double weighting = getHeuristicWeighting(); Node source = new Node(nick); String[] words = message.split("[\\s\\t\\n\\r\\f\\:\\.\\(\\)\\-\\,\\/\\&\\!\\?\"\"<>]+", 2); Node target = new Node(words[0]); if (g.contains(target)) { //g.setCaption(this.toString() + " awarded weighting of " + getHeuristicWeighting() + " to " + source + " - " + target); g.addEdge(source, target, getHeuristicWeighting()); } } }piespy-0.4.0.orig/org/jibble/socnet/AdjacencyInferenceHeuristic.java0000600000175000017500000000251510047742040025324 0ustar bdonlanbdonlan/* Copyright Paul James Mutton, 2001-2004, http://www.jibble.org/ This file is part of PieSpy. This software is dual-licensed, allowing you to choose between the GNU General Public License (GPL) and the www.jibble.org Commercial License. Since the GPL may be too restrictive for use in a proprietary application, a commercial license is also provided. Full license information can be found at http://www.jibble.org/licenses/ $Author: pjm2 $ $Id: AdjacencyInferenceHeuristic.java,v 1.2 2004/05/10 13:04:16 pjm2 Exp $ */ package org.jibble.socnet; public class AdjacencyInferenceHeuristic extends InferenceHeuristic implements java.io.Serializable { public AdjacencyInferenceHeuristic(Graph g, Configuration config) { super(g, config); } public void infer(String nick, String message) { Graph g = getGraph(); Configuration config = getConfig(); double weighting = getHeuristicWeighting(); if (_lastNick != null) { //g.setCaption(this.toString() + " awarded weighting of " + getHeuristicWeighting() + " to " + nick + " - " + _lastNick); g.addEdge(new Node(nick), new Node(_lastNick), getHeuristicWeighting()); } _lastNick = nick; } private String _lastNick = null; }piespy-0.4.0.orig/org/jibble/socnet/Node.class0000600000175000017500000000277010050247542021021 0ustar bdonlanbdonlan.L 5 6 7 89@ : ; < = >? @ AB AC ADEF_nickLjava/lang/String;_lowerCaseNick_weightD_x_y_fx_fy(Ljava/lang/String;)VCodeLineNumberTablesetX(D)VsetYsetFXsetFYgetX()DgetYgetFXgetFYtoString()Ljava/lang/String; setWeight getWeightequals(Ljava/lang/Object;)ZhashCode()IsetNick SourceFile Node.java G 2 H I&     org/jibble/socnet/Node J ./ 01 K+java/lang/Objectjava/io/Serializable()Vjava/lang/Mathrandomjava/lang/String toLowerCase! c/**+**k*k* * " $). !"*'  "!"*' #$#!"*'  '($!"*'  +,%&*/'&*3(&* 7)&* ;*+* ?,!"*' CD-&*G./>+ + M* , KL MO01 * S21*+ **  WXY34piespy-0.4.0.orig/org/jibble/socnet/TestMain.java0000600000175000017500000000415110050231150021453 0ustar bdonlanbdonlan/* Copyright Paul James Mutton, 2001-2004, http://www.jibble.org/ This file is part of PieSpy. This software is dual-licensed, allowing you to choose between the GNU General Public License (GPL) and the www.jibble.org Commercial License. Since the GPL may be too restrictive for use in a proprietary application, a commercial license is also provided. Full license information can be found at http://www.jibble.org/licenses/ $Author: pjm2 $ $Id: TestMain.java,v 1.5 2004/05/11 15:07:04 pjm2 Exp $ */ package org.jibble.socnet; import java.util.*; import java.io.*; public class TestMain { public static void main(String[] args) throws Exception { Random rand = new Random(1234); Properties p = new Properties(); p.load(new FileInputStream("./config.ini")); SocialNetworkBot bot = new SocialNetworkBot(new Configuration(p)); bot.onMessage("#static", "Dave", null, null, "Hi."); bot.onMessage("#static", "Paul", null, null, "Hi."); bot.onMessage("#static", "Monty", null, null, "Hi."); bot.onMessage("#static", "Dave", null, null, "Paul, Hi."); bot.onMessage("#static", "Paul", null, null, "Hi Monty"); bot.onNickChange("Paul", null, null, "Paul2"); bot.onMessage("#static", "Dave", null, null, "Paul, hi!"); bot.onMessage("#static", "Paul2", null, null, "Dave"); bot.onMessage("#static", "Paul2", null, null, "Dave"); bot.onMessage("#static", "Paul2", null, null, "Dave"); bot.onMessage("#static", "Paul2", null, null, "Dave"); bot.onMessage("#static", "Paul2", null, null, "Dave"); bot.onMessage("#static", "Paul2", null, null, "Dave"); //String[] nicks = {"a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"}; //for (int i = 0; i < 80; i++) { // bot.onMessage("#static", nicks[rand.nextInt(nicks.length)], null, null, nicks[rand.nextInt(nicks.length)] + ": hi!"); //} } }piespy-0.4.0.orig/org/jibble/socnet/Edge.java0000600000175000017500000000324410050225564020611 0ustar bdonlanbdonlan/* Copyright Paul James Mutton, 2001-2004, http://www.jibble.org/ This file is part of PieSpy. This software is dual-licensed, allowing you to choose between the GNU General Public License (GPL) and the www.jibble.org Commercial License. Since the GPL may be too restrictive for use in a proprietary application, a commercial license is also provided. Full license information can be found at http://www.jibble.org/licenses/ $Author: pjm2 $ $Id: Edge.java,v 1.6 2004/05/11 14:37:23 pjm2 Exp $ */ package org.jibble.socnet; public class Edge implements java.io.Serializable { public Edge(Node source, Node target) { // Note that this graph is actually undirected. _source = source; _target = target; _weight = 0; } public void setWeight(double weight) { _weight = weight; } public double getWeight() { return _weight; } public Node getSource() { return _source; } public Node getTarget() { return _target; } public boolean equals(Object o) { if (o instanceof Edge) { Edge other = (Edge) o; return (_source.equals(other._source) && _target.equals(other._target)) || (_source.equals(other._target) && _target.equals(other._source)); } return false; } public int hashCode() { return _source.hashCode() + _target.hashCode(); } public String toString() { return _source + " " + _target + " w(" + _weight + ")"; } private Node _source; private Node _target; private double _weight; }piespy-0.4.0.orig/org/jibble/socnet/BinarySequenceInferenceHeuristic.class0000600000175000017500000000270510050247542026546 0ustar bdonlanbdonlan.Y )* + , - . / 0 1 2 34 + 56 57 0 1 389 : ;< =>?@ MIN_SEQ_SIZEI ConstantValue nickHistoryLjava/util/LinkedList;=(Lorg/jibble/socnet/Graph;Lorg/jibble/socnet/Configuration;)VCodeLineNumberTableinfer'(Ljava/lang/String;Ljava/lang/String;)V SourceFile%BinarySequenceInferenceHeuristic.java !"java/util/LinkedList !A  BC DE FG HI JK LM NOjava/util/HashSetP QR SMjava/lang/Stringorg/jibble/socnet/Node !TU VW XA2org/jibble/socnet/BinarySequenceInferenceHeuristic$org/jibble/socnet/InferenceHeuristicjava/io/Serializable()VgetGraph()Lorg/jibble/socnet/Graph; getConfig#()Lorg/jibble/socnet/Configuration;getHeuristicWeighting()Dadd(Ljava/lang/Object;)Zsize()I removeFirst()Ljava/lang/Object;iterator()Ljava/util/Iterator;java/util/IteratorhasNext()Znext(Ljava/lang/String;)Vorg/jibble/socnet/GraphaddEdge4(Lorg/jibble/socnet/Node;Lorg/jibble/socnet/Node;D)Zclear! !"#2*+,*Y$;%&# *N*:*9*+W* * W* : Y :WD:  :  : -Y Y *W*$F !#$%%-&6'?(I)Y+b/i0u1359'(piespy-0.4.0.orig/org/jibble/socnet/InferenceHeuristic.class0000600000175000017500000000325410050247542023710 0ustar bdonlanbdonlan.^ 2 3 4 5 678 9:; 2< => ? 5 @A B C DE FG FHIJK _weightingD_graphLorg/jibble/socnet/Graph;config!Lorg/jibble/socnet/Configuration;=(Lorg/jibble/socnet/Graph;Lorg/jibble/socnet/Configuration;)VCodeLineNumberTablegetHeuristicWeighting()DgetGraph()Lorg/jibble/socnet/Graph; getConfig#()Lorg/jibble/socnet/Configuration;toString()Ljava/lang/String;hashCode()Iequals(Ljava/lang/Object;)Zinfer'(Ljava/lang/String;Ljava/lang/String;)V SourceFileInferenceHeuristic.java L   ()M NOjava/lang/ExceptionP QRjava/lang/StringBuffer#Could not find a set weighting for ST: SUV WX  YZ[ \)] *+ ,-$org/jibble/socnet/InferenceHeuristicjava/lang/Objectjava/io/Serializable()Vorg/jibble/socnet/Configuration getDouble(Ljava/lang/String;)Djava/lang/SystemoutLjava/io/PrintStream;append,(Ljava/lang/String;)Ljava/lang/StringBuffer;,(Ljava/lang/Object;)Ljava/lang/StringBuffer;java/io/PrintStreamprintln(Ljava/lang/String;)VgetClass()Ljava/lang/Class;java/lang/ClassgetNamejava/lang/String! L**+*,J*:,J):Y     *) !.   "F!K""# *!%$% *!)&' *!-() *!1*+ *!5,- ! *+!9./01piespy-0.4.0.orig/org/jibble/socnet/SocialNetworkBot.java0000600000175000017500000002653010050247252023177 0ustar bdonlanbdonlan/* Copyright Paul James Mutton, 2001-2004, http://www.jibble.org/ This file is part of PieSpy. This software is dual-licensed, allowing you to choose between the GNU General Public License (GPL) and the www.jibble.org Commercial License. Since the GPL may be too restrictive for use in a proprietary application, a commercial license is also provided. Full license information can be found at http://www.jibble.org/licenses/ $Author: pjm2 $ $Id: SocialNetworkBot.java,v 1.34 2004/05/11 17:07:37 pjm2 Exp $ */ package org.jibble.socnet; import org.jibble.pircbot.*; import java.util.*; import java.awt.image.BufferedImage; import java.io.*; /** * SocialNetworkBot extends PircBot to connect to IRC. It maintains a * collection of Graph objects - one per channel. */ public class SocialNetworkBot extends PircBot { public static final String VERSION = "PieSpy 0.4.0"; public SocialNetworkBot(Configuration config) throws IOException { this.config = config; // Prevent construction if the output directory does not exist. if (!config.outputDirectory.exists() || !config.outputDirectory.isDirectory()) { throw new IOException("Output directory (" + config.outputDirectory + ") does not exist."); } } // Overriden from PircBot. public void onMessage(String channel, String sender, String login, String hostname, String message) { if (config.ignoreSet.contains(sender.toLowerCase())) { return; } add(channel, sender); // Pass the message on to the InferenceHeuristics in the channel's Graph. String key = channel.toLowerCase(); Graph graph = (Graph) _graphs.get(key); graph.infer(sender, Colors.removeFormattingAndColors(message)); } // Overriden from PircBot. Private messages can control the bot. protected void onPrivateMessage(String sender, String login, String hostname, String message) { // Only allow access if the correct password has been supplied. if (!message.startsWith(config.password)) { sendMessage(sender, "Incorrect password."); return; } message = message.substring(config.password.length()).trim(); String messageLc = message.toLowerCase(); if (messageLc.equals("stats")) { // Tell the user about the Graphs currently stored. Iterator keyIt = _graphs.keySet().iterator(); while (keyIt.hasNext()) { String key = (String) keyIt.next(); Graph graph = (Graph) _graphs.get(key); sendMessage(sender, key + ": " + graph.toString()); } } else if (messageLc.startsWith("raw ")) { // Send a raw line to the IRC server. sendRawLine(message.substring(4)); } else if (messageLc.startsWith("join ")) { // Join a new channel. joinChannel(message.substring(5)); } else if (messageLc.startsWith("part ")) { // Part the specified channel. String channel = message.substring(5); partChannel(channel); _channelSet.remove(channel.toLowerCase()); } else if (messageLc.startsWith("ignore ") || messageLc.startsWith("remove ")) { // Add a user to the IgnoreSet and remove them from all Graphs. String nick = message.substring(7); config.ignoreSet.add(nick.toLowerCase()); Iterator graphIt = _graphs.values().iterator(); while (graphIt.hasNext()) { Graph g = (Graph) graphIt.next(); boolean changed = g.removeNode(new Node(nick)); if (changed) { g.makeNextImage(); } } } else if (messageLc.startsWith("draw ")) { // DCC SEND the latest file for a channel. StringTokenizer tokenizer = new StringTokenizer(message.substring(5)); if (tokenizer.countTokens() >= 1) { String channel = tokenizer.nextToken(); Graph graph = (Graph) _graphs.get(channel.toLowerCase()); if (graph != null) { try { File file = (File) graph.getLastFile(); if (file != null) { sendMessage(sender, "Trying to send \"" + file.getName() + "\"... If you have difficultly in recieving this file via DCC, there may be a firewall between us."); dccSendFile(file, sender, 120000); } else { sendMessage(sender, "I have not generated any images for " + channel + " yet."); } } catch (Exception e) { sendMessage(sender, "Sorry, mate: " + e.toString()); } } else { sendMessage(sender, "Sorry, I don't know much about that channel yet."); } } else { sendMessage(sender, "Example of correct use is \"draw <#channel>\""); } } else { sendMessage(sender, "Sorry, I don't support that command yet."); } } // Overridden from PircBot. Treat channel actions as messages. protected void onAction(String sender, String login, String hostname, String target, String action) { if ("#&!+".indexOf(target.charAt(0)) >= 0) { onMessage(target, sender, login, hostname, action); } } // Overridden from PircBot. protected void onJoin(String channel, String sender, String login, String hostname) { add(channel, sender); if (sender.equalsIgnoreCase(getNick())) { // Remember that we're meant to be in this channel _channelSet.add(channel.toLowerCase()); } } // Overridden from PircBot. protected void onUserList(String channel, User[] users) { for (int i = 0; i < users.length; i++) { add(channel, users[i].getNick()); } } // Overridden from PircBot. protected void onKick(String channel, String kickerNick, String kickerLogin, String kickerHostname, String recipientNick, String reason) { add(channel, kickerNick); add(channel, recipientNick); if (recipientNick.equalsIgnoreCase(getNick())) { // The bot was kicked, so rejoin the channel (if possible). joinChannel(channel); } } // Overridden from PircBot. protected void onMode(String channel, String sourceNick, String sourceLogin, String sourceHostname, String mode) { add(channel, sourceNick); } // Overridden from PircBot. protected void onNickChange(String oldNick, String login, String hostname, String newNick) { changeNick(oldNick, newNick); } // Overridden from PircBot. public void onDisconnect() { while (!isConnected()) { try { reconnect(); } catch (Exception e) { try { Thread.sleep(10*60*1000); } catch (InterruptedException ie) { // do nothing } } } // We are now connected. Rejoin all channels. Iterator it = _channelSet.iterator(); while (it.hasNext()) { joinChannel((String) it.next()); } } private void add(String channel, String nick) { if (config.ignoreSet.contains(nick.toLowerCase())) { return; } Node node = new Node(nick); String key = channel.toLowerCase(); // Create the Graph for this channel if it doesn't already exist. Graph graph = (Graph) _graphs.get(key); if (graph == null) { if (config.createRestorePoints) { graph = readGraph(key); } if (graph == null) { graph = new Graph(channel, config); } _graphs.put(key, graph); } // Add the Node to the Graph. graph.addNode(node); } private void changeNick(String oldNick, String newNick) { // Effect the nick change by calling the mergeNode method on all Graphs. Iterator graphIt = _graphs.values().iterator(); while (graphIt.hasNext()) { Graph graph = (Graph) graphIt.next(); Node oldNode = new Node(oldNick); Node newNode = new Node(newNick); graph.mergeNode(oldNode, newNode); } } // Read a serialized graph from disk. private Graph readGraph(String channel) { Graph g = null; // Try and see if the graph can be restored from file. try { String strippedChannel = channel.toLowerCase().substring(1); File dir = new File(config.outputDirectory, strippedChannel); File file = new File(dir, strippedChannel + "-restore.dat"); ObjectInputStream ois = new ObjectInputStream(new FileInputStream(file)); String version = (String) ois.readObject(); if (version.equals(SocialNetworkBot.VERSION)) { // Only read the object if the file is for the correct version. g = (Graph) ois.readObject(); } ois.close(); } catch (Exception e) { // Do nothing? } return g; } public Configuration getConfig() { return config; } public Graph getGraph(String channel) { channel = channel.toLowerCase(); return (Graph) _graphs.get(channel); } public static void main(String[] args) throws Exception { Properties p = new Properties(); String configFile = "./config.ini"; if (args.length > 0) { configFile = args[0]; } p.load(new FileInputStream(configFile)); Configuration config = new Configuration(p); SocialNetworkBot bot = new SocialNetworkBot(config); bot.setVerbose(config.verbose); bot.setName(config.nick); bot.setLogin("piespy"); bot.setVersion(VERSION + " http://www.jibble.org/piespy/"); try { bot.setEncoding(config.encoding); } catch (UnsupportedEncodingException e) { // Stick with the platform default. } bot.connect(config.server, config.port, config.serverPassword); Iterator channelIt = config.channelSet.iterator(); while (channelIt.hasNext()) { String channel = (String) channelIt.next(); bot.joinChannel(channel); } } // HashMap of String -> Graph objects. private HashMap _graphs = new HashMap(); // Used to remember which channels we should be in private HashSet _channelSet = new HashSet(); private Configuration config; }piespy-0.4.0.orig/org/jibble/socnet/Edge.class0000600000175000017500000000245110050247542020774 0ustar bdonlanbdonlan.C + , - ./ 01 023 + 45 67 89 :;<_sourceLorg/jibble/socnet/Node;_target_weightD3(Lorg/jibble/socnet/Node;Lorg/jibble/socnet/Node;)VCodeLineNumberTable setWeight(D)V getWeight()D getSource()Lorg/jibble/socnet/Node; getTargetequals(Ljava/lang/Object;)ZhashCode()ItoString()Ljava/lang/String; SourceFile Edge.java =   org/jibble/socnet/Edge> #$ %&java/lang/StringBuffer ?@ ?A w( ?B) '(java/lang/Objectjava/io/Serializable()Vorg/jibble/socnet/Nodeappend,(Ljava/lang/Object;)Ljava/lang/StringBuffer;,(Ljava/lang/String;)Ljava/lang/StringBuffer;(D)Ljava/lang/StringBuffer;!<**+*,* "*' *! !*%"!*)#$pL+F+M*,*,*,*,-. /J1%&(**`5'(G/Y *  *  * 9)*piespy-0.4.0.orig/org/jibble/socnet/Node.java0000600000175000017500000000414510047717606020644 0ustar bdonlanbdonlan/* Copyright Paul James Mutton, 2001-2004, http://www.jibble.org/ This file is part of PieSpy. This software is dual-licensed, allowing you to choose between the GNU General Public License (GPL) and the www.jibble.org Commercial License. Since the GPL may be too restrictive for use in a proprietary application, a commercial license is also provided. Full license information can be found at http://www.jibble.org/licenses/ $Author: pjm2 $ $Id: Node.java,v 1.9 2004/05/10 10:28:06 pjm2 Exp $ */ package org.jibble.socnet; public class Node implements java.io.Serializable { public Node(String nick) { setNick(nick); _weight = 0; _x = Math.random() * 2; _y = Math.random() * 2; _fx = 0; _fy = 0; } public void setX(double x) { _x = x; } public void setY(double y) { _y = y; } public void setFX(double fx) { _fx = fx; } public void setFY(double fy) { _fy = fy; } public double getX() { return _x; } public double getY() { return _y; } public double getFX() { return _fx; } public double getFY() { return _fy; } public String toString() { return _nick; } public void setWeight(double weight) { _weight = weight; } public double getWeight() { return _weight; } public boolean equals(Object o) { if (o instanceof Node) { Node other = (Node) o; return _lowerCaseNick.equals(other._lowerCaseNick); } return false; } public int hashCode() { return _lowerCaseNick.hashCode(); } public void setNick(String nick) { _nick = nick; _lowerCaseNick = _nick.toLowerCase(); } private String _nick; private String _lowerCaseNick; private double _weight; private double _x; private double _y; private double _fx; private double _fy; }piespy-0.4.0.orig/org/jibble/socnet/Configuration.class0000600000175000017500000001017110050247542022735 0ustar bdonlanbdonlan.% c b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b  N   U U  \ \ \ [  serverLjava/lang/String;portIserverPasswordnick channelSetLjava/util/HashSet; outputWidth outputHeightoutputDirectoryLjava/io/File; createCurrentZ createArchivecreateRestorePointsbackgroundColorLjava/awt/Color; channelColor labelColor titleColor nodeColor edgeColor borderColorpassword ignoreSettemporalDecayAmountDspringEmbedderIterationskcmaxRepulsiveForceDistancemaxNodeMovementminDiagramSize borderSize nodeRadius edgeThreshold showEdgesverboseencoding propertiesLjava/util/Properties;(Ljava/util/Properties;)VCodeLineNumberTable ExceptionsgetInt(Ljava/lang/String;)I getDouble(Ljava/lang/String;)DgetFile"(Ljava/lang/String;)Ljava/io/File; getBoolean(Ljava/lang/String;)ZgetColor$(Ljava/lang/String;)Ljava/awt/Color;getSet'(Ljava/lang/String;)Ljava/util/HashSet; getString&(Ljava/lang/String;)Ljava/lang/String; SourceFileConfiguration.java  Server efPort ghServerPassword ifNick jf ChannelSet kl OutputWidth mh OutputHeight nhOutputDirectory op CreateCurrent qr CreateArchive srCreateRestorePoints trBackgroundColor uv ChannelColor wv LabelColor xv TitleColor yv NodeColor zv EdgeColor {v BorderColor |vPassword }f IgnoreSet ~lTemporalDecayAmount SpringEmbedderIterations hK C MaxRepulsiveForceDistance MaxNodeMovement MinDiagramSize  BorderSize h NodeRadius h EdgeThreshold  ShowEdges rVerbose rEncoding f    java/io/File    , java/util/HashSet    ! java/util/NoSuchElementExceptionjava/lang/StringBufferConfig did not contain: "# $org/jibble/socnet/Configurationjava/lang/Objectjava/io/Serializable()Vjava/lang/IntegerparseIntjava/lang/Double parseDouble(Ljava/lang/String;)Vjava/lang/BooleanvalueOf'(Ljava/lang/String;)Ljava/lang/Boolean; booleanValue()Zjava/awt/Colordecodejava/lang/Stringsplit'(Ljava/lang/String;)[Ljava/lang/String;trim()Ljava/lang/String; toLowerCaseadd(Ljava/lang/Object;)Zjava/util/Properties getPropertyappend,(Ljava/lang/String;)Ljava/lang/StringBuffer;toString!bcd"efghifjfklmhnhopqrsrtruvwvxvyvzv{v|v}f~lhhhrrfT**+******  **  ** ************** **!"**#$**%&**'(**)***+,**-.**/0**123**45**627**829**:2;**<2=**>2?**@A**BC**D2E**FG**HI**JK$BC EFG'H1I;KELOMYNcOmPwRSTUVWXZ\^_`abc de!f+g5h?iIjSl[' *+M,L op[' *+M,M tu[+*+MNY,O yz[**+M,PQ ~- *+M,RN- i9*+M,STNUYV:6--2WXYW  06N**+ZM,[Y\Y]^_+_`a, ([piespy-0.4.0.orig/org/jibble/socnet/Graph.java0000600000175000017500000006056110050231150020777 0ustar bdonlanbdonlan/* Copyright Paul James Mutton, 2001-2004, http://www.jibble.org/ This file is part of PieSpy. This software is dual-licensed, allowing you to choose between the GNU General Public License (GPL) and the www.jibble.org Commercial License. Since the GPL may be too restrictive for use in a proprietary application, a commercial license is also provided. Full license information can be found at http://www.jibble.org/licenses/ $Author: pjm2 $ $Id: Graph.java,v 1.38 2004/05/11 15:07:04 pjm2 Exp $ */ package org.jibble.socnet; import java.util.*; import java.io.*; import java.awt.*; import java.awt.image.*; import java.text.*; import javax.imageio.ImageIO; /** * The Graph stores the Nodes and Edges, and InferenceHeurisics to allow * the structure of the graph to be modified. */ public class Graph implements java.io.Serializable { public Graph(String label, Configuration config) { _label = label; this.config = config; // The NumberFormat used to format frame numbers in filenames. _nf = NumberFormat.getIntegerInstance(); _nf.setMinimumIntegerDigits(8); _nf.setGroupingUsed(false); // Add InferenceHeuristics. These are processed in this order. _heuristics.add(new DirectAddressingInferenceHeuristic(this, config)); _heuristics.add(new IndirectAddressingInferenceHeuristic(this, config)); _heuristics.add(new AdjacencyInferenceHeuristic(this, config)); _heuristics.add(new BinarySequenceInferenceHeuristic(this, config)); } // Pass a message through the list of InferenceHeuristics. public void infer(String nick, String message) { if (config.ignoreSet.contains(nick.toLowerCase())) { return; } for (int i = 0; i < _heuristics.size(); i++) { InferenceHeuristic heuristic = (InferenceHeuristic) _heuristics.get(i); heuristic.infer(nick, message); } } // Add a Node to the Graph. public void addNode(Node node) { // Only add the Node to the HashMap if it's not already in there. if (_nodes.containsKey(node)) { node = (Node) _nodes.get(node); } else { _nodes.put(node, node); } // Increment the weight of the Node. node.setWeight(node.getWeight() + 1); } // Add an Edge to the Graph. Increment the weighting if it already exists. public boolean addEdge(Node source, Node target, double weight) { // Do not add self-edges or weights that are not positive. if (source.equals(target) || weight <= 0) { return false; } // Ensure both Nodes are in the Graph first. addNode(source); addNode(target); // Add the Edge to the HashMap, or find the existing entry. Edge edge = new Edge(source, target); if (_edges.containsKey(edge)) { edge = (Edge) _edges.get(edge); } else { source = (Node) _nodes.get(source); target = (Node) _nodes.get(target); edge = new Edge(source, target); _edges.put(edge, edge); } // Increment the edge weight. edge.setWeight(edge.getWeight() + weight); // The graph has changed. makeNextImage(); return true; } // Remove a Node from the Graph, along with all of its emanating Edges. public boolean removeNode(Node node) { if (_nodes.containsKey(node)) { // Remove the Node from the HashMap. _nodes.remove(node); // Remove all Edges that connect to the removed Node. Iterator edgeIt = _edges.keySet().iterator(); while (edgeIt.hasNext()) { Edge edge = (Edge) edgeIt.next(); if (edge.getSource().equals(node) || edge.getTarget().equals(node)) { edgeIt.remove(); } } return true; } return false; } // Merges oldNode and newNode by: // 1) Removing newNode from the Graph and removing all emanating Edges. // 2) Renaming the nick of oldNode to match the nick of newNode. public void mergeNode(Node oldNode, Node newNode) { if (!this.contains(oldNode)) { // If the oldNode is not in this Graph, we needn't do anything. return; } // Get the nick that we want to change to. String nick = newNode.toString(); // Remove the newNode from the Graph (and any emanating Edges). // Warning: Some nick changes only differ in case, so make sure // we're not inadvertantly removing oldNick, too! if (!newNode.equals(oldNode)) { removeNode(newNode); } // Important: HashMap keys are allocated to locations based on their // hashCode values when they are added. Such keys should ideally be // immutable, as they are assumed to return the same hashCode every // time. // Changing the nick of a Node object causes this contract to be // broken, which allows the HashMap to store duplicate Node keys. // This makes it necessary to rename a Node by first removing it // from the HashMap, then changing its nick, before finally putting // it back into the HashMap. // Likewise, the hashCode method for Edge depends on the hashCode // of its two Nodes, so all Edges emanating from the Node must // be removed from the HashMap before the Node is renamed. These must // then be put back into the HashMap after the Node has been renamed. // Create a List of Edges that will be affected by renaming oldNode. Iterator edgeIt = _edges.keySet().iterator(); LinkedList changedEdges = new LinkedList(); while (edgeIt.hasNext()) { Edge edge = (Edge) edgeIt.next(); if (edge.getSource().equals(oldNode) || edge.getTarget().equals(oldNode)) { changedEdges.add(edge); } } // Remove all affected edges from the HashMap. Iterator changedIt = changedEdges.iterator(); while (changedIt.hasNext()) { Edge edge = (Edge) changedIt.next(); _edges.remove(edge); } // Remove, rename and replace the oldNode in the HashMap. oldNode = get(oldNode); _nodes.remove(oldNode); oldNode.setNick(nick); _nodes.put(oldNode, oldNode); // Put all the affected edges back into the HashMap. changedIt = changedEdges.iterator(); while (changedIt.hasNext()) { Edge edge = (Edge) changedIt.next(); _edges.put(edge, edge); } if (getConnectedNodes().contains(oldNode)) { // The changed node is in the graph, so it needs redrawing. makeNextImage(); } } // Return true if the Graph contains the Node. // (This does not necessarily imply that the Node is visible). public boolean contains(Node node) { return _nodes.containsKey(node); } // Return true if the Graph contains the Edge. public boolean contains(Edge edge) { return _edges.containsKey(edge); } // Return the Graph's Node that has the same nick as the supplied Node. public Node get(Node node) { return (Node) _nodes.get(node); } // Return the Graph's Edge that matched the supplied Edge. public Edge get(Edge edge) { return (Edge) _edges.get(edge); } public String toString() { return "Graph: " + _nodes.size() + " nodes and " + _edges.size() + " edges."; } public String toString2() { return "Nodes:\n" + _nodes + "\nEdges:\n" + _edges; } // Apply the temporal decay to the Graph. public void decay(double amount) { // Decrease all Edge weightings and remove non-positive Edges. Iterator edgeIt = _edges.keySet().iterator(); while (edgeIt.hasNext()) { Edge edge = (Edge) edgeIt.next(); edge.setWeight(edge.getWeight() - amount); if (edge.getWeight() <= 0) { edgeIt.remove(); } } // Decrease all Node weightings, but do not allow them to be negative. Iterator nodeIt = _nodes.keySet().iterator(); while (nodeIt.hasNext()) { Node node = (Node) nodeIt.next(); node.setWeight(node.getWeight() - amount); if (node.getWeight() < 0) { node.setWeight(0); } } } // Returns the set of all Nodes that have emanating Edges. // This therefore returns all Nodes that will be visible in the drawing. private HashSet getConnectedNodes() { HashSet connectedNodes = new HashSet(); Iterator edgeIt = _edges.keySet().iterator(); while (edgeIt.hasNext()) { Edge edge = (Edge) edgeIt.next(); connectedNodes.add(edge.getSource()); connectedNodes.add(edge.getTarget()); } return connectedNodes; } // Applies the spring embedder. public void doLayout(int iterations) { // For performance, copy each set into an array. HashSet visibleNodes = getConnectedNodes(); Node[] nodes = (Node[]) visibleNodes.toArray(new Node[visibleNodes.size()]); Edge[] edges = (Edge[]) _edges.keySet().toArray(new Edge[_edges.size()]); double k = config.k; double c = config.c; // Repulsive forces between nodes that are further apart than this are ignored. double maxRepulsiveForceDistance = config.maxRepulsiveForceDistance; // For each iteration... for (int it = 0; it < iterations; it++) { // Calculate forces acting on nodes due to node-node repulsions... for (int a = 0; a < nodes.length; a++) { for (int b = a + 1; b < nodes.length; b++) { Node nodeA = nodes[a]; Node nodeB = nodes[b]; double deltaX = nodeB.getX() - nodeA.getX(); double deltaY = nodeB.getY() - nodeA.getY(); double distanceSquared = deltaX * deltaX + deltaY * deltaY; if (distanceSquared < 0.01) { deltaX = Math.random() / 10 + 0.1; deltaY = Math.random() / 10 + 0.1; distanceSquared = deltaX * deltaX + deltaY * deltaY; } double distance = Math.sqrt(distanceSquared); if (distance < maxRepulsiveForceDistance) { double repulsiveForce = (k * k / distance); nodeB.setFX(nodeB.getFX() + (repulsiveForce * deltaX / distance)); nodeB.setFY(nodeB.getFY() + (repulsiveForce * deltaY / distance)); nodeA.setFX(nodeA.getFX() - (repulsiveForce * deltaX / distance)); nodeA.setFY(nodeA.getFY() - (repulsiveForce * deltaY / distance)); } } } // Calculate forces acting on nodes due to edge attractions. for (int e = 0; e < edges.length; e++) { Edge edge = edges[e]; Node nodeA = edge.getSource(); Node nodeB = edge.getTarget(); double deltaX = nodeB.getX() - nodeA.getX(); double deltaY = nodeB.getY() - nodeA.getY(); double distanceSquared = deltaX * deltaX + deltaY * deltaY; // Avoid division by zero error or Nodes flying off to // infinity. Pretend there is an arbitrary distance between // the Nodes. if (distanceSquared < 0.01) { deltaX = Math.random() / 10 + 0.1; deltaY = Math.random() / 10 + 0.1; distanceSquared = deltaX * deltaX + deltaY * deltaY; } double distance = Math.sqrt(distanceSquared); if (distance > maxRepulsiveForceDistance) { distance = maxRepulsiveForceDistance; } distanceSquared = distance * distance; double attractiveForce = (distanceSquared - k * k) / k; // Make edges stronger if people know each other. double weight = edge.getWeight(); if (weight < 1) { weight = 1; } attractiveForce *= (Math.log(weight) * 0.5) + 1; nodeB.setFX(nodeB.getFX() - attractiveForce * deltaX / distance); nodeB.setFY(nodeB.getFY() - attractiveForce * deltaY / distance); nodeA.setFX(nodeA.getFX() + attractiveForce * deltaX / distance); nodeA.setFY(nodeA.getFY() + attractiveForce * deltaY / distance); } // Now move each node to its new location... for (int a = 0; a < nodes.length; a++) { Node node = nodes[a]; double xMovement = c * node.getFX(); double yMovement = c * node.getFY(); // Limit movement values to stop nodes flying into oblivion. double max = config.maxNodeMovement; if (xMovement > max) { xMovement = max; } else if (xMovement < -max) { xMovement = -max; } if (yMovement > max) { yMovement = max; } else if (yMovement < -max) { yMovement = -max; } node.setX(node.getX() + xMovement); node.setY(node.getY() + yMovement); // Reset the forces node.setFX(0); node.setFY(0); } } } // Work out the drawing boundaries... public void calcBounds(int width, int height) { minX = Double.POSITIVE_INFINITY; maxX = Double.NEGATIVE_INFINITY; minY = Double.POSITIVE_INFINITY; maxY = Double.NEGATIVE_INFINITY; maxWeight = 0; HashSet nodes = getConnectedNodes(); Iterator nodeIt = nodes.iterator(); while (nodeIt.hasNext()) { Node node = (Node) nodeIt.next(); if (node.getX() > maxX) { maxX = node.getX(); } if (node.getX() < minX) { minX = node.getX(); } if (node.getY() > maxY) { maxY = node.getY(); } if (node.getY() < minY) { minY = node.getY(); } } // Increase size if too small. double minSize = config.minDiagramSize; if (maxX - minX < minSize) { double midX = (maxX + minX) / 2; minX = midX - (minSize / 2); maxX = midX + (minSize / 2); } if (maxY - minY < minSize) { double midY = (maxY + minY) / 2; minY = midY - (minSize / 2); maxY = midY + (minSize / 2); } // Work out the maximum weight. Iterator edgeIt = _edges.keySet().iterator(); while (edgeIt.hasNext()) { Edge edge = (Edge) edgeIt.next(); if (edge.getWeight() > maxWeight) { maxWeight = edge.getWeight(); } } // Jibble the boundaries to maintain the aspect ratio. double xyRatio = ((maxX - minX) / (maxY - minY)) / (width / height); if (xyRatio > 1) { // diagram is wider than it is high. double dy = maxY - minY; dy = dy * xyRatio - dy; minY = minY - dy / 2; maxY = maxY + dy / 2; } else if (xyRatio < 1) { // Diagram is higher than it is wide. double dx = maxX - minX; dx = dx / xyRatio - dx; minX = minX - dx / 2; maxX = maxX + dx / 2; } } public BufferedImage drawImage(int width, int height, int borderSize, int nodeRadius, double edgeThreshold, boolean showEdges) { HashSet nodes = getConnectedNodes(); // Now actually draw the thing... BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB); Graphics2D g = image.createGraphics(); g.setColor(config.backgroundColor); g.fillRect(1, 1, width - 2, height - 2); g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); g.setColor(config.borderColor); g.drawRect(0, 0, width - 1, height - 1); width = width - borderSize * 3; // note the 3 (gives more border on right side) height = height - borderSize * 2; g.setColor(config.channelColor); g.setFont(new Font("SansSerif", Font.BOLD, 64)); g.drawString(_label, borderSize + 20, 80); g.setColor(config.titleColor); g.setFont(new Font("SansSerif", Font.BOLD, 18)); g.drawString("A Social Network Diagram for an IRC Channel", borderSize, borderSize - nodeRadius - 15); g.drawString(_caption, borderSize, height + borderSize * 2 - 5 - 50); g.setFont(new Font("SansSerif", Font.PLAIN, 12)); g.drawString("Generated by " + config.nick + " on " + config.server + " using " + SocialNetworkBot.VERSION, borderSize, height + borderSize * 2 - 5 - 30); g.drawString("Blue edge thickness and shortness represents strength of relationship", borderSize, height + borderSize * 2 - 5 - 15); g.drawString("http://www.jibble.org/piespy/ - This frame was drawn at " + new Date(), borderSize, height + borderSize * 2 - 5); // Draw all edges... Iterator edgeIt = _edges.keySet().iterator(); while (edgeIt.hasNext()) { Edge edge = (Edge) edgeIt.next(); if (edge.getWeight() < edgeThreshold) { continue; } double weight = edge.getWeight(); Node nodeA = edge.getSource(); Node nodeB = edge.getTarget(); int x1 = (int) (width * (nodeA.getX() - minX) / (maxX - minX)) + borderSize; int y1 = (int) (height * (nodeA.getY() - minY) / (maxY - minY)) + borderSize; int x2 = (int) (width * (nodeB.getX() - minX) / (maxX - minX)) + borderSize; int y2 = (int) (height * (nodeB.getY() - minY) / (maxY - minY)) + borderSize; g.setStroke(new BasicStroke((float) (Math.log(weight + 1) * 0.5) + 1)); int alpha = 102 + (int) (153 * weight / maxWeight); g.setColor(new Color(config.edgeColor.getRed(), config.edgeColor.getGreen(), config.edgeColor.getBlue(), alpha)); if (showEdges) { g.drawLine(x1, y1, x2, y2); } } // Draw all nodes... g.setStroke(new BasicStroke(2.0f)); g.setFont(new Font("SansSerif", Font.PLAIN, 10)); Iterator nodeIt = nodes.iterator(); while (nodeIt.hasNext()) { Node node = (Node) nodeIt.next(); int x1 = (int) (width * (node.getX() - minX) / (maxX - minX)) + borderSize; int y1 = (int) (height * (node.getY() - minY) / (maxY - minY)) + borderSize; //int newNodeRadius = (int) Math.log((node.getWeight() + 1) / 10) + nodeRadius; g.setColor(config.nodeColor); g.fillOval(x1 - nodeRadius, y1 - nodeRadius, nodeRadius * 2, nodeRadius * 2); g.setColor(config.edgeColor); g.drawOval(x1 - nodeRadius, y1 - nodeRadius, nodeRadius * 2, nodeRadius * 2); //g.setColor(Color.white); //g.drawString(node.toString(), x1 + nodeRadius + 1, y1 - nodeRadius); //g.drawString(node.toString(), x1 + nodeRadius - 1, y1 - nodeRadius); //g.drawString(node.toString(), x1 + nodeRadius, y1 - nodeRadius + 1); //g.drawString(node.toString(), x1 + nodeRadius, y1 - nodeRadius - 1); g.setColor(config.labelColor); g.drawString(node.toString(), x1 + nodeRadius, y1 - nodeRadius); } return image; } public int getFrameCount() { return _frameCount; } public String getLabel() { return _label; } public void setCaption(String caption) { _caption = caption; } public void setLastFile(File file) { _lastFile = file; } public File getLastFile() { return _lastFile; } public void makeNextImage() { _frameCount++; String strippedChannel = _label.toLowerCase().substring(1); File dir = new File(config.outputDirectory, strippedChannel); dir.mkdir(); doLayout(config.springEmbedderIterations); calcBounds(config.outputWidth, config.outputHeight); try { BufferedImage image = drawImage(config.outputWidth, config.outputHeight, config.borderSize, config.nodeRadius, config.edgeThreshold, config.showEdges); // Write the archive image. File file = new File(dir, strippedChannel + "-" + _nf.format(_frameCount) + ".png"); if (config.createArchive) { ImageIO.write(image, "png", file); _lastFile = file; } // Also save an image as channel-current.png. File current = new File(dir, strippedChannel + "-current.png"); if (config.createCurrent) { ImageIO.write(image, "png", current); if (!config.createArchive) { _lastFile = file; } } // Also serialize the graph object for later retrieval. if (config.createRestorePoints) { writeGraph(); } } catch (Exception e) { System.out.println("PieSpy has gone wibbly: " + e); e.printStackTrace(); } // Apply the temporal decay after each frame is created. decay(config.temporalDecayAmount); } // Serialize this Graph and write it to a File. public void writeGraph() { try { String strippedChannel = _label.toLowerCase().substring(1); File dir = new File(config.outputDirectory, strippedChannel); File file = new File(dir, strippedChannel + "-restore.dat"); ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(file)); oos.writeObject(SocialNetworkBot.VERSION); oos.writeObject(this); oos.flush(); oos.close(); } catch (Exception e) { // Do nothing? } } private String _label; private String _caption = ""; private HashMap _nodes = new HashMap(); private HashMap _edges = new HashMap(); private double minX = Double.POSITIVE_INFINITY; private double maxX = Double.NEGATIVE_INFINITY; private double minY = Double.POSITIVE_INFINITY; private double maxY = Double.NEGATIVE_INFINITY; private double maxWeight = 0; private Configuration config; private int _frameCount = 0; private File _lastFile = null; private ArrayList _heuristics = new ArrayList(); private NumberFormat _nf; }piespy-0.4.0.orig/org/jibble/socnet/BinarySequenceInferenceHeuristic.java0000600000175000017500000000426310050053716026361 0ustar bdonlanbdonlan/* Copyright Paul James Mutton, 2001-2004, http://www.jibble.org/ This file is part of PieSpy. This software is dual-licensed, allowing you to choose between the GNU General Public License (GPL) and the www.jibble.org Commercial License. Since the GPL may be too restrictive for use in a proprietary application, a commercial license is also provided. Full license information can be found at http://www.jibble.org/licenses/ $Author: pjm2 $ $Id: BinarySequenceInferenceHeuristic.java,v 1.3 2004/05/10 23:34:21 pjm2 Exp $ */ package org.jibble.socnet; import java.util.*; public class BinarySequenceInferenceHeuristic extends InferenceHeuristic implements java.io.Serializable { public static final int MIN_SEQ_SIZE = 5; public BinarySequenceInferenceHeuristic(Graph g, Configuration config) { super(g, config); } public void infer(String nick, String message) { Graph g = getGraph(); Configuration config = getConfig(); double weighting = getHeuristicWeighting(); nickHistory.add(nick); if (nickHistory.size() > MIN_SEQ_SIZE) { nickHistory.removeFirst(); Iterator nickIt = nickHistory.iterator(); HashSet uniqueNicks = new HashSet(); while (nickIt.hasNext()) { uniqueNicks.add(nickIt.next()); } if (uniqueNicks.size() == 2) { // This means only two people were seen chatting over the // last MIN_SEQ_SIZE lines in this channel, so we can assume // they were talking to each other. Iterator setIt = uniqueNicks.iterator(); String nick1 = (String) setIt.next(); String nick2 = (String) setIt.next(); //g.setCaption(this.toString() + " awarded weighting of " + getHeuristicWeighting() + " to " + nick1 + " - " + nick2); g.addEdge(new Node(nick1), new Node(nick2), getHeuristicWeighting()); nickHistory.clear(); } } } private LinkedList nickHistory = new LinkedList(); }piespy-0.4.0.orig/org/jibble/socnet/TestMain.class0000600000175000017500000000241610050247544021657 0ustar bdonlanbdonlan.K '( )* '+, - ./0 1 2345 6789:; <=>?()VCodeLineNumberTablemain([Ljava/lang/String;)V Exceptions@ SourceFile TestMain.java java/util/Random Ajava/util/Propertiesjava/io/FileInputStream ./config.ini B CD"org/jibble/socnet/SocialNetworkBotorg/jibble/socnet/Configuration E F#staticDaveHi. GHPaulMonty Paul, Hi.Hi MontyPaul2 IJ Paul, hi!org/jibble/socnet/TestMainjava/lang/Objectjava/lang/Exception(J)V(Ljava/lang/String;)Vload(Ljava/io/InputStream;)V(Ljava/util/Properties;)V$(Lorg/jibble/socnet/Configuration;)V onMessage](Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V onNickChangeK(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V!*  !"'˻YLYM,Y Y Y,N------------- J  0 <!H"T#`$l%v&'()*+,4#$%&piespy-0.4.0.orig/org/jibble/socnet/SocialNetworkBot.class0000600000175000017500000001632610050247544023371 0ustar bdonlanbdonlan.   v  v v t e e   t *  v   t * v * * * *    v v v     9   > > >  e v J * * v v *  v v v '   t v      e i h h h o i o t v t v t! v"# v$% v& t' v() t* t+ t, v- t./VERSIONLjava/lang/String; ConstantValue_graphsLjava/util/HashMap; _channelSetLjava/util/HashSet;config!Lorg/jibble/socnet/Configuration;$(Lorg/jibble/socnet/Configuration;)VCodeLineNumberTable Exceptions onMessage](Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)VonPrivateMessageK(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)VonActiononJoin onUserList/(Ljava/lang/String;[Lorg/jibble/pircbot/User;)VonKicko(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)VonMode onNickChange onDisconnect()Vadd'(Ljava/lang/String;Ljava/lang/String;)V changeNick readGraph-(Ljava/lang/String;)Lorg/jibble/socnet/Graph; getConfig#()Lorg/jibble/socnet/Configuration;getGraphmain([Ljava/lang/String;)V SourceFileSocialNetworkBot.java java/util/HashMap java/util/HashSet 01 23 43java/io/IOExceptionjava/lang/StringBufferOutput directory ( 56 57) does not exist. 89 : ; <9 => ?@org/jibble/socnet/GraphA BC D E FGIncorrect password. H IJ KL M9stats N> OPQ RST U3 VWjava/lang/String: raw X:join Y:part Z: [>ignore remove > \]^org/jibble/socnet/Node _` adraw java/util/StringTokenizer bJ c9 deTrying to send " f9`"... If you have difficultly in recieving this file via DCC, there may be a firewall between us. gh$I have not generated any images for  yet.java/lang/Exception Sorry, mate: 0Sorry, I don't know much about that channel yet.+Example of correct use is "draw <#channel>"(Sorry, I don't support that command yet.#&!+ ij kl m9 nGo p3 qr stjava/lang/InterruptedException uv w xy z{ |} java/io/File ~ -restore.datjava/io/ObjectInputStreamjava/io/FileInputStream   W PieSpy 0.4.0 java/util/Properties ./config.ini org/jibble/socnet/Configuration "org/jibble/socnet/SocialNetworkBot v   :piespy :*PieSpy 0.4.0 http://www.jibble.org/piespy/ :  :$java/io/UnsupportedEncodingException     org/jibble/pircbot/PircBotoutputDirectoryLjava/io/File;exists()Z isDirectoryappend,(Ljava/lang/String;)Ljava/lang/StringBuffer;,(Ljava/lang/Object;)Ljava/lang/StringBuffer;toString()Ljava/lang/String;(Ljava/lang/String;)V ignoreSet toLowerCasecontains(Ljava/lang/Object;)Zget&(Ljava/lang/Object;)Ljava/lang/Object;org/jibble/pircbot/ColorsremoveFormattingAndColors&(Ljava/lang/String;)Ljava/lang/String;inferpassword startsWith(Ljava/lang/String;)Z sendMessagelength()I substring(I)Ljava/lang/String;trimequalskeySet()Ljava/util/Set; java/util/Setiterator()Ljava/util/Iterator;java/util/IteratorhasNextnext()Ljava/lang/Object; sendRawLine joinChannel partChannelremovevalues()Ljava/util/Collection;java/util/Collection removeNode(Lorg/jibble/socnet/Node;)Z makeNextImage countTokens nextToken getLastFile()Ljava/io/File;getName dccSendFileG(Ljava/io/File;Ljava/lang/String;I)Lorg/jibble/pircbot/DccFileTransfer;charAt(I)CindexOf(I)IgetNickequalsIgnoreCaseorg/jibble/pircbot/User isConnected reconnectjava/lang/Threadsleep(J)VcreateRestorePointsZ6(Ljava/lang/String;Lorg/jibble/socnet/Configuration;)Vput8(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;addNode(Lorg/jibble/socnet/Node;)V mergeNode3(Lorg/jibble/socnet/Node;Lorg/jibble/socnet/Node;)V#(Ljava/io/File;Ljava/lang/String;)V(Ljava/io/File;)V(Ljava/io/InputStream;)V readObjectcloseload(Ljava/util/Properties;)Vverbose setVerbose(Z)VnicksetNamesetLogin setVersionencoding setEncodingserverportIserverPasswordconnect((Ljava/lang/String;ILjava/lang/String;)V channelSet!vmW**Y*Y*++ + & Y Y+ !69"%3&V) h8*,*+,+:*:,./256,778 -* *+ *!"#::$%Y*&':()*:*:*+ Y+, -*"./*"0o1!":*2*3WG4 5]":*6W*78:():9Y:;6  <=Ȼ>Y"?:@A:*:B:  1*+ YC DE * +FGW!*+ YHI ?: *+ YK L *+M *+N *+O J/=>?B+C2E<GJHTI`JnKNPRTVXYZ\^_`#a-b9cIdNeVi`kolxmoprstux}{|}%,:PQR*+,-SB*+,,*TU*+6W>>,*+,2VG*+,*+*TU*+0 #*+, $*+W >*X*YLZ\M*^L+(*+)*0 J]2  $-=l*,9Y,:N+:*:4*_ *`:Y+*a:*bW-c6 !/4>FKYekrB*78N-(.-):9Y+::9Y,::dϱ !+5AtM+"NeY* -f:eY Y-gf:hYiYjk:l*:m% lMnN,nqJ2  :LV`inqr * -+L*+  oYpLqM**2M+iY,rstY+uNvY-w:-xy-z{|}~-:----^:()*:0S\_R  )3 <!E"L#S&\*_(a,r-{./02Jpiespy-0.4.0.orig/org/jibble/socnet/Configuration.java0000600000175000017500000001164610047717606022572 0ustar bdonlanbdonlan/* Copyright Paul James Mutton, 2001-2004, http://www.jibble.org/ This file is part of PieSpy. This software is dual-licensed, allowing you to choose between the GNU General Public License (GPL) and the www.jibble.org Commercial License. Since the GPL may be too restrictive for use in a proprietary application, a commercial license is also provided. Full license information can be found at http://www.jibble.org/licenses/ $Author: pjm2 $ $Id: Configuration.java,v 1.6 2004/05/10 10:28:06 pjm2 Exp $ */ package org.jibble.socnet; import java.awt.Color; import java.io.File; import java.util.*; public class Configuration implements java.io.Serializable { public String server; public int port; public String serverPassword; public String nick; public HashSet channelSet; public int outputWidth; public int outputHeight; public File outputDirectory; public boolean createCurrent; public boolean createArchive; public boolean createRestorePoints; public Color backgroundColor; public Color channelColor; public Color labelColor; public Color titleColor; public Color nodeColor; public Color edgeColor; public Color borderColor; public String password; public HashSet ignoreSet; public double temporalDecayAmount; public int springEmbedderIterations; public double k; public double c; public double maxRepulsiveForceDistance; public double maxNodeMovement; public double minDiagramSize; public int borderSize; public int nodeRadius; public double edgeThreshold; public boolean showEdges; public boolean verbose; public String encoding; private Properties properties; public Configuration(Properties p) throws NoSuchElementException { properties = p; server = getString("Server"); port = getInt("Port"); serverPassword = getString("ServerPassword"); nick = getString("Nick"); channelSet = getSet("ChannelSet"); outputWidth = getInt("OutputWidth"); outputHeight = getInt("OutputHeight"); outputDirectory = getFile("OutputDirectory"); createCurrent = getBoolean("CreateCurrent"); createArchive = getBoolean("CreateArchive"); createRestorePoints = getBoolean("CreateRestorePoints"); backgroundColor = getColor("BackgroundColor"); channelColor = getColor("ChannelColor"); labelColor = getColor("LabelColor"); titleColor = getColor("TitleColor"); nodeColor = getColor("NodeColor"); edgeColor = getColor("EdgeColor"); borderColor = getColor("BorderColor"); password = getString("Password"); ignoreSet = getSet("IgnoreSet"); temporalDecayAmount = getDouble("TemporalDecayAmount"); springEmbedderIterations = getInt("SpringEmbedderIterations"); k = getDouble("K"); c = getDouble("C"); maxRepulsiveForceDistance = getDouble("MaxRepulsiveForceDistance"); maxNodeMovement = getDouble("MaxNodeMovement"); minDiagramSize = getDouble("MinDiagramSize"); borderSize = getInt("BorderSize"); nodeRadius = getInt("NodeRadius"); edgeThreshold = getDouble("EdgeThreshold"); showEdges = getBoolean("ShowEdges"); verbose = getBoolean("Verbose"); encoding = getString("Encoding"); } public int getInt(String label) throws NoSuchElementException { String value = getString(label); return Integer.parseInt(value); } public double getDouble(String label) throws NoSuchElementException { String value = getString(label); return Double.parseDouble(value); } public File getFile(String label) throws NoSuchElementException { String value = getString(label); return new File(value); } public boolean getBoolean(String label) { String value = getString(label); return Boolean.valueOf(value).booleanValue(); } public Color getColor(String label) { String value = getString(label); Color color = Color.decode(value); return color; } public HashSet getSet(String label) { String values = getString(label); String[] tokens = values.split(","); HashSet set = new HashSet(); for (int i = 0; i < tokens.length; i++) { set.add(tokens[i].trim().toLowerCase()); } return set; } public String getString(String label) throws NoSuchElementException { String value = properties.getProperty(label); if (value == null) { throw new NoSuchElementException("Config did not contain: " + label); } return value; } }piespy-0.4.0.orig/org/jibble/socnet/Graph.class0000600000175000017500000002761110050247542021176 0ustar bdonlanbdonlan.Z           ! "#  $ % & '( ) '* '+, - ./ -0 !-1 #- 23 45 W6 7 89 *: ; <= > .? .@ .A BC 4D 4? 4@ E F G HI JK JL 4M 4N JO P .Q RS D D. DI T .U VW KX KY 7 KZ[\ KQ] K^_` W W. W7 Wab Hac 2d 2e 2f .g .h?zG{ ij@$? ik .l .m .n .o ip? 2q .r .s WI 2t@u zv zw 2x yz y{ |} |~ y 2 y 2  y y 2 2 2   y@c  2     y 2 y y 2 4 2   2  2 2  2 2 2 2  ' 2  2 2     2      _labelLjava/lang/String;_caption_nodesLjava/util/HashMap;_edgesminXDmaxXminYmaxY maxWeightconfig!Lorg/jibble/socnet/Configuration; _frameCountI _lastFileLjava/io/File; _heuristicsLjava/util/ArrayList;_nfLjava/text/NumberFormat;6(Ljava/lang/String;Lorg/jibble/socnet/Configuration;)VCodeLineNumberTableinfer'(Ljava/lang/String;Ljava/lang/String;)VaddNode(Lorg/jibble/socnet/Node;)VaddEdge4(Lorg/jibble/socnet/Node;Lorg/jibble/socnet/Node;D)Z removeNode(Lorg/jibble/socnet/Node;)Z mergeNode3(Lorg/jibble/socnet/Node;Lorg/jibble/socnet/Node;)Vcontains(Lorg/jibble/socnet/Edge;)Zget2(Lorg/jibble/socnet/Node;)Lorg/jibble/socnet/Node;2(Lorg/jibble/socnet/Edge;)Lorg/jibble/socnet/Edge;toString()Ljava/lang/String; toString2decay(D)VgetConnectedNodes()Ljava/util/HashSet;doLayout(I)V calcBounds(II)V drawImage&(IIIIDZ)Ljava/awt/image/BufferedImage; getFrameCount()IgetLabel setCaption(Ljava/lang/String;)V setLastFile(Ljava/io/File;)V getLastFile()Ljava/io/File; makeNextImage()V writeGraph SourceFile Graph.java  java/util/HashMap java/util/ArrayList    4org/jibble/socnet/DirectAddressingInferenceHeuristic  6org/jibble/socnet/IndirectAddressingInferenceHeuristic-org/jibble/socnet/AdjacencyInferenceHeuristic2org/jibble/socnet/BinarySequenceInferenceHeuristic     $org/jibble/socnet/InferenceHeuristic  org/jibble/socnet/Node     org/jibble/socnet/Edge          java/util/LinkedList  java/lang/StringBufferGraph:   nodes and  edges.Nodes:  Edges: java/util/HashSet [Lorg/jibble/socnet/Node;[Lorg/jibble/socnet/Edge;                  java/awt/image/BufferedImage         ! " # $ java/awt/Font SansSerif % &' (% )+A Social Network Diagram for an IRC Channel Generated by * on + using  PieSpy 0.4.0EBlue edge thickness and shortness represents strength of relationship8http://www.jibble.org/piespy/ - This frame was drawn at java/util/Datejava/awt/BasicStroke , -.java/awt/Color / 0 1 2  3 4 5 6 7 89 java/io/File : ; < =  > ?  @ A B CD - EF.png GDpngH IJ -current.png KD LD java/lang/ExceptionM NOPieSpy has gone wibbly: P Q R S  -restore.datjava/io/ObjectOutputStreamjava/io/FileOutputStream  T UV W Xorg/jibble/socnet/Graphjava/lang/Objectjava/io/Serializablejava/text/NumberFormatgetIntegerInstance()Ljava/text/NumberFormat;setMinimumIntegerDigitssetGroupingUsed(Z)V=(Lorg/jibble/socnet/Graph;Lorg/jibble/socnet/Configuration;)Vadd(Ljava/lang/Object;)Zorg/jibble/socnet/Configuration ignoreSetLjava/util/HashSet;java/lang/String toLowerCasesize(I)Ljava/lang/Object; containsKey&(Ljava/lang/Object;)Ljava/lang/Object;put8(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; getWeight()D setWeightequalsremovekeySet()Ljava/util/Set; java/util/Setiterator()Ljava/util/Iterator;java/util/IteratorhasNext()Znext()Ljava/lang/Object; getSource()Lorg/jibble/socnet/Node; getTargetsetNickappend,(Ljava/lang/String;)Ljava/lang/StringBuffer;(I)Ljava/lang/StringBuffer;,(Ljava/lang/Object;)Ljava/lang/StringBuffer;toArray(([Ljava/lang/Object;)[Ljava/lang/Object;kcmaxRepulsiveForceDistancegetXgetYjava/lang/Mathrandomsqrt(D)DgetFXsetFXgetFYsetFYlogmaxNodeMovementsetXsetYminDiagramSize(III)VcreateGraphics()Ljava/awt/Graphics2D;backgroundColorLjava/awt/Color;java/awt/Graphics2DsetColor(Ljava/awt/Color;)VfillRect(IIII)Vjava/awt/RenderingHintsKEY_ANTIALIASINGYKey InnerClassesLjava/awt/RenderingHints$Key;VALUE_ANTIALIAS_ONLjava/lang/Object;setRenderingHint2(Ljava/awt/RenderingHints$Key;Ljava/lang/Object;)V borderColordrawRect channelColor(Ljava/lang/String;II)VsetFont(Ljava/awt/Font;)V drawString titleColornickserver(F)V setStroke(Ljava/awt/Stroke;)V edgeColorgetRedgetGreengetBluedrawLine nodeColorfillOvaldrawOval labelColor substring(I)Ljava/lang/String;outputDirectory#(Ljava/io/File;Ljava/lang/String;)VmkdirspringEmbedderIterations outputWidth outputHeight borderSize nodeRadius edgeThreshold showEdgesZformat(J)Ljava/lang/String; createArchivejavax/imageio/ImageIOwriteA(Ljava/awt/image/RenderedImage;Ljava/lang/String;Ljava/io/File;)Z createCurrentcreateRestorePointsjava/lang/SystemoutLjava/io/PrintStream;java/io/PrintStreamprintlnprintStackTracetemporalDecayAmount(Ljava/io/OutputStream;)V writeObject(Ljava/lang/Object;)Vflushclosejava/awt/RenderingHints$Key!)***Y*Y* * ** ****Y*+*,****Y*,W*Y*, W*!Y*,"W*#Y*,$WZ l mn p'q.r5s<tAwFxKzV!["`%g&p'x*+,-/j:*%+&'>*(*)*:+,+ޱ3478,9379;W/*+,*+-.L *++/W++0c1A BE$I.J+,2 )*+3*,34Y+,5:*,*-4:2*+-.L*,-.M4Y+,5:*/W6)c7*8:OPTUX%Y1ZB]N^Z_e`qc}fgW*+,M*+9W*:;M,<,,=4N->+2-?+2,@& l nq!r*s4tJuSxUzl*+A,BN,+2 *,CW*:;:DYE:<2=4:>+2?+2FWG:<=4:*9W*+HL*+9W+-I*++/WG:<=4:*/W*J+'*8j *3=Ials}! *+,! *+,$ *+-.$ *+-4F.KYLMN*OPQN*OPRNS;#KYLTN*UVN*US*:;N-<--=4:6'g76-@*:;:<.=.:0'g101α6 !-7@NXdpzo?WYXL*:;M,<",=4N+->YW+-?YW+(1=*JM,,Z.[\N*:*O4]^:*_9*`9*a9 6  6  - `6  -- 2:- 2:bbg9ccg9kkc9d*fgoic9fgoic9kkc9k9 Yko9lkocmnkocolkogmnkogo . 6    2:  >: ?:bbg9ccg9kkc9d*fgoic9fgoic9kkc9k9  9k9kgo9 699pqkck9lkogmnkogolkocmnkoco 6  -- 2:  lk9 nk9*s9 9ww9 9ww9  bct  ccu m o s h"H   /8AJS]jpv!"#$')*,- ./28>5I6P7W8^:k;x=BCDEHJKNPSTUWYZ#[6\I5OaYb_diesh|ijlmoprsvwz{a * * ** **JN-v:<j=.:b* *b b* *b c* *cc**c*w9* * g,* * cxo9*xog *xoc **g,**cxo9*xog*xoc*:;:<(=4:6**6* * g**golo99**g9  k g9 ** xog** xoc=6* * g9  o g9 **  xog **  xoc +!&,6BOXen{ $.:GSmt?[*J:zY{:  |:  *}~ dd  *~ ddhd<hd= *~ Y@ *`P *~ Y dd *h`d2d Y  KYLN*NN*NNNSh`dd h`dd KYLNYUSh`d*:;:  < =4:  6 69  >: ?:b* gk* * go`6c*gk**go`6b* gk* * go`6c*gk**go`6 Y cpqk bf k*o`6 Y***~  Y  Y v:  < =.:  b* gk* * go`6 c*gk**go`6 *~ ddhh *~ ddhh *~  B`dL 4%2=IV\bn!3Ygq}*;gl|    5AX * *  "*+ #$ "*+ '(*+<*Y`*&LY*+M,W************NY,KYL+NN**NNS:*-W*Y,KYL+NNS:*-W* ***!NKYL¶N-US-**ŶƱHb/ 02&3+566H9w<=>?CDEFGL MTQR,S0W;Xe*&LY*+MY,KYL+NǶNSNYY-ʷ:*ΧL`c. ] ^_8`IaPbVc[d`hcfdi | piespy-0.4.0.orig/org/jibble/socnet/IndirectAddressingInferenceHeuristic.class0000600000175000017500000000210510050247542027370 0ustar bdonlanbdonlan.4        !"#$=(Lorg/jibble/socnet/Graph;Lorg/jibble/socnet/Configuration;)VCodeLineNumberTableinfer'(Ljava/lang/String;Ljava/lang/String;)V SourceFile)IndirectAddressingInferenceHeuristic.java  %& '( )*org/jibble/socnet/Node +%[\s\t\n\r\f\:\.\(\)\-\,\/\&\!\?""<>]+, -./ 01 236org/jibble/socnet/IndirectAddressingInferenceHeuristic$org/jibble/socnet/InferenceHeuristicjava/io/SerializablegetGraph()Lorg/jibble/socnet/Graph; getConfig#()Lorg/jibble/socnet/Configuration;getHeuristicWeighting()D(Ljava/lang/String;)Vjava/lang/Stringsplit'(Ljava/lang/String;)[Ljava/lang/String;org/jibble/socnet/Graphcontains(Lorg/jibble/socnet/Node;)ZaddEdge4(Lorg/jibble/socnet/Node;Lorg/jibble/socnet/Node;D)Z!  #*+,  \*N*:*9Y+:,:6  0Y 2: - - * W α2   #!."<#E%R&U![*piespy-0.4.0.orig/org/jibble/socnet/InferenceHeuristic.java0000600000175000017500000000335210047716062023527 0ustar bdonlanbdonlan/* Copyright Paul James Mutton, 2001-2004, http://www.jibble.org/ This file is part of PieSpy. This software is dual-licensed, allowing you to choose between the GNU General Public License (GPL) and the www.jibble.org Commercial License. Since the GPL may be too restrictive for use in a proprietary application, a commercial license is also provided. Full license information can be found at http://www.jibble.org/licenses/ $Author: pjm2 $ $Id: InferenceHeuristic.java,v 1.1 2004/05/10 10:13:53 pjm2 Exp $ */ package org.jibble.socnet; public abstract class InferenceHeuristic implements java.io.Serializable { public InferenceHeuristic(Graph graph, Configuration config) { _graph = graph; this.config = config; double weighting = 0; String className = this.toString(); try { weighting = config.getDouble(className); } catch (Exception e) { System.out.println("Could not find a set weighting for " + className + ": " + e); } _weighting = weighting; } public double getHeuristicWeighting() { return _weighting; } public Graph getGraph() { return _graph; } public Configuration getConfig() { return config; } public String toString() { return this.getClass().getName(); } public int hashCode() { return toString().hashCode(); } public boolean equals(Object o) { return toString().equals(o); } public abstract void infer(String nick, String message); private double _weighting; private Graph _graph; private Configuration config; }piespy-0.4.0.orig/org/jibble/socnet/DirectAddressingInferenceHeuristic.class0000600000175000017500000000204210050247542027041 0ustar bdonlanbdonlan.4        !"#$=(Lorg/jibble/socnet/Graph;Lorg/jibble/socnet/Configuration;)VCodeLineNumberTableinfer'(Ljava/lang/String;Ljava/lang/String;)V SourceFile'DirectAddressingInferenceHeuristic.java  %& '( )*org/jibble/socnet/Node +%[\s\t\n\r\f\:\.\(\)\-\,\/\&\!\?""<>]+, -./ 01 234org/jibble/socnet/DirectAddressingInferenceHeuristic$org/jibble/socnet/InferenceHeuristicjava/io/SerializablegetGraph()Lorg/jibble/socnet/Graph; getConfig#()Lorg/jibble/socnet/Configuration;getHeuristicWeighting()D(Ljava/lang/String;)Vjava/lang/Stringsplit((Ljava/lang/String;I)[Ljava/lang/String;org/jibble/socnet/Graphcontains(Lorg/jibble/socnet/Node;)ZaddEdge4(Lorg/jibble/socnet/Node;Lorg/jibble/socnet/Node;D)Z!  #*+,  H*N*:*9Y+:,:Y2: - - * W&   $!1":$G'piespy-0.4.0.orig/org/jibble/socnet/AdjacencyInferenceHeuristic.class0000600000175000017500000000161110050247542025505 0ustar bdonlanbdonlan.,        ! _lastNickLjava/lang/String;=(Lorg/jibble/socnet/Graph;Lorg/jibble/socnet/Configuration;)VCodeLineNumberTableinfer'(Ljava/lang/String;Ljava/lang/String;)V SourceFile AdjacencyInferenceHeuristic.java  "# $% &'org/jibble/socnet/Node () *+-org/jibble/socnet/AdjacencyInferenceHeuristic$org/jibble/socnet/InferenceHeuristicjava/io/SerializablegetGraph()Lorg/jibble/socnet/Graph; getConfig#()Lorg/jibble/socnet/Configuration;getHeuristicWeighting()D(Ljava/lang/String;)Vorg/jibble/socnet/GraphaddEdge4(Lorg/jibble/socnet/Node;Lorg/jibble/socnet/Node;D)Z!   , *+,*' j:*N*:*9*-Y+Y**W*+ !4$9%piespy-0.4.0.orig/run.bat0000600000175000017500000000013210015003454015047 0ustar bdonlanbdonlanjava -classpath .;./lib/pircbot.jar org.jibble.socnet.SocialNetworkBot ./config.ini pausepiespy-0.4.0.orig/config.ini0000600000175000017500000000311510050247522015532 0ustar bdonlanbdonlan# Configuration File # # PieSpy Social Networking Bot # http://www.jibble.org/piespy/ # Copyright Paul Mutton # Server Settings: Nick = YourBotName Server = irc.freenode.net ServerPassword = Port = 6667 ChannelSet = #channel1,#channel2 # Image creation settings: OutputWidth = 800 OutputHeight = 600 OutputDirectory = ./images/ CreateCurrent = true CreateArchive = true CreateRestorePoints = false # Color settings: # Note: These settings (and some others) are cached in the restore.dat files, # so you must delete your restore.dat files for these changes to take effect. BackgroundColor = #ffffff ChannelColor = #eeeeff LabelColor = #000000 TitleColor = #9999cc NodeColor = #ffff00 EdgeColor = #6666FF BorderColor = #666666 # Administrator settings: Password = password # Ignore set settings: IgnoreSet = PieSpy,jibot # Advanced Settings: # DO NOT CHANGE THESE UNLESS YOU KNOW WHAT THEY MEAN. # THE WORLD MAY END IF YOU GET SOMETHING WRONG HERE. TemporalDecayAmount = 0.02 SpringEmbedderIterations = 1000 K = 2 C = 0.01 MaxRepulsiveForceDistance = 6 MaxNodeMovement = 0.5 MinDiagramSize = 10 BorderSize = 50 NodeRadius = 5 EdgeThreshold = 0 ShowEdges = true Verbose = true Encoding = UTF-8 # Heuristic Weightings: # BREAK AT YOUR OWN RISK. # These values are cached in each restore.dat file. org.jibble.socnet.AdjacencyInferenceHeuristic = 0 org.jibble.socnet.BinarySequenceInferenceHeuristic = 1 org.jibble.socnet.DirectAddressingInferenceHeuristic = 1 org.jibble.socnet.IndirectAddressingInferenceHeuristic = 0.3piespy-0.4.0.orig/images/0000700000175000017500000000000010604105711015025 5ustar bdonlanbdonlanpiespy-0.4.0.orig/images/example.png0000600000175000017500000011053110011434742017172 0ustar bdonlanbdonlanPNG  IHDR XvpIDATx}Ty.8c!ȒX^rp\<,+x",O\č,%%](ː \qc6nclLt4MC@@bXNJݸ}+}\R棶zgm۱W_?.Ͽ;`NLJ w2.ܣ7csυ~a]tv:iۙG1-XY֭m[X_ߵZp vԿ)}] 2>'syA;u*s7ݻ~{;O6ng]]g#=(ǩ(R__zm(1c)n|W(f@|+W?I_sFPLJ.o'N\r˗oeu2ݾ}>דǿWcq;wn`X@8um|֬WCho?oSul)45e;^&=__M?:}?wpWڎ۝;Y_;> se>cp 4/۹ڰa~ܹ0uFokǸp55H kҰӧϻOz?rlRD}:a5볞<t⾧|ՙz'O#qwK! >_}u!FL&uy^a~@Rjبap, s5P eEy3cw̙ӞqÇ/w 9b\A܃[_٭[ws68w<_W]F=}Ξz/]ӟN=jXIJw5f#1.Yd?aY!jk?/xjg%ݦQH){I!9࿋bjs ݛ6O!S\A/Nzs)8r[kXk}",n55>hn>…{Gz^O߲`l6;3w߯yEocs>6Ӕu5=N\Ѷu!/(l\P'*{]A@|2ezkt9r14 '8Gl7&4vCWa[Ly*δo!$צqJ[1 9Ns} 3q({@)),F g\Kf5j`ظq!O Ln W'd^"vm{&xe`M6:4ʬvq\l2WVLH!ljzJ}^[CHIA 6z{o6Oྦྷ+aPdtxDpL Hik0wTjk\ax/CPr?n0iz}TR|~:  }Os ! s etҟ s p-h\ 9Nsyo)~ %f\7!`]g4d1ڌlCԃ}뭎ۑ`zR=^'cB+sƻGW~G9aWv~owj~?Lk]QLqêbS9Fk!rrQv3Y]D ^[=ܢ3Řljr8Q B @fj 2 pc3TBO +BL εP=X} G E V0 { wk5\rkںhZs6^-Lkw3,=x"t5 >?(&2Hs\"z+*w*|.)8R( 5^opj@Rn(O9AZW }LPεfR5~n*OWkwdڷBΆMا$XvS芦 ~_O: +C{s%hӐ)7'aY N?HUXN4}0a GE4Ƌ zO_^gu@|HPp~!zFQq^kC &6[!qp  Bǽ^ ]ʛ:5QbWh_ ҕ`m2= l -5 wy!HzTJ@i\ FhzB~ЕHF&^u_ qwE~zxs5FAHר؇¼)RN 7fsyY^0{0a g#C zOJˍj;hmE//63xljJ}^UՄvc2"jLUk.hMyZr@dۮ]scר4Ua-oBt!rl7nD=R54Z4Q,xcpm7@!I)^M -g^r͔-):N!?~Dva.nW fQ ƹqZ!> WHՉ2>J/&!zxs)p! nwD]ٕ](tUޗzzDir7 ĭj}ڷZB !y|bzj}muJKPh]F1N งB"D7@qO/rBQ AZ*dbυCj}W&!DZ_l@kV3R!=*dU!7 IFR= 8ʕٸ"Σ_Ut)@l!څ6 (4@xQDiuܤ( Rn]E yzQW Hٳg[SS͚5˶nݚ1D… my漏v$ K2>kc38Rk7 9ƍgfSL@N}?}lvHQs Ha ҰS0ScK )F; "k$z+զM1D{.t;cݟ8@I(Q&@xWML1RBf 2+kd$}@uט>}m߾=cQp7cݟ8@I( (3uZ *vϥj:S\W"z}߀ة`6fvc#Eq9!e)Fk\obB_.Go@l/79R]÷ŋ9? \ ro@Tz )NRC6ʚ.aJҘ/eoY=o@,-||=5y\xbB)li%V‡6$ƞWy B6]n!=* q (9{  H|ke2Um5dUx]GM @H!W![ȌOð ~Uʵb}J!X HeH54bo)碐chW="t$JԐ-"}6B_iW)>B)}cjʿz 5*lbB^}J=o@]~ɮ%  {cO&Q^7FkfҐ--6Y⃥Z7+ev{N٪k yg$5KHTo@>mwog5`cl7 +jȷ:P~q x1>&Wb|[$5d m(d)7tXo@?no_&HИ8@u$5  B!u8Ua[ڿTx߀҅Ng9 1֕>nHu*f트RPeS-741.]m@D\/Tb]rJ5& Y b smfJ7=f.p.@8DRJ)ǧce]}C@!DT ^/kWXP/ECx߀\~h-@ D ȭP&-3FٰCT\ϊk(S&x?P8a} XbQ>I ,iL٩+jz*l).W@} # ԰Z.@/G)uc[9V*.e1z o70Ck E)w+WWI ,WMWVBqOZ@ D 0&1]-E jt]wu>͹H\\MjQqp_!ZkwS8 y߀h<@6 FP:nRT@YBx-Gةg1'~W@8r%:ISsrs70Tb,5Ɯ OE*>g:h ,J'Џ[ DJ1kZ_]Íx߀>TxE5VKz6ʳ^H:ύ a @)RO:n5XR.D7ZPQj*] Zt Qe![mkT1uWՀ >I5jς< JH0UQA-8n>}OClr@AY\|PM Bס gJEO\R5ԫ'R@?~HC4JCDTzLq ^9 @,f8ߛ,:d\pk6u9VhQGOÑo@х~2PF\z<7;p +G` z?@=q@H@TY/@Ap0wiW9 ]<_ꉂV=g? 8M_SjBǙ3 RNzޏ}B)v`|"C <WrW,:D)s$t5OD"}B}}mzz-koo޽{P۹s-Z͛g۶mK?w\kll3f (eIq7:::l… ,ZWSLiӦ 9fwwj&LIFICUkdf2|P_oٲ:---6uTo۴iS=v^9s'[~glٲeA a6~xyuqJQRD3Ufٳ*y!8=L?^볱cflǞ;w:[=z]V@ \oUW^y%tPdَIAhŽ៩l7xzK^rÑsv @ol6Dɓi qQVt }2 O>d'z{C )Lh61cM9/*vwתPPV݆6n}?XfnC ̅0 f#Gu4|[ -:aXlm􄠊BC+ȹ‡B Е|Df @@g,@T& (Ӄ (+(! @PF]`Mv}f;wrzW^y~I2G_+?{Pnjz5@P6/h;yQm ,Y ?я,ߋ|kzǚ;w͟?V^m7K4r^]7B|@۾ ٭[jc۷S_;wλQhlϘ1öm6,̚5+Փn3gnY]I6i$ɓٳg[SSw̭[ӧOAN{xfܼi!$NE5*}ƍn/\L0aX_=w{ѢE^J mQψ?}{C~V`Rhkk)S +s5#3gx;`(V6L5t[CcG}tȱ}&tzJ |!~K@,7wU .]je"5WXa .X;7L8zݺumjӦM+:ޏ>g Yb})W_fr=aOzR83E`݈zlW-2:dgݻ@P4)IuO>d^j)>@PPֿȶ_׿К6$G, uB^6nC.ģ|pq +ϫXeV‡6S4ȝ;| @AyMCuH:ib@E@`P, fu:K~_|mgTkьjP@ '7K!4 G ?@6lסޏN#GxO!h&&Ձ(|)ӗ_>ӧޏZ  #5~P}820`~y-jޏCx/D ay jj?40&A+hGq @F|Cpq͛B+\32M{L`+ @,Tbt/|Cpqd=7dNZ Y ORχz@1Ԫ۷ۓO>iFӧ[kkkݻmڴiqM567mCCw)L|[~O yfi +P,^3dAH;.]4kZҢ!X:T^|D0\LDxF?|QBL53ma?f۷֩M{D|?Gu=_}U4$oidg񷹃ߧԴ(Ȼ34z?[p L%憙Eޟ4{h9A%i]/nXޏ;wС^yVQHd6:Kp=!%_VH5rVͺuCCGp[``;c1@6UPF\\!'1=8j+|hːR:uK )RMzzaC~]sr"PL8zpB{ _> k)ޏKV:f^ 8sF + 9aȽ֮~sZ*;?^5~3 Bˆ ]!`]-Mj£GΜ}D+ Z% EHjB^?ٷ5M̖,Yb}E[mҤIc~VJG |FTm.}Or[56$/Μ9Ӷm޽{=9rov}V/h/^8; / PZZWC3PƷfi.!\nxRԕhE@5fͲ-[ٳmͩ?3lٲz,V{mӦM6uT)}[KUCBﶇ~;;رc\ B1Pp)((($ifRXV{Aƍ7:ͦLgуw߾{!CaNkoޏKڪURfHbeE ^͊Y"`]I?|y}Tڏ0 j: Gy$5cVpi $@`Xń\CJT ^-[Us\ǁLONO س{=5kqH47 ~;NЕRԛZccwzT~i@ >j+ܸQ{-rԕ+|(()<Írjhh7z <Z[lڴi>TY=LB+ z')ഴ@bav:Hꎛ>^oXDn\dƘbHo+- q|RUQի&' @}r VPbB 顤!\w/G1l~PYl+ߙ[׸"D=Hތeׯ̙LXCh eI&O}g Vzd;>T ]QW{&BxJJ25&gnSO[/$=t(hMՋdp3;wƏV0akګ^hYƻ ?i9@u|ח$ @n(W׳ ֕(|dZ :sf\MCl:-G|<Adu,x[ʣ>:ݧ̟0` 1ސ+Wz=.َUGCy(V4KNóJƎ@|m<~3Qo ;Ȋ+l…of4.q&N͌X[0}XD2 wDý8ѵ)h+XGDYϳpَU?T7 P gME *ֽp ?K-X!]RMJcxGqu|LMMlkD9)K}|(@CBۦƢUO 2AQBBL s} |ȑ-^PZCC@ܬX */>,NsVp %K2r)SGF> P,5O=8wn=Trn̺  2JAF=00)hӱAF[4*WЦ}7h6T58:tw̴ٲX# bzd{d.xت#_>@Xj#ӰO?z8FMCL߅ 7XZUtV﫱D^GWY1Abi=<*rS燏>z׊ (B@8z]߫,2ECDETúixŋ9? P.nVz׮^/CMa[^ *B@"P,P(Lh9JF{>n;fc1 2pC4sPPz=Z#]8W9x0~!Q/&8+V7T瑯<=VC3`cO1:@A kp3zvHkk}KB1:@X%nj]b(H@s5]oppKEֵ0+VȼC˴ʹoVE ,ܬXUTgΔ6HiؕHsshj_ׄ ,ԝjK*t 2'=Vu jmB6[dz>T5(ietb>p0Q@rAaGKKM:6mڔnf2r}/Ѱ *`O1:@꽆bi*ܰ&Md6ydTew;vHرc#|C=>i(|hR+xP@2+z76nhO3g9XߣM,+Wٳs&\@@oiE-Pv(V0ٿzC0qDwƍ)@@WH P0.(ph_ [`wj5͛hVR!XZ,PZ(ܨ'@XMٿoO8l_MA~xVY ._ni#oy]?xhQ7Uԩx΅gsײ ^JP]‡V@/GXҹѺ   >74T#-:kWy~^z4< @z<ۧJh‡@aѺ& MMZP R@55\H`]۳ǿ|W/M[s/^ pxC ^'rEhnUhS̓i=А+7JC*3Zxu ̎ghRXP<Ŷy_hjY55ɅP#z. *Bu8^+V=u}zBW7چ fom? 9zˆzI.~*9Ъ z>#Ym}}}^)iؖSٱ#trYgޑCp5>\a(t= @4I p=j얣j+IY X;kݯRsܾWOZ cRzJFB_D{B^Sޑ/Ktw_)FT]P#VCz/\(89Վ(@kv.(#)T^ɡ`T]D kbCH΅BDwDάaW  R5h6mڴh#FT)PLTdBz-JI3k=kq# ֽ\$IOy)Q5h„ ޞsr 5>04809=!zqp hؖQ#_CS&O1:@  IKKM:6m4,DeΜ9fン;wڢEl޼ym۶z:㑄z8 T[ޑ_l*?;Ri  ! !NZ__;v>?Xn2euttXgg7`AirQPF7S&H 2Vj @ Dɖ-[f+WٳgGD#=uiΠQFzQtU+B4,KïѕvDhWzG  j4L8Z[[6nܸuܹsۓ&Mz@Mu7Ԙ&p䧐BȆ {̚^jH#}ݑBR>k,۲e7oޜƌuV>}577pÅ ucc87PCQ̙3@):Tˡɓ'gڵߞ{9o5X_ {^PVjhC"(@(||I?_M.E}A:80x}( ;<7G@YlHonpjHT +޺XTpzBj 8 x wDúݻ?_;B=rO>d|k ,@dlmzBt%3g_mjDai-5]q⥤^ ƢTH5Nb 6.s S`7n5Ag  *D/6~u)@dhQPPCZ+   ;ᇥ !mm~x_¬zTáFS ۋvɮgkc qvi=+ { FIpKHn$MR_+t;ސ߬}pٟ4#oy0pѱ>'x5@@}hԼ !:w߭ȮwD!(;v7>l>~# C|PBȎTm]WzAZ >= *"t$ʹR dzz>@TT5K= Ecѓɠix"9 WVH;)|hzߨï.k .%^m&e8jHXTk`kq=!C}hYlN/`mɓ'kL'ZO&-Br_dlg϶۪UlΜ9YSuݷsN[h͛7oȚ<-[, Q޻Vɢz j !Z% dԨQÅVWʕ+Lkm~V$ y*B  "IK @% hLn|0Jkoz%4 {Hĉ35L4Iw1~Q(Sg A QZ3b)d^W{^xp)g͚5^݆?!QB?c N\т "cv JB4Õ 9t1viԊ<#^j7x≚=7Q(S VHzUr7f٨öۯ?Xe֭K/d6l( .} @EԔ5|{ +W YWC@!4*W4x0u/A T/hxT;Y4c6M"@@bfRQSC"aY1u/@i)B/fRe^ gy1' _7ؽ/D `3fݹ9 EԺr碔ҥS޽y 3S\ADSvwgv<uNSʪaݿߟ N<"nNASȢԽ1Kk0u/.;ڄPQ{AOfb5 u?f9;7v @59.0cfuCgԽ @US 87ci@UϿSVRWQAPU5(qܺϔz{^, O SZ"wrN@ FŋZ,Պ+˶i&;c ,@d%heڠtn^͚{~oo޼i n7x@٩z$(t(|(tw?uo={]pa/ZccM<9u[[@ P/T;p硖f8SQȥKm۶٬YlΝC2e6qRO6 'OF͢i\YMݫ5DJ:{{{7駟 <}5*u{Ĉ=o mEԁ۷{DQFǻm=Vջӡ!ZSzF j\ ? GS*+bސzLX /WXWMȤI qZ;?7uh "MMf fcnyofȢ؉fiNUIMݻ|ȑ*-^[n_^z%۰a'[D4]f:){p[ @Ӫlqk>i8@rPG} P&gE@N `]_u-  !@TzA_z+XK0;te&8@aB4H`^)>0kZ_@:Zą 7۳AzJ⺾P-ZUkh \n{AzG4T#(@(lsxBP)d 9$Q)CT(d *"` 2-HVz!jBv"jjDC_@b{+p9t(0TK=‡  P4ٳTq5Gnl>i8*zh$ T;Նh{c @Zq~@}[}{nk<3lٲCDkkh'ON?c F?98@*q{ܸqa .^`wFm/_.:L2ڬku[)M0!1 @7;x_?n޼}lSԨQsTNo{ì^y啂@2m4oVww\_ T#G)x۷oj1  [c5^j@4+_QM@j0TcmFoJxG׫x'x˗ig#oY\!i K3]K/ن x >y@%aW‡8OT/h Bݹcvٽ1PZMKΜ1ܻlW @ R|xK,Iy4n]bvpطAmG:4@(,(d; dtw?ѣիfo[<4 oqC#CKKM:6m7sLnwvvz+wgWfϞ=k,o .\hϷ͛7~vpR e?ov224|! ``B}'ehv.9~ý[5Ǝݷzj[hw^UVeWƍ62eJ~ݗ~ 0( RP V8v" $(9VPP0.  f^Ųelʕ^Oܾ}&L{̮j_)jv$Qm~9qb'N~דP|ҥ\vWWiӦv+ܨg2LO =d.\0cSm u@֬Ycj:&Oiooϻj?;2}t۾}{~ۅ|&Bo^pHroF1S^O?{E *nh0"yt;0ݻ`QjP݃BuPxџa{SZ Į]~ik uvHuq ~o(H577G>t534dfprQt>!:G@T7|d n۱#aTg^S!Sk(t5NC4K1EꧡV‡6s?dkoH_3CD!dG=C ":#O7z74 ~0d*^: !--,R flTfTB!Daa*O=MW!D=P@T0ExQyrjEf s~HD7j&1 V?&"Dhy/.@P%ptCK(hc Oku\yV/?XPk@XZPP 2|i-H!=YDÇYjӹs !gr>G N= ~0;@\ 78-R'4ݮE}LXnnΟ7<NWr@PZןzG=_nB͒@lTso{! *z? }0%SY>#Bv  ZrS r势uC5 ZD!i ۷W,6(j RP9u(D{B=@3LB]++ht x>P< r @rWLR.Rx<@E>T|ujAK :ZC@E Bjz@ P~sHKK@ݻw{m̙|HT7>@bt-VeHq㬣lʔ)Â͛7g{Ϟ}iӦM@ܱ c?~w[`„ }NvwwG [=^<֮]kw[d͚5|HT/>Dz?q0jԨp_->6q~K/2=~{Ǽ裏m@jDLmrW^0\OCkk=^_ð^x'M\&`n//kիs>+VxC j)t(|`}YdIISjH!,R`7n&2rh(P&W{2ydFCՀ455_íss=Ӄ L6C :?B})Up( N_}凐=`16w{^夐@CZP[mmi/[̻Y4HۦMRh&(]WOVVF]HF ߾8ѣk{':7nZ8BV#1@Z__;6j-tU>}X|4 @uZaHPoʕ+^Lg{Z ڴB(8ߟLQh] LbĉП}t^p݌X#_>H> ZIhmн}v{3UUٙ~wD >ꄦ}mh03tj#B `/i^ b wp.jf#GbxquE j0rٕ+P1SK ^Z7z>U{Og4BȥK A (15"hU𡭡g:uMp jQ~M}$T/zGHt[K ?j577עr .͛SXi۪UlΜ9ɶh mƌm۶A_cP { cH[(8`ɓV,vDDCHsyhZԖVVPvW8I_LzT RO ^\41A/@@#P '|SGS| MSQϘB‰=7@da }jԗ"Tta]/ɽ1 @KZ 燍U3MvЫЮZ+Vԗ Bmn{w1Cyg!Wu]=N΁J!X ڹ!jܡq=r֧ZW/@DY@\@im *taZz+o_ԗ ``lDbSN6_|ѻO˵̙3ûi3f\ݻwۄ lΜ9ުqPPI糧rR2#ωfRX*!(4F j!~>;vl)SΝ;ƍsիWۢEۯZ*kymŊv;]?t(Y ]}6n79Q-3b4 9 Ƅz@>,مjESS-[V\igog_aB '=]_ /=~ 7q}O <(TR3bٳz LX${AtM8n=C!m_d-]4" %uܹscyMZ#)j 4, ͈U†jo41'@? zJ_qØ7oW1yj@ӓ p)dlL?wڵk=sCjNJIW0*NRMzc-"sj@ĦPچ3򬭡> j/_gE$2(|$m5vՂˌX!E@lkWFTmqmO)Z+ 2H= >#ʐ>nlzaB|d n]TzG{\-H-פ:@TidP\CQyDGj7~5V-͈A@!Q #_>5Jï4 zM[ ~4LL P 5=TdΚ@*NW 5! S}C)hU55DAO=]z% |9&=R1.j^D"s S (B?/X^s唃%qݰDaIí@A D0a] 4YǍE/iX5C\ЂJI!CU5í$fR/֕ i={zC@T}?RSHkA4j=(2P5X0;5s{-W0*nVKj-B^oPvCRPZ!䫯{Hh8fBa5%NJíQdjiU.La)ސjZ7n-U\^jQ  Ѱ6?hL92U}+hhV8׺/j6 )ԌXgM HRdf8]Fnw"jit TwHᣖkzA:n꾦㭻 8_ m !oJ]ˠ@+)ꕠ^rՂ(9wVU^䀽/ i!C!RIc`~MC+VH=iCAHkqKUDfC [@DDq(;na{2c5^Kf\k9cxV6%&T5ġQ{HOAiD2 塀b["YA [-t!4j| Fdb:n8en]]]fҤIv[~};v9s昙3gM66Kh$CF]mV1̬VlC5VHvѣGݻw#G1cn+4.3-2'uv}HookfԨQ'Nhݻwj\EнSD޾ącǎ5N'0 .4/^ +6ZMՑٽy3DBDK6iuy4HCEcŊfƌzOs=l۶O wk @%p  MUҔ% EԂ #F%N=bbA˗ K/8#F}Ņ(CM0rD^O2z @  "Aӟ4MBСOc҈}5.*㓇:̉O7{#?$RC4MRRNݮ!(HxU^]4Og:si=D%ѩg'Q*.C"D(E꣩W<jھ6j 1aQ`V]Q`끖ύEӆY {{ @82@VbD%0,@+$>Xn;% ٩s +J1 /K6Fސ<P Hn]Ũ U$$4S)^GmOɟeiCٯ%@,48Z0Ògx>r$SB 2 --6>x_9!ѡikn0 p-c| x!,2G2ݒL᜗[ٽjD"<aID>ucy  Fw"2HH\$پ}͕W^|;+ewuuٳg/lذiƍgMfr e޸qݩ%+̪U+/˺7]~orh Zq:erO@ DW@:+#5Z!dfm{9+O4Ɋm'N]vefѢE愗pf߾}}w[q" ?O?n.RAS婐B ߛ}'@~R(! 1PX ڱu<)I f&=Ç?cH;֊Ow1cƘ (iSD_iSX4" @QbB%%Ԧ}hnI]Mt/e @`p^yA h:ұc߽T&$1a3~xضm[%þ|r`s饗g ŔŊ\u,{=AS ڔ<x! @Ą- P"$&l]l?wS礋 ,yr[mJS$p3 > P$>$B$FV(nOZm }沁kD\0qeHhM b hd\jJ\АC K`r'x?#%E&1'vJ~>JUb3P\b?xUɔE%.bDY) si wԨQcd9Tu-p@ y@ z7l@7)lZu4>  / 4q&ѶC+W}yL/m0~iCAA"K\ 1ݖ)>a_r@K(ϊ qL4pw1s5K.6h7e< A(~@q }Տ#țg+ ,䑘>zu$T?AH`ȳ!<RUb%9،wuw"B]]"/{ zհ*3k}i4\SbXw&",/VO*[}y%pByXBBO%!wǻifxy$霐hT2>`z蹄c::Hȑ׵wŎXySM  =`r,yCf̘W;CPhYM_kgM6_<^k'nտ  MaMa~<+Ɗ 7-J B eV9)V$CDP-|dcROk:s,A&عwSEXq@Q4*$>M'Bi<ݑ-> !&s! ie[H$.{Lfj9YbCBK@(#Oh# t hUH|h`޳ǘҴ|ދZPwGqSTɳU4dJ,m6#GȠp+G-OCuը<"F"q!@!b ֩31enq#$bD m5Ek`6ZALӮJI  Cd "rZWm!H+#T z堐ѭ\!2;d(=jPLld26ᝐa}Κ&[C%b x-C'Y10 )NxBuZvцVڒ7d(,׫%% &sG"B%f% WDo;ծiDjF}z|1e)PǡC%jf!hU#he,G`vhćVhY+.  2[͠rh*Cu/2MK(Dqr~Vڻw.+!Ѩ)B @ MqjQyo/Bh^|5(C]s(vh, ȷBy,*zr.C{3׮JcCI WU _MMj<1dn5}f0_ƽUH;KޏdD`y.@w['Kw}d![: @`2e-׫Xf>}Kc0fy a\zE]"hJ>$C4FCy,_~"![y9묳_!K3?uk6B CScΏ2PB4=xg+7?UDGnaZ @Sadrej̖-]f/76l}vsWۭ~WW\p=nԩffɒ%fڴiI;Wuq_ /\4 fʔ)vǎfΜ9f̙fӦMuZ+F{vwBn2ba]&MbCĉ+L*kƎk>;/|9" mml7+'F+/{@.7}۷/#@BN@[o ǏLj4j?D1 @ kP <ԕ8Ѹsd;75etttTޗH0a5w|:W##F8Z/re^ QI3D} me|/ L7朑׭-+l@ZmHI!?@]!'n͘g:c{γB9.5Byu(f步m֮J!jZEH(Y*O F#ʟ|B;TmOvt,( - PkV MbJK (#Oh)`7V9:.f %yb֯__y_!E%@ۢs%{`R JਥI.f -cc>lF5|L m %`5%)T_.J(icZŬXpYxzd@5nP=Z~wx8]B}tQ%(.f)^3ߓ m|%qmyO PƴY/[Ƌ(C9!bL6o<h+ܮ%d2BPHMɲBٿMYi(shWlRHe"b|Ж%>܆' ASyǘ'i hS4*$>MgE2@4?&{ d@! @43 `|1G0  P2K| / @ꇲ5mҤIfƍu=G?2ÇY9Eޯɲ,YbnV:H;C"B@4G8:d~z{ٷo߱c8qbH~Y@4@L0W^yeb&ؿ6 Yw h_9WʛL[h(7iٲef̙6CSs%taÆYD3fժ;GE',rBNʕ+ͬY,@4)ˌZμb4h@Y(ZF篮%,kRдЦcP3 : )XA:h,1ex e9u]@ ==G̼y+\jnT,xt?Eޏ-mooƼe9y꩝w+_0׿diZ?)q㞖[#.@ C>29x7>`7%@|v:d~4/!o͓O<ضW&d!@y-@ CQ>;wiy/66tb~x}o6M$rt<N1W_}}Wީpn+O%W⦛V5,7ǏiVx:>bouA)OH硺>sT/kֽtS:Xz6g%B?+zvyڥھP]/y?sH@dvU0՜)3=z;.SӚ[{ٗ.L}!uޯFǏ,_DCȏEꪑx#2U'._+7"uWpW*C|q[?=(a5}-tϡ~{jw p~MGHJ5%cdJu @ zxFg>ଌѿu+ *hv{+=gמ~>Xzz?)q㞺?ʮ{u"&MMr׎$סuC`, P_Ƶի V|o @Q -Cmಒ䅎S2'MwZnlͲe٤iB==Be+a QG76㷟?F~mv_*F?꩑YUi3uysϝ'Wީ|W}B$P' GmT3jf[ʻލ7>`]}S-rBu N.o}Y߹䵲f&v_;W4ukY=ߵqM#t܃پĨ >>m?g1;\&㔙sJ.2E^H, +>z6mTo`8n|5- ]OC7uՔ[P;{[޳n~g}B-SP^2B߹کP_HCiNӰ 뮻og_B͝b8; =i^;y/'O̽kY>8ǯ58d,%q,Fj2x5Y +9:McC2Y1t#:G[M9 {yϹ{ 1ݎZwlE~^کiyO2GB$)d4M FiCVϊ\;^ $cnHi-mi<=Ns]OBGi$g;\UP&ϪGl{&WFeڵWwga~ki"2BG+P/tm@4MCtQBiэi$(?J{jF'1OcSOlJhJEτM~3ϊI{lۍ:gTL^;t=}/B;t^6\Bu } E[+PU@4Mh~T>wf9לi$'tYoW>{ٗ+Usm +M1*t3vvV PHWU:/N~{{󩶎vl)ߪyN\V݋]/-*mwXMxGA~ ߍUc֬YyJVJWZ{sR2ru~?𸭇b>BT12 [ P=UZ5B6֊71h!lyƪ1J}B#_'y^3w[&K"U[P;{Bϧ:۱H9džsYu/R?u??Wڋ3ZAm* @ -QRM{hV U@Fg-=!б`chyo|Vטl|Vob۳u,Y@˗j dR-Ÿ~z͟d]b2&զz\y9xgZ[K%ceqOsUr|˾ªwY]!祗0:zw?1m6Rˏf~ -{dĵr{R6-]B͡L }׭o m{ /~"Bo<㎿.GIFi~6wعJΒ"q/}d'ZmDJ(WB3r:/9w?1m"aছV$[2|,4:GFp?e?Gj~} =}Om,7#S1k{P13JYZbbu~2'!ӏjTv틶Omэ@jT3B+!{Fae{reQax9}ȈQFKO+?Pb%J@'Kﲮ[_SFulrzY[z>-ZC[Ԯhϻ7Z kD<]y=aA~_T_6w_K@ @m#v vdi~յwߦԲs]MW(֭כ7b:&Vh-яo/cժΊqk!kڶW}dʨu|ݕvV]6]<_Q&x;62   }u#:wΜ8}sϳc\sMY %/#swFӒPnMupI{u*AQsVIܝ׭ GC~١ce8q7^1>\=ϝOH1c|*DGFK+3^s q2u(ᾧ:߿4)1%Ŕ_{Ik{yZD#ByݡϒSai^)#nbATBzٗ+Ǻd{GlU%H״ ň5R!V\{ `-DmEHlá:޳K ]/~:[M!(#_18qƬ>3e s HcT_g+0- P euă[V_$WVDOKhXj j"&@(@O-kGuܨ  /B\7p9eq/ޮO賴 篂%C_+,TV.9Z'=cG^/A#UiBxcDuk CQpFAEH}bpNam߹AG#ϊнH{É0P>)@B5GuwYB Y&Tpi1A9_R(^禲<"jEN"t?ymHEK##-W:XHF-current.png. If you choose to save restore points, the bot will maintain a file -restore.dat which is used to store the graph data. If you have to restart the bot, it can use this data to continue from where it left off. Temporal decay has now been included, which ensures that old relationships fade out of existance. This helps to maintains the accuracy of the system while naturally limiting the size of the graphs. If you run the bot in several extremely busy channels, make sure your computer is fast enough to keep drawing the images in realtime. Copyright Paul Mutton, 2002-2004. http://www.jibble.org/piespy/piespy-0.4.0.orig/run.sh0000600000175000017500000000016610024627752014737 0ustar bdonlanbdonlan#!/bin/sh java -Djava.awt.headless=true -classpath .:./lib/pircbot.jar org.jibble.socnet.SocialNetworkBot ./config.ini