Ë
    QKfE  ã                   óø  — d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlmZ d dl	m	Z
 d dl	mZ d dlmZ d dlmZmZmZ d dlmZ d dlmZmZmZmZmZ d dlZd dlZ ej8                  «         G d	„ d
e«      Z G d„ d«      Zd„ Z d„ Z!d.d„Z"d„ Z#d/d„Z$d„ Z%d„ Z&d„ Z'd„ Z(d„ Z)d„ Z* G d„ de«      Z+d.d„Z,d.d„Z-d„ Z.d„ Z/d„ Z0d„ Z1d.d „Z2d!„ Z3d.d"„Z4d.d#„Z5d$„ Z6d%„ Z7d&„ Z8d'„ Z9d(„ Z:d)„ Z;d*„ Z<e=d+k(  r e6dd,d-«       yy)0é    N)Úcopy)Úgettext)Úngettext)Úceil)ÚS_IMODEÚS_IXUSRÚST_MODE)Úurlsplit)ÚProxyHandlerÚRequestÚbuild_openerÚinstall_openerÚurlopenc                   ó$   — e Zd ZdZdd„Zd„ Zd„ Zy)ÚExecutionTimezº
    Helper that can be used in with statements to have a simple
    measure of the timing of a particular block of code, e.g.
    with ExecutionTime("db flush"):
        db.flush()
    c                 ó   — || _         y ©N)Úinfo)Úselfr   s     ú3/usr/lib/python3/dist-packages/DistUpgrade/utils.pyÚ__init__zExecutionTime.__init__<   s	   € Øˆ�	ó    c                 ó6   — t        j                   «       | _        y r   )ÚtimeÚnow©r   s    r   Ú	__enter__zExecutionTime.__enter__?   s   € Ü—9‘9“;ˆ�r   c                 óv   — t        | j                  ›dt        j                  «       | j                  z
  ›�«       y )Nz: )Úprintr   r   r   )r   ÚtypeÚvalueÚstacks       r   Ú__exit__zExecutionTime.__exit__B   s"   € Ü˜$Ÿ)›)¤T§Y¡Y£[°4·8±8Ò%;Ð<Õ=r   N)Ú )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r#   © r   r   r   r   4   s   „ ñóòó>r   r   c                   ó(   — e Zd ZdZdZdZdZdZdZdZ	y)	ÚSoftwarePropertiesPager   é   é   é   é   é   é   N)
r%   r&   r'   Úubuntu_softwareÚother_softwareÚupdatesÚauthenticationÚadditional_driversÚdeveloper_optionsÚ
ubuntu_pror)   r   r   r+   r+   F   s'   „ Ø€OØ€NØ€GØ€NØÐØÐØ�Jr   r+   c                 ó4  — t        | «      }t        |j                  «      }|j                  r+|j                  j	                  |j                  d«      |_        |j
                  r+|j                  j	                  |j
                  d«      |_        t        |«      S )Nzhidden-uzhidden-p)r   r
   ÚuriÚusernameÚreplaceÚpasswordÚstr)ÚentryÚtmpÚ	url_partss      r   Ú)get_string_with_no_auth_from_source_entryrB   P   sl   € Ü
ˆu‹+€CÜ˜Ÿ™Ó!€IØ×ÒØ—'‘'—/‘/ )×"4Ñ"4°jÓAˆŒØ×ÒØ—'‘'—/‘/ )×"4Ñ"4°jÓAˆŒÜˆs‹8€Or   c                  ó    — d} 	 ddl }|j                  «       }|j                  d«      } | S # t        $ r t	        j
                  d«       Y | S w xY w)z)return True if Unity is currently runningFr   Nzcom.canonical.Unityz&could not check for Unity dbus service)ÚdbusÚ
