-í XÖ?csº dklZ dklZdklZdklZdkZdk Z dk Z dk Z d„Z de i fd„ƒYZ9dfd „ƒYZÿed joõdklZed d ƒZeeƒd joAed djo°ed eeƒZx‘d o†y\eieidddƒIJed ƒ eieidddƒIJ ed ƒWn   eiƒ d‚nXq(Wnzed djoeedeeƒZxFd o;yed ƒWn eiƒd‚nXqìWnnyed eeƒZx]d oRy(eiddd ƒGHed ƒWn eiƒd‚nXqUWndS((s MaxStreamPhy(szfill(sargv(ssleepNcs|t|ƒdjo'ttdti|ƒƒƒgSngi}|D]}|t |ƒdƒqT~SdS(s?Returns a list of integers for each character in s using ASCII.is0x%siN( slensssintsevalsbinasciisb2a_hexsappends_[1]scs_ascii(sss_[1]sc((s ./maxmac.pys_asciis 'sMaxStreamMacRXThreadcs;tZd„Z d„Z"d„Z,d„ZRS(Ncs2tii|ƒ||_d|_dS(Ni(s threadingsThreads__init__sselfsmacsstop(sselfsmac((s ./maxmac.pys__init__s cs !d|_dS(Ni(sselfsstop(sself((s ./maxmac.pysshutdown scs­"#|i}$d}%|iidƒ}&xo&| o|i oX'tdd|ƒ(|d7})|djo )d}n*|iidƒ}q3W+|SdS(Niif0.001iii(sselfsmacstiredsphysreadscsstopssleep(sselfscsmacstired((s ./maxmac.pysread"s    cst,./|i}1d}2xO2|i o@3|iƒ}4|o5||7}n7|i|ƒ}q!WdS(sbGrab characters and try to make sense of them... kinda like a realtime regular expression.sN(sselfsmacsssstopsreadscs deserialize(sselfssscsmac((s ./maxmac.pysrun,s   (s__name__s __module__s__init__sshutdownsreadsrun(((s ./maxmac.pysMaxStreamMacRXThreads    s MaxStreamMaccsœ9tZ:dfd„ƒYZ>dd„ZNd„ZPd„ZTd„Zdd„Z£d „Z¯d „Z Åd „Z çd „Z ðd „Z RS(NsDescs:tZ;RS(N(s__name__s __module__(((s ./maxmac.pysDes:s ics¿>?||_@||_Ad|_Bd|_Cd|_Dd|_E||_Fto|djpt ‚G||_ H|i ƒJt d|ƒ|_ K|i iƒLdGHdS(Nif0.10000000000000001smacs mac ready(ssendupsselfsphysinusestimeoutsphy_busysmac_busysaddys __debug__sAssertionErrorspromiscsdeserializeInitsMaxStreamMacRXThreadsRXsstart(sselfsaddysphyssendupspromisc((s ./maxmac.pys__init__>s         csNO|iƒdS(N(sselfsshutdown(sself((s ./maxmac.pys__del__Nscs'PQ|iiƒR|iiƒdS(N(sselfsRXsshutdownsjoin(sself((s ./maxmac.pysshutdownPscs¥TU|iƒ|_V|i}Wd|_Yd|_Zd|_\|io]tidƒ|_ n_tidƒ|_ atidƒ|_ bd|_ dS(Nis _T_S_R_LLL_s_CCCC_s _[rcda]_[0-9]_[0-9]_[0-9a-f]{3}_s _[0-9a-f]{4}_shead( sselfsDessdesslsheadstailspromiscsrescompileshead_restail_resmatching(sselfsdes((s ./maxmac.pysdeserializeInitTs     csûdgi|i}j|i} k|i}l|i}m|i}n|i} o|i} qxxqt|ƒt|ƒjo[r|djo•s| i |ƒ}txHt| ot|ƒt|ƒjo#u|d}v| i |ƒ}q¤Ww|o'xd}yt d|dd!ƒ} nnz|djot|ƒt|ƒ| jo {d}n||djo$t|ƒt|ƒ| t|ƒjo=€|t|ƒ| }„to t|ƒt|ƒjpt‚…| i |ƒ}†|oŸˆ|t|ƒ|  } ‰t d|dd!ƒ}Š|i| ƒ} ‹|| joŒ|i|ƒd }n,d | |iƒfGH|d}’q`n“| o)”d |iƒGH˜|d}šq`n›d}nœPq`W||_ž| |_Ÿ|Sd S( s¾This is called everytime a new character (or multiple new characters) are received. s is a string that represents queued data and it will be modified by this function.sheadisdatas0x%sii stailissBad cksum (%04x): %ssAlmost matched packet: %sN(sselfsdesslsmatchingsheadstailshead_restail_reslensssmatchsmsevalstaildatas __debug__sAssertionErrors nontaildatasck1shash16sck2supDemuxsrstrip(sselfsssheadsdessmsmatchingstailsck1staildatasck2s nontaildatastail_reshead_resl((s ./maxmac.pys deserializedsX       $   "- 7*           cs£§d}¨x0t|ƒD¨]}©|d>||Ad@}qW«td„dgt|ƒƒ}¬to||jpt‚­|SdS(Niiiÿÿcs«|d>||Ad@S(Niiÿÿ(shsc(shsc((s ./maxmac.pys«s(shashs_asciisstrscsreduceshash2s __debug__sAssertionError(sselfsstrscshashshash2((s ./maxmac.pyshash16£s  "cs˯°t|ƒdjo|p2hdd<dd<dd<dd <|iƒ}µt|ƒ}Àd ||i|||f}Á|d |i |ƒ}Ât ot|ƒd jpt ‚Ã|SdS( Nisrsrtsscsctssdsdatasasacks_%c_%x_%x_%03x_%ss_%04x_i(slenstypestslowersdataslsselfsaddysdestsp0shash16sps __debug__sAssertionError(sselfstypesdatasdestspsp0stsl((s ./maxmac.pys downPacketize¯s Q $c sdÅÇ|d}Èt|dƒ}Ét|dƒ}Êttd|dd!ƒƒ}Ë|dd|!}Ìt|i ƒt i joÍ|i |ƒnÎ|d|i gjo ÎdSnÏ|d jo#Ð|i|id d |ƒIJnpÑ|d joÔnYÕ|d jo³Ö|iidddgƒ}×h|dd<|dd<|dd<}Øt|iƒt i jo&Ú|i||||dj|ƒnÛ|i|idd |ƒIJn–Ü|djonÝh}Þt|iƒt i jo&à|i||||dj|ƒná|i|idd |ƒIJnâ|djoåndS(Niiis0xii i isrsctssscsssATRSsATERsATGDsRSsERisGDsacksdsa(spstsintsssrsevalslsdatastypesselfspromiscstypess FunctionTypesaddysphys downPacketizes sendCommandssstatsssendup(sselfspsstatssdataslsssrst((s ./maxmac.pysupDemuxÅs4   #0&# &#cs&çî|i|id||ƒIJdS(Nsdata(sselfsphys downPacketizesdatasdest(sselfsdestsdata((s ./maxmac.pyssendDownçscsðød}ùxwùdolú|id|}ût|ƒüx%ü|iioüt|iƒqCWý|i|iddƒIJqWdS(Niiisrtss(sretriessselfstimeoutssleepsmacsbusysphys downPacketize(sselfsdestsdatasretriesstimeout((s ./maxmac.pys sendDown1ðs   ( s__name__s __module__sDess__init__s__del__sshutdownsdeserializeInits deserializeshash16s downPacketizesupDemuxssendDowns sendDown1(((s ./maxmac.pys MaxStreamMac9s     ?  " s__main__ii€%istxsdatasfoobarisssome exceptionsrxsmonkey(smaxphys MaxStreamPhysstringszfillssyssargvstimessleepsbinasciis threadingsrestypess_asciisThreadsMaxStreamMacRXThreads MaxStreamMacs__name__sphyslensNonesmacs downPacketizesshutdown( sres MaxStreamMacsbinasciismacs_asciis threadingsphys MaxStreamPhyssleepsargvszfillsMaxStreamMacRXThreadstypes((s ./maxmac.pys? sX     Æ