DCMPA30€×ÕÞ±�#`¶FܳšY3ú:hb060ájÀÁÂØ U�XÆ8‚°³(1Kœ¨�0y" j²è^@sb`C° lé0°;Å@E@³Ü‘󺢃›ûÎ0À!ìwq×Â0È!n b˜ƒ—bÄ€†!FD`àÂÒLª3"ÀS­, òtë#Ï€R ¨³¤F®ZÂ%š#Q�ñÄë«L�qzDHÅ åé H†ÞD˜Q#˜>0°“%ÊWkT¿E±*««\žrM†�Ô¤N¸F¹"dËT/ÒèAÅX² Z´&ãòU)Rªp=Î 3'%ui±,N–H k¹"e  Ó&¡b䈔'T¦Qr…Š“+^„X™âo^–8ÙVµ`€5L ®"B iÁ D˜¡OçñIð@†È_Ç"<ÁÚ/ü¿pu”´%N ^!‚^…÷ {y�|Õ@ô,"¸ù0�O‰Ä‹—#@I¨<92E-ObO¹r�$"B¼ñà-Â*>‹bLʦ÷p�B½ŽèxŠF€¤ �!œ>Ò¢­„°‚<ã^��‹Ö‰ôÕhÄÈ�€"®½ ­ÁòètL²€€€Z˜H bkè}�H˜a�Dc�œ]X`j Àé„&�!¸RBæû�P`°«À®ˆRMÁÂBñ”ñƒ �ð©è„v€ŸŠ<8¶ÊaÀ,0H¥ðÍÁ1 ëÑ ÇàŽtE‚0˜à�E�œÃ`/ðPšpk<À/=�j�+SPè½ýÿƒÄ ‰D$…À„#j�]ÅSPèç¼ýÿƒÄ ‰D$ …À„‹L$8…ÉtDÿÑPèHóÿÿ‹ðƒÄ…öt"ÿt$‹L$$‹Q‹L$ Q‹L$ ‹@QVÿЃÄ…Àujh h ÷,jé‹L$4ÿt$P�9–‹L$ Q‹L$ QuèLÞ‹ðƒÄ…öu0h h ÷,jéˆèÝÝ‹ðƒÄ…öuh h ÷,jéiVèíúÿÿƒÄ‰D$…Àuh# h ÷,jéG�]jÅÃSPèý»ýÿƒÄ ‰D$D…À„j� �ÍSQèÜ»ýÿƒÄ ‰D$(…À„æÿt$Pÿt$Lÿt$(Vè üÿÿƒÄ…Àu$h- h ÷,jh¯jè»òýÿ‹\$XƒÄéÖ��jÅÃSPè{»ýÿ‹\$PƒÄ ‰D$$…Àth‹D$4ÿp Sè?ÄýÿƒÄ…ÀtT‹D$$SPÿt$$VèXóÿÿƒÄ…Àuh6 h ÷,jh¯jèIòýÿƒÄëk‹D$,…ÀtnP+èUVèòóÿÿƒÄ …Àu]h; ëÈh2 h ÷,jh¯jè òýÿƒÄë.h) h ÷,jé/ÿÿÿh h ÷,jh¯jèÞñýÿƒÄ3ÛVèóîÿÿƒÄ3ö‹D$…Àt PèPöÿÿƒÄ‹D$…Àt PèùýÿƒÄ‹D$…Àt PèNÀýÿƒÄ‹D$…Àt Pè=ÀýÿƒÄ‹D$ …Àt Pè,ÀýÿƒÄ‹D$$…Àt PèÀýÿƒÄ…Ût SèÀýÿƒÄ‹D$(][…Àt Pèû¿ýÿƒÄ…öu&hk h ÷,h�h®DCMPA30€×ÕÞ±�#`ÿDܳšY3ú:hb060áŠÒFáRŒ€Ã ;„ÒòÅ‰Ú !€æŠî4 ˆƒ³SaüÓS ŠAÍi1¯ë Z0°°ï ›Á~w- ƒ›áÆàe1pF dbD,+!ͬh¹f�êSªXƒR1*«scV­jÄé—g@#D�2õб Ó¼EÙ¢ÕªQ-Z©T X’‚$£ pa& V®\“^9²ÅRbZœ,£"Äë–kJ¼Sjd«UjN‰(3¢-¨º¥ÊÍË4®É�Úô\ ‡Ë2eÊ](^”<¡" T‘ TŒxq¢…J�+[–PQ¢Åˆ%ÂQrd‰µªŒfF( õ²ä*åW2�¼تV®ôà¨UŒ!Â#I@ÀQŠ“(D�‘@þ²Dù‚ˆ“(²—<1 &ĉ¿H‰"DJ+S”¬‘ �Á-aV‚8!K)Wƒ ™Êä€ ACÕ°°4²Æ(üK…ÿÐhj \´N„¿CyéFÀˆ¡Èú© €°…€o@Nð @’3ƒV÷LC�ªŽÔÁÀõà›ƒC"qÀ„£± $ª Â`‚¡ˆÆ>È@¶!¯˜p �øeìÇãgC"{'¤÷R –’‡\ fN‚0ï¦?\\ "à[00P Ü0 œØqÁP¢{Š%fSq?ÃJ‰\”‘6?ãÆ7+V¤Hñ¢®‹ºè›½8Q;I/T €åÅŠ9)€ÃÁŠ|¨^îÅŠø€B^®( B ‰?l à ÛÈ ®é°¨rptŒÈä;}0«FõàóAc`-Ä( ld be found' ); Assert.equal( result.totalIdentifiers, 5, '5 kinds of domains should be found'); Assert.equal( result.groupByIdentifier[ 'C' ].length, 2, '2 there should be 2 "C" domains'); }); it( 'same domains meet again', function(){ var samples = SampleParser( 'meet_again.txt' ); var result = ConnectedDomain( samples, function( point ){ return point; }); Assert.equal( result.totalDomains, 2, '2 domains should be found' ); Assert.equal( result.domains.length, 2, '2 domains should be found' ); Assert.equal( result.totalIdentifiers, 2, '2 kinds of domains should be found'); }); it( 'parse domains with soft link', function(){ var samples = SampleParser( 'hard_or_soft.txt' ); var result = ConnectedDomain( samples, function( point ){ return point; }, false ); Assert.equal( result.totalDomains, 2, '2 domains should be found' ); Assert.equal( result.domains.length, 2, '2 domains should be found' ); Assert.equal( result.totalIdentifiers, 2, '2 kinds of domains should be found'); console.log( JSON.stringify( result ) ); }); it( 'parse domains with hard link', function(){ var samples = SampleParser( 'hard_or_soft.txt' ); var result = ConnectedDomain( samples, function( point ){ return point; }, true ); Assert.equal( result.totalDomains, 6, '6 domains should be found' ); Assert.equal( result.domains.length, 6, '6 domains should be found' ); Assert.equal( result.totalIdentifiers, 2, '2 kinds of domains should be found'); }); }); ‹D$ÿpèTÔþÿƒÄËD$‹@ÿp èQþÿƒÄÃÌÌÌÌÌÌÌÌÌÌÌÌÌ‹D$‹@…Àtƒx tƒxt ƒxt3ÀøÃÌÌÌÌÌÌÌÌÌÌSW‹|$‹Gÿp è/þÿ‹ØƒÄ…Ûu_[ÃV‹t$‹F‹@ …Àt PèNþÿƒÄ‹F‰X ‹Gÿpèúþÿ‹ØƒÄ…Ût-‹F‹@…Àt Pè!þÿƒÄ‹F‰X‹GÿpèÍþÿ‹øƒÄ…ÿu^_3À[ËF‹@…Àt PèîþÿƒÄ‹F^‰x¸_[ÃÌÌÌÌÌÌÌÌÌÌÌÌV‹t$ W‹|$ ‹Fÿp ‹Gÿp è•þÿƒÄ…Àu8‹Fÿp‹Gÿpè}þÿƒÄ…Àu ‹Fÿp‹GÿpèeþÿƒÄ…Àu_¸^Ã_3À^ÃÌ‹D$‹@ÿp‹D$ ‹@ÿpè7þÿƒÄ÷ØÀ@ÃÌÌÌÌÌÌÌÌÌÌÌÌÌÌ‹D$ÿpè4ÐþÿYÃÌÌÿt$ ÿt$ jèáÚƒÄ …Àuhâhئ,j jwj èUCþÿƒÄ3ÀÃPjtÿt$ èÃ%þÿƒÄ ¸ÃÌÌÌÌÌÌÌÌÌÌ‹D$ÿt$ÿpèðÚƒÄÃÌÌÌÌÌÌÌÌÌÌÌÌ‹D$jÿt$ÿpÿt$芃ÄÃÌÌÌÌÌÌ‹D$jÿt$ÿpÿt$èjƒÄÃÌÌÌÌÌÌ‹D$jÿt$ÿpÿt$èJƒÄÃÌÌÌÌÌÌÿt$ ÿt$ jèÑÙƒÄ …Àuhhئ,j jzj è…BþÿƒÄ3ÀÃPjtÿt$ èó$þÿƒÄ ¸ÃÌÌÌÌÌÌÌÌÌÌ‹D$ÿt$ÿpèàÙƒÄÃÌÌÌÌÌÌÌÌÌÌÌÌW‹|$…ÿuh<0/ÿt$ è9§þÿ3ɃÄ…ÀŸÁ‹Á_ËGVÿ7‰D$�D$PjèUÙ‹ðƒÄ …ö„õ‹3ÿS3Û…ÀtPè'þÿƒÀƒÄ™ƒâÂÁø…ÀEø‹F…ÀtPèþÿƒÀƒÄ™ƒâÂÁø;øBøh$�G hئ,Pèo4þÿ‹øƒÄ …ÿu'h&hئ,jAj}j è�AþÿƒÄVèèՃċÃ[^_ÃU‹l$jh<0/Uè­¨þÿƒÄ ƒøu9ÿt$ Wÿ6hT§,Uè㺃Ä…Àt ÿt$ Wÿvh\§,INDX( æêS²(hèX,xb+È<ˆ4�ÑÈ<ˆ4�Ñå2#?Õå2#?Õ83 hard_or_soft.txt,pZ+È<ˆ4�ÑÈ<ˆ4�Ñå2#?Õå2#?Õ83 HARD_O~1.TXT.p^+G!\4�ÑG!\4�Ñå2#?Õå2#?Õhe meet_again.txt.pZ+G