§
    3LGf”}  ã                   ó  — d dl Z d dlZd dlm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 n# e$ r
 ej        ZY nw xY wd dlZ	 d dlZn# e$ r d dlZY nw xY wd dl
mZ d dlmZ 	 d dlmZ n# e$ r	 d dlmZ Y nw xY wd dlmZ d dlZd dlZd dlZdd	lmZ d d
lmZmZ d dl m!Z! d dl"m#Z# d dl$m%Z%  G d„ de&¦  «        Z'e(dk    r> e'¦   «         Z) e*e) +                    ¦   «         ¦  «         e) ,                    d ¦  «         dS dS )é    N)Úmd5)Ú	maketrans)ÚNamedTemporaryFile)Úescape)ÚConfigParser)Úgettexté   )ÚAptAuth)ÚSourcesListÚSourceEntry)ÚInvalidShortcutException)Úshortcut_handler)ÚGioc                   ó´  — e Zd ZdZdZ e ed¦  «        ¦  «        \  ZZZ	edede	diZ
dAd	„Zd
„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z d„ Z!d „ Z"d!„ Z#d"„ Z$d#„ Z%d$„ Z&d%„ Z'd&„ Z(d'„ Z)d(„ Z*d)„ Z+d*„ Z,d+„ Z-d,„ Z.d-„ Z/d.„ Z0d/„ Z1d0„ Z2d1„ Z3d2„ Z4d3„ Z5d4„ Z6d5„ Z7dBd7„Z8dBd8„Z9dCd:„Z:d;„ Z;d<„ Z<d=„ Z=d>„ Z>d?„ Z?e@dDd@„¦   «         ZAdS )EÚSoftwarePropertiesz /usr/share/app-install/channels/z$/etc/update-manager/release-upgradesé   ÚnormalÚltsÚneverNú/c                 ój  — |dz   | _         || _        |dk    r t          j                             d|¦  «         |dk    rd}|| _        || _        t          ¦   «         | _        t          j
                             ¦   «         | _
        g | _        d| _        |                      ¦   «          |                      ¦   «          |                      ¦   «          g | _        t%          j        ¦   «         | _        t+          |¬¦  «        | _        t/          j        ¦   «         | _        t5          j        | j        ¦  «         dS )zš Provides the core functionality to configure the used software
        repositories, the corresponding authentication keys and
        update automation z/etc/popularity-contest.confr   ÚDirNz/usr/share/software-properties/F)Úrootdir)Ú
popconfiler   Úapt_pkgÚconfigÚsetÚoptionsÚdatadirr   ÚsourceslistÚ
aptsourcesÚdistroÚ
get_distroÚseen_serverÚmodified_sourceslistÚreload_sourceslistÚbackup_sourceslistÚbackup_apt_confÚcustom_mirrorsÚqueueÚQueueÚmyqueuer
   Úapt_keyr   ÚCancellableÚcancellableÚatexitÚregisterÚwait_for_threads)Úselfr   r   r   s       úG/usr/lib/python3/dist-packages/softwareproperties/SoftwareProperties.pyÚ__init__zSoftwareProperties.__init__V   s  € ð Ð<Ñ<€D„Oà€D„LØ�#‚~€~Ý„n×Ò˜ Ñ(Ô(Ð(ð �$‚€Ø1€gØ€D„LØ€D„Lå"‘}”}€DÔÝÔ#×.Ò.Ñ0Ô0€D„Kà€DÔØ %€DÔà×ÒÑÔÐØ×ÒÑÔÐà×ÒÑÔÐð €DÔõ ”;‘=”=€D„Lõ  7Ð+Ñ+Ô+€D„Lå”Ñ(Ô(€DÔå
„O�DÔ)Ñ*Ô*Ð*Ð*Ð*ó    c                 óœ   — t          j        ¦   «         D ]7}|j        t          j        ¦   «         j        k    r|                     ¦   «          Œ8dS )z9 wait for all running threads (PPA key fetchers) to exit N)Ú	threadingÚ	enumerateÚidentÚcurrent_threadÚjoin)r3   Úts     r4   r2   z#SoftwareProperties.wait_for_threads   sK   € åÔ Ñ"Ô"ð ð ˆØ	
Œ•IÔ,Ñ.Ô.Ô4Ò	4Ð	4Ø	�Š‰Œˆøðð r6   c                 óÈ   — i | _         t          j                             ¦   «         D ];}t          j                             t          j        |         ¦  «        }|| j         |<   Œ<dS )z$Backup all apt configuration optionsN)Úapt_conf_backupÚsoftwarepropertiesÚCONF_MAPÚkeysr   r   Úfind_i)r3   ÚoptionÚvalues      r4   r(   z"SoftwareProperties.backup_apt_conf…   s`   € à€DÔÝ$Ô-×2Ò2Ñ4Ô4ð -ð -ˆÝ”×%Ò%Õ&8Ô&AÀ&Ô&IÑJÔJˆØ',ˆÔ˜VÑ$Ð$ð-ð -r6   c                 óö   — | j                              ¦   «         D ]J}t          j                             t
          j        |         t          | j         |         ¦  «        ¦  «         ŒK|                      ¦   «          dS )z$Restore the stored apt configurationN)	r?   rB   r   r   r   r@   rA   ÚstrÚwrite_config)r3   rD   s     r4   Úrestore_apt_confz#SoftwareProperties.restore_apt_confŒ   su   € àÔ&×+Ò+Ñ-Ô-ð >ð >ˆÝŒ×ÒÕ-Ô6°vÔ>Ý˜tÔ3°FÔ;Ñ<Ô<ñ	>ô 	>ð 	>ð 	>à×ÒÑÔÐÐÐr6   c                 óÚ  — t           j                             t          j        d         ¦  «        dk    �rDt           j                             t          j        d         ¦  «        dk    r+t
          j                             d¦  «        rt          j        S t           j                             t          j        d         ¦  «        dk    r?t           j                             t          j        d         ¦  «        dk    rt          j	        S t           j                             t          j        d         ¦  «        dk    r?t           j                             t          j        d         ¦  «        dk    rt          j
        S dS t           j                             t          j        d         ¦  «        dk    r?t           j                             t          j        d         ¦  «        dk    rt          j        S dS )zÈ Parse the apt cron configuration. Try to fit a predefined use case
        and return it. Special case: if the user made a custom
        configurtation, that we cannot represent it will return None Ú
autoupdater   Ú
unattendedr	   ú/usr/bin/unattended-upgradeÚautodownloadN)r   r   rC   r@   rA   ÚosÚpathÚexistsÚUPDATE_INST_SECÚUPDATE_DOWNLOADÚUPDATE_NOTIFYÚUPDATE_MANUAL©r3   s    r4   Úget_update_automation_levelz.SoftwareProperties.get_update_automation_level“   sn  € õ „~×ÒÕ/Ô8¸ÔFÑGÔGÈ!ÒKÑKåŒ>× Ò Õ!3Ô!<¸\Ô!JÑKÔKÈqÒPÐPÝŒw�~Š~Ð;Ñ<Ô<ð Qå%Ô5Ð5ÝŒ^×"Ò"Õ#5Ô#>¸~Ô#NÑOÔOÐSTÒTÐTÝŒ^×"Ò"Õ#5Ô#>¸|Ô#LÑMÔMÐQRÒRÐRÝ%Ô5Ð5ÝŒ^×"Ò"Õ#5Ô#>¸|Ô#LÑMÔMÐQRÒRÐRÝŒ^×"Ò"Õ#5Ô#>¸~Ô#NÑOÔOÐSTÒTÐTÝ%Ô3Ð3à�4Ý	Œ×	Ò	Õ1Ô:¸<ÔHÑ	IÔ	IÈQÒ	NÐ	NÝ	Œ×	Ò	Õ1Ô:¸>ÔJÑ	KÔ	KÈqÒ	PÐ	PÝ!Ô/Ð/àˆtr6   c                 óâ  — |t           j        k    r|t          j                             t           j        d         t          d¦  «        ¦  «         t          j                             t           j        d         t          d¦  «        ¦  «         �nÎ|t           j        k    r|t          j                             t           j        d         t          d¦  «        ¦  «         t          j                             t           j        d         t          d¦  «        ¦  «         �nB|t           j        k    r{t          j                             t           j        d         t          d¦  «        ¦  «         t          j                             t           j        d         t          d¦  «        ¦  «         n·t          j                             t           j        d         t          d¦  «        ¦  «         t          j                             t           j        d         t          d¦  «        ¦  «         t          j                             t           j        d         t          d¦  «        ¦  «         |  	                    ¦   «          dS )zð Set the apt periodic configurtation to the selected
        update automation level. To synchronize the cache update and the
        actual upgrading function, the upgrade function, e.g. unattended,
        will run every day, if enabled. rL   r	   rN   r   rK   N)
