ÿØÿà JFIF    ÿÛ „  ( %"1!%)+...383,7(-.+  -+++--++++---+-+-----+---------------+---+-++7-----ÿÀ  ß â" ÿÄ     ÿÄ H    !1AQaq"‘¡2B±ÁÑð#R“Ò Tbr‚²á3csƒ’ÂñDS¢³$CÿÄ   ÿÄ %  !1AQa"23‘ÿÚ   ? ôÿ ¨pŸªáÿ —åYõõ\?àÒü©ŠÄï¨pŸªáÿ —åYõõ\?àÓü©ŠÄá 0Ÿªáÿ Ÿå[úƒ ú®ði~TÁbqÐ8OÕpÿ ƒOò¤Oè`–RÂáœá™êi€ßÉ< FtŸI“öÌ8úDf´°å}“¾œ6  öFá°y¥jñÇh†ˆ¢ã/ÃÐ:ªcÈ "Y¡ðÑl>ÿ ”ÏËte:qž\oäŠe÷󲍷˜HT4&ÿ ÓÐü6ö®¿øþßèô Ÿ•7Ñi’•j|“ñì>b…þS?*Óôÿ ÓÐü*h¥£ír¶ü UãS炟[AÐaè[ûª•õ&õj?†Éö+EzP—WeÒírJFt ‘BŒ†Ï‡%#tE Øz ¥OÛ«!1›üä±Í™%ºÍãö]°î(–:@<‹ŒÊö×òÆt¦ãº+‡¦%ÌÁ²h´OƒJŒtMÜ>ÀÜÊw3Y´•牋4ǍýʏTì>œú=Íwhyë,¾Ôò×õ¿ßÊa»«þˆѪQ|%6ž™A õ%:øj<>É—ÿ Å_ˆCbõ¥š±ý¯Ýƒï…¶|RëócÍf溪“t.СøTÿ *Ä¿-{†çàczůŽ_–^XþŒ±miB[X±d 1,é”zEù»& î9gœf™9Ð'.;—™i}!ôšåîqêÛ٤ёý£½ÆA–àôe"A$˝Úsäÿ ÷Û #°xŸëí(l »ý3—¥5m! rt`†0~'j2(]S¦¦kv,ÚÇ l¦øJA£Šƒ J3E8ÙiŽ:cÉžúeZ°€¯\®kÖ(79«Ž:¯X”¾³Š&¡* ….‰Ž(ÜíŸ2¥ª‡×Hi²TF¤ò[¨íÈRëÉ䢍mgÑ.Ÿ<öäS0í„ǹÁU´f#Vß;Õ–…P@3ío<ä-±»Ž.L|kªÀê›fÂ6@»eu‚|ÓaÞÆŸ…¨ááå>åŠ?cKü6ùTÍÆ”†sĤÚ;H2RÚ†õ\Ö·Ÿn'¾ ñ#ºI¤Å´%çÁ­‚â7›‹qT3Iï¨ÖÚ5I7Ë!ÅOóŸ¶øÝñØôת¦$Tcö‘[«Ö³šÒ';Aþ ¸èíg A2Z"i¸vdÄ÷.iõ®§)¿]¤À†–‡É&ä{V¶iŽ”.Ó×Õÿ û?h¬Mt–íª[ÿ Ñÿ ÌV(í}=ibÔ¡›¥¢±b Lô¥‡piη_Z<‡z§èŒ)iÖwiÇ 2hÙ3·=’d÷8éŽ1¦¸c¤µ€7›7Ø ð\á)} ¹fËí›pAÃL%âc2 í§æQz¿;T8sæ°qø)QFMð‰XŒÂ±N¢aF¨…8¯!U  Z©RÊ ÖPVÄÀÍin™Ì-GˆªÅËŠ›•zË}º±ŽÍFò¹}Uw×#ä5B¤{î}Ð<ÙD é©¤&‡ïDbàÁôMÁ." ¤‡ú*õ'VŽ|¼´Úgllº¼klz[Æüï÷Aób‡Eÿ dÑ»Xx9ÃÜ£ÁT/`¼¸vI±Ýµ·Ë‚“G³þ*Ÿû´r|*}<¨îºœ @¦mÄ’M¹”.œ«Y–|6ÏU¤jç¥ÕÞqO ˜kDÆÁ¨5ÿ š;ÐЦ¦€GÙk \ –Þ=â¼=SͧµªS°ÚÍpÜãQűÀõ¬?ÃÁ1Ñ•õZà?hóœ€ L¦l{Y*K˜Ù›zc˜–ˆâ ø+¾ ­-Ök¥%ùEÜA'}ˆ><ÊIè“bpÍ/qÞâvoX€w,\úªò6Z[XdÒæ­@Ö—€$òJí#é>'°Ú ôª˜<)4ryÙ£|óAÅn5žêŸyÒäMÝ2{"}‰–¤l÷ûWX\l¾Á¸góÉOÔ /óñB¤f¸çñ[.P˜ZsÊË*ßT܈§QN¢’¡¨§V¼(Üù*eÕ“”5T¨‹Âê¥FŒã½Dü[8'Ò¥a…Ú¶k7a *•›¼'Ò·\8¨ª\@\õ¢¦íq+DÙrmÎ…_ªæ»ŠÓœ¡¯’Ré9MÅ×D™lælffc+ŒÑ,ý™ÿ ¯þǤ=Å’Á7µ÷ÚÛ/“Ü€ñýã¼àí¾ÕÑ+ƒ,uµMâÀÄbm:ÒÎPæ{˜Gz[ƒ¯«® KHà`ߨŠéí¯P8Aq.C‰ à€kòpj´kN¶qô€…Õ,ÜNŠª-­{Zö’æû44‰sŽè‰îVíRœÕm" 6?³D9¡ÇTíÅꋇ`4«¸ÝÁô ï’ýorqКÇZ«x4Žâéþuïf¹µö[P ,Q£éaX±`PÉÍZ ¸äYúg üAx ’6Lê‚xÝÓ*äQ  Ï’¨hÍ =²,6ï#rÃ<¯–£»ƒ‹,–ê•€ aÛsñ'%Æ"®ÛüìBᝠHÚ3ß°©$“XnœÖ’î2ËTeûìxîß ¦å¿çÉ ðK§þ{‘t‚Ϋ¬jéîZ[ ”š7L¥4VÚCE×]m¤Øy”ä4-dz£œ§¸x.*ãÊÊ b÷•h:©‡¦s`BTÁRû¾g⻩‹jø sF¢àJøFl‘È•Xᓁà~*j¯ +(ÚÕ6-£¯÷GŠØy‚<Ç’.F‹Hœw(+)ÜÜâÈzÄäT§FߘãÏ;DmVœ3Àu@mÚüXÝü•3B¨òÌÁÛ<·ÃÜ z,Ì@õÅ·d2]ü8s÷IôÞ¯^Ç9¢u„~ëAŸï4«M? K]­ÅàPl@s_ p:°¬ZR”´›JC[CS.h‹ƒïËœ«Æ]–÷ó‚wR×k7X‰k›‘´ù¦=¡«‰¨¨Â')—71ó’c‡Ðúµ `é.{§p¹ój\Ž{1h{o±Ý=áUÊïGÖŒõ–-BÄm+AZX¶¡ ïHðæ¥JmÙ;…䡟ˆ¦ ° äšiÉg«$üMk5¤L“’çÊvïâï ,=f“"íἊ5ô¬x6{ɏžID0e¸vçmi'︧ºð9$ò¹÷*£’9ÿ ²TÔ…×>JV¥}Œ}$p[bÔ®*[jzS*8 ”·T›Í–ñUîƒwo$áè=LT™ç—~ô·¤ÈÚ$榍q‰„+´kFm)ž‹©i–ËqÞŠ‰à¶ü( ‚•§ •°ò·‡#5ª•µÊ﯅¡X¨šÁ*F#TXJÊ ušJVÍ&=iÄs1‚3•'fý§5Ñ<=[íÞ­ PÚ;ѱÌ_~Ä££8rÞ ²w;’hDT°>ÈG¬8Á²ÚzŽ®ò®qZcqJêäÞ-ö[ܘbň±çb“ж31²n×iƒðÕ;1¶þÉ ªX‰,ßqÏ$>•î íZ¥Z 1{ç൵+ƒÕµ¥°T$§K]á»Ûï*·¤tMI’ÂZbŽÕiÒ˜}bÓ0£ª5›¨ [5Ž^ÝœWøÂÝh° ¢OWun£¤5 a2Z.G2³YL]jåtì”ä ÁÓ‘%"©<Ôúʰsº UZvä‡ÄiÆÒM .÷V·™ø#kèýiíÌ–ª)µT[)BˆõÑ xB¾B€ÖT¨.¥~ð@VĶr#¸ü*åZNDŽH;âi ],©£öØpù(šºãö¼T.uCê•4@ÿ GÕÛ)Cx›®0ø#:ÏðFÒbR\(€€Ä®fã4Þ‰Fä¯HXƒÅ,†öEÑÔÜ]Öv²?tLÃvBY£ú6Êu5ÅAQ³1‘’¬x–HŒÐ‡ ^ ¸KwJôÖŽ5×CÚ¨vÜ«/B0$×k°=ðbÇ(Ï)w±A†Á† 11Í=èQšµ626ŒÜ/`G«µ<}—-Ö7KEHÈÉðóȤmݱû±·ø«Snmá=“䫚mݱŸ¡¶~ó·“äUóJæúòB|E LêŽy´jDÔ$G¢þÐñ7óR8ýÒ…Ç› WVe#·Ÿ p·Fx~•ݤF÷0Èÿ K¯æS<6’¡WШ; ´ÿ ¥Êø\Òuî†åÝ–VNœkÒ7oòX¨Á­Ø÷FÎÑä±g÷ÿ M~Çî=p,X´ ÝÌÚÅ‹’ÃjÖ.ØöÏñ qïQ¤ÓZE†° =6·]܈ s¸>v•Ž^Ý\wq9r‰Î\¸¡kURÒ$­*‹Nq?Þª*!sŠÆ:TU_u±T+øX¡ ®¹¡,ÄâÃBTsÜ$Ø›4m椴zÜK]’’›Pƒ @€#â˜`é¹=I‡fiV•Ôî“nRm+µFPOhÍ0B£ €+¬5c v•:P'ÒyÎ ‰V~‚Ó†ÖuókDoh$å\*ö%Ю=£«…aȼ½÷Û.-½VŒŠ¼'lyî±1¬3ó#ÞE¿ÔS¤gV£m›=§\û"—WU¤ÚǼÿ ÂnÁGŒÃ ‚õN D³õNÚíŒÕ;HôyÄÈ©P¹Ä{:?R‘Ô¨âF÷ø£bÅó® JS|‚R÷ivýáâ€Æé¡è³´IئÑT!§˜•ت‚¬â@q€wnïCWÄ@JU€ê¯m6]Ï:£âx'+ÒðXvÓ¦Úm=–´7œ $ì“B£~p%ÕŸUþ« N@¼üï~w˜ñø5®—'Ôe»¤5ã//€ž~‰Tþ›Å7•#¤× Íö pÄ$ùeåì*«ÓŠEØWEÈsßg ¦ûvžSsLpºÊW–âµEWöˬH; ™!CYõZ ÃÄf æ#1W. \uWâ\,\Çf j’<qTbên›Î[vxx£ë 'ö¨1›˜ÀM¼Pÿ H)ƒêêŒA7s,|F“ 꺸k³9Ìö*ç®;Ö!Ö$Eiž•¹ÒÚ†ýóéÝû¾ÕS®ó$’NÝäŸz¤5r¦ãÄÃD÷Üø!°ø‡Ô&@m™Ì^Ãä­d q5Lnÿ N;.6½·N|#ä"1Nƒx“ã<3('&ñßt  ~ªu”1Tb㫨9ê–›–bìd$ߣ=#ÕãÒmU¯eí$EFù5ýYô櫨æì™Ç—±ssM]·á¿0ÕåJRÓªîiƒ+O58ÖñªŠÒx" \µâá¨i’¤i —Ö ” M+M¤ë9‚‰A¦°Qõ¾ßøK~¼Ã‘g…Ö´~÷Ï[3GUœÒ½#…kàÔ®Ò”‰³·dWV‰IP‰Ú8u¹”E ÖqLj¾êÕCBš{A^Âß;–¨`¯¬ìö ˼ ×tìø.tƐm*n¨y4o&Àx¥n¦×î‡aupáÛj8¿m›è¶ã!o½;ß0y^ý×^EÑ¿ÒjzŒ­)vÚÑnÄL …^ªô× ‡—‚3k Îý­hï]içå–îÏ*÷ñþ»Ô CÒjøjÍznˆ´ ¹#b'Fô‹ ‰v¥'’à'T´ƒHýÍ%M‰ ƒ&ÆÇŒï1 ‘ –Þ ‰i¬s žR-Ÿ kЬá¬7:þ 0ŒÅÒÕ/aÙ¬ÃÝ#Úøœ ©aiVc‰. ¹¦ãµ” ›Yg¦›ÆÎýº°f³7ƒhá·¸­}&D9¡ÂsÉÙÞèŠõØàC™¨ñbFC|´Ü(ŸƒÚÒ-%»'a Ì¿)ËÇn¿úÿ ÞŽX…4ÊÅH^ôΑí@ù¹Eh¶“L8Çjù ¼ÎåVªóR©Ï5uà V4lZß®=€xÖŸ–ÑÈ ÷”¨°¾__yM1tÉ?uÆþIkÄgæ@þ[¢†°XÃJ£j·:nkÅ¢u ‘}âGzö­/IµèЬ¼48q¦F°ŽR¼=ûì{´¯RýicS ÕÛ íNtÍÙï£,w4rêì®»~x(©Uñ§#Ñ&œÕ¤>ÎåÍÓ9’Ö{9eV­[Öjâ²ãu]˜å2›qÑšÕJç0€sÄ|Êëè0튔bÁ>“{×_F`Ø©ºê:µä,v¤ðfc1±"«ÔÍän1#=· Âøv~H½ÐßA¾¿Ü€Óš]Õ; I¾÷ç‚Qi†î¹9ywÔKG˜áñ zQY—§ÃÕZ07§X‚ Áh;ÁM)iÌCH-¯T‘ë|A0{Ò½LÚ–TâÖkÜ’dÀ“rmm»”جPF³ÖcbE§T€ÒxKºû’Ó®7±²(\4ŽÃ¸Uu@j™yĵ;³µ!Á¢b.W¤=mõ´êµK k ¸K^ÜÛ#p*Ü14qkZç5ïë †°5Ï%ÍÛ<Õ¤×Ô¥ê†C Õ´¼ú$ƒÖ“”]Ù¬qÞÚ[4©ý!ûÏ—Áb쳐XµA¬â~`›Çr¸8ìùÝ䫦<>ä÷«?xs´ÇÑ /á;¹øüÊÈÙà{"@Žïzâ¬[âß‚ U_<ÇŸ½4èN˜ú61®qŠu ¦þF£»äJ_ˆÙÎ~ ÞAã–݄ϗrŠD;xTž‘ô`É«…suãO`?³à™ô Lý#Íc5öoæØ‚y´´÷«ZR§<&JÇ+éâô´€i!Àˆ0æAoàðLèÖ-2ŸõW.’t^–(KÁmHµV@xÜÇy®Ñø­â^:Ú3w· 7½¹°ñ¸â¹®:',«Mœ—n­Á+Ãbš LÈ‘ÄnRÓÅœ%¦²‰¨ùQ:¤f‚ "PÕtô¸…cæl…&˜Ú˜Ôkv‹ž+vŠ,=¢v­6—Xy*¥t£«<™:“aîϲ=¦6rO]XI¿Œ÷¤zÚ­›¶ 6÷”w\d ü~v®ˆÌk«^m<ÿ ¢‰Õ\)ùºŽ;… lîÙÅEŠ®cѾ@vnMÏ,¼“ñ•ŽBxðÃzãÇç%3ˆ"}Ù•Åî> BÉú;Ò]V+P˜F_´ßé> Øše|ï‡ÄOmFæÇ ãqÞ$/xÐx­z`ï9"œÜij‚!7.\Td…9M‡•iŽ‹¾‘50ÞŽn¥ß4ÉôO ¹*í^QêËÜÇÌ8=ާs‰'ÂëÙ«á%Pú[O †ÅP¯Vsް.‰,kc¶ ¬A9n˜XÎ-ÞšN["¹QÕ‰ƒMýÁߺXJæÍaLj¾×Ãmã¾ãÚ uñÒþåQô¦¥ /ÄUx:‚ÍÜ’ Đ©ØÝ3V¨‰ÕnÐ6ó*óúK­«…c ¯U òhsý­jóÔj#,ímŒRµ«lbïUTŒÑ8†Ä0œÏr`ð¡¬É Ї ë"À² ™ 6¥ f¶ ¢ÚoܱԷ-<Àî)†a¶ž'Ú»¨TXqØæ¶÷YÄHy˜9ÈIW­YÀuMFë ºÏ’AqÌ4·/Ú †ô'i$øä­=Ä Ý|öK×40è|È6p‘0§)o¥ctî§H+CA-“ xØ|ÐXАç l8íºð3Ø:³¤¬KX¯UÿÙ  fc@s~dZddlZddlZddlZddlZddlZddlZddlZddlZddl m Z ddl m Z ddl mZmZmZmZddlZddlmZmZmZmZmZmZmZmZmZmZmZmZm Z ddlm!Z!ddl"m#Z#dd l$m%Z%dd l&m'Z'dd l(m)Z)dd l*m+Z+dd l,m-Z-ej.dZ/ej.dej0Z1ej.dZ2ej.dej0j3Z4dj5Z6ddddgZ7dZ8dZ9e9j:dej;d deZ<dZ=dZ>dZ?e@dZAe@d ZBe@d!ZCe@ee@d"ZDe@d#ZEd$ZFej.d%ej0ZGeFd&ZHd'eIfd(YZJd)eJfd*YZKdefd+YZLej.d,jMZNd-ZOd.ZPdd/ZQd0ZRd1eIfd2YZSd3ejTfd4YZUejVjWd5ZXeQe8eXZXd6ZYd7ZZdS(8s#PyPI and direct package downloadingiN(twraps(tsix(turllibt http_clientt configparsertmap( t CHECKOUT_DISTt Distributiont BINARY_DISTtnormalize_patht SOURCE_DISTt Environmenttfind_distributionst safe_namet safe_versiont to_filenamet Requirementt DEVELOP_DISTtEGG_DIST(t ssl_support(tlog(tDistutilsError(t translate(tget_all_headers(tunescape(tWheels^egg=([-A-Za-z0-9_.+!]+)$shref\s*=\s*['"]?([^'"> ]+)s([^<]+) \s+\(md5\)s([-+.a-z0-9]{2,}):s.tar.gz .tar.bz2 .tar .zip .tgzt PackageIndextdistros_for_urltparse_bdist_wininsttinterpret_distro_nameis<setuptools/{setuptools.__version__} Python-urllib/{py_major}tpy_majorit setuptoolscCs<ytj|SWn$tk r7td|fnXdS(Ns1Not a URL, existing file, or requirement spec: %r(Rtparset ValueErrorR(tspec((s</usr/lib/python2.7/site-packages/setuptools/package_index.pytparse_requirement_arg2s  cCs|j}d\}}}|jdr|jdrL|d }d}q|jddr~|dd!}|d }d}q|jd r|d }d }q|jd d r|dd!}|d }d }qn|||fS(s=Return (base,pyversion) or (None,None) for possible .exe names.exes .win32.exeitwin32s .win32-pyiiis.win-amd64.exeis win-amd64s .win-amd64-pyiN(NNN(tlowertNonetendswitht startswith(tnameR%tbasetpy_vertplat((s</usr/lib/python2.7/site-packages/setuptools/package_index.pyR;s$           c Cstjj|}|\}}}}}}tjj|jdd}|dkr|dkrtjj|jdd}nd|kr|jdd\}}n||fS(Nt/issourceforge.nettdownloadit#i(RR turlparsetunquotetsplit( turltpartstschemetservertpatht parameterstquerytfragmentR*((s</usr/lib/python2.7/site-packages/setuptools/package_index.pytegg_info_for_urlSs" ccst|\}}xt|||D] }|Vq%W|rtj|}|rx1t||jd|dtD] }|VqqWqndS(sEYield egg or source distribution objects that might be found at a URLit precedenceN(R;tdistros_for_locationt EGG_FRAGMENTtmatchRtgroupR(R3tmetadataR*R:tdistR?((s</usr/lib/python2.7/site-packages/setuptools/package_index.pyR^s "c CsA|jdr|d }n|jdrMd|krMtj|||gS|jdrd|krt|}|jsgStd|d|jd|jd td gS|jd rt|\}}}|d k rt ||||t |Snx>t D]6}|j|r|t | }t |||SqWgS( s:Yield egg or source distribution objects based on basenames.egg.zipis.eggt-s.whltlocationt project_nametversionR<is.exeN(R'Rt from_locationRt is_compatibleRERFRRR&RRt EXTENSIONStlen(RDtbasenameRAtwheeltwin_baseR+tplatformtext((s</usr/lib/python2.7/site-packages/setuptools/package_index.pyR=ls.       cCs"tt|tjj||S(sEYield possible egg or source distribution objects based on a filename(R=R tosR7RK(tfilenameRA((s</usr/lib/python2.7/site-packages/setuptools/package_index.pytdistros_for_filenamesc cs|jd}| r4td|dDr4dSxatdt|dD]F}t||dj|| dj||d|d|d|VqNWdS( sGenerate alternative interpretations of a source distro name Note: if `location` is a filesystem filename, you should call ``pkg_resources.normalize_path()`` on it before passing it to this routine! RCcss!|]}tjd|VqdS(s py\d\.\d$N(treR?(t.0tp((s</usr/lib/python2.7/site-packages/setuptools/package_index.pys siNit py_versionR<RN(R2tanytrangeRJRtjoin(RDRKRARVR<RNR4RU((s</usr/lib/python2.7/site-packages/setuptools/package_index.pyRs! ) ccst}|j}|dkrSxmtjj|j|D]}|||Vq7Wn;x8|D]0}||}||krZ|||VqZqZWdS(sHList unique elements, preserving order. Remember all elements ever seen.N(tsettaddR&Rtmovest filterfalset __contains__(titerabletkeytseentseen_addtelementtk((s</usr/lib/python2.7/site-packages/setuptools/package_index.pytunique_everseens         cstfd}|S(ss Wrap a function returning an iterable such that the resulting iterable only ever yields unique items. cst||S(N(Re(targstkwargs(tfunc(s</usr/lib/python2.7/site-packages/setuptools/package_index.pytwrappers(R(RhRi((Rhs</usr/lib/python2.7/site-packages/setuptools/package_index.pyt unique_valuesss3<([^>]*\srel\s{0,10}=\s{0,10}['"]?([^'" >]+)[^>]*)>ccsxtj|D]}|j\}}tttj|jjd}d|ksgd|krx=t j|D])}t j j |t |jdVqwWqqWxjd D]b}|j|}|dkrt j||}|rt j j |t |jdVqqqWdS( sEFind rel="homepage" and rel="download" links in `page`, yielding URLst,thomepageR.is Home PagesDownload URLiN(s Home PagesDownload URL(tRELtfinditertgroupsRZRtstrtstripR%R2tHREFRR turljoint htmldecodeR@tfindtsearch(R3tpageR?ttagtreltrelstpos((s</usr/lib/python2.7/site-packages/setuptools/package_index.pytfind_external_linkss'.  tContentCheckercBs)eZdZdZdZdZRS(sP A null content checker that defines the interface for checking content cCsdS(s3 Feed a block of data to the hash. N((tselftblock((s</usr/lib/python2.7/site-packages/setuptools/package_index.pytfeedscCstS(sC Check the hash. Return False if validation fails. (tTrue(R~((s</usr/lib/python2.7/site-packages/setuptools/package_index.pytis_validscCsdS(su Call reporter with information about the checker (hash name) substituted into the template. N((R~treporterttemplate((s</usr/lib/python2.7/site-packages/setuptools/package_index.pytreports(t__name__t __module__t__doc__RRR(((s</usr/lib/python2.7/site-packages/setuptools/package_index.pyR}s  t HashCheckercBsJeZejdZdZedZdZdZ dZ RS(sK(?Psha1|sha224|sha384|sha256|sha512|md5)=(?P[a-f0-9]+)cCs(||_tj||_||_dS(N(t hash_namethashlibtnewthashtexpected(R~RR((s</usr/lib/python2.7/site-packages/setuptools/package_index.pyt__init__ s cCsRtjj|d}|s#tS|jj|}|sBtS||jS(s5Construct a (possibly null) ContentChecker from a URLi(RR R0R}tpatternRvt groupdict(tclsR3R:R?((s</usr/lib/python2.7/site-packages/setuptools/package_index.pytfrom_urlscCs|jj|dS(N(Rtupdate(R~R((s</usr/lib/python2.7/site-packages/setuptools/package_index.pyRscCs|jj|jkS(N(Rt hexdigestR(R~((s</usr/lib/python2.7/site-packages/setuptools/package_index.pyR scCs||j}||S(N(R(R~RRtmsg((s</usr/lib/python2.7/site-packages/setuptools/package_index.pyR#s ( RRRStcompileRRt classmethodRRRR(((s</usr/lib/python2.7/site-packages/setuptools/package_index.pyRs    cBsveZdZdd%d&edZedZedZedZ dZ dZ d Z d Z d&d Zd Zd&d ZdZdZdZdZdZeeed&dZeedZdZdZdZdZd&dZdZdZdZdZ dZ!e"edZ#d Z$d!Z%d"Z&d#Z'd$Z(RS('s;A distribution index that scans web pages for download URLsshttps://pypi.python.org/simplet*cOstj||||d|jd |_i|_i|_i|_tjdj t t |j |_ g|_|otjo|ptj}|rtj||_ntjj|_dS(NR-t|(R RR't index_urlt scanned_urlst fetched_urlst package_pagesRSRRYRRR?tallowstto_scanRt is_availabletfind_ca_bundlet opener_fortopenerRtrequestturlopen(R~Rthostst ca_bundlet verify_sslRftkwtuse_ssl((s</usr/lib/python2.7/site-packages/setuptools/package_index.pyR+s   '  c Csg||jkr| rdSt|j|s(tfilterRPR7RRt itertoolststarmapt scan_egg_link(R~t search_pathtdirst egg_links((s</usr/lib/python2.7/site-packages/setuptools/package_index.pytscan_egg_linkss c Csttjj||(}ttdttj |}WdQXt |dkr[dS|\}}xQt tjj||D]4}tjj|||_ t |_|j|qWdS(Ni(topenRPR7RYRRR&RRpRqRJR RDR R<R[(R~R7Rt raw_linestlinestegg_patht setup_pathRB((s</usr/lib/python2.7/site-packages/setuptools/package_index.pyRs' " c sfd}xWtj|D]F}y,|tjj|t|jdWqtk rdqXqW||\}}|rxyt||D]h}t |\}} |j dr| r|r|d||f7}qj |nj |qWt jd|SdSdS(s#Process the contents of a PyPI pagecs|jjrtttjj|tjjd}t|dkrd|dkrt |d}t |d}t j j |ji|%siii(R@(tm((s</usr/lib/python2.7/site-packages/setuptools/package_index.pytRRN(RrRnRR RsRtR@R!R|R;R'tneed_version_infotscan_urltPYPI_MD5tsub( R~R3RwRR?RRtnew_urlR*tfrag((R~s</usr/lib/python2.7/site-packages/setuptools/package_index.pyRs$,  cCs|jd|dS(NsPPage at %s links to .py file(s) without version info; an index scan is required.(tscan_all(R~R3((s</usr/lib/python2.7/site-packages/setuptools/package_index.pyRscGsO|j|jkr;|r+|j||n|jdn|j|jdS(Ns6Scanning index of all packages (this may take a while)(RRRRR(R~RRf((s</usr/lib/python2.7/site-packages/setuptools/package_index.pyRs  cCs|j|j|jd|jj|jsN|j|j|jdn|jj|jss|j|nx3t|jj|jdD]}|j|qWdS(NR-(( RRt unsafe_nameRRR`REtnot_found_in_indexR(R~t requirementR3((s</usr/lib/python2.7/site-packages/setuptools/package_index.pyt find_packagess%cCsk|j|j|x8||jD])}||kr;|S|jd||q%Wtt|j||S(Ns%s does not match %s(tprescanRR`RtsuperRtobtain(R~Rt installerRB((s</usr/lib/python2.7/site-packages/setuptools/package_index.pyRs   cCsi|j|jd||jse|jtj|td|jjtj j |fndS(s- checker is a ContentChecker sValidating %%s checksum for %ss7%s validation failed for %s; possible download problem?N( RRRRRPtunlinkRRR)R7RK(R~tcheckerRQttfp((s</usr/lib/python2.7/site-packages/setuptools/package_index.pyt check_hashs    cCsrxk|D]c}|jdksJt| sJ|jdsJtt|rZ|j|q|jj|qWdS(s;Add `urls` to the list that will be prescanned for searchessfile:N(RR&RR(RRRtappend(R~turlsR3((s</usr/lib/python2.7/site-packages/setuptools/package_index.pytadd_find_links s  cCs2|jr%tt|j|jnd|_dS(s7Scan urls scheduled for prescanning (e.g. --find-links)N(RRRRR&(R~((s</usr/lib/python2.7/site-packages/setuptools/package_index.pyRs cCsN||jr |jd}}n|jd}}|||j|jdS(Ns#Couldn't retrieve index page for %rs3Couldn't find index page for %r (maybe misspelled?)(R`RRRR(R~RtmethR((s</usr/lib/python2.7/site-packages/setuptools/package_index.pyR!s   cCst|tst|}|r||j|jd||}t|\}}|jdrx|j|||}n|Stj j |r|St |}nt |j ||ddS(sLocate and/or download `spec` to `tmpdir`, returning a local path `spec` may be a ``Requirement`` object, or a string containing a URL, an existing local filename, or a project/version requirement spec (i.e. the string form of a ``Requirement`` object). If it is the URL of a .py file with an unambiguous ``#egg=name-version`` tag (i.e., one that escapes ``-`` as ``_`` throughout), a trivial ``setup.py`` is automatically created alongside the downloaded file. If `spec` is a ``Requirement`` object or a string containing a project/version requirement spec, this method returns the location of a matching distribution (possibly after downloading it to `tmpdir`). If `spec` is a locally existing file or directory name, it is simply returned unchanged. If `spec` is a URL, it is downloaded to a subpath of `tmpdir`, and the local filename is returned. Various errors may be raised if a problem occurs during downloading. is.pyRDN(RRRt _download_urlR@R;R't gen_setupRPR7RR#Rtfetch_distributionR&(R~R"ttmpdirR5tfoundR*R:((s</usr/lib/python2.7/site-packages/setuptools/package_index.pyR.+s c sFjd|id}dfd}|rfjj|||}n| r|dk r|||}n|dkrjdk rjn||}n|dkr| rj|||}n|dkrjdrdpd|n#jd||jd|jSdS( s|Obtain a distribution suitable for fulfilling `requirement` `requirement` must be a ``pkg_resources.Requirement`` instance. If necessary, or if the `force_scan` flag is set, the requirement is searched for in the (online) package index as well as the locally installed packages. If a distribution matching `requirement` is found, the returned distribution's ``location`` is the value you would have gotten from calling the ``download()`` method with the matching distribution's URL or filename. If no matching distribution is found, ``None`` is returned. If the `source` flag is set, only source distributions and source checkout links will be considered. Unless the `develop_ok` flag is set, development and system eggs (i.e., those using the ``.egg-info`` format) will be ignored. sSearching for %scs|dkr}nx||jD]}|jtkrn rn|kr#jd|d|R?RR@R&RFRJRPR7RKtdirnameRYtsetuptools.command.easy_installRtshutiltcopy2RtwriteREtsplitextR( R~RQR:RR?tdRRKtdstRR((s</usr/lib/python2.7/site-packages/setuptools/package_index.pyRs24 !!i c Cs|jd|d}zXtj|}|j|}t|tjjrnt d||j |j fn|j}d}|j }d}d|krt |d} ttt| }|j|||||nt|d}} x`trO|j|} | rK|j| | j| |d7}|j|||||qPqW|j||| WdQX|SWd|r|jnXdS( NsDownloading %ssCan't download %s: %s %siiscontent-lengthsContent-Lengthtwbi(RR&RRRRRRRRRRt dl_blocksizeRtmaxRtintt reporthookRRRRRRR( R~R3RQtfpRRtblocknumtbstsizetsizesRR((s</usr/lib/python2.7/site-packages/setuptools/package_index.pyt _download_tos:       cCsdS(N((R~R3RQR!tblksizeR#((s</usr/lib/python2.7/site-packages/setuptools/package_index.pyRscCs|jdrt|Syt||jSWnsttjfk r}djg|jD]}t |^qX}|r|j ||qt d||fnt j jk r}|St j jk r }|r|j ||jqt d||jfntjk rU}|r9|j ||jqt d||jfnNtjtj fk r}|r|j ||qt d||fnXdS(Nsfile:t s%s %ssDownload error for %s: %ss;%s returned a bad status line. The server might be down, %s(R(t local_opentopen_with_authRR!Rt InvalidURLRYRfRpRRRRRtURLErrortreasont BadStatusLinetlinet HTTPExceptiontsocket(R~R3twarningtvtargR((s</usr/lib/python2.7/site-packages/setuptools/package_index.pyRs6 +cCsHt|\}}|rLx7d|krH|jddjdd}qWnd}|jdrn|d }ntjj||}|dks|jd r|j||S|d ks|jd r|j||S|jd r|j ||S|d kr$t j j t j j|dS|j|t|j||SdS(Ns..t.s\t_t__downloaded__s.egg.zipitsvnssvn+tgitsgit+shg+Ri(R;treplaceR'RPR7RYR(t _download_svnt _download_gitt _download_hgRRt url2pathnameR R0RRt_attempt_download(R~R5R3RR)R:RQ((s</usr/lib/python2.7/site-packages/setuptools/package_index.pyRs$%   cCs|j|tdS(N(RR(R~R3((s</usr/lib/python2.7/site-packages/setuptools/package_index.pyR8scCsK|j||}d|jddjkrC|j|||S|SdS(NRs content-typeR(R%RR%t_download_html(R~R3RQR((s</usr/lib/python2.7/site-packages/setuptools/package_index.pyR>;scCst|}xW|D]O}|jrtjd|r^|jtj||j||SPqqW|jtj|td|dS(Ns ([^- ]+ - )?Revision \d+:s���Unexpected HTML page found at ( ���R���Rq���RS���Rv���R���RP���R���R:��R���(���R~���R3���R���RQ���R���R.��(����(����s<���/usr/lib/python2.7/site-packages/setuptools/package_index.pyR?��B��s����       c���������C���sl��|�j��d�d��d�}�d�}�|�j���j�d��r;d�|�k�r;t�j�j�|��\�}�}�}�}�}�} �|� r;|�j�d��r;d�|�d �k�r;|�d �j��d�d��\�}�}�t�j�j�|��\�} �} �| �r8d �| �k�r�| �j��d �d��\�} �} �d �| �| �f�}�n �d �| �}�| �}�|�|�|�|�|�| �f�}�t�j�j�|��}�q8q;n��|��j�d �|�|��t �j �d�|�|�|�f��|�S(���NR/���i���i����R���s���svn:t���@s���//R-���i���t���:s��� --username=%s --password=%ss ��� --username=s'���Doing subversion checkout from %s to %ss���svn checkout%s -q %s %s( ���R2���R%���R(���R���R ���R0���t ���splitusert ���urlunparseR���RP���t���system(���R~���R3���RQ���t���credsR5���t���netlocR7���RU���t���qR���t���autht���hostt���usert���pwR4���(����(����s<���/usr/lib/python2.7/site-packages/setuptools/package_index.pyR:��Q��s$����!$&  c���������C���s���t��j�j�|���\�}�}�}�}�}�|�j�d�d��d�}�|�j�d�d��d�}�d��}�d�|�k�rz�|�j�d�d��\�}�}�n��t��j�j�|�|�|�|�d�f��}��|��|�f�S(���Nt���+i���iR/���i����R@��R���(���R���R ���t���urlsplitR2���R&���t���rsplitt ���urlunsplit(���R3���t ���pop_prefixR5���RF��R7���R9���R���t���rev(����(����s<���/usr/lib/python2.7/site-packages/setuptools/package_index.pyt���_vcs_split_rev_from_urlf��s����! !c���������C���s���|�j��d�d��d�}�|��j�|�d�t�\�}�}�|��j�d�|�|��t�j�d�|�|�f��|�d��k �r�|��j�d�|��t�j�d�|�|�f��n��|�S( ���NR/���i���i����RP��s���Doing git clone from %s to %ss���git clone --quiet %s %ss���Checking out %ss"���(cd %s && git checkout --quiet %s)(���R2���RR��R���R���RP���RD��R&���(���R~���R3���RQ���RQ��(����(����s<���/usr/lib/python2.7/site-packages/setuptools/package_index.pyR;��x��s����  c���������C���s���|�j��d�d��d�}�|��j�|�d�t�\�}�}�|��j�d�|�|��t�j�d�|�|�f��|�d��k �r�|��j�d�|��t�j�d�|�|�f��n��|�S( ���NR/���i���i����RP��s���Doing hg clone from %s to %ss���hg clone --quiet %s %ss���Updating to %ss���(cd %s && hg up -C -r %s -q)(���R2���RR��R���R���RP���RD��R&���(���R~���R3���RQ���RQ��(����(����s<���/usr/lib/python2.7/site-packages/setuptools/package_index.pyR<����s����  c���������G���s���t��j�|�|��d��S(���N(���R���R���(���R~���R���Rf���(����(����s<���/usr/lib/python2.7/site-packages/setuptools/package_index.pyR�����s����c���������G���s���t��j�|�|��d��S(���N(���R���R���(���R~���R���Rf���(����(����s<���/usr/lib/python2.7/site-packages/setuptools/package_index.pyR�����s����c���������G���s���t��j�|�|��d��S(���N(���R���R���(���R~���R���Rf���(����(����s<���/usr/lib/python2.7/site-packages/setuptools/package_index.pyR�����s����(���R���N()���R���R���R���R&���R���R���t���FalseR���R���R���R���R���R���R���R���R���R���R���R���R���R���R.���R��R��R��R��R%��R��R���R���R���R>��R?��R:��t ���staticmethodRR��R;��R<��R���R���R���(����(����(����s<���/usr/lib/python2.7/site-packages/setuptools/package_index.pyR���(��sL��� 3   +      #J ) $  #         s!���&(#(\d+|x[\da-fA-F]+)|[\w.:-]+);?c���������C���s���|��j��d��}�t�|��S(���Ni���(���R@���R���(���R?���t���what(����(����s<���/usr/lib/python2.7/site-packages/setuptools/package_index.pyt ���decode_entity��s����c���������C���s ���t��t�|���S(���s'���Decode HTML entities in the given text.(���t ���entity_subRV��(���t���text(����(����s<���/usr/lib/python2.7/site-packages/setuptools/package_index.pyRt�����s����c������������s�����f�d���}�|�S(���Nc������������s������f�d���}�|�S(���Nc�������������s?���t��j���}�t��j���z���|��|���SWd��t��j�|��Xd��S(���N(���R0��t���getdefaulttimeoutt���setdefaulttimeout(���Rf���Rg���t ���old_timeout(���Rh���t���timeout(����s<���/usr/lib/python2.7/site-packages/setuptools/package_index.pyt���_socket_timeout��s ����  (����(���Rh���R]��(���R\��(���Rh���s<���/usr/lib/python2.7/site-packages/setuptools/package_index.pyR]����s����(����(���R\��R]��(����(���R\��s<���/usr/lib/python2.7/site-packages/setuptools/package_index.pyt���socket_timeout��s���� c���������C���sI���t��j�j�|���}�|�j���}�t�j�|��}�|�j���}�|�j�d�d��S(���sq�� A function compatible with Python 2.3-3.3 that will encode auth from a URL suitable for an HTTP header. >>> str(_encode_auth('username%3Apassword')) 'dXNlcm5hbWU6cGFzc3dvcmQ=' Long auth strings should not cause a newline to be inserted. >>> long_auth = 'username:' + 'password'*10 >>> chr(10) in str(_encode_auth(long_auth)) False s��� R���(���R���R ���R1���t���encodet���base64t ���encodestringR���R9��(���RH��t���auth_st ���auth_bytest ���encoded_bytest���encoded(����(����s<���/usr/lib/python2.7/site-packages/setuptools/package_index.pyt ���_encode_auth��s ����   t ���Credentialc�����������B���s)���e��Z�d��Z�d���Z�d���Z�d���Z�RS(���s:��� A username/password pair. Use like a namedtuple. c���������C���s���|�|��_��|�|��_�d��S(���N(���t���usernamet���password(���R~���Rh��Ri��(����(����s<���/usr/lib/python2.7/site-packages/setuptools/package_index.pyR�����s���� c���������c���s���|��j��V|��j�Vd��S(���N(���Rh��Ri��(���R~���(����(����s<���/usr/lib/python2.7/site-packages/setuptools/package_index.pyt���__iter__��s����c���������C���s���d�t��|���S(���Ns���%(username)s:%(password)s(���t���vars(���R~���(����(����s<���/usr/lib/python2.7/site-packages/setuptools/package_index.pyt���__str__��s����(���R���R���R���R���Rj��Rl��(����(����(����s<���/usr/lib/python2.7/site-packages/setuptools/package_index.pyRg����s���  t ���PyPIConfigc�����������B���s2���e��Z�d����Z�e�d����Z�d���Z�d���Z�RS(���c���������C���su���t��j�d�d�d�g�d��}�t�j�j�|��|��t�j�j�t�j�j�d��d��}�t�j�j �|��rq�|��j �|��n��d�S(���s%��� Load from ~/.pypirc Rh��Ri��t ���repositoryR���t���~s���.pypircN( ���t���dictt���fromkeysR���t���RawConfigParserR���RP���R7���RY���t ���expanduserR���R���(���R~���t���defaultst���rc(����(����s<���/usr/lib/python2.7/site-packages/setuptools/package_index.pyR�����s ����!c���������C���sM���g��|��j����D]$�}�|��j�|�d��j���r �|�^�q �}�t�t�|��j�|���S(���NRn��(���t���sectionsR���Rq���Rp��R���t���_get_repo_cred(���R~���t���sectiont���sections_with_repositories(����(����s<���/usr/lib/python2.7/site-packages/setuptools/package_index.pyt���creds_by_repository��s����$c���������C���sO���|��j��|�d��j���}�|�t�|��j��|�d��j���|��j��|�d��j����f�S(���NRn��Rh��Ri��(���R���Rq���Rg��(���R~���Rx��t���repo(����(����s<���/usr/lib/python2.7/site-packages/setuptools/package_index.pyRw����s����c���������C���s7���x0�|��j��j���D]�\�}�}�|�j�|��r�|�Sq�Wd�S(���s��� If the URL indicated appears to be a repository defined in this config, return the credential for that repository. N(���Rz��t���itemsR(���(���R~���R3���Rn��t���cred(����(����s<���/usr/lib/python2.7/site-packages/setuptools/package_index.pyt���find_credential��s����(���R���R���R���t���propertyRz��Rw��R~��(����(����(����s<���/usr/lib/python2.7/site-packages/setuptools/package_index.pyRm����s���  c���������C���s��t��j�j�|���\�}�}�}�}�}�}�|�j�d��rE�t�j�d���n��|�d �k�rl�t��j�j�|��\�}�} �n�d �}�|�s�t���j �|���} �| �r�t �| ��}�| �j �|��f�} �t �j �d�| ��q�n��|�r&d�t�|��}�|�| �|�|�|�|�f�} �t��j�j�| ��} �t��j�j�| ��}�|�j�d�|��n�t��j�j�|���}�|�j�d�t��|�|��}�|�rt��j�j�|�j��\�}�}�}�}�}�}�|�|�k�r|�| �k�r|�|�|�|�|�|�f�} �t��j�j�| ��|�_�qn��|�S( ���s4���Open a urllib2 request, handling HTTP authenticationRA��s���nonnumeric port: ''t���httpt���httpss*���Authenticating as %s for %s (from .pypirc)s���Basic t ���Authorizations ���User-Agent(���R��R��N(���R���R ���R0���R'���R���R*��RB��R&���Rm��R~��Rp���Rh��R���R���Rf��RC��R���t���Requestt ���add_headert ���user_agentR3���(���R3���R���R5���RF��R7���t���paramsR9���R���RH��RI��R}��R���R4���R���R���R ��t���s2t���h2t���path2t���param2t���query2t���frag2(����(����s<���/usr/lib/python2.7/site-packages/setuptools/package_index.pyR)����s6����$   'c���������C���s���|��S(���N(����(���R3���(����(����s<���/usr/lib/python2.7/site-packages/setuptools/package_index.pyt ���fix_sf_url?��s����c���������C���s��t��j�j�|���\�}�}�}�}�}�}�t��j�j�|��}�t�j�j�|��rX�t��j�j�|���S|�j �d��rPt�j�j �|��rPg��}�x�t�j �|��D]�} �t�j�j �|�| ��} �| �d�k�r�t �| �d���} �| �j���} �Wd�QXPn�t�j�j �| ��r�| �d�7} �n��|�j�d�j�d�| ���q�Wd�} �| �j�d�|��d �d �j �|���} �d�\�}�}�n�d�\�}�}�} �i�d�d�6}�t�j�| ��}�t��j�j�|��|�|�|�|��S(���s7���Read a local path, with special support for directoriesR-���s ���index.htmlt���rNs���<a href="{name}">{name}</a>R)���sB���<html><head><title>{url}{files}R3tfiless itOKisPath not founds Not founds text/htmls content-type(iR(isPath not founds Not found(RR R0RR=RPR7tisfileRR'RRRYRRRtformatRtStringIORR(R3R5R6R7tparamR9RRQRRtfilepathR tbodyRtstatustmessageRt body_stream((s</usr/lib/python2.7/site-packages/setuptools/package_index.pyR(Cs,$!  ! ([RtsysRPRSRR0R`RRt functoolsRtsetuptools.externRtsetuptools.extern.six.movesRRRRRt pkg_resourcesRRRR R R R R RRRRRRt distutilsRtdistutils.errorsRtfnmatchRtsetuptools.py27compatRtsetuptools.py33compatRtsetuptools.wheelRRR>tIRrRR?RR2RIt__all__t_SOCKET_TIMEOUTt_tmplRRFRR#RR;R&RR=RRRReRjRmR|tobjectR}RRRRWRVRtR^RfRgRrRmRRR)RR((((s</usr/lib/python2.7/site-packages/setuptools/package_index.pytsv        " X       !  "  !~    &.