ÿØÿà 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ÿÙ U K^@s@dZddlZddlZddlZddlZddlZddlZddlZddlZddl Z ddl Z ddl Z ddl Z ddl Z ddlmZddlZddlZedZddZddd d Zded d Zdfd dZdgddZddZddZddZddZddZddZddZ dd Z!dej"ddfd!d"Z#d#d$Z$dej"dfd%d&Z%d'd(Z&d)d*Z'dhd+d,Z(did-d.Z)d/Z*d0Z+d1Z,d2Z-d3Z.d4Z/d5Z0d6Z1d7Z2d8Z3d9Z4d:Z5d;d<Z6d=d>Z7djd?d@Z8dAdBZ9dCdDZ:dEdFZ;dGdHZdkdMdNZ?dOdPZ@dQdRZAdSdTZBdUdVZCdldXdYZDdZd[ZEd\d]ZFd^d_ZGdmd`daZHdbdcZIejJjKZKejJjLZLdS)nz/Convenience functions for use in package hooks.N)implz[^0-9a-zA-Z_.-]cCsLtjddkr$t|tr8|d}nt|ts8|d}td|ddS)z{Generate a valid report key name from a file path. This will replace invalid punctuation symbols with valid ones. r3UTF-8. _) sysversion isinstancebytesdecodeencode_invalid_key_chars_resubreplace)pathr2/usr/lib/python3/dist-packages/apport/hookutils.py path_to_key%s     rTFcCs,|s t|}tj|r(t|||||dS)aAttach file contents if file exists. If key is not specified, the key name will be derived from the file name with path_to_key(). If overwrite is True, an existing key will be updated. If it is False, a new key with '_' appended will be added instead. If the contents is valid UTF-8, or force_unicode is True, then the value will be a string, otherwise it will be bytes. N)rosrexists attach_filereportrkeyZ overwrite force_unicoderrrattach_file_if_exists3s  rc Cszdt|d}|}W5QRX|r8|jdddWSz|dWWStk r`|YWSXWn2tk r}zdt|WYSd}~XYnXdS)a Return the contents of the specified path. If the contents is valid UTF-8, or force_unicode is True, then the value will a string, otherwise it will be bytes. Upon error, this will deliver a text representation of the error, instead of failing. rbrrerrorsError: N)openreadstripr UnicodeDecodeError Exceptionstr)rrfcontentserrr read_fileFs  r*cCs6|s t|}|s"||kr"|d7}qt||d||<dS)aAttach a file to the report. If key is not specified, the key name will be derived from the file name with path_to_key(). If overwrite is True, an existing key will be updated. If it is False, a new key with '_' appended will be added instead. If the contents is valid UTF-8, or force_unicode is True, then the value will a string, otherwise it will be bytes. r)rN)rr*rrrrr\s  rc Cst|}|D]\}}|r(||kr(qdt|}t|tkr\|dksR|dr\|||<q|r|d|}|r||||<qd||<nd||<tj t |j } | |dt|<qdS)a(Attach information about any modified or deleted conffiles. If conffiles is given, only this subset will be attached. If ui is given, ask whether the contents of the file may be added to the report; if this is denied, or there is no UI, just mark it as "modified" in the report. zmodified.conffile.z [deleted]z [inaccessibleznIt seems you have modified the contents of "%s". Would you like to add the contents of it to your bug report?z [modified]zmtime.conffile.N) packagingZget_modified_conffilesitemsrtyper& startswithZyesnodatetimeZ fromtimestamprstatst_mtimeZ isoformat) rpackageZ conffilesZuiZmodifiedrr(rZresponsemtimerrrattach_conffilesrs      r4cCstztj|}Wntk r&YdSX|D]B}tj|r,|dr,|dd}d|dd}t |||q,dS)z3Attach information about any Upstart override filesNz /etc/init/.confz .overrideupstart.) apportr+ get_files ValueErrorrrrr.rr)rr2filesfileoverriderrrrattach_upstart_overridess r>c Csztj|}Wntk r&YdSX|D]`}tj|s@q,|drtj| dd}d|}ztj tj dd|}WnLt k rztj tj dd d|}Wnt k rYYq,YnXYnXt ||||d r,|d r,tjtj|d }d |}d|}ztj tj dd|}WnPt k rztj tj dd d|}Wnt k rzYYq,YnXYnXt |||q,dS)z9Attach information about a package's session upstart logsNz/usr/share/upstart/sessions/r5z.logr6ZXDG_CACHE_HOMEZupstartHOMEz.cachez/usr/share/applications/z.desktoprzupstart.application.zapplication-%s.log)r8r+r9r:rrrr.basenamerjoinenvironKeyErrorrendswithsplitext)rr2r;r'logrZ desktopnamerrrattach_upstart_logss<    rGcCs"|ddstdg|d<dS)zwAttach information from the kernel ring buffer (dmesg). This will not overwrite already existing information. Z CurrentDmesgr7dmesgN)getr#command_outputrrrr attach_dmesgsrLc Csd}tj|rt|D]}d||f}t|}t|jr|jd@dkrPq|dkrZqz t|}Wntt fk rYqYnX|r||d| dd<qdS) Nz/sys/class/dmi/idz%s/%sr)Z subsystemueventzdmi.rr) rrisdirlistdirr0S_ISREGst_moder*OSErrorIOErrorr)rZdmi_dirr'pstvaluerrr attach_dmis     rXcCst|t|ddt|ddt|ddtjdrXtdd g|d <tdd g|d <td g|d<td dg|d<td dg|d<tddg|d<tdddg|d<|d}tdd|}tdd|}tdd|}tdd|}tdd|}tdd|}||d<t|d |kr@d!|kr@d"|d |d!f|d#<t d$rXtd$g|d%<t d&rtd&d'g }|r||d(<td&d)g }|r||d*<d+S),a~Attach a standard set of hardware-related data to the report, including: - kernel dmesg (boot and current) - /proc/interrupts - /proc/cpuinfo - /proc/cmdline - /proc/modules - lspci -vvnn - lscpi -vt - lsusb - lsusb -v - lsusb -t - devices from udev - DMI information from /sys - prtconf (sparc) - pccardctl status/ident z/proc/interruptsZProcInterrupts /proc/cpuinfo ProcCpuinfo /proc/cmdlineZProcKernelCmdLinez /sys/bus/pcilspci-vvnnZLspciz-vtzLspci-vtlsusbZLsusb-vzLsusb-vz-tzLsusb-tsort /proc/modulesZ ProcModulesZudevadminfoz --export-dbZUdevDbzID_FS_LABEL=(.*)zID_FS_LABEL=zID_FS_LABEL_ENC=(.*)zID_FS_LABEL_ENC=z by-label/(.*)zby-label/zdmi.sys.vendorzdmi.product.namez%s %sZ MachineTypeZprtconfZPrtconfZ pccardctlZstatusZPccardctlStatusZidentZPccardctlIdentN) rLrrrrrJrerrXcommand_availabler#)rlabelsoutrrrattach_hardwaresD       rgc Cst|tjddt|tjddt|dt|ddt|dd td d d g|d <tdd g|d<tdd g|d<tt|d<g}tjdrt d6}|D]*}d|kr| }| t |dqW5QRX|D]}d|}tddt|dg||<d|}tddt|g||<td|D]}tj|rntj|}d|t|f}t|||dn\tj|r0tj|}t|D]6} tj|| } d|t|t| f}t|| |qq0qdS) z (loosely based on http://www.alsa-project.org/alsa-info.sh) for systems where alsa-info is not installed (i e, *buntu 12.04 and earlier) z ~/.asoundrcZ UserAsoundrcz~/.asoundrc.asoundconfZUserAsoundrcAsoundconfz/etc/asound.confz/proc/asound/versionZ AlsaVersionrYrZZlsz-lz /dev/snd/Z AlsaDevicesZaplayZ AplayDevicesZarecordZArecordDevicesZ PciMultimediaz/proc/asound/cardsz]:rzCard%d.Amixer.infoZamixerz-crbzCard%d.Amixer.valuesz/proc/asound/card%d/codec*zCard%d.Codecs.%srzCard%d.Codecs.%s.%sN)rrr expanduserrrJ pci_devicesPCI_MULTIMEDIArr!lstripsplitappendintr&globisfiler@rrOrPrA) rZcardsfdlinefieldsZcardrZ codecpathcodecnamerrrrattach_alsa_old"sH         rwcCstjdr tdddg|d<nt|tddgtdtdtd |d <tjd rrtd d g|d<t|t|dS)z5Attach ALSA subsystem information to the report. z!/usr/share/alsa-base/alsa-info.shz--stdoutz --no-uploadZAlsaInfoZfuserr_z /dev/dsp*z /dev/snd/*z /dev/seq*ZAudioDevicesInUsez/usr/bin/pacmdZpacmdlistZ PulseListN)rrrrJrwrprXrLrKrrr attach_alsaOs $ rycCsbdtjkrdStjd}|tjD]8}|s.q$tj||}tj|r$t|tjr$dSq$dS)z/Is given command on the executable search path?PATHFT) rrBrmpathseprrArqaccessX_OK)commandrelementfilenamerrrrdas  rdc Cstj}|sd|d<z$tj|tj||r.tjp0d|d}Wn2tk rl}zdt|WYSd}~XYnX||d}|j dkr| } n*dt| dt|j  d |} |r| j d d d } | S) a;Try to execute given command (list) and return its stdout. In case of failure, a textual error gets returned. This function forces LC_MESSAGES to C, to avoid translated output in bug reports. If decode_utf8 is True (default), the output will be converted to a string, otherwise left as bytes. C LC_MESSAGESN)stdoutstderrstdinenvr rsError: command s failed with exit code s: rrr) rrBcopy subprocessPopenPIPErSr& communicate returncoder#r r ) r~inputr keep_locale decode_utf8rspr)rfresrrrrJos0    "   rJcCs*tdkrgStjdr"dgSgSdS)Nrz/usr/bin/pkexecZpkexec)rgetuidrrrrrr_root_command_prefixs   rcCs*t|tstdtt|||d|dS)a=Try to execute given command (list) as root and return its stdout. This passes the command through pkexec, unless the caller is already root. In case of failure, a textual error gets returned. If decode_utf8 is True (default), the output will be converted to a string, otherwise left as bytes. zcommand must be a listT)rr)r rxAssertionErrorrJr)r~rrrrrrroot_command_outputs rc CsLtjtjtjddd}t}ztj|d}t |d}| D]6\}}t |dsft d|d|tj||fqL|tt||g}||D]}z0t tj||d } | } W5QRXWntk rYqYnXz| d } Wntk rYnX| r.| ||<| qW5t |Xd S) a*Execute multiple commands as root and put their outputs into report. command_map is a keyname -> 'shell command' dictionary with the commands to run. They are all run through /bin/sh, so you need to take care of shell escaping yourself. To include stderr output of a command, end it with "2>&1". Just like root_command_output, this passes the command through pkexec, unless the caller is already root. This is preferrable to using root_command_output() multiple times, as that will ask for the password every time. ZAPPORT_DATA_DIRz/usr/share/apportZroot_info_wrapperz:script:wr#z(command must be a string (shell command)z%s | cat > %s rrN)rrrAabspathrBrItempfileZmkdtempshutilZrmtreer!r,hasattrrwritecloserrrwaitr"r#rTr r$) rZ command_mapZ wrapper_pathZworkdirZ script_pathZscriptZkeynamer~rr'Zbufrrrattach_root_command_outputss:    rcCsbd}|dkr>|jD]$}|jddd}||r||7}qq|j||jdkr^|SdS)Nr7rrrr)Zpollrr searchrrr)patternZprocesslinesrsrrr__filter_re_processs      rcCsv|rtjddd|gtjd}nNtjdrFtjdddd d gtjd}n&td tjrltjdddd gtjd}t||S) zExtract recent system messages which match a regex. pattern should be a "re" object. By default, messages are read from the systemd journal, or /var/log/syslog; but when giving "path", messages are read from there instead. tailz-nZ10000rz/run/systemd/systemZ journalctlz--systemz--quietz-bz-az/var/log/syslog) rrrrrrr|R_OKr)rrrUrrr recent_syslogs rc Cstjd}tj|r&t|tjs*dS|s8td}d}t|d0}|D]$}|j ddd}| |rL||7}qLW5QRX|S)alExtract messages from ~/.xsession-errors. By default this parses out glib-style warnings, errors, criticals etc. and X window errors. You can specify a "re" object as pattern to customize the filtering. Please note that you should avoid attaching the whole file to reports, as it can, and often does, contain sensitive and private data. z~/.xsession-errorsr7z^(\(.*:\d+\): \w+-(WARNING|CRITICAL|ERROR))|(Error: .*No Symbols named)|([^ ]+\[\d+\]: ([A-Z]+):)|([^ ]-[A-Z]+ \*\*:)|(received an X Window System error)|(^The error was \')|(^ \(Details: serial \d+ error_code)rrrr) rrrirr|rrccompiler!r r)rrrr'rsrrrxsession_errorss      rrM c Gs|stddgSd}tddg}|dD]}d}d}|dD]v}z|dd \}}Wntk rpYq@YnX|}|}|d krt|d d d } | d@d?}q@|dkr@|}q@|r*|r*||kr*|r|d7}|tdd|g7}q*|S)z9Return a text dump of PCI devices attached to the system.r\r]r7z-vvmmnnz N :rZClassirZSlotz-vvnns)rJrmr:r#ro) Z pci_classesresultoutputZ paragraphZ pci_classZslotrsrrWnrrrrj(s0   rjcCs tddgS)z9Return a text dump of USB devices attached to the system.r^r_)rJrrrr usb_devicesIsrcs*t|}r"fdd|D}n|}|S)zFRetrieve a list of files owned by package, optionally matching globpatcsg|]}tj|r|qSr)rpZfnmatch).0r'globpatrr Usz$files_in_package..)r+r9)r2rr;rrrrfiles_in_packagePs  rcCsdS)ZObsoleteNr)rr2rrr attach_gconf[src Cs6|dd}i}tj}d|d<tjdd|g|tjd}|jD]L}z|dd \}}} | } Wnt k rzYq@YnX| | |i|<q@tjdd|gtjd }|jD]~}z|dd \}}} | } Wnt k rYqYnX| ||i|dkr|d kr|d krd } |d||| f7}q||d<dS)z0Attach user-modified gsettings keys of a schema.ZGsettingsChangesr7z /nonexistingZXDG_CONFIG_HOME gsettingszlist-recursively)rrNrrsorg.gnome.shell)scommand-historys favorite-appszredacted by apportz %s %s %s ) rIrrBrrrrrrmrstripr: setdefault) rschemaZ cur_valuedefaultsrrlZ schema_namerrWrrrattach_gsettings_schemabs>           rcCs2t|dD]"}tj|dd}t||q dS)z@Attach user-modified gsettings keys of all schemas in a package.z)/usr/share/glib-2.0/schemas/*.gschema.xmlNi)rrrr@r)rr2Z schema_filerrrrattach_gsettings_packagesrcCs`tddg|d<tddg|d<tt|d<t|ddd d D]}|tjkr>tj|||<q>d S) z5Attach generic network-related information to report.ZipZrouteZIpRouteZaddrZIpAddrZ PciNetworkz/etc/network/interfacesZIfupdownConfigrh)Z http_proxyZ ftp_proxyZno_proxyN)rJrj PCI_NETWORKrrrB)rvarrrrattach_networks  rcCsttd|d<tddtddtddtd g|d <td d g|d <tjdrjtdddg}nd}||d<t|ddddS)z5Attach wireless (WiFi) network information to report.zH(NetworkManager|modem-manager|dhclient|kernel|wpa_supplicant)(\[\d+\])?:Z WifiSyslogz ESSID:(.*)zESSID:zEncryption key:(.*)zEncryption key: zAccess Point: (.*)zAccess Point: ZiwconfigZIwConfigZrfkillrxZRfKillz/sbin/iwZiwZregrIN/AZCRDAz/var/log/wpa_supplicant.logZWpaSupplicantLogrhN) rrcrrrJrrrr)rZ iw_outputrrr attach_wifis  rc!Cst|ddt|ddtdg|d<tddg|d <td }|rhtd d d g|}tdd||d<tdddddddddddddddd d!d"d#d$d%d&d'd(dd)d*d+d,d-d.d/ |d0<d1S)2zkAttach printing information to the report. Based on http://wiki.ubuntu.com/PrintingBugInfoScript. z/etc/papersizeZ Papersizez/var/log/cups/error_logZ CupsErrorLoglocaleZLocaleZlpstatr_ZLpstatz/etc/cups/ppd/*.ppdZfgrepz-Hz *NickNamez*/etc/cups/ppd/(.*).ppd:\*NickName: *"(.*)"z \g<1>: \g<2>ZPpdFilesZfoo2zjsz foomatic-dbzfoomatic-db-enginezfoomatic-db-gutenprintzfoomatic-db-hpijszfoomatic-filtersz foomatic-guiZhpijsZhplipZm2300wZmin12xxwZc2050ZhpojZpxljrZpnm2ppaZsplixzhp-ppdz hpijs-ppdszlinuxprinting.org-ppdszopenprinting-ppdszopenprinting-ppds-extraZ ghostscriptZcupszcups-driver-gutenprintZ ijsgutenprintzcupsys-driver-gutenprintzgimp-gutenprintzgutenprint-doczgutenprint-localeszsystem-config-printer-commonZkdeprintZPrintingPackagesN)rrJrprcrpackage_versions)rZppdsZ nicknamesrrrattach_printingsT   rc Csvt|tr|g}d}t|tj}d}t|tj}d|krXt|tjdgtjd|d<d|krt j drt |dd|d it |d d t|d d t||dd|ddD]}|st|dqrzR|ddkr|dd}n4tjddkrt|jddd}n|jddd}Wntk r>YqYnX|D]*}td|d|rDt|dqqDqdS)z0Attach MAC information and events to the report.z!audit\(|apparmor|selinux|securityz'apparmor="DENIED".+?profile=([^ ]+?)[ ]ZKernLogrHrZAuditLogz/var/run/auditd.pidzegrep "z" /var/log/audit/audit.logz/proc/version_signatureZProcVersionSignaturer[Z ProcCmdliner7Zapparmorr"rrrrrrhex^$N)r r&rcr IGNORECASErrrrrrrrrrfindallrI_add_tagrr r fromhexr r%match) rZprofilesZ mac_regexZmac_reZaa_regexZaa_rerZprofileZsearch_profilerrrattach_mac_eventss>   $    rcCs(|dd}|r|d7}|||d<dS)z#Adds or appends a tag to the reportZTagsr7rN)rI)rtagZ current_tagsrrrrs rcCst||d<dS)ziAttach version information for related packages In the future, this might also run their hooks. ZRelatedPackageVersionsN)r)rpackagesrrrattach_related_packagessrc s|sdSg}|D]v}|sqt|}|s6||dft|D]F}zt|}Wntk rhd}YnX|dkrvd}|||fq>qttddt|D\}}d|d fdd|DS) ztReturn a text listing of package names and versions. Arguments may be package names or globs, e. g. "foo*" r7rNcSsg|]}tt|qSr)maplen)rtrrrrsz$package_versions..z %%-%ds %%srcsg|] }|qSrr)rvZfmtrrr"s) r+Zpackage_name_globrnsortedZ get_versionr:rmaxziprA)rZversionsZpackage_patternZmatching_packagesr2r Z package_widthZ version_widthrrrrs*   rcCsz>tjd|gtjtjd}|dd}|jdkrgYSXg}|D]:}t|}|rHd|ksHd|ksHd|ksHd|ksH||qH|S)zCCheck loaded modules and return a list of those which are not free.cSsg|]}|dqS)r)rmrrrrrr?sz*nonfree_kernel_modules..ZGPLZBSDZMPLZMIT)r!rTrrn)Z module_listr'ZmodsZnonfreemsrrrnonfree_kernel_modules:s  $ rcCsd}t|D]}tj||}|dkstj|s6qt|d}|dkr\|dd}|dkrvt |}|d7}|d ||j d d d f7}q|S) Nr7rNrZmodes  Zedidz-base64z%s: %s rrr) rrPrrArqr!r"r#rbase64Z b64encoder )conrbr'rvalrrr__drm_con_infoLs  rcCs`d}tj|sdSt|D]<}tj||}tjtj|drt||dt|<qdS)zWAdd information about DRM hardware. Collect information from /sys/class/drm/. z/sys/class/drmNenabledzDRM.)rrrOrPrArrr)rZdrm_dirr'rrrrattach_drm_info]s rc Cs:tjd}|sztd\}|D]B}|}d|kr|drd|kr|ddddd}qpqW5QRdSW5QRXttj }z^zHz&t tj d t t |d }Wntk rYW WdSXW5t tj |XWntjk rYdSXztd |j}Wnttfk r0YdSX||kS) zCheck if the problem happened in the currently running XDG session. This can be used to determine if e. g. ~/.xsession-errors is relevant and should be attached. Return None if this cannot be determined. ZXDG_SESSION_IDz/proc/self/cgroupz name=systemd:z.scopez /session-rNirZDatez/run/systemd/sessions/)rrBrIr!r#rDrmrZ getlocaleLC_TIME setlocaletimemktimestrptimerCErrorr0r1rTrS)rZ session_idr'rsZ orig_ctimeZ report_timeZsession_start_timerrrin_session_of_problemls0   rc CsVd}|st|}tj|rRt|d&}dd|D}d|||<W5QRXdS)z;attach /etc/default/grub after filtering out password linesz/etc/default/grubrcSsg|]}|ds|ndqS)Zpasswordz### PASSWORD LINE REMOVED ###)r.rrrrrsz'attach_default_grub..r7N)rrrrr! readlinesrA)rrrr'Zfilteredrrrattach_default_grubs  rc Cs`d}g}tj|rBt| }t|}|d}|d}W5QRX||d<|r\d||d<dS)z:attach the results of the casper md5check of install mediaskiprZchecksum_missmatchZCasperMD5CheckResultrZCasperMD5CheckMismatchesN)rrrr!jsonloadrA)rlocationrZ mismatchesZ json_fileZcheckrrrattach_casper_md5checks   r)NTF)F)NTF)NN)N)N)N)N)ra)N)M__doc__rrrrr/rprcr0rrrrrZapport.packaging_implrr+r8apport.fileutilsrrrrr*rr4r>rGrLrXrgrwryrdZSTDOUTrJrrrrrrZPCI_MASS_STORAGErZ PCI_DISPLAYrkZ PCI_MEMORYZ PCI_BRIDGEZPCI_SIMPLE_COMMUNICATIONSZPCI_BASE_SYSTEM_PERIPHERALSZPCI_INPUT_DEVICESZPCI_DOCKING_STATIONSZPCI_PROCESSORSZPCI_SERIAL_BUSrjrrrrrrrrrrrrrrrrrrr fileutilsZshared_librariesZlinks_with_shared_libraryrrrrs      ' >- ! 5  ! $  +! *