SessionBusÚname_has_ownerÚ	ExceptionÚloggingÚ	exception)Úunity_runningrD   Úbuss      r   Úis_unity_runningrL   Z   s]   € à€MðDÛà�o‰oÓˆØ×*Ñ*Ð+@ÓAˆð Ðøô ò DÜ×ÑÐBÕCØÐðDús   „%+ «AÁAc                 ód  — |st        j                  «       }|dkD  r‰d|z  }t        |«      5 }|j                  «       }d d d «       j	                  d«      d   j                  d«      d   }|| k(  ryt        |j                  d«      d   j                  «       d   «      }|dkD  rŒ‰y# 1 sw Y   ŒjxY w)	Nr   z/proc/%s/statú(r-   ú)Tr,   F)ÚosÚgetpidÚopenÚreadÚ	partitionÚ
rpartitionÚintÚsplit)ÚprocessnameÚpidÚ	stat_fileÚstat_fÚstatÚcommands         r   Úis_child_of_process_namer^   g   s®   € ÙÜ�i‰i‹kˆØ
�Š'Ø# cÑ)ˆ	Ü�)‹_ð 	! Ø—;‘;“=ˆD÷	!ð —.‘. Ó% aÑ(×3Ñ3°CÓ8¸Ñ;ˆØ�kÒ!Øä�$—/‘/ #Ó& qÑ)×/Ñ/Ó1°!Ñ4Ó5ˆð �‹'ð ÷	!ð 	!ús   ¬B&Â&B/c                  óÖ   — t         j                  j                  d«      rt         j                  j                  d«      syt        j                  d«      t        j                  d«      k7  S )z&returns True if we are inside a chrootz/procz/proc/1Tú/z/proc/1/root)rP   ÚpathÚexistsr\   r)   r   r   Úinside_chrootrc   w   sB   € ô �7‰7�>‰>˜'Ô"¬"¯'©'¯.©.¸Ô*CØä�7‰7�3‹<œ2Ÿ7™7 >Ó2Ñ2Ð2r   c                 ó¬   — d}| j                  «       D ]>  }t        |«      |j                  d«      z
  t        |«      z   |kD  r|d|z   z  }||dz   z  }Œ@ |S )z›helpers inspired after textwrap - unfortunately
    we can not use textwrap directly because it break
    packagenames with "-" in them into new lines
    r$   ú
ú )rW   ÚlenÚrfind)ÚtÚwidthÚsubsequent_indentÚoutÚss        r   Úwraprn   €   sd   € ð
 €CØ�W‰W‹Yò ˆÜ�‹H�s—y‘y “Ñ&¬#¨a«&Ñ0°5Ò8Ø�4Ð+Ñ+Ñ+ˆCØˆq�3‰w‰‰ðð €Jr   c                 ób   — d}| j                  d«      }|D ]  }t        |fi |¤Ž} || dz   z  }Œ |S )Nr$   re   )rW   rn   )rm   ÚkwargsÚmsgÚparasÚpars        r   Útwraprt   �   sF   € Ø
€CØ�G‰G�D‹M€EØò ˆÜ�Ñ˜ÑˆØˆq�4‰x‰‰ðð €Jr   c                  ó<  — g } t         j                  j                  d«      sg S t        j                  dgt        j
                  d¬«      }|j                  «       d   j                  d«      }|d= |D ]'  }|sŒ| j                  |j                  «       d   «       Œ) | S )z;return list of loaded modules (or [] if lsmod is not found)z/sbin/lsmodT©ÚstdoutÚuniversal_newlinesr   re   )	rP   ra   rb   Ú
subprocessÚPopenÚPIPEÚcommunicaterW   Úappend)ÚmodulesÚpÚlinesÚlines       r   Úlsmodr‚   –   sŒ   € à€Gä�7‰7�>‰>˜-Ô(Øˆ	Ü×ÑØ	ˆ¤
§¡ÀDô	€Að �M‰M‹O˜AÑ×$Ñ$ TÓ*€Eàˆaˆàò ,ˆÚØ�N‰N˜4Ÿ:™:›<¨™?Õ+ð,ð €Nr   c                 óê   — t         j                  j                  | «      syt        t        j                  | «      t
           «      }|t        z  t        k(  st        j                  | |t        z  «       yy)zAcheck if a given binary has the executable bit and if not, add itN)rP   ra   rb   r   r\   r	   r   Úchmod)ra   Úmodes     r   Úcheck_and_fix_xbitr†   ©   sO   € ä�7‰7�>‰>˜$ÔØÜ”2—7‘7˜4“=¤Ñ)Ó*€DØ”G‰^¤Ò'Ü