r@   rR   r   r   r   rA   rG   rS   rT   Úset_modified_config)r3   Ústates     r4   Úset_update_automation_levelz.SoftwareProperties.set_update_automation_levelª   s±  € ð
 Õ"Ô2Ò2Ð2ÝŒ×ÒÕ-Ô6°|ÔDÅcÈ!ÁfÄfÑMÔMÐMÝŒ×ÒÕ-Ô6°~ÔFÍÈAÉÌÑOÔOÐOÑOØ	Õ$Ô4Ò	4Ð	4ÝŒ×ÒÕ-Ô6°~ÔFÍÈAÉÌÑOÔOÐOÝŒ×ÒÕ-Ô6°|ÔDÅcÈ!ÁfÄfÑMÔMÐMÑMØ	Õ$Ô2Ò	2Ð	2ÝŒ×ÒÕ-Ô6°~ÔFÍÈAÉÌÑOÔOÐOÝŒ×ÒÕ-Ô6°|ÔDÅcÈ!ÁfÄfÑMÔMÐMÐMåŒ×ÒÕ-Ô6°|ÔDÅcÈ!ÁfÄfÑMÔMÐMÝŒ×ÒÕ-Ô6°|ÔDÅcÈ!ÁfÄfÑMÔMÐMÝŒ×ÒÕ-Ô6°~ÔFÍÈAÉÌÑOÔOÐOØ×ÒÑÔÐÐÐr6   c                 ó  — |t           j                             t          j        d         ¦  «        k    sSt           j                             t          j        d         t          |¦  «        ¦  «         |                      ¦   «          dS dS )z8Set the interval in which we check for available updatesrK   N)r   r   rC   r@   rA   r   rG   rY   )r3   Údayss     r4   Úset_update_intervalz&SoftwareProperties.set_update_interval¾   sp   € ð •W”^×*Ò*Õ+=Ô+FÀ|Ô+TÑUÔUÒUÐUÝ