�‰��tœg‘~Õ&ð (r   c                  ó.  — ddi} dt         j                  vryt         j                  d   j                  «       }|dd | v r| |dd    S d|v rC|j                  d«      d   j                  d«      d	   }d
|v r|j                  d
«      d   }|dz   S |dd dz   S )z8helper to get the country mirror from the current localeÚcr$   ÚLANGNr0   Ú_ú.r   r,   ú@r-   )rP   ÚenvironÚlowerrW   )Úlang_mirrorÚlangÚcountrys      r   Úcountry_mirrorr’   ²   s¯   € ð ˜�)€Kà”R—Z‘ZÑØÜ�:‰:�fÑ×#Ñ#Ó%€DàˆBˆQ€x�;ÑØ˜4  ˜8Ñ$Ð$à
ˆd�{Ø—*‘*˜S“/ !Ñ$×*Ñ*¨3Ó/°Ñ2ˆØ�'‰>Ø—m‘m CÓ(¨Ñ+ˆGØ˜‰}Ðà�B�Qˆx˜#‰~Ðr   c                  óÄ   — t         j                  j                  d«      } | rt        j                  d| z  «       | S t        j                  «       }|j                  dd«      S )z0return the codename of the current runing distroÚMETA_RELEASE_FAKE_CODENAMEzQusing fake release name '%s' (because of META_RELEASE_FAKE_CODENAME environment) ÚVERSION_CODENAMEúunknown distribution©rP   r�   ÚgetrH   ÚwarningÚplatformÚfreedesktop_os_release)ÚdistÚ
os_releases     r   Úget_distrž   È   s[   € ô �:‰:�>‰>Ð6Ó7€DÙÜ�‰ð7Ø9=ñ>ô	
ð ˆä×0Ñ0Ó2€JØ�>‰>Ð,Ð.DÓEÐEr   c                  óÄ   — t         j                  j                  d«      } | rt        j                  d| z  «       | S t        j                  «       }|j                  dd«      S )z0return the version of the current running distroÚMETA_RELEASE_FAKE_VERSIONzSusing fake release version '%s' (because of META_RELEASE_FAKE_VERSION environment) Ú
VERSION_IDr–   r—   )Údescr�   s     r   Úget_dist_versionr£   ×   sZ   € ô �:‰:�>‰>Ð5Ó6€DÙÜ�‰ð6Ø8<ñ=ô	
ð ˆä×0Ñ0Ó2€JØ�>‰>˜,Ð(>Ó?Ð?r   c                   ó   — e Zd Zd„ Zy)ÚHeadRequestc                  ó   — y)NÚHEADr)   r   s    r   Ú
get_methodzHeadRequest.get_methodç   s   € Ør   N)r%   r&   r'   r¨   r)   r   r   r¥   r¥   æ   s   „ ór   r¥   c                 óÊ  — |sd„   |d| z  «       t        | «      \  }}}}} |d|›d|›d|›d|›d|›d�«       |d	v r6	 t        t        | «      «      }|j                  «        |j                  d
k(  ryy|dk(  r§ddl}		 |	j                  |«      }
|
j                  «        |
j                  t        j                  j                  |«      «       |
j                  t        j                  j                  |«      «      }|
j                  «        |r |d|z  «       |dk7  ry	 yy# t
        $ r} |d|z  «       Y d}~yd}~ww xY w# t
        $ r}|r |d|z  «       Y d}~yd}~ww xY w)zÒ
    helper that checks if the given uri exists and is downloadable
    (supports optional debug_func function handler to support
     e.g. logging)

    Supports http (via HEAD) and ftp (via size request)
    c                  ó   — y)NTr)   )Úxs    r   ú<lambda>z"url_downloadable.<locals>.<lambda>ô   s   � r   zurl_downloadable: %szs='z' n='z' p='z' q='z' f='ú')ÚhttpÚhttpséÈ   TFzerror from httplib: '%s'NÚftpr   zftplib.size() returned: %szerror from ftplib: '%s')r
   r   r¥   ÚcloseÚcoderG   ÚftplibÚFTPÚloginÚcwdrP   ra   ÚdirnameÚsizeÚbasenameÚquit)r:   Ú
debug_funcÚschemeÚnetlocra   ÚquerryÚfragmentÚ	http_fileÚer´   Úfr¹   s               r   Úurl_downloadablerÄ   ë   sS  € ñ ÚÙÐ%¨Ñ+Ô,Ü/7¸«}Ñ,€VˆV�T˜6 8Úâ’6š4¢ªð	3ôð Ð"Ñ"ð	Ü¤¨CÓ 0Ó1ˆIØ�O‰OÔØ�~‰~ Ò$ØØð 
�5ŠÛð	Ø—
‘
˜6Ó"ˆAØ�G‰GŒIØ�E‰E”"—'‘'—/‘/ $Ó'Ô(Ø—6‘6œ"Ÿ'™'×*Ñ*¨4Ó0Ó1ˆDØ�F‰FŒHÙÙÐ7¸$Ñ>Ô?Ø�qŠyØð ñ øô) ò 	ÙÐ1°AÑ5Ô6Üûð	ûô  ò 	ÙÙÐ4°qÑ8Ô9Üûð	ús0   ¿3D! Á>BE Ä!	D?Ä*D:Ä:D?Å	E"ÅEÅE"c                 óº  — d}i }t         j                  j                  d«      dk7  r#t         j                  j                  d«      |d<   n˜t        j                  j                  |«      ryt        j                  «       }t        j                  ||«       |j                  dd«      }|r;|j                  d«      }t        |j                  d«      «      }|r|rd	|›d
|›d�|d<   t         j                  j                  d«      dk7  r#t         j                  j                  d«      |d<   nd|v r|d   |d<   |r¦|j                  «       D ]8  }t        j                  d|«      rŒt        d|z  t        j                   ¬«        y t#        |«      }t%        |«      }	t'        |	«       d|v rt        j(                  d|d   «       d|v rt        j(                  d|d   «       |S )zÊinit proxy settings

    * use apt.conf http proxy if present,
    * otherwise look into synaptics config file,
    * otherwise the default behavior will use http_proxy environment
      if present
    z/root/.synaptic/synaptic.confzAcquire::http::Proxyr$   r®   zSynaptic::useProxyFzSynaptic::httpProxyzSynaptic::httpProxyPortzhttp://ú:r`   zAcquire::https::Proxyr¯   zhttps?://\w+zproxy '%s' looks invalid)ÚfileNÚ
http_proxyÚhttps_proxy)Úapt_pkgÚconfigÚfindrP   ra   rb   ÚConfigurationÚread_config_fileÚfind_br>   Úfind_iÚvaluesÚreÚmatchr   ÚsysÚstderrr   r   r   Úputenv)
Ú	gsettingsÚSYNAPTIC_CONF_FILEÚproxiesÚcnfÚ	use_proxyÚ
proxy_hostÚ
proxy_portÚproxyÚproxy_supportÚopeners
             r   Ú
init_proxyrá     s˜  € ð 9ÐØ€Gä‡~�~×ÑÐ1Ó2°bÒ8Ü!Ÿ.™.×-Ñ-Ð.DÓEˆ�Šä	�‰�‰Ð*Ô	+Ü×#Ñ#Ó%ˆÜ× Ñ  Ð&8Ô9Ø—J‘JÐ3°UÓ;ˆ	ÙØŸ™Ð"7Ó8ˆJÜ˜SŸZ™ZÐ(AÓBÓCˆJÙšjÚ5?ÂÐ"L�˜‘Ü‡~�~×ÑÐ2Ó3°rÒ9Ü"Ÿ>™>×.Ñ.Ð/FÓGˆ�ÒØ	�7Ñ	Ø" 6™?ˆ�Ñáà—^‘^Ó%ò 	ˆEÜ—8‘8˜O¨UÕ3ÜÐ0°5Ñ8¼s¿z¹zÕJÙð	ô % WÓ-ˆÜ˜mÓ,ˆÜ�vÔØ�WÑÜ�I‰I�l G¨F¡OÔ4Ø�gÑÜ�I‰I�m W¨WÑ%5Ô6Ø€Nr   c                  ó¾  — 	 ddl } | j                  | j                  j                  «      }	 |j                  dd«      }| j	                  |d«      }|j                  dd«      S # | j                  j                  $ rR}d}|j                  |k7  r‚ |j                  dd	«      }| j	                  |d«      }|j                  dd
«      cY d}~S d}~ww xY w# t        $ r Y yw xY w)z­
    Check via dbus if the system is running on battery.
    This function is using UPower per default, if UPower is not
    available it falls-back to DeviceKit.Power.
    r   Nzorg.freedesktop.UPowerz/org/freedesktop/UPowerzorg.freedesktop.DBus.PropertiesÚ	OnBatteryz)org.freedesktop.DBus.Error.ServiceUnknownzorg.freedesktop.DeviceKit.Powerz /org/freedesktop/DeviceKit/PowerÚ