Œ.×
Ò
Õ/Ô8¸ÔFÍÈDÉ	Ì	Ñ
RÔ
RÐ
RØ
×
"Ò
"Ñ
$Ô
$Ð
$Ð
$Ð
$ð VÐUr6   c                 ó`   — t           j                             t          j        d         ¦  «        S )z3 Returns the interval of the apt periodic cron job rK   )r   r   rC   r@   rA   rV   s    r4   Úget_update_intervalz&SoftwareProperties.get_update_intervalÅ   s!   € åŒ>× Ò Õ!3Ô!<¸\Ô!JÑKÔKÐKr6   c                 ó„  — t           j                             | j        ¦  «        s| j        S t          ¦   «         }|                     | j        ¦  «         |                     dd¦  «        rQ|                     dd¦  «         	                    ¦   «         }| j
                             ¦   «         D ]\  }}||k    r|c S Œ| j        S )z�
    return the release upgrade policy:
     RELEASE_UPGRADES_NORMAL,
     RELEASE_UPGRADES_LTS,
     RELEASE_UPGRADES_NEVER
    ÚDEFAULTÚPrompt)rO   rP   rQ   ÚRELEASE_UPGRADES_CONFÚRELEASE_UPGRADES_NORMALr   ÚreadÚ
has_optionÚgetÚlowerÚrelease_upgrades_policy_mapÚitems)r3   ÚparserÚtypeÚkÚvs        r4   Úget_release_upgrades_policyz.SoftwareProperties.get_release_upgrades_policyÉ   s½   € õ Œ7�>Š>˜$Ô4Ñ5Ô5ð *ØÔ)Ð)Ý‰^Œ^€FØ
‡K‚K�Ô*Ñ+Ô+Ð+Ø×Ò˜ 8Ñ,Ô,ð Ø�ZŠZ˜	 (Ñ+Ô+×1Ò1Ñ3Ô3€dØÔ2×8Ò8Ñ:Ô:ð ð ‰$ˆ!ˆQØ�Š9ˆ9Øˆ(ˆ(ˆ(ð àÔ'Ð'r6   c                 ó8  — t           j                             | j        ¦  «        sRt	          | j        d¦  «        5 }|                     d| j        |         z  ¦  «         ddd¦  «         n# 1 swxY w Y   dS t	          | j        d¦  «        5 }t          d¬¦  «        5 }|D ]y}|                     ¦   «         }| 	                    ¦   «          
                    d¦  «        r$|                     d	| j        |         z  ¦  «         Œa|                     |d
z   ¦  «         Œz|                     ¦   «          t          j        | j        |j        ¦  «         t          j        |j        | j        ¦  «         ddd¦  «         n# 1 swxY w Y   ddd¦  «         n# 1 swxY w Y   dS )z
    set the release upgrade policy:
     RELEASE_UPGRADES_NORMAL,
     RELEASE_UPGRADES_LTS,
     RELEASE_UPGRADES_NEVER
     Úwz[DEFAULT]
Prompt=%s
NTÚrzw+)ÚmodeÚpromptz
Prompt=%s
ú
)rO   rP   rQ   rd   ÚopenÚwriterj   r   Ústripri   Ú
startswithÚflushÚshutilÚcopymodeÚnameÚcopy)r3   ÚiÚfÚoutÚlines        r4   Úset_release_upgrades_policyz.SoftwareProperties.set_release_upgrades_policyÜ   s7  € õ Œ7�>Š>˜$Ô4Ñ5Ô5ð Ý�Ô*¨3Ñ/Ô/ð O°1Ø	�ŠÐ(¨$Ô*JÈ1Ô*MÑMÑNÔNÐNðOð Oð Oñ Oô Oð Oð Oð Oð Oð Oð Oøøøð Oð Oð Oð OàˆTÝ	ˆdÔ(¨Ñ	-Ô	-ð 	8°Õ4FÈDÐ4QÑ4QÔ4Qð 	8ÐUXØð ð ˆ$Ø�zŠz‰|Œ|ˆØ�:Š:‰<Œ<×"Ò" 8Ñ,Ô,ð 	Ø
�)Š)�M DÔ$DÀQÔ$GÑGÑ
HÔ
HÐ
HÐ
Hà
�)Š)�D˜‘IÑ
Ô
Ð
Ð
Ø	‡i‚i�k„k€kÝ„o�dÔ0°#´(Ñ;Ô;Ð;Ý„k�#”(˜DÔ6Ñ7Ô7Ð7ð	8ð 	8ð 	8ñ 	8ô 	8ð 	8ð 	8ð 	8ð 	8ð 	8ð 	8øøøð 	8ð 	8ð 	8ð 	8ð 	8ð 	8ð 	8ñ 	8ô 	8ð 	8ð 	8ð 	8ð 	8ð 	8ð 	8øøøð 	8ð 	8ð 	8ð 	8ð ˆ4sH   º$A*Á*A.Á1A.ÂFÂCE8Å,FÅ8E<	Å<FÅ?E<	Æ FÆFÆFc                 ó¸  — t           j                             | j        ¦  «        rµt	          | j        ¦  «        5 }|                     ¦   «                              d¦  «        }ddd¦  «         n# 1 swxY w Y   |D ]_}	 |                     d¦  «        \  }}|dk    r.|                     d¦  «                             ¦   «         dk    r dS ŒP# t          $ r Y Œ\w xY wdS )	z» Will return True if the user wants to participate in the popularity
        contest. Otherwise it will return False. Special case: if no
        popcon is installed it will return False rv   Nú=ÚPARTICIPATEú"ÚyesTF)
rO   rP   rQ   r   rw   rf   Úsplitry   ri   Ú
ValueError)r3   r�   Úlinesrƒ   ÚkeyrE   s         r4   Úget_popcon_participationz+SoftwareProperties.get_popcon_participationô   s  € õ 
„w‡~‚~�d”oÑ&Ô&ð 	Ý�$”/Ñ"Ô"ð 	' aØ—&’&‘(”(—.’. Ñ&Ô&ˆ%ð	'ð 	'ð 	'ñ 	'ô 	'ð 	'ð 	'ð 	'ð 	'ð 	'ð 	'øøøð 	'ð 	'ð 	'ð 	'àð 	ð 	ˆDðØ"Ÿjšj¨™oœo‘��UØ˜-Ò'Ð'¨E¯KªK¸Ñ,<Ô,<×,BÒ,BÑ,DÔ,DÈÒ,MÐ,MØ˜4˜4øøÝð ð ð Ø�ðøøøàˆ5s$   ¹(A-Á-A1Á4A1Á=A	C
Ã

CÃCc                 óð  ‡— |dk    rdŠndŠt           j                             | j        ¦  «        r<t	          | j        d¦  «        5 }ˆfd„|D ¦   «         }ddd¦  «         n# 1 swxY w Y   nÆt          ¦   «         }t	          dd¦  «        5 }|                     |                     d	¦  «        ¦  «         ddd¦  «         n# 1 swxY w Y   |                     ¦   «         }g }| 	                    d
|z  ¦  «         | 	                    dt          ‰¦  «        z  ¦  «         | 	                    d¦  «         t	          | j        d¦  «        5 }|                     |¦  «         ddd¦  «         dS # 1 swxY w Y   dS )z? Enable or disable the participation in the popularity contest Tr‰   Únors   c                 óB   •— g | ]}t          j        d d‰z  |¦  «        ‘ŒS )z^(PARTICIPATE=)(".+?")z\1"%s")ÚreÚsub)Ú.0rƒ   rE   s     €r4   ú
<listcomp>z@SoftwareProperties.set_popcon_pariticipation.<locals>.<listcomp>  s=   ø€ ð -ð -ð -Øõ ”VÐ5°yÀ5Ñ7HÈ$ÑOÔOð -ð -ð -r6   Nz/dev/urandomÚrbi   zMY_HOSTID="%s"
zPARTICIPATE="%s"
zUSE_HTTP="yes"
rr   )rO   rP   rQ   r   rw   r   Úupdaterf   Ú	hexdigestÚappendrG   Ú
writelines)r3   Ú
is_helpfulr   rŒ   Úmr�   ÚidrE   s          @r4   Úset_popcon_pariticipationz,SoftwareProperties.set_popcon_pariticipation  s*  ø€ à�TÒÐØˆˆàˆÝ	„w‡~‚~�d”oÑ&Ô&ð +õ �$”/ 3Ñ'Ô'ð 	-¨:ð-ð -ð -ð -Ø!+ð-ñ -ô -ˆEð	-ð 	-ð 	-ñ 	-ô 	-ð 	-ð 	-ð 	-ð 	-ð 	-ð 	-øøøð 	-ð 	-ð 	-ð 	-øõ
 ‰EŒEˆÝ�. $Ñ'Ô'ð 	#¨1Ø�HŠH�Q—V’V˜D‘\”\Ñ"Ô"Ð"ð	#ð 	#ð 	#ñ 	#ô 	#ð 	#ð 	#ð 	#ð 	#ð 	#ð 	#øøøð 	#ð 	#ð 	#ð 	#à�[Š[‰]Œ]ˆØˆØ�ŠÐ)¨BÑ.Ñ/Ô/Ð/Ø�ŠÐ+­c°%©j¬jÑ8Ñ9Ô9Ð9Ø�ŠÐ)Ñ*Ô*Ð*Ý	ˆdŒo˜sÑ	#Ô	#ð  qØ	�Š�UÑÔÐðð ð ñ ô ð ð ð ð ð ð ð øøøð ð ð ð ð ð s6   ÁA!Á!A%Á(A%Â)C Ã CÃCÅE+Å+E/Å2E/c                 ó@   — t           j                             d¦  «        S )NrM   )rO   rP   ÚisfilerV   s    r4   Úhave_unattended_upgradesz+SoftwareProperties.have_unattended_upgrades  s   € ÝŒW�^Š^Ð9Ñ:Ô:Ð:r6   c                 óR  — t          | j        j        ¦  «        dk     rd| j        _        dS d| j        _        i }g }|                     | j        j        ¦  «         |                     | j        j        ¦  «         |D ]R}|j        |v r+|j        D ]"}||j                  	                    |¦  «         Œ#Œ6t          |j        ¦  «        ||j        <   ŒSt          | j        j        ¦  «        dk    r| j        j        || j        j        <   | j        j        D ]•}|j        |vs{|j        |v r�t          t          ||j                 ¦  «        t          |j        ¦  «        z  ¦  «        dk    sAt          t          |j        ¦  «        | j        j        z  ¦  «        dk    sd| j        _         dS Œ–dS )z±Return True if all distro componets are also available as
       source code. Otherwise return Flase. Special case: If the
       configuration cannot be represented return Noner	   FTr   N)Úlenr"   Úsource_code_sourcesÚget_source_codeÚextendÚmain_sourcesÚchild_sourcesÚtemplateÚcompsÚaddr   Úcdrom_sourcesÚcdrom_compsÚsource_templateÚenabled_comps)r3   Ú	templatesÚsourcesÚsourceÚcomps        r4   Úget_source_code_statez(SoftwareProperties.get_source_code_state   s©  € õ
 ˆ4Œ;Ô*Ñ+Ô+¨aÒ/Ð/ð ',ˆŒÔ#Øˆuð '+ˆŒÔ#ð ˆ	ØˆØ�Š�t”{Ô/Ñ0Ô0Ð0Ø�Š�t”{Ô0Ñ1Ô1Ð1Øð 	?ð 	?ˆFØŒ )Ð+Ð+Ø"œLð 9ð 9�DØ˜fœoÔ.×2Ò2°4Ñ8Ô8Ð8Ð8ð9õ .1°´Ñ->Ô->�	˜&œ/Ñ*Ð*õ ˆtŒ{Ô(Ñ)Ô)¨AÒ-Ð-Ø59´[Ô5LˆI�d”kÔ1Ñ2Ø”kÔ5ð 	ð 	ˆFØŒ iÐ/Ð/Ø” 9Ð,Ð,Ý•S˜ 6¤?Ô3Ñ4Ô4µs¸6¼<Ñ7HÔ7HÑHÑIÔIÈQÒNÐNÝ�˜Vœ\Ñ*Ô*¨T¬[Ô-FÑFÑGÔGÈ1ÒLÐLØ.3�”Ô+Ø�t�tøàˆ4r6   c                 ó  — d|j         fd|j        fd|j         fd|j         ffD ]\  }}t	          d|›d|›�¦  «         Œ|j        r7d|j        j        fd|j        j        ffD ]\  }}t	          d|›d|›�¦  «         Œt	          d¦  «         d	S )
z4Print the data of a source entry to the command linezURI:zComps:zEnabled:zValid:ú z	MatchURI:zBaseURI:rv   N)Úurirª   ÚdisabledÚinvalidÚprintr©   Ú	match_uriÚbase_uri)r3   r²   ÚlabelrE   s       r4   Úprint_source_entryz%SoftwareProperties.print_source_entryG  sÌ   € à" F¤JÐ/Ø$ f¤lÐ3Ø&¨F¬OÐ(;Ð<Ø$¨&¬.Ð&8Ð9ð;ð )ð )‰ˆ�õ 	ˆ˜%˜%˜%  Ð'Ñ(Ô(Ð(Ð(Ø„ð -Ø +¨V¬_Ô-FÐGØ *¨F¬OÔ,DÐEðGð 	-ð 	-‰NˆU�EåˆE˜e˜e˜e U UÐ+Ñ,Ô,Ð,Ð,Ý	ˆ$�K„K€K€K€Kr6   c                 ó˜   — t          d¦  «         | j        D ]#}t          |                     ¦   «         ¦  «         Œ$t          d¦  «         dS )zPrint the complete sources.listzSTART SOURCES.LIST:zEND SOURCES.LIST
N)rº   r    rG   ©r3   r²   s     r4   Úmassive_debug_outputz'SoftwareProperties.massive_debug_outputT  sQ   € å	Ð
Ñ Ô Ð ØÔ"ð ð ˆÝˆf�jŠj‰lŒlÑÔÐÐÝ	Ð
ÑÔÐÐÐr6   c                 óz   — || j         _        | j                              |¦  «        }|                      ¦   «          |S )z! change the main download server )r"   Údefault_serverÚchange_serverÚset_modified_sourceslist)r3   ÚserverÚress      r4   Úchange_main_download_serverz.SoftwareProperties.change_main_download_server[  s8   € à!'€D„KÔØ
Œ+×
#Ò
# FÑ
+Ô
+€CØ×!Ò!Ñ#Ô#Ð#Ø€Jr6   c                 ób   — | j                              |¦  «         |                      ¦   «          dS )z Enable a component of the distroN)r"   Úenable_componentrÅ   ©r3   r³   s     r4   rÊ   z#SoftwareProperties.enable_componentb  s0   € à„K× Ò  Ñ&Ô&Ð&Ø×!Ò!Ñ#Ô#Ð#Ð#Ð#r6   c                 ób   — | j                              |¦  «         |                      ¦   «          dS )z!Disable a component of the distroN)r"   Údisable_componentrÅ   rË   s     r4   rÍ   z$SoftwareProperties.disable_componentg  s0   € à„K×!Ò! $Ñ'Ô'Ð'Ø×!Ò!Ñ#Ô#Ð#Ð#Ð#r6   c                 óL   — | j         j        j        D ]}|j        |k    r|c S Œd S ©N)r"   r®   Úchildrenr~   )r3   r~   r©   s      r4   Ú_find_template_from_stringz-SoftwareProperties._find_template_from_stringl  s>   € Ø”KÔ/Ô8ð ð ˆØ	Œ˜$Ò	Ð	Øˆˆˆð 
ðð r6   c                 óR  — t          |t          ¦  «        r|                      |¦  «        }| j        j        D ]'}|j        |k    r| j                             |¦  «         Œ(| j        j        D ]'}|j        |k    r| j                             |¦  «         Œ(|  	                    ¦   «          dS )ú7Enable a child repo of the distribution main repositoryN)
Ú
isinstancerG   rÑ   r"   r¨   r©   r    Úremover¤   rÅ   )r3   r©   r²   s      r4   Údisable_child_sourcez'SoftwareProperties.disable_child_sourceq  s±   € å�(�CÑ Ô ð ;Ø×0Ò0°Ñ:Ô:€hà”+Ô+ð ,ð ,ˆØŒ?˜hÒ&Ð&ØÔ×#Ò# FÑ+Ô+Ð+øØ”+Ô1ð ,ð ,ˆØŒ?˜hÒ&Ð&ØÔ×#Ò# FÑ+Ô+Ð+øØ×!Ò!Ñ#Ô#Ð#Ð#Ð#r6   c                 ó  — t          |t          ¦  «        r|                      |¦  «        }|j        dk    r| j        j        }n|j        }| j                             ||j        ¬¦  «         |                      ¦   «          dS )rÓ   N)r·   Údist)	rÔ   rG   rÑ   r¼   r"   rÃ   Ú
add_sourcer~   rÅ   )r3   r©   Ú	child_uris      r4   Úenable_child_sourcez&SoftwareProperties.enable_child_source~  s€   € å�(�CÑ Ô ð ;Ø×0Ò0°Ñ:Ô:€hð Ô˜DÒ Ð Ø”KÔ.ˆ	ˆ	àÔ%ˆ	Ø„K×Ò˜y¨x¬}ÐÑ=Ô=Ð=Ø×!Ò!Ñ#Ô#Ð#Ð#Ð#r6   c                 ó   — g }|                      | j        j        ¦  «         |                      | j        j        ¦  «         | j        j        D ]}| j                             |¦  «         Œ|                      ¦   «          dS )z%Remove all distro source code sourcesN)r¦   r"   r§   r¨   r¤   r    rÕ   rÅ   ©r3   r±   r²   s      r4   Údisable_source_code_sourcesz.SoftwareProperties.disable_source_code_sourcesŒ  s{   € à€GØ‡N‚N�4”;Ô+Ñ,Ô,Ð,Ø‡N‚N�4”;Ô,Ñ-Ô-Ð-à”+Ô1ð (ð (ˆØÔ×Ò Ñ'Ô'Ð'Ð'Ø×!Ò!Ñ#Ô#Ð#Ð#Ð#r6   c                 ó   — g }|                      | j        j        ¦  «         |                      | j        j        ¦  «         | j        j        D ]}| j                             |¦  «         Œ|D ]V}| j                             d|j        |j	        |j
        d| j        j                             |¦  «        dz   |j        ¦  «         ŒW| j        j        D ]j}| j                             d| j        j        j        | j        j        j        |j
        d| j        j                             |¦  «        dz   |j        ¦  «         Œk|                      ¦   «          dS )z0Enable source code source for all distro sourcesúdeb-srczAdded by software-propertiesr	   N)r¦   r"   r§   r¨   r¤   r    rÕ   r«   r·   rØ   rª   ÚlistÚindexÚfiler¬   r®   r¼   r~   rÅ   rÝ   s      r4   Úenable_source_code_sourcesz-SoftwareProperties.enable_source_code_sources–  sZ  € à€GØ‡N‚N�4”;Ô+Ñ,Ô,Ð,Ø‡N‚N�4”;Ô,Ñ-Ô-Ð-ð ”+Ô1ð (ð (ˆØÔ×Ò Ñ'Ô'Ð'Ð'àð *ð *ˆØÔ×Ò˜YØ#œZØ#œ[Ø#œ\Ø;Ø!Ô-Ô2×8Ò8¸Ñ@Ô@ÀÑBØ#œ[ñ	*ô 	*ð 	*ð 	*ð ”+Ô+ð *ð *ˆØÔ×Ò˜YØ!œ[Ô8ÔAØ!œ[Ô8Ô=Ø#œ\Ø;Ø!Ô-Ô2×8Ò8¸Ñ@Ô@ÀÑBØ#œ[ñ	*ô 	*ð 	*ð 	*ð 	×!Ò!Ñ#Ô#Ð#Ð#Ð#r6   c                 óœ   — g | _         | j        j        D ]7}t          |j        |j        ¬¦  «        }| j                              |¦  «         Œ8dS )z+Store a backup of the source.list in memory©rƒ   rã   N)Úsourceslist_backupr    rá   r   rƒ   rã   r™   )r3   r²   Ú
source_bkps      r4   r'   z%SoftwareProperties.backup_sourceslist²  sY   € à €DÔØÔ"Ô'ð 3ð 3ˆÝ  f¤k°v´{ÐCÑCÔCˆ
ØÔ×&Ò& zÑ2Ô2Ð2Ð2ð3ð 3r6   c                 óz   — |                       ¦   «          | j        j        D ]}t          |¦  «        |k    r|c S Œd S rÏ   )r&   r    rá   rG   )r3   rƒ   r²   s      r4   Ú_find_source_from_stringz+SoftwareProperties._find_source_from_string¹  sO   € ð 	×ÒÑÔÐàÔ"Ô'ð ð ˆÝ	ˆV‰Œ˜Ò	Ð	Øˆˆˆð 
àˆ4r6   c                 óœ   — t          |t          ¦  «        r|                      |¦  «        }|j         |_        |                      ¦   «          dS )z&Enable or disable the selected channelN)rÔ   rG   rê   r¸   rÅ   rÀ   s     r4   Útoggle_source_usez$SoftwareProperties.toggle_source_useÃ  sM   € õ �&�#ÑÔð 5Ø×,Ò,¨VÑ4Ô4€fØ œ/Ð)€F„OØ×!Ò!Ñ#Ô#Ð#Ð#Ð#r6   c                 ó   — t          | j        j        ¦  «        D ]c\  }}t          |¦  «        |k    rK| j        j        |         j        }t          ||¦  «        | j        j        |<   |                      ¦   «           dS ŒddS )NTF)r9   r    rá   rG   rã   r   rÅ   )r3   Ú	old_entryÚ	new_entryrâ   Úentryrã   s         r4   Úreplace_source_entryz'SoftwareProperties.replace_source_entryË  s†   € å# DÔ$4Ô$9Ñ:Ô:ð ð ‰ˆ�Ý	ˆU‰Œ�yÒ	 Ð	 ØÔÔ$ UÔ+Ô0ˆÝ'2°9¸dÑ'CÔ'CˆÔÔ˜eÑ$Ø×%Ò%Ñ'Ô'Ð'Øˆtˆtð	 
!ð
 ˆ5r6   c                 óV   — |                       ¦   «          |                      ¦   «          dS )zMRevert all settings to the state when software-properties
       was launchedN)rI   Úrevert_sourceslistrV   s    r4   ÚrevertzSoftwareProperties.revertÕ  s.   € ð 	×ÒÑÔÐØ×ÒÑÔÐÐÐr6   c                 óö   — g | j         _        | j        D ]<}t          |j        |j        ¬¦  «        }| j         j                             |¦  «         Œ=|                      ¦   «          |                      ¦   «          dS )z6Restore the source list from the startup of the dialogræ   N)	r    rá   rç   r   rƒ   rã   r™   Úsave_sourceslistr&   )r3   r²   Úsource_resets      r4   ró   z%SoftwareProperties.revert_sourceslistÜ  s|   € à€DÔÔØÔ)ð 3ð 3ˆÝ"¨¬¸¼ÐEÑEÔEˆØÔÔ×$Ò$ \Ñ2Ô2Ð2Ð2Ø×ÒÑÔÐØ×ÒÑÔÐÐÐr6   c                 ó²   — d| _         | j        r | j        j        r|                      ¦   «          |                      ¦   «          |                      ¦   «          dS )zCThe sources list was changed and now needs to be saved and reloadedTN)r%   r   Úmassive_debugrÁ   rö   r&   rV   s    r4   rÅ   z+SoftwareProperties.set_modified_sourceslistå  s\   € à $€DÔØ„|ð $˜œÔ2ð $Ø×!Ò!Ñ#Ô#Ð#Ø×ÒÑÔÐØ×ÒÑÔÐÐÐr6   c                 ó.   — |                       ¦   «          dS )z+Write the changed apt configuration to fileN)rH   rV   s    r4   rY   z&SoftwareProperties.set_modified_configí  s   € à×ÒÑÔÐÐÐr6   c                 ó  — |j         dk    rÓ|j        r‡dt          |j        ¦  «                             ¦   «         ›d|j        ›�}t          |j        ¦  «        dk    r|j        D ]
}|d|z  z  }Œ|j        dv r|dt          d¦  «        z  z  }|d|j	        z  z  }nCd|j	        ›d	|j        ›d
�}|j        D ]
}|d|z  z  }Œ|j        dv r|dt          d¦  «        z  z  }|S d|j         j
        z  }|j        dv r|dt          d¦  «        z  z  }|j        r|d|j        z  z  }|j         j        dk    rT|j        D ]L}|j                              |¦  «        r(|j         j        D ]}|j        |k    r|d|j
        z  z  }ŒŒD|d|z  z  }ŒM|S )z5Render a nice output to show the source in a treeviewNz<b>z</b> r	   z %s)rà   zrpm-srcz(Source Code)z
%sr¶   z</b>z	<b>%s</b>z (%s)zSource CodeF)r©   Úcommentr   ry   rØ   r£   rª   rm   Ú_r·   ÚdescriptionÚchildÚhas_componentÚ
componentsr~   )r3   r²   ÚcontentsÚcr³   s        r4   Úrender_sourcez SoftwareProperties.render_sourceñ  sü  € à„˜$ÒÐØŒ>ð 	7ð 	7Ý)/°´Ñ)?Ô)?×)EÒ)EÑ)GÔ)GÐ)GÐ)GØ)/¬¨ð6ˆHõ �6”<Ñ Ô  1Ò$Ð$Øœð *ð *�AØ ¨¡	Ñ)�H�HØŒ{Ð4Ð4Ð4Ø˜E¥A oÑ$6Ô$6Ñ6Ñ6�Ø˜ ¤Ñ+Ñ+ˆHˆHð	7ð *0¬¨¨°V´[°[°[ÐAˆHØ”\ð &ð &�Ø˜E A™IÑ%��ØŒ{Ð4Ð4Ð4Ø˜E¥A oÑ$6Ô$6Ñ6Ñ6�Øˆð  ¤Ô!<Ñ<ˆØŒ;Ð0Ð0Ð0Ø˜¥! MÑ"2Ô"2Ñ2Ñ2ˆHØŒ>ð 	.Ø�u˜vœ~Ñ-Ñ-ˆHØŒ?Ô  EÒ)Ð)Øœð .ð .�Ø”?×0Ò0°Ñ6Ô6ð .ð $œ_Ô7ð ?ð ?˜Øœ6 Tš>˜>Ø$¨°´Ñ(>Ñ>˜Høð?ð  ¨¡Ñ-�H�HØˆr6   c                 ó<  — d}d}d}d}t          dd¦  «        }|j        r&d}|j        j        }|j        j        | j        k    rd}n"|j        ›d|j        ›d|j        ›�}|j        rd}|j	         
                    d¦  «        rd}|||||                     |¦  «        fS )z&extract attributes to sort the sourcesr	   Ú
0123456789Ú
9876543210r   r¶   Úsrc)r   r©   rþ   Údistributionr"   r·   rØ   rª   rü   rm   ÚfindÚ	translate)r3   r²   Úcur_sysÚhas_templateÚhas_commentÚ	is_sourceÚrevert_numbersÚdescs           r4   Úget_comparablez!SoftwareProperties.get_comparable  sÀ   € à€gØ€lØ€kØ€iÝ  ¨|Ñ<Ô<€nØ	Œð ØˆØŒÔ*ˆØŒ?Ô'¨4¬;Ò6Ð6ØˆGøà%œz˜z˜z¨6¬;¨;¨;¸¼¸ÐEˆ$ØŒ^ð ØˆkØ	Œ×	Ò	˜%Ñ	 Ô	 ð Øˆ)Ø�| [°)Ø�nŠn˜^Ñ,Ô,ð.ð .r6   c                 óì   — g }| j         j        D ]d}|j        s[|| j        j        vrM|| j        j        vr?|| j        j        vr1|| j        j        vr#|| j        j        vr| 	                    |¦  «         Œe|S )z>Return a list of sources that are not part of the distribution)
r    rá   r¹   r"   r§   r¬   r¨   Údisabled_sourcesr¤   r™   )r3   Úisv_sourcesr²   s      r4   Úget_isv_sourcesz"SoftwareProperties.get_isv_sources-  s‘   € à€KØÔ"Ô'ð 'ð 'ˆØŒ~ð 	'Ø˜$œ+Ô2Ð2Ð2Ø˜$œ+Ô3Ð3Ð3Ø˜$œ+Ô3Ð3Ð3Ø˜$œ+Ô6Ð6Ð6Ø˜œÔ8Ð8Ð8Ø×Ò˜vÑ&Ô&Ð&øØÐr6   c                 ó   — | j         j        S )z-Return the list of CDROM based distro sources)r"   r¬   rV   s    r4   Úget_cdrom_sourcesz$SoftwareProperties.get_cdrom_sources:  s   € àŒ;Ô$Ð$r6   c                 ó,   — |j         | j        j        v dfS )z®Return a tuple: the first value describes if a component is enabled
       in the Internet repositories. The second value describes if the
       first value is inconsistent.F)r~   r"   Údownload_compsrË   s     r4   Úget_comp_download_statez*SoftwareProperties.get_comp_download_state>  s   € ð
 ŒI˜œÔ3Ð3°UÐ;Ð;r6   c                 óz  — g }| j         j        D ]'}|j        |k    r|                     |j        ¦  «         Œ(t          |¦  «        dk    r/t          | j         j        t          |¦  «        z  ¦  «        dk    rdS t          |¦  «        dk    r/t          | j         j        t          |¦  «        z  ¦  «        dk    rdS dS )zËReturn a tuple: the first value describes if a component is enabled
       in one of the child source that matcth the given template.
       The second value describes if the first value is inconsistent.r   )TF)FT)FF)r"   r¨   r©   r¦   rª   r£   r¯   r   )r3   r©   rª   rÿ   s       r4   Úget_comp_child_statez'SoftwareProperties.get_comp_child_stateE  s¶   € ð €EØ”Ô*ð &ð &ˆØŒ>˜XÒ%Ð%Ø�LŠL˜œÑ%Ô%Ð%øÝ
ˆ5�z„z�A‚~€~ÝˆDŒKÔ%­¨E©
¬
Ñ2Ñ3Ô3°qÒ8Ð8àˆ}Ý	ˆU‰Œ�aŠˆÝˆDŒKÔ%­¨E©
¬
Ñ2Ñ3Ô3°qÒ8Ð8ð ˆmð ˆ~r6   c                 ó„   — | j                              ¦   «          g | _        | j                             | j         ¦  «         d S rÏ   )r    ÚrefreshÚsourceslist_visibler"   Úget_sourcesrV   s    r4   r&   z%SoftwareProperties.reload_sourceslistZ  s>   € ØÔ×ÒÑÔÐØ€DÔØ„K×Ò˜DÔ,Ñ-Ô-Ð-Ð-Ð-r6   c                 óª  — | j         dz   | j         dz   | j         dz   g}|D ]#}t          j                             |¦  «        r nSŒ$t	          d¦  «         t          |d         d¦  «        5 }|                     d¦  «         ddd¦  «         n# 1 swxY w Y   d	}t          j                             |¦  «        rZt          j        |¦  «        t          j	                 }|t          j
        z  s't	          d
|z  ¦  «         t          j        |d¦  «         |D �]>}g }t          j                             |¦  «        �rt          |d¦  «        5 }|                     ¦   «         }ddd¦  «         n# 1 swxY w Y   t          j                             d¦  «        }t          |d¦  «        5 }|D ]L}|                     ¦   «         D ] }	|                     d|	z  ¦  «        dk    r nŒ!|                     |¦  «         ŒM|                     ¦   «         D ]1}
|                     d|
›d|                     |
¦  «        ›d�¦  «         Œ2	 ddd¦  «         n# 1 swxY w Y   �Œ@dS )z+Write the current apt configuration to filez/etc/apt/apt.conf.d/10periodicz#/etc/apt/apt.conf.d/20auto-upgradesz+/etc/apt/apt.conf.d/15adept-periodic-updatezNo config found, creating oner   rr   Ú Nz/etc/cron.daily/aptz file '%s' not executable, fixingií  rs   zAPT::PeriodiczAPT::Periodic::%szAPT::Periodic::z "z";
)r   rO   rP   r    rº   rw   rx   rQ   ÚstatÚST_MODEÚS_IXUSRÚchmodÚ	readlinesr   r   Úsubtreerá   r
  rC   )r3   Ú	conffilesr�   ÚacÚpermÚperiodicÚcontentÚcnfrƒ   r�   r€   s              r4   rH   zSoftwareProperties.write_config_  s,  € ð ”Ð>Ñ>Ø”ÐCÑCØ”ÐKÑKðM€Ið
 ð ð ˆÝ	Œ�Š˜Ñ	Ô	ð Øˆðõ Ð+Ñ,Ô,Ð,Ý�	˜!”˜cÑ"Ô"ð  aØ	�Š�‰Œˆðð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð ð 
€BÝ	„w‡~‚~�bÑÔð ÝŒW�R‰[Œ[�œÔ&€dØ•T”\Ñ!ð ÝÐ0°2Ñ5Ñ6Ô6Ð6Ý
Œ��UÑÔÐð ð Hñ Hˆà€gÝ	Œ�Š˜Ñ	!Ô	!ñ HÝ�(˜CÑ Ô ð 	" AØ—K’K‘M”Mˆ'ð	"ð 	"ð 	"ñ 	"ô 	"ð 	"ð 	"ð 	"ð 	"ð 	"ð 	"øøøð 	"ð 	"ð 	"ð 	"åŒn×$Ò$ _Ñ5Ô5ˆõ �(˜CÑ Ô ð 
	H AØð ð ˆdØ—x’x‘z”zð ð �Ø—’Ð.°#Ñ6Ñ7Ô7¸1Ò<Ð<Ø�ð =ð �gŠg�d‰mŒmˆmøð —8’8‘:”:ð Hð HˆaØ�GŠGˆG°Q°Q°Q¸¿
º
À1¹¼¸¸ÐFÑGÔGÐGÐGðHð
	Hð 
	Hð 
	Hñ 
	Hô 
	Hð 
	Hð 
	Hð 
	Hð 
	Hð 
	Hð 
	Høøøð 
	Hð 
	Hð 
	Hð 
	HùðHð Hs7   Á)BÂBÂBÅE)Å)E-	Å0E-	Æ#BIÉI
	ÉI
	c                 ól   — | j                              d¦  «         | j                              ¦   «          dS )zQBackup the existing sources.list files and write the current
       configurationz.saveN)r    ÚbackupÚsaverV   s    r4   rö   z#SoftwareProperties.save_sourceslist�  s6   € ð 	Ô×Ò˜GÑ$Ô$Ð$ØÔ×ÒÑÔÐÐÐr6   c                 ó  — t          |¦  «        }t          j                             | j        ¦  «        rÙt          j        d| j        z  ¦  «        D ]¼}t          |¦  «        5 }|D ]�}|                     ¦   «                              d¦  «        rŒ*|t          |¦  «        k    rRt          j         	                    t          j         
                    |¦  «        ¦  «        d         c cddd¦  «         c S Œ�	 ddd¦  «         n# 1 swxY w Y   Œ½dS )zs
    helper that checks if a given line is in the source list
    return the channel name or None if not found
    z	%s/*.listú#r   N)r   rO   rP   rQ   ÚCHANNEL_PATHÚglobrw   ry   rz   ÚsplitextÚbasename)r3   ÚsrclineÚsrcentryÚfilenamer�   rƒ   s         r4   Ú_get_channel_from_linez)SoftwareProperties._get_channel_from_line“  s~  € õ
 ˜7Ñ#Ô#€HÝ	„w‡~‚~�dÔ'Ñ(Ô(ð EÝ”i ¨dÔ.?Ñ ?Ñ@Ô@ð Eð Eˆ(Ý�(‰^Œ^ð 	E˜qØð Eð EˆdØ�zŠz‰|Œ|×&Ò& sÑ+Ô+ð ØØ�; tÑ,Ô,Ò,Ð,Ý”W×%Ò%¥b¤g×&6Ò&6°xÑ&@Ô&@ÑAÔAÀ!ÔDÐDÐDð	Eð 	Eð 	Eð 	Eñ 	Eô 	Eð 	Eð 	Eð 	Eð 	Eð -ðEð	Eð 	Eð 	Eñ 	Eô 	Eð 	Eð 	Eð 	Eð 	Eð 	Eð 	Eøøøð 	Eð 	Eð 	Eð 	Eøð ˆ4s   Á!BDÃ3DÄD	ÄD	c                 ó®   — |                      ¦   «         j        }|                      |¦  «        }|r$| j        ›d|›d�}|                      |¦  «         dS dS )zƒ
    helper that adds the gpg key of the channel to the apt
    keyring *if* the channel is in /usr/share/app-install/channels
    r   z.keyTF)r   rƒ   r<  r5  Úadd_key)r3   Úshortcutr9  ÚchannelÚkeyps        r4   Ú&check_and_add_key_for_channel_shortcutz9SoftwareProperties.check_and_add_key_for_channel_shortcut£  sf   € ð
 ×"Ò"Ñ$Ô$Ô)€GØ×)Ò)¨'Ñ2Ô2€GØð Ø Ô-Ð-Ð-¨w¨w¨wÐ7€dØ
‡l‚l�4ÑÔÐØˆTØˆ5r6   c                 ó   — dS )z) abstract interface to keep the UI alive N© rV   s    r4   Úupdate_interfacez#SoftwareProperties.update_interface°  s   € € € r6   c                 óò   — |                      d¦  «        s|S |                     ¦   «         d         }	 |                     dd¦  «        d         }n# t          $ r d}Y nw xY wd|›d| j        j        ›d|›�}|S )zÍ
    short cut - this:
      apt-add-repository http://packages.medibuntu.org free non-free
    same as
      apt-add-repository 'deb http://packages.medibuntu.org/ '$(lsb_release -cs)' free non-free'
    Úhttpr   r¶   r	   Úmainzdeb )rz   rŠ   Ú
IndexErrorr"   Úcodename)r3   rƒ   ÚrepoÚareass       r4   Úexpand_http_linez#SoftwareProperties.expand_http_line³  s”   € ð �?Š?˜6Ñ"Ô"ð Ø€kØ�:Š:‰<Œ<˜Œ?€DðØ—
’
˜3˜qÑ!Ô! !Ô$ˆˆøÝð ð ð Øˆˆˆðøøøøà"˜d˜d D¤KÔ$8Ð$8Ð$8¸%¸%ÐA€DØ€Ks   ³A ÁAÁAFc                 ó–   — 	 t          |                     ¦   «         ¦  «        }n# t          $ r Y dS w xY w|                      ||¦  «        S )z*
    Add a source for the given line.
    F)r   ry   r   Úadd_source_from_shortcut)r3   rƒ   Úenable_source_coder?  s       r4   Úadd_source_from_linez'SoftwareProperties.add_source_from_lineÄ  sY   € ðÝ# D§J¢J¡L¤LÑ1Ô1ˆˆøÝ#ð ð ð ØˆUˆUðøøøð ×(Ò(¨Ð3EÑFÔFÐFs   ‚!$ ¤
2±2c           	      ó  — |                      ¦   «         j        }|j        }|                      |¦  «        }|rdnd}||dd…         z   }t          ||¦  «        }t          ||¦  «        }|j        s|j        rdS |                      |¦  «        s|                     ¦   «          | j                             |j	        |j
        |j        |j        |j        |j        |j        ¬¦  «         | j                             ||j
        |j        |j        |j        |j        |j        ¬¦  «         |                      ¦   «          | j        r?| j        j        r3ddl}	|	                     ¦   «         }
|
                     |j        ¬¦  «         d	S )
zŽ
    Add a source with the given shortcut and add the signing key if the
    site is a known channel or the shortcut implementer adds it.
    rà   z	# deb-srcr   NF)rü   rã   Úarchitecturesr   )Úsources_listT)r   rƒ   Úsourceparts_filerM  r¹   rB  r>  r    r«   rm   r·   rØ   rª   rü   rã   rS  rÅ   r   r—   ÚaptÚCache)r3   r?  rP  Údeb_linerã   Údebsrc_entry_typeÚdebsrc_lineÚnew_deb_entryÚnew_debsrc_entryrV  Úcaches              r4   rO  z+SoftwareProperties.add_source_from_shortcutÏ  s«  € ð ×#Ò#Ñ%Ô%Ô*€HØÔ$€DØ×$Ò$ XÑ.Ô.€HØ%7ÐH˜	˜	¸[ÐØ# h¨q¨r¨r¤lÑ2€KÝ ¨$Ñ/Ô/€MÝ" ;°Ñ5Ô5ÐØÔð Ð 0Ô 8ð ØˆUØ×6Ò6°xÑ@Ô@ð Ø×ÒÑÔÐØÔ×Ò˜Ô+Ø&Ô*Ø&Ô+Ø&Ô,Ø!.Ô!6Ø+Ô0Ø'4Ô'Bð ñ Dô Dð Dð 	Ô×ÒÐ*Ø)Ô-Ø)Ô.Ø)Ô/Ø!1Ô!9Ø.Ô3Ø'7Ô'Eð ñ Gô Gð Gð 	×!Ò!Ñ#Ô#Ð#Ø„|ð 9˜œÔ+ð 9Øˆ
ˆ
ˆ
Ø—	’	‘”ˆØ�ŠÐ"2Ô"7ˆÑ8Ô8Ð8Øˆ4r6   Tc                 óü  — |r°t          |t          ¦  «        r,|                      |¦  «        }|                      |d¦  «         nm|�k|                      |d¦  «         t	          j        |¦  «        }d|_        d|_        |                      |d¦  «         d|_        |                      |d¦  «         dS t          |t          ¦  «        r|                      |¦  «        }|€dS |j        t          j	         
                    d¦  «        k    r3| j        j                             t          d|j        ¬¦  «        ¦  «         	 | j                             |¦  «         n# t           $ r Y nw xY w|                      ¦   «          dS )zRemove the given sourceTNFrà   zDir::Etc::sourcelistr#  )rã   )rÔ   rG   rê   Úremove_sourcer   rm   r¸   rã   r   r   Ú	find_filer    rá   r™   r   rÕ   r‹   rÅ   )r3   r²   Úremove_source_codes      r4   r_  z SoftwareProperties.remove_sourceõ  s�  € àð Ý	�F�CÑ	 Ô	 ð *à×.Ò.¨vÑ6Ô6ˆØ×Ò˜6 4Ñ(Ô(Ð(Ð(ØÐØ×Ò˜6 5Ñ)Ô)Ð)õ ”˜6Ñ"Ô"ˆØˆŒØˆŒØ×Ò˜6 5Ñ)Ô)Ð)ØˆŒØ×Ò˜6 5Ñ)Ô)Ð)Ø€fõ �&�#ÑÔð 5Ø×,Ò,¨VÑ4Ô4€fØ€~Ø€fð
 „{•g”n×.Ò.Ð/EÑFÔFÒFÐFØ
ÔÔ×"Ò"¥;¨r¸¼Ð#DÑ#DÔ#DÑEÔEÐEðØ
Ô×Ò˜fÑ%Ô%Ð%Ð%øÝð ð ð ð
 €dðøøøð 	×!Ò!Ñ#Ô#Ð#Ð#Ð#s   Ä=E Å
E%Å$E%c                 óŽ   — t           j                             |¦  «        sdS 	 | j                             |¦  «        }|S #  Y dS xY w)z7Add a gnupg key to the list of trusted software vendorsF)rO   rP   rQ   r-   r«   )r3   rP   rÇ   s      r4   r>  zSoftwareProperties.add_key  sL   € åŒ7�>Š>˜$ÑÔð ØˆuðØŒl×Ò˜tÑ$Ô$ˆØˆ
øðØˆuˆuøøøs	   £? ¿Ac                 óÔ   — t          j        ¦   «         }|                     |                     d¦  «        ¦  «         |                     ¦   «          |                      |j        ¦  «        S )z<Add a gnupg key from a utf-8 data string (e.g. copy-n-paste)zutf-8)Útempfiler   rx   Úencoder{   r>  r~   )r3   ÚkeydataÚtmps      r4   Úadd_key_from_dataz$SoftwareProperties.add_key_from_data'  sO   € å
Ô
%Ñ
'Ô
'€CØ‡I‚Iˆg�nŠn˜WÑ%Ô%Ñ&Ô&Ð&Ø‡I‚I�K„K€KØ�<Š<˜œÑ!Ô!Ð!r6   c                 óL   — 	 | j                              |¦  «         dS #  Y dS xY w)z<Remove a gnupg key from the list of trusted software vendorsTF)r-   Úrm)r3   Úkeyids     r4   Ú
remove_keyzSoftwareProperties.remove_key.  s0   € ðØŒ�Š˜ÑÔÐØˆtøðØˆuˆuøøøs   ‚ ž#c                 óJ   — 	 | j                              ¦   «          dS #  Y dS xY w)z Run apt-key update TF)r-   r—   rV   s    r4   Úupdate_keyszSoftwareProperties.update_keys6  s0   € ðØ
„l×ÒÑÔÐØˆTøðØˆUˆUøøøs   ‚ �"c                 óø   — t          |t          j        ¦  «        sJ ‚|j        }|r|j        }|j        }n7t          j        |¦  «        }|                     |¦  «        }|j        }|j        }|j        ›d|›d|›d�S )z" Return the PackageKit package id ú;)	rÔ   r   ÚPackageÚcurrent_verÚver_strÚarchÚDepCacheÚget_candidate_verr~   )r3   Ú	apt_cacheÚpkgÚcur_verÚverrt  ÚdepcacheÚ	candidates           r4   Úget_package_idz!SoftwareProperties.get_package_id>  s†   € å�c�7œ?Ñ+Ô+Ð+Ð+Ð+ØŒo€GØð ØŒoˆØŒ|ˆˆåÔ# IÑ.Ô.ˆØ×.Ò.¨sÑ3Ô3ˆ	ØÔˆØŒ~ˆØœ(˜(˜( C C C¨¨¨Ð.Ð.r6   c                 óF  — t          j        | ¦  «        }|                     |¦  «        }g }	 |j                             d¦  «        D ]?}|D ]:\  }}}	|                     |¦  «        dk    r|                     | |         ¦  «         Œ;Œ@n# t          t          f$ r g cY S w xY w|S )zF Get the package dependencies, which can be filtered out by a pattern ÚDependséÿÿÿÿ)	r   ru  rv  Údepends_list_strrh   r
  r™   ÚKeyErrorÚ	TypeError)
rw  ÚpackageÚpatternr{  r|  ÚdependenciesÚdep_listÚdep_nameÚdep_verÚdep_ops
             r4   Úget_dependenciesz#SoftwareProperties.get_dependenciesL  sÕ   € õ Ô 	Ñ*Ô*€HØ×*Ò*¨7Ñ3Ô3€Ià€LðØ!Ô2×6Ò6°yÑAÔAð 	=ð 	=ˆHØ-5ð =ð =Ñ)�˜' 6Ø—=’= Ñ)Ô)¨RÒ/Ð/Ø ×'Ò'¨	°(Ô(;Ñ<Ô<Ð<øð=ð	=øõ •iÐ ð ð ð Øˆ	ˆ	ˆ	ðøøøð Ðs   ­AB ÂBÂB)NNr   )F)TrÏ   )BÚ__name__Ú
__module__Ú__qualname__r5  rd   rá   Úrangere   ÚRELEASE_UPGRADES_LTSÚRELEASE_UPGRADES_NEVERrj   r5   r2   r(   rI   rW   r[   r^   r`   rp   r„   rŽ   rž   r¡   r´   r¾   rÁ   rÈ   rÊ   rÍ   rÑ   rÖ   rÛ   rÞ   rä   r'   rê   rì   rñ   rô   ró   rÅ   rY   r  r  r  r  r  r  r&   rH   rö   r<  rB  rE  rM  rQ  rO  r_  r>  rh  rl  rn  r}  Ústaticmethodr‹  rD  r6   r4   r   r   C   s¿  € € € € € ð 2€,ð AÐð €dˆ5ˆ5�‰8Œ8�n„nñ	ØØØð ˜hØ˜eØ˜gð!Ðð'+ð '+ð '+ð '+ðRð ð ð-ð -ð -ðð ð ðð ð ð.ð ð ð(%ð %ð %ðLð Lð Lð(ð (ð (ð&ð ð ð0ð ð ð ð ð ð2;ð ;ð ;ð%ð %ð %ðNð ð ð ð  ð  ðð ð ð$ð $ð $ð
$ð $ð $ð
ð ð ð
$ð $ð $ð$ð $ð $ð$ð $ð $ð$ð $ð $ð83ð 3ð 3ðð ð ð$ð $ð $ðð ð ðð ð ðð ð ðð ð ðð ð ð%ð %ð %ðN.ð .ð .ð*ð ð ð%ð %ð %ð<ð <ð <ðð ð ð*.ð .ð .ð
,Hð ,Hð ,Hð\ð ð ðð ð ð ð ð ð0ð 0ð 0ðð ð ð"	Gð 	Gð 	Gð 	Gð$ð $ð $ð $ðL&$ð &$ð &$ð &$ðPð ð ð"ð "ð "ðð ð ðð ð ð/ð /ð /ð ðð ð ñ „<ðð ð r6   r   Ú__main__)-r   r   Úhashlibr   r’   rO   r6  r|   r8   r0   rd  Ústringr   ÚImportErrorrG   r$  r*   r+   r   Úxml.sax.saxutilsr   Úconfigparserr   r   rý   r!   Úaptsources.distror@   r
   Úaptsources.sourceslistr   r   Ú"softwareproperties.shortcuthandlerr   Úsoftwareproperties.shortcutsr   Úgi.repositoryr   Úobjectr   rŒ  Úsprº   rp   r„   rD  r6   r4   ú<module>r      sˆ  ðð4 €€€Ø €€€Ø Ð Ð Ð Ð Ð Ø 	€	€	€	Ø 	€	€	€	Ø €€€Ø €€€Ø Ð Ð Ð Ø €€€Ø €€€ðØÐÐÐÐÐÐøØð ð ð ØŒm€)€)€)ðøøøà €€€ðØ€,€,€,€,øØð ð ð ØÐÐÐÐÐðøøøð (Ð 'Ð 'Ð 'Ð 'Ð 'Ø #Ð #Ð #Ð #Ð #Ð #ð(Ø'Ð'Ð'Ð'Ð'Ð'Ð'øØð (ð (ð (Ø'Ð'Ð'Ð'Ð'Ð'Ð'Ð'ð(øøøà  Ð  Ð  Ð  Ð  Ð  à Ð Ð Ð Ø Ð Ð Ð Ø Ð Ð Ð à Ð Ð Ð Ð Ð Ø =Ð =Ð =Ð =Ð =Ð =Ð =Ð =Ø GÐ GÐ GÐ GÐ GÐ GØ 9Ð 9Ð 9Ð 9Ð 9Ð 9à Ð Ð Ð Ð Ð ðXð Xð Xð Xð X˜ñ Xô Xð Xðv ˆzÒÐØÐÑÔ€"Ø€%ˆ×&Ò&Ñ(Ô(Ñ)Ô)Ð)Ø× Ò  Ñ#Ô#Ð#Ð#Ð#ð Ðs3   ¬3 ³AÁAÁ
A Á	AÁAÁ+A2 Á2B Á?B 