on_batteryF)
rD   ÚBusÚTYPE_SYSTEMÚ
get_objectÚ	InterfaceÚGetÚ
exceptionsÚDBusExceptionÚ_dbus_error_namerG   )rD   rK   ÚdevobjÚdevrÂ   Úerror_unknowns         r   rä   rä   E  sá   € ðÛà�h‰h�t—x‘x×+Ñ+Ó,ˆð	LØ—^‘^Ø(Ð*CóˆFð —.‘. Ð)JÓKˆCØ—7‘7Ð3°[ÓAÐAøØ�‰×,Ñ,ò 		LØGˆMØ×!Ñ! ]Ò2ØØ—^‘^Ø1Ø2óˆFð —.‘. Ð)JÓKˆCØ—7‘7Ð<¸lÓKÕKûð		Lûô ò ñ ðús;   ‚)C ¬5A" Á"CÁ;ACÃCÃC ÃCÃC Ã	CÃCc                  ó&  — 	 ddl m} m} | j                  | j                  j
                  «      }|j                  dddd|j                  dd«      d	dd
d	d	«
      \  }}| j                  |j                  «       |d      ¬«      }|S # t        $ r Y yw xY w)z‚
    Send a dbus signal to logind to not suspend the system, it will be
    released when the return value drops out of scope
    r   )ÚGioÚGLibzorg.freedesktop.login1z/org/freedesktop/login1zorg.freedesktop.login1.ManagerÚInhibitz(ssss))zshutdown:sleepÚUpdateManagerzUpdating SystemÚblockNéÿÿÿÿ)ÚfdF)Úgi.repositoryrñ   rò   Úbus_get_syncÚBusTypeÚSYSTEMÚcall_with_unix_fd_list_syncÚVariantÚUnixInputStreamÚ	steal_fdsrG   )rñ   rò   Ú
connectionÚvarÚfdlistÚ	inhibitors         r   Úinhibit_sleepr  e  s¨   € ð
ß+à×%Ñ% c§k¡k×&8Ñ&8Ó9ˆ
à ×<Ñ<Ø$Ø%Ø,ØØ�L‰LØðóð ØØØØó%
‰ˆˆVð( ×'Ñ'¨6×+;Ñ+;Ó+=¸cÀ!¹fÑ+EÐ'ÓFˆ	àÐøÜò áðús   ‚BB Â	BÂBc                 ó6   — | dk(  s| j                  «       dk(  ryy)NÚ0ÚFALSEFT)Úupper)r>   s    r   Ústr_to_boolr	  ‹  s   € Ø
ˆc‚z�S—Y‘Y“[ GÒ+ØØr   c                  ó€   — dd l } 	 t        j                  «       \  }}|S # t        $ r  | j                  d«       Y y w xY w)Nr   zgedefaultlocale() failed)rH   ÚlocaleÚgetdefaultlocalerG   rI   )rH   Úlocale_sÚencodings      r   Úget_langr  ‘  sE   € ÛðÜ%×6Ñ6Ó8Ñˆ�8ØˆøÜò Øˆ×ÑÐ4Ô5Ùðús   † Ÿ=¼=c                 óD   — t        | ¬«      }|j                  dd«      d   S )z4try to guess the flavor based on the running desktop©Úcacheú-r,   r   )Úget_ubuntu_flavor_packagerW   )r  Úpkgs     r   Úget_ubuntu_flavorr  œ  s$   € ô
 $¨%Ô
0€CØ�9‰9�S˜!Ó˜QÑÐr   c                  óB   — ddl m}   | d«      }|j                  dd«      S )Nr   )ÚDistUpgradeConfigz"/usr/share/ubuntu-release-upgraderÚDistroÚMetaPkgs)Ú#DistUpgrade.DistUpgradeConfigParserr  Úgetlist)r  Úparsers     r   Ú_load_meta_pkg_listr  ¥  s$   € õ FáÐCÓD€FØ�>‰>˜( JÓ/Ð/r   c                 ó
  — dg}	 |j                  t        t        «       «      «       | €t        j                  «       } |D ]   }|| v r| |   nd}|sŒ|j                  sŒ|c S  y# t        $ r}t	        d|«       Y d}~ŒVd}~ww xY w)z@try to guess the flavor metapackage based on the running desktopzubuntu-desktopz%Could not load list of meta packages:N)ÚextendÚsortedr  rG   r   ÚaptÚCacheÚis_installed)r  Ú	meta_pkgsrÂ   Úmeta_pkgÚ	cache_pkgs        r   r  r  ®  s�   € ð
 "Ð"€Ið:Ø×ÑœÔ 3Ó 5Ó6Ô7ð €}Ü—	‘	“ˆØò ˆØ'/°5Ñ'8�E˜(’O¸dˆ	Ú˜×/Ó/ØŠOðð øô ò :ÜÐ5°q×9Ñ9ûð:ús   …"A# Á#	BÁ,A=Á=Bc                 óò   — t        | ¬«      }ddi}||v r||   S |j                  d«      rt        |j                  dd«      d   «      S |j                  d«      rt        |j                  dd«      d   «      S y)	z9try to guess the flavor name based on the running desktopr  zubuntustudio-desktopzUbuntu Studioz-desktopr,   r   z-netbookÚUbuntu)r  ÚendswithÚcapitalize_first_wordÚrsplit)r  r  Úlookups      r   Úget_ubuntu_flavor_namer.  Ã  sx   € ä
#¨%Ô
0€CØ$ oÐ6€FØ
ˆf�}Ø�c‰{ÐØ	�‰�jÔ	!Ü$ S§Z¡Z°
¸AÓ%>¸qÑ%AÓBÐBØ	�‰�jÔ	!Ü$ S§Z¡Z°
¸AÓ%>¸qÑ%AÓBÐBàr   c                 óø  — dd l }|j                  dd«       ddlm}m} |j                  | |j                  j                  |j                  j                  |j                  j                  ¬«      }|j                  d|›d|›�«       |j                  «        |j                  «       j                  |j                   j"                  «       |j%                  d«       |j'                  «        |j)                  «        y	)
Nr   ÚGtkz3.0)ÚGdkr0  )ÚparentÚflagsr    Úbuttonsz<big><b>z</b></big>

r$   F)ÚgiÚrequire_versionrø   r1  r0  ÚMessageDialogÚDialogFlagsÚMODALÚMessageTypeÚERRORÚButtonsTypeÚCLOSEÚ
set_markupÚrealizeÚ
get_windowÚset_functionsÚ
WMFunctionÚMOVEÚ	set_titleÚrunÚdestroy)r2  ÚsummaryÚmessager5  r1  r0  Úds          r   ÚerrorrJ  Ò  s±   € Ûà×Ñ�u˜eÔ$ß&à×ÑØØ�o‰o×#Ñ#Ø�_‰_×"Ñ"Ø—‘×%Ñ%ð	 	ó 	€Að ‡L‚L²¹'ÐBÔCØ‡I�I„KØ‡L�LƒN× Ñ  §¡×!4Ñ!4Ô5Ø‡K�K�„OØ‡E�E„GØ‡I�I„KØr   c                 óº   — | dk  r2t        t        | t        d«      z  «      «      }t        dd|«      d|iz  S t	        j
                  t        d«      | dz  dz  «      S )zG
    Convert a given size in bytes to a nicer better readable unit
    i@B iè  z%(size).0f kBr¹   z%.1f MBg     @�@)rV   r   Úfloatr   r  Úformat_stringrŠ   )ÚbytesÚ
size_in_kbs     r   Úhumanize_sizerP  ç  si   € ð
 ˆ{Òô œ˜e¤e¨D£kÑ1Ó2Ó3ˆ
ä˜¨¸*ÓEØ�JðI
ñ 
ð 	
ô
 ×#Ñ#¤A i£L°%¸&±.À6Ñ2IÓJÐJr   c                  ó@   — t         j                  j                  d«      S )NzAPT::Architecture)rÊ   rË   rÌ   r)   r   r   Úget_archrR  ù  s   € Ü�>‰>×ÑÐ2Ó3Ð3r   c                 ó<  — d}d}d}t        d«      5 }|j                  «       D ]b  }|j                  «       }|sŒ|j                  «       }||   }||k7  rŒ1||   j                  d«      d   }t	        |d«      }	|	| k(  sŒZ ddd«       y 	 ddd«       y	# 1 sw Y   y	xY w)
z>check if the current system is listening on the given tcp portr,   r.   Ú0Az/proc/net/tcprÆ   é   NTF)rR   Ú	readlinesÚstriprW   rV   )
ÚportÚINDEX_LOCAL_ADDRÚINDEX_STATEÚSTATE_LISTENINGÚnet_tcpr�   rÑ   ÚstateÚlocal_port_strÚ
local_ports
             r   Úis_port_already_listeningr`  ý  s¿   € ð Ðà€Kà€Oä	ˆoÓ	ð  'Ø×%Ñ%Ó'ò 	ˆDØ—:‘:“<ˆDÙØð —Z‘Z“\ˆFØ˜;Ñ'ˆEØ˜Ò'ØØ#Ð$4Ñ5×;Ñ;¸CÓ@ÀÑCˆNÜ˜^¨RÓ0ˆJØ˜TÓ!Ø÷ð ñ	÷ð  ÷!ð  ús   ’A*BÁ=BÂBÂBc                  ó
  — d} t        j                  «       dk7  rt        d«      ‚t         j                  j	                  d«      syt        j                  ddgt
        j                  d¬	«      j                  «       d   }|| k(  ryy)
z!Return True if iptables is activezøChain INPUT (policy ACCEPT)
target     prot opt source               destination

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination
r   z%Need root to check the iptables statez/sbin/iptablesFÚiptablesz-nLTrv   )	rP   ÚgetuidÚOSErrorra   rb   ry   rz   r{   r|   )Úiptables_emptyrl   s     r   Úiptables_activerf    sw   € ð€Nô 
‡y�yƒ{�aÒÜÐ=Ó>Ð>Ü�7‰7�>‰>Ð*Ô+ØÜ
×
Ñ
Ø	�UÐ¤J§O¡OÈôç�kƒm�Añ€Cð ˆnÒØØr   c                 ó    — t        | «      dkD  r?| d   j                  «       r,| d   j                  «       s| d   j                  «       | dd z   S | S )z-this uppercases the first word's first letterr,   r   N)rg   ÚisalphaÚisupperÚ
capitalize)Ústrings    r   r+  r+  1  sN   € ä
ˆ6ƒ{�Q‚˜6 !™9×,Ñ,Ô.°v¸a±y×7HÑ7HÔ7JØ�a‰y×#Ñ#Ó%¨¨q¨r¨
Ñ2Ð2Ø€Mr   c                 óF   — t        | j                  dd«      }t        |«      S )zSthis takes a package synopsis and uppercases the first word's
    first letter
    rG  r$   )ÚgetattrÚ	candidater+  )r  Únames     r   Úget_package_labelrp  8  s!   € ô �3—=‘= )¨RÓ0€DÜ  Ó&Ð&r   Ú__main__ÚbarÚbazr   )éF   r$   )>r  rH   rP   rš   rÒ   ry   rÔ   r   r   r   rŠ   r   Úmathr   r\   r   r   r	   Úurllib.parser
   Úurllib.requestr   r   r   r   r   r"  rÊ   Úinit_configÚobjectr   r+   rB   rL   r^   rc   rn   rt   r‚   r†   r’   rž   r£   r¥   rÄ   rá   rä   r  r	  r  r  r  r  r.  rJ  rP  rR  r`  rf  r+  rp  r%   r)   r   r   ú<module>rz     s&  ðó0 Û Û 	Û Û 	Û Û 
Û Ý Ý  Ý Ý ß *Ñ *Ý !÷õ ó Û à €× Ñ Ô ô>�Fô >÷$ñ òò
óò 3ó
òòò&'òò,Fò@ô�'ô ó
+ó\)òXò@#òLòó ò0óó*òò*Kò$4òò8ò0ò'ð ˆzÒñ
 
ˆ$��uÕð r   